From 613139e7bef81d3573e7988a47eb6765f3de347a Mon Sep 17 00:00:00 2001 From: Unknwon Date: Wed, 23 Oct 2019 23:03:17 -0700 Subject: [PATCH] Enable Go modules (#5835) * Remove vendor * Enable Go modules * ci: add command to fetch dependencies * ci: update setting * ci: update settings * Require Go 1.11 * Rename module name to gogs.io/gogs --- .travis.yml | 7 +- appveyor.yml | 11 +- cmd/admin.go | 4 +- cmd/backup.go | 8 +- cmd/hook.go | 14 +- cmd/import.go | 4 +- cmd/restore.go | 8 +- cmd/serv.go | 8 +- cmd/web.go | 30 +- conf/locale/locale_en-US.ini | 4 +- go.mod | 69 + go.sum | 375 + gogs.go | 8 +- models/access.go | 2 +- models/action.go | 10 +- models/admin.go | 6 +- models/attachment.go | 4 +- models/comment.go | 8 +- models/git_diff.go | 6 +- models/issue.go | 10 +- models/issue_label.go | 4 +- models/issue_mail.go | 8 +- models/login_source.go | 16 +- models/migrations/migrations.go | 10 +- models/migrations/v13.go | 4 +- models/migrations/v14.go | 2 +- models/migrations/v15.go | 6 +- models/migrations/v16.go | 4 +- models/migrations/v17.go | 2 +- models/migrations/v18.go | 4 +- models/migrations/v19.go | 2 +- models/milestone.go | 4 +- models/mirror.go | 12 +- models/models.go | 14 +- models/org.go | 2 +- models/org_team.go | 6 +- models/pull.go | 12 +- models/release.go | 6 +- models/repo.go | 20 +- models/repo_branch.go | 6 +- models/repo_editor.go | 12 +- models/repo_test.go | 4 +- models/ssh_key.go | 8 +- models/ssh_key_test.go | 2 +- models/token.go | 6 +- models/two_factor.go | 10 +- models/user.go | 12 +- models/user_mail.go | 2 +- models/webhook.go | 10 +- models/webhook_discord.go | 2 +- models/webhook_slack.go | 2 +- models/wiki.go | 6 +- pkg/auth/auth.go | 8 +- pkg/bindata/bindata.go | 4 +- pkg/context/api.go | 4 +- pkg/context/api_org.go | 2 +- pkg/context/auth.go | 6 +- pkg/context/context.go | 14 +- pkg/context/notice.go | 8 +- pkg/context/org.go | 6 +- pkg/context/repo.go | 6 +- pkg/context/user.go | 4 +- pkg/cron/cron.go | 4 +- pkg/form/form.go | 2 +- pkg/form/repo.go | 4 +- pkg/mailer/mail.go | 4 +- pkg/mailer/mailer.go | 2 +- pkg/markup/markdown.go | 4 +- pkg/markup/markdown_test.go | 4 +- pkg/markup/markup.go | 6 +- pkg/markup/markup_test.go | 4 +- pkg/markup/orgmode.go | 18 +- pkg/markup/sanitizer.go | 2 +- pkg/markup/sanitizer_test.go | 2 +- pkg/setting/setting.go | 12 +- pkg/ssh/ssh.go | 6 +- pkg/sync/unique_queue.go | 2 +- pkg/template/highlight/highlight.go | 2 +- pkg/template/template.go | 8 +- pkg/tool/tool.go | 6 +- routes/admin/admin.go | 16 +- routes/admin/auths.go | 14 +- routes/admin/notice.go | 10 +- routes/admin/orgs.go | 8 +- routes/admin/repos.go | 8 +- routes/admin/users.go | 14 +- routes/api/v1/admin/org.go | 6 +- routes/api/v1/admin/org_repo.go | 6 +- routes/api/v1/admin/org_team.go | 8 +- routes/api/v1/admin/repo.go | 6 +- routes/api/v1/admin/user.go | 12 +- routes/api/v1/api.go | 18 +- routes/api/v1/convert/convert.go | 4 +- routes/api/v1/convert/utils.go | 2 +- routes/api/v1/misc/markdown.go | 4 +- routes/api/v1/org/org.go | 8 +- routes/api/v1/org/team.go | 4 +- routes/api/v1/repo/branch.go | 6 +- routes/api/v1/repo/collaborators.go | 6 +- routes/api/v1/repo/commits.go | 8 +- routes/api/v1/repo/file.go | 6 +- routes/api/v1/repo/hook.go | 10 +- routes/api/v1/repo/issue.go | 8 +- routes/api/v1/repo/issue_comment.go | 4 +- routes/api/v1/repo/issue_label.go | 6 +- routes/api/v1/repo/key.go | 8 +- routes/api/v1/repo/label.go | 6 +- routes/api/v1/repo/milestone.go | 4 +- routes/api/v1/repo/repo.go | 12 +- routes/api/v1/user/app.go | 6 +- routes/api/v1/user/email.go | 8 +- routes/api/v1/user/follower.go | 4 +- routes/api/v1/user/key.go | 12 +- routes/api/v1/user/user.go | 10 +- routes/dev/template.go | 6 +- routes/home.go | 10 +- routes/install.go | 26 +- routes/org/members.go | 10 +- routes/org/org.go | 8 +- routes/org/setting.go | 12 +- routes/org/teams.go | 10 +- routes/repo/branch.go | 6 +- routes/repo/commit.go | 8 +- routes/repo/download.go | 6 +- routes/repo/editor.go | 14 +- routes/repo/http.go | 10 +- routes/repo/issue.go | 20 +- routes/repo/pull.go | 14 +- routes/repo/release.go | 10 +- routes/repo/repo.go | 14 +- routes/repo/setting.go | 16 +- routes/repo/view.go | 16 +- routes/repo/webhook.go | 12 +- routes/repo/wiki.go | 8 +- routes/user/auth.go | 14 +- routes/user/home.go | 12 +- routes/user/profile.go | 12 +- routes/user/setting.go | 16 +- templates/.VERSION | 2 +- vendor/README | 8 - vendor/github.com/Unknwon/cae/LICENSE | 191 - vendor/github.com/Unknwon/cae/README.md | 37 - vendor/github.com/Unknwon/cae/README_ZH.md | 29 - vendor/github.com/Unknwon/cae/cae.go | 108 - vendor/github.com/Unknwon/cae/zip/read.go | 67 - vendor/github.com/Unknwon/cae/zip/stream.go | 77 - vendor/github.com/Unknwon/cae/zip/write.go | 364 - vendor/github.com/Unknwon/cae/zip/zip.go | 238 - vendor/github.com/Unknwon/com/LICENSE | 191 - vendor/github.com/Unknwon/com/README.md | 20 - vendor/github.com/Unknwon/com/cmd.go | 161 - vendor/github.com/Unknwon/com/convert.go | 157 - vendor/github.com/Unknwon/com/dir.go | 173 - vendor/github.com/Unknwon/com/file.go | 145 - vendor/github.com/Unknwon/com/html.go | 60 - vendor/github.com/Unknwon/com/http.go | 201 - vendor/github.com/Unknwon/com/math.go | 29 - vendor/github.com/Unknwon/com/path.go | 80 - vendor/github.com/Unknwon/com/regex.go | 56 - vendor/github.com/Unknwon/com/slice.go | 87 - vendor/github.com/Unknwon/com/string.go | 253 - vendor/github.com/Unknwon/com/time.go | 115 - vendor/github.com/Unknwon/com/url.go | 41 - vendor/github.com/Unknwon/i18n/LICENSE | 191 - vendor/github.com/Unknwon/i18n/Makefile | 12 - vendor/github.com/Unknwon/i18n/README.md | 134 - vendor/github.com/Unknwon/i18n/i18n.go | 228 - vendor/github.com/Unknwon/paginater/LICENSE | 202 - vendor/github.com/Unknwon/paginater/README.md | 65 - .../github.com/Unknwon/paginater/paginater.go | 197 - vendor/github.com/beorn7/perks/LICENSE | 20 - .../beorn7/perks/quantile/exampledata.txt | 2388 - .../beorn7/perks/quantile/stream.go | 316 - vendor/github.com/boombuler/barcode/LICENSE | 21 - vendor/github.com/boombuler/barcode/README.md | 18 - .../github.com/boombuler/barcode/barcode.go | 27 - .../boombuler/barcode/qr/alphanumeric.go | 66 - .../boombuler/barcode/qr/automatic.go | 23 - .../github.com/boombuler/barcode/qr/blocks.go | 59 - .../boombuler/barcode/qr/encoder.go | 416 - .../boombuler/barcode/qr/errorcorrection.go | 29 - .../boombuler/barcode/qr/numeric.go | 56 - .../github.com/boombuler/barcode/qr/qrcode.go | 166 - .../boombuler/barcode/qr/unicode.go | 27 - .../boombuler/barcode/qr/versioninfo.go | 310 - .../boombuler/barcode/scaledbarcode.go | 134 - .../boombuler/barcode/utils/base1dcode.go | 57 - .../boombuler/barcode/utils/bitlist.go | 119 - .../boombuler/barcode/utils/galoisfield.go | 65 - .../boombuler/barcode/utils/gfpoly.go | 103 - .../boombuler/barcode/utils/reedsolomon.go | 44 - .../boombuler/barcode/utils/runeint.go | 19 - vendor/github.com/bradfitz/gomemcache/LICENSE | 202 - .../bradfitz/gomemcache/memcache/memcache.go | 666 - .../bradfitz/gomemcache/memcache/selector.go | 114 - .../github.com/chaseadamsio/goorgeous/LICENSE | 21 - .../chaseadamsio/goorgeous/README.org | 66 - .../chaseadamsio/goorgeous/goorgeous.go | 802 - .../chaseadamsio/goorgeous/gopher.gif | Bin 15232 -> 0 bytes .../chaseadamsio/goorgeous/gopher_small.gif | Bin 3270 -> 0 bytes .../chaseadamsio/goorgeous/header.go | 70 - .../denisenkom/go-mssqldb/LICENSE.txt | 27 - .../denisenkom/go-mssqldb/README.md | 149 - .../github.com/denisenkom/go-mssqldb/buf.go | 255 - .../denisenkom/go-mssqldb/charset.go | 113 - .../denisenkom/go-mssqldb/collation.go | 39 - .../denisenkom/go-mssqldb/cp1250.go | 262 - .../denisenkom/go-mssqldb/cp1251.go | 262 - .../denisenkom/go-mssqldb/cp1252.go | 262 - .../denisenkom/go-mssqldb/cp1253.go | 262 - .../denisenkom/go-mssqldb/cp1254.go | 262 - .../denisenkom/go-mssqldb/cp1255.go | 262 - .../denisenkom/go-mssqldb/cp1256.go | 262 - .../denisenkom/go-mssqldb/cp1257.go | 262 - .../denisenkom/go-mssqldb/cp1258.go | 262 - .../github.com/denisenkom/go-mssqldb/cp437.go | 262 - .../github.com/denisenkom/go-mssqldb/cp850.go | 262 - .../github.com/denisenkom/go-mssqldb/cp874.go | 262 - .../github.com/denisenkom/go-mssqldb/cp932.go | 7988 - .../github.com/denisenkom/go-mssqldb/cp936.go | 22055 -- .../github.com/denisenkom/go-mssqldb/cp949.go | 17312 -- .../github.com/denisenkom/go-mssqldb/cp950.go | 13767 - .../denisenkom/go-mssqldb/decimal.go | 115 - .../github.com/denisenkom/go-mssqldb/doc.go | 12 - .../github.com/denisenkom/go-mssqldb/error.go | 73 - .../github.com/denisenkom/go-mssqldb/log.go | 30 - .../github.com/denisenkom/go-mssqldb/mssql.go | 609 - .../denisenkom/go-mssqldb/mssql_go1.3.go | 13 - .../denisenkom/go-mssqldb/mssql_go1.3pre.go | 13 - .../denisenkom/go-mssqldb/mssql_go18.go | 71 - .../github.com/denisenkom/go-mssqldb/net.go | 99 - .../github.com/denisenkom/go-mssqldb/ntlm.go | 283 - .../denisenkom/go-mssqldb/parser.go | 257 - .../github.com/denisenkom/go-mssqldb/rpc.go | 100 - .../denisenkom/go-mssqldb/sspi_windows.go | 266 - .../github.com/denisenkom/go-mssqldb/tds.go | 1325 - .../github.com/denisenkom/go-mssqldb/token.go | 754 - .../denisenkom/go-mssqldb/token_string.go | 53 - .../github.com/denisenkom/go-mssqldb/tran.go | 111 - .../github.com/denisenkom/go-mssqldb/types.go | 1261 - .../denisenkom/go-mssqldb/uniqueidentifier.go | 74 - vendor/github.com/fatih/color/LICENSE.md | 20 - vendor/github.com/fatih/color/README.md | 175 - vendor/github.com/fatih/color/color.go | 510 - vendor/github.com/fatih/color/doc.go | 128 - vendor/github.com/go-macaron/binding/LICENSE | 191 - .../github.com/go-macaron/binding/README.md | 20 - .../github.com/go-macaron/binding/binding.go | 761 - .../github.com/go-macaron/binding/errors.go | 159 - vendor/github.com/go-macaron/cache/LICENSE | 191 - vendor/github.com/go-macaron/cache/README.md | 20 - vendor/github.com/go-macaron/cache/cache.go | 122 - vendor/github.com/go-macaron/cache/file.go | 208 - .../go-macaron/cache/memcache/memcache.go | 92 - .../cache/memcache/memcache.goconvey | 1 - vendor/github.com/go-macaron/cache/memory.go | 179 - .../go-macaron/cache/redis/redis.go | 178 - .../go-macaron/cache/redis/redis.goconvey | 1 - vendor/github.com/go-macaron/cache/utils.go | 84 - vendor/github.com/go-macaron/captcha/LICENSE | 191 - .../github.com/go-macaron/captcha/README.md | 16 - .../github.com/go-macaron/captcha/captcha.go | 241 - vendor/github.com/go-macaron/captcha/image.go | 498 - .../github.com/go-macaron/captcha/siprng.go | 277 - vendor/github.com/go-macaron/csrf/LICENSE | 191 - vendor/github.com/go-macaron/csrf/README.md | 18 - vendor/github.com/go-macaron/csrf/csrf.go | 251 - vendor/github.com/go-macaron/csrf/xsrf.go | 97 - vendor/github.com/go-macaron/gzip/LICENSE | 191 - vendor/github.com/go-macaron/gzip/README.md | 20 - vendor/github.com/go-macaron/gzip/gzip.go | 121 - vendor/github.com/go-macaron/i18n/LICENSE | 191 - vendor/github.com/go-macaron/i18n/README.md | 16 - vendor/github.com/go-macaron/i18n/i18n.go | 225 - vendor/github.com/go-macaron/inject/LICENSE | 191 - vendor/github.com/go-macaron/inject/README.md | 11 - vendor/github.com/go-macaron/inject/inject.go | 262 - vendor/github.com/go-macaron/session/LICENSE | 191 - .../github.com/go-macaron/session/README.md | 22 - vendor/github.com/go-macaron/session/file.go | 266 - .../github.com/go-macaron/session/memory.go | 217 - .../go-macaron/session/redis/redis.go | 240 - .../go-macaron/session/redis/redis.goconvey | 1 - .../github.com/go-macaron/session/session.go | 440 - vendor/github.com/go-macaron/session/utils.go | 63 - vendor/github.com/go-macaron/toolbox/LICENSE | 191 - .../github.com/go-macaron/toolbox/README.md | 110 - .../go-macaron/toolbox/healthcheck.go | 83 - .../github.com/go-macaron/toolbox/profile.go | 163 - .../go-macaron/toolbox/statistic.go | 138 - .../github.com/go-macaron/toolbox/toolbox.go | 154 - vendor/github.com/go-sql-driver/mysql/AUTHORS | 94 - .../go-sql-driver/mysql/CHANGELOG.md | 167 - .../go-sql-driver/mysql/CONTRIBUTING.md | 23 - vendor/github.com/go-sql-driver/mysql/LICENSE | 373 - .../github.com/go-sql-driver/mysql/README.md | 490 - .../go-sql-driver/mysql/appengine.go | 19 - vendor/github.com/go-sql-driver/mysql/auth.go | 422 - .../github.com/go-sql-driver/mysql/buffer.go | 160 - .../go-sql-driver/mysql/collations.go | 251 - .../go-sql-driver/mysql/connection.go | 643 - .../github.com/go-sql-driver/mysql/const.go | 174 - .../github.com/go-sql-driver/mysql/driver.go | 169 - vendor/github.com/go-sql-driver/mysql/dsn.go | 611 - .../github.com/go-sql-driver/mysql/errors.go | 65 - .../github.com/go-sql-driver/mysql/fields.go | 194 - .../github.com/go-sql-driver/mysql/infile.go | 182 - .../github.com/go-sql-driver/mysql/packets.go | 1296 - .../github.com/go-sql-driver/mysql/result.go | 22 - vendor/github.com/go-sql-driver/mysql/rows.go | 216 - .../go-sql-driver/mysql/statement.go | 211 - .../go-sql-driver/mysql/transaction.go | 31 - .../github.com/go-sql-driver/mysql/utils.go | 755 - vendor/github.com/go-xorm/builder/LICENSE | 27 - vendor/github.com/go-xorm/builder/README.md | 176 - vendor/github.com/go-xorm/builder/builder.go | 190 - .../go-xorm/builder/builder_delete.go | 22 - .../go-xorm/builder/builder_insert.go | 66 - .../go-xorm/builder/builder_select.go | 57 - .../go-xorm/builder/builder_update.go | 41 - vendor/github.com/go-xorm/builder/circle.yml | 14 - vendor/github.com/go-xorm/builder/cond.go | 87 - vendor/github.com/go-xorm/builder/cond_and.go | 61 - .../go-xorm/builder/cond_between.go | 40 - .../go-xorm/builder/cond_compare.go | 160 - vendor/github.com/go-xorm/builder/cond_eq.go | 112 - .../github.com/go-xorm/builder/cond_expr.go | 39 - vendor/github.com/go-xorm/builder/cond_in.go | 237 - .../github.com/go-xorm/builder/cond_like.go | 41 - vendor/github.com/go-xorm/builder/cond_neq.go | 94 - vendor/github.com/go-xorm/builder/cond_not.go | 77 - .../github.com/go-xorm/builder/cond_notin.go | 234 - .../github.com/go-xorm/builder/cond_null.go | 59 - vendor/github.com/go-xorm/builder/cond_or.go | 67 - vendor/github.com/go-xorm/builder/doc.go | 120 - vendor/github.com/go-xorm/builder/error.go | 16 - vendor/github.com/go-xorm/builder/go.mod | 1 - vendor/github.com/go-xorm/core/LICENSE | 27 - vendor/github.com/go-xorm/core/README.md | 116 - vendor/github.com/go-xorm/core/benchmark.sh | 1 - vendor/github.com/go-xorm/core/cache.go | 87 - vendor/github.com/go-xorm/core/circle.yml | 15 - vendor/github.com/go-xorm/core/column.go | 159 - vendor/github.com/go-xorm/core/converstion.go | 8 - vendor/github.com/go-xorm/core/db.go | 401 - vendor/github.com/go-xorm/core/dialect.go | 315 - vendor/github.com/go-xorm/core/driver.go | 27 - vendor/github.com/go-xorm/core/error.go | 8 - vendor/github.com/go-xorm/core/filter.go | 64 - vendor/github.com/go-xorm/core/go.mod | 1 - vendor/github.com/go-xorm/core/ilogger.go | 31 - vendor/github.com/go-xorm/core/index.go | 63 - vendor/github.com/go-xorm/core/mapper.go | 254 - vendor/github.com/go-xorm/core/pk.go | 26 - vendor/github.com/go-xorm/core/rows.go | 334 - vendor/github.com/go-xorm/core/scan.go | 55 - vendor/github.com/go-xorm/core/table.go | 150 - vendor/github.com/go-xorm/core/type.go | 311 - .../github.com/go-xorm/xorm/CONTRIBUTING.md | 46 - vendor/github.com/go-xorm/xorm/LICENSE | 27 - vendor/github.com/go-xorm/xorm/README.md | 444 - vendor/github.com/go-xorm/xorm/README_CN.md | 446 - vendor/github.com/go-xorm/xorm/cache_lru.go | 284 - .../go-xorm/xorm/cache_memory_store.go | 51 - vendor/github.com/go-xorm/xorm/circle.yml | 41 - vendor/github.com/go-xorm/xorm/context.go | 26 - vendor/github.com/go-xorm/xorm/convert.go | 348 - .../github.com/go-xorm/xorm/dialect_mssql.go | 562 - .../github.com/go-xorm/xorm/dialect_mysql.go | 656 - .../github.com/go-xorm/xorm/dialect_oracle.go | 906 - .../go-xorm/xorm/dialect_postgres.go | 1237 - .../go-xorm/xorm/dialect_sqlite3.go | 456 - vendor/github.com/go-xorm/xorm/doc.go | 184 - vendor/github.com/go-xorm/xorm/engine.go | 1613 - vendor/github.com/go-xorm/xorm/engine_cond.go | 233 - .../github.com/go-xorm/xorm/engine_group.go | 194 - .../go-xorm/xorm/engine_group_policy.go | 116 - .../github.com/go-xorm/xorm/engine_maxlife.go | 22 - .../github.com/go-xorm/xorm/engine_table.go | 113 - vendor/github.com/go-xorm/xorm/error.go | 49 - .../github.com/go-xorm/xorm/gen_reserved.sh | 6 - vendor/github.com/go-xorm/xorm/go.mod | 6 - vendor/github.com/go-xorm/xorm/helpers.go | 311 - .../github.com/go-xorm/xorm/helpler_time.go | 21 - vendor/github.com/go-xorm/xorm/interface.go | 109 - vendor/github.com/go-xorm/xorm/logger.go | 187 - .../github.com/go-xorm/xorm/pg_reserved.txt | 746 - vendor/github.com/go-xorm/xorm/processors.go | 78 - vendor/github.com/go-xorm/xorm/rows.go | 134 - vendor/github.com/go-xorm/xorm/session.go | 841 - .../github.com/go-xorm/xorm/session_cols.go | 199 - .../github.com/go-xorm/xorm/session_cond.go | 70 - .../go-xorm/xorm/session_convert.go | 662 - .../github.com/go-xorm/xorm/session_delete.go | 240 - .../github.com/go-xorm/xorm/session_exist.go | 86 - .../github.com/go-xorm/xorm/session_find.go | 499 - vendor/github.com/go-xorm/xorm/session_get.go | 212 - .../github.com/go-xorm/xorm/session_insert.go | 626 - .../go-xorm/xorm/session_iterate.go | 96 - .../github.com/go-xorm/xorm/session_query.go | 266 - vendor/github.com/go-xorm/xorm/session_raw.go | 203 - .../github.com/go-xorm/xorm/session_schema.go | 421 - .../github.com/go-xorm/xorm/session_stats.go | 98 - vendor/github.com/go-xorm/xorm/session_tx.go | 81 - .../github.com/go-xorm/xorm/session_update.go | 491 - vendor/github.com/go-xorm/xorm/statement.go | 1240 - vendor/github.com/go-xorm/xorm/syslogger.go | 89 - vendor/github.com/go-xorm/xorm/tag.go | 290 - vendor/github.com/go-xorm/xorm/test_mssql.sh | 1 - .../go-xorm/xorm/test_mssql_cache.sh | 1 - .../github.com/go-xorm/xorm/test_mymysql.sh | 1 - .../go-xorm/xorm/test_mymysql_cache.sh | 1 - vendor/github.com/go-xorm/xorm/test_mysql.sh | 1 - .../go-xorm/xorm/test_mysql_cache.sh | 1 - .../github.com/go-xorm/xorm/test_postgres.sh | 1 - .../go-xorm/xorm/test_postgres_cache.sh | 1 - vendor/github.com/go-xorm/xorm/test_sqlite.sh | 1 - .../go-xorm/xorm/test_sqlite_cache.sh | 1 - vendor/github.com/go-xorm/xorm/types.go | 12 - vendor/github.com/go-xorm/xorm/xorm.go | 122 - vendor/github.com/gogs/chardet/2022.go | 102 - vendor/github.com/gogs/chardet/AUTHORS | 1 - vendor/github.com/gogs/chardet/LICENSE | 22 - vendor/github.com/gogs/chardet/README.md | 12 - vendor/github.com/gogs/chardet/detector.go | 136 - .../github.com/gogs/chardet/icu-license.html | 51 - vendor/github.com/gogs/chardet/multi_byte.go | 345 - vendor/github.com/gogs/chardet/recognizer.go | 83 - vendor/github.com/gogs/chardet/single_byte.go | 882 - vendor/github.com/gogs/chardet/unicode.go | 103 - vendor/github.com/gogs/chardet/utf8.go | 71 - vendor/github.com/gogs/cron/LICENSE | 21 - vendor/github.com/gogs/cron/README.md | 2 - vendor/github.com/gogs/cron/constantdelay.go | 27 - vendor/github.com/gogs/cron/cron.go | 243 - vendor/github.com/gogs/cron/doc.go | 129 - vendor/github.com/gogs/cron/parser.go | 234 - vendor/github.com/gogs/cron/spec.go | 159 - vendor/github.com/gogs/git-module/LICENSE | 19 - vendor/github.com/gogs/git-module/README.md | 13 - vendor/github.com/gogs/git-module/blob.go | 35 - vendor/github.com/gogs/git-module/command.go | 150 - vendor/github.com/gogs/git-module/commit.go | 321 - .../gogs/git-module/commit_archive.go | 33 - vendor/github.com/gogs/git-module/error.go | 61 - vendor/github.com/gogs/git-module/git.go | 80 - vendor/github.com/gogs/git-module/hook.go | 111 - vendor/github.com/gogs/git-module/repo.go | 285 - .../github.com/gogs/git-module/repo_branch.go | 126 - .../github.com/gogs/git-module/repo_commit.go | 408 - .../github.com/gogs/git-module/repo_diff.go | 400 - .../github.com/gogs/git-module/repo_hook.go | 13 - .../github.com/gogs/git-module/repo_object.go | 14 - .../github.com/gogs/git-module/repo_pull.go | 81 - vendor/github.com/gogs/git-module/repo_tag.go | 209 - .../github.com/gogs/git-module/repo_tree.go | 26 - vendor/github.com/gogs/git-module/sha1.go | 93 - .../github.com/gogs/git-module/signature.go | 48 - .../github.com/gogs/git-module/submodule.go | 78 - vendor/github.com/gogs/git-module/tag.go | 65 - vendor/github.com/gogs/git-module/tree.go | 149 - .../github.com/gogs/git-module/tree_blob.go | 57 - .../github.com/gogs/git-module/tree_entry.go | 226 - vendor/github.com/gogs/git-module/utils.go | 93 - vendor/github.com/gogs/go-gogs-client/LICENSE | 22 - .../github.com/gogs/go-gogs-client/README.md | 8 - .../gogs/go-gogs-client/admin_org.go | 21 - .../gogs/go-gogs-client/admin_repo.go | 21 - .../gogs/go-gogs-client/admin_user.go | 68 - vendor/github.com/gogs/go-gogs-client/gogs.go | 90 - .../github.com/gogs/go-gogs-client/issue.go | 103 - .../gogs/go-gogs-client/issue_comment.go | 70 - .../gogs/go-gogs-client/issue_label.go | 99 - .../gogs/go-gogs-client/issue_milestone.go | 69 - .../gogs/go-gogs-client/media_types.go | 9 - .../gogs/go-gogs-client/miscellaneous.go | 11 - vendor/github.com/gogs/go-gogs-client/org.go | 69 - .../gogs/go-gogs-client/org_member.go | 24 - .../gogs/go-gogs-client/org_team.go | 18 - vendor/github.com/gogs/go-gogs-client/pull.go | 37 - .../github.com/gogs/go-gogs-client/release.go | 22 - vendor/github.com/gogs/go-gogs-client/repo.go | 147 - .../gogs/go-gogs-client/repo_branch.go | 25 - .../gogs/go-gogs-client/repo_collaborator.go | 44 - .../gogs/go-gogs-client/repo_commit.go | 53 - .../gogs/go-gogs-client/repo_file.go | 23 - .../gogs/go-gogs-client/repo_hook.go | 345 - .../gogs/go-gogs-client/repo_key.go | 50 - vendor/github.com/gogs/go-gogs-client/user.go | 25 - .../gogs/go-gogs-client/user_app.go | 46 - .../gogs/go-gogs-client/user_email.go | 43 - .../gogs/go-gogs-client/user_follow.go | 47 - .../gogs/go-gogs-client/user_key.go | 49 - .../github.com/gogs/go-gogs-client/utils.go | 23 - vendor/github.com/gogs/go-libravatar/LICENSE | 19 - vendor/github.com/gogs/go-libravatar/Makefile | 12 - .../github.com/gogs/go-libravatar/README.md | 28 - .../gogs/go-libravatar/libravatar.go | 300 - vendor/github.com/gogs/minwinsvc/LICENSE | 20 - vendor/github.com/gogs/minwinsvc/README.md | 18 - vendor/github.com/gogs/minwinsvc/minwinsvc.go | 18 - vendor/github.com/gogs/minwinsvc/svc_other.go | 11 - .../github.com/gogs/minwinsvc/svc_windows.go | 72 - vendor/github.com/golang/protobuf/LICENSE | 28 - .../github.com/golang/protobuf/proto/clone.go | 253 - .../golang/protobuf/proto/decode.go | 427 - .../golang/protobuf/proto/deprecated.go | 38 - .../golang/protobuf/proto/discard.go | 350 - .../golang/protobuf/proto/encode.go | 203 - .../github.com/golang/protobuf/proto/equal.go | 300 - .../golang/protobuf/proto/extensions.go | 543 - .../github.com/golang/protobuf/proto/lib.go | 959 - .../golang/protobuf/proto/message_set.go | 314 - .../golang/protobuf/proto/pointer_reflect.go | 357 - .../golang/protobuf/proto/pointer_unsafe.go | 308 - .../golang/protobuf/proto/properties.go | 535 - .../golang/protobuf/proto/table_marshal.go | 2767 - .../golang/protobuf/proto/table_merge.go | 654 - .../golang/protobuf/proto/table_unmarshal.go | 2051 - .../github.com/golang/protobuf/proto/text.go | 843 - .../golang/protobuf/proto/text_parser.go | 880 - vendor/github.com/google/go-github/LICENSE | 27 - .../google/go-github/github/activity.go | 69 - .../go-github/github/activity_events.go | 324 - .../github/activity_notifications.go | 223 - .../google/go-github/github/activity_star.go | 135 - .../go-github/github/activity_watching.go | 146 - .../google/go-github/github/admin.go | 101 - .../google/go-github/github/admin_stats.go | 171 - .../google/go-github/github/apps.go | 197 - .../go-github/github/apps_installation.go | 101 - .../go-github/github/apps_marketplace.go | 180 - .../google/go-github/github/authorizations.go | 435 - .../github.com/google/go-github/github/doc.go | 187 - .../google/go-github/github/event_types.go | 752 - .../google/go-github/github/gen-accessors.go | 332 - .../google/go-github/github/gists.go | 388 - .../google/go-github/github/gists_comments.go | 119 - .../github.com/google/go-github/github/git.go | 12 - .../google/go-github/github/git_blobs.go | 75 - .../google/go-github/github/git_commits.go | 139 - .../google/go-github/github/git_refs.go | 233 - .../google/go-github/github/git_tags.go | 84 - .../google/go-github/github/git_trees.go | 93 - .../go-github/github/github-accessors.go | 10989 - .../google/go-github/github/github.go | 989 - .../google/go-github/github/gitignore.go | 64 - .../google/go-github/github/issues.go | 332 - .../go-github/github/issues_assignees.go | 85 - .../go-github/github/issues_comments.go | 152 - .../google/go-github/github/issues_events.go | 151 - .../google/go-github/github/issues_labels.go | 270 - .../go-github/github/issues_milestones.go | 160 - .../go-github/github/issues_timeline.go | 149 - .../google/go-github/github/licenses.go | 103 - .../google/go-github/github/messages.go | 245 - .../google/go-github/github/migrations.go | 224 - .../github/migrations_source_import.go | 329 - .../google/go-github/github/misc.go | 257 - .../google/go-github/github/orgs.go | 212 - .../google/go-github/github/orgs_hooks.go | 107 - .../google/go-github/github/orgs_members.go | 370 - .../github/orgs_outside_collaborators.go | 81 - .../google/go-github/github/orgs_projects.go | 60 - .../google/go-github/github/orgs_teams.go | 514 - .../go-github/github/orgs_users_blocking.go | 91 - .../google/go-github/github/projects.go | 445 - .../google/go-github/github/pulls.go | 380 - .../google/go-github/github/pulls_comments.go | 162 - .../go-github/github/pulls_reviewers.go | 79 - .../google/go-github/github/pulls_reviews.go | 236 - .../google/go-github/github/reactions.go | 283 - .../google/go-github/github/repos.go | 1051 - .../go-github/github/repos_collaborators.go | 140 - .../google/go-github/github/repos_comments.go | 161 - .../google/go-github/github/repos_commits.go | 237 - .../github/repos_community_health.go | 57 - .../google/go-github/github/repos_contents.go | 266 - .../go-github/github/repos_deployments.go | 237 - .../google/go-github/github/repos_forks.go | 89 - .../google/go-github/github/repos_hooks.go | 192 - .../go-github/github/repos_invitations.go | 98 - .../google/go-github/github/repos_keys.go | 111 - .../google/go-github/github/repos_merging.go | 38 - .../google/go-github/github/repos_pages.go | 143 - .../google/go-github/github/repos_projects.go | 72 - .../google/go-github/github/repos_releases.go | 353 - .../google/go-github/github/repos_stats.go | 226 - .../google/go-github/github/repos_statuses.go | 129 - .../google/go-github/github/repos_traffic.go | 141 - .../google/go-github/github/search.go | 255 - .../google/go-github/github/strings.go | 93 - .../google/go-github/github/teams.go | 7 - .../github/teams_discussion_comments.go | 154 - .../go-github/github/teams_discussions.go | 159 - .../google/go-github/github/timestamp.go | 41 - .../google/go-github/github/users.go | 233 - .../go-github/github/users_administration.go | 67 - .../google/go-github/github/users_blocking.go | 91 - .../google/go-github/github/users_emails.go | 71 - .../go-github/github/users_followers.go | 119 - .../google/go-github/github/users_gpg_keys.go | 140 - .../google/go-github/github/users_keys.go | 108 - .../google/go-github/github/with_appengine.go | 20 - .../go-github/github/without_appengine.go | 19 - .../github.com/google/go-querystring/LICENSE | 27 - .../google/go-querystring/query/encode.go | 320 - vendor/github.com/issue9/identicon/LICENSE | 22 - vendor/github.com/issue9/identicon/README.md | 40 - vendor/github.com/issue9/identicon/block.go | 438 - vendor/github.com/issue9/identicon/doc.go | 37 - .../github.com/issue9/identicon/identicon.go | 147 - vendor/github.com/issue9/identicon/polygon.go | 69 - vendor/github.com/jaytaylor/html2text/LICENSE | 22 - .../github.com/jaytaylor/html2text/README.md | 112 - .../jaytaylor/html2text/html2text.go | 300 - vendor/github.com/json-iterator/go/Gopkg.lock | 21 - vendor/github.com/json-iterator/go/Gopkg.toml | 26 - vendor/github.com/json-iterator/go/LICENSE | 21 - vendor/github.com/json-iterator/go/README.md | 91 - vendor/github.com/json-iterator/go/adapter.go | 148 - vendor/github.com/json-iterator/go/any.go | 321 - .../github.com/json-iterator/go/any_array.go | 278 - .../github.com/json-iterator/go/any_bool.go | 137 - .../github.com/json-iterator/go/any_float.go | 83 - .../github.com/json-iterator/go/any_int32.go | 74 - .../github.com/json-iterator/go/any_int64.go | 74 - .../json-iterator/go/any_invalid.go | 82 - vendor/github.com/json-iterator/go/any_nil.go | 69 - .../github.com/json-iterator/go/any_number.go | 123 - .../github.com/json-iterator/go/any_object.go | 374 - vendor/github.com/json-iterator/go/any_str.go | 166 - .../github.com/json-iterator/go/any_uint32.go | 74 - .../github.com/json-iterator/go/any_uint64.go | 74 - vendor/github.com/json-iterator/go/build.sh | 12 - vendor/github.com/json-iterator/go/config.go | 368 - .../go/fuzzy_mode_convert_table.md | 7 - vendor/github.com/json-iterator/go/iter.go | 322 - .../github.com/json-iterator/go/iter_array.go | 58 - .../github.com/json-iterator/go/iter_float.go | 347 - .../github.com/json-iterator/go/iter_int.go | 345 - .../json-iterator/go/iter_object.go | 248 - .../github.com/json-iterator/go/iter_skip.go | 129 - .../json-iterator/go/iter_skip_sloppy.go | 144 - .../json-iterator/go/iter_skip_strict.go | 89 - .../github.com/json-iterator/go/iter_str.go | 215 - .../github.com/json-iterator/go/jsoniter.go | 18 - vendor/github.com/json-iterator/go/pool.go | 42 - vendor/github.com/json-iterator/go/reflect.go | 321 - .../json-iterator/go/reflect_array.go | 104 - .../json-iterator/go/reflect_dynamic.go | 70 - .../json-iterator/go/reflect_extension.go | 471 - .../json-iterator/go/reflect_json_number.go | 112 - .../go/reflect_json_raw_message.go | 60 - .../json-iterator/go/reflect_map.go | 318 - .../json-iterator/go/reflect_marshaler.go | 218 - .../json-iterator/go/reflect_native.go | 451 - .../json-iterator/go/reflect_optional.go | 133 - .../json-iterator/go/reflect_slice.go | 99 - .../go/reflect_struct_decoder.go | 1042 - .../go/reflect_struct_encoder.go | 210 - vendor/github.com/json-iterator/go/stream.go | 211 - .../json-iterator/go/stream_float.go | 94 - .../github.com/json-iterator/go/stream_int.go | 190 - .../github.com/json-iterator/go/stream_str.go | 372 - vendor/github.com/json-iterator/go/test.sh | 12 - vendor/github.com/jtolds/gls/LICENSE | 18 - vendor/github.com/jtolds/gls/README.md | 89 - vendor/github.com/jtolds/gls/context.go | 153 - vendor/github.com/jtolds/gls/gen_sym.go | 21 - vendor/github.com/jtolds/gls/gid.go | 25 - vendor/github.com/jtolds/gls/id_pool.go | 34 - vendor/github.com/jtolds/gls/stack_tags.go | 147 - vendor/github.com/jtolds/gls/stack_tags_js.go | 75 - .../github.com/jtolds/gls/stack_tags_main.go | 30 - vendor/github.com/klauspost/compress/LICENSE | 27 - .../klauspost/compress/flate/copy.go | 32 - .../klauspost/compress/flate/crc32_amd64.go | 41 - .../klauspost/compress/flate/crc32_amd64.s | 213 - .../klauspost/compress/flate/crc32_noasm.go | 35 - .../klauspost/compress/flate/deflate.go | 1351 - .../klauspost/compress/flate/dict_decoder.go | 184 - .../klauspost/compress/flate/gen.go | 265 - .../compress/flate/huffman_bit_writer.go | 701 - .../klauspost/compress/flate/huffman_code.go | 344 - .../klauspost/compress/flate/inflate.go | 846 - .../klauspost/compress/flate/reverse_bits.go | 48 - .../klauspost/compress/flate/snappy.go | 900 - .../klauspost/compress/flate/token.go | 115 - .../klauspost/compress/gzip/gunzip.go | 344 - .../klauspost/compress/gzip/gzip.go | 251 - vendor/github.com/klauspost/cpuid/LICENSE | 22 - vendor/github.com/klauspost/cpuid/README.md | 145 - vendor/github.com/klauspost/cpuid/cpuid.go | 1022 - vendor/github.com/klauspost/cpuid/cpuid_386.s | 42 - .../github.com/klauspost/cpuid/cpuid_amd64.s | 42 - .../klauspost/cpuid/detect_intel.go | 17 - .../github.com/klauspost/cpuid/detect_ref.go | 23 - vendor/github.com/klauspost/cpuid/generate.go | 3 - .../github.com/klauspost/cpuid/private-gen.go | 476 - vendor/github.com/klauspost/crc32/LICENSE | 28 - vendor/github.com/klauspost/crc32/README.md | 87 - vendor/github.com/klauspost/crc32/crc32.go | 207 - .../github.com/klauspost/crc32/crc32_amd64.go | 230 - .../github.com/klauspost/crc32/crc32_amd64.s | 319 - .../klauspost/crc32/crc32_amd64p32.go | 43 - .../klauspost/crc32/crc32_amd64p32.s | 67 - .../klauspost/crc32/crc32_generic.go | 89 - .../klauspost/crc32/crc32_otherarch.go | 15 - .../github.com/klauspost/crc32/crc32_s390x.go | 91 - .../github.com/klauspost/crc32/crc32_s390x.s | 249 - vendor/github.com/lib/pq/CONTRIBUTING.md | 29 - vendor/github.com/lib/pq/LICENSE.md | 8 - vendor/github.com/lib/pq/README.md | 105 - vendor/github.com/lib/pq/array.go | 727 - vendor/github.com/lib/pq/buf.go | 91 - vendor/github.com/lib/pq/conn.go | 1893 - vendor/github.com/lib/pq/copy.go | 267 - vendor/github.com/lib/pq/doc.go | 235 - vendor/github.com/lib/pq/encode.go | 589 - vendor/github.com/lib/pq/error.go | 508 - vendor/github.com/lib/pq/notify.go | 782 - vendor/github.com/lib/pq/oid/doc.go | 6 - vendor/github.com/lib/pq/oid/gen.go | 74 - vendor/github.com/lib/pq/oid/types.go | 161 - vendor/github.com/lib/pq/url.go | 76 - vendor/github.com/lib/pq/user_posix.go | 24 - vendor/github.com/lib/pq/user_windows.go | 27 - vendor/github.com/mattn/go-colorable/LICENSE | 21 - .../github.com/mattn/go-colorable/README.md | 43 - .../mattn/go-colorable/colorable_others.go | 27 - .../mattn/go-colorable/colorable_windows.go | 820 - .../mattn/go-colorable/noncolorable.go | 61 - vendor/github.com/mattn/go-isatty/LICENSE | 9 - vendor/github.com/mattn/go-isatty/README.md | 37 - vendor/github.com/mattn/go-isatty/doc.go | 2 - .../mattn/go-isatty/isatty_appengine.go | 9 - .../github.com/mattn/go-isatty/isatty_bsd.go | 18 - .../mattn/go-isatty/isatty_linux.go | 18 - .../mattn/go-isatty/isatty_solaris.go | 16 - .../mattn/go-isatty/isatty_windows.go | 19 - vendor/github.com/mattn/go-sqlite3/LICENSE | 21 - vendor/github.com/mattn/go-sqlite3/README.md | 85 - vendor/github.com/mattn/go-sqlite3/backup.go | 85 - .../github.com/mattn/go-sqlite3/callback.go | 340 - vendor/github.com/mattn/go-sqlite3/doc.go | 114 - vendor/github.com/mattn/go-sqlite3/error.go | 136 - .../mattn/go-sqlite3/sqlite3-binding.c | 199489 --------------- .../mattn/go-sqlite3/sqlite3-binding.h | 10376 - vendor/github.com/mattn/go-sqlite3/sqlite3.go | 962 - .../mattn/go-sqlite3/sqlite3_fts5.go | 13 - .../mattn/go-sqlite3/sqlite3_go18.go | 69 - .../mattn/go-sqlite3/sqlite3_icu.go | 13 - .../mattn/go-sqlite3/sqlite3_json1.go | 12 - .../mattn/go-sqlite3/sqlite3_libsqlite3.go | 14 - .../go-sqlite3/sqlite3_load_extension.go | 68 - .../go-sqlite3/sqlite3_omit_load_extension.go | 23 - .../mattn/go-sqlite3/sqlite3_other.go | 13 - .../mattn/go-sqlite3/sqlite3_type.go | 57 - .../mattn/go-sqlite3/sqlite3_windows.go | 14 - .../github.com/mattn/go-sqlite3/sqlite3ext.h | 565 - .../mattn/go-sqlite3/tracecallback.go | 415 - .../mattn/go-sqlite3/tracecallback_noimpl.go | 10 - .../golang_protobuf_extensions/LICENSE | 201 - .../golang_protobuf_extensions/NOTICE | 1 - .../pbutil/Makefile | 7 - .../pbutil/decode.go | 75 - .../golang_protobuf_extensions/pbutil/doc.go | 16 - .../pbutil/encode.go | 46 - vendor/github.com/mcuadros/go-version/LICENSE | 19 - .../github.com/mcuadros/go-version/README.md | 80 - .../github.com/mcuadros/go-version/compare.go | 159 - .../mcuadros/go-version/constraint.go | 49 - vendor/github.com/mcuadros/go-version/doc.go | 6 - .../github.com/mcuadros/go-version/group.go | 269 - .../mcuadros/go-version/normalize.go | 116 - vendor/github.com/mcuadros/go-version/sort.go | 36 - .../mcuadros/go-version/stability.go | 83 - .../microcosm-cc/bluemonday/CONTRIBUTING.md | 47 - .../microcosm-cc/bluemonday/CREDITS.md | 6 - .../microcosm-cc/bluemonday/LICENCE.md | 28 - .../microcosm-cc/bluemonday/Makefile | 42 - .../microcosm-cc/bluemonday/README.md | 346 - .../github.com/microcosm-cc/bluemonday/doc.go | 104 - .../microcosm-cc/bluemonday/helpers.go | 297 - .../microcosm-cc/bluemonday/policies.go | 253 - .../microcosm-cc/bluemonday/policy.go | 548 - .../microcosm-cc/bluemonday/sanitize.go | 535 - .../github.com/modern-go/concurrent/LICENSE | 201 - .../github.com/modern-go/concurrent/README.md | 49 - .../modern-go/concurrent/executor.go | 14 - .../modern-go/concurrent/go_above_19.go | 15 - .../modern-go/concurrent/go_below_19.go | 33 - vendor/github.com/modern-go/concurrent/log.go | 13 - .../github.com/modern-go/concurrent/test.sh | 12 - .../concurrent/unbounded_executor.go | 119 - .../github.com/modern-go/reflect2/Gopkg.lock | 15 - .../github.com/modern-go/reflect2/Gopkg.toml | 35 - vendor/github.com/modern-go/reflect2/LICENSE | 201 - .../github.com/modern-go/reflect2/README.md | 71 - .../modern-go/reflect2/go_above_17.go | 8 - .../modern-go/reflect2/go_above_19.go | 14 - .../modern-go/reflect2/go_below_17.go | 9 - .../modern-go/reflect2/go_below_19.go | 14 - .../github.com/modern-go/reflect2/reflect2.go | 298 - .../modern-go/reflect2/reflect2_amd64.s | 0 .../modern-go/reflect2/reflect2_kind.go | 30 - .../modern-go/reflect2/relfect2_386.s | 0 .../modern-go/reflect2/relfect2_amd64p32.s | 0 .../modern-go/reflect2/relfect2_arm.s | 0 .../modern-go/reflect2/relfect2_arm64.s | 0 .../modern-go/reflect2/relfect2_mips64x.s | 0 .../modern-go/reflect2/relfect2_mipsx.s | 0 .../modern-go/reflect2/relfect2_ppc64x.s | 0 .../modern-go/reflect2/relfect2_s390x.s | 0 .../modern-go/reflect2/safe_field.go | 58 - .../github.com/modern-go/reflect2/safe_map.go | 101 - .../modern-go/reflect2/safe_slice.go | 92 - .../modern-go/reflect2/safe_struct.go | 29 - .../modern-go/reflect2/safe_type.go | 78 - vendor/github.com/modern-go/reflect2/test.sh | 12 - .../github.com/modern-go/reflect2/type_map.go | 103 - .../modern-go/reflect2/unsafe_array.go | 65 - .../modern-go/reflect2/unsafe_eface.go | 59 - .../modern-go/reflect2/unsafe_field.go | 74 - .../modern-go/reflect2/unsafe_iface.go | 64 - .../modern-go/reflect2/unsafe_link.go | 70 - .../modern-go/reflect2/unsafe_map.go | 138 - .../modern-go/reflect2/unsafe_ptr.go | 46 - .../modern-go/reflect2/unsafe_slice.go | 177 - .../modern-go/reflect2/unsafe_struct.go | 59 - .../modern-go/reflect2/unsafe_type.go | 85 - vendor/github.com/msteinert/pam/LICENSE | 24 - vendor/github.com/msteinert/pam/README.md | 30 - vendor/github.com/msteinert/pam/callback.go | 39 - vendor/github.com/msteinert/pam/transaction.c | 46 - .../github.com/msteinert/pam/transaction.go | 306 - vendor/github.com/nfnt/resize/LICENSE | 13 - vendor/github.com/nfnt/resize/README.md | 149 - vendor/github.com/nfnt/resize/converter.go | 438 - vendor/github.com/nfnt/resize/filters.go | 143 - vendor/github.com/nfnt/resize/nearest.go | 318 - vendor/github.com/nfnt/resize/resize.go | 614 - vendor/github.com/nfnt/resize/thumbnail.go | 55 - vendor/github.com/nfnt/resize/ycc.go | 227 - vendor/github.com/pquerna/otp/LICENSE | 202 - vendor/github.com/pquerna/otp/NOTICE | 5 - vendor/github.com/pquerna/otp/README.md | 60 - vendor/github.com/pquerna/otp/doc.go | 70 - vendor/github.com/pquerna/otp/hotp/hotp.go | 187 - vendor/github.com/pquerna/otp/otp.go | 200 - vendor/github.com/pquerna/otp/totp/totp.go | 191 - .../prometheus/client_golang/LICENSE | 201 - .../prometheus/client_golang/NOTICE | 23 - .../client_golang/prometheus/README.md | 1 - .../client_golang/prometheus/collector.go | 119 - .../client_golang/prometheus/counter.go | 277 - .../client_golang/prometheus/desc.go | 188 - .../client_golang/prometheus/doc.go | 201 - .../prometheus/expvar_collector.go | 119 - .../client_golang/prometheus/fnv.go | 42 - .../client_golang/prometheus/gauge.go | 286 - .../client_golang/prometheus/go_collector.go | 301 - .../client_golang/prometheus/histogram.go | 605 - .../client_golang/prometheus/http.go | 505 - .../prometheus/internal/metric.go | 85 - .../client_golang/prometheus/labels.go | 70 - .../client_golang/prometheus/metric.go | 173 - .../client_golang/prometheus/observer.go | 52 - .../prometheus/process_collector.go | 204 - .../prometheus/promhttp/delegator.go | 199 - .../prometheus/promhttp/delegator_1_8.go | 181 - .../prometheus/promhttp/delegator_pre_1_8.go | 44 - .../client_golang/prometheus/promhttp/http.go | 311 - .../prometheus/promhttp/instrument_client.go | 97 - .../promhttp/instrument_client_1_8.go | 144 - .../prometheus/promhttp/instrument_server.go | 447 - .../client_golang/prometheus/registry.go | 882 - .../client_golang/prometheus/summary.go | 623 - .../client_golang/prometheus/timer.go | 51 - .../client_golang/prometheus/untyped.go | 42 - .../client_golang/prometheus/value.go | 158 - .../client_golang/prometheus/vec.go | 472 - .../client_golang/prometheus/wrap.go | 179 - .../prometheus/client_model/LICENSE | 201 - .../github.com/prometheus/client_model/NOTICE | 5 - .../prometheus/client_model/go/metrics.pb.go | 629 - vendor/github.com/prometheus/common/LICENSE | 201 - vendor/github.com/prometheus/common/NOTICE | 5 - .../prometheus/common/expfmt/decode.go | 429 - .../prometheus/common/expfmt/encode.go | 88 - .../prometheus/common/expfmt/expfmt.go | 38 - .../prometheus/common/expfmt/fuzz.go | 36 - .../prometheus/common/expfmt/text_create.go | 303 - .../prometheus/common/expfmt/text_parse.go | 757 - .../bitbucket.org/ww/goautoneg/README.txt | 67 - .../bitbucket.org/ww/goautoneg/autoneg.go | 162 - .../prometheus/common/model/alert.go | 136 - .../prometheus/common/model/fingerprinting.go | 105 - .../github.com/prometheus/common/model/fnv.go | 42 - .../prometheus/common/model/labels.go | 210 - .../prometheus/common/model/labelset.go | 169 - .../prometheus/common/model/metric.go | 103 - .../prometheus/common/model/model.go | 16 - .../prometheus/common/model/signature.go | 144 - .../prometheus/common/model/silence.go | 106 - .../prometheus/common/model/time.go | 264 - .../prometheus/common/model/value.go | 416 - .../prometheus/procfs/CONTRIBUTING.md | 18 - vendor/github.com/prometheus/procfs/LICENSE | 201 - .../prometheus/procfs/MAINTAINERS.md | 1 - vendor/github.com/prometheus/procfs/Makefile | 77 - vendor/github.com/prometheus/procfs/NOTICE | 7 - vendor/github.com/prometheus/procfs/README.md | 11 - .../github.com/prometheus/procfs/buddyinfo.go | 95 - vendor/github.com/prometheus/procfs/doc.go | 45 - .../prometheus/procfs/fixtures.ttar | 446 - vendor/github.com/prometheus/procfs/fs.go | 82 - .../prometheus/procfs/internal/util/parse.go | 46 - vendor/github.com/prometheus/procfs/ipvs.go | 259 - vendor/github.com/prometheus/procfs/mdstat.go | 151 - .../prometheus/procfs/mountstats.go | 606 - .../github.com/prometheus/procfs/net_dev.go | 216 - .../github.com/prometheus/procfs/nfs/nfs.go | 263 - .../github.com/prometheus/procfs/nfs/parse.go | 317 - .../prometheus/procfs/nfs/parse_nfs.go | 67 - .../prometheus/procfs/nfs/parse_nfsd.go | 89 - vendor/github.com/prometheus/procfs/proc.go | 238 - .../github.com/prometheus/procfs/proc_io.go | 65 - .../prometheus/procfs/proc_limits.go | 150 - .../github.com/prometheus/procfs/proc_ns.go | 68 - .../github.com/prometheus/procfs/proc_stat.go | 188 - vendor/github.com/prometheus/procfs/stat.go | 232 - vendor/github.com/prometheus/procfs/ttar | 389 - vendor/github.com/prometheus/procfs/xfrm.go | 187 - .../github.com/prometheus/procfs/xfs/parse.go | 330 - .../github.com/prometheus/procfs/xfs/xfs.go | 163 - .../russross/blackfriday/LICENSE.txt | 29 - .../github.com/russross/blackfriday/README.md | 276 - .../github.com/russross/blackfriday/block.go | 1430 - .../github.com/russross/blackfriday/html.go | 949 - .../github.com/russross/blackfriday/inline.go | 1148 - .../github.com/russross/blackfriday/latex.go | 332 - .../russross/blackfriday/markdown.go | 926 - .../russross/blackfriday/smartypants.go | 400 - vendor/github.com/satori/go.uuid/LICENSE | 20 - vendor/github.com/satori/go.uuid/README.md | 65 - vendor/github.com/satori/go.uuid/uuid.go | 481 - vendor/github.com/sergi/go-diff/LICENSE.txt | 20 - .../sergi/go-diff/diffmatchpatch/dmp.go | 2216 - .../go-diff/diffmatchpatch/speedtest1.txt | 230 - .../go-diff/diffmatchpatch/speedtest2.txt | 188 - .../sergi/go-diff/diffmatchpatch/stack.go | 66 - .../shurcooL/sanitized_anchor_name/LICENSE | 19 - .../shurcooL/sanitized_anchor_name/README.md | 34 - .../shurcooL/sanitized_anchor_name/main.go | 29 - .../smartystreets/assertions/CONTRIBUTING.md | 12 - .../smartystreets/assertions/LICENSE.md | 23 - .../smartystreets/assertions/Makefile | 11 - .../smartystreets/assertions/README.md | 621 - .../smartystreets/assertions/collections.go | 244 - .../smartystreets/assertions/doc.go | 109 - .../smartystreets/assertions/equal_method.go | 75 - .../smartystreets/assertions/equality.go | 331 - .../smartystreets/assertions/equality_diff.go | 37 - .../smartystreets/assertions/filter.go | 31 - .../smartystreets/assertions/go.mod | 3 - .../assertions/internal/go-diff/LICENSE | 20 - .../internal/go-diff/diffmatchpatch/diff.go | 1345 - .../go-diff/diffmatchpatch/diffmatchpatch.go | 46 - .../internal/go-diff/diffmatchpatch/match.go | 160 - .../go-diff/diffmatchpatch/mathutil.go | 23 - .../diffmatchpatch/operation_string.go | 17 - .../internal/go-diff/diffmatchpatch/patch.go | 556 - .../go-diff/diffmatchpatch/stringutil.go | 88 - .../assertions/internal/go-render/LICENSE | 27 - .../internal/go-render/render/render.go | 481 - .../internal/go-render/render/render_time.go | 26 - .../assertions/internal/oglematchers/LICENSE | 202 - .../internal/oglematchers/README.md | 58 - .../internal/oglematchers/any_of.go | 94 - .../internal/oglematchers/contains.go | 61 - .../internal/oglematchers/deep_equals.go | 88 - .../internal/oglematchers/equals.go | 541 - .../internal/oglematchers/greater_or_equal.go | 39 - .../internal/oglematchers/greater_than.go | 39 - .../internal/oglematchers/less_or_equal.go | 41 - .../internal/oglematchers/less_than.go | 152 - .../internal/oglematchers/matcher.go | 86 - .../assertions/internal/oglematchers/not.go | 53 - .../oglematchers/transform_description.go | 36 - .../smartystreets/assertions/messages.go | 106 - .../smartystreets/assertions/panic.go | 115 - .../smartystreets/assertions/quantity.go | 141 - .../smartystreets/assertions/serializer.go | 70 - .../smartystreets/assertions/strings.go | 227 - .../smartystreets/assertions/time.go | 218 - .../smartystreets/assertions/type.go | 134 - .../smartystreets/goconvey/CONTRIBUTING.md | 35 - .../smartystreets/goconvey/LICENSE.md | 23 - .../smartystreets/goconvey/README.md | 124 - .../goconvey/convey/assertions.go | 71 - .../smartystreets/goconvey/convey/context.go | 272 - .../goconvey/convey/convey.goconvey | 4 - .../goconvey/convey/discovery.go | 103 - .../smartystreets/goconvey/convey/doc.go | 218 - .../goconvey/convey/gotest/utils.go | 28 - .../smartystreets/goconvey/convey/init.go | 81 - .../goconvey/convey/nilReporter.go | 15 - .../goconvey/convey/reporting/console.go | 16 - .../goconvey/convey/reporting/doc.go | 5 - .../goconvey/convey/reporting/dot.go | 40 - .../goconvey/convey/reporting/gotest.go | 33 - .../goconvey/convey/reporting/init.go | 94 - .../goconvey/convey/reporting/json.go | 88 - .../goconvey/convey/reporting/printer.go | 60 - .../goconvey/convey/reporting/problems.go | 80 - .../goconvey/convey/reporting/reporter.go | 39 - .../convey/reporting/reporting.goconvey | 2 - .../goconvey/convey/reporting/reports.go | 179 - .../goconvey/convey/reporting/statistics.go | 108 - .../goconvey/convey/reporting/story.go | 73 - .../smartystreets/goconvey/dependencies.go | 4 - .../github.com/smartystreets/goconvey/go.mod | 8 - .../github.com/smartystreets/goconvey/go.sum | 12 - .../smartystreets/goconvey/goconvey.go | 293 - .../smartystreets/goconvey/goconvey_1_8.go | 42 - .../smartystreets/goconvey/goconvey_1_9.go | 64 - .../goconvey/web/server/api/api.goconvey | 2 - .../goconvey/web/server/api/server.go | 164 - .../goconvey/web/server/contract/contracts.go | 27 - .../goconvey/web/server/contract/result.go | 100 - .../goconvey/web/server/executor/contract.go | 12 - .../web/server/executor/coordinator.go | 71 - .../goconvey/web/server/executor/executor.go | 84 - .../web/server/executor/executor.goconvey | 2 - .../goconvey/web/server/executor/tester.go | 56 - .../goconvey/web/server/messaging/messages.go | 56 - .../web/server/parser/packageParser.go | 178 - .../goconvey/web/server/parser/parser.go | 32 - .../web/server/parser/parser.goconvey | 2 - .../goconvey/web/server/parser/rules.go | 45 - .../goconvey/web/server/parser/testParser.go | 177 - .../goconvey/web/server/parser/util.go | 49 - .../goconvey/web/server/system/shell.go | 174 - .../web/server/system/system.goconvey | 3 - .../web/server/watch/functional_core.go | 171 - .../web/server/watch/imperative_shell.go | 82 - .../goconvey/web/server/watch/integration.go | 183 - .../goconvey/web/server/watch/watch.goconvey | 3 - vendor/github.com/urfave/cli/CHANGELOG.md | 380 - vendor/github.com/urfave/cli/LICENSE | 21 - vendor/github.com/urfave/cli/README.md | 1364 - vendor/github.com/urfave/cli/app.go | 490 - vendor/github.com/urfave/cli/appveyor.yml | 24 - vendor/github.com/urfave/cli/category.go | 44 - vendor/github.com/urfave/cli/cli.go | 21 - vendor/github.com/urfave/cli/command.go | 286 - vendor/github.com/urfave/cli/context.go | 276 - vendor/github.com/urfave/cli/errors.go | 110 - vendor/github.com/urfave/cli/flag-types.json | 93 - vendor/github.com/urfave/cli/flag.go | 799 - .../github.com/urfave/cli/flag_generated.go | 627 - vendor/github.com/urfave/cli/funcs.go | 28 - .../github.com/urfave/cli/generate-flag-types | 255 - vendor/github.com/urfave/cli/help.go | 294 - vendor/github.com/urfave/cli/runtests | 122 - vendor/golang.org/x/crypto/LICENSE | 27 - vendor/golang.org/x/crypto/PATENTS | 22 - .../x/crypto/curve25519/const_amd64.s | 20 - .../x/crypto/curve25519/cswap_amd64.s | 88 - .../x/crypto/curve25519/curve25519.go | 841 - vendor/golang.org/x/crypto/curve25519/doc.go | 23 - .../x/crypto/curve25519/freeze_amd64.s | 71 - .../x/crypto/curve25519/ladderstep_amd64.s | 1375 - .../x/crypto/curve25519/mont25519_amd64.go | 240 - .../x/crypto/curve25519/mul_amd64.s | 167 - .../x/crypto/curve25519/square_amd64.s | 130 - vendor/golang.org/x/crypto/ed25519/ed25519.go | 181 - .../ed25519/internal/edwards25519/const.go | 1422 - .../internal/edwards25519/edwards25519.go | 1771 - vendor/golang.org/x/crypto/md4/md4.go | 118 - vendor/golang.org/x/crypto/md4/md4block.go | 89 - vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go | 77 - vendor/golang.org/x/crypto/ssh/buffer.go | 98 - vendor/golang.org/x/crypto/ssh/certs.go | 503 - vendor/golang.org/x/crypto/ssh/channel.go | 633 - vendor/golang.org/x/crypto/ssh/cipher.go | 627 - vendor/golang.org/x/crypto/ssh/client.go | 211 - vendor/golang.org/x/crypto/ssh/client_auth.go | 475 - vendor/golang.org/x/crypto/ssh/common.go | 371 - vendor/golang.org/x/crypto/ssh/connection.go | 143 - vendor/golang.org/x/crypto/ssh/doc.go | 18 - vendor/golang.org/x/crypto/ssh/handshake.go | 625 - vendor/golang.org/x/crypto/ssh/kex.go | 540 - vendor/golang.org/x/crypto/ssh/keys.go | 905 - vendor/golang.org/x/crypto/ssh/mac.go | 61 - vendor/golang.org/x/crypto/ssh/messages.go | 758 - vendor/golang.org/x/crypto/ssh/mux.go | 330 - vendor/golang.org/x/crypto/ssh/server.go | 491 - vendor/golang.org/x/crypto/ssh/session.go | 627 - vendor/golang.org/x/crypto/ssh/tcpip.go | 407 - vendor/golang.org/x/crypto/ssh/transport.go | 375 - vendor/golang.org/x/net/LICENSE | 27 - vendor/golang.org/x/net/PATENTS | 22 - vendor/golang.org/x/net/context/context.go | 156 - vendor/golang.org/x/net/context/go17.go | 72 - vendor/golang.org/x/net/context/pre_go17.go | 300 - vendor/golang.org/x/net/html/atom/atom.go | 78 - vendor/golang.org/x/net/html/atom/gen.go | 648 - vendor/golang.org/x/net/html/atom/table.go | 713 - .../golang.org/x/net/html/charset/charset.go | 257 - vendor/golang.org/x/net/html/const.go | 102 - vendor/golang.org/x/net/html/doc.go | 106 - vendor/golang.org/x/net/html/doctype.go | 156 - vendor/golang.org/x/net/html/entity.go | 2253 - vendor/golang.org/x/net/html/escape.go | 258 - vendor/golang.org/x/net/html/foreign.go | 226 - vendor/golang.org/x/net/html/node.go | 193 - vendor/golang.org/x/net/html/parse.go | 2094 - vendor/golang.org/x/net/html/render.go | 271 - vendor/golang.org/x/net/html/token.go | 1219 - vendor/golang.org/x/sys/LICENSE | 27 - vendor/golang.org/x/sys/PATENTS | 22 - vendor/golang.org/x/sys/unix/asm.s | 10 - vendor/golang.org/x/sys/unix/asm_darwin_386.s | 29 - .../golang.org/x/sys/unix/asm_darwin_amd64.s | 29 - vendor/golang.org/x/sys/unix/asm_darwin_arm.s | 30 - .../golang.org/x/sys/unix/asm_darwin_arm64.s | 30 - .../x/sys/unix/asm_dragonfly_amd64.s | 29 - .../golang.org/x/sys/unix/asm_freebsd_386.s | 29 - .../golang.org/x/sys/unix/asm_freebsd_amd64.s | 29 - .../golang.org/x/sys/unix/asm_freebsd_arm.s | 29 - vendor/golang.org/x/sys/unix/asm_linux_386.s | 35 - .../golang.org/x/sys/unix/asm_linux_amd64.s | 29 - vendor/golang.org/x/sys/unix/asm_linux_arm.s | 29 - .../golang.org/x/sys/unix/asm_linux_arm64.s | 24 - .../golang.org/x/sys/unix/asm_linux_mips64x.s | 28 - .../golang.org/x/sys/unix/asm_linux_ppc64x.s | 28 - .../golang.org/x/sys/unix/asm_linux_s390x.s | 28 - vendor/golang.org/x/sys/unix/asm_netbsd_386.s | 29 - .../golang.org/x/sys/unix/asm_netbsd_amd64.s | 29 - vendor/golang.org/x/sys/unix/asm_netbsd_arm.s | 29 - .../golang.org/x/sys/unix/asm_openbsd_386.s | 29 - .../golang.org/x/sys/unix/asm_openbsd_amd64.s | 29 - .../golang.org/x/sys/unix/asm_solaris_amd64.s | 17 - .../golang.org/x/sys/unix/bluetooth_linux.go | 35 - vendor/golang.org/x/sys/unix/constants.go | 13 - vendor/golang.org/x/sys/unix/env_unix.go | 27 - vendor/golang.org/x/sys/unix/env_unset.go | 14 - vendor/golang.org/x/sys/unix/flock.go | 24 - .../x/sys/unix/flock_linux_32bit.go | 13 - vendor/golang.org/x/sys/unix/gccgo.go | 46 - vendor/golang.org/x/sys/unix/gccgo_c.c | 41 - .../x/sys/unix/gccgo_linux_amd64.go | 20 - .../x/sys/unix/gccgo_linux_sparc64.go | 20 - vendor/golang.org/x/sys/unix/mkall.sh | 292 - vendor/golang.org/x/sys/unix/mkerrors.sh | 483 - vendor/golang.org/x/sys/unix/mkpost.go | 62 - vendor/golang.org/x/sys/unix/mksyscall.pl | 323 - .../x/sys/unix/mksyscall_solaris.pl | 294 - .../golang.org/x/sys/unix/mksysctl_openbsd.pl | 264 - .../golang.org/x/sys/unix/mksysnum_darwin.pl | 39 - .../x/sys/unix/mksysnum_dragonfly.pl | 50 - .../golang.org/x/sys/unix/mksysnum_freebsd.pl | 63 - .../golang.org/x/sys/unix/mksysnum_linux.pl | 58 - .../golang.org/x/sys/unix/mksysnum_netbsd.pl | 58 - .../golang.org/x/sys/unix/mksysnum_openbsd.pl | 50 - vendor/golang.org/x/sys/unix/race.go | 30 - vendor/golang.org/x/sys/unix/race0.go | 25 - .../golang.org/x/sys/unix/sockcmsg_linux.go | 36 - vendor/golang.org/x/sys/unix/sockcmsg_unix.go | 103 - vendor/golang.org/x/sys/unix/str.go | 26 - vendor/golang.org/x/sys/unix/syscall.go | 76 - vendor/golang.org/x/sys/unix/syscall_bsd.go | 628 - .../golang.org/x/sys/unix/syscall_darwin.go | 511 - .../x/sys/unix/syscall_darwin_386.go | 77 - .../x/sys/unix/syscall_darwin_amd64.go | 79 - .../x/sys/unix/syscall_darwin_arm.go | 71 - .../x/sys/unix/syscall_darwin_arm64.go | 77 - .../x/sys/unix/syscall_dragonfly.go | 412 - .../x/sys/unix/syscall_dragonfly_amd64.go | 61 - .../golang.org/x/sys/unix/syscall_freebsd.go | 683 - .../x/sys/unix/syscall_freebsd_386.go | 61 - .../x/sys/unix/syscall_freebsd_amd64.go | 61 - .../x/sys/unix/syscall_freebsd_arm.go | 61 - vendor/golang.org/x/sys/unix/syscall_linux.go | 1111 - .../x/sys/unix/syscall_linux_386.go | 399 - .../x/sys/unix/syscall_linux_amd64.go | 157 - .../x/sys/unix/syscall_linux_arm.go | 263 - .../x/sys/unix/syscall_linux_arm64.go | 190 - .../x/sys/unix/syscall_linux_mips64x.go | 208 - .../x/sys/unix/syscall_linux_ppc64x.go | 135 - .../x/sys/unix/syscall_linux_s390x.go | 329 - .../x/sys/unix/syscall_linux_sparc64.go | 169 - .../golang.org/x/sys/unix/syscall_netbsd.go | 492 - .../x/sys/unix/syscall_netbsd_386.go | 42 - .../x/sys/unix/syscall_netbsd_amd64.go | 42 - .../x/sys/unix/syscall_netbsd_arm.go | 42 - .../golang.org/x/sys/unix/syscall_no_getwd.go | 11 - .../golang.org/x/sys/unix/syscall_openbsd.go | 304 - .../x/sys/unix/syscall_openbsd_386.go | 42 - .../x/sys/unix/syscall_openbsd_amd64.go | 42 - .../golang.org/x/sys/unix/syscall_solaris.go | 725 - .../x/sys/unix/syscall_solaris_amd64.go | 35 - vendor/golang.org/x/sys/unix/syscall_unix.go | 297 - vendor/golang.org/x/sys/unix/types_darwin.go | 250 - .../golang.org/x/sys/unix/types_dragonfly.go | 242 - vendor/golang.org/x/sys/unix/types_freebsd.go | 353 - vendor/golang.org/x/sys/unix/types_linux.go | 457 - vendor/golang.org/x/sys/unix/types_netbsd.go | 232 - vendor/golang.org/x/sys/unix/types_openbsd.go | 244 - vendor/golang.org/x/sys/unix/types_solaris.go | 262 - .../x/sys/unix/zerrors_darwin_386.go | 1576 - .../x/sys/unix/zerrors_darwin_amd64.go | 1576 - .../x/sys/unix/zerrors_darwin_arm.go | 1293 - .../x/sys/unix/zerrors_darwin_arm64.go | 1576 - .../x/sys/unix/zerrors_dragonfly_amd64.go | 1530 - .../x/sys/unix/zerrors_freebsd_386.go | 1743 - .../x/sys/unix/zerrors_freebsd_amd64.go | 1748 - .../x/sys/unix/zerrors_freebsd_arm.go | 1729 - .../x/sys/unix/zerrors_linux_386.go | 1819 - .../x/sys/unix/zerrors_linux_amd64.go | 1820 - .../x/sys/unix/zerrors_linux_arm.go | 1743 - .../x/sys/unix/zerrors_linux_arm64.go | 1897 - .../x/sys/unix/zerrors_linux_mips64.go | 1917 - .../x/sys/unix/zerrors_linux_mips64le.go | 1917 - .../x/sys/unix/zerrors_linux_ppc64.go | 1970 - .../x/sys/unix/zerrors_linux_ppc64le.go | 1969 - .../x/sys/unix/zerrors_linux_s390x.go | 2027 - .../x/sys/unix/zerrors_linux_sparc64.go | 2077 - .../x/sys/unix/zerrors_netbsd_386.go | 1712 - .../x/sys/unix/zerrors_netbsd_amd64.go | 1702 - .../x/sys/unix/zerrors_netbsd_arm.go | 1688 - .../x/sys/unix/zerrors_openbsd_386.go | 1584 - .../x/sys/unix/zerrors_openbsd_amd64.go | 1583 - .../x/sys/unix/zerrors_solaris_amd64.go | 1436 - .../x/sys/unix/zsyscall_darwin_386.go | 1427 - .../x/sys/unix/zsyscall_darwin_amd64.go | 1443 - .../x/sys/unix/zsyscall_darwin_arm.go | 1427 - .../x/sys/unix/zsyscall_darwin_arm64.go | 1427 - .../x/sys/unix/zsyscall_dragonfly_amd64.go | 1413 - .../x/sys/unix/zsyscall_freebsd_386.go | 1665 - .../x/sys/unix/zsyscall_freebsd_amd64.go | 1665 - .../x/sys/unix/zsyscall_freebsd_arm.go | 1665 - .../x/sys/unix/zsyscall_linux_386.go | 1671 - .../x/sys/unix/zsyscall_linux_amd64.go | 1865 - .../x/sys/unix/zsyscall_linux_arm.go | 1772 - .../x/sys/unix/zsyscall_linux_arm64.go | 1745 - .../x/sys/unix/zsyscall_linux_mips64.go | 1814 - .../x/sys/unix/zsyscall_linux_mips64le.go | 1814 - .../x/sys/unix/zsyscall_linux_ppc64.go | 1876 - .../x/sys/unix/zsyscall_linux_ppc64le.go | 1876 - .../x/sys/unix/zsyscall_linux_s390x.go | 1656 - .../x/sys/unix/zsyscall_linux_sparc64.go | 1845 - .../x/sys/unix/zsyscall_netbsd_386.go | 1327 - .../x/sys/unix/zsyscall_netbsd_amd64.go | 1327 - .../x/sys/unix/zsyscall_netbsd_arm.go | 1327 - .../x/sys/unix/zsyscall_openbsd_386.go | 1387 - .../x/sys/unix/zsyscall_openbsd_amd64.go | 1387 - .../x/sys/unix/zsyscall_solaris_amd64.go | 1599 - .../golang.org/x/sys/unix/zsysctl_openbsd.go | 270 - .../x/sys/unix/zsysnum_darwin_386.go | 398 - .../x/sys/unix/zsysnum_darwin_amd64.go | 398 - .../x/sys/unix/zsysnum_darwin_arm.go | 358 - .../x/sys/unix/zsysnum_darwin_arm64.go | 398 - .../x/sys/unix/zsysnum_dragonfly_amd64.go | 304 - .../x/sys/unix/zsysnum_freebsd_386.go | 351 - .../x/sys/unix/zsysnum_freebsd_amd64.go | 351 - .../x/sys/unix/zsysnum_freebsd_arm.go | 351 - .../x/sys/unix/zsysnum_linux_386.go | 355 - .../x/sys/unix/zsysnum_linux_amd64.go | 321 - .../x/sys/unix/zsysnum_linux_arm.go | 356 - .../x/sys/unix/zsysnum_linux_arm64.go | 272 - .../x/sys/unix/zsysnum_linux_mips64.go | 327 - .../x/sys/unix/zsysnum_linux_mips64le.go | 327 - .../x/sys/unix/zsysnum_linux_ppc64.go | 360 - .../x/sys/unix/zsysnum_linux_ppc64le.go | 353 - .../x/sys/unix/zsysnum_linux_s390x.go | 328 - .../x/sys/unix/zsysnum_linux_sparc64.go | 348 - .../x/sys/unix/zsysnum_netbsd_386.go | 273 - .../x/sys/unix/zsysnum_netbsd_amd64.go | 273 - .../x/sys/unix/zsysnum_netbsd_arm.go | 273 - .../x/sys/unix/zsysnum_openbsd_386.go | 207 - .../x/sys/unix/zsysnum_openbsd_amd64.go | 207 - .../x/sys/unix/zsysnum_solaris_amd64.go | 13 - .../x/sys/unix/ztypes_darwin_386.go | 447 - .../x/sys/unix/ztypes_darwin_amd64.go | 462 - .../x/sys/unix/ztypes_darwin_arm.go | 449 - .../x/sys/unix/ztypes_darwin_arm64.go | 457 - .../x/sys/unix/ztypes_dragonfly_amd64.go | 443 - .../x/sys/unix/ztypes_freebsd_386.go | 502 - .../x/sys/unix/ztypes_freebsd_amd64.go | 505 - .../x/sys/unix/ztypes_freebsd_arm.go | 497 - .../golang.org/x/sys/unix/ztypes_linux_386.go | 627 - .../x/sys/unix/ztypes_linux_amd64.go | 645 - .../golang.org/x/sys/unix/ztypes_linux_arm.go | 616 - .../x/sys/unix/ztypes_linux_arm64.go | 624 - .../x/sys/unix/ztypes_linux_mips64.go | 627 - .../x/sys/unix/ztypes_linux_mips64le.go | 627 - .../x/sys/unix/ztypes_linux_ppc64.go | 634 - .../x/sys/unix/ztypes_linux_ppc64le.go | 634 - .../x/sys/unix/ztypes_linux_s390x.go | 649 - .../x/sys/unix/ztypes_linux_sparc64.go | 640 - .../x/sys/unix/ztypes_netbsd_386.go | 396 - .../x/sys/unix/ztypes_netbsd_amd64.go | 403 - .../x/sys/unix/ztypes_netbsd_arm.go | 401 - .../x/sys/unix/ztypes_openbsd_386.go | 441 - .../x/sys/unix/ztypes_openbsd_amd64.go | 448 - .../x/sys/unix/ztypes_solaris_amd64.go | 423 - .../x/sys/windows/asm_windows_386.s | 13 - .../x/sys/windows/asm_windows_amd64.s | 13 - .../golang.org/x/sys/windows/dll_windows.go | 378 - vendor/golang.org/x/sys/windows/env_unset.go | 15 - .../golang.org/x/sys/windows/env_windows.go | 25 - vendor/golang.org/x/sys/windows/eventlog.go | 20 - .../golang.org/x/sys/windows/exec_windows.go | 97 - vendor/golang.org/x/sys/windows/mksyscall.go | 7 - vendor/golang.org/x/sys/windows/race.go | 30 - vendor/golang.org/x/sys/windows/race0.go | 25 - .../x/sys/windows/security_windows.go | 435 - vendor/golang.org/x/sys/windows/service.go | 143 - vendor/golang.org/x/sys/windows/str.go | 22 - vendor/golang.org/x/sys/windows/svc/event.go | 48 - vendor/golang.org/x/sys/windows/svc/go12.c | 24 - vendor/golang.org/x/sys/windows/svc/go12.go | 11 - vendor/golang.org/x/sys/windows/svc/go13.go | 31 - .../golang.org/x/sys/windows/svc/security.go | 62 - .../golang.org/x/sys/windows/svc/service.go | 316 - vendor/golang.org/x/sys/windows/svc/sys_386.s | 67 - .../golang.org/x/sys/windows/svc/sys_amd64.s | 41 - vendor/golang.org/x/sys/windows/syscall.go | 71 - .../x/sys/windows/syscall_windows.go | 989 - .../x/sys/windows/zsyscall_windows.go | 2245 - .../x/sys/windows/ztypes_windows.go | 1242 - .../x/sys/windows/ztypes_windows_386.go | 22 - .../x/sys/windows/ztypes_windows_amd64.go | 22 - vendor/golang.org/x/text/LICENSE | 27 - vendor/golang.org/x/text/PATENTS | 22 - .../x/text/encoding/charmap/charmap.go | 209 - .../x/text/encoding/charmap/maketables.go | 524 - .../x/text/encoding/charmap/tables.go | 6706 - vendor/golang.org/x/text/encoding/encoding.go | 335 - .../x/text/encoding/htmlindex/gen.go | 167 - .../x/text/encoding/htmlindex/htmlindex.go | 86 - .../x/text/encoding/htmlindex/map.go | 105 - .../x/text/encoding/htmlindex/tables.go | 352 - .../text/encoding/internal/identifier/gen.go | 137 - .../internal/identifier/identifier.go | 81 - .../text/encoding/internal/identifier/mib.go | 1621 - .../x/text/encoding/internal/internal.go | 75 - .../x/text/encoding/japanese/all.go | 12 - .../x/text/encoding/japanese/eucjp.go | 211 - .../x/text/encoding/japanese/iso2022jp.go | 296 - .../x/text/encoding/japanese/maketables.go | 161 - .../x/text/encoding/japanese/shiftjis.go | 189 - .../x/text/encoding/japanese/tables.go | 26971 -- .../x/text/encoding/korean/euckr.go | 178 - .../x/text/encoding/korean/maketables.go | 143 - .../x/text/encoding/korean/tables.go | 34152 --- .../x/text/encoding/simplifiedchinese/all.go | 12 - .../x/text/encoding/simplifiedchinese/gbk.go | 281 - .../encoding/simplifiedchinese/hzgb2312.go | 240 - .../encoding/simplifiedchinese/maketables.go | 161 - .../text/encoding/simplifiedchinese/tables.go | 43999 ---- .../text/encoding/traditionalchinese/big5.go | 198 - .../encoding/traditionalchinese/maketables.go | 140 - .../encoding/traditionalchinese/tables.go | 37142 --- .../x/text/encoding/unicode/override.go | 82 - .../x/text/encoding/unicode/unicode.go | 434 - vendor/golang.org/x/text/internal/tag/tag.go | 100 - .../internal/utf8internal/utf8internal.go | 87 - vendor/golang.org/x/text/language/Makefile | 16 - vendor/golang.org/x/text/language/common.go | 16 - vendor/golang.org/x/text/language/coverage.go | 197 - .../golang.org/x/text/language/gen_common.go | 20 - .../golang.org/x/text/language/gen_index.go | 162 - vendor/golang.org/x/text/language/go1_1.go | 38 - vendor/golang.org/x/text/language/go1_2.go | 11 - vendor/golang.org/x/text/language/index.go | 767 - vendor/golang.org/x/text/language/language.go | 975 - vendor/golang.org/x/text/language/lookup.go | 396 - .../golang.org/x/text/language/maketables.go | 1648 - vendor/golang.org/x/text/language/match.go | 841 - vendor/golang.org/x/text/language/parse.go | 859 - vendor/golang.org/x/text/language/tables.go | 3547 - vendor/golang.org/x/text/language/tags.go | 143 - vendor/golang.org/x/text/runes/cond.go | 187 - vendor/golang.org/x/text/runes/runes.go | 355 - .../golang.org/x/text/transform/transform.go | 705 - .../alexcesaro/quotedprintable.v3/LICENSE | 20 - .../alexcesaro/quotedprintable.v3/README.md | 16 - .../quotedprintable.v3/encodedword.go | 279 - .../alexcesaro/quotedprintable.v3/pool.go | 26 - .../quotedprintable.v3/pool_go12.go | 24 - .../alexcesaro/quotedprintable.v3/reader.go | 121 - .../alexcesaro/quotedprintable.v3/writer.go | 166 - vendor/gopkg.in/asn1-ber.v1/LICENSE | 27 - vendor/gopkg.in/asn1-ber.v1/README.md | 24 - vendor/gopkg.in/asn1-ber.v1/ber.go | 504 - vendor/gopkg.in/asn1-ber.v1/content_int.go | 25 - vendor/gopkg.in/asn1-ber.v1/header.go | 29 - vendor/gopkg.in/asn1-ber.v1/identifier.go | 103 - vendor/gopkg.in/asn1-ber.v1/length.go | 71 - vendor/gopkg.in/asn1-ber.v1/util.go | 24 - vendor/gopkg.in/bufio.v1/LICENSE | 27 - vendor/gopkg.in/bufio.v1/Makefile | 2 - vendor/gopkg.in/bufio.v1/README.md | 4 - vendor/gopkg.in/bufio.v1/buffer.go | 413 - vendor/gopkg.in/bufio.v1/bufio.go | 728 - vendor/gopkg.in/clog.v1/LICENSE | 201 - vendor/gopkg.in/clog.v1/Makefile | 14 - vendor/gopkg.in/clog.v1/README.md | 165 - vendor/gopkg.in/clog.v1/clog.go | 148 - vendor/gopkg.in/clog.v1/console.go | 110 - vendor/gopkg.in/clog.v1/discord.go | 218 - vendor/gopkg.in/clog.v1/error.go | 32 - vendor/gopkg.in/clog.v1/file.go | 315 - vendor/gopkg.in/clog.v1/logger.go | 141 - vendor/gopkg.in/clog.v1/slack.go | 160 - .../editorconfig-core-go.v1/LICENSE | 8 - .../editorconfig-core-go.v1/README.md | 121 - .../editorconfig-core-go.v1/editorconfig.go | 277 - vendor/gopkg.in/gomail.v2/CHANGELOG.md | 20 - vendor/gopkg.in/gomail.v2/CONTRIBUTING.md | 20 - vendor/gopkg.in/gomail.v2/LICENSE | 20 - vendor/gopkg.in/gomail.v2/README.md | 92 - vendor/gopkg.in/gomail.v2/auth.go | 49 - vendor/gopkg.in/gomail.v2/doc.go | 5 - vendor/gopkg.in/gomail.v2/message.go | 322 - vendor/gopkg.in/gomail.v2/mime.go | 21 - vendor/gopkg.in/gomail.v2/mime_go14.go | 25 - vendor/gopkg.in/gomail.v2/send.go | 116 - vendor/gopkg.in/gomail.v2/smtp.go | 202 - vendor/gopkg.in/gomail.v2/writeto.go | 306 - vendor/gopkg.in/ini.v1/LICENSE | 191 - vendor/gopkg.in/ini.v1/Makefile | 15 - vendor/gopkg.in/ini.v1/README.md | 44 - vendor/gopkg.in/ini.v1/error.go | 32 - vendor/gopkg.in/ini.v1/file.go | 407 - vendor/gopkg.in/ini.v1/ini.go | 207 - vendor/gopkg.in/ini.v1/key.go | 751 - vendor/gopkg.in/ini.v1/parser.go | 490 - vendor/gopkg.in/ini.v1/section.go | 257 - vendor/gopkg.in/ini.v1/struct.go | 512 - vendor/gopkg.in/ldap.v2/LICENSE | 27 - vendor/gopkg.in/ldap.v2/Makefile | 42 - vendor/gopkg.in/ldap.v2/README.md | 53 - vendor/gopkg.in/ldap.v2/add.go | 113 - vendor/gopkg.in/ldap.v2/bind.go | 143 - vendor/gopkg.in/ldap.v2/client.go | 27 - vendor/gopkg.in/ldap.v2/compare.go | 85 - vendor/gopkg.in/ldap.v2/conn.go | 467 - vendor/gopkg.in/ldap.v2/control.go | 420 - vendor/gopkg.in/ldap.v2/debug.go | 24 - vendor/gopkg.in/ldap.v2/del.go | 84 - vendor/gopkg.in/ldap.v2/dn.go | 158 - vendor/gopkg.in/ldap.v2/doc.go | 4 - vendor/gopkg.in/ldap.v2/error.go | 148 - vendor/gopkg.in/ldap.v2/filter.go | 466 - vendor/gopkg.in/ldap.v2/ldap.go | 289 - vendor/gopkg.in/ldap.v2/modify.go | 170 - vendor/gopkg.in/ldap.v2/passwdmodify.go | 148 - vendor/gopkg.in/ldap.v2/search.go | 450 - vendor/gopkg.in/macaron.v1/LICENSE | 191 - vendor/gopkg.in/macaron.v1/README.md | 93 - vendor/gopkg.in/macaron.v1/context.go | 532 - vendor/gopkg.in/macaron.v1/logger.go | 73 - vendor/gopkg.in/macaron.v1/macaron.go | 334 - vendor/gopkg.in/macaron.v1/macaronlogo.png | Bin 88924 -> 0 bytes vendor/gopkg.in/macaron.v1/recovery.go | 163 - vendor/gopkg.in/macaron.v1/render.go | 725 - vendor/gopkg.in/macaron.v1/response_writer.go | 114 - vendor/gopkg.in/macaron.v1/return_handler.go | 76 - vendor/gopkg.in/macaron.v1/router.go | 380 - vendor/gopkg.in/macaron.v1/static.go | 220 - vendor/gopkg.in/macaron.v1/tree.go | 390 - vendor/gopkg.in/macaron.v1/util_go17.go | 25 - vendor/gopkg.in/macaron.v1/util_go18.go | 24 - vendor/gopkg.in/redis.v2/LICENSE | 27 - vendor/gopkg.in/redis.v2/Makefile | 3 - vendor/gopkg.in/redis.v2/README.md | 46 - vendor/gopkg.in/redis.v2/command.go | 597 - vendor/gopkg.in/redis.v2/commands.go | 1246 - vendor/gopkg.in/redis.v2/doc.go | 4 - vendor/gopkg.in/redis.v2/error.go | 23 - vendor/gopkg.in/redis.v2/multi.go | 138 - vendor/gopkg.in/redis.v2/parser.go | 262 - vendor/gopkg.in/redis.v2/pipeline.go | 91 - vendor/gopkg.in/redis.v2/pool.go | 405 - vendor/gopkg.in/redis.v2/pubsub.go | 134 - vendor/gopkg.in/redis.v2/rate_limit.go | 53 - vendor/gopkg.in/redis.v2/redis.go | 231 - vendor/gopkg.in/redis.v2/script.go | 52 - vendor/gopkg.in/redis.v2/sentinel.go | 291 - vendor/vendor.json | 797 - 1496 files changed, 985 insertions(+), 785022 deletions(-) create mode 100644 go.mod create mode 100644 go.sum delete mode 100644 vendor/README delete mode 100644 vendor/github.com/Unknwon/cae/LICENSE delete mode 100644 vendor/github.com/Unknwon/cae/README.md delete mode 100644 vendor/github.com/Unknwon/cae/README_ZH.md delete mode 100644 vendor/github.com/Unknwon/cae/cae.go delete mode 100644 vendor/github.com/Unknwon/cae/zip/read.go delete mode 100644 vendor/github.com/Unknwon/cae/zip/stream.go delete mode 100644 vendor/github.com/Unknwon/cae/zip/write.go delete mode 100644 vendor/github.com/Unknwon/cae/zip/zip.go delete mode 100644 vendor/github.com/Unknwon/com/LICENSE delete mode 100644 vendor/github.com/Unknwon/com/README.md delete mode 100644 vendor/github.com/Unknwon/com/cmd.go delete mode 100644 vendor/github.com/Unknwon/com/convert.go delete mode 100644 vendor/github.com/Unknwon/com/dir.go delete mode 100644 vendor/github.com/Unknwon/com/file.go delete mode 100644 vendor/github.com/Unknwon/com/html.go delete mode 100644 vendor/github.com/Unknwon/com/http.go delete mode 100644 vendor/github.com/Unknwon/com/math.go delete mode 100644 vendor/github.com/Unknwon/com/path.go delete mode 100644 vendor/github.com/Unknwon/com/regex.go delete mode 100644 vendor/github.com/Unknwon/com/slice.go delete mode 100644 vendor/github.com/Unknwon/com/string.go delete mode 100644 vendor/github.com/Unknwon/com/time.go delete mode 100644 vendor/github.com/Unknwon/com/url.go delete mode 100644 vendor/github.com/Unknwon/i18n/LICENSE delete mode 100644 vendor/github.com/Unknwon/i18n/Makefile delete mode 100644 vendor/github.com/Unknwon/i18n/README.md delete mode 100644 vendor/github.com/Unknwon/i18n/i18n.go delete mode 100644 vendor/github.com/Unknwon/paginater/LICENSE delete mode 100644 vendor/github.com/Unknwon/paginater/README.md delete mode 100644 vendor/github.com/Unknwon/paginater/paginater.go delete mode 100644 vendor/github.com/beorn7/perks/LICENSE delete mode 100644 vendor/github.com/beorn7/perks/quantile/exampledata.txt delete mode 100644 vendor/github.com/beorn7/perks/quantile/stream.go delete mode 100644 vendor/github.com/boombuler/barcode/LICENSE delete mode 100644 vendor/github.com/boombuler/barcode/README.md delete mode 100644 vendor/github.com/boombuler/barcode/barcode.go delete mode 100644 vendor/github.com/boombuler/barcode/qr/alphanumeric.go delete mode 100644 vendor/github.com/boombuler/barcode/qr/automatic.go delete mode 100644 vendor/github.com/boombuler/barcode/qr/blocks.go delete mode 100644 vendor/github.com/boombuler/barcode/qr/encoder.go delete mode 100644 vendor/github.com/boombuler/barcode/qr/errorcorrection.go delete mode 100644 vendor/github.com/boombuler/barcode/qr/numeric.go delete mode 100644 vendor/github.com/boombuler/barcode/qr/qrcode.go delete mode 100644 vendor/github.com/boombuler/barcode/qr/unicode.go delete mode 100644 vendor/github.com/boombuler/barcode/qr/versioninfo.go delete mode 100644 vendor/github.com/boombuler/barcode/scaledbarcode.go delete mode 100644 vendor/github.com/boombuler/barcode/utils/base1dcode.go delete mode 100644 vendor/github.com/boombuler/barcode/utils/bitlist.go delete mode 100644 vendor/github.com/boombuler/barcode/utils/galoisfield.go delete mode 100644 vendor/github.com/boombuler/barcode/utils/gfpoly.go delete mode 100644 vendor/github.com/boombuler/barcode/utils/reedsolomon.go delete mode 100644 vendor/github.com/boombuler/barcode/utils/runeint.go delete mode 100644 vendor/github.com/bradfitz/gomemcache/LICENSE delete mode 100644 vendor/github.com/bradfitz/gomemcache/memcache/memcache.go delete mode 100644 vendor/github.com/bradfitz/gomemcache/memcache/selector.go delete mode 100644 vendor/github.com/chaseadamsio/goorgeous/LICENSE delete mode 100644 vendor/github.com/chaseadamsio/goorgeous/README.org delete mode 100644 vendor/github.com/chaseadamsio/goorgeous/goorgeous.go delete mode 100644 vendor/github.com/chaseadamsio/goorgeous/gopher.gif delete mode 100644 vendor/github.com/chaseadamsio/goorgeous/gopher_small.gif delete mode 100644 vendor/github.com/chaseadamsio/goorgeous/header.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/LICENSE.txt delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/README.md delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/buf.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/charset.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/collation.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp1250.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp1251.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp1252.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp1253.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp1254.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp1255.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp1256.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp1257.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp1258.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp437.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp850.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp874.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp932.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp936.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp949.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/cp950.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/decimal.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/doc.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/error.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/log.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/mssql.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/mssql_go1.3.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/mssql_go1.3pre.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/mssql_go18.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/net.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/ntlm.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/parser.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/rpc.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/sspi_windows.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/tds.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/token.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/token_string.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/tran.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/types.go delete mode 100644 vendor/github.com/denisenkom/go-mssqldb/uniqueidentifier.go delete mode 100644 vendor/github.com/fatih/color/LICENSE.md delete mode 100644 vendor/github.com/fatih/color/README.md delete mode 100644 vendor/github.com/fatih/color/color.go delete mode 100644 vendor/github.com/fatih/color/doc.go delete mode 100644 vendor/github.com/go-macaron/binding/LICENSE delete mode 100644 vendor/github.com/go-macaron/binding/README.md delete mode 100644 vendor/github.com/go-macaron/binding/binding.go delete mode 100644 vendor/github.com/go-macaron/binding/errors.go delete mode 100644 vendor/github.com/go-macaron/cache/LICENSE delete mode 100644 vendor/github.com/go-macaron/cache/README.md delete mode 100644 vendor/github.com/go-macaron/cache/cache.go delete mode 100644 vendor/github.com/go-macaron/cache/file.go delete mode 100644 vendor/github.com/go-macaron/cache/memcache/memcache.go delete mode 100644 vendor/github.com/go-macaron/cache/memcache/memcache.goconvey delete mode 100644 vendor/github.com/go-macaron/cache/memory.go delete mode 100644 vendor/github.com/go-macaron/cache/redis/redis.go delete mode 100644 vendor/github.com/go-macaron/cache/redis/redis.goconvey delete mode 100644 vendor/github.com/go-macaron/cache/utils.go delete mode 100644 vendor/github.com/go-macaron/captcha/LICENSE delete mode 100644 vendor/github.com/go-macaron/captcha/README.md delete mode 100644 vendor/github.com/go-macaron/captcha/captcha.go delete mode 100644 vendor/github.com/go-macaron/captcha/image.go delete mode 100644 vendor/github.com/go-macaron/captcha/siprng.go delete mode 100644 vendor/github.com/go-macaron/csrf/LICENSE delete mode 100644 vendor/github.com/go-macaron/csrf/README.md delete mode 100644 vendor/github.com/go-macaron/csrf/csrf.go delete mode 100644 vendor/github.com/go-macaron/csrf/xsrf.go delete mode 100644 vendor/github.com/go-macaron/gzip/LICENSE delete mode 100644 vendor/github.com/go-macaron/gzip/README.md delete mode 100644 vendor/github.com/go-macaron/gzip/gzip.go delete mode 100644 vendor/github.com/go-macaron/i18n/LICENSE delete mode 100644 vendor/github.com/go-macaron/i18n/README.md delete mode 100644 vendor/github.com/go-macaron/i18n/i18n.go delete mode 100644 vendor/github.com/go-macaron/inject/LICENSE delete mode 100644 vendor/github.com/go-macaron/inject/README.md delete mode 100644 vendor/github.com/go-macaron/inject/inject.go delete mode 100644 vendor/github.com/go-macaron/session/LICENSE delete mode 100644 vendor/github.com/go-macaron/session/README.md delete mode 100644 vendor/github.com/go-macaron/session/file.go delete mode 100644 vendor/github.com/go-macaron/session/memory.go delete mode 100644 vendor/github.com/go-macaron/session/redis/redis.go delete mode 100644 vendor/github.com/go-macaron/session/redis/redis.goconvey delete mode 100644 vendor/github.com/go-macaron/session/session.go delete mode 100644 vendor/github.com/go-macaron/session/utils.go delete mode 100644 vendor/github.com/go-macaron/toolbox/LICENSE delete mode 100644 vendor/github.com/go-macaron/toolbox/README.md delete mode 100644 vendor/github.com/go-macaron/toolbox/healthcheck.go delete mode 100644 vendor/github.com/go-macaron/toolbox/profile.go delete mode 100644 vendor/github.com/go-macaron/toolbox/statistic.go delete mode 100644 vendor/github.com/go-macaron/toolbox/toolbox.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/AUTHORS delete mode 100644 vendor/github.com/go-sql-driver/mysql/CHANGELOG.md delete mode 100644 vendor/github.com/go-sql-driver/mysql/CONTRIBUTING.md delete mode 100644 vendor/github.com/go-sql-driver/mysql/LICENSE delete mode 100644 vendor/github.com/go-sql-driver/mysql/README.md delete mode 100644 vendor/github.com/go-sql-driver/mysql/appengine.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/auth.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/buffer.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/collations.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/connection.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/const.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/driver.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/dsn.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/errors.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/fields.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/infile.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/packets.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/result.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/rows.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/statement.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/transaction.go delete mode 100644 vendor/github.com/go-sql-driver/mysql/utils.go delete mode 100644 vendor/github.com/go-xorm/builder/LICENSE delete mode 100644 vendor/github.com/go-xorm/builder/README.md delete mode 100644 vendor/github.com/go-xorm/builder/builder.go delete mode 100644 vendor/github.com/go-xorm/builder/builder_delete.go delete mode 100644 vendor/github.com/go-xorm/builder/builder_insert.go delete mode 100644 vendor/github.com/go-xorm/builder/builder_select.go delete mode 100644 vendor/github.com/go-xorm/builder/builder_update.go delete mode 100644 vendor/github.com/go-xorm/builder/circle.yml delete mode 100644 vendor/github.com/go-xorm/builder/cond.go delete mode 100644 vendor/github.com/go-xorm/builder/cond_and.go delete mode 100644 vendor/github.com/go-xorm/builder/cond_between.go delete mode 100644 vendor/github.com/go-xorm/builder/cond_compare.go delete mode 100644 vendor/github.com/go-xorm/builder/cond_eq.go delete mode 100644 vendor/github.com/go-xorm/builder/cond_expr.go delete mode 100644 vendor/github.com/go-xorm/builder/cond_in.go delete mode 100644 vendor/github.com/go-xorm/builder/cond_like.go delete mode 100644 vendor/github.com/go-xorm/builder/cond_neq.go delete mode 100644 vendor/github.com/go-xorm/builder/cond_not.go delete mode 100644 vendor/github.com/go-xorm/builder/cond_notin.go delete mode 100644 vendor/github.com/go-xorm/builder/cond_null.go delete mode 100644 vendor/github.com/go-xorm/builder/cond_or.go delete mode 100644 vendor/github.com/go-xorm/builder/doc.go delete mode 100644 vendor/github.com/go-xorm/builder/error.go delete mode 100644 vendor/github.com/go-xorm/builder/go.mod delete mode 100644 vendor/github.com/go-xorm/core/LICENSE delete mode 100644 vendor/github.com/go-xorm/core/README.md delete mode 100755 vendor/github.com/go-xorm/core/benchmark.sh delete mode 100644 vendor/github.com/go-xorm/core/cache.go delete mode 100644 vendor/github.com/go-xorm/core/circle.yml delete mode 100644 vendor/github.com/go-xorm/core/column.go delete mode 100644 vendor/github.com/go-xorm/core/converstion.go delete mode 100644 vendor/github.com/go-xorm/core/db.go delete mode 100644 vendor/github.com/go-xorm/core/dialect.go delete mode 100644 vendor/github.com/go-xorm/core/driver.go delete mode 100644 vendor/github.com/go-xorm/core/error.go delete mode 100644 vendor/github.com/go-xorm/core/filter.go delete mode 100644 vendor/github.com/go-xorm/core/go.mod delete mode 100644 vendor/github.com/go-xorm/core/ilogger.go delete mode 100644 vendor/github.com/go-xorm/core/index.go delete mode 100644 vendor/github.com/go-xorm/core/mapper.go delete mode 100644 vendor/github.com/go-xorm/core/pk.go delete mode 100644 vendor/github.com/go-xorm/core/rows.go delete mode 100644 vendor/github.com/go-xorm/core/scan.go delete mode 100644 vendor/github.com/go-xorm/core/table.go delete mode 100644 vendor/github.com/go-xorm/core/type.go delete mode 100644 vendor/github.com/go-xorm/xorm/CONTRIBUTING.md delete mode 100644 vendor/github.com/go-xorm/xorm/LICENSE delete mode 100644 vendor/github.com/go-xorm/xorm/README.md delete mode 100644 vendor/github.com/go-xorm/xorm/README_CN.md delete mode 100644 vendor/github.com/go-xorm/xorm/cache_lru.go delete mode 100644 vendor/github.com/go-xorm/xorm/cache_memory_store.go delete mode 100644 vendor/github.com/go-xorm/xorm/circle.yml delete mode 100644 vendor/github.com/go-xorm/xorm/context.go delete mode 100644 vendor/github.com/go-xorm/xorm/convert.go delete mode 100644 vendor/github.com/go-xorm/xorm/dialect_mssql.go delete mode 100644 vendor/github.com/go-xorm/xorm/dialect_mysql.go delete mode 100644 vendor/github.com/go-xorm/xorm/dialect_oracle.go delete mode 100644 vendor/github.com/go-xorm/xorm/dialect_postgres.go delete mode 100644 vendor/github.com/go-xorm/xorm/dialect_sqlite3.go delete mode 100644 vendor/github.com/go-xorm/xorm/doc.go delete mode 100644 vendor/github.com/go-xorm/xorm/engine.go delete mode 100644 vendor/github.com/go-xorm/xorm/engine_cond.go delete mode 100644 vendor/github.com/go-xorm/xorm/engine_group.go delete mode 100644 vendor/github.com/go-xorm/xorm/engine_group_policy.go delete mode 100644 vendor/github.com/go-xorm/xorm/engine_maxlife.go delete mode 100644 vendor/github.com/go-xorm/xorm/engine_table.go delete mode 100644 vendor/github.com/go-xorm/xorm/error.go delete mode 100755 vendor/github.com/go-xorm/xorm/gen_reserved.sh delete mode 100644 vendor/github.com/go-xorm/xorm/go.mod delete mode 100644 vendor/github.com/go-xorm/xorm/helpers.go delete mode 100644 vendor/github.com/go-xorm/xorm/helpler_time.go delete mode 100644 vendor/github.com/go-xorm/xorm/interface.go delete mode 100644 vendor/github.com/go-xorm/xorm/logger.go delete mode 100644 vendor/github.com/go-xorm/xorm/pg_reserved.txt delete mode 100644 vendor/github.com/go-xorm/xorm/processors.go delete mode 100644 vendor/github.com/go-xorm/xorm/rows.go delete mode 100644 vendor/github.com/go-xorm/xorm/session.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_cols.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_cond.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_convert.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_delete.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_exist.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_find.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_get.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_insert.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_iterate.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_query.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_raw.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_schema.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_stats.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_tx.go delete mode 100644 vendor/github.com/go-xorm/xorm/session_update.go delete mode 100644 vendor/github.com/go-xorm/xorm/statement.go delete mode 100644 vendor/github.com/go-xorm/xorm/syslogger.go delete mode 100644 vendor/github.com/go-xorm/xorm/tag.go delete mode 100755 vendor/github.com/go-xorm/xorm/test_mssql.sh delete mode 100755 vendor/github.com/go-xorm/xorm/test_mssql_cache.sh delete mode 100755 vendor/github.com/go-xorm/xorm/test_mymysql.sh delete mode 100755 vendor/github.com/go-xorm/xorm/test_mymysql_cache.sh delete mode 100755 vendor/github.com/go-xorm/xorm/test_mysql.sh delete mode 100755 vendor/github.com/go-xorm/xorm/test_mysql_cache.sh delete mode 100755 vendor/github.com/go-xorm/xorm/test_postgres.sh delete mode 100755 vendor/github.com/go-xorm/xorm/test_postgres_cache.sh delete mode 100755 vendor/github.com/go-xorm/xorm/test_sqlite.sh delete mode 100755 vendor/github.com/go-xorm/xorm/test_sqlite_cache.sh delete mode 100644 vendor/github.com/go-xorm/xorm/types.go delete mode 100644 vendor/github.com/go-xorm/xorm/xorm.go delete mode 100644 vendor/github.com/gogs/chardet/2022.go delete mode 100644 vendor/github.com/gogs/chardet/AUTHORS delete mode 100644 vendor/github.com/gogs/chardet/LICENSE delete mode 100644 vendor/github.com/gogs/chardet/README.md delete mode 100644 vendor/github.com/gogs/chardet/detector.go delete mode 100644 vendor/github.com/gogs/chardet/icu-license.html delete mode 100644 vendor/github.com/gogs/chardet/multi_byte.go delete mode 100644 vendor/github.com/gogs/chardet/recognizer.go delete mode 100644 vendor/github.com/gogs/chardet/single_byte.go delete mode 100644 vendor/github.com/gogs/chardet/unicode.go delete mode 100644 vendor/github.com/gogs/chardet/utf8.go delete mode 100644 vendor/github.com/gogs/cron/LICENSE delete mode 100644 vendor/github.com/gogs/cron/README.md delete mode 100644 vendor/github.com/gogs/cron/constantdelay.go delete mode 100644 vendor/github.com/gogs/cron/cron.go delete mode 100644 vendor/github.com/gogs/cron/doc.go delete mode 100644 vendor/github.com/gogs/cron/parser.go delete mode 100644 vendor/github.com/gogs/cron/spec.go delete mode 100644 vendor/github.com/gogs/git-module/LICENSE delete mode 100644 vendor/github.com/gogs/git-module/README.md delete mode 100644 vendor/github.com/gogs/git-module/blob.go delete mode 100644 vendor/github.com/gogs/git-module/command.go delete mode 100644 vendor/github.com/gogs/git-module/commit.go delete mode 100644 vendor/github.com/gogs/git-module/commit_archive.go delete mode 100644 vendor/github.com/gogs/git-module/error.go delete mode 100644 vendor/github.com/gogs/git-module/git.go delete mode 100644 vendor/github.com/gogs/git-module/hook.go delete mode 100644 vendor/github.com/gogs/git-module/repo.go delete mode 100644 vendor/github.com/gogs/git-module/repo_branch.go delete mode 100644 vendor/github.com/gogs/git-module/repo_commit.go delete mode 100644 vendor/github.com/gogs/git-module/repo_diff.go delete mode 100644 vendor/github.com/gogs/git-module/repo_hook.go delete mode 100644 vendor/github.com/gogs/git-module/repo_object.go delete mode 100644 vendor/github.com/gogs/git-module/repo_pull.go delete mode 100644 vendor/github.com/gogs/git-module/repo_tag.go delete mode 100644 vendor/github.com/gogs/git-module/repo_tree.go delete mode 100644 vendor/github.com/gogs/git-module/sha1.go delete mode 100644 vendor/github.com/gogs/git-module/signature.go delete mode 100644 vendor/github.com/gogs/git-module/submodule.go delete mode 100644 vendor/github.com/gogs/git-module/tag.go delete mode 100644 vendor/github.com/gogs/git-module/tree.go delete mode 100644 vendor/github.com/gogs/git-module/tree_blob.go delete mode 100644 vendor/github.com/gogs/git-module/tree_entry.go delete mode 100644 vendor/github.com/gogs/git-module/utils.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/LICENSE delete mode 100644 vendor/github.com/gogs/go-gogs-client/README.md delete mode 100644 vendor/github.com/gogs/go-gogs-client/admin_org.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/admin_repo.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/admin_user.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/gogs.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/issue.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/issue_comment.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/issue_label.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/issue_milestone.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/media_types.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/miscellaneous.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/org.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/org_member.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/org_team.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/pull.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/release.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/repo.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/repo_branch.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/repo_collaborator.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/repo_commit.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/repo_file.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/repo_hook.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/repo_key.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/user.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/user_app.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/user_email.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/user_follow.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/user_key.go delete mode 100644 vendor/github.com/gogs/go-gogs-client/utils.go delete mode 100644 vendor/github.com/gogs/go-libravatar/LICENSE delete mode 100644 vendor/github.com/gogs/go-libravatar/Makefile delete mode 100644 vendor/github.com/gogs/go-libravatar/README.md delete mode 100644 vendor/github.com/gogs/go-libravatar/libravatar.go delete mode 100644 vendor/github.com/gogs/minwinsvc/LICENSE delete mode 100644 vendor/github.com/gogs/minwinsvc/README.md delete mode 100644 vendor/github.com/gogs/minwinsvc/minwinsvc.go delete mode 100644 vendor/github.com/gogs/minwinsvc/svc_other.go delete mode 100644 vendor/github.com/gogs/minwinsvc/svc_windows.go delete mode 100644 vendor/github.com/golang/protobuf/LICENSE delete mode 100644 vendor/github.com/golang/protobuf/proto/clone.go delete mode 100644 vendor/github.com/golang/protobuf/proto/decode.go delete mode 100644 vendor/github.com/golang/protobuf/proto/deprecated.go delete mode 100644 vendor/github.com/golang/protobuf/proto/discard.go delete mode 100644 vendor/github.com/golang/protobuf/proto/encode.go delete mode 100644 vendor/github.com/golang/protobuf/proto/equal.go delete mode 100644 vendor/github.com/golang/protobuf/proto/extensions.go delete mode 100644 vendor/github.com/golang/protobuf/proto/lib.go delete mode 100644 vendor/github.com/golang/protobuf/proto/message_set.go delete mode 100644 vendor/github.com/golang/protobuf/proto/pointer_reflect.go delete mode 100644 vendor/github.com/golang/protobuf/proto/pointer_unsafe.go delete mode 100644 vendor/github.com/golang/protobuf/proto/properties.go delete mode 100644 vendor/github.com/golang/protobuf/proto/table_marshal.go delete mode 100644 vendor/github.com/golang/protobuf/proto/table_merge.go delete mode 100644 vendor/github.com/golang/protobuf/proto/table_unmarshal.go delete mode 100644 vendor/github.com/golang/protobuf/proto/text.go delete mode 100644 vendor/github.com/golang/protobuf/proto/text_parser.go delete mode 100644 vendor/github.com/google/go-github/LICENSE delete mode 100644 vendor/github.com/google/go-github/github/activity.go delete mode 100644 vendor/github.com/google/go-github/github/activity_events.go delete mode 100644 vendor/github.com/google/go-github/github/activity_notifications.go delete mode 100644 vendor/github.com/google/go-github/github/activity_star.go delete mode 100644 vendor/github.com/google/go-github/github/activity_watching.go delete mode 100644 vendor/github.com/google/go-github/github/admin.go delete mode 100644 vendor/github.com/google/go-github/github/admin_stats.go delete mode 100644 vendor/github.com/google/go-github/github/apps.go delete mode 100644 vendor/github.com/google/go-github/github/apps_installation.go delete mode 100644 vendor/github.com/google/go-github/github/apps_marketplace.go delete mode 100644 vendor/github.com/google/go-github/github/authorizations.go delete mode 100644 vendor/github.com/google/go-github/github/doc.go delete mode 100644 vendor/github.com/google/go-github/github/event_types.go delete mode 100644 vendor/github.com/google/go-github/github/gen-accessors.go delete mode 100644 vendor/github.com/google/go-github/github/gists.go delete mode 100644 vendor/github.com/google/go-github/github/gists_comments.go delete mode 100644 vendor/github.com/google/go-github/github/git.go delete mode 100644 vendor/github.com/google/go-github/github/git_blobs.go delete mode 100644 vendor/github.com/google/go-github/github/git_commits.go delete mode 100644 vendor/github.com/google/go-github/github/git_refs.go delete mode 100644 vendor/github.com/google/go-github/github/git_tags.go delete mode 100644 vendor/github.com/google/go-github/github/git_trees.go delete mode 100644 vendor/github.com/google/go-github/github/github-accessors.go delete mode 100644 vendor/github.com/google/go-github/github/github.go delete mode 100644 vendor/github.com/google/go-github/github/gitignore.go delete mode 100644 vendor/github.com/google/go-github/github/issues.go delete mode 100644 vendor/github.com/google/go-github/github/issues_assignees.go delete mode 100644 vendor/github.com/google/go-github/github/issues_comments.go delete mode 100644 vendor/github.com/google/go-github/github/issues_events.go delete mode 100644 vendor/github.com/google/go-github/github/issues_labels.go delete mode 100644 vendor/github.com/google/go-github/github/issues_milestones.go delete mode 100644 vendor/github.com/google/go-github/github/issues_timeline.go delete mode 100644 vendor/github.com/google/go-github/github/licenses.go delete mode 100644 vendor/github.com/google/go-github/github/messages.go delete mode 100644 vendor/github.com/google/go-github/github/migrations.go delete mode 100644 vendor/github.com/google/go-github/github/migrations_source_import.go delete mode 100644 vendor/github.com/google/go-github/github/misc.go delete mode 100644 vendor/github.com/google/go-github/github/orgs.go delete mode 100644 vendor/github.com/google/go-github/github/orgs_hooks.go delete mode 100644 vendor/github.com/google/go-github/github/orgs_members.go delete mode 100644 vendor/github.com/google/go-github/github/orgs_outside_collaborators.go delete mode 100644 vendor/github.com/google/go-github/github/orgs_projects.go delete mode 100644 vendor/github.com/google/go-github/github/orgs_teams.go delete mode 100644 vendor/github.com/google/go-github/github/orgs_users_blocking.go delete mode 100644 vendor/github.com/google/go-github/github/projects.go delete mode 100644 vendor/github.com/google/go-github/github/pulls.go delete mode 100644 vendor/github.com/google/go-github/github/pulls_comments.go delete mode 100644 vendor/github.com/google/go-github/github/pulls_reviewers.go delete mode 100644 vendor/github.com/google/go-github/github/pulls_reviews.go delete mode 100644 vendor/github.com/google/go-github/github/reactions.go delete mode 100644 vendor/github.com/google/go-github/github/repos.go delete mode 100644 vendor/github.com/google/go-github/github/repos_collaborators.go delete mode 100644 vendor/github.com/google/go-github/github/repos_comments.go delete mode 100644 vendor/github.com/google/go-github/github/repos_commits.go delete mode 100644 vendor/github.com/google/go-github/github/repos_community_health.go delete mode 100644 vendor/github.com/google/go-github/github/repos_contents.go delete mode 100644 vendor/github.com/google/go-github/github/repos_deployments.go delete mode 100644 vendor/github.com/google/go-github/github/repos_forks.go delete mode 100644 vendor/github.com/google/go-github/github/repos_hooks.go delete mode 100644 vendor/github.com/google/go-github/github/repos_invitations.go delete mode 100644 vendor/github.com/google/go-github/github/repos_keys.go delete mode 100644 vendor/github.com/google/go-github/github/repos_merging.go delete mode 100644 vendor/github.com/google/go-github/github/repos_pages.go delete mode 100644 vendor/github.com/google/go-github/github/repos_projects.go delete mode 100644 vendor/github.com/google/go-github/github/repos_releases.go delete mode 100644 vendor/github.com/google/go-github/github/repos_stats.go delete mode 100644 vendor/github.com/google/go-github/github/repos_statuses.go delete mode 100644 vendor/github.com/google/go-github/github/repos_traffic.go delete mode 100644 vendor/github.com/google/go-github/github/search.go delete mode 100644 vendor/github.com/google/go-github/github/strings.go delete mode 100644 vendor/github.com/google/go-github/github/teams.go delete mode 100644 vendor/github.com/google/go-github/github/teams_discussion_comments.go delete mode 100644 vendor/github.com/google/go-github/github/teams_discussions.go delete mode 100644 vendor/github.com/google/go-github/github/timestamp.go delete mode 100644 vendor/github.com/google/go-github/github/users.go delete mode 100644 vendor/github.com/google/go-github/github/users_administration.go delete mode 100644 vendor/github.com/google/go-github/github/users_blocking.go delete mode 100644 vendor/github.com/google/go-github/github/users_emails.go delete mode 100644 vendor/github.com/google/go-github/github/users_followers.go delete mode 100644 vendor/github.com/google/go-github/github/users_gpg_keys.go delete mode 100644 vendor/github.com/google/go-github/github/users_keys.go delete mode 100644 vendor/github.com/google/go-github/github/with_appengine.go delete mode 100644 vendor/github.com/google/go-github/github/without_appengine.go delete mode 100644 vendor/github.com/google/go-querystring/LICENSE delete mode 100644 vendor/github.com/google/go-querystring/query/encode.go delete mode 100644 vendor/github.com/issue9/identicon/LICENSE delete mode 100644 vendor/github.com/issue9/identicon/README.md delete mode 100644 vendor/github.com/issue9/identicon/block.go delete mode 100644 vendor/github.com/issue9/identicon/doc.go delete mode 100644 vendor/github.com/issue9/identicon/identicon.go delete mode 100644 vendor/github.com/issue9/identicon/polygon.go delete mode 100644 vendor/github.com/jaytaylor/html2text/LICENSE delete mode 100644 vendor/github.com/jaytaylor/html2text/README.md delete mode 100644 vendor/github.com/jaytaylor/html2text/html2text.go delete mode 100644 vendor/github.com/json-iterator/go/Gopkg.lock delete mode 100644 vendor/github.com/json-iterator/go/Gopkg.toml delete mode 100644 vendor/github.com/json-iterator/go/LICENSE delete mode 100644 vendor/github.com/json-iterator/go/README.md delete mode 100644 vendor/github.com/json-iterator/go/adapter.go delete mode 100644 vendor/github.com/json-iterator/go/any.go delete mode 100644 vendor/github.com/json-iterator/go/any_array.go delete mode 100644 vendor/github.com/json-iterator/go/any_bool.go delete mode 100644 vendor/github.com/json-iterator/go/any_float.go delete mode 100644 vendor/github.com/json-iterator/go/any_int32.go delete mode 100644 vendor/github.com/json-iterator/go/any_int64.go delete mode 100644 vendor/github.com/json-iterator/go/any_invalid.go delete mode 100644 vendor/github.com/json-iterator/go/any_nil.go delete mode 100644 vendor/github.com/json-iterator/go/any_number.go delete mode 100644 vendor/github.com/json-iterator/go/any_object.go delete mode 100644 vendor/github.com/json-iterator/go/any_str.go delete mode 100644 vendor/github.com/json-iterator/go/any_uint32.go delete mode 100644 vendor/github.com/json-iterator/go/any_uint64.go delete mode 100755 vendor/github.com/json-iterator/go/build.sh delete mode 100644 vendor/github.com/json-iterator/go/config.go delete mode 100644 vendor/github.com/json-iterator/go/fuzzy_mode_convert_table.md delete mode 100644 vendor/github.com/json-iterator/go/iter.go delete mode 100644 vendor/github.com/json-iterator/go/iter_array.go delete mode 100644 vendor/github.com/json-iterator/go/iter_float.go delete mode 100644 vendor/github.com/json-iterator/go/iter_int.go delete mode 100644 vendor/github.com/json-iterator/go/iter_object.go delete mode 100644 vendor/github.com/json-iterator/go/iter_skip.go delete mode 100644 vendor/github.com/json-iterator/go/iter_skip_sloppy.go delete mode 100644 vendor/github.com/json-iterator/go/iter_skip_strict.go delete mode 100644 vendor/github.com/json-iterator/go/iter_str.go delete mode 100644 vendor/github.com/json-iterator/go/jsoniter.go delete mode 100644 vendor/github.com/json-iterator/go/pool.go delete mode 100644 vendor/github.com/json-iterator/go/reflect.go delete mode 100644 vendor/github.com/json-iterator/go/reflect_array.go delete mode 100644 vendor/github.com/json-iterator/go/reflect_dynamic.go delete mode 100644 vendor/github.com/json-iterator/go/reflect_extension.go delete mode 100644 vendor/github.com/json-iterator/go/reflect_json_number.go delete mode 100644 vendor/github.com/json-iterator/go/reflect_json_raw_message.go delete mode 100644 vendor/github.com/json-iterator/go/reflect_map.go delete mode 100644 vendor/github.com/json-iterator/go/reflect_marshaler.go delete mode 100644 vendor/github.com/json-iterator/go/reflect_native.go delete mode 100644 vendor/github.com/json-iterator/go/reflect_optional.go delete mode 100644 vendor/github.com/json-iterator/go/reflect_slice.go delete mode 100644 vendor/github.com/json-iterator/go/reflect_struct_decoder.go delete mode 100644 vendor/github.com/json-iterator/go/reflect_struct_encoder.go delete mode 100644 vendor/github.com/json-iterator/go/stream.go delete mode 100644 vendor/github.com/json-iterator/go/stream_float.go delete mode 100644 vendor/github.com/json-iterator/go/stream_int.go delete mode 100644 vendor/github.com/json-iterator/go/stream_str.go delete mode 100755 vendor/github.com/json-iterator/go/test.sh delete mode 100644 vendor/github.com/jtolds/gls/LICENSE delete mode 100644 vendor/github.com/jtolds/gls/README.md delete mode 100644 vendor/github.com/jtolds/gls/context.go delete mode 100644 vendor/github.com/jtolds/gls/gen_sym.go delete mode 100644 vendor/github.com/jtolds/gls/gid.go delete mode 100644 vendor/github.com/jtolds/gls/id_pool.go delete mode 100644 vendor/github.com/jtolds/gls/stack_tags.go delete mode 100644 vendor/github.com/jtolds/gls/stack_tags_js.go delete mode 100644 vendor/github.com/jtolds/gls/stack_tags_main.go delete mode 100644 vendor/github.com/klauspost/compress/LICENSE delete mode 100644 vendor/github.com/klauspost/compress/flate/copy.go delete mode 100644 vendor/github.com/klauspost/compress/flate/crc32_amd64.go delete mode 100644 vendor/github.com/klauspost/compress/flate/crc32_amd64.s delete mode 100644 vendor/github.com/klauspost/compress/flate/crc32_noasm.go delete mode 100644 vendor/github.com/klauspost/compress/flate/deflate.go delete mode 100644 vendor/github.com/klauspost/compress/flate/dict_decoder.go delete mode 100644 vendor/github.com/klauspost/compress/flate/gen.go delete mode 100644 vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go delete mode 100644 vendor/github.com/klauspost/compress/flate/huffman_code.go delete mode 100644 vendor/github.com/klauspost/compress/flate/inflate.go delete mode 100644 vendor/github.com/klauspost/compress/flate/reverse_bits.go delete mode 100644 vendor/github.com/klauspost/compress/flate/snappy.go delete mode 100644 vendor/github.com/klauspost/compress/flate/token.go delete mode 100644 vendor/github.com/klauspost/compress/gzip/gunzip.go delete mode 100644 vendor/github.com/klauspost/compress/gzip/gzip.go delete mode 100644 vendor/github.com/klauspost/cpuid/LICENSE delete mode 100644 vendor/github.com/klauspost/cpuid/README.md delete mode 100644 vendor/github.com/klauspost/cpuid/cpuid.go delete mode 100644 vendor/github.com/klauspost/cpuid/cpuid_386.s delete mode 100644 vendor/github.com/klauspost/cpuid/cpuid_amd64.s delete mode 100644 vendor/github.com/klauspost/cpuid/detect_intel.go delete mode 100644 vendor/github.com/klauspost/cpuid/detect_ref.go delete mode 100644 vendor/github.com/klauspost/cpuid/generate.go delete mode 100644 vendor/github.com/klauspost/cpuid/private-gen.go delete mode 100644 vendor/github.com/klauspost/crc32/LICENSE delete mode 100644 vendor/github.com/klauspost/crc32/README.md delete mode 100644 vendor/github.com/klauspost/crc32/crc32.go delete mode 100644 vendor/github.com/klauspost/crc32/crc32_amd64.go delete mode 100644 vendor/github.com/klauspost/crc32/crc32_amd64.s delete mode 100644 vendor/github.com/klauspost/crc32/crc32_amd64p32.go delete mode 100644 vendor/github.com/klauspost/crc32/crc32_amd64p32.s delete mode 100644 vendor/github.com/klauspost/crc32/crc32_generic.go delete mode 100644 vendor/github.com/klauspost/crc32/crc32_otherarch.go delete mode 100644 vendor/github.com/klauspost/crc32/crc32_s390x.go delete mode 100644 vendor/github.com/klauspost/crc32/crc32_s390x.s delete mode 100644 vendor/github.com/lib/pq/CONTRIBUTING.md delete mode 100644 vendor/github.com/lib/pq/LICENSE.md delete mode 100644 vendor/github.com/lib/pq/README.md delete mode 100644 vendor/github.com/lib/pq/array.go delete mode 100644 vendor/github.com/lib/pq/buf.go delete mode 100644 vendor/github.com/lib/pq/conn.go delete mode 100644 vendor/github.com/lib/pq/copy.go delete mode 100644 vendor/github.com/lib/pq/doc.go delete mode 100644 vendor/github.com/lib/pq/encode.go delete mode 100644 vendor/github.com/lib/pq/error.go delete mode 100644 vendor/github.com/lib/pq/notify.go delete mode 100644 vendor/github.com/lib/pq/oid/doc.go delete mode 100644 vendor/github.com/lib/pq/oid/gen.go delete mode 100644 vendor/github.com/lib/pq/oid/types.go delete mode 100644 vendor/github.com/lib/pq/url.go delete mode 100644 vendor/github.com/lib/pq/user_posix.go delete mode 100644 vendor/github.com/lib/pq/user_windows.go delete mode 100644 vendor/github.com/mattn/go-colorable/LICENSE delete mode 100644 vendor/github.com/mattn/go-colorable/README.md delete mode 100644 vendor/github.com/mattn/go-colorable/colorable_others.go delete mode 100644 vendor/github.com/mattn/go-colorable/colorable_windows.go delete mode 100644 vendor/github.com/mattn/go-colorable/noncolorable.go delete mode 100644 vendor/github.com/mattn/go-isatty/LICENSE delete mode 100644 vendor/github.com/mattn/go-isatty/README.md delete mode 100644 vendor/github.com/mattn/go-isatty/doc.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_appengine.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_bsd.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_linux.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_solaris.go delete mode 100644 vendor/github.com/mattn/go-isatty/isatty_windows.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/LICENSE delete mode 100644 vendor/github.com/mattn/go-sqlite3/README.md delete mode 100644 vendor/github.com/mattn/go-sqlite3/backup.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/callback.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/doc.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/error.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c delete mode 100644 vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h delete mode 100644 vendor/github.com/mattn/go-sqlite3/sqlite3.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/sqlite3_fts5.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/sqlite3_go18.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/sqlite3_icu.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/sqlite3_json1.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/sqlite3_libsqlite3.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/sqlite3_load_extension.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/sqlite3_omit_load_extension.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/sqlite3_other.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/sqlite3_type.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/sqlite3_windows.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/sqlite3ext.h delete mode 100644 vendor/github.com/mattn/go-sqlite3/tracecallback.go delete mode 100644 vendor/github.com/mattn/go-sqlite3/tracecallback_noimpl.go delete mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/LICENSE delete mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/NOTICE delete mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/Makefile delete mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode.go delete mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/doc.go delete mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode.go delete mode 100644 vendor/github.com/mcuadros/go-version/LICENSE delete mode 100644 vendor/github.com/mcuadros/go-version/README.md delete mode 100644 vendor/github.com/mcuadros/go-version/compare.go delete mode 100644 vendor/github.com/mcuadros/go-version/constraint.go delete mode 100644 vendor/github.com/mcuadros/go-version/doc.go delete mode 100644 vendor/github.com/mcuadros/go-version/group.go delete mode 100644 vendor/github.com/mcuadros/go-version/normalize.go delete mode 100644 vendor/github.com/mcuadros/go-version/sort.go delete mode 100644 vendor/github.com/mcuadros/go-version/stability.go delete mode 100644 vendor/github.com/microcosm-cc/bluemonday/CONTRIBUTING.md delete mode 100644 vendor/github.com/microcosm-cc/bluemonday/CREDITS.md delete mode 100644 vendor/github.com/microcosm-cc/bluemonday/LICENCE.md delete mode 100644 vendor/github.com/microcosm-cc/bluemonday/Makefile delete mode 100644 vendor/github.com/microcosm-cc/bluemonday/README.md delete mode 100644 vendor/github.com/microcosm-cc/bluemonday/doc.go delete mode 100644 vendor/github.com/microcosm-cc/bluemonday/helpers.go delete mode 100644 vendor/github.com/microcosm-cc/bluemonday/policies.go delete mode 100644 vendor/github.com/microcosm-cc/bluemonday/policy.go delete mode 100644 vendor/github.com/microcosm-cc/bluemonday/sanitize.go delete mode 100644 vendor/github.com/modern-go/concurrent/LICENSE delete mode 100644 vendor/github.com/modern-go/concurrent/README.md delete mode 100644 vendor/github.com/modern-go/concurrent/executor.go delete mode 100644 vendor/github.com/modern-go/concurrent/go_above_19.go delete mode 100644 vendor/github.com/modern-go/concurrent/go_below_19.go delete mode 100644 vendor/github.com/modern-go/concurrent/log.go delete mode 100755 vendor/github.com/modern-go/concurrent/test.sh delete mode 100644 vendor/github.com/modern-go/concurrent/unbounded_executor.go delete mode 100644 vendor/github.com/modern-go/reflect2/Gopkg.lock delete mode 100644 vendor/github.com/modern-go/reflect2/Gopkg.toml delete mode 100644 vendor/github.com/modern-go/reflect2/LICENSE delete mode 100644 vendor/github.com/modern-go/reflect2/README.md delete mode 100644 vendor/github.com/modern-go/reflect2/go_above_17.go delete mode 100644 vendor/github.com/modern-go/reflect2/go_above_19.go delete mode 100644 vendor/github.com/modern-go/reflect2/go_below_17.go delete mode 100644 vendor/github.com/modern-go/reflect2/go_below_19.go delete mode 100644 vendor/github.com/modern-go/reflect2/reflect2.go delete mode 100644 vendor/github.com/modern-go/reflect2/reflect2_amd64.s delete mode 100644 vendor/github.com/modern-go/reflect2/reflect2_kind.go delete mode 100644 vendor/github.com/modern-go/reflect2/relfect2_386.s delete mode 100644 vendor/github.com/modern-go/reflect2/relfect2_amd64p32.s delete mode 100644 vendor/github.com/modern-go/reflect2/relfect2_arm.s delete mode 100644 vendor/github.com/modern-go/reflect2/relfect2_arm64.s delete mode 100644 vendor/github.com/modern-go/reflect2/relfect2_mips64x.s delete mode 100644 vendor/github.com/modern-go/reflect2/relfect2_mipsx.s delete mode 100644 vendor/github.com/modern-go/reflect2/relfect2_ppc64x.s delete mode 100644 vendor/github.com/modern-go/reflect2/relfect2_s390x.s delete mode 100644 vendor/github.com/modern-go/reflect2/safe_field.go delete mode 100644 vendor/github.com/modern-go/reflect2/safe_map.go delete mode 100644 vendor/github.com/modern-go/reflect2/safe_slice.go delete mode 100644 vendor/github.com/modern-go/reflect2/safe_struct.go delete mode 100644 vendor/github.com/modern-go/reflect2/safe_type.go delete mode 100755 vendor/github.com/modern-go/reflect2/test.sh delete mode 100644 vendor/github.com/modern-go/reflect2/type_map.go delete mode 100644 vendor/github.com/modern-go/reflect2/unsafe_array.go delete mode 100644 vendor/github.com/modern-go/reflect2/unsafe_eface.go delete mode 100644 vendor/github.com/modern-go/reflect2/unsafe_field.go delete mode 100644 vendor/github.com/modern-go/reflect2/unsafe_iface.go delete mode 100644 vendor/github.com/modern-go/reflect2/unsafe_link.go delete mode 100644 vendor/github.com/modern-go/reflect2/unsafe_map.go delete mode 100644 vendor/github.com/modern-go/reflect2/unsafe_ptr.go delete mode 100644 vendor/github.com/modern-go/reflect2/unsafe_slice.go delete mode 100644 vendor/github.com/modern-go/reflect2/unsafe_struct.go delete mode 100644 vendor/github.com/modern-go/reflect2/unsafe_type.go delete mode 100644 vendor/github.com/msteinert/pam/LICENSE delete mode 100644 vendor/github.com/msteinert/pam/README.md delete mode 100644 vendor/github.com/msteinert/pam/callback.go delete mode 100644 vendor/github.com/msteinert/pam/transaction.c delete mode 100644 vendor/github.com/msteinert/pam/transaction.go delete mode 100644 vendor/github.com/nfnt/resize/LICENSE delete mode 100644 vendor/github.com/nfnt/resize/README.md delete mode 100644 vendor/github.com/nfnt/resize/converter.go delete mode 100644 vendor/github.com/nfnt/resize/filters.go delete mode 100644 vendor/github.com/nfnt/resize/nearest.go delete mode 100644 vendor/github.com/nfnt/resize/resize.go delete mode 100644 vendor/github.com/nfnt/resize/thumbnail.go delete mode 100644 vendor/github.com/nfnt/resize/ycc.go delete mode 100644 vendor/github.com/pquerna/otp/LICENSE delete mode 100644 vendor/github.com/pquerna/otp/NOTICE delete mode 100644 vendor/github.com/pquerna/otp/README.md delete mode 100644 vendor/github.com/pquerna/otp/doc.go delete mode 100644 vendor/github.com/pquerna/otp/hotp/hotp.go delete mode 100644 vendor/github.com/pquerna/otp/otp.go delete mode 100644 vendor/github.com/pquerna/otp/totp/totp.go delete mode 100644 vendor/github.com/prometheus/client_golang/LICENSE delete mode 100644 vendor/github.com/prometheus/client_golang/NOTICE delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/README.md delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/collector.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/counter.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/desc.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/doc.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/fnv.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/gauge.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/go_collector.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/histogram.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/http.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/internal/metric.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/labels.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/metric.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/observer.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/process_collector.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_8.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_pre_1_8.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client_1_8.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/registry.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/summary.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/timer.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/untyped.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/value.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/vec.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/wrap.go delete mode 100644 vendor/github.com/prometheus/client_model/LICENSE delete mode 100644 vendor/github.com/prometheus/client_model/NOTICE delete mode 100644 vendor/github.com/prometheus/client_model/go/metrics.pb.go delete mode 100644 vendor/github.com/prometheus/common/LICENSE delete mode 100644 vendor/github.com/prometheus/common/NOTICE delete mode 100644 vendor/github.com/prometheus/common/expfmt/decode.go delete mode 100644 vendor/github.com/prometheus/common/expfmt/encode.go delete mode 100644 vendor/github.com/prometheus/common/expfmt/expfmt.go delete mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz.go delete mode 100644 vendor/github.com/prometheus/common/expfmt/text_create.go delete mode 100644 vendor/github.com/prometheus/common/expfmt/text_parse.go delete mode 100644 vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt delete mode 100644 vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/autoneg.go delete mode 100644 vendor/github.com/prometheus/common/model/alert.go delete mode 100644 vendor/github.com/prometheus/common/model/fingerprinting.go delete mode 100644 vendor/github.com/prometheus/common/model/fnv.go delete mode 100644 vendor/github.com/prometheus/common/model/labels.go delete mode 100644 vendor/github.com/prometheus/common/model/labelset.go delete mode 100644 vendor/github.com/prometheus/common/model/metric.go delete mode 100644 vendor/github.com/prometheus/common/model/model.go delete mode 100644 vendor/github.com/prometheus/common/model/signature.go delete mode 100644 vendor/github.com/prometheus/common/model/silence.go delete mode 100644 vendor/github.com/prometheus/common/model/time.go delete mode 100644 vendor/github.com/prometheus/common/model/value.go delete mode 100644 vendor/github.com/prometheus/procfs/CONTRIBUTING.md delete mode 100644 vendor/github.com/prometheus/procfs/LICENSE delete mode 100644 vendor/github.com/prometheus/procfs/MAINTAINERS.md delete mode 100644 vendor/github.com/prometheus/procfs/Makefile delete mode 100644 vendor/github.com/prometheus/procfs/NOTICE delete mode 100644 vendor/github.com/prometheus/procfs/README.md delete mode 100644 vendor/github.com/prometheus/procfs/buddyinfo.go delete mode 100644 vendor/github.com/prometheus/procfs/doc.go delete mode 100644 vendor/github.com/prometheus/procfs/fixtures.ttar delete mode 100644 vendor/github.com/prometheus/procfs/fs.go delete mode 100644 vendor/github.com/prometheus/procfs/internal/util/parse.go delete mode 100644 vendor/github.com/prometheus/procfs/ipvs.go delete mode 100644 vendor/github.com/prometheus/procfs/mdstat.go delete mode 100644 vendor/github.com/prometheus/procfs/mountstats.go delete mode 100644 vendor/github.com/prometheus/procfs/net_dev.go delete mode 100644 vendor/github.com/prometheus/procfs/nfs/nfs.go delete mode 100644 vendor/github.com/prometheus/procfs/nfs/parse.go delete mode 100644 vendor/github.com/prometheus/procfs/nfs/parse_nfs.go delete mode 100644 vendor/github.com/prometheus/procfs/nfs/parse_nfsd.go delete mode 100644 vendor/github.com/prometheus/procfs/proc.go delete mode 100644 vendor/github.com/prometheus/procfs/proc_io.go delete mode 100644 vendor/github.com/prometheus/procfs/proc_limits.go delete mode 100644 vendor/github.com/prometheus/procfs/proc_ns.go delete mode 100644 vendor/github.com/prometheus/procfs/proc_stat.go delete mode 100644 vendor/github.com/prometheus/procfs/stat.go delete mode 100755 vendor/github.com/prometheus/procfs/ttar delete mode 100644 vendor/github.com/prometheus/procfs/xfrm.go delete mode 100644 vendor/github.com/prometheus/procfs/xfs/parse.go delete mode 100644 vendor/github.com/prometheus/procfs/xfs/xfs.go delete mode 100644 vendor/github.com/russross/blackfriday/LICENSE.txt delete mode 100644 vendor/github.com/russross/blackfriday/README.md delete mode 100644 vendor/github.com/russross/blackfriday/block.go delete mode 100644 vendor/github.com/russross/blackfriday/html.go delete mode 100644 vendor/github.com/russross/blackfriday/inline.go delete mode 100644 vendor/github.com/russross/blackfriday/latex.go delete mode 100644 vendor/github.com/russross/blackfriday/markdown.go delete mode 100644 vendor/github.com/russross/blackfriday/smartypants.go delete mode 100644 vendor/github.com/satori/go.uuid/LICENSE delete mode 100644 vendor/github.com/satori/go.uuid/README.md delete mode 100644 vendor/github.com/satori/go.uuid/uuid.go delete mode 100644 vendor/github.com/sergi/go-diff/LICENSE.txt delete mode 100644 vendor/github.com/sergi/go-diff/diffmatchpatch/dmp.go delete mode 100644 vendor/github.com/sergi/go-diff/diffmatchpatch/speedtest1.txt delete mode 100644 vendor/github.com/sergi/go-diff/diffmatchpatch/speedtest2.txt delete mode 100644 vendor/github.com/sergi/go-diff/diffmatchpatch/stack.go delete mode 100644 vendor/github.com/shurcooL/sanitized_anchor_name/LICENSE delete mode 100644 vendor/github.com/shurcooL/sanitized_anchor_name/README.md delete mode 100644 vendor/github.com/shurcooL/sanitized_anchor_name/main.go delete mode 100644 vendor/github.com/smartystreets/assertions/CONTRIBUTING.md delete mode 100644 vendor/github.com/smartystreets/assertions/LICENSE.md delete mode 100755 vendor/github.com/smartystreets/assertions/Makefile delete mode 100644 vendor/github.com/smartystreets/assertions/README.md delete mode 100644 vendor/github.com/smartystreets/assertions/collections.go delete mode 100644 vendor/github.com/smartystreets/assertions/doc.go delete mode 100644 vendor/github.com/smartystreets/assertions/equal_method.go delete mode 100644 vendor/github.com/smartystreets/assertions/equality.go delete mode 100644 vendor/github.com/smartystreets/assertions/equality_diff.go delete mode 100644 vendor/github.com/smartystreets/assertions/filter.go delete mode 100644 vendor/github.com/smartystreets/assertions/go.mod delete mode 100644 vendor/github.com/smartystreets/assertions/internal/go-diff/LICENSE delete mode 100644 vendor/github.com/smartystreets/assertions/internal/go-diff/diffmatchpatch/diff.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/go-diff/diffmatchpatch/diffmatchpatch.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/go-diff/diffmatchpatch/match.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/go-diff/diffmatchpatch/mathutil.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/go-diff/diffmatchpatch/operation_string.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/go-diff/diffmatchpatch/patch.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/go-diff/diffmatchpatch/stringutil.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/go-render/LICENSE delete mode 100644 vendor/github.com/smartystreets/assertions/internal/go-render/render/render.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/go-render/render/render_time.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/oglematchers/LICENSE delete mode 100644 vendor/github.com/smartystreets/assertions/internal/oglematchers/README.md delete mode 100644 vendor/github.com/smartystreets/assertions/internal/oglematchers/any_of.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/oglematchers/contains.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/oglematchers/deep_equals.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/oglematchers/equals.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/oglematchers/greater_or_equal.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/oglematchers/greater_than.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/oglematchers/less_or_equal.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/oglematchers/less_than.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/oglematchers/matcher.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/oglematchers/not.go delete mode 100644 vendor/github.com/smartystreets/assertions/internal/oglematchers/transform_description.go delete mode 100644 vendor/github.com/smartystreets/assertions/messages.go delete mode 100644 vendor/github.com/smartystreets/assertions/panic.go delete mode 100644 vendor/github.com/smartystreets/assertions/quantity.go delete mode 100644 vendor/github.com/smartystreets/assertions/serializer.go delete mode 100644 vendor/github.com/smartystreets/assertions/strings.go delete mode 100644 vendor/github.com/smartystreets/assertions/time.go delete mode 100644 vendor/github.com/smartystreets/assertions/type.go delete mode 100644 vendor/github.com/smartystreets/goconvey/CONTRIBUTING.md delete mode 100644 vendor/github.com/smartystreets/goconvey/LICENSE.md delete mode 100644 vendor/github.com/smartystreets/goconvey/README.md delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/assertions.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/context.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/convey.goconvey delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/discovery.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/doc.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/gotest/utils.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/init.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/nilReporter.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/reporting/console.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/reporting/doc.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/reporting/dot.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/reporting/gotest.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/reporting/init.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/reporting/json.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/reporting/printer.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/reporting/problems.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/reporting/reporter.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/reporting/reporting.goconvey delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/reporting/reports.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/reporting/statistics.go delete mode 100644 vendor/github.com/smartystreets/goconvey/convey/reporting/story.go delete mode 100644 vendor/github.com/smartystreets/goconvey/dependencies.go delete mode 100644 vendor/github.com/smartystreets/goconvey/go.mod delete mode 100644 vendor/github.com/smartystreets/goconvey/go.sum delete mode 100644 vendor/github.com/smartystreets/goconvey/goconvey.go delete mode 100644 vendor/github.com/smartystreets/goconvey/goconvey_1_8.go delete mode 100644 vendor/github.com/smartystreets/goconvey/goconvey_1_9.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/api/api.goconvey delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/api/server.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/contract/contracts.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/contract/result.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/executor/contract.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/executor/coordinator.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/executor/executor.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/executor/executor.goconvey delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/executor/tester.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/messaging/messages.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/parser/packageParser.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/parser/parser.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/parser/parser.goconvey delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/parser/rules.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/parser/testParser.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/parser/util.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/system/shell.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/system/system.goconvey delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/watch/functional_core.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/watch/imperative_shell.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/watch/integration.go delete mode 100644 vendor/github.com/smartystreets/goconvey/web/server/watch/watch.goconvey delete mode 100644 vendor/github.com/urfave/cli/CHANGELOG.md delete mode 100644 vendor/github.com/urfave/cli/LICENSE delete mode 100644 vendor/github.com/urfave/cli/README.md delete mode 100644 vendor/github.com/urfave/cli/app.go delete mode 100644 vendor/github.com/urfave/cli/appveyor.yml delete mode 100644 vendor/github.com/urfave/cli/category.go delete mode 100644 vendor/github.com/urfave/cli/cli.go delete mode 100644 vendor/github.com/urfave/cli/command.go delete mode 100644 vendor/github.com/urfave/cli/context.go delete mode 100644 vendor/github.com/urfave/cli/errors.go delete mode 100644 vendor/github.com/urfave/cli/flag-types.json delete mode 100644 vendor/github.com/urfave/cli/flag.go delete mode 100644 vendor/github.com/urfave/cli/flag_generated.go delete mode 100644 vendor/github.com/urfave/cli/funcs.go delete mode 100755 vendor/github.com/urfave/cli/generate-flag-types delete mode 100644 vendor/github.com/urfave/cli/help.go delete mode 100755 vendor/github.com/urfave/cli/runtests delete mode 100644 vendor/golang.org/x/crypto/LICENSE delete mode 100644 vendor/golang.org/x/crypto/PATENTS delete mode 100644 vendor/golang.org/x/crypto/curve25519/const_amd64.s delete mode 100644 vendor/golang.org/x/crypto/curve25519/cswap_amd64.s delete mode 100644 vendor/golang.org/x/crypto/curve25519/curve25519.go delete mode 100644 vendor/golang.org/x/crypto/curve25519/doc.go delete mode 100644 vendor/golang.org/x/crypto/curve25519/freeze_amd64.s delete mode 100644 vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s delete mode 100644 vendor/golang.org/x/crypto/curve25519/mont25519_amd64.go delete mode 100644 vendor/golang.org/x/crypto/curve25519/mul_amd64.s delete mode 100644 vendor/golang.org/x/crypto/curve25519/square_amd64.s delete mode 100644 vendor/golang.org/x/crypto/ed25519/ed25519.go delete mode 100644 vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go delete mode 100644 vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go delete mode 100644 vendor/golang.org/x/crypto/md4/md4.go delete mode 100644 vendor/golang.org/x/crypto/md4/md4block.go delete mode 100644 vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go delete mode 100644 vendor/golang.org/x/crypto/ssh/buffer.go delete mode 100644 vendor/golang.org/x/crypto/ssh/certs.go delete mode 100644 vendor/golang.org/x/crypto/ssh/channel.go delete mode 100644 vendor/golang.org/x/crypto/ssh/cipher.go delete mode 100644 vendor/golang.org/x/crypto/ssh/client.go delete mode 100644 vendor/golang.org/x/crypto/ssh/client_auth.go delete mode 100644 vendor/golang.org/x/crypto/ssh/common.go delete mode 100644 vendor/golang.org/x/crypto/ssh/connection.go delete mode 100644 vendor/golang.org/x/crypto/ssh/doc.go delete mode 100644 vendor/golang.org/x/crypto/ssh/handshake.go delete mode 100644 vendor/golang.org/x/crypto/ssh/kex.go delete mode 100644 vendor/golang.org/x/crypto/ssh/keys.go delete mode 100644 vendor/golang.org/x/crypto/ssh/mac.go delete mode 100644 vendor/golang.org/x/crypto/ssh/messages.go delete mode 100644 vendor/golang.org/x/crypto/ssh/mux.go delete mode 100644 vendor/golang.org/x/crypto/ssh/server.go delete mode 100644 vendor/golang.org/x/crypto/ssh/session.go delete mode 100644 vendor/golang.org/x/crypto/ssh/tcpip.go delete mode 100644 vendor/golang.org/x/crypto/ssh/transport.go delete mode 100644 vendor/golang.org/x/net/LICENSE delete mode 100644 vendor/golang.org/x/net/PATENTS delete mode 100644 vendor/golang.org/x/net/context/context.go delete mode 100644 vendor/golang.org/x/net/context/go17.go delete mode 100644 vendor/golang.org/x/net/context/pre_go17.go delete mode 100644 vendor/golang.org/x/net/html/atom/atom.go delete mode 100644 vendor/golang.org/x/net/html/atom/gen.go delete mode 100644 vendor/golang.org/x/net/html/atom/table.go delete mode 100644 vendor/golang.org/x/net/html/charset/charset.go delete mode 100644 vendor/golang.org/x/net/html/const.go delete mode 100644 vendor/golang.org/x/net/html/doc.go delete mode 100644 vendor/golang.org/x/net/html/doctype.go delete mode 100644 vendor/golang.org/x/net/html/entity.go delete mode 100644 vendor/golang.org/x/net/html/escape.go delete mode 100644 vendor/golang.org/x/net/html/foreign.go delete mode 100644 vendor/golang.org/x/net/html/node.go delete mode 100644 vendor/golang.org/x/net/html/parse.go delete mode 100644 vendor/golang.org/x/net/html/render.go delete mode 100644 vendor/golang.org/x/net/html/token.go delete mode 100644 vendor/golang.org/x/sys/LICENSE delete mode 100644 vendor/golang.org/x/sys/PATENTS delete mode 100644 vendor/golang.org/x/sys/unix/asm.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_386.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_arm.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_arm64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_386.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_arm.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_386.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_arm.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_arm64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_mips64x.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_linux_s390x.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_386.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_arm.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_386.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/asm_solaris_amd64.s delete mode 100644 vendor/golang.org/x/sys/unix/bluetooth_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/constants.go delete mode 100644 vendor/golang.org/x/sys/unix/env_unix.go delete mode 100644 vendor/golang.org/x/sys/unix/env_unset.go delete mode 100644 vendor/golang.org/x/sys/unix/flock.go delete mode 100644 vendor/golang.org/x/sys/unix/flock_linux_32bit.go delete mode 100644 vendor/golang.org/x/sys/unix/gccgo.go delete mode 100644 vendor/golang.org/x/sys/unix/gccgo_c.c delete mode 100644 vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/gccgo_linux_sparc64.go delete mode 100755 vendor/golang.org/x/sys/unix/mkall.sh delete mode 100755 vendor/golang.org/x/sys/unix/mkerrors.sh delete mode 100644 vendor/golang.org/x/sys/unix/mkpost.go delete mode 100755 vendor/golang.org/x/sys/unix/mksyscall.pl delete mode 100755 vendor/golang.org/x/sys/unix/mksyscall_solaris.pl delete mode 100755 vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_darwin.pl delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_dragonfly.pl delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_linux.pl delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl delete mode 100755 vendor/golang.org/x/sys/unix/mksysnum_openbsd.pl delete mode 100644 vendor/golang.org/x/sys/unix/race.go delete mode 100644 vendor/golang.org/x/sys/unix/race0.go delete mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_unix.go delete mode 100644 vendor/golang.org/x/sys/unix/str.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_bsd.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_dragonfly.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_no_getwd.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_unix.go delete mode 100644 vendor/golang.org/x/sys/unix/types_darwin.go delete mode 100644 vendor/golang.org/x/sys/unix/types_dragonfly.go delete mode 100644 vendor/golang.org/x/sys/unix/types_freebsd.go delete mode 100644 vendor/golang.org/x/sys/unix/types_linux.go delete mode 100644 vendor/golang.org/x/sys/unix/types_netbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/types_openbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/types_solaris.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_386.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_386.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go delete mode 100644 vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go delete mode 100644 vendor/golang.org/x/sys/windows/asm_windows_386.s delete mode 100644 vendor/golang.org/x/sys/windows/asm_windows_amd64.s delete mode 100644 vendor/golang.org/x/sys/windows/dll_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/env_unset.go delete mode 100644 vendor/golang.org/x/sys/windows/env_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/eventlog.go delete mode 100644 vendor/golang.org/x/sys/windows/exec_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/mksyscall.go delete mode 100644 vendor/golang.org/x/sys/windows/race.go delete mode 100644 vendor/golang.org/x/sys/windows/race0.go delete mode 100644 vendor/golang.org/x/sys/windows/security_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/service.go delete mode 100644 vendor/golang.org/x/sys/windows/str.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/event.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/go12.c delete mode 100644 vendor/golang.org/x/sys/windows/svc/go12.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/go13.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/security.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/service.go delete mode 100644 vendor/golang.org/x/sys/windows/svc/sys_386.s delete mode 100644 vendor/golang.org/x/sys/windows/svc/sys_amd64.s delete mode 100644 vendor/golang.org/x/sys/windows/syscall.go delete mode 100644 vendor/golang.org/x/sys/windows/syscall_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/zsyscall_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/ztypes_windows.go delete mode 100644 vendor/golang.org/x/sys/windows/ztypes_windows_386.go delete mode 100644 vendor/golang.org/x/sys/windows/ztypes_windows_amd64.go delete mode 100644 vendor/golang.org/x/text/LICENSE delete mode 100644 vendor/golang.org/x/text/PATENTS delete mode 100644 vendor/golang.org/x/text/encoding/charmap/charmap.go delete mode 100644 vendor/golang.org/x/text/encoding/charmap/maketables.go delete mode 100644 vendor/golang.org/x/text/encoding/charmap/tables.go delete mode 100644 vendor/golang.org/x/text/encoding/encoding.go delete mode 100644 vendor/golang.org/x/text/encoding/htmlindex/gen.go delete mode 100644 vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go delete mode 100644 vendor/golang.org/x/text/encoding/htmlindex/map.go delete mode 100644 vendor/golang.org/x/text/encoding/htmlindex/tables.go delete mode 100644 vendor/golang.org/x/text/encoding/internal/identifier/gen.go delete mode 100644 vendor/golang.org/x/text/encoding/internal/identifier/identifier.go delete mode 100644 vendor/golang.org/x/text/encoding/internal/identifier/mib.go delete mode 100644 vendor/golang.org/x/text/encoding/internal/internal.go delete mode 100644 vendor/golang.org/x/text/encoding/japanese/all.go delete mode 100644 vendor/golang.org/x/text/encoding/japanese/eucjp.go delete mode 100644 vendor/golang.org/x/text/encoding/japanese/iso2022jp.go delete mode 100644 vendor/golang.org/x/text/encoding/japanese/maketables.go delete mode 100644 vendor/golang.org/x/text/encoding/japanese/shiftjis.go delete mode 100644 vendor/golang.org/x/text/encoding/japanese/tables.go delete mode 100644 vendor/golang.org/x/text/encoding/korean/euckr.go delete mode 100644 vendor/golang.org/x/text/encoding/korean/maketables.go delete mode 100644 vendor/golang.org/x/text/encoding/korean/tables.go delete mode 100644 vendor/golang.org/x/text/encoding/simplifiedchinese/all.go delete mode 100644 vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go delete mode 100644 vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go delete mode 100644 vendor/golang.org/x/text/encoding/simplifiedchinese/maketables.go delete mode 100644 vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go delete mode 100644 vendor/golang.org/x/text/encoding/traditionalchinese/big5.go delete mode 100644 vendor/golang.org/x/text/encoding/traditionalchinese/maketables.go delete mode 100644 vendor/golang.org/x/text/encoding/traditionalchinese/tables.go delete mode 100644 vendor/golang.org/x/text/encoding/unicode/override.go delete mode 100644 vendor/golang.org/x/text/encoding/unicode/unicode.go delete mode 100644 vendor/golang.org/x/text/internal/tag/tag.go delete mode 100644 vendor/golang.org/x/text/internal/utf8internal/utf8internal.go delete mode 100644 vendor/golang.org/x/text/language/Makefile delete mode 100644 vendor/golang.org/x/text/language/common.go delete mode 100644 vendor/golang.org/x/text/language/coverage.go delete mode 100644 vendor/golang.org/x/text/language/gen_common.go delete mode 100644 vendor/golang.org/x/text/language/gen_index.go delete mode 100644 vendor/golang.org/x/text/language/go1_1.go delete mode 100644 vendor/golang.org/x/text/language/go1_2.go delete mode 100644 vendor/golang.org/x/text/language/index.go delete mode 100644 vendor/golang.org/x/text/language/language.go delete mode 100644 vendor/golang.org/x/text/language/lookup.go delete mode 100644 vendor/golang.org/x/text/language/maketables.go delete mode 100644 vendor/golang.org/x/text/language/match.go delete mode 100644 vendor/golang.org/x/text/language/parse.go delete mode 100644 vendor/golang.org/x/text/language/tables.go delete mode 100644 vendor/golang.org/x/text/language/tags.go delete mode 100644 vendor/golang.org/x/text/runes/cond.go delete mode 100644 vendor/golang.org/x/text/runes/runes.go delete mode 100644 vendor/golang.org/x/text/transform/transform.go delete mode 100644 vendor/gopkg.in/alexcesaro/quotedprintable.v3/LICENSE delete mode 100644 vendor/gopkg.in/alexcesaro/quotedprintable.v3/README.md delete mode 100644 vendor/gopkg.in/alexcesaro/quotedprintable.v3/encodedword.go delete mode 100644 vendor/gopkg.in/alexcesaro/quotedprintable.v3/pool.go delete mode 100644 vendor/gopkg.in/alexcesaro/quotedprintable.v3/pool_go12.go delete mode 100644 vendor/gopkg.in/alexcesaro/quotedprintable.v3/reader.go delete mode 100644 vendor/gopkg.in/alexcesaro/quotedprintable.v3/writer.go delete mode 100644 vendor/gopkg.in/asn1-ber.v1/LICENSE delete mode 100644 vendor/gopkg.in/asn1-ber.v1/README.md delete mode 100644 vendor/gopkg.in/asn1-ber.v1/ber.go delete mode 100644 vendor/gopkg.in/asn1-ber.v1/content_int.go delete mode 100644 vendor/gopkg.in/asn1-ber.v1/header.go delete mode 100644 vendor/gopkg.in/asn1-ber.v1/identifier.go delete mode 100644 vendor/gopkg.in/asn1-ber.v1/length.go delete mode 100644 vendor/gopkg.in/asn1-ber.v1/util.go delete mode 100644 vendor/gopkg.in/bufio.v1/LICENSE delete mode 100644 vendor/gopkg.in/bufio.v1/Makefile delete mode 100644 vendor/gopkg.in/bufio.v1/README.md delete mode 100644 vendor/gopkg.in/bufio.v1/buffer.go delete mode 100644 vendor/gopkg.in/bufio.v1/bufio.go delete mode 100644 vendor/gopkg.in/clog.v1/LICENSE delete mode 100644 vendor/gopkg.in/clog.v1/Makefile delete mode 100644 vendor/gopkg.in/clog.v1/README.md delete mode 100644 vendor/gopkg.in/clog.v1/clog.go delete mode 100644 vendor/gopkg.in/clog.v1/console.go delete mode 100644 vendor/gopkg.in/clog.v1/discord.go delete mode 100644 vendor/gopkg.in/clog.v1/error.go delete mode 100644 vendor/gopkg.in/clog.v1/file.go delete mode 100644 vendor/gopkg.in/clog.v1/logger.go delete mode 100644 vendor/gopkg.in/clog.v1/slack.go delete mode 100644 vendor/gopkg.in/editorconfig/editorconfig-core-go.v1/LICENSE delete mode 100644 vendor/gopkg.in/editorconfig/editorconfig-core-go.v1/README.md delete mode 100644 vendor/gopkg.in/editorconfig/editorconfig-core-go.v1/editorconfig.go delete mode 100644 vendor/gopkg.in/gomail.v2/CHANGELOG.md delete mode 100644 vendor/gopkg.in/gomail.v2/CONTRIBUTING.md delete mode 100644 vendor/gopkg.in/gomail.v2/LICENSE delete mode 100644 vendor/gopkg.in/gomail.v2/README.md delete mode 100644 vendor/gopkg.in/gomail.v2/auth.go delete mode 100644 vendor/gopkg.in/gomail.v2/doc.go delete mode 100644 vendor/gopkg.in/gomail.v2/message.go delete mode 100644 vendor/gopkg.in/gomail.v2/mime.go delete mode 100644 vendor/gopkg.in/gomail.v2/mime_go14.go delete mode 100644 vendor/gopkg.in/gomail.v2/send.go delete mode 100644 vendor/gopkg.in/gomail.v2/smtp.go delete mode 100644 vendor/gopkg.in/gomail.v2/writeto.go delete mode 100644 vendor/gopkg.in/ini.v1/LICENSE delete mode 100644 vendor/gopkg.in/ini.v1/Makefile delete mode 100644 vendor/gopkg.in/ini.v1/README.md delete mode 100644 vendor/gopkg.in/ini.v1/error.go delete mode 100644 vendor/gopkg.in/ini.v1/file.go delete mode 100644 vendor/gopkg.in/ini.v1/ini.go delete mode 100644 vendor/gopkg.in/ini.v1/key.go delete mode 100644 vendor/gopkg.in/ini.v1/parser.go delete mode 100644 vendor/gopkg.in/ini.v1/section.go delete mode 100644 vendor/gopkg.in/ini.v1/struct.go delete mode 100644 vendor/gopkg.in/ldap.v2/LICENSE delete mode 100644 vendor/gopkg.in/ldap.v2/Makefile delete mode 100644 vendor/gopkg.in/ldap.v2/README.md delete mode 100644 vendor/gopkg.in/ldap.v2/add.go delete mode 100644 vendor/gopkg.in/ldap.v2/bind.go delete mode 100644 vendor/gopkg.in/ldap.v2/client.go delete mode 100644 vendor/gopkg.in/ldap.v2/compare.go delete mode 100644 vendor/gopkg.in/ldap.v2/conn.go delete mode 100644 vendor/gopkg.in/ldap.v2/control.go delete mode 100644 vendor/gopkg.in/ldap.v2/debug.go delete mode 100644 vendor/gopkg.in/ldap.v2/del.go delete mode 100644 vendor/gopkg.in/ldap.v2/dn.go delete mode 100644 vendor/gopkg.in/ldap.v2/doc.go delete mode 100644 vendor/gopkg.in/ldap.v2/error.go delete mode 100644 vendor/gopkg.in/ldap.v2/filter.go delete mode 100644 vendor/gopkg.in/ldap.v2/ldap.go delete mode 100644 vendor/gopkg.in/ldap.v2/modify.go delete mode 100644 vendor/gopkg.in/ldap.v2/passwdmodify.go delete mode 100644 vendor/gopkg.in/ldap.v2/search.go delete mode 100644 vendor/gopkg.in/macaron.v1/LICENSE delete mode 100644 vendor/gopkg.in/macaron.v1/README.md delete mode 100644 vendor/gopkg.in/macaron.v1/context.go delete mode 100644 vendor/gopkg.in/macaron.v1/logger.go delete mode 100644 vendor/gopkg.in/macaron.v1/macaron.go delete mode 100644 vendor/gopkg.in/macaron.v1/macaronlogo.png delete mode 100644 vendor/gopkg.in/macaron.v1/recovery.go delete mode 100644 vendor/gopkg.in/macaron.v1/render.go delete mode 100644 vendor/gopkg.in/macaron.v1/response_writer.go delete mode 100644 vendor/gopkg.in/macaron.v1/return_handler.go delete mode 100644 vendor/gopkg.in/macaron.v1/router.go delete mode 100644 vendor/gopkg.in/macaron.v1/static.go delete mode 100644 vendor/gopkg.in/macaron.v1/tree.go delete mode 100644 vendor/gopkg.in/macaron.v1/util_go17.go delete mode 100644 vendor/gopkg.in/macaron.v1/util_go18.go delete mode 100644 vendor/gopkg.in/redis.v2/LICENSE delete mode 100644 vendor/gopkg.in/redis.v2/Makefile delete mode 100644 vendor/gopkg.in/redis.v2/README.md delete mode 100644 vendor/gopkg.in/redis.v2/command.go delete mode 100644 vendor/gopkg.in/redis.v2/commands.go delete mode 100644 vendor/gopkg.in/redis.v2/doc.go delete mode 100644 vendor/gopkg.in/redis.v2/error.go delete mode 100644 vendor/gopkg.in/redis.v2/multi.go delete mode 100644 vendor/gopkg.in/redis.v2/parser.go delete mode 100644 vendor/gopkg.in/redis.v2/pipeline.go delete mode 100644 vendor/gopkg.in/redis.v2/pool.go delete mode 100644 vendor/gopkg.in/redis.v2/pubsub.go delete mode 100644 vendor/gopkg.in/redis.v2/rate_limit.go delete mode 100644 vendor/gopkg.in/redis.v2/redis.go delete mode 100644 vendor/gopkg.in/redis.v2/script.go delete mode 100644 vendor/gopkg.in/redis.v2/sentinel.go delete mode 100644 vendor/vendor.json diff --git a/.travis.yml b/.travis.yml index 4b2c7d71f..3d2638d96 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,12 @@ language: go go: - - 1.8.x - - 1.9.x - - 1.10.x - 1.11.x - 1.12.x - 1.13.x +go_import_path: gogs.io/gogs + +env: + - GO111MODULE=on before_install: - sudo apt-get update -qq diff --git a/appveyor.yml b/appveyor.yml index 4481a0591..0ae07cc75 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,20 +1,15 @@ version: "{build}" skip_tags: true -clone_folder: c:\gopath\src\github.com\gogs\gogs +clone_folder: c:\gogs.io\gogs clone_depth: 1 environment: - GOPATH: c:\gopath + GO111MODULE: on GOVERSION: 1.13 build: false deploy: false install: + - go env - go build -v - -notifications: - - provider: Email - to: - - u@gogs.io - on_build_success: false diff --git a/cmd/admin.go b/cmd/admin.go index d249fd07d..df4dae2e3 100644 --- a/cmd/admin.go +++ b/cmd/admin.go @@ -11,8 +11,8 @@ import ( "github.com/urfave/cli" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/setting" ) var ( diff --git a/cmd/backup.go b/cmd/backup.go index 0adde9798..b293d02d0 100644 --- a/cmd/backup.go +++ b/cmd/backup.go @@ -11,14 +11,14 @@ import ( "path" "time" - "github.com/Unknwon/cae/zip" - "github.com/Unknwon/com" + "github.com/unknwon/cae/zip" + "github.com/unknwon/com" "github.com/urfave/cli" log "gopkg.in/clog.v1" "gopkg.in/ini.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/setting" ) var Backup = cli.Command{ diff --git a/cmd/hook.go b/cmd/hook.go index d26334f29..b06570043 100644 --- a/cmd/hook.go +++ b/cmd/hook.go @@ -15,18 +15,18 @@ import ( "path/filepath" "strings" - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/urfave/cli" log "gopkg.in/clog.v1" "github.com/gogs/git-module" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/httplib" - "github.com/gogs/gogs/pkg/mailer" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/template" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/httplib" + "gogs.io/gogs/pkg/mailer" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/template" ) var ( diff --git a/cmd/import.go b/cmd/import.go index 98aa76905..804963f0d 100644 --- a/cmd/import.go +++ b/cmd/import.go @@ -12,10 +12,10 @@ import ( "path/filepath" "time" - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/urfave/cli" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) var ( diff --git a/cmd/restore.go b/cmd/restore.go index 70ce948e8..7ebb84076 100644 --- a/cmd/restore.go +++ b/cmd/restore.go @@ -8,15 +8,15 @@ import ( "os" "path" - "github.com/Unknwon/cae/zip" - "github.com/Unknwon/com" + "github.com/unknwon/cae/zip" + "github.com/unknwon/com" "github.com/mcuadros/go-version" "github.com/urfave/cli" log "gopkg.in/clog.v1" "gopkg.in/ini.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/setting" ) var Restore = cli.Command{ diff --git a/cmd/serv.go b/cmd/serv.go index c78219af8..c767634ef 100644 --- a/cmd/serv.go +++ b/cmd/serv.go @@ -12,13 +12,13 @@ import ( "strings" "time" - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/urfave/cli" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/setting" ) const ( diff --git a/cmd/web.go b/cmd/web.go index 236282897..66a24aee3 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -15,7 +15,7 @@ import ( "path" "strings" - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/go-macaron/binding" "github.com/go-macaron/cache" "github.com/go-macaron/captcha" @@ -30,20 +30,20 @@ import ( log "gopkg.in/clog.v1" "gopkg.in/macaron.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/bindata" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/mailer" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/template" - "github.com/gogs/gogs/routes" - "github.com/gogs/gogs/routes/admin" - apiv1 "github.com/gogs/gogs/routes/api/v1" - "github.com/gogs/gogs/routes/dev" - "github.com/gogs/gogs/routes/org" - "github.com/gogs/gogs/routes/repo" - "github.com/gogs/gogs/routes/user" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/bindata" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/mailer" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/template" + "gogs.io/gogs/routes" + "gogs.io/gogs/routes/admin" + apiv1 "gogs.io/gogs/routes/api/v1" + "gogs.io/gogs/routes/dev" + "gogs.io/gogs/routes/org" + "gogs.io/gogs/routes/repo" + "gogs.io/gogs/routes/user" ) var Web = cli.Command{ diff --git a/conf/locale/locale_en-US.ini b/conf/locale/locale_en-US.ini index e82d9f3d6..51d60efeb 100644 --- a/conf/locale/locale_en-US.ini +++ b/conf/locale/locale_en-US.ini @@ -177,7 +177,7 @@ login_two_factor_enter_recovery_code = Enter a two-factor recovery code login_two_factor_recovery = Two-factor Recovery login_two_factor_recovery_code = Recovery Code login_two_factor_enter_passcode = Enter a two-factor passcode -login_two_factor_invalid_recovery_code = Recovery code has been used or does not valid. +login_two_factor_invalid_recovery_code = Recovery code already used or invalid. [mail] activate_account = Please activate your account @@ -238,7 +238,7 @@ enterred_invalid_password = Please make sure the that password you entered is co user_not_exist = Given user does not exist. last_org_owner = Removing the last user from a owner team isn't allowed, as there must always be at least one owner in any given organization. -invalid_ssh_key = Sorry, we're not able to verify your SSH key: %s +invalid_ssh_key = Sorry, verification of your SSH key failed: %s unable_verify_ssh_key = Gogs cannot verify your SSH key, but we assume that it is valid, please double-check it. auth_failed = Authentication failed: %v diff --git a/go.mod b/go.mod new file mode 100644 index 000000000..499de0b60 --- /dev/null +++ b/go.mod @@ -0,0 +1,69 @@ +module gogs.io/gogs + +go 1.13 + +require ( + github.com/bgentry/speakeasy v0.1.0 // indirect + github.com/denisenkom/go-mssqldb v0.0.0-20191001013358-cfbb681360f0 + github.com/fatih/color v1.7.0 // indirect + github.com/go-macaron/binding v1.0.0 + github.com/go-macaron/cache v0.0.0-20190810181446-10f7c57e2196 + github.com/go-macaron/captcha v0.0.0-20190813234938-24f40749f36d + github.com/go-macaron/csrf v0.0.0-20190812063352-946f6d303a4c + github.com/go-macaron/gzip v0.0.0-20160222043647-cad1c6580a07 + github.com/go-macaron/i18n v0.0.0-20190805070610-6d779f6a12cf + github.com/go-macaron/session v0.0.0-20190805070824-1a3cdc6f5659 + github.com/go-macaron/toolbox v0.0.0-20190813233741-94defb8383c6 + github.com/go-sql-driver/mysql v1.4.1 + github.com/go-xorm/builder v0.3.4 + github.com/gogs/chardet v0.0.0-20150115103509-2404f7772561 + github.com/gogs/cron v0.0.0-20171120032916-9f6c956d3e14 + github.com/gogs/git-module v0.8.1 + github.com/gogs/go-gogs-client v0.0.0-20190710002546-4c3c18947c15 + github.com/gogs/go-libravatar v0.0.0-20161120025154-cd1abbd55d09 + github.com/gogs/minwinsvc v0.0.0-20170301035411-95be6356811a + github.com/google/go-github v17.0.0+incompatible + github.com/google/go-querystring v1.0.0 // indirect + github.com/issue9/identicon v1.0.1 + github.com/jaytaylor/html2text v0.0.0-20190408195923-01ec452cbe43 + github.com/json-iterator/go v1.1.7 + github.com/klauspost/compress v1.8.6 // indirect + github.com/klauspost/cpuid v1.2.1 // indirect + github.com/lib/pq v1.2.0 + github.com/mattn/go-colorable v0.1.4 // indirect + github.com/mattn/go-isatty v0.0.10 // indirect + github.com/mattn/go-runewidth v0.0.4 // indirect + github.com/mattn/go-sqlite3 v1.11.0 + github.com/mcuadros/go-version v0.0.0-20190830083331-035f6764e8d2 + github.com/microcosm-cc/bluemonday v1.0.2 + github.com/msteinert/pam v0.0.0-20190215180659-f29b9f28d6f9 + github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 + github.com/niklasfasching/go-org v0.1.6 + github.com/olekukonko/tablewriter v0.0.1 // indirect + github.com/pquerna/otp v1.2.0 + github.com/prometheus/client_golang v1.2.1 + github.com/russross/blackfriday v1.5.2 + github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca // indirect + github.com/satori/go.uuid v1.2.0 + github.com/sergi/go-diff v1.0.0 + github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 + github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect + github.com/unknwon/cae v1.0.0 + github.com/unknwon/com v1.0.1 + github.com/unknwon/i18n v0.0.0-20190805065654-5c6446a380b6 + github.com/unknwon/paginater v0.0.0-20170405233947-45e5d631308e + github.com/urfave/cli v1.22.1 + golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 + golang.org/x/net v0.0.0-20191014212845-da9a3fd4c582 + golang.org/x/text v0.3.2 + gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect + gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect + gopkg.in/clog.v1 v1.2.0 + gopkg.in/editorconfig/editorconfig-core-go.v1 v1.3.1 + gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df + gopkg.in/ini.v1 v1.49.0 + gopkg.in/ldap.v2 v2.5.1 + gopkg.in/macaron.v1 v1.3.4 + xorm.io/core v0.7.2 + xorm.io/xorm v0.8.0 +) diff --git a/go.sum b/go.sum new file mode 100644 index 000000000..51d4f0fba --- /dev/null +++ b/go.sum @@ -0,0 +1,375 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI= +github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/bradfitz/gomemcache v0.0.0-20190329173943-551aad21a668 h1:U/lr3Dgy4WK+hNk4tyD+nuGjpVLPEHuJSFXMw11/HPA= +github.com/bradfitz/gomemcache v0.0.0-20190329173943-551aad21a668/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= +github.com/cespare/xxhash/v2 v2.1.0 h1:yTUvW7Vhb89inJ+8irsUqiWjh8iT6sQPZiQzI6ReGkA= +github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/couchbase/gomemcached v0.0.0-20190515232915-c4b4ca0eb21d/go.mod h1:srVSlQLB8iXBVXHgnqemxUXqN6FCvClgCMPCsjBDR7c= +github.com/couchbase/goutils v0.0.0-20190315194238-f9d42b11473b/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs= +github.com/couchbaselabs/go-couchbase v0.0.0-20190708161019-23e7ca2ce2b7/go.mod h1:mby/05p8HE5yHEAKiIH/555NoblMs7PtW6NrYshDruc= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY= +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/denisenkom/go-mssqldb v0.0.0-20190707035753-2be1aa521ff4/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM= +github.com/denisenkom/go-mssqldb v0.0.0-20191001013358-cfbb681360f0 h1:epsH3lb7KVbXHYk7LYGN5EiE0MxcevHU85CKITJ0wUY= +github.com/denisenkom/go-mssqldb v0.0.0-20191001013358-cfbb681360f0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-macaron/binding v1.0.0 h1:ILEIP1e9GaXz//fZIl1zXgHVbM9j1SN89aTGOq8340Y= +github.com/go-macaron/binding v1.0.0/go.mod h1:AG8Z6qkQM8s47aUDJOco/SNwJ8Czif2hMm7rc0abDog= +github.com/go-macaron/cache v0.0.0-20190810181446-10f7c57e2196 h1:fqWZxyMLF6RVGmjvsZ9FijiU9UlAjuE6nu9RfNBZ+iE= +github.com/go-macaron/cache v0.0.0-20190810181446-10f7c57e2196/go.mod h1:O6fSdaYZbGh4clVMGMGO5k2KbMO0Cz8YdBnPrD0I8dM= +github.com/go-macaron/captcha v0.0.0-20190813234938-24f40749f36d h1:aSJXLVjEjbLeHo8aCTDcD3/gMWizaRjMBb3VCsEWEHs= +github.com/go-macaron/captcha v0.0.0-20190813234938-24f40749f36d/go.mod h1:lmhlZnu9cTRGNQEkSh1qZi2IK3HJH4Z1MXkg6ARQKZA= +github.com/go-macaron/csrf v0.0.0-20190812063352-946f6d303a4c h1:kFFz1OpaH3+efG7RA33z+D0piwpA/a3x/Zn2d8z9rfw= +github.com/go-macaron/csrf v0.0.0-20190812063352-946f6d303a4c/go.mod h1:FX53Xq0NNlUj0E5in5J8Dq5nrbdK3ZyDIy6y5VWOiUo= +github.com/go-macaron/gzip v0.0.0-20160222043647-cad1c6580a07 h1:YSIA98PevNf1NtCa/J6cz7gjzpz99WVAOa9Eg0klKps= +github.com/go-macaron/gzip v0.0.0-20160222043647-cad1c6580a07/go.mod h1://cJFfDp/70L0oTNAMB+M8Jd0rpuIx/55iARuJ6StwE= +github.com/go-macaron/i18n v0.0.0-20190805070610-6d779f6a12cf h1:E7ityYcWAmsJ/jdMu2YAhL4QNqZ8VF8jXmWkxLhT3yU= +github.com/go-macaron/i18n v0.0.0-20190805070610-6d779f6a12cf/go.mod h1:upCFUd+F+dOZqUygJeilNcg85TINeNcdRzKNL5+TYqE= +github.com/go-macaron/inject v0.0.0-20160627170012-d8a0b8677191 h1:NjHlg70DuOkcAMqgt0+XA+NHwtu66MkTVVgR4fFWbcI= +github.com/go-macaron/inject v0.0.0-20160627170012-d8a0b8677191/go.mod h1:VFI2o2q9kYsC4o7VP1HrEVosiZZTd+MVT3YZx4gqvJw= +github.com/go-macaron/session v0.0.0-20190805070824-1a3cdc6f5659 h1:YXDFNK98PgKeBd+xM2Babdd6gyABG8H+SSAh5+hr0os= +github.com/go-macaron/session v0.0.0-20190805070824-1a3cdc6f5659/go.mod h1:tLd0QEudXocQckwcpCq5pCuTCuYc24I0bRJDuRe9OuQ= +github.com/go-macaron/toolbox v0.0.0-20190813233741-94defb8383c6 h1:x/v1iUWlqXTKVg17ulB0qCgcM2s+eysAbr/dseKLLss= +github.com/go-macaron/toolbox v0.0.0-20190813233741-94defb8383c6/go.mod h1:YFNJ/JT4yLnpuIXTFef30SZkxGHUczjGZGFaZpPcdn0= +github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-xorm/builder v0.3.4 h1:FxkeGB4Cggdw3tPwutLCpfjng2jugfkg6LDMrd/KsoY= +github.com/go-xorm/builder v0.3.4/go.mod h1:KxkQkNN1DpPKTedxXyTQcmH+rXfvk4LZ9SOOBoZBAxw= +github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:9wScpmSP5A3Bk8V3XHWUcJmYTh+ZnlHVyc+A4oZYS3Y= +github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:56xuuqnHyryaerycW3BfssRdxQstACi0Epw/yC5E2xM= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogs/chardet v0.0.0-20150115103509-2404f7772561 h1:aBzukfDxQlCTVS0NBUjI5YA3iVeaZ9Tb5PxNrrIP1xs= +github.com/gogs/chardet v0.0.0-20150115103509-2404f7772561/go.mod h1:Pcatq5tYkCW2Q6yrR2VRHlbHpZ/R4/7qyL1TCF7vl14= +github.com/gogs/cron v0.0.0-20171120032916-9f6c956d3e14 h1:yXtpJr/LV6PFu4nTLgfjQdcMdzjbqqXMEnHfq0Or6p8= +github.com/gogs/cron v0.0.0-20171120032916-9f6c956d3e14/go.mod h1:jPoNZLWDAqA5N3G5amEoiNbhVrmM+ZQEcnQvNQ2KaZk= +github.com/gogs/git-module v0.8.1 h1:QRO6LR69K1/fYs6twooSbpX1Fk1yE+bVECkn1pcLwTo= +github.com/gogs/git-module v0.8.1/go.mod h1:aj4tcm7DxaszJWpZLZIRL6gfPXyguAHiE1PDfAAPrCw= +github.com/gogs/go-gogs-client v0.0.0-20190710002546-4c3c18947c15 h1:tgEyCCe4+o8A2K/PEi9lF0QMA6XK+Y/j/WN01LnNbbo= +github.com/gogs/go-gogs-client v0.0.0-20190710002546-4c3c18947c15/go.mod h1:fR6z1Ie6rtF7kl/vBYMfgD5/G5B1blui7z426/sj2DU= +github.com/gogs/go-libravatar v0.0.0-20161120025154-cd1abbd55d09 h1:UdOSIHZpkYcajRbfebBYzFDsL3SuqObH3bvKYBqgKmI= +github.com/gogs/go-libravatar v0.0.0-20161120025154-cd1abbd55d09/go.mod h1:Zas3BtO88pk1cwUfEYlvnl/CRwh0ybDxRWSwRjG8I3w= +github.com/gogs/minwinsvc v0.0.0-20170301035411-95be6356811a h1:8DZwxETOVWIinYxDK+i6L+rMb7eGATGaakD6ZucfHVk= +github.com/gogs/minwinsvc v0.0.0-20170301035411-95be6356811a/go.mod h1:TUIZ+29jodWQ8Gk6Pvtg4E09aMsc3C/VLZiVYfUhWQU= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRidnzC1Oq86fpX1q/iEv2KJdrCtttYjT4= +github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/issue9/assert v1.3.1 h1:L8pRpbnzMIPFJqrMKR/oG03uWrtVeZyYBpI2U2Jx1JE= +github.com/issue9/assert v1.3.1/go.mod h1:9Ger+iz8X7r1zMYYwEhh++2wMGWcNN2oVI+zIQXxcio= +github.com/issue9/identicon v1.0.1 h1:pCDfjMDM6xWK0Chxo8Lif+ST/nOEtmXgMITgV1YA9Og= +github.com/issue9/identicon v1.0.1/go.mod h1:UKNVkUFI68RPz/RlLhsAr1aX6bBSaYEWRHVfdjrMUmk= +github.com/jaytaylor/html2text v0.0.0-20190408195923-01ec452cbe43 h1:jTkyeF7NZ5oIr0ESmcrpiDgAfoidCBF4F5kJhjtaRwE= +github.com/jaytaylor/html2text v0.0.0-20190408195923-01ec452cbe43/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.8.6 h1:970MQcQdxX7hfgc/aqmB4a3grW0ivUVV6i1TLkP8CiE= +github.com/klauspost/compress v1.8.6/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v1.2.1 h1:vJi+O/nMdFt0vqm8NZBI6wzALWdA2X+egi0ogNyrC/w= +github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +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 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lunny/log v0.0.0-20160921050905-7887c61bf0de/go.mod h1:3q8WtuPQsoRbatJuy3nvq/hRSvuBJrHHr+ybPPiNvHQ= +github.com/lunny/nodb v0.0.0-20160621015157-fc1ef06ad4af/go.mod h1:Cqz6pqow14VObJ7peltM+2n3PWOz7yTrfUuGbVFkzN0= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q= +github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mcuadros/go-version v0.0.0-20190308113854-92cdf37c5b75/go.mod h1:76rfSfYPWj01Z85hUf/ituArm797mNKcvINh1OlsZKo= +github.com/mcuadros/go-version v0.0.0-20190830083331-035f6764e8d2 h1:YocNLcTBdEdvY3iDK6jfWXvEaM5OCKkjxPKoJRdB3Gg= +github.com/mcuadros/go-version v0.0.0-20190830083331-035f6764e8d2/go.mod h1:76rfSfYPWj01Z85hUf/ituArm797mNKcvINh1OlsZKo= +github.com/microcosm-cc/bluemonday v1.0.2 h1:5lPfLTTAvAbtS0VqT+94yOtFnGfUWYyx0+iToC3Os3s= +github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/msteinert/pam v0.0.0-20190215180659-f29b9f28d6f9 h1:ZivaaKmjs9q90zi6I4gTLW6tbVGtlBjellr3hMYaly0= +github.com/msteinert/pam v0.0.0-20190215180659-f29b9f28d6f9/go.mod h1:np1wUFZ6tyoke22qDJZY40URn9Ae51gX7ljIWXN5TJs= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= +github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= +github.com/niklasfasching/go-org v0.1.6 h1:F521WcqRNl8OJumlgAnekZgERaTA2HpfOYYfVEKOeI8= +github.com/niklasfasching/go-org v0.1.6/go.mod h1:AsLD6X7djzRIz4/RFZu8vwRL0VGjUvGZCCH1Nz0VdrU= +github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88= +github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pquerna/otp v1.2.0 h1:/A3+Jn+cagqayeR3iHs/L62m5ue7710D35zl1zJ1kok= +github.com/pquerna/otp v1.2.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.2.1 h1:JnMpQc6ppsNgw9QPAGF6Dod479itz7lvlsMzzNayLOI= +github.com/prometheus/client_golang v1.2.1/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8= +github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca h1:NugYot0LIVPxTvN8n+Kvkn6TrbMyxQiuvKdEwFdR9vI= +github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= +github.com/siddontang/go-snappy v0.0.0-20140704025258-d8f7bb82a96d/go.mod h1:vq0tzqLRu6TS7Id0wMo2N5QzJoKedVeovOpHjnykSzY= +github.com/siddontang/ledisdb v0.0.0-20190202134119-8ceb77e66a92/go.mod h1:mF1DpOSOUiJRMR+FDqaqu3EBqrybQtrDDszLUZ6oxPg= +github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v1.0.1 h1:voD4ITNjPL5jjBfgR/r8fPIIBrliWrWHeiJApdr3r4w= +github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= +github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= +github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 h1:WN9BUFbdyOsSH/XohnWpXOlq9NBD5sGAB2FciQMUEe8= +github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +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/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/unknwon/cae v1.0.0 h1:i39lOFaBXZxhGjQOy/RNbi8uzettCs6OQxpR0xXohGU= +github.com/unknwon/cae v1.0.0/go.mod h1:QaSeRctcea9fK6piJpAMCCPKxzJ01+xFcr2k1m3WRPU= +github.com/unknwon/com v0.0.0-20190804042917-757f69c95f3e/go.mod h1:tOOxU81rwgoCLoOVVPHb6T/wt8HZygqH5id+GNnlCXM= +github.com/unknwon/com v1.0.1 h1:3d1LTxD+Lnf3soQiD4Cp/0BRB+Rsa/+RTvz8GMMzIXs= +github.com/unknwon/com v1.0.1/go.mod h1:tOOxU81rwgoCLoOVVPHb6T/wt8HZygqH5id+GNnlCXM= +github.com/unknwon/i18n v0.0.0-20190805065654-5c6446a380b6 h1:sRrkJEHtNoaSvyXMbRgofEOX4/3gMiraevQKJdIBhYE= +github.com/unknwon/i18n v0.0.0-20190805065654-5c6446a380b6/go.mod h1:+5rDk6sDGpl3azws3O+f+GpFSyN9GVr0K8cvQLQM2ZQ= +github.com/unknwon/paginater v0.0.0-20170405233947-45e5d631308e h1:Qf3QQl/zmEbWDajFEiisbKN83hLY+eq2MhbA0I1/two= +github.com/unknwon/paginater v0.0.0-20170405233947-45e5d631308e/go.mod h1:TBwoao3Q4Eb/cp+dHbXDfRTrZSsj/k7kLr2j1oWRWC0= +github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs= +github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191014212845-da9a3fd4c582 h1:p9xBe/w/OzkeYVKm234g55gMdD1nSIooTir5kV11kfA= +golang.org/x/net v0.0.0-20191014212845-da9a3fd4c582/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191010194322-b09406accb47 h1:/XfQ9z7ib8eEJX2hdgFTZJ/ntt0swNk5oYBziWeTCvY= +golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190802220118-1d1727260058/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +golang.org/x/tools v0.0.0-20190805222050-c5a2fd39b72a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= +gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d h1:TxyelI5cVkbREznMhfzycHdkp5cLA7DpE+GKjSslYhM= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= +gopkg.in/bufio.v1 v1.0.0-20140618132640-567b2bfa514e h1:wGA78yza6bu/mWcc4QfBuIEHEtc06xdiU0X8sY36yUU= +gopkg.in/bufio.v1 v1.0.0-20140618132640-567b2bfa514e/go.mod h1:xsQCaysVCudhrYTfzYWe577fCe7Ceci+6qjO2Rdc0Z4= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/clog.v1 v1.2.0 h1:BHfwHRNQy497iBNsRBassPixSAxRbn2z5KVkdBFbwxc= +gopkg.in/clog.v1 v1.2.0/go.mod h1:L6fgdpdhFgKX4eGuDvt+N6X2GwZE160NRrIHzvaF8ZM= +gopkg.in/editorconfig/editorconfig-core-go.v1 v1.3.1 h1:MmEkdU+FtQ2/CcaiAlPYfYFBLHj7S6lBfG2b/rq+RBk= +gopkg.in/editorconfig/editorconfig-core-go.v1 v1.3.1/go.mod h1:HLRfHXFEZeZqN40N3uOdJUIOzzKl5xk9kc0AX12GhdY= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= +gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= +gopkg.in/ini.v1 v1.46.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.48.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.49.0 h1:MW0aLMiezbm/Ray0gJJ+nQFE2uOC9EpK2p5zPN3NqpM= +gopkg.in/ini.v1 v1.49.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ldap.v2 v2.5.1 h1:wiu0okdNfjlBzg6UWvd1Hn8Y+Ux17/u/4nlk4CQr6tU= +gopkg.in/ldap.v2 v2.5.1/go.mod h1:oI0cpe/D7HRtBQl8aTg+ZmzFUAvu4lsv3eLXMLGFxWk= +gopkg.in/macaron.v1 v1.3.4 h1:HvIscOwxhFhx3swWM/979wh2QMYyuXrNmrF9l+j3HZs= +gopkg.in/macaron.v1 v1.3.4/go.mod h1:/RoHTdC8ALpyJ3+QR36mKjwnT1F1dyYtsGM9Ate6ZFI= +gopkg.in/redis.v2 v2.3.2 h1:GPVIIB/JnL1wvfULefy3qXmPu1nfNu2d0yA09FHgwfs= +gopkg.in/redis.v2 v2.3.2/go.mod h1:4wl9PJ/CqzeHk3LVq1hNLHH8krm3+AXEgut4jVc++LU= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +xorm.io/builder v0.3.6 h1:ha28mQ2M+TFx96Hxo+iq6tQgnkC9IZkM6D8w9sKHHF8= +xorm.io/builder v0.3.6/go.mod h1:LEFAPISnRzG+zxaxj2vPicRwz67BdhFreKg8yv8/TgU= +xorm.io/core v0.7.2 h1:mEO22A2Z7a3fPaZMk6gKL/jMD80iiyNwRrX5HOv3XLw= +xorm.io/core v0.7.2/go.mod h1:jJfd0UAEzZ4t87nbQYtVjmqpIODugN6PD2D9E+dJvdM= +xorm.io/xorm v0.8.0 h1:iALxgJrX8O00f8Jk22GbZwPmxJNgssV5Mv4uc2HL9PM= +xorm.io/xorm v0.8.0/go.mod h1:ZkJLEYLoVyg7amJK/5r779bHyzs2AU8f8VMiP6BM7uY= diff --git a/gogs.go b/gogs.go index f423de93c..29c8d6e6a 100644 --- a/gogs.go +++ b/gogs.go @@ -1,4 +1,4 @@ -// +build go1.8 +// +build go1.11 // Copyright 2014 The Gogs Authors. All rights reserved. // Use of this source code is governed by a MIT-style @@ -12,11 +12,11 @@ import ( "github.com/urfave/cli" - "github.com/gogs/gogs/cmd" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/cmd" + "gogs.io/gogs/pkg/setting" ) -const Version = "0.11.95.1020" +const Version = "0.11.95.1023" func init() { setting.AppVer = Version diff --git a/models/access.go b/models/access.go index 976533d87..661a57a53 100644 --- a/models/access.go +++ b/models/access.go @@ -9,7 +9,7 @@ import ( log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models/errors" + "gogs.io/gogs/models/errors" ) type AccessMode int diff --git a/models/action.go b/models/action.go index c19101b5c..d8381e473 100644 --- a/models/action.go +++ b/models/action.go @@ -12,17 +12,17 @@ import ( "time" "unicode" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" + "github.com/unknwon/com" + "xorm.io/xorm" "github.com/json-iterator/go" log "gopkg.in/clog.v1" "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) type ActionType int diff --git a/models/admin.go b/models/admin.go index 07d78defa..8aaa67a96 100644 --- a/models/admin.go +++ b/models/admin.go @@ -10,11 +10,11 @@ import ( "strings" "time" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" + "github.com/unknwon/com" + "xorm.io/xorm" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/pkg/tool" ) type NoticeType int diff --git a/models/attachment.go b/models/attachment.go index e053ebff5..21718a73d 100644 --- a/models/attachment.go +++ b/models/attachment.go @@ -12,10 +12,10 @@ import ( "path" "time" - "github.com/go-xorm/xorm" + "xorm.io/xorm" gouuid "github.com/satori/go.uuid" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) // Attachment represent a attachment of issue/comment/release. diff --git a/models/comment.go b/models/comment.go index 67fc2511b..e3726ffec 100644 --- a/models/comment.go +++ b/models/comment.go @@ -9,14 +9,14 @@ import ( "strings" "time" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" + "github.com/unknwon/com" + "xorm.io/xorm" log "gopkg.in/clog.v1" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/markup" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/markup" ) // CommentType defines whether a comment is just a simple comment, an action (like close) or a reference. diff --git a/models/git_diff.go b/models/git_diff.go index cfaf5286f..f6bdea2df 100644 --- a/models/git_diff.go +++ b/models/git_diff.go @@ -17,9 +17,9 @@ import ( "github.com/gogs/git-module" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/template/highlight" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/template/highlight" + "gogs.io/gogs/pkg/tool" ) type DiffSection struct { diff --git a/models/issue.go b/models/issue.go index 64c707442..06ded2528 100644 --- a/models/issue.go +++ b/models/issue.go @@ -9,15 +9,15 @@ import ( "strings" "time" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" + "github.com/unknwon/com" + "xorm.io/xorm" log "gopkg.in/clog.v1" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) var ( diff --git a/models/issue_label.go b/models/issue_label.go index 0587ca1f9..fb7f56622 100644 --- a/models/issue_label.go +++ b/models/issue_label.go @@ -11,11 +11,11 @@ import ( "strconv" "strings" - "github.com/go-xorm/xorm" + "xorm.io/xorm" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/pkg/tool" ) var labelColorPattern = regexp.MustCompile("#([a-fA-F0-9]{6})") diff --git a/models/issue_mail.go b/models/issue_mail.go index 73dcabe62..941fbced5 100644 --- a/models/issue_mail.go +++ b/models/issue_mail.go @@ -7,12 +7,12 @@ package models import ( "fmt" - "github.com/Unknwon/com" + "github.com/unknwon/com" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/pkg/mailer" - "github.com/gogs/gogs/pkg/markup" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/mailer" + "gogs.io/gogs/pkg/markup" + "gogs.io/gogs/pkg/setting" ) func (issue *Issue) MailSubject() string { diff --git a/models/login_source.go b/models/login_source.go index 7c6c5f49a..49601a774 100644 --- a/models/login_source.go +++ b/models/login_source.go @@ -16,19 +16,19 @@ import ( "sync" "time" - "github.com/Unknwon/com" "github.com/go-macaron/binding" - "github.com/go-xorm/core" - "github.com/go-xorm/xorm" "github.com/json-iterator/go" + "github.com/unknwon/com" log "gopkg.in/clog.v1" "gopkg.in/ini.v1" + "xorm.io/core" + "xorm.io/xorm" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/auth/github" - "github.com/gogs/gogs/pkg/auth/ldap" - "github.com/gogs/gogs/pkg/auth/pam" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/auth/github" + "gogs.io/gogs/pkg/auth/ldap" + "gogs.io/gogs/pkg/auth/pam" + "gogs.io/gogs/pkg/setting" ) type LoginType int diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 3d3327ef4..eb73a3b9a 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -9,11 +9,11 @@ import ( "strings" "time" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" + "github.com/unknwon/com" + "xorm.io/xorm" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/pkg/tool" ) const _MIN_DB_VER = 10 @@ -102,9 +102,9 @@ You can migrate your older database using a previous release, then you can upgra Please save following instructions to somewhere and start working: - If you were using below 0.6.0 (e.g. 0.5.x), download last supported archive from following link: - https://github.com/gogs/gogs/releases/tag/v0.7.33 + https://gogs.io/gogs/releases/tag/v0.7.33 - If you were using below 0.7.0 (e.g. 0.6.x), download last supported archive from following link: - https://github.com/gogs/gogs/releases/tag/v0.9.141 + https://gogs.io/gogs/releases/tag/v0.9.141 Once finished downloading, diff --git a/models/migrations/v13.go b/models/migrations/v13.go index 3f7e81dfc..1097956eb 100644 --- a/models/migrations/v13.go +++ b/models/migrations/v13.go @@ -8,8 +8,8 @@ import ( "fmt" "strings" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" + "github.com/unknwon/com" + "xorm.io/xorm" "github.com/json-iterator/go" ) diff --git a/models/migrations/v14.go b/models/migrations/v14.go index 79c31133f..de8babed8 100644 --- a/models/migrations/v14.go +++ b/models/migrations/v14.go @@ -7,7 +7,7 @@ package migrations import ( "fmt" - "github.com/go-xorm/xorm" + "xorm.io/xorm" ) func setCommentUpdatedWithCreated(x *xorm.Engine) (err error) { diff --git a/models/migrations/v15.go b/models/migrations/v15.go index d6cccb1d1..fb1214b6b 100644 --- a/models/migrations/v15.go +++ b/models/migrations/v15.go @@ -11,11 +11,11 @@ import ( "path/filepath" "strings" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" + "github.com/unknwon/com" + "xorm.io/xorm" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) func generateAndMigrateGitHooks(x *xorm.Engine) (err error) { diff --git a/models/migrations/v16.go b/models/migrations/v16.go index e95fe10ad..389d1d629 100644 --- a/models/migrations/v16.go +++ b/models/migrations/v16.go @@ -9,12 +9,12 @@ import ( "path/filepath" "strings" - "github.com/go-xorm/xorm" + "xorm.io/xorm" log "gopkg.in/clog.v1" "github.com/gogs/git-module" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) func updateRepositorySizes(x *xorm.Engine) (err error) { diff --git a/models/migrations/v17.go b/models/migrations/v17.go index c0ffec514..279ddf25d 100644 --- a/models/migrations/v17.go +++ b/models/migrations/v17.go @@ -7,7 +7,7 @@ package migrations import ( "fmt" - "github.com/go-xorm/xorm" + "xorm.io/xorm" ) func removeInvalidProtectBranchWhitelist(x *xorm.Engine) error { diff --git a/models/migrations/v18.go b/models/migrations/v18.go index 086cd27af..b74a7ad2d 100644 --- a/models/migrations/v18.go +++ b/models/migrations/v18.go @@ -7,9 +7,9 @@ package migrations import ( "fmt" - "github.com/go-xorm/xorm" + "xorm.io/xorm" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) func updateRepositoryDescriptionField(x *xorm.Engine) error { diff --git a/models/migrations/v19.go b/models/migrations/v19.go index 839e181f3..bae2e3550 100644 --- a/models/migrations/v19.go +++ b/models/migrations/v19.go @@ -5,7 +5,7 @@ package migrations import ( - "github.com/go-xorm/xorm" + "xorm.io/xorm" ) func cleanUnlinkedWebhookAndHookTasks(x *xorm.Engine) error { diff --git a/models/milestone.go b/models/milestone.go index f05e33165..e30ca14f2 100644 --- a/models/milestone.go +++ b/models/milestone.go @@ -8,12 +8,12 @@ import ( "fmt" "time" - "github.com/go-xorm/xorm" + "xorm.io/xorm" log "gopkg.in/clog.v1" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) // Milestone represents a milestone of repository. diff --git a/models/mirror.go b/models/mirror.go index 287664a65..d4113f201 100644 --- a/models/mirror.go +++ b/models/mirror.go @@ -11,17 +11,17 @@ import ( "strings" "time" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" + "github.com/unknwon/com" + "xorm.io/xorm" log "gopkg.in/clog.v1" "gopkg.in/ini.v1" "github.com/gogs/git-module" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/process" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/sync" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/process" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/sync" ) var MirrorQueue = sync.NewUniqueQueue(setting.Repository.MirrorQueueLength) diff --git a/models/models.go b/models/models.go index 0f028ad55..2bfb8800b 100644 --- a/models/models.go +++ b/models/models.go @@ -15,23 +15,23 @@ import ( "strings" "time" - "github.com/Unknwon/com" _ "github.com/denisenkom/go-mssqldb" _ "github.com/go-sql-driver/mysql" - "github.com/go-xorm/core" - "github.com/go-xorm/xorm" + "xorm.io/core" + "xorm.io/xorm" "github.com/json-iterator/go" _ "github.com/lib/pq" + "github.com/unknwon/com" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models/migrations" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models/migrations" + "gogs.io/gogs/pkg/setting" ) // Engine represents a XORM engine or session. type Engine interface { Delete(interface{}) (int64, error) - Exec(string, ...interface{}) (sql.Result, error) + Exec(...interface{}) (sql.Result, error) Find(interface{}, ...interface{}) error Get(interface{}) (bool, error) ID(interface{}) *xorm.Session @@ -202,7 +202,7 @@ func SetEngine() (err error) { } // To prevent mystery "MySQL: invalid connection" error, - // see https://github.com/gogs/gogs/issues/5532. + // see https://gogs.io/gogs/issues/5532. x.SetMaxIdleConns(0) x.SetConnMaxLifetime(time.Second) diff --git a/models/org.go b/models/org.go index e3744c8a2..df280c42e 100644 --- a/models/org.go +++ b/models/org.go @@ -11,7 +11,7 @@ import ( "strings" "github.com/go-xorm/builder" - "github.com/go-xorm/xorm" + "xorm.io/xorm" ) var ( diff --git a/models/org_team.go b/models/org_team.go index c3aba0e12..5fc77dbeb 100644 --- a/models/org_team.go +++ b/models/org_team.go @@ -8,9 +8,9 @@ import ( "fmt" "strings" - "github.com/go-xorm/xorm" + "xorm.io/xorm" - "github.com/gogs/gogs/models/errors" + "gogs.io/gogs/models/errors" ) const OWNER_TEAM = "Owners" @@ -32,7 +32,7 @@ type Team struct { func (t *Team) AfterSet(colName string, _ xorm.Cell) { switch colName { case "num_repos": - // LEGACY [1.0]: this is backward compatibility bug fix for https://github.com/gogs/gogs/issues/3671 + // LEGACY [1.0]: this is backward compatibility bug fix for https://gogs.io/gogs/issues/3671 if t.NumRepos < 0 { t.NumRepos = 0 } diff --git a/models/pull.go b/models/pull.go index 3a80cbc11..edb37c226 100644 --- a/models/pull.go +++ b/models/pull.go @@ -11,17 +11,17 @@ import ( "strings" "time" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" + "github.com/unknwon/com" + "xorm.io/xorm" log "gopkg.in/clog.v1" "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/process" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/sync" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/process" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/sync" ) var PullRequestQueue = sync.NewUniqueQueue(setting.Repository.PullRequestQueueLength) diff --git a/models/release.go b/models/release.go index c968502c1..261037343 100644 --- a/models/release.go +++ b/models/release.go @@ -10,14 +10,14 @@ import ( "strings" "time" - "github.com/go-xorm/xorm" + "xorm.io/xorm" log "gopkg.in/clog.v1" "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/process" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/process" ) // Release represents a release of repository. diff --git a/models/repo.go b/models/repo.go index 3df9a5d39..f456934d0 100644 --- a/models/repo.go +++ b/models/repo.go @@ -19,9 +19,9 @@ import ( "strings" "time" - "github.com/Unknwon/cae/zip" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" + "github.com/unknwon/cae/zip" + "github.com/unknwon/com" + "xorm.io/xorm" "github.com/mcuadros/go-version" "github.com/nfnt/resize" log "gopkg.in/clog.v1" @@ -30,13 +30,13 @@ import ( git "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/avatar" - "github.com/gogs/gogs/pkg/bindata" - "github.com/gogs/gogs/pkg/markup" - "github.com/gogs/gogs/pkg/process" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/sync" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/avatar" + "gogs.io/gogs/pkg/bindata" + "gogs.io/gogs/pkg/markup" + "gogs.io/gogs/pkg/process" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/sync" ) // REPO_AVATAR_URL_PREFIX is used to identify a URL is to access repository avatar. diff --git a/models/repo_branch.go b/models/repo_branch.go index 24046d6fd..99fb9f04e 100644 --- a/models/repo_branch.go +++ b/models/repo_branch.go @@ -8,11 +8,11 @@ import ( "fmt" "strings" - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/gogs/git-module" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/tool" ) type Branch struct { diff --git a/models/repo_editor.go b/models/repo_editor.go index bb4b6300d..19eb95971 100644 --- a/models/repo_editor.go +++ b/models/repo_editor.go @@ -16,15 +16,15 @@ import ( "strings" "time" - "github.com/Unknwon/com" + "github.com/unknwon/com" gouuid "github.com/satori/go.uuid" "github.com/gogs/git-module" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/process" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/process" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) const ( @@ -484,7 +484,7 @@ func (repo *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions) continue } - // Prevent copying files into .git directory, see https://github.com/gogs/gogs/issues/5558. + // Prevent copying files into .git directory, see https://gogs.io/gogs/issues/5558. if isRepositoryGitPath(upload.Name) { continue } diff --git a/models/repo_test.go b/models/repo_test.go index 2d7f9c382..3d852e07a 100644 --- a/models/repo_test.go +++ b/models/repo_test.go @@ -5,8 +5,8 @@ import ( . "github.com/smartystreets/goconvey/convey" - . "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/markup" + . "gogs.io/gogs/models" + "gogs.io/gogs/pkg/markup" ) func TestRepo(t *testing.T) { diff --git a/models/ssh_key.go b/models/ssh_key.go index 4d08d1112..3f94475eb 100644 --- a/models/ssh_key.go +++ b/models/ssh_key.go @@ -18,13 +18,13 @@ import ( "sync" "time" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" + "github.com/unknwon/com" + "xorm.io/xorm" "golang.org/x/crypto/ssh" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/pkg/process" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/process" + "gogs.io/gogs/pkg/setting" ) const ( diff --git a/models/ssh_key_test.go b/models/ssh_key_test.go index 02086ac4d..407d83e2d 100644 --- a/models/ssh_key_test.go +++ b/models/ssh_key_test.go @@ -11,7 +11,7 @@ import ( . "github.com/smartystreets/goconvey/convey" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) func init() { diff --git a/models/token.go b/models/token.go index 0392ac2e8..93f90ed32 100644 --- a/models/token.go +++ b/models/token.go @@ -7,9 +7,9 @@ package models import ( "time" - "github.com/go-xorm/xorm" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/tool" + "xorm.io/xorm" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/tool" gouuid "github.com/satori/go.uuid" ) diff --git a/models/two_factor.go b/models/two_factor.go index b9e3581d3..35e9e87e8 100644 --- a/models/two_factor.go +++ b/models/two_factor.go @@ -10,14 +10,14 @@ import ( "strings" "time" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" + "github.com/unknwon/com" + "xorm.io/xorm" "github.com/pquerna/otp/totp" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) // TwoFactor represents a two-factor authentication token. diff --git a/models/user.go b/models/user.go index 5f84e17bc..26f7bc0c8 100644 --- a/models/user.go +++ b/models/user.go @@ -20,8 +20,8 @@ import ( "time" "unicode/utf8" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" + "github.com/unknwon/com" + "xorm.io/xorm" "github.com/nfnt/resize" "golang.org/x/crypto/pbkdf2" log "gopkg.in/clog.v1" @@ -29,10 +29,10 @@ import ( "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/avatar" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/avatar" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) // USER_AVATAR_URL_PREFIX is used to identify a URL is to access user avatar. diff --git a/models/user_mail.go b/models/user_mail.go index cc48ace8e..d036790c9 100644 --- a/models/user_mail.go +++ b/models/user_mail.go @@ -8,7 +8,7 @@ import ( "fmt" "strings" - "github.com/gogs/gogs/models/errors" + "gogs.io/gogs/models/errors" ) // EmailAdresses is the list of all email addresses of a user. Can contain the diff --git a/models/webhook.go b/models/webhook.go index 03e8a2a9f..6f39ab7c8 100644 --- a/models/webhook.go +++ b/models/webhook.go @@ -14,17 +14,17 @@ import ( "strings" "time" - "github.com/go-xorm/xorm" + "xorm.io/xorm" "github.com/json-iterator/go" gouuid "github.com/satori/go.uuid" log "gopkg.in/clog.v1" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/httplib" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/sync" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/httplib" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/sync" ) var HookQueue = sync.NewUniqueQueue(setting.Webhook.QueueLength) diff --git a/models/webhook_discord.go b/models/webhook_discord.go index 5bd61a7ab..e7cd9f9f6 100644 --- a/models/webhook_discord.go +++ b/models/webhook_discord.go @@ -14,7 +14,7 @@ import ( "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) type DiscordEmbedFooterObject struct { diff --git a/models/webhook_slack.go b/models/webhook_slack.go index 09e58d3d6..824191bec 100644 --- a/models/webhook_slack.go +++ b/models/webhook_slack.go @@ -13,7 +13,7 @@ import ( "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) type SlackMeta struct { diff --git a/models/wiki.go b/models/wiki.go index 882ccdf04..ca391c05b 100644 --- a/models/wiki.go +++ b/models/wiki.go @@ -13,12 +13,12 @@ import ( "path/filepath" "strings" - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/gogs/git-module" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/sync" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/sync" ) var wikiWorkingPool = sync.NewExclusivePool() diff --git a/pkg/auth/auth.go b/pkg/auth/auth.go index 18eb58306..9c4ecdc32 100644 --- a/pkg/auth/auth.go +++ b/pkg/auth/auth.go @@ -13,10 +13,10 @@ import ( log "gopkg.in/clog.v1" "gopkg.in/macaron.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) func IsAPIPath(url string) bool { diff --git a/pkg/bindata/bindata.go b/pkg/bindata/bindata.go index 791159f8d..e63d55d5d 100644 --- a/pkg/bindata/bindata.go +++ b/pkg/bindata/bindata.go @@ -4471,7 +4471,7 @@ func confLocaleLocale_enGbIni() (*asset, error) { return a, nil } -var _confLocaleLocale_enUsIni = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\xbd\xeb\x72\x1c\xb9\xb1\x30\xf8\xbf\x9e\x02\xa3\x13\x0c\xcd\x44\x50\xad\x98\xf1\x77\xbe\xdd\x98\x10\xe5\xe5\x50\xa3\xcb\x39\x94\xc4\x43\x52\xf6\xe7\xd5\x2a\x6a\xd0\x55\xe8\x6e\x98\xd5\x40\xbb\x80\x62\xab\xc7\xe1\x37\xd8\x07\xd8\xe7\xdb\x27\xd9\x40\x5e\x70\xa9\xaa\xa6\x24\xfb\xec\x1f\xb2\x0b\x48\x24\xee\x89\xcc\x44\x66\x42\xee\x76\x75\xab\x5c\x23\xce\xc4\xb9\xd8\x49\x6d\x3a\xe5\x9c\x70\xaa\x5b\x3d\xd9\x58\xe7\x55\x2b\x5e\x69\x2f\x9c\xea\xef\x75\xa3\xaa\x6a\x63\xb7\x4a\x9c\x89\xd7\x76\xab\xaa\x56\xba\xcd\xd2\xca\xbe\x15\x67\xe2\x05\xff\xae\xd4\xe7\x5d\x67\xfb\x00\xf4\x2b\xfe\xaa\x36\xaa\xdb\x85\x32\xaa\xdb\x55\x4e\xaf\x4d\xad\x8d\x38\x13\x37\x7a\x6d\xc4\x1b\x83\x29\x76\xf0\x9c\xf4\x7e\xf0\x98\x36\xec\x38\xe9\xc3\xae\xea\xd5\x5a\x3b\xaf\x7a\x71\x26\xae\xe9\x67\xb5\x57\x4b\xa7\x7d\xa8\xe9\xcf\xf8\xab\xba\x57\xbd\xd3\x36\x60\xff\x13\xfe\xaa\x76\x72\x1d\x00\xae\xe4\x5a\x55\x5e\x6d\x77\x9d\x84\x02\xb7\xf4\xb3\xea\xa4\x59\x0f\x08\x73\x49\x3f\xab\xa6\x57\xd2\xab\xda\xa8\xbd\x38\x13\x17\xf0\xb1\x58\x2c\xaa\xc1\xa9\xbe\xde\xf5\x76\xa5\x3b\x55\x4b\xd3\xd6\x5b\xec\xe6\x07\xa7\x7a\x41\xe9\x42\x9a\x56\x84\x74\xe8\x82\x6a\x6b\x6d\x6a\xe9\xa8\x1f\xaa\x15\xda\x08\xe9\x2a\x40\x65\xe4\x96\x4b\x87\x9f\x95\xda\x4a\xdd\x85\x51\x0b\xff\xab\x9d\x74\x6e\x6f\x61\x68\xaf\xe8\x67\xd5\xab\xda\x1f\x76\x0a\x86\xe0\xc9\xed\x61\xa7\xaa\x46\xee\x7c\xb3\x91\xa1\x99\xf8\xab\xaa\x7a\xb5\xb3\x4e\x7b\xdb\x1f\x00\x8e\x3f\x2a\xdb\xaf\xa5\xd1\xbf\x4b\x8f\xe3\xf3\x3e\xfb\xac\xb6\xba\xef\x6d\x18\xda\xb7\xf0\xa3\x32\x6a\x5f\x07\x3c\xe2\x4c\xbc\x53\xfb\x1c\x4b\xc8\xd9\xea\x75\x8f\xa3\x18\x32\xdf\xc2\x57\xc0\x82\x79\x84\x09\xb3\x22\xb6\x95\xed\xef\x28\xf5\x65\xf8\x39\x42\x69\xfb\x35\xe5\x96\xed\x92\x46\xae\x15\xe5\xbe\x85\x8f\x02\xc0\x55\xb2\xdd\x6a\x53\xef\xa4\x51\x61\xe8\xce\xc3\x97\xb8\x0a\x5f\x95\x6c\x1a\x3b\x18\x5f\x3b\xe5\xbd\x36\xeb\x30\x07\xe7\x98\x24\x6e\x28\xa9\xca\xf2\x62\xda\xc1\x0e\x71\x96\xc5\x99\xf8\x8b\x1d\x7a\x71\x85\x9f\x98\x97\x15\x82\xcc\x58\xb2\x92\x8d\xd7\xf7\xda\x6b\x85\x95\xf1\x47\xb5\x1b\xba\xae\xee\xd5\xdf\x06\xe5\x7c\xc8\xba\x1a\xba\x4e\x5c\xd3\x77\xa5\x9d\x1b\xa0\xc4\x1b\xf8\x51\x55\x8d\x34\x0d\x74\xe7\x02\x7e\x54\xd5\x47\x6d\x9c\x97\x5d\xf7\xa9\xa2\x1f\x01\x18\x7f\xe1\x38\x79\xed\xa1\xb1\x94\x28\x6e\xbc\xda\xb9\x30\xd0\xe2\xa5\xee\x9d\x7f\xe2\xf5\x56\x89\xeb\xc1\x54\xad\x6d\xee\x54\x5f\x87\x0d\x09\x5b\xe9\xcd\x4a\x1c\xec\xf0\xb8\x57\xa2\x1f\x8c\xd1\x66\x2d\x5e\xd9\xb5\x13\xda\x38\xdd\x2a\xf1\x02\xa0\x4f\xc5\xae\x53\xd2\x29\xd1\x2b\xd9\x8a\x67\x52\x78\xd9\xaf\x95\x3f\x7b\x54\x2f\x3b\x69\xee\x1e\x89\x4d\xaf\x56\x67\x8f\x4e\xdc\xa3\xe7\xaf\x06\xdd\xaa\x4e\x1b\xe5\x9e\x3d\x95\xcf\x45\x23\x7b\xb5\x1a\xba\xee\x20\x96\x6a\x15\xf6\xca\xc1\x0e\xa2\xd9\x48\xb3\x0e\xfb\xe4\xe0\x37\xa1\x42\x6d\x84\xdf\x68\x27\xc2\x46\xfd\xae\x0a\xa3\xa4\xbd\xaa\xdb\x25\x13\x25\x68\x10\x24\xf7\xca\x89\xb7\x87\x9b\xff\xba\x3c\x15\x57\xd6\xf9\x75\xaf\xe0\xf7\xcd\x7f\x5d\x6a\xaf\xfe\x70\x2a\xde\xde\xdc\xfc\xd7\xa5\xb0\xbd\xb8\xd5\x2f\x7e\x59\x54\xed\xb2\xe6\x71\x79\x21\xbd\x5c\x86\x2e\xc4\xb9\x0a\x99\xb8\x95\x62\x1e\x6c\xa8\x40\xf2\x80\xbc\x39\x0f\x9b\x94\x36\xe8\xec\x76\x6c\x97\x35\xed\xe1\x88\xe3\x5d\xd8\xc8\xed\x32\x0d\xf0\x15\x0e\xdd\xe0\x94\x78\xf3\xee\xdd\xfb\x17\xbf\x08\x65\xd6\xda\x28\xb1\xd7\x7e\x23\x06\xbf\xfa\xdf\xeb\xb5\x32\xaa\x97\x5d\xdd\xe8\x30\x36\xbd\x53\x5e\xac\x6c\x8f\x3d\x5d\x54\xce\x75\xf5\xd6\xb6\xa1\x96\x9b\x9b\x4b\xf1\xd6\xb6\xaa\xda\x49\xbf\x81\x86\xf8\x4d\xe5\xfe\xd6\x85\xf1\x8a\x15\xde\x6e\x94\x80\xa5\x0b\x40\x76\xc5\xc3\x23\x5a\x6a\xe3\x42\x3c\x5b\xf6\xcf\xb3\x76\xc9\xa5\xb3\xdd\xe0\xa9\xc4\x7e\xa3\x0c\xcc\x93\xf3\xb2\xf7\x42\x3a\x26\xfd\x8b\x4a\xf5\x7d\xad\xb6\x3b\x7f\x08\xb3\x43\x6d\x18\x63\x47\x24\x8d\x34\xc6\x7a\xb1\x54\x02\xe0\x17\x95\xb1\x35\xee\xd4\x40\x36\x5b\xed\xe4\xb2\x53\x35\x92\xf4\x9e\x29\xd2\x5f\xc2\xe2\xc0\x82\x04\x21\x0a\x88\x30\x62\xe1\x98\x00\xea\x1c\x56\x8e\x34\x02\x90\x0a\xda\xea\x79\x0b\x99\x2e\xc4\x59\x43\xd2\x10\x13\x26\x2d\xac\x78\x1a\x78\xcd\x9c\xef\x76\x9d\x6e\xb0\xea\x57\x98\x97\x96\x4f\x38\x34\x69\xee\x73\x38\x98\x7e\xce\xcb\x16\xc1\xe0\xc3\x90\xf6\xa2\xa0\xc1\x50\x7e\xa3\x7a\x25\x36\xc3\x1a\x0f\x8e\xce\x0e\xed\x77\x40\xc1\x79\x7c\x13\x9d\x14\xd7\xd6\x7a\x9c\xf3\x08\x90\xaa\x38\xef\x3a\x38\xa7\x7b\xb5\xb5\x3e\x0c\x1c\x15\x0b\xb4\x68\xaf\xbb\x2e\xf4\xd4\xc9\x7b\xd5\x0a\x6f\x71\xbf\xb5\xba\x57\x4d\x40\xbc\xa8\xfa\xc1\xd4\xb4\xd8\xaf\x07\x83\x0b\x9e\xd3\xca\x95\x05\x50\xdb\xc1\x79\xb1\x91\xf7\x2a\x0c\x7c\x60\x16\xbc\x9d\x6d\x27\x74\xa9\x1f\x0c\x6c\xe1\x45\xd5\xda\xad\x84\x83\xff\x05\xfc\xa0\xef\x1c\xbf\x76\x42\xae\x56\xaa\xf1\x4e\xdc\xdc\xbc\x16\x4d\x67\x8d\x12\x1f\xae\x2f\x5d\xd8\x06\x9b\x7a\x67\x7b\x60\x12\x6e\x5e\x8b\x2b\xdb\xfb\x98\x96\x0d\x74\x80\x30\xc3\x76\xa9\x7a\xb1\xdf\xe8\x66\x83\xc3\x1e\x4a\x84\x55\xac\x7a\xa1\x9d\x18\x9c\x36\xeb\x53\xd1\xa9\xd0\x03\xed\x71\x01\x84\x3e\xf0\xaa\x0b\xe0\x2b\x25\xfd\xd0\x2b\x38\xf4\xeb\xe5\xa0\x3b\xaf\x4d\x1d\x2a\x24\x3c\x40\x16\xc4\x2f\x98\x01\x25\x6e\x20\xe3\x08\x7c\xbd\xb3\x3b\x64\x67\x60\x57\x2d\xb3\x72\x84\x30\x6c\xf9\x30\x81\x76\xa7\x70\xbd\x3b\x6a\x52\x58\x70\x83\x76\x1b\xb1\xea\xed\x56\xb8\x83\xf3\x6a\x0b\x05\x5b\xa9\xb6\xd6\x2c\xaa\x8d\xf7\x3b\x1e\x9b\xd7\xb7\xb7\x57\x38\x38\x31\xf5\xa1\xd1\x91\xd9\xda\x85\x55\xd2\x05\xc6\xca\x88\x80\x36\x2c\xe3\xa1\xef\x46\x2b\xfc\xc3\xf5\x25\xe7\x1c\x99\xb9\xd0\x84\xa7\xe1\xcf\x4d\x9a\x40\x58\x09\xce\x6e\xd5\x1e\xd6\xbb\x36\x02\x98\x9d\x45\xd5\xd9\x75\xdd\x5b\xeb\x79\xb9\x5f\xda\x35\x2e\xf1\x22\x23\xd5\xf4\x82\x17\x6d\x18\x9c\x7d\x1f\x98\xbf\xce\xae\x81\xe0\x85\xf1\x5a\x54\xca\x00\x69\x69\xac\x71\xb6\x53\x4c\x39\x7f\x85\x54\x71\x81\xa9\x48\x44\x67\x20\xe3\x2c\xbd\x09\x94\xa5\xd5\xd0\x63\x6f\x91\x9e\x06\x80\x53\x21\x3b\x67\xc5\xae\xd7\xc6\x87\x8a\x61\x8e\x08\xc3\xa2\xaa\xec\x2e\x94\xc8\x68\xc8\x7b\x4a\x48\x84\x03\xfa\x1d\xf3\x81\xd5\x83\x95\xa3\x9b\xec\x70\x72\x5b\xbf\xab\xe9\x24\xba\x79\x7b\x7b\x85\xc7\x11\xa4\xc2\x22\x38\x13\x2f\x7b\xbb\x4d\x09\x69\x7c\xde\x06\x7c\x00\x23\xdb\xb6\x57\xce\x9d\x8a\xeb\x97\x17\xe2\xdf\xff\xf0\xd3\x4f\x0b\xf1\xc6\x07\xb2\x17\x28\xc1\x5f\xc3\x0e\x96\x34\x0b\x09\xd4\xf6\xc2\x6f\x94\x78\x14\xc8\xd8\x23\xf1\x0c\x72\xff\x0f\xf5\x59\x6e\x77\x9d\x5a\x34\x76\xfb\x3c\xac\xd2\xad\xf4\x8b\x2a\xe4\xa8\x9e\x89\xc6\x8d\x32\xad\xea\x89\x71\xa5\xac\x8c\xf4\x52\x76\xc6\xc6\x22\xff\x1e\xc6\x7e\xa5\xfb\x6d\x9a\x20\xe6\xec\xc3\x4c\x85\x1c\xe6\x02\x75\x57\x1b\xeb\xf5\xea\x90\x40\xa1\xa7\xef\x42\x22\x2d\xcd\x8a\x76\x1a\x1d\x57\x71\x8c\x71\x5f\xc2\x0a\x7c\xef\x37\xaa\xe7\xe1\x76\x69\xbc\xed\x6a\x15\x98\x96\xd1\x6a\x79\x8f\xa9\xb8\x5a\x72\x90\xb8\x4c\x5e\x10\xc1\xb8\x78\xf1\x4e\xa8\x7b\x65\xc2\xc2\xde\xf5\xb6\x1d\x1a\x58\x39\xbc\x62\x3a\xd1\x2b\x67\x87\xbe\x51\xb4\x50\x23\x41\x0e\x4d\x0b\x54\xbf\x91\x5d\x77\x58\x54\x7c\x30\xae\x7b\x79\x2f\xbd\xec\xb3\x2a\x5e\x71\x12\xb5\x7e\x02\x3b\x69\x54\x2c\x11\x7a\xde\x0c\xce\x07\xea\x01\xad\x70\xd8\x28\xcc\x76\x42\xf6\x4a\x0c\xbb\xce\xca\x56\xb5\x62\x79\x00\x1a\xef\xc2\x5a\x68\xd5\x4a\x0e\x9d\x5f\x54\x2b\xd5\x06\xa2\xa4\xda\x9a\xea\xea\xac\xbd\x83\xca\x68\xa8\x5e\x32\x80\x38\x27\xa4\x97\x00\x71\xac\x64\x6c\x2c\x95\x8f\x60\xb1\x51\x54\x83\xb7\xc0\xa2\xa4\x7c\xbb\x53\x86\xba\xc1\x8c\x89\x08\x7c\x47\x2b\xac\x11\x9d\x5e\x52\xa7\xd3\x58\x8e\x98\x0c\x1e\x9d\x9b\x20\xdf\xe6\x79\xb3\x05\x26\x83\x0a\x0b\xde\x8d\xcb\x9e\x0a\x6b\xba\x03\x31\x23\x61\x8b\xa1\x00\xc9\x7c\x89\x4b\x64\x29\x8a\x6b\x4c\x91\x48\x6a\x2b\xf3\x63\xb5\xd7\xc8\xf6\x8a\x7b\xd9\xe9\x36\x60\x64\x04\xe1\xb4\x98\x6f\xcb\xa2\x22\x5e\xb9\x26\x49\xbb\xbe\xd7\x20\xc7\xc6\x2d\x86\x28\x49\xfa\x0e\x23\xfc\xa7\x00\x10\x04\x64\x37\x5b\x36\xb6\xe6\x7d\xe8\xa4\x8b\x72\x2c\xae\x93\xd0\x5d\xa8\x21\xf0\xef\xee\x54\xdc\x6b\x60\x03\x68\x91\xc3\xb8\x2c\x03\x8f\xd9\xa9\x50\x95\x53\x0a\x30\x08\x6d\x9e\x0e\x3b\x2c\xb3\x20\x21\x8e\xe4\x2a\xe6\xfb\x03\x3b\xd8\x5a\xf3\xd8\x0b\xa3\x90\x6d\xe1\x51\x1d\xb1\x7d\xa2\xd7\xeb\x8d\x17\xc6\xee\x17\xc4\xfd\xf6\xce\xe3\xe8\x80\x6c\xa1\xa8\xa5\x1e\x1a\xc1\x7b\x4f\x0e\xde\x06\xfa\x02\x5b\x4f\xac\x7b\x69\x60\xf9\x31\x62\xe5\x62\xbb\x22\x43\x08\x79\x13\x19\x12\x81\xc6\xc2\xfc\x84\xff\x8c\xd4\x8f\x88\x5e\x9e\x47\xd4\x2e\xc1\x60\x69\x56\x08\x60\xc5\x48\x5d\x49\x00\xac\xd7\x16\x04\x50\x16\xf8\x02\x87\x55\x79\xe5\x7c\xbd\xd6\xbe\x5e\x05\x12\x1c\x10\xbf\x0c\x08\x02\xc3\xa7\x9c\x17\x8f\xd7\xda\x3f\x16\x8d\xdd\x6e\xa5\x69\x7f\x16\x27\xf7\x24\x3b\xfc\x21\xd0\xd6\xb0\x3f\x75\x07\x23\x44\x62\x6d\xaf\x50\x44\x60\x95\x4a\x6b\x95\x13\x81\x67\x76\xc3\x0e\xb8\x8d\x28\x77\x91\x78\xd8\xda\xbd\x09\x54\x04\x86\xdc\xae\x56\xba\xd1\xb2\x13\x4b\x6d\x64\x7f\x88\x58\xe0\x6c\x3a\x71\xa7\xe2\xdd\xfb\x5b\x00\x5c\xdb\xc0\x0c\xb5\x0c\xb0\xa8\xb4\x81\xd5\x1e\x64\x0c\x5a\x11\xb9\x80\xc5\x49\x1a\xdb\xd2\xd8\x3e\x30\x04\xd0\x1b\x2e\x78\x84\x7d\x0e\xdc\x04\x4a\x27\x3a\x08\xb8\x00\x0b\xe5\x22\xa7\x1b\x86\x61\x2b\x7d\xb3\x21\x3e\x18\x97\x90\x0b\x4b\x30\xb4\xb4\x19\xfa\x5e\x19\x5c\x59\x3f\x8b\x13\x27\x9e\x3c\x17\x27\xd9\x61\x5d\x6f\xb5\x0b\xac\x65\xe4\x53\xf9\xe4\x16\x90\x40\xb9\xc5\xe9\x9c\x7a\x9b\x1f\xee\x50\x30\x9c\xf0\x62\xa5\x55\xd7\x8e\xdb\x1b\xd8\x78\x3c\x3a\xd7\xd3\x99\x0e\x99\x02\x33\x07\x24\x08\xc5\xd8\x14\x3b\x2d\x2e\x2d\xde\x48\xd9\xe0\xe6\x15\xf2\x9a\x73\x03\xb2\xfb\x67\xe2\xcf\xaa\x6b\xec\x56\x7d\x27\xfe\xac\x1e\xf7\x4a\xac\x3b\x98\x75\xe9\x49\xc0\xb7\x4e\xc1\x8a\x3c\x45\x29\x61\x35\x18\x38\x84\xbc\xbc\x53\xa0\x13\x48\xdd\x9e\xe3\xff\x8e\x4e\x54\xf5\x71\x63\xb7\xea\x53\x35\xa0\x74\x65\xbb\x36\xca\xe7\xb0\xfd\x6c\x8f\x0c\x4d\x14\xd6\x13\x4c\xdc\x59\x6e\xaf\x7d\xb3\xa9\xa3\xe6\x32\x0c\xa4\x57\x9f\x61\xbe\x20\x2b\x29\x32\xc3\xb6\x0c\x59\xd5\xf6\x00\x6b\x2a\x74\xfc\xed\x21\x2d\x29\xad\x5c\xe5\x36\x76\x0f\x6a\xc0\x08\x71\xb3\xb1\x7b\x50\x00\x16\x32\xd8\x62\xb1\xa8\x1a\xdb\x75\x72\x69\xc3\xac\xdc\x27\xf8\x8b\x3c\xb5\x44\xbe\x3d\xd4\xb6\x5f\x53\xb5\xa5\xda\x6b\x7b\x20\x4d\x1b\xe5\xa2\xa6\xcd\x55\x40\xaf\x49\x45\x0b\x64\xfd\xc4\x55\xa4\x60\x5a\x68\x53\x83\xfe\x8a\x6b\x7e\x63\x50\x3a\xca\xdb\x59\x55\x1f\x49\x7d\xfb\xa9\x62\xb8\xa2\x4d\x48\x4a\x71\xd0\x5d\xa1\x53\x74\x23\xa5\xa2\xab\x9c\x92\x3d\x6c\xa6\x1b\xf8\x51\x55\x1f\xe5\xe0\x37\x9f\x32\xf5\x6a\xcd\x2b\x8f\xd5\xac\xa0\x02\x24\x12\x9b\xf8\xc4\x8d\xda\x05\x96\x72\xeb\x60\xc9\x76\xbd\x92\xed\x81\x04\xd0\xb8\x78\xff\x88\x27\x9a\x36\xe1\x20\xf8\xae\x72\x36\x50\x9f\xfa\x1b\x51\xfc\xa2\x4d\x8b\xe5\x4b\x6e\x00\xf5\xbe\xdb\x1d\x2c\x13\xdb\xf7\x87\xd3\x52\x35\xb1\x91\x4e\x2c\x95\x32\x2c\x42\xb6\x0b\x56\xfc\x84\xe5\x25\x1b\x24\x20\xa0\xab\x86\x1d\x88\x25\xed\x84\x4d\x09\x2d\x44\x9a\x4f\xb5\xe0\x11\xe0\x98\x63\x0d\xac\xda\x37\x57\x11\x06\xbd\x26\x96\xe9\x4c\x9c\x0f\x7e\xa3\x8c\x67\x79\xee\x06\xd2\x2b\x60\x41\x61\xff\x35\xb2\xab\x7a\xb5\x55\x41\x4a\xac\xb7\xa8\x6b\xc6\x2f\xf1\x56\x55\x2b\xdb\xaf\x61\xb7\xe2\x76\x3a\x13\x2f\x21\x21\xed\xaf\x00\xa0\x7c\x7e\xb8\x11\x04\xa7\xfc\x91\x75\xfb\xb5\xb1\x7b\xd0\xf9\x86\x63\x77\x3c\x8d\xc3\x0e\xce\x73\x3e\x2c\x91\x19\x03\x39\xc0\x29\xe3\xd3\x64\x9c\x0b\xa3\xf6\x22\x87\xa2\x21\x8b\x33\x12\xe0\x03\x61\x7c\xb6\x7c\x7e\xe2\x9e\x3d\x5d\x3e\x8f\xe7\x55\xb3\x51\xcd\x1d\x6e\x01\x6d\x96\xf6\x33\x28\x98\x88\x63\x30\x81\x24\x9c\xb4\x62\x63\x87\x9e\x84\xbc\x20\x04\x79\x05\xb9\xc5\xdc\xef\x7a\x4b\xdc\x42\x03\x1b\x1b\xf6\x58\x5a\xd7\xa0\x06\x0e\x2b\x1b\x0e\x55\x5e\xda\xbb\xde\x6e\xf4\x52\xfb\x40\x00\x41\x27\x72\x09\xff\xaf\x28\x59\xb5\x23\x88\x8c\x29\xea\x23\xb9\xd6\x4e\xec\x62\x01\x3c\x57\x3a\xbb\x5e\xa3\x52\xf5\x0b\xcb\x23\xb0\x89\x30\x94\x9d\xde\x6a\x3f\x59\xdd\x81\x8e\x4b\xda\x25\xa4\xb8\xe6\x69\x82\xee\xa4\x81\xee\x55\xa3\x8c\xef\x0e\xb1\xbe\xbd\xd4\x5e\xfc\x41\x6c\xb5\x19\x7c\x10\xca\x37\xca\x08\xdf\x1f\x84\x5c\xcb\x50\xed\x46\xba\x7a\x30\x34\x63\xaa\xe5\xf5\xfe\x5a\x03\x57\x10\xea\xe5\x5d\x99\x41\x95\x82\xaa\xf8\x3e\x4e\xe6\x0f\x0b\x52\x61\x43\xa9\x70\x52\x87\xf6\xe8\x20\x55\xc9\xb9\x65\x61\xfb\xc8\x4d\x12\xa0\x90\xb0\x84\xac\x51\x69\x61\x74\xba\xb9\x83\xf1\x5a\x0e\xde\xdb\x20\x31\x77\x61\x31\xc2\x88\xc5\x16\x5f\x00\x14\xe8\x33\x00\x5b\xc8\xc3\xd5\x34\x1e\xa3\x0a\x8a\x05\x08\x3f\x5f\xf8\xfb\x5e\xfd\x90\x8a\xc7\xbd\x03\x25\x08\x05\x96\xce\xb6\xd5\x35\x64\xe2\xed\x04\x6f\x3e\x3e\x55\x1b\xd2\x17\xc7\xb9\xec\xcb\xb1\x80\xfc\xb0\x43\xd4\xe7\x9d\xee\x83\xec\xd4\x03\x37\x05\xa5\x17\xa3\xba\x92\x72\x61\xda\x63\x5f\xb6\x38\x1d\xbc\xde\xda\xda\x6d\x90\x0f\xe2\xe6\x89\x4e\x99\xb5\xdf\xa0\xfa\x30\x70\xe0\x5e\x84\xf1\xf6\xe2\x7f\x82\xde\x5b\x36\x5e\xf5\x6e\x51\x19\x6b\x6a\x20\x47\xd9\x26\x7a\x67\xcd\x13\x24\x51\x2c\x52\xb1\x02\x97\x6e\x13\xb8\xe2\xb0\xde\x7a\x3b\xac\x37\xa4\x73\xac\x70\xf7\xf8\xbd\xad\x57\xb2\xf1\x70\x33\x75\xbb\xb7\x4f\xe8\xa3\x24\x86\x13\x60\x18\x03\x1a\xcc\x11\xdd\xbc\xa2\x9c\x69\x19\x65\x02\x19\xef\x55\x63\xef\x55\x7f\xe0\xb9\xf8\x35\xa4\x0a\x29\x7c\xaa\x9c\x41\xc4\x3c\x9e\x98\x5d\xb4\xf8\x9a\x52\x8f\xc3\x73\x8d\x0c\x29\x2e\x1e\x68\x66\xd6\xc1\x99\x16\xee\x8e\x76\x32\xf1\xda\x47\x2a\x8d\x4b\x0c\x88\xf0\xe0\x70\x91\x45\x19\x82\x56\x5a\xf5\x31\x2c\xee\x4f\x15\xed\x18\x95\x4d\x39\x51\x13\xce\xe1\x9d\x85\xe4\x33\xc2\xb3\x88\xf4\x27\xd5\xeb\xd5\x01\x81\x0a\x5a\x71\x6c\xe3\x94\xeb\x36\x9e\xbe\x89\xc5\xbd\xce\x69\x3c\x25\xaf\x86\xee\x54\xec\x91\xf7\x4d\x65\xa2\x66\x8a\xb8\x62\x11\x28\x06\xdc\x84\x57\x1f\xb7\xb6\x95\xdd\xa7\xea\x00\xf7\x7b\x7f\x51\xae\x32\x70\xa7\x6a\xab\xad\x6d\xb1\xd0\x5b\xf8\x51\x55\x1f\x57\xb6\xdf\x7e\xaa\x02\x5f\xf5\x6e\x24\x4b\x06\x06\x8c\xd2\x32\x79\x06\xb2\x7e\xcd\xef\x8c\x63\x9f\xaf\x66\xc4\xce\x6b\x95\xae\x8e\xe1\x57\xec\xfc\xcd\xcd\xeb\x5b\xd6\x95\xdd\xbc\x16\x77\x8a\x70\xbf\xf6\x7e\xe7\x3e\x80\x06\x18\xd5\xb9\x1f\xae\x2f\xab\x2b\x79\x08\x32\x1e\x26\xd3\x07\x64\xdc\x2a\xb9\xa5\x46\x86\x9f\x88\x22\x6c\x1a\x4a\x0c\x3f\x6d\x9f\xdf\x7d\x54\x20\x7c\xfc\x5a\x08\xb9\x48\xec\xaa\x77\x6a\xff\x4b\x2f\x4d\xc3\x85\x03\x57\xb8\x84\x04\x2c\x79\x61\xb7\x5b\xed\x6f\x86\xed\x56\xc2\x06\xc1\x6f\xe1\x30\x81\xb2\xdf\x2a\xe7\xf0\x62\x9f\xb2\xb7\x98\x40\xd9\x17\x1b\xab\x9b\x2c\xb7\x81\xef\xea\xb6\x57\x8a\x6a\x7d\xc9\xd7\x68\x15\x48\x02\xc8\xa6\xe2\xaf\x2a\x6a\x4a\x14\xdd\x77\xff\x36\xb9\x52\xfa\xad\x92\xdd\x6e\x23\x41\xd6\xc8\xc0\x22\xf9\x0b\x99\x66\xd8\xaa\x5e\x37\xb0\x37\xa4\xdb\x7c\xff\xa4\xfe\x21\x27\x86\x05\x8a\xd6\xfa\x6f\x41\x03\xdb\xcd\x3f\x88\xcd\x75\x5f\x6e\xda\x29\x60\x14\x01\xe5\x29\x20\xb4\xbd\x80\x72\x25\x66\xa7\x7f\xe7\xb1\x00\x54\xe1\x3b\xe2\x3b\x09\x10\x20\x78\x26\xa8\x58\x1f\xf0\x27\x41\x08\xe5\xe3\xe0\xc4\x95\xa8\xb7\xf2\xf3\x97\x0a\x6e\xed\x4c\x39\x54\xb5\xa7\x42\xa4\x32\x90\x48\x7c\x4a\x32\xb1\xf8\xad\x1a\xfa\x07\x80\x3f\x5c\x5f\x2e\x7e\xab\xb4\x69\xba\xa1\x3d\xda\x10\x37\x2c\x9d\xef\x03\xfb\xf5\xf8\xc4\x3d\x0e\x28\xcd\x9d\xb1\x7b\x13\xe1\x3f\xe0\xb7\x80\xef\x9f\xd9\x78\xa3\xd6\x86\xd4\x18\xc9\x8c\x43\xb4\xba\x0d\xdc\x0c\xa8\x23\x16\xe9\x5c\xcd\x55\x14\x71\x97\x83\x82\x97\x54\x48\x91\xd0\x05\x51\x01\xb4\x35\x72\xab\x16\xc9\xe0\xa4\x0e\xf4\xb8\x0e\x92\xb8\xc9\x45\xe7\x40\xa9\x99\xdf\x03\x8a\x0d\x10\x0b\xbc\x69\x9c\x96\x1b\x91\xa1\xa3\xc5\x6d\xbf\x9e\x29\xfd\x7e\x7a\x0b\x7a\xa4\xbc\x57\x72\x3b\x83\x20\x12\x98\xa3\x05\x71\xee\xa1\x10\x9c\x3d\x23\x0a\x39\x2d\x17\xa0\x16\x69\x94\xe2\x80\xe7\x73\x93\x2b\x1a\xe2\x38\x97\x8a\xa8\x42\xda\xaa\xb7\xda\xf1\x64\xdd\x6e\x40\xe5\x98\xb3\x10\x51\x8b\xdd\xa9\x26\x70\xd7\xbc\xe4\x1c\xc8\xae\x21\x05\x6c\x04\x58\x81\xb9\xa8\xe0\xc8\xee\xc1\xa6\x28\xd3\x74\x91\xe6\x91\xce\xcb\xad\xbc\x53\xc2\x0d\x81\x45\xdb\x48\x4f\xd2\x4a\x39\x59\x81\x5b\x06\x54\x58\x67\x6c\xf9\x04\xbd\xdd\x9b\x70\xbc\x7d\x09\x3f\x80\x7d\x23\xea\x5c\x31\x3a\x45\x4c\xc8\x23\xd0\x31\xb4\x51\x6b\xa7\x3e\x6b\xb8\x2c\x7b\xa5\xef\x15\xe9\xed\x22\xab\x01\x79\x8b\xaa\x93\xce\xd7\x61\x3d\x62\x73\x41\xac\xb5\xf7\x61\xb3\x86\xfa\x42\x2e\x96\x43\xf5\x1c\x75\x2a\xac\x3f\xd2\x00\xca\xae\xb3\x7b\xd5\x9e\x0a\x09\x32\x4d\x4f\xd4\x4d\x76\x7b\x79\x70\x05\x3b\x6b\x0d\x8f\x49\x20\x4e\xe6\x20\xd6\xd0\xaa\x5c\x57\xb2\xa8\x92\xe2\xcf\x6d\xea\x70\xe4\x46\x76\x7d\x0f\x2a\x35\x58\x09\xa4\x34\xbf\xcf\x98\x1b\x3a\xa1\x7f\x16\x27\xae\x1a\xf0\xd2\x00\xb3\x33\x44\x60\x31\x43\xa7\xd1\x4c\xd9\xd3\x20\xd6\x88\xbd\x0a\x2b\x6d\xd8\xd2\x58\x6b\x10\x27\xa1\x49\x99\x42\x77\x58\x76\xea\x09\xca\xc9\x9a\xd7\x76\x54\x39\x8e\x38\x62\x4c\x47\x45\x9d\xf3\xba\xeb\xc2\x48\xb3\x15\x59\x21\xb7\x42\x2e\x6c\x41\x18\x26\xb7\xd1\x3b\x61\xe1\x8e\x2e\x1f\xc2\xb4\x6c\x33\xb1\xd0\x5b\xd1\x2a\x90\xc3\x6d\x2f\x7c\x2f\x8d\x5b\x29\xb8\xb4\xdc\xa2\xda\x7f\x41\x55\x07\x29\x13\xad\xc6\x8e\xd4\x8c\x2a\x0d\xa8\x3a\x3f\x7b\x60\xee\xb2\x89\x2a\xab\x46\x93\x01\xb8\x19\x83\x36\xc0\xa8\x26\x4c\x8e\xdb\x10\x96\xd9\x64\x08\xe0\x92\xbc\x30\x00\x99\x1d\x87\x55\xa1\x8f\xc3\xfa\x61\xa5\x7d\xa1\xdf\x15\x5a\x65\xd5\xc8\x26\x15\xbb\xe2\x16\x72\x98\x81\x1a\x6f\x8c\xea\x63\x58\xf7\x9f\x2a\x94\xa4\xea\x78\xf3\x78\x81\x92\x15\xf2\xdd\x90\x58\xfd\xd5\x6a\x53\xc3\x35\xda\x7f\x58\x6d\xe0\xce\xad\x2a\x2c\x4d\x46\xca\x42\xb2\x87\x3b\x80\x09\xcc\xb2\xd3\x0d\x1b\xc5\x1d\xaa\x95\x85\xfd\x04\xba\xc4\x97\xfc\xbb\x72\x5e\x06\x32\x41\x76\x12\xe1\x57\xa1\x9c\xc4\x42\xa8\xb9\x7e\xc9\xbf\x29\x35\x26\x55\x83\x89\x29\x1f\xe8\x67\x55\x05\xee\x7a\x01\xa4\x3d\x08\x04\x70\xed\x9a\x11\xf4\x70\x5e\x87\xf5\xcf\x79\x8b\x0c\x7e\x27\xbd\x57\xbd\xc1\x4b\x12\x24\x02\x79\x51\xca\x8e\x28\x60\xe3\x22\x58\x18\x5b\x36\x16\xfc\x54\x25\x93\x42\xb6\x26\x9c\xbb\x1d\x8a\xc3\x8f\x17\xa9\x15\xed\x6a\x47\xcc\xf9\x7f\xaa\x83\xab\x9c\x6a\x86\x1e\x87\xf5\x86\x7e\xce\x2b\x6b\x49\x7b\x3c\xb2\x98\x4c\xd6\x1c\xae\x34\xee\x70\x15\xad\xb1\x33\xf1\x02\x7f\xb0\xba\xaa\xda\xc1\xf4\x65\x66\x91\x34\x9f\xb1\x2b\x64\x15\x9b\xab\xa9\x4a\x9d\x8d\x76\x02\x91\x00\xbb\xc2\xb7\x70\x70\x38\xaf\x6c\x0f\x74\x32\xde\xe7\xa9\x0e\x8e\x3f\x93\xdd\xee\xbb\x53\x28\x17\xc0\xf6\x6a\xc9\x57\xbe\xc9\x56\x66\x2b\x5b\x25\xee\xb5\x8c\x6a\xae\x8c\x69\x8a\xa7\x3a\xab\x4e\x0b\x8d\x02\x08\x43\xa8\xd6\x66\x9e\x89\xa7\xd9\x5b\xd6\x2f\xf8\x8d\xd2\x78\xe3\x6a\x80\x9f\x5a\x0d\x5d\xc7\x27\xe3\xcb\xa1\xeb\xd0\xf2\x6b\x6a\x8f\x1c\xaa\xa0\x9b\xe7\x4b\xfa\x59\x0d\xbb\x36\x88\xae\x69\x2c\x3f\x40\x42\x1c\xcb\x32\x3f\x13\x49\x61\x54\xb9\x58\x92\xad\x01\xbc\xcd\x64\xd4\xee\xb0\xe0\xdd\x3c\x63\x67\x4c\x1b\xbb\x1d\x83\x24\x1d\x20\x50\x2a\xea\x38\x4c\x14\x9a\xf6\xc0\xd0\xee\xe5\x41\x6c\xec\x5e\x74\xda\xdc\x39\x9a\xa9\x30\x4e\xb9\x78\x0e\x6a\x5b\xaf\xcd\xa0\x48\x60\x0a\x3f\xa7\x56\xad\x64\x0a\x40\x86\x01\xcb\x03\xeb\xc6\xd0\x74\x80\x36\x80\x58\x1e\x04\xc8\x84\xc7\x6d\x10\xc6\xc6\x07\x6c\x7b\xc0\x77\xea\x60\xfa\x90\xe8\xda\x07\xa7\xc4\x05\x9a\x43\xd0\x1e\x6b\x36\xd6\x3a\xba\x8f\x48\xd4\x2f\xa4\x81\x6a\x90\x88\x1f\x4d\x4b\xc2\x83\xb3\x76\xce\x66\x19\xb0\xcf\x69\x07\xd5\x74\x57\x98\xa0\x69\x43\x5d\xd0\x1d\xe2\x39\xe3\x44\xb3\x0b\xee\x13\xd0\x98\x5a\x6f\x51\x6c\xfd\xc0\x46\x19\x30\xe1\x51\x22\x81\xec\x45\xd9\x9e\xf1\x2a\xa1\x7a\xf9\x42\xef\x0b\x8b\x85\x97\x42\x7e\x25\x8d\xd3\x1f\xe9\x92\xed\x0a\xa6\x8d\xfb\x11\xf3\xc3\xe0\x65\xf9\xef\xc0\xa2\x20\x6a\x57\xc2\x1e\xab\x47\x20\xa4\x90\x28\x20\x67\xd9\x6e\xae\xeb\x28\xcb\x3d\x6a\xfd\x64\xc7\x70\xb9\xbd\x74\x45\xc7\x69\x8d\xb7\x0b\x36\x3d\x15\xc6\xee\xd1\x3c\x01\x6c\x04\xd1\x4e\xd2\x80\x6d\x03\xa2\xc8\x88\x0a\x55\xfa\xaf\x92\x94\x84\x19\x65\x16\x17\x45\x95\x73\x24\x9c\xca\xb1\x15\x7c\xcc\x27\x43\xf8\x82\xbe\x2a\x36\x2d\xcb\x29\xf0\xae\xd7\xa0\x20\x29\x29\xf1\x84\xf6\x16\x74\x16\xc8\xac\x05\x43\xa9\x44\x5e\x17\x15\xa3\x0a\xa7\x17\xfc\xe2\x94\xa8\x82\xbb\x51\x60\x2d\x4c\xc9\xbc\x11\x38\x17\xd7\x7f\x6c\x63\xa7\x88\x2a\x62\x5f\x5f\x50\xc2\x28\x9f\x3b\x83\xd9\x3c\x21\x33\xbd\xe9\x03\x2f\xaf\xe2\xc1\xa1\x0d\xda\xa9\x45\x83\x83\x82\x3a\x89\x17\x40\xae\xc4\x5e\xe2\xcd\x10\x13\xab\x3f\x8e\x6b\x4f\xeb\xe8\xd7\xf2\x4e\x09\xfb\x56\xee\xa2\xef\x2a\xd9\xb6\xb0\xc6\x93\xd9\x46\x0b\x8b\xa7\xd4\x47\x06\xa8\x1c\x02\xcd\x3a\x62\x6a\x5d\xdc\x78\x39\x54\x3a\x7d\xfd\x2d\x57\xe0\x42\xfe\x1b\x2e\xb8\x8a\xaa\xd2\x05\x57\x6c\xe4\x68\x87\x4d\x7a\x39\xdd\x6a\xb2\x6d\x81\x21\xa2\xb5\x9c\xb1\x35\xb4\x9a\x23\x77\x13\x6a\x41\x39\x26\x0c\xcf\x7f\xaa\x03\xf0\x40\xb4\x12\xe0\x68\xd2\x4e\x48\xb0\x54\x05\xf3\x76\x14\x6a\xdc\x44\x6e\x2e\xe7\xfc\x1c\xa4\x36\xa7\x08\x16\xf8\x43\x69\x0e\x81\xdf\xe7\xbd\xae\xb6\x61\x1c\xd6\x32\x1a\x00\xc5\x73\xad\xe4\xc8\x51\x54\xda\xe8\xf5\xa6\x3b\x08\xbd\xdd\xd9\xde\xc3\x4a\x62\xfb\x87\x24\xc9\x86\xaf\x5e\x35\x76\x6d\xf4\xef\x30\xb0\x5b\x34\x64\x8e\x37\x2a\xcf\x9c\xef\xad\x59\x3f\x7f\x01\x76\x4e\x77\x81\xfc\x6c\xec\xfe\x8f\xcf\x9e\x52\xba\xb8\x80\x29\xb4\x83\x17\xaf\xb4\x7f\x3d\x2c\x1f\x3b\xb1\x1e\x74\x0b\x47\xee\x33\x99\x79\x5e\x90\x6d\x14\x5a\x99\xef\x4d\x1c\x16\xf0\xc3\xb0\xbd\x70\xb6\xbb\x57\xa3\x22\x76\xbb\xc5\xe9\x5d\x76\x6a\x8b\x90\xd0\x7e\x30\xa7\x52\x06\x46\x4e\xf5\x34\x3e\x37\x37\xaf\x17\x71\x89\xa7\xf9\xa1\x69\x63\x3e\xb5\x50\xb9\x10\x8f\x18\x80\x1b\x52\xa0\x16\x37\x02\x8b\x58\x0a\xf8\x8f\x69\x29\x98\x47\x17\x78\x96\x89\xb2\x07\x84\x97\x80\x82\x8b\x8b\xb3\xd0\x0e\xe4\xc3\x42\x5a\x33\x51\xd9\xd2\xc2\xca\x16\x6f\x38\x7b\x58\xe5\x0d\xfc\x7b\x6c\x1e\x2c\xd7\xd1\xfe\x26\x8a\x86\x7d\x27\x7a\xc6\x1d\xc8\x28\x1a\x8d\x48\xa2\x69\x63\x98\x82\xaa\x29\xa4\x69\xdc\x8a\x9c\x9a\xa1\xe1\x28\x52\x34\x5c\x90\xca\x01\xbd\xfe\x4a\x6a\x36\xa9\x37\x75\x9c\xab\xfb\x0a\x8a\x06\x7d\x3a\x87\xe1\xb0\x06\xb5\x28\x34\x51\x97\xa4\x33\x81\x0c\x63\xeb\x4c\xda\x7b\x67\xe9\x5e\x58\x70\x22\xcc\x89\xf3\x81\x63\xc9\xb7\x72\x68\x04\x98\xe4\xa3\x49\x21\xa8\x61\xfe\x37\xd1\xca\x83\xab\xbc\xbd\x53\x66\xa6\x08\xa4\x1f\x2b\x54\x7d\xe5\x4d\x5f\x76\x95\x15\x6a\x18\x1c\x8a\x9c\x7e\x70\x3f\xe7\x79\xe8\x29\x57\x80\xdb\xd5\x2a\xa4\xad\x56\x55\x71\x99\x46\x96\x73\x68\x64\x99\x67\xb1\x53\x41\xb4\x21\xcd\x33\xc1\x5c\xa7\xb8\x43\x73\x6c\xb8\x03\x16\xf3\xb2\xdc\xb3\x61\xd7\x12\x41\xca\xae\xd9\x70\xe7\x06\xaa\x25\x9c\x5c\x29\xb1\xeb\x64\xa3\x12\x4f\x33\x38\x24\x3d\x70\x38\xf3\x75\x9f\xc6\x4b\xf3\xce\x3a\x35\x26\x76\x23\x2d\x65\x26\x2e\x2e\xf2\xa6\x6f\xbc\xdf\xa1\x75\x47\x6e\xf1\x9f\x58\x06\xb2\x21\x00\xf6\x47\x74\xd6\xac\x55\x1f\x15\x5a\xa1\x49\xbb\x4e\x92\x0d\x29\xec\xde\xd0\xdd\xc8\x0b\x45\xd3\x05\x36\xf8\x6c\xa1\x48\x1a\x89\x8f\x3f\x7e\x72\x27\x1f\x7f\xfa\xe4\x1e\x3d\xbf\x52\xbd\x03\x13\xfb\x73\xec\xc6\x6d\x58\x1e\x30\x22\xd2\xd1\xd5\x77\xaf\xda\xd0\x21\xd9\x9d\x0a\xb5\x58\x2f\xc4\xb3\x30\x04\xcf\x4f\x3e\xfe\xe1\x93\x7b\xf6\x14\x7e\x2f\xa6\x93\x99\x6c\xf4\x71\x6e\xbf\x6e\x2d\x35\xd2\xd4\x7f\x1b\xf9\x7d\x7d\x61\x54\xc1\x6a\x2f\x4c\x54\x38\x78\x81\xb7\x2f\x97\x20\x5f\xd5\x3a\xd5\xf4\xca\x83\x38\x8f\xca\x50\x14\x75\x21\xb5\x28\x11\x2a\x9a\x5e\xef\xde\x6e\x94\xa1\x72\x9c\x5a\x94\x22\x45\x21\x5f\xa5\x56\x33\x97\xbd\x25\xb6\xb4\x98\x46\xea\xd9\x78\xbf\x1b\x19\x91\x68\xfe\xf1\x5d\x55\x5c\x58\x87\x1d\xfc\x55\x58\x67\xd5\xf5\x25\x7a\x43\x3c\xab\x51\xdf\xcd\x4c\x26\xdf\xc0\x4c\x27\x53\x1e\xd5\x62\x4e\xb1\x24\x02\x7a\x1c\x01\x98\x55\x18\x94\x09\xc6\xc4\x7a\x44\x5e\x8f\x5d\xde\xbb\xb8\xf6\x8e\x2e\xba\xf2\x76\xdf\x3d\x80\x8a\x48\x67\x71\x31\x4f\x36\xff\x81\x7e\x46\x77\x3f\xaf\x02\x27\x23\x7b\xdd\x1d\xbe\x95\x2c\x88\x5f\x65\xb3\x29\x69\x12\x50\x1e\x36\xfe\xa6\x33\xa2\x51\xa7\xe2\xd9\xf2\x39\x4d\xda\x9d\x52\x3b\x62\xc9\xb0\x49\x23\x02\xf6\xec\xe9\xb2\xdc\x96\xbd\x42\x0f\x3d\xaf\xa6\x14\xf3\x3a\xe6\x3d\x38\x30\x47\x10\xc4\xd5\x91\xa1\x29\x29\xec\x91\x65\x71\x1c\x63\xc9\x63\x8c\x90\xc5\x53\x97\x4b\x8f\xcf\xdd\xe9\xf1\x91\x3c\x59\xe9\x38\xf9\x2a\x72\xc4\x85\xe7\x8c\xc7\xa2\x12\xb1\x53\xf7\xaa\x43\xc6\xa3\x0d\xc4\x04\xac\x2e\x56\x81\x4e\x44\xd9\xd6\x1f\x5b\xed\x0f\x70\x1f\x33\xcd\xf8\xda\xed\x13\xeb\x2d\x47\x85\x65\x07\x5c\x98\x35\xf2\x01\x51\x7e\x98\x3d\x07\x5c\x15\x27\x28\xb0\xad\x5c\xe4\x15\xcf\x72\x98\x1c\x00\x44\x6e\x23\xee\x16\x2c\x9c\x74\xff\x69\xa2\x80\xcb\x27\x2f\x2a\x58\xd7\xde\xc6\x9d\xb2\x41\xab\x67\x71\x7e\xf5\xc6\x2d\xaa\x58\x21\x23\x85\x5d\x82\x4d\xd8\xa3\xe2\x1f\x6c\xa3\xbb\x6e\xb2\xd5\x58\x8d\x86\xc5\x89\xbb\x85\x36\x21\x7f\x1b\x3b\x35\xe9\x10\x76\xa6\xcc\xc7\x71\x57\x2e\x5b\x01\x58\x1b\xb4\x64\x2c\xa8\xc5\xae\x7e\x27\xde\xa6\x2b\xb9\x30\xb3\xbb\x43\x10\x7d\xa2\xb3\xc5\x29\x1d\xb0\x62\x0f\xc2\xcb\xc8\xc9\x43\x7b\xa4\xf8\x22\xf0\xaf\x7d\x64\x9e\xb9\xc1\xc4\x3e\xe7\x53\x99\xf3\xd0\xb3\x93\x99\x38\xea\xd9\x62\x73\x6c\xf5\x8e\xf1\x94\x7d\xfe\x12\x93\x6d\x57\x25\x7d\x3b\xba\xc8\xf3\x5e\x65\xcb\xfb\x6a\xb6\xda\xb8\xed\xb1\xea\xd1\xf2\x16\x28\x03\xa2\xfd\x2c\x30\x49\xa8\x5f\xc4\x15\x91\xb1\x0b\xd2\x89\xbd\xea\xba\x7c\x75\xe0\x4d\x8f\x8b\x8b\x64\x24\x37\x15\x32\x93\x5b\x54\x70\x2f\xb0\x30\x41\xf6\x45\x37\x9b\xa8\xa4\xa2\xcb\x2c\x18\x00\x73\x28\x6e\xab\xdc\x02\x8b\xc1\x1d\x58\x24\x47\x97\x74\x23\x96\xc5\x6c\xc8\xa0\x32\x4f\x1e\xf4\x2e\x2d\xcf\x15\x1c\xfb\xec\xfa\x08\x9c\x04\x94\xdc\x3a\x22\x40\xc0\xa2\xaa\x15\x5d\x33\xe7\xf7\xa7\xc7\xa7\x04\x6f\x42\xb0\x01\xdc\xc0\x3c\x6d\xd4\xf4\x74\xcb\x58\x00\x7d\xa1\xe5\xa3\x6b\xf5\xb2\xb5\x0f\x34\x2e\xaf\xa2\xd0\xa1\x20\x31\x80\xbe\x66\x78\x41\x26\x1d\x11\x41\x5a\x72\xc9\x50\x8e\xd6\x7b\x61\x5e\x4c\x40\x99\x46\x5f\x25\xd6\x9c\x69\x7d\xba\xc2\x64\x64\x3b\xd5\x6f\xa5\x01\x73\x5e\xbc\x6e\x61\xfd\xc4\xc5\xf9\xbb\x77\xef\x6f\x93\x5a\x22\x10\x3f\xd3\x02\xaf\xc5\xee\x4c\x93\x76\xb1\x53\x53\xdc\xb5\x25\x44\x72\xab\xa2\x12\xc7\xe0\x72\xd9\x2f\xb3\x7c\x5e\x5b\xd0\xda\xd8\xd0\x16\x96\x5e\x8b\xf6\xb7\x47\x57\xc8\xc7\x30\xc4\x9f\x2a\x36\x04\x78\x1f\xfe\x57\xb9\x2d\x45\x66\xde\x02\xf4\x36\x59\xc1\x24\x7f\x7b\xb1\xb6\xb6\x9d\xd8\x56\x80\x58\x3a\x80\x4b\x59\x63\xb7\x3b\x0b\x9c\xcf\x4a\x80\x29\xec\x69\xd8\x5d\xb6\x07\x2a\x09\x22\x8d\xd1\x7f\x1b\x40\x21\x05\x96\xab\x8b\xea\x5e\x3b\xbd\xd4\x1d\x8a\xd0\x7f\x8a\x1f\x98\x1e\x7e\x8d\x3c\xae\xb3\xca\xb5\x13\xcf\xdc\x4e\x1a\xd1\x74\xd2\xb9\xb3\x47\x83\x16\x81\x6f\xf6\xea\xb3\x7f\xf4\xfc\xaa\x07\x63\xc9\x67\x4f\x03\xc4\xf3\x09\xba\x7a\x65\xfb\x06\x2f\x5d\xa3\x79\x38\x10\x2b\x4a\x0f\xdb\xd4\x00\x17\x93\x6d\x55\x1c\xf8\x7f\xa2\xce\x95\xed\xef\x52\x3f\xbe\xa7\x7b\x06\xbb\x42\x82\x7d\x2f\xbb\xa1\xbc\x74\x0a\xb5\x87\x32\xee\x87\x0a\xdc\xc9\x53\x59\xf0\x1c\x80\xd0\x42\x21\x43\x9b\xf5\x1f\x61\xd0\xfc\xc3\x21\x4a\x5e\xab\x6e\x17\xc4\xc3\xef\x2a\x68\x09\x5d\xce\x8f\x63\xd2\x40\x1e\xfb\x5a\x87\x3c\x70\xb8\x86\xd4\x99\xd9\xc8\x22\x57\xc8\x8e\x25\xb3\x6c\x36\x03\x39\x85\x4e\xe4\x17\xda\x07\xb2\xae\x8a\xc7\x96\x6b\x7a\x0d\xfe\xe2\x98\xde\x49\xb8\xe7\x8e\x41\x89\x20\x71\xad\xbd\x5e\x1b\xdb\x67\xc3\x70\x03\xf6\x43\x62\x11\xb3\x04\x87\x39\x72\x55\xa7\x1b\x65\x1c\x50\x3b\xfc\xc5\x29\x93\xe2\x52\x30\x2c\xdc\x41\x86\x03\x83\xb6\x42\xf8\x41\xdf\x33\xa5\x08\x90\xab\xac\xe4\xe0\x6d\xad\x8d\xf6\xe0\x60\xa4\x83\xd4\x8d\xba\xcf\x72\xbd\xe2\x09\xc5\x96\x4f\xe8\x15\x8d\xd4\x9f\xf0\x90\x8f\x10\x4d\x0f\x39\x07\x65\x13\x44\xbe\xc9\x64\xee\x00\xe3\x07\x09\x02\xed\x46\x29\xa2\x51\xbd\xeb\x07\x83\x57\xee\x83\x51\x45\x62\x12\x8c\x90\x0f\x30\x07\x8a\x9d\xf1\xc4\xf7\xb2\xb9\x0b\xc4\xa5\x57\x2b\xd5\x2b\xd3\x80\x17\x83\xf4\x99\x22\x03\x2d\x2b\xac\xa1\x83\x20\x14\x63\xe4\x3a\x88\xac\xf7\xe0\x4c\x83\x4e\x59\xe2\x0d\xa7\x7c\xbf\xb1\x43\xff\x03\x03\xb2\xaa\x3c\xc2\xd1\x85\xcf\x28\x9f\xdb\x49\x0a\x05\x32\x41\x14\x46\x85\x43\x41\xf6\xe8\xae\x9d\xe9\x38\x1c\x3b\xbd\x46\x17\x43\xc2\x07\xaa\x3b\x77\x30\x4d\x52\xde\xdd\xc0\x57\xb5\x97\xbe\xd9\xa0\x29\xc6\x9f\xe9\x27\x58\x62\xac\xe5\xef\x98\x7a\x13\x3f\x60\x0b\x38\xda\x14\x2e\x2d\x60\x5a\xb9\x59\xa0\x86\x94\x58\xd8\xb4\x1c\x16\xe2\xad\xfc\xac\xb7\xc3\x56\xfc\xfb\x8f\x3f\x65\x06\x9b\xe4\x1d\xb0\x98\xe2\x24\xb7\x01\x30\x89\x20\x17\xd5\x54\x8c\x2c\x3b\x7a\x25\x9b\x0d\xf9\xb2\xd8\x55\x8d\x21\x62\x80\x95\xbc\x8d\x16\x6a\x81\xa4\x01\x9c\x6a\xc5\x96\xda\x10\x01\xa1\x68\x68\xe9\x49\x69\x73\xb2\x98\xb7\x1c\x19\x1b\x40\x7e\xbb\x01\xc9\x18\xc3\xc3\x76\x24\x46\xa9\xb6\x0e\xa2\x12\xd3\xbd\xc2\x9c\xba\xa2\x88\x5c\x1c\xd2\x28\x86\xe4\xc2\x98\x46\x79\xee\xf1\x23\x24\x3a\x46\x97\x54\x1d\x9c\x23\x97\xdd\xa0\x1e\x3d\xc7\x85\xc4\x24\x9d\xb1\xd2\x16\x7d\x4b\x41\xc1\xb2\x3d\x4a\x10\x0b\xa4\xdb\x69\xbd\x5f\x40\x58\x90\xb4\xdc\x67\xa0\x8a\x53\x9f\xc4\x2d\x99\x29\x1a\x9f\xbe\x7a\x73\x0b\x46\xb9\x0f\x14\xaf\xf1\x6e\xa6\x66\xdf\xb6\xbf\x60\xa0\x2b\x88\xe0\x91\x5d\xc7\x72\x34\x33\x99\x0f\xc6\xf2\x80\x51\x19\x38\x3a\xcb\x4e\x86\xa5\xc9\x75\x05\x3e\x43\x3b\x87\x42\x87\xd1\x30\x9f\x05\x1f\x9d\xb0\x63\x1b\x08\x59\xb9\xb0\x18\x5b\xf2\x85\x6d\x64\xc7\x8e\xb0\x6f\x30\x91\x0a\x86\x44\xb8\x78\x2a\x8d\xb7\xd8\x6f\x47\xe6\xc1\x7c\x18\x6d\xb4\xd3\x4b\xab\x21\x37\xd1\x23\xaa\x40\x67\x1c\x85\x6d\xb3\xab\x0a\x8f\x29\x4e\xa7\x43\x2b\x7c\x55\x41\x02\xac\x3b\x6d\xee\x80\xb9\xdb\x1d\x52\x42\xc6\xcb\x5e\xd8\x9d\x56\xed\x77\x59\x1e\x2b\x57\xae\x60\xf6\xff\xdf\xff\xfb\xff\x79\x72\x11\xda\x7d\xe1\xfb\xee\xc9\x05\x4b\x96\x01\x1e\xc7\x11\x11\x88\xf7\xff\x59\x0d\x66\x4f\xc6\xb3\x1f\xf0\x57\xc5\xdf\x40\xa5\xaa\xc1\x38\xb2\xc4\x80\x1f\x15\x7d\x05\x62\x55\x51\xb8\xb9\x40\xa5\xaa\xca\xc4\x43\xf6\x9d\x2d\xce\xd9\xbf\x0d\xba\xb9\xab\xf1\x42\xed\x4c\xfc\x57\xf8\x12\x10\xc2\x8c\x58\x8d\x70\x6a\xc5\x23\x08\x16\xed\xe8\x1c\xcb\x5d\x59\x81\x6e\x91\x77\x7d\x3a\xb2\x64\xc9\x3a\x1d\xf8\xd0\x60\xc0\x4e\x1b\x55\xed\x06\xb7\x41\x19\x8e\x6b\xbb\x1a\xdc\x06\x02\xb4\x7c\xc6\x00\x40\x39\x06\x98\x9a\x09\x8e\xa5\xec\x55\xbd\x8d\x2e\x0f\xe3\xdd\x1d\x17\x0e\x79\xd7\xa5\x2b\xb9\x83\xf2\x8b\xaa\xc2\x23\x18\x7d\x1e\x5c\x15\x4f\x55\x3a\x4d\x7d\xaf\x00\x69\xaf\x54\x80\xf4\xaa\x67\x3b\x43\x69\xda\xda\xcb\x35\x96\x0c\xac\x0f\x15\xb5\xbd\xf0\x72\x4d\x88\x00\xf3\x2f\xf4\xb3\xf2\x12\xac\xd2\x6e\xe5\x7a\x1a\xfb\x6e\x37\x74\xdd\x34\x42\x5e\x27\x97\x0a\x92\x2f\xe1\x47\xb5\x0d\x8d\xf4\xd6\x28\x3c\x3d\xf9\xa3\x6a\xc0\x93\xc3\x45\x9f\x0e\x57\xad\x35\xb3\x08\x65\x1b\x28\xb8\x01\xea\x0e\xf1\x27\x0c\x41\xdd\xcb\x7d\x48\x93\x7b\xfc\xdc\x68\x47\x91\x14\x5f\xe3\x2f\x4c\xc6\x7b\x1b\x00\x85\xcb\x9a\x08\x0f\x12\x08\xed\x91\x2b\xfe\x8d\x59\xde\x06\x9e\xae\x4f\xb3\xc3\x56\x3d\xde\x5a\x81\x19\xc8\x54\xbb\x8d\xdd\x9b\xea\x5e\xb7\xca\xc2\x99\x41\xf1\x16\x30\x96\xe4\xb2\xb7\x7b\xc7\x4c\x67\x18\x6d\xfc\x0c\xd3\x6b\x1e\xa7\xd8\x0c\xaf\x6f\xdf\x5e\xfe\xbb\x00\x1c\x61\x1e\x16\x55\x9c\x89\x85\xbd\x57\x3d\x85\x04\x79\x4f\x3f\x53\x26\xf9\xb0\x66\x43\x06\x16\x9b\x2a\x8d\x5c\x04\x75\x5e\x76\x05\xe4\x4d\x48\x98\x01\xc4\x78\x85\xe7\x5d\x37\x93\x47\xf6\x48\xf5\xf2\x10\x2d\xaa\x5a\x01\xd7\x3b\x81\x04\xc3\x15\x4f\x02\x66\x93\x9b\x31\xeb\x47\x32\xc4\x88\x03\xac\x54\x1b\x96\xfe\x02\xa2\x4f\xa2\xa1\xdd\x3b\xb5\x47\xf6\x96\xb2\xd0\xfc\xaa\x8e\x66\x78\xe0\xcc\x94\x03\x84\x7f\x9c\xfd\x6b\xab\x7d\x91\xb9\xeb\x15\xac\x03\x6c\x96\x43\x12\x07\x23\x8b\x0d\x72\x0c\x88\xa2\x41\x0d\xc8\x8c\x35\x75\x38\x52\x6b\xde\x70\x17\x28\x37\x84\x4c\x61\xac\x79\x02\xe7\x2d\x64\x16\x8d\x00\x52\x94\xb7\xc4\xf3\x12\x62\xb0\xed\xe0\x7c\xbd\x54\xb5\x35\xb5\x4c\x63\xf3\x17\x36\x1f\x5e\x82\x5f\x9a\xe4\xfd\x19\x0e\x3e\x79\x87\xae\x0c\xbd\x0d\x82\xaa\xe0\x7e\x70\x80\xb8\x1c\x39\x48\x3e\x18\xc4\x11\xfa\x91\x63\x06\x5a\x3b\x66\xf0\x29\xe0\x63\x80\x65\x1b\xfb\x1c\x1f\x2b\xce\xb2\x5e\xe5\x7a\xbb\x49\xbf\x02\xd5\xaa\x21\xde\x17\xa9\x7f\xf3\x06\x00\x49\xc3\x60\x60\x49\x45\xf3\x4d\xbd\x43\xd3\x55\x68\x52\x3a\xca\xc0\xfd\xab\x34\x0b\x98\xbf\x26\xe7\x85\x16\x98\x3d\xf0\xfe\xe6\xe5\x46\x2e\x11\x3d\x54\xb6\x58\x2c\xf2\xfa\xa2\x3a\x01\xb4\x76\x81\x5b\x4f\x87\xf8\x29\x06\xe8\x02\x6e\x4e\x7b\xbc\x1b\x85\xd3\xf3\xe9\x22\xc0\xb2\xea\x32\x2f\xb0\xb6\xac\x97\x5a\xaa\xb5\xc6\x50\x9e\x20\x54\x2b\x0a\x22\x92\x90\x2c\x65\x73\xe7\x76\x12\x22\x3a\x62\x7b\xe0\x7c\xb6\x7d\xb6\x5e\x1b\xd5\xd5\x60\x93\x2d\xce\x04\x7e\xc6\x4c\xa0\xac\xd9\xa2\x27\xf7\xb9\xd1\x9a\x97\x6d\x5b\xfb\xed\x8e\xad\x9c\x1e\x9f\xb8\xa7\xcf\xb8\xdb\xcf\x1f\x67\x50\x09\xe0\x71\xda\x96\x2d\x86\x97\x25\x13\xcb\x3c\x6f\x6c\xa1\x9c\xe7\x51\xd3\xe8\x10\x8c\x41\x8d\x5b\x70\x5c\xe7\xd8\x6c\x42\x7d\xf6\xca\xb4\xaa\x15\x99\x8c\x91\xcd\x0d\x21\xc1\xa1\xed\x0e\xb5\xb7\xb8\x4a\x13\xb5\xc1\xfe\x32\x00\x0f\x3b\xa9\xca\x98\x6d\x46\xf0\x27\xa1\xbb\x8f\xc0\x57\x3d\xaa\xce\x20\x23\x55\x97\x18\x88\x54\x03\xb3\x0e\xac\x7e\x33\xd1\xfd\x31\xe1\x59\x41\xb0\x36\xf0\x86\x81\xf6\x80\xbd\x00\x86\xec\x14\xe1\x14\x65\xb7\xfd\x45\x4e\x07\xd9\x39\x00\x8c\xa1\x89\x25\x2a\x5d\x2b\xf3\x91\x18\x19\xec\x8e\x17\x2f\x91\xb5\xa5\xc2\x90\x9b\xb4\x63\x40\x98\x99\x44\xd7\xa4\xb2\xcc\x34\xa0\x42\x3a\xa9\xad\x91\x64\xe3\x66\x2b\xb5\xd5\x31\x3c\x6c\xae\x37\xe1\xb5\xc0\xcb\xbf\xd6\xae\x96\x91\x3a\x1a\xcf\xaa\x53\x92\x84\x77\x92\xec\x47\x31\xa4\x8c\xc4\x93\x77\xc4\x38\x3f\x54\x11\xd0\x07\xa8\xc3\x1d\xb6\x74\xba\xc7\x38\xab\x2c\xb0\x49\xc1\x99\x7c\x47\x44\x43\x00\xae\xbe\x9a\x23\x34\x80\x11\xb5\x5a\x0a\x42\x3d\x19\x55\xa8\x26\xb5\x2a\x55\x54\xc8\x99\x39\x6b\xf8\xf5\x5d\x20\x6a\x5c\x1b\x5b\xa3\x22\x23\xbb\x38\x28\xba\xc3\xa6\x1b\x4c\xbe\x47\x9a\x8f\xa8\x63\x38\x56\x11\x19\xd6\xd6\xfb\x4d\x56\x2d\x93\xd4\x89\x2d\x18\x41\x0b\xa7\x4d\xa3\x52\xec\x59\xd5\x72\xfd\x8b\x87\x55\x7a\x29\x2e\x01\xd8\x7d\xd0\x0d\xd4\x3e\xcc\x02\x1c\x0d\x45\x25\xb6\x8f\xdb\x0a\xc9\x21\xef\x9f\xb5\xd4\x26\x6d\x2f\x6f\xc1\x25\x09\x4f\x15\xbf\xc9\x4e\x90\xb2\xa7\x93\xa5\x7c\x8e\xc3\x08\x0a\xae\x34\x65\x5f\xbf\xa8\x8d\x65\xda\x1a\x48\x4f\xe0\x05\x71\x76\x82\xe4\x8a\xc6\x34\xd9\x49\x16\xb2\x53\x7b\x20\xb2\xa4\xad\xc9\x30\x9c\xb6\xc3\x4b\x14\x03\xe3\x85\xd2\x53\x32\xaa\x49\x93\x0d\x4d\x45\x97\xd4\x20\x19\x8e\xb0\xd1\xb1\x38\xc1\x46\x84\xf8\x4b\x68\xc2\x39\xe0\x86\x65\xab\x7b\x22\xc5\xf8\x41\xc2\x6a\x22\x36\xe4\xcb\x06\xcd\x8f\x4c\x99\x1b\xb5\x3f\xf2\x67\x8e\x6d\x5d\x8f\xd4\x9a\xe3\x80\x4e\xe8\xbe\x64\xf0\x22\x82\x8a\x85\x06\x26\xfc\x89\xe3\x27\x42\xcf\x8c\x7f\x09\x97\x0b\x19\x9c\x33\x8a\x77\x44\x2b\x2b\xe5\xaf\x34\x48\x86\x2f\xb5\x69\x63\x9a\x04\x3d\x4e\xf4\x8f\x8f\xe9\x49\x92\x23\x37\xf6\x98\x43\x67\xe3\x0b\xd0\x92\x52\x1a\x87\xb9\x7a\x1f\xfe\xc7\x54\xa3\xf6\xa4\x28\xdf\xab\x3e\x86\x81\xc2\xa8\xf6\x81\xec\x83\xcc\x95\x25\x2f\xc6\x72\x56\x96\x15\x48\x46\x48\x44\x21\x1a\xf2\xf3\xec\xa6\x53\xb2\xaf\x63\xf9\x8b\xf0\x29\xba\x09\x96\x28\xb8\xe5\x72\xdb\xa8\x9a\x1c\xe6\x9d\x9d\x07\xc3\xea\x72\x48\xac\x71\x3b\x07\x6c\x77\xca\x14\xb0\xef\x77\xca\xe4\x62\x63\x81\xd8\x3a\xd5\x8e\x30\xc3\x2d\xce\x3c\xbc\x74\x10\x0f\x11\xee\xb1\xe8\xe7\xb4\x9d\x19\x10\x36\x53\xce\x80\x1a\x9b\xc3\xbd\xb3\x13\x20\xda\xb7\x91\x3d\x18\xcf\x5e\x9a\x1f\xb5\x9f\x4c\x10\x66\xd6\x60\x59\x13\x83\xa2\x01\x50\x3c\xf5\x8b\x6a\x22\x32\xaa\xac\xc0\x87\xb8\xe2\x2d\xc3\x22\xde\xa8\x86\xdd\x25\x03\x97\xd9\xaa\x15\xf8\x07\x3a\x05\x3a\xd5\x72\x21\x8c\x8b\x6b\xb3\xb2\x39\x8d\x03\x6f\x5b\x73\xa0\x52\xa0\x9f\x88\xc6\x8c\x18\x9a\x87\x74\x28\x8f\x62\x4f\x1f\x71\xa4\x1e\xb9\xb4\xe8\xaa\x49\xa3\x85\xfe\x9c\x18\xe6\x7c\xdc\x30\x8a\xea\x73\xa4\x55\x33\x17\x24\x30\x24\x4e\xf9\x63\x45\x06\x47\x7e\x56\x48\xdc\xbf\x08\xcf\x24\x36\x17\x42\x13\xb9\x03\x5a\x85\x38\xe2\xbb\x15\x91\xda\x62\x5c\x3e\x44\x0b\xeb\xdb\xcb\xa5\x38\x13\x27\x2d\x2c\xee\x38\x97\x61\xe9\xa6\x2c\x5c\xc9\x9c\x49\x7a\x1c\x9e\xe8\x62\x86\xf3\xbc\xc0\x2d\xe0\x4d\x0d\xae\xcb\x78\x6b\xd3\xcd\x94\x78\x70\x83\x8f\x61\x8e\x62\x9e\x6c\x63\x2a\xf9\xc0\x6e\x4b\x10\x6b\x6d\xd4\x71\xd4\x47\xca\x91\xe2\x1c\xd4\xe5\xd3\x9c\x85\xec\xba\x3a\xaa\xaa\xce\xbb\x4e\xe0\xc7\x2c\xa8\xa3\x87\x3f\xbc\x0d\xc2\x60\x6a\x6a\x4b\xf6\x3d\x73\x85\x70\xb5\xb6\xf5\xf2\x40\x65\x70\xdb\x41\x38\xde\x23\x45\xb6\xca\x04\xc9\x25\xb0\x73\x58\xe4\x6d\x4c\x98\x29\xe2\x28\x24\xa5\xed\xfd\x4c\xce\x02\xd6\xa3\xa7\xa3\xc2\xcd\x82\x04\xa2\x01\x20\xef\xe1\xc7\x1c\x08\x9a\x7c\x47\xe9\xed\x9a\x22\x83\xb1\xd3\xd9\x6c\xc5\x4a\xba\x54\xe2\x12\x7c\xb0\xfb\xaf\x28\xb7\xb5\xce\x87\x63\x0e\x2d\xfc\xdf\x5a\x88\xc2\x01\x9f\x0f\xd4\x93\x0a\x60\x45\x93\x12\x61\x27\xb1\x32\x0a\x7f\x27\x5d\x54\x66\x7c\x0c\x76\xc7\x64\x3e\x2c\x9f\x4f\x0a\xd7\x2b\x79\xa7\x66\x30\xa0\x36\x8b\xa0\x41\x79\x64\x87\xa8\x35\xb2\x43\x76\xae\x7c\xc6\xa9\xf8\xec\xcb\x2d\x1e\x83\x8a\x8f\x76\x78\x1b\xb3\xca\x1d\x6e\x86\x6d\x4d\x7d\x74\x48\x01\xf8\x2b\x16\xe7\x11\xa8\x65\xa8\xf2\xb7\xf8\x9d\xba\xfb\x6f\x81\xc3\x3e\x81\x9e\xfe\xc6\xc5\xd8\xc9\x11\xa1\xb3\x30\xde\xe7\xe4\xf4\x12\xbd\x5f\xd8\xfa\xa2\xcd\x94\x3b\x54\xec\x8f\xb1\x99\x36\x73\xd6\xc0\x53\x00\xee\xbf\x4a\x0d\x75\x41\xd2\xe0\x83\xfb\x5b\x66\x71\xa3\x22\x08\x4d\x3a\x04\x49\xc9\xc1\x7b\x05\xa3\xca\x70\xd7\xf0\x39\xca\x7c\x08\x59\x5f\x14\xa0\x63\x33\x2d\x31\x02\x1d\x4d\x14\x0d\x33\xb2\x14\xcf\xa4\xd0\x2d\x59\xb3\x3f\x8a\xc3\x0d\x5f\xcf\x61\xb1\x14\x83\x8e\xf5\x45\x1c\xfc\xf9\x8d\x58\x88\xcb\xed\xd5\x2a\xe2\xa1\x4b\xee\x16\x67\x07\xbb\x4a\x51\x30\x48\x36\xfa\xb6\x2a\x76\x96\xde\x69\xba\x82\x1f\xa9\x66\x0e\x74\x0a\xfc\xee\x45\xf6\x19\x97\x79\x61\x91\x43\x89\x1c\x8a\x9a\x03\x2e\x91\xde\xa2\x70\x65\xa2\xd0\x9f\x2c\xfe\xfd\xd5\xb2\x80\xd5\x58\x73\xaf\x7a\x47\xee\x0b\x84\x91\x14\x98\xbf\xb6\x3a\x4d\xcf\x48\xd7\xc1\x75\xa3\x11\xd9\x8d\xbc\x57\xa3\x43\x9c\x59\x9e\xc8\x42\x95\xf9\x8d\xed\x6c\x62\xb1\xe0\x6b\x0c\x80\x56\x52\x27\xed\x2c\x77\x94\x96\x26\xed\x5c\x88\x7b\x5e\x9e\x3a\x08\x39\xd3\x19\xcc\x18\x69\xca\xca\xcc\x18\x7e\x0c\x1b\x08\x41\xc8\xd8\x80\x78\x8a\x85\x1c\xd8\x01\x34\x9a\x69\xcd\x82\xcd\x7b\x6c\x22\x8f\x91\x9b\x5d\x6a\x10\x82\x93\x97\xa6\x36\x85\x25\x26\xe1\x3e\x6e\x48\x37\x5f\x79\xd2\xdd\x62\x5b\xbf\xa0\xb7\xcd\xc8\xe4\x4e\xf6\x5e\x37\x7a\x27\x23\xa9\xbc\xca\x52\x18\x52\x7a\x2f\x9b\x4d\xd8\xd6\x39\xd3\xf5\x1b\xea\x1f\x48\xed\x10\xd6\x23\xda\xb2\x07\x41\xcb\xcb\xe5\x6f\x33\xa5\x63\xa8\xec\xbc\x74\x4c\x0c\x28\x7e\xab\xf0\x2e\x2c\x13\xd7\xf2\x3b\x31\xca\x6c\xec\x76\x27\x7b\x55\x6a\x63\x43\x4a\x54\xc7\xce\xc2\xf1\x2c\x31\xb0\xdf\x5b\x11\x2f\x72\xe0\x01\xb3\x70\x82\x95\x7a\x44\x50\x38\x46\x15\x48\x89\x16\x22\x73\x9f\x41\x50\x86\x71\x85\x54\xc3\x99\xa0\x5f\x94\x5f\x5c\x22\x8e\x2f\x0f\xb9\xe7\xb6\xee\x95\x1b\x3a\x98\x11\xf0\x28\xc3\x8f\x95\x1d\x4c\xbb\x88\x40\xf0\x8a\x54\xe0\xb6\x52\x5d\xd9\x21\x82\x6f\x4c\x91\x7f\x6b\xc8\x5d\xaa\x46\x06\x46\x1d\xda\x1c\xfa\xba\x51\xb2\xcd\x7a\xdf\x2b\x78\xca\x61\x8c\x7f\xab\xfa\x75\xec\xe8\xd7\xe0\x2f\xc6\x74\x83\x51\xb9\xd1\xc3\xb6\x3b\x88\x56\xaf\x80\xea\x7a\x41\xea\x06\xae\x6e\x23\x5d\x9d\xbf\x16\x16\x16\x48\xac\x8d\x95\x48\xa3\x89\x59\x2a\xbf\x87\xd0\x57\xe0\x4c\x11\xea\x45\x55\x99\xfb\x79\xe4\x31\xf5\x14\xea\x78\x1a\x38\x97\x96\x08\xf7\xbf\xc1\x07\x92\x6f\x9a\xb9\x91\x98\x39\xb3\xea\x80\xf8\xf1\x1a\xda\xc3\x96\xf1\x56\xc0\x08\x01\xb7\xd3\xb2\xe6\x03\x8f\x11\x76\xb7\xfa\x29\xba\x5b\x09\x6d\xbc\x9d\x71\xc3\x22\xfc\x80\x89\x98\x1a\xae\x06\xd3\xfe\x35\xf4\xe2\xe4\xe3\xff\xf8\xc4\x5b\xc2\xcb\x65\x9d\x9f\x0e\x68\xb1\x1a\x3f\x0b\xa8\xb1\xc2\x27\xe5\x15\xd7\xe6\xac\x63\xa4\x7c\xe2\x21\xbc\xc5\xc5\x93\x6c\xb8\x30\x83\x2c\xd4\xf3\x99\xf4\x56\xec\x54\x1f\xa8\x22\x8d\x66\xb4\xd9\x5d\x14\x43\x03\xdc\x7e\x9f\x6a\x0a\xab\x26\xe6\xdc\x4e\xd0\x46\x32\x48\x30\x25\x15\x44\x14\xad\xf4\xb2\x5e\xf6\x6c\x9e\x2f\xbd\x8c\x36\x99\xf3\xb8\x08\xb6\x1d\x52\x50\x26\xb2\xf5\x82\xfb\xc0\x8c\xb8\x73\xdb\xb5\xab\xc1\x23\x1d\x55\xc1\xb7\xe4\x66\xde\xe9\xc6\x8b\x98\xae\x1d\x45\x45\xc2\x97\x54\xd6\xf8\x2e\x4d\x7c\x7f\x6e\xd5\x2b\xb7\x81\x57\x23\x02\xc0\x4a\xed\xc5\xd6\x02\x43\x1b\x29\x92\x34\x35\x98\x20\xe2\x7e\xcd\xad\x88\x8a\x6e\x90\x49\x11\x0d\x48\xf1\x16\x44\x86\x0a\x2c\xb6\xbe\x0e\x1b\x7a\x40\xcc\xe1\x4b\x14\x21\x2a\x71\xb9\xdf\xee\x78\x5d\xe3\x07\xe4\x70\x3d\x6c\xa5\x41\xe3\x62\x6d\x84\xed\x5b\xd5\x53\x20\x5e\x70\xee\xf6\x9b\x39\xcc\xc8\x97\x22\x52\x62\xe7\xb2\x1b\x26\x44\x8b\xe9\x71\xd9\x06\x2a\xc7\x97\xbd\x01\x00\x27\xec\x1a\xd2\xf9\x62\x97\xd2\x13\xb9\x87\x4b\xb3\xcc\xe8\x2f\xea\x4f\x73\x83\x9b\x6c\x11\x8f\xc9\x1c\x2c\xe8\x39\x6a\x03\x9b\x68\x30\x44\x14\xa0\x54\x54\xb6\xff\x46\x7a\xa1\xc7\x3e\x6e\x1c\xda\x5c\xc9\xda\xbd\x1c\xfe\x9c\x8c\x1a\xe4\xaa\x8a\xa9\xfc\xfe\xdf\x4e\xda\x1f\xe8\xa9\x2d\xb9\x55\x53\x9b\xd5\x90\x88\xa3\x96\xf3\x2f\xe1\x20\xd1\x0e\x62\x5f\xc3\x1b\x0f\xb6\xe7\x11\x5a\x30\x61\x25\xa1\x29\x33\x58\x05\xfe\xec\x97\xfc\xc8\x2b\x60\x20\x88\x99\x51\xfb\x8c\x00\xd1\x3d\x59\xba\x5b\x62\xc6\x86\x3b\xa9\x71\x87\x62\xb8\x08\x2c\x85\xce\x09\xd0\x64\xd3\xa8\x45\x95\x59\xcf\x64\xcc\x45\x52\xd6\x64\xd9\x33\x9a\xa5\x2c\x77\x5e\xbb\x34\x06\x68\x93\x0a\xf5\xc4\x15\x75\xdb\xba\x1d\x54\x4d\xa2\xff\x3b\x0b\xa4\x24\x7c\x8d\x5b\xc0\x22\xef\x18\x73\x94\xff\xca\x0e\xd5\x6e\x58\x86\x33\x1d\x43\x56\xe3\x42\xcf\x0c\x86\xbc\x65\x4f\x12\xba\x9b\x27\xee\xac\x40\x3f\x3a\x03\x67\x07\x27\xfa\x68\x86\xff\x79\xc6\x8c\x41\x77\x9e\x9b\xfa\xfc\x62\x50\xa0\xc6\x17\xdf\xf3\xe5\xf4\x0f\x65\x27\x15\x86\x22\x0a\xff\xf3\x8c\xf8\x42\x0a\xa1\xaa\x71\x1d\x12\x46\x40\x4e\x29\xe9\x01\x8d\xd3\x68\x05\xf2\xf8\x70\x38\x1c\x9e\x6c\xb7\x4f\xda\xf6\xf1\x4c\xaf\x33\x26\x3a\x76\x7b\x64\x05\x41\xda\xaa\xd1\x39\x92\x61\xca\x64\x92\xf9\xb1\x03\x93\x96\x7c\x9e\x3e\x80\x82\x76\xa9\x3c\xf8\x1d\x66\x64\x04\x76\x52\x9a\x3d\x17\x4e\x48\xbb\xeb\x54\xf2\x3a\x0b\x24\x0f\xa3\x49\xe4\x7d\x19\xc9\x73\x59\xd6\x28\xf2\xf2\x83\x0d\x8c\x56\x8d\xc4\x5f\xdb\x55\x6a\xcc\x68\x50\xf0\x71\xc5\xa3\x43\x92\xc9\x51\x69\x58\xa3\x2c\x35\x03\x38\x2f\x49\xa5\xda\xff\x3b\xa5\xa9\xb9\xea\xe7\x96\xc1\x17\xe4\xa9\x6a\xaf\xef\xb4\x38\x13\x7f\xd6\x77\x1a\x7e\x2f\x28\x56\x76\x16\x1b\xdb\x5b\xc8\xfe\xae\xc8\xe7\xbe\x86\x1c\xb0\x88\xdb\x90\x13\xb0\xc0\xf7\x02\xd1\xcb\x70\xe8\x5a\xd1\xe9\x3b\xe4\x37\x6c\x33\x80\xa2\xe5\x40\x31\xd1\xfe\x0a\x01\xca\xec\x5a\x81\x17\x78\x94\x61\xb4\xa7\x45\xb5\xc0\x0a\x69\x8d\x43\xcc\xc4\x9a\x9e\x86\xa6\x4d\xee\xe3\xd3\x51\x21\x1d\xc1\xf3\xc7\xa3\x21\x81\xe4\x16\x4a\x27\xa9\x25\xc1\x63\x88\xab\x1c\xeb\x3b\x7a\x5a\x0b\xf3\xd9\x74\xad\xb4\x54\x09\x3d\x47\xeb\xa5\x20\x50\x28\x21\x97\x76\x20\x03\x2f\x52\x8d\x26\x02\x41\xfd\x80\x37\x80\xa8\xa6\x9b\x20\x5c\xa4\x3a\xc0\xce\x9f\x2a\xa0\xab\x95\x13\x07\x37\xe9\xac\xe2\x81\x72\x27\x0e\xc1\x61\xa5\x87\x94\x9a\xae\x50\x48\x97\x50\xf4\x27\xe5\x8d\xfb\x83\x7e\x66\x05\x08\x1d\x6c\xf3\x50\xc6\x7a\xdd\xa8\xfa\x47\xe6\xa3\x72\x5f\x34\xb4\xd5\x58\x2b\x62\xdd\x83\x18\xcc\xf1\x19\x98\x0d\x0a\xfb\x5d\xf5\x1e\x5e\x92\x88\x33\x34\xbd\x84\x87\x85\x04\xa8\xbe\xe0\x0a\x19\x71\x38\x9a\x66\x97\x0d\x22\x07\x4b\xe3\x50\x27\x6c\x9e\xe8\xaa\xd9\x87\xa3\x39\x6d\x81\x93\xe5\xe2\xfb\x8f\x59\x56\xf6\x06\x10\xf1\x48\xd9\xf7\x11\xb0\x05\x7a\x64\x51\x88\xf4\x63\x40\x68\xa9\x40\x2b\xe9\x18\x10\xbc\xe0\x8c\x4e\x3d\xc7\x40\x06\xc3\x77\x64\x67\xe2\x03\xff\x4e\xc0\x73\xc6\xb4\x93\xcc\x7a\x89\x72\x78\xe6\x17\x85\xbe\xdb\x49\x22\x0e\x74\x1d\xa0\x72\xcf\x10\x9a\xe4\xdd\xe0\x36\xf0\x5a\x68\xd4\x00\x73\x6c\x57\xae\xe8\x4b\xde\x3f\x47\x00\x13\x07\xaf\xf8\x71\x43\xb6\x7d\x42\x5d\xa1\xd3\x2d\xc4\x9b\x80\xdb\xc5\xc0\xee\x3e\xe2\x7c\xd0\x7e\x40\x60\x03\x64\xab\x4e\x0b\xb6\x91\xa2\xa6\x19\x78\x2f\x92\x8d\x56\x52\x2b\x46\x06\x6d\xe3\x8c\x91\x45\x6b\x3d\x98\x68\xf2\x9b\xac\x5b\xa7\xed\xcd\xde\x62\xc3\x9b\x22\x70\x40\xd7\x3e\xbe\xb5\x66\x0d\xb9\x2f\x4c\x9a\x32\xae\x31\x11\xfb\x17\x65\x35\x2c\x03\x66\x6c\xf0\x83\xb1\x04\xbf\x4b\x35\xed\x7a\xeb\xe1\xce\x2d\xb7\x11\xbe\xe2\xc4\x99\xd5\x33\x2d\x10\x7d\x9f\x30\x27\x5b\x3d\xf0\x38\x9a\xed\x1b\x5c\x2c\xf0\x9e\xaf\x6c\x1a\xdd\x2a\xe3\x65\x97\xa4\x51\x08\x35\xba\xd1\x5e\x41\xb4\xb0\x6c\xfe\xf0\xa9\x91\xb4\x05\x30\x02\xa4\xcc\x6d\x8a\x21\xfe\x23\xdb\xcb\x2e\x16\x8b\xf1\x32\xaf\xa9\xbd\xb8\x91\x89\x33\xbf\x8a\x69\x0f\x80\x8f\x5c\xba\xb0\x72\x41\xf9\x82\xa9\x07\xec\x10\xc4\x1a\x9f\xbb\x59\x4c\x46\x6b\x64\x9c\xc8\x23\x05\x93\xb6\x1c\x6d\x86\x99\x22\x91\xcb\xa0\xb0\x12\x69\x4c\x49\x13\xb8\xeb\xd5\x3d\xec\xc0\x30\xe2\x3c\xae\x33\xcd\x60\xed\xfc\x48\xaa\xe3\xd7\x26\x0b\x19\x4b\x1b\xe7\x03\x21\x42\x3b\x20\x9e\xc1\xaf\xc3\x19\x83\x29\x60\x20\x17\xe8\x27\x8e\x58\xfe\x82\x73\x89\x39\xda\xfc\xd2\x5c\xb2\x1e\x27\xc6\x75\x5e\x52\x97\x31\x9a\x03\x45\x92\x31\xd6\x3c\x89\x4b\x92\x67\x02\x18\x0b\x14\xf2\x4b\xa4\xf1\xdd\x99\xd2\xf6\x72\xd2\xa7\xb8\x1a\xeb\xb4\x10\x03\xd5\x8e\x8b\x74\xbf\xb1\xa0\x9d\x00\x22\x58\xd6\xf1\x75\xd8\x72\xbb\x57\xe2\x95\x6d\x4f\x6e\xf5\xde\x66\xdb\xc1\xae\xf2\x71\x9a\x0c\x12\xbc\xf0\x16\x58\xc9\x54\x02\x5d\xc4\x0e\x3b\xe9\xe2\x8b\xfc\x23\x45\xc8\x46\x35\x77\x0f\xf6\xba\x78\x3f\xee\x9f\xed\x2c\x1a\x5a\x45\x5c\x64\x6e\x05\x9f\x0f\x15\xc3\x31\xc0\xe7\x03\x70\x7f\xe1\x2b\xd8\x14\xc1\x9b\xec\xa5\xb7\xff\x42\x8b\xb8\x06\x6a\x11\x7c\x4e\x68\x2f\x97\x9e\xd0\xde\xab\x19\x0a\x90\x2f\xb1\xaf\xa5\xbc\x1b\x6b\xef\xf0\x95\xc6\x25\xfc\x4c\x39\x6b\xed\x39\x33\x1c\x14\xaf\xcb\xdc\xa5\x74\xba\xa9\x33\xd6\xe6\x97\x90\x30\xc3\xe0\x90\xef\x58\x06\x49\x2e\xac\x53\x50\x77\x30\x0d\x3d\x55\x18\xc6\xe5\x60\x1a\xf1\xce\xee\xa7\xa8\x02\x98\x36\x35\xeb\xfc\x12\xca\x90\x13\xdf\xa4\xfc\xb2\x4e\x10\x79\x67\x49\xcf\x8f\x65\x4b\x91\x02\x33\xbf\xe7\x77\x49\x6f\xf4\xcc\x41\x9c\xf5\x88\x6c\xcf\xa7\x3d\x22\x2f\x94\x70\x22\x7e\x5d\xd8\xe4\xb9\x70\xc9\x63\xe3\xd9\x88\x5d\xb6\xf7\x41\x62\x6d\xf3\xa6\x9c\x53\xda\x4c\x63\x02\xb3\x3a\x22\x89\x20\x84\xe1\x33\xf1\x59\xff\x9c\x42\xcf\x64\x23\xbb\x9a\xc4\xb4\x20\x73\xf3\x43\xf4\x21\x29\x6b\x44\xd7\xd9\x7d\x4d\x31\xbf\xf3\x2a\xce\x21\x6e\x26\xc7\xf1\x8e\xbe\x16\x80\x10\x22\x49\x95\x21\x09\x76\x18\x04\xa0\x6c\x86\xfa\x3c\x6d\x06\xa7\x8d\xda\x51\x80\xd2\x63\xf4\xbf\x32\x28\xf0\xf8\x1f\xae\x2f\x1f\x00\xe7\x66\xff\xa9\x78\x93\x78\x19\x86\x1e\x29\x1f\x92\xf1\x0f\xd7\x97\xd8\x7a\xbf\x51\x87\xd2\xc4\xcc\xcb\x65\x36\x39\x28\x48\x8f\xc6\x1b\x2f\xcc\xc1\x69\x5c\xf5\x47\x46\x1c\x60\x6a\x82\x19\x0d\x7d\xa7\xd7\x1b\xbf\x57\x10\x56\xe7\x08\xae\x62\x3e\xca\x46\x1c\x99\x11\xba\x3a\xfe\xe6\x39\x99\x6b\x68\x9c\x9c\x23\xad\x8b\x85\x29\x67\x3c\x51\x60\xa8\x28\x6e\x09\xe7\xfc\x8c\x65\x45\xff\xbb\x27\x2d\x47\x1d\x15\x65\xc7\x1b\x27\x5e\x02\xcc\xb4\x3c\x0e\x8d\xf3\x07\xf4\x32\x98\x47\xf0\x4e\x6e\x21\x58\x6a\x80\xfa\xf9\x41\x1c\x0b\x7e\xb3\xe9\x4c\xbc\xc3\x5f\x0f\x83\x17\xef\x3c\x85\x79\x4f\x9f\x0f\xf5\x35\x8f\x64\xc3\xd1\x20\x73\x2b\x50\x14\xb5\xff\x1e\xce\xce\x7f\x88\xbf\x87\xa5\xf2\x0f\xf1\x77\x6d\x5a\xf5\xf9\x1f\x7c\x6b\x16\xdf\x1a\x0f\xe4\xee\x74\x12\xf2\x04\x55\xdf\x61\x10\xa0\x58\x7e\xfa\x0f\x5d\x37\xde\x2d\xa5\xd4\x44\xc1\xb3\x76\xf8\x86\x52\xaf\x97\x03\x9e\x7c\x7c\xa5\x39\x89\x0e\xb4\x9c\x4a\x0d\x78\xb7\x84\x41\x31\xe0\x40\x06\xdf\x26\x71\x26\xde\x60\x34\x0c\xbe\x1b\x67\x4e\x06\xb2\xc7\xe5\x71\x87\xd1\xd5\x07\x5f\xd7\xe1\xde\x1a\xe0\x94\x81\xbb\x8f\x78\xcb\xc9\x96\xdd\x49\xce\x94\xe0\x4e\xf1\x3b\x5a\x3e\xbe\x80\x2f\xf1\x7f\x5a\x93\x4b\xe2\x78\xc7\x03\x9e\x74\xde\xd6\x2e\x9c\x1d\x6c\xf0\x92\x09\xca\x70\x7b\x56\xf8\xa2\x87\xed\xec\x9d\xb0\xbd\x5e\xeb\xb0\xe2\xa0\x50\x36\xcc\x46\xed\xe9\xa9\x9e\x8d\x74\x88\x37\x3e\x39\x82\x11\xec\xb1\x1a\x19\x5f\xbd\x75\x65\x05\xa5\x8e\x64\x31\x92\x4b\x22\x3f\x0c\x0f\x1f\x64\x5a\x03\x73\xaf\x7a\x1f\xaf\x4d\xbd\xb8\xb5\xe2\x5a\xad\x87\x4e\xf6\x79\x10\x80\x71\x81\xf1\x82\x64\x3c\xa4\xde\x84\x33\x3f\x2c\x0b\xd1\x13\xae\x5c\x41\xc0\xe1\x00\xe8\xf6\x23\xc8\x26\x3d\x06\x12\x1e\xd7\x82\x7a\x26\x07\x8a\xa6\x27\xf4\xf6\x4a\x19\x00\xa9\xa8\x38\x1b\x0d\x6a\x03\xdc\x21\xcf\xb5\x02\x2d\xc9\x62\x1b\x30\x0e\xd2\x4c\x0b\x92\x55\x1c\x47\x42\xa2\xfb\xe5\x91\xa6\x07\xa1\x31\x46\xdb\x28\x30\x44\xd2\xb8\x23\x14\x3f\x5c\x8a\x4d\x02\x9b\xd5\x32\x90\x7f\x4e\x08\xf0\x89\x98\xb3\x40\x9a\xf0\xe7\x7b\x7e\x64\x66\x0a\x16\x15\x23\xe9\x65\x99\x72\x50\x32\xb9\x08\x48\x01\x4d\x52\xf9\xaa\x11\x6d\xb1\x66\x93\x3d\xe3\x0a\xaa\x2b\x88\x19\xe7\x66\x9a\x37\x9a\xa6\xd9\x70\x5b\x7a\x95\xad\x61\xf0\xb3\xd2\xa6\xd5\xf7\xba\x1d\x64\x47\x0f\x63\x1d\xc7\xfb\x53\x89\xb7\xb1\x06\x34\x22\x47\x71\x8f\x3a\x04\xb4\x0d\x42\xe5\x3e\xee\xc9\x98\x7c\x95\xde\xbc\x9a\xed\x51\x20\xbb\xd1\x3c\x8c\x76\x12\x86\x5d\x4d\xaf\xd7\xe4\xba\x7a\x54\xc4\xc3\xfa\xc0\xe0\xdd\xbc\x4a\x7f\x9e\x70\x79\x64\xcf\xf5\x6b\x1f\x70\x02\xfb\xf3\x42\x7a\x39\x0b\xc6\x13\xfa\x9e\x3d\xaa\x14\x14\x02\x96\xab\x95\x5e\xa6\xdb\x50\x63\x29\x94\xd6\x52\x36\x77\xb3\x7a\xd6\x59\xfc\x33\xfb\x2b\x57\xe5\x86\x81\x63\x61\x1c\x3c\xde\x42\xc5\xe1\x20\x39\x99\x32\xaf\x93\x0b\x87\xeb\x9c\x34\x71\x83\x93\x27\x17\x74\x65\xfc\x84\x45\xa6\xf1\x2b\x1d\x44\xa1\x69\x73\xf4\xe8\xc8\x40\x71\x07\x8a\xf7\xa7\xfe\x99\xd1\x3a\x3e\x50\x89\x10\x7d\x31\xbe\xda\x71\x7c\x3f\x1d\x25\x6c\x59\x14\x34\xee\x4d\xa0\x93\x07\x34\x55\x9a\xba\x9e\x9d\x52\x50\xa1\x90\x1b\xa4\xc2\x30\xdc\xa7\xc4\x41\x9e\x46\x93\x61\x7a\x65\x30\xb3\xe1\xc4\x3d\x74\xbc\x85\x70\xd2\x61\xb7\xcf\x39\x88\x17\x33\x73\x70\x17\x14\xf8\x85\x9d\x32\x2d\x58\xd4\x62\xc4\xd1\xa9\x82\xe9\xe1\xf5\xf1\x85\x1b\xa9\x63\xf2\xdd\x3c\x32\x96\xbb\xbf\xf0\x5a\xca\x74\xcf\xf3\x31\xfe\x4e\xed\xc9\x76\x35\xc9\xb7\xf2\x0e\xf8\x69\xa6\xc6\x10\x53\x93\xc9\xec\x0c\xaa\xd9\x73\x20\x3d\x0f\x16\x9b\xc6\x05\xfa\xe3\xcd\x2b\x23\xf3\xcd\x45\xe4\xcb\xa4\xce\xb6\x1e\xd9\xe7\x9e\xb7\x2d\xf4\xa7\xb0\xd3\x3d\x5a\x60\x14\xf0\xb6\xc0\x55\x06\xd5\x9f\xae\x97\x51\xc5\x1c\x59\x7f\x7a\x3d\x61\xfb\xdc\x1c\x35\x6f\xd8\x4c\x97\x66\x8b\x15\x26\x3c\x70\x90\xc1\x7a\x4c\xee\xad\x64\xa8\x97\x5f\xd2\xe4\x51\x1f\xcb\x43\x71\xb4\x66\x1f\x88\xc4\xcf\x8d\xc2\xfb\xda\x63\x23\x77\x31\x3b\x6a\x14\x2d\x34\x57\x65\x24\xf5\xd7\xc8\xa3\x2b\xd3\x84\x15\x1a\x6b\x78\x87\x33\x85\x9f\x0a\xfc\xe7\x72\x32\xf0\xc5\xb3\x9c\x65\x04\x2a\x52\x92\xe2\xab\x08\xc0\x3e\xe6\x65\x17\xe5\xba\xd8\xa3\xda\x89\xd6\x10\x29\xa1\x46\xda\xa9\x78\xe3\x4b\x2a\x2a\x30\x8b\xda\x0e\xcd\x06\x6f\x78\x41\x13\x05\xe1\x9e\xc4\xd5\xfb\x9b\x5b\x81\x3a\x68\xdf\xeb\xf5\x3a\x1c\xbb\xe2\xcf\x1b\x65\x02\x4d\x83\x5b\x22\xa4\x6b\xb6\x69\x06\xd4\x57\xbe\xb2\x6b\x77\x2a\xf6\x8a\xa3\xec\x9a\x96\x0e\xa1\xfc\x9d\x1b\x56\xc2\xa0\xa9\xa4\xd8\x58\x87\x8f\x77\xb8\x9d\x6a\xf4\xea\xb0\x10\x97\x4a\xf6\x46\x6c\x83\x04\xc1\x24\xf3\x41\x27\xe4\xd8\x13\x08\x20\xf4\xec\xa9\xcc\x95\xf5\x34\x24\xf9\xf2\xa5\xe3\x69\x32\x3c\x63\xd0\xb9\xb0\xb6\x3c\xc2\x0f\xd9\x00\xc0\x6b\x69\x78\x20\x6b\x88\x3d\xcd\x96\xa6\x5f\xb1\x4c\x27\x6d\x48\x6b\x94\xda\xfb\xd5\x84\x97\x50\x2d\x3c\xea\xee\xa9\x2d\x67\xe2\x56\x39\x08\xf9\x09\xdf\x5f\x00\xe7\x21\xb8\x51\xa1\x4f\x02\xdc\x6b\x40\x3f\x8b\xcb\x22\x62\x0d\x53\xaa\x1c\xd9\x04\xf0\x18\xb9\xa9\xce\x6c\xb6\x8e\x2c\x38\x75\xc0\xb1\x1f\xf7\x13\xd7\x3e\x9a\x3a\x62\x75\x7f\x1b\xd4\xa0\x16\xe2\x8d\x17\x5b\x79\x80\x87\x67\xc1\x22\xd1\xa9\xc6\x9a\xd6\xb1\xa1\x9c\xf6\xe0\xa5\xed\xc4\xb0\x63\xaf\xf9\xc9\x94\x4c\xdb\xd6\xab\x6c\xac\xae\xe3\xc7\x43\x80\x59\x0f\x5e\x87\x96\x7b\xe9\xee\x46\x36\x2a\x41\xfe\xfb\xc6\x5e\xa4\x40\xc4\xb1\x04\x3d\x98\xa1\xcd\x83\xed\xcf\x6f\x80\x94\xf3\x73\x20\x6e\x67\x31\x38\xe5\x35\xfd\x9c\x02\xa1\x81\x10\xf4\x09\x7f\x4d\x41\x76\xf4\x08\x79\x7c\x8e\x7c\x0a\xb2\xb4\x6d\x18\xc7\x5f\x6c\x7b\x98\xea\xc2\x79\x75\x45\x85\x38\xd0\xa2\x9d\xdd\xc3\x4d\xf0\xf2\x00\x19\xda\x3b\xd5\xad\xf0\x4d\x8b\x20\xb5\x2a\x0e\x06\x04\xb7\x06\xe9\x16\x16\x49\x00\xcd\x33\xdc\x99\x80\x97\x69\x6e\xd9\x8b\xef\xd1\x15\x8f\x6b\x8d\xdb\x84\xa1\x82\xa8\x5d\x6f\x50\xe2\x80\xd5\x08\x4a\x70\x8c\xd1\x74\x1a\x24\xf6\x5d\x16\x4e\x81\xd5\x64\xbb\x5e\x39\xf0\xe1\x02\x1a\x06\x2f\xdc\x32\x08\x8a\x6c\x18\xad\x23\x8b\xb4\x9a\x18\x75\xed\xa0\x9e\x99\x16\x51\x64\x5c\x58\x59\x10\x13\x77\x02\x91\x7c\xb8\x00\x88\x5f\xdd\x19\xb3\x60\x04\x9e\x34\xec\xaf\x0b\xf2\x97\x1d\x20\x71\x62\xec\x9a\xf8\x46\x87\x04\x00\x75\x56\xe1\x60\x60\x15\x55\x66\x40\x1d\xc6\xea\xc3\xf5\x65\x4e\xcc\x4f\x85\x0c\xc7\x3b\xea\x39\x5a\xe5\xe1\x19\xb5\x5e\xad\x65\xdf\x72\x6c\x22\x3a\x60\x36\xd2\xe3\x41\xd2\xe7\xaf\xc2\x41\xc4\x40\xc2\x85\x61\x25\xee\xb4\x81\xb8\xbe\x20\x99\x90\x52\x31\x08\x89\xc9\x40\x29\x1c\x2a\xc3\x2e\x9c\x33\x78\x68\x71\x45\xd0\xf7\xef\xff\xe3\xe6\xfd\xbb\x53\xf1\xf9\xc9\x7e\xbf\x7f\x12\x8a\x3f\x19\xfa\x4e\x99\xd0\x97\xf6\x54\xfc\xaf\xb7\x97\xa7\x42\xf9\xe6\x87\x85\x78\x8b\xc7\x4f\xa2\xea\x64\xb7\x0c\x2e\x10\x60\x04\x3c\xf4\xff\xc2\xb1\x44\x5b\x87\x14\xb6\xf9\x6b\xfe\x39\x13\x19\xa6\x91\x1d\x64\xf9\x21\x7c\x70\x94\xcd\x18\x12\x7a\x9a\xe4\x06\x7e\x8c\x33\x12\xfd\x06\x30\x5e\xa8\xf0\x66\x99\x74\xe2\xe6\xf5\xf9\x4f\xff\xfe\x3f\xc5\xeb\xb7\xe7\x17\x62\xa3\x3e\x8b\x56\xaf\x15\x5e\x4f\xf2\xd6\xbe\xd7\x3c\xe9\xff\xeb\x49\x58\x0d\x4f\x6e\xf4\xda\x48\x3f\xf4\x8a\x17\x00\xd2\x89\x9c\x47\xea\x64\x73\x37\xf7\xfc\xe5\x18\x44\x37\xd6\xd0\x00\xbc\x69\xac\x29\x7b\x8f\x20\xec\xcc\x75\x01\x6e\x5c\x49\x79\x1d\xd6\x4c\x64\x64\x36\xca\x04\x42\x3f\x74\x6d\x79\x46\x2f\x15\x2f\x01\xd5\xfe\x71\x5c\x18\x02\xff\xc1\x33\x19\x67\xe2\x3f\x20\xe4\xd3\x86\xad\x9f\x42\x16\xf7\x0e\x80\xc7\x65\xc3\x66\xa8\x33\xc1\xee\x4c\xbc\x11\x26\x88\x0e\x2c\x54\xa6\xbc\x28\x58\x8e\x71\x90\x8a\xef\x4c\x5c\x2a\x2f\xb6\x51\xe5\x07\x6b\x1c\xb1\x4d\x4a\x94\xa6\xb1\xf3\xd9\x3c\x28\xbf\xe4\xb1\x00\xd9\x6c\x74\x3a\x80\xa5\x9f\xda\x6c\xf6\x3c\x46\xe2\x3d\xc6\x45\xf2\xe0\x8f\x33\x59\x29\xf2\x6f\x0a\xa9\x08\x61\x2e\xe7\x66\x87\x62\x31\xce\x4e\x5c\x76\x70\xf0\x75\x71\xae\x36\x18\x97\x19\xc7\x3a\x9c\xcd\x8e\x54\x1f\x34\xea\xe8\xe2\x79\x8a\x8e\xab\xed\xa9\x60\xa7\xcf\x53\xb2\xe7\x3b\xe5\x28\x11\xed\xa9\x18\x4c\xfa\x8d\x0e\x77\x24\xbe\xf2\x27\xd8\x13\x87\xcf\x68\xee\xd9\x9e\xe2\x63\xd6\x29\x61\x31\xed\x68\x61\xcf\x51\xd8\xe7\x3f\x00\x1a\x4d\x5c\x72\xeb\x80\xff\xff\x7b\x93\x77\x05\xfa\xe6\x0e\xa6\xd9\xf4\xd6\xe8\xdf\x67\xfa\x86\xd7\x2b\xc9\x65\x17\xc7\x9c\x1d\x77\x1f\x02\x2e\x67\x89\x31\xd0\x02\x4f\xdd\x89\x2f\x85\x4f\xeb\xa6\x00\x94\x29\xfe\xe4\x11\x80\xb4\x58\xd9\x36\x6e\xd9\x69\x30\x55\x01\x1f\xc3\xf9\x3b\x64\x0c\xd9\xc8\xb1\x1b\xc7\x19\x79\x90\xe6\xe3\x67\x21\x2a\x72\x23\xe9\x4a\x87\x17\x93\x6f\xe2\x07\x51\x20\xc4\x17\x29\x8a\x53\x1c\x8e\xf0\x52\x2d\x30\xcf\x54\x4f\xad\xd3\x92\x04\x49\x3c\xc2\x44\x4a\x22\xc0\x51\x1d\x13\xe1\x84\xd6\xcc\x54\xe7\x90\x6a\x38\x26\x87\x61\x14\x02\x96\x0f\xf8\x71\x73\x78\xd3\xee\x45\x4c\x2b\xa5\x5a\x3e\x24\x81\xff\x29\x4f\x48\x08\x83\x04\x87\x49\xce\xd9\x04\xf9\xb8\xf4\x63\x0e\x20\xf4\x9c\x9b\x57\x1c\xb6\x77\xf2\x0c\xe5\x61\x34\xd4\xad\x76\x8d\xed\xdb\x87\x71\xbf\x40\xa0\x7f\x06\xbb\x59\x7b\xd9\x7d\xa1\xe9\x2f\x08\xea\xdb\xf0\xe3\x98\xf0\xab\x30\xf8\x7a\xcd\x28\xb3\xb5\x5b\x09\xe6\xaf\x2f\xe0\xc7\xe4\x70\xde\x48\x63\xd0\xd4\x1f\x7f\xe5\x73\xbd\xeb\xec\x81\xdf\x19\x7d\x01\x5f\xfc\x82\xfa\x14\x24\x7b\x95\x73\xf9\xfc\x02\xdf\xc6\x7c\x65\x7d\xb3\x91\xdf\x3d\x7b\xba\x7c\x1e\xf8\x70\xba\x07\xe8\xac\xbd\x63\x2f\x1f\xd9\xc2\xbe\x89\x0f\xcd\xec\xe2\xeb\x95\xc9\x46\x45\xb6\x2d\x1a\x16\x69\x83\x43\x31\x7a\xd2\x2f\x3d\xc9\x84\xad\x1a\x71\x69\x30\x07\xb1\x9d\x34\xf6\xa9\x37\x73\x9d\x49\x4a\x03\x80\x82\x11\xd8\xe0\x73\x27\xb2\x7d\x02\x0c\x07\x69\x6f\xc5\xed\x46\x1d\x62\xe0\x6a\x78\x51\x0e\x2e\x75\xcb\xb7\x73\xa0\x79\xfc\xa4\x68\x7e\xf5\x68\xeb\x72\x90\xf9\x29\x13\x88\xe1\x83\xda\x22\x73\x10\x6d\x6a\x46\xae\x3e\x2d\x1c\x68\xe6\x7a\x31\x7d\xc3\x33\x42\x8d\xdf\x1a\x4d\x3d\x3d\xfa\xd6\x68\x5e\x34\x7f\x70\x34\x2b\x0a\x12\x42\x1c\x84\x59\x8b\xf1\x62\x5a\xa6\xcf\x89\xa6\xae\x7e\xc5\x8b\xa2\xf3\x33\x37\x56\x11\x7d\x71\xaa\x1f\x72\x18\x69\xf3\xce\x7d\xc5\xdb\xa2\xe3\xb0\x74\x5f\xa1\x2d\x9a\x6b\x4b\x6e\x50\x1c\x1b\xf0\xb5\x3a\xa3\x3c\xf8\xff\xd4\x99\xea\x1b\x9f\x13\x98\xc5\xfa\x85\x27\x05\x5a\xbd\x5a\x2d\x30\xb4\x72\xed\xec\xd0\x83\x39\xc1\x2f\xf0\x2d\x6e\xe0\x1b\x41\x28\xb0\xe4\x19\x45\x98\xc4\xc4\xe8\x64\x49\x5e\x95\x90\x08\xee\xb5\xa0\x81\x8d\x15\x9e\x89\x17\x7a\xb5\x42\x57\xdb\x77\xd6\xa7\xa6\x2c\xb0\x88\xdb\xd8\x7d\x1d\x7e\xc1\x0b\xa5\x60\x55\xb8\xb1\x7b\x2c\x74\x13\x52\x32\x30\xb7\xeb\xb4\xaf\x29\xaa\xf3\x4d\xf8\x80\xb8\xd4\x19\xc4\x60\x20\x06\x25\xc3\x7c\xc0\xcf\x1c\x2a\xa0\x8c\xc1\x35\xf8\x22\xea\xa4\x8d\x81\x13\x41\xdb\x91\xae\xa8\x60\xab\x30\xdc\x49\x0b\x84\x10\xd4\x19\x09\x24\x7f\x41\xe8\xa4\x8d\x8a\xf2\x04\x41\x03\x0d\xd4\xfd\x97\x37\xef\xf0\x13\x62\x2a\x53\x34\x2c\x08\xae\xfd\x52\x77\x34\xde\x10\x71\xd1\x0d\x3b\x08\xdc\xa8\x5a\x0e\x28\x19\xf2\x44\x96\x9c\x39\x43\xe6\xe1\xb5\x11\x87\xb7\xb6\xde\x4a\x73\x88\xae\xdb\x37\x76\xab\x48\x95\xb3\x57\x44\x07\x21\x04\x77\xf2\x1c\xb5\x56\x84\x22\x04\xc5\x03\xc2\x6a\xe1\x80\xb6\xe2\x88\xe2\x8b\xb9\xc8\xe2\x9c\x87\x61\xe2\x99\xf1\x0b\xe4\x82\x99\x3f\x86\x68\x7b\xb9\x02\x47\xbe\xf0\x3f\xa6\xee\x7a\x95\x8a\x5d\xf5\xea\xc9\xb8\x18\x39\xdc\x85\x7f\x31\x4d\x6e\xd0\xd9\x23\xcd\x40\x9a\x19\xf6\x0d\xf5\x56\x9c\x38\x8a\xbb\x49\x3b\xbf\x44\x8c\xab\xbf\xa6\xf7\x39\x71\xed\xc3\xcb\x8a\x45\x9f\x72\x4f\xbe\x2b\x64\x50\x45\x1c\x07\x30\x5f\xc1\xd7\xe9\x76\xbd\x6d\x87\xc6\x2f\x8a\x76\x17\xa5\x91\x23\x55\xbc\xea\x44\x67\xd7\xa0\xf3\x80\x40\xc9\x68\xef\x3b\x98\x56\xf5\xce\xa3\x69\xbf\xcc\xc8\xbc\xde\xee\x7a\xbc\x29\x61\xf4\x5e\xae\xe3\xeb\x79\x72\x8d\x61\x5a\x52\x1e\x28\xfe\x43\x4e\xf8\x51\x94\x89\x9c\x00\x7b\x01\x64\xd1\x56\xbd\x5c\x03\x63\xdf\xe4\xf1\xfd\x83\x30\x6a\x0d\x33\xe7\x59\x03\x8a\x23\x8e\x53\xa7\xc7\x1a\xe7\x94\x4e\x3c\xd9\xf4\xd3\xb6\xa5\x00\xe3\x31\xa7\xb3\xb2\x45\xd9\xff\x12\x7f\x2d\x16\x8b\x99\x55\x33\x7d\x3d\x7d\xd7\xab\x27\xe3\xb9\xce\xe0\xe3\x00\xfc\x59\x3d\xee\x3a\xb1\xb3\xda\x78\x81\x4e\x69\xd2\x17\x2b\x85\x2f\x8a\x68\x6a\xb5\x35\x4f\xe0\xbc\x4c\xcd\x18\xbb\x62\xc6\xea\x68\xa1\xa4\x25\x33\x5e\xd5\xe0\xe4\xc6\x3b\x02\xbc\xdc\xca\x6d\x01\xab\x27\x6d\x0c\x70\x37\x9d\x6c\x28\xe4\xf7\x13\x54\x69\x16\x30\x03\x8c\x67\x2f\xcb\x5b\xf1\x62\x71\x0c\x33\x7f\xdc\x72\x3d\x63\xb7\xb6\xc6\xf6\xa8\xef\x8e\xb7\xec\x5e\xae\x1f\x7c\x28\x6e\x54\x5b\x7e\x61\x8d\x55\x7c\xe1\x34\x1d\xef\x81\xd2\x49\x2e\xc3\x43\x3c\x4f\xa0\x94\xb4\x47\x26\x3c\xcf\x04\x17\x39\x15\x67\xfb\xaa\x78\xf8\x37\x95\xe0\x98\x36\xc0\x09\xf0\xef\xaa\xfa\x68\xfb\xf5\xa7\x0a\x6e\x25\x21\x0c\x7a\x8c\x5f\x9a\x5f\x41\x82\x9a\x39\xc0\x84\x1e\x3d\x04\xf8\x72\xe8\xba\x04\x5d\xbe\xd3\xf6\x2a\x6c\xd3\xd2\xa8\x27\x00\xa0\x92\x1f\x9e\x65\x23\x9f\x0e\x7a\x99\x6d\xc1\x4f\x7a\xd8\x7e\x9d\xbc\x38\xf3\xea\xf0\x81\xa2\xe4\x1b\x48\xaf\x16\x54\xe4\x6b\x71\x26\xae\xe0\x47\xa5\xcd\xbd\xf6\x81\x7f\xd8\x2a\xb4\x0a\x7c\x03\x09\x70\xde\x58\xa3\xaa\xc2\x1b\xa1\x82\x60\xeb\x35\x7b\x22\x9c\xb1\x4f\x02\xa5\x17\x76\x90\x67\x85\x59\x64\xfe\x04\x49\x40\x59\xba\x9e\x06\xe4\x30\x2a\x33\x4e\xe9\x01\x3a\x92\xc7\x50\x12\x86\x10\x52\x1f\x82\x2e\x9e\x3d\x0b\xd4\x61\xe0\x80\x97\x80\x0b\x6c\x24\x0d\x4a\x7e\xb0\xa8\x02\x66\x6d\x8a\x48\x5c\x6e\x91\xaa\xc9\x68\xcd\x06\x3d\xd6\x53\xb1\xc0\xa5\x82\x41\xff\x1f\x11\xbe\x78\x77\x87\xd4\xae\x12\x9f\x2d\xc4\x64\x7a\xcc\x36\xd7\xc3\x02\xa2\x20\x92\xfc\xb1\x9a\x7f\xca\xe9\xfd\x78\x6d\xfc\x13\x8f\x39\x4d\x71\x3c\xf8\x9c\x13\xa0\x4b\x03\x9a\x35\x06\xe6\xe1\x48\x23\x22\x2b\xfb\xad\x4e\xa7\x71\xff\x04\x86\x29\xee\x95\xfc\x96\x8c\x9c\x23\xfe\x8c\xbf\x52\x56\x67\x1b\xf6\x54\xbd\xa4\x9f\x47\x6d\x6a\x1e\xf2\x99\x28\x41\x33\x62\x56\x0c\x5c\xc4\xf4\xb5\x06\x38\xe4\x8a\x61\xfb\xf5\xbf\xe6\x89\x51\x3c\x2d\x3a\x69\xb5\xbc\x97\x5e\xf6\xc7\x1a\x8d\xb9\xdc\xf6\xaf\x6e\xfa\xd8\x4c\xad\xa0\x30\x63\x6d\xd5\xe4\xb1\x4f\xe8\xe0\x83\x45\xca\xa7\x3f\xf3\x06\xc7\x7b\xc2\xcc\x4c\x8c\x6c\x4c\xf0\xd1\x4f\xb4\x75\xf8\xf2\xcb\x9f\x47\x0c\x8d\x1e\x7a\x02\x74\xdc\xca\x40\x99\x62\x58\xcb\xbc\x91\x0f\x96\xc8\xb9\x19\x3b\x32\x5a\xf9\xe7\x9f\x05\x9d\x37\x50\x39\x6f\x5b\x56\x5b\xd2\x2b\x80\x3c\x7e\x49\x35\xba\xca\x62\xca\x8f\xdf\xb4\x4d\x23\x07\x7c\x2b\x39\x2c\x16\xeb\xad\x22\x5a\xbf\xa0\xff\x1b\xbd\xab\x8b\xa7\x40\xdf\xc6\xf4\xec\x55\xd0\x9f\x63\x31\x52\x39\x11\x1f\xd5\x8c\xd2\x13\x7d\x85\x80\x08\xec\xfe\x11\x81\xf0\x1b\x78\xcb\xd9\x9c\x71\xf9\xb2\x0e\xfc\x5f\xf7\xb6\x53\xb1\xa1\xe2\xda\x76\x2a\x35\xaf\x0c\xea\x58\x16\x8c\x65\x62\x3a\xe9\x27\xf8\x5d\xc6\x98\x5e\xbe\xe7\xcb\xa9\x74\xc6\xe6\x2f\x7d\x00\x3f\x4e\xd8\x41\xbc\xf9\x79\x0c\x6d\x20\xa4\x3e\x9d\xc6\xef\xec\xbe\xc2\xa3\x78\x01\x51\x23\xcf\xc4\x7f\x58\x6d\x28\xa5\xac\x14\xd3\x02\x67\x94\xde\xa0\xb9\x0e\x32\x16\x3e\x52\x3d\xcd\x1f\xbd\xb5\x07\x27\x51\x7c\x65\x8f\xde\xca\x06\xc6\x9e\x62\x93\x1a\xb4\xe2\x29\x5f\x89\x43\xac\xa3\xa7\x6f\x30\x5c\x44\x51\x6f\x0e\xf1\x35\x15\x43\x28\x80\x71\x75\xa7\xac\xcb\x07\x05\x60\x74\x81\x54\x5b\x6e\x07\xd8\x73\xa7\x76\x40\x44\x82\xb2\x1d\x39\xc4\xd7\xb4\x23\xd4\x02\x81\xe9\xd8\xcf\xe1\x68\x7b\x64\xdb\x0a\x34\x41\xcf\x8d\xcf\xdc\xb8\x89\xe9\xb5\xb7\xdb\xec\xfc\x07\xd3\xdd\x76\xc4\xcf\xb8\xc5\xdc\x91\x8a\x39\x68\x73\x39\xc3\x72\xa0\x19\xfd\xec\xeb\xed\x5f\x26\x02\x10\x70\x30\x94\x8c\xa0\x99\x81\x7c\xf1\xfa\xc4\xf4\x5c\xc2\x76\x25\x16\x11\x78\x05\xa2\x0d\x94\xf9\xe5\x23\x19\xe1\xf8\xf9\x25\xe4\x17\xf3\x43\x05\x18\x46\x9e\xc9\x16\x20\xea\xb8\x57\xc3\x06\xcb\x6a\x9d\x22\x8b\xc4\x1c\xa0\x22\x11\x9f\xc2\xf1\x8e\xcd\xb9\xbd\xec\x62\x49\xc1\xf5\x59\xe1\x97\xcb\x50\x5b\x79\x18\xbf\xc6\x0d\xa1\x22\x8a\x5d\x73\x5c\xb0\x9a\x36\x25\x9d\xeb\xaf\xf4\xbd\x32\x69\xc1\x1c\x15\xae\x16\xf9\x56\x9f\x2e\x90\x8c\x5c\xeb\x9c\x09\x5e\xf7\x10\x2a\x91\x67\x3e\x90\x8e\x6c\x61\x00\xfa\x9f\x63\x9f\x1b\x69\xc6\xb4\x01\xcc\x15\x95\xdc\x3e\x7e\x88\x44\xfc\xd3\xcd\x01\x92\xf2\x70\x7b\x80\x64\x60\x64\x60\xd3\xe6\xe4\xe1\xa1\x66\x21\x3d\xf8\xa7\x9b\x05\x14\xe6\x2b\x9b\x75\xca\x6d\x42\x3e\x26\xd0\x8b\x39\x4a\xf1\x50\x6b\x47\x82\x16\x2c\xe3\xeb\x5c\xda\x62\xb2\x01\x16\xb8\x20\x09\xce\x5a\xe0\x66\x0a\xea\xc5\x62\xbc\x9f\x32\x13\xe2\x6c\x4f\x65\x3e\x0a\xdc\x16\x30\x16\x26\x5f\x2e\x3a\x0f\x13\x2a\x63\x0d\xc8\xe7\x78\x59\x1c\xfd\xbd\x32\xe4\x74\x5d\xe5\xfb\x03\xf1\x44\xf0\xc8\x58\xf1\x82\x68\xbc\xa3\x22\x75\x96\x8e\xb1\x56\xaa\x8f\x30\x73\x9f\xaa\x56\xba\xcd\xd2\xca\x1e\xae\x4a\xf8\x77\x55\xf8\xf1\x57\x39\xa1\x1a\x73\xc8\xf8\x4a\x70\x36\xa8\xc5\x78\xca\xc1\x6f\x82\xb8\x18\xe5\x8c\xf3\x22\xc1\xe1\xfb\xf2\x6b\x66\x26\xd7\x03\x85\xca\x21\x27\x03\xf0\x29\x77\x5e\x6d\xc5\x3b\x4c\xa8\xb6\xd6\x68\xb4\x67\x7e\x8b\xbf\xb4\x59\x57\x45\xbc\xa7\x97\xe1\xa3\x82\x08\x3f\x94\x72\x29\x9d\xaf\xbc\xf5\xf0\x4c\xec\x6d\xf8\xff\xb3\x38\x69\xab\xd4\x75\xd0\x8e\x6b\xe7\x81\xcd\xba\xe1\xdf\x2e\x03\x48\xe6\x7c\x18\xae\x8e\x3e\x72\x14\xd0\xce\x9a\xac\x27\x63\xbb\xa9\x95\x80\x75\x70\x73\x55\x72\x14\x27\xb0\x83\x6b\xa5\x97\x4b\x56\xff\x3c\x5b\x82\x56\x77\xf9\x1c\x55\xa3\xa7\x59\x42\x31\x23\x79\x46\x71\x41\x99\x92\xcb\x53\x37\xa5\xe3\xdb\xd0\x45\x92\xf3\xb2\xac\x4b\x36\x93\x5a\xf8\x4e\x29\x4f\x63\x8f\x92\x94\xc2\xbe\x25\x05\x76\x0b\xee\xf9\x24\x44\x14\x59\xe8\x40\x55\x24\xa1\xb3\xde\xa8\x27\xa8\x78\xce\xd3\x3a\xbb\xd6\x46\xa0\x32\xbb\xec\x1e\xb1\xf6\x25\x4e\x8e\x86\x56\xa0\x80\x28\xdd\x79\xca\x86\xad\x6c\x8b\x54\xd8\xa0\x79\x02\x99\xcf\x4e\x00\x53\x38\x68\xb7\x98\x5b\x48\x2c\xb1\xc7\xc5\x84\x62\xfb\x1c\xa4\xdb\x6b\x7c\x18\xf7\x06\x7e\xcc\xc2\xf4\x03\xa8\x35\x07\x93\xe5\x36\x9d\x92\xa6\x1e\xcc\x52\x9b\xb6\xb6\xf4\xbc\xf4\x45\x48\x14\x83\x59\x82\x8d\xe1\x7b\xd8\x8f\xee\xc1\x42\xd9\x11\x7a\xde\x75\x02\xb3\xb8\x64\xe6\xb8\x35\x7f\x96\x26\xcc\x74\x2a\x93\x85\xab\x4c\xa2\xa4\x4b\x4c\x8a\x84\xd8\xb0\x64\xe1\xc2\xd9\x5f\x85\x63\xd4\xca\x04\x11\xd1\x7c\x7b\x53\xe1\x00\x08\x04\x5f\xdf\xab\x51\x23\x4b\xd7\x65\x02\xf9\x02\x86\x51\x13\x67\x51\x7c\x7b\x23\xe1\xe0\x35\x6b\x3c\x76\x8e\x34\xf2\x20\x7a\xd5\xd8\xbe\x25\x19\xb7\xb3\xce\x83\x96\x1a\x1f\x22\x7d\x18\xe5\xb1\x56\x3f\x88\xf3\x1b\xba\xb1\xd6\xbe\x5e\x37\xa9\xf9\x56\xac\x65\xbf\x94\x6b\x74\xd4\xa1\x08\x4c\xb6\x74\x16\x3f\x52\xfc\xa1\x01\x86\x06\xb5\x81\xd1\x9a\x41\x7f\xac\x6d\xbd\x82\xc8\x25\xb2\xeb\x6a\xe7\x36\x64\x04\x71\xad\xf0\x1e\xe7\xf1\xc2\xb9\xcd\x53\x49\x2f\xb5\x2b\x30\x17\x70\x8f\xf1\x11\x9f\xef\x1b\x09\xbe\xee\x3f\x43\x9c\x21\x20\xed\x50\x9a\x99\xe0\x30\x5a\x3f\x3c\x58\xd1\xa8\x2f\x19\x5d\xcf\xc6\xb6\x87\xa6\x78\xf5\x55\x3d\xe0\xd0\x30\xd7\x90\x44\x77\x44\x8d\x02\x63\x73\xa2\x62\xc0\xf8\x59\xe7\x39\x83\x0c\xde\xed\x6a\xb2\xe6\x1f\xa8\xe2\x81\x59\x78\xfc\x2d\xb5\xe6\xdd\x0c\x35\x3c\xb0\x86\x7a\xa5\x8d\xf6\x93\xad\x70\x0d\xc9\x5a\x76\xfa\xf7\x7f\x72\x43\xcc\x21\xfe\x57\x37\x44\x9f\xb5\x6a\xdc\xa5\x9c\x41\x80\xd8\x6e\xf5\xb0\xf3\x1a\x0e\x8a\x1b\x7c\xaa\xfe\x03\x7c\xe7\x04\x7b\xe8\xfb\xc0\x24\xae\x6d\x6f\x07\xaf\xf1\x51\x33\x4c\x13\xaf\x38\xcd\xcd\x14\x80\x4b\x91\x43\x3d\x50\x8c\x4a\x2e\xf3\x16\x92\xc5\x07\x78\x95\x2e\x95\x02\xfe\x89\xcb\xc8\x0e\x54\xc7\xa8\xd3\x06\xc6\x8a\x4a\x9d\x73\x46\x56\x92\xca\xd8\xa5\x97\x14\x78\x90\x80\xdf\x53\x4a\x06\x0b\x57\x91\xaa\xaf\x3b\x6b\xef\x86\x5d\x1d\xba\x0a\xa1\x93\x30\x59\x5c\x42\xb2\xb8\x0d\xc9\xd3\x1a\xb8\x55\xb1\xd8\xa8\x51\xc7\xca\xad\x7a\x35\x29\xf3\xb2\x57\x53\x78\x1e\xb9\x8d\x92\xbb\xc9\xb8\xbd\x56\x72\x37\x19\x35\x80\x9c\x0e\x00\xc0\x1e\x1f\x85\xbc\x94\x6e\x41\xe2\xce\x4b\xbc\x69\xbb\x63\x75\x68\xb0\x98\x1a\xc3\x9b\xc0\xc7\x1f\x29\x41\xfc\xd4\xb8\x55\x74\x7d\x38\x69\x95\x5d\xfe\x55\x35\xde\x31\xf4\x7b\xfc\xcc\xa0\x96\xd6\x7a\xe7\x7b\xb9\x0b\xac\x30\xd8\xe8\xe3\x30\xfd\xc2\xe9\x81\x15\x6e\xee\x26\x23\x85\xd0\xd3\xa1\x42\xe8\xe3\x63\xb5\x75\x3b\x69\x6a\xe7\xfb\xa1\xf1\x43\xaf\x5c\xac\xf0\xed\xcd\x4e\x1a\x71\x13\x33\x26\x35\x4e\x4a\xe6\x2b\x74\x5c\x78\xae\xe6\x46\x36\x1b\x35\x5b\xf5\x45\xc8\x79\xb0\xee\x49\xd9\xbc\xf2\x49\xf1\xb9\x9d\xd2\xdb\x95\xee\x02\x51\x5a\x0e\xcd\x9d\xf2\xf5\x46\xba\x4d\xed\xe1\x99\xcd\x0c\xd7\x15\x83\x89\x5f\x00\x4c\xbc\x96\x6e\x23\x6e\x41\x3d\x37\x83\x75\xdd\xd4\x5b\xe5\x25\xd8\x33\x65\x58\x5e\x5d\x88\xb7\x94\x3c\x57\x0a\xd4\x76\x35\x49\x40\xb4\x0b\x03\x53\x9a\x61\x78\x0f\x9a\x3d\x12\x8a\xce\x23\xc8\x1c\x36\xa3\x3e\xd3\x91\xde\x1c\x1a\x7a\xd8\xfd\xb3\x0f\x6d\xb8\xc6\x94\x0c\x16\xc4\xbc\x75\x53\x33\x8d\x04\x53\x17\x08\xe7\xfa\xea\x02\xb6\xef\x84\x82\x25\x60\x24\x5c\xaf\x2e\xc4\x95\x1c\xdc\x2c\xe0\x4e\xe2\x66\x3a\x0a\xc9\xd5\x33\x20\xd7\x3c\x86\xa3\x4a\x1d\x0e\x25\x92\x15\x94\xb1\x17\xe0\xe6\x8b\xe1\x53\xeb\x9d\x44\x53\xd7\x20\x75\x8b\xb7\x18\x52\xf5\x2a\xa4\x11\xac\x51\xfb\xfc\xfa\x25\xdd\x03\x9f\x63\x22\x83\xa1\x64\x01\xf2\x04\xa6\x30\x2f\xdc\xb2\xd5\x38\x90\x68\xca\x2b\xc2\xcf\x62\x5a\x3a\x40\x77\xd6\x51\x1a\x87\x05\x8f\xaf\xd7\x51\x3a\x38\xaa\xf4\x6a\xad\x9d\xa7\xc8\x1c\x10\x7e\x1b\xbc\x39\xaf\x21\x99\xe5\x9b\xdc\x3f\xf7\xd6\x42\x2f\xb3\x8e\x95\x86\x96\xdc\xcd\x2f\x87\x26\x5f\x10\x8e\xfc\xa5\x24\xea\x19\x08\x2f\x6c\xe0\x57\x6a\x1e\xd8\xd0\x0f\x21\xc3\x72\xec\xe8\x16\xb4\xcb\x4b\x83\x64\xc9\xa2\xda\x08\xc3\x25\x48\x9d\xd9\x28\xef\xa4\x73\x7b\x30\xd4\x66\xbd\x38\xdc\x2c\x08\xed\xc9\x29\x0f\xf4\xf2\x60\xee\x3c\x18\x32\x33\xe3\xd6\xa7\xe0\x81\x64\x05\x17\x59\x0c\x1a\x08\xca\xf9\xd2\x0d\x64\x1a\x8b\x6c\xa5\x80\xe9\x4c\xb9\x46\xb6\xf2\x33\x0a\x27\x30\xa4\x14\xb9\x9c\x4c\x2d\x33\xcf\x99\x0b\xce\xbd\xd4\x5b\x7d\xb4\x2c\x2b\xfd\xbe\xbf\x51\x5e\x3c\xf9\x11\xbc\x4a\x9d\x12\xeb\xce\x2e\x21\x5c\x2b\xc6\x9c\xed\x02\x8a\x1f\x08\x87\x76\x75\xbe\x28\x41\x39\xcd\x0d\x86\x9f\xe5\x22\xdd\xf5\x76\xa3\x97\xda\xe3\x84\xcc\x14\x60\x00\x7e\x5c\x73\x1d\xd7\x72\xa8\x89\x96\x78\x51\x08\xe2\x24\x85\x0c\x5c\xa1\xb6\xcf\x0c\x0d\x78\xcd\x63\xdc\xa8\x20\x62\x90\x3b\xc1\x04\x43\x56\x26\x7b\x97\x34\xb0\x7d\x18\x9b\x31\xc7\xa3\xb7\x3b\xdb\x87\x2e\xe0\x62\xfb\x12\x2e\x04\x17\x08\x5e\xf0\xde\x73\x4b\x26\x5d\x06\xf0\x8a\x41\xd2\xcf\x8b\xf3\xc1\xbb\xe6\x72\x6d\xc0\x13\x2d\xb5\xdd\x9b\xa4\x78\xcc\x5a\x8a\x0f\xb8\x84\xf6\xa6\xb8\x15\x36\x70\xa6\x81\xe7\x85\x87\x17\x83\x90\x95\xc7\x1f\x89\xe1\x82\xd2\x4b\x81\xb6\x8f\x21\x2e\xd0\x76\x9e\xd4\x92\x79\x03\x36\xd2\x91\x99\xce\x91\xfa\xb7\x85\x8e\xb9\xa8\x3e\xd7\x8f\x95\x0d\xc0\x4b\xbf\xe8\xba\x33\xb9\x88\x71\x65\x53\x66\x2c\xb4\xce\xb3\x29\x7b\x28\x5c\xbe\xed\x29\x34\xc3\x88\xba\x17\x37\xe1\x05\x95\x87\x12\x39\xf5\x86\x84\xd2\x92\x08\x92\xd2\x2d\x11\x5f\x10\xa1\x16\x16\x08\xf7\xb8\xbe\x6c\x3b\x17\xb5\x61\x89\xf2\xfe\x16\xd3\xf2\x26\x60\xca\xf4\x1e\x19\xd3\x49\x7f\x28\xce\xc4\x9f\xf1\x17\xa5\x83\x12\x11\xb9\xb7\x9e\xd3\xc6\x0e\x72\x04\x19\x64\xb3\x70\x72\xff\xae\x2a\x50\x17\x17\x74\xdb\x1d\x23\xdc\x8e\x60\xf1\x89\x13\x8e\x66\x42\x44\x9d\xb2\xb2\x5e\x60\x4a\xfe\x0c\x2c\xa6\x28\x08\x5b\xd7\xc6\x00\x76\x2d\xa5\x33\xcd\x8a\x11\xb3\x29\x7d\x6a\x17\x96\x35\x99\xd0\x8f\xda\x9b\xd5\x06\x50\xf3\x87\x49\xd6\x4a\xa7\x9a\xa1\xd7\xfe\x00\x91\x64\x6d\x63\x3b\xf4\xad\x85\x34\x08\x22\x1b\xd2\xb8\x9d\x23\xef\x19\x4c\x85\x70\x17\x67\xe2\xb5\x75\xdc\xee\x1d\x3e\x10\x7b\x65\x7b\x4e\x01\xfd\x5e\x0b\xa6\xd9\xda\xb4\xe2\xc5\xbb\x32\xbd\x30\x03\x8b\xa1\x05\xf1\xb1\x7b\x57\x84\x18\xe4\xf8\x81\x18\x3e\x50\x2d\xd6\x0b\xf1\xe2\xfd\xdb\xff\xeb\xc4\xe5\x08\xf9\x68\xe4\xea\xae\xe8\x7b\x0e\x26\x33\x19\x93\xbd\xd1\x66\xfd\x33\xbd\xc9\xc4\x38\xe0\x15\x29\xdb\xa3\x8d\xf6\xae\x0b\x03\xe0\xd5\x67\x0f\xd7\x82\xc6\x7a\x7a\x0e\x7a\xa3\xd7\x1b\xb0\x87\xd0\x9d\x5a\xa3\x1f\x44\xd8\xb6\x0b\x9e\xc9\xc0\x77\xd1\x83\x6f\xc0\x6f\xd1\xd5\xce\x2f\xd2\xa9\x1c\x04\x86\x08\x00\xe2\x10\x49\x8f\xb1\x0c\xd5\x9c\x03\xb2\x38\xe7\xdc\xa3\xd0\xe3\x77\xba\x81\x22\x45\x0e\x21\xb4\xde\xe9\xb5\x79\xa2\xe1\x79\x94\x40\x1a\x55\xd7\x92\x43\x7f\x11\xac\x71\x31\xa9\x81\xad\xc0\xe0\x9d\x8b\x77\x0f\xb7\xc6\x0d\xdc\xf4\x9b\xe1\x4b\x2d\xdf\x4a\x0d\x31\x3f\xe1\xff\x18\xec\x5e\xf5\x7a\x75\xa8\xd7\xbd\x1d\x76\x75\x46\x93\xcf\xc4\x9f\x20\x47\x40\x4e\x46\xad\xa9\x1c\x16\xa0\xbb\x36\x88\xcc\x08\x63\xfd\x0a\xa0\xb3\xd9\x48\x03\x8f\x25\xf0\x91\x8e\x08\x89\xaf\x74\x14\x10\xa9\xe1\x8d\x35\x41\xbe\xc0\x60\x3a\x1d\x5a\xc6\x62\xb1\xd8\x0b\xb0\xd2\x96\x1a\x5e\x56\xbe\xa4\xc0\xd9\x78\xed\x95\xad\x82\x84\x31\x20\x51\x6d\x10\xb4\xb1\x5b\xb4\x38\x12\xba\x4b\x00\x80\x48\x35\x01\x60\x3c\x96\x2e\x14\x05\x0d\xfa\x99\x78\xa9\x7c\xb3\x11\x29\x2b\x14\xa2\xdd\x88\x6e\x4e\x9f\x79\xb7\xc6\x3e\x43\x65\x45\x97\xf1\x06\x36\x02\xa0\xcd\x46\x01\xb1\x0d\x1c\x50\xed\x64\x38\x2e\x9c\x38\x6f\xc5\xcd\x39\x93\x9a\xad\xdf\xd5\x74\x31\x70\xf3\xf6\xf6\xea\x01\xda\x15\x40\x89\xae\x00\x64\x46\x5c\x42\x16\x11\x18\xc8\xca\xa8\x0c\x47\x24\x42\x3a\xe5\x38\xea\xa6\x6a\x89\x60\xb9\x79\xb8\x87\x38\xe8\xb0\xc3\x7b\xe5\x7c\xaf\x1b\x7c\x48\x9e\xca\x2c\xc4\xdb\xa1\xf3\x7a\xd7\x29\x4e\x61\x43\x51\x08\x46\xb0\x93\x3d\x3f\xb9\xdd\xd8\xed\x56\x8a\xc7\xa7\x8f\x17\xc5\x29\x50\xfb\xce\xa5\x48\xa6\xb7\x97\x37\xe2\x57\xd3\xf4\x07\xb4\x27\xa1\x9e\xde\xe9\x5d\x00\xab\x71\xcd\x87\x0e\xdf\xe9\x1d\xc0\xe2\x5a\x67\x72\x2b\xb7\xb5\x53\xfd\xbd\x6e\xe2\x9e\xbc\x3a\x7f\x0b\x2a\x3c\xdd\xa8\x9c\xd8\x53\xd5\xf0\x34\x1c\x0b\x51\xa9\x11\xe7\x83\xb7\x85\x10\xc5\xa5\xb2\x17\x98\xc6\xc7\x23\x9a\x82\xf0\xb8\x4e\x78\xec\x12\xba\x60\xb5\x8b\xa3\x8f\x97\xc5\xb1\x62\x91\xab\xcf\xee\xde\xd2\x99\x3c\x96\xe6\xca\xe2\x5f\x72\x9d\x5b\x14\xa7\x6d\xce\x7a\x95\x78\xbe\xd2\x2a\x33\x47\x96\xb1\xc9\x0f\x8d\xdb\x6c\x98\xc1\xb2\x44\x01\x59\x23\x03\x40\xe6\x31\x23\xd4\xd1\x50\x66\x5a\x22\x37\x65\x9a\x8e\xf1\x8c\xb5\xe3\x03\x16\x8e\xb4\x44\x81\x77\xd6\xd1\x73\xf2\x08\x6a\xe4\xa2\x01\x66\x79\x40\x13\x1b\xba\x64\x26\x8b\x81\xc4\xa8\xa7\x48\xaa\xca\x11\x54\x1e\x30\x14\x17\x00\xf0\x3e\xc4\x39\x67\xdd\x1c\x71\xce\x65\x33\xbe\xc0\x40\x23\x1a\x94\xc0\xc9\x51\x89\x9d\x1b\x2e\xb3\x45\x47\x4c\xc9\xc8\xa7\x81\x8e\x03\xed\x37\xc3\xb2\x96\x3b\x5d\x2b\xd3\xa2\x9f\xcb\x99\x38\xbf\x7a\x23\x7e\xa5\xcf\x8a\x2c\x10\x16\xc6\xfa\xda\x81\xc7\xd0\xf7\xe0\x22\xa6\xfc\x0f\x9c\x45\x9a\xf8\x68\xaa\x40\x9a\xf8\xd2\x62\x81\x60\xe5\x6e\x17\x39\xbc\xdd\xae\x2b\xd8\xbb\x0c\xe4\x1e\x69\x75\x06\xf1\x27\x0a\x1d\x9b\x01\x61\xd8\x92\x1c\xe8\xc3\xf5\x25\x03\x8c\x39\x3f\x4a\xb6\xab\x55\xa7\x8d\xaa\xb7\xe8\xd2\xf5\x1e\x3f\xc5\x5b\xdb\xc6\xfa\x29\x1e\x50\xdd\xdb\x01\x55\xed\xeb\xec\x85\x90\x6b\x48\x0c\x03\xcc\xe0\xfd\x80\xc7\x27\x5e\x2f\xa3\xd6\x26\xcb\xa2\x8a\x42\x56\x5e\x49\x90\x99\xf9\xa1\x1a\x8c\xa1\x31\xea\x20\xd8\x3f\x34\xe0\xa6\x57\xf7\xd6\xfa\x7a\x27\xf1\x18\x82\x74\xf4\xfc\xbb\xb6\xd6\x8b\x2b\xe9\x37\x5c\xa8\xb3\xeb\x69\x89\x4b\xbb\x3e\x02\x4e\x01\x84\x71\xab\x71\x1f\x30\x6d\xbc\x16\xa1\x5b\xb1\x6d\x6e\x93\xcd\xf6\xcd\xeb\xf9\xa9\x0e\x50\x53\xf9\x21\xcb\x0c\x42\x90\xaf\x29\x10\x7c\x8d\xab\x88\x64\x22\x2f\x7e\xa1\xf8\xf0\xb8\x98\xf2\x62\x47\x66\x36\x64\xe5\x6c\x7c\x96\x0c\x3c\x89\xe1\x5c\x60\x40\xcc\x04\x28\x1f\xb2\xc9\x48\x01\x80\x22\x23\xd3\xf2\x46\xb3\x96\x1e\x7b\x92\x5d\x7d\x8e\x40\xc4\xb9\xc7\x5e\xe5\xe8\xee\xd4\xa1\x86\x18\x6c\x54\xe7\x7f\xaa\x03\xc6\x5e\x1b\xd7\x7b\xa7\x0e\xeb\xd0\xfa\x08\xb6\x56\x46\x7c\xff\xd8\xb9\xcd\x13\xcc\x7a\xfc\xc3\xa4\xcc\x56\x1b\xbd\x1d\xb6\xe8\xa1\xad\x7f\x57\xf8\xf4\x2c\x3c\x2b\x01\x19\x50\x5b\x90\x29\xc5\x45\xc8\x78\xa8\xa8\x9b\x29\xe5\xaa\xb4\x84\x76\x36\xad\x85\x5c\x33\x36\xb7\x24\x00\xba\x18\xe8\x54\x60\x3a\xe6\x60\xac\xca\x52\xe3\x0d\x7c\x21\xc7\x95\x63\x83\x27\x7b\xea\x24\x7f\xbf\x84\x27\x7c\x58\x0a\x27\xc8\xad\xfc\x9c\x94\x71\xa0\x67\x43\x75\xde\x58\x7f\x47\xe0\xbb\x5e\x61\x6c\xd1\xba\xd3\x8d\x32\x8e\xde\x6e\xa2\x44\x71\x49\x89\x63\x82\xb1\xf1\x7e\x57\xaf\x01\x37\x93\x0b\x88\xe1\xf8\x2a\x61\x26\x76\x06\x74\x56\x30\x06\xf5\x56\xaf\xe3\x73\x68\xc4\xd5\x80\x96\x15\x86\x42\xbc\xe5\x5c\x46\x40\xae\xab\xf5\x2a\xb0\xc6\x61\xe0\xf1\xce\xad\x39\xa4\xf7\x99\x89\x6d\xbe\x48\x79\x71\xb6\xa0\x85\x71\xb6\xa0\x71\xb3\xf3\x04\x70\x64\xc4\x0c\xa1\xe9\x6d\x87\xee\x3e\x35\x86\x61\x47\x2d\x4f\x38\xb4\x2e\x30\x97\x82\xc5\xbf\x87\xdc\x58\x5d\xbb\x4c\x95\xbd\x60\xcb\xad\xd9\x0a\xdb\x65\x9d\x2b\x1f\x52\x6a\x2e\xaa\xa7\xd4\x5c\x75\x91\x52\x89\x82\xe5\x14\xb8\x5d\xd6\xce\x75\x4c\x84\x6f\x6e\x2e\x4b\x4a\x9f\x72\x13\x47\xfd\x7d\x90\x21\x1f\xed\xac\xf3\xeb\x5e\xb9\x47\xc2\x9a\xee\xf0\x43\x56\x82\x56\x6e\xbe\x52\x29\x75\x8c\xc3\xfd\xad\xd3\x5e\xfd\xe1\x11\x5c\xe0\x3f\xf2\xba\x5d\x3e\xfa\xa1\xca\x0f\x4d\x0d\xbe\xc5\xd9\xa9\xa9\x9b\x23\xe3\x13\xef\x0f\x54\x10\x31\xb3\xe0\xea\xfc\xc2\x14\x8a\x9e\xe4\x71\x52\x0e\x2d\x1f\x67\x89\x7b\x8e\x87\x59\xce\x39\x73\xbb\x36\xf0\x12\x40\xca\x48\x2f\x1b\x82\x03\xfe\x35\xa3\xf9\x05\x92\x53\x03\xf1\xb1\xaa\x20\x99\x07\xee\x8a\x3c\x76\xb9\x79\x37\x7a\x6d\xc4\x1b\x83\x0e\xf7\x71\x53\xea\x2e\xdd\x87\xbc\x0d\xed\xcf\xaf\x40\xc6\xed\x9f\x90\x32\xee\xc5\xc3\x24\x8d\x76\x5c\x23\x77\xbe\xd9\xc8\xb4\xc9\x2e\x30\x21\xf2\x13\x18\x1b\xa8\x09\x4b\xa1\x23\x73\x26\x8c\x1f\x04\xfe\xde\xe2\x12\xec\x97\x62\x67\x9d\xf2\x49\x1f\x53\x14\xba\x0e\x79\x51\x7f\x93\x17\xe6\xd2\x1c\xdf\x2f\xce\x3c\xc7\xed\x99\x9d\x79\x08\x50\x99\x22\x36\xfc\x57\xf8\x14\x97\xf0\x19\x47\x08\x03\xf2\xc0\x15\x9a\x1d\x48\x77\x1d\x52\xe0\x26\xcd\x0e\xe9\xd8\xf9\xa2\x78\x96\xcf\x4d\xce\xd2\xbd\x85\xef\xf9\x16\x12\xec\xd1\xa3\x9e\xf2\x23\x95\x54\x9d\xcd\x29\xe4\xaf\x97\xef\x47\x90\x6e\x80\x5b\xf3\x3a\x90\x61\xfd\x19\x14\x30\x90\x00\x24\x58\x7f\x1e\x41\xcf\x50\x08\xca\x99\xa1\x07\x70\x19\x07\xa7\x2e\xa9\x6c\xe0\x1a\x0e\x8e\x5d\xd8\x41\x0c\x17\x41\xea\x15\x3a\xe4\x9f\x89\x97\xa1\x80\xb7\x18\x85\x11\x02\xad\xc2\x5e\x0c\x49\x81\xc3\xfe\x59\x9c\xdc\x4f\x4b\x3b\x74\x74\xbf\x4d\xe0\xe9\xc5\x5c\x0a\x49\x19\x0a\x2f\xe2\xc0\xa3\x45\x61\x1c\x77\xb0\x22\x9c\x1f\x76\x84\x9c\x8e\x7a\x3c\x29\xe0\x06\x3d\xd9\x0f\xc3\x9d\xf9\x2c\x26\x84\x94\xad\xdc\x21\x79\x40\xd0\x73\xfc\x2e\x81\xc0\xcc\xe4\x5e\x76\x11\xea\x0d\x25\x4c\x6a\x35\x79\x9d\x86\x1e\x05\x4c\xd3\x80\xc6\xf0\x19\xf1\x43\x07\xd6\x79\x46\x92\xa0\x77\xbd\xbd\xd7\x6c\x67\x8e\xf0\x57\x94\x94\x4e\x6e\xfc\x4e\x98\x19\x82\x50\xa7\x73\xd4\xde\xe9\xa8\x7c\xb8\x80\xaf\xe2\x3c\x21\xba\x11\x36\x3a\xc2\x26\xd2\x71\xa3\x3c\x95\x88\xdc\x7c\x13\x47\x86\x6f\xcf\x5f\x5d\xc4\xb1\xc1\x8b\xf6\x51\x67\x3a\xbd\x52\xf1\x5a\x9e\x7a\x73\xa9\x57\xaa\x00\x0e\xe7\xb0\xe3\x08\x89\xe1\xb8\xbe\x11\xef\x4d\x77\x18\x75\x22\x47\x45\x3d\x49\x98\xe2\xc8\x68\xb0\x95\xc8\x06\x06\x13\xe6\x87\x9c\xa1\xe9\x94\xca\xc0\xe9\x98\x1a\x53\xe7\x75\x4f\x9e\xa0\x69\x67\xbf\xa2\xa4\xd1\x88\xae\x54\x0b\xe1\x30\xda\x3a\x96\xa0\x71\x7d\xc9\x39\xe2\x1c\x72\x12\xc9\x0c\xd2\x52\x6c\x78\x10\x96\x66\x1b\x1d\xa0\xb8\x3d\x10\x39\x66\xa3\xd7\x1b\x78\x5f\x2a\x6b\x15\x06\x90\x39\x18\x2f\x3f\x8b\xd7\x9c\x9f\x63\x08\xbc\x22\x94\x0e\x82\xa1\x23\x3e\x11\x4a\x5d\x42\x02\x9c\xed\x52\x38\x6d\xd6\x1d\x46\x4e\xf9\xe1\x68\xf1\x3a\x8b\xc8\x93\x21\xba\x48\xa9\x25\xb6\x50\x66\x1e\x1b\x87\x6b\x89\x38\x5e\x42\xc2\xf7\xa8\xfc\x80\x80\x2d\x45\xc1\x75\x53\xcb\x7e\x4d\x06\x15\xe7\xfd\x1a\x9e\x8b\x76\x05\x6a\x60\x2d\x55\x76\x6a\x44\x66\x73\x7c\x6e\x20\x38\xbc\x54\x97\x43\xc3\x43\x31\xa4\x2d\x9a\x29\x01\x6e\x3b\x59\x81\x0b\x70\xe3\x49\xf6\xdc\x33\x45\x20\x86\x62\x2a\x01\xe1\x13\x1f\x2c\x40\x86\x23\x08\xfe\xea\x62\x06\x38\x17\x8d\xe3\x12\x0a\x22\xf1\xec\x12\x0a\x50\xc4\x2c\xe6\x8c\x62\x48\x9e\x7a\x98\xb3\xb3\xc5\xa2\xe9\x31\x24\x7f\xf8\x77\x2b\xdd\x5d\x74\xc3\x28\xee\xd8\x38\xcd\x35\x1b\xd5\x0e\x1d\x0a\x35\xf8\x33\xc1\xab\xcf\x9e\x0d\x7a\x60\xfb\x72\x06\x04\x41\xb1\x83\xe3\x28\x28\xe1\x67\x01\xa0\x3e\xab\x66\xc8\x6c\xfb\x7e\xc5\x6f\x32\xa6\x49\x68\x2c\xbb\x6e\x0e\x06\x54\xfa\x57\x98\x92\xc1\xcc\x3d\xe0\xcf\x4d\x27\x39\x17\x45\xf4\xa3\xf5\xc7\xea\x79\x22\x2a\x76\x58\x61\x37\x10\x7a\x07\x9b\x6e\x1c\x46\x3e\x2c\x0c\x0b\xa1\x90\x30\x60\x71\x1d\x43\xe4\x40\x4c\x24\x84\xa4\x70\x39\x11\x9e\x1c\x31\x88\x73\x0b\x33\x14\x6b\x55\x5d\x60\x28\x64\x87\x47\x7e\xf8\x08\x12\x4b\xcc\x6f\x55\x01\xf1\x82\x3e\x0b\x18\x6d\x50\x59\x82\x59\x28\xb0\xbd\xc1\x34\x42\x99\x39\xe6\xb0\x12\x13\x81\x29\xce\x1a\x28\x0c\x6f\x28\x65\x0c\xc9\x35\x03\xd0\x79\xd7\x4d\x46\x23\x97\x8f\xf2\x34\x78\x63\x24\xf3\x9e\xca\xfa\x34\x9e\x46\xce\xb2\x3b\x58\xc5\x8b\x49\x6b\xa3\x26\x92\x66\x84\xdd\x8c\xbe\x64\xad\x5e\x7d\xc4\xb1\xff\xc4\xe1\x38\xc8\x30\x82\xed\x91\x32\x1b\xe0\x22\x6a\xe2\x09\x04\xfb\xab\x7a\x65\xb2\x67\xbb\xf0\xab\x28\x04\x5e\x77\x18\x18\xf8\xe4\xe3\x8f\x9f\x1c\x47\x06\xf6\x36\xc3\xf7\xf1\xa7\x4f\x01\xe5\xc7\x3f\x7c\x42\xac\xf4\x08\x3c\x61\x4d\x2f\xdc\x66\x25\x7e\xfc\xe4\x9e\xba\xbe\x79\x3a\x2e\x2b\xa4\x1f\x81\x85\xcc\xff\x91\x10\xef\x64\xaf\x6a\x0e\x23\x45\x8b\x12\x93\xb5\xb3\x86\x42\xc9\x29\xa7\x20\x82\x18\xbd\x96\x16\x1f\x39\xa1\x16\xf1\xf7\x68\x7c\xb0\x97\xf3\x5d\x4c\x43\x46\xe3\x8c\x2f\xcf\x9d\x89\xdf\x30\x94\x2c\xbd\x44\x97\x15\x78\x8a\x56\x05\x4f\xb1\xe8\xbf\x41\x47\x03\x82\xdf\x2a\x08\x43\x9b\x10\x60\x54\xda\x6f\x41\x80\xf1\x6b\x13\x06\x8e\x67\xfb\x4d\x8d\xa0\x80\xb2\xa9\x19\x98\xa0\x5a\x01\x7a\xf8\xaf\x47\x84\xe3\x31\x8a\xd7\xfb\x1b\x2f\xc0\xe2\x99\xde\x1c\x21\xbc\x7f\x77\x74\x74\x26\xe8\x70\x90\xbe\x19\x1b\x0d\xd5\x18\x5d\x1c\xb1\x6f\x46\x08\xef\xf0\x4d\xf0\xd1\xd3\xcc\xdf\xde\x59\x1c\xbc\xf8\x8c\x36\x8f\x9a\x51\xfb\xf8\x06\xf7\xbf\xba\x69\x88\xc4\xc4\x3a\x98\x90\x30\x7e\xda\xdc\x3f\xa5\xcd\x3d\x8b\x8e\x37\x37\x44\xa0\xf6\x72\x9d\xed\x6c\xb9\x2e\x3a\x0b\x4d\x84\x32\xd4\xcf\xe9\xde\xcf\x11\xb2\x4f\x34\xa0\xe4\xc6\x01\xce\x6f\x6c\x19\xc4\xd8\xa6\x2d\x8e\x81\xb5\x27\xef\x19\xce\x6d\xe8\xfc\x25\x60\x8a\xbc\x4d\x4e\x1d\x59\xb4\xba\x7f\x75\x16\x90\x90\x62\x55\x45\x8d\x31\xae\x39\xd5\x19\x66\x1e\xf4\x9d\xca\x34\xea\x5f\x18\xd6\xa3\x15\xc6\x0b\x44\xaa\x10\x5e\x4c\xa3\x51\xcf\x2a\xfe\xb6\xb1\x2f\x6a\xab\x3e\x7a\x6b\xbb\x4f\x95\x5c\x87\x99\x90\x6b\x5b\x85\x5c\x0a\x7f\x01\x80\xc6\xee\x2b\xfc\x0c\xbf\x7e\x0c\x84\xfc\x47\x7a\xf9\x43\x9c\xb8\xea\xc7\x2d\x24\xe0\x53\xca\x90\xb0\x81\x84\x8d\x1d\xe0\x21\xb7\x1f\x5b\xf8\x6c\xe5\x01\xbe\xf6\xf0\xb5\x57\xea\x0e\x0b\x03\x83\xf0\xa3\xd8\x5a\xe3\x37\x90\x72\x80\xef\x83\x92\xf4\x0c\x1c\xbe\x30\x72\x16\x8e\x08\xfe\x38\x71\x15\x56\x47\xe9\xfc\x71\xe2\xaa\x50\x2b\xa5\xe2\xcf\x13\x57\xb5\xf2\x40\x49\xf0\xeb\xc4\x55\xa1\x7a\x4a\xc2\x9f\x27\xc0\xd7\xf9\x0d\x23\xc4\xdf\x27\xae\x0a\xed\xa0\x44\xfc\x79\xe2\xaa\x5e\xee\xeb\xd4\x2e\xfa\x05\xa9\xa9\x55\xf4\xab\xaa\x3e\xb6\xbd\xdd\xfd\x6e\x8d\xfa\x54\xf1\x95\xf8\x56\x39\xb2\xf0\x7f\xd1\xdb\x1d\x3b\xf6\xa8\x1e\xaf\x49\xe1\x8d\x5a\x78\x50\xa5\xb3\xb2\x5d\x54\x14\x45\xad\xd6\x66\x37\x44\x35\x3f\x59\x53\x3d\xf6\x04\x96\x5e\x19\x41\x1f\xf9\xc3\x4e\x2d\x2a\xb8\xe2\xf2\xd6\xd6\x4b\xe0\xe6\xe1\x72\x0b\xec\xe4\xbe\xff\xfb\xdf\x01\x5e\xff\xae\xfe\xf1\x0f\xf1\xf6\x97\x1f\x84\xfa\xdc\x28\xd5\x3a\xb1\x25\xdb\x5d\x06\xdb\xca\xcf\x2f\x0b\xc8\x45\x45\x0e\xe7\x64\x2c\x8a\x0e\xe7\x50\x7d\xf5\xff\x05\x00\x00\xff\xff\x93\x8a\x26\xf7\x24\x02\x01\x00") +var _confLocaleLocale_enUsIni = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\xbd\xeb\x72\x1c\xb9\xb1\x30\xf8\xbf\x9e\x02\xa3\x13\x0c\xcd\x44\x50\xad\x98\xf1\x77\xbe\xdd\x98\x10\xe5\xe5\x50\xa3\xcb\x39\x94\xc4\x43\x52\xf6\xe7\xd5\x2a\x6a\xd0\x55\xe8\x6e\x98\xd5\x40\xbb\x80\x62\xab\xc7\xe1\x37\xd8\x07\xd8\xe7\xdb\x27\xd9\x40\x5e\x70\xa9\xaa\xa6\x24\xfb\xec\x1f\xb2\x0b\x48\x24\xee\x89\xcc\x44\x66\x42\xee\x76\x75\xab\x5c\x23\xce\xc4\xb9\xd8\x49\x6d\x3a\xe5\x9c\x70\xaa\x5b\x3d\xd9\x58\xe7\x55\x2b\x5e\x69\x2f\x9c\xea\xef\x75\xa3\xaa\x6a\x63\xb7\x4a\x9c\x89\xd7\x76\xab\xaa\x56\xba\xcd\xd2\xca\xbe\x15\x67\xe2\x05\xff\xae\xd4\xe7\x5d\x67\xfb\x00\xf4\x2b\xfe\xaa\x36\xaa\xdb\x85\x32\xaa\xdb\x55\x4e\xaf\x4d\xad\x8d\x38\x13\x37\x7a\x6d\xc4\x1b\x83\x29\x76\xf0\x9c\xf4\x7e\xf0\x98\x36\xec\x38\xe9\xc3\xae\xea\xd5\x5a\x3b\xaf\x7a\x71\x26\xae\xe9\x67\xb5\x57\x4b\xa7\x7d\xa8\xe9\xcf\xf8\xab\xba\x57\xbd\xd3\x36\x60\xff\x13\xfe\xaa\x76\x72\x1d\x00\xae\xe4\x5a\x55\x5e\x6d\x77\x9d\x84\x02\xb7\xf4\xb3\xea\xa4\x59\x0f\x08\x73\x49\x3f\xab\xa6\x57\xd2\xab\xda\xa8\xbd\x38\x13\x17\xf0\xb1\x58\x2c\xaa\xc1\xa9\xbe\xde\xf5\x76\xa5\x3b\x55\x4b\xd3\xd6\x5b\xec\xe6\x07\xa7\x7a\x41\xe9\x42\x9a\x56\x84\x74\xe8\x82\x6a\x6b\x6d\x6a\xe9\xa8\x1f\xaa\x15\xda\x08\xe9\x2a\x40\x65\xe4\x96\x4b\x87\x9f\x95\xda\x4a\xdd\x85\x51\x0b\xff\xab\x9d\x74\x6e\x6f\x61\x68\xaf\xe8\x67\xd5\xab\xda\x1f\x76\x0a\x86\xe0\xc9\xed\x61\xa7\xaa\x46\xee\x7c\xb3\x91\xa1\x99\xf8\xab\xaa\x7a\xb5\xb3\x4e\x7b\xdb\x1f\x00\x8e\x3f\x2a\xdb\xaf\xa5\xd1\xbf\x4b\x8f\xe3\xf3\x3e\xfb\xac\xb6\xba\xef\x6d\x18\xda\xb7\xf0\xa3\x32\x6a\x5f\x07\x3c\xe2\x4c\xbc\x53\xfb\x1c\x4b\xc8\xd9\xea\x75\x8f\xa3\x18\x32\xdf\xc2\x57\xc0\x82\x79\x84\x09\xb3\x22\xb6\x95\xed\xef\x28\xf5\x65\xf8\x39\x42\x69\xfb\x35\xe5\x96\xed\x92\x46\xae\x15\xe5\xbe\x85\x8f\x02\xc0\x55\xb2\xdd\x6a\x53\xef\xa4\x51\x61\xe8\xce\xc3\x97\xb8\x0a\x5f\x95\x6c\x1a\x3b\x18\x5f\x3b\xe5\xbd\x36\xeb\x30\x07\xe7\x98\x24\x6e\x28\xa9\xca\xf2\x62\xda\xc1\x0e\x71\x96\xc5\x99\xf8\x8b\x1d\x7a\x71\x85\x9f\x98\x97\x15\x82\xcc\x58\xb2\x92\x8d\xd7\xf7\xda\x6b\x85\x95\xf1\x47\xb5\x1b\xba\xae\xee\xd5\xdf\x06\xe5\x7c\xc8\xba\x1a\xba\x4e\x5c\xd3\x77\xa5\x9d\x1b\xa0\xc4\x1b\xf8\x51\x55\x8d\x34\x0d\x74\xe7\x02\x7e\x54\xd5\x47\x6d\x9c\x97\x5d\xf7\xa9\xa2\x1f\x01\x18\x7f\xe1\x38\x79\xed\xa1\xb1\x94\x28\x6e\xbc\xda\xb9\x30\xd0\xe2\xa5\xee\x9d\x7f\xe2\xf5\x56\x89\xeb\xc1\x54\xad\x6d\xee\x54\x5f\x87\x0d\x09\x5b\xe9\xcd\x4a\x1c\xec\xf0\xb8\x57\xa2\x1f\x8c\xd1\x66\x2d\x5e\xd9\xb5\x13\xda\x38\xdd\x2a\xf1\x02\xa0\x4f\xc5\xae\x53\xd2\x29\xd1\x2b\xd9\x8a\x67\x52\x78\xd9\xaf\x95\x3f\x7b\x54\x2f\x3b\x69\xee\x1e\x89\x4d\xaf\x56\x67\x8f\x4e\xdc\xa3\xe7\xaf\x06\xdd\xaa\x4e\x1b\xe5\x9e\x3d\x95\xcf\x45\x23\x7b\xb5\x1a\xba\xee\x20\x96\x6a\x15\xf6\xca\xc1\x0e\xa2\xd9\x48\xb3\x0e\xfb\xe4\xe0\x37\xa1\x42\x6d\x84\xdf\x68\x27\xc2\x46\xfd\xae\x0a\xa3\xa4\xbd\xaa\xdb\x25\x13\x25\x68\x10\x24\xf7\xca\x89\xb7\x87\x9b\xff\xba\x3c\x15\x57\xd6\xf9\x75\xaf\xe0\xf7\xcd\x7f\x5d\x6a\xaf\xfe\x70\x2a\xde\xde\xdc\xfc\xd7\xa5\xb0\xbd\xb8\xd5\x2f\x7e\x59\x54\xed\xb2\xe6\x71\x79\x21\xbd\x5c\x86\x2e\xc4\xb9\x0a\x99\xb8\x95\x62\x1e\x6c\xa8\x40\xf2\x80\xbc\x39\x0f\x9b\x94\x36\xe8\xec\x76\x6c\x97\x35\xed\xe1\x88\xe3\x5d\xd8\xc8\xed\x32\x0d\xf0\x15\x0e\xdd\xe0\x94\x78\xf3\xee\xdd\xfb\x17\xbf\x08\x65\xd6\xda\x28\xb1\xd7\x7e\x23\x06\xbf\xfa\xdf\xeb\xb5\x32\xaa\x97\x5d\xdd\xe8\x30\x36\xbd\x53\x5e\xac\x6c\x8f\x3d\x5d\x54\xce\x75\xf5\xd6\xb6\xa1\x96\x9b\x9b\x4b\xf1\xd6\xb6\xaa\xda\x49\xbf\x81\x86\xf8\x4d\xe5\xfe\xd6\x85\xf1\x8a\x15\xde\x6e\x94\x80\xa5\x0b\x40\x76\xc5\xc3\x23\x5a\x6a\xe3\x42\x3c\x5b\xf6\xcf\xb3\x76\xc9\xa5\xb3\xdd\xe0\xa9\xc4\x7e\xa3\x0c\xcc\x93\xf3\xb2\xf7\x42\x3a\x26\xfd\x8b\x4a\xf5\x7d\xad\xb6\x3b\x7f\x08\xb3\x43\x6d\x18\x63\x47\x24\x8d\x34\xc6\x7a\xb1\x54\x02\xe0\x17\x95\xb1\x35\xee\xd4\x40\x36\x5b\xed\xe4\xb2\x53\x35\x92\xf4\x9e\x29\xd2\x5f\xc2\xe2\xc0\x82\x04\x21\x0a\x88\x30\x62\xe1\x98\x00\xea\x1c\x56\x8e\x34\x02\x90\x0a\xda\xea\x79\x0b\x99\x2e\xc4\x59\x43\xd2\x10\x13\x26\x2d\xac\x78\x1a\x78\xcd\x9c\xef\x76\x9d\x6e\xb0\xea\x57\x98\x97\x96\x4f\x38\x34\x69\xee\x73\x38\x98\x7e\xce\xcb\x16\xc1\xe0\xc3\x90\xf6\xa2\xa0\xc1\x50\x7e\xa3\x7a\x25\x36\xc3\x1a\x0f\x8e\xce\x0e\xed\x77\x40\xc1\x79\x7c\x13\x9d\x14\xd7\xd6\x7a\x9c\xf3\x08\x90\xaa\x38\xef\x3a\x38\xa7\x7b\xb5\xb5\x3e\x0c\x1c\x15\x0b\xb4\x68\xaf\xbb\x2e\xf4\xd4\xc9\x7b\xd5\x0a\x6f\x71\xbf\xb5\xba\x57\x4d\x40\xbc\xa8\xfa\xc1\xd4\xb4\xd8\xaf\x07\x83\x0b\x9e\xd3\xca\x95\x05\x50\xdb\xc1\x79\xb1\x91\xf7\x2a\x0c\x7c\x60\x16\xbc\x9d\x6d\x27\x74\xa9\x1f\x0c\x6c\xe1\x45\xd5\xda\xad\x84\x83\xff\x05\xfc\xa0\xef\x1c\xbf\x76\x42\xae\x56\xaa\xf1\x4e\xdc\xdc\xbc\x16\x4d\x67\x8d\x12\x1f\xae\x2f\x5d\xd8\x06\x9b\x7a\x67\x7b\x60\x12\x6e\x5e\x8b\x2b\xdb\xfb\x98\x96\x0d\x74\x80\x30\xc3\x76\xa9\x7a\xb1\xdf\xe8\x66\x83\xc3\x1e\x4a\x84\x55\xac\x7a\xa1\x9d\x18\x9c\x36\xeb\x53\xd1\xa9\xd0\x03\xed\x71\x01\x84\x3e\xf0\xaa\x0b\xe0\x2b\x25\xfd\xd0\x2b\x38\xf4\xeb\xe5\xa0\x3b\xaf\x4d\x1d\x2a\x24\x3c\x40\x16\xc4\x2f\x98\x01\x25\x6e\x20\xe3\x08\x7c\xbd\xb3\x3b\x64\x67\x60\x57\x2d\xb3\x72\x84\x30\x6c\xf9\x30\x81\x76\xa7\x70\xbd\x3b\x6a\x52\x58\x70\x83\x76\x1b\xb1\xea\xed\x56\xb8\x83\xf3\x6a\x0b\x05\x5b\xa9\xb6\xd6\x2c\xaa\x8d\xf7\x3b\x1e\x9b\xd7\xb7\xb7\x57\x38\x38\x31\xf5\xa1\xd1\x91\xd9\xda\x85\x55\xd2\x05\xc6\xca\x88\x80\x36\x2c\xe3\xa1\xef\x46\x2b\xfc\xc3\xf5\x25\xe7\x1c\x99\xb9\xd0\x84\xa7\xe1\xcf\x4d\x9a\x40\x58\x09\xce\x6e\xd5\x1e\xd6\xbb\x36\x02\x98\x9d\x45\xd5\xd9\x75\xdd\x5b\xeb\x79\xb9\x5f\xda\x35\x2e\xf1\x22\x23\xd5\xf4\x82\x17\x6d\x18\x9c\x7d\x1f\x98\xbf\xce\xae\x81\xe0\x85\xf1\x5a\x54\xca\x00\x69\x69\xac\x71\xb6\x53\x4c\x39\x7f\x85\x54\x71\x81\xa9\x48\x44\x67\x20\xe3\x2c\xbd\x09\x94\xa5\xd5\xd0\x63\x6f\x91\x9e\x06\x80\x53\x21\x3b\x67\xc5\xae\xd7\xc6\x87\x8a\x61\x8e\x08\xc3\xa2\xaa\xec\x2e\x94\xc8\x68\xc8\x7b\x4a\x48\x84\x03\xfa\x1d\xf3\x81\xd5\x83\x95\xa3\x9b\xec\x70\x72\x5b\xbf\xab\xe9\x24\xba\x79\x7b\x7b\x85\xc7\x11\xa4\xc2\x22\x38\x13\x2f\x7b\xbb\x4d\x09\x69\x7c\xde\x06\x7c\x00\x23\xdb\xb6\x57\xce\x9d\x8a\xeb\x97\x17\xe2\xdf\xff\xf0\xd3\x4f\x0b\xf1\xc6\x07\xb2\x17\x28\xc1\x5f\xc3\x0e\x96\x34\x0b\x09\xd4\xf6\xc2\x6f\x94\x78\x14\xc8\xd8\x23\xf1\x0c\x72\xff\x0f\xf5\x59\x6e\x77\x9d\x5a\x34\x76\xfb\x3c\xac\xd2\xad\xf4\x8b\x2a\xe4\xa8\x9e\x89\xc6\x8d\x32\xad\xea\x89\x71\xa5\xac\x8c\xf4\x52\x76\xc6\xc6\x22\xff\x1e\xc6\x7e\xa5\xfb\x6d\x9a\x20\xe6\xec\xc3\x4c\x85\x1c\xe6\x02\x75\x57\x1b\xeb\xf5\xea\x90\x40\xa1\xa7\xef\x42\x22\x2d\xcd\x8a\x76\x1a\x1d\x57\x71\x8c\x71\x5f\xc2\x0a\x7c\xef\x37\xaa\xe7\xe1\x76\x69\xbc\xed\x6a\x15\x98\x96\xd1\x6a\x79\x8f\xa9\xb8\x5a\x72\x90\xb8\x4c\x5e\x10\xc1\xb8\x78\xf1\x4e\xa8\x7b\x65\xc2\xc2\xde\xf5\xb6\x1d\x1a\x58\x39\xbc\x62\x3a\xd1\x2b\x67\x87\xbe\x51\xb4\x50\x23\x41\x0e\x4d\x0b\x54\xbf\x91\x5d\x77\x58\x54\x7c\x30\xae\x7b\x79\x2f\xbd\xec\xb3\x2a\x5e\x71\x12\xb5\x7e\x02\x3b\x69\x54\x2c\x11\x7a\xde\x0c\xce\x07\xea\x01\xad\x70\xd8\x28\xcc\x76\x42\xf6\x4a\x0c\xbb\xce\xca\x56\xb5\x62\x79\x00\x1a\xef\xc2\x5a\x68\xd5\x4a\x0e\x9d\x5f\x54\x2b\xd5\x06\xa2\xa4\xda\x9a\xea\xea\xac\xbd\x83\xca\x68\xa8\x5e\x32\x80\x38\x27\xa4\x97\x00\x71\xac\x64\x6c\x2c\x95\x8f\x60\xb1\x51\x54\x83\xb7\xc0\xa2\xa4\x7c\xbb\x53\x86\xba\xc1\x8c\x89\x08\x7c\x47\x2b\xac\x11\x9d\x5e\x52\xa7\xd3\x58\x8e\x98\x0c\x1e\x9d\x9b\x20\xdf\xe6\x79\xb3\x05\x26\x83\x0a\x0b\xde\x8d\xcb\x9e\x0a\x6b\xba\x03\x31\x23\x61\x8b\xa1\x00\xc9\x7c\x89\x4b\x64\x29\x8a\x6b\x4c\x91\x48\x6a\x2b\xf3\x63\xb5\xd7\xc8\xf6\x8a\x7b\xd9\xe9\x36\x60\x64\x04\xe1\xb4\x98\x6f\xcb\xa2\x22\x5e\xb9\x26\x49\xbb\xbe\xd7\x20\xc7\xc6\x2d\x86\x28\x49\xfa\x0e\x23\xfc\xa7\x00\x10\x04\x64\x37\x5b\x36\xb6\xe6\x7d\xe8\xa4\x8b\x72\x2c\xae\x93\xd0\x5d\xa8\x21\xf0\xef\xee\x54\xdc\x6b\x60\x03\x68\x91\xc3\xb8\x2c\x03\x8f\xd9\xa9\x50\x95\x53\x0a\x30\x08\x6d\x9e\x0e\x3b\x2c\xb3\x20\x21\x8e\xe4\x2a\xe6\xfb\x03\x3b\xd8\x5a\xf3\xd8\x0b\xa3\x90\x6d\xe1\x51\x1d\xb1\x7d\xa2\xd7\xeb\x8d\x17\xc6\xee\x17\xc4\xfd\xf6\xce\xe3\xe8\x80\x6c\xa1\xa8\xa5\x1e\x1a\xc1\x7b\x4f\x0e\xde\x06\xfa\x02\x5b\x4f\xac\x7b\x69\x60\xf9\x31\x62\xe5\x62\xbb\x22\x43\x08\x79\x13\x19\x12\x81\xc6\xc2\xfc\x84\xff\x8c\xd4\x8f\x88\x5e\x9e\x47\xd4\x2e\xc1\x60\x69\x56\x08\x60\xc5\x48\x5d\x49\x00\xac\xd7\x16\x04\x50\x16\xf8\x02\x87\x55\x79\xe5\x7c\xbd\xd6\xbe\x5e\x05\x12\x1c\x10\xbf\x0c\x08\x02\xc3\xa7\x9c\x17\x8f\xd7\xda\x3f\x16\x8d\xdd\x6e\xa5\x69\x7f\x16\x27\xf7\x24\x3b\xfc\x21\xd0\xd6\xb0\x3f\x75\x07\x23\x44\x62\x6d\xaf\x50\x44\x60\x95\x4a\x6b\x95\x13\x81\x67\x76\xc3\x0e\xb8\x8d\x28\x77\x91\x78\xd8\xda\xbd\x09\x54\x04\x86\xdc\xae\x56\xba\xd1\xb2\x13\x4b\x6d\x64\x7f\x88\x58\xe0\x6c\x3a\x71\xa7\xe2\xdd\xfb\x5b\x00\x5c\xdb\xc0\x0c\xb5\x0c\xb0\xa8\xb4\x81\xd5\x1e\x64\x0c\x5a\x11\xb9\x80\xc5\x49\x1a\xdb\xd2\xd8\x3e\x30\x04\xd0\x1b\x2e\x78\x84\x7d\x0e\xdc\x04\x4a\x27\x3a\x08\xb8\x00\x0b\xe5\x22\xa7\x1b\x86\x61\x2b\x7d\xb3\x21\x3e\x18\x97\x90\x0b\x4b\x30\xb4\xb4\x19\xfa\x5e\x19\x5c\x59\x3f\x8b\x13\x27\x9e\x3c\x17\x27\xd9\x61\x5d\x6f\xb5\x0b\xac\x65\xe4\x53\xf9\xe4\x16\x90\x40\xb9\xc5\xe9\x9c\x7a\x9b\x1f\xee\x50\x30\x9c\xf0\x62\xa5\x55\xd7\x8e\xdb\x1b\xd8\x78\x3c\x3a\xd7\xd3\x99\x0e\x99\x02\x33\x07\x24\x08\xc5\xd8\x14\x3b\x2d\x2e\x2d\xde\x48\xd9\xe0\xe6\x15\xf2\x9a\x73\x03\xb2\xfb\x67\xe2\xcf\xaa\x6b\xec\x56\x7d\x27\xfe\xac\x1e\xf7\x4a\xac\x3b\x98\x75\xe9\x49\xc0\xb7\x4e\xc1\x8a\x3c\x45\x29\x61\x35\x18\x38\x84\xbc\xbc\x53\xa0\x13\x48\xdd\x9e\xe3\xff\x8e\x4e\x54\xf5\x71\x63\xb7\xea\x53\x35\xa0\x74\x65\xbb\x36\xca\xe7\xb0\xfd\x6c\x8f\x0c\x4d\x14\xd6\x13\x4c\xdc\x59\x6e\xaf\x7d\xb3\xa9\xa3\xe6\x32\x0c\xa4\x57\x9f\x61\xbe\x20\x2b\x29\x32\xc3\xb6\x0c\x59\xd5\xf6\x00\x6b\x2a\x74\xfc\xed\x21\x2d\x29\xad\x5c\xe5\x36\x76\x0f\x6a\xc0\x08\x71\xb3\xb1\x7b\x50\x00\x16\x32\xd8\x62\xb1\xa8\x1a\xdb\x75\x72\x69\xc3\xac\xdc\x27\xf8\x8b\x3c\xb5\x44\xbe\x3d\xd4\xb6\x5f\x53\xb5\xa5\xda\x6b\x7b\x20\x4d\x1b\xe5\xa2\xa6\xcd\x55\x40\xaf\x49\x45\x0b\x64\xfd\xc4\x55\xa4\x60\x5a\x68\x53\x83\xfe\x8a\x6b\x7e\x63\x50\x3a\xca\xdb\x59\x55\x1f\x49\x7d\xfb\xa9\x62\xb8\xa2\x4d\x48\x4a\x71\xd0\x5d\xa1\x53\x74\x23\xa5\xa2\xab\x9c\x92\x3d\x6c\xa6\x1b\xf8\x51\x55\x1f\xe5\xe0\x37\x9f\x32\xf5\x6a\xcd\x2b\x8f\xd5\xac\xa0\x02\x24\x12\x9b\xf8\xc4\x8d\xda\x05\x96\x72\xeb\x60\xc9\x76\xbd\x92\xed\x81\x04\xd0\xb8\x78\xff\x88\x27\x9a\x36\xe1\x20\xf8\xae\x72\x36\x50\x9f\xfa\x1b\x51\xfc\xa2\x4d\x8b\xe5\x4b\x6e\x00\xf5\xbe\xdb\x1d\x2c\x13\xdb\xf7\x87\xd3\x52\x35\xb1\x91\x4e\x2c\x95\x32\x2c\x42\xb6\x0b\x56\xfc\x84\xe5\x25\x1b\x24\x20\xa0\xab\x86\x1d\x88\x25\xed\x84\x4d\x09\x2d\x44\x9a\x4f\xb5\xe0\x11\xe0\x98\x63\x0d\xac\xda\x37\x57\x11\x06\xbd\x26\x96\xe9\x4c\x9c\x0f\x7e\xa3\x8c\x67\x79\xee\x06\xd2\x2b\x60\x41\x61\xff\x35\xb2\xab\x7a\xb5\x55\x41\x4a\xac\xb7\xa8\x6b\xc6\x2f\xf1\x56\x55\x2b\xdb\xaf\x61\xb7\xe2\x76\x3a\x13\x2f\x21\x21\xed\xaf\x00\xa0\x7c\x7e\xb8\x11\x04\xa7\xfc\x91\x75\xfb\xb5\xb1\x7b\xd0\xf9\x86\x63\x77\x3c\x8d\xc3\x0e\xce\x73\x3e\x2c\x91\x19\x03\x39\xc0\x29\xe3\xd3\x64\x9c\x0b\xa3\xf6\x22\x87\xa2\x21\x8b\x33\x12\xe0\x03\x61\x7c\xb6\x7c\x7e\xe2\x9e\x3d\x5d\x3e\x8f\xe7\x55\xb3\x51\xcd\x1d\x6e\x01\x6d\x96\xf6\x33\x28\x98\x88\x63\x30\x81\x24\x9c\xb4\x62\x63\x87\x9e\x84\xbc\x20\x04\x79\x05\xb9\xc5\xdc\xef\x7a\x4b\xdc\x42\x03\x1b\x1b\xf6\x58\x5a\xd7\xa0\x06\x0e\x2b\x1b\x0e\x55\x5e\xda\xbb\xde\x6e\xf4\x52\xfb\x40\x00\x41\x27\x72\x09\xff\xaf\x28\x59\xb5\x23\x88\x8c\x29\xea\x23\xb9\xd6\x4e\xec\x62\x01\x3c\x57\x3a\xbb\x5e\xa3\x52\xf5\x0b\xcb\x23\xb0\x89\x30\x94\x9d\xde\x6a\x3f\x59\xdd\x81\x8e\x4b\xda\x25\xa4\xb8\xe6\x69\x82\xee\xa4\x81\xee\x55\xa3\x8c\xef\x0e\xb1\xbe\xbd\xd4\x5e\xfc\x41\x6c\xb5\x19\x7c\x10\xca\x37\xca\x08\xdf\x1f\x84\x5c\xcb\x50\xed\x46\xba\x7a\x30\x34\x63\xaa\xe5\xf5\xfe\x5a\x03\x57\x10\xea\xe5\x5d\x99\x41\x95\x82\xaa\xf8\x3e\x4e\xe6\x0f\x0b\x52\x61\x43\xa9\x70\x52\x87\xf6\xe8\x20\x55\xc9\xb9\x65\x61\xfb\xc8\x4d\x12\xa0\x90\xb0\x84\xac\x51\x69\x61\x74\xba\xb9\x83\xf1\x5a\x0e\xde\xdb\x20\x31\x77\x61\x31\xc2\x88\xc5\x16\x5f\x00\x14\xe8\x33\x00\x5b\xc8\xc3\xd5\x34\x1e\xa3\x0a\x8a\x05\x08\x3f\x5f\xf8\xfb\x5e\xfd\x90\x8a\xc7\xbd\x03\x25\x08\x05\x96\xce\xb6\xd5\x35\x64\xe2\xed\x04\x6f\x3e\x3e\x55\x1b\xd2\x17\xc7\xb9\xec\xcb\xb1\x80\xfc\xb0\x43\xd4\xe7\x9d\xee\x83\xec\xd4\x03\x37\x05\xa5\x17\xa3\xba\x92\x72\x61\xda\x63\x5f\xb6\x38\x1d\xbc\xde\xda\xda\x6d\x90\x0f\xe2\xe6\x89\x4e\x99\xb5\xdf\xa0\xfa\x30\x70\xe0\x5e\x84\xf1\xf6\xe2\x7f\x82\xde\x5b\x36\x5e\xf5\x6e\x51\x19\x6b\x6a\x20\x47\xd9\x26\x7a\x67\xcd\x13\x24\x51\x2c\x52\xb1\x02\x97\x6e\x13\xb8\xe2\xb0\xde\x7a\x3b\xac\x37\xa4\x73\xac\x70\xf7\xf8\xbd\xad\x57\xb2\xf1\x70\x33\x75\xbb\xb7\x4f\xe8\xa3\x24\x86\x13\x60\x18\x03\x1a\xcc\x11\xdd\xbc\xa2\x9c\x69\x19\x65\x02\x19\xef\x55\x63\xef\x55\x7f\xe0\xb9\xf8\x35\xa4\x0a\x29\x7c\xaa\x9c\x41\xc4\x3c\x9e\x98\x5d\xb4\xf8\x9a\x52\x8f\xc3\x73\x8d\x0c\x29\x2e\x1e\x68\x66\xd6\xc1\x99\x16\xee\x8e\x76\x32\xf1\xda\x47\x2a\x85\x6f\xa6\x20\x83\xc3\x35\x46\xa5\x16\x55\xf5\x31\x2c\xea\x4f\x15\xed\x14\x95\x4d\x35\x51\x11\xce\xe1\x1d\x85\x64\x33\xc2\xb3\x68\xf4\x27\xd5\xeb\xd5\x01\x81\x0a\x1a\x71\x6c\xc3\x94\xeb\x35\x9e\xba\x89\xb5\xbd\xce\x69\x3b\x25\xaf\x86\xee\x54\xec\x91\xe7\x4d\x65\xa2\x46\x8a\xb8\x61\x11\x28\x05\xdc\x80\x57\x1f\xb7\xb6\x95\xdd\xa7\xea\x00\xf7\x7a\x7f\x51\xae\x32\x70\x97\x6a\xab\xad\x6d\xb1\xd0\x5b\xf8\x51\x55\x1f\x57\xb6\xdf\x7e\xaa\x02\x3f\xf5\x6e\x24\x43\x06\xc6\x8b\xd2\x32\x39\x06\xb2\x7e\xcd\xef\x8a\x63\x9f\xaf\x66\xc4\xcd\x6b\x95\xae\x8c\xe1\x57\xec\xfc\xcd\xcd\xeb\x5b\xd6\x91\xdd\xbc\x16\x77\x8a\x70\xbf\xf6\x7e\xe7\x3e\x80\xe6\x17\xd5\xb8\x1f\xae\x2f\xab\x2b\x79\x08\xb2\x1d\x26\xd3\x07\x64\xdc\x2a\xb9\xa5\x46\x86\x9f\x88\x22\x6c\x16\x4a\x0c\x3f\x6d\x9f\xdf\x79\x54\x20\x74\xfc\x5a\x08\xb7\x48\xe4\xaa\x77\x6a\xff\x4b\x2f\x4d\xc3\x85\x03\x37\xb8\x84\x04\x2c\x79\x61\xb7\x5b\xed\x6f\x86\xed\x56\xc2\xc6\xc0\x6f\xe1\x30\x81\xb2\xdf\x2a\xe7\xf0\x42\x9f\xb2\xb7\x98\x40\xd9\x17\x1b\xab\x9b\x2c\xb7\x81\xef\xea\xb6\x57\x8a\x6a\x7d\xc9\xd7\x67\x15\x48\x00\xc8\x9e\xe2\xaf\x2a\x6a\x48\x14\xdd\x73\xff\x36\xb9\x4a\xfa\xad\x92\xdd\x6e\x23\x41\xc6\xc8\xc0\x22\xd9\x0b\x99\x66\xd8\xaa\x5e\x37\xa0\x65\x93\x6e\xf3\xfd\x93\xfa\x87\x9c\x08\x16\x28\x5a\xeb\xbf\x05\x4d\xf8\x8d\x84\xf1\x28\x36\xd7\x7d\xb9\x69\xa7\x80\x51\x04\x94\xa7\x80\xd0\xf6\x02\xca\x95\x98\x9d\xfe\x9d\xc7\x02\x50\x85\xef\x88\xef\x24\x40\x80\xc0\x99\xa0\x62\x7d\xc0\x97\x04\xe1\x93\x8f\x81\x13\x57\xa2\xde\xca\xcf\x5f\x2a\xb8\xb5\x33\xe5\x50\xc5\x9e\x0a\x91\xaa\x40\xe2\xf1\x56\x92\x89\xc5\x6f\xd5\xd0\x3f\x00\xfc\xe1\xfa\x72\xf1\x5b\xa5\x4d\xd3\x0d\xed\xd1\x86\xb8\x61\xe9\x7c\x1f\xd8\xae\xc7\x27\xee\x71\x40\x69\xee\x8c\xdd\x9b\x08\xff\x01\xbf\x05\x7c\xff\xcc\x46\x1b\xb5\x36\xa4\xbe\x48\xe6\x1b\xa2\xd5\x6d\xe0\x62\x40\x0d\xb1\x48\xe7\x69\xae\x9a\x88\xbb\x1c\x14\xbb\xa4\x3a\x8a\x84\x2e\x88\x08\xa0\xa5\x91\x5b\xb5\x48\x86\x26\x75\x60\x86\xeb\x20\x81\x9b\x5c\x64\x0e\x4c\x00\x53\x69\x60\x97\x01\x62\x81\x37\x8c\xd3\x72\x23\x32\x74\xb4\xb8\xed\xd7\x33\xa5\xdf\x4f\x6f\x3f\x8f\x94\xf7\x4a\x6e\x67\x10\x44\x02\x73\xb4\x20\xce\x3d\x14\x82\x43\x67\x44\x21\xa7\xe5\x02\xd4\x22\x8d\x52\x1c\xf0\x7c\x6e\x72\x05\x43\x1c\xe7\x52\x01\x55\x48\x59\xf5\x56\x3b\x9e\xac\xdb\x0d\xa8\x1a\x73\xd6\x21\x6a\xaf\x3b\xd5\x04\xae\x9a\x97\x9c\x03\x99\x35\xa4\x80\x6d\x00\x2b\x2e\x17\x15\x1c\xd5\x3d\xd8\x12\x65\x1a\x2e\xd2\x38\xd2\x79\xb9\x95\x77\x4a\xb8\x21\xb0\x66\x1b\xe9\x49\x4a\x29\x27\x2b\x70\xc9\x80\x0a\xeb\x8c\x2d\x9f\xa0\xb7\x7b\x13\x8e\xb7\x2f\xe1\x07\xb0\x6f\x44\x9d\x2b\x44\xa7\x88\x09\x79\x04\x3a\x86\x36\x6a\xeb\xd4\x67\x0d\x97\x64\xaf\xf4\xbd\x22\x7d\x5d\x54\x53\x42\xde\xa2\xea\xa4\xf3\x75\x58\x8f\xd8\x5c\x10\x67\xed\x7d\xd8\xac\xa1\xbe\x90\x8b\xe5\x50\x2d\x47\x9d\x0a\xeb\x8f\x34\x7f\xb2\xeb\xec\x5e\xb5\xa7\x42\x82\x2c\xd3\x13\x75\x93\xdd\x5e\x1e\x5c\xc1\xc6\x5a\xc3\x63\x12\x88\x93\x39\x88\x35\xb4\x2a\xd7\x91\x2c\xaa\xa4\xf0\x73\x9b\x3a\x1c\xb9\x91\x4d\xbf\x0f\xac\x0c\xaf\x11\xbb\x4a\x37\xd7\x01\x0a\xf5\x7c\x3f\x8b\x13\x57\x0d\x78\x55\x00\xe0\x87\x0c\x0d\xd8\xc9\xd0\x59\x74\x9f\xb1\x45\x84\xe2\x34\x08\x33\x62\xaf\xc2\x3a\x1b\xb6\x34\xd2\x1a\x84\x48\x68\x50\xa6\xc6\x1d\x96\x9d\x7a\x82\xd2\xb1\xe6\x95\x1d\x15\x8d\x23\x3e\x38\x36\xec\xbe\xaa\x9c\xd7\x5d\x17\xc6\x99\x6d\xc7\x0a\x69\x15\x72\x61\x03\xc2\x20\xb9\x8d\xde\x09\x0b\x37\x73\xf9\x00\xa6\x45\x9b\x09\x83\xde\x8a\x56\x81\xf4\x6d\x7b\xe1\x7b\x69\xdc\x4a\xc1\x55\xe5\x16\x95\xfd\x0b\xaa\x3a\xc8\x96\x68\x2b\x76\xa4\x66\x54\x64\x40\xd5\xf9\xc9\x03\x33\x97\x4d\x53\x59\x35\x1a\x0a\xc0\x7d\x18\xb4\x01\x46\x35\x61\x72\xdc\x86\xb0\xc8\x26\x43\x00\x57\xe3\x85\xd9\xc7\xec\x38\xac\x0a\x2d\x1c\xd6\x0f\xeb\xec\x0b\xfd\xae\xd0\x16\xab\x46\x26\xa9\xd8\x13\xb7\x90\xc3\xec\xd3\x78\x5b\x54\x1f\xc3\xaa\xff\x54\xa1\xfc\x54\xc7\xfb\xc6\x0b\x94\xa7\x90\xeb\x86\xc4\xea\xaf\x56\x9b\x1a\x2e\xcf\xfe\xc3\x6a\x03\x37\x6d\x55\x61\x5f\x32\x52\x11\x92\x15\xdc\x01\x0c\x5f\x96\x9d\x6e\xd8\x14\xee\x50\xad\x2c\xec\x26\xd0\x20\xbe\xe4\xdf\x95\xf3\x32\x10\x09\xb2\x8e\x08\xbf\x0a\x95\x24\x16\x42\x7d\xf5\x4b\xfe\x4d\xa9\x31\xa9\x1a\x4c\x4c\xf9\x40\x3f\xab\x2a\xf0\xd6\x0b\x20\xec\x41\x1c\x80\xcb\xd6\x8c\x9c\x87\xd3\x3a\xac\x7f\xce\x5b\x64\xf0\x3b\xe9\xbd\xea\x0d\x5e\x8d\x20\x09\xc8\x8b\x52\x76\x44\x01\x04\x1c\xc1\xc2\xd8\xb2\x89\xe0\xa7\x2a\x19\x12\xb2\x0d\xe1\xdc\x9d\x50\x1c\x7e\xbc\x3e\xad\x68\x57\x3b\x62\xcd\xff\x53\x1d\x5c\xe5\x54\x33\xf4\x38\xac\x37\xf4\x73\x5e\x45\x4b\x3a\xe3\x91\x9d\x64\xb2\xe1\x70\xa5\x49\x87\xab\x68\x8d\x9d\x89\x17\xf8\x83\x95\x54\xd5\x0e\xa6\x2f\x33\x86\xa4\xf9\x8c\x5d\x21\x5b\xd8\x5c\x39\x55\x6a\x6a\xb4\x13\x88\x04\x98\x15\xbe\x7b\x83\xa3\x79\x65\x7b\xa0\x92\xf1\x16\x4f\x75\x70\xf8\x99\xec\x4e\xdf\x9d\x42\xb9\x00\xb6\x57\x4b\xbe\xe8\x4d\x16\x32\x5b\xd9\x2a\x71\xaf\x65\x54\x6e\x65\x2c\x53\x3c\xd3\x59\x61\x5a\xe8\x11\x40\x14\x42\x65\x36\x73\x4c\x3c\xcd\xde\xb2\x56\xc1\x6f\x94\xc6\x7b\x56\x03\xdc\xd4\x6a\xe8\x3a\x3e\x17\x5f\x0e\x5d\x87\xf6\x5e\x53\x2b\xe4\x50\x05\xdd\x37\x5f\xd2\xcf\x6a\xd8\xb5\x41\x70\x4d\x63\xf9\x01\x12\xe2\x58\x96\xf9\x99\x40\x0a\xa3\xca\xc5\xa2\x5a\x13\xc1\xdb\x4c\x42\xed\x0e\x0b\xde\xcd\x33\xd6\xc5\xb4\xb1\xdb\x31\x48\xd2\xfc\x01\xa5\xa2\x8e\xc3\x44\xa1\x41\x0f\x0c\xed\x5e\x1e\xc4\xc6\xee\x45\xa7\xcd\x9d\xa3\x99\x0a\xe3\x94\x0b\xe7\xa0\xac\xf5\xda\x0c\x8a\xc4\xa5\xf0\x73\x6a\xcb\x4a\x06\x00\x64\x0e\xb0\x3c\xb0\x46\x0c\x0d\x06\x68\x03\x88\xe5\x41\x80\x44\x78\xdc\xf2\x60\x6c\x72\xc0\x16\x07\x7c\x93\x0e\x06\x0f\x89\xae\x7d\x70\x4a\x5c\xa0\x11\x04\xed\xb1\x66\x63\xad\xa3\x5b\x88\x44\xfd\x42\x1a\x28\x04\x89\xf8\xd1\xb4\x24\x3c\x38\x6b\xe7\x6c\x8c\x01\xfb\x9c\x76\x50\x4d\x37\x84\x09\x9a\x36\xd4\x05\xdd\x1c\x9e\x33\x4e\x34\xb6\xe0\x3e\x01\x8d\xa9\xf5\x16\x85\xd6\x0f\x6c\x8a\x01\x13\x1e\xe5\x11\xc8\x5e\x94\xed\x19\xaf\x12\xaa\x97\xaf\xf1\xbe\xb0\x58\x78\x29\xe4\x17\xd1\x38\xfd\x91\x2e\xd9\xae\x60\xd9\xb8\x1f\x31\x3f\x0c\x5e\x96\xff\x0e\xec\x08\xa2\x6e\x25\xec\xb1\x7a\x04\x42\xea\x88\x02\x72\x96\xe9\xe6\xba\x8e\x32\xdc\xa3\xd6\x4f\x76\x0c\x97\xdb\x4b\x57\x74\x9c\xd6\x78\xbb\x60\x83\x53\x61\xec\x1e\x8d\x12\xc0\x32\x10\xad\x23\x0d\x58\x34\x20\x8a\x8c\xa8\x50\xa5\xff\x2a\x49\x49\x98\x51\x62\x71\x51\x50\x39\x47\xc2\xa9\x1c\xdb\xbe\xc7\x7c\x32\x7f\x2f\xe8\xab\x62\x83\xb2\x9c\x02\xef\x7a\x0d\xea\x91\x92\x12\x4f\x68\x6f\x41\x67\x81\xcc\x5a\x30\x8f\x4a\xe4\x75\x51\x31\xaa\x70\x7a\xc1\x2f\x4e\x89\x0a\xb8\x1b\x05\x36\xc2\x94\xcc\x1b\x81\x73\x71\xfd\xc7\x36\x76\x8a\xa8\x22\xf6\xf5\x05\x25\x8c\xf2\xb9\x33\x98\xcd\x13\x32\xd3\x9b\x3e\x70\xf2\x2a\x1e\x1c\xda\xa0\x75\x5a\x34\x33\x28\xa8\x93\x78\x01\xe4\x4a\xec\x25\xde\x07\x31\xb1\xfa\xe3\xb8\xf6\xb4\x8e\x7e\x2d\x6f\x92\xb0\x6f\xe5\x2e\xfa\xae\x92\x6d\x0b\x6b\x3c\x19\x6b\xb4\xb0\x78\x4a\x6d\x64\x80\xca\x21\xd0\x98\x23\xa6\xd6\xc5\x3d\x97\x43\x95\xd3\xd7\xdf\x6d\x05\x2e\xe4\xbf\xe1\x5a\xab\xa8\x2a\x5d\x6b\xc5\x46\x8e\x76\xd8\xa4\x97\xd3\xad\x26\xdb\x16\x18\x22\x5a\xcb\x19\x5b\x43\xab\x39\x72\x37\xa1\x16\x94\x63\xc2\xf0\xfc\xa7\x3a\x00\x0f\x44\x2b\x01\x8e\x26\xed\x84\x04\xfb\x54\x30\x6a\x47\xa1\xc6\x4d\xa4\xe6\x72\xce\xcf\x41\x66\x73\x8a\x60\x81\x3f\x94\xe6\x10\xf8\x7d\xde\xeb\x6a\x1b\xc6\x61\x2d\xa3\xd9\x4f\x3c\xd7\x4a\x8e\x1c\x45\xa5\x8d\x5e\x6f\xba\x83\xd0\xdb\x9d\xed\x3d\xac\x24\xb6\x7a\x48\x72\x6c\xf8\xea\x55\x63\xd7\x46\xff\x0e\x03\xbb\x45\xf3\xe5\x78\x8f\xf2\xcc\xf9\xde\x9a\xf5\xf3\x17\x60\xdd\x74\x17\xc8\xcf\xc6\xee\xff\xf8\xec\x29\xa5\x8b\x0b\x98\x42\x3b\x78\xf1\x4a\xfb\xd7\xc3\xf2\xb1\x13\xeb\x41\xb7\x70\xe4\x3e\x93\x99\xbf\x05\x59\x44\xa1\x6d\xf9\xde\xc4\x61\x01\xef\x0b\xdb\x0b\x67\xbb\x7b\x35\x2a\x62\xb7\x5b\x9c\xde\x65\xa7\xb6\x08\x09\xed\x07\x23\x2a\x65\x60\xe4\x54\x4f\xe3\x73\x73\xf3\x7a\x11\x97\x78\x9a\x1f\x9a\x36\xe6\x53\x0b\x85\x0b\xf1\x88\x01\xb8\x21\xf5\x69\x3a\x88\x40\xdb\xc2\xa5\x80\xff\x98\x96\x82\x79\x74\x81\x67\x99\xa8\x7a\x40\x78\x09\x28\xb8\xb8\x38\x0b\xed\x40\x3e\x2c\xa4\x35\x13\x85\x2d\x2d\xac\x6c\xf1\x86\xb3\x87\xe5\x6a\xe0\xdf\x63\xf3\x60\xb9\x8e\xf6\x37\x51\x34\xec\x3b\xd1\x33\xee\x40\x46\xd1\x68\x44\x12\x4d\x1b\xc3\x14\x54\x4d\x21\x4d\xe3\x56\xe4\xd4\x0c\xcd\x45\x91\xa2\xe1\x82\x54\x0e\xe8\xf5\x57\x52\xb3\x49\xbd\xa9\xe3\x5c\xdd\x57\x50\x34\xe8\xd3\x39\x0c\x87\x35\xa8\x43\xa1\x89\xba\x24\x8d\x09\x64\x18\x5b\x67\xd2\xde\x3b\x4b\xb7\xc1\x82\x13\x61\x4e\x9c\x0f\x1c\x4b\xbe\x95\x43\x23\xc0\x10\x1f\x0d\x09\x41\x09\xf3\xbf\x89\x56\x1e\x5c\xe5\xed\x9d\x32\x33\x45\x20\xfd\x58\xa1\xea\x2b\xef\xf7\xb2\x0b\xac\x50\xc3\xe0\x50\xe4\xf4\x83\xfb\x39\xcf\x43\xff\xb8\x02\xdc\xae\x56\x21\x6d\xb5\xaa\x8a\x2b\x34\xb2\x97\x43\xd3\xca\x3c\x8b\x5d\x09\xa2\xe5\x68\x9e\x09\x46\x3a\xc5\xcd\x99\x63\x73\x1d\xb0\x93\x97\xe5\x9e\x0d\xbb\x96\x08\x52\x76\xb9\x86\x3b\x37\x50\x2d\xe1\xe4\x4a\x89\x5d\x27\x1b\x95\x78\x9a\xc1\x21\xe9\x81\xc3\x99\x2f\xf9\x34\x5e\x95\x77\xd6\xa9\x31\xb1\x1b\xe9\x28\x33\x71\x71\x91\x37\x7d\xe3\xfd\x0e\x6d\x3a\x72\x3b\xff\xc4\x32\x90\xe5\x00\xb0\x3f\xa2\xb3\x66\xad\xfa\x68\xfb\x19\x9a\xb4\xeb\x24\x59\x8e\xc2\xee\x0d\xdd\x8d\xbc\x50\x34\x58\x60\x33\xcf\x16\x8a\xa4\x91\xf8\xf8\xe3\x27\x77\xf2\xf1\xa7\x4f\xee\xd1\xf3\x2b\xd5\x3b\x30\xac\x3f\xc7\x6e\xdc\x86\xe5\x01\x23\x22\x1d\x5d\x78\xf7\xaa\x0d\x1d\x92\xdd\xa9\x50\x8b\xf5\x42\x3c\x0b\x43\xf0\xfc\xe4\xe3\x1f\x3e\xb9\x67\x4f\xe1\xf7\x62\x3a\x99\xc9\x32\x1f\xe7\xf6\xeb\xd6\x52\x23\x4d\xfd\xb7\x91\xb7\xd7\x17\x46\x15\x6c\xf5\xc2\x44\x85\x83\x17\x78\xfb\x72\x09\xf2\x05\xad\x53\x4d\xaf\x3c\x88\xf3\xa8\x0a\x45\x51\x17\x52\x8b\x12\xa1\xa2\xe9\xa5\xee\xed\x46\x19\x2a\xc7\xa9\x45\x29\x52\x14\xf2\x45\x6a\x35\x73\xc5\x5b\x62\x4b\x8b\x69\xa4\x9c\x8d\xf6\x03\x91\x11\x89\x46\x1f\xdf\x55\xc5\x35\x75\xd8\xc1\x5f\x85\x75\x56\x59\x5f\xa2\x37\xc4\xb3\x1a\xf5\xdd\xcc\x64\xf2\xfd\xcb\x74\x32\xe5\x51\x2d\xe6\x14\x4b\x22\xa0\xc7\x11\x80\x31\x85\x41\x99\x60\x4c\xac\x47\xe4\xf5\xd8\x95\xbd\x8b\x6b\xef\xe8\xa2\x2b\xef\xf4\xdd\x03\xa8\x88\x74\x16\xd7\xf1\x64\xe9\x1f\xe8\x67\x74\xf2\xf3\x2a\x70\x32\xb2\xd7\xdd\xe1\x5b\xc9\x82\xf8\x55\x36\x9b\x92\x26\x01\xe5\x61\x93\x6f\x3a\x23\x1a\x75\x2a\x9e\x2d\x9f\xd3\xa4\xdd\x29\xb5\x23\x96\x0c\x9b\x34\x22\x60\xcf\x9e\x2e\xcb\x6d\xd9\x2b\xf4\xcb\xf3\x6a\x4a\x31\xaf\x63\xde\x83\x03\x73\x04\x41\x5c\x1d\x19\x9a\x92\xc2\x1e\x59\x16\xc7\x31\x96\x3c\xc6\x08\x59\x3c\x75\xb9\xf4\xf8\xdc\x9d\x1e\x1f\xc9\x7f\x95\x8e\x93\xaf\x22\x47\x5c\x78\xce\x64\x2c\x2a\x11\x3b\x75\xaf\x3a\x64\x3c\xda\x40\x4c\xc0\xe6\x62\x15\xe8\x44\x94\x6d\xfd\xb1\xd5\xfe\x00\xf7\x31\xd3\x8c\xaf\xdd\x3e\xb1\xde\x72\x54\x58\x76\xc0\x85\x59\x23\x1f\x10\xe5\x87\xd9\x73\xc0\x55\x71\x82\x02\xdb\xca\x45\x5e\xf1\x2c\x87\xc9\x01\x40\xe4\x36\xe2\x6e\xc1\xc2\x49\xf7\x9f\x26\x0a\xb8\x7c\xf2\x9d\x82\x75\xed\x6d\xdc\x29\x1b\xb4\x75\x16\xe7\x57\x6f\xdc\xa2\x8a\x15\x32\x52\xd8\x25\xd8\x84\x3d\x2a\xfe\xc1\x22\xba\xeb\x26\x5b\x8d\xd5\x68\x58\x9c\xb8\x5b\x68\x13\xf2\xb7\xb1\x53\x93\x0e\x61\x67\xca\x7c\x1c\x77\xe5\xb2\x15\x80\xb5\x41\x4b\xc6\x82\x5a\xec\xea\x77\xe2\x6d\xba\x90\x0b\x33\xbb\x3b\x04\xd1\x27\xba\x58\x9c\xd2\x01\x2b\xf6\x20\xbc\x8c\x5c\x3b\xb4\x47\x8a\x2f\x02\xff\xda\x47\xe6\x99\x1b\x4c\xec\x73\x3e\x95\x39\x0f\x3d\x3b\x99\x89\xa3\x9e\x2d\x36\xc7\x56\xef\x18\x4f\xd9\xe7\x2f\x31\xd9\x76\x55\xd2\xb7\xa3\x8b\x3c\xef\x55\xb6\xbc\xaf\x66\xab\x8d\xdb\x1e\xab\x1e\x2d\x6f\x81\x32\x20\x5a\xcd\x02\x93\x84\xfa\x45\x5c\x11\x19\xbb\x20\x9d\xd8\xab\xae\xcb\x57\x07\xde\xf4\xb8\xb8\x48\x46\x72\x53\x21\x33\xb9\x45\x05\xf7\x02\x0b\x13\x64\x5f\x74\xae\x89\x4a\x2a\xba\xcc\x82\x01\x30\x87\xe2\xb6\xca\x2d\xb0\x18\xdc\x81\x45\x72\x74\x49\x37\x62\x59\xa4\x86\x0c\x2a\xf3\xdf\x41\x9f\xd2\xf2\x5c\xc1\xb1\xcf\xae\x8f\xc0\x35\x40\xc9\xad\x23\x02\x04\x2c\xaa\x5a\xd1\x25\x73\x7e\x7b\x7a\x7c\x4a\xf0\x26\x04\x1b\xc0\x0d\xcc\xd3\x46\x4d\x4f\xb7\x8c\x05\xd0\x17\x5a\x3e\xba\x54\x2f\x5b\xfb\x40\xe3\xf2\x2a\x0a\x1d\x0a\x12\x03\xe8\x6b\x86\x17\x64\xd2\x11\x11\xa4\x25\x97\xcc\xe4\x68\xbd\x17\x46\xc5\x04\x94\x69\xf4\x55\x62\xcd\x99\xd6\xa7\x2b\x4c\x46\xb6\x53\xfd\x56\x1a\x30\xe2\xc5\xeb\x16\xd6\x4f\x5c\x9c\xbf\x7b\xf7\xfe\x36\xa9\x25\x02\xf1\x33\x2d\xf0\x5a\xec\xc4\x34\x69\x17\xbb\x32\xc5\x5d\x5b\x42\x24\x67\x2a\x2a\x71\x0c\x2e\x97\xfd\x32\x7b\xe7\xb5\x05\xad\x8d\x0d\x6d\x61\xe9\xb5\x68\x7f\x7b\x74\x85\x7c\x0c\x43\xfc\xa9\x62\x33\x80\xf7\xe1\x7f\x95\x5b\x52\x64\xc6\x2d\x40\x6f\x93\x0d\x4c\xf2\xb2\x17\x6b\x6b\xdb\x89\x65\x05\x88\xa5\x03\x38\x92\x35\x76\xbb\xb3\xc0\xf9\xac\x04\x18\xc0\x9e\x86\xdd\x65\x7b\xa0\x92\x20\xd2\x18\xfd\xb7\x01\x14\x52\x60\xaf\xba\xa8\xee\xb5\xd3\x4b\xdd\xa1\x08\xfd\xa7\xf8\x81\xe9\xe1\xd7\xc8\xcf\x3a\xab\x5c\x3b\xf1\xcc\xed\xa4\x11\x4d\x27\x9d\x3b\x7b\x34\x68\x11\xf8\x66\xaf\x3e\xfb\x47\xcf\xaf\x7a\x30\x95\x7c\xf6\x34\x40\x3c\x9f\xa0\xab\x57\xb6\x6f\xf0\xd2\x35\x1a\x85\x03\xb1\xa2\xf4\xb0\x4d\x0d\x70\x31\xd9\x56\xc5\x81\xff\x27\xea\x5c\xd9\xfe\x2e\xf5\xe3\x7b\xba\x67\xb0\x2b\x24\xd8\xf7\xb2\x1b\xca\x4b\xa7\x50\x7b\x28\xe3\x7e\xa8\xc0\x89\x3c\x95\x05\x7f\x01\x08\x28\x14\x32\xb4\x59\xff\x11\x06\xcd\x3f\x1c\x98\xe4\xb5\xea\x76\x41\x3c\xfc\xae\x82\x96\xd0\xe5\xfc\x38\x12\x0d\xe4\xb1\x87\x75\xc8\x03\x37\x6b\x48\x9d\x99\x8d\x2c\x5e\x85\xec\x58\x32\xcb\x66\x33\x90\x53\xe8\x44\x7e\xa1\x7d\x20\xdb\xaa\x78\x6c\xb9\xa6\xd7\xe0\x25\x8e\xe9\x9d\x84\x7b\xee\x18\x8a\x08\x12\xd7\xda\xeb\xb5\xb1\x7d\x36\x0c\x37\x60\x3d\x24\x16\x31\x4b\x70\x70\x23\x57\x75\xba\x51\xc6\x01\xb5\xc3\x5f\x9c\x32\x29\x2e\x05\xc3\xc2\x1d\x64\x38\x30\x68\x2b\x84\x1f\xf4\x3d\x53\x8a\x00\xb9\xca\x4a\x0e\xde\xd6\xda\x68\x0f\x6e\x45\x3a\x48\xdd\xa8\xfb\x2c\xd7\x2b\x9e\x50\x6c\xf7\x84\xbe\xd0\x48\xfd\x09\x0f\x79\x06\xd1\xf4\x90\x4b\x50\x36\x41\xe4\x91\x4c\xe6\x0e\x30\x7e\x90\x20\xd0\x6a\x94\xe2\x18\xd5\xbb\x7e\x30\x78\xe5\x3e\x18\x55\x24\x26\xc1\x08\xf9\x00\x73\xa0\x88\x19\x4f\x7c\x2f\x9b\xbb\x40\x5c\x7a\xb5\x52\xbd\x32\x0d\xf8\x2e\x48\x9f\x29\x32\xd0\xb2\xc2\x1a\x3a\x08\x42\x31\x46\xae\x83\xc8\x7a\x0f\x2e\x34\xe8\x8a\x25\xde\x70\xca\xf7\x1b\x3b\xf4\x3f\x30\x20\xab\xca\x23\x1c\x5d\xf8\x8c\xf2\xb9\x9d\xa4\x50\x20\x03\x44\x61\x54\x38\x14\x64\x8f\x4e\xda\x99\x8e\xc3\xb1\xab\x6b\x74\x2c\x24\x7c\xa0\xba\x73\x07\xd3\x24\xe5\xdd\x0d\x7c\x55\x7b\xe9\x9b\x0d\x9a\x62\xfc\x99\x7e\x82\x25\xc6\x5a\xfe\x8e\xa9\x37\xf1\x03\xb6\x80\xa3\x4d\xe1\xd2\x02\xa6\x95\x9b\x85\x67\x48\x89\x85\x4d\xcb\x61\x21\xde\xca\xcf\x7a\x3b\x6c\xc5\xbf\xff\xf8\x53\x66\xae\x49\x3e\x01\x8b\x29\x4e\x72\x16\x00\x93\x08\x72\x4c\x4d\xc5\xc8\xb2\xa3\x57\xb2\xd9\x90\x07\x8b\x5d\xd5\x18\x18\x06\x58\xc9\xdb\x68\x9f\x16\x48\x1a\xc0\xa9\x56\x6c\xa9\x0d\x11\x10\x8a\x86\x96\x9e\x94\x36\x27\x8b\x79\xcb\x91\xb1\xf9\xe3\xb7\x1b\x90\x8c\x31\x3c\x6c\x47\x62\x94\x6a\xeb\x20\x2a\x31\xdd\x2b\x8c\xa9\x2b\x8a\xc3\xc5\x81\x8c\x62\x20\x2e\x8c\x64\x94\xe7\x1e\x3f\x42\xa2\x3b\x74\x49\xd5\xc1\x25\x72\xd9\x0d\xea\xd1\x73\x5c\x48\x4c\xd2\x19\x2b\x6d\xd1\xb7\x14\x0a\x2c\xdb\xa3\x04\xb1\x40\xba\x9d\xd6\xfb\x05\x04\x03\x49\xcb\x7d\x06\xaa\x38\xf5\x49\xdc\x92\x99\xa2\xf1\xe9\xab\x37\xb7\x60\x92\xfb\x40\xf1\x1a\xef\x66\x6a\xf6\x68\xfb\x0b\x86\xb7\x82\xb8\x1d\xd9\x75\x2c\xc7\x30\x93\xf9\x60\x2c\x0f\x18\x8b\x81\x63\xb2\xec\x64\x58\x9a\x5c\x57\xe0\x33\xb4\x73\x28\x74\x18\x0d\xf3\x59\xf0\xd1\x09\x3b\xb6\x81\x90\x95\x0b\x8b\xb1\x25\x0f\xd8\x46\x76\xec\xfe\xfa\x06\x13\xa9\x60\x48\x84\x8b\xa7\xd2\x78\x8b\xbd\x75\x64\x1e\xc2\x87\xd1\x46\x3b\xbd\xb4\x1a\x72\x13\x3d\xa2\x0a\x74\xc6\x51\xb0\x36\xbb\xaa\xf0\x98\xe2\x74\x3a\xb4\xc2\x57\x15\x24\xc0\xba\xd3\xe6\x0e\x98\xbb\xdd\x21\x25\x64\xbc\xec\x85\xdd\x69\xd5\x7e\x97\xe5\xb1\x72\xe5\x0a\x66\xff\xff\xfd\xbf\xff\x9f\x27\x17\xa1\xdd\x17\xbe\xef\x9e\x5c\xb0\x64\x19\xe0\x71\x1c\x11\x81\x78\xff\x9f\xd5\x60\xf6\x64\x3a\xfb\x01\x7f\x55\xfc\x0d\x54\xaa\x1a\x8c\x23\x4b\x0c\xf8\x51\xd1\x57\x20\x56\x15\x05\x99\x0b\x54\xaa\xaa\x4c\x3c\x64\xdf\xd9\xe2\x9c\xfd\xdb\xa0\x9b\xbb\x1a\x2f\xd4\xce\xc4\x7f\x85\x2f\x01\x81\xcb\x88\xd5\x08\xa7\x56\x3c\x82\x60\xd1\x8e\xce\xb1\xdc\x81\x15\xe8\x16\xf9\xd4\xa7\x23\x4b\x96\xac\xd3\x81\x0f\x0d\x06\xec\xb4\x51\xd5\x6e\x70\x1b\x94\xe1\xb8\xb6\xab\xc1\x6d\x20\x2c\xcb\x67\x0c\xfb\x93\x63\x80\xa9\x99\xe0\x58\xca\x5e\xd5\xdb\xe8\xf0\x30\xde\xdd\x71\xe1\x90\x4f\x5d\xba\x92\x3b\x28\xbf\xa8\x2a\x3c\x82\xd1\xe3\xc1\x55\xf1\x54\xa5\xd3\xd4\xf7\x0a\x90\xf6\x4a\x05\x48\xaf\x7a\xb6\x33\x94\xa6\xad\xbd\x5c\x63\xc9\xc0\xfa\x50\x51\xdb\x0b\x2f\xd7\x84\x08\x30\xff\x42\x3f\x2b\x2f\xc1\x2a\xed\x56\xae\xa7\x11\xef\x76\x43\xd7\x4d\xe3\xe2\x75\x72\xa9\x20\xf9\x12\x7e\x54\xdb\xd0\x48\x6f\x8d\xc2\xd3\x93\x3f\xaa\x06\xfc\x38\x5c\xf4\xe8\x70\xd5\x5a\x33\x8b\x50\xb6\x81\x42\x1a\xa0\xee\x10\x7f\xc2\x10\xd4\xbd\xdc\x87\x34\xb9\xc7\xcf\x8d\x76\x14\x3f\xf1\x35\xfe\xc2\x64\xbc\xb7\x01\x50\xb8\xac\x89\xf0\x20\x81\xd0\x1e\xb9\xe2\xdf\x98\xe5\x6d\xe0\xe9\xfa\x34\x3b\x6c\xd5\xe3\xad\x15\x98\x81\x4c\xb5\xdb\xd8\xbd\xa9\xee\x75\xab\x2c\x9c\x19\x14\x65\x01\x23\x48\x2e\x7b\xbb\x77\xcc\x74\x86\xd1\xc6\xcf\x30\xbd\xe6\x71\x8a\xc8\xf0\xfa\xf6\xed\xe5\xbf\x0b\xc0\x11\xe6\x61\x51\xc5\x99\x58\xd8\x7b\xd5\x53\x20\x90\xf7\xf4\x33\x65\x92\xe7\x6a\x36\x64\x60\xb1\xa9\xd2\xc8\x45\x50\xe7\x65\x57\x40\xde\x84\x84\x19\x40\x8c\x52\x78\xde\x75\x33\x79\x64\x8f\x54\x2f\x0f\xd1\xa2\xaa\x15\x70\xbd\x13\x48\x30\x5c\xf1\x24\x60\x36\xb9\x19\xb3\x7e\x24\x43\x8c\x38\xc0\x4a\xb5\x61\xe9\x2f\x20\xe6\x24\x1a\xda\xbd\x53\x7b\x64\x6f\x29\x0b\xcd\xaf\xea\x68\x86\x07\xae\x4c\x39\x40\xf8\xc7\xd9\xbf\xb6\xda\x17\x99\xbb\x5e\xc1\x3a\xc0\x66\x39\x24\x71\x30\xb2\xd8\x20\xc7\x80\x28\x1a\xd4\x80\xcc\x58\x53\x87\x23\xb5\xe6\x0d\x77\x81\x72\x43\xc8\x14\xc6\x9a\x27\x70\xde\x42\x66\xd1\x08\x20\x45\x79\x4b\x3c\x2f\x21\x06\xdb\x0e\xce\xd7\x4b\x55\x5b\x53\xcb\x34\x36\x7f\x61\xf3\xe1\x25\x78\xa5\x49\xde\x9f\xe1\xe0\x93\x77\xe8\xc8\xd0\xdb\x20\xa8\x0a\xee\x07\x87\x85\xcb\x91\x83\xe4\x83\xa1\x1b\xa1\x1f\x39\x66\xa0\xb5\x63\x06\x9f\xc2\x3c\x06\x58\xb6\xb0\xcf\xf1\xb1\xe2\x2c\xeb\x55\xae\xb7\x9b\xf4\x2b\x50\xad\x1a\xa2\x7c\x91\xfa\x37\x6f\x00\x90\x34\x0c\x01\x96\x54\x34\xdf\xd4\x3b\x34\x5d\x85\x26\xa5\xa3\x0c\x9c\xbf\x4a\xb3\x80\xf9\x6b\x72\x5e\x68\x81\xd9\x03\x9f\x6f\x5e\x6e\xe4\x10\xd1\x43\x65\x8b\xc5\x22\xaf\x2f\xaa\x13\x40\x6b\x17\xb8\xf5\x74\x88\x9f\x62\x58\x2e\xe0\xe6\xb4\xc7\xbb\x51\x38\x3d\x9f\x2e\x02\x2c\xab\x2e\xf3\x02\x6b\xcb\x7a\xa9\xa5\x5a\x6b\x0c\xe0\x09\x42\xb5\xa2\xd0\x21\x09\xc9\x52\x36\x77\x6e\x27\x21\x8e\x23\xb6\x07\xce\x67\xdb\x67\xeb\xb5\x51\x5d\x0d\x36\xd9\xe2\x4c\xe0\x67\xcc\x04\xca\x9a\x2d\x7a\x72\x9e\x1b\xad\x79\xd9\xb6\xb5\xdf\xee\xd8\xca\xe9\xf1\x89\x7b\xfa\x8c\xbb\xfd\xfc\x71\x06\x95\x00\x1e\xa7\x6d\xd9\x62\x50\x59\x32\xb1\xcc\xf3\xc6\x16\xca\x79\x1e\x35\x8d\x0e\xc1\x18\xca\xb8\x05\x77\x75\x8e\xc8\x26\xd4\x67\xaf\x4c\xab\x5a\x91\xc9\x18\xd9\xdc\x10\x12\x1c\xda\xee\x50\x7b\x8b\xab\x34\x51\x1b\xec\x2f\x03\xf0\xb0\x93\xaa\x8c\xd9\x66\x04\x7f\x12\xba\xfb\x08\x3c\xd4\xa3\xea\x0c\x32\x52\x75\x89\x81\x48\x35\x30\xeb\xc0\xea\x37\x13\x9d\x1f\x13\x9e\x15\x84\x68\x03\x5f\x18\x68\x0f\xd8\x0b\x60\xa0\x4e\x11\x4e\x51\x76\xd6\x5f\xe4\x74\x90\x9d\x03\xc0\x18\x9a\x58\xa2\xd2\xb1\x32\x1f\x89\x91\xc1\xee\x78\xf1\x12\x59\x5b\x2a\x0c\xb4\x49\x3b\x06\x84\x99\x49\x4c\x4d\x2a\xcb\x4c\x03\x2a\xa4\x93\xda\x1a\x49\x36\x6e\xb6\x52\x5b\x1d\x83\xc2\xe6\x7a\x13\x5e\x0b\xbc\xfc\x6b\xed\x6a\x19\xa9\xa3\xf1\xac\x3a\x25\x49\x78\x27\xc9\x7e\x14\x03\xc9\x48\x3c\x79\x47\x8c\xf3\x43\x15\x01\x7d\x80\x3a\xdc\x61\x4b\xa7\x7b\x8c\xae\xca\x02\x9b\x14\x9c\xc9\x77\x44\x34\x04\xe0\xe8\xab\x39\x2e\x03\x18\x51\xab\xa5\x20\xd4\x93\x51\x85\x6a\x52\xab\x52\x45\x85\x9c\x99\xb3\x86\x5f\xdf\x05\xa2\xc6\xb5\xb1\x35\x2a\x32\xb2\x8b\x83\xa2\x3b\x6c\xba\xc1\xe4\x7b\xa4\xf9\x88\x3a\x86\x63\x15\x91\x61\x6d\xbd\xdf\x64\xd5\x32\x49\x9d\xd8\x82\x11\xb4\x70\xda\x34\x2a\x45\x9c\x55\x2d\xd7\xbf\x78\x58\xa5\x97\xa2\x11\x80\xdd\x07\xdd\x40\xed\xc3\x2c\xc0\xd1\x50\x54\x62\xfb\xb8\xad\x90\x1c\xf2\xfe\x59\x4b\x6d\xd2\xf6\xf2\x16\x5c\x92\xf0\x54\xf1\x9b\xec\x04\x29\x7b\x3a\x59\xca\xe7\x38\x8c\xa0\xe0\x4a\x53\xf6\xf5\x8b\xda\x58\xa6\xad\x81\xf4\x04\x5e\x10\x67\x27\x48\xae\x68\x4c\x93\x9d\x64\x21\x3b\xb5\x07\xe2\x49\xda\x9a\x0c\xc3\x69\x3b\xbc\x44\x31\x30\x5e\x28\x3d\x25\xa3\x9a\x34\xd9\xd0\x54\x74\x48\x0d\x92\xe1\x08\x1b\x1d\x8b\x13\x6c\x44\x88\xbf\x84\x26\x9c\x03\x6e\x58\xb6\xba\x27\x52\x8c\x1f\x24\xac\x26\x62\x43\xbe\x6c\xd0\xfc\xc8\x94\xb9\x51\xfb\x23\x7f\xe6\xd8\xd6\xf5\x48\xad\x39\x0e\xe8\x84\xee\x4b\x06\x2f\x22\xa8\x58\x68\x60\xc2\x9f\x38\x7e\x22\xf4\xcc\xf8\x97\x70\xb9\x90\xc1\x39\xa3\x28\x47\xb4\xb2\x52\xfe\x4a\x83\x64\xf8\x52\x9b\x36\xa6\x49\xd0\xe3\x44\xef\xf8\x98\x9e\x24\x39\x72\x62\x8f\x39\x74\x36\xbe\x00\x2d\x29\xa5\x71\x70\xab\xf7\xe1\x7f\x4c\x35\x6a\x4f\x8a\xf2\xbd\xea\x63\xf0\x27\x8c\x65\x1f\xc8\x3e\xc8\x5c\x59\xf2\x62\x2c\x67\x65\x59\x81\x64\x84\x44\x14\xa2\x21\x3f\xcf\x6e\x3a\x25\xfb\x3a\x96\xbf\x08\x9f\xa2\x9b\x60\x89\x82\x5b\x2e\xb7\x8d\xaa\xc9\x61\xde\xd9\x79\x30\xac\x2e\x87\xc4\x1a\xb7\x73\xc0\x76\xa7\x4c\x01\xfb\x7e\xa7\x4c\x2e\x36\x16\x88\xad\x53\xed\x08\x33\xdc\xe2\xcc\xc3\x4b\x07\x51\x10\xe1\x1e\x8b\x7e\x4e\xdb\x99\x01\x61\x33\xe5\x0c\xa8\xb1\x39\xdc\x3b\x3b\x01\xa2\x7d\x1b\xd9\x83\xf1\xec\xa5\xf9\x51\xfb\xc9\x04\x61\x66\x0d\x96\x35\x31\x14\x1a\x00\xc5\x53\xbf\xa8\x26\x22\xa3\xca\x0a\x7c\x88\x2b\xde\x32\x2c\xe2\x8d\x6a\xd8\x5d\x32\x70\x99\xad\x5a\x81\x7f\xa0\x53\xa0\x53\x2d\x17\xc2\xb8\xb8\x36\x2b\x9b\xd3\x38\xf0\xb5\x35\x07\x2a\x05\xfa\x89\x68\xcc\x88\x01\x79\x48\x87\xf2\x28\xf6\xf4\x11\xc7\xe7\x91\x4b\x8b\xae\x9a\x34\x5a\xe8\xcf\x89\xc1\xcd\xc7\x0d\xa3\x58\x3e\x47\x5a\x35\x73\x41\x02\x43\xe2\x94\x3f\x56\x64\x70\xe4\x67\x85\xc4\xfd\x8b\xf0\x4c\x62\x73\x21\x34\x91\x3b\xa0\x55\x88\x23\xbe\x56\x11\xa9\x2d\x46\xe3\x43\xb4\xb0\xbe\xbd\x5c\x8a\x33\x71\xd2\xc2\xe2\x8e\x73\x19\x96\x6e\xca\xc2\x95\xcc\x99\xa4\xc7\xe1\x89\x2e\x66\x38\xcf\x0b\xdc\x02\xde\xd4\xe0\xba\x8c\xb7\x36\xdd\x4c\x89\x07\x37\xf8\x18\xe6\x28\xe6\xc9\x36\xa6\x92\x0f\xec\xb6\x04\xb1\xd6\x46\x1d\x47\x7d\xa4\x1c\x29\xce\x41\x5d\x3e\xcd\x59\xc8\xae\xab\xa3\xaa\xea\xbc\xeb\x04\x7e\xcc\x82\x3a\x7a\xee\xc3\xdb\x20\x0c\xa6\xa6\xb6\x64\xdf\x33\x57\x08\x57\x6b\x5b\x2f\x0f\x54\x06\xb7\x1d\x04\xe1\x3d\x52\x64\xab\x4c\x90\x5c\x02\x3b\x87\x45\xde\xc6\x84\x99\x22\x8e\x02\x51\xda\xde\xcf\xe4\x2c\x60\x3d\x7a\x3a\x2a\xdc\x2c\x48\x20\x1a\x00\xf2\x1e\x7e\xcc\x81\xa0\xc9\x77\x94\xde\xae\x29\x1e\x18\x3b\x9d\xcd\x56\xac\xa4\x4b\x25\x2e\xc1\x07\xbb\xff\x8a\x72\x5b\xeb\x7c\x38\xe6\xd0\xc2\xff\xad\x85\x18\x1c\xf0\xf9\x40\x3d\xa9\x00\x56\x34\x29\x11\x76\x12\x2b\xa3\xf0\x77\xd2\x45\x65\xc6\xc7\x60\x77\x4c\xe6\xc3\xf2\xf9\xa4\x70\xbd\x92\x77\x6a\x06\x03\x6a\xb3\x08\x1a\x94\x47\x76\x88\x5a\x23\x3b\x64\xe7\xca\x67\x9c\x8a\xcf\xbe\xdc\xe2\x31\x94\xf8\x68\x87\xb7\x31\xab\xdc\xe1\x66\xd8\xd6\xd4\x47\x87\x14\x80\xbf\x62\x71\x1e\x81\x5a\x86\x2a\x7f\x8b\xdf\xa9\xbb\xff\x16\x38\xec\x13\xe8\xe9\x6f\x5c\x8c\x9d\x1c\x11\x3a\x0b\xde\x7d\x4e\x4e\x2f\xd1\xfb\x85\xad\x2f\xda\x4c\xb9\x43\xc5\xfe\x18\x9b\x69\x33\x67\x0d\x3c\x05\xe0\xfe\xab\xd4\x50\x17\x24\x0d\x3e\xb8\xbf\x65\x16\x37\x2a\x82\xd0\xa4\x43\x88\x94\x1c\xbc\x57\x30\xaa\x0c\x77\x0d\x9f\xa3\xcc\x87\x90\xf5\x45\x01\x3a\x36\xd3\x12\x23\xd0\xd1\x44\xd1\x30\x23\x4b\xf1\x4c\x0a\xdd\x92\x35\xfb\xa3\x38\xdc\xf0\xf5\x1c\x16\x4b\x31\xe8\x58\x5f\xc4\xc1\x9f\xdf\x88\x85\xb8\xdc\x5e\xad\x22\x1e\xba\xe4\x6e\x71\x76\xb0\xab\x14\x03\x83\x64\xa3\x6f\xab\x62\x67\xe9\x75\xa6\x2b\xf8\x91\x6a\xe6\xf0\xa6\xc0\xef\x5e\x64\x9f\x71\x99\x17\x16\x39\x94\xc8\x01\xa8\x39\xdc\x12\xe9\x2d\x0a\x57\x26\x0a\xf8\xc9\xe2\xdf\x5f\x2d\x0b\x58\x8d\x35\xf7\xaa\x77\xe4\xbe\x40\x18\x49\x81\xf9\x6b\xab\xd3\xf4\x8c\x74\x1d\x5c\x37\x1a\x91\xdd\xc8\x7b\x35\x3a\xc4\x99\xe5\x89\x2c\x54\x99\xdf\xd8\xce\x26\x16\x0b\xbe\xc6\x00\x68\x25\x75\xd2\xce\x72\x47\x69\x69\xd2\xce\x85\x68\xe7\xe5\xa9\x83\x90\x33\x9d\xc1\x8c\x91\xa6\xac\xcc\x8c\xc1\xc7\xb0\x81\x10\x82\x8c\x0d\x88\xa7\x58\xc8\x81\x1d\x40\xa3\x99\xd6\x2c\xd8\xbc\xc7\x26\xf2\x18\xb9\xd9\xa5\x06\x21\x38\x79\x69\x6a\x53\x58\x62\x12\xee\xe3\x86\x74\xf3\x95\x27\xdd\x2d\xb6\xf5\x0b\x7a\xdb\x8c\x4c\xee\x64\xef\x75\xa3\x77\x32\x92\xca\xab\x2c\x85\x21\xa5\xf7\xb2\xd9\x84\x6d\x9d\x33\x5d\xbf\xa1\xfe\x81\xd4\x0e\x61\x3d\xa2\x2d\x7b\x10\xb4\xbc\x5c\xfe\x36\x53\x3a\x06\xc8\xce\x4b\xc7\xc4\x80\xe2\xb7\x0a\xef\xc2\x32\x71\x2d\xbf\x13\xa3\xcc\xc6\x6e\x77\xb2\x57\xa5\x36\x36\xa4\x44\x75\xec\x2c\x1c\xcf\x12\x03\xfb\xbd\x15\xf1\x22\x07\x9e\x2d\x0b\x27\x58\xa9\x47\x04\x85\x63\x54\x81\x94\x68\x21\x1e\xf7\x19\x04\x65\x18\x57\x48\x35\x9c\x09\xfa\x45\xf9\xc5\x25\xe2\xf8\xf2\x90\x7b\x6e\xeb\x5e\xb9\xa1\x83\x19\x01\x8f\x32\xfc\x58\xd9\xc1\xb4\x8b\x08\x04\x6f\x47\x05\x6e\x2b\xd5\x95\x1d\x22\xf8\xb2\x14\xf9\xb7\x86\xdc\xa5\x6a\x64\x60\xd4\xa1\xcd\xa1\xaf\x1b\x25\xdb\xac\xf7\xbd\x82\x07\x1c\xc6\xf8\xb7\xaa\x5f\xc7\x8e\x7e\x0d\xfe\x62\x4c\x37\x18\x8b\x1b\x3d\x6c\xbb\x83\x68\xf5\x0a\xa8\xae\x17\xa4\x6e\xe0\xea\x36\xd2\xd5\xf9\x1b\x61\x61\x81\xc4\xda\x58\x89\x34\x9a\x98\xa5\xf2\x7b\x08\x7c\x05\xce\x14\xa1\x5e\x54\x95\xb9\x9f\x47\x1e\x53\x4f\xa1\x8e\xa7\x81\x73\x69\x89\x70\xff\x1b\x7c\x20\xf9\xa6\x99\x1b\x89\x99\x33\xab\x0e\x88\x1f\xaf\xa1\x3d\x6c\x19\x6f\x05\x8c\x10\x70\x3b\x2d\x6b\x3e\xf0\x18\x61\x77\xab\x9f\xa2\xbb\x95\xd0\xc6\xdb\x19\x37\x2c\xc2\x0f\x98\x88\xa9\xe1\x6a\x30\xed\x5f\x43\x2f\x4e\x3e\xfe\x8f\x4f\xbc\x25\xbc\x5c\xd6\xf9\xe9\x80\x16\xab\xf1\xb3\x80\x1a\x2b\x7c\x52\x5e\x71\x6d\xce\x3a\x46\xca\x27\x1e\xc2\x5b\x5c\x3c\xc9\x86\x0b\x33\xc8\x42\x3d\x9f\x49\x6f\xc5\x4e\xf5\x81\x2a\xd2\x68\x46\x9b\xdd\x45\x31\x34\xc0\xed\xf7\xa9\xa6\xb0\x6a\x62\xce\xed\x04\x6d\x24\x83\x04\x53\x52\x41\x44\xd1\x4a\x2f\xeb\x65\xcf\xe6\xf9\xd2\xcb\x68\x93\x39\x8f\x8b\x60\xdb\x21\x05\x65\x22\x5b\x2f\xb8\x0f\xcc\x88\x3b\xb7\x5d\xbb\x1a\x3c\xd2\x51\x15\x7c\x4b\x6e\xe6\x9d\x6e\xbc\x88\xe9\xda\x51\x54\x24\x7c\x3f\x65\x8d\xaf\xd1\xc4\x57\xe7\x56\xbd\x72\x1b\x78\x2b\x22\x00\xac\xd4\x5e\x6c\x2d\x30\xb4\x91\x22\x49\x53\x83\x09\x22\xee\xd7\xdc\x8a\xa8\xe8\x06\x99\x14\xd1\x80\x14\x2f\x40\x64\xa8\xc0\x62\xeb\xeb\xb0\xa1\x07\xc4\x1c\xbe\x44\x11\xa2\x12\x97\xfb\xed\x8e\xd7\x35\x7e\x36\x0e\xd7\xc3\x56\x1a\x34\x2e\xd6\x46\xd8\xbe\x55\x3d\x85\xdf\x05\xe7\x6e\xbf\x99\xc3\x8c\x7c\x29\x22\x25\x76\x2e\xbb\x61\x42\xb4\x98\x1e\x97\x6d\xa0\x72\x7c\xd9\x1b\x00\x70\xc2\xae\x21\x9d\x2f\x76\x29\x3d\x91\x7b\xb8\x34\xcb\x8c\xfe\xa2\xfe\x34\x37\xb8\xc9\x16\xf1\x98\xcc\xc1\x82\x9e\xa3\x36\xb0\x89\x06\x43\x44\x01\x4a\x45\x65\xfb\x6f\xa4\x17\x7a\xec\xe3\xc6\xa1\xcd\x95\xac\xdd\xcb\xe1\xcf\xc9\xa8\x41\xae\xaa\x98\xca\xef\xff\xed\xa4\xfd\x81\x1e\xd8\x92\x5b\x35\xb5\x59\x0d\x89\x38\x6a\x39\xff\x12\x0e\x12\xed\x20\xe2\x35\xbc\xec\x60\x7b\x1e\xa1\x05\x13\x56\x12\x9a\x32\x83\x55\xe0\xcf\x7e\xc9\x8f\xbc\x02\x06\x82\x98\x19\xb5\xcf\x08\x10\xdd\x93\xa5\xbb\x25\x66\x6c\xb8\x93\x1a\x77\x28\x86\x8b\xc0\x52\xe8\x9c\x00\x4d\x36\x8d\x5a\x54\x99\xf5\x4c\xc6\x5c\x24\x65\x4d\x96\x3d\xa3\x59\xca\x72\xe7\xb5\x4b\x63\x80\x36\xa9\x50\x4f\x5c\x51\xb7\xad\xdb\x41\xd5\x24\xfa\xbf\xb3\x40\x4a\xc2\xd7\xb8\x05\x2c\xf2\x8e\x31\x47\xf9\xaf\xec\x50\xed\x86\x65\x38\xd3\x31\x50\x35\x2e\xf4\xcc\x60\xc8\x5b\xf6\x24\xa1\xbb\x79\xe2\xce\x0a\xf4\xa3\x33\x70\x76\x70\xa2\x8f\x66\xf8\x9f\x67\xcc\x18\x74\xe7\xb9\xa9\xcf\x2f\x06\x05\x6a\x7c\xf1\x3d\x5f\x4e\xff\x50\x76\x52\x61\x28\xa2\xf0\x3f\xcf\x88\xef\xa2\x10\xaa\x1a\xd7\x21\x61\x04\xe4\x94\x92\x9e\xcd\x38\x8d\x56\x20\x8f\x0f\x87\xc3\xe1\xc9\x76\xfb\xa4\x6d\x1f\xcf\xf4\x3a\x63\xa2\x63\xb7\x47\x56\x10\xa4\xad\x1a\x9d\x23\x19\xa6\x4c\x26\x99\x1f\x3b\x30\x69\xc9\xe7\xe9\x03\x28\x68\x97\xca\x83\xdf\x61\x46\x46\x60\x27\xa5\xd9\x73\xe1\x84\xb4\xbb\x4e\x25\xaf\xb3\x40\xf2\x30\x9a\x44\xde\x97\x91\x3c\x97\x65\x8d\xe2\x2e\x3f\xd8\xc0\x68\xd5\x48\xfc\xb5\x5d\xa5\xc6\x8c\x06\x05\x9f\x54\x3c\x3a\x24\x99\x1c\x95\x86\x35\xca\x52\x33\x80\xf3\x92\x54\xaa\xfd\xbf\x53\x9a\x9a\xab\x7e\x6e\x19\x7c\x41\x9e\xaa\xf6\xfa\x4e\x8b\x33\xf1\x67\x7d\xa7\xe1\xf7\x82\x22\x65\x67\x91\xb1\xbd\x85\xec\xef\x8a\x7c\xee\x6b\xc8\x01\x8b\xb8\x0d\x39\x01\x0b\x7c\x25\x10\xbd\x0c\x87\xae\x15\x9d\xbe\x43\x7e\xc3\x36\x03\x28\x5a\x0e\x14\x13\xed\xaf\x10\xa0\xcc\xae\x15\x78\x81\x47\x19\x46\x7b\x5a\x54\x0b\xac\x90\xd6\x38\xc4\x4c\xac\xe9\x41\x68\xda\xe4\x3e\x3e\x18\x15\xd2\x11\x3c\x7f\x32\x1a\x12\x48\x6e\xa1\x74\x92\x5a\x12\x3c\x86\xb8\xca\xb1\xbe\xa3\x07\xb5\x30\x9f\x4d\xd7\x4a\x4b\x95\xd0\x73\xb4\x5e\x0a\x02\x85\x12\x72\x69\x07\x32\xf0\x22\xd5\x68\x22\x10\xd4\x0f\x78\xf9\x87\x6a\xba\x09\xc2\x45\xaa\x03\xec\xfc\xa9\x02\xba\x5a\x39\x71\x70\x93\xce\x2a\x1e\x28\x77\xe2\x10\x1c\x56\x7a\x48\xa9\xe9\x0a\x85\x74\x09\x45\x7f\x52\xde\xb8\x3f\xe8\x67\x56\x80\xd0\xc1\x36\x0f\x65\xac\xd7\x8d\xaa\x7f\x64\x3e\x2a\xf7\x45\x43\x5b\x8d\xb5\x22\xd6\x3d\x88\xc1\x1c\x9f\x81\xd9\xa0\xb0\xdf\x55\xef\xe1\xfd\x88\x38\x43\xd3\x4b\x78\x58\x48\x80\xea\x0b\xae\x90\x11\x87\xa3\x69\x76\xd9\x20\x72\xb0\x34\x0e\x75\xc2\xe6\x89\xae\x9a\x7d\x2e\x9a\xd3\x16\x38\x59\x2e\xbe\xfa\x98\x65\x65\x2f\xff\x10\x8f\x94\x7d\x1f\x01\x5b\xa0\x47\x16\x05\x48\x3f\x06\x84\x96\x0a\xb4\x92\x8e\x01\xc1\xbb\xcd\xe8\xd4\x73\x0c\x64\x30\x7c\x47\x76\x26\x3e\xf0\xef\x04\x3c\x67\x4c\x3b\xc9\xac\x97\x28\x87\x67\x7e\x51\xe8\xbb\x9d\x24\xe2\x40\xd7\x01\x2a\xf7\x0c\xa1\x49\xde\x0d\x6e\x03\x6f\x84\x46\x0d\x30\xc7\x76\xe5\x8a\xbe\xe4\xfd\x73\x04\x30\x71\xf0\x8a\x9f\x34\x64\xdb\x27\xd4\x15\x3a\xdd\x42\xbc\x09\xb8\x5d\x0c\xec\xee\x23\xce\x07\xed\x07\x04\x36\x40\xb6\xea\xb4\x60\x1b\x29\x6a\x9a\x81\x57\x22\xd9\x68\x25\xb5\x62\x64\xd0\x36\xce\x18\x59\xb4\xd6\x83\x89\x26\xbf\xc9\xba\x75\xda\xde\xec\x05\x36\xbc\x29\x02\x07\x74\xed\xe3\x0b\x6b\xd6\x90\xfb\xc2\xa4\x29\xe3\x1a\x13\xb1\x7f\x51\x56\xc3\x32\x60\xc6\x06\x3f\x18\x4b\xf0\xbb\x54\xd3\xae\xb7\x1e\xee\xdc\x72\x1b\xe1\x2b\x4e\x9c\x59\x3d\xd3\x02\xd1\xf7\x09\x73\xb2\xd5\x03\x4f\xa2\xd9\xbe\xc1\xc5\x02\xaf\xf8\xca\xa6\xd1\xad\x32\x5e\x76\x49\x1a\x85\x50\xa3\x1b\xed\x15\x44\x0b\xcb\xe6\x0f\x1f\x18\x49\x5b\x00\x23\x40\xca\xdc\xa6\x18\xe2\x3f\xb2\xbd\xec\x62\xb1\x18\x2f\xf3\x9a\xda\x8b\x1b\x99\x38\xf3\xab\x98\xf6\x00\xf8\xc8\xa5\x0b\x2b\x17\x94\x2f\x98\x7a\xc0\x0e\x41\xac\xf1\x91\x9b\xc5\x64\xb4\x46\xc6\x89\x3c\x52\x30\x69\xcb\xd1\x66\x98\x29\x12\xb9\x0c\x0a\x2b\x91\xc6\x94\x34\x81\xbb\x5e\xdd\xc3\x0e\x0c\x23\xce\xe3\x3a\xd3\x0c\xd6\xce\x8f\xa4\x3a\x7e\x63\xb2\x90\xb1\xb4\x71\x3e\x10\x22\xb4\x03\xe2\x19\xfc\x3a\x9c\x31\x98\x02\x06\x72\x81\x7e\xe2\x88\xe5\xef\x36\x97\x98\xa3\xcd\x2f\xcd\x25\xeb\x71\x62\x5c\xe7\x25\x75\x19\xa3\x39\x50\x24\x19\x63\xcd\x93\xb8\x24\x79\x26\x80\xb1\x40\x21\xbf\x44\x1a\x5f\x9b\x29\x6d\x2f\x27\x7d\x8a\xab\xb1\x4e\x0b\x31\x50\xed\xb8\x48\xf7\x1b\x0b\xda\x09\x20\x82\x65\x1d\x5f\x87\x2d\xb7\x7b\x25\x5e\xd9\xf6\xe4\x56\xef\x6d\xb6\x1d\xec\x2a\x1f\xa7\xc9\x20\xc1\xbb\x6e\x81\x95\x4c\x25\xd0\x45\xec\xb0\x93\x2e\xbe\xc3\x3f\x52\x84\x6c\x54\x73\xf7\x60\xaf\x8b\x57\xe3\xfe\xd9\xce\xa2\xa1\x55\xc4\x45\xe6\x56\xf0\xf9\x50\x31\x1c\x03\x7c\x3c\x00\xf7\x17\xbe\x7d\x4d\x11\xbc\xc9\x5e\x7a\xfb\x2f\xb4\x88\x6b\xa0\x16\xc1\xe7\x84\xf6\x72\xe9\x09\xed\xbd\x9a\xa1\x00\xf9\x12\xfb\x5a\xca\xbb\xb1\xf6\x0e\xdf\x66\x5c\xc2\xcf\x94\xb3\xd6\x9e\x33\xc3\x41\xf1\xba\xcc\x5d\x4a\xa7\x9b\x3a\x63\x6d\x7e\x09\x09\x33\x0c\x0e\xf9\x8e\x65\x90\xe4\xc2\x3a\x05\x75\x07\xd3\xd0\x03\x85\x61\x5c\x0e\xa6\x11\xef\xec\x7e\x8a\x2a\x80\x69\x53\xb3\xce\x2f\xa1\x0c\x39\xf1\x25\xca\x2f\xeb\x04\x91\x77\x96\xf4\xe8\x58\xb6\x14\x29\x30\xf3\x7b\x7e\x8d\xf4\x46\xcf\x1c\xc4\x59\x8f\xc8\xf6\x7c\xda\x23\xf2\x42\x09\x27\xe2\xd7\x85\x4d\x9e\x0b\x97\x3c\x36\x9e\x8d\xd8\x65\x7b\x1f\x24\xd6\x36\x6f\xca\x39\xa5\xcd\x34\x26\x30\xab\x23\x92\x08\x42\x18\x3e\x0e\x9f\xf5\xcf\x29\xf4\x4c\x36\xb2\xab\x49\x4c\x0b\x32\x37\x3f\x3f\x1f\x92\xb2\x46\x74\x9d\xdd\xd7\x14\xf3\x3b\xaf\xe2\x1c\xe2\x66\x72\x1c\xef\xe8\x6b\x01\x08\x21\x92\x54\x19\x92\x60\x87\x41\x00\xca\x66\xa8\xcf\xd3\x66\x70\xda\xa8\x1d\x05\x28\x3d\x41\xff\x2b\x83\x02\x8f\xff\xe1\xfa\xf2\x01\x70\x6e\xf6\x9f\x8a\x97\x88\x97\x61\xe8\x91\xf2\x21\x19\xff\x70\x7d\x89\xad\xf7\x1b\x75\x28\x4d\xcc\xbc\x5c\x66\x93\x83\x82\xf4\x68\xbc\xf1\xc2\x1c\x9c\xc6\x55\x7f\x64\xc4\x01\xa6\x26\x98\xd1\xd0\x77\x7a\xbd\xf1\x7b\x05\x61\x75\x8e\xe0\x2a\xe6\xa3\x6c\xc4\x91\x19\xa1\xab\xe3\x6f\x9e\x93\xb9\x86\xc6\xc9\x39\xd2\xba\x58\x98\x72\xc6\x13\x05\x86\x8a\xe2\x96\x70\xce\xcf\x58\x56\xf4\xbf\x7b\xd2\x72\xd4\x51\x51\x76\xbc\x71\xe2\x25\xc0\x4c\xcb\xe3\xd0\x38\x7f\x40\x2f\x83\x79\x04\xef\xe4\x16\x82\xa5\x06\xa8\x9f\x1f\xc4\xb1\xe0\x17\x9b\xce\xc4\x3b\xfc\xf5\x30\x78\xf1\xca\x53\x98\xf7\xf4\xf9\x50\x5f\xf3\x48\x36\x1c\x0d\x32\xb7\x02\x45\x51\xfb\xef\xe1\xec\xfc\x87\xf8\x7b\x58\x2a\xff\x10\x7f\xd7\xa6\x55\x9f\xff\xc1\xb7\x66\xf1\x85\xf1\x40\xee\x4e\x27\x21\x4f\x50\xf5\x1d\x06\x01\x8a\xe5\xa7\xff\xd0\x75\xe3\xdd\x52\x4a\x4d\x14\x3c\x6b\x87\x2f\x28\xf5\x7a\x39\xe0\xc9\xc7\x57\x9a\x93\xe8\x40\xcb\xa9\xd4\x80\x77\x4b\x18\x14\x03\x0e\x64\xf0\x6d\x12\x67\xe2\x0d\x46\xc3\xe0\xbb\x71\xe6\x64\x20\x7b\x5c\x1e\x77\x18\x5d\x7d\xf0\x75\x1d\xee\xad\x01\x4e\x19\xb8\xfb\x88\xb7\x9c\x6c\xd9\x9d\xe4\x4c\x09\xee\x14\xbf\xa3\xe5\xe3\x0b\xf8\x12\xff\xa7\x35\xb9\x24\x8e\x77\x3c\xe0\x49\xe7\x6d\xed\xc2\xd9\xc1\x06\x2f\x99\xa0\x0c\xb7\x67\x85\x2f\x7a\xd8\xce\xde\x09\xdb\xeb\xb5\x0e\x2b\x0e\x0a\x65\xc3\x6c\xd4\x9e\x1e\xea\xd9\x48\x87\x78\xe3\x93\x23\x18\xc1\x1e\xab\x91\xf1\xad\x5b\x57\x56\x50\xea\x48\x16\x23\xb9\x24\xf2\xc3\xf0\xf0\x41\xa6\x35\x30\xf7\xaa\xf7\xf1\xda\xd4\x8b\x5b\x2b\xae\xd5\x7a\xe8\x64\x9f\x07\x01\x18\x17\x18\x2f\x48\xc6\x43\xea\x4d\x38\xf3\xc3\xb2\x10\x3d\xe1\xca\x15\x04\x1c\x0e\x80\x6e\x3f\x82\x6c\xd2\x63\x20\xe1\x71\x2d\xa8\x67\x72\xa0\x68\x7a\x42\x6f\xaf\x94\x01\x90\x8a\x8a\xb3\xd1\xa0\x36\xc0\x1d\xf2\x5c\x2b\xd0\x92\x2c\xb6\x01\xe3\x20\xcd\xb4\x20\x59\xc5\x71\x24\x24\xba\x5f\x1e\x69\x7a\x10\x1a\x63\xb4\x8d\x02\x43\x24\x8d\x3b\x42\xf1\x73\xa5\xd8\x24\xb0\x59\x2d\x03\xf9\xe7\x84\x00\x9f\x88\x39\x0b\xa4\x09\x7f\xbe\xe7\x47\x66\xa6\x60\x51\x31\x92\x5e\x96\x29\x07\x25\x93\x8b\x80\x14\xd0\x24\x95\x6f\x1a\xd1\x16\x6b\x36\xd9\xe3\xad\xa0\xba\x82\x98\x71\x6e\xa6\x79\xa3\x69\x9a\x0d\xb7\xa5\x57\xd9\x1a\x06\x3f\x2b\x6d\x5a\x7d\xaf\xdb\x41\x76\xf4\x2c\xd6\x71\xbc\x3f\x95\x78\x1b\x6b\x40\x23\x72\x14\xf7\xa8\x43\x40\xdb\x20\x54\xee\xe3\x9e\x8c\xc9\x57\xe9\xc5\xab\xd9\x1e\x05\xb2\x1b\xcd\xc3\x68\x27\x61\xd8\xd5\xf4\x7a\x4d\xae\xab\x47\x45\x3c\xac\x0f\x0c\xde\xcd\xab\xf4\xe7\x09\x97\x47\xf6\x5c\xbf\xf6\x01\x27\xb0\x3f\x2f\xa4\x97\xb3\x60\x3c\xa1\xef\xd9\xa3\x4a\x41\x21\x60\xb9\x5a\xe9\x65\xba\x0d\x35\x96\x42\x69\x2d\x65\x73\x37\xab\x67\x9d\xc5\x3f\xb3\xbf\x72\x55\x6e\x18\x38\x16\xc6\xc1\xe3\x2d\x54\x1c\x0e\x92\x93\x29\xf3\x3a\xb9\x70\xb8\xce\x49\x13\x37\x38\x79\x72\x41\x57\xc6\x4f\x58\x64\x1a\xbf\xd2\x41\x14\x9a\x36\x47\x8f\x8e\x0c\x14\x77\xa0\x78\x7f\xea\x9f\x19\xad\xe3\x03\x95\x08\xd1\x17\xe3\xab\x1d\xc7\xf7\xd3\x51\xc2\x96\x45\x41\xe3\xde\x04\x3a\x79\x40\x53\xa5\xa9\xeb\xd9\x29\x05\x15\x0a\xb9\x41\x2a\x0c\xc3\x7d\x4a\x1c\xe4\x69\x34\x19\xa6\x37\x06\x33\x1b\x4e\xdc\x43\xc7\x5b\x08\x27\x1d\x76\xfb\x9c\x83\x78\x31\x33\x07\x77\x41\x81\x5f\xd8\x29\xd3\x82\x45\x2d\x46\x1c\x9d\x2a\x98\x1e\x5e\x1f\x5f\xb8\x91\x3a\x26\xdf\xcd\x23\x63\xb9\xfb\x0b\xaf\xa5\x4c\xf7\x3c\x1f\xe3\xef\xd4\x9e\x6c\x57\x93\x7c\x2b\xef\x80\x9f\x66\x6a\x0c\x31\x35\x99\xcc\xce\xa0\x9a\x3d\x07\xd2\xf3\x60\xb1\x69\x5c\xa0\x3f\xde\xbc\x32\x32\xdf\x5c\x44\xbe\x4c\xea\x6c\xeb\x91\x7d\xee\x79\xdb\x42\x7f\x0a\x3b\xdd\xa3\x05\x46\x01\x6f\x0b\x5c\x65\x50\xfd\xe9\x7a\x19\x55\xcc\x91\xf5\xa7\xd7\x13\xb6\xcf\xcd\x51\xf3\x86\xcd\x74\x69\xb6\x58\x61\xc2\x03\x07\x19\xac\xc7\xe4\xde\x4a\x86\x7a\xf9\x25\x4d\x1e\xf5\xb1\x3c\x14\x47\x6b\xf6\x81\x48\xfc\xdc\x28\xbc\xaf\x3d\x36\x72\x17\xb3\xa3\x46\xd1\x42\x73\x55\x46\x52\x7f\x8d\x3c\xba\x32\x4d\x58\xa1\xb1\x86\x57\x38\x53\xf8\xa9\xc0\x7f\x2e\x27\x03\x5f\x3c\xca\x59\x46\xa0\x22\x25\x29\xbe\x8a\x00\xec\x63\x5e\x76\x51\xae\x8b\x3d\xaa\x9d\x68\x0d\x91\x12\x6a\xa4\x9d\x8a\x37\xbe\xa4\xa2\x02\xb3\xa8\xed\xd0\x6c\xf0\x86\x17\x34\x51\x10\xee\x49\x5c\xbd\xbf\xb9\x15\xa8\x83\xf6\xbd\x5e\xaf\xc3\xb1\x2b\xfe\xbc\x51\x26\xd0\x34\xb8\x25\x42\xba\x66\x9b\x66\x40\x7d\xe5\x2b\xbb\x76\xa7\x62\xaf\x38\xca\xae\x69\xe9\x10\xca\xdf\xb9\x61\x25\x0c\x9a\x4a\x8a\x8d\x75\xf8\x78\x87\xdb\xa9\x46\xaf\x0e\x0b\x71\xa9\x64\x6f\xc4\x36\x48\x10\x4c\x32\x1f\x74\x42\x8e\x3d\x81\x00\x42\xcf\x9e\xca\x5c\x59\x4f\x43\x92\x2f\x5f\x3a\x9e\x26\xc3\x33\x06\x9d\x0b\x6b\xcb\x23\xfc\x90\x0d\x00\xbc\x96\x86\x07\xb2\x86\xd8\xd3\x6c\x69\xfa\x15\xcb\x74\xd2\x86\xb4\x46\xa9\xbd\x5f\x4d\x78\x09\xd5\xc2\xa3\xee\x9e\xda\x72\x26\x6e\x95\x83\x90\x9f\xf0\xfd\x05\x70\x1e\x82\x1b\x15\xfa\x24\xc0\xbd\x06\xf4\xb3\xb8\x2c\x22\xd6\x30\xa5\xca\x91\x4d\x00\x8f\x91\x9b\xea\xcc\x66\xeb\xc8\x82\x53\x07\x1c\xfb\x71\x3f\x71\xed\xa3\xa9\x23\x56\xf7\xb7\x41\x0d\x6a\x21\xde\x78\xb1\x95\x07\x78\x76\x16\x2c\x12\x9d\x6a\xac\x69\x1d\x1b\xca\x69\x0f\x5e\xda\x4e\x0c\x3b\xf6\x9a\x9f\x4c\xc9\xb4\x6d\xbd\xca\xc6\xea\x3a\x7e\x3c\x04\x98\xf5\xe0\x75\x68\xb9\x97\xee\x6e\x64\xa3\x12\xe4\xbf\x6f\xec\x45\x0a\x44\x1c\x4b\xd0\x83\x19\xda\x3c\xd8\xfe\xfc\x06\x48\x39\x3f\x07\xe2\x76\x16\x83\x53\x5e\xd3\xcf\x29\x10\x1a\x08\x41\x9f\xf0\xd7\x14\x64\x47\x4f\x90\xc7\xc7\xc8\xa7\x20\x4b\xdb\x86\x71\xfc\xc5\xb6\x87\xa9\x2e\x9c\x57\x57\x54\x88\x03\x2d\xda\xd9\x3d\xdc\x04\x2f\x0f\x90\xa1\xbd\x53\xdd\x0a\xdf\xb4\x08\x52\xab\xe2\x60\x40\x70\x6b\x90\x6e\x61\x91\x04\xd0\x3c\xc3\x9d\x09\x78\x99\xe6\x96\xbd\xf8\x1e\x5d\xf1\xb8\xd6\xb8\x4d\x18\x2a\x88\xda\xf5\x06\x25\x0e\x58\x8d\xa0\x04\xc7\x18\x4d\xa7\x41\x62\xdf\x65\xe1\x14\x58\x4d\xb6\xeb\x95\x03\x1f\x2e\xa0\x61\xf0\xbe\x2d\x83\xa0\xc8\x86\xd1\x3a\xb2\x48\xab\x89\x51\xd7\x0e\xea\x99\x69\x11\x45\xc6\x85\x95\x05\x31\x71\x27\x10\xc9\x87\x0b\x80\xf8\xd5\x9d\x31\x0b\x46\xe0\x49\xc3\xfe\xba\x20\x7f\xd9\x01\x12\x27\xc6\xae\x89\x6f\x74\x48\x00\x50\x67\x15\x0e\x06\x56\x51\x65\x06\xd4\x61\xac\x3e\x5c\x5f\xe6\xc4\xfc\x54\xc8\x70\xbc\xa3\x9e\xa3\x55\x1e\x9e\x51\xeb\xd5\x5a\xf6\x2d\xc7\x26\xa2\x03\x66\x23\x3d\x1e\x24\x7d\xfe\x2a\x1c\x44\x0c\x24\x5c\x18\x56\xe2\x4e\x1b\x88\xeb\x0b\x92\x09\x29\x15\x83\x90\x98\x0c\x94\xc2\xa1\x32\xec\xc2\x39\x83\x87\x16\x57\x04\x7d\xff\xfe\x3f\x6e\xde\xbf\x3b\x15\x9f\x9f\xec\xf7\xfb\x27\xa1\xf8\x93\xa1\xef\x94\x09\x7d\x69\x4f\xc5\xff\x7a\x7b\x79\x2a\x94\x6f\x7e\x58\x88\xb7\x78\xfc\x24\xaa\x4e\x76\xcb\xe0\x02\x01\x46\xc0\x43\xff\x2f\x1c\x4b\xb4\x75\x48\x61\x9b\xbf\xe5\x9f\x33\x91\x61\x1a\xd9\x41\x96\x9f\xc1\x07\x47\xd9\x8c\x21\xa1\xa7\x49\x6e\xe0\xc7\x38\x23\xd1\x6f\x00\xe3\x85\x0a\x6f\x96\x49\x27\x6e\x5e\x9f\xff\xf4\xef\xff\x53\xbc\x7e\x7b\x7e\x21\x36\xea\xb3\x68\xf5\x5a\xe1\xf5\x24\x6f\xed\x7b\xcd\x93\xfe\xbf\x9e\x84\xd5\xf0\xe4\x46\xaf\x8d\xf4\x43\xaf\x78\x01\x20\x9d\xc8\x79\xa4\x4e\x36\x77\x73\xcf\x5f\x8e\x41\x74\x63\x0d\x0d\xc0\x9b\xc6\x9a\xb2\xf7\x08\xc2\xce\x5c\x17\xe0\xc6\x95\x94\xd7\x61\xcd\x44\x46\x66\xa3\x4c\x20\xf4\x43\xd7\x96\x67\xf4\x52\xf1\x12\x50\xed\x1f\xc7\x85\x21\xf0\x1f\x3c\x93\x71\x26\xfe\x03\x42\x3e\x6d\xd8\xfa\x29\x64\x71\xef\x00\x78\x5c\x36\x6c\x86\x3a\x13\xec\xce\xc4\x1b\x61\x82\xe8\xc0\x42\x65\xca\x8b\x82\xe5\x18\x07\xa9\xf8\xce\xc4\xa5\xf2\x62\x1b\x55\x7e\xb0\xc6\x11\xdb\xa4\x44\x69\x1a\x3b\x9f\xcd\x83\xf2\x4b\x1e\x0b\x90\xcd\x46\xa7\x03\x58\xfa\xa9\xcd\x66\xcf\x63\x24\xde\x63\x5c\x24\x0f\xfe\x38\x93\x95\x22\xff\xa6\x90\x8a\x10\xe6\x72\x6e\x76\x28\x16\xe3\xec\xc4\x65\x07\x07\x5f\x17\xe7\x6a\x83\x71\x99\x71\xac\xc3\xd9\xec\x48\xf5\x41\xa3\x8e\x2e\x9e\xa7\xe8\xb8\xda\x9e\x0a\x76\xfa\x3c\x25\x7b\xbe\x53\x8e\x12\xd1\x9e\x8a\xc1\xa4\xdf\xe8\x70\x47\xe2\x2b\x7f\x82\x3d\x71\xf8\x8c\xe6\x9e\xed\x29\x3e\x66\x9d\x12\x16\xd3\x8e\x16\xf6\x1c\x85\x7d\xfe\x03\xa0\xd1\xc4\x25\xb7\x0e\xf8\xff\xbf\x37\x79\x57\xa0\x6f\xee\x60\x9a\x4d\x6f\x8d\xfe\x7d\xa6\x6f\x78\xbd\x92\x5c\x76\x71\xcc\xd9\x71\xf7\x21\xe0\x72\x96\x18\x03\x2d\xf0\xd4\x9d\xf8\x52\xf8\xb4\x6e\x0a\x40\x99\xe2\x4f\x1e\x01\x48\x8b\x95\x6d\xe3\x96\x9d\x06\x53\x15\xf0\x31\x9c\xbf\x43\xc6\x90\x8d\x1c\xbb\x71\x9c\x91\x07\x69\x3e\x7e\x16\xa2\x22\x37\x92\xae\x74\x78\x31\xf9\x26\x7e\x10\x05\x42\x7c\x91\xa2\x38\xc5\xe1\x08\x2f\xd5\x02\xf3\x4c\xf5\xd4\x3a\x2d\x49\x90\xc4\x23\x4c\xa4\x24\x02\x1c\xd5\x31\x11\x4e\x68\xcd\x4c\x75\x0e\xa9\x86\x63\x72\x18\x46\x21\x60\xf9\x80\x1f\x37\x87\x37\xed\x5e\xc4\xb4\x52\xaa\xe5\x43\x12\xf8\x9f\xf2\x84\x84\x30\x48\x70\x98\xe4\x9c\x4d\x90\x8f\x4b\x3f\xe6\x00\x42\xcf\xb9\x79\xc5\x61\x7b\x27\xcf\x50\x1e\x46\x43\xdd\x6a\xd7\xd8\xbe\x7d\x18\xf7\x0b\x04\xfa\x67\xb0\x9b\xb5\x97\xdd\x17\x9a\xfe\x82\xa0\xbe\x0d\x3f\x8e\x09\xbf\x0a\x83\xaf\xd7\x8c\x32\x5b\xbb\x95\x60\xfe\xfa\x02\x7e\x4c\x0e\xe7\x8d\x34\x06\x4d\xfd\xf1\x57\x3e\xd7\xbb\xce\x1e\xf8\x9d\xd1\x17\xf0\xc5\x2f\xa8\x4f\x41\xb2\x57\x39\x97\xcf\x2f\xf0\x6d\xcc\x57\xd6\x37\x1b\xf9\xdd\xb3\xa7\xcb\xe7\x81\x0f\xa7\x7b\x80\xce\xda\x3b\xf6\xf2\x91\x2d\xec\x9b\xf8\xd0\xcc\x2e\xbe\x5e\x99\x6c\x54\x64\xdb\xa2\x61\x91\x36\x38\x14\xa3\x27\xfd\xd2\x93\x4c\xd8\xaa\x11\x97\x06\x73\x10\xdb\x49\x63\x9f\x7a\x33\xd7\x99\xa4\x34\x00\x28\x18\x81\x0d\x3e\x77\x22\xdb\x27\xc0\x70\x90\xf6\x56\xdc\x6e\xd4\x21\x06\xae\x86\x17\xe5\xe0\x52\xb7\x7c\x3b\x07\x9a\xc7\x4f\x8a\xe6\x57\x8f\xb6\x2e\x07\x99\x9f\x32\x81\x18\x3e\xa8\x2d\x32\x07\xd1\xa6\x66\xe4\xea\xd3\xc2\x81\x66\xae\x17\xd3\x37\x3c\x23\xd4\xf8\xad\xd1\xd4\xd3\xa3\x6f\x8d\xe6\x45\xf3\x07\x47\xb3\xa2\x20\x21\xc4\x41\x98\xb5\x18\x2f\xa6\x65\xfa\x9c\x68\xea\xea\x57\xbc\x28\x3a\x3f\x73\x63\x15\xd1\x17\xa7\xfa\x21\x87\x91\x36\xef\xdc\x57\xbc\x2d\x3a\x0e\x4b\xf7\x15\xda\xa2\xb9\xb6\xe4\x06\xc5\xb1\x01\x5f\xab\x33\xca\x83\xff\x4f\x9d\xa9\xbe\xf1\x39\x81\x59\xac\x5f\x78\x52\xa0\xd5\xab\xd5\x02\x43\x2b\xd7\xce\x0e\x3d\x98\x13\xfc\x02\xdf\xe2\x06\xbe\x11\x84\x02\x4b\x9e\x51\x84\x49\x4c\x8c\x4e\x96\xe4\x55\x09\x89\xe0\x5e\x0b\x1a\xd8\x58\xe1\x99\x78\xa1\x57\x2b\x74\xb5\x7d\x67\x7d\x6a\xca\x02\x8b\xb8\x8d\xdd\xd7\xe1\x17\xbc\x50\x0a\x56\x85\x1b\xbb\xc7\x42\x37\x21\x25\x03\x73\xbb\x4e\xfb\x9a\xa2\x3a\xdf\x84\x0f\x88\x4b\x9d\x41\x0c\x06\x62\x50\x32\xcc\x07\xfc\xcc\xa1\x02\xca\x18\x5c\x83\x2f\xa2\x4e\xda\x18\x38\x11\xb4\x1d\xe9\x8a\x0a\xb6\x0a\xc3\x9d\xb4\x40\x08\x41\x9d\x91\x40\xf2\x17\x84\x4e\xda\xa8\x28\x4f\x10\x34\xd0\x40\xdd\x7f\x79\xf3\x0e\x3f\x21\xa6\x32\x45\xc3\x82\xe0\xda\x2f\x75\x47\xe3\x0d\x11\x17\xdd\xb0\x83\xc0\x8d\xaa\xe5\x80\x92\x21\x4f\x64\xc9\x99\x33\x64\x1e\x5e\x1b\x71\x78\x6b\xeb\xad\x34\x87\xe8\xba\x7d\x63\xb7\x8a\x54\x39\x7b\x45\x74\x10\x42\x70\x27\xcf\x51\x6b\x45\x28\x42\x50\x3c\x20\xac\x16\x0e\x68\x2b\x8e\x28\xbe\x98\x8b\x2c\xce\x79\x18\x26\x9e\x19\xbf\x40\x2e\x98\xf9\x63\x88\xb6\x97\x2b\x70\xe4\x0b\xff\x63\xea\xae\x57\xa9\xd8\x55\xaf\x9e\x8c\x8b\x91\xc3\x5d\xf8\x17\xd3\xe4\x06\x9d\x3d\xd2\x0c\xa4\x99\x61\xdf\x50\x6f\xc5\x89\xa3\xb8\x9b\xb4\xf3\x4b\xc4\xb8\xfa\x6b\x7a\x9f\x13\xd7\x3e\xbc\xac\x58\xf4\x29\xf7\xe4\xbb\x42\x06\x55\xc4\x71\x00\xf3\x15\x7c\x9d\x6e\xd7\xdb\x76\x68\xfc\xa2\x68\x77\x51\x1a\x39\x52\xc5\xab\x4e\x74\x76\x0d\x3a\x0f\x08\x94\x8c\xf6\xbe\x83\x69\x55\xef\x3c\x9a\xf6\xcb\x8c\xcc\xeb\xed\xae\xc7\x9b\x12\x46\xef\xe5\x3a\xbe\x9e\x27\xd7\x18\xa6\x25\xe5\x81\xe2\x3f\xe4\x84\x1f\x45\x99\xc8\x09\xb0\x17\x40\x16\x6d\xd5\xcb\x35\x30\xf6\x4d\x1e\xdf\x3f\x08\xa3\xd6\x30\x73\x9e\x35\xa0\x38\xe2\x38\x75\x7a\xac\x71\x4e\xe9\xc4\x93\x4d\x3f\x6d\x5b\x0a\x30\x1e\x73\x3a\x2b\x5b\x94\xfd\x2f\xf1\xd7\x62\xb1\x98\x59\x35\xd3\xd7\xd3\x77\xbd\x7a\x32\x9e\xeb\x0c\x3e\x0e\xc0\x9f\xd5\xe3\xae\x13\x3b\xab\x8d\x17\xe8\x94\x26\x7d\xb1\x52\xf8\xa2\x88\xa6\x56\x5b\xf3\x04\xce\xcb\xd4\x8c\xb1\x2b\x66\xac\x8e\x16\x4a\x5a\x32\xe3\x55\x0d\x4e\x6e\xbc\x23\xc0\xcb\xad\xdc\x16\xb0\x7a\xd2\xc6\x00\x77\xd3\xc9\x86\x42\x7e\x3f\x41\x95\x66\x01\x33\xc0\x78\xf6\xb2\xbc\x15\x2f\x16\xc7\x30\xf3\xc7\x2d\xd7\x33\x76\x6b\x6b\x6c\x8f\xfa\xee\x78\xcb\xee\xe5\xfa\xc1\x87\xe2\x46\xb5\xe5\x17\xd6\x58\xc5\x17\x4e\xd3\xf1\x1e\x28\x9d\xe4\x32\x3c\xc4\xf3\x04\x4a\x49\x7b\x64\xc2\xf3\x4c\x70\x91\x53\x71\xb6\xaf\x8a\x87\x7f\x53\x09\x8e\x69\x03\x9c\x00\xff\xae\xaa\x8f\xb6\x5f\x7f\xaa\xe0\x56\x12\xc2\xa0\xc7\xf8\xa5\xf9\x15\x24\xa8\x99\x03\x4c\xe8\xd1\x43\x80\x2f\x87\xae\x4b\xd0\xe5\x3b\x6d\xaf\xc2\x36\x2d\x8d\x7a\x02\x00\x2a\xf9\xe1\x59\x36\xf2\xe9\xa0\x97\xd9\x16\xfc\xa4\x87\xed\xd7\xc9\x8b\x33\xaf\x0e\x1f\x28\x4a\xbe\x81\xf4\x6a\x41\x45\xbe\x16\x67\xe2\x0a\x7e\x54\xda\xdc\x6b\x1f\xf8\x87\xad\x42\xab\xc0\x37\x90\x00\xe7\x8d\x35\xaa\x2a\xbc\x11\x2a\x08\xb6\x5e\xb3\x27\xc2\x19\xfb\x24\x50\x7a\x61\x07\x79\x56\x98\x45\xe6\x4f\x90\x04\x94\xa5\xeb\x69\x40\x0e\xa3\x32\xe3\x94\x1e\xa0\x23\x79\x0c\x25\x61\x08\x21\xf5\x21\xe8\xe2\xd9\xb3\x40\x1d\x06\x0e\x78\x09\xb8\xc0\x46\xd2\xa0\xe4\x07\x8b\x2a\x60\xd6\xa6\x88\xc4\xe5\x16\xa9\x9a\x8c\xd6\x6c\xd0\x63\x3d\x15\x0b\x5c\x2a\x18\xf4\xff\x11\xe1\x8b\x77\x77\x48\xed\x2a\xf1\xd9\x42\x4c\xa6\xc7\x6c\x73\x3d\x2c\x20\x0a\x22\xc9\x1f\xab\xf9\xa7\x9c\xde\x8f\xd7\xc6\x3f\xf1\x98\xd3\x14\xc7\x83\xcf\x39\x01\xba\x34\xa0\x59\x63\x60\x1e\x8e\x34\x22\xb2\xb2\xdf\xea\x74\x1a\xf7\x4f\x60\x98\xe2\x5e\xc9\x6f\xc9\xc8\x39\xe2\xcf\xf8\x2b\x65\x75\xb6\x61\x4f\xd5\x4b\xfa\x79\xd4\xa6\xe6\x21\x9f\x89\x12\x34\x23\x66\xc5\xc0\x45\x4c\x5f\x6b\x80\x43\xae\x18\xb6\x5f\xff\x6b\x9e\x18\xc5\xd3\xa2\x93\x56\xcb\x7b\xe9\x65\x7f\xac\xd1\x98\xcb\x6d\xff\xea\xa6\x8f\xcd\xd4\x0a\x0a\x33\xd6\x56\x4d\x1e\xfb\x84\x0e\x3e\x58\xa4\x7c\xfa\x33\x6f\x70\xbc\x27\xcc\xcc\xc4\xc8\xc6\x04\x1f\xfd\x44\x5b\x87\x2f\xbf\xfc\x79\xc4\xd0\xe8\xa1\x27\x40\xc7\xad\x0c\x94\x29\x86\xb5\xcc\x1b\xf9\x60\x89\x9c\x9b\xb1\x23\xa3\x95\x7f\xfe\x59\xd0\x79\x03\x95\xf3\xb6\x65\xb5\x25\xbd\x02\xc8\xe3\x97\x54\xa3\xab\x2c\xa6\xfc\xf8\x4d\xdb\x34\x72\xc0\xb7\x92\xc3\x62\xb1\xde\x2a\xa2\xf5\x0b\xfa\xbf\xd1\xbb\xba\x78\x0a\xf4\x6d\x4c\xcf\x5e\x05\xfd\x39\x16\x23\x95\x13\xf1\x51\xcd\x28\x3d\xd1\x57\x08\x88\xc0\xee\x1f\x11\x08\xbf\x81\xb7\x9c\xcd\x19\x97\x2f\xeb\xc0\xff\x75\x6f\x3b\x15\x1b\x2a\xae\x6d\xa7\x52\xf3\xca\xa0\x8e\x65\xc1\x58\x26\xa6\x93\x7e\x82\xdf\x65\x8c\xe9\xe5\x7b\xbe\x9c\x4a\x67\x6c\xfe\xd2\x07\xf0\xe3\x84\x1d\xc4\x9b\x9f\xc7\xd0\x06\x42\xea\xd3\x69\xfc\xce\xee\x2b\x3c\x8a\x17\x10\x35\xf2\x4c\xfc\x87\xd5\x86\x52\xca\x4a\x31\x2d\x70\x46\xe9\x0d\x9a\xeb\x20\x63\xe1\x23\xd5\xd3\xfc\xd1\x5b\x7b\x70\x12\xc5\x57\xf6\xe8\xad\x6c\x60\xec\x29\x36\xa9\x41\x2b\x9e\xf2\x95\x38\xc4\x3a\x7a\xfa\x06\xc3\x45\x14\xf5\xe6\x10\x5f\x53\x31\x84\x02\x18\x57\x77\xca\xba\x7c\x50\x00\x46\x17\x48\xb5\xe5\x76\x80\x3d\x77\x6a\x07\x44\x24\x28\xdb\x91\x43\x7c\x4d\x3b\x42\x2d\x10\x98\x8e\xfd\x1c\x8e\xb6\x47\xb6\xad\x40\x13\xf4\xdc\xf8\xcc\x8d\x9b\x98\x5e\x7b\xbb\xcd\xce\x7f\x30\xdd\x6d\x47\xfc\x8c\x5b\xcc\x1d\xa9\x98\x83\x36\x97\x33\x2c\x07\x9a\xd1\xcf\xbe\xde\xfe\x65\x22\x00\x01\x07\x43\xc9\x08\x9a\x19\xc8\x17\xaf\x4f\x4c\xcf\x25\x6c\x57\x62\x11\x81\x57\x20\xda\x40\x99\x5f\x3e\x92\x11\x8e\x9f\x5f\x42\x7e\x31\x3f\x54\x80\x61\xe4\x99\x6c\x01\xa2\x8e\x7b\x35\x6c\xb0\xac\xd6\x29\xb2\x48\xcc\x01\x2a\x12\xf1\x29\x1c\xef\xd8\x9c\xdb\xcb\x2e\x96\x14\x5c\x9f\x15\x7e\xb9\x0c\xb5\x95\x87\xf1\x6b\xdc\x10\x2a\xa2\xd8\x35\xc7\x05\xab\x69\x53\xd2\xb9\xfe\x4a\xdf\x2b\x93\x16\xcc\x51\xe1\x6a\x91\x6f\xf5\xe9\x02\xc9\xc8\xb5\xce\x99\xe0\x75\x0f\xa1\x12\x79\xe6\x03\xe9\xc8\x16\x06\xa0\xff\x39\xf6\xb9\x91\x66\x4c\x1b\xc0\x5c\x51\xc9\xed\xe3\x87\x48\xc4\x3f\xdd\x1c\x20\x29\x0f\xb7\x07\x48\x06\x46\x06\x36\x6d\x4e\x1e\x1e\x6a\x16\xd2\x83\x7f\xba\x59\x40\x61\xbe\xb2\x59\xa7\xdc\x26\xe4\x63\x02\xbd\x98\xa3\x14\x0f\xb5\x76\x24\x68\xc1\x32\xbe\xce\xa5\x2d\x26\x1b\x60\x81\x0b\x92\xe0\xac\x05\x6e\xa6\xa0\x5e\x2c\xc6\xfb\x29\x33\x21\xce\xf6\x54\xe6\xa3\xc0\x6d\x01\x63\x61\xf2\xe5\xa2\xf3\x30\xa1\x32\xd6\x80\x7c\x8e\x97\xc5\xd1\xdf\x2b\x43\x4e\xd7\x55\xbe\x3f\x10\x4f\x04\x8f\x8c\x15\x2f\x88\xc6\x3b\x2a\x52\x67\xe9\x18\x6b\xa5\xfa\x08\x33\xf7\xa9\x6a\xa5\xdb\x2c\xad\xec\xe1\xaa\x84\x7f\x57\x85\x1f\x7f\x95\x13\xaa\x31\x87\x8c\xaf\x04\x67\x83\x5a\x8c\xa7\x1c\xfc\x26\x88\x8b\x51\xce\x38\x2f\x12\x1c\xbe\x2f\xbf\x66\x66\x72\x3d\x50\xa8\x1c\x72\x32\x00\x9f\x72\xe7\xd5\x56\xbc\xc3\x84\x6a\x6b\x8d\x46\x7b\xe6\xb7\xf8\x4b\x9b\x75\x55\xc4\x7b\x7a\x19\x3e\x2a\x88\xf0\x43\x29\x97\xd2\xf9\xca\x5b\x0f\xcf\xc4\xde\x86\xff\x3f\x8b\x93\xb6\x4a\x5d\x07\xed\xb8\x76\x1e\xd8\xac\x1b\xfe\xed\x32\x80\x64\xce\x87\xe1\xea\xe8\x23\x47\x01\xed\xac\xc9\x7a\x32\xb6\x9b\x5a\x09\x58\x07\x37\x57\x25\x47\x71\x02\x3b\xb8\x56\x7a\xb9\x64\xf5\xcf\xb3\x25\x68\x75\x97\xcf\x51\x35\x7a\x9a\x25\x14\x33\x92\x67\x14\x17\x94\x29\xb9\x3c\x75\x53\x3a\xbe\x0d\x5d\x24\x39\x2f\xcb\xba\x64\x33\xa9\x85\xef\x94\xf2\x34\xf6\x28\x49\x29\xec\x5b\x52\x60\xb7\xe0\x9e\x4f\x42\x44\x91\x85\x0e\x54\x45\x12\x3a\xeb\x8d\x7a\x82\x8a\xe7\x3c\xad\xb3\x6b\x6d\x04\x2a\xb3\xcb\xee\x11\x6b\x5f\xe2\xe4\x68\x68\x05\x0a\x88\xd2\x9d\xa7\x6c\xd8\xca\xb6\x48\x85\x0d\x9a\x27\x90\xf9\xec\x04\x30\x85\x83\x76\x8b\xb9\x85\xc4\x12\x7b\x5c\x4c\x28\xb6\xcf\x41\xba\xbd\xc6\x87\x71\x6f\xe0\xc7\x2c\x4c\x3f\x80\x5a\x73\x30\x59\x6e\xd3\x29\x69\xea\xc1\x2c\xb5\x69\x6b\x4b\xcf\x4b\x5f\x84\x44\x31\x98\x25\xd8\x18\xbe\x87\xfd\xe8\x1e\x2c\x94\x1d\xa1\xe7\x5d\x27\x30\x8b\x4b\x66\x8e\x5b\xf3\x67\x69\xc2\x4c\xa7\x32\x59\xb8\xca\x24\x4a\xba\xc4\xa4\x48\x88\x0d\x4b\x16\x2e\x9c\xfd\x55\x38\x46\xad\x4c\x10\x11\xcd\xb7\x37\x15\x0e\x80\x40\xf0\xf5\xbd\x1a\x35\xb2\x74\x5d\x26\x90\x2f\x60\x18\x35\x71\x16\xc5\xb7\x37\x12\x0e\x5e\xb3\xc6\x63\xe7\x48\x23\x0f\xa2\x57\x8d\xed\x5b\x92\x71\x3b\xeb\x3c\x68\xa9\xf1\x21\xd2\x87\x51\x1e\x6b\xf5\x83\x38\xbf\xa1\x1b\x6b\xed\xeb\x75\x93\x9a\x6f\xc5\x5a\xf6\x4b\xb9\x46\x47\x1d\x8a\xc0\x64\x4b\x67\xf1\x23\xc5\x1f\x1a\x60\x68\x50\x1b\x18\xad\x19\xf4\xc7\xda\xd6\x2b\x88\x5c\x22\xbb\xae\x76\x6e\x43\x46\x10\xd7\x0a\xef\x71\x1e\x2f\x9c\xdb\x3c\x95\xf4\x52\xbb\x02\x73\x01\xf7\x18\x1f\xf1\xf9\xbe\x91\xe0\xeb\xfe\x33\xc4\x19\x02\xd2\x0e\xa5\x99\x09\x0e\xa3\xf5\xc3\x83\x15\x8d\xfa\x92\xd1\xf5\x6c\x6c\x7b\x68\x8a\x57\x5f\xd5\x03\x0e\x0d\x73\x0d\x49\x74\x47\xd4\x28\x30\x36\x27\x2a\x06\x8c\x9f\x75\x9e\x33\xc8\xe0\xdd\xae\x26\x6b\xfe\x81\x2a\x1e\x98\x85\xc7\xdf\x52\x6b\xde\xcd\x50\xc3\x03\x6b\xa8\x57\xda\x68\x3f\xd9\x0a\xd7\x90\xac\x65\xa7\x7f\xff\x27\x37\xc4\x1c\xe2\x7f\x75\x43\xf4\x59\xab\xc6\x5d\xca\x19\x04\x88\xed\x56\x0f\x3b\xaf\xe1\xa0\xb8\xc1\xa7\xea\x3f\xc0\x77\x4e\xb0\x87\xbe\x0f\x4c\xe2\xda\xf6\x76\xf0\x1a\x1f\x35\xc3\x34\xf1\x8a\xd3\xdc\x4c\x01\xb8\x14\x39\xd4\x03\xc5\xa8\xe4\x32\x6f\x21\x59\x7c\x80\x57\xe9\x52\x29\xe0\x9f\xb8\x8c\xec\x40\x75\x8c\x3a\x6d\x60\xac\xa8\xd4\x39\x67\x64\x25\xa9\x8c\x5d\x7a\x49\x81\x07\x09\xf8\x3d\xa5\x64\xb0\x70\x15\xa9\xfa\xba\xb3\xf6\x6e\xd8\xd5\xa1\xab\x10\x3a\x09\x93\xc5\x25\x24\x8b\xdb\x90\x3c\xad\x81\x5b\x15\x8b\x8d\x1a\x75\xac\xdc\xaa\x57\x93\x32\x2f\x7b\x35\x85\xe7\x91\xdb\x28\xb9\x9b\x8c\xdb\x6b\x25\x77\x93\x51\x03\xc8\xe9\x00\x00\xec\xf1\x51\xc8\x4b\xe9\x16\x24\xee\xbc\xc4\x9b\xb6\x3b\x56\x87\x06\x8b\xa9\x31\xbc\x09\x7c\xfc\x91\x12\xc4\x4f\x8d\x5b\x45\xd7\x87\x93\x56\xd9\xe5\x5f\x55\xe3\x1d\x43\xbf\xc7\xcf\x0c\x6a\x69\xad\x77\xbe\x97\xbb\xc0\x0a\x83\x8d\x3e\x0e\xd3\x2f\x9c\x1e\x58\xe1\xe6\x6e\x32\x52\x08\x3d\x1d\x2a\x84\x3e\x3e\x56\x5b\xb7\x93\xa6\x76\xbe\x1f\x1a\x3f\xf4\xca\xc5\x0a\xdf\xde\xec\xa4\x11\x37\x31\x63\x52\xe3\xa4\x64\xbe\x42\xc7\x85\xe7\x6a\x6e\x64\xb3\x51\xb3\x55\x5f\x84\x9c\x07\xeb\x9e\x94\xcd\x2b\x9f\x14\x9f\xdb\x29\xbd\x5d\xe9\x2e\x10\xa5\xe5\xd0\xdc\x29\x5f\x6f\xa4\xdb\xd4\x1e\x9e\xd9\xcc\x70\x5d\x31\x98\xf8\x05\xc0\xc4\x6b\xe9\x36\xe2\x16\xd4\x73\x33\x58\xd7\x4d\xbd\x55\x5e\x82\x3d\x53\x86\xe5\xd5\x85\x78\x4b\xc9\x73\xa5\x40\x6d\x57\x93\x04\x44\xbb\x30\x30\xa5\x19\x86\xf7\xa0\xd9\x23\xa1\xe8\x3c\x82\xcc\x61\x33\xea\x33\x1d\xe9\xcd\xa1\xa1\x87\xdd\x3f\xfb\xd0\x86\x6b\x4c\xc9\x60\x41\xcc\x5b\x37\x35\xd3\x48\x30\x75\x81\x70\xae\xaf\x2e\x60\xfb\x4e\x28\x58\x02\x46\xc2\xf5\xea\x42\x5c\xc9\xc1\xcd\x02\xee\x24\x6e\xa6\xa3\x90\x5c\x3d\x03\x72\xcd\x63\x38\xaa\xd4\xe1\x50\x22\x59\x41\x19\x7b\x01\x6e\xbe\x18\x3e\xb5\xde\x49\x34\x75\x0d\x52\xb7\x78\x8b\x21\x55\xaf\x42\x1a\xc1\x1a\xb5\xcf\xaf\x5f\xd2\x3d\xf0\x39\x26\x32\x18\x4a\x16\x20\x4f\x60\x0a\xf3\xc2\x2d\x5b\x8d\x03\x89\xa6\xbc\x22\xfc\x2c\xa6\xa5\x03\x74\x67\x1d\xa5\x71\x58\xf0\xf8\x7a\x1d\xa5\x83\xa3\x4a\xaf\xd6\xda\x79\x8a\xcc\x01\xe1\xb7\xc1\x9b\xf3\x1a\x92\x59\xbe\xc9\xfd\x73\x6f\x2d\xf4\x32\xeb\x58\x69\x68\xc9\xdd\xfc\x72\x68\xf2\x05\xe1\xc8\x5f\x4a\xa2\x9e\x81\xf0\xc2\x06\x7e\xa5\xe6\x81\x0d\xfd\x10\x32\x2c\xc7\x8e\x6e\x41\xbb\xbc\x34\x48\x96\x2c\xaa\x8d\x30\x5c\x82\xd4\x99\x8d\xf2\x4e\x3a\xb7\x07\x43\x6d\xd6\x8b\xc3\xcd\x82\xd0\x9e\x9c\xf2\x40\x2f\x0f\xe6\xce\x83\x21\x33\x33\x6e\x7d\x0a\x1e\x48\x56\x70\x91\xc5\xa0\x81\xa0\x9c\x2f\xdd\x40\xa6\xb1\xc8\x56\x0a\x98\xce\x94\x6b\x64\x2b\x3f\xa3\x70\x02\x43\x4a\x91\xcb\xc9\xd4\x32\xf3\x9c\xb9\xe0\xdc\x4b\xbd\xd5\x47\xcb\xb2\xd2\xef\xfb\x1b\xe5\xc5\x93\x1f\xc1\xab\xd4\x29\xb1\xee\xec\x12\xc2\xb5\x62\xcc\xd9\x2e\xa0\xf8\x81\x70\x68\x57\xe7\x8b\x12\x94\xd3\xdc\x60\xf8\x59\x2e\xd2\x5d\x6f\x37\x7a\xa9\x3d\x4e\xc8\x4c\x01\x06\xe0\xc7\x35\xd7\x71\x2d\x87\x9a\x68\x89\x17\x85\x20\x4e\x52\xc8\xc0\x15\x6a\xfb\xcc\xd0\x80\xd7\x3c\xc6\x8d\x0a\x22\x06\xb9\x13\x4c\x30\x64\x65\xb2\x77\x49\x03\xdb\x87\xb1\x19\x73\x3c\x7a\xbb\xb3\x7d\xe8\x02\x2e\xb6\x2f\xe1\x42\x70\x81\xe0\x05\xef\x3d\xb7\x64\xd2\x65\x00\xaf\x18\x24\xfd\xbc\x38\x1f\xbc\x6b\x2e\xd7\x06\x3c\xd1\x52\xdb\xbd\x49\x8a\xc7\xac\xa5\xf8\x80\x4b\x68\x6f\x8a\x5b\x61\x03\x67\x1a\x78\x5e\x78\x78\x31\x08\x59\x79\xfc\x91\x18\x2e\x28\xbd\x14\x68\xfb\x18\xe2\x02\x6d\xe7\x49\x2d\x99\x37\x60\x23\x1d\x99\xe9\x1c\xa9\x7f\x5b\xe8\x98\x8b\xea\x73\xfd\x58\xd9\x00\xbc\xf4\x8b\xae\x3b\x93\x8b\x18\x57\x36\x65\xc6\x42\xeb\x3c\x9b\xb2\x87\xc2\xe5\xdb\x9e\x42\x33\x8c\xa8\x7b\x71\x13\x5e\x50\x79\x28\x91\x53\x6f\x48\x28\x2d\x89\x20\x29\xdd\x12\xf1\x05\x11\x6a\x61\x81\x70\x8f\xeb\xcb\xb6\x73\x51\x1b\x96\x28\xef\x6f\x31\x2d\x6f\x02\xa6\x4c\xef\x91\x31\x9d\xf4\x87\xe2\x4c\xfc\x19\x7f\x51\x3a\x28\x11\x91\x7b\xeb\x39\x6d\xec\x20\x47\x90\x41\x36\x0b\x27\xf7\xef\xaa\x02\x75\x71\x41\xb7\xdd\x31\xc2\xed\x08\x16\x9f\x38\xe1\x68\x26\x44\xd4\x29\x2b\xeb\x05\xa6\xe4\xcf\xc0\x62\x8a\x82\xb0\x75\x6d\x0c\x60\xd7\x52\x3a\xd3\xac\x18\x31\x9b\xd2\xa7\x76\x61\x59\x93\x09\xfd\xa8\xbd\x59\x6d\x00\x35\x7f\x98\x64\xad\x74\xaa\x19\x7a\xed\x0f\x10\x49\xd6\x36\xb6\x43\xdf\x5a\x48\x83\x20\xb2\x21\x8d\xdb\x39\xf2\x9e\xc1\x54\x08\x77\x71\x26\x5e\x5b\xc7\xed\xde\xe1\x03\xb1\x57\xb6\xe7\x14\xd0\xef\xb5\x60\x9a\xad\x4d\x2b\x5e\xbc\x2b\xd3\x0b\x33\xb0\x18\x5a\x10\x1f\xbb\x77\x45\x88\x41\x8e\x1f\x88\xe1\x03\xd5\x62\xbd\x10\x2f\xde\xbf\xfd\xbf\x4e\x5c\x8e\x90\x8f\x46\xae\xee\x8a\xbe\xe7\x60\x32\x93\x31\xd9\x1b\x6d\xd6\x3f\xd3\x9b\x4c\x8c\x03\x5e\x91\xb2\x3d\xda\x68\xef\xba\x30\x00\x5e\x7d\xf6\x70\x2d\x68\xac\xa7\xe7\xa0\x37\x7a\xbd\x01\x7b\x08\xdd\xa9\x35\xfa\x41\x84\x6d\xbb\xe0\x99\x0c\x7c\x17\x3d\xf8\x06\xfc\x16\x5d\xed\xfc\x22\x9d\xca\x41\x60\x88\x00\x20\x0e\x91\xf4\x18\xcb\x50\xcd\x39\x20\x8b\x73\xce\x3d\x0a\x3d\x7e\xa7\x1b\x28\x52\xe4\x10\x42\xeb\x9d\x5e\x9b\x27\x1a\x9e\x47\x09\xa4\x51\x75\x2d\x39\xf4\x17\xc1\x1a\x17\x93\x1a\xd8\x0a\x0c\xde\xb9\x78\xf7\x70\x6b\xdc\xc0\x4d\xbf\x19\xbe\xd4\xf2\xad\xd4\x10\xf3\x13\xfe\x8f\xc1\xee\x55\xaf\x57\x87\x7a\xdd\xdb\x61\x57\x67\x34\xf9\x4c\xfc\x09\x72\x04\xe4\x64\xd4\x9a\xca\x61\x01\xba\x6b\x83\xc8\x8c\x30\xd6\xaf\x00\x3a\x9b\x8d\x34\xf0\x58\x02\x1f\xe9\x88\x90\xf8\x4a\x47\x01\x91\x1a\xde\x58\x13\xe4\x0b\x0c\xa6\xd3\xa1\x65\x2c\x16\x8b\xbd\x00\x2b\x6d\xa9\xe1\x65\xe5\x4b\x0a\x9c\x8d\xd7\x5e\xd9\x2a\x48\x18\x03\x12\xd5\x06\x41\x1b\xbb\x45\x8b\x23\xa1\xbb\x04\x00\x88\x54\x13\x00\xc6\x63\xe9\x42\x51\xd0\xa0\x9f\x89\x97\xca\x37\x1b\x91\xb2\x42\x21\xda\x8d\xe8\xe6\xf4\x99\x77\x6b\xec\x33\x54\x56\x74\x19\x6f\x60\x23\x00\xda\x6c\x14\x10\xdb\xc0\x01\xd5\x4e\x86\xe3\xc2\x89\xf3\x56\xdc\x9c\x33\xa9\xd9\xfa\x5d\x4d\x17\x03\x37\x6f\x6f\xaf\x1e\xa0\x5d\x01\x94\xe8\x0a\x40\x66\xc4\x25\x64\x11\x81\x81\xac\x8c\xca\x70\x44\x22\xa4\x53\x8e\xa3\x6e\xaa\x96\x08\x96\x9b\x87\x7b\x88\x83\x0e\x3b\xbc\x57\xce\xf7\xba\xc1\x87\xe4\xa9\xcc\x42\xbc\x1d\x3a\xaf\x77\x9d\xe2\x14\x36\x14\x85\x60\x04\x3b\xd9\xf3\x93\xdb\x8d\xdd\x6e\xa5\x78\x7c\xfa\x78\x51\x9c\x02\xb5\xef\x5c\x8a\x64\x7a\x7b\x79\x23\x7e\x35\x4d\x7f\x40\x7b\x12\xea\xe9\x9d\xde\x05\xb0\x1a\xd7\x7c\xe8\xf0\x9d\xde\x01\x2c\xae\x75\x26\xb7\x72\x5b\x3b\xd5\xdf\xeb\x26\xee\xc9\xab\xf3\xb7\xa0\xc2\xd3\x8d\xca\x89\x3d\x55\x0d\x4f\xc3\xb1\x10\x95\x1a\x71\x3e\x78\x5b\x08\x51\x5c\x2a\x7b\x81\x69\x7c\x3c\xa2\x29\x08\x8f\xeb\x84\xc7\x2e\xa1\x0b\x56\xbb\x38\xfa\x78\x59\x1c\x2b\x16\xb9\xfa\xec\xee\x2d\x9d\xc9\x63\x69\xae\x2c\xfe\x25\xd7\xb9\x45\x71\xda\xe6\xac\x57\x89\xe7\x2b\xad\x32\x73\x64\x19\x9b\xfc\xd0\xb8\xcd\x86\x19\x2c\x4b\x14\x90\x35\x32\x00\x64\x1e\x33\x42\x1d\x0d\x65\xa6\x25\x72\x53\xa6\xe9\x18\xcf\x58\x3b\x3e\x60\xe1\x48\x4b\x14\x78\x67\x1d\x3d\x27\x8f\xa0\x46\x2e\x1a\x60\x96\x07\x34\xb1\xa1\x4b\x66\xb2\x18\x48\x8c\x7a\x8a\xa4\xaa\x1c\x41\xe5\x01\x43\x71\x01\x00\xef\x43\x9c\x73\xd6\xcd\x11\xe7\x5c\x36\xe3\x0b\x0c\x34\xa2\x41\x09\x9c\x1c\x95\xd8\xb9\xe1\x32\x5b\x74\xc4\x94\x8c\x7c\x1a\xe8\x38\xd0\x7e\x33\x2c\x6b\xb9\xd3\xb5\x32\x2d\xfa\xb9\x9c\x89\xf3\xab\x37\xe2\x57\xfa\xac\xc8\x02\x61\x61\xac\xaf\x1d\x78\x0c\x7d\x0f\x2e\x62\xca\xff\xc0\x59\xa4\x89\x8f\xa6\x0a\xa4\x89\x2f\x2d\x16\x08\x56\xee\x76\x91\xc3\xdb\xed\xba\x82\xbd\xcb\x40\xee\x91\x56\x67\x10\x7f\xa2\xd0\xb1\x19\x10\x86\x2d\xc9\x81\x3e\x5c\x5f\x32\xc0\x98\xf3\xa3\x64\xbb\x5a\x75\xda\xa8\x7a\x8b\x2e\x5d\xef\xf1\x53\xbc\xb5\x6d\xac\x9f\xe2\x01\xd5\xbd\x1d\x50\xd5\xbe\xce\x5e\x08\xb9\x86\xc4\x30\xc0\x0c\xde\x0f\x78\x7c\xe2\xf5\x32\x6a\x6d\xb2\x2c\xaa\x28\x64\xe5\x95\x04\x99\x99\x1f\xaa\xc1\x18\x1a\xa3\x0e\x82\xfd\x43\x03\x6e\x7a\x75\x6f\xad\xaf\x77\x12\x8f\x21\x48\x47\xcf\xbf\x6b\x6b\xbd\xb8\x92\x7e\xc3\x85\x3a\xbb\x9e\x96\xb8\xb4\xeb\x23\xe0\x14\x40\x18\xb7\x1a\xf7\x01\xd3\xc6\x6b\x11\xba\x15\xdb\xe6\x36\xd9\x6c\xdf\xbc\x9e\x9f\xea\x00\x35\x95\x1f\xb2\xcc\x20\x04\xf9\x9a\x02\xc1\xd7\xb8\x8a\x48\x26\xf2\xe2\x17\x8a\x0f\x8f\x8b\x29\x2f\x76\x64\x66\x43\x56\xce\xc6\x67\xc9\xc0\x93\x18\xce\x05\x06\xc4\x4c\x80\xf2\x21\x9b\x8c\x14\x00\x28\x32\x32\x2d\x6f\x34\x6b\xe9\xb1\x27\xd9\xd5\xe7\x08\x44\x9c\x7b\xec\x55\x8e\xee\x4e\x1d\x6a\x88\xc1\x46\x75\xfe\xa7\x3a\x60\xec\xb5\x71\xbd\x77\xea\xb0\x0e\xad\x8f\x60\x6b\x65\xc4\xf7\x8f\x9d\xdb\x3c\xc1\xac\xc7\x3f\x4c\xca\x6c\xb5\xd1\xdb\x61\x8b\x1e\xda\xfa\x77\x85\x4f\xcf\xc2\xb3\x12\x90\x01\xb5\x05\x99\x52\x5c\x84\x8c\x87\x8a\xba\x99\x52\xae\x4a\x4b\x68\x67\xd3\x5a\xc8\x35\x63\x73\x4b\x02\xa0\x8b\x81\x4e\x05\xa6\x63\x0e\xc6\xaa\x2c\x35\xde\xc0\x17\x72\x5c\x39\x36\x78\xb2\xa7\x4e\xf2\xf7\x4b\x78\xc2\x87\xa5\x70\x82\xdc\xca\xcf\x49\x19\x07\x7a\x36\x54\xe7\x8d\xf5\x77\x04\xbe\xeb\x15\xc6\x16\xad\x3b\xdd\x28\xe3\xe8\xed\x26\x4a\x14\x97\x94\x38\x26\x18\x1b\xef\x77\xf5\x1a\x70\x33\xb9\x80\x18\x8e\xaf\x12\x66\x62\x67\x40\x67\x05\x63\x50\x6f\xf5\x3a\x3e\x87\x46\x5c\x0d\x68\x59\x61\x28\xc4\x5b\xce\x65\x04\xe4\xba\x5a\xaf\x02\x6b\x1c\x06\x1e\xef\xdc\x9a\x43\x7a\x9f\x99\xd8\xe6\x8b\x94\x17\x67\x0b\x5a\x18\x67\x0b\x1a\x37\x3b\x4f\x00\x47\x46\xcc\x10\x9a\xde\x76\xe8\xee\x53\x63\x18\x76\xd4\xf2\x84\x43\xeb\x02\x73\x29\x58\xfc\x7b\xc8\x8d\xd5\xb5\xcb\x54\xd9\x0b\xb6\xdc\x9a\xad\xb0\x5d\xd6\xb9\xf2\x21\xa5\xe6\xa2\x7a\x4a\xcd\x55\x17\x29\x95\x28\x58\x4e\x81\xdb\x65\xed\x5c\xc7\x44\xf8\xe6\xe6\xb2\xa4\xf4\x29\x37\x71\xd4\xdf\x07\x19\xf2\xd1\xce\x3a\xbf\xee\x95\x7b\x24\xac\xe9\x0e\x3f\x64\x25\x68\xe5\xe6\x2b\x95\x52\xc7\x38\xdc\xdf\x3a\xed\xd5\x1f\x1e\xc1\x05\xfe\x23\xaf\xdb\xe5\xa3\x1f\xaa\xfc\xd0\xd4\xe0\x5b\x9c\x9d\x9a\xba\x39\x32\x3e\xf1\xfe\x40\x05\x11\x33\x0b\xae\xce\x2f\x4c\xa1\xe8\x49\x1e\x27\xe5\xd0\xf2\x71\x96\xb8\xe7\x78\x98\xe5\x9c\x33\xb7\x6b\x03\x2f\x01\xa4\x8c\xf4\xb2\x21\x38\xe0\x5f\x33\x9a\x5f\x20\x39\x35\x10\x1f\xab\x0a\x92\x79\xe0\xae\xc8\x63\x97\x9b\x77\xa3\xd7\x46\xbc\x31\xe8\x70\x1f\x37\xa5\xee\xd2\x7d\xc8\xdb\xd0\xfe\xfc\x0a\x64\xdc\xfe\x09\x29\xe3\x5e\x3c\x4c\xd2\x68\xc7\x35\x72\xe7\x9b\x8d\x4c\x9b\xec\x02\x13\x22\x3f\x81\xb1\x81\x9a\xb0\x14\x3a\x32\x67\xc2\xf8\x41\xe0\xef\x2d\x2e\xc1\x7e\x29\x76\xd6\x29\x9f\xf4\x31\x45\xa1\xeb\x90\x17\xf5\x37\x79\x61\x2e\xcd\xf1\xfd\xe2\xcc\x73\xdc\x9e\xd9\x99\x87\x00\x95\x29\x62\xc3\x7f\x85\x4f\x71\x09\x9f\x71\x84\x30\x20\x0f\x5c\xa1\xd9\x81\x74\xd7\x21\x05\x6e\xd2\xec\x90\x8e\x9d\x2f\x8a\x67\xf9\xdc\xe4\x2c\xdd\x5b\xf8\x9e\x6f\x21\xc1\x1e\x3d\xea\x29\x3f\x52\x49\xd5\xd9\x9c\x42\xfe\x7a\xf9\x7e\x04\xe9\x06\xb8\x35\xaf\x03\x19\xd6\x9f\x41\x01\x03\x09\x40\x82\xf5\xe7\x11\xf4\x0c\x85\xa0\x9c\x19\x7a\x00\x97\x71\x70\xea\x92\xca\x06\xae\xe1\xe0\xd8\x85\x1d\xc4\x70\x11\xa4\x5e\xa1\x43\xfe\x99\x78\x19\x0a\x78\x8b\x51\x18\x21\xd0\x2a\xec\xc5\x90\x14\x38\xec\x9f\xc5\xc9\xfd\xb4\xb4\x43\x47\xf7\xdb\x04\x9e\x5e\xcc\xa5\x90\x94\xa1\xf0\x22\x0e\x3c\x5a\x14\xc6\x71\x07\x2b\xc2\xf9\x61\x47\xc8\xe9\xa8\xc7\x93\x02\x6e\xd0\x93\xfd\x30\xdc\x99\xcf\x62\x42\x48\xd9\xca\x1d\x92\x07\x04\x3d\xc7\xef\x12\x08\xcc\x4c\xee\x65\x17\xa1\xde\x50\xc2\xa4\x56\x93\xd7\x69\xe8\x51\xc0\x34\x0d\x68\x0c\x9f\x11\x3f\x74\x60\x9d\x67\x24\x09\x7a\xd7\xdb\x7b\xcd\x76\xe6\x08\x7f\x45\x49\xe9\xe4\xc6\xef\x84\x99\x21\x08\x75\x3a\x47\xed\x9d\x8e\xca\x87\x0b\xf8\x2a\xce\x13\xa2\x1b\x61\xa3\x23\x6c\x22\x1d\x37\xca\x53\x89\xc8\xcd\x37\x71\x64\xf8\xf6\xfc\xd5\x45\x1c\x1b\xbc\x68\x1f\x75\xa6\xd3\x2b\x15\xaf\xe5\xa9\x37\x97\x7a\xa5\x0a\xe0\x70\x0e\x3b\x8e\x90\x18\x8e\xeb\x1b\xf1\xde\x74\x87\x51\x27\x72\x54\xd4\x93\x84\x29\x8e\x8c\x06\x5b\x89\x6c\x60\x30\x61\x7e\xc8\x19\x9a\x4e\xa9\x0c\x9c\x8e\xa9\x31\x75\x5e\xf7\xe4\x09\x9a\x76\xf6\x2b\x4a\x1a\x8d\xe8\x4a\xb5\x10\x0e\xa3\xad\x63\x09\x1a\xd7\x97\x9c\x23\xce\x21\x27\x91\xcc\x20\x2d\xc5\x86\x07\x61\x69\xb6\xd1\x01\x8a\xdb\x03\x91\x63\x36\x7a\xbd\x81\xf7\xa5\xb2\x56\x61\x00\x99\x83\xf1\xf2\xb3\x78\xcd\xf9\x39\x86\xc0\x2b\x42\xe9\x20\x18\x3a\xe2\x13\xa1\xd4\x25\x24\xc0\xd9\x2e\x85\xd3\x66\xdd\x61\xe4\x94\x1f\x8e\x16\xaf\xb3\x88\x3c\x19\xa2\x8b\x94\x5a\x62\x0b\x65\xe6\xb1\x71\xb8\x96\x88\xe3\x25\x24\x7c\x8f\xca\x0f\x08\xd8\x52\x14\x5c\x37\xb5\xec\xd7\x64\x50\x71\xde\xaf\xe1\xb9\x68\x57\xa0\x06\xd6\x52\x65\xa7\x46\x64\x36\xc7\xe7\x06\x82\xc3\x4b\x75\x39\x34\x3c\x14\x43\xda\xa2\x99\x12\xe0\xb6\x93\x15\xb8\x00\x37\x9e\x64\xcf\x3d\x53\x04\x62\x28\xa6\x12\x10\x3e\xf1\xc1\x02\x64\x38\x82\xe0\xaf\x2e\x66\x80\x73\xd1\x38\x2e\xa1\x20\x12\xcf\x2e\xa1\x00\x45\xcc\x62\xce\x28\x86\xe4\xa9\x87\x39\x3b\x5b\x2c\x9a\x1e\x43\xf2\x87\x7f\xb7\xd2\xdd\x45\x37\x8c\xe2\x8e\x8d\xd3\x5c\xb3\x51\xed\xd0\xa1\x50\x83\x3f\x13\xbc\xfa\xec\xd9\xa0\x07\xb6\x2f\x67\x40\x10\x14\x3b\x38\x8e\x82\x12\x7e\x16\x00\xea\xb3\x6a\x86\xcc\xb6\xef\x57\xfc\x26\x63\x9a\x84\xc6\xb2\xeb\xe6\x60\x40\xa5\x7f\x85\x29\x19\xcc\xdc\x03\xfe\xdc\x74\x92\x73\x51\x44\x3f\x5a\x7f\xac\x9e\x27\xa2\x62\x87\x15\x76\x03\xa1\x77\xb0\xe9\xc6\x61\xe4\xc3\xc2\xb0\x10\x0a\x09\x03\x16\xd7\x31\x44\x0e\xc4\x44\x42\x48\x0a\x97\x13\xe1\xc9\x11\x83\x38\xb7\x30\x43\xb1\x56\xd5\x05\x86\x42\x76\x78\xe4\x87\x8f\x20\xb1\xc4\xfc\x56\x15\x10\x2f\xe8\xb3\x80\xd1\x06\x95\x25\x98\x85\x02\xdb\x1b\x4c\x23\x94\x99\x63\x0e\x2b\x31\x11\x98\xe2\xac\x81\xc2\xf0\x86\x52\xc6\x90\x5c\x33\x00\x9d\x77\xdd\x64\x34\x72\xf9\x28\x4f\x83\x37\x46\x32\xef\xa9\xac\x4f\xe3\x69\xe4\x2c\xbb\x83\x55\xbc\x98\xb4\x36\x6a\x22\x69\x46\xd8\xcd\xe8\x4b\xd6\xea\xd5\x47\x1c\xfb\x4f\x1c\x8e\x83\x0c\x23\xd8\x1e\x29\xb3\x01\x2e\xa2\x26\x9e\x40\xb0\xbf\xaa\x57\x26\x7b\xb6\x0b\xbf\x8a\x42\xe0\x75\x87\x81\x81\x4f\x3e\xfe\xf8\xc9\x71\x64\x60\x6f\x33\x7c\x1f\x7f\xfa\x14\x50\x7e\xfc\xc3\x27\xc4\x4a\x8f\xc0\x13\xd6\xf4\xc2\x6d\x56\xe2\xc7\x4f\xee\xa9\xeb\x9b\xa7\xe3\xb2\x42\xfa\x11\x58\xc8\xfc\x1f\x09\xf1\x4e\xf6\xaa\xe6\x30\x52\xb4\x28\x31\x59\x3b\x6b\x28\x94\x9c\x72\x0a\x22\x88\xd1\x6b\x69\xf1\x91\x13\x6a\x11\x7f\x8f\xc6\x07\x7b\x39\xdf\xc5\x34\x64\x34\xce\xf8\xf2\xdc\x99\xf8\x0d\x43\xc9\xd2\x4b\x74\x59\x81\xa7\x68\x55\xf0\x14\x8b\xfe\x1b\x74\x34\x20\xf8\xad\x82\x30\xb4\x09\x01\x46\xa5\xfd\x16\x04\x18\xbf\x36\x61\xe0\x78\xb6\xdf\xd4\x08\x0a\x28\x9b\x9a\x81\x09\xaa\x15\xa0\x87\xff\x7a\x44\x38\x1e\xa3\x78\xbd\xbf\xf1\x02\x2c\x9e\xe9\xcd\x11\xc2\xfb\x77\x47\x47\x67\x82\x0e\x07\xe9\x9b\xb1\xd1\x50\x8d\xd1\xc5\x11\xfb\x66\x84\xf0\x0e\xdf\x04\x1f\x3d\xcd\xfc\xed\x9d\xc5\xc1\x8b\xcf\x68\xf3\xa8\x19\xb5\x8f\x6f\x70\xff\xab\x9b\x86\x48\x4c\xac\x83\x09\x09\xe3\xa7\xcd\xfd\x53\xda\xdc\xb3\xe8\x78\x73\x43\x04\x6a\x2f\xd7\xd9\xce\x96\xeb\xa2\xb3\xd0\x44\x28\x43\xfd\x9c\xee\xfd\x1c\x21\xfb\x44\x03\x4a\x6e\x1c\xe0\xfc\xc6\x96\x41\x8c\x6d\xda\xe2\x18\x58\x7b\xf2\x9e\xe1\xdc\x86\xce\x5f\x02\xa6\xc8\xdb\xe4\xd4\x91\x45\xab\xfb\x57\x67\x01\x09\x29\x56\x55\xd4\x18\xe3\x9a\x53\x9d\x61\xe6\x41\xdf\xa9\x4c\xa3\xfe\x85\x61\x3d\x5a\x61\xbc\x40\xa4\x0a\xe1\xc5\x34\x1a\xf5\xac\xe2\x6f\x1b\xfb\xa2\xb6\xea\xa3\xb7\xb6\xfb\x54\xc9\x75\x98\x09\xb9\xb6\x55\xc8\xa5\xf0\x17\x00\x68\xec\xbe\xc2\xcf\xf0\xeb\xc7\x40\xc8\x7f\xa4\x97\x3f\xc4\x89\xab\x7e\xdc\x42\x02\x3e\xa5\x0c\x09\x1b\x48\xd8\xd8\x01\x1e\x72\xfb\xb1\x85\xcf\x56\x1e\xe0\x6b\x0f\x5f\x7b\xa5\xee\xb0\x30\x30\x08\x3f\x8a\xad\x35\x7e\x03\x29\x07\xf8\x3e\x28\x49\xcf\xc0\xe1\x0b\x23\x67\xe1\x88\xe0\x8f\x13\x57\x61\x75\x94\xce\x1f\x27\xae\x0a\xb5\x52\x2a\xfe\x3c\x71\x55\x2b\x0f\x94\x04\xbf\x4e\x5c\x15\xaa\xa7\x24\xfc\x79\x02\x7c\x9d\xdf\x30\x42\xfc\x7d\xe2\xaa\xd0\x0e\x4a\xc4\x9f\x27\xae\xea\xe5\xbe\x4e\xed\xa2\x5f\x90\x9a\x5a\x45\xbf\xaa\xea\x63\xdb\xdb\xdd\xef\xd6\xa8\x4f\x15\x5f\x89\x6f\x95\x23\x0b\xff\x17\xbd\xdd\xb1\x63\x8f\xea\xf1\x9a\x14\xde\xa8\x85\x07\x55\x3a\x2b\xdb\x45\x45\x51\xd4\x6a\x6d\x76\x43\x54\xf3\x93\x35\xd5\x63\x4f\x60\xe9\x95\x11\xf4\x91\x3f\xec\xd4\xa2\x82\x2b\x2e\x6f\x6d\xbd\x04\x6e\x1e\x2e\xb7\xc0\x4e\xee\xfb\xbf\xff\x1d\xe0\xf5\xef\xea\x1f\xff\x10\x6f\x7f\xf9\x41\xa8\xcf\x8d\x52\xad\x13\x5b\xb2\xdd\x65\xb0\xad\xfc\xfc\xb2\x80\x5c\x54\xe4\x70\x4e\xc6\xa2\xe8\x70\x0e\xd5\x57\xff\x5f\x00\x00\x00\xff\xff\x89\xb5\x55\xdf\x1a\x02\x01\x00") func confLocaleLocale_enUsIniBytes() ([]byte, error) { return bindataRead( @@ -4486,7 +4486,7 @@ func confLocaleLocale_enUsIni() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "conf/locale/locale_en-US.ini", size: 66084, mode: os.FileMode(420), modTime: time.Unix(1571600934, 0)} + info := bindataFileInfo{name: "conf/locale/locale_en-US.ini", size: 66074, mode: os.FileMode(420), modTime: time.Unix(1571626718, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/pkg/context/api.go b/pkg/context/api.go index dec7cfbad..c48124751 100644 --- a/pkg/context/api.go +++ b/pkg/context/api.go @@ -9,11 +9,11 @@ import ( "net/http" "strings" - "github.com/Unknwon/paginater" + "github.com/unknwon/paginater" log "gopkg.in/clog.v1" "gopkg.in/macaron.v1" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) type APIContext struct { diff --git a/pkg/context/api_org.go b/pkg/context/api_org.go index bb5afef5d..11625ab40 100644 --- a/pkg/context/api_org.go +++ b/pkg/context/api_org.go @@ -5,7 +5,7 @@ package context import ( - "github.com/gogs/gogs/models" + "gogs.io/gogs/models" ) type APIOrganization struct { diff --git a/pkg/context/auth.go b/pkg/context/auth.go index facc96316..92ea71423 100644 --- a/pkg/context/auth.go +++ b/pkg/context/auth.go @@ -12,9 +12,9 @@ import ( "github.com/go-macaron/csrf" "gopkg.in/macaron.v1" - "github.com/gogs/gogs/pkg/auth" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/pkg/auth" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) type ToggleOptions struct { diff --git a/pkg/context/context.go b/pkg/context/context.go index bcb87a9ab..c4aa2e75f 100644 --- a/pkg/context/context.go +++ b/pkg/context/context.go @@ -12,7 +12,7 @@ import ( "strings" "time" - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/go-macaron/cache" "github.com/go-macaron/csrf" "github.com/go-macaron/i18n" @@ -20,12 +20,12 @@ import ( log "gopkg.in/clog.v1" "gopkg.in/macaron.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/auth" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/template" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/auth" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/template" ) // Context represents context of a request. diff --git a/pkg/context/notice.go b/pkg/context/notice.go index c5a749ddc..191441f1a 100644 --- a/pkg/context/notice.go +++ b/pkg/context/notice.go @@ -8,12 +8,12 @@ import ( "os" "path" - "github.com/Unknwon/com" + "github.com/unknwon/com" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/pkg/markup" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/pkg/markup" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) // renderNoticeBanner checks if a notice banner file exists and loads the message to display diff --git a/pkg/context/org.go b/pkg/context/org.go index 1ff962ee4..9d243d802 100644 --- a/pkg/context/org.go +++ b/pkg/context/org.go @@ -9,9 +9,9 @@ import ( "gopkg.in/macaron.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/setting" ) type Organization struct { diff --git a/pkg/context/repo.go b/pkg/context/repo.go index cb2413f82..20ccd0f07 100644 --- a/pkg/context/repo.go +++ b/pkg/context/repo.go @@ -14,9 +14,9 @@ import ( "github.com/gogs/git-module" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/setting" ) type PullRequest struct { diff --git a/pkg/context/user.go b/pkg/context/user.go index a2297da88..17c6f5708 100644 --- a/pkg/context/user.go +++ b/pkg/context/user.go @@ -7,8 +7,8 @@ package context import ( "gopkg.in/macaron.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" ) // ParamsUser is the wrapper type of the target user defined by URL parameter, namely ':username'. diff --git a/pkg/cron/cron.go b/pkg/cron/cron.go index 1e4476feb..6e8f0eb32 100644 --- a/pkg/cron/cron.go +++ b/pkg/cron/cron.go @@ -11,8 +11,8 @@ import ( "github.com/gogs/cron" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/setting" ) var c = cron.New() diff --git a/pkg/form/form.go b/pkg/form/form.go index 2efbf4fa1..4cd81fac4 100644 --- a/pkg/form/form.go +++ b/pkg/form/form.go @@ -10,7 +10,7 @@ import ( "regexp" "strings" - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/go-macaron/binding" "gopkg.in/macaron.v1" ) diff --git a/pkg/form/repo.go b/pkg/form/repo.go index a7ab1fa7b..fa5505f2d 100644 --- a/pkg/form/repo.go +++ b/pkg/form/repo.go @@ -8,11 +8,11 @@ import ( "net/url" "strings" - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/go-macaron/binding" "gopkg.in/macaron.v1" - "github.com/gogs/gogs/models" + "gogs.io/gogs/models" ) // _______________________________________ _________.______________________ _______________.___. diff --git a/pkg/mailer/mail.go b/pkg/mailer/mail.go index a39d3c577..49f4b3b17 100644 --- a/pkg/mailer/mail.go +++ b/pkg/mailer/mail.go @@ -12,8 +12,8 @@ import ( "gopkg.in/gomail.v2" "gopkg.in/macaron.v1" - "github.com/gogs/gogs/pkg/markup" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/markup" + "gogs.io/gogs/pkg/setting" ) const ( diff --git a/pkg/mailer/mailer.go b/pkg/mailer/mailer.go index 2d6ce52ec..f56a7a20d 100644 --- a/pkg/mailer/mailer.go +++ b/pkg/mailer/mailer.go @@ -18,7 +18,7 @@ import ( log "gopkg.in/clog.v1" "gopkg.in/gomail.v2" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) type Message struct { diff --git a/pkg/markup/markdown.go b/pkg/markup/markdown.go index 77fb6dbec..236c73372 100644 --- a/pkg/markup/markdown.go +++ b/pkg/markup/markdown.go @@ -14,8 +14,8 @@ import ( "github.com/russross/blackfriday" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) // IsMarkdownFile reports whether name looks like a Markdown file based on its extension. diff --git a/pkg/markup/markdown_test.go b/pkg/markup/markdown_test.go index ee743452d..5acdddc89 100644 --- a/pkg/markup/markdown_test.go +++ b/pkg/markup/markdown_test.go @@ -12,8 +12,8 @@ import ( "github.com/russross/blackfriday" . "github.com/smartystreets/goconvey/convey" - . "github.com/gogs/gogs/pkg/markup" - "github.com/gogs/gogs/pkg/setting" + . "gogs.io/gogs/pkg/markup" + "gogs.io/gogs/pkg/setting" ) func Test_IsMarkdownFile(t *testing.T) { diff --git a/pkg/markup/markup.go b/pkg/markup/markup.go index ee91b7b19..a70d4b2af 100644 --- a/pkg/markup/markup.go +++ b/pkg/markup/markup.go @@ -11,11 +11,11 @@ import ( "regexp" "strings" - "github.com/Unknwon/com" + "github.com/unknwon/com" "golang.org/x/net/html" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) // IsReadmeFile reports whether name looks like a README file based on its extension. diff --git a/pkg/markup/markup_test.go b/pkg/markup/markup_test.go index 97250d6c0..fbf28bf01 100644 --- a/pkg/markup/markup_test.go +++ b/pkg/markup/markup_test.go @@ -10,8 +10,8 @@ import ( . "github.com/smartystreets/goconvey/convey" - . "github.com/gogs/gogs/pkg/markup" - "github.com/gogs/gogs/pkg/setting" + . "gogs.io/gogs/pkg/markup" + "gogs.io/gogs/pkg/setting" ) func Test_IsReadmeFile(t *testing.T) { diff --git a/pkg/markup/orgmode.go b/pkg/markup/orgmode.go index f62cced2c..6fe1240ae 100644 --- a/pkg/markup/orgmode.go +++ b/pkg/markup/orgmode.go @@ -5,12 +5,11 @@ package markup import ( + "bytes" "path/filepath" "strings" - log "gopkg.in/clog.v1" - - "github.com/chaseadamsio/goorgeous" + "github.com/niklasfasching/go-org/org" ) var orgModeExtensions = []string{".org"} @@ -28,14 +27,11 @@ func IsOrgModeFile(name string) bool { // RawOrgMode renders content in Org-mode syntax to HTML without handling special links. func RawOrgMode(body []byte, urlPrefix string) (result []byte) { - // TODO: remove recover code once the third-party package is stable - defer func() { - if err := recover(); err != nil { - result = body - log.Warn("PANIC (RawOrgMode): %v", err) - } - }() - return goorgeous.OrgCommon(body) + html, err := org.New().Silent().Parse(bytes.NewReader(body), urlPrefix).Write(org.NewHTMLWriter()) + if err != nil { + return []byte(err.Error()) + } + return []byte(html) } // OrgMode takes a string or []byte and renders to HTML in Org-mode syntax with special links. diff --git a/pkg/markup/sanitizer.go b/pkg/markup/sanitizer.go index 3f1e41b7e..bc6c0a775 100644 --- a/pkg/markup/sanitizer.go +++ b/pkg/markup/sanitizer.go @@ -10,7 +10,7 @@ import ( "github.com/microcosm-cc/bluemonday" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) // Sanitizer is a protection wrapper of *bluemonday.Policy which does not allow diff --git a/pkg/markup/sanitizer_test.go b/pkg/markup/sanitizer_test.go index 194c27af6..1e3945121 100644 --- a/pkg/markup/sanitizer_test.go +++ b/pkg/markup/sanitizer_test.go @@ -9,7 +9,7 @@ import ( . "github.com/smartystreets/goconvey/convey" - . "github.com/gogs/gogs/pkg/markup" + . "gogs.io/gogs/pkg/markup" ) func Test_Sanitizer(t *testing.T) { diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index f293c73a1..cd0b29c9e 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -16,7 +16,7 @@ import ( "strings" "time" - "github.com/Unknwon/com" + "github.com/unknwon/com" _ "github.com/go-macaron/cache/memcache" _ "github.com/go-macaron/cache/redis" "github.com/go-macaron/session" @@ -27,9 +27,9 @@ import ( "github.com/gogs/go-libravatar" - "github.com/gogs/gogs/pkg/bindata" - "github.com/gogs/gogs/pkg/process" - "github.com/gogs/gogs/pkg/user" + "gogs.io/gogs/pkg/bindata" + "gogs.io/gogs/pkg/process" + "gogs.io/gogs/pkg/user" ) type Scheme string @@ -400,7 +400,7 @@ func getOpenSSHVersion() string { log.Fatal(2, "Fail to get OpenSSH version: %v - %s", err, stderr) } - // Trim unused information: https://github.com/gogs/gogs/issues/4507#issuecomment-305150441 + // Trim unused information: https://gogs.io/gogs/issues/4507#issuecomment-305150441 version := strings.TrimRight(strings.Fields(stderr)[0], ",1234567890") version = strings.TrimSuffix(strings.TrimPrefix(version, "OpenSSH_"), "p") return version @@ -525,7 +525,7 @@ func NewContext() { } // Check if server is eligible for minimum key size check when user choose to enable. - // Windows server and OpenSSH version lower than 5.1 (https://github.com/gogs/gogs/issues/4507) + // Windows server and OpenSSH version lower than 5.1 (https://gogs.io/gogs/issues/4507) // are forced to be disabled because the "ssh-keygen" in Windows does not print key type. if SSH.MinimumKeySizeCheck && (IsWindows || version.Compare(getOpenSSHVersion(), "5.1", "<")) { diff --git a/pkg/ssh/ssh.go b/pkg/ssh/ssh.go index a8cefabba..25a519caf 100644 --- a/pkg/ssh/ssh.go +++ b/pkg/ssh/ssh.go @@ -14,12 +14,12 @@ import ( "path/filepath" "strings" - "github.com/Unknwon/com" + "github.com/unknwon/com" "golang.org/x/crypto/ssh" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/setting" ) func cleanCommand(cmd string) string { diff --git a/pkg/sync/unique_queue.go b/pkg/sync/unique_queue.go index 61b0aa5b7..483550196 100644 --- a/pkg/sync/unique_queue.go +++ b/pkg/sync/unique_queue.go @@ -5,7 +5,7 @@ package sync import ( - "github.com/Unknwon/com" + "github.com/unknwon/com" ) // UniqueQueue is a queue which guarantees only one instance of same diff --git a/pkg/template/highlight/highlight.go b/pkg/template/highlight/highlight.go index 11b3967fe..0a943f9bf 100644 --- a/pkg/template/highlight/highlight.go +++ b/pkg/template/highlight/highlight.go @@ -8,7 +8,7 @@ import ( "path" "strings" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) var ( diff --git a/pkg/template/template.go b/pkg/template/template.go index 6d6d09da8..97bd7a184 100644 --- a/pkg/template/template.go +++ b/pkg/template/template.go @@ -21,10 +21,10 @@ import ( log "gopkg.in/clog.v1" "gopkg.in/editorconfig/editorconfig-core-go.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/markup" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/markup" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) // TODO: only initialize map once and save to a local variable to reduce copies. diff --git a/pkg/tool/tool.go b/pkg/tool/tool.go index 44e62d980..13d06f6b9 100644 --- a/pkg/tool/tool.go +++ b/pkg/tool/tool.go @@ -18,13 +18,13 @@ import ( "unicode" "unicode/utf8" - "github.com/Unknwon/com" - "github.com/Unknwon/i18n" + "github.com/unknwon/com" + "github.com/unknwon/i18n" log "gopkg.in/clog.v1" "github.com/gogs/chardet" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) // MD5Bytes encodes string to MD5 bytes. diff --git a/routes/admin/admin.go b/routes/admin/admin.go index 76758bd56..653c9fdfd 100644 --- a/routes/admin/admin.go +++ b/routes/admin/admin.go @@ -10,17 +10,17 @@ import ( "strings" "time" - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/json-iterator/go" "gopkg.in/macaron.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/cron" - "github.com/gogs/gogs/pkg/mailer" - "github.com/gogs/gogs/pkg/process" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/cron" + "gogs.io/gogs/pkg/mailer" + "gogs.io/gogs/pkg/process" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) const ( diff --git a/routes/admin/auths.go b/routes/admin/auths.go index 6837bace2..36cdebf55 100644 --- a/routes/admin/auths.go +++ b/routes/admin/auths.go @@ -9,15 +9,15 @@ import ( "net/http" "strings" - "github.com/Unknwon/com" - "github.com/go-xorm/core" + "github.com/unknwon/com" + "xorm.io/core" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/auth/ldap" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/auth/ldap" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/setting" ) const ( diff --git a/routes/admin/notice.go b/routes/admin/notice.go index 2670d526b..084b4eb12 100644 --- a/routes/admin/notice.go +++ b/routes/admin/notice.go @@ -5,13 +5,13 @@ package admin import ( - "github.com/Unknwon/com" - "github.com/Unknwon/paginater" + "github.com/unknwon/com" + "github.com/unknwon/paginater" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" ) const ( diff --git a/routes/admin/orgs.go b/routes/admin/orgs.go index ecbd2fa98..a5b2a2fb3 100644 --- a/routes/admin/orgs.go +++ b/routes/admin/orgs.go @@ -5,10 +5,10 @@ package admin import ( - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/routes" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/routes" ) const ( diff --git a/routes/admin/repos.go b/routes/admin/repos.go index b81794876..84e20dd85 100644 --- a/routes/admin/repos.go +++ b/routes/admin/repos.go @@ -5,12 +5,12 @@ package admin import ( - "github.com/Unknwon/paginater" + "github.com/unknwon/paginater" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" ) const ( diff --git a/routes/admin/users.go b/routes/admin/users.go index f8237e3a6..5ad5036ce 100644 --- a/routes/admin/users.go +++ b/routes/admin/users.go @@ -7,15 +7,15 @@ package admin import ( "strings" - "github.com/Unknwon/com" + "github.com/unknwon/com" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/mailer" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/routes" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/mailer" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/routes" ) const ( diff --git a/routes/api/v1/admin/org.go b/routes/api/v1/admin/org.go index d01de9931..5f02288c4 100644 --- a/routes/api/v1/admin/org.go +++ b/routes/api/v1/admin/org.go @@ -7,9 +7,9 @@ package admin import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/routes/api/v1/org" - "github.com/gogs/gogs/routes/api/v1/user" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/routes/api/v1/org" + "gogs.io/gogs/routes/api/v1/user" ) func CreateOrg(c *context.APIContext, form api.CreateOrgOption) { diff --git a/routes/api/v1/admin/org_repo.go b/routes/api/v1/admin/org_repo.go index b99a144f4..afbb94eed 100644 --- a/routes/api/v1/admin/org_repo.go +++ b/routes/api/v1/admin/org_repo.go @@ -5,9 +5,9 @@ package admin import ( - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" ) func GetRepositoryByParams(c *context.APIContext) *models.Repository { diff --git a/routes/api/v1/admin/org_team.go b/routes/api/v1/admin/org_team.go index 7083c4ae7..a055efcdd 100644 --- a/routes/api/v1/admin/org_team.go +++ b/routes/api/v1/admin/org_team.go @@ -9,10 +9,10 @@ import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/routes/api/v1/convert" - "github.com/gogs/gogs/routes/api/v1/user" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/routes/api/v1/convert" + "gogs.io/gogs/routes/api/v1/user" ) func CreateTeam(c *context.APIContext, form api.CreateTeamOption) { diff --git a/routes/api/v1/admin/repo.go b/routes/api/v1/admin/repo.go index 7e0507bca..3d364f053 100644 --- a/routes/api/v1/admin/repo.go +++ b/routes/api/v1/admin/repo.go @@ -7,9 +7,9 @@ package admin import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/routes/api/v1/repo" - "github.com/gogs/gogs/routes/api/v1/user" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/routes/api/v1/repo" + "gogs.io/gogs/routes/api/v1/user" ) func CreateRepo(c *context.APIContext, form api.CreateRepoOption) { diff --git a/routes/api/v1/admin/user.go b/routes/api/v1/admin/user.go index 8e7c630e1..ee1472f3c 100644 --- a/routes/api/v1/admin/user.go +++ b/routes/api/v1/admin/user.go @@ -11,12 +11,12 @@ import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/mailer" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/routes/api/v1/user" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/mailer" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/routes/api/v1/user" ) func parseLoginSource(c *context.APIContext, u *models.User, sourceID int64, loginName string) { diff --git a/routes/api/v1/api.go b/routes/api/v1/api.go index daabe0e2f..57ea3536b 100644 --- a/routes/api/v1/api.go +++ b/routes/api/v1/api.go @@ -13,15 +13,15 @@ import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/routes/api/v1/admin" - "github.com/gogs/gogs/routes/api/v1/misc" - "github.com/gogs/gogs/routes/api/v1/org" - "github.com/gogs/gogs/routes/api/v1/repo" - "github.com/gogs/gogs/routes/api/v1/user" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/routes/api/v1/admin" + "gogs.io/gogs/routes/api/v1/misc" + "gogs.io/gogs/routes/api/v1/org" + "gogs.io/gogs/routes/api/v1/repo" + "gogs.io/gogs/routes/api/v1/user" ) // repoAssignment extracts information from URL parameters to retrieve the repository, diff --git a/routes/api/v1/convert/convert.go b/routes/api/v1/convert/convert.go index a6ced6fc8..767fd7daf 100644 --- a/routes/api/v1/convert/convert.go +++ b/routes/api/v1/convert/convert.go @@ -7,12 +7,12 @@ package convert import ( "fmt" - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" + "gogs.io/gogs/models" ) func ToEmail(email *models.EmailAddress) *api.Email { diff --git a/routes/api/v1/convert/utils.go b/routes/api/v1/convert/utils.go index e9326eedf..08d6edad4 100644 --- a/routes/api/v1/convert/utils.go +++ b/routes/api/v1/convert/utils.go @@ -5,7 +5,7 @@ package convert import ( - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/pkg/setting" ) // ToCorrectPageSize makes sure page size is in allowed range. diff --git a/routes/api/v1/misc/markdown.go b/routes/api/v1/misc/markdown.go index b79f449cf..2bbb3ae71 100644 --- a/routes/api/v1/misc/markdown.go +++ b/routes/api/v1/misc/markdown.go @@ -9,8 +9,8 @@ import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/markup" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/markup" ) func Markdown(c *context.APIContext, form api.MarkdownOption) { diff --git a/routes/api/v1/org/org.go b/routes/api/v1/org/org.go index 943501ddf..5ea80cec9 100644 --- a/routes/api/v1/org/org.go +++ b/routes/api/v1/org/org.go @@ -9,10 +9,10 @@ import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/routes/api/v1/convert" - "github.com/gogs/gogs/routes/api/v1/user" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/routes/api/v1/convert" + "gogs.io/gogs/routes/api/v1/user" ) func CreateOrgForUser(c *context.APIContext, apiForm api.CreateOrgOption, user *models.User) { diff --git a/routes/api/v1/org/team.go b/routes/api/v1/org/team.go index ff2d4a2b5..4b26552b6 100644 --- a/routes/api/v1/org/team.go +++ b/routes/api/v1/org/team.go @@ -7,8 +7,8 @@ package org import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/routes/api/v1/convert" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/routes/api/v1/convert" ) func ListTeams(c *context.APIContext) { diff --git a/routes/api/v1/repo/branch.go b/routes/api/v1/repo/branch.go index 3323ccd6b..d21b49b1b 100644 --- a/routes/api/v1/repo/branch.go +++ b/routes/api/v1/repo/branch.go @@ -7,9 +7,9 @@ package repo import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/routes/api/v1/convert" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/routes/api/v1/convert" ) // https://github.com/gogs/go-gogs-client/wiki/Repositories#get-branch diff --git a/routes/api/v1/repo/collaborators.go b/routes/api/v1/repo/collaborators.go index 728b6d400..7dac975b8 100644 --- a/routes/api/v1/repo/collaborators.go +++ b/routes/api/v1/repo/collaborators.go @@ -7,9 +7,9 @@ package repo import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" ) func ListCollaborators(c *context.APIContext) { diff --git a/routes/api/v1/repo/commits.go b/routes/api/v1/repo/commits.go index 302ece1ca..81ec139ed 100644 --- a/routes/api/v1/repo/commits.go +++ b/routes/api/v1/repo/commits.go @@ -12,10 +12,10 @@ import ( "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" ) func GetSingleCommit(c *context.APIContext) { diff --git a/routes/api/v1/repo/file.go b/routes/api/v1/repo/file.go index 744db738b..4ae56662c 100644 --- a/routes/api/v1/repo/file.go +++ b/routes/api/v1/repo/file.go @@ -7,9 +7,9 @@ package repo import ( "github.com/gogs/git-module" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/routes/repo" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/routes/repo" ) func GetRawFile(c *context.APIContext) { diff --git a/routes/api/v1/repo/hook.go b/routes/api/v1/repo/hook.go index 98ccb41d5..a4f77852b 100644 --- a/routes/api/v1/repo/hook.go +++ b/routes/api/v1/repo/hook.go @@ -5,15 +5,15 @@ package repo import ( - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/json-iterator/go" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/routes/api/v1/convert" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/routes/api/v1/convert" ) // https://github.com/gogs/go-gogs-client/wiki/Repositories#list-hooks diff --git a/routes/api/v1/repo/issue.go b/routes/api/v1/repo/issue.go index a3cc02ee4..bd46dd067 100644 --- a/routes/api/v1/repo/issue.go +++ b/routes/api/v1/repo/issue.go @@ -11,10 +11,10 @@ import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" ) func listIssues(c *context.APIContext, opts *models.IssuesOptions) { diff --git a/routes/api/v1/repo/issue_comment.go b/routes/api/v1/repo/issue_comment.go index 830804929..2d0c3e622 100644 --- a/routes/api/v1/repo/issue_comment.go +++ b/routes/api/v1/repo/issue_comment.go @@ -9,8 +9,8 @@ import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" ) func ListIssueComments(c *context.APIContext) { diff --git a/routes/api/v1/repo/issue_label.go b/routes/api/v1/repo/issue_label.go index 60b49e5da..173ddb426 100644 --- a/routes/api/v1/repo/issue_label.go +++ b/routes/api/v1/repo/issue_label.go @@ -9,9 +9,9 @@ import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" ) func ListIssueLabels(c *context.APIContext) { diff --git a/routes/api/v1/repo/key.go b/routes/api/v1/repo/key.go index db93b9277..17ae70848 100644 --- a/routes/api/v1/repo/key.go +++ b/routes/api/v1/repo/key.go @@ -9,10 +9,10 @@ import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/routes/api/v1/convert" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/routes/api/v1/convert" ) func composeDeployKeysAPILink(repoPath string) string { diff --git a/routes/api/v1/repo/label.go b/routes/api/v1/repo/label.go index 833c0822a..189d3fdb7 100644 --- a/routes/api/v1/repo/label.go +++ b/routes/api/v1/repo/label.go @@ -7,12 +7,12 @@ package repo import ( "net/http" - "github.com/Unknwon/com" + "github.com/unknwon/com" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" ) func ListLabels(c *context.APIContext) { diff --git a/routes/api/v1/repo/milestone.go b/routes/api/v1/repo/milestone.go index d91e800cd..7d2f9957e 100644 --- a/routes/api/v1/repo/milestone.go +++ b/routes/api/v1/repo/milestone.go @@ -10,8 +10,8 @@ import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" ) func ListMilestones(c *context.APIContext) { diff --git a/routes/api/v1/repo/repo.go b/routes/api/v1/repo/repo.go index 9be8ad029..67623ffaf 100644 --- a/routes/api/v1/repo/repo.go +++ b/routes/api/v1/repo/repo.go @@ -13,12 +13,12 @@ import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/routes/api/v1/convert" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/routes/api/v1/convert" ) func Search(c *context.APIContext) { diff --git a/routes/api/v1/user/app.go b/routes/api/v1/user/app.go index dcc3fca51..4e0b2fee1 100644 --- a/routes/api/v1/user/app.go +++ b/routes/api/v1/user/app.go @@ -9,9 +9,9 @@ import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" ) func ListAccessTokens(c *context.APIContext) { diff --git a/routes/api/v1/user/email.go b/routes/api/v1/user/email.go index e84353a6b..7091beb69 100644 --- a/routes/api/v1/user/email.go +++ b/routes/api/v1/user/email.go @@ -9,10 +9,10 @@ import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/routes/api/v1/convert" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/routes/api/v1/convert" ) func ListEmails(c *context.APIContext) { diff --git a/routes/api/v1/user/follower.go b/routes/api/v1/user/follower.go index 7ec533ff5..022bd8c50 100644 --- a/routes/api/v1/user/follower.go +++ b/routes/api/v1/user/follower.go @@ -7,8 +7,8 @@ package user import ( api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" ) func responseApiUsers(c *context.APIContext, users []*models.User) { diff --git a/routes/api/v1/user/key.go b/routes/api/v1/user/key.go index 46e4df665..c0757811f 100644 --- a/routes/api/v1/user/key.go +++ b/routes/api/v1/user/key.go @@ -8,12 +8,12 @@ import ( api "github.com/gogs/go-gogs-client" "net/http" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/routes/api/v1/convert" - "github.com/gogs/gogs/routes/api/v1/repo" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/routes/api/v1/convert" + "gogs.io/gogs/routes/api/v1/repo" ) func GetUserByParamsName(c *context.APIContext, name string) *models.User { diff --git a/routes/api/v1/user/user.go b/routes/api/v1/user/user.go index 70897166f..121deeb76 100644 --- a/routes/api/v1/user/user.go +++ b/routes/api/v1/user/user.go @@ -7,14 +7,14 @@ package user import ( "net/http" - "github.com/Unknwon/com" + "github.com/unknwon/com" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/markup" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/markup" ) func Search(c *context.APIContext) { diff --git a/routes/dev/template.go b/routes/dev/template.go index 298f5379c..8d6b6da63 100644 --- a/routes/dev/template.go +++ b/routes/dev/template.go @@ -5,9 +5,9 @@ package dev import ( - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" ) func TemplatePreview(c *context.Context) { diff --git a/routes/home.go b/routes/home.go index 9835b5569..e7a6e6074 100644 --- a/routes/home.go +++ b/routes/home.go @@ -5,12 +5,12 @@ package routes import ( - "github.com/Unknwon/paginater" + "github.com/unknwon/paginater" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/routes/user" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/routes/user" ) const ( diff --git a/routes/install.go b/routes/install.go index e0a3f944c..6a5d3e226 100644 --- a/routes/install.go +++ b/routes/install.go @@ -11,25 +11,25 @@ import ( "path/filepath" "strings" - "github.com/Unknwon/com" - "github.com/go-xorm/xorm" + "github.com/unknwon/com" + "xorm.io/xorm" log "gopkg.in/clog.v1" "gopkg.in/ini.v1" "gopkg.in/macaron.v1" "github.com/gogs/git-module" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/cron" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/mailer" - "github.com/gogs/gogs/pkg/markup" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/ssh" - "github.com/gogs/gogs/pkg/template/highlight" - "github.com/gogs/gogs/pkg/tool" - "github.com/gogs/gogs/pkg/user" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/cron" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/mailer" + "gogs.io/gogs/pkg/markup" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/ssh" + "gogs.io/gogs/pkg/template/highlight" + "gogs.io/gogs/pkg/tool" + "gogs.io/gogs/pkg/user" ) const ( diff --git a/routes/org/members.go b/routes/org/members.go index 62021b64d..f0e3fc1a6 100644 --- a/routes/org/members.go +++ b/routes/org/members.go @@ -5,13 +5,13 @@ package org import ( - "github.com/Unknwon/com" + "github.com/unknwon/com" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" ) const ( diff --git a/routes/org/org.go b/routes/org/org.go index e00d14feb..c2742d7c7 100644 --- a/routes/org/org.go +++ b/routes/org/org.go @@ -7,10 +7,10 @@ package org import ( log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/setting" ) const ( diff --git a/routes/org/setting.go b/routes/org/setting.go index 59dfdae46..6c29d5b3e 100644 --- a/routes/org/setting.go +++ b/routes/org/setting.go @@ -9,12 +9,12 @@ import ( log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/routes/user" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/routes/user" ) const ( diff --git a/routes/org/teams.go b/routes/org/teams.go index fa79e9108..de1d29875 100644 --- a/routes/org/teams.go +++ b/routes/org/teams.go @@ -7,13 +7,13 @@ package org import ( "path" - "github.com/Unknwon/com" + "github.com/unknwon/com" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" ) const ( diff --git a/routes/repo/branch.go b/routes/repo/branch.go index e24df65ab..963086162 100644 --- a/routes/repo/branch.go +++ b/routes/repo/branch.go @@ -12,9 +12,9 @@ import ( "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/tool" ) const ( diff --git a/routes/repo/commit.go b/routes/repo/commit.go index 8af8d8e06..504f76b8c 100644 --- a/routes/repo/commit.go +++ b/routes/repo/commit.go @@ -10,10 +10,10 @@ import ( "github.com/gogs/git-module" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) const ( diff --git a/routes/repo/download.go b/routes/repo/download.go index b11baa694..9b90a0174 100644 --- a/routes/repo/download.go +++ b/routes/repo/download.go @@ -12,9 +12,9 @@ import ( "github.com/gogs/git-module" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) func ServeData(c *context.Context, name string, reader io.Reader) error { diff --git a/routes/repo/editor.go b/routes/repo/editor.go index 7afc825e2..e1beb184b 100644 --- a/routes/repo/editor.go +++ b/routes/repo/editor.go @@ -14,13 +14,13 @@ import ( log "gopkg.in/clog.v1" "github.com/gogs/git-module" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/template" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/template" + "gogs.io/gogs/pkg/tool" ) const ( diff --git a/routes/repo/http.go b/routes/repo/http.go index 743605f58..57aa02131 100644 --- a/routes/repo/http.go +++ b/routes/repo/http.go @@ -20,11 +20,11 @@ import ( log "gopkg.in/clog.v1" "gopkg.in/macaron.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) type HTTPContext struct { diff --git a/routes/repo/issue.go b/routes/repo/issue.go index 55786f8f5..a9d739c5d 100644 --- a/routes/repo/issue.go +++ b/routes/repo/issue.go @@ -13,18 +13,18 @@ import ( "strings" "time" - "github.com/Unknwon/com" - "github.com/Unknwon/paginater" + "github.com/unknwon/com" + "github.com/unknwon/paginater" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/markup" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/template" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/markup" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/template" + "gogs.io/gogs/pkg/tool" ) const ( diff --git a/routes/repo/pull.go b/routes/repo/pull.go index 80ca9387b..a5f76654c 100644 --- a/routes/repo/pull.go +++ b/routes/repo/pull.go @@ -9,17 +9,17 @@ import ( "path" "strings" - "github.com/Unknwon/com" + "github.com/unknwon/com" log "gopkg.in/clog.v1" "github.com/gogs/git-module" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) const ( diff --git a/routes/repo/release.go b/routes/repo/release.go index 5fdb9eaaa..468f89659 100644 --- a/routes/repo/release.go +++ b/routes/repo/release.go @@ -10,11 +10,11 @@ import ( log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/markup" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/markup" + "gogs.io/gogs/pkg/setting" ) const ( diff --git a/routes/repo/repo.go b/routes/repo/repo.go index 96a8b45d1..19c1e7fd5 100644 --- a/routes/repo/repo.go +++ b/routes/repo/repo.go @@ -10,17 +10,17 @@ import ( "path" "strings" - "github.com/Unknwon/com" + "github.com/unknwon/com" log "gopkg.in/clog.v1" "github.com/gogs/git-module" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) const ( diff --git a/routes/repo/setting.go b/routes/repo/setting.go index 328ed9319..9015916b9 100644 --- a/routes/repo/setting.go +++ b/routes/repo/setting.go @@ -10,17 +10,17 @@ import ( "strings" "time" - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/gogs/git-module" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/mailer" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/mailer" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) const ( diff --git a/routes/repo/view.go b/routes/repo/view.go index 7c15af8f0..b6464e44d 100644 --- a/routes/repo/view.go +++ b/routes/repo/view.go @@ -12,18 +12,18 @@ import ( "path" "strings" - "github.com/Unknwon/paginater" + "github.com/unknwon/paginater" log "gopkg.in/clog.v1" "github.com/gogs/git-module" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/markup" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/template" - "github.com/gogs/gogs/pkg/template/highlight" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/markup" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/template" + "gogs.io/gogs/pkg/template/highlight" + "gogs.io/gogs/pkg/tool" ) const ( diff --git a/routes/repo/webhook.go b/routes/repo/webhook.go index c92d92417..d22140af8 100644 --- a/routes/repo/webhook.go +++ b/routes/repo/webhook.go @@ -8,17 +8,17 @@ import ( "fmt" "strings" - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/json-iterator/go" git "github.com/gogs/git-module" api "github.com/gogs/go-gogs-client" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/setting" ) const ( diff --git a/routes/repo/wiki.go b/routes/repo/wiki.go index 8035b845e..299793431 100644 --- a/routes/repo/wiki.go +++ b/routes/repo/wiki.go @@ -11,10 +11,10 @@ import ( "github.com/gogs/git-module" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/markup" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/markup" ) const ( diff --git a/routes/user/auth.go b/routes/user/auth.go index d57eba65e..d90a078b9 100644 --- a/routes/user/auth.go +++ b/routes/user/auth.go @@ -11,13 +11,13 @@ import ( "github.com/go-macaron/captcha" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/mailer" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/mailer" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) const ( diff --git a/routes/user/home.go b/routes/user/home.go index 2ca53eb73..87026f7de 100644 --- a/routes/user/home.go +++ b/routes/user/home.go @@ -8,13 +8,13 @@ import ( "bytes" "fmt" - "github.com/Unknwon/com" - "github.com/Unknwon/paginater" + "github.com/unknwon/com" + "github.com/unknwon/paginater" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" ) const ( diff --git a/routes/user/profile.go b/routes/user/profile.go index 3d96f4cb9..c9491927b 100644 --- a/routes/user/profile.go +++ b/routes/user/profile.go @@ -8,13 +8,13 @@ import ( "fmt" "strings" - "github.com/Unknwon/paginater" + "github.com/unknwon/paginater" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" - "github.com/gogs/gogs/routes/repo" + "gogs.io/gogs/models" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" + "gogs.io/gogs/routes/repo" ) const ( diff --git a/routes/user/setting.go b/routes/user/setting.go index e9d8182d8..ab9479139 100644 --- a/routes/user/setting.go +++ b/routes/user/setting.go @@ -13,18 +13,18 @@ import ( "io/ioutil" "strings" - "github.com/Unknwon/com" + "github.com/unknwon/com" "github.com/pquerna/otp" "github.com/pquerna/otp/totp" log "gopkg.in/clog.v1" - "github.com/gogs/gogs/models" - "github.com/gogs/gogs/models/errors" - "github.com/gogs/gogs/pkg/context" - "github.com/gogs/gogs/pkg/form" - "github.com/gogs/gogs/pkg/mailer" - "github.com/gogs/gogs/pkg/setting" - "github.com/gogs/gogs/pkg/tool" + "gogs.io/gogs/models" + "gogs.io/gogs/models/errors" + "gogs.io/gogs/pkg/context" + "gogs.io/gogs/pkg/form" + "gogs.io/gogs/pkg/mailer" + "gogs.io/gogs/pkg/setting" + "gogs.io/gogs/pkg/tool" ) const ( diff --git a/templates/.VERSION b/templates/.VERSION index 6dabdd169..968daad3a 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.11.95.1020 +0.11.95.1023 diff --git a/vendor/README b/vendor/README deleted file mode 100644 index d4a86a3d7..000000000 --- a/vendor/README +++ /dev/null @@ -1,8 +0,0 @@ -1. Delete package directory from vendor when developing new code of dependency. -2. After commit on dependency, run: - govendor update -3. Introduce a new dependency, run: - govendor add +vendor -4. To update all deependencies, delete all packages from vendor, and run: - govendor add +vendor +external -5. Too hard. \ No newline at end of file diff --git a/vendor/github.com/Unknwon/cae/LICENSE b/vendor/github.com/Unknwon/cae/LICENSE deleted file mode 100644 index 8405e89a0..000000000 --- a/vendor/github.com/Unknwon/cae/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -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: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -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 -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. \ No newline at end of file diff --git a/vendor/github.com/Unknwon/cae/README.md b/vendor/github.com/Unknwon/cae/README.md deleted file mode 100644 index e72de9720..000000000 --- a/vendor/github.com/Unknwon/cae/README.md +++ /dev/null @@ -1,37 +0,0 @@ -Compression and Archive Extensions -================================== - -[![Go Walker](http://gowalker.org/api/v1/badge)](http://gowalker.org/github.com/Unknwon/cae) - -[中文文档](README_ZH.md) - -Package cae implements PHP-like Compression and Archive Extensions. - -But this package has some modifications depends on Go-style. - -Reference: [PHP:Compression and Archive Extensions](http://www.php.net/manual/en/refs.compression.php). - -Code Convention: based on [Go Code Convention](https://github.com/Unknwon/go-code-convention). - -### Implementations - -Package `zip`([Go Walker](http://gowalker.org/github.com/Unknwon/cae/zip)) and `tz`([Go Walker](http://gowalker.org/github.com/Unknwon/cae/tz)) both enable you to transparently read or write ZIP/TAR.GZ compressed archives and the files inside them. - -- Features: - - Add file or directory from everywhere to archive, no one-to-one limitation. - - Extract part of entries, not all at once. - - Stream data directly into `io.Writer` without any file system storage. - -### Test cases and Coverage - -All subpackages use [GoConvey](http://goconvey.co/) to write test cases, and coverage is more than 80 percent. - -### Use cases - -- [Gogs](https://github.com/gogits/gogs): self hosted Git service in the Go Programming Language. -- [GoBlog](https://github.com/fuxiaohei/GoBlog): personal blogging application. -- [GoBuild](https://github.com/shxsun/gobuild/): online Go cross-platform compilation and download service. - -## License - -This project is under Apache v2 License. See the [LICENSE](LICENSE) file for the full license text. \ No newline at end of file diff --git a/vendor/github.com/Unknwon/cae/README_ZH.md b/vendor/github.com/Unknwon/cae/README_ZH.md deleted file mode 100644 index e2f8747ee..000000000 --- a/vendor/github.com/Unknwon/cae/README_ZH.md +++ /dev/null @@ -1,29 +0,0 @@ -压缩与打包扩展 -============= - -[![Go Walker](http://gowalker.org/api/v1/badge)](http://gowalker.org/github.com/Unknwon/cae) - -包 cae 实现了 PHP 风格的压缩与打包扩展。 - -但本包依据 Go 语言的风格进行了一些修改。 - -引用:[PHP:Compression and Archive Extensions](http://www.php.net/manual/en/refs.compression.php) - -编码规范:基于 [Go 编码规范](https://github.com/Unknwon/go-code-convention) - -### 实现 - -包 `zip`([Go Walker](http://gowalker.org/github.com/Unknwon/cae/zip)) 和 `tz`([Go Walker](http://gowalker.org/github.com/Unknwon/cae/tz)) 都允许你轻易的读取或写入 ZIP/TAR.GZ 压缩档案和其内部文件。 - -- 特性: - - 将任意位置的文件或目录加入档案,没有一对一的操作限制。 - - 只解压部分文件,而非一次性解压全部。 - - 将数据以流的形式直接写入 `io.Writer` 而不需经过文件系统的存储。 - -### 测试用例与覆盖率 - -所有子包均采用 [GoConvey](http://goconvey.co/) 来书写测试用例,覆盖率均超过 80%。 - -## 授权许可 - -本项目采用 Apache v2 开源授权许可证,完整的授权说明已放置在 [LICENSE](LICENSE) 文件中。 \ No newline at end of file diff --git a/vendor/github.com/Unknwon/cae/cae.go b/vendor/github.com/Unknwon/cae/cae.go deleted file mode 100644 index 60e295a9c..000000000 --- a/vendor/github.com/Unknwon/cae/cae.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2013 Unknown -// -// 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 cae implements PHP-like Compression and Archive Extensions. -package cae - -import ( - "io" - "os" - "strings" -) - -// A Streamer describes an streamable archive object. -type Streamer interface { - StreamFile(string, os.FileInfo, []byte) error - StreamReader(string, os.FileInfo, io.Reader) error - Close() error -} - -// A HookFunc represents a middleware for packing and extracting archive. -type HookFunc func(string, os.FileInfo) error - -// HasPrefix returns true if name has any string in given slice as prefix. -func HasPrefix(name string, prefixes []string) bool { - for _, prefix := range prefixes { - if strings.HasPrefix(name, prefix) { - return true - } - } - return false -} - -// IsEntry returns true if name equals to any string in given slice. -func IsEntry(name string, entries []string) bool { - for _, e := range entries { - if e == name { - return true - } - } - return false -} - -// IsFilter returns true if given name matches any of global filter rule. -func IsFilter(name string) bool { - if strings.Contains(name, ".DS_Store") { - return true - } - return false -} - -// IsExist returns true if given path is a file or directory. -func IsExist(path string) bool { - _, err := os.Stat(path) - return err == nil || os.IsExist(err) -} - -// Copy copies file from source to target path. -func Copy(dest, src string) error { - // Gather file information to set back later. - si, err := os.Lstat(src) - if err != nil { - return err - } - - // Handle symbolic link. - if si.Mode()&os.ModeSymlink != 0 { - target, err := os.Readlink(src) - if err != nil { - return err - } - // NOTE: os.Chmod and os.Chtimes don't recoganize symbolic link, - // which will lead "no such file or directory" error. - return os.Symlink(target, dest) - } - - sr, err := os.Open(src) - if err != nil { - return err - } - defer sr.Close() - - dw, err := os.Create(dest) - if err != nil { - return err - } - defer dw.Close() - - if _, err = io.Copy(dw, sr); err != nil { - return err - } - - // Set back file information. - if err = os.Chtimes(dest, si.ModTime(), si.ModTime()); err != nil { - return err - } - return os.Chmod(dest, si.Mode()) -} diff --git a/vendor/github.com/Unknwon/cae/zip/read.go b/vendor/github.com/Unknwon/cae/zip/read.go deleted file mode 100644 index c4825ef6d..000000000 --- a/vendor/github.com/Unknwon/cae/zip/read.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2013 Unknown -// -// 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 zip - -import ( - "archive/zip" - "os" - "strings" -) - -// OpenFile is the generalized open call; most users will use Open -// instead. It opens the named zip file with specified flag -// (O_RDONLY etc.) if applicable. If successful, -// methods on the returned ZipArchive can be used for I/O. -// If there is an error, it will be of type *PathError. -func (z *ZipArchive) Open(name string, flag int, perm os.FileMode) error { - // Create a new archive if it's specified and not exist. - if flag&os.O_CREATE != 0 { - f, err := os.Create(name) - if err != nil { - return err - } - zw := zip.NewWriter(f) - if err = zw.Close(); err != nil { - return err - } - } - - rc, err := zip.OpenReader(name) - if err != nil { - return err - } - - z.ReadCloser = rc - z.FileName = name - z.Comment = rc.Comment - z.NumFiles = len(rc.File) - z.Flag = flag - z.Permission = perm - z.isHasChanged = false - - z.files = make([]*File, z.NumFiles) - for i, f := range rc.File { - z.files[i] = &File{} - z.files[i].FileHeader, err = zip.FileInfoHeader(f.FileInfo()) - if err != nil { - return err - } - z.files[i].Name = strings.Replace(f.Name, "\\", "/", -1) - if f.FileInfo().IsDir() && !strings.HasSuffix(z.files[i].Name, "/") { - z.files[i].Name += "/" - } - } - return nil -} diff --git a/vendor/github.com/Unknwon/cae/zip/stream.go b/vendor/github.com/Unknwon/cae/zip/stream.go deleted file mode 100644 index 18d8cc225..000000000 --- a/vendor/github.com/Unknwon/cae/zip/stream.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2014 Unknown -// -// 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 zip - -import ( - "archive/zip" - "io" - "os" - "path/filepath" -) - -// A StreamArchive represents a streamable archive. -type StreamArchive struct { - *zip.Writer -} - -// NewStreamArachive returns a new streamable archive with given io.Writer. -// It's caller's responsibility to close io.Writer and streamer after operation. -func NewStreamArachive(w io.Writer) *StreamArchive { - return &StreamArchive{zip.NewWriter(w)} -} - -// StreamFile streams a file or directory entry into StreamArchive. -func (s *StreamArchive) StreamFile(relPath string, fi os.FileInfo, data []byte) error { - if fi.IsDir() { - fh, err := zip.FileInfoHeader(fi) - if err != nil { - return err - } - fh.Name = relPath + "/" - if _, err = s.Writer.CreateHeader(fh); err != nil { - return err - } - } else { - fh, err := zip.FileInfoHeader(fi) - if err != nil { - return err - } - fh.Name = filepath.Join(relPath, fi.Name()) - fh.Method = zip.Deflate - fw, err := s.Writer.CreateHeader(fh) - if err != nil { - return err - } else if _, err = fw.Write(data); err != nil { - return err - } - } - return nil -} - -// StreamReader streams data from io.Reader to StreamArchive. -func (s *StreamArchive) StreamReader(relPath string, fi os.FileInfo, r io.Reader) (err error) { - fh, err := zip.FileInfoHeader(fi) - if err != nil { - return err - } - fh.Name = filepath.Join(relPath, fi.Name()) - - fw, err := s.Writer.CreateHeader(fh) - if err != nil { - return err - } - _, err = io.Copy(fw, r) - return err -} diff --git a/vendor/github.com/Unknwon/cae/zip/write.go b/vendor/github.com/Unknwon/cae/zip/write.go deleted file mode 100644 index 076d0e344..000000000 --- a/vendor/github.com/Unknwon/cae/zip/write.go +++ /dev/null @@ -1,364 +0,0 @@ -// Copyright 2013 Unknown -// -// 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 zip - -import ( - "archive/zip" - "fmt" - "io" - "os" - "path" - "path/filepath" - "strings" - - "github.com/Unknwon/cae" -) - -// Switcher of printing trace information when pack and extract. -var Verbose = true - -// extractFile extracts zip.File to file system. -func extractFile(f *zip.File, destPath string) error { - filePath := path.Join(destPath, f.Name) - os.MkdirAll(path.Dir(filePath), os.ModePerm) - - rc, err := f.Open() - if err != nil { - return err - } - defer rc.Close() - - fw, err := os.Create(filePath) - if err != nil { - return err - } - defer fw.Close() - - if _, err = io.Copy(fw, rc); err != nil { - return err - } - - // Skip symbolic links. - if f.FileInfo().Mode()&os.ModeSymlink != 0 { - return nil - } - // Set back file information. - if err = os.Chtimes(filePath, f.ModTime(), f.ModTime()); err != nil { - return err - } - return os.Chmod(filePath, f.FileInfo().Mode()) -} - -var defaultExtractFunc = func(fullName string, fi os.FileInfo) error { - if !Verbose { - return nil - } - - fmt.Println("Extracting file..." + fullName) - return nil -} - -// ExtractToFunc extracts the whole archive or the given files to the -// specified destination. -// It accepts a function as a middleware for custom operations. -func (z *ZipArchive) ExtractToFunc(destPath string, fn cae.HookFunc, entries ...string) (err error) { - destPath = strings.Replace(destPath, "\\", "/", -1) - isHasEntry := len(entries) > 0 - if Verbose { - fmt.Println("Unzipping " + z.FileName + "...") - } - os.MkdirAll(destPath, os.ModePerm) - for _, f := range z.File { - f.Name = strings.Replace(f.Name, "\\", "/", -1) - - // Directory. - if strings.HasSuffix(f.Name, "/") { - if isHasEntry { - if cae.IsEntry(f.Name, entries) { - if err = fn(f.Name, f.FileInfo()); err != nil { - continue - } - os.MkdirAll(path.Join(destPath, f.Name), os.ModePerm) - } - continue - } - if err = fn(f.Name, f.FileInfo()); err != nil { - continue - } - os.MkdirAll(path.Join(destPath, f.Name), os.ModePerm) - continue - } - - // File. - if isHasEntry { - if cae.IsEntry(f.Name, entries) { - if err = fn(f.Name, f.FileInfo()); err != nil { - continue - } - err = extractFile(f, destPath) - } - } else { - if err = fn(f.Name, f.FileInfo()); err != nil { - continue - } - err = extractFile(f, destPath) - } - if err != nil { - return err - } - } - return nil -} - -// ExtractToFunc extracts the whole archive or the given files to the -// specified destination. -// It accepts a function as a middleware for custom operations. -func ExtractToFunc(srcPath, destPath string, fn cae.HookFunc, entries ...string) (err error) { - z, err := Open(srcPath) - if err != nil { - return err - } - defer z.Close() - return z.ExtractToFunc(destPath, fn, entries...) -} - -// ExtractTo extracts the whole archive or the given files to the -// specified destination. -// Call Flush() to apply changes before this. -func (z *ZipArchive) ExtractTo(destPath string, entries ...string) (err error) { - return z.ExtractToFunc(destPath, defaultExtractFunc, entries...) -} - -// ExtractTo extracts given archive or the given files to the -// specified destination. -func ExtractTo(srcPath, destPath string, entries ...string) (err error) { - return ExtractToFunc(srcPath, destPath, defaultExtractFunc, entries...) -} - -// extractFile extracts file from ZipArchive to file system. -func (z *ZipArchive) extractFile(f *File) error { - if !z.isHasWriter { - for _, zf := range z.ReadCloser.File { - if f.Name == zf.Name { - return extractFile(zf, path.Dir(f.tmpPath)) - } - } - } - return cae.Copy(f.tmpPath, f.absPath) -} - -// Flush saves changes to original zip file if any. -func (z *ZipArchive) Flush() error { - if !z.isHasChanged || (z.ReadCloser == nil && !z.isHasWriter) { - return nil - } - - // Extract to tmp path and pack back. - tmpPath := path.Join(os.TempDir(), "cae", path.Base(z.FileName)) - os.RemoveAll(tmpPath) - defer os.RemoveAll(tmpPath) - - for _, f := range z.files { - if strings.HasSuffix(f.Name, "/") { - os.MkdirAll(path.Join(tmpPath, f.Name), os.ModePerm) - continue - } - - // Relative path inside zip temporary changed. - f.tmpPath = path.Join(tmpPath, f.Name) - if err := z.extractFile(f); err != nil { - return err - } - } - - if z.isHasWriter { - return packToWriter(tmpPath, z.writer, defaultPackFunc, true) - } - - if err := PackTo(tmpPath, z.FileName); err != nil { - return err - } - return z.Open(z.FileName, os.O_RDWR|os.O_TRUNC, z.Permission) -} - -// packFile packs a file or directory to zip.Writer. -func packFile(srcFile string, recPath string, zw *zip.Writer, fi os.FileInfo) error { - if fi.IsDir() { - fh, err := zip.FileInfoHeader(fi) - if err != nil { - return err - } - fh.Name = recPath + "/" - if _, err = zw.CreateHeader(fh); err != nil { - return err - } - } else { - fh, err := zip.FileInfoHeader(fi) - if err != nil { - return err - } - fh.Name = recPath - fh.Method = zip.Deflate - - fw, err := zw.CreateHeader(fh) - if err != nil { - return err - } - - if fi.Mode()&os.ModeSymlink != 0 { - target, err := os.Readlink(srcFile) - if err != nil { - return err - } - if _, err = fw.Write([]byte(target)); err != nil { - return err - } - } else { - f, err := os.Open(srcFile) - if err != nil { - return err - } - defer f.Close() - - if _, err = io.Copy(fw, f); err != nil { - return err - } - } - } - return nil -} - -// packDir packs a directory and its subdirectories and files -// recursively to zip.Writer. -func packDir(srcPath string, recPath string, zw *zip.Writer, fn cae.HookFunc) error { - dir, err := os.Open(srcPath) - if err != nil { - return err - } - defer dir.Close() - - fis, err := dir.Readdir(0) - if err != nil { - return err - } - for _, fi := range fis { - if cae.IsFilter(fi.Name()) { - continue - } - curPath := srcPath + "/" + fi.Name() - tmpRecPath := filepath.Join(recPath, fi.Name()) - if err = fn(curPath, fi); err != nil { - continue - } - - if fi.IsDir() { - if err = packFile(srcPath, tmpRecPath, zw, fi); err != nil { - return err - } - err = packDir(curPath, tmpRecPath, zw, fn) - } else { - err = packFile(curPath, tmpRecPath, zw, fi) - } - if err != nil { - return err - } - } - return nil -} - -// packToWriter packs given path object to io.Writer. -func packToWriter(srcPath string, w io.Writer, fn func(fullName string, fi os.FileInfo) error, includeDir bool) error { - zw := zip.NewWriter(w) - defer zw.Close() - - f, err := os.Open(srcPath) - if err != nil { - return err - } - defer f.Close() - - fi, err := f.Stat() - if err != nil { - return err - } - - basePath := path.Base(srcPath) - if fi.IsDir() { - if includeDir { - if err = packFile(srcPath, basePath, zw, fi); err != nil { - return err - } - } else { - basePath = "" - } - return packDir(srcPath, basePath, zw, fn) - } - return packFile(srcPath, basePath, zw, fi) -} - -// packTo packs given source path object to target path. -func packTo(srcPath, destPath string, fn cae.HookFunc, includeDir bool) error { - fw, err := os.Create(destPath) - if err != nil { - return err - } - defer fw.Close() - - return packToWriter(srcPath, fw, fn, includeDir) -} - -// PackToFunc packs the complete archive to the specified destination. -// It accepts a function as a middleware for custom operations. -func PackToFunc(srcPath, destPath string, fn func(fullName string, fi os.FileInfo) error, includeDir ...bool) error { - isIncludeDir := false - if len(includeDir) > 0 && includeDir[0] { - isIncludeDir = true - } - return packTo(srcPath, destPath, fn, isIncludeDir) -} - -var defaultPackFunc = func(fullName string, fi os.FileInfo) error { - if !Verbose { - return nil - } - - if fi.IsDir() { - fmt.Printf("Adding dir...%s\n", fullName) - } else { - fmt.Printf("Adding file...%s\n", fullName) - } - return nil -} - -// PackTo packs the whole archive to the specified destination. -// Call Flush() will automatically call this in the end. -func PackTo(srcPath, destPath string, includeDir ...bool) error { - return PackToFunc(srcPath, destPath, defaultPackFunc, includeDir...) -} - -// Close opens or creates archive and save changes. -func (z *ZipArchive) Close() (err error) { - if err = z.Flush(); err != nil { - return err - } - - if z.ReadCloser != nil { - if err = z.ReadCloser.Close(); err != nil { - return err - } - z.ReadCloser = nil - } - return nil -} diff --git a/vendor/github.com/Unknwon/cae/zip/zip.go b/vendor/github.com/Unknwon/cae/zip/zip.go deleted file mode 100644 index 21086f825..000000000 --- a/vendor/github.com/Unknwon/cae/zip/zip.go +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2013 Unknown -// -// 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 zip enables you to transparently read or write ZIP compressed archives and the files inside them. -package zip - -import ( - "archive/zip" - "errors" - "io" - "os" - "path" - "strings" - - "github.com/Unknwon/cae" -) - -// A File represents a file or directory entry in archive. -type File struct { - *zip.FileHeader - oldName string // NOTE: unused, for future change name feature. - oldComment string // NOTE: unused, for future change comment feature. - absPath string // Absolute path of local file system. - tmpPath string -} - -// A ZipArchive represents a file archive, compressed with Zip. -type ZipArchive struct { - *zip.ReadCloser - FileName string - Comment string - NumFiles int - Flag int - Permission os.FileMode - - files []*File - isHasChanged bool - - // For supporting flushing to io.Writer. - writer io.Writer - isHasWriter bool -} - -// OpenFile is the generalized open call; most users will use Open -// instead. It opens the named zip file with specified flag -// (O_RDONLY etc.) if applicable. If successful, -// methods on the returned ZipArchive can be used for I/O. -// If there is an error, it will be of type *PathError. -func OpenFile(name string, flag int, perm os.FileMode) (*ZipArchive, error) { - z := new(ZipArchive) - err := z.Open(name, flag, perm) - return z, err -} - -// Create creates the named zip file, truncating -// it if it already exists. If successful, methods on the returned -// ZipArchive can be used for I/O; the associated file descriptor has mode -// O_RDWR. -// If there is an error, it will be of type *PathError. -func Create(name string) (*ZipArchive, error) { - os.MkdirAll(path.Dir(name), os.ModePerm) - return OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) -} - -// Open opens the named zip file for reading. If successful, methods on -// the returned ZipArchive can be used for reading; the associated file -// descriptor has mode O_RDONLY. -// If there is an error, it will be of type *PathError. -func Open(name string) (*ZipArchive, error) { - return OpenFile(name, os.O_RDONLY, 0) -} - -// New accepts a variable that implemented interface io.Writer -// for write-only purpose operations. -func New(w io.Writer) *ZipArchive { - return &ZipArchive{ - writer: w, - isHasWriter: true, - } -} - -// List returns a string slice of files' name in ZipArchive. -// Specify prefixes will be used as filters. -func (z *ZipArchive) List(prefixes ...string) []string { - isHasPrefix := len(prefixes) > 0 - names := make([]string, 0, z.NumFiles) - for _, f := range z.files { - if isHasPrefix && !cae.HasPrefix(f.Name, prefixes) { - continue - } - names = append(names, f.Name) - } - return names -} - -// AddEmptyDir adds a raw directory entry to ZipArchive, -// it returns false if same directory enry already existed. -func (z *ZipArchive) AddEmptyDir(dirPath string) bool { - dirPath = strings.Replace(dirPath, "\\", "/", -1) - - if !strings.HasSuffix(dirPath, "/") { - dirPath += "/" - } - - for _, f := range z.files { - if dirPath == f.Name { - return false - } - } - - dirPath = strings.TrimSuffix(dirPath, "/") - if strings.Contains(dirPath, "/") { - // Auto add all upper level directories. - z.AddEmptyDir(path.Dir(dirPath)) - } - z.files = append(z.files, &File{ - FileHeader: &zip.FileHeader{ - Name: dirPath + "/", - UncompressedSize: 0, - }, - }) - z.updateStat() - return true -} - -// AddDir adds a directory and subdirectories entries to ZipArchive. -func (z *ZipArchive) AddDir(dirPath, absPath string) error { - dir, err := os.Open(absPath) - if err != nil { - return err - } - defer dir.Close() - - // Make sure we have all upper level directories. - z.AddEmptyDir(dirPath) - - fis, err := dir.Readdir(0) - if err != nil { - return err - } - for _, fi := range fis { - curPath := absPath + "/" + fi.Name() - tmpRecPath := path.Join(dirPath, fi.Name()) - if fi.IsDir() { - if err = z.AddDir(tmpRecPath, curPath); err != nil { - return err - } - } else { - if err = z.AddFile(tmpRecPath, curPath); err != nil { - return err - } - } - } - return nil -} - -// updateStat should be called after every change for rebuilding statistic. -func (z *ZipArchive) updateStat() { - z.NumFiles = len(z.files) - z.isHasChanged = true -} - -// AddFile adds a file entry to ZipArchive. -func (z *ZipArchive) AddFile(fileName, absPath string) error { - fileName = strings.Replace(fileName, "\\", "/", -1) - absPath = strings.Replace(absPath, "\\", "/", -1) - - if cae.IsFilter(absPath) { - return nil - } - - f, err := os.Open(absPath) - if err != nil { - return err - } - defer f.Close() - - fi, err := f.Stat() - if err != nil { - return err - } - - file := new(File) - file.FileHeader, err = zip.FileInfoHeader(fi) - if err != nil { - return err - } - file.Name = fileName - file.absPath = absPath - - z.AddEmptyDir(path.Dir(fileName)) - - isExist := false - for _, f := range z.files { - if fileName == f.Name { - f = file - isExist = true - break - } - } - if !isExist { - z.files = append(z.files, file) - } - - z.updateStat() - return nil -} - -// DeleteIndex deletes an entry in the archive by its index. -func (z *ZipArchive) DeleteIndex(idx int) error { - if idx >= z.NumFiles { - return errors.New("index out of range of number of files") - } - - z.files = append(z.files[:idx], z.files[idx+1:]...) - return nil -} - -// DeleteName deletes an entry in the archive by its name. -func (z *ZipArchive) DeleteName(name string) error { - for i, f := range z.files { - if f.Name == name { - return z.DeleteIndex(i) - } - } - return errors.New("entry with given name not found") -} diff --git a/vendor/github.com/Unknwon/com/LICENSE b/vendor/github.com/Unknwon/com/LICENSE deleted file mode 100644 index 8405e89a0..000000000 --- a/vendor/github.com/Unknwon/com/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -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: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -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 -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. \ No newline at end of file diff --git a/vendor/github.com/Unknwon/com/README.md b/vendor/github.com/Unknwon/com/README.md deleted file mode 100644 index 8d821abd6..000000000 --- a/vendor/github.com/Unknwon/com/README.md +++ /dev/null @@ -1,20 +0,0 @@ -Common Functions -================ - -[![Build Status](https://travis-ci.org/Unknwon/com.svg)](https://travis-ci.org/Unknwon/com) [![Go Walker](http://gowalker.org/api/v1/badge)](http://gowalker.org/github.com/Unknwon/com) - -This is an open source project for commonly used functions for the Go programming language. - -This package need >= **go 1.2** - -Code Convention: based on [Go Code Convention](https://github.com/Unknwon/go-code-convention). - -## Contribute - -Your contribute is welcome, but you have to check following steps after you added some functions and commit them: - -1. Make sure you wrote user-friendly comments for **all functions** . -2. Make sure you wrote test cases with any possible condition for **all functions** in file `*_test.go`. -3. Make sure you wrote benchmarks for **all functions** in file `*_test.go`. -4. Make sure you wrote useful examples for **all functions** in file `example_test.go`. -5. Make sure you ran `go test` and got **PASS** . diff --git a/vendor/github.com/Unknwon/com/cmd.go b/vendor/github.com/Unknwon/com/cmd.go deleted file mode 100644 index dc7086d8f..000000000 --- a/vendor/github.com/Unknwon/com/cmd.go +++ /dev/null @@ -1,161 +0,0 @@ -// +build go1.2 - -// Copyright 2013 com authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -// Package com is an open source project for commonly used functions for the Go programming language. -package com - -import ( - "bytes" - "fmt" - "os/exec" - "runtime" - "strings" -) - -// ExecCmdDirBytes executes system command in given directory -// and return stdout, stderr in bytes type, along with possible error. -func ExecCmdDirBytes(dir, cmdName string, args ...string) ([]byte, []byte, error) { - bufOut := new(bytes.Buffer) - bufErr := new(bytes.Buffer) - - cmd := exec.Command(cmdName, args...) - cmd.Dir = dir - cmd.Stdout = bufOut - cmd.Stderr = bufErr - - err := cmd.Run() - return bufOut.Bytes(), bufErr.Bytes(), err -} - -// ExecCmdBytes executes system command -// and return stdout, stderr in bytes type, along with possible error. -func ExecCmdBytes(cmdName string, args ...string) ([]byte, []byte, error) { - return ExecCmdDirBytes("", cmdName, args...) -} - -// ExecCmdDir executes system command in given directory -// and return stdout, stderr in string type, along with possible error. -func ExecCmdDir(dir, cmdName string, args ...string) (string, string, error) { - bufOut, bufErr, err := ExecCmdDirBytes(dir, cmdName, args...) - return string(bufOut), string(bufErr), err -} - -// ExecCmd executes system command -// and return stdout, stderr in string type, along with possible error. -func ExecCmd(cmdName string, args ...string) (string, string, error) { - return ExecCmdDir("", cmdName, args...) -} - -// _________ .__ .____ -// \_ ___ \ ____ | | ___________ | | ____ ____ -// / \ \/ / _ \| | / _ \_ __ \ | | / _ \ / ___\ -// \ \___( <_> ) |_( <_> ) | \/ | |__( <_> ) /_/ > -// \______ /\____/|____/\____/|__| |_______ \____/\___ / -// \/ \/ /_____/ - -// Color number constants. -const ( - Gray = uint8(iota + 90) - Red - Green - Yellow - Blue - Magenta - //NRed = uint8(31) // Normal - EndColor = "\033[0m" -) - -// getColorLevel returns colored level string by given level. -func getColorLevel(level string) string { - level = strings.ToUpper(level) - switch level { - case "TRAC": - return fmt.Sprintf("\033[%dm%s\033[0m", Blue, level) - case "ERRO": - return fmt.Sprintf("\033[%dm%s\033[0m", Red, level) - case "WARN": - return fmt.Sprintf("\033[%dm%s\033[0m", Magenta, level) - case "SUCC": - return fmt.Sprintf("\033[%dm%s\033[0m", Green, level) - default: - return level - } -} - -// ColorLogS colors log and return colored content. -// Log format: [ error ]. -// Level: TRAC -> blue; ERRO -> red; WARN -> Magenta; SUCC -> green; others -> default. -// Content: default; path: yellow; error -> red. -// Level has to be surrounded by "[" and "]". -// Highlights have to be surrounded by "# " and " #"(space), "#" will be deleted. -// Paths have to be surrounded by "( " and " )"(space). -// Errors have to be surrounded by "[ " and " ]"(space). -// Note: it hasn't support windows yet, contribute is welcome. -func ColorLogS(format string, a ...interface{}) string { - log := fmt.Sprintf(format, a...) - - var clog string - - if runtime.GOOS != "windows" { - // Level. - i := strings.Index(log, "]") - if log[0] == '[' && i > -1 { - clog += "[" + getColorLevel(log[1:i]) + "]" - } - - log = log[i+1:] - - // Error. - log = strings.Replace(log, "[ ", fmt.Sprintf("[\033[%dm", Red), -1) - log = strings.Replace(log, " ]", EndColor+"]", -1) - - // Path. - log = strings.Replace(log, "( ", fmt.Sprintf("(\033[%dm", Yellow), -1) - log = strings.Replace(log, " )", EndColor+")", -1) - - // Highlights. - log = strings.Replace(log, "# ", fmt.Sprintf("\033[%dm", Gray), -1) - log = strings.Replace(log, " #", EndColor, -1) - - } else { - // Level. - i := strings.Index(log, "]") - if log[0] == '[' && i > -1 { - clog += "[" + log[1:i] + "]" - } - - log = log[i+1:] - - // Error. - log = strings.Replace(log, "[ ", "[", -1) - log = strings.Replace(log, " ]", "]", -1) - - // Path. - log = strings.Replace(log, "( ", "(", -1) - log = strings.Replace(log, " )", ")", -1) - - // Highlights. - log = strings.Replace(log, "# ", "", -1) - log = strings.Replace(log, " #", "", -1) - } - return clog + log -} - -// ColorLog prints colored log to stdout. -// See color rules in function 'ColorLogS'. -func ColorLog(format string, a ...interface{}) { - fmt.Print(ColorLogS(format, a...)) -} diff --git a/vendor/github.com/Unknwon/com/convert.go b/vendor/github.com/Unknwon/com/convert.go deleted file mode 100644 index 25b3e0e56..000000000 --- a/vendor/github.com/Unknwon/com/convert.go +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2014 com authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package com - -import ( - "fmt" - "strconv" -) - -// Convert string to specify type. -type StrTo string - -func (f StrTo) Exist() bool { - return string(f) != string(0x1E) -} - -func (f StrTo) Uint8() (uint8, error) { - v, err := strconv.ParseUint(f.String(), 10, 8) - return uint8(v), err -} - -func (f StrTo) Int() (int, error) { - v, err := strconv.ParseInt(f.String(), 10, 0) - return int(v), err -} - -func (f StrTo) Int64() (int64, error) { - v, err := strconv.ParseInt(f.String(), 10, 64) - return int64(v), err -} - -func (f StrTo) MustUint8() uint8 { - v, _ := f.Uint8() - return v -} - -func (f StrTo) MustInt() int { - v, _ := f.Int() - return v -} - -func (f StrTo) MustInt64() int64 { - v, _ := f.Int64() - return v -} - -func (f StrTo) String() string { - if f.Exist() { - return string(f) - } - return "" -} - -// Convert any type to string. -func ToStr(value interface{}, args ...int) (s string) { - switch v := value.(type) { - case bool: - s = strconv.FormatBool(v) - case float32: - s = strconv.FormatFloat(float64(v), 'f', argInt(args).Get(0, -1), argInt(args).Get(1, 32)) - case float64: - s = strconv.FormatFloat(v, 'f', argInt(args).Get(0, -1), argInt(args).Get(1, 64)) - case int: - s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10)) - case int8: - s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10)) - case int16: - s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10)) - case int32: - s = strconv.FormatInt(int64(v), argInt(args).Get(0, 10)) - case int64: - s = strconv.FormatInt(v, argInt(args).Get(0, 10)) - case uint: - s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10)) - case uint8: - s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10)) - case uint16: - s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10)) - case uint32: - s = strconv.FormatUint(uint64(v), argInt(args).Get(0, 10)) - case uint64: - s = strconv.FormatUint(v, argInt(args).Get(0, 10)) - case string: - s = v - case []byte: - s = string(v) - default: - s = fmt.Sprintf("%v", v) - } - return s -} - -type argInt []int - -func (a argInt) Get(i int, args ...int) (r int) { - if i >= 0 && i < len(a) { - r = a[i] - } else if len(args) > 0 { - r = args[0] - } - return -} - -// HexStr2int converts hex format string to decimal number. -func HexStr2int(hexStr string) (int, error) { - num := 0 - length := len(hexStr) - for i := 0; i < length; i++ { - char := hexStr[length-i-1] - factor := -1 - - switch { - case char >= '0' && char <= '9': - factor = int(char) - '0' - case char >= 'a' && char <= 'f': - factor = int(char) - 'a' + 10 - default: - return -1, fmt.Errorf("invalid hex: %s", string(char)) - } - - num += factor * PowInt(16, i) - } - return num, nil -} - -// Int2HexStr converts decimal number to hex format string. -func Int2HexStr(num int) (hex string) { - if num == 0 { - return "0" - } - - for num > 0 { - r := num % 16 - - c := "?" - if r >= 0 && r <= 9 { - c = string(r + '0') - } else { - c = string(r + 'a' - 10) - } - hex = c + hex - num = num / 16 - } - return hex -} diff --git a/vendor/github.com/Unknwon/com/dir.go b/vendor/github.com/Unknwon/com/dir.go deleted file mode 100644 index c126d79da..000000000 --- a/vendor/github.com/Unknwon/com/dir.go +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright 2013 com authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package com - -import ( - "errors" - "fmt" - "os" - "path" - "strings" -) - -// IsDir returns true if given path is a directory, -// or returns false when it's a file or does not exist. -func IsDir(dir string) bool { - f, e := os.Stat(dir) - if e != nil { - return false - } - return f.IsDir() -} - -func statDir(dirPath, recPath string, includeDir, isDirOnly bool) ([]string, error) { - dir, err := os.Open(dirPath) - if err != nil { - return nil, err - } - defer dir.Close() - - fis, err := dir.Readdir(0) - if err != nil { - return nil, err - } - - statList := make([]string, 0) - for _, fi := range fis { - if strings.Contains(fi.Name(), ".DS_Store") { - continue - } - - relPath := path.Join(recPath, fi.Name()) - curPath := path.Join(dirPath, fi.Name()) - if fi.IsDir() { - if includeDir { - statList = append(statList, relPath+"/") - } - s, err := statDir(curPath, relPath, includeDir, isDirOnly) - if err != nil { - return nil, err - } - statList = append(statList, s...) - } else if !isDirOnly { - statList = append(statList, relPath) - } - } - return statList, nil -} - -// StatDir gathers information of given directory by depth-first. -// It returns slice of file list and includes subdirectories if enabled; -// it returns error and nil slice when error occurs in underlying functions, -// or given path is not a directory or does not exist. -// -// Slice does not include given path itself. -// If subdirectories is enabled, they will have suffix '/'. -func StatDir(rootPath string, includeDir ...bool) ([]string, error) { - if !IsDir(rootPath) { - return nil, errors.New("not a directory or does not exist: " + rootPath) - } - - isIncludeDir := false - if len(includeDir) >= 1 { - isIncludeDir = includeDir[0] - } - return statDir(rootPath, "", isIncludeDir, false) -} - -// GetAllSubDirs returns all subdirectories of given root path. -// Slice does not include given path itself. -func GetAllSubDirs(rootPath string) ([]string, error) { - if !IsDir(rootPath) { - return nil, errors.New("not a directory or does not exist: " + rootPath) - } - return statDir(rootPath, "", true, true) -} - -// GetFileListBySuffix returns an ordered list of file paths. -// It recognize if given path is a file, and don't do recursive find. -func GetFileListBySuffix(dirPath, suffix string) ([]string, error) { - if !IsExist(dirPath) { - return nil, fmt.Errorf("given path does not exist: %s", dirPath) - } else if IsFile(dirPath) { - return []string{dirPath}, nil - } - - // Given path is a directory. - dir, err := os.Open(dirPath) - if err != nil { - return nil, err - } - - fis, err := dir.Readdir(0) - if err != nil { - return nil, err - } - - files := make([]string, 0, len(fis)) - for _, fi := range fis { - if strings.HasSuffix(fi.Name(), suffix) { - files = append(files, path.Join(dirPath, fi.Name())) - } - } - - return files, nil -} - -// CopyDir copy files recursively from source to target directory. -// -// The filter accepts a function that process the path info. -// and should return true for need to filter. -// -// It returns error when error occurs in underlying functions. -func CopyDir(srcPath, destPath string, filters ...func(filePath string) bool) error { - // Check if target directory exists. - if IsExist(destPath) { - return errors.New("file or directory alreay exists: " + destPath) - } - - err := os.MkdirAll(destPath, os.ModePerm) - if err != nil { - return err - } - - // Gather directory info. - infos, err := StatDir(srcPath, true) - if err != nil { - return err - } - - var filter func(filePath string) bool - if len(filters) > 0 { - filter = filters[0] - } - - for _, info := range infos { - if filter != nil && filter(info) { - continue - } - - curPath := path.Join(destPath, info) - if strings.HasSuffix(info, "/") { - err = os.MkdirAll(curPath, os.ModePerm) - } else { - err = Copy(path.Join(srcPath, info), curPath) - } - if err != nil { - return err - } - } - return nil -} diff --git a/vendor/github.com/Unknwon/com/file.go b/vendor/github.com/Unknwon/com/file.go deleted file mode 100644 index b51502c91..000000000 --- a/vendor/github.com/Unknwon/com/file.go +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2013 com authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package com - -import ( - "fmt" - "io" - "io/ioutil" - "math" - "os" - "path" -) - -// Storage unit constants. -const ( - Byte = 1 - KByte = Byte * 1024 - MByte = KByte * 1024 - GByte = MByte * 1024 - TByte = GByte * 1024 - PByte = TByte * 1024 - EByte = PByte * 1024 -) - -func logn(n, b float64) float64 { - return math.Log(n) / math.Log(b) -} - -func humanateBytes(s uint64, base float64, sizes []string) string { - if s < 10 { - return fmt.Sprintf("%dB", s) - } - e := math.Floor(logn(float64(s), base)) - suffix := sizes[int(e)] - val := float64(s) / math.Pow(base, math.Floor(e)) - f := "%.0f" - if val < 10 { - f = "%.1f" - } - - return fmt.Sprintf(f+"%s", val, suffix) -} - -// HumaneFileSize calculates the file size and generate user-friendly string. -func HumaneFileSize(s uint64) string { - sizes := []string{"B", "KB", "MB", "GB", "TB", "PB", "EB"} - return humanateBytes(s, 1024, sizes) -} - -// FileMTime returns file modified time and possible error. -func FileMTime(file string) (int64, error) { - f, err := os.Stat(file) - if err != nil { - return 0, err - } - return f.ModTime().Unix(), nil -} - -// FileSize returns file size in bytes and possible error. -func FileSize(file string) (int64, error) { - f, err := os.Stat(file) - if err != nil { - return 0, err - } - return f.Size(), nil -} - -// Copy copies file from source to target path. -func Copy(src, dest string) error { - // Gather file information to set back later. - si, err := os.Lstat(src) - if err != nil { - return err - } - - // Handle symbolic link. - if si.Mode()&os.ModeSymlink != 0 { - target, err := os.Readlink(src) - if err != nil { - return err - } - // NOTE: os.Chmod and os.Chtimes don't recoganize symbolic link, - // which will lead "no such file or directory" error. - return os.Symlink(target, dest) - } - - sr, err := os.Open(src) - if err != nil { - return err - } - defer sr.Close() - - dw, err := os.Create(dest) - if err != nil { - return err - } - defer dw.Close() - - if _, err = io.Copy(dw, sr); err != nil { - return err - } - - // Set back file information. - if err = os.Chtimes(dest, si.ModTime(), si.ModTime()); err != nil { - return err - } - return os.Chmod(dest, si.Mode()) -} - -// WriteFile writes data to a file named by filename. -// If the file does not exist, WriteFile creates it -// and its upper level paths. -func WriteFile(filename string, data []byte) error { - os.MkdirAll(path.Dir(filename), os.ModePerm) - return ioutil.WriteFile(filename, data, 0655) -} - -// IsFile returns true if given path is a file, -// or returns false when it's a directory or does not exist. -func IsFile(filePath string) bool { - f, e := os.Stat(filePath) - if e != nil { - return false - } - return !f.IsDir() -} - -// IsExist checks whether a file or directory exists. -// It returns false when the file or directory does not exist. -func IsExist(path string) bool { - _, err := os.Stat(path) - return err == nil || os.IsExist(err) -} diff --git a/vendor/github.com/Unknwon/com/html.go b/vendor/github.com/Unknwon/com/html.go deleted file mode 100644 index 762d94b05..000000000 --- a/vendor/github.com/Unknwon/com/html.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2013 com authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package com - -import ( - "html" - "regexp" - "strings" -) - -// Html2JS converts []byte type of HTML content into JS format. -func Html2JS(data []byte) []byte { - s := string(data) - s = strings.Replace(s, `\`, `\\`, -1) - s = strings.Replace(s, "\n", `\n`, -1) - s = strings.Replace(s, "\r", "", -1) - s = strings.Replace(s, "\"", `\"`, -1) - s = strings.Replace(s, "", "<table>", -1) - return []byte(s) -} - -// encode html chars to string -func HtmlEncode(str string) string { - return html.EscapeString(str) -} - -// decode string to html chars -func HtmlDecode(str string) string { - return html.UnescapeString(str) -} - -// strip tags in html string -func StripTags(src string) string { - //去除style,script,html tag - re := regexp.MustCompile(`(?s)<(?:style|script)[^<>]*>.*?|]*>|`) - src = re.ReplaceAllString(src, "") - - //trim all spaces(2+) into \n - re = regexp.MustCompile(`\s{2,}`) - src = re.ReplaceAllString(src, "\n") - - return strings.TrimSpace(src) -} - -// change \n to
-func Nl2br(str string) string { - return strings.Replace(str, "\n", "
", -1) -} diff --git a/vendor/github.com/Unknwon/com/http.go b/vendor/github.com/Unknwon/com/http.go deleted file mode 100644 index 3415059ae..000000000 --- a/vendor/github.com/Unknwon/com/http.go +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright 2013 com authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package com - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "io/ioutil" - "net/http" - "os" - "path" -) - -type NotFoundError struct { - Message string -} - -func (e NotFoundError) Error() string { - return e.Message -} - -type RemoteError struct { - Host string - Err error -} - -func (e *RemoteError) Error() string { - return e.Err.Error() -} - -var UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1541.0 Safari/537.36" - -// HttpCall makes HTTP method call. -func HttpCall(client *http.Client, method, url string, header http.Header, body io.Reader) (io.ReadCloser, error) { - req, err := http.NewRequest(method, url, body) - if err != nil { - return nil, err - } - req.Header.Set("User-Agent", UserAgent) - for k, vs := range header { - req.Header[k] = vs - } - resp, err := client.Do(req) - if err != nil { - return nil, err - } - if resp.StatusCode == 200 { - return resp.Body, nil - } - resp.Body.Close() - if resp.StatusCode == 404 { // 403 can be rate limit error. || resp.StatusCode == 403 { - err = fmt.Errorf("resource not found: %s", url) - } else { - err = fmt.Errorf("%s %s -> %d", method, url, resp.StatusCode) - } - return nil, err -} - -// HttpGet gets the specified resource. -// ErrNotFound is returned if the server responds with status 404. -func HttpGet(client *http.Client, url string, header http.Header) (io.ReadCloser, error) { - return HttpCall(client, "GET", url, header, nil) -} - -// HttpPost posts the specified resource. -// ErrNotFound is returned if the server responds with status 404. -func HttpPost(client *http.Client, url string, header http.Header, body []byte) (io.ReadCloser, error) { - return HttpCall(client, "POST", url, header, bytes.NewBuffer(body)) -} - -// HttpGetToFile gets the specified resource and writes to file. -// ErrNotFound is returned if the server responds with status 404. -func HttpGetToFile(client *http.Client, url string, header http.Header, fileName string) error { - rc, err := HttpGet(client, url, header) - if err != nil { - return err - } - defer rc.Close() - - os.MkdirAll(path.Dir(fileName), os.ModePerm) - f, err := os.Create(fileName) - if err != nil { - return err - } - defer f.Close() - _, err = io.Copy(f, rc) - return err -} - -// HttpGetBytes gets the specified resource. ErrNotFound is returned if the server -// responds with status 404. -func HttpGetBytes(client *http.Client, url string, header http.Header) ([]byte, error) { - rc, err := HttpGet(client, url, header) - if err != nil { - return nil, err - } - defer rc.Close() - return ioutil.ReadAll(rc) -} - -// HttpGetJSON gets the specified resource and mapping to struct. -// ErrNotFound is returned if the server responds with status 404. -func HttpGetJSON(client *http.Client, url string, v interface{}) error { - rc, err := HttpGet(client, url, nil) - if err != nil { - return err - } - defer rc.Close() - err = json.NewDecoder(rc).Decode(v) - if _, ok := err.(*json.SyntaxError); ok { - return fmt.Errorf("JSON syntax error at %s", url) - } - return nil -} - -// HttpPostJSON posts the specified resource with struct values, -// and maps results to struct. -// ErrNotFound is returned if the server responds with status 404. -func HttpPostJSON(client *http.Client, url string, body, v interface{}) error { - data, err := json.Marshal(body) - if err != nil { - return err - } - rc, err := HttpPost(client, url, http.Header{"content-type": []string{"application/json"}}, data) - if err != nil { - return err - } - defer rc.Close() - err = json.NewDecoder(rc).Decode(v) - if _, ok := err.(*json.SyntaxError); ok { - return fmt.Errorf("JSON syntax error at %s", url) - } - return nil -} - -// A RawFile describes a file that can be downloaded. -type RawFile interface { - Name() string - RawUrl() string - Data() []byte - SetData([]byte) -} - -// FetchFiles fetches files specified by the rawURL field in parallel. -func FetchFiles(client *http.Client, files []RawFile, header http.Header) error { - ch := make(chan error, len(files)) - for i := range files { - go func(i int) { - p, err := HttpGetBytes(client, files[i].RawUrl(), nil) - if err != nil { - ch <- err - return - } - files[i].SetData(p) - ch <- nil - }(i) - } - for _ = range files { - if err := <-ch; err != nil { - return err - } - } - return nil -} - -// FetchFiles uses command `curl` to fetch files specified by the rawURL field in parallel. -func FetchFilesCurl(files []RawFile, curlOptions ...string) error { - ch := make(chan error, len(files)) - for i := range files { - go func(i int) { - stdout, _, err := ExecCmd("curl", append(curlOptions, files[i].RawUrl())...) - if err != nil { - ch <- err - return - } - - files[i].SetData([]byte(stdout)) - ch <- nil - }(i) - } - for _ = range files { - if err := <-ch; err != nil { - return err - } - } - return nil -} diff --git a/vendor/github.com/Unknwon/com/math.go b/vendor/github.com/Unknwon/com/math.go deleted file mode 100644 index 99c56b659..000000000 --- a/vendor/github.com/Unknwon/com/math.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2014 com authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package com - -// PowInt is int type of math.Pow function. -func PowInt(x int, y int) int { - if y <= 0 { - return 1 - } else { - if y % 2 == 0 { - sqrt := PowInt(x, y/2) - return sqrt * sqrt - } else { - return PowInt(x, y-1) * x - } - } -} diff --git a/vendor/github.com/Unknwon/com/path.go b/vendor/github.com/Unknwon/com/path.go deleted file mode 100644 index b1e860def..000000000 --- a/vendor/github.com/Unknwon/com/path.go +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2013 com authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package com - -import ( - "errors" - "os" - "path/filepath" - "runtime" - "strings" -) - -// GetGOPATHs returns all paths in GOPATH variable. -func GetGOPATHs() []string { - gopath := os.Getenv("GOPATH") - var paths []string - if runtime.GOOS == "windows" { - gopath = strings.Replace(gopath, "\\", "/", -1) - paths = strings.Split(gopath, ";") - } else { - paths = strings.Split(gopath, ":") - } - return paths -} - -// GetSrcPath returns app. source code path. -// It only works when you have src. folder in GOPATH, -// it returns error not able to locate source folder path. -func GetSrcPath(importPath string) (appPath string, err error) { - paths := GetGOPATHs() - for _, p := range paths { - if IsExist(p + "/src/" + importPath + "/") { - appPath = p + "/src/" + importPath + "/" - break - } - } - - if len(appPath) == 0 { - return "", errors.New("Unable to locate source folder path") - } - - appPath = filepath.Dir(appPath) + "/" - if runtime.GOOS == "windows" { - // Replace all '\' to '/'. - appPath = strings.Replace(appPath, "\\", "/", -1) - } - - return appPath, nil -} - -// HomeDir returns path of '~'(in Linux) on Windows, -// it returns error when the variable does not exist. -func HomeDir() (home string, err error) { - if runtime.GOOS == "windows" { - home = os.Getenv("USERPROFILE") - if len(home) == 0 { - home = os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH") - } - } else { - home = os.Getenv("HOME") - } - - if len(home) == 0 { - return "", errors.New("Cannot specify home directory because it's empty") - } - - return home, nil -} diff --git a/vendor/github.com/Unknwon/com/regex.go b/vendor/github.com/Unknwon/com/regex.go deleted file mode 100644 index 765bfc431..000000000 --- a/vendor/github.com/Unknwon/com/regex.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2013 com authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package com - -import "regexp" - -const ( - regex_email_pattern = `(?i)[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}` - regex_strict_email_pattern = `(?i)[A-Z0-9!#$%&'*+/=?^_{|}~-]+` + - `(?:\.[A-Z0-9!#$%&'*+/=?^_{|}~-]+)*` + - `@(?:[A-Z0-9](?:[A-Z0-9-]*[A-Z0-9])?\.)+` + - `[A-Z0-9](?:[A-Z0-9-]*[A-Z0-9])?` - regex_url_pattern = `(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?` -) - -var ( - regex_email *regexp.Regexp - regex_strict_email *regexp.Regexp - regex_url *regexp.Regexp -) - -func init() { - regex_email = regexp.MustCompile(regex_email_pattern) - regex_strict_email = regexp.MustCompile(regex_strict_email_pattern) - regex_url = regexp.MustCompile(regex_url_pattern) -} - -// validate string is an email address, if not return false -// basically validation can match 99% cases -func IsEmail(email string) bool { - return regex_email.MatchString(email) -} - -// validate string is an email address, if not return false -// this validation omits RFC 2822 -func IsEmailRFC(email string) bool { - return regex_strict_email.MatchString(email) -} - -// validate string is a url link, if not return false -// simple validation can match 99% cases -func IsUrl(url string) bool { - return regex_url.MatchString(url) -} diff --git a/vendor/github.com/Unknwon/com/slice.go b/vendor/github.com/Unknwon/com/slice.go deleted file mode 100644 index 27801a4d7..000000000 --- a/vendor/github.com/Unknwon/com/slice.go +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2013 com authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package com - -import ( - "strings" -) - -// AppendStr appends string to slice with no duplicates. -func AppendStr(strs []string, str string) []string { - for _, s := range strs { - if s == str { - return strs - } - } - return append(strs, str) -} - -// CompareSliceStr compares two 'string' type slices. -// It returns true if elements and order are both the same. -func CompareSliceStr(s1, s2 []string) bool { - if len(s1) != len(s2) { - return false - } - - for i := range s1 { - if s1[i] != s2[i] { - return false - } - } - - return true -} - -// CompareSliceStr compares two 'string' type slices. -// It returns true if elements are the same, and ignores the order. -func CompareSliceStrU(s1, s2 []string) bool { - if len(s1) != len(s2) { - return false - } - - for i := range s1 { - for j := len(s2) - 1; j >= 0; j-- { - if s1[i] == s2[j] { - s2 = append(s2[:j], s2[j+1:]...) - break - } - } - } - if len(s2) > 0 { - return false - } - return true -} - -// IsSliceContainsStr returns true if the string exists in given slice, ignore case. -func IsSliceContainsStr(sl []string, str string) bool { - str = strings.ToLower(str) - for _, s := range sl { - if strings.ToLower(s) == str { - return true - } - } - return false -} - -// IsSliceContainsInt64 returns true if the int64 exists in given slice. -func IsSliceContainsInt64(sl []int64, i int64) bool { - for _, s := range sl { - if s == i { - return true - } - } - return false -} diff --git a/vendor/github.com/Unknwon/com/string.go b/vendor/github.com/Unknwon/com/string.go deleted file mode 100644 index 7080d174a..000000000 --- a/vendor/github.com/Unknwon/com/string.go +++ /dev/null @@ -1,253 +0,0 @@ -// Copyright 2013 com authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package com - -import ( - "bytes" - "crypto/aes" - "crypto/cipher" - "crypto/rand" - "errors" - r "math/rand" - "strconv" - "strings" - "time" - "unicode" - "unicode/utf8" -) - -// AESGCMEncrypt encrypts plaintext with the given key using AES in GCM mode. -func AESGCMEncrypt(key, plaintext []byte) ([]byte, error) { - block, err := aes.NewCipher(key) - if err != nil { - return nil, err - } - - gcm, err := cipher.NewGCM(block) - if err != nil { - return nil, err - } - - nonce := make([]byte, gcm.NonceSize()) - if _, err := rand.Read(nonce); err != nil { - return nil, err - } - - ciphertext := gcm.Seal(nil, nonce, plaintext, nil) - return append(nonce, ciphertext...), nil -} - -// AESGCMDecrypt decrypts ciphertext with the given key using AES in GCM mode. -func AESGCMDecrypt(key, ciphertext []byte) ([]byte, error) { - block, err := aes.NewCipher(key) - if err != nil { - return nil, err - } - - gcm, err := cipher.NewGCM(block) - if err != nil { - return nil, err - } - - size := gcm.NonceSize() - if len(ciphertext)-size <= 0 { - return nil, errors.New("Ciphertext is empty") - } - - nonce := ciphertext[:size] - ciphertext = ciphertext[size:] - - plainText, err := gcm.Open(nil, nonce, ciphertext, nil) - if err != nil { - return nil, err - } - - return plainText, nil -} - -// IsLetter returns true if the 'l' is an English letter. -func IsLetter(l uint8) bool { - n := (l | 0x20) - 'a' - if n >= 0 && n < 26 { - return true - } - return false -} - -// Expand replaces {k} in template with match[k] or subs[atoi(k)] if k is not in match. -func Expand(template string, match map[string]string, subs ...string) string { - var p []byte - var i int - for { - i = strings.Index(template, "{") - if i < 0 { - break - } - p = append(p, template[:i]...) - template = template[i+1:] - i = strings.Index(template, "}") - if s, ok := match[template[:i]]; ok { - p = append(p, s...) - } else { - j, _ := strconv.Atoi(template[:i]) - if j >= len(subs) { - p = append(p, []byte("Missing")...) - } else { - p = append(p, subs[j]...) - } - } - template = template[i+1:] - } - p = append(p, template...) - return string(p) -} - -// Reverse s string, support unicode -func Reverse(s string) string { - n := len(s) - runes := make([]rune, n) - for _, rune := range s { - n-- - runes[n] = rune - } - return string(runes[n:]) -} - -// RandomCreateBytes generate random []byte by specify chars. -func RandomCreateBytes(n int, alphabets ...byte) []byte { - const alphanum = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" - var bytes = make([]byte, n) - var randby bool - if num, err := rand.Read(bytes); num != n || err != nil { - r.Seed(time.Now().UnixNano()) - randby = true - } - for i, b := range bytes { - if len(alphabets) == 0 { - if randby { - bytes[i] = alphanum[r.Intn(len(alphanum))] - } else { - bytes[i] = alphanum[b%byte(len(alphanum))] - } - } else { - if randby { - bytes[i] = alphabets[r.Intn(len(alphabets))] - } else { - bytes[i] = alphabets[b%byte(len(alphabets))] - } - } - } - return bytes -} - -// ToSnakeCase can convert all upper case characters in a string to -// underscore format. -// -// Some samples. -// "FirstName" => "first_name" -// "HTTPServer" => "http_server" -// "NoHTTPS" => "no_https" -// "GO_PATH" => "go_path" -// "GO PATH" => "go_path" // space is converted to underscore. -// "GO-PATH" => "go_path" // hyphen is converted to underscore. -// -// From https://github.com/huandu/xstrings -func ToSnakeCase(str string) string { - if len(str) == 0 { - return "" - } - - buf := &bytes.Buffer{} - var prev, r0, r1 rune - var size int - - r0 = '_' - - for len(str) > 0 { - prev = r0 - r0, size = utf8.DecodeRuneInString(str) - str = str[size:] - - switch { - case r0 == utf8.RuneError: - buf.WriteByte(byte(str[0])) - - case unicode.IsUpper(r0): - if prev != '_' { - buf.WriteRune('_') - } - - buf.WriteRune(unicode.ToLower(r0)) - - if len(str) == 0 { - break - } - - r0, size = utf8.DecodeRuneInString(str) - str = str[size:] - - if !unicode.IsUpper(r0) { - buf.WriteRune(r0) - break - } - - // find next non-upper-case character and insert `_` properly. - // it's designed to convert `HTTPServer` to `http_server`. - // if there are more than 2 adjacent upper case characters in a word, - // treat them as an abbreviation plus a normal word. - for len(str) > 0 { - r1 = r0 - r0, size = utf8.DecodeRuneInString(str) - str = str[size:] - - if r0 == utf8.RuneError { - buf.WriteRune(unicode.ToLower(r1)) - buf.WriteByte(byte(str[0])) - break - } - - if !unicode.IsUpper(r0) { - if r0 == '_' || r0 == ' ' || r0 == '-' { - r0 = '_' - - buf.WriteRune(unicode.ToLower(r1)) - } else { - buf.WriteRune('_') - buf.WriteRune(unicode.ToLower(r1)) - buf.WriteRune(r0) - } - - break - } - - buf.WriteRune(unicode.ToLower(r1)) - } - - if len(str) == 0 || r0 == '_' { - buf.WriteRune(unicode.ToLower(r0)) - break - } - - default: - if r0 == ' ' || r0 == '-' { - r0 = '_' - } - - buf.WriteRune(r0) - } - } - - return buf.String() -} diff --git a/vendor/github.com/Unknwon/com/time.go b/vendor/github.com/Unknwon/com/time.go deleted file mode 100644 index dd1cdbcf2..000000000 --- a/vendor/github.com/Unknwon/com/time.go +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2013 com authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package com - -import ( - "fmt" - "strconv" - "strings" - "time" -) - -// Format unix time int64 to string -func Date(ti int64, format string) string { - t := time.Unix(int64(ti), 0) - return DateT(t, format) -} - -// Format unix time string to string -func DateS(ts string, format string) string { - i, _ := strconv.ParseInt(ts, 10, 64) - return Date(i, format) -} - -// Format time.Time struct to string -// MM - month - 01 -// M - month - 1, single bit -// DD - day - 02 -// D - day 2 -// YYYY - year - 2006 -// YY - year - 06 -// HH - 24 hours - 03 -// H - 24 hours - 3 -// hh - 12 hours - 03 -// h - 12 hours - 3 -// mm - minute - 04 -// m - minute - 4 -// ss - second - 05 -// s - second = 5 -func DateT(t time.Time, format string) string { - res := strings.Replace(format, "MM", t.Format("01"), -1) - res = strings.Replace(res, "M", t.Format("1"), -1) - res = strings.Replace(res, "DD", t.Format("02"), -1) - res = strings.Replace(res, "D", t.Format("2"), -1) - res = strings.Replace(res, "YYYY", t.Format("2006"), -1) - res = strings.Replace(res, "YY", t.Format("06"), -1) - res = strings.Replace(res, "HH", fmt.Sprintf("%02d", t.Hour()), -1) - res = strings.Replace(res, "H", fmt.Sprintf("%d", t.Hour()), -1) - res = strings.Replace(res, "hh", t.Format("03"), -1) - res = strings.Replace(res, "h", t.Format("3"), -1) - res = strings.Replace(res, "mm", t.Format("04"), -1) - res = strings.Replace(res, "m", t.Format("4"), -1) - res = strings.Replace(res, "ss", t.Format("05"), -1) - res = strings.Replace(res, "s", t.Format("5"), -1) - return res -} - -// DateFormat pattern rules. -var datePatterns = []string{ - // year - "Y", "2006", // A full numeric representation of a year, 4 digits Examples: 1999 or 2003 - "y", "06", //A two digit representation of a year Examples: 99 or 03 - - // month - "m", "01", // Numeric representation of a month, with leading zeros 01 through 12 - "n", "1", // Numeric representation of a month, without leading zeros 1 through 12 - "M", "Jan", // A short textual representation of a month, three letters Jan through Dec - "F", "January", // A full textual representation of a month, such as January or March January through December - - // day - "d", "02", // Day of the month, 2 digits with leading zeros 01 to 31 - "j", "2", // Day of the month without leading zeros 1 to 31 - - // week - "D", "Mon", // A textual representation of a day, three letters Mon through Sun - "l", "Monday", // A full textual representation of the day of the week Sunday through Saturday - - // time - "g", "3", // 12-hour format of an hour without leading zeros 1 through 12 - "G", "15", // 24-hour format of an hour without leading zeros 0 through 23 - "h", "03", // 12-hour format of an hour with leading zeros 01 through 12 - "H", "15", // 24-hour format of an hour with leading zeros 00 through 23 - - "a", "pm", // Lowercase Ante meridiem and Post meridiem am or pm - "A", "PM", // Uppercase Ante meridiem and Post meridiem AM or PM - - "i", "04", // Minutes with leading zeros 00 to 59 - "s", "05", // Seconds, with leading zeros 00 through 59 - - // time zone - "T", "MST", - "P", "-07:00", - "O", "-0700", - - // RFC 2822 - "r", time.RFC1123Z, -} - -// Parse Date use PHP time format. -func DateParse(dateString, format string) (time.Time, error) { - replacer := strings.NewReplacer(datePatterns...) - format = replacer.Replace(format) - return time.ParseInLocation(format, dateString, time.Local) -} diff --git a/vendor/github.com/Unknwon/com/url.go b/vendor/github.com/Unknwon/com/url.go deleted file mode 100644 index b0b7c0e12..000000000 --- a/vendor/github.com/Unknwon/com/url.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2013 com authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package com - -import ( - "encoding/base64" - "net/url" -) - -// url encode string, is + not %20 -func UrlEncode(str string) string { - return url.QueryEscape(str) -} - -// url decode string -func UrlDecode(str string) (string, error) { - return url.QueryUnescape(str) -} - -// base64 encode -func Base64Encode(str string) string { - return base64.StdEncoding.EncodeToString([]byte(str)) -} - -// base64 decode -func Base64Decode(str string) (string, error) { - s, e := base64.StdEncoding.DecodeString(str) - return string(s), e -} diff --git a/vendor/github.com/Unknwon/i18n/LICENSE b/vendor/github.com/Unknwon/i18n/LICENSE deleted file mode 100644 index 8405e89a0..000000000 --- a/vendor/github.com/Unknwon/i18n/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -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: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -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 -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. \ No newline at end of file diff --git a/vendor/github.com/Unknwon/i18n/Makefile b/vendor/github.com/Unknwon/i18n/Makefile deleted file mode 100644 index 8ff1ac439..000000000 --- a/vendor/github.com/Unknwon/i18n/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -.PHONY: build test bench vet - -build: vet bench - -test: - go test -v -cover - -bench: - go test -v -cover -test.bench=. -test.benchmem - -vet: - go vet \ No newline at end of file diff --git a/vendor/github.com/Unknwon/i18n/README.md b/vendor/github.com/Unknwon/i18n/README.md deleted file mode 100644 index cd96c9ade..000000000 --- a/vendor/github.com/Unknwon/i18n/README.md +++ /dev/null @@ -1,134 +0,0 @@ -i18n -==== - -Package i18n is for app Internationalization and Localization. - -## Introduction - -This package provides multiple-language options to improve user experience. Sites like [Go Walker](http://gowalker.org) and [gogs.io](http://gogs.io) are using this module to implement Chinese and English user interfaces. - -You can use following command to install this module: - - go get github.com/Unknwon/i18n - -## Usage - -First of all, you have to import this package: - -```go -import "github.com/Unknwon/i18n" -``` - -The format of locale files is very like INI format configuration file, which is basically key-value pairs. But this module has some improvements. Every language corresponding to a locale file, for example, under `conf/locale` folder of [gogsweb](https://github.com/gogits/gogsweb/tree/master/conf/locale), there are two files called `locale_en-US.ini` and `locale_zh-CN.ini`. - -The name and extensions of locale files can be anything, but we strongly recommend you to follow the style of gogsweb. - -## Minimal example - -Here are two simplest locale file examples: - -File `locale_en-US.ini`: - -```ini -hi = hello, %s -bye = goodbye -``` - -File `locale_zh-CN.ini`: - -```ini -hi = 您好,%s -bye = 再见 -``` - -### Do Translation - -There are two ways to do translation depends on which way is the best fit for your application or framework. - -Directly use package function to translate: - -```go -i18n.Tr("en-US", "hi", "Unknwon") -i18n.Tr("en-US", "bye") -``` - -Or create a struct and embed it: - -```go -type MyController struct{ - // ...other fields - i18n.Locale -} - -//... - -func ... { - c := &MyController{ - Locale: i18n.Locale{"en-US"}, - } - _ = c.Tr("hi", "Unknwon") - _ = c.Tr("bye") -} -``` - -Code above will produce correspondingly: - -- English `en-US`:`hello, Unknwon`, `goodbye` -- Chinese `zh-CN`:`您好,Unknwon`, `再见` - -## Section - -For different pages, one key may map to different values. Therefore, i18n module also uses the section feature of INI format configuration to achieve section. - -For example, the key name is `about`, and we want to show `About` in the home page and `About Us` in about page. Then you can do following: - -Content in locale file: - -```ini -about = About - -[about] -about = About Us -``` - -Get `about` in home page: - -```go -i18n.Tr("en-US", "about") -``` - -Get `about` in about page: - -```go -i18n.Tr("en-US", "about.about") -``` - -### Ambiguity - -Because dot `.` is sign of section in both [INI parser](https://github.com/go-ini/ini) and locale files, so when your key name contains `.` will cause ambiguity. At this point, you just need to add one more `.` in front of the key. - -For example, the key name is `about.`, then we can use: - -```go -i18n.Tr("en-US", ".about.") -``` - -to get expect result. - -## Helper tool - -Module i18n provides a command line helper tool beei18n for simplify steps of your development. You can install it as follows: - - go get github.com/Unknwon/i18n/ui18n - -### Sync locale files - -Command `sync` allows you use a exist local file as the template to create or sync other locale files: - - ui18n sync srouce_file.ini other1.ini other2.ini - -This command can operate 1 or more files in one command. - -## More information - -If the key does not exist, then i18n will return the key string to caller. For instance, when key name is `hi` and it does not exist in locale file, simply return `hi` as output. diff --git a/vendor/github.com/Unknwon/i18n/i18n.go b/vendor/github.com/Unknwon/i18n/i18n.go deleted file mode 100644 index 0e7e919a8..000000000 --- a/vendor/github.com/Unknwon/i18n/i18n.go +++ /dev/null @@ -1,228 +0,0 @@ -// Copyright 2013 Unknwon -// -// 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 i18n is for app Internationalization and Localization. -package i18n - -import ( - "errors" - "fmt" - "reflect" - "strings" - - "gopkg.in/ini.v1" -) - -var ( - ErrLangAlreadyExist = errors.New("Lang already exists") - - locales = &localeStore{store: make(map[string]*locale)} -) - -type locale struct { - id int - lang string - langDesc string - message *ini.File -} - -type localeStore struct { - langs []string - langDescs []string - store map[string]*locale - defaultLang string -} - -// Get target language string -func (d *localeStore) Get(lang, section, format string) (string, bool) { - if locale, ok := d.store[lang]; ok { - if key, err := locale.message.Section(section).GetKey(format); err == nil { - return key.Value(), true - } - } - - if len(d.defaultLang) > 0 && lang != d.defaultLang { - return d.Get(d.defaultLang, section, format) - } - - return "", false -} - -func (d *localeStore) Add(lc *locale) bool { - if _, ok := d.store[lc.lang]; ok { - return false - } - - lc.id = len(d.langs) - d.langs = append(d.langs, lc.lang) - d.langDescs = append(d.langDescs, lc.langDesc) - d.store[lc.lang] = lc - - return true -} - -func (d *localeStore) Reload(langs ...string) (err error) { - if len(langs) == 0 { - for _, lc := range d.store { - if err = lc.message.Reload(); err != nil { - return err - } - } - } else { - for _, lang := range langs { - if lc, ok := d.store[lang]; ok { - if err = lc.message.Reload(); err != nil { - return err - } - } - } - } - return nil -} - -// SetDefaultLang sets default language which is a indicator that -// when target language is not found, try find in default language again. -func SetDefaultLang(lang string) { - locales.defaultLang = lang -} - -// ReloadLangs reloads locale files. -func ReloadLangs(langs ...string) error { - return locales.Reload(langs...) -} - -// Count returns number of languages that are registered. -func Count() int { - return len(locales.langs) -} - -// ListLangs returns list of all locale languages. -func ListLangs() []string { - langs := make([]string, len(locales.langs)) - copy(langs, locales.langs) - return langs -} - -func ListLangDescs() []string { - langDescs := make([]string, len(locales.langDescs)) - copy(langDescs, locales.langDescs) - return langDescs -} - -// IsExist returns true if given language locale exists. -func IsExist(lang string) bool { - _, ok := locales.store[lang] - return ok -} - -// IndexLang returns index of language locale, -// it returns -1 if locale not exists. -func IndexLang(lang string) int { - if lc, ok := locales.store[lang]; ok { - return lc.id - } - return -1 -} - -// GetLangByIndex return language by given index. -func GetLangByIndex(index int) string { - if index < 0 || index >= len(locales.langs) { - return "" - } - return locales.langs[index] -} - -func GetDescriptionByIndex(index int) string { - if index < 0 || index >= len(locales.langDescs) { - return "" - } - - return locales.langDescs[index] -} - -func GetDescriptionByLang(lang string) string { - return GetDescriptionByIndex(IndexLang(lang)) -} - -func SetMessageWithDesc(lang, langDesc string, localeFile interface{}, otherLocaleFiles ...interface{}) error { - message, err := ini.Load(localeFile, otherLocaleFiles...) - if err == nil { - message.BlockMode = false - lc := new(locale) - lc.lang = lang - lc.langDesc = langDesc - lc.message = message - - if locales.Add(lc) == false { - return ErrLangAlreadyExist - } - } - return err -} - -// SetMessage sets the message file for localization. -func SetMessage(lang string, localeFile interface{}, otherLocaleFiles ...interface{}) error { - return SetMessageWithDesc(lang, lang, localeFile, otherLocaleFiles...) -} - -// Locale represents the information of localization. -type Locale struct { - Lang string -} - -// Tr translates content to target language. -func (l Locale) Tr(format string, args ...interface{}) string { - return Tr(l.Lang, format, args...) -} - -// Index returns lang index of LangStore. -func (l Locale) Index() int { - return IndexLang(l.Lang) -} - -// Tr translates content to target language. -func Tr(lang, format string, args ...interface{}) string { - var section string - - idx := strings.IndexByte(format, '.') - if idx > 0 { - section = format[:idx] - format = format[idx+1:] - } - - value, ok := locales.Get(lang, section, format) - if ok { - format = value - } - - if len(args) > 0 { - params := make([]interface{}, 0, len(args)) - for _, arg := range args { - if arg == nil { - continue - } - - val := reflect.ValueOf(arg) - if val.Kind() == reflect.Slice { - for i := 0; i < val.Len(); i++ { - params = append(params, val.Index(i).Interface()) - } - } else { - params = append(params, arg) - } - } - return fmt.Sprintf(format, params...) - } - return format -} diff --git a/vendor/github.com/Unknwon/paginater/LICENSE b/vendor/github.com/Unknwon/paginater/LICENSE deleted file mode 100644 index 8f71f43fe..000000000 --- a/vendor/github.com/Unknwon/paginater/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - 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/Unknwon/paginater/README.md b/vendor/github.com/Unknwon/paginater/README.md deleted file mode 100644 index 3886d7b4b..000000000 --- a/vendor/github.com/Unknwon/paginater/README.md +++ /dev/null @@ -1,65 +0,0 @@ -Paginater [![Build Status](https://travis-ci.org/Unknwon/paginater.svg?branch=master)](https://travis-ci.org/Unknwon/paginater) -========= - -Package paginater is a helper module for custom pagination calculation. - -## Installation - - go get github.com/Unknwon/paginater - -## Getting Started - -The following code shows an example of how to use paginater: - -```go -package main - -import "github.com/Unknwon/paginater" - -func main() { - // Arguments: - // - Total number of rows - // - Number of rows in one page - // - Current page number - // - Number of page links to be displayed - p := paginater.New(45, 10, 3, 3) - - // Then use p as a template object named "Page" in "demo.html" - // ... -} -``` - -`demo.html` - -```html -{{if not .Page.IsFirst}}[First](1){{end}} -{{if .Page.HasPrevious}}[Previous]({{.Page.Previous}}){{end}} - -{{range .Page.Pages}} - {{if eq .Num -1}} - ... - {{else}} - {{.Num}}{{if .IsCurrent}}(current){{end}} - {{end}} -{{end}} - -{{if .Page.HasNext}}[Next]({{.Page.Next}}){{end}} -{{if not .Page.IsLast}}[Last]({{.Page.TotalPages}}){{end}} -``` - -Possible output: - -``` -[First](1) [Previous](2) ... 2 3(current) 4 ... [Next](4) [Last](5) -``` - -As you may guess, if the `Page` value is `-1`, you should print `...` in the HTML as common practice. - -## Getting Help - -- [API Documentation](https://gowalker.org/github.com/Unknwon/paginater) -- [File An Issue](https://github.com/Unknwon/paginater/issues/new) - -## License - -This project is under Apache v2 License. See the [LICENSE](LICENSE) file for the full license text. \ No newline at end of file diff --git a/vendor/github.com/Unknwon/paginater/paginater.go b/vendor/github.com/Unknwon/paginater/paginater.go deleted file mode 100644 index caeea7321..000000000 --- a/vendor/github.com/Unknwon/paginater/paginater.go +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright 2015 Unknwon -// -// 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 paginater is a helper module for custom pagination calculation. -package paginater - -// Paginater represents a set of results of pagination calculations. -type Paginater struct { - total int - pagingNum int - current int - numPages int -} - -// New initialize a new pagination calculation and returns a Paginater as result. -func New(total, pagingNum, current, numPages int) *Paginater { - if pagingNum <= 0 { - pagingNum = 1 - } - if current <= 0 { - current = 1 - } - p := &Paginater{total, pagingNum, current, numPages} - if p.current > p.TotalPages() { - p.current = p.TotalPages() - } - return p -} - -// IsFirst returns true if current page is the first page. -func (p *Paginater) IsFirst() bool { - return p.current == 1 -} - -// HasPrevious returns true if there is a previous page relative to current page. -func (p *Paginater) HasPrevious() bool { - return p.current > 1 -} - -func (p *Paginater) Previous() int { - if !p.HasPrevious() { - return p.current - } - return p.current - 1 -} - -// HasNext returns true if there is a next page relative to current page. -func (p *Paginater) HasNext() bool { - return p.total > p.current*p.pagingNum -} - -func (p *Paginater) Next() int { - if !p.HasNext() { - return p.current - } - return p.current + 1 -} - -// IsLast returns true if current page is the last page. -func (p *Paginater) IsLast() bool { - if p.total == 0 { - return true - } - return p.total > (p.current-1)*p.pagingNum && !p.HasNext() -} - -// Total returns number of total rows. -func (p *Paginater) Total() int { - return p.total -} - -// TotalPage returns number of total pages. -func (p *Paginater) TotalPages() int { - if p.total == 0 { - return 1 - } - if p.total%p.pagingNum == 0 { - return p.total / p.pagingNum - } - return p.total/p.pagingNum + 1 -} - -// Current returns current page number. -func (p *Paginater) Current() int { - return p.current -} - -// PagingNum returns number of page size. -func (p *Paginater) PagingNum() int { - return p.pagingNum -} - -// Page presents a page in the paginater. -type Page struct { - num int - isCurrent bool -} - -func (p *Page) Num() int { - return p.num -} - -func (p *Page) IsCurrent() bool { - return p.isCurrent -} - -func getMiddleIdx(numPages int) int { - if numPages%2 == 0 { - return numPages / 2 - } - return numPages/2 + 1 -} - -// Pages returns a list of nearby page numbers relative to current page. -// If value is -1 means "..." that more pages are not showing. -func (p *Paginater) Pages() []*Page { - if p.numPages == 0 { - return []*Page{} - } else if p.numPages == 1 && p.TotalPages() == 1 { - // Only show current page. - return []*Page{{1, true}} - } - - // Total page number is less or equal. - if p.TotalPages() <= p.numPages { - pages := make([]*Page, p.TotalPages()) - for i := range pages { - pages[i] = &Page{i + 1, i+1 == p.current} - } - return pages - } - - numPages := p.numPages - maxIdx := numPages - 1 - offsetIdx := 0 - hasMoreNext := false - - // Check more previous and next pages. - previousNum := getMiddleIdx(p.numPages) - 1 - if previousNum > p.current-1 { - previousNum -= previousNum - (p.current - 1) - } - nextNum := p.numPages - previousNum - 1 - if p.current+nextNum > p.TotalPages() { - delta := nextNum - (p.TotalPages() - p.current) - nextNum -= delta - previousNum += delta - } - - offsetVal := p.current - previousNum - if offsetVal > 1 { - numPages++ - maxIdx++ - offsetIdx = 1 - } - - if p.current+nextNum < p.TotalPages() { - numPages++ - hasMoreNext = true - } - - pages := make([]*Page, numPages) - - // There are more previous pages. - if offsetIdx == 1 { - pages[0] = &Page{-1, false} - } - // There are more next pages. - if hasMoreNext { - pages[len(pages)-1] = &Page{-1, false} - } - - // Check previous pages. - for i := 0; i < previousNum; i++ { - pages[offsetIdx+i] = &Page{i + offsetVal, false} - } - - pages[offsetIdx+previousNum] = &Page{p.current, true} - - // Check next pages. - for i := 1; i <= nextNum; i++ { - pages[offsetIdx+previousNum+i] = &Page{p.current + i, false} - } - - return pages -} diff --git a/vendor/github.com/beorn7/perks/LICENSE b/vendor/github.com/beorn7/perks/LICENSE deleted file mode 100644 index 339177be6..000000000 --- a/vendor/github.com/beorn7/perks/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (C) 2013 Blake Mizerany - -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/beorn7/perks/quantile/exampledata.txt b/vendor/github.com/beorn7/perks/quantile/exampledata.txt deleted file mode 100644 index 1602287d7..000000000 --- a/vendor/github.com/beorn7/perks/quantile/exampledata.txt +++ /dev/null @@ -1,2388 +0,0 @@ -8 -5 -26 -12 -5 -235 -13 -6 -28 -30 -3 -3 -3 -3 -5 -2 -33 -7 -2 -4 -7 -12 -14 -5 -8 -3 -10 -4 -5 -3 -6 -6 -209 -20 -3 -10 -14 -3 -4 -6 -8 -5 -11 -7 -3 -2 -3 -3 -212 -5 -222 -4 -10 -10 -5 -6 -3 -8 -3 -10 -254 -220 -2 -3 -5 -24 -5 -4 -222 -7 -3 -3 -223 -8 -15 -12 -14 -14 -3 -2 -2 -3 -13 -3 -11 -4 -4 -6 -5 -7 -13 -5 -3 -5 -2 -5 -3 -5 -2 -7 -15 -17 -14 -3 -6 -6 -3 -17 -5 -4 -7 -6 -4 -4 -8 -6 -8 -3 -9 -3 -6 -3 -4 -5 -3 -3 -660 -4 -6 -10 -3 -6 -3 -2 -5 -13 -2 -4 -4 -10 -4 -8 -4 -3 -7 -9 -9 -3 -10 -37 -3 -13 -4 -12 -3 -6 -10 -8 -5 -21 -2 -3 -8 -3 -2 -3 -3 -4 -12 -2 -4 -8 -8 -4 -3 -2 -20 -1 -6 -32 -2 -11 -6 -18 -3 -8 -11 -3 -212 -3 -4 -2 -6 -7 -12 -11 -3 -2 -16 -10 -6 -4 -6 -3 -2 -7 -3 -2 -2 -2 -2 -5 -6 -4 -3 -10 -3 -4 -6 -5 -3 -4 -4 -5 -6 -4 -3 -4 -4 -5 -7 -5 -5 -3 -2 -7 -2 -4 -12 -4 -5 -6 -2 -4 -4 -8 -4 -15 -13 -7 -16 -5 -3 -23 -5 -5 -7 -3 -2 -9 -8 -7 -5 -8 -11 -4 -10 -76 -4 -47 -4 -3 -2 -7 -4 -2 -3 -37 -10 -4 -2 -20 -5 -4 -4 -10 -10 -4 -3 -7 -23 -240 -7 -13 -5 -5 -3 -3 -2 -5 -4 -2 -8 -7 -19 -2 -23 -8 -7 -2 -5 -3 -8 -3 -8 -13 -5 -5 -5 -2 -3 -23 -4 -9 -8 -4 -3 -3 -5 -220 -2 -3 -4 -6 -14 -3 -53 -6 -2 -5 -18 -6 -3 -219 -6 -5 -2 -5 -3 -6 -5 -15 -4 -3 -17 -3 -2 -4 -7 -2 -3 -3 -4 -4 -3 -2 -664 -6 -3 -23 -5 -5 -16 -5 -8 -2 -4 -2 -24 -12 -3 -2 -3 -5 -8 -3 -5 -4 -3 -14 -3 -5 -8 -2 -3 -7 -9 -4 -2 -3 -6 -8 -4 -3 -4 -6 -5 -3 -3 -6 -3 -19 -4 -4 -6 -3 -6 -3 -5 -22 -5 -4 -4 -3 -8 -11 -4 -9 -7 -6 -13 -4 -4 -4 -6 -17 -9 -3 -3 -3 -4 -3 -221 -5 -11 -3 -4 -2 -12 -6 -3 -5 -7 -5 -7 -4 -9 -7 -14 -37 -19 -217 -16 -3 -5 -2 -2 -7 -19 -7 -6 -7 -4 -24 -5 -11 -4 -7 -7 -9 -13 -3 -4 -3 -6 -28 -4 -4 -5 -5 -2 -5 -6 -4 -4 -6 -10 -5 -4 -3 -2 -3 -3 -6 -5 -5 -4 -3 -2 -3 -7 -4 -6 -18 -16 -8 -16 -4 -5 -8 -6 -9 -13 -1545 -6 -215 -6 -5 -6 -3 -45 -31 -5 -2 -2 -4 -3 -3 -2 -5 -4 -3 -5 -7 -7 -4 -5 -8 -5 -4 -749 -2 -31 -9 -11 -2 -11 -5 -4 -4 -7 -9 -11 -4 -5 -4 -7 -3 -4 -6 -2 -15 -3 -4 -3 -4 -3 -5 -2 -13 -5 -5 -3 -3 -23 -4 -4 -5 -7 -4 -13 -2 -4 -3 -4 -2 -6 -2 -7 -3 -5 -5 -3 -29 -5 -4 -4 -3 -10 -2 -3 -79 -16 -6 -6 -7 -7 -3 -5 -5 -7 -4 -3 -7 -9 -5 -6 -5 -9 -6 -3 -6 -4 -17 -2 -10 -9 -3 -6 -2 -3 -21 -22 -5 -11 -4 -2 -17 -2 -224 -2 -14 -3 -4 -4 -2 -4 -4 -4 -4 -5 -3 -4 -4 -10 -2 -6 -3 -3 -5 -7 -2 -7 -5 -6 -3 -218 -2 -2 -5 -2 -6 -3 -5 -222 -14 -6 -33 -3 -2 -5 -3 -3 -3 -9 -5 -3 -3 -2 -7 -4 -3 -4 -3 -5 -6 -5 -26 -4 -13 -9 -7 -3 -221 -3 -3 -4 -4 -4 -4 -2 -18 -5 -3 -7 -9 -6 -8 -3 -10 -3 -11 -9 -5 -4 -17 -5 -5 -6 -6 -3 -2 -4 -12 -17 -6 -7 -218 -4 -2 -4 -10 -3 -5 -15 -3 -9 -4 -3 -3 -6 -29 -3 -3 -4 -5 -5 -3 -8 -5 -6 -6 -7 -5 -3 -5 -3 -29 -2 -31 -5 -15 -24 -16 -5 -207 -4 -3 -3 -2 -15 -4 -4 -13 -5 -5 -4 -6 -10 -2 -7 -8 -4 -6 -20 -5 -3 -4 -3 -12 -12 -5 -17 -7 -3 -3 -3 -6 -10 -3 -5 -25 -80 -4 -9 -3 -2 -11 -3 -3 -2 -3 -8 -7 -5 -5 -19 -5 -3 -3 -12 -11 -2 -6 -5 -5 -5 -3 -3 -3 -4 -209 -14 -3 -2 -5 -19 -4 -4 -3 -4 -14 -5 -6 -4 -13 -9 -7 -4 -7 -10 -2 -9 -5 -7 -2 -8 -4 -6 -5 -5 -222 -8 -7 -12 -5 -216 -3 -4 -4 -6 -3 -14 -8 -7 -13 -4 -3 -3 -3 -3 -17 -5 -4 -3 -33 -6 -6 -33 -7 -5 -3 -8 -7 -5 -2 -9 -4 -2 -233 -24 -7 -4 -8 -10 -3 -4 -15 -2 -16 -3 -3 -13 -12 -7 -5 -4 -207 -4 -2 -4 -27 -15 -2 -5 -2 -25 -6 -5 -5 -6 -13 -6 -18 -6 -4 -12 -225 -10 -7 -5 -2 -2 -11 -4 -14 -21 -8 -10 -3 -5 -4 -232 -2 -5 -5 -3 -7 -17 -11 -6 -6 -23 -4 -6 -3 -5 -4 -2 -17 -3 -6 -5 -8 -3 -2 -2 -14 -9 -4 -4 -2 -5 -5 -3 -7 -6 -12 -6 -10 -3 -6 -2 -2 -19 -5 -4 -4 -9 -2 -4 -13 -3 -5 -6 -3 -6 -5 -4 -9 -6 -3 -5 -7 -3 -6 -6 -4 -3 -10 -6 -3 -221 -3 -5 -3 -6 -4 -8 -5 -3 -6 -4 -4 -2 -54 -5 -6 -11 -3 -3 -4 -4 -4 -3 -7 -3 -11 -11 -7 -10 -6 -13 -223 -213 -15 -231 -7 -3 -7 -228 -2 -3 -4 -4 -5 -6 -7 -4 -13 -3 -4 -5 -3 -6 -4 -6 -7 -2 -4 -3 -4 -3 -3 -6 -3 -7 -3 -5 -18 -5 -6 -8 -10 -3 -3 -3 -2 -4 -2 -4 -4 -5 -6 -6 -4 -10 -13 -3 -12 -5 -12 -16 -8 -4 -19 -11 -2 -4 -5 -6 -8 -5 -6 -4 -18 -10 -4 -2 -216 -6 -6 -6 -2 -4 -12 -8 -3 -11 -5 -6 -14 -5 -3 -13 -4 -5 -4 -5 -3 -28 -6 -3 -7 -219 -3 -9 -7 -3 -10 -6 -3 -4 -19 -5 -7 -11 -6 -15 -19 -4 -13 -11 -3 -7 -5 -10 -2 -8 -11 -2 -6 -4 -6 -24 -6 -3 -3 -3 -3 -6 -18 -4 -11 -4 -2 -5 -10 -8 -3 -9 -5 -3 -4 -5 -6 -2 -5 -7 -4 -4 -14 -6 -4 -4 -5 -5 -7 -2 -4 -3 -7 -3 -3 -6 -4 -5 -4 -4 -4 -3 -3 -3 -3 -8 -14 -2 -3 -5 -3 -2 -4 -5 -3 -7 -3 -3 -18 -3 -4 -4 -5 -7 -3 -3 -3 -13 -5 -4 -8 -211 -5 -5 -3 -5 -2 -5 -4 -2 -655 -6 -3 -5 -11 -2 -5 -3 -12 -9 -15 -11 -5 -12 -217 -2 -6 -17 -3 -3 -207 -5 -5 -4 -5 -9 -3 -2 -8 -5 -4 -3 -2 -5 -12 -4 -14 -5 -4 -2 -13 -5 -8 -4 -225 -4 -3 -4 -5 -4 -3 -3 -6 -23 -9 -2 -6 -7 -233 -4 -4 -6 -18 -3 -4 -6 -3 -4 -4 -2 -3 -7 -4 -13 -227 -4 -3 -5 -4 -2 -12 -9 -17 -3 -7 -14 -6 -4 -5 -21 -4 -8 -9 -2 -9 -25 -16 -3 -6 -4 -7 -8 -5 -2 -3 -5 -4 -3 -3 -5 -3 -3 -3 -2 -3 -19 -2 -4 -3 -4 -2 -3 -4 -4 -2 -4 -3 -3 -3 -2 -6 -3 -17 -5 -6 -4 -3 -13 -5 -3 -3 -3 -4 -9 -4 -2 -14 -12 -4 -5 -24 -4 -3 -37 -12 -11 -21 -3 -4 -3 -13 -4 -2 -3 -15 -4 -11 -4 -4 -3 -8 -3 -4 -4 -12 -8 -5 -3 -3 -4 -2 -220 -3 -5 -223 -3 -3 -3 -10 -3 -15 -4 -241 -9 -7 -3 -6 -6 -23 -4 -13 -7 -3 -4 -7 -4 -9 -3 -3 -4 -10 -5 -5 -1 -5 -24 -2 -4 -5 -5 -6 -14 -3 -8 -2 -3 -5 -13 -13 -3 -5 -2 -3 -15 -3 -4 -2 -10 -4 -4 -4 -5 -5 -3 -5 -3 -4 -7 -4 -27 -3 -6 -4 -15 -3 -5 -6 -6 -5 -4 -8 -3 -9 -2 -6 -3 -4 -3 -7 -4 -18 -3 -11 -3 -3 -8 -9 -7 -24 -3 -219 -7 -10 -4 -5 -9 -12 -2 -5 -4 -4 -4 -3 -3 -19 -5 -8 -16 -8 -6 -22 -3 -23 -3 -242 -9 -4 -3 -3 -5 -7 -3 -3 -5 -8 -3 -7 -5 -14 -8 -10 -3 -4 -3 -7 -4 -6 -7 -4 -10 -4 -3 -11 -3 -7 -10 -3 -13 -6 -8 -12 -10 -5 -7 -9 -3 -4 -7 -7 -10 -8 -30 -9 -19 -4 -3 -19 -15 -4 -13 -3 -215 -223 -4 -7 -4 -8 -17 -16 -3 -7 -6 -5 -5 -4 -12 -3 -7 -4 -4 -13 -4 -5 -2 -5 -6 -5 -6 -6 -7 -10 -18 -23 -9 -3 -3 -6 -5 -2 -4 -2 -7 -3 -3 -2 -5 -5 -14 -10 -224 -6 -3 -4 -3 -7 -5 -9 -3 -6 -4 -2 -5 -11 -4 -3 -3 -2 -8 -4 -7 -4 -10 -7 -3 -3 -18 -18 -17 -3 -3 -3 -4 -5 -3 -3 -4 -12 -7 -3 -11 -13 -5 -4 -7 -13 -5 -4 -11 -3 -12 -3 -6 -4 -4 -21 -4 -6 -9 -5 -3 -10 -8 -4 -6 -4 -4 -6 -5 -4 -8 -6 -4 -6 -4 -4 -5 -9 -6 -3 -4 -2 -9 -3 -18 -2 -4 -3 -13 -3 -6 -6 -8 -7 -9 -3 -2 -16 -3 -4 -6 -3 -2 -33 -22 -14 -4 -9 -12 -4 -5 -6 -3 -23 -9 -4 -3 -5 -5 -3 -4 -5 -3 -5 -3 -10 -4 -5 -5 -8 -4 -4 -6 -8 -5 -4 -3 -4 -6 -3 -3 -3 -5 -9 -12 -6 -5 -9 -3 -5 -3 -2 -2 -2 -18 -3 -2 -21 -2 -5 -4 -6 -4 -5 -10 -3 -9 -3 -2 -10 -7 -3 -6 -6 -4 -4 -8 -12 -7 -3 -7 -3 -3 -9 -3 -4 -5 -4 -4 -5 -5 -10 -15 -4 -4 -14 -6 -227 -3 -14 -5 -216 -22 -5 -4 -2 -2 -6 -3 -4 -2 -9 -9 -4 -3 -28 -13 -11 -4 -5 -3 -3 -2 -3 -3 -5 -3 -4 -3 -5 -23 -26 -3 -4 -5 -6 -4 -6 -3 -5 -5 -3 -4 -3 -2 -2 -2 -7 -14 -3 -6 -7 -17 -2 -2 -15 -14 -16 -4 -6 -7 -13 -6 -4 -5 -6 -16 -3 -3 -28 -3 -6 -15 -3 -9 -2 -4 -6 -3 -3 -22 -4 -12 -6 -7 -2 -5 -4 -10 -3 -16 -6 -9 -2 -5 -12 -7 -5 -5 -5 -5 -2 -11 -9 -17 -4 -3 -11 -7 -3 -5 -15 -4 -3 -4 -211 -8 -7 -5 -4 -7 -6 -7 -6 -3 -6 -5 -6 -5 -3 -4 -4 -26 -4 -6 -10 -4 -4 -3 -2 -3 -3 -4 -5 -9 -3 -9 -4 -4 -5 -5 -8 -2 -4 -2 -3 -8 -4 -11 -19 -5 -8 -6 -3 -5 -6 -12 -3 -2 -4 -16 -12 -3 -4 -4 -8 -6 -5 -6 -6 -219 -8 -222 -6 -16 -3 -13 -19 -5 -4 -3 -11 -6 -10 -4 -7 -7 -12 -5 -3 -3 -5 -6 -10 -3 -8 -2 -5 -4 -7 -2 -4 -4 -2 -12 -9 -6 -4 -2 -40 -2 -4 -10 -4 -223 -4 -2 -20 -6 -7 -24 -5 -4 -5 -2 -20 -16 -6 -5 -13 -2 -3 -3 -19 -3 -2 -4 -5 -6 -7 -11 -12 -5 -6 -7 -7 -3 -5 -3 -5 -3 -14 -3 -4 -4 -2 -11 -1 -7 -3 -9 -6 -11 -12 -5 -8 -6 -221 -4 -2 -12 -4 -3 -15 -4 -5 -226 -7 -218 -7 -5 -4 -5 -18 -4 -5 -9 -4 -4 -2 -9 -18 -18 -9 -5 -6 -6 -3 -3 -7 -3 -5 -4 -4 -4 -12 -3 -6 -31 -5 -4 -7 -3 -6 -5 -6 -5 -11 -2 -2 -11 -11 -6 -7 -5 -8 -7 -10 -5 -23 -7 -4 -3 -5 -34 -2 -5 -23 -7 -3 -6 -8 -4 -4 -4 -2 -5 -3 -8 -5 -4 -8 -25 -2 -3 -17 -8 -3 -4 -8 -7 -3 -15 -6 -5 -7 -21 -9 -5 -6 -6 -5 -3 -2 -3 -10 -3 -6 -3 -14 -7 -4 -4 -8 -7 -8 -2 -6 -12 -4 -213 -6 -5 -21 -8 -2 -5 -23 -3 -11 -2 -3 -6 -25 -2 -3 -6 -7 -6 -6 -4 -4 -6 -3 -17 -9 -7 -6 -4 -3 -10 -7 -2 -3 -3 -3 -11 -8 -3 -7 -6 -4 -14 -36 -3 -4 -3 -3 -22 -13 -21 -4 -2 -7 -4 -4 -17 -15 -3 -7 -11 -2 -4 -7 -6 -209 -6 -3 -2 -2 -24 -4 -9 -4 -3 -3 -3 -29 -2 -2 -4 -3 -3 -5 -4 -6 -3 -3 -2 -4 diff --git a/vendor/github.com/beorn7/perks/quantile/stream.go b/vendor/github.com/beorn7/perks/quantile/stream.go deleted file mode 100644 index d7d14f8eb..000000000 --- a/vendor/github.com/beorn7/perks/quantile/stream.go +++ /dev/null @@ -1,316 +0,0 @@ -// Package quantile computes approximate quantiles over an unbounded data -// stream within low memory and CPU bounds. -// -// A small amount of accuracy is traded to achieve the above properties. -// -// Multiple streams can be merged before calling Query to generate a single set -// of results. This is meaningful when the streams represent the same type of -// data. See Merge and Samples. -// -// For more detailed information about the algorithm used, see: -// -// Effective Computation of Biased Quantiles over Data Streams -// -// http://www.cs.rutgers.edu/~muthu/bquant.pdf -package quantile - -import ( - "math" - "sort" -) - -// Sample holds an observed value and meta information for compression. JSON -// tags have been added for convenience. -type Sample struct { - Value float64 `json:",string"` - Width float64 `json:",string"` - Delta float64 `json:",string"` -} - -// Samples represents a slice of samples. It implements sort.Interface. -type Samples []Sample - -func (a Samples) Len() int { return len(a) } -func (a Samples) Less(i, j int) bool { return a[i].Value < a[j].Value } -func (a Samples) Swap(i, j int) { a[i], a[j] = a[j], a[i] } - -type invariant func(s *stream, r float64) float64 - -// NewLowBiased returns an initialized Stream for low-biased quantiles -// (e.g. 0.01, 0.1, 0.5) where the needed quantiles are not known a priori, but -// error guarantees can still be given even for the lower ranks of the data -// distribution. -// -// The provided epsilon is a relative error, i.e. the true quantile of a value -// returned by a query is guaranteed to be within (1±Epsilon)*Quantile. -// -// See http://www.cs.rutgers.edu/~muthu/bquant.pdf for time, space, and error -// properties. -func NewLowBiased(epsilon float64) *Stream { - ƒ := func(s *stream, r float64) float64 { - return 2 * epsilon * r - } - return newStream(ƒ) -} - -// NewHighBiased returns an initialized Stream for high-biased quantiles -// (e.g. 0.01, 0.1, 0.5) where the needed quantiles are not known a priori, but -// error guarantees can still be given even for the higher ranks of the data -// distribution. -// -// The provided epsilon is a relative error, i.e. the true quantile of a value -// returned by a query is guaranteed to be within 1-(1±Epsilon)*(1-Quantile). -// -// See http://www.cs.rutgers.edu/~muthu/bquant.pdf for time, space, and error -// properties. -func NewHighBiased(epsilon float64) *Stream { - ƒ := func(s *stream, r float64) float64 { - return 2 * epsilon * (s.n - r) - } - return newStream(ƒ) -} - -// NewTargeted returns an initialized Stream concerned with a particular set of -// quantile values that are supplied a priori. Knowing these a priori reduces -// space and computation time. The targets map maps the desired quantiles to -// their absolute errors, i.e. the true quantile of a value returned by a query -// is guaranteed to be within (Quantile±Epsilon). -// -// See http://www.cs.rutgers.edu/~muthu/bquant.pdf for time, space, and error properties. -func NewTargeted(targetMap map[float64]float64) *Stream { - // Convert map to slice to avoid slow iterations on a map. - // ƒ is called on the hot path, so converting the map to a slice - // beforehand results in significant CPU savings. - targets := targetMapToSlice(targetMap) - - ƒ := func(s *stream, r float64) float64 { - var m = math.MaxFloat64 - var f float64 - for _, t := range targets { - if t.quantile*s.n <= r { - f = (2 * t.epsilon * r) / t.quantile - } else { - f = (2 * t.epsilon * (s.n - r)) / (1 - t.quantile) - } - if f < m { - m = f - } - } - return m - } - return newStream(ƒ) -} - -type target struct { - quantile float64 - epsilon float64 -} - -func targetMapToSlice(targetMap map[float64]float64) []target { - targets := make([]target, 0, len(targetMap)) - - for quantile, epsilon := range targetMap { - t := target{ - quantile: quantile, - epsilon: epsilon, - } - targets = append(targets, t) - } - - return targets -} - -// Stream computes quantiles for a stream of float64s. It is not thread-safe by -// design. Take care when using across multiple goroutines. -type Stream struct { - *stream - b Samples - sorted bool -} - -func newStream(ƒ invariant) *Stream { - x := &stream{ƒ: ƒ} - return &Stream{x, make(Samples, 0, 500), true} -} - -// Insert inserts v into the stream. -func (s *Stream) Insert(v float64) { - s.insert(Sample{Value: v, Width: 1}) -} - -func (s *Stream) insert(sample Sample) { - s.b = append(s.b, sample) - s.sorted = false - if len(s.b) == cap(s.b) { - s.flush() - } -} - -// Query returns the computed qth percentiles value. If s was created with -// NewTargeted, and q is not in the set of quantiles provided a priori, Query -// will return an unspecified result. -func (s *Stream) Query(q float64) float64 { - if !s.flushed() { - // Fast path when there hasn't been enough data for a flush; - // this also yields better accuracy for small sets of data. - l := len(s.b) - if l == 0 { - return 0 - } - i := int(math.Ceil(float64(l) * q)) - if i > 0 { - i -= 1 - } - s.maybeSort() - return s.b[i].Value - } - s.flush() - return s.stream.query(q) -} - -// Merge merges samples into the underlying streams samples. This is handy when -// merging multiple streams from separate threads, database shards, etc. -// -// ATTENTION: This method is broken and does not yield correct results. The -// underlying algorithm is not capable of merging streams correctly. -func (s *Stream) Merge(samples Samples) { - sort.Sort(samples) - s.stream.merge(samples) -} - -// Reset reinitializes and clears the list reusing the samples buffer memory. -func (s *Stream) Reset() { - s.stream.reset() - s.b = s.b[:0] -} - -// Samples returns stream samples held by s. -func (s *Stream) Samples() Samples { - if !s.flushed() { - return s.b - } - s.flush() - return s.stream.samples() -} - -// Count returns the total number of samples observed in the stream -// since initialization. -func (s *Stream) Count() int { - return len(s.b) + s.stream.count() -} - -func (s *Stream) flush() { - s.maybeSort() - s.stream.merge(s.b) - s.b = s.b[:0] -} - -func (s *Stream) maybeSort() { - if !s.sorted { - s.sorted = true - sort.Sort(s.b) - } -} - -func (s *Stream) flushed() bool { - return len(s.stream.l) > 0 -} - -type stream struct { - n float64 - l []Sample - ƒ invariant -} - -func (s *stream) reset() { - s.l = s.l[:0] - s.n = 0 -} - -func (s *stream) insert(v float64) { - s.merge(Samples{{v, 1, 0}}) -} - -func (s *stream) merge(samples Samples) { - // TODO(beorn7): This tries to merge not only individual samples, but - // whole summaries. The paper doesn't mention merging summaries at - // all. Unittests show that the merging is inaccurate. Find out how to - // do merges properly. - var r float64 - i := 0 - for _, sample := range samples { - for ; i < len(s.l); i++ { - c := s.l[i] - if c.Value > sample.Value { - // Insert at position i. - s.l = append(s.l, Sample{}) - copy(s.l[i+1:], s.l[i:]) - s.l[i] = Sample{ - sample.Value, - sample.Width, - math.Max(sample.Delta, math.Floor(s.ƒ(s, r))-1), - // TODO(beorn7): How to calculate delta correctly? - } - i++ - goto inserted - } - r += c.Width - } - s.l = append(s.l, Sample{sample.Value, sample.Width, 0}) - i++ - inserted: - s.n += sample.Width - r += sample.Width - } - s.compress() -} - -func (s *stream) count() int { - return int(s.n) -} - -func (s *stream) query(q float64) float64 { - t := math.Ceil(q * s.n) - t += math.Ceil(s.ƒ(s, t) / 2) - p := s.l[0] - var r float64 - for _, c := range s.l[1:] { - r += p.Width - if r+c.Width+c.Delta > t { - return p.Value - } - p = c - } - return p.Value -} - -func (s *stream) compress() { - if len(s.l) < 2 { - return - } - x := s.l[len(s.l)-1] - xi := len(s.l) - 1 - r := s.n - 1 - x.Width - - for i := len(s.l) - 2; i >= 0; i-- { - c := s.l[i] - if c.Width+x.Width+x.Delta <= s.ƒ(s, r) { - x.Width += c.Width - s.l[xi] = x - // Remove element at i. - copy(s.l[i:], s.l[i+1:]) - s.l = s.l[:len(s.l)-1] - xi -= 1 - } else { - x = c - xi = i - } - r -= c.Width - } -} - -func (s *stream) samples() Samples { - samples := make(Samples, len(s.l)) - copy(samples, s.l) - return samples -} diff --git a/vendor/github.com/boombuler/barcode/LICENSE b/vendor/github.com/boombuler/barcode/LICENSE deleted file mode 100644 index 862b0ddcd..000000000 --- a/vendor/github.com/boombuler/barcode/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Florian Sundermann - -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/boombuler/barcode/README.md b/vendor/github.com/boombuler/barcode/README.md deleted file mode 100644 index 85c34d639..000000000 --- a/vendor/github.com/boombuler/barcode/README.md +++ /dev/null @@ -1,18 +0,0 @@ -##Introduction## -This is a package for GO which can be used to create different types of barcodes. - -##Supported Barcode Types## -* Aztec Code -* Codabar -* Code 128 -* Code 39 -* EAN 8 -* EAN 13 -* Datamatrix -* QR Codes -* 2 of 5 - -##Documentation## -See [GoDoc](https://godoc.org/github.com/boombuler/barcode) - -To create a barcode use the Encode function from one of the subpackages. diff --git a/vendor/github.com/boombuler/barcode/barcode.go b/vendor/github.com/boombuler/barcode/barcode.go deleted file mode 100644 index 3479c7bc2..000000000 --- a/vendor/github.com/boombuler/barcode/barcode.go +++ /dev/null @@ -1,27 +0,0 @@ -package barcode - -import "image" - -// Contains some meta information about a barcode -type Metadata struct { - // the name of the barcode kind - CodeKind string - // contains 1 for 1D barcodes or 2 for 2D barcodes - Dimensions byte -} - -// a rendered and encoded barcode -type Barcode interface { - image.Image - // returns some meta information about the barcode - Metadata() Metadata - // the data that was encoded in this barcode - Content() string -} - -// Additional interface that some barcodes might implement to provide -// the value of its checksum. -type BarcodeIntCS interface { - Barcode - CheckSum() int -} diff --git a/vendor/github.com/boombuler/barcode/qr/alphanumeric.go b/vendor/github.com/boombuler/barcode/qr/alphanumeric.go deleted file mode 100644 index 4ded7c8e0..000000000 --- a/vendor/github.com/boombuler/barcode/qr/alphanumeric.go +++ /dev/null @@ -1,66 +0,0 @@ -package qr - -import ( - "errors" - "fmt" - "strings" - - "github.com/boombuler/barcode/utils" -) - -const charSet string = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:" - -func stringToAlphaIdx(content string) <-chan int { - result := make(chan int) - go func() { - for _, r := range content { - idx := strings.IndexRune(charSet, r) - result <- idx - if idx < 0 { - break - } - } - close(result) - }() - - return result -} - -func encodeAlphaNumeric(content string, ecl ErrorCorrectionLevel) (*utils.BitList, *versionInfo, error) { - - contentLenIsOdd := len(content)%2 == 1 - contentBitCount := (len(content) / 2) * 11 - if contentLenIsOdd { - contentBitCount += 6 - } - vi := findSmallestVersionInfo(ecl, alphaNumericMode, contentBitCount) - if vi == nil { - return nil, nil, errors.New("To much data to encode") - } - - res := new(utils.BitList) - res.AddBits(int(alphaNumericMode), 4) - res.AddBits(len(content), vi.charCountBits(alphaNumericMode)) - - encoder := stringToAlphaIdx(content) - - for idx := 0; idx < len(content)/2; idx++ { - c1 := <-encoder - c2 := <-encoder - if c1 < 0 || c2 < 0 { - return nil, nil, fmt.Errorf("\"%s\" can not be encoded as %s", content, AlphaNumeric) - } - res.AddBits(c1*45+c2, 11) - } - if contentLenIsOdd { - c := <-encoder - if c < 0 { - return nil, nil, fmt.Errorf("\"%s\" can not be encoded as %s", content, AlphaNumeric) - } - res.AddBits(c, 6) - } - - addPaddingAndTerminator(res, vi) - - return res, vi, nil -} diff --git a/vendor/github.com/boombuler/barcode/qr/automatic.go b/vendor/github.com/boombuler/barcode/qr/automatic.go deleted file mode 100644 index e7c56013f..000000000 --- a/vendor/github.com/boombuler/barcode/qr/automatic.go +++ /dev/null @@ -1,23 +0,0 @@ -package qr - -import ( - "fmt" - - "github.com/boombuler/barcode/utils" -) - -func encodeAuto(content string, ecl ErrorCorrectionLevel) (*utils.BitList, *versionInfo, error) { - bits, vi, _ := Numeric.getEncoder()(content, ecl) - if bits != nil && vi != nil { - return bits, vi, nil - } - bits, vi, _ = AlphaNumeric.getEncoder()(content, ecl) - if bits != nil && vi != nil { - return bits, vi, nil - } - bits, vi, _ = Unicode.getEncoder()(content, ecl) - if bits != nil && vi != nil { - return bits, vi, nil - } - return nil, nil, fmt.Errorf("No encoding found to encode \"%s\"", content) -} diff --git a/vendor/github.com/boombuler/barcode/qr/blocks.go b/vendor/github.com/boombuler/barcode/qr/blocks.go deleted file mode 100644 index d3173787f..000000000 --- a/vendor/github.com/boombuler/barcode/qr/blocks.go +++ /dev/null @@ -1,59 +0,0 @@ -package qr - -type block struct { - data []byte - ecc []byte -} -type blockList []*block - -func splitToBlocks(data <-chan byte, vi *versionInfo) blockList { - result := make(blockList, vi.NumberOfBlocksInGroup1+vi.NumberOfBlocksInGroup2) - - for b := 0; b < int(vi.NumberOfBlocksInGroup1); b++ { - blk := new(block) - blk.data = make([]byte, vi.DataCodeWordsPerBlockInGroup1) - for cw := 0; cw < int(vi.DataCodeWordsPerBlockInGroup1); cw++ { - blk.data[cw] = <-data - } - blk.ecc = ec.calcECC(blk.data, vi.ErrorCorrectionCodewordsPerBlock) - result[b] = blk - } - - for b := 0; b < int(vi.NumberOfBlocksInGroup2); b++ { - blk := new(block) - blk.data = make([]byte, vi.DataCodeWordsPerBlockInGroup2) - for cw := 0; cw < int(vi.DataCodeWordsPerBlockInGroup2); cw++ { - blk.data[cw] = <-data - } - blk.ecc = ec.calcECC(blk.data, vi.ErrorCorrectionCodewordsPerBlock) - result[int(vi.NumberOfBlocksInGroup1)+b] = blk - } - - return result -} - -func (bl blockList) interleave(vi *versionInfo) []byte { - var maxCodewordCount int - if vi.DataCodeWordsPerBlockInGroup1 > vi.DataCodeWordsPerBlockInGroup2 { - maxCodewordCount = int(vi.DataCodeWordsPerBlockInGroup1) - } else { - maxCodewordCount = int(vi.DataCodeWordsPerBlockInGroup2) - } - resultLen := (vi.DataCodeWordsPerBlockInGroup1+vi.ErrorCorrectionCodewordsPerBlock)*vi.NumberOfBlocksInGroup1 + - (vi.DataCodeWordsPerBlockInGroup2+vi.ErrorCorrectionCodewordsPerBlock)*vi.NumberOfBlocksInGroup2 - - result := make([]byte, 0, resultLen) - for i := 0; i < maxCodewordCount; i++ { - for b := 0; b < len(bl); b++ { - if len(bl[b].data) > i { - result = append(result, bl[b].data[i]) - } - } - } - for i := 0; i < int(vi.ErrorCorrectionCodewordsPerBlock); i++ { - for b := 0; b < len(bl); b++ { - result = append(result, bl[b].ecc[i]) - } - } - return result -} diff --git a/vendor/github.com/boombuler/barcode/qr/encoder.go b/vendor/github.com/boombuler/barcode/qr/encoder.go deleted file mode 100644 index 2c6ab2111..000000000 --- a/vendor/github.com/boombuler/barcode/qr/encoder.go +++ /dev/null @@ -1,416 +0,0 @@ -// Package qr can be used to create QR barcodes. -package qr - -import ( - "image" - - "github.com/boombuler/barcode" - "github.com/boombuler/barcode/utils" -) - -type encodeFn func(content string, eccLevel ErrorCorrectionLevel) (*utils.BitList, *versionInfo, error) - -// Encoding mode for QR Codes. -type Encoding byte - -const ( - // Auto will choose ths best matching encoding - Auto Encoding = iota - // Numeric encoding only encodes numbers [0-9] - Numeric - // AlphaNumeric encoding only encodes uppercase letters, numbers and [Space], $, %, *, +, -, ., /, : - AlphaNumeric - // Unicode encoding encodes the string as utf-8 - Unicode - // only for testing purpose - unknownEncoding -) - -func (e Encoding) getEncoder() encodeFn { - switch e { - case Auto: - return encodeAuto - case Numeric: - return encodeNumeric - case AlphaNumeric: - return encodeAlphaNumeric - case Unicode: - return encodeUnicode - } - return nil -} - -func (e Encoding) String() string { - switch e { - case Auto: - return "Auto" - case Numeric: - return "Numeric" - case AlphaNumeric: - return "AlphaNumeric" - case Unicode: - return "Unicode" - } - return "" -} - -// Encode returns a QR barcode with the given content, error correction level and uses the given encoding -func Encode(content string, level ErrorCorrectionLevel, mode Encoding) (barcode.Barcode, error) { - bits, vi, err := mode.getEncoder()(content, level) - if err != nil { - return nil, err - } - - blocks := splitToBlocks(bits.IterateBytes(), vi) - data := blocks.interleave(vi) - result := render(data, vi) - result.content = content - return result, nil -} - -func render(data []byte, vi *versionInfo) *qrcode { - dim := vi.modulWidth() - results := make([]*qrcode, 8) - for i := 0; i < 8; i++ { - results[i] = newBarcode(dim) - } - - occupied := newBarcode(dim) - - setAll := func(x int, y int, val bool) { - occupied.Set(x, y, true) - for i := 0; i < 8; i++ { - results[i].Set(x, y, val) - } - } - - drawFinderPatterns(vi, setAll) - drawAlignmentPatterns(occupied, vi, setAll) - - //Timing Pattern: - var i int - for i = 0; i < dim; i++ { - if !occupied.Get(i, 6) { - setAll(i, 6, i%2 == 0) - } - if !occupied.Get(6, i) { - setAll(6, i, i%2 == 0) - } - } - // Dark Module - setAll(8, dim-8, true) - - drawVersionInfo(vi, setAll) - drawFormatInfo(vi, -1, occupied.Set) - for i := 0; i < 8; i++ { - drawFormatInfo(vi, i, results[i].Set) - } - - // Write the data - var curBitNo int - - for pos := range iterateModules(occupied) { - var curBit bool - if curBitNo < len(data)*8 { - curBit = ((data[curBitNo/8] >> uint(7-(curBitNo%8))) & 1) == 1 - } else { - curBit = false - } - - for i := 0; i < 8; i++ { - setMasked(pos.X, pos.Y, curBit, i, results[i].Set) - } - curBitNo++ - } - - lowestPenalty := ^uint(0) - lowestPenaltyIdx := -1 - for i := 0; i < 8; i++ { - p := results[i].calcPenalty() - if p < lowestPenalty { - lowestPenalty = p - lowestPenaltyIdx = i - } - } - return results[lowestPenaltyIdx] -} - -func setMasked(x, y int, val bool, mask int, set func(int, int, bool)) { - switch mask { - case 0: - val = val != (((y + x) % 2) == 0) - break - case 1: - val = val != ((y % 2) == 0) - break - case 2: - val = val != ((x % 3) == 0) - break - case 3: - val = val != (((y + x) % 3) == 0) - break - case 4: - val = val != (((y/2 + x/3) % 2) == 0) - break - case 5: - val = val != (((y*x)%2)+((y*x)%3) == 0) - break - case 6: - val = val != ((((y*x)%2)+((y*x)%3))%2 == 0) - break - case 7: - val = val != ((((y+x)%2)+((y*x)%3))%2 == 0) - } - set(x, y, val) -} - -func iterateModules(occupied *qrcode) <-chan image.Point { - result := make(chan image.Point) - allPoints := make(chan image.Point) - go func() { - curX := occupied.dimension - 1 - curY := occupied.dimension - 1 - isUpward := true - - for true { - if isUpward { - allPoints <- image.Pt(curX, curY) - allPoints <- image.Pt(curX-1, curY) - curY-- - if curY < 0 { - curY = 0 - curX -= 2 - if curX == 6 { - curX-- - } - if curX < 0 { - break - } - isUpward = false - } - } else { - allPoints <- image.Pt(curX, curY) - allPoints <- image.Pt(curX-1, curY) - curY++ - if curY >= occupied.dimension { - curY = occupied.dimension - 1 - curX -= 2 - if curX == 6 { - curX-- - } - isUpward = true - if curX < 0 { - break - } - } - } - } - - close(allPoints) - }() - go func() { - for pt := range allPoints { - if !occupied.Get(pt.X, pt.Y) { - result <- pt - } - } - close(result) - }() - return result -} - -func drawFinderPatterns(vi *versionInfo, set func(int, int, bool)) { - dim := vi.modulWidth() - drawPattern := func(xoff int, yoff int) { - for x := -1; x < 8; x++ { - for y := -1; y < 8; y++ { - val := (x == 0 || x == 6 || y == 0 || y == 6 || (x > 1 && x < 5 && y > 1 && y < 5)) && (x <= 6 && y <= 6 && x >= 0 && y >= 0) - - if x+xoff >= 0 && x+xoff < dim && y+yoff >= 0 && y+yoff < dim { - set(x+xoff, y+yoff, val) - } - } - } - } - drawPattern(0, 0) - drawPattern(0, dim-7) - drawPattern(dim-7, 0) -} - -func drawAlignmentPatterns(occupied *qrcode, vi *versionInfo, set func(int, int, bool)) { - drawPattern := func(xoff int, yoff int) { - for x := -2; x <= 2; x++ { - for y := -2; y <= 2; y++ { - val := x == -2 || x == 2 || y == -2 || y == 2 || (x == 0 && y == 0) - set(x+xoff, y+yoff, val) - } - } - } - positions := vi.alignmentPatternPlacements() - - for _, x := range positions { - for _, y := range positions { - if occupied.Get(x, y) { - continue - } - drawPattern(x, y) - } - } -} - -var formatInfos = map[ErrorCorrectionLevel]map[int][]bool{ - L: { - 0: []bool{true, true, true, false, true, true, true, true, true, false, false, false, true, false, false}, - 1: []bool{true, true, true, false, false, true, false, true, true, true, true, false, false, true, true}, - 2: []bool{true, true, true, true, true, false, true, true, false, true, false, true, false, true, false}, - 3: []bool{true, true, true, true, false, false, false, true, false, false, true, true, true, false, true}, - 4: []bool{true, true, false, false, true, true, false, false, false, true, false, true, true, true, true}, - 5: []bool{true, true, false, false, false, true, true, false, false, false, true, true, false, false, false}, - 6: []bool{true, true, false, true, true, false, false, false, true, false, false, false, false, false, true}, - 7: []bool{true, true, false, true, false, false, true, false, true, true, true, false, true, true, false}, - }, - M: { - 0: []bool{true, false, true, false, true, false, false, false, false, false, true, false, false, true, false}, - 1: []bool{true, false, true, false, false, false, true, false, false, true, false, false, true, false, true}, - 2: []bool{true, false, true, true, true, true, false, false, true, true, true, true, true, false, false}, - 3: []bool{true, false, true, true, false, true, true, false, true, false, false, true, false, true, true}, - 4: []bool{true, false, false, false, true, false, true, true, true, true, true, true, false, false, true}, - 5: []bool{true, false, false, false, false, false, false, true, true, false, false, true, true, true, false}, - 6: []bool{true, false, false, true, true, true, true, true, false, false, true, false, true, true, true}, - 7: []bool{true, false, false, true, false, true, false, true, false, true, false, false, false, false, false}, - }, - Q: { - 0: []bool{false, true, true, false, true, false, true, false, true, false, true, true, true, true, true}, - 1: []bool{false, true, true, false, false, false, false, false, true, true, false, true, false, false, false}, - 2: []bool{false, true, true, true, true, true, true, false, false, true, true, false, false, false, true}, - 3: []bool{false, true, true, true, false, true, false, false, false, false, false, false, true, true, false}, - 4: []bool{false, true, false, false, true, false, false, true, false, true, true, false, true, false, false}, - 5: []bool{false, true, false, false, false, false, true, true, false, false, false, false, false, true, true}, - 6: []bool{false, true, false, true, true, true, false, true, true, false, true, true, false, true, false}, - 7: []bool{false, true, false, true, false, true, true, true, true, true, false, true, true, false, true}, - }, - H: { - 0: []bool{false, false, true, false, true, true, false, true, false, false, false, true, false, false, true}, - 1: []bool{false, false, true, false, false, true, true, true, false, true, true, true, true, true, false}, - 2: []bool{false, false, true, true, true, false, false, true, true, true, false, false, true, true, true}, - 3: []bool{false, false, true, true, false, false, true, true, true, false, true, false, false, false, false}, - 4: []bool{false, false, false, false, true, true, true, false, true, true, false, false, false, true, false}, - 5: []bool{false, false, false, false, false, true, false, false, true, false, true, false, true, false, true}, - 6: []bool{false, false, false, true, true, false, true, false, false, false, false, true, true, false, false}, - 7: []bool{false, false, false, true, false, false, false, false, false, true, true, true, false, true, true}, - }, -} - -func drawFormatInfo(vi *versionInfo, usedMask int, set func(int, int, bool)) { - var formatInfo []bool - - if usedMask == -1 { - formatInfo = []bool{true, true, true, true, true, true, true, true, true, true, true, true, true, true, true} // Set all to true cause -1 --> occupied mask. - } else { - formatInfo = formatInfos[vi.Level][usedMask] - } - - if len(formatInfo) == 15 { - dim := vi.modulWidth() - set(0, 8, formatInfo[0]) - set(1, 8, formatInfo[1]) - set(2, 8, formatInfo[2]) - set(3, 8, formatInfo[3]) - set(4, 8, formatInfo[4]) - set(5, 8, formatInfo[5]) - set(7, 8, formatInfo[6]) - set(8, 8, formatInfo[7]) - set(8, 7, formatInfo[8]) - set(8, 5, formatInfo[9]) - set(8, 4, formatInfo[10]) - set(8, 3, formatInfo[11]) - set(8, 2, formatInfo[12]) - set(8, 1, formatInfo[13]) - set(8, 0, formatInfo[14]) - - set(8, dim-1, formatInfo[0]) - set(8, dim-2, formatInfo[1]) - set(8, dim-3, formatInfo[2]) - set(8, dim-4, formatInfo[3]) - set(8, dim-5, formatInfo[4]) - set(8, dim-6, formatInfo[5]) - set(8, dim-7, formatInfo[6]) - set(dim-8, 8, formatInfo[7]) - set(dim-7, 8, formatInfo[8]) - set(dim-6, 8, formatInfo[9]) - set(dim-5, 8, formatInfo[10]) - set(dim-4, 8, formatInfo[11]) - set(dim-3, 8, formatInfo[12]) - set(dim-2, 8, formatInfo[13]) - set(dim-1, 8, formatInfo[14]) - } -} - -var versionInfoBitsByVersion = map[byte][]bool{ - 7: []bool{false, false, false, true, true, true, true, true, false, false, true, false, false, true, false, true, false, false}, - 8: []bool{false, false, true, false, false, false, false, true, false, true, true, false, true, true, true, true, false, false}, - 9: []bool{false, false, true, false, false, true, true, false, true, false, true, false, false, true, true, false, false, true}, - 10: []bool{false, false, true, false, true, false, false, true, false, false, true, true, false, true, false, false, true, true}, - 11: []bool{false, false, true, false, true, true, true, false, true, true, true, true, true, true, false, true, true, false}, - 12: []bool{false, false, true, true, false, false, false, true, true, true, false, true, true, false, false, false, true, false}, - 13: []bool{false, false, true, true, false, true, true, false, false, false, false, true, false, false, false, true, true, true}, - 14: []bool{false, false, true, true, true, false, false, true, true, false, false, false, false, false, true, true, false, true}, - 15: []bool{false, false, true, true, true, true, true, false, false, true, false, false, true, false, true, false, false, false}, - 16: []bool{false, true, false, false, false, false, true, false, true, true, false, true, true, true, true, false, false, false}, - 17: []bool{false, true, false, false, false, true, false, true, false, false, false, true, false, true, true, true, false, true}, - 18: []bool{false, true, false, false, true, false, true, false, true, false, false, false, false, true, false, true, true, true}, - 19: []bool{false, true, false, false, true, true, false, true, false, true, false, false, true, true, false, false, true, false}, - 20: []bool{false, true, false, true, false, false, true, false, false, true, true, false, true, false, false, true, true, false}, - 21: []bool{false, true, false, true, false, true, false, true, true, false, true, false, false, false, false, false, true, true}, - 22: []bool{false, true, false, true, true, false, true, false, false, false, true, true, false, false, true, false, false, true}, - 23: []bool{false, true, false, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false}, - 24: []bool{false, true, true, false, false, false, true, true, true, false, true, true, false, false, false, true, false, false}, - 25: []bool{false, true, true, false, false, true, false, false, false, true, true, true, true, false, false, false, false, true}, - 26: []bool{false, true, true, false, true, false, true, true, true, true, true, false, true, false, true, false, true, true}, - 27: []bool{false, true, true, false, true, true, false, false, false, false, true, false, false, false, true, true, true, false}, - 28: []bool{false, true, true, true, false, false, true, true, false, false, false, false, false, true, true, false, true, false}, - 29: []bool{false, true, true, true, false, true, false, false, true, true, false, false, true, true, true, true, true, true}, - 30: []bool{false, true, true, true, true, false, true, true, false, true, false, true, true, true, false, true, false, true}, - 31: []bool{false, true, true, true, true, true, false, false, true, false, false, true, false, true, false, false, false, false}, - 32: []bool{true, false, false, false, false, false, true, false, false, true, true, true, false, true, false, true, false, true}, - 33: []bool{true, false, false, false, false, true, false, true, true, false, true, true, true, true, false, false, false, false}, - 34: []bool{true, false, false, false, true, false, true, false, false, false, true, false, true, true, true, false, true, false}, - 35: []bool{true, false, false, false, true, true, false, true, true, true, true, false, false, true, true, true, true, true}, - 36: []bool{true, false, false, true, false, false, true, false, true, true, false, false, false, false, true, false, true, true}, - 37: []bool{true, false, false, true, false, true, false, true, false, false, false, false, true, false, true, true, true, false}, - 38: []bool{true, false, false, true, true, false, true, false, true, false, false, true, true, false, false, true, false, false}, - 39: []bool{true, false, false, true, true, true, false, true, false, true, false, true, false, false, false, false, false, true}, - 40: []bool{true, false, true, false, false, false, true, true, false, false, false, true, true, false, true, false, false, true}, -} - -func drawVersionInfo(vi *versionInfo, set func(int, int, bool)) { - versionInfoBits, ok := versionInfoBitsByVersion[vi.Version] - - if ok && len(versionInfoBits) > 0 { - for i := 0; i < len(versionInfoBits); i++ { - x := (vi.modulWidth() - 11) + i%3 - y := i / 3 - set(x, y, versionInfoBits[len(versionInfoBits)-i-1]) - set(y, x, versionInfoBits[len(versionInfoBits)-i-1]) - } - } - -} - -func addPaddingAndTerminator(bl *utils.BitList, vi *versionInfo) { - for i := 0; i < 4 && bl.Len() < vi.totalDataBytes()*8; i++ { - bl.AddBit(false) - } - - for bl.Len()%8 != 0 { - bl.AddBit(false) - } - - for i := 0; bl.Len() < vi.totalDataBytes()*8; i++ { - if i%2 == 0 { - bl.AddByte(236) - } else { - bl.AddByte(17) - } - } -} diff --git a/vendor/github.com/boombuler/barcode/qr/errorcorrection.go b/vendor/github.com/boombuler/barcode/qr/errorcorrection.go deleted file mode 100644 index 08ebf0ce6..000000000 --- a/vendor/github.com/boombuler/barcode/qr/errorcorrection.go +++ /dev/null @@ -1,29 +0,0 @@ -package qr - -import ( - "github.com/boombuler/barcode/utils" -) - -type errorCorrection struct { - rs *utils.ReedSolomonEncoder -} - -var ec = newErrorCorrection() - -func newErrorCorrection() *errorCorrection { - fld := utils.NewGaloisField(285, 256, 0) - return &errorCorrection{utils.NewReedSolomonEncoder(fld)} -} - -func (ec *errorCorrection) calcECC(data []byte, eccCount byte) []byte { - dataInts := make([]int, len(data)) - for i := 0; i < len(data); i++ { - dataInts[i] = int(data[i]) - } - res := ec.rs.Encode(dataInts, int(eccCount)) - result := make([]byte, len(res)) - for i := 0; i < len(res); i++ { - result[i] = byte(res[i]) - } - return result -} diff --git a/vendor/github.com/boombuler/barcode/qr/numeric.go b/vendor/github.com/boombuler/barcode/qr/numeric.go deleted file mode 100644 index 49b44cc45..000000000 --- a/vendor/github.com/boombuler/barcode/qr/numeric.go +++ /dev/null @@ -1,56 +0,0 @@ -package qr - -import ( - "errors" - "fmt" - "strconv" - - "github.com/boombuler/barcode/utils" -) - -func encodeNumeric(content string, ecl ErrorCorrectionLevel) (*utils.BitList, *versionInfo, error) { - contentBitCount := (len(content) / 3) * 10 - switch len(content) % 3 { - case 1: - contentBitCount += 4 - case 2: - contentBitCount += 7 - } - vi := findSmallestVersionInfo(ecl, numericMode, contentBitCount) - if vi == nil { - return nil, nil, errors.New("To much data to encode") - } - res := new(utils.BitList) - res.AddBits(int(numericMode), 4) - res.AddBits(len(content), vi.charCountBits(numericMode)) - - for pos := 0; pos < len(content); pos += 3 { - var curStr string - if pos+3 <= len(content) { - curStr = content[pos : pos+3] - } else { - curStr = content[pos:] - } - - i, err := strconv.Atoi(curStr) - if err != nil || i < 0 { - return nil, nil, fmt.Errorf("\"%s\" can not be encoded as %s", content, Numeric) - } - var bitCnt byte - switch len(curStr) % 3 { - case 0: - bitCnt = 10 - case 1: - bitCnt = 4 - break - case 2: - bitCnt = 7 - break - } - - res.AddBits(i, bitCnt) - } - - addPaddingAndTerminator(res, vi) - return res, vi, nil -} diff --git a/vendor/github.com/boombuler/barcode/qr/qrcode.go b/vendor/github.com/boombuler/barcode/qr/qrcode.go deleted file mode 100644 index b7ac26d74..000000000 --- a/vendor/github.com/boombuler/barcode/qr/qrcode.go +++ /dev/null @@ -1,166 +0,0 @@ -package qr - -import ( - "image" - "image/color" - "math" - - "github.com/boombuler/barcode" - "github.com/boombuler/barcode/utils" -) - -type qrcode struct { - dimension int - data *utils.BitList - content string -} - -func (qr *qrcode) Content() string { - return qr.content -} - -func (qr *qrcode) Metadata() barcode.Metadata { - return barcode.Metadata{"QR Code", 2} -} - -func (qr *qrcode) ColorModel() color.Model { - return color.Gray16Model -} - -func (qr *qrcode) Bounds() image.Rectangle { - return image.Rect(0, 0, qr.dimension, qr.dimension) -} - -func (qr *qrcode) At(x, y int) color.Color { - if qr.Get(x, y) { - return color.Black - } - return color.White -} - -func (qr *qrcode) Get(x, y int) bool { - return qr.data.GetBit(x*qr.dimension + y) -} - -func (qr *qrcode) Set(x, y int, val bool) { - qr.data.SetBit(x*qr.dimension+y, val) -} - -func (qr *qrcode) calcPenalty() uint { - return qr.calcPenaltyRule1() + qr.calcPenaltyRule2() + qr.calcPenaltyRule3() + qr.calcPenaltyRule4() -} - -func (qr *qrcode) calcPenaltyRule1() uint { - var result uint - for x := 0; x < qr.dimension; x++ { - checkForX := false - var cntX uint - checkForY := false - var cntY uint - - for y := 0; y < qr.dimension; y++ { - if qr.Get(x, y) == checkForX { - cntX++ - } else { - checkForX = !checkForX - if cntX >= 5 { - result += cntX - 2 - } - cntX = 1 - } - - if qr.Get(y, x) == checkForY { - cntY++ - } else { - checkForY = !checkForY - if cntY >= 5 { - result += cntY - 2 - } - cntY = 1 - } - } - - if cntX >= 5 { - result += cntX - 2 - } - if cntY >= 5 { - result += cntY - 2 - } - } - - return result -} - -func (qr *qrcode) calcPenaltyRule2() uint { - var result uint - for x := 0; x < qr.dimension-1; x++ { - for y := 0; y < qr.dimension-1; y++ { - check := qr.Get(x, y) - if qr.Get(x, y+1) == check && qr.Get(x+1, y) == check && qr.Get(x+1, y+1) == check { - result += 3 - } - } - } - return result -} - -func (qr *qrcode) calcPenaltyRule3() uint { - pattern1 := []bool{true, false, true, true, true, false, true, false, false, false, false} - pattern2 := []bool{false, false, false, false, true, false, true, true, true, false, true} - - var result uint - for x := 0; x <= qr.dimension-len(pattern1); x++ { - for y := 0; y < qr.dimension; y++ { - pattern1XFound := true - pattern2XFound := true - pattern1YFound := true - pattern2YFound := true - - for i := 0; i < len(pattern1); i++ { - iv := qr.Get(x+i, y) - if iv != pattern1[i] { - pattern1XFound = false - } - if iv != pattern2[i] { - pattern2XFound = false - } - iv = qr.Get(y, x+i) - if iv != pattern1[i] { - pattern1YFound = false - } - if iv != pattern2[i] { - pattern2YFound = false - } - } - if pattern1XFound || pattern2XFound { - result += 40 - } - if pattern1YFound || pattern2YFound { - result += 40 - } - } - } - - return result -} - -func (qr *qrcode) calcPenaltyRule4() uint { - totalNum := qr.data.Len() - trueCnt := 0 - for i := 0; i < totalNum; i++ { - if qr.data.GetBit(i) { - trueCnt++ - } - } - percDark := float64(trueCnt) * 100 / float64(totalNum) - floor := math.Abs(math.Floor(percDark/5) - 10) - ceil := math.Abs(math.Ceil(percDark/5) - 10) - return uint(math.Min(floor, ceil) * 10) -} - -func newBarcode(dim int) *qrcode { - res := new(qrcode) - res.dimension = dim - res.data = utils.NewBitList(dim * dim) - return res -} diff --git a/vendor/github.com/boombuler/barcode/qr/unicode.go b/vendor/github.com/boombuler/barcode/qr/unicode.go deleted file mode 100644 index a9135ab6d..000000000 --- a/vendor/github.com/boombuler/barcode/qr/unicode.go +++ /dev/null @@ -1,27 +0,0 @@ -package qr - -import ( - "errors" - - "github.com/boombuler/barcode/utils" -) - -func encodeUnicode(content string, ecl ErrorCorrectionLevel) (*utils.BitList, *versionInfo, error) { - data := []byte(content) - - vi := findSmallestVersionInfo(ecl, byteMode, len(data)*8) - if vi == nil { - return nil, nil, errors.New("To much data to encode") - } - - // It's not correct to add the unicode bytes to the result directly but most readers can't handle the - // required ECI header... - res := new(utils.BitList) - res.AddBits(int(byteMode), 4) - res.AddBits(len(content), vi.charCountBits(byteMode)) - for _, b := range data { - res.AddByte(b) - } - addPaddingAndTerminator(res, vi) - return res, vi, nil -} diff --git a/vendor/github.com/boombuler/barcode/qr/versioninfo.go b/vendor/github.com/boombuler/barcode/qr/versioninfo.go deleted file mode 100644 index 6852a5766..000000000 --- a/vendor/github.com/boombuler/barcode/qr/versioninfo.go +++ /dev/null @@ -1,310 +0,0 @@ -package qr - -import "math" - -// ErrorCorrectionLevel indicates the amount of "backup data" stored in the QR code -type ErrorCorrectionLevel byte - -const ( - // L recovers 7% of data - L ErrorCorrectionLevel = iota - // M recovers 15% of data - M - // Q recovers 25% of data - Q - // H recovers 30% of data - H -) - -func (ecl ErrorCorrectionLevel) String() string { - switch ecl { - case L: - return "L" - case M: - return "M" - case Q: - return "Q" - case H: - return "H" - } - return "unknown" -} - -type encodingMode byte - -const ( - numericMode encodingMode = 1 - alphaNumericMode encodingMode = 2 - byteMode encodingMode = 4 - kanjiMode encodingMode = 8 -) - -type versionInfo struct { - Version byte - Level ErrorCorrectionLevel - ErrorCorrectionCodewordsPerBlock byte - NumberOfBlocksInGroup1 byte - DataCodeWordsPerBlockInGroup1 byte - NumberOfBlocksInGroup2 byte - DataCodeWordsPerBlockInGroup2 byte -} - -var versionInfos = []*versionInfo{ - &versionInfo{1, L, 7, 1, 19, 0, 0}, - &versionInfo{1, M, 10, 1, 16, 0, 0}, - &versionInfo{1, Q, 13, 1, 13, 0, 0}, - &versionInfo{1, H, 17, 1, 9, 0, 0}, - &versionInfo{2, L, 10, 1, 34, 0, 0}, - &versionInfo{2, M, 16, 1, 28, 0, 0}, - &versionInfo{2, Q, 22, 1, 22, 0, 0}, - &versionInfo{2, H, 28, 1, 16, 0, 0}, - &versionInfo{3, L, 15, 1, 55, 0, 0}, - &versionInfo{3, M, 26, 1, 44, 0, 0}, - &versionInfo{3, Q, 18, 2, 17, 0, 0}, - &versionInfo{3, H, 22, 2, 13, 0, 0}, - &versionInfo{4, L, 20, 1, 80, 0, 0}, - &versionInfo{4, M, 18, 2, 32, 0, 0}, - &versionInfo{4, Q, 26, 2, 24, 0, 0}, - &versionInfo{4, H, 16, 4, 9, 0, 0}, - &versionInfo{5, L, 26, 1, 108, 0, 0}, - &versionInfo{5, M, 24, 2, 43, 0, 0}, - &versionInfo{5, Q, 18, 2, 15, 2, 16}, - &versionInfo{5, H, 22, 2, 11, 2, 12}, - &versionInfo{6, L, 18, 2, 68, 0, 0}, - &versionInfo{6, M, 16, 4, 27, 0, 0}, - &versionInfo{6, Q, 24, 4, 19, 0, 0}, - &versionInfo{6, H, 28, 4, 15, 0, 0}, - &versionInfo{7, L, 20, 2, 78, 0, 0}, - &versionInfo{7, M, 18, 4, 31, 0, 0}, - &versionInfo{7, Q, 18, 2, 14, 4, 15}, - &versionInfo{7, H, 26, 4, 13, 1, 14}, - &versionInfo{8, L, 24, 2, 97, 0, 0}, - &versionInfo{8, M, 22, 2, 38, 2, 39}, - &versionInfo{8, Q, 22, 4, 18, 2, 19}, - &versionInfo{8, H, 26, 4, 14, 2, 15}, - &versionInfo{9, L, 30, 2, 116, 0, 0}, - &versionInfo{9, M, 22, 3, 36, 2, 37}, - &versionInfo{9, Q, 20, 4, 16, 4, 17}, - &versionInfo{9, H, 24, 4, 12, 4, 13}, - &versionInfo{10, L, 18, 2, 68, 2, 69}, - &versionInfo{10, M, 26, 4, 43, 1, 44}, - &versionInfo{10, Q, 24, 6, 19, 2, 20}, - &versionInfo{10, H, 28, 6, 15, 2, 16}, - &versionInfo{11, L, 20, 4, 81, 0, 0}, - &versionInfo{11, M, 30, 1, 50, 4, 51}, - &versionInfo{11, Q, 28, 4, 22, 4, 23}, - &versionInfo{11, H, 24, 3, 12, 8, 13}, - &versionInfo{12, L, 24, 2, 92, 2, 93}, - &versionInfo{12, M, 22, 6, 36, 2, 37}, - &versionInfo{12, Q, 26, 4, 20, 6, 21}, - &versionInfo{12, H, 28, 7, 14, 4, 15}, - &versionInfo{13, L, 26, 4, 107, 0, 0}, - &versionInfo{13, M, 22, 8, 37, 1, 38}, - &versionInfo{13, Q, 24, 8, 20, 4, 21}, - &versionInfo{13, H, 22, 12, 11, 4, 12}, - &versionInfo{14, L, 30, 3, 115, 1, 116}, - &versionInfo{14, M, 24, 4, 40, 5, 41}, - &versionInfo{14, Q, 20, 11, 16, 5, 17}, - &versionInfo{14, H, 24, 11, 12, 5, 13}, - &versionInfo{15, L, 22, 5, 87, 1, 88}, - &versionInfo{15, M, 24, 5, 41, 5, 42}, - &versionInfo{15, Q, 30, 5, 24, 7, 25}, - &versionInfo{15, H, 24, 11, 12, 7, 13}, - &versionInfo{16, L, 24, 5, 98, 1, 99}, - &versionInfo{16, M, 28, 7, 45, 3, 46}, - &versionInfo{16, Q, 24, 15, 19, 2, 20}, - &versionInfo{16, H, 30, 3, 15, 13, 16}, - &versionInfo{17, L, 28, 1, 107, 5, 108}, - &versionInfo{17, M, 28, 10, 46, 1, 47}, - &versionInfo{17, Q, 28, 1, 22, 15, 23}, - &versionInfo{17, H, 28, 2, 14, 17, 15}, - &versionInfo{18, L, 30, 5, 120, 1, 121}, - &versionInfo{18, M, 26, 9, 43, 4, 44}, - &versionInfo{18, Q, 28, 17, 22, 1, 23}, - &versionInfo{18, H, 28, 2, 14, 19, 15}, - &versionInfo{19, L, 28, 3, 113, 4, 114}, - &versionInfo{19, M, 26, 3, 44, 11, 45}, - &versionInfo{19, Q, 26, 17, 21, 4, 22}, - &versionInfo{19, H, 26, 9, 13, 16, 14}, - &versionInfo{20, L, 28, 3, 107, 5, 108}, - &versionInfo{20, M, 26, 3, 41, 13, 42}, - &versionInfo{20, Q, 30, 15, 24, 5, 25}, - &versionInfo{20, H, 28, 15, 15, 10, 16}, - &versionInfo{21, L, 28, 4, 116, 4, 117}, - &versionInfo{21, M, 26, 17, 42, 0, 0}, - &versionInfo{21, Q, 28, 17, 22, 6, 23}, - &versionInfo{21, H, 30, 19, 16, 6, 17}, - &versionInfo{22, L, 28, 2, 111, 7, 112}, - &versionInfo{22, M, 28, 17, 46, 0, 0}, - &versionInfo{22, Q, 30, 7, 24, 16, 25}, - &versionInfo{22, H, 24, 34, 13, 0, 0}, - &versionInfo{23, L, 30, 4, 121, 5, 122}, - &versionInfo{23, M, 28, 4, 47, 14, 48}, - &versionInfo{23, Q, 30, 11, 24, 14, 25}, - &versionInfo{23, H, 30, 16, 15, 14, 16}, - &versionInfo{24, L, 30, 6, 117, 4, 118}, - &versionInfo{24, M, 28, 6, 45, 14, 46}, - &versionInfo{24, Q, 30, 11, 24, 16, 25}, - &versionInfo{24, H, 30, 30, 16, 2, 17}, - &versionInfo{25, L, 26, 8, 106, 4, 107}, - &versionInfo{25, M, 28, 8, 47, 13, 48}, - &versionInfo{25, Q, 30, 7, 24, 22, 25}, - &versionInfo{25, H, 30, 22, 15, 13, 16}, - &versionInfo{26, L, 28, 10, 114, 2, 115}, - &versionInfo{26, M, 28, 19, 46, 4, 47}, - &versionInfo{26, Q, 28, 28, 22, 6, 23}, - &versionInfo{26, H, 30, 33, 16, 4, 17}, - &versionInfo{27, L, 30, 8, 122, 4, 123}, - &versionInfo{27, M, 28, 22, 45, 3, 46}, - &versionInfo{27, Q, 30, 8, 23, 26, 24}, - &versionInfo{27, H, 30, 12, 15, 28, 16}, - &versionInfo{28, L, 30, 3, 117, 10, 118}, - &versionInfo{28, M, 28, 3, 45, 23, 46}, - &versionInfo{28, Q, 30, 4, 24, 31, 25}, - &versionInfo{28, H, 30, 11, 15, 31, 16}, - &versionInfo{29, L, 30, 7, 116, 7, 117}, - &versionInfo{29, M, 28, 21, 45, 7, 46}, - &versionInfo{29, Q, 30, 1, 23, 37, 24}, - &versionInfo{29, H, 30, 19, 15, 26, 16}, - &versionInfo{30, L, 30, 5, 115, 10, 116}, - &versionInfo{30, M, 28, 19, 47, 10, 48}, - &versionInfo{30, Q, 30, 15, 24, 25, 25}, - &versionInfo{30, H, 30, 23, 15, 25, 16}, - &versionInfo{31, L, 30, 13, 115, 3, 116}, - &versionInfo{31, M, 28, 2, 46, 29, 47}, - &versionInfo{31, Q, 30, 42, 24, 1, 25}, - &versionInfo{31, H, 30, 23, 15, 28, 16}, - &versionInfo{32, L, 30, 17, 115, 0, 0}, - &versionInfo{32, M, 28, 10, 46, 23, 47}, - &versionInfo{32, Q, 30, 10, 24, 35, 25}, - &versionInfo{32, H, 30, 19, 15, 35, 16}, - &versionInfo{33, L, 30, 17, 115, 1, 116}, - &versionInfo{33, M, 28, 14, 46, 21, 47}, - &versionInfo{33, Q, 30, 29, 24, 19, 25}, - &versionInfo{33, H, 30, 11, 15, 46, 16}, - &versionInfo{34, L, 30, 13, 115, 6, 116}, - &versionInfo{34, M, 28, 14, 46, 23, 47}, - &versionInfo{34, Q, 30, 44, 24, 7, 25}, - &versionInfo{34, H, 30, 59, 16, 1, 17}, - &versionInfo{35, L, 30, 12, 121, 7, 122}, - &versionInfo{35, M, 28, 12, 47, 26, 48}, - &versionInfo{35, Q, 30, 39, 24, 14, 25}, - &versionInfo{35, H, 30, 22, 15, 41, 16}, - &versionInfo{36, L, 30, 6, 121, 14, 122}, - &versionInfo{36, M, 28, 6, 47, 34, 48}, - &versionInfo{36, Q, 30, 46, 24, 10, 25}, - &versionInfo{36, H, 30, 2, 15, 64, 16}, - &versionInfo{37, L, 30, 17, 122, 4, 123}, - &versionInfo{37, M, 28, 29, 46, 14, 47}, - &versionInfo{37, Q, 30, 49, 24, 10, 25}, - &versionInfo{37, H, 30, 24, 15, 46, 16}, - &versionInfo{38, L, 30, 4, 122, 18, 123}, - &versionInfo{38, M, 28, 13, 46, 32, 47}, - &versionInfo{38, Q, 30, 48, 24, 14, 25}, - &versionInfo{38, H, 30, 42, 15, 32, 16}, - &versionInfo{39, L, 30, 20, 117, 4, 118}, - &versionInfo{39, M, 28, 40, 47, 7, 48}, - &versionInfo{39, Q, 30, 43, 24, 22, 25}, - &versionInfo{39, H, 30, 10, 15, 67, 16}, - &versionInfo{40, L, 30, 19, 118, 6, 119}, - &versionInfo{40, M, 28, 18, 47, 31, 48}, - &versionInfo{40, Q, 30, 34, 24, 34, 25}, - &versionInfo{40, H, 30, 20, 15, 61, 16}, -} - -func (vi *versionInfo) totalDataBytes() int { - g1Data := int(vi.NumberOfBlocksInGroup1) * int(vi.DataCodeWordsPerBlockInGroup1) - g2Data := int(vi.NumberOfBlocksInGroup2) * int(vi.DataCodeWordsPerBlockInGroup2) - return (g1Data + g2Data) -} - -func (vi *versionInfo) charCountBits(m encodingMode) byte { - switch m { - case numericMode: - if vi.Version < 10 { - return 10 - } else if vi.Version < 27 { - return 12 - } - return 14 - - case alphaNumericMode: - if vi.Version < 10 { - return 9 - } else if vi.Version < 27 { - return 11 - } - return 13 - - case byteMode: - if vi.Version < 10 { - return 8 - } - return 16 - - case kanjiMode: - if vi.Version < 10 { - return 8 - } else if vi.Version < 27 { - return 10 - } - return 12 - default: - return 0 - } -} - -func (vi *versionInfo) modulWidth() int { - return ((int(vi.Version) - 1) * 4) + 21 -} - -func (vi *versionInfo) alignmentPatternPlacements() []int { - if vi.Version == 1 { - return make([]int, 0) - } - - first := 6 - last := vi.modulWidth() - 7 - space := float64(last - first) - count := int(math.Ceil(space/28)) + 1 - - result := make([]int, count) - result[0] = first - result[len(result)-1] = last - if count > 2 { - step := int(math.Ceil(float64(last-first) / float64(count-1))) - if step%2 == 1 { - frac := float64(last-first) / float64(count-1) - _, x := math.Modf(frac) - if x >= 0.5 { - frac = math.Ceil(frac) - } else { - frac = math.Floor(frac) - } - - if int(frac)%2 == 0 { - step-- - } else { - step++ - } - } - - for i := 1; i <= count-2; i++ { - result[i] = last - (step * (count - 1 - i)) - } - } - - return result -} - -func findSmallestVersionInfo(ecl ErrorCorrectionLevel, mode encodingMode, dataBits int) *versionInfo { - dataBits = dataBits + 4 // mode indicator - for _, vi := range versionInfos { - if vi.Level == ecl { - if (vi.totalDataBytes() * 8) >= (dataBits + int(vi.charCountBits(mode))) { - return vi - } - } - } - return nil -} diff --git a/vendor/github.com/boombuler/barcode/scaledbarcode.go b/vendor/github.com/boombuler/barcode/scaledbarcode.go deleted file mode 100644 index 152b18017..000000000 --- a/vendor/github.com/boombuler/barcode/scaledbarcode.go +++ /dev/null @@ -1,134 +0,0 @@ -package barcode - -import ( - "errors" - "fmt" - "image" - "image/color" - "math" -) - -type wrapFunc func(x, y int) color.Color - -type scaledBarcode struct { - wrapped Barcode - wrapperFunc wrapFunc - rect image.Rectangle -} - -type intCSscaledBC struct { - scaledBarcode -} - -func (bc *scaledBarcode) Content() string { - return bc.wrapped.Content() -} - -func (bc *scaledBarcode) Metadata() Metadata { - return bc.wrapped.Metadata() -} - -func (bc *scaledBarcode) ColorModel() color.Model { - return bc.wrapped.ColorModel() -} - -func (bc *scaledBarcode) Bounds() image.Rectangle { - return bc.rect -} - -func (bc *scaledBarcode) At(x, y int) color.Color { - return bc.wrapperFunc(x, y) -} - -func (bc *intCSscaledBC) CheckSum() int { - if cs, ok := bc.wrapped.(BarcodeIntCS); ok { - return cs.CheckSum() - } - return 0 -} - -// Scale returns a resized barcode with the given width and height. -func Scale(bc Barcode, width, height int) (Barcode, error) { - switch bc.Metadata().Dimensions { - case 1: - return scale1DCode(bc, width, height) - case 2: - return scale2DCode(bc, width, height) - } - - return nil, errors.New("unsupported barcode format") -} - -func newScaledBC(wrapped Barcode, wrapperFunc wrapFunc, rect image.Rectangle) Barcode { - result := &scaledBarcode{ - wrapped: wrapped, - wrapperFunc: wrapperFunc, - rect: rect, - } - - if _, ok := wrapped.(BarcodeIntCS); ok { - return &intCSscaledBC{*result} - } - return result -} - -func scale2DCode(bc Barcode, width, height int) (Barcode, error) { - orgBounds := bc.Bounds() - orgWidth := orgBounds.Max.X - orgBounds.Min.X - orgHeight := orgBounds.Max.Y - orgBounds.Min.Y - - factor := int(math.Min(float64(width)/float64(orgWidth), float64(height)/float64(orgHeight))) - if factor <= 0 { - return nil, fmt.Errorf("can not scale barcode to an image smaller than %dx%d", orgWidth, orgHeight) - } - - offsetX := (width - (orgWidth * factor)) / 2 - offsetY := (height - (orgHeight * factor)) / 2 - - wrap := func(x, y int) color.Color { - if x < offsetX || y < offsetY { - return color.White - } - x = (x - offsetX) / factor - y = (y - offsetY) / factor - if x >= orgWidth || y >= orgHeight { - return color.White - } - return bc.At(x, y) - } - - return newScaledBC( - bc, - wrap, - image.Rect(0, 0, width, height), - ), nil -} - -func scale1DCode(bc Barcode, width, height int) (Barcode, error) { - orgBounds := bc.Bounds() - orgWidth := orgBounds.Max.X - orgBounds.Min.X - factor := int(float64(width) / float64(orgWidth)) - - if factor <= 0 { - return nil, fmt.Errorf("can not scale barcode to an image smaller than %dx1", orgWidth) - } - offsetX := (width - (orgWidth * factor)) / 2 - - wrap := func(x, y int) color.Color { - if x < offsetX { - return color.White - } - x = (x - offsetX) / factor - - if x >= orgWidth { - return color.White - } - return bc.At(x, 0) - } - - return newScaledBC( - bc, - wrap, - image.Rect(0, 0, width, height), - ), nil -} diff --git a/vendor/github.com/boombuler/barcode/utils/base1dcode.go b/vendor/github.com/boombuler/barcode/utils/base1dcode.go deleted file mode 100644 index 75e50048c..000000000 --- a/vendor/github.com/boombuler/barcode/utils/base1dcode.go +++ /dev/null @@ -1,57 +0,0 @@ -// Package utils contain some utilities which are needed to create barcodes -package utils - -import ( - "image" - "image/color" - - "github.com/boombuler/barcode" -) - -type base1DCode struct { - *BitList - kind string - content string -} - -type base1DCodeIntCS struct { - base1DCode - checksum int -} - -func (c *base1DCode) Content() string { - return c.content -} - -func (c *base1DCode) Metadata() barcode.Metadata { - return barcode.Metadata{c.kind, 1} -} - -func (c *base1DCode) ColorModel() color.Model { - return color.Gray16Model -} - -func (c *base1DCode) Bounds() image.Rectangle { - return image.Rect(0, 0, c.Len(), 1) -} - -func (c *base1DCode) At(x, y int) color.Color { - if c.GetBit(x) { - return color.Black - } - return color.White -} - -func (c *base1DCodeIntCS) CheckSum() int { - return c.checksum -} - -// New1DCode creates a new 1D barcode where the bars are represented by the bits in the bars BitList -func New1DCodeIntCheckSum(codeKind, content string, bars *BitList, checksum int) barcode.BarcodeIntCS { - return &base1DCodeIntCS{base1DCode{bars, codeKind, content}, checksum} -} - -// New1DCode creates a new 1D barcode where the bars are represented by the bits in the bars BitList -func New1DCode(codeKind, content string, bars *BitList) barcode.Barcode { - return &base1DCode{bars, codeKind, content} -} diff --git a/vendor/github.com/boombuler/barcode/utils/bitlist.go b/vendor/github.com/boombuler/barcode/utils/bitlist.go deleted file mode 100644 index bb05e53b5..000000000 --- a/vendor/github.com/boombuler/barcode/utils/bitlist.go +++ /dev/null @@ -1,119 +0,0 @@ -package utils - -// BitList is a list that contains bits -type BitList struct { - count int - data []int32 -} - -// NewBitList returns a new BitList with the given length -// all bits are initialize with false -func NewBitList(capacity int) *BitList { - bl := new(BitList) - bl.count = capacity - x := 0 - if capacity%32 != 0 { - x = 1 - } - bl.data = make([]int32, capacity/32+x) - return bl -} - -// Len returns the number of contained bits -func (bl *BitList) Len() int { - return bl.count -} - -func (bl *BitList) grow() { - growBy := len(bl.data) - if growBy < 128 { - growBy = 128 - } else if growBy >= 1024 { - growBy = 1024 - } - - nd := make([]int32, len(bl.data)+growBy) - copy(nd, bl.data) - bl.data = nd -} - -// AddBit appends the given bits to the end of the list -func (bl *BitList) AddBit(bits ...bool) { - for _, bit := range bits { - itmIndex := bl.count / 32 - for itmIndex >= len(bl.data) { - bl.grow() - } - bl.SetBit(bl.count, bit) - bl.count++ - } -} - -// SetBit sets the bit at the given index to the given value -func (bl *BitList) SetBit(index int, value bool) { - itmIndex := index / 32 - itmBitShift := 31 - (index % 32) - if value { - bl.data[itmIndex] = bl.data[itmIndex] | 1<> uint(itmBitShift)) & 1) == 1 -} - -// AddByte appends all 8 bits of the given byte to the end of the list -func (bl *BitList) AddByte(b byte) { - for i := 7; i >= 0; i-- { - bl.AddBit(((b >> uint(i)) & 1) == 1) - } -} - -// AddBits appends the last (LSB) 'count' bits of 'b' the the end of the list -func (bl *BitList) AddBits(b int, count byte) { - for i := int(count) - 1; i >= 0; i-- { - bl.AddBit(((b >> uint(i)) & 1) == 1) - } -} - -// GetBytes returns all bits of the BitList as a []byte -func (bl *BitList) GetBytes() []byte { - len := bl.count >> 3 - if (bl.count % 8) != 0 { - len++ - } - result := make([]byte, len) - for i := 0; i < len; i++ { - shift := (3 - (i % 4)) * 8 - result[i] = (byte)((bl.data[i/4] >> uint(shift)) & 0xFF) - } - return result -} - -// IterateBytes iterates through all bytes contained in the BitList -func (bl *BitList) IterateBytes() <-chan byte { - res := make(chan byte) - - go func() { - c := bl.count - shift := 24 - i := 0 - for c > 0 { - res <- byte((bl.data[i] >> uint(shift)) & 0xFF) - shift -= 8 - if shift < 0 { - shift = 24 - i++ - } - c -= 8 - } - close(res) - }() - - return res -} diff --git a/vendor/github.com/boombuler/barcode/utils/galoisfield.go b/vendor/github.com/boombuler/barcode/utils/galoisfield.go deleted file mode 100644 index 68726fbfd..000000000 --- a/vendor/github.com/boombuler/barcode/utils/galoisfield.go +++ /dev/null @@ -1,65 +0,0 @@ -package utils - -// GaloisField encapsulates galois field arithmetics -type GaloisField struct { - Size int - Base int - ALogTbl []int - LogTbl []int -} - -// NewGaloisField creates a new galois field -func NewGaloisField(pp, fieldSize, b int) *GaloisField { - result := new(GaloisField) - - result.Size = fieldSize - result.Base = b - result.ALogTbl = make([]int, fieldSize) - result.LogTbl = make([]int, fieldSize) - - x := 1 - for i := 0; i < fieldSize; i++ { - result.ALogTbl[i] = x - x = x * 2 - if x >= fieldSize { - x = (x ^ pp) & (fieldSize - 1) - } - } - - for i := 0; i < fieldSize; i++ { - result.LogTbl[result.ALogTbl[i]] = int(i) - } - - return result -} - -func (gf *GaloisField) Zero() *GFPoly { - return NewGFPoly(gf, []int{0}) -} - -// AddOrSub add or substract two numbers -func (gf *GaloisField) AddOrSub(a, b int) int { - return a ^ b -} - -// Multiply multiplys two numbers -func (gf *GaloisField) Multiply(a, b int) int { - if a == 0 || b == 0 { - return 0 - } - return gf.ALogTbl[(gf.LogTbl[a]+gf.LogTbl[b])%(gf.Size-1)] -} - -// Divide divides two numbers -func (gf *GaloisField) Divide(a, b int) int { - if b == 0 { - panic("divide by zero") - } else if a == 0 { - return 0 - } - return gf.ALogTbl[(gf.LogTbl[a]-gf.LogTbl[b])%(gf.Size-1)] -} - -func (gf *GaloisField) Invers(num int) int { - return gf.ALogTbl[(gf.Size-1)-gf.LogTbl[num]] -} diff --git a/vendor/github.com/boombuler/barcode/utils/gfpoly.go b/vendor/github.com/boombuler/barcode/utils/gfpoly.go deleted file mode 100644 index c56bb40b9..000000000 --- a/vendor/github.com/boombuler/barcode/utils/gfpoly.go +++ /dev/null @@ -1,103 +0,0 @@ -package utils - -type GFPoly struct { - gf *GaloisField - Coefficients []int -} - -func (gp *GFPoly) Degree() int { - return len(gp.Coefficients) - 1 -} - -func (gp *GFPoly) Zero() bool { - return gp.Coefficients[0] == 0 -} - -// GetCoefficient returns the coefficient of x ^ degree -func (gp *GFPoly) GetCoefficient(degree int) int { - return gp.Coefficients[gp.Degree()-degree] -} - -func (gp *GFPoly) AddOrSubstract(other *GFPoly) *GFPoly { - if gp.Zero() { - return other - } else if other.Zero() { - return gp - } - smallCoeff := gp.Coefficients - largeCoeff := other.Coefficients - if len(smallCoeff) > len(largeCoeff) { - largeCoeff, smallCoeff = smallCoeff, largeCoeff - } - sumDiff := make([]int, len(largeCoeff)) - lenDiff := len(largeCoeff) - len(smallCoeff) - copy(sumDiff, largeCoeff[:lenDiff]) - for i := lenDiff; i < len(largeCoeff); i++ { - sumDiff[i] = int(gp.gf.AddOrSub(int(smallCoeff[i-lenDiff]), int(largeCoeff[i]))) - } - return NewGFPoly(gp.gf, sumDiff) -} - -func (gp *GFPoly) MultByMonominal(degree int, coeff int) *GFPoly { - if coeff == 0 { - return gp.gf.Zero() - } - size := len(gp.Coefficients) - result := make([]int, size+degree) - for i := 0; i < size; i++ { - result[i] = int(gp.gf.Multiply(int(gp.Coefficients[i]), int(coeff))) - } - return NewGFPoly(gp.gf, result) -} - -func (gp *GFPoly) Multiply(other *GFPoly) *GFPoly { - if gp.Zero() || other.Zero() { - return gp.gf.Zero() - } - aCoeff := gp.Coefficients - aLen := len(aCoeff) - bCoeff := other.Coefficients - bLen := len(bCoeff) - product := make([]int, aLen+bLen-1) - for i := 0; i < aLen; i++ { - ac := int(aCoeff[i]) - for j := 0; j < bLen; j++ { - bc := int(bCoeff[j]) - product[i+j] = int(gp.gf.AddOrSub(int(product[i+j]), gp.gf.Multiply(ac, bc))) - } - } - return NewGFPoly(gp.gf, product) -} - -func (gp *GFPoly) Divide(other *GFPoly) (quotient *GFPoly, remainder *GFPoly) { - quotient = gp.gf.Zero() - remainder = gp - fld := gp.gf - denomLeadTerm := other.GetCoefficient(other.Degree()) - inversDenomLeadTerm := fld.Invers(int(denomLeadTerm)) - for remainder.Degree() >= other.Degree() && !remainder.Zero() { - degreeDiff := remainder.Degree() - other.Degree() - scale := int(fld.Multiply(int(remainder.GetCoefficient(remainder.Degree())), inversDenomLeadTerm)) - term := other.MultByMonominal(degreeDiff, scale) - itQuot := NewMonominalPoly(fld, degreeDiff, scale) - quotient = quotient.AddOrSubstract(itQuot) - remainder = remainder.AddOrSubstract(term) - } - return -} - -func NewMonominalPoly(field *GaloisField, degree int, coeff int) *GFPoly { - if coeff == 0 { - return field.Zero() - } - result := make([]int, degree+1) - result[0] = coeff - return NewGFPoly(field, result) -} - -func NewGFPoly(field *GaloisField, coefficients []int) *GFPoly { - for len(coefficients) > 1 && coefficients[0] == 0 { - coefficients = coefficients[1:] - } - return &GFPoly{field, coefficients} -} diff --git a/vendor/github.com/boombuler/barcode/utils/reedsolomon.go b/vendor/github.com/boombuler/barcode/utils/reedsolomon.go deleted file mode 100644 index 53af91ad4..000000000 --- a/vendor/github.com/boombuler/barcode/utils/reedsolomon.go +++ /dev/null @@ -1,44 +0,0 @@ -package utils - -import ( - "sync" -) - -type ReedSolomonEncoder struct { - gf *GaloisField - polynomes []*GFPoly - m *sync.Mutex -} - -func NewReedSolomonEncoder(gf *GaloisField) *ReedSolomonEncoder { - return &ReedSolomonEncoder{ - gf, []*GFPoly{NewGFPoly(gf, []int{1})}, new(sync.Mutex), - } -} - -func (rs *ReedSolomonEncoder) getPolynomial(degree int) *GFPoly { - rs.m.Lock() - defer rs.m.Unlock() - - if degree >= len(rs.polynomes) { - last := rs.polynomes[len(rs.polynomes)-1] - for d := len(rs.polynomes); d <= degree; d++ { - next := last.Multiply(NewGFPoly(rs.gf, []int{1, rs.gf.ALogTbl[d-1+rs.gf.Base]})) - rs.polynomes = append(rs.polynomes, next) - last = next - } - } - return rs.polynomes[degree] -} - -func (rs *ReedSolomonEncoder) Encode(data []int, eccCount int) []int { - generator := rs.getPolynomial(eccCount) - info := NewGFPoly(rs.gf, data) - info = info.MultByMonominal(eccCount, 1) - _, remainder := info.Divide(generator) - - result := make([]int, eccCount) - numZero := int(eccCount) - len(remainder.Coefficients) - copy(result[numZero:], remainder.Coefficients) - return result -} diff --git a/vendor/github.com/boombuler/barcode/utils/runeint.go b/vendor/github.com/boombuler/barcode/utils/runeint.go deleted file mode 100644 index d2e5e61e5..000000000 --- a/vendor/github.com/boombuler/barcode/utils/runeint.go +++ /dev/null @@ -1,19 +0,0 @@ -package utils - -// RuneToInt converts a rune between '0' and '9' to an integer between 0 and 9 -// If the rune is outside of this range -1 is returned. -func RuneToInt(r rune) int { - if r >= '0' && r <= '9' { - return int(r - '0') - } - return -1 -} - -// IntToRune converts a digit 0 - 9 to the rune '0' - '9'. If the given int is outside -// of this range 'F' is returned! -func IntToRune(i int) rune { - if i >= 0 && i <= 9 { - return rune(i + '0') - } - return 'F' -} diff --git a/vendor/github.com/bradfitz/gomemcache/LICENSE b/vendor/github.com/bradfitz/gomemcache/LICENSE deleted file mode 100644 index d64569567..000000000 --- a/vendor/github.com/bradfitz/gomemcache/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - 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/bradfitz/gomemcache/memcache/memcache.go b/vendor/github.com/bradfitz/gomemcache/memcache/memcache.go deleted file mode 100644 index 7b5442d73..000000000 --- a/vendor/github.com/bradfitz/gomemcache/memcache/memcache.go +++ /dev/null @@ -1,666 +0,0 @@ -/* -Copyright 2011 Google Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package memcache provides a client for the memcached cache server. -package memcache - -import ( - "bufio" - "bytes" - "errors" - "fmt" - "io" - "io/ioutil" - "net" - - "strconv" - "strings" - "sync" - "time" -) - -// Similar to: -// http://code.google.com/appengine/docs/go/memcache/reference.html - -var ( - // ErrCacheMiss means that a Get failed because the item wasn't present. - ErrCacheMiss = errors.New("memcache: cache miss") - - // ErrCASConflict means that a CompareAndSwap call failed due to the - // cached value being modified between the Get and the CompareAndSwap. - // If the cached value was simply evicted rather than replaced, - // ErrNotStored will be returned instead. - ErrCASConflict = errors.New("memcache: compare-and-swap conflict") - - // ErrNotStored means that a conditional write operation (i.e. Add or - // CompareAndSwap) failed because the condition was not satisfied. - ErrNotStored = errors.New("memcache: item not stored") - - // ErrServer means that a server error occurred. - ErrServerError = errors.New("memcache: server error") - - // ErrNoStats means that no statistics were available. - ErrNoStats = errors.New("memcache: no statistics available") - - // ErrMalformedKey is returned when an invalid key is used. - // Keys must be at maximum 250 bytes long, ASCII, and not - // contain whitespace or control characters. - ErrMalformedKey = errors.New("malformed: key is too long or contains invalid characters") - - // ErrNoServers is returned when no servers are configured or available. - ErrNoServers = errors.New("memcache: no servers configured or available") -) - -// DefaultTimeout is the default socket read/write timeout. -const DefaultTimeout = 100 * time.Millisecond - -const ( - buffered = 8 // arbitrary buffered channel size, for readability - maxIdleConnsPerAddr = 2 // TODO(bradfitz): make this configurable? -) - -// resumableError returns true if err is only a protocol-level cache error. -// This is used to determine whether or not a server connection should -// be re-used or not. If an error occurs, by default we don't reuse the -// connection, unless it was just a cache error. -func resumableError(err error) bool { - switch err { - case ErrCacheMiss, ErrCASConflict, ErrNotStored, ErrMalformedKey: - return true - } - return false -} - -func legalKey(key string) bool { - if len(key) > 250 { - return false - } - for i := 0; i < len(key); i++ { - if key[i] <= ' ' || key[i] > 0x7e { - return false - } - } - return true -} - -var ( - crlf = []byte("\r\n") - space = []byte(" ") - resultOK = []byte("OK\r\n") - resultStored = []byte("STORED\r\n") - resultNotStored = []byte("NOT_STORED\r\n") - resultExists = []byte("EXISTS\r\n") - resultNotFound = []byte("NOT_FOUND\r\n") - resultDeleted = []byte("DELETED\r\n") - resultEnd = []byte("END\r\n") - resultOk = []byte("OK\r\n") - resultTouched = []byte("TOUCHED\r\n") - - resultClientErrorPrefix = []byte("CLIENT_ERROR ") -) - -// New returns a memcache client using the provided server(s) -// with equal weight. If a server is listed multiple times, -// it gets a proportional amount of weight. -func New(server ...string) *Client { - ss := new(ServerList) - ss.SetServers(server...) - return NewFromSelector(ss) -} - -// NewFromSelector returns a new Client using the provided ServerSelector. -func NewFromSelector(ss ServerSelector) *Client { - return &Client{selector: ss} -} - -// Client is a memcache client. -// It is safe for unlocked use by multiple concurrent goroutines. -type Client struct { - // Timeout specifies the socket read/write timeout. - // If zero, DefaultTimeout is used. - Timeout time.Duration - - selector ServerSelector - - lk sync.Mutex - freeconn map[string][]*conn -} - -// Item is an item to be got or stored in a memcached server. -type Item struct { - // Key is the Item's key (250 bytes maximum). - Key string - - // Value is the Item's value. - Value []byte - - // Flags are server-opaque flags whose semantics are entirely - // up to the app. - Flags uint32 - - // Expiration is the cache expiration time, in seconds: either a relative - // time from now (up to 1 month), or an absolute Unix epoch time. - // Zero means the Item has no expiration time. - Expiration int32 - - // Compare and swap ID. - casid uint64 -} - -// conn is a connection to a server. -type conn struct { - nc net.Conn - rw *bufio.ReadWriter - addr net.Addr - c *Client -} - -// release returns this connection back to the client's free pool -func (cn *conn) release() { - cn.c.putFreeConn(cn.addr, cn) -} - -func (cn *conn) extendDeadline() { - cn.nc.SetDeadline(time.Now().Add(cn.c.netTimeout())) -} - -// condRelease releases this connection if the error pointed to by err -// is nil (not an error) or is only a protocol level error (e.g. a -// cache miss). The purpose is to not recycle TCP connections that -// are bad. -func (cn *conn) condRelease(err *error) { - if *err == nil || resumableError(*err) { - cn.release() - } else { - cn.nc.Close() - } -} - -func (c *Client) putFreeConn(addr net.Addr, cn *conn) { - c.lk.Lock() - defer c.lk.Unlock() - if c.freeconn == nil { - c.freeconn = make(map[string][]*conn) - } - freelist := c.freeconn[addr.String()] - if len(freelist) >= maxIdleConnsPerAddr { - cn.nc.Close() - return - } - c.freeconn[addr.String()] = append(freelist, cn) -} - -func (c *Client) getFreeConn(addr net.Addr) (cn *conn, ok bool) { - c.lk.Lock() - defer c.lk.Unlock() - if c.freeconn == nil { - return nil, false - } - freelist, ok := c.freeconn[addr.String()] - if !ok || len(freelist) == 0 { - return nil, false - } - cn = freelist[len(freelist)-1] - c.freeconn[addr.String()] = freelist[:len(freelist)-1] - return cn, true -} - -func (c *Client) netTimeout() time.Duration { - if c.Timeout != 0 { - return c.Timeout - } - return DefaultTimeout -} - -// ConnectTimeoutError is the error type used when it takes -// too long to connect to the desired host. This level of -// detail can generally be ignored. -type ConnectTimeoutError struct { - Addr net.Addr -} - -func (cte *ConnectTimeoutError) Error() string { - return "memcache: connect timeout to " + cte.Addr.String() -} - -func (c *Client) dial(addr net.Addr) (net.Conn, error) { - type connError struct { - cn net.Conn - err error - } - - nc, err := net.DialTimeout(addr.Network(), addr.String(), c.netTimeout()) - if err == nil { - return nc, nil - } - - if ne, ok := err.(net.Error); ok && ne.Timeout() { - return nil, &ConnectTimeoutError{addr} - } - - return nil, err -} - -func (c *Client) getConn(addr net.Addr) (*conn, error) { - cn, ok := c.getFreeConn(addr) - if ok { - cn.extendDeadline() - return cn, nil - } - nc, err := c.dial(addr) - if err != nil { - return nil, err - } - cn = &conn{ - nc: nc, - addr: addr, - rw: bufio.NewReadWriter(bufio.NewReader(nc), bufio.NewWriter(nc)), - c: c, - } - cn.extendDeadline() - return cn, nil -} - -func (c *Client) onItem(item *Item, fn func(*Client, *bufio.ReadWriter, *Item) error) error { - addr, err := c.selector.PickServer(item.Key) - if err != nil { - return err - } - cn, err := c.getConn(addr) - if err != nil { - return err - } - defer cn.condRelease(&err) - if err = fn(c, cn.rw, item); err != nil { - return err - } - return nil -} - -func (c *Client) FlushAll() error { - return c.selector.Each(c.flushAllFromAddr) -} - -// Get gets the item for the given key. ErrCacheMiss is returned for a -// memcache cache miss. The key must be at most 250 bytes in length. -func (c *Client) Get(key string) (item *Item, err error) { - err = c.withKeyAddr(key, func(addr net.Addr) error { - return c.getFromAddr(addr, []string{key}, func(it *Item) { item = it }) - }) - if err == nil && item == nil { - err = ErrCacheMiss - } - return -} - -// Touch updates the expiry for the given key. The seconds parameter is either -// a Unix timestamp or, if seconds is less than 1 month, the number of seconds -// into the future at which time the item will expire. ErrCacheMiss is returned if the -// key is not in the cache. The key must be at most 250 bytes in length. -func (c *Client) Touch(key string, seconds int32) (err error) { - return c.withKeyAddr(key, func(addr net.Addr) error { - return c.touchFromAddr(addr, []string{key}, seconds) - }) -} - -func (c *Client) withKeyAddr(key string, fn func(net.Addr) error) (err error) { - if !legalKey(key) { - return ErrMalformedKey - } - addr, err := c.selector.PickServer(key) - if err != nil { - return err - } - return fn(addr) -} - -func (c *Client) withAddrRw(addr net.Addr, fn func(*bufio.ReadWriter) error) (err error) { - cn, err := c.getConn(addr) - if err != nil { - return err - } - defer cn.condRelease(&err) - return fn(cn.rw) -} - -func (c *Client) withKeyRw(key string, fn func(*bufio.ReadWriter) error) error { - return c.withKeyAddr(key, func(addr net.Addr) error { - return c.withAddrRw(addr, fn) - }) -} - -func (c *Client) getFromAddr(addr net.Addr, keys []string, cb func(*Item)) error { - return c.withAddrRw(addr, func(rw *bufio.ReadWriter) error { - if _, err := fmt.Fprintf(rw, "gets %s\r\n", strings.Join(keys, " ")); err != nil { - return err - } - if err := rw.Flush(); err != nil { - return err - } - if err := parseGetResponse(rw.Reader, cb); err != nil { - return err - } - return nil - }) -} - -// flushAllFromAddr send the flush_all command to the given addr -func (c *Client) flushAllFromAddr(addr net.Addr) error { - return c.withAddrRw(addr, func(rw *bufio.ReadWriter) error { - if _, err := fmt.Fprintf(rw, "flush_all\r\n"); err != nil { - return err - } - if err := rw.Flush(); err != nil { - return err - } - line, err := rw.ReadSlice('\n') - if err != nil { - return err - } - switch { - case bytes.Equal(line, resultOk): - break - default: - return fmt.Errorf("memcache: unexpected response line from flush_all: %q", string(line)) - } - return nil - }) -} - -func (c *Client) touchFromAddr(addr net.Addr, keys []string, expiration int32) error { - return c.withAddrRw(addr, func(rw *bufio.ReadWriter) error { - for _, key := range keys { - if _, err := fmt.Fprintf(rw, "touch %s %d\r\n", key, expiration); err != nil { - return err - } - if err := rw.Flush(); err != nil { - return err - } - line, err := rw.ReadSlice('\n') - if err != nil { - return err - } - switch { - case bytes.Equal(line, resultTouched): - break - case bytes.Equal(line, resultNotFound): - return ErrCacheMiss - default: - return fmt.Errorf("memcache: unexpected response line from touch: %q", string(line)) - } - } - return nil - }) -} - -// GetMulti is a batch version of Get. The returned map from keys to -// items may have fewer elements than the input slice, due to memcache -// cache misses. Each key must be at most 250 bytes in length. -// If no error is returned, the returned map will also be non-nil. -func (c *Client) GetMulti(keys []string) (map[string]*Item, error) { - var lk sync.Mutex - m := make(map[string]*Item) - addItemToMap := func(it *Item) { - lk.Lock() - defer lk.Unlock() - m[it.Key] = it - } - - keyMap := make(map[net.Addr][]string) - for _, key := range keys { - if !legalKey(key) { - return nil, ErrMalformedKey - } - addr, err := c.selector.PickServer(key) - if err != nil { - return nil, err - } - keyMap[addr] = append(keyMap[addr], key) - } - - ch := make(chan error, buffered) - for addr, keys := range keyMap { - go func(addr net.Addr, keys []string) { - ch <- c.getFromAddr(addr, keys, addItemToMap) - }(addr, keys) - } - - var err error - for _ = range keyMap { - if ge := <-ch; ge != nil { - err = ge - } - } - return m, err -} - -// parseGetResponse reads a GET response from r and calls cb for each -// read and allocated Item -func parseGetResponse(r *bufio.Reader, cb func(*Item)) error { - for { - line, err := r.ReadSlice('\n') - if err != nil { - return err - } - if bytes.Equal(line, resultEnd) { - return nil - } - it := new(Item) - size, err := scanGetResponseLine(line, it) - if err != nil { - return err - } - it.Value, err = ioutil.ReadAll(io.LimitReader(r, int64(size)+2)) - if err != nil { - return err - } - if !bytes.HasSuffix(it.Value, crlf) { - return fmt.Errorf("memcache: corrupt get result read") - } - it.Value = it.Value[:size] - cb(it) - } -} - -// scanGetResponseLine populates it and returns the declared size of the item. -// It does not read the bytes of the item. -func scanGetResponseLine(line []byte, it *Item) (size int, err error) { - pattern := "VALUE %s %d %d %d\r\n" - dest := []interface{}{&it.Key, &it.Flags, &size, &it.casid} - if bytes.Count(line, space) == 3 { - pattern = "VALUE %s %d %d\r\n" - dest = dest[:3] - } - n, err := fmt.Sscanf(string(line), pattern, dest...) - if err != nil || n != len(dest) { - return -1, fmt.Errorf("memcache: unexpected line in get response: %q", line) - } - return size, nil -} - -// Set writes the given item, unconditionally. -func (c *Client) Set(item *Item) error { - return c.onItem(item, (*Client).set) -} - -func (c *Client) set(rw *bufio.ReadWriter, item *Item) error { - return c.populateOne(rw, "set", item) -} - -// Add writes the given item, if no value already exists for its -// key. ErrNotStored is returned if that condition is not met. -func (c *Client) Add(item *Item) error { - return c.onItem(item, (*Client).add) -} - -func (c *Client) add(rw *bufio.ReadWriter, item *Item) error { - return c.populateOne(rw, "add", item) -} - -// Replace writes the given item, but only if the server *does* -// already hold data for this key -func (c *Client) Replace(item *Item) error { - return c.onItem(item, (*Client).replace) -} - -func (c *Client) replace(rw *bufio.ReadWriter, item *Item) error { - return c.populateOne(rw, "replace", item) -} - -// CompareAndSwap writes the given item that was previously returned -// by Get, if the value was neither modified or evicted between the -// Get and the CompareAndSwap calls. The item's Key should not change -// between calls but all other item fields may differ. ErrCASConflict -// is returned if the value was modified in between the -// calls. ErrNotStored is returned if the value was evicted in between -// the calls. -func (c *Client) CompareAndSwap(item *Item) error { - return c.onItem(item, (*Client).cas) -} - -func (c *Client) cas(rw *bufio.ReadWriter, item *Item) error { - return c.populateOne(rw, "cas", item) -} - -func (c *Client) populateOne(rw *bufio.ReadWriter, verb string, item *Item) error { - if !legalKey(item.Key) { - return ErrMalformedKey - } - var err error - if verb == "cas" { - _, err = fmt.Fprintf(rw, "%s %s %d %d %d %d\r\n", - verb, item.Key, item.Flags, item.Expiration, len(item.Value), item.casid) - } else { - _, err = fmt.Fprintf(rw, "%s %s %d %d %d\r\n", - verb, item.Key, item.Flags, item.Expiration, len(item.Value)) - } - if err != nil { - return err - } - if _, err = rw.Write(item.Value); err != nil { - return err - } - if _, err := rw.Write(crlf); err != nil { - return err - } - if err := rw.Flush(); err != nil { - return err - } - line, err := rw.ReadSlice('\n') - if err != nil { - return err - } - switch { - case bytes.Equal(line, resultStored): - return nil - case bytes.Equal(line, resultNotStored): - return ErrNotStored - case bytes.Equal(line, resultExists): - return ErrCASConflict - case bytes.Equal(line, resultNotFound): - return ErrCacheMiss - } - return fmt.Errorf("memcache: unexpected response line from %q: %q", verb, string(line)) -} - -func writeReadLine(rw *bufio.ReadWriter, format string, args ...interface{}) ([]byte, error) { - _, err := fmt.Fprintf(rw, format, args...) - if err != nil { - return nil, err - } - if err := rw.Flush(); err != nil { - return nil, err - } - line, err := rw.ReadSlice('\n') - return line, err -} - -func writeExpectf(rw *bufio.ReadWriter, expect []byte, format string, args ...interface{}) error { - line, err := writeReadLine(rw, format, args...) - if err != nil { - return err - } - switch { - case bytes.Equal(line, resultOK): - return nil - case bytes.Equal(line, expect): - return nil - case bytes.Equal(line, resultNotStored): - return ErrNotStored - case bytes.Equal(line, resultExists): - return ErrCASConflict - case bytes.Equal(line, resultNotFound): - return ErrCacheMiss - } - return fmt.Errorf("memcache: unexpected response line: %q", string(line)) -} - -// Delete deletes the item with the provided key. The error ErrCacheMiss is -// returned if the item didn't already exist in the cache. -func (c *Client) Delete(key string) error { - return c.withKeyRw(key, func(rw *bufio.ReadWriter) error { - return writeExpectf(rw, resultDeleted, "delete %s\r\n", key) - }) -} - -// DeleteAll deletes all items in the cache. -func (c *Client) DeleteAll() error { - return c.withKeyRw("", func(rw *bufio.ReadWriter) error { - return writeExpectf(rw, resultDeleted, "flush_all\r\n") - }) -} - -// Increment atomically increments key by delta. The return value is -// the new value after being incremented or an error. If the value -// didn't exist in memcached the error is ErrCacheMiss. The value in -// memcached must be an decimal number, or an error will be returned. -// On 64-bit overflow, the new value wraps around. -func (c *Client) Increment(key string, delta uint64) (newValue uint64, err error) { - return c.incrDecr("incr", key, delta) -} - -// Decrement atomically decrements key by delta. The return value is -// the new value after being decremented or an error. If the value -// didn't exist in memcached the error is ErrCacheMiss. The value in -// memcached must be an decimal number, or an error will be returned. -// On underflow, the new value is capped at zero and does not wrap -// around. -func (c *Client) Decrement(key string, delta uint64) (newValue uint64, err error) { - return c.incrDecr("decr", key, delta) -} - -func (c *Client) incrDecr(verb, key string, delta uint64) (uint64, error) { - var val uint64 - err := c.withKeyRw(key, func(rw *bufio.ReadWriter) error { - line, err := writeReadLine(rw, "%s %s %d\r\n", verb, key, delta) - if err != nil { - return err - } - switch { - case bytes.Equal(line, resultNotFound): - return ErrCacheMiss - case bytes.HasPrefix(line, resultClientErrorPrefix): - errMsg := line[len(resultClientErrorPrefix) : len(line)-2] - return errors.New("memcache: client error: " + string(errMsg)) - } - val, err = strconv.ParseUint(string(line[:len(line)-2]), 10, 64) - if err != nil { - return err - } - return nil - }) - return val, err -} diff --git a/vendor/github.com/bradfitz/gomemcache/memcache/selector.go b/vendor/github.com/bradfitz/gomemcache/memcache/selector.go deleted file mode 100644 index 10b04d349..000000000 --- a/vendor/github.com/bradfitz/gomemcache/memcache/selector.go +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright 2011 Google Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package memcache - -import ( - "hash/crc32" - "net" - "strings" - "sync" -) - -// ServerSelector is the interface that selects a memcache server -// as a function of the item's key. -// -// All ServerSelector implementations must be safe for concurrent use -// by multiple goroutines. -type ServerSelector interface { - // PickServer returns the server address that a given item - // should be shared onto. - PickServer(key string) (net.Addr, error) - Each(func(net.Addr) error) error -} - -// ServerList is a simple ServerSelector. Its zero value is usable. -type ServerList struct { - mu sync.RWMutex - addrs []net.Addr -} - -// SetServers changes a ServerList's set of servers at runtime and is -// safe for concurrent use by multiple goroutines. -// -// Each server is given equal weight. A server is given more weight -// if it's listed multiple times. -// -// SetServers returns an error if any of the server names fail to -// resolve. No attempt is made to connect to the server. If any error -// is returned, no changes are made to the ServerList. -func (ss *ServerList) SetServers(servers ...string) error { - naddr := make([]net.Addr, len(servers)) - for i, server := range servers { - if strings.Contains(server, "/") { - addr, err := net.ResolveUnixAddr("unix", server) - if err != nil { - return err - } - naddr[i] = addr - } else { - tcpaddr, err := net.ResolveTCPAddr("tcp", server) - if err != nil { - return err - } - naddr[i] = tcpaddr - } - } - - ss.mu.Lock() - defer ss.mu.Unlock() - ss.addrs = naddr - return nil -} - -// Each iterates over each server calling the given function -func (ss *ServerList) Each(f func(net.Addr) error) error { - ss.mu.RLock() - defer ss.mu.RUnlock() - for _, a := range ss.addrs { - if err := f(a); nil != err { - return err - } - } - return nil -} - -// keyBufPool returns []byte buffers for use by PickServer's call to -// crc32.ChecksumIEEE to avoid allocations. (but doesn't avoid the -// copies, which at least are bounded in size and small) -var keyBufPool = sync.Pool{ - New: func() interface{} { - b := make([]byte, 256) - return &b - }, -} - -func (ss *ServerList) PickServer(key string) (net.Addr, error) { - ss.mu.RLock() - defer ss.mu.RUnlock() - if len(ss.addrs) == 0 { - return nil, ErrNoServers - } - if len(ss.addrs) == 1 { - return ss.addrs[0], nil - } - bufp := keyBufPool.Get().(*[]byte) - n := copy(*bufp, key) - cs := crc32.ChecksumIEEE((*bufp)[:n]) - keyBufPool.Put(bufp) - - return ss.addrs[cs%uint32(len(ss.addrs))], nil -} diff --git a/vendor/github.com/chaseadamsio/goorgeous/LICENSE b/vendor/github.com/chaseadamsio/goorgeous/LICENSE deleted file mode 100644 index d7a37c6a3..000000000 --- a/vendor/github.com/chaseadamsio/goorgeous/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Chase Adams - -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/chaseadamsio/goorgeous/README.org b/vendor/github.com/chaseadamsio/goorgeous/README.org deleted file mode 100644 index 0ff9a1c0b..000000000 --- a/vendor/github.com/chaseadamsio/goorgeous/README.org +++ /dev/null @@ -1,66 +0,0 @@ -#+TITLE: chaseadamsio/goorgeous - -[[https://travis-ci.org/chaseadamsio/goorgeous.svg?branch=master]] -[[https://coveralls.io/repos/github/chaseadamsio/goorgeous/badge.svg?branch=master]] - -/goorgeous is a Go Org to HTML Parser./ - -[[file:gopher_small.gif]] - -*Pronounced: Go? Org? Yes!* - -#+BEGIN_QUOTE -"Org mode is for keeping notes, maintaining TODO lists, planning projects, and authoring documents with a fast and effective plain-text system." - -- [[orgmode.org]] -#+END_QUOTE - -The purpose of this package is to come as close as possible as parsing an =*.org= document into HTML, the same way one might publish [[http://orgmode.org/worg/org-tutorials/org-publish-html-tutorial.html][with org-publish-html from Emacs]]. - -* Installation - -#+BEGIN_SRC sh - go get -u github.com/chaseadamsio/goorgeous -#+END_SRC - -* Usage - -** Org Headers - -To retreive the headers from a =[]byte=, call =OrgHeaders= and it will return a =map[string]interface{}=: - -#+BEGIN_SRC go - input := "#+title: goorgeous\n* Some Headline\n" - out := goorgeous.OrgHeaders(input) -#+END_SRC - -#+BEGIN_SRC go - map[string]interface{}{ - "title": "goorgeous" - } -#+END_SRC - -** Org Content - -After importing =github.com/chaseadamsio/goorgeous=, you can call =Org= with a =[]byte= and it will return an =html= version of the content as a =[]byte= - -#+BEGIN_SRC go - input := "#+TITLE: goorgeous\n* Some Headline\n" - out := goorgeous.Org(input) -#+END_SRC - -=out= will be: - -#+BEGIN_SRC html -

Some Headline

/n -#+END_SRC - -* Why? - -First off, I've become an unapologetic user of Emacs & ever since finding =org-mode= I use it for anything having to do with writing content, organizing my life and keeping documentation of my days/weeks/months. - -Although I like Emacs & =emacs-lisp=, I publish all of my html sites with [[https://gohugo.io][Hugo Static Site Generator]] and wanted to be able to write my content in =org-mode= in Emacs rather than markdown. - -Hugo's implementation of templating and speed are unmatched, so the only way I knew for sure I could continue to use Hugo and write in =org-mode= seamlessly was to write a golang parser for org content and submit a PR for Hugo to use it. -* Acknowledgements -I leaned heavily on russross' [[https://github.com/russross/blackfriday][blackfriday markdown renderer]] as both an example of how to write a parser (with some updates to leverage the go we know today) and reusing the blackfriday HTML Renderer so I didn't have to write my own! diff --git a/vendor/github.com/chaseadamsio/goorgeous/goorgeous.go b/vendor/github.com/chaseadamsio/goorgeous/goorgeous.go deleted file mode 100644 index 6ed42ff5b..000000000 --- a/vendor/github.com/chaseadamsio/goorgeous/goorgeous.go +++ /dev/null @@ -1,802 +0,0 @@ -package goorgeous - -import ( - "bufio" - "bytes" - "regexp" - - "github.com/russross/blackfriday" - "github.com/shurcooL/sanitized_anchor_name" -) - -type inlineParser func(p *parser, out *bytes.Buffer, data []byte, offset int) int - -type footnotes struct { - id string - def string -} - -type parser struct { - r blackfriday.Renderer - inlineCallback [256]inlineParser - notes []footnotes -} - -// NewParser returns a new parser with the inlineCallbacks required for org content -func NewParser(renderer blackfriday.Renderer) *parser { - p := new(parser) - p.r = renderer - - p.inlineCallback['='] = generateVerbatim - p.inlineCallback['~'] = generateCode - p.inlineCallback['/'] = generateEmphasis - p.inlineCallback['_'] = generateUnderline - p.inlineCallback['*'] = generateBold - p.inlineCallback['+'] = generateStrikethrough - p.inlineCallback['['] = generateLinkOrImg - - return p -} - -// OrgCommon is the easiest way to parse a byte slice of org content and makes assumptions -// that the caller wants to use blackfriday's HTMLRenderer with XHTML -func OrgCommon(input []byte) []byte { - renderer := blackfriday.HtmlRenderer(blackfriday.HTML_USE_XHTML, "", "") - return OrgOptions(input, renderer) -} - -// Org is a convenience name for OrgOptions -func Org(input []byte, renderer blackfriday.Renderer) []byte { - return OrgOptions(input, renderer) -} - -// OrgOptions takes an org content byte slice and a renderer to use -func OrgOptions(input []byte, renderer blackfriday.Renderer) []byte { - // in the case that we need to render something in isEmpty but there isn't a new line char - input = append(input, '\n') - var output bytes.Buffer - - p := NewParser(renderer) - - scanner := bufio.NewScanner(bytes.NewReader(input)) - // used to capture code blocks - marker := "" - syntax := "" - listType := "" - inParagraph := false - inList := false - inTable := false - inFixedWidthArea := false - var tmpBlock bytes.Buffer - - for scanner.Scan() { - data := scanner.Bytes() - - if !isEmpty(data) && isComment(data) || IsKeyword(data) { - switch { - case inList: - if tmpBlock.Len() > 0 { - p.generateList(&output, tmpBlock.Bytes(), listType) - } - inList = false - listType = "" - tmpBlock.Reset() - case inTable: - if tmpBlock.Len() > 0 { - p.generateTable(&output, tmpBlock.Bytes()) - } - inTable = false - tmpBlock.Reset() - case inParagraph: - if tmpBlock.Len() > 0 { - p.generateParagraph(&output, tmpBlock.Bytes()[:len(tmpBlock.Bytes())-1]) - } - inParagraph = false - tmpBlock.Reset() - case inFixedWidthArea: - if tmpBlock.Len() > 0 { - tmpBlock.WriteString("\n") - output.Write(tmpBlock.Bytes()) - } - inFixedWidthArea = false - tmpBlock.Reset() - } - - } - - switch { - case isEmpty(data): - switch { - case inList: - if tmpBlock.Len() > 0 { - p.generateList(&output, tmpBlock.Bytes(), listType) - } - inList = false - listType = "" - tmpBlock.Reset() - case inTable: - if tmpBlock.Len() > 0 { - p.generateTable(&output, tmpBlock.Bytes()) - } - inTable = false - tmpBlock.Reset() - case inParagraph: - if tmpBlock.Len() > 0 { - p.generateParagraph(&output, tmpBlock.Bytes()[:len(tmpBlock.Bytes())-1]) - } - inParagraph = false - tmpBlock.Reset() - case inFixedWidthArea: - if tmpBlock.Len() > 0 { - tmpBlock.WriteString("\n") - output.Write(tmpBlock.Bytes()) - } - inFixedWidthArea = false - tmpBlock.Reset() - case marker != "": - tmpBlock.WriteByte('\n') - default: - continue - } - case isPropertyDrawer(data) || marker == "PROPERTIES": - if marker == "" { - marker = "PROPERTIES" - } - if bytes.Equal(data, []byte(":END:")) { - marker = "" - } - continue - case isBlock(data) || marker != "": - matches := reBlock.FindSubmatch(data) - if len(matches) > 0 { - if string(matches[1]) == "END" { - switch marker { - case "QUOTE": - var tmpBuf bytes.Buffer - p.inline(&tmpBuf, tmpBlock.Bytes()) - p.r.BlockQuote(&output, tmpBuf.Bytes()) - case "CENTER": - var tmpBuf bytes.Buffer - output.WriteString("
\n") - p.inline(&tmpBuf, tmpBlock.Bytes()) - output.Write(tmpBuf.Bytes()) - output.WriteString("
\n") - default: - tmpBlock.WriteByte('\n') - p.r.BlockCode(&output, tmpBlock.Bytes(), syntax) - } - marker = "" - tmpBlock.Reset() - continue - } - - } - if marker != "" { - if marker != "SRC" && marker != "EXAMPLE" { - var tmpBuf bytes.Buffer - tmpBuf.Write([]byte("

\n")) - p.inline(&tmpBuf, data) - tmpBuf.WriteByte('\n') - tmpBuf.Write([]byte("

\n")) - tmpBlock.Write(tmpBuf.Bytes()) - - } else { - tmpBlock.WriteByte('\n') - tmpBlock.Write(data) - } - - } else { - marker = string(matches[2]) - syntax = string(matches[3]) - } - case isFootnoteDef(data): - matches := reFootnoteDef.FindSubmatch(data) - for i := range p.notes { - if p.notes[i].id == string(matches[1]) { - p.notes[i].def = string(matches[2]) - } - } - case isTable(data): - if inTable != true { - inTable = true - } - tmpBlock.Write(data) - tmpBlock.WriteByte('\n') - case IsKeyword(data): - continue - case isComment(data): - p.generateComment(&output, data) - case isHeadline(data): - p.generateHeadline(&output, data) - case isDefinitionList(data): - if inList != true { - listType = "dl" - inList = true - } - var work bytes.Buffer - flags := blackfriday.LIST_TYPE_DEFINITION - matches := reDefinitionList.FindSubmatch(data) - flags |= blackfriday.LIST_TYPE_TERM - p.inline(&work, matches[1]) - p.r.ListItem(&tmpBlock, work.Bytes(), flags) - work.Reset() - flags &= ^blackfriday.LIST_TYPE_TERM - p.inline(&work, matches[2]) - p.r.ListItem(&tmpBlock, work.Bytes(), flags) - case isUnorderedList(data): - if inList != true { - listType = "ul" - inList = true - } - matches := reUnorderedList.FindSubmatch(data) - var work bytes.Buffer - p.inline(&work, matches[2]) - p.r.ListItem(&tmpBlock, work.Bytes(), 0) - case isOrderedList(data): - if inList != true { - listType = "ol" - inList = true - } - matches := reOrderedList.FindSubmatch(data) - var work bytes.Buffer - tmpBlock.WriteString(" 0 { - tmpBlock.WriteString(" value=\"") - tmpBlock.Write(matches[2]) - tmpBlock.WriteString("\"") - matches[3] = matches[3][1:] - } - p.inline(&work, matches[3]) - tmpBlock.WriteString(">") - tmpBlock.Write(work.Bytes()) - tmpBlock.WriteString("\n") - case isHorizontalRule(data): - p.r.HRule(&output) - case isExampleLine(data): - if inParagraph == true { - if len(tmpBlock.Bytes()) > 0 { - p.generateParagraph(&output, tmpBlock.Bytes()[:len(tmpBlock.Bytes())-1]) - inParagraph = false - } - tmpBlock.Reset() - } - if inFixedWidthArea != true { - tmpBlock.WriteString("
\n")
-				inFixedWidthArea = true
-			}
-			matches := reExampleLine.FindSubmatch(data)
-			tmpBlock.Write(matches[1])
-			tmpBlock.WriteString("\n")
-			break
-		default:
-			if inParagraph == false {
-				inParagraph = true
-				if inFixedWidthArea == true {
-					if tmpBlock.Len() > 0 {
-						tmpBlock.WriteString("
") - output.Write(tmpBlock.Bytes()) - } - inFixedWidthArea = false - tmpBlock.Reset() - } - } - tmpBlock.Write(data) - tmpBlock.WriteByte('\n') - } - } - - if len(tmpBlock.Bytes()) > 0 { - if inParagraph == true { - p.generateParagraph(&output, tmpBlock.Bytes()[:len(tmpBlock.Bytes())-1]) - } else if inFixedWidthArea == true { - tmpBlock.WriteString("\n") - output.Write(tmpBlock.Bytes()) - } - } - - // Writing footnote def. list - if len(p.notes) > 0 { - flags := blackfriday.LIST_ITEM_BEGINNING_OF_LIST - p.r.Footnotes(&output, func() bool { - for i := range p.notes { - p.r.FootnoteItem(&output, []byte(p.notes[i].id), []byte(p.notes[i].def), flags) - } - return true - }) - } - - return output.Bytes() -} - -// Org Syntax has been broken up into 4 distinct sections based on -// the org-syntax draft (http://orgmode.org/worg/dev/org-syntax.html): -// - Headlines -// - Greater Elements -// - Elements -// - Objects - -// Headlines -func isHeadline(data []byte) bool { - if !charMatches(data[0], '*') { - return false - } - level := 0 - for level < 6 && charMatches(data[level], '*') { - level++ - } - return charMatches(data[level], ' ') -} - -func (p *parser) generateHeadline(out *bytes.Buffer, data []byte) { - level := 1 - status := "" - priority := "" - - for level < 6 && data[level] == '*' { - level++ - } - - start := skipChar(data, level, ' ') - - data = data[start:] - i := 0 - - // Check if has a status so it can be rendered as a separate span that can be hidden or - // modified with CSS classes - if hasStatus(data[i:4]) { - status = string(data[i:4]) - i += 5 // one extra character for the next whitespace - } - - // Check if the next byte is a priority marker - if data[i] == '[' && hasPriority(data[i+1]) { - priority = string(data[i+1]) - i += 4 // for "[c]" + ' ' - } - - tags, tagsFound := findTags(data, i) - - headlineID := sanitized_anchor_name.Create(string(data[i:])) - - generate := func() bool { - dataEnd := len(data) - if tagsFound > 0 { - dataEnd = tagsFound - } - - headline := bytes.TrimRight(data[i:dataEnd], " \t") - - if status != "" { - out.WriteString("" + status + "") - out.WriteByte(' ') - } - - if priority != "" { - out.WriteString("[" + priority + "]") - out.WriteByte(' ') - } - - p.inline(out, headline) - - if tagsFound > 0 { - for _, tag := range tags { - out.WriteByte(' ') - out.WriteString("" + tag + "") - out.WriteByte(' ') - } - } - return true - } - - p.r.Header(out, generate, level, headlineID) -} - -func hasStatus(data []byte) bool { - return bytes.Contains(data, []byte("TODO")) || bytes.Contains(data, []byte("DONE")) -} - -func hasPriority(char byte) bool { - return (charMatches(char, 'A') || charMatches(char, 'B') || charMatches(char, 'C')) -} - -func findTags(data []byte, start int) ([]string, int) { - tags := []string{} - tagOpener := 0 - tagMarker := tagOpener - for tIdx := start; tIdx < len(data); tIdx++ { - if tagMarker > 0 && data[tIdx] == ':' { - tags = append(tags, string(data[tagMarker+1:tIdx])) - tagMarker = tIdx - } - if data[tIdx] == ':' && tagOpener == 0 && data[tIdx-1] == ' ' { - tagMarker = tIdx - tagOpener = tIdx - } - } - return tags, tagOpener -} - -// Greater Elements -// ~~ Definition Lists -var reDefinitionList = regexp.MustCompile(`^\s*-\s+(.+?)\s+::\s+(.*)`) - -func isDefinitionList(data []byte) bool { - return reDefinitionList.Match(data) -} - -// ~~ Example lines -var reExampleLine = regexp.MustCompile(`^\s*:\s(\s*.*)|^\s*:$`) - -func isExampleLine(data []byte) bool { - return reExampleLine.Match(data) -} - -// ~~ Ordered Lists -var reOrderedList = regexp.MustCompile(`^(\s*)\d+\.\s+\[?@?(\d*)\]?(.+)`) - -func isOrderedList(data []byte) bool { - return reOrderedList.Match(data) -} - -// ~~ Unordered Lists -var reUnorderedList = regexp.MustCompile(`^(\s*)[-\+]\s+(.+)`) - -func isUnorderedList(data []byte) bool { - return reUnorderedList.Match(data) -} - -// ~~ Tables -var reTableHeaders = regexp.MustCompile(`^[|+-]*$`) - -func isTable(data []byte) bool { - return charMatches(data[0], '|') -} - -func (p *parser) generateTable(output *bytes.Buffer, data []byte) { - var table bytes.Buffer - rows := bytes.Split(bytes.Trim(data, "\n"), []byte("\n")) - hasTableHeaders := len(rows) > 1 - if len(rows) > 1 { - hasTableHeaders = reTableHeaders.Match(rows[1]) - } - tbodySet := false - - for idx, row := range rows { - var rowBuff bytes.Buffer - if hasTableHeaders && idx == 0 { - table.WriteString("
") - for _, cell := range bytes.Split(row[1:len(row)-1], []byte("|")) { - p.r.TableHeaderCell(&rowBuff, bytes.Trim(cell, " \t"), 0) - } - p.r.TableRow(&table, rowBuff.Bytes()) - table.WriteString("\n") - } else if hasTableHeaders && idx == 1 { - continue - } else { - if !tbodySet { - table.WriteString("") - tbodySet = true - } - if !reTableHeaders.Match(row) { - for _, cell := range bytes.Split(row[1:len(row)-1], []byte("|")) { - var cellBuff bytes.Buffer - p.inline(&cellBuff, bytes.Trim(cell, " \t")) - p.r.TableCell(&rowBuff, cellBuff.Bytes(), 0) - } - p.r.TableRow(&table, rowBuff.Bytes()) - } - if tbodySet && idx == len(rows)-1 { - table.WriteString("\n") - tbodySet = false - } - } - } - - output.WriteString("\n
\n") - output.Write(table.Bytes()) - output.WriteString("
\n") -} - -// ~~ Property Drawers - -func isPropertyDrawer(data []byte) bool { - return bytes.Equal(data, []byte(":PROPERTIES:")) -} - -// ~~ Dynamic Blocks -var reBlock = regexp.MustCompile(`^#\+(BEGIN|END)_(\w+)\s*([0-9A-Za-z_\-]*)?`) - -func isBlock(data []byte) bool { - return reBlock.Match(data) -} - -// ~~ Footnotes -var reFootnoteDef = regexp.MustCompile(`^\[fn:([\w]+)\] +(.+)`) - -func isFootnoteDef(data []byte) bool { - return reFootnoteDef.Match(data) -} - -// Elements -// ~~ Keywords -func IsKeyword(data []byte) bool { - return len(data) > 2 && charMatches(data[0], '#') && charMatches(data[1], '+') && !charMatches(data[2], ' ') -} - -// ~~ Comments -func isComment(data []byte) bool { - return charMatches(data[0], '#') && charMatches(data[1], ' ') -} - -func (p *parser) generateComment(out *bytes.Buffer, data []byte) { - var work bytes.Buffer - work.WriteString("") - work.WriteByte('\n') - out.Write(work.Bytes()) -} - -// ~~ Horizontal Rules -var reHorizontalRule = regexp.MustCompile(`^\s*?-----\s?$`) - -func isHorizontalRule(data []byte) bool { - return reHorizontalRule.Match(data) -} - -// ~~ Paragraphs -func (p *parser) generateParagraph(out *bytes.Buffer, data []byte) { - generate := func() bool { - p.inline(out, bytes.Trim(data, " ")) - return true - } - p.r.Paragraph(out, generate) -} - -func (p *parser) generateList(output *bytes.Buffer, data []byte, listType string) { - generateList := func() bool { - output.WriteByte('\n') - output.Write(data) - return true - } - switch listType { - case "ul": - p.r.List(output, generateList, 0) - case "ol": - p.r.List(output, generateList, blackfriday.LIST_TYPE_ORDERED) - case "dl": - p.r.List(output, generateList, blackfriday.LIST_TYPE_DEFINITION) - } -} - -// Objects - -func (p *parser) inline(out *bytes.Buffer, data []byte) { - i, end := 0, 0 - - for i < len(data) { - for end < len(data) && p.inlineCallback[data[end]] == nil { - end++ - } - - p.r.Entity(out, data[i:end]) - - if end >= len(data) { - break - } - i = end - - handler := p.inlineCallback[data[i]] - - if consumed := handler(p, out, data, i); consumed > 0 { - i += consumed - end = i - continue - } - - end = i + 1 - } -} - -func isAcceptablePreOpeningChar(dataIn, data []byte, offset int) bool { - if len(dataIn) == len(data) { - return true - } - - char := dataIn[offset-1] - return charMatches(char, ' ') || isPreChar(char) -} - -func isPreChar(char byte) bool { - return charMatches(char, '>') || charMatches(char, '(') || charMatches(char, '{') || charMatches(char, '[') -} - -func isAcceptablePostClosingChar(char byte) bool { - return charMatches(char, ' ') || isTerminatingChar(char) -} - -func isTerminatingChar(char byte) bool { - return charMatches(char, '.') || charMatches(char, ',') || charMatches(char, '?') || charMatches(char, '!') || charMatches(char, ')') || charMatches(char, '}') || charMatches(char, ']') -} - -func findLastCharInInline(data []byte, char byte) int { - timesFound := 0 - last := 0 - for i := 0; i < len(data); i++ { - if timesFound == 1 { - break - } - if data[i] == char { - if len(data) == i+1 || (len(data) > i+1 && isAcceptablePostClosingChar(data[i+1])) { - last = i - timesFound += 1 - } - } - } - return last -} - -func generator(p *parser, out *bytes.Buffer, dataIn []byte, offset int, char byte, doInline bool, renderer func(*bytes.Buffer, []byte)) int { - data := dataIn[offset:] - c := byte(char) - start := 1 - i := start - if len(data) <= 1 { - return 0 - } - - lastCharInside := findLastCharInInline(data, c) - - // Org mode spec says a non-whitespace character must immediately follow. - // if the current char is the marker, then there's no text between, not a candidate - if isSpace(data[i]) || lastCharInside == i || !isAcceptablePreOpeningChar(dataIn, data, offset) { - return 0 - } - - if lastCharInside > 0 { - var work bytes.Buffer - if doInline { - p.inline(&work, data[start:lastCharInside]) - renderer(out, work.Bytes()) - } else { - renderer(out, data[start:lastCharInside]) - } - next := lastCharInside + 1 - return next - } - - return 0 -} - -// ~~ Text Markup -func generateVerbatim(p *parser, out *bytes.Buffer, data []byte, offset int) int { - return generator(p, out, data, offset, '=', false, p.r.CodeSpan) -} - -func generateCode(p *parser, out *bytes.Buffer, data []byte, offset int) int { - return generator(p, out, data, offset, '~', false, p.r.CodeSpan) -} - -func generateEmphasis(p *parser, out *bytes.Buffer, data []byte, offset int) int { - return generator(p, out, data, offset, '/', true, p.r.Emphasis) -} - -func generateUnderline(p *parser, out *bytes.Buffer, data []byte, offset int) int { - underline := func(out *bytes.Buffer, text []byte) { - out.WriteString("") - out.Write(text) - out.WriteString("") - } - - return generator(p, out, data, offset, '_', true, underline) -} - -func generateBold(p *parser, out *bytes.Buffer, data []byte, offset int) int { - return generator(p, out, data, offset, '*', true, p.r.DoubleEmphasis) -} - -func generateStrikethrough(p *parser, out *bytes.Buffer, data []byte, offset int) int { - return generator(p, out, data, offset, '+', true, p.r.StrikeThrough) -} - -// ~~ Images and Links (inc. Footnote) -var reLinkOrImg = regexp.MustCompile(`\[\[(.+?)\]\[?(.*?)\]?\]`) - -func generateLinkOrImg(p *parser, out *bytes.Buffer, data []byte, offset int) int { - data = data[offset+1:] - start := 1 - i := start - var hyperlink []byte - isImage := false - isFootnote := false - closedLink := false - hasContent := false - - if bytes.Equal(data[0:3], []byte("fn:")) { - isFootnote = true - } else if data[0] != '[' { - return 0 - } - - if bytes.Equal(data[1:6], []byte("file:")) { - isImage = true - } - - for i < len(data) { - currChar := data[i] - switch { - case charMatches(currChar, ']') && closedLink == false: - if isImage { - hyperlink = data[start+5 : i] - } else if isFootnote { - refid := data[start+2 : i] - if bytes.Equal(refid, bytes.Trim(refid, " ")) { - p.notes = append(p.notes, footnotes{string(refid), "DEFINITION NOT FOUND"}) - p.r.FootnoteRef(out, refid, len(p.notes)) - return i + 2 - } else { - return 0 - } - } else if bytes.Equal(data[i-4:i], []byte(".org")) { - orgStart := start - if bytes.Equal(data[orgStart:orgStart+2], []byte("./")) { - orgStart = orgStart + 1 - } - hyperlink = data[orgStart : i-4] - } else { - hyperlink = data[start:i] - } - closedLink = true - case charMatches(currChar, '['): - start = i + 1 - hasContent = true - case charMatches(currChar, ']') && closedLink == true && hasContent == true && isImage == true: - p.r.Image(out, hyperlink, data[start:i], data[start:i]) - return i + 3 - case charMatches(currChar, ']') && closedLink == true && hasContent == true: - var tmpBuf bytes.Buffer - p.inline(&tmpBuf, data[start:i]) - p.r.Link(out, hyperlink, tmpBuf.Bytes(), tmpBuf.Bytes()) - return i + 3 - case charMatches(currChar, ']') && closedLink == true && hasContent == false && isImage == true: - p.r.Image(out, hyperlink, hyperlink, hyperlink) - return i + 2 - case charMatches(currChar, ']') && closedLink == true && hasContent == false: - p.r.Link(out, hyperlink, hyperlink, hyperlink) - return i + 2 - } - i++ - } - - return 0 -} - -// Helpers -func skipChar(data []byte, start int, char byte) int { - i := start - for i < len(data) && charMatches(data[i], char) { - i++ - } - return i -} - -func isSpace(char byte) bool { - return charMatches(char, ' ') -} - -func isEmpty(data []byte) bool { - if len(data) == 0 { - return true - } - - for i := 0; i < len(data) && !charMatches(data[i], '\n'); i++ { - if !charMatches(data[i], ' ') && !charMatches(data[i], '\t') { - return false - } - } - return true -} - -func charMatches(a byte, b byte) bool { - return a == b -} diff --git a/vendor/github.com/chaseadamsio/goorgeous/gopher.gif b/vendor/github.com/chaseadamsio/goorgeous/gopher.gif deleted file mode 100644 index be7567e3cfd666ee40c56b1d808f97116c092053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15232 zcmeHNRZ|-buuVdM;3+Nvf;$BYMG7>yyA&(Mo#I*~L4yaU6nA&G1}Ow(L!BBLX@(?q_Og4Fw#M8{_u!Xn@> zB+0ANSSUSAfl1hs3(@-)TAk)2AuXPiM(SMDlV40`=4mxt8ASmF%Bjk$8mS*19AIP| z)jT7$H8dkV%>zY@q)hB%n$o=L#)}IJdF9js{rs=4t|mV`C|YW4tgpvSOb|gJ9^OQK zy}flRL2S${&tl&^eIiTG$zRt@E-EB!@yv{jl+-rVNmW%fFd$I!A-A5Rv6G_{2{ADk z3{FqO7^z7=k`1aHZL$g4=wd`FI{Uf(cTxkr-TQ*ejuN| z&a>D$X_a7|{vSM3j8Z}^v%fp=b!nuYpX&Va1L_h|d$a2ggd83~mAylE2SWEp2zd1a zZ3dsbI4|xqb9|i$<3U8fv z&9jb9Ccy>CLA%kmTzSR70&2is?2EsFhzJJ#$4qf>r-044+wc-gG_OU#CINAsq*bDb zDt=Ma6p;2HMSC`{*#FPo>48D4Nl6LMy3fc~nmT#x4yHE%bC`(`TH6oRH|?b&C;&@w z;!VvvALTyQkUEU8$)CCBV_cSR_cC~Qynj=eXh=uVL5aog`xr{=h`gqmxMb@!s$8o#x2cb@8U#P8)cA&DWa{~Hr$x`JNAqa~dE_)-=&D!**vcDzY<@L-XzcS#&txg~JdlOItU-T8|Z^c}qp;XlJ9$somB4=Bm^_ww%=e(e{Ch;&79KK*C2L?qxT9h0}g^!=DHj%@gl zn0S--^lz`HS5r-OD(@$8)y>fG%y7W()P-4V)?FexzV0teS4AS**i2_Bp6-+CqN#VU zCW3cwB)*0nPM+oVd|Prg8_Zv|T#^2e9i#{IUwWmu*SSwsEi+MEy|Zx#d-OTN>x9T$ z{_JLjTlPc2vEIf%*g^We3tq|f(L@kl*zAqeas{~02}NXCglAbUho|V_P4#W&=Xh5a zsgsim0W}mQ3t{}_BNWD&oJQ(OQ|yvSmO&oLdo}H4?1#d)X@!$x zus%2!RpBXcjAHVKX6=0>`2gSJR#(J4DJ2S@o;0mst(@tZSfkW&bu>Hyi}#QI4dXc= z&7Tp?4%CR@*lksdwwffKs1i(v!tH|xqAC1EkcM|91a+kgoc2mF!kh{K5Jr(t&4*=BP+#i`S67ouXB3-;K(PI z730k2@kk)mQWLc*q^l1wPcBiSE9ROGpzGK31y!>6E#Re+hi|ynxL0ff?=cW{B%XU% zH3Ikv%++#JGNJ9{kqZ3~^1i(&YnW4BWxwuu;+YfZ_6Q-#uWvv}RXQ%Nd*bO2G=Ar|u2jjN>SYp6a04DIg_5^i&&8hUP%r?tkMf^vIq^tFr} zF~ejk5TtRn=29I2lE4@Zr1wpnDEzUQRks&K9rszE4~i0_!yX$5u?r?`lVEHhAhHI{ zl|DlWsO_!-$I|UmvEebqA)toEIC{P_a4e~tikin88eOygy%j_DUk;Dro5^>{>iCpw zPRt3G@@89L3g;JKg1BDAA06pO{5&2uYfto5$?Uhz#TzGi=I(tfFfUCgDDz zb)qhM0T}JsDbswr%LY%$HjR%8$;5*xO(v0AuOFH%6J)WC_*9!4CkS`5_xZbfm%+EL zb+ZYqjs(;LO7b&aO7`mh`J(boTKZxa+i{%z63W|-H!Yt*6}Q?X{$X9~)*@yo(_SBX zZE4L|Gv4M`qD==Toqnpkh$TE$9^9=0*uR-X*Y;NVDg+ixF`18aVW8d3%*q8(k<$RAMNsS=;1h;L*Q07 zt|kSTAym)E>}4lzkb`!q=V_t0x$Us97Ru!-KM>YGzW28c#N}mH7YP)vHM#2g>X}ek z0{d^3eInGyAJaNW`zVqJjo;+Fy?Y^A@#}*(`8UOUEoa^H$MgQP?U8&3F2qU}AIVGo zud@yav@J~*Ug%W4>L!_2k7i^O66lEH9RnLZqan>Qc&OfAuwSNly97}XIR|suTb?bA zj~+?Hx~|dNJal;UB(t*z>UjpB-W!&zBBe7d053_sVS5-?7@Dkqt~`wri|rA1)Ysm7 zzx-n(gA+kWtB;h>eDZX&O}vvT{9Mwk3!3G68t9rNp-+VXeGBA<7js{1);J9ZZ9jCB zPn?tK$Q{`#vdt4kUV^Y$<%U_ESYxBJM|7xq-Fu{WDj(_mtB7aY6#BnZsV;$dh+RN0 zQAjC1H?wXQY?{3Z_>Mwz6KQWH5oKKaR2qI0qzeZUK!$;wbk)01i)E;vRC*E&e~DCa zt3Y2Vk!{K@Y>El2jb8zxgh##cOIBRW==9H0VmS4EE|LA$ZN9x9tn}@51H(h_$FmG` zK}}l#CL5`hUEvG%ls_NgRSGM7nZ7M}*APduPNgJ^K(0Hg3%uCS{jWhyaen)F{_#@L zNpL$|W9zSz{!(1`@WqgkXMuX0fCc6U`GRuDA0d7ctkLf!v#eI^#$rjR052QGj-@XSWGVc6b?)!_^b`MFRsIQBv4Ael_r4OSiP|(-QN0EVv zUX8m9KwV-MxMF!i$3*NMaQh>GrkXMFM4Am6UN;Yb!6m+As_IAr*|Fg=^gN)^NH%I1 z;+H84?Q?M`-t)Tn6t6VM$!;6~LHRE-@>R7#VHpB4Np)%%;vD2ofzQ z39Y69PfG%=%{U8e2q52IT--}aliC3E&BA|3K4H-h&PoTAx5xjWg!#}Zl46*MG10H= zTnA{tglJ^gX(;4f41st=urYwXL)!J550wo-2bYjv#S`J8t+FdZjxR5SWRWXN~bf-4gGdi19DVlk_JjM(sL91+ghLp4^zS||eXtxx+>!uO0?w&1oaXV2|Fkt#!LLQ5Co`kYva~H+42bBNZgAq1 z03)j1Oqq};)Vto2w^^Tpq^E$)3hLJVTf(`EkaH{Hr<4W^zNW zdS(vks_5u!1|DiCsO_YPZ-id)Q{H#!Qa5^hg4##lToDZ30G~-TppG%Y+|Mw#gsmgn z;FmiAe^zLoECW0tgt`c0t8%pX;6aIZmUO999Xu*8vDig{sio+vaYz}_8#YX-D0MC# z2b26!daMu{1qo#_F1yWuXk(Cxa=6fSumr2aPv_r2%Z37^?)BUVg zaMDxOPo4dM1{fQZ-P@Tb;zn1ZQB<}DpnwC5J^^gY86_F3Z1byT%;gc%39Y{X9QWR8 zpTE5TBY_r+Kn?)tSw0tyO~s^rncGTvKRCA)2*SOl70-)Q&C5HVG=Pibf>A(hMOF-B z73deHIj<_q7HGi;ENrPS6ag(s05DVaBkM%YKXq5>)gtMc;`!Z0%(bl6X~EE%mDNDu z5WrK$G>;gSlTt?3-HIWXMgnNlK4a5|+FB{bG)iLo*aS5)04PGHVIZF|s}wv;+&mhJ zYE`KA;f%MfiJsJi8}`v&C8&k;0Jmj0VRbcR@Mw@v{z+a=Nicxm61d8r@4gavoS(k8 z+T22waPg_>2XS*r2i|wawx9fsJ;18WM^&&_UOsC8;44~kZ(g3)O%?Y_K$@03l4)l0 zU2Q5%E9O^N*HqOyA@Jj50x2|HsJ=<&38>GlZIqv};1WMe0if^RTz~!5R~lv|&!m91bh9<{K5WfNc7$omrI}A|MOnZVOJJ->Y1_N+6qeN4`dowfjRR zkpwz8@EKEE9vT>*)LHYIYc-+fd4IfpzN!0OOI<0@Nz3^{gF%R1Q3RrHzMh*z(rhdP z%IoP$t50IUb~6j0Mr?b^Ntz9{7+T$%@#;IB7<(PnUv;Su*!BVA)&LwO13xT+7fG76LVF{oA5oX|5AvnB+@pZWF&Q$rHpH2~rVg|DwynU(>q-E*CfC$pUqva19Q{aw=y_S`t zi{&U8MaYi67f+OysVWc|d^S*jY}bhp9IAUTvL`mecsz1sl&B1*H9Q-G5xjGgV0c3lXBVo|xH%QQnRG;zTg2!f z_w$hjTVpMgL)`h~I1emeb{aZ^OTdX@@~$F+zhcCo;yBUi{xr>` ztuMKd7+Gmw-nv=A(JIpE0`z#7@%u*Y_JYf4<|iF)YGdj#rj`$Ykq%E}(BtHJvc9;f z^Mc`%O&p9HEy6U{D69I{s_cz`{~CL=Y&6uuDjXG)w*Kz+(! z&Pr|?H*M^rCeS!NdiJ6Aa6w8=Rm;-=gd5h^nRFLl>gM?Hm3lEzF$jN?ntxz0HVl*P zwD3%5G`e8ApE~@kU^!}YQ8a7J<1Se++}6}bjfdI6#bdglg7GQoikOFR*42DcH6y#w z>Jw7Uz?6^5S|2{yeK1j2B{Y&lFr?7cqkJe66?-S5T$U2IhQ-fTe3Vz7!`6cYo4=k% zd($!^3Q_Tk}g+S`W-&r;hT&N`oOgQvGj4a4uAPexYk5>d^Q z4UH1Qlp7K@r|vSABx&l%_FAKM>uh(6qF1TNhgm&#CKvqZ^!K0qQ4njts4Tsj|IaP??V<03T3tF@r01T7Kuv(Wm`o8Di?9-l(c#at zL&XXVnavS{_A2emD%kgZ`_V%KQC0D+?Jq+6g}iB2+e6putCM(6=Z3BU({I9e)AS!(pQTXAv+nM%ic zY|Ss;KQ$;iB_>*rv+gHs_#|775s>ejm(iz19Nr8zHVtOQRi7x8p&xo~x-lHp3~icN zeqMYfTTK4MP3k0`q-Kn$fGd^D{9|Nd-}-~zJp+Z+_98(U>-o_*Q*6W_D)c0d;9>j| zoCopT4Kr3hLG4(m=OZ~yvd^awv3ljRFMDN}ahCpn#(r%!K(z})hbhbKszSQ)E#%lfLE6>z@>(O+5b!*=0>R+`Z`>^jXo5^i%#>}r)!?AZB21s{x zf4X+{y~~QsAtg723MDT7?7c_bRn69gL)5UL0bL0~_x*wa<3`Ra!hctc> zFGQu(HGBPmT-p{Z?B;gQTk&Z_9rIDv-jBq_by$^|Q4_CR_n02=NB6-uJg%$E1;3#C z9|kYKN9n8zzdcd4YqMfK5~tYSdVSqYr8M6?t22B)Dt~Il%;f)+lS6WIwf^T@^6eSx zZ|^G^xnIdP+%M*{9`*+0&9l5P+&i&I*z03ed_>X7HG5Yd@!OS^XRrD#o4{q~!|$sp zr}#QS2~F@z$z3ox`VH})>ieghq%Utf-~PP$%U%9KbT4ioe3 zghVBkGeQ3Vn8;_+l+`m_3d#}X;O_Y~d8|_)9q{FFZQ(?(M3zgc0B%%;N+U>S?8Lb$ zk33+l)ZOAOJv3<`mJrriqvlYov#q4WSu6`G#q;(yrAQ6$5p+>Km*IpietA9+5-GE) z&L*rvEH24!bJ<-#S`B%Kc07lUnd7)vrM~@MaUU6fJ*j%!Akk>s#14x9%wmOjprIzs zP8U=$qr@dVimUXNUH4;E31q6cnH~k_UBYr-L#Cf%tJ~yHq)w@a6(?qgE6ceeEV*M- zV(%loSK*58mwP4@N6M>x)uiDclx9*e2;Ww=YC=})f{Ux@%YY!?mSFpDw=(Y7QqpDn zPvVe&WjfMVjQ&vG`>Zx{K3#Eb`L$_FtW zzaMK}C@{JYxT119GRcNX9*Mj3kWFZ&KY|MR;i8g5eSIeuU@ceEgv|69stv@OX<58*K?rV!v89d*RCG|I#M{a*CQR^H)1_@D2Ueq@tJ$#7 zz)e+RSh=ukaj!Z3MFem&PoUTFu!-2l-asd6)q@lvdIDP%OlfgA6PLl4NpB?~y+(}d z&3?A&P%`puoymK=DyFZ-wnQVF!VS$9Ab450*jFWmP&aDD2%aw8Tg2v6A`~TpV=SrsO&P^t^Ehq5Z`fjzvPQRd!pHL>Ir~Ai2toJV%l$FWT%{=*ZZ9FCD z!}b(28qfFjLN}*0&0kY?TXQ>vh1Gm^@W6VPpL&eaLq+wena{DAo6%an=;xyihn#Gw zzXh>R#}v71Ep#LPb{Xo5m`*OI2#N&R6N@2?e8jEZyFS7Dm zRE$hx=;uC~{RO8c4$3~nC|Qrh9QjnBEHB|9IF!$o$a(&q;Tx^@Q9O~f;+L#DeV$Dp z$UZI^=yNh0I%-8C!ZGIfS=3*+t z1{(Je4EbEEv=NXQPyr-?z5s@Uy617E?Bc(7V*ARWP9{QrCHV8x!hzp~Pz;4$okf*(7fl{qPrm;D(3H9imvE8AiEjZ0{q zH^_MGgMd$SM3G{fyrZs45VFXQ+EeXxym@tU$98yF3Z)d%_kfAbm+?}^FsB%e{UA#@ zq9o*!wD=joD{Y5TXfn`Dk^SKMrCJk*OK@n4K_^LxXt}5&@q)(6&!Ubnr1#ulJmy^_ z1BnQT$iXjVtL&qd)Vzj+Fj##w^uX#6qT?ci0A;kpvt4p<{?;m*E_UfQeOVtG3Ywf| z3UC~IA#-{z71<MrQh57!^Rc7l; z@n=Ig@H}!=#ir`EX^c6z1dY`izLQceGp0<&dWS;6UyRF1_z~JX3FVUs-d<0cC%s*! z%G~b^lBMJf`Tj)?BHc~jr< z7*TvIPD+4g(@MF^FZ7v45yvHXsjy8z`jm8y7n>Lj1Sp@65e@BA-=k8NPBnSIX^#|P zWT%zOCZi^e<@pdzVzyY|V;jI?)nhOry(i_Yn*rgUYD2QEwKxi8_&2FP3TmL77-`P67O0Thq#8s5Q|mjzs>Q76CWiWTVPb_!e61mjtT zFI$E;5~6{HkfK!N>A`fiW4?SVfQdP+?RvM%q#g`mWFa# zcSQOOiQ%9^k*ha7PJY>;Z3SLXFF*5NDfj=msVv9q%Q-Eea8zBZxcr6jr#cLBrViT$ zlGogE<#~L6@kgTEthio(HV*P$*wBM_DT9M(_eM2bh?d3+?$N2l0TkJSf&6!YQ`_R; zRqcxe@uR}|Z5l%pt2J%kLtqt4Mi*hbevSjSV5ey6-stV|R*TtgGKY=SD65U?i$G2w zn~lUkF8lM)ul(J#&0RhUNYCA11eSR9;WP3%xhTC@AqFG@KjyDI8QKQ#>v50fdcMzd zlkVg8>96>jWL%`)09VfHkO?Ce+BwK3fXGJFo>Cu(2P-+1ctOPDL(X?U*E=iw6#|J6 zW(Gk9Ira)=UZtjf`|hv{sM2Y4TiN!ki#}d@7P*+XFZ=)^zLiFSL6){s0x7btI9MUV z&j=!ZwC+5=;wzoQJN?I%CsdTk9(oKrDGaX=qtE4SD} zGI9r=v3QlcwihK5%>Dk&tq%;cbcVPr zEXoT~A-)jsv*fb1*#6o`17AviL|;&_lD%?~pO7pIW4!J8BUp+B!sh~iF#$jgm6VhX z&pFhp)UXH%kEgd_C7E*#Whgs0VnT6$XnPcimU=l&5K%igQDBS3b;gF3Sg-@TXOjo zuA~x}D;jBF^6=m&#!W1}tPBkT#j%MHL`Pq?gE%3IDP>Tz8--ckq;eS{r=p1RD48-)%%hdk21PwL$}tut zv?|Z$Jt`vzTgg;fZs}JZE0Vw}DKrezAyM+$C^f+XetYF5?=gKV zdfwF`qQfz6Z4`|NidG*;gHedbsL{|3i zKhWAk)j3R6=$8suO4&h{8Z4;Vj~;ZZpcJPc;tp2zCRI~NR()JB;wcWL92@t5z4mi> zz_~gk3RMd!P-EJZ7jT*Qj>#D|oG6)74eLndzf=u{sfTu%pwywRO{D&8`D94 zp#8oDux;2yO+@!otFjpE?RLaQXCGLo-Fqg;736DIFRI+fRwL2@}+EGSlWm}smF zaFW$*Xc!ixmzT-Yd<|Ev*(55w(R^JqRX?NIF@V~O2DLd5wfwjD&y93B5Vb37^&4w} zZKiwu+2XwgdbDdktWIawX!Xx%4lHU7XQBQ7XuZKqj}@RxH={jl+{))&H{*#igR8D6Y(wJ=^UtgO{ztxg~!xfD*!?Bm_U) z^GXo$>!2TF4VVj~1h7$z=O`wODxB*r)%O^Yztf`sp-;#Ej=g>SJ$VR5B)|o}@c^C7 z0OgqF`Ob~dzl?fFjW_=Qw-@xJa9{)uF9S>4U>2hZjZt(Q&8jfg>*=LjlDYkZVygjZ zBEe5>V%p|d8|Khj`Z4N)dIIVuCf{S;fsHxHmZuM67`cd2aVGO9h#51;MPfODepyS% z)b;t2@@!%XhAy3+oM2#iWq8IEe0O~LqNF>Y*4bc_tG_^M|yU*x(n~EB49xKWDOlBfwqq^OE@*_0c!?kuhauFGMLl(6xJYqkeMm%9Ij`%LPYT4 zN9nK4^S^_0#?}Hn%{``w;XrAWh)R~w+}jy*?<3BN@P*=VbP4l(aIH?wpsDMXd4{@$ zC%#2~z0#X%g)<&jv%w!g#wUIoS*p+Qb={S=zXj;109fe)Z6GHdD zTj`FS8XPnov#|Wbw${?QUZOL!AZz7Xi3xpf#p1SE-)J0PGs`W_9v05|_HU-=yUm%- z#TJ;=*x+XFJZrp#S#z(&LagRuwyE*;#@4)KisQt`tn7F|E_Tt`2THaqg1lqOlHx3mP=Fl=15BR*A-)njIstaNL1 zHvCOYQtJ9>AaWa!X(ISPjdr;wFPfEwI_w_xSUAfKPEY??RWz_ zIF>CTsdfUXN!-@ft%G*LP6>i9HI6Urg#YcQlG=-Q*@-#f?l0u*AImQ@ZSOpGIuJir z3r?};DzXpYDf$4}#*io>--dNS# z8GHQG^4vbAx^U`|b@Wy>_lbCxD0DI@WcFP}C&t9tSI)Vn!!bD3Iq;>kP1A{dwsY}} zb2zO*#LG#=JLgx&;AoY7XKojJveQ&!r`Rs-I49hKXwQB8_$=B9=hbxDHQ*94~K2BBOdfV{H?wfN#glqIm=Qq2b zikvhHxm8M8J{JnQslr?;y0o8zKI?g(RuN2&{MD*0`W)Zj)-&MN@K3Fgd^+Ka+wh;y z3tM)rMVf6n&)enCO0?aD07`c9mm9e{!Zpm zHDm3c<2o9lJ{G5mwLVw#@F))Rz%?mNzSNNK-JW_mG5rNszJ0EI?h*ILV=iLUQ=%N- z3_v6z`E>i}yfC+j7{vJ!D|@0Wa03l~@K?}K2F0q)6O-!Igt zN$C+l1`!~YK8gxMtk`}5CFw&`Jvxf>j9(pNR0e8Qyjy?m^fM8Ok9$d{k75u((I9|7 z1HEYBhZpiH!p81`1s@aIQ z>=m`zI1Qm1Ll2gt^(7CbkFGb60i(wB_R46+$D0#Ho|dPPD3m&P86xP*5jobYj|#B@ z`l253P;OJLzT@S&ek5;isL#tOOVsHo%Bg%=b$>n0u<}!&7)dF?(UrW59%sJhL(%bSs6~FG zPWDGcPJt+S!CwAPPQD%A_(yR9EnqJ<_o&1kPRc9$7 vTwbHjFEt;&5pDgN=1cw&96@-xsG_RGKMSARK% z77${pjndjgztQP<&!;*1X!b$Qrqd}4h0dF4h2kdD0lC0*Ip?DeAYmG0%yO*})uNjQ+$%p~IX_n;ER z08bHkG}%96c+`UkyS!)`3$qM}kOmqaOBecUPxZNHu#ICbDwsX72rb1P*;M&!KUScP zzBox_9aob4$SoeIOttyz00~8aqf(DmB$+W9ZMhcdN6fXHS)WDM90HjU-xRXUEhM?J z-ua$gS+pJg_`9j7^OnJhDIXtiUj7wq5=-4HYjP=E?` zeH>D2w2E;0eWAMGdzRI`o9~|9b0B8&rT3z$zR56KbWV7XW{~8eBXp_1ndj%e_U=KZ z$3iM(fB$2@{7n2*HZhycq5rUl zgSBcW^2vQzPV}RifGT$G!k;y&r+ zb^SrmHs8Pea~t`qGvYkx>5p3q_4#Ovdtx)TGos6;@1iK5g1A}2vQXsLO zQ}}AcO!x!`zw;@>qZVh#QAU^jttD~b@6dPD=R(j8wJ4BM!_%bp${9n|qo}P4e+Emz zZytP#KcKSnbvdB{4y900BkW?Y4^XV+mm>NwOfBw4sr&Fu=+9g4Sc;-MzUi6!Eg0^GK52vu{I9>l1Kfl<_bf! zx6eM9$x0-3O=Xu{5!7a;A>hLvn^!@O5C4eNj3`SjJ|ugf(W|CgkRjvKz|5z$sCkq( zb&p7mITU1X90l8SoJuN(z#JV3sU4uJ2=W{WGX1xEqFph>|`aQXF|Eb;FnX? zP6XBOLVZ7G0-kFVJj8y8IrNq!bes{`Y14ltb5)x7;8gkPo}Q0I)5Rd1AvCfs|DtKpU|~>-uln91E-S`PkXobc)Ji14qH1BKZ-E zh6-Z^2u~Ny+{A2BYpNQBqcN?@#Oy!ni*@1>HKw)uMhv0f3w=o34b+2;>zlsnxZDd7 z<7pomH%CNe&V<$LrBP#br?uqdz<9WE6Y(=9Il8Yt(?@tKZrs1N z)<@gT!64}BY-x$!T<(TV?z%bmLkq)}dzftj-q{SJ%dTC8OdV%Nhrvx3#m1w=( zo~;-uczOZiJZK(2eK0kbjl13@lrLiq(ACX$=64WuAX9NSG}c=ESNMXl#qu9xSN|sy zPhFzT749gS?z^Rus23y5r4~Q4L8&6zkL!@_WwgCSFCt{l=0e>$Z+e+%U)xEuU(UMDiLOMz?d=e*NlipyYssSLq@`tS<%-b zJmR}s(I3~|ONBHSX{2*N2004Ya3XZ~ajz*)LptJUKK{gwH-39<)hyY8| zo_R0;kYK@@WKi6?8Zl`O6;JSR&&1y-&*J`785EjW9qLJCV*!pj6y-64UxuZ<0sm=g zFZ3jPNiSkWaJ-D@j{S8prC+c|8WijZ|8ivi>=?ZN{8{%9RzGXzmX<<@DRg^*F`f2H&v_{2gO(mALN za3I|LJkO0H7MZ;v{|8(6`9tP?tFEI!`Q5P#t0d`6Bl7-OZzb>X@J535m+v_;Bcc(3 z+c$rsTA2D47RwP40P-8`D;R$HkE>CW#@mVZnLZc4YuMG$`z$jvnXZM{2ye~iPm zFT(#4@~B&b%dCL;*5fAH1T`$*&@QPG;q!g zH(8`;X48|xLQ(@DP__J%U}YP-K-5#RREZ?IWcua`0K@O$T_Om`FBTqgEa+R|E7S&s zMd5+8B`pX`Yr5poNO>8uNu0OyI~_pU1GsH01sNkM!>0*WcSALhG(%&rG*}M?0iF0Z zGqr3yGmMTt8N|Dr;C#00fSsQ-ln_BAVK7!z=mo?d-mH&=sPEmbek@yi1Nh9`Nme%T zZfE{#>5hJX#ej*gujr=&D`d`ANf`^Oc~csTq_WT?hylEQw+`Cft;*g!oJ2Slumk*A zc(iGqZ)uc0_QBU|*QH2GYXsq<#;#y-j^rtSyBg++?hBMQ~c&PXUepd%kApot*h!e;y33z9?2y97GNPs;U28(k>} z$Ed=VfO0D-B%v%oQ1Jzb9t)hY3x^>fVMwmPLlBPB1qEj0244gF;#@_y~BLa0P; z<=De{Anm{gJhHMu5F!C>={w-Cd%%mk%Dfl^elXWJa{ys5;%O8?5m(icCzFEi?p^jW ze?k$9eC1gwvR4k_PEOz)dd$eUYpsaTy&DH2kU&nXja|N5n^WY#Gt06^;QT_9SfpHSi9Bua3VlxByjVTpr`s3i?iBkP3$&r*hiPR zDVGKsEJz(2PCFSNdSCcZ=1uRgy=!b{z|`@fEi;c9BA&a3P!NkpjdiBv%ZsbcYudwy zf;kwE^C6C1p8Gwww)a;n{9BfeEv_>cTNnqvBpYOu?AuK(hf-hfL5PD4xf|A#}H$@c?A5`z23sC%oU^=fm^u`SNW30e-G-@kyWoe60mv?i>ODMCZnD zZLjR^?k*@Oz%cCHyLU~>bHkB)#>dC4-T4g-4aPR6nS1lfd+S6Z5ueY$efzf8a>41- zr)9$@61Qc9tXW!KUjB7fTPPH|1i6dF;=CipIF9QWvh|HPQ++j7cGd;GlV-LSw&sQ? zik_&*@^GFfD_VWOb9Y?mqRnfj=;i!=B-ZJynI}BS6+N@tZ;>hwz;u*3D>3mZcB)es>jh89oO*Gw~ggt zY%T4Aj2I&>>q0lWcDsaUWfJA;x5&@Kavry+Q0lit;2#_8WbY8RB9d)tnVOPnV90Zg zOguK(fwDQW2Bx8n+58CmMNY5!Wkwc;vaM?t zIrF`I+!G7a)R`)_d{VlY-qPHB(l=*zc2@DO=NJEq^8fgs95DV52?C%NSpTc~cN2g% z3moYjfkNI>MANj48&EV}*^bT)JSb>8)VG7}=&@AZcG$lZ^(f=i4gqqNMc511sx!~~ zVO`hX59YODWQNoF@FRR~*{ueY&JbhZ_;4|40e3)hcAghhQ^gSnZsd+o87G&8Na+!C zT9$6vaE_~aDy*#r74tVc`9}pOkLuY>pT81tVZp1*t4m$XZ+F;#zoYf-%TZ-*z<9!k zyiwjrhmU?o{y+OpBvtEbCCd1pKM2ldwQc%&YL2FC*rdGrJQtdPR2U0_EQC7FUYE-5 zs<{i7!c?F1R3DKD3#_+o$r!ga(Do+rmgKrhG_d|%EDRnPtbl^{KfF$Ln9UXb?!C{1 ze&?87@7$Xk4XQg+rW3ebp1n<1j*mCs)C$(z*T$r-$AZD*k}e(P@f@!0w-M?BL_~W4C>vVs4U5k zCipU#ojTn^QmgoSuVh8!v{dK&O|HNIUCH0Boh6XmkEim{9*WLVf@2nJ!tbG~nh`!a zsx)ywO_Dxz7t!q!Vkx=v2#5}sxFtvFa^<6l=7x%R*7AHl79}2&7a=k?thX-RKuAz4 ze%3xB=`e(cLGms6fKKi1CWN`8mD0PfRwyKz*=J{6HObs)`Kuaj1~)Y-)`E3BL3@Le z!W0~pJ%TyWD!pU_27iP?$uD6^nAQpmpmS5j<+K-dCiC&dk0P)-6R5PY{H_K zG?~rA!2GpeFeGM$4^GW{pB5L(@}*G=28w!&Nn|KuV>?t)oK_Dtgaj z5d1?3Gk0_PWi9(5tgF#^s4xL8!3$yiert%Nin$-HMVE5gDGRa~J*3KQH#jhJK(BhJ ziN&-Z*6M$Kwok)HXt{pIBja2jI`U{QB2p1Knjs@Dl{AYS-%r<*?Yw&Kh8m&J!=@EV z=uwouayl7$#>|OQWzPq}d)Gbi;j?J249F;T47T33P_q+VN3Addc9q>-zp4+-C~MNc?j!Suj8z2j zsk1&M7(EWoQ4!))O@Gir7iDOlZ6rAXH!_Y2t-J|XV8+_>rYxqZHlF0+4`5+if$k>! z3xC_iyTciIiF%-F*+v$n0))Gd1XBh5*Scznl2XUUb`~chn98Jz)A+O-TqUZ{_G52CSfVs5_E`u+j|?Y>mA-pRUOiC%!TzTtn#i4t61N zpF)8@#q-P6+1N2lA%vznNY0Kmy}oy+l9qZBnMyQ(*1Caj6PXZ_O3Y|X6;dqPof7^W z(AIv6(>Nd3KGs@FrOaHYpaV)&%C2ZyW*p)Ub(LVwzV+g3`rm2vB#F+*<;#te8gYTT7QI2MZi`{}8 z9dMGa5WVA#6`~HVCzkXbtAxiwj@?*u1>Fg7R3RrdSoNqZ|8=`;Pg(@{t3|n;)esmN zv5Mvu(Q*B5tAiKK?ULnU?s|4b1x_7qqb1R7MjqN$X zLSCP9T3q58wM$8}AWf*JZ~S}JxR>;@?K1mFwp5fz6#J8U)z?~VH3W^3;HrognQJ}H zv3l4#prmGVy?G2t>DHK?>M3Xu`Vw6>JZp=eZF(MigNqBgU!32rCwZJ@-`2a!H!ZQ( zpw*}O+n;^5@|6CJ)$4Uti8D)bPIvgU>Ms(nczv|mB>CnWgaMp255Cu6$^Tx}{Kwct z!X&IWs@dp-9o$m3?~?BOhRw|>)}b~ZE|1sIe7^=M`IKlA#8x22N_~HBG;n+@-%Wo8$7YA3OJ7zje>jmpV<0gxwLK|+~y3vid;B%Zp<-+3#*tA&|#aa;qym(=*xwO`Qi(Q z5Rqp@C=Mga0AmfYC$sY*Y*!F78xfz}t{QwnU)QOzIpepFF)SQ*@BhqYM?2O(J~d_k zIj`9gV04{uTysQuD>ejbR9zwSc8NS;8(jj62r261OtKR99GTa`)|7LHLwtMHnQ)<| zmNVH_1j++i{*3k$kU!${5?mY3Kl-^P^FZkX*AIOzI`hRTr(Tz7=+9lBk?m`z zOem>|ewY|2@oC+afutPS^Y~WwIV0&rW}3dq^K0jK+f6FP{j32U)|rdrhmxT3WTwmb30ivbz$BwBx6@p-I!V`k zPrJC9s^@JC;Xqwj9I2IXt_=(0qA z6(T&xu4`_HRvvO|Crf;~>$%}D93ZQ@0p00Uww|0B;g>kIW|I%~=AkDw%j z0BGgzMA9b>9+j(q-bJyt9OahxW`mK~aPa+d9+)~jcsun6-Z7OlUHq0{!=ZbSR5|JK zrgm~5D%JcXe`;cktH#yAeAE0M+9;vo&cw}bT;MS*pp%ds*7~RHnog&*`2nY}`bhn! zxR4%gY-0j7AJb@_vQ$-j!Xl4?uPex(Rlkupjep+*ZNYxN&cLeRBLK|n^oWYh0t_?- zQh%Ivm}&-)XG|Zsdi*c7t6fEs{n2DgF8pDmjg85m05oiGC(j2(mPXIMH29H#0)Bg6 zY>ub(rX;s|Li)~gVI|;^Q@o9VK5oMyK+=9XSpomm4_} len(r.rbuf) { - return errors.New("Invalid packet size, it is longer than buffer size") - } - if int(offset) > int(header.Size) { - return errors.New("Invalid packet size, it is shorter than header size") - } - _, err = io.ReadFull(r.transport, r.rbuf[offset:header.Size]) - if err != nil { - return err - } - r.rpos = offset - r.rsize = header.Size - r.final = header.Status != 0 - r.packet_type = header.PacketType - return nil -} - -func (r *tdsBuffer) BeginRead() (packetType, error) { - err := r.readNextPacket() - if err != nil { - return 0, err - } - return r.packet_type, nil -} - -func (r *tdsBuffer) ReadByte() (res byte, err error) { - if r.rpos == r.rsize { - if r.final { - return 0, io.EOF - } - err = r.readNextPacket() - if err != nil { - return 0, err - } - } - res = r.rbuf[r.rpos] - r.rpos++ - return res, nil -} - -func (r *tdsBuffer) byte() byte { - b, err := r.ReadByte() - if err != nil { - badStreamPanic(err) - } - return b -} - -func (r *tdsBuffer) ReadFull(buf []byte) { - _, err := io.ReadFull(r, buf[:]) - if err != nil { - badStreamPanic(err) - } -} - -func (r *tdsBuffer) uint64() uint64 { - var buf [8]byte - r.ReadFull(buf[:]) - return binary.LittleEndian.Uint64(buf[:]) -} - -func (r *tdsBuffer) int32() int32 { - return int32(r.uint32()) -} - -func (r *tdsBuffer) uint32() uint32 { - var buf [4]byte - r.ReadFull(buf[:]) - return binary.LittleEndian.Uint32(buf[:]) -} - -func (r *tdsBuffer) uint16() uint16 { - var buf [2]byte - r.ReadFull(buf[:]) - return binary.LittleEndian.Uint16(buf[:]) -} - -func (r *tdsBuffer) BVarChar() string { - l := int(r.byte()) - return r.readUcs2(l) -} - -func (r *tdsBuffer) UsVarChar() string { - l := int(r.uint16()) - return r.readUcs2(l) -} - -func (r *tdsBuffer) readUcs2(numchars int) string { - b := make([]byte, numchars*2) - r.ReadFull(b) - res, err := ucs22str(b) - if err != nil { - badStreamPanic(err) - } - return res -} - -func (r *tdsBuffer) Read(buf []byte) (copied int, err error) { - copied = 0 - err = nil - if r.rpos == r.rsize { - if r.final { - return 0, io.EOF - } - err = r.readNextPacket() - if err != nil { - return - } - } - copied = copy(buf, r.rbuf[r.rpos:r.rsize]) - r.rpos += uint16(copied) - return -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/charset.go b/vendor/github.com/denisenkom/go-mssqldb/charset.go deleted file mode 100644 index f1cc247a9..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/charset.go +++ /dev/null @@ -1,113 +0,0 @@ -package mssql - -type charsetMap struct { - sb [256]rune // single byte runes, -1 for a double byte character lead byte - db map[int]rune // double byte runes -} - -func collation2charset(col collation) *charsetMap { - // http://msdn.microsoft.com/en-us/library/ms144250.aspx - // http://msdn.microsoft.com/en-us/library/ms144250(v=sql.105).aspx - switch col.sortId { - case 30, 31, 32, 33, 34: - return cp437 - case 40, 41, 42, 44, 49, 55, 56, 57, 58, 59, 60, 61: - return cp850 - case 50, 51, 52, 53, 54, 71, 72, 73, 74, 75: - return cp1252 - case 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96: - return cp1250 - case 104, 105, 106, 107, 108: - return cp1251 - case 112, 113, 114, 121, 124: - return cp1253 - case 128, 129, 130: - return cp1254 - case 136, 137, 138: - return cp1255 - case 144, 145, 146: - return cp1256 - case 152, 153, 154, 155, 156, 157, 158, 159, 160: - return cp1257 - case 183, 184, 185, 186: - return cp1252 - case 192, 193: - return cp932 - case 194, 195: - return cp949 - case 196, 197: - return cp950 - case 198, 199: - return cp936 - case 200: - return cp932 - case 201: - return cp949 - case 202: - return cp950 - case 203: - return cp936 - case 204, 205, 206: - return cp874 - case 210, 211, 212, 213, 214, 215, 216, 217: - return cp1252 - } - // http://technet.microsoft.com/en-us/library/aa176553(v=sql.80).aspx - switch col.getLcid() { - case 0x001e, 0x041e: - return cp874 - case 0x0411, 0x10411: - return cp932 - case 0x0804, 0x1004, 0x20804: - return cp936 - case 0x0012, 0x0412: - return cp949 - case 0x0404, 0x1404, 0x0c04, 0x7c04, 0x30404: - return cp950 - case 0x041c, 0x041a, 0x0405, 0x040e, 0x104e, 0x0415, 0x0418, 0x041b, 0x0424, 0x1040e: - return cp1250 - case 0x0423, 0x0402, 0x042f, 0x0419, 0x081a, 0x0c1a, 0x0422, 0x043f, 0x0444, 0x082c: - return cp1251 - case 0x0408: - return cp1253 - case 0x041f, 0x042c, 0x0443: - return cp1254 - case 0x040d: - return cp1255 - case 0x0401, 0x0801, 0xc01, 0x1001, 0x1401, 0x1801, 0x1c01, 0x2001, 0x2401, 0x2801, 0x2c01, 0x3001, 0x3401, 0x3801, 0x3c01, 0x4001, 0x0429, 0x0420: - return cp1256 - case 0x0425, 0x0426, 0x0427, 0x0827: - return cp1257 - case 0x042a: - return cp1258 - case 0x0439, 0x045a, 0x0465: - return nil - } - return cp1252 -} - -func charset2utf8(col collation, s []byte) string { - cm := collation2charset(col) - if cm == nil { - return string(s) - } - buf := make([]rune, 0, len(s)) - for i := 0; i < len(s); i++ { - ch := cm.sb[s[i]] - if ch == -1 { - if i+1 == len(s) { - ch = 0xfffd - } else { - n := int(s[i+1]) + (int(s[i]) << 8) - i++ - var ok bool - ch, ok = cm.db[n] - if !ok { - ch = 0xfffd - } - } - } - buf = append(buf, ch) - } - return string(buf) -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/collation.go b/vendor/github.com/denisenkom/go-mssqldb/collation.go deleted file mode 100644 index ac9cf20b7..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/collation.go +++ /dev/null @@ -1,39 +0,0 @@ -package mssql - -import ( - "encoding/binary" - "io" -) - -// http://msdn.microsoft.com/en-us/library/dd340437.aspx - -type collation struct { - lcidAndFlags uint32 - sortId uint8 -} - -func (c collation) getLcid() uint32 { - return c.lcidAndFlags & 0x000fffff -} - -func (c collation) getFlags() uint32 { - return (c.lcidAndFlags & 0x0ff00000) >> 20 -} - -func (c collation) getVersion() uint32 { - return (c.lcidAndFlags & 0xf0000000) >> 28 -} - -func readCollation(r *tdsBuffer) (res collation) { - res.lcidAndFlags = r.uint32() - res.sortId = r.byte() - return -} - -func writeCollation(w io.Writer, col collation) (err error) { - if err = binary.Write(w, binary.LittleEndian, col.lcidAndFlags); err != nil { - return - } - err = binary.Write(w, binary.LittleEndian, col.sortId) - return -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp1250.go b/vendor/github.com/denisenkom/go-mssqldb/cp1250.go deleted file mode 100644 index 8207366be..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp1250.go +++ /dev/null @@ -1,262 +0,0 @@ -package mssql - -var cp1250 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000A, //LINE FEED - 0x000B, //VERTICAL TABULATION - 0x000C, //FORM FEED - 0x000D, //CARRIAGE RETURN - 0x000E, //SHIFT OUT - 0x000F, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001A, //SUBSTITUTE - 0x001B, //ESCAPE - 0x001C, //FILE SEPARATOR - 0x001D, //GROUP SEPARATOR - 0x001E, //RECORD SEPARATOR - 0x001F, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002A, //ASTERISK - 0x002B, //PLUS SIGN - 0x002C, //COMMA - 0x002D, //HYPHEN-MINUS - 0x002E, //FULL STOP - 0x002F, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003A, //COLON - 0x003B, //SEMICOLON - 0x003C, //LESS-THAN SIGN - 0x003D, //EQUALS SIGN - 0x003E, //GREATER-THAN SIGN - 0x003F, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004A, //LATIN CAPITAL LETTER J - 0x004B, //LATIN CAPITAL LETTER K - 0x004C, //LATIN CAPITAL LETTER L - 0x004D, //LATIN CAPITAL LETTER M - 0x004E, //LATIN CAPITAL LETTER N - 0x004F, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005A, //LATIN CAPITAL LETTER Z - 0x005B, //LEFT SQUARE BRACKET - 0x005C, //REVERSE SOLIDUS - 0x005D, //RIGHT SQUARE BRACKET - 0x005E, //CIRCUMFLEX ACCENT - 0x005F, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006A, //LATIN SMALL LETTER J - 0x006B, //LATIN SMALL LETTER K - 0x006C, //LATIN SMALL LETTER L - 0x006D, //LATIN SMALL LETTER M - 0x006E, //LATIN SMALL LETTER N - 0x006F, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007A, //LATIN SMALL LETTER Z - 0x007B, //LEFT CURLY BRACKET - 0x007C, //VERTICAL LINE - 0x007D, //RIGHT CURLY BRACKET - 0x007E, //TILDE - 0x007F, //DELETE - 0x20AC, //EURO SIGN - 0xFFFD, //UNDEFINED - 0x201A, //SINGLE LOW-9 QUOTATION MARK - 0xFFFD, //UNDEFINED - 0x201E, //DOUBLE LOW-9 QUOTATION MARK - 0x2026, //HORIZONTAL ELLIPSIS - 0x2020, //DAGGER - 0x2021, //DOUBLE DAGGER - 0xFFFD, //UNDEFINED - 0x2030, //PER MILLE SIGN - 0x0160, //LATIN CAPITAL LETTER S WITH CARON - 0x2039, //SINGLE LEFT-POINTING ANGLE QUOTATION MARK - 0x015A, //LATIN CAPITAL LETTER S WITH ACUTE - 0x0164, //LATIN CAPITAL LETTER T WITH CARON - 0x017D, //LATIN CAPITAL LETTER Z WITH CARON - 0x0179, //LATIN CAPITAL LETTER Z WITH ACUTE - 0xFFFD, //UNDEFINED - 0x2018, //LEFT SINGLE QUOTATION MARK - 0x2019, //RIGHT SINGLE QUOTATION MARK - 0x201C, //LEFT DOUBLE QUOTATION MARK - 0x201D, //RIGHT DOUBLE QUOTATION MARK - 0x2022, //BULLET - 0x2013, //EN DASH - 0x2014, //EM DASH - 0xFFFD, //UNDEFINED - 0x2122, //TRADE MARK SIGN - 0x0161, //LATIN SMALL LETTER S WITH CARON - 0x203A, //SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - 0x015B, //LATIN SMALL LETTER S WITH ACUTE - 0x0165, //LATIN SMALL LETTER T WITH CARON - 0x017E, //LATIN SMALL LETTER Z WITH CARON - 0x017A, //LATIN SMALL LETTER Z WITH ACUTE - 0x00A0, //NO-BREAK SPACE - 0x02C7, //CARON - 0x02D8, //BREVE - 0x0141, //LATIN CAPITAL LETTER L WITH STROKE - 0x00A4, //CURRENCY SIGN - 0x0104, //LATIN CAPITAL LETTER A WITH OGONEK - 0x00A6, //BROKEN BAR - 0x00A7, //SECTION SIGN - 0x00A8, //DIAERESIS - 0x00A9, //COPYRIGHT SIGN - 0x015E, //LATIN CAPITAL LETTER S WITH CEDILLA - 0x00AB, //LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00AC, //NOT SIGN - 0x00AD, //SOFT HYPHEN - 0x00AE, //REGISTERED SIGN - 0x017B, //LATIN CAPITAL LETTER Z WITH DOT ABOVE - 0x00B0, //DEGREE SIGN - 0x00B1, //PLUS-MINUS SIGN - 0x02DB, //OGONEK - 0x0142, //LATIN SMALL LETTER L WITH STROKE - 0x00B4, //ACUTE ACCENT - 0x00B5, //MICRO SIGN - 0x00B6, //PILCROW SIGN - 0x00B7, //MIDDLE DOT - 0x00B8, //CEDILLA - 0x0105, //LATIN SMALL LETTER A WITH OGONEK - 0x015F, //LATIN SMALL LETTER S WITH CEDILLA - 0x00BB, //RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x013D, //LATIN CAPITAL LETTER L WITH CARON - 0x02DD, //DOUBLE ACUTE ACCENT - 0x013E, //LATIN SMALL LETTER L WITH CARON - 0x017C, //LATIN SMALL LETTER Z WITH DOT ABOVE - 0x0154, //LATIN CAPITAL LETTER R WITH ACUTE - 0x00C1, //LATIN CAPITAL LETTER A WITH ACUTE - 0x00C2, //LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x0102, //LATIN CAPITAL LETTER A WITH BREVE - 0x00C4, //LATIN CAPITAL LETTER A WITH DIAERESIS - 0x0139, //LATIN CAPITAL LETTER L WITH ACUTE - 0x0106, //LATIN CAPITAL LETTER C WITH ACUTE - 0x00C7, //LATIN CAPITAL LETTER C WITH CEDILLA - 0x010C, //LATIN CAPITAL LETTER C WITH CARON - 0x00C9, //LATIN CAPITAL LETTER E WITH ACUTE - 0x0118, //LATIN CAPITAL LETTER E WITH OGONEK - 0x00CB, //LATIN CAPITAL LETTER E WITH DIAERESIS - 0x011A, //LATIN CAPITAL LETTER E WITH CARON - 0x00CD, //LATIN CAPITAL LETTER I WITH ACUTE - 0x00CE, //LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x010E, //LATIN CAPITAL LETTER D WITH CARON - 0x0110, //LATIN CAPITAL LETTER D WITH STROKE - 0x0143, //LATIN CAPITAL LETTER N WITH ACUTE - 0x0147, //LATIN CAPITAL LETTER N WITH CARON - 0x00D3, //LATIN CAPITAL LETTER O WITH ACUTE - 0x00D4, //LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x0150, //LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - 0x00D6, //LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00D7, //MULTIPLICATION SIGN - 0x0158, //LATIN CAPITAL LETTER R WITH CARON - 0x016E, //LATIN CAPITAL LETTER U WITH RING ABOVE - 0x00DA, //LATIN CAPITAL LETTER U WITH ACUTE - 0x0170, //LATIN CAPITAL LETTER U WITH DOUBLE ACUTE - 0x00DC, //LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00DD, //LATIN CAPITAL LETTER Y WITH ACUTE - 0x0162, //LATIN CAPITAL LETTER T WITH CEDILLA - 0x00DF, //LATIN SMALL LETTER SHARP S - 0x0155, //LATIN SMALL LETTER R WITH ACUTE - 0x00E1, //LATIN SMALL LETTER A WITH ACUTE - 0x00E2, //LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x0103, //LATIN SMALL LETTER A WITH BREVE - 0x00E4, //LATIN SMALL LETTER A WITH DIAERESIS - 0x013A, //LATIN SMALL LETTER L WITH ACUTE - 0x0107, //LATIN SMALL LETTER C WITH ACUTE - 0x00E7, //LATIN SMALL LETTER C WITH CEDILLA - 0x010D, //LATIN SMALL LETTER C WITH CARON - 0x00E9, //LATIN SMALL LETTER E WITH ACUTE - 0x0119, //LATIN SMALL LETTER E WITH OGONEK - 0x00EB, //LATIN SMALL LETTER E WITH DIAERESIS - 0x011B, //LATIN SMALL LETTER E WITH CARON - 0x00ED, //LATIN SMALL LETTER I WITH ACUTE - 0x00EE, //LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x010F, //LATIN SMALL LETTER D WITH CARON - 0x0111, //LATIN SMALL LETTER D WITH STROKE - 0x0144, //LATIN SMALL LETTER N WITH ACUTE - 0x0148, //LATIN SMALL LETTER N WITH CARON - 0x00F3, //LATIN SMALL LETTER O WITH ACUTE - 0x00F4, //LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x0151, //LATIN SMALL LETTER O WITH DOUBLE ACUTE - 0x00F6, //LATIN SMALL LETTER O WITH DIAERESIS - 0x00F7, //DIVISION SIGN - 0x0159, //LATIN SMALL LETTER R WITH CARON - 0x016F, //LATIN SMALL LETTER U WITH RING ABOVE - 0x00FA, //LATIN SMALL LETTER U WITH ACUTE - 0x0171, //LATIN SMALL LETTER U WITH DOUBLE ACUTE - 0x00FC, //LATIN SMALL LETTER U WITH DIAERESIS - 0x00FD, //LATIN SMALL LETTER Y WITH ACUTE - 0x0163, //LATIN SMALL LETTER T WITH CEDILLA - 0x02D9, //DOT ABOVE - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp1251.go b/vendor/github.com/denisenkom/go-mssqldb/cp1251.go deleted file mode 100644 index f5b81c393..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp1251.go +++ /dev/null @@ -1,262 +0,0 @@ -package mssql - -var cp1251 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000A, //LINE FEED - 0x000B, //VERTICAL TABULATION - 0x000C, //FORM FEED - 0x000D, //CARRIAGE RETURN - 0x000E, //SHIFT OUT - 0x000F, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001A, //SUBSTITUTE - 0x001B, //ESCAPE - 0x001C, //FILE SEPARATOR - 0x001D, //GROUP SEPARATOR - 0x001E, //RECORD SEPARATOR - 0x001F, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002A, //ASTERISK - 0x002B, //PLUS SIGN - 0x002C, //COMMA - 0x002D, //HYPHEN-MINUS - 0x002E, //FULL STOP - 0x002F, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003A, //COLON - 0x003B, //SEMICOLON - 0x003C, //LESS-THAN SIGN - 0x003D, //EQUALS SIGN - 0x003E, //GREATER-THAN SIGN - 0x003F, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004A, //LATIN CAPITAL LETTER J - 0x004B, //LATIN CAPITAL LETTER K - 0x004C, //LATIN CAPITAL LETTER L - 0x004D, //LATIN CAPITAL LETTER M - 0x004E, //LATIN CAPITAL LETTER N - 0x004F, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005A, //LATIN CAPITAL LETTER Z - 0x005B, //LEFT SQUARE BRACKET - 0x005C, //REVERSE SOLIDUS - 0x005D, //RIGHT SQUARE BRACKET - 0x005E, //CIRCUMFLEX ACCENT - 0x005F, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006A, //LATIN SMALL LETTER J - 0x006B, //LATIN SMALL LETTER K - 0x006C, //LATIN SMALL LETTER L - 0x006D, //LATIN SMALL LETTER M - 0x006E, //LATIN SMALL LETTER N - 0x006F, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007A, //LATIN SMALL LETTER Z - 0x007B, //LEFT CURLY BRACKET - 0x007C, //VERTICAL LINE - 0x007D, //RIGHT CURLY BRACKET - 0x007E, //TILDE - 0x007F, //DELETE - 0x0402, //CYRILLIC CAPITAL LETTER DJE - 0x0403, //CYRILLIC CAPITAL LETTER GJE - 0x201A, //SINGLE LOW-9 QUOTATION MARK - 0x0453, //CYRILLIC SMALL LETTER GJE - 0x201E, //DOUBLE LOW-9 QUOTATION MARK - 0x2026, //HORIZONTAL ELLIPSIS - 0x2020, //DAGGER - 0x2021, //DOUBLE DAGGER - 0x20AC, //EURO SIGN - 0x2030, //PER MILLE SIGN - 0x0409, //CYRILLIC CAPITAL LETTER LJE - 0x2039, //SINGLE LEFT-POINTING ANGLE QUOTATION MARK - 0x040A, //CYRILLIC CAPITAL LETTER NJE - 0x040C, //CYRILLIC CAPITAL LETTER KJE - 0x040B, //CYRILLIC CAPITAL LETTER TSHE - 0x040F, //CYRILLIC CAPITAL LETTER DZHE - 0x0452, //CYRILLIC SMALL LETTER DJE - 0x2018, //LEFT SINGLE QUOTATION MARK - 0x2019, //RIGHT SINGLE QUOTATION MARK - 0x201C, //LEFT DOUBLE QUOTATION MARK - 0x201D, //RIGHT DOUBLE QUOTATION MARK - 0x2022, //BULLET - 0x2013, //EN DASH - 0x2014, //EM DASH - 0xFFFD, //UNDEFINED - 0x2122, //TRADE MARK SIGN - 0x0459, //CYRILLIC SMALL LETTER LJE - 0x203A, //SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - 0x045A, //CYRILLIC SMALL LETTER NJE - 0x045C, //CYRILLIC SMALL LETTER KJE - 0x045B, //CYRILLIC SMALL LETTER TSHE - 0x045F, //CYRILLIC SMALL LETTER DZHE - 0x00A0, //NO-BREAK SPACE - 0x040E, //CYRILLIC CAPITAL LETTER SHORT U - 0x045E, //CYRILLIC SMALL LETTER SHORT U - 0x0408, //CYRILLIC CAPITAL LETTER JE - 0x00A4, //CURRENCY SIGN - 0x0490, //CYRILLIC CAPITAL LETTER GHE WITH UPTURN - 0x00A6, //BROKEN BAR - 0x00A7, //SECTION SIGN - 0x0401, //CYRILLIC CAPITAL LETTER IO - 0x00A9, //COPYRIGHT SIGN - 0x0404, //CYRILLIC CAPITAL LETTER UKRAINIAN IE - 0x00AB, //LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00AC, //NOT SIGN - 0x00AD, //SOFT HYPHEN - 0x00AE, //REGISTERED SIGN - 0x0407, //CYRILLIC CAPITAL LETTER YI - 0x00B0, //DEGREE SIGN - 0x00B1, //PLUS-MINUS SIGN - 0x0406, //CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - 0x0456, //CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - 0x0491, //CYRILLIC SMALL LETTER GHE WITH UPTURN - 0x00B5, //MICRO SIGN - 0x00B6, //PILCROW SIGN - 0x00B7, //MIDDLE DOT - 0x0451, //CYRILLIC SMALL LETTER IO - 0x2116, //NUMERO SIGN - 0x0454, //CYRILLIC SMALL LETTER UKRAINIAN IE - 0x00BB, //RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x0458, //CYRILLIC SMALL LETTER JE - 0x0405, //CYRILLIC CAPITAL LETTER DZE - 0x0455, //CYRILLIC SMALL LETTER DZE - 0x0457, //CYRILLIC SMALL LETTER YI - 0x0410, //CYRILLIC CAPITAL LETTER A - 0x0411, //CYRILLIC CAPITAL LETTER BE - 0x0412, //CYRILLIC CAPITAL LETTER VE - 0x0413, //CYRILLIC CAPITAL LETTER GHE - 0x0414, //CYRILLIC CAPITAL LETTER DE - 0x0415, //CYRILLIC CAPITAL LETTER IE - 0x0416, //CYRILLIC CAPITAL LETTER ZHE - 0x0417, //CYRILLIC CAPITAL LETTER ZE - 0x0418, //CYRILLIC CAPITAL LETTER I - 0x0419, //CYRILLIC CAPITAL LETTER SHORT I - 0x041A, //CYRILLIC CAPITAL LETTER KA - 0x041B, //CYRILLIC CAPITAL LETTER EL - 0x041C, //CYRILLIC CAPITAL LETTER EM - 0x041D, //CYRILLIC CAPITAL LETTER EN - 0x041E, //CYRILLIC CAPITAL LETTER O - 0x041F, //CYRILLIC CAPITAL LETTER PE - 0x0420, //CYRILLIC CAPITAL LETTER ER - 0x0421, //CYRILLIC CAPITAL LETTER ES - 0x0422, //CYRILLIC CAPITAL LETTER TE - 0x0423, //CYRILLIC CAPITAL LETTER U - 0x0424, //CYRILLIC CAPITAL LETTER EF - 0x0425, //CYRILLIC CAPITAL LETTER HA - 0x0426, //CYRILLIC CAPITAL LETTER TSE - 0x0427, //CYRILLIC CAPITAL LETTER CHE - 0x0428, //CYRILLIC CAPITAL LETTER SHA - 0x0429, //CYRILLIC CAPITAL LETTER SHCHA - 0x042A, //CYRILLIC CAPITAL LETTER HARD SIGN - 0x042B, //CYRILLIC CAPITAL LETTER YERU - 0x042C, //CYRILLIC CAPITAL LETTER SOFT SIGN - 0x042D, //CYRILLIC CAPITAL LETTER E - 0x042E, //CYRILLIC CAPITAL LETTER YU - 0x042F, //CYRILLIC CAPITAL LETTER YA - 0x0430, //CYRILLIC SMALL LETTER A - 0x0431, //CYRILLIC SMALL LETTER BE - 0x0432, //CYRILLIC SMALL LETTER VE - 0x0433, //CYRILLIC SMALL LETTER GHE - 0x0434, //CYRILLIC SMALL LETTER DE - 0x0435, //CYRILLIC SMALL LETTER IE - 0x0436, //CYRILLIC SMALL LETTER ZHE - 0x0437, //CYRILLIC SMALL LETTER ZE - 0x0438, //CYRILLIC SMALL LETTER I - 0x0439, //CYRILLIC SMALL LETTER SHORT I - 0x043A, //CYRILLIC SMALL LETTER KA - 0x043B, //CYRILLIC SMALL LETTER EL - 0x043C, //CYRILLIC SMALL LETTER EM - 0x043D, //CYRILLIC SMALL LETTER EN - 0x043E, //CYRILLIC SMALL LETTER O - 0x043F, //CYRILLIC SMALL LETTER PE - 0x0440, //CYRILLIC SMALL LETTER ER - 0x0441, //CYRILLIC SMALL LETTER ES - 0x0442, //CYRILLIC SMALL LETTER TE - 0x0443, //CYRILLIC SMALL LETTER U - 0x0444, //CYRILLIC SMALL LETTER EF - 0x0445, //CYRILLIC SMALL LETTER HA - 0x0446, //CYRILLIC SMALL LETTER TSE - 0x0447, //CYRILLIC SMALL LETTER CHE - 0x0448, //CYRILLIC SMALL LETTER SHA - 0x0449, //CYRILLIC SMALL LETTER SHCHA - 0x044A, //CYRILLIC SMALL LETTER HARD SIGN - 0x044B, //CYRILLIC SMALL LETTER YERU - 0x044C, //CYRILLIC SMALL LETTER SOFT SIGN - 0x044D, //CYRILLIC SMALL LETTER E - 0x044E, //CYRILLIC SMALL LETTER YU - 0x044F, //CYRILLIC SMALL LETTER YA - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp1252.go b/vendor/github.com/denisenkom/go-mssqldb/cp1252.go deleted file mode 100644 index ed705d35a..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp1252.go +++ /dev/null @@ -1,262 +0,0 @@ -package mssql - -var cp1252 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000A, //LINE FEED - 0x000B, //VERTICAL TABULATION - 0x000C, //FORM FEED - 0x000D, //CARRIAGE RETURN - 0x000E, //SHIFT OUT - 0x000F, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001A, //SUBSTITUTE - 0x001B, //ESCAPE - 0x001C, //FILE SEPARATOR - 0x001D, //GROUP SEPARATOR - 0x001E, //RECORD SEPARATOR - 0x001F, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002A, //ASTERISK - 0x002B, //PLUS SIGN - 0x002C, //COMMA - 0x002D, //HYPHEN-MINUS - 0x002E, //FULL STOP - 0x002F, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003A, //COLON - 0x003B, //SEMICOLON - 0x003C, //LESS-THAN SIGN - 0x003D, //EQUALS SIGN - 0x003E, //GREATER-THAN SIGN - 0x003F, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004A, //LATIN CAPITAL LETTER J - 0x004B, //LATIN CAPITAL LETTER K - 0x004C, //LATIN CAPITAL LETTER L - 0x004D, //LATIN CAPITAL LETTER M - 0x004E, //LATIN CAPITAL LETTER N - 0x004F, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005A, //LATIN CAPITAL LETTER Z - 0x005B, //LEFT SQUARE BRACKET - 0x005C, //REVERSE SOLIDUS - 0x005D, //RIGHT SQUARE BRACKET - 0x005E, //CIRCUMFLEX ACCENT - 0x005F, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006A, //LATIN SMALL LETTER J - 0x006B, //LATIN SMALL LETTER K - 0x006C, //LATIN SMALL LETTER L - 0x006D, //LATIN SMALL LETTER M - 0x006E, //LATIN SMALL LETTER N - 0x006F, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007A, //LATIN SMALL LETTER Z - 0x007B, //LEFT CURLY BRACKET - 0x007C, //VERTICAL LINE - 0x007D, //RIGHT CURLY BRACKET - 0x007E, //TILDE - 0x007F, //DELETE - 0x20AC, //EURO SIGN - 0xFFFD, //UNDEFINED - 0x201A, //SINGLE LOW-9 QUOTATION MARK - 0x0192, //LATIN SMALL LETTER F WITH HOOK - 0x201E, //DOUBLE LOW-9 QUOTATION MARK - 0x2026, //HORIZONTAL ELLIPSIS - 0x2020, //DAGGER - 0x2021, //DOUBLE DAGGER - 0x02C6, //MODIFIER LETTER CIRCUMFLEX ACCENT - 0x2030, //PER MILLE SIGN - 0x0160, //LATIN CAPITAL LETTER S WITH CARON - 0x2039, //SINGLE LEFT-POINTING ANGLE QUOTATION MARK - 0x0152, //LATIN CAPITAL LIGATURE OE - 0xFFFD, //UNDEFINED - 0x017D, //LATIN CAPITAL LETTER Z WITH CARON - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x2018, //LEFT SINGLE QUOTATION MARK - 0x2019, //RIGHT SINGLE QUOTATION MARK - 0x201C, //LEFT DOUBLE QUOTATION MARK - 0x201D, //RIGHT DOUBLE QUOTATION MARK - 0x2022, //BULLET - 0x2013, //EN DASH - 0x2014, //EM DASH - 0x02DC, //SMALL TILDE - 0x2122, //TRADE MARK SIGN - 0x0161, //LATIN SMALL LETTER S WITH CARON - 0x203A, //SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - 0x0153, //LATIN SMALL LIGATURE OE - 0xFFFD, //UNDEFINED - 0x017E, //LATIN SMALL LETTER Z WITH CARON - 0x0178, //LATIN CAPITAL LETTER Y WITH DIAERESIS - 0x00A0, //NO-BREAK SPACE - 0x00A1, //INVERTED EXCLAMATION MARK - 0x00A2, //CENT SIGN - 0x00A3, //POUND SIGN - 0x00A4, //CURRENCY SIGN - 0x00A5, //YEN SIGN - 0x00A6, //BROKEN BAR - 0x00A7, //SECTION SIGN - 0x00A8, //DIAERESIS - 0x00A9, //COPYRIGHT SIGN - 0x00AA, //FEMININE ORDINAL INDICATOR - 0x00AB, //LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00AC, //NOT SIGN - 0x00AD, //SOFT HYPHEN - 0x00AE, //REGISTERED SIGN - 0x00AF, //MACRON - 0x00B0, //DEGREE SIGN - 0x00B1, //PLUS-MINUS SIGN - 0x00B2, //SUPERSCRIPT TWO - 0x00B3, //SUPERSCRIPT THREE - 0x00B4, //ACUTE ACCENT - 0x00B5, //MICRO SIGN - 0x00B6, //PILCROW SIGN - 0x00B7, //MIDDLE DOT - 0x00B8, //CEDILLA - 0x00B9, //SUPERSCRIPT ONE - 0x00BA, //MASCULINE ORDINAL INDICATOR - 0x00BB, //RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00BC, //VULGAR FRACTION ONE QUARTER - 0x00BD, //VULGAR FRACTION ONE HALF - 0x00BE, //VULGAR FRACTION THREE QUARTERS - 0x00BF, //INVERTED QUESTION MARK - 0x00C0, //LATIN CAPITAL LETTER A WITH GRAVE - 0x00C1, //LATIN CAPITAL LETTER A WITH ACUTE - 0x00C2, //LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x00C3, //LATIN CAPITAL LETTER A WITH TILDE - 0x00C4, //LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00C5, //LATIN CAPITAL LETTER A WITH RING ABOVE - 0x00C6, //LATIN CAPITAL LETTER AE - 0x00C7, //LATIN CAPITAL LETTER C WITH CEDILLA - 0x00C8, //LATIN CAPITAL LETTER E WITH GRAVE - 0x00C9, //LATIN CAPITAL LETTER E WITH ACUTE - 0x00CA, //LATIN CAPITAL LETTER E WITH CIRCUMFLEX - 0x00CB, //LATIN CAPITAL LETTER E WITH DIAERESIS - 0x00CC, //LATIN CAPITAL LETTER I WITH GRAVE - 0x00CD, //LATIN CAPITAL LETTER I WITH ACUTE - 0x00CE, //LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x00CF, //LATIN CAPITAL LETTER I WITH DIAERESIS - 0x00D0, //LATIN CAPITAL LETTER ETH - 0x00D1, //LATIN CAPITAL LETTER N WITH TILDE - 0x00D2, //LATIN CAPITAL LETTER O WITH GRAVE - 0x00D3, //LATIN CAPITAL LETTER O WITH ACUTE - 0x00D4, //LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x00D5, //LATIN CAPITAL LETTER O WITH TILDE - 0x00D6, //LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00D7, //MULTIPLICATION SIGN - 0x00D8, //LATIN CAPITAL LETTER O WITH STROKE - 0x00D9, //LATIN CAPITAL LETTER U WITH GRAVE - 0x00DA, //LATIN CAPITAL LETTER U WITH ACUTE - 0x00DB, //LATIN CAPITAL LETTER U WITH CIRCUMFLEX - 0x00DC, //LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00DD, //LATIN CAPITAL LETTER Y WITH ACUTE - 0x00DE, //LATIN CAPITAL LETTER THORN - 0x00DF, //LATIN SMALL LETTER SHARP S - 0x00E0, //LATIN SMALL LETTER A WITH GRAVE - 0x00E1, //LATIN SMALL LETTER A WITH ACUTE - 0x00E2, //LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00E3, //LATIN SMALL LETTER A WITH TILDE - 0x00E4, //LATIN SMALL LETTER A WITH DIAERESIS - 0x00E5, //LATIN SMALL LETTER A WITH RING ABOVE - 0x00E6, //LATIN SMALL LETTER AE - 0x00E7, //LATIN SMALL LETTER C WITH CEDILLA - 0x00E8, //LATIN SMALL LETTER E WITH GRAVE - 0x00E9, //LATIN SMALL LETTER E WITH ACUTE - 0x00EA, //LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00EB, //LATIN SMALL LETTER E WITH DIAERESIS - 0x00EC, //LATIN SMALL LETTER I WITH GRAVE - 0x00ED, //LATIN SMALL LETTER I WITH ACUTE - 0x00EE, //LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00EF, //LATIN SMALL LETTER I WITH DIAERESIS - 0x00F0, //LATIN SMALL LETTER ETH - 0x00F1, //LATIN SMALL LETTER N WITH TILDE - 0x00F2, //LATIN SMALL LETTER O WITH GRAVE - 0x00F3, //LATIN SMALL LETTER O WITH ACUTE - 0x00F4, //LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00F5, //LATIN SMALL LETTER O WITH TILDE - 0x00F6, //LATIN SMALL LETTER O WITH DIAERESIS - 0x00F7, //DIVISION SIGN - 0x00F8, //LATIN SMALL LETTER O WITH STROKE - 0x00F9, //LATIN SMALL LETTER U WITH GRAVE - 0x00FA, //LATIN SMALL LETTER U WITH ACUTE - 0x00FB, //LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00FC, //LATIN SMALL LETTER U WITH DIAERESIS - 0x00FD, //LATIN SMALL LETTER Y WITH ACUTE - 0x00FE, //LATIN SMALL LETTER THORN - 0x00FF, //LATIN SMALL LETTER Y WITH DIAERESIS - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp1253.go b/vendor/github.com/denisenkom/go-mssqldb/cp1253.go deleted file mode 100644 index cb1e1a762..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp1253.go +++ /dev/null @@ -1,262 +0,0 @@ -package mssql - -var cp1253 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000A, //LINE FEED - 0x000B, //VERTICAL TABULATION - 0x000C, //FORM FEED - 0x000D, //CARRIAGE RETURN - 0x000E, //SHIFT OUT - 0x000F, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001A, //SUBSTITUTE - 0x001B, //ESCAPE - 0x001C, //FILE SEPARATOR - 0x001D, //GROUP SEPARATOR - 0x001E, //RECORD SEPARATOR - 0x001F, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002A, //ASTERISK - 0x002B, //PLUS SIGN - 0x002C, //COMMA - 0x002D, //HYPHEN-MINUS - 0x002E, //FULL STOP - 0x002F, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003A, //COLON - 0x003B, //SEMICOLON - 0x003C, //LESS-THAN SIGN - 0x003D, //EQUALS SIGN - 0x003E, //GREATER-THAN SIGN - 0x003F, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004A, //LATIN CAPITAL LETTER J - 0x004B, //LATIN CAPITAL LETTER K - 0x004C, //LATIN CAPITAL LETTER L - 0x004D, //LATIN CAPITAL LETTER M - 0x004E, //LATIN CAPITAL LETTER N - 0x004F, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005A, //LATIN CAPITAL LETTER Z - 0x005B, //LEFT SQUARE BRACKET - 0x005C, //REVERSE SOLIDUS - 0x005D, //RIGHT SQUARE BRACKET - 0x005E, //CIRCUMFLEX ACCENT - 0x005F, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006A, //LATIN SMALL LETTER J - 0x006B, //LATIN SMALL LETTER K - 0x006C, //LATIN SMALL LETTER L - 0x006D, //LATIN SMALL LETTER M - 0x006E, //LATIN SMALL LETTER N - 0x006F, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007A, //LATIN SMALL LETTER Z - 0x007B, //LEFT CURLY BRACKET - 0x007C, //VERTICAL LINE - 0x007D, //RIGHT CURLY BRACKET - 0x007E, //TILDE - 0x007F, //DELETE - 0x20AC, //EURO SIGN - 0xFFFD, //UNDEFINED - 0x201A, //SINGLE LOW-9 QUOTATION MARK - 0x0192, //LATIN SMALL LETTER F WITH HOOK - 0x201E, //DOUBLE LOW-9 QUOTATION MARK - 0x2026, //HORIZONTAL ELLIPSIS - 0x2020, //DAGGER - 0x2021, //DOUBLE DAGGER - 0xFFFD, //UNDEFINED - 0x2030, //PER MILLE SIGN - 0xFFFD, //UNDEFINED - 0x2039, //SINGLE LEFT-POINTING ANGLE QUOTATION MARK - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x2018, //LEFT SINGLE QUOTATION MARK - 0x2019, //RIGHT SINGLE QUOTATION MARK - 0x201C, //LEFT DOUBLE QUOTATION MARK - 0x201D, //RIGHT DOUBLE QUOTATION MARK - 0x2022, //BULLET - 0x2013, //EN DASH - 0x2014, //EM DASH - 0xFFFD, //UNDEFINED - 0x2122, //TRADE MARK SIGN - 0xFFFD, //UNDEFINED - 0x203A, //SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x00A0, //NO-BREAK SPACE - 0x0385, //GREEK DIALYTIKA TONOS - 0x0386, //GREEK CAPITAL LETTER ALPHA WITH TONOS - 0x00A3, //POUND SIGN - 0x00A4, //CURRENCY SIGN - 0x00A5, //YEN SIGN - 0x00A6, //BROKEN BAR - 0x00A7, //SECTION SIGN - 0x00A8, //DIAERESIS - 0x00A9, //COPYRIGHT SIGN - 0xFFFD, //UNDEFINED - 0x00AB, //LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00AC, //NOT SIGN - 0x00AD, //SOFT HYPHEN - 0x00AE, //REGISTERED SIGN - 0x2015, //HORIZONTAL BAR - 0x00B0, //DEGREE SIGN - 0x00B1, //PLUS-MINUS SIGN - 0x00B2, //SUPERSCRIPT TWO - 0x00B3, //SUPERSCRIPT THREE - 0x0384, //GREEK TONOS - 0x00B5, //MICRO SIGN - 0x00B6, //PILCROW SIGN - 0x00B7, //MIDDLE DOT - 0x0388, //GREEK CAPITAL LETTER EPSILON WITH TONOS - 0x0389, //GREEK CAPITAL LETTER ETA WITH TONOS - 0x038A, //GREEK CAPITAL LETTER IOTA WITH TONOS - 0x00BB, //RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x038C, //GREEK CAPITAL LETTER OMICRON WITH TONOS - 0x00BD, //VULGAR FRACTION ONE HALF - 0x038E, //GREEK CAPITAL LETTER UPSILON WITH TONOS - 0x038F, //GREEK CAPITAL LETTER OMEGA WITH TONOS - 0x0390, //GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS - 0x0391, //GREEK CAPITAL LETTER ALPHA - 0x0392, //GREEK CAPITAL LETTER BETA - 0x0393, //GREEK CAPITAL LETTER GAMMA - 0x0394, //GREEK CAPITAL LETTER DELTA - 0x0395, //GREEK CAPITAL LETTER EPSILON - 0x0396, //GREEK CAPITAL LETTER ZETA - 0x0397, //GREEK CAPITAL LETTER ETA - 0x0398, //GREEK CAPITAL LETTER THETA - 0x0399, //GREEK CAPITAL LETTER IOTA - 0x039A, //GREEK CAPITAL LETTER KAPPA - 0x039B, //GREEK CAPITAL LETTER LAMDA - 0x039C, //GREEK CAPITAL LETTER MU - 0x039D, //GREEK CAPITAL LETTER NU - 0x039E, //GREEK CAPITAL LETTER XI - 0x039F, //GREEK CAPITAL LETTER OMICRON - 0x03A0, //GREEK CAPITAL LETTER PI - 0x03A1, //GREEK CAPITAL LETTER RHO - 0xFFFD, //UNDEFINED - 0x03A3, //GREEK CAPITAL LETTER SIGMA - 0x03A4, //GREEK CAPITAL LETTER TAU - 0x03A5, //GREEK CAPITAL LETTER UPSILON - 0x03A6, //GREEK CAPITAL LETTER PHI - 0x03A7, //GREEK CAPITAL LETTER CHI - 0x03A8, //GREEK CAPITAL LETTER PSI - 0x03A9, //GREEK CAPITAL LETTER OMEGA - 0x03AA, //GREEK CAPITAL LETTER IOTA WITH DIALYTIKA - 0x03AB, //GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA - 0x03AC, //GREEK SMALL LETTER ALPHA WITH TONOS - 0x03AD, //GREEK SMALL LETTER EPSILON WITH TONOS - 0x03AE, //GREEK SMALL LETTER ETA WITH TONOS - 0x03AF, //GREEK SMALL LETTER IOTA WITH TONOS - 0x03B0, //GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS - 0x03B1, //GREEK SMALL LETTER ALPHA - 0x03B2, //GREEK SMALL LETTER BETA - 0x03B3, //GREEK SMALL LETTER GAMMA - 0x03B4, //GREEK SMALL LETTER DELTA - 0x03B5, //GREEK SMALL LETTER EPSILON - 0x03B6, //GREEK SMALL LETTER ZETA - 0x03B7, //GREEK SMALL LETTER ETA - 0x03B8, //GREEK SMALL LETTER THETA - 0x03B9, //GREEK SMALL LETTER IOTA - 0x03BA, //GREEK SMALL LETTER KAPPA - 0x03BB, //GREEK SMALL LETTER LAMDA - 0x03BC, //GREEK SMALL LETTER MU - 0x03BD, //GREEK SMALL LETTER NU - 0x03BE, //GREEK SMALL LETTER XI - 0x03BF, //GREEK SMALL LETTER OMICRON - 0x03C0, //GREEK SMALL LETTER PI - 0x03C1, //GREEK SMALL LETTER RHO - 0x03C2, //GREEK SMALL LETTER FINAL SIGMA - 0x03C3, //GREEK SMALL LETTER SIGMA - 0x03C4, //GREEK SMALL LETTER TAU - 0x03C5, //GREEK SMALL LETTER UPSILON - 0x03C6, //GREEK SMALL LETTER PHI - 0x03C7, //GREEK SMALL LETTER CHI - 0x03C8, //GREEK SMALL LETTER PSI - 0x03C9, //GREEK SMALL LETTER OMEGA - 0x03CA, //GREEK SMALL LETTER IOTA WITH DIALYTIKA - 0x03CB, //GREEK SMALL LETTER UPSILON WITH DIALYTIKA - 0x03CC, //GREEK SMALL LETTER OMICRON WITH TONOS - 0x03CD, //GREEK SMALL LETTER UPSILON WITH TONOS - 0x03CE, //GREEK SMALL LETTER OMEGA WITH TONOS - 0xFFFD, //UNDEFINED - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp1254.go b/vendor/github.com/denisenkom/go-mssqldb/cp1254.go deleted file mode 100644 index a4b09bb44..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp1254.go +++ /dev/null @@ -1,262 +0,0 @@ -package mssql - -var cp1254 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000A, //LINE FEED - 0x000B, //VERTICAL TABULATION - 0x000C, //FORM FEED - 0x000D, //CARRIAGE RETURN - 0x000E, //SHIFT OUT - 0x000F, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001A, //SUBSTITUTE - 0x001B, //ESCAPE - 0x001C, //FILE SEPARATOR - 0x001D, //GROUP SEPARATOR - 0x001E, //RECORD SEPARATOR - 0x001F, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002A, //ASTERISK - 0x002B, //PLUS SIGN - 0x002C, //COMMA - 0x002D, //HYPHEN-MINUS - 0x002E, //FULL STOP - 0x002F, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003A, //COLON - 0x003B, //SEMICOLON - 0x003C, //LESS-THAN SIGN - 0x003D, //EQUALS SIGN - 0x003E, //GREATER-THAN SIGN - 0x003F, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004A, //LATIN CAPITAL LETTER J - 0x004B, //LATIN CAPITAL LETTER K - 0x004C, //LATIN CAPITAL LETTER L - 0x004D, //LATIN CAPITAL LETTER M - 0x004E, //LATIN CAPITAL LETTER N - 0x004F, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005A, //LATIN CAPITAL LETTER Z - 0x005B, //LEFT SQUARE BRACKET - 0x005C, //REVERSE SOLIDUS - 0x005D, //RIGHT SQUARE BRACKET - 0x005E, //CIRCUMFLEX ACCENT - 0x005F, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006A, //LATIN SMALL LETTER J - 0x006B, //LATIN SMALL LETTER K - 0x006C, //LATIN SMALL LETTER L - 0x006D, //LATIN SMALL LETTER M - 0x006E, //LATIN SMALL LETTER N - 0x006F, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007A, //LATIN SMALL LETTER Z - 0x007B, //LEFT CURLY BRACKET - 0x007C, //VERTICAL LINE - 0x007D, //RIGHT CURLY BRACKET - 0x007E, //TILDE - 0x007F, //DELETE - 0x20AC, //EURO SIGN - 0xFFFD, //UNDEFINED - 0x201A, //SINGLE LOW-9 QUOTATION MARK - 0x0192, //LATIN SMALL LETTER F WITH HOOK - 0x201E, //DOUBLE LOW-9 QUOTATION MARK - 0x2026, //HORIZONTAL ELLIPSIS - 0x2020, //DAGGER - 0x2021, //DOUBLE DAGGER - 0x02C6, //MODIFIER LETTER CIRCUMFLEX ACCENT - 0x2030, //PER MILLE SIGN - 0x0160, //LATIN CAPITAL LETTER S WITH CARON - 0x2039, //SINGLE LEFT-POINTING ANGLE QUOTATION MARK - 0x0152, //LATIN CAPITAL LIGATURE OE - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x2018, //LEFT SINGLE QUOTATION MARK - 0x2019, //RIGHT SINGLE QUOTATION MARK - 0x201C, //LEFT DOUBLE QUOTATION MARK - 0x201D, //RIGHT DOUBLE QUOTATION MARK - 0x2022, //BULLET - 0x2013, //EN DASH - 0x2014, //EM DASH - 0x02DC, //SMALL TILDE - 0x2122, //TRADE MARK SIGN - 0x0161, //LATIN SMALL LETTER S WITH CARON - 0x203A, //SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - 0x0153, //LATIN SMALL LIGATURE OE - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x0178, //LATIN CAPITAL LETTER Y WITH DIAERESIS - 0x00A0, //NO-BREAK SPACE - 0x00A1, //INVERTED EXCLAMATION MARK - 0x00A2, //CENT SIGN - 0x00A3, //POUND SIGN - 0x00A4, //CURRENCY SIGN - 0x00A5, //YEN SIGN - 0x00A6, //BROKEN BAR - 0x00A7, //SECTION SIGN - 0x00A8, //DIAERESIS - 0x00A9, //COPYRIGHT SIGN - 0x00AA, //FEMININE ORDINAL INDICATOR - 0x00AB, //LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00AC, //NOT SIGN - 0x00AD, //SOFT HYPHEN - 0x00AE, //REGISTERED SIGN - 0x00AF, //MACRON - 0x00B0, //DEGREE SIGN - 0x00B1, //PLUS-MINUS SIGN - 0x00B2, //SUPERSCRIPT TWO - 0x00B3, //SUPERSCRIPT THREE - 0x00B4, //ACUTE ACCENT - 0x00B5, //MICRO SIGN - 0x00B6, //PILCROW SIGN - 0x00B7, //MIDDLE DOT - 0x00B8, //CEDILLA - 0x00B9, //SUPERSCRIPT ONE - 0x00BA, //MASCULINE ORDINAL INDICATOR - 0x00BB, //RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00BC, //VULGAR FRACTION ONE QUARTER - 0x00BD, //VULGAR FRACTION ONE HALF - 0x00BE, //VULGAR FRACTION THREE QUARTERS - 0x00BF, //INVERTED QUESTION MARK - 0x00C0, //LATIN CAPITAL LETTER A WITH GRAVE - 0x00C1, //LATIN CAPITAL LETTER A WITH ACUTE - 0x00C2, //LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x00C3, //LATIN CAPITAL LETTER A WITH TILDE - 0x00C4, //LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00C5, //LATIN CAPITAL LETTER A WITH RING ABOVE - 0x00C6, //LATIN CAPITAL LETTER AE - 0x00C7, //LATIN CAPITAL LETTER C WITH CEDILLA - 0x00C8, //LATIN CAPITAL LETTER E WITH GRAVE - 0x00C9, //LATIN CAPITAL LETTER E WITH ACUTE - 0x00CA, //LATIN CAPITAL LETTER E WITH CIRCUMFLEX - 0x00CB, //LATIN CAPITAL LETTER E WITH DIAERESIS - 0x00CC, //LATIN CAPITAL LETTER I WITH GRAVE - 0x00CD, //LATIN CAPITAL LETTER I WITH ACUTE - 0x00CE, //LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x00CF, //LATIN CAPITAL LETTER I WITH DIAERESIS - 0x011E, //LATIN CAPITAL LETTER G WITH BREVE - 0x00D1, //LATIN CAPITAL LETTER N WITH TILDE - 0x00D2, //LATIN CAPITAL LETTER O WITH GRAVE - 0x00D3, //LATIN CAPITAL LETTER O WITH ACUTE - 0x00D4, //LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x00D5, //LATIN CAPITAL LETTER O WITH TILDE - 0x00D6, //LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00D7, //MULTIPLICATION SIGN - 0x00D8, //LATIN CAPITAL LETTER O WITH STROKE - 0x00D9, //LATIN CAPITAL LETTER U WITH GRAVE - 0x00DA, //LATIN CAPITAL LETTER U WITH ACUTE - 0x00DB, //LATIN CAPITAL LETTER U WITH CIRCUMFLEX - 0x00DC, //LATIN CAPITAL LETTER U WITH DIAERESIS - 0x0130, //LATIN CAPITAL LETTER I WITH DOT ABOVE - 0x015E, //LATIN CAPITAL LETTER S WITH CEDILLA - 0x00DF, //LATIN SMALL LETTER SHARP S - 0x00E0, //LATIN SMALL LETTER A WITH GRAVE - 0x00E1, //LATIN SMALL LETTER A WITH ACUTE - 0x00E2, //LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00E3, //LATIN SMALL LETTER A WITH TILDE - 0x00E4, //LATIN SMALL LETTER A WITH DIAERESIS - 0x00E5, //LATIN SMALL LETTER A WITH RING ABOVE - 0x00E6, //LATIN SMALL LETTER AE - 0x00E7, //LATIN SMALL LETTER C WITH CEDILLA - 0x00E8, //LATIN SMALL LETTER E WITH GRAVE - 0x00E9, //LATIN SMALL LETTER E WITH ACUTE - 0x00EA, //LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00EB, //LATIN SMALL LETTER E WITH DIAERESIS - 0x00EC, //LATIN SMALL LETTER I WITH GRAVE - 0x00ED, //LATIN SMALL LETTER I WITH ACUTE - 0x00EE, //LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00EF, //LATIN SMALL LETTER I WITH DIAERESIS - 0x011F, //LATIN SMALL LETTER G WITH BREVE - 0x00F1, //LATIN SMALL LETTER N WITH TILDE - 0x00F2, //LATIN SMALL LETTER O WITH GRAVE - 0x00F3, //LATIN SMALL LETTER O WITH ACUTE - 0x00F4, //LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00F5, //LATIN SMALL LETTER O WITH TILDE - 0x00F6, //LATIN SMALL LETTER O WITH DIAERESIS - 0x00F7, //DIVISION SIGN - 0x00F8, //LATIN SMALL LETTER O WITH STROKE - 0x00F9, //LATIN SMALL LETTER U WITH GRAVE - 0x00FA, //LATIN SMALL LETTER U WITH ACUTE - 0x00FB, //LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00FC, //LATIN SMALL LETTER U WITH DIAERESIS - 0x0131, //LATIN SMALL LETTER DOTLESS I - 0x015F, //LATIN SMALL LETTER S WITH CEDILLA - 0x00FF, //LATIN SMALL LETTER Y WITH DIAERESIS - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp1255.go b/vendor/github.com/denisenkom/go-mssqldb/cp1255.go deleted file mode 100644 index 97f9ee9e9..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp1255.go +++ /dev/null @@ -1,262 +0,0 @@ -package mssql - -var cp1255 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000A, //LINE FEED - 0x000B, //VERTICAL TABULATION - 0x000C, //FORM FEED - 0x000D, //CARRIAGE RETURN - 0x000E, //SHIFT OUT - 0x000F, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001A, //SUBSTITUTE - 0x001B, //ESCAPE - 0x001C, //FILE SEPARATOR - 0x001D, //GROUP SEPARATOR - 0x001E, //RECORD SEPARATOR - 0x001F, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002A, //ASTERISK - 0x002B, //PLUS SIGN - 0x002C, //COMMA - 0x002D, //HYPHEN-MINUS - 0x002E, //FULL STOP - 0x002F, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003A, //COLON - 0x003B, //SEMICOLON - 0x003C, //LESS-THAN SIGN - 0x003D, //EQUALS SIGN - 0x003E, //GREATER-THAN SIGN - 0x003F, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004A, //LATIN CAPITAL LETTER J - 0x004B, //LATIN CAPITAL LETTER K - 0x004C, //LATIN CAPITAL LETTER L - 0x004D, //LATIN CAPITAL LETTER M - 0x004E, //LATIN CAPITAL LETTER N - 0x004F, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005A, //LATIN CAPITAL LETTER Z - 0x005B, //LEFT SQUARE BRACKET - 0x005C, //REVERSE SOLIDUS - 0x005D, //RIGHT SQUARE BRACKET - 0x005E, //CIRCUMFLEX ACCENT - 0x005F, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006A, //LATIN SMALL LETTER J - 0x006B, //LATIN SMALL LETTER K - 0x006C, //LATIN SMALL LETTER L - 0x006D, //LATIN SMALL LETTER M - 0x006E, //LATIN SMALL LETTER N - 0x006F, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007A, //LATIN SMALL LETTER Z - 0x007B, //LEFT CURLY BRACKET - 0x007C, //VERTICAL LINE - 0x007D, //RIGHT CURLY BRACKET - 0x007E, //TILDE - 0x007F, //DELETE - 0x20AC, //EURO SIGN - 0xFFFD, //UNDEFINED - 0x201A, //SINGLE LOW-9 QUOTATION MARK - 0x0192, //LATIN SMALL LETTER F WITH HOOK - 0x201E, //DOUBLE LOW-9 QUOTATION MARK - 0x2026, //HORIZONTAL ELLIPSIS - 0x2020, //DAGGER - 0x2021, //DOUBLE DAGGER - 0x02C6, //MODIFIER LETTER CIRCUMFLEX ACCENT - 0x2030, //PER MILLE SIGN - 0xFFFD, //UNDEFINED - 0x2039, //SINGLE LEFT-POINTING ANGLE QUOTATION MARK - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x2018, //LEFT SINGLE QUOTATION MARK - 0x2019, //RIGHT SINGLE QUOTATION MARK - 0x201C, //LEFT DOUBLE QUOTATION MARK - 0x201D, //RIGHT DOUBLE QUOTATION MARK - 0x2022, //BULLET - 0x2013, //EN DASH - 0x2014, //EM DASH - 0x02DC, //SMALL TILDE - 0x2122, //TRADE MARK SIGN - 0xFFFD, //UNDEFINED - 0x203A, //SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x00A0, //NO-BREAK SPACE - 0x00A1, //INVERTED EXCLAMATION MARK - 0x00A2, //CENT SIGN - 0x00A3, //POUND SIGN - 0x20AA, //NEW SHEQEL SIGN - 0x00A5, //YEN SIGN - 0x00A6, //BROKEN BAR - 0x00A7, //SECTION SIGN - 0x00A8, //DIAERESIS - 0x00A9, //COPYRIGHT SIGN - 0x00D7, //MULTIPLICATION SIGN - 0x00AB, //LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00AC, //NOT SIGN - 0x00AD, //SOFT HYPHEN - 0x00AE, //REGISTERED SIGN - 0x00AF, //MACRON - 0x00B0, //DEGREE SIGN - 0x00B1, //PLUS-MINUS SIGN - 0x00B2, //SUPERSCRIPT TWO - 0x00B3, //SUPERSCRIPT THREE - 0x00B4, //ACUTE ACCENT - 0x00B5, //MICRO SIGN - 0x00B6, //PILCROW SIGN - 0x00B7, //MIDDLE DOT - 0x00B8, //CEDILLA - 0x00B9, //SUPERSCRIPT ONE - 0x00F7, //DIVISION SIGN - 0x00BB, //RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00BC, //VULGAR FRACTION ONE QUARTER - 0x00BD, //VULGAR FRACTION ONE HALF - 0x00BE, //VULGAR FRACTION THREE QUARTERS - 0x00BF, //INVERTED QUESTION MARK - 0x05B0, //HEBREW POINT SHEVA - 0x05B1, //HEBREW POINT HATAF SEGOL - 0x05B2, //HEBREW POINT HATAF PATAH - 0x05B3, //HEBREW POINT HATAF QAMATS - 0x05B4, //HEBREW POINT HIRIQ - 0x05B5, //HEBREW POINT TSERE - 0x05B6, //HEBREW POINT SEGOL - 0x05B7, //HEBREW POINT PATAH - 0x05B8, //HEBREW POINT QAMATS - 0x05B9, //HEBREW POINT HOLAM - 0xFFFD, //UNDEFINED - 0x05BB, //HEBREW POINT QUBUTS - 0x05BC, //HEBREW POINT DAGESH OR MAPIQ - 0x05BD, //HEBREW POINT METEG - 0x05BE, //HEBREW PUNCTUATION MAQAF - 0x05BF, //HEBREW POINT RAFE - 0x05C0, //HEBREW PUNCTUATION PASEQ - 0x05C1, //HEBREW POINT SHIN DOT - 0x05C2, //HEBREW POINT SIN DOT - 0x05C3, //HEBREW PUNCTUATION SOF PASUQ - 0x05F0, //HEBREW LIGATURE YIDDISH DOUBLE VAV - 0x05F1, //HEBREW LIGATURE YIDDISH VAV YOD - 0x05F2, //HEBREW LIGATURE YIDDISH DOUBLE YOD - 0x05F3, //HEBREW PUNCTUATION GERESH - 0x05F4, //HEBREW PUNCTUATION GERSHAYIM - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x05D0, //HEBREW LETTER ALEF - 0x05D1, //HEBREW LETTER BET - 0x05D2, //HEBREW LETTER GIMEL - 0x05D3, //HEBREW LETTER DALET - 0x05D4, //HEBREW LETTER HE - 0x05D5, //HEBREW LETTER VAV - 0x05D6, //HEBREW LETTER ZAYIN - 0x05D7, //HEBREW LETTER HET - 0x05D8, //HEBREW LETTER TET - 0x05D9, //HEBREW LETTER YOD - 0x05DA, //HEBREW LETTER FINAL KAF - 0x05DB, //HEBREW LETTER KAF - 0x05DC, //HEBREW LETTER LAMED - 0x05DD, //HEBREW LETTER FINAL MEM - 0x05DE, //HEBREW LETTER MEM - 0x05DF, //HEBREW LETTER FINAL NUN - 0x05E0, //HEBREW LETTER NUN - 0x05E1, //HEBREW LETTER SAMEKH - 0x05E2, //HEBREW LETTER AYIN - 0x05E3, //HEBREW LETTER FINAL PE - 0x05E4, //HEBREW LETTER PE - 0x05E5, //HEBREW LETTER FINAL TSADI - 0x05E6, //HEBREW LETTER TSADI - 0x05E7, //HEBREW LETTER QOF - 0x05E8, //HEBREW LETTER RESH - 0x05E9, //HEBREW LETTER SHIN - 0x05EA, //HEBREW LETTER TAV - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x200E, //LEFT-TO-RIGHT MARK - 0x200F, //RIGHT-TO-LEFT MARK - 0xFFFD, //UNDEFINED - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp1256.go b/vendor/github.com/denisenkom/go-mssqldb/cp1256.go deleted file mode 100644 index e91241b44..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp1256.go +++ /dev/null @@ -1,262 +0,0 @@ -package mssql - -var cp1256 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000A, //LINE FEED - 0x000B, //VERTICAL TABULATION - 0x000C, //FORM FEED - 0x000D, //CARRIAGE RETURN - 0x000E, //SHIFT OUT - 0x000F, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001A, //SUBSTITUTE - 0x001B, //ESCAPE - 0x001C, //FILE SEPARATOR - 0x001D, //GROUP SEPARATOR - 0x001E, //RECORD SEPARATOR - 0x001F, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002A, //ASTERISK - 0x002B, //PLUS SIGN - 0x002C, //COMMA - 0x002D, //HYPHEN-MINUS - 0x002E, //FULL STOP - 0x002F, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003A, //COLON - 0x003B, //SEMICOLON - 0x003C, //LESS-THAN SIGN - 0x003D, //EQUALS SIGN - 0x003E, //GREATER-THAN SIGN - 0x003F, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004A, //LATIN CAPITAL LETTER J - 0x004B, //LATIN CAPITAL LETTER K - 0x004C, //LATIN CAPITAL LETTER L - 0x004D, //LATIN CAPITAL LETTER M - 0x004E, //LATIN CAPITAL LETTER N - 0x004F, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005A, //LATIN CAPITAL LETTER Z - 0x005B, //LEFT SQUARE BRACKET - 0x005C, //REVERSE SOLIDUS - 0x005D, //RIGHT SQUARE BRACKET - 0x005E, //CIRCUMFLEX ACCENT - 0x005F, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006A, //LATIN SMALL LETTER J - 0x006B, //LATIN SMALL LETTER K - 0x006C, //LATIN SMALL LETTER L - 0x006D, //LATIN SMALL LETTER M - 0x006E, //LATIN SMALL LETTER N - 0x006F, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007A, //LATIN SMALL LETTER Z - 0x007B, //LEFT CURLY BRACKET - 0x007C, //VERTICAL LINE - 0x007D, //RIGHT CURLY BRACKET - 0x007E, //TILDE - 0x007F, //DELETE - 0x20AC, //EURO SIGN - 0x067E, //ARABIC LETTER PEH - 0x201A, //SINGLE LOW-9 QUOTATION MARK - 0x0192, //LATIN SMALL LETTER F WITH HOOK - 0x201E, //DOUBLE LOW-9 QUOTATION MARK - 0x2026, //HORIZONTAL ELLIPSIS - 0x2020, //DAGGER - 0x2021, //DOUBLE DAGGER - 0x02C6, //MODIFIER LETTER CIRCUMFLEX ACCENT - 0x2030, //PER MILLE SIGN - 0x0679, //ARABIC LETTER TTEH - 0x2039, //SINGLE LEFT-POINTING ANGLE QUOTATION MARK - 0x0152, //LATIN CAPITAL LIGATURE OE - 0x0686, //ARABIC LETTER TCHEH - 0x0698, //ARABIC LETTER JEH - 0x0688, //ARABIC LETTER DDAL - 0x06AF, //ARABIC LETTER GAF - 0x2018, //LEFT SINGLE QUOTATION MARK - 0x2019, //RIGHT SINGLE QUOTATION MARK - 0x201C, //LEFT DOUBLE QUOTATION MARK - 0x201D, //RIGHT DOUBLE QUOTATION MARK - 0x2022, //BULLET - 0x2013, //EN DASH - 0x2014, //EM DASH - 0x06A9, //ARABIC LETTER KEHEH - 0x2122, //TRADE MARK SIGN - 0x0691, //ARABIC LETTER RREH - 0x203A, //SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - 0x0153, //LATIN SMALL LIGATURE OE - 0x200C, //ZERO WIDTH NON-JOINER - 0x200D, //ZERO WIDTH JOINER - 0x06BA, //ARABIC LETTER NOON GHUNNA - 0x00A0, //NO-BREAK SPACE - 0x060C, //ARABIC COMMA - 0x00A2, //CENT SIGN - 0x00A3, //POUND SIGN - 0x00A4, //CURRENCY SIGN - 0x00A5, //YEN SIGN - 0x00A6, //BROKEN BAR - 0x00A7, //SECTION SIGN - 0x00A8, //DIAERESIS - 0x00A9, //COPYRIGHT SIGN - 0x06BE, //ARABIC LETTER HEH DOACHASHMEE - 0x00AB, //LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00AC, //NOT SIGN - 0x00AD, //SOFT HYPHEN - 0x00AE, //REGISTERED SIGN - 0x00AF, //MACRON - 0x00B0, //DEGREE SIGN - 0x00B1, //PLUS-MINUS SIGN - 0x00B2, //SUPERSCRIPT TWO - 0x00B3, //SUPERSCRIPT THREE - 0x00B4, //ACUTE ACCENT - 0x00B5, //MICRO SIGN - 0x00B6, //PILCROW SIGN - 0x00B7, //MIDDLE DOT - 0x00B8, //CEDILLA - 0x00B9, //SUPERSCRIPT ONE - 0x061B, //ARABIC SEMICOLON - 0x00BB, //RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00BC, //VULGAR FRACTION ONE QUARTER - 0x00BD, //VULGAR FRACTION ONE HALF - 0x00BE, //VULGAR FRACTION THREE QUARTERS - 0x061F, //ARABIC QUESTION MARK - 0x06C1, //ARABIC LETTER HEH GOAL - 0x0621, //ARABIC LETTER HAMZA - 0x0622, //ARABIC LETTER ALEF WITH MADDA ABOVE - 0x0623, //ARABIC LETTER ALEF WITH HAMZA ABOVE - 0x0624, //ARABIC LETTER WAW WITH HAMZA ABOVE - 0x0625, //ARABIC LETTER ALEF WITH HAMZA BELOW - 0x0626, //ARABIC LETTER YEH WITH HAMZA ABOVE - 0x0627, //ARABIC LETTER ALEF - 0x0628, //ARABIC LETTER BEH - 0x0629, //ARABIC LETTER TEH MARBUTA - 0x062A, //ARABIC LETTER TEH - 0x062B, //ARABIC LETTER THEH - 0x062C, //ARABIC LETTER JEEM - 0x062D, //ARABIC LETTER HAH - 0x062E, //ARABIC LETTER KHAH - 0x062F, //ARABIC LETTER DAL - 0x0630, //ARABIC LETTER THAL - 0x0631, //ARABIC LETTER REH - 0x0632, //ARABIC LETTER ZAIN - 0x0633, //ARABIC LETTER SEEN - 0x0634, //ARABIC LETTER SHEEN - 0x0635, //ARABIC LETTER SAD - 0x0636, //ARABIC LETTER DAD - 0x00D7, //MULTIPLICATION SIGN - 0x0637, //ARABIC LETTER TAH - 0x0638, //ARABIC LETTER ZAH - 0x0639, //ARABIC LETTER AIN - 0x063A, //ARABIC LETTER GHAIN - 0x0640, //ARABIC TATWEEL - 0x0641, //ARABIC LETTER FEH - 0x0642, //ARABIC LETTER QAF - 0x0643, //ARABIC LETTER KAF - 0x00E0, //LATIN SMALL LETTER A WITH GRAVE - 0x0644, //ARABIC LETTER LAM - 0x00E2, //LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x0645, //ARABIC LETTER MEEM - 0x0646, //ARABIC LETTER NOON - 0x0647, //ARABIC LETTER HEH - 0x0648, //ARABIC LETTER WAW - 0x00E7, //LATIN SMALL LETTER C WITH CEDILLA - 0x00E8, //LATIN SMALL LETTER E WITH GRAVE - 0x00E9, //LATIN SMALL LETTER E WITH ACUTE - 0x00EA, //LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00EB, //LATIN SMALL LETTER E WITH DIAERESIS - 0x0649, //ARABIC LETTER ALEF MAKSURA - 0x064A, //ARABIC LETTER YEH - 0x00EE, //LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00EF, //LATIN SMALL LETTER I WITH DIAERESIS - 0x064B, //ARABIC FATHATAN - 0x064C, //ARABIC DAMMATAN - 0x064D, //ARABIC KASRATAN - 0x064E, //ARABIC FATHA - 0x00F4, //LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x064F, //ARABIC DAMMA - 0x0650, //ARABIC KASRA - 0x00F7, //DIVISION SIGN - 0x0651, //ARABIC SHADDA - 0x00F9, //LATIN SMALL LETTER U WITH GRAVE - 0x0652, //ARABIC SUKUN - 0x00FB, //LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00FC, //LATIN SMALL LETTER U WITH DIAERESIS - 0x200E, //LEFT-TO-RIGHT MARK - 0x200F, //RIGHT-TO-LEFT MARK - 0x06D2, //ARABIC LETTER YEH BARREE - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp1257.go b/vendor/github.com/denisenkom/go-mssqldb/cp1257.go deleted file mode 100644 index bd93e6f89..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp1257.go +++ /dev/null @@ -1,262 +0,0 @@ -package mssql - -var cp1257 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000A, //LINE FEED - 0x000B, //VERTICAL TABULATION - 0x000C, //FORM FEED - 0x000D, //CARRIAGE RETURN - 0x000E, //SHIFT OUT - 0x000F, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001A, //SUBSTITUTE - 0x001B, //ESCAPE - 0x001C, //FILE SEPARATOR - 0x001D, //GROUP SEPARATOR - 0x001E, //RECORD SEPARATOR - 0x001F, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002A, //ASTERISK - 0x002B, //PLUS SIGN - 0x002C, //COMMA - 0x002D, //HYPHEN-MINUS - 0x002E, //FULL STOP - 0x002F, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003A, //COLON - 0x003B, //SEMICOLON - 0x003C, //LESS-THAN SIGN - 0x003D, //EQUALS SIGN - 0x003E, //GREATER-THAN SIGN - 0x003F, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004A, //LATIN CAPITAL LETTER J - 0x004B, //LATIN CAPITAL LETTER K - 0x004C, //LATIN CAPITAL LETTER L - 0x004D, //LATIN CAPITAL LETTER M - 0x004E, //LATIN CAPITAL LETTER N - 0x004F, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005A, //LATIN CAPITAL LETTER Z - 0x005B, //LEFT SQUARE BRACKET - 0x005C, //REVERSE SOLIDUS - 0x005D, //RIGHT SQUARE BRACKET - 0x005E, //CIRCUMFLEX ACCENT - 0x005F, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006A, //LATIN SMALL LETTER J - 0x006B, //LATIN SMALL LETTER K - 0x006C, //LATIN SMALL LETTER L - 0x006D, //LATIN SMALL LETTER M - 0x006E, //LATIN SMALL LETTER N - 0x006F, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007A, //LATIN SMALL LETTER Z - 0x007B, //LEFT CURLY BRACKET - 0x007C, //VERTICAL LINE - 0x007D, //RIGHT CURLY BRACKET - 0x007E, //TILDE - 0x007F, //DELETE - 0x20AC, //EURO SIGN - 0xFFFD, //UNDEFINED - 0x201A, //SINGLE LOW-9 QUOTATION MARK - 0xFFFD, //UNDEFINED - 0x201E, //DOUBLE LOW-9 QUOTATION MARK - 0x2026, //HORIZONTAL ELLIPSIS - 0x2020, //DAGGER - 0x2021, //DOUBLE DAGGER - 0xFFFD, //UNDEFINED - 0x2030, //PER MILLE SIGN - 0xFFFD, //UNDEFINED - 0x2039, //SINGLE LEFT-POINTING ANGLE QUOTATION MARK - 0xFFFD, //UNDEFINED - 0x00A8, //DIAERESIS - 0x02C7, //CARON - 0x00B8, //CEDILLA - 0xFFFD, //UNDEFINED - 0x2018, //LEFT SINGLE QUOTATION MARK - 0x2019, //RIGHT SINGLE QUOTATION MARK - 0x201C, //LEFT DOUBLE QUOTATION MARK - 0x201D, //RIGHT DOUBLE QUOTATION MARK - 0x2022, //BULLET - 0x2013, //EN DASH - 0x2014, //EM DASH - 0xFFFD, //UNDEFINED - 0x2122, //TRADE MARK SIGN - 0xFFFD, //UNDEFINED - 0x203A, //SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - 0xFFFD, //UNDEFINED - 0x00AF, //MACRON - 0x02DB, //OGONEK - 0xFFFD, //UNDEFINED - 0x00A0, //NO-BREAK SPACE - 0xFFFD, //UNDEFINED - 0x00A2, //CENT SIGN - 0x00A3, //POUND SIGN - 0x00A4, //CURRENCY SIGN - 0xFFFD, //UNDEFINED - 0x00A6, //BROKEN BAR - 0x00A7, //SECTION SIGN - 0x00D8, //LATIN CAPITAL LETTER O WITH STROKE - 0x00A9, //COPYRIGHT SIGN - 0x0156, //LATIN CAPITAL LETTER R WITH CEDILLA - 0x00AB, //LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00AC, //NOT SIGN - 0x00AD, //SOFT HYPHEN - 0x00AE, //REGISTERED SIGN - 0x00C6, //LATIN CAPITAL LETTER AE - 0x00B0, //DEGREE SIGN - 0x00B1, //PLUS-MINUS SIGN - 0x00B2, //SUPERSCRIPT TWO - 0x00B3, //SUPERSCRIPT THREE - 0x00B4, //ACUTE ACCENT - 0x00B5, //MICRO SIGN - 0x00B6, //PILCROW SIGN - 0x00B7, //MIDDLE DOT - 0x00F8, //LATIN SMALL LETTER O WITH STROKE - 0x00B9, //SUPERSCRIPT ONE - 0x0157, //LATIN SMALL LETTER R WITH CEDILLA - 0x00BB, //RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00BC, //VULGAR FRACTION ONE QUARTER - 0x00BD, //VULGAR FRACTION ONE HALF - 0x00BE, //VULGAR FRACTION THREE QUARTERS - 0x00E6, //LATIN SMALL LETTER AE - 0x0104, //LATIN CAPITAL LETTER A WITH OGONEK - 0x012E, //LATIN CAPITAL LETTER I WITH OGONEK - 0x0100, //LATIN CAPITAL LETTER A WITH MACRON - 0x0106, //LATIN CAPITAL LETTER C WITH ACUTE - 0x00C4, //LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00C5, //LATIN CAPITAL LETTER A WITH RING ABOVE - 0x0118, //LATIN CAPITAL LETTER E WITH OGONEK - 0x0112, //LATIN CAPITAL LETTER E WITH MACRON - 0x010C, //LATIN CAPITAL LETTER C WITH CARON - 0x00C9, //LATIN CAPITAL LETTER E WITH ACUTE - 0x0179, //LATIN CAPITAL LETTER Z WITH ACUTE - 0x0116, //LATIN CAPITAL LETTER E WITH DOT ABOVE - 0x0122, //LATIN CAPITAL LETTER G WITH CEDILLA - 0x0136, //LATIN CAPITAL LETTER K WITH CEDILLA - 0x012A, //LATIN CAPITAL LETTER I WITH MACRON - 0x013B, //LATIN CAPITAL LETTER L WITH CEDILLA - 0x0160, //LATIN CAPITAL LETTER S WITH CARON - 0x0143, //LATIN CAPITAL LETTER N WITH ACUTE - 0x0145, //LATIN CAPITAL LETTER N WITH CEDILLA - 0x00D3, //LATIN CAPITAL LETTER O WITH ACUTE - 0x014C, //LATIN CAPITAL LETTER O WITH MACRON - 0x00D5, //LATIN CAPITAL LETTER O WITH TILDE - 0x00D6, //LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00D7, //MULTIPLICATION SIGN - 0x0172, //LATIN CAPITAL LETTER U WITH OGONEK - 0x0141, //LATIN CAPITAL LETTER L WITH STROKE - 0x015A, //LATIN CAPITAL LETTER S WITH ACUTE - 0x016A, //LATIN CAPITAL LETTER U WITH MACRON - 0x00DC, //LATIN CAPITAL LETTER U WITH DIAERESIS - 0x017B, //LATIN CAPITAL LETTER Z WITH DOT ABOVE - 0x017D, //LATIN CAPITAL LETTER Z WITH CARON - 0x00DF, //LATIN SMALL LETTER SHARP S - 0x0105, //LATIN SMALL LETTER A WITH OGONEK - 0x012F, //LATIN SMALL LETTER I WITH OGONEK - 0x0101, //LATIN SMALL LETTER A WITH MACRON - 0x0107, //LATIN SMALL LETTER C WITH ACUTE - 0x00E4, //LATIN SMALL LETTER A WITH DIAERESIS - 0x00E5, //LATIN SMALL LETTER A WITH RING ABOVE - 0x0119, //LATIN SMALL LETTER E WITH OGONEK - 0x0113, //LATIN SMALL LETTER E WITH MACRON - 0x010D, //LATIN SMALL LETTER C WITH CARON - 0x00E9, //LATIN SMALL LETTER E WITH ACUTE - 0x017A, //LATIN SMALL LETTER Z WITH ACUTE - 0x0117, //LATIN SMALL LETTER E WITH DOT ABOVE - 0x0123, //LATIN SMALL LETTER G WITH CEDILLA - 0x0137, //LATIN SMALL LETTER K WITH CEDILLA - 0x012B, //LATIN SMALL LETTER I WITH MACRON - 0x013C, //LATIN SMALL LETTER L WITH CEDILLA - 0x0161, //LATIN SMALL LETTER S WITH CARON - 0x0144, //LATIN SMALL LETTER N WITH ACUTE - 0x0146, //LATIN SMALL LETTER N WITH CEDILLA - 0x00F3, //LATIN SMALL LETTER O WITH ACUTE - 0x014D, //LATIN SMALL LETTER O WITH MACRON - 0x00F5, //LATIN SMALL LETTER O WITH TILDE - 0x00F6, //LATIN SMALL LETTER O WITH DIAERESIS - 0x00F7, //DIVISION SIGN - 0x0173, //LATIN SMALL LETTER U WITH OGONEK - 0x0142, //LATIN SMALL LETTER L WITH STROKE - 0x015B, //LATIN SMALL LETTER S WITH ACUTE - 0x016B, //LATIN SMALL LETTER U WITH MACRON - 0x00FC, //LATIN SMALL LETTER U WITH DIAERESIS - 0x017C, //LATIN SMALL LETTER Z WITH DOT ABOVE - 0x017E, //LATIN SMALL LETTER Z WITH CARON - 0x02D9, //DOT ABOVE - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp1258.go b/vendor/github.com/denisenkom/go-mssqldb/cp1258.go deleted file mode 100644 index 4e1f8ac94..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp1258.go +++ /dev/null @@ -1,262 +0,0 @@ -package mssql - -var cp1258 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000A, //LINE FEED - 0x000B, //VERTICAL TABULATION - 0x000C, //FORM FEED - 0x000D, //CARRIAGE RETURN - 0x000E, //SHIFT OUT - 0x000F, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001A, //SUBSTITUTE - 0x001B, //ESCAPE - 0x001C, //FILE SEPARATOR - 0x001D, //GROUP SEPARATOR - 0x001E, //RECORD SEPARATOR - 0x001F, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002A, //ASTERISK - 0x002B, //PLUS SIGN - 0x002C, //COMMA - 0x002D, //HYPHEN-MINUS - 0x002E, //FULL STOP - 0x002F, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003A, //COLON - 0x003B, //SEMICOLON - 0x003C, //LESS-THAN SIGN - 0x003D, //EQUALS SIGN - 0x003E, //GREATER-THAN SIGN - 0x003F, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004A, //LATIN CAPITAL LETTER J - 0x004B, //LATIN CAPITAL LETTER K - 0x004C, //LATIN CAPITAL LETTER L - 0x004D, //LATIN CAPITAL LETTER M - 0x004E, //LATIN CAPITAL LETTER N - 0x004F, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005A, //LATIN CAPITAL LETTER Z - 0x005B, //LEFT SQUARE BRACKET - 0x005C, //REVERSE SOLIDUS - 0x005D, //RIGHT SQUARE BRACKET - 0x005E, //CIRCUMFLEX ACCENT - 0x005F, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006A, //LATIN SMALL LETTER J - 0x006B, //LATIN SMALL LETTER K - 0x006C, //LATIN SMALL LETTER L - 0x006D, //LATIN SMALL LETTER M - 0x006E, //LATIN SMALL LETTER N - 0x006F, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007A, //LATIN SMALL LETTER Z - 0x007B, //LEFT CURLY BRACKET - 0x007C, //VERTICAL LINE - 0x007D, //RIGHT CURLY BRACKET - 0x007E, //TILDE - 0x007F, //DELETE - 0x20AC, //EURO SIGN - 0xFFFD, //UNDEFINED - 0x201A, //SINGLE LOW-9 QUOTATION MARK - 0x0192, //LATIN SMALL LETTER F WITH HOOK - 0x201E, //DOUBLE LOW-9 QUOTATION MARK - 0x2026, //HORIZONTAL ELLIPSIS - 0x2020, //DAGGER - 0x2021, //DOUBLE DAGGER - 0x02C6, //MODIFIER LETTER CIRCUMFLEX ACCENT - 0x2030, //PER MILLE SIGN - 0xFFFD, //UNDEFINED - 0x2039, //SINGLE LEFT-POINTING ANGLE QUOTATION MARK - 0x0152, //LATIN CAPITAL LIGATURE OE - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x2018, //LEFT SINGLE QUOTATION MARK - 0x2019, //RIGHT SINGLE QUOTATION MARK - 0x201C, //LEFT DOUBLE QUOTATION MARK - 0x201D, //RIGHT DOUBLE QUOTATION MARK - 0x2022, //BULLET - 0x2013, //EN DASH - 0x2014, //EM DASH - 0x02DC, //SMALL TILDE - 0x2122, //TRADE MARK SIGN - 0xFFFD, //UNDEFINED - 0x203A, //SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - 0x0153, //LATIN SMALL LIGATURE OE - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x0178, //LATIN CAPITAL LETTER Y WITH DIAERESIS - 0x00A0, //NO-BREAK SPACE - 0x00A1, //INVERTED EXCLAMATION MARK - 0x00A2, //CENT SIGN - 0x00A3, //POUND SIGN - 0x00A4, //CURRENCY SIGN - 0x00A5, //YEN SIGN - 0x00A6, //BROKEN BAR - 0x00A7, //SECTION SIGN - 0x00A8, //DIAERESIS - 0x00A9, //COPYRIGHT SIGN - 0x00AA, //FEMININE ORDINAL INDICATOR - 0x00AB, //LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00AC, //NOT SIGN - 0x00AD, //SOFT HYPHEN - 0x00AE, //REGISTERED SIGN - 0x00AF, //MACRON - 0x00B0, //DEGREE SIGN - 0x00B1, //PLUS-MINUS SIGN - 0x00B2, //SUPERSCRIPT TWO - 0x00B3, //SUPERSCRIPT THREE - 0x00B4, //ACUTE ACCENT - 0x00B5, //MICRO SIGN - 0x00B6, //PILCROW SIGN - 0x00B7, //MIDDLE DOT - 0x00B8, //CEDILLA - 0x00B9, //SUPERSCRIPT ONE - 0x00BA, //MASCULINE ORDINAL INDICATOR - 0x00BB, //RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00BC, //VULGAR FRACTION ONE QUARTER - 0x00BD, //VULGAR FRACTION ONE HALF - 0x00BE, //VULGAR FRACTION THREE QUARTERS - 0x00BF, //INVERTED QUESTION MARK - 0x00C0, //LATIN CAPITAL LETTER A WITH GRAVE - 0x00C1, //LATIN CAPITAL LETTER A WITH ACUTE - 0x00C2, //LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x0102, //LATIN CAPITAL LETTER A WITH BREVE - 0x00C4, //LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00C5, //LATIN CAPITAL LETTER A WITH RING ABOVE - 0x00C6, //LATIN CAPITAL LETTER AE - 0x00C7, //LATIN CAPITAL LETTER C WITH CEDILLA - 0x00C8, //LATIN CAPITAL LETTER E WITH GRAVE - 0x00C9, //LATIN CAPITAL LETTER E WITH ACUTE - 0x00CA, //LATIN CAPITAL LETTER E WITH CIRCUMFLEX - 0x00CB, //LATIN CAPITAL LETTER E WITH DIAERESIS - 0x0300, //COMBINING GRAVE ACCENT - 0x00CD, //LATIN CAPITAL LETTER I WITH ACUTE - 0x00CE, //LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x00CF, //LATIN CAPITAL LETTER I WITH DIAERESIS - 0x0110, //LATIN CAPITAL LETTER D WITH STROKE - 0x00D1, //LATIN CAPITAL LETTER N WITH TILDE - 0x0309, //COMBINING HOOK ABOVE - 0x00D3, //LATIN CAPITAL LETTER O WITH ACUTE - 0x00D4, //LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x01A0, //LATIN CAPITAL LETTER O WITH HORN - 0x00D6, //LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00D7, //MULTIPLICATION SIGN - 0x00D8, //LATIN CAPITAL LETTER O WITH STROKE - 0x00D9, //LATIN CAPITAL LETTER U WITH GRAVE - 0x00DA, //LATIN CAPITAL LETTER U WITH ACUTE - 0x00DB, //LATIN CAPITAL LETTER U WITH CIRCUMFLEX - 0x00DC, //LATIN CAPITAL LETTER U WITH DIAERESIS - 0x01AF, //LATIN CAPITAL LETTER U WITH HORN - 0x0303, //COMBINING TILDE - 0x00DF, //LATIN SMALL LETTER SHARP S - 0x00E0, //LATIN SMALL LETTER A WITH GRAVE - 0x00E1, //LATIN SMALL LETTER A WITH ACUTE - 0x00E2, //LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x0103, //LATIN SMALL LETTER A WITH BREVE - 0x00E4, //LATIN SMALL LETTER A WITH DIAERESIS - 0x00E5, //LATIN SMALL LETTER A WITH RING ABOVE - 0x00E6, //LATIN SMALL LETTER AE - 0x00E7, //LATIN SMALL LETTER C WITH CEDILLA - 0x00E8, //LATIN SMALL LETTER E WITH GRAVE - 0x00E9, //LATIN SMALL LETTER E WITH ACUTE - 0x00EA, //LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00EB, //LATIN SMALL LETTER E WITH DIAERESIS - 0x0301, //COMBINING ACUTE ACCENT - 0x00ED, //LATIN SMALL LETTER I WITH ACUTE - 0x00EE, //LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00EF, //LATIN SMALL LETTER I WITH DIAERESIS - 0x0111, //LATIN SMALL LETTER D WITH STROKE - 0x00F1, //LATIN SMALL LETTER N WITH TILDE - 0x0323, //COMBINING DOT BELOW - 0x00F3, //LATIN SMALL LETTER O WITH ACUTE - 0x00F4, //LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x01A1, //LATIN SMALL LETTER O WITH HORN - 0x00F6, //LATIN SMALL LETTER O WITH DIAERESIS - 0x00F7, //DIVISION SIGN - 0x00F8, //LATIN SMALL LETTER O WITH STROKE - 0x00F9, //LATIN SMALL LETTER U WITH GRAVE - 0x00FA, //LATIN SMALL LETTER U WITH ACUTE - 0x00FB, //LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00FC, //LATIN SMALL LETTER U WITH DIAERESIS - 0x01B0, //LATIN SMALL LETTER U WITH HORN - 0x20AB, //DONG SIGN - 0x00FF, //LATIN SMALL LETTER Y WITH DIAERESIS - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp437.go b/vendor/github.com/denisenkom/go-mssqldb/cp437.go deleted file mode 100644 index f47f8ecc7..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp437.go +++ /dev/null @@ -1,262 +0,0 @@ -package mssql - -var cp437 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000a, //LINE FEED - 0x000b, //VERTICAL TABULATION - 0x000c, //FORM FEED - 0x000d, //CARRIAGE RETURN - 0x000e, //SHIFT OUT - 0x000f, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001a, //SUBSTITUTE - 0x001b, //ESCAPE - 0x001c, //FILE SEPARATOR - 0x001d, //GROUP SEPARATOR - 0x001e, //RECORD SEPARATOR - 0x001f, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002a, //ASTERISK - 0x002b, //PLUS SIGN - 0x002c, //COMMA - 0x002d, //HYPHEN-MINUS - 0x002e, //FULL STOP - 0x002f, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003a, //COLON - 0x003b, //SEMICOLON - 0x003c, //LESS-THAN SIGN - 0x003d, //EQUALS SIGN - 0x003e, //GREATER-THAN SIGN - 0x003f, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004a, //LATIN CAPITAL LETTER J - 0x004b, //LATIN CAPITAL LETTER K - 0x004c, //LATIN CAPITAL LETTER L - 0x004d, //LATIN CAPITAL LETTER M - 0x004e, //LATIN CAPITAL LETTER N - 0x004f, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005a, //LATIN CAPITAL LETTER Z - 0x005b, //LEFT SQUARE BRACKET - 0x005c, //REVERSE SOLIDUS - 0x005d, //RIGHT SQUARE BRACKET - 0x005e, //CIRCUMFLEX ACCENT - 0x005f, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006a, //LATIN SMALL LETTER J - 0x006b, //LATIN SMALL LETTER K - 0x006c, //LATIN SMALL LETTER L - 0x006d, //LATIN SMALL LETTER M - 0x006e, //LATIN SMALL LETTER N - 0x006f, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007a, //LATIN SMALL LETTER Z - 0x007b, //LEFT CURLY BRACKET - 0x007c, //VERTICAL LINE - 0x007d, //RIGHT CURLY BRACKET - 0x007e, //TILDE - 0x007f, //DELETE - 0x00c7, //LATIN CAPITAL LETTER C WITH CEDILLA - 0x00fc, //LATIN SMALL LETTER U WITH DIAERESIS - 0x00e9, //LATIN SMALL LETTER E WITH ACUTE - 0x00e2, //LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00e4, //LATIN SMALL LETTER A WITH DIAERESIS - 0x00e0, //LATIN SMALL LETTER A WITH GRAVE - 0x00e5, //LATIN SMALL LETTER A WITH RING ABOVE - 0x00e7, //LATIN SMALL LETTER C WITH CEDILLA - 0x00ea, //LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00eb, //LATIN SMALL LETTER E WITH DIAERESIS - 0x00e8, //LATIN SMALL LETTER E WITH GRAVE - 0x00ef, //LATIN SMALL LETTER I WITH DIAERESIS - 0x00ee, //LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00ec, //LATIN SMALL LETTER I WITH GRAVE - 0x00c4, //LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00c5, //LATIN CAPITAL LETTER A WITH RING ABOVE - 0x00c9, //LATIN CAPITAL LETTER E WITH ACUTE - 0x00e6, //LATIN SMALL LIGATURE AE - 0x00c6, //LATIN CAPITAL LIGATURE AE - 0x00f4, //LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00f6, //LATIN SMALL LETTER O WITH DIAERESIS - 0x00f2, //LATIN SMALL LETTER O WITH GRAVE - 0x00fb, //LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00f9, //LATIN SMALL LETTER U WITH GRAVE - 0x00ff, //LATIN SMALL LETTER Y WITH DIAERESIS - 0x00d6, //LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00dc, //LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00a2, //CENT SIGN - 0x00a3, //POUND SIGN - 0x00a5, //YEN SIGN - 0x20a7, //PESETA SIGN - 0x0192, //LATIN SMALL LETTER F WITH HOOK - 0x00e1, //LATIN SMALL LETTER A WITH ACUTE - 0x00ed, //LATIN SMALL LETTER I WITH ACUTE - 0x00f3, //LATIN SMALL LETTER O WITH ACUTE - 0x00fa, //LATIN SMALL LETTER U WITH ACUTE - 0x00f1, //LATIN SMALL LETTER N WITH TILDE - 0x00d1, //LATIN CAPITAL LETTER N WITH TILDE - 0x00aa, //FEMININE ORDINAL INDICATOR - 0x00ba, //MASCULINE ORDINAL INDICATOR - 0x00bf, //INVERTED QUESTION MARK - 0x2310, //REVERSED NOT SIGN - 0x00ac, //NOT SIGN - 0x00bd, //VULGAR FRACTION ONE HALF - 0x00bc, //VULGAR FRACTION ONE QUARTER - 0x00a1, //INVERTED EXCLAMATION MARK - 0x00ab, //LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00bb, //RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x2591, //LIGHT SHADE - 0x2592, //MEDIUM SHADE - 0x2593, //DARK SHADE - 0x2502, //BOX DRAWINGS LIGHT VERTICAL - 0x2524, //BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x2561, //BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0x2562, //BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0x2556, //BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0x2555, //BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0x2563, //BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2551, //BOX DRAWINGS DOUBLE VERTICAL - 0x2557, //BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x255d, //BOX DRAWINGS DOUBLE UP AND LEFT - 0x255c, //BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0x255b, //BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0x2510, //BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514, //BOX DRAWINGS LIGHT UP AND RIGHT - 0x2534, //BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x252c, //BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x251c, //BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2500, //BOX DRAWINGS LIGHT HORIZONTAL - 0x253c, //BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x255e, //BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0x255f, //BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0x255a, //BOX DRAWINGS DOUBLE UP AND RIGHT - 0x2554, //BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2569, //BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x2566, //BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2560, //BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2550, //BOX DRAWINGS DOUBLE HORIZONTAL - 0x256c, //BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x2567, //BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0x2568, //BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0x2564, //BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0x2565, //BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0x2559, //BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0x2558, //BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0x2552, //BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0x2553, //BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0x256b, //BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0x256a, //BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0x2518, //BOX DRAWINGS LIGHT UP AND LEFT - 0x250c, //BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2588, //FULL BLOCK - 0x2584, //LOWER HALF BLOCK - 0x258c, //LEFT HALF BLOCK - 0x2590, //RIGHT HALF BLOCK - 0x2580, //UPPER HALF BLOCK - 0x03b1, //GREEK SMALL LETTER ALPHA - 0x00df, //LATIN SMALL LETTER SHARP S - 0x0393, //GREEK CAPITAL LETTER GAMMA - 0x03c0, //GREEK SMALL LETTER PI - 0x03a3, //GREEK CAPITAL LETTER SIGMA - 0x03c3, //GREEK SMALL LETTER SIGMA - 0x00b5, //MICRO SIGN - 0x03c4, //GREEK SMALL LETTER TAU - 0x03a6, //GREEK CAPITAL LETTER PHI - 0x0398, //GREEK CAPITAL LETTER THETA - 0x03a9, //GREEK CAPITAL LETTER OMEGA - 0x03b4, //GREEK SMALL LETTER DELTA - 0x221e, //INFINITY - 0x03c6, //GREEK SMALL LETTER PHI - 0x03b5, //GREEK SMALL LETTER EPSILON - 0x2229, //INTERSECTION - 0x2261, //IDENTICAL TO - 0x00b1, //PLUS-MINUS SIGN - 0x2265, //GREATER-THAN OR EQUAL TO - 0x2264, //LESS-THAN OR EQUAL TO - 0x2320, //TOP HALF INTEGRAL - 0x2321, //BOTTOM HALF INTEGRAL - 0x00f7, //DIVISION SIGN - 0x2248, //ALMOST EQUAL TO - 0x00b0, //DEGREE SIGN - 0x2219, //BULLET OPERATOR - 0x00b7, //MIDDLE DOT - 0x221a, //SQUARE ROOT - 0x207f, //SUPERSCRIPT LATIN SMALL LETTER N - 0x00b2, //SUPERSCRIPT TWO - 0x25a0, //BLACK SQUARE - 0x00a0, //NO-BREAK SPACE - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp850.go b/vendor/github.com/denisenkom/go-mssqldb/cp850.go deleted file mode 100644 index e6b3d1690..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp850.go +++ /dev/null @@ -1,262 +0,0 @@ -package mssql - -var cp850 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000a, //LINE FEED - 0x000b, //VERTICAL TABULATION - 0x000c, //FORM FEED - 0x000d, //CARRIAGE RETURN - 0x000e, //SHIFT OUT - 0x000f, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001a, //SUBSTITUTE - 0x001b, //ESCAPE - 0x001c, //FILE SEPARATOR - 0x001d, //GROUP SEPARATOR - 0x001e, //RECORD SEPARATOR - 0x001f, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002a, //ASTERISK - 0x002b, //PLUS SIGN - 0x002c, //COMMA - 0x002d, //HYPHEN-MINUS - 0x002e, //FULL STOP - 0x002f, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003a, //COLON - 0x003b, //SEMICOLON - 0x003c, //LESS-THAN SIGN - 0x003d, //EQUALS SIGN - 0x003e, //GREATER-THAN SIGN - 0x003f, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004a, //LATIN CAPITAL LETTER J - 0x004b, //LATIN CAPITAL LETTER K - 0x004c, //LATIN CAPITAL LETTER L - 0x004d, //LATIN CAPITAL LETTER M - 0x004e, //LATIN CAPITAL LETTER N - 0x004f, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005a, //LATIN CAPITAL LETTER Z - 0x005b, //LEFT SQUARE BRACKET - 0x005c, //REVERSE SOLIDUS - 0x005d, //RIGHT SQUARE BRACKET - 0x005e, //CIRCUMFLEX ACCENT - 0x005f, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006a, //LATIN SMALL LETTER J - 0x006b, //LATIN SMALL LETTER K - 0x006c, //LATIN SMALL LETTER L - 0x006d, //LATIN SMALL LETTER M - 0x006e, //LATIN SMALL LETTER N - 0x006f, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007a, //LATIN SMALL LETTER Z - 0x007b, //LEFT CURLY BRACKET - 0x007c, //VERTICAL LINE - 0x007d, //RIGHT CURLY BRACKET - 0x007e, //TILDE - 0x007f, //DELETE - 0x00c7, //LATIN CAPITAL LETTER C WITH CEDILLA - 0x00fc, //LATIN SMALL LETTER U WITH DIAERESIS - 0x00e9, //LATIN SMALL LETTER E WITH ACUTE - 0x00e2, //LATIN SMALL LETTER A WITH CIRCUMFLEX - 0x00e4, //LATIN SMALL LETTER A WITH DIAERESIS - 0x00e0, //LATIN SMALL LETTER A WITH GRAVE - 0x00e5, //LATIN SMALL LETTER A WITH RING ABOVE - 0x00e7, //LATIN SMALL LETTER C WITH CEDILLA - 0x00ea, //LATIN SMALL LETTER E WITH CIRCUMFLEX - 0x00eb, //LATIN SMALL LETTER E WITH DIAERESIS - 0x00e8, //LATIN SMALL LETTER E WITH GRAVE - 0x00ef, //LATIN SMALL LETTER I WITH DIAERESIS - 0x00ee, //LATIN SMALL LETTER I WITH CIRCUMFLEX - 0x00ec, //LATIN SMALL LETTER I WITH GRAVE - 0x00c4, //LATIN CAPITAL LETTER A WITH DIAERESIS - 0x00c5, //LATIN CAPITAL LETTER A WITH RING ABOVE - 0x00c9, //LATIN CAPITAL LETTER E WITH ACUTE - 0x00e6, //LATIN SMALL LIGATURE AE - 0x00c6, //LATIN CAPITAL LIGATURE AE - 0x00f4, //LATIN SMALL LETTER O WITH CIRCUMFLEX - 0x00f6, //LATIN SMALL LETTER O WITH DIAERESIS - 0x00f2, //LATIN SMALL LETTER O WITH GRAVE - 0x00fb, //LATIN SMALL LETTER U WITH CIRCUMFLEX - 0x00f9, //LATIN SMALL LETTER U WITH GRAVE - 0x00ff, //LATIN SMALL LETTER Y WITH DIAERESIS - 0x00d6, //LATIN CAPITAL LETTER O WITH DIAERESIS - 0x00dc, //LATIN CAPITAL LETTER U WITH DIAERESIS - 0x00f8, //LATIN SMALL LETTER O WITH STROKE - 0x00a3, //POUND SIGN - 0x00d8, //LATIN CAPITAL LETTER O WITH STROKE - 0x00d7, //MULTIPLICATION SIGN - 0x0192, //LATIN SMALL LETTER F WITH HOOK - 0x00e1, //LATIN SMALL LETTER A WITH ACUTE - 0x00ed, //LATIN SMALL LETTER I WITH ACUTE - 0x00f3, //LATIN SMALL LETTER O WITH ACUTE - 0x00fa, //LATIN SMALL LETTER U WITH ACUTE - 0x00f1, //LATIN SMALL LETTER N WITH TILDE - 0x00d1, //LATIN CAPITAL LETTER N WITH TILDE - 0x00aa, //FEMININE ORDINAL INDICATOR - 0x00ba, //MASCULINE ORDINAL INDICATOR - 0x00bf, //INVERTED QUESTION MARK - 0x00ae, //REGISTERED SIGN - 0x00ac, //NOT SIGN - 0x00bd, //VULGAR FRACTION ONE HALF - 0x00bc, //VULGAR FRACTION ONE QUARTER - 0x00a1, //INVERTED EXCLAMATION MARK - 0x00ab, //LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x00bb, //RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - 0x2591, //LIGHT SHADE - 0x2592, //MEDIUM SHADE - 0x2593, //DARK SHADE - 0x2502, //BOX DRAWINGS LIGHT VERTICAL - 0x2524, //BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x00c1, //LATIN CAPITAL LETTER A WITH ACUTE - 0x00c2, //LATIN CAPITAL LETTER A WITH CIRCUMFLEX - 0x00c0, //LATIN CAPITAL LETTER A WITH GRAVE - 0x00a9, //COPYRIGHT SIGN - 0x2563, //BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0x2551, //BOX DRAWINGS DOUBLE VERTICAL - 0x2557, //BOX DRAWINGS DOUBLE DOWN AND LEFT - 0x255d, //BOX DRAWINGS DOUBLE UP AND LEFT - 0x00a2, //CENT SIGN - 0x00a5, //YEN SIGN - 0x2510, //BOX DRAWINGS LIGHT DOWN AND LEFT - 0x2514, //BOX DRAWINGS LIGHT UP AND RIGHT - 0x2534, //BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x252c, //BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x251c, //BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x2500, //BOX DRAWINGS LIGHT HORIZONTAL - 0x253c, //BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x00e3, //LATIN SMALL LETTER A WITH TILDE - 0x00c3, //LATIN CAPITAL LETTER A WITH TILDE - 0x255a, //BOX DRAWINGS DOUBLE UP AND RIGHT - 0x2554, //BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0x2569, //BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0x2566, //BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0x2560, //BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0x2550, //BOX DRAWINGS DOUBLE HORIZONTAL - 0x256c, //BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0x00a4, //CURRENCY SIGN - 0x00f0, //LATIN SMALL LETTER ETH - 0x00d0, //LATIN CAPITAL LETTER ETH - 0x00ca, //LATIN CAPITAL LETTER E WITH CIRCUMFLEX - 0x00cb, //LATIN CAPITAL LETTER E WITH DIAERESIS - 0x00c8, //LATIN CAPITAL LETTER E WITH GRAVE - 0x0131, //LATIN SMALL LETTER DOTLESS I - 0x00cd, //LATIN CAPITAL LETTER I WITH ACUTE - 0x00ce, //LATIN CAPITAL LETTER I WITH CIRCUMFLEX - 0x00cf, //LATIN CAPITAL LETTER I WITH DIAERESIS - 0x2518, //BOX DRAWINGS LIGHT UP AND LEFT - 0x250c, //BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x2588, //FULL BLOCK - 0x2584, //LOWER HALF BLOCK - 0x00a6, //BROKEN BAR - 0x00cc, //LATIN CAPITAL LETTER I WITH GRAVE - 0x2580, //UPPER HALF BLOCK - 0x00d3, //LATIN CAPITAL LETTER O WITH ACUTE - 0x00df, //LATIN SMALL LETTER SHARP S - 0x00d4, //LATIN CAPITAL LETTER O WITH CIRCUMFLEX - 0x00d2, //LATIN CAPITAL LETTER O WITH GRAVE - 0x00f5, //LATIN SMALL LETTER O WITH TILDE - 0x00d5, //LATIN CAPITAL LETTER O WITH TILDE - 0x00b5, //MICRO SIGN - 0x00fe, //LATIN SMALL LETTER THORN - 0x00de, //LATIN CAPITAL LETTER THORN - 0x00da, //LATIN CAPITAL LETTER U WITH ACUTE - 0x00db, //LATIN CAPITAL LETTER U WITH CIRCUMFLEX - 0x00d9, //LATIN CAPITAL LETTER U WITH GRAVE - 0x00fd, //LATIN SMALL LETTER Y WITH ACUTE - 0x00dd, //LATIN CAPITAL LETTER Y WITH ACUTE - 0x00af, //MACRON - 0x00b4, //ACUTE ACCENT - 0x00ad, //SOFT HYPHEN - 0x00b1, //PLUS-MINUS SIGN - 0x2017, //DOUBLE LOW LINE - 0x00be, //VULGAR FRACTION THREE QUARTERS - 0x00b6, //PILCROW SIGN - 0x00a7, //SECTION SIGN - 0x00f7, //DIVISION SIGN - 0x00b8, //CEDILLA - 0x00b0, //DEGREE SIGN - 0x00a8, //DIAERESIS - 0x00b7, //MIDDLE DOT - 0x00b9, //SUPERSCRIPT ONE - 0x00b3, //SUPERSCRIPT THREE - 0x00b2, //SUPERSCRIPT TWO - 0x25a0, //BLACK SQUARE - 0x00a0, //NO-BREAK SPACE - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp874.go b/vendor/github.com/denisenkom/go-mssqldb/cp874.go deleted file mode 100644 index 9d691a1a5..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp874.go +++ /dev/null @@ -1,262 +0,0 @@ -package mssql - -var cp874 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000A, //LINE FEED - 0x000B, //VERTICAL TABULATION - 0x000C, //FORM FEED - 0x000D, //CARRIAGE RETURN - 0x000E, //SHIFT OUT - 0x000F, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001A, //SUBSTITUTE - 0x001B, //ESCAPE - 0x001C, //FILE SEPARATOR - 0x001D, //GROUP SEPARATOR - 0x001E, //RECORD SEPARATOR - 0x001F, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002A, //ASTERISK - 0x002B, //PLUS SIGN - 0x002C, //COMMA - 0x002D, //HYPHEN-MINUS - 0x002E, //FULL STOP - 0x002F, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003A, //COLON - 0x003B, //SEMICOLON - 0x003C, //LESS-THAN SIGN - 0x003D, //EQUALS SIGN - 0x003E, //GREATER-THAN SIGN - 0x003F, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004A, //LATIN CAPITAL LETTER J - 0x004B, //LATIN CAPITAL LETTER K - 0x004C, //LATIN CAPITAL LETTER L - 0x004D, //LATIN CAPITAL LETTER M - 0x004E, //LATIN CAPITAL LETTER N - 0x004F, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005A, //LATIN CAPITAL LETTER Z - 0x005B, //LEFT SQUARE BRACKET - 0x005C, //REVERSE SOLIDUS - 0x005D, //RIGHT SQUARE BRACKET - 0x005E, //CIRCUMFLEX ACCENT - 0x005F, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006A, //LATIN SMALL LETTER J - 0x006B, //LATIN SMALL LETTER K - 0x006C, //LATIN SMALL LETTER L - 0x006D, //LATIN SMALL LETTER M - 0x006E, //LATIN SMALL LETTER N - 0x006F, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007A, //LATIN SMALL LETTER Z - 0x007B, //LEFT CURLY BRACKET - 0x007C, //VERTICAL LINE - 0x007D, //RIGHT CURLY BRACKET - 0x007E, //TILDE - 0x007F, //DELETE - 0x20AC, //EURO SIGN - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x2026, //HORIZONTAL ELLIPSIS - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x2018, //LEFT SINGLE QUOTATION MARK - 0x2019, //RIGHT SINGLE QUOTATION MARK - 0x201C, //LEFT DOUBLE QUOTATION MARK - 0x201D, //RIGHT DOUBLE QUOTATION MARK - 0x2022, //BULLET - 0x2013, //EN DASH - 0x2014, //EM DASH - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x00A0, //NO-BREAK SPACE - 0x0E01, //THAI CHARACTER KO KAI - 0x0E02, //THAI CHARACTER KHO KHAI - 0x0E03, //THAI CHARACTER KHO KHUAT - 0x0E04, //THAI CHARACTER KHO KHWAI - 0x0E05, //THAI CHARACTER KHO KHON - 0x0E06, //THAI CHARACTER KHO RAKHANG - 0x0E07, //THAI CHARACTER NGO NGU - 0x0E08, //THAI CHARACTER CHO CHAN - 0x0E09, //THAI CHARACTER CHO CHING - 0x0E0A, //THAI CHARACTER CHO CHANG - 0x0E0B, //THAI CHARACTER SO SO - 0x0E0C, //THAI CHARACTER CHO CHOE - 0x0E0D, //THAI CHARACTER YO YING - 0x0E0E, //THAI CHARACTER DO CHADA - 0x0E0F, //THAI CHARACTER TO PATAK - 0x0E10, //THAI CHARACTER THO THAN - 0x0E11, //THAI CHARACTER THO NANGMONTHO - 0x0E12, //THAI CHARACTER THO PHUTHAO - 0x0E13, //THAI CHARACTER NO NEN - 0x0E14, //THAI CHARACTER DO DEK - 0x0E15, //THAI CHARACTER TO TAO - 0x0E16, //THAI CHARACTER THO THUNG - 0x0E17, //THAI CHARACTER THO THAHAN - 0x0E18, //THAI CHARACTER THO THONG - 0x0E19, //THAI CHARACTER NO NU - 0x0E1A, //THAI CHARACTER BO BAIMAI - 0x0E1B, //THAI CHARACTER PO PLA - 0x0E1C, //THAI CHARACTER PHO PHUNG - 0x0E1D, //THAI CHARACTER FO FA - 0x0E1E, //THAI CHARACTER PHO PHAN - 0x0E1F, //THAI CHARACTER FO FAN - 0x0E20, //THAI CHARACTER PHO SAMPHAO - 0x0E21, //THAI CHARACTER MO MA - 0x0E22, //THAI CHARACTER YO YAK - 0x0E23, //THAI CHARACTER RO RUA - 0x0E24, //THAI CHARACTER RU - 0x0E25, //THAI CHARACTER LO LING - 0x0E26, //THAI CHARACTER LU - 0x0E27, //THAI CHARACTER WO WAEN - 0x0E28, //THAI CHARACTER SO SALA - 0x0E29, //THAI CHARACTER SO RUSI - 0x0E2A, //THAI CHARACTER SO SUA - 0x0E2B, //THAI CHARACTER HO HIP - 0x0E2C, //THAI CHARACTER LO CHULA - 0x0E2D, //THAI CHARACTER O ANG - 0x0E2E, //THAI CHARACTER HO NOKHUK - 0x0E2F, //THAI CHARACTER PAIYANNOI - 0x0E30, //THAI CHARACTER SARA A - 0x0E31, //THAI CHARACTER MAI HAN-AKAT - 0x0E32, //THAI CHARACTER SARA AA - 0x0E33, //THAI CHARACTER SARA AM - 0x0E34, //THAI CHARACTER SARA I - 0x0E35, //THAI CHARACTER SARA II - 0x0E36, //THAI CHARACTER SARA UE - 0x0E37, //THAI CHARACTER SARA UEE - 0x0E38, //THAI CHARACTER SARA U - 0x0E39, //THAI CHARACTER SARA UU - 0x0E3A, //THAI CHARACTER PHINTHU - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0x0E3F, //THAI CURRENCY SYMBOL BAHT - 0x0E40, //THAI CHARACTER SARA E - 0x0E41, //THAI CHARACTER SARA AE - 0x0E42, //THAI CHARACTER SARA O - 0x0E43, //THAI CHARACTER SARA AI MAIMUAN - 0x0E44, //THAI CHARACTER SARA AI MAIMALAI - 0x0E45, //THAI CHARACTER LAKKHANGYAO - 0x0E46, //THAI CHARACTER MAIYAMOK - 0x0E47, //THAI CHARACTER MAITAIKHU - 0x0E48, //THAI CHARACTER MAI EK - 0x0E49, //THAI CHARACTER MAI THO - 0x0E4A, //THAI CHARACTER MAI TRI - 0x0E4B, //THAI CHARACTER MAI CHATTAWA - 0x0E4C, //THAI CHARACTER THANTHAKHAT - 0x0E4D, //THAI CHARACTER NIKHAHIT - 0x0E4E, //THAI CHARACTER YAMAKKAN - 0x0E4F, //THAI CHARACTER FONGMAN - 0x0E50, //THAI DIGIT ZERO - 0x0E51, //THAI DIGIT ONE - 0x0E52, //THAI DIGIT TWO - 0x0E53, //THAI DIGIT THREE - 0x0E54, //THAI DIGIT FOUR - 0x0E55, //THAI DIGIT FIVE - 0x0E56, //THAI DIGIT SIX - 0x0E57, //THAI DIGIT SEVEN - 0x0E58, //THAI DIGIT EIGHT - 0x0E59, //THAI DIGIT NINE - 0x0E5A, //THAI CHARACTER ANGKHANKHU - 0x0E5B, //THAI CHARACTER KHOMUT - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp932.go b/vendor/github.com/denisenkom/go-mssqldb/cp932.go deleted file mode 100644 index 980c55d81..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp932.go +++ /dev/null @@ -1,7988 +0,0 @@ -package mssql - -var cp932 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000A, //LINE FEED - 0x000B, //VERTICAL TABULATION - 0x000C, //FORM FEED - 0x000D, //CARRIAGE RETURN - 0x000E, //SHIFT OUT - 0x000F, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001A, //SUBSTITUTE - 0x001B, //ESCAPE - 0x001C, //FILE SEPARATOR - 0x001D, //GROUP SEPARATOR - 0x001E, //RECORD SEPARATOR - 0x001F, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002A, //ASTERISK - 0x002B, //PLUS SIGN - 0x002C, //COMMA - 0x002D, //HYPHEN-MINUS - 0x002E, //FULL STOP - 0x002F, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003A, //COLON - 0x003B, //SEMICOLON - 0x003C, //LESS-THAN SIGN - 0x003D, //EQUALS SIGN - 0x003E, //GREATER-THAN SIGN - 0x003F, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004A, //LATIN CAPITAL LETTER J - 0x004B, //LATIN CAPITAL LETTER K - 0x004C, //LATIN CAPITAL LETTER L - 0x004D, //LATIN CAPITAL LETTER M - 0x004E, //LATIN CAPITAL LETTER N - 0x004F, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005A, //LATIN CAPITAL LETTER Z - 0x005B, //LEFT SQUARE BRACKET - 0x005C, //REVERSE SOLIDUS - 0x005D, //RIGHT SQUARE BRACKET - 0x005E, //CIRCUMFLEX ACCENT - 0x005F, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006A, //LATIN SMALL LETTER J - 0x006B, //LATIN SMALL LETTER K - 0x006C, //LATIN SMALL LETTER L - 0x006D, //LATIN SMALL LETTER M - 0x006E, //LATIN SMALL LETTER N - 0x006F, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007A, //LATIN SMALL LETTER Z - 0x007B, //LEFT CURLY BRACKET - 0x007C, //VERTICAL LINE - 0x007D, //RIGHT CURLY BRACKET - 0x007E, //TILDE - 0x007F, //DELETE - 0xFFFD, //UNDEFINED - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - 0xFFFD, //UNDEFINED - 0xFF61, //HALFWIDTH IDEOGRAPHIC FULL STOP - 0xFF62, //HALFWIDTH LEFT CORNER BRACKET - 0xFF63, //HALFWIDTH RIGHT CORNER BRACKET - 0xFF64, //HALFWIDTH IDEOGRAPHIC COMMA - 0xFF65, //HALFWIDTH KATAKANA MIDDLE DOT - 0xFF66, //HALFWIDTH KATAKANA LETTER WO - 0xFF67, //HALFWIDTH KATAKANA LETTER SMALL A - 0xFF68, //HALFWIDTH KATAKANA LETTER SMALL I - 0xFF69, //HALFWIDTH KATAKANA LETTER SMALL U - 0xFF6A, //HALFWIDTH KATAKANA LETTER SMALL E - 0xFF6B, //HALFWIDTH KATAKANA LETTER SMALL O - 0xFF6C, //HALFWIDTH KATAKANA LETTER SMALL YA - 0xFF6D, //HALFWIDTH KATAKANA LETTER SMALL YU - 0xFF6E, //HALFWIDTH KATAKANA LETTER SMALL YO - 0xFF6F, //HALFWIDTH KATAKANA LETTER SMALL TU - 0xFF70, //HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK - 0xFF71, //HALFWIDTH KATAKANA LETTER A - 0xFF72, //HALFWIDTH KATAKANA LETTER I - 0xFF73, //HALFWIDTH KATAKANA LETTER U - 0xFF74, //HALFWIDTH KATAKANA LETTER E - 0xFF75, //HALFWIDTH KATAKANA LETTER O - 0xFF76, //HALFWIDTH KATAKANA LETTER KA - 0xFF77, //HALFWIDTH KATAKANA LETTER KI - 0xFF78, //HALFWIDTH KATAKANA LETTER KU - 0xFF79, //HALFWIDTH KATAKANA LETTER KE - 0xFF7A, //HALFWIDTH KATAKANA LETTER KO - 0xFF7B, //HALFWIDTH KATAKANA LETTER SA - 0xFF7C, //HALFWIDTH KATAKANA LETTER SI - 0xFF7D, //HALFWIDTH KATAKANA LETTER SU - 0xFF7E, //HALFWIDTH KATAKANA LETTER SE - 0xFF7F, //HALFWIDTH KATAKANA LETTER SO - 0xFF80, //HALFWIDTH KATAKANA LETTER TA - 0xFF81, //HALFWIDTH KATAKANA LETTER TI - 0xFF82, //HALFWIDTH KATAKANA LETTER TU - 0xFF83, //HALFWIDTH KATAKANA LETTER TE - 0xFF84, //HALFWIDTH KATAKANA LETTER TO - 0xFF85, //HALFWIDTH KATAKANA LETTER NA - 0xFF86, //HALFWIDTH KATAKANA LETTER NI - 0xFF87, //HALFWIDTH KATAKANA LETTER NU - 0xFF88, //HALFWIDTH KATAKANA LETTER NE - 0xFF89, //HALFWIDTH KATAKANA LETTER NO - 0xFF8A, //HALFWIDTH KATAKANA LETTER HA - 0xFF8B, //HALFWIDTH KATAKANA LETTER HI - 0xFF8C, //HALFWIDTH KATAKANA LETTER HU - 0xFF8D, //HALFWIDTH KATAKANA LETTER HE - 0xFF8E, //HALFWIDTH KATAKANA LETTER HO - 0xFF8F, //HALFWIDTH KATAKANA LETTER MA - 0xFF90, //HALFWIDTH KATAKANA LETTER MI - 0xFF91, //HALFWIDTH KATAKANA LETTER MU - 0xFF92, //HALFWIDTH KATAKANA LETTER ME - 0xFF93, //HALFWIDTH KATAKANA LETTER MO - 0xFF94, //HALFWIDTH KATAKANA LETTER YA - 0xFF95, //HALFWIDTH KATAKANA LETTER YU - 0xFF96, //HALFWIDTH KATAKANA LETTER YO - 0xFF97, //HALFWIDTH KATAKANA LETTER RA - 0xFF98, //HALFWIDTH KATAKANA LETTER RI - 0xFF99, //HALFWIDTH KATAKANA LETTER RU - 0xFF9A, //HALFWIDTH KATAKANA LETTER RE - 0xFF9B, //HALFWIDTH KATAKANA LETTER RO - 0xFF9C, //HALFWIDTH KATAKANA LETTER WA - 0xFF9D, //HALFWIDTH KATAKANA LETTER N - 0xFF9E, //HALFWIDTH KATAKANA VOICED SOUND MARK - 0xFF9F, //HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - 0xFFFD, //UNDEFINED - }, - db: map[int]rune{ - 0x8140: 0x3000, //IDEOGRAPHIC SPACE - 0x8141: 0x3001, //IDEOGRAPHIC COMMA - 0x8142: 0x3002, //IDEOGRAPHIC FULL STOP - 0x8143: 0xFF0C, //FULLWIDTH COMMA - 0x8144: 0xFF0E, //FULLWIDTH FULL STOP - 0x8145: 0x30FB, //KATAKANA MIDDLE DOT - 0x8146: 0xFF1A, //FULLWIDTH COLON - 0x8147: 0xFF1B, //FULLWIDTH SEMICOLON - 0x8148: 0xFF1F, //FULLWIDTH QUESTION MARK - 0x8149: 0xFF01, //FULLWIDTH EXCLAMATION MARK - 0x814A: 0x309B, //KATAKANA-HIRAGANA VOICED SOUND MARK - 0x814B: 0x309C, //KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK - 0x814C: 0x00B4, //ACUTE ACCENT - 0x814D: 0xFF40, //FULLWIDTH GRAVE ACCENT - 0x814E: 0x00A8, //DIAERESIS - 0x814F: 0xFF3E, //FULLWIDTH CIRCUMFLEX ACCENT - 0x8150: 0xFFE3, //FULLWIDTH MACRON - 0x8151: 0xFF3F, //FULLWIDTH LOW LINE - 0x8152: 0x30FD, //KATAKANA ITERATION MARK - 0x8153: 0x30FE, //KATAKANA VOICED ITERATION MARK - 0x8154: 0x309D, //HIRAGANA ITERATION MARK - 0x8155: 0x309E, //HIRAGANA VOICED ITERATION MARK - 0x8156: 0x3003, //DITTO MARK - 0x8157: 0x4EDD, //CJK UNIFIED IDEOGRAPH - 0x8158: 0x3005, //IDEOGRAPHIC ITERATION MARK - 0x8159: 0x3006, //IDEOGRAPHIC CLOSING MARK - 0x815A: 0x3007, //IDEOGRAPHIC NUMBER ZERO - 0x815B: 0x30FC, //KATAKANA-HIRAGANA PROLONGED SOUND MARK - 0x815C: 0x2015, //HORIZONTAL BAR - 0x815D: 0x2010, //HYPHEN - 0x815E: 0xFF0F, //FULLWIDTH SOLIDUS - 0x815F: 0xFF3C, //FULLWIDTH REVERSE SOLIDUS - 0x8160: 0xFF5E, //FULLWIDTH TILDE - 0x8161: 0x2225, //PARALLEL TO - 0x8162: 0xFF5C, //FULLWIDTH VERTICAL LINE - 0x8163: 0x2026, //HORIZONTAL ELLIPSIS - 0x8164: 0x2025, //TWO DOT LEADER - 0x8165: 0x2018, //LEFT SINGLE QUOTATION MARK - 0x8166: 0x2019, //RIGHT SINGLE QUOTATION MARK - 0x8167: 0x201C, //LEFT DOUBLE QUOTATION MARK - 0x8168: 0x201D, //RIGHT DOUBLE QUOTATION MARK - 0x8169: 0xFF08, //FULLWIDTH LEFT PARENTHESIS - 0x816A: 0xFF09, //FULLWIDTH RIGHT PARENTHESIS - 0x816B: 0x3014, //LEFT TORTOISE SHELL BRACKET - 0x816C: 0x3015, //RIGHT TORTOISE SHELL BRACKET - 0x816D: 0xFF3B, //FULLWIDTH LEFT SQUARE BRACKET - 0x816E: 0xFF3D, //FULLWIDTH RIGHT SQUARE BRACKET - 0x816F: 0xFF5B, //FULLWIDTH LEFT CURLY BRACKET - 0x8170: 0xFF5D, //FULLWIDTH RIGHT CURLY BRACKET - 0x8171: 0x3008, //LEFT ANGLE BRACKET - 0x8172: 0x3009, //RIGHT ANGLE BRACKET - 0x8173: 0x300A, //LEFT DOUBLE ANGLE BRACKET - 0x8174: 0x300B, //RIGHT DOUBLE ANGLE BRACKET - 0x8175: 0x300C, //LEFT CORNER BRACKET - 0x8176: 0x300D, //RIGHT CORNER BRACKET - 0x8177: 0x300E, //LEFT WHITE CORNER BRACKET - 0x8178: 0x300F, //RIGHT WHITE CORNER BRACKET - 0x8179: 0x3010, //LEFT BLACK LENTICULAR BRACKET - 0x817A: 0x3011, //RIGHT BLACK LENTICULAR BRACKET - 0x817B: 0xFF0B, //FULLWIDTH PLUS SIGN - 0x817C: 0xFF0D, //FULLWIDTH HYPHEN-MINUS - 0x817D: 0x00B1, //PLUS-MINUS SIGN - 0x817E: 0x00D7, //MULTIPLICATION SIGN - 0x8180: 0x00F7, //DIVISION SIGN - 0x8181: 0xFF1D, //FULLWIDTH EQUALS SIGN - 0x8182: 0x2260, //NOT EQUAL TO - 0x8183: 0xFF1C, //FULLWIDTH LESS-THAN SIGN - 0x8184: 0xFF1E, //FULLWIDTH GREATER-THAN SIGN - 0x8185: 0x2266, //LESS-THAN OVER EQUAL TO - 0x8186: 0x2267, //GREATER-THAN OVER EQUAL TO - 0x8187: 0x221E, //INFINITY - 0x8188: 0x2234, //THEREFORE - 0x8189: 0x2642, //MALE SIGN - 0x818A: 0x2640, //FEMALE SIGN - 0x818B: 0x00B0, //DEGREE SIGN - 0x818C: 0x2032, //PRIME - 0x818D: 0x2033, //DOUBLE PRIME - 0x818E: 0x2103, //DEGREE CELSIUS - 0x818F: 0xFFE5, //FULLWIDTH YEN SIGN - 0x8190: 0xFF04, //FULLWIDTH DOLLAR SIGN - 0x8191: 0xFFE0, //FULLWIDTH CENT SIGN - 0x8192: 0xFFE1, //FULLWIDTH POUND SIGN - 0x8193: 0xFF05, //FULLWIDTH PERCENT SIGN - 0x8194: 0xFF03, //FULLWIDTH NUMBER SIGN - 0x8195: 0xFF06, //FULLWIDTH AMPERSAND - 0x8196: 0xFF0A, //FULLWIDTH ASTERISK - 0x8197: 0xFF20, //FULLWIDTH COMMERCIAL AT - 0x8198: 0x00A7, //SECTION SIGN - 0x8199: 0x2606, //WHITE STAR - 0x819A: 0x2605, //BLACK STAR - 0x819B: 0x25CB, //WHITE CIRCLE - 0x819C: 0x25CF, //BLACK CIRCLE - 0x819D: 0x25CE, //BULLSEYE - 0x819E: 0x25C7, //WHITE DIAMOND - 0x819F: 0x25C6, //BLACK DIAMOND - 0x81A0: 0x25A1, //WHITE SQUARE - 0x81A1: 0x25A0, //BLACK SQUARE - 0x81A2: 0x25B3, //WHITE UP-POINTING TRIANGLE - 0x81A3: 0x25B2, //BLACK UP-POINTING TRIANGLE - 0x81A4: 0x25BD, //WHITE DOWN-POINTING TRIANGLE - 0x81A5: 0x25BC, //BLACK DOWN-POINTING TRIANGLE - 0x81A6: 0x203B, //REFERENCE MARK - 0x81A7: 0x3012, //POSTAL MARK - 0x81A8: 0x2192, //RIGHTWARDS ARROW - 0x81A9: 0x2190, //LEFTWARDS ARROW - 0x81AA: 0x2191, //UPWARDS ARROW - 0x81AB: 0x2193, //DOWNWARDS ARROW - 0x81AC: 0x3013, //GETA MARK - 0x81B8: 0x2208, //ELEMENT OF - 0x81B9: 0x220B, //CONTAINS AS MEMBER - 0x81BA: 0x2286, //SUBSET OF OR EQUAL TO - 0x81BB: 0x2287, //SUPERSET OF OR EQUAL TO - 0x81BC: 0x2282, //SUBSET OF - 0x81BD: 0x2283, //SUPERSET OF - 0x81BE: 0x222A, //UNION - 0x81BF: 0x2229, //INTERSECTION - 0x81C8: 0x2227, //LOGICAL AND - 0x81C9: 0x2228, //LOGICAL OR - 0x81CA: 0xFFE2, //FULLWIDTH NOT SIGN - 0x81CB: 0x21D2, //RIGHTWARDS DOUBLE ARROW - 0x81CC: 0x21D4, //LEFT RIGHT DOUBLE ARROW - 0x81CD: 0x2200, //FOR ALL - 0x81CE: 0x2203, //THERE EXISTS - 0x81DA: 0x2220, //ANGLE - 0x81DB: 0x22A5, //UP TACK - 0x81DC: 0x2312, //ARC - 0x81DD: 0x2202, //PARTIAL DIFFERENTIAL - 0x81DE: 0x2207, //NABLA - 0x81DF: 0x2261, //IDENTICAL TO - 0x81E0: 0x2252, //APPROXIMATELY EQUAL TO OR THE IMAGE OF - 0x81E1: 0x226A, //MUCH LESS-THAN - 0x81E2: 0x226B, //MUCH GREATER-THAN - 0x81E3: 0x221A, //SQUARE ROOT - 0x81E4: 0x223D, //REVERSED TILDE - 0x81E5: 0x221D, //PROPORTIONAL TO - 0x81E6: 0x2235, //BECAUSE - 0x81E7: 0x222B, //INTEGRAL - 0x81E8: 0x222C, //DOUBLE INTEGRAL - 0x81F0: 0x212B, //ANGSTROM SIGN - 0x81F1: 0x2030, //PER MILLE SIGN - 0x81F2: 0x266F, //MUSIC SHARP SIGN - 0x81F3: 0x266D, //MUSIC FLAT SIGN - 0x81F4: 0x266A, //EIGHTH NOTE - 0x81F5: 0x2020, //DAGGER - 0x81F6: 0x2021, //DOUBLE DAGGER - 0x81F7: 0x00B6, //PILCROW SIGN - 0x81FC: 0x25EF, //LARGE CIRCLE - 0x824F: 0xFF10, //FULLWIDTH DIGIT ZERO - 0x8250: 0xFF11, //FULLWIDTH DIGIT ONE - 0x8251: 0xFF12, //FULLWIDTH DIGIT TWO - 0x8252: 0xFF13, //FULLWIDTH DIGIT THREE - 0x8253: 0xFF14, //FULLWIDTH DIGIT FOUR - 0x8254: 0xFF15, //FULLWIDTH DIGIT FIVE - 0x8255: 0xFF16, //FULLWIDTH DIGIT SIX - 0x8256: 0xFF17, //FULLWIDTH DIGIT SEVEN - 0x8257: 0xFF18, //FULLWIDTH DIGIT EIGHT - 0x8258: 0xFF19, //FULLWIDTH DIGIT NINE - 0x8260: 0xFF21, //FULLWIDTH LATIN CAPITAL LETTER A - 0x8261: 0xFF22, //FULLWIDTH LATIN CAPITAL LETTER B - 0x8262: 0xFF23, //FULLWIDTH LATIN CAPITAL LETTER C - 0x8263: 0xFF24, //FULLWIDTH LATIN CAPITAL LETTER D - 0x8264: 0xFF25, //FULLWIDTH LATIN CAPITAL LETTER E - 0x8265: 0xFF26, //FULLWIDTH LATIN CAPITAL LETTER F - 0x8266: 0xFF27, //FULLWIDTH LATIN CAPITAL LETTER G - 0x8267: 0xFF28, //FULLWIDTH LATIN CAPITAL LETTER H - 0x8268: 0xFF29, //FULLWIDTH LATIN CAPITAL LETTER I - 0x8269: 0xFF2A, //FULLWIDTH LATIN CAPITAL LETTER J - 0x826A: 0xFF2B, //FULLWIDTH LATIN CAPITAL LETTER K - 0x826B: 0xFF2C, //FULLWIDTH LATIN CAPITAL LETTER L - 0x826C: 0xFF2D, //FULLWIDTH LATIN CAPITAL LETTER M - 0x826D: 0xFF2E, //FULLWIDTH LATIN CAPITAL LETTER N - 0x826E: 0xFF2F, //FULLWIDTH LATIN CAPITAL LETTER O - 0x826F: 0xFF30, //FULLWIDTH LATIN CAPITAL LETTER P - 0x8270: 0xFF31, //FULLWIDTH LATIN CAPITAL LETTER Q - 0x8271: 0xFF32, //FULLWIDTH LATIN CAPITAL LETTER R - 0x8272: 0xFF33, //FULLWIDTH LATIN CAPITAL LETTER S - 0x8273: 0xFF34, //FULLWIDTH LATIN CAPITAL LETTER T - 0x8274: 0xFF35, //FULLWIDTH LATIN CAPITAL LETTER U - 0x8275: 0xFF36, //FULLWIDTH LATIN CAPITAL LETTER V - 0x8276: 0xFF37, //FULLWIDTH LATIN CAPITAL LETTER W - 0x8277: 0xFF38, //FULLWIDTH LATIN CAPITAL LETTER X - 0x8278: 0xFF39, //FULLWIDTH LATIN CAPITAL LETTER Y - 0x8279: 0xFF3A, //FULLWIDTH LATIN CAPITAL LETTER Z - 0x8281: 0xFF41, //FULLWIDTH LATIN SMALL LETTER A - 0x8282: 0xFF42, //FULLWIDTH LATIN SMALL LETTER B - 0x8283: 0xFF43, //FULLWIDTH LATIN SMALL LETTER C - 0x8284: 0xFF44, //FULLWIDTH LATIN SMALL LETTER D - 0x8285: 0xFF45, //FULLWIDTH LATIN SMALL LETTER E - 0x8286: 0xFF46, //FULLWIDTH LATIN SMALL LETTER F - 0x8287: 0xFF47, //FULLWIDTH LATIN SMALL LETTER G - 0x8288: 0xFF48, //FULLWIDTH LATIN SMALL LETTER H - 0x8289: 0xFF49, //FULLWIDTH LATIN SMALL LETTER I - 0x828A: 0xFF4A, //FULLWIDTH LATIN SMALL LETTER J - 0x828B: 0xFF4B, //FULLWIDTH LATIN SMALL LETTER K - 0x828C: 0xFF4C, //FULLWIDTH LATIN SMALL LETTER L - 0x828D: 0xFF4D, //FULLWIDTH LATIN SMALL LETTER M - 0x828E: 0xFF4E, //FULLWIDTH LATIN SMALL LETTER N - 0x828F: 0xFF4F, //FULLWIDTH LATIN SMALL LETTER O - 0x8290: 0xFF50, //FULLWIDTH LATIN SMALL LETTER P - 0x8291: 0xFF51, //FULLWIDTH LATIN SMALL LETTER Q - 0x8292: 0xFF52, //FULLWIDTH LATIN SMALL LETTER R - 0x8293: 0xFF53, //FULLWIDTH LATIN SMALL LETTER S - 0x8294: 0xFF54, //FULLWIDTH LATIN SMALL LETTER T - 0x8295: 0xFF55, //FULLWIDTH LATIN SMALL LETTER U - 0x8296: 0xFF56, //FULLWIDTH LATIN SMALL LETTER V - 0x8297: 0xFF57, //FULLWIDTH LATIN SMALL LETTER W - 0x8298: 0xFF58, //FULLWIDTH LATIN SMALL LETTER X - 0x8299: 0xFF59, //FULLWIDTH LATIN SMALL LETTER Y - 0x829A: 0xFF5A, //FULLWIDTH LATIN SMALL LETTER Z - 0x829F: 0x3041, //HIRAGANA LETTER SMALL A - 0x82A0: 0x3042, //HIRAGANA LETTER A - 0x82A1: 0x3043, //HIRAGANA LETTER SMALL I - 0x82A2: 0x3044, //HIRAGANA LETTER I - 0x82A3: 0x3045, //HIRAGANA LETTER SMALL U - 0x82A4: 0x3046, //HIRAGANA LETTER U - 0x82A5: 0x3047, //HIRAGANA LETTER SMALL E - 0x82A6: 0x3048, //HIRAGANA LETTER E - 0x82A7: 0x3049, //HIRAGANA LETTER SMALL O - 0x82A8: 0x304A, //HIRAGANA LETTER O - 0x82A9: 0x304B, //HIRAGANA LETTER KA - 0x82AA: 0x304C, //HIRAGANA LETTER GA - 0x82AB: 0x304D, //HIRAGANA LETTER KI - 0x82AC: 0x304E, //HIRAGANA LETTER GI - 0x82AD: 0x304F, //HIRAGANA LETTER KU - 0x82AE: 0x3050, //HIRAGANA LETTER GU - 0x82AF: 0x3051, //HIRAGANA LETTER KE - 0x82B0: 0x3052, //HIRAGANA LETTER GE - 0x82B1: 0x3053, //HIRAGANA LETTER KO - 0x82B2: 0x3054, //HIRAGANA LETTER GO - 0x82B3: 0x3055, //HIRAGANA LETTER SA - 0x82B4: 0x3056, //HIRAGANA LETTER ZA - 0x82B5: 0x3057, //HIRAGANA LETTER SI - 0x82B6: 0x3058, //HIRAGANA LETTER ZI - 0x82B7: 0x3059, //HIRAGANA LETTER SU - 0x82B8: 0x305A, //HIRAGANA LETTER ZU - 0x82B9: 0x305B, //HIRAGANA LETTER SE - 0x82BA: 0x305C, //HIRAGANA LETTER ZE - 0x82BB: 0x305D, //HIRAGANA LETTER SO - 0x82BC: 0x305E, //HIRAGANA LETTER ZO - 0x82BD: 0x305F, //HIRAGANA LETTER TA - 0x82BE: 0x3060, //HIRAGANA LETTER DA - 0x82BF: 0x3061, //HIRAGANA LETTER TI - 0x82C0: 0x3062, //HIRAGANA LETTER DI - 0x82C1: 0x3063, //HIRAGANA LETTER SMALL TU - 0x82C2: 0x3064, //HIRAGANA LETTER TU - 0x82C3: 0x3065, //HIRAGANA LETTER DU - 0x82C4: 0x3066, //HIRAGANA LETTER TE - 0x82C5: 0x3067, //HIRAGANA LETTER DE - 0x82C6: 0x3068, //HIRAGANA LETTER TO - 0x82C7: 0x3069, //HIRAGANA LETTER DO - 0x82C8: 0x306A, //HIRAGANA LETTER NA - 0x82C9: 0x306B, //HIRAGANA LETTER NI - 0x82CA: 0x306C, //HIRAGANA LETTER NU - 0x82CB: 0x306D, //HIRAGANA LETTER NE - 0x82CC: 0x306E, //HIRAGANA LETTER NO - 0x82CD: 0x306F, //HIRAGANA LETTER HA - 0x82CE: 0x3070, //HIRAGANA LETTER BA - 0x82CF: 0x3071, //HIRAGANA LETTER PA - 0x82D0: 0x3072, //HIRAGANA LETTER HI - 0x82D1: 0x3073, //HIRAGANA LETTER BI - 0x82D2: 0x3074, //HIRAGANA LETTER PI - 0x82D3: 0x3075, //HIRAGANA LETTER HU - 0x82D4: 0x3076, //HIRAGANA LETTER BU - 0x82D5: 0x3077, //HIRAGANA LETTER PU - 0x82D6: 0x3078, //HIRAGANA LETTER HE - 0x82D7: 0x3079, //HIRAGANA LETTER BE - 0x82D8: 0x307A, //HIRAGANA LETTER PE - 0x82D9: 0x307B, //HIRAGANA LETTER HO - 0x82DA: 0x307C, //HIRAGANA LETTER BO - 0x82DB: 0x307D, //HIRAGANA LETTER PO - 0x82DC: 0x307E, //HIRAGANA LETTER MA - 0x82DD: 0x307F, //HIRAGANA LETTER MI - 0x82DE: 0x3080, //HIRAGANA LETTER MU - 0x82DF: 0x3081, //HIRAGANA LETTER ME - 0x82E0: 0x3082, //HIRAGANA LETTER MO - 0x82E1: 0x3083, //HIRAGANA LETTER SMALL YA - 0x82E2: 0x3084, //HIRAGANA LETTER YA - 0x82E3: 0x3085, //HIRAGANA LETTER SMALL YU - 0x82E4: 0x3086, //HIRAGANA LETTER YU - 0x82E5: 0x3087, //HIRAGANA LETTER SMALL YO - 0x82E6: 0x3088, //HIRAGANA LETTER YO - 0x82E7: 0x3089, //HIRAGANA LETTER RA - 0x82E8: 0x308A, //HIRAGANA LETTER RI - 0x82E9: 0x308B, //HIRAGANA LETTER RU - 0x82EA: 0x308C, //HIRAGANA LETTER RE - 0x82EB: 0x308D, //HIRAGANA LETTER RO - 0x82EC: 0x308E, //HIRAGANA LETTER SMALL WA - 0x82ED: 0x308F, //HIRAGANA LETTER WA - 0x82EE: 0x3090, //HIRAGANA LETTER WI - 0x82EF: 0x3091, //HIRAGANA LETTER WE - 0x82F0: 0x3092, //HIRAGANA LETTER WO - 0x82F1: 0x3093, //HIRAGANA LETTER N - 0x8340: 0x30A1, //KATAKANA LETTER SMALL A - 0x8341: 0x30A2, //KATAKANA LETTER A - 0x8342: 0x30A3, //KATAKANA LETTER SMALL I - 0x8343: 0x30A4, //KATAKANA LETTER I - 0x8344: 0x30A5, //KATAKANA LETTER SMALL U - 0x8345: 0x30A6, //KATAKANA LETTER U - 0x8346: 0x30A7, //KATAKANA LETTER SMALL E - 0x8347: 0x30A8, //KATAKANA LETTER E - 0x8348: 0x30A9, //KATAKANA LETTER SMALL O - 0x8349: 0x30AA, //KATAKANA LETTER O - 0x834A: 0x30AB, //KATAKANA LETTER KA - 0x834B: 0x30AC, //KATAKANA LETTER GA - 0x834C: 0x30AD, //KATAKANA LETTER KI - 0x834D: 0x30AE, //KATAKANA LETTER GI - 0x834E: 0x30AF, //KATAKANA LETTER KU - 0x834F: 0x30B0, //KATAKANA LETTER GU - 0x8350: 0x30B1, //KATAKANA LETTER KE - 0x8351: 0x30B2, //KATAKANA LETTER GE - 0x8352: 0x30B3, //KATAKANA LETTER KO - 0x8353: 0x30B4, //KATAKANA LETTER GO - 0x8354: 0x30B5, //KATAKANA LETTER SA - 0x8355: 0x30B6, //KATAKANA LETTER ZA - 0x8356: 0x30B7, //KATAKANA LETTER SI - 0x8357: 0x30B8, //KATAKANA LETTER ZI - 0x8358: 0x30B9, //KATAKANA LETTER SU - 0x8359: 0x30BA, //KATAKANA LETTER ZU - 0x835A: 0x30BB, //KATAKANA LETTER SE - 0x835B: 0x30BC, //KATAKANA LETTER ZE - 0x835C: 0x30BD, //KATAKANA LETTER SO - 0x835D: 0x30BE, //KATAKANA LETTER ZO - 0x835E: 0x30BF, //KATAKANA LETTER TA - 0x835F: 0x30C0, //KATAKANA LETTER DA - 0x8360: 0x30C1, //KATAKANA LETTER TI - 0x8361: 0x30C2, //KATAKANA LETTER DI - 0x8362: 0x30C3, //KATAKANA LETTER SMALL TU - 0x8363: 0x30C4, //KATAKANA LETTER TU - 0x8364: 0x30C5, //KATAKANA LETTER DU - 0x8365: 0x30C6, //KATAKANA LETTER TE - 0x8366: 0x30C7, //KATAKANA LETTER DE - 0x8367: 0x30C8, //KATAKANA LETTER TO - 0x8368: 0x30C9, //KATAKANA LETTER DO - 0x8369: 0x30CA, //KATAKANA LETTER NA - 0x836A: 0x30CB, //KATAKANA LETTER NI - 0x836B: 0x30CC, //KATAKANA LETTER NU - 0x836C: 0x30CD, //KATAKANA LETTER NE - 0x836D: 0x30CE, //KATAKANA LETTER NO - 0x836E: 0x30CF, //KATAKANA LETTER HA - 0x836F: 0x30D0, //KATAKANA LETTER BA - 0x8370: 0x30D1, //KATAKANA LETTER PA - 0x8371: 0x30D2, //KATAKANA LETTER HI - 0x8372: 0x30D3, //KATAKANA LETTER BI - 0x8373: 0x30D4, //KATAKANA LETTER PI - 0x8374: 0x30D5, //KATAKANA LETTER HU - 0x8375: 0x30D6, //KATAKANA LETTER BU - 0x8376: 0x30D7, //KATAKANA LETTER PU - 0x8377: 0x30D8, //KATAKANA LETTER HE - 0x8378: 0x30D9, //KATAKANA LETTER BE - 0x8379: 0x30DA, //KATAKANA LETTER PE - 0x837A: 0x30DB, //KATAKANA LETTER HO - 0x837B: 0x30DC, //KATAKANA LETTER BO - 0x837C: 0x30DD, //KATAKANA LETTER PO - 0x837D: 0x30DE, //KATAKANA LETTER MA - 0x837E: 0x30DF, //KATAKANA LETTER MI - 0x8380: 0x30E0, //KATAKANA LETTER MU - 0x8381: 0x30E1, //KATAKANA LETTER ME - 0x8382: 0x30E2, //KATAKANA LETTER MO - 0x8383: 0x30E3, //KATAKANA LETTER SMALL YA - 0x8384: 0x30E4, //KATAKANA LETTER YA - 0x8385: 0x30E5, //KATAKANA LETTER SMALL YU - 0x8386: 0x30E6, //KATAKANA LETTER YU - 0x8387: 0x30E7, //KATAKANA LETTER SMALL YO - 0x8388: 0x30E8, //KATAKANA LETTER YO - 0x8389: 0x30E9, //KATAKANA LETTER RA - 0x838A: 0x30EA, //KATAKANA LETTER RI - 0x838B: 0x30EB, //KATAKANA LETTER RU - 0x838C: 0x30EC, //KATAKANA LETTER RE - 0x838D: 0x30ED, //KATAKANA LETTER RO - 0x838E: 0x30EE, //KATAKANA LETTER SMALL WA - 0x838F: 0x30EF, //KATAKANA LETTER WA - 0x8390: 0x30F0, //KATAKANA LETTER WI - 0x8391: 0x30F1, //KATAKANA LETTER WE - 0x8392: 0x30F2, //KATAKANA LETTER WO - 0x8393: 0x30F3, //KATAKANA LETTER N - 0x8394: 0x30F4, //KATAKANA LETTER VU - 0x8395: 0x30F5, //KATAKANA LETTER SMALL KA - 0x8396: 0x30F6, //KATAKANA LETTER SMALL KE - 0x839F: 0x0391, //GREEK CAPITAL LETTER ALPHA - 0x83A0: 0x0392, //GREEK CAPITAL LETTER BETA - 0x83A1: 0x0393, //GREEK CAPITAL LETTER GAMMA - 0x83A2: 0x0394, //GREEK CAPITAL LETTER DELTA - 0x83A3: 0x0395, //GREEK CAPITAL LETTER EPSILON - 0x83A4: 0x0396, //GREEK CAPITAL LETTER ZETA - 0x83A5: 0x0397, //GREEK CAPITAL LETTER ETA - 0x83A6: 0x0398, //GREEK CAPITAL LETTER THETA - 0x83A7: 0x0399, //GREEK CAPITAL LETTER IOTA - 0x83A8: 0x039A, //GREEK CAPITAL LETTER KAPPA - 0x83A9: 0x039B, //GREEK CAPITAL LETTER LAMDA - 0x83AA: 0x039C, //GREEK CAPITAL LETTER MU - 0x83AB: 0x039D, //GREEK CAPITAL LETTER NU - 0x83AC: 0x039E, //GREEK CAPITAL LETTER XI - 0x83AD: 0x039F, //GREEK CAPITAL LETTER OMICRON - 0x83AE: 0x03A0, //GREEK CAPITAL LETTER PI - 0x83AF: 0x03A1, //GREEK CAPITAL LETTER RHO - 0x83B0: 0x03A3, //GREEK CAPITAL LETTER SIGMA - 0x83B1: 0x03A4, //GREEK CAPITAL LETTER TAU - 0x83B2: 0x03A5, //GREEK CAPITAL LETTER UPSILON - 0x83B3: 0x03A6, //GREEK CAPITAL LETTER PHI - 0x83B4: 0x03A7, //GREEK CAPITAL LETTER CHI - 0x83B5: 0x03A8, //GREEK CAPITAL LETTER PSI - 0x83B6: 0x03A9, //GREEK CAPITAL LETTER OMEGA - 0x83BF: 0x03B1, //GREEK SMALL LETTER ALPHA - 0x83C0: 0x03B2, //GREEK SMALL LETTER BETA - 0x83C1: 0x03B3, //GREEK SMALL LETTER GAMMA - 0x83C2: 0x03B4, //GREEK SMALL LETTER DELTA - 0x83C3: 0x03B5, //GREEK SMALL LETTER EPSILON - 0x83C4: 0x03B6, //GREEK SMALL LETTER ZETA - 0x83C5: 0x03B7, //GREEK SMALL LETTER ETA - 0x83C6: 0x03B8, //GREEK SMALL LETTER THETA - 0x83C7: 0x03B9, //GREEK SMALL LETTER IOTA - 0x83C8: 0x03BA, //GREEK SMALL LETTER KAPPA - 0x83C9: 0x03BB, //GREEK SMALL LETTER LAMDA - 0x83CA: 0x03BC, //GREEK SMALL LETTER MU - 0x83CB: 0x03BD, //GREEK SMALL LETTER NU - 0x83CC: 0x03BE, //GREEK SMALL LETTER XI - 0x83CD: 0x03BF, //GREEK SMALL LETTER OMICRON - 0x83CE: 0x03C0, //GREEK SMALL LETTER PI - 0x83CF: 0x03C1, //GREEK SMALL LETTER RHO - 0x83D0: 0x03C3, //GREEK SMALL LETTER SIGMA - 0x83D1: 0x03C4, //GREEK SMALL LETTER TAU - 0x83D2: 0x03C5, //GREEK SMALL LETTER UPSILON - 0x83D3: 0x03C6, //GREEK SMALL LETTER PHI - 0x83D4: 0x03C7, //GREEK SMALL LETTER CHI - 0x83D5: 0x03C8, //GREEK SMALL LETTER PSI - 0x83D6: 0x03C9, //GREEK SMALL LETTER OMEGA - 0x8440: 0x0410, //CYRILLIC CAPITAL LETTER A - 0x8441: 0x0411, //CYRILLIC CAPITAL LETTER BE - 0x8442: 0x0412, //CYRILLIC CAPITAL LETTER VE - 0x8443: 0x0413, //CYRILLIC CAPITAL LETTER GHE - 0x8444: 0x0414, //CYRILLIC CAPITAL LETTER DE - 0x8445: 0x0415, //CYRILLIC CAPITAL LETTER IE - 0x8446: 0x0401, //CYRILLIC CAPITAL LETTER IO - 0x8447: 0x0416, //CYRILLIC CAPITAL LETTER ZHE - 0x8448: 0x0417, //CYRILLIC CAPITAL LETTER ZE - 0x8449: 0x0418, //CYRILLIC CAPITAL LETTER I - 0x844A: 0x0419, //CYRILLIC CAPITAL LETTER SHORT I - 0x844B: 0x041A, //CYRILLIC CAPITAL LETTER KA - 0x844C: 0x041B, //CYRILLIC CAPITAL LETTER EL - 0x844D: 0x041C, //CYRILLIC CAPITAL LETTER EM - 0x844E: 0x041D, //CYRILLIC CAPITAL LETTER EN - 0x844F: 0x041E, //CYRILLIC CAPITAL LETTER O - 0x8450: 0x041F, //CYRILLIC CAPITAL LETTER PE - 0x8451: 0x0420, //CYRILLIC CAPITAL LETTER ER - 0x8452: 0x0421, //CYRILLIC CAPITAL LETTER ES - 0x8453: 0x0422, //CYRILLIC CAPITAL LETTER TE - 0x8454: 0x0423, //CYRILLIC CAPITAL LETTER U - 0x8455: 0x0424, //CYRILLIC CAPITAL LETTER EF - 0x8456: 0x0425, //CYRILLIC CAPITAL LETTER HA - 0x8457: 0x0426, //CYRILLIC CAPITAL LETTER TSE - 0x8458: 0x0427, //CYRILLIC CAPITAL LETTER CHE - 0x8459: 0x0428, //CYRILLIC CAPITAL LETTER SHA - 0x845A: 0x0429, //CYRILLIC CAPITAL LETTER SHCHA - 0x845B: 0x042A, //CYRILLIC CAPITAL LETTER HARD SIGN - 0x845C: 0x042B, //CYRILLIC CAPITAL LETTER YERU - 0x845D: 0x042C, //CYRILLIC CAPITAL LETTER SOFT SIGN - 0x845E: 0x042D, //CYRILLIC CAPITAL LETTER E - 0x845F: 0x042E, //CYRILLIC CAPITAL LETTER YU - 0x8460: 0x042F, //CYRILLIC CAPITAL LETTER YA - 0x8470: 0x0430, //CYRILLIC SMALL LETTER A - 0x8471: 0x0431, //CYRILLIC SMALL LETTER BE - 0x8472: 0x0432, //CYRILLIC SMALL LETTER VE - 0x8473: 0x0433, //CYRILLIC SMALL LETTER GHE - 0x8474: 0x0434, //CYRILLIC SMALL LETTER DE - 0x8475: 0x0435, //CYRILLIC SMALL LETTER IE - 0x8476: 0x0451, //CYRILLIC SMALL LETTER IO - 0x8477: 0x0436, //CYRILLIC SMALL LETTER ZHE - 0x8478: 0x0437, //CYRILLIC SMALL LETTER ZE - 0x8479: 0x0438, //CYRILLIC SMALL LETTER I - 0x847A: 0x0439, //CYRILLIC SMALL LETTER SHORT I - 0x847B: 0x043A, //CYRILLIC SMALL LETTER KA - 0x847C: 0x043B, //CYRILLIC SMALL LETTER EL - 0x847D: 0x043C, //CYRILLIC SMALL LETTER EM - 0x847E: 0x043D, //CYRILLIC SMALL LETTER EN - 0x8480: 0x043E, //CYRILLIC SMALL LETTER O - 0x8481: 0x043F, //CYRILLIC SMALL LETTER PE - 0x8482: 0x0440, //CYRILLIC SMALL LETTER ER - 0x8483: 0x0441, //CYRILLIC SMALL LETTER ES - 0x8484: 0x0442, //CYRILLIC SMALL LETTER TE - 0x8485: 0x0443, //CYRILLIC SMALL LETTER U - 0x8486: 0x0444, //CYRILLIC SMALL LETTER EF - 0x8487: 0x0445, //CYRILLIC SMALL LETTER HA - 0x8488: 0x0446, //CYRILLIC SMALL LETTER TSE - 0x8489: 0x0447, //CYRILLIC SMALL LETTER CHE - 0x848A: 0x0448, //CYRILLIC SMALL LETTER SHA - 0x848B: 0x0449, //CYRILLIC SMALL LETTER SHCHA - 0x848C: 0x044A, //CYRILLIC SMALL LETTER HARD SIGN - 0x848D: 0x044B, //CYRILLIC SMALL LETTER YERU - 0x848E: 0x044C, //CYRILLIC SMALL LETTER SOFT SIGN - 0x848F: 0x044D, //CYRILLIC SMALL LETTER E - 0x8490: 0x044E, //CYRILLIC SMALL LETTER YU - 0x8491: 0x044F, //CYRILLIC SMALL LETTER YA - 0x849F: 0x2500, //BOX DRAWINGS LIGHT HORIZONTAL - 0x84A0: 0x2502, //BOX DRAWINGS LIGHT VERTICAL - 0x84A1: 0x250C, //BOX DRAWINGS LIGHT DOWN AND RIGHT - 0x84A2: 0x2510, //BOX DRAWINGS LIGHT DOWN AND LEFT - 0x84A3: 0x2518, //BOX DRAWINGS LIGHT UP AND LEFT - 0x84A4: 0x2514, //BOX DRAWINGS LIGHT UP AND RIGHT - 0x84A5: 0x251C, //BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0x84A6: 0x252C, //BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0x84A7: 0x2524, //BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0x84A8: 0x2534, //BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0x84A9: 0x253C, //BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0x84AA: 0x2501, //BOX DRAWINGS HEAVY HORIZONTAL - 0x84AB: 0x2503, //BOX DRAWINGS HEAVY VERTICAL - 0x84AC: 0x250F, //BOX DRAWINGS HEAVY DOWN AND RIGHT - 0x84AD: 0x2513, //BOX DRAWINGS HEAVY DOWN AND LEFT - 0x84AE: 0x251B, //BOX DRAWINGS HEAVY UP AND LEFT - 0x84AF: 0x2517, //BOX DRAWINGS HEAVY UP AND RIGHT - 0x84B0: 0x2523, //BOX DRAWINGS HEAVY VERTICAL AND RIGHT - 0x84B1: 0x2533, //BOX DRAWINGS HEAVY DOWN AND HORIZONTAL - 0x84B2: 0x252B, //BOX DRAWINGS HEAVY VERTICAL AND LEFT - 0x84B3: 0x253B, //BOX DRAWINGS HEAVY UP AND HORIZONTAL - 0x84B4: 0x254B, //BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL - 0x84B5: 0x2520, //BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT - 0x84B6: 0x252F, //BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY - 0x84B7: 0x2528, //BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT - 0x84B8: 0x2537, //BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY - 0x84B9: 0x253F, //BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY - 0x84BA: 0x251D, //BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY - 0x84BB: 0x2530, //BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT - 0x84BC: 0x2525, //BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY - 0x84BD: 0x2538, //BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT - 0x84BE: 0x2542, //BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT - 0x8740: 0x2460, //CIRCLED DIGIT ONE - 0x8741: 0x2461, //CIRCLED DIGIT TWO - 0x8742: 0x2462, //CIRCLED DIGIT THREE - 0x8743: 0x2463, //CIRCLED DIGIT FOUR - 0x8744: 0x2464, //CIRCLED DIGIT FIVE - 0x8745: 0x2465, //CIRCLED DIGIT SIX - 0x8746: 0x2466, //CIRCLED DIGIT SEVEN - 0x8747: 0x2467, //CIRCLED DIGIT EIGHT - 0x8748: 0x2468, //CIRCLED DIGIT NINE - 0x8749: 0x2469, //CIRCLED NUMBER TEN - 0x874A: 0x246A, //CIRCLED NUMBER ELEVEN - 0x874B: 0x246B, //CIRCLED NUMBER TWELVE - 0x874C: 0x246C, //CIRCLED NUMBER THIRTEEN - 0x874D: 0x246D, //CIRCLED NUMBER FOURTEEN - 0x874E: 0x246E, //CIRCLED NUMBER FIFTEEN - 0x874F: 0x246F, //CIRCLED NUMBER SIXTEEN - 0x8750: 0x2470, //CIRCLED NUMBER SEVENTEEN - 0x8751: 0x2471, //CIRCLED NUMBER EIGHTEEN - 0x8752: 0x2472, //CIRCLED NUMBER NINETEEN - 0x8753: 0x2473, //CIRCLED NUMBER TWENTY - 0x8754: 0x2160, //ROMAN NUMERAL ONE - 0x8755: 0x2161, //ROMAN NUMERAL TWO - 0x8756: 0x2162, //ROMAN NUMERAL THREE - 0x8757: 0x2163, //ROMAN NUMERAL FOUR - 0x8758: 0x2164, //ROMAN NUMERAL FIVE - 0x8759: 0x2165, //ROMAN NUMERAL SIX - 0x875A: 0x2166, //ROMAN NUMERAL SEVEN - 0x875B: 0x2167, //ROMAN NUMERAL EIGHT - 0x875C: 0x2168, //ROMAN NUMERAL NINE - 0x875D: 0x2169, //ROMAN NUMERAL TEN - 0x875F: 0x3349, //SQUARE MIRI - 0x8760: 0x3314, //SQUARE KIRO - 0x8761: 0x3322, //SQUARE SENTI - 0x8762: 0x334D, //SQUARE MEETORU - 0x8763: 0x3318, //SQUARE GURAMU - 0x8764: 0x3327, //SQUARE TON - 0x8765: 0x3303, //SQUARE AARU - 0x8766: 0x3336, //SQUARE HEKUTAARU - 0x8767: 0x3351, //SQUARE RITTORU - 0x8768: 0x3357, //SQUARE WATTO - 0x8769: 0x330D, //SQUARE KARORII - 0x876A: 0x3326, //SQUARE DORU - 0x876B: 0x3323, //SQUARE SENTO - 0x876C: 0x332B, //SQUARE PAASENTO - 0x876D: 0x334A, //SQUARE MIRIBAARU - 0x876E: 0x333B, //SQUARE PEEZI - 0x876F: 0x339C, //SQUARE MM - 0x8770: 0x339D, //SQUARE CM - 0x8771: 0x339E, //SQUARE KM - 0x8772: 0x338E, //SQUARE MG - 0x8773: 0x338F, //SQUARE KG - 0x8774: 0x33C4, //SQUARE CC - 0x8775: 0x33A1, //SQUARE M SQUARED - 0x877E: 0x337B, //SQUARE ERA NAME HEISEI - 0x8780: 0x301D, //REVERSED DOUBLE PRIME QUOTATION MARK - 0x8781: 0x301F, //LOW DOUBLE PRIME QUOTATION MARK - 0x8782: 0x2116, //NUMERO SIGN - 0x8783: 0x33CD, //SQUARE KK - 0x8784: 0x2121, //TELEPHONE SIGN - 0x8785: 0x32A4, //CIRCLED IDEOGRAPH HIGH - 0x8786: 0x32A5, //CIRCLED IDEOGRAPH CENTRE - 0x8787: 0x32A6, //CIRCLED IDEOGRAPH LOW - 0x8788: 0x32A7, //CIRCLED IDEOGRAPH LEFT - 0x8789: 0x32A8, //CIRCLED IDEOGRAPH RIGHT - 0x878A: 0x3231, //PARENTHESIZED IDEOGRAPH STOCK - 0x878B: 0x3232, //PARENTHESIZED IDEOGRAPH HAVE - 0x878C: 0x3239, //PARENTHESIZED IDEOGRAPH REPRESENT - 0x878D: 0x337E, //SQUARE ERA NAME MEIZI - 0x878E: 0x337D, //SQUARE ERA NAME TAISYOU - 0x878F: 0x337C, //SQUARE ERA NAME SYOUWA - 0x8790: 0x2252, //APPROXIMATELY EQUAL TO OR THE IMAGE OF - 0x8791: 0x2261, //IDENTICAL TO - 0x8792: 0x222B, //INTEGRAL - 0x8793: 0x222E, //CONTOUR INTEGRAL - 0x8794: 0x2211, //N-ARY SUMMATION - 0x8795: 0x221A, //SQUARE ROOT - 0x8796: 0x22A5, //UP TACK - 0x8797: 0x2220, //ANGLE - 0x8798: 0x221F, //RIGHT ANGLE - 0x8799: 0x22BF, //RIGHT TRIANGLE - 0x879A: 0x2235, //BECAUSE - 0x879B: 0x2229, //INTERSECTION - 0x879C: 0x222A, //UNION - 0x889F: 0x4E9C, //CJK UNIFIED IDEOGRAPH - 0x88A0: 0x5516, //CJK UNIFIED IDEOGRAPH - 0x88A1: 0x5A03, //CJK UNIFIED IDEOGRAPH - 0x88A2: 0x963F, //CJK UNIFIED IDEOGRAPH - 0x88A3: 0x54C0, //CJK UNIFIED IDEOGRAPH - 0x88A4: 0x611B, //CJK UNIFIED IDEOGRAPH - 0x88A5: 0x6328, //CJK UNIFIED IDEOGRAPH - 0x88A6: 0x59F6, //CJK UNIFIED IDEOGRAPH - 0x88A7: 0x9022, //CJK UNIFIED IDEOGRAPH - 0x88A8: 0x8475, //CJK UNIFIED IDEOGRAPH - 0x88A9: 0x831C, //CJK UNIFIED IDEOGRAPH - 0x88AA: 0x7A50, //CJK UNIFIED IDEOGRAPH - 0x88AB: 0x60AA, //CJK UNIFIED IDEOGRAPH - 0x88AC: 0x63E1, //CJK UNIFIED IDEOGRAPH - 0x88AD: 0x6E25, //CJK UNIFIED IDEOGRAPH - 0x88AE: 0x65ED, //CJK UNIFIED IDEOGRAPH - 0x88AF: 0x8466, //CJK UNIFIED IDEOGRAPH - 0x88B0: 0x82A6, //CJK UNIFIED IDEOGRAPH - 0x88B1: 0x9BF5, //CJK UNIFIED IDEOGRAPH - 0x88B2: 0x6893, //CJK UNIFIED IDEOGRAPH - 0x88B3: 0x5727, //CJK UNIFIED IDEOGRAPH - 0x88B4: 0x65A1, //CJK UNIFIED IDEOGRAPH - 0x88B5: 0x6271, //CJK UNIFIED IDEOGRAPH - 0x88B6: 0x5B9B, //CJK UNIFIED IDEOGRAPH - 0x88B7: 0x59D0, //CJK UNIFIED IDEOGRAPH - 0x88B8: 0x867B, //CJK UNIFIED IDEOGRAPH - 0x88B9: 0x98F4, //CJK UNIFIED IDEOGRAPH - 0x88BA: 0x7D62, //CJK UNIFIED IDEOGRAPH - 0x88BB: 0x7DBE, //CJK UNIFIED IDEOGRAPH - 0x88BC: 0x9B8E, //CJK UNIFIED IDEOGRAPH - 0x88BD: 0x6216, //CJK UNIFIED IDEOGRAPH - 0x88BE: 0x7C9F, //CJK UNIFIED IDEOGRAPH - 0x88BF: 0x88B7, //CJK UNIFIED IDEOGRAPH - 0x88C0: 0x5B89, //CJK UNIFIED IDEOGRAPH - 0x88C1: 0x5EB5, //CJK UNIFIED IDEOGRAPH - 0x88C2: 0x6309, //CJK UNIFIED IDEOGRAPH - 0x88C3: 0x6697, //CJK UNIFIED IDEOGRAPH - 0x88C4: 0x6848, //CJK UNIFIED IDEOGRAPH - 0x88C5: 0x95C7, //CJK UNIFIED IDEOGRAPH - 0x88C6: 0x978D, //CJK UNIFIED IDEOGRAPH - 0x88C7: 0x674F, //CJK UNIFIED IDEOGRAPH - 0x88C8: 0x4EE5, //CJK UNIFIED IDEOGRAPH - 0x88C9: 0x4F0A, //CJK UNIFIED IDEOGRAPH - 0x88CA: 0x4F4D, //CJK UNIFIED IDEOGRAPH - 0x88CB: 0x4F9D, //CJK UNIFIED IDEOGRAPH - 0x88CC: 0x5049, //CJK UNIFIED IDEOGRAPH - 0x88CD: 0x56F2, //CJK UNIFIED IDEOGRAPH - 0x88CE: 0x5937, //CJK UNIFIED IDEOGRAPH - 0x88CF: 0x59D4, //CJK UNIFIED IDEOGRAPH - 0x88D0: 0x5A01, //CJK UNIFIED IDEOGRAPH - 0x88D1: 0x5C09, //CJK UNIFIED IDEOGRAPH - 0x88D2: 0x60DF, //CJK UNIFIED IDEOGRAPH - 0x88D3: 0x610F, //CJK UNIFIED IDEOGRAPH - 0x88D4: 0x6170, //CJK UNIFIED IDEOGRAPH - 0x88D5: 0x6613, //CJK UNIFIED IDEOGRAPH - 0x88D6: 0x6905, //CJK UNIFIED IDEOGRAPH - 0x88D7: 0x70BA, //CJK UNIFIED IDEOGRAPH - 0x88D8: 0x754F, //CJK UNIFIED IDEOGRAPH - 0x88D9: 0x7570, //CJK UNIFIED IDEOGRAPH - 0x88DA: 0x79FB, //CJK UNIFIED IDEOGRAPH - 0x88DB: 0x7DAD, //CJK UNIFIED IDEOGRAPH - 0x88DC: 0x7DEF, //CJK UNIFIED IDEOGRAPH - 0x88DD: 0x80C3, //CJK UNIFIED IDEOGRAPH - 0x88DE: 0x840E, //CJK UNIFIED IDEOGRAPH - 0x88DF: 0x8863, //CJK UNIFIED IDEOGRAPH - 0x88E0: 0x8B02, //CJK UNIFIED IDEOGRAPH - 0x88E1: 0x9055, //CJK UNIFIED IDEOGRAPH - 0x88E2: 0x907A, //CJK UNIFIED IDEOGRAPH - 0x88E3: 0x533B, //CJK UNIFIED IDEOGRAPH - 0x88E4: 0x4E95, //CJK UNIFIED IDEOGRAPH - 0x88E5: 0x4EA5, //CJK UNIFIED IDEOGRAPH - 0x88E6: 0x57DF, //CJK UNIFIED IDEOGRAPH - 0x88E7: 0x80B2, //CJK UNIFIED IDEOGRAPH - 0x88E8: 0x90C1, //CJK UNIFIED IDEOGRAPH - 0x88E9: 0x78EF, //CJK UNIFIED IDEOGRAPH - 0x88EA: 0x4E00, //CJK UNIFIED IDEOGRAPH - 0x88EB: 0x58F1, //CJK UNIFIED IDEOGRAPH - 0x88EC: 0x6EA2, //CJK UNIFIED IDEOGRAPH - 0x88ED: 0x9038, //CJK UNIFIED IDEOGRAPH - 0x88EE: 0x7A32, //CJK UNIFIED IDEOGRAPH - 0x88EF: 0x8328, //CJK UNIFIED IDEOGRAPH - 0x88F0: 0x828B, //CJK UNIFIED IDEOGRAPH - 0x88F1: 0x9C2F, //CJK UNIFIED IDEOGRAPH - 0x88F2: 0x5141, //CJK UNIFIED IDEOGRAPH - 0x88F3: 0x5370, //CJK UNIFIED IDEOGRAPH - 0x88F4: 0x54BD, //CJK UNIFIED IDEOGRAPH - 0x88F5: 0x54E1, //CJK UNIFIED IDEOGRAPH - 0x88F6: 0x56E0, //CJK UNIFIED IDEOGRAPH - 0x88F7: 0x59FB, //CJK UNIFIED IDEOGRAPH - 0x88F8: 0x5F15, //CJK UNIFIED IDEOGRAPH - 0x88F9: 0x98F2, //CJK UNIFIED IDEOGRAPH - 0x88FA: 0x6DEB, //CJK UNIFIED IDEOGRAPH - 0x88FB: 0x80E4, //CJK UNIFIED IDEOGRAPH - 0x88FC: 0x852D, //CJK UNIFIED IDEOGRAPH - 0x8940: 0x9662, //CJK UNIFIED IDEOGRAPH - 0x8941: 0x9670, //CJK UNIFIED IDEOGRAPH - 0x8942: 0x96A0, //CJK UNIFIED IDEOGRAPH - 0x8943: 0x97FB, //CJK UNIFIED IDEOGRAPH - 0x8944: 0x540B, //CJK UNIFIED IDEOGRAPH - 0x8945: 0x53F3, //CJK UNIFIED IDEOGRAPH - 0x8946: 0x5B87, //CJK UNIFIED IDEOGRAPH - 0x8947: 0x70CF, //CJK UNIFIED IDEOGRAPH - 0x8948: 0x7FBD, //CJK UNIFIED IDEOGRAPH - 0x8949: 0x8FC2, //CJK UNIFIED IDEOGRAPH - 0x894A: 0x96E8, //CJK UNIFIED IDEOGRAPH - 0x894B: 0x536F, //CJK UNIFIED IDEOGRAPH - 0x894C: 0x9D5C, //CJK UNIFIED IDEOGRAPH - 0x894D: 0x7ABA, //CJK UNIFIED IDEOGRAPH - 0x894E: 0x4E11, //CJK UNIFIED IDEOGRAPH - 0x894F: 0x7893, //CJK UNIFIED IDEOGRAPH - 0x8950: 0x81FC, //CJK UNIFIED IDEOGRAPH - 0x8951: 0x6E26, //CJK UNIFIED IDEOGRAPH - 0x8952: 0x5618, //CJK UNIFIED IDEOGRAPH - 0x8953: 0x5504, //CJK UNIFIED IDEOGRAPH - 0x8954: 0x6B1D, //CJK UNIFIED IDEOGRAPH - 0x8955: 0x851A, //CJK UNIFIED IDEOGRAPH - 0x8956: 0x9C3B, //CJK UNIFIED IDEOGRAPH - 0x8957: 0x59E5, //CJK UNIFIED IDEOGRAPH - 0x8958: 0x53A9, //CJK UNIFIED IDEOGRAPH - 0x8959: 0x6D66, //CJK UNIFIED IDEOGRAPH - 0x895A: 0x74DC, //CJK UNIFIED IDEOGRAPH - 0x895B: 0x958F, //CJK UNIFIED IDEOGRAPH - 0x895C: 0x5642, //CJK UNIFIED IDEOGRAPH - 0x895D: 0x4E91, //CJK UNIFIED IDEOGRAPH - 0x895E: 0x904B, //CJK UNIFIED IDEOGRAPH - 0x895F: 0x96F2, //CJK UNIFIED IDEOGRAPH - 0x8960: 0x834F, //CJK UNIFIED IDEOGRAPH - 0x8961: 0x990C, //CJK UNIFIED IDEOGRAPH - 0x8962: 0x53E1, //CJK UNIFIED IDEOGRAPH - 0x8963: 0x55B6, //CJK UNIFIED IDEOGRAPH - 0x8964: 0x5B30, //CJK UNIFIED IDEOGRAPH - 0x8965: 0x5F71, //CJK UNIFIED IDEOGRAPH - 0x8966: 0x6620, //CJK UNIFIED IDEOGRAPH - 0x8967: 0x66F3, //CJK UNIFIED IDEOGRAPH - 0x8968: 0x6804, //CJK UNIFIED IDEOGRAPH - 0x8969: 0x6C38, //CJK UNIFIED IDEOGRAPH - 0x896A: 0x6CF3, //CJK UNIFIED IDEOGRAPH - 0x896B: 0x6D29, //CJK UNIFIED IDEOGRAPH - 0x896C: 0x745B, //CJK UNIFIED IDEOGRAPH - 0x896D: 0x76C8, //CJK UNIFIED IDEOGRAPH - 0x896E: 0x7A4E, //CJK UNIFIED IDEOGRAPH - 0x896F: 0x9834, //CJK UNIFIED IDEOGRAPH - 0x8970: 0x82F1, //CJK UNIFIED IDEOGRAPH - 0x8971: 0x885B, //CJK UNIFIED IDEOGRAPH - 0x8972: 0x8A60, //CJK UNIFIED IDEOGRAPH - 0x8973: 0x92ED, //CJK UNIFIED IDEOGRAPH - 0x8974: 0x6DB2, //CJK UNIFIED IDEOGRAPH - 0x8975: 0x75AB, //CJK UNIFIED IDEOGRAPH - 0x8976: 0x76CA, //CJK UNIFIED IDEOGRAPH - 0x8977: 0x99C5, //CJK UNIFIED IDEOGRAPH - 0x8978: 0x60A6, //CJK UNIFIED IDEOGRAPH - 0x8979: 0x8B01, //CJK UNIFIED IDEOGRAPH - 0x897A: 0x8D8A, //CJK UNIFIED IDEOGRAPH - 0x897B: 0x95B2, //CJK UNIFIED IDEOGRAPH - 0x897C: 0x698E, //CJK UNIFIED IDEOGRAPH - 0x897D: 0x53AD, //CJK UNIFIED IDEOGRAPH - 0x897E: 0x5186, //CJK UNIFIED IDEOGRAPH - 0x8980: 0x5712, //CJK UNIFIED IDEOGRAPH - 0x8981: 0x5830, //CJK UNIFIED IDEOGRAPH - 0x8982: 0x5944, //CJK UNIFIED IDEOGRAPH - 0x8983: 0x5BB4, //CJK UNIFIED IDEOGRAPH - 0x8984: 0x5EF6, //CJK UNIFIED IDEOGRAPH - 0x8985: 0x6028, //CJK UNIFIED IDEOGRAPH - 0x8986: 0x63A9, //CJK UNIFIED IDEOGRAPH - 0x8987: 0x63F4, //CJK UNIFIED IDEOGRAPH - 0x8988: 0x6CBF, //CJK UNIFIED IDEOGRAPH - 0x8989: 0x6F14, //CJK UNIFIED IDEOGRAPH - 0x898A: 0x708E, //CJK UNIFIED IDEOGRAPH - 0x898B: 0x7114, //CJK UNIFIED IDEOGRAPH - 0x898C: 0x7159, //CJK UNIFIED IDEOGRAPH - 0x898D: 0x71D5, //CJK UNIFIED IDEOGRAPH - 0x898E: 0x733F, //CJK UNIFIED IDEOGRAPH - 0x898F: 0x7E01, //CJK UNIFIED IDEOGRAPH - 0x8990: 0x8276, //CJK UNIFIED IDEOGRAPH - 0x8991: 0x82D1, //CJK UNIFIED IDEOGRAPH - 0x8992: 0x8597, //CJK UNIFIED IDEOGRAPH - 0x8993: 0x9060, //CJK UNIFIED IDEOGRAPH - 0x8994: 0x925B, //CJK UNIFIED IDEOGRAPH - 0x8995: 0x9D1B, //CJK UNIFIED IDEOGRAPH - 0x8996: 0x5869, //CJK UNIFIED IDEOGRAPH - 0x8997: 0x65BC, //CJK UNIFIED IDEOGRAPH - 0x8998: 0x6C5A, //CJK UNIFIED IDEOGRAPH - 0x8999: 0x7525, //CJK UNIFIED IDEOGRAPH - 0x899A: 0x51F9, //CJK UNIFIED IDEOGRAPH - 0x899B: 0x592E, //CJK UNIFIED IDEOGRAPH - 0x899C: 0x5965, //CJK UNIFIED IDEOGRAPH - 0x899D: 0x5F80, //CJK UNIFIED IDEOGRAPH - 0x899E: 0x5FDC, //CJK UNIFIED IDEOGRAPH - 0x899F: 0x62BC, //CJK UNIFIED IDEOGRAPH - 0x89A0: 0x65FA, //CJK UNIFIED IDEOGRAPH - 0x89A1: 0x6A2A, //CJK UNIFIED IDEOGRAPH - 0x89A2: 0x6B27, //CJK UNIFIED IDEOGRAPH - 0x89A3: 0x6BB4, //CJK UNIFIED IDEOGRAPH - 0x89A4: 0x738B, //CJK UNIFIED IDEOGRAPH - 0x89A5: 0x7FC1, //CJK UNIFIED IDEOGRAPH - 0x89A6: 0x8956, //CJK UNIFIED IDEOGRAPH - 0x89A7: 0x9D2C, //CJK UNIFIED IDEOGRAPH - 0x89A8: 0x9D0E, //CJK UNIFIED IDEOGRAPH - 0x89A9: 0x9EC4, //CJK UNIFIED IDEOGRAPH - 0x89AA: 0x5CA1, //CJK UNIFIED IDEOGRAPH - 0x89AB: 0x6C96, //CJK UNIFIED IDEOGRAPH - 0x89AC: 0x837B, //CJK UNIFIED IDEOGRAPH - 0x89AD: 0x5104, //CJK UNIFIED IDEOGRAPH - 0x89AE: 0x5C4B, //CJK UNIFIED IDEOGRAPH - 0x89AF: 0x61B6, //CJK UNIFIED IDEOGRAPH - 0x89B0: 0x81C6, //CJK UNIFIED IDEOGRAPH - 0x89B1: 0x6876, //CJK UNIFIED IDEOGRAPH - 0x89B2: 0x7261, //CJK UNIFIED IDEOGRAPH - 0x89B3: 0x4E59, //CJK UNIFIED IDEOGRAPH - 0x89B4: 0x4FFA, //CJK UNIFIED IDEOGRAPH - 0x89B5: 0x5378, //CJK UNIFIED IDEOGRAPH - 0x89B6: 0x6069, //CJK UNIFIED IDEOGRAPH - 0x89B7: 0x6E29, //CJK UNIFIED IDEOGRAPH - 0x89B8: 0x7A4F, //CJK UNIFIED IDEOGRAPH - 0x89B9: 0x97F3, //CJK UNIFIED IDEOGRAPH - 0x89BA: 0x4E0B, //CJK UNIFIED IDEOGRAPH - 0x89BB: 0x5316, //CJK UNIFIED IDEOGRAPH - 0x89BC: 0x4EEE, //CJK UNIFIED IDEOGRAPH - 0x89BD: 0x4F55, //CJK UNIFIED IDEOGRAPH - 0x89BE: 0x4F3D, //CJK UNIFIED IDEOGRAPH - 0x89BF: 0x4FA1, //CJK UNIFIED IDEOGRAPH - 0x89C0: 0x4F73, //CJK UNIFIED IDEOGRAPH - 0x89C1: 0x52A0, //CJK UNIFIED IDEOGRAPH - 0x89C2: 0x53EF, //CJK UNIFIED IDEOGRAPH - 0x89C3: 0x5609, //CJK UNIFIED IDEOGRAPH - 0x89C4: 0x590F, //CJK UNIFIED IDEOGRAPH - 0x89C5: 0x5AC1, //CJK UNIFIED IDEOGRAPH - 0x89C6: 0x5BB6, //CJK UNIFIED IDEOGRAPH - 0x89C7: 0x5BE1, //CJK UNIFIED IDEOGRAPH - 0x89C8: 0x79D1, //CJK UNIFIED IDEOGRAPH - 0x89C9: 0x6687, //CJK UNIFIED IDEOGRAPH - 0x89CA: 0x679C, //CJK UNIFIED IDEOGRAPH - 0x89CB: 0x67B6, //CJK UNIFIED IDEOGRAPH - 0x89CC: 0x6B4C, //CJK UNIFIED IDEOGRAPH - 0x89CD: 0x6CB3, //CJK UNIFIED IDEOGRAPH - 0x89CE: 0x706B, //CJK UNIFIED IDEOGRAPH - 0x89CF: 0x73C2, //CJK UNIFIED IDEOGRAPH - 0x89D0: 0x798D, //CJK UNIFIED IDEOGRAPH - 0x89D1: 0x79BE, //CJK UNIFIED IDEOGRAPH - 0x89D2: 0x7A3C, //CJK UNIFIED IDEOGRAPH - 0x89D3: 0x7B87, //CJK UNIFIED IDEOGRAPH - 0x89D4: 0x82B1, //CJK UNIFIED IDEOGRAPH - 0x89D5: 0x82DB, //CJK UNIFIED IDEOGRAPH - 0x89D6: 0x8304, //CJK UNIFIED IDEOGRAPH - 0x89D7: 0x8377, //CJK UNIFIED IDEOGRAPH - 0x89D8: 0x83EF, //CJK UNIFIED IDEOGRAPH - 0x89D9: 0x83D3, //CJK UNIFIED IDEOGRAPH - 0x89DA: 0x8766, //CJK UNIFIED IDEOGRAPH - 0x89DB: 0x8AB2, //CJK UNIFIED IDEOGRAPH - 0x89DC: 0x5629, //CJK UNIFIED IDEOGRAPH - 0x89DD: 0x8CA8, //CJK UNIFIED IDEOGRAPH - 0x89DE: 0x8FE6, //CJK UNIFIED IDEOGRAPH - 0x89DF: 0x904E, //CJK UNIFIED IDEOGRAPH - 0x89E0: 0x971E, //CJK UNIFIED IDEOGRAPH - 0x89E1: 0x868A, //CJK UNIFIED IDEOGRAPH - 0x89E2: 0x4FC4, //CJK UNIFIED IDEOGRAPH - 0x89E3: 0x5CE8, //CJK UNIFIED IDEOGRAPH - 0x89E4: 0x6211, //CJK UNIFIED IDEOGRAPH - 0x89E5: 0x7259, //CJK UNIFIED IDEOGRAPH - 0x89E6: 0x753B, //CJK UNIFIED IDEOGRAPH - 0x89E7: 0x81E5, //CJK UNIFIED IDEOGRAPH - 0x89E8: 0x82BD, //CJK UNIFIED IDEOGRAPH - 0x89E9: 0x86FE, //CJK UNIFIED IDEOGRAPH - 0x89EA: 0x8CC0, //CJK UNIFIED IDEOGRAPH - 0x89EB: 0x96C5, //CJK UNIFIED IDEOGRAPH - 0x89EC: 0x9913, //CJK UNIFIED IDEOGRAPH - 0x89ED: 0x99D5, //CJK UNIFIED IDEOGRAPH - 0x89EE: 0x4ECB, //CJK UNIFIED IDEOGRAPH - 0x89EF: 0x4F1A, //CJK UNIFIED IDEOGRAPH - 0x89F0: 0x89E3, //CJK UNIFIED IDEOGRAPH - 0x89F1: 0x56DE, //CJK UNIFIED IDEOGRAPH - 0x89F2: 0x584A, //CJK UNIFIED IDEOGRAPH - 0x89F3: 0x58CA, //CJK UNIFIED IDEOGRAPH - 0x89F4: 0x5EFB, //CJK UNIFIED IDEOGRAPH - 0x89F5: 0x5FEB, //CJK UNIFIED IDEOGRAPH - 0x89F6: 0x602A, //CJK UNIFIED IDEOGRAPH - 0x89F7: 0x6094, //CJK UNIFIED IDEOGRAPH - 0x89F8: 0x6062, //CJK UNIFIED IDEOGRAPH - 0x89F9: 0x61D0, //CJK UNIFIED IDEOGRAPH - 0x89FA: 0x6212, //CJK UNIFIED IDEOGRAPH - 0x89FB: 0x62D0, //CJK UNIFIED IDEOGRAPH - 0x89FC: 0x6539, //CJK UNIFIED IDEOGRAPH - 0x8A40: 0x9B41, //CJK UNIFIED IDEOGRAPH - 0x8A41: 0x6666, //CJK UNIFIED IDEOGRAPH - 0x8A42: 0x68B0, //CJK UNIFIED IDEOGRAPH - 0x8A43: 0x6D77, //CJK UNIFIED IDEOGRAPH - 0x8A44: 0x7070, //CJK UNIFIED IDEOGRAPH - 0x8A45: 0x754C, //CJK UNIFIED IDEOGRAPH - 0x8A46: 0x7686, //CJK UNIFIED IDEOGRAPH - 0x8A47: 0x7D75, //CJK UNIFIED IDEOGRAPH - 0x8A48: 0x82A5, //CJK UNIFIED IDEOGRAPH - 0x8A49: 0x87F9, //CJK UNIFIED IDEOGRAPH - 0x8A4A: 0x958B, //CJK UNIFIED IDEOGRAPH - 0x8A4B: 0x968E, //CJK UNIFIED IDEOGRAPH - 0x8A4C: 0x8C9D, //CJK UNIFIED IDEOGRAPH - 0x8A4D: 0x51F1, //CJK UNIFIED IDEOGRAPH - 0x8A4E: 0x52BE, //CJK UNIFIED IDEOGRAPH - 0x8A4F: 0x5916, //CJK UNIFIED IDEOGRAPH - 0x8A50: 0x54B3, //CJK UNIFIED IDEOGRAPH - 0x8A51: 0x5BB3, //CJK UNIFIED IDEOGRAPH - 0x8A52: 0x5D16, //CJK UNIFIED IDEOGRAPH - 0x8A53: 0x6168, //CJK UNIFIED IDEOGRAPH - 0x8A54: 0x6982, //CJK UNIFIED IDEOGRAPH - 0x8A55: 0x6DAF, //CJK UNIFIED IDEOGRAPH - 0x8A56: 0x788D, //CJK UNIFIED IDEOGRAPH - 0x8A57: 0x84CB, //CJK UNIFIED IDEOGRAPH - 0x8A58: 0x8857, //CJK UNIFIED IDEOGRAPH - 0x8A59: 0x8A72, //CJK UNIFIED IDEOGRAPH - 0x8A5A: 0x93A7, //CJK UNIFIED IDEOGRAPH - 0x8A5B: 0x9AB8, //CJK UNIFIED IDEOGRAPH - 0x8A5C: 0x6D6C, //CJK UNIFIED IDEOGRAPH - 0x8A5D: 0x99A8, //CJK UNIFIED IDEOGRAPH - 0x8A5E: 0x86D9, //CJK UNIFIED IDEOGRAPH - 0x8A5F: 0x57A3, //CJK UNIFIED IDEOGRAPH - 0x8A60: 0x67FF, //CJK UNIFIED IDEOGRAPH - 0x8A61: 0x86CE, //CJK UNIFIED IDEOGRAPH - 0x8A62: 0x920E, //CJK UNIFIED IDEOGRAPH - 0x8A63: 0x5283, //CJK UNIFIED IDEOGRAPH - 0x8A64: 0x5687, //CJK UNIFIED IDEOGRAPH - 0x8A65: 0x5404, //CJK UNIFIED IDEOGRAPH - 0x8A66: 0x5ED3, //CJK UNIFIED IDEOGRAPH - 0x8A67: 0x62E1, //CJK UNIFIED IDEOGRAPH - 0x8A68: 0x64B9, //CJK UNIFIED IDEOGRAPH - 0x8A69: 0x683C, //CJK UNIFIED IDEOGRAPH - 0x8A6A: 0x6838, //CJK UNIFIED IDEOGRAPH - 0x8A6B: 0x6BBB, //CJK UNIFIED IDEOGRAPH - 0x8A6C: 0x7372, //CJK UNIFIED IDEOGRAPH - 0x8A6D: 0x78BA, //CJK UNIFIED IDEOGRAPH - 0x8A6E: 0x7A6B, //CJK UNIFIED IDEOGRAPH - 0x8A6F: 0x899A, //CJK UNIFIED IDEOGRAPH - 0x8A70: 0x89D2, //CJK UNIFIED IDEOGRAPH - 0x8A71: 0x8D6B, //CJK UNIFIED IDEOGRAPH - 0x8A72: 0x8F03, //CJK UNIFIED IDEOGRAPH - 0x8A73: 0x90ED, //CJK UNIFIED IDEOGRAPH - 0x8A74: 0x95A3, //CJK UNIFIED IDEOGRAPH - 0x8A75: 0x9694, //CJK UNIFIED IDEOGRAPH - 0x8A76: 0x9769, //CJK UNIFIED IDEOGRAPH - 0x8A77: 0x5B66, //CJK UNIFIED IDEOGRAPH - 0x8A78: 0x5CB3, //CJK UNIFIED IDEOGRAPH - 0x8A79: 0x697D, //CJK UNIFIED IDEOGRAPH - 0x8A7A: 0x984D, //CJK UNIFIED IDEOGRAPH - 0x8A7B: 0x984E, //CJK UNIFIED IDEOGRAPH - 0x8A7C: 0x639B, //CJK UNIFIED IDEOGRAPH - 0x8A7D: 0x7B20, //CJK UNIFIED IDEOGRAPH - 0x8A7E: 0x6A2B, //CJK UNIFIED IDEOGRAPH - 0x8A80: 0x6A7F, //CJK UNIFIED IDEOGRAPH - 0x8A81: 0x68B6, //CJK UNIFIED IDEOGRAPH - 0x8A82: 0x9C0D, //CJK UNIFIED IDEOGRAPH - 0x8A83: 0x6F5F, //CJK UNIFIED IDEOGRAPH - 0x8A84: 0x5272, //CJK UNIFIED IDEOGRAPH - 0x8A85: 0x559D, //CJK UNIFIED IDEOGRAPH - 0x8A86: 0x6070, //CJK UNIFIED IDEOGRAPH - 0x8A87: 0x62EC, //CJK UNIFIED IDEOGRAPH - 0x8A88: 0x6D3B, //CJK UNIFIED IDEOGRAPH - 0x8A89: 0x6E07, //CJK UNIFIED IDEOGRAPH - 0x8A8A: 0x6ED1, //CJK UNIFIED IDEOGRAPH - 0x8A8B: 0x845B, //CJK UNIFIED IDEOGRAPH - 0x8A8C: 0x8910, //CJK UNIFIED IDEOGRAPH - 0x8A8D: 0x8F44, //CJK UNIFIED IDEOGRAPH - 0x8A8E: 0x4E14, //CJK UNIFIED IDEOGRAPH - 0x8A8F: 0x9C39, //CJK UNIFIED IDEOGRAPH - 0x8A90: 0x53F6, //CJK UNIFIED IDEOGRAPH - 0x8A91: 0x691B, //CJK UNIFIED IDEOGRAPH - 0x8A92: 0x6A3A, //CJK UNIFIED IDEOGRAPH - 0x8A93: 0x9784, //CJK UNIFIED IDEOGRAPH - 0x8A94: 0x682A, //CJK UNIFIED IDEOGRAPH - 0x8A95: 0x515C, //CJK UNIFIED IDEOGRAPH - 0x8A96: 0x7AC3, //CJK UNIFIED IDEOGRAPH - 0x8A97: 0x84B2, //CJK UNIFIED IDEOGRAPH - 0x8A98: 0x91DC, //CJK UNIFIED IDEOGRAPH - 0x8A99: 0x938C, //CJK UNIFIED IDEOGRAPH - 0x8A9A: 0x565B, //CJK UNIFIED IDEOGRAPH - 0x8A9B: 0x9D28, //CJK UNIFIED IDEOGRAPH - 0x8A9C: 0x6822, //CJK UNIFIED IDEOGRAPH - 0x8A9D: 0x8305, //CJK UNIFIED IDEOGRAPH - 0x8A9E: 0x8431, //CJK UNIFIED IDEOGRAPH - 0x8A9F: 0x7CA5, //CJK UNIFIED IDEOGRAPH - 0x8AA0: 0x5208, //CJK UNIFIED IDEOGRAPH - 0x8AA1: 0x82C5, //CJK UNIFIED IDEOGRAPH - 0x8AA2: 0x74E6, //CJK UNIFIED IDEOGRAPH - 0x8AA3: 0x4E7E, //CJK UNIFIED IDEOGRAPH - 0x8AA4: 0x4F83, //CJK UNIFIED IDEOGRAPH - 0x8AA5: 0x51A0, //CJK UNIFIED IDEOGRAPH - 0x8AA6: 0x5BD2, //CJK UNIFIED IDEOGRAPH - 0x8AA7: 0x520A, //CJK UNIFIED IDEOGRAPH - 0x8AA8: 0x52D8, //CJK UNIFIED IDEOGRAPH - 0x8AA9: 0x52E7, //CJK UNIFIED IDEOGRAPH - 0x8AAA: 0x5DFB, //CJK UNIFIED IDEOGRAPH - 0x8AAB: 0x559A, //CJK UNIFIED IDEOGRAPH - 0x8AAC: 0x582A, //CJK UNIFIED IDEOGRAPH - 0x8AAD: 0x59E6, //CJK UNIFIED IDEOGRAPH - 0x8AAE: 0x5B8C, //CJK UNIFIED IDEOGRAPH - 0x8AAF: 0x5B98, //CJK UNIFIED IDEOGRAPH - 0x8AB0: 0x5BDB, //CJK UNIFIED IDEOGRAPH - 0x8AB1: 0x5E72, //CJK UNIFIED IDEOGRAPH - 0x8AB2: 0x5E79, //CJK UNIFIED IDEOGRAPH - 0x8AB3: 0x60A3, //CJK UNIFIED IDEOGRAPH - 0x8AB4: 0x611F, //CJK UNIFIED IDEOGRAPH - 0x8AB5: 0x6163, //CJK UNIFIED IDEOGRAPH - 0x8AB6: 0x61BE, //CJK UNIFIED IDEOGRAPH - 0x8AB7: 0x63DB, //CJK UNIFIED IDEOGRAPH - 0x8AB8: 0x6562, //CJK UNIFIED IDEOGRAPH - 0x8AB9: 0x67D1, //CJK UNIFIED IDEOGRAPH - 0x8ABA: 0x6853, //CJK UNIFIED IDEOGRAPH - 0x8ABB: 0x68FA, //CJK UNIFIED IDEOGRAPH - 0x8ABC: 0x6B3E, //CJK UNIFIED IDEOGRAPH - 0x8ABD: 0x6B53, //CJK UNIFIED IDEOGRAPH - 0x8ABE: 0x6C57, //CJK UNIFIED IDEOGRAPH - 0x8ABF: 0x6F22, //CJK UNIFIED IDEOGRAPH - 0x8AC0: 0x6F97, //CJK UNIFIED IDEOGRAPH - 0x8AC1: 0x6F45, //CJK UNIFIED IDEOGRAPH - 0x8AC2: 0x74B0, //CJK UNIFIED IDEOGRAPH - 0x8AC3: 0x7518, //CJK UNIFIED IDEOGRAPH - 0x8AC4: 0x76E3, //CJK UNIFIED IDEOGRAPH - 0x8AC5: 0x770B, //CJK UNIFIED IDEOGRAPH - 0x8AC6: 0x7AFF, //CJK UNIFIED IDEOGRAPH - 0x8AC7: 0x7BA1, //CJK UNIFIED IDEOGRAPH - 0x8AC8: 0x7C21, //CJK UNIFIED IDEOGRAPH - 0x8AC9: 0x7DE9, //CJK UNIFIED IDEOGRAPH - 0x8ACA: 0x7F36, //CJK UNIFIED IDEOGRAPH - 0x8ACB: 0x7FF0, //CJK UNIFIED IDEOGRAPH - 0x8ACC: 0x809D, //CJK UNIFIED IDEOGRAPH - 0x8ACD: 0x8266, //CJK UNIFIED IDEOGRAPH - 0x8ACE: 0x839E, //CJK UNIFIED IDEOGRAPH - 0x8ACF: 0x89B3, //CJK UNIFIED IDEOGRAPH - 0x8AD0: 0x8ACC, //CJK UNIFIED IDEOGRAPH - 0x8AD1: 0x8CAB, //CJK UNIFIED IDEOGRAPH - 0x8AD2: 0x9084, //CJK UNIFIED IDEOGRAPH - 0x8AD3: 0x9451, //CJK UNIFIED IDEOGRAPH - 0x8AD4: 0x9593, //CJK UNIFIED IDEOGRAPH - 0x8AD5: 0x9591, //CJK UNIFIED IDEOGRAPH - 0x8AD6: 0x95A2, //CJK UNIFIED IDEOGRAPH - 0x8AD7: 0x9665, //CJK UNIFIED IDEOGRAPH - 0x8AD8: 0x97D3, //CJK UNIFIED IDEOGRAPH - 0x8AD9: 0x9928, //CJK UNIFIED IDEOGRAPH - 0x8ADA: 0x8218, //CJK UNIFIED IDEOGRAPH - 0x8ADB: 0x4E38, //CJK UNIFIED IDEOGRAPH - 0x8ADC: 0x542B, //CJK UNIFIED IDEOGRAPH - 0x8ADD: 0x5CB8, //CJK UNIFIED IDEOGRAPH - 0x8ADE: 0x5DCC, //CJK UNIFIED IDEOGRAPH - 0x8ADF: 0x73A9, //CJK UNIFIED IDEOGRAPH - 0x8AE0: 0x764C, //CJK UNIFIED IDEOGRAPH - 0x8AE1: 0x773C, //CJK UNIFIED IDEOGRAPH - 0x8AE2: 0x5CA9, //CJK UNIFIED IDEOGRAPH - 0x8AE3: 0x7FEB, //CJK UNIFIED IDEOGRAPH - 0x8AE4: 0x8D0B, //CJK UNIFIED IDEOGRAPH - 0x8AE5: 0x96C1, //CJK UNIFIED IDEOGRAPH - 0x8AE6: 0x9811, //CJK UNIFIED IDEOGRAPH - 0x8AE7: 0x9854, //CJK UNIFIED IDEOGRAPH - 0x8AE8: 0x9858, //CJK UNIFIED IDEOGRAPH - 0x8AE9: 0x4F01, //CJK UNIFIED IDEOGRAPH - 0x8AEA: 0x4F0E, //CJK UNIFIED IDEOGRAPH - 0x8AEB: 0x5371, //CJK UNIFIED IDEOGRAPH - 0x8AEC: 0x559C, //CJK UNIFIED IDEOGRAPH - 0x8AED: 0x5668, //CJK UNIFIED IDEOGRAPH - 0x8AEE: 0x57FA, //CJK UNIFIED IDEOGRAPH - 0x8AEF: 0x5947, //CJK UNIFIED IDEOGRAPH - 0x8AF0: 0x5B09, //CJK UNIFIED IDEOGRAPH - 0x8AF1: 0x5BC4, //CJK UNIFIED IDEOGRAPH - 0x8AF2: 0x5C90, //CJK UNIFIED IDEOGRAPH - 0x8AF3: 0x5E0C, //CJK UNIFIED IDEOGRAPH - 0x8AF4: 0x5E7E, //CJK UNIFIED IDEOGRAPH - 0x8AF5: 0x5FCC, //CJK UNIFIED IDEOGRAPH - 0x8AF6: 0x63EE, //CJK UNIFIED IDEOGRAPH - 0x8AF7: 0x673A, //CJK UNIFIED IDEOGRAPH - 0x8AF8: 0x65D7, //CJK UNIFIED IDEOGRAPH - 0x8AF9: 0x65E2, //CJK UNIFIED IDEOGRAPH - 0x8AFA: 0x671F, //CJK UNIFIED IDEOGRAPH - 0x8AFB: 0x68CB, //CJK UNIFIED IDEOGRAPH - 0x8AFC: 0x68C4, //CJK UNIFIED IDEOGRAPH - 0x8B40: 0x6A5F, //CJK UNIFIED IDEOGRAPH - 0x8B41: 0x5E30, //CJK UNIFIED IDEOGRAPH - 0x8B42: 0x6BC5, //CJK UNIFIED IDEOGRAPH - 0x8B43: 0x6C17, //CJK UNIFIED IDEOGRAPH - 0x8B44: 0x6C7D, //CJK UNIFIED IDEOGRAPH - 0x8B45: 0x757F, //CJK UNIFIED IDEOGRAPH - 0x8B46: 0x7948, //CJK UNIFIED IDEOGRAPH - 0x8B47: 0x5B63, //CJK UNIFIED IDEOGRAPH - 0x8B48: 0x7A00, //CJK UNIFIED IDEOGRAPH - 0x8B49: 0x7D00, //CJK UNIFIED IDEOGRAPH - 0x8B4A: 0x5FBD, //CJK UNIFIED IDEOGRAPH - 0x8B4B: 0x898F, //CJK UNIFIED IDEOGRAPH - 0x8B4C: 0x8A18, //CJK UNIFIED IDEOGRAPH - 0x8B4D: 0x8CB4, //CJK UNIFIED IDEOGRAPH - 0x8B4E: 0x8D77, //CJK UNIFIED IDEOGRAPH - 0x8B4F: 0x8ECC, //CJK UNIFIED IDEOGRAPH - 0x8B50: 0x8F1D, //CJK UNIFIED IDEOGRAPH - 0x8B51: 0x98E2, //CJK UNIFIED IDEOGRAPH - 0x8B52: 0x9A0E, //CJK UNIFIED IDEOGRAPH - 0x8B53: 0x9B3C, //CJK UNIFIED IDEOGRAPH - 0x8B54: 0x4E80, //CJK UNIFIED IDEOGRAPH - 0x8B55: 0x507D, //CJK UNIFIED IDEOGRAPH - 0x8B56: 0x5100, //CJK UNIFIED IDEOGRAPH - 0x8B57: 0x5993, //CJK UNIFIED IDEOGRAPH - 0x8B58: 0x5B9C, //CJK UNIFIED IDEOGRAPH - 0x8B59: 0x622F, //CJK UNIFIED IDEOGRAPH - 0x8B5A: 0x6280, //CJK UNIFIED IDEOGRAPH - 0x8B5B: 0x64EC, //CJK UNIFIED IDEOGRAPH - 0x8B5C: 0x6B3A, //CJK UNIFIED IDEOGRAPH - 0x8B5D: 0x72A0, //CJK UNIFIED IDEOGRAPH - 0x8B5E: 0x7591, //CJK UNIFIED IDEOGRAPH - 0x8B5F: 0x7947, //CJK UNIFIED IDEOGRAPH - 0x8B60: 0x7FA9, //CJK UNIFIED IDEOGRAPH - 0x8B61: 0x87FB, //CJK UNIFIED IDEOGRAPH - 0x8B62: 0x8ABC, //CJK UNIFIED IDEOGRAPH - 0x8B63: 0x8B70, //CJK UNIFIED IDEOGRAPH - 0x8B64: 0x63AC, //CJK UNIFIED IDEOGRAPH - 0x8B65: 0x83CA, //CJK UNIFIED IDEOGRAPH - 0x8B66: 0x97A0, //CJK UNIFIED IDEOGRAPH - 0x8B67: 0x5409, //CJK UNIFIED IDEOGRAPH - 0x8B68: 0x5403, //CJK UNIFIED IDEOGRAPH - 0x8B69: 0x55AB, //CJK UNIFIED IDEOGRAPH - 0x8B6A: 0x6854, //CJK UNIFIED IDEOGRAPH - 0x8B6B: 0x6A58, //CJK UNIFIED IDEOGRAPH - 0x8B6C: 0x8A70, //CJK UNIFIED IDEOGRAPH - 0x8B6D: 0x7827, //CJK UNIFIED IDEOGRAPH - 0x8B6E: 0x6775, //CJK UNIFIED IDEOGRAPH - 0x8B6F: 0x9ECD, //CJK UNIFIED IDEOGRAPH - 0x8B70: 0x5374, //CJK UNIFIED IDEOGRAPH - 0x8B71: 0x5BA2, //CJK UNIFIED IDEOGRAPH - 0x8B72: 0x811A, //CJK UNIFIED IDEOGRAPH - 0x8B73: 0x8650, //CJK UNIFIED IDEOGRAPH - 0x8B74: 0x9006, //CJK UNIFIED IDEOGRAPH - 0x8B75: 0x4E18, //CJK UNIFIED IDEOGRAPH - 0x8B76: 0x4E45, //CJK UNIFIED IDEOGRAPH - 0x8B77: 0x4EC7, //CJK UNIFIED IDEOGRAPH - 0x8B78: 0x4F11, //CJK UNIFIED IDEOGRAPH - 0x8B79: 0x53CA, //CJK UNIFIED IDEOGRAPH - 0x8B7A: 0x5438, //CJK UNIFIED IDEOGRAPH - 0x8B7B: 0x5BAE, //CJK UNIFIED IDEOGRAPH - 0x8B7C: 0x5F13, //CJK UNIFIED IDEOGRAPH - 0x8B7D: 0x6025, //CJK UNIFIED IDEOGRAPH - 0x8B7E: 0x6551, //CJK UNIFIED IDEOGRAPH - 0x8B80: 0x673D, //CJK UNIFIED IDEOGRAPH - 0x8B81: 0x6C42, //CJK UNIFIED IDEOGRAPH - 0x8B82: 0x6C72, //CJK UNIFIED IDEOGRAPH - 0x8B83: 0x6CE3, //CJK UNIFIED IDEOGRAPH - 0x8B84: 0x7078, //CJK UNIFIED IDEOGRAPH - 0x8B85: 0x7403, //CJK UNIFIED IDEOGRAPH - 0x8B86: 0x7A76, //CJK UNIFIED IDEOGRAPH - 0x8B87: 0x7AAE, //CJK UNIFIED IDEOGRAPH - 0x8B88: 0x7B08, //CJK UNIFIED IDEOGRAPH - 0x8B89: 0x7D1A, //CJK UNIFIED IDEOGRAPH - 0x8B8A: 0x7CFE, //CJK UNIFIED IDEOGRAPH - 0x8B8B: 0x7D66, //CJK UNIFIED IDEOGRAPH - 0x8B8C: 0x65E7, //CJK UNIFIED IDEOGRAPH - 0x8B8D: 0x725B, //CJK UNIFIED IDEOGRAPH - 0x8B8E: 0x53BB, //CJK UNIFIED IDEOGRAPH - 0x8B8F: 0x5C45, //CJK UNIFIED IDEOGRAPH - 0x8B90: 0x5DE8, //CJK UNIFIED IDEOGRAPH - 0x8B91: 0x62D2, //CJK UNIFIED IDEOGRAPH - 0x8B92: 0x62E0, //CJK UNIFIED IDEOGRAPH - 0x8B93: 0x6319, //CJK UNIFIED IDEOGRAPH - 0x8B94: 0x6E20, //CJK UNIFIED IDEOGRAPH - 0x8B95: 0x865A, //CJK UNIFIED IDEOGRAPH - 0x8B96: 0x8A31, //CJK UNIFIED IDEOGRAPH - 0x8B97: 0x8DDD, //CJK UNIFIED IDEOGRAPH - 0x8B98: 0x92F8, //CJK UNIFIED IDEOGRAPH - 0x8B99: 0x6F01, //CJK UNIFIED IDEOGRAPH - 0x8B9A: 0x79A6, //CJK UNIFIED IDEOGRAPH - 0x8B9B: 0x9B5A, //CJK UNIFIED IDEOGRAPH - 0x8B9C: 0x4EA8, //CJK UNIFIED IDEOGRAPH - 0x8B9D: 0x4EAB, //CJK UNIFIED IDEOGRAPH - 0x8B9E: 0x4EAC, //CJK UNIFIED IDEOGRAPH - 0x8B9F: 0x4F9B, //CJK UNIFIED IDEOGRAPH - 0x8BA0: 0x4FA0, //CJK UNIFIED IDEOGRAPH - 0x8BA1: 0x50D1, //CJK UNIFIED IDEOGRAPH - 0x8BA2: 0x5147, //CJK UNIFIED IDEOGRAPH - 0x8BA3: 0x7AF6, //CJK UNIFIED IDEOGRAPH - 0x8BA4: 0x5171, //CJK UNIFIED IDEOGRAPH - 0x8BA5: 0x51F6, //CJK UNIFIED IDEOGRAPH - 0x8BA6: 0x5354, //CJK UNIFIED IDEOGRAPH - 0x8BA7: 0x5321, //CJK UNIFIED IDEOGRAPH - 0x8BA8: 0x537F, //CJK UNIFIED IDEOGRAPH - 0x8BA9: 0x53EB, //CJK UNIFIED IDEOGRAPH - 0x8BAA: 0x55AC, //CJK UNIFIED IDEOGRAPH - 0x8BAB: 0x5883, //CJK UNIFIED IDEOGRAPH - 0x8BAC: 0x5CE1, //CJK UNIFIED IDEOGRAPH - 0x8BAD: 0x5F37, //CJK UNIFIED IDEOGRAPH - 0x8BAE: 0x5F4A, //CJK UNIFIED IDEOGRAPH - 0x8BAF: 0x602F, //CJK UNIFIED IDEOGRAPH - 0x8BB0: 0x6050, //CJK UNIFIED IDEOGRAPH - 0x8BB1: 0x606D, //CJK UNIFIED IDEOGRAPH - 0x8BB2: 0x631F, //CJK UNIFIED IDEOGRAPH - 0x8BB3: 0x6559, //CJK UNIFIED IDEOGRAPH - 0x8BB4: 0x6A4B, //CJK UNIFIED IDEOGRAPH - 0x8BB5: 0x6CC1, //CJK UNIFIED IDEOGRAPH - 0x8BB6: 0x72C2, //CJK UNIFIED IDEOGRAPH - 0x8BB7: 0x72ED, //CJK UNIFIED IDEOGRAPH - 0x8BB8: 0x77EF, //CJK UNIFIED IDEOGRAPH - 0x8BB9: 0x80F8, //CJK UNIFIED IDEOGRAPH - 0x8BBA: 0x8105, //CJK UNIFIED IDEOGRAPH - 0x8BBB: 0x8208, //CJK UNIFIED IDEOGRAPH - 0x8BBC: 0x854E, //CJK UNIFIED IDEOGRAPH - 0x8BBD: 0x90F7, //CJK UNIFIED IDEOGRAPH - 0x8BBE: 0x93E1, //CJK UNIFIED IDEOGRAPH - 0x8BBF: 0x97FF, //CJK UNIFIED IDEOGRAPH - 0x8BC0: 0x9957, //CJK UNIFIED IDEOGRAPH - 0x8BC1: 0x9A5A, //CJK UNIFIED IDEOGRAPH - 0x8BC2: 0x4EF0, //CJK UNIFIED IDEOGRAPH - 0x8BC3: 0x51DD, //CJK UNIFIED IDEOGRAPH - 0x8BC4: 0x5C2D, //CJK UNIFIED IDEOGRAPH - 0x8BC5: 0x6681, //CJK UNIFIED IDEOGRAPH - 0x8BC6: 0x696D, //CJK UNIFIED IDEOGRAPH - 0x8BC7: 0x5C40, //CJK UNIFIED IDEOGRAPH - 0x8BC8: 0x66F2, //CJK UNIFIED IDEOGRAPH - 0x8BC9: 0x6975, //CJK UNIFIED IDEOGRAPH - 0x8BCA: 0x7389, //CJK UNIFIED IDEOGRAPH - 0x8BCB: 0x6850, //CJK UNIFIED IDEOGRAPH - 0x8BCC: 0x7C81, //CJK UNIFIED IDEOGRAPH - 0x8BCD: 0x50C5, //CJK UNIFIED IDEOGRAPH - 0x8BCE: 0x52E4, //CJK UNIFIED IDEOGRAPH - 0x8BCF: 0x5747, //CJK UNIFIED IDEOGRAPH - 0x8BD0: 0x5DFE, //CJK UNIFIED IDEOGRAPH - 0x8BD1: 0x9326, //CJK UNIFIED IDEOGRAPH - 0x8BD2: 0x65A4, //CJK UNIFIED IDEOGRAPH - 0x8BD3: 0x6B23, //CJK UNIFIED IDEOGRAPH - 0x8BD4: 0x6B3D, //CJK UNIFIED IDEOGRAPH - 0x8BD5: 0x7434, //CJK UNIFIED IDEOGRAPH - 0x8BD6: 0x7981, //CJK UNIFIED IDEOGRAPH - 0x8BD7: 0x79BD, //CJK UNIFIED IDEOGRAPH - 0x8BD8: 0x7B4B, //CJK UNIFIED IDEOGRAPH - 0x8BD9: 0x7DCA, //CJK UNIFIED IDEOGRAPH - 0x8BDA: 0x82B9, //CJK UNIFIED IDEOGRAPH - 0x8BDB: 0x83CC, //CJK UNIFIED IDEOGRAPH - 0x8BDC: 0x887F, //CJK UNIFIED IDEOGRAPH - 0x8BDD: 0x895F, //CJK UNIFIED IDEOGRAPH - 0x8BDE: 0x8B39, //CJK UNIFIED IDEOGRAPH - 0x8BDF: 0x8FD1, //CJK UNIFIED IDEOGRAPH - 0x8BE0: 0x91D1, //CJK UNIFIED IDEOGRAPH - 0x8BE1: 0x541F, //CJK UNIFIED IDEOGRAPH - 0x8BE2: 0x9280, //CJK UNIFIED IDEOGRAPH - 0x8BE3: 0x4E5D, //CJK UNIFIED IDEOGRAPH - 0x8BE4: 0x5036, //CJK UNIFIED IDEOGRAPH - 0x8BE5: 0x53E5, //CJK UNIFIED IDEOGRAPH - 0x8BE6: 0x533A, //CJK UNIFIED IDEOGRAPH - 0x8BE7: 0x72D7, //CJK UNIFIED IDEOGRAPH - 0x8BE8: 0x7396, //CJK UNIFIED IDEOGRAPH - 0x8BE9: 0x77E9, //CJK UNIFIED IDEOGRAPH - 0x8BEA: 0x82E6, //CJK UNIFIED IDEOGRAPH - 0x8BEB: 0x8EAF, //CJK UNIFIED IDEOGRAPH - 0x8BEC: 0x99C6, //CJK UNIFIED IDEOGRAPH - 0x8BED: 0x99C8, //CJK UNIFIED IDEOGRAPH - 0x8BEE: 0x99D2, //CJK UNIFIED IDEOGRAPH - 0x8BEF: 0x5177, //CJK UNIFIED IDEOGRAPH - 0x8BF0: 0x611A, //CJK UNIFIED IDEOGRAPH - 0x8BF1: 0x865E, //CJK UNIFIED IDEOGRAPH - 0x8BF2: 0x55B0, //CJK UNIFIED IDEOGRAPH - 0x8BF3: 0x7A7A, //CJK UNIFIED IDEOGRAPH - 0x8BF4: 0x5076, //CJK UNIFIED IDEOGRAPH - 0x8BF5: 0x5BD3, //CJK UNIFIED IDEOGRAPH - 0x8BF6: 0x9047, //CJK UNIFIED IDEOGRAPH - 0x8BF7: 0x9685, //CJK UNIFIED IDEOGRAPH - 0x8BF8: 0x4E32, //CJK UNIFIED IDEOGRAPH - 0x8BF9: 0x6ADB, //CJK UNIFIED IDEOGRAPH - 0x8BFA: 0x91E7, //CJK UNIFIED IDEOGRAPH - 0x8BFB: 0x5C51, //CJK UNIFIED IDEOGRAPH - 0x8BFC: 0x5C48, //CJK UNIFIED IDEOGRAPH - 0x8C40: 0x6398, //CJK UNIFIED IDEOGRAPH - 0x8C41: 0x7A9F, //CJK UNIFIED IDEOGRAPH - 0x8C42: 0x6C93, //CJK UNIFIED IDEOGRAPH - 0x8C43: 0x9774, //CJK UNIFIED IDEOGRAPH - 0x8C44: 0x8F61, //CJK UNIFIED IDEOGRAPH - 0x8C45: 0x7AAA, //CJK UNIFIED IDEOGRAPH - 0x8C46: 0x718A, //CJK UNIFIED IDEOGRAPH - 0x8C47: 0x9688, //CJK UNIFIED IDEOGRAPH - 0x8C48: 0x7C82, //CJK UNIFIED IDEOGRAPH - 0x8C49: 0x6817, //CJK UNIFIED IDEOGRAPH - 0x8C4A: 0x7E70, //CJK UNIFIED IDEOGRAPH - 0x8C4B: 0x6851, //CJK UNIFIED IDEOGRAPH - 0x8C4C: 0x936C, //CJK UNIFIED IDEOGRAPH - 0x8C4D: 0x52F2, //CJK UNIFIED IDEOGRAPH - 0x8C4E: 0x541B, //CJK UNIFIED IDEOGRAPH - 0x8C4F: 0x85AB, //CJK UNIFIED IDEOGRAPH - 0x8C50: 0x8A13, //CJK UNIFIED IDEOGRAPH - 0x8C51: 0x7FA4, //CJK UNIFIED IDEOGRAPH - 0x8C52: 0x8ECD, //CJK UNIFIED IDEOGRAPH - 0x8C53: 0x90E1, //CJK UNIFIED IDEOGRAPH - 0x8C54: 0x5366, //CJK UNIFIED IDEOGRAPH - 0x8C55: 0x8888, //CJK UNIFIED IDEOGRAPH - 0x8C56: 0x7941, //CJK UNIFIED IDEOGRAPH - 0x8C57: 0x4FC2, //CJK UNIFIED IDEOGRAPH - 0x8C58: 0x50BE, //CJK UNIFIED IDEOGRAPH - 0x8C59: 0x5211, //CJK UNIFIED IDEOGRAPH - 0x8C5A: 0x5144, //CJK UNIFIED IDEOGRAPH - 0x8C5B: 0x5553, //CJK UNIFIED IDEOGRAPH - 0x8C5C: 0x572D, //CJK UNIFIED IDEOGRAPH - 0x8C5D: 0x73EA, //CJK UNIFIED IDEOGRAPH - 0x8C5E: 0x578B, //CJK UNIFIED IDEOGRAPH - 0x8C5F: 0x5951, //CJK UNIFIED IDEOGRAPH - 0x8C60: 0x5F62, //CJK UNIFIED IDEOGRAPH - 0x8C61: 0x5F84, //CJK UNIFIED IDEOGRAPH - 0x8C62: 0x6075, //CJK UNIFIED IDEOGRAPH - 0x8C63: 0x6176, //CJK UNIFIED IDEOGRAPH - 0x8C64: 0x6167, //CJK UNIFIED IDEOGRAPH - 0x8C65: 0x61A9, //CJK UNIFIED IDEOGRAPH - 0x8C66: 0x63B2, //CJK UNIFIED IDEOGRAPH - 0x8C67: 0x643A, //CJK UNIFIED IDEOGRAPH - 0x8C68: 0x656C, //CJK UNIFIED IDEOGRAPH - 0x8C69: 0x666F, //CJK UNIFIED IDEOGRAPH - 0x8C6A: 0x6842, //CJK UNIFIED IDEOGRAPH - 0x8C6B: 0x6E13, //CJK UNIFIED IDEOGRAPH - 0x8C6C: 0x7566, //CJK UNIFIED IDEOGRAPH - 0x8C6D: 0x7A3D, //CJK UNIFIED IDEOGRAPH - 0x8C6E: 0x7CFB, //CJK UNIFIED IDEOGRAPH - 0x8C6F: 0x7D4C, //CJK UNIFIED IDEOGRAPH - 0x8C70: 0x7D99, //CJK UNIFIED IDEOGRAPH - 0x8C71: 0x7E4B, //CJK UNIFIED IDEOGRAPH - 0x8C72: 0x7F6B, //CJK UNIFIED IDEOGRAPH - 0x8C73: 0x830E, //CJK UNIFIED IDEOGRAPH - 0x8C74: 0x834A, //CJK UNIFIED IDEOGRAPH - 0x8C75: 0x86CD, //CJK UNIFIED IDEOGRAPH - 0x8C76: 0x8A08, //CJK UNIFIED IDEOGRAPH - 0x8C77: 0x8A63, //CJK UNIFIED IDEOGRAPH - 0x8C78: 0x8B66, //CJK UNIFIED IDEOGRAPH - 0x8C79: 0x8EFD, //CJK UNIFIED IDEOGRAPH - 0x8C7A: 0x981A, //CJK UNIFIED IDEOGRAPH - 0x8C7B: 0x9D8F, //CJK UNIFIED IDEOGRAPH - 0x8C7C: 0x82B8, //CJK UNIFIED IDEOGRAPH - 0x8C7D: 0x8FCE, //CJK UNIFIED IDEOGRAPH - 0x8C7E: 0x9BE8, //CJK UNIFIED IDEOGRAPH - 0x8C80: 0x5287, //CJK UNIFIED IDEOGRAPH - 0x8C81: 0x621F, //CJK UNIFIED IDEOGRAPH - 0x8C82: 0x6483, //CJK UNIFIED IDEOGRAPH - 0x8C83: 0x6FC0, //CJK UNIFIED IDEOGRAPH - 0x8C84: 0x9699, //CJK UNIFIED IDEOGRAPH - 0x8C85: 0x6841, //CJK UNIFIED IDEOGRAPH - 0x8C86: 0x5091, //CJK UNIFIED IDEOGRAPH - 0x8C87: 0x6B20, //CJK UNIFIED IDEOGRAPH - 0x8C88: 0x6C7A, //CJK UNIFIED IDEOGRAPH - 0x8C89: 0x6F54, //CJK UNIFIED IDEOGRAPH - 0x8C8A: 0x7A74, //CJK UNIFIED IDEOGRAPH - 0x8C8B: 0x7D50, //CJK UNIFIED IDEOGRAPH - 0x8C8C: 0x8840, //CJK UNIFIED IDEOGRAPH - 0x8C8D: 0x8A23, //CJK UNIFIED IDEOGRAPH - 0x8C8E: 0x6708, //CJK UNIFIED IDEOGRAPH - 0x8C8F: 0x4EF6, //CJK UNIFIED IDEOGRAPH - 0x8C90: 0x5039, //CJK UNIFIED IDEOGRAPH - 0x8C91: 0x5026, //CJK UNIFIED IDEOGRAPH - 0x8C92: 0x5065, //CJK UNIFIED IDEOGRAPH - 0x8C93: 0x517C, //CJK UNIFIED IDEOGRAPH - 0x8C94: 0x5238, //CJK UNIFIED IDEOGRAPH - 0x8C95: 0x5263, //CJK UNIFIED IDEOGRAPH - 0x8C96: 0x55A7, //CJK UNIFIED IDEOGRAPH - 0x8C97: 0x570F, //CJK UNIFIED IDEOGRAPH - 0x8C98: 0x5805, //CJK UNIFIED IDEOGRAPH - 0x8C99: 0x5ACC, //CJK UNIFIED IDEOGRAPH - 0x8C9A: 0x5EFA, //CJK UNIFIED IDEOGRAPH - 0x8C9B: 0x61B2, //CJK UNIFIED IDEOGRAPH - 0x8C9C: 0x61F8, //CJK UNIFIED IDEOGRAPH - 0x8C9D: 0x62F3, //CJK UNIFIED IDEOGRAPH - 0x8C9E: 0x6372, //CJK UNIFIED IDEOGRAPH - 0x8C9F: 0x691C, //CJK UNIFIED IDEOGRAPH - 0x8CA0: 0x6A29, //CJK UNIFIED IDEOGRAPH - 0x8CA1: 0x727D, //CJK UNIFIED IDEOGRAPH - 0x8CA2: 0x72AC, //CJK UNIFIED IDEOGRAPH - 0x8CA3: 0x732E, //CJK UNIFIED IDEOGRAPH - 0x8CA4: 0x7814, //CJK UNIFIED IDEOGRAPH - 0x8CA5: 0x786F, //CJK UNIFIED IDEOGRAPH - 0x8CA6: 0x7D79, //CJK UNIFIED IDEOGRAPH - 0x8CA7: 0x770C, //CJK UNIFIED IDEOGRAPH - 0x8CA8: 0x80A9, //CJK UNIFIED IDEOGRAPH - 0x8CA9: 0x898B, //CJK UNIFIED IDEOGRAPH - 0x8CAA: 0x8B19, //CJK UNIFIED IDEOGRAPH - 0x8CAB: 0x8CE2, //CJK UNIFIED IDEOGRAPH - 0x8CAC: 0x8ED2, //CJK UNIFIED IDEOGRAPH - 0x8CAD: 0x9063, //CJK UNIFIED IDEOGRAPH - 0x8CAE: 0x9375, //CJK UNIFIED IDEOGRAPH - 0x8CAF: 0x967A, //CJK UNIFIED IDEOGRAPH - 0x8CB0: 0x9855, //CJK UNIFIED IDEOGRAPH - 0x8CB1: 0x9A13, //CJK UNIFIED IDEOGRAPH - 0x8CB2: 0x9E78, //CJK UNIFIED IDEOGRAPH - 0x8CB3: 0x5143, //CJK UNIFIED IDEOGRAPH - 0x8CB4: 0x539F, //CJK UNIFIED IDEOGRAPH - 0x8CB5: 0x53B3, //CJK UNIFIED IDEOGRAPH - 0x8CB6: 0x5E7B, //CJK UNIFIED IDEOGRAPH - 0x8CB7: 0x5F26, //CJK UNIFIED IDEOGRAPH - 0x8CB8: 0x6E1B, //CJK UNIFIED IDEOGRAPH - 0x8CB9: 0x6E90, //CJK UNIFIED IDEOGRAPH - 0x8CBA: 0x7384, //CJK UNIFIED IDEOGRAPH - 0x8CBB: 0x73FE, //CJK UNIFIED IDEOGRAPH - 0x8CBC: 0x7D43, //CJK UNIFIED IDEOGRAPH - 0x8CBD: 0x8237, //CJK UNIFIED IDEOGRAPH - 0x8CBE: 0x8A00, //CJK UNIFIED IDEOGRAPH - 0x8CBF: 0x8AFA, //CJK UNIFIED IDEOGRAPH - 0x8CC0: 0x9650, //CJK UNIFIED IDEOGRAPH - 0x8CC1: 0x4E4E, //CJK UNIFIED IDEOGRAPH - 0x8CC2: 0x500B, //CJK UNIFIED IDEOGRAPH - 0x8CC3: 0x53E4, //CJK UNIFIED IDEOGRAPH - 0x8CC4: 0x547C, //CJK UNIFIED IDEOGRAPH - 0x8CC5: 0x56FA, //CJK UNIFIED IDEOGRAPH - 0x8CC6: 0x59D1, //CJK UNIFIED IDEOGRAPH - 0x8CC7: 0x5B64, //CJK UNIFIED IDEOGRAPH - 0x8CC8: 0x5DF1, //CJK UNIFIED IDEOGRAPH - 0x8CC9: 0x5EAB, //CJK UNIFIED IDEOGRAPH - 0x8CCA: 0x5F27, //CJK UNIFIED IDEOGRAPH - 0x8CCB: 0x6238, //CJK UNIFIED IDEOGRAPH - 0x8CCC: 0x6545, //CJK UNIFIED IDEOGRAPH - 0x8CCD: 0x67AF, //CJK UNIFIED IDEOGRAPH - 0x8CCE: 0x6E56, //CJK UNIFIED IDEOGRAPH - 0x8CCF: 0x72D0, //CJK UNIFIED IDEOGRAPH - 0x8CD0: 0x7CCA, //CJK UNIFIED IDEOGRAPH - 0x8CD1: 0x88B4, //CJK UNIFIED IDEOGRAPH - 0x8CD2: 0x80A1, //CJK UNIFIED IDEOGRAPH - 0x8CD3: 0x80E1, //CJK UNIFIED IDEOGRAPH - 0x8CD4: 0x83F0, //CJK UNIFIED IDEOGRAPH - 0x8CD5: 0x864E, //CJK UNIFIED IDEOGRAPH - 0x8CD6: 0x8A87, //CJK UNIFIED IDEOGRAPH - 0x8CD7: 0x8DE8, //CJK UNIFIED IDEOGRAPH - 0x8CD8: 0x9237, //CJK UNIFIED IDEOGRAPH - 0x8CD9: 0x96C7, //CJK UNIFIED IDEOGRAPH - 0x8CDA: 0x9867, //CJK UNIFIED IDEOGRAPH - 0x8CDB: 0x9F13, //CJK UNIFIED IDEOGRAPH - 0x8CDC: 0x4E94, //CJK UNIFIED IDEOGRAPH - 0x8CDD: 0x4E92, //CJK UNIFIED IDEOGRAPH - 0x8CDE: 0x4F0D, //CJK UNIFIED IDEOGRAPH - 0x8CDF: 0x5348, //CJK UNIFIED IDEOGRAPH - 0x8CE0: 0x5449, //CJK UNIFIED IDEOGRAPH - 0x8CE1: 0x543E, //CJK UNIFIED IDEOGRAPH - 0x8CE2: 0x5A2F, //CJK UNIFIED IDEOGRAPH - 0x8CE3: 0x5F8C, //CJK UNIFIED IDEOGRAPH - 0x8CE4: 0x5FA1, //CJK UNIFIED IDEOGRAPH - 0x8CE5: 0x609F, //CJK UNIFIED IDEOGRAPH - 0x8CE6: 0x68A7, //CJK UNIFIED IDEOGRAPH - 0x8CE7: 0x6A8E, //CJK UNIFIED IDEOGRAPH - 0x8CE8: 0x745A, //CJK UNIFIED IDEOGRAPH - 0x8CE9: 0x7881, //CJK UNIFIED IDEOGRAPH - 0x8CEA: 0x8A9E, //CJK UNIFIED IDEOGRAPH - 0x8CEB: 0x8AA4, //CJK UNIFIED IDEOGRAPH - 0x8CEC: 0x8B77, //CJK UNIFIED IDEOGRAPH - 0x8CED: 0x9190, //CJK UNIFIED IDEOGRAPH - 0x8CEE: 0x4E5E, //CJK UNIFIED IDEOGRAPH - 0x8CEF: 0x9BC9, //CJK UNIFIED IDEOGRAPH - 0x8CF0: 0x4EA4, //CJK UNIFIED IDEOGRAPH - 0x8CF1: 0x4F7C, //CJK UNIFIED IDEOGRAPH - 0x8CF2: 0x4FAF, //CJK UNIFIED IDEOGRAPH - 0x8CF3: 0x5019, //CJK UNIFIED IDEOGRAPH - 0x8CF4: 0x5016, //CJK UNIFIED IDEOGRAPH - 0x8CF5: 0x5149, //CJK UNIFIED IDEOGRAPH - 0x8CF6: 0x516C, //CJK UNIFIED IDEOGRAPH - 0x8CF7: 0x529F, //CJK UNIFIED IDEOGRAPH - 0x8CF8: 0x52B9, //CJK UNIFIED IDEOGRAPH - 0x8CF9: 0x52FE, //CJK UNIFIED IDEOGRAPH - 0x8CFA: 0x539A, //CJK UNIFIED IDEOGRAPH - 0x8CFB: 0x53E3, //CJK UNIFIED IDEOGRAPH - 0x8CFC: 0x5411, //CJK UNIFIED IDEOGRAPH - 0x8D40: 0x540E, //CJK UNIFIED IDEOGRAPH - 0x8D41: 0x5589, //CJK UNIFIED IDEOGRAPH - 0x8D42: 0x5751, //CJK UNIFIED IDEOGRAPH - 0x8D43: 0x57A2, //CJK UNIFIED IDEOGRAPH - 0x8D44: 0x597D, //CJK UNIFIED IDEOGRAPH - 0x8D45: 0x5B54, //CJK UNIFIED IDEOGRAPH - 0x8D46: 0x5B5D, //CJK UNIFIED IDEOGRAPH - 0x8D47: 0x5B8F, //CJK UNIFIED IDEOGRAPH - 0x8D48: 0x5DE5, //CJK UNIFIED IDEOGRAPH - 0x8D49: 0x5DE7, //CJK UNIFIED IDEOGRAPH - 0x8D4A: 0x5DF7, //CJK UNIFIED IDEOGRAPH - 0x8D4B: 0x5E78, //CJK UNIFIED IDEOGRAPH - 0x8D4C: 0x5E83, //CJK UNIFIED IDEOGRAPH - 0x8D4D: 0x5E9A, //CJK UNIFIED IDEOGRAPH - 0x8D4E: 0x5EB7, //CJK UNIFIED IDEOGRAPH - 0x8D4F: 0x5F18, //CJK UNIFIED IDEOGRAPH - 0x8D50: 0x6052, //CJK UNIFIED IDEOGRAPH - 0x8D51: 0x614C, //CJK UNIFIED IDEOGRAPH - 0x8D52: 0x6297, //CJK UNIFIED IDEOGRAPH - 0x8D53: 0x62D8, //CJK UNIFIED IDEOGRAPH - 0x8D54: 0x63A7, //CJK UNIFIED IDEOGRAPH - 0x8D55: 0x653B, //CJK UNIFIED IDEOGRAPH - 0x8D56: 0x6602, //CJK UNIFIED IDEOGRAPH - 0x8D57: 0x6643, //CJK UNIFIED IDEOGRAPH - 0x8D58: 0x66F4, //CJK UNIFIED IDEOGRAPH - 0x8D59: 0x676D, //CJK UNIFIED IDEOGRAPH - 0x8D5A: 0x6821, //CJK UNIFIED IDEOGRAPH - 0x8D5B: 0x6897, //CJK UNIFIED IDEOGRAPH - 0x8D5C: 0x69CB, //CJK UNIFIED IDEOGRAPH - 0x8D5D: 0x6C5F, //CJK UNIFIED IDEOGRAPH - 0x8D5E: 0x6D2A, //CJK UNIFIED IDEOGRAPH - 0x8D5F: 0x6D69, //CJK UNIFIED IDEOGRAPH - 0x8D60: 0x6E2F, //CJK UNIFIED IDEOGRAPH - 0x8D61: 0x6E9D, //CJK UNIFIED IDEOGRAPH - 0x8D62: 0x7532, //CJK UNIFIED IDEOGRAPH - 0x8D63: 0x7687, //CJK UNIFIED IDEOGRAPH - 0x8D64: 0x786C, //CJK UNIFIED IDEOGRAPH - 0x8D65: 0x7A3F, //CJK UNIFIED IDEOGRAPH - 0x8D66: 0x7CE0, //CJK UNIFIED IDEOGRAPH - 0x8D67: 0x7D05, //CJK UNIFIED IDEOGRAPH - 0x8D68: 0x7D18, //CJK UNIFIED IDEOGRAPH - 0x8D69: 0x7D5E, //CJK UNIFIED IDEOGRAPH - 0x8D6A: 0x7DB1, //CJK UNIFIED IDEOGRAPH - 0x8D6B: 0x8015, //CJK UNIFIED IDEOGRAPH - 0x8D6C: 0x8003, //CJK UNIFIED IDEOGRAPH - 0x8D6D: 0x80AF, //CJK UNIFIED IDEOGRAPH - 0x8D6E: 0x80B1, //CJK UNIFIED IDEOGRAPH - 0x8D6F: 0x8154, //CJK UNIFIED IDEOGRAPH - 0x8D70: 0x818F, //CJK UNIFIED IDEOGRAPH - 0x8D71: 0x822A, //CJK UNIFIED IDEOGRAPH - 0x8D72: 0x8352, //CJK UNIFIED IDEOGRAPH - 0x8D73: 0x884C, //CJK UNIFIED IDEOGRAPH - 0x8D74: 0x8861, //CJK UNIFIED IDEOGRAPH - 0x8D75: 0x8B1B, //CJK UNIFIED IDEOGRAPH - 0x8D76: 0x8CA2, //CJK UNIFIED IDEOGRAPH - 0x8D77: 0x8CFC, //CJK UNIFIED IDEOGRAPH - 0x8D78: 0x90CA, //CJK UNIFIED IDEOGRAPH - 0x8D79: 0x9175, //CJK UNIFIED IDEOGRAPH - 0x8D7A: 0x9271, //CJK UNIFIED IDEOGRAPH - 0x8D7B: 0x783F, //CJK UNIFIED IDEOGRAPH - 0x8D7C: 0x92FC, //CJK UNIFIED IDEOGRAPH - 0x8D7D: 0x95A4, //CJK UNIFIED IDEOGRAPH - 0x8D7E: 0x964D, //CJK UNIFIED IDEOGRAPH - 0x8D80: 0x9805, //CJK UNIFIED IDEOGRAPH - 0x8D81: 0x9999, //CJK UNIFIED IDEOGRAPH - 0x8D82: 0x9AD8, //CJK UNIFIED IDEOGRAPH - 0x8D83: 0x9D3B, //CJK UNIFIED IDEOGRAPH - 0x8D84: 0x525B, //CJK UNIFIED IDEOGRAPH - 0x8D85: 0x52AB, //CJK UNIFIED IDEOGRAPH - 0x8D86: 0x53F7, //CJK UNIFIED IDEOGRAPH - 0x8D87: 0x5408, //CJK UNIFIED IDEOGRAPH - 0x8D88: 0x58D5, //CJK UNIFIED IDEOGRAPH - 0x8D89: 0x62F7, //CJK UNIFIED IDEOGRAPH - 0x8D8A: 0x6FE0, //CJK UNIFIED IDEOGRAPH - 0x8D8B: 0x8C6A, //CJK UNIFIED IDEOGRAPH - 0x8D8C: 0x8F5F, //CJK UNIFIED IDEOGRAPH - 0x8D8D: 0x9EB9, //CJK UNIFIED IDEOGRAPH - 0x8D8E: 0x514B, //CJK UNIFIED IDEOGRAPH - 0x8D8F: 0x523B, //CJK UNIFIED IDEOGRAPH - 0x8D90: 0x544A, //CJK UNIFIED IDEOGRAPH - 0x8D91: 0x56FD, //CJK UNIFIED IDEOGRAPH - 0x8D92: 0x7A40, //CJK UNIFIED IDEOGRAPH - 0x8D93: 0x9177, //CJK UNIFIED IDEOGRAPH - 0x8D94: 0x9D60, //CJK UNIFIED IDEOGRAPH - 0x8D95: 0x9ED2, //CJK UNIFIED IDEOGRAPH - 0x8D96: 0x7344, //CJK UNIFIED IDEOGRAPH - 0x8D97: 0x6F09, //CJK UNIFIED IDEOGRAPH - 0x8D98: 0x8170, //CJK UNIFIED IDEOGRAPH - 0x8D99: 0x7511, //CJK UNIFIED IDEOGRAPH - 0x8D9A: 0x5FFD, //CJK UNIFIED IDEOGRAPH - 0x8D9B: 0x60DA, //CJK UNIFIED IDEOGRAPH - 0x8D9C: 0x9AA8, //CJK UNIFIED IDEOGRAPH - 0x8D9D: 0x72DB, //CJK UNIFIED IDEOGRAPH - 0x8D9E: 0x8FBC, //CJK UNIFIED IDEOGRAPH - 0x8D9F: 0x6B64, //CJK UNIFIED IDEOGRAPH - 0x8DA0: 0x9803, //CJK UNIFIED IDEOGRAPH - 0x8DA1: 0x4ECA, //CJK UNIFIED IDEOGRAPH - 0x8DA2: 0x56F0, //CJK UNIFIED IDEOGRAPH - 0x8DA3: 0x5764, //CJK UNIFIED IDEOGRAPH - 0x8DA4: 0x58BE, //CJK UNIFIED IDEOGRAPH - 0x8DA5: 0x5A5A, //CJK UNIFIED IDEOGRAPH - 0x8DA6: 0x6068, //CJK UNIFIED IDEOGRAPH - 0x8DA7: 0x61C7, //CJK UNIFIED IDEOGRAPH - 0x8DA8: 0x660F, //CJK UNIFIED IDEOGRAPH - 0x8DA9: 0x6606, //CJK UNIFIED IDEOGRAPH - 0x8DAA: 0x6839, //CJK UNIFIED IDEOGRAPH - 0x8DAB: 0x68B1, //CJK UNIFIED IDEOGRAPH - 0x8DAC: 0x6DF7, //CJK UNIFIED IDEOGRAPH - 0x8DAD: 0x75D5, //CJK UNIFIED IDEOGRAPH - 0x8DAE: 0x7D3A, //CJK UNIFIED IDEOGRAPH - 0x8DAF: 0x826E, //CJK UNIFIED IDEOGRAPH - 0x8DB0: 0x9B42, //CJK UNIFIED IDEOGRAPH - 0x8DB1: 0x4E9B, //CJK UNIFIED IDEOGRAPH - 0x8DB2: 0x4F50, //CJK UNIFIED IDEOGRAPH - 0x8DB3: 0x53C9, //CJK UNIFIED IDEOGRAPH - 0x8DB4: 0x5506, //CJK UNIFIED IDEOGRAPH - 0x8DB5: 0x5D6F, //CJK UNIFIED IDEOGRAPH - 0x8DB6: 0x5DE6, //CJK UNIFIED IDEOGRAPH - 0x8DB7: 0x5DEE, //CJK UNIFIED IDEOGRAPH - 0x8DB8: 0x67FB, //CJK UNIFIED IDEOGRAPH - 0x8DB9: 0x6C99, //CJK UNIFIED IDEOGRAPH - 0x8DBA: 0x7473, //CJK UNIFIED IDEOGRAPH - 0x8DBB: 0x7802, //CJK UNIFIED IDEOGRAPH - 0x8DBC: 0x8A50, //CJK UNIFIED IDEOGRAPH - 0x8DBD: 0x9396, //CJK UNIFIED IDEOGRAPH - 0x8DBE: 0x88DF, //CJK UNIFIED IDEOGRAPH - 0x8DBF: 0x5750, //CJK UNIFIED IDEOGRAPH - 0x8DC0: 0x5EA7, //CJK UNIFIED IDEOGRAPH - 0x8DC1: 0x632B, //CJK UNIFIED IDEOGRAPH - 0x8DC2: 0x50B5, //CJK UNIFIED IDEOGRAPH - 0x8DC3: 0x50AC, //CJK UNIFIED IDEOGRAPH - 0x8DC4: 0x518D, //CJK UNIFIED IDEOGRAPH - 0x8DC5: 0x6700, //CJK UNIFIED IDEOGRAPH - 0x8DC6: 0x54C9, //CJK UNIFIED IDEOGRAPH - 0x8DC7: 0x585E, //CJK UNIFIED IDEOGRAPH - 0x8DC8: 0x59BB, //CJK UNIFIED IDEOGRAPH - 0x8DC9: 0x5BB0, //CJK UNIFIED IDEOGRAPH - 0x8DCA: 0x5F69, //CJK UNIFIED IDEOGRAPH - 0x8DCB: 0x624D, //CJK UNIFIED IDEOGRAPH - 0x8DCC: 0x63A1, //CJK UNIFIED IDEOGRAPH - 0x8DCD: 0x683D, //CJK UNIFIED IDEOGRAPH - 0x8DCE: 0x6B73, //CJK UNIFIED IDEOGRAPH - 0x8DCF: 0x6E08, //CJK UNIFIED IDEOGRAPH - 0x8DD0: 0x707D, //CJK UNIFIED IDEOGRAPH - 0x8DD1: 0x91C7, //CJK UNIFIED IDEOGRAPH - 0x8DD2: 0x7280, //CJK UNIFIED IDEOGRAPH - 0x8DD3: 0x7815, //CJK UNIFIED IDEOGRAPH - 0x8DD4: 0x7826, //CJK UNIFIED IDEOGRAPH - 0x8DD5: 0x796D, //CJK UNIFIED IDEOGRAPH - 0x8DD6: 0x658E, //CJK UNIFIED IDEOGRAPH - 0x8DD7: 0x7D30, //CJK UNIFIED IDEOGRAPH - 0x8DD8: 0x83DC, //CJK UNIFIED IDEOGRAPH - 0x8DD9: 0x88C1, //CJK UNIFIED IDEOGRAPH - 0x8DDA: 0x8F09, //CJK UNIFIED IDEOGRAPH - 0x8DDB: 0x969B, //CJK UNIFIED IDEOGRAPH - 0x8DDC: 0x5264, //CJK UNIFIED IDEOGRAPH - 0x8DDD: 0x5728, //CJK UNIFIED IDEOGRAPH - 0x8DDE: 0x6750, //CJK UNIFIED IDEOGRAPH - 0x8DDF: 0x7F6A, //CJK UNIFIED IDEOGRAPH - 0x8DE0: 0x8CA1, //CJK UNIFIED IDEOGRAPH - 0x8DE1: 0x51B4, //CJK UNIFIED IDEOGRAPH - 0x8DE2: 0x5742, //CJK UNIFIED IDEOGRAPH - 0x8DE3: 0x962A, //CJK UNIFIED IDEOGRAPH - 0x8DE4: 0x583A, //CJK UNIFIED IDEOGRAPH - 0x8DE5: 0x698A, //CJK UNIFIED IDEOGRAPH - 0x8DE6: 0x80B4, //CJK UNIFIED IDEOGRAPH - 0x8DE7: 0x54B2, //CJK UNIFIED IDEOGRAPH - 0x8DE8: 0x5D0E, //CJK UNIFIED IDEOGRAPH - 0x8DE9: 0x57FC, //CJK UNIFIED IDEOGRAPH - 0x8DEA: 0x7895, //CJK UNIFIED IDEOGRAPH - 0x8DEB: 0x9DFA, //CJK UNIFIED IDEOGRAPH - 0x8DEC: 0x4F5C, //CJK UNIFIED IDEOGRAPH - 0x8DED: 0x524A, //CJK UNIFIED IDEOGRAPH - 0x8DEE: 0x548B, //CJK UNIFIED IDEOGRAPH - 0x8DEF: 0x643E, //CJK UNIFIED IDEOGRAPH - 0x8DF0: 0x6628, //CJK UNIFIED IDEOGRAPH - 0x8DF1: 0x6714, //CJK UNIFIED IDEOGRAPH - 0x8DF2: 0x67F5, //CJK UNIFIED IDEOGRAPH - 0x8DF3: 0x7A84, //CJK UNIFIED IDEOGRAPH - 0x8DF4: 0x7B56, //CJK UNIFIED IDEOGRAPH - 0x8DF5: 0x7D22, //CJK UNIFIED IDEOGRAPH - 0x8DF6: 0x932F, //CJK UNIFIED IDEOGRAPH - 0x8DF7: 0x685C, //CJK UNIFIED IDEOGRAPH - 0x8DF8: 0x9BAD, //CJK UNIFIED IDEOGRAPH - 0x8DF9: 0x7B39, //CJK UNIFIED IDEOGRAPH - 0x8DFA: 0x5319, //CJK UNIFIED IDEOGRAPH - 0x8DFB: 0x518A, //CJK UNIFIED IDEOGRAPH - 0x8DFC: 0x5237, //CJK UNIFIED IDEOGRAPH - 0x8E40: 0x5BDF, //CJK UNIFIED IDEOGRAPH - 0x8E41: 0x62F6, //CJK UNIFIED IDEOGRAPH - 0x8E42: 0x64AE, //CJK UNIFIED IDEOGRAPH - 0x8E43: 0x64E6, //CJK UNIFIED IDEOGRAPH - 0x8E44: 0x672D, //CJK UNIFIED IDEOGRAPH - 0x8E45: 0x6BBA, //CJK UNIFIED IDEOGRAPH - 0x8E46: 0x85A9, //CJK UNIFIED IDEOGRAPH - 0x8E47: 0x96D1, //CJK UNIFIED IDEOGRAPH - 0x8E48: 0x7690, //CJK UNIFIED IDEOGRAPH - 0x8E49: 0x9BD6, //CJK UNIFIED IDEOGRAPH - 0x8E4A: 0x634C, //CJK UNIFIED IDEOGRAPH - 0x8E4B: 0x9306, //CJK UNIFIED IDEOGRAPH - 0x8E4C: 0x9BAB, //CJK UNIFIED IDEOGRAPH - 0x8E4D: 0x76BF, //CJK UNIFIED IDEOGRAPH - 0x8E4E: 0x6652, //CJK UNIFIED IDEOGRAPH - 0x8E4F: 0x4E09, //CJK UNIFIED IDEOGRAPH - 0x8E50: 0x5098, //CJK UNIFIED IDEOGRAPH - 0x8E51: 0x53C2, //CJK UNIFIED IDEOGRAPH - 0x8E52: 0x5C71, //CJK UNIFIED IDEOGRAPH - 0x8E53: 0x60E8, //CJK UNIFIED IDEOGRAPH - 0x8E54: 0x6492, //CJK UNIFIED IDEOGRAPH - 0x8E55: 0x6563, //CJK UNIFIED IDEOGRAPH - 0x8E56: 0x685F, //CJK UNIFIED IDEOGRAPH - 0x8E57: 0x71E6, //CJK UNIFIED IDEOGRAPH - 0x8E58: 0x73CA, //CJK UNIFIED IDEOGRAPH - 0x8E59: 0x7523, //CJK UNIFIED IDEOGRAPH - 0x8E5A: 0x7B97, //CJK UNIFIED IDEOGRAPH - 0x8E5B: 0x7E82, //CJK UNIFIED IDEOGRAPH - 0x8E5C: 0x8695, //CJK UNIFIED IDEOGRAPH - 0x8E5D: 0x8B83, //CJK UNIFIED IDEOGRAPH - 0x8E5E: 0x8CDB, //CJK UNIFIED IDEOGRAPH - 0x8E5F: 0x9178, //CJK UNIFIED IDEOGRAPH - 0x8E60: 0x9910, //CJK UNIFIED IDEOGRAPH - 0x8E61: 0x65AC, //CJK UNIFIED IDEOGRAPH - 0x8E62: 0x66AB, //CJK UNIFIED IDEOGRAPH - 0x8E63: 0x6B8B, //CJK UNIFIED IDEOGRAPH - 0x8E64: 0x4ED5, //CJK UNIFIED IDEOGRAPH - 0x8E65: 0x4ED4, //CJK UNIFIED IDEOGRAPH - 0x8E66: 0x4F3A, //CJK UNIFIED IDEOGRAPH - 0x8E67: 0x4F7F, //CJK UNIFIED IDEOGRAPH - 0x8E68: 0x523A, //CJK UNIFIED IDEOGRAPH - 0x8E69: 0x53F8, //CJK UNIFIED IDEOGRAPH - 0x8E6A: 0x53F2, //CJK UNIFIED IDEOGRAPH - 0x8E6B: 0x55E3, //CJK UNIFIED IDEOGRAPH - 0x8E6C: 0x56DB, //CJK UNIFIED IDEOGRAPH - 0x8E6D: 0x58EB, //CJK UNIFIED IDEOGRAPH - 0x8E6E: 0x59CB, //CJK UNIFIED IDEOGRAPH - 0x8E6F: 0x59C9, //CJK UNIFIED IDEOGRAPH - 0x8E70: 0x59FF, //CJK UNIFIED IDEOGRAPH - 0x8E71: 0x5B50, //CJK UNIFIED IDEOGRAPH - 0x8E72: 0x5C4D, //CJK UNIFIED IDEOGRAPH - 0x8E73: 0x5E02, //CJK UNIFIED IDEOGRAPH - 0x8E74: 0x5E2B, //CJK UNIFIED IDEOGRAPH - 0x8E75: 0x5FD7, //CJK UNIFIED IDEOGRAPH - 0x8E76: 0x601D, //CJK UNIFIED IDEOGRAPH - 0x8E77: 0x6307, //CJK UNIFIED IDEOGRAPH - 0x8E78: 0x652F, //CJK UNIFIED IDEOGRAPH - 0x8E79: 0x5B5C, //CJK UNIFIED IDEOGRAPH - 0x8E7A: 0x65AF, //CJK UNIFIED IDEOGRAPH - 0x8E7B: 0x65BD, //CJK UNIFIED IDEOGRAPH - 0x8E7C: 0x65E8, //CJK UNIFIED IDEOGRAPH - 0x8E7D: 0x679D, //CJK UNIFIED IDEOGRAPH - 0x8E7E: 0x6B62, //CJK UNIFIED IDEOGRAPH - 0x8E80: 0x6B7B, //CJK UNIFIED IDEOGRAPH - 0x8E81: 0x6C0F, //CJK UNIFIED IDEOGRAPH - 0x8E82: 0x7345, //CJK UNIFIED IDEOGRAPH - 0x8E83: 0x7949, //CJK UNIFIED IDEOGRAPH - 0x8E84: 0x79C1, //CJK UNIFIED IDEOGRAPH - 0x8E85: 0x7CF8, //CJK UNIFIED IDEOGRAPH - 0x8E86: 0x7D19, //CJK UNIFIED IDEOGRAPH - 0x8E87: 0x7D2B, //CJK UNIFIED IDEOGRAPH - 0x8E88: 0x80A2, //CJK UNIFIED IDEOGRAPH - 0x8E89: 0x8102, //CJK UNIFIED IDEOGRAPH - 0x8E8A: 0x81F3, //CJK UNIFIED IDEOGRAPH - 0x8E8B: 0x8996, //CJK UNIFIED IDEOGRAPH - 0x8E8C: 0x8A5E, //CJK UNIFIED IDEOGRAPH - 0x8E8D: 0x8A69, //CJK UNIFIED IDEOGRAPH - 0x8E8E: 0x8A66, //CJK UNIFIED IDEOGRAPH - 0x8E8F: 0x8A8C, //CJK UNIFIED IDEOGRAPH - 0x8E90: 0x8AEE, //CJK UNIFIED IDEOGRAPH - 0x8E91: 0x8CC7, //CJK UNIFIED IDEOGRAPH - 0x8E92: 0x8CDC, //CJK UNIFIED IDEOGRAPH - 0x8E93: 0x96CC, //CJK UNIFIED IDEOGRAPH - 0x8E94: 0x98FC, //CJK UNIFIED IDEOGRAPH - 0x8E95: 0x6B6F, //CJK UNIFIED IDEOGRAPH - 0x8E96: 0x4E8B, //CJK UNIFIED IDEOGRAPH - 0x8E97: 0x4F3C, //CJK UNIFIED IDEOGRAPH - 0x8E98: 0x4F8D, //CJK UNIFIED IDEOGRAPH - 0x8E99: 0x5150, //CJK UNIFIED IDEOGRAPH - 0x8E9A: 0x5B57, //CJK UNIFIED IDEOGRAPH - 0x8E9B: 0x5BFA, //CJK UNIFIED IDEOGRAPH - 0x8E9C: 0x6148, //CJK UNIFIED IDEOGRAPH - 0x8E9D: 0x6301, //CJK UNIFIED IDEOGRAPH - 0x8E9E: 0x6642, //CJK UNIFIED IDEOGRAPH - 0x8E9F: 0x6B21, //CJK UNIFIED IDEOGRAPH - 0x8EA0: 0x6ECB, //CJK UNIFIED IDEOGRAPH - 0x8EA1: 0x6CBB, //CJK UNIFIED IDEOGRAPH - 0x8EA2: 0x723E, //CJK UNIFIED IDEOGRAPH - 0x8EA3: 0x74BD, //CJK UNIFIED IDEOGRAPH - 0x8EA4: 0x75D4, //CJK UNIFIED IDEOGRAPH - 0x8EA5: 0x78C1, //CJK UNIFIED IDEOGRAPH - 0x8EA6: 0x793A, //CJK UNIFIED IDEOGRAPH - 0x8EA7: 0x800C, //CJK UNIFIED IDEOGRAPH - 0x8EA8: 0x8033, //CJK UNIFIED IDEOGRAPH - 0x8EA9: 0x81EA, //CJK UNIFIED IDEOGRAPH - 0x8EAA: 0x8494, //CJK UNIFIED IDEOGRAPH - 0x8EAB: 0x8F9E, //CJK UNIFIED IDEOGRAPH - 0x8EAC: 0x6C50, //CJK UNIFIED IDEOGRAPH - 0x8EAD: 0x9E7F, //CJK UNIFIED IDEOGRAPH - 0x8EAE: 0x5F0F, //CJK UNIFIED IDEOGRAPH - 0x8EAF: 0x8B58, //CJK UNIFIED IDEOGRAPH - 0x8EB0: 0x9D2B, //CJK UNIFIED IDEOGRAPH - 0x8EB1: 0x7AFA, //CJK UNIFIED IDEOGRAPH - 0x8EB2: 0x8EF8, //CJK UNIFIED IDEOGRAPH - 0x8EB3: 0x5B8D, //CJK UNIFIED IDEOGRAPH - 0x8EB4: 0x96EB, //CJK UNIFIED IDEOGRAPH - 0x8EB5: 0x4E03, //CJK UNIFIED IDEOGRAPH - 0x8EB6: 0x53F1, //CJK UNIFIED IDEOGRAPH - 0x8EB7: 0x57F7, //CJK UNIFIED IDEOGRAPH - 0x8EB8: 0x5931, //CJK UNIFIED IDEOGRAPH - 0x8EB9: 0x5AC9, //CJK UNIFIED IDEOGRAPH - 0x8EBA: 0x5BA4, //CJK UNIFIED IDEOGRAPH - 0x8EBB: 0x6089, //CJK UNIFIED IDEOGRAPH - 0x8EBC: 0x6E7F, //CJK UNIFIED IDEOGRAPH - 0x8EBD: 0x6F06, //CJK UNIFIED IDEOGRAPH - 0x8EBE: 0x75BE, //CJK UNIFIED IDEOGRAPH - 0x8EBF: 0x8CEA, //CJK UNIFIED IDEOGRAPH - 0x8EC0: 0x5B9F, //CJK UNIFIED IDEOGRAPH - 0x8EC1: 0x8500, //CJK UNIFIED IDEOGRAPH - 0x8EC2: 0x7BE0, //CJK UNIFIED IDEOGRAPH - 0x8EC3: 0x5072, //CJK UNIFIED IDEOGRAPH - 0x8EC4: 0x67F4, //CJK UNIFIED IDEOGRAPH - 0x8EC5: 0x829D, //CJK UNIFIED IDEOGRAPH - 0x8EC6: 0x5C61, //CJK UNIFIED IDEOGRAPH - 0x8EC7: 0x854A, //CJK UNIFIED IDEOGRAPH - 0x8EC8: 0x7E1E, //CJK UNIFIED IDEOGRAPH - 0x8EC9: 0x820E, //CJK UNIFIED IDEOGRAPH - 0x8ECA: 0x5199, //CJK UNIFIED IDEOGRAPH - 0x8ECB: 0x5C04, //CJK UNIFIED IDEOGRAPH - 0x8ECC: 0x6368, //CJK UNIFIED IDEOGRAPH - 0x8ECD: 0x8D66, //CJK UNIFIED IDEOGRAPH - 0x8ECE: 0x659C, //CJK UNIFIED IDEOGRAPH - 0x8ECF: 0x716E, //CJK UNIFIED IDEOGRAPH - 0x8ED0: 0x793E, //CJK UNIFIED IDEOGRAPH - 0x8ED1: 0x7D17, //CJK UNIFIED IDEOGRAPH - 0x8ED2: 0x8005, //CJK UNIFIED IDEOGRAPH - 0x8ED3: 0x8B1D, //CJK UNIFIED IDEOGRAPH - 0x8ED4: 0x8ECA, //CJK UNIFIED IDEOGRAPH - 0x8ED5: 0x906E, //CJK UNIFIED IDEOGRAPH - 0x8ED6: 0x86C7, //CJK UNIFIED IDEOGRAPH - 0x8ED7: 0x90AA, //CJK UNIFIED IDEOGRAPH - 0x8ED8: 0x501F, //CJK UNIFIED IDEOGRAPH - 0x8ED9: 0x52FA, //CJK UNIFIED IDEOGRAPH - 0x8EDA: 0x5C3A, //CJK UNIFIED IDEOGRAPH - 0x8EDB: 0x6753, //CJK UNIFIED IDEOGRAPH - 0x8EDC: 0x707C, //CJK UNIFIED IDEOGRAPH - 0x8EDD: 0x7235, //CJK UNIFIED IDEOGRAPH - 0x8EDE: 0x914C, //CJK UNIFIED IDEOGRAPH - 0x8EDF: 0x91C8, //CJK UNIFIED IDEOGRAPH - 0x8EE0: 0x932B, //CJK UNIFIED IDEOGRAPH - 0x8EE1: 0x82E5, //CJK UNIFIED IDEOGRAPH - 0x8EE2: 0x5BC2, //CJK UNIFIED IDEOGRAPH - 0x8EE3: 0x5F31, //CJK UNIFIED IDEOGRAPH - 0x8EE4: 0x60F9, //CJK UNIFIED IDEOGRAPH - 0x8EE5: 0x4E3B, //CJK UNIFIED IDEOGRAPH - 0x8EE6: 0x53D6, //CJK UNIFIED IDEOGRAPH - 0x8EE7: 0x5B88, //CJK UNIFIED IDEOGRAPH - 0x8EE8: 0x624B, //CJK UNIFIED IDEOGRAPH - 0x8EE9: 0x6731, //CJK UNIFIED IDEOGRAPH - 0x8EEA: 0x6B8A, //CJK UNIFIED IDEOGRAPH - 0x8EEB: 0x72E9, //CJK UNIFIED IDEOGRAPH - 0x8EEC: 0x73E0, //CJK UNIFIED IDEOGRAPH - 0x8EED: 0x7A2E, //CJK UNIFIED IDEOGRAPH - 0x8EEE: 0x816B, //CJK UNIFIED IDEOGRAPH - 0x8EEF: 0x8DA3, //CJK UNIFIED IDEOGRAPH - 0x8EF0: 0x9152, //CJK UNIFIED IDEOGRAPH - 0x8EF1: 0x9996, //CJK UNIFIED IDEOGRAPH - 0x8EF2: 0x5112, //CJK UNIFIED IDEOGRAPH - 0x8EF3: 0x53D7, //CJK UNIFIED IDEOGRAPH - 0x8EF4: 0x546A, //CJK UNIFIED IDEOGRAPH - 0x8EF5: 0x5BFF, //CJK UNIFIED IDEOGRAPH - 0x8EF6: 0x6388, //CJK UNIFIED IDEOGRAPH - 0x8EF7: 0x6A39, //CJK UNIFIED IDEOGRAPH - 0x8EF8: 0x7DAC, //CJK UNIFIED IDEOGRAPH - 0x8EF9: 0x9700, //CJK UNIFIED IDEOGRAPH - 0x8EFA: 0x56DA, //CJK UNIFIED IDEOGRAPH - 0x8EFB: 0x53CE, //CJK UNIFIED IDEOGRAPH - 0x8EFC: 0x5468, //CJK UNIFIED IDEOGRAPH - 0x8F40: 0x5B97, //CJK UNIFIED IDEOGRAPH - 0x8F41: 0x5C31, //CJK UNIFIED IDEOGRAPH - 0x8F42: 0x5DDE, //CJK UNIFIED IDEOGRAPH - 0x8F43: 0x4FEE, //CJK UNIFIED IDEOGRAPH - 0x8F44: 0x6101, //CJK UNIFIED IDEOGRAPH - 0x8F45: 0x62FE, //CJK UNIFIED IDEOGRAPH - 0x8F46: 0x6D32, //CJK UNIFIED IDEOGRAPH - 0x8F47: 0x79C0, //CJK UNIFIED IDEOGRAPH - 0x8F48: 0x79CB, //CJK UNIFIED IDEOGRAPH - 0x8F49: 0x7D42, //CJK UNIFIED IDEOGRAPH - 0x8F4A: 0x7E4D, //CJK UNIFIED IDEOGRAPH - 0x8F4B: 0x7FD2, //CJK UNIFIED IDEOGRAPH - 0x8F4C: 0x81ED, //CJK UNIFIED IDEOGRAPH - 0x8F4D: 0x821F, //CJK UNIFIED IDEOGRAPH - 0x8F4E: 0x8490, //CJK UNIFIED IDEOGRAPH - 0x8F4F: 0x8846, //CJK UNIFIED IDEOGRAPH - 0x8F50: 0x8972, //CJK UNIFIED IDEOGRAPH - 0x8F51: 0x8B90, //CJK UNIFIED IDEOGRAPH - 0x8F52: 0x8E74, //CJK UNIFIED IDEOGRAPH - 0x8F53: 0x8F2F, //CJK UNIFIED IDEOGRAPH - 0x8F54: 0x9031, //CJK UNIFIED IDEOGRAPH - 0x8F55: 0x914B, //CJK UNIFIED IDEOGRAPH - 0x8F56: 0x916C, //CJK UNIFIED IDEOGRAPH - 0x8F57: 0x96C6, //CJK UNIFIED IDEOGRAPH - 0x8F58: 0x919C, //CJK UNIFIED IDEOGRAPH - 0x8F59: 0x4EC0, //CJK UNIFIED IDEOGRAPH - 0x8F5A: 0x4F4F, //CJK UNIFIED IDEOGRAPH - 0x8F5B: 0x5145, //CJK UNIFIED IDEOGRAPH - 0x8F5C: 0x5341, //CJK UNIFIED IDEOGRAPH - 0x8F5D: 0x5F93, //CJK UNIFIED IDEOGRAPH - 0x8F5E: 0x620E, //CJK UNIFIED IDEOGRAPH - 0x8F5F: 0x67D4, //CJK UNIFIED IDEOGRAPH - 0x8F60: 0x6C41, //CJK UNIFIED IDEOGRAPH - 0x8F61: 0x6E0B, //CJK UNIFIED IDEOGRAPH - 0x8F62: 0x7363, //CJK UNIFIED IDEOGRAPH - 0x8F63: 0x7E26, //CJK UNIFIED IDEOGRAPH - 0x8F64: 0x91CD, //CJK UNIFIED IDEOGRAPH - 0x8F65: 0x9283, //CJK UNIFIED IDEOGRAPH - 0x8F66: 0x53D4, //CJK UNIFIED IDEOGRAPH - 0x8F67: 0x5919, //CJK UNIFIED IDEOGRAPH - 0x8F68: 0x5BBF, //CJK UNIFIED IDEOGRAPH - 0x8F69: 0x6DD1, //CJK UNIFIED IDEOGRAPH - 0x8F6A: 0x795D, //CJK UNIFIED IDEOGRAPH - 0x8F6B: 0x7E2E, //CJK UNIFIED IDEOGRAPH - 0x8F6C: 0x7C9B, //CJK UNIFIED IDEOGRAPH - 0x8F6D: 0x587E, //CJK UNIFIED IDEOGRAPH - 0x8F6E: 0x719F, //CJK UNIFIED IDEOGRAPH - 0x8F6F: 0x51FA, //CJK UNIFIED IDEOGRAPH - 0x8F70: 0x8853, //CJK UNIFIED IDEOGRAPH - 0x8F71: 0x8FF0, //CJK UNIFIED IDEOGRAPH - 0x8F72: 0x4FCA, //CJK UNIFIED IDEOGRAPH - 0x8F73: 0x5CFB, //CJK UNIFIED IDEOGRAPH - 0x8F74: 0x6625, //CJK UNIFIED IDEOGRAPH - 0x8F75: 0x77AC, //CJK UNIFIED IDEOGRAPH - 0x8F76: 0x7AE3, //CJK UNIFIED IDEOGRAPH - 0x8F77: 0x821C, //CJK UNIFIED IDEOGRAPH - 0x8F78: 0x99FF, //CJK UNIFIED IDEOGRAPH - 0x8F79: 0x51C6, //CJK UNIFIED IDEOGRAPH - 0x8F7A: 0x5FAA, //CJK UNIFIED IDEOGRAPH - 0x8F7B: 0x65EC, //CJK UNIFIED IDEOGRAPH - 0x8F7C: 0x696F, //CJK UNIFIED IDEOGRAPH - 0x8F7D: 0x6B89, //CJK UNIFIED IDEOGRAPH - 0x8F7E: 0x6DF3, //CJK UNIFIED IDEOGRAPH - 0x8F80: 0x6E96, //CJK UNIFIED IDEOGRAPH - 0x8F81: 0x6F64, //CJK UNIFIED IDEOGRAPH - 0x8F82: 0x76FE, //CJK UNIFIED IDEOGRAPH - 0x8F83: 0x7D14, //CJK UNIFIED IDEOGRAPH - 0x8F84: 0x5DE1, //CJK UNIFIED IDEOGRAPH - 0x8F85: 0x9075, //CJK UNIFIED IDEOGRAPH - 0x8F86: 0x9187, //CJK UNIFIED IDEOGRAPH - 0x8F87: 0x9806, //CJK UNIFIED IDEOGRAPH - 0x8F88: 0x51E6, //CJK UNIFIED IDEOGRAPH - 0x8F89: 0x521D, //CJK UNIFIED IDEOGRAPH - 0x8F8A: 0x6240, //CJK UNIFIED IDEOGRAPH - 0x8F8B: 0x6691, //CJK UNIFIED IDEOGRAPH - 0x8F8C: 0x66D9, //CJK UNIFIED IDEOGRAPH - 0x8F8D: 0x6E1A, //CJK UNIFIED IDEOGRAPH - 0x8F8E: 0x5EB6, //CJK UNIFIED IDEOGRAPH - 0x8F8F: 0x7DD2, //CJK UNIFIED IDEOGRAPH - 0x8F90: 0x7F72, //CJK UNIFIED IDEOGRAPH - 0x8F91: 0x66F8, //CJK UNIFIED IDEOGRAPH - 0x8F92: 0x85AF, //CJK UNIFIED IDEOGRAPH - 0x8F93: 0x85F7, //CJK UNIFIED IDEOGRAPH - 0x8F94: 0x8AF8, //CJK UNIFIED IDEOGRAPH - 0x8F95: 0x52A9, //CJK UNIFIED IDEOGRAPH - 0x8F96: 0x53D9, //CJK UNIFIED IDEOGRAPH - 0x8F97: 0x5973, //CJK UNIFIED IDEOGRAPH - 0x8F98: 0x5E8F, //CJK UNIFIED IDEOGRAPH - 0x8F99: 0x5F90, //CJK UNIFIED IDEOGRAPH - 0x8F9A: 0x6055, //CJK UNIFIED IDEOGRAPH - 0x8F9B: 0x92E4, //CJK UNIFIED IDEOGRAPH - 0x8F9C: 0x9664, //CJK UNIFIED IDEOGRAPH - 0x8F9D: 0x50B7, //CJK UNIFIED IDEOGRAPH - 0x8F9E: 0x511F, //CJK UNIFIED IDEOGRAPH - 0x8F9F: 0x52DD, //CJK UNIFIED IDEOGRAPH - 0x8FA0: 0x5320, //CJK UNIFIED IDEOGRAPH - 0x8FA1: 0x5347, //CJK UNIFIED IDEOGRAPH - 0x8FA2: 0x53EC, //CJK UNIFIED IDEOGRAPH - 0x8FA3: 0x54E8, //CJK UNIFIED IDEOGRAPH - 0x8FA4: 0x5546, //CJK UNIFIED IDEOGRAPH - 0x8FA5: 0x5531, //CJK UNIFIED IDEOGRAPH - 0x8FA6: 0x5617, //CJK UNIFIED IDEOGRAPH - 0x8FA7: 0x5968, //CJK UNIFIED IDEOGRAPH - 0x8FA8: 0x59BE, //CJK UNIFIED IDEOGRAPH - 0x8FA9: 0x5A3C, //CJK UNIFIED IDEOGRAPH - 0x8FAA: 0x5BB5, //CJK UNIFIED IDEOGRAPH - 0x8FAB: 0x5C06, //CJK UNIFIED IDEOGRAPH - 0x8FAC: 0x5C0F, //CJK UNIFIED IDEOGRAPH - 0x8FAD: 0x5C11, //CJK UNIFIED IDEOGRAPH - 0x8FAE: 0x5C1A, //CJK UNIFIED IDEOGRAPH - 0x8FAF: 0x5E84, //CJK UNIFIED IDEOGRAPH - 0x8FB0: 0x5E8A, //CJK UNIFIED IDEOGRAPH - 0x8FB1: 0x5EE0, //CJK UNIFIED IDEOGRAPH - 0x8FB2: 0x5F70, //CJK UNIFIED IDEOGRAPH - 0x8FB3: 0x627F, //CJK UNIFIED IDEOGRAPH - 0x8FB4: 0x6284, //CJK UNIFIED IDEOGRAPH - 0x8FB5: 0x62DB, //CJK UNIFIED IDEOGRAPH - 0x8FB6: 0x638C, //CJK UNIFIED IDEOGRAPH - 0x8FB7: 0x6377, //CJK UNIFIED IDEOGRAPH - 0x8FB8: 0x6607, //CJK UNIFIED IDEOGRAPH - 0x8FB9: 0x660C, //CJK UNIFIED IDEOGRAPH - 0x8FBA: 0x662D, //CJK UNIFIED IDEOGRAPH - 0x8FBB: 0x6676, //CJK UNIFIED IDEOGRAPH - 0x8FBC: 0x677E, //CJK UNIFIED IDEOGRAPH - 0x8FBD: 0x68A2, //CJK UNIFIED IDEOGRAPH - 0x8FBE: 0x6A1F, //CJK UNIFIED IDEOGRAPH - 0x8FBF: 0x6A35, //CJK UNIFIED IDEOGRAPH - 0x8FC0: 0x6CBC, //CJK UNIFIED IDEOGRAPH - 0x8FC1: 0x6D88, //CJK UNIFIED IDEOGRAPH - 0x8FC2: 0x6E09, //CJK UNIFIED IDEOGRAPH - 0x8FC3: 0x6E58, //CJK UNIFIED IDEOGRAPH - 0x8FC4: 0x713C, //CJK UNIFIED IDEOGRAPH - 0x8FC5: 0x7126, //CJK UNIFIED IDEOGRAPH - 0x8FC6: 0x7167, //CJK UNIFIED IDEOGRAPH - 0x8FC7: 0x75C7, //CJK UNIFIED IDEOGRAPH - 0x8FC8: 0x7701, //CJK UNIFIED IDEOGRAPH - 0x8FC9: 0x785D, //CJK UNIFIED IDEOGRAPH - 0x8FCA: 0x7901, //CJK UNIFIED IDEOGRAPH - 0x8FCB: 0x7965, //CJK UNIFIED IDEOGRAPH - 0x8FCC: 0x79F0, //CJK UNIFIED IDEOGRAPH - 0x8FCD: 0x7AE0, //CJK UNIFIED IDEOGRAPH - 0x8FCE: 0x7B11, //CJK UNIFIED IDEOGRAPH - 0x8FCF: 0x7CA7, //CJK UNIFIED IDEOGRAPH - 0x8FD0: 0x7D39, //CJK UNIFIED IDEOGRAPH - 0x8FD1: 0x8096, //CJK UNIFIED IDEOGRAPH - 0x8FD2: 0x83D6, //CJK UNIFIED IDEOGRAPH - 0x8FD3: 0x848B, //CJK UNIFIED IDEOGRAPH - 0x8FD4: 0x8549, //CJK UNIFIED IDEOGRAPH - 0x8FD5: 0x885D, //CJK UNIFIED IDEOGRAPH - 0x8FD6: 0x88F3, //CJK UNIFIED IDEOGRAPH - 0x8FD7: 0x8A1F, //CJK UNIFIED IDEOGRAPH - 0x8FD8: 0x8A3C, //CJK UNIFIED IDEOGRAPH - 0x8FD9: 0x8A54, //CJK UNIFIED IDEOGRAPH - 0x8FDA: 0x8A73, //CJK UNIFIED IDEOGRAPH - 0x8FDB: 0x8C61, //CJK UNIFIED IDEOGRAPH - 0x8FDC: 0x8CDE, //CJK UNIFIED IDEOGRAPH - 0x8FDD: 0x91A4, //CJK UNIFIED IDEOGRAPH - 0x8FDE: 0x9266, //CJK UNIFIED IDEOGRAPH - 0x8FDF: 0x937E, //CJK UNIFIED IDEOGRAPH - 0x8FE0: 0x9418, //CJK UNIFIED IDEOGRAPH - 0x8FE1: 0x969C, //CJK UNIFIED IDEOGRAPH - 0x8FE2: 0x9798, //CJK UNIFIED IDEOGRAPH - 0x8FE3: 0x4E0A, //CJK UNIFIED IDEOGRAPH - 0x8FE4: 0x4E08, //CJK UNIFIED IDEOGRAPH - 0x8FE5: 0x4E1E, //CJK UNIFIED IDEOGRAPH - 0x8FE6: 0x4E57, //CJK UNIFIED IDEOGRAPH - 0x8FE7: 0x5197, //CJK UNIFIED IDEOGRAPH - 0x8FE8: 0x5270, //CJK UNIFIED IDEOGRAPH - 0x8FE9: 0x57CE, //CJK UNIFIED IDEOGRAPH - 0x8FEA: 0x5834, //CJK UNIFIED IDEOGRAPH - 0x8FEB: 0x58CC, //CJK UNIFIED IDEOGRAPH - 0x8FEC: 0x5B22, //CJK UNIFIED IDEOGRAPH - 0x8FED: 0x5E38, //CJK UNIFIED IDEOGRAPH - 0x8FEE: 0x60C5, //CJK UNIFIED IDEOGRAPH - 0x8FEF: 0x64FE, //CJK UNIFIED IDEOGRAPH - 0x8FF0: 0x6761, //CJK UNIFIED IDEOGRAPH - 0x8FF1: 0x6756, //CJK UNIFIED IDEOGRAPH - 0x8FF2: 0x6D44, //CJK UNIFIED IDEOGRAPH - 0x8FF3: 0x72B6, //CJK UNIFIED IDEOGRAPH - 0x8FF4: 0x7573, //CJK UNIFIED IDEOGRAPH - 0x8FF5: 0x7A63, //CJK UNIFIED IDEOGRAPH - 0x8FF6: 0x84B8, //CJK UNIFIED IDEOGRAPH - 0x8FF7: 0x8B72, //CJK UNIFIED IDEOGRAPH - 0x8FF8: 0x91B8, //CJK UNIFIED IDEOGRAPH - 0x8FF9: 0x9320, //CJK UNIFIED IDEOGRAPH - 0x8FFA: 0x5631, //CJK UNIFIED IDEOGRAPH - 0x8FFB: 0x57F4, //CJK UNIFIED IDEOGRAPH - 0x8FFC: 0x98FE, //CJK UNIFIED IDEOGRAPH - 0x9040: 0x62ED, //CJK UNIFIED IDEOGRAPH - 0x9041: 0x690D, //CJK UNIFIED IDEOGRAPH - 0x9042: 0x6B96, //CJK UNIFIED IDEOGRAPH - 0x9043: 0x71ED, //CJK UNIFIED IDEOGRAPH - 0x9044: 0x7E54, //CJK UNIFIED IDEOGRAPH - 0x9045: 0x8077, //CJK UNIFIED IDEOGRAPH - 0x9046: 0x8272, //CJK UNIFIED IDEOGRAPH - 0x9047: 0x89E6, //CJK UNIFIED IDEOGRAPH - 0x9048: 0x98DF, //CJK UNIFIED IDEOGRAPH - 0x9049: 0x8755, //CJK UNIFIED IDEOGRAPH - 0x904A: 0x8FB1, //CJK UNIFIED IDEOGRAPH - 0x904B: 0x5C3B, //CJK UNIFIED IDEOGRAPH - 0x904C: 0x4F38, //CJK UNIFIED IDEOGRAPH - 0x904D: 0x4FE1, //CJK UNIFIED IDEOGRAPH - 0x904E: 0x4FB5, //CJK UNIFIED IDEOGRAPH - 0x904F: 0x5507, //CJK UNIFIED IDEOGRAPH - 0x9050: 0x5A20, //CJK UNIFIED IDEOGRAPH - 0x9051: 0x5BDD, //CJK UNIFIED IDEOGRAPH - 0x9052: 0x5BE9, //CJK UNIFIED IDEOGRAPH - 0x9053: 0x5FC3, //CJK UNIFIED IDEOGRAPH - 0x9054: 0x614E, //CJK UNIFIED IDEOGRAPH - 0x9055: 0x632F, //CJK UNIFIED IDEOGRAPH - 0x9056: 0x65B0, //CJK UNIFIED IDEOGRAPH - 0x9057: 0x664B, //CJK UNIFIED IDEOGRAPH - 0x9058: 0x68EE, //CJK UNIFIED IDEOGRAPH - 0x9059: 0x699B, //CJK UNIFIED IDEOGRAPH - 0x905A: 0x6D78, //CJK UNIFIED IDEOGRAPH - 0x905B: 0x6DF1, //CJK UNIFIED IDEOGRAPH - 0x905C: 0x7533, //CJK UNIFIED IDEOGRAPH - 0x905D: 0x75B9, //CJK UNIFIED IDEOGRAPH - 0x905E: 0x771F, //CJK UNIFIED IDEOGRAPH - 0x905F: 0x795E, //CJK UNIFIED IDEOGRAPH - 0x9060: 0x79E6, //CJK UNIFIED IDEOGRAPH - 0x9061: 0x7D33, //CJK UNIFIED IDEOGRAPH - 0x9062: 0x81E3, //CJK UNIFIED IDEOGRAPH - 0x9063: 0x82AF, //CJK UNIFIED IDEOGRAPH - 0x9064: 0x85AA, //CJK UNIFIED IDEOGRAPH - 0x9065: 0x89AA, //CJK UNIFIED IDEOGRAPH - 0x9066: 0x8A3A, //CJK UNIFIED IDEOGRAPH - 0x9067: 0x8EAB, //CJK UNIFIED IDEOGRAPH - 0x9068: 0x8F9B, //CJK UNIFIED IDEOGRAPH - 0x9069: 0x9032, //CJK UNIFIED IDEOGRAPH - 0x906A: 0x91DD, //CJK UNIFIED IDEOGRAPH - 0x906B: 0x9707, //CJK UNIFIED IDEOGRAPH - 0x906C: 0x4EBA, //CJK UNIFIED IDEOGRAPH - 0x906D: 0x4EC1, //CJK UNIFIED IDEOGRAPH - 0x906E: 0x5203, //CJK UNIFIED IDEOGRAPH - 0x906F: 0x5875, //CJK UNIFIED IDEOGRAPH - 0x9070: 0x58EC, //CJK UNIFIED IDEOGRAPH - 0x9071: 0x5C0B, //CJK UNIFIED IDEOGRAPH - 0x9072: 0x751A, //CJK UNIFIED IDEOGRAPH - 0x9073: 0x5C3D, //CJK UNIFIED IDEOGRAPH - 0x9074: 0x814E, //CJK UNIFIED IDEOGRAPH - 0x9075: 0x8A0A, //CJK UNIFIED IDEOGRAPH - 0x9076: 0x8FC5, //CJK UNIFIED IDEOGRAPH - 0x9077: 0x9663, //CJK UNIFIED IDEOGRAPH - 0x9078: 0x976D, //CJK UNIFIED IDEOGRAPH - 0x9079: 0x7B25, //CJK UNIFIED IDEOGRAPH - 0x907A: 0x8ACF, //CJK UNIFIED IDEOGRAPH - 0x907B: 0x9808, //CJK UNIFIED IDEOGRAPH - 0x907C: 0x9162, //CJK UNIFIED IDEOGRAPH - 0x907D: 0x56F3, //CJK UNIFIED IDEOGRAPH - 0x907E: 0x53A8, //CJK UNIFIED IDEOGRAPH - 0x9080: 0x9017, //CJK UNIFIED IDEOGRAPH - 0x9081: 0x5439, //CJK UNIFIED IDEOGRAPH - 0x9082: 0x5782, //CJK UNIFIED IDEOGRAPH - 0x9083: 0x5E25, //CJK UNIFIED IDEOGRAPH - 0x9084: 0x63A8, //CJK UNIFIED IDEOGRAPH - 0x9085: 0x6C34, //CJK UNIFIED IDEOGRAPH - 0x9086: 0x708A, //CJK UNIFIED IDEOGRAPH - 0x9087: 0x7761, //CJK UNIFIED IDEOGRAPH - 0x9088: 0x7C8B, //CJK UNIFIED IDEOGRAPH - 0x9089: 0x7FE0, //CJK UNIFIED IDEOGRAPH - 0x908A: 0x8870, //CJK UNIFIED IDEOGRAPH - 0x908B: 0x9042, //CJK UNIFIED IDEOGRAPH - 0x908C: 0x9154, //CJK UNIFIED IDEOGRAPH - 0x908D: 0x9310, //CJK UNIFIED IDEOGRAPH - 0x908E: 0x9318, //CJK UNIFIED IDEOGRAPH - 0x908F: 0x968F, //CJK UNIFIED IDEOGRAPH - 0x9090: 0x745E, //CJK UNIFIED IDEOGRAPH - 0x9091: 0x9AC4, //CJK UNIFIED IDEOGRAPH - 0x9092: 0x5D07, //CJK UNIFIED IDEOGRAPH - 0x9093: 0x5D69, //CJK UNIFIED IDEOGRAPH - 0x9094: 0x6570, //CJK UNIFIED IDEOGRAPH - 0x9095: 0x67A2, //CJK UNIFIED IDEOGRAPH - 0x9096: 0x8DA8, //CJK UNIFIED IDEOGRAPH - 0x9097: 0x96DB, //CJK UNIFIED IDEOGRAPH - 0x9098: 0x636E, //CJK UNIFIED IDEOGRAPH - 0x9099: 0x6749, //CJK UNIFIED IDEOGRAPH - 0x909A: 0x6919, //CJK UNIFIED IDEOGRAPH - 0x909B: 0x83C5, //CJK UNIFIED IDEOGRAPH - 0x909C: 0x9817, //CJK UNIFIED IDEOGRAPH - 0x909D: 0x96C0, //CJK UNIFIED IDEOGRAPH - 0x909E: 0x88FE, //CJK UNIFIED IDEOGRAPH - 0x909F: 0x6F84, //CJK UNIFIED IDEOGRAPH - 0x90A0: 0x647A, //CJK UNIFIED IDEOGRAPH - 0x90A1: 0x5BF8, //CJK UNIFIED IDEOGRAPH - 0x90A2: 0x4E16, //CJK UNIFIED IDEOGRAPH - 0x90A3: 0x702C, //CJK UNIFIED IDEOGRAPH - 0x90A4: 0x755D, //CJK UNIFIED IDEOGRAPH - 0x90A5: 0x662F, //CJK UNIFIED IDEOGRAPH - 0x90A6: 0x51C4, //CJK UNIFIED IDEOGRAPH - 0x90A7: 0x5236, //CJK UNIFIED IDEOGRAPH - 0x90A8: 0x52E2, //CJK UNIFIED IDEOGRAPH - 0x90A9: 0x59D3, //CJK UNIFIED IDEOGRAPH - 0x90AA: 0x5F81, //CJK UNIFIED IDEOGRAPH - 0x90AB: 0x6027, //CJK UNIFIED IDEOGRAPH - 0x90AC: 0x6210, //CJK UNIFIED IDEOGRAPH - 0x90AD: 0x653F, //CJK UNIFIED IDEOGRAPH - 0x90AE: 0x6574, //CJK UNIFIED IDEOGRAPH - 0x90AF: 0x661F, //CJK UNIFIED IDEOGRAPH - 0x90B0: 0x6674, //CJK UNIFIED IDEOGRAPH - 0x90B1: 0x68F2, //CJK UNIFIED IDEOGRAPH - 0x90B2: 0x6816, //CJK UNIFIED IDEOGRAPH - 0x90B3: 0x6B63, //CJK UNIFIED IDEOGRAPH - 0x90B4: 0x6E05, //CJK UNIFIED IDEOGRAPH - 0x90B5: 0x7272, //CJK UNIFIED IDEOGRAPH - 0x90B6: 0x751F, //CJK UNIFIED IDEOGRAPH - 0x90B7: 0x76DB, //CJK UNIFIED IDEOGRAPH - 0x90B8: 0x7CBE, //CJK UNIFIED IDEOGRAPH - 0x90B9: 0x8056, //CJK UNIFIED IDEOGRAPH - 0x90BA: 0x58F0, //CJK UNIFIED IDEOGRAPH - 0x90BB: 0x88FD, //CJK UNIFIED IDEOGRAPH - 0x90BC: 0x897F, //CJK UNIFIED IDEOGRAPH - 0x90BD: 0x8AA0, //CJK UNIFIED IDEOGRAPH - 0x90BE: 0x8A93, //CJK UNIFIED IDEOGRAPH - 0x90BF: 0x8ACB, //CJK UNIFIED IDEOGRAPH - 0x90C0: 0x901D, //CJK UNIFIED IDEOGRAPH - 0x90C1: 0x9192, //CJK UNIFIED IDEOGRAPH - 0x90C2: 0x9752, //CJK UNIFIED IDEOGRAPH - 0x90C3: 0x9759, //CJK UNIFIED IDEOGRAPH - 0x90C4: 0x6589, //CJK UNIFIED IDEOGRAPH - 0x90C5: 0x7A0E, //CJK UNIFIED IDEOGRAPH - 0x90C6: 0x8106, //CJK UNIFIED IDEOGRAPH - 0x90C7: 0x96BB, //CJK UNIFIED IDEOGRAPH - 0x90C8: 0x5E2D, //CJK UNIFIED IDEOGRAPH - 0x90C9: 0x60DC, //CJK UNIFIED IDEOGRAPH - 0x90CA: 0x621A, //CJK UNIFIED IDEOGRAPH - 0x90CB: 0x65A5, //CJK UNIFIED IDEOGRAPH - 0x90CC: 0x6614, //CJK UNIFIED IDEOGRAPH - 0x90CD: 0x6790, //CJK UNIFIED IDEOGRAPH - 0x90CE: 0x77F3, //CJK UNIFIED IDEOGRAPH - 0x90CF: 0x7A4D, //CJK UNIFIED IDEOGRAPH - 0x90D0: 0x7C4D, //CJK UNIFIED IDEOGRAPH - 0x90D1: 0x7E3E, //CJK UNIFIED IDEOGRAPH - 0x90D2: 0x810A, //CJK UNIFIED IDEOGRAPH - 0x90D3: 0x8CAC, //CJK UNIFIED IDEOGRAPH - 0x90D4: 0x8D64, //CJK UNIFIED IDEOGRAPH - 0x90D5: 0x8DE1, //CJK UNIFIED IDEOGRAPH - 0x90D6: 0x8E5F, //CJK UNIFIED IDEOGRAPH - 0x90D7: 0x78A9, //CJK UNIFIED IDEOGRAPH - 0x90D8: 0x5207, //CJK UNIFIED IDEOGRAPH - 0x90D9: 0x62D9, //CJK UNIFIED IDEOGRAPH - 0x90DA: 0x63A5, //CJK UNIFIED IDEOGRAPH - 0x90DB: 0x6442, //CJK UNIFIED IDEOGRAPH - 0x90DC: 0x6298, //CJK UNIFIED IDEOGRAPH - 0x90DD: 0x8A2D, //CJK UNIFIED IDEOGRAPH - 0x90DE: 0x7A83, //CJK UNIFIED IDEOGRAPH - 0x90DF: 0x7BC0, //CJK UNIFIED IDEOGRAPH - 0x90E0: 0x8AAC, //CJK UNIFIED IDEOGRAPH - 0x90E1: 0x96EA, //CJK UNIFIED IDEOGRAPH - 0x90E2: 0x7D76, //CJK UNIFIED IDEOGRAPH - 0x90E3: 0x820C, //CJK UNIFIED IDEOGRAPH - 0x90E4: 0x8749, //CJK UNIFIED IDEOGRAPH - 0x90E5: 0x4ED9, //CJK UNIFIED IDEOGRAPH - 0x90E6: 0x5148, //CJK UNIFIED IDEOGRAPH - 0x90E7: 0x5343, //CJK UNIFIED IDEOGRAPH - 0x90E8: 0x5360, //CJK UNIFIED IDEOGRAPH - 0x90E9: 0x5BA3, //CJK UNIFIED IDEOGRAPH - 0x90EA: 0x5C02, //CJK UNIFIED IDEOGRAPH - 0x90EB: 0x5C16, //CJK UNIFIED IDEOGRAPH - 0x90EC: 0x5DDD, //CJK UNIFIED IDEOGRAPH - 0x90ED: 0x6226, //CJK UNIFIED IDEOGRAPH - 0x90EE: 0x6247, //CJK UNIFIED IDEOGRAPH - 0x90EF: 0x64B0, //CJK UNIFIED IDEOGRAPH - 0x90F0: 0x6813, //CJK UNIFIED IDEOGRAPH - 0x90F1: 0x6834, //CJK UNIFIED IDEOGRAPH - 0x90F2: 0x6CC9, //CJK UNIFIED IDEOGRAPH - 0x90F3: 0x6D45, //CJK UNIFIED IDEOGRAPH - 0x90F4: 0x6D17, //CJK UNIFIED IDEOGRAPH - 0x90F5: 0x67D3, //CJK UNIFIED IDEOGRAPH - 0x90F6: 0x6F5C, //CJK UNIFIED IDEOGRAPH - 0x90F7: 0x714E, //CJK UNIFIED IDEOGRAPH - 0x90F8: 0x717D, //CJK UNIFIED IDEOGRAPH - 0x90F9: 0x65CB, //CJK UNIFIED IDEOGRAPH - 0x90FA: 0x7A7F, //CJK UNIFIED IDEOGRAPH - 0x90FB: 0x7BAD, //CJK UNIFIED IDEOGRAPH - 0x90FC: 0x7DDA, //CJK UNIFIED IDEOGRAPH - 0x9140: 0x7E4A, //CJK UNIFIED IDEOGRAPH - 0x9141: 0x7FA8, //CJK UNIFIED IDEOGRAPH - 0x9142: 0x817A, //CJK UNIFIED IDEOGRAPH - 0x9143: 0x821B, //CJK UNIFIED IDEOGRAPH - 0x9144: 0x8239, //CJK UNIFIED IDEOGRAPH - 0x9145: 0x85A6, //CJK UNIFIED IDEOGRAPH - 0x9146: 0x8A6E, //CJK UNIFIED IDEOGRAPH - 0x9147: 0x8CCE, //CJK UNIFIED IDEOGRAPH - 0x9148: 0x8DF5, //CJK UNIFIED IDEOGRAPH - 0x9149: 0x9078, //CJK UNIFIED IDEOGRAPH - 0x914A: 0x9077, //CJK UNIFIED IDEOGRAPH - 0x914B: 0x92AD, //CJK UNIFIED IDEOGRAPH - 0x914C: 0x9291, //CJK UNIFIED IDEOGRAPH - 0x914D: 0x9583, //CJK UNIFIED IDEOGRAPH - 0x914E: 0x9BAE, //CJK UNIFIED IDEOGRAPH - 0x914F: 0x524D, //CJK UNIFIED IDEOGRAPH - 0x9150: 0x5584, //CJK UNIFIED IDEOGRAPH - 0x9151: 0x6F38, //CJK UNIFIED IDEOGRAPH - 0x9152: 0x7136, //CJK UNIFIED IDEOGRAPH - 0x9153: 0x5168, //CJK UNIFIED IDEOGRAPH - 0x9154: 0x7985, //CJK UNIFIED IDEOGRAPH - 0x9155: 0x7E55, //CJK UNIFIED IDEOGRAPH - 0x9156: 0x81B3, //CJK UNIFIED IDEOGRAPH - 0x9157: 0x7CCE, //CJK UNIFIED IDEOGRAPH - 0x9158: 0x564C, //CJK UNIFIED IDEOGRAPH - 0x9159: 0x5851, //CJK UNIFIED IDEOGRAPH - 0x915A: 0x5CA8, //CJK UNIFIED IDEOGRAPH - 0x915B: 0x63AA, //CJK UNIFIED IDEOGRAPH - 0x915C: 0x66FE, //CJK UNIFIED IDEOGRAPH - 0x915D: 0x66FD, //CJK UNIFIED IDEOGRAPH - 0x915E: 0x695A, //CJK UNIFIED IDEOGRAPH - 0x915F: 0x72D9, //CJK UNIFIED IDEOGRAPH - 0x9160: 0x758F, //CJK UNIFIED IDEOGRAPH - 0x9161: 0x758E, //CJK UNIFIED IDEOGRAPH - 0x9162: 0x790E, //CJK UNIFIED IDEOGRAPH - 0x9163: 0x7956, //CJK UNIFIED IDEOGRAPH - 0x9164: 0x79DF, //CJK UNIFIED IDEOGRAPH - 0x9165: 0x7C97, //CJK UNIFIED IDEOGRAPH - 0x9166: 0x7D20, //CJK UNIFIED IDEOGRAPH - 0x9167: 0x7D44, //CJK UNIFIED IDEOGRAPH - 0x9168: 0x8607, //CJK UNIFIED IDEOGRAPH - 0x9169: 0x8A34, //CJK UNIFIED IDEOGRAPH - 0x916A: 0x963B, //CJK UNIFIED IDEOGRAPH - 0x916B: 0x9061, //CJK UNIFIED IDEOGRAPH - 0x916C: 0x9F20, //CJK UNIFIED IDEOGRAPH - 0x916D: 0x50E7, //CJK UNIFIED IDEOGRAPH - 0x916E: 0x5275, //CJK UNIFIED IDEOGRAPH - 0x916F: 0x53CC, //CJK UNIFIED IDEOGRAPH - 0x9170: 0x53E2, //CJK UNIFIED IDEOGRAPH - 0x9171: 0x5009, //CJK UNIFIED IDEOGRAPH - 0x9172: 0x55AA, //CJK UNIFIED IDEOGRAPH - 0x9173: 0x58EE, //CJK UNIFIED IDEOGRAPH - 0x9174: 0x594F, //CJK UNIFIED IDEOGRAPH - 0x9175: 0x723D, //CJK UNIFIED IDEOGRAPH - 0x9176: 0x5B8B, //CJK UNIFIED IDEOGRAPH - 0x9177: 0x5C64, //CJK UNIFIED IDEOGRAPH - 0x9178: 0x531D, //CJK UNIFIED IDEOGRAPH - 0x9179: 0x60E3, //CJK UNIFIED IDEOGRAPH - 0x917A: 0x60F3, //CJK UNIFIED IDEOGRAPH - 0x917B: 0x635C, //CJK UNIFIED IDEOGRAPH - 0x917C: 0x6383, //CJK UNIFIED IDEOGRAPH - 0x917D: 0x633F, //CJK UNIFIED IDEOGRAPH - 0x917E: 0x63BB, //CJK UNIFIED IDEOGRAPH - 0x9180: 0x64CD, //CJK UNIFIED IDEOGRAPH - 0x9181: 0x65E9, //CJK UNIFIED IDEOGRAPH - 0x9182: 0x66F9, //CJK UNIFIED IDEOGRAPH - 0x9183: 0x5DE3, //CJK UNIFIED IDEOGRAPH - 0x9184: 0x69CD, //CJK UNIFIED IDEOGRAPH - 0x9185: 0x69FD, //CJK UNIFIED IDEOGRAPH - 0x9186: 0x6F15, //CJK UNIFIED IDEOGRAPH - 0x9187: 0x71E5, //CJK UNIFIED IDEOGRAPH - 0x9188: 0x4E89, //CJK UNIFIED IDEOGRAPH - 0x9189: 0x75E9, //CJK UNIFIED IDEOGRAPH - 0x918A: 0x76F8, //CJK UNIFIED IDEOGRAPH - 0x918B: 0x7A93, //CJK UNIFIED IDEOGRAPH - 0x918C: 0x7CDF, //CJK UNIFIED IDEOGRAPH - 0x918D: 0x7DCF, //CJK UNIFIED IDEOGRAPH - 0x918E: 0x7D9C, //CJK UNIFIED IDEOGRAPH - 0x918F: 0x8061, //CJK UNIFIED IDEOGRAPH - 0x9190: 0x8349, //CJK UNIFIED IDEOGRAPH - 0x9191: 0x8358, //CJK UNIFIED IDEOGRAPH - 0x9192: 0x846C, //CJK UNIFIED IDEOGRAPH - 0x9193: 0x84BC, //CJK UNIFIED IDEOGRAPH - 0x9194: 0x85FB, //CJK UNIFIED IDEOGRAPH - 0x9195: 0x88C5, //CJK UNIFIED IDEOGRAPH - 0x9196: 0x8D70, //CJK UNIFIED IDEOGRAPH - 0x9197: 0x9001, //CJK UNIFIED IDEOGRAPH - 0x9198: 0x906D, //CJK UNIFIED IDEOGRAPH - 0x9199: 0x9397, //CJK UNIFIED IDEOGRAPH - 0x919A: 0x971C, //CJK UNIFIED IDEOGRAPH - 0x919B: 0x9A12, //CJK UNIFIED IDEOGRAPH - 0x919C: 0x50CF, //CJK UNIFIED IDEOGRAPH - 0x919D: 0x5897, //CJK UNIFIED IDEOGRAPH - 0x919E: 0x618E, //CJK UNIFIED IDEOGRAPH - 0x919F: 0x81D3, //CJK UNIFIED IDEOGRAPH - 0x91A0: 0x8535, //CJK UNIFIED IDEOGRAPH - 0x91A1: 0x8D08, //CJK UNIFIED IDEOGRAPH - 0x91A2: 0x9020, //CJK UNIFIED IDEOGRAPH - 0x91A3: 0x4FC3, //CJK UNIFIED IDEOGRAPH - 0x91A4: 0x5074, //CJK UNIFIED IDEOGRAPH - 0x91A5: 0x5247, //CJK UNIFIED IDEOGRAPH - 0x91A6: 0x5373, //CJK UNIFIED IDEOGRAPH - 0x91A7: 0x606F, //CJK UNIFIED IDEOGRAPH - 0x91A8: 0x6349, //CJK UNIFIED IDEOGRAPH - 0x91A9: 0x675F, //CJK UNIFIED IDEOGRAPH - 0x91AA: 0x6E2C, //CJK UNIFIED IDEOGRAPH - 0x91AB: 0x8DB3, //CJK UNIFIED IDEOGRAPH - 0x91AC: 0x901F, //CJK UNIFIED IDEOGRAPH - 0x91AD: 0x4FD7, //CJK UNIFIED IDEOGRAPH - 0x91AE: 0x5C5E, //CJK UNIFIED IDEOGRAPH - 0x91AF: 0x8CCA, //CJK UNIFIED IDEOGRAPH - 0x91B0: 0x65CF, //CJK UNIFIED IDEOGRAPH - 0x91B1: 0x7D9A, //CJK UNIFIED IDEOGRAPH - 0x91B2: 0x5352, //CJK UNIFIED IDEOGRAPH - 0x91B3: 0x8896, //CJK UNIFIED IDEOGRAPH - 0x91B4: 0x5176, //CJK UNIFIED IDEOGRAPH - 0x91B5: 0x63C3, //CJK UNIFIED IDEOGRAPH - 0x91B6: 0x5B58, //CJK UNIFIED IDEOGRAPH - 0x91B7: 0x5B6B, //CJK UNIFIED IDEOGRAPH - 0x91B8: 0x5C0A, //CJK UNIFIED IDEOGRAPH - 0x91B9: 0x640D, //CJK UNIFIED IDEOGRAPH - 0x91BA: 0x6751, //CJK UNIFIED IDEOGRAPH - 0x91BB: 0x905C, //CJK UNIFIED IDEOGRAPH - 0x91BC: 0x4ED6, //CJK UNIFIED IDEOGRAPH - 0x91BD: 0x591A, //CJK UNIFIED IDEOGRAPH - 0x91BE: 0x592A, //CJK UNIFIED IDEOGRAPH - 0x91BF: 0x6C70, //CJK UNIFIED IDEOGRAPH - 0x91C0: 0x8A51, //CJK UNIFIED IDEOGRAPH - 0x91C1: 0x553E, //CJK UNIFIED IDEOGRAPH - 0x91C2: 0x5815, //CJK UNIFIED IDEOGRAPH - 0x91C3: 0x59A5, //CJK UNIFIED IDEOGRAPH - 0x91C4: 0x60F0, //CJK UNIFIED IDEOGRAPH - 0x91C5: 0x6253, //CJK UNIFIED IDEOGRAPH - 0x91C6: 0x67C1, //CJK UNIFIED IDEOGRAPH - 0x91C7: 0x8235, //CJK UNIFIED IDEOGRAPH - 0x91C8: 0x6955, //CJK UNIFIED IDEOGRAPH - 0x91C9: 0x9640, //CJK UNIFIED IDEOGRAPH - 0x91CA: 0x99C4, //CJK UNIFIED IDEOGRAPH - 0x91CB: 0x9A28, //CJK UNIFIED IDEOGRAPH - 0x91CC: 0x4F53, //CJK UNIFIED IDEOGRAPH - 0x91CD: 0x5806, //CJK UNIFIED IDEOGRAPH - 0x91CE: 0x5BFE, //CJK UNIFIED IDEOGRAPH - 0x91CF: 0x8010, //CJK UNIFIED IDEOGRAPH - 0x91D0: 0x5CB1, //CJK UNIFIED IDEOGRAPH - 0x91D1: 0x5E2F, //CJK UNIFIED IDEOGRAPH - 0x91D2: 0x5F85, //CJK UNIFIED IDEOGRAPH - 0x91D3: 0x6020, //CJK UNIFIED IDEOGRAPH - 0x91D4: 0x614B, //CJK UNIFIED IDEOGRAPH - 0x91D5: 0x6234, //CJK UNIFIED IDEOGRAPH - 0x91D6: 0x66FF, //CJK UNIFIED IDEOGRAPH - 0x91D7: 0x6CF0, //CJK UNIFIED IDEOGRAPH - 0x91D8: 0x6EDE, //CJK UNIFIED IDEOGRAPH - 0x91D9: 0x80CE, //CJK UNIFIED IDEOGRAPH - 0x91DA: 0x817F, //CJK UNIFIED IDEOGRAPH - 0x91DB: 0x82D4, //CJK UNIFIED IDEOGRAPH - 0x91DC: 0x888B, //CJK UNIFIED IDEOGRAPH - 0x91DD: 0x8CB8, //CJK UNIFIED IDEOGRAPH - 0x91DE: 0x9000, //CJK UNIFIED IDEOGRAPH - 0x91DF: 0x902E, //CJK UNIFIED IDEOGRAPH - 0x91E0: 0x968A, //CJK UNIFIED IDEOGRAPH - 0x91E1: 0x9EDB, //CJK UNIFIED IDEOGRAPH - 0x91E2: 0x9BDB, //CJK UNIFIED IDEOGRAPH - 0x91E3: 0x4EE3, //CJK UNIFIED IDEOGRAPH - 0x91E4: 0x53F0, //CJK UNIFIED IDEOGRAPH - 0x91E5: 0x5927, //CJK UNIFIED IDEOGRAPH - 0x91E6: 0x7B2C, //CJK UNIFIED IDEOGRAPH - 0x91E7: 0x918D, //CJK UNIFIED IDEOGRAPH - 0x91E8: 0x984C, //CJK UNIFIED IDEOGRAPH - 0x91E9: 0x9DF9, //CJK UNIFIED IDEOGRAPH - 0x91EA: 0x6EDD, //CJK UNIFIED IDEOGRAPH - 0x91EB: 0x7027, //CJK UNIFIED IDEOGRAPH - 0x91EC: 0x5353, //CJK UNIFIED IDEOGRAPH - 0x91ED: 0x5544, //CJK UNIFIED IDEOGRAPH - 0x91EE: 0x5B85, //CJK UNIFIED IDEOGRAPH - 0x91EF: 0x6258, //CJK UNIFIED IDEOGRAPH - 0x91F0: 0x629E, //CJK UNIFIED IDEOGRAPH - 0x91F1: 0x62D3, //CJK UNIFIED IDEOGRAPH - 0x91F2: 0x6CA2, //CJK UNIFIED IDEOGRAPH - 0x91F3: 0x6FEF, //CJK UNIFIED IDEOGRAPH - 0x91F4: 0x7422, //CJK UNIFIED IDEOGRAPH - 0x91F5: 0x8A17, //CJK UNIFIED IDEOGRAPH - 0x91F6: 0x9438, //CJK UNIFIED IDEOGRAPH - 0x91F7: 0x6FC1, //CJK UNIFIED IDEOGRAPH - 0x91F8: 0x8AFE, //CJK UNIFIED IDEOGRAPH - 0x91F9: 0x8338, //CJK UNIFIED IDEOGRAPH - 0x91FA: 0x51E7, //CJK UNIFIED IDEOGRAPH - 0x91FB: 0x86F8, //CJK UNIFIED IDEOGRAPH - 0x91FC: 0x53EA, //CJK UNIFIED IDEOGRAPH - 0x9240: 0x53E9, //CJK UNIFIED IDEOGRAPH - 0x9241: 0x4F46, //CJK UNIFIED IDEOGRAPH - 0x9242: 0x9054, //CJK UNIFIED IDEOGRAPH - 0x9243: 0x8FB0, //CJK UNIFIED IDEOGRAPH - 0x9244: 0x596A, //CJK UNIFIED IDEOGRAPH - 0x9245: 0x8131, //CJK UNIFIED IDEOGRAPH - 0x9246: 0x5DFD, //CJK UNIFIED IDEOGRAPH - 0x9247: 0x7AEA, //CJK UNIFIED IDEOGRAPH - 0x9248: 0x8FBF, //CJK UNIFIED IDEOGRAPH - 0x9249: 0x68DA, //CJK UNIFIED IDEOGRAPH - 0x924A: 0x8C37, //CJK UNIFIED IDEOGRAPH - 0x924B: 0x72F8, //CJK UNIFIED IDEOGRAPH - 0x924C: 0x9C48, //CJK UNIFIED IDEOGRAPH - 0x924D: 0x6A3D, //CJK UNIFIED IDEOGRAPH - 0x924E: 0x8AB0, //CJK UNIFIED IDEOGRAPH - 0x924F: 0x4E39, //CJK UNIFIED IDEOGRAPH - 0x9250: 0x5358, //CJK UNIFIED IDEOGRAPH - 0x9251: 0x5606, //CJK UNIFIED IDEOGRAPH - 0x9252: 0x5766, //CJK UNIFIED IDEOGRAPH - 0x9253: 0x62C5, //CJK UNIFIED IDEOGRAPH - 0x9254: 0x63A2, //CJK UNIFIED IDEOGRAPH - 0x9255: 0x65E6, //CJK UNIFIED IDEOGRAPH - 0x9256: 0x6B4E, //CJK UNIFIED IDEOGRAPH - 0x9257: 0x6DE1, //CJK UNIFIED IDEOGRAPH - 0x9258: 0x6E5B, //CJK UNIFIED IDEOGRAPH - 0x9259: 0x70AD, //CJK UNIFIED IDEOGRAPH - 0x925A: 0x77ED, //CJK UNIFIED IDEOGRAPH - 0x925B: 0x7AEF, //CJK UNIFIED IDEOGRAPH - 0x925C: 0x7BAA, //CJK UNIFIED IDEOGRAPH - 0x925D: 0x7DBB, //CJK UNIFIED IDEOGRAPH - 0x925E: 0x803D, //CJK UNIFIED IDEOGRAPH - 0x925F: 0x80C6, //CJK UNIFIED IDEOGRAPH - 0x9260: 0x86CB, //CJK UNIFIED IDEOGRAPH - 0x9261: 0x8A95, //CJK UNIFIED IDEOGRAPH - 0x9262: 0x935B, //CJK UNIFIED IDEOGRAPH - 0x9263: 0x56E3, //CJK UNIFIED IDEOGRAPH - 0x9264: 0x58C7, //CJK UNIFIED IDEOGRAPH - 0x9265: 0x5F3E, //CJK UNIFIED IDEOGRAPH - 0x9266: 0x65AD, //CJK UNIFIED IDEOGRAPH - 0x9267: 0x6696, //CJK UNIFIED IDEOGRAPH - 0x9268: 0x6A80, //CJK UNIFIED IDEOGRAPH - 0x9269: 0x6BB5, //CJK UNIFIED IDEOGRAPH - 0x926A: 0x7537, //CJK UNIFIED IDEOGRAPH - 0x926B: 0x8AC7, //CJK UNIFIED IDEOGRAPH - 0x926C: 0x5024, //CJK UNIFIED IDEOGRAPH - 0x926D: 0x77E5, //CJK UNIFIED IDEOGRAPH - 0x926E: 0x5730, //CJK UNIFIED IDEOGRAPH - 0x926F: 0x5F1B, //CJK UNIFIED IDEOGRAPH - 0x9270: 0x6065, //CJK UNIFIED IDEOGRAPH - 0x9271: 0x667A, //CJK UNIFIED IDEOGRAPH - 0x9272: 0x6C60, //CJK UNIFIED IDEOGRAPH - 0x9273: 0x75F4, //CJK UNIFIED IDEOGRAPH - 0x9274: 0x7A1A, //CJK UNIFIED IDEOGRAPH - 0x9275: 0x7F6E, //CJK UNIFIED IDEOGRAPH - 0x9276: 0x81F4, //CJK UNIFIED IDEOGRAPH - 0x9277: 0x8718, //CJK UNIFIED IDEOGRAPH - 0x9278: 0x9045, //CJK UNIFIED IDEOGRAPH - 0x9279: 0x99B3, //CJK UNIFIED IDEOGRAPH - 0x927A: 0x7BC9, //CJK UNIFIED IDEOGRAPH - 0x927B: 0x755C, //CJK UNIFIED IDEOGRAPH - 0x927C: 0x7AF9, //CJK UNIFIED IDEOGRAPH - 0x927D: 0x7B51, //CJK UNIFIED IDEOGRAPH - 0x927E: 0x84C4, //CJK UNIFIED IDEOGRAPH - 0x9280: 0x9010, //CJK UNIFIED IDEOGRAPH - 0x9281: 0x79E9, //CJK UNIFIED IDEOGRAPH - 0x9282: 0x7A92, //CJK UNIFIED IDEOGRAPH - 0x9283: 0x8336, //CJK UNIFIED IDEOGRAPH - 0x9284: 0x5AE1, //CJK UNIFIED IDEOGRAPH - 0x9285: 0x7740, //CJK UNIFIED IDEOGRAPH - 0x9286: 0x4E2D, //CJK UNIFIED IDEOGRAPH - 0x9287: 0x4EF2, //CJK UNIFIED IDEOGRAPH - 0x9288: 0x5B99, //CJK UNIFIED IDEOGRAPH - 0x9289: 0x5FE0, //CJK UNIFIED IDEOGRAPH - 0x928A: 0x62BD, //CJK UNIFIED IDEOGRAPH - 0x928B: 0x663C, //CJK UNIFIED IDEOGRAPH - 0x928C: 0x67F1, //CJK UNIFIED IDEOGRAPH - 0x928D: 0x6CE8, //CJK UNIFIED IDEOGRAPH - 0x928E: 0x866B, //CJK UNIFIED IDEOGRAPH - 0x928F: 0x8877, //CJK UNIFIED IDEOGRAPH - 0x9290: 0x8A3B, //CJK UNIFIED IDEOGRAPH - 0x9291: 0x914E, //CJK UNIFIED IDEOGRAPH - 0x9292: 0x92F3, //CJK UNIFIED IDEOGRAPH - 0x9293: 0x99D0, //CJK UNIFIED IDEOGRAPH - 0x9294: 0x6A17, //CJK UNIFIED IDEOGRAPH - 0x9295: 0x7026, //CJK UNIFIED IDEOGRAPH - 0x9296: 0x732A, //CJK UNIFIED IDEOGRAPH - 0x9297: 0x82E7, //CJK UNIFIED IDEOGRAPH - 0x9298: 0x8457, //CJK UNIFIED IDEOGRAPH - 0x9299: 0x8CAF, //CJK UNIFIED IDEOGRAPH - 0x929A: 0x4E01, //CJK UNIFIED IDEOGRAPH - 0x929B: 0x5146, //CJK UNIFIED IDEOGRAPH - 0x929C: 0x51CB, //CJK UNIFIED IDEOGRAPH - 0x929D: 0x558B, //CJK UNIFIED IDEOGRAPH - 0x929E: 0x5BF5, //CJK UNIFIED IDEOGRAPH - 0x929F: 0x5E16, //CJK UNIFIED IDEOGRAPH - 0x92A0: 0x5E33, //CJK UNIFIED IDEOGRAPH - 0x92A1: 0x5E81, //CJK UNIFIED IDEOGRAPH - 0x92A2: 0x5F14, //CJK UNIFIED IDEOGRAPH - 0x92A3: 0x5F35, //CJK UNIFIED IDEOGRAPH - 0x92A4: 0x5F6B, //CJK UNIFIED IDEOGRAPH - 0x92A5: 0x5FB4, //CJK UNIFIED IDEOGRAPH - 0x92A6: 0x61F2, //CJK UNIFIED IDEOGRAPH - 0x92A7: 0x6311, //CJK UNIFIED IDEOGRAPH - 0x92A8: 0x66A2, //CJK UNIFIED IDEOGRAPH - 0x92A9: 0x671D, //CJK UNIFIED IDEOGRAPH - 0x92AA: 0x6F6E, //CJK UNIFIED IDEOGRAPH - 0x92AB: 0x7252, //CJK UNIFIED IDEOGRAPH - 0x92AC: 0x753A, //CJK UNIFIED IDEOGRAPH - 0x92AD: 0x773A, //CJK UNIFIED IDEOGRAPH - 0x92AE: 0x8074, //CJK UNIFIED IDEOGRAPH - 0x92AF: 0x8139, //CJK UNIFIED IDEOGRAPH - 0x92B0: 0x8178, //CJK UNIFIED IDEOGRAPH - 0x92B1: 0x8776, //CJK UNIFIED IDEOGRAPH - 0x92B2: 0x8ABF, //CJK UNIFIED IDEOGRAPH - 0x92B3: 0x8ADC, //CJK UNIFIED IDEOGRAPH - 0x92B4: 0x8D85, //CJK UNIFIED IDEOGRAPH - 0x92B5: 0x8DF3, //CJK UNIFIED IDEOGRAPH - 0x92B6: 0x929A, //CJK UNIFIED IDEOGRAPH - 0x92B7: 0x9577, //CJK UNIFIED IDEOGRAPH - 0x92B8: 0x9802, //CJK UNIFIED IDEOGRAPH - 0x92B9: 0x9CE5, //CJK UNIFIED IDEOGRAPH - 0x92BA: 0x52C5, //CJK UNIFIED IDEOGRAPH - 0x92BB: 0x6357, //CJK UNIFIED IDEOGRAPH - 0x92BC: 0x76F4, //CJK UNIFIED IDEOGRAPH - 0x92BD: 0x6715, //CJK UNIFIED IDEOGRAPH - 0x92BE: 0x6C88, //CJK UNIFIED IDEOGRAPH - 0x92BF: 0x73CD, //CJK UNIFIED IDEOGRAPH - 0x92C0: 0x8CC3, //CJK UNIFIED IDEOGRAPH - 0x92C1: 0x93AE, //CJK UNIFIED IDEOGRAPH - 0x92C2: 0x9673, //CJK UNIFIED IDEOGRAPH - 0x92C3: 0x6D25, //CJK UNIFIED IDEOGRAPH - 0x92C4: 0x589C, //CJK UNIFIED IDEOGRAPH - 0x92C5: 0x690E, //CJK UNIFIED IDEOGRAPH - 0x92C6: 0x69CC, //CJK UNIFIED IDEOGRAPH - 0x92C7: 0x8FFD, //CJK UNIFIED IDEOGRAPH - 0x92C8: 0x939A, //CJK UNIFIED IDEOGRAPH - 0x92C9: 0x75DB, //CJK UNIFIED IDEOGRAPH - 0x92CA: 0x901A, //CJK UNIFIED IDEOGRAPH - 0x92CB: 0x585A, //CJK UNIFIED IDEOGRAPH - 0x92CC: 0x6802, //CJK UNIFIED IDEOGRAPH - 0x92CD: 0x63B4, //CJK UNIFIED IDEOGRAPH - 0x92CE: 0x69FB, //CJK UNIFIED IDEOGRAPH - 0x92CF: 0x4F43, //CJK UNIFIED IDEOGRAPH - 0x92D0: 0x6F2C, //CJK UNIFIED IDEOGRAPH - 0x92D1: 0x67D8, //CJK UNIFIED IDEOGRAPH - 0x92D2: 0x8FBB, //CJK UNIFIED IDEOGRAPH - 0x92D3: 0x8526, //CJK UNIFIED IDEOGRAPH - 0x92D4: 0x7DB4, //CJK UNIFIED IDEOGRAPH - 0x92D5: 0x9354, //CJK UNIFIED IDEOGRAPH - 0x92D6: 0x693F, //CJK UNIFIED IDEOGRAPH - 0x92D7: 0x6F70, //CJK UNIFIED IDEOGRAPH - 0x92D8: 0x576A, //CJK UNIFIED IDEOGRAPH - 0x92D9: 0x58F7, //CJK UNIFIED IDEOGRAPH - 0x92DA: 0x5B2C, //CJK UNIFIED IDEOGRAPH - 0x92DB: 0x7D2C, //CJK UNIFIED IDEOGRAPH - 0x92DC: 0x722A, //CJK UNIFIED IDEOGRAPH - 0x92DD: 0x540A, //CJK UNIFIED IDEOGRAPH - 0x92DE: 0x91E3, //CJK UNIFIED IDEOGRAPH - 0x92DF: 0x9DB4, //CJK UNIFIED IDEOGRAPH - 0x92E0: 0x4EAD, //CJK UNIFIED IDEOGRAPH - 0x92E1: 0x4F4E, //CJK UNIFIED IDEOGRAPH - 0x92E2: 0x505C, //CJK UNIFIED IDEOGRAPH - 0x92E3: 0x5075, //CJK UNIFIED IDEOGRAPH - 0x92E4: 0x5243, //CJK UNIFIED IDEOGRAPH - 0x92E5: 0x8C9E, //CJK UNIFIED IDEOGRAPH - 0x92E6: 0x5448, //CJK UNIFIED IDEOGRAPH - 0x92E7: 0x5824, //CJK UNIFIED IDEOGRAPH - 0x92E8: 0x5B9A, //CJK UNIFIED IDEOGRAPH - 0x92E9: 0x5E1D, //CJK UNIFIED IDEOGRAPH - 0x92EA: 0x5E95, //CJK UNIFIED IDEOGRAPH - 0x92EB: 0x5EAD, //CJK UNIFIED IDEOGRAPH - 0x92EC: 0x5EF7, //CJK UNIFIED IDEOGRAPH - 0x92ED: 0x5F1F, //CJK UNIFIED IDEOGRAPH - 0x92EE: 0x608C, //CJK UNIFIED IDEOGRAPH - 0x92EF: 0x62B5, //CJK UNIFIED IDEOGRAPH - 0x92F0: 0x633A, //CJK UNIFIED IDEOGRAPH - 0x92F1: 0x63D0, //CJK UNIFIED IDEOGRAPH - 0x92F2: 0x68AF, //CJK UNIFIED IDEOGRAPH - 0x92F3: 0x6C40, //CJK UNIFIED IDEOGRAPH - 0x92F4: 0x7887, //CJK UNIFIED IDEOGRAPH - 0x92F5: 0x798E, //CJK UNIFIED IDEOGRAPH - 0x92F6: 0x7A0B, //CJK UNIFIED IDEOGRAPH - 0x92F7: 0x7DE0, //CJK UNIFIED IDEOGRAPH - 0x92F8: 0x8247, //CJK UNIFIED IDEOGRAPH - 0x92F9: 0x8A02, //CJK UNIFIED IDEOGRAPH - 0x92FA: 0x8AE6, //CJK UNIFIED IDEOGRAPH - 0x92FB: 0x8E44, //CJK UNIFIED IDEOGRAPH - 0x92FC: 0x9013, //CJK UNIFIED IDEOGRAPH - 0x9340: 0x90B8, //CJK UNIFIED IDEOGRAPH - 0x9341: 0x912D, //CJK UNIFIED IDEOGRAPH - 0x9342: 0x91D8, //CJK UNIFIED IDEOGRAPH - 0x9343: 0x9F0E, //CJK UNIFIED IDEOGRAPH - 0x9344: 0x6CE5, //CJK UNIFIED IDEOGRAPH - 0x9345: 0x6458, //CJK UNIFIED IDEOGRAPH - 0x9346: 0x64E2, //CJK UNIFIED IDEOGRAPH - 0x9347: 0x6575, //CJK UNIFIED IDEOGRAPH - 0x9348: 0x6EF4, //CJK UNIFIED IDEOGRAPH - 0x9349: 0x7684, //CJK UNIFIED IDEOGRAPH - 0x934A: 0x7B1B, //CJK UNIFIED IDEOGRAPH - 0x934B: 0x9069, //CJK UNIFIED IDEOGRAPH - 0x934C: 0x93D1, //CJK UNIFIED IDEOGRAPH - 0x934D: 0x6EBA, //CJK UNIFIED IDEOGRAPH - 0x934E: 0x54F2, //CJK UNIFIED IDEOGRAPH - 0x934F: 0x5FB9, //CJK UNIFIED IDEOGRAPH - 0x9350: 0x64A4, //CJK UNIFIED IDEOGRAPH - 0x9351: 0x8F4D, //CJK UNIFIED IDEOGRAPH - 0x9352: 0x8FED, //CJK UNIFIED IDEOGRAPH - 0x9353: 0x9244, //CJK UNIFIED IDEOGRAPH - 0x9354: 0x5178, //CJK UNIFIED IDEOGRAPH - 0x9355: 0x586B, //CJK UNIFIED IDEOGRAPH - 0x9356: 0x5929, //CJK UNIFIED IDEOGRAPH - 0x9357: 0x5C55, //CJK UNIFIED IDEOGRAPH - 0x9358: 0x5E97, //CJK UNIFIED IDEOGRAPH - 0x9359: 0x6DFB, //CJK UNIFIED IDEOGRAPH - 0x935A: 0x7E8F, //CJK UNIFIED IDEOGRAPH - 0x935B: 0x751C, //CJK UNIFIED IDEOGRAPH - 0x935C: 0x8CBC, //CJK UNIFIED IDEOGRAPH - 0x935D: 0x8EE2, //CJK UNIFIED IDEOGRAPH - 0x935E: 0x985B, //CJK UNIFIED IDEOGRAPH - 0x935F: 0x70B9, //CJK UNIFIED IDEOGRAPH - 0x9360: 0x4F1D, //CJK UNIFIED IDEOGRAPH - 0x9361: 0x6BBF, //CJK UNIFIED IDEOGRAPH - 0x9362: 0x6FB1, //CJK UNIFIED IDEOGRAPH - 0x9363: 0x7530, //CJK UNIFIED IDEOGRAPH - 0x9364: 0x96FB, //CJK UNIFIED IDEOGRAPH - 0x9365: 0x514E, //CJK UNIFIED IDEOGRAPH - 0x9366: 0x5410, //CJK UNIFIED IDEOGRAPH - 0x9367: 0x5835, //CJK UNIFIED IDEOGRAPH - 0x9368: 0x5857, //CJK UNIFIED IDEOGRAPH - 0x9369: 0x59AC, //CJK UNIFIED IDEOGRAPH - 0x936A: 0x5C60, //CJK UNIFIED IDEOGRAPH - 0x936B: 0x5F92, //CJK UNIFIED IDEOGRAPH - 0x936C: 0x6597, //CJK UNIFIED IDEOGRAPH - 0x936D: 0x675C, //CJK UNIFIED IDEOGRAPH - 0x936E: 0x6E21, //CJK UNIFIED IDEOGRAPH - 0x936F: 0x767B, //CJK UNIFIED IDEOGRAPH - 0x9370: 0x83DF, //CJK UNIFIED IDEOGRAPH - 0x9371: 0x8CED, //CJK UNIFIED IDEOGRAPH - 0x9372: 0x9014, //CJK UNIFIED IDEOGRAPH - 0x9373: 0x90FD, //CJK UNIFIED IDEOGRAPH - 0x9374: 0x934D, //CJK UNIFIED IDEOGRAPH - 0x9375: 0x7825, //CJK UNIFIED IDEOGRAPH - 0x9376: 0x783A, //CJK UNIFIED IDEOGRAPH - 0x9377: 0x52AA, //CJK UNIFIED IDEOGRAPH - 0x9378: 0x5EA6, //CJK UNIFIED IDEOGRAPH - 0x9379: 0x571F, //CJK UNIFIED IDEOGRAPH - 0x937A: 0x5974, //CJK UNIFIED IDEOGRAPH - 0x937B: 0x6012, //CJK UNIFIED IDEOGRAPH - 0x937C: 0x5012, //CJK UNIFIED IDEOGRAPH - 0x937D: 0x515A, //CJK UNIFIED IDEOGRAPH - 0x937E: 0x51AC, //CJK UNIFIED IDEOGRAPH - 0x9380: 0x51CD, //CJK UNIFIED IDEOGRAPH - 0x9381: 0x5200, //CJK UNIFIED IDEOGRAPH - 0x9382: 0x5510, //CJK UNIFIED IDEOGRAPH - 0x9383: 0x5854, //CJK UNIFIED IDEOGRAPH - 0x9384: 0x5858, //CJK UNIFIED IDEOGRAPH - 0x9385: 0x5957, //CJK UNIFIED IDEOGRAPH - 0x9386: 0x5B95, //CJK UNIFIED IDEOGRAPH - 0x9387: 0x5CF6, //CJK UNIFIED IDEOGRAPH - 0x9388: 0x5D8B, //CJK UNIFIED IDEOGRAPH - 0x9389: 0x60BC, //CJK UNIFIED IDEOGRAPH - 0x938A: 0x6295, //CJK UNIFIED IDEOGRAPH - 0x938B: 0x642D, //CJK UNIFIED IDEOGRAPH - 0x938C: 0x6771, //CJK UNIFIED IDEOGRAPH - 0x938D: 0x6843, //CJK UNIFIED IDEOGRAPH - 0x938E: 0x68BC, //CJK UNIFIED IDEOGRAPH - 0x938F: 0x68DF, //CJK UNIFIED IDEOGRAPH - 0x9390: 0x76D7, //CJK UNIFIED IDEOGRAPH - 0x9391: 0x6DD8, //CJK UNIFIED IDEOGRAPH - 0x9392: 0x6E6F, //CJK UNIFIED IDEOGRAPH - 0x9393: 0x6D9B, //CJK UNIFIED IDEOGRAPH - 0x9394: 0x706F, //CJK UNIFIED IDEOGRAPH - 0x9395: 0x71C8, //CJK UNIFIED IDEOGRAPH - 0x9396: 0x5F53, //CJK UNIFIED IDEOGRAPH - 0x9397: 0x75D8, //CJK UNIFIED IDEOGRAPH - 0x9398: 0x7977, //CJK UNIFIED IDEOGRAPH - 0x9399: 0x7B49, //CJK UNIFIED IDEOGRAPH - 0x939A: 0x7B54, //CJK UNIFIED IDEOGRAPH - 0x939B: 0x7B52, //CJK UNIFIED IDEOGRAPH - 0x939C: 0x7CD6, //CJK UNIFIED IDEOGRAPH - 0x939D: 0x7D71, //CJK UNIFIED IDEOGRAPH - 0x939E: 0x5230, //CJK UNIFIED IDEOGRAPH - 0x939F: 0x8463, //CJK UNIFIED IDEOGRAPH - 0x93A0: 0x8569, //CJK UNIFIED IDEOGRAPH - 0x93A1: 0x85E4, //CJK UNIFIED IDEOGRAPH - 0x93A2: 0x8A0E, //CJK UNIFIED IDEOGRAPH - 0x93A3: 0x8B04, //CJK UNIFIED IDEOGRAPH - 0x93A4: 0x8C46, //CJK UNIFIED IDEOGRAPH - 0x93A5: 0x8E0F, //CJK UNIFIED IDEOGRAPH - 0x93A6: 0x9003, //CJK UNIFIED IDEOGRAPH - 0x93A7: 0x900F, //CJK UNIFIED IDEOGRAPH - 0x93A8: 0x9419, //CJK UNIFIED IDEOGRAPH - 0x93A9: 0x9676, //CJK UNIFIED IDEOGRAPH - 0x93AA: 0x982D, //CJK UNIFIED IDEOGRAPH - 0x93AB: 0x9A30, //CJK UNIFIED IDEOGRAPH - 0x93AC: 0x95D8, //CJK UNIFIED IDEOGRAPH - 0x93AD: 0x50CD, //CJK UNIFIED IDEOGRAPH - 0x93AE: 0x52D5, //CJK UNIFIED IDEOGRAPH - 0x93AF: 0x540C, //CJK UNIFIED IDEOGRAPH - 0x93B0: 0x5802, //CJK UNIFIED IDEOGRAPH - 0x93B1: 0x5C0E, //CJK UNIFIED IDEOGRAPH - 0x93B2: 0x61A7, //CJK UNIFIED IDEOGRAPH - 0x93B3: 0x649E, //CJK UNIFIED IDEOGRAPH - 0x93B4: 0x6D1E, //CJK UNIFIED IDEOGRAPH - 0x93B5: 0x77B3, //CJK UNIFIED IDEOGRAPH - 0x93B6: 0x7AE5, //CJK UNIFIED IDEOGRAPH - 0x93B7: 0x80F4, //CJK UNIFIED IDEOGRAPH - 0x93B8: 0x8404, //CJK UNIFIED IDEOGRAPH - 0x93B9: 0x9053, //CJK UNIFIED IDEOGRAPH - 0x93BA: 0x9285, //CJK UNIFIED IDEOGRAPH - 0x93BB: 0x5CE0, //CJK UNIFIED IDEOGRAPH - 0x93BC: 0x9D07, //CJK UNIFIED IDEOGRAPH - 0x93BD: 0x533F, //CJK UNIFIED IDEOGRAPH - 0x93BE: 0x5F97, //CJK UNIFIED IDEOGRAPH - 0x93BF: 0x5FB3, //CJK UNIFIED IDEOGRAPH - 0x93C0: 0x6D9C, //CJK UNIFIED IDEOGRAPH - 0x93C1: 0x7279, //CJK UNIFIED IDEOGRAPH - 0x93C2: 0x7763, //CJK UNIFIED IDEOGRAPH - 0x93C3: 0x79BF, //CJK UNIFIED IDEOGRAPH - 0x93C4: 0x7BE4, //CJK UNIFIED IDEOGRAPH - 0x93C5: 0x6BD2, //CJK UNIFIED IDEOGRAPH - 0x93C6: 0x72EC, //CJK UNIFIED IDEOGRAPH - 0x93C7: 0x8AAD, //CJK UNIFIED IDEOGRAPH - 0x93C8: 0x6803, //CJK UNIFIED IDEOGRAPH - 0x93C9: 0x6A61, //CJK UNIFIED IDEOGRAPH - 0x93CA: 0x51F8, //CJK UNIFIED IDEOGRAPH - 0x93CB: 0x7A81, //CJK UNIFIED IDEOGRAPH - 0x93CC: 0x6934, //CJK UNIFIED IDEOGRAPH - 0x93CD: 0x5C4A, //CJK UNIFIED IDEOGRAPH - 0x93CE: 0x9CF6, //CJK UNIFIED IDEOGRAPH - 0x93CF: 0x82EB, //CJK UNIFIED IDEOGRAPH - 0x93D0: 0x5BC5, //CJK UNIFIED IDEOGRAPH - 0x93D1: 0x9149, //CJK UNIFIED IDEOGRAPH - 0x93D2: 0x701E, //CJK UNIFIED IDEOGRAPH - 0x93D3: 0x5678, //CJK UNIFIED IDEOGRAPH - 0x93D4: 0x5C6F, //CJK UNIFIED IDEOGRAPH - 0x93D5: 0x60C7, //CJK UNIFIED IDEOGRAPH - 0x93D6: 0x6566, //CJK UNIFIED IDEOGRAPH - 0x93D7: 0x6C8C, //CJK UNIFIED IDEOGRAPH - 0x93D8: 0x8C5A, //CJK UNIFIED IDEOGRAPH - 0x93D9: 0x9041, //CJK UNIFIED IDEOGRAPH - 0x93DA: 0x9813, //CJK UNIFIED IDEOGRAPH - 0x93DB: 0x5451, //CJK UNIFIED IDEOGRAPH - 0x93DC: 0x66C7, //CJK UNIFIED IDEOGRAPH - 0x93DD: 0x920D, //CJK UNIFIED IDEOGRAPH - 0x93DE: 0x5948, //CJK UNIFIED IDEOGRAPH - 0x93DF: 0x90A3, //CJK UNIFIED IDEOGRAPH - 0x93E0: 0x5185, //CJK UNIFIED IDEOGRAPH - 0x93E1: 0x4E4D, //CJK UNIFIED IDEOGRAPH - 0x93E2: 0x51EA, //CJK UNIFIED IDEOGRAPH - 0x93E3: 0x8599, //CJK UNIFIED IDEOGRAPH - 0x93E4: 0x8B0E, //CJK UNIFIED IDEOGRAPH - 0x93E5: 0x7058, //CJK UNIFIED IDEOGRAPH - 0x93E6: 0x637A, //CJK UNIFIED IDEOGRAPH - 0x93E7: 0x934B, //CJK UNIFIED IDEOGRAPH - 0x93E8: 0x6962, //CJK UNIFIED IDEOGRAPH - 0x93E9: 0x99B4, //CJK UNIFIED IDEOGRAPH - 0x93EA: 0x7E04, //CJK UNIFIED IDEOGRAPH - 0x93EB: 0x7577, //CJK UNIFIED IDEOGRAPH - 0x93EC: 0x5357, //CJK UNIFIED IDEOGRAPH - 0x93ED: 0x6960, //CJK UNIFIED IDEOGRAPH - 0x93EE: 0x8EDF, //CJK UNIFIED IDEOGRAPH - 0x93EF: 0x96E3, //CJK UNIFIED IDEOGRAPH - 0x93F0: 0x6C5D, //CJK UNIFIED IDEOGRAPH - 0x93F1: 0x4E8C, //CJK UNIFIED IDEOGRAPH - 0x93F2: 0x5C3C, //CJK UNIFIED IDEOGRAPH - 0x93F3: 0x5F10, //CJK UNIFIED IDEOGRAPH - 0x93F4: 0x8FE9, //CJK UNIFIED IDEOGRAPH - 0x93F5: 0x5302, //CJK UNIFIED IDEOGRAPH - 0x93F6: 0x8CD1, //CJK UNIFIED IDEOGRAPH - 0x93F7: 0x8089, //CJK UNIFIED IDEOGRAPH - 0x93F8: 0x8679, //CJK UNIFIED IDEOGRAPH - 0x93F9: 0x5EFF, //CJK UNIFIED IDEOGRAPH - 0x93FA: 0x65E5, //CJK UNIFIED IDEOGRAPH - 0x93FB: 0x4E73, //CJK UNIFIED IDEOGRAPH - 0x93FC: 0x5165, //CJK UNIFIED IDEOGRAPH - 0x9440: 0x5982, //CJK UNIFIED IDEOGRAPH - 0x9441: 0x5C3F, //CJK UNIFIED IDEOGRAPH - 0x9442: 0x97EE, //CJK UNIFIED IDEOGRAPH - 0x9443: 0x4EFB, //CJK UNIFIED IDEOGRAPH - 0x9444: 0x598A, //CJK UNIFIED IDEOGRAPH - 0x9445: 0x5FCD, //CJK UNIFIED IDEOGRAPH - 0x9446: 0x8A8D, //CJK UNIFIED IDEOGRAPH - 0x9447: 0x6FE1, //CJK UNIFIED IDEOGRAPH - 0x9448: 0x79B0, //CJK UNIFIED IDEOGRAPH - 0x9449: 0x7962, //CJK UNIFIED IDEOGRAPH - 0x944A: 0x5BE7, //CJK UNIFIED IDEOGRAPH - 0x944B: 0x8471, //CJK UNIFIED IDEOGRAPH - 0x944C: 0x732B, //CJK UNIFIED IDEOGRAPH - 0x944D: 0x71B1, //CJK UNIFIED IDEOGRAPH - 0x944E: 0x5E74, //CJK UNIFIED IDEOGRAPH - 0x944F: 0x5FF5, //CJK UNIFIED IDEOGRAPH - 0x9450: 0x637B, //CJK UNIFIED IDEOGRAPH - 0x9451: 0x649A, //CJK UNIFIED IDEOGRAPH - 0x9452: 0x71C3, //CJK UNIFIED IDEOGRAPH - 0x9453: 0x7C98, //CJK UNIFIED IDEOGRAPH - 0x9454: 0x4E43, //CJK UNIFIED IDEOGRAPH - 0x9455: 0x5EFC, //CJK UNIFIED IDEOGRAPH - 0x9456: 0x4E4B, //CJK UNIFIED IDEOGRAPH - 0x9457: 0x57DC, //CJK UNIFIED IDEOGRAPH - 0x9458: 0x56A2, //CJK UNIFIED IDEOGRAPH - 0x9459: 0x60A9, //CJK UNIFIED IDEOGRAPH - 0x945A: 0x6FC3, //CJK UNIFIED IDEOGRAPH - 0x945B: 0x7D0D, //CJK UNIFIED IDEOGRAPH - 0x945C: 0x80FD, //CJK UNIFIED IDEOGRAPH - 0x945D: 0x8133, //CJK UNIFIED IDEOGRAPH - 0x945E: 0x81BF, //CJK UNIFIED IDEOGRAPH - 0x945F: 0x8FB2, //CJK UNIFIED IDEOGRAPH - 0x9460: 0x8997, //CJK UNIFIED IDEOGRAPH - 0x9461: 0x86A4, //CJK UNIFIED IDEOGRAPH - 0x9462: 0x5DF4, //CJK UNIFIED IDEOGRAPH - 0x9463: 0x628A, //CJK UNIFIED IDEOGRAPH - 0x9464: 0x64AD, //CJK UNIFIED IDEOGRAPH - 0x9465: 0x8987, //CJK UNIFIED IDEOGRAPH - 0x9466: 0x6777, //CJK UNIFIED IDEOGRAPH - 0x9467: 0x6CE2, //CJK UNIFIED IDEOGRAPH - 0x9468: 0x6D3E, //CJK UNIFIED IDEOGRAPH - 0x9469: 0x7436, //CJK UNIFIED IDEOGRAPH - 0x946A: 0x7834, //CJK UNIFIED IDEOGRAPH - 0x946B: 0x5A46, //CJK UNIFIED IDEOGRAPH - 0x946C: 0x7F75, //CJK UNIFIED IDEOGRAPH - 0x946D: 0x82AD, //CJK UNIFIED IDEOGRAPH - 0x946E: 0x99AC, //CJK UNIFIED IDEOGRAPH - 0x946F: 0x4FF3, //CJK UNIFIED IDEOGRAPH - 0x9470: 0x5EC3, //CJK UNIFIED IDEOGRAPH - 0x9471: 0x62DD, //CJK UNIFIED IDEOGRAPH - 0x9472: 0x6392, //CJK UNIFIED IDEOGRAPH - 0x9473: 0x6557, //CJK UNIFIED IDEOGRAPH - 0x9474: 0x676F, //CJK UNIFIED IDEOGRAPH - 0x9475: 0x76C3, //CJK UNIFIED IDEOGRAPH - 0x9476: 0x724C, //CJK UNIFIED IDEOGRAPH - 0x9477: 0x80CC, //CJK UNIFIED IDEOGRAPH - 0x9478: 0x80BA, //CJK UNIFIED IDEOGRAPH - 0x9479: 0x8F29, //CJK UNIFIED IDEOGRAPH - 0x947A: 0x914D, //CJK UNIFIED IDEOGRAPH - 0x947B: 0x500D, //CJK UNIFIED IDEOGRAPH - 0x947C: 0x57F9, //CJK UNIFIED IDEOGRAPH - 0x947D: 0x5A92, //CJK UNIFIED IDEOGRAPH - 0x947E: 0x6885, //CJK UNIFIED IDEOGRAPH - 0x9480: 0x6973, //CJK UNIFIED IDEOGRAPH - 0x9481: 0x7164, //CJK UNIFIED IDEOGRAPH - 0x9482: 0x72FD, //CJK UNIFIED IDEOGRAPH - 0x9483: 0x8CB7, //CJK UNIFIED IDEOGRAPH - 0x9484: 0x58F2, //CJK UNIFIED IDEOGRAPH - 0x9485: 0x8CE0, //CJK UNIFIED IDEOGRAPH - 0x9486: 0x966A, //CJK UNIFIED IDEOGRAPH - 0x9487: 0x9019, //CJK UNIFIED IDEOGRAPH - 0x9488: 0x877F, //CJK UNIFIED IDEOGRAPH - 0x9489: 0x79E4, //CJK UNIFIED IDEOGRAPH - 0x948A: 0x77E7, //CJK UNIFIED IDEOGRAPH - 0x948B: 0x8429, //CJK UNIFIED IDEOGRAPH - 0x948C: 0x4F2F, //CJK UNIFIED IDEOGRAPH - 0x948D: 0x5265, //CJK UNIFIED IDEOGRAPH - 0x948E: 0x535A, //CJK UNIFIED IDEOGRAPH - 0x948F: 0x62CD, //CJK UNIFIED IDEOGRAPH - 0x9490: 0x67CF, //CJK UNIFIED IDEOGRAPH - 0x9491: 0x6CCA, //CJK UNIFIED IDEOGRAPH - 0x9492: 0x767D, //CJK UNIFIED IDEOGRAPH - 0x9493: 0x7B94, //CJK UNIFIED IDEOGRAPH - 0x9494: 0x7C95, //CJK UNIFIED IDEOGRAPH - 0x9495: 0x8236, //CJK UNIFIED IDEOGRAPH - 0x9496: 0x8584, //CJK UNIFIED IDEOGRAPH - 0x9497: 0x8FEB, //CJK UNIFIED IDEOGRAPH - 0x9498: 0x66DD, //CJK UNIFIED IDEOGRAPH - 0x9499: 0x6F20, //CJK UNIFIED IDEOGRAPH - 0x949A: 0x7206, //CJK UNIFIED IDEOGRAPH - 0x949B: 0x7E1B, //CJK UNIFIED IDEOGRAPH - 0x949C: 0x83AB, //CJK UNIFIED IDEOGRAPH - 0x949D: 0x99C1, //CJK UNIFIED IDEOGRAPH - 0x949E: 0x9EA6, //CJK UNIFIED IDEOGRAPH - 0x949F: 0x51FD, //CJK UNIFIED IDEOGRAPH - 0x94A0: 0x7BB1, //CJK UNIFIED IDEOGRAPH - 0x94A1: 0x7872, //CJK UNIFIED IDEOGRAPH - 0x94A2: 0x7BB8, //CJK UNIFIED IDEOGRAPH - 0x94A3: 0x8087, //CJK UNIFIED IDEOGRAPH - 0x94A4: 0x7B48, //CJK UNIFIED IDEOGRAPH - 0x94A5: 0x6AE8, //CJK UNIFIED IDEOGRAPH - 0x94A6: 0x5E61, //CJK UNIFIED IDEOGRAPH - 0x94A7: 0x808C, //CJK UNIFIED IDEOGRAPH - 0x94A8: 0x7551, //CJK UNIFIED IDEOGRAPH - 0x94A9: 0x7560, //CJK UNIFIED IDEOGRAPH - 0x94AA: 0x516B, //CJK UNIFIED IDEOGRAPH - 0x94AB: 0x9262, //CJK UNIFIED IDEOGRAPH - 0x94AC: 0x6E8C, //CJK UNIFIED IDEOGRAPH - 0x94AD: 0x767A, //CJK UNIFIED IDEOGRAPH - 0x94AE: 0x9197, //CJK UNIFIED IDEOGRAPH - 0x94AF: 0x9AEA, //CJK UNIFIED IDEOGRAPH - 0x94B0: 0x4F10, //CJK UNIFIED IDEOGRAPH - 0x94B1: 0x7F70, //CJK UNIFIED IDEOGRAPH - 0x94B2: 0x629C, //CJK UNIFIED IDEOGRAPH - 0x94B3: 0x7B4F, //CJK UNIFIED IDEOGRAPH - 0x94B4: 0x95A5, //CJK UNIFIED IDEOGRAPH - 0x94B5: 0x9CE9, //CJK UNIFIED IDEOGRAPH - 0x94B6: 0x567A, //CJK UNIFIED IDEOGRAPH - 0x94B7: 0x5859, //CJK UNIFIED IDEOGRAPH - 0x94B8: 0x86E4, //CJK UNIFIED IDEOGRAPH - 0x94B9: 0x96BC, //CJK UNIFIED IDEOGRAPH - 0x94BA: 0x4F34, //CJK UNIFIED IDEOGRAPH - 0x94BB: 0x5224, //CJK UNIFIED IDEOGRAPH - 0x94BC: 0x534A, //CJK UNIFIED IDEOGRAPH - 0x94BD: 0x53CD, //CJK UNIFIED IDEOGRAPH - 0x94BE: 0x53DB, //CJK UNIFIED IDEOGRAPH - 0x94BF: 0x5E06, //CJK UNIFIED IDEOGRAPH - 0x94C0: 0x642C, //CJK UNIFIED IDEOGRAPH - 0x94C1: 0x6591, //CJK UNIFIED IDEOGRAPH - 0x94C2: 0x677F, //CJK UNIFIED IDEOGRAPH - 0x94C3: 0x6C3E, //CJK UNIFIED IDEOGRAPH - 0x94C4: 0x6C4E, //CJK UNIFIED IDEOGRAPH - 0x94C5: 0x7248, //CJK UNIFIED IDEOGRAPH - 0x94C6: 0x72AF, //CJK UNIFIED IDEOGRAPH - 0x94C7: 0x73ED, //CJK UNIFIED IDEOGRAPH - 0x94C8: 0x7554, //CJK UNIFIED IDEOGRAPH - 0x94C9: 0x7E41, //CJK UNIFIED IDEOGRAPH - 0x94CA: 0x822C, //CJK UNIFIED IDEOGRAPH - 0x94CB: 0x85E9, //CJK UNIFIED IDEOGRAPH - 0x94CC: 0x8CA9, //CJK UNIFIED IDEOGRAPH - 0x94CD: 0x7BC4, //CJK UNIFIED IDEOGRAPH - 0x94CE: 0x91C6, //CJK UNIFIED IDEOGRAPH - 0x94CF: 0x7169, //CJK UNIFIED IDEOGRAPH - 0x94D0: 0x9812, //CJK UNIFIED IDEOGRAPH - 0x94D1: 0x98EF, //CJK UNIFIED IDEOGRAPH - 0x94D2: 0x633D, //CJK UNIFIED IDEOGRAPH - 0x94D3: 0x6669, //CJK UNIFIED IDEOGRAPH - 0x94D4: 0x756A, //CJK UNIFIED IDEOGRAPH - 0x94D5: 0x76E4, //CJK UNIFIED IDEOGRAPH - 0x94D6: 0x78D0, //CJK UNIFIED IDEOGRAPH - 0x94D7: 0x8543, //CJK UNIFIED IDEOGRAPH - 0x94D8: 0x86EE, //CJK UNIFIED IDEOGRAPH - 0x94D9: 0x532A, //CJK UNIFIED IDEOGRAPH - 0x94DA: 0x5351, //CJK UNIFIED IDEOGRAPH - 0x94DB: 0x5426, //CJK UNIFIED IDEOGRAPH - 0x94DC: 0x5983, //CJK UNIFIED IDEOGRAPH - 0x94DD: 0x5E87, //CJK UNIFIED IDEOGRAPH - 0x94DE: 0x5F7C, //CJK UNIFIED IDEOGRAPH - 0x94DF: 0x60B2, //CJK UNIFIED IDEOGRAPH - 0x94E0: 0x6249, //CJK UNIFIED IDEOGRAPH - 0x94E1: 0x6279, //CJK UNIFIED IDEOGRAPH - 0x94E2: 0x62AB, //CJK UNIFIED IDEOGRAPH - 0x94E3: 0x6590, //CJK UNIFIED IDEOGRAPH - 0x94E4: 0x6BD4, //CJK UNIFIED IDEOGRAPH - 0x94E5: 0x6CCC, //CJK UNIFIED IDEOGRAPH - 0x94E6: 0x75B2, //CJK UNIFIED IDEOGRAPH - 0x94E7: 0x76AE, //CJK UNIFIED IDEOGRAPH - 0x94E8: 0x7891, //CJK UNIFIED IDEOGRAPH - 0x94E9: 0x79D8, //CJK UNIFIED IDEOGRAPH - 0x94EA: 0x7DCB, //CJK UNIFIED IDEOGRAPH - 0x94EB: 0x7F77, //CJK UNIFIED IDEOGRAPH - 0x94EC: 0x80A5, //CJK UNIFIED IDEOGRAPH - 0x94ED: 0x88AB, //CJK UNIFIED IDEOGRAPH - 0x94EE: 0x8AB9, //CJK UNIFIED IDEOGRAPH - 0x94EF: 0x8CBB, //CJK UNIFIED IDEOGRAPH - 0x94F0: 0x907F, //CJK UNIFIED IDEOGRAPH - 0x94F1: 0x975E, //CJK UNIFIED IDEOGRAPH - 0x94F2: 0x98DB, //CJK UNIFIED IDEOGRAPH - 0x94F3: 0x6A0B, //CJK UNIFIED IDEOGRAPH - 0x94F4: 0x7C38, //CJK UNIFIED IDEOGRAPH - 0x94F5: 0x5099, //CJK UNIFIED IDEOGRAPH - 0x94F6: 0x5C3E, //CJK UNIFIED IDEOGRAPH - 0x94F7: 0x5FAE, //CJK UNIFIED IDEOGRAPH - 0x94F8: 0x6787, //CJK UNIFIED IDEOGRAPH - 0x94F9: 0x6BD8, //CJK UNIFIED IDEOGRAPH - 0x94FA: 0x7435, //CJK UNIFIED IDEOGRAPH - 0x94FB: 0x7709, //CJK UNIFIED IDEOGRAPH - 0x94FC: 0x7F8E, //CJK UNIFIED IDEOGRAPH - 0x9540: 0x9F3B, //CJK UNIFIED IDEOGRAPH - 0x9541: 0x67CA, //CJK UNIFIED IDEOGRAPH - 0x9542: 0x7A17, //CJK UNIFIED IDEOGRAPH - 0x9543: 0x5339, //CJK UNIFIED IDEOGRAPH - 0x9544: 0x758B, //CJK UNIFIED IDEOGRAPH - 0x9545: 0x9AED, //CJK UNIFIED IDEOGRAPH - 0x9546: 0x5F66, //CJK UNIFIED IDEOGRAPH - 0x9547: 0x819D, //CJK UNIFIED IDEOGRAPH - 0x9548: 0x83F1, //CJK UNIFIED IDEOGRAPH - 0x9549: 0x8098, //CJK UNIFIED IDEOGRAPH - 0x954A: 0x5F3C, //CJK UNIFIED IDEOGRAPH - 0x954B: 0x5FC5, //CJK UNIFIED IDEOGRAPH - 0x954C: 0x7562, //CJK UNIFIED IDEOGRAPH - 0x954D: 0x7B46, //CJK UNIFIED IDEOGRAPH - 0x954E: 0x903C, //CJK UNIFIED IDEOGRAPH - 0x954F: 0x6867, //CJK UNIFIED IDEOGRAPH - 0x9550: 0x59EB, //CJK UNIFIED IDEOGRAPH - 0x9551: 0x5A9B, //CJK UNIFIED IDEOGRAPH - 0x9552: 0x7D10, //CJK UNIFIED IDEOGRAPH - 0x9553: 0x767E, //CJK UNIFIED IDEOGRAPH - 0x9554: 0x8B2C, //CJK UNIFIED IDEOGRAPH - 0x9555: 0x4FF5, //CJK UNIFIED IDEOGRAPH - 0x9556: 0x5F6A, //CJK UNIFIED IDEOGRAPH - 0x9557: 0x6A19, //CJK UNIFIED IDEOGRAPH - 0x9558: 0x6C37, //CJK UNIFIED IDEOGRAPH - 0x9559: 0x6F02, //CJK UNIFIED IDEOGRAPH - 0x955A: 0x74E2, //CJK UNIFIED IDEOGRAPH - 0x955B: 0x7968, //CJK UNIFIED IDEOGRAPH - 0x955C: 0x8868, //CJK UNIFIED IDEOGRAPH - 0x955D: 0x8A55, //CJK UNIFIED IDEOGRAPH - 0x955E: 0x8C79, //CJK UNIFIED IDEOGRAPH - 0x955F: 0x5EDF, //CJK UNIFIED IDEOGRAPH - 0x9560: 0x63CF, //CJK UNIFIED IDEOGRAPH - 0x9561: 0x75C5, //CJK UNIFIED IDEOGRAPH - 0x9562: 0x79D2, //CJK UNIFIED IDEOGRAPH - 0x9563: 0x82D7, //CJK UNIFIED IDEOGRAPH - 0x9564: 0x9328, //CJK UNIFIED IDEOGRAPH - 0x9565: 0x92F2, //CJK UNIFIED IDEOGRAPH - 0x9566: 0x849C, //CJK UNIFIED IDEOGRAPH - 0x9567: 0x86ED, //CJK UNIFIED IDEOGRAPH - 0x9568: 0x9C2D, //CJK UNIFIED IDEOGRAPH - 0x9569: 0x54C1, //CJK UNIFIED IDEOGRAPH - 0x956A: 0x5F6C, //CJK UNIFIED IDEOGRAPH - 0x956B: 0x658C, //CJK UNIFIED IDEOGRAPH - 0x956C: 0x6D5C, //CJK UNIFIED IDEOGRAPH - 0x956D: 0x7015, //CJK UNIFIED IDEOGRAPH - 0x956E: 0x8CA7, //CJK UNIFIED IDEOGRAPH - 0x956F: 0x8CD3, //CJK UNIFIED IDEOGRAPH - 0x9570: 0x983B, //CJK UNIFIED IDEOGRAPH - 0x9571: 0x654F, //CJK UNIFIED IDEOGRAPH - 0x9572: 0x74F6, //CJK UNIFIED IDEOGRAPH - 0x9573: 0x4E0D, //CJK UNIFIED IDEOGRAPH - 0x9574: 0x4ED8, //CJK UNIFIED IDEOGRAPH - 0x9575: 0x57E0, //CJK UNIFIED IDEOGRAPH - 0x9576: 0x592B, //CJK UNIFIED IDEOGRAPH - 0x9577: 0x5A66, //CJK UNIFIED IDEOGRAPH - 0x9578: 0x5BCC, //CJK UNIFIED IDEOGRAPH - 0x9579: 0x51A8, //CJK UNIFIED IDEOGRAPH - 0x957A: 0x5E03, //CJK UNIFIED IDEOGRAPH - 0x957B: 0x5E9C, //CJK UNIFIED IDEOGRAPH - 0x957C: 0x6016, //CJK UNIFIED IDEOGRAPH - 0x957D: 0x6276, //CJK UNIFIED IDEOGRAPH - 0x957E: 0x6577, //CJK UNIFIED IDEOGRAPH - 0x9580: 0x65A7, //CJK UNIFIED IDEOGRAPH - 0x9581: 0x666E, //CJK UNIFIED IDEOGRAPH - 0x9582: 0x6D6E, //CJK UNIFIED IDEOGRAPH - 0x9583: 0x7236, //CJK UNIFIED IDEOGRAPH - 0x9584: 0x7B26, //CJK UNIFIED IDEOGRAPH - 0x9585: 0x8150, //CJK UNIFIED IDEOGRAPH - 0x9586: 0x819A, //CJK UNIFIED IDEOGRAPH - 0x9587: 0x8299, //CJK UNIFIED IDEOGRAPH - 0x9588: 0x8B5C, //CJK UNIFIED IDEOGRAPH - 0x9589: 0x8CA0, //CJK UNIFIED IDEOGRAPH - 0x958A: 0x8CE6, //CJK UNIFIED IDEOGRAPH - 0x958B: 0x8D74, //CJK UNIFIED IDEOGRAPH - 0x958C: 0x961C, //CJK UNIFIED IDEOGRAPH - 0x958D: 0x9644, //CJK UNIFIED IDEOGRAPH - 0x958E: 0x4FAE, //CJK UNIFIED IDEOGRAPH - 0x958F: 0x64AB, //CJK UNIFIED IDEOGRAPH - 0x9590: 0x6B66, //CJK UNIFIED IDEOGRAPH - 0x9591: 0x821E, //CJK UNIFIED IDEOGRAPH - 0x9592: 0x8461, //CJK UNIFIED IDEOGRAPH - 0x9593: 0x856A, //CJK UNIFIED IDEOGRAPH - 0x9594: 0x90E8, //CJK UNIFIED IDEOGRAPH - 0x9595: 0x5C01, //CJK UNIFIED IDEOGRAPH - 0x9596: 0x6953, //CJK UNIFIED IDEOGRAPH - 0x9597: 0x98A8, //CJK UNIFIED IDEOGRAPH - 0x9598: 0x847A, //CJK UNIFIED IDEOGRAPH - 0x9599: 0x8557, //CJK UNIFIED IDEOGRAPH - 0x959A: 0x4F0F, //CJK UNIFIED IDEOGRAPH - 0x959B: 0x526F, //CJK UNIFIED IDEOGRAPH - 0x959C: 0x5FA9, //CJK UNIFIED IDEOGRAPH - 0x959D: 0x5E45, //CJK UNIFIED IDEOGRAPH - 0x959E: 0x670D, //CJK UNIFIED IDEOGRAPH - 0x959F: 0x798F, //CJK UNIFIED IDEOGRAPH - 0x95A0: 0x8179, //CJK UNIFIED IDEOGRAPH - 0x95A1: 0x8907, //CJK UNIFIED IDEOGRAPH - 0x95A2: 0x8986, //CJK UNIFIED IDEOGRAPH - 0x95A3: 0x6DF5, //CJK UNIFIED IDEOGRAPH - 0x95A4: 0x5F17, //CJK UNIFIED IDEOGRAPH - 0x95A5: 0x6255, //CJK UNIFIED IDEOGRAPH - 0x95A6: 0x6CB8, //CJK UNIFIED IDEOGRAPH - 0x95A7: 0x4ECF, //CJK UNIFIED IDEOGRAPH - 0x95A8: 0x7269, //CJK UNIFIED IDEOGRAPH - 0x95A9: 0x9B92, //CJK UNIFIED IDEOGRAPH - 0x95AA: 0x5206, //CJK UNIFIED IDEOGRAPH - 0x95AB: 0x543B, //CJK UNIFIED IDEOGRAPH - 0x95AC: 0x5674, //CJK UNIFIED IDEOGRAPH - 0x95AD: 0x58B3, //CJK UNIFIED IDEOGRAPH - 0x95AE: 0x61A4, //CJK UNIFIED IDEOGRAPH - 0x95AF: 0x626E, //CJK UNIFIED IDEOGRAPH - 0x95B0: 0x711A, //CJK UNIFIED IDEOGRAPH - 0x95B1: 0x596E, //CJK UNIFIED IDEOGRAPH - 0x95B2: 0x7C89, //CJK UNIFIED IDEOGRAPH - 0x95B3: 0x7CDE, //CJK UNIFIED IDEOGRAPH - 0x95B4: 0x7D1B, //CJK UNIFIED IDEOGRAPH - 0x95B5: 0x96F0, //CJK UNIFIED IDEOGRAPH - 0x95B6: 0x6587, //CJK UNIFIED IDEOGRAPH - 0x95B7: 0x805E, //CJK UNIFIED IDEOGRAPH - 0x95B8: 0x4E19, //CJK UNIFIED IDEOGRAPH - 0x95B9: 0x4F75, //CJK UNIFIED IDEOGRAPH - 0x95BA: 0x5175, //CJK UNIFIED IDEOGRAPH - 0x95BB: 0x5840, //CJK UNIFIED IDEOGRAPH - 0x95BC: 0x5E63, //CJK UNIFIED IDEOGRAPH - 0x95BD: 0x5E73, //CJK UNIFIED IDEOGRAPH - 0x95BE: 0x5F0A, //CJK UNIFIED IDEOGRAPH - 0x95BF: 0x67C4, //CJK UNIFIED IDEOGRAPH - 0x95C0: 0x4E26, //CJK UNIFIED IDEOGRAPH - 0x95C1: 0x853D, //CJK UNIFIED IDEOGRAPH - 0x95C2: 0x9589, //CJK UNIFIED IDEOGRAPH - 0x95C3: 0x965B, //CJK UNIFIED IDEOGRAPH - 0x95C4: 0x7C73, //CJK UNIFIED IDEOGRAPH - 0x95C5: 0x9801, //CJK UNIFIED IDEOGRAPH - 0x95C6: 0x50FB, //CJK UNIFIED IDEOGRAPH - 0x95C7: 0x58C1, //CJK UNIFIED IDEOGRAPH - 0x95C8: 0x7656, //CJK UNIFIED IDEOGRAPH - 0x95C9: 0x78A7, //CJK UNIFIED IDEOGRAPH - 0x95CA: 0x5225, //CJK UNIFIED IDEOGRAPH - 0x95CB: 0x77A5, //CJK UNIFIED IDEOGRAPH - 0x95CC: 0x8511, //CJK UNIFIED IDEOGRAPH - 0x95CD: 0x7B86, //CJK UNIFIED IDEOGRAPH - 0x95CE: 0x504F, //CJK UNIFIED IDEOGRAPH - 0x95CF: 0x5909, //CJK UNIFIED IDEOGRAPH - 0x95D0: 0x7247, //CJK UNIFIED IDEOGRAPH - 0x95D1: 0x7BC7, //CJK UNIFIED IDEOGRAPH - 0x95D2: 0x7DE8, //CJK UNIFIED IDEOGRAPH - 0x95D3: 0x8FBA, //CJK UNIFIED IDEOGRAPH - 0x95D4: 0x8FD4, //CJK UNIFIED IDEOGRAPH - 0x95D5: 0x904D, //CJK UNIFIED IDEOGRAPH - 0x95D6: 0x4FBF, //CJK UNIFIED IDEOGRAPH - 0x95D7: 0x52C9, //CJK UNIFIED IDEOGRAPH - 0x95D8: 0x5A29, //CJK UNIFIED IDEOGRAPH - 0x95D9: 0x5F01, //CJK UNIFIED IDEOGRAPH - 0x95DA: 0x97AD, //CJK UNIFIED IDEOGRAPH - 0x95DB: 0x4FDD, //CJK UNIFIED IDEOGRAPH - 0x95DC: 0x8217, //CJK UNIFIED IDEOGRAPH - 0x95DD: 0x92EA, //CJK UNIFIED IDEOGRAPH - 0x95DE: 0x5703, //CJK UNIFIED IDEOGRAPH - 0x95DF: 0x6355, //CJK UNIFIED IDEOGRAPH - 0x95E0: 0x6B69, //CJK UNIFIED IDEOGRAPH - 0x95E1: 0x752B, //CJK UNIFIED IDEOGRAPH - 0x95E2: 0x88DC, //CJK UNIFIED IDEOGRAPH - 0x95E3: 0x8F14, //CJK UNIFIED IDEOGRAPH - 0x95E4: 0x7A42, //CJK UNIFIED IDEOGRAPH - 0x95E5: 0x52DF, //CJK UNIFIED IDEOGRAPH - 0x95E6: 0x5893, //CJK UNIFIED IDEOGRAPH - 0x95E7: 0x6155, //CJK UNIFIED IDEOGRAPH - 0x95E8: 0x620A, //CJK UNIFIED IDEOGRAPH - 0x95E9: 0x66AE, //CJK UNIFIED IDEOGRAPH - 0x95EA: 0x6BCD, //CJK UNIFIED IDEOGRAPH - 0x95EB: 0x7C3F, //CJK UNIFIED IDEOGRAPH - 0x95EC: 0x83E9, //CJK UNIFIED IDEOGRAPH - 0x95ED: 0x5023, //CJK UNIFIED IDEOGRAPH - 0x95EE: 0x4FF8, //CJK UNIFIED IDEOGRAPH - 0x95EF: 0x5305, //CJK UNIFIED IDEOGRAPH - 0x95F0: 0x5446, //CJK UNIFIED IDEOGRAPH - 0x95F1: 0x5831, //CJK UNIFIED IDEOGRAPH - 0x95F2: 0x5949, //CJK UNIFIED IDEOGRAPH - 0x95F3: 0x5B9D, //CJK UNIFIED IDEOGRAPH - 0x95F4: 0x5CF0, //CJK UNIFIED IDEOGRAPH - 0x95F5: 0x5CEF, //CJK UNIFIED IDEOGRAPH - 0x95F6: 0x5D29, //CJK UNIFIED IDEOGRAPH - 0x95F7: 0x5E96, //CJK UNIFIED IDEOGRAPH - 0x95F8: 0x62B1, //CJK UNIFIED IDEOGRAPH - 0x95F9: 0x6367, //CJK UNIFIED IDEOGRAPH - 0x95FA: 0x653E, //CJK UNIFIED IDEOGRAPH - 0x95FB: 0x65B9, //CJK UNIFIED IDEOGRAPH - 0x95FC: 0x670B, //CJK UNIFIED IDEOGRAPH - 0x9640: 0x6CD5, //CJK UNIFIED IDEOGRAPH - 0x9641: 0x6CE1, //CJK UNIFIED IDEOGRAPH - 0x9642: 0x70F9, //CJK UNIFIED IDEOGRAPH - 0x9643: 0x7832, //CJK UNIFIED IDEOGRAPH - 0x9644: 0x7E2B, //CJK UNIFIED IDEOGRAPH - 0x9645: 0x80DE, //CJK UNIFIED IDEOGRAPH - 0x9646: 0x82B3, //CJK UNIFIED IDEOGRAPH - 0x9647: 0x840C, //CJK UNIFIED IDEOGRAPH - 0x9648: 0x84EC, //CJK UNIFIED IDEOGRAPH - 0x9649: 0x8702, //CJK UNIFIED IDEOGRAPH - 0x964A: 0x8912, //CJK UNIFIED IDEOGRAPH - 0x964B: 0x8A2A, //CJK UNIFIED IDEOGRAPH - 0x964C: 0x8C4A, //CJK UNIFIED IDEOGRAPH - 0x964D: 0x90A6, //CJK UNIFIED IDEOGRAPH - 0x964E: 0x92D2, //CJK UNIFIED IDEOGRAPH - 0x964F: 0x98FD, //CJK UNIFIED IDEOGRAPH - 0x9650: 0x9CF3, //CJK UNIFIED IDEOGRAPH - 0x9651: 0x9D6C, //CJK UNIFIED IDEOGRAPH - 0x9652: 0x4E4F, //CJK UNIFIED IDEOGRAPH - 0x9653: 0x4EA1, //CJK UNIFIED IDEOGRAPH - 0x9654: 0x508D, //CJK UNIFIED IDEOGRAPH - 0x9655: 0x5256, //CJK UNIFIED IDEOGRAPH - 0x9656: 0x574A, //CJK UNIFIED IDEOGRAPH - 0x9657: 0x59A8, //CJK UNIFIED IDEOGRAPH - 0x9658: 0x5E3D, //CJK UNIFIED IDEOGRAPH - 0x9659: 0x5FD8, //CJK UNIFIED IDEOGRAPH - 0x965A: 0x5FD9, //CJK UNIFIED IDEOGRAPH - 0x965B: 0x623F, //CJK UNIFIED IDEOGRAPH - 0x965C: 0x66B4, //CJK UNIFIED IDEOGRAPH - 0x965D: 0x671B, //CJK UNIFIED IDEOGRAPH - 0x965E: 0x67D0, //CJK UNIFIED IDEOGRAPH - 0x965F: 0x68D2, //CJK UNIFIED IDEOGRAPH - 0x9660: 0x5192, //CJK UNIFIED IDEOGRAPH - 0x9661: 0x7D21, //CJK UNIFIED IDEOGRAPH - 0x9662: 0x80AA, //CJK UNIFIED IDEOGRAPH - 0x9663: 0x81A8, //CJK UNIFIED IDEOGRAPH - 0x9664: 0x8B00, //CJK UNIFIED IDEOGRAPH - 0x9665: 0x8C8C, //CJK UNIFIED IDEOGRAPH - 0x9666: 0x8CBF, //CJK UNIFIED IDEOGRAPH - 0x9667: 0x927E, //CJK UNIFIED IDEOGRAPH - 0x9668: 0x9632, //CJK UNIFIED IDEOGRAPH - 0x9669: 0x5420, //CJK UNIFIED IDEOGRAPH - 0x966A: 0x982C, //CJK UNIFIED IDEOGRAPH - 0x966B: 0x5317, //CJK UNIFIED IDEOGRAPH - 0x966C: 0x50D5, //CJK UNIFIED IDEOGRAPH - 0x966D: 0x535C, //CJK UNIFIED IDEOGRAPH - 0x966E: 0x58A8, //CJK UNIFIED IDEOGRAPH - 0x966F: 0x64B2, //CJK UNIFIED IDEOGRAPH - 0x9670: 0x6734, //CJK UNIFIED IDEOGRAPH - 0x9671: 0x7267, //CJK UNIFIED IDEOGRAPH - 0x9672: 0x7766, //CJK UNIFIED IDEOGRAPH - 0x9673: 0x7A46, //CJK UNIFIED IDEOGRAPH - 0x9674: 0x91E6, //CJK UNIFIED IDEOGRAPH - 0x9675: 0x52C3, //CJK UNIFIED IDEOGRAPH - 0x9676: 0x6CA1, //CJK UNIFIED IDEOGRAPH - 0x9677: 0x6B86, //CJK UNIFIED IDEOGRAPH - 0x9678: 0x5800, //CJK UNIFIED IDEOGRAPH - 0x9679: 0x5E4C, //CJK UNIFIED IDEOGRAPH - 0x967A: 0x5954, //CJK UNIFIED IDEOGRAPH - 0x967B: 0x672C, //CJK UNIFIED IDEOGRAPH - 0x967C: 0x7FFB, //CJK UNIFIED IDEOGRAPH - 0x967D: 0x51E1, //CJK UNIFIED IDEOGRAPH - 0x967E: 0x76C6, //CJK UNIFIED IDEOGRAPH - 0x9680: 0x6469, //CJK UNIFIED IDEOGRAPH - 0x9681: 0x78E8, //CJK UNIFIED IDEOGRAPH - 0x9682: 0x9B54, //CJK UNIFIED IDEOGRAPH - 0x9683: 0x9EBB, //CJK UNIFIED IDEOGRAPH - 0x9684: 0x57CB, //CJK UNIFIED IDEOGRAPH - 0x9685: 0x59B9, //CJK UNIFIED IDEOGRAPH - 0x9686: 0x6627, //CJK UNIFIED IDEOGRAPH - 0x9687: 0x679A, //CJK UNIFIED IDEOGRAPH - 0x9688: 0x6BCE, //CJK UNIFIED IDEOGRAPH - 0x9689: 0x54E9, //CJK UNIFIED IDEOGRAPH - 0x968A: 0x69D9, //CJK UNIFIED IDEOGRAPH - 0x968B: 0x5E55, //CJK UNIFIED IDEOGRAPH - 0x968C: 0x819C, //CJK UNIFIED IDEOGRAPH - 0x968D: 0x6795, //CJK UNIFIED IDEOGRAPH - 0x968E: 0x9BAA, //CJK UNIFIED IDEOGRAPH - 0x968F: 0x67FE, //CJK UNIFIED IDEOGRAPH - 0x9690: 0x9C52, //CJK UNIFIED IDEOGRAPH - 0x9691: 0x685D, //CJK UNIFIED IDEOGRAPH - 0x9692: 0x4EA6, //CJK UNIFIED IDEOGRAPH - 0x9693: 0x4FE3, //CJK UNIFIED IDEOGRAPH - 0x9694: 0x53C8, //CJK UNIFIED IDEOGRAPH - 0x9695: 0x62B9, //CJK UNIFIED IDEOGRAPH - 0x9696: 0x672B, //CJK UNIFIED IDEOGRAPH - 0x9697: 0x6CAB, //CJK UNIFIED IDEOGRAPH - 0x9698: 0x8FC4, //CJK UNIFIED IDEOGRAPH - 0x9699: 0x4FAD, //CJK UNIFIED IDEOGRAPH - 0x969A: 0x7E6D, //CJK UNIFIED IDEOGRAPH - 0x969B: 0x9EBF, //CJK UNIFIED IDEOGRAPH - 0x969C: 0x4E07, //CJK UNIFIED IDEOGRAPH - 0x969D: 0x6162, //CJK UNIFIED IDEOGRAPH - 0x969E: 0x6E80, //CJK UNIFIED IDEOGRAPH - 0x969F: 0x6F2B, //CJK UNIFIED IDEOGRAPH - 0x96A0: 0x8513, //CJK UNIFIED IDEOGRAPH - 0x96A1: 0x5473, //CJK UNIFIED IDEOGRAPH - 0x96A2: 0x672A, //CJK UNIFIED IDEOGRAPH - 0x96A3: 0x9B45, //CJK UNIFIED IDEOGRAPH - 0x96A4: 0x5DF3, //CJK UNIFIED IDEOGRAPH - 0x96A5: 0x7B95, //CJK UNIFIED IDEOGRAPH - 0x96A6: 0x5CAC, //CJK UNIFIED IDEOGRAPH - 0x96A7: 0x5BC6, //CJK UNIFIED IDEOGRAPH - 0x96A8: 0x871C, //CJK UNIFIED IDEOGRAPH - 0x96A9: 0x6E4A, //CJK UNIFIED IDEOGRAPH - 0x96AA: 0x84D1, //CJK UNIFIED IDEOGRAPH - 0x96AB: 0x7A14, //CJK UNIFIED IDEOGRAPH - 0x96AC: 0x8108, //CJK UNIFIED IDEOGRAPH - 0x96AD: 0x5999, //CJK UNIFIED IDEOGRAPH - 0x96AE: 0x7C8D, //CJK UNIFIED IDEOGRAPH - 0x96AF: 0x6C11, //CJK UNIFIED IDEOGRAPH - 0x96B0: 0x7720, //CJK UNIFIED IDEOGRAPH - 0x96B1: 0x52D9, //CJK UNIFIED IDEOGRAPH - 0x96B2: 0x5922, //CJK UNIFIED IDEOGRAPH - 0x96B3: 0x7121, //CJK UNIFIED IDEOGRAPH - 0x96B4: 0x725F, //CJK UNIFIED IDEOGRAPH - 0x96B5: 0x77DB, //CJK UNIFIED IDEOGRAPH - 0x96B6: 0x9727, //CJK UNIFIED IDEOGRAPH - 0x96B7: 0x9D61, //CJK UNIFIED IDEOGRAPH - 0x96B8: 0x690B, //CJK UNIFIED IDEOGRAPH - 0x96B9: 0x5A7F, //CJK UNIFIED IDEOGRAPH - 0x96BA: 0x5A18, //CJK UNIFIED IDEOGRAPH - 0x96BB: 0x51A5, //CJK UNIFIED IDEOGRAPH - 0x96BC: 0x540D, //CJK UNIFIED IDEOGRAPH - 0x96BD: 0x547D, //CJK UNIFIED IDEOGRAPH - 0x96BE: 0x660E, //CJK UNIFIED IDEOGRAPH - 0x96BF: 0x76DF, //CJK UNIFIED IDEOGRAPH - 0x96C0: 0x8FF7, //CJK UNIFIED IDEOGRAPH - 0x96C1: 0x9298, //CJK UNIFIED IDEOGRAPH - 0x96C2: 0x9CF4, //CJK UNIFIED IDEOGRAPH - 0x96C3: 0x59EA, //CJK UNIFIED IDEOGRAPH - 0x96C4: 0x725D, //CJK UNIFIED IDEOGRAPH - 0x96C5: 0x6EC5, //CJK UNIFIED IDEOGRAPH - 0x96C6: 0x514D, //CJK UNIFIED IDEOGRAPH - 0x96C7: 0x68C9, //CJK UNIFIED IDEOGRAPH - 0x96C8: 0x7DBF, //CJK UNIFIED IDEOGRAPH - 0x96C9: 0x7DEC, //CJK UNIFIED IDEOGRAPH - 0x96CA: 0x9762, //CJK UNIFIED IDEOGRAPH - 0x96CB: 0x9EBA, //CJK UNIFIED IDEOGRAPH - 0x96CC: 0x6478, //CJK UNIFIED IDEOGRAPH - 0x96CD: 0x6A21, //CJK UNIFIED IDEOGRAPH - 0x96CE: 0x8302, //CJK UNIFIED IDEOGRAPH - 0x96CF: 0x5984, //CJK UNIFIED IDEOGRAPH - 0x96D0: 0x5B5F, //CJK UNIFIED IDEOGRAPH - 0x96D1: 0x6BDB, //CJK UNIFIED IDEOGRAPH - 0x96D2: 0x731B, //CJK UNIFIED IDEOGRAPH - 0x96D3: 0x76F2, //CJK UNIFIED IDEOGRAPH - 0x96D4: 0x7DB2, //CJK UNIFIED IDEOGRAPH - 0x96D5: 0x8017, //CJK UNIFIED IDEOGRAPH - 0x96D6: 0x8499, //CJK UNIFIED IDEOGRAPH - 0x96D7: 0x5132, //CJK UNIFIED IDEOGRAPH - 0x96D8: 0x6728, //CJK UNIFIED IDEOGRAPH - 0x96D9: 0x9ED9, //CJK UNIFIED IDEOGRAPH - 0x96DA: 0x76EE, //CJK UNIFIED IDEOGRAPH - 0x96DB: 0x6762, //CJK UNIFIED IDEOGRAPH - 0x96DC: 0x52FF, //CJK UNIFIED IDEOGRAPH - 0x96DD: 0x9905, //CJK UNIFIED IDEOGRAPH - 0x96DE: 0x5C24, //CJK UNIFIED IDEOGRAPH - 0x96DF: 0x623B, //CJK UNIFIED IDEOGRAPH - 0x96E0: 0x7C7E, //CJK UNIFIED IDEOGRAPH - 0x96E1: 0x8CB0, //CJK UNIFIED IDEOGRAPH - 0x96E2: 0x554F, //CJK UNIFIED IDEOGRAPH - 0x96E3: 0x60B6, //CJK UNIFIED IDEOGRAPH - 0x96E4: 0x7D0B, //CJK UNIFIED IDEOGRAPH - 0x96E5: 0x9580, //CJK UNIFIED IDEOGRAPH - 0x96E6: 0x5301, //CJK UNIFIED IDEOGRAPH - 0x96E7: 0x4E5F, //CJK UNIFIED IDEOGRAPH - 0x96E8: 0x51B6, //CJK UNIFIED IDEOGRAPH - 0x96E9: 0x591C, //CJK UNIFIED IDEOGRAPH - 0x96EA: 0x723A, //CJK UNIFIED IDEOGRAPH - 0x96EB: 0x8036, //CJK UNIFIED IDEOGRAPH - 0x96EC: 0x91CE, //CJK UNIFIED IDEOGRAPH - 0x96ED: 0x5F25, //CJK UNIFIED IDEOGRAPH - 0x96EE: 0x77E2, //CJK UNIFIED IDEOGRAPH - 0x96EF: 0x5384, //CJK UNIFIED IDEOGRAPH - 0x96F0: 0x5F79, //CJK UNIFIED IDEOGRAPH - 0x96F1: 0x7D04, //CJK UNIFIED IDEOGRAPH - 0x96F2: 0x85AC, //CJK UNIFIED IDEOGRAPH - 0x96F3: 0x8A33, //CJK UNIFIED IDEOGRAPH - 0x96F4: 0x8E8D, //CJK UNIFIED IDEOGRAPH - 0x96F5: 0x9756, //CJK UNIFIED IDEOGRAPH - 0x96F6: 0x67F3, //CJK UNIFIED IDEOGRAPH - 0x96F7: 0x85AE, //CJK UNIFIED IDEOGRAPH - 0x96F8: 0x9453, //CJK UNIFIED IDEOGRAPH - 0x96F9: 0x6109, //CJK UNIFIED IDEOGRAPH - 0x96FA: 0x6108, //CJK UNIFIED IDEOGRAPH - 0x96FB: 0x6CB9, //CJK UNIFIED IDEOGRAPH - 0x96FC: 0x7652, //CJK UNIFIED IDEOGRAPH - 0x9740: 0x8AED, //CJK UNIFIED IDEOGRAPH - 0x9741: 0x8F38, //CJK UNIFIED IDEOGRAPH - 0x9742: 0x552F, //CJK UNIFIED IDEOGRAPH - 0x9743: 0x4F51, //CJK UNIFIED IDEOGRAPH - 0x9744: 0x512A, //CJK UNIFIED IDEOGRAPH - 0x9745: 0x52C7, //CJK UNIFIED IDEOGRAPH - 0x9746: 0x53CB, //CJK UNIFIED IDEOGRAPH - 0x9747: 0x5BA5, //CJK UNIFIED IDEOGRAPH - 0x9748: 0x5E7D, //CJK UNIFIED IDEOGRAPH - 0x9749: 0x60A0, //CJK UNIFIED IDEOGRAPH - 0x974A: 0x6182, //CJK UNIFIED IDEOGRAPH - 0x974B: 0x63D6, //CJK UNIFIED IDEOGRAPH - 0x974C: 0x6709, //CJK UNIFIED IDEOGRAPH - 0x974D: 0x67DA, //CJK UNIFIED IDEOGRAPH - 0x974E: 0x6E67, //CJK UNIFIED IDEOGRAPH - 0x974F: 0x6D8C, //CJK UNIFIED IDEOGRAPH - 0x9750: 0x7336, //CJK UNIFIED IDEOGRAPH - 0x9751: 0x7337, //CJK UNIFIED IDEOGRAPH - 0x9752: 0x7531, //CJK UNIFIED IDEOGRAPH - 0x9753: 0x7950, //CJK UNIFIED IDEOGRAPH - 0x9754: 0x88D5, //CJK UNIFIED IDEOGRAPH - 0x9755: 0x8A98, //CJK UNIFIED IDEOGRAPH - 0x9756: 0x904A, //CJK UNIFIED IDEOGRAPH - 0x9757: 0x9091, //CJK UNIFIED IDEOGRAPH - 0x9758: 0x90F5, //CJK UNIFIED IDEOGRAPH - 0x9759: 0x96C4, //CJK UNIFIED IDEOGRAPH - 0x975A: 0x878D, //CJK UNIFIED IDEOGRAPH - 0x975B: 0x5915, //CJK UNIFIED IDEOGRAPH - 0x975C: 0x4E88, //CJK UNIFIED IDEOGRAPH - 0x975D: 0x4F59, //CJK UNIFIED IDEOGRAPH - 0x975E: 0x4E0E, //CJK UNIFIED IDEOGRAPH - 0x975F: 0x8A89, //CJK UNIFIED IDEOGRAPH - 0x9760: 0x8F3F, //CJK UNIFIED IDEOGRAPH - 0x9761: 0x9810, //CJK UNIFIED IDEOGRAPH - 0x9762: 0x50AD, //CJK UNIFIED IDEOGRAPH - 0x9763: 0x5E7C, //CJK UNIFIED IDEOGRAPH - 0x9764: 0x5996, //CJK UNIFIED IDEOGRAPH - 0x9765: 0x5BB9, //CJK UNIFIED IDEOGRAPH - 0x9766: 0x5EB8, //CJK UNIFIED IDEOGRAPH - 0x9767: 0x63DA, //CJK UNIFIED IDEOGRAPH - 0x9768: 0x63FA, //CJK UNIFIED IDEOGRAPH - 0x9769: 0x64C1, //CJK UNIFIED IDEOGRAPH - 0x976A: 0x66DC, //CJK UNIFIED IDEOGRAPH - 0x976B: 0x694A, //CJK UNIFIED IDEOGRAPH - 0x976C: 0x69D8, //CJK UNIFIED IDEOGRAPH - 0x976D: 0x6D0B, //CJK UNIFIED IDEOGRAPH - 0x976E: 0x6EB6, //CJK UNIFIED IDEOGRAPH - 0x976F: 0x7194, //CJK UNIFIED IDEOGRAPH - 0x9770: 0x7528, //CJK UNIFIED IDEOGRAPH - 0x9771: 0x7AAF, //CJK UNIFIED IDEOGRAPH - 0x9772: 0x7F8A, //CJK UNIFIED IDEOGRAPH - 0x9773: 0x8000, //CJK UNIFIED IDEOGRAPH - 0x9774: 0x8449, //CJK UNIFIED IDEOGRAPH - 0x9775: 0x84C9, //CJK UNIFIED IDEOGRAPH - 0x9776: 0x8981, //CJK UNIFIED IDEOGRAPH - 0x9777: 0x8B21, //CJK UNIFIED IDEOGRAPH - 0x9778: 0x8E0A, //CJK UNIFIED IDEOGRAPH - 0x9779: 0x9065, //CJK UNIFIED IDEOGRAPH - 0x977A: 0x967D, //CJK UNIFIED IDEOGRAPH - 0x977B: 0x990A, //CJK UNIFIED IDEOGRAPH - 0x977C: 0x617E, //CJK UNIFIED IDEOGRAPH - 0x977D: 0x6291, //CJK UNIFIED IDEOGRAPH - 0x977E: 0x6B32, //CJK UNIFIED IDEOGRAPH - 0x9780: 0x6C83, //CJK UNIFIED IDEOGRAPH - 0x9781: 0x6D74, //CJK UNIFIED IDEOGRAPH - 0x9782: 0x7FCC, //CJK UNIFIED IDEOGRAPH - 0x9783: 0x7FFC, //CJK UNIFIED IDEOGRAPH - 0x9784: 0x6DC0, //CJK UNIFIED IDEOGRAPH - 0x9785: 0x7F85, //CJK UNIFIED IDEOGRAPH - 0x9786: 0x87BA, //CJK UNIFIED IDEOGRAPH - 0x9787: 0x88F8, //CJK UNIFIED IDEOGRAPH - 0x9788: 0x6765, //CJK UNIFIED IDEOGRAPH - 0x9789: 0x83B1, //CJK UNIFIED IDEOGRAPH - 0x978A: 0x983C, //CJK UNIFIED IDEOGRAPH - 0x978B: 0x96F7, //CJK UNIFIED IDEOGRAPH - 0x978C: 0x6D1B, //CJK UNIFIED IDEOGRAPH - 0x978D: 0x7D61, //CJK UNIFIED IDEOGRAPH - 0x978E: 0x843D, //CJK UNIFIED IDEOGRAPH - 0x978F: 0x916A, //CJK UNIFIED IDEOGRAPH - 0x9790: 0x4E71, //CJK UNIFIED IDEOGRAPH - 0x9791: 0x5375, //CJK UNIFIED IDEOGRAPH - 0x9792: 0x5D50, //CJK UNIFIED IDEOGRAPH - 0x9793: 0x6B04, //CJK UNIFIED IDEOGRAPH - 0x9794: 0x6FEB, //CJK UNIFIED IDEOGRAPH - 0x9795: 0x85CD, //CJK UNIFIED IDEOGRAPH - 0x9796: 0x862D, //CJK UNIFIED IDEOGRAPH - 0x9797: 0x89A7, //CJK UNIFIED IDEOGRAPH - 0x9798: 0x5229, //CJK UNIFIED IDEOGRAPH - 0x9799: 0x540F, //CJK UNIFIED IDEOGRAPH - 0x979A: 0x5C65, //CJK UNIFIED IDEOGRAPH - 0x979B: 0x674E, //CJK UNIFIED IDEOGRAPH - 0x979C: 0x68A8, //CJK UNIFIED IDEOGRAPH - 0x979D: 0x7406, //CJK UNIFIED IDEOGRAPH - 0x979E: 0x7483, //CJK UNIFIED IDEOGRAPH - 0x979F: 0x75E2, //CJK UNIFIED IDEOGRAPH - 0x97A0: 0x88CF, //CJK UNIFIED IDEOGRAPH - 0x97A1: 0x88E1, //CJK UNIFIED IDEOGRAPH - 0x97A2: 0x91CC, //CJK UNIFIED IDEOGRAPH - 0x97A3: 0x96E2, //CJK UNIFIED IDEOGRAPH - 0x97A4: 0x9678, //CJK UNIFIED IDEOGRAPH - 0x97A5: 0x5F8B, //CJK UNIFIED IDEOGRAPH - 0x97A6: 0x7387, //CJK UNIFIED IDEOGRAPH - 0x97A7: 0x7ACB, //CJK UNIFIED IDEOGRAPH - 0x97A8: 0x844E, //CJK UNIFIED IDEOGRAPH - 0x97A9: 0x63A0, //CJK UNIFIED IDEOGRAPH - 0x97AA: 0x7565, //CJK UNIFIED IDEOGRAPH - 0x97AB: 0x5289, //CJK UNIFIED IDEOGRAPH - 0x97AC: 0x6D41, //CJK UNIFIED IDEOGRAPH - 0x97AD: 0x6E9C, //CJK UNIFIED IDEOGRAPH - 0x97AE: 0x7409, //CJK UNIFIED IDEOGRAPH - 0x97AF: 0x7559, //CJK UNIFIED IDEOGRAPH - 0x97B0: 0x786B, //CJK UNIFIED IDEOGRAPH - 0x97B1: 0x7C92, //CJK UNIFIED IDEOGRAPH - 0x97B2: 0x9686, //CJK UNIFIED IDEOGRAPH - 0x97B3: 0x7ADC, //CJK UNIFIED IDEOGRAPH - 0x97B4: 0x9F8D, //CJK UNIFIED IDEOGRAPH - 0x97B5: 0x4FB6, //CJK UNIFIED IDEOGRAPH - 0x97B6: 0x616E, //CJK UNIFIED IDEOGRAPH - 0x97B7: 0x65C5, //CJK UNIFIED IDEOGRAPH - 0x97B8: 0x865C, //CJK UNIFIED IDEOGRAPH - 0x97B9: 0x4E86, //CJK UNIFIED IDEOGRAPH - 0x97BA: 0x4EAE, //CJK UNIFIED IDEOGRAPH - 0x97BB: 0x50DA, //CJK UNIFIED IDEOGRAPH - 0x97BC: 0x4E21, //CJK UNIFIED IDEOGRAPH - 0x97BD: 0x51CC, //CJK UNIFIED IDEOGRAPH - 0x97BE: 0x5BEE, //CJK UNIFIED IDEOGRAPH - 0x97BF: 0x6599, //CJK UNIFIED IDEOGRAPH - 0x97C0: 0x6881, //CJK UNIFIED IDEOGRAPH - 0x97C1: 0x6DBC, //CJK UNIFIED IDEOGRAPH - 0x97C2: 0x731F, //CJK UNIFIED IDEOGRAPH - 0x97C3: 0x7642, //CJK UNIFIED IDEOGRAPH - 0x97C4: 0x77AD, //CJK UNIFIED IDEOGRAPH - 0x97C5: 0x7A1C, //CJK UNIFIED IDEOGRAPH - 0x97C6: 0x7CE7, //CJK UNIFIED IDEOGRAPH - 0x97C7: 0x826F, //CJK UNIFIED IDEOGRAPH - 0x97C8: 0x8AD2, //CJK UNIFIED IDEOGRAPH - 0x97C9: 0x907C, //CJK UNIFIED IDEOGRAPH - 0x97CA: 0x91CF, //CJK UNIFIED IDEOGRAPH - 0x97CB: 0x9675, //CJK UNIFIED IDEOGRAPH - 0x97CC: 0x9818, //CJK UNIFIED IDEOGRAPH - 0x97CD: 0x529B, //CJK UNIFIED IDEOGRAPH - 0x97CE: 0x7DD1, //CJK UNIFIED IDEOGRAPH - 0x97CF: 0x502B, //CJK UNIFIED IDEOGRAPH - 0x97D0: 0x5398, //CJK UNIFIED IDEOGRAPH - 0x97D1: 0x6797, //CJK UNIFIED IDEOGRAPH - 0x97D2: 0x6DCB, //CJK UNIFIED IDEOGRAPH - 0x97D3: 0x71D0, //CJK UNIFIED IDEOGRAPH - 0x97D4: 0x7433, //CJK UNIFIED IDEOGRAPH - 0x97D5: 0x81E8, //CJK UNIFIED IDEOGRAPH - 0x97D6: 0x8F2A, //CJK UNIFIED IDEOGRAPH - 0x97D7: 0x96A3, //CJK UNIFIED IDEOGRAPH - 0x97D8: 0x9C57, //CJK UNIFIED IDEOGRAPH - 0x97D9: 0x9E9F, //CJK UNIFIED IDEOGRAPH - 0x97DA: 0x7460, //CJK UNIFIED IDEOGRAPH - 0x97DB: 0x5841, //CJK UNIFIED IDEOGRAPH - 0x97DC: 0x6D99, //CJK UNIFIED IDEOGRAPH - 0x97DD: 0x7D2F, //CJK UNIFIED IDEOGRAPH - 0x97DE: 0x985E, //CJK UNIFIED IDEOGRAPH - 0x97DF: 0x4EE4, //CJK UNIFIED IDEOGRAPH - 0x97E0: 0x4F36, //CJK UNIFIED IDEOGRAPH - 0x97E1: 0x4F8B, //CJK UNIFIED IDEOGRAPH - 0x97E2: 0x51B7, //CJK UNIFIED IDEOGRAPH - 0x97E3: 0x52B1, //CJK UNIFIED IDEOGRAPH - 0x97E4: 0x5DBA, //CJK UNIFIED IDEOGRAPH - 0x97E5: 0x601C, //CJK UNIFIED IDEOGRAPH - 0x97E6: 0x73B2, //CJK UNIFIED IDEOGRAPH - 0x97E7: 0x793C, //CJK UNIFIED IDEOGRAPH - 0x97E8: 0x82D3, //CJK UNIFIED IDEOGRAPH - 0x97E9: 0x9234, //CJK UNIFIED IDEOGRAPH - 0x97EA: 0x96B7, //CJK UNIFIED IDEOGRAPH - 0x97EB: 0x96F6, //CJK UNIFIED IDEOGRAPH - 0x97EC: 0x970A, //CJK UNIFIED IDEOGRAPH - 0x97ED: 0x9E97, //CJK UNIFIED IDEOGRAPH - 0x97EE: 0x9F62, //CJK UNIFIED IDEOGRAPH - 0x97EF: 0x66A6, //CJK UNIFIED IDEOGRAPH - 0x97F0: 0x6B74, //CJK UNIFIED IDEOGRAPH - 0x97F1: 0x5217, //CJK UNIFIED IDEOGRAPH - 0x97F2: 0x52A3, //CJK UNIFIED IDEOGRAPH - 0x97F3: 0x70C8, //CJK UNIFIED IDEOGRAPH - 0x97F4: 0x88C2, //CJK UNIFIED IDEOGRAPH - 0x97F5: 0x5EC9, //CJK UNIFIED IDEOGRAPH - 0x97F6: 0x604B, //CJK UNIFIED IDEOGRAPH - 0x97F7: 0x6190, //CJK UNIFIED IDEOGRAPH - 0x97F8: 0x6F23, //CJK UNIFIED IDEOGRAPH - 0x97F9: 0x7149, //CJK UNIFIED IDEOGRAPH - 0x97FA: 0x7C3E, //CJK UNIFIED IDEOGRAPH - 0x97FB: 0x7DF4, //CJK UNIFIED IDEOGRAPH - 0x97FC: 0x806F, //CJK UNIFIED IDEOGRAPH - 0x9840: 0x84EE, //CJK UNIFIED IDEOGRAPH - 0x9841: 0x9023, //CJK UNIFIED IDEOGRAPH - 0x9842: 0x932C, //CJK UNIFIED IDEOGRAPH - 0x9843: 0x5442, //CJK UNIFIED IDEOGRAPH - 0x9844: 0x9B6F, //CJK UNIFIED IDEOGRAPH - 0x9845: 0x6AD3, //CJK UNIFIED IDEOGRAPH - 0x9846: 0x7089, //CJK UNIFIED IDEOGRAPH - 0x9847: 0x8CC2, //CJK UNIFIED IDEOGRAPH - 0x9848: 0x8DEF, //CJK UNIFIED IDEOGRAPH - 0x9849: 0x9732, //CJK UNIFIED IDEOGRAPH - 0x984A: 0x52B4, //CJK UNIFIED IDEOGRAPH - 0x984B: 0x5A41, //CJK UNIFIED IDEOGRAPH - 0x984C: 0x5ECA, //CJK UNIFIED IDEOGRAPH - 0x984D: 0x5F04, //CJK UNIFIED IDEOGRAPH - 0x984E: 0x6717, //CJK UNIFIED IDEOGRAPH - 0x984F: 0x697C, //CJK UNIFIED IDEOGRAPH - 0x9850: 0x6994, //CJK UNIFIED IDEOGRAPH - 0x9851: 0x6D6A, //CJK UNIFIED IDEOGRAPH - 0x9852: 0x6F0F, //CJK UNIFIED IDEOGRAPH - 0x9853: 0x7262, //CJK UNIFIED IDEOGRAPH - 0x9854: 0x72FC, //CJK UNIFIED IDEOGRAPH - 0x9855: 0x7BED, //CJK UNIFIED IDEOGRAPH - 0x9856: 0x8001, //CJK UNIFIED IDEOGRAPH - 0x9857: 0x807E, //CJK UNIFIED IDEOGRAPH - 0x9858: 0x874B, //CJK UNIFIED IDEOGRAPH - 0x9859: 0x90CE, //CJK UNIFIED IDEOGRAPH - 0x985A: 0x516D, //CJK UNIFIED IDEOGRAPH - 0x985B: 0x9E93, //CJK UNIFIED IDEOGRAPH - 0x985C: 0x7984, //CJK UNIFIED IDEOGRAPH - 0x985D: 0x808B, //CJK UNIFIED IDEOGRAPH - 0x985E: 0x9332, //CJK UNIFIED IDEOGRAPH - 0x985F: 0x8AD6, //CJK UNIFIED IDEOGRAPH - 0x9860: 0x502D, //CJK UNIFIED IDEOGRAPH - 0x9861: 0x548C, //CJK UNIFIED IDEOGRAPH - 0x9862: 0x8A71, //CJK UNIFIED IDEOGRAPH - 0x9863: 0x6B6A, //CJK UNIFIED IDEOGRAPH - 0x9864: 0x8CC4, //CJK UNIFIED IDEOGRAPH - 0x9865: 0x8107, //CJK UNIFIED IDEOGRAPH - 0x9866: 0x60D1, //CJK UNIFIED IDEOGRAPH - 0x9867: 0x67A0, //CJK UNIFIED IDEOGRAPH - 0x9868: 0x9DF2, //CJK UNIFIED IDEOGRAPH - 0x9869: 0x4E99, //CJK UNIFIED IDEOGRAPH - 0x986A: 0x4E98, //CJK UNIFIED IDEOGRAPH - 0x986B: 0x9C10, //CJK UNIFIED IDEOGRAPH - 0x986C: 0x8A6B, //CJK UNIFIED IDEOGRAPH - 0x986D: 0x85C1, //CJK UNIFIED IDEOGRAPH - 0x986E: 0x8568, //CJK UNIFIED IDEOGRAPH - 0x986F: 0x6900, //CJK UNIFIED IDEOGRAPH - 0x9870: 0x6E7E, //CJK UNIFIED IDEOGRAPH - 0x9871: 0x7897, //CJK UNIFIED IDEOGRAPH - 0x9872: 0x8155, //CJK UNIFIED IDEOGRAPH - 0x989F: 0x5F0C, //CJK UNIFIED IDEOGRAPH - 0x98A0: 0x4E10, //CJK UNIFIED IDEOGRAPH - 0x98A1: 0x4E15, //CJK UNIFIED IDEOGRAPH - 0x98A2: 0x4E2A, //CJK UNIFIED IDEOGRAPH - 0x98A3: 0x4E31, //CJK UNIFIED IDEOGRAPH - 0x98A4: 0x4E36, //CJK UNIFIED IDEOGRAPH - 0x98A5: 0x4E3C, //CJK UNIFIED IDEOGRAPH - 0x98A6: 0x4E3F, //CJK UNIFIED IDEOGRAPH - 0x98A7: 0x4E42, //CJK UNIFIED IDEOGRAPH - 0x98A8: 0x4E56, //CJK UNIFIED IDEOGRAPH - 0x98A9: 0x4E58, //CJK UNIFIED IDEOGRAPH - 0x98AA: 0x4E82, //CJK UNIFIED IDEOGRAPH - 0x98AB: 0x4E85, //CJK UNIFIED IDEOGRAPH - 0x98AC: 0x8C6B, //CJK UNIFIED IDEOGRAPH - 0x98AD: 0x4E8A, //CJK UNIFIED IDEOGRAPH - 0x98AE: 0x8212, //CJK UNIFIED IDEOGRAPH - 0x98AF: 0x5F0D, //CJK UNIFIED IDEOGRAPH - 0x98B0: 0x4E8E, //CJK UNIFIED IDEOGRAPH - 0x98B1: 0x4E9E, //CJK UNIFIED IDEOGRAPH - 0x98B2: 0x4E9F, //CJK UNIFIED IDEOGRAPH - 0x98B3: 0x4EA0, //CJK UNIFIED IDEOGRAPH - 0x98B4: 0x4EA2, //CJK UNIFIED IDEOGRAPH - 0x98B5: 0x4EB0, //CJK UNIFIED IDEOGRAPH - 0x98B6: 0x4EB3, //CJK UNIFIED IDEOGRAPH - 0x98B7: 0x4EB6, //CJK UNIFIED IDEOGRAPH - 0x98B8: 0x4ECE, //CJK UNIFIED IDEOGRAPH - 0x98B9: 0x4ECD, //CJK UNIFIED IDEOGRAPH - 0x98BA: 0x4EC4, //CJK UNIFIED IDEOGRAPH - 0x98BB: 0x4EC6, //CJK UNIFIED IDEOGRAPH - 0x98BC: 0x4EC2, //CJK UNIFIED IDEOGRAPH - 0x98BD: 0x4ED7, //CJK UNIFIED IDEOGRAPH - 0x98BE: 0x4EDE, //CJK UNIFIED IDEOGRAPH - 0x98BF: 0x4EED, //CJK UNIFIED IDEOGRAPH - 0x98C0: 0x4EDF, //CJK UNIFIED IDEOGRAPH - 0x98C1: 0x4EF7, //CJK UNIFIED IDEOGRAPH - 0x98C2: 0x4F09, //CJK UNIFIED IDEOGRAPH - 0x98C3: 0x4F5A, //CJK UNIFIED IDEOGRAPH - 0x98C4: 0x4F30, //CJK UNIFIED IDEOGRAPH - 0x98C5: 0x4F5B, //CJK UNIFIED IDEOGRAPH - 0x98C6: 0x4F5D, //CJK UNIFIED IDEOGRAPH - 0x98C7: 0x4F57, //CJK UNIFIED IDEOGRAPH - 0x98C8: 0x4F47, //CJK UNIFIED IDEOGRAPH - 0x98C9: 0x4F76, //CJK UNIFIED IDEOGRAPH - 0x98CA: 0x4F88, //CJK UNIFIED IDEOGRAPH - 0x98CB: 0x4F8F, //CJK UNIFIED IDEOGRAPH - 0x98CC: 0x4F98, //CJK UNIFIED IDEOGRAPH - 0x98CD: 0x4F7B, //CJK UNIFIED IDEOGRAPH - 0x98CE: 0x4F69, //CJK UNIFIED IDEOGRAPH - 0x98CF: 0x4F70, //CJK UNIFIED IDEOGRAPH - 0x98D0: 0x4F91, //CJK UNIFIED IDEOGRAPH - 0x98D1: 0x4F6F, //CJK UNIFIED IDEOGRAPH - 0x98D2: 0x4F86, //CJK UNIFIED IDEOGRAPH - 0x98D3: 0x4F96, //CJK UNIFIED IDEOGRAPH - 0x98D4: 0x5118, //CJK UNIFIED IDEOGRAPH - 0x98D5: 0x4FD4, //CJK UNIFIED IDEOGRAPH - 0x98D6: 0x4FDF, //CJK UNIFIED IDEOGRAPH - 0x98D7: 0x4FCE, //CJK UNIFIED IDEOGRAPH - 0x98D8: 0x4FD8, //CJK UNIFIED IDEOGRAPH - 0x98D9: 0x4FDB, //CJK UNIFIED IDEOGRAPH - 0x98DA: 0x4FD1, //CJK UNIFIED IDEOGRAPH - 0x98DB: 0x4FDA, //CJK UNIFIED IDEOGRAPH - 0x98DC: 0x4FD0, //CJK UNIFIED IDEOGRAPH - 0x98DD: 0x4FE4, //CJK UNIFIED IDEOGRAPH - 0x98DE: 0x4FE5, //CJK UNIFIED IDEOGRAPH - 0x98DF: 0x501A, //CJK UNIFIED IDEOGRAPH - 0x98E0: 0x5028, //CJK UNIFIED IDEOGRAPH - 0x98E1: 0x5014, //CJK UNIFIED IDEOGRAPH - 0x98E2: 0x502A, //CJK UNIFIED IDEOGRAPH - 0x98E3: 0x5025, //CJK UNIFIED IDEOGRAPH - 0x98E4: 0x5005, //CJK UNIFIED IDEOGRAPH - 0x98E5: 0x4F1C, //CJK UNIFIED IDEOGRAPH - 0x98E6: 0x4FF6, //CJK UNIFIED IDEOGRAPH - 0x98E7: 0x5021, //CJK UNIFIED IDEOGRAPH - 0x98E8: 0x5029, //CJK UNIFIED IDEOGRAPH - 0x98E9: 0x502C, //CJK UNIFIED IDEOGRAPH - 0x98EA: 0x4FFE, //CJK UNIFIED IDEOGRAPH - 0x98EB: 0x4FEF, //CJK UNIFIED IDEOGRAPH - 0x98EC: 0x5011, //CJK UNIFIED IDEOGRAPH - 0x98ED: 0x5006, //CJK UNIFIED IDEOGRAPH - 0x98EE: 0x5043, //CJK UNIFIED IDEOGRAPH - 0x98EF: 0x5047, //CJK UNIFIED IDEOGRAPH - 0x98F0: 0x6703, //CJK UNIFIED IDEOGRAPH - 0x98F1: 0x5055, //CJK UNIFIED IDEOGRAPH - 0x98F2: 0x5050, //CJK UNIFIED IDEOGRAPH - 0x98F3: 0x5048, //CJK UNIFIED IDEOGRAPH - 0x98F4: 0x505A, //CJK UNIFIED IDEOGRAPH - 0x98F5: 0x5056, //CJK UNIFIED IDEOGRAPH - 0x98F6: 0x506C, //CJK UNIFIED IDEOGRAPH - 0x98F7: 0x5078, //CJK UNIFIED IDEOGRAPH - 0x98F8: 0x5080, //CJK UNIFIED IDEOGRAPH - 0x98F9: 0x509A, //CJK UNIFIED IDEOGRAPH - 0x98FA: 0x5085, //CJK UNIFIED IDEOGRAPH - 0x98FB: 0x50B4, //CJK UNIFIED IDEOGRAPH - 0x98FC: 0x50B2, //CJK UNIFIED IDEOGRAPH - 0x9940: 0x50C9, //CJK UNIFIED IDEOGRAPH - 0x9941: 0x50CA, //CJK UNIFIED IDEOGRAPH - 0x9942: 0x50B3, //CJK UNIFIED IDEOGRAPH - 0x9943: 0x50C2, //CJK UNIFIED IDEOGRAPH - 0x9944: 0x50D6, //CJK UNIFIED IDEOGRAPH - 0x9945: 0x50DE, //CJK UNIFIED IDEOGRAPH - 0x9946: 0x50E5, //CJK UNIFIED IDEOGRAPH - 0x9947: 0x50ED, //CJK UNIFIED IDEOGRAPH - 0x9948: 0x50E3, //CJK UNIFIED IDEOGRAPH - 0x9949: 0x50EE, //CJK UNIFIED IDEOGRAPH - 0x994A: 0x50F9, //CJK UNIFIED IDEOGRAPH - 0x994B: 0x50F5, //CJK UNIFIED IDEOGRAPH - 0x994C: 0x5109, //CJK UNIFIED IDEOGRAPH - 0x994D: 0x5101, //CJK UNIFIED IDEOGRAPH - 0x994E: 0x5102, //CJK UNIFIED IDEOGRAPH - 0x994F: 0x5116, //CJK UNIFIED IDEOGRAPH - 0x9950: 0x5115, //CJK UNIFIED IDEOGRAPH - 0x9951: 0x5114, //CJK UNIFIED IDEOGRAPH - 0x9952: 0x511A, //CJK UNIFIED IDEOGRAPH - 0x9953: 0x5121, //CJK UNIFIED IDEOGRAPH - 0x9954: 0x513A, //CJK UNIFIED IDEOGRAPH - 0x9955: 0x5137, //CJK UNIFIED IDEOGRAPH - 0x9956: 0x513C, //CJK UNIFIED IDEOGRAPH - 0x9957: 0x513B, //CJK UNIFIED IDEOGRAPH - 0x9958: 0x513F, //CJK UNIFIED IDEOGRAPH - 0x9959: 0x5140, //CJK UNIFIED IDEOGRAPH - 0x995A: 0x5152, //CJK UNIFIED IDEOGRAPH - 0x995B: 0x514C, //CJK UNIFIED IDEOGRAPH - 0x995C: 0x5154, //CJK UNIFIED IDEOGRAPH - 0x995D: 0x5162, //CJK UNIFIED IDEOGRAPH - 0x995E: 0x7AF8, //CJK UNIFIED IDEOGRAPH - 0x995F: 0x5169, //CJK UNIFIED IDEOGRAPH - 0x9960: 0x516A, //CJK UNIFIED IDEOGRAPH - 0x9961: 0x516E, //CJK UNIFIED IDEOGRAPH - 0x9962: 0x5180, //CJK UNIFIED IDEOGRAPH - 0x9963: 0x5182, //CJK UNIFIED IDEOGRAPH - 0x9964: 0x56D8, //CJK UNIFIED IDEOGRAPH - 0x9965: 0x518C, //CJK UNIFIED IDEOGRAPH - 0x9966: 0x5189, //CJK UNIFIED IDEOGRAPH - 0x9967: 0x518F, //CJK UNIFIED IDEOGRAPH - 0x9968: 0x5191, //CJK UNIFIED IDEOGRAPH - 0x9969: 0x5193, //CJK UNIFIED IDEOGRAPH - 0x996A: 0x5195, //CJK UNIFIED IDEOGRAPH - 0x996B: 0x5196, //CJK UNIFIED IDEOGRAPH - 0x996C: 0x51A4, //CJK UNIFIED IDEOGRAPH - 0x996D: 0x51A6, //CJK UNIFIED IDEOGRAPH - 0x996E: 0x51A2, //CJK UNIFIED IDEOGRAPH - 0x996F: 0x51A9, //CJK UNIFIED IDEOGRAPH - 0x9970: 0x51AA, //CJK UNIFIED IDEOGRAPH - 0x9971: 0x51AB, //CJK UNIFIED IDEOGRAPH - 0x9972: 0x51B3, //CJK UNIFIED IDEOGRAPH - 0x9973: 0x51B1, //CJK UNIFIED IDEOGRAPH - 0x9974: 0x51B2, //CJK UNIFIED IDEOGRAPH - 0x9975: 0x51B0, //CJK UNIFIED IDEOGRAPH - 0x9976: 0x51B5, //CJK UNIFIED IDEOGRAPH - 0x9977: 0x51BD, //CJK UNIFIED IDEOGRAPH - 0x9978: 0x51C5, //CJK UNIFIED IDEOGRAPH - 0x9979: 0x51C9, //CJK UNIFIED IDEOGRAPH - 0x997A: 0x51DB, //CJK UNIFIED IDEOGRAPH - 0x997B: 0x51E0, //CJK UNIFIED IDEOGRAPH - 0x997C: 0x8655, //CJK UNIFIED IDEOGRAPH - 0x997D: 0x51E9, //CJK UNIFIED IDEOGRAPH - 0x997E: 0x51ED, //CJK UNIFIED IDEOGRAPH - 0x9980: 0x51F0, //CJK UNIFIED IDEOGRAPH - 0x9981: 0x51F5, //CJK UNIFIED IDEOGRAPH - 0x9982: 0x51FE, //CJK UNIFIED IDEOGRAPH - 0x9983: 0x5204, //CJK UNIFIED IDEOGRAPH - 0x9984: 0x520B, //CJK UNIFIED IDEOGRAPH - 0x9985: 0x5214, //CJK UNIFIED IDEOGRAPH - 0x9986: 0x520E, //CJK UNIFIED IDEOGRAPH - 0x9987: 0x5227, //CJK UNIFIED IDEOGRAPH - 0x9988: 0x522A, //CJK UNIFIED IDEOGRAPH - 0x9989: 0x522E, //CJK UNIFIED IDEOGRAPH - 0x998A: 0x5233, //CJK UNIFIED IDEOGRAPH - 0x998B: 0x5239, //CJK UNIFIED IDEOGRAPH - 0x998C: 0x524F, //CJK UNIFIED IDEOGRAPH - 0x998D: 0x5244, //CJK UNIFIED IDEOGRAPH - 0x998E: 0x524B, //CJK UNIFIED IDEOGRAPH - 0x998F: 0x524C, //CJK UNIFIED IDEOGRAPH - 0x9990: 0x525E, //CJK UNIFIED IDEOGRAPH - 0x9991: 0x5254, //CJK UNIFIED IDEOGRAPH - 0x9992: 0x526A, //CJK UNIFIED IDEOGRAPH - 0x9993: 0x5274, //CJK UNIFIED IDEOGRAPH - 0x9994: 0x5269, //CJK UNIFIED IDEOGRAPH - 0x9995: 0x5273, //CJK UNIFIED IDEOGRAPH - 0x9996: 0x527F, //CJK UNIFIED IDEOGRAPH - 0x9997: 0x527D, //CJK UNIFIED IDEOGRAPH - 0x9998: 0x528D, //CJK UNIFIED IDEOGRAPH - 0x9999: 0x5294, //CJK UNIFIED IDEOGRAPH - 0x999A: 0x5292, //CJK UNIFIED IDEOGRAPH - 0x999B: 0x5271, //CJK UNIFIED IDEOGRAPH - 0x999C: 0x5288, //CJK UNIFIED IDEOGRAPH - 0x999D: 0x5291, //CJK UNIFIED IDEOGRAPH - 0x999E: 0x8FA8, //CJK UNIFIED IDEOGRAPH - 0x999F: 0x8FA7, //CJK UNIFIED IDEOGRAPH - 0x99A0: 0x52AC, //CJK UNIFIED IDEOGRAPH - 0x99A1: 0x52AD, //CJK UNIFIED IDEOGRAPH - 0x99A2: 0x52BC, //CJK UNIFIED IDEOGRAPH - 0x99A3: 0x52B5, //CJK UNIFIED IDEOGRAPH - 0x99A4: 0x52C1, //CJK UNIFIED IDEOGRAPH - 0x99A5: 0x52CD, //CJK UNIFIED IDEOGRAPH - 0x99A6: 0x52D7, //CJK UNIFIED IDEOGRAPH - 0x99A7: 0x52DE, //CJK UNIFIED IDEOGRAPH - 0x99A8: 0x52E3, //CJK UNIFIED IDEOGRAPH - 0x99A9: 0x52E6, //CJK UNIFIED IDEOGRAPH - 0x99AA: 0x98ED, //CJK UNIFIED IDEOGRAPH - 0x99AB: 0x52E0, //CJK UNIFIED IDEOGRAPH - 0x99AC: 0x52F3, //CJK UNIFIED IDEOGRAPH - 0x99AD: 0x52F5, //CJK UNIFIED IDEOGRAPH - 0x99AE: 0x52F8, //CJK UNIFIED IDEOGRAPH - 0x99AF: 0x52F9, //CJK UNIFIED IDEOGRAPH - 0x99B0: 0x5306, //CJK UNIFIED IDEOGRAPH - 0x99B1: 0x5308, //CJK UNIFIED IDEOGRAPH - 0x99B2: 0x7538, //CJK UNIFIED IDEOGRAPH - 0x99B3: 0x530D, //CJK UNIFIED IDEOGRAPH - 0x99B4: 0x5310, //CJK UNIFIED IDEOGRAPH - 0x99B5: 0x530F, //CJK UNIFIED IDEOGRAPH - 0x99B6: 0x5315, //CJK UNIFIED IDEOGRAPH - 0x99B7: 0x531A, //CJK UNIFIED IDEOGRAPH - 0x99B8: 0x5323, //CJK UNIFIED IDEOGRAPH - 0x99B9: 0x532F, //CJK UNIFIED IDEOGRAPH - 0x99BA: 0x5331, //CJK UNIFIED IDEOGRAPH - 0x99BB: 0x5333, //CJK UNIFIED IDEOGRAPH - 0x99BC: 0x5338, //CJK UNIFIED IDEOGRAPH - 0x99BD: 0x5340, //CJK UNIFIED IDEOGRAPH - 0x99BE: 0x5346, //CJK UNIFIED IDEOGRAPH - 0x99BF: 0x5345, //CJK UNIFIED IDEOGRAPH - 0x99C0: 0x4E17, //CJK UNIFIED IDEOGRAPH - 0x99C1: 0x5349, //CJK UNIFIED IDEOGRAPH - 0x99C2: 0x534D, //CJK UNIFIED IDEOGRAPH - 0x99C3: 0x51D6, //CJK UNIFIED IDEOGRAPH - 0x99C4: 0x535E, //CJK UNIFIED IDEOGRAPH - 0x99C5: 0x5369, //CJK UNIFIED IDEOGRAPH - 0x99C6: 0x536E, //CJK UNIFIED IDEOGRAPH - 0x99C7: 0x5918, //CJK UNIFIED IDEOGRAPH - 0x99C8: 0x537B, //CJK UNIFIED IDEOGRAPH - 0x99C9: 0x5377, //CJK UNIFIED IDEOGRAPH - 0x99CA: 0x5382, //CJK UNIFIED IDEOGRAPH - 0x99CB: 0x5396, //CJK UNIFIED IDEOGRAPH - 0x99CC: 0x53A0, //CJK UNIFIED IDEOGRAPH - 0x99CD: 0x53A6, //CJK UNIFIED IDEOGRAPH - 0x99CE: 0x53A5, //CJK UNIFIED IDEOGRAPH - 0x99CF: 0x53AE, //CJK UNIFIED IDEOGRAPH - 0x99D0: 0x53B0, //CJK UNIFIED IDEOGRAPH - 0x99D1: 0x53B6, //CJK UNIFIED IDEOGRAPH - 0x99D2: 0x53C3, //CJK UNIFIED IDEOGRAPH - 0x99D3: 0x7C12, //CJK UNIFIED IDEOGRAPH - 0x99D4: 0x96D9, //CJK UNIFIED IDEOGRAPH - 0x99D5: 0x53DF, //CJK UNIFIED IDEOGRAPH - 0x99D6: 0x66FC, //CJK UNIFIED IDEOGRAPH - 0x99D7: 0x71EE, //CJK UNIFIED IDEOGRAPH - 0x99D8: 0x53EE, //CJK UNIFIED IDEOGRAPH - 0x99D9: 0x53E8, //CJK UNIFIED IDEOGRAPH - 0x99DA: 0x53ED, //CJK UNIFIED IDEOGRAPH - 0x99DB: 0x53FA, //CJK UNIFIED IDEOGRAPH - 0x99DC: 0x5401, //CJK UNIFIED IDEOGRAPH - 0x99DD: 0x543D, //CJK UNIFIED IDEOGRAPH - 0x99DE: 0x5440, //CJK UNIFIED IDEOGRAPH - 0x99DF: 0x542C, //CJK UNIFIED IDEOGRAPH - 0x99E0: 0x542D, //CJK UNIFIED IDEOGRAPH - 0x99E1: 0x543C, //CJK UNIFIED IDEOGRAPH - 0x99E2: 0x542E, //CJK UNIFIED IDEOGRAPH - 0x99E3: 0x5436, //CJK UNIFIED IDEOGRAPH - 0x99E4: 0x5429, //CJK UNIFIED IDEOGRAPH - 0x99E5: 0x541D, //CJK UNIFIED IDEOGRAPH - 0x99E6: 0x544E, //CJK UNIFIED IDEOGRAPH - 0x99E7: 0x548F, //CJK UNIFIED IDEOGRAPH - 0x99E8: 0x5475, //CJK UNIFIED IDEOGRAPH - 0x99E9: 0x548E, //CJK UNIFIED IDEOGRAPH - 0x99EA: 0x545F, //CJK UNIFIED IDEOGRAPH - 0x99EB: 0x5471, //CJK UNIFIED IDEOGRAPH - 0x99EC: 0x5477, //CJK UNIFIED IDEOGRAPH - 0x99ED: 0x5470, //CJK UNIFIED IDEOGRAPH - 0x99EE: 0x5492, //CJK UNIFIED IDEOGRAPH - 0x99EF: 0x547B, //CJK UNIFIED IDEOGRAPH - 0x99F0: 0x5480, //CJK UNIFIED IDEOGRAPH - 0x99F1: 0x5476, //CJK UNIFIED IDEOGRAPH - 0x99F2: 0x5484, //CJK UNIFIED IDEOGRAPH - 0x99F3: 0x5490, //CJK UNIFIED IDEOGRAPH - 0x99F4: 0x5486, //CJK UNIFIED IDEOGRAPH - 0x99F5: 0x54C7, //CJK UNIFIED IDEOGRAPH - 0x99F6: 0x54A2, //CJK UNIFIED IDEOGRAPH - 0x99F7: 0x54B8, //CJK UNIFIED IDEOGRAPH - 0x99F8: 0x54A5, //CJK UNIFIED IDEOGRAPH - 0x99F9: 0x54AC, //CJK UNIFIED IDEOGRAPH - 0x99FA: 0x54C4, //CJK UNIFIED IDEOGRAPH - 0x99FB: 0x54C8, //CJK UNIFIED IDEOGRAPH - 0x99FC: 0x54A8, //CJK UNIFIED IDEOGRAPH - 0x9A40: 0x54AB, //CJK UNIFIED IDEOGRAPH - 0x9A41: 0x54C2, //CJK UNIFIED IDEOGRAPH - 0x9A42: 0x54A4, //CJK UNIFIED IDEOGRAPH - 0x9A43: 0x54BE, //CJK UNIFIED IDEOGRAPH - 0x9A44: 0x54BC, //CJK UNIFIED IDEOGRAPH - 0x9A45: 0x54D8, //CJK UNIFIED IDEOGRAPH - 0x9A46: 0x54E5, //CJK UNIFIED IDEOGRAPH - 0x9A47: 0x54E6, //CJK UNIFIED IDEOGRAPH - 0x9A48: 0x550F, //CJK UNIFIED IDEOGRAPH - 0x9A49: 0x5514, //CJK UNIFIED IDEOGRAPH - 0x9A4A: 0x54FD, //CJK UNIFIED IDEOGRAPH - 0x9A4B: 0x54EE, //CJK UNIFIED IDEOGRAPH - 0x9A4C: 0x54ED, //CJK UNIFIED IDEOGRAPH - 0x9A4D: 0x54FA, //CJK UNIFIED IDEOGRAPH - 0x9A4E: 0x54E2, //CJK UNIFIED IDEOGRAPH - 0x9A4F: 0x5539, //CJK UNIFIED IDEOGRAPH - 0x9A50: 0x5540, //CJK UNIFIED IDEOGRAPH - 0x9A51: 0x5563, //CJK UNIFIED IDEOGRAPH - 0x9A52: 0x554C, //CJK UNIFIED IDEOGRAPH - 0x9A53: 0x552E, //CJK UNIFIED IDEOGRAPH - 0x9A54: 0x555C, //CJK UNIFIED IDEOGRAPH - 0x9A55: 0x5545, //CJK UNIFIED IDEOGRAPH - 0x9A56: 0x5556, //CJK UNIFIED IDEOGRAPH - 0x9A57: 0x5557, //CJK UNIFIED IDEOGRAPH - 0x9A58: 0x5538, //CJK UNIFIED IDEOGRAPH - 0x9A59: 0x5533, //CJK UNIFIED IDEOGRAPH - 0x9A5A: 0x555D, //CJK UNIFIED IDEOGRAPH - 0x9A5B: 0x5599, //CJK UNIFIED IDEOGRAPH - 0x9A5C: 0x5580, //CJK UNIFIED IDEOGRAPH - 0x9A5D: 0x54AF, //CJK UNIFIED IDEOGRAPH - 0x9A5E: 0x558A, //CJK UNIFIED IDEOGRAPH - 0x9A5F: 0x559F, //CJK UNIFIED IDEOGRAPH - 0x9A60: 0x557B, //CJK UNIFIED IDEOGRAPH - 0x9A61: 0x557E, //CJK UNIFIED IDEOGRAPH - 0x9A62: 0x5598, //CJK UNIFIED IDEOGRAPH - 0x9A63: 0x559E, //CJK UNIFIED IDEOGRAPH - 0x9A64: 0x55AE, //CJK UNIFIED IDEOGRAPH - 0x9A65: 0x557C, //CJK UNIFIED IDEOGRAPH - 0x9A66: 0x5583, //CJK UNIFIED IDEOGRAPH - 0x9A67: 0x55A9, //CJK UNIFIED IDEOGRAPH - 0x9A68: 0x5587, //CJK UNIFIED IDEOGRAPH - 0x9A69: 0x55A8, //CJK UNIFIED IDEOGRAPH - 0x9A6A: 0x55DA, //CJK UNIFIED IDEOGRAPH - 0x9A6B: 0x55C5, //CJK UNIFIED IDEOGRAPH - 0x9A6C: 0x55DF, //CJK UNIFIED IDEOGRAPH - 0x9A6D: 0x55C4, //CJK UNIFIED IDEOGRAPH - 0x9A6E: 0x55DC, //CJK UNIFIED IDEOGRAPH - 0x9A6F: 0x55E4, //CJK UNIFIED IDEOGRAPH - 0x9A70: 0x55D4, //CJK UNIFIED IDEOGRAPH - 0x9A71: 0x5614, //CJK UNIFIED IDEOGRAPH - 0x9A72: 0x55F7, //CJK UNIFIED IDEOGRAPH - 0x9A73: 0x5616, //CJK UNIFIED IDEOGRAPH - 0x9A74: 0x55FE, //CJK UNIFIED IDEOGRAPH - 0x9A75: 0x55FD, //CJK UNIFIED IDEOGRAPH - 0x9A76: 0x561B, //CJK UNIFIED IDEOGRAPH - 0x9A77: 0x55F9, //CJK UNIFIED IDEOGRAPH - 0x9A78: 0x564E, //CJK UNIFIED IDEOGRAPH - 0x9A79: 0x5650, //CJK UNIFIED IDEOGRAPH - 0x9A7A: 0x71DF, //CJK UNIFIED IDEOGRAPH - 0x9A7B: 0x5634, //CJK UNIFIED IDEOGRAPH - 0x9A7C: 0x5636, //CJK UNIFIED IDEOGRAPH - 0x9A7D: 0x5632, //CJK UNIFIED IDEOGRAPH - 0x9A7E: 0x5638, //CJK UNIFIED IDEOGRAPH - 0x9A80: 0x566B, //CJK UNIFIED IDEOGRAPH - 0x9A81: 0x5664, //CJK UNIFIED IDEOGRAPH - 0x9A82: 0x562F, //CJK UNIFIED IDEOGRAPH - 0x9A83: 0x566C, //CJK UNIFIED IDEOGRAPH - 0x9A84: 0x566A, //CJK UNIFIED IDEOGRAPH - 0x9A85: 0x5686, //CJK UNIFIED IDEOGRAPH - 0x9A86: 0x5680, //CJK UNIFIED IDEOGRAPH - 0x9A87: 0x568A, //CJK UNIFIED IDEOGRAPH - 0x9A88: 0x56A0, //CJK UNIFIED IDEOGRAPH - 0x9A89: 0x5694, //CJK UNIFIED IDEOGRAPH - 0x9A8A: 0x568F, //CJK UNIFIED IDEOGRAPH - 0x9A8B: 0x56A5, //CJK UNIFIED IDEOGRAPH - 0x9A8C: 0x56AE, //CJK UNIFIED IDEOGRAPH - 0x9A8D: 0x56B6, //CJK UNIFIED IDEOGRAPH - 0x9A8E: 0x56B4, //CJK UNIFIED IDEOGRAPH - 0x9A8F: 0x56C2, //CJK UNIFIED IDEOGRAPH - 0x9A90: 0x56BC, //CJK UNIFIED IDEOGRAPH - 0x9A91: 0x56C1, //CJK UNIFIED IDEOGRAPH - 0x9A92: 0x56C3, //CJK UNIFIED IDEOGRAPH - 0x9A93: 0x56C0, //CJK UNIFIED IDEOGRAPH - 0x9A94: 0x56C8, //CJK UNIFIED IDEOGRAPH - 0x9A95: 0x56CE, //CJK UNIFIED IDEOGRAPH - 0x9A96: 0x56D1, //CJK UNIFIED IDEOGRAPH - 0x9A97: 0x56D3, //CJK UNIFIED IDEOGRAPH - 0x9A98: 0x56D7, //CJK UNIFIED IDEOGRAPH - 0x9A99: 0x56EE, //CJK UNIFIED IDEOGRAPH - 0x9A9A: 0x56F9, //CJK UNIFIED IDEOGRAPH - 0x9A9B: 0x5700, //CJK UNIFIED IDEOGRAPH - 0x9A9C: 0x56FF, //CJK UNIFIED IDEOGRAPH - 0x9A9D: 0x5704, //CJK UNIFIED IDEOGRAPH - 0x9A9E: 0x5709, //CJK UNIFIED IDEOGRAPH - 0x9A9F: 0x5708, //CJK UNIFIED IDEOGRAPH - 0x9AA0: 0x570B, //CJK UNIFIED IDEOGRAPH - 0x9AA1: 0x570D, //CJK UNIFIED IDEOGRAPH - 0x9AA2: 0x5713, //CJK UNIFIED IDEOGRAPH - 0x9AA3: 0x5718, //CJK UNIFIED IDEOGRAPH - 0x9AA4: 0x5716, //CJK UNIFIED IDEOGRAPH - 0x9AA5: 0x55C7, //CJK UNIFIED IDEOGRAPH - 0x9AA6: 0x571C, //CJK UNIFIED IDEOGRAPH - 0x9AA7: 0x5726, //CJK UNIFIED IDEOGRAPH - 0x9AA8: 0x5737, //CJK UNIFIED IDEOGRAPH - 0x9AA9: 0x5738, //CJK UNIFIED IDEOGRAPH - 0x9AAA: 0x574E, //CJK UNIFIED IDEOGRAPH - 0x9AAB: 0x573B, //CJK UNIFIED IDEOGRAPH - 0x9AAC: 0x5740, //CJK UNIFIED IDEOGRAPH - 0x9AAD: 0x574F, //CJK UNIFIED IDEOGRAPH - 0x9AAE: 0x5769, //CJK UNIFIED IDEOGRAPH - 0x9AAF: 0x57C0, //CJK UNIFIED IDEOGRAPH - 0x9AB0: 0x5788, //CJK UNIFIED IDEOGRAPH - 0x9AB1: 0x5761, //CJK UNIFIED IDEOGRAPH - 0x9AB2: 0x577F, //CJK UNIFIED IDEOGRAPH - 0x9AB3: 0x5789, //CJK UNIFIED IDEOGRAPH - 0x9AB4: 0x5793, //CJK UNIFIED IDEOGRAPH - 0x9AB5: 0x57A0, //CJK UNIFIED IDEOGRAPH - 0x9AB6: 0x57B3, //CJK UNIFIED IDEOGRAPH - 0x9AB7: 0x57A4, //CJK UNIFIED IDEOGRAPH - 0x9AB8: 0x57AA, //CJK UNIFIED IDEOGRAPH - 0x9AB9: 0x57B0, //CJK UNIFIED IDEOGRAPH - 0x9ABA: 0x57C3, //CJK UNIFIED IDEOGRAPH - 0x9ABB: 0x57C6, //CJK UNIFIED IDEOGRAPH - 0x9ABC: 0x57D4, //CJK UNIFIED IDEOGRAPH - 0x9ABD: 0x57D2, //CJK UNIFIED IDEOGRAPH - 0x9ABE: 0x57D3, //CJK UNIFIED IDEOGRAPH - 0x9ABF: 0x580A, //CJK UNIFIED IDEOGRAPH - 0x9AC0: 0x57D6, //CJK UNIFIED IDEOGRAPH - 0x9AC1: 0x57E3, //CJK UNIFIED IDEOGRAPH - 0x9AC2: 0x580B, //CJK UNIFIED IDEOGRAPH - 0x9AC3: 0x5819, //CJK UNIFIED IDEOGRAPH - 0x9AC4: 0x581D, //CJK UNIFIED IDEOGRAPH - 0x9AC5: 0x5872, //CJK UNIFIED IDEOGRAPH - 0x9AC6: 0x5821, //CJK UNIFIED IDEOGRAPH - 0x9AC7: 0x5862, //CJK UNIFIED IDEOGRAPH - 0x9AC8: 0x584B, //CJK UNIFIED IDEOGRAPH - 0x9AC9: 0x5870, //CJK UNIFIED IDEOGRAPH - 0x9ACA: 0x6BC0, //CJK UNIFIED IDEOGRAPH - 0x9ACB: 0x5852, //CJK UNIFIED IDEOGRAPH - 0x9ACC: 0x583D, //CJK UNIFIED IDEOGRAPH - 0x9ACD: 0x5879, //CJK UNIFIED IDEOGRAPH - 0x9ACE: 0x5885, //CJK UNIFIED IDEOGRAPH - 0x9ACF: 0x58B9, //CJK UNIFIED IDEOGRAPH - 0x9AD0: 0x589F, //CJK UNIFIED IDEOGRAPH - 0x9AD1: 0x58AB, //CJK UNIFIED IDEOGRAPH - 0x9AD2: 0x58BA, //CJK UNIFIED IDEOGRAPH - 0x9AD3: 0x58DE, //CJK UNIFIED IDEOGRAPH - 0x9AD4: 0x58BB, //CJK UNIFIED IDEOGRAPH - 0x9AD5: 0x58B8, //CJK UNIFIED IDEOGRAPH - 0x9AD6: 0x58AE, //CJK UNIFIED IDEOGRAPH - 0x9AD7: 0x58C5, //CJK UNIFIED IDEOGRAPH - 0x9AD8: 0x58D3, //CJK UNIFIED IDEOGRAPH - 0x9AD9: 0x58D1, //CJK UNIFIED IDEOGRAPH - 0x9ADA: 0x58D7, //CJK UNIFIED IDEOGRAPH - 0x9ADB: 0x58D9, //CJK UNIFIED IDEOGRAPH - 0x9ADC: 0x58D8, //CJK UNIFIED IDEOGRAPH - 0x9ADD: 0x58E5, //CJK UNIFIED IDEOGRAPH - 0x9ADE: 0x58DC, //CJK UNIFIED IDEOGRAPH - 0x9ADF: 0x58E4, //CJK UNIFIED IDEOGRAPH - 0x9AE0: 0x58DF, //CJK UNIFIED IDEOGRAPH - 0x9AE1: 0x58EF, //CJK UNIFIED IDEOGRAPH - 0x9AE2: 0x58FA, //CJK UNIFIED IDEOGRAPH - 0x9AE3: 0x58F9, //CJK UNIFIED IDEOGRAPH - 0x9AE4: 0x58FB, //CJK UNIFIED IDEOGRAPH - 0x9AE5: 0x58FC, //CJK UNIFIED IDEOGRAPH - 0x9AE6: 0x58FD, //CJK UNIFIED IDEOGRAPH - 0x9AE7: 0x5902, //CJK UNIFIED IDEOGRAPH - 0x9AE8: 0x590A, //CJK UNIFIED IDEOGRAPH - 0x9AE9: 0x5910, //CJK UNIFIED IDEOGRAPH - 0x9AEA: 0x591B, //CJK UNIFIED IDEOGRAPH - 0x9AEB: 0x68A6, //CJK UNIFIED IDEOGRAPH - 0x9AEC: 0x5925, //CJK UNIFIED IDEOGRAPH - 0x9AED: 0x592C, //CJK UNIFIED IDEOGRAPH - 0x9AEE: 0x592D, //CJK UNIFIED IDEOGRAPH - 0x9AEF: 0x5932, //CJK UNIFIED IDEOGRAPH - 0x9AF0: 0x5938, //CJK UNIFIED IDEOGRAPH - 0x9AF1: 0x593E, //CJK UNIFIED IDEOGRAPH - 0x9AF2: 0x7AD2, //CJK UNIFIED IDEOGRAPH - 0x9AF3: 0x5955, //CJK UNIFIED IDEOGRAPH - 0x9AF4: 0x5950, //CJK UNIFIED IDEOGRAPH - 0x9AF5: 0x594E, //CJK UNIFIED IDEOGRAPH - 0x9AF6: 0x595A, //CJK UNIFIED IDEOGRAPH - 0x9AF7: 0x5958, //CJK UNIFIED IDEOGRAPH - 0x9AF8: 0x5962, //CJK UNIFIED IDEOGRAPH - 0x9AF9: 0x5960, //CJK UNIFIED IDEOGRAPH - 0x9AFA: 0x5967, //CJK UNIFIED IDEOGRAPH - 0x9AFB: 0x596C, //CJK UNIFIED IDEOGRAPH - 0x9AFC: 0x5969, //CJK UNIFIED IDEOGRAPH - 0x9B40: 0x5978, //CJK UNIFIED IDEOGRAPH - 0x9B41: 0x5981, //CJK UNIFIED IDEOGRAPH - 0x9B42: 0x599D, //CJK UNIFIED IDEOGRAPH - 0x9B43: 0x4F5E, //CJK UNIFIED IDEOGRAPH - 0x9B44: 0x4FAB, //CJK UNIFIED IDEOGRAPH - 0x9B45: 0x59A3, //CJK UNIFIED IDEOGRAPH - 0x9B46: 0x59B2, //CJK UNIFIED IDEOGRAPH - 0x9B47: 0x59C6, //CJK UNIFIED IDEOGRAPH - 0x9B48: 0x59E8, //CJK UNIFIED IDEOGRAPH - 0x9B49: 0x59DC, //CJK UNIFIED IDEOGRAPH - 0x9B4A: 0x598D, //CJK UNIFIED IDEOGRAPH - 0x9B4B: 0x59D9, //CJK UNIFIED IDEOGRAPH - 0x9B4C: 0x59DA, //CJK UNIFIED IDEOGRAPH - 0x9B4D: 0x5A25, //CJK UNIFIED IDEOGRAPH - 0x9B4E: 0x5A1F, //CJK UNIFIED IDEOGRAPH - 0x9B4F: 0x5A11, //CJK UNIFIED IDEOGRAPH - 0x9B50: 0x5A1C, //CJK UNIFIED IDEOGRAPH - 0x9B51: 0x5A09, //CJK UNIFIED IDEOGRAPH - 0x9B52: 0x5A1A, //CJK UNIFIED IDEOGRAPH - 0x9B53: 0x5A40, //CJK UNIFIED IDEOGRAPH - 0x9B54: 0x5A6C, //CJK UNIFIED IDEOGRAPH - 0x9B55: 0x5A49, //CJK UNIFIED IDEOGRAPH - 0x9B56: 0x5A35, //CJK UNIFIED IDEOGRAPH - 0x9B57: 0x5A36, //CJK UNIFIED IDEOGRAPH - 0x9B58: 0x5A62, //CJK UNIFIED IDEOGRAPH - 0x9B59: 0x5A6A, //CJK UNIFIED IDEOGRAPH - 0x9B5A: 0x5A9A, //CJK UNIFIED IDEOGRAPH - 0x9B5B: 0x5ABC, //CJK UNIFIED IDEOGRAPH - 0x9B5C: 0x5ABE, //CJK UNIFIED IDEOGRAPH - 0x9B5D: 0x5ACB, //CJK UNIFIED IDEOGRAPH - 0x9B5E: 0x5AC2, //CJK UNIFIED IDEOGRAPH - 0x9B5F: 0x5ABD, //CJK UNIFIED IDEOGRAPH - 0x9B60: 0x5AE3, //CJK UNIFIED IDEOGRAPH - 0x9B61: 0x5AD7, //CJK UNIFIED IDEOGRAPH - 0x9B62: 0x5AE6, //CJK UNIFIED IDEOGRAPH - 0x9B63: 0x5AE9, //CJK UNIFIED IDEOGRAPH - 0x9B64: 0x5AD6, //CJK UNIFIED IDEOGRAPH - 0x9B65: 0x5AFA, //CJK UNIFIED IDEOGRAPH - 0x9B66: 0x5AFB, //CJK UNIFIED IDEOGRAPH - 0x9B67: 0x5B0C, //CJK UNIFIED IDEOGRAPH - 0x9B68: 0x5B0B, //CJK UNIFIED IDEOGRAPH - 0x9B69: 0x5B16, //CJK UNIFIED IDEOGRAPH - 0x9B6A: 0x5B32, //CJK UNIFIED IDEOGRAPH - 0x9B6B: 0x5AD0, //CJK UNIFIED IDEOGRAPH - 0x9B6C: 0x5B2A, //CJK UNIFIED IDEOGRAPH - 0x9B6D: 0x5B36, //CJK UNIFIED IDEOGRAPH - 0x9B6E: 0x5B3E, //CJK UNIFIED IDEOGRAPH - 0x9B6F: 0x5B43, //CJK UNIFIED IDEOGRAPH - 0x9B70: 0x5B45, //CJK UNIFIED IDEOGRAPH - 0x9B71: 0x5B40, //CJK UNIFIED IDEOGRAPH - 0x9B72: 0x5B51, //CJK UNIFIED IDEOGRAPH - 0x9B73: 0x5B55, //CJK UNIFIED IDEOGRAPH - 0x9B74: 0x5B5A, //CJK UNIFIED IDEOGRAPH - 0x9B75: 0x5B5B, //CJK UNIFIED IDEOGRAPH - 0x9B76: 0x5B65, //CJK UNIFIED IDEOGRAPH - 0x9B77: 0x5B69, //CJK UNIFIED IDEOGRAPH - 0x9B78: 0x5B70, //CJK UNIFIED IDEOGRAPH - 0x9B79: 0x5B73, //CJK UNIFIED IDEOGRAPH - 0x9B7A: 0x5B75, //CJK UNIFIED IDEOGRAPH - 0x9B7B: 0x5B78, //CJK UNIFIED IDEOGRAPH - 0x9B7C: 0x6588, //CJK UNIFIED IDEOGRAPH - 0x9B7D: 0x5B7A, //CJK UNIFIED IDEOGRAPH - 0x9B7E: 0x5B80, //CJK UNIFIED IDEOGRAPH - 0x9B80: 0x5B83, //CJK UNIFIED IDEOGRAPH - 0x9B81: 0x5BA6, //CJK UNIFIED IDEOGRAPH - 0x9B82: 0x5BB8, //CJK UNIFIED IDEOGRAPH - 0x9B83: 0x5BC3, //CJK UNIFIED IDEOGRAPH - 0x9B84: 0x5BC7, //CJK UNIFIED IDEOGRAPH - 0x9B85: 0x5BC9, //CJK UNIFIED IDEOGRAPH - 0x9B86: 0x5BD4, //CJK UNIFIED IDEOGRAPH - 0x9B87: 0x5BD0, //CJK UNIFIED IDEOGRAPH - 0x9B88: 0x5BE4, //CJK UNIFIED IDEOGRAPH - 0x9B89: 0x5BE6, //CJK UNIFIED IDEOGRAPH - 0x9B8A: 0x5BE2, //CJK UNIFIED IDEOGRAPH - 0x9B8B: 0x5BDE, //CJK UNIFIED IDEOGRAPH - 0x9B8C: 0x5BE5, //CJK UNIFIED IDEOGRAPH - 0x9B8D: 0x5BEB, //CJK UNIFIED IDEOGRAPH - 0x9B8E: 0x5BF0, //CJK UNIFIED IDEOGRAPH - 0x9B8F: 0x5BF6, //CJK UNIFIED IDEOGRAPH - 0x9B90: 0x5BF3, //CJK UNIFIED IDEOGRAPH - 0x9B91: 0x5C05, //CJK UNIFIED IDEOGRAPH - 0x9B92: 0x5C07, //CJK UNIFIED IDEOGRAPH - 0x9B93: 0x5C08, //CJK UNIFIED IDEOGRAPH - 0x9B94: 0x5C0D, //CJK UNIFIED IDEOGRAPH - 0x9B95: 0x5C13, //CJK UNIFIED IDEOGRAPH - 0x9B96: 0x5C20, //CJK UNIFIED IDEOGRAPH - 0x9B97: 0x5C22, //CJK UNIFIED IDEOGRAPH - 0x9B98: 0x5C28, //CJK UNIFIED IDEOGRAPH - 0x9B99: 0x5C38, //CJK UNIFIED IDEOGRAPH - 0x9B9A: 0x5C39, //CJK UNIFIED IDEOGRAPH - 0x9B9B: 0x5C41, //CJK UNIFIED IDEOGRAPH - 0x9B9C: 0x5C46, //CJK UNIFIED IDEOGRAPH - 0x9B9D: 0x5C4E, //CJK UNIFIED IDEOGRAPH - 0x9B9E: 0x5C53, //CJK UNIFIED IDEOGRAPH - 0x9B9F: 0x5C50, //CJK UNIFIED IDEOGRAPH - 0x9BA0: 0x5C4F, //CJK UNIFIED IDEOGRAPH - 0x9BA1: 0x5B71, //CJK UNIFIED IDEOGRAPH - 0x9BA2: 0x5C6C, //CJK UNIFIED IDEOGRAPH - 0x9BA3: 0x5C6E, //CJK UNIFIED IDEOGRAPH - 0x9BA4: 0x4E62, //CJK UNIFIED IDEOGRAPH - 0x9BA5: 0x5C76, //CJK UNIFIED IDEOGRAPH - 0x9BA6: 0x5C79, //CJK UNIFIED IDEOGRAPH - 0x9BA7: 0x5C8C, //CJK UNIFIED IDEOGRAPH - 0x9BA8: 0x5C91, //CJK UNIFIED IDEOGRAPH - 0x9BA9: 0x5C94, //CJK UNIFIED IDEOGRAPH - 0x9BAA: 0x599B, //CJK UNIFIED IDEOGRAPH - 0x9BAB: 0x5CAB, //CJK UNIFIED IDEOGRAPH - 0x9BAC: 0x5CBB, //CJK UNIFIED IDEOGRAPH - 0x9BAD: 0x5CB6, //CJK UNIFIED IDEOGRAPH - 0x9BAE: 0x5CBC, //CJK UNIFIED IDEOGRAPH - 0x9BAF: 0x5CB7, //CJK UNIFIED IDEOGRAPH - 0x9BB0: 0x5CC5, //CJK UNIFIED IDEOGRAPH - 0x9BB1: 0x5CBE, //CJK UNIFIED IDEOGRAPH - 0x9BB2: 0x5CC7, //CJK UNIFIED IDEOGRAPH - 0x9BB3: 0x5CD9, //CJK UNIFIED IDEOGRAPH - 0x9BB4: 0x5CE9, //CJK UNIFIED IDEOGRAPH - 0x9BB5: 0x5CFD, //CJK UNIFIED IDEOGRAPH - 0x9BB6: 0x5CFA, //CJK UNIFIED IDEOGRAPH - 0x9BB7: 0x5CED, //CJK UNIFIED IDEOGRAPH - 0x9BB8: 0x5D8C, //CJK UNIFIED IDEOGRAPH - 0x9BB9: 0x5CEA, //CJK UNIFIED IDEOGRAPH - 0x9BBA: 0x5D0B, //CJK UNIFIED IDEOGRAPH - 0x9BBB: 0x5D15, //CJK UNIFIED IDEOGRAPH - 0x9BBC: 0x5D17, //CJK UNIFIED IDEOGRAPH - 0x9BBD: 0x5D5C, //CJK UNIFIED IDEOGRAPH - 0x9BBE: 0x5D1F, //CJK UNIFIED IDEOGRAPH - 0x9BBF: 0x5D1B, //CJK UNIFIED IDEOGRAPH - 0x9BC0: 0x5D11, //CJK UNIFIED IDEOGRAPH - 0x9BC1: 0x5D14, //CJK UNIFIED IDEOGRAPH - 0x9BC2: 0x5D22, //CJK UNIFIED IDEOGRAPH - 0x9BC3: 0x5D1A, //CJK UNIFIED IDEOGRAPH - 0x9BC4: 0x5D19, //CJK UNIFIED IDEOGRAPH - 0x9BC5: 0x5D18, //CJK UNIFIED IDEOGRAPH - 0x9BC6: 0x5D4C, //CJK UNIFIED IDEOGRAPH - 0x9BC7: 0x5D52, //CJK UNIFIED IDEOGRAPH - 0x9BC8: 0x5D4E, //CJK UNIFIED IDEOGRAPH - 0x9BC9: 0x5D4B, //CJK UNIFIED IDEOGRAPH - 0x9BCA: 0x5D6C, //CJK UNIFIED IDEOGRAPH - 0x9BCB: 0x5D73, //CJK UNIFIED IDEOGRAPH - 0x9BCC: 0x5D76, //CJK UNIFIED IDEOGRAPH - 0x9BCD: 0x5D87, //CJK UNIFIED IDEOGRAPH - 0x9BCE: 0x5D84, //CJK UNIFIED IDEOGRAPH - 0x9BCF: 0x5D82, //CJK UNIFIED IDEOGRAPH - 0x9BD0: 0x5DA2, //CJK UNIFIED IDEOGRAPH - 0x9BD1: 0x5D9D, //CJK UNIFIED IDEOGRAPH - 0x9BD2: 0x5DAC, //CJK UNIFIED IDEOGRAPH - 0x9BD3: 0x5DAE, //CJK UNIFIED IDEOGRAPH - 0x9BD4: 0x5DBD, //CJK UNIFIED IDEOGRAPH - 0x9BD5: 0x5D90, //CJK UNIFIED IDEOGRAPH - 0x9BD6: 0x5DB7, //CJK UNIFIED IDEOGRAPH - 0x9BD7: 0x5DBC, //CJK UNIFIED IDEOGRAPH - 0x9BD8: 0x5DC9, //CJK UNIFIED IDEOGRAPH - 0x9BD9: 0x5DCD, //CJK UNIFIED IDEOGRAPH - 0x9BDA: 0x5DD3, //CJK UNIFIED IDEOGRAPH - 0x9BDB: 0x5DD2, //CJK UNIFIED IDEOGRAPH - 0x9BDC: 0x5DD6, //CJK UNIFIED IDEOGRAPH - 0x9BDD: 0x5DDB, //CJK UNIFIED IDEOGRAPH - 0x9BDE: 0x5DEB, //CJK UNIFIED IDEOGRAPH - 0x9BDF: 0x5DF2, //CJK UNIFIED IDEOGRAPH - 0x9BE0: 0x5DF5, //CJK UNIFIED IDEOGRAPH - 0x9BE1: 0x5E0B, //CJK UNIFIED IDEOGRAPH - 0x9BE2: 0x5E1A, //CJK UNIFIED IDEOGRAPH - 0x9BE3: 0x5E19, //CJK UNIFIED IDEOGRAPH - 0x9BE4: 0x5E11, //CJK UNIFIED IDEOGRAPH - 0x9BE5: 0x5E1B, //CJK UNIFIED IDEOGRAPH - 0x9BE6: 0x5E36, //CJK UNIFIED IDEOGRAPH - 0x9BE7: 0x5E37, //CJK UNIFIED IDEOGRAPH - 0x9BE8: 0x5E44, //CJK UNIFIED IDEOGRAPH - 0x9BE9: 0x5E43, //CJK UNIFIED IDEOGRAPH - 0x9BEA: 0x5E40, //CJK UNIFIED IDEOGRAPH - 0x9BEB: 0x5E4E, //CJK UNIFIED IDEOGRAPH - 0x9BEC: 0x5E57, //CJK UNIFIED IDEOGRAPH - 0x9BED: 0x5E54, //CJK UNIFIED IDEOGRAPH - 0x9BEE: 0x5E5F, //CJK UNIFIED IDEOGRAPH - 0x9BEF: 0x5E62, //CJK UNIFIED IDEOGRAPH - 0x9BF0: 0x5E64, //CJK UNIFIED IDEOGRAPH - 0x9BF1: 0x5E47, //CJK UNIFIED IDEOGRAPH - 0x9BF2: 0x5E75, //CJK UNIFIED IDEOGRAPH - 0x9BF3: 0x5E76, //CJK UNIFIED IDEOGRAPH - 0x9BF4: 0x5E7A, //CJK UNIFIED IDEOGRAPH - 0x9BF5: 0x9EBC, //CJK UNIFIED IDEOGRAPH - 0x9BF6: 0x5E7F, //CJK UNIFIED IDEOGRAPH - 0x9BF7: 0x5EA0, //CJK UNIFIED IDEOGRAPH - 0x9BF8: 0x5EC1, //CJK UNIFIED IDEOGRAPH - 0x9BF9: 0x5EC2, //CJK UNIFIED IDEOGRAPH - 0x9BFA: 0x5EC8, //CJK UNIFIED IDEOGRAPH - 0x9BFB: 0x5ED0, //CJK UNIFIED IDEOGRAPH - 0x9BFC: 0x5ECF, //CJK UNIFIED IDEOGRAPH - 0x9C40: 0x5ED6, //CJK UNIFIED IDEOGRAPH - 0x9C41: 0x5EE3, //CJK UNIFIED IDEOGRAPH - 0x9C42: 0x5EDD, //CJK UNIFIED IDEOGRAPH - 0x9C43: 0x5EDA, //CJK UNIFIED IDEOGRAPH - 0x9C44: 0x5EDB, //CJK UNIFIED IDEOGRAPH - 0x9C45: 0x5EE2, //CJK UNIFIED IDEOGRAPH - 0x9C46: 0x5EE1, //CJK UNIFIED IDEOGRAPH - 0x9C47: 0x5EE8, //CJK UNIFIED IDEOGRAPH - 0x9C48: 0x5EE9, //CJK UNIFIED IDEOGRAPH - 0x9C49: 0x5EEC, //CJK UNIFIED IDEOGRAPH - 0x9C4A: 0x5EF1, //CJK UNIFIED IDEOGRAPH - 0x9C4B: 0x5EF3, //CJK UNIFIED IDEOGRAPH - 0x9C4C: 0x5EF0, //CJK UNIFIED IDEOGRAPH - 0x9C4D: 0x5EF4, //CJK UNIFIED IDEOGRAPH - 0x9C4E: 0x5EF8, //CJK UNIFIED IDEOGRAPH - 0x9C4F: 0x5EFE, //CJK UNIFIED IDEOGRAPH - 0x9C50: 0x5F03, //CJK UNIFIED IDEOGRAPH - 0x9C51: 0x5F09, //CJK UNIFIED IDEOGRAPH - 0x9C52: 0x5F5D, //CJK UNIFIED IDEOGRAPH - 0x9C53: 0x5F5C, //CJK UNIFIED IDEOGRAPH - 0x9C54: 0x5F0B, //CJK UNIFIED IDEOGRAPH - 0x9C55: 0x5F11, //CJK UNIFIED IDEOGRAPH - 0x9C56: 0x5F16, //CJK UNIFIED IDEOGRAPH - 0x9C57: 0x5F29, //CJK UNIFIED IDEOGRAPH - 0x9C58: 0x5F2D, //CJK UNIFIED IDEOGRAPH - 0x9C59: 0x5F38, //CJK UNIFIED IDEOGRAPH - 0x9C5A: 0x5F41, //CJK UNIFIED IDEOGRAPH - 0x9C5B: 0x5F48, //CJK UNIFIED IDEOGRAPH - 0x9C5C: 0x5F4C, //CJK UNIFIED IDEOGRAPH - 0x9C5D: 0x5F4E, //CJK UNIFIED IDEOGRAPH - 0x9C5E: 0x5F2F, //CJK UNIFIED IDEOGRAPH - 0x9C5F: 0x5F51, //CJK UNIFIED IDEOGRAPH - 0x9C60: 0x5F56, //CJK UNIFIED IDEOGRAPH - 0x9C61: 0x5F57, //CJK UNIFIED IDEOGRAPH - 0x9C62: 0x5F59, //CJK UNIFIED IDEOGRAPH - 0x9C63: 0x5F61, //CJK UNIFIED IDEOGRAPH - 0x9C64: 0x5F6D, //CJK UNIFIED IDEOGRAPH - 0x9C65: 0x5F73, //CJK UNIFIED IDEOGRAPH - 0x9C66: 0x5F77, //CJK UNIFIED IDEOGRAPH - 0x9C67: 0x5F83, //CJK UNIFIED IDEOGRAPH - 0x9C68: 0x5F82, //CJK UNIFIED IDEOGRAPH - 0x9C69: 0x5F7F, //CJK UNIFIED IDEOGRAPH - 0x9C6A: 0x5F8A, //CJK UNIFIED IDEOGRAPH - 0x9C6B: 0x5F88, //CJK UNIFIED IDEOGRAPH - 0x9C6C: 0x5F91, //CJK UNIFIED IDEOGRAPH - 0x9C6D: 0x5F87, //CJK UNIFIED IDEOGRAPH - 0x9C6E: 0x5F9E, //CJK UNIFIED IDEOGRAPH - 0x9C6F: 0x5F99, //CJK UNIFIED IDEOGRAPH - 0x9C70: 0x5F98, //CJK UNIFIED IDEOGRAPH - 0x9C71: 0x5FA0, //CJK UNIFIED IDEOGRAPH - 0x9C72: 0x5FA8, //CJK UNIFIED IDEOGRAPH - 0x9C73: 0x5FAD, //CJK UNIFIED IDEOGRAPH - 0x9C74: 0x5FBC, //CJK UNIFIED IDEOGRAPH - 0x9C75: 0x5FD6, //CJK UNIFIED IDEOGRAPH - 0x9C76: 0x5FFB, //CJK UNIFIED IDEOGRAPH - 0x9C77: 0x5FE4, //CJK UNIFIED IDEOGRAPH - 0x9C78: 0x5FF8, //CJK UNIFIED IDEOGRAPH - 0x9C79: 0x5FF1, //CJK UNIFIED IDEOGRAPH - 0x9C7A: 0x5FDD, //CJK UNIFIED IDEOGRAPH - 0x9C7B: 0x60B3, //CJK UNIFIED IDEOGRAPH - 0x9C7C: 0x5FFF, //CJK UNIFIED IDEOGRAPH - 0x9C7D: 0x6021, //CJK UNIFIED IDEOGRAPH - 0x9C7E: 0x6060, //CJK UNIFIED IDEOGRAPH - 0x9C80: 0x6019, //CJK UNIFIED IDEOGRAPH - 0x9C81: 0x6010, //CJK UNIFIED IDEOGRAPH - 0x9C82: 0x6029, //CJK UNIFIED IDEOGRAPH - 0x9C83: 0x600E, //CJK UNIFIED IDEOGRAPH - 0x9C84: 0x6031, //CJK UNIFIED IDEOGRAPH - 0x9C85: 0x601B, //CJK UNIFIED IDEOGRAPH - 0x9C86: 0x6015, //CJK UNIFIED IDEOGRAPH - 0x9C87: 0x602B, //CJK UNIFIED IDEOGRAPH - 0x9C88: 0x6026, //CJK UNIFIED IDEOGRAPH - 0x9C89: 0x600F, //CJK UNIFIED IDEOGRAPH - 0x9C8A: 0x603A, //CJK UNIFIED IDEOGRAPH - 0x9C8B: 0x605A, //CJK UNIFIED IDEOGRAPH - 0x9C8C: 0x6041, //CJK UNIFIED IDEOGRAPH - 0x9C8D: 0x606A, //CJK UNIFIED IDEOGRAPH - 0x9C8E: 0x6077, //CJK UNIFIED IDEOGRAPH - 0x9C8F: 0x605F, //CJK UNIFIED IDEOGRAPH - 0x9C90: 0x604A, //CJK UNIFIED IDEOGRAPH - 0x9C91: 0x6046, //CJK UNIFIED IDEOGRAPH - 0x9C92: 0x604D, //CJK UNIFIED IDEOGRAPH - 0x9C93: 0x6063, //CJK UNIFIED IDEOGRAPH - 0x9C94: 0x6043, //CJK UNIFIED IDEOGRAPH - 0x9C95: 0x6064, //CJK UNIFIED IDEOGRAPH - 0x9C96: 0x6042, //CJK UNIFIED IDEOGRAPH - 0x9C97: 0x606C, //CJK UNIFIED IDEOGRAPH - 0x9C98: 0x606B, //CJK UNIFIED IDEOGRAPH - 0x9C99: 0x6059, //CJK UNIFIED IDEOGRAPH - 0x9C9A: 0x6081, //CJK UNIFIED IDEOGRAPH - 0x9C9B: 0x608D, //CJK UNIFIED IDEOGRAPH - 0x9C9C: 0x60E7, //CJK UNIFIED IDEOGRAPH - 0x9C9D: 0x6083, //CJK UNIFIED IDEOGRAPH - 0x9C9E: 0x609A, //CJK UNIFIED IDEOGRAPH - 0x9C9F: 0x6084, //CJK UNIFIED IDEOGRAPH - 0x9CA0: 0x609B, //CJK UNIFIED IDEOGRAPH - 0x9CA1: 0x6096, //CJK UNIFIED IDEOGRAPH - 0x9CA2: 0x6097, //CJK UNIFIED IDEOGRAPH - 0x9CA3: 0x6092, //CJK UNIFIED IDEOGRAPH - 0x9CA4: 0x60A7, //CJK UNIFIED IDEOGRAPH - 0x9CA5: 0x608B, //CJK UNIFIED IDEOGRAPH - 0x9CA6: 0x60E1, //CJK UNIFIED IDEOGRAPH - 0x9CA7: 0x60B8, //CJK UNIFIED IDEOGRAPH - 0x9CA8: 0x60E0, //CJK UNIFIED IDEOGRAPH - 0x9CA9: 0x60D3, //CJK UNIFIED IDEOGRAPH - 0x9CAA: 0x60B4, //CJK UNIFIED IDEOGRAPH - 0x9CAB: 0x5FF0, //CJK UNIFIED IDEOGRAPH - 0x9CAC: 0x60BD, //CJK UNIFIED IDEOGRAPH - 0x9CAD: 0x60C6, //CJK UNIFIED IDEOGRAPH - 0x9CAE: 0x60B5, //CJK UNIFIED IDEOGRAPH - 0x9CAF: 0x60D8, //CJK UNIFIED IDEOGRAPH - 0x9CB0: 0x614D, //CJK UNIFIED IDEOGRAPH - 0x9CB1: 0x6115, //CJK UNIFIED IDEOGRAPH - 0x9CB2: 0x6106, //CJK UNIFIED IDEOGRAPH - 0x9CB3: 0x60F6, //CJK UNIFIED IDEOGRAPH - 0x9CB4: 0x60F7, //CJK UNIFIED IDEOGRAPH - 0x9CB5: 0x6100, //CJK UNIFIED IDEOGRAPH - 0x9CB6: 0x60F4, //CJK UNIFIED IDEOGRAPH - 0x9CB7: 0x60FA, //CJK UNIFIED IDEOGRAPH - 0x9CB8: 0x6103, //CJK UNIFIED IDEOGRAPH - 0x9CB9: 0x6121, //CJK UNIFIED IDEOGRAPH - 0x9CBA: 0x60FB, //CJK UNIFIED IDEOGRAPH - 0x9CBB: 0x60F1, //CJK UNIFIED IDEOGRAPH - 0x9CBC: 0x610D, //CJK UNIFIED IDEOGRAPH - 0x9CBD: 0x610E, //CJK UNIFIED IDEOGRAPH - 0x9CBE: 0x6147, //CJK UNIFIED IDEOGRAPH - 0x9CBF: 0x613E, //CJK UNIFIED IDEOGRAPH - 0x9CC0: 0x6128, //CJK UNIFIED IDEOGRAPH - 0x9CC1: 0x6127, //CJK UNIFIED IDEOGRAPH - 0x9CC2: 0x614A, //CJK UNIFIED IDEOGRAPH - 0x9CC3: 0x613F, //CJK UNIFIED IDEOGRAPH - 0x9CC4: 0x613C, //CJK UNIFIED IDEOGRAPH - 0x9CC5: 0x612C, //CJK UNIFIED IDEOGRAPH - 0x9CC6: 0x6134, //CJK UNIFIED IDEOGRAPH - 0x9CC7: 0x613D, //CJK UNIFIED IDEOGRAPH - 0x9CC8: 0x6142, //CJK UNIFIED IDEOGRAPH - 0x9CC9: 0x6144, //CJK UNIFIED IDEOGRAPH - 0x9CCA: 0x6173, //CJK UNIFIED IDEOGRAPH - 0x9CCB: 0x6177, //CJK UNIFIED IDEOGRAPH - 0x9CCC: 0x6158, //CJK UNIFIED IDEOGRAPH - 0x9CCD: 0x6159, //CJK UNIFIED IDEOGRAPH - 0x9CCE: 0x615A, //CJK UNIFIED IDEOGRAPH - 0x9CCF: 0x616B, //CJK UNIFIED IDEOGRAPH - 0x9CD0: 0x6174, //CJK UNIFIED IDEOGRAPH - 0x9CD1: 0x616F, //CJK UNIFIED IDEOGRAPH - 0x9CD2: 0x6165, //CJK UNIFIED IDEOGRAPH - 0x9CD3: 0x6171, //CJK UNIFIED IDEOGRAPH - 0x9CD4: 0x615F, //CJK UNIFIED IDEOGRAPH - 0x9CD5: 0x615D, //CJK UNIFIED IDEOGRAPH - 0x9CD6: 0x6153, //CJK UNIFIED IDEOGRAPH - 0x9CD7: 0x6175, //CJK UNIFIED IDEOGRAPH - 0x9CD8: 0x6199, //CJK UNIFIED IDEOGRAPH - 0x9CD9: 0x6196, //CJK UNIFIED IDEOGRAPH - 0x9CDA: 0x6187, //CJK UNIFIED IDEOGRAPH - 0x9CDB: 0x61AC, //CJK UNIFIED IDEOGRAPH - 0x9CDC: 0x6194, //CJK UNIFIED IDEOGRAPH - 0x9CDD: 0x619A, //CJK UNIFIED IDEOGRAPH - 0x9CDE: 0x618A, //CJK UNIFIED IDEOGRAPH - 0x9CDF: 0x6191, //CJK UNIFIED IDEOGRAPH - 0x9CE0: 0x61AB, //CJK UNIFIED IDEOGRAPH - 0x9CE1: 0x61AE, //CJK UNIFIED IDEOGRAPH - 0x9CE2: 0x61CC, //CJK UNIFIED IDEOGRAPH - 0x9CE3: 0x61CA, //CJK UNIFIED IDEOGRAPH - 0x9CE4: 0x61C9, //CJK UNIFIED IDEOGRAPH - 0x9CE5: 0x61F7, //CJK UNIFIED IDEOGRAPH - 0x9CE6: 0x61C8, //CJK UNIFIED IDEOGRAPH - 0x9CE7: 0x61C3, //CJK UNIFIED IDEOGRAPH - 0x9CE8: 0x61C6, //CJK UNIFIED IDEOGRAPH - 0x9CE9: 0x61BA, //CJK UNIFIED IDEOGRAPH - 0x9CEA: 0x61CB, //CJK UNIFIED IDEOGRAPH - 0x9CEB: 0x7F79, //CJK UNIFIED IDEOGRAPH - 0x9CEC: 0x61CD, //CJK UNIFIED IDEOGRAPH - 0x9CED: 0x61E6, //CJK UNIFIED IDEOGRAPH - 0x9CEE: 0x61E3, //CJK UNIFIED IDEOGRAPH - 0x9CEF: 0x61F6, //CJK UNIFIED IDEOGRAPH - 0x9CF0: 0x61FA, //CJK UNIFIED IDEOGRAPH - 0x9CF1: 0x61F4, //CJK UNIFIED IDEOGRAPH - 0x9CF2: 0x61FF, //CJK UNIFIED IDEOGRAPH - 0x9CF3: 0x61FD, //CJK UNIFIED IDEOGRAPH - 0x9CF4: 0x61FC, //CJK UNIFIED IDEOGRAPH - 0x9CF5: 0x61FE, //CJK UNIFIED IDEOGRAPH - 0x9CF6: 0x6200, //CJK UNIFIED IDEOGRAPH - 0x9CF7: 0x6208, //CJK UNIFIED IDEOGRAPH - 0x9CF8: 0x6209, //CJK UNIFIED IDEOGRAPH - 0x9CF9: 0x620D, //CJK UNIFIED IDEOGRAPH - 0x9CFA: 0x620C, //CJK UNIFIED IDEOGRAPH - 0x9CFB: 0x6214, //CJK UNIFIED IDEOGRAPH - 0x9CFC: 0x621B, //CJK UNIFIED IDEOGRAPH - 0x9D40: 0x621E, //CJK UNIFIED IDEOGRAPH - 0x9D41: 0x6221, //CJK UNIFIED IDEOGRAPH - 0x9D42: 0x622A, //CJK UNIFIED IDEOGRAPH - 0x9D43: 0x622E, //CJK UNIFIED IDEOGRAPH - 0x9D44: 0x6230, //CJK UNIFIED IDEOGRAPH - 0x9D45: 0x6232, //CJK UNIFIED IDEOGRAPH - 0x9D46: 0x6233, //CJK UNIFIED IDEOGRAPH - 0x9D47: 0x6241, //CJK UNIFIED IDEOGRAPH - 0x9D48: 0x624E, //CJK UNIFIED IDEOGRAPH - 0x9D49: 0x625E, //CJK UNIFIED IDEOGRAPH - 0x9D4A: 0x6263, //CJK UNIFIED IDEOGRAPH - 0x9D4B: 0x625B, //CJK UNIFIED IDEOGRAPH - 0x9D4C: 0x6260, //CJK UNIFIED IDEOGRAPH - 0x9D4D: 0x6268, //CJK UNIFIED IDEOGRAPH - 0x9D4E: 0x627C, //CJK UNIFIED IDEOGRAPH - 0x9D4F: 0x6282, //CJK UNIFIED IDEOGRAPH - 0x9D50: 0x6289, //CJK UNIFIED IDEOGRAPH - 0x9D51: 0x627E, //CJK UNIFIED IDEOGRAPH - 0x9D52: 0x6292, //CJK UNIFIED IDEOGRAPH - 0x9D53: 0x6293, //CJK UNIFIED IDEOGRAPH - 0x9D54: 0x6296, //CJK UNIFIED IDEOGRAPH - 0x9D55: 0x62D4, //CJK UNIFIED IDEOGRAPH - 0x9D56: 0x6283, //CJK UNIFIED IDEOGRAPH - 0x9D57: 0x6294, //CJK UNIFIED IDEOGRAPH - 0x9D58: 0x62D7, //CJK UNIFIED IDEOGRAPH - 0x9D59: 0x62D1, //CJK UNIFIED IDEOGRAPH - 0x9D5A: 0x62BB, //CJK UNIFIED IDEOGRAPH - 0x9D5B: 0x62CF, //CJK UNIFIED IDEOGRAPH - 0x9D5C: 0x62FF, //CJK UNIFIED IDEOGRAPH - 0x9D5D: 0x62C6, //CJK UNIFIED IDEOGRAPH - 0x9D5E: 0x64D4, //CJK UNIFIED IDEOGRAPH - 0x9D5F: 0x62C8, //CJK UNIFIED IDEOGRAPH - 0x9D60: 0x62DC, //CJK UNIFIED IDEOGRAPH - 0x9D61: 0x62CC, //CJK UNIFIED IDEOGRAPH - 0x9D62: 0x62CA, //CJK UNIFIED IDEOGRAPH - 0x9D63: 0x62C2, //CJK UNIFIED IDEOGRAPH - 0x9D64: 0x62C7, //CJK UNIFIED IDEOGRAPH - 0x9D65: 0x629B, //CJK UNIFIED IDEOGRAPH - 0x9D66: 0x62C9, //CJK UNIFIED IDEOGRAPH - 0x9D67: 0x630C, //CJK UNIFIED IDEOGRAPH - 0x9D68: 0x62EE, //CJK UNIFIED IDEOGRAPH - 0x9D69: 0x62F1, //CJK UNIFIED IDEOGRAPH - 0x9D6A: 0x6327, //CJK UNIFIED IDEOGRAPH - 0x9D6B: 0x6302, //CJK UNIFIED IDEOGRAPH - 0x9D6C: 0x6308, //CJK UNIFIED IDEOGRAPH - 0x9D6D: 0x62EF, //CJK UNIFIED IDEOGRAPH - 0x9D6E: 0x62F5, //CJK UNIFIED IDEOGRAPH - 0x9D6F: 0x6350, //CJK UNIFIED IDEOGRAPH - 0x9D70: 0x633E, //CJK UNIFIED IDEOGRAPH - 0x9D71: 0x634D, //CJK UNIFIED IDEOGRAPH - 0x9D72: 0x641C, //CJK UNIFIED IDEOGRAPH - 0x9D73: 0x634F, //CJK UNIFIED IDEOGRAPH - 0x9D74: 0x6396, //CJK UNIFIED IDEOGRAPH - 0x9D75: 0x638E, //CJK UNIFIED IDEOGRAPH - 0x9D76: 0x6380, //CJK UNIFIED IDEOGRAPH - 0x9D77: 0x63AB, //CJK UNIFIED IDEOGRAPH - 0x9D78: 0x6376, //CJK UNIFIED IDEOGRAPH - 0x9D79: 0x63A3, //CJK UNIFIED IDEOGRAPH - 0x9D7A: 0x638F, //CJK UNIFIED IDEOGRAPH - 0x9D7B: 0x6389, //CJK UNIFIED IDEOGRAPH - 0x9D7C: 0x639F, //CJK UNIFIED IDEOGRAPH - 0x9D7D: 0x63B5, //CJK UNIFIED IDEOGRAPH - 0x9D7E: 0x636B, //CJK UNIFIED IDEOGRAPH - 0x9D80: 0x6369, //CJK UNIFIED IDEOGRAPH - 0x9D81: 0x63BE, //CJK UNIFIED IDEOGRAPH - 0x9D82: 0x63E9, //CJK UNIFIED IDEOGRAPH - 0x9D83: 0x63C0, //CJK UNIFIED IDEOGRAPH - 0x9D84: 0x63C6, //CJK UNIFIED IDEOGRAPH - 0x9D85: 0x63E3, //CJK UNIFIED IDEOGRAPH - 0x9D86: 0x63C9, //CJK UNIFIED IDEOGRAPH - 0x9D87: 0x63D2, //CJK UNIFIED IDEOGRAPH - 0x9D88: 0x63F6, //CJK UNIFIED IDEOGRAPH - 0x9D89: 0x63C4, //CJK UNIFIED IDEOGRAPH - 0x9D8A: 0x6416, //CJK UNIFIED IDEOGRAPH - 0x9D8B: 0x6434, //CJK UNIFIED IDEOGRAPH - 0x9D8C: 0x6406, //CJK UNIFIED IDEOGRAPH - 0x9D8D: 0x6413, //CJK UNIFIED IDEOGRAPH - 0x9D8E: 0x6426, //CJK UNIFIED IDEOGRAPH - 0x9D8F: 0x6436, //CJK UNIFIED IDEOGRAPH - 0x9D90: 0x651D, //CJK UNIFIED IDEOGRAPH - 0x9D91: 0x6417, //CJK UNIFIED IDEOGRAPH - 0x9D92: 0x6428, //CJK UNIFIED IDEOGRAPH - 0x9D93: 0x640F, //CJK UNIFIED IDEOGRAPH - 0x9D94: 0x6467, //CJK UNIFIED IDEOGRAPH - 0x9D95: 0x646F, //CJK UNIFIED IDEOGRAPH - 0x9D96: 0x6476, //CJK UNIFIED IDEOGRAPH - 0x9D97: 0x644E, //CJK UNIFIED IDEOGRAPH - 0x9D98: 0x652A, //CJK UNIFIED IDEOGRAPH - 0x9D99: 0x6495, //CJK UNIFIED IDEOGRAPH - 0x9D9A: 0x6493, //CJK UNIFIED IDEOGRAPH - 0x9D9B: 0x64A5, //CJK UNIFIED IDEOGRAPH - 0x9D9C: 0x64A9, //CJK UNIFIED IDEOGRAPH - 0x9D9D: 0x6488, //CJK UNIFIED IDEOGRAPH - 0x9D9E: 0x64BC, //CJK UNIFIED IDEOGRAPH - 0x9D9F: 0x64DA, //CJK UNIFIED IDEOGRAPH - 0x9DA0: 0x64D2, //CJK UNIFIED IDEOGRAPH - 0x9DA1: 0x64C5, //CJK UNIFIED IDEOGRAPH - 0x9DA2: 0x64C7, //CJK UNIFIED IDEOGRAPH - 0x9DA3: 0x64BB, //CJK UNIFIED IDEOGRAPH - 0x9DA4: 0x64D8, //CJK UNIFIED IDEOGRAPH - 0x9DA5: 0x64C2, //CJK UNIFIED IDEOGRAPH - 0x9DA6: 0x64F1, //CJK UNIFIED IDEOGRAPH - 0x9DA7: 0x64E7, //CJK UNIFIED IDEOGRAPH - 0x9DA8: 0x8209, //CJK UNIFIED IDEOGRAPH - 0x9DA9: 0x64E0, //CJK UNIFIED IDEOGRAPH - 0x9DAA: 0x64E1, //CJK UNIFIED IDEOGRAPH - 0x9DAB: 0x62AC, //CJK UNIFIED IDEOGRAPH - 0x9DAC: 0x64E3, //CJK UNIFIED IDEOGRAPH - 0x9DAD: 0x64EF, //CJK UNIFIED IDEOGRAPH - 0x9DAE: 0x652C, //CJK UNIFIED IDEOGRAPH - 0x9DAF: 0x64F6, //CJK UNIFIED IDEOGRAPH - 0x9DB0: 0x64F4, //CJK UNIFIED IDEOGRAPH - 0x9DB1: 0x64F2, //CJK UNIFIED IDEOGRAPH - 0x9DB2: 0x64FA, //CJK UNIFIED IDEOGRAPH - 0x9DB3: 0x6500, //CJK UNIFIED IDEOGRAPH - 0x9DB4: 0x64FD, //CJK UNIFIED IDEOGRAPH - 0x9DB5: 0x6518, //CJK UNIFIED IDEOGRAPH - 0x9DB6: 0x651C, //CJK UNIFIED IDEOGRAPH - 0x9DB7: 0x6505, //CJK UNIFIED IDEOGRAPH - 0x9DB8: 0x6524, //CJK UNIFIED IDEOGRAPH - 0x9DB9: 0x6523, //CJK UNIFIED IDEOGRAPH - 0x9DBA: 0x652B, //CJK UNIFIED IDEOGRAPH - 0x9DBB: 0x6534, //CJK UNIFIED IDEOGRAPH - 0x9DBC: 0x6535, //CJK UNIFIED IDEOGRAPH - 0x9DBD: 0x6537, //CJK UNIFIED IDEOGRAPH - 0x9DBE: 0x6536, //CJK UNIFIED IDEOGRAPH - 0x9DBF: 0x6538, //CJK UNIFIED IDEOGRAPH - 0x9DC0: 0x754B, //CJK UNIFIED IDEOGRAPH - 0x9DC1: 0x6548, //CJK UNIFIED IDEOGRAPH - 0x9DC2: 0x6556, //CJK UNIFIED IDEOGRAPH - 0x9DC3: 0x6555, //CJK UNIFIED IDEOGRAPH - 0x9DC4: 0x654D, //CJK UNIFIED IDEOGRAPH - 0x9DC5: 0x6558, //CJK UNIFIED IDEOGRAPH - 0x9DC6: 0x655E, //CJK UNIFIED IDEOGRAPH - 0x9DC7: 0x655D, //CJK UNIFIED IDEOGRAPH - 0x9DC8: 0x6572, //CJK UNIFIED IDEOGRAPH - 0x9DC9: 0x6578, //CJK UNIFIED IDEOGRAPH - 0x9DCA: 0x6582, //CJK UNIFIED IDEOGRAPH - 0x9DCB: 0x6583, //CJK UNIFIED IDEOGRAPH - 0x9DCC: 0x8B8A, //CJK UNIFIED IDEOGRAPH - 0x9DCD: 0x659B, //CJK UNIFIED IDEOGRAPH - 0x9DCE: 0x659F, //CJK UNIFIED IDEOGRAPH - 0x9DCF: 0x65AB, //CJK UNIFIED IDEOGRAPH - 0x9DD0: 0x65B7, //CJK UNIFIED IDEOGRAPH - 0x9DD1: 0x65C3, //CJK UNIFIED IDEOGRAPH - 0x9DD2: 0x65C6, //CJK UNIFIED IDEOGRAPH - 0x9DD3: 0x65C1, //CJK UNIFIED IDEOGRAPH - 0x9DD4: 0x65C4, //CJK UNIFIED IDEOGRAPH - 0x9DD5: 0x65CC, //CJK UNIFIED IDEOGRAPH - 0x9DD6: 0x65D2, //CJK UNIFIED IDEOGRAPH - 0x9DD7: 0x65DB, //CJK UNIFIED IDEOGRAPH - 0x9DD8: 0x65D9, //CJK UNIFIED IDEOGRAPH - 0x9DD9: 0x65E0, //CJK UNIFIED IDEOGRAPH - 0x9DDA: 0x65E1, //CJK UNIFIED IDEOGRAPH - 0x9DDB: 0x65F1, //CJK UNIFIED IDEOGRAPH - 0x9DDC: 0x6772, //CJK UNIFIED IDEOGRAPH - 0x9DDD: 0x660A, //CJK UNIFIED IDEOGRAPH - 0x9DDE: 0x6603, //CJK UNIFIED IDEOGRAPH - 0x9DDF: 0x65FB, //CJK UNIFIED IDEOGRAPH - 0x9DE0: 0x6773, //CJK UNIFIED IDEOGRAPH - 0x9DE1: 0x6635, //CJK UNIFIED IDEOGRAPH - 0x9DE2: 0x6636, //CJK UNIFIED IDEOGRAPH - 0x9DE3: 0x6634, //CJK UNIFIED IDEOGRAPH - 0x9DE4: 0x661C, //CJK UNIFIED IDEOGRAPH - 0x9DE5: 0x664F, //CJK UNIFIED IDEOGRAPH - 0x9DE6: 0x6644, //CJK UNIFIED IDEOGRAPH - 0x9DE7: 0x6649, //CJK UNIFIED IDEOGRAPH - 0x9DE8: 0x6641, //CJK UNIFIED IDEOGRAPH - 0x9DE9: 0x665E, //CJK UNIFIED IDEOGRAPH - 0x9DEA: 0x665D, //CJK UNIFIED IDEOGRAPH - 0x9DEB: 0x6664, //CJK UNIFIED IDEOGRAPH - 0x9DEC: 0x6667, //CJK UNIFIED IDEOGRAPH - 0x9DED: 0x6668, //CJK UNIFIED IDEOGRAPH - 0x9DEE: 0x665F, //CJK UNIFIED IDEOGRAPH - 0x9DEF: 0x6662, //CJK UNIFIED IDEOGRAPH - 0x9DF0: 0x6670, //CJK UNIFIED IDEOGRAPH - 0x9DF1: 0x6683, //CJK UNIFIED IDEOGRAPH - 0x9DF2: 0x6688, //CJK UNIFIED IDEOGRAPH - 0x9DF3: 0x668E, //CJK UNIFIED IDEOGRAPH - 0x9DF4: 0x6689, //CJK UNIFIED IDEOGRAPH - 0x9DF5: 0x6684, //CJK UNIFIED IDEOGRAPH - 0x9DF6: 0x6698, //CJK UNIFIED IDEOGRAPH - 0x9DF7: 0x669D, //CJK UNIFIED IDEOGRAPH - 0x9DF8: 0x66C1, //CJK UNIFIED IDEOGRAPH - 0x9DF9: 0x66B9, //CJK UNIFIED IDEOGRAPH - 0x9DFA: 0x66C9, //CJK UNIFIED IDEOGRAPH - 0x9DFB: 0x66BE, //CJK UNIFIED IDEOGRAPH - 0x9DFC: 0x66BC, //CJK UNIFIED IDEOGRAPH - 0x9E40: 0x66C4, //CJK UNIFIED IDEOGRAPH - 0x9E41: 0x66B8, //CJK UNIFIED IDEOGRAPH - 0x9E42: 0x66D6, //CJK UNIFIED IDEOGRAPH - 0x9E43: 0x66DA, //CJK UNIFIED IDEOGRAPH - 0x9E44: 0x66E0, //CJK UNIFIED IDEOGRAPH - 0x9E45: 0x663F, //CJK UNIFIED IDEOGRAPH - 0x9E46: 0x66E6, //CJK UNIFIED IDEOGRAPH - 0x9E47: 0x66E9, //CJK UNIFIED IDEOGRAPH - 0x9E48: 0x66F0, //CJK UNIFIED IDEOGRAPH - 0x9E49: 0x66F5, //CJK UNIFIED IDEOGRAPH - 0x9E4A: 0x66F7, //CJK UNIFIED IDEOGRAPH - 0x9E4B: 0x670F, //CJK UNIFIED IDEOGRAPH - 0x9E4C: 0x6716, //CJK UNIFIED IDEOGRAPH - 0x9E4D: 0x671E, //CJK UNIFIED IDEOGRAPH - 0x9E4E: 0x6726, //CJK UNIFIED IDEOGRAPH - 0x9E4F: 0x6727, //CJK UNIFIED IDEOGRAPH - 0x9E50: 0x9738, //CJK UNIFIED IDEOGRAPH - 0x9E51: 0x672E, //CJK UNIFIED IDEOGRAPH - 0x9E52: 0x673F, //CJK UNIFIED IDEOGRAPH - 0x9E53: 0x6736, //CJK UNIFIED IDEOGRAPH - 0x9E54: 0x6741, //CJK UNIFIED IDEOGRAPH - 0x9E55: 0x6738, //CJK UNIFIED IDEOGRAPH - 0x9E56: 0x6737, //CJK UNIFIED IDEOGRAPH - 0x9E57: 0x6746, //CJK UNIFIED IDEOGRAPH - 0x9E58: 0x675E, //CJK UNIFIED IDEOGRAPH - 0x9E59: 0x6760, //CJK UNIFIED IDEOGRAPH - 0x9E5A: 0x6759, //CJK UNIFIED IDEOGRAPH - 0x9E5B: 0x6763, //CJK UNIFIED IDEOGRAPH - 0x9E5C: 0x6764, //CJK UNIFIED IDEOGRAPH - 0x9E5D: 0x6789, //CJK UNIFIED IDEOGRAPH - 0x9E5E: 0x6770, //CJK UNIFIED IDEOGRAPH - 0x9E5F: 0x67A9, //CJK UNIFIED IDEOGRAPH - 0x9E60: 0x677C, //CJK UNIFIED IDEOGRAPH - 0x9E61: 0x676A, //CJK UNIFIED IDEOGRAPH - 0x9E62: 0x678C, //CJK UNIFIED IDEOGRAPH - 0x9E63: 0x678B, //CJK UNIFIED IDEOGRAPH - 0x9E64: 0x67A6, //CJK UNIFIED IDEOGRAPH - 0x9E65: 0x67A1, //CJK UNIFIED IDEOGRAPH - 0x9E66: 0x6785, //CJK UNIFIED IDEOGRAPH - 0x9E67: 0x67B7, //CJK UNIFIED IDEOGRAPH - 0x9E68: 0x67EF, //CJK UNIFIED IDEOGRAPH - 0x9E69: 0x67B4, //CJK UNIFIED IDEOGRAPH - 0x9E6A: 0x67EC, //CJK UNIFIED IDEOGRAPH - 0x9E6B: 0x67B3, //CJK UNIFIED IDEOGRAPH - 0x9E6C: 0x67E9, //CJK UNIFIED IDEOGRAPH - 0x9E6D: 0x67B8, //CJK UNIFIED IDEOGRAPH - 0x9E6E: 0x67E4, //CJK UNIFIED IDEOGRAPH - 0x9E6F: 0x67DE, //CJK UNIFIED IDEOGRAPH - 0x9E70: 0x67DD, //CJK UNIFIED IDEOGRAPH - 0x9E71: 0x67E2, //CJK UNIFIED IDEOGRAPH - 0x9E72: 0x67EE, //CJK UNIFIED IDEOGRAPH - 0x9E73: 0x67B9, //CJK UNIFIED IDEOGRAPH - 0x9E74: 0x67CE, //CJK UNIFIED IDEOGRAPH - 0x9E75: 0x67C6, //CJK UNIFIED IDEOGRAPH - 0x9E76: 0x67E7, //CJK UNIFIED IDEOGRAPH - 0x9E77: 0x6A9C, //CJK UNIFIED IDEOGRAPH - 0x9E78: 0x681E, //CJK UNIFIED IDEOGRAPH - 0x9E79: 0x6846, //CJK UNIFIED IDEOGRAPH - 0x9E7A: 0x6829, //CJK UNIFIED IDEOGRAPH - 0x9E7B: 0x6840, //CJK UNIFIED IDEOGRAPH - 0x9E7C: 0x684D, //CJK UNIFIED IDEOGRAPH - 0x9E7D: 0x6832, //CJK UNIFIED IDEOGRAPH - 0x9E7E: 0x684E, //CJK UNIFIED IDEOGRAPH - 0x9E80: 0x68B3, //CJK UNIFIED IDEOGRAPH - 0x9E81: 0x682B, //CJK UNIFIED IDEOGRAPH - 0x9E82: 0x6859, //CJK UNIFIED IDEOGRAPH - 0x9E83: 0x6863, //CJK UNIFIED IDEOGRAPH - 0x9E84: 0x6877, //CJK UNIFIED IDEOGRAPH - 0x9E85: 0x687F, //CJK UNIFIED IDEOGRAPH - 0x9E86: 0x689F, //CJK UNIFIED IDEOGRAPH - 0x9E87: 0x688F, //CJK UNIFIED IDEOGRAPH - 0x9E88: 0x68AD, //CJK UNIFIED IDEOGRAPH - 0x9E89: 0x6894, //CJK UNIFIED IDEOGRAPH - 0x9E8A: 0x689D, //CJK UNIFIED IDEOGRAPH - 0x9E8B: 0x689B, //CJK UNIFIED IDEOGRAPH - 0x9E8C: 0x6883, //CJK UNIFIED IDEOGRAPH - 0x9E8D: 0x6AAE, //CJK UNIFIED IDEOGRAPH - 0x9E8E: 0x68B9, //CJK UNIFIED IDEOGRAPH - 0x9E8F: 0x6874, //CJK UNIFIED IDEOGRAPH - 0x9E90: 0x68B5, //CJK UNIFIED IDEOGRAPH - 0x9E91: 0x68A0, //CJK UNIFIED IDEOGRAPH - 0x9E92: 0x68BA, //CJK UNIFIED IDEOGRAPH - 0x9E93: 0x690F, //CJK UNIFIED IDEOGRAPH - 0x9E94: 0x688D, //CJK UNIFIED IDEOGRAPH - 0x9E95: 0x687E, //CJK UNIFIED IDEOGRAPH - 0x9E96: 0x6901, //CJK UNIFIED IDEOGRAPH - 0x9E97: 0x68CA, //CJK UNIFIED IDEOGRAPH - 0x9E98: 0x6908, //CJK UNIFIED IDEOGRAPH - 0x9E99: 0x68D8, //CJK UNIFIED IDEOGRAPH - 0x9E9A: 0x6922, //CJK UNIFIED IDEOGRAPH - 0x9E9B: 0x6926, //CJK UNIFIED IDEOGRAPH - 0x9E9C: 0x68E1, //CJK UNIFIED IDEOGRAPH - 0x9E9D: 0x690C, //CJK UNIFIED IDEOGRAPH - 0x9E9E: 0x68CD, //CJK UNIFIED IDEOGRAPH - 0x9E9F: 0x68D4, //CJK UNIFIED IDEOGRAPH - 0x9EA0: 0x68E7, //CJK UNIFIED IDEOGRAPH - 0x9EA1: 0x68D5, //CJK UNIFIED IDEOGRAPH - 0x9EA2: 0x6936, //CJK UNIFIED IDEOGRAPH - 0x9EA3: 0x6912, //CJK UNIFIED IDEOGRAPH - 0x9EA4: 0x6904, //CJK UNIFIED IDEOGRAPH - 0x9EA5: 0x68D7, //CJK UNIFIED IDEOGRAPH - 0x9EA6: 0x68E3, //CJK UNIFIED IDEOGRAPH - 0x9EA7: 0x6925, //CJK UNIFIED IDEOGRAPH - 0x9EA8: 0x68F9, //CJK UNIFIED IDEOGRAPH - 0x9EA9: 0x68E0, //CJK UNIFIED IDEOGRAPH - 0x9EAA: 0x68EF, //CJK UNIFIED IDEOGRAPH - 0x9EAB: 0x6928, //CJK UNIFIED IDEOGRAPH - 0x9EAC: 0x692A, //CJK UNIFIED IDEOGRAPH - 0x9EAD: 0x691A, //CJK UNIFIED IDEOGRAPH - 0x9EAE: 0x6923, //CJK UNIFIED IDEOGRAPH - 0x9EAF: 0x6921, //CJK UNIFIED IDEOGRAPH - 0x9EB0: 0x68C6, //CJK UNIFIED IDEOGRAPH - 0x9EB1: 0x6979, //CJK UNIFIED IDEOGRAPH - 0x9EB2: 0x6977, //CJK UNIFIED IDEOGRAPH - 0x9EB3: 0x695C, //CJK UNIFIED IDEOGRAPH - 0x9EB4: 0x6978, //CJK UNIFIED IDEOGRAPH - 0x9EB5: 0x696B, //CJK UNIFIED IDEOGRAPH - 0x9EB6: 0x6954, //CJK UNIFIED IDEOGRAPH - 0x9EB7: 0x697E, //CJK UNIFIED IDEOGRAPH - 0x9EB8: 0x696E, //CJK UNIFIED IDEOGRAPH - 0x9EB9: 0x6939, //CJK UNIFIED IDEOGRAPH - 0x9EBA: 0x6974, //CJK UNIFIED IDEOGRAPH - 0x9EBB: 0x693D, //CJK UNIFIED IDEOGRAPH - 0x9EBC: 0x6959, //CJK UNIFIED IDEOGRAPH - 0x9EBD: 0x6930, //CJK UNIFIED IDEOGRAPH - 0x9EBE: 0x6961, //CJK UNIFIED IDEOGRAPH - 0x9EBF: 0x695E, //CJK UNIFIED IDEOGRAPH - 0x9EC0: 0x695D, //CJK UNIFIED IDEOGRAPH - 0x9EC1: 0x6981, //CJK UNIFIED IDEOGRAPH - 0x9EC2: 0x696A, //CJK UNIFIED IDEOGRAPH - 0x9EC3: 0x69B2, //CJK UNIFIED IDEOGRAPH - 0x9EC4: 0x69AE, //CJK UNIFIED IDEOGRAPH - 0x9EC5: 0x69D0, //CJK UNIFIED IDEOGRAPH - 0x9EC6: 0x69BF, //CJK UNIFIED IDEOGRAPH - 0x9EC7: 0x69C1, //CJK UNIFIED IDEOGRAPH - 0x9EC8: 0x69D3, //CJK UNIFIED IDEOGRAPH - 0x9EC9: 0x69BE, //CJK UNIFIED IDEOGRAPH - 0x9ECA: 0x69CE, //CJK UNIFIED IDEOGRAPH - 0x9ECB: 0x5BE8, //CJK UNIFIED IDEOGRAPH - 0x9ECC: 0x69CA, //CJK UNIFIED IDEOGRAPH - 0x9ECD: 0x69DD, //CJK UNIFIED IDEOGRAPH - 0x9ECE: 0x69BB, //CJK UNIFIED IDEOGRAPH - 0x9ECF: 0x69C3, //CJK UNIFIED IDEOGRAPH - 0x9ED0: 0x69A7, //CJK UNIFIED IDEOGRAPH - 0x9ED1: 0x6A2E, //CJK UNIFIED IDEOGRAPH - 0x9ED2: 0x6991, //CJK UNIFIED IDEOGRAPH - 0x9ED3: 0x69A0, //CJK UNIFIED IDEOGRAPH - 0x9ED4: 0x699C, //CJK UNIFIED IDEOGRAPH - 0x9ED5: 0x6995, //CJK UNIFIED IDEOGRAPH - 0x9ED6: 0x69B4, //CJK UNIFIED IDEOGRAPH - 0x9ED7: 0x69DE, //CJK UNIFIED IDEOGRAPH - 0x9ED8: 0x69E8, //CJK UNIFIED IDEOGRAPH - 0x9ED9: 0x6A02, //CJK UNIFIED IDEOGRAPH - 0x9EDA: 0x6A1B, //CJK UNIFIED IDEOGRAPH - 0x9EDB: 0x69FF, //CJK UNIFIED IDEOGRAPH - 0x9EDC: 0x6B0A, //CJK UNIFIED IDEOGRAPH - 0x9EDD: 0x69F9, //CJK UNIFIED IDEOGRAPH - 0x9EDE: 0x69F2, //CJK UNIFIED IDEOGRAPH - 0x9EDF: 0x69E7, //CJK UNIFIED IDEOGRAPH - 0x9EE0: 0x6A05, //CJK UNIFIED IDEOGRAPH - 0x9EE1: 0x69B1, //CJK UNIFIED IDEOGRAPH - 0x9EE2: 0x6A1E, //CJK UNIFIED IDEOGRAPH - 0x9EE3: 0x69ED, //CJK UNIFIED IDEOGRAPH - 0x9EE4: 0x6A14, //CJK UNIFIED IDEOGRAPH - 0x9EE5: 0x69EB, //CJK UNIFIED IDEOGRAPH - 0x9EE6: 0x6A0A, //CJK UNIFIED IDEOGRAPH - 0x9EE7: 0x6A12, //CJK UNIFIED IDEOGRAPH - 0x9EE8: 0x6AC1, //CJK UNIFIED IDEOGRAPH - 0x9EE9: 0x6A23, //CJK UNIFIED IDEOGRAPH - 0x9EEA: 0x6A13, //CJK UNIFIED IDEOGRAPH - 0x9EEB: 0x6A44, //CJK UNIFIED IDEOGRAPH - 0x9EEC: 0x6A0C, //CJK UNIFIED IDEOGRAPH - 0x9EED: 0x6A72, //CJK UNIFIED IDEOGRAPH - 0x9EEE: 0x6A36, //CJK UNIFIED IDEOGRAPH - 0x9EEF: 0x6A78, //CJK UNIFIED IDEOGRAPH - 0x9EF0: 0x6A47, //CJK UNIFIED IDEOGRAPH - 0x9EF1: 0x6A62, //CJK UNIFIED IDEOGRAPH - 0x9EF2: 0x6A59, //CJK UNIFIED IDEOGRAPH - 0x9EF3: 0x6A66, //CJK UNIFIED IDEOGRAPH - 0x9EF4: 0x6A48, //CJK UNIFIED IDEOGRAPH - 0x9EF5: 0x6A38, //CJK UNIFIED IDEOGRAPH - 0x9EF6: 0x6A22, //CJK UNIFIED IDEOGRAPH - 0x9EF7: 0x6A90, //CJK UNIFIED IDEOGRAPH - 0x9EF8: 0x6A8D, //CJK UNIFIED IDEOGRAPH - 0x9EF9: 0x6AA0, //CJK UNIFIED IDEOGRAPH - 0x9EFA: 0x6A84, //CJK UNIFIED IDEOGRAPH - 0x9EFB: 0x6AA2, //CJK UNIFIED IDEOGRAPH - 0x9EFC: 0x6AA3, //CJK UNIFIED IDEOGRAPH - 0x9F40: 0x6A97, //CJK UNIFIED IDEOGRAPH - 0x9F41: 0x8617, //CJK UNIFIED IDEOGRAPH - 0x9F42: 0x6ABB, //CJK UNIFIED IDEOGRAPH - 0x9F43: 0x6AC3, //CJK UNIFIED IDEOGRAPH - 0x9F44: 0x6AC2, //CJK UNIFIED IDEOGRAPH - 0x9F45: 0x6AB8, //CJK UNIFIED IDEOGRAPH - 0x9F46: 0x6AB3, //CJK UNIFIED IDEOGRAPH - 0x9F47: 0x6AAC, //CJK UNIFIED IDEOGRAPH - 0x9F48: 0x6ADE, //CJK UNIFIED IDEOGRAPH - 0x9F49: 0x6AD1, //CJK UNIFIED IDEOGRAPH - 0x9F4A: 0x6ADF, //CJK UNIFIED IDEOGRAPH - 0x9F4B: 0x6AAA, //CJK UNIFIED IDEOGRAPH - 0x9F4C: 0x6ADA, //CJK UNIFIED IDEOGRAPH - 0x9F4D: 0x6AEA, //CJK UNIFIED IDEOGRAPH - 0x9F4E: 0x6AFB, //CJK UNIFIED IDEOGRAPH - 0x9F4F: 0x6B05, //CJK UNIFIED IDEOGRAPH - 0x9F50: 0x8616, //CJK UNIFIED IDEOGRAPH - 0x9F51: 0x6AFA, //CJK UNIFIED IDEOGRAPH - 0x9F52: 0x6B12, //CJK UNIFIED IDEOGRAPH - 0x9F53: 0x6B16, //CJK UNIFIED IDEOGRAPH - 0x9F54: 0x9B31, //CJK UNIFIED IDEOGRAPH - 0x9F55: 0x6B1F, //CJK UNIFIED IDEOGRAPH - 0x9F56: 0x6B38, //CJK UNIFIED IDEOGRAPH - 0x9F57: 0x6B37, //CJK UNIFIED IDEOGRAPH - 0x9F58: 0x76DC, //CJK UNIFIED IDEOGRAPH - 0x9F59: 0x6B39, //CJK UNIFIED IDEOGRAPH - 0x9F5A: 0x98EE, //CJK UNIFIED IDEOGRAPH - 0x9F5B: 0x6B47, //CJK UNIFIED IDEOGRAPH - 0x9F5C: 0x6B43, //CJK UNIFIED IDEOGRAPH - 0x9F5D: 0x6B49, //CJK UNIFIED IDEOGRAPH - 0x9F5E: 0x6B50, //CJK UNIFIED IDEOGRAPH - 0x9F5F: 0x6B59, //CJK UNIFIED IDEOGRAPH - 0x9F60: 0x6B54, //CJK UNIFIED IDEOGRAPH - 0x9F61: 0x6B5B, //CJK UNIFIED IDEOGRAPH - 0x9F62: 0x6B5F, //CJK UNIFIED IDEOGRAPH - 0x9F63: 0x6B61, //CJK UNIFIED IDEOGRAPH - 0x9F64: 0x6B78, //CJK UNIFIED IDEOGRAPH - 0x9F65: 0x6B79, //CJK UNIFIED IDEOGRAPH - 0x9F66: 0x6B7F, //CJK UNIFIED IDEOGRAPH - 0x9F67: 0x6B80, //CJK UNIFIED IDEOGRAPH - 0x9F68: 0x6B84, //CJK UNIFIED IDEOGRAPH - 0x9F69: 0x6B83, //CJK UNIFIED IDEOGRAPH - 0x9F6A: 0x6B8D, //CJK UNIFIED IDEOGRAPH - 0x9F6B: 0x6B98, //CJK UNIFIED IDEOGRAPH - 0x9F6C: 0x6B95, //CJK UNIFIED IDEOGRAPH - 0x9F6D: 0x6B9E, //CJK UNIFIED IDEOGRAPH - 0x9F6E: 0x6BA4, //CJK UNIFIED IDEOGRAPH - 0x9F6F: 0x6BAA, //CJK UNIFIED IDEOGRAPH - 0x9F70: 0x6BAB, //CJK UNIFIED IDEOGRAPH - 0x9F71: 0x6BAF, //CJK UNIFIED IDEOGRAPH - 0x9F72: 0x6BB2, //CJK UNIFIED IDEOGRAPH - 0x9F73: 0x6BB1, //CJK UNIFIED IDEOGRAPH - 0x9F74: 0x6BB3, //CJK UNIFIED IDEOGRAPH - 0x9F75: 0x6BB7, //CJK UNIFIED IDEOGRAPH - 0x9F76: 0x6BBC, //CJK UNIFIED IDEOGRAPH - 0x9F77: 0x6BC6, //CJK UNIFIED IDEOGRAPH - 0x9F78: 0x6BCB, //CJK UNIFIED IDEOGRAPH - 0x9F79: 0x6BD3, //CJK UNIFIED IDEOGRAPH - 0x9F7A: 0x6BDF, //CJK UNIFIED IDEOGRAPH - 0x9F7B: 0x6BEC, //CJK UNIFIED IDEOGRAPH - 0x9F7C: 0x6BEB, //CJK UNIFIED IDEOGRAPH - 0x9F7D: 0x6BF3, //CJK UNIFIED IDEOGRAPH - 0x9F7E: 0x6BEF, //CJK UNIFIED IDEOGRAPH - 0x9F80: 0x9EBE, //CJK UNIFIED IDEOGRAPH - 0x9F81: 0x6C08, //CJK UNIFIED IDEOGRAPH - 0x9F82: 0x6C13, //CJK UNIFIED IDEOGRAPH - 0x9F83: 0x6C14, //CJK UNIFIED IDEOGRAPH - 0x9F84: 0x6C1B, //CJK UNIFIED IDEOGRAPH - 0x9F85: 0x6C24, //CJK UNIFIED IDEOGRAPH - 0x9F86: 0x6C23, //CJK UNIFIED IDEOGRAPH - 0x9F87: 0x6C5E, //CJK UNIFIED IDEOGRAPH - 0x9F88: 0x6C55, //CJK UNIFIED IDEOGRAPH - 0x9F89: 0x6C62, //CJK UNIFIED IDEOGRAPH - 0x9F8A: 0x6C6A, //CJK UNIFIED IDEOGRAPH - 0x9F8B: 0x6C82, //CJK UNIFIED IDEOGRAPH - 0x9F8C: 0x6C8D, //CJK UNIFIED IDEOGRAPH - 0x9F8D: 0x6C9A, //CJK UNIFIED IDEOGRAPH - 0x9F8E: 0x6C81, //CJK UNIFIED IDEOGRAPH - 0x9F8F: 0x6C9B, //CJK UNIFIED IDEOGRAPH - 0x9F90: 0x6C7E, //CJK UNIFIED IDEOGRAPH - 0x9F91: 0x6C68, //CJK UNIFIED IDEOGRAPH - 0x9F92: 0x6C73, //CJK UNIFIED IDEOGRAPH - 0x9F93: 0x6C92, //CJK UNIFIED IDEOGRAPH - 0x9F94: 0x6C90, //CJK UNIFIED IDEOGRAPH - 0x9F95: 0x6CC4, //CJK UNIFIED IDEOGRAPH - 0x9F96: 0x6CF1, //CJK UNIFIED IDEOGRAPH - 0x9F97: 0x6CD3, //CJK UNIFIED IDEOGRAPH - 0x9F98: 0x6CBD, //CJK UNIFIED IDEOGRAPH - 0x9F99: 0x6CD7, //CJK UNIFIED IDEOGRAPH - 0x9F9A: 0x6CC5, //CJK UNIFIED IDEOGRAPH - 0x9F9B: 0x6CDD, //CJK UNIFIED IDEOGRAPH - 0x9F9C: 0x6CAE, //CJK UNIFIED IDEOGRAPH - 0x9F9D: 0x6CB1, //CJK UNIFIED IDEOGRAPH - 0x9F9E: 0x6CBE, //CJK UNIFIED IDEOGRAPH - 0x9F9F: 0x6CBA, //CJK UNIFIED IDEOGRAPH - 0x9FA0: 0x6CDB, //CJK UNIFIED IDEOGRAPH - 0x9FA1: 0x6CEF, //CJK UNIFIED IDEOGRAPH - 0x9FA2: 0x6CD9, //CJK UNIFIED IDEOGRAPH - 0x9FA3: 0x6CEA, //CJK UNIFIED IDEOGRAPH - 0x9FA4: 0x6D1F, //CJK UNIFIED IDEOGRAPH - 0x9FA5: 0x884D, //CJK UNIFIED IDEOGRAPH - 0x9FA6: 0x6D36, //CJK UNIFIED IDEOGRAPH - 0x9FA7: 0x6D2B, //CJK UNIFIED IDEOGRAPH - 0x9FA8: 0x6D3D, //CJK UNIFIED IDEOGRAPH - 0x9FA9: 0x6D38, //CJK UNIFIED IDEOGRAPH - 0x9FAA: 0x6D19, //CJK UNIFIED IDEOGRAPH - 0x9FAB: 0x6D35, //CJK UNIFIED IDEOGRAPH - 0x9FAC: 0x6D33, //CJK UNIFIED IDEOGRAPH - 0x9FAD: 0x6D12, //CJK UNIFIED IDEOGRAPH - 0x9FAE: 0x6D0C, //CJK UNIFIED IDEOGRAPH - 0x9FAF: 0x6D63, //CJK UNIFIED IDEOGRAPH - 0x9FB0: 0x6D93, //CJK UNIFIED IDEOGRAPH - 0x9FB1: 0x6D64, //CJK UNIFIED IDEOGRAPH - 0x9FB2: 0x6D5A, //CJK UNIFIED IDEOGRAPH - 0x9FB3: 0x6D79, //CJK UNIFIED IDEOGRAPH - 0x9FB4: 0x6D59, //CJK UNIFIED IDEOGRAPH - 0x9FB5: 0x6D8E, //CJK UNIFIED IDEOGRAPH - 0x9FB6: 0x6D95, //CJK UNIFIED IDEOGRAPH - 0x9FB7: 0x6FE4, //CJK UNIFIED IDEOGRAPH - 0x9FB8: 0x6D85, //CJK UNIFIED IDEOGRAPH - 0x9FB9: 0x6DF9, //CJK UNIFIED IDEOGRAPH - 0x9FBA: 0x6E15, //CJK UNIFIED IDEOGRAPH - 0x9FBB: 0x6E0A, //CJK UNIFIED IDEOGRAPH - 0x9FBC: 0x6DB5, //CJK UNIFIED IDEOGRAPH - 0x9FBD: 0x6DC7, //CJK UNIFIED IDEOGRAPH - 0x9FBE: 0x6DE6, //CJK UNIFIED IDEOGRAPH - 0x9FBF: 0x6DB8, //CJK UNIFIED IDEOGRAPH - 0x9FC0: 0x6DC6, //CJK UNIFIED IDEOGRAPH - 0x9FC1: 0x6DEC, //CJK UNIFIED IDEOGRAPH - 0x9FC2: 0x6DDE, //CJK UNIFIED IDEOGRAPH - 0x9FC3: 0x6DCC, //CJK UNIFIED IDEOGRAPH - 0x9FC4: 0x6DE8, //CJK UNIFIED IDEOGRAPH - 0x9FC5: 0x6DD2, //CJK UNIFIED IDEOGRAPH - 0x9FC6: 0x6DC5, //CJK UNIFIED IDEOGRAPH - 0x9FC7: 0x6DFA, //CJK UNIFIED IDEOGRAPH - 0x9FC8: 0x6DD9, //CJK UNIFIED IDEOGRAPH - 0x9FC9: 0x6DE4, //CJK UNIFIED IDEOGRAPH - 0x9FCA: 0x6DD5, //CJK UNIFIED IDEOGRAPH - 0x9FCB: 0x6DEA, //CJK UNIFIED IDEOGRAPH - 0x9FCC: 0x6DEE, //CJK UNIFIED IDEOGRAPH - 0x9FCD: 0x6E2D, //CJK UNIFIED IDEOGRAPH - 0x9FCE: 0x6E6E, //CJK UNIFIED IDEOGRAPH - 0x9FCF: 0x6E2E, //CJK UNIFIED IDEOGRAPH - 0x9FD0: 0x6E19, //CJK UNIFIED IDEOGRAPH - 0x9FD1: 0x6E72, //CJK UNIFIED IDEOGRAPH - 0x9FD2: 0x6E5F, //CJK UNIFIED IDEOGRAPH - 0x9FD3: 0x6E3E, //CJK UNIFIED IDEOGRAPH - 0x9FD4: 0x6E23, //CJK UNIFIED IDEOGRAPH - 0x9FD5: 0x6E6B, //CJK UNIFIED IDEOGRAPH - 0x9FD6: 0x6E2B, //CJK UNIFIED IDEOGRAPH - 0x9FD7: 0x6E76, //CJK UNIFIED IDEOGRAPH - 0x9FD8: 0x6E4D, //CJK UNIFIED IDEOGRAPH - 0x9FD9: 0x6E1F, //CJK UNIFIED IDEOGRAPH - 0x9FDA: 0x6E43, //CJK UNIFIED IDEOGRAPH - 0x9FDB: 0x6E3A, //CJK UNIFIED IDEOGRAPH - 0x9FDC: 0x6E4E, //CJK UNIFIED IDEOGRAPH - 0x9FDD: 0x6E24, //CJK UNIFIED IDEOGRAPH - 0x9FDE: 0x6EFF, //CJK UNIFIED IDEOGRAPH - 0x9FDF: 0x6E1D, //CJK UNIFIED IDEOGRAPH - 0x9FE0: 0x6E38, //CJK UNIFIED IDEOGRAPH - 0x9FE1: 0x6E82, //CJK UNIFIED IDEOGRAPH - 0x9FE2: 0x6EAA, //CJK UNIFIED IDEOGRAPH - 0x9FE3: 0x6E98, //CJK UNIFIED IDEOGRAPH - 0x9FE4: 0x6EC9, //CJK UNIFIED IDEOGRAPH - 0x9FE5: 0x6EB7, //CJK UNIFIED IDEOGRAPH - 0x9FE6: 0x6ED3, //CJK UNIFIED IDEOGRAPH - 0x9FE7: 0x6EBD, //CJK UNIFIED IDEOGRAPH - 0x9FE8: 0x6EAF, //CJK UNIFIED IDEOGRAPH - 0x9FE9: 0x6EC4, //CJK UNIFIED IDEOGRAPH - 0x9FEA: 0x6EB2, //CJK UNIFIED IDEOGRAPH - 0x9FEB: 0x6ED4, //CJK UNIFIED IDEOGRAPH - 0x9FEC: 0x6ED5, //CJK UNIFIED IDEOGRAPH - 0x9FED: 0x6E8F, //CJK UNIFIED IDEOGRAPH - 0x9FEE: 0x6EA5, //CJK UNIFIED IDEOGRAPH - 0x9FEF: 0x6EC2, //CJK UNIFIED IDEOGRAPH - 0x9FF0: 0x6E9F, //CJK UNIFIED IDEOGRAPH - 0x9FF1: 0x6F41, //CJK UNIFIED IDEOGRAPH - 0x9FF2: 0x6F11, //CJK UNIFIED IDEOGRAPH - 0x9FF3: 0x704C, //CJK UNIFIED IDEOGRAPH - 0x9FF4: 0x6EEC, //CJK UNIFIED IDEOGRAPH - 0x9FF5: 0x6EF8, //CJK UNIFIED IDEOGRAPH - 0x9FF6: 0x6EFE, //CJK UNIFIED IDEOGRAPH - 0x9FF7: 0x6F3F, //CJK UNIFIED IDEOGRAPH - 0x9FF8: 0x6EF2, //CJK UNIFIED IDEOGRAPH - 0x9FF9: 0x6F31, //CJK UNIFIED IDEOGRAPH - 0x9FFA: 0x6EEF, //CJK UNIFIED IDEOGRAPH - 0x9FFB: 0x6F32, //CJK UNIFIED IDEOGRAPH - 0x9FFC: 0x6ECC, //CJK UNIFIED IDEOGRAPH - 0xE040: 0x6F3E, //CJK UNIFIED IDEOGRAPH - 0xE041: 0x6F13, //CJK UNIFIED IDEOGRAPH - 0xE042: 0x6EF7, //CJK UNIFIED IDEOGRAPH - 0xE043: 0x6F86, //CJK UNIFIED IDEOGRAPH - 0xE044: 0x6F7A, //CJK UNIFIED IDEOGRAPH - 0xE045: 0x6F78, //CJK UNIFIED IDEOGRAPH - 0xE046: 0x6F81, //CJK UNIFIED IDEOGRAPH - 0xE047: 0x6F80, //CJK UNIFIED IDEOGRAPH - 0xE048: 0x6F6F, //CJK UNIFIED IDEOGRAPH - 0xE049: 0x6F5B, //CJK UNIFIED IDEOGRAPH - 0xE04A: 0x6FF3, //CJK UNIFIED IDEOGRAPH - 0xE04B: 0x6F6D, //CJK UNIFIED IDEOGRAPH - 0xE04C: 0x6F82, //CJK UNIFIED IDEOGRAPH - 0xE04D: 0x6F7C, //CJK UNIFIED IDEOGRAPH - 0xE04E: 0x6F58, //CJK UNIFIED IDEOGRAPH - 0xE04F: 0x6F8E, //CJK UNIFIED IDEOGRAPH - 0xE050: 0x6F91, //CJK UNIFIED IDEOGRAPH - 0xE051: 0x6FC2, //CJK UNIFIED IDEOGRAPH - 0xE052: 0x6F66, //CJK UNIFIED IDEOGRAPH - 0xE053: 0x6FB3, //CJK UNIFIED IDEOGRAPH - 0xE054: 0x6FA3, //CJK UNIFIED IDEOGRAPH - 0xE055: 0x6FA1, //CJK UNIFIED IDEOGRAPH - 0xE056: 0x6FA4, //CJK UNIFIED IDEOGRAPH - 0xE057: 0x6FB9, //CJK UNIFIED IDEOGRAPH - 0xE058: 0x6FC6, //CJK UNIFIED IDEOGRAPH - 0xE059: 0x6FAA, //CJK UNIFIED IDEOGRAPH - 0xE05A: 0x6FDF, //CJK UNIFIED IDEOGRAPH - 0xE05B: 0x6FD5, //CJK UNIFIED IDEOGRAPH - 0xE05C: 0x6FEC, //CJK UNIFIED IDEOGRAPH - 0xE05D: 0x6FD4, //CJK UNIFIED IDEOGRAPH - 0xE05E: 0x6FD8, //CJK UNIFIED IDEOGRAPH - 0xE05F: 0x6FF1, //CJK UNIFIED IDEOGRAPH - 0xE060: 0x6FEE, //CJK UNIFIED IDEOGRAPH - 0xE061: 0x6FDB, //CJK UNIFIED IDEOGRAPH - 0xE062: 0x7009, //CJK UNIFIED IDEOGRAPH - 0xE063: 0x700B, //CJK UNIFIED IDEOGRAPH - 0xE064: 0x6FFA, //CJK UNIFIED IDEOGRAPH - 0xE065: 0x7011, //CJK UNIFIED IDEOGRAPH - 0xE066: 0x7001, //CJK UNIFIED IDEOGRAPH - 0xE067: 0x700F, //CJK UNIFIED IDEOGRAPH - 0xE068: 0x6FFE, //CJK UNIFIED IDEOGRAPH - 0xE069: 0x701B, //CJK UNIFIED IDEOGRAPH - 0xE06A: 0x701A, //CJK UNIFIED IDEOGRAPH - 0xE06B: 0x6F74, //CJK UNIFIED IDEOGRAPH - 0xE06C: 0x701D, //CJK UNIFIED IDEOGRAPH - 0xE06D: 0x7018, //CJK UNIFIED IDEOGRAPH - 0xE06E: 0x701F, //CJK UNIFIED IDEOGRAPH - 0xE06F: 0x7030, //CJK UNIFIED IDEOGRAPH - 0xE070: 0x703E, //CJK UNIFIED IDEOGRAPH - 0xE071: 0x7032, //CJK UNIFIED IDEOGRAPH - 0xE072: 0x7051, //CJK UNIFIED IDEOGRAPH - 0xE073: 0x7063, //CJK UNIFIED IDEOGRAPH - 0xE074: 0x7099, //CJK UNIFIED IDEOGRAPH - 0xE075: 0x7092, //CJK UNIFIED IDEOGRAPH - 0xE076: 0x70AF, //CJK UNIFIED IDEOGRAPH - 0xE077: 0x70F1, //CJK UNIFIED IDEOGRAPH - 0xE078: 0x70AC, //CJK UNIFIED IDEOGRAPH - 0xE079: 0x70B8, //CJK UNIFIED IDEOGRAPH - 0xE07A: 0x70B3, //CJK UNIFIED IDEOGRAPH - 0xE07B: 0x70AE, //CJK UNIFIED IDEOGRAPH - 0xE07C: 0x70DF, //CJK UNIFIED IDEOGRAPH - 0xE07D: 0x70CB, //CJK UNIFIED IDEOGRAPH - 0xE07E: 0x70DD, //CJK UNIFIED IDEOGRAPH - 0xE080: 0x70D9, //CJK UNIFIED IDEOGRAPH - 0xE081: 0x7109, //CJK UNIFIED IDEOGRAPH - 0xE082: 0x70FD, //CJK UNIFIED IDEOGRAPH - 0xE083: 0x711C, //CJK UNIFIED IDEOGRAPH - 0xE084: 0x7119, //CJK UNIFIED IDEOGRAPH - 0xE085: 0x7165, //CJK UNIFIED IDEOGRAPH - 0xE086: 0x7155, //CJK UNIFIED IDEOGRAPH - 0xE087: 0x7188, //CJK UNIFIED IDEOGRAPH - 0xE088: 0x7166, //CJK UNIFIED IDEOGRAPH - 0xE089: 0x7162, //CJK UNIFIED IDEOGRAPH - 0xE08A: 0x714C, //CJK UNIFIED IDEOGRAPH - 0xE08B: 0x7156, //CJK UNIFIED IDEOGRAPH - 0xE08C: 0x716C, //CJK UNIFIED IDEOGRAPH - 0xE08D: 0x718F, //CJK UNIFIED IDEOGRAPH - 0xE08E: 0x71FB, //CJK UNIFIED IDEOGRAPH - 0xE08F: 0x7184, //CJK UNIFIED IDEOGRAPH - 0xE090: 0x7195, //CJK UNIFIED IDEOGRAPH - 0xE091: 0x71A8, //CJK UNIFIED IDEOGRAPH - 0xE092: 0x71AC, //CJK UNIFIED IDEOGRAPH - 0xE093: 0x71D7, //CJK UNIFIED IDEOGRAPH - 0xE094: 0x71B9, //CJK UNIFIED IDEOGRAPH - 0xE095: 0x71BE, //CJK UNIFIED IDEOGRAPH - 0xE096: 0x71D2, //CJK UNIFIED IDEOGRAPH - 0xE097: 0x71C9, //CJK UNIFIED IDEOGRAPH - 0xE098: 0x71D4, //CJK UNIFIED IDEOGRAPH - 0xE099: 0x71CE, //CJK UNIFIED IDEOGRAPH - 0xE09A: 0x71E0, //CJK UNIFIED IDEOGRAPH - 0xE09B: 0x71EC, //CJK UNIFIED IDEOGRAPH - 0xE09C: 0x71E7, //CJK UNIFIED IDEOGRAPH - 0xE09D: 0x71F5, //CJK UNIFIED IDEOGRAPH - 0xE09E: 0x71FC, //CJK UNIFIED IDEOGRAPH - 0xE09F: 0x71F9, //CJK UNIFIED IDEOGRAPH - 0xE0A0: 0x71FF, //CJK UNIFIED IDEOGRAPH - 0xE0A1: 0x720D, //CJK UNIFIED IDEOGRAPH - 0xE0A2: 0x7210, //CJK UNIFIED IDEOGRAPH - 0xE0A3: 0x721B, //CJK UNIFIED IDEOGRAPH - 0xE0A4: 0x7228, //CJK UNIFIED IDEOGRAPH - 0xE0A5: 0x722D, //CJK UNIFIED IDEOGRAPH - 0xE0A6: 0x722C, //CJK UNIFIED IDEOGRAPH - 0xE0A7: 0x7230, //CJK UNIFIED IDEOGRAPH - 0xE0A8: 0x7232, //CJK UNIFIED IDEOGRAPH - 0xE0A9: 0x723B, //CJK UNIFIED IDEOGRAPH - 0xE0AA: 0x723C, //CJK UNIFIED IDEOGRAPH - 0xE0AB: 0x723F, //CJK UNIFIED IDEOGRAPH - 0xE0AC: 0x7240, //CJK UNIFIED IDEOGRAPH - 0xE0AD: 0x7246, //CJK UNIFIED IDEOGRAPH - 0xE0AE: 0x724B, //CJK UNIFIED IDEOGRAPH - 0xE0AF: 0x7258, //CJK UNIFIED IDEOGRAPH - 0xE0B0: 0x7274, //CJK UNIFIED IDEOGRAPH - 0xE0B1: 0x727E, //CJK UNIFIED IDEOGRAPH - 0xE0B2: 0x7282, //CJK UNIFIED IDEOGRAPH - 0xE0B3: 0x7281, //CJK UNIFIED IDEOGRAPH - 0xE0B4: 0x7287, //CJK UNIFIED IDEOGRAPH - 0xE0B5: 0x7292, //CJK UNIFIED IDEOGRAPH - 0xE0B6: 0x7296, //CJK UNIFIED IDEOGRAPH - 0xE0B7: 0x72A2, //CJK UNIFIED IDEOGRAPH - 0xE0B8: 0x72A7, //CJK UNIFIED IDEOGRAPH - 0xE0B9: 0x72B9, //CJK UNIFIED IDEOGRAPH - 0xE0BA: 0x72B2, //CJK UNIFIED IDEOGRAPH - 0xE0BB: 0x72C3, //CJK UNIFIED IDEOGRAPH - 0xE0BC: 0x72C6, //CJK UNIFIED IDEOGRAPH - 0xE0BD: 0x72C4, //CJK UNIFIED IDEOGRAPH - 0xE0BE: 0x72CE, //CJK UNIFIED IDEOGRAPH - 0xE0BF: 0x72D2, //CJK UNIFIED IDEOGRAPH - 0xE0C0: 0x72E2, //CJK UNIFIED IDEOGRAPH - 0xE0C1: 0x72E0, //CJK UNIFIED IDEOGRAPH - 0xE0C2: 0x72E1, //CJK UNIFIED IDEOGRAPH - 0xE0C3: 0x72F9, //CJK UNIFIED IDEOGRAPH - 0xE0C4: 0x72F7, //CJK UNIFIED IDEOGRAPH - 0xE0C5: 0x500F, //CJK UNIFIED IDEOGRAPH - 0xE0C6: 0x7317, //CJK UNIFIED IDEOGRAPH - 0xE0C7: 0x730A, //CJK UNIFIED IDEOGRAPH - 0xE0C8: 0x731C, //CJK UNIFIED IDEOGRAPH - 0xE0C9: 0x7316, //CJK UNIFIED IDEOGRAPH - 0xE0CA: 0x731D, //CJK UNIFIED IDEOGRAPH - 0xE0CB: 0x7334, //CJK UNIFIED IDEOGRAPH - 0xE0CC: 0x732F, //CJK UNIFIED IDEOGRAPH - 0xE0CD: 0x7329, //CJK UNIFIED IDEOGRAPH - 0xE0CE: 0x7325, //CJK UNIFIED IDEOGRAPH - 0xE0CF: 0x733E, //CJK UNIFIED IDEOGRAPH - 0xE0D0: 0x734E, //CJK UNIFIED IDEOGRAPH - 0xE0D1: 0x734F, //CJK UNIFIED IDEOGRAPH - 0xE0D2: 0x9ED8, //CJK UNIFIED IDEOGRAPH - 0xE0D3: 0x7357, //CJK UNIFIED IDEOGRAPH - 0xE0D4: 0x736A, //CJK UNIFIED IDEOGRAPH - 0xE0D5: 0x7368, //CJK UNIFIED IDEOGRAPH - 0xE0D6: 0x7370, //CJK UNIFIED IDEOGRAPH - 0xE0D7: 0x7378, //CJK UNIFIED IDEOGRAPH - 0xE0D8: 0x7375, //CJK UNIFIED IDEOGRAPH - 0xE0D9: 0x737B, //CJK UNIFIED IDEOGRAPH - 0xE0DA: 0x737A, //CJK UNIFIED IDEOGRAPH - 0xE0DB: 0x73C8, //CJK UNIFIED IDEOGRAPH - 0xE0DC: 0x73B3, //CJK UNIFIED IDEOGRAPH - 0xE0DD: 0x73CE, //CJK UNIFIED IDEOGRAPH - 0xE0DE: 0x73BB, //CJK UNIFIED IDEOGRAPH - 0xE0DF: 0x73C0, //CJK UNIFIED IDEOGRAPH - 0xE0E0: 0x73E5, //CJK UNIFIED IDEOGRAPH - 0xE0E1: 0x73EE, //CJK UNIFIED IDEOGRAPH - 0xE0E2: 0x73DE, //CJK UNIFIED IDEOGRAPH - 0xE0E3: 0x74A2, //CJK UNIFIED IDEOGRAPH - 0xE0E4: 0x7405, //CJK UNIFIED IDEOGRAPH - 0xE0E5: 0x746F, //CJK UNIFIED IDEOGRAPH - 0xE0E6: 0x7425, //CJK UNIFIED IDEOGRAPH - 0xE0E7: 0x73F8, //CJK UNIFIED IDEOGRAPH - 0xE0E8: 0x7432, //CJK UNIFIED IDEOGRAPH - 0xE0E9: 0x743A, //CJK UNIFIED IDEOGRAPH - 0xE0EA: 0x7455, //CJK UNIFIED IDEOGRAPH - 0xE0EB: 0x743F, //CJK UNIFIED IDEOGRAPH - 0xE0EC: 0x745F, //CJK UNIFIED IDEOGRAPH - 0xE0ED: 0x7459, //CJK UNIFIED IDEOGRAPH - 0xE0EE: 0x7441, //CJK UNIFIED IDEOGRAPH - 0xE0EF: 0x745C, //CJK UNIFIED IDEOGRAPH - 0xE0F0: 0x7469, //CJK UNIFIED IDEOGRAPH - 0xE0F1: 0x7470, //CJK UNIFIED IDEOGRAPH - 0xE0F2: 0x7463, //CJK UNIFIED IDEOGRAPH - 0xE0F3: 0x746A, //CJK UNIFIED IDEOGRAPH - 0xE0F4: 0x7476, //CJK UNIFIED IDEOGRAPH - 0xE0F5: 0x747E, //CJK UNIFIED IDEOGRAPH - 0xE0F6: 0x748B, //CJK UNIFIED IDEOGRAPH - 0xE0F7: 0x749E, //CJK UNIFIED IDEOGRAPH - 0xE0F8: 0x74A7, //CJK UNIFIED IDEOGRAPH - 0xE0F9: 0x74CA, //CJK UNIFIED IDEOGRAPH - 0xE0FA: 0x74CF, //CJK UNIFIED IDEOGRAPH - 0xE0FB: 0x74D4, //CJK UNIFIED IDEOGRAPH - 0xE0FC: 0x73F1, //CJK UNIFIED IDEOGRAPH - 0xE140: 0x74E0, //CJK UNIFIED IDEOGRAPH - 0xE141: 0x74E3, //CJK UNIFIED IDEOGRAPH - 0xE142: 0x74E7, //CJK UNIFIED IDEOGRAPH - 0xE143: 0x74E9, //CJK UNIFIED IDEOGRAPH - 0xE144: 0x74EE, //CJK UNIFIED IDEOGRAPH - 0xE145: 0x74F2, //CJK UNIFIED IDEOGRAPH - 0xE146: 0x74F0, //CJK UNIFIED IDEOGRAPH - 0xE147: 0x74F1, //CJK UNIFIED IDEOGRAPH - 0xE148: 0x74F8, //CJK UNIFIED IDEOGRAPH - 0xE149: 0x74F7, //CJK UNIFIED IDEOGRAPH - 0xE14A: 0x7504, //CJK UNIFIED IDEOGRAPH - 0xE14B: 0x7503, //CJK UNIFIED IDEOGRAPH - 0xE14C: 0x7505, //CJK UNIFIED IDEOGRAPH - 0xE14D: 0x750C, //CJK UNIFIED IDEOGRAPH - 0xE14E: 0x750E, //CJK UNIFIED IDEOGRAPH - 0xE14F: 0x750D, //CJK UNIFIED IDEOGRAPH - 0xE150: 0x7515, //CJK UNIFIED IDEOGRAPH - 0xE151: 0x7513, //CJK UNIFIED IDEOGRAPH - 0xE152: 0x751E, //CJK UNIFIED IDEOGRAPH - 0xE153: 0x7526, //CJK UNIFIED IDEOGRAPH - 0xE154: 0x752C, //CJK UNIFIED IDEOGRAPH - 0xE155: 0x753C, //CJK UNIFIED IDEOGRAPH - 0xE156: 0x7544, //CJK UNIFIED IDEOGRAPH - 0xE157: 0x754D, //CJK UNIFIED IDEOGRAPH - 0xE158: 0x754A, //CJK UNIFIED IDEOGRAPH - 0xE159: 0x7549, //CJK UNIFIED IDEOGRAPH - 0xE15A: 0x755B, //CJK UNIFIED IDEOGRAPH - 0xE15B: 0x7546, //CJK UNIFIED IDEOGRAPH - 0xE15C: 0x755A, //CJK UNIFIED IDEOGRAPH - 0xE15D: 0x7569, //CJK UNIFIED IDEOGRAPH - 0xE15E: 0x7564, //CJK UNIFIED IDEOGRAPH - 0xE15F: 0x7567, //CJK UNIFIED IDEOGRAPH - 0xE160: 0x756B, //CJK UNIFIED IDEOGRAPH - 0xE161: 0x756D, //CJK UNIFIED IDEOGRAPH - 0xE162: 0x7578, //CJK UNIFIED IDEOGRAPH - 0xE163: 0x7576, //CJK UNIFIED IDEOGRAPH - 0xE164: 0x7586, //CJK UNIFIED IDEOGRAPH - 0xE165: 0x7587, //CJK UNIFIED IDEOGRAPH - 0xE166: 0x7574, //CJK UNIFIED IDEOGRAPH - 0xE167: 0x758A, //CJK UNIFIED IDEOGRAPH - 0xE168: 0x7589, //CJK UNIFIED IDEOGRAPH - 0xE169: 0x7582, //CJK UNIFIED IDEOGRAPH - 0xE16A: 0x7594, //CJK UNIFIED IDEOGRAPH - 0xE16B: 0x759A, //CJK UNIFIED IDEOGRAPH - 0xE16C: 0x759D, //CJK UNIFIED IDEOGRAPH - 0xE16D: 0x75A5, //CJK UNIFIED IDEOGRAPH - 0xE16E: 0x75A3, //CJK UNIFIED IDEOGRAPH - 0xE16F: 0x75C2, //CJK UNIFIED IDEOGRAPH - 0xE170: 0x75B3, //CJK UNIFIED IDEOGRAPH - 0xE171: 0x75C3, //CJK UNIFIED IDEOGRAPH - 0xE172: 0x75B5, //CJK UNIFIED IDEOGRAPH - 0xE173: 0x75BD, //CJK UNIFIED IDEOGRAPH - 0xE174: 0x75B8, //CJK UNIFIED IDEOGRAPH - 0xE175: 0x75BC, //CJK UNIFIED IDEOGRAPH - 0xE176: 0x75B1, //CJK UNIFIED IDEOGRAPH - 0xE177: 0x75CD, //CJK UNIFIED IDEOGRAPH - 0xE178: 0x75CA, //CJK UNIFIED IDEOGRAPH - 0xE179: 0x75D2, //CJK UNIFIED IDEOGRAPH - 0xE17A: 0x75D9, //CJK UNIFIED IDEOGRAPH - 0xE17B: 0x75E3, //CJK UNIFIED IDEOGRAPH - 0xE17C: 0x75DE, //CJK UNIFIED IDEOGRAPH - 0xE17D: 0x75FE, //CJK UNIFIED IDEOGRAPH - 0xE17E: 0x75FF, //CJK UNIFIED IDEOGRAPH - 0xE180: 0x75FC, //CJK UNIFIED IDEOGRAPH - 0xE181: 0x7601, //CJK UNIFIED IDEOGRAPH - 0xE182: 0x75F0, //CJK UNIFIED IDEOGRAPH - 0xE183: 0x75FA, //CJK UNIFIED IDEOGRAPH - 0xE184: 0x75F2, //CJK UNIFIED IDEOGRAPH - 0xE185: 0x75F3, //CJK UNIFIED IDEOGRAPH - 0xE186: 0x760B, //CJK UNIFIED IDEOGRAPH - 0xE187: 0x760D, //CJK UNIFIED IDEOGRAPH - 0xE188: 0x7609, //CJK UNIFIED IDEOGRAPH - 0xE189: 0x761F, //CJK UNIFIED IDEOGRAPH - 0xE18A: 0x7627, //CJK UNIFIED IDEOGRAPH - 0xE18B: 0x7620, //CJK UNIFIED IDEOGRAPH - 0xE18C: 0x7621, //CJK UNIFIED IDEOGRAPH - 0xE18D: 0x7622, //CJK UNIFIED IDEOGRAPH - 0xE18E: 0x7624, //CJK UNIFIED IDEOGRAPH - 0xE18F: 0x7634, //CJK UNIFIED IDEOGRAPH - 0xE190: 0x7630, //CJK UNIFIED IDEOGRAPH - 0xE191: 0x763B, //CJK UNIFIED IDEOGRAPH - 0xE192: 0x7647, //CJK UNIFIED IDEOGRAPH - 0xE193: 0x7648, //CJK UNIFIED IDEOGRAPH - 0xE194: 0x7646, //CJK UNIFIED IDEOGRAPH - 0xE195: 0x765C, //CJK UNIFIED IDEOGRAPH - 0xE196: 0x7658, //CJK UNIFIED IDEOGRAPH - 0xE197: 0x7661, //CJK UNIFIED IDEOGRAPH - 0xE198: 0x7662, //CJK UNIFIED IDEOGRAPH - 0xE199: 0x7668, //CJK UNIFIED IDEOGRAPH - 0xE19A: 0x7669, //CJK UNIFIED IDEOGRAPH - 0xE19B: 0x766A, //CJK UNIFIED IDEOGRAPH - 0xE19C: 0x7667, //CJK UNIFIED IDEOGRAPH - 0xE19D: 0x766C, //CJK UNIFIED IDEOGRAPH - 0xE19E: 0x7670, //CJK UNIFIED IDEOGRAPH - 0xE19F: 0x7672, //CJK UNIFIED IDEOGRAPH - 0xE1A0: 0x7676, //CJK UNIFIED IDEOGRAPH - 0xE1A1: 0x7678, //CJK UNIFIED IDEOGRAPH - 0xE1A2: 0x767C, //CJK UNIFIED IDEOGRAPH - 0xE1A3: 0x7680, //CJK UNIFIED IDEOGRAPH - 0xE1A4: 0x7683, //CJK UNIFIED IDEOGRAPH - 0xE1A5: 0x7688, //CJK UNIFIED IDEOGRAPH - 0xE1A6: 0x768B, //CJK UNIFIED IDEOGRAPH - 0xE1A7: 0x768E, //CJK UNIFIED IDEOGRAPH - 0xE1A8: 0x7696, //CJK UNIFIED IDEOGRAPH - 0xE1A9: 0x7693, //CJK UNIFIED IDEOGRAPH - 0xE1AA: 0x7699, //CJK UNIFIED IDEOGRAPH - 0xE1AB: 0x769A, //CJK UNIFIED IDEOGRAPH - 0xE1AC: 0x76B0, //CJK UNIFIED IDEOGRAPH - 0xE1AD: 0x76B4, //CJK UNIFIED IDEOGRAPH - 0xE1AE: 0x76B8, //CJK UNIFIED IDEOGRAPH - 0xE1AF: 0x76B9, //CJK UNIFIED IDEOGRAPH - 0xE1B0: 0x76BA, //CJK UNIFIED IDEOGRAPH - 0xE1B1: 0x76C2, //CJK UNIFIED IDEOGRAPH - 0xE1B2: 0x76CD, //CJK UNIFIED IDEOGRAPH - 0xE1B3: 0x76D6, //CJK UNIFIED IDEOGRAPH - 0xE1B4: 0x76D2, //CJK UNIFIED IDEOGRAPH - 0xE1B5: 0x76DE, //CJK UNIFIED IDEOGRAPH - 0xE1B6: 0x76E1, //CJK UNIFIED IDEOGRAPH - 0xE1B7: 0x76E5, //CJK UNIFIED IDEOGRAPH - 0xE1B8: 0x76E7, //CJK UNIFIED IDEOGRAPH - 0xE1B9: 0x76EA, //CJK UNIFIED IDEOGRAPH - 0xE1BA: 0x862F, //CJK UNIFIED IDEOGRAPH - 0xE1BB: 0x76FB, //CJK UNIFIED IDEOGRAPH - 0xE1BC: 0x7708, //CJK UNIFIED IDEOGRAPH - 0xE1BD: 0x7707, //CJK UNIFIED IDEOGRAPH - 0xE1BE: 0x7704, //CJK UNIFIED IDEOGRAPH - 0xE1BF: 0x7729, //CJK UNIFIED IDEOGRAPH - 0xE1C0: 0x7724, //CJK UNIFIED IDEOGRAPH - 0xE1C1: 0x771E, //CJK UNIFIED IDEOGRAPH - 0xE1C2: 0x7725, //CJK UNIFIED IDEOGRAPH - 0xE1C3: 0x7726, //CJK UNIFIED IDEOGRAPH - 0xE1C4: 0x771B, //CJK UNIFIED IDEOGRAPH - 0xE1C5: 0x7737, //CJK UNIFIED IDEOGRAPH - 0xE1C6: 0x7738, //CJK UNIFIED IDEOGRAPH - 0xE1C7: 0x7747, //CJK UNIFIED IDEOGRAPH - 0xE1C8: 0x775A, //CJK UNIFIED IDEOGRAPH - 0xE1C9: 0x7768, //CJK UNIFIED IDEOGRAPH - 0xE1CA: 0x776B, //CJK UNIFIED IDEOGRAPH - 0xE1CB: 0x775B, //CJK UNIFIED IDEOGRAPH - 0xE1CC: 0x7765, //CJK UNIFIED IDEOGRAPH - 0xE1CD: 0x777F, //CJK UNIFIED IDEOGRAPH - 0xE1CE: 0x777E, //CJK UNIFIED IDEOGRAPH - 0xE1CF: 0x7779, //CJK UNIFIED IDEOGRAPH - 0xE1D0: 0x778E, //CJK UNIFIED IDEOGRAPH - 0xE1D1: 0x778B, //CJK UNIFIED IDEOGRAPH - 0xE1D2: 0x7791, //CJK UNIFIED IDEOGRAPH - 0xE1D3: 0x77A0, //CJK UNIFIED IDEOGRAPH - 0xE1D4: 0x779E, //CJK UNIFIED IDEOGRAPH - 0xE1D5: 0x77B0, //CJK UNIFIED IDEOGRAPH - 0xE1D6: 0x77B6, //CJK UNIFIED IDEOGRAPH - 0xE1D7: 0x77B9, //CJK UNIFIED IDEOGRAPH - 0xE1D8: 0x77BF, //CJK UNIFIED IDEOGRAPH - 0xE1D9: 0x77BC, //CJK UNIFIED IDEOGRAPH - 0xE1DA: 0x77BD, //CJK UNIFIED IDEOGRAPH - 0xE1DB: 0x77BB, //CJK UNIFIED IDEOGRAPH - 0xE1DC: 0x77C7, //CJK UNIFIED IDEOGRAPH - 0xE1DD: 0x77CD, //CJK UNIFIED IDEOGRAPH - 0xE1DE: 0x77D7, //CJK UNIFIED IDEOGRAPH - 0xE1DF: 0x77DA, //CJK UNIFIED IDEOGRAPH - 0xE1E0: 0x77DC, //CJK UNIFIED IDEOGRAPH - 0xE1E1: 0x77E3, //CJK UNIFIED IDEOGRAPH - 0xE1E2: 0x77EE, //CJK UNIFIED IDEOGRAPH - 0xE1E3: 0x77FC, //CJK UNIFIED IDEOGRAPH - 0xE1E4: 0x780C, //CJK UNIFIED IDEOGRAPH - 0xE1E5: 0x7812, //CJK UNIFIED IDEOGRAPH - 0xE1E6: 0x7926, //CJK UNIFIED IDEOGRAPH - 0xE1E7: 0x7820, //CJK UNIFIED IDEOGRAPH - 0xE1E8: 0x792A, //CJK UNIFIED IDEOGRAPH - 0xE1E9: 0x7845, //CJK UNIFIED IDEOGRAPH - 0xE1EA: 0x788E, //CJK UNIFIED IDEOGRAPH - 0xE1EB: 0x7874, //CJK UNIFIED IDEOGRAPH - 0xE1EC: 0x7886, //CJK UNIFIED IDEOGRAPH - 0xE1ED: 0x787C, //CJK UNIFIED IDEOGRAPH - 0xE1EE: 0x789A, //CJK UNIFIED IDEOGRAPH - 0xE1EF: 0x788C, //CJK UNIFIED IDEOGRAPH - 0xE1F0: 0x78A3, //CJK UNIFIED IDEOGRAPH - 0xE1F1: 0x78B5, //CJK UNIFIED IDEOGRAPH - 0xE1F2: 0x78AA, //CJK UNIFIED IDEOGRAPH - 0xE1F3: 0x78AF, //CJK UNIFIED IDEOGRAPH - 0xE1F4: 0x78D1, //CJK UNIFIED IDEOGRAPH - 0xE1F5: 0x78C6, //CJK UNIFIED IDEOGRAPH - 0xE1F6: 0x78CB, //CJK UNIFIED IDEOGRAPH - 0xE1F7: 0x78D4, //CJK UNIFIED IDEOGRAPH - 0xE1F8: 0x78BE, //CJK UNIFIED IDEOGRAPH - 0xE1F9: 0x78BC, //CJK UNIFIED IDEOGRAPH - 0xE1FA: 0x78C5, //CJK UNIFIED IDEOGRAPH - 0xE1FB: 0x78CA, //CJK UNIFIED IDEOGRAPH - 0xE1FC: 0x78EC, //CJK UNIFIED IDEOGRAPH - 0xE240: 0x78E7, //CJK UNIFIED IDEOGRAPH - 0xE241: 0x78DA, //CJK UNIFIED IDEOGRAPH - 0xE242: 0x78FD, //CJK UNIFIED IDEOGRAPH - 0xE243: 0x78F4, //CJK UNIFIED IDEOGRAPH - 0xE244: 0x7907, //CJK UNIFIED IDEOGRAPH - 0xE245: 0x7912, //CJK UNIFIED IDEOGRAPH - 0xE246: 0x7911, //CJK UNIFIED IDEOGRAPH - 0xE247: 0x7919, //CJK UNIFIED IDEOGRAPH - 0xE248: 0x792C, //CJK UNIFIED IDEOGRAPH - 0xE249: 0x792B, //CJK UNIFIED IDEOGRAPH - 0xE24A: 0x7940, //CJK UNIFIED IDEOGRAPH - 0xE24B: 0x7960, //CJK UNIFIED IDEOGRAPH - 0xE24C: 0x7957, //CJK UNIFIED IDEOGRAPH - 0xE24D: 0x795F, //CJK UNIFIED IDEOGRAPH - 0xE24E: 0x795A, //CJK UNIFIED IDEOGRAPH - 0xE24F: 0x7955, //CJK UNIFIED IDEOGRAPH - 0xE250: 0x7953, //CJK UNIFIED IDEOGRAPH - 0xE251: 0x797A, //CJK UNIFIED IDEOGRAPH - 0xE252: 0x797F, //CJK UNIFIED IDEOGRAPH - 0xE253: 0x798A, //CJK UNIFIED IDEOGRAPH - 0xE254: 0x799D, //CJK UNIFIED IDEOGRAPH - 0xE255: 0x79A7, //CJK UNIFIED IDEOGRAPH - 0xE256: 0x9F4B, //CJK UNIFIED IDEOGRAPH - 0xE257: 0x79AA, //CJK UNIFIED IDEOGRAPH - 0xE258: 0x79AE, //CJK UNIFIED IDEOGRAPH - 0xE259: 0x79B3, //CJK UNIFIED IDEOGRAPH - 0xE25A: 0x79B9, //CJK UNIFIED IDEOGRAPH - 0xE25B: 0x79BA, //CJK UNIFIED IDEOGRAPH - 0xE25C: 0x79C9, //CJK UNIFIED IDEOGRAPH - 0xE25D: 0x79D5, //CJK UNIFIED IDEOGRAPH - 0xE25E: 0x79E7, //CJK UNIFIED IDEOGRAPH - 0xE25F: 0x79EC, //CJK UNIFIED IDEOGRAPH - 0xE260: 0x79E1, //CJK UNIFIED IDEOGRAPH - 0xE261: 0x79E3, //CJK UNIFIED IDEOGRAPH - 0xE262: 0x7A08, //CJK UNIFIED IDEOGRAPH - 0xE263: 0x7A0D, //CJK UNIFIED IDEOGRAPH - 0xE264: 0x7A18, //CJK UNIFIED IDEOGRAPH - 0xE265: 0x7A19, //CJK UNIFIED IDEOGRAPH - 0xE266: 0x7A20, //CJK UNIFIED IDEOGRAPH - 0xE267: 0x7A1F, //CJK UNIFIED IDEOGRAPH - 0xE268: 0x7980, //CJK UNIFIED IDEOGRAPH - 0xE269: 0x7A31, //CJK UNIFIED IDEOGRAPH - 0xE26A: 0x7A3B, //CJK UNIFIED IDEOGRAPH - 0xE26B: 0x7A3E, //CJK UNIFIED IDEOGRAPH - 0xE26C: 0x7A37, //CJK UNIFIED IDEOGRAPH - 0xE26D: 0x7A43, //CJK UNIFIED IDEOGRAPH - 0xE26E: 0x7A57, //CJK UNIFIED IDEOGRAPH - 0xE26F: 0x7A49, //CJK UNIFIED IDEOGRAPH - 0xE270: 0x7A61, //CJK UNIFIED IDEOGRAPH - 0xE271: 0x7A62, //CJK UNIFIED IDEOGRAPH - 0xE272: 0x7A69, //CJK UNIFIED IDEOGRAPH - 0xE273: 0x9F9D, //CJK UNIFIED IDEOGRAPH - 0xE274: 0x7A70, //CJK UNIFIED IDEOGRAPH - 0xE275: 0x7A79, //CJK UNIFIED IDEOGRAPH - 0xE276: 0x7A7D, //CJK UNIFIED IDEOGRAPH - 0xE277: 0x7A88, //CJK UNIFIED IDEOGRAPH - 0xE278: 0x7A97, //CJK UNIFIED IDEOGRAPH - 0xE279: 0x7A95, //CJK UNIFIED IDEOGRAPH - 0xE27A: 0x7A98, //CJK UNIFIED IDEOGRAPH - 0xE27B: 0x7A96, //CJK UNIFIED IDEOGRAPH - 0xE27C: 0x7AA9, //CJK UNIFIED IDEOGRAPH - 0xE27D: 0x7AC8, //CJK UNIFIED IDEOGRAPH - 0xE27E: 0x7AB0, //CJK UNIFIED IDEOGRAPH - 0xE280: 0x7AB6, //CJK UNIFIED IDEOGRAPH - 0xE281: 0x7AC5, //CJK UNIFIED IDEOGRAPH - 0xE282: 0x7AC4, //CJK UNIFIED IDEOGRAPH - 0xE283: 0x7ABF, //CJK UNIFIED IDEOGRAPH - 0xE284: 0x9083, //CJK UNIFIED IDEOGRAPH - 0xE285: 0x7AC7, //CJK UNIFIED IDEOGRAPH - 0xE286: 0x7ACA, //CJK UNIFIED IDEOGRAPH - 0xE287: 0x7ACD, //CJK UNIFIED IDEOGRAPH - 0xE288: 0x7ACF, //CJK UNIFIED IDEOGRAPH - 0xE289: 0x7AD5, //CJK UNIFIED IDEOGRAPH - 0xE28A: 0x7AD3, //CJK UNIFIED IDEOGRAPH - 0xE28B: 0x7AD9, //CJK UNIFIED IDEOGRAPH - 0xE28C: 0x7ADA, //CJK UNIFIED IDEOGRAPH - 0xE28D: 0x7ADD, //CJK UNIFIED IDEOGRAPH - 0xE28E: 0x7AE1, //CJK UNIFIED IDEOGRAPH - 0xE28F: 0x7AE2, //CJK UNIFIED IDEOGRAPH - 0xE290: 0x7AE6, //CJK UNIFIED IDEOGRAPH - 0xE291: 0x7AED, //CJK UNIFIED IDEOGRAPH - 0xE292: 0x7AF0, //CJK UNIFIED IDEOGRAPH - 0xE293: 0x7B02, //CJK UNIFIED IDEOGRAPH - 0xE294: 0x7B0F, //CJK UNIFIED IDEOGRAPH - 0xE295: 0x7B0A, //CJK UNIFIED IDEOGRAPH - 0xE296: 0x7B06, //CJK UNIFIED IDEOGRAPH - 0xE297: 0x7B33, //CJK UNIFIED IDEOGRAPH - 0xE298: 0x7B18, //CJK UNIFIED IDEOGRAPH - 0xE299: 0x7B19, //CJK UNIFIED IDEOGRAPH - 0xE29A: 0x7B1E, //CJK UNIFIED IDEOGRAPH - 0xE29B: 0x7B35, //CJK UNIFIED IDEOGRAPH - 0xE29C: 0x7B28, //CJK UNIFIED IDEOGRAPH - 0xE29D: 0x7B36, //CJK UNIFIED IDEOGRAPH - 0xE29E: 0x7B50, //CJK UNIFIED IDEOGRAPH - 0xE29F: 0x7B7A, //CJK UNIFIED IDEOGRAPH - 0xE2A0: 0x7B04, //CJK UNIFIED IDEOGRAPH - 0xE2A1: 0x7B4D, //CJK UNIFIED IDEOGRAPH - 0xE2A2: 0x7B0B, //CJK UNIFIED IDEOGRAPH - 0xE2A3: 0x7B4C, //CJK UNIFIED IDEOGRAPH - 0xE2A4: 0x7B45, //CJK UNIFIED IDEOGRAPH - 0xE2A5: 0x7B75, //CJK UNIFIED IDEOGRAPH - 0xE2A6: 0x7B65, //CJK UNIFIED IDEOGRAPH - 0xE2A7: 0x7B74, //CJK UNIFIED IDEOGRAPH - 0xE2A8: 0x7B67, //CJK UNIFIED IDEOGRAPH - 0xE2A9: 0x7B70, //CJK UNIFIED IDEOGRAPH - 0xE2AA: 0x7B71, //CJK UNIFIED IDEOGRAPH - 0xE2AB: 0x7B6C, //CJK UNIFIED IDEOGRAPH - 0xE2AC: 0x7B6E, //CJK UNIFIED IDEOGRAPH - 0xE2AD: 0x7B9D, //CJK UNIFIED IDEOGRAPH - 0xE2AE: 0x7B98, //CJK UNIFIED IDEOGRAPH - 0xE2AF: 0x7B9F, //CJK UNIFIED IDEOGRAPH - 0xE2B0: 0x7B8D, //CJK UNIFIED IDEOGRAPH - 0xE2B1: 0x7B9C, //CJK UNIFIED IDEOGRAPH - 0xE2B2: 0x7B9A, //CJK UNIFIED IDEOGRAPH - 0xE2B3: 0x7B8B, //CJK UNIFIED IDEOGRAPH - 0xE2B4: 0x7B92, //CJK UNIFIED IDEOGRAPH - 0xE2B5: 0x7B8F, //CJK UNIFIED IDEOGRAPH - 0xE2B6: 0x7B5D, //CJK UNIFIED IDEOGRAPH - 0xE2B7: 0x7B99, //CJK UNIFIED IDEOGRAPH - 0xE2B8: 0x7BCB, //CJK UNIFIED IDEOGRAPH - 0xE2B9: 0x7BC1, //CJK UNIFIED IDEOGRAPH - 0xE2BA: 0x7BCC, //CJK UNIFIED IDEOGRAPH - 0xE2BB: 0x7BCF, //CJK UNIFIED IDEOGRAPH - 0xE2BC: 0x7BB4, //CJK UNIFIED IDEOGRAPH - 0xE2BD: 0x7BC6, //CJK UNIFIED IDEOGRAPH - 0xE2BE: 0x7BDD, //CJK UNIFIED IDEOGRAPH - 0xE2BF: 0x7BE9, //CJK UNIFIED IDEOGRAPH - 0xE2C0: 0x7C11, //CJK UNIFIED IDEOGRAPH - 0xE2C1: 0x7C14, //CJK UNIFIED IDEOGRAPH - 0xE2C2: 0x7BE6, //CJK UNIFIED IDEOGRAPH - 0xE2C3: 0x7BE5, //CJK UNIFIED IDEOGRAPH - 0xE2C4: 0x7C60, //CJK UNIFIED IDEOGRAPH - 0xE2C5: 0x7C00, //CJK UNIFIED IDEOGRAPH - 0xE2C6: 0x7C07, //CJK UNIFIED IDEOGRAPH - 0xE2C7: 0x7C13, //CJK UNIFIED IDEOGRAPH - 0xE2C8: 0x7BF3, //CJK UNIFIED IDEOGRAPH - 0xE2C9: 0x7BF7, //CJK UNIFIED IDEOGRAPH - 0xE2CA: 0x7C17, //CJK UNIFIED IDEOGRAPH - 0xE2CB: 0x7C0D, //CJK UNIFIED IDEOGRAPH - 0xE2CC: 0x7BF6, //CJK UNIFIED IDEOGRAPH - 0xE2CD: 0x7C23, //CJK UNIFIED IDEOGRAPH - 0xE2CE: 0x7C27, //CJK UNIFIED IDEOGRAPH - 0xE2CF: 0x7C2A, //CJK UNIFIED IDEOGRAPH - 0xE2D0: 0x7C1F, //CJK UNIFIED IDEOGRAPH - 0xE2D1: 0x7C37, //CJK UNIFIED IDEOGRAPH - 0xE2D2: 0x7C2B, //CJK UNIFIED IDEOGRAPH - 0xE2D3: 0x7C3D, //CJK UNIFIED IDEOGRAPH - 0xE2D4: 0x7C4C, //CJK UNIFIED IDEOGRAPH - 0xE2D5: 0x7C43, //CJK UNIFIED IDEOGRAPH - 0xE2D6: 0x7C54, //CJK UNIFIED IDEOGRAPH - 0xE2D7: 0x7C4F, //CJK UNIFIED IDEOGRAPH - 0xE2D8: 0x7C40, //CJK UNIFIED IDEOGRAPH - 0xE2D9: 0x7C50, //CJK UNIFIED IDEOGRAPH - 0xE2DA: 0x7C58, //CJK UNIFIED IDEOGRAPH - 0xE2DB: 0x7C5F, //CJK UNIFIED IDEOGRAPH - 0xE2DC: 0x7C64, //CJK UNIFIED IDEOGRAPH - 0xE2DD: 0x7C56, //CJK UNIFIED IDEOGRAPH - 0xE2DE: 0x7C65, //CJK UNIFIED IDEOGRAPH - 0xE2DF: 0x7C6C, //CJK UNIFIED IDEOGRAPH - 0xE2E0: 0x7C75, //CJK UNIFIED IDEOGRAPH - 0xE2E1: 0x7C83, //CJK UNIFIED IDEOGRAPH - 0xE2E2: 0x7C90, //CJK UNIFIED IDEOGRAPH - 0xE2E3: 0x7CA4, //CJK UNIFIED IDEOGRAPH - 0xE2E4: 0x7CAD, //CJK UNIFIED IDEOGRAPH - 0xE2E5: 0x7CA2, //CJK UNIFIED IDEOGRAPH - 0xE2E6: 0x7CAB, //CJK UNIFIED IDEOGRAPH - 0xE2E7: 0x7CA1, //CJK UNIFIED IDEOGRAPH - 0xE2E8: 0x7CA8, //CJK UNIFIED IDEOGRAPH - 0xE2E9: 0x7CB3, //CJK UNIFIED IDEOGRAPH - 0xE2EA: 0x7CB2, //CJK UNIFIED IDEOGRAPH - 0xE2EB: 0x7CB1, //CJK UNIFIED IDEOGRAPH - 0xE2EC: 0x7CAE, //CJK UNIFIED IDEOGRAPH - 0xE2ED: 0x7CB9, //CJK UNIFIED IDEOGRAPH - 0xE2EE: 0x7CBD, //CJK UNIFIED IDEOGRAPH - 0xE2EF: 0x7CC0, //CJK UNIFIED IDEOGRAPH - 0xE2F0: 0x7CC5, //CJK UNIFIED IDEOGRAPH - 0xE2F1: 0x7CC2, //CJK UNIFIED IDEOGRAPH - 0xE2F2: 0x7CD8, //CJK UNIFIED IDEOGRAPH - 0xE2F3: 0x7CD2, //CJK UNIFIED IDEOGRAPH - 0xE2F4: 0x7CDC, //CJK UNIFIED IDEOGRAPH - 0xE2F5: 0x7CE2, //CJK UNIFIED IDEOGRAPH - 0xE2F6: 0x9B3B, //CJK UNIFIED IDEOGRAPH - 0xE2F7: 0x7CEF, //CJK UNIFIED IDEOGRAPH - 0xE2F8: 0x7CF2, //CJK UNIFIED IDEOGRAPH - 0xE2F9: 0x7CF4, //CJK UNIFIED IDEOGRAPH - 0xE2FA: 0x7CF6, //CJK UNIFIED IDEOGRAPH - 0xE2FB: 0x7CFA, //CJK UNIFIED IDEOGRAPH - 0xE2FC: 0x7D06, //CJK UNIFIED IDEOGRAPH - 0xE340: 0x7D02, //CJK UNIFIED IDEOGRAPH - 0xE341: 0x7D1C, //CJK UNIFIED IDEOGRAPH - 0xE342: 0x7D15, //CJK UNIFIED IDEOGRAPH - 0xE343: 0x7D0A, //CJK UNIFIED IDEOGRAPH - 0xE344: 0x7D45, //CJK UNIFIED IDEOGRAPH - 0xE345: 0x7D4B, //CJK UNIFIED IDEOGRAPH - 0xE346: 0x7D2E, //CJK UNIFIED IDEOGRAPH - 0xE347: 0x7D32, //CJK UNIFIED IDEOGRAPH - 0xE348: 0x7D3F, //CJK UNIFIED IDEOGRAPH - 0xE349: 0x7D35, //CJK UNIFIED IDEOGRAPH - 0xE34A: 0x7D46, //CJK UNIFIED IDEOGRAPH - 0xE34B: 0x7D73, //CJK UNIFIED IDEOGRAPH - 0xE34C: 0x7D56, //CJK UNIFIED IDEOGRAPH - 0xE34D: 0x7D4E, //CJK UNIFIED IDEOGRAPH - 0xE34E: 0x7D72, //CJK UNIFIED IDEOGRAPH - 0xE34F: 0x7D68, //CJK UNIFIED IDEOGRAPH - 0xE350: 0x7D6E, //CJK UNIFIED IDEOGRAPH - 0xE351: 0x7D4F, //CJK UNIFIED IDEOGRAPH - 0xE352: 0x7D63, //CJK UNIFIED IDEOGRAPH - 0xE353: 0x7D93, //CJK UNIFIED IDEOGRAPH - 0xE354: 0x7D89, //CJK UNIFIED IDEOGRAPH - 0xE355: 0x7D5B, //CJK UNIFIED IDEOGRAPH - 0xE356: 0x7D8F, //CJK UNIFIED IDEOGRAPH - 0xE357: 0x7D7D, //CJK UNIFIED IDEOGRAPH - 0xE358: 0x7D9B, //CJK UNIFIED IDEOGRAPH - 0xE359: 0x7DBA, //CJK UNIFIED IDEOGRAPH - 0xE35A: 0x7DAE, //CJK UNIFIED IDEOGRAPH - 0xE35B: 0x7DA3, //CJK UNIFIED IDEOGRAPH - 0xE35C: 0x7DB5, //CJK UNIFIED IDEOGRAPH - 0xE35D: 0x7DC7, //CJK UNIFIED IDEOGRAPH - 0xE35E: 0x7DBD, //CJK UNIFIED IDEOGRAPH - 0xE35F: 0x7DAB, //CJK UNIFIED IDEOGRAPH - 0xE360: 0x7E3D, //CJK UNIFIED IDEOGRAPH - 0xE361: 0x7DA2, //CJK UNIFIED IDEOGRAPH - 0xE362: 0x7DAF, //CJK UNIFIED IDEOGRAPH - 0xE363: 0x7DDC, //CJK UNIFIED IDEOGRAPH - 0xE364: 0x7DB8, //CJK UNIFIED IDEOGRAPH - 0xE365: 0x7D9F, //CJK UNIFIED IDEOGRAPH - 0xE366: 0x7DB0, //CJK UNIFIED IDEOGRAPH - 0xE367: 0x7DD8, //CJK UNIFIED IDEOGRAPH - 0xE368: 0x7DDD, //CJK UNIFIED IDEOGRAPH - 0xE369: 0x7DE4, //CJK UNIFIED IDEOGRAPH - 0xE36A: 0x7DDE, //CJK UNIFIED IDEOGRAPH - 0xE36B: 0x7DFB, //CJK UNIFIED IDEOGRAPH - 0xE36C: 0x7DF2, //CJK UNIFIED IDEOGRAPH - 0xE36D: 0x7DE1, //CJK UNIFIED IDEOGRAPH - 0xE36E: 0x7E05, //CJK UNIFIED IDEOGRAPH - 0xE36F: 0x7E0A, //CJK UNIFIED IDEOGRAPH - 0xE370: 0x7E23, //CJK UNIFIED IDEOGRAPH - 0xE371: 0x7E21, //CJK UNIFIED IDEOGRAPH - 0xE372: 0x7E12, //CJK UNIFIED IDEOGRAPH - 0xE373: 0x7E31, //CJK UNIFIED IDEOGRAPH - 0xE374: 0x7E1F, //CJK UNIFIED IDEOGRAPH - 0xE375: 0x7E09, //CJK UNIFIED IDEOGRAPH - 0xE376: 0x7E0B, //CJK UNIFIED IDEOGRAPH - 0xE377: 0x7E22, //CJK UNIFIED IDEOGRAPH - 0xE378: 0x7E46, //CJK UNIFIED IDEOGRAPH - 0xE379: 0x7E66, //CJK UNIFIED IDEOGRAPH - 0xE37A: 0x7E3B, //CJK UNIFIED IDEOGRAPH - 0xE37B: 0x7E35, //CJK UNIFIED IDEOGRAPH - 0xE37C: 0x7E39, //CJK UNIFIED IDEOGRAPH - 0xE37D: 0x7E43, //CJK UNIFIED IDEOGRAPH - 0xE37E: 0x7E37, //CJK UNIFIED IDEOGRAPH - 0xE380: 0x7E32, //CJK UNIFIED IDEOGRAPH - 0xE381: 0x7E3A, //CJK UNIFIED IDEOGRAPH - 0xE382: 0x7E67, //CJK UNIFIED IDEOGRAPH - 0xE383: 0x7E5D, //CJK UNIFIED IDEOGRAPH - 0xE384: 0x7E56, //CJK UNIFIED IDEOGRAPH - 0xE385: 0x7E5E, //CJK UNIFIED IDEOGRAPH - 0xE386: 0x7E59, //CJK UNIFIED IDEOGRAPH - 0xE387: 0x7E5A, //CJK UNIFIED IDEOGRAPH - 0xE388: 0x7E79, //CJK UNIFIED IDEOGRAPH - 0xE389: 0x7E6A, //CJK UNIFIED IDEOGRAPH - 0xE38A: 0x7E69, //CJK UNIFIED IDEOGRAPH - 0xE38B: 0x7E7C, //CJK UNIFIED IDEOGRAPH - 0xE38C: 0x7E7B, //CJK UNIFIED IDEOGRAPH - 0xE38D: 0x7E83, //CJK UNIFIED IDEOGRAPH - 0xE38E: 0x7DD5, //CJK UNIFIED IDEOGRAPH - 0xE38F: 0x7E7D, //CJK UNIFIED IDEOGRAPH - 0xE390: 0x8FAE, //CJK UNIFIED IDEOGRAPH - 0xE391: 0x7E7F, //CJK UNIFIED IDEOGRAPH - 0xE392: 0x7E88, //CJK UNIFIED IDEOGRAPH - 0xE393: 0x7E89, //CJK UNIFIED IDEOGRAPH - 0xE394: 0x7E8C, //CJK UNIFIED IDEOGRAPH - 0xE395: 0x7E92, //CJK UNIFIED IDEOGRAPH - 0xE396: 0x7E90, //CJK UNIFIED IDEOGRAPH - 0xE397: 0x7E93, //CJK UNIFIED IDEOGRAPH - 0xE398: 0x7E94, //CJK UNIFIED IDEOGRAPH - 0xE399: 0x7E96, //CJK UNIFIED IDEOGRAPH - 0xE39A: 0x7E8E, //CJK UNIFIED IDEOGRAPH - 0xE39B: 0x7E9B, //CJK UNIFIED IDEOGRAPH - 0xE39C: 0x7E9C, //CJK UNIFIED IDEOGRAPH - 0xE39D: 0x7F38, //CJK UNIFIED IDEOGRAPH - 0xE39E: 0x7F3A, //CJK UNIFIED IDEOGRAPH - 0xE39F: 0x7F45, //CJK UNIFIED IDEOGRAPH - 0xE3A0: 0x7F4C, //CJK UNIFIED IDEOGRAPH - 0xE3A1: 0x7F4D, //CJK UNIFIED IDEOGRAPH - 0xE3A2: 0x7F4E, //CJK UNIFIED IDEOGRAPH - 0xE3A3: 0x7F50, //CJK UNIFIED IDEOGRAPH - 0xE3A4: 0x7F51, //CJK UNIFIED IDEOGRAPH - 0xE3A5: 0x7F55, //CJK UNIFIED IDEOGRAPH - 0xE3A6: 0x7F54, //CJK UNIFIED IDEOGRAPH - 0xE3A7: 0x7F58, //CJK UNIFIED IDEOGRAPH - 0xE3A8: 0x7F5F, //CJK UNIFIED IDEOGRAPH - 0xE3A9: 0x7F60, //CJK UNIFIED IDEOGRAPH - 0xE3AA: 0x7F68, //CJK UNIFIED IDEOGRAPH - 0xE3AB: 0x7F69, //CJK UNIFIED IDEOGRAPH - 0xE3AC: 0x7F67, //CJK UNIFIED IDEOGRAPH - 0xE3AD: 0x7F78, //CJK UNIFIED IDEOGRAPH - 0xE3AE: 0x7F82, //CJK UNIFIED IDEOGRAPH - 0xE3AF: 0x7F86, //CJK UNIFIED IDEOGRAPH - 0xE3B0: 0x7F83, //CJK UNIFIED IDEOGRAPH - 0xE3B1: 0x7F88, //CJK UNIFIED IDEOGRAPH - 0xE3B2: 0x7F87, //CJK UNIFIED IDEOGRAPH - 0xE3B3: 0x7F8C, //CJK UNIFIED IDEOGRAPH - 0xE3B4: 0x7F94, //CJK UNIFIED IDEOGRAPH - 0xE3B5: 0x7F9E, //CJK UNIFIED IDEOGRAPH - 0xE3B6: 0x7F9D, //CJK UNIFIED IDEOGRAPH - 0xE3B7: 0x7F9A, //CJK UNIFIED IDEOGRAPH - 0xE3B8: 0x7FA3, //CJK UNIFIED IDEOGRAPH - 0xE3B9: 0x7FAF, //CJK UNIFIED IDEOGRAPH - 0xE3BA: 0x7FB2, //CJK UNIFIED IDEOGRAPH - 0xE3BB: 0x7FB9, //CJK UNIFIED IDEOGRAPH - 0xE3BC: 0x7FAE, //CJK UNIFIED IDEOGRAPH - 0xE3BD: 0x7FB6, //CJK UNIFIED IDEOGRAPH - 0xE3BE: 0x7FB8, //CJK UNIFIED IDEOGRAPH - 0xE3BF: 0x8B71, //CJK UNIFIED IDEOGRAPH - 0xE3C0: 0x7FC5, //CJK UNIFIED IDEOGRAPH - 0xE3C1: 0x7FC6, //CJK UNIFIED IDEOGRAPH - 0xE3C2: 0x7FCA, //CJK UNIFIED IDEOGRAPH - 0xE3C3: 0x7FD5, //CJK UNIFIED IDEOGRAPH - 0xE3C4: 0x7FD4, //CJK UNIFIED IDEOGRAPH - 0xE3C5: 0x7FE1, //CJK UNIFIED IDEOGRAPH - 0xE3C6: 0x7FE6, //CJK UNIFIED IDEOGRAPH - 0xE3C7: 0x7FE9, //CJK UNIFIED IDEOGRAPH - 0xE3C8: 0x7FF3, //CJK UNIFIED IDEOGRAPH - 0xE3C9: 0x7FF9, //CJK UNIFIED IDEOGRAPH - 0xE3CA: 0x98DC, //CJK UNIFIED IDEOGRAPH - 0xE3CB: 0x8006, //CJK UNIFIED IDEOGRAPH - 0xE3CC: 0x8004, //CJK UNIFIED IDEOGRAPH - 0xE3CD: 0x800B, //CJK UNIFIED IDEOGRAPH - 0xE3CE: 0x8012, //CJK UNIFIED IDEOGRAPH - 0xE3CF: 0x8018, //CJK UNIFIED IDEOGRAPH - 0xE3D0: 0x8019, //CJK UNIFIED IDEOGRAPH - 0xE3D1: 0x801C, //CJK UNIFIED IDEOGRAPH - 0xE3D2: 0x8021, //CJK UNIFIED IDEOGRAPH - 0xE3D3: 0x8028, //CJK UNIFIED IDEOGRAPH - 0xE3D4: 0x803F, //CJK UNIFIED IDEOGRAPH - 0xE3D5: 0x803B, //CJK UNIFIED IDEOGRAPH - 0xE3D6: 0x804A, //CJK UNIFIED IDEOGRAPH - 0xE3D7: 0x8046, //CJK UNIFIED IDEOGRAPH - 0xE3D8: 0x8052, //CJK UNIFIED IDEOGRAPH - 0xE3D9: 0x8058, //CJK UNIFIED IDEOGRAPH - 0xE3DA: 0x805A, //CJK UNIFIED IDEOGRAPH - 0xE3DB: 0x805F, //CJK UNIFIED IDEOGRAPH - 0xE3DC: 0x8062, //CJK UNIFIED IDEOGRAPH - 0xE3DD: 0x8068, //CJK UNIFIED IDEOGRAPH - 0xE3DE: 0x8073, //CJK UNIFIED IDEOGRAPH - 0xE3DF: 0x8072, //CJK UNIFIED IDEOGRAPH - 0xE3E0: 0x8070, //CJK UNIFIED IDEOGRAPH - 0xE3E1: 0x8076, //CJK UNIFIED IDEOGRAPH - 0xE3E2: 0x8079, //CJK UNIFIED IDEOGRAPH - 0xE3E3: 0x807D, //CJK UNIFIED IDEOGRAPH - 0xE3E4: 0x807F, //CJK UNIFIED IDEOGRAPH - 0xE3E5: 0x8084, //CJK UNIFIED IDEOGRAPH - 0xE3E6: 0x8086, //CJK UNIFIED IDEOGRAPH - 0xE3E7: 0x8085, //CJK UNIFIED IDEOGRAPH - 0xE3E8: 0x809B, //CJK UNIFIED IDEOGRAPH - 0xE3E9: 0x8093, //CJK UNIFIED IDEOGRAPH - 0xE3EA: 0x809A, //CJK UNIFIED IDEOGRAPH - 0xE3EB: 0x80AD, //CJK UNIFIED IDEOGRAPH - 0xE3EC: 0x5190, //CJK UNIFIED IDEOGRAPH - 0xE3ED: 0x80AC, //CJK UNIFIED IDEOGRAPH - 0xE3EE: 0x80DB, //CJK UNIFIED IDEOGRAPH - 0xE3EF: 0x80E5, //CJK UNIFIED IDEOGRAPH - 0xE3F0: 0x80D9, //CJK UNIFIED IDEOGRAPH - 0xE3F1: 0x80DD, //CJK UNIFIED IDEOGRAPH - 0xE3F2: 0x80C4, //CJK UNIFIED IDEOGRAPH - 0xE3F3: 0x80DA, //CJK UNIFIED IDEOGRAPH - 0xE3F4: 0x80D6, //CJK UNIFIED IDEOGRAPH - 0xE3F5: 0x8109, //CJK UNIFIED IDEOGRAPH - 0xE3F6: 0x80EF, //CJK UNIFIED IDEOGRAPH - 0xE3F7: 0x80F1, //CJK UNIFIED IDEOGRAPH - 0xE3F8: 0x811B, //CJK UNIFIED IDEOGRAPH - 0xE3F9: 0x8129, //CJK UNIFIED IDEOGRAPH - 0xE3FA: 0x8123, //CJK UNIFIED IDEOGRAPH - 0xE3FB: 0x812F, //CJK UNIFIED IDEOGRAPH - 0xE3FC: 0x814B, //CJK UNIFIED IDEOGRAPH - 0xE440: 0x968B, //CJK UNIFIED IDEOGRAPH - 0xE441: 0x8146, //CJK UNIFIED IDEOGRAPH - 0xE442: 0x813E, //CJK UNIFIED IDEOGRAPH - 0xE443: 0x8153, //CJK UNIFIED IDEOGRAPH - 0xE444: 0x8151, //CJK UNIFIED IDEOGRAPH - 0xE445: 0x80FC, //CJK UNIFIED IDEOGRAPH - 0xE446: 0x8171, //CJK UNIFIED IDEOGRAPH - 0xE447: 0x816E, //CJK UNIFIED IDEOGRAPH - 0xE448: 0x8165, //CJK UNIFIED IDEOGRAPH - 0xE449: 0x8166, //CJK UNIFIED IDEOGRAPH - 0xE44A: 0x8174, //CJK UNIFIED IDEOGRAPH - 0xE44B: 0x8183, //CJK UNIFIED IDEOGRAPH - 0xE44C: 0x8188, //CJK UNIFIED IDEOGRAPH - 0xE44D: 0x818A, //CJK UNIFIED IDEOGRAPH - 0xE44E: 0x8180, //CJK UNIFIED IDEOGRAPH - 0xE44F: 0x8182, //CJK UNIFIED IDEOGRAPH - 0xE450: 0x81A0, //CJK UNIFIED IDEOGRAPH - 0xE451: 0x8195, //CJK UNIFIED IDEOGRAPH - 0xE452: 0x81A4, //CJK UNIFIED IDEOGRAPH - 0xE453: 0x81A3, //CJK UNIFIED IDEOGRAPH - 0xE454: 0x815F, //CJK UNIFIED IDEOGRAPH - 0xE455: 0x8193, //CJK UNIFIED IDEOGRAPH - 0xE456: 0x81A9, //CJK UNIFIED IDEOGRAPH - 0xE457: 0x81B0, //CJK UNIFIED IDEOGRAPH - 0xE458: 0x81B5, //CJK UNIFIED IDEOGRAPH - 0xE459: 0x81BE, //CJK UNIFIED IDEOGRAPH - 0xE45A: 0x81B8, //CJK UNIFIED IDEOGRAPH - 0xE45B: 0x81BD, //CJK UNIFIED IDEOGRAPH - 0xE45C: 0x81C0, //CJK UNIFIED IDEOGRAPH - 0xE45D: 0x81C2, //CJK UNIFIED IDEOGRAPH - 0xE45E: 0x81BA, //CJK UNIFIED IDEOGRAPH - 0xE45F: 0x81C9, //CJK UNIFIED IDEOGRAPH - 0xE460: 0x81CD, //CJK UNIFIED IDEOGRAPH - 0xE461: 0x81D1, //CJK UNIFIED IDEOGRAPH - 0xE462: 0x81D9, //CJK UNIFIED IDEOGRAPH - 0xE463: 0x81D8, //CJK UNIFIED IDEOGRAPH - 0xE464: 0x81C8, //CJK UNIFIED IDEOGRAPH - 0xE465: 0x81DA, //CJK UNIFIED IDEOGRAPH - 0xE466: 0x81DF, //CJK UNIFIED IDEOGRAPH - 0xE467: 0x81E0, //CJK UNIFIED IDEOGRAPH - 0xE468: 0x81E7, //CJK UNIFIED IDEOGRAPH - 0xE469: 0x81FA, //CJK UNIFIED IDEOGRAPH - 0xE46A: 0x81FB, //CJK UNIFIED IDEOGRAPH - 0xE46B: 0x81FE, //CJK UNIFIED IDEOGRAPH - 0xE46C: 0x8201, //CJK UNIFIED IDEOGRAPH - 0xE46D: 0x8202, //CJK UNIFIED IDEOGRAPH - 0xE46E: 0x8205, //CJK UNIFIED IDEOGRAPH - 0xE46F: 0x8207, //CJK UNIFIED IDEOGRAPH - 0xE470: 0x820A, //CJK UNIFIED IDEOGRAPH - 0xE471: 0x820D, //CJK UNIFIED IDEOGRAPH - 0xE472: 0x8210, //CJK UNIFIED IDEOGRAPH - 0xE473: 0x8216, //CJK UNIFIED IDEOGRAPH - 0xE474: 0x8229, //CJK UNIFIED IDEOGRAPH - 0xE475: 0x822B, //CJK UNIFIED IDEOGRAPH - 0xE476: 0x8238, //CJK UNIFIED IDEOGRAPH - 0xE477: 0x8233, //CJK UNIFIED IDEOGRAPH - 0xE478: 0x8240, //CJK UNIFIED IDEOGRAPH - 0xE479: 0x8259, //CJK UNIFIED IDEOGRAPH - 0xE47A: 0x8258, //CJK UNIFIED IDEOGRAPH - 0xE47B: 0x825D, //CJK UNIFIED IDEOGRAPH - 0xE47C: 0x825A, //CJK UNIFIED IDEOGRAPH - 0xE47D: 0x825F, //CJK UNIFIED IDEOGRAPH - 0xE47E: 0x8264, //CJK UNIFIED IDEOGRAPH - 0xE480: 0x8262, //CJK UNIFIED IDEOGRAPH - 0xE481: 0x8268, //CJK UNIFIED IDEOGRAPH - 0xE482: 0x826A, //CJK UNIFIED IDEOGRAPH - 0xE483: 0x826B, //CJK UNIFIED IDEOGRAPH - 0xE484: 0x822E, //CJK UNIFIED IDEOGRAPH - 0xE485: 0x8271, //CJK UNIFIED IDEOGRAPH - 0xE486: 0x8277, //CJK UNIFIED IDEOGRAPH - 0xE487: 0x8278, //CJK UNIFIED IDEOGRAPH - 0xE488: 0x827E, //CJK UNIFIED IDEOGRAPH - 0xE489: 0x828D, //CJK UNIFIED IDEOGRAPH - 0xE48A: 0x8292, //CJK UNIFIED IDEOGRAPH - 0xE48B: 0x82AB, //CJK UNIFIED IDEOGRAPH - 0xE48C: 0x829F, //CJK UNIFIED IDEOGRAPH - 0xE48D: 0x82BB, //CJK UNIFIED IDEOGRAPH - 0xE48E: 0x82AC, //CJK UNIFIED IDEOGRAPH - 0xE48F: 0x82E1, //CJK UNIFIED IDEOGRAPH - 0xE490: 0x82E3, //CJK UNIFIED IDEOGRAPH - 0xE491: 0x82DF, //CJK UNIFIED IDEOGRAPH - 0xE492: 0x82D2, //CJK UNIFIED IDEOGRAPH - 0xE493: 0x82F4, //CJK UNIFIED IDEOGRAPH - 0xE494: 0x82F3, //CJK UNIFIED IDEOGRAPH - 0xE495: 0x82FA, //CJK UNIFIED IDEOGRAPH - 0xE496: 0x8393, //CJK UNIFIED IDEOGRAPH - 0xE497: 0x8303, //CJK UNIFIED IDEOGRAPH - 0xE498: 0x82FB, //CJK UNIFIED IDEOGRAPH - 0xE499: 0x82F9, //CJK UNIFIED IDEOGRAPH - 0xE49A: 0x82DE, //CJK UNIFIED IDEOGRAPH - 0xE49B: 0x8306, //CJK UNIFIED IDEOGRAPH - 0xE49C: 0x82DC, //CJK UNIFIED IDEOGRAPH - 0xE49D: 0x8309, //CJK UNIFIED IDEOGRAPH - 0xE49E: 0x82D9, //CJK UNIFIED IDEOGRAPH - 0xE49F: 0x8335, //CJK UNIFIED IDEOGRAPH - 0xE4A0: 0x8334, //CJK UNIFIED IDEOGRAPH - 0xE4A1: 0x8316, //CJK UNIFIED IDEOGRAPH - 0xE4A2: 0x8332, //CJK UNIFIED IDEOGRAPH - 0xE4A3: 0x8331, //CJK UNIFIED IDEOGRAPH - 0xE4A4: 0x8340, //CJK UNIFIED IDEOGRAPH - 0xE4A5: 0x8339, //CJK UNIFIED IDEOGRAPH - 0xE4A6: 0x8350, //CJK UNIFIED IDEOGRAPH - 0xE4A7: 0x8345, //CJK UNIFIED IDEOGRAPH - 0xE4A8: 0x832F, //CJK UNIFIED IDEOGRAPH - 0xE4A9: 0x832B, //CJK UNIFIED IDEOGRAPH - 0xE4AA: 0x8317, //CJK UNIFIED IDEOGRAPH - 0xE4AB: 0x8318, //CJK UNIFIED IDEOGRAPH - 0xE4AC: 0x8385, //CJK UNIFIED IDEOGRAPH - 0xE4AD: 0x839A, //CJK UNIFIED IDEOGRAPH - 0xE4AE: 0x83AA, //CJK UNIFIED IDEOGRAPH - 0xE4AF: 0x839F, //CJK UNIFIED IDEOGRAPH - 0xE4B0: 0x83A2, //CJK UNIFIED IDEOGRAPH - 0xE4B1: 0x8396, //CJK UNIFIED IDEOGRAPH - 0xE4B2: 0x8323, //CJK UNIFIED IDEOGRAPH - 0xE4B3: 0x838E, //CJK UNIFIED IDEOGRAPH - 0xE4B4: 0x8387, //CJK UNIFIED IDEOGRAPH - 0xE4B5: 0x838A, //CJK UNIFIED IDEOGRAPH - 0xE4B6: 0x837C, //CJK UNIFIED IDEOGRAPH - 0xE4B7: 0x83B5, //CJK UNIFIED IDEOGRAPH - 0xE4B8: 0x8373, //CJK UNIFIED IDEOGRAPH - 0xE4B9: 0x8375, //CJK UNIFIED IDEOGRAPH - 0xE4BA: 0x83A0, //CJK UNIFIED IDEOGRAPH - 0xE4BB: 0x8389, //CJK UNIFIED IDEOGRAPH - 0xE4BC: 0x83A8, //CJK UNIFIED IDEOGRAPH - 0xE4BD: 0x83F4, //CJK UNIFIED IDEOGRAPH - 0xE4BE: 0x8413, //CJK UNIFIED IDEOGRAPH - 0xE4BF: 0x83EB, //CJK UNIFIED IDEOGRAPH - 0xE4C0: 0x83CE, //CJK UNIFIED IDEOGRAPH - 0xE4C1: 0x83FD, //CJK UNIFIED IDEOGRAPH - 0xE4C2: 0x8403, //CJK UNIFIED IDEOGRAPH - 0xE4C3: 0x83D8, //CJK UNIFIED IDEOGRAPH - 0xE4C4: 0x840B, //CJK UNIFIED IDEOGRAPH - 0xE4C5: 0x83C1, //CJK UNIFIED IDEOGRAPH - 0xE4C6: 0x83F7, //CJK UNIFIED IDEOGRAPH - 0xE4C7: 0x8407, //CJK UNIFIED IDEOGRAPH - 0xE4C8: 0x83E0, //CJK UNIFIED IDEOGRAPH - 0xE4C9: 0x83F2, //CJK UNIFIED IDEOGRAPH - 0xE4CA: 0x840D, //CJK UNIFIED IDEOGRAPH - 0xE4CB: 0x8422, //CJK UNIFIED IDEOGRAPH - 0xE4CC: 0x8420, //CJK UNIFIED IDEOGRAPH - 0xE4CD: 0x83BD, //CJK UNIFIED IDEOGRAPH - 0xE4CE: 0x8438, //CJK UNIFIED IDEOGRAPH - 0xE4CF: 0x8506, //CJK UNIFIED IDEOGRAPH - 0xE4D0: 0x83FB, //CJK UNIFIED IDEOGRAPH - 0xE4D1: 0x846D, //CJK UNIFIED IDEOGRAPH - 0xE4D2: 0x842A, //CJK UNIFIED IDEOGRAPH - 0xE4D3: 0x843C, //CJK UNIFIED IDEOGRAPH - 0xE4D4: 0x855A, //CJK UNIFIED IDEOGRAPH - 0xE4D5: 0x8484, //CJK UNIFIED IDEOGRAPH - 0xE4D6: 0x8477, //CJK UNIFIED IDEOGRAPH - 0xE4D7: 0x846B, //CJK UNIFIED IDEOGRAPH - 0xE4D8: 0x84AD, //CJK UNIFIED IDEOGRAPH - 0xE4D9: 0x846E, //CJK UNIFIED IDEOGRAPH - 0xE4DA: 0x8482, //CJK UNIFIED IDEOGRAPH - 0xE4DB: 0x8469, //CJK UNIFIED IDEOGRAPH - 0xE4DC: 0x8446, //CJK UNIFIED IDEOGRAPH - 0xE4DD: 0x842C, //CJK UNIFIED IDEOGRAPH - 0xE4DE: 0x846F, //CJK UNIFIED IDEOGRAPH - 0xE4DF: 0x8479, //CJK UNIFIED IDEOGRAPH - 0xE4E0: 0x8435, //CJK UNIFIED IDEOGRAPH - 0xE4E1: 0x84CA, //CJK UNIFIED IDEOGRAPH - 0xE4E2: 0x8462, //CJK UNIFIED IDEOGRAPH - 0xE4E3: 0x84B9, //CJK UNIFIED IDEOGRAPH - 0xE4E4: 0x84BF, //CJK UNIFIED IDEOGRAPH - 0xE4E5: 0x849F, //CJK UNIFIED IDEOGRAPH - 0xE4E6: 0x84D9, //CJK UNIFIED IDEOGRAPH - 0xE4E7: 0x84CD, //CJK UNIFIED IDEOGRAPH - 0xE4E8: 0x84BB, //CJK UNIFIED IDEOGRAPH - 0xE4E9: 0x84DA, //CJK UNIFIED IDEOGRAPH - 0xE4EA: 0x84D0, //CJK UNIFIED IDEOGRAPH - 0xE4EB: 0x84C1, //CJK UNIFIED IDEOGRAPH - 0xE4EC: 0x84C6, //CJK UNIFIED IDEOGRAPH - 0xE4ED: 0x84D6, //CJK UNIFIED IDEOGRAPH - 0xE4EE: 0x84A1, //CJK UNIFIED IDEOGRAPH - 0xE4EF: 0x8521, //CJK UNIFIED IDEOGRAPH - 0xE4F0: 0x84FF, //CJK UNIFIED IDEOGRAPH - 0xE4F1: 0x84F4, //CJK UNIFIED IDEOGRAPH - 0xE4F2: 0x8517, //CJK UNIFIED IDEOGRAPH - 0xE4F3: 0x8518, //CJK UNIFIED IDEOGRAPH - 0xE4F4: 0x852C, //CJK UNIFIED IDEOGRAPH - 0xE4F5: 0x851F, //CJK UNIFIED IDEOGRAPH - 0xE4F6: 0x8515, //CJK UNIFIED IDEOGRAPH - 0xE4F7: 0x8514, //CJK UNIFIED IDEOGRAPH - 0xE4F8: 0x84FC, //CJK UNIFIED IDEOGRAPH - 0xE4F9: 0x8540, //CJK UNIFIED IDEOGRAPH - 0xE4FA: 0x8563, //CJK UNIFIED IDEOGRAPH - 0xE4FB: 0x8558, //CJK UNIFIED IDEOGRAPH - 0xE4FC: 0x8548, //CJK UNIFIED IDEOGRAPH - 0xE540: 0x8541, //CJK UNIFIED IDEOGRAPH - 0xE541: 0x8602, //CJK UNIFIED IDEOGRAPH - 0xE542: 0x854B, //CJK UNIFIED IDEOGRAPH - 0xE543: 0x8555, //CJK UNIFIED IDEOGRAPH - 0xE544: 0x8580, //CJK UNIFIED IDEOGRAPH - 0xE545: 0x85A4, //CJK UNIFIED IDEOGRAPH - 0xE546: 0x8588, //CJK UNIFIED IDEOGRAPH - 0xE547: 0x8591, //CJK UNIFIED IDEOGRAPH - 0xE548: 0x858A, //CJK UNIFIED IDEOGRAPH - 0xE549: 0x85A8, //CJK UNIFIED IDEOGRAPH - 0xE54A: 0x856D, //CJK UNIFIED IDEOGRAPH - 0xE54B: 0x8594, //CJK UNIFIED IDEOGRAPH - 0xE54C: 0x859B, //CJK UNIFIED IDEOGRAPH - 0xE54D: 0x85EA, //CJK UNIFIED IDEOGRAPH - 0xE54E: 0x8587, //CJK UNIFIED IDEOGRAPH - 0xE54F: 0x859C, //CJK UNIFIED IDEOGRAPH - 0xE550: 0x8577, //CJK UNIFIED IDEOGRAPH - 0xE551: 0x857E, //CJK UNIFIED IDEOGRAPH - 0xE552: 0x8590, //CJK UNIFIED IDEOGRAPH - 0xE553: 0x85C9, //CJK UNIFIED IDEOGRAPH - 0xE554: 0x85BA, //CJK UNIFIED IDEOGRAPH - 0xE555: 0x85CF, //CJK UNIFIED IDEOGRAPH - 0xE556: 0x85B9, //CJK UNIFIED IDEOGRAPH - 0xE557: 0x85D0, //CJK UNIFIED IDEOGRAPH - 0xE558: 0x85D5, //CJK UNIFIED IDEOGRAPH - 0xE559: 0x85DD, //CJK UNIFIED IDEOGRAPH - 0xE55A: 0x85E5, //CJK UNIFIED IDEOGRAPH - 0xE55B: 0x85DC, //CJK UNIFIED IDEOGRAPH - 0xE55C: 0x85F9, //CJK UNIFIED IDEOGRAPH - 0xE55D: 0x860A, //CJK UNIFIED IDEOGRAPH - 0xE55E: 0x8613, //CJK UNIFIED IDEOGRAPH - 0xE55F: 0x860B, //CJK UNIFIED IDEOGRAPH - 0xE560: 0x85FE, //CJK UNIFIED IDEOGRAPH - 0xE561: 0x85FA, //CJK UNIFIED IDEOGRAPH - 0xE562: 0x8606, //CJK UNIFIED IDEOGRAPH - 0xE563: 0x8622, //CJK UNIFIED IDEOGRAPH - 0xE564: 0x861A, //CJK UNIFIED IDEOGRAPH - 0xE565: 0x8630, //CJK UNIFIED IDEOGRAPH - 0xE566: 0x863F, //CJK UNIFIED IDEOGRAPH - 0xE567: 0x864D, //CJK UNIFIED IDEOGRAPH - 0xE568: 0x4E55, //CJK UNIFIED IDEOGRAPH - 0xE569: 0x8654, //CJK UNIFIED IDEOGRAPH - 0xE56A: 0x865F, //CJK UNIFIED IDEOGRAPH - 0xE56B: 0x8667, //CJK UNIFIED IDEOGRAPH - 0xE56C: 0x8671, //CJK UNIFIED IDEOGRAPH - 0xE56D: 0x8693, //CJK UNIFIED IDEOGRAPH - 0xE56E: 0x86A3, //CJK UNIFIED IDEOGRAPH - 0xE56F: 0x86A9, //CJK UNIFIED IDEOGRAPH - 0xE570: 0x86AA, //CJK UNIFIED IDEOGRAPH - 0xE571: 0x868B, //CJK UNIFIED IDEOGRAPH - 0xE572: 0x868C, //CJK UNIFIED IDEOGRAPH - 0xE573: 0x86B6, //CJK UNIFIED IDEOGRAPH - 0xE574: 0x86AF, //CJK UNIFIED IDEOGRAPH - 0xE575: 0x86C4, //CJK UNIFIED IDEOGRAPH - 0xE576: 0x86C6, //CJK UNIFIED IDEOGRAPH - 0xE577: 0x86B0, //CJK UNIFIED IDEOGRAPH - 0xE578: 0x86C9, //CJK UNIFIED IDEOGRAPH - 0xE579: 0x8823, //CJK UNIFIED IDEOGRAPH - 0xE57A: 0x86AB, //CJK UNIFIED IDEOGRAPH - 0xE57B: 0x86D4, //CJK UNIFIED IDEOGRAPH - 0xE57C: 0x86DE, //CJK UNIFIED IDEOGRAPH - 0xE57D: 0x86E9, //CJK UNIFIED IDEOGRAPH - 0xE57E: 0x86EC, //CJK UNIFIED IDEOGRAPH - 0xE580: 0x86DF, //CJK UNIFIED IDEOGRAPH - 0xE581: 0x86DB, //CJK UNIFIED IDEOGRAPH - 0xE582: 0x86EF, //CJK UNIFIED IDEOGRAPH - 0xE583: 0x8712, //CJK UNIFIED IDEOGRAPH - 0xE584: 0x8706, //CJK UNIFIED IDEOGRAPH - 0xE585: 0x8708, //CJK UNIFIED IDEOGRAPH - 0xE586: 0x8700, //CJK UNIFIED IDEOGRAPH - 0xE587: 0x8703, //CJK UNIFIED IDEOGRAPH - 0xE588: 0x86FB, //CJK UNIFIED IDEOGRAPH - 0xE589: 0x8711, //CJK UNIFIED IDEOGRAPH - 0xE58A: 0x8709, //CJK UNIFIED IDEOGRAPH - 0xE58B: 0x870D, //CJK UNIFIED IDEOGRAPH - 0xE58C: 0x86F9, //CJK UNIFIED IDEOGRAPH - 0xE58D: 0x870A, //CJK UNIFIED IDEOGRAPH - 0xE58E: 0x8734, //CJK UNIFIED IDEOGRAPH - 0xE58F: 0x873F, //CJK UNIFIED IDEOGRAPH - 0xE590: 0x8737, //CJK UNIFIED IDEOGRAPH - 0xE591: 0x873B, //CJK UNIFIED IDEOGRAPH - 0xE592: 0x8725, //CJK UNIFIED IDEOGRAPH - 0xE593: 0x8729, //CJK UNIFIED IDEOGRAPH - 0xE594: 0x871A, //CJK UNIFIED IDEOGRAPH - 0xE595: 0x8760, //CJK UNIFIED IDEOGRAPH - 0xE596: 0x875F, //CJK UNIFIED IDEOGRAPH - 0xE597: 0x8778, //CJK UNIFIED IDEOGRAPH - 0xE598: 0x874C, //CJK UNIFIED IDEOGRAPH - 0xE599: 0x874E, //CJK UNIFIED IDEOGRAPH - 0xE59A: 0x8774, //CJK UNIFIED IDEOGRAPH - 0xE59B: 0x8757, //CJK UNIFIED IDEOGRAPH - 0xE59C: 0x8768, //CJK UNIFIED IDEOGRAPH - 0xE59D: 0x876E, //CJK UNIFIED IDEOGRAPH - 0xE59E: 0x8759, //CJK UNIFIED IDEOGRAPH - 0xE59F: 0x8753, //CJK UNIFIED IDEOGRAPH - 0xE5A0: 0x8763, //CJK UNIFIED IDEOGRAPH - 0xE5A1: 0x876A, //CJK UNIFIED IDEOGRAPH - 0xE5A2: 0x8805, //CJK UNIFIED IDEOGRAPH - 0xE5A3: 0x87A2, //CJK UNIFIED IDEOGRAPH - 0xE5A4: 0x879F, //CJK UNIFIED IDEOGRAPH - 0xE5A5: 0x8782, //CJK UNIFIED IDEOGRAPH - 0xE5A6: 0x87AF, //CJK UNIFIED IDEOGRAPH - 0xE5A7: 0x87CB, //CJK UNIFIED IDEOGRAPH - 0xE5A8: 0x87BD, //CJK UNIFIED IDEOGRAPH - 0xE5A9: 0x87C0, //CJK UNIFIED IDEOGRAPH - 0xE5AA: 0x87D0, //CJK UNIFIED IDEOGRAPH - 0xE5AB: 0x96D6, //CJK UNIFIED IDEOGRAPH - 0xE5AC: 0x87AB, //CJK UNIFIED IDEOGRAPH - 0xE5AD: 0x87C4, //CJK UNIFIED IDEOGRAPH - 0xE5AE: 0x87B3, //CJK UNIFIED IDEOGRAPH - 0xE5AF: 0x87C7, //CJK UNIFIED IDEOGRAPH - 0xE5B0: 0x87C6, //CJK UNIFIED IDEOGRAPH - 0xE5B1: 0x87BB, //CJK UNIFIED IDEOGRAPH - 0xE5B2: 0x87EF, //CJK UNIFIED IDEOGRAPH - 0xE5B3: 0x87F2, //CJK UNIFIED IDEOGRAPH - 0xE5B4: 0x87E0, //CJK UNIFIED IDEOGRAPH - 0xE5B5: 0x880F, //CJK UNIFIED IDEOGRAPH - 0xE5B6: 0x880D, //CJK UNIFIED IDEOGRAPH - 0xE5B7: 0x87FE, //CJK UNIFIED IDEOGRAPH - 0xE5B8: 0x87F6, //CJK UNIFIED IDEOGRAPH - 0xE5B9: 0x87F7, //CJK UNIFIED IDEOGRAPH - 0xE5BA: 0x880E, //CJK UNIFIED IDEOGRAPH - 0xE5BB: 0x87D2, //CJK UNIFIED IDEOGRAPH - 0xE5BC: 0x8811, //CJK UNIFIED IDEOGRAPH - 0xE5BD: 0x8816, //CJK UNIFIED IDEOGRAPH - 0xE5BE: 0x8815, //CJK UNIFIED IDEOGRAPH - 0xE5BF: 0x8822, //CJK UNIFIED IDEOGRAPH - 0xE5C0: 0x8821, //CJK UNIFIED IDEOGRAPH - 0xE5C1: 0x8831, //CJK UNIFIED IDEOGRAPH - 0xE5C2: 0x8836, //CJK UNIFIED IDEOGRAPH - 0xE5C3: 0x8839, //CJK UNIFIED IDEOGRAPH - 0xE5C4: 0x8827, //CJK UNIFIED IDEOGRAPH - 0xE5C5: 0x883B, //CJK UNIFIED IDEOGRAPH - 0xE5C6: 0x8844, //CJK UNIFIED IDEOGRAPH - 0xE5C7: 0x8842, //CJK UNIFIED IDEOGRAPH - 0xE5C8: 0x8852, //CJK UNIFIED IDEOGRAPH - 0xE5C9: 0x8859, //CJK UNIFIED IDEOGRAPH - 0xE5CA: 0x885E, //CJK UNIFIED IDEOGRAPH - 0xE5CB: 0x8862, //CJK UNIFIED IDEOGRAPH - 0xE5CC: 0x886B, //CJK UNIFIED IDEOGRAPH - 0xE5CD: 0x8881, //CJK UNIFIED IDEOGRAPH - 0xE5CE: 0x887E, //CJK UNIFIED IDEOGRAPH - 0xE5CF: 0x889E, //CJK UNIFIED IDEOGRAPH - 0xE5D0: 0x8875, //CJK UNIFIED IDEOGRAPH - 0xE5D1: 0x887D, //CJK UNIFIED IDEOGRAPH - 0xE5D2: 0x88B5, //CJK UNIFIED IDEOGRAPH - 0xE5D3: 0x8872, //CJK UNIFIED IDEOGRAPH - 0xE5D4: 0x8882, //CJK UNIFIED IDEOGRAPH - 0xE5D5: 0x8897, //CJK UNIFIED IDEOGRAPH - 0xE5D6: 0x8892, //CJK UNIFIED IDEOGRAPH - 0xE5D7: 0x88AE, //CJK UNIFIED IDEOGRAPH - 0xE5D8: 0x8899, //CJK UNIFIED IDEOGRAPH - 0xE5D9: 0x88A2, //CJK UNIFIED IDEOGRAPH - 0xE5DA: 0x888D, //CJK UNIFIED IDEOGRAPH - 0xE5DB: 0x88A4, //CJK UNIFIED IDEOGRAPH - 0xE5DC: 0x88B0, //CJK UNIFIED IDEOGRAPH - 0xE5DD: 0x88BF, //CJK UNIFIED IDEOGRAPH - 0xE5DE: 0x88B1, //CJK UNIFIED IDEOGRAPH - 0xE5DF: 0x88C3, //CJK UNIFIED IDEOGRAPH - 0xE5E0: 0x88C4, //CJK UNIFIED IDEOGRAPH - 0xE5E1: 0x88D4, //CJK UNIFIED IDEOGRAPH - 0xE5E2: 0x88D8, //CJK UNIFIED IDEOGRAPH - 0xE5E3: 0x88D9, //CJK UNIFIED IDEOGRAPH - 0xE5E4: 0x88DD, //CJK UNIFIED IDEOGRAPH - 0xE5E5: 0x88F9, //CJK UNIFIED IDEOGRAPH - 0xE5E6: 0x8902, //CJK UNIFIED IDEOGRAPH - 0xE5E7: 0x88FC, //CJK UNIFIED IDEOGRAPH - 0xE5E8: 0x88F4, //CJK UNIFIED IDEOGRAPH - 0xE5E9: 0x88E8, //CJK UNIFIED IDEOGRAPH - 0xE5EA: 0x88F2, //CJK UNIFIED IDEOGRAPH - 0xE5EB: 0x8904, //CJK UNIFIED IDEOGRAPH - 0xE5EC: 0x890C, //CJK UNIFIED IDEOGRAPH - 0xE5ED: 0x890A, //CJK UNIFIED IDEOGRAPH - 0xE5EE: 0x8913, //CJK UNIFIED IDEOGRAPH - 0xE5EF: 0x8943, //CJK UNIFIED IDEOGRAPH - 0xE5F0: 0x891E, //CJK UNIFIED IDEOGRAPH - 0xE5F1: 0x8925, //CJK UNIFIED IDEOGRAPH - 0xE5F2: 0x892A, //CJK UNIFIED IDEOGRAPH - 0xE5F3: 0x892B, //CJK UNIFIED IDEOGRAPH - 0xE5F4: 0x8941, //CJK UNIFIED IDEOGRAPH - 0xE5F5: 0x8944, //CJK UNIFIED IDEOGRAPH - 0xE5F6: 0x893B, //CJK UNIFIED IDEOGRAPH - 0xE5F7: 0x8936, //CJK UNIFIED IDEOGRAPH - 0xE5F8: 0x8938, //CJK UNIFIED IDEOGRAPH - 0xE5F9: 0x894C, //CJK UNIFIED IDEOGRAPH - 0xE5FA: 0x891D, //CJK UNIFIED IDEOGRAPH - 0xE5FB: 0x8960, //CJK UNIFIED IDEOGRAPH - 0xE5FC: 0x895E, //CJK UNIFIED IDEOGRAPH - 0xE640: 0x8966, //CJK UNIFIED IDEOGRAPH - 0xE641: 0x8964, //CJK UNIFIED IDEOGRAPH - 0xE642: 0x896D, //CJK UNIFIED IDEOGRAPH - 0xE643: 0x896A, //CJK UNIFIED IDEOGRAPH - 0xE644: 0x896F, //CJK UNIFIED IDEOGRAPH - 0xE645: 0x8974, //CJK UNIFIED IDEOGRAPH - 0xE646: 0x8977, //CJK UNIFIED IDEOGRAPH - 0xE647: 0x897E, //CJK UNIFIED IDEOGRAPH - 0xE648: 0x8983, //CJK UNIFIED IDEOGRAPH - 0xE649: 0x8988, //CJK UNIFIED IDEOGRAPH - 0xE64A: 0x898A, //CJK UNIFIED IDEOGRAPH - 0xE64B: 0x8993, //CJK UNIFIED IDEOGRAPH - 0xE64C: 0x8998, //CJK UNIFIED IDEOGRAPH - 0xE64D: 0x89A1, //CJK UNIFIED IDEOGRAPH - 0xE64E: 0x89A9, //CJK UNIFIED IDEOGRAPH - 0xE64F: 0x89A6, //CJK UNIFIED IDEOGRAPH - 0xE650: 0x89AC, //CJK UNIFIED IDEOGRAPH - 0xE651: 0x89AF, //CJK UNIFIED IDEOGRAPH - 0xE652: 0x89B2, //CJK UNIFIED IDEOGRAPH - 0xE653: 0x89BA, //CJK UNIFIED IDEOGRAPH - 0xE654: 0x89BD, //CJK UNIFIED IDEOGRAPH - 0xE655: 0x89BF, //CJK UNIFIED IDEOGRAPH - 0xE656: 0x89C0, //CJK UNIFIED IDEOGRAPH - 0xE657: 0x89DA, //CJK UNIFIED IDEOGRAPH - 0xE658: 0x89DC, //CJK UNIFIED IDEOGRAPH - 0xE659: 0x89DD, //CJK UNIFIED IDEOGRAPH - 0xE65A: 0x89E7, //CJK UNIFIED IDEOGRAPH - 0xE65B: 0x89F4, //CJK UNIFIED IDEOGRAPH - 0xE65C: 0x89F8, //CJK UNIFIED IDEOGRAPH - 0xE65D: 0x8A03, //CJK UNIFIED IDEOGRAPH - 0xE65E: 0x8A16, //CJK UNIFIED IDEOGRAPH - 0xE65F: 0x8A10, //CJK UNIFIED IDEOGRAPH - 0xE660: 0x8A0C, //CJK UNIFIED IDEOGRAPH - 0xE661: 0x8A1B, //CJK UNIFIED IDEOGRAPH - 0xE662: 0x8A1D, //CJK UNIFIED IDEOGRAPH - 0xE663: 0x8A25, //CJK UNIFIED IDEOGRAPH - 0xE664: 0x8A36, //CJK UNIFIED IDEOGRAPH - 0xE665: 0x8A41, //CJK UNIFIED IDEOGRAPH - 0xE666: 0x8A5B, //CJK UNIFIED IDEOGRAPH - 0xE667: 0x8A52, //CJK UNIFIED IDEOGRAPH - 0xE668: 0x8A46, //CJK UNIFIED IDEOGRAPH - 0xE669: 0x8A48, //CJK UNIFIED IDEOGRAPH - 0xE66A: 0x8A7C, //CJK UNIFIED IDEOGRAPH - 0xE66B: 0x8A6D, //CJK UNIFIED IDEOGRAPH - 0xE66C: 0x8A6C, //CJK UNIFIED IDEOGRAPH - 0xE66D: 0x8A62, //CJK UNIFIED IDEOGRAPH - 0xE66E: 0x8A85, //CJK UNIFIED IDEOGRAPH - 0xE66F: 0x8A82, //CJK UNIFIED IDEOGRAPH - 0xE670: 0x8A84, //CJK UNIFIED IDEOGRAPH - 0xE671: 0x8AA8, //CJK UNIFIED IDEOGRAPH - 0xE672: 0x8AA1, //CJK UNIFIED IDEOGRAPH - 0xE673: 0x8A91, //CJK UNIFIED IDEOGRAPH - 0xE674: 0x8AA5, //CJK UNIFIED IDEOGRAPH - 0xE675: 0x8AA6, //CJK UNIFIED IDEOGRAPH - 0xE676: 0x8A9A, //CJK UNIFIED IDEOGRAPH - 0xE677: 0x8AA3, //CJK UNIFIED IDEOGRAPH - 0xE678: 0x8AC4, //CJK UNIFIED IDEOGRAPH - 0xE679: 0x8ACD, //CJK UNIFIED IDEOGRAPH - 0xE67A: 0x8AC2, //CJK UNIFIED IDEOGRAPH - 0xE67B: 0x8ADA, //CJK UNIFIED IDEOGRAPH - 0xE67C: 0x8AEB, //CJK UNIFIED IDEOGRAPH - 0xE67D: 0x8AF3, //CJK UNIFIED IDEOGRAPH - 0xE67E: 0x8AE7, //CJK UNIFIED IDEOGRAPH - 0xE680: 0x8AE4, //CJK UNIFIED IDEOGRAPH - 0xE681: 0x8AF1, //CJK UNIFIED IDEOGRAPH - 0xE682: 0x8B14, //CJK UNIFIED IDEOGRAPH - 0xE683: 0x8AE0, //CJK UNIFIED IDEOGRAPH - 0xE684: 0x8AE2, //CJK UNIFIED IDEOGRAPH - 0xE685: 0x8AF7, //CJK UNIFIED IDEOGRAPH - 0xE686: 0x8ADE, //CJK UNIFIED IDEOGRAPH - 0xE687: 0x8ADB, //CJK UNIFIED IDEOGRAPH - 0xE688: 0x8B0C, //CJK UNIFIED IDEOGRAPH - 0xE689: 0x8B07, //CJK UNIFIED IDEOGRAPH - 0xE68A: 0x8B1A, //CJK UNIFIED IDEOGRAPH - 0xE68B: 0x8AE1, //CJK UNIFIED IDEOGRAPH - 0xE68C: 0x8B16, //CJK UNIFIED IDEOGRAPH - 0xE68D: 0x8B10, //CJK UNIFIED IDEOGRAPH - 0xE68E: 0x8B17, //CJK UNIFIED IDEOGRAPH - 0xE68F: 0x8B20, //CJK UNIFIED IDEOGRAPH - 0xE690: 0x8B33, //CJK UNIFIED IDEOGRAPH - 0xE691: 0x97AB, //CJK UNIFIED IDEOGRAPH - 0xE692: 0x8B26, //CJK UNIFIED IDEOGRAPH - 0xE693: 0x8B2B, //CJK UNIFIED IDEOGRAPH - 0xE694: 0x8B3E, //CJK UNIFIED IDEOGRAPH - 0xE695: 0x8B28, //CJK UNIFIED IDEOGRAPH - 0xE696: 0x8B41, //CJK UNIFIED IDEOGRAPH - 0xE697: 0x8B4C, //CJK UNIFIED IDEOGRAPH - 0xE698: 0x8B4F, //CJK UNIFIED IDEOGRAPH - 0xE699: 0x8B4E, //CJK UNIFIED IDEOGRAPH - 0xE69A: 0x8B49, //CJK UNIFIED IDEOGRAPH - 0xE69B: 0x8B56, //CJK UNIFIED IDEOGRAPH - 0xE69C: 0x8B5B, //CJK UNIFIED IDEOGRAPH - 0xE69D: 0x8B5A, //CJK UNIFIED IDEOGRAPH - 0xE69E: 0x8B6B, //CJK UNIFIED IDEOGRAPH - 0xE69F: 0x8B5F, //CJK UNIFIED IDEOGRAPH - 0xE6A0: 0x8B6C, //CJK UNIFIED IDEOGRAPH - 0xE6A1: 0x8B6F, //CJK UNIFIED IDEOGRAPH - 0xE6A2: 0x8B74, //CJK UNIFIED IDEOGRAPH - 0xE6A3: 0x8B7D, //CJK UNIFIED IDEOGRAPH - 0xE6A4: 0x8B80, //CJK UNIFIED IDEOGRAPH - 0xE6A5: 0x8B8C, //CJK UNIFIED IDEOGRAPH - 0xE6A6: 0x8B8E, //CJK UNIFIED IDEOGRAPH - 0xE6A7: 0x8B92, //CJK UNIFIED IDEOGRAPH - 0xE6A8: 0x8B93, //CJK UNIFIED IDEOGRAPH - 0xE6A9: 0x8B96, //CJK UNIFIED IDEOGRAPH - 0xE6AA: 0x8B99, //CJK UNIFIED IDEOGRAPH - 0xE6AB: 0x8B9A, //CJK UNIFIED IDEOGRAPH - 0xE6AC: 0x8C3A, //CJK UNIFIED IDEOGRAPH - 0xE6AD: 0x8C41, //CJK UNIFIED IDEOGRAPH - 0xE6AE: 0x8C3F, //CJK UNIFIED IDEOGRAPH - 0xE6AF: 0x8C48, //CJK UNIFIED IDEOGRAPH - 0xE6B0: 0x8C4C, //CJK UNIFIED IDEOGRAPH - 0xE6B1: 0x8C4E, //CJK UNIFIED IDEOGRAPH - 0xE6B2: 0x8C50, //CJK UNIFIED IDEOGRAPH - 0xE6B3: 0x8C55, //CJK UNIFIED IDEOGRAPH - 0xE6B4: 0x8C62, //CJK UNIFIED IDEOGRAPH - 0xE6B5: 0x8C6C, //CJK UNIFIED IDEOGRAPH - 0xE6B6: 0x8C78, //CJK UNIFIED IDEOGRAPH - 0xE6B7: 0x8C7A, //CJK UNIFIED IDEOGRAPH - 0xE6B8: 0x8C82, //CJK UNIFIED IDEOGRAPH - 0xE6B9: 0x8C89, //CJK UNIFIED IDEOGRAPH - 0xE6BA: 0x8C85, //CJK UNIFIED IDEOGRAPH - 0xE6BB: 0x8C8A, //CJK UNIFIED IDEOGRAPH - 0xE6BC: 0x8C8D, //CJK UNIFIED IDEOGRAPH - 0xE6BD: 0x8C8E, //CJK UNIFIED IDEOGRAPH - 0xE6BE: 0x8C94, //CJK UNIFIED IDEOGRAPH - 0xE6BF: 0x8C7C, //CJK UNIFIED IDEOGRAPH - 0xE6C0: 0x8C98, //CJK UNIFIED IDEOGRAPH - 0xE6C1: 0x621D, //CJK UNIFIED IDEOGRAPH - 0xE6C2: 0x8CAD, //CJK UNIFIED IDEOGRAPH - 0xE6C3: 0x8CAA, //CJK UNIFIED IDEOGRAPH - 0xE6C4: 0x8CBD, //CJK UNIFIED IDEOGRAPH - 0xE6C5: 0x8CB2, //CJK UNIFIED IDEOGRAPH - 0xE6C6: 0x8CB3, //CJK UNIFIED IDEOGRAPH - 0xE6C7: 0x8CAE, //CJK UNIFIED IDEOGRAPH - 0xE6C8: 0x8CB6, //CJK UNIFIED IDEOGRAPH - 0xE6C9: 0x8CC8, //CJK UNIFIED IDEOGRAPH - 0xE6CA: 0x8CC1, //CJK UNIFIED IDEOGRAPH - 0xE6CB: 0x8CE4, //CJK UNIFIED IDEOGRAPH - 0xE6CC: 0x8CE3, //CJK UNIFIED IDEOGRAPH - 0xE6CD: 0x8CDA, //CJK UNIFIED IDEOGRAPH - 0xE6CE: 0x8CFD, //CJK UNIFIED IDEOGRAPH - 0xE6CF: 0x8CFA, //CJK UNIFIED IDEOGRAPH - 0xE6D0: 0x8CFB, //CJK UNIFIED IDEOGRAPH - 0xE6D1: 0x8D04, //CJK UNIFIED IDEOGRAPH - 0xE6D2: 0x8D05, //CJK UNIFIED IDEOGRAPH - 0xE6D3: 0x8D0A, //CJK UNIFIED IDEOGRAPH - 0xE6D4: 0x8D07, //CJK UNIFIED IDEOGRAPH - 0xE6D5: 0x8D0F, //CJK UNIFIED IDEOGRAPH - 0xE6D6: 0x8D0D, //CJK UNIFIED IDEOGRAPH - 0xE6D7: 0x8D10, //CJK UNIFIED IDEOGRAPH - 0xE6D8: 0x9F4E, //CJK UNIFIED IDEOGRAPH - 0xE6D9: 0x8D13, //CJK UNIFIED IDEOGRAPH - 0xE6DA: 0x8CCD, //CJK UNIFIED IDEOGRAPH - 0xE6DB: 0x8D14, //CJK UNIFIED IDEOGRAPH - 0xE6DC: 0x8D16, //CJK UNIFIED IDEOGRAPH - 0xE6DD: 0x8D67, //CJK UNIFIED IDEOGRAPH - 0xE6DE: 0x8D6D, //CJK UNIFIED IDEOGRAPH - 0xE6DF: 0x8D71, //CJK UNIFIED IDEOGRAPH - 0xE6E0: 0x8D73, //CJK UNIFIED IDEOGRAPH - 0xE6E1: 0x8D81, //CJK UNIFIED IDEOGRAPH - 0xE6E2: 0x8D99, //CJK UNIFIED IDEOGRAPH - 0xE6E3: 0x8DC2, //CJK UNIFIED IDEOGRAPH - 0xE6E4: 0x8DBE, //CJK UNIFIED IDEOGRAPH - 0xE6E5: 0x8DBA, //CJK UNIFIED IDEOGRAPH - 0xE6E6: 0x8DCF, //CJK UNIFIED IDEOGRAPH - 0xE6E7: 0x8DDA, //CJK UNIFIED IDEOGRAPH - 0xE6E8: 0x8DD6, //CJK UNIFIED IDEOGRAPH - 0xE6E9: 0x8DCC, //CJK UNIFIED IDEOGRAPH - 0xE6EA: 0x8DDB, //CJK UNIFIED IDEOGRAPH - 0xE6EB: 0x8DCB, //CJK UNIFIED IDEOGRAPH - 0xE6EC: 0x8DEA, //CJK UNIFIED IDEOGRAPH - 0xE6ED: 0x8DEB, //CJK UNIFIED IDEOGRAPH - 0xE6EE: 0x8DDF, //CJK UNIFIED IDEOGRAPH - 0xE6EF: 0x8DE3, //CJK UNIFIED IDEOGRAPH - 0xE6F0: 0x8DFC, //CJK UNIFIED IDEOGRAPH - 0xE6F1: 0x8E08, //CJK UNIFIED IDEOGRAPH - 0xE6F2: 0x8E09, //CJK UNIFIED IDEOGRAPH - 0xE6F3: 0x8DFF, //CJK UNIFIED IDEOGRAPH - 0xE6F4: 0x8E1D, //CJK UNIFIED IDEOGRAPH - 0xE6F5: 0x8E1E, //CJK UNIFIED IDEOGRAPH - 0xE6F6: 0x8E10, //CJK UNIFIED IDEOGRAPH - 0xE6F7: 0x8E1F, //CJK UNIFIED IDEOGRAPH - 0xE6F8: 0x8E42, //CJK UNIFIED IDEOGRAPH - 0xE6F9: 0x8E35, //CJK UNIFIED IDEOGRAPH - 0xE6FA: 0x8E30, //CJK UNIFIED IDEOGRAPH - 0xE6FB: 0x8E34, //CJK UNIFIED IDEOGRAPH - 0xE6FC: 0x8E4A, //CJK UNIFIED IDEOGRAPH - 0xE740: 0x8E47, //CJK UNIFIED IDEOGRAPH - 0xE741: 0x8E49, //CJK UNIFIED IDEOGRAPH - 0xE742: 0x8E4C, //CJK UNIFIED IDEOGRAPH - 0xE743: 0x8E50, //CJK UNIFIED IDEOGRAPH - 0xE744: 0x8E48, //CJK UNIFIED IDEOGRAPH - 0xE745: 0x8E59, //CJK UNIFIED IDEOGRAPH - 0xE746: 0x8E64, //CJK UNIFIED IDEOGRAPH - 0xE747: 0x8E60, //CJK UNIFIED IDEOGRAPH - 0xE748: 0x8E2A, //CJK UNIFIED IDEOGRAPH - 0xE749: 0x8E63, //CJK UNIFIED IDEOGRAPH - 0xE74A: 0x8E55, //CJK UNIFIED IDEOGRAPH - 0xE74B: 0x8E76, //CJK UNIFIED IDEOGRAPH - 0xE74C: 0x8E72, //CJK UNIFIED IDEOGRAPH - 0xE74D: 0x8E7C, //CJK UNIFIED IDEOGRAPH - 0xE74E: 0x8E81, //CJK UNIFIED IDEOGRAPH - 0xE74F: 0x8E87, //CJK UNIFIED IDEOGRAPH - 0xE750: 0x8E85, //CJK UNIFIED IDEOGRAPH - 0xE751: 0x8E84, //CJK UNIFIED IDEOGRAPH - 0xE752: 0x8E8B, //CJK UNIFIED IDEOGRAPH - 0xE753: 0x8E8A, //CJK UNIFIED IDEOGRAPH - 0xE754: 0x8E93, //CJK UNIFIED IDEOGRAPH - 0xE755: 0x8E91, //CJK UNIFIED IDEOGRAPH - 0xE756: 0x8E94, //CJK UNIFIED IDEOGRAPH - 0xE757: 0x8E99, //CJK UNIFIED IDEOGRAPH - 0xE758: 0x8EAA, //CJK UNIFIED IDEOGRAPH - 0xE759: 0x8EA1, //CJK UNIFIED IDEOGRAPH - 0xE75A: 0x8EAC, //CJK UNIFIED IDEOGRAPH - 0xE75B: 0x8EB0, //CJK UNIFIED IDEOGRAPH - 0xE75C: 0x8EC6, //CJK UNIFIED IDEOGRAPH - 0xE75D: 0x8EB1, //CJK UNIFIED IDEOGRAPH - 0xE75E: 0x8EBE, //CJK UNIFIED IDEOGRAPH - 0xE75F: 0x8EC5, //CJK UNIFIED IDEOGRAPH - 0xE760: 0x8EC8, //CJK UNIFIED IDEOGRAPH - 0xE761: 0x8ECB, //CJK UNIFIED IDEOGRAPH - 0xE762: 0x8EDB, //CJK UNIFIED IDEOGRAPH - 0xE763: 0x8EE3, //CJK UNIFIED IDEOGRAPH - 0xE764: 0x8EFC, //CJK UNIFIED IDEOGRAPH - 0xE765: 0x8EFB, //CJK UNIFIED IDEOGRAPH - 0xE766: 0x8EEB, //CJK UNIFIED IDEOGRAPH - 0xE767: 0x8EFE, //CJK UNIFIED IDEOGRAPH - 0xE768: 0x8F0A, //CJK UNIFIED IDEOGRAPH - 0xE769: 0x8F05, //CJK UNIFIED IDEOGRAPH - 0xE76A: 0x8F15, //CJK UNIFIED IDEOGRAPH - 0xE76B: 0x8F12, //CJK UNIFIED IDEOGRAPH - 0xE76C: 0x8F19, //CJK UNIFIED IDEOGRAPH - 0xE76D: 0x8F13, //CJK UNIFIED IDEOGRAPH - 0xE76E: 0x8F1C, //CJK UNIFIED IDEOGRAPH - 0xE76F: 0x8F1F, //CJK UNIFIED IDEOGRAPH - 0xE770: 0x8F1B, //CJK UNIFIED IDEOGRAPH - 0xE771: 0x8F0C, //CJK UNIFIED IDEOGRAPH - 0xE772: 0x8F26, //CJK UNIFIED IDEOGRAPH - 0xE773: 0x8F33, //CJK UNIFIED IDEOGRAPH - 0xE774: 0x8F3B, //CJK UNIFIED IDEOGRAPH - 0xE775: 0x8F39, //CJK UNIFIED IDEOGRAPH - 0xE776: 0x8F45, //CJK UNIFIED IDEOGRAPH - 0xE777: 0x8F42, //CJK UNIFIED IDEOGRAPH - 0xE778: 0x8F3E, //CJK UNIFIED IDEOGRAPH - 0xE779: 0x8F4C, //CJK UNIFIED IDEOGRAPH - 0xE77A: 0x8F49, //CJK UNIFIED IDEOGRAPH - 0xE77B: 0x8F46, //CJK UNIFIED IDEOGRAPH - 0xE77C: 0x8F4E, //CJK UNIFIED IDEOGRAPH - 0xE77D: 0x8F57, //CJK UNIFIED IDEOGRAPH - 0xE77E: 0x8F5C, //CJK UNIFIED IDEOGRAPH - 0xE780: 0x8F62, //CJK UNIFIED IDEOGRAPH - 0xE781: 0x8F63, //CJK UNIFIED IDEOGRAPH - 0xE782: 0x8F64, //CJK UNIFIED IDEOGRAPH - 0xE783: 0x8F9C, //CJK UNIFIED IDEOGRAPH - 0xE784: 0x8F9F, //CJK UNIFIED IDEOGRAPH - 0xE785: 0x8FA3, //CJK UNIFIED IDEOGRAPH - 0xE786: 0x8FAD, //CJK UNIFIED IDEOGRAPH - 0xE787: 0x8FAF, //CJK UNIFIED IDEOGRAPH - 0xE788: 0x8FB7, //CJK UNIFIED IDEOGRAPH - 0xE789: 0x8FDA, //CJK UNIFIED IDEOGRAPH - 0xE78A: 0x8FE5, //CJK UNIFIED IDEOGRAPH - 0xE78B: 0x8FE2, //CJK UNIFIED IDEOGRAPH - 0xE78C: 0x8FEA, //CJK UNIFIED IDEOGRAPH - 0xE78D: 0x8FEF, //CJK UNIFIED IDEOGRAPH - 0xE78E: 0x9087, //CJK UNIFIED IDEOGRAPH - 0xE78F: 0x8FF4, //CJK UNIFIED IDEOGRAPH - 0xE790: 0x9005, //CJK UNIFIED IDEOGRAPH - 0xE791: 0x8FF9, //CJK UNIFIED IDEOGRAPH - 0xE792: 0x8FFA, //CJK UNIFIED IDEOGRAPH - 0xE793: 0x9011, //CJK UNIFIED IDEOGRAPH - 0xE794: 0x9015, //CJK UNIFIED IDEOGRAPH - 0xE795: 0x9021, //CJK UNIFIED IDEOGRAPH - 0xE796: 0x900D, //CJK UNIFIED IDEOGRAPH - 0xE797: 0x901E, //CJK UNIFIED IDEOGRAPH - 0xE798: 0x9016, //CJK UNIFIED IDEOGRAPH - 0xE799: 0x900B, //CJK UNIFIED IDEOGRAPH - 0xE79A: 0x9027, //CJK UNIFIED IDEOGRAPH - 0xE79B: 0x9036, //CJK UNIFIED IDEOGRAPH - 0xE79C: 0x9035, //CJK UNIFIED IDEOGRAPH - 0xE79D: 0x9039, //CJK UNIFIED IDEOGRAPH - 0xE79E: 0x8FF8, //CJK UNIFIED IDEOGRAPH - 0xE79F: 0x904F, //CJK UNIFIED IDEOGRAPH - 0xE7A0: 0x9050, //CJK UNIFIED IDEOGRAPH - 0xE7A1: 0x9051, //CJK UNIFIED IDEOGRAPH - 0xE7A2: 0x9052, //CJK UNIFIED IDEOGRAPH - 0xE7A3: 0x900E, //CJK UNIFIED IDEOGRAPH - 0xE7A4: 0x9049, //CJK UNIFIED IDEOGRAPH - 0xE7A5: 0x903E, //CJK UNIFIED IDEOGRAPH - 0xE7A6: 0x9056, //CJK UNIFIED IDEOGRAPH - 0xE7A7: 0x9058, //CJK UNIFIED IDEOGRAPH - 0xE7A8: 0x905E, //CJK UNIFIED IDEOGRAPH - 0xE7A9: 0x9068, //CJK UNIFIED IDEOGRAPH - 0xE7AA: 0x906F, //CJK UNIFIED IDEOGRAPH - 0xE7AB: 0x9076, //CJK UNIFIED IDEOGRAPH - 0xE7AC: 0x96A8, //CJK UNIFIED IDEOGRAPH - 0xE7AD: 0x9072, //CJK UNIFIED IDEOGRAPH - 0xE7AE: 0x9082, //CJK UNIFIED IDEOGRAPH - 0xE7AF: 0x907D, //CJK UNIFIED IDEOGRAPH - 0xE7B0: 0x9081, //CJK UNIFIED IDEOGRAPH - 0xE7B1: 0x9080, //CJK UNIFIED IDEOGRAPH - 0xE7B2: 0x908A, //CJK UNIFIED IDEOGRAPH - 0xE7B3: 0x9089, //CJK UNIFIED IDEOGRAPH - 0xE7B4: 0x908F, //CJK UNIFIED IDEOGRAPH - 0xE7B5: 0x90A8, //CJK UNIFIED IDEOGRAPH - 0xE7B6: 0x90AF, //CJK UNIFIED IDEOGRAPH - 0xE7B7: 0x90B1, //CJK UNIFIED IDEOGRAPH - 0xE7B8: 0x90B5, //CJK UNIFIED IDEOGRAPH - 0xE7B9: 0x90E2, //CJK UNIFIED IDEOGRAPH - 0xE7BA: 0x90E4, //CJK UNIFIED IDEOGRAPH - 0xE7BB: 0x6248, //CJK UNIFIED IDEOGRAPH - 0xE7BC: 0x90DB, //CJK UNIFIED IDEOGRAPH - 0xE7BD: 0x9102, //CJK UNIFIED IDEOGRAPH - 0xE7BE: 0x9112, //CJK UNIFIED IDEOGRAPH - 0xE7BF: 0x9119, //CJK UNIFIED IDEOGRAPH - 0xE7C0: 0x9132, //CJK UNIFIED IDEOGRAPH - 0xE7C1: 0x9130, //CJK UNIFIED IDEOGRAPH - 0xE7C2: 0x914A, //CJK UNIFIED IDEOGRAPH - 0xE7C3: 0x9156, //CJK UNIFIED IDEOGRAPH - 0xE7C4: 0x9158, //CJK UNIFIED IDEOGRAPH - 0xE7C5: 0x9163, //CJK UNIFIED IDEOGRAPH - 0xE7C6: 0x9165, //CJK UNIFIED IDEOGRAPH - 0xE7C7: 0x9169, //CJK UNIFIED IDEOGRAPH - 0xE7C8: 0x9173, //CJK UNIFIED IDEOGRAPH - 0xE7C9: 0x9172, //CJK UNIFIED IDEOGRAPH - 0xE7CA: 0x918B, //CJK UNIFIED IDEOGRAPH - 0xE7CB: 0x9189, //CJK UNIFIED IDEOGRAPH - 0xE7CC: 0x9182, //CJK UNIFIED IDEOGRAPH - 0xE7CD: 0x91A2, //CJK UNIFIED IDEOGRAPH - 0xE7CE: 0x91AB, //CJK UNIFIED IDEOGRAPH - 0xE7CF: 0x91AF, //CJK UNIFIED IDEOGRAPH - 0xE7D0: 0x91AA, //CJK UNIFIED IDEOGRAPH - 0xE7D1: 0x91B5, //CJK UNIFIED IDEOGRAPH - 0xE7D2: 0x91B4, //CJK UNIFIED IDEOGRAPH - 0xE7D3: 0x91BA, //CJK UNIFIED IDEOGRAPH - 0xE7D4: 0x91C0, //CJK UNIFIED IDEOGRAPH - 0xE7D5: 0x91C1, //CJK UNIFIED IDEOGRAPH - 0xE7D6: 0x91C9, //CJK UNIFIED IDEOGRAPH - 0xE7D7: 0x91CB, //CJK UNIFIED IDEOGRAPH - 0xE7D8: 0x91D0, //CJK UNIFIED IDEOGRAPH - 0xE7D9: 0x91D6, //CJK UNIFIED IDEOGRAPH - 0xE7DA: 0x91DF, //CJK UNIFIED IDEOGRAPH - 0xE7DB: 0x91E1, //CJK UNIFIED IDEOGRAPH - 0xE7DC: 0x91DB, //CJK UNIFIED IDEOGRAPH - 0xE7DD: 0x91FC, //CJK UNIFIED IDEOGRAPH - 0xE7DE: 0x91F5, //CJK UNIFIED IDEOGRAPH - 0xE7DF: 0x91F6, //CJK UNIFIED IDEOGRAPH - 0xE7E0: 0x921E, //CJK UNIFIED IDEOGRAPH - 0xE7E1: 0x91FF, //CJK UNIFIED IDEOGRAPH - 0xE7E2: 0x9214, //CJK UNIFIED IDEOGRAPH - 0xE7E3: 0x922C, //CJK UNIFIED IDEOGRAPH - 0xE7E4: 0x9215, //CJK UNIFIED IDEOGRAPH - 0xE7E5: 0x9211, //CJK UNIFIED IDEOGRAPH - 0xE7E6: 0x925E, //CJK UNIFIED IDEOGRAPH - 0xE7E7: 0x9257, //CJK UNIFIED IDEOGRAPH - 0xE7E8: 0x9245, //CJK UNIFIED IDEOGRAPH - 0xE7E9: 0x9249, //CJK UNIFIED IDEOGRAPH - 0xE7EA: 0x9264, //CJK UNIFIED IDEOGRAPH - 0xE7EB: 0x9248, //CJK UNIFIED IDEOGRAPH - 0xE7EC: 0x9295, //CJK UNIFIED IDEOGRAPH - 0xE7ED: 0x923F, //CJK UNIFIED IDEOGRAPH - 0xE7EE: 0x924B, //CJK UNIFIED IDEOGRAPH - 0xE7EF: 0x9250, //CJK UNIFIED IDEOGRAPH - 0xE7F0: 0x929C, //CJK UNIFIED IDEOGRAPH - 0xE7F1: 0x9296, //CJK UNIFIED IDEOGRAPH - 0xE7F2: 0x9293, //CJK UNIFIED IDEOGRAPH - 0xE7F3: 0x929B, //CJK UNIFIED IDEOGRAPH - 0xE7F4: 0x925A, //CJK UNIFIED IDEOGRAPH - 0xE7F5: 0x92CF, //CJK UNIFIED IDEOGRAPH - 0xE7F6: 0x92B9, //CJK UNIFIED IDEOGRAPH - 0xE7F7: 0x92B7, //CJK UNIFIED IDEOGRAPH - 0xE7F8: 0x92E9, //CJK UNIFIED IDEOGRAPH - 0xE7F9: 0x930F, //CJK UNIFIED IDEOGRAPH - 0xE7FA: 0x92FA, //CJK UNIFIED IDEOGRAPH - 0xE7FB: 0x9344, //CJK UNIFIED IDEOGRAPH - 0xE7FC: 0x932E, //CJK UNIFIED IDEOGRAPH - 0xE840: 0x9319, //CJK UNIFIED IDEOGRAPH - 0xE841: 0x9322, //CJK UNIFIED IDEOGRAPH - 0xE842: 0x931A, //CJK UNIFIED IDEOGRAPH - 0xE843: 0x9323, //CJK UNIFIED IDEOGRAPH - 0xE844: 0x933A, //CJK UNIFIED IDEOGRAPH - 0xE845: 0x9335, //CJK UNIFIED IDEOGRAPH - 0xE846: 0x933B, //CJK UNIFIED IDEOGRAPH - 0xE847: 0x935C, //CJK UNIFIED IDEOGRAPH - 0xE848: 0x9360, //CJK UNIFIED IDEOGRAPH - 0xE849: 0x937C, //CJK UNIFIED IDEOGRAPH - 0xE84A: 0x936E, //CJK UNIFIED IDEOGRAPH - 0xE84B: 0x9356, //CJK UNIFIED IDEOGRAPH - 0xE84C: 0x93B0, //CJK UNIFIED IDEOGRAPH - 0xE84D: 0x93AC, //CJK UNIFIED IDEOGRAPH - 0xE84E: 0x93AD, //CJK UNIFIED IDEOGRAPH - 0xE84F: 0x9394, //CJK UNIFIED IDEOGRAPH - 0xE850: 0x93B9, //CJK UNIFIED IDEOGRAPH - 0xE851: 0x93D6, //CJK UNIFIED IDEOGRAPH - 0xE852: 0x93D7, //CJK UNIFIED IDEOGRAPH - 0xE853: 0x93E8, //CJK UNIFIED IDEOGRAPH - 0xE854: 0x93E5, //CJK UNIFIED IDEOGRAPH - 0xE855: 0x93D8, //CJK UNIFIED IDEOGRAPH - 0xE856: 0x93C3, //CJK UNIFIED IDEOGRAPH - 0xE857: 0x93DD, //CJK UNIFIED IDEOGRAPH - 0xE858: 0x93D0, //CJK UNIFIED IDEOGRAPH - 0xE859: 0x93C8, //CJK UNIFIED IDEOGRAPH - 0xE85A: 0x93E4, //CJK UNIFIED IDEOGRAPH - 0xE85B: 0x941A, //CJK UNIFIED IDEOGRAPH - 0xE85C: 0x9414, //CJK UNIFIED IDEOGRAPH - 0xE85D: 0x9413, //CJK UNIFIED IDEOGRAPH - 0xE85E: 0x9403, //CJK UNIFIED IDEOGRAPH - 0xE85F: 0x9407, //CJK UNIFIED IDEOGRAPH - 0xE860: 0x9410, //CJK UNIFIED IDEOGRAPH - 0xE861: 0x9436, //CJK UNIFIED IDEOGRAPH - 0xE862: 0x942B, //CJK UNIFIED IDEOGRAPH - 0xE863: 0x9435, //CJK UNIFIED IDEOGRAPH - 0xE864: 0x9421, //CJK UNIFIED IDEOGRAPH - 0xE865: 0x943A, //CJK UNIFIED IDEOGRAPH - 0xE866: 0x9441, //CJK UNIFIED IDEOGRAPH - 0xE867: 0x9452, //CJK UNIFIED IDEOGRAPH - 0xE868: 0x9444, //CJK UNIFIED IDEOGRAPH - 0xE869: 0x945B, //CJK UNIFIED IDEOGRAPH - 0xE86A: 0x9460, //CJK UNIFIED IDEOGRAPH - 0xE86B: 0x9462, //CJK UNIFIED IDEOGRAPH - 0xE86C: 0x945E, //CJK UNIFIED IDEOGRAPH - 0xE86D: 0x946A, //CJK UNIFIED IDEOGRAPH - 0xE86E: 0x9229, //CJK UNIFIED IDEOGRAPH - 0xE86F: 0x9470, //CJK UNIFIED IDEOGRAPH - 0xE870: 0x9475, //CJK UNIFIED IDEOGRAPH - 0xE871: 0x9477, //CJK UNIFIED IDEOGRAPH - 0xE872: 0x947D, //CJK UNIFIED IDEOGRAPH - 0xE873: 0x945A, //CJK UNIFIED IDEOGRAPH - 0xE874: 0x947C, //CJK UNIFIED IDEOGRAPH - 0xE875: 0x947E, //CJK UNIFIED IDEOGRAPH - 0xE876: 0x9481, //CJK UNIFIED IDEOGRAPH - 0xE877: 0x947F, //CJK UNIFIED IDEOGRAPH - 0xE878: 0x9582, //CJK UNIFIED IDEOGRAPH - 0xE879: 0x9587, //CJK UNIFIED IDEOGRAPH - 0xE87A: 0x958A, //CJK UNIFIED IDEOGRAPH - 0xE87B: 0x9594, //CJK UNIFIED IDEOGRAPH - 0xE87C: 0x9596, //CJK UNIFIED IDEOGRAPH - 0xE87D: 0x9598, //CJK UNIFIED IDEOGRAPH - 0xE87E: 0x9599, //CJK UNIFIED IDEOGRAPH - 0xE880: 0x95A0, //CJK UNIFIED IDEOGRAPH - 0xE881: 0x95A8, //CJK UNIFIED IDEOGRAPH - 0xE882: 0x95A7, //CJK UNIFIED IDEOGRAPH - 0xE883: 0x95AD, //CJK UNIFIED IDEOGRAPH - 0xE884: 0x95BC, //CJK UNIFIED IDEOGRAPH - 0xE885: 0x95BB, //CJK UNIFIED IDEOGRAPH - 0xE886: 0x95B9, //CJK UNIFIED IDEOGRAPH - 0xE887: 0x95BE, //CJK UNIFIED IDEOGRAPH - 0xE888: 0x95CA, //CJK UNIFIED IDEOGRAPH - 0xE889: 0x6FF6, //CJK UNIFIED IDEOGRAPH - 0xE88A: 0x95C3, //CJK UNIFIED IDEOGRAPH - 0xE88B: 0x95CD, //CJK UNIFIED IDEOGRAPH - 0xE88C: 0x95CC, //CJK UNIFIED IDEOGRAPH - 0xE88D: 0x95D5, //CJK UNIFIED IDEOGRAPH - 0xE88E: 0x95D4, //CJK UNIFIED IDEOGRAPH - 0xE88F: 0x95D6, //CJK UNIFIED IDEOGRAPH - 0xE890: 0x95DC, //CJK UNIFIED IDEOGRAPH - 0xE891: 0x95E1, //CJK UNIFIED IDEOGRAPH - 0xE892: 0x95E5, //CJK UNIFIED IDEOGRAPH - 0xE893: 0x95E2, //CJK UNIFIED IDEOGRAPH - 0xE894: 0x9621, //CJK UNIFIED IDEOGRAPH - 0xE895: 0x9628, //CJK UNIFIED IDEOGRAPH - 0xE896: 0x962E, //CJK UNIFIED IDEOGRAPH - 0xE897: 0x962F, //CJK UNIFIED IDEOGRAPH - 0xE898: 0x9642, //CJK UNIFIED IDEOGRAPH - 0xE899: 0x964C, //CJK UNIFIED IDEOGRAPH - 0xE89A: 0x964F, //CJK UNIFIED IDEOGRAPH - 0xE89B: 0x964B, //CJK UNIFIED IDEOGRAPH - 0xE89C: 0x9677, //CJK UNIFIED IDEOGRAPH - 0xE89D: 0x965C, //CJK UNIFIED IDEOGRAPH - 0xE89E: 0x965E, //CJK UNIFIED IDEOGRAPH - 0xE89F: 0x965D, //CJK UNIFIED IDEOGRAPH - 0xE8A0: 0x965F, //CJK UNIFIED IDEOGRAPH - 0xE8A1: 0x9666, //CJK UNIFIED IDEOGRAPH - 0xE8A2: 0x9672, //CJK UNIFIED IDEOGRAPH - 0xE8A3: 0x966C, //CJK UNIFIED IDEOGRAPH - 0xE8A4: 0x968D, //CJK UNIFIED IDEOGRAPH - 0xE8A5: 0x9698, //CJK UNIFIED IDEOGRAPH - 0xE8A6: 0x9695, //CJK UNIFIED IDEOGRAPH - 0xE8A7: 0x9697, //CJK UNIFIED IDEOGRAPH - 0xE8A8: 0x96AA, //CJK UNIFIED IDEOGRAPH - 0xE8A9: 0x96A7, //CJK UNIFIED IDEOGRAPH - 0xE8AA: 0x96B1, //CJK UNIFIED IDEOGRAPH - 0xE8AB: 0x96B2, //CJK UNIFIED IDEOGRAPH - 0xE8AC: 0x96B0, //CJK UNIFIED IDEOGRAPH - 0xE8AD: 0x96B4, //CJK UNIFIED IDEOGRAPH - 0xE8AE: 0x96B6, //CJK UNIFIED IDEOGRAPH - 0xE8AF: 0x96B8, //CJK UNIFIED IDEOGRAPH - 0xE8B0: 0x96B9, //CJK UNIFIED IDEOGRAPH - 0xE8B1: 0x96CE, //CJK UNIFIED IDEOGRAPH - 0xE8B2: 0x96CB, //CJK UNIFIED IDEOGRAPH - 0xE8B3: 0x96C9, //CJK UNIFIED IDEOGRAPH - 0xE8B4: 0x96CD, //CJK UNIFIED IDEOGRAPH - 0xE8B5: 0x894D, //CJK UNIFIED IDEOGRAPH - 0xE8B6: 0x96DC, //CJK UNIFIED IDEOGRAPH - 0xE8B7: 0x970D, //CJK UNIFIED IDEOGRAPH - 0xE8B8: 0x96D5, //CJK UNIFIED IDEOGRAPH - 0xE8B9: 0x96F9, //CJK UNIFIED IDEOGRAPH - 0xE8BA: 0x9704, //CJK UNIFIED IDEOGRAPH - 0xE8BB: 0x9706, //CJK UNIFIED IDEOGRAPH - 0xE8BC: 0x9708, //CJK UNIFIED IDEOGRAPH - 0xE8BD: 0x9713, //CJK UNIFIED IDEOGRAPH - 0xE8BE: 0x970E, //CJK UNIFIED IDEOGRAPH - 0xE8BF: 0x9711, //CJK UNIFIED IDEOGRAPH - 0xE8C0: 0x970F, //CJK UNIFIED IDEOGRAPH - 0xE8C1: 0x9716, //CJK UNIFIED IDEOGRAPH - 0xE8C2: 0x9719, //CJK UNIFIED IDEOGRAPH - 0xE8C3: 0x9724, //CJK UNIFIED IDEOGRAPH - 0xE8C4: 0x972A, //CJK UNIFIED IDEOGRAPH - 0xE8C5: 0x9730, //CJK UNIFIED IDEOGRAPH - 0xE8C6: 0x9739, //CJK UNIFIED IDEOGRAPH - 0xE8C7: 0x973D, //CJK UNIFIED IDEOGRAPH - 0xE8C8: 0x973E, //CJK UNIFIED IDEOGRAPH - 0xE8C9: 0x9744, //CJK UNIFIED IDEOGRAPH - 0xE8CA: 0x9746, //CJK UNIFIED IDEOGRAPH - 0xE8CB: 0x9748, //CJK UNIFIED IDEOGRAPH - 0xE8CC: 0x9742, //CJK UNIFIED IDEOGRAPH - 0xE8CD: 0x9749, //CJK UNIFIED IDEOGRAPH - 0xE8CE: 0x975C, //CJK UNIFIED IDEOGRAPH - 0xE8CF: 0x9760, //CJK UNIFIED IDEOGRAPH - 0xE8D0: 0x9764, //CJK UNIFIED IDEOGRAPH - 0xE8D1: 0x9766, //CJK UNIFIED IDEOGRAPH - 0xE8D2: 0x9768, //CJK UNIFIED IDEOGRAPH - 0xE8D3: 0x52D2, //CJK UNIFIED IDEOGRAPH - 0xE8D4: 0x976B, //CJK UNIFIED IDEOGRAPH - 0xE8D5: 0x9771, //CJK UNIFIED IDEOGRAPH - 0xE8D6: 0x9779, //CJK UNIFIED IDEOGRAPH - 0xE8D7: 0x9785, //CJK UNIFIED IDEOGRAPH - 0xE8D8: 0x977C, //CJK UNIFIED IDEOGRAPH - 0xE8D9: 0x9781, //CJK UNIFIED IDEOGRAPH - 0xE8DA: 0x977A, //CJK UNIFIED IDEOGRAPH - 0xE8DB: 0x9786, //CJK UNIFIED IDEOGRAPH - 0xE8DC: 0x978B, //CJK UNIFIED IDEOGRAPH - 0xE8DD: 0x978F, //CJK UNIFIED IDEOGRAPH - 0xE8DE: 0x9790, //CJK UNIFIED IDEOGRAPH - 0xE8DF: 0x979C, //CJK UNIFIED IDEOGRAPH - 0xE8E0: 0x97A8, //CJK UNIFIED IDEOGRAPH - 0xE8E1: 0x97A6, //CJK UNIFIED IDEOGRAPH - 0xE8E2: 0x97A3, //CJK UNIFIED IDEOGRAPH - 0xE8E3: 0x97B3, //CJK UNIFIED IDEOGRAPH - 0xE8E4: 0x97B4, //CJK UNIFIED IDEOGRAPH - 0xE8E5: 0x97C3, //CJK UNIFIED IDEOGRAPH - 0xE8E6: 0x97C6, //CJK UNIFIED IDEOGRAPH - 0xE8E7: 0x97C8, //CJK UNIFIED IDEOGRAPH - 0xE8E8: 0x97CB, //CJK UNIFIED IDEOGRAPH - 0xE8E9: 0x97DC, //CJK UNIFIED IDEOGRAPH - 0xE8EA: 0x97ED, //CJK UNIFIED IDEOGRAPH - 0xE8EB: 0x9F4F, //CJK UNIFIED IDEOGRAPH - 0xE8EC: 0x97F2, //CJK UNIFIED IDEOGRAPH - 0xE8ED: 0x7ADF, //CJK UNIFIED IDEOGRAPH - 0xE8EE: 0x97F6, //CJK UNIFIED IDEOGRAPH - 0xE8EF: 0x97F5, //CJK UNIFIED IDEOGRAPH - 0xE8F0: 0x980F, //CJK UNIFIED IDEOGRAPH - 0xE8F1: 0x980C, //CJK UNIFIED IDEOGRAPH - 0xE8F2: 0x9838, //CJK UNIFIED IDEOGRAPH - 0xE8F3: 0x9824, //CJK UNIFIED IDEOGRAPH - 0xE8F4: 0x9821, //CJK UNIFIED IDEOGRAPH - 0xE8F5: 0x9837, //CJK UNIFIED IDEOGRAPH - 0xE8F6: 0x983D, //CJK UNIFIED IDEOGRAPH - 0xE8F7: 0x9846, //CJK UNIFIED IDEOGRAPH - 0xE8F8: 0x984F, //CJK UNIFIED IDEOGRAPH - 0xE8F9: 0x984B, //CJK UNIFIED IDEOGRAPH - 0xE8FA: 0x986B, //CJK UNIFIED IDEOGRAPH - 0xE8FB: 0x986F, //CJK UNIFIED IDEOGRAPH - 0xE8FC: 0x9870, //CJK UNIFIED IDEOGRAPH - 0xE940: 0x9871, //CJK UNIFIED IDEOGRAPH - 0xE941: 0x9874, //CJK UNIFIED IDEOGRAPH - 0xE942: 0x9873, //CJK UNIFIED IDEOGRAPH - 0xE943: 0x98AA, //CJK UNIFIED IDEOGRAPH - 0xE944: 0x98AF, //CJK UNIFIED IDEOGRAPH - 0xE945: 0x98B1, //CJK UNIFIED IDEOGRAPH - 0xE946: 0x98B6, //CJK UNIFIED IDEOGRAPH - 0xE947: 0x98C4, //CJK UNIFIED IDEOGRAPH - 0xE948: 0x98C3, //CJK UNIFIED IDEOGRAPH - 0xE949: 0x98C6, //CJK UNIFIED IDEOGRAPH - 0xE94A: 0x98E9, //CJK UNIFIED IDEOGRAPH - 0xE94B: 0x98EB, //CJK UNIFIED IDEOGRAPH - 0xE94C: 0x9903, //CJK UNIFIED IDEOGRAPH - 0xE94D: 0x9909, //CJK UNIFIED IDEOGRAPH - 0xE94E: 0x9912, //CJK UNIFIED IDEOGRAPH - 0xE94F: 0x9914, //CJK UNIFIED IDEOGRAPH - 0xE950: 0x9918, //CJK UNIFIED IDEOGRAPH - 0xE951: 0x9921, //CJK UNIFIED IDEOGRAPH - 0xE952: 0x991D, //CJK UNIFIED IDEOGRAPH - 0xE953: 0x991E, //CJK UNIFIED IDEOGRAPH - 0xE954: 0x9924, //CJK UNIFIED IDEOGRAPH - 0xE955: 0x9920, //CJK UNIFIED IDEOGRAPH - 0xE956: 0x992C, //CJK UNIFIED IDEOGRAPH - 0xE957: 0x992E, //CJK UNIFIED IDEOGRAPH - 0xE958: 0x993D, //CJK UNIFIED IDEOGRAPH - 0xE959: 0x993E, //CJK UNIFIED IDEOGRAPH - 0xE95A: 0x9942, //CJK UNIFIED IDEOGRAPH - 0xE95B: 0x9949, //CJK UNIFIED IDEOGRAPH - 0xE95C: 0x9945, //CJK UNIFIED IDEOGRAPH - 0xE95D: 0x9950, //CJK UNIFIED IDEOGRAPH - 0xE95E: 0x994B, //CJK UNIFIED IDEOGRAPH - 0xE95F: 0x9951, //CJK UNIFIED IDEOGRAPH - 0xE960: 0x9952, //CJK UNIFIED IDEOGRAPH - 0xE961: 0x994C, //CJK UNIFIED IDEOGRAPH - 0xE962: 0x9955, //CJK UNIFIED IDEOGRAPH - 0xE963: 0x9997, //CJK UNIFIED IDEOGRAPH - 0xE964: 0x9998, //CJK UNIFIED IDEOGRAPH - 0xE965: 0x99A5, //CJK UNIFIED IDEOGRAPH - 0xE966: 0x99AD, //CJK UNIFIED IDEOGRAPH - 0xE967: 0x99AE, //CJK UNIFIED IDEOGRAPH - 0xE968: 0x99BC, //CJK UNIFIED IDEOGRAPH - 0xE969: 0x99DF, //CJK UNIFIED IDEOGRAPH - 0xE96A: 0x99DB, //CJK UNIFIED IDEOGRAPH - 0xE96B: 0x99DD, //CJK UNIFIED IDEOGRAPH - 0xE96C: 0x99D8, //CJK UNIFIED IDEOGRAPH - 0xE96D: 0x99D1, //CJK UNIFIED IDEOGRAPH - 0xE96E: 0x99ED, //CJK UNIFIED IDEOGRAPH - 0xE96F: 0x99EE, //CJK UNIFIED IDEOGRAPH - 0xE970: 0x99F1, //CJK UNIFIED IDEOGRAPH - 0xE971: 0x99F2, //CJK UNIFIED IDEOGRAPH - 0xE972: 0x99FB, //CJK UNIFIED IDEOGRAPH - 0xE973: 0x99F8, //CJK UNIFIED IDEOGRAPH - 0xE974: 0x9A01, //CJK UNIFIED IDEOGRAPH - 0xE975: 0x9A0F, //CJK UNIFIED IDEOGRAPH - 0xE976: 0x9A05, //CJK UNIFIED IDEOGRAPH - 0xE977: 0x99E2, //CJK UNIFIED IDEOGRAPH - 0xE978: 0x9A19, //CJK UNIFIED IDEOGRAPH - 0xE979: 0x9A2B, //CJK UNIFIED IDEOGRAPH - 0xE97A: 0x9A37, //CJK UNIFIED IDEOGRAPH - 0xE97B: 0x9A45, //CJK UNIFIED IDEOGRAPH - 0xE97C: 0x9A42, //CJK UNIFIED IDEOGRAPH - 0xE97D: 0x9A40, //CJK UNIFIED IDEOGRAPH - 0xE97E: 0x9A43, //CJK UNIFIED IDEOGRAPH - 0xE980: 0x9A3E, //CJK UNIFIED IDEOGRAPH - 0xE981: 0x9A55, //CJK UNIFIED IDEOGRAPH - 0xE982: 0x9A4D, //CJK UNIFIED IDEOGRAPH - 0xE983: 0x9A5B, //CJK UNIFIED IDEOGRAPH - 0xE984: 0x9A57, //CJK UNIFIED IDEOGRAPH - 0xE985: 0x9A5F, //CJK UNIFIED IDEOGRAPH - 0xE986: 0x9A62, //CJK UNIFIED IDEOGRAPH - 0xE987: 0x9A65, //CJK UNIFIED IDEOGRAPH - 0xE988: 0x9A64, //CJK UNIFIED IDEOGRAPH - 0xE989: 0x9A69, //CJK UNIFIED IDEOGRAPH - 0xE98A: 0x9A6B, //CJK UNIFIED IDEOGRAPH - 0xE98B: 0x9A6A, //CJK UNIFIED IDEOGRAPH - 0xE98C: 0x9AAD, //CJK UNIFIED IDEOGRAPH - 0xE98D: 0x9AB0, //CJK UNIFIED IDEOGRAPH - 0xE98E: 0x9ABC, //CJK UNIFIED IDEOGRAPH - 0xE98F: 0x9AC0, //CJK UNIFIED IDEOGRAPH - 0xE990: 0x9ACF, //CJK UNIFIED IDEOGRAPH - 0xE991: 0x9AD1, //CJK UNIFIED IDEOGRAPH - 0xE992: 0x9AD3, //CJK UNIFIED IDEOGRAPH - 0xE993: 0x9AD4, //CJK UNIFIED IDEOGRAPH - 0xE994: 0x9ADE, //CJK UNIFIED IDEOGRAPH - 0xE995: 0x9ADF, //CJK UNIFIED IDEOGRAPH - 0xE996: 0x9AE2, //CJK UNIFIED IDEOGRAPH - 0xE997: 0x9AE3, //CJK UNIFIED IDEOGRAPH - 0xE998: 0x9AE6, //CJK UNIFIED IDEOGRAPH - 0xE999: 0x9AEF, //CJK UNIFIED IDEOGRAPH - 0xE99A: 0x9AEB, //CJK UNIFIED IDEOGRAPH - 0xE99B: 0x9AEE, //CJK UNIFIED IDEOGRAPH - 0xE99C: 0x9AF4, //CJK UNIFIED IDEOGRAPH - 0xE99D: 0x9AF1, //CJK UNIFIED IDEOGRAPH - 0xE99E: 0x9AF7, //CJK UNIFIED IDEOGRAPH - 0xE99F: 0x9AFB, //CJK UNIFIED IDEOGRAPH - 0xE9A0: 0x9B06, //CJK UNIFIED IDEOGRAPH - 0xE9A1: 0x9B18, //CJK UNIFIED IDEOGRAPH - 0xE9A2: 0x9B1A, //CJK UNIFIED IDEOGRAPH - 0xE9A3: 0x9B1F, //CJK UNIFIED IDEOGRAPH - 0xE9A4: 0x9B22, //CJK UNIFIED IDEOGRAPH - 0xE9A5: 0x9B23, //CJK UNIFIED IDEOGRAPH - 0xE9A6: 0x9B25, //CJK UNIFIED IDEOGRAPH - 0xE9A7: 0x9B27, //CJK UNIFIED IDEOGRAPH - 0xE9A8: 0x9B28, //CJK UNIFIED IDEOGRAPH - 0xE9A9: 0x9B29, //CJK UNIFIED IDEOGRAPH - 0xE9AA: 0x9B2A, //CJK UNIFIED IDEOGRAPH - 0xE9AB: 0x9B2E, //CJK UNIFIED IDEOGRAPH - 0xE9AC: 0x9B2F, //CJK UNIFIED IDEOGRAPH - 0xE9AD: 0x9B32, //CJK UNIFIED IDEOGRAPH - 0xE9AE: 0x9B44, //CJK UNIFIED IDEOGRAPH - 0xE9AF: 0x9B43, //CJK UNIFIED IDEOGRAPH - 0xE9B0: 0x9B4F, //CJK UNIFIED IDEOGRAPH - 0xE9B1: 0x9B4D, //CJK UNIFIED IDEOGRAPH - 0xE9B2: 0x9B4E, //CJK UNIFIED IDEOGRAPH - 0xE9B3: 0x9B51, //CJK UNIFIED IDEOGRAPH - 0xE9B4: 0x9B58, //CJK UNIFIED IDEOGRAPH - 0xE9B5: 0x9B74, //CJK UNIFIED IDEOGRAPH - 0xE9B6: 0x9B93, //CJK UNIFIED IDEOGRAPH - 0xE9B7: 0x9B83, //CJK UNIFIED IDEOGRAPH - 0xE9B8: 0x9B91, //CJK UNIFIED IDEOGRAPH - 0xE9B9: 0x9B96, //CJK UNIFIED IDEOGRAPH - 0xE9BA: 0x9B97, //CJK UNIFIED IDEOGRAPH - 0xE9BB: 0x9B9F, //CJK UNIFIED IDEOGRAPH - 0xE9BC: 0x9BA0, //CJK UNIFIED IDEOGRAPH - 0xE9BD: 0x9BA8, //CJK UNIFIED IDEOGRAPH - 0xE9BE: 0x9BB4, //CJK UNIFIED IDEOGRAPH - 0xE9BF: 0x9BC0, //CJK UNIFIED IDEOGRAPH - 0xE9C0: 0x9BCA, //CJK UNIFIED IDEOGRAPH - 0xE9C1: 0x9BB9, //CJK UNIFIED IDEOGRAPH - 0xE9C2: 0x9BC6, //CJK UNIFIED IDEOGRAPH - 0xE9C3: 0x9BCF, //CJK UNIFIED IDEOGRAPH - 0xE9C4: 0x9BD1, //CJK UNIFIED IDEOGRAPH - 0xE9C5: 0x9BD2, //CJK UNIFIED IDEOGRAPH - 0xE9C6: 0x9BE3, //CJK UNIFIED IDEOGRAPH - 0xE9C7: 0x9BE2, //CJK UNIFIED IDEOGRAPH - 0xE9C8: 0x9BE4, //CJK UNIFIED IDEOGRAPH - 0xE9C9: 0x9BD4, //CJK UNIFIED IDEOGRAPH - 0xE9CA: 0x9BE1, //CJK UNIFIED IDEOGRAPH - 0xE9CB: 0x9C3A, //CJK UNIFIED IDEOGRAPH - 0xE9CC: 0x9BF2, //CJK UNIFIED IDEOGRAPH - 0xE9CD: 0x9BF1, //CJK UNIFIED IDEOGRAPH - 0xE9CE: 0x9BF0, //CJK UNIFIED IDEOGRAPH - 0xE9CF: 0x9C15, //CJK UNIFIED IDEOGRAPH - 0xE9D0: 0x9C14, //CJK UNIFIED IDEOGRAPH - 0xE9D1: 0x9C09, //CJK UNIFIED IDEOGRAPH - 0xE9D2: 0x9C13, //CJK UNIFIED IDEOGRAPH - 0xE9D3: 0x9C0C, //CJK UNIFIED IDEOGRAPH - 0xE9D4: 0x9C06, //CJK UNIFIED IDEOGRAPH - 0xE9D5: 0x9C08, //CJK UNIFIED IDEOGRAPH - 0xE9D6: 0x9C12, //CJK UNIFIED IDEOGRAPH - 0xE9D7: 0x9C0A, //CJK UNIFIED IDEOGRAPH - 0xE9D8: 0x9C04, //CJK UNIFIED IDEOGRAPH - 0xE9D9: 0x9C2E, //CJK UNIFIED IDEOGRAPH - 0xE9DA: 0x9C1B, //CJK UNIFIED IDEOGRAPH - 0xE9DB: 0x9C25, //CJK UNIFIED IDEOGRAPH - 0xE9DC: 0x9C24, //CJK UNIFIED IDEOGRAPH - 0xE9DD: 0x9C21, //CJK UNIFIED IDEOGRAPH - 0xE9DE: 0x9C30, //CJK UNIFIED IDEOGRAPH - 0xE9DF: 0x9C47, //CJK UNIFIED IDEOGRAPH - 0xE9E0: 0x9C32, //CJK UNIFIED IDEOGRAPH - 0xE9E1: 0x9C46, //CJK UNIFIED IDEOGRAPH - 0xE9E2: 0x9C3E, //CJK UNIFIED IDEOGRAPH - 0xE9E3: 0x9C5A, //CJK UNIFIED IDEOGRAPH - 0xE9E4: 0x9C60, //CJK UNIFIED IDEOGRAPH - 0xE9E5: 0x9C67, //CJK UNIFIED IDEOGRAPH - 0xE9E6: 0x9C76, //CJK UNIFIED IDEOGRAPH - 0xE9E7: 0x9C78, //CJK UNIFIED IDEOGRAPH - 0xE9E8: 0x9CE7, //CJK UNIFIED IDEOGRAPH - 0xE9E9: 0x9CEC, //CJK UNIFIED IDEOGRAPH - 0xE9EA: 0x9CF0, //CJK UNIFIED IDEOGRAPH - 0xE9EB: 0x9D09, //CJK UNIFIED IDEOGRAPH - 0xE9EC: 0x9D08, //CJK UNIFIED IDEOGRAPH - 0xE9ED: 0x9CEB, //CJK UNIFIED IDEOGRAPH - 0xE9EE: 0x9D03, //CJK UNIFIED IDEOGRAPH - 0xE9EF: 0x9D06, //CJK UNIFIED IDEOGRAPH - 0xE9F0: 0x9D2A, //CJK UNIFIED IDEOGRAPH - 0xE9F1: 0x9D26, //CJK UNIFIED IDEOGRAPH - 0xE9F2: 0x9DAF, //CJK UNIFIED IDEOGRAPH - 0xE9F3: 0x9D23, //CJK UNIFIED IDEOGRAPH - 0xE9F4: 0x9D1F, //CJK UNIFIED IDEOGRAPH - 0xE9F5: 0x9D44, //CJK UNIFIED IDEOGRAPH - 0xE9F6: 0x9D15, //CJK UNIFIED IDEOGRAPH - 0xE9F7: 0x9D12, //CJK UNIFIED IDEOGRAPH - 0xE9F8: 0x9D41, //CJK UNIFIED IDEOGRAPH - 0xE9F9: 0x9D3F, //CJK UNIFIED IDEOGRAPH - 0xE9FA: 0x9D3E, //CJK UNIFIED IDEOGRAPH - 0xE9FB: 0x9D46, //CJK UNIFIED IDEOGRAPH - 0xE9FC: 0x9D48, //CJK UNIFIED IDEOGRAPH - 0xEA40: 0x9D5D, //CJK UNIFIED IDEOGRAPH - 0xEA41: 0x9D5E, //CJK UNIFIED IDEOGRAPH - 0xEA42: 0x9D64, //CJK UNIFIED IDEOGRAPH - 0xEA43: 0x9D51, //CJK UNIFIED IDEOGRAPH - 0xEA44: 0x9D50, //CJK UNIFIED IDEOGRAPH - 0xEA45: 0x9D59, //CJK UNIFIED IDEOGRAPH - 0xEA46: 0x9D72, //CJK UNIFIED IDEOGRAPH - 0xEA47: 0x9D89, //CJK UNIFIED IDEOGRAPH - 0xEA48: 0x9D87, //CJK UNIFIED IDEOGRAPH - 0xEA49: 0x9DAB, //CJK UNIFIED IDEOGRAPH - 0xEA4A: 0x9D6F, //CJK UNIFIED IDEOGRAPH - 0xEA4B: 0x9D7A, //CJK UNIFIED IDEOGRAPH - 0xEA4C: 0x9D9A, //CJK UNIFIED IDEOGRAPH - 0xEA4D: 0x9DA4, //CJK UNIFIED IDEOGRAPH - 0xEA4E: 0x9DA9, //CJK UNIFIED IDEOGRAPH - 0xEA4F: 0x9DB2, //CJK UNIFIED IDEOGRAPH - 0xEA50: 0x9DC4, //CJK UNIFIED IDEOGRAPH - 0xEA51: 0x9DC1, //CJK UNIFIED IDEOGRAPH - 0xEA52: 0x9DBB, //CJK UNIFIED IDEOGRAPH - 0xEA53: 0x9DB8, //CJK UNIFIED IDEOGRAPH - 0xEA54: 0x9DBA, //CJK UNIFIED IDEOGRAPH - 0xEA55: 0x9DC6, //CJK UNIFIED IDEOGRAPH - 0xEA56: 0x9DCF, //CJK UNIFIED IDEOGRAPH - 0xEA57: 0x9DC2, //CJK UNIFIED IDEOGRAPH - 0xEA58: 0x9DD9, //CJK UNIFIED IDEOGRAPH - 0xEA59: 0x9DD3, //CJK UNIFIED IDEOGRAPH - 0xEA5A: 0x9DF8, //CJK UNIFIED IDEOGRAPH - 0xEA5B: 0x9DE6, //CJK UNIFIED IDEOGRAPH - 0xEA5C: 0x9DED, //CJK UNIFIED IDEOGRAPH - 0xEA5D: 0x9DEF, //CJK UNIFIED IDEOGRAPH - 0xEA5E: 0x9DFD, //CJK UNIFIED IDEOGRAPH - 0xEA5F: 0x9E1A, //CJK UNIFIED IDEOGRAPH - 0xEA60: 0x9E1B, //CJK UNIFIED IDEOGRAPH - 0xEA61: 0x9E1E, //CJK UNIFIED IDEOGRAPH - 0xEA62: 0x9E75, //CJK UNIFIED IDEOGRAPH - 0xEA63: 0x9E79, //CJK UNIFIED IDEOGRAPH - 0xEA64: 0x9E7D, //CJK UNIFIED IDEOGRAPH - 0xEA65: 0x9E81, //CJK UNIFIED IDEOGRAPH - 0xEA66: 0x9E88, //CJK UNIFIED IDEOGRAPH - 0xEA67: 0x9E8B, //CJK UNIFIED IDEOGRAPH - 0xEA68: 0x9E8C, //CJK UNIFIED IDEOGRAPH - 0xEA69: 0x9E92, //CJK UNIFIED IDEOGRAPH - 0xEA6A: 0x9E95, //CJK UNIFIED IDEOGRAPH - 0xEA6B: 0x9E91, //CJK UNIFIED IDEOGRAPH - 0xEA6C: 0x9E9D, //CJK UNIFIED IDEOGRAPH - 0xEA6D: 0x9EA5, //CJK UNIFIED IDEOGRAPH - 0xEA6E: 0x9EA9, //CJK UNIFIED IDEOGRAPH - 0xEA6F: 0x9EB8, //CJK UNIFIED IDEOGRAPH - 0xEA70: 0x9EAA, //CJK UNIFIED IDEOGRAPH - 0xEA71: 0x9EAD, //CJK UNIFIED IDEOGRAPH - 0xEA72: 0x9761, //CJK UNIFIED IDEOGRAPH - 0xEA73: 0x9ECC, //CJK UNIFIED IDEOGRAPH - 0xEA74: 0x9ECE, //CJK UNIFIED IDEOGRAPH - 0xEA75: 0x9ECF, //CJK UNIFIED IDEOGRAPH - 0xEA76: 0x9ED0, //CJK UNIFIED IDEOGRAPH - 0xEA77: 0x9ED4, //CJK UNIFIED IDEOGRAPH - 0xEA78: 0x9EDC, //CJK UNIFIED IDEOGRAPH - 0xEA79: 0x9EDE, //CJK UNIFIED IDEOGRAPH - 0xEA7A: 0x9EDD, //CJK UNIFIED IDEOGRAPH - 0xEA7B: 0x9EE0, //CJK UNIFIED IDEOGRAPH - 0xEA7C: 0x9EE5, //CJK UNIFIED IDEOGRAPH - 0xEA7D: 0x9EE8, //CJK UNIFIED IDEOGRAPH - 0xEA7E: 0x9EEF, //CJK UNIFIED IDEOGRAPH - 0xEA80: 0x9EF4, //CJK UNIFIED IDEOGRAPH - 0xEA81: 0x9EF6, //CJK UNIFIED IDEOGRAPH - 0xEA82: 0x9EF7, //CJK UNIFIED IDEOGRAPH - 0xEA83: 0x9EF9, //CJK UNIFIED IDEOGRAPH - 0xEA84: 0x9EFB, //CJK UNIFIED IDEOGRAPH - 0xEA85: 0x9EFC, //CJK UNIFIED IDEOGRAPH - 0xEA86: 0x9EFD, //CJK UNIFIED IDEOGRAPH - 0xEA87: 0x9F07, //CJK UNIFIED IDEOGRAPH - 0xEA88: 0x9F08, //CJK UNIFIED IDEOGRAPH - 0xEA89: 0x76B7, //CJK UNIFIED IDEOGRAPH - 0xEA8A: 0x9F15, //CJK UNIFIED IDEOGRAPH - 0xEA8B: 0x9F21, //CJK UNIFIED IDEOGRAPH - 0xEA8C: 0x9F2C, //CJK UNIFIED IDEOGRAPH - 0xEA8D: 0x9F3E, //CJK UNIFIED IDEOGRAPH - 0xEA8E: 0x9F4A, //CJK UNIFIED IDEOGRAPH - 0xEA8F: 0x9F52, //CJK UNIFIED IDEOGRAPH - 0xEA90: 0x9F54, //CJK UNIFIED IDEOGRAPH - 0xEA91: 0x9F63, //CJK UNIFIED IDEOGRAPH - 0xEA92: 0x9F5F, //CJK UNIFIED IDEOGRAPH - 0xEA93: 0x9F60, //CJK UNIFIED IDEOGRAPH - 0xEA94: 0x9F61, //CJK UNIFIED IDEOGRAPH - 0xEA95: 0x9F66, //CJK UNIFIED IDEOGRAPH - 0xEA96: 0x9F67, //CJK UNIFIED IDEOGRAPH - 0xEA97: 0x9F6C, //CJK UNIFIED IDEOGRAPH - 0xEA98: 0x9F6A, //CJK UNIFIED IDEOGRAPH - 0xEA99: 0x9F77, //CJK UNIFIED IDEOGRAPH - 0xEA9A: 0x9F72, //CJK UNIFIED IDEOGRAPH - 0xEA9B: 0x9F76, //CJK UNIFIED IDEOGRAPH - 0xEA9C: 0x9F95, //CJK UNIFIED IDEOGRAPH - 0xEA9D: 0x9F9C, //CJK UNIFIED IDEOGRAPH - 0xEA9E: 0x9FA0, //CJK UNIFIED IDEOGRAPH - 0xEA9F: 0x582F, //CJK UNIFIED IDEOGRAPH - 0xEAA0: 0x69C7, //CJK UNIFIED IDEOGRAPH - 0xEAA1: 0x9059, //CJK UNIFIED IDEOGRAPH - 0xEAA2: 0x7464, //CJK UNIFIED IDEOGRAPH - 0xEAA3: 0x51DC, //CJK UNIFIED IDEOGRAPH - 0xEAA4: 0x7199, //CJK UNIFIED IDEOGRAPH - 0xED40: 0x7E8A, //CJK UNIFIED IDEOGRAPH - 0xED41: 0x891C, //CJK UNIFIED IDEOGRAPH - 0xED42: 0x9348, //CJK UNIFIED IDEOGRAPH - 0xED43: 0x9288, //CJK UNIFIED IDEOGRAPH - 0xED44: 0x84DC, //CJK UNIFIED IDEOGRAPH - 0xED45: 0x4FC9, //CJK UNIFIED IDEOGRAPH - 0xED46: 0x70BB, //CJK UNIFIED IDEOGRAPH - 0xED47: 0x6631, //CJK UNIFIED IDEOGRAPH - 0xED48: 0x68C8, //CJK UNIFIED IDEOGRAPH - 0xED49: 0x92F9, //CJK UNIFIED IDEOGRAPH - 0xED4A: 0x66FB, //CJK UNIFIED IDEOGRAPH - 0xED4B: 0x5F45, //CJK UNIFIED IDEOGRAPH - 0xED4C: 0x4E28, //CJK UNIFIED IDEOGRAPH - 0xED4D: 0x4EE1, //CJK UNIFIED IDEOGRAPH - 0xED4E: 0x4EFC, //CJK UNIFIED IDEOGRAPH - 0xED4F: 0x4F00, //CJK UNIFIED IDEOGRAPH - 0xED50: 0x4F03, //CJK UNIFIED IDEOGRAPH - 0xED51: 0x4F39, //CJK UNIFIED IDEOGRAPH - 0xED52: 0x4F56, //CJK UNIFIED IDEOGRAPH - 0xED53: 0x4F92, //CJK UNIFIED IDEOGRAPH - 0xED54: 0x4F8A, //CJK UNIFIED IDEOGRAPH - 0xED55: 0x4F9A, //CJK UNIFIED IDEOGRAPH - 0xED56: 0x4F94, //CJK UNIFIED IDEOGRAPH - 0xED57: 0x4FCD, //CJK UNIFIED IDEOGRAPH - 0xED58: 0x5040, //CJK UNIFIED IDEOGRAPH - 0xED59: 0x5022, //CJK UNIFIED IDEOGRAPH - 0xED5A: 0x4FFF, //CJK UNIFIED IDEOGRAPH - 0xED5B: 0x501E, //CJK UNIFIED IDEOGRAPH - 0xED5C: 0x5046, //CJK UNIFIED IDEOGRAPH - 0xED5D: 0x5070, //CJK UNIFIED IDEOGRAPH - 0xED5E: 0x5042, //CJK UNIFIED IDEOGRAPH - 0xED5F: 0x5094, //CJK UNIFIED IDEOGRAPH - 0xED60: 0x50F4, //CJK UNIFIED IDEOGRAPH - 0xED61: 0x50D8, //CJK UNIFIED IDEOGRAPH - 0xED62: 0x514A, //CJK UNIFIED IDEOGRAPH - 0xED63: 0x5164, //CJK UNIFIED IDEOGRAPH - 0xED64: 0x519D, //CJK UNIFIED IDEOGRAPH - 0xED65: 0x51BE, //CJK UNIFIED IDEOGRAPH - 0xED66: 0x51EC, //CJK UNIFIED IDEOGRAPH - 0xED67: 0x5215, //CJK UNIFIED IDEOGRAPH - 0xED68: 0x529C, //CJK UNIFIED IDEOGRAPH - 0xED69: 0x52A6, //CJK UNIFIED IDEOGRAPH - 0xED6A: 0x52C0, //CJK UNIFIED IDEOGRAPH - 0xED6B: 0x52DB, //CJK UNIFIED IDEOGRAPH - 0xED6C: 0x5300, //CJK UNIFIED IDEOGRAPH - 0xED6D: 0x5307, //CJK UNIFIED IDEOGRAPH - 0xED6E: 0x5324, //CJK UNIFIED IDEOGRAPH - 0xED6F: 0x5372, //CJK UNIFIED IDEOGRAPH - 0xED70: 0x5393, //CJK UNIFIED IDEOGRAPH - 0xED71: 0x53B2, //CJK UNIFIED IDEOGRAPH - 0xED72: 0x53DD, //CJK UNIFIED IDEOGRAPH - 0xED73: 0xFA0E, //CJK COMPATIBILITY IDEOGRAPH - 0xED74: 0x549C, //CJK UNIFIED IDEOGRAPH - 0xED75: 0x548A, //CJK UNIFIED IDEOGRAPH - 0xED76: 0x54A9, //CJK UNIFIED IDEOGRAPH - 0xED77: 0x54FF, //CJK UNIFIED IDEOGRAPH - 0xED78: 0x5586, //CJK UNIFIED IDEOGRAPH - 0xED79: 0x5759, //CJK UNIFIED IDEOGRAPH - 0xED7A: 0x5765, //CJK UNIFIED IDEOGRAPH - 0xED7B: 0x57AC, //CJK UNIFIED IDEOGRAPH - 0xED7C: 0x57C8, //CJK UNIFIED IDEOGRAPH - 0xED7D: 0x57C7, //CJK UNIFIED IDEOGRAPH - 0xED7E: 0xFA0F, //CJK COMPATIBILITY IDEOGRAPH - 0xED80: 0xFA10, //CJK COMPATIBILITY IDEOGRAPH - 0xED81: 0x589E, //CJK UNIFIED IDEOGRAPH - 0xED82: 0x58B2, //CJK UNIFIED IDEOGRAPH - 0xED83: 0x590B, //CJK UNIFIED IDEOGRAPH - 0xED84: 0x5953, //CJK UNIFIED IDEOGRAPH - 0xED85: 0x595B, //CJK UNIFIED IDEOGRAPH - 0xED86: 0x595D, //CJK UNIFIED IDEOGRAPH - 0xED87: 0x5963, //CJK UNIFIED IDEOGRAPH - 0xED88: 0x59A4, //CJK UNIFIED IDEOGRAPH - 0xED89: 0x59BA, //CJK UNIFIED IDEOGRAPH - 0xED8A: 0x5B56, //CJK UNIFIED IDEOGRAPH - 0xED8B: 0x5BC0, //CJK UNIFIED IDEOGRAPH - 0xED8C: 0x752F, //CJK UNIFIED IDEOGRAPH - 0xED8D: 0x5BD8, //CJK UNIFIED IDEOGRAPH - 0xED8E: 0x5BEC, //CJK UNIFIED IDEOGRAPH - 0xED8F: 0x5C1E, //CJK UNIFIED IDEOGRAPH - 0xED90: 0x5CA6, //CJK UNIFIED IDEOGRAPH - 0xED91: 0x5CBA, //CJK UNIFIED IDEOGRAPH - 0xED92: 0x5CF5, //CJK UNIFIED IDEOGRAPH - 0xED93: 0x5D27, //CJK UNIFIED IDEOGRAPH - 0xED94: 0x5D53, //CJK UNIFIED IDEOGRAPH - 0xED95: 0xFA11, //CJK COMPATIBILITY IDEOGRAPH - 0xED96: 0x5D42, //CJK UNIFIED IDEOGRAPH - 0xED97: 0x5D6D, //CJK UNIFIED IDEOGRAPH - 0xED98: 0x5DB8, //CJK UNIFIED IDEOGRAPH - 0xED99: 0x5DB9, //CJK UNIFIED IDEOGRAPH - 0xED9A: 0x5DD0, //CJK UNIFIED IDEOGRAPH - 0xED9B: 0x5F21, //CJK UNIFIED IDEOGRAPH - 0xED9C: 0x5F34, //CJK UNIFIED IDEOGRAPH - 0xED9D: 0x5F67, //CJK UNIFIED IDEOGRAPH - 0xED9E: 0x5FB7, //CJK UNIFIED IDEOGRAPH - 0xED9F: 0x5FDE, //CJK UNIFIED IDEOGRAPH - 0xEDA0: 0x605D, //CJK UNIFIED IDEOGRAPH - 0xEDA1: 0x6085, //CJK UNIFIED IDEOGRAPH - 0xEDA2: 0x608A, //CJK UNIFIED IDEOGRAPH - 0xEDA3: 0x60DE, //CJK UNIFIED IDEOGRAPH - 0xEDA4: 0x60D5, //CJK UNIFIED IDEOGRAPH - 0xEDA5: 0x6120, //CJK UNIFIED IDEOGRAPH - 0xEDA6: 0x60F2, //CJK UNIFIED IDEOGRAPH - 0xEDA7: 0x6111, //CJK UNIFIED IDEOGRAPH - 0xEDA8: 0x6137, //CJK UNIFIED IDEOGRAPH - 0xEDA9: 0x6130, //CJK UNIFIED IDEOGRAPH - 0xEDAA: 0x6198, //CJK UNIFIED IDEOGRAPH - 0xEDAB: 0x6213, //CJK UNIFIED IDEOGRAPH - 0xEDAC: 0x62A6, //CJK UNIFIED IDEOGRAPH - 0xEDAD: 0x63F5, //CJK UNIFIED IDEOGRAPH - 0xEDAE: 0x6460, //CJK UNIFIED IDEOGRAPH - 0xEDAF: 0x649D, //CJK UNIFIED IDEOGRAPH - 0xEDB0: 0x64CE, //CJK UNIFIED IDEOGRAPH - 0xEDB1: 0x654E, //CJK UNIFIED IDEOGRAPH - 0xEDB2: 0x6600, //CJK UNIFIED IDEOGRAPH - 0xEDB3: 0x6615, //CJK UNIFIED IDEOGRAPH - 0xEDB4: 0x663B, //CJK UNIFIED IDEOGRAPH - 0xEDB5: 0x6609, //CJK UNIFIED IDEOGRAPH - 0xEDB6: 0x662E, //CJK UNIFIED IDEOGRAPH - 0xEDB7: 0x661E, //CJK UNIFIED IDEOGRAPH - 0xEDB8: 0x6624, //CJK UNIFIED IDEOGRAPH - 0xEDB9: 0x6665, //CJK UNIFIED IDEOGRAPH - 0xEDBA: 0x6657, //CJK UNIFIED IDEOGRAPH - 0xEDBB: 0x6659, //CJK UNIFIED IDEOGRAPH - 0xEDBC: 0xFA12, //CJK COMPATIBILITY IDEOGRAPH - 0xEDBD: 0x6673, //CJK UNIFIED IDEOGRAPH - 0xEDBE: 0x6699, //CJK UNIFIED IDEOGRAPH - 0xEDBF: 0x66A0, //CJK UNIFIED IDEOGRAPH - 0xEDC0: 0x66B2, //CJK UNIFIED IDEOGRAPH - 0xEDC1: 0x66BF, //CJK UNIFIED IDEOGRAPH - 0xEDC2: 0x66FA, //CJK UNIFIED IDEOGRAPH - 0xEDC3: 0x670E, //CJK UNIFIED IDEOGRAPH - 0xEDC4: 0xF929, //CJK COMPATIBILITY IDEOGRAPH - 0xEDC5: 0x6766, //CJK UNIFIED IDEOGRAPH - 0xEDC6: 0x67BB, //CJK UNIFIED IDEOGRAPH - 0xEDC7: 0x6852, //CJK UNIFIED IDEOGRAPH - 0xEDC8: 0x67C0, //CJK UNIFIED IDEOGRAPH - 0xEDC9: 0x6801, //CJK UNIFIED IDEOGRAPH - 0xEDCA: 0x6844, //CJK UNIFIED IDEOGRAPH - 0xEDCB: 0x68CF, //CJK UNIFIED IDEOGRAPH - 0xEDCC: 0xFA13, //CJK COMPATIBILITY IDEOGRAPH - 0xEDCD: 0x6968, //CJK UNIFIED IDEOGRAPH - 0xEDCE: 0xFA14, //CJK COMPATIBILITY IDEOGRAPH - 0xEDCF: 0x6998, //CJK UNIFIED IDEOGRAPH - 0xEDD0: 0x69E2, //CJK UNIFIED IDEOGRAPH - 0xEDD1: 0x6A30, //CJK UNIFIED IDEOGRAPH - 0xEDD2: 0x6A6B, //CJK UNIFIED IDEOGRAPH - 0xEDD3: 0x6A46, //CJK UNIFIED IDEOGRAPH - 0xEDD4: 0x6A73, //CJK UNIFIED IDEOGRAPH - 0xEDD5: 0x6A7E, //CJK UNIFIED IDEOGRAPH - 0xEDD6: 0x6AE2, //CJK UNIFIED IDEOGRAPH - 0xEDD7: 0x6AE4, //CJK UNIFIED IDEOGRAPH - 0xEDD8: 0x6BD6, //CJK UNIFIED IDEOGRAPH - 0xEDD9: 0x6C3F, //CJK UNIFIED IDEOGRAPH - 0xEDDA: 0x6C5C, //CJK UNIFIED IDEOGRAPH - 0xEDDB: 0x6C86, //CJK UNIFIED IDEOGRAPH - 0xEDDC: 0x6C6F, //CJK UNIFIED IDEOGRAPH - 0xEDDD: 0x6CDA, //CJK UNIFIED IDEOGRAPH - 0xEDDE: 0x6D04, //CJK UNIFIED IDEOGRAPH - 0xEDDF: 0x6D87, //CJK UNIFIED IDEOGRAPH - 0xEDE0: 0x6D6F, //CJK UNIFIED IDEOGRAPH - 0xEDE1: 0x6D96, //CJK UNIFIED IDEOGRAPH - 0xEDE2: 0x6DAC, //CJK UNIFIED IDEOGRAPH - 0xEDE3: 0x6DCF, //CJK UNIFIED IDEOGRAPH - 0xEDE4: 0x6DF8, //CJK UNIFIED IDEOGRAPH - 0xEDE5: 0x6DF2, //CJK UNIFIED IDEOGRAPH - 0xEDE6: 0x6DFC, //CJK UNIFIED IDEOGRAPH - 0xEDE7: 0x6E39, //CJK UNIFIED IDEOGRAPH - 0xEDE8: 0x6E5C, //CJK UNIFIED IDEOGRAPH - 0xEDE9: 0x6E27, //CJK UNIFIED IDEOGRAPH - 0xEDEA: 0x6E3C, //CJK UNIFIED IDEOGRAPH - 0xEDEB: 0x6EBF, //CJK UNIFIED IDEOGRAPH - 0xEDEC: 0x6F88, //CJK UNIFIED IDEOGRAPH - 0xEDED: 0x6FB5, //CJK UNIFIED IDEOGRAPH - 0xEDEE: 0x6FF5, //CJK UNIFIED IDEOGRAPH - 0xEDEF: 0x7005, //CJK UNIFIED IDEOGRAPH - 0xEDF0: 0x7007, //CJK UNIFIED IDEOGRAPH - 0xEDF1: 0x7028, //CJK UNIFIED IDEOGRAPH - 0xEDF2: 0x7085, //CJK UNIFIED IDEOGRAPH - 0xEDF3: 0x70AB, //CJK UNIFIED IDEOGRAPH - 0xEDF4: 0x710F, //CJK UNIFIED IDEOGRAPH - 0xEDF5: 0x7104, //CJK UNIFIED IDEOGRAPH - 0xEDF6: 0x715C, //CJK UNIFIED IDEOGRAPH - 0xEDF7: 0x7146, //CJK UNIFIED IDEOGRAPH - 0xEDF8: 0x7147, //CJK UNIFIED IDEOGRAPH - 0xEDF9: 0xFA15, //CJK COMPATIBILITY IDEOGRAPH - 0xEDFA: 0x71C1, //CJK UNIFIED IDEOGRAPH - 0xEDFB: 0x71FE, //CJK UNIFIED IDEOGRAPH - 0xEDFC: 0x72B1, //CJK UNIFIED IDEOGRAPH - 0xEE40: 0x72BE, //CJK UNIFIED IDEOGRAPH - 0xEE41: 0x7324, //CJK UNIFIED IDEOGRAPH - 0xEE42: 0xFA16, //CJK COMPATIBILITY IDEOGRAPH - 0xEE43: 0x7377, //CJK UNIFIED IDEOGRAPH - 0xEE44: 0x73BD, //CJK UNIFIED IDEOGRAPH - 0xEE45: 0x73C9, //CJK UNIFIED IDEOGRAPH - 0xEE46: 0x73D6, //CJK UNIFIED IDEOGRAPH - 0xEE47: 0x73E3, //CJK UNIFIED IDEOGRAPH - 0xEE48: 0x73D2, //CJK UNIFIED IDEOGRAPH - 0xEE49: 0x7407, //CJK UNIFIED IDEOGRAPH - 0xEE4A: 0x73F5, //CJK UNIFIED IDEOGRAPH - 0xEE4B: 0x7426, //CJK UNIFIED IDEOGRAPH - 0xEE4C: 0x742A, //CJK UNIFIED IDEOGRAPH - 0xEE4D: 0x7429, //CJK UNIFIED IDEOGRAPH - 0xEE4E: 0x742E, //CJK UNIFIED IDEOGRAPH - 0xEE4F: 0x7462, //CJK UNIFIED IDEOGRAPH - 0xEE50: 0x7489, //CJK UNIFIED IDEOGRAPH - 0xEE51: 0x749F, //CJK UNIFIED IDEOGRAPH - 0xEE52: 0x7501, //CJK UNIFIED IDEOGRAPH - 0xEE53: 0x756F, //CJK UNIFIED IDEOGRAPH - 0xEE54: 0x7682, //CJK UNIFIED IDEOGRAPH - 0xEE55: 0x769C, //CJK UNIFIED IDEOGRAPH - 0xEE56: 0x769E, //CJK UNIFIED IDEOGRAPH - 0xEE57: 0x769B, //CJK UNIFIED IDEOGRAPH - 0xEE58: 0x76A6, //CJK UNIFIED IDEOGRAPH - 0xEE59: 0xFA17, //CJK COMPATIBILITY IDEOGRAPH - 0xEE5A: 0x7746, //CJK UNIFIED IDEOGRAPH - 0xEE5B: 0x52AF, //CJK UNIFIED IDEOGRAPH - 0xEE5C: 0x7821, //CJK UNIFIED IDEOGRAPH - 0xEE5D: 0x784E, //CJK UNIFIED IDEOGRAPH - 0xEE5E: 0x7864, //CJK UNIFIED IDEOGRAPH - 0xEE5F: 0x787A, //CJK UNIFIED IDEOGRAPH - 0xEE60: 0x7930, //CJK UNIFIED IDEOGRAPH - 0xEE61: 0xFA18, //CJK COMPATIBILITY IDEOGRAPH - 0xEE62: 0xFA19, //CJK COMPATIBILITY IDEOGRAPH - 0xEE63: 0xFA1A, //CJK COMPATIBILITY IDEOGRAPH - 0xEE64: 0x7994, //CJK UNIFIED IDEOGRAPH - 0xEE65: 0xFA1B, //CJK COMPATIBILITY IDEOGRAPH - 0xEE66: 0x799B, //CJK UNIFIED IDEOGRAPH - 0xEE67: 0x7AD1, //CJK UNIFIED IDEOGRAPH - 0xEE68: 0x7AE7, //CJK UNIFIED IDEOGRAPH - 0xEE69: 0xFA1C, //CJK COMPATIBILITY IDEOGRAPH - 0xEE6A: 0x7AEB, //CJK UNIFIED IDEOGRAPH - 0xEE6B: 0x7B9E, //CJK UNIFIED IDEOGRAPH - 0xEE6C: 0xFA1D, //CJK COMPATIBILITY IDEOGRAPH - 0xEE6D: 0x7D48, //CJK UNIFIED IDEOGRAPH - 0xEE6E: 0x7D5C, //CJK UNIFIED IDEOGRAPH - 0xEE6F: 0x7DB7, //CJK UNIFIED IDEOGRAPH - 0xEE70: 0x7DA0, //CJK UNIFIED IDEOGRAPH - 0xEE71: 0x7DD6, //CJK UNIFIED IDEOGRAPH - 0xEE72: 0x7E52, //CJK UNIFIED IDEOGRAPH - 0xEE73: 0x7F47, //CJK UNIFIED IDEOGRAPH - 0xEE74: 0x7FA1, //CJK UNIFIED IDEOGRAPH - 0xEE75: 0xFA1E, //CJK COMPATIBILITY IDEOGRAPH - 0xEE76: 0x8301, //CJK UNIFIED IDEOGRAPH - 0xEE77: 0x8362, //CJK UNIFIED IDEOGRAPH - 0xEE78: 0x837F, //CJK UNIFIED IDEOGRAPH - 0xEE79: 0x83C7, //CJK UNIFIED IDEOGRAPH - 0xEE7A: 0x83F6, //CJK UNIFIED IDEOGRAPH - 0xEE7B: 0x8448, //CJK UNIFIED IDEOGRAPH - 0xEE7C: 0x84B4, //CJK UNIFIED IDEOGRAPH - 0xEE7D: 0x8553, //CJK UNIFIED IDEOGRAPH - 0xEE7E: 0x8559, //CJK UNIFIED IDEOGRAPH - 0xEE80: 0x856B, //CJK UNIFIED IDEOGRAPH - 0xEE81: 0xFA1F, //CJK COMPATIBILITY IDEOGRAPH - 0xEE82: 0x85B0, //CJK UNIFIED IDEOGRAPH - 0xEE83: 0xFA20, //CJK COMPATIBILITY IDEOGRAPH - 0xEE84: 0xFA21, //CJK COMPATIBILITY IDEOGRAPH - 0xEE85: 0x8807, //CJK UNIFIED IDEOGRAPH - 0xEE86: 0x88F5, //CJK UNIFIED IDEOGRAPH - 0xEE87: 0x8A12, //CJK UNIFIED IDEOGRAPH - 0xEE88: 0x8A37, //CJK UNIFIED IDEOGRAPH - 0xEE89: 0x8A79, //CJK UNIFIED IDEOGRAPH - 0xEE8A: 0x8AA7, //CJK UNIFIED IDEOGRAPH - 0xEE8B: 0x8ABE, //CJK UNIFIED IDEOGRAPH - 0xEE8C: 0x8ADF, //CJK UNIFIED IDEOGRAPH - 0xEE8D: 0xFA22, //CJK COMPATIBILITY IDEOGRAPH - 0xEE8E: 0x8AF6, //CJK UNIFIED IDEOGRAPH - 0xEE8F: 0x8B53, //CJK UNIFIED IDEOGRAPH - 0xEE90: 0x8B7F, //CJK UNIFIED IDEOGRAPH - 0xEE91: 0x8CF0, //CJK UNIFIED IDEOGRAPH - 0xEE92: 0x8CF4, //CJK UNIFIED IDEOGRAPH - 0xEE93: 0x8D12, //CJK UNIFIED IDEOGRAPH - 0xEE94: 0x8D76, //CJK UNIFIED IDEOGRAPH - 0xEE95: 0xFA23, //CJK COMPATIBILITY IDEOGRAPH - 0xEE96: 0x8ECF, //CJK UNIFIED IDEOGRAPH - 0xEE97: 0xFA24, //CJK COMPATIBILITY IDEOGRAPH - 0xEE98: 0xFA25, //CJK COMPATIBILITY IDEOGRAPH - 0xEE99: 0x9067, //CJK UNIFIED IDEOGRAPH - 0xEE9A: 0x90DE, //CJK UNIFIED IDEOGRAPH - 0xEE9B: 0xFA26, //CJK COMPATIBILITY IDEOGRAPH - 0xEE9C: 0x9115, //CJK UNIFIED IDEOGRAPH - 0xEE9D: 0x9127, //CJK UNIFIED IDEOGRAPH - 0xEE9E: 0x91DA, //CJK UNIFIED IDEOGRAPH - 0xEE9F: 0x91D7, //CJK UNIFIED IDEOGRAPH - 0xEEA0: 0x91DE, //CJK UNIFIED IDEOGRAPH - 0xEEA1: 0x91ED, //CJK UNIFIED IDEOGRAPH - 0xEEA2: 0x91EE, //CJK UNIFIED IDEOGRAPH - 0xEEA3: 0x91E4, //CJK UNIFIED IDEOGRAPH - 0xEEA4: 0x91E5, //CJK UNIFIED IDEOGRAPH - 0xEEA5: 0x9206, //CJK UNIFIED IDEOGRAPH - 0xEEA6: 0x9210, //CJK UNIFIED IDEOGRAPH - 0xEEA7: 0x920A, //CJK UNIFIED IDEOGRAPH - 0xEEA8: 0x923A, //CJK UNIFIED IDEOGRAPH - 0xEEA9: 0x9240, //CJK UNIFIED IDEOGRAPH - 0xEEAA: 0x923C, //CJK UNIFIED IDEOGRAPH - 0xEEAB: 0x924E, //CJK UNIFIED IDEOGRAPH - 0xEEAC: 0x9259, //CJK UNIFIED IDEOGRAPH - 0xEEAD: 0x9251, //CJK UNIFIED IDEOGRAPH - 0xEEAE: 0x9239, //CJK UNIFIED IDEOGRAPH - 0xEEAF: 0x9267, //CJK UNIFIED IDEOGRAPH - 0xEEB0: 0x92A7, //CJK UNIFIED IDEOGRAPH - 0xEEB1: 0x9277, //CJK UNIFIED IDEOGRAPH - 0xEEB2: 0x9278, //CJK UNIFIED IDEOGRAPH - 0xEEB3: 0x92E7, //CJK UNIFIED IDEOGRAPH - 0xEEB4: 0x92D7, //CJK UNIFIED IDEOGRAPH - 0xEEB5: 0x92D9, //CJK UNIFIED IDEOGRAPH - 0xEEB6: 0x92D0, //CJK UNIFIED IDEOGRAPH - 0xEEB7: 0xFA27, //CJK COMPATIBILITY IDEOGRAPH - 0xEEB8: 0x92D5, //CJK UNIFIED IDEOGRAPH - 0xEEB9: 0x92E0, //CJK UNIFIED IDEOGRAPH - 0xEEBA: 0x92D3, //CJK UNIFIED IDEOGRAPH - 0xEEBB: 0x9325, //CJK UNIFIED IDEOGRAPH - 0xEEBC: 0x9321, //CJK UNIFIED IDEOGRAPH - 0xEEBD: 0x92FB, //CJK UNIFIED IDEOGRAPH - 0xEEBE: 0xFA28, //CJK COMPATIBILITY IDEOGRAPH - 0xEEBF: 0x931E, //CJK UNIFIED IDEOGRAPH - 0xEEC0: 0x92FF, //CJK UNIFIED IDEOGRAPH - 0xEEC1: 0x931D, //CJK UNIFIED IDEOGRAPH - 0xEEC2: 0x9302, //CJK UNIFIED IDEOGRAPH - 0xEEC3: 0x9370, //CJK UNIFIED IDEOGRAPH - 0xEEC4: 0x9357, //CJK UNIFIED IDEOGRAPH - 0xEEC5: 0x93A4, //CJK UNIFIED IDEOGRAPH - 0xEEC6: 0x93C6, //CJK UNIFIED IDEOGRAPH - 0xEEC7: 0x93DE, //CJK UNIFIED IDEOGRAPH - 0xEEC8: 0x93F8, //CJK UNIFIED IDEOGRAPH - 0xEEC9: 0x9431, //CJK UNIFIED IDEOGRAPH - 0xEECA: 0x9445, //CJK UNIFIED IDEOGRAPH - 0xEECB: 0x9448, //CJK UNIFIED IDEOGRAPH - 0xEECC: 0x9592, //CJK UNIFIED IDEOGRAPH - 0xEECD: 0xF9DC, //CJK COMPATIBILITY IDEOGRAPH - 0xEECE: 0xFA29, //CJK COMPATIBILITY IDEOGRAPH - 0xEECF: 0x969D, //CJK UNIFIED IDEOGRAPH - 0xEED0: 0x96AF, //CJK UNIFIED IDEOGRAPH - 0xEED1: 0x9733, //CJK UNIFIED IDEOGRAPH - 0xEED2: 0x973B, //CJK UNIFIED IDEOGRAPH - 0xEED3: 0x9743, //CJK UNIFIED IDEOGRAPH - 0xEED4: 0x974D, //CJK UNIFIED IDEOGRAPH - 0xEED5: 0x974F, //CJK UNIFIED IDEOGRAPH - 0xEED6: 0x9751, //CJK UNIFIED IDEOGRAPH - 0xEED7: 0x9755, //CJK UNIFIED IDEOGRAPH - 0xEED8: 0x9857, //CJK UNIFIED IDEOGRAPH - 0xEED9: 0x9865, //CJK UNIFIED IDEOGRAPH - 0xEEDA: 0xFA2A, //CJK COMPATIBILITY IDEOGRAPH - 0xEEDB: 0xFA2B, //CJK COMPATIBILITY IDEOGRAPH - 0xEEDC: 0x9927, //CJK UNIFIED IDEOGRAPH - 0xEEDD: 0xFA2C, //CJK COMPATIBILITY IDEOGRAPH - 0xEEDE: 0x999E, //CJK UNIFIED IDEOGRAPH - 0xEEDF: 0x9A4E, //CJK UNIFIED IDEOGRAPH - 0xEEE0: 0x9AD9, //CJK UNIFIED IDEOGRAPH - 0xEEE1: 0x9ADC, //CJK UNIFIED IDEOGRAPH - 0xEEE2: 0x9B75, //CJK UNIFIED IDEOGRAPH - 0xEEE3: 0x9B72, //CJK UNIFIED IDEOGRAPH - 0xEEE4: 0x9B8F, //CJK UNIFIED IDEOGRAPH - 0xEEE5: 0x9BB1, //CJK UNIFIED IDEOGRAPH - 0xEEE6: 0x9BBB, //CJK UNIFIED IDEOGRAPH - 0xEEE7: 0x9C00, //CJK UNIFIED IDEOGRAPH - 0xEEE8: 0x9D70, //CJK UNIFIED IDEOGRAPH - 0xEEE9: 0x9D6B, //CJK UNIFIED IDEOGRAPH - 0xEEEA: 0xFA2D, //CJK COMPATIBILITY IDEOGRAPH - 0xEEEB: 0x9E19, //CJK UNIFIED IDEOGRAPH - 0xEEEC: 0x9ED1, //CJK UNIFIED IDEOGRAPH - 0xEEEF: 0x2170, //SMALL ROMAN NUMERAL ONE - 0xEEF0: 0x2171, //SMALL ROMAN NUMERAL TWO - 0xEEF1: 0x2172, //SMALL ROMAN NUMERAL THREE - 0xEEF2: 0x2173, //SMALL ROMAN NUMERAL FOUR - 0xEEF3: 0x2174, //SMALL ROMAN NUMERAL FIVE - 0xEEF4: 0x2175, //SMALL ROMAN NUMERAL SIX - 0xEEF5: 0x2176, //SMALL ROMAN NUMERAL SEVEN - 0xEEF6: 0x2177, //SMALL ROMAN NUMERAL EIGHT - 0xEEF7: 0x2178, //SMALL ROMAN NUMERAL NINE - 0xEEF8: 0x2179, //SMALL ROMAN NUMERAL TEN - 0xEEF9: 0xFFE2, //FULLWIDTH NOT SIGN - 0xEEFA: 0xFFE4, //FULLWIDTH BROKEN BAR - 0xEEFB: 0xFF07, //FULLWIDTH APOSTROPHE - 0xEEFC: 0xFF02, //FULLWIDTH QUOTATION MARK - 0xFA40: 0x2170, //SMALL ROMAN NUMERAL ONE - 0xFA41: 0x2171, //SMALL ROMAN NUMERAL TWO - 0xFA42: 0x2172, //SMALL ROMAN NUMERAL THREE - 0xFA43: 0x2173, //SMALL ROMAN NUMERAL FOUR - 0xFA44: 0x2174, //SMALL ROMAN NUMERAL FIVE - 0xFA45: 0x2175, //SMALL ROMAN NUMERAL SIX - 0xFA46: 0x2176, //SMALL ROMAN NUMERAL SEVEN - 0xFA47: 0x2177, //SMALL ROMAN NUMERAL EIGHT - 0xFA48: 0x2178, //SMALL ROMAN NUMERAL NINE - 0xFA49: 0x2179, //SMALL ROMAN NUMERAL TEN - 0xFA4A: 0x2160, //ROMAN NUMERAL ONE - 0xFA4B: 0x2161, //ROMAN NUMERAL TWO - 0xFA4C: 0x2162, //ROMAN NUMERAL THREE - 0xFA4D: 0x2163, //ROMAN NUMERAL FOUR - 0xFA4E: 0x2164, //ROMAN NUMERAL FIVE - 0xFA4F: 0x2165, //ROMAN NUMERAL SIX - 0xFA50: 0x2166, //ROMAN NUMERAL SEVEN - 0xFA51: 0x2167, //ROMAN NUMERAL EIGHT - 0xFA52: 0x2168, //ROMAN NUMERAL NINE - 0xFA53: 0x2169, //ROMAN NUMERAL TEN - 0xFA54: 0xFFE2, //FULLWIDTH NOT SIGN - 0xFA55: 0xFFE4, //FULLWIDTH BROKEN BAR - 0xFA56: 0xFF07, //FULLWIDTH APOSTROPHE - 0xFA57: 0xFF02, //FULLWIDTH QUOTATION MARK - 0xFA58: 0x3231, //PARENTHESIZED IDEOGRAPH STOCK - 0xFA59: 0x2116, //NUMERO SIGN - 0xFA5A: 0x2121, //TELEPHONE SIGN - 0xFA5B: 0x2235, //BECAUSE - 0xFA5C: 0x7E8A, //CJK UNIFIED IDEOGRAPH - 0xFA5D: 0x891C, //CJK UNIFIED IDEOGRAPH - 0xFA5E: 0x9348, //CJK UNIFIED IDEOGRAPH - 0xFA5F: 0x9288, //CJK UNIFIED IDEOGRAPH - 0xFA60: 0x84DC, //CJK UNIFIED IDEOGRAPH - 0xFA61: 0x4FC9, //CJK UNIFIED IDEOGRAPH - 0xFA62: 0x70BB, //CJK UNIFIED IDEOGRAPH - 0xFA63: 0x6631, //CJK UNIFIED IDEOGRAPH - 0xFA64: 0x68C8, //CJK UNIFIED IDEOGRAPH - 0xFA65: 0x92F9, //CJK UNIFIED IDEOGRAPH - 0xFA66: 0x66FB, //CJK UNIFIED IDEOGRAPH - 0xFA67: 0x5F45, //CJK UNIFIED IDEOGRAPH - 0xFA68: 0x4E28, //CJK UNIFIED IDEOGRAPH - 0xFA69: 0x4EE1, //CJK UNIFIED IDEOGRAPH - 0xFA6A: 0x4EFC, //CJK UNIFIED IDEOGRAPH - 0xFA6B: 0x4F00, //CJK UNIFIED IDEOGRAPH - 0xFA6C: 0x4F03, //CJK UNIFIED IDEOGRAPH - 0xFA6D: 0x4F39, //CJK UNIFIED IDEOGRAPH - 0xFA6E: 0x4F56, //CJK UNIFIED IDEOGRAPH - 0xFA6F: 0x4F92, //CJK UNIFIED IDEOGRAPH - 0xFA70: 0x4F8A, //CJK UNIFIED IDEOGRAPH - 0xFA71: 0x4F9A, //CJK UNIFIED IDEOGRAPH - 0xFA72: 0x4F94, //CJK UNIFIED IDEOGRAPH - 0xFA73: 0x4FCD, //CJK UNIFIED IDEOGRAPH - 0xFA74: 0x5040, //CJK UNIFIED IDEOGRAPH - 0xFA75: 0x5022, //CJK UNIFIED IDEOGRAPH - 0xFA76: 0x4FFF, //CJK UNIFIED IDEOGRAPH - 0xFA77: 0x501E, //CJK UNIFIED IDEOGRAPH - 0xFA78: 0x5046, //CJK UNIFIED IDEOGRAPH - 0xFA79: 0x5070, //CJK UNIFIED IDEOGRAPH - 0xFA7A: 0x5042, //CJK UNIFIED IDEOGRAPH - 0xFA7B: 0x5094, //CJK UNIFIED IDEOGRAPH - 0xFA7C: 0x50F4, //CJK UNIFIED IDEOGRAPH - 0xFA7D: 0x50D8, //CJK UNIFIED IDEOGRAPH - 0xFA7E: 0x514A, //CJK UNIFIED IDEOGRAPH - 0xFA80: 0x5164, //CJK UNIFIED IDEOGRAPH - 0xFA81: 0x519D, //CJK UNIFIED IDEOGRAPH - 0xFA82: 0x51BE, //CJK UNIFIED IDEOGRAPH - 0xFA83: 0x51EC, //CJK UNIFIED IDEOGRAPH - 0xFA84: 0x5215, //CJK UNIFIED IDEOGRAPH - 0xFA85: 0x529C, //CJK UNIFIED IDEOGRAPH - 0xFA86: 0x52A6, //CJK UNIFIED IDEOGRAPH - 0xFA87: 0x52C0, //CJK UNIFIED IDEOGRAPH - 0xFA88: 0x52DB, //CJK UNIFIED IDEOGRAPH - 0xFA89: 0x5300, //CJK UNIFIED IDEOGRAPH - 0xFA8A: 0x5307, //CJK UNIFIED IDEOGRAPH - 0xFA8B: 0x5324, //CJK UNIFIED IDEOGRAPH - 0xFA8C: 0x5372, //CJK UNIFIED IDEOGRAPH - 0xFA8D: 0x5393, //CJK UNIFIED IDEOGRAPH - 0xFA8E: 0x53B2, //CJK UNIFIED IDEOGRAPH - 0xFA8F: 0x53DD, //CJK UNIFIED IDEOGRAPH - 0xFA90: 0xFA0E, //CJK COMPATIBILITY IDEOGRAPH - 0xFA91: 0x549C, //CJK UNIFIED IDEOGRAPH - 0xFA92: 0x548A, //CJK UNIFIED IDEOGRAPH - 0xFA93: 0x54A9, //CJK UNIFIED IDEOGRAPH - 0xFA94: 0x54FF, //CJK UNIFIED IDEOGRAPH - 0xFA95: 0x5586, //CJK UNIFIED IDEOGRAPH - 0xFA96: 0x5759, //CJK UNIFIED IDEOGRAPH - 0xFA97: 0x5765, //CJK UNIFIED IDEOGRAPH - 0xFA98: 0x57AC, //CJK UNIFIED IDEOGRAPH - 0xFA99: 0x57C8, //CJK UNIFIED IDEOGRAPH - 0xFA9A: 0x57C7, //CJK UNIFIED IDEOGRAPH - 0xFA9B: 0xFA0F, //CJK COMPATIBILITY IDEOGRAPH - 0xFA9C: 0xFA10, //CJK COMPATIBILITY IDEOGRAPH - 0xFA9D: 0x589E, //CJK UNIFIED IDEOGRAPH - 0xFA9E: 0x58B2, //CJK UNIFIED IDEOGRAPH - 0xFA9F: 0x590B, //CJK UNIFIED IDEOGRAPH - 0xFAA0: 0x5953, //CJK UNIFIED IDEOGRAPH - 0xFAA1: 0x595B, //CJK UNIFIED IDEOGRAPH - 0xFAA2: 0x595D, //CJK UNIFIED IDEOGRAPH - 0xFAA3: 0x5963, //CJK UNIFIED IDEOGRAPH - 0xFAA4: 0x59A4, //CJK UNIFIED IDEOGRAPH - 0xFAA5: 0x59BA, //CJK UNIFIED IDEOGRAPH - 0xFAA6: 0x5B56, //CJK UNIFIED IDEOGRAPH - 0xFAA7: 0x5BC0, //CJK UNIFIED IDEOGRAPH - 0xFAA8: 0x752F, //CJK UNIFIED IDEOGRAPH - 0xFAA9: 0x5BD8, //CJK UNIFIED IDEOGRAPH - 0xFAAA: 0x5BEC, //CJK UNIFIED IDEOGRAPH - 0xFAAB: 0x5C1E, //CJK UNIFIED IDEOGRAPH - 0xFAAC: 0x5CA6, //CJK UNIFIED IDEOGRAPH - 0xFAAD: 0x5CBA, //CJK UNIFIED IDEOGRAPH - 0xFAAE: 0x5CF5, //CJK UNIFIED IDEOGRAPH - 0xFAAF: 0x5D27, //CJK UNIFIED IDEOGRAPH - 0xFAB0: 0x5D53, //CJK UNIFIED IDEOGRAPH - 0xFAB1: 0xFA11, //CJK COMPATIBILITY IDEOGRAPH - 0xFAB2: 0x5D42, //CJK UNIFIED IDEOGRAPH - 0xFAB3: 0x5D6D, //CJK UNIFIED IDEOGRAPH - 0xFAB4: 0x5DB8, //CJK UNIFIED IDEOGRAPH - 0xFAB5: 0x5DB9, //CJK UNIFIED IDEOGRAPH - 0xFAB6: 0x5DD0, //CJK UNIFIED IDEOGRAPH - 0xFAB7: 0x5F21, //CJK UNIFIED IDEOGRAPH - 0xFAB8: 0x5F34, //CJK UNIFIED IDEOGRAPH - 0xFAB9: 0x5F67, //CJK UNIFIED IDEOGRAPH - 0xFABA: 0x5FB7, //CJK UNIFIED IDEOGRAPH - 0xFABB: 0x5FDE, //CJK UNIFIED IDEOGRAPH - 0xFABC: 0x605D, //CJK UNIFIED IDEOGRAPH - 0xFABD: 0x6085, //CJK UNIFIED IDEOGRAPH - 0xFABE: 0x608A, //CJK UNIFIED IDEOGRAPH - 0xFABF: 0x60DE, //CJK UNIFIED IDEOGRAPH - 0xFAC0: 0x60D5, //CJK UNIFIED IDEOGRAPH - 0xFAC1: 0x6120, //CJK UNIFIED IDEOGRAPH - 0xFAC2: 0x60F2, //CJK UNIFIED IDEOGRAPH - 0xFAC3: 0x6111, //CJK UNIFIED IDEOGRAPH - 0xFAC4: 0x6137, //CJK UNIFIED IDEOGRAPH - 0xFAC5: 0x6130, //CJK UNIFIED IDEOGRAPH - 0xFAC6: 0x6198, //CJK UNIFIED IDEOGRAPH - 0xFAC7: 0x6213, //CJK UNIFIED IDEOGRAPH - 0xFAC8: 0x62A6, //CJK UNIFIED IDEOGRAPH - 0xFAC9: 0x63F5, //CJK UNIFIED IDEOGRAPH - 0xFACA: 0x6460, //CJK UNIFIED IDEOGRAPH - 0xFACB: 0x649D, //CJK UNIFIED IDEOGRAPH - 0xFACC: 0x64CE, //CJK UNIFIED IDEOGRAPH - 0xFACD: 0x654E, //CJK UNIFIED IDEOGRAPH - 0xFACE: 0x6600, //CJK UNIFIED IDEOGRAPH - 0xFACF: 0x6615, //CJK UNIFIED IDEOGRAPH - 0xFAD0: 0x663B, //CJK UNIFIED IDEOGRAPH - 0xFAD1: 0x6609, //CJK UNIFIED IDEOGRAPH - 0xFAD2: 0x662E, //CJK UNIFIED IDEOGRAPH - 0xFAD3: 0x661E, //CJK UNIFIED IDEOGRAPH - 0xFAD4: 0x6624, //CJK UNIFIED IDEOGRAPH - 0xFAD5: 0x6665, //CJK UNIFIED IDEOGRAPH - 0xFAD6: 0x6657, //CJK UNIFIED IDEOGRAPH - 0xFAD7: 0x6659, //CJK UNIFIED IDEOGRAPH - 0xFAD8: 0xFA12, //CJK COMPATIBILITY IDEOGRAPH - 0xFAD9: 0x6673, //CJK UNIFIED IDEOGRAPH - 0xFADA: 0x6699, //CJK UNIFIED IDEOGRAPH - 0xFADB: 0x66A0, //CJK UNIFIED IDEOGRAPH - 0xFADC: 0x66B2, //CJK UNIFIED IDEOGRAPH - 0xFADD: 0x66BF, //CJK UNIFIED IDEOGRAPH - 0xFADE: 0x66FA, //CJK UNIFIED IDEOGRAPH - 0xFADF: 0x670E, //CJK UNIFIED IDEOGRAPH - 0xFAE0: 0xF929, //CJK COMPATIBILITY IDEOGRAPH - 0xFAE1: 0x6766, //CJK UNIFIED IDEOGRAPH - 0xFAE2: 0x67BB, //CJK UNIFIED IDEOGRAPH - 0xFAE3: 0x6852, //CJK UNIFIED IDEOGRAPH - 0xFAE4: 0x67C0, //CJK UNIFIED IDEOGRAPH - 0xFAE5: 0x6801, //CJK UNIFIED IDEOGRAPH - 0xFAE6: 0x6844, //CJK UNIFIED IDEOGRAPH - 0xFAE7: 0x68CF, //CJK UNIFIED IDEOGRAPH - 0xFAE8: 0xFA13, //CJK COMPATIBILITY IDEOGRAPH - 0xFAE9: 0x6968, //CJK UNIFIED IDEOGRAPH - 0xFAEA: 0xFA14, //CJK COMPATIBILITY IDEOGRAPH - 0xFAEB: 0x6998, //CJK UNIFIED IDEOGRAPH - 0xFAEC: 0x69E2, //CJK UNIFIED IDEOGRAPH - 0xFAED: 0x6A30, //CJK UNIFIED IDEOGRAPH - 0xFAEE: 0x6A6B, //CJK UNIFIED IDEOGRAPH - 0xFAEF: 0x6A46, //CJK UNIFIED IDEOGRAPH - 0xFAF0: 0x6A73, //CJK UNIFIED IDEOGRAPH - 0xFAF1: 0x6A7E, //CJK UNIFIED IDEOGRAPH - 0xFAF2: 0x6AE2, //CJK UNIFIED IDEOGRAPH - 0xFAF3: 0x6AE4, //CJK UNIFIED IDEOGRAPH - 0xFAF4: 0x6BD6, //CJK UNIFIED IDEOGRAPH - 0xFAF5: 0x6C3F, //CJK UNIFIED IDEOGRAPH - 0xFAF6: 0x6C5C, //CJK UNIFIED IDEOGRAPH - 0xFAF7: 0x6C86, //CJK UNIFIED IDEOGRAPH - 0xFAF8: 0x6C6F, //CJK UNIFIED IDEOGRAPH - 0xFAF9: 0x6CDA, //CJK UNIFIED IDEOGRAPH - 0xFAFA: 0x6D04, //CJK UNIFIED IDEOGRAPH - 0xFAFB: 0x6D87, //CJK UNIFIED IDEOGRAPH - 0xFAFC: 0x6D6F, //CJK UNIFIED IDEOGRAPH - 0xFB40: 0x6D96, //CJK UNIFIED IDEOGRAPH - 0xFB41: 0x6DAC, //CJK UNIFIED IDEOGRAPH - 0xFB42: 0x6DCF, //CJK UNIFIED IDEOGRAPH - 0xFB43: 0x6DF8, //CJK UNIFIED IDEOGRAPH - 0xFB44: 0x6DF2, //CJK UNIFIED IDEOGRAPH - 0xFB45: 0x6DFC, //CJK UNIFIED IDEOGRAPH - 0xFB46: 0x6E39, //CJK UNIFIED IDEOGRAPH - 0xFB47: 0x6E5C, //CJK UNIFIED IDEOGRAPH - 0xFB48: 0x6E27, //CJK UNIFIED IDEOGRAPH - 0xFB49: 0x6E3C, //CJK UNIFIED IDEOGRAPH - 0xFB4A: 0x6EBF, //CJK UNIFIED IDEOGRAPH - 0xFB4B: 0x6F88, //CJK UNIFIED IDEOGRAPH - 0xFB4C: 0x6FB5, //CJK UNIFIED IDEOGRAPH - 0xFB4D: 0x6FF5, //CJK UNIFIED IDEOGRAPH - 0xFB4E: 0x7005, //CJK UNIFIED IDEOGRAPH - 0xFB4F: 0x7007, //CJK UNIFIED IDEOGRAPH - 0xFB50: 0x7028, //CJK UNIFIED IDEOGRAPH - 0xFB51: 0x7085, //CJK UNIFIED IDEOGRAPH - 0xFB52: 0x70AB, //CJK UNIFIED IDEOGRAPH - 0xFB53: 0x710F, //CJK UNIFIED IDEOGRAPH - 0xFB54: 0x7104, //CJK UNIFIED IDEOGRAPH - 0xFB55: 0x715C, //CJK UNIFIED IDEOGRAPH - 0xFB56: 0x7146, //CJK UNIFIED IDEOGRAPH - 0xFB57: 0x7147, //CJK UNIFIED IDEOGRAPH - 0xFB58: 0xFA15, //CJK COMPATIBILITY IDEOGRAPH - 0xFB59: 0x71C1, //CJK UNIFIED IDEOGRAPH - 0xFB5A: 0x71FE, //CJK UNIFIED IDEOGRAPH - 0xFB5B: 0x72B1, //CJK UNIFIED IDEOGRAPH - 0xFB5C: 0x72BE, //CJK UNIFIED IDEOGRAPH - 0xFB5D: 0x7324, //CJK UNIFIED IDEOGRAPH - 0xFB5E: 0xFA16, //CJK COMPATIBILITY IDEOGRAPH - 0xFB5F: 0x7377, //CJK UNIFIED IDEOGRAPH - 0xFB60: 0x73BD, //CJK UNIFIED IDEOGRAPH - 0xFB61: 0x73C9, //CJK UNIFIED IDEOGRAPH - 0xFB62: 0x73D6, //CJK UNIFIED IDEOGRAPH - 0xFB63: 0x73E3, //CJK UNIFIED IDEOGRAPH - 0xFB64: 0x73D2, //CJK UNIFIED IDEOGRAPH - 0xFB65: 0x7407, //CJK UNIFIED IDEOGRAPH - 0xFB66: 0x73F5, //CJK UNIFIED IDEOGRAPH - 0xFB67: 0x7426, //CJK UNIFIED IDEOGRAPH - 0xFB68: 0x742A, //CJK UNIFIED IDEOGRAPH - 0xFB69: 0x7429, //CJK UNIFIED IDEOGRAPH - 0xFB6A: 0x742E, //CJK UNIFIED IDEOGRAPH - 0xFB6B: 0x7462, //CJK UNIFIED IDEOGRAPH - 0xFB6C: 0x7489, //CJK UNIFIED IDEOGRAPH - 0xFB6D: 0x749F, //CJK UNIFIED IDEOGRAPH - 0xFB6E: 0x7501, //CJK UNIFIED IDEOGRAPH - 0xFB6F: 0x756F, //CJK UNIFIED IDEOGRAPH - 0xFB70: 0x7682, //CJK UNIFIED IDEOGRAPH - 0xFB71: 0x769C, //CJK UNIFIED IDEOGRAPH - 0xFB72: 0x769E, //CJK UNIFIED IDEOGRAPH - 0xFB73: 0x769B, //CJK UNIFIED IDEOGRAPH - 0xFB74: 0x76A6, //CJK UNIFIED IDEOGRAPH - 0xFB75: 0xFA17, //CJK COMPATIBILITY IDEOGRAPH - 0xFB76: 0x7746, //CJK UNIFIED IDEOGRAPH - 0xFB77: 0x52AF, //CJK UNIFIED IDEOGRAPH - 0xFB78: 0x7821, //CJK UNIFIED IDEOGRAPH - 0xFB79: 0x784E, //CJK UNIFIED IDEOGRAPH - 0xFB7A: 0x7864, //CJK UNIFIED IDEOGRAPH - 0xFB7B: 0x787A, //CJK UNIFIED IDEOGRAPH - 0xFB7C: 0x7930, //CJK UNIFIED IDEOGRAPH - 0xFB7D: 0xFA18, //CJK COMPATIBILITY IDEOGRAPH - 0xFB7E: 0xFA19, //CJK COMPATIBILITY IDEOGRAPH - 0xFB80: 0xFA1A, //CJK COMPATIBILITY IDEOGRAPH - 0xFB81: 0x7994, //CJK UNIFIED IDEOGRAPH - 0xFB82: 0xFA1B, //CJK COMPATIBILITY IDEOGRAPH - 0xFB83: 0x799B, //CJK UNIFIED IDEOGRAPH - 0xFB84: 0x7AD1, //CJK UNIFIED IDEOGRAPH - 0xFB85: 0x7AE7, //CJK UNIFIED IDEOGRAPH - 0xFB86: 0xFA1C, //CJK COMPATIBILITY IDEOGRAPH - 0xFB87: 0x7AEB, //CJK UNIFIED IDEOGRAPH - 0xFB88: 0x7B9E, //CJK UNIFIED IDEOGRAPH - 0xFB89: 0xFA1D, //CJK COMPATIBILITY IDEOGRAPH - 0xFB8A: 0x7D48, //CJK UNIFIED IDEOGRAPH - 0xFB8B: 0x7D5C, //CJK UNIFIED IDEOGRAPH - 0xFB8C: 0x7DB7, //CJK UNIFIED IDEOGRAPH - 0xFB8D: 0x7DA0, //CJK UNIFIED IDEOGRAPH - 0xFB8E: 0x7DD6, //CJK UNIFIED IDEOGRAPH - 0xFB8F: 0x7E52, //CJK UNIFIED IDEOGRAPH - 0xFB90: 0x7F47, //CJK UNIFIED IDEOGRAPH - 0xFB91: 0x7FA1, //CJK UNIFIED IDEOGRAPH - 0xFB92: 0xFA1E, //CJK COMPATIBILITY IDEOGRAPH - 0xFB93: 0x8301, //CJK UNIFIED IDEOGRAPH - 0xFB94: 0x8362, //CJK UNIFIED IDEOGRAPH - 0xFB95: 0x837F, //CJK UNIFIED IDEOGRAPH - 0xFB96: 0x83C7, //CJK UNIFIED IDEOGRAPH - 0xFB97: 0x83F6, //CJK UNIFIED IDEOGRAPH - 0xFB98: 0x8448, //CJK UNIFIED IDEOGRAPH - 0xFB99: 0x84B4, //CJK UNIFIED IDEOGRAPH - 0xFB9A: 0x8553, //CJK UNIFIED IDEOGRAPH - 0xFB9B: 0x8559, //CJK UNIFIED IDEOGRAPH - 0xFB9C: 0x856B, //CJK UNIFIED IDEOGRAPH - 0xFB9D: 0xFA1F, //CJK COMPATIBILITY IDEOGRAPH - 0xFB9E: 0x85B0, //CJK UNIFIED IDEOGRAPH - 0xFB9F: 0xFA20, //CJK COMPATIBILITY IDEOGRAPH - 0xFBA0: 0xFA21, //CJK COMPATIBILITY IDEOGRAPH - 0xFBA1: 0x8807, //CJK UNIFIED IDEOGRAPH - 0xFBA2: 0x88F5, //CJK UNIFIED IDEOGRAPH - 0xFBA3: 0x8A12, //CJK UNIFIED IDEOGRAPH - 0xFBA4: 0x8A37, //CJK UNIFIED IDEOGRAPH - 0xFBA5: 0x8A79, //CJK UNIFIED IDEOGRAPH - 0xFBA6: 0x8AA7, //CJK UNIFIED IDEOGRAPH - 0xFBA7: 0x8ABE, //CJK UNIFIED IDEOGRAPH - 0xFBA8: 0x8ADF, //CJK UNIFIED IDEOGRAPH - 0xFBA9: 0xFA22, //CJK COMPATIBILITY IDEOGRAPH - 0xFBAA: 0x8AF6, //CJK UNIFIED IDEOGRAPH - 0xFBAB: 0x8B53, //CJK UNIFIED IDEOGRAPH - 0xFBAC: 0x8B7F, //CJK UNIFIED IDEOGRAPH - 0xFBAD: 0x8CF0, //CJK UNIFIED IDEOGRAPH - 0xFBAE: 0x8CF4, //CJK UNIFIED IDEOGRAPH - 0xFBAF: 0x8D12, //CJK UNIFIED IDEOGRAPH - 0xFBB0: 0x8D76, //CJK UNIFIED IDEOGRAPH - 0xFBB1: 0xFA23, //CJK COMPATIBILITY IDEOGRAPH - 0xFBB2: 0x8ECF, //CJK UNIFIED IDEOGRAPH - 0xFBB3: 0xFA24, //CJK COMPATIBILITY IDEOGRAPH - 0xFBB4: 0xFA25, //CJK COMPATIBILITY IDEOGRAPH - 0xFBB5: 0x9067, //CJK UNIFIED IDEOGRAPH - 0xFBB6: 0x90DE, //CJK UNIFIED IDEOGRAPH - 0xFBB7: 0xFA26, //CJK COMPATIBILITY IDEOGRAPH - 0xFBB8: 0x9115, //CJK UNIFIED IDEOGRAPH - 0xFBB9: 0x9127, //CJK UNIFIED IDEOGRAPH - 0xFBBA: 0x91DA, //CJK UNIFIED IDEOGRAPH - 0xFBBB: 0x91D7, //CJK UNIFIED IDEOGRAPH - 0xFBBC: 0x91DE, //CJK UNIFIED IDEOGRAPH - 0xFBBD: 0x91ED, //CJK UNIFIED IDEOGRAPH - 0xFBBE: 0x91EE, //CJK UNIFIED IDEOGRAPH - 0xFBBF: 0x91E4, //CJK UNIFIED IDEOGRAPH - 0xFBC0: 0x91E5, //CJK UNIFIED IDEOGRAPH - 0xFBC1: 0x9206, //CJK UNIFIED IDEOGRAPH - 0xFBC2: 0x9210, //CJK UNIFIED IDEOGRAPH - 0xFBC3: 0x920A, //CJK UNIFIED IDEOGRAPH - 0xFBC4: 0x923A, //CJK UNIFIED IDEOGRAPH - 0xFBC5: 0x9240, //CJK UNIFIED IDEOGRAPH - 0xFBC6: 0x923C, //CJK UNIFIED IDEOGRAPH - 0xFBC7: 0x924E, //CJK UNIFIED IDEOGRAPH - 0xFBC8: 0x9259, //CJK UNIFIED IDEOGRAPH - 0xFBC9: 0x9251, //CJK UNIFIED IDEOGRAPH - 0xFBCA: 0x9239, //CJK UNIFIED IDEOGRAPH - 0xFBCB: 0x9267, //CJK UNIFIED IDEOGRAPH - 0xFBCC: 0x92A7, //CJK UNIFIED IDEOGRAPH - 0xFBCD: 0x9277, //CJK UNIFIED IDEOGRAPH - 0xFBCE: 0x9278, //CJK UNIFIED IDEOGRAPH - 0xFBCF: 0x92E7, //CJK UNIFIED IDEOGRAPH - 0xFBD0: 0x92D7, //CJK UNIFIED IDEOGRAPH - 0xFBD1: 0x92D9, //CJK UNIFIED IDEOGRAPH - 0xFBD2: 0x92D0, //CJK UNIFIED IDEOGRAPH - 0xFBD3: 0xFA27, //CJK COMPATIBILITY IDEOGRAPH - 0xFBD4: 0x92D5, //CJK UNIFIED IDEOGRAPH - 0xFBD5: 0x92E0, //CJK UNIFIED IDEOGRAPH - 0xFBD6: 0x92D3, //CJK UNIFIED IDEOGRAPH - 0xFBD7: 0x9325, //CJK UNIFIED IDEOGRAPH - 0xFBD8: 0x9321, //CJK UNIFIED IDEOGRAPH - 0xFBD9: 0x92FB, //CJK UNIFIED IDEOGRAPH - 0xFBDA: 0xFA28, //CJK COMPATIBILITY IDEOGRAPH - 0xFBDB: 0x931E, //CJK UNIFIED IDEOGRAPH - 0xFBDC: 0x92FF, //CJK UNIFIED IDEOGRAPH - 0xFBDD: 0x931D, //CJK UNIFIED IDEOGRAPH - 0xFBDE: 0x9302, //CJK UNIFIED IDEOGRAPH - 0xFBDF: 0x9370, //CJK UNIFIED IDEOGRAPH - 0xFBE0: 0x9357, //CJK UNIFIED IDEOGRAPH - 0xFBE1: 0x93A4, //CJK UNIFIED IDEOGRAPH - 0xFBE2: 0x93C6, //CJK UNIFIED IDEOGRAPH - 0xFBE3: 0x93DE, //CJK UNIFIED IDEOGRAPH - 0xFBE4: 0x93F8, //CJK UNIFIED IDEOGRAPH - 0xFBE5: 0x9431, //CJK UNIFIED IDEOGRAPH - 0xFBE6: 0x9445, //CJK UNIFIED IDEOGRAPH - 0xFBE7: 0x9448, //CJK UNIFIED IDEOGRAPH - 0xFBE8: 0x9592, //CJK UNIFIED IDEOGRAPH - 0xFBE9: 0xF9DC, //CJK COMPATIBILITY IDEOGRAPH - 0xFBEA: 0xFA29, //CJK COMPATIBILITY IDEOGRAPH - 0xFBEB: 0x969D, //CJK UNIFIED IDEOGRAPH - 0xFBEC: 0x96AF, //CJK UNIFIED IDEOGRAPH - 0xFBED: 0x9733, //CJK UNIFIED IDEOGRAPH - 0xFBEE: 0x973B, //CJK UNIFIED IDEOGRAPH - 0xFBEF: 0x9743, //CJK UNIFIED IDEOGRAPH - 0xFBF0: 0x974D, //CJK UNIFIED IDEOGRAPH - 0xFBF1: 0x974F, //CJK UNIFIED IDEOGRAPH - 0xFBF2: 0x9751, //CJK UNIFIED IDEOGRAPH - 0xFBF3: 0x9755, //CJK UNIFIED IDEOGRAPH - 0xFBF4: 0x9857, //CJK UNIFIED IDEOGRAPH - 0xFBF5: 0x9865, //CJK UNIFIED IDEOGRAPH - 0xFBF6: 0xFA2A, //CJK COMPATIBILITY IDEOGRAPH - 0xFBF7: 0xFA2B, //CJK COMPATIBILITY IDEOGRAPH - 0xFBF8: 0x9927, //CJK UNIFIED IDEOGRAPH - 0xFBF9: 0xFA2C, //CJK COMPATIBILITY IDEOGRAPH - 0xFBFA: 0x999E, //CJK UNIFIED IDEOGRAPH - 0xFBFB: 0x9A4E, //CJK UNIFIED IDEOGRAPH - 0xFBFC: 0x9AD9, //CJK UNIFIED IDEOGRAPH - 0xFC40: 0x9ADC, //CJK UNIFIED IDEOGRAPH - 0xFC41: 0x9B75, //CJK UNIFIED IDEOGRAPH - 0xFC42: 0x9B72, //CJK UNIFIED IDEOGRAPH - 0xFC43: 0x9B8F, //CJK UNIFIED IDEOGRAPH - 0xFC44: 0x9BB1, //CJK UNIFIED IDEOGRAPH - 0xFC45: 0x9BBB, //CJK UNIFIED IDEOGRAPH - 0xFC46: 0x9C00, //CJK UNIFIED IDEOGRAPH - 0xFC47: 0x9D70, //CJK UNIFIED IDEOGRAPH - 0xFC48: 0x9D6B, //CJK UNIFIED IDEOGRAPH - 0xFC49: 0xFA2D, //CJK COMPATIBILITY IDEOGRAPH - 0xFC4A: 0x9E19, //CJK UNIFIED IDEOGRAPH - 0xFC4B: 0x9ED1, //CJK UNIFIED IDEOGRAPH - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp936.go b/vendor/github.com/denisenkom/go-mssqldb/cp936.go deleted file mode 100644 index fca5da76d..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp936.go +++ /dev/null @@ -1,22055 +0,0 @@ -package mssql - -var cp936 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000A, //LINE FEED - 0x000B, //VERTICAL TABULATION - 0x000C, //FORM FEED - 0x000D, //CARRIAGE RETURN - 0x000E, //SHIFT OUT - 0x000F, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001A, //SUBSTITUTE - 0x001B, //ESCAPE - 0x001C, //FILE SEPARATOR - 0x001D, //GROUP SEPARATOR - 0x001E, //RECORD SEPARATOR - 0x001F, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002A, //ASTERISK - 0x002B, //PLUS SIGN - 0x002C, //COMMA - 0x002D, //HYPHEN-MINUS - 0x002E, //FULL STOP - 0x002F, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003A, //COLON - 0x003B, //SEMICOLON - 0x003C, //LESS-THAN SIGN - 0x003D, //EQUALS SIGN - 0x003E, //GREATER-THAN SIGN - 0x003F, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004A, //LATIN CAPITAL LETTER J - 0x004B, //LATIN CAPITAL LETTER K - 0x004C, //LATIN CAPITAL LETTER L - 0x004D, //LATIN CAPITAL LETTER M - 0x004E, //LATIN CAPITAL LETTER N - 0x004F, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005A, //LATIN CAPITAL LETTER Z - 0x005B, //LEFT SQUARE BRACKET - 0x005C, //REVERSE SOLIDUS - 0x005D, //RIGHT SQUARE BRACKET - 0x005E, //CIRCUMFLEX ACCENT - 0x005F, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006A, //LATIN SMALL LETTER J - 0x006B, //LATIN SMALL LETTER K - 0x006C, //LATIN SMALL LETTER L - 0x006D, //LATIN SMALL LETTER M - 0x006E, //LATIN SMALL LETTER N - 0x006F, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007A, //LATIN SMALL LETTER Z - 0x007B, //LEFT CURLY BRACKET - 0x007C, //VERTICAL LINE - 0x007D, //RIGHT CURLY BRACKET - 0x007E, //TILDE - 0x007F, //DELETE - 0x20AC, //EURO SIGN - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - 0xFFFD, //UNDEFINED - }, - db: map[int]rune{ - 0x8140: 0x4E02, //CJK UNIFIED IDEOGRAPH - 0x8141: 0x4E04, //CJK UNIFIED IDEOGRAPH - 0x8142: 0x4E05, //CJK UNIFIED IDEOGRAPH - 0x8143: 0x4E06, //CJK UNIFIED IDEOGRAPH - 0x8144: 0x4E0F, //CJK UNIFIED IDEOGRAPH - 0x8145: 0x4E12, //CJK UNIFIED IDEOGRAPH - 0x8146: 0x4E17, //CJK UNIFIED IDEOGRAPH - 0x8147: 0x4E1F, //CJK UNIFIED IDEOGRAPH - 0x8148: 0x4E20, //CJK UNIFIED IDEOGRAPH - 0x8149: 0x4E21, //CJK UNIFIED IDEOGRAPH - 0x814A: 0x4E23, //CJK UNIFIED IDEOGRAPH - 0x814B: 0x4E26, //CJK UNIFIED IDEOGRAPH - 0x814C: 0x4E29, //CJK UNIFIED IDEOGRAPH - 0x814D: 0x4E2E, //CJK UNIFIED IDEOGRAPH - 0x814E: 0x4E2F, //CJK UNIFIED IDEOGRAPH - 0x814F: 0x4E31, //CJK UNIFIED IDEOGRAPH - 0x8150: 0x4E33, //CJK UNIFIED IDEOGRAPH - 0x8151: 0x4E35, //CJK UNIFIED IDEOGRAPH - 0x8152: 0x4E37, //CJK UNIFIED IDEOGRAPH - 0x8153: 0x4E3C, //CJK UNIFIED IDEOGRAPH - 0x8154: 0x4E40, //CJK UNIFIED IDEOGRAPH - 0x8155: 0x4E41, //CJK UNIFIED IDEOGRAPH - 0x8156: 0x4E42, //CJK UNIFIED IDEOGRAPH - 0x8157: 0x4E44, //CJK UNIFIED IDEOGRAPH - 0x8158: 0x4E46, //CJK UNIFIED IDEOGRAPH - 0x8159: 0x4E4A, //CJK UNIFIED IDEOGRAPH - 0x815A: 0x4E51, //CJK UNIFIED IDEOGRAPH - 0x815B: 0x4E55, //CJK UNIFIED IDEOGRAPH - 0x815C: 0x4E57, //CJK UNIFIED IDEOGRAPH - 0x815D: 0x4E5A, //CJK UNIFIED IDEOGRAPH - 0x815E: 0x4E5B, //CJK UNIFIED IDEOGRAPH - 0x815F: 0x4E62, //CJK UNIFIED IDEOGRAPH - 0x8160: 0x4E63, //CJK UNIFIED IDEOGRAPH - 0x8161: 0x4E64, //CJK UNIFIED IDEOGRAPH - 0x8162: 0x4E65, //CJK UNIFIED IDEOGRAPH - 0x8163: 0x4E67, //CJK UNIFIED IDEOGRAPH - 0x8164: 0x4E68, //CJK UNIFIED IDEOGRAPH - 0x8165: 0x4E6A, //CJK UNIFIED IDEOGRAPH - 0x8166: 0x4E6B, //CJK UNIFIED IDEOGRAPH - 0x8167: 0x4E6C, //CJK UNIFIED IDEOGRAPH - 0x8168: 0x4E6D, //CJK UNIFIED IDEOGRAPH - 0x8169: 0x4E6E, //CJK UNIFIED IDEOGRAPH - 0x816A: 0x4E6F, //CJK UNIFIED IDEOGRAPH - 0x816B: 0x4E72, //CJK UNIFIED IDEOGRAPH - 0x816C: 0x4E74, //CJK UNIFIED IDEOGRAPH - 0x816D: 0x4E75, //CJK UNIFIED IDEOGRAPH - 0x816E: 0x4E76, //CJK UNIFIED IDEOGRAPH - 0x816F: 0x4E77, //CJK UNIFIED IDEOGRAPH - 0x8170: 0x4E78, //CJK UNIFIED IDEOGRAPH - 0x8171: 0x4E79, //CJK UNIFIED IDEOGRAPH - 0x8172: 0x4E7A, //CJK UNIFIED IDEOGRAPH - 0x8173: 0x4E7B, //CJK UNIFIED IDEOGRAPH - 0x8174: 0x4E7C, //CJK UNIFIED IDEOGRAPH - 0x8175: 0x4E7D, //CJK UNIFIED IDEOGRAPH - 0x8176: 0x4E7F, //CJK UNIFIED IDEOGRAPH - 0x8177: 0x4E80, //CJK UNIFIED IDEOGRAPH - 0x8178: 0x4E81, //CJK UNIFIED IDEOGRAPH - 0x8179: 0x4E82, //CJK UNIFIED IDEOGRAPH - 0x817A: 0x4E83, //CJK UNIFIED IDEOGRAPH - 0x817B: 0x4E84, //CJK UNIFIED IDEOGRAPH - 0x817C: 0x4E85, //CJK UNIFIED IDEOGRAPH - 0x817D: 0x4E87, //CJK UNIFIED IDEOGRAPH - 0x817E: 0x4E8A, //CJK UNIFIED IDEOGRAPH - 0x8180: 0x4E90, //CJK UNIFIED IDEOGRAPH - 0x8181: 0x4E96, //CJK UNIFIED IDEOGRAPH - 0x8182: 0x4E97, //CJK UNIFIED IDEOGRAPH - 0x8183: 0x4E99, //CJK UNIFIED IDEOGRAPH - 0x8184: 0x4E9C, //CJK UNIFIED IDEOGRAPH - 0x8185: 0x4E9D, //CJK UNIFIED IDEOGRAPH - 0x8186: 0x4E9E, //CJK UNIFIED IDEOGRAPH - 0x8187: 0x4EA3, //CJK UNIFIED IDEOGRAPH - 0x8188: 0x4EAA, //CJK UNIFIED IDEOGRAPH - 0x8189: 0x4EAF, //CJK UNIFIED IDEOGRAPH - 0x818A: 0x4EB0, //CJK UNIFIED IDEOGRAPH - 0x818B: 0x4EB1, //CJK UNIFIED IDEOGRAPH - 0x818C: 0x4EB4, //CJK UNIFIED IDEOGRAPH - 0x818D: 0x4EB6, //CJK UNIFIED IDEOGRAPH - 0x818E: 0x4EB7, //CJK UNIFIED IDEOGRAPH - 0x818F: 0x4EB8, //CJK UNIFIED IDEOGRAPH - 0x8190: 0x4EB9, //CJK UNIFIED IDEOGRAPH - 0x8191: 0x4EBC, //CJK UNIFIED IDEOGRAPH - 0x8192: 0x4EBD, //CJK UNIFIED IDEOGRAPH - 0x8193: 0x4EBE, //CJK UNIFIED IDEOGRAPH - 0x8194: 0x4EC8, //CJK UNIFIED IDEOGRAPH - 0x8195: 0x4ECC, //CJK UNIFIED IDEOGRAPH - 0x8196: 0x4ECF, //CJK UNIFIED IDEOGRAPH - 0x8197: 0x4ED0, //CJK UNIFIED IDEOGRAPH - 0x8198: 0x4ED2, //CJK UNIFIED IDEOGRAPH - 0x8199: 0x4EDA, //CJK UNIFIED IDEOGRAPH - 0x819A: 0x4EDB, //CJK UNIFIED IDEOGRAPH - 0x819B: 0x4EDC, //CJK UNIFIED IDEOGRAPH - 0x819C: 0x4EE0, //CJK UNIFIED IDEOGRAPH - 0x819D: 0x4EE2, //CJK UNIFIED IDEOGRAPH - 0x819E: 0x4EE6, //CJK UNIFIED IDEOGRAPH - 0x819F: 0x4EE7, //CJK UNIFIED IDEOGRAPH - 0x81A0: 0x4EE9, //CJK UNIFIED IDEOGRAPH - 0x81A1: 0x4EED, //CJK UNIFIED IDEOGRAPH - 0x81A2: 0x4EEE, //CJK UNIFIED IDEOGRAPH - 0x81A3: 0x4EEF, //CJK UNIFIED IDEOGRAPH - 0x81A4: 0x4EF1, //CJK UNIFIED IDEOGRAPH - 0x81A5: 0x4EF4, //CJK UNIFIED IDEOGRAPH - 0x81A6: 0x4EF8, //CJK UNIFIED IDEOGRAPH - 0x81A7: 0x4EF9, //CJK UNIFIED IDEOGRAPH - 0x81A8: 0x4EFA, //CJK UNIFIED IDEOGRAPH - 0x81A9: 0x4EFC, //CJK UNIFIED IDEOGRAPH - 0x81AA: 0x4EFE, //CJK UNIFIED IDEOGRAPH - 0x81AB: 0x4F00, //CJK UNIFIED IDEOGRAPH - 0x81AC: 0x4F02, //CJK UNIFIED IDEOGRAPH - 0x81AD: 0x4F03, //CJK UNIFIED IDEOGRAPH - 0x81AE: 0x4F04, //CJK UNIFIED IDEOGRAPH - 0x81AF: 0x4F05, //CJK UNIFIED IDEOGRAPH - 0x81B0: 0x4F06, //CJK UNIFIED IDEOGRAPH - 0x81B1: 0x4F07, //CJK UNIFIED IDEOGRAPH - 0x81B2: 0x4F08, //CJK UNIFIED IDEOGRAPH - 0x81B3: 0x4F0B, //CJK UNIFIED IDEOGRAPH - 0x81B4: 0x4F0C, //CJK UNIFIED IDEOGRAPH - 0x81B5: 0x4F12, //CJK UNIFIED IDEOGRAPH - 0x81B6: 0x4F13, //CJK UNIFIED IDEOGRAPH - 0x81B7: 0x4F14, //CJK UNIFIED IDEOGRAPH - 0x81B8: 0x4F15, //CJK UNIFIED IDEOGRAPH - 0x81B9: 0x4F16, //CJK UNIFIED IDEOGRAPH - 0x81BA: 0x4F1C, //CJK UNIFIED IDEOGRAPH - 0x81BB: 0x4F1D, //CJK UNIFIED IDEOGRAPH - 0x81BC: 0x4F21, //CJK UNIFIED IDEOGRAPH - 0x81BD: 0x4F23, //CJK UNIFIED IDEOGRAPH - 0x81BE: 0x4F28, //CJK UNIFIED IDEOGRAPH - 0x81BF: 0x4F29, //CJK UNIFIED IDEOGRAPH - 0x81C0: 0x4F2C, //CJK UNIFIED IDEOGRAPH - 0x81C1: 0x4F2D, //CJK UNIFIED IDEOGRAPH - 0x81C2: 0x4F2E, //CJK UNIFIED IDEOGRAPH - 0x81C3: 0x4F31, //CJK UNIFIED IDEOGRAPH - 0x81C4: 0x4F33, //CJK UNIFIED IDEOGRAPH - 0x81C5: 0x4F35, //CJK UNIFIED IDEOGRAPH - 0x81C6: 0x4F37, //CJK UNIFIED IDEOGRAPH - 0x81C7: 0x4F39, //CJK UNIFIED IDEOGRAPH - 0x81C8: 0x4F3B, //CJK UNIFIED IDEOGRAPH - 0x81C9: 0x4F3E, //CJK UNIFIED IDEOGRAPH - 0x81CA: 0x4F3F, //CJK UNIFIED IDEOGRAPH - 0x81CB: 0x4F40, //CJK UNIFIED IDEOGRAPH - 0x81CC: 0x4F41, //CJK UNIFIED IDEOGRAPH - 0x81CD: 0x4F42, //CJK UNIFIED IDEOGRAPH - 0x81CE: 0x4F44, //CJK UNIFIED IDEOGRAPH - 0x81CF: 0x4F45, //CJK UNIFIED IDEOGRAPH - 0x81D0: 0x4F47, //CJK UNIFIED IDEOGRAPH - 0x81D1: 0x4F48, //CJK UNIFIED IDEOGRAPH - 0x81D2: 0x4F49, //CJK UNIFIED IDEOGRAPH - 0x81D3: 0x4F4A, //CJK UNIFIED IDEOGRAPH - 0x81D4: 0x4F4B, //CJK UNIFIED IDEOGRAPH - 0x81D5: 0x4F4C, //CJK UNIFIED IDEOGRAPH - 0x81D6: 0x4F52, //CJK UNIFIED IDEOGRAPH - 0x81D7: 0x4F54, //CJK UNIFIED IDEOGRAPH - 0x81D8: 0x4F56, //CJK UNIFIED IDEOGRAPH - 0x81D9: 0x4F61, //CJK UNIFIED IDEOGRAPH - 0x81DA: 0x4F62, //CJK UNIFIED IDEOGRAPH - 0x81DB: 0x4F66, //CJK UNIFIED IDEOGRAPH - 0x81DC: 0x4F68, //CJK UNIFIED IDEOGRAPH - 0x81DD: 0x4F6A, //CJK UNIFIED IDEOGRAPH - 0x81DE: 0x4F6B, //CJK UNIFIED IDEOGRAPH - 0x81DF: 0x4F6D, //CJK UNIFIED IDEOGRAPH - 0x81E0: 0x4F6E, //CJK UNIFIED IDEOGRAPH - 0x81E1: 0x4F71, //CJK UNIFIED IDEOGRAPH - 0x81E2: 0x4F72, //CJK UNIFIED IDEOGRAPH - 0x81E3: 0x4F75, //CJK UNIFIED IDEOGRAPH - 0x81E4: 0x4F77, //CJK UNIFIED IDEOGRAPH - 0x81E5: 0x4F78, //CJK UNIFIED IDEOGRAPH - 0x81E6: 0x4F79, //CJK UNIFIED IDEOGRAPH - 0x81E7: 0x4F7A, //CJK UNIFIED IDEOGRAPH - 0x81E8: 0x4F7D, //CJK UNIFIED IDEOGRAPH - 0x81E9: 0x4F80, //CJK UNIFIED IDEOGRAPH - 0x81EA: 0x4F81, //CJK UNIFIED IDEOGRAPH - 0x81EB: 0x4F82, //CJK UNIFIED IDEOGRAPH - 0x81EC: 0x4F85, //CJK UNIFIED IDEOGRAPH - 0x81ED: 0x4F86, //CJK UNIFIED IDEOGRAPH - 0x81EE: 0x4F87, //CJK UNIFIED IDEOGRAPH - 0x81EF: 0x4F8A, //CJK UNIFIED IDEOGRAPH - 0x81F0: 0x4F8C, //CJK UNIFIED IDEOGRAPH - 0x81F1: 0x4F8E, //CJK UNIFIED IDEOGRAPH - 0x81F2: 0x4F90, //CJK UNIFIED IDEOGRAPH - 0x81F3: 0x4F92, //CJK UNIFIED IDEOGRAPH - 0x81F4: 0x4F93, //CJK UNIFIED IDEOGRAPH - 0x81F5: 0x4F95, //CJK UNIFIED IDEOGRAPH - 0x81F6: 0x4F96, //CJK UNIFIED IDEOGRAPH - 0x81F7: 0x4F98, //CJK UNIFIED IDEOGRAPH - 0x81F8: 0x4F99, //CJK UNIFIED IDEOGRAPH - 0x81F9: 0x4F9A, //CJK UNIFIED IDEOGRAPH - 0x81FA: 0x4F9C, //CJK UNIFIED IDEOGRAPH - 0x81FB: 0x4F9E, //CJK UNIFIED IDEOGRAPH - 0x81FC: 0x4F9F, //CJK UNIFIED IDEOGRAPH - 0x81FD: 0x4FA1, //CJK UNIFIED IDEOGRAPH - 0x81FE: 0x4FA2, //CJK UNIFIED IDEOGRAPH - 0x8240: 0x4FA4, //CJK UNIFIED IDEOGRAPH - 0x8241: 0x4FAB, //CJK UNIFIED IDEOGRAPH - 0x8242: 0x4FAD, //CJK UNIFIED IDEOGRAPH - 0x8243: 0x4FB0, //CJK UNIFIED IDEOGRAPH - 0x8244: 0x4FB1, //CJK UNIFIED IDEOGRAPH - 0x8245: 0x4FB2, //CJK UNIFIED IDEOGRAPH - 0x8246: 0x4FB3, //CJK UNIFIED IDEOGRAPH - 0x8247: 0x4FB4, //CJK UNIFIED IDEOGRAPH - 0x8248: 0x4FB6, //CJK UNIFIED IDEOGRAPH - 0x8249: 0x4FB7, //CJK UNIFIED IDEOGRAPH - 0x824A: 0x4FB8, //CJK UNIFIED IDEOGRAPH - 0x824B: 0x4FB9, //CJK UNIFIED IDEOGRAPH - 0x824C: 0x4FBA, //CJK UNIFIED IDEOGRAPH - 0x824D: 0x4FBB, //CJK UNIFIED IDEOGRAPH - 0x824E: 0x4FBC, //CJK UNIFIED IDEOGRAPH - 0x824F: 0x4FBD, //CJK UNIFIED IDEOGRAPH - 0x8250: 0x4FBE, //CJK UNIFIED IDEOGRAPH - 0x8251: 0x4FC0, //CJK UNIFIED IDEOGRAPH - 0x8252: 0x4FC1, //CJK UNIFIED IDEOGRAPH - 0x8253: 0x4FC2, //CJK UNIFIED IDEOGRAPH - 0x8254: 0x4FC6, //CJK UNIFIED IDEOGRAPH - 0x8255: 0x4FC7, //CJK UNIFIED IDEOGRAPH - 0x8256: 0x4FC8, //CJK UNIFIED IDEOGRAPH - 0x8257: 0x4FC9, //CJK UNIFIED IDEOGRAPH - 0x8258: 0x4FCB, //CJK UNIFIED IDEOGRAPH - 0x8259: 0x4FCC, //CJK UNIFIED IDEOGRAPH - 0x825A: 0x4FCD, //CJK UNIFIED IDEOGRAPH - 0x825B: 0x4FD2, //CJK UNIFIED IDEOGRAPH - 0x825C: 0x4FD3, //CJK UNIFIED IDEOGRAPH - 0x825D: 0x4FD4, //CJK UNIFIED IDEOGRAPH - 0x825E: 0x4FD5, //CJK UNIFIED IDEOGRAPH - 0x825F: 0x4FD6, //CJK UNIFIED IDEOGRAPH - 0x8260: 0x4FD9, //CJK UNIFIED IDEOGRAPH - 0x8261: 0x4FDB, //CJK UNIFIED IDEOGRAPH - 0x8262: 0x4FE0, //CJK UNIFIED IDEOGRAPH - 0x8263: 0x4FE2, //CJK UNIFIED IDEOGRAPH - 0x8264: 0x4FE4, //CJK UNIFIED IDEOGRAPH - 0x8265: 0x4FE5, //CJK UNIFIED IDEOGRAPH - 0x8266: 0x4FE7, //CJK UNIFIED IDEOGRAPH - 0x8267: 0x4FEB, //CJK UNIFIED IDEOGRAPH - 0x8268: 0x4FEC, //CJK UNIFIED IDEOGRAPH - 0x8269: 0x4FF0, //CJK UNIFIED IDEOGRAPH - 0x826A: 0x4FF2, //CJK UNIFIED IDEOGRAPH - 0x826B: 0x4FF4, //CJK UNIFIED IDEOGRAPH - 0x826C: 0x4FF5, //CJK UNIFIED IDEOGRAPH - 0x826D: 0x4FF6, //CJK UNIFIED IDEOGRAPH - 0x826E: 0x4FF7, //CJK UNIFIED IDEOGRAPH - 0x826F: 0x4FF9, //CJK UNIFIED IDEOGRAPH - 0x8270: 0x4FFB, //CJK UNIFIED IDEOGRAPH - 0x8271: 0x4FFC, //CJK UNIFIED IDEOGRAPH - 0x8272: 0x4FFD, //CJK UNIFIED IDEOGRAPH - 0x8273: 0x4FFF, //CJK UNIFIED IDEOGRAPH - 0x8274: 0x5000, //CJK UNIFIED IDEOGRAPH - 0x8275: 0x5001, //CJK UNIFIED IDEOGRAPH - 0x8276: 0x5002, //CJK UNIFIED IDEOGRAPH - 0x8277: 0x5003, //CJK UNIFIED IDEOGRAPH - 0x8278: 0x5004, //CJK UNIFIED IDEOGRAPH - 0x8279: 0x5005, //CJK UNIFIED IDEOGRAPH - 0x827A: 0x5006, //CJK UNIFIED IDEOGRAPH - 0x827B: 0x5007, //CJK UNIFIED IDEOGRAPH - 0x827C: 0x5008, //CJK UNIFIED IDEOGRAPH - 0x827D: 0x5009, //CJK UNIFIED IDEOGRAPH - 0x827E: 0x500A, //CJK UNIFIED IDEOGRAPH - 0x8280: 0x500B, //CJK UNIFIED IDEOGRAPH - 0x8281: 0x500E, //CJK UNIFIED IDEOGRAPH - 0x8282: 0x5010, //CJK UNIFIED IDEOGRAPH - 0x8283: 0x5011, //CJK UNIFIED IDEOGRAPH - 0x8284: 0x5013, //CJK UNIFIED IDEOGRAPH - 0x8285: 0x5015, //CJK UNIFIED IDEOGRAPH - 0x8286: 0x5016, //CJK UNIFIED IDEOGRAPH - 0x8287: 0x5017, //CJK UNIFIED IDEOGRAPH - 0x8288: 0x501B, //CJK UNIFIED IDEOGRAPH - 0x8289: 0x501D, //CJK UNIFIED IDEOGRAPH - 0x828A: 0x501E, //CJK UNIFIED IDEOGRAPH - 0x828B: 0x5020, //CJK UNIFIED IDEOGRAPH - 0x828C: 0x5022, //CJK UNIFIED IDEOGRAPH - 0x828D: 0x5023, //CJK UNIFIED IDEOGRAPH - 0x828E: 0x5024, //CJK UNIFIED IDEOGRAPH - 0x828F: 0x5027, //CJK UNIFIED IDEOGRAPH - 0x8290: 0x502B, //CJK UNIFIED IDEOGRAPH - 0x8291: 0x502F, //CJK UNIFIED IDEOGRAPH - 0x8292: 0x5030, //CJK UNIFIED IDEOGRAPH - 0x8293: 0x5031, //CJK UNIFIED IDEOGRAPH - 0x8294: 0x5032, //CJK UNIFIED IDEOGRAPH - 0x8295: 0x5033, //CJK UNIFIED IDEOGRAPH - 0x8296: 0x5034, //CJK UNIFIED IDEOGRAPH - 0x8297: 0x5035, //CJK UNIFIED IDEOGRAPH - 0x8298: 0x5036, //CJK UNIFIED IDEOGRAPH - 0x8299: 0x5037, //CJK UNIFIED IDEOGRAPH - 0x829A: 0x5038, //CJK UNIFIED IDEOGRAPH - 0x829B: 0x5039, //CJK UNIFIED IDEOGRAPH - 0x829C: 0x503B, //CJK UNIFIED IDEOGRAPH - 0x829D: 0x503D, //CJK UNIFIED IDEOGRAPH - 0x829E: 0x503F, //CJK UNIFIED IDEOGRAPH - 0x829F: 0x5040, //CJK UNIFIED IDEOGRAPH - 0x82A0: 0x5041, //CJK UNIFIED IDEOGRAPH - 0x82A1: 0x5042, //CJK UNIFIED IDEOGRAPH - 0x82A2: 0x5044, //CJK UNIFIED IDEOGRAPH - 0x82A3: 0x5045, //CJK UNIFIED IDEOGRAPH - 0x82A4: 0x5046, //CJK UNIFIED IDEOGRAPH - 0x82A5: 0x5049, //CJK UNIFIED IDEOGRAPH - 0x82A6: 0x504A, //CJK UNIFIED IDEOGRAPH - 0x82A7: 0x504B, //CJK UNIFIED IDEOGRAPH - 0x82A8: 0x504D, //CJK UNIFIED IDEOGRAPH - 0x82A9: 0x5050, //CJK UNIFIED IDEOGRAPH - 0x82AA: 0x5051, //CJK UNIFIED IDEOGRAPH - 0x82AB: 0x5052, //CJK UNIFIED IDEOGRAPH - 0x82AC: 0x5053, //CJK UNIFIED IDEOGRAPH - 0x82AD: 0x5054, //CJK UNIFIED IDEOGRAPH - 0x82AE: 0x5056, //CJK UNIFIED IDEOGRAPH - 0x82AF: 0x5057, //CJK UNIFIED IDEOGRAPH - 0x82B0: 0x5058, //CJK UNIFIED IDEOGRAPH - 0x82B1: 0x5059, //CJK UNIFIED IDEOGRAPH - 0x82B2: 0x505B, //CJK UNIFIED IDEOGRAPH - 0x82B3: 0x505D, //CJK UNIFIED IDEOGRAPH - 0x82B4: 0x505E, //CJK UNIFIED IDEOGRAPH - 0x82B5: 0x505F, //CJK UNIFIED IDEOGRAPH - 0x82B6: 0x5060, //CJK UNIFIED IDEOGRAPH - 0x82B7: 0x5061, //CJK UNIFIED IDEOGRAPH - 0x82B8: 0x5062, //CJK UNIFIED IDEOGRAPH - 0x82B9: 0x5063, //CJK UNIFIED IDEOGRAPH - 0x82BA: 0x5064, //CJK UNIFIED IDEOGRAPH - 0x82BB: 0x5066, //CJK UNIFIED IDEOGRAPH - 0x82BC: 0x5067, //CJK UNIFIED IDEOGRAPH - 0x82BD: 0x5068, //CJK UNIFIED IDEOGRAPH - 0x82BE: 0x5069, //CJK UNIFIED IDEOGRAPH - 0x82BF: 0x506A, //CJK UNIFIED IDEOGRAPH - 0x82C0: 0x506B, //CJK UNIFIED IDEOGRAPH - 0x82C1: 0x506D, //CJK UNIFIED IDEOGRAPH - 0x82C2: 0x506E, //CJK UNIFIED IDEOGRAPH - 0x82C3: 0x506F, //CJK UNIFIED IDEOGRAPH - 0x82C4: 0x5070, //CJK UNIFIED IDEOGRAPH - 0x82C5: 0x5071, //CJK UNIFIED IDEOGRAPH - 0x82C6: 0x5072, //CJK UNIFIED IDEOGRAPH - 0x82C7: 0x5073, //CJK UNIFIED IDEOGRAPH - 0x82C8: 0x5074, //CJK UNIFIED IDEOGRAPH - 0x82C9: 0x5075, //CJK UNIFIED IDEOGRAPH - 0x82CA: 0x5078, //CJK UNIFIED IDEOGRAPH - 0x82CB: 0x5079, //CJK UNIFIED IDEOGRAPH - 0x82CC: 0x507A, //CJK UNIFIED IDEOGRAPH - 0x82CD: 0x507C, //CJK UNIFIED IDEOGRAPH - 0x82CE: 0x507D, //CJK UNIFIED IDEOGRAPH - 0x82CF: 0x5081, //CJK UNIFIED IDEOGRAPH - 0x82D0: 0x5082, //CJK UNIFIED IDEOGRAPH - 0x82D1: 0x5083, //CJK UNIFIED IDEOGRAPH - 0x82D2: 0x5084, //CJK UNIFIED IDEOGRAPH - 0x82D3: 0x5086, //CJK UNIFIED IDEOGRAPH - 0x82D4: 0x5087, //CJK UNIFIED IDEOGRAPH - 0x82D5: 0x5089, //CJK UNIFIED IDEOGRAPH - 0x82D6: 0x508A, //CJK UNIFIED IDEOGRAPH - 0x82D7: 0x508B, //CJK UNIFIED IDEOGRAPH - 0x82D8: 0x508C, //CJK UNIFIED IDEOGRAPH - 0x82D9: 0x508E, //CJK UNIFIED IDEOGRAPH - 0x82DA: 0x508F, //CJK UNIFIED IDEOGRAPH - 0x82DB: 0x5090, //CJK UNIFIED IDEOGRAPH - 0x82DC: 0x5091, //CJK UNIFIED IDEOGRAPH - 0x82DD: 0x5092, //CJK UNIFIED IDEOGRAPH - 0x82DE: 0x5093, //CJK UNIFIED IDEOGRAPH - 0x82DF: 0x5094, //CJK UNIFIED IDEOGRAPH - 0x82E0: 0x5095, //CJK UNIFIED IDEOGRAPH - 0x82E1: 0x5096, //CJK UNIFIED IDEOGRAPH - 0x82E2: 0x5097, //CJK UNIFIED IDEOGRAPH - 0x82E3: 0x5098, //CJK UNIFIED IDEOGRAPH - 0x82E4: 0x5099, //CJK UNIFIED IDEOGRAPH - 0x82E5: 0x509A, //CJK UNIFIED IDEOGRAPH - 0x82E6: 0x509B, //CJK UNIFIED IDEOGRAPH - 0x82E7: 0x509C, //CJK UNIFIED IDEOGRAPH - 0x82E8: 0x509D, //CJK UNIFIED IDEOGRAPH - 0x82E9: 0x509E, //CJK UNIFIED IDEOGRAPH - 0x82EA: 0x509F, //CJK UNIFIED IDEOGRAPH - 0x82EB: 0x50A0, //CJK UNIFIED IDEOGRAPH - 0x82EC: 0x50A1, //CJK UNIFIED IDEOGRAPH - 0x82ED: 0x50A2, //CJK UNIFIED IDEOGRAPH - 0x82EE: 0x50A4, //CJK UNIFIED IDEOGRAPH - 0x82EF: 0x50A6, //CJK UNIFIED IDEOGRAPH - 0x82F0: 0x50AA, //CJK UNIFIED IDEOGRAPH - 0x82F1: 0x50AB, //CJK UNIFIED IDEOGRAPH - 0x82F2: 0x50AD, //CJK UNIFIED IDEOGRAPH - 0x82F3: 0x50AE, //CJK UNIFIED IDEOGRAPH - 0x82F4: 0x50AF, //CJK UNIFIED IDEOGRAPH - 0x82F5: 0x50B0, //CJK UNIFIED IDEOGRAPH - 0x82F6: 0x50B1, //CJK UNIFIED IDEOGRAPH - 0x82F7: 0x50B3, //CJK UNIFIED IDEOGRAPH - 0x82F8: 0x50B4, //CJK UNIFIED IDEOGRAPH - 0x82F9: 0x50B5, //CJK UNIFIED IDEOGRAPH - 0x82FA: 0x50B6, //CJK UNIFIED IDEOGRAPH - 0x82FB: 0x50B7, //CJK UNIFIED IDEOGRAPH - 0x82FC: 0x50B8, //CJK UNIFIED IDEOGRAPH - 0x82FD: 0x50B9, //CJK UNIFIED IDEOGRAPH - 0x82FE: 0x50BC, //CJK UNIFIED IDEOGRAPH - 0x8340: 0x50BD, //CJK UNIFIED IDEOGRAPH - 0x8341: 0x50BE, //CJK UNIFIED IDEOGRAPH - 0x8342: 0x50BF, //CJK UNIFIED IDEOGRAPH - 0x8343: 0x50C0, //CJK UNIFIED IDEOGRAPH - 0x8344: 0x50C1, //CJK UNIFIED IDEOGRAPH - 0x8345: 0x50C2, //CJK UNIFIED IDEOGRAPH - 0x8346: 0x50C3, //CJK UNIFIED IDEOGRAPH - 0x8347: 0x50C4, //CJK UNIFIED IDEOGRAPH - 0x8348: 0x50C5, //CJK UNIFIED IDEOGRAPH - 0x8349: 0x50C6, //CJK UNIFIED IDEOGRAPH - 0x834A: 0x50C7, //CJK UNIFIED IDEOGRAPH - 0x834B: 0x50C8, //CJK UNIFIED IDEOGRAPH - 0x834C: 0x50C9, //CJK UNIFIED IDEOGRAPH - 0x834D: 0x50CA, //CJK UNIFIED IDEOGRAPH - 0x834E: 0x50CB, //CJK UNIFIED IDEOGRAPH - 0x834F: 0x50CC, //CJK UNIFIED IDEOGRAPH - 0x8350: 0x50CD, //CJK UNIFIED IDEOGRAPH - 0x8351: 0x50CE, //CJK UNIFIED IDEOGRAPH - 0x8352: 0x50D0, //CJK UNIFIED IDEOGRAPH - 0x8353: 0x50D1, //CJK UNIFIED IDEOGRAPH - 0x8354: 0x50D2, //CJK UNIFIED IDEOGRAPH - 0x8355: 0x50D3, //CJK UNIFIED IDEOGRAPH - 0x8356: 0x50D4, //CJK UNIFIED IDEOGRAPH - 0x8357: 0x50D5, //CJK UNIFIED IDEOGRAPH - 0x8358: 0x50D7, //CJK UNIFIED IDEOGRAPH - 0x8359: 0x50D8, //CJK UNIFIED IDEOGRAPH - 0x835A: 0x50D9, //CJK UNIFIED IDEOGRAPH - 0x835B: 0x50DB, //CJK UNIFIED IDEOGRAPH - 0x835C: 0x50DC, //CJK UNIFIED IDEOGRAPH - 0x835D: 0x50DD, //CJK UNIFIED IDEOGRAPH - 0x835E: 0x50DE, //CJK UNIFIED IDEOGRAPH - 0x835F: 0x50DF, //CJK UNIFIED IDEOGRAPH - 0x8360: 0x50E0, //CJK UNIFIED IDEOGRAPH - 0x8361: 0x50E1, //CJK UNIFIED IDEOGRAPH - 0x8362: 0x50E2, //CJK UNIFIED IDEOGRAPH - 0x8363: 0x50E3, //CJK UNIFIED IDEOGRAPH - 0x8364: 0x50E4, //CJK UNIFIED IDEOGRAPH - 0x8365: 0x50E5, //CJK UNIFIED IDEOGRAPH - 0x8366: 0x50E8, //CJK UNIFIED IDEOGRAPH - 0x8367: 0x50E9, //CJK UNIFIED IDEOGRAPH - 0x8368: 0x50EA, //CJK UNIFIED IDEOGRAPH - 0x8369: 0x50EB, //CJK UNIFIED IDEOGRAPH - 0x836A: 0x50EF, //CJK UNIFIED IDEOGRAPH - 0x836B: 0x50F0, //CJK UNIFIED IDEOGRAPH - 0x836C: 0x50F1, //CJK UNIFIED IDEOGRAPH - 0x836D: 0x50F2, //CJK UNIFIED IDEOGRAPH - 0x836E: 0x50F4, //CJK UNIFIED IDEOGRAPH - 0x836F: 0x50F6, //CJK UNIFIED IDEOGRAPH - 0x8370: 0x50F7, //CJK UNIFIED IDEOGRAPH - 0x8371: 0x50F8, //CJK UNIFIED IDEOGRAPH - 0x8372: 0x50F9, //CJK UNIFIED IDEOGRAPH - 0x8373: 0x50FA, //CJK UNIFIED IDEOGRAPH - 0x8374: 0x50FC, //CJK UNIFIED IDEOGRAPH - 0x8375: 0x50FD, //CJK UNIFIED IDEOGRAPH - 0x8376: 0x50FE, //CJK UNIFIED IDEOGRAPH - 0x8377: 0x50FF, //CJK UNIFIED IDEOGRAPH - 0x8378: 0x5100, //CJK UNIFIED IDEOGRAPH - 0x8379: 0x5101, //CJK UNIFIED IDEOGRAPH - 0x837A: 0x5102, //CJK UNIFIED IDEOGRAPH - 0x837B: 0x5103, //CJK UNIFIED IDEOGRAPH - 0x837C: 0x5104, //CJK UNIFIED IDEOGRAPH - 0x837D: 0x5105, //CJK UNIFIED IDEOGRAPH - 0x837E: 0x5108, //CJK UNIFIED IDEOGRAPH - 0x8380: 0x5109, //CJK UNIFIED IDEOGRAPH - 0x8381: 0x510A, //CJK UNIFIED IDEOGRAPH - 0x8382: 0x510C, //CJK UNIFIED IDEOGRAPH - 0x8383: 0x510D, //CJK UNIFIED IDEOGRAPH - 0x8384: 0x510E, //CJK UNIFIED IDEOGRAPH - 0x8385: 0x510F, //CJK UNIFIED IDEOGRAPH - 0x8386: 0x5110, //CJK UNIFIED IDEOGRAPH - 0x8387: 0x5111, //CJK UNIFIED IDEOGRAPH - 0x8388: 0x5113, //CJK UNIFIED IDEOGRAPH - 0x8389: 0x5114, //CJK UNIFIED IDEOGRAPH - 0x838A: 0x5115, //CJK UNIFIED IDEOGRAPH - 0x838B: 0x5116, //CJK UNIFIED IDEOGRAPH - 0x838C: 0x5117, //CJK UNIFIED IDEOGRAPH - 0x838D: 0x5118, //CJK UNIFIED IDEOGRAPH - 0x838E: 0x5119, //CJK UNIFIED IDEOGRAPH - 0x838F: 0x511A, //CJK UNIFIED IDEOGRAPH - 0x8390: 0x511B, //CJK UNIFIED IDEOGRAPH - 0x8391: 0x511C, //CJK UNIFIED IDEOGRAPH - 0x8392: 0x511D, //CJK UNIFIED IDEOGRAPH - 0x8393: 0x511E, //CJK UNIFIED IDEOGRAPH - 0x8394: 0x511F, //CJK UNIFIED IDEOGRAPH - 0x8395: 0x5120, //CJK UNIFIED IDEOGRAPH - 0x8396: 0x5122, //CJK UNIFIED IDEOGRAPH - 0x8397: 0x5123, //CJK UNIFIED IDEOGRAPH - 0x8398: 0x5124, //CJK UNIFIED IDEOGRAPH - 0x8399: 0x5125, //CJK UNIFIED IDEOGRAPH - 0x839A: 0x5126, //CJK UNIFIED IDEOGRAPH - 0x839B: 0x5127, //CJK UNIFIED IDEOGRAPH - 0x839C: 0x5128, //CJK UNIFIED IDEOGRAPH - 0x839D: 0x5129, //CJK UNIFIED IDEOGRAPH - 0x839E: 0x512A, //CJK UNIFIED IDEOGRAPH - 0x839F: 0x512B, //CJK UNIFIED IDEOGRAPH - 0x83A0: 0x512C, //CJK UNIFIED IDEOGRAPH - 0x83A1: 0x512D, //CJK UNIFIED IDEOGRAPH - 0x83A2: 0x512E, //CJK UNIFIED IDEOGRAPH - 0x83A3: 0x512F, //CJK UNIFIED IDEOGRAPH - 0x83A4: 0x5130, //CJK UNIFIED IDEOGRAPH - 0x83A5: 0x5131, //CJK UNIFIED IDEOGRAPH - 0x83A6: 0x5132, //CJK UNIFIED IDEOGRAPH - 0x83A7: 0x5133, //CJK UNIFIED IDEOGRAPH - 0x83A8: 0x5134, //CJK UNIFIED IDEOGRAPH - 0x83A9: 0x5135, //CJK UNIFIED IDEOGRAPH - 0x83AA: 0x5136, //CJK UNIFIED IDEOGRAPH - 0x83AB: 0x5137, //CJK UNIFIED IDEOGRAPH - 0x83AC: 0x5138, //CJK UNIFIED IDEOGRAPH - 0x83AD: 0x5139, //CJK UNIFIED IDEOGRAPH - 0x83AE: 0x513A, //CJK UNIFIED IDEOGRAPH - 0x83AF: 0x513B, //CJK UNIFIED IDEOGRAPH - 0x83B0: 0x513C, //CJK UNIFIED IDEOGRAPH - 0x83B1: 0x513D, //CJK UNIFIED IDEOGRAPH - 0x83B2: 0x513E, //CJK UNIFIED IDEOGRAPH - 0x83B3: 0x5142, //CJK UNIFIED IDEOGRAPH - 0x83B4: 0x5147, //CJK UNIFIED IDEOGRAPH - 0x83B5: 0x514A, //CJK UNIFIED IDEOGRAPH - 0x83B6: 0x514C, //CJK UNIFIED IDEOGRAPH - 0x83B7: 0x514E, //CJK UNIFIED IDEOGRAPH - 0x83B8: 0x514F, //CJK UNIFIED IDEOGRAPH - 0x83B9: 0x5150, //CJK UNIFIED IDEOGRAPH - 0x83BA: 0x5152, //CJK UNIFIED IDEOGRAPH - 0x83BB: 0x5153, //CJK UNIFIED IDEOGRAPH - 0x83BC: 0x5157, //CJK UNIFIED IDEOGRAPH - 0x83BD: 0x5158, //CJK UNIFIED IDEOGRAPH - 0x83BE: 0x5159, //CJK UNIFIED IDEOGRAPH - 0x83BF: 0x515B, //CJK UNIFIED IDEOGRAPH - 0x83C0: 0x515D, //CJK UNIFIED IDEOGRAPH - 0x83C1: 0x515E, //CJK UNIFIED IDEOGRAPH - 0x83C2: 0x515F, //CJK UNIFIED IDEOGRAPH - 0x83C3: 0x5160, //CJK UNIFIED IDEOGRAPH - 0x83C4: 0x5161, //CJK UNIFIED IDEOGRAPH - 0x83C5: 0x5163, //CJK UNIFIED IDEOGRAPH - 0x83C6: 0x5164, //CJK UNIFIED IDEOGRAPH - 0x83C7: 0x5166, //CJK UNIFIED IDEOGRAPH - 0x83C8: 0x5167, //CJK UNIFIED IDEOGRAPH - 0x83C9: 0x5169, //CJK UNIFIED IDEOGRAPH - 0x83CA: 0x516A, //CJK UNIFIED IDEOGRAPH - 0x83CB: 0x516F, //CJK UNIFIED IDEOGRAPH - 0x83CC: 0x5172, //CJK UNIFIED IDEOGRAPH - 0x83CD: 0x517A, //CJK UNIFIED IDEOGRAPH - 0x83CE: 0x517E, //CJK UNIFIED IDEOGRAPH - 0x83CF: 0x517F, //CJK UNIFIED IDEOGRAPH - 0x83D0: 0x5183, //CJK UNIFIED IDEOGRAPH - 0x83D1: 0x5184, //CJK UNIFIED IDEOGRAPH - 0x83D2: 0x5186, //CJK UNIFIED IDEOGRAPH - 0x83D3: 0x5187, //CJK UNIFIED IDEOGRAPH - 0x83D4: 0x518A, //CJK UNIFIED IDEOGRAPH - 0x83D5: 0x518B, //CJK UNIFIED IDEOGRAPH - 0x83D6: 0x518E, //CJK UNIFIED IDEOGRAPH - 0x83D7: 0x518F, //CJK UNIFIED IDEOGRAPH - 0x83D8: 0x5190, //CJK UNIFIED IDEOGRAPH - 0x83D9: 0x5191, //CJK UNIFIED IDEOGRAPH - 0x83DA: 0x5193, //CJK UNIFIED IDEOGRAPH - 0x83DB: 0x5194, //CJK UNIFIED IDEOGRAPH - 0x83DC: 0x5198, //CJK UNIFIED IDEOGRAPH - 0x83DD: 0x519A, //CJK UNIFIED IDEOGRAPH - 0x83DE: 0x519D, //CJK UNIFIED IDEOGRAPH - 0x83DF: 0x519E, //CJK UNIFIED IDEOGRAPH - 0x83E0: 0x519F, //CJK UNIFIED IDEOGRAPH - 0x83E1: 0x51A1, //CJK UNIFIED IDEOGRAPH - 0x83E2: 0x51A3, //CJK UNIFIED IDEOGRAPH - 0x83E3: 0x51A6, //CJK UNIFIED IDEOGRAPH - 0x83E4: 0x51A7, //CJK UNIFIED IDEOGRAPH - 0x83E5: 0x51A8, //CJK UNIFIED IDEOGRAPH - 0x83E6: 0x51A9, //CJK UNIFIED IDEOGRAPH - 0x83E7: 0x51AA, //CJK UNIFIED IDEOGRAPH - 0x83E8: 0x51AD, //CJK UNIFIED IDEOGRAPH - 0x83E9: 0x51AE, //CJK UNIFIED IDEOGRAPH - 0x83EA: 0x51B4, //CJK UNIFIED IDEOGRAPH - 0x83EB: 0x51B8, //CJK UNIFIED IDEOGRAPH - 0x83EC: 0x51B9, //CJK UNIFIED IDEOGRAPH - 0x83ED: 0x51BA, //CJK UNIFIED IDEOGRAPH - 0x83EE: 0x51BE, //CJK UNIFIED IDEOGRAPH - 0x83EF: 0x51BF, //CJK UNIFIED IDEOGRAPH - 0x83F0: 0x51C1, //CJK UNIFIED IDEOGRAPH - 0x83F1: 0x51C2, //CJK UNIFIED IDEOGRAPH - 0x83F2: 0x51C3, //CJK UNIFIED IDEOGRAPH - 0x83F3: 0x51C5, //CJK UNIFIED IDEOGRAPH - 0x83F4: 0x51C8, //CJK UNIFIED IDEOGRAPH - 0x83F5: 0x51CA, //CJK UNIFIED IDEOGRAPH - 0x83F6: 0x51CD, //CJK UNIFIED IDEOGRAPH - 0x83F7: 0x51CE, //CJK UNIFIED IDEOGRAPH - 0x83F8: 0x51D0, //CJK UNIFIED IDEOGRAPH - 0x83F9: 0x51D2, //CJK UNIFIED IDEOGRAPH - 0x83FA: 0x51D3, //CJK UNIFIED IDEOGRAPH - 0x83FB: 0x51D4, //CJK UNIFIED IDEOGRAPH - 0x83FC: 0x51D5, //CJK UNIFIED IDEOGRAPH - 0x83FD: 0x51D6, //CJK UNIFIED IDEOGRAPH - 0x83FE: 0x51D7, //CJK UNIFIED IDEOGRAPH - 0x8440: 0x51D8, //CJK UNIFIED IDEOGRAPH - 0x8441: 0x51D9, //CJK UNIFIED IDEOGRAPH - 0x8442: 0x51DA, //CJK UNIFIED IDEOGRAPH - 0x8443: 0x51DC, //CJK UNIFIED IDEOGRAPH - 0x8444: 0x51DE, //CJK UNIFIED IDEOGRAPH - 0x8445: 0x51DF, //CJK UNIFIED IDEOGRAPH - 0x8446: 0x51E2, //CJK UNIFIED IDEOGRAPH - 0x8447: 0x51E3, //CJK UNIFIED IDEOGRAPH - 0x8448: 0x51E5, //CJK UNIFIED IDEOGRAPH - 0x8449: 0x51E6, //CJK UNIFIED IDEOGRAPH - 0x844A: 0x51E7, //CJK UNIFIED IDEOGRAPH - 0x844B: 0x51E8, //CJK UNIFIED IDEOGRAPH - 0x844C: 0x51E9, //CJK UNIFIED IDEOGRAPH - 0x844D: 0x51EA, //CJK UNIFIED IDEOGRAPH - 0x844E: 0x51EC, //CJK UNIFIED IDEOGRAPH - 0x844F: 0x51EE, //CJK UNIFIED IDEOGRAPH - 0x8450: 0x51F1, //CJK UNIFIED IDEOGRAPH - 0x8451: 0x51F2, //CJK UNIFIED IDEOGRAPH - 0x8452: 0x51F4, //CJK UNIFIED IDEOGRAPH - 0x8453: 0x51F7, //CJK UNIFIED IDEOGRAPH - 0x8454: 0x51FE, //CJK UNIFIED IDEOGRAPH - 0x8455: 0x5204, //CJK UNIFIED IDEOGRAPH - 0x8456: 0x5205, //CJK UNIFIED IDEOGRAPH - 0x8457: 0x5209, //CJK UNIFIED IDEOGRAPH - 0x8458: 0x520B, //CJK UNIFIED IDEOGRAPH - 0x8459: 0x520C, //CJK UNIFIED IDEOGRAPH - 0x845A: 0x520F, //CJK UNIFIED IDEOGRAPH - 0x845B: 0x5210, //CJK UNIFIED IDEOGRAPH - 0x845C: 0x5213, //CJK UNIFIED IDEOGRAPH - 0x845D: 0x5214, //CJK UNIFIED IDEOGRAPH - 0x845E: 0x5215, //CJK UNIFIED IDEOGRAPH - 0x845F: 0x521C, //CJK UNIFIED IDEOGRAPH - 0x8460: 0x521E, //CJK UNIFIED IDEOGRAPH - 0x8461: 0x521F, //CJK UNIFIED IDEOGRAPH - 0x8462: 0x5221, //CJK UNIFIED IDEOGRAPH - 0x8463: 0x5222, //CJK UNIFIED IDEOGRAPH - 0x8464: 0x5223, //CJK UNIFIED IDEOGRAPH - 0x8465: 0x5225, //CJK UNIFIED IDEOGRAPH - 0x8466: 0x5226, //CJK UNIFIED IDEOGRAPH - 0x8467: 0x5227, //CJK UNIFIED IDEOGRAPH - 0x8468: 0x522A, //CJK UNIFIED IDEOGRAPH - 0x8469: 0x522C, //CJK UNIFIED IDEOGRAPH - 0x846A: 0x522F, //CJK UNIFIED IDEOGRAPH - 0x846B: 0x5231, //CJK UNIFIED IDEOGRAPH - 0x846C: 0x5232, //CJK UNIFIED IDEOGRAPH - 0x846D: 0x5234, //CJK UNIFIED IDEOGRAPH - 0x846E: 0x5235, //CJK UNIFIED IDEOGRAPH - 0x846F: 0x523C, //CJK UNIFIED IDEOGRAPH - 0x8470: 0x523E, //CJK UNIFIED IDEOGRAPH - 0x8471: 0x5244, //CJK UNIFIED IDEOGRAPH - 0x8472: 0x5245, //CJK UNIFIED IDEOGRAPH - 0x8473: 0x5246, //CJK UNIFIED IDEOGRAPH - 0x8474: 0x5247, //CJK UNIFIED IDEOGRAPH - 0x8475: 0x5248, //CJK UNIFIED IDEOGRAPH - 0x8476: 0x5249, //CJK UNIFIED IDEOGRAPH - 0x8477: 0x524B, //CJK UNIFIED IDEOGRAPH - 0x8478: 0x524E, //CJK UNIFIED IDEOGRAPH - 0x8479: 0x524F, //CJK UNIFIED IDEOGRAPH - 0x847A: 0x5252, //CJK UNIFIED IDEOGRAPH - 0x847B: 0x5253, //CJK UNIFIED IDEOGRAPH - 0x847C: 0x5255, //CJK UNIFIED IDEOGRAPH - 0x847D: 0x5257, //CJK UNIFIED IDEOGRAPH - 0x847E: 0x5258, //CJK UNIFIED IDEOGRAPH - 0x8480: 0x5259, //CJK UNIFIED IDEOGRAPH - 0x8481: 0x525A, //CJK UNIFIED IDEOGRAPH - 0x8482: 0x525B, //CJK UNIFIED IDEOGRAPH - 0x8483: 0x525D, //CJK UNIFIED IDEOGRAPH - 0x8484: 0x525F, //CJK UNIFIED IDEOGRAPH - 0x8485: 0x5260, //CJK UNIFIED IDEOGRAPH - 0x8486: 0x5262, //CJK UNIFIED IDEOGRAPH - 0x8487: 0x5263, //CJK UNIFIED IDEOGRAPH - 0x8488: 0x5264, //CJK UNIFIED IDEOGRAPH - 0x8489: 0x5266, //CJK UNIFIED IDEOGRAPH - 0x848A: 0x5268, //CJK UNIFIED IDEOGRAPH - 0x848B: 0x526B, //CJK UNIFIED IDEOGRAPH - 0x848C: 0x526C, //CJK UNIFIED IDEOGRAPH - 0x848D: 0x526D, //CJK UNIFIED IDEOGRAPH - 0x848E: 0x526E, //CJK UNIFIED IDEOGRAPH - 0x848F: 0x5270, //CJK UNIFIED IDEOGRAPH - 0x8490: 0x5271, //CJK UNIFIED IDEOGRAPH - 0x8491: 0x5273, //CJK UNIFIED IDEOGRAPH - 0x8492: 0x5274, //CJK UNIFIED IDEOGRAPH - 0x8493: 0x5275, //CJK UNIFIED IDEOGRAPH - 0x8494: 0x5276, //CJK UNIFIED IDEOGRAPH - 0x8495: 0x5277, //CJK UNIFIED IDEOGRAPH - 0x8496: 0x5278, //CJK UNIFIED IDEOGRAPH - 0x8497: 0x5279, //CJK UNIFIED IDEOGRAPH - 0x8498: 0x527A, //CJK UNIFIED IDEOGRAPH - 0x8499: 0x527B, //CJK UNIFIED IDEOGRAPH - 0x849A: 0x527C, //CJK UNIFIED IDEOGRAPH - 0x849B: 0x527E, //CJK UNIFIED IDEOGRAPH - 0x849C: 0x5280, //CJK UNIFIED IDEOGRAPH - 0x849D: 0x5283, //CJK UNIFIED IDEOGRAPH - 0x849E: 0x5284, //CJK UNIFIED IDEOGRAPH - 0x849F: 0x5285, //CJK UNIFIED IDEOGRAPH - 0x84A0: 0x5286, //CJK UNIFIED IDEOGRAPH - 0x84A1: 0x5287, //CJK UNIFIED IDEOGRAPH - 0x84A2: 0x5289, //CJK UNIFIED IDEOGRAPH - 0x84A3: 0x528A, //CJK UNIFIED IDEOGRAPH - 0x84A4: 0x528B, //CJK UNIFIED IDEOGRAPH - 0x84A5: 0x528C, //CJK UNIFIED IDEOGRAPH - 0x84A6: 0x528D, //CJK UNIFIED IDEOGRAPH - 0x84A7: 0x528E, //CJK UNIFIED IDEOGRAPH - 0x84A8: 0x528F, //CJK UNIFIED IDEOGRAPH - 0x84A9: 0x5291, //CJK UNIFIED IDEOGRAPH - 0x84AA: 0x5292, //CJK UNIFIED IDEOGRAPH - 0x84AB: 0x5294, //CJK UNIFIED IDEOGRAPH - 0x84AC: 0x5295, //CJK UNIFIED IDEOGRAPH - 0x84AD: 0x5296, //CJK UNIFIED IDEOGRAPH - 0x84AE: 0x5297, //CJK UNIFIED IDEOGRAPH - 0x84AF: 0x5298, //CJK UNIFIED IDEOGRAPH - 0x84B0: 0x5299, //CJK UNIFIED IDEOGRAPH - 0x84B1: 0x529A, //CJK UNIFIED IDEOGRAPH - 0x84B2: 0x529C, //CJK UNIFIED IDEOGRAPH - 0x84B3: 0x52A4, //CJK UNIFIED IDEOGRAPH - 0x84B4: 0x52A5, //CJK UNIFIED IDEOGRAPH - 0x84B5: 0x52A6, //CJK UNIFIED IDEOGRAPH - 0x84B6: 0x52A7, //CJK UNIFIED IDEOGRAPH - 0x84B7: 0x52AE, //CJK UNIFIED IDEOGRAPH - 0x84B8: 0x52AF, //CJK UNIFIED IDEOGRAPH - 0x84B9: 0x52B0, //CJK UNIFIED IDEOGRAPH - 0x84BA: 0x52B4, //CJK UNIFIED IDEOGRAPH - 0x84BB: 0x52B5, //CJK UNIFIED IDEOGRAPH - 0x84BC: 0x52B6, //CJK UNIFIED IDEOGRAPH - 0x84BD: 0x52B7, //CJK UNIFIED IDEOGRAPH - 0x84BE: 0x52B8, //CJK UNIFIED IDEOGRAPH - 0x84BF: 0x52B9, //CJK UNIFIED IDEOGRAPH - 0x84C0: 0x52BA, //CJK UNIFIED IDEOGRAPH - 0x84C1: 0x52BB, //CJK UNIFIED IDEOGRAPH - 0x84C2: 0x52BC, //CJK UNIFIED IDEOGRAPH - 0x84C3: 0x52BD, //CJK UNIFIED IDEOGRAPH - 0x84C4: 0x52C0, //CJK UNIFIED IDEOGRAPH - 0x84C5: 0x52C1, //CJK UNIFIED IDEOGRAPH - 0x84C6: 0x52C2, //CJK UNIFIED IDEOGRAPH - 0x84C7: 0x52C4, //CJK UNIFIED IDEOGRAPH - 0x84C8: 0x52C5, //CJK UNIFIED IDEOGRAPH - 0x84C9: 0x52C6, //CJK UNIFIED IDEOGRAPH - 0x84CA: 0x52C8, //CJK UNIFIED IDEOGRAPH - 0x84CB: 0x52CA, //CJK UNIFIED IDEOGRAPH - 0x84CC: 0x52CC, //CJK UNIFIED IDEOGRAPH - 0x84CD: 0x52CD, //CJK UNIFIED IDEOGRAPH - 0x84CE: 0x52CE, //CJK UNIFIED IDEOGRAPH - 0x84CF: 0x52CF, //CJK UNIFIED IDEOGRAPH - 0x84D0: 0x52D1, //CJK UNIFIED IDEOGRAPH - 0x84D1: 0x52D3, //CJK UNIFIED IDEOGRAPH - 0x84D2: 0x52D4, //CJK UNIFIED IDEOGRAPH - 0x84D3: 0x52D5, //CJK UNIFIED IDEOGRAPH - 0x84D4: 0x52D7, //CJK UNIFIED IDEOGRAPH - 0x84D5: 0x52D9, //CJK UNIFIED IDEOGRAPH - 0x84D6: 0x52DA, //CJK UNIFIED IDEOGRAPH - 0x84D7: 0x52DB, //CJK UNIFIED IDEOGRAPH - 0x84D8: 0x52DC, //CJK UNIFIED IDEOGRAPH - 0x84D9: 0x52DD, //CJK UNIFIED IDEOGRAPH - 0x84DA: 0x52DE, //CJK UNIFIED IDEOGRAPH - 0x84DB: 0x52E0, //CJK UNIFIED IDEOGRAPH - 0x84DC: 0x52E1, //CJK UNIFIED IDEOGRAPH - 0x84DD: 0x52E2, //CJK UNIFIED IDEOGRAPH - 0x84DE: 0x52E3, //CJK UNIFIED IDEOGRAPH - 0x84DF: 0x52E5, //CJK UNIFIED IDEOGRAPH - 0x84E0: 0x52E6, //CJK UNIFIED IDEOGRAPH - 0x84E1: 0x52E7, //CJK UNIFIED IDEOGRAPH - 0x84E2: 0x52E8, //CJK UNIFIED IDEOGRAPH - 0x84E3: 0x52E9, //CJK UNIFIED IDEOGRAPH - 0x84E4: 0x52EA, //CJK UNIFIED IDEOGRAPH - 0x84E5: 0x52EB, //CJK UNIFIED IDEOGRAPH - 0x84E6: 0x52EC, //CJK UNIFIED IDEOGRAPH - 0x84E7: 0x52ED, //CJK UNIFIED IDEOGRAPH - 0x84E8: 0x52EE, //CJK UNIFIED IDEOGRAPH - 0x84E9: 0x52EF, //CJK UNIFIED IDEOGRAPH - 0x84EA: 0x52F1, //CJK UNIFIED IDEOGRAPH - 0x84EB: 0x52F2, //CJK UNIFIED IDEOGRAPH - 0x84EC: 0x52F3, //CJK UNIFIED IDEOGRAPH - 0x84ED: 0x52F4, //CJK UNIFIED IDEOGRAPH - 0x84EE: 0x52F5, //CJK UNIFIED IDEOGRAPH - 0x84EF: 0x52F6, //CJK UNIFIED IDEOGRAPH - 0x84F0: 0x52F7, //CJK UNIFIED IDEOGRAPH - 0x84F1: 0x52F8, //CJK UNIFIED IDEOGRAPH - 0x84F2: 0x52FB, //CJK UNIFIED IDEOGRAPH - 0x84F3: 0x52FC, //CJK UNIFIED IDEOGRAPH - 0x84F4: 0x52FD, //CJK UNIFIED IDEOGRAPH - 0x84F5: 0x5301, //CJK UNIFIED IDEOGRAPH - 0x84F6: 0x5302, //CJK UNIFIED IDEOGRAPH - 0x84F7: 0x5303, //CJK UNIFIED IDEOGRAPH - 0x84F8: 0x5304, //CJK UNIFIED IDEOGRAPH - 0x84F9: 0x5307, //CJK UNIFIED IDEOGRAPH - 0x84FA: 0x5309, //CJK UNIFIED IDEOGRAPH - 0x84FB: 0x530A, //CJK UNIFIED IDEOGRAPH - 0x84FC: 0x530B, //CJK UNIFIED IDEOGRAPH - 0x84FD: 0x530C, //CJK UNIFIED IDEOGRAPH - 0x84FE: 0x530E, //CJK UNIFIED IDEOGRAPH - 0x8540: 0x5311, //CJK UNIFIED IDEOGRAPH - 0x8541: 0x5312, //CJK UNIFIED IDEOGRAPH - 0x8542: 0x5313, //CJK UNIFIED IDEOGRAPH - 0x8543: 0x5314, //CJK UNIFIED IDEOGRAPH - 0x8544: 0x5318, //CJK UNIFIED IDEOGRAPH - 0x8545: 0x531B, //CJK UNIFIED IDEOGRAPH - 0x8546: 0x531C, //CJK UNIFIED IDEOGRAPH - 0x8547: 0x531E, //CJK UNIFIED IDEOGRAPH - 0x8548: 0x531F, //CJK UNIFIED IDEOGRAPH - 0x8549: 0x5322, //CJK UNIFIED IDEOGRAPH - 0x854A: 0x5324, //CJK UNIFIED IDEOGRAPH - 0x854B: 0x5325, //CJK UNIFIED IDEOGRAPH - 0x854C: 0x5327, //CJK UNIFIED IDEOGRAPH - 0x854D: 0x5328, //CJK UNIFIED IDEOGRAPH - 0x854E: 0x5329, //CJK UNIFIED IDEOGRAPH - 0x854F: 0x532B, //CJK UNIFIED IDEOGRAPH - 0x8550: 0x532C, //CJK UNIFIED IDEOGRAPH - 0x8551: 0x532D, //CJK UNIFIED IDEOGRAPH - 0x8552: 0x532F, //CJK UNIFIED IDEOGRAPH - 0x8553: 0x5330, //CJK UNIFIED IDEOGRAPH - 0x8554: 0x5331, //CJK UNIFIED IDEOGRAPH - 0x8555: 0x5332, //CJK UNIFIED IDEOGRAPH - 0x8556: 0x5333, //CJK UNIFIED IDEOGRAPH - 0x8557: 0x5334, //CJK UNIFIED IDEOGRAPH - 0x8558: 0x5335, //CJK UNIFIED IDEOGRAPH - 0x8559: 0x5336, //CJK UNIFIED IDEOGRAPH - 0x855A: 0x5337, //CJK UNIFIED IDEOGRAPH - 0x855B: 0x5338, //CJK UNIFIED IDEOGRAPH - 0x855C: 0x533C, //CJK UNIFIED IDEOGRAPH - 0x855D: 0x533D, //CJK UNIFIED IDEOGRAPH - 0x855E: 0x5340, //CJK UNIFIED IDEOGRAPH - 0x855F: 0x5342, //CJK UNIFIED IDEOGRAPH - 0x8560: 0x5344, //CJK UNIFIED IDEOGRAPH - 0x8561: 0x5346, //CJK UNIFIED IDEOGRAPH - 0x8562: 0x534B, //CJK UNIFIED IDEOGRAPH - 0x8563: 0x534C, //CJK UNIFIED IDEOGRAPH - 0x8564: 0x534D, //CJK UNIFIED IDEOGRAPH - 0x8565: 0x5350, //CJK UNIFIED IDEOGRAPH - 0x8566: 0x5354, //CJK UNIFIED IDEOGRAPH - 0x8567: 0x5358, //CJK UNIFIED IDEOGRAPH - 0x8568: 0x5359, //CJK UNIFIED IDEOGRAPH - 0x8569: 0x535B, //CJK UNIFIED IDEOGRAPH - 0x856A: 0x535D, //CJK UNIFIED IDEOGRAPH - 0x856B: 0x5365, //CJK UNIFIED IDEOGRAPH - 0x856C: 0x5368, //CJK UNIFIED IDEOGRAPH - 0x856D: 0x536A, //CJK UNIFIED IDEOGRAPH - 0x856E: 0x536C, //CJK UNIFIED IDEOGRAPH - 0x856F: 0x536D, //CJK UNIFIED IDEOGRAPH - 0x8570: 0x5372, //CJK UNIFIED IDEOGRAPH - 0x8571: 0x5376, //CJK UNIFIED IDEOGRAPH - 0x8572: 0x5379, //CJK UNIFIED IDEOGRAPH - 0x8573: 0x537B, //CJK UNIFIED IDEOGRAPH - 0x8574: 0x537C, //CJK UNIFIED IDEOGRAPH - 0x8575: 0x537D, //CJK UNIFIED IDEOGRAPH - 0x8576: 0x537E, //CJK UNIFIED IDEOGRAPH - 0x8577: 0x5380, //CJK UNIFIED IDEOGRAPH - 0x8578: 0x5381, //CJK UNIFIED IDEOGRAPH - 0x8579: 0x5383, //CJK UNIFIED IDEOGRAPH - 0x857A: 0x5387, //CJK UNIFIED IDEOGRAPH - 0x857B: 0x5388, //CJK UNIFIED IDEOGRAPH - 0x857C: 0x538A, //CJK UNIFIED IDEOGRAPH - 0x857D: 0x538E, //CJK UNIFIED IDEOGRAPH - 0x857E: 0x538F, //CJK UNIFIED IDEOGRAPH - 0x8580: 0x5390, //CJK UNIFIED IDEOGRAPH - 0x8581: 0x5391, //CJK UNIFIED IDEOGRAPH - 0x8582: 0x5392, //CJK UNIFIED IDEOGRAPH - 0x8583: 0x5393, //CJK UNIFIED IDEOGRAPH - 0x8584: 0x5394, //CJK UNIFIED IDEOGRAPH - 0x8585: 0x5396, //CJK UNIFIED IDEOGRAPH - 0x8586: 0x5397, //CJK UNIFIED IDEOGRAPH - 0x8587: 0x5399, //CJK UNIFIED IDEOGRAPH - 0x8588: 0x539B, //CJK UNIFIED IDEOGRAPH - 0x8589: 0x539C, //CJK UNIFIED IDEOGRAPH - 0x858A: 0x539E, //CJK UNIFIED IDEOGRAPH - 0x858B: 0x53A0, //CJK UNIFIED IDEOGRAPH - 0x858C: 0x53A1, //CJK UNIFIED IDEOGRAPH - 0x858D: 0x53A4, //CJK UNIFIED IDEOGRAPH - 0x858E: 0x53A7, //CJK UNIFIED IDEOGRAPH - 0x858F: 0x53AA, //CJK UNIFIED IDEOGRAPH - 0x8590: 0x53AB, //CJK UNIFIED IDEOGRAPH - 0x8591: 0x53AC, //CJK UNIFIED IDEOGRAPH - 0x8592: 0x53AD, //CJK UNIFIED IDEOGRAPH - 0x8593: 0x53AF, //CJK UNIFIED IDEOGRAPH - 0x8594: 0x53B0, //CJK UNIFIED IDEOGRAPH - 0x8595: 0x53B1, //CJK UNIFIED IDEOGRAPH - 0x8596: 0x53B2, //CJK UNIFIED IDEOGRAPH - 0x8597: 0x53B3, //CJK UNIFIED IDEOGRAPH - 0x8598: 0x53B4, //CJK UNIFIED IDEOGRAPH - 0x8599: 0x53B5, //CJK UNIFIED IDEOGRAPH - 0x859A: 0x53B7, //CJK UNIFIED IDEOGRAPH - 0x859B: 0x53B8, //CJK UNIFIED IDEOGRAPH - 0x859C: 0x53B9, //CJK UNIFIED IDEOGRAPH - 0x859D: 0x53BA, //CJK UNIFIED IDEOGRAPH - 0x859E: 0x53BC, //CJK UNIFIED IDEOGRAPH - 0x859F: 0x53BD, //CJK UNIFIED IDEOGRAPH - 0x85A0: 0x53BE, //CJK UNIFIED IDEOGRAPH - 0x85A1: 0x53C0, //CJK UNIFIED IDEOGRAPH - 0x85A2: 0x53C3, //CJK UNIFIED IDEOGRAPH - 0x85A3: 0x53C4, //CJK UNIFIED IDEOGRAPH - 0x85A4: 0x53C5, //CJK UNIFIED IDEOGRAPH - 0x85A5: 0x53C6, //CJK UNIFIED IDEOGRAPH - 0x85A6: 0x53C7, //CJK UNIFIED IDEOGRAPH - 0x85A7: 0x53CE, //CJK UNIFIED IDEOGRAPH - 0x85A8: 0x53CF, //CJK UNIFIED IDEOGRAPH - 0x85A9: 0x53D0, //CJK UNIFIED IDEOGRAPH - 0x85AA: 0x53D2, //CJK UNIFIED IDEOGRAPH - 0x85AB: 0x53D3, //CJK UNIFIED IDEOGRAPH - 0x85AC: 0x53D5, //CJK UNIFIED IDEOGRAPH - 0x85AD: 0x53DA, //CJK UNIFIED IDEOGRAPH - 0x85AE: 0x53DC, //CJK UNIFIED IDEOGRAPH - 0x85AF: 0x53DD, //CJK UNIFIED IDEOGRAPH - 0x85B0: 0x53DE, //CJK UNIFIED IDEOGRAPH - 0x85B1: 0x53E1, //CJK UNIFIED IDEOGRAPH - 0x85B2: 0x53E2, //CJK UNIFIED IDEOGRAPH - 0x85B3: 0x53E7, //CJK UNIFIED IDEOGRAPH - 0x85B4: 0x53F4, //CJK UNIFIED IDEOGRAPH - 0x85B5: 0x53FA, //CJK UNIFIED IDEOGRAPH - 0x85B6: 0x53FE, //CJK UNIFIED IDEOGRAPH - 0x85B7: 0x53FF, //CJK UNIFIED IDEOGRAPH - 0x85B8: 0x5400, //CJK UNIFIED IDEOGRAPH - 0x85B9: 0x5402, //CJK UNIFIED IDEOGRAPH - 0x85BA: 0x5405, //CJK UNIFIED IDEOGRAPH - 0x85BB: 0x5407, //CJK UNIFIED IDEOGRAPH - 0x85BC: 0x540B, //CJK UNIFIED IDEOGRAPH - 0x85BD: 0x5414, //CJK UNIFIED IDEOGRAPH - 0x85BE: 0x5418, //CJK UNIFIED IDEOGRAPH - 0x85BF: 0x5419, //CJK UNIFIED IDEOGRAPH - 0x85C0: 0x541A, //CJK UNIFIED IDEOGRAPH - 0x85C1: 0x541C, //CJK UNIFIED IDEOGRAPH - 0x85C2: 0x5422, //CJK UNIFIED IDEOGRAPH - 0x85C3: 0x5424, //CJK UNIFIED IDEOGRAPH - 0x85C4: 0x5425, //CJK UNIFIED IDEOGRAPH - 0x85C5: 0x542A, //CJK UNIFIED IDEOGRAPH - 0x85C6: 0x5430, //CJK UNIFIED IDEOGRAPH - 0x85C7: 0x5433, //CJK UNIFIED IDEOGRAPH - 0x85C8: 0x5436, //CJK UNIFIED IDEOGRAPH - 0x85C9: 0x5437, //CJK UNIFIED IDEOGRAPH - 0x85CA: 0x543A, //CJK UNIFIED IDEOGRAPH - 0x85CB: 0x543D, //CJK UNIFIED IDEOGRAPH - 0x85CC: 0x543F, //CJK UNIFIED IDEOGRAPH - 0x85CD: 0x5441, //CJK UNIFIED IDEOGRAPH - 0x85CE: 0x5442, //CJK UNIFIED IDEOGRAPH - 0x85CF: 0x5444, //CJK UNIFIED IDEOGRAPH - 0x85D0: 0x5445, //CJK UNIFIED IDEOGRAPH - 0x85D1: 0x5447, //CJK UNIFIED IDEOGRAPH - 0x85D2: 0x5449, //CJK UNIFIED IDEOGRAPH - 0x85D3: 0x544C, //CJK UNIFIED IDEOGRAPH - 0x85D4: 0x544D, //CJK UNIFIED IDEOGRAPH - 0x85D5: 0x544E, //CJK UNIFIED IDEOGRAPH - 0x85D6: 0x544F, //CJK UNIFIED IDEOGRAPH - 0x85D7: 0x5451, //CJK UNIFIED IDEOGRAPH - 0x85D8: 0x545A, //CJK UNIFIED IDEOGRAPH - 0x85D9: 0x545D, //CJK UNIFIED IDEOGRAPH - 0x85DA: 0x545E, //CJK UNIFIED IDEOGRAPH - 0x85DB: 0x545F, //CJK UNIFIED IDEOGRAPH - 0x85DC: 0x5460, //CJK UNIFIED IDEOGRAPH - 0x85DD: 0x5461, //CJK UNIFIED IDEOGRAPH - 0x85DE: 0x5463, //CJK UNIFIED IDEOGRAPH - 0x85DF: 0x5465, //CJK UNIFIED IDEOGRAPH - 0x85E0: 0x5467, //CJK UNIFIED IDEOGRAPH - 0x85E1: 0x5469, //CJK UNIFIED IDEOGRAPH - 0x85E2: 0x546A, //CJK UNIFIED IDEOGRAPH - 0x85E3: 0x546B, //CJK UNIFIED IDEOGRAPH - 0x85E4: 0x546C, //CJK UNIFIED IDEOGRAPH - 0x85E5: 0x546D, //CJK UNIFIED IDEOGRAPH - 0x85E6: 0x546E, //CJK UNIFIED IDEOGRAPH - 0x85E7: 0x546F, //CJK UNIFIED IDEOGRAPH - 0x85E8: 0x5470, //CJK UNIFIED IDEOGRAPH - 0x85E9: 0x5474, //CJK UNIFIED IDEOGRAPH - 0x85EA: 0x5479, //CJK UNIFIED IDEOGRAPH - 0x85EB: 0x547A, //CJK UNIFIED IDEOGRAPH - 0x85EC: 0x547E, //CJK UNIFIED IDEOGRAPH - 0x85ED: 0x547F, //CJK UNIFIED IDEOGRAPH - 0x85EE: 0x5481, //CJK UNIFIED IDEOGRAPH - 0x85EF: 0x5483, //CJK UNIFIED IDEOGRAPH - 0x85F0: 0x5485, //CJK UNIFIED IDEOGRAPH - 0x85F1: 0x5487, //CJK UNIFIED IDEOGRAPH - 0x85F2: 0x5488, //CJK UNIFIED IDEOGRAPH - 0x85F3: 0x5489, //CJK UNIFIED IDEOGRAPH - 0x85F4: 0x548A, //CJK UNIFIED IDEOGRAPH - 0x85F5: 0x548D, //CJK UNIFIED IDEOGRAPH - 0x85F6: 0x5491, //CJK UNIFIED IDEOGRAPH - 0x85F7: 0x5493, //CJK UNIFIED IDEOGRAPH - 0x85F8: 0x5497, //CJK UNIFIED IDEOGRAPH - 0x85F9: 0x5498, //CJK UNIFIED IDEOGRAPH - 0x85FA: 0x549C, //CJK UNIFIED IDEOGRAPH - 0x85FB: 0x549E, //CJK UNIFIED IDEOGRAPH - 0x85FC: 0x549F, //CJK UNIFIED IDEOGRAPH - 0x85FD: 0x54A0, //CJK UNIFIED IDEOGRAPH - 0x85FE: 0x54A1, //CJK UNIFIED IDEOGRAPH - 0x8640: 0x54A2, //CJK UNIFIED IDEOGRAPH - 0x8641: 0x54A5, //CJK UNIFIED IDEOGRAPH - 0x8642: 0x54AE, //CJK UNIFIED IDEOGRAPH - 0x8643: 0x54B0, //CJK UNIFIED IDEOGRAPH - 0x8644: 0x54B2, //CJK UNIFIED IDEOGRAPH - 0x8645: 0x54B5, //CJK UNIFIED IDEOGRAPH - 0x8646: 0x54B6, //CJK UNIFIED IDEOGRAPH - 0x8647: 0x54B7, //CJK UNIFIED IDEOGRAPH - 0x8648: 0x54B9, //CJK UNIFIED IDEOGRAPH - 0x8649: 0x54BA, //CJK UNIFIED IDEOGRAPH - 0x864A: 0x54BC, //CJK UNIFIED IDEOGRAPH - 0x864B: 0x54BE, //CJK UNIFIED IDEOGRAPH - 0x864C: 0x54C3, //CJK UNIFIED IDEOGRAPH - 0x864D: 0x54C5, //CJK UNIFIED IDEOGRAPH - 0x864E: 0x54CA, //CJK UNIFIED IDEOGRAPH - 0x864F: 0x54CB, //CJK UNIFIED IDEOGRAPH - 0x8650: 0x54D6, //CJK UNIFIED IDEOGRAPH - 0x8651: 0x54D8, //CJK UNIFIED IDEOGRAPH - 0x8652: 0x54DB, //CJK UNIFIED IDEOGRAPH - 0x8653: 0x54E0, //CJK UNIFIED IDEOGRAPH - 0x8654: 0x54E1, //CJK UNIFIED IDEOGRAPH - 0x8655: 0x54E2, //CJK UNIFIED IDEOGRAPH - 0x8656: 0x54E3, //CJK UNIFIED IDEOGRAPH - 0x8657: 0x54E4, //CJK UNIFIED IDEOGRAPH - 0x8658: 0x54EB, //CJK UNIFIED IDEOGRAPH - 0x8659: 0x54EC, //CJK UNIFIED IDEOGRAPH - 0x865A: 0x54EF, //CJK UNIFIED IDEOGRAPH - 0x865B: 0x54F0, //CJK UNIFIED IDEOGRAPH - 0x865C: 0x54F1, //CJK UNIFIED IDEOGRAPH - 0x865D: 0x54F4, //CJK UNIFIED IDEOGRAPH - 0x865E: 0x54F5, //CJK UNIFIED IDEOGRAPH - 0x865F: 0x54F6, //CJK UNIFIED IDEOGRAPH - 0x8660: 0x54F7, //CJK UNIFIED IDEOGRAPH - 0x8661: 0x54F8, //CJK UNIFIED IDEOGRAPH - 0x8662: 0x54F9, //CJK UNIFIED IDEOGRAPH - 0x8663: 0x54FB, //CJK UNIFIED IDEOGRAPH - 0x8664: 0x54FE, //CJK UNIFIED IDEOGRAPH - 0x8665: 0x5500, //CJK UNIFIED IDEOGRAPH - 0x8666: 0x5502, //CJK UNIFIED IDEOGRAPH - 0x8667: 0x5503, //CJK UNIFIED IDEOGRAPH - 0x8668: 0x5504, //CJK UNIFIED IDEOGRAPH - 0x8669: 0x5505, //CJK UNIFIED IDEOGRAPH - 0x866A: 0x5508, //CJK UNIFIED IDEOGRAPH - 0x866B: 0x550A, //CJK UNIFIED IDEOGRAPH - 0x866C: 0x550B, //CJK UNIFIED IDEOGRAPH - 0x866D: 0x550C, //CJK UNIFIED IDEOGRAPH - 0x866E: 0x550D, //CJK UNIFIED IDEOGRAPH - 0x866F: 0x550E, //CJK UNIFIED IDEOGRAPH - 0x8670: 0x5512, //CJK UNIFIED IDEOGRAPH - 0x8671: 0x5513, //CJK UNIFIED IDEOGRAPH - 0x8672: 0x5515, //CJK UNIFIED IDEOGRAPH - 0x8673: 0x5516, //CJK UNIFIED IDEOGRAPH - 0x8674: 0x5517, //CJK UNIFIED IDEOGRAPH - 0x8675: 0x5518, //CJK UNIFIED IDEOGRAPH - 0x8676: 0x5519, //CJK UNIFIED IDEOGRAPH - 0x8677: 0x551A, //CJK UNIFIED IDEOGRAPH - 0x8678: 0x551C, //CJK UNIFIED IDEOGRAPH - 0x8679: 0x551D, //CJK UNIFIED IDEOGRAPH - 0x867A: 0x551E, //CJK UNIFIED IDEOGRAPH - 0x867B: 0x551F, //CJK UNIFIED IDEOGRAPH - 0x867C: 0x5521, //CJK UNIFIED IDEOGRAPH - 0x867D: 0x5525, //CJK UNIFIED IDEOGRAPH - 0x867E: 0x5526, //CJK UNIFIED IDEOGRAPH - 0x8680: 0x5528, //CJK UNIFIED IDEOGRAPH - 0x8681: 0x5529, //CJK UNIFIED IDEOGRAPH - 0x8682: 0x552B, //CJK UNIFIED IDEOGRAPH - 0x8683: 0x552D, //CJK UNIFIED IDEOGRAPH - 0x8684: 0x5532, //CJK UNIFIED IDEOGRAPH - 0x8685: 0x5534, //CJK UNIFIED IDEOGRAPH - 0x8686: 0x5535, //CJK UNIFIED IDEOGRAPH - 0x8687: 0x5536, //CJK UNIFIED IDEOGRAPH - 0x8688: 0x5538, //CJK UNIFIED IDEOGRAPH - 0x8689: 0x5539, //CJK UNIFIED IDEOGRAPH - 0x868A: 0x553A, //CJK UNIFIED IDEOGRAPH - 0x868B: 0x553B, //CJK UNIFIED IDEOGRAPH - 0x868C: 0x553D, //CJK UNIFIED IDEOGRAPH - 0x868D: 0x5540, //CJK UNIFIED IDEOGRAPH - 0x868E: 0x5542, //CJK UNIFIED IDEOGRAPH - 0x868F: 0x5545, //CJK UNIFIED IDEOGRAPH - 0x8690: 0x5547, //CJK UNIFIED IDEOGRAPH - 0x8691: 0x5548, //CJK UNIFIED IDEOGRAPH - 0x8692: 0x554B, //CJK UNIFIED IDEOGRAPH - 0x8693: 0x554C, //CJK UNIFIED IDEOGRAPH - 0x8694: 0x554D, //CJK UNIFIED IDEOGRAPH - 0x8695: 0x554E, //CJK UNIFIED IDEOGRAPH - 0x8696: 0x554F, //CJK UNIFIED IDEOGRAPH - 0x8697: 0x5551, //CJK UNIFIED IDEOGRAPH - 0x8698: 0x5552, //CJK UNIFIED IDEOGRAPH - 0x8699: 0x5553, //CJK UNIFIED IDEOGRAPH - 0x869A: 0x5554, //CJK UNIFIED IDEOGRAPH - 0x869B: 0x5557, //CJK UNIFIED IDEOGRAPH - 0x869C: 0x5558, //CJK UNIFIED IDEOGRAPH - 0x869D: 0x5559, //CJK UNIFIED IDEOGRAPH - 0x869E: 0x555A, //CJK UNIFIED IDEOGRAPH - 0x869F: 0x555B, //CJK UNIFIED IDEOGRAPH - 0x86A0: 0x555D, //CJK UNIFIED IDEOGRAPH - 0x86A1: 0x555E, //CJK UNIFIED IDEOGRAPH - 0x86A2: 0x555F, //CJK UNIFIED IDEOGRAPH - 0x86A3: 0x5560, //CJK UNIFIED IDEOGRAPH - 0x86A4: 0x5562, //CJK UNIFIED IDEOGRAPH - 0x86A5: 0x5563, //CJK UNIFIED IDEOGRAPH - 0x86A6: 0x5568, //CJK UNIFIED IDEOGRAPH - 0x86A7: 0x5569, //CJK UNIFIED IDEOGRAPH - 0x86A8: 0x556B, //CJK UNIFIED IDEOGRAPH - 0x86A9: 0x556F, //CJK UNIFIED IDEOGRAPH - 0x86AA: 0x5570, //CJK UNIFIED IDEOGRAPH - 0x86AB: 0x5571, //CJK UNIFIED IDEOGRAPH - 0x86AC: 0x5572, //CJK UNIFIED IDEOGRAPH - 0x86AD: 0x5573, //CJK UNIFIED IDEOGRAPH - 0x86AE: 0x5574, //CJK UNIFIED IDEOGRAPH - 0x86AF: 0x5579, //CJK UNIFIED IDEOGRAPH - 0x86B0: 0x557A, //CJK UNIFIED IDEOGRAPH - 0x86B1: 0x557D, //CJK UNIFIED IDEOGRAPH - 0x86B2: 0x557F, //CJK UNIFIED IDEOGRAPH - 0x86B3: 0x5585, //CJK UNIFIED IDEOGRAPH - 0x86B4: 0x5586, //CJK UNIFIED IDEOGRAPH - 0x86B5: 0x558C, //CJK UNIFIED IDEOGRAPH - 0x86B6: 0x558D, //CJK UNIFIED IDEOGRAPH - 0x86B7: 0x558E, //CJK UNIFIED IDEOGRAPH - 0x86B8: 0x5590, //CJK UNIFIED IDEOGRAPH - 0x86B9: 0x5592, //CJK UNIFIED IDEOGRAPH - 0x86BA: 0x5593, //CJK UNIFIED IDEOGRAPH - 0x86BB: 0x5595, //CJK UNIFIED IDEOGRAPH - 0x86BC: 0x5596, //CJK UNIFIED IDEOGRAPH - 0x86BD: 0x5597, //CJK UNIFIED IDEOGRAPH - 0x86BE: 0x559A, //CJK UNIFIED IDEOGRAPH - 0x86BF: 0x559B, //CJK UNIFIED IDEOGRAPH - 0x86C0: 0x559E, //CJK UNIFIED IDEOGRAPH - 0x86C1: 0x55A0, //CJK UNIFIED IDEOGRAPH - 0x86C2: 0x55A1, //CJK UNIFIED IDEOGRAPH - 0x86C3: 0x55A2, //CJK UNIFIED IDEOGRAPH - 0x86C4: 0x55A3, //CJK UNIFIED IDEOGRAPH - 0x86C5: 0x55A4, //CJK UNIFIED IDEOGRAPH - 0x86C6: 0x55A5, //CJK UNIFIED IDEOGRAPH - 0x86C7: 0x55A6, //CJK UNIFIED IDEOGRAPH - 0x86C8: 0x55A8, //CJK UNIFIED IDEOGRAPH - 0x86C9: 0x55A9, //CJK UNIFIED IDEOGRAPH - 0x86CA: 0x55AA, //CJK UNIFIED IDEOGRAPH - 0x86CB: 0x55AB, //CJK UNIFIED IDEOGRAPH - 0x86CC: 0x55AC, //CJK UNIFIED IDEOGRAPH - 0x86CD: 0x55AD, //CJK UNIFIED IDEOGRAPH - 0x86CE: 0x55AE, //CJK UNIFIED IDEOGRAPH - 0x86CF: 0x55AF, //CJK UNIFIED IDEOGRAPH - 0x86D0: 0x55B0, //CJK UNIFIED IDEOGRAPH - 0x86D1: 0x55B2, //CJK UNIFIED IDEOGRAPH - 0x86D2: 0x55B4, //CJK UNIFIED IDEOGRAPH - 0x86D3: 0x55B6, //CJK UNIFIED IDEOGRAPH - 0x86D4: 0x55B8, //CJK UNIFIED IDEOGRAPH - 0x86D5: 0x55BA, //CJK UNIFIED IDEOGRAPH - 0x86D6: 0x55BC, //CJK UNIFIED IDEOGRAPH - 0x86D7: 0x55BF, //CJK UNIFIED IDEOGRAPH - 0x86D8: 0x55C0, //CJK UNIFIED IDEOGRAPH - 0x86D9: 0x55C1, //CJK UNIFIED IDEOGRAPH - 0x86DA: 0x55C2, //CJK UNIFIED IDEOGRAPH - 0x86DB: 0x55C3, //CJK UNIFIED IDEOGRAPH - 0x86DC: 0x55C6, //CJK UNIFIED IDEOGRAPH - 0x86DD: 0x55C7, //CJK UNIFIED IDEOGRAPH - 0x86DE: 0x55C8, //CJK UNIFIED IDEOGRAPH - 0x86DF: 0x55CA, //CJK UNIFIED IDEOGRAPH - 0x86E0: 0x55CB, //CJK UNIFIED IDEOGRAPH - 0x86E1: 0x55CE, //CJK UNIFIED IDEOGRAPH - 0x86E2: 0x55CF, //CJK UNIFIED IDEOGRAPH - 0x86E3: 0x55D0, //CJK UNIFIED IDEOGRAPH - 0x86E4: 0x55D5, //CJK UNIFIED IDEOGRAPH - 0x86E5: 0x55D7, //CJK UNIFIED IDEOGRAPH - 0x86E6: 0x55D8, //CJK UNIFIED IDEOGRAPH - 0x86E7: 0x55D9, //CJK UNIFIED IDEOGRAPH - 0x86E8: 0x55DA, //CJK UNIFIED IDEOGRAPH - 0x86E9: 0x55DB, //CJK UNIFIED IDEOGRAPH - 0x86EA: 0x55DE, //CJK UNIFIED IDEOGRAPH - 0x86EB: 0x55E0, //CJK UNIFIED IDEOGRAPH - 0x86EC: 0x55E2, //CJK UNIFIED IDEOGRAPH - 0x86ED: 0x55E7, //CJK UNIFIED IDEOGRAPH - 0x86EE: 0x55E9, //CJK UNIFIED IDEOGRAPH - 0x86EF: 0x55ED, //CJK UNIFIED IDEOGRAPH - 0x86F0: 0x55EE, //CJK UNIFIED IDEOGRAPH - 0x86F1: 0x55F0, //CJK UNIFIED IDEOGRAPH - 0x86F2: 0x55F1, //CJK UNIFIED IDEOGRAPH - 0x86F3: 0x55F4, //CJK UNIFIED IDEOGRAPH - 0x86F4: 0x55F6, //CJK UNIFIED IDEOGRAPH - 0x86F5: 0x55F8, //CJK UNIFIED IDEOGRAPH - 0x86F6: 0x55F9, //CJK UNIFIED IDEOGRAPH - 0x86F7: 0x55FA, //CJK UNIFIED IDEOGRAPH - 0x86F8: 0x55FB, //CJK UNIFIED IDEOGRAPH - 0x86F9: 0x55FC, //CJK UNIFIED IDEOGRAPH - 0x86FA: 0x55FF, //CJK UNIFIED IDEOGRAPH - 0x86FB: 0x5602, //CJK UNIFIED IDEOGRAPH - 0x86FC: 0x5603, //CJK UNIFIED IDEOGRAPH - 0x86FD: 0x5604, //CJK UNIFIED IDEOGRAPH - 0x86FE: 0x5605, //CJK UNIFIED IDEOGRAPH - 0x8740: 0x5606, //CJK UNIFIED IDEOGRAPH - 0x8741: 0x5607, //CJK UNIFIED IDEOGRAPH - 0x8742: 0x560A, //CJK UNIFIED IDEOGRAPH - 0x8743: 0x560B, //CJK UNIFIED IDEOGRAPH - 0x8744: 0x560D, //CJK UNIFIED IDEOGRAPH - 0x8745: 0x5610, //CJK UNIFIED IDEOGRAPH - 0x8746: 0x5611, //CJK UNIFIED IDEOGRAPH - 0x8747: 0x5612, //CJK UNIFIED IDEOGRAPH - 0x8748: 0x5613, //CJK UNIFIED IDEOGRAPH - 0x8749: 0x5614, //CJK UNIFIED IDEOGRAPH - 0x874A: 0x5615, //CJK UNIFIED IDEOGRAPH - 0x874B: 0x5616, //CJK UNIFIED IDEOGRAPH - 0x874C: 0x5617, //CJK UNIFIED IDEOGRAPH - 0x874D: 0x5619, //CJK UNIFIED IDEOGRAPH - 0x874E: 0x561A, //CJK UNIFIED IDEOGRAPH - 0x874F: 0x561C, //CJK UNIFIED IDEOGRAPH - 0x8750: 0x561D, //CJK UNIFIED IDEOGRAPH - 0x8751: 0x5620, //CJK UNIFIED IDEOGRAPH - 0x8752: 0x5621, //CJK UNIFIED IDEOGRAPH - 0x8753: 0x5622, //CJK UNIFIED IDEOGRAPH - 0x8754: 0x5625, //CJK UNIFIED IDEOGRAPH - 0x8755: 0x5626, //CJK UNIFIED IDEOGRAPH - 0x8756: 0x5628, //CJK UNIFIED IDEOGRAPH - 0x8757: 0x5629, //CJK UNIFIED IDEOGRAPH - 0x8758: 0x562A, //CJK UNIFIED IDEOGRAPH - 0x8759: 0x562B, //CJK UNIFIED IDEOGRAPH - 0x875A: 0x562E, //CJK UNIFIED IDEOGRAPH - 0x875B: 0x562F, //CJK UNIFIED IDEOGRAPH - 0x875C: 0x5630, //CJK UNIFIED IDEOGRAPH - 0x875D: 0x5633, //CJK UNIFIED IDEOGRAPH - 0x875E: 0x5635, //CJK UNIFIED IDEOGRAPH - 0x875F: 0x5637, //CJK UNIFIED IDEOGRAPH - 0x8760: 0x5638, //CJK UNIFIED IDEOGRAPH - 0x8761: 0x563A, //CJK UNIFIED IDEOGRAPH - 0x8762: 0x563C, //CJK UNIFIED IDEOGRAPH - 0x8763: 0x563D, //CJK UNIFIED IDEOGRAPH - 0x8764: 0x563E, //CJK UNIFIED IDEOGRAPH - 0x8765: 0x5640, //CJK UNIFIED IDEOGRAPH - 0x8766: 0x5641, //CJK UNIFIED IDEOGRAPH - 0x8767: 0x5642, //CJK UNIFIED IDEOGRAPH - 0x8768: 0x5643, //CJK UNIFIED IDEOGRAPH - 0x8769: 0x5644, //CJK UNIFIED IDEOGRAPH - 0x876A: 0x5645, //CJK UNIFIED IDEOGRAPH - 0x876B: 0x5646, //CJK UNIFIED IDEOGRAPH - 0x876C: 0x5647, //CJK UNIFIED IDEOGRAPH - 0x876D: 0x5648, //CJK UNIFIED IDEOGRAPH - 0x876E: 0x5649, //CJK UNIFIED IDEOGRAPH - 0x876F: 0x564A, //CJK UNIFIED IDEOGRAPH - 0x8770: 0x564B, //CJK UNIFIED IDEOGRAPH - 0x8771: 0x564F, //CJK UNIFIED IDEOGRAPH - 0x8772: 0x5650, //CJK UNIFIED IDEOGRAPH - 0x8773: 0x5651, //CJK UNIFIED IDEOGRAPH - 0x8774: 0x5652, //CJK UNIFIED IDEOGRAPH - 0x8775: 0x5653, //CJK UNIFIED IDEOGRAPH - 0x8776: 0x5655, //CJK UNIFIED IDEOGRAPH - 0x8777: 0x5656, //CJK UNIFIED IDEOGRAPH - 0x8778: 0x565A, //CJK UNIFIED IDEOGRAPH - 0x8779: 0x565B, //CJK UNIFIED IDEOGRAPH - 0x877A: 0x565D, //CJK UNIFIED IDEOGRAPH - 0x877B: 0x565E, //CJK UNIFIED IDEOGRAPH - 0x877C: 0x565F, //CJK UNIFIED IDEOGRAPH - 0x877D: 0x5660, //CJK UNIFIED IDEOGRAPH - 0x877E: 0x5661, //CJK UNIFIED IDEOGRAPH - 0x8780: 0x5663, //CJK UNIFIED IDEOGRAPH - 0x8781: 0x5665, //CJK UNIFIED IDEOGRAPH - 0x8782: 0x5666, //CJK UNIFIED IDEOGRAPH - 0x8783: 0x5667, //CJK UNIFIED IDEOGRAPH - 0x8784: 0x566D, //CJK UNIFIED IDEOGRAPH - 0x8785: 0x566E, //CJK UNIFIED IDEOGRAPH - 0x8786: 0x566F, //CJK UNIFIED IDEOGRAPH - 0x8787: 0x5670, //CJK UNIFIED IDEOGRAPH - 0x8788: 0x5672, //CJK UNIFIED IDEOGRAPH - 0x8789: 0x5673, //CJK UNIFIED IDEOGRAPH - 0x878A: 0x5674, //CJK UNIFIED IDEOGRAPH - 0x878B: 0x5675, //CJK UNIFIED IDEOGRAPH - 0x878C: 0x5677, //CJK UNIFIED IDEOGRAPH - 0x878D: 0x5678, //CJK UNIFIED IDEOGRAPH - 0x878E: 0x5679, //CJK UNIFIED IDEOGRAPH - 0x878F: 0x567A, //CJK UNIFIED IDEOGRAPH - 0x8790: 0x567D, //CJK UNIFIED IDEOGRAPH - 0x8791: 0x567E, //CJK UNIFIED IDEOGRAPH - 0x8792: 0x567F, //CJK UNIFIED IDEOGRAPH - 0x8793: 0x5680, //CJK UNIFIED IDEOGRAPH - 0x8794: 0x5681, //CJK UNIFIED IDEOGRAPH - 0x8795: 0x5682, //CJK UNIFIED IDEOGRAPH - 0x8796: 0x5683, //CJK UNIFIED IDEOGRAPH - 0x8797: 0x5684, //CJK UNIFIED IDEOGRAPH - 0x8798: 0x5687, //CJK UNIFIED IDEOGRAPH - 0x8799: 0x5688, //CJK UNIFIED IDEOGRAPH - 0x879A: 0x5689, //CJK UNIFIED IDEOGRAPH - 0x879B: 0x568A, //CJK UNIFIED IDEOGRAPH - 0x879C: 0x568B, //CJK UNIFIED IDEOGRAPH - 0x879D: 0x568C, //CJK UNIFIED IDEOGRAPH - 0x879E: 0x568D, //CJK UNIFIED IDEOGRAPH - 0x879F: 0x5690, //CJK UNIFIED IDEOGRAPH - 0x87A0: 0x5691, //CJK UNIFIED IDEOGRAPH - 0x87A1: 0x5692, //CJK UNIFIED IDEOGRAPH - 0x87A2: 0x5694, //CJK UNIFIED IDEOGRAPH - 0x87A3: 0x5695, //CJK UNIFIED IDEOGRAPH - 0x87A4: 0x5696, //CJK UNIFIED IDEOGRAPH - 0x87A5: 0x5697, //CJK UNIFIED IDEOGRAPH - 0x87A6: 0x5698, //CJK UNIFIED IDEOGRAPH - 0x87A7: 0x5699, //CJK UNIFIED IDEOGRAPH - 0x87A8: 0x569A, //CJK UNIFIED IDEOGRAPH - 0x87A9: 0x569B, //CJK UNIFIED IDEOGRAPH - 0x87AA: 0x569C, //CJK UNIFIED IDEOGRAPH - 0x87AB: 0x569D, //CJK UNIFIED IDEOGRAPH - 0x87AC: 0x569E, //CJK UNIFIED IDEOGRAPH - 0x87AD: 0x569F, //CJK UNIFIED IDEOGRAPH - 0x87AE: 0x56A0, //CJK UNIFIED IDEOGRAPH - 0x87AF: 0x56A1, //CJK UNIFIED IDEOGRAPH - 0x87B0: 0x56A2, //CJK UNIFIED IDEOGRAPH - 0x87B1: 0x56A4, //CJK UNIFIED IDEOGRAPH - 0x87B2: 0x56A5, //CJK UNIFIED IDEOGRAPH - 0x87B3: 0x56A6, //CJK UNIFIED IDEOGRAPH - 0x87B4: 0x56A7, //CJK UNIFIED IDEOGRAPH - 0x87B5: 0x56A8, //CJK UNIFIED IDEOGRAPH - 0x87B6: 0x56A9, //CJK UNIFIED IDEOGRAPH - 0x87B7: 0x56AA, //CJK UNIFIED IDEOGRAPH - 0x87B8: 0x56AB, //CJK UNIFIED IDEOGRAPH - 0x87B9: 0x56AC, //CJK UNIFIED IDEOGRAPH - 0x87BA: 0x56AD, //CJK UNIFIED IDEOGRAPH - 0x87BB: 0x56AE, //CJK UNIFIED IDEOGRAPH - 0x87BC: 0x56B0, //CJK UNIFIED IDEOGRAPH - 0x87BD: 0x56B1, //CJK UNIFIED IDEOGRAPH - 0x87BE: 0x56B2, //CJK UNIFIED IDEOGRAPH - 0x87BF: 0x56B3, //CJK UNIFIED IDEOGRAPH - 0x87C0: 0x56B4, //CJK UNIFIED IDEOGRAPH - 0x87C1: 0x56B5, //CJK UNIFIED IDEOGRAPH - 0x87C2: 0x56B6, //CJK UNIFIED IDEOGRAPH - 0x87C3: 0x56B8, //CJK UNIFIED IDEOGRAPH - 0x87C4: 0x56B9, //CJK UNIFIED IDEOGRAPH - 0x87C5: 0x56BA, //CJK UNIFIED IDEOGRAPH - 0x87C6: 0x56BB, //CJK UNIFIED IDEOGRAPH - 0x87C7: 0x56BD, //CJK UNIFIED IDEOGRAPH - 0x87C8: 0x56BE, //CJK UNIFIED IDEOGRAPH - 0x87C9: 0x56BF, //CJK UNIFIED IDEOGRAPH - 0x87CA: 0x56C0, //CJK UNIFIED IDEOGRAPH - 0x87CB: 0x56C1, //CJK UNIFIED IDEOGRAPH - 0x87CC: 0x56C2, //CJK UNIFIED IDEOGRAPH - 0x87CD: 0x56C3, //CJK UNIFIED IDEOGRAPH - 0x87CE: 0x56C4, //CJK UNIFIED IDEOGRAPH - 0x87CF: 0x56C5, //CJK UNIFIED IDEOGRAPH - 0x87D0: 0x56C6, //CJK UNIFIED IDEOGRAPH - 0x87D1: 0x56C7, //CJK UNIFIED IDEOGRAPH - 0x87D2: 0x56C8, //CJK UNIFIED IDEOGRAPH - 0x87D3: 0x56C9, //CJK UNIFIED IDEOGRAPH - 0x87D4: 0x56CB, //CJK UNIFIED IDEOGRAPH - 0x87D5: 0x56CC, //CJK UNIFIED IDEOGRAPH - 0x87D6: 0x56CD, //CJK UNIFIED IDEOGRAPH - 0x87D7: 0x56CE, //CJK UNIFIED IDEOGRAPH - 0x87D8: 0x56CF, //CJK UNIFIED IDEOGRAPH - 0x87D9: 0x56D0, //CJK UNIFIED IDEOGRAPH - 0x87DA: 0x56D1, //CJK UNIFIED IDEOGRAPH - 0x87DB: 0x56D2, //CJK UNIFIED IDEOGRAPH - 0x87DC: 0x56D3, //CJK UNIFIED IDEOGRAPH - 0x87DD: 0x56D5, //CJK UNIFIED IDEOGRAPH - 0x87DE: 0x56D6, //CJK UNIFIED IDEOGRAPH - 0x87DF: 0x56D8, //CJK UNIFIED IDEOGRAPH - 0x87E0: 0x56D9, //CJK UNIFIED IDEOGRAPH - 0x87E1: 0x56DC, //CJK UNIFIED IDEOGRAPH - 0x87E2: 0x56E3, //CJK UNIFIED IDEOGRAPH - 0x87E3: 0x56E5, //CJK UNIFIED IDEOGRAPH - 0x87E4: 0x56E6, //CJK UNIFIED IDEOGRAPH - 0x87E5: 0x56E7, //CJK UNIFIED IDEOGRAPH - 0x87E6: 0x56E8, //CJK UNIFIED IDEOGRAPH - 0x87E7: 0x56E9, //CJK UNIFIED IDEOGRAPH - 0x87E8: 0x56EA, //CJK UNIFIED IDEOGRAPH - 0x87E9: 0x56EC, //CJK UNIFIED IDEOGRAPH - 0x87EA: 0x56EE, //CJK UNIFIED IDEOGRAPH - 0x87EB: 0x56EF, //CJK UNIFIED IDEOGRAPH - 0x87EC: 0x56F2, //CJK UNIFIED IDEOGRAPH - 0x87ED: 0x56F3, //CJK UNIFIED IDEOGRAPH - 0x87EE: 0x56F6, //CJK UNIFIED IDEOGRAPH - 0x87EF: 0x56F7, //CJK UNIFIED IDEOGRAPH - 0x87F0: 0x56F8, //CJK UNIFIED IDEOGRAPH - 0x87F1: 0x56FB, //CJK UNIFIED IDEOGRAPH - 0x87F2: 0x56FC, //CJK UNIFIED IDEOGRAPH - 0x87F3: 0x5700, //CJK UNIFIED IDEOGRAPH - 0x87F4: 0x5701, //CJK UNIFIED IDEOGRAPH - 0x87F5: 0x5702, //CJK UNIFIED IDEOGRAPH - 0x87F6: 0x5705, //CJK UNIFIED IDEOGRAPH - 0x87F7: 0x5707, //CJK UNIFIED IDEOGRAPH - 0x87F8: 0x570B, //CJK UNIFIED IDEOGRAPH - 0x87F9: 0x570C, //CJK UNIFIED IDEOGRAPH - 0x87FA: 0x570D, //CJK UNIFIED IDEOGRAPH - 0x87FB: 0x570E, //CJK UNIFIED IDEOGRAPH - 0x87FC: 0x570F, //CJK UNIFIED IDEOGRAPH - 0x87FD: 0x5710, //CJK UNIFIED IDEOGRAPH - 0x87FE: 0x5711, //CJK UNIFIED IDEOGRAPH - 0x8840: 0x5712, //CJK UNIFIED IDEOGRAPH - 0x8841: 0x5713, //CJK UNIFIED IDEOGRAPH - 0x8842: 0x5714, //CJK UNIFIED IDEOGRAPH - 0x8843: 0x5715, //CJK UNIFIED IDEOGRAPH - 0x8844: 0x5716, //CJK UNIFIED IDEOGRAPH - 0x8845: 0x5717, //CJK UNIFIED IDEOGRAPH - 0x8846: 0x5718, //CJK UNIFIED IDEOGRAPH - 0x8847: 0x5719, //CJK UNIFIED IDEOGRAPH - 0x8848: 0x571A, //CJK UNIFIED IDEOGRAPH - 0x8849: 0x571B, //CJK UNIFIED IDEOGRAPH - 0x884A: 0x571D, //CJK UNIFIED IDEOGRAPH - 0x884B: 0x571E, //CJK UNIFIED IDEOGRAPH - 0x884C: 0x5720, //CJK UNIFIED IDEOGRAPH - 0x884D: 0x5721, //CJK UNIFIED IDEOGRAPH - 0x884E: 0x5722, //CJK UNIFIED IDEOGRAPH - 0x884F: 0x5724, //CJK UNIFIED IDEOGRAPH - 0x8850: 0x5725, //CJK UNIFIED IDEOGRAPH - 0x8851: 0x5726, //CJK UNIFIED IDEOGRAPH - 0x8852: 0x5727, //CJK UNIFIED IDEOGRAPH - 0x8853: 0x572B, //CJK UNIFIED IDEOGRAPH - 0x8854: 0x5731, //CJK UNIFIED IDEOGRAPH - 0x8855: 0x5732, //CJK UNIFIED IDEOGRAPH - 0x8856: 0x5734, //CJK UNIFIED IDEOGRAPH - 0x8857: 0x5735, //CJK UNIFIED IDEOGRAPH - 0x8858: 0x5736, //CJK UNIFIED IDEOGRAPH - 0x8859: 0x5737, //CJK UNIFIED IDEOGRAPH - 0x885A: 0x5738, //CJK UNIFIED IDEOGRAPH - 0x885B: 0x573C, //CJK UNIFIED IDEOGRAPH - 0x885C: 0x573D, //CJK UNIFIED IDEOGRAPH - 0x885D: 0x573F, //CJK UNIFIED IDEOGRAPH - 0x885E: 0x5741, //CJK UNIFIED IDEOGRAPH - 0x885F: 0x5743, //CJK UNIFIED IDEOGRAPH - 0x8860: 0x5744, //CJK UNIFIED IDEOGRAPH - 0x8861: 0x5745, //CJK UNIFIED IDEOGRAPH - 0x8862: 0x5746, //CJK UNIFIED IDEOGRAPH - 0x8863: 0x5748, //CJK UNIFIED IDEOGRAPH - 0x8864: 0x5749, //CJK UNIFIED IDEOGRAPH - 0x8865: 0x574B, //CJK UNIFIED IDEOGRAPH - 0x8866: 0x5752, //CJK UNIFIED IDEOGRAPH - 0x8867: 0x5753, //CJK UNIFIED IDEOGRAPH - 0x8868: 0x5754, //CJK UNIFIED IDEOGRAPH - 0x8869: 0x5755, //CJK UNIFIED IDEOGRAPH - 0x886A: 0x5756, //CJK UNIFIED IDEOGRAPH - 0x886B: 0x5758, //CJK UNIFIED IDEOGRAPH - 0x886C: 0x5759, //CJK UNIFIED IDEOGRAPH - 0x886D: 0x5762, //CJK UNIFIED IDEOGRAPH - 0x886E: 0x5763, //CJK UNIFIED IDEOGRAPH - 0x886F: 0x5765, //CJK UNIFIED IDEOGRAPH - 0x8870: 0x5767, //CJK UNIFIED IDEOGRAPH - 0x8871: 0x576C, //CJK UNIFIED IDEOGRAPH - 0x8872: 0x576E, //CJK UNIFIED IDEOGRAPH - 0x8873: 0x5770, //CJK UNIFIED IDEOGRAPH - 0x8874: 0x5771, //CJK UNIFIED IDEOGRAPH - 0x8875: 0x5772, //CJK UNIFIED IDEOGRAPH - 0x8876: 0x5774, //CJK UNIFIED IDEOGRAPH - 0x8877: 0x5775, //CJK UNIFIED IDEOGRAPH - 0x8878: 0x5778, //CJK UNIFIED IDEOGRAPH - 0x8879: 0x5779, //CJK UNIFIED IDEOGRAPH - 0x887A: 0x577A, //CJK UNIFIED IDEOGRAPH - 0x887B: 0x577D, //CJK UNIFIED IDEOGRAPH - 0x887C: 0x577E, //CJK UNIFIED IDEOGRAPH - 0x887D: 0x577F, //CJK UNIFIED IDEOGRAPH - 0x887E: 0x5780, //CJK UNIFIED IDEOGRAPH - 0x8880: 0x5781, //CJK UNIFIED IDEOGRAPH - 0x8881: 0x5787, //CJK UNIFIED IDEOGRAPH - 0x8882: 0x5788, //CJK UNIFIED IDEOGRAPH - 0x8883: 0x5789, //CJK UNIFIED IDEOGRAPH - 0x8884: 0x578A, //CJK UNIFIED IDEOGRAPH - 0x8885: 0x578D, //CJK UNIFIED IDEOGRAPH - 0x8886: 0x578E, //CJK UNIFIED IDEOGRAPH - 0x8887: 0x578F, //CJK UNIFIED IDEOGRAPH - 0x8888: 0x5790, //CJK UNIFIED IDEOGRAPH - 0x8889: 0x5791, //CJK UNIFIED IDEOGRAPH - 0x888A: 0x5794, //CJK UNIFIED IDEOGRAPH - 0x888B: 0x5795, //CJK UNIFIED IDEOGRAPH - 0x888C: 0x5796, //CJK UNIFIED IDEOGRAPH - 0x888D: 0x5797, //CJK UNIFIED IDEOGRAPH - 0x888E: 0x5798, //CJK UNIFIED IDEOGRAPH - 0x888F: 0x5799, //CJK UNIFIED IDEOGRAPH - 0x8890: 0x579A, //CJK UNIFIED IDEOGRAPH - 0x8891: 0x579C, //CJK UNIFIED IDEOGRAPH - 0x8892: 0x579D, //CJK UNIFIED IDEOGRAPH - 0x8893: 0x579E, //CJK UNIFIED IDEOGRAPH - 0x8894: 0x579F, //CJK UNIFIED IDEOGRAPH - 0x8895: 0x57A5, //CJK UNIFIED IDEOGRAPH - 0x8896: 0x57A8, //CJK UNIFIED IDEOGRAPH - 0x8897: 0x57AA, //CJK UNIFIED IDEOGRAPH - 0x8898: 0x57AC, //CJK UNIFIED IDEOGRAPH - 0x8899: 0x57AF, //CJK UNIFIED IDEOGRAPH - 0x889A: 0x57B0, //CJK UNIFIED IDEOGRAPH - 0x889B: 0x57B1, //CJK UNIFIED IDEOGRAPH - 0x889C: 0x57B3, //CJK UNIFIED IDEOGRAPH - 0x889D: 0x57B5, //CJK UNIFIED IDEOGRAPH - 0x889E: 0x57B6, //CJK UNIFIED IDEOGRAPH - 0x889F: 0x57B7, //CJK UNIFIED IDEOGRAPH - 0x88A0: 0x57B9, //CJK UNIFIED IDEOGRAPH - 0x88A1: 0x57BA, //CJK UNIFIED IDEOGRAPH - 0x88A2: 0x57BB, //CJK UNIFIED IDEOGRAPH - 0x88A3: 0x57BC, //CJK UNIFIED IDEOGRAPH - 0x88A4: 0x57BD, //CJK UNIFIED IDEOGRAPH - 0x88A5: 0x57BE, //CJK UNIFIED IDEOGRAPH - 0x88A6: 0x57BF, //CJK UNIFIED IDEOGRAPH - 0x88A7: 0x57C0, //CJK UNIFIED IDEOGRAPH - 0x88A8: 0x57C1, //CJK UNIFIED IDEOGRAPH - 0x88A9: 0x57C4, //CJK UNIFIED IDEOGRAPH - 0x88AA: 0x57C5, //CJK UNIFIED IDEOGRAPH - 0x88AB: 0x57C6, //CJK UNIFIED IDEOGRAPH - 0x88AC: 0x57C7, //CJK UNIFIED IDEOGRAPH - 0x88AD: 0x57C8, //CJK UNIFIED IDEOGRAPH - 0x88AE: 0x57C9, //CJK UNIFIED IDEOGRAPH - 0x88AF: 0x57CA, //CJK UNIFIED IDEOGRAPH - 0x88B0: 0x57CC, //CJK UNIFIED IDEOGRAPH - 0x88B1: 0x57CD, //CJK UNIFIED IDEOGRAPH - 0x88B2: 0x57D0, //CJK UNIFIED IDEOGRAPH - 0x88B3: 0x57D1, //CJK UNIFIED IDEOGRAPH - 0x88B4: 0x57D3, //CJK UNIFIED IDEOGRAPH - 0x88B5: 0x57D6, //CJK UNIFIED IDEOGRAPH - 0x88B6: 0x57D7, //CJK UNIFIED IDEOGRAPH - 0x88B7: 0x57DB, //CJK UNIFIED IDEOGRAPH - 0x88B8: 0x57DC, //CJK UNIFIED IDEOGRAPH - 0x88B9: 0x57DE, //CJK UNIFIED IDEOGRAPH - 0x88BA: 0x57E1, //CJK UNIFIED IDEOGRAPH - 0x88BB: 0x57E2, //CJK UNIFIED IDEOGRAPH - 0x88BC: 0x57E3, //CJK UNIFIED IDEOGRAPH - 0x88BD: 0x57E5, //CJK UNIFIED IDEOGRAPH - 0x88BE: 0x57E6, //CJK UNIFIED IDEOGRAPH - 0x88BF: 0x57E7, //CJK UNIFIED IDEOGRAPH - 0x88C0: 0x57E8, //CJK UNIFIED IDEOGRAPH - 0x88C1: 0x57E9, //CJK UNIFIED IDEOGRAPH - 0x88C2: 0x57EA, //CJK UNIFIED IDEOGRAPH - 0x88C3: 0x57EB, //CJK UNIFIED IDEOGRAPH - 0x88C4: 0x57EC, //CJK UNIFIED IDEOGRAPH - 0x88C5: 0x57EE, //CJK UNIFIED IDEOGRAPH - 0x88C6: 0x57F0, //CJK UNIFIED IDEOGRAPH - 0x88C7: 0x57F1, //CJK UNIFIED IDEOGRAPH - 0x88C8: 0x57F2, //CJK UNIFIED IDEOGRAPH - 0x88C9: 0x57F3, //CJK UNIFIED IDEOGRAPH - 0x88CA: 0x57F5, //CJK UNIFIED IDEOGRAPH - 0x88CB: 0x57F6, //CJK UNIFIED IDEOGRAPH - 0x88CC: 0x57F7, //CJK UNIFIED IDEOGRAPH - 0x88CD: 0x57FB, //CJK UNIFIED IDEOGRAPH - 0x88CE: 0x57FC, //CJK UNIFIED IDEOGRAPH - 0x88CF: 0x57FE, //CJK UNIFIED IDEOGRAPH - 0x88D0: 0x57FF, //CJK UNIFIED IDEOGRAPH - 0x88D1: 0x5801, //CJK UNIFIED IDEOGRAPH - 0x88D2: 0x5803, //CJK UNIFIED IDEOGRAPH - 0x88D3: 0x5804, //CJK UNIFIED IDEOGRAPH - 0x88D4: 0x5805, //CJK UNIFIED IDEOGRAPH - 0x88D5: 0x5808, //CJK UNIFIED IDEOGRAPH - 0x88D6: 0x5809, //CJK UNIFIED IDEOGRAPH - 0x88D7: 0x580A, //CJK UNIFIED IDEOGRAPH - 0x88D8: 0x580C, //CJK UNIFIED IDEOGRAPH - 0x88D9: 0x580E, //CJK UNIFIED IDEOGRAPH - 0x88DA: 0x580F, //CJK UNIFIED IDEOGRAPH - 0x88DB: 0x5810, //CJK UNIFIED IDEOGRAPH - 0x88DC: 0x5812, //CJK UNIFIED IDEOGRAPH - 0x88DD: 0x5813, //CJK UNIFIED IDEOGRAPH - 0x88DE: 0x5814, //CJK UNIFIED IDEOGRAPH - 0x88DF: 0x5816, //CJK UNIFIED IDEOGRAPH - 0x88E0: 0x5817, //CJK UNIFIED IDEOGRAPH - 0x88E1: 0x5818, //CJK UNIFIED IDEOGRAPH - 0x88E2: 0x581A, //CJK UNIFIED IDEOGRAPH - 0x88E3: 0x581B, //CJK UNIFIED IDEOGRAPH - 0x88E4: 0x581C, //CJK UNIFIED IDEOGRAPH - 0x88E5: 0x581D, //CJK UNIFIED IDEOGRAPH - 0x88E6: 0x581F, //CJK UNIFIED IDEOGRAPH - 0x88E7: 0x5822, //CJK UNIFIED IDEOGRAPH - 0x88E8: 0x5823, //CJK UNIFIED IDEOGRAPH - 0x88E9: 0x5825, //CJK UNIFIED IDEOGRAPH - 0x88EA: 0x5826, //CJK UNIFIED IDEOGRAPH - 0x88EB: 0x5827, //CJK UNIFIED IDEOGRAPH - 0x88EC: 0x5828, //CJK UNIFIED IDEOGRAPH - 0x88ED: 0x5829, //CJK UNIFIED IDEOGRAPH - 0x88EE: 0x582B, //CJK UNIFIED IDEOGRAPH - 0x88EF: 0x582C, //CJK UNIFIED IDEOGRAPH - 0x88F0: 0x582D, //CJK UNIFIED IDEOGRAPH - 0x88F1: 0x582E, //CJK UNIFIED IDEOGRAPH - 0x88F2: 0x582F, //CJK UNIFIED IDEOGRAPH - 0x88F3: 0x5831, //CJK UNIFIED IDEOGRAPH - 0x88F4: 0x5832, //CJK UNIFIED IDEOGRAPH - 0x88F5: 0x5833, //CJK UNIFIED IDEOGRAPH - 0x88F6: 0x5834, //CJK UNIFIED IDEOGRAPH - 0x88F7: 0x5836, //CJK UNIFIED IDEOGRAPH - 0x88F8: 0x5837, //CJK UNIFIED IDEOGRAPH - 0x88F9: 0x5838, //CJK UNIFIED IDEOGRAPH - 0x88FA: 0x5839, //CJK UNIFIED IDEOGRAPH - 0x88FB: 0x583A, //CJK UNIFIED IDEOGRAPH - 0x88FC: 0x583B, //CJK UNIFIED IDEOGRAPH - 0x88FD: 0x583C, //CJK UNIFIED IDEOGRAPH - 0x88FE: 0x583D, //CJK UNIFIED IDEOGRAPH - 0x8940: 0x583E, //CJK UNIFIED IDEOGRAPH - 0x8941: 0x583F, //CJK UNIFIED IDEOGRAPH - 0x8942: 0x5840, //CJK UNIFIED IDEOGRAPH - 0x8943: 0x5841, //CJK UNIFIED IDEOGRAPH - 0x8944: 0x5842, //CJK UNIFIED IDEOGRAPH - 0x8945: 0x5843, //CJK UNIFIED IDEOGRAPH - 0x8946: 0x5845, //CJK UNIFIED IDEOGRAPH - 0x8947: 0x5846, //CJK UNIFIED IDEOGRAPH - 0x8948: 0x5847, //CJK UNIFIED IDEOGRAPH - 0x8949: 0x5848, //CJK UNIFIED IDEOGRAPH - 0x894A: 0x5849, //CJK UNIFIED IDEOGRAPH - 0x894B: 0x584A, //CJK UNIFIED IDEOGRAPH - 0x894C: 0x584B, //CJK UNIFIED IDEOGRAPH - 0x894D: 0x584E, //CJK UNIFIED IDEOGRAPH - 0x894E: 0x584F, //CJK UNIFIED IDEOGRAPH - 0x894F: 0x5850, //CJK UNIFIED IDEOGRAPH - 0x8950: 0x5852, //CJK UNIFIED IDEOGRAPH - 0x8951: 0x5853, //CJK UNIFIED IDEOGRAPH - 0x8952: 0x5855, //CJK UNIFIED IDEOGRAPH - 0x8953: 0x5856, //CJK UNIFIED IDEOGRAPH - 0x8954: 0x5857, //CJK UNIFIED IDEOGRAPH - 0x8955: 0x5859, //CJK UNIFIED IDEOGRAPH - 0x8956: 0x585A, //CJK UNIFIED IDEOGRAPH - 0x8957: 0x585B, //CJK UNIFIED IDEOGRAPH - 0x8958: 0x585C, //CJK UNIFIED IDEOGRAPH - 0x8959: 0x585D, //CJK UNIFIED IDEOGRAPH - 0x895A: 0x585F, //CJK UNIFIED IDEOGRAPH - 0x895B: 0x5860, //CJK UNIFIED IDEOGRAPH - 0x895C: 0x5861, //CJK UNIFIED IDEOGRAPH - 0x895D: 0x5862, //CJK UNIFIED IDEOGRAPH - 0x895E: 0x5863, //CJK UNIFIED IDEOGRAPH - 0x895F: 0x5864, //CJK UNIFIED IDEOGRAPH - 0x8960: 0x5866, //CJK UNIFIED IDEOGRAPH - 0x8961: 0x5867, //CJK UNIFIED IDEOGRAPH - 0x8962: 0x5868, //CJK UNIFIED IDEOGRAPH - 0x8963: 0x5869, //CJK UNIFIED IDEOGRAPH - 0x8964: 0x586A, //CJK UNIFIED IDEOGRAPH - 0x8965: 0x586D, //CJK UNIFIED IDEOGRAPH - 0x8966: 0x586E, //CJK UNIFIED IDEOGRAPH - 0x8967: 0x586F, //CJK UNIFIED IDEOGRAPH - 0x8968: 0x5870, //CJK UNIFIED IDEOGRAPH - 0x8969: 0x5871, //CJK UNIFIED IDEOGRAPH - 0x896A: 0x5872, //CJK UNIFIED IDEOGRAPH - 0x896B: 0x5873, //CJK UNIFIED IDEOGRAPH - 0x896C: 0x5874, //CJK UNIFIED IDEOGRAPH - 0x896D: 0x5875, //CJK UNIFIED IDEOGRAPH - 0x896E: 0x5876, //CJK UNIFIED IDEOGRAPH - 0x896F: 0x5877, //CJK UNIFIED IDEOGRAPH - 0x8970: 0x5878, //CJK UNIFIED IDEOGRAPH - 0x8971: 0x5879, //CJK UNIFIED IDEOGRAPH - 0x8972: 0x587A, //CJK UNIFIED IDEOGRAPH - 0x8973: 0x587B, //CJK UNIFIED IDEOGRAPH - 0x8974: 0x587C, //CJK UNIFIED IDEOGRAPH - 0x8975: 0x587D, //CJK UNIFIED IDEOGRAPH - 0x8976: 0x587F, //CJK UNIFIED IDEOGRAPH - 0x8977: 0x5882, //CJK UNIFIED IDEOGRAPH - 0x8978: 0x5884, //CJK UNIFIED IDEOGRAPH - 0x8979: 0x5886, //CJK UNIFIED IDEOGRAPH - 0x897A: 0x5887, //CJK UNIFIED IDEOGRAPH - 0x897B: 0x5888, //CJK UNIFIED IDEOGRAPH - 0x897C: 0x588A, //CJK UNIFIED IDEOGRAPH - 0x897D: 0x588B, //CJK UNIFIED IDEOGRAPH - 0x897E: 0x588C, //CJK UNIFIED IDEOGRAPH - 0x8980: 0x588D, //CJK UNIFIED IDEOGRAPH - 0x8981: 0x588E, //CJK UNIFIED IDEOGRAPH - 0x8982: 0x588F, //CJK UNIFIED IDEOGRAPH - 0x8983: 0x5890, //CJK UNIFIED IDEOGRAPH - 0x8984: 0x5891, //CJK UNIFIED IDEOGRAPH - 0x8985: 0x5894, //CJK UNIFIED IDEOGRAPH - 0x8986: 0x5895, //CJK UNIFIED IDEOGRAPH - 0x8987: 0x5896, //CJK UNIFIED IDEOGRAPH - 0x8988: 0x5897, //CJK UNIFIED IDEOGRAPH - 0x8989: 0x5898, //CJK UNIFIED IDEOGRAPH - 0x898A: 0x589B, //CJK UNIFIED IDEOGRAPH - 0x898B: 0x589C, //CJK UNIFIED IDEOGRAPH - 0x898C: 0x589D, //CJK UNIFIED IDEOGRAPH - 0x898D: 0x58A0, //CJK UNIFIED IDEOGRAPH - 0x898E: 0x58A1, //CJK UNIFIED IDEOGRAPH - 0x898F: 0x58A2, //CJK UNIFIED IDEOGRAPH - 0x8990: 0x58A3, //CJK UNIFIED IDEOGRAPH - 0x8991: 0x58A4, //CJK UNIFIED IDEOGRAPH - 0x8992: 0x58A5, //CJK UNIFIED IDEOGRAPH - 0x8993: 0x58A6, //CJK UNIFIED IDEOGRAPH - 0x8994: 0x58A7, //CJK UNIFIED IDEOGRAPH - 0x8995: 0x58AA, //CJK UNIFIED IDEOGRAPH - 0x8996: 0x58AB, //CJK UNIFIED IDEOGRAPH - 0x8997: 0x58AC, //CJK UNIFIED IDEOGRAPH - 0x8998: 0x58AD, //CJK UNIFIED IDEOGRAPH - 0x8999: 0x58AE, //CJK UNIFIED IDEOGRAPH - 0x899A: 0x58AF, //CJK UNIFIED IDEOGRAPH - 0x899B: 0x58B0, //CJK UNIFIED IDEOGRAPH - 0x899C: 0x58B1, //CJK UNIFIED IDEOGRAPH - 0x899D: 0x58B2, //CJK UNIFIED IDEOGRAPH - 0x899E: 0x58B3, //CJK UNIFIED IDEOGRAPH - 0x899F: 0x58B4, //CJK UNIFIED IDEOGRAPH - 0x89A0: 0x58B5, //CJK UNIFIED IDEOGRAPH - 0x89A1: 0x58B6, //CJK UNIFIED IDEOGRAPH - 0x89A2: 0x58B7, //CJK UNIFIED IDEOGRAPH - 0x89A3: 0x58B8, //CJK UNIFIED IDEOGRAPH - 0x89A4: 0x58B9, //CJK UNIFIED IDEOGRAPH - 0x89A5: 0x58BA, //CJK UNIFIED IDEOGRAPH - 0x89A6: 0x58BB, //CJK UNIFIED IDEOGRAPH - 0x89A7: 0x58BD, //CJK UNIFIED IDEOGRAPH - 0x89A8: 0x58BE, //CJK UNIFIED IDEOGRAPH - 0x89A9: 0x58BF, //CJK UNIFIED IDEOGRAPH - 0x89AA: 0x58C0, //CJK UNIFIED IDEOGRAPH - 0x89AB: 0x58C2, //CJK UNIFIED IDEOGRAPH - 0x89AC: 0x58C3, //CJK UNIFIED IDEOGRAPH - 0x89AD: 0x58C4, //CJK UNIFIED IDEOGRAPH - 0x89AE: 0x58C6, //CJK UNIFIED IDEOGRAPH - 0x89AF: 0x58C7, //CJK UNIFIED IDEOGRAPH - 0x89B0: 0x58C8, //CJK UNIFIED IDEOGRAPH - 0x89B1: 0x58C9, //CJK UNIFIED IDEOGRAPH - 0x89B2: 0x58CA, //CJK UNIFIED IDEOGRAPH - 0x89B3: 0x58CB, //CJK UNIFIED IDEOGRAPH - 0x89B4: 0x58CC, //CJK UNIFIED IDEOGRAPH - 0x89B5: 0x58CD, //CJK UNIFIED IDEOGRAPH - 0x89B6: 0x58CE, //CJK UNIFIED IDEOGRAPH - 0x89B7: 0x58CF, //CJK UNIFIED IDEOGRAPH - 0x89B8: 0x58D0, //CJK UNIFIED IDEOGRAPH - 0x89B9: 0x58D2, //CJK UNIFIED IDEOGRAPH - 0x89BA: 0x58D3, //CJK UNIFIED IDEOGRAPH - 0x89BB: 0x58D4, //CJK UNIFIED IDEOGRAPH - 0x89BC: 0x58D6, //CJK UNIFIED IDEOGRAPH - 0x89BD: 0x58D7, //CJK UNIFIED IDEOGRAPH - 0x89BE: 0x58D8, //CJK UNIFIED IDEOGRAPH - 0x89BF: 0x58D9, //CJK UNIFIED IDEOGRAPH - 0x89C0: 0x58DA, //CJK UNIFIED IDEOGRAPH - 0x89C1: 0x58DB, //CJK UNIFIED IDEOGRAPH - 0x89C2: 0x58DC, //CJK UNIFIED IDEOGRAPH - 0x89C3: 0x58DD, //CJK UNIFIED IDEOGRAPH - 0x89C4: 0x58DE, //CJK UNIFIED IDEOGRAPH - 0x89C5: 0x58DF, //CJK UNIFIED IDEOGRAPH - 0x89C6: 0x58E0, //CJK UNIFIED IDEOGRAPH - 0x89C7: 0x58E1, //CJK UNIFIED IDEOGRAPH - 0x89C8: 0x58E2, //CJK UNIFIED IDEOGRAPH - 0x89C9: 0x58E3, //CJK UNIFIED IDEOGRAPH - 0x89CA: 0x58E5, //CJK UNIFIED IDEOGRAPH - 0x89CB: 0x58E6, //CJK UNIFIED IDEOGRAPH - 0x89CC: 0x58E7, //CJK UNIFIED IDEOGRAPH - 0x89CD: 0x58E8, //CJK UNIFIED IDEOGRAPH - 0x89CE: 0x58E9, //CJK UNIFIED IDEOGRAPH - 0x89CF: 0x58EA, //CJK UNIFIED IDEOGRAPH - 0x89D0: 0x58ED, //CJK UNIFIED IDEOGRAPH - 0x89D1: 0x58EF, //CJK UNIFIED IDEOGRAPH - 0x89D2: 0x58F1, //CJK UNIFIED IDEOGRAPH - 0x89D3: 0x58F2, //CJK UNIFIED IDEOGRAPH - 0x89D4: 0x58F4, //CJK UNIFIED IDEOGRAPH - 0x89D5: 0x58F5, //CJK UNIFIED IDEOGRAPH - 0x89D6: 0x58F7, //CJK UNIFIED IDEOGRAPH - 0x89D7: 0x58F8, //CJK UNIFIED IDEOGRAPH - 0x89D8: 0x58FA, //CJK UNIFIED IDEOGRAPH - 0x89D9: 0x58FB, //CJK UNIFIED IDEOGRAPH - 0x89DA: 0x58FC, //CJK UNIFIED IDEOGRAPH - 0x89DB: 0x58FD, //CJK UNIFIED IDEOGRAPH - 0x89DC: 0x58FE, //CJK UNIFIED IDEOGRAPH - 0x89DD: 0x58FF, //CJK UNIFIED IDEOGRAPH - 0x89DE: 0x5900, //CJK UNIFIED IDEOGRAPH - 0x89DF: 0x5901, //CJK UNIFIED IDEOGRAPH - 0x89E0: 0x5903, //CJK UNIFIED IDEOGRAPH - 0x89E1: 0x5905, //CJK UNIFIED IDEOGRAPH - 0x89E2: 0x5906, //CJK UNIFIED IDEOGRAPH - 0x89E3: 0x5908, //CJK UNIFIED IDEOGRAPH - 0x89E4: 0x5909, //CJK UNIFIED IDEOGRAPH - 0x89E5: 0x590A, //CJK UNIFIED IDEOGRAPH - 0x89E6: 0x590B, //CJK UNIFIED IDEOGRAPH - 0x89E7: 0x590C, //CJK UNIFIED IDEOGRAPH - 0x89E8: 0x590E, //CJK UNIFIED IDEOGRAPH - 0x89E9: 0x5910, //CJK UNIFIED IDEOGRAPH - 0x89EA: 0x5911, //CJK UNIFIED IDEOGRAPH - 0x89EB: 0x5912, //CJK UNIFIED IDEOGRAPH - 0x89EC: 0x5913, //CJK UNIFIED IDEOGRAPH - 0x89ED: 0x5917, //CJK UNIFIED IDEOGRAPH - 0x89EE: 0x5918, //CJK UNIFIED IDEOGRAPH - 0x89EF: 0x591B, //CJK UNIFIED IDEOGRAPH - 0x89F0: 0x591D, //CJK UNIFIED IDEOGRAPH - 0x89F1: 0x591E, //CJK UNIFIED IDEOGRAPH - 0x89F2: 0x5920, //CJK UNIFIED IDEOGRAPH - 0x89F3: 0x5921, //CJK UNIFIED IDEOGRAPH - 0x89F4: 0x5922, //CJK UNIFIED IDEOGRAPH - 0x89F5: 0x5923, //CJK UNIFIED IDEOGRAPH - 0x89F6: 0x5926, //CJK UNIFIED IDEOGRAPH - 0x89F7: 0x5928, //CJK UNIFIED IDEOGRAPH - 0x89F8: 0x592C, //CJK UNIFIED IDEOGRAPH - 0x89F9: 0x5930, //CJK UNIFIED IDEOGRAPH - 0x89FA: 0x5932, //CJK UNIFIED IDEOGRAPH - 0x89FB: 0x5933, //CJK UNIFIED IDEOGRAPH - 0x89FC: 0x5935, //CJK UNIFIED IDEOGRAPH - 0x89FD: 0x5936, //CJK UNIFIED IDEOGRAPH - 0x89FE: 0x593B, //CJK UNIFIED IDEOGRAPH - 0x8A40: 0x593D, //CJK UNIFIED IDEOGRAPH - 0x8A41: 0x593E, //CJK UNIFIED IDEOGRAPH - 0x8A42: 0x593F, //CJK UNIFIED IDEOGRAPH - 0x8A43: 0x5940, //CJK UNIFIED IDEOGRAPH - 0x8A44: 0x5943, //CJK UNIFIED IDEOGRAPH - 0x8A45: 0x5945, //CJK UNIFIED IDEOGRAPH - 0x8A46: 0x5946, //CJK UNIFIED IDEOGRAPH - 0x8A47: 0x594A, //CJK UNIFIED IDEOGRAPH - 0x8A48: 0x594C, //CJK UNIFIED IDEOGRAPH - 0x8A49: 0x594D, //CJK UNIFIED IDEOGRAPH - 0x8A4A: 0x5950, //CJK UNIFIED IDEOGRAPH - 0x8A4B: 0x5952, //CJK UNIFIED IDEOGRAPH - 0x8A4C: 0x5953, //CJK UNIFIED IDEOGRAPH - 0x8A4D: 0x5959, //CJK UNIFIED IDEOGRAPH - 0x8A4E: 0x595B, //CJK UNIFIED IDEOGRAPH - 0x8A4F: 0x595C, //CJK UNIFIED IDEOGRAPH - 0x8A50: 0x595D, //CJK UNIFIED IDEOGRAPH - 0x8A51: 0x595E, //CJK UNIFIED IDEOGRAPH - 0x8A52: 0x595F, //CJK UNIFIED IDEOGRAPH - 0x8A53: 0x5961, //CJK UNIFIED IDEOGRAPH - 0x8A54: 0x5963, //CJK UNIFIED IDEOGRAPH - 0x8A55: 0x5964, //CJK UNIFIED IDEOGRAPH - 0x8A56: 0x5966, //CJK UNIFIED IDEOGRAPH - 0x8A57: 0x5967, //CJK UNIFIED IDEOGRAPH - 0x8A58: 0x5968, //CJK UNIFIED IDEOGRAPH - 0x8A59: 0x5969, //CJK UNIFIED IDEOGRAPH - 0x8A5A: 0x596A, //CJK UNIFIED IDEOGRAPH - 0x8A5B: 0x596B, //CJK UNIFIED IDEOGRAPH - 0x8A5C: 0x596C, //CJK UNIFIED IDEOGRAPH - 0x8A5D: 0x596D, //CJK UNIFIED IDEOGRAPH - 0x8A5E: 0x596E, //CJK UNIFIED IDEOGRAPH - 0x8A5F: 0x596F, //CJK UNIFIED IDEOGRAPH - 0x8A60: 0x5970, //CJK UNIFIED IDEOGRAPH - 0x8A61: 0x5971, //CJK UNIFIED IDEOGRAPH - 0x8A62: 0x5972, //CJK UNIFIED IDEOGRAPH - 0x8A63: 0x5975, //CJK UNIFIED IDEOGRAPH - 0x8A64: 0x5977, //CJK UNIFIED IDEOGRAPH - 0x8A65: 0x597A, //CJK UNIFIED IDEOGRAPH - 0x8A66: 0x597B, //CJK UNIFIED IDEOGRAPH - 0x8A67: 0x597C, //CJK UNIFIED IDEOGRAPH - 0x8A68: 0x597E, //CJK UNIFIED IDEOGRAPH - 0x8A69: 0x597F, //CJK UNIFIED IDEOGRAPH - 0x8A6A: 0x5980, //CJK UNIFIED IDEOGRAPH - 0x8A6B: 0x5985, //CJK UNIFIED IDEOGRAPH - 0x8A6C: 0x5989, //CJK UNIFIED IDEOGRAPH - 0x8A6D: 0x598B, //CJK UNIFIED IDEOGRAPH - 0x8A6E: 0x598C, //CJK UNIFIED IDEOGRAPH - 0x8A6F: 0x598E, //CJK UNIFIED IDEOGRAPH - 0x8A70: 0x598F, //CJK UNIFIED IDEOGRAPH - 0x8A71: 0x5990, //CJK UNIFIED IDEOGRAPH - 0x8A72: 0x5991, //CJK UNIFIED IDEOGRAPH - 0x8A73: 0x5994, //CJK UNIFIED IDEOGRAPH - 0x8A74: 0x5995, //CJK UNIFIED IDEOGRAPH - 0x8A75: 0x5998, //CJK UNIFIED IDEOGRAPH - 0x8A76: 0x599A, //CJK UNIFIED IDEOGRAPH - 0x8A77: 0x599B, //CJK UNIFIED IDEOGRAPH - 0x8A78: 0x599C, //CJK UNIFIED IDEOGRAPH - 0x8A79: 0x599D, //CJK UNIFIED IDEOGRAPH - 0x8A7A: 0x599F, //CJK UNIFIED IDEOGRAPH - 0x8A7B: 0x59A0, //CJK UNIFIED IDEOGRAPH - 0x8A7C: 0x59A1, //CJK UNIFIED IDEOGRAPH - 0x8A7D: 0x59A2, //CJK UNIFIED IDEOGRAPH - 0x8A7E: 0x59A6, //CJK UNIFIED IDEOGRAPH - 0x8A80: 0x59A7, //CJK UNIFIED IDEOGRAPH - 0x8A81: 0x59AC, //CJK UNIFIED IDEOGRAPH - 0x8A82: 0x59AD, //CJK UNIFIED IDEOGRAPH - 0x8A83: 0x59B0, //CJK UNIFIED IDEOGRAPH - 0x8A84: 0x59B1, //CJK UNIFIED IDEOGRAPH - 0x8A85: 0x59B3, //CJK UNIFIED IDEOGRAPH - 0x8A86: 0x59B4, //CJK UNIFIED IDEOGRAPH - 0x8A87: 0x59B5, //CJK UNIFIED IDEOGRAPH - 0x8A88: 0x59B6, //CJK UNIFIED IDEOGRAPH - 0x8A89: 0x59B7, //CJK UNIFIED IDEOGRAPH - 0x8A8A: 0x59B8, //CJK UNIFIED IDEOGRAPH - 0x8A8B: 0x59BA, //CJK UNIFIED IDEOGRAPH - 0x8A8C: 0x59BC, //CJK UNIFIED IDEOGRAPH - 0x8A8D: 0x59BD, //CJK UNIFIED IDEOGRAPH - 0x8A8E: 0x59BF, //CJK UNIFIED IDEOGRAPH - 0x8A8F: 0x59C0, //CJK UNIFIED IDEOGRAPH - 0x8A90: 0x59C1, //CJK UNIFIED IDEOGRAPH - 0x8A91: 0x59C2, //CJK UNIFIED IDEOGRAPH - 0x8A92: 0x59C3, //CJK UNIFIED IDEOGRAPH - 0x8A93: 0x59C4, //CJK UNIFIED IDEOGRAPH - 0x8A94: 0x59C5, //CJK UNIFIED IDEOGRAPH - 0x8A95: 0x59C7, //CJK UNIFIED IDEOGRAPH - 0x8A96: 0x59C8, //CJK UNIFIED IDEOGRAPH - 0x8A97: 0x59C9, //CJK UNIFIED IDEOGRAPH - 0x8A98: 0x59CC, //CJK UNIFIED IDEOGRAPH - 0x8A99: 0x59CD, //CJK UNIFIED IDEOGRAPH - 0x8A9A: 0x59CE, //CJK UNIFIED IDEOGRAPH - 0x8A9B: 0x59CF, //CJK UNIFIED IDEOGRAPH - 0x8A9C: 0x59D5, //CJK UNIFIED IDEOGRAPH - 0x8A9D: 0x59D6, //CJK UNIFIED IDEOGRAPH - 0x8A9E: 0x59D9, //CJK UNIFIED IDEOGRAPH - 0x8A9F: 0x59DB, //CJK UNIFIED IDEOGRAPH - 0x8AA0: 0x59DE, //CJK UNIFIED IDEOGRAPH - 0x8AA1: 0x59DF, //CJK UNIFIED IDEOGRAPH - 0x8AA2: 0x59E0, //CJK UNIFIED IDEOGRAPH - 0x8AA3: 0x59E1, //CJK UNIFIED IDEOGRAPH - 0x8AA4: 0x59E2, //CJK UNIFIED IDEOGRAPH - 0x8AA5: 0x59E4, //CJK UNIFIED IDEOGRAPH - 0x8AA6: 0x59E6, //CJK UNIFIED IDEOGRAPH - 0x8AA7: 0x59E7, //CJK UNIFIED IDEOGRAPH - 0x8AA8: 0x59E9, //CJK UNIFIED IDEOGRAPH - 0x8AA9: 0x59EA, //CJK UNIFIED IDEOGRAPH - 0x8AAA: 0x59EB, //CJK UNIFIED IDEOGRAPH - 0x8AAB: 0x59ED, //CJK UNIFIED IDEOGRAPH - 0x8AAC: 0x59EE, //CJK UNIFIED IDEOGRAPH - 0x8AAD: 0x59EF, //CJK UNIFIED IDEOGRAPH - 0x8AAE: 0x59F0, //CJK UNIFIED IDEOGRAPH - 0x8AAF: 0x59F1, //CJK UNIFIED IDEOGRAPH - 0x8AB0: 0x59F2, //CJK UNIFIED IDEOGRAPH - 0x8AB1: 0x59F3, //CJK UNIFIED IDEOGRAPH - 0x8AB2: 0x59F4, //CJK UNIFIED IDEOGRAPH - 0x8AB3: 0x59F5, //CJK UNIFIED IDEOGRAPH - 0x8AB4: 0x59F6, //CJK UNIFIED IDEOGRAPH - 0x8AB5: 0x59F7, //CJK UNIFIED IDEOGRAPH - 0x8AB6: 0x59F8, //CJK UNIFIED IDEOGRAPH - 0x8AB7: 0x59FA, //CJK UNIFIED IDEOGRAPH - 0x8AB8: 0x59FC, //CJK UNIFIED IDEOGRAPH - 0x8AB9: 0x59FD, //CJK UNIFIED IDEOGRAPH - 0x8ABA: 0x59FE, //CJK UNIFIED IDEOGRAPH - 0x8ABB: 0x5A00, //CJK UNIFIED IDEOGRAPH - 0x8ABC: 0x5A02, //CJK UNIFIED IDEOGRAPH - 0x8ABD: 0x5A0A, //CJK UNIFIED IDEOGRAPH - 0x8ABE: 0x5A0B, //CJK UNIFIED IDEOGRAPH - 0x8ABF: 0x5A0D, //CJK UNIFIED IDEOGRAPH - 0x8AC0: 0x5A0E, //CJK UNIFIED IDEOGRAPH - 0x8AC1: 0x5A0F, //CJK UNIFIED IDEOGRAPH - 0x8AC2: 0x5A10, //CJK UNIFIED IDEOGRAPH - 0x8AC3: 0x5A12, //CJK UNIFIED IDEOGRAPH - 0x8AC4: 0x5A14, //CJK UNIFIED IDEOGRAPH - 0x8AC5: 0x5A15, //CJK UNIFIED IDEOGRAPH - 0x8AC6: 0x5A16, //CJK UNIFIED IDEOGRAPH - 0x8AC7: 0x5A17, //CJK UNIFIED IDEOGRAPH - 0x8AC8: 0x5A19, //CJK UNIFIED IDEOGRAPH - 0x8AC9: 0x5A1A, //CJK UNIFIED IDEOGRAPH - 0x8ACA: 0x5A1B, //CJK UNIFIED IDEOGRAPH - 0x8ACB: 0x5A1D, //CJK UNIFIED IDEOGRAPH - 0x8ACC: 0x5A1E, //CJK UNIFIED IDEOGRAPH - 0x8ACD: 0x5A21, //CJK UNIFIED IDEOGRAPH - 0x8ACE: 0x5A22, //CJK UNIFIED IDEOGRAPH - 0x8ACF: 0x5A24, //CJK UNIFIED IDEOGRAPH - 0x8AD0: 0x5A26, //CJK UNIFIED IDEOGRAPH - 0x8AD1: 0x5A27, //CJK UNIFIED IDEOGRAPH - 0x8AD2: 0x5A28, //CJK UNIFIED IDEOGRAPH - 0x8AD3: 0x5A2A, //CJK UNIFIED IDEOGRAPH - 0x8AD4: 0x5A2B, //CJK UNIFIED IDEOGRAPH - 0x8AD5: 0x5A2C, //CJK UNIFIED IDEOGRAPH - 0x8AD6: 0x5A2D, //CJK UNIFIED IDEOGRAPH - 0x8AD7: 0x5A2E, //CJK UNIFIED IDEOGRAPH - 0x8AD8: 0x5A2F, //CJK UNIFIED IDEOGRAPH - 0x8AD9: 0x5A30, //CJK UNIFIED IDEOGRAPH - 0x8ADA: 0x5A33, //CJK UNIFIED IDEOGRAPH - 0x8ADB: 0x5A35, //CJK UNIFIED IDEOGRAPH - 0x8ADC: 0x5A37, //CJK UNIFIED IDEOGRAPH - 0x8ADD: 0x5A38, //CJK UNIFIED IDEOGRAPH - 0x8ADE: 0x5A39, //CJK UNIFIED IDEOGRAPH - 0x8ADF: 0x5A3A, //CJK UNIFIED IDEOGRAPH - 0x8AE0: 0x5A3B, //CJK UNIFIED IDEOGRAPH - 0x8AE1: 0x5A3D, //CJK UNIFIED IDEOGRAPH - 0x8AE2: 0x5A3E, //CJK UNIFIED IDEOGRAPH - 0x8AE3: 0x5A3F, //CJK UNIFIED IDEOGRAPH - 0x8AE4: 0x5A41, //CJK UNIFIED IDEOGRAPH - 0x8AE5: 0x5A42, //CJK UNIFIED IDEOGRAPH - 0x8AE6: 0x5A43, //CJK UNIFIED IDEOGRAPH - 0x8AE7: 0x5A44, //CJK UNIFIED IDEOGRAPH - 0x8AE8: 0x5A45, //CJK UNIFIED IDEOGRAPH - 0x8AE9: 0x5A47, //CJK UNIFIED IDEOGRAPH - 0x8AEA: 0x5A48, //CJK UNIFIED IDEOGRAPH - 0x8AEB: 0x5A4B, //CJK UNIFIED IDEOGRAPH - 0x8AEC: 0x5A4C, //CJK UNIFIED IDEOGRAPH - 0x8AED: 0x5A4D, //CJK UNIFIED IDEOGRAPH - 0x8AEE: 0x5A4E, //CJK UNIFIED IDEOGRAPH - 0x8AEF: 0x5A4F, //CJK UNIFIED IDEOGRAPH - 0x8AF0: 0x5A50, //CJK UNIFIED IDEOGRAPH - 0x8AF1: 0x5A51, //CJK UNIFIED IDEOGRAPH - 0x8AF2: 0x5A52, //CJK UNIFIED IDEOGRAPH - 0x8AF3: 0x5A53, //CJK UNIFIED IDEOGRAPH - 0x8AF4: 0x5A54, //CJK UNIFIED IDEOGRAPH - 0x8AF5: 0x5A56, //CJK UNIFIED IDEOGRAPH - 0x8AF6: 0x5A57, //CJK UNIFIED IDEOGRAPH - 0x8AF7: 0x5A58, //CJK UNIFIED IDEOGRAPH - 0x8AF8: 0x5A59, //CJK UNIFIED IDEOGRAPH - 0x8AF9: 0x5A5B, //CJK UNIFIED IDEOGRAPH - 0x8AFA: 0x5A5C, //CJK UNIFIED IDEOGRAPH - 0x8AFB: 0x5A5D, //CJK UNIFIED IDEOGRAPH - 0x8AFC: 0x5A5E, //CJK UNIFIED IDEOGRAPH - 0x8AFD: 0x5A5F, //CJK UNIFIED IDEOGRAPH - 0x8AFE: 0x5A60, //CJK UNIFIED IDEOGRAPH - 0x8B40: 0x5A61, //CJK UNIFIED IDEOGRAPH - 0x8B41: 0x5A63, //CJK UNIFIED IDEOGRAPH - 0x8B42: 0x5A64, //CJK UNIFIED IDEOGRAPH - 0x8B43: 0x5A65, //CJK UNIFIED IDEOGRAPH - 0x8B44: 0x5A66, //CJK UNIFIED IDEOGRAPH - 0x8B45: 0x5A68, //CJK UNIFIED IDEOGRAPH - 0x8B46: 0x5A69, //CJK UNIFIED IDEOGRAPH - 0x8B47: 0x5A6B, //CJK UNIFIED IDEOGRAPH - 0x8B48: 0x5A6C, //CJK UNIFIED IDEOGRAPH - 0x8B49: 0x5A6D, //CJK UNIFIED IDEOGRAPH - 0x8B4A: 0x5A6E, //CJK UNIFIED IDEOGRAPH - 0x8B4B: 0x5A6F, //CJK UNIFIED IDEOGRAPH - 0x8B4C: 0x5A70, //CJK UNIFIED IDEOGRAPH - 0x8B4D: 0x5A71, //CJK UNIFIED IDEOGRAPH - 0x8B4E: 0x5A72, //CJK UNIFIED IDEOGRAPH - 0x8B4F: 0x5A73, //CJK UNIFIED IDEOGRAPH - 0x8B50: 0x5A78, //CJK UNIFIED IDEOGRAPH - 0x8B51: 0x5A79, //CJK UNIFIED IDEOGRAPH - 0x8B52: 0x5A7B, //CJK UNIFIED IDEOGRAPH - 0x8B53: 0x5A7C, //CJK UNIFIED IDEOGRAPH - 0x8B54: 0x5A7D, //CJK UNIFIED IDEOGRAPH - 0x8B55: 0x5A7E, //CJK UNIFIED IDEOGRAPH - 0x8B56: 0x5A80, //CJK UNIFIED IDEOGRAPH - 0x8B57: 0x5A81, //CJK UNIFIED IDEOGRAPH - 0x8B58: 0x5A82, //CJK UNIFIED IDEOGRAPH - 0x8B59: 0x5A83, //CJK UNIFIED IDEOGRAPH - 0x8B5A: 0x5A84, //CJK UNIFIED IDEOGRAPH - 0x8B5B: 0x5A85, //CJK UNIFIED IDEOGRAPH - 0x8B5C: 0x5A86, //CJK UNIFIED IDEOGRAPH - 0x8B5D: 0x5A87, //CJK UNIFIED IDEOGRAPH - 0x8B5E: 0x5A88, //CJK UNIFIED IDEOGRAPH - 0x8B5F: 0x5A89, //CJK UNIFIED IDEOGRAPH - 0x8B60: 0x5A8A, //CJK UNIFIED IDEOGRAPH - 0x8B61: 0x5A8B, //CJK UNIFIED IDEOGRAPH - 0x8B62: 0x5A8C, //CJK UNIFIED IDEOGRAPH - 0x8B63: 0x5A8D, //CJK UNIFIED IDEOGRAPH - 0x8B64: 0x5A8E, //CJK UNIFIED IDEOGRAPH - 0x8B65: 0x5A8F, //CJK UNIFIED IDEOGRAPH - 0x8B66: 0x5A90, //CJK UNIFIED IDEOGRAPH - 0x8B67: 0x5A91, //CJK UNIFIED IDEOGRAPH - 0x8B68: 0x5A93, //CJK UNIFIED IDEOGRAPH - 0x8B69: 0x5A94, //CJK UNIFIED IDEOGRAPH - 0x8B6A: 0x5A95, //CJK UNIFIED IDEOGRAPH - 0x8B6B: 0x5A96, //CJK UNIFIED IDEOGRAPH - 0x8B6C: 0x5A97, //CJK UNIFIED IDEOGRAPH - 0x8B6D: 0x5A98, //CJK UNIFIED IDEOGRAPH - 0x8B6E: 0x5A99, //CJK UNIFIED IDEOGRAPH - 0x8B6F: 0x5A9C, //CJK UNIFIED IDEOGRAPH - 0x8B70: 0x5A9D, //CJK UNIFIED IDEOGRAPH - 0x8B71: 0x5A9E, //CJK UNIFIED IDEOGRAPH - 0x8B72: 0x5A9F, //CJK UNIFIED IDEOGRAPH - 0x8B73: 0x5AA0, //CJK UNIFIED IDEOGRAPH - 0x8B74: 0x5AA1, //CJK UNIFIED IDEOGRAPH - 0x8B75: 0x5AA2, //CJK UNIFIED IDEOGRAPH - 0x8B76: 0x5AA3, //CJK UNIFIED IDEOGRAPH - 0x8B77: 0x5AA4, //CJK UNIFIED IDEOGRAPH - 0x8B78: 0x5AA5, //CJK UNIFIED IDEOGRAPH - 0x8B79: 0x5AA6, //CJK UNIFIED IDEOGRAPH - 0x8B7A: 0x5AA7, //CJK UNIFIED IDEOGRAPH - 0x8B7B: 0x5AA8, //CJK UNIFIED IDEOGRAPH - 0x8B7C: 0x5AA9, //CJK UNIFIED IDEOGRAPH - 0x8B7D: 0x5AAB, //CJK UNIFIED IDEOGRAPH - 0x8B7E: 0x5AAC, //CJK UNIFIED IDEOGRAPH - 0x8B80: 0x5AAD, //CJK UNIFIED IDEOGRAPH - 0x8B81: 0x5AAE, //CJK UNIFIED IDEOGRAPH - 0x8B82: 0x5AAF, //CJK UNIFIED IDEOGRAPH - 0x8B83: 0x5AB0, //CJK UNIFIED IDEOGRAPH - 0x8B84: 0x5AB1, //CJK UNIFIED IDEOGRAPH - 0x8B85: 0x5AB4, //CJK UNIFIED IDEOGRAPH - 0x8B86: 0x5AB6, //CJK UNIFIED IDEOGRAPH - 0x8B87: 0x5AB7, //CJK UNIFIED IDEOGRAPH - 0x8B88: 0x5AB9, //CJK UNIFIED IDEOGRAPH - 0x8B89: 0x5ABA, //CJK UNIFIED IDEOGRAPH - 0x8B8A: 0x5ABB, //CJK UNIFIED IDEOGRAPH - 0x8B8B: 0x5ABC, //CJK UNIFIED IDEOGRAPH - 0x8B8C: 0x5ABD, //CJK UNIFIED IDEOGRAPH - 0x8B8D: 0x5ABF, //CJK UNIFIED IDEOGRAPH - 0x8B8E: 0x5AC0, //CJK UNIFIED IDEOGRAPH - 0x8B8F: 0x5AC3, //CJK UNIFIED IDEOGRAPH - 0x8B90: 0x5AC4, //CJK UNIFIED IDEOGRAPH - 0x8B91: 0x5AC5, //CJK UNIFIED IDEOGRAPH - 0x8B92: 0x5AC6, //CJK UNIFIED IDEOGRAPH - 0x8B93: 0x5AC7, //CJK UNIFIED IDEOGRAPH - 0x8B94: 0x5AC8, //CJK UNIFIED IDEOGRAPH - 0x8B95: 0x5ACA, //CJK UNIFIED IDEOGRAPH - 0x8B96: 0x5ACB, //CJK UNIFIED IDEOGRAPH - 0x8B97: 0x5ACD, //CJK UNIFIED IDEOGRAPH - 0x8B98: 0x5ACE, //CJK UNIFIED IDEOGRAPH - 0x8B99: 0x5ACF, //CJK UNIFIED IDEOGRAPH - 0x8B9A: 0x5AD0, //CJK UNIFIED IDEOGRAPH - 0x8B9B: 0x5AD1, //CJK UNIFIED IDEOGRAPH - 0x8B9C: 0x5AD3, //CJK UNIFIED IDEOGRAPH - 0x8B9D: 0x5AD5, //CJK UNIFIED IDEOGRAPH - 0x8B9E: 0x5AD7, //CJK UNIFIED IDEOGRAPH - 0x8B9F: 0x5AD9, //CJK UNIFIED IDEOGRAPH - 0x8BA0: 0x5ADA, //CJK UNIFIED IDEOGRAPH - 0x8BA1: 0x5ADB, //CJK UNIFIED IDEOGRAPH - 0x8BA2: 0x5ADD, //CJK UNIFIED IDEOGRAPH - 0x8BA3: 0x5ADE, //CJK UNIFIED IDEOGRAPH - 0x8BA4: 0x5ADF, //CJK UNIFIED IDEOGRAPH - 0x8BA5: 0x5AE2, //CJK UNIFIED IDEOGRAPH - 0x8BA6: 0x5AE4, //CJK UNIFIED IDEOGRAPH - 0x8BA7: 0x5AE5, //CJK UNIFIED IDEOGRAPH - 0x8BA8: 0x5AE7, //CJK UNIFIED IDEOGRAPH - 0x8BA9: 0x5AE8, //CJK UNIFIED IDEOGRAPH - 0x8BAA: 0x5AEA, //CJK UNIFIED IDEOGRAPH - 0x8BAB: 0x5AEC, //CJK UNIFIED IDEOGRAPH - 0x8BAC: 0x5AED, //CJK UNIFIED IDEOGRAPH - 0x8BAD: 0x5AEE, //CJK UNIFIED IDEOGRAPH - 0x8BAE: 0x5AEF, //CJK UNIFIED IDEOGRAPH - 0x8BAF: 0x5AF0, //CJK UNIFIED IDEOGRAPH - 0x8BB0: 0x5AF2, //CJK UNIFIED IDEOGRAPH - 0x8BB1: 0x5AF3, //CJK UNIFIED IDEOGRAPH - 0x8BB2: 0x5AF4, //CJK UNIFIED IDEOGRAPH - 0x8BB3: 0x5AF5, //CJK UNIFIED IDEOGRAPH - 0x8BB4: 0x5AF6, //CJK UNIFIED IDEOGRAPH - 0x8BB5: 0x5AF7, //CJK UNIFIED IDEOGRAPH - 0x8BB6: 0x5AF8, //CJK UNIFIED IDEOGRAPH - 0x8BB7: 0x5AF9, //CJK UNIFIED IDEOGRAPH - 0x8BB8: 0x5AFA, //CJK UNIFIED IDEOGRAPH - 0x8BB9: 0x5AFB, //CJK UNIFIED IDEOGRAPH - 0x8BBA: 0x5AFC, //CJK UNIFIED IDEOGRAPH - 0x8BBB: 0x5AFD, //CJK UNIFIED IDEOGRAPH - 0x8BBC: 0x5AFE, //CJK UNIFIED IDEOGRAPH - 0x8BBD: 0x5AFF, //CJK UNIFIED IDEOGRAPH - 0x8BBE: 0x5B00, //CJK UNIFIED IDEOGRAPH - 0x8BBF: 0x5B01, //CJK UNIFIED IDEOGRAPH - 0x8BC0: 0x5B02, //CJK UNIFIED IDEOGRAPH - 0x8BC1: 0x5B03, //CJK UNIFIED IDEOGRAPH - 0x8BC2: 0x5B04, //CJK UNIFIED IDEOGRAPH - 0x8BC3: 0x5B05, //CJK UNIFIED IDEOGRAPH - 0x8BC4: 0x5B06, //CJK UNIFIED IDEOGRAPH - 0x8BC5: 0x5B07, //CJK UNIFIED IDEOGRAPH - 0x8BC6: 0x5B08, //CJK UNIFIED IDEOGRAPH - 0x8BC7: 0x5B0A, //CJK UNIFIED IDEOGRAPH - 0x8BC8: 0x5B0B, //CJK UNIFIED IDEOGRAPH - 0x8BC9: 0x5B0C, //CJK UNIFIED IDEOGRAPH - 0x8BCA: 0x5B0D, //CJK UNIFIED IDEOGRAPH - 0x8BCB: 0x5B0E, //CJK UNIFIED IDEOGRAPH - 0x8BCC: 0x5B0F, //CJK UNIFIED IDEOGRAPH - 0x8BCD: 0x5B10, //CJK UNIFIED IDEOGRAPH - 0x8BCE: 0x5B11, //CJK UNIFIED IDEOGRAPH - 0x8BCF: 0x5B12, //CJK UNIFIED IDEOGRAPH - 0x8BD0: 0x5B13, //CJK UNIFIED IDEOGRAPH - 0x8BD1: 0x5B14, //CJK UNIFIED IDEOGRAPH - 0x8BD2: 0x5B15, //CJK UNIFIED IDEOGRAPH - 0x8BD3: 0x5B18, //CJK UNIFIED IDEOGRAPH - 0x8BD4: 0x5B19, //CJK UNIFIED IDEOGRAPH - 0x8BD5: 0x5B1A, //CJK UNIFIED IDEOGRAPH - 0x8BD6: 0x5B1B, //CJK UNIFIED IDEOGRAPH - 0x8BD7: 0x5B1C, //CJK UNIFIED IDEOGRAPH - 0x8BD8: 0x5B1D, //CJK UNIFIED IDEOGRAPH - 0x8BD9: 0x5B1E, //CJK UNIFIED IDEOGRAPH - 0x8BDA: 0x5B1F, //CJK UNIFIED IDEOGRAPH - 0x8BDB: 0x5B20, //CJK UNIFIED IDEOGRAPH - 0x8BDC: 0x5B21, //CJK UNIFIED IDEOGRAPH - 0x8BDD: 0x5B22, //CJK UNIFIED IDEOGRAPH - 0x8BDE: 0x5B23, //CJK UNIFIED IDEOGRAPH - 0x8BDF: 0x5B24, //CJK UNIFIED IDEOGRAPH - 0x8BE0: 0x5B25, //CJK UNIFIED IDEOGRAPH - 0x8BE1: 0x5B26, //CJK UNIFIED IDEOGRAPH - 0x8BE2: 0x5B27, //CJK UNIFIED IDEOGRAPH - 0x8BE3: 0x5B28, //CJK UNIFIED IDEOGRAPH - 0x8BE4: 0x5B29, //CJK UNIFIED IDEOGRAPH - 0x8BE5: 0x5B2A, //CJK UNIFIED IDEOGRAPH - 0x8BE6: 0x5B2B, //CJK UNIFIED IDEOGRAPH - 0x8BE7: 0x5B2C, //CJK UNIFIED IDEOGRAPH - 0x8BE8: 0x5B2D, //CJK UNIFIED IDEOGRAPH - 0x8BE9: 0x5B2E, //CJK UNIFIED IDEOGRAPH - 0x8BEA: 0x5B2F, //CJK UNIFIED IDEOGRAPH - 0x8BEB: 0x5B30, //CJK UNIFIED IDEOGRAPH - 0x8BEC: 0x5B31, //CJK UNIFIED IDEOGRAPH - 0x8BED: 0x5B33, //CJK UNIFIED IDEOGRAPH - 0x8BEE: 0x5B35, //CJK UNIFIED IDEOGRAPH - 0x8BEF: 0x5B36, //CJK UNIFIED IDEOGRAPH - 0x8BF0: 0x5B38, //CJK UNIFIED IDEOGRAPH - 0x8BF1: 0x5B39, //CJK UNIFIED IDEOGRAPH - 0x8BF2: 0x5B3A, //CJK UNIFIED IDEOGRAPH - 0x8BF3: 0x5B3B, //CJK UNIFIED IDEOGRAPH - 0x8BF4: 0x5B3C, //CJK UNIFIED IDEOGRAPH - 0x8BF5: 0x5B3D, //CJK UNIFIED IDEOGRAPH - 0x8BF6: 0x5B3E, //CJK UNIFIED IDEOGRAPH - 0x8BF7: 0x5B3F, //CJK UNIFIED IDEOGRAPH - 0x8BF8: 0x5B41, //CJK UNIFIED IDEOGRAPH - 0x8BF9: 0x5B42, //CJK UNIFIED IDEOGRAPH - 0x8BFA: 0x5B43, //CJK UNIFIED IDEOGRAPH - 0x8BFB: 0x5B44, //CJK UNIFIED IDEOGRAPH - 0x8BFC: 0x5B45, //CJK UNIFIED IDEOGRAPH - 0x8BFD: 0x5B46, //CJK UNIFIED IDEOGRAPH - 0x8BFE: 0x5B47, //CJK UNIFIED IDEOGRAPH - 0x8C40: 0x5B48, //CJK UNIFIED IDEOGRAPH - 0x8C41: 0x5B49, //CJK UNIFIED IDEOGRAPH - 0x8C42: 0x5B4A, //CJK UNIFIED IDEOGRAPH - 0x8C43: 0x5B4B, //CJK UNIFIED IDEOGRAPH - 0x8C44: 0x5B4C, //CJK UNIFIED IDEOGRAPH - 0x8C45: 0x5B4D, //CJK UNIFIED IDEOGRAPH - 0x8C46: 0x5B4E, //CJK UNIFIED IDEOGRAPH - 0x8C47: 0x5B4F, //CJK UNIFIED IDEOGRAPH - 0x8C48: 0x5B52, //CJK UNIFIED IDEOGRAPH - 0x8C49: 0x5B56, //CJK UNIFIED IDEOGRAPH - 0x8C4A: 0x5B5E, //CJK UNIFIED IDEOGRAPH - 0x8C4B: 0x5B60, //CJK UNIFIED IDEOGRAPH - 0x8C4C: 0x5B61, //CJK UNIFIED IDEOGRAPH - 0x8C4D: 0x5B67, //CJK UNIFIED IDEOGRAPH - 0x8C4E: 0x5B68, //CJK UNIFIED IDEOGRAPH - 0x8C4F: 0x5B6B, //CJK UNIFIED IDEOGRAPH - 0x8C50: 0x5B6D, //CJK UNIFIED IDEOGRAPH - 0x8C51: 0x5B6E, //CJK UNIFIED IDEOGRAPH - 0x8C52: 0x5B6F, //CJK UNIFIED IDEOGRAPH - 0x8C53: 0x5B72, //CJK UNIFIED IDEOGRAPH - 0x8C54: 0x5B74, //CJK UNIFIED IDEOGRAPH - 0x8C55: 0x5B76, //CJK UNIFIED IDEOGRAPH - 0x8C56: 0x5B77, //CJK UNIFIED IDEOGRAPH - 0x8C57: 0x5B78, //CJK UNIFIED IDEOGRAPH - 0x8C58: 0x5B79, //CJK UNIFIED IDEOGRAPH - 0x8C59: 0x5B7B, //CJK UNIFIED IDEOGRAPH - 0x8C5A: 0x5B7C, //CJK UNIFIED IDEOGRAPH - 0x8C5B: 0x5B7E, //CJK UNIFIED IDEOGRAPH - 0x8C5C: 0x5B7F, //CJK UNIFIED IDEOGRAPH - 0x8C5D: 0x5B82, //CJK UNIFIED IDEOGRAPH - 0x8C5E: 0x5B86, //CJK UNIFIED IDEOGRAPH - 0x8C5F: 0x5B8A, //CJK UNIFIED IDEOGRAPH - 0x8C60: 0x5B8D, //CJK UNIFIED IDEOGRAPH - 0x8C61: 0x5B8E, //CJK UNIFIED IDEOGRAPH - 0x8C62: 0x5B90, //CJK UNIFIED IDEOGRAPH - 0x8C63: 0x5B91, //CJK UNIFIED IDEOGRAPH - 0x8C64: 0x5B92, //CJK UNIFIED IDEOGRAPH - 0x8C65: 0x5B94, //CJK UNIFIED IDEOGRAPH - 0x8C66: 0x5B96, //CJK UNIFIED IDEOGRAPH - 0x8C67: 0x5B9F, //CJK UNIFIED IDEOGRAPH - 0x8C68: 0x5BA7, //CJK UNIFIED IDEOGRAPH - 0x8C69: 0x5BA8, //CJK UNIFIED IDEOGRAPH - 0x8C6A: 0x5BA9, //CJK UNIFIED IDEOGRAPH - 0x8C6B: 0x5BAC, //CJK UNIFIED IDEOGRAPH - 0x8C6C: 0x5BAD, //CJK UNIFIED IDEOGRAPH - 0x8C6D: 0x5BAE, //CJK UNIFIED IDEOGRAPH - 0x8C6E: 0x5BAF, //CJK UNIFIED IDEOGRAPH - 0x8C6F: 0x5BB1, //CJK UNIFIED IDEOGRAPH - 0x8C70: 0x5BB2, //CJK UNIFIED IDEOGRAPH - 0x8C71: 0x5BB7, //CJK UNIFIED IDEOGRAPH - 0x8C72: 0x5BBA, //CJK UNIFIED IDEOGRAPH - 0x8C73: 0x5BBB, //CJK UNIFIED IDEOGRAPH - 0x8C74: 0x5BBC, //CJK UNIFIED IDEOGRAPH - 0x8C75: 0x5BC0, //CJK UNIFIED IDEOGRAPH - 0x8C76: 0x5BC1, //CJK UNIFIED IDEOGRAPH - 0x8C77: 0x5BC3, //CJK UNIFIED IDEOGRAPH - 0x8C78: 0x5BC8, //CJK UNIFIED IDEOGRAPH - 0x8C79: 0x5BC9, //CJK UNIFIED IDEOGRAPH - 0x8C7A: 0x5BCA, //CJK UNIFIED IDEOGRAPH - 0x8C7B: 0x5BCB, //CJK UNIFIED IDEOGRAPH - 0x8C7C: 0x5BCD, //CJK UNIFIED IDEOGRAPH - 0x8C7D: 0x5BCE, //CJK UNIFIED IDEOGRAPH - 0x8C7E: 0x5BCF, //CJK UNIFIED IDEOGRAPH - 0x8C80: 0x5BD1, //CJK UNIFIED IDEOGRAPH - 0x8C81: 0x5BD4, //CJK UNIFIED IDEOGRAPH - 0x8C82: 0x5BD5, //CJK UNIFIED IDEOGRAPH - 0x8C83: 0x5BD6, //CJK UNIFIED IDEOGRAPH - 0x8C84: 0x5BD7, //CJK UNIFIED IDEOGRAPH - 0x8C85: 0x5BD8, //CJK UNIFIED IDEOGRAPH - 0x8C86: 0x5BD9, //CJK UNIFIED IDEOGRAPH - 0x8C87: 0x5BDA, //CJK UNIFIED IDEOGRAPH - 0x8C88: 0x5BDB, //CJK UNIFIED IDEOGRAPH - 0x8C89: 0x5BDC, //CJK UNIFIED IDEOGRAPH - 0x8C8A: 0x5BE0, //CJK UNIFIED IDEOGRAPH - 0x8C8B: 0x5BE2, //CJK UNIFIED IDEOGRAPH - 0x8C8C: 0x5BE3, //CJK UNIFIED IDEOGRAPH - 0x8C8D: 0x5BE6, //CJK UNIFIED IDEOGRAPH - 0x8C8E: 0x5BE7, //CJK UNIFIED IDEOGRAPH - 0x8C8F: 0x5BE9, //CJK UNIFIED IDEOGRAPH - 0x8C90: 0x5BEA, //CJK UNIFIED IDEOGRAPH - 0x8C91: 0x5BEB, //CJK UNIFIED IDEOGRAPH - 0x8C92: 0x5BEC, //CJK UNIFIED IDEOGRAPH - 0x8C93: 0x5BED, //CJK UNIFIED IDEOGRAPH - 0x8C94: 0x5BEF, //CJK UNIFIED IDEOGRAPH - 0x8C95: 0x5BF1, //CJK UNIFIED IDEOGRAPH - 0x8C96: 0x5BF2, //CJK UNIFIED IDEOGRAPH - 0x8C97: 0x5BF3, //CJK UNIFIED IDEOGRAPH - 0x8C98: 0x5BF4, //CJK UNIFIED IDEOGRAPH - 0x8C99: 0x5BF5, //CJK UNIFIED IDEOGRAPH - 0x8C9A: 0x5BF6, //CJK UNIFIED IDEOGRAPH - 0x8C9B: 0x5BF7, //CJK UNIFIED IDEOGRAPH - 0x8C9C: 0x5BFD, //CJK UNIFIED IDEOGRAPH - 0x8C9D: 0x5BFE, //CJK UNIFIED IDEOGRAPH - 0x8C9E: 0x5C00, //CJK UNIFIED IDEOGRAPH - 0x8C9F: 0x5C02, //CJK UNIFIED IDEOGRAPH - 0x8CA0: 0x5C03, //CJK UNIFIED IDEOGRAPH - 0x8CA1: 0x5C05, //CJK UNIFIED IDEOGRAPH - 0x8CA2: 0x5C07, //CJK UNIFIED IDEOGRAPH - 0x8CA3: 0x5C08, //CJK UNIFIED IDEOGRAPH - 0x8CA4: 0x5C0B, //CJK UNIFIED IDEOGRAPH - 0x8CA5: 0x5C0C, //CJK UNIFIED IDEOGRAPH - 0x8CA6: 0x5C0D, //CJK UNIFIED IDEOGRAPH - 0x8CA7: 0x5C0E, //CJK UNIFIED IDEOGRAPH - 0x8CA8: 0x5C10, //CJK UNIFIED IDEOGRAPH - 0x8CA9: 0x5C12, //CJK UNIFIED IDEOGRAPH - 0x8CAA: 0x5C13, //CJK UNIFIED IDEOGRAPH - 0x8CAB: 0x5C17, //CJK UNIFIED IDEOGRAPH - 0x8CAC: 0x5C19, //CJK UNIFIED IDEOGRAPH - 0x8CAD: 0x5C1B, //CJK UNIFIED IDEOGRAPH - 0x8CAE: 0x5C1E, //CJK UNIFIED IDEOGRAPH - 0x8CAF: 0x5C1F, //CJK UNIFIED IDEOGRAPH - 0x8CB0: 0x5C20, //CJK UNIFIED IDEOGRAPH - 0x8CB1: 0x5C21, //CJK UNIFIED IDEOGRAPH - 0x8CB2: 0x5C23, //CJK UNIFIED IDEOGRAPH - 0x8CB3: 0x5C26, //CJK UNIFIED IDEOGRAPH - 0x8CB4: 0x5C28, //CJK UNIFIED IDEOGRAPH - 0x8CB5: 0x5C29, //CJK UNIFIED IDEOGRAPH - 0x8CB6: 0x5C2A, //CJK UNIFIED IDEOGRAPH - 0x8CB7: 0x5C2B, //CJK UNIFIED IDEOGRAPH - 0x8CB8: 0x5C2D, //CJK UNIFIED IDEOGRAPH - 0x8CB9: 0x5C2E, //CJK UNIFIED IDEOGRAPH - 0x8CBA: 0x5C2F, //CJK UNIFIED IDEOGRAPH - 0x8CBB: 0x5C30, //CJK UNIFIED IDEOGRAPH - 0x8CBC: 0x5C32, //CJK UNIFIED IDEOGRAPH - 0x8CBD: 0x5C33, //CJK UNIFIED IDEOGRAPH - 0x8CBE: 0x5C35, //CJK UNIFIED IDEOGRAPH - 0x8CBF: 0x5C36, //CJK UNIFIED IDEOGRAPH - 0x8CC0: 0x5C37, //CJK UNIFIED IDEOGRAPH - 0x8CC1: 0x5C43, //CJK UNIFIED IDEOGRAPH - 0x8CC2: 0x5C44, //CJK UNIFIED IDEOGRAPH - 0x8CC3: 0x5C46, //CJK UNIFIED IDEOGRAPH - 0x8CC4: 0x5C47, //CJK UNIFIED IDEOGRAPH - 0x8CC5: 0x5C4C, //CJK UNIFIED IDEOGRAPH - 0x8CC6: 0x5C4D, //CJK UNIFIED IDEOGRAPH - 0x8CC7: 0x5C52, //CJK UNIFIED IDEOGRAPH - 0x8CC8: 0x5C53, //CJK UNIFIED IDEOGRAPH - 0x8CC9: 0x5C54, //CJK UNIFIED IDEOGRAPH - 0x8CCA: 0x5C56, //CJK UNIFIED IDEOGRAPH - 0x8CCB: 0x5C57, //CJK UNIFIED IDEOGRAPH - 0x8CCC: 0x5C58, //CJK UNIFIED IDEOGRAPH - 0x8CCD: 0x5C5A, //CJK UNIFIED IDEOGRAPH - 0x8CCE: 0x5C5B, //CJK UNIFIED IDEOGRAPH - 0x8CCF: 0x5C5C, //CJK UNIFIED IDEOGRAPH - 0x8CD0: 0x5C5D, //CJK UNIFIED IDEOGRAPH - 0x8CD1: 0x5C5F, //CJK UNIFIED IDEOGRAPH - 0x8CD2: 0x5C62, //CJK UNIFIED IDEOGRAPH - 0x8CD3: 0x5C64, //CJK UNIFIED IDEOGRAPH - 0x8CD4: 0x5C67, //CJK UNIFIED IDEOGRAPH - 0x8CD5: 0x5C68, //CJK UNIFIED IDEOGRAPH - 0x8CD6: 0x5C69, //CJK UNIFIED IDEOGRAPH - 0x8CD7: 0x5C6A, //CJK UNIFIED IDEOGRAPH - 0x8CD8: 0x5C6B, //CJK UNIFIED IDEOGRAPH - 0x8CD9: 0x5C6C, //CJK UNIFIED IDEOGRAPH - 0x8CDA: 0x5C6D, //CJK UNIFIED IDEOGRAPH - 0x8CDB: 0x5C70, //CJK UNIFIED IDEOGRAPH - 0x8CDC: 0x5C72, //CJK UNIFIED IDEOGRAPH - 0x8CDD: 0x5C73, //CJK UNIFIED IDEOGRAPH - 0x8CDE: 0x5C74, //CJK UNIFIED IDEOGRAPH - 0x8CDF: 0x5C75, //CJK UNIFIED IDEOGRAPH - 0x8CE0: 0x5C76, //CJK UNIFIED IDEOGRAPH - 0x8CE1: 0x5C77, //CJK UNIFIED IDEOGRAPH - 0x8CE2: 0x5C78, //CJK UNIFIED IDEOGRAPH - 0x8CE3: 0x5C7B, //CJK UNIFIED IDEOGRAPH - 0x8CE4: 0x5C7C, //CJK UNIFIED IDEOGRAPH - 0x8CE5: 0x5C7D, //CJK UNIFIED IDEOGRAPH - 0x8CE6: 0x5C7E, //CJK UNIFIED IDEOGRAPH - 0x8CE7: 0x5C80, //CJK UNIFIED IDEOGRAPH - 0x8CE8: 0x5C83, //CJK UNIFIED IDEOGRAPH - 0x8CE9: 0x5C84, //CJK UNIFIED IDEOGRAPH - 0x8CEA: 0x5C85, //CJK UNIFIED IDEOGRAPH - 0x8CEB: 0x5C86, //CJK UNIFIED IDEOGRAPH - 0x8CEC: 0x5C87, //CJK UNIFIED IDEOGRAPH - 0x8CED: 0x5C89, //CJK UNIFIED IDEOGRAPH - 0x8CEE: 0x5C8A, //CJK UNIFIED IDEOGRAPH - 0x8CEF: 0x5C8B, //CJK UNIFIED IDEOGRAPH - 0x8CF0: 0x5C8E, //CJK UNIFIED IDEOGRAPH - 0x8CF1: 0x5C8F, //CJK UNIFIED IDEOGRAPH - 0x8CF2: 0x5C92, //CJK UNIFIED IDEOGRAPH - 0x8CF3: 0x5C93, //CJK UNIFIED IDEOGRAPH - 0x8CF4: 0x5C95, //CJK UNIFIED IDEOGRAPH - 0x8CF5: 0x5C9D, //CJK UNIFIED IDEOGRAPH - 0x8CF6: 0x5C9E, //CJK UNIFIED IDEOGRAPH - 0x8CF7: 0x5C9F, //CJK UNIFIED IDEOGRAPH - 0x8CF8: 0x5CA0, //CJK UNIFIED IDEOGRAPH - 0x8CF9: 0x5CA1, //CJK UNIFIED IDEOGRAPH - 0x8CFA: 0x5CA4, //CJK UNIFIED IDEOGRAPH - 0x8CFB: 0x5CA5, //CJK UNIFIED IDEOGRAPH - 0x8CFC: 0x5CA6, //CJK UNIFIED IDEOGRAPH - 0x8CFD: 0x5CA7, //CJK UNIFIED IDEOGRAPH - 0x8CFE: 0x5CA8, //CJK UNIFIED IDEOGRAPH - 0x8D40: 0x5CAA, //CJK UNIFIED IDEOGRAPH - 0x8D41: 0x5CAE, //CJK UNIFIED IDEOGRAPH - 0x8D42: 0x5CAF, //CJK UNIFIED IDEOGRAPH - 0x8D43: 0x5CB0, //CJK UNIFIED IDEOGRAPH - 0x8D44: 0x5CB2, //CJK UNIFIED IDEOGRAPH - 0x8D45: 0x5CB4, //CJK UNIFIED IDEOGRAPH - 0x8D46: 0x5CB6, //CJK UNIFIED IDEOGRAPH - 0x8D47: 0x5CB9, //CJK UNIFIED IDEOGRAPH - 0x8D48: 0x5CBA, //CJK UNIFIED IDEOGRAPH - 0x8D49: 0x5CBB, //CJK UNIFIED IDEOGRAPH - 0x8D4A: 0x5CBC, //CJK UNIFIED IDEOGRAPH - 0x8D4B: 0x5CBE, //CJK UNIFIED IDEOGRAPH - 0x8D4C: 0x5CC0, //CJK UNIFIED IDEOGRAPH - 0x8D4D: 0x5CC2, //CJK UNIFIED IDEOGRAPH - 0x8D4E: 0x5CC3, //CJK UNIFIED IDEOGRAPH - 0x8D4F: 0x5CC5, //CJK UNIFIED IDEOGRAPH - 0x8D50: 0x5CC6, //CJK UNIFIED IDEOGRAPH - 0x8D51: 0x5CC7, //CJK UNIFIED IDEOGRAPH - 0x8D52: 0x5CC8, //CJK UNIFIED IDEOGRAPH - 0x8D53: 0x5CC9, //CJK UNIFIED IDEOGRAPH - 0x8D54: 0x5CCA, //CJK UNIFIED IDEOGRAPH - 0x8D55: 0x5CCC, //CJK UNIFIED IDEOGRAPH - 0x8D56: 0x5CCD, //CJK UNIFIED IDEOGRAPH - 0x8D57: 0x5CCE, //CJK UNIFIED IDEOGRAPH - 0x8D58: 0x5CCF, //CJK UNIFIED IDEOGRAPH - 0x8D59: 0x5CD0, //CJK UNIFIED IDEOGRAPH - 0x8D5A: 0x5CD1, //CJK UNIFIED IDEOGRAPH - 0x8D5B: 0x5CD3, //CJK UNIFIED IDEOGRAPH - 0x8D5C: 0x5CD4, //CJK UNIFIED IDEOGRAPH - 0x8D5D: 0x5CD5, //CJK UNIFIED IDEOGRAPH - 0x8D5E: 0x5CD6, //CJK UNIFIED IDEOGRAPH - 0x8D5F: 0x5CD7, //CJK UNIFIED IDEOGRAPH - 0x8D60: 0x5CD8, //CJK UNIFIED IDEOGRAPH - 0x8D61: 0x5CDA, //CJK UNIFIED IDEOGRAPH - 0x8D62: 0x5CDB, //CJK UNIFIED IDEOGRAPH - 0x8D63: 0x5CDC, //CJK UNIFIED IDEOGRAPH - 0x8D64: 0x5CDD, //CJK UNIFIED IDEOGRAPH - 0x8D65: 0x5CDE, //CJK UNIFIED IDEOGRAPH - 0x8D66: 0x5CDF, //CJK UNIFIED IDEOGRAPH - 0x8D67: 0x5CE0, //CJK UNIFIED IDEOGRAPH - 0x8D68: 0x5CE2, //CJK UNIFIED IDEOGRAPH - 0x8D69: 0x5CE3, //CJK UNIFIED IDEOGRAPH - 0x8D6A: 0x5CE7, //CJK UNIFIED IDEOGRAPH - 0x8D6B: 0x5CE9, //CJK UNIFIED IDEOGRAPH - 0x8D6C: 0x5CEB, //CJK UNIFIED IDEOGRAPH - 0x8D6D: 0x5CEC, //CJK UNIFIED IDEOGRAPH - 0x8D6E: 0x5CEE, //CJK UNIFIED IDEOGRAPH - 0x8D6F: 0x5CEF, //CJK UNIFIED IDEOGRAPH - 0x8D70: 0x5CF1, //CJK UNIFIED IDEOGRAPH - 0x8D71: 0x5CF2, //CJK UNIFIED IDEOGRAPH - 0x8D72: 0x5CF3, //CJK UNIFIED IDEOGRAPH - 0x8D73: 0x5CF4, //CJK UNIFIED IDEOGRAPH - 0x8D74: 0x5CF5, //CJK UNIFIED IDEOGRAPH - 0x8D75: 0x5CF6, //CJK UNIFIED IDEOGRAPH - 0x8D76: 0x5CF7, //CJK UNIFIED IDEOGRAPH - 0x8D77: 0x5CF8, //CJK UNIFIED IDEOGRAPH - 0x8D78: 0x5CF9, //CJK UNIFIED IDEOGRAPH - 0x8D79: 0x5CFA, //CJK UNIFIED IDEOGRAPH - 0x8D7A: 0x5CFC, //CJK UNIFIED IDEOGRAPH - 0x8D7B: 0x5CFD, //CJK UNIFIED IDEOGRAPH - 0x8D7C: 0x5CFE, //CJK UNIFIED IDEOGRAPH - 0x8D7D: 0x5CFF, //CJK UNIFIED IDEOGRAPH - 0x8D7E: 0x5D00, //CJK UNIFIED IDEOGRAPH - 0x8D80: 0x5D01, //CJK UNIFIED IDEOGRAPH - 0x8D81: 0x5D04, //CJK UNIFIED IDEOGRAPH - 0x8D82: 0x5D05, //CJK UNIFIED IDEOGRAPH - 0x8D83: 0x5D08, //CJK UNIFIED IDEOGRAPH - 0x8D84: 0x5D09, //CJK UNIFIED IDEOGRAPH - 0x8D85: 0x5D0A, //CJK UNIFIED IDEOGRAPH - 0x8D86: 0x5D0B, //CJK UNIFIED IDEOGRAPH - 0x8D87: 0x5D0C, //CJK UNIFIED IDEOGRAPH - 0x8D88: 0x5D0D, //CJK UNIFIED IDEOGRAPH - 0x8D89: 0x5D0F, //CJK UNIFIED IDEOGRAPH - 0x8D8A: 0x5D10, //CJK UNIFIED IDEOGRAPH - 0x8D8B: 0x5D11, //CJK UNIFIED IDEOGRAPH - 0x8D8C: 0x5D12, //CJK UNIFIED IDEOGRAPH - 0x8D8D: 0x5D13, //CJK UNIFIED IDEOGRAPH - 0x8D8E: 0x5D15, //CJK UNIFIED IDEOGRAPH - 0x8D8F: 0x5D17, //CJK UNIFIED IDEOGRAPH - 0x8D90: 0x5D18, //CJK UNIFIED IDEOGRAPH - 0x8D91: 0x5D19, //CJK UNIFIED IDEOGRAPH - 0x8D92: 0x5D1A, //CJK UNIFIED IDEOGRAPH - 0x8D93: 0x5D1C, //CJK UNIFIED IDEOGRAPH - 0x8D94: 0x5D1D, //CJK UNIFIED IDEOGRAPH - 0x8D95: 0x5D1F, //CJK UNIFIED IDEOGRAPH - 0x8D96: 0x5D20, //CJK UNIFIED IDEOGRAPH - 0x8D97: 0x5D21, //CJK UNIFIED IDEOGRAPH - 0x8D98: 0x5D22, //CJK UNIFIED IDEOGRAPH - 0x8D99: 0x5D23, //CJK UNIFIED IDEOGRAPH - 0x8D9A: 0x5D25, //CJK UNIFIED IDEOGRAPH - 0x8D9B: 0x5D28, //CJK UNIFIED IDEOGRAPH - 0x8D9C: 0x5D2A, //CJK UNIFIED IDEOGRAPH - 0x8D9D: 0x5D2B, //CJK UNIFIED IDEOGRAPH - 0x8D9E: 0x5D2C, //CJK UNIFIED IDEOGRAPH - 0x8D9F: 0x5D2F, //CJK UNIFIED IDEOGRAPH - 0x8DA0: 0x5D30, //CJK UNIFIED IDEOGRAPH - 0x8DA1: 0x5D31, //CJK UNIFIED IDEOGRAPH - 0x8DA2: 0x5D32, //CJK UNIFIED IDEOGRAPH - 0x8DA3: 0x5D33, //CJK UNIFIED IDEOGRAPH - 0x8DA4: 0x5D35, //CJK UNIFIED IDEOGRAPH - 0x8DA5: 0x5D36, //CJK UNIFIED IDEOGRAPH - 0x8DA6: 0x5D37, //CJK UNIFIED IDEOGRAPH - 0x8DA7: 0x5D38, //CJK UNIFIED IDEOGRAPH - 0x8DA8: 0x5D39, //CJK UNIFIED IDEOGRAPH - 0x8DA9: 0x5D3A, //CJK UNIFIED IDEOGRAPH - 0x8DAA: 0x5D3B, //CJK UNIFIED IDEOGRAPH - 0x8DAB: 0x5D3C, //CJK UNIFIED IDEOGRAPH - 0x8DAC: 0x5D3F, //CJK UNIFIED IDEOGRAPH - 0x8DAD: 0x5D40, //CJK UNIFIED IDEOGRAPH - 0x8DAE: 0x5D41, //CJK UNIFIED IDEOGRAPH - 0x8DAF: 0x5D42, //CJK UNIFIED IDEOGRAPH - 0x8DB0: 0x5D43, //CJK UNIFIED IDEOGRAPH - 0x8DB1: 0x5D44, //CJK UNIFIED IDEOGRAPH - 0x8DB2: 0x5D45, //CJK UNIFIED IDEOGRAPH - 0x8DB3: 0x5D46, //CJK UNIFIED IDEOGRAPH - 0x8DB4: 0x5D48, //CJK UNIFIED IDEOGRAPH - 0x8DB5: 0x5D49, //CJK UNIFIED IDEOGRAPH - 0x8DB6: 0x5D4D, //CJK UNIFIED IDEOGRAPH - 0x8DB7: 0x5D4E, //CJK UNIFIED IDEOGRAPH - 0x8DB8: 0x5D4F, //CJK UNIFIED IDEOGRAPH - 0x8DB9: 0x5D50, //CJK UNIFIED IDEOGRAPH - 0x8DBA: 0x5D51, //CJK UNIFIED IDEOGRAPH - 0x8DBB: 0x5D52, //CJK UNIFIED IDEOGRAPH - 0x8DBC: 0x5D53, //CJK UNIFIED IDEOGRAPH - 0x8DBD: 0x5D54, //CJK UNIFIED IDEOGRAPH - 0x8DBE: 0x5D55, //CJK UNIFIED IDEOGRAPH - 0x8DBF: 0x5D56, //CJK UNIFIED IDEOGRAPH - 0x8DC0: 0x5D57, //CJK UNIFIED IDEOGRAPH - 0x8DC1: 0x5D59, //CJK UNIFIED IDEOGRAPH - 0x8DC2: 0x5D5A, //CJK UNIFIED IDEOGRAPH - 0x8DC3: 0x5D5C, //CJK UNIFIED IDEOGRAPH - 0x8DC4: 0x5D5E, //CJK UNIFIED IDEOGRAPH - 0x8DC5: 0x5D5F, //CJK UNIFIED IDEOGRAPH - 0x8DC6: 0x5D60, //CJK UNIFIED IDEOGRAPH - 0x8DC7: 0x5D61, //CJK UNIFIED IDEOGRAPH - 0x8DC8: 0x5D62, //CJK UNIFIED IDEOGRAPH - 0x8DC9: 0x5D63, //CJK UNIFIED IDEOGRAPH - 0x8DCA: 0x5D64, //CJK UNIFIED IDEOGRAPH - 0x8DCB: 0x5D65, //CJK UNIFIED IDEOGRAPH - 0x8DCC: 0x5D66, //CJK UNIFIED IDEOGRAPH - 0x8DCD: 0x5D67, //CJK UNIFIED IDEOGRAPH - 0x8DCE: 0x5D68, //CJK UNIFIED IDEOGRAPH - 0x8DCF: 0x5D6A, //CJK UNIFIED IDEOGRAPH - 0x8DD0: 0x5D6D, //CJK UNIFIED IDEOGRAPH - 0x8DD1: 0x5D6E, //CJK UNIFIED IDEOGRAPH - 0x8DD2: 0x5D70, //CJK UNIFIED IDEOGRAPH - 0x8DD3: 0x5D71, //CJK UNIFIED IDEOGRAPH - 0x8DD4: 0x5D72, //CJK UNIFIED IDEOGRAPH - 0x8DD5: 0x5D73, //CJK UNIFIED IDEOGRAPH - 0x8DD6: 0x5D75, //CJK UNIFIED IDEOGRAPH - 0x8DD7: 0x5D76, //CJK UNIFIED IDEOGRAPH - 0x8DD8: 0x5D77, //CJK UNIFIED IDEOGRAPH - 0x8DD9: 0x5D78, //CJK UNIFIED IDEOGRAPH - 0x8DDA: 0x5D79, //CJK UNIFIED IDEOGRAPH - 0x8DDB: 0x5D7A, //CJK UNIFIED IDEOGRAPH - 0x8DDC: 0x5D7B, //CJK UNIFIED IDEOGRAPH - 0x8DDD: 0x5D7C, //CJK UNIFIED IDEOGRAPH - 0x8DDE: 0x5D7D, //CJK UNIFIED IDEOGRAPH - 0x8DDF: 0x5D7E, //CJK UNIFIED IDEOGRAPH - 0x8DE0: 0x5D7F, //CJK UNIFIED IDEOGRAPH - 0x8DE1: 0x5D80, //CJK UNIFIED IDEOGRAPH - 0x8DE2: 0x5D81, //CJK UNIFIED IDEOGRAPH - 0x8DE3: 0x5D83, //CJK UNIFIED IDEOGRAPH - 0x8DE4: 0x5D84, //CJK UNIFIED IDEOGRAPH - 0x8DE5: 0x5D85, //CJK UNIFIED IDEOGRAPH - 0x8DE6: 0x5D86, //CJK UNIFIED IDEOGRAPH - 0x8DE7: 0x5D87, //CJK UNIFIED IDEOGRAPH - 0x8DE8: 0x5D88, //CJK UNIFIED IDEOGRAPH - 0x8DE9: 0x5D89, //CJK UNIFIED IDEOGRAPH - 0x8DEA: 0x5D8A, //CJK UNIFIED IDEOGRAPH - 0x8DEB: 0x5D8B, //CJK UNIFIED IDEOGRAPH - 0x8DEC: 0x5D8C, //CJK UNIFIED IDEOGRAPH - 0x8DED: 0x5D8D, //CJK UNIFIED IDEOGRAPH - 0x8DEE: 0x5D8E, //CJK UNIFIED IDEOGRAPH - 0x8DEF: 0x5D8F, //CJK UNIFIED IDEOGRAPH - 0x8DF0: 0x5D90, //CJK UNIFIED IDEOGRAPH - 0x8DF1: 0x5D91, //CJK UNIFIED IDEOGRAPH - 0x8DF2: 0x5D92, //CJK UNIFIED IDEOGRAPH - 0x8DF3: 0x5D93, //CJK UNIFIED IDEOGRAPH - 0x8DF4: 0x5D94, //CJK UNIFIED IDEOGRAPH - 0x8DF5: 0x5D95, //CJK UNIFIED IDEOGRAPH - 0x8DF6: 0x5D96, //CJK UNIFIED IDEOGRAPH - 0x8DF7: 0x5D97, //CJK UNIFIED IDEOGRAPH - 0x8DF8: 0x5D98, //CJK UNIFIED IDEOGRAPH - 0x8DF9: 0x5D9A, //CJK UNIFIED IDEOGRAPH - 0x8DFA: 0x5D9B, //CJK UNIFIED IDEOGRAPH - 0x8DFB: 0x5D9C, //CJK UNIFIED IDEOGRAPH - 0x8DFC: 0x5D9E, //CJK UNIFIED IDEOGRAPH - 0x8DFD: 0x5D9F, //CJK UNIFIED IDEOGRAPH - 0x8DFE: 0x5DA0, //CJK UNIFIED IDEOGRAPH - 0x8E40: 0x5DA1, //CJK UNIFIED IDEOGRAPH - 0x8E41: 0x5DA2, //CJK UNIFIED IDEOGRAPH - 0x8E42: 0x5DA3, //CJK UNIFIED IDEOGRAPH - 0x8E43: 0x5DA4, //CJK UNIFIED IDEOGRAPH - 0x8E44: 0x5DA5, //CJK UNIFIED IDEOGRAPH - 0x8E45: 0x5DA6, //CJK UNIFIED IDEOGRAPH - 0x8E46: 0x5DA7, //CJK UNIFIED IDEOGRAPH - 0x8E47: 0x5DA8, //CJK UNIFIED IDEOGRAPH - 0x8E48: 0x5DA9, //CJK UNIFIED IDEOGRAPH - 0x8E49: 0x5DAA, //CJK UNIFIED IDEOGRAPH - 0x8E4A: 0x5DAB, //CJK UNIFIED IDEOGRAPH - 0x8E4B: 0x5DAC, //CJK UNIFIED IDEOGRAPH - 0x8E4C: 0x5DAD, //CJK UNIFIED IDEOGRAPH - 0x8E4D: 0x5DAE, //CJK UNIFIED IDEOGRAPH - 0x8E4E: 0x5DAF, //CJK UNIFIED IDEOGRAPH - 0x8E4F: 0x5DB0, //CJK UNIFIED IDEOGRAPH - 0x8E50: 0x5DB1, //CJK UNIFIED IDEOGRAPH - 0x8E51: 0x5DB2, //CJK UNIFIED IDEOGRAPH - 0x8E52: 0x5DB3, //CJK UNIFIED IDEOGRAPH - 0x8E53: 0x5DB4, //CJK UNIFIED IDEOGRAPH - 0x8E54: 0x5DB5, //CJK UNIFIED IDEOGRAPH - 0x8E55: 0x5DB6, //CJK UNIFIED IDEOGRAPH - 0x8E56: 0x5DB8, //CJK UNIFIED IDEOGRAPH - 0x8E57: 0x5DB9, //CJK UNIFIED IDEOGRAPH - 0x8E58: 0x5DBA, //CJK UNIFIED IDEOGRAPH - 0x8E59: 0x5DBB, //CJK UNIFIED IDEOGRAPH - 0x8E5A: 0x5DBC, //CJK UNIFIED IDEOGRAPH - 0x8E5B: 0x5DBD, //CJK UNIFIED IDEOGRAPH - 0x8E5C: 0x5DBE, //CJK UNIFIED IDEOGRAPH - 0x8E5D: 0x5DBF, //CJK UNIFIED IDEOGRAPH - 0x8E5E: 0x5DC0, //CJK UNIFIED IDEOGRAPH - 0x8E5F: 0x5DC1, //CJK UNIFIED IDEOGRAPH - 0x8E60: 0x5DC2, //CJK UNIFIED IDEOGRAPH - 0x8E61: 0x5DC3, //CJK UNIFIED IDEOGRAPH - 0x8E62: 0x5DC4, //CJK UNIFIED IDEOGRAPH - 0x8E63: 0x5DC6, //CJK UNIFIED IDEOGRAPH - 0x8E64: 0x5DC7, //CJK UNIFIED IDEOGRAPH - 0x8E65: 0x5DC8, //CJK UNIFIED IDEOGRAPH - 0x8E66: 0x5DC9, //CJK UNIFIED IDEOGRAPH - 0x8E67: 0x5DCA, //CJK UNIFIED IDEOGRAPH - 0x8E68: 0x5DCB, //CJK UNIFIED IDEOGRAPH - 0x8E69: 0x5DCC, //CJK UNIFIED IDEOGRAPH - 0x8E6A: 0x5DCE, //CJK UNIFIED IDEOGRAPH - 0x8E6B: 0x5DCF, //CJK UNIFIED IDEOGRAPH - 0x8E6C: 0x5DD0, //CJK UNIFIED IDEOGRAPH - 0x8E6D: 0x5DD1, //CJK UNIFIED IDEOGRAPH - 0x8E6E: 0x5DD2, //CJK UNIFIED IDEOGRAPH - 0x8E6F: 0x5DD3, //CJK UNIFIED IDEOGRAPH - 0x8E70: 0x5DD4, //CJK UNIFIED IDEOGRAPH - 0x8E71: 0x5DD5, //CJK UNIFIED IDEOGRAPH - 0x8E72: 0x5DD6, //CJK UNIFIED IDEOGRAPH - 0x8E73: 0x5DD7, //CJK UNIFIED IDEOGRAPH - 0x8E74: 0x5DD8, //CJK UNIFIED IDEOGRAPH - 0x8E75: 0x5DD9, //CJK UNIFIED IDEOGRAPH - 0x8E76: 0x5DDA, //CJK UNIFIED IDEOGRAPH - 0x8E77: 0x5DDC, //CJK UNIFIED IDEOGRAPH - 0x8E78: 0x5DDF, //CJK UNIFIED IDEOGRAPH - 0x8E79: 0x5DE0, //CJK UNIFIED IDEOGRAPH - 0x8E7A: 0x5DE3, //CJK UNIFIED IDEOGRAPH - 0x8E7B: 0x5DE4, //CJK UNIFIED IDEOGRAPH - 0x8E7C: 0x5DEA, //CJK UNIFIED IDEOGRAPH - 0x8E7D: 0x5DEC, //CJK UNIFIED IDEOGRAPH - 0x8E7E: 0x5DED, //CJK UNIFIED IDEOGRAPH - 0x8E80: 0x5DF0, //CJK UNIFIED IDEOGRAPH - 0x8E81: 0x5DF5, //CJK UNIFIED IDEOGRAPH - 0x8E82: 0x5DF6, //CJK UNIFIED IDEOGRAPH - 0x8E83: 0x5DF8, //CJK UNIFIED IDEOGRAPH - 0x8E84: 0x5DF9, //CJK UNIFIED IDEOGRAPH - 0x8E85: 0x5DFA, //CJK UNIFIED IDEOGRAPH - 0x8E86: 0x5DFB, //CJK UNIFIED IDEOGRAPH - 0x8E87: 0x5DFC, //CJK UNIFIED IDEOGRAPH - 0x8E88: 0x5DFF, //CJK UNIFIED IDEOGRAPH - 0x8E89: 0x5E00, //CJK UNIFIED IDEOGRAPH - 0x8E8A: 0x5E04, //CJK UNIFIED IDEOGRAPH - 0x8E8B: 0x5E07, //CJK UNIFIED IDEOGRAPH - 0x8E8C: 0x5E09, //CJK UNIFIED IDEOGRAPH - 0x8E8D: 0x5E0A, //CJK UNIFIED IDEOGRAPH - 0x8E8E: 0x5E0B, //CJK UNIFIED IDEOGRAPH - 0x8E8F: 0x5E0D, //CJK UNIFIED IDEOGRAPH - 0x8E90: 0x5E0E, //CJK UNIFIED IDEOGRAPH - 0x8E91: 0x5E12, //CJK UNIFIED IDEOGRAPH - 0x8E92: 0x5E13, //CJK UNIFIED IDEOGRAPH - 0x8E93: 0x5E17, //CJK UNIFIED IDEOGRAPH - 0x8E94: 0x5E1E, //CJK UNIFIED IDEOGRAPH - 0x8E95: 0x5E1F, //CJK UNIFIED IDEOGRAPH - 0x8E96: 0x5E20, //CJK UNIFIED IDEOGRAPH - 0x8E97: 0x5E21, //CJK UNIFIED IDEOGRAPH - 0x8E98: 0x5E22, //CJK UNIFIED IDEOGRAPH - 0x8E99: 0x5E23, //CJK UNIFIED IDEOGRAPH - 0x8E9A: 0x5E24, //CJK UNIFIED IDEOGRAPH - 0x8E9B: 0x5E25, //CJK UNIFIED IDEOGRAPH - 0x8E9C: 0x5E28, //CJK UNIFIED IDEOGRAPH - 0x8E9D: 0x5E29, //CJK UNIFIED IDEOGRAPH - 0x8E9E: 0x5E2A, //CJK UNIFIED IDEOGRAPH - 0x8E9F: 0x5E2B, //CJK UNIFIED IDEOGRAPH - 0x8EA0: 0x5E2C, //CJK UNIFIED IDEOGRAPH - 0x8EA1: 0x5E2F, //CJK UNIFIED IDEOGRAPH - 0x8EA2: 0x5E30, //CJK UNIFIED IDEOGRAPH - 0x8EA3: 0x5E32, //CJK UNIFIED IDEOGRAPH - 0x8EA4: 0x5E33, //CJK UNIFIED IDEOGRAPH - 0x8EA5: 0x5E34, //CJK UNIFIED IDEOGRAPH - 0x8EA6: 0x5E35, //CJK UNIFIED IDEOGRAPH - 0x8EA7: 0x5E36, //CJK UNIFIED IDEOGRAPH - 0x8EA8: 0x5E39, //CJK UNIFIED IDEOGRAPH - 0x8EA9: 0x5E3A, //CJK UNIFIED IDEOGRAPH - 0x8EAA: 0x5E3E, //CJK UNIFIED IDEOGRAPH - 0x8EAB: 0x5E3F, //CJK UNIFIED IDEOGRAPH - 0x8EAC: 0x5E40, //CJK UNIFIED IDEOGRAPH - 0x8EAD: 0x5E41, //CJK UNIFIED IDEOGRAPH - 0x8EAE: 0x5E43, //CJK UNIFIED IDEOGRAPH - 0x8EAF: 0x5E46, //CJK UNIFIED IDEOGRAPH - 0x8EB0: 0x5E47, //CJK UNIFIED IDEOGRAPH - 0x8EB1: 0x5E48, //CJK UNIFIED IDEOGRAPH - 0x8EB2: 0x5E49, //CJK UNIFIED IDEOGRAPH - 0x8EB3: 0x5E4A, //CJK UNIFIED IDEOGRAPH - 0x8EB4: 0x5E4B, //CJK UNIFIED IDEOGRAPH - 0x8EB5: 0x5E4D, //CJK UNIFIED IDEOGRAPH - 0x8EB6: 0x5E4E, //CJK UNIFIED IDEOGRAPH - 0x8EB7: 0x5E4F, //CJK UNIFIED IDEOGRAPH - 0x8EB8: 0x5E50, //CJK UNIFIED IDEOGRAPH - 0x8EB9: 0x5E51, //CJK UNIFIED IDEOGRAPH - 0x8EBA: 0x5E52, //CJK UNIFIED IDEOGRAPH - 0x8EBB: 0x5E53, //CJK UNIFIED IDEOGRAPH - 0x8EBC: 0x5E56, //CJK UNIFIED IDEOGRAPH - 0x8EBD: 0x5E57, //CJK UNIFIED IDEOGRAPH - 0x8EBE: 0x5E58, //CJK UNIFIED IDEOGRAPH - 0x8EBF: 0x5E59, //CJK UNIFIED IDEOGRAPH - 0x8EC0: 0x5E5A, //CJK UNIFIED IDEOGRAPH - 0x8EC1: 0x5E5C, //CJK UNIFIED IDEOGRAPH - 0x8EC2: 0x5E5D, //CJK UNIFIED IDEOGRAPH - 0x8EC3: 0x5E5F, //CJK UNIFIED IDEOGRAPH - 0x8EC4: 0x5E60, //CJK UNIFIED IDEOGRAPH - 0x8EC5: 0x5E63, //CJK UNIFIED IDEOGRAPH - 0x8EC6: 0x5E64, //CJK UNIFIED IDEOGRAPH - 0x8EC7: 0x5E65, //CJK UNIFIED IDEOGRAPH - 0x8EC8: 0x5E66, //CJK UNIFIED IDEOGRAPH - 0x8EC9: 0x5E67, //CJK UNIFIED IDEOGRAPH - 0x8ECA: 0x5E68, //CJK UNIFIED IDEOGRAPH - 0x8ECB: 0x5E69, //CJK UNIFIED IDEOGRAPH - 0x8ECC: 0x5E6A, //CJK UNIFIED IDEOGRAPH - 0x8ECD: 0x5E6B, //CJK UNIFIED IDEOGRAPH - 0x8ECE: 0x5E6C, //CJK UNIFIED IDEOGRAPH - 0x8ECF: 0x5E6D, //CJK UNIFIED IDEOGRAPH - 0x8ED0: 0x5E6E, //CJK UNIFIED IDEOGRAPH - 0x8ED1: 0x5E6F, //CJK UNIFIED IDEOGRAPH - 0x8ED2: 0x5E70, //CJK UNIFIED IDEOGRAPH - 0x8ED3: 0x5E71, //CJK UNIFIED IDEOGRAPH - 0x8ED4: 0x5E75, //CJK UNIFIED IDEOGRAPH - 0x8ED5: 0x5E77, //CJK UNIFIED IDEOGRAPH - 0x8ED6: 0x5E79, //CJK UNIFIED IDEOGRAPH - 0x8ED7: 0x5E7E, //CJK UNIFIED IDEOGRAPH - 0x8ED8: 0x5E81, //CJK UNIFIED IDEOGRAPH - 0x8ED9: 0x5E82, //CJK UNIFIED IDEOGRAPH - 0x8EDA: 0x5E83, //CJK UNIFIED IDEOGRAPH - 0x8EDB: 0x5E85, //CJK UNIFIED IDEOGRAPH - 0x8EDC: 0x5E88, //CJK UNIFIED IDEOGRAPH - 0x8EDD: 0x5E89, //CJK UNIFIED IDEOGRAPH - 0x8EDE: 0x5E8C, //CJK UNIFIED IDEOGRAPH - 0x8EDF: 0x5E8D, //CJK UNIFIED IDEOGRAPH - 0x8EE0: 0x5E8E, //CJK UNIFIED IDEOGRAPH - 0x8EE1: 0x5E92, //CJK UNIFIED IDEOGRAPH - 0x8EE2: 0x5E98, //CJK UNIFIED IDEOGRAPH - 0x8EE3: 0x5E9B, //CJK UNIFIED IDEOGRAPH - 0x8EE4: 0x5E9D, //CJK UNIFIED IDEOGRAPH - 0x8EE5: 0x5EA1, //CJK UNIFIED IDEOGRAPH - 0x8EE6: 0x5EA2, //CJK UNIFIED IDEOGRAPH - 0x8EE7: 0x5EA3, //CJK UNIFIED IDEOGRAPH - 0x8EE8: 0x5EA4, //CJK UNIFIED IDEOGRAPH - 0x8EE9: 0x5EA8, //CJK UNIFIED IDEOGRAPH - 0x8EEA: 0x5EA9, //CJK UNIFIED IDEOGRAPH - 0x8EEB: 0x5EAA, //CJK UNIFIED IDEOGRAPH - 0x8EEC: 0x5EAB, //CJK UNIFIED IDEOGRAPH - 0x8EED: 0x5EAC, //CJK UNIFIED IDEOGRAPH - 0x8EEE: 0x5EAE, //CJK UNIFIED IDEOGRAPH - 0x8EEF: 0x5EAF, //CJK UNIFIED IDEOGRAPH - 0x8EF0: 0x5EB0, //CJK UNIFIED IDEOGRAPH - 0x8EF1: 0x5EB1, //CJK UNIFIED IDEOGRAPH - 0x8EF2: 0x5EB2, //CJK UNIFIED IDEOGRAPH - 0x8EF3: 0x5EB4, //CJK UNIFIED IDEOGRAPH - 0x8EF4: 0x5EBA, //CJK UNIFIED IDEOGRAPH - 0x8EF5: 0x5EBB, //CJK UNIFIED IDEOGRAPH - 0x8EF6: 0x5EBC, //CJK UNIFIED IDEOGRAPH - 0x8EF7: 0x5EBD, //CJK UNIFIED IDEOGRAPH - 0x8EF8: 0x5EBF, //CJK UNIFIED IDEOGRAPH - 0x8EF9: 0x5EC0, //CJK UNIFIED IDEOGRAPH - 0x8EFA: 0x5EC1, //CJK UNIFIED IDEOGRAPH - 0x8EFB: 0x5EC2, //CJK UNIFIED IDEOGRAPH - 0x8EFC: 0x5EC3, //CJK UNIFIED IDEOGRAPH - 0x8EFD: 0x5EC4, //CJK UNIFIED IDEOGRAPH - 0x8EFE: 0x5EC5, //CJK UNIFIED IDEOGRAPH - 0x8F40: 0x5EC6, //CJK UNIFIED IDEOGRAPH - 0x8F41: 0x5EC7, //CJK UNIFIED IDEOGRAPH - 0x8F42: 0x5EC8, //CJK UNIFIED IDEOGRAPH - 0x8F43: 0x5ECB, //CJK UNIFIED IDEOGRAPH - 0x8F44: 0x5ECC, //CJK UNIFIED IDEOGRAPH - 0x8F45: 0x5ECD, //CJK UNIFIED IDEOGRAPH - 0x8F46: 0x5ECE, //CJK UNIFIED IDEOGRAPH - 0x8F47: 0x5ECF, //CJK UNIFIED IDEOGRAPH - 0x8F48: 0x5ED0, //CJK UNIFIED IDEOGRAPH - 0x8F49: 0x5ED4, //CJK UNIFIED IDEOGRAPH - 0x8F4A: 0x5ED5, //CJK UNIFIED IDEOGRAPH - 0x8F4B: 0x5ED7, //CJK UNIFIED IDEOGRAPH - 0x8F4C: 0x5ED8, //CJK UNIFIED IDEOGRAPH - 0x8F4D: 0x5ED9, //CJK UNIFIED IDEOGRAPH - 0x8F4E: 0x5EDA, //CJK UNIFIED IDEOGRAPH - 0x8F4F: 0x5EDC, //CJK UNIFIED IDEOGRAPH - 0x8F50: 0x5EDD, //CJK UNIFIED IDEOGRAPH - 0x8F51: 0x5EDE, //CJK UNIFIED IDEOGRAPH - 0x8F52: 0x5EDF, //CJK UNIFIED IDEOGRAPH - 0x8F53: 0x5EE0, //CJK UNIFIED IDEOGRAPH - 0x8F54: 0x5EE1, //CJK UNIFIED IDEOGRAPH - 0x8F55: 0x5EE2, //CJK UNIFIED IDEOGRAPH - 0x8F56: 0x5EE3, //CJK UNIFIED IDEOGRAPH - 0x8F57: 0x5EE4, //CJK UNIFIED IDEOGRAPH - 0x8F58: 0x5EE5, //CJK UNIFIED IDEOGRAPH - 0x8F59: 0x5EE6, //CJK UNIFIED IDEOGRAPH - 0x8F5A: 0x5EE7, //CJK UNIFIED IDEOGRAPH - 0x8F5B: 0x5EE9, //CJK UNIFIED IDEOGRAPH - 0x8F5C: 0x5EEB, //CJK UNIFIED IDEOGRAPH - 0x8F5D: 0x5EEC, //CJK UNIFIED IDEOGRAPH - 0x8F5E: 0x5EED, //CJK UNIFIED IDEOGRAPH - 0x8F5F: 0x5EEE, //CJK UNIFIED IDEOGRAPH - 0x8F60: 0x5EEF, //CJK UNIFIED IDEOGRAPH - 0x8F61: 0x5EF0, //CJK UNIFIED IDEOGRAPH - 0x8F62: 0x5EF1, //CJK UNIFIED IDEOGRAPH - 0x8F63: 0x5EF2, //CJK UNIFIED IDEOGRAPH - 0x8F64: 0x5EF3, //CJK UNIFIED IDEOGRAPH - 0x8F65: 0x5EF5, //CJK UNIFIED IDEOGRAPH - 0x8F66: 0x5EF8, //CJK UNIFIED IDEOGRAPH - 0x8F67: 0x5EF9, //CJK UNIFIED IDEOGRAPH - 0x8F68: 0x5EFB, //CJK UNIFIED IDEOGRAPH - 0x8F69: 0x5EFC, //CJK UNIFIED IDEOGRAPH - 0x8F6A: 0x5EFD, //CJK UNIFIED IDEOGRAPH - 0x8F6B: 0x5F05, //CJK UNIFIED IDEOGRAPH - 0x8F6C: 0x5F06, //CJK UNIFIED IDEOGRAPH - 0x8F6D: 0x5F07, //CJK UNIFIED IDEOGRAPH - 0x8F6E: 0x5F09, //CJK UNIFIED IDEOGRAPH - 0x8F6F: 0x5F0C, //CJK UNIFIED IDEOGRAPH - 0x8F70: 0x5F0D, //CJK UNIFIED IDEOGRAPH - 0x8F71: 0x5F0E, //CJK UNIFIED IDEOGRAPH - 0x8F72: 0x5F10, //CJK UNIFIED IDEOGRAPH - 0x8F73: 0x5F12, //CJK UNIFIED IDEOGRAPH - 0x8F74: 0x5F14, //CJK UNIFIED IDEOGRAPH - 0x8F75: 0x5F16, //CJK UNIFIED IDEOGRAPH - 0x8F76: 0x5F19, //CJK UNIFIED IDEOGRAPH - 0x8F77: 0x5F1A, //CJK UNIFIED IDEOGRAPH - 0x8F78: 0x5F1C, //CJK UNIFIED IDEOGRAPH - 0x8F79: 0x5F1D, //CJK UNIFIED IDEOGRAPH - 0x8F7A: 0x5F1E, //CJK UNIFIED IDEOGRAPH - 0x8F7B: 0x5F21, //CJK UNIFIED IDEOGRAPH - 0x8F7C: 0x5F22, //CJK UNIFIED IDEOGRAPH - 0x8F7D: 0x5F23, //CJK UNIFIED IDEOGRAPH - 0x8F7E: 0x5F24, //CJK UNIFIED IDEOGRAPH - 0x8F80: 0x5F28, //CJK UNIFIED IDEOGRAPH - 0x8F81: 0x5F2B, //CJK UNIFIED IDEOGRAPH - 0x8F82: 0x5F2C, //CJK UNIFIED IDEOGRAPH - 0x8F83: 0x5F2E, //CJK UNIFIED IDEOGRAPH - 0x8F84: 0x5F30, //CJK UNIFIED IDEOGRAPH - 0x8F85: 0x5F32, //CJK UNIFIED IDEOGRAPH - 0x8F86: 0x5F33, //CJK UNIFIED IDEOGRAPH - 0x8F87: 0x5F34, //CJK UNIFIED IDEOGRAPH - 0x8F88: 0x5F35, //CJK UNIFIED IDEOGRAPH - 0x8F89: 0x5F36, //CJK UNIFIED IDEOGRAPH - 0x8F8A: 0x5F37, //CJK UNIFIED IDEOGRAPH - 0x8F8B: 0x5F38, //CJK UNIFIED IDEOGRAPH - 0x8F8C: 0x5F3B, //CJK UNIFIED IDEOGRAPH - 0x8F8D: 0x5F3D, //CJK UNIFIED IDEOGRAPH - 0x8F8E: 0x5F3E, //CJK UNIFIED IDEOGRAPH - 0x8F8F: 0x5F3F, //CJK UNIFIED IDEOGRAPH - 0x8F90: 0x5F41, //CJK UNIFIED IDEOGRAPH - 0x8F91: 0x5F42, //CJK UNIFIED IDEOGRAPH - 0x8F92: 0x5F43, //CJK UNIFIED IDEOGRAPH - 0x8F93: 0x5F44, //CJK UNIFIED IDEOGRAPH - 0x8F94: 0x5F45, //CJK UNIFIED IDEOGRAPH - 0x8F95: 0x5F46, //CJK UNIFIED IDEOGRAPH - 0x8F96: 0x5F47, //CJK UNIFIED IDEOGRAPH - 0x8F97: 0x5F48, //CJK UNIFIED IDEOGRAPH - 0x8F98: 0x5F49, //CJK UNIFIED IDEOGRAPH - 0x8F99: 0x5F4A, //CJK UNIFIED IDEOGRAPH - 0x8F9A: 0x5F4B, //CJK UNIFIED IDEOGRAPH - 0x8F9B: 0x5F4C, //CJK UNIFIED IDEOGRAPH - 0x8F9C: 0x5F4D, //CJK UNIFIED IDEOGRAPH - 0x8F9D: 0x5F4E, //CJK UNIFIED IDEOGRAPH - 0x8F9E: 0x5F4F, //CJK UNIFIED IDEOGRAPH - 0x8F9F: 0x5F51, //CJK UNIFIED IDEOGRAPH - 0x8FA0: 0x5F54, //CJK UNIFIED IDEOGRAPH - 0x8FA1: 0x5F59, //CJK UNIFIED IDEOGRAPH - 0x8FA2: 0x5F5A, //CJK UNIFIED IDEOGRAPH - 0x8FA3: 0x5F5B, //CJK UNIFIED IDEOGRAPH - 0x8FA4: 0x5F5C, //CJK UNIFIED IDEOGRAPH - 0x8FA5: 0x5F5E, //CJK UNIFIED IDEOGRAPH - 0x8FA6: 0x5F5F, //CJK UNIFIED IDEOGRAPH - 0x8FA7: 0x5F60, //CJK UNIFIED IDEOGRAPH - 0x8FA8: 0x5F63, //CJK UNIFIED IDEOGRAPH - 0x8FA9: 0x5F65, //CJK UNIFIED IDEOGRAPH - 0x8FAA: 0x5F67, //CJK UNIFIED IDEOGRAPH - 0x8FAB: 0x5F68, //CJK UNIFIED IDEOGRAPH - 0x8FAC: 0x5F6B, //CJK UNIFIED IDEOGRAPH - 0x8FAD: 0x5F6E, //CJK UNIFIED IDEOGRAPH - 0x8FAE: 0x5F6F, //CJK UNIFIED IDEOGRAPH - 0x8FAF: 0x5F72, //CJK UNIFIED IDEOGRAPH - 0x8FB0: 0x5F74, //CJK UNIFIED IDEOGRAPH - 0x8FB1: 0x5F75, //CJK UNIFIED IDEOGRAPH - 0x8FB2: 0x5F76, //CJK UNIFIED IDEOGRAPH - 0x8FB3: 0x5F78, //CJK UNIFIED IDEOGRAPH - 0x8FB4: 0x5F7A, //CJK UNIFIED IDEOGRAPH - 0x8FB5: 0x5F7D, //CJK UNIFIED IDEOGRAPH - 0x8FB6: 0x5F7E, //CJK UNIFIED IDEOGRAPH - 0x8FB7: 0x5F7F, //CJK UNIFIED IDEOGRAPH - 0x8FB8: 0x5F83, //CJK UNIFIED IDEOGRAPH - 0x8FB9: 0x5F86, //CJK UNIFIED IDEOGRAPH - 0x8FBA: 0x5F8D, //CJK UNIFIED IDEOGRAPH - 0x8FBB: 0x5F8E, //CJK UNIFIED IDEOGRAPH - 0x8FBC: 0x5F8F, //CJK UNIFIED IDEOGRAPH - 0x8FBD: 0x5F91, //CJK UNIFIED IDEOGRAPH - 0x8FBE: 0x5F93, //CJK UNIFIED IDEOGRAPH - 0x8FBF: 0x5F94, //CJK UNIFIED IDEOGRAPH - 0x8FC0: 0x5F96, //CJK UNIFIED IDEOGRAPH - 0x8FC1: 0x5F9A, //CJK UNIFIED IDEOGRAPH - 0x8FC2: 0x5F9B, //CJK UNIFIED IDEOGRAPH - 0x8FC3: 0x5F9D, //CJK UNIFIED IDEOGRAPH - 0x8FC4: 0x5F9E, //CJK UNIFIED IDEOGRAPH - 0x8FC5: 0x5F9F, //CJK UNIFIED IDEOGRAPH - 0x8FC6: 0x5FA0, //CJK UNIFIED IDEOGRAPH - 0x8FC7: 0x5FA2, //CJK UNIFIED IDEOGRAPH - 0x8FC8: 0x5FA3, //CJK UNIFIED IDEOGRAPH - 0x8FC9: 0x5FA4, //CJK UNIFIED IDEOGRAPH - 0x8FCA: 0x5FA5, //CJK UNIFIED IDEOGRAPH - 0x8FCB: 0x5FA6, //CJK UNIFIED IDEOGRAPH - 0x8FCC: 0x5FA7, //CJK UNIFIED IDEOGRAPH - 0x8FCD: 0x5FA9, //CJK UNIFIED IDEOGRAPH - 0x8FCE: 0x5FAB, //CJK UNIFIED IDEOGRAPH - 0x8FCF: 0x5FAC, //CJK UNIFIED IDEOGRAPH - 0x8FD0: 0x5FAF, //CJK UNIFIED IDEOGRAPH - 0x8FD1: 0x5FB0, //CJK UNIFIED IDEOGRAPH - 0x8FD2: 0x5FB1, //CJK UNIFIED IDEOGRAPH - 0x8FD3: 0x5FB2, //CJK UNIFIED IDEOGRAPH - 0x8FD4: 0x5FB3, //CJK UNIFIED IDEOGRAPH - 0x8FD5: 0x5FB4, //CJK UNIFIED IDEOGRAPH - 0x8FD6: 0x5FB6, //CJK UNIFIED IDEOGRAPH - 0x8FD7: 0x5FB8, //CJK UNIFIED IDEOGRAPH - 0x8FD8: 0x5FB9, //CJK UNIFIED IDEOGRAPH - 0x8FD9: 0x5FBA, //CJK UNIFIED IDEOGRAPH - 0x8FDA: 0x5FBB, //CJK UNIFIED IDEOGRAPH - 0x8FDB: 0x5FBE, //CJK UNIFIED IDEOGRAPH - 0x8FDC: 0x5FBF, //CJK UNIFIED IDEOGRAPH - 0x8FDD: 0x5FC0, //CJK UNIFIED IDEOGRAPH - 0x8FDE: 0x5FC1, //CJK UNIFIED IDEOGRAPH - 0x8FDF: 0x5FC2, //CJK UNIFIED IDEOGRAPH - 0x8FE0: 0x5FC7, //CJK UNIFIED IDEOGRAPH - 0x8FE1: 0x5FC8, //CJK UNIFIED IDEOGRAPH - 0x8FE2: 0x5FCA, //CJK UNIFIED IDEOGRAPH - 0x8FE3: 0x5FCB, //CJK UNIFIED IDEOGRAPH - 0x8FE4: 0x5FCE, //CJK UNIFIED IDEOGRAPH - 0x8FE5: 0x5FD3, //CJK UNIFIED IDEOGRAPH - 0x8FE6: 0x5FD4, //CJK UNIFIED IDEOGRAPH - 0x8FE7: 0x5FD5, //CJK UNIFIED IDEOGRAPH - 0x8FE8: 0x5FDA, //CJK UNIFIED IDEOGRAPH - 0x8FE9: 0x5FDB, //CJK UNIFIED IDEOGRAPH - 0x8FEA: 0x5FDC, //CJK UNIFIED IDEOGRAPH - 0x8FEB: 0x5FDE, //CJK UNIFIED IDEOGRAPH - 0x8FEC: 0x5FDF, //CJK UNIFIED IDEOGRAPH - 0x8FED: 0x5FE2, //CJK UNIFIED IDEOGRAPH - 0x8FEE: 0x5FE3, //CJK UNIFIED IDEOGRAPH - 0x8FEF: 0x5FE5, //CJK UNIFIED IDEOGRAPH - 0x8FF0: 0x5FE6, //CJK UNIFIED IDEOGRAPH - 0x8FF1: 0x5FE8, //CJK UNIFIED IDEOGRAPH - 0x8FF2: 0x5FE9, //CJK UNIFIED IDEOGRAPH - 0x8FF3: 0x5FEC, //CJK UNIFIED IDEOGRAPH - 0x8FF4: 0x5FEF, //CJK UNIFIED IDEOGRAPH - 0x8FF5: 0x5FF0, //CJK UNIFIED IDEOGRAPH - 0x8FF6: 0x5FF2, //CJK UNIFIED IDEOGRAPH - 0x8FF7: 0x5FF3, //CJK UNIFIED IDEOGRAPH - 0x8FF8: 0x5FF4, //CJK UNIFIED IDEOGRAPH - 0x8FF9: 0x5FF6, //CJK UNIFIED IDEOGRAPH - 0x8FFA: 0x5FF7, //CJK UNIFIED IDEOGRAPH - 0x8FFB: 0x5FF9, //CJK UNIFIED IDEOGRAPH - 0x8FFC: 0x5FFA, //CJK UNIFIED IDEOGRAPH - 0x8FFD: 0x5FFC, //CJK UNIFIED IDEOGRAPH - 0x8FFE: 0x6007, //CJK UNIFIED IDEOGRAPH - 0x9040: 0x6008, //CJK UNIFIED IDEOGRAPH - 0x9041: 0x6009, //CJK UNIFIED IDEOGRAPH - 0x9042: 0x600B, //CJK UNIFIED IDEOGRAPH - 0x9043: 0x600C, //CJK UNIFIED IDEOGRAPH - 0x9044: 0x6010, //CJK UNIFIED IDEOGRAPH - 0x9045: 0x6011, //CJK UNIFIED IDEOGRAPH - 0x9046: 0x6013, //CJK UNIFIED IDEOGRAPH - 0x9047: 0x6017, //CJK UNIFIED IDEOGRAPH - 0x9048: 0x6018, //CJK UNIFIED IDEOGRAPH - 0x9049: 0x601A, //CJK UNIFIED IDEOGRAPH - 0x904A: 0x601E, //CJK UNIFIED IDEOGRAPH - 0x904B: 0x601F, //CJK UNIFIED IDEOGRAPH - 0x904C: 0x6022, //CJK UNIFIED IDEOGRAPH - 0x904D: 0x6023, //CJK UNIFIED IDEOGRAPH - 0x904E: 0x6024, //CJK UNIFIED IDEOGRAPH - 0x904F: 0x602C, //CJK UNIFIED IDEOGRAPH - 0x9050: 0x602D, //CJK UNIFIED IDEOGRAPH - 0x9051: 0x602E, //CJK UNIFIED IDEOGRAPH - 0x9052: 0x6030, //CJK UNIFIED IDEOGRAPH - 0x9053: 0x6031, //CJK UNIFIED IDEOGRAPH - 0x9054: 0x6032, //CJK UNIFIED IDEOGRAPH - 0x9055: 0x6033, //CJK UNIFIED IDEOGRAPH - 0x9056: 0x6034, //CJK UNIFIED IDEOGRAPH - 0x9057: 0x6036, //CJK UNIFIED IDEOGRAPH - 0x9058: 0x6037, //CJK UNIFIED IDEOGRAPH - 0x9059: 0x6038, //CJK UNIFIED IDEOGRAPH - 0x905A: 0x6039, //CJK UNIFIED IDEOGRAPH - 0x905B: 0x603A, //CJK UNIFIED IDEOGRAPH - 0x905C: 0x603D, //CJK UNIFIED IDEOGRAPH - 0x905D: 0x603E, //CJK UNIFIED IDEOGRAPH - 0x905E: 0x6040, //CJK UNIFIED IDEOGRAPH - 0x905F: 0x6044, //CJK UNIFIED IDEOGRAPH - 0x9060: 0x6045, //CJK UNIFIED IDEOGRAPH - 0x9061: 0x6046, //CJK UNIFIED IDEOGRAPH - 0x9062: 0x6047, //CJK UNIFIED IDEOGRAPH - 0x9063: 0x6048, //CJK UNIFIED IDEOGRAPH - 0x9064: 0x6049, //CJK UNIFIED IDEOGRAPH - 0x9065: 0x604A, //CJK UNIFIED IDEOGRAPH - 0x9066: 0x604C, //CJK UNIFIED IDEOGRAPH - 0x9067: 0x604E, //CJK UNIFIED IDEOGRAPH - 0x9068: 0x604F, //CJK UNIFIED IDEOGRAPH - 0x9069: 0x6051, //CJK UNIFIED IDEOGRAPH - 0x906A: 0x6053, //CJK UNIFIED IDEOGRAPH - 0x906B: 0x6054, //CJK UNIFIED IDEOGRAPH - 0x906C: 0x6056, //CJK UNIFIED IDEOGRAPH - 0x906D: 0x6057, //CJK UNIFIED IDEOGRAPH - 0x906E: 0x6058, //CJK UNIFIED IDEOGRAPH - 0x906F: 0x605B, //CJK UNIFIED IDEOGRAPH - 0x9070: 0x605C, //CJK UNIFIED IDEOGRAPH - 0x9071: 0x605E, //CJK UNIFIED IDEOGRAPH - 0x9072: 0x605F, //CJK UNIFIED IDEOGRAPH - 0x9073: 0x6060, //CJK UNIFIED IDEOGRAPH - 0x9074: 0x6061, //CJK UNIFIED IDEOGRAPH - 0x9075: 0x6065, //CJK UNIFIED IDEOGRAPH - 0x9076: 0x6066, //CJK UNIFIED IDEOGRAPH - 0x9077: 0x606E, //CJK UNIFIED IDEOGRAPH - 0x9078: 0x6071, //CJK UNIFIED IDEOGRAPH - 0x9079: 0x6072, //CJK UNIFIED IDEOGRAPH - 0x907A: 0x6074, //CJK UNIFIED IDEOGRAPH - 0x907B: 0x6075, //CJK UNIFIED IDEOGRAPH - 0x907C: 0x6077, //CJK UNIFIED IDEOGRAPH - 0x907D: 0x607E, //CJK UNIFIED IDEOGRAPH - 0x907E: 0x6080, //CJK UNIFIED IDEOGRAPH - 0x9080: 0x6081, //CJK UNIFIED IDEOGRAPH - 0x9081: 0x6082, //CJK UNIFIED IDEOGRAPH - 0x9082: 0x6085, //CJK UNIFIED IDEOGRAPH - 0x9083: 0x6086, //CJK UNIFIED IDEOGRAPH - 0x9084: 0x6087, //CJK UNIFIED IDEOGRAPH - 0x9085: 0x6088, //CJK UNIFIED IDEOGRAPH - 0x9086: 0x608A, //CJK UNIFIED IDEOGRAPH - 0x9087: 0x608B, //CJK UNIFIED IDEOGRAPH - 0x9088: 0x608E, //CJK UNIFIED IDEOGRAPH - 0x9089: 0x608F, //CJK UNIFIED IDEOGRAPH - 0x908A: 0x6090, //CJK UNIFIED IDEOGRAPH - 0x908B: 0x6091, //CJK UNIFIED IDEOGRAPH - 0x908C: 0x6093, //CJK UNIFIED IDEOGRAPH - 0x908D: 0x6095, //CJK UNIFIED IDEOGRAPH - 0x908E: 0x6097, //CJK UNIFIED IDEOGRAPH - 0x908F: 0x6098, //CJK UNIFIED IDEOGRAPH - 0x9090: 0x6099, //CJK UNIFIED IDEOGRAPH - 0x9091: 0x609C, //CJK UNIFIED IDEOGRAPH - 0x9092: 0x609E, //CJK UNIFIED IDEOGRAPH - 0x9093: 0x60A1, //CJK UNIFIED IDEOGRAPH - 0x9094: 0x60A2, //CJK UNIFIED IDEOGRAPH - 0x9095: 0x60A4, //CJK UNIFIED IDEOGRAPH - 0x9096: 0x60A5, //CJK UNIFIED IDEOGRAPH - 0x9097: 0x60A7, //CJK UNIFIED IDEOGRAPH - 0x9098: 0x60A9, //CJK UNIFIED IDEOGRAPH - 0x9099: 0x60AA, //CJK UNIFIED IDEOGRAPH - 0x909A: 0x60AE, //CJK UNIFIED IDEOGRAPH - 0x909B: 0x60B0, //CJK UNIFIED IDEOGRAPH - 0x909C: 0x60B3, //CJK UNIFIED IDEOGRAPH - 0x909D: 0x60B5, //CJK UNIFIED IDEOGRAPH - 0x909E: 0x60B6, //CJK UNIFIED IDEOGRAPH - 0x909F: 0x60B7, //CJK UNIFIED IDEOGRAPH - 0x90A0: 0x60B9, //CJK UNIFIED IDEOGRAPH - 0x90A1: 0x60BA, //CJK UNIFIED IDEOGRAPH - 0x90A2: 0x60BD, //CJK UNIFIED IDEOGRAPH - 0x90A3: 0x60BE, //CJK UNIFIED IDEOGRAPH - 0x90A4: 0x60BF, //CJK UNIFIED IDEOGRAPH - 0x90A5: 0x60C0, //CJK UNIFIED IDEOGRAPH - 0x90A6: 0x60C1, //CJK UNIFIED IDEOGRAPH - 0x90A7: 0x60C2, //CJK UNIFIED IDEOGRAPH - 0x90A8: 0x60C3, //CJK UNIFIED IDEOGRAPH - 0x90A9: 0x60C4, //CJK UNIFIED IDEOGRAPH - 0x90AA: 0x60C7, //CJK UNIFIED IDEOGRAPH - 0x90AB: 0x60C8, //CJK UNIFIED IDEOGRAPH - 0x90AC: 0x60C9, //CJK UNIFIED IDEOGRAPH - 0x90AD: 0x60CC, //CJK UNIFIED IDEOGRAPH - 0x90AE: 0x60CD, //CJK UNIFIED IDEOGRAPH - 0x90AF: 0x60CE, //CJK UNIFIED IDEOGRAPH - 0x90B0: 0x60CF, //CJK UNIFIED IDEOGRAPH - 0x90B1: 0x60D0, //CJK UNIFIED IDEOGRAPH - 0x90B2: 0x60D2, //CJK UNIFIED IDEOGRAPH - 0x90B3: 0x60D3, //CJK UNIFIED IDEOGRAPH - 0x90B4: 0x60D4, //CJK UNIFIED IDEOGRAPH - 0x90B5: 0x60D6, //CJK UNIFIED IDEOGRAPH - 0x90B6: 0x60D7, //CJK UNIFIED IDEOGRAPH - 0x90B7: 0x60D9, //CJK UNIFIED IDEOGRAPH - 0x90B8: 0x60DB, //CJK UNIFIED IDEOGRAPH - 0x90B9: 0x60DE, //CJK UNIFIED IDEOGRAPH - 0x90BA: 0x60E1, //CJK UNIFIED IDEOGRAPH - 0x90BB: 0x60E2, //CJK UNIFIED IDEOGRAPH - 0x90BC: 0x60E3, //CJK UNIFIED IDEOGRAPH - 0x90BD: 0x60E4, //CJK UNIFIED IDEOGRAPH - 0x90BE: 0x60E5, //CJK UNIFIED IDEOGRAPH - 0x90BF: 0x60EA, //CJK UNIFIED IDEOGRAPH - 0x90C0: 0x60F1, //CJK UNIFIED IDEOGRAPH - 0x90C1: 0x60F2, //CJK UNIFIED IDEOGRAPH - 0x90C2: 0x60F5, //CJK UNIFIED IDEOGRAPH - 0x90C3: 0x60F7, //CJK UNIFIED IDEOGRAPH - 0x90C4: 0x60F8, //CJK UNIFIED IDEOGRAPH - 0x90C5: 0x60FB, //CJK UNIFIED IDEOGRAPH - 0x90C6: 0x60FC, //CJK UNIFIED IDEOGRAPH - 0x90C7: 0x60FD, //CJK UNIFIED IDEOGRAPH - 0x90C8: 0x60FE, //CJK UNIFIED IDEOGRAPH - 0x90C9: 0x60FF, //CJK UNIFIED IDEOGRAPH - 0x90CA: 0x6102, //CJK UNIFIED IDEOGRAPH - 0x90CB: 0x6103, //CJK UNIFIED IDEOGRAPH - 0x90CC: 0x6104, //CJK UNIFIED IDEOGRAPH - 0x90CD: 0x6105, //CJK UNIFIED IDEOGRAPH - 0x90CE: 0x6107, //CJK UNIFIED IDEOGRAPH - 0x90CF: 0x610A, //CJK UNIFIED IDEOGRAPH - 0x90D0: 0x610B, //CJK UNIFIED IDEOGRAPH - 0x90D1: 0x610C, //CJK UNIFIED IDEOGRAPH - 0x90D2: 0x6110, //CJK UNIFIED IDEOGRAPH - 0x90D3: 0x6111, //CJK UNIFIED IDEOGRAPH - 0x90D4: 0x6112, //CJK UNIFIED IDEOGRAPH - 0x90D5: 0x6113, //CJK UNIFIED IDEOGRAPH - 0x90D6: 0x6114, //CJK UNIFIED IDEOGRAPH - 0x90D7: 0x6116, //CJK UNIFIED IDEOGRAPH - 0x90D8: 0x6117, //CJK UNIFIED IDEOGRAPH - 0x90D9: 0x6118, //CJK UNIFIED IDEOGRAPH - 0x90DA: 0x6119, //CJK UNIFIED IDEOGRAPH - 0x90DB: 0x611B, //CJK UNIFIED IDEOGRAPH - 0x90DC: 0x611C, //CJK UNIFIED IDEOGRAPH - 0x90DD: 0x611D, //CJK UNIFIED IDEOGRAPH - 0x90DE: 0x611E, //CJK UNIFIED IDEOGRAPH - 0x90DF: 0x6121, //CJK UNIFIED IDEOGRAPH - 0x90E0: 0x6122, //CJK UNIFIED IDEOGRAPH - 0x90E1: 0x6125, //CJK UNIFIED IDEOGRAPH - 0x90E2: 0x6128, //CJK UNIFIED IDEOGRAPH - 0x90E3: 0x6129, //CJK UNIFIED IDEOGRAPH - 0x90E4: 0x612A, //CJK UNIFIED IDEOGRAPH - 0x90E5: 0x612C, //CJK UNIFIED IDEOGRAPH - 0x90E6: 0x612D, //CJK UNIFIED IDEOGRAPH - 0x90E7: 0x612E, //CJK UNIFIED IDEOGRAPH - 0x90E8: 0x612F, //CJK UNIFIED IDEOGRAPH - 0x90E9: 0x6130, //CJK UNIFIED IDEOGRAPH - 0x90EA: 0x6131, //CJK UNIFIED IDEOGRAPH - 0x90EB: 0x6132, //CJK UNIFIED IDEOGRAPH - 0x90EC: 0x6133, //CJK UNIFIED IDEOGRAPH - 0x90ED: 0x6134, //CJK UNIFIED IDEOGRAPH - 0x90EE: 0x6135, //CJK UNIFIED IDEOGRAPH - 0x90EF: 0x6136, //CJK UNIFIED IDEOGRAPH - 0x90F0: 0x6137, //CJK UNIFIED IDEOGRAPH - 0x90F1: 0x6138, //CJK UNIFIED IDEOGRAPH - 0x90F2: 0x6139, //CJK UNIFIED IDEOGRAPH - 0x90F3: 0x613A, //CJK UNIFIED IDEOGRAPH - 0x90F4: 0x613B, //CJK UNIFIED IDEOGRAPH - 0x90F5: 0x613C, //CJK UNIFIED IDEOGRAPH - 0x90F6: 0x613D, //CJK UNIFIED IDEOGRAPH - 0x90F7: 0x613E, //CJK UNIFIED IDEOGRAPH - 0x90F8: 0x6140, //CJK UNIFIED IDEOGRAPH - 0x90F9: 0x6141, //CJK UNIFIED IDEOGRAPH - 0x90FA: 0x6142, //CJK UNIFIED IDEOGRAPH - 0x90FB: 0x6143, //CJK UNIFIED IDEOGRAPH - 0x90FC: 0x6144, //CJK UNIFIED IDEOGRAPH - 0x90FD: 0x6145, //CJK UNIFIED IDEOGRAPH - 0x90FE: 0x6146, //CJK UNIFIED IDEOGRAPH - 0x9140: 0x6147, //CJK UNIFIED IDEOGRAPH - 0x9141: 0x6149, //CJK UNIFIED IDEOGRAPH - 0x9142: 0x614B, //CJK UNIFIED IDEOGRAPH - 0x9143: 0x614D, //CJK UNIFIED IDEOGRAPH - 0x9144: 0x614F, //CJK UNIFIED IDEOGRAPH - 0x9145: 0x6150, //CJK UNIFIED IDEOGRAPH - 0x9146: 0x6152, //CJK UNIFIED IDEOGRAPH - 0x9147: 0x6153, //CJK UNIFIED IDEOGRAPH - 0x9148: 0x6154, //CJK UNIFIED IDEOGRAPH - 0x9149: 0x6156, //CJK UNIFIED IDEOGRAPH - 0x914A: 0x6157, //CJK UNIFIED IDEOGRAPH - 0x914B: 0x6158, //CJK UNIFIED IDEOGRAPH - 0x914C: 0x6159, //CJK UNIFIED IDEOGRAPH - 0x914D: 0x615A, //CJK UNIFIED IDEOGRAPH - 0x914E: 0x615B, //CJK UNIFIED IDEOGRAPH - 0x914F: 0x615C, //CJK UNIFIED IDEOGRAPH - 0x9150: 0x615E, //CJK UNIFIED IDEOGRAPH - 0x9151: 0x615F, //CJK UNIFIED IDEOGRAPH - 0x9152: 0x6160, //CJK UNIFIED IDEOGRAPH - 0x9153: 0x6161, //CJK UNIFIED IDEOGRAPH - 0x9154: 0x6163, //CJK UNIFIED IDEOGRAPH - 0x9155: 0x6164, //CJK UNIFIED IDEOGRAPH - 0x9156: 0x6165, //CJK UNIFIED IDEOGRAPH - 0x9157: 0x6166, //CJK UNIFIED IDEOGRAPH - 0x9158: 0x6169, //CJK UNIFIED IDEOGRAPH - 0x9159: 0x616A, //CJK UNIFIED IDEOGRAPH - 0x915A: 0x616B, //CJK UNIFIED IDEOGRAPH - 0x915B: 0x616C, //CJK UNIFIED IDEOGRAPH - 0x915C: 0x616D, //CJK UNIFIED IDEOGRAPH - 0x915D: 0x616E, //CJK UNIFIED IDEOGRAPH - 0x915E: 0x616F, //CJK UNIFIED IDEOGRAPH - 0x915F: 0x6171, //CJK UNIFIED IDEOGRAPH - 0x9160: 0x6172, //CJK UNIFIED IDEOGRAPH - 0x9161: 0x6173, //CJK UNIFIED IDEOGRAPH - 0x9162: 0x6174, //CJK UNIFIED IDEOGRAPH - 0x9163: 0x6176, //CJK UNIFIED IDEOGRAPH - 0x9164: 0x6178, //CJK UNIFIED IDEOGRAPH - 0x9165: 0x6179, //CJK UNIFIED IDEOGRAPH - 0x9166: 0x617A, //CJK UNIFIED IDEOGRAPH - 0x9167: 0x617B, //CJK UNIFIED IDEOGRAPH - 0x9168: 0x617C, //CJK UNIFIED IDEOGRAPH - 0x9169: 0x617D, //CJK UNIFIED IDEOGRAPH - 0x916A: 0x617E, //CJK UNIFIED IDEOGRAPH - 0x916B: 0x617F, //CJK UNIFIED IDEOGRAPH - 0x916C: 0x6180, //CJK UNIFIED IDEOGRAPH - 0x916D: 0x6181, //CJK UNIFIED IDEOGRAPH - 0x916E: 0x6182, //CJK UNIFIED IDEOGRAPH - 0x916F: 0x6183, //CJK UNIFIED IDEOGRAPH - 0x9170: 0x6184, //CJK UNIFIED IDEOGRAPH - 0x9171: 0x6185, //CJK UNIFIED IDEOGRAPH - 0x9172: 0x6186, //CJK UNIFIED IDEOGRAPH - 0x9173: 0x6187, //CJK UNIFIED IDEOGRAPH - 0x9174: 0x6188, //CJK UNIFIED IDEOGRAPH - 0x9175: 0x6189, //CJK UNIFIED IDEOGRAPH - 0x9176: 0x618A, //CJK UNIFIED IDEOGRAPH - 0x9177: 0x618C, //CJK UNIFIED IDEOGRAPH - 0x9178: 0x618D, //CJK UNIFIED IDEOGRAPH - 0x9179: 0x618F, //CJK UNIFIED IDEOGRAPH - 0x917A: 0x6190, //CJK UNIFIED IDEOGRAPH - 0x917B: 0x6191, //CJK UNIFIED IDEOGRAPH - 0x917C: 0x6192, //CJK UNIFIED IDEOGRAPH - 0x917D: 0x6193, //CJK UNIFIED IDEOGRAPH - 0x917E: 0x6195, //CJK UNIFIED IDEOGRAPH - 0x9180: 0x6196, //CJK UNIFIED IDEOGRAPH - 0x9181: 0x6197, //CJK UNIFIED IDEOGRAPH - 0x9182: 0x6198, //CJK UNIFIED IDEOGRAPH - 0x9183: 0x6199, //CJK UNIFIED IDEOGRAPH - 0x9184: 0x619A, //CJK UNIFIED IDEOGRAPH - 0x9185: 0x619B, //CJK UNIFIED IDEOGRAPH - 0x9186: 0x619C, //CJK UNIFIED IDEOGRAPH - 0x9187: 0x619E, //CJK UNIFIED IDEOGRAPH - 0x9188: 0x619F, //CJK UNIFIED IDEOGRAPH - 0x9189: 0x61A0, //CJK UNIFIED IDEOGRAPH - 0x918A: 0x61A1, //CJK UNIFIED IDEOGRAPH - 0x918B: 0x61A2, //CJK UNIFIED IDEOGRAPH - 0x918C: 0x61A3, //CJK UNIFIED IDEOGRAPH - 0x918D: 0x61A4, //CJK UNIFIED IDEOGRAPH - 0x918E: 0x61A5, //CJK UNIFIED IDEOGRAPH - 0x918F: 0x61A6, //CJK UNIFIED IDEOGRAPH - 0x9190: 0x61AA, //CJK UNIFIED IDEOGRAPH - 0x9191: 0x61AB, //CJK UNIFIED IDEOGRAPH - 0x9192: 0x61AD, //CJK UNIFIED IDEOGRAPH - 0x9193: 0x61AE, //CJK UNIFIED IDEOGRAPH - 0x9194: 0x61AF, //CJK UNIFIED IDEOGRAPH - 0x9195: 0x61B0, //CJK UNIFIED IDEOGRAPH - 0x9196: 0x61B1, //CJK UNIFIED IDEOGRAPH - 0x9197: 0x61B2, //CJK UNIFIED IDEOGRAPH - 0x9198: 0x61B3, //CJK UNIFIED IDEOGRAPH - 0x9199: 0x61B4, //CJK UNIFIED IDEOGRAPH - 0x919A: 0x61B5, //CJK UNIFIED IDEOGRAPH - 0x919B: 0x61B6, //CJK UNIFIED IDEOGRAPH - 0x919C: 0x61B8, //CJK UNIFIED IDEOGRAPH - 0x919D: 0x61B9, //CJK UNIFIED IDEOGRAPH - 0x919E: 0x61BA, //CJK UNIFIED IDEOGRAPH - 0x919F: 0x61BB, //CJK UNIFIED IDEOGRAPH - 0x91A0: 0x61BC, //CJK UNIFIED IDEOGRAPH - 0x91A1: 0x61BD, //CJK UNIFIED IDEOGRAPH - 0x91A2: 0x61BF, //CJK UNIFIED IDEOGRAPH - 0x91A3: 0x61C0, //CJK UNIFIED IDEOGRAPH - 0x91A4: 0x61C1, //CJK UNIFIED IDEOGRAPH - 0x91A5: 0x61C3, //CJK UNIFIED IDEOGRAPH - 0x91A6: 0x61C4, //CJK UNIFIED IDEOGRAPH - 0x91A7: 0x61C5, //CJK UNIFIED IDEOGRAPH - 0x91A8: 0x61C6, //CJK UNIFIED IDEOGRAPH - 0x91A9: 0x61C7, //CJK UNIFIED IDEOGRAPH - 0x91AA: 0x61C9, //CJK UNIFIED IDEOGRAPH - 0x91AB: 0x61CC, //CJK UNIFIED IDEOGRAPH - 0x91AC: 0x61CD, //CJK UNIFIED IDEOGRAPH - 0x91AD: 0x61CE, //CJK UNIFIED IDEOGRAPH - 0x91AE: 0x61CF, //CJK UNIFIED IDEOGRAPH - 0x91AF: 0x61D0, //CJK UNIFIED IDEOGRAPH - 0x91B0: 0x61D3, //CJK UNIFIED IDEOGRAPH - 0x91B1: 0x61D5, //CJK UNIFIED IDEOGRAPH - 0x91B2: 0x61D6, //CJK UNIFIED IDEOGRAPH - 0x91B3: 0x61D7, //CJK UNIFIED IDEOGRAPH - 0x91B4: 0x61D8, //CJK UNIFIED IDEOGRAPH - 0x91B5: 0x61D9, //CJK UNIFIED IDEOGRAPH - 0x91B6: 0x61DA, //CJK UNIFIED IDEOGRAPH - 0x91B7: 0x61DB, //CJK UNIFIED IDEOGRAPH - 0x91B8: 0x61DC, //CJK UNIFIED IDEOGRAPH - 0x91B9: 0x61DD, //CJK UNIFIED IDEOGRAPH - 0x91BA: 0x61DE, //CJK UNIFIED IDEOGRAPH - 0x91BB: 0x61DF, //CJK UNIFIED IDEOGRAPH - 0x91BC: 0x61E0, //CJK UNIFIED IDEOGRAPH - 0x91BD: 0x61E1, //CJK UNIFIED IDEOGRAPH - 0x91BE: 0x61E2, //CJK UNIFIED IDEOGRAPH - 0x91BF: 0x61E3, //CJK UNIFIED IDEOGRAPH - 0x91C0: 0x61E4, //CJK UNIFIED IDEOGRAPH - 0x91C1: 0x61E5, //CJK UNIFIED IDEOGRAPH - 0x91C2: 0x61E7, //CJK UNIFIED IDEOGRAPH - 0x91C3: 0x61E8, //CJK UNIFIED IDEOGRAPH - 0x91C4: 0x61E9, //CJK UNIFIED IDEOGRAPH - 0x91C5: 0x61EA, //CJK UNIFIED IDEOGRAPH - 0x91C6: 0x61EB, //CJK UNIFIED IDEOGRAPH - 0x91C7: 0x61EC, //CJK UNIFIED IDEOGRAPH - 0x91C8: 0x61ED, //CJK UNIFIED IDEOGRAPH - 0x91C9: 0x61EE, //CJK UNIFIED IDEOGRAPH - 0x91CA: 0x61EF, //CJK UNIFIED IDEOGRAPH - 0x91CB: 0x61F0, //CJK UNIFIED IDEOGRAPH - 0x91CC: 0x61F1, //CJK UNIFIED IDEOGRAPH - 0x91CD: 0x61F2, //CJK UNIFIED IDEOGRAPH - 0x91CE: 0x61F3, //CJK UNIFIED IDEOGRAPH - 0x91CF: 0x61F4, //CJK UNIFIED IDEOGRAPH - 0x91D0: 0x61F6, //CJK UNIFIED IDEOGRAPH - 0x91D1: 0x61F7, //CJK UNIFIED IDEOGRAPH - 0x91D2: 0x61F8, //CJK UNIFIED IDEOGRAPH - 0x91D3: 0x61F9, //CJK UNIFIED IDEOGRAPH - 0x91D4: 0x61FA, //CJK UNIFIED IDEOGRAPH - 0x91D5: 0x61FB, //CJK UNIFIED IDEOGRAPH - 0x91D6: 0x61FC, //CJK UNIFIED IDEOGRAPH - 0x91D7: 0x61FD, //CJK UNIFIED IDEOGRAPH - 0x91D8: 0x61FE, //CJK UNIFIED IDEOGRAPH - 0x91D9: 0x6200, //CJK UNIFIED IDEOGRAPH - 0x91DA: 0x6201, //CJK UNIFIED IDEOGRAPH - 0x91DB: 0x6202, //CJK UNIFIED IDEOGRAPH - 0x91DC: 0x6203, //CJK UNIFIED IDEOGRAPH - 0x91DD: 0x6204, //CJK UNIFIED IDEOGRAPH - 0x91DE: 0x6205, //CJK UNIFIED IDEOGRAPH - 0x91DF: 0x6207, //CJK UNIFIED IDEOGRAPH - 0x91E0: 0x6209, //CJK UNIFIED IDEOGRAPH - 0x91E1: 0x6213, //CJK UNIFIED IDEOGRAPH - 0x91E2: 0x6214, //CJK UNIFIED IDEOGRAPH - 0x91E3: 0x6219, //CJK UNIFIED IDEOGRAPH - 0x91E4: 0x621C, //CJK UNIFIED IDEOGRAPH - 0x91E5: 0x621D, //CJK UNIFIED IDEOGRAPH - 0x91E6: 0x621E, //CJK UNIFIED IDEOGRAPH - 0x91E7: 0x6220, //CJK UNIFIED IDEOGRAPH - 0x91E8: 0x6223, //CJK UNIFIED IDEOGRAPH - 0x91E9: 0x6226, //CJK UNIFIED IDEOGRAPH - 0x91EA: 0x6227, //CJK UNIFIED IDEOGRAPH - 0x91EB: 0x6228, //CJK UNIFIED IDEOGRAPH - 0x91EC: 0x6229, //CJK UNIFIED IDEOGRAPH - 0x91ED: 0x622B, //CJK UNIFIED IDEOGRAPH - 0x91EE: 0x622D, //CJK UNIFIED IDEOGRAPH - 0x91EF: 0x622F, //CJK UNIFIED IDEOGRAPH - 0x91F0: 0x6230, //CJK UNIFIED IDEOGRAPH - 0x91F1: 0x6231, //CJK UNIFIED IDEOGRAPH - 0x91F2: 0x6232, //CJK UNIFIED IDEOGRAPH - 0x91F3: 0x6235, //CJK UNIFIED IDEOGRAPH - 0x91F4: 0x6236, //CJK UNIFIED IDEOGRAPH - 0x91F5: 0x6238, //CJK UNIFIED IDEOGRAPH - 0x91F6: 0x6239, //CJK UNIFIED IDEOGRAPH - 0x91F7: 0x623A, //CJK UNIFIED IDEOGRAPH - 0x91F8: 0x623B, //CJK UNIFIED IDEOGRAPH - 0x91F9: 0x623C, //CJK UNIFIED IDEOGRAPH - 0x91FA: 0x6242, //CJK UNIFIED IDEOGRAPH - 0x91FB: 0x6244, //CJK UNIFIED IDEOGRAPH - 0x91FC: 0x6245, //CJK UNIFIED IDEOGRAPH - 0x91FD: 0x6246, //CJK UNIFIED IDEOGRAPH - 0x91FE: 0x624A, //CJK UNIFIED IDEOGRAPH - 0x9240: 0x624F, //CJK UNIFIED IDEOGRAPH - 0x9241: 0x6250, //CJK UNIFIED IDEOGRAPH - 0x9242: 0x6255, //CJK UNIFIED IDEOGRAPH - 0x9243: 0x6256, //CJK UNIFIED IDEOGRAPH - 0x9244: 0x6257, //CJK UNIFIED IDEOGRAPH - 0x9245: 0x6259, //CJK UNIFIED IDEOGRAPH - 0x9246: 0x625A, //CJK UNIFIED IDEOGRAPH - 0x9247: 0x625C, //CJK UNIFIED IDEOGRAPH - 0x9248: 0x625D, //CJK UNIFIED IDEOGRAPH - 0x9249: 0x625E, //CJK UNIFIED IDEOGRAPH - 0x924A: 0x625F, //CJK UNIFIED IDEOGRAPH - 0x924B: 0x6260, //CJK UNIFIED IDEOGRAPH - 0x924C: 0x6261, //CJK UNIFIED IDEOGRAPH - 0x924D: 0x6262, //CJK UNIFIED IDEOGRAPH - 0x924E: 0x6264, //CJK UNIFIED IDEOGRAPH - 0x924F: 0x6265, //CJK UNIFIED IDEOGRAPH - 0x9250: 0x6268, //CJK UNIFIED IDEOGRAPH - 0x9251: 0x6271, //CJK UNIFIED IDEOGRAPH - 0x9252: 0x6272, //CJK UNIFIED IDEOGRAPH - 0x9253: 0x6274, //CJK UNIFIED IDEOGRAPH - 0x9254: 0x6275, //CJK UNIFIED IDEOGRAPH - 0x9255: 0x6277, //CJK UNIFIED IDEOGRAPH - 0x9256: 0x6278, //CJK UNIFIED IDEOGRAPH - 0x9257: 0x627A, //CJK UNIFIED IDEOGRAPH - 0x9258: 0x627B, //CJK UNIFIED IDEOGRAPH - 0x9259: 0x627D, //CJK UNIFIED IDEOGRAPH - 0x925A: 0x6281, //CJK UNIFIED IDEOGRAPH - 0x925B: 0x6282, //CJK UNIFIED IDEOGRAPH - 0x925C: 0x6283, //CJK UNIFIED IDEOGRAPH - 0x925D: 0x6285, //CJK UNIFIED IDEOGRAPH - 0x925E: 0x6286, //CJK UNIFIED IDEOGRAPH - 0x925F: 0x6287, //CJK UNIFIED IDEOGRAPH - 0x9260: 0x6288, //CJK UNIFIED IDEOGRAPH - 0x9261: 0x628B, //CJK UNIFIED IDEOGRAPH - 0x9262: 0x628C, //CJK UNIFIED IDEOGRAPH - 0x9263: 0x628D, //CJK UNIFIED IDEOGRAPH - 0x9264: 0x628E, //CJK UNIFIED IDEOGRAPH - 0x9265: 0x628F, //CJK UNIFIED IDEOGRAPH - 0x9266: 0x6290, //CJK UNIFIED IDEOGRAPH - 0x9267: 0x6294, //CJK UNIFIED IDEOGRAPH - 0x9268: 0x6299, //CJK UNIFIED IDEOGRAPH - 0x9269: 0x629C, //CJK UNIFIED IDEOGRAPH - 0x926A: 0x629D, //CJK UNIFIED IDEOGRAPH - 0x926B: 0x629E, //CJK UNIFIED IDEOGRAPH - 0x926C: 0x62A3, //CJK UNIFIED IDEOGRAPH - 0x926D: 0x62A6, //CJK UNIFIED IDEOGRAPH - 0x926E: 0x62A7, //CJK UNIFIED IDEOGRAPH - 0x926F: 0x62A9, //CJK UNIFIED IDEOGRAPH - 0x9270: 0x62AA, //CJK UNIFIED IDEOGRAPH - 0x9271: 0x62AD, //CJK UNIFIED IDEOGRAPH - 0x9272: 0x62AE, //CJK UNIFIED IDEOGRAPH - 0x9273: 0x62AF, //CJK UNIFIED IDEOGRAPH - 0x9274: 0x62B0, //CJK UNIFIED IDEOGRAPH - 0x9275: 0x62B2, //CJK UNIFIED IDEOGRAPH - 0x9276: 0x62B3, //CJK UNIFIED IDEOGRAPH - 0x9277: 0x62B4, //CJK UNIFIED IDEOGRAPH - 0x9278: 0x62B6, //CJK UNIFIED IDEOGRAPH - 0x9279: 0x62B7, //CJK UNIFIED IDEOGRAPH - 0x927A: 0x62B8, //CJK UNIFIED IDEOGRAPH - 0x927B: 0x62BA, //CJK UNIFIED IDEOGRAPH - 0x927C: 0x62BE, //CJK UNIFIED IDEOGRAPH - 0x927D: 0x62C0, //CJK UNIFIED IDEOGRAPH - 0x927E: 0x62C1, //CJK UNIFIED IDEOGRAPH - 0x9280: 0x62C3, //CJK UNIFIED IDEOGRAPH - 0x9281: 0x62CB, //CJK UNIFIED IDEOGRAPH - 0x9282: 0x62CF, //CJK UNIFIED IDEOGRAPH - 0x9283: 0x62D1, //CJK UNIFIED IDEOGRAPH - 0x9284: 0x62D5, //CJK UNIFIED IDEOGRAPH - 0x9285: 0x62DD, //CJK UNIFIED IDEOGRAPH - 0x9286: 0x62DE, //CJK UNIFIED IDEOGRAPH - 0x9287: 0x62E0, //CJK UNIFIED IDEOGRAPH - 0x9288: 0x62E1, //CJK UNIFIED IDEOGRAPH - 0x9289: 0x62E4, //CJK UNIFIED IDEOGRAPH - 0x928A: 0x62EA, //CJK UNIFIED IDEOGRAPH - 0x928B: 0x62EB, //CJK UNIFIED IDEOGRAPH - 0x928C: 0x62F0, //CJK UNIFIED IDEOGRAPH - 0x928D: 0x62F2, //CJK UNIFIED IDEOGRAPH - 0x928E: 0x62F5, //CJK UNIFIED IDEOGRAPH - 0x928F: 0x62F8, //CJK UNIFIED IDEOGRAPH - 0x9290: 0x62F9, //CJK UNIFIED IDEOGRAPH - 0x9291: 0x62FA, //CJK UNIFIED IDEOGRAPH - 0x9292: 0x62FB, //CJK UNIFIED IDEOGRAPH - 0x9293: 0x6300, //CJK UNIFIED IDEOGRAPH - 0x9294: 0x6303, //CJK UNIFIED IDEOGRAPH - 0x9295: 0x6304, //CJK UNIFIED IDEOGRAPH - 0x9296: 0x6305, //CJK UNIFIED IDEOGRAPH - 0x9297: 0x6306, //CJK UNIFIED IDEOGRAPH - 0x9298: 0x630A, //CJK UNIFIED IDEOGRAPH - 0x9299: 0x630B, //CJK UNIFIED IDEOGRAPH - 0x929A: 0x630C, //CJK UNIFIED IDEOGRAPH - 0x929B: 0x630D, //CJK UNIFIED IDEOGRAPH - 0x929C: 0x630F, //CJK UNIFIED IDEOGRAPH - 0x929D: 0x6310, //CJK UNIFIED IDEOGRAPH - 0x929E: 0x6312, //CJK UNIFIED IDEOGRAPH - 0x929F: 0x6313, //CJK UNIFIED IDEOGRAPH - 0x92A0: 0x6314, //CJK UNIFIED IDEOGRAPH - 0x92A1: 0x6315, //CJK UNIFIED IDEOGRAPH - 0x92A2: 0x6317, //CJK UNIFIED IDEOGRAPH - 0x92A3: 0x6318, //CJK UNIFIED IDEOGRAPH - 0x92A4: 0x6319, //CJK UNIFIED IDEOGRAPH - 0x92A5: 0x631C, //CJK UNIFIED IDEOGRAPH - 0x92A6: 0x6326, //CJK UNIFIED IDEOGRAPH - 0x92A7: 0x6327, //CJK UNIFIED IDEOGRAPH - 0x92A8: 0x6329, //CJK UNIFIED IDEOGRAPH - 0x92A9: 0x632C, //CJK UNIFIED IDEOGRAPH - 0x92AA: 0x632D, //CJK UNIFIED IDEOGRAPH - 0x92AB: 0x632E, //CJK UNIFIED IDEOGRAPH - 0x92AC: 0x6330, //CJK UNIFIED IDEOGRAPH - 0x92AD: 0x6331, //CJK UNIFIED IDEOGRAPH - 0x92AE: 0x6333, //CJK UNIFIED IDEOGRAPH - 0x92AF: 0x6334, //CJK UNIFIED IDEOGRAPH - 0x92B0: 0x6335, //CJK UNIFIED IDEOGRAPH - 0x92B1: 0x6336, //CJK UNIFIED IDEOGRAPH - 0x92B2: 0x6337, //CJK UNIFIED IDEOGRAPH - 0x92B3: 0x6338, //CJK UNIFIED IDEOGRAPH - 0x92B4: 0x633B, //CJK UNIFIED IDEOGRAPH - 0x92B5: 0x633C, //CJK UNIFIED IDEOGRAPH - 0x92B6: 0x633E, //CJK UNIFIED IDEOGRAPH - 0x92B7: 0x633F, //CJK UNIFIED IDEOGRAPH - 0x92B8: 0x6340, //CJK UNIFIED IDEOGRAPH - 0x92B9: 0x6341, //CJK UNIFIED IDEOGRAPH - 0x92BA: 0x6344, //CJK UNIFIED IDEOGRAPH - 0x92BB: 0x6347, //CJK UNIFIED IDEOGRAPH - 0x92BC: 0x6348, //CJK UNIFIED IDEOGRAPH - 0x92BD: 0x634A, //CJK UNIFIED IDEOGRAPH - 0x92BE: 0x6351, //CJK UNIFIED IDEOGRAPH - 0x92BF: 0x6352, //CJK UNIFIED IDEOGRAPH - 0x92C0: 0x6353, //CJK UNIFIED IDEOGRAPH - 0x92C1: 0x6354, //CJK UNIFIED IDEOGRAPH - 0x92C2: 0x6356, //CJK UNIFIED IDEOGRAPH - 0x92C3: 0x6357, //CJK UNIFIED IDEOGRAPH - 0x92C4: 0x6358, //CJK UNIFIED IDEOGRAPH - 0x92C5: 0x6359, //CJK UNIFIED IDEOGRAPH - 0x92C6: 0x635A, //CJK UNIFIED IDEOGRAPH - 0x92C7: 0x635B, //CJK UNIFIED IDEOGRAPH - 0x92C8: 0x635C, //CJK UNIFIED IDEOGRAPH - 0x92C9: 0x635D, //CJK UNIFIED IDEOGRAPH - 0x92CA: 0x6360, //CJK UNIFIED IDEOGRAPH - 0x92CB: 0x6364, //CJK UNIFIED IDEOGRAPH - 0x92CC: 0x6365, //CJK UNIFIED IDEOGRAPH - 0x92CD: 0x6366, //CJK UNIFIED IDEOGRAPH - 0x92CE: 0x6368, //CJK UNIFIED IDEOGRAPH - 0x92CF: 0x636A, //CJK UNIFIED IDEOGRAPH - 0x92D0: 0x636B, //CJK UNIFIED IDEOGRAPH - 0x92D1: 0x636C, //CJK UNIFIED IDEOGRAPH - 0x92D2: 0x636F, //CJK UNIFIED IDEOGRAPH - 0x92D3: 0x6370, //CJK UNIFIED IDEOGRAPH - 0x92D4: 0x6372, //CJK UNIFIED IDEOGRAPH - 0x92D5: 0x6373, //CJK UNIFIED IDEOGRAPH - 0x92D6: 0x6374, //CJK UNIFIED IDEOGRAPH - 0x92D7: 0x6375, //CJK UNIFIED IDEOGRAPH - 0x92D8: 0x6378, //CJK UNIFIED IDEOGRAPH - 0x92D9: 0x6379, //CJK UNIFIED IDEOGRAPH - 0x92DA: 0x637C, //CJK UNIFIED IDEOGRAPH - 0x92DB: 0x637D, //CJK UNIFIED IDEOGRAPH - 0x92DC: 0x637E, //CJK UNIFIED IDEOGRAPH - 0x92DD: 0x637F, //CJK UNIFIED IDEOGRAPH - 0x92DE: 0x6381, //CJK UNIFIED IDEOGRAPH - 0x92DF: 0x6383, //CJK UNIFIED IDEOGRAPH - 0x92E0: 0x6384, //CJK UNIFIED IDEOGRAPH - 0x92E1: 0x6385, //CJK UNIFIED IDEOGRAPH - 0x92E2: 0x6386, //CJK UNIFIED IDEOGRAPH - 0x92E3: 0x638B, //CJK UNIFIED IDEOGRAPH - 0x92E4: 0x638D, //CJK UNIFIED IDEOGRAPH - 0x92E5: 0x6391, //CJK UNIFIED IDEOGRAPH - 0x92E6: 0x6393, //CJK UNIFIED IDEOGRAPH - 0x92E7: 0x6394, //CJK UNIFIED IDEOGRAPH - 0x92E8: 0x6395, //CJK UNIFIED IDEOGRAPH - 0x92E9: 0x6397, //CJK UNIFIED IDEOGRAPH - 0x92EA: 0x6399, //CJK UNIFIED IDEOGRAPH - 0x92EB: 0x639A, //CJK UNIFIED IDEOGRAPH - 0x92EC: 0x639B, //CJK UNIFIED IDEOGRAPH - 0x92ED: 0x639C, //CJK UNIFIED IDEOGRAPH - 0x92EE: 0x639D, //CJK UNIFIED IDEOGRAPH - 0x92EF: 0x639E, //CJK UNIFIED IDEOGRAPH - 0x92F0: 0x639F, //CJK UNIFIED IDEOGRAPH - 0x92F1: 0x63A1, //CJK UNIFIED IDEOGRAPH - 0x92F2: 0x63A4, //CJK UNIFIED IDEOGRAPH - 0x92F3: 0x63A6, //CJK UNIFIED IDEOGRAPH - 0x92F4: 0x63AB, //CJK UNIFIED IDEOGRAPH - 0x92F5: 0x63AF, //CJK UNIFIED IDEOGRAPH - 0x92F6: 0x63B1, //CJK UNIFIED IDEOGRAPH - 0x92F7: 0x63B2, //CJK UNIFIED IDEOGRAPH - 0x92F8: 0x63B5, //CJK UNIFIED IDEOGRAPH - 0x92F9: 0x63B6, //CJK UNIFIED IDEOGRAPH - 0x92FA: 0x63B9, //CJK UNIFIED IDEOGRAPH - 0x92FB: 0x63BB, //CJK UNIFIED IDEOGRAPH - 0x92FC: 0x63BD, //CJK UNIFIED IDEOGRAPH - 0x92FD: 0x63BF, //CJK UNIFIED IDEOGRAPH - 0x92FE: 0x63C0, //CJK UNIFIED IDEOGRAPH - 0x9340: 0x63C1, //CJK UNIFIED IDEOGRAPH - 0x9341: 0x63C2, //CJK UNIFIED IDEOGRAPH - 0x9342: 0x63C3, //CJK UNIFIED IDEOGRAPH - 0x9343: 0x63C5, //CJK UNIFIED IDEOGRAPH - 0x9344: 0x63C7, //CJK UNIFIED IDEOGRAPH - 0x9345: 0x63C8, //CJK UNIFIED IDEOGRAPH - 0x9346: 0x63CA, //CJK UNIFIED IDEOGRAPH - 0x9347: 0x63CB, //CJK UNIFIED IDEOGRAPH - 0x9348: 0x63CC, //CJK UNIFIED IDEOGRAPH - 0x9349: 0x63D1, //CJK UNIFIED IDEOGRAPH - 0x934A: 0x63D3, //CJK UNIFIED IDEOGRAPH - 0x934B: 0x63D4, //CJK UNIFIED IDEOGRAPH - 0x934C: 0x63D5, //CJK UNIFIED IDEOGRAPH - 0x934D: 0x63D7, //CJK UNIFIED IDEOGRAPH - 0x934E: 0x63D8, //CJK UNIFIED IDEOGRAPH - 0x934F: 0x63D9, //CJK UNIFIED IDEOGRAPH - 0x9350: 0x63DA, //CJK UNIFIED IDEOGRAPH - 0x9351: 0x63DB, //CJK UNIFIED IDEOGRAPH - 0x9352: 0x63DC, //CJK UNIFIED IDEOGRAPH - 0x9353: 0x63DD, //CJK UNIFIED IDEOGRAPH - 0x9354: 0x63DF, //CJK UNIFIED IDEOGRAPH - 0x9355: 0x63E2, //CJK UNIFIED IDEOGRAPH - 0x9356: 0x63E4, //CJK UNIFIED IDEOGRAPH - 0x9357: 0x63E5, //CJK UNIFIED IDEOGRAPH - 0x9358: 0x63E6, //CJK UNIFIED IDEOGRAPH - 0x9359: 0x63E7, //CJK UNIFIED IDEOGRAPH - 0x935A: 0x63E8, //CJK UNIFIED IDEOGRAPH - 0x935B: 0x63EB, //CJK UNIFIED IDEOGRAPH - 0x935C: 0x63EC, //CJK UNIFIED IDEOGRAPH - 0x935D: 0x63EE, //CJK UNIFIED IDEOGRAPH - 0x935E: 0x63EF, //CJK UNIFIED IDEOGRAPH - 0x935F: 0x63F0, //CJK UNIFIED IDEOGRAPH - 0x9360: 0x63F1, //CJK UNIFIED IDEOGRAPH - 0x9361: 0x63F3, //CJK UNIFIED IDEOGRAPH - 0x9362: 0x63F5, //CJK UNIFIED IDEOGRAPH - 0x9363: 0x63F7, //CJK UNIFIED IDEOGRAPH - 0x9364: 0x63F9, //CJK UNIFIED IDEOGRAPH - 0x9365: 0x63FA, //CJK UNIFIED IDEOGRAPH - 0x9366: 0x63FB, //CJK UNIFIED IDEOGRAPH - 0x9367: 0x63FC, //CJK UNIFIED IDEOGRAPH - 0x9368: 0x63FE, //CJK UNIFIED IDEOGRAPH - 0x9369: 0x6403, //CJK UNIFIED IDEOGRAPH - 0x936A: 0x6404, //CJK UNIFIED IDEOGRAPH - 0x936B: 0x6406, //CJK UNIFIED IDEOGRAPH - 0x936C: 0x6407, //CJK UNIFIED IDEOGRAPH - 0x936D: 0x6408, //CJK UNIFIED IDEOGRAPH - 0x936E: 0x6409, //CJK UNIFIED IDEOGRAPH - 0x936F: 0x640A, //CJK UNIFIED IDEOGRAPH - 0x9370: 0x640D, //CJK UNIFIED IDEOGRAPH - 0x9371: 0x640E, //CJK UNIFIED IDEOGRAPH - 0x9372: 0x6411, //CJK UNIFIED IDEOGRAPH - 0x9373: 0x6412, //CJK UNIFIED IDEOGRAPH - 0x9374: 0x6415, //CJK UNIFIED IDEOGRAPH - 0x9375: 0x6416, //CJK UNIFIED IDEOGRAPH - 0x9376: 0x6417, //CJK UNIFIED IDEOGRAPH - 0x9377: 0x6418, //CJK UNIFIED IDEOGRAPH - 0x9378: 0x6419, //CJK UNIFIED IDEOGRAPH - 0x9379: 0x641A, //CJK UNIFIED IDEOGRAPH - 0x937A: 0x641D, //CJK UNIFIED IDEOGRAPH - 0x937B: 0x641F, //CJK UNIFIED IDEOGRAPH - 0x937C: 0x6422, //CJK UNIFIED IDEOGRAPH - 0x937D: 0x6423, //CJK UNIFIED IDEOGRAPH - 0x937E: 0x6424, //CJK UNIFIED IDEOGRAPH - 0x9380: 0x6425, //CJK UNIFIED IDEOGRAPH - 0x9381: 0x6427, //CJK UNIFIED IDEOGRAPH - 0x9382: 0x6428, //CJK UNIFIED IDEOGRAPH - 0x9383: 0x6429, //CJK UNIFIED IDEOGRAPH - 0x9384: 0x642B, //CJK UNIFIED IDEOGRAPH - 0x9385: 0x642E, //CJK UNIFIED IDEOGRAPH - 0x9386: 0x642F, //CJK UNIFIED IDEOGRAPH - 0x9387: 0x6430, //CJK UNIFIED IDEOGRAPH - 0x9388: 0x6431, //CJK UNIFIED IDEOGRAPH - 0x9389: 0x6432, //CJK UNIFIED IDEOGRAPH - 0x938A: 0x6433, //CJK UNIFIED IDEOGRAPH - 0x938B: 0x6435, //CJK UNIFIED IDEOGRAPH - 0x938C: 0x6436, //CJK UNIFIED IDEOGRAPH - 0x938D: 0x6437, //CJK UNIFIED IDEOGRAPH - 0x938E: 0x6438, //CJK UNIFIED IDEOGRAPH - 0x938F: 0x6439, //CJK UNIFIED IDEOGRAPH - 0x9390: 0x643B, //CJK UNIFIED IDEOGRAPH - 0x9391: 0x643C, //CJK UNIFIED IDEOGRAPH - 0x9392: 0x643E, //CJK UNIFIED IDEOGRAPH - 0x9393: 0x6440, //CJK UNIFIED IDEOGRAPH - 0x9394: 0x6442, //CJK UNIFIED IDEOGRAPH - 0x9395: 0x6443, //CJK UNIFIED IDEOGRAPH - 0x9396: 0x6449, //CJK UNIFIED IDEOGRAPH - 0x9397: 0x644B, //CJK UNIFIED IDEOGRAPH - 0x9398: 0x644C, //CJK UNIFIED IDEOGRAPH - 0x9399: 0x644D, //CJK UNIFIED IDEOGRAPH - 0x939A: 0x644E, //CJK UNIFIED IDEOGRAPH - 0x939B: 0x644F, //CJK UNIFIED IDEOGRAPH - 0x939C: 0x6450, //CJK UNIFIED IDEOGRAPH - 0x939D: 0x6451, //CJK UNIFIED IDEOGRAPH - 0x939E: 0x6453, //CJK UNIFIED IDEOGRAPH - 0x939F: 0x6455, //CJK UNIFIED IDEOGRAPH - 0x93A0: 0x6456, //CJK UNIFIED IDEOGRAPH - 0x93A1: 0x6457, //CJK UNIFIED IDEOGRAPH - 0x93A2: 0x6459, //CJK UNIFIED IDEOGRAPH - 0x93A3: 0x645A, //CJK UNIFIED IDEOGRAPH - 0x93A4: 0x645B, //CJK UNIFIED IDEOGRAPH - 0x93A5: 0x645C, //CJK UNIFIED IDEOGRAPH - 0x93A6: 0x645D, //CJK UNIFIED IDEOGRAPH - 0x93A7: 0x645F, //CJK UNIFIED IDEOGRAPH - 0x93A8: 0x6460, //CJK UNIFIED IDEOGRAPH - 0x93A9: 0x6461, //CJK UNIFIED IDEOGRAPH - 0x93AA: 0x6462, //CJK UNIFIED IDEOGRAPH - 0x93AB: 0x6463, //CJK UNIFIED IDEOGRAPH - 0x93AC: 0x6464, //CJK UNIFIED IDEOGRAPH - 0x93AD: 0x6465, //CJK UNIFIED IDEOGRAPH - 0x93AE: 0x6466, //CJK UNIFIED IDEOGRAPH - 0x93AF: 0x6468, //CJK UNIFIED IDEOGRAPH - 0x93B0: 0x646A, //CJK UNIFIED IDEOGRAPH - 0x93B1: 0x646B, //CJK UNIFIED IDEOGRAPH - 0x93B2: 0x646C, //CJK UNIFIED IDEOGRAPH - 0x93B3: 0x646E, //CJK UNIFIED IDEOGRAPH - 0x93B4: 0x646F, //CJK UNIFIED IDEOGRAPH - 0x93B5: 0x6470, //CJK UNIFIED IDEOGRAPH - 0x93B6: 0x6471, //CJK UNIFIED IDEOGRAPH - 0x93B7: 0x6472, //CJK UNIFIED IDEOGRAPH - 0x93B8: 0x6473, //CJK UNIFIED IDEOGRAPH - 0x93B9: 0x6474, //CJK UNIFIED IDEOGRAPH - 0x93BA: 0x6475, //CJK UNIFIED IDEOGRAPH - 0x93BB: 0x6476, //CJK UNIFIED IDEOGRAPH - 0x93BC: 0x6477, //CJK UNIFIED IDEOGRAPH - 0x93BD: 0x647B, //CJK UNIFIED IDEOGRAPH - 0x93BE: 0x647C, //CJK UNIFIED IDEOGRAPH - 0x93BF: 0x647D, //CJK UNIFIED IDEOGRAPH - 0x93C0: 0x647E, //CJK UNIFIED IDEOGRAPH - 0x93C1: 0x647F, //CJK UNIFIED IDEOGRAPH - 0x93C2: 0x6480, //CJK UNIFIED IDEOGRAPH - 0x93C3: 0x6481, //CJK UNIFIED IDEOGRAPH - 0x93C4: 0x6483, //CJK UNIFIED IDEOGRAPH - 0x93C5: 0x6486, //CJK UNIFIED IDEOGRAPH - 0x93C6: 0x6488, //CJK UNIFIED IDEOGRAPH - 0x93C7: 0x6489, //CJK UNIFIED IDEOGRAPH - 0x93C8: 0x648A, //CJK UNIFIED IDEOGRAPH - 0x93C9: 0x648B, //CJK UNIFIED IDEOGRAPH - 0x93CA: 0x648C, //CJK UNIFIED IDEOGRAPH - 0x93CB: 0x648D, //CJK UNIFIED IDEOGRAPH - 0x93CC: 0x648E, //CJK UNIFIED IDEOGRAPH - 0x93CD: 0x648F, //CJK UNIFIED IDEOGRAPH - 0x93CE: 0x6490, //CJK UNIFIED IDEOGRAPH - 0x93CF: 0x6493, //CJK UNIFIED IDEOGRAPH - 0x93D0: 0x6494, //CJK UNIFIED IDEOGRAPH - 0x93D1: 0x6497, //CJK UNIFIED IDEOGRAPH - 0x93D2: 0x6498, //CJK UNIFIED IDEOGRAPH - 0x93D3: 0x649A, //CJK UNIFIED IDEOGRAPH - 0x93D4: 0x649B, //CJK UNIFIED IDEOGRAPH - 0x93D5: 0x649C, //CJK UNIFIED IDEOGRAPH - 0x93D6: 0x649D, //CJK UNIFIED IDEOGRAPH - 0x93D7: 0x649F, //CJK UNIFIED IDEOGRAPH - 0x93D8: 0x64A0, //CJK UNIFIED IDEOGRAPH - 0x93D9: 0x64A1, //CJK UNIFIED IDEOGRAPH - 0x93DA: 0x64A2, //CJK UNIFIED IDEOGRAPH - 0x93DB: 0x64A3, //CJK UNIFIED IDEOGRAPH - 0x93DC: 0x64A5, //CJK UNIFIED IDEOGRAPH - 0x93DD: 0x64A6, //CJK UNIFIED IDEOGRAPH - 0x93DE: 0x64A7, //CJK UNIFIED IDEOGRAPH - 0x93DF: 0x64A8, //CJK UNIFIED IDEOGRAPH - 0x93E0: 0x64AA, //CJK UNIFIED IDEOGRAPH - 0x93E1: 0x64AB, //CJK UNIFIED IDEOGRAPH - 0x93E2: 0x64AF, //CJK UNIFIED IDEOGRAPH - 0x93E3: 0x64B1, //CJK UNIFIED IDEOGRAPH - 0x93E4: 0x64B2, //CJK UNIFIED IDEOGRAPH - 0x93E5: 0x64B3, //CJK UNIFIED IDEOGRAPH - 0x93E6: 0x64B4, //CJK UNIFIED IDEOGRAPH - 0x93E7: 0x64B6, //CJK UNIFIED IDEOGRAPH - 0x93E8: 0x64B9, //CJK UNIFIED IDEOGRAPH - 0x93E9: 0x64BB, //CJK UNIFIED IDEOGRAPH - 0x93EA: 0x64BD, //CJK UNIFIED IDEOGRAPH - 0x93EB: 0x64BE, //CJK UNIFIED IDEOGRAPH - 0x93EC: 0x64BF, //CJK UNIFIED IDEOGRAPH - 0x93ED: 0x64C1, //CJK UNIFIED IDEOGRAPH - 0x93EE: 0x64C3, //CJK UNIFIED IDEOGRAPH - 0x93EF: 0x64C4, //CJK UNIFIED IDEOGRAPH - 0x93F0: 0x64C6, //CJK UNIFIED IDEOGRAPH - 0x93F1: 0x64C7, //CJK UNIFIED IDEOGRAPH - 0x93F2: 0x64C8, //CJK UNIFIED IDEOGRAPH - 0x93F3: 0x64C9, //CJK UNIFIED IDEOGRAPH - 0x93F4: 0x64CA, //CJK UNIFIED IDEOGRAPH - 0x93F5: 0x64CB, //CJK UNIFIED IDEOGRAPH - 0x93F6: 0x64CC, //CJK UNIFIED IDEOGRAPH - 0x93F7: 0x64CF, //CJK UNIFIED IDEOGRAPH - 0x93F8: 0x64D1, //CJK UNIFIED IDEOGRAPH - 0x93F9: 0x64D3, //CJK UNIFIED IDEOGRAPH - 0x93FA: 0x64D4, //CJK UNIFIED IDEOGRAPH - 0x93FB: 0x64D5, //CJK UNIFIED IDEOGRAPH - 0x93FC: 0x64D6, //CJK UNIFIED IDEOGRAPH - 0x93FD: 0x64D9, //CJK UNIFIED IDEOGRAPH - 0x93FE: 0x64DA, //CJK UNIFIED IDEOGRAPH - 0x9440: 0x64DB, //CJK UNIFIED IDEOGRAPH - 0x9441: 0x64DC, //CJK UNIFIED IDEOGRAPH - 0x9442: 0x64DD, //CJK UNIFIED IDEOGRAPH - 0x9443: 0x64DF, //CJK UNIFIED IDEOGRAPH - 0x9444: 0x64E0, //CJK UNIFIED IDEOGRAPH - 0x9445: 0x64E1, //CJK UNIFIED IDEOGRAPH - 0x9446: 0x64E3, //CJK UNIFIED IDEOGRAPH - 0x9447: 0x64E5, //CJK UNIFIED IDEOGRAPH - 0x9448: 0x64E7, //CJK UNIFIED IDEOGRAPH - 0x9449: 0x64E8, //CJK UNIFIED IDEOGRAPH - 0x944A: 0x64E9, //CJK UNIFIED IDEOGRAPH - 0x944B: 0x64EA, //CJK UNIFIED IDEOGRAPH - 0x944C: 0x64EB, //CJK UNIFIED IDEOGRAPH - 0x944D: 0x64EC, //CJK UNIFIED IDEOGRAPH - 0x944E: 0x64ED, //CJK UNIFIED IDEOGRAPH - 0x944F: 0x64EE, //CJK UNIFIED IDEOGRAPH - 0x9450: 0x64EF, //CJK UNIFIED IDEOGRAPH - 0x9451: 0x64F0, //CJK UNIFIED IDEOGRAPH - 0x9452: 0x64F1, //CJK UNIFIED IDEOGRAPH - 0x9453: 0x64F2, //CJK UNIFIED IDEOGRAPH - 0x9454: 0x64F3, //CJK UNIFIED IDEOGRAPH - 0x9455: 0x64F4, //CJK UNIFIED IDEOGRAPH - 0x9456: 0x64F5, //CJK UNIFIED IDEOGRAPH - 0x9457: 0x64F6, //CJK UNIFIED IDEOGRAPH - 0x9458: 0x64F7, //CJK UNIFIED IDEOGRAPH - 0x9459: 0x64F8, //CJK UNIFIED IDEOGRAPH - 0x945A: 0x64F9, //CJK UNIFIED IDEOGRAPH - 0x945B: 0x64FA, //CJK UNIFIED IDEOGRAPH - 0x945C: 0x64FB, //CJK UNIFIED IDEOGRAPH - 0x945D: 0x64FC, //CJK UNIFIED IDEOGRAPH - 0x945E: 0x64FD, //CJK UNIFIED IDEOGRAPH - 0x945F: 0x64FE, //CJK UNIFIED IDEOGRAPH - 0x9460: 0x64FF, //CJK UNIFIED IDEOGRAPH - 0x9461: 0x6501, //CJK UNIFIED IDEOGRAPH - 0x9462: 0x6502, //CJK UNIFIED IDEOGRAPH - 0x9463: 0x6503, //CJK UNIFIED IDEOGRAPH - 0x9464: 0x6504, //CJK UNIFIED IDEOGRAPH - 0x9465: 0x6505, //CJK UNIFIED IDEOGRAPH - 0x9466: 0x6506, //CJK UNIFIED IDEOGRAPH - 0x9467: 0x6507, //CJK UNIFIED IDEOGRAPH - 0x9468: 0x6508, //CJK UNIFIED IDEOGRAPH - 0x9469: 0x650A, //CJK UNIFIED IDEOGRAPH - 0x946A: 0x650B, //CJK UNIFIED IDEOGRAPH - 0x946B: 0x650C, //CJK UNIFIED IDEOGRAPH - 0x946C: 0x650D, //CJK UNIFIED IDEOGRAPH - 0x946D: 0x650E, //CJK UNIFIED IDEOGRAPH - 0x946E: 0x650F, //CJK UNIFIED IDEOGRAPH - 0x946F: 0x6510, //CJK UNIFIED IDEOGRAPH - 0x9470: 0x6511, //CJK UNIFIED IDEOGRAPH - 0x9471: 0x6513, //CJK UNIFIED IDEOGRAPH - 0x9472: 0x6514, //CJK UNIFIED IDEOGRAPH - 0x9473: 0x6515, //CJK UNIFIED IDEOGRAPH - 0x9474: 0x6516, //CJK UNIFIED IDEOGRAPH - 0x9475: 0x6517, //CJK UNIFIED IDEOGRAPH - 0x9476: 0x6519, //CJK UNIFIED IDEOGRAPH - 0x9477: 0x651A, //CJK UNIFIED IDEOGRAPH - 0x9478: 0x651B, //CJK UNIFIED IDEOGRAPH - 0x9479: 0x651C, //CJK UNIFIED IDEOGRAPH - 0x947A: 0x651D, //CJK UNIFIED IDEOGRAPH - 0x947B: 0x651E, //CJK UNIFIED IDEOGRAPH - 0x947C: 0x651F, //CJK UNIFIED IDEOGRAPH - 0x947D: 0x6520, //CJK UNIFIED IDEOGRAPH - 0x947E: 0x6521, //CJK UNIFIED IDEOGRAPH - 0x9480: 0x6522, //CJK UNIFIED IDEOGRAPH - 0x9481: 0x6523, //CJK UNIFIED IDEOGRAPH - 0x9482: 0x6524, //CJK UNIFIED IDEOGRAPH - 0x9483: 0x6526, //CJK UNIFIED IDEOGRAPH - 0x9484: 0x6527, //CJK UNIFIED IDEOGRAPH - 0x9485: 0x6528, //CJK UNIFIED IDEOGRAPH - 0x9486: 0x6529, //CJK UNIFIED IDEOGRAPH - 0x9487: 0x652A, //CJK UNIFIED IDEOGRAPH - 0x9488: 0x652C, //CJK UNIFIED IDEOGRAPH - 0x9489: 0x652D, //CJK UNIFIED IDEOGRAPH - 0x948A: 0x6530, //CJK UNIFIED IDEOGRAPH - 0x948B: 0x6531, //CJK UNIFIED IDEOGRAPH - 0x948C: 0x6532, //CJK UNIFIED IDEOGRAPH - 0x948D: 0x6533, //CJK UNIFIED IDEOGRAPH - 0x948E: 0x6537, //CJK UNIFIED IDEOGRAPH - 0x948F: 0x653A, //CJK UNIFIED IDEOGRAPH - 0x9490: 0x653C, //CJK UNIFIED IDEOGRAPH - 0x9491: 0x653D, //CJK UNIFIED IDEOGRAPH - 0x9492: 0x6540, //CJK UNIFIED IDEOGRAPH - 0x9493: 0x6541, //CJK UNIFIED IDEOGRAPH - 0x9494: 0x6542, //CJK UNIFIED IDEOGRAPH - 0x9495: 0x6543, //CJK UNIFIED IDEOGRAPH - 0x9496: 0x6544, //CJK UNIFIED IDEOGRAPH - 0x9497: 0x6546, //CJK UNIFIED IDEOGRAPH - 0x9498: 0x6547, //CJK UNIFIED IDEOGRAPH - 0x9499: 0x654A, //CJK UNIFIED IDEOGRAPH - 0x949A: 0x654B, //CJK UNIFIED IDEOGRAPH - 0x949B: 0x654D, //CJK UNIFIED IDEOGRAPH - 0x949C: 0x654E, //CJK UNIFIED IDEOGRAPH - 0x949D: 0x6550, //CJK UNIFIED IDEOGRAPH - 0x949E: 0x6552, //CJK UNIFIED IDEOGRAPH - 0x949F: 0x6553, //CJK UNIFIED IDEOGRAPH - 0x94A0: 0x6554, //CJK UNIFIED IDEOGRAPH - 0x94A1: 0x6557, //CJK UNIFIED IDEOGRAPH - 0x94A2: 0x6558, //CJK UNIFIED IDEOGRAPH - 0x94A3: 0x655A, //CJK UNIFIED IDEOGRAPH - 0x94A4: 0x655C, //CJK UNIFIED IDEOGRAPH - 0x94A5: 0x655F, //CJK UNIFIED IDEOGRAPH - 0x94A6: 0x6560, //CJK UNIFIED IDEOGRAPH - 0x94A7: 0x6561, //CJK UNIFIED IDEOGRAPH - 0x94A8: 0x6564, //CJK UNIFIED IDEOGRAPH - 0x94A9: 0x6565, //CJK UNIFIED IDEOGRAPH - 0x94AA: 0x6567, //CJK UNIFIED IDEOGRAPH - 0x94AB: 0x6568, //CJK UNIFIED IDEOGRAPH - 0x94AC: 0x6569, //CJK UNIFIED IDEOGRAPH - 0x94AD: 0x656A, //CJK UNIFIED IDEOGRAPH - 0x94AE: 0x656D, //CJK UNIFIED IDEOGRAPH - 0x94AF: 0x656E, //CJK UNIFIED IDEOGRAPH - 0x94B0: 0x656F, //CJK UNIFIED IDEOGRAPH - 0x94B1: 0x6571, //CJK UNIFIED IDEOGRAPH - 0x94B2: 0x6573, //CJK UNIFIED IDEOGRAPH - 0x94B3: 0x6575, //CJK UNIFIED IDEOGRAPH - 0x94B4: 0x6576, //CJK UNIFIED IDEOGRAPH - 0x94B5: 0x6578, //CJK UNIFIED IDEOGRAPH - 0x94B6: 0x6579, //CJK UNIFIED IDEOGRAPH - 0x94B7: 0x657A, //CJK UNIFIED IDEOGRAPH - 0x94B8: 0x657B, //CJK UNIFIED IDEOGRAPH - 0x94B9: 0x657C, //CJK UNIFIED IDEOGRAPH - 0x94BA: 0x657D, //CJK UNIFIED IDEOGRAPH - 0x94BB: 0x657E, //CJK UNIFIED IDEOGRAPH - 0x94BC: 0x657F, //CJK UNIFIED IDEOGRAPH - 0x94BD: 0x6580, //CJK UNIFIED IDEOGRAPH - 0x94BE: 0x6581, //CJK UNIFIED IDEOGRAPH - 0x94BF: 0x6582, //CJK UNIFIED IDEOGRAPH - 0x94C0: 0x6583, //CJK UNIFIED IDEOGRAPH - 0x94C1: 0x6584, //CJK UNIFIED IDEOGRAPH - 0x94C2: 0x6585, //CJK UNIFIED IDEOGRAPH - 0x94C3: 0x6586, //CJK UNIFIED IDEOGRAPH - 0x94C4: 0x6588, //CJK UNIFIED IDEOGRAPH - 0x94C5: 0x6589, //CJK UNIFIED IDEOGRAPH - 0x94C6: 0x658A, //CJK UNIFIED IDEOGRAPH - 0x94C7: 0x658D, //CJK UNIFIED IDEOGRAPH - 0x94C8: 0x658E, //CJK UNIFIED IDEOGRAPH - 0x94C9: 0x658F, //CJK UNIFIED IDEOGRAPH - 0x94CA: 0x6592, //CJK UNIFIED IDEOGRAPH - 0x94CB: 0x6594, //CJK UNIFIED IDEOGRAPH - 0x94CC: 0x6595, //CJK UNIFIED IDEOGRAPH - 0x94CD: 0x6596, //CJK UNIFIED IDEOGRAPH - 0x94CE: 0x6598, //CJK UNIFIED IDEOGRAPH - 0x94CF: 0x659A, //CJK UNIFIED IDEOGRAPH - 0x94D0: 0x659D, //CJK UNIFIED IDEOGRAPH - 0x94D1: 0x659E, //CJK UNIFIED IDEOGRAPH - 0x94D2: 0x65A0, //CJK UNIFIED IDEOGRAPH - 0x94D3: 0x65A2, //CJK UNIFIED IDEOGRAPH - 0x94D4: 0x65A3, //CJK UNIFIED IDEOGRAPH - 0x94D5: 0x65A6, //CJK UNIFIED IDEOGRAPH - 0x94D6: 0x65A8, //CJK UNIFIED IDEOGRAPH - 0x94D7: 0x65AA, //CJK UNIFIED IDEOGRAPH - 0x94D8: 0x65AC, //CJK UNIFIED IDEOGRAPH - 0x94D9: 0x65AE, //CJK UNIFIED IDEOGRAPH - 0x94DA: 0x65B1, //CJK UNIFIED IDEOGRAPH - 0x94DB: 0x65B2, //CJK UNIFIED IDEOGRAPH - 0x94DC: 0x65B3, //CJK UNIFIED IDEOGRAPH - 0x94DD: 0x65B4, //CJK UNIFIED IDEOGRAPH - 0x94DE: 0x65B5, //CJK UNIFIED IDEOGRAPH - 0x94DF: 0x65B6, //CJK UNIFIED IDEOGRAPH - 0x94E0: 0x65B7, //CJK UNIFIED IDEOGRAPH - 0x94E1: 0x65B8, //CJK UNIFIED IDEOGRAPH - 0x94E2: 0x65BA, //CJK UNIFIED IDEOGRAPH - 0x94E3: 0x65BB, //CJK UNIFIED IDEOGRAPH - 0x94E4: 0x65BE, //CJK UNIFIED IDEOGRAPH - 0x94E5: 0x65BF, //CJK UNIFIED IDEOGRAPH - 0x94E6: 0x65C0, //CJK UNIFIED IDEOGRAPH - 0x94E7: 0x65C2, //CJK UNIFIED IDEOGRAPH - 0x94E8: 0x65C7, //CJK UNIFIED IDEOGRAPH - 0x94E9: 0x65C8, //CJK UNIFIED IDEOGRAPH - 0x94EA: 0x65C9, //CJK UNIFIED IDEOGRAPH - 0x94EB: 0x65CA, //CJK UNIFIED IDEOGRAPH - 0x94EC: 0x65CD, //CJK UNIFIED IDEOGRAPH - 0x94ED: 0x65D0, //CJK UNIFIED IDEOGRAPH - 0x94EE: 0x65D1, //CJK UNIFIED IDEOGRAPH - 0x94EF: 0x65D3, //CJK UNIFIED IDEOGRAPH - 0x94F0: 0x65D4, //CJK UNIFIED IDEOGRAPH - 0x94F1: 0x65D5, //CJK UNIFIED IDEOGRAPH - 0x94F2: 0x65D8, //CJK UNIFIED IDEOGRAPH - 0x94F3: 0x65D9, //CJK UNIFIED IDEOGRAPH - 0x94F4: 0x65DA, //CJK UNIFIED IDEOGRAPH - 0x94F5: 0x65DB, //CJK UNIFIED IDEOGRAPH - 0x94F6: 0x65DC, //CJK UNIFIED IDEOGRAPH - 0x94F7: 0x65DD, //CJK UNIFIED IDEOGRAPH - 0x94F8: 0x65DE, //CJK UNIFIED IDEOGRAPH - 0x94F9: 0x65DF, //CJK UNIFIED IDEOGRAPH - 0x94FA: 0x65E1, //CJK UNIFIED IDEOGRAPH - 0x94FB: 0x65E3, //CJK UNIFIED IDEOGRAPH - 0x94FC: 0x65E4, //CJK UNIFIED IDEOGRAPH - 0x94FD: 0x65EA, //CJK UNIFIED IDEOGRAPH - 0x94FE: 0x65EB, //CJK UNIFIED IDEOGRAPH - 0x9540: 0x65F2, //CJK UNIFIED IDEOGRAPH - 0x9541: 0x65F3, //CJK UNIFIED IDEOGRAPH - 0x9542: 0x65F4, //CJK UNIFIED IDEOGRAPH - 0x9543: 0x65F5, //CJK UNIFIED IDEOGRAPH - 0x9544: 0x65F8, //CJK UNIFIED IDEOGRAPH - 0x9545: 0x65F9, //CJK UNIFIED IDEOGRAPH - 0x9546: 0x65FB, //CJK UNIFIED IDEOGRAPH - 0x9547: 0x65FC, //CJK UNIFIED IDEOGRAPH - 0x9548: 0x65FD, //CJK UNIFIED IDEOGRAPH - 0x9549: 0x65FE, //CJK UNIFIED IDEOGRAPH - 0x954A: 0x65FF, //CJK UNIFIED IDEOGRAPH - 0x954B: 0x6601, //CJK UNIFIED IDEOGRAPH - 0x954C: 0x6604, //CJK UNIFIED IDEOGRAPH - 0x954D: 0x6605, //CJK UNIFIED IDEOGRAPH - 0x954E: 0x6607, //CJK UNIFIED IDEOGRAPH - 0x954F: 0x6608, //CJK UNIFIED IDEOGRAPH - 0x9550: 0x6609, //CJK UNIFIED IDEOGRAPH - 0x9551: 0x660B, //CJK UNIFIED IDEOGRAPH - 0x9552: 0x660D, //CJK UNIFIED IDEOGRAPH - 0x9553: 0x6610, //CJK UNIFIED IDEOGRAPH - 0x9554: 0x6611, //CJK UNIFIED IDEOGRAPH - 0x9555: 0x6612, //CJK UNIFIED IDEOGRAPH - 0x9556: 0x6616, //CJK UNIFIED IDEOGRAPH - 0x9557: 0x6617, //CJK UNIFIED IDEOGRAPH - 0x9558: 0x6618, //CJK UNIFIED IDEOGRAPH - 0x9559: 0x661A, //CJK UNIFIED IDEOGRAPH - 0x955A: 0x661B, //CJK UNIFIED IDEOGRAPH - 0x955B: 0x661C, //CJK UNIFIED IDEOGRAPH - 0x955C: 0x661E, //CJK UNIFIED IDEOGRAPH - 0x955D: 0x6621, //CJK UNIFIED IDEOGRAPH - 0x955E: 0x6622, //CJK UNIFIED IDEOGRAPH - 0x955F: 0x6623, //CJK UNIFIED IDEOGRAPH - 0x9560: 0x6624, //CJK UNIFIED IDEOGRAPH - 0x9561: 0x6626, //CJK UNIFIED IDEOGRAPH - 0x9562: 0x6629, //CJK UNIFIED IDEOGRAPH - 0x9563: 0x662A, //CJK UNIFIED IDEOGRAPH - 0x9564: 0x662B, //CJK UNIFIED IDEOGRAPH - 0x9565: 0x662C, //CJK UNIFIED IDEOGRAPH - 0x9566: 0x662E, //CJK UNIFIED IDEOGRAPH - 0x9567: 0x6630, //CJK UNIFIED IDEOGRAPH - 0x9568: 0x6632, //CJK UNIFIED IDEOGRAPH - 0x9569: 0x6633, //CJK UNIFIED IDEOGRAPH - 0x956A: 0x6637, //CJK UNIFIED IDEOGRAPH - 0x956B: 0x6638, //CJK UNIFIED IDEOGRAPH - 0x956C: 0x6639, //CJK UNIFIED IDEOGRAPH - 0x956D: 0x663A, //CJK UNIFIED IDEOGRAPH - 0x956E: 0x663B, //CJK UNIFIED IDEOGRAPH - 0x956F: 0x663D, //CJK UNIFIED IDEOGRAPH - 0x9570: 0x663F, //CJK UNIFIED IDEOGRAPH - 0x9571: 0x6640, //CJK UNIFIED IDEOGRAPH - 0x9572: 0x6642, //CJK UNIFIED IDEOGRAPH - 0x9573: 0x6644, //CJK UNIFIED IDEOGRAPH - 0x9574: 0x6645, //CJK UNIFIED IDEOGRAPH - 0x9575: 0x6646, //CJK UNIFIED IDEOGRAPH - 0x9576: 0x6647, //CJK UNIFIED IDEOGRAPH - 0x9577: 0x6648, //CJK UNIFIED IDEOGRAPH - 0x9578: 0x6649, //CJK UNIFIED IDEOGRAPH - 0x9579: 0x664A, //CJK UNIFIED IDEOGRAPH - 0x957A: 0x664D, //CJK UNIFIED IDEOGRAPH - 0x957B: 0x664E, //CJK UNIFIED IDEOGRAPH - 0x957C: 0x6650, //CJK UNIFIED IDEOGRAPH - 0x957D: 0x6651, //CJK UNIFIED IDEOGRAPH - 0x957E: 0x6658, //CJK UNIFIED IDEOGRAPH - 0x9580: 0x6659, //CJK UNIFIED IDEOGRAPH - 0x9581: 0x665B, //CJK UNIFIED IDEOGRAPH - 0x9582: 0x665C, //CJK UNIFIED IDEOGRAPH - 0x9583: 0x665D, //CJK UNIFIED IDEOGRAPH - 0x9584: 0x665E, //CJK UNIFIED IDEOGRAPH - 0x9585: 0x6660, //CJK UNIFIED IDEOGRAPH - 0x9586: 0x6662, //CJK UNIFIED IDEOGRAPH - 0x9587: 0x6663, //CJK UNIFIED IDEOGRAPH - 0x9588: 0x6665, //CJK UNIFIED IDEOGRAPH - 0x9589: 0x6667, //CJK UNIFIED IDEOGRAPH - 0x958A: 0x6669, //CJK UNIFIED IDEOGRAPH - 0x958B: 0x666A, //CJK UNIFIED IDEOGRAPH - 0x958C: 0x666B, //CJK UNIFIED IDEOGRAPH - 0x958D: 0x666C, //CJK UNIFIED IDEOGRAPH - 0x958E: 0x666D, //CJK UNIFIED IDEOGRAPH - 0x958F: 0x6671, //CJK UNIFIED IDEOGRAPH - 0x9590: 0x6672, //CJK UNIFIED IDEOGRAPH - 0x9591: 0x6673, //CJK UNIFIED IDEOGRAPH - 0x9592: 0x6675, //CJK UNIFIED IDEOGRAPH - 0x9593: 0x6678, //CJK UNIFIED IDEOGRAPH - 0x9594: 0x6679, //CJK UNIFIED IDEOGRAPH - 0x9595: 0x667B, //CJK UNIFIED IDEOGRAPH - 0x9596: 0x667C, //CJK UNIFIED IDEOGRAPH - 0x9597: 0x667D, //CJK UNIFIED IDEOGRAPH - 0x9598: 0x667F, //CJK UNIFIED IDEOGRAPH - 0x9599: 0x6680, //CJK UNIFIED IDEOGRAPH - 0x959A: 0x6681, //CJK UNIFIED IDEOGRAPH - 0x959B: 0x6683, //CJK UNIFIED IDEOGRAPH - 0x959C: 0x6685, //CJK UNIFIED IDEOGRAPH - 0x959D: 0x6686, //CJK UNIFIED IDEOGRAPH - 0x959E: 0x6688, //CJK UNIFIED IDEOGRAPH - 0x959F: 0x6689, //CJK UNIFIED IDEOGRAPH - 0x95A0: 0x668A, //CJK UNIFIED IDEOGRAPH - 0x95A1: 0x668B, //CJK UNIFIED IDEOGRAPH - 0x95A2: 0x668D, //CJK UNIFIED IDEOGRAPH - 0x95A3: 0x668E, //CJK UNIFIED IDEOGRAPH - 0x95A4: 0x668F, //CJK UNIFIED IDEOGRAPH - 0x95A5: 0x6690, //CJK UNIFIED IDEOGRAPH - 0x95A6: 0x6692, //CJK UNIFIED IDEOGRAPH - 0x95A7: 0x6693, //CJK UNIFIED IDEOGRAPH - 0x95A8: 0x6694, //CJK UNIFIED IDEOGRAPH - 0x95A9: 0x6695, //CJK UNIFIED IDEOGRAPH - 0x95AA: 0x6698, //CJK UNIFIED IDEOGRAPH - 0x95AB: 0x6699, //CJK UNIFIED IDEOGRAPH - 0x95AC: 0x669A, //CJK UNIFIED IDEOGRAPH - 0x95AD: 0x669B, //CJK UNIFIED IDEOGRAPH - 0x95AE: 0x669C, //CJK UNIFIED IDEOGRAPH - 0x95AF: 0x669E, //CJK UNIFIED IDEOGRAPH - 0x95B0: 0x669F, //CJK UNIFIED IDEOGRAPH - 0x95B1: 0x66A0, //CJK UNIFIED IDEOGRAPH - 0x95B2: 0x66A1, //CJK UNIFIED IDEOGRAPH - 0x95B3: 0x66A2, //CJK UNIFIED IDEOGRAPH - 0x95B4: 0x66A3, //CJK UNIFIED IDEOGRAPH - 0x95B5: 0x66A4, //CJK UNIFIED IDEOGRAPH - 0x95B6: 0x66A5, //CJK UNIFIED IDEOGRAPH - 0x95B7: 0x66A6, //CJK UNIFIED IDEOGRAPH - 0x95B8: 0x66A9, //CJK UNIFIED IDEOGRAPH - 0x95B9: 0x66AA, //CJK UNIFIED IDEOGRAPH - 0x95BA: 0x66AB, //CJK UNIFIED IDEOGRAPH - 0x95BB: 0x66AC, //CJK UNIFIED IDEOGRAPH - 0x95BC: 0x66AD, //CJK UNIFIED IDEOGRAPH - 0x95BD: 0x66AF, //CJK UNIFIED IDEOGRAPH - 0x95BE: 0x66B0, //CJK UNIFIED IDEOGRAPH - 0x95BF: 0x66B1, //CJK UNIFIED IDEOGRAPH - 0x95C0: 0x66B2, //CJK UNIFIED IDEOGRAPH - 0x95C1: 0x66B3, //CJK UNIFIED IDEOGRAPH - 0x95C2: 0x66B5, //CJK UNIFIED IDEOGRAPH - 0x95C3: 0x66B6, //CJK UNIFIED IDEOGRAPH - 0x95C4: 0x66B7, //CJK UNIFIED IDEOGRAPH - 0x95C5: 0x66B8, //CJK UNIFIED IDEOGRAPH - 0x95C6: 0x66BA, //CJK UNIFIED IDEOGRAPH - 0x95C7: 0x66BB, //CJK UNIFIED IDEOGRAPH - 0x95C8: 0x66BC, //CJK UNIFIED IDEOGRAPH - 0x95C9: 0x66BD, //CJK UNIFIED IDEOGRAPH - 0x95CA: 0x66BF, //CJK UNIFIED IDEOGRAPH - 0x95CB: 0x66C0, //CJK UNIFIED IDEOGRAPH - 0x95CC: 0x66C1, //CJK UNIFIED IDEOGRAPH - 0x95CD: 0x66C2, //CJK UNIFIED IDEOGRAPH - 0x95CE: 0x66C3, //CJK UNIFIED IDEOGRAPH - 0x95CF: 0x66C4, //CJK UNIFIED IDEOGRAPH - 0x95D0: 0x66C5, //CJK UNIFIED IDEOGRAPH - 0x95D1: 0x66C6, //CJK UNIFIED IDEOGRAPH - 0x95D2: 0x66C7, //CJK UNIFIED IDEOGRAPH - 0x95D3: 0x66C8, //CJK UNIFIED IDEOGRAPH - 0x95D4: 0x66C9, //CJK UNIFIED IDEOGRAPH - 0x95D5: 0x66CA, //CJK UNIFIED IDEOGRAPH - 0x95D6: 0x66CB, //CJK UNIFIED IDEOGRAPH - 0x95D7: 0x66CC, //CJK UNIFIED IDEOGRAPH - 0x95D8: 0x66CD, //CJK UNIFIED IDEOGRAPH - 0x95D9: 0x66CE, //CJK UNIFIED IDEOGRAPH - 0x95DA: 0x66CF, //CJK UNIFIED IDEOGRAPH - 0x95DB: 0x66D0, //CJK UNIFIED IDEOGRAPH - 0x95DC: 0x66D1, //CJK UNIFIED IDEOGRAPH - 0x95DD: 0x66D2, //CJK UNIFIED IDEOGRAPH - 0x95DE: 0x66D3, //CJK UNIFIED IDEOGRAPH - 0x95DF: 0x66D4, //CJK UNIFIED IDEOGRAPH - 0x95E0: 0x66D5, //CJK UNIFIED IDEOGRAPH - 0x95E1: 0x66D6, //CJK UNIFIED IDEOGRAPH - 0x95E2: 0x66D7, //CJK UNIFIED IDEOGRAPH - 0x95E3: 0x66D8, //CJK UNIFIED IDEOGRAPH - 0x95E4: 0x66DA, //CJK UNIFIED IDEOGRAPH - 0x95E5: 0x66DE, //CJK UNIFIED IDEOGRAPH - 0x95E6: 0x66DF, //CJK UNIFIED IDEOGRAPH - 0x95E7: 0x66E0, //CJK UNIFIED IDEOGRAPH - 0x95E8: 0x66E1, //CJK UNIFIED IDEOGRAPH - 0x95E9: 0x66E2, //CJK UNIFIED IDEOGRAPH - 0x95EA: 0x66E3, //CJK UNIFIED IDEOGRAPH - 0x95EB: 0x66E4, //CJK UNIFIED IDEOGRAPH - 0x95EC: 0x66E5, //CJK UNIFIED IDEOGRAPH - 0x95ED: 0x66E7, //CJK UNIFIED IDEOGRAPH - 0x95EE: 0x66E8, //CJK UNIFIED IDEOGRAPH - 0x95EF: 0x66EA, //CJK UNIFIED IDEOGRAPH - 0x95F0: 0x66EB, //CJK UNIFIED IDEOGRAPH - 0x95F1: 0x66EC, //CJK UNIFIED IDEOGRAPH - 0x95F2: 0x66ED, //CJK UNIFIED IDEOGRAPH - 0x95F3: 0x66EE, //CJK UNIFIED IDEOGRAPH - 0x95F4: 0x66EF, //CJK UNIFIED IDEOGRAPH - 0x95F5: 0x66F1, //CJK UNIFIED IDEOGRAPH - 0x95F6: 0x66F5, //CJK UNIFIED IDEOGRAPH - 0x95F7: 0x66F6, //CJK UNIFIED IDEOGRAPH - 0x95F8: 0x66F8, //CJK UNIFIED IDEOGRAPH - 0x95F9: 0x66FA, //CJK UNIFIED IDEOGRAPH - 0x95FA: 0x66FB, //CJK UNIFIED IDEOGRAPH - 0x95FB: 0x66FD, //CJK UNIFIED IDEOGRAPH - 0x95FC: 0x6701, //CJK UNIFIED IDEOGRAPH - 0x95FD: 0x6702, //CJK UNIFIED IDEOGRAPH - 0x95FE: 0x6703, //CJK UNIFIED IDEOGRAPH - 0x9640: 0x6704, //CJK UNIFIED IDEOGRAPH - 0x9641: 0x6705, //CJK UNIFIED IDEOGRAPH - 0x9642: 0x6706, //CJK UNIFIED IDEOGRAPH - 0x9643: 0x6707, //CJK UNIFIED IDEOGRAPH - 0x9644: 0x670C, //CJK UNIFIED IDEOGRAPH - 0x9645: 0x670E, //CJK UNIFIED IDEOGRAPH - 0x9646: 0x670F, //CJK UNIFIED IDEOGRAPH - 0x9647: 0x6711, //CJK UNIFIED IDEOGRAPH - 0x9648: 0x6712, //CJK UNIFIED IDEOGRAPH - 0x9649: 0x6713, //CJK UNIFIED IDEOGRAPH - 0x964A: 0x6716, //CJK UNIFIED IDEOGRAPH - 0x964B: 0x6718, //CJK UNIFIED IDEOGRAPH - 0x964C: 0x6719, //CJK UNIFIED IDEOGRAPH - 0x964D: 0x671A, //CJK UNIFIED IDEOGRAPH - 0x964E: 0x671C, //CJK UNIFIED IDEOGRAPH - 0x964F: 0x671E, //CJK UNIFIED IDEOGRAPH - 0x9650: 0x6720, //CJK UNIFIED IDEOGRAPH - 0x9651: 0x6721, //CJK UNIFIED IDEOGRAPH - 0x9652: 0x6722, //CJK UNIFIED IDEOGRAPH - 0x9653: 0x6723, //CJK UNIFIED IDEOGRAPH - 0x9654: 0x6724, //CJK UNIFIED IDEOGRAPH - 0x9655: 0x6725, //CJK UNIFIED IDEOGRAPH - 0x9656: 0x6727, //CJK UNIFIED IDEOGRAPH - 0x9657: 0x6729, //CJK UNIFIED IDEOGRAPH - 0x9658: 0x672E, //CJK UNIFIED IDEOGRAPH - 0x9659: 0x6730, //CJK UNIFIED IDEOGRAPH - 0x965A: 0x6732, //CJK UNIFIED IDEOGRAPH - 0x965B: 0x6733, //CJK UNIFIED IDEOGRAPH - 0x965C: 0x6736, //CJK UNIFIED IDEOGRAPH - 0x965D: 0x6737, //CJK UNIFIED IDEOGRAPH - 0x965E: 0x6738, //CJK UNIFIED IDEOGRAPH - 0x965F: 0x6739, //CJK UNIFIED IDEOGRAPH - 0x9660: 0x673B, //CJK UNIFIED IDEOGRAPH - 0x9661: 0x673C, //CJK UNIFIED IDEOGRAPH - 0x9662: 0x673E, //CJK UNIFIED IDEOGRAPH - 0x9663: 0x673F, //CJK UNIFIED IDEOGRAPH - 0x9664: 0x6741, //CJK UNIFIED IDEOGRAPH - 0x9665: 0x6744, //CJK UNIFIED IDEOGRAPH - 0x9666: 0x6745, //CJK UNIFIED IDEOGRAPH - 0x9667: 0x6747, //CJK UNIFIED IDEOGRAPH - 0x9668: 0x674A, //CJK UNIFIED IDEOGRAPH - 0x9669: 0x674B, //CJK UNIFIED IDEOGRAPH - 0x966A: 0x674D, //CJK UNIFIED IDEOGRAPH - 0x966B: 0x6752, //CJK UNIFIED IDEOGRAPH - 0x966C: 0x6754, //CJK UNIFIED IDEOGRAPH - 0x966D: 0x6755, //CJK UNIFIED IDEOGRAPH - 0x966E: 0x6757, //CJK UNIFIED IDEOGRAPH - 0x966F: 0x6758, //CJK UNIFIED IDEOGRAPH - 0x9670: 0x6759, //CJK UNIFIED IDEOGRAPH - 0x9671: 0x675A, //CJK UNIFIED IDEOGRAPH - 0x9672: 0x675B, //CJK UNIFIED IDEOGRAPH - 0x9673: 0x675D, //CJK UNIFIED IDEOGRAPH - 0x9674: 0x6762, //CJK UNIFIED IDEOGRAPH - 0x9675: 0x6763, //CJK UNIFIED IDEOGRAPH - 0x9676: 0x6764, //CJK UNIFIED IDEOGRAPH - 0x9677: 0x6766, //CJK UNIFIED IDEOGRAPH - 0x9678: 0x6767, //CJK UNIFIED IDEOGRAPH - 0x9679: 0x676B, //CJK UNIFIED IDEOGRAPH - 0x967A: 0x676C, //CJK UNIFIED IDEOGRAPH - 0x967B: 0x676E, //CJK UNIFIED IDEOGRAPH - 0x967C: 0x6771, //CJK UNIFIED IDEOGRAPH - 0x967D: 0x6774, //CJK UNIFIED IDEOGRAPH - 0x967E: 0x6776, //CJK UNIFIED IDEOGRAPH - 0x9680: 0x6778, //CJK UNIFIED IDEOGRAPH - 0x9681: 0x6779, //CJK UNIFIED IDEOGRAPH - 0x9682: 0x677A, //CJK UNIFIED IDEOGRAPH - 0x9683: 0x677B, //CJK UNIFIED IDEOGRAPH - 0x9684: 0x677D, //CJK UNIFIED IDEOGRAPH - 0x9685: 0x6780, //CJK UNIFIED IDEOGRAPH - 0x9686: 0x6782, //CJK UNIFIED IDEOGRAPH - 0x9687: 0x6783, //CJK UNIFIED IDEOGRAPH - 0x9688: 0x6785, //CJK UNIFIED IDEOGRAPH - 0x9689: 0x6786, //CJK UNIFIED IDEOGRAPH - 0x968A: 0x6788, //CJK UNIFIED IDEOGRAPH - 0x968B: 0x678A, //CJK UNIFIED IDEOGRAPH - 0x968C: 0x678C, //CJK UNIFIED IDEOGRAPH - 0x968D: 0x678D, //CJK UNIFIED IDEOGRAPH - 0x968E: 0x678E, //CJK UNIFIED IDEOGRAPH - 0x968F: 0x678F, //CJK UNIFIED IDEOGRAPH - 0x9690: 0x6791, //CJK UNIFIED IDEOGRAPH - 0x9691: 0x6792, //CJK UNIFIED IDEOGRAPH - 0x9692: 0x6793, //CJK UNIFIED IDEOGRAPH - 0x9693: 0x6794, //CJK UNIFIED IDEOGRAPH - 0x9694: 0x6796, //CJK UNIFIED IDEOGRAPH - 0x9695: 0x6799, //CJK UNIFIED IDEOGRAPH - 0x9696: 0x679B, //CJK UNIFIED IDEOGRAPH - 0x9697: 0x679F, //CJK UNIFIED IDEOGRAPH - 0x9698: 0x67A0, //CJK UNIFIED IDEOGRAPH - 0x9699: 0x67A1, //CJK UNIFIED IDEOGRAPH - 0x969A: 0x67A4, //CJK UNIFIED IDEOGRAPH - 0x969B: 0x67A6, //CJK UNIFIED IDEOGRAPH - 0x969C: 0x67A9, //CJK UNIFIED IDEOGRAPH - 0x969D: 0x67AC, //CJK UNIFIED IDEOGRAPH - 0x969E: 0x67AE, //CJK UNIFIED IDEOGRAPH - 0x969F: 0x67B1, //CJK UNIFIED IDEOGRAPH - 0x96A0: 0x67B2, //CJK UNIFIED IDEOGRAPH - 0x96A1: 0x67B4, //CJK UNIFIED IDEOGRAPH - 0x96A2: 0x67B9, //CJK UNIFIED IDEOGRAPH - 0x96A3: 0x67BA, //CJK UNIFIED IDEOGRAPH - 0x96A4: 0x67BB, //CJK UNIFIED IDEOGRAPH - 0x96A5: 0x67BC, //CJK UNIFIED IDEOGRAPH - 0x96A6: 0x67BD, //CJK UNIFIED IDEOGRAPH - 0x96A7: 0x67BE, //CJK UNIFIED IDEOGRAPH - 0x96A8: 0x67BF, //CJK UNIFIED IDEOGRAPH - 0x96A9: 0x67C0, //CJK UNIFIED IDEOGRAPH - 0x96AA: 0x67C2, //CJK UNIFIED IDEOGRAPH - 0x96AB: 0x67C5, //CJK UNIFIED IDEOGRAPH - 0x96AC: 0x67C6, //CJK UNIFIED IDEOGRAPH - 0x96AD: 0x67C7, //CJK UNIFIED IDEOGRAPH - 0x96AE: 0x67C8, //CJK UNIFIED IDEOGRAPH - 0x96AF: 0x67C9, //CJK UNIFIED IDEOGRAPH - 0x96B0: 0x67CA, //CJK UNIFIED IDEOGRAPH - 0x96B1: 0x67CB, //CJK UNIFIED IDEOGRAPH - 0x96B2: 0x67CC, //CJK UNIFIED IDEOGRAPH - 0x96B3: 0x67CD, //CJK UNIFIED IDEOGRAPH - 0x96B4: 0x67CE, //CJK UNIFIED IDEOGRAPH - 0x96B5: 0x67D5, //CJK UNIFIED IDEOGRAPH - 0x96B6: 0x67D6, //CJK UNIFIED IDEOGRAPH - 0x96B7: 0x67D7, //CJK UNIFIED IDEOGRAPH - 0x96B8: 0x67DB, //CJK UNIFIED IDEOGRAPH - 0x96B9: 0x67DF, //CJK UNIFIED IDEOGRAPH - 0x96BA: 0x67E1, //CJK UNIFIED IDEOGRAPH - 0x96BB: 0x67E3, //CJK UNIFIED IDEOGRAPH - 0x96BC: 0x67E4, //CJK UNIFIED IDEOGRAPH - 0x96BD: 0x67E6, //CJK UNIFIED IDEOGRAPH - 0x96BE: 0x67E7, //CJK UNIFIED IDEOGRAPH - 0x96BF: 0x67E8, //CJK UNIFIED IDEOGRAPH - 0x96C0: 0x67EA, //CJK UNIFIED IDEOGRAPH - 0x96C1: 0x67EB, //CJK UNIFIED IDEOGRAPH - 0x96C2: 0x67ED, //CJK UNIFIED IDEOGRAPH - 0x96C3: 0x67EE, //CJK UNIFIED IDEOGRAPH - 0x96C4: 0x67F2, //CJK UNIFIED IDEOGRAPH - 0x96C5: 0x67F5, //CJK UNIFIED IDEOGRAPH - 0x96C6: 0x67F6, //CJK UNIFIED IDEOGRAPH - 0x96C7: 0x67F7, //CJK UNIFIED IDEOGRAPH - 0x96C8: 0x67F8, //CJK UNIFIED IDEOGRAPH - 0x96C9: 0x67F9, //CJK UNIFIED IDEOGRAPH - 0x96CA: 0x67FA, //CJK UNIFIED IDEOGRAPH - 0x96CB: 0x67FB, //CJK UNIFIED IDEOGRAPH - 0x96CC: 0x67FC, //CJK UNIFIED IDEOGRAPH - 0x96CD: 0x67FE, //CJK UNIFIED IDEOGRAPH - 0x96CE: 0x6801, //CJK UNIFIED IDEOGRAPH - 0x96CF: 0x6802, //CJK UNIFIED IDEOGRAPH - 0x96D0: 0x6803, //CJK UNIFIED IDEOGRAPH - 0x96D1: 0x6804, //CJK UNIFIED IDEOGRAPH - 0x96D2: 0x6806, //CJK UNIFIED IDEOGRAPH - 0x96D3: 0x680D, //CJK UNIFIED IDEOGRAPH - 0x96D4: 0x6810, //CJK UNIFIED IDEOGRAPH - 0x96D5: 0x6812, //CJK UNIFIED IDEOGRAPH - 0x96D6: 0x6814, //CJK UNIFIED IDEOGRAPH - 0x96D7: 0x6815, //CJK UNIFIED IDEOGRAPH - 0x96D8: 0x6818, //CJK UNIFIED IDEOGRAPH - 0x96D9: 0x6819, //CJK UNIFIED IDEOGRAPH - 0x96DA: 0x681A, //CJK UNIFIED IDEOGRAPH - 0x96DB: 0x681B, //CJK UNIFIED IDEOGRAPH - 0x96DC: 0x681C, //CJK UNIFIED IDEOGRAPH - 0x96DD: 0x681E, //CJK UNIFIED IDEOGRAPH - 0x96DE: 0x681F, //CJK UNIFIED IDEOGRAPH - 0x96DF: 0x6820, //CJK UNIFIED IDEOGRAPH - 0x96E0: 0x6822, //CJK UNIFIED IDEOGRAPH - 0x96E1: 0x6823, //CJK UNIFIED IDEOGRAPH - 0x96E2: 0x6824, //CJK UNIFIED IDEOGRAPH - 0x96E3: 0x6825, //CJK UNIFIED IDEOGRAPH - 0x96E4: 0x6826, //CJK UNIFIED IDEOGRAPH - 0x96E5: 0x6827, //CJK UNIFIED IDEOGRAPH - 0x96E6: 0x6828, //CJK UNIFIED IDEOGRAPH - 0x96E7: 0x682B, //CJK UNIFIED IDEOGRAPH - 0x96E8: 0x682C, //CJK UNIFIED IDEOGRAPH - 0x96E9: 0x682D, //CJK UNIFIED IDEOGRAPH - 0x96EA: 0x682E, //CJK UNIFIED IDEOGRAPH - 0x96EB: 0x682F, //CJK UNIFIED IDEOGRAPH - 0x96EC: 0x6830, //CJK UNIFIED IDEOGRAPH - 0x96ED: 0x6831, //CJK UNIFIED IDEOGRAPH - 0x96EE: 0x6834, //CJK UNIFIED IDEOGRAPH - 0x96EF: 0x6835, //CJK UNIFIED IDEOGRAPH - 0x96F0: 0x6836, //CJK UNIFIED IDEOGRAPH - 0x96F1: 0x683A, //CJK UNIFIED IDEOGRAPH - 0x96F2: 0x683B, //CJK UNIFIED IDEOGRAPH - 0x96F3: 0x683F, //CJK UNIFIED IDEOGRAPH - 0x96F4: 0x6847, //CJK UNIFIED IDEOGRAPH - 0x96F5: 0x684B, //CJK UNIFIED IDEOGRAPH - 0x96F6: 0x684D, //CJK UNIFIED IDEOGRAPH - 0x96F7: 0x684F, //CJK UNIFIED IDEOGRAPH - 0x96F8: 0x6852, //CJK UNIFIED IDEOGRAPH - 0x96F9: 0x6856, //CJK UNIFIED IDEOGRAPH - 0x96FA: 0x6857, //CJK UNIFIED IDEOGRAPH - 0x96FB: 0x6858, //CJK UNIFIED IDEOGRAPH - 0x96FC: 0x6859, //CJK UNIFIED IDEOGRAPH - 0x96FD: 0x685A, //CJK UNIFIED IDEOGRAPH - 0x96FE: 0x685B, //CJK UNIFIED IDEOGRAPH - 0x9740: 0x685C, //CJK UNIFIED IDEOGRAPH - 0x9741: 0x685D, //CJK UNIFIED IDEOGRAPH - 0x9742: 0x685E, //CJK UNIFIED IDEOGRAPH - 0x9743: 0x685F, //CJK UNIFIED IDEOGRAPH - 0x9744: 0x686A, //CJK UNIFIED IDEOGRAPH - 0x9745: 0x686C, //CJK UNIFIED IDEOGRAPH - 0x9746: 0x686D, //CJK UNIFIED IDEOGRAPH - 0x9747: 0x686E, //CJK UNIFIED IDEOGRAPH - 0x9748: 0x686F, //CJK UNIFIED IDEOGRAPH - 0x9749: 0x6870, //CJK UNIFIED IDEOGRAPH - 0x974A: 0x6871, //CJK UNIFIED IDEOGRAPH - 0x974B: 0x6872, //CJK UNIFIED IDEOGRAPH - 0x974C: 0x6873, //CJK UNIFIED IDEOGRAPH - 0x974D: 0x6875, //CJK UNIFIED IDEOGRAPH - 0x974E: 0x6878, //CJK UNIFIED IDEOGRAPH - 0x974F: 0x6879, //CJK UNIFIED IDEOGRAPH - 0x9750: 0x687A, //CJK UNIFIED IDEOGRAPH - 0x9751: 0x687B, //CJK UNIFIED IDEOGRAPH - 0x9752: 0x687C, //CJK UNIFIED IDEOGRAPH - 0x9753: 0x687D, //CJK UNIFIED IDEOGRAPH - 0x9754: 0x687E, //CJK UNIFIED IDEOGRAPH - 0x9755: 0x687F, //CJK UNIFIED IDEOGRAPH - 0x9756: 0x6880, //CJK UNIFIED IDEOGRAPH - 0x9757: 0x6882, //CJK UNIFIED IDEOGRAPH - 0x9758: 0x6884, //CJK UNIFIED IDEOGRAPH - 0x9759: 0x6887, //CJK UNIFIED IDEOGRAPH - 0x975A: 0x6888, //CJK UNIFIED IDEOGRAPH - 0x975B: 0x6889, //CJK UNIFIED IDEOGRAPH - 0x975C: 0x688A, //CJK UNIFIED IDEOGRAPH - 0x975D: 0x688B, //CJK UNIFIED IDEOGRAPH - 0x975E: 0x688C, //CJK UNIFIED IDEOGRAPH - 0x975F: 0x688D, //CJK UNIFIED IDEOGRAPH - 0x9760: 0x688E, //CJK UNIFIED IDEOGRAPH - 0x9761: 0x6890, //CJK UNIFIED IDEOGRAPH - 0x9762: 0x6891, //CJK UNIFIED IDEOGRAPH - 0x9763: 0x6892, //CJK UNIFIED IDEOGRAPH - 0x9764: 0x6894, //CJK UNIFIED IDEOGRAPH - 0x9765: 0x6895, //CJK UNIFIED IDEOGRAPH - 0x9766: 0x6896, //CJK UNIFIED IDEOGRAPH - 0x9767: 0x6898, //CJK UNIFIED IDEOGRAPH - 0x9768: 0x6899, //CJK UNIFIED IDEOGRAPH - 0x9769: 0x689A, //CJK UNIFIED IDEOGRAPH - 0x976A: 0x689B, //CJK UNIFIED IDEOGRAPH - 0x976B: 0x689C, //CJK UNIFIED IDEOGRAPH - 0x976C: 0x689D, //CJK UNIFIED IDEOGRAPH - 0x976D: 0x689E, //CJK UNIFIED IDEOGRAPH - 0x976E: 0x689F, //CJK UNIFIED IDEOGRAPH - 0x976F: 0x68A0, //CJK UNIFIED IDEOGRAPH - 0x9770: 0x68A1, //CJK UNIFIED IDEOGRAPH - 0x9771: 0x68A3, //CJK UNIFIED IDEOGRAPH - 0x9772: 0x68A4, //CJK UNIFIED IDEOGRAPH - 0x9773: 0x68A5, //CJK UNIFIED IDEOGRAPH - 0x9774: 0x68A9, //CJK UNIFIED IDEOGRAPH - 0x9775: 0x68AA, //CJK UNIFIED IDEOGRAPH - 0x9776: 0x68AB, //CJK UNIFIED IDEOGRAPH - 0x9777: 0x68AC, //CJK UNIFIED IDEOGRAPH - 0x9778: 0x68AE, //CJK UNIFIED IDEOGRAPH - 0x9779: 0x68B1, //CJK UNIFIED IDEOGRAPH - 0x977A: 0x68B2, //CJK UNIFIED IDEOGRAPH - 0x977B: 0x68B4, //CJK UNIFIED IDEOGRAPH - 0x977C: 0x68B6, //CJK UNIFIED IDEOGRAPH - 0x977D: 0x68B7, //CJK UNIFIED IDEOGRAPH - 0x977E: 0x68B8, //CJK UNIFIED IDEOGRAPH - 0x9780: 0x68B9, //CJK UNIFIED IDEOGRAPH - 0x9781: 0x68BA, //CJK UNIFIED IDEOGRAPH - 0x9782: 0x68BB, //CJK UNIFIED IDEOGRAPH - 0x9783: 0x68BC, //CJK UNIFIED IDEOGRAPH - 0x9784: 0x68BD, //CJK UNIFIED IDEOGRAPH - 0x9785: 0x68BE, //CJK UNIFIED IDEOGRAPH - 0x9786: 0x68BF, //CJK UNIFIED IDEOGRAPH - 0x9787: 0x68C1, //CJK UNIFIED IDEOGRAPH - 0x9788: 0x68C3, //CJK UNIFIED IDEOGRAPH - 0x9789: 0x68C4, //CJK UNIFIED IDEOGRAPH - 0x978A: 0x68C5, //CJK UNIFIED IDEOGRAPH - 0x978B: 0x68C6, //CJK UNIFIED IDEOGRAPH - 0x978C: 0x68C7, //CJK UNIFIED IDEOGRAPH - 0x978D: 0x68C8, //CJK UNIFIED IDEOGRAPH - 0x978E: 0x68CA, //CJK UNIFIED IDEOGRAPH - 0x978F: 0x68CC, //CJK UNIFIED IDEOGRAPH - 0x9790: 0x68CE, //CJK UNIFIED IDEOGRAPH - 0x9791: 0x68CF, //CJK UNIFIED IDEOGRAPH - 0x9792: 0x68D0, //CJK UNIFIED IDEOGRAPH - 0x9793: 0x68D1, //CJK UNIFIED IDEOGRAPH - 0x9794: 0x68D3, //CJK UNIFIED IDEOGRAPH - 0x9795: 0x68D4, //CJK UNIFIED IDEOGRAPH - 0x9796: 0x68D6, //CJK UNIFIED IDEOGRAPH - 0x9797: 0x68D7, //CJK UNIFIED IDEOGRAPH - 0x9798: 0x68D9, //CJK UNIFIED IDEOGRAPH - 0x9799: 0x68DB, //CJK UNIFIED IDEOGRAPH - 0x979A: 0x68DC, //CJK UNIFIED IDEOGRAPH - 0x979B: 0x68DD, //CJK UNIFIED IDEOGRAPH - 0x979C: 0x68DE, //CJK UNIFIED IDEOGRAPH - 0x979D: 0x68DF, //CJK UNIFIED IDEOGRAPH - 0x979E: 0x68E1, //CJK UNIFIED IDEOGRAPH - 0x979F: 0x68E2, //CJK UNIFIED IDEOGRAPH - 0x97A0: 0x68E4, //CJK UNIFIED IDEOGRAPH - 0x97A1: 0x68E5, //CJK UNIFIED IDEOGRAPH - 0x97A2: 0x68E6, //CJK UNIFIED IDEOGRAPH - 0x97A3: 0x68E7, //CJK UNIFIED IDEOGRAPH - 0x97A4: 0x68E8, //CJK UNIFIED IDEOGRAPH - 0x97A5: 0x68E9, //CJK UNIFIED IDEOGRAPH - 0x97A6: 0x68EA, //CJK UNIFIED IDEOGRAPH - 0x97A7: 0x68EB, //CJK UNIFIED IDEOGRAPH - 0x97A8: 0x68EC, //CJK UNIFIED IDEOGRAPH - 0x97A9: 0x68ED, //CJK UNIFIED IDEOGRAPH - 0x97AA: 0x68EF, //CJK UNIFIED IDEOGRAPH - 0x97AB: 0x68F2, //CJK UNIFIED IDEOGRAPH - 0x97AC: 0x68F3, //CJK UNIFIED IDEOGRAPH - 0x97AD: 0x68F4, //CJK UNIFIED IDEOGRAPH - 0x97AE: 0x68F6, //CJK UNIFIED IDEOGRAPH - 0x97AF: 0x68F7, //CJK UNIFIED IDEOGRAPH - 0x97B0: 0x68F8, //CJK UNIFIED IDEOGRAPH - 0x97B1: 0x68FB, //CJK UNIFIED IDEOGRAPH - 0x97B2: 0x68FD, //CJK UNIFIED IDEOGRAPH - 0x97B3: 0x68FE, //CJK UNIFIED IDEOGRAPH - 0x97B4: 0x68FF, //CJK UNIFIED IDEOGRAPH - 0x97B5: 0x6900, //CJK UNIFIED IDEOGRAPH - 0x97B6: 0x6902, //CJK UNIFIED IDEOGRAPH - 0x97B7: 0x6903, //CJK UNIFIED IDEOGRAPH - 0x97B8: 0x6904, //CJK UNIFIED IDEOGRAPH - 0x97B9: 0x6906, //CJK UNIFIED IDEOGRAPH - 0x97BA: 0x6907, //CJK UNIFIED IDEOGRAPH - 0x97BB: 0x6908, //CJK UNIFIED IDEOGRAPH - 0x97BC: 0x6909, //CJK UNIFIED IDEOGRAPH - 0x97BD: 0x690A, //CJK UNIFIED IDEOGRAPH - 0x97BE: 0x690C, //CJK UNIFIED IDEOGRAPH - 0x97BF: 0x690F, //CJK UNIFIED IDEOGRAPH - 0x97C0: 0x6911, //CJK UNIFIED IDEOGRAPH - 0x97C1: 0x6913, //CJK UNIFIED IDEOGRAPH - 0x97C2: 0x6914, //CJK UNIFIED IDEOGRAPH - 0x97C3: 0x6915, //CJK UNIFIED IDEOGRAPH - 0x97C4: 0x6916, //CJK UNIFIED IDEOGRAPH - 0x97C5: 0x6917, //CJK UNIFIED IDEOGRAPH - 0x97C6: 0x6918, //CJK UNIFIED IDEOGRAPH - 0x97C7: 0x6919, //CJK UNIFIED IDEOGRAPH - 0x97C8: 0x691A, //CJK UNIFIED IDEOGRAPH - 0x97C9: 0x691B, //CJK UNIFIED IDEOGRAPH - 0x97CA: 0x691C, //CJK UNIFIED IDEOGRAPH - 0x97CB: 0x691D, //CJK UNIFIED IDEOGRAPH - 0x97CC: 0x691E, //CJK UNIFIED IDEOGRAPH - 0x97CD: 0x6921, //CJK UNIFIED IDEOGRAPH - 0x97CE: 0x6922, //CJK UNIFIED IDEOGRAPH - 0x97CF: 0x6923, //CJK UNIFIED IDEOGRAPH - 0x97D0: 0x6925, //CJK UNIFIED IDEOGRAPH - 0x97D1: 0x6926, //CJK UNIFIED IDEOGRAPH - 0x97D2: 0x6927, //CJK UNIFIED IDEOGRAPH - 0x97D3: 0x6928, //CJK UNIFIED IDEOGRAPH - 0x97D4: 0x6929, //CJK UNIFIED IDEOGRAPH - 0x97D5: 0x692A, //CJK UNIFIED IDEOGRAPH - 0x97D6: 0x692B, //CJK UNIFIED IDEOGRAPH - 0x97D7: 0x692C, //CJK UNIFIED IDEOGRAPH - 0x97D8: 0x692E, //CJK UNIFIED IDEOGRAPH - 0x97D9: 0x692F, //CJK UNIFIED IDEOGRAPH - 0x97DA: 0x6931, //CJK UNIFIED IDEOGRAPH - 0x97DB: 0x6932, //CJK UNIFIED IDEOGRAPH - 0x97DC: 0x6933, //CJK UNIFIED IDEOGRAPH - 0x97DD: 0x6935, //CJK UNIFIED IDEOGRAPH - 0x97DE: 0x6936, //CJK UNIFIED IDEOGRAPH - 0x97DF: 0x6937, //CJK UNIFIED IDEOGRAPH - 0x97E0: 0x6938, //CJK UNIFIED IDEOGRAPH - 0x97E1: 0x693A, //CJK UNIFIED IDEOGRAPH - 0x97E2: 0x693B, //CJK UNIFIED IDEOGRAPH - 0x97E3: 0x693C, //CJK UNIFIED IDEOGRAPH - 0x97E4: 0x693E, //CJK UNIFIED IDEOGRAPH - 0x97E5: 0x6940, //CJK UNIFIED IDEOGRAPH - 0x97E6: 0x6941, //CJK UNIFIED IDEOGRAPH - 0x97E7: 0x6943, //CJK UNIFIED IDEOGRAPH - 0x97E8: 0x6944, //CJK UNIFIED IDEOGRAPH - 0x97E9: 0x6945, //CJK UNIFIED IDEOGRAPH - 0x97EA: 0x6946, //CJK UNIFIED IDEOGRAPH - 0x97EB: 0x6947, //CJK UNIFIED IDEOGRAPH - 0x97EC: 0x6948, //CJK UNIFIED IDEOGRAPH - 0x97ED: 0x6949, //CJK UNIFIED IDEOGRAPH - 0x97EE: 0x694A, //CJK UNIFIED IDEOGRAPH - 0x97EF: 0x694B, //CJK UNIFIED IDEOGRAPH - 0x97F0: 0x694C, //CJK UNIFIED IDEOGRAPH - 0x97F1: 0x694D, //CJK UNIFIED IDEOGRAPH - 0x97F2: 0x694E, //CJK UNIFIED IDEOGRAPH - 0x97F3: 0x694F, //CJK UNIFIED IDEOGRAPH - 0x97F4: 0x6950, //CJK UNIFIED IDEOGRAPH - 0x97F5: 0x6951, //CJK UNIFIED IDEOGRAPH - 0x97F6: 0x6952, //CJK UNIFIED IDEOGRAPH - 0x97F7: 0x6953, //CJK UNIFIED IDEOGRAPH - 0x97F8: 0x6955, //CJK UNIFIED IDEOGRAPH - 0x97F9: 0x6956, //CJK UNIFIED IDEOGRAPH - 0x97FA: 0x6958, //CJK UNIFIED IDEOGRAPH - 0x97FB: 0x6959, //CJK UNIFIED IDEOGRAPH - 0x97FC: 0x695B, //CJK UNIFIED IDEOGRAPH - 0x97FD: 0x695C, //CJK UNIFIED IDEOGRAPH - 0x97FE: 0x695F, //CJK UNIFIED IDEOGRAPH - 0x9840: 0x6961, //CJK UNIFIED IDEOGRAPH - 0x9841: 0x6962, //CJK UNIFIED IDEOGRAPH - 0x9842: 0x6964, //CJK UNIFIED IDEOGRAPH - 0x9843: 0x6965, //CJK UNIFIED IDEOGRAPH - 0x9844: 0x6967, //CJK UNIFIED IDEOGRAPH - 0x9845: 0x6968, //CJK UNIFIED IDEOGRAPH - 0x9846: 0x6969, //CJK UNIFIED IDEOGRAPH - 0x9847: 0x696A, //CJK UNIFIED IDEOGRAPH - 0x9848: 0x696C, //CJK UNIFIED IDEOGRAPH - 0x9849: 0x696D, //CJK UNIFIED IDEOGRAPH - 0x984A: 0x696F, //CJK UNIFIED IDEOGRAPH - 0x984B: 0x6970, //CJK UNIFIED IDEOGRAPH - 0x984C: 0x6972, //CJK UNIFIED IDEOGRAPH - 0x984D: 0x6973, //CJK UNIFIED IDEOGRAPH - 0x984E: 0x6974, //CJK UNIFIED IDEOGRAPH - 0x984F: 0x6975, //CJK UNIFIED IDEOGRAPH - 0x9850: 0x6976, //CJK UNIFIED IDEOGRAPH - 0x9851: 0x697A, //CJK UNIFIED IDEOGRAPH - 0x9852: 0x697B, //CJK UNIFIED IDEOGRAPH - 0x9853: 0x697D, //CJK UNIFIED IDEOGRAPH - 0x9854: 0x697E, //CJK UNIFIED IDEOGRAPH - 0x9855: 0x697F, //CJK UNIFIED IDEOGRAPH - 0x9856: 0x6981, //CJK UNIFIED IDEOGRAPH - 0x9857: 0x6983, //CJK UNIFIED IDEOGRAPH - 0x9858: 0x6985, //CJK UNIFIED IDEOGRAPH - 0x9859: 0x698A, //CJK UNIFIED IDEOGRAPH - 0x985A: 0x698B, //CJK UNIFIED IDEOGRAPH - 0x985B: 0x698C, //CJK UNIFIED IDEOGRAPH - 0x985C: 0x698E, //CJK UNIFIED IDEOGRAPH - 0x985D: 0x698F, //CJK UNIFIED IDEOGRAPH - 0x985E: 0x6990, //CJK UNIFIED IDEOGRAPH - 0x985F: 0x6991, //CJK UNIFIED IDEOGRAPH - 0x9860: 0x6992, //CJK UNIFIED IDEOGRAPH - 0x9861: 0x6993, //CJK UNIFIED IDEOGRAPH - 0x9862: 0x6996, //CJK UNIFIED IDEOGRAPH - 0x9863: 0x6997, //CJK UNIFIED IDEOGRAPH - 0x9864: 0x6999, //CJK UNIFIED IDEOGRAPH - 0x9865: 0x699A, //CJK UNIFIED IDEOGRAPH - 0x9866: 0x699D, //CJK UNIFIED IDEOGRAPH - 0x9867: 0x699E, //CJK UNIFIED IDEOGRAPH - 0x9868: 0x699F, //CJK UNIFIED IDEOGRAPH - 0x9869: 0x69A0, //CJK UNIFIED IDEOGRAPH - 0x986A: 0x69A1, //CJK UNIFIED IDEOGRAPH - 0x986B: 0x69A2, //CJK UNIFIED IDEOGRAPH - 0x986C: 0x69A3, //CJK UNIFIED IDEOGRAPH - 0x986D: 0x69A4, //CJK UNIFIED IDEOGRAPH - 0x986E: 0x69A5, //CJK UNIFIED IDEOGRAPH - 0x986F: 0x69A6, //CJK UNIFIED IDEOGRAPH - 0x9870: 0x69A9, //CJK UNIFIED IDEOGRAPH - 0x9871: 0x69AA, //CJK UNIFIED IDEOGRAPH - 0x9872: 0x69AC, //CJK UNIFIED IDEOGRAPH - 0x9873: 0x69AE, //CJK UNIFIED IDEOGRAPH - 0x9874: 0x69AF, //CJK UNIFIED IDEOGRAPH - 0x9875: 0x69B0, //CJK UNIFIED IDEOGRAPH - 0x9876: 0x69B2, //CJK UNIFIED IDEOGRAPH - 0x9877: 0x69B3, //CJK UNIFIED IDEOGRAPH - 0x9878: 0x69B5, //CJK UNIFIED IDEOGRAPH - 0x9879: 0x69B6, //CJK UNIFIED IDEOGRAPH - 0x987A: 0x69B8, //CJK UNIFIED IDEOGRAPH - 0x987B: 0x69B9, //CJK UNIFIED IDEOGRAPH - 0x987C: 0x69BA, //CJK UNIFIED IDEOGRAPH - 0x987D: 0x69BC, //CJK UNIFIED IDEOGRAPH - 0x987E: 0x69BD, //CJK UNIFIED IDEOGRAPH - 0x9880: 0x69BE, //CJK UNIFIED IDEOGRAPH - 0x9881: 0x69BF, //CJK UNIFIED IDEOGRAPH - 0x9882: 0x69C0, //CJK UNIFIED IDEOGRAPH - 0x9883: 0x69C2, //CJK UNIFIED IDEOGRAPH - 0x9884: 0x69C3, //CJK UNIFIED IDEOGRAPH - 0x9885: 0x69C4, //CJK UNIFIED IDEOGRAPH - 0x9886: 0x69C5, //CJK UNIFIED IDEOGRAPH - 0x9887: 0x69C6, //CJK UNIFIED IDEOGRAPH - 0x9888: 0x69C7, //CJK UNIFIED IDEOGRAPH - 0x9889: 0x69C8, //CJK UNIFIED IDEOGRAPH - 0x988A: 0x69C9, //CJK UNIFIED IDEOGRAPH - 0x988B: 0x69CB, //CJK UNIFIED IDEOGRAPH - 0x988C: 0x69CD, //CJK UNIFIED IDEOGRAPH - 0x988D: 0x69CF, //CJK UNIFIED IDEOGRAPH - 0x988E: 0x69D1, //CJK UNIFIED IDEOGRAPH - 0x988F: 0x69D2, //CJK UNIFIED IDEOGRAPH - 0x9890: 0x69D3, //CJK UNIFIED IDEOGRAPH - 0x9891: 0x69D5, //CJK UNIFIED IDEOGRAPH - 0x9892: 0x69D6, //CJK UNIFIED IDEOGRAPH - 0x9893: 0x69D7, //CJK UNIFIED IDEOGRAPH - 0x9894: 0x69D8, //CJK UNIFIED IDEOGRAPH - 0x9895: 0x69D9, //CJK UNIFIED IDEOGRAPH - 0x9896: 0x69DA, //CJK UNIFIED IDEOGRAPH - 0x9897: 0x69DC, //CJK UNIFIED IDEOGRAPH - 0x9898: 0x69DD, //CJK UNIFIED IDEOGRAPH - 0x9899: 0x69DE, //CJK UNIFIED IDEOGRAPH - 0x989A: 0x69E1, //CJK UNIFIED IDEOGRAPH - 0x989B: 0x69E2, //CJK UNIFIED IDEOGRAPH - 0x989C: 0x69E3, //CJK UNIFIED IDEOGRAPH - 0x989D: 0x69E4, //CJK UNIFIED IDEOGRAPH - 0x989E: 0x69E5, //CJK UNIFIED IDEOGRAPH - 0x989F: 0x69E6, //CJK UNIFIED IDEOGRAPH - 0x98A0: 0x69E7, //CJK UNIFIED IDEOGRAPH - 0x98A1: 0x69E8, //CJK UNIFIED IDEOGRAPH - 0x98A2: 0x69E9, //CJK UNIFIED IDEOGRAPH - 0x98A3: 0x69EA, //CJK UNIFIED IDEOGRAPH - 0x98A4: 0x69EB, //CJK UNIFIED IDEOGRAPH - 0x98A5: 0x69EC, //CJK UNIFIED IDEOGRAPH - 0x98A6: 0x69EE, //CJK UNIFIED IDEOGRAPH - 0x98A7: 0x69EF, //CJK UNIFIED IDEOGRAPH - 0x98A8: 0x69F0, //CJK UNIFIED IDEOGRAPH - 0x98A9: 0x69F1, //CJK UNIFIED IDEOGRAPH - 0x98AA: 0x69F3, //CJK UNIFIED IDEOGRAPH - 0x98AB: 0x69F4, //CJK UNIFIED IDEOGRAPH - 0x98AC: 0x69F5, //CJK UNIFIED IDEOGRAPH - 0x98AD: 0x69F6, //CJK UNIFIED IDEOGRAPH - 0x98AE: 0x69F7, //CJK UNIFIED IDEOGRAPH - 0x98AF: 0x69F8, //CJK UNIFIED IDEOGRAPH - 0x98B0: 0x69F9, //CJK UNIFIED IDEOGRAPH - 0x98B1: 0x69FA, //CJK UNIFIED IDEOGRAPH - 0x98B2: 0x69FB, //CJK UNIFIED IDEOGRAPH - 0x98B3: 0x69FC, //CJK UNIFIED IDEOGRAPH - 0x98B4: 0x69FE, //CJK UNIFIED IDEOGRAPH - 0x98B5: 0x6A00, //CJK UNIFIED IDEOGRAPH - 0x98B6: 0x6A01, //CJK UNIFIED IDEOGRAPH - 0x98B7: 0x6A02, //CJK UNIFIED IDEOGRAPH - 0x98B8: 0x6A03, //CJK UNIFIED IDEOGRAPH - 0x98B9: 0x6A04, //CJK UNIFIED IDEOGRAPH - 0x98BA: 0x6A05, //CJK UNIFIED IDEOGRAPH - 0x98BB: 0x6A06, //CJK UNIFIED IDEOGRAPH - 0x98BC: 0x6A07, //CJK UNIFIED IDEOGRAPH - 0x98BD: 0x6A08, //CJK UNIFIED IDEOGRAPH - 0x98BE: 0x6A09, //CJK UNIFIED IDEOGRAPH - 0x98BF: 0x6A0B, //CJK UNIFIED IDEOGRAPH - 0x98C0: 0x6A0C, //CJK UNIFIED IDEOGRAPH - 0x98C1: 0x6A0D, //CJK UNIFIED IDEOGRAPH - 0x98C2: 0x6A0E, //CJK UNIFIED IDEOGRAPH - 0x98C3: 0x6A0F, //CJK UNIFIED IDEOGRAPH - 0x98C4: 0x6A10, //CJK UNIFIED IDEOGRAPH - 0x98C5: 0x6A11, //CJK UNIFIED IDEOGRAPH - 0x98C6: 0x6A12, //CJK UNIFIED IDEOGRAPH - 0x98C7: 0x6A13, //CJK UNIFIED IDEOGRAPH - 0x98C8: 0x6A14, //CJK UNIFIED IDEOGRAPH - 0x98C9: 0x6A15, //CJK UNIFIED IDEOGRAPH - 0x98CA: 0x6A16, //CJK UNIFIED IDEOGRAPH - 0x98CB: 0x6A19, //CJK UNIFIED IDEOGRAPH - 0x98CC: 0x6A1A, //CJK UNIFIED IDEOGRAPH - 0x98CD: 0x6A1B, //CJK UNIFIED IDEOGRAPH - 0x98CE: 0x6A1C, //CJK UNIFIED IDEOGRAPH - 0x98CF: 0x6A1D, //CJK UNIFIED IDEOGRAPH - 0x98D0: 0x6A1E, //CJK UNIFIED IDEOGRAPH - 0x98D1: 0x6A20, //CJK UNIFIED IDEOGRAPH - 0x98D2: 0x6A22, //CJK UNIFIED IDEOGRAPH - 0x98D3: 0x6A23, //CJK UNIFIED IDEOGRAPH - 0x98D4: 0x6A24, //CJK UNIFIED IDEOGRAPH - 0x98D5: 0x6A25, //CJK UNIFIED IDEOGRAPH - 0x98D6: 0x6A26, //CJK UNIFIED IDEOGRAPH - 0x98D7: 0x6A27, //CJK UNIFIED IDEOGRAPH - 0x98D8: 0x6A29, //CJK UNIFIED IDEOGRAPH - 0x98D9: 0x6A2B, //CJK UNIFIED IDEOGRAPH - 0x98DA: 0x6A2C, //CJK UNIFIED IDEOGRAPH - 0x98DB: 0x6A2D, //CJK UNIFIED IDEOGRAPH - 0x98DC: 0x6A2E, //CJK UNIFIED IDEOGRAPH - 0x98DD: 0x6A30, //CJK UNIFIED IDEOGRAPH - 0x98DE: 0x6A32, //CJK UNIFIED IDEOGRAPH - 0x98DF: 0x6A33, //CJK UNIFIED IDEOGRAPH - 0x98E0: 0x6A34, //CJK UNIFIED IDEOGRAPH - 0x98E1: 0x6A36, //CJK UNIFIED IDEOGRAPH - 0x98E2: 0x6A37, //CJK UNIFIED IDEOGRAPH - 0x98E3: 0x6A38, //CJK UNIFIED IDEOGRAPH - 0x98E4: 0x6A39, //CJK UNIFIED IDEOGRAPH - 0x98E5: 0x6A3A, //CJK UNIFIED IDEOGRAPH - 0x98E6: 0x6A3B, //CJK UNIFIED IDEOGRAPH - 0x98E7: 0x6A3C, //CJK UNIFIED IDEOGRAPH - 0x98E8: 0x6A3F, //CJK UNIFIED IDEOGRAPH - 0x98E9: 0x6A40, //CJK UNIFIED IDEOGRAPH - 0x98EA: 0x6A41, //CJK UNIFIED IDEOGRAPH - 0x98EB: 0x6A42, //CJK UNIFIED IDEOGRAPH - 0x98EC: 0x6A43, //CJK UNIFIED IDEOGRAPH - 0x98ED: 0x6A45, //CJK UNIFIED IDEOGRAPH - 0x98EE: 0x6A46, //CJK UNIFIED IDEOGRAPH - 0x98EF: 0x6A48, //CJK UNIFIED IDEOGRAPH - 0x98F0: 0x6A49, //CJK UNIFIED IDEOGRAPH - 0x98F1: 0x6A4A, //CJK UNIFIED IDEOGRAPH - 0x98F2: 0x6A4B, //CJK UNIFIED IDEOGRAPH - 0x98F3: 0x6A4C, //CJK UNIFIED IDEOGRAPH - 0x98F4: 0x6A4D, //CJK UNIFIED IDEOGRAPH - 0x98F5: 0x6A4E, //CJK UNIFIED IDEOGRAPH - 0x98F6: 0x6A4F, //CJK UNIFIED IDEOGRAPH - 0x98F7: 0x6A51, //CJK UNIFIED IDEOGRAPH - 0x98F8: 0x6A52, //CJK UNIFIED IDEOGRAPH - 0x98F9: 0x6A53, //CJK UNIFIED IDEOGRAPH - 0x98FA: 0x6A54, //CJK UNIFIED IDEOGRAPH - 0x98FB: 0x6A55, //CJK UNIFIED IDEOGRAPH - 0x98FC: 0x6A56, //CJK UNIFIED IDEOGRAPH - 0x98FD: 0x6A57, //CJK UNIFIED IDEOGRAPH - 0x98FE: 0x6A5A, //CJK UNIFIED IDEOGRAPH - 0x9940: 0x6A5C, //CJK UNIFIED IDEOGRAPH - 0x9941: 0x6A5D, //CJK UNIFIED IDEOGRAPH - 0x9942: 0x6A5E, //CJK UNIFIED IDEOGRAPH - 0x9943: 0x6A5F, //CJK UNIFIED IDEOGRAPH - 0x9944: 0x6A60, //CJK UNIFIED IDEOGRAPH - 0x9945: 0x6A62, //CJK UNIFIED IDEOGRAPH - 0x9946: 0x6A63, //CJK UNIFIED IDEOGRAPH - 0x9947: 0x6A64, //CJK UNIFIED IDEOGRAPH - 0x9948: 0x6A66, //CJK UNIFIED IDEOGRAPH - 0x9949: 0x6A67, //CJK UNIFIED IDEOGRAPH - 0x994A: 0x6A68, //CJK UNIFIED IDEOGRAPH - 0x994B: 0x6A69, //CJK UNIFIED IDEOGRAPH - 0x994C: 0x6A6A, //CJK UNIFIED IDEOGRAPH - 0x994D: 0x6A6B, //CJK UNIFIED IDEOGRAPH - 0x994E: 0x6A6C, //CJK UNIFIED IDEOGRAPH - 0x994F: 0x6A6D, //CJK UNIFIED IDEOGRAPH - 0x9950: 0x6A6E, //CJK UNIFIED IDEOGRAPH - 0x9951: 0x6A6F, //CJK UNIFIED IDEOGRAPH - 0x9952: 0x6A70, //CJK UNIFIED IDEOGRAPH - 0x9953: 0x6A72, //CJK UNIFIED IDEOGRAPH - 0x9954: 0x6A73, //CJK UNIFIED IDEOGRAPH - 0x9955: 0x6A74, //CJK UNIFIED IDEOGRAPH - 0x9956: 0x6A75, //CJK UNIFIED IDEOGRAPH - 0x9957: 0x6A76, //CJK UNIFIED IDEOGRAPH - 0x9958: 0x6A77, //CJK UNIFIED IDEOGRAPH - 0x9959: 0x6A78, //CJK UNIFIED IDEOGRAPH - 0x995A: 0x6A7A, //CJK UNIFIED IDEOGRAPH - 0x995B: 0x6A7B, //CJK UNIFIED IDEOGRAPH - 0x995C: 0x6A7D, //CJK UNIFIED IDEOGRAPH - 0x995D: 0x6A7E, //CJK UNIFIED IDEOGRAPH - 0x995E: 0x6A7F, //CJK UNIFIED IDEOGRAPH - 0x995F: 0x6A81, //CJK UNIFIED IDEOGRAPH - 0x9960: 0x6A82, //CJK UNIFIED IDEOGRAPH - 0x9961: 0x6A83, //CJK UNIFIED IDEOGRAPH - 0x9962: 0x6A85, //CJK UNIFIED IDEOGRAPH - 0x9963: 0x6A86, //CJK UNIFIED IDEOGRAPH - 0x9964: 0x6A87, //CJK UNIFIED IDEOGRAPH - 0x9965: 0x6A88, //CJK UNIFIED IDEOGRAPH - 0x9966: 0x6A89, //CJK UNIFIED IDEOGRAPH - 0x9967: 0x6A8A, //CJK UNIFIED IDEOGRAPH - 0x9968: 0x6A8B, //CJK UNIFIED IDEOGRAPH - 0x9969: 0x6A8C, //CJK UNIFIED IDEOGRAPH - 0x996A: 0x6A8D, //CJK UNIFIED IDEOGRAPH - 0x996B: 0x6A8F, //CJK UNIFIED IDEOGRAPH - 0x996C: 0x6A92, //CJK UNIFIED IDEOGRAPH - 0x996D: 0x6A93, //CJK UNIFIED IDEOGRAPH - 0x996E: 0x6A94, //CJK UNIFIED IDEOGRAPH - 0x996F: 0x6A95, //CJK UNIFIED IDEOGRAPH - 0x9970: 0x6A96, //CJK UNIFIED IDEOGRAPH - 0x9971: 0x6A98, //CJK UNIFIED IDEOGRAPH - 0x9972: 0x6A99, //CJK UNIFIED IDEOGRAPH - 0x9973: 0x6A9A, //CJK UNIFIED IDEOGRAPH - 0x9974: 0x6A9B, //CJK UNIFIED IDEOGRAPH - 0x9975: 0x6A9C, //CJK UNIFIED IDEOGRAPH - 0x9976: 0x6A9D, //CJK UNIFIED IDEOGRAPH - 0x9977: 0x6A9E, //CJK UNIFIED IDEOGRAPH - 0x9978: 0x6A9F, //CJK UNIFIED IDEOGRAPH - 0x9979: 0x6AA1, //CJK UNIFIED IDEOGRAPH - 0x997A: 0x6AA2, //CJK UNIFIED IDEOGRAPH - 0x997B: 0x6AA3, //CJK UNIFIED IDEOGRAPH - 0x997C: 0x6AA4, //CJK UNIFIED IDEOGRAPH - 0x997D: 0x6AA5, //CJK UNIFIED IDEOGRAPH - 0x997E: 0x6AA6, //CJK UNIFIED IDEOGRAPH - 0x9980: 0x6AA7, //CJK UNIFIED IDEOGRAPH - 0x9981: 0x6AA8, //CJK UNIFIED IDEOGRAPH - 0x9982: 0x6AAA, //CJK UNIFIED IDEOGRAPH - 0x9983: 0x6AAD, //CJK UNIFIED IDEOGRAPH - 0x9984: 0x6AAE, //CJK UNIFIED IDEOGRAPH - 0x9985: 0x6AAF, //CJK UNIFIED IDEOGRAPH - 0x9986: 0x6AB0, //CJK UNIFIED IDEOGRAPH - 0x9987: 0x6AB1, //CJK UNIFIED IDEOGRAPH - 0x9988: 0x6AB2, //CJK UNIFIED IDEOGRAPH - 0x9989: 0x6AB3, //CJK UNIFIED IDEOGRAPH - 0x998A: 0x6AB4, //CJK UNIFIED IDEOGRAPH - 0x998B: 0x6AB5, //CJK UNIFIED IDEOGRAPH - 0x998C: 0x6AB6, //CJK UNIFIED IDEOGRAPH - 0x998D: 0x6AB7, //CJK UNIFIED IDEOGRAPH - 0x998E: 0x6AB8, //CJK UNIFIED IDEOGRAPH - 0x998F: 0x6AB9, //CJK UNIFIED IDEOGRAPH - 0x9990: 0x6ABA, //CJK UNIFIED IDEOGRAPH - 0x9991: 0x6ABB, //CJK UNIFIED IDEOGRAPH - 0x9992: 0x6ABC, //CJK UNIFIED IDEOGRAPH - 0x9993: 0x6ABD, //CJK UNIFIED IDEOGRAPH - 0x9994: 0x6ABE, //CJK UNIFIED IDEOGRAPH - 0x9995: 0x6ABF, //CJK UNIFIED IDEOGRAPH - 0x9996: 0x6AC0, //CJK UNIFIED IDEOGRAPH - 0x9997: 0x6AC1, //CJK UNIFIED IDEOGRAPH - 0x9998: 0x6AC2, //CJK UNIFIED IDEOGRAPH - 0x9999: 0x6AC3, //CJK UNIFIED IDEOGRAPH - 0x999A: 0x6AC4, //CJK UNIFIED IDEOGRAPH - 0x999B: 0x6AC5, //CJK UNIFIED IDEOGRAPH - 0x999C: 0x6AC6, //CJK UNIFIED IDEOGRAPH - 0x999D: 0x6AC7, //CJK UNIFIED IDEOGRAPH - 0x999E: 0x6AC8, //CJK UNIFIED IDEOGRAPH - 0x999F: 0x6AC9, //CJK UNIFIED IDEOGRAPH - 0x99A0: 0x6ACA, //CJK UNIFIED IDEOGRAPH - 0x99A1: 0x6ACB, //CJK UNIFIED IDEOGRAPH - 0x99A2: 0x6ACC, //CJK UNIFIED IDEOGRAPH - 0x99A3: 0x6ACD, //CJK UNIFIED IDEOGRAPH - 0x99A4: 0x6ACE, //CJK UNIFIED IDEOGRAPH - 0x99A5: 0x6ACF, //CJK UNIFIED IDEOGRAPH - 0x99A6: 0x6AD0, //CJK UNIFIED IDEOGRAPH - 0x99A7: 0x6AD1, //CJK UNIFIED IDEOGRAPH - 0x99A8: 0x6AD2, //CJK UNIFIED IDEOGRAPH - 0x99A9: 0x6AD3, //CJK UNIFIED IDEOGRAPH - 0x99AA: 0x6AD4, //CJK UNIFIED IDEOGRAPH - 0x99AB: 0x6AD5, //CJK UNIFIED IDEOGRAPH - 0x99AC: 0x6AD6, //CJK UNIFIED IDEOGRAPH - 0x99AD: 0x6AD7, //CJK UNIFIED IDEOGRAPH - 0x99AE: 0x6AD8, //CJK UNIFIED IDEOGRAPH - 0x99AF: 0x6AD9, //CJK UNIFIED IDEOGRAPH - 0x99B0: 0x6ADA, //CJK UNIFIED IDEOGRAPH - 0x99B1: 0x6ADB, //CJK UNIFIED IDEOGRAPH - 0x99B2: 0x6ADC, //CJK UNIFIED IDEOGRAPH - 0x99B3: 0x6ADD, //CJK UNIFIED IDEOGRAPH - 0x99B4: 0x6ADE, //CJK UNIFIED IDEOGRAPH - 0x99B5: 0x6ADF, //CJK UNIFIED IDEOGRAPH - 0x99B6: 0x6AE0, //CJK UNIFIED IDEOGRAPH - 0x99B7: 0x6AE1, //CJK UNIFIED IDEOGRAPH - 0x99B8: 0x6AE2, //CJK UNIFIED IDEOGRAPH - 0x99B9: 0x6AE3, //CJK UNIFIED IDEOGRAPH - 0x99BA: 0x6AE4, //CJK UNIFIED IDEOGRAPH - 0x99BB: 0x6AE5, //CJK UNIFIED IDEOGRAPH - 0x99BC: 0x6AE6, //CJK UNIFIED IDEOGRAPH - 0x99BD: 0x6AE7, //CJK UNIFIED IDEOGRAPH - 0x99BE: 0x6AE8, //CJK UNIFIED IDEOGRAPH - 0x99BF: 0x6AE9, //CJK UNIFIED IDEOGRAPH - 0x99C0: 0x6AEA, //CJK UNIFIED IDEOGRAPH - 0x99C1: 0x6AEB, //CJK UNIFIED IDEOGRAPH - 0x99C2: 0x6AEC, //CJK UNIFIED IDEOGRAPH - 0x99C3: 0x6AED, //CJK UNIFIED IDEOGRAPH - 0x99C4: 0x6AEE, //CJK UNIFIED IDEOGRAPH - 0x99C5: 0x6AEF, //CJK UNIFIED IDEOGRAPH - 0x99C6: 0x6AF0, //CJK UNIFIED IDEOGRAPH - 0x99C7: 0x6AF1, //CJK UNIFIED IDEOGRAPH - 0x99C8: 0x6AF2, //CJK UNIFIED IDEOGRAPH - 0x99C9: 0x6AF3, //CJK UNIFIED IDEOGRAPH - 0x99CA: 0x6AF4, //CJK UNIFIED IDEOGRAPH - 0x99CB: 0x6AF5, //CJK UNIFIED IDEOGRAPH - 0x99CC: 0x6AF6, //CJK UNIFIED IDEOGRAPH - 0x99CD: 0x6AF7, //CJK UNIFIED IDEOGRAPH - 0x99CE: 0x6AF8, //CJK UNIFIED IDEOGRAPH - 0x99CF: 0x6AF9, //CJK UNIFIED IDEOGRAPH - 0x99D0: 0x6AFA, //CJK UNIFIED IDEOGRAPH - 0x99D1: 0x6AFB, //CJK UNIFIED IDEOGRAPH - 0x99D2: 0x6AFC, //CJK UNIFIED IDEOGRAPH - 0x99D3: 0x6AFD, //CJK UNIFIED IDEOGRAPH - 0x99D4: 0x6AFE, //CJK UNIFIED IDEOGRAPH - 0x99D5: 0x6AFF, //CJK UNIFIED IDEOGRAPH - 0x99D6: 0x6B00, //CJK UNIFIED IDEOGRAPH - 0x99D7: 0x6B01, //CJK UNIFIED IDEOGRAPH - 0x99D8: 0x6B02, //CJK UNIFIED IDEOGRAPH - 0x99D9: 0x6B03, //CJK UNIFIED IDEOGRAPH - 0x99DA: 0x6B04, //CJK UNIFIED IDEOGRAPH - 0x99DB: 0x6B05, //CJK UNIFIED IDEOGRAPH - 0x99DC: 0x6B06, //CJK UNIFIED IDEOGRAPH - 0x99DD: 0x6B07, //CJK UNIFIED IDEOGRAPH - 0x99DE: 0x6B08, //CJK UNIFIED IDEOGRAPH - 0x99DF: 0x6B09, //CJK UNIFIED IDEOGRAPH - 0x99E0: 0x6B0A, //CJK UNIFIED IDEOGRAPH - 0x99E1: 0x6B0B, //CJK UNIFIED IDEOGRAPH - 0x99E2: 0x6B0C, //CJK UNIFIED IDEOGRAPH - 0x99E3: 0x6B0D, //CJK UNIFIED IDEOGRAPH - 0x99E4: 0x6B0E, //CJK UNIFIED IDEOGRAPH - 0x99E5: 0x6B0F, //CJK UNIFIED IDEOGRAPH - 0x99E6: 0x6B10, //CJK UNIFIED IDEOGRAPH - 0x99E7: 0x6B11, //CJK UNIFIED IDEOGRAPH - 0x99E8: 0x6B12, //CJK UNIFIED IDEOGRAPH - 0x99E9: 0x6B13, //CJK UNIFIED IDEOGRAPH - 0x99EA: 0x6B14, //CJK UNIFIED IDEOGRAPH - 0x99EB: 0x6B15, //CJK UNIFIED IDEOGRAPH - 0x99EC: 0x6B16, //CJK UNIFIED IDEOGRAPH - 0x99ED: 0x6B17, //CJK UNIFIED IDEOGRAPH - 0x99EE: 0x6B18, //CJK UNIFIED IDEOGRAPH - 0x99EF: 0x6B19, //CJK UNIFIED IDEOGRAPH - 0x99F0: 0x6B1A, //CJK UNIFIED IDEOGRAPH - 0x99F1: 0x6B1B, //CJK UNIFIED IDEOGRAPH - 0x99F2: 0x6B1C, //CJK UNIFIED IDEOGRAPH - 0x99F3: 0x6B1D, //CJK UNIFIED IDEOGRAPH - 0x99F4: 0x6B1E, //CJK UNIFIED IDEOGRAPH - 0x99F5: 0x6B1F, //CJK UNIFIED IDEOGRAPH - 0x99F6: 0x6B25, //CJK UNIFIED IDEOGRAPH - 0x99F7: 0x6B26, //CJK UNIFIED IDEOGRAPH - 0x99F8: 0x6B28, //CJK UNIFIED IDEOGRAPH - 0x99F9: 0x6B29, //CJK UNIFIED IDEOGRAPH - 0x99FA: 0x6B2A, //CJK UNIFIED IDEOGRAPH - 0x99FB: 0x6B2B, //CJK UNIFIED IDEOGRAPH - 0x99FC: 0x6B2C, //CJK UNIFIED IDEOGRAPH - 0x99FD: 0x6B2D, //CJK UNIFIED IDEOGRAPH - 0x99FE: 0x6B2E, //CJK UNIFIED IDEOGRAPH - 0x9A40: 0x6B2F, //CJK UNIFIED IDEOGRAPH - 0x9A41: 0x6B30, //CJK UNIFIED IDEOGRAPH - 0x9A42: 0x6B31, //CJK UNIFIED IDEOGRAPH - 0x9A43: 0x6B33, //CJK UNIFIED IDEOGRAPH - 0x9A44: 0x6B34, //CJK UNIFIED IDEOGRAPH - 0x9A45: 0x6B35, //CJK UNIFIED IDEOGRAPH - 0x9A46: 0x6B36, //CJK UNIFIED IDEOGRAPH - 0x9A47: 0x6B38, //CJK UNIFIED IDEOGRAPH - 0x9A48: 0x6B3B, //CJK UNIFIED IDEOGRAPH - 0x9A49: 0x6B3C, //CJK UNIFIED IDEOGRAPH - 0x9A4A: 0x6B3D, //CJK UNIFIED IDEOGRAPH - 0x9A4B: 0x6B3F, //CJK UNIFIED IDEOGRAPH - 0x9A4C: 0x6B40, //CJK UNIFIED IDEOGRAPH - 0x9A4D: 0x6B41, //CJK UNIFIED IDEOGRAPH - 0x9A4E: 0x6B42, //CJK UNIFIED IDEOGRAPH - 0x9A4F: 0x6B44, //CJK UNIFIED IDEOGRAPH - 0x9A50: 0x6B45, //CJK UNIFIED IDEOGRAPH - 0x9A51: 0x6B48, //CJK UNIFIED IDEOGRAPH - 0x9A52: 0x6B4A, //CJK UNIFIED IDEOGRAPH - 0x9A53: 0x6B4B, //CJK UNIFIED IDEOGRAPH - 0x9A54: 0x6B4D, //CJK UNIFIED IDEOGRAPH - 0x9A55: 0x6B4E, //CJK UNIFIED IDEOGRAPH - 0x9A56: 0x6B4F, //CJK UNIFIED IDEOGRAPH - 0x9A57: 0x6B50, //CJK UNIFIED IDEOGRAPH - 0x9A58: 0x6B51, //CJK UNIFIED IDEOGRAPH - 0x9A59: 0x6B52, //CJK UNIFIED IDEOGRAPH - 0x9A5A: 0x6B53, //CJK UNIFIED IDEOGRAPH - 0x9A5B: 0x6B54, //CJK UNIFIED IDEOGRAPH - 0x9A5C: 0x6B55, //CJK UNIFIED IDEOGRAPH - 0x9A5D: 0x6B56, //CJK UNIFIED IDEOGRAPH - 0x9A5E: 0x6B57, //CJK UNIFIED IDEOGRAPH - 0x9A5F: 0x6B58, //CJK UNIFIED IDEOGRAPH - 0x9A60: 0x6B5A, //CJK UNIFIED IDEOGRAPH - 0x9A61: 0x6B5B, //CJK UNIFIED IDEOGRAPH - 0x9A62: 0x6B5C, //CJK UNIFIED IDEOGRAPH - 0x9A63: 0x6B5D, //CJK UNIFIED IDEOGRAPH - 0x9A64: 0x6B5E, //CJK UNIFIED IDEOGRAPH - 0x9A65: 0x6B5F, //CJK UNIFIED IDEOGRAPH - 0x9A66: 0x6B60, //CJK UNIFIED IDEOGRAPH - 0x9A67: 0x6B61, //CJK UNIFIED IDEOGRAPH - 0x9A68: 0x6B68, //CJK UNIFIED IDEOGRAPH - 0x9A69: 0x6B69, //CJK UNIFIED IDEOGRAPH - 0x9A6A: 0x6B6B, //CJK UNIFIED IDEOGRAPH - 0x9A6B: 0x6B6C, //CJK UNIFIED IDEOGRAPH - 0x9A6C: 0x6B6D, //CJK UNIFIED IDEOGRAPH - 0x9A6D: 0x6B6E, //CJK UNIFIED IDEOGRAPH - 0x9A6E: 0x6B6F, //CJK UNIFIED IDEOGRAPH - 0x9A6F: 0x6B70, //CJK UNIFIED IDEOGRAPH - 0x9A70: 0x6B71, //CJK UNIFIED IDEOGRAPH - 0x9A71: 0x6B72, //CJK UNIFIED IDEOGRAPH - 0x9A72: 0x6B73, //CJK UNIFIED IDEOGRAPH - 0x9A73: 0x6B74, //CJK UNIFIED IDEOGRAPH - 0x9A74: 0x6B75, //CJK UNIFIED IDEOGRAPH - 0x9A75: 0x6B76, //CJK UNIFIED IDEOGRAPH - 0x9A76: 0x6B77, //CJK UNIFIED IDEOGRAPH - 0x9A77: 0x6B78, //CJK UNIFIED IDEOGRAPH - 0x9A78: 0x6B7A, //CJK UNIFIED IDEOGRAPH - 0x9A79: 0x6B7D, //CJK UNIFIED IDEOGRAPH - 0x9A7A: 0x6B7E, //CJK UNIFIED IDEOGRAPH - 0x9A7B: 0x6B7F, //CJK UNIFIED IDEOGRAPH - 0x9A7C: 0x6B80, //CJK UNIFIED IDEOGRAPH - 0x9A7D: 0x6B85, //CJK UNIFIED IDEOGRAPH - 0x9A7E: 0x6B88, //CJK UNIFIED IDEOGRAPH - 0x9A80: 0x6B8C, //CJK UNIFIED IDEOGRAPH - 0x9A81: 0x6B8E, //CJK UNIFIED IDEOGRAPH - 0x9A82: 0x6B8F, //CJK UNIFIED IDEOGRAPH - 0x9A83: 0x6B90, //CJK UNIFIED IDEOGRAPH - 0x9A84: 0x6B91, //CJK UNIFIED IDEOGRAPH - 0x9A85: 0x6B94, //CJK UNIFIED IDEOGRAPH - 0x9A86: 0x6B95, //CJK UNIFIED IDEOGRAPH - 0x9A87: 0x6B97, //CJK UNIFIED IDEOGRAPH - 0x9A88: 0x6B98, //CJK UNIFIED IDEOGRAPH - 0x9A89: 0x6B99, //CJK UNIFIED IDEOGRAPH - 0x9A8A: 0x6B9C, //CJK UNIFIED IDEOGRAPH - 0x9A8B: 0x6B9D, //CJK UNIFIED IDEOGRAPH - 0x9A8C: 0x6B9E, //CJK UNIFIED IDEOGRAPH - 0x9A8D: 0x6B9F, //CJK UNIFIED IDEOGRAPH - 0x9A8E: 0x6BA0, //CJK UNIFIED IDEOGRAPH - 0x9A8F: 0x6BA2, //CJK UNIFIED IDEOGRAPH - 0x9A90: 0x6BA3, //CJK UNIFIED IDEOGRAPH - 0x9A91: 0x6BA4, //CJK UNIFIED IDEOGRAPH - 0x9A92: 0x6BA5, //CJK UNIFIED IDEOGRAPH - 0x9A93: 0x6BA6, //CJK UNIFIED IDEOGRAPH - 0x9A94: 0x6BA7, //CJK UNIFIED IDEOGRAPH - 0x9A95: 0x6BA8, //CJK UNIFIED IDEOGRAPH - 0x9A96: 0x6BA9, //CJK UNIFIED IDEOGRAPH - 0x9A97: 0x6BAB, //CJK UNIFIED IDEOGRAPH - 0x9A98: 0x6BAC, //CJK UNIFIED IDEOGRAPH - 0x9A99: 0x6BAD, //CJK UNIFIED IDEOGRAPH - 0x9A9A: 0x6BAE, //CJK UNIFIED IDEOGRAPH - 0x9A9B: 0x6BAF, //CJK UNIFIED IDEOGRAPH - 0x9A9C: 0x6BB0, //CJK UNIFIED IDEOGRAPH - 0x9A9D: 0x6BB1, //CJK UNIFIED IDEOGRAPH - 0x9A9E: 0x6BB2, //CJK UNIFIED IDEOGRAPH - 0x9A9F: 0x6BB6, //CJK UNIFIED IDEOGRAPH - 0x9AA0: 0x6BB8, //CJK UNIFIED IDEOGRAPH - 0x9AA1: 0x6BB9, //CJK UNIFIED IDEOGRAPH - 0x9AA2: 0x6BBA, //CJK UNIFIED IDEOGRAPH - 0x9AA3: 0x6BBB, //CJK UNIFIED IDEOGRAPH - 0x9AA4: 0x6BBC, //CJK UNIFIED IDEOGRAPH - 0x9AA5: 0x6BBD, //CJK UNIFIED IDEOGRAPH - 0x9AA6: 0x6BBE, //CJK UNIFIED IDEOGRAPH - 0x9AA7: 0x6BC0, //CJK UNIFIED IDEOGRAPH - 0x9AA8: 0x6BC3, //CJK UNIFIED IDEOGRAPH - 0x9AA9: 0x6BC4, //CJK UNIFIED IDEOGRAPH - 0x9AAA: 0x6BC6, //CJK UNIFIED IDEOGRAPH - 0x9AAB: 0x6BC7, //CJK UNIFIED IDEOGRAPH - 0x9AAC: 0x6BC8, //CJK UNIFIED IDEOGRAPH - 0x9AAD: 0x6BC9, //CJK UNIFIED IDEOGRAPH - 0x9AAE: 0x6BCA, //CJK UNIFIED IDEOGRAPH - 0x9AAF: 0x6BCC, //CJK UNIFIED IDEOGRAPH - 0x9AB0: 0x6BCE, //CJK UNIFIED IDEOGRAPH - 0x9AB1: 0x6BD0, //CJK UNIFIED IDEOGRAPH - 0x9AB2: 0x6BD1, //CJK UNIFIED IDEOGRAPH - 0x9AB3: 0x6BD8, //CJK UNIFIED IDEOGRAPH - 0x9AB4: 0x6BDA, //CJK UNIFIED IDEOGRAPH - 0x9AB5: 0x6BDC, //CJK UNIFIED IDEOGRAPH - 0x9AB6: 0x6BDD, //CJK UNIFIED IDEOGRAPH - 0x9AB7: 0x6BDE, //CJK UNIFIED IDEOGRAPH - 0x9AB8: 0x6BDF, //CJK UNIFIED IDEOGRAPH - 0x9AB9: 0x6BE0, //CJK UNIFIED IDEOGRAPH - 0x9ABA: 0x6BE2, //CJK UNIFIED IDEOGRAPH - 0x9ABB: 0x6BE3, //CJK UNIFIED IDEOGRAPH - 0x9ABC: 0x6BE4, //CJK UNIFIED IDEOGRAPH - 0x9ABD: 0x6BE5, //CJK UNIFIED IDEOGRAPH - 0x9ABE: 0x6BE6, //CJK UNIFIED IDEOGRAPH - 0x9ABF: 0x6BE7, //CJK UNIFIED IDEOGRAPH - 0x9AC0: 0x6BE8, //CJK UNIFIED IDEOGRAPH - 0x9AC1: 0x6BE9, //CJK UNIFIED IDEOGRAPH - 0x9AC2: 0x6BEC, //CJK UNIFIED IDEOGRAPH - 0x9AC3: 0x6BED, //CJK UNIFIED IDEOGRAPH - 0x9AC4: 0x6BEE, //CJK UNIFIED IDEOGRAPH - 0x9AC5: 0x6BF0, //CJK UNIFIED IDEOGRAPH - 0x9AC6: 0x6BF1, //CJK UNIFIED IDEOGRAPH - 0x9AC7: 0x6BF2, //CJK UNIFIED IDEOGRAPH - 0x9AC8: 0x6BF4, //CJK UNIFIED IDEOGRAPH - 0x9AC9: 0x6BF6, //CJK UNIFIED IDEOGRAPH - 0x9ACA: 0x6BF7, //CJK UNIFIED IDEOGRAPH - 0x9ACB: 0x6BF8, //CJK UNIFIED IDEOGRAPH - 0x9ACC: 0x6BFA, //CJK UNIFIED IDEOGRAPH - 0x9ACD: 0x6BFB, //CJK UNIFIED IDEOGRAPH - 0x9ACE: 0x6BFC, //CJK UNIFIED IDEOGRAPH - 0x9ACF: 0x6BFE, //CJK UNIFIED IDEOGRAPH - 0x9AD0: 0x6BFF, //CJK UNIFIED IDEOGRAPH - 0x9AD1: 0x6C00, //CJK UNIFIED IDEOGRAPH - 0x9AD2: 0x6C01, //CJK UNIFIED IDEOGRAPH - 0x9AD3: 0x6C02, //CJK UNIFIED IDEOGRAPH - 0x9AD4: 0x6C03, //CJK UNIFIED IDEOGRAPH - 0x9AD5: 0x6C04, //CJK UNIFIED IDEOGRAPH - 0x9AD6: 0x6C08, //CJK UNIFIED IDEOGRAPH - 0x9AD7: 0x6C09, //CJK UNIFIED IDEOGRAPH - 0x9AD8: 0x6C0A, //CJK UNIFIED IDEOGRAPH - 0x9AD9: 0x6C0B, //CJK UNIFIED IDEOGRAPH - 0x9ADA: 0x6C0C, //CJK UNIFIED IDEOGRAPH - 0x9ADB: 0x6C0E, //CJK UNIFIED IDEOGRAPH - 0x9ADC: 0x6C12, //CJK UNIFIED IDEOGRAPH - 0x9ADD: 0x6C17, //CJK UNIFIED IDEOGRAPH - 0x9ADE: 0x6C1C, //CJK UNIFIED IDEOGRAPH - 0x9ADF: 0x6C1D, //CJK UNIFIED IDEOGRAPH - 0x9AE0: 0x6C1E, //CJK UNIFIED IDEOGRAPH - 0x9AE1: 0x6C20, //CJK UNIFIED IDEOGRAPH - 0x9AE2: 0x6C23, //CJK UNIFIED IDEOGRAPH - 0x9AE3: 0x6C25, //CJK UNIFIED IDEOGRAPH - 0x9AE4: 0x6C2B, //CJK UNIFIED IDEOGRAPH - 0x9AE5: 0x6C2C, //CJK UNIFIED IDEOGRAPH - 0x9AE6: 0x6C2D, //CJK UNIFIED IDEOGRAPH - 0x9AE7: 0x6C31, //CJK UNIFIED IDEOGRAPH - 0x9AE8: 0x6C33, //CJK UNIFIED IDEOGRAPH - 0x9AE9: 0x6C36, //CJK UNIFIED IDEOGRAPH - 0x9AEA: 0x6C37, //CJK UNIFIED IDEOGRAPH - 0x9AEB: 0x6C39, //CJK UNIFIED IDEOGRAPH - 0x9AEC: 0x6C3A, //CJK UNIFIED IDEOGRAPH - 0x9AED: 0x6C3B, //CJK UNIFIED IDEOGRAPH - 0x9AEE: 0x6C3C, //CJK UNIFIED IDEOGRAPH - 0x9AEF: 0x6C3E, //CJK UNIFIED IDEOGRAPH - 0x9AF0: 0x6C3F, //CJK UNIFIED IDEOGRAPH - 0x9AF1: 0x6C43, //CJK UNIFIED IDEOGRAPH - 0x9AF2: 0x6C44, //CJK UNIFIED IDEOGRAPH - 0x9AF3: 0x6C45, //CJK UNIFIED IDEOGRAPH - 0x9AF4: 0x6C48, //CJK UNIFIED IDEOGRAPH - 0x9AF5: 0x6C4B, //CJK UNIFIED IDEOGRAPH - 0x9AF6: 0x6C4C, //CJK UNIFIED IDEOGRAPH - 0x9AF7: 0x6C4D, //CJK UNIFIED IDEOGRAPH - 0x9AF8: 0x6C4E, //CJK UNIFIED IDEOGRAPH - 0x9AF9: 0x6C4F, //CJK UNIFIED IDEOGRAPH - 0x9AFA: 0x6C51, //CJK UNIFIED IDEOGRAPH - 0x9AFB: 0x6C52, //CJK UNIFIED IDEOGRAPH - 0x9AFC: 0x6C53, //CJK UNIFIED IDEOGRAPH - 0x9AFD: 0x6C56, //CJK UNIFIED IDEOGRAPH - 0x9AFE: 0x6C58, //CJK UNIFIED IDEOGRAPH - 0x9B40: 0x6C59, //CJK UNIFIED IDEOGRAPH - 0x9B41: 0x6C5A, //CJK UNIFIED IDEOGRAPH - 0x9B42: 0x6C62, //CJK UNIFIED IDEOGRAPH - 0x9B43: 0x6C63, //CJK UNIFIED IDEOGRAPH - 0x9B44: 0x6C65, //CJK UNIFIED IDEOGRAPH - 0x9B45: 0x6C66, //CJK UNIFIED IDEOGRAPH - 0x9B46: 0x6C67, //CJK UNIFIED IDEOGRAPH - 0x9B47: 0x6C6B, //CJK UNIFIED IDEOGRAPH - 0x9B48: 0x6C6C, //CJK UNIFIED IDEOGRAPH - 0x9B49: 0x6C6D, //CJK UNIFIED IDEOGRAPH - 0x9B4A: 0x6C6E, //CJK UNIFIED IDEOGRAPH - 0x9B4B: 0x6C6F, //CJK UNIFIED IDEOGRAPH - 0x9B4C: 0x6C71, //CJK UNIFIED IDEOGRAPH - 0x9B4D: 0x6C73, //CJK UNIFIED IDEOGRAPH - 0x9B4E: 0x6C75, //CJK UNIFIED IDEOGRAPH - 0x9B4F: 0x6C77, //CJK UNIFIED IDEOGRAPH - 0x9B50: 0x6C78, //CJK UNIFIED IDEOGRAPH - 0x9B51: 0x6C7A, //CJK UNIFIED IDEOGRAPH - 0x9B52: 0x6C7B, //CJK UNIFIED IDEOGRAPH - 0x9B53: 0x6C7C, //CJK UNIFIED IDEOGRAPH - 0x9B54: 0x6C7F, //CJK UNIFIED IDEOGRAPH - 0x9B55: 0x6C80, //CJK UNIFIED IDEOGRAPH - 0x9B56: 0x6C84, //CJK UNIFIED IDEOGRAPH - 0x9B57: 0x6C87, //CJK UNIFIED IDEOGRAPH - 0x9B58: 0x6C8A, //CJK UNIFIED IDEOGRAPH - 0x9B59: 0x6C8B, //CJK UNIFIED IDEOGRAPH - 0x9B5A: 0x6C8D, //CJK UNIFIED IDEOGRAPH - 0x9B5B: 0x6C8E, //CJK UNIFIED IDEOGRAPH - 0x9B5C: 0x6C91, //CJK UNIFIED IDEOGRAPH - 0x9B5D: 0x6C92, //CJK UNIFIED IDEOGRAPH - 0x9B5E: 0x6C95, //CJK UNIFIED IDEOGRAPH - 0x9B5F: 0x6C96, //CJK UNIFIED IDEOGRAPH - 0x9B60: 0x6C97, //CJK UNIFIED IDEOGRAPH - 0x9B61: 0x6C98, //CJK UNIFIED IDEOGRAPH - 0x9B62: 0x6C9A, //CJK UNIFIED IDEOGRAPH - 0x9B63: 0x6C9C, //CJK UNIFIED IDEOGRAPH - 0x9B64: 0x6C9D, //CJK UNIFIED IDEOGRAPH - 0x9B65: 0x6C9E, //CJK UNIFIED IDEOGRAPH - 0x9B66: 0x6CA0, //CJK UNIFIED IDEOGRAPH - 0x9B67: 0x6CA2, //CJK UNIFIED IDEOGRAPH - 0x9B68: 0x6CA8, //CJK UNIFIED IDEOGRAPH - 0x9B69: 0x6CAC, //CJK UNIFIED IDEOGRAPH - 0x9B6A: 0x6CAF, //CJK UNIFIED IDEOGRAPH - 0x9B6B: 0x6CB0, //CJK UNIFIED IDEOGRAPH - 0x9B6C: 0x6CB4, //CJK UNIFIED IDEOGRAPH - 0x9B6D: 0x6CB5, //CJK UNIFIED IDEOGRAPH - 0x9B6E: 0x6CB6, //CJK UNIFIED IDEOGRAPH - 0x9B6F: 0x6CB7, //CJK UNIFIED IDEOGRAPH - 0x9B70: 0x6CBA, //CJK UNIFIED IDEOGRAPH - 0x9B71: 0x6CC0, //CJK UNIFIED IDEOGRAPH - 0x9B72: 0x6CC1, //CJK UNIFIED IDEOGRAPH - 0x9B73: 0x6CC2, //CJK UNIFIED IDEOGRAPH - 0x9B74: 0x6CC3, //CJK UNIFIED IDEOGRAPH - 0x9B75: 0x6CC6, //CJK UNIFIED IDEOGRAPH - 0x9B76: 0x6CC7, //CJK UNIFIED IDEOGRAPH - 0x9B77: 0x6CC8, //CJK UNIFIED IDEOGRAPH - 0x9B78: 0x6CCB, //CJK UNIFIED IDEOGRAPH - 0x9B79: 0x6CCD, //CJK UNIFIED IDEOGRAPH - 0x9B7A: 0x6CCE, //CJK UNIFIED IDEOGRAPH - 0x9B7B: 0x6CCF, //CJK UNIFIED IDEOGRAPH - 0x9B7C: 0x6CD1, //CJK UNIFIED IDEOGRAPH - 0x9B7D: 0x6CD2, //CJK UNIFIED IDEOGRAPH - 0x9B7E: 0x6CD8, //CJK UNIFIED IDEOGRAPH - 0x9B80: 0x6CD9, //CJK UNIFIED IDEOGRAPH - 0x9B81: 0x6CDA, //CJK UNIFIED IDEOGRAPH - 0x9B82: 0x6CDC, //CJK UNIFIED IDEOGRAPH - 0x9B83: 0x6CDD, //CJK UNIFIED IDEOGRAPH - 0x9B84: 0x6CDF, //CJK UNIFIED IDEOGRAPH - 0x9B85: 0x6CE4, //CJK UNIFIED IDEOGRAPH - 0x9B86: 0x6CE6, //CJK UNIFIED IDEOGRAPH - 0x9B87: 0x6CE7, //CJK UNIFIED IDEOGRAPH - 0x9B88: 0x6CE9, //CJK UNIFIED IDEOGRAPH - 0x9B89: 0x6CEC, //CJK UNIFIED IDEOGRAPH - 0x9B8A: 0x6CED, //CJK UNIFIED IDEOGRAPH - 0x9B8B: 0x6CF2, //CJK UNIFIED IDEOGRAPH - 0x9B8C: 0x6CF4, //CJK UNIFIED IDEOGRAPH - 0x9B8D: 0x6CF9, //CJK UNIFIED IDEOGRAPH - 0x9B8E: 0x6CFF, //CJK UNIFIED IDEOGRAPH - 0x9B8F: 0x6D00, //CJK UNIFIED IDEOGRAPH - 0x9B90: 0x6D02, //CJK UNIFIED IDEOGRAPH - 0x9B91: 0x6D03, //CJK UNIFIED IDEOGRAPH - 0x9B92: 0x6D05, //CJK UNIFIED IDEOGRAPH - 0x9B93: 0x6D06, //CJK UNIFIED IDEOGRAPH - 0x9B94: 0x6D08, //CJK UNIFIED IDEOGRAPH - 0x9B95: 0x6D09, //CJK UNIFIED IDEOGRAPH - 0x9B96: 0x6D0A, //CJK UNIFIED IDEOGRAPH - 0x9B97: 0x6D0D, //CJK UNIFIED IDEOGRAPH - 0x9B98: 0x6D0F, //CJK UNIFIED IDEOGRAPH - 0x9B99: 0x6D10, //CJK UNIFIED IDEOGRAPH - 0x9B9A: 0x6D11, //CJK UNIFIED IDEOGRAPH - 0x9B9B: 0x6D13, //CJK UNIFIED IDEOGRAPH - 0x9B9C: 0x6D14, //CJK UNIFIED IDEOGRAPH - 0x9B9D: 0x6D15, //CJK UNIFIED IDEOGRAPH - 0x9B9E: 0x6D16, //CJK UNIFIED IDEOGRAPH - 0x9B9F: 0x6D18, //CJK UNIFIED IDEOGRAPH - 0x9BA0: 0x6D1C, //CJK UNIFIED IDEOGRAPH - 0x9BA1: 0x6D1D, //CJK UNIFIED IDEOGRAPH - 0x9BA2: 0x6D1F, //CJK UNIFIED IDEOGRAPH - 0x9BA3: 0x6D20, //CJK UNIFIED IDEOGRAPH - 0x9BA4: 0x6D21, //CJK UNIFIED IDEOGRAPH - 0x9BA5: 0x6D22, //CJK UNIFIED IDEOGRAPH - 0x9BA6: 0x6D23, //CJK UNIFIED IDEOGRAPH - 0x9BA7: 0x6D24, //CJK UNIFIED IDEOGRAPH - 0x9BA8: 0x6D26, //CJK UNIFIED IDEOGRAPH - 0x9BA9: 0x6D28, //CJK UNIFIED IDEOGRAPH - 0x9BAA: 0x6D29, //CJK UNIFIED IDEOGRAPH - 0x9BAB: 0x6D2C, //CJK UNIFIED IDEOGRAPH - 0x9BAC: 0x6D2D, //CJK UNIFIED IDEOGRAPH - 0x9BAD: 0x6D2F, //CJK UNIFIED IDEOGRAPH - 0x9BAE: 0x6D30, //CJK UNIFIED IDEOGRAPH - 0x9BAF: 0x6D34, //CJK UNIFIED IDEOGRAPH - 0x9BB0: 0x6D36, //CJK UNIFIED IDEOGRAPH - 0x9BB1: 0x6D37, //CJK UNIFIED IDEOGRAPH - 0x9BB2: 0x6D38, //CJK UNIFIED IDEOGRAPH - 0x9BB3: 0x6D3A, //CJK UNIFIED IDEOGRAPH - 0x9BB4: 0x6D3F, //CJK UNIFIED IDEOGRAPH - 0x9BB5: 0x6D40, //CJK UNIFIED IDEOGRAPH - 0x9BB6: 0x6D42, //CJK UNIFIED IDEOGRAPH - 0x9BB7: 0x6D44, //CJK UNIFIED IDEOGRAPH - 0x9BB8: 0x6D49, //CJK UNIFIED IDEOGRAPH - 0x9BB9: 0x6D4C, //CJK UNIFIED IDEOGRAPH - 0x9BBA: 0x6D50, //CJK UNIFIED IDEOGRAPH - 0x9BBB: 0x6D55, //CJK UNIFIED IDEOGRAPH - 0x9BBC: 0x6D56, //CJK UNIFIED IDEOGRAPH - 0x9BBD: 0x6D57, //CJK UNIFIED IDEOGRAPH - 0x9BBE: 0x6D58, //CJK UNIFIED IDEOGRAPH - 0x9BBF: 0x6D5B, //CJK UNIFIED IDEOGRAPH - 0x9BC0: 0x6D5D, //CJK UNIFIED IDEOGRAPH - 0x9BC1: 0x6D5F, //CJK UNIFIED IDEOGRAPH - 0x9BC2: 0x6D61, //CJK UNIFIED IDEOGRAPH - 0x9BC3: 0x6D62, //CJK UNIFIED IDEOGRAPH - 0x9BC4: 0x6D64, //CJK UNIFIED IDEOGRAPH - 0x9BC5: 0x6D65, //CJK UNIFIED IDEOGRAPH - 0x9BC6: 0x6D67, //CJK UNIFIED IDEOGRAPH - 0x9BC7: 0x6D68, //CJK UNIFIED IDEOGRAPH - 0x9BC8: 0x6D6B, //CJK UNIFIED IDEOGRAPH - 0x9BC9: 0x6D6C, //CJK UNIFIED IDEOGRAPH - 0x9BCA: 0x6D6D, //CJK UNIFIED IDEOGRAPH - 0x9BCB: 0x6D70, //CJK UNIFIED IDEOGRAPH - 0x9BCC: 0x6D71, //CJK UNIFIED IDEOGRAPH - 0x9BCD: 0x6D72, //CJK UNIFIED IDEOGRAPH - 0x9BCE: 0x6D73, //CJK UNIFIED IDEOGRAPH - 0x9BCF: 0x6D75, //CJK UNIFIED IDEOGRAPH - 0x9BD0: 0x6D76, //CJK UNIFIED IDEOGRAPH - 0x9BD1: 0x6D79, //CJK UNIFIED IDEOGRAPH - 0x9BD2: 0x6D7A, //CJK UNIFIED IDEOGRAPH - 0x9BD3: 0x6D7B, //CJK UNIFIED IDEOGRAPH - 0x9BD4: 0x6D7D, //CJK UNIFIED IDEOGRAPH - 0x9BD5: 0x6D7E, //CJK UNIFIED IDEOGRAPH - 0x9BD6: 0x6D7F, //CJK UNIFIED IDEOGRAPH - 0x9BD7: 0x6D80, //CJK UNIFIED IDEOGRAPH - 0x9BD8: 0x6D81, //CJK UNIFIED IDEOGRAPH - 0x9BD9: 0x6D83, //CJK UNIFIED IDEOGRAPH - 0x9BDA: 0x6D84, //CJK UNIFIED IDEOGRAPH - 0x9BDB: 0x6D86, //CJK UNIFIED IDEOGRAPH - 0x9BDC: 0x6D87, //CJK UNIFIED IDEOGRAPH - 0x9BDD: 0x6D8A, //CJK UNIFIED IDEOGRAPH - 0x9BDE: 0x6D8B, //CJK UNIFIED IDEOGRAPH - 0x9BDF: 0x6D8D, //CJK UNIFIED IDEOGRAPH - 0x9BE0: 0x6D8F, //CJK UNIFIED IDEOGRAPH - 0x9BE1: 0x6D90, //CJK UNIFIED IDEOGRAPH - 0x9BE2: 0x6D92, //CJK UNIFIED IDEOGRAPH - 0x9BE3: 0x6D96, //CJK UNIFIED IDEOGRAPH - 0x9BE4: 0x6D97, //CJK UNIFIED IDEOGRAPH - 0x9BE5: 0x6D98, //CJK UNIFIED IDEOGRAPH - 0x9BE6: 0x6D99, //CJK UNIFIED IDEOGRAPH - 0x9BE7: 0x6D9A, //CJK UNIFIED IDEOGRAPH - 0x9BE8: 0x6D9C, //CJK UNIFIED IDEOGRAPH - 0x9BE9: 0x6DA2, //CJK UNIFIED IDEOGRAPH - 0x9BEA: 0x6DA5, //CJK UNIFIED IDEOGRAPH - 0x9BEB: 0x6DAC, //CJK UNIFIED IDEOGRAPH - 0x9BEC: 0x6DAD, //CJK UNIFIED IDEOGRAPH - 0x9BED: 0x6DB0, //CJK UNIFIED IDEOGRAPH - 0x9BEE: 0x6DB1, //CJK UNIFIED IDEOGRAPH - 0x9BEF: 0x6DB3, //CJK UNIFIED IDEOGRAPH - 0x9BF0: 0x6DB4, //CJK UNIFIED IDEOGRAPH - 0x9BF1: 0x6DB6, //CJK UNIFIED IDEOGRAPH - 0x9BF2: 0x6DB7, //CJK UNIFIED IDEOGRAPH - 0x9BF3: 0x6DB9, //CJK UNIFIED IDEOGRAPH - 0x9BF4: 0x6DBA, //CJK UNIFIED IDEOGRAPH - 0x9BF5: 0x6DBB, //CJK UNIFIED IDEOGRAPH - 0x9BF6: 0x6DBC, //CJK UNIFIED IDEOGRAPH - 0x9BF7: 0x6DBD, //CJK UNIFIED IDEOGRAPH - 0x9BF8: 0x6DBE, //CJK UNIFIED IDEOGRAPH - 0x9BF9: 0x6DC1, //CJK UNIFIED IDEOGRAPH - 0x9BFA: 0x6DC2, //CJK UNIFIED IDEOGRAPH - 0x9BFB: 0x6DC3, //CJK UNIFIED IDEOGRAPH - 0x9BFC: 0x6DC8, //CJK UNIFIED IDEOGRAPH - 0x9BFD: 0x6DC9, //CJK UNIFIED IDEOGRAPH - 0x9BFE: 0x6DCA, //CJK UNIFIED IDEOGRAPH - 0x9C40: 0x6DCD, //CJK UNIFIED IDEOGRAPH - 0x9C41: 0x6DCE, //CJK UNIFIED IDEOGRAPH - 0x9C42: 0x6DCF, //CJK UNIFIED IDEOGRAPH - 0x9C43: 0x6DD0, //CJK UNIFIED IDEOGRAPH - 0x9C44: 0x6DD2, //CJK UNIFIED IDEOGRAPH - 0x9C45: 0x6DD3, //CJK UNIFIED IDEOGRAPH - 0x9C46: 0x6DD4, //CJK UNIFIED IDEOGRAPH - 0x9C47: 0x6DD5, //CJK UNIFIED IDEOGRAPH - 0x9C48: 0x6DD7, //CJK UNIFIED IDEOGRAPH - 0x9C49: 0x6DDA, //CJK UNIFIED IDEOGRAPH - 0x9C4A: 0x6DDB, //CJK UNIFIED IDEOGRAPH - 0x9C4B: 0x6DDC, //CJK UNIFIED IDEOGRAPH - 0x9C4C: 0x6DDF, //CJK UNIFIED IDEOGRAPH - 0x9C4D: 0x6DE2, //CJK UNIFIED IDEOGRAPH - 0x9C4E: 0x6DE3, //CJK UNIFIED IDEOGRAPH - 0x9C4F: 0x6DE5, //CJK UNIFIED IDEOGRAPH - 0x9C50: 0x6DE7, //CJK UNIFIED IDEOGRAPH - 0x9C51: 0x6DE8, //CJK UNIFIED IDEOGRAPH - 0x9C52: 0x6DE9, //CJK UNIFIED IDEOGRAPH - 0x9C53: 0x6DEA, //CJK UNIFIED IDEOGRAPH - 0x9C54: 0x6DED, //CJK UNIFIED IDEOGRAPH - 0x9C55: 0x6DEF, //CJK UNIFIED IDEOGRAPH - 0x9C56: 0x6DF0, //CJK UNIFIED IDEOGRAPH - 0x9C57: 0x6DF2, //CJK UNIFIED IDEOGRAPH - 0x9C58: 0x6DF4, //CJK UNIFIED IDEOGRAPH - 0x9C59: 0x6DF5, //CJK UNIFIED IDEOGRAPH - 0x9C5A: 0x6DF6, //CJK UNIFIED IDEOGRAPH - 0x9C5B: 0x6DF8, //CJK UNIFIED IDEOGRAPH - 0x9C5C: 0x6DFA, //CJK UNIFIED IDEOGRAPH - 0x9C5D: 0x6DFD, //CJK UNIFIED IDEOGRAPH - 0x9C5E: 0x6DFE, //CJK UNIFIED IDEOGRAPH - 0x9C5F: 0x6DFF, //CJK UNIFIED IDEOGRAPH - 0x9C60: 0x6E00, //CJK UNIFIED IDEOGRAPH - 0x9C61: 0x6E01, //CJK UNIFIED IDEOGRAPH - 0x9C62: 0x6E02, //CJK UNIFIED IDEOGRAPH - 0x9C63: 0x6E03, //CJK UNIFIED IDEOGRAPH - 0x9C64: 0x6E04, //CJK UNIFIED IDEOGRAPH - 0x9C65: 0x6E06, //CJK UNIFIED IDEOGRAPH - 0x9C66: 0x6E07, //CJK UNIFIED IDEOGRAPH - 0x9C67: 0x6E08, //CJK UNIFIED IDEOGRAPH - 0x9C68: 0x6E09, //CJK UNIFIED IDEOGRAPH - 0x9C69: 0x6E0B, //CJK UNIFIED IDEOGRAPH - 0x9C6A: 0x6E0F, //CJK UNIFIED IDEOGRAPH - 0x9C6B: 0x6E12, //CJK UNIFIED IDEOGRAPH - 0x9C6C: 0x6E13, //CJK UNIFIED IDEOGRAPH - 0x9C6D: 0x6E15, //CJK UNIFIED IDEOGRAPH - 0x9C6E: 0x6E18, //CJK UNIFIED IDEOGRAPH - 0x9C6F: 0x6E19, //CJK UNIFIED IDEOGRAPH - 0x9C70: 0x6E1B, //CJK UNIFIED IDEOGRAPH - 0x9C71: 0x6E1C, //CJK UNIFIED IDEOGRAPH - 0x9C72: 0x6E1E, //CJK UNIFIED IDEOGRAPH - 0x9C73: 0x6E1F, //CJK UNIFIED IDEOGRAPH - 0x9C74: 0x6E22, //CJK UNIFIED IDEOGRAPH - 0x9C75: 0x6E26, //CJK UNIFIED IDEOGRAPH - 0x9C76: 0x6E27, //CJK UNIFIED IDEOGRAPH - 0x9C77: 0x6E28, //CJK UNIFIED IDEOGRAPH - 0x9C78: 0x6E2A, //CJK UNIFIED IDEOGRAPH - 0x9C79: 0x6E2C, //CJK UNIFIED IDEOGRAPH - 0x9C7A: 0x6E2E, //CJK UNIFIED IDEOGRAPH - 0x9C7B: 0x6E30, //CJK UNIFIED IDEOGRAPH - 0x9C7C: 0x6E31, //CJK UNIFIED IDEOGRAPH - 0x9C7D: 0x6E33, //CJK UNIFIED IDEOGRAPH - 0x9C7E: 0x6E35, //CJK UNIFIED IDEOGRAPH - 0x9C80: 0x6E36, //CJK UNIFIED IDEOGRAPH - 0x9C81: 0x6E37, //CJK UNIFIED IDEOGRAPH - 0x9C82: 0x6E39, //CJK UNIFIED IDEOGRAPH - 0x9C83: 0x6E3B, //CJK UNIFIED IDEOGRAPH - 0x9C84: 0x6E3C, //CJK UNIFIED IDEOGRAPH - 0x9C85: 0x6E3D, //CJK UNIFIED IDEOGRAPH - 0x9C86: 0x6E3E, //CJK UNIFIED IDEOGRAPH - 0x9C87: 0x6E3F, //CJK UNIFIED IDEOGRAPH - 0x9C88: 0x6E40, //CJK UNIFIED IDEOGRAPH - 0x9C89: 0x6E41, //CJK UNIFIED IDEOGRAPH - 0x9C8A: 0x6E42, //CJK UNIFIED IDEOGRAPH - 0x9C8B: 0x6E45, //CJK UNIFIED IDEOGRAPH - 0x9C8C: 0x6E46, //CJK UNIFIED IDEOGRAPH - 0x9C8D: 0x6E47, //CJK UNIFIED IDEOGRAPH - 0x9C8E: 0x6E48, //CJK UNIFIED IDEOGRAPH - 0x9C8F: 0x6E49, //CJK UNIFIED IDEOGRAPH - 0x9C90: 0x6E4A, //CJK UNIFIED IDEOGRAPH - 0x9C91: 0x6E4B, //CJK UNIFIED IDEOGRAPH - 0x9C92: 0x6E4C, //CJK UNIFIED IDEOGRAPH - 0x9C93: 0x6E4F, //CJK UNIFIED IDEOGRAPH - 0x9C94: 0x6E50, //CJK UNIFIED IDEOGRAPH - 0x9C95: 0x6E51, //CJK UNIFIED IDEOGRAPH - 0x9C96: 0x6E52, //CJK UNIFIED IDEOGRAPH - 0x9C97: 0x6E55, //CJK UNIFIED IDEOGRAPH - 0x9C98: 0x6E57, //CJK UNIFIED IDEOGRAPH - 0x9C99: 0x6E59, //CJK UNIFIED IDEOGRAPH - 0x9C9A: 0x6E5A, //CJK UNIFIED IDEOGRAPH - 0x9C9B: 0x6E5C, //CJK UNIFIED IDEOGRAPH - 0x9C9C: 0x6E5D, //CJK UNIFIED IDEOGRAPH - 0x9C9D: 0x6E5E, //CJK UNIFIED IDEOGRAPH - 0x9C9E: 0x6E60, //CJK UNIFIED IDEOGRAPH - 0x9C9F: 0x6E61, //CJK UNIFIED IDEOGRAPH - 0x9CA0: 0x6E62, //CJK UNIFIED IDEOGRAPH - 0x9CA1: 0x6E63, //CJK UNIFIED IDEOGRAPH - 0x9CA2: 0x6E64, //CJK UNIFIED IDEOGRAPH - 0x9CA3: 0x6E65, //CJK UNIFIED IDEOGRAPH - 0x9CA4: 0x6E66, //CJK UNIFIED IDEOGRAPH - 0x9CA5: 0x6E67, //CJK UNIFIED IDEOGRAPH - 0x9CA6: 0x6E68, //CJK UNIFIED IDEOGRAPH - 0x9CA7: 0x6E69, //CJK UNIFIED IDEOGRAPH - 0x9CA8: 0x6E6A, //CJK UNIFIED IDEOGRAPH - 0x9CA9: 0x6E6C, //CJK UNIFIED IDEOGRAPH - 0x9CAA: 0x6E6D, //CJK UNIFIED IDEOGRAPH - 0x9CAB: 0x6E6F, //CJK UNIFIED IDEOGRAPH - 0x9CAC: 0x6E70, //CJK UNIFIED IDEOGRAPH - 0x9CAD: 0x6E71, //CJK UNIFIED IDEOGRAPH - 0x9CAE: 0x6E72, //CJK UNIFIED IDEOGRAPH - 0x9CAF: 0x6E73, //CJK UNIFIED IDEOGRAPH - 0x9CB0: 0x6E74, //CJK UNIFIED IDEOGRAPH - 0x9CB1: 0x6E75, //CJK UNIFIED IDEOGRAPH - 0x9CB2: 0x6E76, //CJK UNIFIED IDEOGRAPH - 0x9CB3: 0x6E77, //CJK UNIFIED IDEOGRAPH - 0x9CB4: 0x6E78, //CJK UNIFIED IDEOGRAPH - 0x9CB5: 0x6E79, //CJK UNIFIED IDEOGRAPH - 0x9CB6: 0x6E7A, //CJK UNIFIED IDEOGRAPH - 0x9CB7: 0x6E7B, //CJK UNIFIED IDEOGRAPH - 0x9CB8: 0x6E7C, //CJK UNIFIED IDEOGRAPH - 0x9CB9: 0x6E7D, //CJK UNIFIED IDEOGRAPH - 0x9CBA: 0x6E80, //CJK UNIFIED IDEOGRAPH - 0x9CBB: 0x6E81, //CJK UNIFIED IDEOGRAPH - 0x9CBC: 0x6E82, //CJK UNIFIED IDEOGRAPH - 0x9CBD: 0x6E84, //CJK UNIFIED IDEOGRAPH - 0x9CBE: 0x6E87, //CJK UNIFIED IDEOGRAPH - 0x9CBF: 0x6E88, //CJK UNIFIED IDEOGRAPH - 0x9CC0: 0x6E8A, //CJK UNIFIED IDEOGRAPH - 0x9CC1: 0x6E8B, //CJK UNIFIED IDEOGRAPH - 0x9CC2: 0x6E8C, //CJK UNIFIED IDEOGRAPH - 0x9CC3: 0x6E8D, //CJK UNIFIED IDEOGRAPH - 0x9CC4: 0x6E8E, //CJK UNIFIED IDEOGRAPH - 0x9CC5: 0x6E91, //CJK UNIFIED IDEOGRAPH - 0x9CC6: 0x6E92, //CJK UNIFIED IDEOGRAPH - 0x9CC7: 0x6E93, //CJK UNIFIED IDEOGRAPH - 0x9CC8: 0x6E94, //CJK UNIFIED IDEOGRAPH - 0x9CC9: 0x6E95, //CJK UNIFIED IDEOGRAPH - 0x9CCA: 0x6E96, //CJK UNIFIED IDEOGRAPH - 0x9CCB: 0x6E97, //CJK UNIFIED IDEOGRAPH - 0x9CCC: 0x6E99, //CJK UNIFIED IDEOGRAPH - 0x9CCD: 0x6E9A, //CJK UNIFIED IDEOGRAPH - 0x9CCE: 0x6E9B, //CJK UNIFIED IDEOGRAPH - 0x9CCF: 0x6E9D, //CJK UNIFIED IDEOGRAPH - 0x9CD0: 0x6E9E, //CJK UNIFIED IDEOGRAPH - 0x9CD1: 0x6EA0, //CJK UNIFIED IDEOGRAPH - 0x9CD2: 0x6EA1, //CJK UNIFIED IDEOGRAPH - 0x9CD3: 0x6EA3, //CJK UNIFIED IDEOGRAPH - 0x9CD4: 0x6EA4, //CJK UNIFIED IDEOGRAPH - 0x9CD5: 0x6EA6, //CJK UNIFIED IDEOGRAPH - 0x9CD6: 0x6EA8, //CJK UNIFIED IDEOGRAPH - 0x9CD7: 0x6EA9, //CJK UNIFIED IDEOGRAPH - 0x9CD8: 0x6EAB, //CJK UNIFIED IDEOGRAPH - 0x9CD9: 0x6EAC, //CJK UNIFIED IDEOGRAPH - 0x9CDA: 0x6EAD, //CJK UNIFIED IDEOGRAPH - 0x9CDB: 0x6EAE, //CJK UNIFIED IDEOGRAPH - 0x9CDC: 0x6EB0, //CJK UNIFIED IDEOGRAPH - 0x9CDD: 0x6EB3, //CJK UNIFIED IDEOGRAPH - 0x9CDE: 0x6EB5, //CJK UNIFIED IDEOGRAPH - 0x9CDF: 0x6EB8, //CJK UNIFIED IDEOGRAPH - 0x9CE0: 0x6EB9, //CJK UNIFIED IDEOGRAPH - 0x9CE1: 0x6EBC, //CJK UNIFIED IDEOGRAPH - 0x9CE2: 0x6EBE, //CJK UNIFIED IDEOGRAPH - 0x9CE3: 0x6EBF, //CJK UNIFIED IDEOGRAPH - 0x9CE4: 0x6EC0, //CJK UNIFIED IDEOGRAPH - 0x9CE5: 0x6EC3, //CJK UNIFIED IDEOGRAPH - 0x9CE6: 0x6EC4, //CJK UNIFIED IDEOGRAPH - 0x9CE7: 0x6EC5, //CJK UNIFIED IDEOGRAPH - 0x9CE8: 0x6EC6, //CJK UNIFIED IDEOGRAPH - 0x9CE9: 0x6EC8, //CJK UNIFIED IDEOGRAPH - 0x9CEA: 0x6EC9, //CJK UNIFIED IDEOGRAPH - 0x9CEB: 0x6ECA, //CJK UNIFIED IDEOGRAPH - 0x9CEC: 0x6ECC, //CJK UNIFIED IDEOGRAPH - 0x9CED: 0x6ECD, //CJK UNIFIED IDEOGRAPH - 0x9CEE: 0x6ECE, //CJK UNIFIED IDEOGRAPH - 0x9CEF: 0x6ED0, //CJK UNIFIED IDEOGRAPH - 0x9CF0: 0x6ED2, //CJK UNIFIED IDEOGRAPH - 0x9CF1: 0x6ED6, //CJK UNIFIED IDEOGRAPH - 0x9CF2: 0x6ED8, //CJK UNIFIED IDEOGRAPH - 0x9CF3: 0x6ED9, //CJK UNIFIED IDEOGRAPH - 0x9CF4: 0x6EDB, //CJK UNIFIED IDEOGRAPH - 0x9CF5: 0x6EDC, //CJK UNIFIED IDEOGRAPH - 0x9CF6: 0x6EDD, //CJK UNIFIED IDEOGRAPH - 0x9CF7: 0x6EE3, //CJK UNIFIED IDEOGRAPH - 0x9CF8: 0x6EE7, //CJK UNIFIED IDEOGRAPH - 0x9CF9: 0x6EEA, //CJK UNIFIED IDEOGRAPH - 0x9CFA: 0x6EEB, //CJK UNIFIED IDEOGRAPH - 0x9CFB: 0x6EEC, //CJK UNIFIED IDEOGRAPH - 0x9CFC: 0x6EED, //CJK UNIFIED IDEOGRAPH - 0x9CFD: 0x6EEE, //CJK UNIFIED IDEOGRAPH - 0x9CFE: 0x6EEF, //CJK UNIFIED IDEOGRAPH - 0x9D40: 0x6EF0, //CJK UNIFIED IDEOGRAPH - 0x9D41: 0x6EF1, //CJK UNIFIED IDEOGRAPH - 0x9D42: 0x6EF2, //CJK UNIFIED IDEOGRAPH - 0x9D43: 0x6EF3, //CJK UNIFIED IDEOGRAPH - 0x9D44: 0x6EF5, //CJK UNIFIED IDEOGRAPH - 0x9D45: 0x6EF6, //CJK UNIFIED IDEOGRAPH - 0x9D46: 0x6EF7, //CJK UNIFIED IDEOGRAPH - 0x9D47: 0x6EF8, //CJK UNIFIED IDEOGRAPH - 0x9D48: 0x6EFA, //CJK UNIFIED IDEOGRAPH - 0x9D49: 0x6EFB, //CJK UNIFIED IDEOGRAPH - 0x9D4A: 0x6EFC, //CJK UNIFIED IDEOGRAPH - 0x9D4B: 0x6EFD, //CJK UNIFIED IDEOGRAPH - 0x9D4C: 0x6EFE, //CJK UNIFIED IDEOGRAPH - 0x9D4D: 0x6EFF, //CJK UNIFIED IDEOGRAPH - 0x9D4E: 0x6F00, //CJK UNIFIED IDEOGRAPH - 0x9D4F: 0x6F01, //CJK UNIFIED IDEOGRAPH - 0x9D50: 0x6F03, //CJK UNIFIED IDEOGRAPH - 0x9D51: 0x6F04, //CJK UNIFIED IDEOGRAPH - 0x9D52: 0x6F05, //CJK UNIFIED IDEOGRAPH - 0x9D53: 0x6F07, //CJK UNIFIED IDEOGRAPH - 0x9D54: 0x6F08, //CJK UNIFIED IDEOGRAPH - 0x9D55: 0x6F0A, //CJK UNIFIED IDEOGRAPH - 0x9D56: 0x6F0B, //CJK UNIFIED IDEOGRAPH - 0x9D57: 0x6F0C, //CJK UNIFIED IDEOGRAPH - 0x9D58: 0x6F0D, //CJK UNIFIED IDEOGRAPH - 0x9D59: 0x6F0E, //CJK UNIFIED IDEOGRAPH - 0x9D5A: 0x6F10, //CJK UNIFIED IDEOGRAPH - 0x9D5B: 0x6F11, //CJK UNIFIED IDEOGRAPH - 0x9D5C: 0x6F12, //CJK UNIFIED IDEOGRAPH - 0x9D5D: 0x6F16, //CJK UNIFIED IDEOGRAPH - 0x9D5E: 0x6F17, //CJK UNIFIED IDEOGRAPH - 0x9D5F: 0x6F18, //CJK UNIFIED IDEOGRAPH - 0x9D60: 0x6F19, //CJK UNIFIED IDEOGRAPH - 0x9D61: 0x6F1A, //CJK UNIFIED IDEOGRAPH - 0x9D62: 0x6F1B, //CJK UNIFIED IDEOGRAPH - 0x9D63: 0x6F1C, //CJK UNIFIED IDEOGRAPH - 0x9D64: 0x6F1D, //CJK UNIFIED IDEOGRAPH - 0x9D65: 0x6F1E, //CJK UNIFIED IDEOGRAPH - 0x9D66: 0x6F1F, //CJK UNIFIED IDEOGRAPH - 0x9D67: 0x6F21, //CJK UNIFIED IDEOGRAPH - 0x9D68: 0x6F22, //CJK UNIFIED IDEOGRAPH - 0x9D69: 0x6F23, //CJK UNIFIED IDEOGRAPH - 0x9D6A: 0x6F25, //CJK UNIFIED IDEOGRAPH - 0x9D6B: 0x6F26, //CJK UNIFIED IDEOGRAPH - 0x9D6C: 0x6F27, //CJK UNIFIED IDEOGRAPH - 0x9D6D: 0x6F28, //CJK UNIFIED IDEOGRAPH - 0x9D6E: 0x6F2C, //CJK UNIFIED IDEOGRAPH - 0x9D6F: 0x6F2E, //CJK UNIFIED IDEOGRAPH - 0x9D70: 0x6F30, //CJK UNIFIED IDEOGRAPH - 0x9D71: 0x6F32, //CJK UNIFIED IDEOGRAPH - 0x9D72: 0x6F34, //CJK UNIFIED IDEOGRAPH - 0x9D73: 0x6F35, //CJK UNIFIED IDEOGRAPH - 0x9D74: 0x6F37, //CJK UNIFIED IDEOGRAPH - 0x9D75: 0x6F38, //CJK UNIFIED IDEOGRAPH - 0x9D76: 0x6F39, //CJK UNIFIED IDEOGRAPH - 0x9D77: 0x6F3A, //CJK UNIFIED IDEOGRAPH - 0x9D78: 0x6F3B, //CJK UNIFIED IDEOGRAPH - 0x9D79: 0x6F3C, //CJK UNIFIED IDEOGRAPH - 0x9D7A: 0x6F3D, //CJK UNIFIED IDEOGRAPH - 0x9D7B: 0x6F3F, //CJK UNIFIED IDEOGRAPH - 0x9D7C: 0x6F40, //CJK UNIFIED IDEOGRAPH - 0x9D7D: 0x6F41, //CJK UNIFIED IDEOGRAPH - 0x9D7E: 0x6F42, //CJK UNIFIED IDEOGRAPH - 0x9D80: 0x6F43, //CJK UNIFIED IDEOGRAPH - 0x9D81: 0x6F44, //CJK UNIFIED IDEOGRAPH - 0x9D82: 0x6F45, //CJK UNIFIED IDEOGRAPH - 0x9D83: 0x6F48, //CJK UNIFIED IDEOGRAPH - 0x9D84: 0x6F49, //CJK UNIFIED IDEOGRAPH - 0x9D85: 0x6F4A, //CJK UNIFIED IDEOGRAPH - 0x9D86: 0x6F4C, //CJK UNIFIED IDEOGRAPH - 0x9D87: 0x6F4E, //CJK UNIFIED IDEOGRAPH - 0x9D88: 0x6F4F, //CJK UNIFIED IDEOGRAPH - 0x9D89: 0x6F50, //CJK UNIFIED IDEOGRAPH - 0x9D8A: 0x6F51, //CJK UNIFIED IDEOGRAPH - 0x9D8B: 0x6F52, //CJK UNIFIED IDEOGRAPH - 0x9D8C: 0x6F53, //CJK UNIFIED IDEOGRAPH - 0x9D8D: 0x6F54, //CJK UNIFIED IDEOGRAPH - 0x9D8E: 0x6F55, //CJK UNIFIED IDEOGRAPH - 0x9D8F: 0x6F56, //CJK UNIFIED IDEOGRAPH - 0x9D90: 0x6F57, //CJK UNIFIED IDEOGRAPH - 0x9D91: 0x6F59, //CJK UNIFIED IDEOGRAPH - 0x9D92: 0x6F5A, //CJK UNIFIED IDEOGRAPH - 0x9D93: 0x6F5B, //CJK UNIFIED IDEOGRAPH - 0x9D94: 0x6F5D, //CJK UNIFIED IDEOGRAPH - 0x9D95: 0x6F5F, //CJK UNIFIED IDEOGRAPH - 0x9D96: 0x6F60, //CJK UNIFIED IDEOGRAPH - 0x9D97: 0x6F61, //CJK UNIFIED IDEOGRAPH - 0x9D98: 0x6F63, //CJK UNIFIED IDEOGRAPH - 0x9D99: 0x6F64, //CJK UNIFIED IDEOGRAPH - 0x9D9A: 0x6F65, //CJK UNIFIED IDEOGRAPH - 0x9D9B: 0x6F67, //CJK UNIFIED IDEOGRAPH - 0x9D9C: 0x6F68, //CJK UNIFIED IDEOGRAPH - 0x9D9D: 0x6F69, //CJK UNIFIED IDEOGRAPH - 0x9D9E: 0x6F6A, //CJK UNIFIED IDEOGRAPH - 0x9D9F: 0x6F6B, //CJK UNIFIED IDEOGRAPH - 0x9DA0: 0x6F6C, //CJK UNIFIED IDEOGRAPH - 0x9DA1: 0x6F6F, //CJK UNIFIED IDEOGRAPH - 0x9DA2: 0x6F70, //CJK UNIFIED IDEOGRAPH - 0x9DA3: 0x6F71, //CJK UNIFIED IDEOGRAPH - 0x9DA4: 0x6F73, //CJK UNIFIED IDEOGRAPH - 0x9DA5: 0x6F75, //CJK UNIFIED IDEOGRAPH - 0x9DA6: 0x6F76, //CJK UNIFIED IDEOGRAPH - 0x9DA7: 0x6F77, //CJK UNIFIED IDEOGRAPH - 0x9DA8: 0x6F79, //CJK UNIFIED IDEOGRAPH - 0x9DA9: 0x6F7B, //CJK UNIFIED IDEOGRAPH - 0x9DAA: 0x6F7D, //CJK UNIFIED IDEOGRAPH - 0x9DAB: 0x6F7E, //CJK UNIFIED IDEOGRAPH - 0x9DAC: 0x6F7F, //CJK UNIFIED IDEOGRAPH - 0x9DAD: 0x6F80, //CJK UNIFIED IDEOGRAPH - 0x9DAE: 0x6F81, //CJK UNIFIED IDEOGRAPH - 0x9DAF: 0x6F82, //CJK UNIFIED IDEOGRAPH - 0x9DB0: 0x6F83, //CJK UNIFIED IDEOGRAPH - 0x9DB1: 0x6F85, //CJK UNIFIED IDEOGRAPH - 0x9DB2: 0x6F86, //CJK UNIFIED IDEOGRAPH - 0x9DB3: 0x6F87, //CJK UNIFIED IDEOGRAPH - 0x9DB4: 0x6F8A, //CJK UNIFIED IDEOGRAPH - 0x9DB5: 0x6F8B, //CJK UNIFIED IDEOGRAPH - 0x9DB6: 0x6F8F, //CJK UNIFIED IDEOGRAPH - 0x9DB7: 0x6F90, //CJK UNIFIED IDEOGRAPH - 0x9DB8: 0x6F91, //CJK UNIFIED IDEOGRAPH - 0x9DB9: 0x6F92, //CJK UNIFIED IDEOGRAPH - 0x9DBA: 0x6F93, //CJK UNIFIED IDEOGRAPH - 0x9DBB: 0x6F94, //CJK UNIFIED IDEOGRAPH - 0x9DBC: 0x6F95, //CJK UNIFIED IDEOGRAPH - 0x9DBD: 0x6F96, //CJK UNIFIED IDEOGRAPH - 0x9DBE: 0x6F97, //CJK UNIFIED IDEOGRAPH - 0x9DBF: 0x6F98, //CJK UNIFIED IDEOGRAPH - 0x9DC0: 0x6F99, //CJK UNIFIED IDEOGRAPH - 0x9DC1: 0x6F9A, //CJK UNIFIED IDEOGRAPH - 0x9DC2: 0x6F9B, //CJK UNIFIED IDEOGRAPH - 0x9DC3: 0x6F9D, //CJK UNIFIED IDEOGRAPH - 0x9DC4: 0x6F9E, //CJK UNIFIED IDEOGRAPH - 0x9DC5: 0x6F9F, //CJK UNIFIED IDEOGRAPH - 0x9DC6: 0x6FA0, //CJK UNIFIED IDEOGRAPH - 0x9DC7: 0x6FA2, //CJK UNIFIED IDEOGRAPH - 0x9DC8: 0x6FA3, //CJK UNIFIED IDEOGRAPH - 0x9DC9: 0x6FA4, //CJK UNIFIED IDEOGRAPH - 0x9DCA: 0x6FA5, //CJK UNIFIED IDEOGRAPH - 0x9DCB: 0x6FA6, //CJK UNIFIED IDEOGRAPH - 0x9DCC: 0x6FA8, //CJK UNIFIED IDEOGRAPH - 0x9DCD: 0x6FA9, //CJK UNIFIED IDEOGRAPH - 0x9DCE: 0x6FAA, //CJK UNIFIED IDEOGRAPH - 0x9DCF: 0x6FAB, //CJK UNIFIED IDEOGRAPH - 0x9DD0: 0x6FAC, //CJK UNIFIED IDEOGRAPH - 0x9DD1: 0x6FAD, //CJK UNIFIED IDEOGRAPH - 0x9DD2: 0x6FAE, //CJK UNIFIED IDEOGRAPH - 0x9DD3: 0x6FAF, //CJK UNIFIED IDEOGRAPH - 0x9DD4: 0x6FB0, //CJK UNIFIED IDEOGRAPH - 0x9DD5: 0x6FB1, //CJK UNIFIED IDEOGRAPH - 0x9DD6: 0x6FB2, //CJK UNIFIED IDEOGRAPH - 0x9DD7: 0x6FB4, //CJK UNIFIED IDEOGRAPH - 0x9DD8: 0x6FB5, //CJK UNIFIED IDEOGRAPH - 0x9DD9: 0x6FB7, //CJK UNIFIED IDEOGRAPH - 0x9DDA: 0x6FB8, //CJK UNIFIED IDEOGRAPH - 0x9DDB: 0x6FBA, //CJK UNIFIED IDEOGRAPH - 0x9DDC: 0x6FBB, //CJK UNIFIED IDEOGRAPH - 0x9DDD: 0x6FBC, //CJK UNIFIED IDEOGRAPH - 0x9DDE: 0x6FBD, //CJK UNIFIED IDEOGRAPH - 0x9DDF: 0x6FBE, //CJK UNIFIED IDEOGRAPH - 0x9DE0: 0x6FBF, //CJK UNIFIED IDEOGRAPH - 0x9DE1: 0x6FC1, //CJK UNIFIED IDEOGRAPH - 0x9DE2: 0x6FC3, //CJK UNIFIED IDEOGRAPH - 0x9DE3: 0x6FC4, //CJK UNIFIED IDEOGRAPH - 0x9DE4: 0x6FC5, //CJK UNIFIED IDEOGRAPH - 0x9DE5: 0x6FC6, //CJK UNIFIED IDEOGRAPH - 0x9DE6: 0x6FC7, //CJK UNIFIED IDEOGRAPH - 0x9DE7: 0x6FC8, //CJK UNIFIED IDEOGRAPH - 0x9DE8: 0x6FCA, //CJK UNIFIED IDEOGRAPH - 0x9DE9: 0x6FCB, //CJK UNIFIED IDEOGRAPH - 0x9DEA: 0x6FCC, //CJK UNIFIED IDEOGRAPH - 0x9DEB: 0x6FCD, //CJK UNIFIED IDEOGRAPH - 0x9DEC: 0x6FCE, //CJK UNIFIED IDEOGRAPH - 0x9DED: 0x6FCF, //CJK UNIFIED IDEOGRAPH - 0x9DEE: 0x6FD0, //CJK UNIFIED IDEOGRAPH - 0x9DEF: 0x6FD3, //CJK UNIFIED IDEOGRAPH - 0x9DF0: 0x6FD4, //CJK UNIFIED IDEOGRAPH - 0x9DF1: 0x6FD5, //CJK UNIFIED IDEOGRAPH - 0x9DF2: 0x6FD6, //CJK UNIFIED IDEOGRAPH - 0x9DF3: 0x6FD7, //CJK UNIFIED IDEOGRAPH - 0x9DF4: 0x6FD8, //CJK UNIFIED IDEOGRAPH - 0x9DF5: 0x6FD9, //CJK UNIFIED IDEOGRAPH - 0x9DF6: 0x6FDA, //CJK UNIFIED IDEOGRAPH - 0x9DF7: 0x6FDB, //CJK UNIFIED IDEOGRAPH - 0x9DF8: 0x6FDC, //CJK UNIFIED IDEOGRAPH - 0x9DF9: 0x6FDD, //CJK UNIFIED IDEOGRAPH - 0x9DFA: 0x6FDF, //CJK UNIFIED IDEOGRAPH - 0x9DFB: 0x6FE2, //CJK UNIFIED IDEOGRAPH - 0x9DFC: 0x6FE3, //CJK UNIFIED IDEOGRAPH - 0x9DFD: 0x6FE4, //CJK UNIFIED IDEOGRAPH - 0x9DFE: 0x6FE5, //CJK UNIFIED IDEOGRAPH - 0x9E40: 0x6FE6, //CJK UNIFIED IDEOGRAPH - 0x9E41: 0x6FE7, //CJK UNIFIED IDEOGRAPH - 0x9E42: 0x6FE8, //CJK UNIFIED IDEOGRAPH - 0x9E43: 0x6FE9, //CJK UNIFIED IDEOGRAPH - 0x9E44: 0x6FEA, //CJK UNIFIED IDEOGRAPH - 0x9E45: 0x6FEB, //CJK UNIFIED IDEOGRAPH - 0x9E46: 0x6FEC, //CJK UNIFIED IDEOGRAPH - 0x9E47: 0x6FED, //CJK UNIFIED IDEOGRAPH - 0x9E48: 0x6FF0, //CJK UNIFIED IDEOGRAPH - 0x9E49: 0x6FF1, //CJK UNIFIED IDEOGRAPH - 0x9E4A: 0x6FF2, //CJK UNIFIED IDEOGRAPH - 0x9E4B: 0x6FF3, //CJK UNIFIED IDEOGRAPH - 0x9E4C: 0x6FF4, //CJK UNIFIED IDEOGRAPH - 0x9E4D: 0x6FF5, //CJK UNIFIED IDEOGRAPH - 0x9E4E: 0x6FF6, //CJK UNIFIED IDEOGRAPH - 0x9E4F: 0x6FF7, //CJK UNIFIED IDEOGRAPH - 0x9E50: 0x6FF8, //CJK UNIFIED IDEOGRAPH - 0x9E51: 0x6FF9, //CJK UNIFIED IDEOGRAPH - 0x9E52: 0x6FFA, //CJK UNIFIED IDEOGRAPH - 0x9E53: 0x6FFB, //CJK UNIFIED IDEOGRAPH - 0x9E54: 0x6FFC, //CJK UNIFIED IDEOGRAPH - 0x9E55: 0x6FFD, //CJK UNIFIED IDEOGRAPH - 0x9E56: 0x6FFE, //CJK UNIFIED IDEOGRAPH - 0x9E57: 0x6FFF, //CJK UNIFIED IDEOGRAPH - 0x9E58: 0x7000, //CJK UNIFIED IDEOGRAPH - 0x9E59: 0x7001, //CJK UNIFIED IDEOGRAPH - 0x9E5A: 0x7002, //CJK UNIFIED IDEOGRAPH - 0x9E5B: 0x7003, //CJK UNIFIED IDEOGRAPH - 0x9E5C: 0x7004, //CJK UNIFIED IDEOGRAPH - 0x9E5D: 0x7005, //CJK UNIFIED IDEOGRAPH - 0x9E5E: 0x7006, //CJK UNIFIED IDEOGRAPH - 0x9E5F: 0x7007, //CJK UNIFIED IDEOGRAPH - 0x9E60: 0x7008, //CJK UNIFIED IDEOGRAPH - 0x9E61: 0x7009, //CJK UNIFIED IDEOGRAPH - 0x9E62: 0x700A, //CJK UNIFIED IDEOGRAPH - 0x9E63: 0x700B, //CJK UNIFIED IDEOGRAPH - 0x9E64: 0x700C, //CJK UNIFIED IDEOGRAPH - 0x9E65: 0x700D, //CJK UNIFIED IDEOGRAPH - 0x9E66: 0x700E, //CJK UNIFIED IDEOGRAPH - 0x9E67: 0x700F, //CJK UNIFIED IDEOGRAPH - 0x9E68: 0x7010, //CJK UNIFIED IDEOGRAPH - 0x9E69: 0x7012, //CJK UNIFIED IDEOGRAPH - 0x9E6A: 0x7013, //CJK UNIFIED IDEOGRAPH - 0x9E6B: 0x7014, //CJK UNIFIED IDEOGRAPH - 0x9E6C: 0x7015, //CJK UNIFIED IDEOGRAPH - 0x9E6D: 0x7016, //CJK UNIFIED IDEOGRAPH - 0x9E6E: 0x7017, //CJK UNIFIED IDEOGRAPH - 0x9E6F: 0x7018, //CJK UNIFIED IDEOGRAPH - 0x9E70: 0x7019, //CJK UNIFIED IDEOGRAPH - 0x9E71: 0x701C, //CJK UNIFIED IDEOGRAPH - 0x9E72: 0x701D, //CJK UNIFIED IDEOGRAPH - 0x9E73: 0x701E, //CJK UNIFIED IDEOGRAPH - 0x9E74: 0x701F, //CJK UNIFIED IDEOGRAPH - 0x9E75: 0x7020, //CJK UNIFIED IDEOGRAPH - 0x9E76: 0x7021, //CJK UNIFIED IDEOGRAPH - 0x9E77: 0x7022, //CJK UNIFIED IDEOGRAPH - 0x9E78: 0x7024, //CJK UNIFIED IDEOGRAPH - 0x9E79: 0x7025, //CJK UNIFIED IDEOGRAPH - 0x9E7A: 0x7026, //CJK UNIFIED IDEOGRAPH - 0x9E7B: 0x7027, //CJK UNIFIED IDEOGRAPH - 0x9E7C: 0x7028, //CJK UNIFIED IDEOGRAPH - 0x9E7D: 0x7029, //CJK UNIFIED IDEOGRAPH - 0x9E7E: 0x702A, //CJK UNIFIED IDEOGRAPH - 0x9E80: 0x702B, //CJK UNIFIED IDEOGRAPH - 0x9E81: 0x702C, //CJK UNIFIED IDEOGRAPH - 0x9E82: 0x702D, //CJK UNIFIED IDEOGRAPH - 0x9E83: 0x702E, //CJK UNIFIED IDEOGRAPH - 0x9E84: 0x702F, //CJK UNIFIED IDEOGRAPH - 0x9E85: 0x7030, //CJK UNIFIED IDEOGRAPH - 0x9E86: 0x7031, //CJK UNIFIED IDEOGRAPH - 0x9E87: 0x7032, //CJK UNIFIED IDEOGRAPH - 0x9E88: 0x7033, //CJK UNIFIED IDEOGRAPH - 0x9E89: 0x7034, //CJK UNIFIED IDEOGRAPH - 0x9E8A: 0x7036, //CJK UNIFIED IDEOGRAPH - 0x9E8B: 0x7037, //CJK UNIFIED IDEOGRAPH - 0x9E8C: 0x7038, //CJK UNIFIED IDEOGRAPH - 0x9E8D: 0x703A, //CJK UNIFIED IDEOGRAPH - 0x9E8E: 0x703B, //CJK UNIFIED IDEOGRAPH - 0x9E8F: 0x703C, //CJK UNIFIED IDEOGRAPH - 0x9E90: 0x703D, //CJK UNIFIED IDEOGRAPH - 0x9E91: 0x703E, //CJK UNIFIED IDEOGRAPH - 0x9E92: 0x703F, //CJK UNIFIED IDEOGRAPH - 0x9E93: 0x7040, //CJK UNIFIED IDEOGRAPH - 0x9E94: 0x7041, //CJK UNIFIED IDEOGRAPH - 0x9E95: 0x7042, //CJK UNIFIED IDEOGRAPH - 0x9E96: 0x7043, //CJK UNIFIED IDEOGRAPH - 0x9E97: 0x7044, //CJK UNIFIED IDEOGRAPH - 0x9E98: 0x7045, //CJK UNIFIED IDEOGRAPH - 0x9E99: 0x7046, //CJK UNIFIED IDEOGRAPH - 0x9E9A: 0x7047, //CJK UNIFIED IDEOGRAPH - 0x9E9B: 0x7048, //CJK UNIFIED IDEOGRAPH - 0x9E9C: 0x7049, //CJK UNIFIED IDEOGRAPH - 0x9E9D: 0x704A, //CJK UNIFIED IDEOGRAPH - 0x9E9E: 0x704B, //CJK UNIFIED IDEOGRAPH - 0x9E9F: 0x704D, //CJK UNIFIED IDEOGRAPH - 0x9EA0: 0x704E, //CJK UNIFIED IDEOGRAPH - 0x9EA1: 0x7050, //CJK UNIFIED IDEOGRAPH - 0x9EA2: 0x7051, //CJK UNIFIED IDEOGRAPH - 0x9EA3: 0x7052, //CJK UNIFIED IDEOGRAPH - 0x9EA4: 0x7053, //CJK UNIFIED IDEOGRAPH - 0x9EA5: 0x7054, //CJK UNIFIED IDEOGRAPH - 0x9EA6: 0x7055, //CJK UNIFIED IDEOGRAPH - 0x9EA7: 0x7056, //CJK UNIFIED IDEOGRAPH - 0x9EA8: 0x7057, //CJK UNIFIED IDEOGRAPH - 0x9EA9: 0x7058, //CJK UNIFIED IDEOGRAPH - 0x9EAA: 0x7059, //CJK UNIFIED IDEOGRAPH - 0x9EAB: 0x705A, //CJK UNIFIED IDEOGRAPH - 0x9EAC: 0x705B, //CJK UNIFIED IDEOGRAPH - 0x9EAD: 0x705C, //CJK UNIFIED IDEOGRAPH - 0x9EAE: 0x705D, //CJK UNIFIED IDEOGRAPH - 0x9EAF: 0x705F, //CJK UNIFIED IDEOGRAPH - 0x9EB0: 0x7060, //CJK UNIFIED IDEOGRAPH - 0x9EB1: 0x7061, //CJK UNIFIED IDEOGRAPH - 0x9EB2: 0x7062, //CJK UNIFIED IDEOGRAPH - 0x9EB3: 0x7063, //CJK UNIFIED IDEOGRAPH - 0x9EB4: 0x7064, //CJK UNIFIED IDEOGRAPH - 0x9EB5: 0x7065, //CJK UNIFIED IDEOGRAPH - 0x9EB6: 0x7066, //CJK UNIFIED IDEOGRAPH - 0x9EB7: 0x7067, //CJK UNIFIED IDEOGRAPH - 0x9EB8: 0x7068, //CJK UNIFIED IDEOGRAPH - 0x9EB9: 0x7069, //CJK UNIFIED IDEOGRAPH - 0x9EBA: 0x706A, //CJK UNIFIED IDEOGRAPH - 0x9EBB: 0x706E, //CJK UNIFIED IDEOGRAPH - 0x9EBC: 0x7071, //CJK UNIFIED IDEOGRAPH - 0x9EBD: 0x7072, //CJK UNIFIED IDEOGRAPH - 0x9EBE: 0x7073, //CJK UNIFIED IDEOGRAPH - 0x9EBF: 0x7074, //CJK UNIFIED IDEOGRAPH - 0x9EC0: 0x7077, //CJK UNIFIED IDEOGRAPH - 0x9EC1: 0x7079, //CJK UNIFIED IDEOGRAPH - 0x9EC2: 0x707A, //CJK UNIFIED IDEOGRAPH - 0x9EC3: 0x707B, //CJK UNIFIED IDEOGRAPH - 0x9EC4: 0x707D, //CJK UNIFIED IDEOGRAPH - 0x9EC5: 0x7081, //CJK UNIFIED IDEOGRAPH - 0x9EC6: 0x7082, //CJK UNIFIED IDEOGRAPH - 0x9EC7: 0x7083, //CJK UNIFIED IDEOGRAPH - 0x9EC8: 0x7084, //CJK UNIFIED IDEOGRAPH - 0x9EC9: 0x7086, //CJK UNIFIED IDEOGRAPH - 0x9ECA: 0x7087, //CJK UNIFIED IDEOGRAPH - 0x9ECB: 0x7088, //CJK UNIFIED IDEOGRAPH - 0x9ECC: 0x708B, //CJK UNIFIED IDEOGRAPH - 0x9ECD: 0x708C, //CJK UNIFIED IDEOGRAPH - 0x9ECE: 0x708D, //CJK UNIFIED IDEOGRAPH - 0x9ECF: 0x708F, //CJK UNIFIED IDEOGRAPH - 0x9ED0: 0x7090, //CJK UNIFIED IDEOGRAPH - 0x9ED1: 0x7091, //CJK UNIFIED IDEOGRAPH - 0x9ED2: 0x7093, //CJK UNIFIED IDEOGRAPH - 0x9ED3: 0x7097, //CJK UNIFIED IDEOGRAPH - 0x9ED4: 0x7098, //CJK UNIFIED IDEOGRAPH - 0x9ED5: 0x709A, //CJK UNIFIED IDEOGRAPH - 0x9ED6: 0x709B, //CJK UNIFIED IDEOGRAPH - 0x9ED7: 0x709E, //CJK UNIFIED IDEOGRAPH - 0x9ED8: 0x709F, //CJK UNIFIED IDEOGRAPH - 0x9ED9: 0x70A0, //CJK UNIFIED IDEOGRAPH - 0x9EDA: 0x70A1, //CJK UNIFIED IDEOGRAPH - 0x9EDB: 0x70A2, //CJK UNIFIED IDEOGRAPH - 0x9EDC: 0x70A3, //CJK UNIFIED IDEOGRAPH - 0x9EDD: 0x70A4, //CJK UNIFIED IDEOGRAPH - 0x9EDE: 0x70A5, //CJK UNIFIED IDEOGRAPH - 0x9EDF: 0x70A6, //CJK UNIFIED IDEOGRAPH - 0x9EE0: 0x70A7, //CJK UNIFIED IDEOGRAPH - 0x9EE1: 0x70A8, //CJK UNIFIED IDEOGRAPH - 0x9EE2: 0x70A9, //CJK UNIFIED IDEOGRAPH - 0x9EE3: 0x70AA, //CJK UNIFIED IDEOGRAPH - 0x9EE4: 0x70B0, //CJK UNIFIED IDEOGRAPH - 0x9EE5: 0x70B2, //CJK UNIFIED IDEOGRAPH - 0x9EE6: 0x70B4, //CJK UNIFIED IDEOGRAPH - 0x9EE7: 0x70B5, //CJK UNIFIED IDEOGRAPH - 0x9EE8: 0x70B6, //CJK UNIFIED IDEOGRAPH - 0x9EE9: 0x70BA, //CJK UNIFIED IDEOGRAPH - 0x9EEA: 0x70BE, //CJK UNIFIED IDEOGRAPH - 0x9EEB: 0x70BF, //CJK UNIFIED IDEOGRAPH - 0x9EEC: 0x70C4, //CJK UNIFIED IDEOGRAPH - 0x9EED: 0x70C5, //CJK UNIFIED IDEOGRAPH - 0x9EEE: 0x70C6, //CJK UNIFIED IDEOGRAPH - 0x9EEF: 0x70C7, //CJK UNIFIED IDEOGRAPH - 0x9EF0: 0x70C9, //CJK UNIFIED IDEOGRAPH - 0x9EF1: 0x70CB, //CJK UNIFIED IDEOGRAPH - 0x9EF2: 0x70CC, //CJK UNIFIED IDEOGRAPH - 0x9EF3: 0x70CD, //CJK UNIFIED IDEOGRAPH - 0x9EF4: 0x70CE, //CJK UNIFIED IDEOGRAPH - 0x9EF5: 0x70CF, //CJK UNIFIED IDEOGRAPH - 0x9EF6: 0x70D0, //CJK UNIFIED IDEOGRAPH - 0x9EF7: 0x70D1, //CJK UNIFIED IDEOGRAPH - 0x9EF8: 0x70D2, //CJK UNIFIED IDEOGRAPH - 0x9EF9: 0x70D3, //CJK UNIFIED IDEOGRAPH - 0x9EFA: 0x70D4, //CJK UNIFIED IDEOGRAPH - 0x9EFB: 0x70D5, //CJK UNIFIED IDEOGRAPH - 0x9EFC: 0x70D6, //CJK UNIFIED IDEOGRAPH - 0x9EFD: 0x70D7, //CJK UNIFIED IDEOGRAPH - 0x9EFE: 0x70DA, //CJK UNIFIED IDEOGRAPH - 0x9F40: 0x70DC, //CJK UNIFIED IDEOGRAPH - 0x9F41: 0x70DD, //CJK UNIFIED IDEOGRAPH - 0x9F42: 0x70DE, //CJK UNIFIED IDEOGRAPH - 0x9F43: 0x70E0, //CJK UNIFIED IDEOGRAPH - 0x9F44: 0x70E1, //CJK UNIFIED IDEOGRAPH - 0x9F45: 0x70E2, //CJK UNIFIED IDEOGRAPH - 0x9F46: 0x70E3, //CJK UNIFIED IDEOGRAPH - 0x9F47: 0x70E5, //CJK UNIFIED IDEOGRAPH - 0x9F48: 0x70EA, //CJK UNIFIED IDEOGRAPH - 0x9F49: 0x70EE, //CJK UNIFIED IDEOGRAPH - 0x9F4A: 0x70F0, //CJK UNIFIED IDEOGRAPH - 0x9F4B: 0x70F1, //CJK UNIFIED IDEOGRAPH - 0x9F4C: 0x70F2, //CJK UNIFIED IDEOGRAPH - 0x9F4D: 0x70F3, //CJK UNIFIED IDEOGRAPH - 0x9F4E: 0x70F4, //CJK UNIFIED IDEOGRAPH - 0x9F4F: 0x70F5, //CJK UNIFIED IDEOGRAPH - 0x9F50: 0x70F6, //CJK UNIFIED IDEOGRAPH - 0x9F51: 0x70F8, //CJK UNIFIED IDEOGRAPH - 0x9F52: 0x70FA, //CJK UNIFIED IDEOGRAPH - 0x9F53: 0x70FB, //CJK UNIFIED IDEOGRAPH - 0x9F54: 0x70FC, //CJK UNIFIED IDEOGRAPH - 0x9F55: 0x70FE, //CJK UNIFIED IDEOGRAPH - 0x9F56: 0x70FF, //CJK UNIFIED IDEOGRAPH - 0x9F57: 0x7100, //CJK UNIFIED IDEOGRAPH - 0x9F58: 0x7101, //CJK UNIFIED IDEOGRAPH - 0x9F59: 0x7102, //CJK UNIFIED IDEOGRAPH - 0x9F5A: 0x7103, //CJK UNIFIED IDEOGRAPH - 0x9F5B: 0x7104, //CJK UNIFIED IDEOGRAPH - 0x9F5C: 0x7105, //CJK UNIFIED IDEOGRAPH - 0x9F5D: 0x7106, //CJK UNIFIED IDEOGRAPH - 0x9F5E: 0x7107, //CJK UNIFIED IDEOGRAPH - 0x9F5F: 0x7108, //CJK UNIFIED IDEOGRAPH - 0x9F60: 0x710B, //CJK UNIFIED IDEOGRAPH - 0x9F61: 0x710C, //CJK UNIFIED IDEOGRAPH - 0x9F62: 0x710D, //CJK UNIFIED IDEOGRAPH - 0x9F63: 0x710E, //CJK UNIFIED IDEOGRAPH - 0x9F64: 0x710F, //CJK UNIFIED IDEOGRAPH - 0x9F65: 0x7111, //CJK UNIFIED IDEOGRAPH - 0x9F66: 0x7112, //CJK UNIFIED IDEOGRAPH - 0x9F67: 0x7114, //CJK UNIFIED IDEOGRAPH - 0x9F68: 0x7117, //CJK UNIFIED IDEOGRAPH - 0x9F69: 0x711B, //CJK UNIFIED IDEOGRAPH - 0x9F6A: 0x711C, //CJK UNIFIED IDEOGRAPH - 0x9F6B: 0x711D, //CJK UNIFIED IDEOGRAPH - 0x9F6C: 0x711E, //CJK UNIFIED IDEOGRAPH - 0x9F6D: 0x711F, //CJK UNIFIED IDEOGRAPH - 0x9F6E: 0x7120, //CJK UNIFIED IDEOGRAPH - 0x9F6F: 0x7121, //CJK UNIFIED IDEOGRAPH - 0x9F70: 0x7122, //CJK UNIFIED IDEOGRAPH - 0x9F71: 0x7123, //CJK UNIFIED IDEOGRAPH - 0x9F72: 0x7124, //CJK UNIFIED IDEOGRAPH - 0x9F73: 0x7125, //CJK UNIFIED IDEOGRAPH - 0x9F74: 0x7127, //CJK UNIFIED IDEOGRAPH - 0x9F75: 0x7128, //CJK UNIFIED IDEOGRAPH - 0x9F76: 0x7129, //CJK UNIFIED IDEOGRAPH - 0x9F77: 0x712A, //CJK UNIFIED IDEOGRAPH - 0x9F78: 0x712B, //CJK UNIFIED IDEOGRAPH - 0x9F79: 0x712C, //CJK UNIFIED IDEOGRAPH - 0x9F7A: 0x712D, //CJK UNIFIED IDEOGRAPH - 0x9F7B: 0x712E, //CJK UNIFIED IDEOGRAPH - 0x9F7C: 0x7132, //CJK UNIFIED IDEOGRAPH - 0x9F7D: 0x7133, //CJK UNIFIED IDEOGRAPH - 0x9F7E: 0x7134, //CJK UNIFIED IDEOGRAPH - 0x9F80: 0x7135, //CJK UNIFIED IDEOGRAPH - 0x9F81: 0x7137, //CJK UNIFIED IDEOGRAPH - 0x9F82: 0x7138, //CJK UNIFIED IDEOGRAPH - 0x9F83: 0x7139, //CJK UNIFIED IDEOGRAPH - 0x9F84: 0x713A, //CJK UNIFIED IDEOGRAPH - 0x9F85: 0x713B, //CJK UNIFIED IDEOGRAPH - 0x9F86: 0x713C, //CJK UNIFIED IDEOGRAPH - 0x9F87: 0x713D, //CJK UNIFIED IDEOGRAPH - 0x9F88: 0x713E, //CJK UNIFIED IDEOGRAPH - 0x9F89: 0x713F, //CJK UNIFIED IDEOGRAPH - 0x9F8A: 0x7140, //CJK UNIFIED IDEOGRAPH - 0x9F8B: 0x7141, //CJK UNIFIED IDEOGRAPH - 0x9F8C: 0x7142, //CJK UNIFIED IDEOGRAPH - 0x9F8D: 0x7143, //CJK UNIFIED IDEOGRAPH - 0x9F8E: 0x7144, //CJK UNIFIED IDEOGRAPH - 0x9F8F: 0x7146, //CJK UNIFIED IDEOGRAPH - 0x9F90: 0x7147, //CJK UNIFIED IDEOGRAPH - 0x9F91: 0x7148, //CJK UNIFIED IDEOGRAPH - 0x9F92: 0x7149, //CJK UNIFIED IDEOGRAPH - 0x9F93: 0x714B, //CJK UNIFIED IDEOGRAPH - 0x9F94: 0x714D, //CJK UNIFIED IDEOGRAPH - 0x9F95: 0x714F, //CJK UNIFIED IDEOGRAPH - 0x9F96: 0x7150, //CJK UNIFIED IDEOGRAPH - 0x9F97: 0x7151, //CJK UNIFIED IDEOGRAPH - 0x9F98: 0x7152, //CJK UNIFIED IDEOGRAPH - 0x9F99: 0x7153, //CJK UNIFIED IDEOGRAPH - 0x9F9A: 0x7154, //CJK UNIFIED IDEOGRAPH - 0x9F9B: 0x7155, //CJK UNIFIED IDEOGRAPH - 0x9F9C: 0x7156, //CJK UNIFIED IDEOGRAPH - 0x9F9D: 0x7157, //CJK UNIFIED IDEOGRAPH - 0x9F9E: 0x7158, //CJK UNIFIED IDEOGRAPH - 0x9F9F: 0x7159, //CJK UNIFIED IDEOGRAPH - 0x9FA0: 0x715A, //CJK UNIFIED IDEOGRAPH - 0x9FA1: 0x715B, //CJK UNIFIED IDEOGRAPH - 0x9FA2: 0x715D, //CJK UNIFIED IDEOGRAPH - 0x9FA3: 0x715F, //CJK UNIFIED IDEOGRAPH - 0x9FA4: 0x7160, //CJK UNIFIED IDEOGRAPH - 0x9FA5: 0x7161, //CJK UNIFIED IDEOGRAPH - 0x9FA6: 0x7162, //CJK UNIFIED IDEOGRAPH - 0x9FA7: 0x7163, //CJK UNIFIED IDEOGRAPH - 0x9FA8: 0x7165, //CJK UNIFIED IDEOGRAPH - 0x9FA9: 0x7169, //CJK UNIFIED IDEOGRAPH - 0x9FAA: 0x716A, //CJK UNIFIED IDEOGRAPH - 0x9FAB: 0x716B, //CJK UNIFIED IDEOGRAPH - 0x9FAC: 0x716C, //CJK UNIFIED IDEOGRAPH - 0x9FAD: 0x716D, //CJK UNIFIED IDEOGRAPH - 0x9FAE: 0x716F, //CJK UNIFIED IDEOGRAPH - 0x9FAF: 0x7170, //CJK UNIFIED IDEOGRAPH - 0x9FB0: 0x7171, //CJK UNIFIED IDEOGRAPH - 0x9FB1: 0x7174, //CJK UNIFIED IDEOGRAPH - 0x9FB2: 0x7175, //CJK UNIFIED IDEOGRAPH - 0x9FB3: 0x7176, //CJK UNIFIED IDEOGRAPH - 0x9FB4: 0x7177, //CJK UNIFIED IDEOGRAPH - 0x9FB5: 0x7179, //CJK UNIFIED IDEOGRAPH - 0x9FB6: 0x717B, //CJK UNIFIED IDEOGRAPH - 0x9FB7: 0x717C, //CJK UNIFIED IDEOGRAPH - 0x9FB8: 0x717E, //CJK UNIFIED IDEOGRAPH - 0x9FB9: 0x717F, //CJK UNIFIED IDEOGRAPH - 0x9FBA: 0x7180, //CJK UNIFIED IDEOGRAPH - 0x9FBB: 0x7181, //CJK UNIFIED IDEOGRAPH - 0x9FBC: 0x7182, //CJK UNIFIED IDEOGRAPH - 0x9FBD: 0x7183, //CJK UNIFIED IDEOGRAPH - 0x9FBE: 0x7185, //CJK UNIFIED IDEOGRAPH - 0x9FBF: 0x7186, //CJK UNIFIED IDEOGRAPH - 0x9FC0: 0x7187, //CJK UNIFIED IDEOGRAPH - 0x9FC1: 0x7188, //CJK UNIFIED IDEOGRAPH - 0x9FC2: 0x7189, //CJK UNIFIED IDEOGRAPH - 0x9FC3: 0x718B, //CJK UNIFIED IDEOGRAPH - 0x9FC4: 0x718C, //CJK UNIFIED IDEOGRAPH - 0x9FC5: 0x718D, //CJK UNIFIED IDEOGRAPH - 0x9FC6: 0x718E, //CJK UNIFIED IDEOGRAPH - 0x9FC7: 0x7190, //CJK UNIFIED IDEOGRAPH - 0x9FC8: 0x7191, //CJK UNIFIED IDEOGRAPH - 0x9FC9: 0x7192, //CJK UNIFIED IDEOGRAPH - 0x9FCA: 0x7193, //CJK UNIFIED IDEOGRAPH - 0x9FCB: 0x7195, //CJK UNIFIED IDEOGRAPH - 0x9FCC: 0x7196, //CJK UNIFIED IDEOGRAPH - 0x9FCD: 0x7197, //CJK UNIFIED IDEOGRAPH - 0x9FCE: 0x719A, //CJK UNIFIED IDEOGRAPH - 0x9FCF: 0x719B, //CJK UNIFIED IDEOGRAPH - 0x9FD0: 0x719C, //CJK UNIFIED IDEOGRAPH - 0x9FD1: 0x719D, //CJK UNIFIED IDEOGRAPH - 0x9FD2: 0x719E, //CJK UNIFIED IDEOGRAPH - 0x9FD3: 0x71A1, //CJK UNIFIED IDEOGRAPH - 0x9FD4: 0x71A2, //CJK UNIFIED IDEOGRAPH - 0x9FD5: 0x71A3, //CJK UNIFIED IDEOGRAPH - 0x9FD6: 0x71A4, //CJK UNIFIED IDEOGRAPH - 0x9FD7: 0x71A5, //CJK UNIFIED IDEOGRAPH - 0x9FD8: 0x71A6, //CJK UNIFIED IDEOGRAPH - 0x9FD9: 0x71A7, //CJK UNIFIED IDEOGRAPH - 0x9FDA: 0x71A9, //CJK UNIFIED IDEOGRAPH - 0x9FDB: 0x71AA, //CJK UNIFIED IDEOGRAPH - 0x9FDC: 0x71AB, //CJK UNIFIED IDEOGRAPH - 0x9FDD: 0x71AD, //CJK UNIFIED IDEOGRAPH - 0x9FDE: 0x71AE, //CJK UNIFIED IDEOGRAPH - 0x9FDF: 0x71AF, //CJK UNIFIED IDEOGRAPH - 0x9FE0: 0x71B0, //CJK UNIFIED IDEOGRAPH - 0x9FE1: 0x71B1, //CJK UNIFIED IDEOGRAPH - 0x9FE2: 0x71B2, //CJK UNIFIED IDEOGRAPH - 0x9FE3: 0x71B4, //CJK UNIFIED IDEOGRAPH - 0x9FE4: 0x71B6, //CJK UNIFIED IDEOGRAPH - 0x9FE5: 0x71B7, //CJK UNIFIED IDEOGRAPH - 0x9FE6: 0x71B8, //CJK UNIFIED IDEOGRAPH - 0x9FE7: 0x71BA, //CJK UNIFIED IDEOGRAPH - 0x9FE8: 0x71BB, //CJK UNIFIED IDEOGRAPH - 0x9FE9: 0x71BC, //CJK UNIFIED IDEOGRAPH - 0x9FEA: 0x71BD, //CJK UNIFIED IDEOGRAPH - 0x9FEB: 0x71BE, //CJK UNIFIED IDEOGRAPH - 0x9FEC: 0x71BF, //CJK UNIFIED IDEOGRAPH - 0x9FED: 0x71C0, //CJK UNIFIED IDEOGRAPH - 0x9FEE: 0x71C1, //CJK UNIFIED IDEOGRAPH - 0x9FEF: 0x71C2, //CJK UNIFIED IDEOGRAPH - 0x9FF0: 0x71C4, //CJK UNIFIED IDEOGRAPH - 0x9FF1: 0x71C5, //CJK UNIFIED IDEOGRAPH - 0x9FF2: 0x71C6, //CJK UNIFIED IDEOGRAPH - 0x9FF3: 0x71C7, //CJK UNIFIED IDEOGRAPH - 0x9FF4: 0x71C8, //CJK UNIFIED IDEOGRAPH - 0x9FF5: 0x71C9, //CJK UNIFIED IDEOGRAPH - 0x9FF6: 0x71CA, //CJK UNIFIED IDEOGRAPH - 0x9FF7: 0x71CB, //CJK UNIFIED IDEOGRAPH - 0x9FF8: 0x71CC, //CJK UNIFIED IDEOGRAPH - 0x9FF9: 0x71CD, //CJK UNIFIED IDEOGRAPH - 0x9FFA: 0x71CF, //CJK UNIFIED IDEOGRAPH - 0x9FFB: 0x71D0, //CJK UNIFIED IDEOGRAPH - 0x9FFC: 0x71D1, //CJK UNIFIED IDEOGRAPH - 0x9FFD: 0x71D2, //CJK UNIFIED IDEOGRAPH - 0x9FFE: 0x71D3, //CJK UNIFIED IDEOGRAPH - 0xA040: 0x71D6, //CJK UNIFIED IDEOGRAPH - 0xA041: 0x71D7, //CJK UNIFIED IDEOGRAPH - 0xA042: 0x71D8, //CJK UNIFIED IDEOGRAPH - 0xA043: 0x71D9, //CJK UNIFIED IDEOGRAPH - 0xA044: 0x71DA, //CJK UNIFIED IDEOGRAPH - 0xA045: 0x71DB, //CJK UNIFIED IDEOGRAPH - 0xA046: 0x71DC, //CJK UNIFIED IDEOGRAPH - 0xA047: 0x71DD, //CJK UNIFIED IDEOGRAPH - 0xA048: 0x71DE, //CJK UNIFIED IDEOGRAPH - 0xA049: 0x71DF, //CJK UNIFIED IDEOGRAPH - 0xA04A: 0x71E1, //CJK UNIFIED IDEOGRAPH - 0xA04B: 0x71E2, //CJK UNIFIED IDEOGRAPH - 0xA04C: 0x71E3, //CJK UNIFIED IDEOGRAPH - 0xA04D: 0x71E4, //CJK UNIFIED IDEOGRAPH - 0xA04E: 0x71E6, //CJK UNIFIED IDEOGRAPH - 0xA04F: 0x71E8, //CJK UNIFIED IDEOGRAPH - 0xA050: 0x71E9, //CJK UNIFIED IDEOGRAPH - 0xA051: 0x71EA, //CJK UNIFIED IDEOGRAPH - 0xA052: 0x71EB, //CJK UNIFIED IDEOGRAPH - 0xA053: 0x71EC, //CJK UNIFIED IDEOGRAPH - 0xA054: 0x71ED, //CJK UNIFIED IDEOGRAPH - 0xA055: 0x71EF, //CJK UNIFIED IDEOGRAPH - 0xA056: 0x71F0, //CJK UNIFIED IDEOGRAPH - 0xA057: 0x71F1, //CJK UNIFIED IDEOGRAPH - 0xA058: 0x71F2, //CJK UNIFIED IDEOGRAPH - 0xA059: 0x71F3, //CJK UNIFIED IDEOGRAPH - 0xA05A: 0x71F4, //CJK UNIFIED IDEOGRAPH - 0xA05B: 0x71F5, //CJK UNIFIED IDEOGRAPH - 0xA05C: 0x71F6, //CJK UNIFIED IDEOGRAPH - 0xA05D: 0x71F7, //CJK UNIFIED IDEOGRAPH - 0xA05E: 0x71F8, //CJK UNIFIED IDEOGRAPH - 0xA05F: 0x71FA, //CJK UNIFIED IDEOGRAPH - 0xA060: 0x71FB, //CJK UNIFIED IDEOGRAPH - 0xA061: 0x71FC, //CJK UNIFIED IDEOGRAPH - 0xA062: 0x71FD, //CJK UNIFIED IDEOGRAPH - 0xA063: 0x71FE, //CJK UNIFIED IDEOGRAPH - 0xA064: 0x71FF, //CJK UNIFIED IDEOGRAPH - 0xA065: 0x7200, //CJK UNIFIED IDEOGRAPH - 0xA066: 0x7201, //CJK UNIFIED IDEOGRAPH - 0xA067: 0x7202, //CJK UNIFIED IDEOGRAPH - 0xA068: 0x7203, //CJK UNIFIED IDEOGRAPH - 0xA069: 0x7204, //CJK UNIFIED IDEOGRAPH - 0xA06A: 0x7205, //CJK UNIFIED IDEOGRAPH - 0xA06B: 0x7207, //CJK UNIFIED IDEOGRAPH - 0xA06C: 0x7208, //CJK UNIFIED IDEOGRAPH - 0xA06D: 0x7209, //CJK UNIFIED IDEOGRAPH - 0xA06E: 0x720A, //CJK UNIFIED IDEOGRAPH - 0xA06F: 0x720B, //CJK UNIFIED IDEOGRAPH - 0xA070: 0x720C, //CJK UNIFIED IDEOGRAPH - 0xA071: 0x720D, //CJK UNIFIED IDEOGRAPH - 0xA072: 0x720E, //CJK UNIFIED IDEOGRAPH - 0xA073: 0x720F, //CJK UNIFIED IDEOGRAPH - 0xA074: 0x7210, //CJK UNIFIED IDEOGRAPH - 0xA075: 0x7211, //CJK UNIFIED IDEOGRAPH - 0xA076: 0x7212, //CJK UNIFIED IDEOGRAPH - 0xA077: 0x7213, //CJK UNIFIED IDEOGRAPH - 0xA078: 0x7214, //CJK UNIFIED IDEOGRAPH - 0xA079: 0x7215, //CJK UNIFIED IDEOGRAPH - 0xA07A: 0x7216, //CJK UNIFIED IDEOGRAPH - 0xA07B: 0x7217, //CJK UNIFIED IDEOGRAPH - 0xA07C: 0x7218, //CJK UNIFIED IDEOGRAPH - 0xA07D: 0x7219, //CJK UNIFIED IDEOGRAPH - 0xA07E: 0x721A, //CJK UNIFIED IDEOGRAPH - 0xA080: 0x721B, //CJK UNIFIED IDEOGRAPH - 0xA081: 0x721C, //CJK UNIFIED IDEOGRAPH - 0xA082: 0x721E, //CJK UNIFIED IDEOGRAPH - 0xA083: 0x721F, //CJK UNIFIED IDEOGRAPH - 0xA084: 0x7220, //CJK UNIFIED IDEOGRAPH - 0xA085: 0x7221, //CJK UNIFIED IDEOGRAPH - 0xA086: 0x7222, //CJK UNIFIED IDEOGRAPH - 0xA087: 0x7223, //CJK UNIFIED IDEOGRAPH - 0xA088: 0x7224, //CJK UNIFIED IDEOGRAPH - 0xA089: 0x7225, //CJK UNIFIED IDEOGRAPH - 0xA08A: 0x7226, //CJK UNIFIED IDEOGRAPH - 0xA08B: 0x7227, //CJK UNIFIED IDEOGRAPH - 0xA08C: 0x7229, //CJK UNIFIED IDEOGRAPH - 0xA08D: 0x722B, //CJK UNIFIED IDEOGRAPH - 0xA08E: 0x722D, //CJK UNIFIED IDEOGRAPH - 0xA08F: 0x722E, //CJK UNIFIED IDEOGRAPH - 0xA090: 0x722F, //CJK UNIFIED IDEOGRAPH - 0xA091: 0x7232, //CJK UNIFIED IDEOGRAPH - 0xA092: 0x7233, //CJK UNIFIED IDEOGRAPH - 0xA093: 0x7234, //CJK UNIFIED IDEOGRAPH - 0xA094: 0x723A, //CJK UNIFIED IDEOGRAPH - 0xA095: 0x723C, //CJK UNIFIED IDEOGRAPH - 0xA096: 0x723E, //CJK UNIFIED IDEOGRAPH - 0xA097: 0x7240, //CJK UNIFIED IDEOGRAPH - 0xA098: 0x7241, //CJK UNIFIED IDEOGRAPH - 0xA099: 0x7242, //CJK UNIFIED IDEOGRAPH - 0xA09A: 0x7243, //CJK UNIFIED IDEOGRAPH - 0xA09B: 0x7244, //CJK UNIFIED IDEOGRAPH - 0xA09C: 0x7245, //CJK UNIFIED IDEOGRAPH - 0xA09D: 0x7246, //CJK UNIFIED IDEOGRAPH - 0xA09E: 0x7249, //CJK UNIFIED IDEOGRAPH - 0xA09F: 0x724A, //CJK UNIFIED IDEOGRAPH - 0xA0A0: 0x724B, //CJK UNIFIED IDEOGRAPH - 0xA0A1: 0x724E, //CJK UNIFIED IDEOGRAPH - 0xA0A2: 0x724F, //CJK UNIFIED IDEOGRAPH - 0xA0A3: 0x7250, //CJK UNIFIED IDEOGRAPH - 0xA0A4: 0x7251, //CJK UNIFIED IDEOGRAPH - 0xA0A5: 0x7253, //CJK UNIFIED IDEOGRAPH - 0xA0A6: 0x7254, //CJK UNIFIED IDEOGRAPH - 0xA0A7: 0x7255, //CJK UNIFIED IDEOGRAPH - 0xA0A8: 0x7257, //CJK UNIFIED IDEOGRAPH - 0xA0A9: 0x7258, //CJK UNIFIED IDEOGRAPH - 0xA0AA: 0x725A, //CJK UNIFIED IDEOGRAPH - 0xA0AB: 0x725C, //CJK UNIFIED IDEOGRAPH - 0xA0AC: 0x725E, //CJK UNIFIED IDEOGRAPH - 0xA0AD: 0x7260, //CJK UNIFIED IDEOGRAPH - 0xA0AE: 0x7263, //CJK UNIFIED IDEOGRAPH - 0xA0AF: 0x7264, //CJK UNIFIED IDEOGRAPH - 0xA0B0: 0x7265, //CJK UNIFIED IDEOGRAPH - 0xA0B1: 0x7268, //CJK UNIFIED IDEOGRAPH - 0xA0B2: 0x726A, //CJK UNIFIED IDEOGRAPH - 0xA0B3: 0x726B, //CJK UNIFIED IDEOGRAPH - 0xA0B4: 0x726C, //CJK UNIFIED IDEOGRAPH - 0xA0B5: 0x726D, //CJK UNIFIED IDEOGRAPH - 0xA0B6: 0x7270, //CJK UNIFIED IDEOGRAPH - 0xA0B7: 0x7271, //CJK UNIFIED IDEOGRAPH - 0xA0B8: 0x7273, //CJK UNIFIED IDEOGRAPH - 0xA0B9: 0x7274, //CJK UNIFIED IDEOGRAPH - 0xA0BA: 0x7276, //CJK UNIFIED IDEOGRAPH - 0xA0BB: 0x7277, //CJK UNIFIED IDEOGRAPH - 0xA0BC: 0x7278, //CJK UNIFIED IDEOGRAPH - 0xA0BD: 0x727B, //CJK UNIFIED IDEOGRAPH - 0xA0BE: 0x727C, //CJK UNIFIED IDEOGRAPH - 0xA0BF: 0x727D, //CJK UNIFIED IDEOGRAPH - 0xA0C0: 0x7282, //CJK UNIFIED IDEOGRAPH - 0xA0C1: 0x7283, //CJK UNIFIED IDEOGRAPH - 0xA0C2: 0x7285, //CJK UNIFIED IDEOGRAPH - 0xA0C3: 0x7286, //CJK UNIFIED IDEOGRAPH - 0xA0C4: 0x7287, //CJK UNIFIED IDEOGRAPH - 0xA0C5: 0x7288, //CJK UNIFIED IDEOGRAPH - 0xA0C6: 0x7289, //CJK UNIFIED IDEOGRAPH - 0xA0C7: 0x728C, //CJK UNIFIED IDEOGRAPH - 0xA0C8: 0x728E, //CJK UNIFIED IDEOGRAPH - 0xA0C9: 0x7290, //CJK UNIFIED IDEOGRAPH - 0xA0CA: 0x7291, //CJK UNIFIED IDEOGRAPH - 0xA0CB: 0x7293, //CJK UNIFIED IDEOGRAPH - 0xA0CC: 0x7294, //CJK UNIFIED IDEOGRAPH - 0xA0CD: 0x7295, //CJK UNIFIED IDEOGRAPH - 0xA0CE: 0x7296, //CJK UNIFIED IDEOGRAPH - 0xA0CF: 0x7297, //CJK UNIFIED IDEOGRAPH - 0xA0D0: 0x7298, //CJK UNIFIED IDEOGRAPH - 0xA0D1: 0x7299, //CJK UNIFIED IDEOGRAPH - 0xA0D2: 0x729A, //CJK UNIFIED IDEOGRAPH - 0xA0D3: 0x729B, //CJK UNIFIED IDEOGRAPH - 0xA0D4: 0x729C, //CJK UNIFIED IDEOGRAPH - 0xA0D5: 0x729D, //CJK UNIFIED IDEOGRAPH - 0xA0D6: 0x729E, //CJK UNIFIED IDEOGRAPH - 0xA0D7: 0x72A0, //CJK UNIFIED IDEOGRAPH - 0xA0D8: 0x72A1, //CJK UNIFIED IDEOGRAPH - 0xA0D9: 0x72A2, //CJK UNIFIED IDEOGRAPH - 0xA0DA: 0x72A3, //CJK UNIFIED IDEOGRAPH - 0xA0DB: 0x72A4, //CJK UNIFIED IDEOGRAPH - 0xA0DC: 0x72A5, //CJK UNIFIED IDEOGRAPH - 0xA0DD: 0x72A6, //CJK UNIFIED IDEOGRAPH - 0xA0DE: 0x72A7, //CJK UNIFIED IDEOGRAPH - 0xA0DF: 0x72A8, //CJK UNIFIED IDEOGRAPH - 0xA0E0: 0x72A9, //CJK UNIFIED IDEOGRAPH - 0xA0E1: 0x72AA, //CJK UNIFIED IDEOGRAPH - 0xA0E2: 0x72AB, //CJK UNIFIED IDEOGRAPH - 0xA0E3: 0x72AE, //CJK UNIFIED IDEOGRAPH - 0xA0E4: 0x72B1, //CJK UNIFIED IDEOGRAPH - 0xA0E5: 0x72B2, //CJK UNIFIED IDEOGRAPH - 0xA0E6: 0x72B3, //CJK UNIFIED IDEOGRAPH - 0xA0E7: 0x72B5, //CJK UNIFIED IDEOGRAPH - 0xA0E8: 0x72BA, //CJK UNIFIED IDEOGRAPH - 0xA0E9: 0x72BB, //CJK UNIFIED IDEOGRAPH - 0xA0EA: 0x72BC, //CJK UNIFIED IDEOGRAPH - 0xA0EB: 0x72BD, //CJK UNIFIED IDEOGRAPH - 0xA0EC: 0x72BE, //CJK UNIFIED IDEOGRAPH - 0xA0ED: 0x72BF, //CJK UNIFIED IDEOGRAPH - 0xA0EE: 0x72C0, //CJK UNIFIED IDEOGRAPH - 0xA0EF: 0x72C5, //CJK UNIFIED IDEOGRAPH - 0xA0F0: 0x72C6, //CJK UNIFIED IDEOGRAPH - 0xA0F1: 0x72C7, //CJK UNIFIED IDEOGRAPH - 0xA0F2: 0x72C9, //CJK UNIFIED IDEOGRAPH - 0xA0F3: 0x72CA, //CJK UNIFIED IDEOGRAPH - 0xA0F4: 0x72CB, //CJK UNIFIED IDEOGRAPH - 0xA0F5: 0x72CC, //CJK UNIFIED IDEOGRAPH - 0xA0F6: 0x72CF, //CJK UNIFIED IDEOGRAPH - 0xA0F7: 0x72D1, //CJK UNIFIED IDEOGRAPH - 0xA0F8: 0x72D3, //CJK UNIFIED IDEOGRAPH - 0xA0F9: 0x72D4, //CJK UNIFIED IDEOGRAPH - 0xA0FA: 0x72D5, //CJK UNIFIED IDEOGRAPH - 0xA0FB: 0x72D6, //CJK UNIFIED IDEOGRAPH - 0xA0FC: 0x72D8, //CJK UNIFIED IDEOGRAPH - 0xA0FD: 0x72DA, //CJK UNIFIED IDEOGRAPH - 0xA0FE: 0x72DB, //CJK UNIFIED IDEOGRAPH - 0xA1A1: 0x3000, //IDEOGRAPHIC SPACE - 0xA1A2: 0x3001, //IDEOGRAPHIC COMMA - 0xA1A3: 0x3002, //IDEOGRAPHIC FULL STOP - 0xA1A4: 0x00B7, //MIDDLE DOT - 0xA1A5: 0x02C9, //MODIFIER LETTER MACRON - 0xA1A6: 0x02C7, //CARON - 0xA1A7: 0x00A8, //DIAERESIS - 0xA1A8: 0x3003, //DITTO MARK - 0xA1A9: 0x3005, //IDEOGRAPHIC ITERATION MARK - 0xA1AA: 0x2014, //EM DASH - 0xA1AB: 0xFF5E, //FULLWIDTH TILDE - 0xA1AC: 0x2016, //DOUBLE VERTICAL LINE - 0xA1AD: 0x2026, //HORIZONTAL ELLIPSIS - 0xA1AE: 0x2018, //LEFT SINGLE QUOTATION MARK - 0xA1AF: 0x2019, //RIGHT SINGLE QUOTATION MARK - 0xA1B0: 0x201C, //LEFT DOUBLE QUOTATION MARK - 0xA1B1: 0x201D, //RIGHT DOUBLE QUOTATION MARK - 0xA1B2: 0x3014, //LEFT TORTOISE SHELL BRACKET - 0xA1B3: 0x3015, //RIGHT TORTOISE SHELL BRACKET - 0xA1B4: 0x3008, //LEFT ANGLE BRACKET - 0xA1B5: 0x3009, //RIGHT ANGLE BRACKET - 0xA1B6: 0x300A, //LEFT DOUBLE ANGLE BRACKET - 0xA1B7: 0x300B, //RIGHT DOUBLE ANGLE BRACKET - 0xA1B8: 0x300C, //LEFT CORNER BRACKET - 0xA1B9: 0x300D, //RIGHT CORNER BRACKET - 0xA1BA: 0x300E, //LEFT WHITE CORNER BRACKET - 0xA1BB: 0x300F, //RIGHT WHITE CORNER BRACKET - 0xA1BC: 0x3016, //LEFT WHITE LENTICULAR BRACKET - 0xA1BD: 0x3017, //RIGHT WHITE LENTICULAR BRACKET - 0xA1BE: 0x3010, //LEFT BLACK LENTICULAR BRACKET - 0xA1BF: 0x3011, //RIGHT BLACK LENTICULAR BRACKET - 0xA1C0: 0x00B1, //PLUS-MINUS SIGN - 0xA1C1: 0x00D7, //MULTIPLICATION SIGN - 0xA1C2: 0x00F7, //DIVISION SIGN - 0xA1C3: 0x2236, //RATIO - 0xA1C4: 0x2227, //LOGICAL AND - 0xA1C5: 0x2228, //LOGICAL OR - 0xA1C6: 0x2211, //N-ARY SUMMATION - 0xA1C7: 0x220F, //N-ARY PRODUCT - 0xA1C8: 0x222A, //UNION - 0xA1C9: 0x2229, //INTERSECTION - 0xA1CA: 0x2208, //ELEMENT OF - 0xA1CB: 0x2237, //PROPORTION - 0xA1CC: 0x221A, //SQUARE ROOT - 0xA1CD: 0x22A5, //UP TACK - 0xA1CE: 0x2225, //PARALLEL TO - 0xA1CF: 0x2220, //ANGLE - 0xA1D0: 0x2312, //ARC - 0xA1D1: 0x2299, //CIRCLED DOT OPERATOR - 0xA1D2: 0x222B, //INTEGRAL - 0xA1D3: 0x222E, //CONTOUR INTEGRAL - 0xA1D4: 0x2261, //IDENTICAL TO - 0xA1D5: 0x224C, //ALL EQUAL TO - 0xA1D6: 0x2248, //ALMOST EQUAL TO - 0xA1D7: 0x223D, //REVERSED TILDE - 0xA1D8: 0x221D, //PROPORTIONAL TO - 0xA1D9: 0x2260, //NOT EQUAL TO - 0xA1DA: 0x226E, //NOT LESS-THAN - 0xA1DB: 0x226F, //NOT GREATER-THAN - 0xA1DC: 0x2264, //LESS-THAN OR EQUAL TO - 0xA1DD: 0x2265, //GREATER-THAN OR EQUAL TO - 0xA1DE: 0x221E, //INFINITY - 0xA1DF: 0x2235, //BECAUSE - 0xA1E0: 0x2234, //THEREFORE - 0xA1E1: 0x2642, //MALE SIGN - 0xA1E2: 0x2640, //FEMALE SIGN - 0xA1E3: 0x00B0, //DEGREE SIGN - 0xA1E4: 0x2032, //PRIME - 0xA1E5: 0x2033, //DOUBLE PRIME - 0xA1E6: 0x2103, //DEGREE CELSIUS - 0xA1E7: 0xFF04, //FULLWIDTH DOLLAR SIGN - 0xA1E8: 0x00A4, //CURRENCY SIGN - 0xA1E9: 0xFFE0, //FULLWIDTH CENT SIGN - 0xA1EA: 0xFFE1, //FULLWIDTH POUND SIGN - 0xA1EB: 0x2030, //PER MILLE SIGN - 0xA1EC: 0x00A7, //SECTION SIGN - 0xA1ED: 0x2116, //NUMERO SIGN - 0xA1EE: 0x2606, //WHITE STAR - 0xA1EF: 0x2605, //BLACK STAR - 0xA1F0: 0x25CB, //WHITE CIRCLE - 0xA1F1: 0x25CF, //BLACK CIRCLE - 0xA1F2: 0x25CE, //BULLSEYE - 0xA1F3: 0x25C7, //WHITE DIAMOND - 0xA1F4: 0x25C6, //BLACK DIAMOND - 0xA1F5: 0x25A1, //WHITE SQUARE - 0xA1F6: 0x25A0, //BLACK SQUARE - 0xA1F7: 0x25B3, //WHITE UP-POINTING TRIANGLE - 0xA1F8: 0x25B2, //BLACK UP-POINTING TRIANGLE - 0xA1F9: 0x203B, //REFERENCE MARK - 0xA1FA: 0x2192, //RIGHTWARDS ARROW - 0xA1FB: 0x2190, //LEFTWARDS ARROW - 0xA1FC: 0x2191, //UPWARDS ARROW - 0xA1FD: 0x2193, //DOWNWARDS ARROW - 0xA1FE: 0x3013, //GETA MARK - 0xA2A1: 0x2170, //SMALL ROMAN NUMERAL ONE - 0xA2A2: 0x2171, //SMALL ROMAN NUMERAL TWO - 0xA2A3: 0x2172, //SMALL ROMAN NUMERAL THREE - 0xA2A4: 0x2173, //SMALL ROMAN NUMERAL FOUR - 0xA2A5: 0x2174, //SMALL ROMAN NUMERAL FIVE - 0xA2A6: 0x2175, //SMALL ROMAN NUMERAL SIX - 0xA2A7: 0x2176, //SMALL ROMAN NUMERAL SEVEN - 0xA2A8: 0x2177, //SMALL ROMAN NUMERAL EIGHT - 0xA2A9: 0x2178, //SMALL ROMAN NUMERAL NINE - 0xA2AA: 0x2179, //SMALL ROMAN NUMERAL TEN - 0xA2B1: 0x2488, //DIGIT ONE FULL STOP - 0xA2B2: 0x2489, //DIGIT TWO FULL STOP - 0xA2B3: 0x248A, //DIGIT THREE FULL STOP - 0xA2B4: 0x248B, //DIGIT FOUR FULL STOP - 0xA2B5: 0x248C, //DIGIT FIVE FULL STOP - 0xA2B6: 0x248D, //DIGIT SIX FULL STOP - 0xA2B7: 0x248E, //DIGIT SEVEN FULL STOP - 0xA2B8: 0x248F, //DIGIT EIGHT FULL STOP - 0xA2B9: 0x2490, //DIGIT NINE FULL STOP - 0xA2BA: 0x2491, //NUMBER TEN FULL STOP - 0xA2BB: 0x2492, //NUMBER ELEVEN FULL STOP - 0xA2BC: 0x2493, //NUMBER TWELVE FULL STOP - 0xA2BD: 0x2494, //NUMBER THIRTEEN FULL STOP - 0xA2BE: 0x2495, //NUMBER FOURTEEN FULL STOP - 0xA2BF: 0x2496, //NUMBER FIFTEEN FULL STOP - 0xA2C0: 0x2497, //NUMBER SIXTEEN FULL STOP - 0xA2C1: 0x2498, //NUMBER SEVENTEEN FULL STOP - 0xA2C2: 0x2499, //NUMBER EIGHTEEN FULL STOP - 0xA2C3: 0x249A, //NUMBER NINETEEN FULL STOP - 0xA2C4: 0x249B, //NUMBER TWENTY FULL STOP - 0xA2C5: 0x2474, //PARENTHESIZED DIGIT ONE - 0xA2C6: 0x2475, //PARENTHESIZED DIGIT TWO - 0xA2C7: 0x2476, //PARENTHESIZED DIGIT THREE - 0xA2C8: 0x2477, //PARENTHESIZED DIGIT FOUR - 0xA2C9: 0x2478, //PARENTHESIZED DIGIT FIVE - 0xA2CA: 0x2479, //PARENTHESIZED DIGIT SIX - 0xA2CB: 0x247A, //PARENTHESIZED DIGIT SEVEN - 0xA2CC: 0x247B, //PARENTHESIZED DIGIT EIGHT - 0xA2CD: 0x247C, //PARENTHESIZED DIGIT NINE - 0xA2CE: 0x247D, //PARENTHESIZED NUMBER TEN - 0xA2CF: 0x247E, //PARENTHESIZED NUMBER ELEVEN - 0xA2D0: 0x247F, //PARENTHESIZED NUMBER TWELVE - 0xA2D1: 0x2480, //PARENTHESIZED NUMBER THIRTEEN - 0xA2D2: 0x2481, //PARENTHESIZED NUMBER FOURTEEN - 0xA2D3: 0x2482, //PARENTHESIZED NUMBER FIFTEEN - 0xA2D4: 0x2483, //PARENTHESIZED NUMBER SIXTEEN - 0xA2D5: 0x2484, //PARENTHESIZED NUMBER SEVENTEEN - 0xA2D6: 0x2485, //PARENTHESIZED NUMBER EIGHTEEN - 0xA2D7: 0x2486, //PARENTHESIZED NUMBER NINETEEN - 0xA2D8: 0x2487, //PARENTHESIZED NUMBER TWENTY - 0xA2D9: 0x2460, //CIRCLED DIGIT ONE - 0xA2DA: 0x2461, //CIRCLED DIGIT TWO - 0xA2DB: 0x2462, //CIRCLED DIGIT THREE - 0xA2DC: 0x2463, //CIRCLED DIGIT FOUR - 0xA2DD: 0x2464, //CIRCLED DIGIT FIVE - 0xA2DE: 0x2465, //CIRCLED DIGIT SIX - 0xA2DF: 0x2466, //CIRCLED DIGIT SEVEN - 0xA2E0: 0x2467, //CIRCLED DIGIT EIGHT - 0xA2E1: 0x2468, //CIRCLED DIGIT NINE - 0xA2E2: 0x2469, //CIRCLED NUMBER TEN - 0xA2E5: 0x3220, //PARENTHESIZED IDEOGRAPH ONE - 0xA2E6: 0x3221, //PARENTHESIZED IDEOGRAPH TWO - 0xA2E7: 0x3222, //PARENTHESIZED IDEOGRAPH THREE - 0xA2E8: 0x3223, //PARENTHESIZED IDEOGRAPH FOUR - 0xA2E9: 0x3224, //PARENTHESIZED IDEOGRAPH FIVE - 0xA2EA: 0x3225, //PARENTHESIZED IDEOGRAPH SIX - 0xA2EB: 0x3226, //PARENTHESIZED IDEOGRAPH SEVEN - 0xA2EC: 0x3227, //PARENTHESIZED IDEOGRAPH EIGHT - 0xA2ED: 0x3228, //PARENTHESIZED IDEOGRAPH NINE - 0xA2EE: 0x3229, //PARENTHESIZED IDEOGRAPH TEN - 0xA2F1: 0x2160, //ROMAN NUMERAL ONE - 0xA2F2: 0x2161, //ROMAN NUMERAL TWO - 0xA2F3: 0x2162, //ROMAN NUMERAL THREE - 0xA2F4: 0x2163, //ROMAN NUMERAL FOUR - 0xA2F5: 0x2164, //ROMAN NUMERAL FIVE - 0xA2F6: 0x2165, //ROMAN NUMERAL SIX - 0xA2F7: 0x2166, //ROMAN NUMERAL SEVEN - 0xA2F8: 0x2167, //ROMAN NUMERAL EIGHT - 0xA2F9: 0x2168, //ROMAN NUMERAL NINE - 0xA2FA: 0x2169, //ROMAN NUMERAL TEN - 0xA2FB: 0x216A, //ROMAN NUMERAL ELEVEN - 0xA2FC: 0x216B, //ROMAN NUMERAL TWELVE - 0xA3A1: 0xFF01, //FULLWIDTH EXCLAMATION MARK - 0xA3A2: 0xFF02, //FULLWIDTH QUOTATION MARK - 0xA3A3: 0xFF03, //FULLWIDTH NUMBER SIGN - 0xA3A4: 0xFFE5, //FULLWIDTH YEN SIGN - 0xA3A5: 0xFF05, //FULLWIDTH PERCENT SIGN - 0xA3A6: 0xFF06, //FULLWIDTH AMPERSAND - 0xA3A7: 0xFF07, //FULLWIDTH APOSTROPHE - 0xA3A8: 0xFF08, //FULLWIDTH LEFT PARENTHESIS - 0xA3A9: 0xFF09, //FULLWIDTH RIGHT PARENTHESIS - 0xA3AA: 0xFF0A, //FULLWIDTH ASTERISK - 0xA3AB: 0xFF0B, //FULLWIDTH PLUS SIGN - 0xA3AC: 0xFF0C, //FULLWIDTH COMMA - 0xA3AD: 0xFF0D, //FULLWIDTH HYPHEN-MINUS - 0xA3AE: 0xFF0E, //FULLWIDTH FULL STOP - 0xA3AF: 0xFF0F, //FULLWIDTH SOLIDUS - 0xA3B0: 0xFF10, //FULLWIDTH DIGIT ZERO - 0xA3B1: 0xFF11, //FULLWIDTH DIGIT ONE - 0xA3B2: 0xFF12, //FULLWIDTH DIGIT TWO - 0xA3B3: 0xFF13, //FULLWIDTH DIGIT THREE - 0xA3B4: 0xFF14, //FULLWIDTH DIGIT FOUR - 0xA3B5: 0xFF15, //FULLWIDTH DIGIT FIVE - 0xA3B6: 0xFF16, //FULLWIDTH DIGIT SIX - 0xA3B7: 0xFF17, //FULLWIDTH DIGIT SEVEN - 0xA3B8: 0xFF18, //FULLWIDTH DIGIT EIGHT - 0xA3B9: 0xFF19, //FULLWIDTH DIGIT NINE - 0xA3BA: 0xFF1A, //FULLWIDTH COLON - 0xA3BB: 0xFF1B, //FULLWIDTH SEMICOLON - 0xA3BC: 0xFF1C, //FULLWIDTH LESS-THAN SIGN - 0xA3BD: 0xFF1D, //FULLWIDTH EQUALS SIGN - 0xA3BE: 0xFF1E, //FULLWIDTH GREATER-THAN SIGN - 0xA3BF: 0xFF1F, //FULLWIDTH QUESTION MARK - 0xA3C0: 0xFF20, //FULLWIDTH COMMERCIAL AT - 0xA3C1: 0xFF21, //FULLWIDTH LATIN CAPITAL LETTER A - 0xA3C2: 0xFF22, //FULLWIDTH LATIN CAPITAL LETTER B - 0xA3C3: 0xFF23, //FULLWIDTH LATIN CAPITAL LETTER C - 0xA3C4: 0xFF24, //FULLWIDTH LATIN CAPITAL LETTER D - 0xA3C5: 0xFF25, //FULLWIDTH LATIN CAPITAL LETTER E - 0xA3C6: 0xFF26, //FULLWIDTH LATIN CAPITAL LETTER F - 0xA3C7: 0xFF27, //FULLWIDTH LATIN CAPITAL LETTER G - 0xA3C8: 0xFF28, //FULLWIDTH LATIN CAPITAL LETTER H - 0xA3C9: 0xFF29, //FULLWIDTH LATIN CAPITAL LETTER I - 0xA3CA: 0xFF2A, //FULLWIDTH LATIN CAPITAL LETTER J - 0xA3CB: 0xFF2B, //FULLWIDTH LATIN CAPITAL LETTER K - 0xA3CC: 0xFF2C, //FULLWIDTH LATIN CAPITAL LETTER L - 0xA3CD: 0xFF2D, //FULLWIDTH LATIN CAPITAL LETTER M - 0xA3CE: 0xFF2E, //FULLWIDTH LATIN CAPITAL LETTER N - 0xA3CF: 0xFF2F, //FULLWIDTH LATIN CAPITAL LETTER O - 0xA3D0: 0xFF30, //FULLWIDTH LATIN CAPITAL LETTER P - 0xA3D1: 0xFF31, //FULLWIDTH LATIN CAPITAL LETTER Q - 0xA3D2: 0xFF32, //FULLWIDTH LATIN CAPITAL LETTER R - 0xA3D3: 0xFF33, //FULLWIDTH LATIN CAPITAL LETTER S - 0xA3D4: 0xFF34, //FULLWIDTH LATIN CAPITAL LETTER T - 0xA3D5: 0xFF35, //FULLWIDTH LATIN CAPITAL LETTER U - 0xA3D6: 0xFF36, //FULLWIDTH LATIN CAPITAL LETTER V - 0xA3D7: 0xFF37, //FULLWIDTH LATIN CAPITAL LETTER W - 0xA3D8: 0xFF38, //FULLWIDTH LATIN CAPITAL LETTER X - 0xA3D9: 0xFF39, //FULLWIDTH LATIN CAPITAL LETTER Y - 0xA3DA: 0xFF3A, //FULLWIDTH LATIN CAPITAL LETTER Z - 0xA3DB: 0xFF3B, //FULLWIDTH LEFT SQUARE BRACKET - 0xA3DC: 0xFF3C, //FULLWIDTH REVERSE SOLIDUS - 0xA3DD: 0xFF3D, //FULLWIDTH RIGHT SQUARE BRACKET - 0xA3DE: 0xFF3E, //FULLWIDTH CIRCUMFLEX ACCENT - 0xA3DF: 0xFF3F, //FULLWIDTH LOW LINE - 0xA3E0: 0xFF40, //FULLWIDTH GRAVE ACCENT - 0xA3E1: 0xFF41, //FULLWIDTH LATIN SMALL LETTER A - 0xA3E2: 0xFF42, //FULLWIDTH LATIN SMALL LETTER B - 0xA3E3: 0xFF43, //FULLWIDTH LATIN SMALL LETTER C - 0xA3E4: 0xFF44, //FULLWIDTH LATIN SMALL LETTER D - 0xA3E5: 0xFF45, //FULLWIDTH LATIN SMALL LETTER E - 0xA3E6: 0xFF46, //FULLWIDTH LATIN SMALL LETTER F - 0xA3E7: 0xFF47, //FULLWIDTH LATIN SMALL LETTER G - 0xA3E8: 0xFF48, //FULLWIDTH LATIN SMALL LETTER H - 0xA3E9: 0xFF49, //FULLWIDTH LATIN SMALL LETTER I - 0xA3EA: 0xFF4A, //FULLWIDTH LATIN SMALL LETTER J - 0xA3EB: 0xFF4B, //FULLWIDTH LATIN SMALL LETTER K - 0xA3EC: 0xFF4C, //FULLWIDTH LATIN SMALL LETTER L - 0xA3ED: 0xFF4D, //FULLWIDTH LATIN SMALL LETTER M - 0xA3EE: 0xFF4E, //FULLWIDTH LATIN SMALL LETTER N - 0xA3EF: 0xFF4F, //FULLWIDTH LATIN SMALL LETTER O - 0xA3F0: 0xFF50, //FULLWIDTH LATIN SMALL LETTER P - 0xA3F1: 0xFF51, //FULLWIDTH LATIN SMALL LETTER Q - 0xA3F2: 0xFF52, //FULLWIDTH LATIN SMALL LETTER R - 0xA3F3: 0xFF53, //FULLWIDTH LATIN SMALL LETTER S - 0xA3F4: 0xFF54, //FULLWIDTH LATIN SMALL LETTER T - 0xA3F5: 0xFF55, //FULLWIDTH LATIN SMALL LETTER U - 0xA3F6: 0xFF56, //FULLWIDTH LATIN SMALL LETTER V - 0xA3F7: 0xFF57, //FULLWIDTH LATIN SMALL LETTER W - 0xA3F8: 0xFF58, //FULLWIDTH LATIN SMALL LETTER X - 0xA3F9: 0xFF59, //FULLWIDTH LATIN SMALL LETTER Y - 0xA3FA: 0xFF5A, //FULLWIDTH LATIN SMALL LETTER Z - 0xA3FB: 0xFF5B, //FULLWIDTH LEFT CURLY BRACKET - 0xA3FC: 0xFF5C, //FULLWIDTH VERTICAL LINE - 0xA3FD: 0xFF5D, //FULLWIDTH RIGHT CURLY BRACKET - 0xA3FE: 0xFFE3, //FULLWIDTH MACRON - 0xA4A1: 0x3041, //HIRAGANA LETTER SMALL A - 0xA4A2: 0x3042, //HIRAGANA LETTER A - 0xA4A3: 0x3043, //HIRAGANA LETTER SMALL I - 0xA4A4: 0x3044, //HIRAGANA LETTER I - 0xA4A5: 0x3045, //HIRAGANA LETTER SMALL U - 0xA4A6: 0x3046, //HIRAGANA LETTER U - 0xA4A7: 0x3047, //HIRAGANA LETTER SMALL E - 0xA4A8: 0x3048, //HIRAGANA LETTER E - 0xA4A9: 0x3049, //HIRAGANA LETTER SMALL O - 0xA4AA: 0x304A, //HIRAGANA LETTER O - 0xA4AB: 0x304B, //HIRAGANA LETTER KA - 0xA4AC: 0x304C, //HIRAGANA LETTER GA - 0xA4AD: 0x304D, //HIRAGANA LETTER KI - 0xA4AE: 0x304E, //HIRAGANA LETTER GI - 0xA4AF: 0x304F, //HIRAGANA LETTER KU - 0xA4B0: 0x3050, //HIRAGANA LETTER GU - 0xA4B1: 0x3051, //HIRAGANA LETTER KE - 0xA4B2: 0x3052, //HIRAGANA LETTER GE - 0xA4B3: 0x3053, //HIRAGANA LETTER KO - 0xA4B4: 0x3054, //HIRAGANA LETTER GO - 0xA4B5: 0x3055, //HIRAGANA LETTER SA - 0xA4B6: 0x3056, //HIRAGANA LETTER ZA - 0xA4B7: 0x3057, //HIRAGANA LETTER SI - 0xA4B8: 0x3058, //HIRAGANA LETTER ZI - 0xA4B9: 0x3059, //HIRAGANA LETTER SU - 0xA4BA: 0x305A, //HIRAGANA LETTER ZU - 0xA4BB: 0x305B, //HIRAGANA LETTER SE - 0xA4BC: 0x305C, //HIRAGANA LETTER ZE - 0xA4BD: 0x305D, //HIRAGANA LETTER SO - 0xA4BE: 0x305E, //HIRAGANA LETTER ZO - 0xA4BF: 0x305F, //HIRAGANA LETTER TA - 0xA4C0: 0x3060, //HIRAGANA LETTER DA - 0xA4C1: 0x3061, //HIRAGANA LETTER TI - 0xA4C2: 0x3062, //HIRAGANA LETTER DI - 0xA4C3: 0x3063, //HIRAGANA LETTER SMALL TU - 0xA4C4: 0x3064, //HIRAGANA LETTER TU - 0xA4C5: 0x3065, //HIRAGANA LETTER DU - 0xA4C6: 0x3066, //HIRAGANA LETTER TE - 0xA4C7: 0x3067, //HIRAGANA LETTER DE - 0xA4C8: 0x3068, //HIRAGANA LETTER TO - 0xA4C9: 0x3069, //HIRAGANA LETTER DO - 0xA4CA: 0x306A, //HIRAGANA LETTER NA - 0xA4CB: 0x306B, //HIRAGANA LETTER NI - 0xA4CC: 0x306C, //HIRAGANA LETTER NU - 0xA4CD: 0x306D, //HIRAGANA LETTER NE - 0xA4CE: 0x306E, //HIRAGANA LETTER NO - 0xA4CF: 0x306F, //HIRAGANA LETTER HA - 0xA4D0: 0x3070, //HIRAGANA LETTER BA - 0xA4D1: 0x3071, //HIRAGANA LETTER PA - 0xA4D2: 0x3072, //HIRAGANA LETTER HI - 0xA4D3: 0x3073, //HIRAGANA LETTER BI - 0xA4D4: 0x3074, //HIRAGANA LETTER PI - 0xA4D5: 0x3075, //HIRAGANA LETTER HU - 0xA4D6: 0x3076, //HIRAGANA LETTER BU - 0xA4D7: 0x3077, //HIRAGANA LETTER PU - 0xA4D8: 0x3078, //HIRAGANA LETTER HE - 0xA4D9: 0x3079, //HIRAGANA LETTER BE - 0xA4DA: 0x307A, //HIRAGANA LETTER PE - 0xA4DB: 0x307B, //HIRAGANA LETTER HO - 0xA4DC: 0x307C, //HIRAGANA LETTER BO - 0xA4DD: 0x307D, //HIRAGANA LETTER PO - 0xA4DE: 0x307E, //HIRAGANA LETTER MA - 0xA4DF: 0x307F, //HIRAGANA LETTER MI - 0xA4E0: 0x3080, //HIRAGANA LETTER MU - 0xA4E1: 0x3081, //HIRAGANA LETTER ME - 0xA4E2: 0x3082, //HIRAGANA LETTER MO - 0xA4E3: 0x3083, //HIRAGANA LETTER SMALL YA - 0xA4E4: 0x3084, //HIRAGANA LETTER YA - 0xA4E5: 0x3085, //HIRAGANA LETTER SMALL YU - 0xA4E6: 0x3086, //HIRAGANA LETTER YU - 0xA4E7: 0x3087, //HIRAGANA LETTER SMALL YO - 0xA4E8: 0x3088, //HIRAGANA LETTER YO - 0xA4E9: 0x3089, //HIRAGANA LETTER RA - 0xA4EA: 0x308A, //HIRAGANA LETTER RI - 0xA4EB: 0x308B, //HIRAGANA LETTER RU - 0xA4EC: 0x308C, //HIRAGANA LETTER RE - 0xA4ED: 0x308D, //HIRAGANA LETTER RO - 0xA4EE: 0x308E, //HIRAGANA LETTER SMALL WA - 0xA4EF: 0x308F, //HIRAGANA LETTER WA - 0xA4F0: 0x3090, //HIRAGANA LETTER WI - 0xA4F1: 0x3091, //HIRAGANA LETTER WE - 0xA4F2: 0x3092, //HIRAGANA LETTER WO - 0xA4F3: 0x3093, //HIRAGANA LETTER N - 0xA5A1: 0x30A1, //KATAKANA LETTER SMALL A - 0xA5A2: 0x30A2, //KATAKANA LETTER A - 0xA5A3: 0x30A3, //KATAKANA LETTER SMALL I - 0xA5A4: 0x30A4, //KATAKANA LETTER I - 0xA5A5: 0x30A5, //KATAKANA LETTER SMALL U - 0xA5A6: 0x30A6, //KATAKANA LETTER U - 0xA5A7: 0x30A7, //KATAKANA LETTER SMALL E - 0xA5A8: 0x30A8, //KATAKANA LETTER E - 0xA5A9: 0x30A9, //KATAKANA LETTER SMALL O - 0xA5AA: 0x30AA, //KATAKANA LETTER O - 0xA5AB: 0x30AB, //KATAKANA LETTER KA - 0xA5AC: 0x30AC, //KATAKANA LETTER GA - 0xA5AD: 0x30AD, //KATAKANA LETTER KI - 0xA5AE: 0x30AE, //KATAKANA LETTER GI - 0xA5AF: 0x30AF, //KATAKANA LETTER KU - 0xA5B0: 0x30B0, //KATAKANA LETTER GU - 0xA5B1: 0x30B1, //KATAKANA LETTER KE - 0xA5B2: 0x30B2, //KATAKANA LETTER GE - 0xA5B3: 0x30B3, //KATAKANA LETTER KO - 0xA5B4: 0x30B4, //KATAKANA LETTER GO - 0xA5B5: 0x30B5, //KATAKANA LETTER SA - 0xA5B6: 0x30B6, //KATAKANA LETTER ZA - 0xA5B7: 0x30B7, //KATAKANA LETTER SI - 0xA5B8: 0x30B8, //KATAKANA LETTER ZI - 0xA5B9: 0x30B9, //KATAKANA LETTER SU - 0xA5BA: 0x30BA, //KATAKANA LETTER ZU - 0xA5BB: 0x30BB, //KATAKANA LETTER SE - 0xA5BC: 0x30BC, //KATAKANA LETTER ZE - 0xA5BD: 0x30BD, //KATAKANA LETTER SO - 0xA5BE: 0x30BE, //KATAKANA LETTER ZO - 0xA5BF: 0x30BF, //KATAKANA LETTER TA - 0xA5C0: 0x30C0, //KATAKANA LETTER DA - 0xA5C1: 0x30C1, //KATAKANA LETTER TI - 0xA5C2: 0x30C2, //KATAKANA LETTER DI - 0xA5C3: 0x30C3, //KATAKANA LETTER SMALL TU - 0xA5C4: 0x30C4, //KATAKANA LETTER TU - 0xA5C5: 0x30C5, //KATAKANA LETTER DU - 0xA5C6: 0x30C6, //KATAKANA LETTER TE - 0xA5C7: 0x30C7, //KATAKANA LETTER DE - 0xA5C8: 0x30C8, //KATAKANA LETTER TO - 0xA5C9: 0x30C9, //KATAKANA LETTER DO - 0xA5CA: 0x30CA, //KATAKANA LETTER NA - 0xA5CB: 0x30CB, //KATAKANA LETTER NI - 0xA5CC: 0x30CC, //KATAKANA LETTER NU - 0xA5CD: 0x30CD, //KATAKANA LETTER NE - 0xA5CE: 0x30CE, //KATAKANA LETTER NO - 0xA5CF: 0x30CF, //KATAKANA LETTER HA - 0xA5D0: 0x30D0, //KATAKANA LETTER BA - 0xA5D1: 0x30D1, //KATAKANA LETTER PA - 0xA5D2: 0x30D2, //KATAKANA LETTER HI - 0xA5D3: 0x30D3, //KATAKANA LETTER BI - 0xA5D4: 0x30D4, //KATAKANA LETTER PI - 0xA5D5: 0x30D5, //KATAKANA LETTER HU - 0xA5D6: 0x30D6, //KATAKANA LETTER BU - 0xA5D7: 0x30D7, //KATAKANA LETTER PU - 0xA5D8: 0x30D8, //KATAKANA LETTER HE - 0xA5D9: 0x30D9, //KATAKANA LETTER BE - 0xA5DA: 0x30DA, //KATAKANA LETTER PE - 0xA5DB: 0x30DB, //KATAKANA LETTER HO - 0xA5DC: 0x30DC, //KATAKANA LETTER BO - 0xA5DD: 0x30DD, //KATAKANA LETTER PO - 0xA5DE: 0x30DE, //KATAKANA LETTER MA - 0xA5DF: 0x30DF, //KATAKANA LETTER MI - 0xA5E0: 0x30E0, //KATAKANA LETTER MU - 0xA5E1: 0x30E1, //KATAKANA LETTER ME - 0xA5E2: 0x30E2, //KATAKANA LETTER MO - 0xA5E3: 0x30E3, //KATAKANA LETTER SMALL YA - 0xA5E4: 0x30E4, //KATAKANA LETTER YA - 0xA5E5: 0x30E5, //KATAKANA LETTER SMALL YU - 0xA5E6: 0x30E6, //KATAKANA LETTER YU - 0xA5E7: 0x30E7, //KATAKANA LETTER SMALL YO - 0xA5E8: 0x30E8, //KATAKANA LETTER YO - 0xA5E9: 0x30E9, //KATAKANA LETTER RA - 0xA5EA: 0x30EA, //KATAKANA LETTER RI - 0xA5EB: 0x30EB, //KATAKANA LETTER RU - 0xA5EC: 0x30EC, //KATAKANA LETTER RE - 0xA5ED: 0x30ED, //KATAKANA LETTER RO - 0xA5EE: 0x30EE, //KATAKANA LETTER SMALL WA - 0xA5EF: 0x30EF, //KATAKANA LETTER WA - 0xA5F0: 0x30F0, //KATAKANA LETTER WI - 0xA5F1: 0x30F1, //KATAKANA LETTER WE - 0xA5F2: 0x30F2, //KATAKANA LETTER WO - 0xA5F3: 0x30F3, //KATAKANA LETTER N - 0xA5F4: 0x30F4, //KATAKANA LETTER VU - 0xA5F5: 0x30F5, //KATAKANA LETTER SMALL KA - 0xA5F6: 0x30F6, //KATAKANA LETTER SMALL KE - 0xA6A1: 0x0391, //GREEK CAPITAL LETTER ALPHA - 0xA6A2: 0x0392, //GREEK CAPITAL LETTER BETA - 0xA6A3: 0x0393, //GREEK CAPITAL LETTER GAMMA - 0xA6A4: 0x0394, //GREEK CAPITAL LETTER DELTA - 0xA6A5: 0x0395, //GREEK CAPITAL LETTER EPSILON - 0xA6A6: 0x0396, //GREEK CAPITAL LETTER ZETA - 0xA6A7: 0x0397, //GREEK CAPITAL LETTER ETA - 0xA6A8: 0x0398, //GREEK CAPITAL LETTER THETA - 0xA6A9: 0x0399, //GREEK CAPITAL LETTER IOTA - 0xA6AA: 0x039A, //GREEK CAPITAL LETTER KAPPA - 0xA6AB: 0x039B, //GREEK CAPITAL LETTER LAMDA - 0xA6AC: 0x039C, //GREEK CAPITAL LETTER MU - 0xA6AD: 0x039D, //GREEK CAPITAL LETTER NU - 0xA6AE: 0x039E, //GREEK CAPITAL LETTER XI - 0xA6AF: 0x039F, //GREEK CAPITAL LETTER OMICRON - 0xA6B0: 0x03A0, //GREEK CAPITAL LETTER PI - 0xA6B1: 0x03A1, //GREEK CAPITAL LETTER RHO - 0xA6B2: 0x03A3, //GREEK CAPITAL LETTER SIGMA - 0xA6B3: 0x03A4, //GREEK CAPITAL LETTER TAU - 0xA6B4: 0x03A5, //GREEK CAPITAL LETTER UPSILON - 0xA6B5: 0x03A6, //GREEK CAPITAL LETTER PHI - 0xA6B6: 0x03A7, //GREEK CAPITAL LETTER CHI - 0xA6B7: 0x03A8, //GREEK CAPITAL LETTER PSI - 0xA6B8: 0x03A9, //GREEK CAPITAL LETTER OMEGA - 0xA6C1: 0x03B1, //GREEK SMALL LETTER ALPHA - 0xA6C2: 0x03B2, //GREEK SMALL LETTER BETA - 0xA6C3: 0x03B3, //GREEK SMALL LETTER GAMMA - 0xA6C4: 0x03B4, //GREEK SMALL LETTER DELTA - 0xA6C5: 0x03B5, //GREEK SMALL LETTER EPSILON - 0xA6C6: 0x03B6, //GREEK SMALL LETTER ZETA - 0xA6C7: 0x03B7, //GREEK SMALL LETTER ETA - 0xA6C8: 0x03B8, //GREEK SMALL LETTER THETA - 0xA6C9: 0x03B9, //GREEK SMALL LETTER IOTA - 0xA6CA: 0x03BA, //GREEK SMALL LETTER KAPPA - 0xA6CB: 0x03BB, //GREEK SMALL LETTER LAMDA - 0xA6CC: 0x03BC, //GREEK SMALL LETTER MU - 0xA6CD: 0x03BD, //GREEK SMALL LETTER NU - 0xA6CE: 0x03BE, //GREEK SMALL LETTER XI - 0xA6CF: 0x03BF, //GREEK SMALL LETTER OMICRON - 0xA6D0: 0x03C0, //GREEK SMALL LETTER PI - 0xA6D1: 0x03C1, //GREEK SMALL LETTER RHO - 0xA6D2: 0x03C3, //GREEK SMALL LETTER SIGMA - 0xA6D3: 0x03C4, //GREEK SMALL LETTER TAU - 0xA6D4: 0x03C5, //GREEK SMALL LETTER UPSILON - 0xA6D5: 0x03C6, //GREEK SMALL LETTER PHI - 0xA6D6: 0x03C7, //GREEK SMALL LETTER CHI - 0xA6D7: 0x03C8, //GREEK SMALL LETTER PSI - 0xA6D8: 0x03C9, //GREEK SMALL LETTER OMEGA - 0xA6E0: 0xFE35, //PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS - 0xA6E1: 0xFE36, //PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS - 0xA6E2: 0xFE39, //PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET - 0xA6E3: 0xFE3A, //PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET - 0xA6E4: 0xFE3F, //PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET - 0xA6E5: 0xFE40, //PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET - 0xA6E6: 0xFE3D, //PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET - 0xA6E7: 0xFE3E, //PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET - 0xA6E8: 0xFE41, //PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET - 0xA6E9: 0xFE42, //PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET - 0xA6EA: 0xFE43, //PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET - 0xA6EB: 0xFE44, //PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET - 0xA6EE: 0xFE3B, //PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET - 0xA6EF: 0xFE3C, //PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET - 0xA6F0: 0xFE37, //PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET - 0xA6F1: 0xFE38, //PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET - 0xA6F2: 0xFE31, //PRESENTATION FORM FOR VERTICAL EM DASH - 0xA6F4: 0xFE33, //PRESENTATION FORM FOR VERTICAL LOW LINE - 0xA6F5: 0xFE34, //PRESENTATION FORM FOR VERTICAL WAVY LOW LINE - 0xA7A1: 0x0410, //CYRILLIC CAPITAL LETTER A - 0xA7A2: 0x0411, //CYRILLIC CAPITAL LETTER BE - 0xA7A3: 0x0412, //CYRILLIC CAPITAL LETTER VE - 0xA7A4: 0x0413, //CYRILLIC CAPITAL LETTER GHE - 0xA7A5: 0x0414, //CYRILLIC CAPITAL LETTER DE - 0xA7A6: 0x0415, //CYRILLIC CAPITAL LETTER IE - 0xA7A7: 0x0401, //CYRILLIC CAPITAL LETTER IO - 0xA7A8: 0x0416, //CYRILLIC CAPITAL LETTER ZHE - 0xA7A9: 0x0417, //CYRILLIC CAPITAL LETTER ZE - 0xA7AA: 0x0418, //CYRILLIC CAPITAL LETTER I - 0xA7AB: 0x0419, //CYRILLIC CAPITAL LETTER SHORT I - 0xA7AC: 0x041A, //CYRILLIC CAPITAL LETTER KA - 0xA7AD: 0x041B, //CYRILLIC CAPITAL LETTER EL - 0xA7AE: 0x041C, //CYRILLIC CAPITAL LETTER EM - 0xA7AF: 0x041D, //CYRILLIC CAPITAL LETTER EN - 0xA7B0: 0x041E, //CYRILLIC CAPITAL LETTER O - 0xA7B1: 0x041F, //CYRILLIC CAPITAL LETTER PE - 0xA7B2: 0x0420, //CYRILLIC CAPITAL LETTER ER - 0xA7B3: 0x0421, //CYRILLIC CAPITAL LETTER ES - 0xA7B4: 0x0422, //CYRILLIC CAPITAL LETTER TE - 0xA7B5: 0x0423, //CYRILLIC CAPITAL LETTER U - 0xA7B6: 0x0424, //CYRILLIC CAPITAL LETTER EF - 0xA7B7: 0x0425, //CYRILLIC CAPITAL LETTER HA - 0xA7B8: 0x0426, //CYRILLIC CAPITAL LETTER TSE - 0xA7B9: 0x0427, //CYRILLIC CAPITAL LETTER CHE - 0xA7BA: 0x0428, //CYRILLIC CAPITAL LETTER SHA - 0xA7BB: 0x0429, //CYRILLIC CAPITAL LETTER SHCHA - 0xA7BC: 0x042A, //CYRILLIC CAPITAL LETTER HARD SIGN - 0xA7BD: 0x042B, //CYRILLIC CAPITAL LETTER YERU - 0xA7BE: 0x042C, //CYRILLIC CAPITAL LETTER SOFT SIGN - 0xA7BF: 0x042D, //CYRILLIC CAPITAL LETTER E - 0xA7C0: 0x042E, //CYRILLIC CAPITAL LETTER YU - 0xA7C1: 0x042F, //CYRILLIC CAPITAL LETTER YA - 0xA7D1: 0x0430, //CYRILLIC SMALL LETTER A - 0xA7D2: 0x0431, //CYRILLIC SMALL LETTER BE - 0xA7D3: 0x0432, //CYRILLIC SMALL LETTER VE - 0xA7D4: 0x0433, //CYRILLIC SMALL LETTER GHE - 0xA7D5: 0x0434, //CYRILLIC SMALL LETTER DE - 0xA7D6: 0x0435, //CYRILLIC SMALL LETTER IE - 0xA7D7: 0x0451, //CYRILLIC SMALL LETTER IO - 0xA7D8: 0x0436, //CYRILLIC SMALL LETTER ZHE - 0xA7D9: 0x0437, //CYRILLIC SMALL LETTER ZE - 0xA7DA: 0x0438, //CYRILLIC SMALL LETTER I - 0xA7DB: 0x0439, //CYRILLIC SMALL LETTER SHORT I - 0xA7DC: 0x043A, //CYRILLIC SMALL LETTER KA - 0xA7DD: 0x043B, //CYRILLIC SMALL LETTER EL - 0xA7DE: 0x043C, //CYRILLIC SMALL LETTER EM - 0xA7DF: 0x043D, //CYRILLIC SMALL LETTER EN - 0xA7E0: 0x043E, //CYRILLIC SMALL LETTER O - 0xA7E1: 0x043F, //CYRILLIC SMALL LETTER PE - 0xA7E2: 0x0440, //CYRILLIC SMALL LETTER ER - 0xA7E3: 0x0441, //CYRILLIC SMALL LETTER ES - 0xA7E4: 0x0442, //CYRILLIC SMALL LETTER TE - 0xA7E5: 0x0443, //CYRILLIC SMALL LETTER U - 0xA7E6: 0x0444, //CYRILLIC SMALL LETTER EF - 0xA7E7: 0x0445, //CYRILLIC SMALL LETTER HA - 0xA7E8: 0x0446, //CYRILLIC SMALL LETTER TSE - 0xA7E9: 0x0447, //CYRILLIC SMALL LETTER CHE - 0xA7EA: 0x0448, //CYRILLIC SMALL LETTER SHA - 0xA7EB: 0x0449, //CYRILLIC SMALL LETTER SHCHA - 0xA7EC: 0x044A, //CYRILLIC SMALL LETTER HARD SIGN - 0xA7ED: 0x044B, //CYRILLIC SMALL LETTER YERU - 0xA7EE: 0x044C, //CYRILLIC SMALL LETTER SOFT SIGN - 0xA7EF: 0x044D, //CYRILLIC SMALL LETTER E - 0xA7F0: 0x044E, //CYRILLIC SMALL LETTER YU - 0xA7F1: 0x044F, //CYRILLIC SMALL LETTER YA - 0xA840: 0x02CA, //MODIFIER LETTER ACUTE ACCENT - 0xA841: 0x02CB, //MODIFIER LETTER GRAVE ACCENT - 0xA842: 0x02D9, //DOT ABOVE - 0xA843: 0x2013, //EN DASH - 0xA844: 0x2015, //HORIZONTAL BAR - 0xA845: 0x2025, //TWO DOT LEADER - 0xA846: 0x2035, //REVERSED PRIME - 0xA847: 0x2105, //CARE OF - 0xA848: 0x2109, //DEGREE FAHRENHEIT - 0xA849: 0x2196, //NORTH WEST ARROW - 0xA84A: 0x2197, //NORTH EAST ARROW - 0xA84B: 0x2198, //SOUTH EAST ARROW - 0xA84C: 0x2199, //SOUTH WEST ARROW - 0xA84D: 0x2215, //DIVISION SLASH - 0xA84E: 0x221F, //RIGHT ANGLE - 0xA84F: 0x2223, //DIVIDES - 0xA850: 0x2252, //APPROXIMATELY EQUAL TO OR THE IMAGE OF - 0xA851: 0x2266, //LESS-THAN OVER EQUAL TO - 0xA852: 0x2267, //GREATER-THAN OVER EQUAL TO - 0xA853: 0x22BF, //RIGHT TRIANGLE - 0xA854: 0x2550, //BOX DRAWINGS DOUBLE HORIZONTAL - 0xA855: 0x2551, //BOX DRAWINGS DOUBLE VERTICAL - 0xA856: 0x2552, //BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0xA857: 0x2553, //BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0xA858: 0x2554, //BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0xA859: 0x2555, //BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0xA85A: 0x2556, //BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0xA85B: 0x2557, //BOX DRAWINGS DOUBLE DOWN AND LEFT - 0xA85C: 0x2558, //BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0xA85D: 0x2559, //BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0xA85E: 0x255A, //BOX DRAWINGS DOUBLE UP AND RIGHT - 0xA85F: 0x255B, //BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0xA860: 0x255C, //BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0xA861: 0x255D, //BOX DRAWINGS DOUBLE UP AND LEFT - 0xA862: 0x255E, //BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0xA863: 0x255F, //BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0xA864: 0x2560, //BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0xA865: 0x2561, //BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0xA866: 0x2562, //BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0xA867: 0x2563, //BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0xA868: 0x2564, //BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0xA869: 0x2565, //BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0xA86A: 0x2566, //BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0xA86B: 0x2567, //BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0xA86C: 0x2568, //BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0xA86D: 0x2569, //BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0xA86E: 0x256A, //BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0xA86F: 0x256B, //BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0xA870: 0x256C, //BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0xA871: 0x256D, //BOX DRAWINGS LIGHT ARC DOWN AND RIGHT - 0xA872: 0x256E, //BOX DRAWINGS LIGHT ARC DOWN AND LEFT - 0xA873: 0x256F, //BOX DRAWINGS LIGHT ARC UP AND LEFT - 0xA874: 0x2570, //BOX DRAWINGS LIGHT ARC UP AND RIGHT - 0xA875: 0x2571, //BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT - 0xA876: 0x2572, //BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT - 0xA877: 0x2573, //BOX DRAWINGS LIGHT DIAGONAL CROSS - 0xA878: 0x2581, //LOWER ONE EIGHTH BLOCK - 0xA879: 0x2582, //LOWER ONE QUARTER BLOCK - 0xA87A: 0x2583, //LOWER THREE EIGHTHS BLOCK - 0xA87B: 0x2584, //LOWER HALF BLOCK - 0xA87C: 0x2585, //LOWER FIVE EIGHTHS BLOCK - 0xA87D: 0x2586, //LOWER THREE QUARTERS BLOCK - 0xA87E: 0x2587, //LOWER SEVEN EIGHTHS BLOCK - 0xA880: 0x2588, //FULL BLOCK - 0xA881: 0x2589, //LEFT SEVEN EIGHTHS BLOCK - 0xA882: 0x258A, //LEFT THREE QUARTERS BLOCK - 0xA883: 0x258B, //LEFT FIVE EIGHTHS BLOCK - 0xA884: 0x258C, //LEFT HALF BLOCK - 0xA885: 0x258D, //LEFT THREE EIGHTHS BLOCK - 0xA886: 0x258E, //LEFT ONE QUARTER BLOCK - 0xA887: 0x258F, //LEFT ONE EIGHTH BLOCK - 0xA888: 0x2593, //DARK SHADE - 0xA889: 0x2594, //UPPER ONE EIGHTH BLOCK - 0xA88A: 0x2595, //RIGHT ONE EIGHTH BLOCK - 0xA88B: 0x25BC, //BLACK DOWN-POINTING TRIANGLE - 0xA88C: 0x25BD, //WHITE DOWN-POINTING TRIANGLE - 0xA88D: 0x25E2, //BLACK LOWER RIGHT TRIANGLE - 0xA88E: 0x25E3, //BLACK LOWER LEFT TRIANGLE - 0xA88F: 0x25E4, //BLACK UPPER LEFT TRIANGLE - 0xA890: 0x25E5, //BLACK UPPER RIGHT TRIANGLE - 0xA891: 0x2609, //SUN - 0xA892: 0x2295, //CIRCLED PLUS - 0xA893: 0x3012, //POSTAL MARK - 0xA894: 0x301D, //REVERSED DOUBLE PRIME QUOTATION MARK - 0xA895: 0x301E, //DOUBLE PRIME QUOTATION MARK - 0xA8A1: 0x0101, //LATIN SMALL LETTER A WITH MACRON - 0xA8A2: 0x00E1, //LATIN SMALL LETTER A WITH ACUTE - 0xA8A3: 0x01CE, //LATIN SMALL LETTER A WITH CARON - 0xA8A4: 0x00E0, //LATIN SMALL LETTER A WITH GRAVE - 0xA8A5: 0x0113, //LATIN SMALL LETTER E WITH MACRON - 0xA8A6: 0x00E9, //LATIN SMALL LETTER E WITH ACUTE - 0xA8A7: 0x011B, //LATIN SMALL LETTER E WITH CARON - 0xA8A8: 0x00E8, //LATIN SMALL LETTER E WITH GRAVE - 0xA8A9: 0x012B, //LATIN SMALL LETTER I WITH MACRON - 0xA8AA: 0x00ED, //LATIN SMALL LETTER I WITH ACUTE - 0xA8AB: 0x01D0, //LATIN SMALL LETTER I WITH CARON - 0xA8AC: 0x00EC, //LATIN SMALL LETTER I WITH GRAVE - 0xA8AD: 0x014D, //LATIN SMALL LETTER O WITH MACRON - 0xA8AE: 0x00F3, //LATIN SMALL LETTER O WITH ACUTE - 0xA8AF: 0x01D2, //LATIN SMALL LETTER O WITH CARON - 0xA8B0: 0x00F2, //LATIN SMALL LETTER O WITH GRAVE - 0xA8B1: 0x016B, //LATIN SMALL LETTER U WITH MACRON - 0xA8B2: 0x00FA, //LATIN SMALL LETTER U WITH ACUTE - 0xA8B3: 0x01D4, //LATIN SMALL LETTER U WITH CARON - 0xA8B4: 0x00F9, //LATIN SMALL LETTER U WITH GRAVE - 0xA8B5: 0x01D6, //LATIN SMALL LETTER U WITH DIAERESIS AND MACRON - 0xA8B6: 0x01D8, //LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE - 0xA8B7: 0x01DA, //LATIN SMALL LETTER U WITH DIAERESIS AND CARON - 0xA8B8: 0x01DC, //LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE - 0xA8B9: 0x00FC, //LATIN SMALL LETTER U WITH DIAERESIS - 0xA8BA: 0x00EA, //LATIN SMALL LETTER E WITH CIRCUMFLEX - 0xA8BB: 0x0251, //LATIN SMALL LETTER ALPHA - 0xA8BD: 0x0144, //LATIN SMALL LETTER N WITH ACUTE - 0xA8BE: 0x0148, //LATIN SMALL LETTER N WITH CARON - 0xA8C0: 0x0261, //LATIN SMALL LETTER SCRIPT G - 0xA8C5: 0x3105, //BOPOMOFO LETTER B - 0xA8C6: 0x3106, //BOPOMOFO LETTER P - 0xA8C7: 0x3107, //BOPOMOFO LETTER M - 0xA8C8: 0x3108, //BOPOMOFO LETTER F - 0xA8C9: 0x3109, //BOPOMOFO LETTER D - 0xA8CA: 0x310A, //BOPOMOFO LETTER T - 0xA8CB: 0x310B, //BOPOMOFO LETTER N - 0xA8CC: 0x310C, //BOPOMOFO LETTER L - 0xA8CD: 0x310D, //BOPOMOFO LETTER G - 0xA8CE: 0x310E, //BOPOMOFO LETTER K - 0xA8CF: 0x310F, //BOPOMOFO LETTER H - 0xA8D0: 0x3110, //BOPOMOFO LETTER J - 0xA8D1: 0x3111, //BOPOMOFO LETTER Q - 0xA8D2: 0x3112, //BOPOMOFO LETTER X - 0xA8D3: 0x3113, //BOPOMOFO LETTER ZH - 0xA8D4: 0x3114, //BOPOMOFO LETTER CH - 0xA8D5: 0x3115, //BOPOMOFO LETTER SH - 0xA8D6: 0x3116, //BOPOMOFO LETTER R - 0xA8D7: 0x3117, //BOPOMOFO LETTER Z - 0xA8D8: 0x3118, //BOPOMOFO LETTER C - 0xA8D9: 0x3119, //BOPOMOFO LETTER S - 0xA8DA: 0x311A, //BOPOMOFO LETTER A - 0xA8DB: 0x311B, //BOPOMOFO LETTER O - 0xA8DC: 0x311C, //BOPOMOFO LETTER E - 0xA8DD: 0x311D, //BOPOMOFO LETTER EH - 0xA8DE: 0x311E, //BOPOMOFO LETTER AI - 0xA8DF: 0x311F, //BOPOMOFO LETTER EI - 0xA8E0: 0x3120, //BOPOMOFO LETTER AU - 0xA8E1: 0x3121, //BOPOMOFO LETTER OU - 0xA8E2: 0x3122, //BOPOMOFO LETTER AN - 0xA8E3: 0x3123, //BOPOMOFO LETTER EN - 0xA8E4: 0x3124, //BOPOMOFO LETTER ANG - 0xA8E5: 0x3125, //BOPOMOFO LETTER ENG - 0xA8E6: 0x3126, //BOPOMOFO LETTER ER - 0xA8E7: 0x3127, //BOPOMOFO LETTER I - 0xA8E8: 0x3128, //BOPOMOFO LETTER U - 0xA8E9: 0x3129, //BOPOMOFO LETTER IU - 0xA940: 0x3021, //HANGZHOU NUMERAL ONE - 0xA941: 0x3022, //HANGZHOU NUMERAL TWO - 0xA942: 0x3023, //HANGZHOU NUMERAL THREE - 0xA943: 0x3024, //HANGZHOU NUMERAL FOUR - 0xA944: 0x3025, //HANGZHOU NUMERAL FIVE - 0xA945: 0x3026, //HANGZHOU NUMERAL SIX - 0xA946: 0x3027, //HANGZHOU NUMERAL SEVEN - 0xA947: 0x3028, //HANGZHOU NUMERAL EIGHT - 0xA948: 0x3029, //HANGZHOU NUMERAL NINE - 0xA949: 0x32A3, //CIRCLED IDEOGRAPH CORRECT - 0xA94A: 0x338E, //SQUARE MG - 0xA94B: 0x338F, //SQUARE KG - 0xA94C: 0x339C, //SQUARE MM - 0xA94D: 0x339D, //SQUARE CM - 0xA94E: 0x339E, //SQUARE KM - 0xA94F: 0x33A1, //SQUARE M SQUARED - 0xA950: 0x33C4, //SQUARE CC - 0xA951: 0x33CE, //SQUARE KM CAPITAL - 0xA952: 0x33D1, //SQUARE LN - 0xA953: 0x33D2, //SQUARE LOG - 0xA954: 0x33D5, //SQUARE MIL - 0xA955: 0xFE30, //PRESENTATION FORM FOR VERTICAL TWO DOT LEADER - 0xA956: 0xFFE2, //FULLWIDTH NOT SIGN - 0xA957: 0xFFE4, //FULLWIDTH BROKEN BAR - 0xA959: 0x2121, //TELEPHONE SIGN - 0xA95A: 0x3231, //PARENTHESIZED IDEOGRAPH STOCK - 0xA95C: 0x2010, //HYPHEN - 0xA960: 0x30FC, //KATAKANA-HIRAGANA PROLONGED SOUND MARK - 0xA961: 0x309B, //KATAKANA-HIRAGANA VOICED SOUND MARK - 0xA962: 0x309C, //KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK - 0xA963: 0x30FD, //KATAKANA ITERATION MARK - 0xA964: 0x30FE, //KATAKANA VOICED ITERATION MARK - 0xA965: 0x3006, //IDEOGRAPHIC CLOSING MARK - 0xA966: 0x309D, //HIRAGANA ITERATION MARK - 0xA967: 0x309E, //HIRAGANA VOICED ITERATION MARK - 0xA968: 0xFE49, //DASHED OVERLINE - 0xA969: 0xFE4A, //CENTRELINE OVERLINE - 0xA96A: 0xFE4B, //WAVY OVERLINE - 0xA96B: 0xFE4C, //DOUBLE WAVY OVERLINE - 0xA96C: 0xFE4D, //DASHED LOW LINE - 0xA96D: 0xFE4E, //CENTRELINE LOW LINE - 0xA96E: 0xFE4F, //WAVY LOW LINE - 0xA96F: 0xFE50, //SMALL COMMA - 0xA970: 0xFE51, //SMALL IDEOGRAPHIC COMMA - 0xA971: 0xFE52, //SMALL FULL STOP - 0xA972: 0xFE54, //SMALL SEMICOLON - 0xA973: 0xFE55, //SMALL COLON - 0xA974: 0xFE56, //SMALL QUESTION MARK - 0xA975: 0xFE57, //SMALL EXCLAMATION MARK - 0xA976: 0xFE59, //SMALL LEFT PARENTHESIS - 0xA977: 0xFE5A, //SMALL RIGHT PARENTHESIS - 0xA978: 0xFE5B, //SMALL LEFT CURLY BRACKET - 0xA979: 0xFE5C, //SMALL RIGHT CURLY BRACKET - 0xA97A: 0xFE5D, //SMALL LEFT TORTOISE SHELL BRACKET - 0xA97B: 0xFE5E, //SMALL RIGHT TORTOISE SHELL BRACKET - 0xA97C: 0xFE5F, //SMALL NUMBER SIGN - 0xA97D: 0xFE60, //SMALL AMPERSAND - 0xA97E: 0xFE61, //SMALL ASTERISK - 0xA980: 0xFE62, //SMALL PLUS SIGN - 0xA981: 0xFE63, //SMALL HYPHEN-MINUS - 0xA982: 0xFE64, //SMALL LESS-THAN SIGN - 0xA983: 0xFE65, //SMALL GREATER-THAN SIGN - 0xA984: 0xFE66, //SMALL EQUALS SIGN - 0xA985: 0xFE68, //SMALL REVERSE SOLIDUS - 0xA986: 0xFE69, //SMALL DOLLAR SIGN - 0xA987: 0xFE6A, //SMALL PERCENT SIGN - 0xA988: 0xFE6B, //SMALL COMMERCIAL AT - 0xA996: 0x3007, //IDEOGRAPHIC NUMBER ZERO - 0xA9A4: 0x2500, //BOX DRAWINGS LIGHT HORIZONTAL - 0xA9A5: 0x2501, //BOX DRAWINGS HEAVY HORIZONTAL - 0xA9A6: 0x2502, //BOX DRAWINGS LIGHT VERTICAL - 0xA9A7: 0x2503, //BOX DRAWINGS HEAVY VERTICAL - 0xA9A8: 0x2504, //BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL - 0xA9A9: 0x2505, //BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL - 0xA9AA: 0x2506, //BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL - 0xA9AB: 0x2507, //BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL - 0xA9AC: 0x2508, //BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL - 0xA9AD: 0x2509, //BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL - 0xA9AE: 0x250A, //BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL - 0xA9AF: 0x250B, //BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL - 0xA9B0: 0x250C, //BOX DRAWINGS LIGHT DOWN AND RIGHT - 0xA9B1: 0x250D, //BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY - 0xA9B2: 0x250E, //BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT - 0xA9B3: 0x250F, //BOX DRAWINGS HEAVY DOWN AND RIGHT - 0xA9B4: 0x2510, //BOX DRAWINGS LIGHT DOWN AND LEFT - 0xA9B5: 0x2511, //BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY - 0xA9B6: 0x2512, //BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT - 0xA9B7: 0x2513, //BOX DRAWINGS HEAVY DOWN AND LEFT - 0xA9B8: 0x2514, //BOX DRAWINGS LIGHT UP AND RIGHT - 0xA9B9: 0x2515, //BOX DRAWINGS UP LIGHT AND RIGHT HEAVY - 0xA9BA: 0x2516, //BOX DRAWINGS UP HEAVY AND RIGHT LIGHT - 0xA9BB: 0x2517, //BOX DRAWINGS HEAVY UP AND RIGHT - 0xA9BC: 0x2518, //BOX DRAWINGS LIGHT UP AND LEFT - 0xA9BD: 0x2519, //BOX DRAWINGS UP LIGHT AND LEFT HEAVY - 0xA9BE: 0x251A, //BOX DRAWINGS UP HEAVY AND LEFT LIGHT - 0xA9BF: 0x251B, //BOX DRAWINGS HEAVY UP AND LEFT - 0xA9C0: 0x251C, //BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0xA9C1: 0x251D, //BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY - 0xA9C2: 0x251E, //BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT - 0xA9C3: 0x251F, //BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT - 0xA9C4: 0x2520, //BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT - 0xA9C5: 0x2521, //BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY - 0xA9C6: 0x2522, //BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY - 0xA9C7: 0x2523, //BOX DRAWINGS HEAVY VERTICAL AND RIGHT - 0xA9C8: 0x2524, //BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0xA9C9: 0x2525, //BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY - 0xA9CA: 0x2526, //BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT - 0xA9CB: 0x2527, //BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT - 0xA9CC: 0x2528, //BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT - 0xA9CD: 0x2529, //BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY - 0xA9CE: 0x252A, //BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY - 0xA9CF: 0x252B, //BOX DRAWINGS HEAVY VERTICAL AND LEFT - 0xA9D0: 0x252C, //BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0xA9D1: 0x252D, //BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT - 0xA9D2: 0x252E, //BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT - 0xA9D3: 0x252F, //BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY - 0xA9D4: 0x2530, //BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT - 0xA9D5: 0x2531, //BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY - 0xA9D6: 0x2532, //BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY - 0xA9D7: 0x2533, //BOX DRAWINGS HEAVY DOWN AND HORIZONTAL - 0xA9D8: 0x2534, //BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0xA9D9: 0x2535, //BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT - 0xA9DA: 0x2536, //BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT - 0xA9DB: 0x2537, //BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY - 0xA9DC: 0x2538, //BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT - 0xA9DD: 0x2539, //BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY - 0xA9DE: 0x253A, //BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY - 0xA9DF: 0x253B, //BOX DRAWINGS HEAVY UP AND HORIZONTAL - 0xA9E0: 0x253C, //BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0xA9E1: 0x253D, //BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT - 0xA9E2: 0x253E, //BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT - 0xA9E3: 0x253F, //BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY - 0xA9E4: 0x2540, //BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT - 0xA9E5: 0x2541, //BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT - 0xA9E6: 0x2542, //BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT - 0xA9E7: 0x2543, //BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT - 0xA9E8: 0x2544, //BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT - 0xA9E9: 0x2545, //BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT - 0xA9EA: 0x2546, //BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT - 0xA9EB: 0x2547, //BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY - 0xA9EC: 0x2548, //BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY - 0xA9ED: 0x2549, //BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY - 0xA9EE: 0x254A, //BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY - 0xA9EF: 0x254B, //BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL - 0xAA40: 0x72DC, //CJK UNIFIED IDEOGRAPH - 0xAA41: 0x72DD, //CJK UNIFIED IDEOGRAPH - 0xAA42: 0x72DF, //CJK UNIFIED IDEOGRAPH - 0xAA43: 0x72E2, //CJK UNIFIED IDEOGRAPH - 0xAA44: 0x72E3, //CJK UNIFIED IDEOGRAPH - 0xAA45: 0x72E4, //CJK UNIFIED IDEOGRAPH - 0xAA46: 0x72E5, //CJK UNIFIED IDEOGRAPH - 0xAA47: 0x72E6, //CJK UNIFIED IDEOGRAPH - 0xAA48: 0x72E7, //CJK UNIFIED IDEOGRAPH - 0xAA49: 0x72EA, //CJK UNIFIED IDEOGRAPH - 0xAA4A: 0x72EB, //CJK UNIFIED IDEOGRAPH - 0xAA4B: 0x72F5, //CJK UNIFIED IDEOGRAPH - 0xAA4C: 0x72F6, //CJK UNIFIED IDEOGRAPH - 0xAA4D: 0x72F9, //CJK UNIFIED IDEOGRAPH - 0xAA4E: 0x72FD, //CJK UNIFIED IDEOGRAPH - 0xAA4F: 0x72FE, //CJK UNIFIED IDEOGRAPH - 0xAA50: 0x72FF, //CJK UNIFIED IDEOGRAPH - 0xAA51: 0x7300, //CJK UNIFIED IDEOGRAPH - 0xAA52: 0x7302, //CJK UNIFIED IDEOGRAPH - 0xAA53: 0x7304, //CJK UNIFIED IDEOGRAPH - 0xAA54: 0x7305, //CJK UNIFIED IDEOGRAPH - 0xAA55: 0x7306, //CJK UNIFIED IDEOGRAPH - 0xAA56: 0x7307, //CJK UNIFIED IDEOGRAPH - 0xAA57: 0x7308, //CJK UNIFIED IDEOGRAPH - 0xAA58: 0x7309, //CJK UNIFIED IDEOGRAPH - 0xAA59: 0x730B, //CJK UNIFIED IDEOGRAPH - 0xAA5A: 0x730C, //CJK UNIFIED IDEOGRAPH - 0xAA5B: 0x730D, //CJK UNIFIED IDEOGRAPH - 0xAA5C: 0x730F, //CJK UNIFIED IDEOGRAPH - 0xAA5D: 0x7310, //CJK UNIFIED IDEOGRAPH - 0xAA5E: 0x7311, //CJK UNIFIED IDEOGRAPH - 0xAA5F: 0x7312, //CJK UNIFIED IDEOGRAPH - 0xAA60: 0x7314, //CJK UNIFIED IDEOGRAPH - 0xAA61: 0x7318, //CJK UNIFIED IDEOGRAPH - 0xAA62: 0x7319, //CJK UNIFIED IDEOGRAPH - 0xAA63: 0x731A, //CJK UNIFIED IDEOGRAPH - 0xAA64: 0x731F, //CJK UNIFIED IDEOGRAPH - 0xAA65: 0x7320, //CJK UNIFIED IDEOGRAPH - 0xAA66: 0x7323, //CJK UNIFIED IDEOGRAPH - 0xAA67: 0x7324, //CJK UNIFIED IDEOGRAPH - 0xAA68: 0x7326, //CJK UNIFIED IDEOGRAPH - 0xAA69: 0x7327, //CJK UNIFIED IDEOGRAPH - 0xAA6A: 0x7328, //CJK UNIFIED IDEOGRAPH - 0xAA6B: 0x732D, //CJK UNIFIED IDEOGRAPH - 0xAA6C: 0x732F, //CJK UNIFIED IDEOGRAPH - 0xAA6D: 0x7330, //CJK UNIFIED IDEOGRAPH - 0xAA6E: 0x7332, //CJK UNIFIED IDEOGRAPH - 0xAA6F: 0x7333, //CJK UNIFIED IDEOGRAPH - 0xAA70: 0x7335, //CJK UNIFIED IDEOGRAPH - 0xAA71: 0x7336, //CJK UNIFIED IDEOGRAPH - 0xAA72: 0x733A, //CJK UNIFIED IDEOGRAPH - 0xAA73: 0x733B, //CJK UNIFIED IDEOGRAPH - 0xAA74: 0x733C, //CJK UNIFIED IDEOGRAPH - 0xAA75: 0x733D, //CJK UNIFIED IDEOGRAPH - 0xAA76: 0x7340, //CJK UNIFIED IDEOGRAPH - 0xAA77: 0x7341, //CJK UNIFIED IDEOGRAPH - 0xAA78: 0x7342, //CJK UNIFIED IDEOGRAPH - 0xAA79: 0x7343, //CJK UNIFIED IDEOGRAPH - 0xAA7A: 0x7344, //CJK UNIFIED IDEOGRAPH - 0xAA7B: 0x7345, //CJK UNIFIED IDEOGRAPH - 0xAA7C: 0x7346, //CJK UNIFIED IDEOGRAPH - 0xAA7D: 0x7347, //CJK UNIFIED IDEOGRAPH - 0xAA7E: 0x7348, //CJK UNIFIED IDEOGRAPH - 0xAA80: 0x7349, //CJK UNIFIED IDEOGRAPH - 0xAA81: 0x734A, //CJK UNIFIED IDEOGRAPH - 0xAA82: 0x734B, //CJK UNIFIED IDEOGRAPH - 0xAA83: 0x734C, //CJK UNIFIED IDEOGRAPH - 0xAA84: 0x734E, //CJK UNIFIED IDEOGRAPH - 0xAA85: 0x734F, //CJK UNIFIED IDEOGRAPH - 0xAA86: 0x7351, //CJK UNIFIED IDEOGRAPH - 0xAA87: 0x7353, //CJK UNIFIED IDEOGRAPH - 0xAA88: 0x7354, //CJK UNIFIED IDEOGRAPH - 0xAA89: 0x7355, //CJK UNIFIED IDEOGRAPH - 0xAA8A: 0x7356, //CJK UNIFIED IDEOGRAPH - 0xAA8B: 0x7358, //CJK UNIFIED IDEOGRAPH - 0xAA8C: 0x7359, //CJK UNIFIED IDEOGRAPH - 0xAA8D: 0x735A, //CJK UNIFIED IDEOGRAPH - 0xAA8E: 0x735B, //CJK UNIFIED IDEOGRAPH - 0xAA8F: 0x735C, //CJK UNIFIED IDEOGRAPH - 0xAA90: 0x735D, //CJK UNIFIED IDEOGRAPH - 0xAA91: 0x735E, //CJK UNIFIED IDEOGRAPH - 0xAA92: 0x735F, //CJK UNIFIED IDEOGRAPH - 0xAA93: 0x7361, //CJK UNIFIED IDEOGRAPH - 0xAA94: 0x7362, //CJK UNIFIED IDEOGRAPH - 0xAA95: 0x7363, //CJK UNIFIED IDEOGRAPH - 0xAA96: 0x7364, //CJK UNIFIED IDEOGRAPH - 0xAA97: 0x7365, //CJK UNIFIED IDEOGRAPH - 0xAA98: 0x7366, //CJK UNIFIED IDEOGRAPH - 0xAA99: 0x7367, //CJK UNIFIED IDEOGRAPH - 0xAA9A: 0x7368, //CJK UNIFIED IDEOGRAPH - 0xAA9B: 0x7369, //CJK UNIFIED IDEOGRAPH - 0xAA9C: 0x736A, //CJK UNIFIED IDEOGRAPH - 0xAA9D: 0x736B, //CJK UNIFIED IDEOGRAPH - 0xAA9E: 0x736E, //CJK UNIFIED IDEOGRAPH - 0xAA9F: 0x7370, //CJK UNIFIED IDEOGRAPH - 0xAAA0: 0x7371, //CJK UNIFIED IDEOGRAPH - 0xAB40: 0x7372, //CJK UNIFIED IDEOGRAPH - 0xAB41: 0x7373, //CJK UNIFIED IDEOGRAPH - 0xAB42: 0x7374, //CJK UNIFIED IDEOGRAPH - 0xAB43: 0x7375, //CJK UNIFIED IDEOGRAPH - 0xAB44: 0x7376, //CJK UNIFIED IDEOGRAPH - 0xAB45: 0x7377, //CJK UNIFIED IDEOGRAPH - 0xAB46: 0x7378, //CJK UNIFIED IDEOGRAPH - 0xAB47: 0x7379, //CJK UNIFIED IDEOGRAPH - 0xAB48: 0x737A, //CJK UNIFIED IDEOGRAPH - 0xAB49: 0x737B, //CJK UNIFIED IDEOGRAPH - 0xAB4A: 0x737C, //CJK UNIFIED IDEOGRAPH - 0xAB4B: 0x737D, //CJK UNIFIED IDEOGRAPH - 0xAB4C: 0x737F, //CJK UNIFIED IDEOGRAPH - 0xAB4D: 0x7380, //CJK UNIFIED IDEOGRAPH - 0xAB4E: 0x7381, //CJK UNIFIED IDEOGRAPH - 0xAB4F: 0x7382, //CJK UNIFIED IDEOGRAPH - 0xAB50: 0x7383, //CJK UNIFIED IDEOGRAPH - 0xAB51: 0x7385, //CJK UNIFIED IDEOGRAPH - 0xAB52: 0x7386, //CJK UNIFIED IDEOGRAPH - 0xAB53: 0x7388, //CJK UNIFIED IDEOGRAPH - 0xAB54: 0x738A, //CJK UNIFIED IDEOGRAPH - 0xAB55: 0x738C, //CJK UNIFIED IDEOGRAPH - 0xAB56: 0x738D, //CJK UNIFIED IDEOGRAPH - 0xAB57: 0x738F, //CJK UNIFIED IDEOGRAPH - 0xAB58: 0x7390, //CJK UNIFIED IDEOGRAPH - 0xAB59: 0x7392, //CJK UNIFIED IDEOGRAPH - 0xAB5A: 0x7393, //CJK UNIFIED IDEOGRAPH - 0xAB5B: 0x7394, //CJK UNIFIED IDEOGRAPH - 0xAB5C: 0x7395, //CJK UNIFIED IDEOGRAPH - 0xAB5D: 0x7397, //CJK UNIFIED IDEOGRAPH - 0xAB5E: 0x7398, //CJK UNIFIED IDEOGRAPH - 0xAB5F: 0x7399, //CJK UNIFIED IDEOGRAPH - 0xAB60: 0x739A, //CJK UNIFIED IDEOGRAPH - 0xAB61: 0x739C, //CJK UNIFIED IDEOGRAPH - 0xAB62: 0x739D, //CJK UNIFIED IDEOGRAPH - 0xAB63: 0x739E, //CJK UNIFIED IDEOGRAPH - 0xAB64: 0x73A0, //CJK UNIFIED IDEOGRAPH - 0xAB65: 0x73A1, //CJK UNIFIED IDEOGRAPH - 0xAB66: 0x73A3, //CJK UNIFIED IDEOGRAPH - 0xAB67: 0x73A4, //CJK UNIFIED IDEOGRAPH - 0xAB68: 0x73A5, //CJK UNIFIED IDEOGRAPH - 0xAB69: 0x73A6, //CJK UNIFIED IDEOGRAPH - 0xAB6A: 0x73A7, //CJK UNIFIED IDEOGRAPH - 0xAB6B: 0x73A8, //CJK UNIFIED IDEOGRAPH - 0xAB6C: 0x73AA, //CJK UNIFIED IDEOGRAPH - 0xAB6D: 0x73AC, //CJK UNIFIED IDEOGRAPH - 0xAB6E: 0x73AD, //CJK UNIFIED IDEOGRAPH - 0xAB6F: 0x73B1, //CJK UNIFIED IDEOGRAPH - 0xAB70: 0x73B4, //CJK UNIFIED IDEOGRAPH - 0xAB71: 0x73B5, //CJK UNIFIED IDEOGRAPH - 0xAB72: 0x73B6, //CJK UNIFIED IDEOGRAPH - 0xAB73: 0x73B8, //CJK UNIFIED IDEOGRAPH - 0xAB74: 0x73B9, //CJK UNIFIED IDEOGRAPH - 0xAB75: 0x73BC, //CJK UNIFIED IDEOGRAPH - 0xAB76: 0x73BD, //CJK UNIFIED IDEOGRAPH - 0xAB77: 0x73BE, //CJK UNIFIED IDEOGRAPH - 0xAB78: 0x73BF, //CJK UNIFIED IDEOGRAPH - 0xAB79: 0x73C1, //CJK UNIFIED IDEOGRAPH - 0xAB7A: 0x73C3, //CJK UNIFIED IDEOGRAPH - 0xAB7B: 0x73C4, //CJK UNIFIED IDEOGRAPH - 0xAB7C: 0x73C5, //CJK UNIFIED IDEOGRAPH - 0xAB7D: 0x73C6, //CJK UNIFIED IDEOGRAPH - 0xAB7E: 0x73C7, //CJK UNIFIED IDEOGRAPH - 0xAB80: 0x73CB, //CJK UNIFIED IDEOGRAPH - 0xAB81: 0x73CC, //CJK UNIFIED IDEOGRAPH - 0xAB82: 0x73CE, //CJK UNIFIED IDEOGRAPH - 0xAB83: 0x73D2, //CJK UNIFIED IDEOGRAPH - 0xAB84: 0x73D3, //CJK UNIFIED IDEOGRAPH - 0xAB85: 0x73D4, //CJK UNIFIED IDEOGRAPH - 0xAB86: 0x73D5, //CJK UNIFIED IDEOGRAPH - 0xAB87: 0x73D6, //CJK UNIFIED IDEOGRAPH - 0xAB88: 0x73D7, //CJK UNIFIED IDEOGRAPH - 0xAB89: 0x73D8, //CJK UNIFIED IDEOGRAPH - 0xAB8A: 0x73DA, //CJK UNIFIED IDEOGRAPH - 0xAB8B: 0x73DB, //CJK UNIFIED IDEOGRAPH - 0xAB8C: 0x73DC, //CJK UNIFIED IDEOGRAPH - 0xAB8D: 0x73DD, //CJK UNIFIED IDEOGRAPH - 0xAB8E: 0x73DF, //CJK UNIFIED IDEOGRAPH - 0xAB8F: 0x73E1, //CJK UNIFIED IDEOGRAPH - 0xAB90: 0x73E2, //CJK UNIFIED IDEOGRAPH - 0xAB91: 0x73E3, //CJK UNIFIED IDEOGRAPH - 0xAB92: 0x73E4, //CJK UNIFIED IDEOGRAPH - 0xAB93: 0x73E6, //CJK UNIFIED IDEOGRAPH - 0xAB94: 0x73E8, //CJK UNIFIED IDEOGRAPH - 0xAB95: 0x73EA, //CJK UNIFIED IDEOGRAPH - 0xAB96: 0x73EB, //CJK UNIFIED IDEOGRAPH - 0xAB97: 0x73EC, //CJK UNIFIED IDEOGRAPH - 0xAB98: 0x73EE, //CJK UNIFIED IDEOGRAPH - 0xAB99: 0x73EF, //CJK UNIFIED IDEOGRAPH - 0xAB9A: 0x73F0, //CJK UNIFIED IDEOGRAPH - 0xAB9B: 0x73F1, //CJK UNIFIED IDEOGRAPH - 0xAB9C: 0x73F3, //CJK UNIFIED IDEOGRAPH - 0xAB9D: 0x73F4, //CJK UNIFIED IDEOGRAPH - 0xAB9E: 0x73F5, //CJK UNIFIED IDEOGRAPH - 0xAB9F: 0x73F6, //CJK UNIFIED IDEOGRAPH - 0xABA0: 0x73F7, //CJK UNIFIED IDEOGRAPH - 0xAC40: 0x73F8, //CJK UNIFIED IDEOGRAPH - 0xAC41: 0x73F9, //CJK UNIFIED IDEOGRAPH - 0xAC42: 0x73FA, //CJK UNIFIED IDEOGRAPH - 0xAC43: 0x73FB, //CJK UNIFIED IDEOGRAPH - 0xAC44: 0x73FC, //CJK UNIFIED IDEOGRAPH - 0xAC45: 0x73FD, //CJK UNIFIED IDEOGRAPH - 0xAC46: 0x73FE, //CJK UNIFIED IDEOGRAPH - 0xAC47: 0x73FF, //CJK UNIFIED IDEOGRAPH - 0xAC48: 0x7400, //CJK UNIFIED IDEOGRAPH - 0xAC49: 0x7401, //CJK UNIFIED IDEOGRAPH - 0xAC4A: 0x7402, //CJK UNIFIED IDEOGRAPH - 0xAC4B: 0x7404, //CJK UNIFIED IDEOGRAPH - 0xAC4C: 0x7407, //CJK UNIFIED IDEOGRAPH - 0xAC4D: 0x7408, //CJK UNIFIED IDEOGRAPH - 0xAC4E: 0x740B, //CJK UNIFIED IDEOGRAPH - 0xAC4F: 0x740C, //CJK UNIFIED IDEOGRAPH - 0xAC50: 0x740D, //CJK UNIFIED IDEOGRAPH - 0xAC51: 0x740E, //CJK UNIFIED IDEOGRAPH - 0xAC52: 0x7411, //CJK UNIFIED IDEOGRAPH - 0xAC53: 0x7412, //CJK UNIFIED IDEOGRAPH - 0xAC54: 0x7413, //CJK UNIFIED IDEOGRAPH - 0xAC55: 0x7414, //CJK UNIFIED IDEOGRAPH - 0xAC56: 0x7415, //CJK UNIFIED IDEOGRAPH - 0xAC57: 0x7416, //CJK UNIFIED IDEOGRAPH - 0xAC58: 0x7417, //CJK UNIFIED IDEOGRAPH - 0xAC59: 0x7418, //CJK UNIFIED IDEOGRAPH - 0xAC5A: 0x7419, //CJK UNIFIED IDEOGRAPH - 0xAC5B: 0x741C, //CJK UNIFIED IDEOGRAPH - 0xAC5C: 0x741D, //CJK UNIFIED IDEOGRAPH - 0xAC5D: 0x741E, //CJK UNIFIED IDEOGRAPH - 0xAC5E: 0x741F, //CJK UNIFIED IDEOGRAPH - 0xAC5F: 0x7420, //CJK UNIFIED IDEOGRAPH - 0xAC60: 0x7421, //CJK UNIFIED IDEOGRAPH - 0xAC61: 0x7423, //CJK UNIFIED IDEOGRAPH - 0xAC62: 0x7424, //CJK UNIFIED IDEOGRAPH - 0xAC63: 0x7427, //CJK UNIFIED IDEOGRAPH - 0xAC64: 0x7429, //CJK UNIFIED IDEOGRAPH - 0xAC65: 0x742B, //CJK UNIFIED IDEOGRAPH - 0xAC66: 0x742D, //CJK UNIFIED IDEOGRAPH - 0xAC67: 0x742F, //CJK UNIFIED IDEOGRAPH - 0xAC68: 0x7431, //CJK UNIFIED IDEOGRAPH - 0xAC69: 0x7432, //CJK UNIFIED IDEOGRAPH - 0xAC6A: 0x7437, //CJK UNIFIED IDEOGRAPH - 0xAC6B: 0x7438, //CJK UNIFIED IDEOGRAPH - 0xAC6C: 0x7439, //CJK UNIFIED IDEOGRAPH - 0xAC6D: 0x743A, //CJK UNIFIED IDEOGRAPH - 0xAC6E: 0x743B, //CJK UNIFIED IDEOGRAPH - 0xAC6F: 0x743D, //CJK UNIFIED IDEOGRAPH - 0xAC70: 0x743E, //CJK UNIFIED IDEOGRAPH - 0xAC71: 0x743F, //CJK UNIFIED IDEOGRAPH - 0xAC72: 0x7440, //CJK UNIFIED IDEOGRAPH - 0xAC73: 0x7442, //CJK UNIFIED IDEOGRAPH - 0xAC74: 0x7443, //CJK UNIFIED IDEOGRAPH - 0xAC75: 0x7444, //CJK UNIFIED IDEOGRAPH - 0xAC76: 0x7445, //CJK UNIFIED IDEOGRAPH - 0xAC77: 0x7446, //CJK UNIFIED IDEOGRAPH - 0xAC78: 0x7447, //CJK UNIFIED IDEOGRAPH - 0xAC79: 0x7448, //CJK UNIFIED IDEOGRAPH - 0xAC7A: 0x7449, //CJK UNIFIED IDEOGRAPH - 0xAC7B: 0x744A, //CJK UNIFIED IDEOGRAPH - 0xAC7C: 0x744B, //CJK UNIFIED IDEOGRAPH - 0xAC7D: 0x744C, //CJK UNIFIED IDEOGRAPH - 0xAC7E: 0x744D, //CJK UNIFIED IDEOGRAPH - 0xAC80: 0x744E, //CJK UNIFIED IDEOGRAPH - 0xAC81: 0x744F, //CJK UNIFIED IDEOGRAPH - 0xAC82: 0x7450, //CJK UNIFIED IDEOGRAPH - 0xAC83: 0x7451, //CJK UNIFIED IDEOGRAPH - 0xAC84: 0x7452, //CJK UNIFIED IDEOGRAPH - 0xAC85: 0x7453, //CJK UNIFIED IDEOGRAPH - 0xAC86: 0x7454, //CJK UNIFIED IDEOGRAPH - 0xAC87: 0x7456, //CJK UNIFIED IDEOGRAPH - 0xAC88: 0x7458, //CJK UNIFIED IDEOGRAPH - 0xAC89: 0x745D, //CJK UNIFIED IDEOGRAPH - 0xAC8A: 0x7460, //CJK UNIFIED IDEOGRAPH - 0xAC8B: 0x7461, //CJK UNIFIED IDEOGRAPH - 0xAC8C: 0x7462, //CJK UNIFIED IDEOGRAPH - 0xAC8D: 0x7463, //CJK UNIFIED IDEOGRAPH - 0xAC8E: 0x7464, //CJK UNIFIED IDEOGRAPH - 0xAC8F: 0x7465, //CJK UNIFIED IDEOGRAPH - 0xAC90: 0x7466, //CJK UNIFIED IDEOGRAPH - 0xAC91: 0x7467, //CJK UNIFIED IDEOGRAPH - 0xAC92: 0x7468, //CJK UNIFIED IDEOGRAPH - 0xAC93: 0x7469, //CJK UNIFIED IDEOGRAPH - 0xAC94: 0x746A, //CJK UNIFIED IDEOGRAPH - 0xAC95: 0x746B, //CJK UNIFIED IDEOGRAPH - 0xAC96: 0x746C, //CJK UNIFIED IDEOGRAPH - 0xAC97: 0x746E, //CJK UNIFIED IDEOGRAPH - 0xAC98: 0x746F, //CJK UNIFIED IDEOGRAPH - 0xAC99: 0x7471, //CJK UNIFIED IDEOGRAPH - 0xAC9A: 0x7472, //CJK UNIFIED IDEOGRAPH - 0xAC9B: 0x7473, //CJK UNIFIED IDEOGRAPH - 0xAC9C: 0x7474, //CJK UNIFIED IDEOGRAPH - 0xAC9D: 0x7475, //CJK UNIFIED IDEOGRAPH - 0xAC9E: 0x7478, //CJK UNIFIED IDEOGRAPH - 0xAC9F: 0x7479, //CJK UNIFIED IDEOGRAPH - 0xACA0: 0x747A, //CJK UNIFIED IDEOGRAPH - 0xAD40: 0x747B, //CJK UNIFIED IDEOGRAPH - 0xAD41: 0x747C, //CJK UNIFIED IDEOGRAPH - 0xAD42: 0x747D, //CJK UNIFIED IDEOGRAPH - 0xAD43: 0x747F, //CJK UNIFIED IDEOGRAPH - 0xAD44: 0x7482, //CJK UNIFIED IDEOGRAPH - 0xAD45: 0x7484, //CJK UNIFIED IDEOGRAPH - 0xAD46: 0x7485, //CJK UNIFIED IDEOGRAPH - 0xAD47: 0x7486, //CJK UNIFIED IDEOGRAPH - 0xAD48: 0x7488, //CJK UNIFIED IDEOGRAPH - 0xAD49: 0x7489, //CJK UNIFIED IDEOGRAPH - 0xAD4A: 0x748A, //CJK UNIFIED IDEOGRAPH - 0xAD4B: 0x748C, //CJK UNIFIED IDEOGRAPH - 0xAD4C: 0x748D, //CJK UNIFIED IDEOGRAPH - 0xAD4D: 0x748F, //CJK UNIFIED IDEOGRAPH - 0xAD4E: 0x7491, //CJK UNIFIED IDEOGRAPH - 0xAD4F: 0x7492, //CJK UNIFIED IDEOGRAPH - 0xAD50: 0x7493, //CJK UNIFIED IDEOGRAPH - 0xAD51: 0x7494, //CJK UNIFIED IDEOGRAPH - 0xAD52: 0x7495, //CJK UNIFIED IDEOGRAPH - 0xAD53: 0x7496, //CJK UNIFIED IDEOGRAPH - 0xAD54: 0x7497, //CJK UNIFIED IDEOGRAPH - 0xAD55: 0x7498, //CJK UNIFIED IDEOGRAPH - 0xAD56: 0x7499, //CJK UNIFIED IDEOGRAPH - 0xAD57: 0x749A, //CJK UNIFIED IDEOGRAPH - 0xAD58: 0x749B, //CJK UNIFIED IDEOGRAPH - 0xAD59: 0x749D, //CJK UNIFIED IDEOGRAPH - 0xAD5A: 0x749F, //CJK UNIFIED IDEOGRAPH - 0xAD5B: 0x74A0, //CJK UNIFIED IDEOGRAPH - 0xAD5C: 0x74A1, //CJK UNIFIED IDEOGRAPH - 0xAD5D: 0x74A2, //CJK UNIFIED IDEOGRAPH - 0xAD5E: 0x74A3, //CJK UNIFIED IDEOGRAPH - 0xAD5F: 0x74A4, //CJK UNIFIED IDEOGRAPH - 0xAD60: 0x74A5, //CJK UNIFIED IDEOGRAPH - 0xAD61: 0x74A6, //CJK UNIFIED IDEOGRAPH - 0xAD62: 0x74AA, //CJK UNIFIED IDEOGRAPH - 0xAD63: 0x74AB, //CJK UNIFIED IDEOGRAPH - 0xAD64: 0x74AC, //CJK UNIFIED IDEOGRAPH - 0xAD65: 0x74AD, //CJK UNIFIED IDEOGRAPH - 0xAD66: 0x74AE, //CJK UNIFIED IDEOGRAPH - 0xAD67: 0x74AF, //CJK UNIFIED IDEOGRAPH - 0xAD68: 0x74B0, //CJK UNIFIED IDEOGRAPH - 0xAD69: 0x74B1, //CJK UNIFIED IDEOGRAPH - 0xAD6A: 0x74B2, //CJK UNIFIED IDEOGRAPH - 0xAD6B: 0x74B3, //CJK UNIFIED IDEOGRAPH - 0xAD6C: 0x74B4, //CJK UNIFIED IDEOGRAPH - 0xAD6D: 0x74B5, //CJK UNIFIED IDEOGRAPH - 0xAD6E: 0x74B6, //CJK UNIFIED IDEOGRAPH - 0xAD6F: 0x74B7, //CJK UNIFIED IDEOGRAPH - 0xAD70: 0x74B8, //CJK UNIFIED IDEOGRAPH - 0xAD71: 0x74B9, //CJK UNIFIED IDEOGRAPH - 0xAD72: 0x74BB, //CJK UNIFIED IDEOGRAPH - 0xAD73: 0x74BC, //CJK UNIFIED IDEOGRAPH - 0xAD74: 0x74BD, //CJK UNIFIED IDEOGRAPH - 0xAD75: 0x74BE, //CJK UNIFIED IDEOGRAPH - 0xAD76: 0x74BF, //CJK UNIFIED IDEOGRAPH - 0xAD77: 0x74C0, //CJK UNIFIED IDEOGRAPH - 0xAD78: 0x74C1, //CJK UNIFIED IDEOGRAPH - 0xAD79: 0x74C2, //CJK UNIFIED IDEOGRAPH - 0xAD7A: 0x74C3, //CJK UNIFIED IDEOGRAPH - 0xAD7B: 0x74C4, //CJK UNIFIED IDEOGRAPH - 0xAD7C: 0x74C5, //CJK UNIFIED IDEOGRAPH - 0xAD7D: 0x74C6, //CJK UNIFIED IDEOGRAPH - 0xAD7E: 0x74C7, //CJK UNIFIED IDEOGRAPH - 0xAD80: 0x74C8, //CJK UNIFIED IDEOGRAPH - 0xAD81: 0x74C9, //CJK UNIFIED IDEOGRAPH - 0xAD82: 0x74CA, //CJK UNIFIED IDEOGRAPH - 0xAD83: 0x74CB, //CJK UNIFIED IDEOGRAPH - 0xAD84: 0x74CC, //CJK UNIFIED IDEOGRAPH - 0xAD85: 0x74CD, //CJK UNIFIED IDEOGRAPH - 0xAD86: 0x74CE, //CJK UNIFIED IDEOGRAPH - 0xAD87: 0x74CF, //CJK UNIFIED IDEOGRAPH - 0xAD88: 0x74D0, //CJK UNIFIED IDEOGRAPH - 0xAD89: 0x74D1, //CJK UNIFIED IDEOGRAPH - 0xAD8A: 0x74D3, //CJK UNIFIED IDEOGRAPH - 0xAD8B: 0x74D4, //CJK UNIFIED IDEOGRAPH - 0xAD8C: 0x74D5, //CJK UNIFIED IDEOGRAPH - 0xAD8D: 0x74D6, //CJK UNIFIED IDEOGRAPH - 0xAD8E: 0x74D7, //CJK UNIFIED IDEOGRAPH - 0xAD8F: 0x74D8, //CJK UNIFIED IDEOGRAPH - 0xAD90: 0x74D9, //CJK UNIFIED IDEOGRAPH - 0xAD91: 0x74DA, //CJK UNIFIED IDEOGRAPH - 0xAD92: 0x74DB, //CJK UNIFIED IDEOGRAPH - 0xAD93: 0x74DD, //CJK UNIFIED IDEOGRAPH - 0xAD94: 0x74DF, //CJK UNIFIED IDEOGRAPH - 0xAD95: 0x74E1, //CJK UNIFIED IDEOGRAPH - 0xAD96: 0x74E5, //CJK UNIFIED IDEOGRAPH - 0xAD97: 0x74E7, //CJK UNIFIED IDEOGRAPH - 0xAD98: 0x74E8, //CJK UNIFIED IDEOGRAPH - 0xAD99: 0x74E9, //CJK UNIFIED IDEOGRAPH - 0xAD9A: 0x74EA, //CJK UNIFIED IDEOGRAPH - 0xAD9B: 0x74EB, //CJK UNIFIED IDEOGRAPH - 0xAD9C: 0x74EC, //CJK UNIFIED IDEOGRAPH - 0xAD9D: 0x74ED, //CJK UNIFIED IDEOGRAPH - 0xAD9E: 0x74F0, //CJK UNIFIED IDEOGRAPH - 0xAD9F: 0x74F1, //CJK UNIFIED IDEOGRAPH - 0xADA0: 0x74F2, //CJK UNIFIED IDEOGRAPH - 0xAE40: 0x74F3, //CJK UNIFIED IDEOGRAPH - 0xAE41: 0x74F5, //CJK UNIFIED IDEOGRAPH - 0xAE42: 0x74F8, //CJK UNIFIED IDEOGRAPH - 0xAE43: 0x74F9, //CJK UNIFIED IDEOGRAPH - 0xAE44: 0x74FA, //CJK UNIFIED IDEOGRAPH - 0xAE45: 0x74FB, //CJK UNIFIED IDEOGRAPH - 0xAE46: 0x74FC, //CJK UNIFIED IDEOGRAPH - 0xAE47: 0x74FD, //CJK UNIFIED IDEOGRAPH - 0xAE48: 0x74FE, //CJK UNIFIED IDEOGRAPH - 0xAE49: 0x7500, //CJK UNIFIED IDEOGRAPH - 0xAE4A: 0x7501, //CJK UNIFIED IDEOGRAPH - 0xAE4B: 0x7502, //CJK UNIFIED IDEOGRAPH - 0xAE4C: 0x7503, //CJK UNIFIED IDEOGRAPH - 0xAE4D: 0x7505, //CJK UNIFIED IDEOGRAPH - 0xAE4E: 0x7506, //CJK UNIFIED IDEOGRAPH - 0xAE4F: 0x7507, //CJK UNIFIED IDEOGRAPH - 0xAE50: 0x7508, //CJK UNIFIED IDEOGRAPH - 0xAE51: 0x7509, //CJK UNIFIED IDEOGRAPH - 0xAE52: 0x750A, //CJK UNIFIED IDEOGRAPH - 0xAE53: 0x750B, //CJK UNIFIED IDEOGRAPH - 0xAE54: 0x750C, //CJK UNIFIED IDEOGRAPH - 0xAE55: 0x750E, //CJK UNIFIED IDEOGRAPH - 0xAE56: 0x7510, //CJK UNIFIED IDEOGRAPH - 0xAE57: 0x7512, //CJK UNIFIED IDEOGRAPH - 0xAE58: 0x7514, //CJK UNIFIED IDEOGRAPH - 0xAE59: 0x7515, //CJK UNIFIED IDEOGRAPH - 0xAE5A: 0x7516, //CJK UNIFIED IDEOGRAPH - 0xAE5B: 0x7517, //CJK UNIFIED IDEOGRAPH - 0xAE5C: 0x751B, //CJK UNIFIED IDEOGRAPH - 0xAE5D: 0x751D, //CJK UNIFIED IDEOGRAPH - 0xAE5E: 0x751E, //CJK UNIFIED IDEOGRAPH - 0xAE5F: 0x7520, //CJK UNIFIED IDEOGRAPH - 0xAE60: 0x7521, //CJK UNIFIED IDEOGRAPH - 0xAE61: 0x7522, //CJK UNIFIED IDEOGRAPH - 0xAE62: 0x7523, //CJK UNIFIED IDEOGRAPH - 0xAE63: 0x7524, //CJK UNIFIED IDEOGRAPH - 0xAE64: 0x7526, //CJK UNIFIED IDEOGRAPH - 0xAE65: 0x7527, //CJK UNIFIED IDEOGRAPH - 0xAE66: 0x752A, //CJK UNIFIED IDEOGRAPH - 0xAE67: 0x752E, //CJK UNIFIED IDEOGRAPH - 0xAE68: 0x7534, //CJK UNIFIED IDEOGRAPH - 0xAE69: 0x7536, //CJK UNIFIED IDEOGRAPH - 0xAE6A: 0x7539, //CJK UNIFIED IDEOGRAPH - 0xAE6B: 0x753C, //CJK UNIFIED IDEOGRAPH - 0xAE6C: 0x753D, //CJK UNIFIED IDEOGRAPH - 0xAE6D: 0x753F, //CJK UNIFIED IDEOGRAPH - 0xAE6E: 0x7541, //CJK UNIFIED IDEOGRAPH - 0xAE6F: 0x7542, //CJK UNIFIED IDEOGRAPH - 0xAE70: 0x7543, //CJK UNIFIED IDEOGRAPH - 0xAE71: 0x7544, //CJK UNIFIED IDEOGRAPH - 0xAE72: 0x7546, //CJK UNIFIED IDEOGRAPH - 0xAE73: 0x7547, //CJK UNIFIED IDEOGRAPH - 0xAE74: 0x7549, //CJK UNIFIED IDEOGRAPH - 0xAE75: 0x754A, //CJK UNIFIED IDEOGRAPH - 0xAE76: 0x754D, //CJK UNIFIED IDEOGRAPH - 0xAE77: 0x7550, //CJK UNIFIED IDEOGRAPH - 0xAE78: 0x7551, //CJK UNIFIED IDEOGRAPH - 0xAE79: 0x7552, //CJK UNIFIED IDEOGRAPH - 0xAE7A: 0x7553, //CJK UNIFIED IDEOGRAPH - 0xAE7B: 0x7555, //CJK UNIFIED IDEOGRAPH - 0xAE7C: 0x7556, //CJK UNIFIED IDEOGRAPH - 0xAE7D: 0x7557, //CJK UNIFIED IDEOGRAPH - 0xAE7E: 0x7558, //CJK UNIFIED IDEOGRAPH - 0xAE80: 0x755D, //CJK UNIFIED IDEOGRAPH - 0xAE81: 0x755E, //CJK UNIFIED IDEOGRAPH - 0xAE82: 0x755F, //CJK UNIFIED IDEOGRAPH - 0xAE83: 0x7560, //CJK UNIFIED IDEOGRAPH - 0xAE84: 0x7561, //CJK UNIFIED IDEOGRAPH - 0xAE85: 0x7562, //CJK UNIFIED IDEOGRAPH - 0xAE86: 0x7563, //CJK UNIFIED IDEOGRAPH - 0xAE87: 0x7564, //CJK UNIFIED IDEOGRAPH - 0xAE88: 0x7567, //CJK UNIFIED IDEOGRAPH - 0xAE89: 0x7568, //CJK UNIFIED IDEOGRAPH - 0xAE8A: 0x7569, //CJK UNIFIED IDEOGRAPH - 0xAE8B: 0x756B, //CJK UNIFIED IDEOGRAPH - 0xAE8C: 0x756C, //CJK UNIFIED IDEOGRAPH - 0xAE8D: 0x756D, //CJK UNIFIED IDEOGRAPH - 0xAE8E: 0x756E, //CJK UNIFIED IDEOGRAPH - 0xAE8F: 0x756F, //CJK UNIFIED IDEOGRAPH - 0xAE90: 0x7570, //CJK UNIFIED IDEOGRAPH - 0xAE91: 0x7571, //CJK UNIFIED IDEOGRAPH - 0xAE92: 0x7573, //CJK UNIFIED IDEOGRAPH - 0xAE93: 0x7575, //CJK UNIFIED IDEOGRAPH - 0xAE94: 0x7576, //CJK UNIFIED IDEOGRAPH - 0xAE95: 0x7577, //CJK UNIFIED IDEOGRAPH - 0xAE96: 0x757A, //CJK UNIFIED IDEOGRAPH - 0xAE97: 0x757B, //CJK UNIFIED IDEOGRAPH - 0xAE98: 0x757C, //CJK UNIFIED IDEOGRAPH - 0xAE99: 0x757D, //CJK UNIFIED IDEOGRAPH - 0xAE9A: 0x757E, //CJK UNIFIED IDEOGRAPH - 0xAE9B: 0x7580, //CJK UNIFIED IDEOGRAPH - 0xAE9C: 0x7581, //CJK UNIFIED IDEOGRAPH - 0xAE9D: 0x7582, //CJK UNIFIED IDEOGRAPH - 0xAE9E: 0x7584, //CJK UNIFIED IDEOGRAPH - 0xAE9F: 0x7585, //CJK UNIFIED IDEOGRAPH - 0xAEA0: 0x7587, //CJK UNIFIED IDEOGRAPH - 0xAF40: 0x7588, //CJK UNIFIED IDEOGRAPH - 0xAF41: 0x7589, //CJK UNIFIED IDEOGRAPH - 0xAF42: 0x758A, //CJK UNIFIED IDEOGRAPH - 0xAF43: 0x758C, //CJK UNIFIED IDEOGRAPH - 0xAF44: 0x758D, //CJK UNIFIED IDEOGRAPH - 0xAF45: 0x758E, //CJK UNIFIED IDEOGRAPH - 0xAF46: 0x7590, //CJK UNIFIED IDEOGRAPH - 0xAF47: 0x7593, //CJK UNIFIED IDEOGRAPH - 0xAF48: 0x7595, //CJK UNIFIED IDEOGRAPH - 0xAF49: 0x7598, //CJK UNIFIED IDEOGRAPH - 0xAF4A: 0x759B, //CJK UNIFIED IDEOGRAPH - 0xAF4B: 0x759C, //CJK UNIFIED IDEOGRAPH - 0xAF4C: 0x759E, //CJK UNIFIED IDEOGRAPH - 0xAF4D: 0x75A2, //CJK UNIFIED IDEOGRAPH - 0xAF4E: 0x75A6, //CJK UNIFIED IDEOGRAPH - 0xAF4F: 0x75A7, //CJK UNIFIED IDEOGRAPH - 0xAF50: 0x75A8, //CJK UNIFIED IDEOGRAPH - 0xAF51: 0x75A9, //CJK UNIFIED IDEOGRAPH - 0xAF52: 0x75AA, //CJK UNIFIED IDEOGRAPH - 0xAF53: 0x75AD, //CJK UNIFIED IDEOGRAPH - 0xAF54: 0x75B6, //CJK UNIFIED IDEOGRAPH - 0xAF55: 0x75B7, //CJK UNIFIED IDEOGRAPH - 0xAF56: 0x75BA, //CJK UNIFIED IDEOGRAPH - 0xAF57: 0x75BB, //CJK UNIFIED IDEOGRAPH - 0xAF58: 0x75BF, //CJK UNIFIED IDEOGRAPH - 0xAF59: 0x75C0, //CJK UNIFIED IDEOGRAPH - 0xAF5A: 0x75C1, //CJK UNIFIED IDEOGRAPH - 0xAF5B: 0x75C6, //CJK UNIFIED IDEOGRAPH - 0xAF5C: 0x75CB, //CJK UNIFIED IDEOGRAPH - 0xAF5D: 0x75CC, //CJK UNIFIED IDEOGRAPH - 0xAF5E: 0x75CE, //CJK UNIFIED IDEOGRAPH - 0xAF5F: 0x75CF, //CJK UNIFIED IDEOGRAPH - 0xAF60: 0x75D0, //CJK UNIFIED IDEOGRAPH - 0xAF61: 0x75D1, //CJK UNIFIED IDEOGRAPH - 0xAF62: 0x75D3, //CJK UNIFIED IDEOGRAPH - 0xAF63: 0x75D7, //CJK UNIFIED IDEOGRAPH - 0xAF64: 0x75D9, //CJK UNIFIED IDEOGRAPH - 0xAF65: 0x75DA, //CJK UNIFIED IDEOGRAPH - 0xAF66: 0x75DC, //CJK UNIFIED IDEOGRAPH - 0xAF67: 0x75DD, //CJK UNIFIED IDEOGRAPH - 0xAF68: 0x75DF, //CJK UNIFIED IDEOGRAPH - 0xAF69: 0x75E0, //CJK UNIFIED IDEOGRAPH - 0xAF6A: 0x75E1, //CJK UNIFIED IDEOGRAPH - 0xAF6B: 0x75E5, //CJK UNIFIED IDEOGRAPH - 0xAF6C: 0x75E9, //CJK UNIFIED IDEOGRAPH - 0xAF6D: 0x75EC, //CJK UNIFIED IDEOGRAPH - 0xAF6E: 0x75ED, //CJK UNIFIED IDEOGRAPH - 0xAF6F: 0x75EE, //CJK UNIFIED IDEOGRAPH - 0xAF70: 0x75EF, //CJK UNIFIED IDEOGRAPH - 0xAF71: 0x75F2, //CJK UNIFIED IDEOGRAPH - 0xAF72: 0x75F3, //CJK UNIFIED IDEOGRAPH - 0xAF73: 0x75F5, //CJK UNIFIED IDEOGRAPH - 0xAF74: 0x75F6, //CJK UNIFIED IDEOGRAPH - 0xAF75: 0x75F7, //CJK UNIFIED IDEOGRAPH - 0xAF76: 0x75F8, //CJK UNIFIED IDEOGRAPH - 0xAF77: 0x75FA, //CJK UNIFIED IDEOGRAPH - 0xAF78: 0x75FB, //CJK UNIFIED IDEOGRAPH - 0xAF79: 0x75FD, //CJK UNIFIED IDEOGRAPH - 0xAF7A: 0x75FE, //CJK UNIFIED IDEOGRAPH - 0xAF7B: 0x7602, //CJK UNIFIED IDEOGRAPH - 0xAF7C: 0x7604, //CJK UNIFIED IDEOGRAPH - 0xAF7D: 0x7606, //CJK UNIFIED IDEOGRAPH - 0xAF7E: 0x7607, //CJK UNIFIED IDEOGRAPH - 0xAF80: 0x7608, //CJK UNIFIED IDEOGRAPH - 0xAF81: 0x7609, //CJK UNIFIED IDEOGRAPH - 0xAF82: 0x760B, //CJK UNIFIED IDEOGRAPH - 0xAF83: 0x760D, //CJK UNIFIED IDEOGRAPH - 0xAF84: 0x760E, //CJK UNIFIED IDEOGRAPH - 0xAF85: 0x760F, //CJK UNIFIED IDEOGRAPH - 0xAF86: 0x7611, //CJK UNIFIED IDEOGRAPH - 0xAF87: 0x7612, //CJK UNIFIED IDEOGRAPH - 0xAF88: 0x7613, //CJK UNIFIED IDEOGRAPH - 0xAF89: 0x7614, //CJK UNIFIED IDEOGRAPH - 0xAF8A: 0x7616, //CJK UNIFIED IDEOGRAPH - 0xAF8B: 0x761A, //CJK UNIFIED IDEOGRAPH - 0xAF8C: 0x761C, //CJK UNIFIED IDEOGRAPH - 0xAF8D: 0x761D, //CJK UNIFIED IDEOGRAPH - 0xAF8E: 0x761E, //CJK UNIFIED IDEOGRAPH - 0xAF8F: 0x7621, //CJK UNIFIED IDEOGRAPH - 0xAF90: 0x7623, //CJK UNIFIED IDEOGRAPH - 0xAF91: 0x7627, //CJK UNIFIED IDEOGRAPH - 0xAF92: 0x7628, //CJK UNIFIED IDEOGRAPH - 0xAF93: 0x762C, //CJK UNIFIED IDEOGRAPH - 0xAF94: 0x762E, //CJK UNIFIED IDEOGRAPH - 0xAF95: 0x762F, //CJK UNIFIED IDEOGRAPH - 0xAF96: 0x7631, //CJK UNIFIED IDEOGRAPH - 0xAF97: 0x7632, //CJK UNIFIED IDEOGRAPH - 0xAF98: 0x7636, //CJK UNIFIED IDEOGRAPH - 0xAF99: 0x7637, //CJK UNIFIED IDEOGRAPH - 0xAF9A: 0x7639, //CJK UNIFIED IDEOGRAPH - 0xAF9B: 0x763A, //CJK UNIFIED IDEOGRAPH - 0xAF9C: 0x763B, //CJK UNIFIED IDEOGRAPH - 0xAF9D: 0x763D, //CJK UNIFIED IDEOGRAPH - 0xAF9E: 0x7641, //CJK UNIFIED IDEOGRAPH - 0xAF9F: 0x7642, //CJK UNIFIED IDEOGRAPH - 0xAFA0: 0x7644, //CJK UNIFIED IDEOGRAPH - 0xB040: 0x7645, //CJK UNIFIED IDEOGRAPH - 0xB041: 0x7646, //CJK UNIFIED IDEOGRAPH - 0xB042: 0x7647, //CJK UNIFIED IDEOGRAPH - 0xB043: 0x7648, //CJK UNIFIED IDEOGRAPH - 0xB044: 0x7649, //CJK UNIFIED IDEOGRAPH - 0xB045: 0x764A, //CJK UNIFIED IDEOGRAPH - 0xB046: 0x764B, //CJK UNIFIED IDEOGRAPH - 0xB047: 0x764E, //CJK UNIFIED IDEOGRAPH - 0xB048: 0x764F, //CJK UNIFIED IDEOGRAPH - 0xB049: 0x7650, //CJK UNIFIED IDEOGRAPH - 0xB04A: 0x7651, //CJK UNIFIED IDEOGRAPH - 0xB04B: 0x7652, //CJK UNIFIED IDEOGRAPH - 0xB04C: 0x7653, //CJK UNIFIED IDEOGRAPH - 0xB04D: 0x7655, //CJK UNIFIED IDEOGRAPH - 0xB04E: 0x7657, //CJK UNIFIED IDEOGRAPH - 0xB04F: 0x7658, //CJK UNIFIED IDEOGRAPH - 0xB050: 0x7659, //CJK UNIFIED IDEOGRAPH - 0xB051: 0x765A, //CJK UNIFIED IDEOGRAPH - 0xB052: 0x765B, //CJK UNIFIED IDEOGRAPH - 0xB053: 0x765D, //CJK UNIFIED IDEOGRAPH - 0xB054: 0x765F, //CJK UNIFIED IDEOGRAPH - 0xB055: 0x7660, //CJK UNIFIED IDEOGRAPH - 0xB056: 0x7661, //CJK UNIFIED IDEOGRAPH - 0xB057: 0x7662, //CJK UNIFIED IDEOGRAPH - 0xB058: 0x7664, //CJK UNIFIED IDEOGRAPH - 0xB059: 0x7665, //CJK UNIFIED IDEOGRAPH - 0xB05A: 0x7666, //CJK UNIFIED IDEOGRAPH - 0xB05B: 0x7667, //CJK UNIFIED IDEOGRAPH - 0xB05C: 0x7668, //CJK UNIFIED IDEOGRAPH - 0xB05D: 0x7669, //CJK UNIFIED IDEOGRAPH - 0xB05E: 0x766A, //CJK UNIFIED IDEOGRAPH - 0xB05F: 0x766C, //CJK UNIFIED IDEOGRAPH - 0xB060: 0x766D, //CJK UNIFIED IDEOGRAPH - 0xB061: 0x766E, //CJK UNIFIED IDEOGRAPH - 0xB062: 0x7670, //CJK UNIFIED IDEOGRAPH - 0xB063: 0x7671, //CJK UNIFIED IDEOGRAPH - 0xB064: 0x7672, //CJK UNIFIED IDEOGRAPH - 0xB065: 0x7673, //CJK UNIFIED IDEOGRAPH - 0xB066: 0x7674, //CJK UNIFIED IDEOGRAPH - 0xB067: 0x7675, //CJK UNIFIED IDEOGRAPH - 0xB068: 0x7676, //CJK UNIFIED IDEOGRAPH - 0xB069: 0x7677, //CJK UNIFIED IDEOGRAPH - 0xB06A: 0x7679, //CJK UNIFIED IDEOGRAPH - 0xB06B: 0x767A, //CJK UNIFIED IDEOGRAPH - 0xB06C: 0x767C, //CJK UNIFIED IDEOGRAPH - 0xB06D: 0x767F, //CJK UNIFIED IDEOGRAPH - 0xB06E: 0x7680, //CJK UNIFIED IDEOGRAPH - 0xB06F: 0x7681, //CJK UNIFIED IDEOGRAPH - 0xB070: 0x7683, //CJK UNIFIED IDEOGRAPH - 0xB071: 0x7685, //CJK UNIFIED IDEOGRAPH - 0xB072: 0x7689, //CJK UNIFIED IDEOGRAPH - 0xB073: 0x768A, //CJK UNIFIED IDEOGRAPH - 0xB074: 0x768C, //CJK UNIFIED IDEOGRAPH - 0xB075: 0x768D, //CJK UNIFIED IDEOGRAPH - 0xB076: 0x768F, //CJK UNIFIED IDEOGRAPH - 0xB077: 0x7690, //CJK UNIFIED IDEOGRAPH - 0xB078: 0x7692, //CJK UNIFIED IDEOGRAPH - 0xB079: 0x7694, //CJK UNIFIED IDEOGRAPH - 0xB07A: 0x7695, //CJK UNIFIED IDEOGRAPH - 0xB07B: 0x7697, //CJK UNIFIED IDEOGRAPH - 0xB07C: 0x7698, //CJK UNIFIED IDEOGRAPH - 0xB07D: 0x769A, //CJK UNIFIED IDEOGRAPH - 0xB07E: 0x769B, //CJK UNIFIED IDEOGRAPH - 0xB080: 0x769C, //CJK UNIFIED IDEOGRAPH - 0xB081: 0x769D, //CJK UNIFIED IDEOGRAPH - 0xB082: 0x769E, //CJK UNIFIED IDEOGRAPH - 0xB083: 0x769F, //CJK UNIFIED IDEOGRAPH - 0xB084: 0x76A0, //CJK UNIFIED IDEOGRAPH - 0xB085: 0x76A1, //CJK UNIFIED IDEOGRAPH - 0xB086: 0x76A2, //CJK UNIFIED IDEOGRAPH - 0xB087: 0x76A3, //CJK UNIFIED IDEOGRAPH - 0xB088: 0x76A5, //CJK UNIFIED IDEOGRAPH - 0xB089: 0x76A6, //CJK UNIFIED IDEOGRAPH - 0xB08A: 0x76A7, //CJK UNIFIED IDEOGRAPH - 0xB08B: 0x76A8, //CJK UNIFIED IDEOGRAPH - 0xB08C: 0x76A9, //CJK UNIFIED IDEOGRAPH - 0xB08D: 0x76AA, //CJK UNIFIED IDEOGRAPH - 0xB08E: 0x76AB, //CJK UNIFIED IDEOGRAPH - 0xB08F: 0x76AC, //CJK UNIFIED IDEOGRAPH - 0xB090: 0x76AD, //CJK UNIFIED IDEOGRAPH - 0xB091: 0x76AF, //CJK UNIFIED IDEOGRAPH - 0xB092: 0x76B0, //CJK UNIFIED IDEOGRAPH - 0xB093: 0x76B3, //CJK UNIFIED IDEOGRAPH - 0xB094: 0x76B5, //CJK UNIFIED IDEOGRAPH - 0xB095: 0x76B6, //CJK UNIFIED IDEOGRAPH - 0xB096: 0x76B7, //CJK UNIFIED IDEOGRAPH - 0xB097: 0x76B8, //CJK UNIFIED IDEOGRAPH - 0xB098: 0x76B9, //CJK UNIFIED IDEOGRAPH - 0xB099: 0x76BA, //CJK UNIFIED IDEOGRAPH - 0xB09A: 0x76BB, //CJK UNIFIED IDEOGRAPH - 0xB09B: 0x76BC, //CJK UNIFIED IDEOGRAPH - 0xB09C: 0x76BD, //CJK UNIFIED IDEOGRAPH - 0xB09D: 0x76BE, //CJK UNIFIED IDEOGRAPH - 0xB09E: 0x76C0, //CJK UNIFIED IDEOGRAPH - 0xB09F: 0x76C1, //CJK UNIFIED IDEOGRAPH - 0xB0A0: 0x76C3, //CJK UNIFIED IDEOGRAPH - 0xB0A1: 0x554A, //CJK UNIFIED IDEOGRAPH - 0xB0A2: 0x963F, //CJK UNIFIED IDEOGRAPH - 0xB0A3: 0x57C3, //CJK UNIFIED IDEOGRAPH - 0xB0A4: 0x6328, //CJK UNIFIED IDEOGRAPH - 0xB0A5: 0x54CE, //CJK UNIFIED IDEOGRAPH - 0xB0A6: 0x5509, //CJK UNIFIED IDEOGRAPH - 0xB0A7: 0x54C0, //CJK UNIFIED IDEOGRAPH - 0xB0A8: 0x7691, //CJK UNIFIED IDEOGRAPH - 0xB0A9: 0x764C, //CJK UNIFIED IDEOGRAPH - 0xB0AA: 0x853C, //CJK UNIFIED IDEOGRAPH - 0xB0AB: 0x77EE, //CJK UNIFIED IDEOGRAPH - 0xB0AC: 0x827E, //CJK UNIFIED IDEOGRAPH - 0xB0AD: 0x788D, //CJK UNIFIED IDEOGRAPH - 0xB0AE: 0x7231, //CJK UNIFIED IDEOGRAPH - 0xB0AF: 0x9698, //CJK UNIFIED IDEOGRAPH - 0xB0B0: 0x978D, //CJK UNIFIED IDEOGRAPH - 0xB0B1: 0x6C28, //CJK UNIFIED IDEOGRAPH - 0xB0B2: 0x5B89, //CJK UNIFIED IDEOGRAPH - 0xB0B3: 0x4FFA, //CJK UNIFIED IDEOGRAPH - 0xB0B4: 0x6309, //CJK UNIFIED IDEOGRAPH - 0xB0B5: 0x6697, //CJK UNIFIED IDEOGRAPH - 0xB0B6: 0x5CB8, //CJK UNIFIED IDEOGRAPH - 0xB0B7: 0x80FA, //CJK UNIFIED IDEOGRAPH - 0xB0B8: 0x6848, //CJK UNIFIED IDEOGRAPH - 0xB0B9: 0x80AE, //CJK UNIFIED IDEOGRAPH - 0xB0BA: 0x6602, //CJK UNIFIED IDEOGRAPH - 0xB0BB: 0x76CE, //CJK UNIFIED IDEOGRAPH - 0xB0BC: 0x51F9, //CJK UNIFIED IDEOGRAPH - 0xB0BD: 0x6556, //CJK UNIFIED IDEOGRAPH - 0xB0BE: 0x71AC, //CJK UNIFIED IDEOGRAPH - 0xB0BF: 0x7FF1, //CJK UNIFIED IDEOGRAPH - 0xB0C0: 0x8884, //CJK UNIFIED IDEOGRAPH - 0xB0C1: 0x50B2, //CJK UNIFIED IDEOGRAPH - 0xB0C2: 0x5965, //CJK UNIFIED IDEOGRAPH - 0xB0C3: 0x61CA, //CJK UNIFIED IDEOGRAPH - 0xB0C4: 0x6FB3, //CJK UNIFIED IDEOGRAPH - 0xB0C5: 0x82AD, //CJK UNIFIED IDEOGRAPH - 0xB0C6: 0x634C, //CJK UNIFIED IDEOGRAPH - 0xB0C7: 0x6252, //CJK UNIFIED IDEOGRAPH - 0xB0C8: 0x53ED, //CJK UNIFIED IDEOGRAPH - 0xB0C9: 0x5427, //CJK UNIFIED IDEOGRAPH - 0xB0CA: 0x7B06, //CJK UNIFIED IDEOGRAPH - 0xB0CB: 0x516B, //CJK UNIFIED IDEOGRAPH - 0xB0CC: 0x75A4, //CJK UNIFIED IDEOGRAPH - 0xB0CD: 0x5DF4, //CJK UNIFIED IDEOGRAPH - 0xB0CE: 0x62D4, //CJK UNIFIED IDEOGRAPH - 0xB0CF: 0x8DCB, //CJK UNIFIED IDEOGRAPH - 0xB0D0: 0x9776, //CJK UNIFIED IDEOGRAPH - 0xB0D1: 0x628A, //CJK UNIFIED IDEOGRAPH - 0xB0D2: 0x8019, //CJK UNIFIED IDEOGRAPH - 0xB0D3: 0x575D, //CJK UNIFIED IDEOGRAPH - 0xB0D4: 0x9738, //CJK UNIFIED IDEOGRAPH - 0xB0D5: 0x7F62, //CJK UNIFIED IDEOGRAPH - 0xB0D6: 0x7238, //CJK UNIFIED IDEOGRAPH - 0xB0D7: 0x767D, //CJK UNIFIED IDEOGRAPH - 0xB0D8: 0x67CF, //CJK UNIFIED IDEOGRAPH - 0xB0D9: 0x767E, //CJK UNIFIED IDEOGRAPH - 0xB0DA: 0x6446, //CJK UNIFIED IDEOGRAPH - 0xB0DB: 0x4F70, //CJK UNIFIED IDEOGRAPH - 0xB0DC: 0x8D25, //CJK UNIFIED IDEOGRAPH - 0xB0DD: 0x62DC, //CJK UNIFIED IDEOGRAPH - 0xB0DE: 0x7A17, //CJK UNIFIED IDEOGRAPH - 0xB0DF: 0x6591, //CJK UNIFIED IDEOGRAPH - 0xB0E0: 0x73ED, //CJK UNIFIED IDEOGRAPH - 0xB0E1: 0x642C, //CJK UNIFIED IDEOGRAPH - 0xB0E2: 0x6273, //CJK UNIFIED IDEOGRAPH - 0xB0E3: 0x822C, //CJK UNIFIED IDEOGRAPH - 0xB0E4: 0x9881, //CJK UNIFIED IDEOGRAPH - 0xB0E5: 0x677F, //CJK UNIFIED IDEOGRAPH - 0xB0E6: 0x7248, //CJK UNIFIED IDEOGRAPH - 0xB0E7: 0x626E, //CJK UNIFIED IDEOGRAPH - 0xB0E8: 0x62CC, //CJK UNIFIED IDEOGRAPH - 0xB0E9: 0x4F34, //CJK UNIFIED IDEOGRAPH - 0xB0EA: 0x74E3, //CJK UNIFIED IDEOGRAPH - 0xB0EB: 0x534A, //CJK UNIFIED IDEOGRAPH - 0xB0EC: 0x529E, //CJK UNIFIED IDEOGRAPH - 0xB0ED: 0x7ECA, //CJK UNIFIED IDEOGRAPH - 0xB0EE: 0x90A6, //CJK UNIFIED IDEOGRAPH - 0xB0EF: 0x5E2E, //CJK UNIFIED IDEOGRAPH - 0xB0F0: 0x6886, //CJK UNIFIED IDEOGRAPH - 0xB0F1: 0x699C, //CJK UNIFIED IDEOGRAPH - 0xB0F2: 0x8180, //CJK UNIFIED IDEOGRAPH - 0xB0F3: 0x7ED1, //CJK UNIFIED IDEOGRAPH - 0xB0F4: 0x68D2, //CJK UNIFIED IDEOGRAPH - 0xB0F5: 0x78C5, //CJK UNIFIED IDEOGRAPH - 0xB0F6: 0x868C, //CJK UNIFIED IDEOGRAPH - 0xB0F7: 0x9551, //CJK UNIFIED IDEOGRAPH - 0xB0F8: 0x508D, //CJK UNIFIED IDEOGRAPH - 0xB0F9: 0x8C24, //CJK UNIFIED IDEOGRAPH - 0xB0FA: 0x82DE, //CJK UNIFIED IDEOGRAPH - 0xB0FB: 0x80DE, //CJK UNIFIED IDEOGRAPH - 0xB0FC: 0x5305, //CJK UNIFIED IDEOGRAPH - 0xB0FD: 0x8912, //CJK UNIFIED IDEOGRAPH - 0xB0FE: 0x5265, //CJK UNIFIED IDEOGRAPH - 0xB140: 0x76C4, //CJK UNIFIED IDEOGRAPH - 0xB141: 0x76C7, //CJK UNIFIED IDEOGRAPH - 0xB142: 0x76C9, //CJK UNIFIED IDEOGRAPH - 0xB143: 0x76CB, //CJK UNIFIED IDEOGRAPH - 0xB144: 0x76CC, //CJK UNIFIED IDEOGRAPH - 0xB145: 0x76D3, //CJK UNIFIED IDEOGRAPH - 0xB146: 0x76D5, //CJK UNIFIED IDEOGRAPH - 0xB147: 0x76D9, //CJK UNIFIED IDEOGRAPH - 0xB148: 0x76DA, //CJK UNIFIED IDEOGRAPH - 0xB149: 0x76DC, //CJK UNIFIED IDEOGRAPH - 0xB14A: 0x76DD, //CJK UNIFIED IDEOGRAPH - 0xB14B: 0x76DE, //CJK UNIFIED IDEOGRAPH - 0xB14C: 0x76E0, //CJK UNIFIED IDEOGRAPH - 0xB14D: 0x76E1, //CJK UNIFIED IDEOGRAPH - 0xB14E: 0x76E2, //CJK UNIFIED IDEOGRAPH - 0xB14F: 0x76E3, //CJK UNIFIED IDEOGRAPH - 0xB150: 0x76E4, //CJK UNIFIED IDEOGRAPH - 0xB151: 0x76E6, //CJK UNIFIED IDEOGRAPH - 0xB152: 0x76E7, //CJK UNIFIED IDEOGRAPH - 0xB153: 0x76E8, //CJK UNIFIED IDEOGRAPH - 0xB154: 0x76E9, //CJK UNIFIED IDEOGRAPH - 0xB155: 0x76EA, //CJK UNIFIED IDEOGRAPH - 0xB156: 0x76EB, //CJK UNIFIED IDEOGRAPH - 0xB157: 0x76EC, //CJK UNIFIED IDEOGRAPH - 0xB158: 0x76ED, //CJK UNIFIED IDEOGRAPH - 0xB159: 0x76F0, //CJK UNIFIED IDEOGRAPH - 0xB15A: 0x76F3, //CJK UNIFIED IDEOGRAPH - 0xB15B: 0x76F5, //CJK UNIFIED IDEOGRAPH - 0xB15C: 0x76F6, //CJK UNIFIED IDEOGRAPH - 0xB15D: 0x76F7, //CJK UNIFIED IDEOGRAPH - 0xB15E: 0x76FA, //CJK UNIFIED IDEOGRAPH - 0xB15F: 0x76FB, //CJK UNIFIED IDEOGRAPH - 0xB160: 0x76FD, //CJK UNIFIED IDEOGRAPH - 0xB161: 0x76FF, //CJK UNIFIED IDEOGRAPH - 0xB162: 0x7700, //CJK UNIFIED IDEOGRAPH - 0xB163: 0x7702, //CJK UNIFIED IDEOGRAPH - 0xB164: 0x7703, //CJK UNIFIED IDEOGRAPH - 0xB165: 0x7705, //CJK UNIFIED IDEOGRAPH - 0xB166: 0x7706, //CJK UNIFIED IDEOGRAPH - 0xB167: 0x770A, //CJK UNIFIED IDEOGRAPH - 0xB168: 0x770C, //CJK UNIFIED IDEOGRAPH - 0xB169: 0x770E, //CJK UNIFIED IDEOGRAPH - 0xB16A: 0x770F, //CJK UNIFIED IDEOGRAPH - 0xB16B: 0x7710, //CJK UNIFIED IDEOGRAPH - 0xB16C: 0x7711, //CJK UNIFIED IDEOGRAPH - 0xB16D: 0x7712, //CJK UNIFIED IDEOGRAPH - 0xB16E: 0x7713, //CJK UNIFIED IDEOGRAPH - 0xB16F: 0x7714, //CJK UNIFIED IDEOGRAPH - 0xB170: 0x7715, //CJK UNIFIED IDEOGRAPH - 0xB171: 0x7716, //CJK UNIFIED IDEOGRAPH - 0xB172: 0x7717, //CJK UNIFIED IDEOGRAPH - 0xB173: 0x7718, //CJK UNIFIED IDEOGRAPH - 0xB174: 0x771B, //CJK UNIFIED IDEOGRAPH - 0xB175: 0x771C, //CJK UNIFIED IDEOGRAPH - 0xB176: 0x771D, //CJK UNIFIED IDEOGRAPH - 0xB177: 0x771E, //CJK UNIFIED IDEOGRAPH - 0xB178: 0x7721, //CJK UNIFIED IDEOGRAPH - 0xB179: 0x7723, //CJK UNIFIED IDEOGRAPH - 0xB17A: 0x7724, //CJK UNIFIED IDEOGRAPH - 0xB17B: 0x7725, //CJK UNIFIED IDEOGRAPH - 0xB17C: 0x7727, //CJK UNIFIED IDEOGRAPH - 0xB17D: 0x772A, //CJK UNIFIED IDEOGRAPH - 0xB17E: 0x772B, //CJK UNIFIED IDEOGRAPH - 0xB180: 0x772C, //CJK UNIFIED IDEOGRAPH - 0xB181: 0x772E, //CJK UNIFIED IDEOGRAPH - 0xB182: 0x7730, //CJK UNIFIED IDEOGRAPH - 0xB183: 0x7731, //CJK UNIFIED IDEOGRAPH - 0xB184: 0x7732, //CJK UNIFIED IDEOGRAPH - 0xB185: 0x7733, //CJK UNIFIED IDEOGRAPH - 0xB186: 0x7734, //CJK UNIFIED IDEOGRAPH - 0xB187: 0x7739, //CJK UNIFIED IDEOGRAPH - 0xB188: 0x773B, //CJK UNIFIED IDEOGRAPH - 0xB189: 0x773D, //CJK UNIFIED IDEOGRAPH - 0xB18A: 0x773E, //CJK UNIFIED IDEOGRAPH - 0xB18B: 0x773F, //CJK UNIFIED IDEOGRAPH - 0xB18C: 0x7742, //CJK UNIFIED IDEOGRAPH - 0xB18D: 0x7744, //CJK UNIFIED IDEOGRAPH - 0xB18E: 0x7745, //CJK UNIFIED IDEOGRAPH - 0xB18F: 0x7746, //CJK UNIFIED IDEOGRAPH - 0xB190: 0x7748, //CJK UNIFIED IDEOGRAPH - 0xB191: 0x7749, //CJK UNIFIED IDEOGRAPH - 0xB192: 0x774A, //CJK UNIFIED IDEOGRAPH - 0xB193: 0x774B, //CJK UNIFIED IDEOGRAPH - 0xB194: 0x774C, //CJK UNIFIED IDEOGRAPH - 0xB195: 0x774D, //CJK UNIFIED IDEOGRAPH - 0xB196: 0x774E, //CJK UNIFIED IDEOGRAPH - 0xB197: 0x774F, //CJK UNIFIED IDEOGRAPH - 0xB198: 0x7752, //CJK UNIFIED IDEOGRAPH - 0xB199: 0x7753, //CJK UNIFIED IDEOGRAPH - 0xB19A: 0x7754, //CJK UNIFIED IDEOGRAPH - 0xB19B: 0x7755, //CJK UNIFIED IDEOGRAPH - 0xB19C: 0x7756, //CJK UNIFIED IDEOGRAPH - 0xB19D: 0x7757, //CJK UNIFIED IDEOGRAPH - 0xB19E: 0x7758, //CJK UNIFIED IDEOGRAPH - 0xB19F: 0x7759, //CJK UNIFIED IDEOGRAPH - 0xB1A0: 0x775C, //CJK UNIFIED IDEOGRAPH - 0xB1A1: 0x8584, //CJK UNIFIED IDEOGRAPH - 0xB1A2: 0x96F9, //CJK UNIFIED IDEOGRAPH - 0xB1A3: 0x4FDD, //CJK UNIFIED IDEOGRAPH - 0xB1A4: 0x5821, //CJK UNIFIED IDEOGRAPH - 0xB1A5: 0x9971, //CJK UNIFIED IDEOGRAPH - 0xB1A6: 0x5B9D, //CJK UNIFIED IDEOGRAPH - 0xB1A7: 0x62B1, //CJK UNIFIED IDEOGRAPH - 0xB1A8: 0x62A5, //CJK UNIFIED IDEOGRAPH - 0xB1A9: 0x66B4, //CJK UNIFIED IDEOGRAPH - 0xB1AA: 0x8C79, //CJK UNIFIED IDEOGRAPH - 0xB1AB: 0x9C8D, //CJK UNIFIED IDEOGRAPH - 0xB1AC: 0x7206, //CJK UNIFIED IDEOGRAPH - 0xB1AD: 0x676F, //CJK UNIFIED IDEOGRAPH - 0xB1AE: 0x7891, //CJK UNIFIED IDEOGRAPH - 0xB1AF: 0x60B2, //CJK UNIFIED IDEOGRAPH - 0xB1B0: 0x5351, //CJK UNIFIED IDEOGRAPH - 0xB1B1: 0x5317, //CJK UNIFIED IDEOGRAPH - 0xB1B2: 0x8F88, //CJK UNIFIED IDEOGRAPH - 0xB1B3: 0x80CC, //CJK UNIFIED IDEOGRAPH - 0xB1B4: 0x8D1D, //CJK UNIFIED IDEOGRAPH - 0xB1B5: 0x94A1, //CJK UNIFIED IDEOGRAPH - 0xB1B6: 0x500D, //CJK UNIFIED IDEOGRAPH - 0xB1B7: 0x72C8, //CJK UNIFIED IDEOGRAPH - 0xB1B8: 0x5907, //CJK UNIFIED IDEOGRAPH - 0xB1B9: 0x60EB, //CJK UNIFIED IDEOGRAPH - 0xB1BA: 0x7119, //CJK UNIFIED IDEOGRAPH - 0xB1BB: 0x88AB, //CJK UNIFIED IDEOGRAPH - 0xB1BC: 0x5954, //CJK UNIFIED IDEOGRAPH - 0xB1BD: 0x82EF, //CJK UNIFIED IDEOGRAPH - 0xB1BE: 0x672C, //CJK UNIFIED IDEOGRAPH - 0xB1BF: 0x7B28, //CJK UNIFIED IDEOGRAPH - 0xB1C0: 0x5D29, //CJK UNIFIED IDEOGRAPH - 0xB1C1: 0x7EF7, //CJK UNIFIED IDEOGRAPH - 0xB1C2: 0x752D, //CJK UNIFIED IDEOGRAPH - 0xB1C3: 0x6CF5, //CJK UNIFIED IDEOGRAPH - 0xB1C4: 0x8E66, //CJK UNIFIED IDEOGRAPH - 0xB1C5: 0x8FF8, //CJK UNIFIED IDEOGRAPH - 0xB1C6: 0x903C, //CJK UNIFIED IDEOGRAPH - 0xB1C7: 0x9F3B, //CJK UNIFIED IDEOGRAPH - 0xB1C8: 0x6BD4, //CJK UNIFIED IDEOGRAPH - 0xB1C9: 0x9119, //CJK UNIFIED IDEOGRAPH - 0xB1CA: 0x7B14, //CJK UNIFIED IDEOGRAPH - 0xB1CB: 0x5F7C, //CJK UNIFIED IDEOGRAPH - 0xB1CC: 0x78A7, //CJK UNIFIED IDEOGRAPH - 0xB1CD: 0x84D6, //CJK UNIFIED IDEOGRAPH - 0xB1CE: 0x853D, //CJK UNIFIED IDEOGRAPH - 0xB1CF: 0x6BD5, //CJK UNIFIED IDEOGRAPH - 0xB1D0: 0x6BD9, //CJK UNIFIED IDEOGRAPH - 0xB1D1: 0x6BD6, //CJK UNIFIED IDEOGRAPH - 0xB1D2: 0x5E01, //CJK UNIFIED IDEOGRAPH - 0xB1D3: 0x5E87, //CJK UNIFIED IDEOGRAPH - 0xB1D4: 0x75F9, //CJK UNIFIED IDEOGRAPH - 0xB1D5: 0x95ED, //CJK UNIFIED IDEOGRAPH - 0xB1D6: 0x655D, //CJK UNIFIED IDEOGRAPH - 0xB1D7: 0x5F0A, //CJK UNIFIED IDEOGRAPH - 0xB1D8: 0x5FC5, //CJK UNIFIED IDEOGRAPH - 0xB1D9: 0x8F9F, //CJK UNIFIED IDEOGRAPH - 0xB1DA: 0x58C1, //CJK UNIFIED IDEOGRAPH - 0xB1DB: 0x81C2, //CJK UNIFIED IDEOGRAPH - 0xB1DC: 0x907F, //CJK UNIFIED IDEOGRAPH - 0xB1DD: 0x965B, //CJK UNIFIED IDEOGRAPH - 0xB1DE: 0x97AD, //CJK UNIFIED IDEOGRAPH - 0xB1DF: 0x8FB9, //CJK UNIFIED IDEOGRAPH - 0xB1E0: 0x7F16, //CJK UNIFIED IDEOGRAPH - 0xB1E1: 0x8D2C, //CJK UNIFIED IDEOGRAPH - 0xB1E2: 0x6241, //CJK UNIFIED IDEOGRAPH - 0xB1E3: 0x4FBF, //CJK UNIFIED IDEOGRAPH - 0xB1E4: 0x53D8, //CJK UNIFIED IDEOGRAPH - 0xB1E5: 0x535E, //CJK UNIFIED IDEOGRAPH - 0xB1E6: 0x8FA8, //CJK UNIFIED IDEOGRAPH - 0xB1E7: 0x8FA9, //CJK UNIFIED IDEOGRAPH - 0xB1E8: 0x8FAB, //CJK UNIFIED IDEOGRAPH - 0xB1E9: 0x904D, //CJK UNIFIED IDEOGRAPH - 0xB1EA: 0x6807, //CJK UNIFIED IDEOGRAPH - 0xB1EB: 0x5F6A, //CJK UNIFIED IDEOGRAPH - 0xB1EC: 0x8198, //CJK UNIFIED IDEOGRAPH - 0xB1ED: 0x8868, //CJK UNIFIED IDEOGRAPH - 0xB1EE: 0x9CD6, //CJK UNIFIED IDEOGRAPH - 0xB1EF: 0x618B, //CJK UNIFIED IDEOGRAPH - 0xB1F0: 0x522B, //CJK UNIFIED IDEOGRAPH - 0xB1F1: 0x762A, //CJK UNIFIED IDEOGRAPH - 0xB1F2: 0x5F6C, //CJK UNIFIED IDEOGRAPH - 0xB1F3: 0x658C, //CJK UNIFIED IDEOGRAPH - 0xB1F4: 0x6FD2, //CJK UNIFIED IDEOGRAPH - 0xB1F5: 0x6EE8, //CJK UNIFIED IDEOGRAPH - 0xB1F6: 0x5BBE, //CJK UNIFIED IDEOGRAPH - 0xB1F7: 0x6448, //CJK UNIFIED IDEOGRAPH - 0xB1F8: 0x5175, //CJK UNIFIED IDEOGRAPH - 0xB1F9: 0x51B0, //CJK UNIFIED IDEOGRAPH - 0xB1FA: 0x67C4, //CJK UNIFIED IDEOGRAPH - 0xB1FB: 0x4E19, //CJK UNIFIED IDEOGRAPH - 0xB1FC: 0x79C9, //CJK UNIFIED IDEOGRAPH - 0xB1FD: 0x997C, //CJK UNIFIED IDEOGRAPH - 0xB1FE: 0x70B3, //CJK UNIFIED IDEOGRAPH - 0xB240: 0x775D, //CJK UNIFIED IDEOGRAPH - 0xB241: 0x775E, //CJK UNIFIED IDEOGRAPH - 0xB242: 0x775F, //CJK UNIFIED IDEOGRAPH - 0xB243: 0x7760, //CJK UNIFIED IDEOGRAPH - 0xB244: 0x7764, //CJK UNIFIED IDEOGRAPH - 0xB245: 0x7767, //CJK UNIFIED IDEOGRAPH - 0xB246: 0x7769, //CJK UNIFIED IDEOGRAPH - 0xB247: 0x776A, //CJK UNIFIED IDEOGRAPH - 0xB248: 0x776D, //CJK UNIFIED IDEOGRAPH - 0xB249: 0x776E, //CJK UNIFIED IDEOGRAPH - 0xB24A: 0x776F, //CJK UNIFIED IDEOGRAPH - 0xB24B: 0x7770, //CJK UNIFIED IDEOGRAPH - 0xB24C: 0x7771, //CJK UNIFIED IDEOGRAPH - 0xB24D: 0x7772, //CJK UNIFIED IDEOGRAPH - 0xB24E: 0x7773, //CJK UNIFIED IDEOGRAPH - 0xB24F: 0x7774, //CJK UNIFIED IDEOGRAPH - 0xB250: 0x7775, //CJK UNIFIED IDEOGRAPH - 0xB251: 0x7776, //CJK UNIFIED IDEOGRAPH - 0xB252: 0x7777, //CJK UNIFIED IDEOGRAPH - 0xB253: 0x7778, //CJK UNIFIED IDEOGRAPH - 0xB254: 0x777A, //CJK UNIFIED IDEOGRAPH - 0xB255: 0x777B, //CJK UNIFIED IDEOGRAPH - 0xB256: 0x777C, //CJK UNIFIED IDEOGRAPH - 0xB257: 0x7781, //CJK UNIFIED IDEOGRAPH - 0xB258: 0x7782, //CJK UNIFIED IDEOGRAPH - 0xB259: 0x7783, //CJK UNIFIED IDEOGRAPH - 0xB25A: 0x7786, //CJK UNIFIED IDEOGRAPH - 0xB25B: 0x7787, //CJK UNIFIED IDEOGRAPH - 0xB25C: 0x7788, //CJK UNIFIED IDEOGRAPH - 0xB25D: 0x7789, //CJK UNIFIED IDEOGRAPH - 0xB25E: 0x778A, //CJK UNIFIED IDEOGRAPH - 0xB25F: 0x778B, //CJK UNIFIED IDEOGRAPH - 0xB260: 0x778F, //CJK UNIFIED IDEOGRAPH - 0xB261: 0x7790, //CJK UNIFIED IDEOGRAPH - 0xB262: 0x7793, //CJK UNIFIED IDEOGRAPH - 0xB263: 0x7794, //CJK UNIFIED IDEOGRAPH - 0xB264: 0x7795, //CJK UNIFIED IDEOGRAPH - 0xB265: 0x7796, //CJK UNIFIED IDEOGRAPH - 0xB266: 0x7797, //CJK UNIFIED IDEOGRAPH - 0xB267: 0x7798, //CJK UNIFIED IDEOGRAPH - 0xB268: 0x7799, //CJK UNIFIED IDEOGRAPH - 0xB269: 0x779A, //CJK UNIFIED IDEOGRAPH - 0xB26A: 0x779B, //CJK UNIFIED IDEOGRAPH - 0xB26B: 0x779C, //CJK UNIFIED IDEOGRAPH - 0xB26C: 0x779D, //CJK UNIFIED IDEOGRAPH - 0xB26D: 0x779E, //CJK UNIFIED IDEOGRAPH - 0xB26E: 0x77A1, //CJK UNIFIED IDEOGRAPH - 0xB26F: 0x77A3, //CJK UNIFIED IDEOGRAPH - 0xB270: 0x77A4, //CJK UNIFIED IDEOGRAPH - 0xB271: 0x77A6, //CJK UNIFIED IDEOGRAPH - 0xB272: 0x77A8, //CJK UNIFIED IDEOGRAPH - 0xB273: 0x77AB, //CJK UNIFIED IDEOGRAPH - 0xB274: 0x77AD, //CJK UNIFIED IDEOGRAPH - 0xB275: 0x77AE, //CJK UNIFIED IDEOGRAPH - 0xB276: 0x77AF, //CJK UNIFIED IDEOGRAPH - 0xB277: 0x77B1, //CJK UNIFIED IDEOGRAPH - 0xB278: 0x77B2, //CJK UNIFIED IDEOGRAPH - 0xB279: 0x77B4, //CJK UNIFIED IDEOGRAPH - 0xB27A: 0x77B6, //CJK UNIFIED IDEOGRAPH - 0xB27B: 0x77B7, //CJK UNIFIED IDEOGRAPH - 0xB27C: 0x77B8, //CJK UNIFIED IDEOGRAPH - 0xB27D: 0x77B9, //CJK UNIFIED IDEOGRAPH - 0xB27E: 0x77BA, //CJK UNIFIED IDEOGRAPH - 0xB280: 0x77BC, //CJK UNIFIED IDEOGRAPH - 0xB281: 0x77BE, //CJK UNIFIED IDEOGRAPH - 0xB282: 0x77C0, //CJK UNIFIED IDEOGRAPH - 0xB283: 0x77C1, //CJK UNIFIED IDEOGRAPH - 0xB284: 0x77C2, //CJK UNIFIED IDEOGRAPH - 0xB285: 0x77C3, //CJK UNIFIED IDEOGRAPH - 0xB286: 0x77C4, //CJK UNIFIED IDEOGRAPH - 0xB287: 0x77C5, //CJK UNIFIED IDEOGRAPH - 0xB288: 0x77C6, //CJK UNIFIED IDEOGRAPH - 0xB289: 0x77C7, //CJK UNIFIED IDEOGRAPH - 0xB28A: 0x77C8, //CJK UNIFIED IDEOGRAPH - 0xB28B: 0x77C9, //CJK UNIFIED IDEOGRAPH - 0xB28C: 0x77CA, //CJK UNIFIED IDEOGRAPH - 0xB28D: 0x77CB, //CJK UNIFIED IDEOGRAPH - 0xB28E: 0x77CC, //CJK UNIFIED IDEOGRAPH - 0xB28F: 0x77CE, //CJK UNIFIED IDEOGRAPH - 0xB290: 0x77CF, //CJK UNIFIED IDEOGRAPH - 0xB291: 0x77D0, //CJK UNIFIED IDEOGRAPH - 0xB292: 0x77D1, //CJK UNIFIED IDEOGRAPH - 0xB293: 0x77D2, //CJK UNIFIED IDEOGRAPH - 0xB294: 0x77D3, //CJK UNIFIED IDEOGRAPH - 0xB295: 0x77D4, //CJK UNIFIED IDEOGRAPH - 0xB296: 0x77D5, //CJK UNIFIED IDEOGRAPH - 0xB297: 0x77D6, //CJK UNIFIED IDEOGRAPH - 0xB298: 0x77D8, //CJK UNIFIED IDEOGRAPH - 0xB299: 0x77D9, //CJK UNIFIED IDEOGRAPH - 0xB29A: 0x77DA, //CJK UNIFIED IDEOGRAPH - 0xB29B: 0x77DD, //CJK UNIFIED IDEOGRAPH - 0xB29C: 0x77DE, //CJK UNIFIED IDEOGRAPH - 0xB29D: 0x77DF, //CJK UNIFIED IDEOGRAPH - 0xB29E: 0x77E0, //CJK UNIFIED IDEOGRAPH - 0xB29F: 0x77E1, //CJK UNIFIED IDEOGRAPH - 0xB2A0: 0x77E4, //CJK UNIFIED IDEOGRAPH - 0xB2A1: 0x75C5, //CJK UNIFIED IDEOGRAPH - 0xB2A2: 0x5E76, //CJK UNIFIED IDEOGRAPH - 0xB2A3: 0x73BB, //CJK UNIFIED IDEOGRAPH - 0xB2A4: 0x83E0, //CJK UNIFIED IDEOGRAPH - 0xB2A5: 0x64AD, //CJK UNIFIED IDEOGRAPH - 0xB2A6: 0x62E8, //CJK UNIFIED IDEOGRAPH - 0xB2A7: 0x94B5, //CJK UNIFIED IDEOGRAPH - 0xB2A8: 0x6CE2, //CJK UNIFIED IDEOGRAPH - 0xB2A9: 0x535A, //CJK UNIFIED IDEOGRAPH - 0xB2AA: 0x52C3, //CJK UNIFIED IDEOGRAPH - 0xB2AB: 0x640F, //CJK UNIFIED IDEOGRAPH - 0xB2AC: 0x94C2, //CJK UNIFIED IDEOGRAPH - 0xB2AD: 0x7B94, //CJK UNIFIED IDEOGRAPH - 0xB2AE: 0x4F2F, //CJK UNIFIED IDEOGRAPH - 0xB2AF: 0x5E1B, //CJK UNIFIED IDEOGRAPH - 0xB2B0: 0x8236, //CJK UNIFIED IDEOGRAPH - 0xB2B1: 0x8116, //CJK UNIFIED IDEOGRAPH - 0xB2B2: 0x818A, //CJK UNIFIED IDEOGRAPH - 0xB2B3: 0x6E24, //CJK UNIFIED IDEOGRAPH - 0xB2B4: 0x6CCA, //CJK UNIFIED IDEOGRAPH - 0xB2B5: 0x9A73, //CJK UNIFIED IDEOGRAPH - 0xB2B6: 0x6355, //CJK UNIFIED IDEOGRAPH - 0xB2B7: 0x535C, //CJK UNIFIED IDEOGRAPH - 0xB2B8: 0x54FA, //CJK UNIFIED IDEOGRAPH - 0xB2B9: 0x8865, //CJK UNIFIED IDEOGRAPH - 0xB2BA: 0x57E0, //CJK UNIFIED IDEOGRAPH - 0xB2BB: 0x4E0D, //CJK UNIFIED IDEOGRAPH - 0xB2BC: 0x5E03, //CJK UNIFIED IDEOGRAPH - 0xB2BD: 0x6B65, //CJK UNIFIED IDEOGRAPH - 0xB2BE: 0x7C3F, //CJK UNIFIED IDEOGRAPH - 0xB2BF: 0x90E8, //CJK UNIFIED IDEOGRAPH - 0xB2C0: 0x6016, //CJK UNIFIED IDEOGRAPH - 0xB2C1: 0x64E6, //CJK UNIFIED IDEOGRAPH - 0xB2C2: 0x731C, //CJK UNIFIED IDEOGRAPH - 0xB2C3: 0x88C1, //CJK UNIFIED IDEOGRAPH - 0xB2C4: 0x6750, //CJK UNIFIED IDEOGRAPH - 0xB2C5: 0x624D, //CJK UNIFIED IDEOGRAPH - 0xB2C6: 0x8D22, //CJK UNIFIED IDEOGRAPH - 0xB2C7: 0x776C, //CJK UNIFIED IDEOGRAPH - 0xB2C8: 0x8E29, //CJK UNIFIED IDEOGRAPH - 0xB2C9: 0x91C7, //CJK UNIFIED IDEOGRAPH - 0xB2CA: 0x5F69, //CJK UNIFIED IDEOGRAPH - 0xB2CB: 0x83DC, //CJK UNIFIED IDEOGRAPH - 0xB2CC: 0x8521, //CJK UNIFIED IDEOGRAPH - 0xB2CD: 0x9910, //CJK UNIFIED IDEOGRAPH - 0xB2CE: 0x53C2, //CJK UNIFIED IDEOGRAPH - 0xB2CF: 0x8695, //CJK UNIFIED IDEOGRAPH - 0xB2D0: 0x6B8B, //CJK UNIFIED IDEOGRAPH - 0xB2D1: 0x60ED, //CJK UNIFIED IDEOGRAPH - 0xB2D2: 0x60E8, //CJK UNIFIED IDEOGRAPH - 0xB2D3: 0x707F, //CJK UNIFIED IDEOGRAPH - 0xB2D4: 0x82CD, //CJK UNIFIED IDEOGRAPH - 0xB2D5: 0x8231, //CJK UNIFIED IDEOGRAPH - 0xB2D6: 0x4ED3, //CJK UNIFIED IDEOGRAPH - 0xB2D7: 0x6CA7, //CJK UNIFIED IDEOGRAPH - 0xB2D8: 0x85CF, //CJK UNIFIED IDEOGRAPH - 0xB2D9: 0x64CD, //CJK UNIFIED IDEOGRAPH - 0xB2DA: 0x7CD9, //CJK UNIFIED IDEOGRAPH - 0xB2DB: 0x69FD, //CJK UNIFIED IDEOGRAPH - 0xB2DC: 0x66F9, //CJK UNIFIED IDEOGRAPH - 0xB2DD: 0x8349, //CJK UNIFIED IDEOGRAPH - 0xB2DE: 0x5395, //CJK UNIFIED IDEOGRAPH - 0xB2DF: 0x7B56, //CJK UNIFIED IDEOGRAPH - 0xB2E0: 0x4FA7, //CJK UNIFIED IDEOGRAPH - 0xB2E1: 0x518C, //CJK UNIFIED IDEOGRAPH - 0xB2E2: 0x6D4B, //CJK UNIFIED IDEOGRAPH - 0xB2E3: 0x5C42, //CJK UNIFIED IDEOGRAPH - 0xB2E4: 0x8E6D, //CJK UNIFIED IDEOGRAPH - 0xB2E5: 0x63D2, //CJK UNIFIED IDEOGRAPH - 0xB2E6: 0x53C9, //CJK UNIFIED IDEOGRAPH - 0xB2E7: 0x832C, //CJK UNIFIED IDEOGRAPH - 0xB2E8: 0x8336, //CJK UNIFIED IDEOGRAPH - 0xB2E9: 0x67E5, //CJK UNIFIED IDEOGRAPH - 0xB2EA: 0x78B4, //CJK UNIFIED IDEOGRAPH - 0xB2EB: 0x643D, //CJK UNIFIED IDEOGRAPH - 0xB2EC: 0x5BDF, //CJK UNIFIED IDEOGRAPH - 0xB2ED: 0x5C94, //CJK UNIFIED IDEOGRAPH - 0xB2EE: 0x5DEE, //CJK UNIFIED IDEOGRAPH - 0xB2EF: 0x8BE7, //CJK UNIFIED IDEOGRAPH - 0xB2F0: 0x62C6, //CJK UNIFIED IDEOGRAPH - 0xB2F1: 0x67F4, //CJK UNIFIED IDEOGRAPH - 0xB2F2: 0x8C7A, //CJK UNIFIED IDEOGRAPH - 0xB2F3: 0x6400, //CJK UNIFIED IDEOGRAPH - 0xB2F4: 0x63BA, //CJK UNIFIED IDEOGRAPH - 0xB2F5: 0x8749, //CJK UNIFIED IDEOGRAPH - 0xB2F6: 0x998B, //CJK UNIFIED IDEOGRAPH - 0xB2F7: 0x8C17, //CJK UNIFIED IDEOGRAPH - 0xB2F8: 0x7F20, //CJK UNIFIED IDEOGRAPH - 0xB2F9: 0x94F2, //CJK UNIFIED IDEOGRAPH - 0xB2FA: 0x4EA7, //CJK UNIFIED IDEOGRAPH - 0xB2FB: 0x9610, //CJK UNIFIED IDEOGRAPH - 0xB2FC: 0x98A4, //CJK UNIFIED IDEOGRAPH - 0xB2FD: 0x660C, //CJK UNIFIED IDEOGRAPH - 0xB2FE: 0x7316, //CJK UNIFIED IDEOGRAPH - 0xB340: 0x77E6, //CJK UNIFIED IDEOGRAPH - 0xB341: 0x77E8, //CJK UNIFIED IDEOGRAPH - 0xB342: 0x77EA, //CJK UNIFIED IDEOGRAPH - 0xB343: 0x77EF, //CJK UNIFIED IDEOGRAPH - 0xB344: 0x77F0, //CJK UNIFIED IDEOGRAPH - 0xB345: 0x77F1, //CJK UNIFIED IDEOGRAPH - 0xB346: 0x77F2, //CJK UNIFIED IDEOGRAPH - 0xB347: 0x77F4, //CJK UNIFIED IDEOGRAPH - 0xB348: 0x77F5, //CJK UNIFIED IDEOGRAPH - 0xB349: 0x77F7, //CJK UNIFIED IDEOGRAPH - 0xB34A: 0x77F9, //CJK UNIFIED IDEOGRAPH - 0xB34B: 0x77FA, //CJK UNIFIED IDEOGRAPH - 0xB34C: 0x77FB, //CJK UNIFIED IDEOGRAPH - 0xB34D: 0x77FC, //CJK UNIFIED IDEOGRAPH - 0xB34E: 0x7803, //CJK UNIFIED IDEOGRAPH - 0xB34F: 0x7804, //CJK UNIFIED IDEOGRAPH - 0xB350: 0x7805, //CJK UNIFIED IDEOGRAPH - 0xB351: 0x7806, //CJK UNIFIED IDEOGRAPH - 0xB352: 0x7807, //CJK UNIFIED IDEOGRAPH - 0xB353: 0x7808, //CJK UNIFIED IDEOGRAPH - 0xB354: 0x780A, //CJK UNIFIED IDEOGRAPH - 0xB355: 0x780B, //CJK UNIFIED IDEOGRAPH - 0xB356: 0x780E, //CJK UNIFIED IDEOGRAPH - 0xB357: 0x780F, //CJK UNIFIED IDEOGRAPH - 0xB358: 0x7810, //CJK UNIFIED IDEOGRAPH - 0xB359: 0x7813, //CJK UNIFIED IDEOGRAPH - 0xB35A: 0x7815, //CJK UNIFIED IDEOGRAPH - 0xB35B: 0x7819, //CJK UNIFIED IDEOGRAPH - 0xB35C: 0x781B, //CJK UNIFIED IDEOGRAPH - 0xB35D: 0x781E, //CJK UNIFIED IDEOGRAPH - 0xB35E: 0x7820, //CJK UNIFIED IDEOGRAPH - 0xB35F: 0x7821, //CJK UNIFIED IDEOGRAPH - 0xB360: 0x7822, //CJK UNIFIED IDEOGRAPH - 0xB361: 0x7824, //CJK UNIFIED IDEOGRAPH - 0xB362: 0x7828, //CJK UNIFIED IDEOGRAPH - 0xB363: 0x782A, //CJK UNIFIED IDEOGRAPH - 0xB364: 0x782B, //CJK UNIFIED IDEOGRAPH - 0xB365: 0x782E, //CJK UNIFIED IDEOGRAPH - 0xB366: 0x782F, //CJK UNIFIED IDEOGRAPH - 0xB367: 0x7831, //CJK UNIFIED IDEOGRAPH - 0xB368: 0x7832, //CJK UNIFIED IDEOGRAPH - 0xB369: 0x7833, //CJK UNIFIED IDEOGRAPH - 0xB36A: 0x7835, //CJK UNIFIED IDEOGRAPH - 0xB36B: 0x7836, //CJK UNIFIED IDEOGRAPH - 0xB36C: 0x783D, //CJK UNIFIED IDEOGRAPH - 0xB36D: 0x783F, //CJK UNIFIED IDEOGRAPH - 0xB36E: 0x7841, //CJK UNIFIED IDEOGRAPH - 0xB36F: 0x7842, //CJK UNIFIED IDEOGRAPH - 0xB370: 0x7843, //CJK UNIFIED IDEOGRAPH - 0xB371: 0x7844, //CJK UNIFIED IDEOGRAPH - 0xB372: 0x7846, //CJK UNIFIED IDEOGRAPH - 0xB373: 0x7848, //CJK UNIFIED IDEOGRAPH - 0xB374: 0x7849, //CJK UNIFIED IDEOGRAPH - 0xB375: 0x784A, //CJK UNIFIED IDEOGRAPH - 0xB376: 0x784B, //CJK UNIFIED IDEOGRAPH - 0xB377: 0x784D, //CJK UNIFIED IDEOGRAPH - 0xB378: 0x784F, //CJK UNIFIED IDEOGRAPH - 0xB379: 0x7851, //CJK UNIFIED IDEOGRAPH - 0xB37A: 0x7853, //CJK UNIFIED IDEOGRAPH - 0xB37B: 0x7854, //CJK UNIFIED IDEOGRAPH - 0xB37C: 0x7858, //CJK UNIFIED IDEOGRAPH - 0xB37D: 0x7859, //CJK UNIFIED IDEOGRAPH - 0xB37E: 0x785A, //CJK UNIFIED IDEOGRAPH - 0xB380: 0x785B, //CJK UNIFIED IDEOGRAPH - 0xB381: 0x785C, //CJK UNIFIED IDEOGRAPH - 0xB382: 0x785E, //CJK UNIFIED IDEOGRAPH - 0xB383: 0x785F, //CJK UNIFIED IDEOGRAPH - 0xB384: 0x7860, //CJK UNIFIED IDEOGRAPH - 0xB385: 0x7861, //CJK UNIFIED IDEOGRAPH - 0xB386: 0x7862, //CJK UNIFIED IDEOGRAPH - 0xB387: 0x7863, //CJK UNIFIED IDEOGRAPH - 0xB388: 0x7864, //CJK UNIFIED IDEOGRAPH - 0xB389: 0x7865, //CJK UNIFIED IDEOGRAPH - 0xB38A: 0x7866, //CJK UNIFIED IDEOGRAPH - 0xB38B: 0x7867, //CJK UNIFIED IDEOGRAPH - 0xB38C: 0x7868, //CJK UNIFIED IDEOGRAPH - 0xB38D: 0x7869, //CJK UNIFIED IDEOGRAPH - 0xB38E: 0x786F, //CJK UNIFIED IDEOGRAPH - 0xB38F: 0x7870, //CJK UNIFIED IDEOGRAPH - 0xB390: 0x7871, //CJK UNIFIED IDEOGRAPH - 0xB391: 0x7872, //CJK UNIFIED IDEOGRAPH - 0xB392: 0x7873, //CJK UNIFIED IDEOGRAPH - 0xB393: 0x7874, //CJK UNIFIED IDEOGRAPH - 0xB394: 0x7875, //CJK UNIFIED IDEOGRAPH - 0xB395: 0x7876, //CJK UNIFIED IDEOGRAPH - 0xB396: 0x7878, //CJK UNIFIED IDEOGRAPH - 0xB397: 0x7879, //CJK UNIFIED IDEOGRAPH - 0xB398: 0x787A, //CJK UNIFIED IDEOGRAPH - 0xB399: 0x787B, //CJK UNIFIED IDEOGRAPH - 0xB39A: 0x787D, //CJK UNIFIED IDEOGRAPH - 0xB39B: 0x787E, //CJK UNIFIED IDEOGRAPH - 0xB39C: 0x787F, //CJK UNIFIED IDEOGRAPH - 0xB39D: 0x7880, //CJK UNIFIED IDEOGRAPH - 0xB39E: 0x7881, //CJK UNIFIED IDEOGRAPH - 0xB39F: 0x7882, //CJK UNIFIED IDEOGRAPH - 0xB3A0: 0x7883, //CJK UNIFIED IDEOGRAPH - 0xB3A1: 0x573A, //CJK UNIFIED IDEOGRAPH - 0xB3A2: 0x5C1D, //CJK UNIFIED IDEOGRAPH - 0xB3A3: 0x5E38, //CJK UNIFIED IDEOGRAPH - 0xB3A4: 0x957F, //CJK UNIFIED IDEOGRAPH - 0xB3A5: 0x507F, //CJK UNIFIED IDEOGRAPH - 0xB3A6: 0x80A0, //CJK UNIFIED IDEOGRAPH - 0xB3A7: 0x5382, //CJK UNIFIED IDEOGRAPH - 0xB3A8: 0x655E, //CJK UNIFIED IDEOGRAPH - 0xB3A9: 0x7545, //CJK UNIFIED IDEOGRAPH - 0xB3AA: 0x5531, //CJK UNIFIED IDEOGRAPH - 0xB3AB: 0x5021, //CJK UNIFIED IDEOGRAPH - 0xB3AC: 0x8D85, //CJK UNIFIED IDEOGRAPH - 0xB3AD: 0x6284, //CJK UNIFIED IDEOGRAPH - 0xB3AE: 0x949E, //CJK UNIFIED IDEOGRAPH - 0xB3AF: 0x671D, //CJK UNIFIED IDEOGRAPH - 0xB3B0: 0x5632, //CJK UNIFIED IDEOGRAPH - 0xB3B1: 0x6F6E, //CJK UNIFIED IDEOGRAPH - 0xB3B2: 0x5DE2, //CJK UNIFIED IDEOGRAPH - 0xB3B3: 0x5435, //CJK UNIFIED IDEOGRAPH - 0xB3B4: 0x7092, //CJK UNIFIED IDEOGRAPH - 0xB3B5: 0x8F66, //CJK UNIFIED IDEOGRAPH - 0xB3B6: 0x626F, //CJK UNIFIED IDEOGRAPH - 0xB3B7: 0x64A4, //CJK UNIFIED IDEOGRAPH - 0xB3B8: 0x63A3, //CJK UNIFIED IDEOGRAPH - 0xB3B9: 0x5F7B, //CJK UNIFIED IDEOGRAPH - 0xB3BA: 0x6F88, //CJK UNIFIED IDEOGRAPH - 0xB3BB: 0x90F4, //CJK UNIFIED IDEOGRAPH - 0xB3BC: 0x81E3, //CJK UNIFIED IDEOGRAPH - 0xB3BD: 0x8FB0, //CJK UNIFIED IDEOGRAPH - 0xB3BE: 0x5C18, //CJK UNIFIED IDEOGRAPH - 0xB3BF: 0x6668, //CJK UNIFIED IDEOGRAPH - 0xB3C0: 0x5FF1, //CJK UNIFIED IDEOGRAPH - 0xB3C1: 0x6C89, //CJK UNIFIED IDEOGRAPH - 0xB3C2: 0x9648, //CJK UNIFIED IDEOGRAPH - 0xB3C3: 0x8D81, //CJK UNIFIED IDEOGRAPH - 0xB3C4: 0x886C, //CJK UNIFIED IDEOGRAPH - 0xB3C5: 0x6491, //CJK UNIFIED IDEOGRAPH - 0xB3C6: 0x79F0, //CJK UNIFIED IDEOGRAPH - 0xB3C7: 0x57CE, //CJK UNIFIED IDEOGRAPH - 0xB3C8: 0x6A59, //CJK UNIFIED IDEOGRAPH - 0xB3C9: 0x6210, //CJK UNIFIED IDEOGRAPH - 0xB3CA: 0x5448, //CJK UNIFIED IDEOGRAPH - 0xB3CB: 0x4E58, //CJK UNIFIED IDEOGRAPH - 0xB3CC: 0x7A0B, //CJK UNIFIED IDEOGRAPH - 0xB3CD: 0x60E9, //CJK UNIFIED IDEOGRAPH - 0xB3CE: 0x6F84, //CJK UNIFIED IDEOGRAPH - 0xB3CF: 0x8BDA, //CJK UNIFIED IDEOGRAPH - 0xB3D0: 0x627F, //CJK UNIFIED IDEOGRAPH - 0xB3D1: 0x901E, //CJK UNIFIED IDEOGRAPH - 0xB3D2: 0x9A8B, //CJK UNIFIED IDEOGRAPH - 0xB3D3: 0x79E4, //CJK UNIFIED IDEOGRAPH - 0xB3D4: 0x5403, //CJK UNIFIED IDEOGRAPH - 0xB3D5: 0x75F4, //CJK UNIFIED IDEOGRAPH - 0xB3D6: 0x6301, //CJK UNIFIED IDEOGRAPH - 0xB3D7: 0x5319, //CJK UNIFIED IDEOGRAPH - 0xB3D8: 0x6C60, //CJK UNIFIED IDEOGRAPH - 0xB3D9: 0x8FDF, //CJK UNIFIED IDEOGRAPH - 0xB3DA: 0x5F1B, //CJK UNIFIED IDEOGRAPH - 0xB3DB: 0x9A70, //CJK UNIFIED IDEOGRAPH - 0xB3DC: 0x803B, //CJK UNIFIED IDEOGRAPH - 0xB3DD: 0x9F7F, //CJK UNIFIED IDEOGRAPH - 0xB3DE: 0x4F88, //CJK UNIFIED IDEOGRAPH - 0xB3DF: 0x5C3A, //CJK UNIFIED IDEOGRAPH - 0xB3E0: 0x8D64, //CJK UNIFIED IDEOGRAPH - 0xB3E1: 0x7FC5, //CJK UNIFIED IDEOGRAPH - 0xB3E2: 0x65A5, //CJK UNIFIED IDEOGRAPH - 0xB3E3: 0x70BD, //CJK UNIFIED IDEOGRAPH - 0xB3E4: 0x5145, //CJK UNIFIED IDEOGRAPH - 0xB3E5: 0x51B2, //CJK UNIFIED IDEOGRAPH - 0xB3E6: 0x866B, //CJK UNIFIED IDEOGRAPH - 0xB3E7: 0x5D07, //CJK UNIFIED IDEOGRAPH - 0xB3E8: 0x5BA0, //CJK UNIFIED IDEOGRAPH - 0xB3E9: 0x62BD, //CJK UNIFIED IDEOGRAPH - 0xB3EA: 0x916C, //CJK UNIFIED IDEOGRAPH - 0xB3EB: 0x7574, //CJK UNIFIED IDEOGRAPH - 0xB3EC: 0x8E0C, //CJK UNIFIED IDEOGRAPH - 0xB3ED: 0x7A20, //CJK UNIFIED IDEOGRAPH - 0xB3EE: 0x6101, //CJK UNIFIED IDEOGRAPH - 0xB3EF: 0x7B79, //CJK UNIFIED IDEOGRAPH - 0xB3F0: 0x4EC7, //CJK UNIFIED IDEOGRAPH - 0xB3F1: 0x7EF8, //CJK UNIFIED IDEOGRAPH - 0xB3F2: 0x7785, //CJK UNIFIED IDEOGRAPH - 0xB3F3: 0x4E11, //CJK UNIFIED IDEOGRAPH - 0xB3F4: 0x81ED, //CJK UNIFIED IDEOGRAPH - 0xB3F5: 0x521D, //CJK UNIFIED IDEOGRAPH - 0xB3F6: 0x51FA, //CJK UNIFIED IDEOGRAPH - 0xB3F7: 0x6A71, //CJK UNIFIED IDEOGRAPH - 0xB3F8: 0x53A8, //CJK UNIFIED IDEOGRAPH - 0xB3F9: 0x8E87, //CJK UNIFIED IDEOGRAPH - 0xB3FA: 0x9504, //CJK UNIFIED IDEOGRAPH - 0xB3FB: 0x96CF, //CJK UNIFIED IDEOGRAPH - 0xB3FC: 0x6EC1, //CJK UNIFIED IDEOGRAPH - 0xB3FD: 0x9664, //CJK UNIFIED IDEOGRAPH - 0xB3FE: 0x695A, //CJK UNIFIED IDEOGRAPH - 0xB440: 0x7884, //CJK UNIFIED IDEOGRAPH - 0xB441: 0x7885, //CJK UNIFIED IDEOGRAPH - 0xB442: 0x7886, //CJK UNIFIED IDEOGRAPH - 0xB443: 0x7888, //CJK UNIFIED IDEOGRAPH - 0xB444: 0x788A, //CJK UNIFIED IDEOGRAPH - 0xB445: 0x788B, //CJK UNIFIED IDEOGRAPH - 0xB446: 0x788F, //CJK UNIFIED IDEOGRAPH - 0xB447: 0x7890, //CJK UNIFIED IDEOGRAPH - 0xB448: 0x7892, //CJK UNIFIED IDEOGRAPH - 0xB449: 0x7894, //CJK UNIFIED IDEOGRAPH - 0xB44A: 0x7895, //CJK UNIFIED IDEOGRAPH - 0xB44B: 0x7896, //CJK UNIFIED IDEOGRAPH - 0xB44C: 0x7899, //CJK UNIFIED IDEOGRAPH - 0xB44D: 0x789D, //CJK UNIFIED IDEOGRAPH - 0xB44E: 0x789E, //CJK UNIFIED IDEOGRAPH - 0xB44F: 0x78A0, //CJK UNIFIED IDEOGRAPH - 0xB450: 0x78A2, //CJK UNIFIED IDEOGRAPH - 0xB451: 0x78A4, //CJK UNIFIED IDEOGRAPH - 0xB452: 0x78A6, //CJK UNIFIED IDEOGRAPH - 0xB453: 0x78A8, //CJK UNIFIED IDEOGRAPH - 0xB454: 0x78A9, //CJK UNIFIED IDEOGRAPH - 0xB455: 0x78AA, //CJK UNIFIED IDEOGRAPH - 0xB456: 0x78AB, //CJK UNIFIED IDEOGRAPH - 0xB457: 0x78AC, //CJK UNIFIED IDEOGRAPH - 0xB458: 0x78AD, //CJK UNIFIED IDEOGRAPH - 0xB459: 0x78AE, //CJK UNIFIED IDEOGRAPH - 0xB45A: 0x78AF, //CJK UNIFIED IDEOGRAPH - 0xB45B: 0x78B5, //CJK UNIFIED IDEOGRAPH - 0xB45C: 0x78B6, //CJK UNIFIED IDEOGRAPH - 0xB45D: 0x78B7, //CJK UNIFIED IDEOGRAPH - 0xB45E: 0x78B8, //CJK UNIFIED IDEOGRAPH - 0xB45F: 0x78BA, //CJK UNIFIED IDEOGRAPH - 0xB460: 0x78BB, //CJK UNIFIED IDEOGRAPH - 0xB461: 0x78BC, //CJK UNIFIED IDEOGRAPH - 0xB462: 0x78BD, //CJK UNIFIED IDEOGRAPH - 0xB463: 0x78BF, //CJK UNIFIED IDEOGRAPH - 0xB464: 0x78C0, //CJK UNIFIED IDEOGRAPH - 0xB465: 0x78C2, //CJK UNIFIED IDEOGRAPH - 0xB466: 0x78C3, //CJK UNIFIED IDEOGRAPH - 0xB467: 0x78C4, //CJK UNIFIED IDEOGRAPH - 0xB468: 0x78C6, //CJK UNIFIED IDEOGRAPH - 0xB469: 0x78C7, //CJK UNIFIED IDEOGRAPH - 0xB46A: 0x78C8, //CJK UNIFIED IDEOGRAPH - 0xB46B: 0x78CC, //CJK UNIFIED IDEOGRAPH - 0xB46C: 0x78CD, //CJK UNIFIED IDEOGRAPH - 0xB46D: 0x78CE, //CJK UNIFIED IDEOGRAPH - 0xB46E: 0x78CF, //CJK UNIFIED IDEOGRAPH - 0xB46F: 0x78D1, //CJK UNIFIED IDEOGRAPH - 0xB470: 0x78D2, //CJK UNIFIED IDEOGRAPH - 0xB471: 0x78D3, //CJK UNIFIED IDEOGRAPH - 0xB472: 0x78D6, //CJK UNIFIED IDEOGRAPH - 0xB473: 0x78D7, //CJK UNIFIED IDEOGRAPH - 0xB474: 0x78D8, //CJK UNIFIED IDEOGRAPH - 0xB475: 0x78DA, //CJK UNIFIED IDEOGRAPH - 0xB476: 0x78DB, //CJK UNIFIED IDEOGRAPH - 0xB477: 0x78DC, //CJK UNIFIED IDEOGRAPH - 0xB478: 0x78DD, //CJK UNIFIED IDEOGRAPH - 0xB479: 0x78DE, //CJK UNIFIED IDEOGRAPH - 0xB47A: 0x78DF, //CJK UNIFIED IDEOGRAPH - 0xB47B: 0x78E0, //CJK UNIFIED IDEOGRAPH - 0xB47C: 0x78E1, //CJK UNIFIED IDEOGRAPH - 0xB47D: 0x78E2, //CJK UNIFIED IDEOGRAPH - 0xB47E: 0x78E3, //CJK UNIFIED IDEOGRAPH - 0xB480: 0x78E4, //CJK UNIFIED IDEOGRAPH - 0xB481: 0x78E5, //CJK UNIFIED IDEOGRAPH - 0xB482: 0x78E6, //CJK UNIFIED IDEOGRAPH - 0xB483: 0x78E7, //CJK UNIFIED IDEOGRAPH - 0xB484: 0x78E9, //CJK UNIFIED IDEOGRAPH - 0xB485: 0x78EA, //CJK UNIFIED IDEOGRAPH - 0xB486: 0x78EB, //CJK UNIFIED IDEOGRAPH - 0xB487: 0x78ED, //CJK UNIFIED IDEOGRAPH - 0xB488: 0x78EE, //CJK UNIFIED IDEOGRAPH - 0xB489: 0x78EF, //CJK UNIFIED IDEOGRAPH - 0xB48A: 0x78F0, //CJK UNIFIED IDEOGRAPH - 0xB48B: 0x78F1, //CJK UNIFIED IDEOGRAPH - 0xB48C: 0x78F3, //CJK UNIFIED IDEOGRAPH - 0xB48D: 0x78F5, //CJK UNIFIED IDEOGRAPH - 0xB48E: 0x78F6, //CJK UNIFIED IDEOGRAPH - 0xB48F: 0x78F8, //CJK UNIFIED IDEOGRAPH - 0xB490: 0x78F9, //CJK UNIFIED IDEOGRAPH - 0xB491: 0x78FB, //CJK UNIFIED IDEOGRAPH - 0xB492: 0x78FC, //CJK UNIFIED IDEOGRAPH - 0xB493: 0x78FD, //CJK UNIFIED IDEOGRAPH - 0xB494: 0x78FE, //CJK UNIFIED IDEOGRAPH - 0xB495: 0x78FF, //CJK UNIFIED IDEOGRAPH - 0xB496: 0x7900, //CJK UNIFIED IDEOGRAPH - 0xB497: 0x7902, //CJK UNIFIED IDEOGRAPH - 0xB498: 0x7903, //CJK UNIFIED IDEOGRAPH - 0xB499: 0x7904, //CJK UNIFIED IDEOGRAPH - 0xB49A: 0x7906, //CJK UNIFIED IDEOGRAPH - 0xB49B: 0x7907, //CJK UNIFIED IDEOGRAPH - 0xB49C: 0x7908, //CJK UNIFIED IDEOGRAPH - 0xB49D: 0x7909, //CJK UNIFIED IDEOGRAPH - 0xB49E: 0x790A, //CJK UNIFIED IDEOGRAPH - 0xB49F: 0x790B, //CJK UNIFIED IDEOGRAPH - 0xB4A0: 0x790C, //CJK UNIFIED IDEOGRAPH - 0xB4A1: 0x7840, //CJK UNIFIED IDEOGRAPH - 0xB4A2: 0x50A8, //CJK UNIFIED IDEOGRAPH - 0xB4A3: 0x77D7, //CJK UNIFIED IDEOGRAPH - 0xB4A4: 0x6410, //CJK UNIFIED IDEOGRAPH - 0xB4A5: 0x89E6, //CJK UNIFIED IDEOGRAPH - 0xB4A6: 0x5904, //CJK UNIFIED IDEOGRAPH - 0xB4A7: 0x63E3, //CJK UNIFIED IDEOGRAPH - 0xB4A8: 0x5DDD, //CJK UNIFIED IDEOGRAPH - 0xB4A9: 0x7A7F, //CJK UNIFIED IDEOGRAPH - 0xB4AA: 0x693D, //CJK UNIFIED IDEOGRAPH - 0xB4AB: 0x4F20, //CJK UNIFIED IDEOGRAPH - 0xB4AC: 0x8239, //CJK UNIFIED IDEOGRAPH - 0xB4AD: 0x5598, //CJK UNIFIED IDEOGRAPH - 0xB4AE: 0x4E32, //CJK UNIFIED IDEOGRAPH - 0xB4AF: 0x75AE, //CJK UNIFIED IDEOGRAPH - 0xB4B0: 0x7A97, //CJK UNIFIED IDEOGRAPH - 0xB4B1: 0x5E62, //CJK UNIFIED IDEOGRAPH - 0xB4B2: 0x5E8A, //CJK UNIFIED IDEOGRAPH - 0xB4B3: 0x95EF, //CJK UNIFIED IDEOGRAPH - 0xB4B4: 0x521B, //CJK UNIFIED IDEOGRAPH - 0xB4B5: 0x5439, //CJK UNIFIED IDEOGRAPH - 0xB4B6: 0x708A, //CJK UNIFIED IDEOGRAPH - 0xB4B7: 0x6376, //CJK UNIFIED IDEOGRAPH - 0xB4B8: 0x9524, //CJK UNIFIED IDEOGRAPH - 0xB4B9: 0x5782, //CJK UNIFIED IDEOGRAPH - 0xB4BA: 0x6625, //CJK UNIFIED IDEOGRAPH - 0xB4BB: 0x693F, //CJK UNIFIED IDEOGRAPH - 0xB4BC: 0x9187, //CJK UNIFIED IDEOGRAPH - 0xB4BD: 0x5507, //CJK UNIFIED IDEOGRAPH - 0xB4BE: 0x6DF3, //CJK UNIFIED IDEOGRAPH - 0xB4BF: 0x7EAF, //CJK UNIFIED IDEOGRAPH - 0xB4C0: 0x8822, //CJK UNIFIED IDEOGRAPH - 0xB4C1: 0x6233, //CJK UNIFIED IDEOGRAPH - 0xB4C2: 0x7EF0, //CJK UNIFIED IDEOGRAPH - 0xB4C3: 0x75B5, //CJK UNIFIED IDEOGRAPH - 0xB4C4: 0x8328, //CJK UNIFIED IDEOGRAPH - 0xB4C5: 0x78C1, //CJK UNIFIED IDEOGRAPH - 0xB4C6: 0x96CC, //CJK UNIFIED IDEOGRAPH - 0xB4C7: 0x8F9E, //CJK UNIFIED IDEOGRAPH - 0xB4C8: 0x6148, //CJK UNIFIED IDEOGRAPH - 0xB4C9: 0x74F7, //CJK UNIFIED IDEOGRAPH - 0xB4CA: 0x8BCD, //CJK UNIFIED IDEOGRAPH - 0xB4CB: 0x6B64, //CJK UNIFIED IDEOGRAPH - 0xB4CC: 0x523A, //CJK UNIFIED IDEOGRAPH - 0xB4CD: 0x8D50, //CJK UNIFIED IDEOGRAPH - 0xB4CE: 0x6B21, //CJK UNIFIED IDEOGRAPH - 0xB4CF: 0x806A, //CJK UNIFIED IDEOGRAPH - 0xB4D0: 0x8471, //CJK UNIFIED IDEOGRAPH - 0xB4D1: 0x56F1, //CJK UNIFIED IDEOGRAPH - 0xB4D2: 0x5306, //CJK UNIFIED IDEOGRAPH - 0xB4D3: 0x4ECE, //CJK UNIFIED IDEOGRAPH - 0xB4D4: 0x4E1B, //CJK UNIFIED IDEOGRAPH - 0xB4D5: 0x51D1, //CJK UNIFIED IDEOGRAPH - 0xB4D6: 0x7C97, //CJK UNIFIED IDEOGRAPH - 0xB4D7: 0x918B, //CJK UNIFIED IDEOGRAPH - 0xB4D8: 0x7C07, //CJK UNIFIED IDEOGRAPH - 0xB4D9: 0x4FC3, //CJK UNIFIED IDEOGRAPH - 0xB4DA: 0x8E7F, //CJK UNIFIED IDEOGRAPH - 0xB4DB: 0x7BE1, //CJK UNIFIED IDEOGRAPH - 0xB4DC: 0x7A9C, //CJK UNIFIED IDEOGRAPH - 0xB4DD: 0x6467, //CJK UNIFIED IDEOGRAPH - 0xB4DE: 0x5D14, //CJK UNIFIED IDEOGRAPH - 0xB4DF: 0x50AC, //CJK UNIFIED IDEOGRAPH - 0xB4E0: 0x8106, //CJK UNIFIED IDEOGRAPH - 0xB4E1: 0x7601, //CJK UNIFIED IDEOGRAPH - 0xB4E2: 0x7CB9, //CJK UNIFIED IDEOGRAPH - 0xB4E3: 0x6DEC, //CJK UNIFIED IDEOGRAPH - 0xB4E4: 0x7FE0, //CJK UNIFIED IDEOGRAPH - 0xB4E5: 0x6751, //CJK UNIFIED IDEOGRAPH - 0xB4E6: 0x5B58, //CJK UNIFIED IDEOGRAPH - 0xB4E7: 0x5BF8, //CJK UNIFIED IDEOGRAPH - 0xB4E8: 0x78CB, //CJK UNIFIED IDEOGRAPH - 0xB4E9: 0x64AE, //CJK UNIFIED IDEOGRAPH - 0xB4EA: 0x6413, //CJK UNIFIED IDEOGRAPH - 0xB4EB: 0x63AA, //CJK UNIFIED IDEOGRAPH - 0xB4EC: 0x632B, //CJK UNIFIED IDEOGRAPH - 0xB4ED: 0x9519, //CJK UNIFIED IDEOGRAPH - 0xB4EE: 0x642D, //CJK UNIFIED IDEOGRAPH - 0xB4EF: 0x8FBE, //CJK UNIFIED IDEOGRAPH - 0xB4F0: 0x7B54, //CJK UNIFIED IDEOGRAPH - 0xB4F1: 0x7629, //CJK UNIFIED IDEOGRAPH - 0xB4F2: 0x6253, //CJK UNIFIED IDEOGRAPH - 0xB4F3: 0x5927, //CJK UNIFIED IDEOGRAPH - 0xB4F4: 0x5446, //CJK UNIFIED IDEOGRAPH - 0xB4F5: 0x6B79, //CJK UNIFIED IDEOGRAPH - 0xB4F6: 0x50A3, //CJK UNIFIED IDEOGRAPH - 0xB4F7: 0x6234, //CJK UNIFIED IDEOGRAPH - 0xB4F8: 0x5E26, //CJK UNIFIED IDEOGRAPH - 0xB4F9: 0x6B86, //CJK UNIFIED IDEOGRAPH - 0xB4FA: 0x4EE3, //CJK UNIFIED IDEOGRAPH - 0xB4FB: 0x8D37, //CJK UNIFIED IDEOGRAPH - 0xB4FC: 0x888B, //CJK UNIFIED IDEOGRAPH - 0xB4FD: 0x5F85, //CJK UNIFIED IDEOGRAPH - 0xB4FE: 0x902E, //CJK UNIFIED IDEOGRAPH - 0xB540: 0x790D, //CJK UNIFIED IDEOGRAPH - 0xB541: 0x790E, //CJK UNIFIED IDEOGRAPH - 0xB542: 0x790F, //CJK UNIFIED IDEOGRAPH - 0xB543: 0x7910, //CJK UNIFIED IDEOGRAPH - 0xB544: 0x7911, //CJK UNIFIED IDEOGRAPH - 0xB545: 0x7912, //CJK UNIFIED IDEOGRAPH - 0xB546: 0x7914, //CJK UNIFIED IDEOGRAPH - 0xB547: 0x7915, //CJK UNIFIED IDEOGRAPH - 0xB548: 0x7916, //CJK UNIFIED IDEOGRAPH - 0xB549: 0x7917, //CJK UNIFIED IDEOGRAPH - 0xB54A: 0x7918, //CJK UNIFIED IDEOGRAPH - 0xB54B: 0x7919, //CJK UNIFIED IDEOGRAPH - 0xB54C: 0x791A, //CJK UNIFIED IDEOGRAPH - 0xB54D: 0x791B, //CJK UNIFIED IDEOGRAPH - 0xB54E: 0x791C, //CJK UNIFIED IDEOGRAPH - 0xB54F: 0x791D, //CJK UNIFIED IDEOGRAPH - 0xB550: 0x791F, //CJK UNIFIED IDEOGRAPH - 0xB551: 0x7920, //CJK UNIFIED IDEOGRAPH - 0xB552: 0x7921, //CJK UNIFIED IDEOGRAPH - 0xB553: 0x7922, //CJK UNIFIED IDEOGRAPH - 0xB554: 0x7923, //CJK UNIFIED IDEOGRAPH - 0xB555: 0x7925, //CJK UNIFIED IDEOGRAPH - 0xB556: 0x7926, //CJK UNIFIED IDEOGRAPH - 0xB557: 0x7927, //CJK UNIFIED IDEOGRAPH - 0xB558: 0x7928, //CJK UNIFIED IDEOGRAPH - 0xB559: 0x7929, //CJK UNIFIED IDEOGRAPH - 0xB55A: 0x792A, //CJK UNIFIED IDEOGRAPH - 0xB55B: 0x792B, //CJK UNIFIED IDEOGRAPH - 0xB55C: 0x792C, //CJK UNIFIED IDEOGRAPH - 0xB55D: 0x792D, //CJK UNIFIED IDEOGRAPH - 0xB55E: 0x792E, //CJK UNIFIED IDEOGRAPH - 0xB55F: 0x792F, //CJK UNIFIED IDEOGRAPH - 0xB560: 0x7930, //CJK UNIFIED IDEOGRAPH - 0xB561: 0x7931, //CJK UNIFIED IDEOGRAPH - 0xB562: 0x7932, //CJK UNIFIED IDEOGRAPH - 0xB563: 0x7933, //CJK UNIFIED IDEOGRAPH - 0xB564: 0x7935, //CJK UNIFIED IDEOGRAPH - 0xB565: 0x7936, //CJK UNIFIED IDEOGRAPH - 0xB566: 0x7937, //CJK UNIFIED IDEOGRAPH - 0xB567: 0x7938, //CJK UNIFIED IDEOGRAPH - 0xB568: 0x7939, //CJK UNIFIED IDEOGRAPH - 0xB569: 0x793D, //CJK UNIFIED IDEOGRAPH - 0xB56A: 0x793F, //CJK UNIFIED IDEOGRAPH - 0xB56B: 0x7942, //CJK UNIFIED IDEOGRAPH - 0xB56C: 0x7943, //CJK UNIFIED IDEOGRAPH - 0xB56D: 0x7944, //CJK UNIFIED IDEOGRAPH - 0xB56E: 0x7945, //CJK UNIFIED IDEOGRAPH - 0xB56F: 0x7947, //CJK UNIFIED IDEOGRAPH - 0xB570: 0x794A, //CJK UNIFIED IDEOGRAPH - 0xB571: 0x794B, //CJK UNIFIED IDEOGRAPH - 0xB572: 0x794C, //CJK UNIFIED IDEOGRAPH - 0xB573: 0x794D, //CJK UNIFIED IDEOGRAPH - 0xB574: 0x794E, //CJK UNIFIED IDEOGRAPH - 0xB575: 0x794F, //CJK UNIFIED IDEOGRAPH - 0xB576: 0x7950, //CJK UNIFIED IDEOGRAPH - 0xB577: 0x7951, //CJK UNIFIED IDEOGRAPH - 0xB578: 0x7952, //CJK UNIFIED IDEOGRAPH - 0xB579: 0x7954, //CJK UNIFIED IDEOGRAPH - 0xB57A: 0x7955, //CJK UNIFIED IDEOGRAPH - 0xB57B: 0x7958, //CJK UNIFIED IDEOGRAPH - 0xB57C: 0x7959, //CJK UNIFIED IDEOGRAPH - 0xB57D: 0x7961, //CJK UNIFIED IDEOGRAPH - 0xB57E: 0x7963, //CJK UNIFIED IDEOGRAPH - 0xB580: 0x7964, //CJK UNIFIED IDEOGRAPH - 0xB581: 0x7966, //CJK UNIFIED IDEOGRAPH - 0xB582: 0x7969, //CJK UNIFIED IDEOGRAPH - 0xB583: 0x796A, //CJK UNIFIED IDEOGRAPH - 0xB584: 0x796B, //CJK UNIFIED IDEOGRAPH - 0xB585: 0x796C, //CJK UNIFIED IDEOGRAPH - 0xB586: 0x796E, //CJK UNIFIED IDEOGRAPH - 0xB587: 0x7970, //CJK UNIFIED IDEOGRAPH - 0xB588: 0x7971, //CJK UNIFIED IDEOGRAPH - 0xB589: 0x7972, //CJK UNIFIED IDEOGRAPH - 0xB58A: 0x7973, //CJK UNIFIED IDEOGRAPH - 0xB58B: 0x7974, //CJK UNIFIED IDEOGRAPH - 0xB58C: 0x7975, //CJK UNIFIED IDEOGRAPH - 0xB58D: 0x7976, //CJK UNIFIED IDEOGRAPH - 0xB58E: 0x7979, //CJK UNIFIED IDEOGRAPH - 0xB58F: 0x797B, //CJK UNIFIED IDEOGRAPH - 0xB590: 0x797C, //CJK UNIFIED IDEOGRAPH - 0xB591: 0x797D, //CJK UNIFIED IDEOGRAPH - 0xB592: 0x797E, //CJK UNIFIED IDEOGRAPH - 0xB593: 0x797F, //CJK UNIFIED IDEOGRAPH - 0xB594: 0x7982, //CJK UNIFIED IDEOGRAPH - 0xB595: 0x7983, //CJK UNIFIED IDEOGRAPH - 0xB596: 0x7986, //CJK UNIFIED IDEOGRAPH - 0xB597: 0x7987, //CJK UNIFIED IDEOGRAPH - 0xB598: 0x7988, //CJK UNIFIED IDEOGRAPH - 0xB599: 0x7989, //CJK UNIFIED IDEOGRAPH - 0xB59A: 0x798B, //CJK UNIFIED IDEOGRAPH - 0xB59B: 0x798C, //CJK UNIFIED IDEOGRAPH - 0xB59C: 0x798D, //CJK UNIFIED IDEOGRAPH - 0xB59D: 0x798E, //CJK UNIFIED IDEOGRAPH - 0xB59E: 0x7990, //CJK UNIFIED IDEOGRAPH - 0xB59F: 0x7991, //CJK UNIFIED IDEOGRAPH - 0xB5A0: 0x7992, //CJK UNIFIED IDEOGRAPH - 0xB5A1: 0x6020, //CJK UNIFIED IDEOGRAPH - 0xB5A2: 0x803D, //CJK UNIFIED IDEOGRAPH - 0xB5A3: 0x62C5, //CJK UNIFIED IDEOGRAPH - 0xB5A4: 0x4E39, //CJK UNIFIED IDEOGRAPH - 0xB5A5: 0x5355, //CJK UNIFIED IDEOGRAPH - 0xB5A6: 0x90F8, //CJK UNIFIED IDEOGRAPH - 0xB5A7: 0x63B8, //CJK UNIFIED IDEOGRAPH - 0xB5A8: 0x80C6, //CJK UNIFIED IDEOGRAPH - 0xB5A9: 0x65E6, //CJK UNIFIED IDEOGRAPH - 0xB5AA: 0x6C2E, //CJK UNIFIED IDEOGRAPH - 0xB5AB: 0x4F46, //CJK UNIFIED IDEOGRAPH - 0xB5AC: 0x60EE, //CJK UNIFIED IDEOGRAPH - 0xB5AD: 0x6DE1, //CJK UNIFIED IDEOGRAPH - 0xB5AE: 0x8BDE, //CJK UNIFIED IDEOGRAPH - 0xB5AF: 0x5F39, //CJK UNIFIED IDEOGRAPH - 0xB5B0: 0x86CB, //CJK UNIFIED IDEOGRAPH - 0xB5B1: 0x5F53, //CJK UNIFIED IDEOGRAPH - 0xB5B2: 0x6321, //CJK UNIFIED IDEOGRAPH - 0xB5B3: 0x515A, //CJK UNIFIED IDEOGRAPH - 0xB5B4: 0x8361, //CJK UNIFIED IDEOGRAPH - 0xB5B5: 0x6863, //CJK UNIFIED IDEOGRAPH - 0xB5B6: 0x5200, //CJK UNIFIED IDEOGRAPH - 0xB5B7: 0x6363, //CJK UNIFIED IDEOGRAPH - 0xB5B8: 0x8E48, //CJK UNIFIED IDEOGRAPH - 0xB5B9: 0x5012, //CJK UNIFIED IDEOGRAPH - 0xB5BA: 0x5C9B, //CJK UNIFIED IDEOGRAPH - 0xB5BB: 0x7977, //CJK UNIFIED IDEOGRAPH - 0xB5BC: 0x5BFC, //CJK UNIFIED IDEOGRAPH - 0xB5BD: 0x5230, //CJK UNIFIED IDEOGRAPH - 0xB5BE: 0x7A3B, //CJK UNIFIED IDEOGRAPH - 0xB5BF: 0x60BC, //CJK UNIFIED IDEOGRAPH - 0xB5C0: 0x9053, //CJK UNIFIED IDEOGRAPH - 0xB5C1: 0x76D7, //CJK UNIFIED IDEOGRAPH - 0xB5C2: 0x5FB7, //CJK UNIFIED IDEOGRAPH - 0xB5C3: 0x5F97, //CJK UNIFIED IDEOGRAPH - 0xB5C4: 0x7684, //CJK UNIFIED IDEOGRAPH - 0xB5C5: 0x8E6C, //CJK UNIFIED IDEOGRAPH - 0xB5C6: 0x706F, //CJK UNIFIED IDEOGRAPH - 0xB5C7: 0x767B, //CJK UNIFIED IDEOGRAPH - 0xB5C8: 0x7B49, //CJK UNIFIED IDEOGRAPH - 0xB5C9: 0x77AA, //CJK UNIFIED IDEOGRAPH - 0xB5CA: 0x51F3, //CJK UNIFIED IDEOGRAPH - 0xB5CB: 0x9093, //CJK UNIFIED IDEOGRAPH - 0xB5CC: 0x5824, //CJK UNIFIED IDEOGRAPH - 0xB5CD: 0x4F4E, //CJK UNIFIED IDEOGRAPH - 0xB5CE: 0x6EF4, //CJK UNIFIED IDEOGRAPH - 0xB5CF: 0x8FEA, //CJK UNIFIED IDEOGRAPH - 0xB5D0: 0x654C, //CJK UNIFIED IDEOGRAPH - 0xB5D1: 0x7B1B, //CJK UNIFIED IDEOGRAPH - 0xB5D2: 0x72C4, //CJK UNIFIED IDEOGRAPH - 0xB5D3: 0x6DA4, //CJK UNIFIED IDEOGRAPH - 0xB5D4: 0x7FDF, //CJK UNIFIED IDEOGRAPH - 0xB5D5: 0x5AE1, //CJK UNIFIED IDEOGRAPH - 0xB5D6: 0x62B5, //CJK UNIFIED IDEOGRAPH - 0xB5D7: 0x5E95, //CJK UNIFIED IDEOGRAPH - 0xB5D8: 0x5730, //CJK UNIFIED IDEOGRAPH - 0xB5D9: 0x8482, //CJK UNIFIED IDEOGRAPH - 0xB5DA: 0x7B2C, //CJK UNIFIED IDEOGRAPH - 0xB5DB: 0x5E1D, //CJK UNIFIED IDEOGRAPH - 0xB5DC: 0x5F1F, //CJK UNIFIED IDEOGRAPH - 0xB5DD: 0x9012, //CJK UNIFIED IDEOGRAPH - 0xB5DE: 0x7F14, //CJK UNIFIED IDEOGRAPH - 0xB5DF: 0x98A0, //CJK UNIFIED IDEOGRAPH - 0xB5E0: 0x6382, //CJK UNIFIED IDEOGRAPH - 0xB5E1: 0x6EC7, //CJK UNIFIED IDEOGRAPH - 0xB5E2: 0x7898, //CJK UNIFIED IDEOGRAPH - 0xB5E3: 0x70B9, //CJK UNIFIED IDEOGRAPH - 0xB5E4: 0x5178, //CJK UNIFIED IDEOGRAPH - 0xB5E5: 0x975B, //CJK UNIFIED IDEOGRAPH - 0xB5E6: 0x57AB, //CJK UNIFIED IDEOGRAPH - 0xB5E7: 0x7535, //CJK UNIFIED IDEOGRAPH - 0xB5E8: 0x4F43, //CJK UNIFIED IDEOGRAPH - 0xB5E9: 0x7538, //CJK UNIFIED IDEOGRAPH - 0xB5EA: 0x5E97, //CJK UNIFIED IDEOGRAPH - 0xB5EB: 0x60E6, //CJK UNIFIED IDEOGRAPH - 0xB5EC: 0x5960, //CJK UNIFIED IDEOGRAPH - 0xB5ED: 0x6DC0, //CJK UNIFIED IDEOGRAPH - 0xB5EE: 0x6BBF, //CJK UNIFIED IDEOGRAPH - 0xB5EF: 0x7889, //CJK UNIFIED IDEOGRAPH - 0xB5F0: 0x53FC, //CJK UNIFIED IDEOGRAPH - 0xB5F1: 0x96D5, //CJK UNIFIED IDEOGRAPH - 0xB5F2: 0x51CB, //CJK UNIFIED IDEOGRAPH - 0xB5F3: 0x5201, //CJK UNIFIED IDEOGRAPH - 0xB5F4: 0x6389, //CJK UNIFIED IDEOGRAPH - 0xB5F5: 0x540A, //CJK UNIFIED IDEOGRAPH - 0xB5F6: 0x9493, //CJK UNIFIED IDEOGRAPH - 0xB5F7: 0x8C03, //CJK UNIFIED IDEOGRAPH - 0xB5F8: 0x8DCC, //CJK UNIFIED IDEOGRAPH - 0xB5F9: 0x7239, //CJK UNIFIED IDEOGRAPH - 0xB5FA: 0x789F, //CJK UNIFIED IDEOGRAPH - 0xB5FB: 0x8776, //CJK UNIFIED IDEOGRAPH - 0xB5FC: 0x8FED, //CJK UNIFIED IDEOGRAPH - 0xB5FD: 0x8C0D, //CJK UNIFIED IDEOGRAPH - 0xB5FE: 0x53E0, //CJK UNIFIED IDEOGRAPH - 0xB640: 0x7993, //CJK UNIFIED IDEOGRAPH - 0xB641: 0x7994, //CJK UNIFIED IDEOGRAPH - 0xB642: 0x7995, //CJK UNIFIED IDEOGRAPH - 0xB643: 0x7996, //CJK UNIFIED IDEOGRAPH - 0xB644: 0x7997, //CJK UNIFIED IDEOGRAPH - 0xB645: 0x7998, //CJK UNIFIED IDEOGRAPH - 0xB646: 0x7999, //CJK UNIFIED IDEOGRAPH - 0xB647: 0x799B, //CJK UNIFIED IDEOGRAPH - 0xB648: 0x799C, //CJK UNIFIED IDEOGRAPH - 0xB649: 0x799D, //CJK UNIFIED IDEOGRAPH - 0xB64A: 0x799E, //CJK UNIFIED IDEOGRAPH - 0xB64B: 0x799F, //CJK UNIFIED IDEOGRAPH - 0xB64C: 0x79A0, //CJK UNIFIED IDEOGRAPH - 0xB64D: 0x79A1, //CJK UNIFIED IDEOGRAPH - 0xB64E: 0x79A2, //CJK UNIFIED IDEOGRAPH - 0xB64F: 0x79A3, //CJK UNIFIED IDEOGRAPH - 0xB650: 0x79A4, //CJK UNIFIED IDEOGRAPH - 0xB651: 0x79A5, //CJK UNIFIED IDEOGRAPH - 0xB652: 0x79A6, //CJK UNIFIED IDEOGRAPH - 0xB653: 0x79A8, //CJK UNIFIED IDEOGRAPH - 0xB654: 0x79A9, //CJK UNIFIED IDEOGRAPH - 0xB655: 0x79AA, //CJK UNIFIED IDEOGRAPH - 0xB656: 0x79AB, //CJK UNIFIED IDEOGRAPH - 0xB657: 0x79AC, //CJK UNIFIED IDEOGRAPH - 0xB658: 0x79AD, //CJK UNIFIED IDEOGRAPH - 0xB659: 0x79AE, //CJK UNIFIED IDEOGRAPH - 0xB65A: 0x79AF, //CJK UNIFIED IDEOGRAPH - 0xB65B: 0x79B0, //CJK UNIFIED IDEOGRAPH - 0xB65C: 0x79B1, //CJK UNIFIED IDEOGRAPH - 0xB65D: 0x79B2, //CJK UNIFIED IDEOGRAPH - 0xB65E: 0x79B4, //CJK UNIFIED IDEOGRAPH - 0xB65F: 0x79B5, //CJK UNIFIED IDEOGRAPH - 0xB660: 0x79B6, //CJK UNIFIED IDEOGRAPH - 0xB661: 0x79B7, //CJK UNIFIED IDEOGRAPH - 0xB662: 0x79B8, //CJK UNIFIED IDEOGRAPH - 0xB663: 0x79BC, //CJK UNIFIED IDEOGRAPH - 0xB664: 0x79BF, //CJK UNIFIED IDEOGRAPH - 0xB665: 0x79C2, //CJK UNIFIED IDEOGRAPH - 0xB666: 0x79C4, //CJK UNIFIED IDEOGRAPH - 0xB667: 0x79C5, //CJK UNIFIED IDEOGRAPH - 0xB668: 0x79C7, //CJK UNIFIED IDEOGRAPH - 0xB669: 0x79C8, //CJK UNIFIED IDEOGRAPH - 0xB66A: 0x79CA, //CJK UNIFIED IDEOGRAPH - 0xB66B: 0x79CC, //CJK UNIFIED IDEOGRAPH - 0xB66C: 0x79CE, //CJK UNIFIED IDEOGRAPH - 0xB66D: 0x79CF, //CJK UNIFIED IDEOGRAPH - 0xB66E: 0x79D0, //CJK UNIFIED IDEOGRAPH - 0xB66F: 0x79D3, //CJK UNIFIED IDEOGRAPH - 0xB670: 0x79D4, //CJK UNIFIED IDEOGRAPH - 0xB671: 0x79D6, //CJK UNIFIED IDEOGRAPH - 0xB672: 0x79D7, //CJK UNIFIED IDEOGRAPH - 0xB673: 0x79D9, //CJK UNIFIED IDEOGRAPH - 0xB674: 0x79DA, //CJK UNIFIED IDEOGRAPH - 0xB675: 0x79DB, //CJK UNIFIED IDEOGRAPH - 0xB676: 0x79DC, //CJK UNIFIED IDEOGRAPH - 0xB677: 0x79DD, //CJK UNIFIED IDEOGRAPH - 0xB678: 0x79DE, //CJK UNIFIED IDEOGRAPH - 0xB679: 0x79E0, //CJK UNIFIED IDEOGRAPH - 0xB67A: 0x79E1, //CJK UNIFIED IDEOGRAPH - 0xB67B: 0x79E2, //CJK UNIFIED IDEOGRAPH - 0xB67C: 0x79E5, //CJK UNIFIED IDEOGRAPH - 0xB67D: 0x79E8, //CJK UNIFIED IDEOGRAPH - 0xB67E: 0x79EA, //CJK UNIFIED IDEOGRAPH - 0xB680: 0x79EC, //CJK UNIFIED IDEOGRAPH - 0xB681: 0x79EE, //CJK UNIFIED IDEOGRAPH - 0xB682: 0x79F1, //CJK UNIFIED IDEOGRAPH - 0xB683: 0x79F2, //CJK UNIFIED IDEOGRAPH - 0xB684: 0x79F3, //CJK UNIFIED IDEOGRAPH - 0xB685: 0x79F4, //CJK UNIFIED IDEOGRAPH - 0xB686: 0x79F5, //CJK UNIFIED IDEOGRAPH - 0xB687: 0x79F6, //CJK UNIFIED IDEOGRAPH - 0xB688: 0x79F7, //CJK UNIFIED IDEOGRAPH - 0xB689: 0x79F9, //CJK UNIFIED IDEOGRAPH - 0xB68A: 0x79FA, //CJK UNIFIED IDEOGRAPH - 0xB68B: 0x79FC, //CJK UNIFIED IDEOGRAPH - 0xB68C: 0x79FE, //CJK UNIFIED IDEOGRAPH - 0xB68D: 0x79FF, //CJK UNIFIED IDEOGRAPH - 0xB68E: 0x7A01, //CJK UNIFIED IDEOGRAPH - 0xB68F: 0x7A04, //CJK UNIFIED IDEOGRAPH - 0xB690: 0x7A05, //CJK UNIFIED IDEOGRAPH - 0xB691: 0x7A07, //CJK UNIFIED IDEOGRAPH - 0xB692: 0x7A08, //CJK UNIFIED IDEOGRAPH - 0xB693: 0x7A09, //CJK UNIFIED IDEOGRAPH - 0xB694: 0x7A0A, //CJK UNIFIED IDEOGRAPH - 0xB695: 0x7A0C, //CJK UNIFIED IDEOGRAPH - 0xB696: 0x7A0F, //CJK UNIFIED IDEOGRAPH - 0xB697: 0x7A10, //CJK UNIFIED IDEOGRAPH - 0xB698: 0x7A11, //CJK UNIFIED IDEOGRAPH - 0xB699: 0x7A12, //CJK UNIFIED IDEOGRAPH - 0xB69A: 0x7A13, //CJK UNIFIED IDEOGRAPH - 0xB69B: 0x7A15, //CJK UNIFIED IDEOGRAPH - 0xB69C: 0x7A16, //CJK UNIFIED IDEOGRAPH - 0xB69D: 0x7A18, //CJK UNIFIED IDEOGRAPH - 0xB69E: 0x7A19, //CJK UNIFIED IDEOGRAPH - 0xB69F: 0x7A1B, //CJK UNIFIED IDEOGRAPH - 0xB6A0: 0x7A1C, //CJK UNIFIED IDEOGRAPH - 0xB6A1: 0x4E01, //CJK UNIFIED IDEOGRAPH - 0xB6A2: 0x76EF, //CJK UNIFIED IDEOGRAPH - 0xB6A3: 0x53EE, //CJK UNIFIED IDEOGRAPH - 0xB6A4: 0x9489, //CJK UNIFIED IDEOGRAPH - 0xB6A5: 0x9876, //CJK UNIFIED IDEOGRAPH - 0xB6A6: 0x9F0E, //CJK UNIFIED IDEOGRAPH - 0xB6A7: 0x952D, //CJK UNIFIED IDEOGRAPH - 0xB6A8: 0x5B9A, //CJK UNIFIED IDEOGRAPH - 0xB6A9: 0x8BA2, //CJK UNIFIED IDEOGRAPH - 0xB6AA: 0x4E22, //CJK UNIFIED IDEOGRAPH - 0xB6AB: 0x4E1C, //CJK UNIFIED IDEOGRAPH - 0xB6AC: 0x51AC, //CJK UNIFIED IDEOGRAPH - 0xB6AD: 0x8463, //CJK UNIFIED IDEOGRAPH - 0xB6AE: 0x61C2, //CJK UNIFIED IDEOGRAPH - 0xB6AF: 0x52A8, //CJK UNIFIED IDEOGRAPH - 0xB6B0: 0x680B, //CJK UNIFIED IDEOGRAPH - 0xB6B1: 0x4F97, //CJK UNIFIED IDEOGRAPH - 0xB6B2: 0x606B, //CJK UNIFIED IDEOGRAPH - 0xB6B3: 0x51BB, //CJK UNIFIED IDEOGRAPH - 0xB6B4: 0x6D1E, //CJK UNIFIED IDEOGRAPH - 0xB6B5: 0x515C, //CJK UNIFIED IDEOGRAPH - 0xB6B6: 0x6296, //CJK UNIFIED IDEOGRAPH - 0xB6B7: 0x6597, //CJK UNIFIED IDEOGRAPH - 0xB6B8: 0x9661, //CJK UNIFIED IDEOGRAPH - 0xB6B9: 0x8C46, //CJK UNIFIED IDEOGRAPH - 0xB6BA: 0x9017, //CJK UNIFIED IDEOGRAPH - 0xB6BB: 0x75D8, //CJK UNIFIED IDEOGRAPH - 0xB6BC: 0x90FD, //CJK UNIFIED IDEOGRAPH - 0xB6BD: 0x7763, //CJK UNIFIED IDEOGRAPH - 0xB6BE: 0x6BD2, //CJK UNIFIED IDEOGRAPH - 0xB6BF: 0x728A, //CJK UNIFIED IDEOGRAPH - 0xB6C0: 0x72EC, //CJK UNIFIED IDEOGRAPH - 0xB6C1: 0x8BFB, //CJK UNIFIED IDEOGRAPH - 0xB6C2: 0x5835, //CJK UNIFIED IDEOGRAPH - 0xB6C3: 0x7779, //CJK UNIFIED IDEOGRAPH - 0xB6C4: 0x8D4C, //CJK UNIFIED IDEOGRAPH - 0xB6C5: 0x675C, //CJK UNIFIED IDEOGRAPH - 0xB6C6: 0x9540, //CJK UNIFIED IDEOGRAPH - 0xB6C7: 0x809A, //CJK UNIFIED IDEOGRAPH - 0xB6C8: 0x5EA6, //CJK UNIFIED IDEOGRAPH - 0xB6C9: 0x6E21, //CJK UNIFIED IDEOGRAPH - 0xB6CA: 0x5992, //CJK UNIFIED IDEOGRAPH - 0xB6CB: 0x7AEF, //CJK UNIFIED IDEOGRAPH - 0xB6CC: 0x77ED, //CJK UNIFIED IDEOGRAPH - 0xB6CD: 0x953B, //CJK UNIFIED IDEOGRAPH - 0xB6CE: 0x6BB5, //CJK UNIFIED IDEOGRAPH - 0xB6CF: 0x65AD, //CJK UNIFIED IDEOGRAPH - 0xB6D0: 0x7F0E, //CJK UNIFIED IDEOGRAPH - 0xB6D1: 0x5806, //CJK UNIFIED IDEOGRAPH - 0xB6D2: 0x5151, //CJK UNIFIED IDEOGRAPH - 0xB6D3: 0x961F, //CJK UNIFIED IDEOGRAPH - 0xB6D4: 0x5BF9, //CJK UNIFIED IDEOGRAPH - 0xB6D5: 0x58A9, //CJK UNIFIED IDEOGRAPH - 0xB6D6: 0x5428, //CJK UNIFIED IDEOGRAPH - 0xB6D7: 0x8E72, //CJK UNIFIED IDEOGRAPH - 0xB6D8: 0x6566, //CJK UNIFIED IDEOGRAPH - 0xB6D9: 0x987F, //CJK UNIFIED IDEOGRAPH - 0xB6DA: 0x56E4, //CJK UNIFIED IDEOGRAPH - 0xB6DB: 0x949D, //CJK UNIFIED IDEOGRAPH - 0xB6DC: 0x76FE, //CJK UNIFIED IDEOGRAPH - 0xB6DD: 0x9041, //CJK UNIFIED IDEOGRAPH - 0xB6DE: 0x6387, //CJK UNIFIED IDEOGRAPH - 0xB6DF: 0x54C6, //CJK UNIFIED IDEOGRAPH - 0xB6E0: 0x591A, //CJK UNIFIED IDEOGRAPH - 0xB6E1: 0x593A, //CJK UNIFIED IDEOGRAPH - 0xB6E2: 0x579B, //CJK UNIFIED IDEOGRAPH - 0xB6E3: 0x8EB2, //CJK UNIFIED IDEOGRAPH - 0xB6E4: 0x6735, //CJK UNIFIED IDEOGRAPH - 0xB6E5: 0x8DFA, //CJK UNIFIED IDEOGRAPH - 0xB6E6: 0x8235, //CJK UNIFIED IDEOGRAPH - 0xB6E7: 0x5241, //CJK UNIFIED IDEOGRAPH - 0xB6E8: 0x60F0, //CJK UNIFIED IDEOGRAPH - 0xB6E9: 0x5815, //CJK UNIFIED IDEOGRAPH - 0xB6EA: 0x86FE, //CJK UNIFIED IDEOGRAPH - 0xB6EB: 0x5CE8, //CJK UNIFIED IDEOGRAPH - 0xB6EC: 0x9E45, //CJK UNIFIED IDEOGRAPH - 0xB6ED: 0x4FC4, //CJK UNIFIED IDEOGRAPH - 0xB6EE: 0x989D, //CJK UNIFIED IDEOGRAPH - 0xB6EF: 0x8BB9, //CJK UNIFIED IDEOGRAPH - 0xB6F0: 0x5A25, //CJK UNIFIED IDEOGRAPH - 0xB6F1: 0x6076, //CJK UNIFIED IDEOGRAPH - 0xB6F2: 0x5384, //CJK UNIFIED IDEOGRAPH - 0xB6F3: 0x627C, //CJK UNIFIED IDEOGRAPH - 0xB6F4: 0x904F, //CJK UNIFIED IDEOGRAPH - 0xB6F5: 0x9102, //CJK UNIFIED IDEOGRAPH - 0xB6F6: 0x997F, //CJK UNIFIED IDEOGRAPH - 0xB6F7: 0x6069, //CJK UNIFIED IDEOGRAPH - 0xB6F8: 0x800C, //CJK UNIFIED IDEOGRAPH - 0xB6F9: 0x513F, //CJK UNIFIED IDEOGRAPH - 0xB6FA: 0x8033, //CJK UNIFIED IDEOGRAPH - 0xB6FB: 0x5C14, //CJK UNIFIED IDEOGRAPH - 0xB6FC: 0x9975, //CJK UNIFIED IDEOGRAPH - 0xB6FD: 0x6D31, //CJK UNIFIED IDEOGRAPH - 0xB6FE: 0x4E8C, //CJK UNIFIED IDEOGRAPH - 0xB740: 0x7A1D, //CJK UNIFIED IDEOGRAPH - 0xB741: 0x7A1F, //CJK UNIFIED IDEOGRAPH - 0xB742: 0x7A21, //CJK UNIFIED IDEOGRAPH - 0xB743: 0x7A22, //CJK UNIFIED IDEOGRAPH - 0xB744: 0x7A24, //CJK UNIFIED IDEOGRAPH - 0xB745: 0x7A25, //CJK UNIFIED IDEOGRAPH - 0xB746: 0x7A26, //CJK UNIFIED IDEOGRAPH - 0xB747: 0x7A27, //CJK UNIFIED IDEOGRAPH - 0xB748: 0x7A28, //CJK UNIFIED IDEOGRAPH - 0xB749: 0x7A29, //CJK UNIFIED IDEOGRAPH - 0xB74A: 0x7A2A, //CJK UNIFIED IDEOGRAPH - 0xB74B: 0x7A2B, //CJK UNIFIED IDEOGRAPH - 0xB74C: 0x7A2C, //CJK UNIFIED IDEOGRAPH - 0xB74D: 0x7A2D, //CJK UNIFIED IDEOGRAPH - 0xB74E: 0x7A2E, //CJK UNIFIED IDEOGRAPH - 0xB74F: 0x7A2F, //CJK UNIFIED IDEOGRAPH - 0xB750: 0x7A30, //CJK UNIFIED IDEOGRAPH - 0xB751: 0x7A31, //CJK UNIFIED IDEOGRAPH - 0xB752: 0x7A32, //CJK UNIFIED IDEOGRAPH - 0xB753: 0x7A34, //CJK UNIFIED IDEOGRAPH - 0xB754: 0x7A35, //CJK UNIFIED IDEOGRAPH - 0xB755: 0x7A36, //CJK UNIFIED IDEOGRAPH - 0xB756: 0x7A38, //CJK UNIFIED IDEOGRAPH - 0xB757: 0x7A3A, //CJK UNIFIED IDEOGRAPH - 0xB758: 0x7A3E, //CJK UNIFIED IDEOGRAPH - 0xB759: 0x7A40, //CJK UNIFIED IDEOGRAPH - 0xB75A: 0x7A41, //CJK UNIFIED IDEOGRAPH - 0xB75B: 0x7A42, //CJK UNIFIED IDEOGRAPH - 0xB75C: 0x7A43, //CJK UNIFIED IDEOGRAPH - 0xB75D: 0x7A44, //CJK UNIFIED IDEOGRAPH - 0xB75E: 0x7A45, //CJK UNIFIED IDEOGRAPH - 0xB75F: 0x7A47, //CJK UNIFIED IDEOGRAPH - 0xB760: 0x7A48, //CJK UNIFIED IDEOGRAPH - 0xB761: 0x7A49, //CJK UNIFIED IDEOGRAPH - 0xB762: 0x7A4A, //CJK UNIFIED IDEOGRAPH - 0xB763: 0x7A4B, //CJK UNIFIED IDEOGRAPH - 0xB764: 0x7A4C, //CJK UNIFIED IDEOGRAPH - 0xB765: 0x7A4D, //CJK UNIFIED IDEOGRAPH - 0xB766: 0x7A4E, //CJK UNIFIED IDEOGRAPH - 0xB767: 0x7A4F, //CJK UNIFIED IDEOGRAPH - 0xB768: 0x7A50, //CJK UNIFIED IDEOGRAPH - 0xB769: 0x7A52, //CJK UNIFIED IDEOGRAPH - 0xB76A: 0x7A53, //CJK UNIFIED IDEOGRAPH - 0xB76B: 0x7A54, //CJK UNIFIED IDEOGRAPH - 0xB76C: 0x7A55, //CJK UNIFIED IDEOGRAPH - 0xB76D: 0x7A56, //CJK UNIFIED IDEOGRAPH - 0xB76E: 0x7A58, //CJK UNIFIED IDEOGRAPH - 0xB76F: 0x7A59, //CJK UNIFIED IDEOGRAPH - 0xB770: 0x7A5A, //CJK UNIFIED IDEOGRAPH - 0xB771: 0x7A5B, //CJK UNIFIED IDEOGRAPH - 0xB772: 0x7A5C, //CJK UNIFIED IDEOGRAPH - 0xB773: 0x7A5D, //CJK UNIFIED IDEOGRAPH - 0xB774: 0x7A5E, //CJK UNIFIED IDEOGRAPH - 0xB775: 0x7A5F, //CJK UNIFIED IDEOGRAPH - 0xB776: 0x7A60, //CJK UNIFIED IDEOGRAPH - 0xB777: 0x7A61, //CJK UNIFIED IDEOGRAPH - 0xB778: 0x7A62, //CJK UNIFIED IDEOGRAPH - 0xB779: 0x7A63, //CJK UNIFIED IDEOGRAPH - 0xB77A: 0x7A64, //CJK UNIFIED IDEOGRAPH - 0xB77B: 0x7A65, //CJK UNIFIED IDEOGRAPH - 0xB77C: 0x7A66, //CJK UNIFIED IDEOGRAPH - 0xB77D: 0x7A67, //CJK UNIFIED IDEOGRAPH - 0xB77E: 0x7A68, //CJK UNIFIED IDEOGRAPH - 0xB780: 0x7A69, //CJK UNIFIED IDEOGRAPH - 0xB781: 0x7A6A, //CJK UNIFIED IDEOGRAPH - 0xB782: 0x7A6B, //CJK UNIFIED IDEOGRAPH - 0xB783: 0x7A6C, //CJK UNIFIED IDEOGRAPH - 0xB784: 0x7A6D, //CJK UNIFIED IDEOGRAPH - 0xB785: 0x7A6E, //CJK UNIFIED IDEOGRAPH - 0xB786: 0x7A6F, //CJK UNIFIED IDEOGRAPH - 0xB787: 0x7A71, //CJK UNIFIED IDEOGRAPH - 0xB788: 0x7A72, //CJK UNIFIED IDEOGRAPH - 0xB789: 0x7A73, //CJK UNIFIED IDEOGRAPH - 0xB78A: 0x7A75, //CJK UNIFIED IDEOGRAPH - 0xB78B: 0x7A7B, //CJK UNIFIED IDEOGRAPH - 0xB78C: 0x7A7C, //CJK UNIFIED IDEOGRAPH - 0xB78D: 0x7A7D, //CJK UNIFIED IDEOGRAPH - 0xB78E: 0x7A7E, //CJK UNIFIED IDEOGRAPH - 0xB78F: 0x7A82, //CJK UNIFIED IDEOGRAPH - 0xB790: 0x7A85, //CJK UNIFIED IDEOGRAPH - 0xB791: 0x7A87, //CJK UNIFIED IDEOGRAPH - 0xB792: 0x7A89, //CJK UNIFIED IDEOGRAPH - 0xB793: 0x7A8A, //CJK UNIFIED IDEOGRAPH - 0xB794: 0x7A8B, //CJK UNIFIED IDEOGRAPH - 0xB795: 0x7A8C, //CJK UNIFIED IDEOGRAPH - 0xB796: 0x7A8E, //CJK UNIFIED IDEOGRAPH - 0xB797: 0x7A8F, //CJK UNIFIED IDEOGRAPH - 0xB798: 0x7A90, //CJK UNIFIED IDEOGRAPH - 0xB799: 0x7A93, //CJK UNIFIED IDEOGRAPH - 0xB79A: 0x7A94, //CJK UNIFIED IDEOGRAPH - 0xB79B: 0x7A99, //CJK UNIFIED IDEOGRAPH - 0xB79C: 0x7A9A, //CJK UNIFIED IDEOGRAPH - 0xB79D: 0x7A9B, //CJK UNIFIED IDEOGRAPH - 0xB79E: 0x7A9E, //CJK UNIFIED IDEOGRAPH - 0xB79F: 0x7AA1, //CJK UNIFIED IDEOGRAPH - 0xB7A0: 0x7AA2, //CJK UNIFIED IDEOGRAPH - 0xB7A1: 0x8D30, //CJK UNIFIED IDEOGRAPH - 0xB7A2: 0x53D1, //CJK UNIFIED IDEOGRAPH - 0xB7A3: 0x7F5A, //CJK UNIFIED IDEOGRAPH - 0xB7A4: 0x7B4F, //CJK UNIFIED IDEOGRAPH - 0xB7A5: 0x4F10, //CJK UNIFIED IDEOGRAPH - 0xB7A6: 0x4E4F, //CJK UNIFIED IDEOGRAPH - 0xB7A7: 0x9600, //CJK UNIFIED IDEOGRAPH - 0xB7A8: 0x6CD5, //CJK UNIFIED IDEOGRAPH - 0xB7A9: 0x73D0, //CJK UNIFIED IDEOGRAPH - 0xB7AA: 0x85E9, //CJK UNIFIED IDEOGRAPH - 0xB7AB: 0x5E06, //CJK UNIFIED IDEOGRAPH - 0xB7AC: 0x756A, //CJK UNIFIED IDEOGRAPH - 0xB7AD: 0x7FFB, //CJK UNIFIED IDEOGRAPH - 0xB7AE: 0x6A0A, //CJK UNIFIED IDEOGRAPH - 0xB7AF: 0x77FE, //CJK UNIFIED IDEOGRAPH - 0xB7B0: 0x9492, //CJK UNIFIED IDEOGRAPH - 0xB7B1: 0x7E41, //CJK UNIFIED IDEOGRAPH - 0xB7B2: 0x51E1, //CJK UNIFIED IDEOGRAPH - 0xB7B3: 0x70E6, //CJK UNIFIED IDEOGRAPH - 0xB7B4: 0x53CD, //CJK UNIFIED IDEOGRAPH - 0xB7B5: 0x8FD4, //CJK UNIFIED IDEOGRAPH - 0xB7B6: 0x8303, //CJK UNIFIED IDEOGRAPH - 0xB7B7: 0x8D29, //CJK UNIFIED IDEOGRAPH - 0xB7B8: 0x72AF, //CJK UNIFIED IDEOGRAPH - 0xB7B9: 0x996D, //CJK UNIFIED IDEOGRAPH - 0xB7BA: 0x6CDB, //CJK UNIFIED IDEOGRAPH - 0xB7BB: 0x574A, //CJK UNIFIED IDEOGRAPH - 0xB7BC: 0x82B3, //CJK UNIFIED IDEOGRAPH - 0xB7BD: 0x65B9, //CJK UNIFIED IDEOGRAPH - 0xB7BE: 0x80AA, //CJK UNIFIED IDEOGRAPH - 0xB7BF: 0x623F, //CJK UNIFIED IDEOGRAPH - 0xB7C0: 0x9632, //CJK UNIFIED IDEOGRAPH - 0xB7C1: 0x59A8, //CJK UNIFIED IDEOGRAPH - 0xB7C2: 0x4EFF, //CJK UNIFIED IDEOGRAPH - 0xB7C3: 0x8BBF, //CJK UNIFIED IDEOGRAPH - 0xB7C4: 0x7EBA, //CJK UNIFIED IDEOGRAPH - 0xB7C5: 0x653E, //CJK UNIFIED IDEOGRAPH - 0xB7C6: 0x83F2, //CJK UNIFIED IDEOGRAPH - 0xB7C7: 0x975E, //CJK UNIFIED IDEOGRAPH - 0xB7C8: 0x5561, //CJK UNIFIED IDEOGRAPH - 0xB7C9: 0x98DE, //CJK UNIFIED IDEOGRAPH - 0xB7CA: 0x80A5, //CJK UNIFIED IDEOGRAPH - 0xB7CB: 0x532A, //CJK UNIFIED IDEOGRAPH - 0xB7CC: 0x8BFD, //CJK UNIFIED IDEOGRAPH - 0xB7CD: 0x5420, //CJK UNIFIED IDEOGRAPH - 0xB7CE: 0x80BA, //CJK UNIFIED IDEOGRAPH - 0xB7CF: 0x5E9F, //CJK UNIFIED IDEOGRAPH - 0xB7D0: 0x6CB8, //CJK UNIFIED IDEOGRAPH - 0xB7D1: 0x8D39, //CJK UNIFIED IDEOGRAPH - 0xB7D2: 0x82AC, //CJK UNIFIED IDEOGRAPH - 0xB7D3: 0x915A, //CJK UNIFIED IDEOGRAPH - 0xB7D4: 0x5429, //CJK UNIFIED IDEOGRAPH - 0xB7D5: 0x6C1B, //CJK UNIFIED IDEOGRAPH - 0xB7D6: 0x5206, //CJK UNIFIED IDEOGRAPH - 0xB7D7: 0x7EB7, //CJK UNIFIED IDEOGRAPH - 0xB7D8: 0x575F, //CJK UNIFIED IDEOGRAPH - 0xB7D9: 0x711A, //CJK UNIFIED IDEOGRAPH - 0xB7DA: 0x6C7E, //CJK UNIFIED IDEOGRAPH - 0xB7DB: 0x7C89, //CJK UNIFIED IDEOGRAPH - 0xB7DC: 0x594B, //CJK UNIFIED IDEOGRAPH - 0xB7DD: 0x4EFD, //CJK UNIFIED IDEOGRAPH - 0xB7DE: 0x5FFF, //CJK UNIFIED IDEOGRAPH - 0xB7DF: 0x6124, //CJK UNIFIED IDEOGRAPH - 0xB7E0: 0x7CAA, //CJK UNIFIED IDEOGRAPH - 0xB7E1: 0x4E30, //CJK UNIFIED IDEOGRAPH - 0xB7E2: 0x5C01, //CJK UNIFIED IDEOGRAPH - 0xB7E3: 0x67AB, //CJK UNIFIED IDEOGRAPH - 0xB7E4: 0x8702, //CJK UNIFIED IDEOGRAPH - 0xB7E5: 0x5CF0, //CJK UNIFIED IDEOGRAPH - 0xB7E6: 0x950B, //CJK UNIFIED IDEOGRAPH - 0xB7E7: 0x98CE, //CJK UNIFIED IDEOGRAPH - 0xB7E8: 0x75AF, //CJK UNIFIED IDEOGRAPH - 0xB7E9: 0x70FD, //CJK UNIFIED IDEOGRAPH - 0xB7EA: 0x9022, //CJK UNIFIED IDEOGRAPH - 0xB7EB: 0x51AF, //CJK UNIFIED IDEOGRAPH - 0xB7EC: 0x7F1D, //CJK UNIFIED IDEOGRAPH - 0xB7ED: 0x8BBD, //CJK UNIFIED IDEOGRAPH - 0xB7EE: 0x5949, //CJK UNIFIED IDEOGRAPH - 0xB7EF: 0x51E4, //CJK UNIFIED IDEOGRAPH - 0xB7F0: 0x4F5B, //CJK UNIFIED IDEOGRAPH - 0xB7F1: 0x5426, //CJK UNIFIED IDEOGRAPH - 0xB7F2: 0x592B, //CJK UNIFIED IDEOGRAPH - 0xB7F3: 0x6577, //CJK UNIFIED IDEOGRAPH - 0xB7F4: 0x80A4, //CJK UNIFIED IDEOGRAPH - 0xB7F5: 0x5B75, //CJK UNIFIED IDEOGRAPH - 0xB7F6: 0x6276, //CJK UNIFIED IDEOGRAPH - 0xB7F7: 0x62C2, //CJK UNIFIED IDEOGRAPH - 0xB7F8: 0x8F90, //CJK UNIFIED IDEOGRAPH - 0xB7F9: 0x5E45, //CJK UNIFIED IDEOGRAPH - 0xB7FA: 0x6C1F, //CJK UNIFIED IDEOGRAPH - 0xB7FB: 0x7B26, //CJK UNIFIED IDEOGRAPH - 0xB7FC: 0x4F0F, //CJK UNIFIED IDEOGRAPH - 0xB7FD: 0x4FD8, //CJK UNIFIED IDEOGRAPH - 0xB7FE: 0x670D, //CJK UNIFIED IDEOGRAPH - 0xB840: 0x7AA3, //CJK UNIFIED IDEOGRAPH - 0xB841: 0x7AA4, //CJK UNIFIED IDEOGRAPH - 0xB842: 0x7AA7, //CJK UNIFIED IDEOGRAPH - 0xB843: 0x7AA9, //CJK UNIFIED IDEOGRAPH - 0xB844: 0x7AAA, //CJK UNIFIED IDEOGRAPH - 0xB845: 0x7AAB, //CJK UNIFIED IDEOGRAPH - 0xB846: 0x7AAE, //CJK UNIFIED IDEOGRAPH - 0xB847: 0x7AAF, //CJK UNIFIED IDEOGRAPH - 0xB848: 0x7AB0, //CJK UNIFIED IDEOGRAPH - 0xB849: 0x7AB1, //CJK UNIFIED IDEOGRAPH - 0xB84A: 0x7AB2, //CJK UNIFIED IDEOGRAPH - 0xB84B: 0x7AB4, //CJK UNIFIED IDEOGRAPH - 0xB84C: 0x7AB5, //CJK UNIFIED IDEOGRAPH - 0xB84D: 0x7AB6, //CJK UNIFIED IDEOGRAPH - 0xB84E: 0x7AB7, //CJK UNIFIED IDEOGRAPH - 0xB84F: 0x7AB8, //CJK UNIFIED IDEOGRAPH - 0xB850: 0x7AB9, //CJK UNIFIED IDEOGRAPH - 0xB851: 0x7ABA, //CJK UNIFIED IDEOGRAPH - 0xB852: 0x7ABB, //CJK UNIFIED IDEOGRAPH - 0xB853: 0x7ABC, //CJK UNIFIED IDEOGRAPH - 0xB854: 0x7ABD, //CJK UNIFIED IDEOGRAPH - 0xB855: 0x7ABE, //CJK UNIFIED IDEOGRAPH - 0xB856: 0x7AC0, //CJK UNIFIED IDEOGRAPH - 0xB857: 0x7AC1, //CJK UNIFIED IDEOGRAPH - 0xB858: 0x7AC2, //CJK UNIFIED IDEOGRAPH - 0xB859: 0x7AC3, //CJK UNIFIED IDEOGRAPH - 0xB85A: 0x7AC4, //CJK UNIFIED IDEOGRAPH - 0xB85B: 0x7AC5, //CJK UNIFIED IDEOGRAPH - 0xB85C: 0x7AC6, //CJK UNIFIED IDEOGRAPH - 0xB85D: 0x7AC7, //CJK UNIFIED IDEOGRAPH - 0xB85E: 0x7AC8, //CJK UNIFIED IDEOGRAPH - 0xB85F: 0x7AC9, //CJK UNIFIED IDEOGRAPH - 0xB860: 0x7ACA, //CJK UNIFIED IDEOGRAPH - 0xB861: 0x7ACC, //CJK UNIFIED IDEOGRAPH - 0xB862: 0x7ACD, //CJK UNIFIED IDEOGRAPH - 0xB863: 0x7ACE, //CJK UNIFIED IDEOGRAPH - 0xB864: 0x7ACF, //CJK UNIFIED IDEOGRAPH - 0xB865: 0x7AD0, //CJK UNIFIED IDEOGRAPH - 0xB866: 0x7AD1, //CJK UNIFIED IDEOGRAPH - 0xB867: 0x7AD2, //CJK UNIFIED IDEOGRAPH - 0xB868: 0x7AD3, //CJK UNIFIED IDEOGRAPH - 0xB869: 0x7AD4, //CJK UNIFIED IDEOGRAPH - 0xB86A: 0x7AD5, //CJK UNIFIED IDEOGRAPH - 0xB86B: 0x7AD7, //CJK UNIFIED IDEOGRAPH - 0xB86C: 0x7AD8, //CJK UNIFIED IDEOGRAPH - 0xB86D: 0x7ADA, //CJK UNIFIED IDEOGRAPH - 0xB86E: 0x7ADB, //CJK UNIFIED IDEOGRAPH - 0xB86F: 0x7ADC, //CJK UNIFIED IDEOGRAPH - 0xB870: 0x7ADD, //CJK UNIFIED IDEOGRAPH - 0xB871: 0x7AE1, //CJK UNIFIED IDEOGRAPH - 0xB872: 0x7AE2, //CJK UNIFIED IDEOGRAPH - 0xB873: 0x7AE4, //CJK UNIFIED IDEOGRAPH - 0xB874: 0x7AE7, //CJK UNIFIED IDEOGRAPH - 0xB875: 0x7AE8, //CJK UNIFIED IDEOGRAPH - 0xB876: 0x7AE9, //CJK UNIFIED IDEOGRAPH - 0xB877: 0x7AEA, //CJK UNIFIED IDEOGRAPH - 0xB878: 0x7AEB, //CJK UNIFIED IDEOGRAPH - 0xB879: 0x7AEC, //CJK UNIFIED IDEOGRAPH - 0xB87A: 0x7AEE, //CJK UNIFIED IDEOGRAPH - 0xB87B: 0x7AF0, //CJK UNIFIED IDEOGRAPH - 0xB87C: 0x7AF1, //CJK UNIFIED IDEOGRAPH - 0xB87D: 0x7AF2, //CJK UNIFIED IDEOGRAPH - 0xB87E: 0x7AF3, //CJK UNIFIED IDEOGRAPH - 0xB880: 0x7AF4, //CJK UNIFIED IDEOGRAPH - 0xB881: 0x7AF5, //CJK UNIFIED IDEOGRAPH - 0xB882: 0x7AF6, //CJK UNIFIED IDEOGRAPH - 0xB883: 0x7AF7, //CJK UNIFIED IDEOGRAPH - 0xB884: 0x7AF8, //CJK UNIFIED IDEOGRAPH - 0xB885: 0x7AFB, //CJK UNIFIED IDEOGRAPH - 0xB886: 0x7AFC, //CJK UNIFIED IDEOGRAPH - 0xB887: 0x7AFE, //CJK UNIFIED IDEOGRAPH - 0xB888: 0x7B00, //CJK UNIFIED IDEOGRAPH - 0xB889: 0x7B01, //CJK UNIFIED IDEOGRAPH - 0xB88A: 0x7B02, //CJK UNIFIED IDEOGRAPH - 0xB88B: 0x7B05, //CJK UNIFIED IDEOGRAPH - 0xB88C: 0x7B07, //CJK UNIFIED IDEOGRAPH - 0xB88D: 0x7B09, //CJK UNIFIED IDEOGRAPH - 0xB88E: 0x7B0C, //CJK UNIFIED IDEOGRAPH - 0xB88F: 0x7B0D, //CJK UNIFIED IDEOGRAPH - 0xB890: 0x7B0E, //CJK UNIFIED IDEOGRAPH - 0xB891: 0x7B10, //CJK UNIFIED IDEOGRAPH - 0xB892: 0x7B12, //CJK UNIFIED IDEOGRAPH - 0xB893: 0x7B13, //CJK UNIFIED IDEOGRAPH - 0xB894: 0x7B16, //CJK UNIFIED IDEOGRAPH - 0xB895: 0x7B17, //CJK UNIFIED IDEOGRAPH - 0xB896: 0x7B18, //CJK UNIFIED IDEOGRAPH - 0xB897: 0x7B1A, //CJK UNIFIED IDEOGRAPH - 0xB898: 0x7B1C, //CJK UNIFIED IDEOGRAPH - 0xB899: 0x7B1D, //CJK UNIFIED IDEOGRAPH - 0xB89A: 0x7B1F, //CJK UNIFIED IDEOGRAPH - 0xB89B: 0x7B21, //CJK UNIFIED IDEOGRAPH - 0xB89C: 0x7B22, //CJK UNIFIED IDEOGRAPH - 0xB89D: 0x7B23, //CJK UNIFIED IDEOGRAPH - 0xB89E: 0x7B27, //CJK UNIFIED IDEOGRAPH - 0xB89F: 0x7B29, //CJK UNIFIED IDEOGRAPH - 0xB8A0: 0x7B2D, //CJK UNIFIED IDEOGRAPH - 0xB8A1: 0x6D6E, //CJK UNIFIED IDEOGRAPH - 0xB8A2: 0x6DAA, //CJK UNIFIED IDEOGRAPH - 0xB8A3: 0x798F, //CJK UNIFIED IDEOGRAPH - 0xB8A4: 0x88B1, //CJK UNIFIED IDEOGRAPH - 0xB8A5: 0x5F17, //CJK UNIFIED IDEOGRAPH - 0xB8A6: 0x752B, //CJK UNIFIED IDEOGRAPH - 0xB8A7: 0x629A, //CJK UNIFIED IDEOGRAPH - 0xB8A8: 0x8F85, //CJK UNIFIED IDEOGRAPH - 0xB8A9: 0x4FEF, //CJK UNIFIED IDEOGRAPH - 0xB8AA: 0x91DC, //CJK UNIFIED IDEOGRAPH - 0xB8AB: 0x65A7, //CJK UNIFIED IDEOGRAPH - 0xB8AC: 0x812F, //CJK UNIFIED IDEOGRAPH - 0xB8AD: 0x8151, //CJK UNIFIED IDEOGRAPH - 0xB8AE: 0x5E9C, //CJK UNIFIED IDEOGRAPH - 0xB8AF: 0x8150, //CJK UNIFIED IDEOGRAPH - 0xB8B0: 0x8D74, //CJK UNIFIED IDEOGRAPH - 0xB8B1: 0x526F, //CJK UNIFIED IDEOGRAPH - 0xB8B2: 0x8986, //CJK UNIFIED IDEOGRAPH - 0xB8B3: 0x8D4B, //CJK UNIFIED IDEOGRAPH - 0xB8B4: 0x590D, //CJK UNIFIED IDEOGRAPH - 0xB8B5: 0x5085, //CJK UNIFIED IDEOGRAPH - 0xB8B6: 0x4ED8, //CJK UNIFIED IDEOGRAPH - 0xB8B7: 0x961C, //CJK UNIFIED IDEOGRAPH - 0xB8B8: 0x7236, //CJK UNIFIED IDEOGRAPH - 0xB8B9: 0x8179, //CJK UNIFIED IDEOGRAPH - 0xB8BA: 0x8D1F, //CJK UNIFIED IDEOGRAPH - 0xB8BB: 0x5BCC, //CJK UNIFIED IDEOGRAPH - 0xB8BC: 0x8BA3, //CJK UNIFIED IDEOGRAPH - 0xB8BD: 0x9644, //CJK UNIFIED IDEOGRAPH - 0xB8BE: 0x5987, //CJK UNIFIED IDEOGRAPH - 0xB8BF: 0x7F1A, //CJK UNIFIED IDEOGRAPH - 0xB8C0: 0x5490, //CJK UNIFIED IDEOGRAPH - 0xB8C1: 0x5676, //CJK UNIFIED IDEOGRAPH - 0xB8C2: 0x560E, //CJK UNIFIED IDEOGRAPH - 0xB8C3: 0x8BE5, //CJK UNIFIED IDEOGRAPH - 0xB8C4: 0x6539, //CJK UNIFIED IDEOGRAPH - 0xB8C5: 0x6982, //CJK UNIFIED IDEOGRAPH - 0xB8C6: 0x9499, //CJK UNIFIED IDEOGRAPH - 0xB8C7: 0x76D6, //CJK UNIFIED IDEOGRAPH - 0xB8C8: 0x6E89, //CJK UNIFIED IDEOGRAPH - 0xB8C9: 0x5E72, //CJK UNIFIED IDEOGRAPH - 0xB8CA: 0x7518, //CJK UNIFIED IDEOGRAPH - 0xB8CB: 0x6746, //CJK UNIFIED IDEOGRAPH - 0xB8CC: 0x67D1, //CJK UNIFIED IDEOGRAPH - 0xB8CD: 0x7AFF, //CJK UNIFIED IDEOGRAPH - 0xB8CE: 0x809D, //CJK UNIFIED IDEOGRAPH - 0xB8CF: 0x8D76, //CJK UNIFIED IDEOGRAPH - 0xB8D0: 0x611F, //CJK UNIFIED IDEOGRAPH - 0xB8D1: 0x79C6, //CJK UNIFIED IDEOGRAPH - 0xB8D2: 0x6562, //CJK UNIFIED IDEOGRAPH - 0xB8D3: 0x8D63, //CJK UNIFIED IDEOGRAPH - 0xB8D4: 0x5188, //CJK UNIFIED IDEOGRAPH - 0xB8D5: 0x521A, //CJK UNIFIED IDEOGRAPH - 0xB8D6: 0x94A2, //CJK UNIFIED IDEOGRAPH - 0xB8D7: 0x7F38, //CJK UNIFIED IDEOGRAPH - 0xB8D8: 0x809B, //CJK UNIFIED IDEOGRAPH - 0xB8D9: 0x7EB2, //CJK UNIFIED IDEOGRAPH - 0xB8DA: 0x5C97, //CJK UNIFIED IDEOGRAPH - 0xB8DB: 0x6E2F, //CJK UNIFIED IDEOGRAPH - 0xB8DC: 0x6760, //CJK UNIFIED IDEOGRAPH - 0xB8DD: 0x7BD9, //CJK UNIFIED IDEOGRAPH - 0xB8DE: 0x768B, //CJK UNIFIED IDEOGRAPH - 0xB8DF: 0x9AD8, //CJK UNIFIED IDEOGRAPH - 0xB8E0: 0x818F, //CJK UNIFIED IDEOGRAPH - 0xB8E1: 0x7F94, //CJK UNIFIED IDEOGRAPH - 0xB8E2: 0x7CD5, //CJK UNIFIED IDEOGRAPH - 0xB8E3: 0x641E, //CJK UNIFIED IDEOGRAPH - 0xB8E4: 0x9550, //CJK UNIFIED IDEOGRAPH - 0xB8E5: 0x7A3F, //CJK UNIFIED IDEOGRAPH - 0xB8E6: 0x544A, //CJK UNIFIED IDEOGRAPH - 0xB8E7: 0x54E5, //CJK UNIFIED IDEOGRAPH - 0xB8E8: 0x6B4C, //CJK UNIFIED IDEOGRAPH - 0xB8E9: 0x6401, //CJK UNIFIED IDEOGRAPH - 0xB8EA: 0x6208, //CJK UNIFIED IDEOGRAPH - 0xB8EB: 0x9E3D, //CJK UNIFIED IDEOGRAPH - 0xB8EC: 0x80F3, //CJK UNIFIED IDEOGRAPH - 0xB8ED: 0x7599, //CJK UNIFIED IDEOGRAPH - 0xB8EE: 0x5272, //CJK UNIFIED IDEOGRAPH - 0xB8EF: 0x9769, //CJK UNIFIED IDEOGRAPH - 0xB8F0: 0x845B, //CJK UNIFIED IDEOGRAPH - 0xB8F1: 0x683C, //CJK UNIFIED IDEOGRAPH - 0xB8F2: 0x86E4, //CJK UNIFIED IDEOGRAPH - 0xB8F3: 0x9601, //CJK UNIFIED IDEOGRAPH - 0xB8F4: 0x9694, //CJK UNIFIED IDEOGRAPH - 0xB8F5: 0x94EC, //CJK UNIFIED IDEOGRAPH - 0xB8F6: 0x4E2A, //CJK UNIFIED IDEOGRAPH - 0xB8F7: 0x5404, //CJK UNIFIED IDEOGRAPH - 0xB8F8: 0x7ED9, //CJK UNIFIED IDEOGRAPH - 0xB8F9: 0x6839, //CJK UNIFIED IDEOGRAPH - 0xB8FA: 0x8DDF, //CJK UNIFIED IDEOGRAPH - 0xB8FB: 0x8015, //CJK UNIFIED IDEOGRAPH - 0xB8FC: 0x66F4, //CJK UNIFIED IDEOGRAPH - 0xB8FD: 0x5E9A, //CJK UNIFIED IDEOGRAPH - 0xB8FE: 0x7FB9, //CJK UNIFIED IDEOGRAPH - 0xB940: 0x7B2F, //CJK UNIFIED IDEOGRAPH - 0xB941: 0x7B30, //CJK UNIFIED IDEOGRAPH - 0xB942: 0x7B32, //CJK UNIFIED IDEOGRAPH - 0xB943: 0x7B34, //CJK UNIFIED IDEOGRAPH - 0xB944: 0x7B35, //CJK UNIFIED IDEOGRAPH - 0xB945: 0x7B36, //CJK UNIFIED IDEOGRAPH - 0xB946: 0x7B37, //CJK UNIFIED IDEOGRAPH - 0xB947: 0x7B39, //CJK UNIFIED IDEOGRAPH - 0xB948: 0x7B3B, //CJK UNIFIED IDEOGRAPH - 0xB949: 0x7B3D, //CJK UNIFIED IDEOGRAPH - 0xB94A: 0x7B3F, //CJK UNIFIED IDEOGRAPH - 0xB94B: 0x7B40, //CJK UNIFIED IDEOGRAPH - 0xB94C: 0x7B41, //CJK UNIFIED IDEOGRAPH - 0xB94D: 0x7B42, //CJK UNIFIED IDEOGRAPH - 0xB94E: 0x7B43, //CJK UNIFIED IDEOGRAPH - 0xB94F: 0x7B44, //CJK UNIFIED IDEOGRAPH - 0xB950: 0x7B46, //CJK UNIFIED IDEOGRAPH - 0xB951: 0x7B48, //CJK UNIFIED IDEOGRAPH - 0xB952: 0x7B4A, //CJK UNIFIED IDEOGRAPH - 0xB953: 0x7B4D, //CJK UNIFIED IDEOGRAPH - 0xB954: 0x7B4E, //CJK UNIFIED IDEOGRAPH - 0xB955: 0x7B53, //CJK UNIFIED IDEOGRAPH - 0xB956: 0x7B55, //CJK UNIFIED IDEOGRAPH - 0xB957: 0x7B57, //CJK UNIFIED IDEOGRAPH - 0xB958: 0x7B59, //CJK UNIFIED IDEOGRAPH - 0xB959: 0x7B5C, //CJK UNIFIED IDEOGRAPH - 0xB95A: 0x7B5E, //CJK UNIFIED IDEOGRAPH - 0xB95B: 0x7B5F, //CJK UNIFIED IDEOGRAPH - 0xB95C: 0x7B61, //CJK UNIFIED IDEOGRAPH - 0xB95D: 0x7B63, //CJK UNIFIED IDEOGRAPH - 0xB95E: 0x7B64, //CJK UNIFIED IDEOGRAPH - 0xB95F: 0x7B65, //CJK UNIFIED IDEOGRAPH - 0xB960: 0x7B66, //CJK UNIFIED IDEOGRAPH - 0xB961: 0x7B67, //CJK UNIFIED IDEOGRAPH - 0xB962: 0x7B68, //CJK UNIFIED IDEOGRAPH - 0xB963: 0x7B69, //CJK UNIFIED IDEOGRAPH - 0xB964: 0x7B6A, //CJK UNIFIED IDEOGRAPH - 0xB965: 0x7B6B, //CJK UNIFIED IDEOGRAPH - 0xB966: 0x7B6C, //CJK UNIFIED IDEOGRAPH - 0xB967: 0x7B6D, //CJK UNIFIED IDEOGRAPH - 0xB968: 0x7B6F, //CJK UNIFIED IDEOGRAPH - 0xB969: 0x7B70, //CJK UNIFIED IDEOGRAPH - 0xB96A: 0x7B73, //CJK UNIFIED IDEOGRAPH - 0xB96B: 0x7B74, //CJK UNIFIED IDEOGRAPH - 0xB96C: 0x7B76, //CJK UNIFIED IDEOGRAPH - 0xB96D: 0x7B78, //CJK UNIFIED IDEOGRAPH - 0xB96E: 0x7B7A, //CJK UNIFIED IDEOGRAPH - 0xB96F: 0x7B7C, //CJK UNIFIED IDEOGRAPH - 0xB970: 0x7B7D, //CJK UNIFIED IDEOGRAPH - 0xB971: 0x7B7F, //CJK UNIFIED IDEOGRAPH - 0xB972: 0x7B81, //CJK UNIFIED IDEOGRAPH - 0xB973: 0x7B82, //CJK UNIFIED IDEOGRAPH - 0xB974: 0x7B83, //CJK UNIFIED IDEOGRAPH - 0xB975: 0x7B84, //CJK UNIFIED IDEOGRAPH - 0xB976: 0x7B86, //CJK UNIFIED IDEOGRAPH - 0xB977: 0x7B87, //CJK UNIFIED IDEOGRAPH - 0xB978: 0x7B88, //CJK UNIFIED IDEOGRAPH - 0xB979: 0x7B89, //CJK UNIFIED IDEOGRAPH - 0xB97A: 0x7B8A, //CJK UNIFIED IDEOGRAPH - 0xB97B: 0x7B8B, //CJK UNIFIED IDEOGRAPH - 0xB97C: 0x7B8C, //CJK UNIFIED IDEOGRAPH - 0xB97D: 0x7B8E, //CJK UNIFIED IDEOGRAPH - 0xB97E: 0x7B8F, //CJK UNIFIED IDEOGRAPH - 0xB980: 0x7B91, //CJK UNIFIED IDEOGRAPH - 0xB981: 0x7B92, //CJK UNIFIED IDEOGRAPH - 0xB982: 0x7B93, //CJK UNIFIED IDEOGRAPH - 0xB983: 0x7B96, //CJK UNIFIED IDEOGRAPH - 0xB984: 0x7B98, //CJK UNIFIED IDEOGRAPH - 0xB985: 0x7B99, //CJK UNIFIED IDEOGRAPH - 0xB986: 0x7B9A, //CJK UNIFIED IDEOGRAPH - 0xB987: 0x7B9B, //CJK UNIFIED IDEOGRAPH - 0xB988: 0x7B9E, //CJK UNIFIED IDEOGRAPH - 0xB989: 0x7B9F, //CJK UNIFIED IDEOGRAPH - 0xB98A: 0x7BA0, //CJK UNIFIED IDEOGRAPH - 0xB98B: 0x7BA3, //CJK UNIFIED IDEOGRAPH - 0xB98C: 0x7BA4, //CJK UNIFIED IDEOGRAPH - 0xB98D: 0x7BA5, //CJK UNIFIED IDEOGRAPH - 0xB98E: 0x7BAE, //CJK UNIFIED IDEOGRAPH - 0xB98F: 0x7BAF, //CJK UNIFIED IDEOGRAPH - 0xB990: 0x7BB0, //CJK UNIFIED IDEOGRAPH - 0xB991: 0x7BB2, //CJK UNIFIED IDEOGRAPH - 0xB992: 0x7BB3, //CJK UNIFIED IDEOGRAPH - 0xB993: 0x7BB5, //CJK UNIFIED IDEOGRAPH - 0xB994: 0x7BB6, //CJK UNIFIED IDEOGRAPH - 0xB995: 0x7BB7, //CJK UNIFIED IDEOGRAPH - 0xB996: 0x7BB9, //CJK UNIFIED IDEOGRAPH - 0xB997: 0x7BBA, //CJK UNIFIED IDEOGRAPH - 0xB998: 0x7BBB, //CJK UNIFIED IDEOGRAPH - 0xB999: 0x7BBC, //CJK UNIFIED IDEOGRAPH - 0xB99A: 0x7BBD, //CJK UNIFIED IDEOGRAPH - 0xB99B: 0x7BBE, //CJK UNIFIED IDEOGRAPH - 0xB99C: 0x7BBF, //CJK UNIFIED IDEOGRAPH - 0xB99D: 0x7BC0, //CJK UNIFIED IDEOGRAPH - 0xB99E: 0x7BC2, //CJK UNIFIED IDEOGRAPH - 0xB99F: 0x7BC3, //CJK UNIFIED IDEOGRAPH - 0xB9A0: 0x7BC4, //CJK UNIFIED IDEOGRAPH - 0xB9A1: 0x57C2, //CJK UNIFIED IDEOGRAPH - 0xB9A2: 0x803F, //CJK UNIFIED IDEOGRAPH - 0xB9A3: 0x6897, //CJK UNIFIED IDEOGRAPH - 0xB9A4: 0x5DE5, //CJK UNIFIED IDEOGRAPH - 0xB9A5: 0x653B, //CJK UNIFIED IDEOGRAPH - 0xB9A6: 0x529F, //CJK UNIFIED IDEOGRAPH - 0xB9A7: 0x606D, //CJK UNIFIED IDEOGRAPH - 0xB9A8: 0x9F9A, //CJK UNIFIED IDEOGRAPH - 0xB9A9: 0x4F9B, //CJK UNIFIED IDEOGRAPH - 0xB9AA: 0x8EAC, //CJK UNIFIED IDEOGRAPH - 0xB9AB: 0x516C, //CJK UNIFIED IDEOGRAPH - 0xB9AC: 0x5BAB, //CJK UNIFIED IDEOGRAPH - 0xB9AD: 0x5F13, //CJK UNIFIED IDEOGRAPH - 0xB9AE: 0x5DE9, //CJK UNIFIED IDEOGRAPH - 0xB9AF: 0x6C5E, //CJK UNIFIED IDEOGRAPH - 0xB9B0: 0x62F1, //CJK UNIFIED IDEOGRAPH - 0xB9B1: 0x8D21, //CJK UNIFIED IDEOGRAPH - 0xB9B2: 0x5171, //CJK UNIFIED IDEOGRAPH - 0xB9B3: 0x94A9, //CJK UNIFIED IDEOGRAPH - 0xB9B4: 0x52FE, //CJK UNIFIED IDEOGRAPH - 0xB9B5: 0x6C9F, //CJK UNIFIED IDEOGRAPH - 0xB9B6: 0x82DF, //CJK UNIFIED IDEOGRAPH - 0xB9B7: 0x72D7, //CJK UNIFIED IDEOGRAPH - 0xB9B8: 0x57A2, //CJK UNIFIED IDEOGRAPH - 0xB9B9: 0x6784, //CJK UNIFIED IDEOGRAPH - 0xB9BA: 0x8D2D, //CJK UNIFIED IDEOGRAPH - 0xB9BB: 0x591F, //CJK UNIFIED IDEOGRAPH - 0xB9BC: 0x8F9C, //CJK UNIFIED IDEOGRAPH - 0xB9BD: 0x83C7, //CJK UNIFIED IDEOGRAPH - 0xB9BE: 0x5495, //CJK UNIFIED IDEOGRAPH - 0xB9BF: 0x7B8D, //CJK UNIFIED IDEOGRAPH - 0xB9C0: 0x4F30, //CJK UNIFIED IDEOGRAPH - 0xB9C1: 0x6CBD, //CJK UNIFIED IDEOGRAPH - 0xB9C2: 0x5B64, //CJK UNIFIED IDEOGRAPH - 0xB9C3: 0x59D1, //CJK UNIFIED IDEOGRAPH - 0xB9C4: 0x9F13, //CJK UNIFIED IDEOGRAPH - 0xB9C5: 0x53E4, //CJK UNIFIED IDEOGRAPH - 0xB9C6: 0x86CA, //CJK UNIFIED IDEOGRAPH - 0xB9C7: 0x9AA8, //CJK UNIFIED IDEOGRAPH - 0xB9C8: 0x8C37, //CJK UNIFIED IDEOGRAPH - 0xB9C9: 0x80A1, //CJK UNIFIED IDEOGRAPH - 0xB9CA: 0x6545, //CJK UNIFIED IDEOGRAPH - 0xB9CB: 0x987E, //CJK UNIFIED IDEOGRAPH - 0xB9CC: 0x56FA, //CJK UNIFIED IDEOGRAPH - 0xB9CD: 0x96C7, //CJK UNIFIED IDEOGRAPH - 0xB9CE: 0x522E, //CJK UNIFIED IDEOGRAPH - 0xB9CF: 0x74DC, //CJK UNIFIED IDEOGRAPH - 0xB9D0: 0x5250, //CJK UNIFIED IDEOGRAPH - 0xB9D1: 0x5BE1, //CJK UNIFIED IDEOGRAPH - 0xB9D2: 0x6302, //CJK UNIFIED IDEOGRAPH - 0xB9D3: 0x8902, //CJK UNIFIED IDEOGRAPH - 0xB9D4: 0x4E56, //CJK UNIFIED IDEOGRAPH - 0xB9D5: 0x62D0, //CJK UNIFIED IDEOGRAPH - 0xB9D6: 0x602A, //CJK UNIFIED IDEOGRAPH - 0xB9D7: 0x68FA, //CJK UNIFIED IDEOGRAPH - 0xB9D8: 0x5173, //CJK UNIFIED IDEOGRAPH - 0xB9D9: 0x5B98, //CJK UNIFIED IDEOGRAPH - 0xB9DA: 0x51A0, //CJK UNIFIED IDEOGRAPH - 0xB9DB: 0x89C2, //CJK UNIFIED IDEOGRAPH - 0xB9DC: 0x7BA1, //CJK UNIFIED IDEOGRAPH - 0xB9DD: 0x9986, //CJK UNIFIED IDEOGRAPH - 0xB9DE: 0x7F50, //CJK UNIFIED IDEOGRAPH - 0xB9DF: 0x60EF, //CJK UNIFIED IDEOGRAPH - 0xB9E0: 0x704C, //CJK UNIFIED IDEOGRAPH - 0xB9E1: 0x8D2F, //CJK UNIFIED IDEOGRAPH - 0xB9E2: 0x5149, //CJK UNIFIED IDEOGRAPH - 0xB9E3: 0x5E7F, //CJK UNIFIED IDEOGRAPH - 0xB9E4: 0x901B, //CJK UNIFIED IDEOGRAPH - 0xB9E5: 0x7470, //CJK UNIFIED IDEOGRAPH - 0xB9E6: 0x89C4, //CJK UNIFIED IDEOGRAPH - 0xB9E7: 0x572D, //CJK UNIFIED IDEOGRAPH - 0xB9E8: 0x7845, //CJK UNIFIED IDEOGRAPH - 0xB9E9: 0x5F52, //CJK UNIFIED IDEOGRAPH - 0xB9EA: 0x9F9F, //CJK UNIFIED IDEOGRAPH - 0xB9EB: 0x95FA, //CJK UNIFIED IDEOGRAPH - 0xB9EC: 0x8F68, //CJK UNIFIED IDEOGRAPH - 0xB9ED: 0x9B3C, //CJK UNIFIED IDEOGRAPH - 0xB9EE: 0x8BE1, //CJK UNIFIED IDEOGRAPH - 0xB9EF: 0x7678, //CJK UNIFIED IDEOGRAPH - 0xB9F0: 0x6842, //CJK UNIFIED IDEOGRAPH - 0xB9F1: 0x67DC, //CJK UNIFIED IDEOGRAPH - 0xB9F2: 0x8DEA, //CJK UNIFIED IDEOGRAPH - 0xB9F3: 0x8D35, //CJK UNIFIED IDEOGRAPH - 0xB9F4: 0x523D, //CJK UNIFIED IDEOGRAPH - 0xB9F5: 0x8F8A, //CJK UNIFIED IDEOGRAPH - 0xB9F6: 0x6EDA, //CJK UNIFIED IDEOGRAPH - 0xB9F7: 0x68CD, //CJK UNIFIED IDEOGRAPH - 0xB9F8: 0x9505, //CJK UNIFIED IDEOGRAPH - 0xB9F9: 0x90ED, //CJK UNIFIED IDEOGRAPH - 0xB9FA: 0x56FD, //CJK UNIFIED IDEOGRAPH - 0xB9FB: 0x679C, //CJK UNIFIED IDEOGRAPH - 0xB9FC: 0x88F9, //CJK UNIFIED IDEOGRAPH - 0xB9FD: 0x8FC7, //CJK UNIFIED IDEOGRAPH - 0xB9FE: 0x54C8, //CJK UNIFIED IDEOGRAPH - 0xBA40: 0x7BC5, //CJK UNIFIED IDEOGRAPH - 0xBA41: 0x7BC8, //CJK UNIFIED IDEOGRAPH - 0xBA42: 0x7BC9, //CJK UNIFIED IDEOGRAPH - 0xBA43: 0x7BCA, //CJK UNIFIED IDEOGRAPH - 0xBA44: 0x7BCB, //CJK UNIFIED IDEOGRAPH - 0xBA45: 0x7BCD, //CJK UNIFIED IDEOGRAPH - 0xBA46: 0x7BCE, //CJK UNIFIED IDEOGRAPH - 0xBA47: 0x7BCF, //CJK UNIFIED IDEOGRAPH - 0xBA48: 0x7BD0, //CJK UNIFIED IDEOGRAPH - 0xBA49: 0x7BD2, //CJK UNIFIED IDEOGRAPH - 0xBA4A: 0x7BD4, //CJK UNIFIED IDEOGRAPH - 0xBA4B: 0x7BD5, //CJK UNIFIED IDEOGRAPH - 0xBA4C: 0x7BD6, //CJK UNIFIED IDEOGRAPH - 0xBA4D: 0x7BD7, //CJK UNIFIED IDEOGRAPH - 0xBA4E: 0x7BD8, //CJK UNIFIED IDEOGRAPH - 0xBA4F: 0x7BDB, //CJK UNIFIED IDEOGRAPH - 0xBA50: 0x7BDC, //CJK UNIFIED IDEOGRAPH - 0xBA51: 0x7BDE, //CJK UNIFIED IDEOGRAPH - 0xBA52: 0x7BDF, //CJK UNIFIED IDEOGRAPH - 0xBA53: 0x7BE0, //CJK UNIFIED IDEOGRAPH - 0xBA54: 0x7BE2, //CJK UNIFIED IDEOGRAPH - 0xBA55: 0x7BE3, //CJK UNIFIED IDEOGRAPH - 0xBA56: 0x7BE4, //CJK UNIFIED IDEOGRAPH - 0xBA57: 0x7BE7, //CJK UNIFIED IDEOGRAPH - 0xBA58: 0x7BE8, //CJK UNIFIED IDEOGRAPH - 0xBA59: 0x7BE9, //CJK UNIFIED IDEOGRAPH - 0xBA5A: 0x7BEB, //CJK UNIFIED IDEOGRAPH - 0xBA5B: 0x7BEC, //CJK UNIFIED IDEOGRAPH - 0xBA5C: 0x7BED, //CJK UNIFIED IDEOGRAPH - 0xBA5D: 0x7BEF, //CJK UNIFIED IDEOGRAPH - 0xBA5E: 0x7BF0, //CJK UNIFIED IDEOGRAPH - 0xBA5F: 0x7BF2, //CJK UNIFIED IDEOGRAPH - 0xBA60: 0x7BF3, //CJK UNIFIED IDEOGRAPH - 0xBA61: 0x7BF4, //CJK UNIFIED IDEOGRAPH - 0xBA62: 0x7BF5, //CJK UNIFIED IDEOGRAPH - 0xBA63: 0x7BF6, //CJK UNIFIED IDEOGRAPH - 0xBA64: 0x7BF8, //CJK UNIFIED IDEOGRAPH - 0xBA65: 0x7BF9, //CJK UNIFIED IDEOGRAPH - 0xBA66: 0x7BFA, //CJK UNIFIED IDEOGRAPH - 0xBA67: 0x7BFB, //CJK UNIFIED IDEOGRAPH - 0xBA68: 0x7BFD, //CJK UNIFIED IDEOGRAPH - 0xBA69: 0x7BFF, //CJK UNIFIED IDEOGRAPH - 0xBA6A: 0x7C00, //CJK UNIFIED IDEOGRAPH - 0xBA6B: 0x7C01, //CJK UNIFIED IDEOGRAPH - 0xBA6C: 0x7C02, //CJK UNIFIED IDEOGRAPH - 0xBA6D: 0x7C03, //CJK UNIFIED IDEOGRAPH - 0xBA6E: 0x7C04, //CJK UNIFIED IDEOGRAPH - 0xBA6F: 0x7C05, //CJK UNIFIED IDEOGRAPH - 0xBA70: 0x7C06, //CJK UNIFIED IDEOGRAPH - 0xBA71: 0x7C08, //CJK UNIFIED IDEOGRAPH - 0xBA72: 0x7C09, //CJK UNIFIED IDEOGRAPH - 0xBA73: 0x7C0A, //CJK UNIFIED IDEOGRAPH - 0xBA74: 0x7C0D, //CJK UNIFIED IDEOGRAPH - 0xBA75: 0x7C0E, //CJK UNIFIED IDEOGRAPH - 0xBA76: 0x7C10, //CJK UNIFIED IDEOGRAPH - 0xBA77: 0x7C11, //CJK UNIFIED IDEOGRAPH - 0xBA78: 0x7C12, //CJK UNIFIED IDEOGRAPH - 0xBA79: 0x7C13, //CJK UNIFIED IDEOGRAPH - 0xBA7A: 0x7C14, //CJK UNIFIED IDEOGRAPH - 0xBA7B: 0x7C15, //CJK UNIFIED IDEOGRAPH - 0xBA7C: 0x7C17, //CJK UNIFIED IDEOGRAPH - 0xBA7D: 0x7C18, //CJK UNIFIED IDEOGRAPH - 0xBA7E: 0x7C19, //CJK UNIFIED IDEOGRAPH - 0xBA80: 0x7C1A, //CJK UNIFIED IDEOGRAPH - 0xBA81: 0x7C1B, //CJK UNIFIED IDEOGRAPH - 0xBA82: 0x7C1C, //CJK UNIFIED IDEOGRAPH - 0xBA83: 0x7C1D, //CJK UNIFIED IDEOGRAPH - 0xBA84: 0x7C1E, //CJK UNIFIED IDEOGRAPH - 0xBA85: 0x7C20, //CJK UNIFIED IDEOGRAPH - 0xBA86: 0x7C21, //CJK UNIFIED IDEOGRAPH - 0xBA87: 0x7C22, //CJK UNIFIED IDEOGRAPH - 0xBA88: 0x7C23, //CJK UNIFIED IDEOGRAPH - 0xBA89: 0x7C24, //CJK UNIFIED IDEOGRAPH - 0xBA8A: 0x7C25, //CJK UNIFIED IDEOGRAPH - 0xBA8B: 0x7C28, //CJK UNIFIED IDEOGRAPH - 0xBA8C: 0x7C29, //CJK UNIFIED IDEOGRAPH - 0xBA8D: 0x7C2B, //CJK UNIFIED IDEOGRAPH - 0xBA8E: 0x7C2C, //CJK UNIFIED IDEOGRAPH - 0xBA8F: 0x7C2D, //CJK UNIFIED IDEOGRAPH - 0xBA90: 0x7C2E, //CJK UNIFIED IDEOGRAPH - 0xBA91: 0x7C2F, //CJK UNIFIED IDEOGRAPH - 0xBA92: 0x7C30, //CJK UNIFIED IDEOGRAPH - 0xBA93: 0x7C31, //CJK UNIFIED IDEOGRAPH - 0xBA94: 0x7C32, //CJK UNIFIED IDEOGRAPH - 0xBA95: 0x7C33, //CJK UNIFIED IDEOGRAPH - 0xBA96: 0x7C34, //CJK UNIFIED IDEOGRAPH - 0xBA97: 0x7C35, //CJK UNIFIED IDEOGRAPH - 0xBA98: 0x7C36, //CJK UNIFIED IDEOGRAPH - 0xBA99: 0x7C37, //CJK UNIFIED IDEOGRAPH - 0xBA9A: 0x7C39, //CJK UNIFIED IDEOGRAPH - 0xBA9B: 0x7C3A, //CJK UNIFIED IDEOGRAPH - 0xBA9C: 0x7C3B, //CJK UNIFIED IDEOGRAPH - 0xBA9D: 0x7C3C, //CJK UNIFIED IDEOGRAPH - 0xBA9E: 0x7C3D, //CJK UNIFIED IDEOGRAPH - 0xBA9F: 0x7C3E, //CJK UNIFIED IDEOGRAPH - 0xBAA0: 0x7C42, //CJK UNIFIED IDEOGRAPH - 0xBAA1: 0x9AB8, //CJK UNIFIED IDEOGRAPH - 0xBAA2: 0x5B69, //CJK UNIFIED IDEOGRAPH - 0xBAA3: 0x6D77, //CJK UNIFIED IDEOGRAPH - 0xBAA4: 0x6C26, //CJK UNIFIED IDEOGRAPH - 0xBAA5: 0x4EA5, //CJK UNIFIED IDEOGRAPH - 0xBAA6: 0x5BB3, //CJK UNIFIED IDEOGRAPH - 0xBAA7: 0x9A87, //CJK UNIFIED IDEOGRAPH - 0xBAA8: 0x9163, //CJK UNIFIED IDEOGRAPH - 0xBAA9: 0x61A8, //CJK UNIFIED IDEOGRAPH - 0xBAAA: 0x90AF, //CJK UNIFIED IDEOGRAPH - 0xBAAB: 0x97E9, //CJK UNIFIED IDEOGRAPH - 0xBAAC: 0x542B, //CJK UNIFIED IDEOGRAPH - 0xBAAD: 0x6DB5, //CJK UNIFIED IDEOGRAPH - 0xBAAE: 0x5BD2, //CJK UNIFIED IDEOGRAPH - 0xBAAF: 0x51FD, //CJK UNIFIED IDEOGRAPH - 0xBAB0: 0x558A, //CJK UNIFIED IDEOGRAPH - 0xBAB1: 0x7F55, //CJK UNIFIED IDEOGRAPH - 0xBAB2: 0x7FF0, //CJK UNIFIED IDEOGRAPH - 0xBAB3: 0x64BC, //CJK UNIFIED IDEOGRAPH - 0xBAB4: 0x634D, //CJK UNIFIED IDEOGRAPH - 0xBAB5: 0x65F1, //CJK UNIFIED IDEOGRAPH - 0xBAB6: 0x61BE, //CJK UNIFIED IDEOGRAPH - 0xBAB7: 0x608D, //CJK UNIFIED IDEOGRAPH - 0xBAB8: 0x710A, //CJK UNIFIED IDEOGRAPH - 0xBAB9: 0x6C57, //CJK UNIFIED IDEOGRAPH - 0xBABA: 0x6C49, //CJK UNIFIED IDEOGRAPH - 0xBABB: 0x592F, //CJK UNIFIED IDEOGRAPH - 0xBABC: 0x676D, //CJK UNIFIED IDEOGRAPH - 0xBABD: 0x822A, //CJK UNIFIED IDEOGRAPH - 0xBABE: 0x58D5, //CJK UNIFIED IDEOGRAPH - 0xBABF: 0x568E, //CJK UNIFIED IDEOGRAPH - 0xBAC0: 0x8C6A, //CJK UNIFIED IDEOGRAPH - 0xBAC1: 0x6BEB, //CJK UNIFIED IDEOGRAPH - 0xBAC2: 0x90DD, //CJK UNIFIED IDEOGRAPH - 0xBAC3: 0x597D, //CJK UNIFIED IDEOGRAPH - 0xBAC4: 0x8017, //CJK UNIFIED IDEOGRAPH - 0xBAC5: 0x53F7, //CJK UNIFIED IDEOGRAPH - 0xBAC6: 0x6D69, //CJK UNIFIED IDEOGRAPH - 0xBAC7: 0x5475, //CJK UNIFIED IDEOGRAPH - 0xBAC8: 0x559D, //CJK UNIFIED IDEOGRAPH - 0xBAC9: 0x8377, //CJK UNIFIED IDEOGRAPH - 0xBACA: 0x83CF, //CJK UNIFIED IDEOGRAPH - 0xBACB: 0x6838, //CJK UNIFIED IDEOGRAPH - 0xBACC: 0x79BE, //CJK UNIFIED IDEOGRAPH - 0xBACD: 0x548C, //CJK UNIFIED IDEOGRAPH - 0xBACE: 0x4F55, //CJK UNIFIED IDEOGRAPH - 0xBACF: 0x5408, //CJK UNIFIED IDEOGRAPH - 0xBAD0: 0x76D2, //CJK UNIFIED IDEOGRAPH - 0xBAD1: 0x8C89, //CJK UNIFIED IDEOGRAPH - 0xBAD2: 0x9602, //CJK UNIFIED IDEOGRAPH - 0xBAD3: 0x6CB3, //CJK UNIFIED IDEOGRAPH - 0xBAD4: 0x6DB8, //CJK UNIFIED IDEOGRAPH - 0xBAD5: 0x8D6B, //CJK UNIFIED IDEOGRAPH - 0xBAD6: 0x8910, //CJK UNIFIED IDEOGRAPH - 0xBAD7: 0x9E64, //CJK UNIFIED IDEOGRAPH - 0xBAD8: 0x8D3A, //CJK UNIFIED IDEOGRAPH - 0xBAD9: 0x563F, //CJK UNIFIED IDEOGRAPH - 0xBADA: 0x9ED1, //CJK UNIFIED IDEOGRAPH - 0xBADB: 0x75D5, //CJK UNIFIED IDEOGRAPH - 0xBADC: 0x5F88, //CJK UNIFIED IDEOGRAPH - 0xBADD: 0x72E0, //CJK UNIFIED IDEOGRAPH - 0xBADE: 0x6068, //CJK UNIFIED IDEOGRAPH - 0xBADF: 0x54FC, //CJK UNIFIED IDEOGRAPH - 0xBAE0: 0x4EA8, //CJK UNIFIED IDEOGRAPH - 0xBAE1: 0x6A2A, //CJK UNIFIED IDEOGRAPH - 0xBAE2: 0x8861, //CJK UNIFIED IDEOGRAPH - 0xBAE3: 0x6052, //CJK UNIFIED IDEOGRAPH - 0xBAE4: 0x8F70, //CJK UNIFIED IDEOGRAPH - 0xBAE5: 0x54C4, //CJK UNIFIED IDEOGRAPH - 0xBAE6: 0x70D8, //CJK UNIFIED IDEOGRAPH - 0xBAE7: 0x8679, //CJK UNIFIED IDEOGRAPH - 0xBAE8: 0x9E3F, //CJK UNIFIED IDEOGRAPH - 0xBAE9: 0x6D2A, //CJK UNIFIED IDEOGRAPH - 0xBAEA: 0x5B8F, //CJK UNIFIED IDEOGRAPH - 0xBAEB: 0x5F18, //CJK UNIFIED IDEOGRAPH - 0xBAEC: 0x7EA2, //CJK UNIFIED IDEOGRAPH - 0xBAED: 0x5589, //CJK UNIFIED IDEOGRAPH - 0xBAEE: 0x4FAF, //CJK UNIFIED IDEOGRAPH - 0xBAEF: 0x7334, //CJK UNIFIED IDEOGRAPH - 0xBAF0: 0x543C, //CJK UNIFIED IDEOGRAPH - 0xBAF1: 0x539A, //CJK UNIFIED IDEOGRAPH - 0xBAF2: 0x5019, //CJK UNIFIED IDEOGRAPH - 0xBAF3: 0x540E, //CJK UNIFIED IDEOGRAPH - 0xBAF4: 0x547C, //CJK UNIFIED IDEOGRAPH - 0xBAF5: 0x4E4E, //CJK UNIFIED IDEOGRAPH - 0xBAF6: 0x5FFD, //CJK UNIFIED IDEOGRAPH - 0xBAF7: 0x745A, //CJK UNIFIED IDEOGRAPH - 0xBAF8: 0x58F6, //CJK UNIFIED IDEOGRAPH - 0xBAF9: 0x846B, //CJK UNIFIED IDEOGRAPH - 0xBAFA: 0x80E1, //CJK UNIFIED IDEOGRAPH - 0xBAFB: 0x8774, //CJK UNIFIED IDEOGRAPH - 0xBAFC: 0x72D0, //CJK UNIFIED IDEOGRAPH - 0xBAFD: 0x7CCA, //CJK UNIFIED IDEOGRAPH - 0xBAFE: 0x6E56, //CJK UNIFIED IDEOGRAPH - 0xBB40: 0x7C43, //CJK UNIFIED IDEOGRAPH - 0xBB41: 0x7C44, //CJK UNIFIED IDEOGRAPH - 0xBB42: 0x7C45, //CJK UNIFIED IDEOGRAPH - 0xBB43: 0x7C46, //CJK UNIFIED IDEOGRAPH - 0xBB44: 0x7C47, //CJK UNIFIED IDEOGRAPH - 0xBB45: 0x7C48, //CJK UNIFIED IDEOGRAPH - 0xBB46: 0x7C49, //CJK UNIFIED IDEOGRAPH - 0xBB47: 0x7C4A, //CJK UNIFIED IDEOGRAPH - 0xBB48: 0x7C4B, //CJK UNIFIED IDEOGRAPH - 0xBB49: 0x7C4C, //CJK UNIFIED IDEOGRAPH - 0xBB4A: 0x7C4E, //CJK UNIFIED IDEOGRAPH - 0xBB4B: 0x7C4F, //CJK UNIFIED IDEOGRAPH - 0xBB4C: 0x7C50, //CJK UNIFIED IDEOGRAPH - 0xBB4D: 0x7C51, //CJK UNIFIED IDEOGRAPH - 0xBB4E: 0x7C52, //CJK UNIFIED IDEOGRAPH - 0xBB4F: 0x7C53, //CJK UNIFIED IDEOGRAPH - 0xBB50: 0x7C54, //CJK UNIFIED IDEOGRAPH - 0xBB51: 0x7C55, //CJK UNIFIED IDEOGRAPH - 0xBB52: 0x7C56, //CJK UNIFIED IDEOGRAPH - 0xBB53: 0x7C57, //CJK UNIFIED IDEOGRAPH - 0xBB54: 0x7C58, //CJK UNIFIED IDEOGRAPH - 0xBB55: 0x7C59, //CJK UNIFIED IDEOGRAPH - 0xBB56: 0x7C5A, //CJK UNIFIED IDEOGRAPH - 0xBB57: 0x7C5B, //CJK UNIFIED IDEOGRAPH - 0xBB58: 0x7C5C, //CJK UNIFIED IDEOGRAPH - 0xBB59: 0x7C5D, //CJK UNIFIED IDEOGRAPH - 0xBB5A: 0x7C5E, //CJK UNIFIED IDEOGRAPH - 0xBB5B: 0x7C5F, //CJK UNIFIED IDEOGRAPH - 0xBB5C: 0x7C60, //CJK UNIFIED IDEOGRAPH - 0xBB5D: 0x7C61, //CJK UNIFIED IDEOGRAPH - 0xBB5E: 0x7C62, //CJK UNIFIED IDEOGRAPH - 0xBB5F: 0x7C63, //CJK UNIFIED IDEOGRAPH - 0xBB60: 0x7C64, //CJK UNIFIED IDEOGRAPH - 0xBB61: 0x7C65, //CJK UNIFIED IDEOGRAPH - 0xBB62: 0x7C66, //CJK UNIFIED IDEOGRAPH - 0xBB63: 0x7C67, //CJK UNIFIED IDEOGRAPH - 0xBB64: 0x7C68, //CJK UNIFIED IDEOGRAPH - 0xBB65: 0x7C69, //CJK UNIFIED IDEOGRAPH - 0xBB66: 0x7C6A, //CJK UNIFIED IDEOGRAPH - 0xBB67: 0x7C6B, //CJK UNIFIED IDEOGRAPH - 0xBB68: 0x7C6C, //CJK UNIFIED IDEOGRAPH - 0xBB69: 0x7C6D, //CJK UNIFIED IDEOGRAPH - 0xBB6A: 0x7C6E, //CJK UNIFIED IDEOGRAPH - 0xBB6B: 0x7C6F, //CJK UNIFIED IDEOGRAPH - 0xBB6C: 0x7C70, //CJK UNIFIED IDEOGRAPH - 0xBB6D: 0x7C71, //CJK UNIFIED IDEOGRAPH - 0xBB6E: 0x7C72, //CJK UNIFIED IDEOGRAPH - 0xBB6F: 0x7C75, //CJK UNIFIED IDEOGRAPH - 0xBB70: 0x7C76, //CJK UNIFIED IDEOGRAPH - 0xBB71: 0x7C77, //CJK UNIFIED IDEOGRAPH - 0xBB72: 0x7C78, //CJK UNIFIED IDEOGRAPH - 0xBB73: 0x7C79, //CJK UNIFIED IDEOGRAPH - 0xBB74: 0x7C7A, //CJK UNIFIED IDEOGRAPH - 0xBB75: 0x7C7E, //CJK UNIFIED IDEOGRAPH - 0xBB76: 0x7C7F, //CJK UNIFIED IDEOGRAPH - 0xBB77: 0x7C80, //CJK UNIFIED IDEOGRAPH - 0xBB78: 0x7C81, //CJK UNIFIED IDEOGRAPH - 0xBB79: 0x7C82, //CJK UNIFIED IDEOGRAPH - 0xBB7A: 0x7C83, //CJK UNIFIED IDEOGRAPH - 0xBB7B: 0x7C84, //CJK UNIFIED IDEOGRAPH - 0xBB7C: 0x7C85, //CJK UNIFIED IDEOGRAPH - 0xBB7D: 0x7C86, //CJK UNIFIED IDEOGRAPH - 0xBB7E: 0x7C87, //CJK UNIFIED IDEOGRAPH - 0xBB80: 0x7C88, //CJK UNIFIED IDEOGRAPH - 0xBB81: 0x7C8A, //CJK UNIFIED IDEOGRAPH - 0xBB82: 0x7C8B, //CJK UNIFIED IDEOGRAPH - 0xBB83: 0x7C8C, //CJK UNIFIED IDEOGRAPH - 0xBB84: 0x7C8D, //CJK UNIFIED IDEOGRAPH - 0xBB85: 0x7C8E, //CJK UNIFIED IDEOGRAPH - 0xBB86: 0x7C8F, //CJK UNIFIED IDEOGRAPH - 0xBB87: 0x7C90, //CJK UNIFIED IDEOGRAPH - 0xBB88: 0x7C93, //CJK UNIFIED IDEOGRAPH - 0xBB89: 0x7C94, //CJK UNIFIED IDEOGRAPH - 0xBB8A: 0x7C96, //CJK UNIFIED IDEOGRAPH - 0xBB8B: 0x7C99, //CJK UNIFIED IDEOGRAPH - 0xBB8C: 0x7C9A, //CJK UNIFIED IDEOGRAPH - 0xBB8D: 0x7C9B, //CJK UNIFIED IDEOGRAPH - 0xBB8E: 0x7CA0, //CJK UNIFIED IDEOGRAPH - 0xBB8F: 0x7CA1, //CJK UNIFIED IDEOGRAPH - 0xBB90: 0x7CA3, //CJK UNIFIED IDEOGRAPH - 0xBB91: 0x7CA6, //CJK UNIFIED IDEOGRAPH - 0xBB92: 0x7CA7, //CJK UNIFIED IDEOGRAPH - 0xBB93: 0x7CA8, //CJK UNIFIED IDEOGRAPH - 0xBB94: 0x7CA9, //CJK UNIFIED IDEOGRAPH - 0xBB95: 0x7CAB, //CJK UNIFIED IDEOGRAPH - 0xBB96: 0x7CAC, //CJK UNIFIED IDEOGRAPH - 0xBB97: 0x7CAD, //CJK UNIFIED IDEOGRAPH - 0xBB98: 0x7CAF, //CJK UNIFIED IDEOGRAPH - 0xBB99: 0x7CB0, //CJK UNIFIED IDEOGRAPH - 0xBB9A: 0x7CB4, //CJK UNIFIED IDEOGRAPH - 0xBB9B: 0x7CB5, //CJK UNIFIED IDEOGRAPH - 0xBB9C: 0x7CB6, //CJK UNIFIED IDEOGRAPH - 0xBB9D: 0x7CB7, //CJK UNIFIED IDEOGRAPH - 0xBB9E: 0x7CB8, //CJK UNIFIED IDEOGRAPH - 0xBB9F: 0x7CBA, //CJK UNIFIED IDEOGRAPH - 0xBBA0: 0x7CBB, //CJK UNIFIED IDEOGRAPH - 0xBBA1: 0x5F27, //CJK UNIFIED IDEOGRAPH - 0xBBA2: 0x864E, //CJK UNIFIED IDEOGRAPH - 0xBBA3: 0x552C, //CJK UNIFIED IDEOGRAPH - 0xBBA4: 0x62A4, //CJK UNIFIED IDEOGRAPH - 0xBBA5: 0x4E92, //CJK UNIFIED IDEOGRAPH - 0xBBA6: 0x6CAA, //CJK UNIFIED IDEOGRAPH - 0xBBA7: 0x6237, //CJK UNIFIED IDEOGRAPH - 0xBBA8: 0x82B1, //CJK UNIFIED IDEOGRAPH - 0xBBA9: 0x54D7, //CJK UNIFIED IDEOGRAPH - 0xBBAA: 0x534E, //CJK UNIFIED IDEOGRAPH - 0xBBAB: 0x733E, //CJK UNIFIED IDEOGRAPH - 0xBBAC: 0x6ED1, //CJK UNIFIED IDEOGRAPH - 0xBBAD: 0x753B, //CJK UNIFIED IDEOGRAPH - 0xBBAE: 0x5212, //CJK UNIFIED IDEOGRAPH - 0xBBAF: 0x5316, //CJK UNIFIED IDEOGRAPH - 0xBBB0: 0x8BDD, //CJK UNIFIED IDEOGRAPH - 0xBBB1: 0x69D0, //CJK UNIFIED IDEOGRAPH - 0xBBB2: 0x5F8A, //CJK UNIFIED IDEOGRAPH - 0xBBB3: 0x6000, //CJK UNIFIED IDEOGRAPH - 0xBBB4: 0x6DEE, //CJK UNIFIED IDEOGRAPH - 0xBBB5: 0x574F, //CJK UNIFIED IDEOGRAPH - 0xBBB6: 0x6B22, //CJK UNIFIED IDEOGRAPH - 0xBBB7: 0x73AF, //CJK UNIFIED IDEOGRAPH - 0xBBB8: 0x6853, //CJK UNIFIED IDEOGRAPH - 0xBBB9: 0x8FD8, //CJK UNIFIED IDEOGRAPH - 0xBBBA: 0x7F13, //CJK UNIFIED IDEOGRAPH - 0xBBBB: 0x6362, //CJK UNIFIED IDEOGRAPH - 0xBBBC: 0x60A3, //CJK UNIFIED IDEOGRAPH - 0xBBBD: 0x5524, //CJK UNIFIED IDEOGRAPH - 0xBBBE: 0x75EA, //CJK UNIFIED IDEOGRAPH - 0xBBBF: 0x8C62, //CJK UNIFIED IDEOGRAPH - 0xBBC0: 0x7115, //CJK UNIFIED IDEOGRAPH - 0xBBC1: 0x6DA3, //CJK UNIFIED IDEOGRAPH - 0xBBC2: 0x5BA6, //CJK UNIFIED IDEOGRAPH - 0xBBC3: 0x5E7B, //CJK UNIFIED IDEOGRAPH - 0xBBC4: 0x8352, //CJK UNIFIED IDEOGRAPH - 0xBBC5: 0x614C, //CJK UNIFIED IDEOGRAPH - 0xBBC6: 0x9EC4, //CJK UNIFIED IDEOGRAPH - 0xBBC7: 0x78FA, //CJK UNIFIED IDEOGRAPH - 0xBBC8: 0x8757, //CJK UNIFIED IDEOGRAPH - 0xBBC9: 0x7C27, //CJK UNIFIED IDEOGRAPH - 0xBBCA: 0x7687, //CJK UNIFIED IDEOGRAPH - 0xBBCB: 0x51F0, //CJK UNIFIED IDEOGRAPH - 0xBBCC: 0x60F6, //CJK UNIFIED IDEOGRAPH - 0xBBCD: 0x714C, //CJK UNIFIED IDEOGRAPH - 0xBBCE: 0x6643, //CJK UNIFIED IDEOGRAPH - 0xBBCF: 0x5E4C, //CJK UNIFIED IDEOGRAPH - 0xBBD0: 0x604D, //CJK UNIFIED IDEOGRAPH - 0xBBD1: 0x8C0E, //CJK UNIFIED IDEOGRAPH - 0xBBD2: 0x7070, //CJK UNIFIED IDEOGRAPH - 0xBBD3: 0x6325, //CJK UNIFIED IDEOGRAPH - 0xBBD4: 0x8F89, //CJK UNIFIED IDEOGRAPH - 0xBBD5: 0x5FBD, //CJK UNIFIED IDEOGRAPH - 0xBBD6: 0x6062, //CJK UNIFIED IDEOGRAPH - 0xBBD7: 0x86D4, //CJK UNIFIED IDEOGRAPH - 0xBBD8: 0x56DE, //CJK UNIFIED IDEOGRAPH - 0xBBD9: 0x6BC1, //CJK UNIFIED IDEOGRAPH - 0xBBDA: 0x6094, //CJK UNIFIED IDEOGRAPH - 0xBBDB: 0x6167, //CJK UNIFIED IDEOGRAPH - 0xBBDC: 0x5349, //CJK UNIFIED IDEOGRAPH - 0xBBDD: 0x60E0, //CJK UNIFIED IDEOGRAPH - 0xBBDE: 0x6666, //CJK UNIFIED IDEOGRAPH - 0xBBDF: 0x8D3F, //CJK UNIFIED IDEOGRAPH - 0xBBE0: 0x79FD, //CJK UNIFIED IDEOGRAPH - 0xBBE1: 0x4F1A, //CJK UNIFIED IDEOGRAPH - 0xBBE2: 0x70E9, //CJK UNIFIED IDEOGRAPH - 0xBBE3: 0x6C47, //CJK UNIFIED IDEOGRAPH - 0xBBE4: 0x8BB3, //CJK UNIFIED IDEOGRAPH - 0xBBE5: 0x8BF2, //CJK UNIFIED IDEOGRAPH - 0xBBE6: 0x7ED8, //CJK UNIFIED IDEOGRAPH - 0xBBE7: 0x8364, //CJK UNIFIED IDEOGRAPH - 0xBBE8: 0x660F, //CJK UNIFIED IDEOGRAPH - 0xBBE9: 0x5A5A, //CJK UNIFIED IDEOGRAPH - 0xBBEA: 0x9B42, //CJK UNIFIED IDEOGRAPH - 0xBBEB: 0x6D51, //CJK UNIFIED IDEOGRAPH - 0xBBEC: 0x6DF7, //CJK UNIFIED IDEOGRAPH - 0xBBED: 0x8C41, //CJK UNIFIED IDEOGRAPH - 0xBBEE: 0x6D3B, //CJK UNIFIED IDEOGRAPH - 0xBBEF: 0x4F19, //CJK UNIFIED IDEOGRAPH - 0xBBF0: 0x706B, //CJK UNIFIED IDEOGRAPH - 0xBBF1: 0x83B7, //CJK UNIFIED IDEOGRAPH - 0xBBF2: 0x6216, //CJK UNIFIED IDEOGRAPH - 0xBBF3: 0x60D1, //CJK UNIFIED IDEOGRAPH - 0xBBF4: 0x970D, //CJK UNIFIED IDEOGRAPH - 0xBBF5: 0x8D27, //CJK UNIFIED IDEOGRAPH - 0xBBF6: 0x7978, //CJK UNIFIED IDEOGRAPH - 0xBBF7: 0x51FB, //CJK UNIFIED IDEOGRAPH - 0xBBF8: 0x573E, //CJK UNIFIED IDEOGRAPH - 0xBBF9: 0x57FA, //CJK UNIFIED IDEOGRAPH - 0xBBFA: 0x673A, //CJK UNIFIED IDEOGRAPH - 0xBBFB: 0x7578, //CJK UNIFIED IDEOGRAPH - 0xBBFC: 0x7A3D, //CJK UNIFIED IDEOGRAPH - 0xBBFD: 0x79EF, //CJK UNIFIED IDEOGRAPH - 0xBBFE: 0x7B95, //CJK UNIFIED IDEOGRAPH - 0xBC40: 0x7CBF, //CJK UNIFIED IDEOGRAPH - 0xBC41: 0x7CC0, //CJK UNIFIED IDEOGRAPH - 0xBC42: 0x7CC2, //CJK UNIFIED IDEOGRAPH - 0xBC43: 0x7CC3, //CJK UNIFIED IDEOGRAPH - 0xBC44: 0x7CC4, //CJK UNIFIED IDEOGRAPH - 0xBC45: 0x7CC6, //CJK UNIFIED IDEOGRAPH - 0xBC46: 0x7CC9, //CJK UNIFIED IDEOGRAPH - 0xBC47: 0x7CCB, //CJK UNIFIED IDEOGRAPH - 0xBC48: 0x7CCE, //CJK UNIFIED IDEOGRAPH - 0xBC49: 0x7CCF, //CJK UNIFIED IDEOGRAPH - 0xBC4A: 0x7CD0, //CJK UNIFIED IDEOGRAPH - 0xBC4B: 0x7CD1, //CJK UNIFIED IDEOGRAPH - 0xBC4C: 0x7CD2, //CJK UNIFIED IDEOGRAPH - 0xBC4D: 0x7CD3, //CJK UNIFIED IDEOGRAPH - 0xBC4E: 0x7CD4, //CJK UNIFIED IDEOGRAPH - 0xBC4F: 0x7CD8, //CJK UNIFIED IDEOGRAPH - 0xBC50: 0x7CDA, //CJK UNIFIED IDEOGRAPH - 0xBC51: 0x7CDB, //CJK UNIFIED IDEOGRAPH - 0xBC52: 0x7CDD, //CJK UNIFIED IDEOGRAPH - 0xBC53: 0x7CDE, //CJK UNIFIED IDEOGRAPH - 0xBC54: 0x7CE1, //CJK UNIFIED IDEOGRAPH - 0xBC55: 0x7CE2, //CJK UNIFIED IDEOGRAPH - 0xBC56: 0x7CE3, //CJK UNIFIED IDEOGRAPH - 0xBC57: 0x7CE4, //CJK UNIFIED IDEOGRAPH - 0xBC58: 0x7CE5, //CJK UNIFIED IDEOGRAPH - 0xBC59: 0x7CE6, //CJK UNIFIED IDEOGRAPH - 0xBC5A: 0x7CE7, //CJK UNIFIED IDEOGRAPH - 0xBC5B: 0x7CE9, //CJK UNIFIED IDEOGRAPH - 0xBC5C: 0x7CEA, //CJK UNIFIED IDEOGRAPH - 0xBC5D: 0x7CEB, //CJK UNIFIED IDEOGRAPH - 0xBC5E: 0x7CEC, //CJK UNIFIED IDEOGRAPH - 0xBC5F: 0x7CED, //CJK UNIFIED IDEOGRAPH - 0xBC60: 0x7CEE, //CJK UNIFIED IDEOGRAPH - 0xBC61: 0x7CF0, //CJK UNIFIED IDEOGRAPH - 0xBC62: 0x7CF1, //CJK UNIFIED IDEOGRAPH - 0xBC63: 0x7CF2, //CJK UNIFIED IDEOGRAPH - 0xBC64: 0x7CF3, //CJK UNIFIED IDEOGRAPH - 0xBC65: 0x7CF4, //CJK UNIFIED IDEOGRAPH - 0xBC66: 0x7CF5, //CJK UNIFIED IDEOGRAPH - 0xBC67: 0x7CF6, //CJK UNIFIED IDEOGRAPH - 0xBC68: 0x7CF7, //CJK UNIFIED IDEOGRAPH - 0xBC69: 0x7CF9, //CJK UNIFIED IDEOGRAPH - 0xBC6A: 0x7CFA, //CJK UNIFIED IDEOGRAPH - 0xBC6B: 0x7CFC, //CJK UNIFIED IDEOGRAPH - 0xBC6C: 0x7CFD, //CJK UNIFIED IDEOGRAPH - 0xBC6D: 0x7CFE, //CJK UNIFIED IDEOGRAPH - 0xBC6E: 0x7CFF, //CJK UNIFIED IDEOGRAPH - 0xBC6F: 0x7D00, //CJK UNIFIED IDEOGRAPH - 0xBC70: 0x7D01, //CJK UNIFIED IDEOGRAPH - 0xBC71: 0x7D02, //CJK UNIFIED IDEOGRAPH - 0xBC72: 0x7D03, //CJK UNIFIED IDEOGRAPH - 0xBC73: 0x7D04, //CJK UNIFIED IDEOGRAPH - 0xBC74: 0x7D05, //CJK UNIFIED IDEOGRAPH - 0xBC75: 0x7D06, //CJK UNIFIED IDEOGRAPH - 0xBC76: 0x7D07, //CJK UNIFIED IDEOGRAPH - 0xBC77: 0x7D08, //CJK UNIFIED IDEOGRAPH - 0xBC78: 0x7D09, //CJK UNIFIED IDEOGRAPH - 0xBC79: 0x7D0B, //CJK UNIFIED IDEOGRAPH - 0xBC7A: 0x7D0C, //CJK UNIFIED IDEOGRAPH - 0xBC7B: 0x7D0D, //CJK UNIFIED IDEOGRAPH - 0xBC7C: 0x7D0E, //CJK UNIFIED IDEOGRAPH - 0xBC7D: 0x7D0F, //CJK UNIFIED IDEOGRAPH - 0xBC7E: 0x7D10, //CJK UNIFIED IDEOGRAPH - 0xBC80: 0x7D11, //CJK UNIFIED IDEOGRAPH - 0xBC81: 0x7D12, //CJK UNIFIED IDEOGRAPH - 0xBC82: 0x7D13, //CJK UNIFIED IDEOGRAPH - 0xBC83: 0x7D14, //CJK UNIFIED IDEOGRAPH - 0xBC84: 0x7D15, //CJK UNIFIED IDEOGRAPH - 0xBC85: 0x7D16, //CJK UNIFIED IDEOGRAPH - 0xBC86: 0x7D17, //CJK UNIFIED IDEOGRAPH - 0xBC87: 0x7D18, //CJK UNIFIED IDEOGRAPH - 0xBC88: 0x7D19, //CJK UNIFIED IDEOGRAPH - 0xBC89: 0x7D1A, //CJK UNIFIED IDEOGRAPH - 0xBC8A: 0x7D1B, //CJK UNIFIED IDEOGRAPH - 0xBC8B: 0x7D1C, //CJK UNIFIED IDEOGRAPH - 0xBC8C: 0x7D1D, //CJK UNIFIED IDEOGRAPH - 0xBC8D: 0x7D1E, //CJK UNIFIED IDEOGRAPH - 0xBC8E: 0x7D1F, //CJK UNIFIED IDEOGRAPH - 0xBC8F: 0x7D21, //CJK UNIFIED IDEOGRAPH - 0xBC90: 0x7D23, //CJK UNIFIED IDEOGRAPH - 0xBC91: 0x7D24, //CJK UNIFIED IDEOGRAPH - 0xBC92: 0x7D25, //CJK UNIFIED IDEOGRAPH - 0xBC93: 0x7D26, //CJK UNIFIED IDEOGRAPH - 0xBC94: 0x7D28, //CJK UNIFIED IDEOGRAPH - 0xBC95: 0x7D29, //CJK UNIFIED IDEOGRAPH - 0xBC96: 0x7D2A, //CJK UNIFIED IDEOGRAPH - 0xBC97: 0x7D2C, //CJK UNIFIED IDEOGRAPH - 0xBC98: 0x7D2D, //CJK UNIFIED IDEOGRAPH - 0xBC99: 0x7D2E, //CJK UNIFIED IDEOGRAPH - 0xBC9A: 0x7D30, //CJK UNIFIED IDEOGRAPH - 0xBC9B: 0x7D31, //CJK UNIFIED IDEOGRAPH - 0xBC9C: 0x7D32, //CJK UNIFIED IDEOGRAPH - 0xBC9D: 0x7D33, //CJK UNIFIED IDEOGRAPH - 0xBC9E: 0x7D34, //CJK UNIFIED IDEOGRAPH - 0xBC9F: 0x7D35, //CJK UNIFIED IDEOGRAPH - 0xBCA0: 0x7D36, //CJK UNIFIED IDEOGRAPH - 0xBCA1: 0x808C, //CJK UNIFIED IDEOGRAPH - 0xBCA2: 0x9965, //CJK UNIFIED IDEOGRAPH - 0xBCA3: 0x8FF9, //CJK UNIFIED IDEOGRAPH - 0xBCA4: 0x6FC0, //CJK UNIFIED IDEOGRAPH - 0xBCA5: 0x8BA5, //CJK UNIFIED IDEOGRAPH - 0xBCA6: 0x9E21, //CJK UNIFIED IDEOGRAPH - 0xBCA7: 0x59EC, //CJK UNIFIED IDEOGRAPH - 0xBCA8: 0x7EE9, //CJK UNIFIED IDEOGRAPH - 0xBCA9: 0x7F09, //CJK UNIFIED IDEOGRAPH - 0xBCAA: 0x5409, //CJK UNIFIED IDEOGRAPH - 0xBCAB: 0x6781, //CJK UNIFIED IDEOGRAPH - 0xBCAC: 0x68D8, //CJK UNIFIED IDEOGRAPH - 0xBCAD: 0x8F91, //CJK UNIFIED IDEOGRAPH - 0xBCAE: 0x7C4D, //CJK UNIFIED IDEOGRAPH - 0xBCAF: 0x96C6, //CJK UNIFIED IDEOGRAPH - 0xBCB0: 0x53CA, //CJK UNIFIED IDEOGRAPH - 0xBCB1: 0x6025, //CJK UNIFIED IDEOGRAPH - 0xBCB2: 0x75BE, //CJK UNIFIED IDEOGRAPH - 0xBCB3: 0x6C72, //CJK UNIFIED IDEOGRAPH - 0xBCB4: 0x5373, //CJK UNIFIED IDEOGRAPH - 0xBCB5: 0x5AC9, //CJK UNIFIED IDEOGRAPH - 0xBCB6: 0x7EA7, //CJK UNIFIED IDEOGRAPH - 0xBCB7: 0x6324, //CJK UNIFIED IDEOGRAPH - 0xBCB8: 0x51E0, //CJK UNIFIED IDEOGRAPH - 0xBCB9: 0x810A, //CJK UNIFIED IDEOGRAPH - 0xBCBA: 0x5DF1, //CJK UNIFIED IDEOGRAPH - 0xBCBB: 0x84DF, //CJK UNIFIED IDEOGRAPH - 0xBCBC: 0x6280, //CJK UNIFIED IDEOGRAPH - 0xBCBD: 0x5180, //CJK UNIFIED IDEOGRAPH - 0xBCBE: 0x5B63, //CJK UNIFIED IDEOGRAPH - 0xBCBF: 0x4F0E, //CJK UNIFIED IDEOGRAPH - 0xBCC0: 0x796D, //CJK UNIFIED IDEOGRAPH - 0xBCC1: 0x5242, //CJK UNIFIED IDEOGRAPH - 0xBCC2: 0x60B8, //CJK UNIFIED IDEOGRAPH - 0xBCC3: 0x6D4E, //CJK UNIFIED IDEOGRAPH - 0xBCC4: 0x5BC4, //CJK UNIFIED IDEOGRAPH - 0xBCC5: 0x5BC2, //CJK UNIFIED IDEOGRAPH - 0xBCC6: 0x8BA1, //CJK UNIFIED IDEOGRAPH - 0xBCC7: 0x8BB0, //CJK UNIFIED IDEOGRAPH - 0xBCC8: 0x65E2, //CJK UNIFIED IDEOGRAPH - 0xBCC9: 0x5FCC, //CJK UNIFIED IDEOGRAPH - 0xBCCA: 0x9645, //CJK UNIFIED IDEOGRAPH - 0xBCCB: 0x5993, //CJK UNIFIED IDEOGRAPH - 0xBCCC: 0x7EE7, //CJK UNIFIED IDEOGRAPH - 0xBCCD: 0x7EAA, //CJK UNIFIED IDEOGRAPH - 0xBCCE: 0x5609, //CJK UNIFIED IDEOGRAPH - 0xBCCF: 0x67B7, //CJK UNIFIED IDEOGRAPH - 0xBCD0: 0x5939, //CJK UNIFIED IDEOGRAPH - 0xBCD1: 0x4F73, //CJK UNIFIED IDEOGRAPH - 0xBCD2: 0x5BB6, //CJK UNIFIED IDEOGRAPH - 0xBCD3: 0x52A0, //CJK UNIFIED IDEOGRAPH - 0xBCD4: 0x835A, //CJK UNIFIED IDEOGRAPH - 0xBCD5: 0x988A, //CJK UNIFIED IDEOGRAPH - 0xBCD6: 0x8D3E, //CJK UNIFIED IDEOGRAPH - 0xBCD7: 0x7532, //CJK UNIFIED IDEOGRAPH - 0xBCD8: 0x94BE, //CJK UNIFIED IDEOGRAPH - 0xBCD9: 0x5047, //CJK UNIFIED IDEOGRAPH - 0xBCDA: 0x7A3C, //CJK UNIFIED IDEOGRAPH - 0xBCDB: 0x4EF7, //CJK UNIFIED IDEOGRAPH - 0xBCDC: 0x67B6, //CJK UNIFIED IDEOGRAPH - 0xBCDD: 0x9A7E, //CJK UNIFIED IDEOGRAPH - 0xBCDE: 0x5AC1, //CJK UNIFIED IDEOGRAPH - 0xBCDF: 0x6B7C, //CJK UNIFIED IDEOGRAPH - 0xBCE0: 0x76D1, //CJK UNIFIED IDEOGRAPH - 0xBCE1: 0x575A, //CJK UNIFIED IDEOGRAPH - 0xBCE2: 0x5C16, //CJK UNIFIED IDEOGRAPH - 0xBCE3: 0x7B3A, //CJK UNIFIED IDEOGRAPH - 0xBCE4: 0x95F4, //CJK UNIFIED IDEOGRAPH - 0xBCE5: 0x714E, //CJK UNIFIED IDEOGRAPH - 0xBCE6: 0x517C, //CJK UNIFIED IDEOGRAPH - 0xBCE7: 0x80A9, //CJK UNIFIED IDEOGRAPH - 0xBCE8: 0x8270, //CJK UNIFIED IDEOGRAPH - 0xBCE9: 0x5978, //CJK UNIFIED IDEOGRAPH - 0xBCEA: 0x7F04, //CJK UNIFIED IDEOGRAPH - 0xBCEB: 0x8327, //CJK UNIFIED IDEOGRAPH - 0xBCEC: 0x68C0, //CJK UNIFIED IDEOGRAPH - 0xBCED: 0x67EC, //CJK UNIFIED IDEOGRAPH - 0xBCEE: 0x78B1, //CJK UNIFIED IDEOGRAPH - 0xBCEF: 0x7877, //CJK UNIFIED IDEOGRAPH - 0xBCF0: 0x62E3, //CJK UNIFIED IDEOGRAPH - 0xBCF1: 0x6361, //CJK UNIFIED IDEOGRAPH - 0xBCF2: 0x7B80, //CJK UNIFIED IDEOGRAPH - 0xBCF3: 0x4FED, //CJK UNIFIED IDEOGRAPH - 0xBCF4: 0x526A, //CJK UNIFIED IDEOGRAPH - 0xBCF5: 0x51CF, //CJK UNIFIED IDEOGRAPH - 0xBCF6: 0x8350, //CJK UNIFIED IDEOGRAPH - 0xBCF7: 0x69DB, //CJK UNIFIED IDEOGRAPH - 0xBCF8: 0x9274, //CJK UNIFIED IDEOGRAPH - 0xBCF9: 0x8DF5, //CJK UNIFIED IDEOGRAPH - 0xBCFA: 0x8D31, //CJK UNIFIED IDEOGRAPH - 0xBCFB: 0x89C1, //CJK UNIFIED IDEOGRAPH - 0xBCFC: 0x952E, //CJK UNIFIED IDEOGRAPH - 0xBCFD: 0x7BAD, //CJK UNIFIED IDEOGRAPH - 0xBCFE: 0x4EF6, //CJK UNIFIED IDEOGRAPH - 0xBD40: 0x7D37, //CJK UNIFIED IDEOGRAPH - 0xBD41: 0x7D38, //CJK UNIFIED IDEOGRAPH - 0xBD42: 0x7D39, //CJK UNIFIED IDEOGRAPH - 0xBD43: 0x7D3A, //CJK UNIFIED IDEOGRAPH - 0xBD44: 0x7D3B, //CJK UNIFIED IDEOGRAPH - 0xBD45: 0x7D3C, //CJK UNIFIED IDEOGRAPH - 0xBD46: 0x7D3D, //CJK UNIFIED IDEOGRAPH - 0xBD47: 0x7D3E, //CJK UNIFIED IDEOGRAPH - 0xBD48: 0x7D3F, //CJK UNIFIED IDEOGRAPH - 0xBD49: 0x7D40, //CJK UNIFIED IDEOGRAPH - 0xBD4A: 0x7D41, //CJK UNIFIED IDEOGRAPH - 0xBD4B: 0x7D42, //CJK UNIFIED IDEOGRAPH - 0xBD4C: 0x7D43, //CJK UNIFIED IDEOGRAPH - 0xBD4D: 0x7D44, //CJK UNIFIED IDEOGRAPH - 0xBD4E: 0x7D45, //CJK UNIFIED IDEOGRAPH - 0xBD4F: 0x7D46, //CJK UNIFIED IDEOGRAPH - 0xBD50: 0x7D47, //CJK UNIFIED IDEOGRAPH - 0xBD51: 0x7D48, //CJK UNIFIED IDEOGRAPH - 0xBD52: 0x7D49, //CJK UNIFIED IDEOGRAPH - 0xBD53: 0x7D4A, //CJK UNIFIED IDEOGRAPH - 0xBD54: 0x7D4B, //CJK UNIFIED IDEOGRAPH - 0xBD55: 0x7D4C, //CJK UNIFIED IDEOGRAPH - 0xBD56: 0x7D4D, //CJK UNIFIED IDEOGRAPH - 0xBD57: 0x7D4E, //CJK UNIFIED IDEOGRAPH - 0xBD58: 0x7D4F, //CJK UNIFIED IDEOGRAPH - 0xBD59: 0x7D50, //CJK UNIFIED IDEOGRAPH - 0xBD5A: 0x7D51, //CJK UNIFIED IDEOGRAPH - 0xBD5B: 0x7D52, //CJK UNIFIED IDEOGRAPH - 0xBD5C: 0x7D53, //CJK UNIFIED IDEOGRAPH - 0xBD5D: 0x7D54, //CJK UNIFIED IDEOGRAPH - 0xBD5E: 0x7D55, //CJK UNIFIED IDEOGRAPH - 0xBD5F: 0x7D56, //CJK UNIFIED IDEOGRAPH - 0xBD60: 0x7D57, //CJK UNIFIED IDEOGRAPH - 0xBD61: 0x7D58, //CJK UNIFIED IDEOGRAPH - 0xBD62: 0x7D59, //CJK UNIFIED IDEOGRAPH - 0xBD63: 0x7D5A, //CJK UNIFIED IDEOGRAPH - 0xBD64: 0x7D5B, //CJK UNIFIED IDEOGRAPH - 0xBD65: 0x7D5C, //CJK UNIFIED IDEOGRAPH - 0xBD66: 0x7D5D, //CJK UNIFIED IDEOGRAPH - 0xBD67: 0x7D5E, //CJK UNIFIED IDEOGRAPH - 0xBD68: 0x7D5F, //CJK UNIFIED IDEOGRAPH - 0xBD69: 0x7D60, //CJK UNIFIED IDEOGRAPH - 0xBD6A: 0x7D61, //CJK UNIFIED IDEOGRAPH - 0xBD6B: 0x7D62, //CJK UNIFIED IDEOGRAPH - 0xBD6C: 0x7D63, //CJK UNIFIED IDEOGRAPH - 0xBD6D: 0x7D64, //CJK UNIFIED IDEOGRAPH - 0xBD6E: 0x7D65, //CJK UNIFIED IDEOGRAPH - 0xBD6F: 0x7D66, //CJK UNIFIED IDEOGRAPH - 0xBD70: 0x7D67, //CJK UNIFIED IDEOGRAPH - 0xBD71: 0x7D68, //CJK UNIFIED IDEOGRAPH - 0xBD72: 0x7D69, //CJK UNIFIED IDEOGRAPH - 0xBD73: 0x7D6A, //CJK UNIFIED IDEOGRAPH - 0xBD74: 0x7D6B, //CJK UNIFIED IDEOGRAPH - 0xBD75: 0x7D6C, //CJK UNIFIED IDEOGRAPH - 0xBD76: 0x7D6D, //CJK UNIFIED IDEOGRAPH - 0xBD77: 0x7D6F, //CJK UNIFIED IDEOGRAPH - 0xBD78: 0x7D70, //CJK UNIFIED IDEOGRAPH - 0xBD79: 0x7D71, //CJK UNIFIED IDEOGRAPH - 0xBD7A: 0x7D72, //CJK UNIFIED IDEOGRAPH - 0xBD7B: 0x7D73, //CJK UNIFIED IDEOGRAPH - 0xBD7C: 0x7D74, //CJK UNIFIED IDEOGRAPH - 0xBD7D: 0x7D75, //CJK UNIFIED IDEOGRAPH - 0xBD7E: 0x7D76, //CJK UNIFIED IDEOGRAPH - 0xBD80: 0x7D78, //CJK UNIFIED IDEOGRAPH - 0xBD81: 0x7D79, //CJK UNIFIED IDEOGRAPH - 0xBD82: 0x7D7A, //CJK UNIFIED IDEOGRAPH - 0xBD83: 0x7D7B, //CJK UNIFIED IDEOGRAPH - 0xBD84: 0x7D7C, //CJK UNIFIED IDEOGRAPH - 0xBD85: 0x7D7D, //CJK UNIFIED IDEOGRAPH - 0xBD86: 0x7D7E, //CJK UNIFIED IDEOGRAPH - 0xBD87: 0x7D7F, //CJK UNIFIED IDEOGRAPH - 0xBD88: 0x7D80, //CJK UNIFIED IDEOGRAPH - 0xBD89: 0x7D81, //CJK UNIFIED IDEOGRAPH - 0xBD8A: 0x7D82, //CJK UNIFIED IDEOGRAPH - 0xBD8B: 0x7D83, //CJK UNIFIED IDEOGRAPH - 0xBD8C: 0x7D84, //CJK UNIFIED IDEOGRAPH - 0xBD8D: 0x7D85, //CJK UNIFIED IDEOGRAPH - 0xBD8E: 0x7D86, //CJK UNIFIED IDEOGRAPH - 0xBD8F: 0x7D87, //CJK UNIFIED IDEOGRAPH - 0xBD90: 0x7D88, //CJK UNIFIED IDEOGRAPH - 0xBD91: 0x7D89, //CJK UNIFIED IDEOGRAPH - 0xBD92: 0x7D8A, //CJK UNIFIED IDEOGRAPH - 0xBD93: 0x7D8B, //CJK UNIFIED IDEOGRAPH - 0xBD94: 0x7D8C, //CJK UNIFIED IDEOGRAPH - 0xBD95: 0x7D8D, //CJK UNIFIED IDEOGRAPH - 0xBD96: 0x7D8E, //CJK UNIFIED IDEOGRAPH - 0xBD97: 0x7D8F, //CJK UNIFIED IDEOGRAPH - 0xBD98: 0x7D90, //CJK UNIFIED IDEOGRAPH - 0xBD99: 0x7D91, //CJK UNIFIED IDEOGRAPH - 0xBD9A: 0x7D92, //CJK UNIFIED IDEOGRAPH - 0xBD9B: 0x7D93, //CJK UNIFIED IDEOGRAPH - 0xBD9C: 0x7D94, //CJK UNIFIED IDEOGRAPH - 0xBD9D: 0x7D95, //CJK UNIFIED IDEOGRAPH - 0xBD9E: 0x7D96, //CJK UNIFIED IDEOGRAPH - 0xBD9F: 0x7D97, //CJK UNIFIED IDEOGRAPH - 0xBDA0: 0x7D98, //CJK UNIFIED IDEOGRAPH - 0xBDA1: 0x5065, //CJK UNIFIED IDEOGRAPH - 0xBDA2: 0x8230, //CJK UNIFIED IDEOGRAPH - 0xBDA3: 0x5251, //CJK UNIFIED IDEOGRAPH - 0xBDA4: 0x996F, //CJK UNIFIED IDEOGRAPH - 0xBDA5: 0x6E10, //CJK UNIFIED IDEOGRAPH - 0xBDA6: 0x6E85, //CJK UNIFIED IDEOGRAPH - 0xBDA7: 0x6DA7, //CJK UNIFIED IDEOGRAPH - 0xBDA8: 0x5EFA, //CJK UNIFIED IDEOGRAPH - 0xBDA9: 0x50F5, //CJK UNIFIED IDEOGRAPH - 0xBDAA: 0x59DC, //CJK UNIFIED IDEOGRAPH - 0xBDAB: 0x5C06, //CJK UNIFIED IDEOGRAPH - 0xBDAC: 0x6D46, //CJK UNIFIED IDEOGRAPH - 0xBDAD: 0x6C5F, //CJK UNIFIED IDEOGRAPH - 0xBDAE: 0x7586, //CJK UNIFIED IDEOGRAPH - 0xBDAF: 0x848B, //CJK UNIFIED IDEOGRAPH - 0xBDB0: 0x6868, //CJK UNIFIED IDEOGRAPH - 0xBDB1: 0x5956, //CJK UNIFIED IDEOGRAPH - 0xBDB2: 0x8BB2, //CJK UNIFIED IDEOGRAPH - 0xBDB3: 0x5320, //CJK UNIFIED IDEOGRAPH - 0xBDB4: 0x9171, //CJK UNIFIED IDEOGRAPH - 0xBDB5: 0x964D, //CJK UNIFIED IDEOGRAPH - 0xBDB6: 0x8549, //CJK UNIFIED IDEOGRAPH - 0xBDB7: 0x6912, //CJK UNIFIED IDEOGRAPH - 0xBDB8: 0x7901, //CJK UNIFIED IDEOGRAPH - 0xBDB9: 0x7126, //CJK UNIFIED IDEOGRAPH - 0xBDBA: 0x80F6, //CJK UNIFIED IDEOGRAPH - 0xBDBB: 0x4EA4, //CJK UNIFIED IDEOGRAPH - 0xBDBC: 0x90CA, //CJK UNIFIED IDEOGRAPH - 0xBDBD: 0x6D47, //CJK UNIFIED IDEOGRAPH - 0xBDBE: 0x9A84, //CJK UNIFIED IDEOGRAPH - 0xBDBF: 0x5A07, //CJK UNIFIED IDEOGRAPH - 0xBDC0: 0x56BC, //CJK UNIFIED IDEOGRAPH - 0xBDC1: 0x6405, //CJK UNIFIED IDEOGRAPH - 0xBDC2: 0x94F0, //CJK UNIFIED IDEOGRAPH - 0xBDC3: 0x77EB, //CJK UNIFIED IDEOGRAPH - 0xBDC4: 0x4FA5, //CJK UNIFIED IDEOGRAPH - 0xBDC5: 0x811A, //CJK UNIFIED IDEOGRAPH - 0xBDC6: 0x72E1, //CJK UNIFIED IDEOGRAPH - 0xBDC7: 0x89D2, //CJK UNIFIED IDEOGRAPH - 0xBDC8: 0x997A, //CJK UNIFIED IDEOGRAPH - 0xBDC9: 0x7F34, //CJK UNIFIED IDEOGRAPH - 0xBDCA: 0x7EDE, //CJK UNIFIED IDEOGRAPH - 0xBDCB: 0x527F, //CJK UNIFIED IDEOGRAPH - 0xBDCC: 0x6559, //CJK UNIFIED IDEOGRAPH - 0xBDCD: 0x9175, //CJK UNIFIED IDEOGRAPH - 0xBDCE: 0x8F7F, //CJK UNIFIED IDEOGRAPH - 0xBDCF: 0x8F83, //CJK UNIFIED IDEOGRAPH - 0xBDD0: 0x53EB, //CJK UNIFIED IDEOGRAPH - 0xBDD1: 0x7A96, //CJK UNIFIED IDEOGRAPH - 0xBDD2: 0x63ED, //CJK UNIFIED IDEOGRAPH - 0xBDD3: 0x63A5, //CJK UNIFIED IDEOGRAPH - 0xBDD4: 0x7686, //CJK UNIFIED IDEOGRAPH - 0xBDD5: 0x79F8, //CJK UNIFIED IDEOGRAPH - 0xBDD6: 0x8857, //CJK UNIFIED IDEOGRAPH - 0xBDD7: 0x9636, //CJK UNIFIED IDEOGRAPH - 0xBDD8: 0x622A, //CJK UNIFIED IDEOGRAPH - 0xBDD9: 0x52AB, //CJK UNIFIED IDEOGRAPH - 0xBDDA: 0x8282, //CJK UNIFIED IDEOGRAPH - 0xBDDB: 0x6854, //CJK UNIFIED IDEOGRAPH - 0xBDDC: 0x6770, //CJK UNIFIED IDEOGRAPH - 0xBDDD: 0x6377, //CJK UNIFIED IDEOGRAPH - 0xBDDE: 0x776B, //CJK UNIFIED IDEOGRAPH - 0xBDDF: 0x7AED, //CJK UNIFIED IDEOGRAPH - 0xBDE0: 0x6D01, //CJK UNIFIED IDEOGRAPH - 0xBDE1: 0x7ED3, //CJK UNIFIED IDEOGRAPH - 0xBDE2: 0x89E3, //CJK UNIFIED IDEOGRAPH - 0xBDE3: 0x59D0, //CJK UNIFIED IDEOGRAPH - 0xBDE4: 0x6212, //CJK UNIFIED IDEOGRAPH - 0xBDE5: 0x85C9, //CJK UNIFIED IDEOGRAPH - 0xBDE6: 0x82A5, //CJK UNIFIED IDEOGRAPH - 0xBDE7: 0x754C, //CJK UNIFIED IDEOGRAPH - 0xBDE8: 0x501F, //CJK UNIFIED IDEOGRAPH - 0xBDE9: 0x4ECB, //CJK UNIFIED IDEOGRAPH - 0xBDEA: 0x75A5, //CJK UNIFIED IDEOGRAPH - 0xBDEB: 0x8BEB, //CJK UNIFIED IDEOGRAPH - 0xBDEC: 0x5C4A, //CJK UNIFIED IDEOGRAPH - 0xBDED: 0x5DFE, //CJK UNIFIED IDEOGRAPH - 0xBDEE: 0x7B4B, //CJK UNIFIED IDEOGRAPH - 0xBDEF: 0x65A4, //CJK UNIFIED IDEOGRAPH - 0xBDF0: 0x91D1, //CJK UNIFIED IDEOGRAPH - 0xBDF1: 0x4ECA, //CJK UNIFIED IDEOGRAPH - 0xBDF2: 0x6D25, //CJK UNIFIED IDEOGRAPH - 0xBDF3: 0x895F, //CJK UNIFIED IDEOGRAPH - 0xBDF4: 0x7D27, //CJK UNIFIED IDEOGRAPH - 0xBDF5: 0x9526, //CJK UNIFIED IDEOGRAPH - 0xBDF6: 0x4EC5, //CJK UNIFIED IDEOGRAPH - 0xBDF7: 0x8C28, //CJK UNIFIED IDEOGRAPH - 0xBDF8: 0x8FDB, //CJK UNIFIED IDEOGRAPH - 0xBDF9: 0x9773, //CJK UNIFIED IDEOGRAPH - 0xBDFA: 0x664B, //CJK UNIFIED IDEOGRAPH - 0xBDFB: 0x7981, //CJK UNIFIED IDEOGRAPH - 0xBDFC: 0x8FD1, //CJK UNIFIED IDEOGRAPH - 0xBDFD: 0x70EC, //CJK UNIFIED IDEOGRAPH - 0xBDFE: 0x6D78, //CJK UNIFIED IDEOGRAPH - 0xBE40: 0x7D99, //CJK UNIFIED IDEOGRAPH - 0xBE41: 0x7D9A, //CJK UNIFIED IDEOGRAPH - 0xBE42: 0x7D9B, //CJK UNIFIED IDEOGRAPH - 0xBE43: 0x7D9C, //CJK UNIFIED IDEOGRAPH - 0xBE44: 0x7D9D, //CJK UNIFIED IDEOGRAPH - 0xBE45: 0x7D9E, //CJK UNIFIED IDEOGRAPH - 0xBE46: 0x7D9F, //CJK UNIFIED IDEOGRAPH - 0xBE47: 0x7DA0, //CJK UNIFIED IDEOGRAPH - 0xBE48: 0x7DA1, //CJK UNIFIED IDEOGRAPH - 0xBE49: 0x7DA2, //CJK UNIFIED IDEOGRAPH - 0xBE4A: 0x7DA3, //CJK UNIFIED IDEOGRAPH - 0xBE4B: 0x7DA4, //CJK UNIFIED IDEOGRAPH - 0xBE4C: 0x7DA5, //CJK UNIFIED IDEOGRAPH - 0xBE4D: 0x7DA7, //CJK UNIFIED IDEOGRAPH - 0xBE4E: 0x7DA8, //CJK UNIFIED IDEOGRAPH - 0xBE4F: 0x7DA9, //CJK UNIFIED IDEOGRAPH - 0xBE50: 0x7DAA, //CJK UNIFIED IDEOGRAPH - 0xBE51: 0x7DAB, //CJK UNIFIED IDEOGRAPH - 0xBE52: 0x7DAC, //CJK UNIFIED IDEOGRAPH - 0xBE53: 0x7DAD, //CJK UNIFIED IDEOGRAPH - 0xBE54: 0x7DAF, //CJK UNIFIED IDEOGRAPH - 0xBE55: 0x7DB0, //CJK UNIFIED IDEOGRAPH - 0xBE56: 0x7DB1, //CJK UNIFIED IDEOGRAPH - 0xBE57: 0x7DB2, //CJK UNIFIED IDEOGRAPH - 0xBE58: 0x7DB3, //CJK UNIFIED IDEOGRAPH - 0xBE59: 0x7DB4, //CJK UNIFIED IDEOGRAPH - 0xBE5A: 0x7DB5, //CJK UNIFIED IDEOGRAPH - 0xBE5B: 0x7DB6, //CJK UNIFIED IDEOGRAPH - 0xBE5C: 0x7DB7, //CJK UNIFIED IDEOGRAPH - 0xBE5D: 0x7DB8, //CJK UNIFIED IDEOGRAPH - 0xBE5E: 0x7DB9, //CJK UNIFIED IDEOGRAPH - 0xBE5F: 0x7DBA, //CJK UNIFIED IDEOGRAPH - 0xBE60: 0x7DBB, //CJK UNIFIED IDEOGRAPH - 0xBE61: 0x7DBC, //CJK UNIFIED IDEOGRAPH - 0xBE62: 0x7DBD, //CJK UNIFIED IDEOGRAPH - 0xBE63: 0x7DBE, //CJK UNIFIED IDEOGRAPH - 0xBE64: 0x7DBF, //CJK UNIFIED IDEOGRAPH - 0xBE65: 0x7DC0, //CJK UNIFIED IDEOGRAPH - 0xBE66: 0x7DC1, //CJK UNIFIED IDEOGRAPH - 0xBE67: 0x7DC2, //CJK UNIFIED IDEOGRAPH - 0xBE68: 0x7DC3, //CJK UNIFIED IDEOGRAPH - 0xBE69: 0x7DC4, //CJK UNIFIED IDEOGRAPH - 0xBE6A: 0x7DC5, //CJK UNIFIED IDEOGRAPH - 0xBE6B: 0x7DC6, //CJK UNIFIED IDEOGRAPH - 0xBE6C: 0x7DC7, //CJK UNIFIED IDEOGRAPH - 0xBE6D: 0x7DC8, //CJK UNIFIED IDEOGRAPH - 0xBE6E: 0x7DC9, //CJK UNIFIED IDEOGRAPH - 0xBE6F: 0x7DCA, //CJK UNIFIED IDEOGRAPH - 0xBE70: 0x7DCB, //CJK UNIFIED IDEOGRAPH - 0xBE71: 0x7DCC, //CJK UNIFIED IDEOGRAPH - 0xBE72: 0x7DCD, //CJK UNIFIED IDEOGRAPH - 0xBE73: 0x7DCE, //CJK UNIFIED IDEOGRAPH - 0xBE74: 0x7DCF, //CJK UNIFIED IDEOGRAPH - 0xBE75: 0x7DD0, //CJK UNIFIED IDEOGRAPH - 0xBE76: 0x7DD1, //CJK UNIFIED IDEOGRAPH - 0xBE77: 0x7DD2, //CJK UNIFIED IDEOGRAPH - 0xBE78: 0x7DD3, //CJK UNIFIED IDEOGRAPH - 0xBE79: 0x7DD4, //CJK UNIFIED IDEOGRAPH - 0xBE7A: 0x7DD5, //CJK UNIFIED IDEOGRAPH - 0xBE7B: 0x7DD6, //CJK UNIFIED IDEOGRAPH - 0xBE7C: 0x7DD7, //CJK UNIFIED IDEOGRAPH - 0xBE7D: 0x7DD8, //CJK UNIFIED IDEOGRAPH - 0xBE7E: 0x7DD9, //CJK UNIFIED IDEOGRAPH - 0xBE80: 0x7DDA, //CJK UNIFIED IDEOGRAPH - 0xBE81: 0x7DDB, //CJK UNIFIED IDEOGRAPH - 0xBE82: 0x7DDC, //CJK UNIFIED IDEOGRAPH - 0xBE83: 0x7DDD, //CJK UNIFIED IDEOGRAPH - 0xBE84: 0x7DDE, //CJK UNIFIED IDEOGRAPH - 0xBE85: 0x7DDF, //CJK UNIFIED IDEOGRAPH - 0xBE86: 0x7DE0, //CJK UNIFIED IDEOGRAPH - 0xBE87: 0x7DE1, //CJK UNIFIED IDEOGRAPH - 0xBE88: 0x7DE2, //CJK UNIFIED IDEOGRAPH - 0xBE89: 0x7DE3, //CJK UNIFIED IDEOGRAPH - 0xBE8A: 0x7DE4, //CJK UNIFIED IDEOGRAPH - 0xBE8B: 0x7DE5, //CJK UNIFIED IDEOGRAPH - 0xBE8C: 0x7DE6, //CJK UNIFIED IDEOGRAPH - 0xBE8D: 0x7DE7, //CJK UNIFIED IDEOGRAPH - 0xBE8E: 0x7DE8, //CJK UNIFIED IDEOGRAPH - 0xBE8F: 0x7DE9, //CJK UNIFIED IDEOGRAPH - 0xBE90: 0x7DEA, //CJK UNIFIED IDEOGRAPH - 0xBE91: 0x7DEB, //CJK UNIFIED IDEOGRAPH - 0xBE92: 0x7DEC, //CJK UNIFIED IDEOGRAPH - 0xBE93: 0x7DED, //CJK UNIFIED IDEOGRAPH - 0xBE94: 0x7DEE, //CJK UNIFIED IDEOGRAPH - 0xBE95: 0x7DEF, //CJK UNIFIED IDEOGRAPH - 0xBE96: 0x7DF0, //CJK UNIFIED IDEOGRAPH - 0xBE97: 0x7DF1, //CJK UNIFIED IDEOGRAPH - 0xBE98: 0x7DF2, //CJK UNIFIED IDEOGRAPH - 0xBE99: 0x7DF3, //CJK UNIFIED IDEOGRAPH - 0xBE9A: 0x7DF4, //CJK UNIFIED IDEOGRAPH - 0xBE9B: 0x7DF5, //CJK UNIFIED IDEOGRAPH - 0xBE9C: 0x7DF6, //CJK UNIFIED IDEOGRAPH - 0xBE9D: 0x7DF7, //CJK UNIFIED IDEOGRAPH - 0xBE9E: 0x7DF8, //CJK UNIFIED IDEOGRAPH - 0xBE9F: 0x7DF9, //CJK UNIFIED IDEOGRAPH - 0xBEA0: 0x7DFA, //CJK UNIFIED IDEOGRAPH - 0xBEA1: 0x5C3D, //CJK UNIFIED IDEOGRAPH - 0xBEA2: 0x52B2, //CJK UNIFIED IDEOGRAPH - 0xBEA3: 0x8346, //CJK UNIFIED IDEOGRAPH - 0xBEA4: 0x5162, //CJK UNIFIED IDEOGRAPH - 0xBEA5: 0x830E, //CJK UNIFIED IDEOGRAPH - 0xBEA6: 0x775B, //CJK UNIFIED IDEOGRAPH - 0xBEA7: 0x6676, //CJK UNIFIED IDEOGRAPH - 0xBEA8: 0x9CB8, //CJK UNIFIED IDEOGRAPH - 0xBEA9: 0x4EAC, //CJK UNIFIED IDEOGRAPH - 0xBEAA: 0x60CA, //CJK UNIFIED IDEOGRAPH - 0xBEAB: 0x7CBE, //CJK UNIFIED IDEOGRAPH - 0xBEAC: 0x7CB3, //CJK UNIFIED IDEOGRAPH - 0xBEAD: 0x7ECF, //CJK UNIFIED IDEOGRAPH - 0xBEAE: 0x4E95, //CJK UNIFIED IDEOGRAPH - 0xBEAF: 0x8B66, //CJK UNIFIED IDEOGRAPH - 0xBEB0: 0x666F, //CJK UNIFIED IDEOGRAPH - 0xBEB1: 0x9888, //CJK UNIFIED IDEOGRAPH - 0xBEB2: 0x9759, //CJK UNIFIED IDEOGRAPH - 0xBEB3: 0x5883, //CJK UNIFIED IDEOGRAPH - 0xBEB4: 0x656C, //CJK UNIFIED IDEOGRAPH - 0xBEB5: 0x955C, //CJK UNIFIED IDEOGRAPH - 0xBEB6: 0x5F84, //CJK UNIFIED IDEOGRAPH - 0xBEB7: 0x75C9, //CJK UNIFIED IDEOGRAPH - 0xBEB8: 0x9756, //CJK UNIFIED IDEOGRAPH - 0xBEB9: 0x7ADF, //CJK UNIFIED IDEOGRAPH - 0xBEBA: 0x7ADE, //CJK UNIFIED IDEOGRAPH - 0xBEBB: 0x51C0, //CJK UNIFIED IDEOGRAPH - 0xBEBC: 0x70AF, //CJK UNIFIED IDEOGRAPH - 0xBEBD: 0x7A98, //CJK UNIFIED IDEOGRAPH - 0xBEBE: 0x63EA, //CJK UNIFIED IDEOGRAPH - 0xBEBF: 0x7A76, //CJK UNIFIED IDEOGRAPH - 0xBEC0: 0x7EA0, //CJK UNIFIED IDEOGRAPH - 0xBEC1: 0x7396, //CJK UNIFIED IDEOGRAPH - 0xBEC2: 0x97ED, //CJK UNIFIED IDEOGRAPH - 0xBEC3: 0x4E45, //CJK UNIFIED IDEOGRAPH - 0xBEC4: 0x7078, //CJK UNIFIED IDEOGRAPH - 0xBEC5: 0x4E5D, //CJK UNIFIED IDEOGRAPH - 0xBEC6: 0x9152, //CJK UNIFIED IDEOGRAPH - 0xBEC7: 0x53A9, //CJK UNIFIED IDEOGRAPH - 0xBEC8: 0x6551, //CJK UNIFIED IDEOGRAPH - 0xBEC9: 0x65E7, //CJK UNIFIED IDEOGRAPH - 0xBECA: 0x81FC, //CJK UNIFIED IDEOGRAPH - 0xBECB: 0x8205, //CJK UNIFIED IDEOGRAPH - 0xBECC: 0x548E, //CJK UNIFIED IDEOGRAPH - 0xBECD: 0x5C31, //CJK UNIFIED IDEOGRAPH - 0xBECE: 0x759A, //CJK UNIFIED IDEOGRAPH - 0xBECF: 0x97A0, //CJK UNIFIED IDEOGRAPH - 0xBED0: 0x62D8, //CJK UNIFIED IDEOGRAPH - 0xBED1: 0x72D9, //CJK UNIFIED IDEOGRAPH - 0xBED2: 0x75BD, //CJK UNIFIED IDEOGRAPH - 0xBED3: 0x5C45, //CJK UNIFIED IDEOGRAPH - 0xBED4: 0x9A79, //CJK UNIFIED IDEOGRAPH - 0xBED5: 0x83CA, //CJK UNIFIED IDEOGRAPH - 0xBED6: 0x5C40, //CJK UNIFIED IDEOGRAPH - 0xBED7: 0x5480, //CJK UNIFIED IDEOGRAPH - 0xBED8: 0x77E9, //CJK UNIFIED IDEOGRAPH - 0xBED9: 0x4E3E, //CJK UNIFIED IDEOGRAPH - 0xBEDA: 0x6CAE, //CJK UNIFIED IDEOGRAPH - 0xBEDB: 0x805A, //CJK UNIFIED IDEOGRAPH - 0xBEDC: 0x62D2, //CJK UNIFIED IDEOGRAPH - 0xBEDD: 0x636E, //CJK UNIFIED IDEOGRAPH - 0xBEDE: 0x5DE8, //CJK UNIFIED IDEOGRAPH - 0xBEDF: 0x5177, //CJK UNIFIED IDEOGRAPH - 0xBEE0: 0x8DDD, //CJK UNIFIED IDEOGRAPH - 0xBEE1: 0x8E1E, //CJK UNIFIED IDEOGRAPH - 0xBEE2: 0x952F, //CJK UNIFIED IDEOGRAPH - 0xBEE3: 0x4FF1, //CJK UNIFIED IDEOGRAPH - 0xBEE4: 0x53E5, //CJK UNIFIED IDEOGRAPH - 0xBEE5: 0x60E7, //CJK UNIFIED IDEOGRAPH - 0xBEE6: 0x70AC, //CJK UNIFIED IDEOGRAPH - 0xBEE7: 0x5267, //CJK UNIFIED IDEOGRAPH - 0xBEE8: 0x6350, //CJK UNIFIED IDEOGRAPH - 0xBEE9: 0x9E43, //CJK UNIFIED IDEOGRAPH - 0xBEEA: 0x5A1F, //CJK UNIFIED IDEOGRAPH - 0xBEEB: 0x5026, //CJK UNIFIED IDEOGRAPH - 0xBEEC: 0x7737, //CJK UNIFIED IDEOGRAPH - 0xBEED: 0x5377, //CJK UNIFIED IDEOGRAPH - 0xBEEE: 0x7EE2, //CJK UNIFIED IDEOGRAPH - 0xBEEF: 0x6485, //CJK UNIFIED IDEOGRAPH - 0xBEF0: 0x652B, //CJK UNIFIED IDEOGRAPH - 0xBEF1: 0x6289, //CJK UNIFIED IDEOGRAPH - 0xBEF2: 0x6398, //CJK UNIFIED IDEOGRAPH - 0xBEF3: 0x5014, //CJK UNIFIED IDEOGRAPH - 0xBEF4: 0x7235, //CJK UNIFIED IDEOGRAPH - 0xBEF5: 0x89C9, //CJK UNIFIED IDEOGRAPH - 0xBEF6: 0x51B3, //CJK UNIFIED IDEOGRAPH - 0xBEF7: 0x8BC0, //CJK UNIFIED IDEOGRAPH - 0xBEF8: 0x7EDD, //CJK UNIFIED IDEOGRAPH - 0xBEF9: 0x5747, //CJK UNIFIED IDEOGRAPH - 0xBEFA: 0x83CC, //CJK UNIFIED IDEOGRAPH - 0xBEFB: 0x94A7, //CJK UNIFIED IDEOGRAPH - 0xBEFC: 0x519B, //CJK UNIFIED IDEOGRAPH - 0xBEFD: 0x541B, //CJK UNIFIED IDEOGRAPH - 0xBEFE: 0x5CFB, //CJK UNIFIED IDEOGRAPH - 0xBF40: 0x7DFB, //CJK UNIFIED IDEOGRAPH - 0xBF41: 0x7DFC, //CJK UNIFIED IDEOGRAPH - 0xBF42: 0x7DFD, //CJK UNIFIED IDEOGRAPH - 0xBF43: 0x7DFE, //CJK UNIFIED IDEOGRAPH - 0xBF44: 0x7DFF, //CJK UNIFIED IDEOGRAPH - 0xBF45: 0x7E00, //CJK UNIFIED IDEOGRAPH - 0xBF46: 0x7E01, //CJK UNIFIED IDEOGRAPH - 0xBF47: 0x7E02, //CJK UNIFIED IDEOGRAPH - 0xBF48: 0x7E03, //CJK UNIFIED IDEOGRAPH - 0xBF49: 0x7E04, //CJK UNIFIED IDEOGRAPH - 0xBF4A: 0x7E05, //CJK UNIFIED IDEOGRAPH - 0xBF4B: 0x7E06, //CJK UNIFIED IDEOGRAPH - 0xBF4C: 0x7E07, //CJK UNIFIED IDEOGRAPH - 0xBF4D: 0x7E08, //CJK UNIFIED IDEOGRAPH - 0xBF4E: 0x7E09, //CJK UNIFIED IDEOGRAPH - 0xBF4F: 0x7E0A, //CJK UNIFIED IDEOGRAPH - 0xBF50: 0x7E0B, //CJK UNIFIED IDEOGRAPH - 0xBF51: 0x7E0C, //CJK UNIFIED IDEOGRAPH - 0xBF52: 0x7E0D, //CJK UNIFIED IDEOGRAPH - 0xBF53: 0x7E0E, //CJK UNIFIED IDEOGRAPH - 0xBF54: 0x7E0F, //CJK UNIFIED IDEOGRAPH - 0xBF55: 0x7E10, //CJK UNIFIED IDEOGRAPH - 0xBF56: 0x7E11, //CJK UNIFIED IDEOGRAPH - 0xBF57: 0x7E12, //CJK UNIFIED IDEOGRAPH - 0xBF58: 0x7E13, //CJK UNIFIED IDEOGRAPH - 0xBF59: 0x7E14, //CJK UNIFIED IDEOGRAPH - 0xBF5A: 0x7E15, //CJK UNIFIED IDEOGRAPH - 0xBF5B: 0x7E16, //CJK UNIFIED IDEOGRAPH - 0xBF5C: 0x7E17, //CJK UNIFIED IDEOGRAPH - 0xBF5D: 0x7E18, //CJK UNIFIED IDEOGRAPH - 0xBF5E: 0x7E19, //CJK UNIFIED IDEOGRAPH - 0xBF5F: 0x7E1A, //CJK UNIFIED IDEOGRAPH - 0xBF60: 0x7E1B, //CJK UNIFIED IDEOGRAPH - 0xBF61: 0x7E1C, //CJK UNIFIED IDEOGRAPH - 0xBF62: 0x7E1D, //CJK UNIFIED IDEOGRAPH - 0xBF63: 0x7E1E, //CJK UNIFIED IDEOGRAPH - 0xBF64: 0x7E1F, //CJK UNIFIED IDEOGRAPH - 0xBF65: 0x7E20, //CJK UNIFIED IDEOGRAPH - 0xBF66: 0x7E21, //CJK UNIFIED IDEOGRAPH - 0xBF67: 0x7E22, //CJK UNIFIED IDEOGRAPH - 0xBF68: 0x7E23, //CJK UNIFIED IDEOGRAPH - 0xBF69: 0x7E24, //CJK UNIFIED IDEOGRAPH - 0xBF6A: 0x7E25, //CJK UNIFIED IDEOGRAPH - 0xBF6B: 0x7E26, //CJK UNIFIED IDEOGRAPH - 0xBF6C: 0x7E27, //CJK UNIFIED IDEOGRAPH - 0xBF6D: 0x7E28, //CJK UNIFIED IDEOGRAPH - 0xBF6E: 0x7E29, //CJK UNIFIED IDEOGRAPH - 0xBF6F: 0x7E2A, //CJK UNIFIED IDEOGRAPH - 0xBF70: 0x7E2B, //CJK UNIFIED IDEOGRAPH - 0xBF71: 0x7E2C, //CJK UNIFIED IDEOGRAPH - 0xBF72: 0x7E2D, //CJK UNIFIED IDEOGRAPH - 0xBF73: 0x7E2E, //CJK UNIFIED IDEOGRAPH - 0xBF74: 0x7E2F, //CJK UNIFIED IDEOGRAPH - 0xBF75: 0x7E30, //CJK UNIFIED IDEOGRAPH - 0xBF76: 0x7E31, //CJK UNIFIED IDEOGRAPH - 0xBF77: 0x7E32, //CJK UNIFIED IDEOGRAPH - 0xBF78: 0x7E33, //CJK UNIFIED IDEOGRAPH - 0xBF79: 0x7E34, //CJK UNIFIED IDEOGRAPH - 0xBF7A: 0x7E35, //CJK UNIFIED IDEOGRAPH - 0xBF7B: 0x7E36, //CJK UNIFIED IDEOGRAPH - 0xBF7C: 0x7E37, //CJK UNIFIED IDEOGRAPH - 0xBF7D: 0x7E38, //CJK UNIFIED IDEOGRAPH - 0xBF7E: 0x7E39, //CJK UNIFIED IDEOGRAPH - 0xBF80: 0x7E3A, //CJK UNIFIED IDEOGRAPH - 0xBF81: 0x7E3C, //CJK UNIFIED IDEOGRAPH - 0xBF82: 0x7E3D, //CJK UNIFIED IDEOGRAPH - 0xBF83: 0x7E3E, //CJK UNIFIED IDEOGRAPH - 0xBF84: 0x7E3F, //CJK UNIFIED IDEOGRAPH - 0xBF85: 0x7E40, //CJK UNIFIED IDEOGRAPH - 0xBF86: 0x7E42, //CJK UNIFIED IDEOGRAPH - 0xBF87: 0x7E43, //CJK UNIFIED IDEOGRAPH - 0xBF88: 0x7E44, //CJK UNIFIED IDEOGRAPH - 0xBF89: 0x7E45, //CJK UNIFIED IDEOGRAPH - 0xBF8A: 0x7E46, //CJK UNIFIED IDEOGRAPH - 0xBF8B: 0x7E48, //CJK UNIFIED IDEOGRAPH - 0xBF8C: 0x7E49, //CJK UNIFIED IDEOGRAPH - 0xBF8D: 0x7E4A, //CJK UNIFIED IDEOGRAPH - 0xBF8E: 0x7E4B, //CJK UNIFIED IDEOGRAPH - 0xBF8F: 0x7E4C, //CJK UNIFIED IDEOGRAPH - 0xBF90: 0x7E4D, //CJK UNIFIED IDEOGRAPH - 0xBF91: 0x7E4E, //CJK UNIFIED IDEOGRAPH - 0xBF92: 0x7E4F, //CJK UNIFIED IDEOGRAPH - 0xBF93: 0x7E50, //CJK UNIFIED IDEOGRAPH - 0xBF94: 0x7E51, //CJK UNIFIED IDEOGRAPH - 0xBF95: 0x7E52, //CJK UNIFIED IDEOGRAPH - 0xBF96: 0x7E53, //CJK UNIFIED IDEOGRAPH - 0xBF97: 0x7E54, //CJK UNIFIED IDEOGRAPH - 0xBF98: 0x7E55, //CJK UNIFIED IDEOGRAPH - 0xBF99: 0x7E56, //CJK UNIFIED IDEOGRAPH - 0xBF9A: 0x7E57, //CJK UNIFIED IDEOGRAPH - 0xBF9B: 0x7E58, //CJK UNIFIED IDEOGRAPH - 0xBF9C: 0x7E59, //CJK UNIFIED IDEOGRAPH - 0xBF9D: 0x7E5A, //CJK UNIFIED IDEOGRAPH - 0xBF9E: 0x7E5B, //CJK UNIFIED IDEOGRAPH - 0xBF9F: 0x7E5C, //CJK UNIFIED IDEOGRAPH - 0xBFA0: 0x7E5D, //CJK UNIFIED IDEOGRAPH - 0xBFA1: 0x4FCA, //CJK UNIFIED IDEOGRAPH - 0xBFA2: 0x7AE3, //CJK UNIFIED IDEOGRAPH - 0xBFA3: 0x6D5A, //CJK UNIFIED IDEOGRAPH - 0xBFA4: 0x90E1, //CJK UNIFIED IDEOGRAPH - 0xBFA5: 0x9A8F, //CJK UNIFIED IDEOGRAPH - 0xBFA6: 0x5580, //CJK UNIFIED IDEOGRAPH - 0xBFA7: 0x5496, //CJK UNIFIED IDEOGRAPH - 0xBFA8: 0x5361, //CJK UNIFIED IDEOGRAPH - 0xBFA9: 0x54AF, //CJK UNIFIED IDEOGRAPH - 0xBFAA: 0x5F00, //CJK UNIFIED IDEOGRAPH - 0xBFAB: 0x63E9, //CJK UNIFIED IDEOGRAPH - 0xBFAC: 0x6977, //CJK UNIFIED IDEOGRAPH - 0xBFAD: 0x51EF, //CJK UNIFIED IDEOGRAPH - 0xBFAE: 0x6168, //CJK UNIFIED IDEOGRAPH - 0xBFAF: 0x520A, //CJK UNIFIED IDEOGRAPH - 0xBFB0: 0x582A, //CJK UNIFIED IDEOGRAPH - 0xBFB1: 0x52D8, //CJK UNIFIED IDEOGRAPH - 0xBFB2: 0x574E, //CJK UNIFIED IDEOGRAPH - 0xBFB3: 0x780D, //CJK UNIFIED IDEOGRAPH - 0xBFB4: 0x770B, //CJK UNIFIED IDEOGRAPH - 0xBFB5: 0x5EB7, //CJK UNIFIED IDEOGRAPH - 0xBFB6: 0x6177, //CJK UNIFIED IDEOGRAPH - 0xBFB7: 0x7CE0, //CJK UNIFIED IDEOGRAPH - 0xBFB8: 0x625B, //CJK UNIFIED IDEOGRAPH - 0xBFB9: 0x6297, //CJK UNIFIED IDEOGRAPH - 0xBFBA: 0x4EA2, //CJK UNIFIED IDEOGRAPH - 0xBFBB: 0x7095, //CJK UNIFIED IDEOGRAPH - 0xBFBC: 0x8003, //CJK UNIFIED IDEOGRAPH - 0xBFBD: 0x62F7, //CJK UNIFIED IDEOGRAPH - 0xBFBE: 0x70E4, //CJK UNIFIED IDEOGRAPH - 0xBFBF: 0x9760, //CJK UNIFIED IDEOGRAPH - 0xBFC0: 0x5777, //CJK UNIFIED IDEOGRAPH - 0xBFC1: 0x82DB, //CJK UNIFIED IDEOGRAPH - 0xBFC2: 0x67EF, //CJK UNIFIED IDEOGRAPH - 0xBFC3: 0x68F5, //CJK UNIFIED IDEOGRAPH - 0xBFC4: 0x78D5, //CJK UNIFIED IDEOGRAPH - 0xBFC5: 0x9897, //CJK UNIFIED IDEOGRAPH - 0xBFC6: 0x79D1, //CJK UNIFIED IDEOGRAPH - 0xBFC7: 0x58F3, //CJK UNIFIED IDEOGRAPH - 0xBFC8: 0x54B3, //CJK UNIFIED IDEOGRAPH - 0xBFC9: 0x53EF, //CJK UNIFIED IDEOGRAPH - 0xBFCA: 0x6E34, //CJK UNIFIED IDEOGRAPH - 0xBFCB: 0x514B, //CJK UNIFIED IDEOGRAPH - 0xBFCC: 0x523B, //CJK UNIFIED IDEOGRAPH - 0xBFCD: 0x5BA2, //CJK UNIFIED IDEOGRAPH - 0xBFCE: 0x8BFE, //CJK UNIFIED IDEOGRAPH - 0xBFCF: 0x80AF, //CJK UNIFIED IDEOGRAPH - 0xBFD0: 0x5543, //CJK UNIFIED IDEOGRAPH - 0xBFD1: 0x57A6, //CJK UNIFIED IDEOGRAPH - 0xBFD2: 0x6073, //CJK UNIFIED IDEOGRAPH - 0xBFD3: 0x5751, //CJK UNIFIED IDEOGRAPH - 0xBFD4: 0x542D, //CJK UNIFIED IDEOGRAPH - 0xBFD5: 0x7A7A, //CJK UNIFIED IDEOGRAPH - 0xBFD6: 0x6050, //CJK UNIFIED IDEOGRAPH - 0xBFD7: 0x5B54, //CJK UNIFIED IDEOGRAPH - 0xBFD8: 0x63A7, //CJK UNIFIED IDEOGRAPH - 0xBFD9: 0x62A0, //CJK UNIFIED IDEOGRAPH - 0xBFDA: 0x53E3, //CJK UNIFIED IDEOGRAPH - 0xBFDB: 0x6263, //CJK UNIFIED IDEOGRAPH - 0xBFDC: 0x5BC7, //CJK UNIFIED IDEOGRAPH - 0xBFDD: 0x67AF, //CJK UNIFIED IDEOGRAPH - 0xBFDE: 0x54ED, //CJK UNIFIED IDEOGRAPH - 0xBFDF: 0x7A9F, //CJK UNIFIED IDEOGRAPH - 0xBFE0: 0x82E6, //CJK UNIFIED IDEOGRAPH - 0xBFE1: 0x9177, //CJK UNIFIED IDEOGRAPH - 0xBFE2: 0x5E93, //CJK UNIFIED IDEOGRAPH - 0xBFE3: 0x88E4, //CJK UNIFIED IDEOGRAPH - 0xBFE4: 0x5938, //CJK UNIFIED IDEOGRAPH - 0xBFE5: 0x57AE, //CJK UNIFIED IDEOGRAPH - 0xBFE6: 0x630E, //CJK UNIFIED IDEOGRAPH - 0xBFE7: 0x8DE8, //CJK UNIFIED IDEOGRAPH - 0xBFE8: 0x80EF, //CJK UNIFIED IDEOGRAPH - 0xBFE9: 0x5757, //CJK UNIFIED IDEOGRAPH - 0xBFEA: 0x7B77, //CJK UNIFIED IDEOGRAPH - 0xBFEB: 0x4FA9, //CJK UNIFIED IDEOGRAPH - 0xBFEC: 0x5FEB, //CJK UNIFIED IDEOGRAPH - 0xBFED: 0x5BBD, //CJK UNIFIED IDEOGRAPH - 0xBFEE: 0x6B3E, //CJK UNIFIED IDEOGRAPH - 0xBFEF: 0x5321, //CJK UNIFIED IDEOGRAPH - 0xBFF0: 0x7B50, //CJK UNIFIED IDEOGRAPH - 0xBFF1: 0x72C2, //CJK UNIFIED IDEOGRAPH - 0xBFF2: 0x6846, //CJK UNIFIED IDEOGRAPH - 0xBFF3: 0x77FF, //CJK UNIFIED IDEOGRAPH - 0xBFF4: 0x7736, //CJK UNIFIED IDEOGRAPH - 0xBFF5: 0x65F7, //CJK UNIFIED IDEOGRAPH - 0xBFF6: 0x51B5, //CJK UNIFIED IDEOGRAPH - 0xBFF7: 0x4E8F, //CJK UNIFIED IDEOGRAPH - 0xBFF8: 0x76D4, //CJK UNIFIED IDEOGRAPH - 0xBFF9: 0x5CBF, //CJK UNIFIED IDEOGRAPH - 0xBFFA: 0x7AA5, //CJK UNIFIED IDEOGRAPH - 0xBFFB: 0x8475, //CJK UNIFIED IDEOGRAPH - 0xBFFC: 0x594E, //CJK UNIFIED IDEOGRAPH - 0xBFFD: 0x9B41, //CJK UNIFIED IDEOGRAPH - 0xBFFE: 0x5080, //CJK UNIFIED IDEOGRAPH - 0xC040: 0x7E5E, //CJK UNIFIED IDEOGRAPH - 0xC041: 0x7E5F, //CJK UNIFIED IDEOGRAPH - 0xC042: 0x7E60, //CJK UNIFIED IDEOGRAPH - 0xC043: 0x7E61, //CJK UNIFIED IDEOGRAPH - 0xC044: 0x7E62, //CJK UNIFIED IDEOGRAPH - 0xC045: 0x7E63, //CJK UNIFIED IDEOGRAPH - 0xC046: 0x7E64, //CJK UNIFIED IDEOGRAPH - 0xC047: 0x7E65, //CJK UNIFIED IDEOGRAPH - 0xC048: 0x7E66, //CJK UNIFIED IDEOGRAPH - 0xC049: 0x7E67, //CJK UNIFIED IDEOGRAPH - 0xC04A: 0x7E68, //CJK UNIFIED IDEOGRAPH - 0xC04B: 0x7E69, //CJK UNIFIED IDEOGRAPH - 0xC04C: 0x7E6A, //CJK UNIFIED IDEOGRAPH - 0xC04D: 0x7E6B, //CJK UNIFIED IDEOGRAPH - 0xC04E: 0x7E6C, //CJK UNIFIED IDEOGRAPH - 0xC04F: 0x7E6D, //CJK UNIFIED IDEOGRAPH - 0xC050: 0x7E6E, //CJK UNIFIED IDEOGRAPH - 0xC051: 0x7E6F, //CJK UNIFIED IDEOGRAPH - 0xC052: 0x7E70, //CJK UNIFIED IDEOGRAPH - 0xC053: 0x7E71, //CJK UNIFIED IDEOGRAPH - 0xC054: 0x7E72, //CJK UNIFIED IDEOGRAPH - 0xC055: 0x7E73, //CJK UNIFIED IDEOGRAPH - 0xC056: 0x7E74, //CJK UNIFIED IDEOGRAPH - 0xC057: 0x7E75, //CJK UNIFIED IDEOGRAPH - 0xC058: 0x7E76, //CJK UNIFIED IDEOGRAPH - 0xC059: 0x7E77, //CJK UNIFIED IDEOGRAPH - 0xC05A: 0x7E78, //CJK UNIFIED IDEOGRAPH - 0xC05B: 0x7E79, //CJK UNIFIED IDEOGRAPH - 0xC05C: 0x7E7A, //CJK UNIFIED IDEOGRAPH - 0xC05D: 0x7E7B, //CJK UNIFIED IDEOGRAPH - 0xC05E: 0x7E7C, //CJK UNIFIED IDEOGRAPH - 0xC05F: 0x7E7D, //CJK UNIFIED IDEOGRAPH - 0xC060: 0x7E7E, //CJK UNIFIED IDEOGRAPH - 0xC061: 0x7E7F, //CJK UNIFIED IDEOGRAPH - 0xC062: 0x7E80, //CJK UNIFIED IDEOGRAPH - 0xC063: 0x7E81, //CJK UNIFIED IDEOGRAPH - 0xC064: 0x7E83, //CJK UNIFIED IDEOGRAPH - 0xC065: 0x7E84, //CJK UNIFIED IDEOGRAPH - 0xC066: 0x7E85, //CJK UNIFIED IDEOGRAPH - 0xC067: 0x7E86, //CJK UNIFIED IDEOGRAPH - 0xC068: 0x7E87, //CJK UNIFIED IDEOGRAPH - 0xC069: 0x7E88, //CJK UNIFIED IDEOGRAPH - 0xC06A: 0x7E89, //CJK UNIFIED IDEOGRAPH - 0xC06B: 0x7E8A, //CJK UNIFIED IDEOGRAPH - 0xC06C: 0x7E8B, //CJK UNIFIED IDEOGRAPH - 0xC06D: 0x7E8C, //CJK UNIFIED IDEOGRAPH - 0xC06E: 0x7E8D, //CJK UNIFIED IDEOGRAPH - 0xC06F: 0x7E8E, //CJK UNIFIED IDEOGRAPH - 0xC070: 0x7E8F, //CJK UNIFIED IDEOGRAPH - 0xC071: 0x7E90, //CJK UNIFIED IDEOGRAPH - 0xC072: 0x7E91, //CJK UNIFIED IDEOGRAPH - 0xC073: 0x7E92, //CJK UNIFIED IDEOGRAPH - 0xC074: 0x7E93, //CJK UNIFIED IDEOGRAPH - 0xC075: 0x7E94, //CJK UNIFIED IDEOGRAPH - 0xC076: 0x7E95, //CJK UNIFIED IDEOGRAPH - 0xC077: 0x7E96, //CJK UNIFIED IDEOGRAPH - 0xC078: 0x7E97, //CJK UNIFIED IDEOGRAPH - 0xC079: 0x7E98, //CJK UNIFIED IDEOGRAPH - 0xC07A: 0x7E99, //CJK UNIFIED IDEOGRAPH - 0xC07B: 0x7E9A, //CJK UNIFIED IDEOGRAPH - 0xC07C: 0x7E9C, //CJK UNIFIED IDEOGRAPH - 0xC07D: 0x7E9D, //CJK UNIFIED IDEOGRAPH - 0xC07E: 0x7E9E, //CJK UNIFIED IDEOGRAPH - 0xC080: 0x7EAE, //CJK UNIFIED IDEOGRAPH - 0xC081: 0x7EB4, //CJK UNIFIED IDEOGRAPH - 0xC082: 0x7EBB, //CJK UNIFIED IDEOGRAPH - 0xC083: 0x7EBC, //CJK UNIFIED IDEOGRAPH - 0xC084: 0x7ED6, //CJK UNIFIED IDEOGRAPH - 0xC085: 0x7EE4, //CJK UNIFIED IDEOGRAPH - 0xC086: 0x7EEC, //CJK UNIFIED IDEOGRAPH - 0xC087: 0x7EF9, //CJK UNIFIED IDEOGRAPH - 0xC088: 0x7F0A, //CJK UNIFIED IDEOGRAPH - 0xC089: 0x7F10, //CJK UNIFIED IDEOGRAPH - 0xC08A: 0x7F1E, //CJK UNIFIED IDEOGRAPH - 0xC08B: 0x7F37, //CJK UNIFIED IDEOGRAPH - 0xC08C: 0x7F39, //CJK UNIFIED IDEOGRAPH - 0xC08D: 0x7F3B, //CJK UNIFIED IDEOGRAPH - 0xC08E: 0x7F3C, //CJK UNIFIED IDEOGRAPH - 0xC08F: 0x7F3D, //CJK UNIFIED IDEOGRAPH - 0xC090: 0x7F3E, //CJK UNIFIED IDEOGRAPH - 0xC091: 0x7F3F, //CJK UNIFIED IDEOGRAPH - 0xC092: 0x7F40, //CJK UNIFIED IDEOGRAPH - 0xC093: 0x7F41, //CJK UNIFIED IDEOGRAPH - 0xC094: 0x7F43, //CJK UNIFIED IDEOGRAPH - 0xC095: 0x7F46, //CJK UNIFIED IDEOGRAPH - 0xC096: 0x7F47, //CJK UNIFIED IDEOGRAPH - 0xC097: 0x7F48, //CJK UNIFIED IDEOGRAPH - 0xC098: 0x7F49, //CJK UNIFIED IDEOGRAPH - 0xC099: 0x7F4A, //CJK UNIFIED IDEOGRAPH - 0xC09A: 0x7F4B, //CJK UNIFIED IDEOGRAPH - 0xC09B: 0x7F4C, //CJK UNIFIED IDEOGRAPH - 0xC09C: 0x7F4D, //CJK UNIFIED IDEOGRAPH - 0xC09D: 0x7F4E, //CJK UNIFIED IDEOGRAPH - 0xC09E: 0x7F4F, //CJK UNIFIED IDEOGRAPH - 0xC09F: 0x7F52, //CJK UNIFIED IDEOGRAPH - 0xC0A0: 0x7F53, //CJK UNIFIED IDEOGRAPH - 0xC0A1: 0x9988, //CJK UNIFIED IDEOGRAPH - 0xC0A2: 0x6127, //CJK UNIFIED IDEOGRAPH - 0xC0A3: 0x6E83, //CJK UNIFIED IDEOGRAPH - 0xC0A4: 0x5764, //CJK UNIFIED IDEOGRAPH - 0xC0A5: 0x6606, //CJK UNIFIED IDEOGRAPH - 0xC0A6: 0x6346, //CJK UNIFIED IDEOGRAPH - 0xC0A7: 0x56F0, //CJK UNIFIED IDEOGRAPH - 0xC0A8: 0x62EC, //CJK UNIFIED IDEOGRAPH - 0xC0A9: 0x6269, //CJK UNIFIED IDEOGRAPH - 0xC0AA: 0x5ED3, //CJK UNIFIED IDEOGRAPH - 0xC0AB: 0x9614, //CJK UNIFIED IDEOGRAPH - 0xC0AC: 0x5783, //CJK UNIFIED IDEOGRAPH - 0xC0AD: 0x62C9, //CJK UNIFIED IDEOGRAPH - 0xC0AE: 0x5587, //CJK UNIFIED IDEOGRAPH - 0xC0AF: 0x8721, //CJK UNIFIED IDEOGRAPH - 0xC0B0: 0x814A, //CJK UNIFIED IDEOGRAPH - 0xC0B1: 0x8FA3, //CJK UNIFIED IDEOGRAPH - 0xC0B2: 0x5566, //CJK UNIFIED IDEOGRAPH - 0xC0B3: 0x83B1, //CJK UNIFIED IDEOGRAPH - 0xC0B4: 0x6765, //CJK UNIFIED IDEOGRAPH - 0xC0B5: 0x8D56, //CJK UNIFIED IDEOGRAPH - 0xC0B6: 0x84DD, //CJK UNIFIED IDEOGRAPH - 0xC0B7: 0x5A6A, //CJK UNIFIED IDEOGRAPH - 0xC0B8: 0x680F, //CJK UNIFIED IDEOGRAPH - 0xC0B9: 0x62E6, //CJK UNIFIED IDEOGRAPH - 0xC0BA: 0x7BEE, //CJK UNIFIED IDEOGRAPH - 0xC0BB: 0x9611, //CJK UNIFIED IDEOGRAPH - 0xC0BC: 0x5170, //CJK UNIFIED IDEOGRAPH - 0xC0BD: 0x6F9C, //CJK UNIFIED IDEOGRAPH - 0xC0BE: 0x8C30, //CJK UNIFIED IDEOGRAPH - 0xC0BF: 0x63FD, //CJK UNIFIED IDEOGRAPH - 0xC0C0: 0x89C8, //CJK UNIFIED IDEOGRAPH - 0xC0C1: 0x61D2, //CJK UNIFIED IDEOGRAPH - 0xC0C2: 0x7F06, //CJK UNIFIED IDEOGRAPH - 0xC0C3: 0x70C2, //CJK UNIFIED IDEOGRAPH - 0xC0C4: 0x6EE5, //CJK UNIFIED IDEOGRAPH - 0xC0C5: 0x7405, //CJK UNIFIED IDEOGRAPH - 0xC0C6: 0x6994, //CJK UNIFIED IDEOGRAPH - 0xC0C7: 0x72FC, //CJK UNIFIED IDEOGRAPH - 0xC0C8: 0x5ECA, //CJK UNIFIED IDEOGRAPH - 0xC0C9: 0x90CE, //CJK UNIFIED IDEOGRAPH - 0xC0CA: 0x6717, //CJK UNIFIED IDEOGRAPH - 0xC0CB: 0x6D6A, //CJK UNIFIED IDEOGRAPH - 0xC0CC: 0x635E, //CJK UNIFIED IDEOGRAPH - 0xC0CD: 0x52B3, //CJK UNIFIED IDEOGRAPH - 0xC0CE: 0x7262, //CJK UNIFIED IDEOGRAPH - 0xC0CF: 0x8001, //CJK UNIFIED IDEOGRAPH - 0xC0D0: 0x4F6C, //CJK UNIFIED IDEOGRAPH - 0xC0D1: 0x59E5, //CJK UNIFIED IDEOGRAPH - 0xC0D2: 0x916A, //CJK UNIFIED IDEOGRAPH - 0xC0D3: 0x70D9, //CJK UNIFIED IDEOGRAPH - 0xC0D4: 0x6D9D, //CJK UNIFIED IDEOGRAPH - 0xC0D5: 0x52D2, //CJK UNIFIED IDEOGRAPH - 0xC0D6: 0x4E50, //CJK UNIFIED IDEOGRAPH - 0xC0D7: 0x96F7, //CJK UNIFIED IDEOGRAPH - 0xC0D8: 0x956D, //CJK UNIFIED IDEOGRAPH - 0xC0D9: 0x857E, //CJK UNIFIED IDEOGRAPH - 0xC0DA: 0x78CA, //CJK UNIFIED IDEOGRAPH - 0xC0DB: 0x7D2F, //CJK UNIFIED IDEOGRAPH - 0xC0DC: 0x5121, //CJK UNIFIED IDEOGRAPH - 0xC0DD: 0x5792, //CJK UNIFIED IDEOGRAPH - 0xC0DE: 0x64C2, //CJK UNIFIED IDEOGRAPH - 0xC0DF: 0x808B, //CJK UNIFIED IDEOGRAPH - 0xC0E0: 0x7C7B, //CJK UNIFIED IDEOGRAPH - 0xC0E1: 0x6CEA, //CJK UNIFIED IDEOGRAPH - 0xC0E2: 0x68F1, //CJK UNIFIED IDEOGRAPH - 0xC0E3: 0x695E, //CJK UNIFIED IDEOGRAPH - 0xC0E4: 0x51B7, //CJK UNIFIED IDEOGRAPH - 0xC0E5: 0x5398, //CJK UNIFIED IDEOGRAPH - 0xC0E6: 0x68A8, //CJK UNIFIED IDEOGRAPH - 0xC0E7: 0x7281, //CJK UNIFIED IDEOGRAPH - 0xC0E8: 0x9ECE, //CJK UNIFIED IDEOGRAPH - 0xC0E9: 0x7BF1, //CJK UNIFIED IDEOGRAPH - 0xC0EA: 0x72F8, //CJK UNIFIED IDEOGRAPH - 0xC0EB: 0x79BB, //CJK UNIFIED IDEOGRAPH - 0xC0EC: 0x6F13, //CJK UNIFIED IDEOGRAPH - 0xC0ED: 0x7406, //CJK UNIFIED IDEOGRAPH - 0xC0EE: 0x674E, //CJK UNIFIED IDEOGRAPH - 0xC0EF: 0x91CC, //CJK UNIFIED IDEOGRAPH - 0xC0F0: 0x9CA4, //CJK UNIFIED IDEOGRAPH - 0xC0F1: 0x793C, //CJK UNIFIED IDEOGRAPH - 0xC0F2: 0x8389, //CJK UNIFIED IDEOGRAPH - 0xC0F3: 0x8354, //CJK UNIFIED IDEOGRAPH - 0xC0F4: 0x540F, //CJK UNIFIED IDEOGRAPH - 0xC0F5: 0x6817, //CJK UNIFIED IDEOGRAPH - 0xC0F6: 0x4E3D, //CJK UNIFIED IDEOGRAPH - 0xC0F7: 0x5389, //CJK UNIFIED IDEOGRAPH - 0xC0F8: 0x52B1, //CJK UNIFIED IDEOGRAPH - 0xC0F9: 0x783E, //CJK UNIFIED IDEOGRAPH - 0xC0FA: 0x5386, //CJK UNIFIED IDEOGRAPH - 0xC0FB: 0x5229, //CJK UNIFIED IDEOGRAPH - 0xC0FC: 0x5088, //CJK UNIFIED IDEOGRAPH - 0xC0FD: 0x4F8B, //CJK UNIFIED IDEOGRAPH - 0xC0FE: 0x4FD0, //CJK UNIFIED IDEOGRAPH - 0xC140: 0x7F56, //CJK UNIFIED IDEOGRAPH - 0xC141: 0x7F59, //CJK UNIFIED IDEOGRAPH - 0xC142: 0x7F5B, //CJK UNIFIED IDEOGRAPH - 0xC143: 0x7F5C, //CJK UNIFIED IDEOGRAPH - 0xC144: 0x7F5D, //CJK UNIFIED IDEOGRAPH - 0xC145: 0x7F5E, //CJK UNIFIED IDEOGRAPH - 0xC146: 0x7F60, //CJK UNIFIED IDEOGRAPH - 0xC147: 0x7F63, //CJK UNIFIED IDEOGRAPH - 0xC148: 0x7F64, //CJK UNIFIED IDEOGRAPH - 0xC149: 0x7F65, //CJK UNIFIED IDEOGRAPH - 0xC14A: 0x7F66, //CJK UNIFIED IDEOGRAPH - 0xC14B: 0x7F67, //CJK UNIFIED IDEOGRAPH - 0xC14C: 0x7F6B, //CJK UNIFIED IDEOGRAPH - 0xC14D: 0x7F6C, //CJK UNIFIED IDEOGRAPH - 0xC14E: 0x7F6D, //CJK UNIFIED IDEOGRAPH - 0xC14F: 0x7F6F, //CJK UNIFIED IDEOGRAPH - 0xC150: 0x7F70, //CJK UNIFIED IDEOGRAPH - 0xC151: 0x7F73, //CJK UNIFIED IDEOGRAPH - 0xC152: 0x7F75, //CJK UNIFIED IDEOGRAPH - 0xC153: 0x7F76, //CJK UNIFIED IDEOGRAPH - 0xC154: 0x7F77, //CJK UNIFIED IDEOGRAPH - 0xC155: 0x7F78, //CJK UNIFIED IDEOGRAPH - 0xC156: 0x7F7A, //CJK UNIFIED IDEOGRAPH - 0xC157: 0x7F7B, //CJK UNIFIED IDEOGRAPH - 0xC158: 0x7F7C, //CJK UNIFIED IDEOGRAPH - 0xC159: 0x7F7D, //CJK UNIFIED IDEOGRAPH - 0xC15A: 0x7F7F, //CJK UNIFIED IDEOGRAPH - 0xC15B: 0x7F80, //CJK UNIFIED IDEOGRAPH - 0xC15C: 0x7F82, //CJK UNIFIED IDEOGRAPH - 0xC15D: 0x7F83, //CJK UNIFIED IDEOGRAPH - 0xC15E: 0x7F84, //CJK UNIFIED IDEOGRAPH - 0xC15F: 0x7F85, //CJK UNIFIED IDEOGRAPH - 0xC160: 0x7F86, //CJK UNIFIED IDEOGRAPH - 0xC161: 0x7F87, //CJK UNIFIED IDEOGRAPH - 0xC162: 0x7F88, //CJK UNIFIED IDEOGRAPH - 0xC163: 0x7F89, //CJK UNIFIED IDEOGRAPH - 0xC164: 0x7F8B, //CJK UNIFIED IDEOGRAPH - 0xC165: 0x7F8D, //CJK UNIFIED IDEOGRAPH - 0xC166: 0x7F8F, //CJK UNIFIED IDEOGRAPH - 0xC167: 0x7F90, //CJK UNIFIED IDEOGRAPH - 0xC168: 0x7F91, //CJK UNIFIED IDEOGRAPH - 0xC169: 0x7F92, //CJK UNIFIED IDEOGRAPH - 0xC16A: 0x7F93, //CJK UNIFIED IDEOGRAPH - 0xC16B: 0x7F95, //CJK UNIFIED IDEOGRAPH - 0xC16C: 0x7F96, //CJK UNIFIED IDEOGRAPH - 0xC16D: 0x7F97, //CJK UNIFIED IDEOGRAPH - 0xC16E: 0x7F98, //CJK UNIFIED IDEOGRAPH - 0xC16F: 0x7F99, //CJK UNIFIED IDEOGRAPH - 0xC170: 0x7F9B, //CJK UNIFIED IDEOGRAPH - 0xC171: 0x7F9C, //CJK UNIFIED IDEOGRAPH - 0xC172: 0x7FA0, //CJK UNIFIED IDEOGRAPH - 0xC173: 0x7FA2, //CJK UNIFIED IDEOGRAPH - 0xC174: 0x7FA3, //CJK UNIFIED IDEOGRAPH - 0xC175: 0x7FA5, //CJK UNIFIED IDEOGRAPH - 0xC176: 0x7FA6, //CJK UNIFIED IDEOGRAPH - 0xC177: 0x7FA8, //CJK UNIFIED IDEOGRAPH - 0xC178: 0x7FA9, //CJK UNIFIED IDEOGRAPH - 0xC179: 0x7FAA, //CJK UNIFIED IDEOGRAPH - 0xC17A: 0x7FAB, //CJK UNIFIED IDEOGRAPH - 0xC17B: 0x7FAC, //CJK UNIFIED IDEOGRAPH - 0xC17C: 0x7FAD, //CJK UNIFIED IDEOGRAPH - 0xC17D: 0x7FAE, //CJK UNIFIED IDEOGRAPH - 0xC17E: 0x7FB1, //CJK UNIFIED IDEOGRAPH - 0xC180: 0x7FB3, //CJK UNIFIED IDEOGRAPH - 0xC181: 0x7FB4, //CJK UNIFIED IDEOGRAPH - 0xC182: 0x7FB5, //CJK UNIFIED IDEOGRAPH - 0xC183: 0x7FB6, //CJK UNIFIED IDEOGRAPH - 0xC184: 0x7FB7, //CJK UNIFIED IDEOGRAPH - 0xC185: 0x7FBA, //CJK UNIFIED IDEOGRAPH - 0xC186: 0x7FBB, //CJK UNIFIED IDEOGRAPH - 0xC187: 0x7FBE, //CJK UNIFIED IDEOGRAPH - 0xC188: 0x7FC0, //CJK UNIFIED IDEOGRAPH - 0xC189: 0x7FC2, //CJK UNIFIED IDEOGRAPH - 0xC18A: 0x7FC3, //CJK UNIFIED IDEOGRAPH - 0xC18B: 0x7FC4, //CJK UNIFIED IDEOGRAPH - 0xC18C: 0x7FC6, //CJK UNIFIED IDEOGRAPH - 0xC18D: 0x7FC7, //CJK UNIFIED IDEOGRAPH - 0xC18E: 0x7FC8, //CJK UNIFIED IDEOGRAPH - 0xC18F: 0x7FC9, //CJK UNIFIED IDEOGRAPH - 0xC190: 0x7FCB, //CJK UNIFIED IDEOGRAPH - 0xC191: 0x7FCD, //CJK UNIFIED IDEOGRAPH - 0xC192: 0x7FCF, //CJK UNIFIED IDEOGRAPH - 0xC193: 0x7FD0, //CJK UNIFIED IDEOGRAPH - 0xC194: 0x7FD1, //CJK UNIFIED IDEOGRAPH - 0xC195: 0x7FD2, //CJK UNIFIED IDEOGRAPH - 0xC196: 0x7FD3, //CJK UNIFIED IDEOGRAPH - 0xC197: 0x7FD6, //CJK UNIFIED IDEOGRAPH - 0xC198: 0x7FD7, //CJK UNIFIED IDEOGRAPH - 0xC199: 0x7FD9, //CJK UNIFIED IDEOGRAPH - 0xC19A: 0x7FDA, //CJK UNIFIED IDEOGRAPH - 0xC19B: 0x7FDB, //CJK UNIFIED IDEOGRAPH - 0xC19C: 0x7FDC, //CJK UNIFIED IDEOGRAPH - 0xC19D: 0x7FDD, //CJK UNIFIED IDEOGRAPH - 0xC19E: 0x7FDE, //CJK UNIFIED IDEOGRAPH - 0xC19F: 0x7FE2, //CJK UNIFIED IDEOGRAPH - 0xC1A0: 0x7FE3, //CJK UNIFIED IDEOGRAPH - 0xC1A1: 0x75E2, //CJK UNIFIED IDEOGRAPH - 0xC1A2: 0x7ACB, //CJK UNIFIED IDEOGRAPH - 0xC1A3: 0x7C92, //CJK UNIFIED IDEOGRAPH - 0xC1A4: 0x6CA5, //CJK UNIFIED IDEOGRAPH - 0xC1A5: 0x96B6, //CJK UNIFIED IDEOGRAPH - 0xC1A6: 0x529B, //CJK UNIFIED IDEOGRAPH - 0xC1A7: 0x7483, //CJK UNIFIED IDEOGRAPH - 0xC1A8: 0x54E9, //CJK UNIFIED IDEOGRAPH - 0xC1A9: 0x4FE9, //CJK UNIFIED IDEOGRAPH - 0xC1AA: 0x8054, //CJK UNIFIED IDEOGRAPH - 0xC1AB: 0x83B2, //CJK UNIFIED IDEOGRAPH - 0xC1AC: 0x8FDE, //CJK UNIFIED IDEOGRAPH - 0xC1AD: 0x9570, //CJK UNIFIED IDEOGRAPH - 0xC1AE: 0x5EC9, //CJK UNIFIED IDEOGRAPH - 0xC1AF: 0x601C, //CJK UNIFIED IDEOGRAPH - 0xC1B0: 0x6D9F, //CJK UNIFIED IDEOGRAPH - 0xC1B1: 0x5E18, //CJK UNIFIED IDEOGRAPH - 0xC1B2: 0x655B, //CJK UNIFIED IDEOGRAPH - 0xC1B3: 0x8138, //CJK UNIFIED IDEOGRAPH - 0xC1B4: 0x94FE, //CJK UNIFIED IDEOGRAPH - 0xC1B5: 0x604B, //CJK UNIFIED IDEOGRAPH - 0xC1B6: 0x70BC, //CJK UNIFIED IDEOGRAPH - 0xC1B7: 0x7EC3, //CJK UNIFIED IDEOGRAPH - 0xC1B8: 0x7CAE, //CJK UNIFIED IDEOGRAPH - 0xC1B9: 0x51C9, //CJK UNIFIED IDEOGRAPH - 0xC1BA: 0x6881, //CJK UNIFIED IDEOGRAPH - 0xC1BB: 0x7CB1, //CJK UNIFIED IDEOGRAPH - 0xC1BC: 0x826F, //CJK UNIFIED IDEOGRAPH - 0xC1BD: 0x4E24, //CJK UNIFIED IDEOGRAPH - 0xC1BE: 0x8F86, //CJK UNIFIED IDEOGRAPH - 0xC1BF: 0x91CF, //CJK UNIFIED IDEOGRAPH - 0xC1C0: 0x667E, //CJK UNIFIED IDEOGRAPH - 0xC1C1: 0x4EAE, //CJK UNIFIED IDEOGRAPH - 0xC1C2: 0x8C05, //CJK UNIFIED IDEOGRAPH - 0xC1C3: 0x64A9, //CJK UNIFIED IDEOGRAPH - 0xC1C4: 0x804A, //CJK UNIFIED IDEOGRAPH - 0xC1C5: 0x50DA, //CJK UNIFIED IDEOGRAPH - 0xC1C6: 0x7597, //CJK UNIFIED IDEOGRAPH - 0xC1C7: 0x71CE, //CJK UNIFIED IDEOGRAPH - 0xC1C8: 0x5BE5, //CJK UNIFIED IDEOGRAPH - 0xC1C9: 0x8FBD, //CJK UNIFIED IDEOGRAPH - 0xC1CA: 0x6F66, //CJK UNIFIED IDEOGRAPH - 0xC1CB: 0x4E86, //CJK UNIFIED IDEOGRAPH - 0xC1CC: 0x6482, //CJK UNIFIED IDEOGRAPH - 0xC1CD: 0x9563, //CJK UNIFIED IDEOGRAPH - 0xC1CE: 0x5ED6, //CJK UNIFIED IDEOGRAPH - 0xC1CF: 0x6599, //CJK UNIFIED IDEOGRAPH - 0xC1D0: 0x5217, //CJK UNIFIED IDEOGRAPH - 0xC1D1: 0x88C2, //CJK UNIFIED IDEOGRAPH - 0xC1D2: 0x70C8, //CJK UNIFIED IDEOGRAPH - 0xC1D3: 0x52A3, //CJK UNIFIED IDEOGRAPH - 0xC1D4: 0x730E, //CJK UNIFIED IDEOGRAPH - 0xC1D5: 0x7433, //CJK UNIFIED IDEOGRAPH - 0xC1D6: 0x6797, //CJK UNIFIED IDEOGRAPH - 0xC1D7: 0x78F7, //CJK UNIFIED IDEOGRAPH - 0xC1D8: 0x9716, //CJK UNIFIED IDEOGRAPH - 0xC1D9: 0x4E34, //CJK UNIFIED IDEOGRAPH - 0xC1DA: 0x90BB, //CJK UNIFIED IDEOGRAPH - 0xC1DB: 0x9CDE, //CJK UNIFIED IDEOGRAPH - 0xC1DC: 0x6DCB, //CJK UNIFIED IDEOGRAPH - 0xC1DD: 0x51DB, //CJK UNIFIED IDEOGRAPH - 0xC1DE: 0x8D41, //CJK UNIFIED IDEOGRAPH - 0xC1DF: 0x541D, //CJK UNIFIED IDEOGRAPH - 0xC1E0: 0x62CE, //CJK UNIFIED IDEOGRAPH - 0xC1E1: 0x73B2, //CJK UNIFIED IDEOGRAPH - 0xC1E2: 0x83F1, //CJK UNIFIED IDEOGRAPH - 0xC1E3: 0x96F6, //CJK UNIFIED IDEOGRAPH - 0xC1E4: 0x9F84, //CJK UNIFIED IDEOGRAPH - 0xC1E5: 0x94C3, //CJK UNIFIED IDEOGRAPH - 0xC1E6: 0x4F36, //CJK UNIFIED IDEOGRAPH - 0xC1E7: 0x7F9A, //CJK UNIFIED IDEOGRAPH - 0xC1E8: 0x51CC, //CJK UNIFIED IDEOGRAPH - 0xC1E9: 0x7075, //CJK UNIFIED IDEOGRAPH - 0xC1EA: 0x9675, //CJK UNIFIED IDEOGRAPH - 0xC1EB: 0x5CAD, //CJK UNIFIED IDEOGRAPH - 0xC1EC: 0x9886, //CJK UNIFIED IDEOGRAPH - 0xC1ED: 0x53E6, //CJK UNIFIED IDEOGRAPH - 0xC1EE: 0x4EE4, //CJK UNIFIED IDEOGRAPH - 0xC1EF: 0x6E9C, //CJK UNIFIED IDEOGRAPH - 0xC1F0: 0x7409, //CJK UNIFIED IDEOGRAPH - 0xC1F1: 0x69B4, //CJK UNIFIED IDEOGRAPH - 0xC1F2: 0x786B, //CJK UNIFIED IDEOGRAPH - 0xC1F3: 0x998F, //CJK UNIFIED IDEOGRAPH - 0xC1F4: 0x7559, //CJK UNIFIED IDEOGRAPH - 0xC1F5: 0x5218, //CJK UNIFIED IDEOGRAPH - 0xC1F6: 0x7624, //CJK UNIFIED IDEOGRAPH - 0xC1F7: 0x6D41, //CJK UNIFIED IDEOGRAPH - 0xC1F8: 0x67F3, //CJK UNIFIED IDEOGRAPH - 0xC1F9: 0x516D, //CJK UNIFIED IDEOGRAPH - 0xC1FA: 0x9F99, //CJK UNIFIED IDEOGRAPH - 0xC1FB: 0x804B, //CJK UNIFIED IDEOGRAPH - 0xC1FC: 0x5499, //CJK UNIFIED IDEOGRAPH - 0xC1FD: 0x7B3C, //CJK UNIFIED IDEOGRAPH - 0xC1FE: 0x7ABF, //CJK UNIFIED IDEOGRAPH - 0xC240: 0x7FE4, //CJK UNIFIED IDEOGRAPH - 0xC241: 0x7FE7, //CJK UNIFIED IDEOGRAPH - 0xC242: 0x7FE8, //CJK UNIFIED IDEOGRAPH - 0xC243: 0x7FEA, //CJK UNIFIED IDEOGRAPH - 0xC244: 0x7FEB, //CJK UNIFIED IDEOGRAPH - 0xC245: 0x7FEC, //CJK UNIFIED IDEOGRAPH - 0xC246: 0x7FED, //CJK UNIFIED IDEOGRAPH - 0xC247: 0x7FEF, //CJK UNIFIED IDEOGRAPH - 0xC248: 0x7FF2, //CJK UNIFIED IDEOGRAPH - 0xC249: 0x7FF4, //CJK UNIFIED IDEOGRAPH - 0xC24A: 0x7FF5, //CJK UNIFIED IDEOGRAPH - 0xC24B: 0x7FF6, //CJK UNIFIED IDEOGRAPH - 0xC24C: 0x7FF7, //CJK UNIFIED IDEOGRAPH - 0xC24D: 0x7FF8, //CJK UNIFIED IDEOGRAPH - 0xC24E: 0x7FF9, //CJK UNIFIED IDEOGRAPH - 0xC24F: 0x7FFA, //CJK UNIFIED IDEOGRAPH - 0xC250: 0x7FFD, //CJK UNIFIED IDEOGRAPH - 0xC251: 0x7FFE, //CJK UNIFIED IDEOGRAPH - 0xC252: 0x7FFF, //CJK UNIFIED IDEOGRAPH - 0xC253: 0x8002, //CJK UNIFIED IDEOGRAPH - 0xC254: 0x8007, //CJK UNIFIED IDEOGRAPH - 0xC255: 0x8008, //CJK UNIFIED IDEOGRAPH - 0xC256: 0x8009, //CJK UNIFIED IDEOGRAPH - 0xC257: 0x800A, //CJK UNIFIED IDEOGRAPH - 0xC258: 0x800E, //CJK UNIFIED IDEOGRAPH - 0xC259: 0x800F, //CJK UNIFIED IDEOGRAPH - 0xC25A: 0x8011, //CJK UNIFIED IDEOGRAPH - 0xC25B: 0x8013, //CJK UNIFIED IDEOGRAPH - 0xC25C: 0x801A, //CJK UNIFIED IDEOGRAPH - 0xC25D: 0x801B, //CJK UNIFIED IDEOGRAPH - 0xC25E: 0x801D, //CJK UNIFIED IDEOGRAPH - 0xC25F: 0x801E, //CJK UNIFIED IDEOGRAPH - 0xC260: 0x801F, //CJK UNIFIED IDEOGRAPH - 0xC261: 0x8021, //CJK UNIFIED IDEOGRAPH - 0xC262: 0x8023, //CJK UNIFIED IDEOGRAPH - 0xC263: 0x8024, //CJK UNIFIED IDEOGRAPH - 0xC264: 0x802B, //CJK UNIFIED IDEOGRAPH - 0xC265: 0x802C, //CJK UNIFIED IDEOGRAPH - 0xC266: 0x802D, //CJK UNIFIED IDEOGRAPH - 0xC267: 0x802E, //CJK UNIFIED IDEOGRAPH - 0xC268: 0x802F, //CJK UNIFIED IDEOGRAPH - 0xC269: 0x8030, //CJK UNIFIED IDEOGRAPH - 0xC26A: 0x8032, //CJK UNIFIED IDEOGRAPH - 0xC26B: 0x8034, //CJK UNIFIED IDEOGRAPH - 0xC26C: 0x8039, //CJK UNIFIED IDEOGRAPH - 0xC26D: 0x803A, //CJK UNIFIED IDEOGRAPH - 0xC26E: 0x803C, //CJK UNIFIED IDEOGRAPH - 0xC26F: 0x803E, //CJK UNIFIED IDEOGRAPH - 0xC270: 0x8040, //CJK UNIFIED IDEOGRAPH - 0xC271: 0x8041, //CJK UNIFIED IDEOGRAPH - 0xC272: 0x8044, //CJK UNIFIED IDEOGRAPH - 0xC273: 0x8045, //CJK UNIFIED IDEOGRAPH - 0xC274: 0x8047, //CJK UNIFIED IDEOGRAPH - 0xC275: 0x8048, //CJK UNIFIED IDEOGRAPH - 0xC276: 0x8049, //CJK UNIFIED IDEOGRAPH - 0xC277: 0x804E, //CJK UNIFIED IDEOGRAPH - 0xC278: 0x804F, //CJK UNIFIED IDEOGRAPH - 0xC279: 0x8050, //CJK UNIFIED IDEOGRAPH - 0xC27A: 0x8051, //CJK UNIFIED IDEOGRAPH - 0xC27B: 0x8053, //CJK UNIFIED IDEOGRAPH - 0xC27C: 0x8055, //CJK UNIFIED IDEOGRAPH - 0xC27D: 0x8056, //CJK UNIFIED IDEOGRAPH - 0xC27E: 0x8057, //CJK UNIFIED IDEOGRAPH - 0xC280: 0x8059, //CJK UNIFIED IDEOGRAPH - 0xC281: 0x805B, //CJK UNIFIED IDEOGRAPH - 0xC282: 0x805C, //CJK UNIFIED IDEOGRAPH - 0xC283: 0x805D, //CJK UNIFIED IDEOGRAPH - 0xC284: 0x805E, //CJK UNIFIED IDEOGRAPH - 0xC285: 0x805F, //CJK UNIFIED IDEOGRAPH - 0xC286: 0x8060, //CJK UNIFIED IDEOGRAPH - 0xC287: 0x8061, //CJK UNIFIED IDEOGRAPH - 0xC288: 0x8062, //CJK UNIFIED IDEOGRAPH - 0xC289: 0x8063, //CJK UNIFIED IDEOGRAPH - 0xC28A: 0x8064, //CJK UNIFIED IDEOGRAPH - 0xC28B: 0x8065, //CJK UNIFIED IDEOGRAPH - 0xC28C: 0x8066, //CJK UNIFIED IDEOGRAPH - 0xC28D: 0x8067, //CJK UNIFIED IDEOGRAPH - 0xC28E: 0x8068, //CJK UNIFIED IDEOGRAPH - 0xC28F: 0x806B, //CJK UNIFIED IDEOGRAPH - 0xC290: 0x806C, //CJK UNIFIED IDEOGRAPH - 0xC291: 0x806D, //CJK UNIFIED IDEOGRAPH - 0xC292: 0x806E, //CJK UNIFIED IDEOGRAPH - 0xC293: 0x806F, //CJK UNIFIED IDEOGRAPH - 0xC294: 0x8070, //CJK UNIFIED IDEOGRAPH - 0xC295: 0x8072, //CJK UNIFIED IDEOGRAPH - 0xC296: 0x8073, //CJK UNIFIED IDEOGRAPH - 0xC297: 0x8074, //CJK UNIFIED IDEOGRAPH - 0xC298: 0x8075, //CJK UNIFIED IDEOGRAPH - 0xC299: 0x8076, //CJK UNIFIED IDEOGRAPH - 0xC29A: 0x8077, //CJK UNIFIED IDEOGRAPH - 0xC29B: 0x8078, //CJK UNIFIED IDEOGRAPH - 0xC29C: 0x8079, //CJK UNIFIED IDEOGRAPH - 0xC29D: 0x807A, //CJK UNIFIED IDEOGRAPH - 0xC29E: 0x807B, //CJK UNIFIED IDEOGRAPH - 0xC29F: 0x807C, //CJK UNIFIED IDEOGRAPH - 0xC2A0: 0x807D, //CJK UNIFIED IDEOGRAPH - 0xC2A1: 0x9686, //CJK UNIFIED IDEOGRAPH - 0xC2A2: 0x5784, //CJK UNIFIED IDEOGRAPH - 0xC2A3: 0x62E2, //CJK UNIFIED IDEOGRAPH - 0xC2A4: 0x9647, //CJK UNIFIED IDEOGRAPH - 0xC2A5: 0x697C, //CJK UNIFIED IDEOGRAPH - 0xC2A6: 0x5A04, //CJK UNIFIED IDEOGRAPH - 0xC2A7: 0x6402, //CJK UNIFIED IDEOGRAPH - 0xC2A8: 0x7BD3, //CJK UNIFIED IDEOGRAPH - 0xC2A9: 0x6F0F, //CJK UNIFIED IDEOGRAPH - 0xC2AA: 0x964B, //CJK UNIFIED IDEOGRAPH - 0xC2AB: 0x82A6, //CJK UNIFIED IDEOGRAPH - 0xC2AC: 0x5362, //CJK UNIFIED IDEOGRAPH - 0xC2AD: 0x9885, //CJK UNIFIED IDEOGRAPH - 0xC2AE: 0x5E90, //CJK UNIFIED IDEOGRAPH - 0xC2AF: 0x7089, //CJK UNIFIED IDEOGRAPH - 0xC2B0: 0x63B3, //CJK UNIFIED IDEOGRAPH - 0xC2B1: 0x5364, //CJK UNIFIED IDEOGRAPH - 0xC2B2: 0x864F, //CJK UNIFIED IDEOGRAPH - 0xC2B3: 0x9C81, //CJK UNIFIED IDEOGRAPH - 0xC2B4: 0x9E93, //CJK UNIFIED IDEOGRAPH - 0xC2B5: 0x788C, //CJK UNIFIED IDEOGRAPH - 0xC2B6: 0x9732, //CJK UNIFIED IDEOGRAPH - 0xC2B7: 0x8DEF, //CJK UNIFIED IDEOGRAPH - 0xC2B8: 0x8D42, //CJK UNIFIED IDEOGRAPH - 0xC2B9: 0x9E7F, //CJK UNIFIED IDEOGRAPH - 0xC2BA: 0x6F5E, //CJK UNIFIED IDEOGRAPH - 0xC2BB: 0x7984, //CJK UNIFIED IDEOGRAPH - 0xC2BC: 0x5F55, //CJK UNIFIED IDEOGRAPH - 0xC2BD: 0x9646, //CJK UNIFIED IDEOGRAPH - 0xC2BE: 0x622E, //CJK UNIFIED IDEOGRAPH - 0xC2BF: 0x9A74, //CJK UNIFIED IDEOGRAPH - 0xC2C0: 0x5415, //CJK UNIFIED IDEOGRAPH - 0xC2C1: 0x94DD, //CJK UNIFIED IDEOGRAPH - 0xC2C2: 0x4FA3, //CJK UNIFIED IDEOGRAPH - 0xC2C3: 0x65C5, //CJK UNIFIED IDEOGRAPH - 0xC2C4: 0x5C65, //CJK UNIFIED IDEOGRAPH - 0xC2C5: 0x5C61, //CJK UNIFIED IDEOGRAPH - 0xC2C6: 0x7F15, //CJK UNIFIED IDEOGRAPH - 0xC2C7: 0x8651, //CJK UNIFIED IDEOGRAPH - 0xC2C8: 0x6C2F, //CJK UNIFIED IDEOGRAPH - 0xC2C9: 0x5F8B, //CJK UNIFIED IDEOGRAPH - 0xC2CA: 0x7387, //CJK UNIFIED IDEOGRAPH - 0xC2CB: 0x6EE4, //CJK UNIFIED IDEOGRAPH - 0xC2CC: 0x7EFF, //CJK UNIFIED IDEOGRAPH - 0xC2CD: 0x5CE6, //CJK UNIFIED IDEOGRAPH - 0xC2CE: 0x631B, //CJK UNIFIED IDEOGRAPH - 0xC2CF: 0x5B6A, //CJK UNIFIED IDEOGRAPH - 0xC2D0: 0x6EE6, //CJK UNIFIED IDEOGRAPH - 0xC2D1: 0x5375, //CJK UNIFIED IDEOGRAPH - 0xC2D2: 0x4E71, //CJK UNIFIED IDEOGRAPH - 0xC2D3: 0x63A0, //CJK UNIFIED IDEOGRAPH - 0xC2D4: 0x7565, //CJK UNIFIED IDEOGRAPH - 0xC2D5: 0x62A1, //CJK UNIFIED IDEOGRAPH - 0xC2D6: 0x8F6E, //CJK UNIFIED IDEOGRAPH - 0xC2D7: 0x4F26, //CJK UNIFIED IDEOGRAPH - 0xC2D8: 0x4ED1, //CJK UNIFIED IDEOGRAPH - 0xC2D9: 0x6CA6, //CJK UNIFIED IDEOGRAPH - 0xC2DA: 0x7EB6, //CJK UNIFIED IDEOGRAPH - 0xC2DB: 0x8BBA, //CJK UNIFIED IDEOGRAPH - 0xC2DC: 0x841D, //CJK UNIFIED IDEOGRAPH - 0xC2DD: 0x87BA, //CJK UNIFIED IDEOGRAPH - 0xC2DE: 0x7F57, //CJK UNIFIED IDEOGRAPH - 0xC2DF: 0x903B, //CJK UNIFIED IDEOGRAPH - 0xC2E0: 0x9523, //CJK UNIFIED IDEOGRAPH - 0xC2E1: 0x7BA9, //CJK UNIFIED IDEOGRAPH - 0xC2E2: 0x9AA1, //CJK UNIFIED IDEOGRAPH - 0xC2E3: 0x88F8, //CJK UNIFIED IDEOGRAPH - 0xC2E4: 0x843D, //CJK UNIFIED IDEOGRAPH - 0xC2E5: 0x6D1B, //CJK UNIFIED IDEOGRAPH - 0xC2E6: 0x9A86, //CJK UNIFIED IDEOGRAPH - 0xC2E7: 0x7EDC, //CJK UNIFIED IDEOGRAPH - 0xC2E8: 0x5988, //CJK UNIFIED IDEOGRAPH - 0xC2E9: 0x9EBB, //CJK UNIFIED IDEOGRAPH - 0xC2EA: 0x739B, //CJK UNIFIED IDEOGRAPH - 0xC2EB: 0x7801, //CJK UNIFIED IDEOGRAPH - 0xC2EC: 0x8682, //CJK UNIFIED IDEOGRAPH - 0xC2ED: 0x9A6C, //CJK UNIFIED IDEOGRAPH - 0xC2EE: 0x9A82, //CJK UNIFIED IDEOGRAPH - 0xC2EF: 0x561B, //CJK UNIFIED IDEOGRAPH - 0xC2F0: 0x5417, //CJK UNIFIED IDEOGRAPH - 0xC2F1: 0x57CB, //CJK UNIFIED IDEOGRAPH - 0xC2F2: 0x4E70, //CJK UNIFIED IDEOGRAPH - 0xC2F3: 0x9EA6, //CJK UNIFIED IDEOGRAPH - 0xC2F4: 0x5356, //CJK UNIFIED IDEOGRAPH - 0xC2F5: 0x8FC8, //CJK UNIFIED IDEOGRAPH - 0xC2F6: 0x8109, //CJK UNIFIED IDEOGRAPH - 0xC2F7: 0x7792, //CJK UNIFIED IDEOGRAPH - 0xC2F8: 0x9992, //CJK UNIFIED IDEOGRAPH - 0xC2F9: 0x86EE, //CJK UNIFIED IDEOGRAPH - 0xC2FA: 0x6EE1, //CJK UNIFIED IDEOGRAPH - 0xC2FB: 0x8513, //CJK UNIFIED IDEOGRAPH - 0xC2FC: 0x66FC, //CJK UNIFIED IDEOGRAPH - 0xC2FD: 0x6162, //CJK UNIFIED IDEOGRAPH - 0xC2FE: 0x6F2B, //CJK UNIFIED IDEOGRAPH - 0xC340: 0x807E, //CJK UNIFIED IDEOGRAPH - 0xC341: 0x8081, //CJK UNIFIED IDEOGRAPH - 0xC342: 0x8082, //CJK UNIFIED IDEOGRAPH - 0xC343: 0x8085, //CJK UNIFIED IDEOGRAPH - 0xC344: 0x8088, //CJK UNIFIED IDEOGRAPH - 0xC345: 0x808A, //CJK UNIFIED IDEOGRAPH - 0xC346: 0x808D, //CJK UNIFIED IDEOGRAPH - 0xC347: 0x808E, //CJK UNIFIED IDEOGRAPH - 0xC348: 0x808F, //CJK UNIFIED IDEOGRAPH - 0xC349: 0x8090, //CJK UNIFIED IDEOGRAPH - 0xC34A: 0x8091, //CJK UNIFIED IDEOGRAPH - 0xC34B: 0x8092, //CJK UNIFIED IDEOGRAPH - 0xC34C: 0x8094, //CJK UNIFIED IDEOGRAPH - 0xC34D: 0x8095, //CJK UNIFIED IDEOGRAPH - 0xC34E: 0x8097, //CJK UNIFIED IDEOGRAPH - 0xC34F: 0x8099, //CJK UNIFIED IDEOGRAPH - 0xC350: 0x809E, //CJK UNIFIED IDEOGRAPH - 0xC351: 0x80A3, //CJK UNIFIED IDEOGRAPH - 0xC352: 0x80A6, //CJK UNIFIED IDEOGRAPH - 0xC353: 0x80A7, //CJK UNIFIED IDEOGRAPH - 0xC354: 0x80A8, //CJK UNIFIED IDEOGRAPH - 0xC355: 0x80AC, //CJK UNIFIED IDEOGRAPH - 0xC356: 0x80B0, //CJK UNIFIED IDEOGRAPH - 0xC357: 0x80B3, //CJK UNIFIED IDEOGRAPH - 0xC358: 0x80B5, //CJK UNIFIED IDEOGRAPH - 0xC359: 0x80B6, //CJK UNIFIED IDEOGRAPH - 0xC35A: 0x80B8, //CJK UNIFIED IDEOGRAPH - 0xC35B: 0x80B9, //CJK UNIFIED IDEOGRAPH - 0xC35C: 0x80BB, //CJK UNIFIED IDEOGRAPH - 0xC35D: 0x80C5, //CJK UNIFIED IDEOGRAPH - 0xC35E: 0x80C7, //CJK UNIFIED IDEOGRAPH - 0xC35F: 0x80C8, //CJK UNIFIED IDEOGRAPH - 0xC360: 0x80C9, //CJK UNIFIED IDEOGRAPH - 0xC361: 0x80CA, //CJK UNIFIED IDEOGRAPH - 0xC362: 0x80CB, //CJK UNIFIED IDEOGRAPH - 0xC363: 0x80CF, //CJK UNIFIED IDEOGRAPH - 0xC364: 0x80D0, //CJK UNIFIED IDEOGRAPH - 0xC365: 0x80D1, //CJK UNIFIED IDEOGRAPH - 0xC366: 0x80D2, //CJK UNIFIED IDEOGRAPH - 0xC367: 0x80D3, //CJK UNIFIED IDEOGRAPH - 0xC368: 0x80D4, //CJK UNIFIED IDEOGRAPH - 0xC369: 0x80D5, //CJK UNIFIED IDEOGRAPH - 0xC36A: 0x80D8, //CJK UNIFIED IDEOGRAPH - 0xC36B: 0x80DF, //CJK UNIFIED IDEOGRAPH - 0xC36C: 0x80E0, //CJK UNIFIED IDEOGRAPH - 0xC36D: 0x80E2, //CJK UNIFIED IDEOGRAPH - 0xC36E: 0x80E3, //CJK UNIFIED IDEOGRAPH - 0xC36F: 0x80E6, //CJK UNIFIED IDEOGRAPH - 0xC370: 0x80EE, //CJK UNIFIED IDEOGRAPH - 0xC371: 0x80F5, //CJK UNIFIED IDEOGRAPH - 0xC372: 0x80F7, //CJK UNIFIED IDEOGRAPH - 0xC373: 0x80F9, //CJK UNIFIED IDEOGRAPH - 0xC374: 0x80FB, //CJK UNIFIED IDEOGRAPH - 0xC375: 0x80FE, //CJK UNIFIED IDEOGRAPH - 0xC376: 0x80FF, //CJK UNIFIED IDEOGRAPH - 0xC377: 0x8100, //CJK UNIFIED IDEOGRAPH - 0xC378: 0x8101, //CJK UNIFIED IDEOGRAPH - 0xC379: 0x8103, //CJK UNIFIED IDEOGRAPH - 0xC37A: 0x8104, //CJK UNIFIED IDEOGRAPH - 0xC37B: 0x8105, //CJK UNIFIED IDEOGRAPH - 0xC37C: 0x8107, //CJK UNIFIED IDEOGRAPH - 0xC37D: 0x8108, //CJK UNIFIED IDEOGRAPH - 0xC37E: 0x810B, //CJK UNIFIED IDEOGRAPH - 0xC380: 0x810C, //CJK UNIFIED IDEOGRAPH - 0xC381: 0x8115, //CJK UNIFIED IDEOGRAPH - 0xC382: 0x8117, //CJK UNIFIED IDEOGRAPH - 0xC383: 0x8119, //CJK UNIFIED IDEOGRAPH - 0xC384: 0x811B, //CJK UNIFIED IDEOGRAPH - 0xC385: 0x811C, //CJK UNIFIED IDEOGRAPH - 0xC386: 0x811D, //CJK UNIFIED IDEOGRAPH - 0xC387: 0x811F, //CJK UNIFIED IDEOGRAPH - 0xC388: 0x8120, //CJK UNIFIED IDEOGRAPH - 0xC389: 0x8121, //CJK UNIFIED IDEOGRAPH - 0xC38A: 0x8122, //CJK UNIFIED IDEOGRAPH - 0xC38B: 0x8123, //CJK UNIFIED IDEOGRAPH - 0xC38C: 0x8124, //CJK UNIFIED IDEOGRAPH - 0xC38D: 0x8125, //CJK UNIFIED IDEOGRAPH - 0xC38E: 0x8126, //CJK UNIFIED IDEOGRAPH - 0xC38F: 0x8127, //CJK UNIFIED IDEOGRAPH - 0xC390: 0x8128, //CJK UNIFIED IDEOGRAPH - 0xC391: 0x8129, //CJK UNIFIED IDEOGRAPH - 0xC392: 0x812A, //CJK UNIFIED IDEOGRAPH - 0xC393: 0x812B, //CJK UNIFIED IDEOGRAPH - 0xC394: 0x812D, //CJK UNIFIED IDEOGRAPH - 0xC395: 0x812E, //CJK UNIFIED IDEOGRAPH - 0xC396: 0x8130, //CJK UNIFIED IDEOGRAPH - 0xC397: 0x8133, //CJK UNIFIED IDEOGRAPH - 0xC398: 0x8134, //CJK UNIFIED IDEOGRAPH - 0xC399: 0x8135, //CJK UNIFIED IDEOGRAPH - 0xC39A: 0x8137, //CJK UNIFIED IDEOGRAPH - 0xC39B: 0x8139, //CJK UNIFIED IDEOGRAPH - 0xC39C: 0x813A, //CJK UNIFIED IDEOGRAPH - 0xC39D: 0x813B, //CJK UNIFIED IDEOGRAPH - 0xC39E: 0x813C, //CJK UNIFIED IDEOGRAPH - 0xC39F: 0x813D, //CJK UNIFIED IDEOGRAPH - 0xC3A0: 0x813F, //CJK UNIFIED IDEOGRAPH - 0xC3A1: 0x8C29, //CJK UNIFIED IDEOGRAPH - 0xC3A2: 0x8292, //CJK UNIFIED IDEOGRAPH - 0xC3A3: 0x832B, //CJK UNIFIED IDEOGRAPH - 0xC3A4: 0x76F2, //CJK UNIFIED IDEOGRAPH - 0xC3A5: 0x6C13, //CJK UNIFIED IDEOGRAPH - 0xC3A6: 0x5FD9, //CJK UNIFIED IDEOGRAPH - 0xC3A7: 0x83BD, //CJK UNIFIED IDEOGRAPH - 0xC3A8: 0x732B, //CJK UNIFIED IDEOGRAPH - 0xC3A9: 0x8305, //CJK UNIFIED IDEOGRAPH - 0xC3AA: 0x951A, //CJK UNIFIED IDEOGRAPH - 0xC3AB: 0x6BDB, //CJK UNIFIED IDEOGRAPH - 0xC3AC: 0x77DB, //CJK UNIFIED IDEOGRAPH - 0xC3AD: 0x94C6, //CJK UNIFIED IDEOGRAPH - 0xC3AE: 0x536F, //CJK UNIFIED IDEOGRAPH - 0xC3AF: 0x8302, //CJK UNIFIED IDEOGRAPH - 0xC3B0: 0x5192, //CJK UNIFIED IDEOGRAPH - 0xC3B1: 0x5E3D, //CJK UNIFIED IDEOGRAPH - 0xC3B2: 0x8C8C, //CJK UNIFIED IDEOGRAPH - 0xC3B3: 0x8D38, //CJK UNIFIED IDEOGRAPH - 0xC3B4: 0x4E48, //CJK UNIFIED IDEOGRAPH - 0xC3B5: 0x73AB, //CJK UNIFIED IDEOGRAPH - 0xC3B6: 0x679A, //CJK UNIFIED IDEOGRAPH - 0xC3B7: 0x6885, //CJK UNIFIED IDEOGRAPH - 0xC3B8: 0x9176, //CJK UNIFIED IDEOGRAPH - 0xC3B9: 0x9709, //CJK UNIFIED IDEOGRAPH - 0xC3BA: 0x7164, //CJK UNIFIED IDEOGRAPH - 0xC3BB: 0x6CA1, //CJK UNIFIED IDEOGRAPH - 0xC3BC: 0x7709, //CJK UNIFIED IDEOGRAPH - 0xC3BD: 0x5A92, //CJK UNIFIED IDEOGRAPH - 0xC3BE: 0x9541, //CJK UNIFIED IDEOGRAPH - 0xC3BF: 0x6BCF, //CJK UNIFIED IDEOGRAPH - 0xC3C0: 0x7F8E, //CJK UNIFIED IDEOGRAPH - 0xC3C1: 0x6627, //CJK UNIFIED IDEOGRAPH - 0xC3C2: 0x5BD0, //CJK UNIFIED IDEOGRAPH - 0xC3C3: 0x59B9, //CJK UNIFIED IDEOGRAPH - 0xC3C4: 0x5A9A, //CJK UNIFIED IDEOGRAPH - 0xC3C5: 0x95E8, //CJK UNIFIED IDEOGRAPH - 0xC3C6: 0x95F7, //CJK UNIFIED IDEOGRAPH - 0xC3C7: 0x4EEC, //CJK UNIFIED IDEOGRAPH - 0xC3C8: 0x840C, //CJK UNIFIED IDEOGRAPH - 0xC3C9: 0x8499, //CJK UNIFIED IDEOGRAPH - 0xC3CA: 0x6AAC, //CJK UNIFIED IDEOGRAPH - 0xC3CB: 0x76DF, //CJK UNIFIED IDEOGRAPH - 0xC3CC: 0x9530, //CJK UNIFIED IDEOGRAPH - 0xC3CD: 0x731B, //CJK UNIFIED IDEOGRAPH - 0xC3CE: 0x68A6, //CJK UNIFIED IDEOGRAPH - 0xC3CF: 0x5B5F, //CJK UNIFIED IDEOGRAPH - 0xC3D0: 0x772F, //CJK UNIFIED IDEOGRAPH - 0xC3D1: 0x919A, //CJK UNIFIED IDEOGRAPH - 0xC3D2: 0x9761, //CJK UNIFIED IDEOGRAPH - 0xC3D3: 0x7CDC, //CJK UNIFIED IDEOGRAPH - 0xC3D4: 0x8FF7, //CJK UNIFIED IDEOGRAPH - 0xC3D5: 0x8C1C, //CJK UNIFIED IDEOGRAPH - 0xC3D6: 0x5F25, //CJK UNIFIED IDEOGRAPH - 0xC3D7: 0x7C73, //CJK UNIFIED IDEOGRAPH - 0xC3D8: 0x79D8, //CJK UNIFIED IDEOGRAPH - 0xC3D9: 0x89C5, //CJK UNIFIED IDEOGRAPH - 0xC3DA: 0x6CCC, //CJK UNIFIED IDEOGRAPH - 0xC3DB: 0x871C, //CJK UNIFIED IDEOGRAPH - 0xC3DC: 0x5BC6, //CJK UNIFIED IDEOGRAPH - 0xC3DD: 0x5E42, //CJK UNIFIED IDEOGRAPH - 0xC3DE: 0x68C9, //CJK UNIFIED IDEOGRAPH - 0xC3DF: 0x7720, //CJK UNIFIED IDEOGRAPH - 0xC3E0: 0x7EF5, //CJK UNIFIED IDEOGRAPH - 0xC3E1: 0x5195, //CJK UNIFIED IDEOGRAPH - 0xC3E2: 0x514D, //CJK UNIFIED IDEOGRAPH - 0xC3E3: 0x52C9, //CJK UNIFIED IDEOGRAPH - 0xC3E4: 0x5A29, //CJK UNIFIED IDEOGRAPH - 0xC3E5: 0x7F05, //CJK UNIFIED IDEOGRAPH - 0xC3E6: 0x9762, //CJK UNIFIED IDEOGRAPH - 0xC3E7: 0x82D7, //CJK UNIFIED IDEOGRAPH - 0xC3E8: 0x63CF, //CJK UNIFIED IDEOGRAPH - 0xC3E9: 0x7784, //CJK UNIFIED IDEOGRAPH - 0xC3EA: 0x85D0, //CJK UNIFIED IDEOGRAPH - 0xC3EB: 0x79D2, //CJK UNIFIED IDEOGRAPH - 0xC3EC: 0x6E3A, //CJK UNIFIED IDEOGRAPH - 0xC3ED: 0x5E99, //CJK UNIFIED IDEOGRAPH - 0xC3EE: 0x5999, //CJK UNIFIED IDEOGRAPH - 0xC3EF: 0x8511, //CJK UNIFIED IDEOGRAPH - 0xC3F0: 0x706D, //CJK UNIFIED IDEOGRAPH - 0xC3F1: 0x6C11, //CJK UNIFIED IDEOGRAPH - 0xC3F2: 0x62BF, //CJK UNIFIED IDEOGRAPH - 0xC3F3: 0x76BF, //CJK UNIFIED IDEOGRAPH - 0xC3F4: 0x654F, //CJK UNIFIED IDEOGRAPH - 0xC3F5: 0x60AF, //CJK UNIFIED IDEOGRAPH - 0xC3F6: 0x95FD, //CJK UNIFIED IDEOGRAPH - 0xC3F7: 0x660E, //CJK UNIFIED IDEOGRAPH - 0xC3F8: 0x879F, //CJK UNIFIED IDEOGRAPH - 0xC3F9: 0x9E23, //CJK UNIFIED IDEOGRAPH - 0xC3FA: 0x94ED, //CJK UNIFIED IDEOGRAPH - 0xC3FB: 0x540D, //CJK UNIFIED IDEOGRAPH - 0xC3FC: 0x547D, //CJK UNIFIED IDEOGRAPH - 0xC3FD: 0x8C2C, //CJK UNIFIED IDEOGRAPH - 0xC3FE: 0x6478, //CJK UNIFIED IDEOGRAPH - 0xC440: 0x8140, //CJK UNIFIED IDEOGRAPH - 0xC441: 0x8141, //CJK UNIFIED IDEOGRAPH - 0xC442: 0x8142, //CJK UNIFIED IDEOGRAPH - 0xC443: 0x8143, //CJK UNIFIED IDEOGRAPH - 0xC444: 0x8144, //CJK UNIFIED IDEOGRAPH - 0xC445: 0x8145, //CJK UNIFIED IDEOGRAPH - 0xC446: 0x8147, //CJK UNIFIED IDEOGRAPH - 0xC447: 0x8149, //CJK UNIFIED IDEOGRAPH - 0xC448: 0x814D, //CJK UNIFIED IDEOGRAPH - 0xC449: 0x814E, //CJK UNIFIED IDEOGRAPH - 0xC44A: 0x814F, //CJK UNIFIED IDEOGRAPH - 0xC44B: 0x8152, //CJK UNIFIED IDEOGRAPH - 0xC44C: 0x8156, //CJK UNIFIED IDEOGRAPH - 0xC44D: 0x8157, //CJK UNIFIED IDEOGRAPH - 0xC44E: 0x8158, //CJK UNIFIED IDEOGRAPH - 0xC44F: 0x815B, //CJK UNIFIED IDEOGRAPH - 0xC450: 0x815C, //CJK UNIFIED IDEOGRAPH - 0xC451: 0x815D, //CJK UNIFIED IDEOGRAPH - 0xC452: 0x815E, //CJK UNIFIED IDEOGRAPH - 0xC453: 0x815F, //CJK UNIFIED IDEOGRAPH - 0xC454: 0x8161, //CJK UNIFIED IDEOGRAPH - 0xC455: 0x8162, //CJK UNIFIED IDEOGRAPH - 0xC456: 0x8163, //CJK UNIFIED IDEOGRAPH - 0xC457: 0x8164, //CJK UNIFIED IDEOGRAPH - 0xC458: 0x8166, //CJK UNIFIED IDEOGRAPH - 0xC459: 0x8168, //CJK UNIFIED IDEOGRAPH - 0xC45A: 0x816A, //CJK UNIFIED IDEOGRAPH - 0xC45B: 0x816B, //CJK UNIFIED IDEOGRAPH - 0xC45C: 0x816C, //CJK UNIFIED IDEOGRAPH - 0xC45D: 0x816F, //CJK UNIFIED IDEOGRAPH - 0xC45E: 0x8172, //CJK UNIFIED IDEOGRAPH - 0xC45F: 0x8173, //CJK UNIFIED IDEOGRAPH - 0xC460: 0x8175, //CJK UNIFIED IDEOGRAPH - 0xC461: 0x8176, //CJK UNIFIED IDEOGRAPH - 0xC462: 0x8177, //CJK UNIFIED IDEOGRAPH - 0xC463: 0x8178, //CJK UNIFIED IDEOGRAPH - 0xC464: 0x8181, //CJK UNIFIED IDEOGRAPH - 0xC465: 0x8183, //CJK UNIFIED IDEOGRAPH - 0xC466: 0x8184, //CJK UNIFIED IDEOGRAPH - 0xC467: 0x8185, //CJK UNIFIED IDEOGRAPH - 0xC468: 0x8186, //CJK UNIFIED IDEOGRAPH - 0xC469: 0x8187, //CJK UNIFIED IDEOGRAPH - 0xC46A: 0x8189, //CJK UNIFIED IDEOGRAPH - 0xC46B: 0x818B, //CJK UNIFIED IDEOGRAPH - 0xC46C: 0x818C, //CJK UNIFIED IDEOGRAPH - 0xC46D: 0x818D, //CJK UNIFIED IDEOGRAPH - 0xC46E: 0x818E, //CJK UNIFIED IDEOGRAPH - 0xC46F: 0x8190, //CJK UNIFIED IDEOGRAPH - 0xC470: 0x8192, //CJK UNIFIED IDEOGRAPH - 0xC471: 0x8193, //CJK UNIFIED IDEOGRAPH - 0xC472: 0x8194, //CJK UNIFIED IDEOGRAPH - 0xC473: 0x8195, //CJK UNIFIED IDEOGRAPH - 0xC474: 0x8196, //CJK UNIFIED IDEOGRAPH - 0xC475: 0x8197, //CJK UNIFIED IDEOGRAPH - 0xC476: 0x8199, //CJK UNIFIED IDEOGRAPH - 0xC477: 0x819A, //CJK UNIFIED IDEOGRAPH - 0xC478: 0x819E, //CJK UNIFIED IDEOGRAPH - 0xC479: 0x819F, //CJK UNIFIED IDEOGRAPH - 0xC47A: 0x81A0, //CJK UNIFIED IDEOGRAPH - 0xC47B: 0x81A1, //CJK UNIFIED IDEOGRAPH - 0xC47C: 0x81A2, //CJK UNIFIED IDEOGRAPH - 0xC47D: 0x81A4, //CJK UNIFIED IDEOGRAPH - 0xC47E: 0x81A5, //CJK UNIFIED IDEOGRAPH - 0xC480: 0x81A7, //CJK UNIFIED IDEOGRAPH - 0xC481: 0x81A9, //CJK UNIFIED IDEOGRAPH - 0xC482: 0x81AB, //CJK UNIFIED IDEOGRAPH - 0xC483: 0x81AC, //CJK UNIFIED IDEOGRAPH - 0xC484: 0x81AD, //CJK UNIFIED IDEOGRAPH - 0xC485: 0x81AE, //CJK UNIFIED IDEOGRAPH - 0xC486: 0x81AF, //CJK UNIFIED IDEOGRAPH - 0xC487: 0x81B0, //CJK UNIFIED IDEOGRAPH - 0xC488: 0x81B1, //CJK UNIFIED IDEOGRAPH - 0xC489: 0x81B2, //CJK UNIFIED IDEOGRAPH - 0xC48A: 0x81B4, //CJK UNIFIED IDEOGRAPH - 0xC48B: 0x81B5, //CJK UNIFIED IDEOGRAPH - 0xC48C: 0x81B6, //CJK UNIFIED IDEOGRAPH - 0xC48D: 0x81B7, //CJK UNIFIED IDEOGRAPH - 0xC48E: 0x81B8, //CJK UNIFIED IDEOGRAPH - 0xC48F: 0x81B9, //CJK UNIFIED IDEOGRAPH - 0xC490: 0x81BC, //CJK UNIFIED IDEOGRAPH - 0xC491: 0x81BD, //CJK UNIFIED IDEOGRAPH - 0xC492: 0x81BE, //CJK UNIFIED IDEOGRAPH - 0xC493: 0x81BF, //CJK UNIFIED IDEOGRAPH - 0xC494: 0x81C4, //CJK UNIFIED IDEOGRAPH - 0xC495: 0x81C5, //CJK UNIFIED IDEOGRAPH - 0xC496: 0x81C7, //CJK UNIFIED IDEOGRAPH - 0xC497: 0x81C8, //CJK UNIFIED IDEOGRAPH - 0xC498: 0x81C9, //CJK UNIFIED IDEOGRAPH - 0xC499: 0x81CB, //CJK UNIFIED IDEOGRAPH - 0xC49A: 0x81CD, //CJK UNIFIED IDEOGRAPH - 0xC49B: 0x81CE, //CJK UNIFIED IDEOGRAPH - 0xC49C: 0x81CF, //CJK UNIFIED IDEOGRAPH - 0xC49D: 0x81D0, //CJK UNIFIED IDEOGRAPH - 0xC49E: 0x81D1, //CJK UNIFIED IDEOGRAPH - 0xC49F: 0x81D2, //CJK UNIFIED IDEOGRAPH - 0xC4A0: 0x81D3, //CJK UNIFIED IDEOGRAPH - 0xC4A1: 0x6479, //CJK UNIFIED IDEOGRAPH - 0xC4A2: 0x8611, //CJK UNIFIED IDEOGRAPH - 0xC4A3: 0x6A21, //CJK UNIFIED IDEOGRAPH - 0xC4A4: 0x819C, //CJK UNIFIED IDEOGRAPH - 0xC4A5: 0x78E8, //CJK UNIFIED IDEOGRAPH - 0xC4A6: 0x6469, //CJK UNIFIED IDEOGRAPH - 0xC4A7: 0x9B54, //CJK UNIFIED IDEOGRAPH - 0xC4A8: 0x62B9, //CJK UNIFIED IDEOGRAPH - 0xC4A9: 0x672B, //CJK UNIFIED IDEOGRAPH - 0xC4AA: 0x83AB, //CJK UNIFIED IDEOGRAPH - 0xC4AB: 0x58A8, //CJK UNIFIED IDEOGRAPH - 0xC4AC: 0x9ED8, //CJK UNIFIED IDEOGRAPH - 0xC4AD: 0x6CAB, //CJK UNIFIED IDEOGRAPH - 0xC4AE: 0x6F20, //CJK UNIFIED IDEOGRAPH - 0xC4AF: 0x5BDE, //CJK UNIFIED IDEOGRAPH - 0xC4B0: 0x964C, //CJK UNIFIED IDEOGRAPH - 0xC4B1: 0x8C0B, //CJK UNIFIED IDEOGRAPH - 0xC4B2: 0x725F, //CJK UNIFIED IDEOGRAPH - 0xC4B3: 0x67D0, //CJK UNIFIED IDEOGRAPH - 0xC4B4: 0x62C7, //CJK UNIFIED IDEOGRAPH - 0xC4B5: 0x7261, //CJK UNIFIED IDEOGRAPH - 0xC4B6: 0x4EA9, //CJK UNIFIED IDEOGRAPH - 0xC4B7: 0x59C6, //CJK UNIFIED IDEOGRAPH - 0xC4B8: 0x6BCD, //CJK UNIFIED IDEOGRAPH - 0xC4B9: 0x5893, //CJK UNIFIED IDEOGRAPH - 0xC4BA: 0x66AE, //CJK UNIFIED IDEOGRAPH - 0xC4BB: 0x5E55, //CJK UNIFIED IDEOGRAPH - 0xC4BC: 0x52DF, //CJK UNIFIED IDEOGRAPH - 0xC4BD: 0x6155, //CJK UNIFIED IDEOGRAPH - 0xC4BE: 0x6728, //CJK UNIFIED IDEOGRAPH - 0xC4BF: 0x76EE, //CJK UNIFIED IDEOGRAPH - 0xC4C0: 0x7766, //CJK UNIFIED IDEOGRAPH - 0xC4C1: 0x7267, //CJK UNIFIED IDEOGRAPH - 0xC4C2: 0x7A46, //CJK UNIFIED IDEOGRAPH - 0xC4C3: 0x62FF, //CJK UNIFIED IDEOGRAPH - 0xC4C4: 0x54EA, //CJK UNIFIED IDEOGRAPH - 0xC4C5: 0x5450, //CJK UNIFIED IDEOGRAPH - 0xC4C6: 0x94A0, //CJK UNIFIED IDEOGRAPH - 0xC4C7: 0x90A3, //CJK UNIFIED IDEOGRAPH - 0xC4C8: 0x5A1C, //CJK UNIFIED IDEOGRAPH - 0xC4C9: 0x7EB3, //CJK UNIFIED IDEOGRAPH - 0xC4CA: 0x6C16, //CJK UNIFIED IDEOGRAPH - 0xC4CB: 0x4E43, //CJK UNIFIED IDEOGRAPH - 0xC4CC: 0x5976, //CJK UNIFIED IDEOGRAPH - 0xC4CD: 0x8010, //CJK UNIFIED IDEOGRAPH - 0xC4CE: 0x5948, //CJK UNIFIED IDEOGRAPH - 0xC4CF: 0x5357, //CJK UNIFIED IDEOGRAPH - 0xC4D0: 0x7537, //CJK UNIFIED IDEOGRAPH - 0xC4D1: 0x96BE, //CJK UNIFIED IDEOGRAPH - 0xC4D2: 0x56CA, //CJK UNIFIED IDEOGRAPH - 0xC4D3: 0x6320, //CJK UNIFIED IDEOGRAPH - 0xC4D4: 0x8111, //CJK UNIFIED IDEOGRAPH - 0xC4D5: 0x607C, //CJK UNIFIED IDEOGRAPH - 0xC4D6: 0x95F9, //CJK UNIFIED IDEOGRAPH - 0xC4D7: 0x6DD6, //CJK UNIFIED IDEOGRAPH - 0xC4D8: 0x5462, //CJK UNIFIED IDEOGRAPH - 0xC4D9: 0x9981, //CJK UNIFIED IDEOGRAPH - 0xC4DA: 0x5185, //CJK UNIFIED IDEOGRAPH - 0xC4DB: 0x5AE9, //CJK UNIFIED IDEOGRAPH - 0xC4DC: 0x80FD, //CJK UNIFIED IDEOGRAPH - 0xC4DD: 0x59AE, //CJK UNIFIED IDEOGRAPH - 0xC4DE: 0x9713, //CJK UNIFIED IDEOGRAPH - 0xC4DF: 0x502A, //CJK UNIFIED IDEOGRAPH - 0xC4E0: 0x6CE5, //CJK UNIFIED IDEOGRAPH - 0xC4E1: 0x5C3C, //CJK UNIFIED IDEOGRAPH - 0xC4E2: 0x62DF, //CJK UNIFIED IDEOGRAPH - 0xC4E3: 0x4F60, //CJK UNIFIED IDEOGRAPH - 0xC4E4: 0x533F, //CJK UNIFIED IDEOGRAPH - 0xC4E5: 0x817B, //CJK UNIFIED IDEOGRAPH - 0xC4E6: 0x9006, //CJK UNIFIED IDEOGRAPH - 0xC4E7: 0x6EBA, //CJK UNIFIED IDEOGRAPH - 0xC4E8: 0x852B, //CJK UNIFIED IDEOGRAPH - 0xC4E9: 0x62C8, //CJK UNIFIED IDEOGRAPH - 0xC4EA: 0x5E74, //CJK UNIFIED IDEOGRAPH - 0xC4EB: 0x78BE, //CJK UNIFIED IDEOGRAPH - 0xC4EC: 0x64B5, //CJK UNIFIED IDEOGRAPH - 0xC4ED: 0x637B, //CJK UNIFIED IDEOGRAPH - 0xC4EE: 0x5FF5, //CJK UNIFIED IDEOGRAPH - 0xC4EF: 0x5A18, //CJK UNIFIED IDEOGRAPH - 0xC4F0: 0x917F, //CJK UNIFIED IDEOGRAPH - 0xC4F1: 0x9E1F, //CJK UNIFIED IDEOGRAPH - 0xC4F2: 0x5C3F, //CJK UNIFIED IDEOGRAPH - 0xC4F3: 0x634F, //CJK UNIFIED IDEOGRAPH - 0xC4F4: 0x8042, //CJK UNIFIED IDEOGRAPH - 0xC4F5: 0x5B7D, //CJK UNIFIED IDEOGRAPH - 0xC4F6: 0x556E, //CJK UNIFIED IDEOGRAPH - 0xC4F7: 0x954A, //CJK UNIFIED IDEOGRAPH - 0xC4F8: 0x954D, //CJK UNIFIED IDEOGRAPH - 0xC4F9: 0x6D85, //CJK UNIFIED IDEOGRAPH - 0xC4FA: 0x60A8, //CJK UNIFIED IDEOGRAPH - 0xC4FB: 0x67E0, //CJK UNIFIED IDEOGRAPH - 0xC4FC: 0x72DE, //CJK UNIFIED IDEOGRAPH - 0xC4FD: 0x51DD, //CJK UNIFIED IDEOGRAPH - 0xC4FE: 0x5B81, //CJK UNIFIED IDEOGRAPH - 0xC540: 0x81D4, //CJK UNIFIED IDEOGRAPH - 0xC541: 0x81D5, //CJK UNIFIED IDEOGRAPH - 0xC542: 0x81D6, //CJK UNIFIED IDEOGRAPH - 0xC543: 0x81D7, //CJK UNIFIED IDEOGRAPH - 0xC544: 0x81D8, //CJK UNIFIED IDEOGRAPH - 0xC545: 0x81D9, //CJK UNIFIED IDEOGRAPH - 0xC546: 0x81DA, //CJK UNIFIED IDEOGRAPH - 0xC547: 0x81DB, //CJK UNIFIED IDEOGRAPH - 0xC548: 0x81DC, //CJK UNIFIED IDEOGRAPH - 0xC549: 0x81DD, //CJK UNIFIED IDEOGRAPH - 0xC54A: 0x81DE, //CJK UNIFIED IDEOGRAPH - 0xC54B: 0x81DF, //CJK UNIFIED IDEOGRAPH - 0xC54C: 0x81E0, //CJK UNIFIED IDEOGRAPH - 0xC54D: 0x81E1, //CJK UNIFIED IDEOGRAPH - 0xC54E: 0x81E2, //CJK UNIFIED IDEOGRAPH - 0xC54F: 0x81E4, //CJK UNIFIED IDEOGRAPH - 0xC550: 0x81E5, //CJK UNIFIED IDEOGRAPH - 0xC551: 0x81E6, //CJK UNIFIED IDEOGRAPH - 0xC552: 0x81E8, //CJK UNIFIED IDEOGRAPH - 0xC553: 0x81E9, //CJK UNIFIED IDEOGRAPH - 0xC554: 0x81EB, //CJK UNIFIED IDEOGRAPH - 0xC555: 0x81EE, //CJK UNIFIED IDEOGRAPH - 0xC556: 0x81EF, //CJK UNIFIED IDEOGRAPH - 0xC557: 0x81F0, //CJK UNIFIED IDEOGRAPH - 0xC558: 0x81F1, //CJK UNIFIED IDEOGRAPH - 0xC559: 0x81F2, //CJK UNIFIED IDEOGRAPH - 0xC55A: 0x81F5, //CJK UNIFIED IDEOGRAPH - 0xC55B: 0x81F6, //CJK UNIFIED IDEOGRAPH - 0xC55C: 0x81F7, //CJK UNIFIED IDEOGRAPH - 0xC55D: 0x81F8, //CJK UNIFIED IDEOGRAPH - 0xC55E: 0x81F9, //CJK UNIFIED IDEOGRAPH - 0xC55F: 0x81FA, //CJK UNIFIED IDEOGRAPH - 0xC560: 0x81FD, //CJK UNIFIED IDEOGRAPH - 0xC561: 0x81FF, //CJK UNIFIED IDEOGRAPH - 0xC562: 0x8203, //CJK UNIFIED IDEOGRAPH - 0xC563: 0x8207, //CJK UNIFIED IDEOGRAPH - 0xC564: 0x8208, //CJK UNIFIED IDEOGRAPH - 0xC565: 0x8209, //CJK UNIFIED IDEOGRAPH - 0xC566: 0x820A, //CJK UNIFIED IDEOGRAPH - 0xC567: 0x820B, //CJK UNIFIED IDEOGRAPH - 0xC568: 0x820E, //CJK UNIFIED IDEOGRAPH - 0xC569: 0x820F, //CJK UNIFIED IDEOGRAPH - 0xC56A: 0x8211, //CJK UNIFIED IDEOGRAPH - 0xC56B: 0x8213, //CJK UNIFIED IDEOGRAPH - 0xC56C: 0x8215, //CJK UNIFIED IDEOGRAPH - 0xC56D: 0x8216, //CJK UNIFIED IDEOGRAPH - 0xC56E: 0x8217, //CJK UNIFIED IDEOGRAPH - 0xC56F: 0x8218, //CJK UNIFIED IDEOGRAPH - 0xC570: 0x8219, //CJK UNIFIED IDEOGRAPH - 0xC571: 0x821A, //CJK UNIFIED IDEOGRAPH - 0xC572: 0x821D, //CJK UNIFIED IDEOGRAPH - 0xC573: 0x8220, //CJK UNIFIED IDEOGRAPH - 0xC574: 0x8224, //CJK UNIFIED IDEOGRAPH - 0xC575: 0x8225, //CJK UNIFIED IDEOGRAPH - 0xC576: 0x8226, //CJK UNIFIED IDEOGRAPH - 0xC577: 0x8227, //CJK UNIFIED IDEOGRAPH - 0xC578: 0x8229, //CJK UNIFIED IDEOGRAPH - 0xC579: 0x822E, //CJK UNIFIED IDEOGRAPH - 0xC57A: 0x8232, //CJK UNIFIED IDEOGRAPH - 0xC57B: 0x823A, //CJK UNIFIED IDEOGRAPH - 0xC57C: 0x823C, //CJK UNIFIED IDEOGRAPH - 0xC57D: 0x823D, //CJK UNIFIED IDEOGRAPH - 0xC57E: 0x823F, //CJK UNIFIED IDEOGRAPH - 0xC580: 0x8240, //CJK UNIFIED IDEOGRAPH - 0xC581: 0x8241, //CJK UNIFIED IDEOGRAPH - 0xC582: 0x8242, //CJK UNIFIED IDEOGRAPH - 0xC583: 0x8243, //CJK UNIFIED IDEOGRAPH - 0xC584: 0x8245, //CJK UNIFIED IDEOGRAPH - 0xC585: 0x8246, //CJK UNIFIED IDEOGRAPH - 0xC586: 0x8248, //CJK UNIFIED IDEOGRAPH - 0xC587: 0x824A, //CJK UNIFIED IDEOGRAPH - 0xC588: 0x824C, //CJK UNIFIED IDEOGRAPH - 0xC589: 0x824D, //CJK UNIFIED IDEOGRAPH - 0xC58A: 0x824E, //CJK UNIFIED IDEOGRAPH - 0xC58B: 0x8250, //CJK UNIFIED IDEOGRAPH - 0xC58C: 0x8251, //CJK UNIFIED IDEOGRAPH - 0xC58D: 0x8252, //CJK UNIFIED IDEOGRAPH - 0xC58E: 0x8253, //CJK UNIFIED IDEOGRAPH - 0xC58F: 0x8254, //CJK UNIFIED IDEOGRAPH - 0xC590: 0x8255, //CJK UNIFIED IDEOGRAPH - 0xC591: 0x8256, //CJK UNIFIED IDEOGRAPH - 0xC592: 0x8257, //CJK UNIFIED IDEOGRAPH - 0xC593: 0x8259, //CJK UNIFIED IDEOGRAPH - 0xC594: 0x825B, //CJK UNIFIED IDEOGRAPH - 0xC595: 0x825C, //CJK UNIFIED IDEOGRAPH - 0xC596: 0x825D, //CJK UNIFIED IDEOGRAPH - 0xC597: 0x825E, //CJK UNIFIED IDEOGRAPH - 0xC598: 0x8260, //CJK UNIFIED IDEOGRAPH - 0xC599: 0x8261, //CJK UNIFIED IDEOGRAPH - 0xC59A: 0x8262, //CJK UNIFIED IDEOGRAPH - 0xC59B: 0x8263, //CJK UNIFIED IDEOGRAPH - 0xC59C: 0x8264, //CJK UNIFIED IDEOGRAPH - 0xC59D: 0x8265, //CJK UNIFIED IDEOGRAPH - 0xC59E: 0x8266, //CJK UNIFIED IDEOGRAPH - 0xC59F: 0x8267, //CJK UNIFIED IDEOGRAPH - 0xC5A0: 0x8269, //CJK UNIFIED IDEOGRAPH - 0xC5A1: 0x62E7, //CJK UNIFIED IDEOGRAPH - 0xC5A2: 0x6CDE, //CJK UNIFIED IDEOGRAPH - 0xC5A3: 0x725B, //CJK UNIFIED IDEOGRAPH - 0xC5A4: 0x626D, //CJK UNIFIED IDEOGRAPH - 0xC5A5: 0x94AE, //CJK UNIFIED IDEOGRAPH - 0xC5A6: 0x7EBD, //CJK UNIFIED IDEOGRAPH - 0xC5A7: 0x8113, //CJK UNIFIED IDEOGRAPH - 0xC5A8: 0x6D53, //CJK UNIFIED IDEOGRAPH - 0xC5A9: 0x519C, //CJK UNIFIED IDEOGRAPH - 0xC5AA: 0x5F04, //CJK UNIFIED IDEOGRAPH - 0xC5AB: 0x5974, //CJK UNIFIED IDEOGRAPH - 0xC5AC: 0x52AA, //CJK UNIFIED IDEOGRAPH - 0xC5AD: 0x6012, //CJK UNIFIED IDEOGRAPH - 0xC5AE: 0x5973, //CJK UNIFIED IDEOGRAPH - 0xC5AF: 0x6696, //CJK UNIFIED IDEOGRAPH - 0xC5B0: 0x8650, //CJK UNIFIED IDEOGRAPH - 0xC5B1: 0x759F, //CJK UNIFIED IDEOGRAPH - 0xC5B2: 0x632A, //CJK UNIFIED IDEOGRAPH - 0xC5B3: 0x61E6, //CJK UNIFIED IDEOGRAPH - 0xC5B4: 0x7CEF, //CJK UNIFIED IDEOGRAPH - 0xC5B5: 0x8BFA, //CJK UNIFIED IDEOGRAPH - 0xC5B6: 0x54E6, //CJK UNIFIED IDEOGRAPH - 0xC5B7: 0x6B27, //CJK UNIFIED IDEOGRAPH - 0xC5B8: 0x9E25, //CJK UNIFIED IDEOGRAPH - 0xC5B9: 0x6BB4, //CJK UNIFIED IDEOGRAPH - 0xC5BA: 0x85D5, //CJK UNIFIED IDEOGRAPH - 0xC5BB: 0x5455, //CJK UNIFIED IDEOGRAPH - 0xC5BC: 0x5076, //CJK UNIFIED IDEOGRAPH - 0xC5BD: 0x6CA4, //CJK UNIFIED IDEOGRAPH - 0xC5BE: 0x556A, //CJK UNIFIED IDEOGRAPH - 0xC5BF: 0x8DB4, //CJK UNIFIED IDEOGRAPH - 0xC5C0: 0x722C, //CJK UNIFIED IDEOGRAPH - 0xC5C1: 0x5E15, //CJK UNIFIED IDEOGRAPH - 0xC5C2: 0x6015, //CJK UNIFIED IDEOGRAPH - 0xC5C3: 0x7436, //CJK UNIFIED IDEOGRAPH - 0xC5C4: 0x62CD, //CJK UNIFIED IDEOGRAPH - 0xC5C5: 0x6392, //CJK UNIFIED IDEOGRAPH - 0xC5C6: 0x724C, //CJK UNIFIED IDEOGRAPH - 0xC5C7: 0x5F98, //CJK UNIFIED IDEOGRAPH - 0xC5C8: 0x6E43, //CJK UNIFIED IDEOGRAPH - 0xC5C9: 0x6D3E, //CJK UNIFIED IDEOGRAPH - 0xC5CA: 0x6500, //CJK UNIFIED IDEOGRAPH - 0xC5CB: 0x6F58, //CJK UNIFIED IDEOGRAPH - 0xC5CC: 0x76D8, //CJK UNIFIED IDEOGRAPH - 0xC5CD: 0x78D0, //CJK UNIFIED IDEOGRAPH - 0xC5CE: 0x76FC, //CJK UNIFIED IDEOGRAPH - 0xC5CF: 0x7554, //CJK UNIFIED IDEOGRAPH - 0xC5D0: 0x5224, //CJK UNIFIED IDEOGRAPH - 0xC5D1: 0x53DB, //CJK UNIFIED IDEOGRAPH - 0xC5D2: 0x4E53, //CJK UNIFIED IDEOGRAPH - 0xC5D3: 0x5E9E, //CJK UNIFIED IDEOGRAPH - 0xC5D4: 0x65C1, //CJK UNIFIED IDEOGRAPH - 0xC5D5: 0x802A, //CJK UNIFIED IDEOGRAPH - 0xC5D6: 0x80D6, //CJK UNIFIED IDEOGRAPH - 0xC5D7: 0x629B, //CJK UNIFIED IDEOGRAPH - 0xC5D8: 0x5486, //CJK UNIFIED IDEOGRAPH - 0xC5D9: 0x5228, //CJK UNIFIED IDEOGRAPH - 0xC5DA: 0x70AE, //CJK UNIFIED IDEOGRAPH - 0xC5DB: 0x888D, //CJK UNIFIED IDEOGRAPH - 0xC5DC: 0x8DD1, //CJK UNIFIED IDEOGRAPH - 0xC5DD: 0x6CE1, //CJK UNIFIED IDEOGRAPH - 0xC5DE: 0x5478, //CJK UNIFIED IDEOGRAPH - 0xC5DF: 0x80DA, //CJK UNIFIED IDEOGRAPH - 0xC5E0: 0x57F9, //CJK UNIFIED IDEOGRAPH - 0xC5E1: 0x88F4, //CJK UNIFIED IDEOGRAPH - 0xC5E2: 0x8D54, //CJK UNIFIED IDEOGRAPH - 0xC5E3: 0x966A, //CJK UNIFIED IDEOGRAPH - 0xC5E4: 0x914D, //CJK UNIFIED IDEOGRAPH - 0xC5E5: 0x4F69, //CJK UNIFIED IDEOGRAPH - 0xC5E6: 0x6C9B, //CJK UNIFIED IDEOGRAPH - 0xC5E7: 0x55B7, //CJK UNIFIED IDEOGRAPH - 0xC5E8: 0x76C6, //CJK UNIFIED IDEOGRAPH - 0xC5E9: 0x7830, //CJK UNIFIED IDEOGRAPH - 0xC5EA: 0x62A8, //CJK UNIFIED IDEOGRAPH - 0xC5EB: 0x70F9, //CJK UNIFIED IDEOGRAPH - 0xC5EC: 0x6F8E, //CJK UNIFIED IDEOGRAPH - 0xC5ED: 0x5F6D, //CJK UNIFIED IDEOGRAPH - 0xC5EE: 0x84EC, //CJK UNIFIED IDEOGRAPH - 0xC5EF: 0x68DA, //CJK UNIFIED IDEOGRAPH - 0xC5F0: 0x787C, //CJK UNIFIED IDEOGRAPH - 0xC5F1: 0x7BF7, //CJK UNIFIED IDEOGRAPH - 0xC5F2: 0x81A8, //CJK UNIFIED IDEOGRAPH - 0xC5F3: 0x670B, //CJK UNIFIED IDEOGRAPH - 0xC5F4: 0x9E4F, //CJK UNIFIED IDEOGRAPH - 0xC5F5: 0x6367, //CJK UNIFIED IDEOGRAPH - 0xC5F6: 0x78B0, //CJK UNIFIED IDEOGRAPH - 0xC5F7: 0x576F, //CJK UNIFIED IDEOGRAPH - 0xC5F8: 0x7812, //CJK UNIFIED IDEOGRAPH - 0xC5F9: 0x9739, //CJK UNIFIED IDEOGRAPH - 0xC5FA: 0x6279, //CJK UNIFIED IDEOGRAPH - 0xC5FB: 0x62AB, //CJK UNIFIED IDEOGRAPH - 0xC5FC: 0x5288, //CJK UNIFIED IDEOGRAPH - 0xC5FD: 0x7435, //CJK UNIFIED IDEOGRAPH - 0xC5FE: 0x6BD7, //CJK UNIFIED IDEOGRAPH - 0xC640: 0x826A, //CJK UNIFIED IDEOGRAPH - 0xC641: 0x826B, //CJK UNIFIED IDEOGRAPH - 0xC642: 0x826C, //CJK UNIFIED IDEOGRAPH - 0xC643: 0x826D, //CJK UNIFIED IDEOGRAPH - 0xC644: 0x8271, //CJK UNIFIED IDEOGRAPH - 0xC645: 0x8275, //CJK UNIFIED IDEOGRAPH - 0xC646: 0x8276, //CJK UNIFIED IDEOGRAPH - 0xC647: 0x8277, //CJK UNIFIED IDEOGRAPH - 0xC648: 0x8278, //CJK UNIFIED IDEOGRAPH - 0xC649: 0x827B, //CJK UNIFIED IDEOGRAPH - 0xC64A: 0x827C, //CJK UNIFIED IDEOGRAPH - 0xC64B: 0x8280, //CJK UNIFIED IDEOGRAPH - 0xC64C: 0x8281, //CJK UNIFIED IDEOGRAPH - 0xC64D: 0x8283, //CJK UNIFIED IDEOGRAPH - 0xC64E: 0x8285, //CJK UNIFIED IDEOGRAPH - 0xC64F: 0x8286, //CJK UNIFIED IDEOGRAPH - 0xC650: 0x8287, //CJK UNIFIED IDEOGRAPH - 0xC651: 0x8289, //CJK UNIFIED IDEOGRAPH - 0xC652: 0x828C, //CJK UNIFIED IDEOGRAPH - 0xC653: 0x8290, //CJK UNIFIED IDEOGRAPH - 0xC654: 0x8293, //CJK UNIFIED IDEOGRAPH - 0xC655: 0x8294, //CJK UNIFIED IDEOGRAPH - 0xC656: 0x8295, //CJK UNIFIED IDEOGRAPH - 0xC657: 0x8296, //CJK UNIFIED IDEOGRAPH - 0xC658: 0x829A, //CJK UNIFIED IDEOGRAPH - 0xC659: 0x829B, //CJK UNIFIED IDEOGRAPH - 0xC65A: 0x829E, //CJK UNIFIED IDEOGRAPH - 0xC65B: 0x82A0, //CJK UNIFIED IDEOGRAPH - 0xC65C: 0x82A2, //CJK UNIFIED IDEOGRAPH - 0xC65D: 0x82A3, //CJK UNIFIED IDEOGRAPH - 0xC65E: 0x82A7, //CJK UNIFIED IDEOGRAPH - 0xC65F: 0x82B2, //CJK UNIFIED IDEOGRAPH - 0xC660: 0x82B5, //CJK UNIFIED IDEOGRAPH - 0xC661: 0x82B6, //CJK UNIFIED IDEOGRAPH - 0xC662: 0x82BA, //CJK UNIFIED IDEOGRAPH - 0xC663: 0x82BB, //CJK UNIFIED IDEOGRAPH - 0xC664: 0x82BC, //CJK UNIFIED IDEOGRAPH - 0xC665: 0x82BF, //CJK UNIFIED IDEOGRAPH - 0xC666: 0x82C0, //CJK UNIFIED IDEOGRAPH - 0xC667: 0x82C2, //CJK UNIFIED IDEOGRAPH - 0xC668: 0x82C3, //CJK UNIFIED IDEOGRAPH - 0xC669: 0x82C5, //CJK UNIFIED IDEOGRAPH - 0xC66A: 0x82C6, //CJK UNIFIED IDEOGRAPH - 0xC66B: 0x82C9, //CJK UNIFIED IDEOGRAPH - 0xC66C: 0x82D0, //CJK UNIFIED IDEOGRAPH - 0xC66D: 0x82D6, //CJK UNIFIED IDEOGRAPH - 0xC66E: 0x82D9, //CJK UNIFIED IDEOGRAPH - 0xC66F: 0x82DA, //CJK UNIFIED IDEOGRAPH - 0xC670: 0x82DD, //CJK UNIFIED IDEOGRAPH - 0xC671: 0x82E2, //CJK UNIFIED IDEOGRAPH - 0xC672: 0x82E7, //CJK UNIFIED IDEOGRAPH - 0xC673: 0x82E8, //CJK UNIFIED IDEOGRAPH - 0xC674: 0x82E9, //CJK UNIFIED IDEOGRAPH - 0xC675: 0x82EA, //CJK UNIFIED IDEOGRAPH - 0xC676: 0x82EC, //CJK UNIFIED IDEOGRAPH - 0xC677: 0x82ED, //CJK UNIFIED IDEOGRAPH - 0xC678: 0x82EE, //CJK UNIFIED IDEOGRAPH - 0xC679: 0x82F0, //CJK UNIFIED IDEOGRAPH - 0xC67A: 0x82F2, //CJK UNIFIED IDEOGRAPH - 0xC67B: 0x82F3, //CJK UNIFIED IDEOGRAPH - 0xC67C: 0x82F5, //CJK UNIFIED IDEOGRAPH - 0xC67D: 0x82F6, //CJK UNIFIED IDEOGRAPH - 0xC67E: 0x82F8, //CJK UNIFIED IDEOGRAPH - 0xC680: 0x82FA, //CJK UNIFIED IDEOGRAPH - 0xC681: 0x82FC, //CJK UNIFIED IDEOGRAPH - 0xC682: 0x82FD, //CJK UNIFIED IDEOGRAPH - 0xC683: 0x82FE, //CJK UNIFIED IDEOGRAPH - 0xC684: 0x82FF, //CJK UNIFIED IDEOGRAPH - 0xC685: 0x8300, //CJK UNIFIED IDEOGRAPH - 0xC686: 0x830A, //CJK UNIFIED IDEOGRAPH - 0xC687: 0x830B, //CJK UNIFIED IDEOGRAPH - 0xC688: 0x830D, //CJK UNIFIED IDEOGRAPH - 0xC689: 0x8310, //CJK UNIFIED IDEOGRAPH - 0xC68A: 0x8312, //CJK UNIFIED IDEOGRAPH - 0xC68B: 0x8313, //CJK UNIFIED IDEOGRAPH - 0xC68C: 0x8316, //CJK UNIFIED IDEOGRAPH - 0xC68D: 0x8318, //CJK UNIFIED IDEOGRAPH - 0xC68E: 0x8319, //CJK UNIFIED IDEOGRAPH - 0xC68F: 0x831D, //CJK UNIFIED IDEOGRAPH - 0xC690: 0x831E, //CJK UNIFIED IDEOGRAPH - 0xC691: 0x831F, //CJK UNIFIED IDEOGRAPH - 0xC692: 0x8320, //CJK UNIFIED IDEOGRAPH - 0xC693: 0x8321, //CJK UNIFIED IDEOGRAPH - 0xC694: 0x8322, //CJK UNIFIED IDEOGRAPH - 0xC695: 0x8323, //CJK UNIFIED IDEOGRAPH - 0xC696: 0x8324, //CJK UNIFIED IDEOGRAPH - 0xC697: 0x8325, //CJK UNIFIED IDEOGRAPH - 0xC698: 0x8326, //CJK UNIFIED IDEOGRAPH - 0xC699: 0x8329, //CJK UNIFIED IDEOGRAPH - 0xC69A: 0x832A, //CJK UNIFIED IDEOGRAPH - 0xC69B: 0x832E, //CJK UNIFIED IDEOGRAPH - 0xC69C: 0x8330, //CJK UNIFIED IDEOGRAPH - 0xC69D: 0x8332, //CJK UNIFIED IDEOGRAPH - 0xC69E: 0x8337, //CJK UNIFIED IDEOGRAPH - 0xC69F: 0x833B, //CJK UNIFIED IDEOGRAPH - 0xC6A0: 0x833D, //CJK UNIFIED IDEOGRAPH - 0xC6A1: 0x5564, //CJK UNIFIED IDEOGRAPH - 0xC6A2: 0x813E, //CJK UNIFIED IDEOGRAPH - 0xC6A3: 0x75B2, //CJK UNIFIED IDEOGRAPH - 0xC6A4: 0x76AE, //CJK UNIFIED IDEOGRAPH - 0xC6A5: 0x5339, //CJK UNIFIED IDEOGRAPH - 0xC6A6: 0x75DE, //CJK UNIFIED IDEOGRAPH - 0xC6A7: 0x50FB, //CJK UNIFIED IDEOGRAPH - 0xC6A8: 0x5C41, //CJK UNIFIED IDEOGRAPH - 0xC6A9: 0x8B6C, //CJK UNIFIED IDEOGRAPH - 0xC6AA: 0x7BC7, //CJK UNIFIED IDEOGRAPH - 0xC6AB: 0x504F, //CJK UNIFIED IDEOGRAPH - 0xC6AC: 0x7247, //CJK UNIFIED IDEOGRAPH - 0xC6AD: 0x9A97, //CJK UNIFIED IDEOGRAPH - 0xC6AE: 0x98D8, //CJK UNIFIED IDEOGRAPH - 0xC6AF: 0x6F02, //CJK UNIFIED IDEOGRAPH - 0xC6B0: 0x74E2, //CJK UNIFIED IDEOGRAPH - 0xC6B1: 0x7968, //CJK UNIFIED IDEOGRAPH - 0xC6B2: 0x6487, //CJK UNIFIED IDEOGRAPH - 0xC6B3: 0x77A5, //CJK UNIFIED IDEOGRAPH - 0xC6B4: 0x62FC, //CJK UNIFIED IDEOGRAPH - 0xC6B5: 0x9891, //CJK UNIFIED IDEOGRAPH - 0xC6B6: 0x8D2B, //CJK UNIFIED IDEOGRAPH - 0xC6B7: 0x54C1, //CJK UNIFIED IDEOGRAPH - 0xC6B8: 0x8058, //CJK UNIFIED IDEOGRAPH - 0xC6B9: 0x4E52, //CJK UNIFIED IDEOGRAPH - 0xC6BA: 0x576A, //CJK UNIFIED IDEOGRAPH - 0xC6BB: 0x82F9, //CJK UNIFIED IDEOGRAPH - 0xC6BC: 0x840D, //CJK UNIFIED IDEOGRAPH - 0xC6BD: 0x5E73, //CJK UNIFIED IDEOGRAPH - 0xC6BE: 0x51ED, //CJK UNIFIED IDEOGRAPH - 0xC6BF: 0x74F6, //CJK UNIFIED IDEOGRAPH - 0xC6C0: 0x8BC4, //CJK UNIFIED IDEOGRAPH - 0xC6C1: 0x5C4F, //CJK UNIFIED IDEOGRAPH - 0xC6C2: 0x5761, //CJK UNIFIED IDEOGRAPH - 0xC6C3: 0x6CFC, //CJK UNIFIED IDEOGRAPH - 0xC6C4: 0x9887, //CJK UNIFIED IDEOGRAPH - 0xC6C5: 0x5A46, //CJK UNIFIED IDEOGRAPH - 0xC6C6: 0x7834, //CJK UNIFIED IDEOGRAPH - 0xC6C7: 0x9B44, //CJK UNIFIED IDEOGRAPH - 0xC6C8: 0x8FEB, //CJK UNIFIED IDEOGRAPH - 0xC6C9: 0x7C95, //CJK UNIFIED IDEOGRAPH - 0xC6CA: 0x5256, //CJK UNIFIED IDEOGRAPH - 0xC6CB: 0x6251, //CJK UNIFIED IDEOGRAPH - 0xC6CC: 0x94FA, //CJK UNIFIED IDEOGRAPH - 0xC6CD: 0x4EC6, //CJK UNIFIED IDEOGRAPH - 0xC6CE: 0x8386, //CJK UNIFIED IDEOGRAPH - 0xC6CF: 0x8461, //CJK UNIFIED IDEOGRAPH - 0xC6D0: 0x83E9, //CJK UNIFIED IDEOGRAPH - 0xC6D1: 0x84B2, //CJK UNIFIED IDEOGRAPH - 0xC6D2: 0x57D4, //CJK UNIFIED IDEOGRAPH - 0xC6D3: 0x6734, //CJK UNIFIED IDEOGRAPH - 0xC6D4: 0x5703, //CJK UNIFIED IDEOGRAPH - 0xC6D5: 0x666E, //CJK UNIFIED IDEOGRAPH - 0xC6D6: 0x6D66, //CJK UNIFIED IDEOGRAPH - 0xC6D7: 0x8C31, //CJK UNIFIED IDEOGRAPH - 0xC6D8: 0x66DD, //CJK UNIFIED IDEOGRAPH - 0xC6D9: 0x7011, //CJK UNIFIED IDEOGRAPH - 0xC6DA: 0x671F, //CJK UNIFIED IDEOGRAPH - 0xC6DB: 0x6B3A, //CJK UNIFIED IDEOGRAPH - 0xC6DC: 0x6816, //CJK UNIFIED IDEOGRAPH - 0xC6DD: 0x621A, //CJK UNIFIED IDEOGRAPH - 0xC6DE: 0x59BB, //CJK UNIFIED IDEOGRAPH - 0xC6DF: 0x4E03, //CJK UNIFIED IDEOGRAPH - 0xC6E0: 0x51C4, //CJK UNIFIED IDEOGRAPH - 0xC6E1: 0x6F06, //CJK UNIFIED IDEOGRAPH - 0xC6E2: 0x67D2, //CJK UNIFIED IDEOGRAPH - 0xC6E3: 0x6C8F, //CJK UNIFIED IDEOGRAPH - 0xC6E4: 0x5176, //CJK UNIFIED IDEOGRAPH - 0xC6E5: 0x68CB, //CJK UNIFIED IDEOGRAPH - 0xC6E6: 0x5947, //CJK UNIFIED IDEOGRAPH - 0xC6E7: 0x6B67, //CJK UNIFIED IDEOGRAPH - 0xC6E8: 0x7566, //CJK UNIFIED IDEOGRAPH - 0xC6E9: 0x5D0E, //CJK UNIFIED IDEOGRAPH - 0xC6EA: 0x8110, //CJK UNIFIED IDEOGRAPH - 0xC6EB: 0x9F50, //CJK UNIFIED IDEOGRAPH - 0xC6EC: 0x65D7, //CJK UNIFIED IDEOGRAPH - 0xC6ED: 0x7948, //CJK UNIFIED IDEOGRAPH - 0xC6EE: 0x7941, //CJK UNIFIED IDEOGRAPH - 0xC6EF: 0x9A91, //CJK UNIFIED IDEOGRAPH - 0xC6F0: 0x8D77, //CJK UNIFIED IDEOGRAPH - 0xC6F1: 0x5C82, //CJK UNIFIED IDEOGRAPH - 0xC6F2: 0x4E5E, //CJK UNIFIED IDEOGRAPH - 0xC6F3: 0x4F01, //CJK UNIFIED IDEOGRAPH - 0xC6F4: 0x542F, //CJK UNIFIED IDEOGRAPH - 0xC6F5: 0x5951, //CJK UNIFIED IDEOGRAPH - 0xC6F6: 0x780C, //CJK UNIFIED IDEOGRAPH - 0xC6F7: 0x5668, //CJK UNIFIED IDEOGRAPH - 0xC6F8: 0x6C14, //CJK UNIFIED IDEOGRAPH - 0xC6F9: 0x8FC4, //CJK UNIFIED IDEOGRAPH - 0xC6FA: 0x5F03, //CJK UNIFIED IDEOGRAPH - 0xC6FB: 0x6C7D, //CJK UNIFIED IDEOGRAPH - 0xC6FC: 0x6CE3, //CJK UNIFIED IDEOGRAPH - 0xC6FD: 0x8BAB, //CJK UNIFIED IDEOGRAPH - 0xC6FE: 0x6390, //CJK UNIFIED IDEOGRAPH - 0xC740: 0x833E, //CJK UNIFIED IDEOGRAPH - 0xC741: 0x833F, //CJK UNIFIED IDEOGRAPH - 0xC742: 0x8341, //CJK UNIFIED IDEOGRAPH - 0xC743: 0x8342, //CJK UNIFIED IDEOGRAPH - 0xC744: 0x8344, //CJK UNIFIED IDEOGRAPH - 0xC745: 0x8345, //CJK UNIFIED IDEOGRAPH - 0xC746: 0x8348, //CJK UNIFIED IDEOGRAPH - 0xC747: 0x834A, //CJK UNIFIED IDEOGRAPH - 0xC748: 0x834B, //CJK UNIFIED IDEOGRAPH - 0xC749: 0x834C, //CJK UNIFIED IDEOGRAPH - 0xC74A: 0x834D, //CJK UNIFIED IDEOGRAPH - 0xC74B: 0x834E, //CJK UNIFIED IDEOGRAPH - 0xC74C: 0x8353, //CJK UNIFIED IDEOGRAPH - 0xC74D: 0x8355, //CJK UNIFIED IDEOGRAPH - 0xC74E: 0x8356, //CJK UNIFIED IDEOGRAPH - 0xC74F: 0x8357, //CJK UNIFIED IDEOGRAPH - 0xC750: 0x8358, //CJK UNIFIED IDEOGRAPH - 0xC751: 0x8359, //CJK UNIFIED IDEOGRAPH - 0xC752: 0x835D, //CJK UNIFIED IDEOGRAPH - 0xC753: 0x8362, //CJK UNIFIED IDEOGRAPH - 0xC754: 0x8370, //CJK UNIFIED IDEOGRAPH - 0xC755: 0x8371, //CJK UNIFIED IDEOGRAPH - 0xC756: 0x8372, //CJK UNIFIED IDEOGRAPH - 0xC757: 0x8373, //CJK UNIFIED IDEOGRAPH - 0xC758: 0x8374, //CJK UNIFIED IDEOGRAPH - 0xC759: 0x8375, //CJK UNIFIED IDEOGRAPH - 0xC75A: 0x8376, //CJK UNIFIED IDEOGRAPH - 0xC75B: 0x8379, //CJK UNIFIED IDEOGRAPH - 0xC75C: 0x837A, //CJK UNIFIED IDEOGRAPH - 0xC75D: 0x837E, //CJK UNIFIED IDEOGRAPH - 0xC75E: 0x837F, //CJK UNIFIED IDEOGRAPH - 0xC75F: 0x8380, //CJK UNIFIED IDEOGRAPH - 0xC760: 0x8381, //CJK UNIFIED IDEOGRAPH - 0xC761: 0x8382, //CJK UNIFIED IDEOGRAPH - 0xC762: 0x8383, //CJK UNIFIED IDEOGRAPH - 0xC763: 0x8384, //CJK UNIFIED IDEOGRAPH - 0xC764: 0x8387, //CJK UNIFIED IDEOGRAPH - 0xC765: 0x8388, //CJK UNIFIED IDEOGRAPH - 0xC766: 0x838A, //CJK UNIFIED IDEOGRAPH - 0xC767: 0x838B, //CJK UNIFIED IDEOGRAPH - 0xC768: 0x838C, //CJK UNIFIED IDEOGRAPH - 0xC769: 0x838D, //CJK UNIFIED IDEOGRAPH - 0xC76A: 0x838F, //CJK UNIFIED IDEOGRAPH - 0xC76B: 0x8390, //CJK UNIFIED IDEOGRAPH - 0xC76C: 0x8391, //CJK UNIFIED IDEOGRAPH - 0xC76D: 0x8394, //CJK UNIFIED IDEOGRAPH - 0xC76E: 0x8395, //CJK UNIFIED IDEOGRAPH - 0xC76F: 0x8396, //CJK UNIFIED IDEOGRAPH - 0xC770: 0x8397, //CJK UNIFIED IDEOGRAPH - 0xC771: 0x8399, //CJK UNIFIED IDEOGRAPH - 0xC772: 0x839A, //CJK UNIFIED IDEOGRAPH - 0xC773: 0x839D, //CJK UNIFIED IDEOGRAPH - 0xC774: 0x839F, //CJK UNIFIED IDEOGRAPH - 0xC775: 0x83A1, //CJK UNIFIED IDEOGRAPH - 0xC776: 0x83A2, //CJK UNIFIED IDEOGRAPH - 0xC777: 0x83A3, //CJK UNIFIED IDEOGRAPH - 0xC778: 0x83A4, //CJK UNIFIED IDEOGRAPH - 0xC779: 0x83A5, //CJK UNIFIED IDEOGRAPH - 0xC77A: 0x83A6, //CJK UNIFIED IDEOGRAPH - 0xC77B: 0x83A7, //CJK UNIFIED IDEOGRAPH - 0xC77C: 0x83AC, //CJK UNIFIED IDEOGRAPH - 0xC77D: 0x83AD, //CJK UNIFIED IDEOGRAPH - 0xC77E: 0x83AE, //CJK UNIFIED IDEOGRAPH - 0xC780: 0x83AF, //CJK UNIFIED IDEOGRAPH - 0xC781: 0x83B5, //CJK UNIFIED IDEOGRAPH - 0xC782: 0x83BB, //CJK UNIFIED IDEOGRAPH - 0xC783: 0x83BE, //CJK UNIFIED IDEOGRAPH - 0xC784: 0x83BF, //CJK UNIFIED IDEOGRAPH - 0xC785: 0x83C2, //CJK UNIFIED IDEOGRAPH - 0xC786: 0x83C3, //CJK UNIFIED IDEOGRAPH - 0xC787: 0x83C4, //CJK UNIFIED IDEOGRAPH - 0xC788: 0x83C6, //CJK UNIFIED IDEOGRAPH - 0xC789: 0x83C8, //CJK UNIFIED IDEOGRAPH - 0xC78A: 0x83C9, //CJK UNIFIED IDEOGRAPH - 0xC78B: 0x83CB, //CJK UNIFIED IDEOGRAPH - 0xC78C: 0x83CD, //CJK UNIFIED IDEOGRAPH - 0xC78D: 0x83CE, //CJK UNIFIED IDEOGRAPH - 0xC78E: 0x83D0, //CJK UNIFIED IDEOGRAPH - 0xC78F: 0x83D1, //CJK UNIFIED IDEOGRAPH - 0xC790: 0x83D2, //CJK UNIFIED IDEOGRAPH - 0xC791: 0x83D3, //CJK UNIFIED IDEOGRAPH - 0xC792: 0x83D5, //CJK UNIFIED IDEOGRAPH - 0xC793: 0x83D7, //CJK UNIFIED IDEOGRAPH - 0xC794: 0x83D9, //CJK UNIFIED IDEOGRAPH - 0xC795: 0x83DA, //CJK UNIFIED IDEOGRAPH - 0xC796: 0x83DB, //CJK UNIFIED IDEOGRAPH - 0xC797: 0x83DE, //CJK UNIFIED IDEOGRAPH - 0xC798: 0x83E2, //CJK UNIFIED IDEOGRAPH - 0xC799: 0x83E3, //CJK UNIFIED IDEOGRAPH - 0xC79A: 0x83E4, //CJK UNIFIED IDEOGRAPH - 0xC79B: 0x83E6, //CJK UNIFIED IDEOGRAPH - 0xC79C: 0x83E7, //CJK UNIFIED IDEOGRAPH - 0xC79D: 0x83E8, //CJK UNIFIED IDEOGRAPH - 0xC79E: 0x83EB, //CJK UNIFIED IDEOGRAPH - 0xC79F: 0x83EC, //CJK UNIFIED IDEOGRAPH - 0xC7A0: 0x83ED, //CJK UNIFIED IDEOGRAPH - 0xC7A1: 0x6070, //CJK UNIFIED IDEOGRAPH - 0xC7A2: 0x6D3D, //CJK UNIFIED IDEOGRAPH - 0xC7A3: 0x7275, //CJK UNIFIED IDEOGRAPH - 0xC7A4: 0x6266, //CJK UNIFIED IDEOGRAPH - 0xC7A5: 0x948E, //CJK UNIFIED IDEOGRAPH - 0xC7A6: 0x94C5, //CJK UNIFIED IDEOGRAPH - 0xC7A7: 0x5343, //CJK UNIFIED IDEOGRAPH - 0xC7A8: 0x8FC1, //CJK UNIFIED IDEOGRAPH - 0xC7A9: 0x7B7E, //CJK UNIFIED IDEOGRAPH - 0xC7AA: 0x4EDF, //CJK UNIFIED IDEOGRAPH - 0xC7AB: 0x8C26, //CJK UNIFIED IDEOGRAPH - 0xC7AC: 0x4E7E, //CJK UNIFIED IDEOGRAPH - 0xC7AD: 0x9ED4, //CJK UNIFIED IDEOGRAPH - 0xC7AE: 0x94B1, //CJK UNIFIED IDEOGRAPH - 0xC7AF: 0x94B3, //CJK UNIFIED IDEOGRAPH - 0xC7B0: 0x524D, //CJK UNIFIED IDEOGRAPH - 0xC7B1: 0x6F5C, //CJK UNIFIED IDEOGRAPH - 0xC7B2: 0x9063, //CJK UNIFIED IDEOGRAPH - 0xC7B3: 0x6D45, //CJK UNIFIED IDEOGRAPH - 0xC7B4: 0x8C34, //CJK UNIFIED IDEOGRAPH - 0xC7B5: 0x5811, //CJK UNIFIED IDEOGRAPH - 0xC7B6: 0x5D4C, //CJK UNIFIED IDEOGRAPH - 0xC7B7: 0x6B20, //CJK UNIFIED IDEOGRAPH - 0xC7B8: 0x6B49, //CJK UNIFIED IDEOGRAPH - 0xC7B9: 0x67AA, //CJK UNIFIED IDEOGRAPH - 0xC7BA: 0x545B, //CJK UNIFIED IDEOGRAPH - 0xC7BB: 0x8154, //CJK UNIFIED IDEOGRAPH - 0xC7BC: 0x7F8C, //CJK UNIFIED IDEOGRAPH - 0xC7BD: 0x5899, //CJK UNIFIED IDEOGRAPH - 0xC7BE: 0x8537, //CJK UNIFIED IDEOGRAPH - 0xC7BF: 0x5F3A, //CJK UNIFIED IDEOGRAPH - 0xC7C0: 0x62A2, //CJK UNIFIED IDEOGRAPH - 0xC7C1: 0x6A47, //CJK UNIFIED IDEOGRAPH - 0xC7C2: 0x9539, //CJK UNIFIED IDEOGRAPH - 0xC7C3: 0x6572, //CJK UNIFIED IDEOGRAPH - 0xC7C4: 0x6084, //CJK UNIFIED IDEOGRAPH - 0xC7C5: 0x6865, //CJK UNIFIED IDEOGRAPH - 0xC7C6: 0x77A7, //CJK UNIFIED IDEOGRAPH - 0xC7C7: 0x4E54, //CJK UNIFIED IDEOGRAPH - 0xC7C8: 0x4FA8, //CJK UNIFIED IDEOGRAPH - 0xC7C9: 0x5DE7, //CJK UNIFIED IDEOGRAPH - 0xC7CA: 0x9798, //CJK UNIFIED IDEOGRAPH - 0xC7CB: 0x64AC, //CJK UNIFIED IDEOGRAPH - 0xC7CC: 0x7FD8, //CJK UNIFIED IDEOGRAPH - 0xC7CD: 0x5CED, //CJK UNIFIED IDEOGRAPH - 0xC7CE: 0x4FCF, //CJK UNIFIED IDEOGRAPH - 0xC7CF: 0x7A8D, //CJK UNIFIED IDEOGRAPH - 0xC7D0: 0x5207, //CJK UNIFIED IDEOGRAPH - 0xC7D1: 0x8304, //CJK UNIFIED IDEOGRAPH - 0xC7D2: 0x4E14, //CJK UNIFIED IDEOGRAPH - 0xC7D3: 0x602F, //CJK UNIFIED IDEOGRAPH - 0xC7D4: 0x7A83, //CJK UNIFIED IDEOGRAPH - 0xC7D5: 0x94A6, //CJK UNIFIED IDEOGRAPH - 0xC7D6: 0x4FB5, //CJK UNIFIED IDEOGRAPH - 0xC7D7: 0x4EB2, //CJK UNIFIED IDEOGRAPH - 0xC7D8: 0x79E6, //CJK UNIFIED IDEOGRAPH - 0xC7D9: 0x7434, //CJK UNIFIED IDEOGRAPH - 0xC7DA: 0x52E4, //CJK UNIFIED IDEOGRAPH - 0xC7DB: 0x82B9, //CJK UNIFIED IDEOGRAPH - 0xC7DC: 0x64D2, //CJK UNIFIED IDEOGRAPH - 0xC7DD: 0x79BD, //CJK UNIFIED IDEOGRAPH - 0xC7DE: 0x5BDD, //CJK UNIFIED IDEOGRAPH - 0xC7DF: 0x6C81, //CJK UNIFIED IDEOGRAPH - 0xC7E0: 0x9752, //CJK UNIFIED IDEOGRAPH - 0xC7E1: 0x8F7B, //CJK UNIFIED IDEOGRAPH - 0xC7E2: 0x6C22, //CJK UNIFIED IDEOGRAPH - 0xC7E3: 0x503E, //CJK UNIFIED IDEOGRAPH - 0xC7E4: 0x537F, //CJK UNIFIED IDEOGRAPH - 0xC7E5: 0x6E05, //CJK UNIFIED IDEOGRAPH - 0xC7E6: 0x64CE, //CJK UNIFIED IDEOGRAPH - 0xC7E7: 0x6674, //CJK UNIFIED IDEOGRAPH - 0xC7E8: 0x6C30, //CJK UNIFIED IDEOGRAPH - 0xC7E9: 0x60C5, //CJK UNIFIED IDEOGRAPH - 0xC7EA: 0x9877, //CJK UNIFIED IDEOGRAPH - 0xC7EB: 0x8BF7, //CJK UNIFIED IDEOGRAPH - 0xC7EC: 0x5E86, //CJK UNIFIED IDEOGRAPH - 0xC7ED: 0x743C, //CJK UNIFIED IDEOGRAPH - 0xC7EE: 0x7A77, //CJK UNIFIED IDEOGRAPH - 0xC7EF: 0x79CB, //CJK UNIFIED IDEOGRAPH - 0xC7F0: 0x4E18, //CJK UNIFIED IDEOGRAPH - 0xC7F1: 0x90B1, //CJK UNIFIED IDEOGRAPH - 0xC7F2: 0x7403, //CJK UNIFIED IDEOGRAPH - 0xC7F3: 0x6C42, //CJK UNIFIED IDEOGRAPH - 0xC7F4: 0x56DA, //CJK UNIFIED IDEOGRAPH - 0xC7F5: 0x914B, //CJK UNIFIED IDEOGRAPH - 0xC7F6: 0x6CC5, //CJK UNIFIED IDEOGRAPH - 0xC7F7: 0x8D8B, //CJK UNIFIED IDEOGRAPH - 0xC7F8: 0x533A, //CJK UNIFIED IDEOGRAPH - 0xC7F9: 0x86C6, //CJK UNIFIED IDEOGRAPH - 0xC7FA: 0x66F2, //CJK UNIFIED IDEOGRAPH - 0xC7FB: 0x8EAF, //CJK UNIFIED IDEOGRAPH - 0xC7FC: 0x5C48, //CJK UNIFIED IDEOGRAPH - 0xC7FD: 0x9A71, //CJK UNIFIED IDEOGRAPH - 0xC7FE: 0x6E20, //CJK UNIFIED IDEOGRAPH - 0xC840: 0x83EE, //CJK UNIFIED IDEOGRAPH - 0xC841: 0x83EF, //CJK UNIFIED IDEOGRAPH - 0xC842: 0x83F3, //CJK UNIFIED IDEOGRAPH - 0xC843: 0x83F4, //CJK UNIFIED IDEOGRAPH - 0xC844: 0x83F5, //CJK UNIFIED IDEOGRAPH - 0xC845: 0x83F6, //CJK UNIFIED IDEOGRAPH - 0xC846: 0x83F7, //CJK UNIFIED IDEOGRAPH - 0xC847: 0x83FA, //CJK UNIFIED IDEOGRAPH - 0xC848: 0x83FB, //CJK UNIFIED IDEOGRAPH - 0xC849: 0x83FC, //CJK UNIFIED IDEOGRAPH - 0xC84A: 0x83FE, //CJK UNIFIED IDEOGRAPH - 0xC84B: 0x83FF, //CJK UNIFIED IDEOGRAPH - 0xC84C: 0x8400, //CJK UNIFIED IDEOGRAPH - 0xC84D: 0x8402, //CJK UNIFIED IDEOGRAPH - 0xC84E: 0x8405, //CJK UNIFIED IDEOGRAPH - 0xC84F: 0x8407, //CJK UNIFIED IDEOGRAPH - 0xC850: 0x8408, //CJK UNIFIED IDEOGRAPH - 0xC851: 0x8409, //CJK UNIFIED IDEOGRAPH - 0xC852: 0x840A, //CJK UNIFIED IDEOGRAPH - 0xC853: 0x8410, //CJK UNIFIED IDEOGRAPH - 0xC854: 0x8412, //CJK UNIFIED IDEOGRAPH - 0xC855: 0x8413, //CJK UNIFIED IDEOGRAPH - 0xC856: 0x8414, //CJK UNIFIED IDEOGRAPH - 0xC857: 0x8415, //CJK UNIFIED IDEOGRAPH - 0xC858: 0x8416, //CJK UNIFIED IDEOGRAPH - 0xC859: 0x8417, //CJK UNIFIED IDEOGRAPH - 0xC85A: 0x8419, //CJK UNIFIED IDEOGRAPH - 0xC85B: 0x841A, //CJK UNIFIED IDEOGRAPH - 0xC85C: 0x841B, //CJK UNIFIED IDEOGRAPH - 0xC85D: 0x841E, //CJK UNIFIED IDEOGRAPH - 0xC85E: 0x841F, //CJK UNIFIED IDEOGRAPH - 0xC85F: 0x8420, //CJK UNIFIED IDEOGRAPH - 0xC860: 0x8421, //CJK UNIFIED IDEOGRAPH - 0xC861: 0x8422, //CJK UNIFIED IDEOGRAPH - 0xC862: 0x8423, //CJK UNIFIED IDEOGRAPH - 0xC863: 0x8429, //CJK UNIFIED IDEOGRAPH - 0xC864: 0x842A, //CJK UNIFIED IDEOGRAPH - 0xC865: 0x842B, //CJK UNIFIED IDEOGRAPH - 0xC866: 0x842C, //CJK UNIFIED IDEOGRAPH - 0xC867: 0x842D, //CJK UNIFIED IDEOGRAPH - 0xC868: 0x842E, //CJK UNIFIED IDEOGRAPH - 0xC869: 0x842F, //CJK UNIFIED IDEOGRAPH - 0xC86A: 0x8430, //CJK UNIFIED IDEOGRAPH - 0xC86B: 0x8432, //CJK UNIFIED IDEOGRAPH - 0xC86C: 0x8433, //CJK UNIFIED IDEOGRAPH - 0xC86D: 0x8434, //CJK UNIFIED IDEOGRAPH - 0xC86E: 0x8435, //CJK UNIFIED IDEOGRAPH - 0xC86F: 0x8436, //CJK UNIFIED IDEOGRAPH - 0xC870: 0x8437, //CJK UNIFIED IDEOGRAPH - 0xC871: 0x8439, //CJK UNIFIED IDEOGRAPH - 0xC872: 0x843A, //CJK UNIFIED IDEOGRAPH - 0xC873: 0x843B, //CJK UNIFIED IDEOGRAPH - 0xC874: 0x843E, //CJK UNIFIED IDEOGRAPH - 0xC875: 0x843F, //CJK UNIFIED IDEOGRAPH - 0xC876: 0x8440, //CJK UNIFIED IDEOGRAPH - 0xC877: 0x8441, //CJK UNIFIED IDEOGRAPH - 0xC878: 0x8442, //CJK UNIFIED IDEOGRAPH - 0xC879: 0x8443, //CJK UNIFIED IDEOGRAPH - 0xC87A: 0x8444, //CJK UNIFIED IDEOGRAPH - 0xC87B: 0x8445, //CJK UNIFIED IDEOGRAPH - 0xC87C: 0x8447, //CJK UNIFIED IDEOGRAPH - 0xC87D: 0x8448, //CJK UNIFIED IDEOGRAPH - 0xC87E: 0x8449, //CJK UNIFIED IDEOGRAPH - 0xC880: 0x844A, //CJK UNIFIED IDEOGRAPH - 0xC881: 0x844B, //CJK UNIFIED IDEOGRAPH - 0xC882: 0x844C, //CJK UNIFIED IDEOGRAPH - 0xC883: 0x844D, //CJK UNIFIED IDEOGRAPH - 0xC884: 0x844E, //CJK UNIFIED IDEOGRAPH - 0xC885: 0x844F, //CJK UNIFIED IDEOGRAPH - 0xC886: 0x8450, //CJK UNIFIED IDEOGRAPH - 0xC887: 0x8452, //CJK UNIFIED IDEOGRAPH - 0xC888: 0x8453, //CJK UNIFIED IDEOGRAPH - 0xC889: 0x8454, //CJK UNIFIED IDEOGRAPH - 0xC88A: 0x8455, //CJK UNIFIED IDEOGRAPH - 0xC88B: 0x8456, //CJK UNIFIED IDEOGRAPH - 0xC88C: 0x8458, //CJK UNIFIED IDEOGRAPH - 0xC88D: 0x845D, //CJK UNIFIED IDEOGRAPH - 0xC88E: 0x845E, //CJK UNIFIED IDEOGRAPH - 0xC88F: 0x845F, //CJK UNIFIED IDEOGRAPH - 0xC890: 0x8460, //CJK UNIFIED IDEOGRAPH - 0xC891: 0x8462, //CJK UNIFIED IDEOGRAPH - 0xC892: 0x8464, //CJK UNIFIED IDEOGRAPH - 0xC893: 0x8465, //CJK UNIFIED IDEOGRAPH - 0xC894: 0x8466, //CJK UNIFIED IDEOGRAPH - 0xC895: 0x8467, //CJK UNIFIED IDEOGRAPH - 0xC896: 0x8468, //CJK UNIFIED IDEOGRAPH - 0xC897: 0x846A, //CJK UNIFIED IDEOGRAPH - 0xC898: 0x846E, //CJK UNIFIED IDEOGRAPH - 0xC899: 0x846F, //CJK UNIFIED IDEOGRAPH - 0xC89A: 0x8470, //CJK UNIFIED IDEOGRAPH - 0xC89B: 0x8472, //CJK UNIFIED IDEOGRAPH - 0xC89C: 0x8474, //CJK UNIFIED IDEOGRAPH - 0xC89D: 0x8477, //CJK UNIFIED IDEOGRAPH - 0xC89E: 0x8479, //CJK UNIFIED IDEOGRAPH - 0xC89F: 0x847B, //CJK UNIFIED IDEOGRAPH - 0xC8A0: 0x847C, //CJK UNIFIED IDEOGRAPH - 0xC8A1: 0x53D6, //CJK UNIFIED IDEOGRAPH - 0xC8A2: 0x5A36, //CJK UNIFIED IDEOGRAPH - 0xC8A3: 0x9F8B, //CJK UNIFIED IDEOGRAPH - 0xC8A4: 0x8DA3, //CJK UNIFIED IDEOGRAPH - 0xC8A5: 0x53BB, //CJK UNIFIED IDEOGRAPH - 0xC8A6: 0x5708, //CJK UNIFIED IDEOGRAPH - 0xC8A7: 0x98A7, //CJK UNIFIED IDEOGRAPH - 0xC8A8: 0x6743, //CJK UNIFIED IDEOGRAPH - 0xC8A9: 0x919B, //CJK UNIFIED IDEOGRAPH - 0xC8AA: 0x6CC9, //CJK UNIFIED IDEOGRAPH - 0xC8AB: 0x5168, //CJK UNIFIED IDEOGRAPH - 0xC8AC: 0x75CA, //CJK UNIFIED IDEOGRAPH - 0xC8AD: 0x62F3, //CJK UNIFIED IDEOGRAPH - 0xC8AE: 0x72AC, //CJK UNIFIED IDEOGRAPH - 0xC8AF: 0x5238, //CJK UNIFIED IDEOGRAPH - 0xC8B0: 0x529D, //CJK UNIFIED IDEOGRAPH - 0xC8B1: 0x7F3A, //CJK UNIFIED IDEOGRAPH - 0xC8B2: 0x7094, //CJK UNIFIED IDEOGRAPH - 0xC8B3: 0x7638, //CJK UNIFIED IDEOGRAPH - 0xC8B4: 0x5374, //CJK UNIFIED IDEOGRAPH - 0xC8B5: 0x9E4A, //CJK UNIFIED IDEOGRAPH - 0xC8B6: 0x69B7, //CJK UNIFIED IDEOGRAPH - 0xC8B7: 0x786E, //CJK UNIFIED IDEOGRAPH - 0xC8B8: 0x96C0, //CJK UNIFIED IDEOGRAPH - 0xC8B9: 0x88D9, //CJK UNIFIED IDEOGRAPH - 0xC8BA: 0x7FA4, //CJK UNIFIED IDEOGRAPH - 0xC8BB: 0x7136, //CJK UNIFIED IDEOGRAPH - 0xC8BC: 0x71C3, //CJK UNIFIED IDEOGRAPH - 0xC8BD: 0x5189, //CJK UNIFIED IDEOGRAPH - 0xC8BE: 0x67D3, //CJK UNIFIED IDEOGRAPH - 0xC8BF: 0x74E4, //CJK UNIFIED IDEOGRAPH - 0xC8C0: 0x58E4, //CJK UNIFIED IDEOGRAPH - 0xC8C1: 0x6518, //CJK UNIFIED IDEOGRAPH - 0xC8C2: 0x56B7, //CJK UNIFIED IDEOGRAPH - 0xC8C3: 0x8BA9, //CJK UNIFIED IDEOGRAPH - 0xC8C4: 0x9976, //CJK UNIFIED IDEOGRAPH - 0xC8C5: 0x6270, //CJK UNIFIED IDEOGRAPH - 0xC8C6: 0x7ED5, //CJK UNIFIED IDEOGRAPH - 0xC8C7: 0x60F9, //CJK UNIFIED IDEOGRAPH - 0xC8C8: 0x70ED, //CJK UNIFIED IDEOGRAPH - 0xC8C9: 0x58EC, //CJK UNIFIED IDEOGRAPH - 0xC8CA: 0x4EC1, //CJK UNIFIED IDEOGRAPH - 0xC8CB: 0x4EBA, //CJK UNIFIED IDEOGRAPH - 0xC8CC: 0x5FCD, //CJK UNIFIED IDEOGRAPH - 0xC8CD: 0x97E7, //CJK UNIFIED IDEOGRAPH - 0xC8CE: 0x4EFB, //CJK UNIFIED IDEOGRAPH - 0xC8CF: 0x8BA4, //CJK UNIFIED IDEOGRAPH - 0xC8D0: 0x5203, //CJK UNIFIED IDEOGRAPH - 0xC8D1: 0x598A, //CJK UNIFIED IDEOGRAPH - 0xC8D2: 0x7EAB, //CJK UNIFIED IDEOGRAPH - 0xC8D3: 0x6254, //CJK UNIFIED IDEOGRAPH - 0xC8D4: 0x4ECD, //CJK UNIFIED IDEOGRAPH - 0xC8D5: 0x65E5, //CJK UNIFIED IDEOGRAPH - 0xC8D6: 0x620E, //CJK UNIFIED IDEOGRAPH - 0xC8D7: 0x8338, //CJK UNIFIED IDEOGRAPH - 0xC8D8: 0x84C9, //CJK UNIFIED IDEOGRAPH - 0xC8D9: 0x8363, //CJK UNIFIED IDEOGRAPH - 0xC8DA: 0x878D, //CJK UNIFIED IDEOGRAPH - 0xC8DB: 0x7194, //CJK UNIFIED IDEOGRAPH - 0xC8DC: 0x6EB6, //CJK UNIFIED IDEOGRAPH - 0xC8DD: 0x5BB9, //CJK UNIFIED IDEOGRAPH - 0xC8DE: 0x7ED2, //CJK UNIFIED IDEOGRAPH - 0xC8DF: 0x5197, //CJK UNIFIED IDEOGRAPH - 0xC8E0: 0x63C9, //CJK UNIFIED IDEOGRAPH - 0xC8E1: 0x67D4, //CJK UNIFIED IDEOGRAPH - 0xC8E2: 0x8089, //CJK UNIFIED IDEOGRAPH - 0xC8E3: 0x8339, //CJK UNIFIED IDEOGRAPH - 0xC8E4: 0x8815, //CJK UNIFIED IDEOGRAPH - 0xC8E5: 0x5112, //CJK UNIFIED IDEOGRAPH - 0xC8E6: 0x5B7A, //CJK UNIFIED IDEOGRAPH - 0xC8E7: 0x5982, //CJK UNIFIED IDEOGRAPH - 0xC8E8: 0x8FB1, //CJK UNIFIED IDEOGRAPH - 0xC8E9: 0x4E73, //CJK UNIFIED IDEOGRAPH - 0xC8EA: 0x6C5D, //CJK UNIFIED IDEOGRAPH - 0xC8EB: 0x5165, //CJK UNIFIED IDEOGRAPH - 0xC8EC: 0x8925, //CJK UNIFIED IDEOGRAPH - 0xC8ED: 0x8F6F, //CJK UNIFIED IDEOGRAPH - 0xC8EE: 0x962E, //CJK UNIFIED IDEOGRAPH - 0xC8EF: 0x854A, //CJK UNIFIED IDEOGRAPH - 0xC8F0: 0x745E, //CJK UNIFIED IDEOGRAPH - 0xC8F1: 0x9510, //CJK UNIFIED IDEOGRAPH - 0xC8F2: 0x95F0, //CJK UNIFIED IDEOGRAPH - 0xC8F3: 0x6DA6, //CJK UNIFIED IDEOGRAPH - 0xC8F4: 0x82E5, //CJK UNIFIED IDEOGRAPH - 0xC8F5: 0x5F31, //CJK UNIFIED IDEOGRAPH - 0xC8F6: 0x6492, //CJK UNIFIED IDEOGRAPH - 0xC8F7: 0x6D12, //CJK UNIFIED IDEOGRAPH - 0xC8F8: 0x8428, //CJK UNIFIED IDEOGRAPH - 0xC8F9: 0x816E, //CJK UNIFIED IDEOGRAPH - 0xC8FA: 0x9CC3, //CJK UNIFIED IDEOGRAPH - 0xC8FB: 0x585E, //CJK UNIFIED IDEOGRAPH - 0xC8FC: 0x8D5B, //CJK UNIFIED IDEOGRAPH - 0xC8FD: 0x4E09, //CJK UNIFIED IDEOGRAPH - 0xC8FE: 0x53C1, //CJK UNIFIED IDEOGRAPH - 0xC940: 0x847D, //CJK UNIFIED IDEOGRAPH - 0xC941: 0x847E, //CJK UNIFIED IDEOGRAPH - 0xC942: 0x847F, //CJK UNIFIED IDEOGRAPH - 0xC943: 0x8480, //CJK UNIFIED IDEOGRAPH - 0xC944: 0x8481, //CJK UNIFIED IDEOGRAPH - 0xC945: 0x8483, //CJK UNIFIED IDEOGRAPH - 0xC946: 0x8484, //CJK UNIFIED IDEOGRAPH - 0xC947: 0x8485, //CJK UNIFIED IDEOGRAPH - 0xC948: 0x8486, //CJK UNIFIED IDEOGRAPH - 0xC949: 0x848A, //CJK UNIFIED IDEOGRAPH - 0xC94A: 0x848D, //CJK UNIFIED IDEOGRAPH - 0xC94B: 0x848F, //CJK UNIFIED IDEOGRAPH - 0xC94C: 0x8490, //CJK UNIFIED IDEOGRAPH - 0xC94D: 0x8491, //CJK UNIFIED IDEOGRAPH - 0xC94E: 0x8492, //CJK UNIFIED IDEOGRAPH - 0xC94F: 0x8493, //CJK UNIFIED IDEOGRAPH - 0xC950: 0x8494, //CJK UNIFIED IDEOGRAPH - 0xC951: 0x8495, //CJK UNIFIED IDEOGRAPH - 0xC952: 0x8496, //CJK UNIFIED IDEOGRAPH - 0xC953: 0x8498, //CJK UNIFIED IDEOGRAPH - 0xC954: 0x849A, //CJK UNIFIED IDEOGRAPH - 0xC955: 0x849B, //CJK UNIFIED IDEOGRAPH - 0xC956: 0x849D, //CJK UNIFIED IDEOGRAPH - 0xC957: 0x849E, //CJK UNIFIED IDEOGRAPH - 0xC958: 0x849F, //CJK UNIFIED IDEOGRAPH - 0xC959: 0x84A0, //CJK UNIFIED IDEOGRAPH - 0xC95A: 0x84A2, //CJK UNIFIED IDEOGRAPH - 0xC95B: 0x84A3, //CJK UNIFIED IDEOGRAPH - 0xC95C: 0x84A4, //CJK UNIFIED IDEOGRAPH - 0xC95D: 0x84A5, //CJK UNIFIED IDEOGRAPH - 0xC95E: 0x84A6, //CJK UNIFIED IDEOGRAPH - 0xC95F: 0x84A7, //CJK UNIFIED IDEOGRAPH - 0xC960: 0x84A8, //CJK UNIFIED IDEOGRAPH - 0xC961: 0x84A9, //CJK UNIFIED IDEOGRAPH - 0xC962: 0x84AA, //CJK UNIFIED IDEOGRAPH - 0xC963: 0x84AB, //CJK UNIFIED IDEOGRAPH - 0xC964: 0x84AC, //CJK UNIFIED IDEOGRAPH - 0xC965: 0x84AD, //CJK UNIFIED IDEOGRAPH - 0xC966: 0x84AE, //CJK UNIFIED IDEOGRAPH - 0xC967: 0x84B0, //CJK UNIFIED IDEOGRAPH - 0xC968: 0x84B1, //CJK UNIFIED IDEOGRAPH - 0xC969: 0x84B3, //CJK UNIFIED IDEOGRAPH - 0xC96A: 0x84B5, //CJK UNIFIED IDEOGRAPH - 0xC96B: 0x84B6, //CJK UNIFIED IDEOGRAPH - 0xC96C: 0x84B7, //CJK UNIFIED IDEOGRAPH - 0xC96D: 0x84BB, //CJK UNIFIED IDEOGRAPH - 0xC96E: 0x84BC, //CJK UNIFIED IDEOGRAPH - 0xC96F: 0x84BE, //CJK UNIFIED IDEOGRAPH - 0xC970: 0x84C0, //CJK UNIFIED IDEOGRAPH - 0xC971: 0x84C2, //CJK UNIFIED IDEOGRAPH - 0xC972: 0x84C3, //CJK UNIFIED IDEOGRAPH - 0xC973: 0x84C5, //CJK UNIFIED IDEOGRAPH - 0xC974: 0x84C6, //CJK UNIFIED IDEOGRAPH - 0xC975: 0x84C7, //CJK UNIFIED IDEOGRAPH - 0xC976: 0x84C8, //CJK UNIFIED IDEOGRAPH - 0xC977: 0x84CB, //CJK UNIFIED IDEOGRAPH - 0xC978: 0x84CC, //CJK UNIFIED IDEOGRAPH - 0xC979: 0x84CE, //CJK UNIFIED IDEOGRAPH - 0xC97A: 0x84CF, //CJK UNIFIED IDEOGRAPH - 0xC97B: 0x84D2, //CJK UNIFIED IDEOGRAPH - 0xC97C: 0x84D4, //CJK UNIFIED IDEOGRAPH - 0xC97D: 0x84D5, //CJK UNIFIED IDEOGRAPH - 0xC97E: 0x84D7, //CJK UNIFIED IDEOGRAPH - 0xC980: 0x84D8, //CJK UNIFIED IDEOGRAPH - 0xC981: 0x84D9, //CJK UNIFIED IDEOGRAPH - 0xC982: 0x84DA, //CJK UNIFIED IDEOGRAPH - 0xC983: 0x84DB, //CJK UNIFIED IDEOGRAPH - 0xC984: 0x84DC, //CJK UNIFIED IDEOGRAPH - 0xC985: 0x84DE, //CJK UNIFIED IDEOGRAPH - 0xC986: 0x84E1, //CJK UNIFIED IDEOGRAPH - 0xC987: 0x84E2, //CJK UNIFIED IDEOGRAPH - 0xC988: 0x84E4, //CJK UNIFIED IDEOGRAPH - 0xC989: 0x84E7, //CJK UNIFIED IDEOGRAPH - 0xC98A: 0x84E8, //CJK UNIFIED IDEOGRAPH - 0xC98B: 0x84E9, //CJK UNIFIED IDEOGRAPH - 0xC98C: 0x84EA, //CJK UNIFIED IDEOGRAPH - 0xC98D: 0x84EB, //CJK UNIFIED IDEOGRAPH - 0xC98E: 0x84ED, //CJK UNIFIED IDEOGRAPH - 0xC98F: 0x84EE, //CJK UNIFIED IDEOGRAPH - 0xC990: 0x84EF, //CJK UNIFIED IDEOGRAPH - 0xC991: 0x84F1, //CJK UNIFIED IDEOGRAPH - 0xC992: 0x84F2, //CJK UNIFIED IDEOGRAPH - 0xC993: 0x84F3, //CJK UNIFIED IDEOGRAPH - 0xC994: 0x84F4, //CJK UNIFIED IDEOGRAPH - 0xC995: 0x84F5, //CJK UNIFIED IDEOGRAPH - 0xC996: 0x84F6, //CJK UNIFIED IDEOGRAPH - 0xC997: 0x84F7, //CJK UNIFIED IDEOGRAPH - 0xC998: 0x84F8, //CJK UNIFIED IDEOGRAPH - 0xC999: 0x84F9, //CJK UNIFIED IDEOGRAPH - 0xC99A: 0x84FA, //CJK UNIFIED IDEOGRAPH - 0xC99B: 0x84FB, //CJK UNIFIED IDEOGRAPH - 0xC99C: 0x84FD, //CJK UNIFIED IDEOGRAPH - 0xC99D: 0x84FE, //CJK UNIFIED IDEOGRAPH - 0xC99E: 0x8500, //CJK UNIFIED IDEOGRAPH - 0xC99F: 0x8501, //CJK UNIFIED IDEOGRAPH - 0xC9A0: 0x8502, //CJK UNIFIED IDEOGRAPH - 0xC9A1: 0x4F1E, //CJK UNIFIED IDEOGRAPH - 0xC9A2: 0x6563, //CJK UNIFIED IDEOGRAPH - 0xC9A3: 0x6851, //CJK UNIFIED IDEOGRAPH - 0xC9A4: 0x55D3, //CJK UNIFIED IDEOGRAPH - 0xC9A5: 0x4E27, //CJK UNIFIED IDEOGRAPH - 0xC9A6: 0x6414, //CJK UNIFIED IDEOGRAPH - 0xC9A7: 0x9A9A, //CJK UNIFIED IDEOGRAPH - 0xC9A8: 0x626B, //CJK UNIFIED IDEOGRAPH - 0xC9A9: 0x5AC2, //CJK UNIFIED IDEOGRAPH - 0xC9AA: 0x745F, //CJK UNIFIED IDEOGRAPH - 0xC9AB: 0x8272, //CJK UNIFIED IDEOGRAPH - 0xC9AC: 0x6DA9, //CJK UNIFIED IDEOGRAPH - 0xC9AD: 0x68EE, //CJK UNIFIED IDEOGRAPH - 0xC9AE: 0x50E7, //CJK UNIFIED IDEOGRAPH - 0xC9AF: 0x838E, //CJK UNIFIED IDEOGRAPH - 0xC9B0: 0x7802, //CJK UNIFIED IDEOGRAPH - 0xC9B1: 0x6740, //CJK UNIFIED IDEOGRAPH - 0xC9B2: 0x5239, //CJK UNIFIED IDEOGRAPH - 0xC9B3: 0x6C99, //CJK UNIFIED IDEOGRAPH - 0xC9B4: 0x7EB1, //CJK UNIFIED IDEOGRAPH - 0xC9B5: 0x50BB, //CJK UNIFIED IDEOGRAPH - 0xC9B6: 0x5565, //CJK UNIFIED IDEOGRAPH - 0xC9B7: 0x715E, //CJK UNIFIED IDEOGRAPH - 0xC9B8: 0x7B5B, //CJK UNIFIED IDEOGRAPH - 0xC9B9: 0x6652, //CJK UNIFIED IDEOGRAPH - 0xC9BA: 0x73CA, //CJK UNIFIED IDEOGRAPH - 0xC9BB: 0x82EB, //CJK UNIFIED IDEOGRAPH - 0xC9BC: 0x6749, //CJK UNIFIED IDEOGRAPH - 0xC9BD: 0x5C71, //CJK UNIFIED IDEOGRAPH - 0xC9BE: 0x5220, //CJK UNIFIED IDEOGRAPH - 0xC9BF: 0x717D, //CJK UNIFIED IDEOGRAPH - 0xC9C0: 0x886B, //CJK UNIFIED IDEOGRAPH - 0xC9C1: 0x95EA, //CJK UNIFIED IDEOGRAPH - 0xC9C2: 0x9655, //CJK UNIFIED IDEOGRAPH - 0xC9C3: 0x64C5, //CJK UNIFIED IDEOGRAPH - 0xC9C4: 0x8D61, //CJK UNIFIED IDEOGRAPH - 0xC9C5: 0x81B3, //CJK UNIFIED IDEOGRAPH - 0xC9C6: 0x5584, //CJK UNIFIED IDEOGRAPH - 0xC9C7: 0x6C55, //CJK UNIFIED IDEOGRAPH - 0xC9C8: 0x6247, //CJK UNIFIED IDEOGRAPH - 0xC9C9: 0x7F2E, //CJK UNIFIED IDEOGRAPH - 0xC9CA: 0x5892, //CJK UNIFIED IDEOGRAPH - 0xC9CB: 0x4F24, //CJK UNIFIED IDEOGRAPH - 0xC9CC: 0x5546, //CJK UNIFIED IDEOGRAPH - 0xC9CD: 0x8D4F, //CJK UNIFIED IDEOGRAPH - 0xC9CE: 0x664C, //CJK UNIFIED IDEOGRAPH - 0xC9CF: 0x4E0A, //CJK UNIFIED IDEOGRAPH - 0xC9D0: 0x5C1A, //CJK UNIFIED IDEOGRAPH - 0xC9D1: 0x88F3, //CJK UNIFIED IDEOGRAPH - 0xC9D2: 0x68A2, //CJK UNIFIED IDEOGRAPH - 0xC9D3: 0x634E, //CJK UNIFIED IDEOGRAPH - 0xC9D4: 0x7A0D, //CJK UNIFIED IDEOGRAPH - 0xC9D5: 0x70E7, //CJK UNIFIED IDEOGRAPH - 0xC9D6: 0x828D, //CJK UNIFIED IDEOGRAPH - 0xC9D7: 0x52FA, //CJK UNIFIED IDEOGRAPH - 0xC9D8: 0x97F6, //CJK UNIFIED IDEOGRAPH - 0xC9D9: 0x5C11, //CJK UNIFIED IDEOGRAPH - 0xC9DA: 0x54E8, //CJK UNIFIED IDEOGRAPH - 0xC9DB: 0x90B5, //CJK UNIFIED IDEOGRAPH - 0xC9DC: 0x7ECD, //CJK UNIFIED IDEOGRAPH - 0xC9DD: 0x5962, //CJK UNIFIED IDEOGRAPH - 0xC9DE: 0x8D4A, //CJK UNIFIED IDEOGRAPH - 0xC9DF: 0x86C7, //CJK UNIFIED IDEOGRAPH - 0xC9E0: 0x820C, //CJK UNIFIED IDEOGRAPH - 0xC9E1: 0x820D, //CJK UNIFIED IDEOGRAPH - 0xC9E2: 0x8D66, //CJK UNIFIED IDEOGRAPH - 0xC9E3: 0x6444, //CJK UNIFIED IDEOGRAPH - 0xC9E4: 0x5C04, //CJK UNIFIED IDEOGRAPH - 0xC9E5: 0x6151, //CJK UNIFIED IDEOGRAPH - 0xC9E6: 0x6D89, //CJK UNIFIED IDEOGRAPH - 0xC9E7: 0x793E, //CJK UNIFIED IDEOGRAPH - 0xC9E8: 0x8BBE, //CJK UNIFIED IDEOGRAPH - 0xC9E9: 0x7837, //CJK UNIFIED IDEOGRAPH - 0xC9EA: 0x7533, //CJK UNIFIED IDEOGRAPH - 0xC9EB: 0x547B, //CJK UNIFIED IDEOGRAPH - 0xC9EC: 0x4F38, //CJK UNIFIED IDEOGRAPH - 0xC9ED: 0x8EAB, //CJK UNIFIED IDEOGRAPH - 0xC9EE: 0x6DF1, //CJK UNIFIED IDEOGRAPH - 0xC9EF: 0x5A20, //CJK UNIFIED IDEOGRAPH - 0xC9F0: 0x7EC5, //CJK UNIFIED IDEOGRAPH - 0xC9F1: 0x795E, //CJK UNIFIED IDEOGRAPH - 0xC9F2: 0x6C88, //CJK UNIFIED IDEOGRAPH - 0xC9F3: 0x5BA1, //CJK UNIFIED IDEOGRAPH - 0xC9F4: 0x5A76, //CJK UNIFIED IDEOGRAPH - 0xC9F5: 0x751A, //CJK UNIFIED IDEOGRAPH - 0xC9F6: 0x80BE, //CJK UNIFIED IDEOGRAPH - 0xC9F7: 0x614E, //CJK UNIFIED IDEOGRAPH - 0xC9F8: 0x6E17, //CJK UNIFIED IDEOGRAPH - 0xC9F9: 0x58F0, //CJK UNIFIED IDEOGRAPH - 0xC9FA: 0x751F, //CJK UNIFIED IDEOGRAPH - 0xC9FB: 0x7525, //CJK UNIFIED IDEOGRAPH - 0xC9FC: 0x7272, //CJK UNIFIED IDEOGRAPH - 0xC9FD: 0x5347, //CJK UNIFIED IDEOGRAPH - 0xC9FE: 0x7EF3, //CJK UNIFIED IDEOGRAPH - 0xCA40: 0x8503, //CJK UNIFIED IDEOGRAPH - 0xCA41: 0x8504, //CJK UNIFIED IDEOGRAPH - 0xCA42: 0x8505, //CJK UNIFIED IDEOGRAPH - 0xCA43: 0x8506, //CJK UNIFIED IDEOGRAPH - 0xCA44: 0x8507, //CJK UNIFIED IDEOGRAPH - 0xCA45: 0x8508, //CJK UNIFIED IDEOGRAPH - 0xCA46: 0x8509, //CJK UNIFIED IDEOGRAPH - 0xCA47: 0x850A, //CJK UNIFIED IDEOGRAPH - 0xCA48: 0x850B, //CJK UNIFIED IDEOGRAPH - 0xCA49: 0x850D, //CJK UNIFIED IDEOGRAPH - 0xCA4A: 0x850E, //CJK UNIFIED IDEOGRAPH - 0xCA4B: 0x850F, //CJK UNIFIED IDEOGRAPH - 0xCA4C: 0x8510, //CJK UNIFIED IDEOGRAPH - 0xCA4D: 0x8512, //CJK UNIFIED IDEOGRAPH - 0xCA4E: 0x8514, //CJK UNIFIED IDEOGRAPH - 0xCA4F: 0x8515, //CJK UNIFIED IDEOGRAPH - 0xCA50: 0x8516, //CJK UNIFIED IDEOGRAPH - 0xCA51: 0x8518, //CJK UNIFIED IDEOGRAPH - 0xCA52: 0x8519, //CJK UNIFIED IDEOGRAPH - 0xCA53: 0x851B, //CJK UNIFIED IDEOGRAPH - 0xCA54: 0x851C, //CJK UNIFIED IDEOGRAPH - 0xCA55: 0x851D, //CJK UNIFIED IDEOGRAPH - 0xCA56: 0x851E, //CJK UNIFIED IDEOGRAPH - 0xCA57: 0x8520, //CJK UNIFIED IDEOGRAPH - 0xCA58: 0x8522, //CJK UNIFIED IDEOGRAPH - 0xCA59: 0x8523, //CJK UNIFIED IDEOGRAPH - 0xCA5A: 0x8524, //CJK UNIFIED IDEOGRAPH - 0xCA5B: 0x8525, //CJK UNIFIED IDEOGRAPH - 0xCA5C: 0x8526, //CJK UNIFIED IDEOGRAPH - 0xCA5D: 0x8527, //CJK UNIFIED IDEOGRAPH - 0xCA5E: 0x8528, //CJK UNIFIED IDEOGRAPH - 0xCA5F: 0x8529, //CJK UNIFIED IDEOGRAPH - 0xCA60: 0x852A, //CJK UNIFIED IDEOGRAPH - 0xCA61: 0x852D, //CJK UNIFIED IDEOGRAPH - 0xCA62: 0x852E, //CJK UNIFIED IDEOGRAPH - 0xCA63: 0x852F, //CJK UNIFIED IDEOGRAPH - 0xCA64: 0x8530, //CJK UNIFIED IDEOGRAPH - 0xCA65: 0x8531, //CJK UNIFIED IDEOGRAPH - 0xCA66: 0x8532, //CJK UNIFIED IDEOGRAPH - 0xCA67: 0x8533, //CJK UNIFIED IDEOGRAPH - 0xCA68: 0x8534, //CJK UNIFIED IDEOGRAPH - 0xCA69: 0x8535, //CJK UNIFIED IDEOGRAPH - 0xCA6A: 0x8536, //CJK UNIFIED IDEOGRAPH - 0xCA6B: 0x853E, //CJK UNIFIED IDEOGRAPH - 0xCA6C: 0x853F, //CJK UNIFIED IDEOGRAPH - 0xCA6D: 0x8540, //CJK UNIFIED IDEOGRAPH - 0xCA6E: 0x8541, //CJK UNIFIED IDEOGRAPH - 0xCA6F: 0x8542, //CJK UNIFIED IDEOGRAPH - 0xCA70: 0x8544, //CJK UNIFIED IDEOGRAPH - 0xCA71: 0x8545, //CJK UNIFIED IDEOGRAPH - 0xCA72: 0x8546, //CJK UNIFIED IDEOGRAPH - 0xCA73: 0x8547, //CJK UNIFIED IDEOGRAPH - 0xCA74: 0x854B, //CJK UNIFIED IDEOGRAPH - 0xCA75: 0x854C, //CJK UNIFIED IDEOGRAPH - 0xCA76: 0x854D, //CJK UNIFIED IDEOGRAPH - 0xCA77: 0x854E, //CJK UNIFIED IDEOGRAPH - 0xCA78: 0x854F, //CJK UNIFIED IDEOGRAPH - 0xCA79: 0x8550, //CJK UNIFIED IDEOGRAPH - 0xCA7A: 0x8551, //CJK UNIFIED IDEOGRAPH - 0xCA7B: 0x8552, //CJK UNIFIED IDEOGRAPH - 0xCA7C: 0x8553, //CJK UNIFIED IDEOGRAPH - 0xCA7D: 0x8554, //CJK UNIFIED IDEOGRAPH - 0xCA7E: 0x8555, //CJK UNIFIED IDEOGRAPH - 0xCA80: 0x8557, //CJK UNIFIED IDEOGRAPH - 0xCA81: 0x8558, //CJK UNIFIED IDEOGRAPH - 0xCA82: 0x855A, //CJK UNIFIED IDEOGRAPH - 0xCA83: 0x855B, //CJK UNIFIED IDEOGRAPH - 0xCA84: 0x855C, //CJK UNIFIED IDEOGRAPH - 0xCA85: 0x855D, //CJK UNIFIED IDEOGRAPH - 0xCA86: 0x855F, //CJK UNIFIED IDEOGRAPH - 0xCA87: 0x8560, //CJK UNIFIED IDEOGRAPH - 0xCA88: 0x8561, //CJK UNIFIED IDEOGRAPH - 0xCA89: 0x8562, //CJK UNIFIED IDEOGRAPH - 0xCA8A: 0x8563, //CJK UNIFIED IDEOGRAPH - 0xCA8B: 0x8565, //CJK UNIFIED IDEOGRAPH - 0xCA8C: 0x8566, //CJK UNIFIED IDEOGRAPH - 0xCA8D: 0x8567, //CJK UNIFIED IDEOGRAPH - 0xCA8E: 0x8569, //CJK UNIFIED IDEOGRAPH - 0xCA8F: 0x856A, //CJK UNIFIED IDEOGRAPH - 0xCA90: 0x856B, //CJK UNIFIED IDEOGRAPH - 0xCA91: 0x856C, //CJK UNIFIED IDEOGRAPH - 0xCA92: 0x856D, //CJK UNIFIED IDEOGRAPH - 0xCA93: 0x856E, //CJK UNIFIED IDEOGRAPH - 0xCA94: 0x856F, //CJK UNIFIED IDEOGRAPH - 0xCA95: 0x8570, //CJK UNIFIED IDEOGRAPH - 0xCA96: 0x8571, //CJK UNIFIED IDEOGRAPH - 0xCA97: 0x8573, //CJK UNIFIED IDEOGRAPH - 0xCA98: 0x8575, //CJK UNIFIED IDEOGRAPH - 0xCA99: 0x8576, //CJK UNIFIED IDEOGRAPH - 0xCA9A: 0x8577, //CJK UNIFIED IDEOGRAPH - 0xCA9B: 0x8578, //CJK UNIFIED IDEOGRAPH - 0xCA9C: 0x857C, //CJK UNIFIED IDEOGRAPH - 0xCA9D: 0x857D, //CJK UNIFIED IDEOGRAPH - 0xCA9E: 0x857F, //CJK UNIFIED IDEOGRAPH - 0xCA9F: 0x8580, //CJK UNIFIED IDEOGRAPH - 0xCAA0: 0x8581, //CJK UNIFIED IDEOGRAPH - 0xCAA1: 0x7701, //CJK UNIFIED IDEOGRAPH - 0xCAA2: 0x76DB, //CJK UNIFIED IDEOGRAPH - 0xCAA3: 0x5269, //CJK UNIFIED IDEOGRAPH - 0xCAA4: 0x80DC, //CJK UNIFIED IDEOGRAPH - 0xCAA5: 0x5723, //CJK UNIFIED IDEOGRAPH - 0xCAA6: 0x5E08, //CJK UNIFIED IDEOGRAPH - 0xCAA7: 0x5931, //CJK UNIFIED IDEOGRAPH - 0xCAA8: 0x72EE, //CJK UNIFIED IDEOGRAPH - 0xCAA9: 0x65BD, //CJK UNIFIED IDEOGRAPH - 0xCAAA: 0x6E7F, //CJK UNIFIED IDEOGRAPH - 0xCAAB: 0x8BD7, //CJK UNIFIED IDEOGRAPH - 0xCAAC: 0x5C38, //CJK UNIFIED IDEOGRAPH - 0xCAAD: 0x8671, //CJK UNIFIED IDEOGRAPH - 0xCAAE: 0x5341, //CJK UNIFIED IDEOGRAPH - 0xCAAF: 0x77F3, //CJK UNIFIED IDEOGRAPH - 0xCAB0: 0x62FE, //CJK UNIFIED IDEOGRAPH - 0xCAB1: 0x65F6, //CJK UNIFIED IDEOGRAPH - 0xCAB2: 0x4EC0, //CJK UNIFIED IDEOGRAPH - 0xCAB3: 0x98DF, //CJK UNIFIED IDEOGRAPH - 0xCAB4: 0x8680, //CJK UNIFIED IDEOGRAPH - 0xCAB5: 0x5B9E, //CJK UNIFIED IDEOGRAPH - 0xCAB6: 0x8BC6, //CJK UNIFIED IDEOGRAPH - 0xCAB7: 0x53F2, //CJK UNIFIED IDEOGRAPH - 0xCAB8: 0x77E2, //CJK UNIFIED IDEOGRAPH - 0xCAB9: 0x4F7F, //CJK UNIFIED IDEOGRAPH - 0xCABA: 0x5C4E, //CJK UNIFIED IDEOGRAPH - 0xCABB: 0x9A76, //CJK UNIFIED IDEOGRAPH - 0xCABC: 0x59CB, //CJK UNIFIED IDEOGRAPH - 0xCABD: 0x5F0F, //CJK UNIFIED IDEOGRAPH - 0xCABE: 0x793A, //CJK UNIFIED IDEOGRAPH - 0xCABF: 0x58EB, //CJK UNIFIED IDEOGRAPH - 0xCAC0: 0x4E16, //CJK UNIFIED IDEOGRAPH - 0xCAC1: 0x67FF, //CJK UNIFIED IDEOGRAPH - 0xCAC2: 0x4E8B, //CJK UNIFIED IDEOGRAPH - 0xCAC3: 0x62ED, //CJK UNIFIED IDEOGRAPH - 0xCAC4: 0x8A93, //CJK UNIFIED IDEOGRAPH - 0xCAC5: 0x901D, //CJK UNIFIED IDEOGRAPH - 0xCAC6: 0x52BF, //CJK UNIFIED IDEOGRAPH - 0xCAC7: 0x662F, //CJK UNIFIED IDEOGRAPH - 0xCAC8: 0x55DC, //CJK UNIFIED IDEOGRAPH - 0xCAC9: 0x566C, //CJK UNIFIED IDEOGRAPH - 0xCACA: 0x9002, //CJK UNIFIED IDEOGRAPH - 0xCACB: 0x4ED5, //CJK UNIFIED IDEOGRAPH - 0xCACC: 0x4F8D, //CJK UNIFIED IDEOGRAPH - 0xCACD: 0x91CA, //CJK UNIFIED IDEOGRAPH - 0xCACE: 0x9970, //CJK UNIFIED IDEOGRAPH - 0xCACF: 0x6C0F, //CJK UNIFIED IDEOGRAPH - 0xCAD0: 0x5E02, //CJK UNIFIED IDEOGRAPH - 0xCAD1: 0x6043, //CJK UNIFIED IDEOGRAPH - 0xCAD2: 0x5BA4, //CJK UNIFIED IDEOGRAPH - 0xCAD3: 0x89C6, //CJK UNIFIED IDEOGRAPH - 0xCAD4: 0x8BD5, //CJK UNIFIED IDEOGRAPH - 0xCAD5: 0x6536, //CJK UNIFIED IDEOGRAPH - 0xCAD6: 0x624B, //CJK UNIFIED IDEOGRAPH - 0xCAD7: 0x9996, //CJK UNIFIED IDEOGRAPH - 0xCAD8: 0x5B88, //CJK UNIFIED IDEOGRAPH - 0xCAD9: 0x5BFF, //CJK UNIFIED IDEOGRAPH - 0xCADA: 0x6388, //CJK UNIFIED IDEOGRAPH - 0xCADB: 0x552E, //CJK UNIFIED IDEOGRAPH - 0xCADC: 0x53D7, //CJK UNIFIED IDEOGRAPH - 0xCADD: 0x7626, //CJK UNIFIED IDEOGRAPH - 0xCADE: 0x517D, //CJK UNIFIED IDEOGRAPH - 0xCADF: 0x852C, //CJK UNIFIED IDEOGRAPH - 0xCAE0: 0x67A2, //CJK UNIFIED IDEOGRAPH - 0xCAE1: 0x68B3, //CJK UNIFIED IDEOGRAPH - 0xCAE2: 0x6B8A, //CJK UNIFIED IDEOGRAPH - 0xCAE3: 0x6292, //CJK UNIFIED IDEOGRAPH - 0xCAE4: 0x8F93, //CJK UNIFIED IDEOGRAPH - 0xCAE5: 0x53D4, //CJK UNIFIED IDEOGRAPH - 0xCAE6: 0x8212, //CJK UNIFIED IDEOGRAPH - 0xCAE7: 0x6DD1, //CJK UNIFIED IDEOGRAPH - 0xCAE8: 0x758F, //CJK UNIFIED IDEOGRAPH - 0xCAE9: 0x4E66, //CJK UNIFIED IDEOGRAPH - 0xCAEA: 0x8D4E, //CJK UNIFIED IDEOGRAPH - 0xCAEB: 0x5B70, //CJK UNIFIED IDEOGRAPH - 0xCAEC: 0x719F, //CJK UNIFIED IDEOGRAPH - 0xCAED: 0x85AF, //CJK UNIFIED IDEOGRAPH - 0xCAEE: 0x6691, //CJK UNIFIED IDEOGRAPH - 0xCAEF: 0x66D9, //CJK UNIFIED IDEOGRAPH - 0xCAF0: 0x7F72, //CJK UNIFIED IDEOGRAPH - 0xCAF1: 0x8700, //CJK UNIFIED IDEOGRAPH - 0xCAF2: 0x9ECD, //CJK UNIFIED IDEOGRAPH - 0xCAF3: 0x9F20, //CJK UNIFIED IDEOGRAPH - 0xCAF4: 0x5C5E, //CJK UNIFIED IDEOGRAPH - 0xCAF5: 0x672F, //CJK UNIFIED IDEOGRAPH - 0xCAF6: 0x8FF0, //CJK UNIFIED IDEOGRAPH - 0xCAF7: 0x6811, //CJK UNIFIED IDEOGRAPH - 0xCAF8: 0x675F, //CJK UNIFIED IDEOGRAPH - 0xCAF9: 0x620D, //CJK UNIFIED IDEOGRAPH - 0xCAFA: 0x7AD6, //CJK UNIFIED IDEOGRAPH - 0xCAFB: 0x5885, //CJK UNIFIED IDEOGRAPH - 0xCAFC: 0x5EB6, //CJK UNIFIED IDEOGRAPH - 0xCAFD: 0x6570, //CJK UNIFIED IDEOGRAPH - 0xCAFE: 0x6F31, //CJK UNIFIED IDEOGRAPH - 0xCB40: 0x8582, //CJK UNIFIED IDEOGRAPH - 0xCB41: 0x8583, //CJK UNIFIED IDEOGRAPH - 0xCB42: 0x8586, //CJK UNIFIED IDEOGRAPH - 0xCB43: 0x8588, //CJK UNIFIED IDEOGRAPH - 0xCB44: 0x8589, //CJK UNIFIED IDEOGRAPH - 0xCB45: 0x858A, //CJK UNIFIED IDEOGRAPH - 0xCB46: 0x858B, //CJK UNIFIED IDEOGRAPH - 0xCB47: 0x858C, //CJK UNIFIED IDEOGRAPH - 0xCB48: 0x858D, //CJK UNIFIED IDEOGRAPH - 0xCB49: 0x858E, //CJK UNIFIED IDEOGRAPH - 0xCB4A: 0x8590, //CJK UNIFIED IDEOGRAPH - 0xCB4B: 0x8591, //CJK UNIFIED IDEOGRAPH - 0xCB4C: 0x8592, //CJK UNIFIED IDEOGRAPH - 0xCB4D: 0x8593, //CJK UNIFIED IDEOGRAPH - 0xCB4E: 0x8594, //CJK UNIFIED IDEOGRAPH - 0xCB4F: 0x8595, //CJK UNIFIED IDEOGRAPH - 0xCB50: 0x8596, //CJK UNIFIED IDEOGRAPH - 0xCB51: 0x8597, //CJK UNIFIED IDEOGRAPH - 0xCB52: 0x8598, //CJK UNIFIED IDEOGRAPH - 0xCB53: 0x8599, //CJK UNIFIED IDEOGRAPH - 0xCB54: 0x859A, //CJK UNIFIED IDEOGRAPH - 0xCB55: 0x859D, //CJK UNIFIED IDEOGRAPH - 0xCB56: 0x859E, //CJK UNIFIED IDEOGRAPH - 0xCB57: 0x859F, //CJK UNIFIED IDEOGRAPH - 0xCB58: 0x85A0, //CJK UNIFIED IDEOGRAPH - 0xCB59: 0x85A1, //CJK UNIFIED IDEOGRAPH - 0xCB5A: 0x85A2, //CJK UNIFIED IDEOGRAPH - 0xCB5B: 0x85A3, //CJK UNIFIED IDEOGRAPH - 0xCB5C: 0x85A5, //CJK UNIFIED IDEOGRAPH - 0xCB5D: 0x85A6, //CJK UNIFIED IDEOGRAPH - 0xCB5E: 0x85A7, //CJK UNIFIED IDEOGRAPH - 0xCB5F: 0x85A9, //CJK UNIFIED IDEOGRAPH - 0xCB60: 0x85AB, //CJK UNIFIED IDEOGRAPH - 0xCB61: 0x85AC, //CJK UNIFIED IDEOGRAPH - 0xCB62: 0x85AD, //CJK UNIFIED IDEOGRAPH - 0xCB63: 0x85B1, //CJK UNIFIED IDEOGRAPH - 0xCB64: 0x85B2, //CJK UNIFIED IDEOGRAPH - 0xCB65: 0x85B3, //CJK UNIFIED IDEOGRAPH - 0xCB66: 0x85B4, //CJK UNIFIED IDEOGRAPH - 0xCB67: 0x85B5, //CJK UNIFIED IDEOGRAPH - 0xCB68: 0x85B6, //CJK UNIFIED IDEOGRAPH - 0xCB69: 0x85B8, //CJK UNIFIED IDEOGRAPH - 0xCB6A: 0x85BA, //CJK UNIFIED IDEOGRAPH - 0xCB6B: 0x85BB, //CJK UNIFIED IDEOGRAPH - 0xCB6C: 0x85BC, //CJK UNIFIED IDEOGRAPH - 0xCB6D: 0x85BD, //CJK UNIFIED IDEOGRAPH - 0xCB6E: 0x85BE, //CJK UNIFIED IDEOGRAPH - 0xCB6F: 0x85BF, //CJK UNIFIED IDEOGRAPH - 0xCB70: 0x85C0, //CJK UNIFIED IDEOGRAPH - 0xCB71: 0x85C2, //CJK UNIFIED IDEOGRAPH - 0xCB72: 0x85C3, //CJK UNIFIED IDEOGRAPH - 0xCB73: 0x85C4, //CJK UNIFIED IDEOGRAPH - 0xCB74: 0x85C5, //CJK UNIFIED IDEOGRAPH - 0xCB75: 0x85C6, //CJK UNIFIED IDEOGRAPH - 0xCB76: 0x85C7, //CJK UNIFIED IDEOGRAPH - 0xCB77: 0x85C8, //CJK UNIFIED IDEOGRAPH - 0xCB78: 0x85CA, //CJK UNIFIED IDEOGRAPH - 0xCB79: 0x85CB, //CJK UNIFIED IDEOGRAPH - 0xCB7A: 0x85CC, //CJK UNIFIED IDEOGRAPH - 0xCB7B: 0x85CD, //CJK UNIFIED IDEOGRAPH - 0xCB7C: 0x85CE, //CJK UNIFIED IDEOGRAPH - 0xCB7D: 0x85D1, //CJK UNIFIED IDEOGRAPH - 0xCB7E: 0x85D2, //CJK UNIFIED IDEOGRAPH - 0xCB80: 0x85D4, //CJK UNIFIED IDEOGRAPH - 0xCB81: 0x85D6, //CJK UNIFIED IDEOGRAPH - 0xCB82: 0x85D7, //CJK UNIFIED IDEOGRAPH - 0xCB83: 0x85D8, //CJK UNIFIED IDEOGRAPH - 0xCB84: 0x85D9, //CJK UNIFIED IDEOGRAPH - 0xCB85: 0x85DA, //CJK UNIFIED IDEOGRAPH - 0xCB86: 0x85DB, //CJK UNIFIED IDEOGRAPH - 0xCB87: 0x85DD, //CJK UNIFIED IDEOGRAPH - 0xCB88: 0x85DE, //CJK UNIFIED IDEOGRAPH - 0xCB89: 0x85DF, //CJK UNIFIED IDEOGRAPH - 0xCB8A: 0x85E0, //CJK UNIFIED IDEOGRAPH - 0xCB8B: 0x85E1, //CJK UNIFIED IDEOGRAPH - 0xCB8C: 0x85E2, //CJK UNIFIED IDEOGRAPH - 0xCB8D: 0x85E3, //CJK UNIFIED IDEOGRAPH - 0xCB8E: 0x85E5, //CJK UNIFIED IDEOGRAPH - 0xCB8F: 0x85E6, //CJK UNIFIED IDEOGRAPH - 0xCB90: 0x85E7, //CJK UNIFIED IDEOGRAPH - 0xCB91: 0x85E8, //CJK UNIFIED IDEOGRAPH - 0xCB92: 0x85EA, //CJK UNIFIED IDEOGRAPH - 0xCB93: 0x85EB, //CJK UNIFIED IDEOGRAPH - 0xCB94: 0x85EC, //CJK UNIFIED IDEOGRAPH - 0xCB95: 0x85ED, //CJK UNIFIED IDEOGRAPH - 0xCB96: 0x85EE, //CJK UNIFIED IDEOGRAPH - 0xCB97: 0x85EF, //CJK UNIFIED IDEOGRAPH - 0xCB98: 0x85F0, //CJK UNIFIED IDEOGRAPH - 0xCB99: 0x85F1, //CJK UNIFIED IDEOGRAPH - 0xCB9A: 0x85F2, //CJK UNIFIED IDEOGRAPH - 0xCB9B: 0x85F3, //CJK UNIFIED IDEOGRAPH - 0xCB9C: 0x85F4, //CJK UNIFIED IDEOGRAPH - 0xCB9D: 0x85F5, //CJK UNIFIED IDEOGRAPH - 0xCB9E: 0x85F6, //CJK UNIFIED IDEOGRAPH - 0xCB9F: 0x85F7, //CJK UNIFIED IDEOGRAPH - 0xCBA0: 0x85F8, //CJK UNIFIED IDEOGRAPH - 0xCBA1: 0x6055, //CJK UNIFIED IDEOGRAPH - 0xCBA2: 0x5237, //CJK UNIFIED IDEOGRAPH - 0xCBA3: 0x800D, //CJK UNIFIED IDEOGRAPH - 0xCBA4: 0x6454, //CJK UNIFIED IDEOGRAPH - 0xCBA5: 0x8870, //CJK UNIFIED IDEOGRAPH - 0xCBA6: 0x7529, //CJK UNIFIED IDEOGRAPH - 0xCBA7: 0x5E05, //CJK UNIFIED IDEOGRAPH - 0xCBA8: 0x6813, //CJK UNIFIED IDEOGRAPH - 0xCBA9: 0x62F4, //CJK UNIFIED IDEOGRAPH - 0xCBAA: 0x971C, //CJK UNIFIED IDEOGRAPH - 0xCBAB: 0x53CC, //CJK UNIFIED IDEOGRAPH - 0xCBAC: 0x723D, //CJK UNIFIED IDEOGRAPH - 0xCBAD: 0x8C01, //CJK UNIFIED IDEOGRAPH - 0xCBAE: 0x6C34, //CJK UNIFIED IDEOGRAPH - 0xCBAF: 0x7761, //CJK UNIFIED IDEOGRAPH - 0xCBB0: 0x7A0E, //CJK UNIFIED IDEOGRAPH - 0xCBB1: 0x542E, //CJK UNIFIED IDEOGRAPH - 0xCBB2: 0x77AC, //CJK UNIFIED IDEOGRAPH - 0xCBB3: 0x987A, //CJK UNIFIED IDEOGRAPH - 0xCBB4: 0x821C, //CJK UNIFIED IDEOGRAPH - 0xCBB5: 0x8BF4, //CJK UNIFIED IDEOGRAPH - 0xCBB6: 0x7855, //CJK UNIFIED IDEOGRAPH - 0xCBB7: 0x6714, //CJK UNIFIED IDEOGRAPH - 0xCBB8: 0x70C1, //CJK UNIFIED IDEOGRAPH - 0xCBB9: 0x65AF, //CJK UNIFIED IDEOGRAPH - 0xCBBA: 0x6495, //CJK UNIFIED IDEOGRAPH - 0xCBBB: 0x5636, //CJK UNIFIED IDEOGRAPH - 0xCBBC: 0x601D, //CJK UNIFIED IDEOGRAPH - 0xCBBD: 0x79C1, //CJK UNIFIED IDEOGRAPH - 0xCBBE: 0x53F8, //CJK UNIFIED IDEOGRAPH - 0xCBBF: 0x4E1D, //CJK UNIFIED IDEOGRAPH - 0xCBC0: 0x6B7B, //CJK UNIFIED IDEOGRAPH - 0xCBC1: 0x8086, //CJK UNIFIED IDEOGRAPH - 0xCBC2: 0x5BFA, //CJK UNIFIED IDEOGRAPH - 0xCBC3: 0x55E3, //CJK UNIFIED IDEOGRAPH - 0xCBC4: 0x56DB, //CJK UNIFIED IDEOGRAPH - 0xCBC5: 0x4F3A, //CJK UNIFIED IDEOGRAPH - 0xCBC6: 0x4F3C, //CJK UNIFIED IDEOGRAPH - 0xCBC7: 0x9972, //CJK UNIFIED IDEOGRAPH - 0xCBC8: 0x5DF3, //CJK UNIFIED IDEOGRAPH - 0xCBC9: 0x677E, //CJK UNIFIED IDEOGRAPH - 0xCBCA: 0x8038, //CJK UNIFIED IDEOGRAPH - 0xCBCB: 0x6002, //CJK UNIFIED IDEOGRAPH - 0xCBCC: 0x9882, //CJK UNIFIED IDEOGRAPH - 0xCBCD: 0x9001, //CJK UNIFIED IDEOGRAPH - 0xCBCE: 0x5B8B, //CJK UNIFIED IDEOGRAPH - 0xCBCF: 0x8BBC, //CJK UNIFIED IDEOGRAPH - 0xCBD0: 0x8BF5, //CJK UNIFIED IDEOGRAPH - 0xCBD1: 0x641C, //CJK UNIFIED IDEOGRAPH - 0xCBD2: 0x8258, //CJK UNIFIED IDEOGRAPH - 0xCBD3: 0x64DE, //CJK UNIFIED IDEOGRAPH - 0xCBD4: 0x55FD, //CJK UNIFIED IDEOGRAPH - 0xCBD5: 0x82CF, //CJK UNIFIED IDEOGRAPH - 0xCBD6: 0x9165, //CJK UNIFIED IDEOGRAPH - 0xCBD7: 0x4FD7, //CJK UNIFIED IDEOGRAPH - 0xCBD8: 0x7D20, //CJK UNIFIED IDEOGRAPH - 0xCBD9: 0x901F, //CJK UNIFIED IDEOGRAPH - 0xCBDA: 0x7C9F, //CJK UNIFIED IDEOGRAPH - 0xCBDB: 0x50F3, //CJK UNIFIED IDEOGRAPH - 0xCBDC: 0x5851, //CJK UNIFIED IDEOGRAPH - 0xCBDD: 0x6EAF, //CJK UNIFIED IDEOGRAPH - 0xCBDE: 0x5BBF, //CJK UNIFIED IDEOGRAPH - 0xCBDF: 0x8BC9, //CJK UNIFIED IDEOGRAPH - 0xCBE0: 0x8083, //CJK UNIFIED IDEOGRAPH - 0xCBE1: 0x9178, //CJK UNIFIED IDEOGRAPH - 0xCBE2: 0x849C, //CJK UNIFIED IDEOGRAPH - 0xCBE3: 0x7B97, //CJK UNIFIED IDEOGRAPH - 0xCBE4: 0x867D, //CJK UNIFIED IDEOGRAPH - 0xCBE5: 0x968B, //CJK UNIFIED IDEOGRAPH - 0xCBE6: 0x968F, //CJK UNIFIED IDEOGRAPH - 0xCBE7: 0x7EE5, //CJK UNIFIED IDEOGRAPH - 0xCBE8: 0x9AD3, //CJK UNIFIED IDEOGRAPH - 0xCBE9: 0x788E, //CJK UNIFIED IDEOGRAPH - 0xCBEA: 0x5C81, //CJK UNIFIED IDEOGRAPH - 0xCBEB: 0x7A57, //CJK UNIFIED IDEOGRAPH - 0xCBEC: 0x9042, //CJK UNIFIED IDEOGRAPH - 0xCBED: 0x96A7, //CJK UNIFIED IDEOGRAPH - 0xCBEE: 0x795F, //CJK UNIFIED IDEOGRAPH - 0xCBEF: 0x5B59, //CJK UNIFIED IDEOGRAPH - 0xCBF0: 0x635F, //CJK UNIFIED IDEOGRAPH - 0xCBF1: 0x7B0B, //CJK UNIFIED IDEOGRAPH - 0xCBF2: 0x84D1, //CJK UNIFIED IDEOGRAPH - 0xCBF3: 0x68AD, //CJK UNIFIED IDEOGRAPH - 0xCBF4: 0x5506, //CJK UNIFIED IDEOGRAPH - 0xCBF5: 0x7F29, //CJK UNIFIED IDEOGRAPH - 0xCBF6: 0x7410, //CJK UNIFIED IDEOGRAPH - 0xCBF7: 0x7D22, //CJK UNIFIED IDEOGRAPH - 0xCBF8: 0x9501, //CJK UNIFIED IDEOGRAPH - 0xCBF9: 0x6240, //CJK UNIFIED IDEOGRAPH - 0xCBFA: 0x584C, //CJK UNIFIED IDEOGRAPH - 0xCBFB: 0x4ED6, //CJK UNIFIED IDEOGRAPH - 0xCBFC: 0x5B83, //CJK UNIFIED IDEOGRAPH - 0xCBFD: 0x5979, //CJK UNIFIED IDEOGRAPH - 0xCBFE: 0x5854, //CJK UNIFIED IDEOGRAPH - 0xCC40: 0x85F9, //CJK UNIFIED IDEOGRAPH - 0xCC41: 0x85FA, //CJK UNIFIED IDEOGRAPH - 0xCC42: 0x85FC, //CJK UNIFIED IDEOGRAPH - 0xCC43: 0x85FD, //CJK UNIFIED IDEOGRAPH - 0xCC44: 0x85FE, //CJK UNIFIED IDEOGRAPH - 0xCC45: 0x8600, //CJK UNIFIED IDEOGRAPH - 0xCC46: 0x8601, //CJK UNIFIED IDEOGRAPH - 0xCC47: 0x8602, //CJK UNIFIED IDEOGRAPH - 0xCC48: 0x8603, //CJK UNIFIED IDEOGRAPH - 0xCC49: 0x8604, //CJK UNIFIED IDEOGRAPH - 0xCC4A: 0x8606, //CJK UNIFIED IDEOGRAPH - 0xCC4B: 0x8607, //CJK UNIFIED IDEOGRAPH - 0xCC4C: 0x8608, //CJK UNIFIED IDEOGRAPH - 0xCC4D: 0x8609, //CJK UNIFIED IDEOGRAPH - 0xCC4E: 0x860A, //CJK UNIFIED IDEOGRAPH - 0xCC4F: 0x860B, //CJK UNIFIED IDEOGRAPH - 0xCC50: 0x860C, //CJK UNIFIED IDEOGRAPH - 0xCC51: 0x860D, //CJK UNIFIED IDEOGRAPH - 0xCC52: 0x860E, //CJK UNIFIED IDEOGRAPH - 0xCC53: 0x860F, //CJK UNIFIED IDEOGRAPH - 0xCC54: 0x8610, //CJK UNIFIED IDEOGRAPH - 0xCC55: 0x8612, //CJK UNIFIED IDEOGRAPH - 0xCC56: 0x8613, //CJK UNIFIED IDEOGRAPH - 0xCC57: 0x8614, //CJK UNIFIED IDEOGRAPH - 0xCC58: 0x8615, //CJK UNIFIED IDEOGRAPH - 0xCC59: 0x8617, //CJK UNIFIED IDEOGRAPH - 0xCC5A: 0x8618, //CJK UNIFIED IDEOGRAPH - 0xCC5B: 0x8619, //CJK UNIFIED IDEOGRAPH - 0xCC5C: 0x861A, //CJK UNIFIED IDEOGRAPH - 0xCC5D: 0x861B, //CJK UNIFIED IDEOGRAPH - 0xCC5E: 0x861C, //CJK UNIFIED IDEOGRAPH - 0xCC5F: 0x861D, //CJK UNIFIED IDEOGRAPH - 0xCC60: 0x861E, //CJK UNIFIED IDEOGRAPH - 0xCC61: 0x861F, //CJK UNIFIED IDEOGRAPH - 0xCC62: 0x8620, //CJK UNIFIED IDEOGRAPH - 0xCC63: 0x8621, //CJK UNIFIED IDEOGRAPH - 0xCC64: 0x8622, //CJK UNIFIED IDEOGRAPH - 0xCC65: 0x8623, //CJK UNIFIED IDEOGRAPH - 0xCC66: 0x8624, //CJK UNIFIED IDEOGRAPH - 0xCC67: 0x8625, //CJK UNIFIED IDEOGRAPH - 0xCC68: 0x8626, //CJK UNIFIED IDEOGRAPH - 0xCC69: 0x8628, //CJK UNIFIED IDEOGRAPH - 0xCC6A: 0x862A, //CJK UNIFIED IDEOGRAPH - 0xCC6B: 0x862B, //CJK UNIFIED IDEOGRAPH - 0xCC6C: 0x862C, //CJK UNIFIED IDEOGRAPH - 0xCC6D: 0x862D, //CJK UNIFIED IDEOGRAPH - 0xCC6E: 0x862E, //CJK UNIFIED IDEOGRAPH - 0xCC6F: 0x862F, //CJK UNIFIED IDEOGRAPH - 0xCC70: 0x8630, //CJK UNIFIED IDEOGRAPH - 0xCC71: 0x8631, //CJK UNIFIED IDEOGRAPH - 0xCC72: 0x8632, //CJK UNIFIED IDEOGRAPH - 0xCC73: 0x8633, //CJK UNIFIED IDEOGRAPH - 0xCC74: 0x8634, //CJK UNIFIED IDEOGRAPH - 0xCC75: 0x8635, //CJK UNIFIED IDEOGRAPH - 0xCC76: 0x8636, //CJK UNIFIED IDEOGRAPH - 0xCC77: 0x8637, //CJK UNIFIED IDEOGRAPH - 0xCC78: 0x8639, //CJK UNIFIED IDEOGRAPH - 0xCC79: 0x863A, //CJK UNIFIED IDEOGRAPH - 0xCC7A: 0x863B, //CJK UNIFIED IDEOGRAPH - 0xCC7B: 0x863D, //CJK UNIFIED IDEOGRAPH - 0xCC7C: 0x863E, //CJK UNIFIED IDEOGRAPH - 0xCC7D: 0x863F, //CJK UNIFIED IDEOGRAPH - 0xCC7E: 0x8640, //CJK UNIFIED IDEOGRAPH - 0xCC80: 0x8641, //CJK UNIFIED IDEOGRAPH - 0xCC81: 0x8642, //CJK UNIFIED IDEOGRAPH - 0xCC82: 0x8643, //CJK UNIFIED IDEOGRAPH - 0xCC83: 0x8644, //CJK UNIFIED IDEOGRAPH - 0xCC84: 0x8645, //CJK UNIFIED IDEOGRAPH - 0xCC85: 0x8646, //CJK UNIFIED IDEOGRAPH - 0xCC86: 0x8647, //CJK UNIFIED IDEOGRAPH - 0xCC87: 0x8648, //CJK UNIFIED IDEOGRAPH - 0xCC88: 0x8649, //CJK UNIFIED IDEOGRAPH - 0xCC89: 0x864A, //CJK UNIFIED IDEOGRAPH - 0xCC8A: 0x864B, //CJK UNIFIED IDEOGRAPH - 0xCC8B: 0x864C, //CJK UNIFIED IDEOGRAPH - 0xCC8C: 0x8652, //CJK UNIFIED IDEOGRAPH - 0xCC8D: 0x8653, //CJK UNIFIED IDEOGRAPH - 0xCC8E: 0x8655, //CJK UNIFIED IDEOGRAPH - 0xCC8F: 0x8656, //CJK UNIFIED IDEOGRAPH - 0xCC90: 0x8657, //CJK UNIFIED IDEOGRAPH - 0xCC91: 0x8658, //CJK UNIFIED IDEOGRAPH - 0xCC92: 0x8659, //CJK UNIFIED IDEOGRAPH - 0xCC93: 0x865B, //CJK UNIFIED IDEOGRAPH - 0xCC94: 0x865C, //CJK UNIFIED IDEOGRAPH - 0xCC95: 0x865D, //CJK UNIFIED IDEOGRAPH - 0xCC96: 0x865F, //CJK UNIFIED IDEOGRAPH - 0xCC97: 0x8660, //CJK UNIFIED IDEOGRAPH - 0xCC98: 0x8661, //CJK UNIFIED IDEOGRAPH - 0xCC99: 0x8663, //CJK UNIFIED IDEOGRAPH - 0xCC9A: 0x8664, //CJK UNIFIED IDEOGRAPH - 0xCC9B: 0x8665, //CJK UNIFIED IDEOGRAPH - 0xCC9C: 0x8666, //CJK UNIFIED IDEOGRAPH - 0xCC9D: 0x8667, //CJK UNIFIED IDEOGRAPH - 0xCC9E: 0x8668, //CJK UNIFIED IDEOGRAPH - 0xCC9F: 0x8669, //CJK UNIFIED IDEOGRAPH - 0xCCA0: 0x866A, //CJK UNIFIED IDEOGRAPH - 0xCCA1: 0x736D, //CJK UNIFIED IDEOGRAPH - 0xCCA2: 0x631E, //CJK UNIFIED IDEOGRAPH - 0xCCA3: 0x8E4B, //CJK UNIFIED IDEOGRAPH - 0xCCA4: 0x8E0F, //CJK UNIFIED IDEOGRAPH - 0xCCA5: 0x80CE, //CJK UNIFIED IDEOGRAPH - 0xCCA6: 0x82D4, //CJK UNIFIED IDEOGRAPH - 0xCCA7: 0x62AC, //CJK UNIFIED IDEOGRAPH - 0xCCA8: 0x53F0, //CJK UNIFIED IDEOGRAPH - 0xCCA9: 0x6CF0, //CJK UNIFIED IDEOGRAPH - 0xCCAA: 0x915E, //CJK UNIFIED IDEOGRAPH - 0xCCAB: 0x592A, //CJK UNIFIED IDEOGRAPH - 0xCCAC: 0x6001, //CJK UNIFIED IDEOGRAPH - 0xCCAD: 0x6C70, //CJK UNIFIED IDEOGRAPH - 0xCCAE: 0x574D, //CJK UNIFIED IDEOGRAPH - 0xCCAF: 0x644A, //CJK UNIFIED IDEOGRAPH - 0xCCB0: 0x8D2A, //CJK UNIFIED IDEOGRAPH - 0xCCB1: 0x762B, //CJK UNIFIED IDEOGRAPH - 0xCCB2: 0x6EE9, //CJK UNIFIED IDEOGRAPH - 0xCCB3: 0x575B, //CJK UNIFIED IDEOGRAPH - 0xCCB4: 0x6A80, //CJK UNIFIED IDEOGRAPH - 0xCCB5: 0x75F0, //CJK UNIFIED IDEOGRAPH - 0xCCB6: 0x6F6D, //CJK UNIFIED IDEOGRAPH - 0xCCB7: 0x8C2D, //CJK UNIFIED IDEOGRAPH - 0xCCB8: 0x8C08, //CJK UNIFIED IDEOGRAPH - 0xCCB9: 0x5766, //CJK UNIFIED IDEOGRAPH - 0xCCBA: 0x6BEF, //CJK UNIFIED IDEOGRAPH - 0xCCBB: 0x8892, //CJK UNIFIED IDEOGRAPH - 0xCCBC: 0x78B3, //CJK UNIFIED IDEOGRAPH - 0xCCBD: 0x63A2, //CJK UNIFIED IDEOGRAPH - 0xCCBE: 0x53F9, //CJK UNIFIED IDEOGRAPH - 0xCCBF: 0x70AD, //CJK UNIFIED IDEOGRAPH - 0xCCC0: 0x6C64, //CJK UNIFIED IDEOGRAPH - 0xCCC1: 0x5858, //CJK UNIFIED IDEOGRAPH - 0xCCC2: 0x642A, //CJK UNIFIED IDEOGRAPH - 0xCCC3: 0x5802, //CJK UNIFIED IDEOGRAPH - 0xCCC4: 0x68E0, //CJK UNIFIED IDEOGRAPH - 0xCCC5: 0x819B, //CJK UNIFIED IDEOGRAPH - 0xCCC6: 0x5510, //CJK UNIFIED IDEOGRAPH - 0xCCC7: 0x7CD6, //CJK UNIFIED IDEOGRAPH - 0xCCC8: 0x5018, //CJK UNIFIED IDEOGRAPH - 0xCCC9: 0x8EBA, //CJK UNIFIED IDEOGRAPH - 0xCCCA: 0x6DCC, //CJK UNIFIED IDEOGRAPH - 0xCCCB: 0x8D9F, //CJK UNIFIED IDEOGRAPH - 0xCCCC: 0x70EB, //CJK UNIFIED IDEOGRAPH - 0xCCCD: 0x638F, //CJK UNIFIED IDEOGRAPH - 0xCCCE: 0x6D9B, //CJK UNIFIED IDEOGRAPH - 0xCCCF: 0x6ED4, //CJK UNIFIED IDEOGRAPH - 0xCCD0: 0x7EE6, //CJK UNIFIED IDEOGRAPH - 0xCCD1: 0x8404, //CJK UNIFIED IDEOGRAPH - 0xCCD2: 0x6843, //CJK UNIFIED IDEOGRAPH - 0xCCD3: 0x9003, //CJK UNIFIED IDEOGRAPH - 0xCCD4: 0x6DD8, //CJK UNIFIED IDEOGRAPH - 0xCCD5: 0x9676, //CJK UNIFIED IDEOGRAPH - 0xCCD6: 0x8BA8, //CJK UNIFIED IDEOGRAPH - 0xCCD7: 0x5957, //CJK UNIFIED IDEOGRAPH - 0xCCD8: 0x7279, //CJK UNIFIED IDEOGRAPH - 0xCCD9: 0x85E4, //CJK UNIFIED IDEOGRAPH - 0xCCDA: 0x817E, //CJK UNIFIED IDEOGRAPH - 0xCCDB: 0x75BC, //CJK UNIFIED IDEOGRAPH - 0xCCDC: 0x8A8A, //CJK UNIFIED IDEOGRAPH - 0xCCDD: 0x68AF, //CJK UNIFIED IDEOGRAPH - 0xCCDE: 0x5254, //CJK UNIFIED IDEOGRAPH - 0xCCDF: 0x8E22, //CJK UNIFIED IDEOGRAPH - 0xCCE0: 0x9511, //CJK UNIFIED IDEOGRAPH - 0xCCE1: 0x63D0, //CJK UNIFIED IDEOGRAPH - 0xCCE2: 0x9898, //CJK UNIFIED IDEOGRAPH - 0xCCE3: 0x8E44, //CJK UNIFIED IDEOGRAPH - 0xCCE4: 0x557C, //CJK UNIFIED IDEOGRAPH - 0xCCE5: 0x4F53, //CJK UNIFIED IDEOGRAPH - 0xCCE6: 0x66FF, //CJK UNIFIED IDEOGRAPH - 0xCCE7: 0x568F, //CJK UNIFIED IDEOGRAPH - 0xCCE8: 0x60D5, //CJK UNIFIED IDEOGRAPH - 0xCCE9: 0x6D95, //CJK UNIFIED IDEOGRAPH - 0xCCEA: 0x5243, //CJK UNIFIED IDEOGRAPH - 0xCCEB: 0x5C49, //CJK UNIFIED IDEOGRAPH - 0xCCEC: 0x5929, //CJK UNIFIED IDEOGRAPH - 0xCCED: 0x6DFB, //CJK UNIFIED IDEOGRAPH - 0xCCEE: 0x586B, //CJK UNIFIED IDEOGRAPH - 0xCCEF: 0x7530, //CJK UNIFIED IDEOGRAPH - 0xCCF0: 0x751C, //CJK UNIFIED IDEOGRAPH - 0xCCF1: 0x606C, //CJK UNIFIED IDEOGRAPH - 0xCCF2: 0x8214, //CJK UNIFIED IDEOGRAPH - 0xCCF3: 0x8146, //CJK UNIFIED IDEOGRAPH - 0xCCF4: 0x6311, //CJK UNIFIED IDEOGRAPH - 0xCCF5: 0x6761, //CJK UNIFIED IDEOGRAPH - 0xCCF6: 0x8FE2, //CJK UNIFIED IDEOGRAPH - 0xCCF7: 0x773A, //CJK UNIFIED IDEOGRAPH - 0xCCF8: 0x8DF3, //CJK UNIFIED IDEOGRAPH - 0xCCF9: 0x8D34, //CJK UNIFIED IDEOGRAPH - 0xCCFA: 0x94C1, //CJK UNIFIED IDEOGRAPH - 0xCCFB: 0x5E16, //CJK UNIFIED IDEOGRAPH - 0xCCFC: 0x5385, //CJK UNIFIED IDEOGRAPH - 0xCCFD: 0x542C, //CJK UNIFIED IDEOGRAPH - 0xCCFE: 0x70C3, //CJK UNIFIED IDEOGRAPH - 0xCD40: 0x866D, //CJK UNIFIED IDEOGRAPH - 0xCD41: 0x866F, //CJK UNIFIED IDEOGRAPH - 0xCD42: 0x8670, //CJK UNIFIED IDEOGRAPH - 0xCD43: 0x8672, //CJK UNIFIED IDEOGRAPH - 0xCD44: 0x8673, //CJK UNIFIED IDEOGRAPH - 0xCD45: 0x8674, //CJK UNIFIED IDEOGRAPH - 0xCD46: 0x8675, //CJK UNIFIED IDEOGRAPH - 0xCD47: 0x8676, //CJK UNIFIED IDEOGRAPH - 0xCD48: 0x8677, //CJK UNIFIED IDEOGRAPH - 0xCD49: 0x8678, //CJK UNIFIED IDEOGRAPH - 0xCD4A: 0x8683, //CJK UNIFIED IDEOGRAPH - 0xCD4B: 0x8684, //CJK UNIFIED IDEOGRAPH - 0xCD4C: 0x8685, //CJK UNIFIED IDEOGRAPH - 0xCD4D: 0x8686, //CJK UNIFIED IDEOGRAPH - 0xCD4E: 0x8687, //CJK UNIFIED IDEOGRAPH - 0xCD4F: 0x8688, //CJK UNIFIED IDEOGRAPH - 0xCD50: 0x8689, //CJK UNIFIED IDEOGRAPH - 0xCD51: 0x868E, //CJK UNIFIED IDEOGRAPH - 0xCD52: 0x868F, //CJK UNIFIED IDEOGRAPH - 0xCD53: 0x8690, //CJK UNIFIED IDEOGRAPH - 0xCD54: 0x8691, //CJK UNIFIED IDEOGRAPH - 0xCD55: 0x8692, //CJK UNIFIED IDEOGRAPH - 0xCD56: 0x8694, //CJK UNIFIED IDEOGRAPH - 0xCD57: 0x8696, //CJK UNIFIED IDEOGRAPH - 0xCD58: 0x8697, //CJK UNIFIED IDEOGRAPH - 0xCD59: 0x8698, //CJK UNIFIED IDEOGRAPH - 0xCD5A: 0x8699, //CJK UNIFIED IDEOGRAPH - 0xCD5B: 0x869A, //CJK UNIFIED IDEOGRAPH - 0xCD5C: 0x869B, //CJK UNIFIED IDEOGRAPH - 0xCD5D: 0x869E, //CJK UNIFIED IDEOGRAPH - 0xCD5E: 0x869F, //CJK UNIFIED IDEOGRAPH - 0xCD5F: 0x86A0, //CJK UNIFIED IDEOGRAPH - 0xCD60: 0x86A1, //CJK UNIFIED IDEOGRAPH - 0xCD61: 0x86A2, //CJK UNIFIED IDEOGRAPH - 0xCD62: 0x86A5, //CJK UNIFIED IDEOGRAPH - 0xCD63: 0x86A6, //CJK UNIFIED IDEOGRAPH - 0xCD64: 0x86AB, //CJK UNIFIED IDEOGRAPH - 0xCD65: 0x86AD, //CJK UNIFIED IDEOGRAPH - 0xCD66: 0x86AE, //CJK UNIFIED IDEOGRAPH - 0xCD67: 0x86B2, //CJK UNIFIED IDEOGRAPH - 0xCD68: 0x86B3, //CJK UNIFIED IDEOGRAPH - 0xCD69: 0x86B7, //CJK UNIFIED IDEOGRAPH - 0xCD6A: 0x86B8, //CJK UNIFIED IDEOGRAPH - 0xCD6B: 0x86B9, //CJK UNIFIED IDEOGRAPH - 0xCD6C: 0x86BB, //CJK UNIFIED IDEOGRAPH - 0xCD6D: 0x86BC, //CJK UNIFIED IDEOGRAPH - 0xCD6E: 0x86BD, //CJK UNIFIED IDEOGRAPH - 0xCD6F: 0x86BE, //CJK UNIFIED IDEOGRAPH - 0xCD70: 0x86BF, //CJK UNIFIED IDEOGRAPH - 0xCD71: 0x86C1, //CJK UNIFIED IDEOGRAPH - 0xCD72: 0x86C2, //CJK UNIFIED IDEOGRAPH - 0xCD73: 0x86C3, //CJK UNIFIED IDEOGRAPH - 0xCD74: 0x86C5, //CJK UNIFIED IDEOGRAPH - 0xCD75: 0x86C8, //CJK UNIFIED IDEOGRAPH - 0xCD76: 0x86CC, //CJK UNIFIED IDEOGRAPH - 0xCD77: 0x86CD, //CJK UNIFIED IDEOGRAPH - 0xCD78: 0x86D2, //CJK UNIFIED IDEOGRAPH - 0xCD79: 0x86D3, //CJK UNIFIED IDEOGRAPH - 0xCD7A: 0x86D5, //CJK UNIFIED IDEOGRAPH - 0xCD7B: 0x86D6, //CJK UNIFIED IDEOGRAPH - 0xCD7C: 0x86D7, //CJK UNIFIED IDEOGRAPH - 0xCD7D: 0x86DA, //CJK UNIFIED IDEOGRAPH - 0xCD7E: 0x86DC, //CJK UNIFIED IDEOGRAPH - 0xCD80: 0x86DD, //CJK UNIFIED IDEOGRAPH - 0xCD81: 0x86E0, //CJK UNIFIED IDEOGRAPH - 0xCD82: 0x86E1, //CJK UNIFIED IDEOGRAPH - 0xCD83: 0x86E2, //CJK UNIFIED IDEOGRAPH - 0xCD84: 0x86E3, //CJK UNIFIED IDEOGRAPH - 0xCD85: 0x86E5, //CJK UNIFIED IDEOGRAPH - 0xCD86: 0x86E6, //CJK UNIFIED IDEOGRAPH - 0xCD87: 0x86E7, //CJK UNIFIED IDEOGRAPH - 0xCD88: 0x86E8, //CJK UNIFIED IDEOGRAPH - 0xCD89: 0x86EA, //CJK UNIFIED IDEOGRAPH - 0xCD8A: 0x86EB, //CJK UNIFIED IDEOGRAPH - 0xCD8B: 0x86EC, //CJK UNIFIED IDEOGRAPH - 0xCD8C: 0x86EF, //CJK UNIFIED IDEOGRAPH - 0xCD8D: 0x86F5, //CJK UNIFIED IDEOGRAPH - 0xCD8E: 0x86F6, //CJK UNIFIED IDEOGRAPH - 0xCD8F: 0x86F7, //CJK UNIFIED IDEOGRAPH - 0xCD90: 0x86FA, //CJK UNIFIED IDEOGRAPH - 0xCD91: 0x86FB, //CJK UNIFIED IDEOGRAPH - 0xCD92: 0x86FC, //CJK UNIFIED IDEOGRAPH - 0xCD93: 0x86FD, //CJK UNIFIED IDEOGRAPH - 0xCD94: 0x86FF, //CJK UNIFIED IDEOGRAPH - 0xCD95: 0x8701, //CJK UNIFIED IDEOGRAPH - 0xCD96: 0x8704, //CJK UNIFIED IDEOGRAPH - 0xCD97: 0x8705, //CJK UNIFIED IDEOGRAPH - 0xCD98: 0x8706, //CJK UNIFIED IDEOGRAPH - 0xCD99: 0x870B, //CJK UNIFIED IDEOGRAPH - 0xCD9A: 0x870C, //CJK UNIFIED IDEOGRAPH - 0xCD9B: 0x870E, //CJK UNIFIED IDEOGRAPH - 0xCD9C: 0x870F, //CJK UNIFIED IDEOGRAPH - 0xCD9D: 0x8710, //CJK UNIFIED IDEOGRAPH - 0xCD9E: 0x8711, //CJK UNIFIED IDEOGRAPH - 0xCD9F: 0x8714, //CJK UNIFIED IDEOGRAPH - 0xCDA0: 0x8716, //CJK UNIFIED IDEOGRAPH - 0xCDA1: 0x6C40, //CJK UNIFIED IDEOGRAPH - 0xCDA2: 0x5EF7, //CJK UNIFIED IDEOGRAPH - 0xCDA3: 0x505C, //CJK UNIFIED IDEOGRAPH - 0xCDA4: 0x4EAD, //CJK UNIFIED IDEOGRAPH - 0xCDA5: 0x5EAD, //CJK UNIFIED IDEOGRAPH - 0xCDA6: 0x633A, //CJK UNIFIED IDEOGRAPH - 0xCDA7: 0x8247, //CJK UNIFIED IDEOGRAPH - 0xCDA8: 0x901A, //CJK UNIFIED IDEOGRAPH - 0xCDA9: 0x6850, //CJK UNIFIED IDEOGRAPH - 0xCDAA: 0x916E, //CJK UNIFIED IDEOGRAPH - 0xCDAB: 0x77B3, //CJK UNIFIED IDEOGRAPH - 0xCDAC: 0x540C, //CJK UNIFIED IDEOGRAPH - 0xCDAD: 0x94DC, //CJK UNIFIED IDEOGRAPH - 0xCDAE: 0x5F64, //CJK UNIFIED IDEOGRAPH - 0xCDAF: 0x7AE5, //CJK UNIFIED IDEOGRAPH - 0xCDB0: 0x6876, //CJK UNIFIED IDEOGRAPH - 0xCDB1: 0x6345, //CJK UNIFIED IDEOGRAPH - 0xCDB2: 0x7B52, //CJK UNIFIED IDEOGRAPH - 0xCDB3: 0x7EDF, //CJK UNIFIED IDEOGRAPH - 0xCDB4: 0x75DB, //CJK UNIFIED IDEOGRAPH - 0xCDB5: 0x5077, //CJK UNIFIED IDEOGRAPH - 0xCDB6: 0x6295, //CJK UNIFIED IDEOGRAPH - 0xCDB7: 0x5934, //CJK UNIFIED IDEOGRAPH - 0xCDB8: 0x900F, //CJK UNIFIED IDEOGRAPH - 0xCDB9: 0x51F8, //CJK UNIFIED IDEOGRAPH - 0xCDBA: 0x79C3, //CJK UNIFIED IDEOGRAPH - 0xCDBB: 0x7A81, //CJK UNIFIED IDEOGRAPH - 0xCDBC: 0x56FE, //CJK UNIFIED IDEOGRAPH - 0xCDBD: 0x5F92, //CJK UNIFIED IDEOGRAPH - 0xCDBE: 0x9014, //CJK UNIFIED IDEOGRAPH - 0xCDBF: 0x6D82, //CJK UNIFIED IDEOGRAPH - 0xCDC0: 0x5C60, //CJK UNIFIED IDEOGRAPH - 0xCDC1: 0x571F, //CJK UNIFIED IDEOGRAPH - 0xCDC2: 0x5410, //CJK UNIFIED IDEOGRAPH - 0xCDC3: 0x5154, //CJK UNIFIED IDEOGRAPH - 0xCDC4: 0x6E4D, //CJK UNIFIED IDEOGRAPH - 0xCDC5: 0x56E2, //CJK UNIFIED IDEOGRAPH - 0xCDC6: 0x63A8, //CJK UNIFIED IDEOGRAPH - 0xCDC7: 0x9893, //CJK UNIFIED IDEOGRAPH - 0xCDC8: 0x817F, //CJK UNIFIED IDEOGRAPH - 0xCDC9: 0x8715, //CJK UNIFIED IDEOGRAPH - 0xCDCA: 0x892A, //CJK UNIFIED IDEOGRAPH - 0xCDCB: 0x9000, //CJK UNIFIED IDEOGRAPH - 0xCDCC: 0x541E, //CJK UNIFIED IDEOGRAPH - 0xCDCD: 0x5C6F, //CJK UNIFIED IDEOGRAPH - 0xCDCE: 0x81C0, //CJK UNIFIED IDEOGRAPH - 0xCDCF: 0x62D6, //CJK UNIFIED IDEOGRAPH - 0xCDD0: 0x6258, //CJK UNIFIED IDEOGRAPH - 0xCDD1: 0x8131, //CJK UNIFIED IDEOGRAPH - 0xCDD2: 0x9E35, //CJK UNIFIED IDEOGRAPH - 0xCDD3: 0x9640, //CJK UNIFIED IDEOGRAPH - 0xCDD4: 0x9A6E, //CJK UNIFIED IDEOGRAPH - 0xCDD5: 0x9A7C, //CJK UNIFIED IDEOGRAPH - 0xCDD6: 0x692D, //CJK UNIFIED IDEOGRAPH - 0xCDD7: 0x59A5, //CJK UNIFIED IDEOGRAPH - 0xCDD8: 0x62D3, //CJK UNIFIED IDEOGRAPH - 0xCDD9: 0x553E, //CJK UNIFIED IDEOGRAPH - 0xCDDA: 0x6316, //CJK UNIFIED IDEOGRAPH - 0xCDDB: 0x54C7, //CJK UNIFIED IDEOGRAPH - 0xCDDC: 0x86D9, //CJK UNIFIED IDEOGRAPH - 0xCDDD: 0x6D3C, //CJK UNIFIED IDEOGRAPH - 0xCDDE: 0x5A03, //CJK UNIFIED IDEOGRAPH - 0xCDDF: 0x74E6, //CJK UNIFIED IDEOGRAPH - 0xCDE0: 0x889C, //CJK UNIFIED IDEOGRAPH - 0xCDE1: 0x6B6A, //CJK UNIFIED IDEOGRAPH - 0xCDE2: 0x5916, //CJK UNIFIED IDEOGRAPH - 0xCDE3: 0x8C4C, //CJK UNIFIED IDEOGRAPH - 0xCDE4: 0x5F2F, //CJK UNIFIED IDEOGRAPH - 0xCDE5: 0x6E7E, //CJK UNIFIED IDEOGRAPH - 0xCDE6: 0x73A9, //CJK UNIFIED IDEOGRAPH - 0xCDE7: 0x987D, //CJK UNIFIED IDEOGRAPH - 0xCDE8: 0x4E38, //CJK UNIFIED IDEOGRAPH - 0xCDE9: 0x70F7, //CJK UNIFIED IDEOGRAPH - 0xCDEA: 0x5B8C, //CJK UNIFIED IDEOGRAPH - 0xCDEB: 0x7897, //CJK UNIFIED IDEOGRAPH - 0xCDEC: 0x633D, //CJK UNIFIED IDEOGRAPH - 0xCDED: 0x665A, //CJK UNIFIED IDEOGRAPH - 0xCDEE: 0x7696, //CJK UNIFIED IDEOGRAPH - 0xCDEF: 0x60CB, //CJK UNIFIED IDEOGRAPH - 0xCDF0: 0x5B9B, //CJK UNIFIED IDEOGRAPH - 0xCDF1: 0x5A49, //CJK UNIFIED IDEOGRAPH - 0xCDF2: 0x4E07, //CJK UNIFIED IDEOGRAPH - 0xCDF3: 0x8155, //CJK UNIFIED IDEOGRAPH - 0xCDF4: 0x6C6A, //CJK UNIFIED IDEOGRAPH - 0xCDF5: 0x738B, //CJK UNIFIED IDEOGRAPH - 0xCDF6: 0x4EA1, //CJK UNIFIED IDEOGRAPH - 0xCDF7: 0x6789, //CJK UNIFIED IDEOGRAPH - 0xCDF8: 0x7F51, //CJK UNIFIED IDEOGRAPH - 0xCDF9: 0x5F80, //CJK UNIFIED IDEOGRAPH - 0xCDFA: 0x65FA, //CJK UNIFIED IDEOGRAPH - 0xCDFB: 0x671B, //CJK UNIFIED IDEOGRAPH - 0xCDFC: 0x5FD8, //CJK UNIFIED IDEOGRAPH - 0xCDFD: 0x5984, //CJK UNIFIED IDEOGRAPH - 0xCDFE: 0x5A01, //CJK UNIFIED IDEOGRAPH - 0xCE40: 0x8719, //CJK UNIFIED IDEOGRAPH - 0xCE41: 0x871B, //CJK UNIFIED IDEOGRAPH - 0xCE42: 0x871D, //CJK UNIFIED IDEOGRAPH - 0xCE43: 0x871F, //CJK UNIFIED IDEOGRAPH - 0xCE44: 0x8720, //CJK UNIFIED IDEOGRAPH - 0xCE45: 0x8724, //CJK UNIFIED IDEOGRAPH - 0xCE46: 0x8726, //CJK UNIFIED IDEOGRAPH - 0xCE47: 0x8727, //CJK UNIFIED IDEOGRAPH - 0xCE48: 0x8728, //CJK UNIFIED IDEOGRAPH - 0xCE49: 0x872A, //CJK UNIFIED IDEOGRAPH - 0xCE4A: 0x872B, //CJK UNIFIED IDEOGRAPH - 0xCE4B: 0x872C, //CJK UNIFIED IDEOGRAPH - 0xCE4C: 0x872D, //CJK UNIFIED IDEOGRAPH - 0xCE4D: 0x872F, //CJK UNIFIED IDEOGRAPH - 0xCE4E: 0x8730, //CJK UNIFIED IDEOGRAPH - 0xCE4F: 0x8732, //CJK UNIFIED IDEOGRAPH - 0xCE50: 0x8733, //CJK UNIFIED IDEOGRAPH - 0xCE51: 0x8735, //CJK UNIFIED IDEOGRAPH - 0xCE52: 0x8736, //CJK UNIFIED IDEOGRAPH - 0xCE53: 0x8738, //CJK UNIFIED IDEOGRAPH - 0xCE54: 0x8739, //CJK UNIFIED IDEOGRAPH - 0xCE55: 0x873A, //CJK UNIFIED IDEOGRAPH - 0xCE56: 0x873C, //CJK UNIFIED IDEOGRAPH - 0xCE57: 0x873D, //CJK UNIFIED IDEOGRAPH - 0xCE58: 0x8740, //CJK UNIFIED IDEOGRAPH - 0xCE59: 0x8741, //CJK UNIFIED IDEOGRAPH - 0xCE5A: 0x8742, //CJK UNIFIED IDEOGRAPH - 0xCE5B: 0x8743, //CJK UNIFIED IDEOGRAPH - 0xCE5C: 0x8744, //CJK UNIFIED IDEOGRAPH - 0xCE5D: 0x8745, //CJK UNIFIED IDEOGRAPH - 0xCE5E: 0x8746, //CJK UNIFIED IDEOGRAPH - 0xCE5F: 0x874A, //CJK UNIFIED IDEOGRAPH - 0xCE60: 0x874B, //CJK UNIFIED IDEOGRAPH - 0xCE61: 0x874D, //CJK UNIFIED IDEOGRAPH - 0xCE62: 0x874F, //CJK UNIFIED IDEOGRAPH - 0xCE63: 0x8750, //CJK UNIFIED IDEOGRAPH - 0xCE64: 0x8751, //CJK UNIFIED IDEOGRAPH - 0xCE65: 0x8752, //CJK UNIFIED IDEOGRAPH - 0xCE66: 0x8754, //CJK UNIFIED IDEOGRAPH - 0xCE67: 0x8755, //CJK UNIFIED IDEOGRAPH - 0xCE68: 0x8756, //CJK UNIFIED IDEOGRAPH - 0xCE69: 0x8758, //CJK UNIFIED IDEOGRAPH - 0xCE6A: 0x875A, //CJK UNIFIED IDEOGRAPH - 0xCE6B: 0x875B, //CJK UNIFIED IDEOGRAPH - 0xCE6C: 0x875C, //CJK UNIFIED IDEOGRAPH - 0xCE6D: 0x875D, //CJK UNIFIED IDEOGRAPH - 0xCE6E: 0x875E, //CJK UNIFIED IDEOGRAPH - 0xCE6F: 0x875F, //CJK UNIFIED IDEOGRAPH - 0xCE70: 0x8761, //CJK UNIFIED IDEOGRAPH - 0xCE71: 0x8762, //CJK UNIFIED IDEOGRAPH - 0xCE72: 0x8766, //CJK UNIFIED IDEOGRAPH - 0xCE73: 0x8767, //CJK UNIFIED IDEOGRAPH - 0xCE74: 0x8768, //CJK UNIFIED IDEOGRAPH - 0xCE75: 0x8769, //CJK UNIFIED IDEOGRAPH - 0xCE76: 0x876A, //CJK UNIFIED IDEOGRAPH - 0xCE77: 0x876B, //CJK UNIFIED IDEOGRAPH - 0xCE78: 0x876C, //CJK UNIFIED IDEOGRAPH - 0xCE79: 0x876D, //CJK UNIFIED IDEOGRAPH - 0xCE7A: 0x876F, //CJK UNIFIED IDEOGRAPH - 0xCE7B: 0x8771, //CJK UNIFIED IDEOGRAPH - 0xCE7C: 0x8772, //CJK UNIFIED IDEOGRAPH - 0xCE7D: 0x8773, //CJK UNIFIED IDEOGRAPH - 0xCE7E: 0x8775, //CJK UNIFIED IDEOGRAPH - 0xCE80: 0x8777, //CJK UNIFIED IDEOGRAPH - 0xCE81: 0x8778, //CJK UNIFIED IDEOGRAPH - 0xCE82: 0x8779, //CJK UNIFIED IDEOGRAPH - 0xCE83: 0x877A, //CJK UNIFIED IDEOGRAPH - 0xCE84: 0x877F, //CJK UNIFIED IDEOGRAPH - 0xCE85: 0x8780, //CJK UNIFIED IDEOGRAPH - 0xCE86: 0x8781, //CJK UNIFIED IDEOGRAPH - 0xCE87: 0x8784, //CJK UNIFIED IDEOGRAPH - 0xCE88: 0x8786, //CJK UNIFIED IDEOGRAPH - 0xCE89: 0x8787, //CJK UNIFIED IDEOGRAPH - 0xCE8A: 0x8789, //CJK UNIFIED IDEOGRAPH - 0xCE8B: 0x878A, //CJK UNIFIED IDEOGRAPH - 0xCE8C: 0x878C, //CJK UNIFIED IDEOGRAPH - 0xCE8D: 0x878E, //CJK UNIFIED IDEOGRAPH - 0xCE8E: 0x878F, //CJK UNIFIED IDEOGRAPH - 0xCE8F: 0x8790, //CJK UNIFIED IDEOGRAPH - 0xCE90: 0x8791, //CJK UNIFIED IDEOGRAPH - 0xCE91: 0x8792, //CJK UNIFIED IDEOGRAPH - 0xCE92: 0x8794, //CJK UNIFIED IDEOGRAPH - 0xCE93: 0x8795, //CJK UNIFIED IDEOGRAPH - 0xCE94: 0x8796, //CJK UNIFIED IDEOGRAPH - 0xCE95: 0x8798, //CJK UNIFIED IDEOGRAPH - 0xCE96: 0x8799, //CJK UNIFIED IDEOGRAPH - 0xCE97: 0x879A, //CJK UNIFIED IDEOGRAPH - 0xCE98: 0x879B, //CJK UNIFIED IDEOGRAPH - 0xCE99: 0x879C, //CJK UNIFIED IDEOGRAPH - 0xCE9A: 0x879D, //CJK UNIFIED IDEOGRAPH - 0xCE9B: 0x879E, //CJK UNIFIED IDEOGRAPH - 0xCE9C: 0x87A0, //CJK UNIFIED IDEOGRAPH - 0xCE9D: 0x87A1, //CJK UNIFIED IDEOGRAPH - 0xCE9E: 0x87A2, //CJK UNIFIED IDEOGRAPH - 0xCE9F: 0x87A3, //CJK UNIFIED IDEOGRAPH - 0xCEA0: 0x87A4, //CJK UNIFIED IDEOGRAPH - 0xCEA1: 0x5DCD, //CJK UNIFIED IDEOGRAPH - 0xCEA2: 0x5FAE, //CJK UNIFIED IDEOGRAPH - 0xCEA3: 0x5371, //CJK UNIFIED IDEOGRAPH - 0xCEA4: 0x97E6, //CJK UNIFIED IDEOGRAPH - 0xCEA5: 0x8FDD, //CJK UNIFIED IDEOGRAPH - 0xCEA6: 0x6845, //CJK UNIFIED IDEOGRAPH - 0xCEA7: 0x56F4, //CJK UNIFIED IDEOGRAPH - 0xCEA8: 0x552F, //CJK UNIFIED IDEOGRAPH - 0xCEA9: 0x60DF, //CJK UNIFIED IDEOGRAPH - 0xCEAA: 0x4E3A, //CJK UNIFIED IDEOGRAPH - 0xCEAB: 0x6F4D, //CJK UNIFIED IDEOGRAPH - 0xCEAC: 0x7EF4, //CJK UNIFIED IDEOGRAPH - 0xCEAD: 0x82C7, //CJK UNIFIED IDEOGRAPH - 0xCEAE: 0x840E, //CJK UNIFIED IDEOGRAPH - 0xCEAF: 0x59D4, //CJK UNIFIED IDEOGRAPH - 0xCEB0: 0x4F1F, //CJK UNIFIED IDEOGRAPH - 0xCEB1: 0x4F2A, //CJK UNIFIED IDEOGRAPH - 0xCEB2: 0x5C3E, //CJK UNIFIED IDEOGRAPH - 0xCEB3: 0x7EAC, //CJK UNIFIED IDEOGRAPH - 0xCEB4: 0x672A, //CJK UNIFIED IDEOGRAPH - 0xCEB5: 0x851A, //CJK UNIFIED IDEOGRAPH - 0xCEB6: 0x5473, //CJK UNIFIED IDEOGRAPH - 0xCEB7: 0x754F, //CJK UNIFIED IDEOGRAPH - 0xCEB8: 0x80C3, //CJK UNIFIED IDEOGRAPH - 0xCEB9: 0x5582, //CJK UNIFIED IDEOGRAPH - 0xCEBA: 0x9B4F, //CJK UNIFIED IDEOGRAPH - 0xCEBB: 0x4F4D, //CJK UNIFIED IDEOGRAPH - 0xCEBC: 0x6E2D, //CJK UNIFIED IDEOGRAPH - 0xCEBD: 0x8C13, //CJK UNIFIED IDEOGRAPH - 0xCEBE: 0x5C09, //CJK UNIFIED IDEOGRAPH - 0xCEBF: 0x6170, //CJK UNIFIED IDEOGRAPH - 0xCEC0: 0x536B, //CJK UNIFIED IDEOGRAPH - 0xCEC1: 0x761F, //CJK UNIFIED IDEOGRAPH - 0xCEC2: 0x6E29, //CJK UNIFIED IDEOGRAPH - 0xCEC3: 0x868A, //CJK UNIFIED IDEOGRAPH - 0xCEC4: 0x6587, //CJK UNIFIED IDEOGRAPH - 0xCEC5: 0x95FB, //CJK UNIFIED IDEOGRAPH - 0xCEC6: 0x7EB9, //CJK UNIFIED IDEOGRAPH - 0xCEC7: 0x543B, //CJK UNIFIED IDEOGRAPH - 0xCEC8: 0x7A33, //CJK UNIFIED IDEOGRAPH - 0xCEC9: 0x7D0A, //CJK UNIFIED IDEOGRAPH - 0xCECA: 0x95EE, //CJK UNIFIED IDEOGRAPH - 0xCECB: 0x55E1, //CJK UNIFIED IDEOGRAPH - 0xCECC: 0x7FC1, //CJK UNIFIED IDEOGRAPH - 0xCECD: 0x74EE, //CJK UNIFIED IDEOGRAPH - 0xCECE: 0x631D, //CJK UNIFIED IDEOGRAPH - 0xCECF: 0x8717, //CJK UNIFIED IDEOGRAPH - 0xCED0: 0x6DA1, //CJK UNIFIED IDEOGRAPH - 0xCED1: 0x7A9D, //CJK UNIFIED IDEOGRAPH - 0xCED2: 0x6211, //CJK UNIFIED IDEOGRAPH - 0xCED3: 0x65A1, //CJK UNIFIED IDEOGRAPH - 0xCED4: 0x5367, //CJK UNIFIED IDEOGRAPH - 0xCED5: 0x63E1, //CJK UNIFIED IDEOGRAPH - 0xCED6: 0x6C83, //CJK UNIFIED IDEOGRAPH - 0xCED7: 0x5DEB, //CJK UNIFIED IDEOGRAPH - 0xCED8: 0x545C, //CJK UNIFIED IDEOGRAPH - 0xCED9: 0x94A8, //CJK UNIFIED IDEOGRAPH - 0xCEDA: 0x4E4C, //CJK UNIFIED IDEOGRAPH - 0xCEDB: 0x6C61, //CJK UNIFIED IDEOGRAPH - 0xCEDC: 0x8BEC, //CJK UNIFIED IDEOGRAPH - 0xCEDD: 0x5C4B, //CJK UNIFIED IDEOGRAPH - 0xCEDE: 0x65E0, //CJK UNIFIED IDEOGRAPH - 0xCEDF: 0x829C, //CJK UNIFIED IDEOGRAPH - 0xCEE0: 0x68A7, //CJK UNIFIED IDEOGRAPH - 0xCEE1: 0x543E, //CJK UNIFIED IDEOGRAPH - 0xCEE2: 0x5434, //CJK UNIFIED IDEOGRAPH - 0xCEE3: 0x6BCB, //CJK UNIFIED IDEOGRAPH - 0xCEE4: 0x6B66, //CJK UNIFIED IDEOGRAPH - 0xCEE5: 0x4E94, //CJK UNIFIED IDEOGRAPH - 0xCEE6: 0x6342, //CJK UNIFIED IDEOGRAPH - 0xCEE7: 0x5348, //CJK UNIFIED IDEOGRAPH - 0xCEE8: 0x821E, //CJK UNIFIED IDEOGRAPH - 0xCEE9: 0x4F0D, //CJK UNIFIED IDEOGRAPH - 0xCEEA: 0x4FAE, //CJK UNIFIED IDEOGRAPH - 0xCEEB: 0x575E, //CJK UNIFIED IDEOGRAPH - 0xCEEC: 0x620A, //CJK UNIFIED IDEOGRAPH - 0xCEED: 0x96FE, //CJK UNIFIED IDEOGRAPH - 0xCEEE: 0x6664, //CJK UNIFIED IDEOGRAPH - 0xCEEF: 0x7269, //CJK UNIFIED IDEOGRAPH - 0xCEF0: 0x52FF, //CJK UNIFIED IDEOGRAPH - 0xCEF1: 0x52A1, //CJK UNIFIED IDEOGRAPH - 0xCEF2: 0x609F, //CJK UNIFIED IDEOGRAPH - 0xCEF3: 0x8BEF, //CJK UNIFIED IDEOGRAPH - 0xCEF4: 0x6614, //CJK UNIFIED IDEOGRAPH - 0xCEF5: 0x7199, //CJK UNIFIED IDEOGRAPH - 0xCEF6: 0x6790, //CJK UNIFIED IDEOGRAPH - 0xCEF7: 0x897F, //CJK UNIFIED IDEOGRAPH - 0xCEF8: 0x7852, //CJK UNIFIED IDEOGRAPH - 0xCEF9: 0x77FD, //CJK UNIFIED IDEOGRAPH - 0xCEFA: 0x6670, //CJK UNIFIED IDEOGRAPH - 0xCEFB: 0x563B, //CJK UNIFIED IDEOGRAPH - 0xCEFC: 0x5438, //CJK UNIFIED IDEOGRAPH - 0xCEFD: 0x9521, //CJK UNIFIED IDEOGRAPH - 0xCEFE: 0x727A, //CJK UNIFIED IDEOGRAPH - 0xCF40: 0x87A5, //CJK UNIFIED IDEOGRAPH - 0xCF41: 0x87A6, //CJK UNIFIED IDEOGRAPH - 0xCF42: 0x87A7, //CJK UNIFIED IDEOGRAPH - 0xCF43: 0x87A9, //CJK UNIFIED IDEOGRAPH - 0xCF44: 0x87AA, //CJK UNIFIED IDEOGRAPH - 0xCF45: 0x87AE, //CJK UNIFIED IDEOGRAPH - 0xCF46: 0x87B0, //CJK UNIFIED IDEOGRAPH - 0xCF47: 0x87B1, //CJK UNIFIED IDEOGRAPH - 0xCF48: 0x87B2, //CJK UNIFIED IDEOGRAPH - 0xCF49: 0x87B4, //CJK UNIFIED IDEOGRAPH - 0xCF4A: 0x87B6, //CJK UNIFIED IDEOGRAPH - 0xCF4B: 0x87B7, //CJK UNIFIED IDEOGRAPH - 0xCF4C: 0x87B8, //CJK UNIFIED IDEOGRAPH - 0xCF4D: 0x87B9, //CJK UNIFIED IDEOGRAPH - 0xCF4E: 0x87BB, //CJK UNIFIED IDEOGRAPH - 0xCF4F: 0x87BC, //CJK UNIFIED IDEOGRAPH - 0xCF50: 0x87BE, //CJK UNIFIED IDEOGRAPH - 0xCF51: 0x87BF, //CJK UNIFIED IDEOGRAPH - 0xCF52: 0x87C1, //CJK UNIFIED IDEOGRAPH - 0xCF53: 0x87C2, //CJK UNIFIED IDEOGRAPH - 0xCF54: 0x87C3, //CJK UNIFIED IDEOGRAPH - 0xCF55: 0x87C4, //CJK UNIFIED IDEOGRAPH - 0xCF56: 0x87C5, //CJK UNIFIED IDEOGRAPH - 0xCF57: 0x87C7, //CJK UNIFIED IDEOGRAPH - 0xCF58: 0x87C8, //CJK UNIFIED IDEOGRAPH - 0xCF59: 0x87C9, //CJK UNIFIED IDEOGRAPH - 0xCF5A: 0x87CC, //CJK UNIFIED IDEOGRAPH - 0xCF5B: 0x87CD, //CJK UNIFIED IDEOGRAPH - 0xCF5C: 0x87CE, //CJK UNIFIED IDEOGRAPH - 0xCF5D: 0x87CF, //CJK UNIFIED IDEOGRAPH - 0xCF5E: 0x87D0, //CJK UNIFIED IDEOGRAPH - 0xCF5F: 0x87D4, //CJK UNIFIED IDEOGRAPH - 0xCF60: 0x87D5, //CJK UNIFIED IDEOGRAPH - 0xCF61: 0x87D6, //CJK UNIFIED IDEOGRAPH - 0xCF62: 0x87D7, //CJK UNIFIED IDEOGRAPH - 0xCF63: 0x87D8, //CJK UNIFIED IDEOGRAPH - 0xCF64: 0x87D9, //CJK UNIFIED IDEOGRAPH - 0xCF65: 0x87DA, //CJK UNIFIED IDEOGRAPH - 0xCF66: 0x87DC, //CJK UNIFIED IDEOGRAPH - 0xCF67: 0x87DD, //CJK UNIFIED IDEOGRAPH - 0xCF68: 0x87DE, //CJK UNIFIED IDEOGRAPH - 0xCF69: 0x87DF, //CJK UNIFIED IDEOGRAPH - 0xCF6A: 0x87E1, //CJK UNIFIED IDEOGRAPH - 0xCF6B: 0x87E2, //CJK UNIFIED IDEOGRAPH - 0xCF6C: 0x87E3, //CJK UNIFIED IDEOGRAPH - 0xCF6D: 0x87E4, //CJK UNIFIED IDEOGRAPH - 0xCF6E: 0x87E6, //CJK UNIFIED IDEOGRAPH - 0xCF6F: 0x87E7, //CJK UNIFIED IDEOGRAPH - 0xCF70: 0x87E8, //CJK UNIFIED IDEOGRAPH - 0xCF71: 0x87E9, //CJK UNIFIED IDEOGRAPH - 0xCF72: 0x87EB, //CJK UNIFIED IDEOGRAPH - 0xCF73: 0x87EC, //CJK UNIFIED IDEOGRAPH - 0xCF74: 0x87ED, //CJK UNIFIED IDEOGRAPH - 0xCF75: 0x87EF, //CJK UNIFIED IDEOGRAPH - 0xCF76: 0x87F0, //CJK UNIFIED IDEOGRAPH - 0xCF77: 0x87F1, //CJK UNIFIED IDEOGRAPH - 0xCF78: 0x87F2, //CJK UNIFIED IDEOGRAPH - 0xCF79: 0x87F3, //CJK UNIFIED IDEOGRAPH - 0xCF7A: 0x87F4, //CJK UNIFIED IDEOGRAPH - 0xCF7B: 0x87F5, //CJK UNIFIED IDEOGRAPH - 0xCF7C: 0x87F6, //CJK UNIFIED IDEOGRAPH - 0xCF7D: 0x87F7, //CJK UNIFIED IDEOGRAPH - 0xCF7E: 0x87F8, //CJK UNIFIED IDEOGRAPH - 0xCF80: 0x87FA, //CJK UNIFIED IDEOGRAPH - 0xCF81: 0x87FB, //CJK UNIFIED IDEOGRAPH - 0xCF82: 0x87FC, //CJK UNIFIED IDEOGRAPH - 0xCF83: 0x87FD, //CJK UNIFIED IDEOGRAPH - 0xCF84: 0x87FF, //CJK UNIFIED IDEOGRAPH - 0xCF85: 0x8800, //CJK UNIFIED IDEOGRAPH - 0xCF86: 0x8801, //CJK UNIFIED IDEOGRAPH - 0xCF87: 0x8802, //CJK UNIFIED IDEOGRAPH - 0xCF88: 0x8804, //CJK UNIFIED IDEOGRAPH - 0xCF89: 0x8805, //CJK UNIFIED IDEOGRAPH - 0xCF8A: 0x8806, //CJK UNIFIED IDEOGRAPH - 0xCF8B: 0x8807, //CJK UNIFIED IDEOGRAPH - 0xCF8C: 0x8808, //CJK UNIFIED IDEOGRAPH - 0xCF8D: 0x8809, //CJK UNIFIED IDEOGRAPH - 0xCF8E: 0x880B, //CJK UNIFIED IDEOGRAPH - 0xCF8F: 0x880C, //CJK UNIFIED IDEOGRAPH - 0xCF90: 0x880D, //CJK UNIFIED IDEOGRAPH - 0xCF91: 0x880E, //CJK UNIFIED IDEOGRAPH - 0xCF92: 0x880F, //CJK UNIFIED IDEOGRAPH - 0xCF93: 0x8810, //CJK UNIFIED IDEOGRAPH - 0xCF94: 0x8811, //CJK UNIFIED IDEOGRAPH - 0xCF95: 0x8812, //CJK UNIFIED IDEOGRAPH - 0xCF96: 0x8814, //CJK UNIFIED IDEOGRAPH - 0xCF97: 0x8817, //CJK UNIFIED IDEOGRAPH - 0xCF98: 0x8818, //CJK UNIFIED IDEOGRAPH - 0xCF99: 0x8819, //CJK UNIFIED IDEOGRAPH - 0xCF9A: 0x881A, //CJK UNIFIED IDEOGRAPH - 0xCF9B: 0x881C, //CJK UNIFIED IDEOGRAPH - 0xCF9C: 0x881D, //CJK UNIFIED IDEOGRAPH - 0xCF9D: 0x881E, //CJK UNIFIED IDEOGRAPH - 0xCF9E: 0x881F, //CJK UNIFIED IDEOGRAPH - 0xCF9F: 0x8820, //CJK UNIFIED IDEOGRAPH - 0xCFA0: 0x8823, //CJK UNIFIED IDEOGRAPH - 0xCFA1: 0x7A00, //CJK UNIFIED IDEOGRAPH - 0xCFA2: 0x606F, //CJK UNIFIED IDEOGRAPH - 0xCFA3: 0x5E0C, //CJK UNIFIED IDEOGRAPH - 0xCFA4: 0x6089, //CJK UNIFIED IDEOGRAPH - 0xCFA5: 0x819D, //CJK UNIFIED IDEOGRAPH - 0xCFA6: 0x5915, //CJK UNIFIED IDEOGRAPH - 0xCFA7: 0x60DC, //CJK UNIFIED IDEOGRAPH - 0xCFA8: 0x7184, //CJK UNIFIED IDEOGRAPH - 0xCFA9: 0x70EF, //CJK UNIFIED IDEOGRAPH - 0xCFAA: 0x6EAA, //CJK UNIFIED IDEOGRAPH - 0xCFAB: 0x6C50, //CJK UNIFIED IDEOGRAPH - 0xCFAC: 0x7280, //CJK UNIFIED IDEOGRAPH - 0xCFAD: 0x6A84, //CJK UNIFIED IDEOGRAPH - 0xCFAE: 0x88AD, //CJK UNIFIED IDEOGRAPH - 0xCFAF: 0x5E2D, //CJK UNIFIED IDEOGRAPH - 0xCFB0: 0x4E60, //CJK UNIFIED IDEOGRAPH - 0xCFB1: 0x5AB3, //CJK UNIFIED IDEOGRAPH - 0xCFB2: 0x559C, //CJK UNIFIED IDEOGRAPH - 0xCFB3: 0x94E3, //CJK UNIFIED IDEOGRAPH - 0xCFB4: 0x6D17, //CJK UNIFIED IDEOGRAPH - 0xCFB5: 0x7CFB, //CJK UNIFIED IDEOGRAPH - 0xCFB6: 0x9699, //CJK UNIFIED IDEOGRAPH - 0xCFB7: 0x620F, //CJK UNIFIED IDEOGRAPH - 0xCFB8: 0x7EC6, //CJK UNIFIED IDEOGRAPH - 0xCFB9: 0x778E, //CJK UNIFIED IDEOGRAPH - 0xCFBA: 0x867E, //CJK UNIFIED IDEOGRAPH - 0xCFBB: 0x5323, //CJK UNIFIED IDEOGRAPH - 0xCFBC: 0x971E, //CJK UNIFIED IDEOGRAPH - 0xCFBD: 0x8F96, //CJK UNIFIED IDEOGRAPH - 0xCFBE: 0x6687, //CJK UNIFIED IDEOGRAPH - 0xCFBF: 0x5CE1, //CJK UNIFIED IDEOGRAPH - 0xCFC0: 0x4FA0, //CJK UNIFIED IDEOGRAPH - 0xCFC1: 0x72ED, //CJK UNIFIED IDEOGRAPH - 0xCFC2: 0x4E0B, //CJK UNIFIED IDEOGRAPH - 0xCFC3: 0x53A6, //CJK UNIFIED IDEOGRAPH - 0xCFC4: 0x590F, //CJK UNIFIED IDEOGRAPH - 0xCFC5: 0x5413, //CJK UNIFIED IDEOGRAPH - 0xCFC6: 0x6380, //CJK UNIFIED IDEOGRAPH - 0xCFC7: 0x9528, //CJK UNIFIED IDEOGRAPH - 0xCFC8: 0x5148, //CJK UNIFIED IDEOGRAPH - 0xCFC9: 0x4ED9, //CJK UNIFIED IDEOGRAPH - 0xCFCA: 0x9C9C, //CJK UNIFIED IDEOGRAPH - 0xCFCB: 0x7EA4, //CJK UNIFIED IDEOGRAPH - 0xCFCC: 0x54B8, //CJK UNIFIED IDEOGRAPH - 0xCFCD: 0x8D24, //CJK UNIFIED IDEOGRAPH - 0xCFCE: 0x8854, //CJK UNIFIED IDEOGRAPH - 0xCFCF: 0x8237, //CJK UNIFIED IDEOGRAPH - 0xCFD0: 0x95F2, //CJK UNIFIED IDEOGRAPH - 0xCFD1: 0x6D8E, //CJK UNIFIED IDEOGRAPH - 0xCFD2: 0x5F26, //CJK UNIFIED IDEOGRAPH - 0xCFD3: 0x5ACC, //CJK UNIFIED IDEOGRAPH - 0xCFD4: 0x663E, //CJK UNIFIED IDEOGRAPH - 0xCFD5: 0x9669, //CJK UNIFIED IDEOGRAPH - 0xCFD6: 0x73B0, //CJK UNIFIED IDEOGRAPH - 0xCFD7: 0x732E, //CJK UNIFIED IDEOGRAPH - 0xCFD8: 0x53BF, //CJK UNIFIED IDEOGRAPH - 0xCFD9: 0x817A, //CJK UNIFIED IDEOGRAPH - 0xCFDA: 0x9985, //CJK UNIFIED IDEOGRAPH - 0xCFDB: 0x7FA1, //CJK UNIFIED IDEOGRAPH - 0xCFDC: 0x5BAA, //CJK UNIFIED IDEOGRAPH - 0xCFDD: 0x9677, //CJK UNIFIED IDEOGRAPH - 0xCFDE: 0x9650, //CJK UNIFIED IDEOGRAPH - 0xCFDF: 0x7EBF, //CJK UNIFIED IDEOGRAPH - 0xCFE0: 0x76F8, //CJK UNIFIED IDEOGRAPH - 0xCFE1: 0x53A2, //CJK UNIFIED IDEOGRAPH - 0xCFE2: 0x9576, //CJK UNIFIED IDEOGRAPH - 0xCFE3: 0x9999, //CJK UNIFIED IDEOGRAPH - 0xCFE4: 0x7BB1, //CJK UNIFIED IDEOGRAPH - 0xCFE5: 0x8944, //CJK UNIFIED IDEOGRAPH - 0xCFE6: 0x6E58, //CJK UNIFIED IDEOGRAPH - 0xCFE7: 0x4E61, //CJK UNIFIED IDEOGRAPH - 0xCFE8: 0x7FD4, //CJK UNIFIED IDEOGRAPH - 0xCFE9: 0x7965, //CJK UNIFIED IDEOGRAPH - 0xCFEA: 0x8BE6, //CJK UNIFIED IDEOGRAPH - 0xCFEB: 0x60F3, //CJK UNIFIED IDEOGRAPH - 0xCFEC: 0x54CD, //CJK UNIFIED IDEOGRAPH - 0xCFED: 0x4EAB, //CJK UNIFIED IDEOGRAPH - 0xCFEE: 0x9879, //CJK UNIFIED IDEOGRAPH - 0xCFEF: 0x5DF7, //CJK UNIFIED IDEOGRAPH - 0xCFF0: 0x6A61, //CJK UNIFIED IDEOGRAPH - 0xCFF1: 0x50CF, //CJK UNIFIED IDEOGRAPH - 0xCFF2: 0x5411, //CJK UNIFIED IDEOGRAPH - 0xCFF3: 0x8C61, //CJK UNIFIED IDEOGRAPH - 0xCFF4: 0x8427, //CJK UNIFIED IDEOGRAPH - 0xCFF5: 0x785D, //CJK UNIFIED IDEOGRAPH - 0xCFF6: 0x9704, //CJK UNIFIED IDEOGRAPH - 0xCFF7: 0x524A, //CJK UNIFIED IDEOGRAPH - 0xCFF8: 0x54EE, //CJK UNIFIED IDEOGRAPH - 0xCFF9: 0x56A3, //CJK UNIFIED IDEOGRAPH - 0xCFFA: 0x9500, //CJK UNIFIED IDEOGRAPH - 0xCFFB: 0x6D88, //CJK UNIFIED IDEOGRAPH - 0xCFFC: 0x5BB5, //CJK UNIFIED IDEOGRAPH - 0xCFFD: 0x6DC6, //CJK UNIFIED IDEOGRAPH - 0xCFFE: 0x6653, //CJK UNIFIED IDEOGRAPH - 0xD040: 0x8824, //CJK UNIFIED IDEOGRAPH - 0xD041: 0x8825, //CJK UNIFIED IDEOGRAPH - 0xD042: 0x8826, //CJK UNIFIED IDEOGRAPH - 0xD043: 0x8827, //CJK UNIFIED IDEOGRAPH - 0xD044: 0x8828, //CJK UNIFIED IDEOGRAPH - 0xD045: 0x8829, //CJK UNIFIED IDEOGRAPH - 0xD046: 0x882A, //CJK UNIFIED IDEOGRAPH - 0xD047: 0x882B, //CJK UNIFIED IDEOGRAPH - 0xD048: 0x882C, //CJK UNIFIED IDEOGRAPH - 0xD049: 0x882D, //CJK UNIFIED IDEOGRAPH - 0xD04A: 0x882E, //CJK UNIFIED IDEOGRAPH - 0xD04B: 0x882F, //CJK UNIFIED IDEOGRAPH - 0xD04C: 0x8830, //CJK UNIFIED IDEOGRAPH - 0xD04D: 0x8831, //CJK UNIFIED IDEOGRAPH - 0xD04E: 0x8833, //CJK UNIFIED IDEOGRAPH - 0xD04F: 0x8834, //CJK UNIFIED IDEOGRAPH - 0xD050: 0x8835, //CJK UNIFIED IDEOGRAPH - 0xD051: 0x8836, //CJK UNIFIED IDEOGRAPH - 0xD052: 0x8837, //CJK UNIFIED IDEOGRAPH - 0xD053: 0x8838, //CJK UNIFIED IDEOGRAPH - 0xD054: 0x883A, //CJK UNIFIED IDEOGRAPH - 0xD055: 0x883B, //CJK UNIFIED IDEOGRAPH - 0xD056: 0x883D, //CJK UNIFIED IDEOGRAPH - 0xD057: 0x883E, //CJK UNIFIED IDEOGRAPH - 0xD058: 0x883F, //CJK UNIFIED IDEOGRAPH - 0xD059: 0x8841, //CJK UNIFIED IDEOGRAPH - 0xD05A: 0x8842, //CJK UNIFIED IDEOGRAPH - 0xD05B: 0x8843, //CJK UNIFIED IDEOGRAPH - 0xD05C: 0x8846, //CJK UNIFIED IDEOGRAPH - 0xD05D: 0x8847, //CJK UNIFIED IDEOGRAPH - 0xD05E: 0x8848, //CJK UNIFIED IDEOGRAPH - 0xD05F: 0x8849, //CJK UNIFIED IDEOGRAPH - 0xD060: 0x884A, //CJK UNIFIED IDEOGRAPH - 0xD061: 0x884B, //CJK UNIFIED IDEOGRAPH - 0xD062: 0x884E, //CJK UNIFIED IDEOGRAPH - 0xD063: 0x884F, //CJK UNIFIED IDEOGRAPH - 0xD064: 0x8850, //CJK UNIFIED IDEOGRAPH - 0xD065: 0x8851, //CJK UNIFIED IDEOGRAPH - 0xD066: 0x8852, //CJK UNIFIED IDEOGRAPH - 0xD067: 0x8853, //CJK UNIFIED IDEOGRAPH - 0xD068: 0x8855, //CJK UNIFIED IDEOGRAPH - 0xD069: 0x8856, //CJK UNIFIED IDEOGRAPH - 0xD06A: 0x8858, //CJK UNIFIED IDEOGRAPH - 0xD06B: 0x885A, //CJK UNIFIED IDEOGRAPH - 0xD06C: 0x885B, //CJK UNIFIED IDEOGRAPH - 0xD06D: 0x885C, //CJK UNIFIED IDEOGRAPH - 0xD06E: 0x885D, //CJK UNIFIED IDEOGRAPH - 0xD06F: 0x885E, //CJK UNIFIED IDEOGRAPH - 0xD070: 0x885F, //CJK UNIFIED IDEOGRAPH - 0xD071: 0x8860, //CJK UNIFIED IDEOGRAPH - 0xD072: 0x8866, //CJK UNIFIED IDEOGRAPH - 0xD073: 0x8867, //CJK UNIFIED IDEOGRAPH - 0xD074: 0x886A, //CJK UNIFIED IDEOGRAPH - 0xD075: 0x886D, //CJK UNIFIED IDEOGRAPH - 0xD076: 0x886F, //CJK UNIFIED IDEOGRAPH - 0xD077: 0x8871, //CJK UNIFIED IDEOGRAPH - 0xD078: 0x8873, //CJK UNIFIED IDEOGRAPH - 0xD079: 0x8874, //CJK UNIFIED IDEOGRAPH - 0xD07A: 0x8875, //CJK UNIFIED IDEOGRAPH - 0xD07B: 0x8876, //CJK UNIFIED IDEOGRAPH - 0xD07C: 0x8878, //CJK UNIFIED IDEOGRAPH - 0xD07D: 0x8879, //CJK UNIFIED IDEOGRAPH - 0xD07E: 0x887A, //CJK UNIFIED IDEOGRAPH - 0xD080: 0x887B, //CJK UNIFIED IDEOGRAPH - 0xD081: 0x887C, //CJK UNIFIED IDEOGRAPH - 0xD082: 0x8880, //CJK UNIFIED IDEOGRAPH - 0xD083: 0x8883, //CJK UNIFIED IDEOGRAPH - 0xD084: 0x8886, //CJK UNIFIED IDEOGRAPH - 0xD085: 0x8887, //CJK UNIFIED IDEOGRAPH - 0xD086: 0x8889, //CJK UNIFIED IDEOGRAPH - 0xD087: 0x888A, //CJK UNIFIED IDEOGRAPH - 0xD088: 0x888C, //CJK UNIFIED IDEOGRAPH - 0xD089: 0x888E, //CJK UNIFIED IDEOGRAPH - 0xD08A: 0x888F, //CJK UNIFIED IDEOGRAPH - 0xD08B: 0x8890, //CJK UNIFIED IDEOGRAPH - 0xD08C: 0x8891, //CJK UNIFIED IDEOGRAPH - 0xD08D: 0x8893, //CJK UNIFIED IDEOGRAPH - 0xD08E: 0x8894, //CJK UNIFIED IDEOGRAPH - 0xD08F: 0x8895, //CJK UNIFIED IDEOGRAPH - 0xD090: 0x8897, //CJK UNIFIED IDEOGRAPH - 0xD091: 0x8898, //CJK UNIFIED IDEOGRAPH - 0xD092: 0x8899, //CJK UNIFIED IDEOGRAPH - 0xD093: 0x889A, //CJK UNIFIED IDEOGRAPH - 0xD094: 0x889B, //CJK UNIFIED IDEOGRAPH - 0xD095: 0x889D, //CJK UNIFIED IDEOGRAPH - 0xD096: 0x889E, //CJK UNIFIED IDEOGRAPH - 0xD097: 0x889F, //CJK UNIFIED IDEOGRAPH - 0xD098: 0x88A0, //CJK UNIFIED IDEOGRAPH - 0xD099: 0x88A1, //CJK UNIFIED IDEOGRAPH - 0xD09A: 0x88A3, //CJK UNIFIED IDEOGRAPH - 0xD09B: 0x88A5, //CJK UNIFIED IDEOGRAPH - 0xD09C: 0x88A6, //CJK UNIFIED IDEOGRAPH - 0xD09D: 0x88A7, //CJK UNIFIED IDEOGRAPH - 0xD09E: 0x88A8, //CJK UNIFIED IDEOGRAPH - 0xD09F: 0x88A9, //CJK UNIFIED IDEOGRAPH - 0xD0A0: 0x88AA, //CJK UNIFIED IDEOGRAPH - 0xD0A1: 0x5C0F, //CJK UNIFIED IDEOGRAPH - 0xD0A2: 0x5B5D, //CJK UNIFIED IDEOGRAPH - 0xD0A3: 0x6821, //CJK UNIFIED IDEOGRAPH - 0xD0A4: 0x8096, //CJK UNIFIED IDEOGRAPH - 0xD0A5: 0x5578, //CJK UNIFIED IDEOGRAPH - 0xD0A6: 0x7B11, //CJK UNIFIED IDEOGRAPH - 0xD0A7: 0x6548, //CJK UNIFIED IDEOGRAPH - 0xD0A8: 0x6954, //CJK UNIFIED IDEOGRAPH - 0xD0A9: 0x4E9B, //CJK UNIFIED IDEOGRAPH - 0xD0AA: 0x6B47, //CJK UNIFIED IDEOGRAPH - 0xD0AB: 0x874E, //CJK UNIFIED IDEOGRAPH - 0xD0AC: 0x978B, //CJK UNIFIED IDEOGRAPH - 0xD0AD: 0x534F, //CJK UNIFIED IDEOGRAPH - 0xD0AE: 0x631F, //CJK UNIFIED IDEOGRAPH - 0xD0AF: 0x643A, //CJK UNIFIED IDEOGRAPH - 0xD0B0: 0x90AA, //CJK UNIFIED IDEOGRAPH - 0xD0B1: 0x659C, //CJK UNIFIED IDEOGRAPH - 0xD0B2: 0x80C1, //CJK UNIFIED IDEOGRAPH - 0xD0B3: 0x8C10, //CJK UNIFIED IDEOGRAPH - 0xD0B4: 0x5199, //CJK UNIFIED IDEOGRAPH - 0xD0B5: 0x68B0, //CJK UNIFIED IDEOGRAPH - 0xD0B6: 0x5378, //CJK UNIFIED IDEOGRAPH - 0xD0B7: 0x87F9, //CJK UNIFIED IDEOGRAPH - 0xD0B8: 0x61C8, //CJK UNIFIED IDEOGRAPH - 0xD0B9: 0x6CC4, //CJK UNIFIED IDEOGRAPH - 0xD0BA: 0x6CFB, //CJK UNIFIED IDEOGRAPH - 0xD0BB: 0x8C22, //CJK UNIFIED IDEOGRAPH - 0xD0BC: 0x5C51, //CJK UNIFIED IDEOGRAPH - 0xD0BD: 0x85AA, //CJK UNIFIED IDEOGRAPH - 0xD0BE: 0x82AF, //CJK UNIFIED IDEOGRAPH - 0xD0BF: 0x950C, //CJK UNIFIED IDEOGRAPH - 0xD0C0: 0x6B23, //CJK UNIFIED IDEOGRAPH - 0xD0C1: 0x8F9B, //CJK UNIFIED IDEOGRAPH - 0xD0C2: 0x65B0, //CJK UNIFIED IDEOGRAPH - 0xD0C3: 0x5FFB, //CJK UNIFIED IDEOGRAPH - 0xD0C4: 0x5FC3, //CJK UNIFIED IDEOGRAPH - 0xD0C5: 0x4FE1, //CJK UNIFIED IDEOGRAPH - 0xD0C6: 0x8845, //CJK UNIFIED IDEOGRAPH - 0xD0C7: 0x661F, //CJK UNIFIED IDEOGRAPH - 0xD0C8: 0x8165, //CJK UNIFIED IDEOGRAPH - 0xD0C9: 0x7329, //CJK UNIFIED IDEOGRAPH - 0xD0CA: 0x60FA, //CJK UNIFIED IDEOGRAPH - 0xD0CB: 0x5174, //CJK UNIFIED IDEOGRAPH - 0xD0CC: 0x5211, //CJK UNIFIED IDEOGRAPH - 0xD0CD: 0x578B, //CJK UNIFIED IDEOGRAPH - 0xD0CE: 0x5F62, //CJK UNIFIED IDEOGRAPH - 0xD0CF: 0x90A2, //CJK UNIFIED IDEOGRAPH - 0xD0D0: 0x884C, //CJK UNIFIED IDEOGRAPH - 0xD0D1: 0x9192, //CJK UNIFIED IDEOGRAPH - 0xD0D2: 0x5E78, //CJK UNIFIED IDEOGRAPH - 0xD0D3: 0x674F, //CJK UNIFIED IDEOGRAPH - 0xD0D4: 0x6027, //CJK UNIFIED IDEOGRAPH - 0xD0D5: 0x59D3, //CJK UNIFIED IDEOGRAPH - 0xD0D6: 0x5144, //CJK UNIFIED IDEOGRAPH - 0xD0D7: 0x51F6, //CJK UNIFIED IDEOGRAPH - 0xD0D8: 0x80F8, //CJK UNIFIED IDEOGRAPH - 0xD0D9: 0x5308, //CJK UNIFIED IDEOGRAPH - 0xD0DA: 0x6C79, //CJK UNIFIED IDEOGRAPH - 0xD0DB: 0x96C4, //CJK UNIFIED IDEOGRAPH - 0xD0DC: 0x718A, //CJK UNIFIED IDEOGRAPH - 0xD0DD: 0x4F11, //CJK UNIFIED IDEOGRAPH - 0xD0DE: 0x4FEE, //CJK UNIFIED IDEOGRAPH - 0xD0DF: 0x7F9E, //CJK UNIFIED IDEOGRAPH - 0xD0E0: 0x673D, //CJK UNIFIED IDEOGRAPH - 0xD0E1: 0x55C5, //CJK UNIFIED IDEOGRAPH - 0xD0E2: 0x9508, //CJK UNIFIED IDEOGRAPH - 0xD0E3: 0x79C0, //CJK UNIFIED IDEOGRAPH - 0xD0E4: 0x8896, //CJK UNIFIED IDEOGRAPH - 0xD0E5: 0x7EE3, //CJK UNIFIED IDEOGRAPH - 0xD0E6: 0x589F, //CJK UNIFIED IDEOGRAPH - 0xD0E7: 0x620C, //CJK UNIFIED IDEOGRAPH - 0xD0E8: 0x9700, //CJK UNIFIED IDEOGRAPH - 0xD0E9: 0x865A, //CJK UNIFIED IDEOGRAPH - 0xD0EA: 0x5618, //CJK UNIFIED IDEOGRAPH - 0xD0EB: 0x987B, //CJK UNIFIED IDEOGRAPH - 0xD0EC: 0x5F90, //CJK UNIFIED IDEOGRAPH - 0xD0ED: 0x8BB8, //CJK UNIFIED IDEOGRAPH - 0xD0EE: 0x84C4, //CJK UNIFIED IDEOGRAPH - 0xD0EF: 0x9157, //CJK UNIFIED IDEOGRAPH - 0xD0F0: 0x53D9, //CJK UNIFIED IDEOGRAPH - 0xD0F1: 0x65ED, //CJK UNIFIED IDEOGRAPH - 0xD0F2: 0x5E8F, //CJK UNIFIED IDEOGRAPH - 0xD0F3: 0x755C, //CJK UNIFIED IDEOGRAPH - 0xD0F4: 0x6064, //CJK UNIFIED IDEOGRAPH - 0xD0F5: 0x7D6E, //CJK UNIFIED IDEOGRAPH - 0xD0F6: 0x5A7F, //CJK UNIFIED IDEOGRAPH - 0xD0F7: 0x7EEA, //CJK UNIFIED IDEOGRAPH - 0xD0F8: 0x7EED, //CJK UNIFIED IDEOGRAPH - 0xD0F9: 0x8F69, //CJK UNIFIED IDEOGRAPH - 0xD0FA: 0x55A7, //CJK UNIFIED IDEOGRAPH - 0xD0FB: 0x5BA3, //CJK UNIFIED IDEOGRAPH - 0xD0FC: 0x60AC, //CJK UNIFIED IDEOGRAPH - 0xD0FD: 0x65CB, //CJK UNIFIED IDEOGRAPH - 0xD0FE: 0x7384, //CJK UNIFIED IDEOGRAPH - 0xD140: 0x88AC, //CJK UNIFIED IDEOGRAPH - 0xD141: 0x88AE, //CJK UNIFIED IDEOGRAPH - 0xD142: 0x88AF, //CJK UNIFIED IDEOGRAPH - 0xD143: 0x88B0, //CJK UNIFIED IDEOGRAPH - 0xD144: 0x88B2, //CJK UNIFIED IDEOGRAPH - 0xD145: 0x88B3, //CJK UNIFIED IDEOGRAPH - 0xD146: 0x88B4, //CJK UNIFIED IDEOGRAPH - 0xD147: 0x88B5, //CJK UNIFIED IDEOGRAPH - 0xD148: 0x88B6, //CJK UNIFIED IDEOGRAPH - 0xD149: 0x88B8, //CJK UNIFIED IDEOGRAPH - 0xD14A: 0x88B9, //CJK UNIFIED IDEOGRAPH - 0xD14B: 0x88BA, //CJK UNIFIED IDEOGRAPH - 0xD14C: 0x88BB, //CJK UNIFIED IDEOGRAPH - 0xD14D: 0x88BD, //CJK UNIFIED IDEOGRAPH - 0xD14E: 0x88BE, //CJK UNIFIED IDEOGRAPH - 0xD14F: 0x88BF, //CJK UNIFIED IDEOGRAPH - 0xD150: 0x88C0, //CJK UNIFIED IDEOGRAPH - 0xD151: 0x88C3, //CJK UNIFIED IDEOGRAPH - 0xD152: 0x88C4, //CJK UNIFIED IDEOGRAPH - 0xD153: 0x88C7, //CJK UNIFIED IDEOGRAPH - 0xD154: 0x88C8, //CJK UNIFIED IDEOGRAPH - 0xD155: 0x88CA, //CJK UNIFIED IDEOGRAPH - 0xD156: 0x88CB, //CJK UNIFIED IDEOGRAPH - 0xD157: 0x88CC, //CJK UNIFIED IDEOGRAPH - 0xD158: 0x88CD, //CJK UNIFIED IDEOGRAPH - 0xD159: 0x88CF, //CJK UNIFIED IDEOGRAPH - 0xD15A: 0x88D0, //CJK UNIFIED IDEOGRAPH - 0xD15B: 0x88D1, //CJK UNIFIED IDEOGRAPH - 0xD15C: 0x88D3, //CJK UNIFIED IDEOGRAPH - 0xD15D: 0x88D6, //CJK UNIFIED IDEOGRAPH - 0xD15E: 0x88D7, //CJK UNIFIED IDEOGRAPH - 0xD15F: 0x88DA, //CJK UNIFIED IDEOGRAPH - 0xD160: 0x88DB, //CJK UNIFIED IDEOGRAPH - 0xD161: 0x88DC, //CJK UNIFIED IDEOGRAPH - 0xD162: 0x88DD, //CJK UNIFIED IDEOGRAPH - 0xD163: 0x88DE, //CJK UNIFIED IDEOGRAPH - 0xD164: 0x88E0, //CJK UNIFIED IDEOGRAPH - 0xD165: 0x88E1, //CJK UNIFIED IDEOGRAPH - 0xD166: 0x88E6, //CJK UNIFIED IDEOGRAPH - 0xD167: 0x88E7, //CJK UNIFIED IDEOGRAPH - 0xD168: 0x88E9, //CJK UNIFIED IDEOGRAPH - 0xD169: 0x88EA, //CJK UNIFIED IDEOGRAPH - 0xD16A: 0x88EB, //CJK UNIFIED IDEOGRAPH - 0xD16B: 0x88EC, //CJK UNIFIED IDEOGRAPH - 0xD16C: 0x88ED, //CJK UNIFIED IDEOGRAPH - 0xD16D: 0x88EE, //CJK UNIFIED IDEOGRAPH - 0xD16E: 0x88EF, //CJK UNIFIED IDEOGRAPH - 0xD16F: 0x88F2, //CJK UNIFIED IDEOGRAPH - 0xD170: 0x88F5, //CJK UNIFIED IDEOGRAPH - 0xD171: 0x88F6, //CJK UNIFIED IDEOGRAPH - 0xD172: 0x88F7, //CJK UNIFIED IDEOGRAPH - 0xD173: 0x88FA, //CJK UNIFIED IDEOGRAPH - 0xD174: 0x88FB, //CJK UNIFIED IDEOGRAPH - 0xD175: 0x88FD, //CJK UNIFIED IDEOGRAPH - 0xD176: 0x88FF, //CJK UNIFIED IDEOGRAPH - 0xD177: 0x8900, //CJK UNIFIED IDEOGRAPH - 0xD178: 0x8901, //CJK UNIFIED IDEOGRAPH - 0xD179: 0x8903, //CJK UNIFIED IDEOGRAPH - 0xD17A: 0x8904, //CJK UNIFIED IDEOGRAPH - 0xD17B: 0x8905, //CJK UNIFIED IDEOGRAPH - 0xD17C: 0x8906, //CJK UNIFIED IDEOGRAPH - 0xD17D: 0x8907, //CJK UNIFIED IDEOGRAPH - 0xD17E: 0x8908, //CJK UNIFIED IDEOGRAPH - 0xD180: 0x8909, //CJK UNIFIED IDEOGRAPH - 0xD181: 0x890B, //CJK UNIFIED IDEOGRAPH - 0xD182: 0x890C, //CJK UNIFIED IDEOGRAPH - 0xD183: 0x890D, //CJK UNIFIED IDEOGRAPH - 0xD184: 0x890E, //CJK UNIFIED IDEOGRAPH - 0xD185: 0x890F, //CJK UNIFIED IDEOGRAPH - 0xD186: 0x8911, //CJK UNIFIED IDEOGRAPH - 0xD187: 0x8914, //CJK UNIFIED IDEOGRAPH - 0xD188: 0x8915, //CJK UNIFIED IDEOGRAPH - 0xD189: 0x8916, //CJK UNIFIED IDEOGRAPH - 0xD18A: 0x8917, //CJK UNIFIED IDEOGRAPH - 0xD18B: 0x8918, //CJK UNIFIED IDEOGRAPH - 0xD18C: 0x891C, //CJK UNIFIED IDEOGRAPH - 0xD18D: 0x891D, //CJK UNIFIED IDEOGRAPH - 0xD18E: 0x891E, //CJK UNIFIED IDEOGRAPH - 0xD18F: 0x891F, //CJK UNIFIED IDEOGRAPH - 0xD190: 0x8920, //CJK UNIFIED IDEOGRAPH - 0xD191: 0x8922, //CJK UNIFIED IDEOGRAPH - 0xD192: 0x8923, //CJK UNIFIED IDEOGRAPH - 0xD193: 0x8924, //CJK UNIFIED IDEOGRAPH - 0xD194: 0x8926, //CJK UNIFIED IDEOGRAPH - 0xD195: 0x8927, //CJK UNIFIED IDEOGRAPH - 0xD196: 0x8928, //CJK UNIFIED IDEOGRAPH - 0xD197: 0x8929, //CJK UNIFIED IDEOGRAPH - 0xD198: 0x892C, //CJK UNIFIED IDEOGRAPH - 0xD199: 0x892D, //CJK UNIFIED IDEOGRAPH - 0xD19A: 0x892E, //CJK UNIFIED IDEOGRAPH - 0xD19B: 0x892F, //CJK UNIFIED IDEOGRAPH - 0xD19C: 0x8931, //CJK UNIFIED IDEOGRAPH - 0xD19D: 0x8932, //CJK UNIFIED IDEOGRAPH - 0xD19E: 0x8933, //CJK UNIFIED IDEOGRAPH - 0xD19F: 0x8935, //CJK UNIFIED IDEOGRAPH - 0xD1A0: 0x8937, //CJK UNIFIED IDEOGRAPH - 0xD1A1: 0x9009, //CJK UNIFIED IDEOGRAPH - 0xD1A2: 0x7663, //CJK UNIFIED IDEOGRAPH - 0xD1A3: 0x7729, //CJK UNIFIED IDEOGRAPH - 0xD1A4: 0x7EDA, //CJK UNIFIED IDEOGRAPH - 0xD1A5: 0x9774, //CJK UNIFIED IDEOGRAPH - 0xD1A6: 0x859B, //CJK UNIFIED IDEOGRAPH - 0xD1A7: 0x5B66, //CJK UNIFIED IDEOGRAPH - 0xD1A8: 0x7A74, //CJK UNIFIED IDEOGRAPH - 0xD1A9: 0x96EA, //CJK UNIFIED IDEOGRAPH - 0xD1AA: 0x8840, //CJK UNIFIED IDEOGRAPH - 0xD1AB: 0x52CB, //CJK UNIFIED IDEOGRAPH - 0xD1AC: 0x718F, //CJK UNIFIED IDEOGRAPH - 0xD1AD: 0x5FAA, //CJK UNIFIED IDEOGRAPH - 0xD1AE: 0x65EC, //CJK UNIFIED IDEOGRAPH - 0xD1AF: 0x8BE2, //CJK UNIFIED IDEOGRAPH - 0xD1B0: 0x5BFB, //CJK UNIFIED IDEOGRAPH - 0xD1B1: 0x9A6F, //CJK UNIFIED IDEOGRAPH - 0xD1B2: 0x5DE1, //CJK UNIFIED IDEOGRAPH - 0xD1B3: 0x6B89, //CJK UNIFIED IDEOGRAPH - 0xD1B4: 0x6C5B, //CJK UNIFIED IDEOGRAPH - 0xD1B5: 0x8BAD, //CJK UNIFIED IDEOGRAPH - 0xD1B6: 0x8BAF, //CJK UNIFIED IDEOGRAPH - 0xD1B7: 0x900A, //CJK UNIFIED IDEOGRAPH - 0xD1B8: 0x8FC5, //CJK UNIFIED IDEOGRAPH - 0xD1B9: 0x538B, //CJK UNIFIED IDEOGRAPH - 0xD1BA: 0x62BC, //CJK UNIFIED IDEOGRAPH - 0xD1BB: 0x9E26, //CJK UNIFIED IDEOGRAPH - 0xD1BC: 0x9E2D, //CJK UNIFIED IDEOGRAPH - 0xD1BD: 0x5440, //CJK UNIFIED IDEOGRAPH - 0xD1BE: 0x4E2B, //CJK UNIFIED IDEOGRAPH - 0xD1BF: 0x82BD, //CJK UNIFIED IDEOGRAPH - 0xD1C0: 0x7259, //CJK UNIFIED IDEOGRAPH - 0xD1C1: 0x869C, //CJK UNIFIED IDEOGRAPH - 0xD1C2: 0x5D16, //CJK UNIFIED IDEOGRAPH - 0xD1C3: 0x8859, //CJK UNIFIED IDEOGRAPH - 0xD1C4: 0x6DAF, //CJK UNIFIED IDEOGRAPH - 0xD1C5: 0x96C5, //CJK UNIFIED IDEOGRAPH - 0xD1C6: 0x54D1, //CJK UNIFIED IDEOGRAPH - 0xD1C7: 0x4E9A, //CJK UNIFIED IDEOGRAPH - 0xD1C8: 0x8BB6, //CJK UNIFIED IDEOGRAPH - 0xD1C9: 0x7109, //CJK UNIFIED IDEOGRAPH - 0xD1CA: 0x54BD, //CJK UNIFIED IDEOGRAPH - 0xD1CB: 0x9609, //CJK UNIFIED IDEOGRAPH - 0xD1CC: 0x70DF, //CJK UNIFIED IDEOGRAPH - 0xD1CD: 0x6DF9, //CJK UNIFIED IDEOGRAPH - 0xD1CE: 0x76D0, //CJK UNIFIED IDEOGRAPH - 0xD1CF: 0x4E25, //CJK UNIFIED IDEOGRAPH - 0xD1D0: 0x7814, //CJK UNIFIED IDEOGRAPH - 0xD1D1: 0x8712, //CJK UNIFIED IDEOGRAPH - 0xD1D2: 0x5CA9, //CJK UNIFIED IDEOGRAPH - 0xD1D3: 0x5EF6, //CJK UNIFIED IDEOGRAPH - 0xD1D4: 0x8A00, //CJK UNIFIED IDEOGRAPH - 0xD1D5: 0x989C, //CJK UNIFIED IDEOGRAPH - 0xD1D6: 0x960E, //CJK UNIFIED IDEOGRAPH - 0xD1D7: 0x708E, //CJK UNIFIED IDEOGRAPH - 0xD1D8: 0x6CBF, //CJK UNIFIED IDEOGRAPH - 0xD1D9: 0x5944, //CJK UNIFIED IDEOGRAPH - 0xD1DA: 0x63A9, //CJK UNIFIED IDEOGRAPH - 0xD1DB: 0x773C, //CJK UNIFIED IDEOGRAPH - 0xD1DC: 0x884D, //CJK UNIFIED IDEOGRAPH - 0xD1DD: 0x6F14, //CJK UNIFIED IDEOGRAPH - 0xD1DE: 0x8273, //CJK UNIFIED IDEOGRAPH - 0xD1DF: 0x5830, //CJK UNIFIED IDEOGRAPH - 0xD1E0: 0x71D5, //CJK UNIFIED IDEOGRAPH - 0xD1E1: 0x538C, //CJK UNIFIED IDEOGRAPH - 0xD1E2: 0x781A, //CJK UNIFIED IDEOGRAPH - 0xD1E3: 0x96C1, //CJK UNIFIED IDEOGRAPH - 0xD1E4: 0x5501, //CJK UNIFIED IDEOGRAPH - 0xD1E5: 0x5F66, //CJK UNIFIED IDEOGRAPH - 0xD1E6: 0x7130, //CJK UNIFIED IDEOGRAPH - 0xD1E7: 0x5BB4, //CJK UNIFIED IDEOGRAPH - 0xD1E8: 0x8C1A, //CJK UNIFIED IDEOGRAPH - 0xD1E9: 0x9A8C, //CJK UNIFIED IDEOGRAPH - 0xD1EA: 0x6B83, //CJK UNIFIED IDEOGRAPH - 0xD1EB: 0x592E, //CJK UNIFIED IDEOGRAPH - 0xD1EC: 0x9E2F, //CJK UNIFIED IDEOGRAPH - 0xD1ED: 0x79E7, //CJK UNIFIED IDEOGRAPH - 0xD1EE: 0x6768, //CJK UNIFIED IDEOGRAPH - 0xD1EF: 0x626C, //CJK UNIFIED IDEOGRAPH - 0xD1F0: 0x4F6F, //CJK UNIFIED IDEOGRAPH - 0xD1F1: 0x75A1, //CJK UNIFIED IDEOGRAPH - 0xD1F2: 0x7F8A, //CJK UNIFIED IDEOGRAPH - 0xD1F3: 0x6D0B, //CJK UNIFIED IDEOGRAPH - 0xD1F4: 0x9633, //CJK UNIFIED IDEOGRAPH - 0xD1F5: 0x6C27, //CJK UNIFIED IDEOGRAPH - 0xD1F6: 0x4EF0, //CJK UNIFIED IDEOGRAPH - 0xD1F7: 0x75D2, //CJK UNIFIED IDEOGRAPH - 0xD1F8: 0x517B, //CJK UNIFIED IDEOGRAPH - 0xD1F9: 0x6837, //CJK UNIFIED IDEOGRAPH - 0xD1FA: 0x6F3E, //CJK UNIFIED IDEOGRAPH - 0xD1FB: 0x9080, //CJK UNIFIED IDEOGRAPH - 0xD1FC: 0x8170, //CJK UNIFIED IDEOGRAPH - 0xD1FD: 0x5996, //CJK UNIFIED IDEOGRAPH - 0xD1FE: 0x7476, //CJK UNIFIED IDEOGRAPH - 0xD240: 0x8938, //CJK UNIFIED IDEOGRAPH - 0xD241: 0x8939, //CJK UNIFIED IDEOGRAPH - 0xD242: 0x893A, //CJK UNIFIED IDEOGRAPH - 0xD243: 0x893B, //CJK UNIFIED IDEOGRAPH - 0xD244: 0x893C, //CJK UNIFIED IDEOGRAPH - 0xD245: 0x893D, //CJK UNIFIED IDEOGRAPH - 0xD246: 0x893E, //CJK UNIFIED IDEOGRAPH - 0xD247: 0x893F, //CJK UNIFIED IDEOGRAPH - 0xD248: 0x8940, //CJK UNIFIED IDEOGRAPH - 0xD249: 0x8942, //CJK UNIFIED IDEOGRAPH - 0xD24A: 0x8943, //CJK UNIFIED IDEOGRAPH - 0xD24B: 0x8945, //CJK UNIFIED IDEOGRAPH - 0xD24C: 0x8946, //CJK UNIFIED IDEOGRAPH - 0xD24D: 0x8947, //CJK UNIFIED IDEOGRAPH - 0xD24E: 0x8948, //CJK UNIFIED IDEOGRAPH - 0xD24F: 0x8949, //CJK UNIFIED IDEOGRAPH - 0xD250: 0x894A, //CJK UNIFIED IDEOGRAPH - 0xD251: 0x894B, //CJK UNIFIED IDEOGRAPH - 0xD252: 0x894C, //CJK UNIFIED IDEOGRAPH - 0xD253: 0x894D, //CJK UNIFIED IDEOGRAPH - 0xD254: 0x894E, //CJK UNIFIED IDEOGRAPH - 0xD255: 0x894F, //CJK UNIFIED IDEOGRAPH - 0xD256: 0x8950, //CJK UNIFIED IDEOGRAPH - 0xD257: 0x8951, //CJK UNIFIED IDEOGRAPH - 0xD258: 0x8952, //CJK UNIFIED IDEOGRAPH - 0xD259: 0x8953, //CJK UNIFIED IDEOGRAPH - 0xD25A: 0x8954, //CJK UNIFIED IDEOGRAPH - 0xD25B: 0x8955, //CJK UNIFIED IDEOGRAPH - 0xD25C: 0x8956, //CJK UNIFIED IDEOGRAPH - 0xD25D: 0x8957, //CJK UNIFIED IDEOGRAPH - 0xD25E: 0x8958, //CJK UNIFIED IDEOGRAPH - 0xD25F: 0x8959, //CJK UNIFIED IDEOGRAPH - 0xD260: 0x895A, //CJK UNIFIED IDEOGRAPH - 0xD261: 0x895B, //CJK UNIFIED IDEOGRAPH - 0xD262: 0x895C, //CJK UNIFIED IDEOGRAPH - 0xD263: 0x895D, //CJK UNIFIED IDEOGRAPH - 0xD264: 0x8960, //CJK UNIFIED IDEOGRAPH - 0xD265: 0x8961, //CJK UNIFIED IDEOGRAPH - 0xD266: 0x8962, //CJK UNIFIED IDEOGRAPH - 0xD267: 0x8963, //CJK UNIFIED IDEOGRAPH - 0xD268: 0x8964, //CJK UNIFIED IDEOGRAPH - 0xD269: 0x8965, //CJK UNIFIED IDEOGRAPH - 0xD26A: 0x8967, //CJK UNIFIED IDEOGRAPH - 0xD26B: 0x8968, //CJK UNIFIED IDEOGRAPH - 0xD26C: 0x8969, //CJK UNIFIED IDEOGRAPH - 0xD26D: 0x896A, //CJK UNIFIED IDEOGRAPH - 0xD26E: 0x896B, //CJK UNIFIED IDEOGRAPH - 0xD26F: 0x896C, //CJK UNIFIED IDEOGRAPH - 0xD270: 0x896D, //CJK UNIFIED IDEOGRAPH - 0xD271: 0x896E, //CJK UNIFIED IDEOGRAPH - 0xD272: 0x896F, //CJK UNIFIED IDEOGRAPH - 0xD273: 0x8970, //CJK UNIFIED IDEOGRAPH - 0xD274: 0x8971, //CJK UNIFIED IDEOGRAPH - 0xD275: 0x8972, //CJK UNIFIED IDEOGRAPH - 0xD276: 0x8973, //CJK UNIFIED IDEOGRAPH - 0xD277: 0x8974, //CJK UNIFIED IDEOGRAPH - 0xD278: 0x8975, //CJK UNIFIED IDEOGRAPH - 0xD279: 0x8976, //CJK UNIFIED IDEOGRAPH - 0xD27A: 0x8977, //CJK UNIFIED IDEOGRAPH - 0xD27B: 0x8978, //CJK UNIFIED IDEOGRAPH - 0xD27C: 0x8979, //CJK UNIFIED IDEOGRAPH - 0xD27D: 0x897A, //CJK UNIFIED IDEOGRAPH - 0xD27E: 0x897C, //CJK UNIFIED IDEOGRAPH - 0xD280: 0x897D, //CJK UNIFIED IDEOGRAPH - 0xD281: 0x897E, //CJK UNIFIED IDEOGRAPH - 0xD282: 0x8980, //CJK UNIFIED IDEOGRAPH - 0xD283: 0x8982, //CJK UNIFIED IDEOGRAPH - 0xD284: 0x8984, //CJK UNIFIED IDEOGRAPH - 0xD285: 0x8985, //CJK UNIFIED IDEOGRAPH - 0xD286: 0x8987, //CJK UNIFIED IDEOGRAPH - 0xD287: 0x8988, //CJK UNIFIED IDEOGRAPH - 0xD288: 0x8989, //CJK UNIFIED IDEOGRAPH - 0xD289: 0x898A, //CJK UNIFIED IDEOGRAPH - 0xD28A: 0x898B, //CJK UNIFIED IDEOGRAPH - 0xD28B: 0x898C, //CJK UNIFIED IDEOGRAPH - 0xD28C: 0x898D, //CJK UNIFIED IDEOGRAPH - 0xD28D: 0x898E, //CJK UNIFIED IDEOGRAPH - 0xD28E: 0x898F, //CJK UNIFIED IDEOGRAPH - 0xD28F: 0x8990, //CJK UNIFIED IDEOGRAPH - 0xD290: 0x8991, //CJK UNIFIED IDEOGRAPH - 0xD291: 0x8992, //CJK UNIFIED IDEOGRAPH - 0xD292: 0x8993, //CJK UNIFIED IDEOGRAPH - 0xD293: 0x8994, //CJK UNIFIED IDEOGRAPH - 0xD294: 0x8995, //CJK UNIFIED IDEOGRAPH - 0xD295: 0x8996, //CJK UNIFIED IDEOGRAPH - 0xD296: 0x8997, //CJK UNIFIED IDEOGRAPH - 0xD297: 0x8998, //CJK UNIFIED IDEOGRAPH - 0xD298: 0x8999, //CJK UNIFIED IDEOGRAPH - 0xD299: 0x899A, //CJK UNIFIED IDEOGRAPH - 0xD29A: 0x899B, //CJK UNIFIED IDEOGRAPH - 0xD29B: 0x899C, //CJK UNIFIED IDEOGRAPH - 0xD29C: 0x899D, //CJK UNIFIED IDEOGRAPH - 0xD29D: 0x899E, //CJK UNIFIED IDEOGRAPH - 0xD29E: 0x899F, //CJK UNIFIED IDEOGRAPH - 0xD29F: 0x89A0, //CJK UNIFIED IDEOGRAPH - 0xD2A0: 0x89A1, //CJK UNIFIED IDEOGRAPH - 0xD2A1: 0x6447, //CJK UNIFIED IDEOGRAPH - 0xD2A2: 0x5C27, //CJK UNIFIED IDEOGRAPH - 0xD2A3: 0x9065, //CJK UNIFIED IDEOGRAPH - 0xD2A4: 0x7A91, //CJK UNIFIED IDEOGRAPH - 0xD2A5: 0x8C23, //CJK UNIFIED IDEOGRAPH - 0xD2A6: 0x59DA, //CJK UNIFIED IDEOGRAPH - 0xD2A7: 0x54AC, //CJK UNIFIED IDEOGRAPH - 0xD2A8: 0x8200, //CJK UNIFIED IDEOGRAPH - 0xD2A9: 0x836F, //CJK UNIFIED IDEOGRAPH - 0xD2AA: 0x8981, //CJK UNIFIED IDEOGRAPH - 0xD2AB: 0x8000, //CJK UNIFIED IDEOGRAPH - 0xD2AC: 0x6930, //CJK UNIFIED IDEOGRAPH - 0xD2AD: 0x564E, //CJK UNIFIED IDEOGRAPH - 0xD2AE: 0x8036, //CJK UNIFIED IDEOGRAPH - 0xD2AF: 0x7237, //CJK UNIFIED IDEOGRAPH - 0xD2B0: 0x91CE, //CJK UNIFIED IDEOGRAPH - 0xD2B1: 0x51B6, //CJK UNIFIED IDEOGRAPH - 0xD2B2: 0x4E5F, //CJK UNIFIED IDEOGRAPH - 0xD2B3: 0x9875, //CJK UNIFIED IDEOGRAPH - 0xD2B4: 0x6396, //CJK UNIFIED IDEOGRAPH - 0xD2B5: 0x4E1A, //CJK UNIFIED IDEOGRAPH - 0xD2B6: 0x53F6, //CJK UNIFIED IDEOGRAPH - 0xD2B7: 0x66F3, //CJK UNIFIED IDEOGRAPH - 0xD2B8: 0x814B, //CJK UNIFIED IDEOGRAPH - 0xD2B9: 0x591C, //CJK UNIFIED IDEOGRAPH - 0xD2BA: 0x6DB2, //CJK UNIFIED IDEOGRAPH - 0xD2BB: 0x4E00, //CJK UNIFIED IDEOGRAPH - 0xD2BC: 0x58F9, //CJK UNIFIED IDEOGRAPH - 0xD2BD: 0x533B, //CJK UNIFIED IDEOGRAPH - 0xD2BE: 0x63D6, //CJK UNIFIED IDEOGRAPH - 0xD2BF: 0x94F1, //CJK UNIFIED IDEOGRAPH - 0xD2C0: 0x4F9D, //CJK UNIFIED IDEOGRAPH - 0xD2C1: 0x4F0A, //CJK UNIFIED IDEOGRAPH - 0xD2C2: 0x8863, //CJK UNIFIED IDEOGRAPH - 0xD2C3: 0x9890, //CJK UNIFIED IDEOGRAPH - 0xD2C4: 0x5937, //CJK UNIFIED IDEOGRAPH - 0xD2C5: 0x9057, //CJK UNIFIED IDEOGRAPH - 0xD2C6: 0x79FB, //CJK UNIFIED IDEOGRAPH - 0xD2C7: 0x4EEA, //CJK UNIFIED IDEOGRAPH - 0xD2C8: 0x80F0, //CJK UNIFIED IDEOGRAPH - 0xD2C9: 0x7591, //CJK UNIFIED IDEOGRAPH - 0xD2CA: 0x6C82, //CJK UNIFIED IDEOGRAPH - 0xD2CB: 0x5B9C, //CJK UNIFIED IDEOGRAPH - 0xD2CC: 0x59E8, //CJK UNIFIED IDEOGRAPH - 0xD2CD: 0x5F5D, //CJK UNIFIED IDEOGRAPH - 0xD2CE: 0x6905, //CJK UNIFIED IDEOGRAPH - 0xD2CF: 0x8681, //CJK UNIFIED IDEOGRAPH - 0xD2D0: 0x501A, //CJK UNIFIED IDEOGRAPH - 0xD2D1: 0x5DF2, //CJK UNIFIED IDEOGRAPH - 0xD2D2: 0x4E59, //CJK UNIFIED IDEOGRAPH - 0xD2D3: 0x77E3, //CJK UNIFIED IDEOGRAPH - 0xD2D4: 0x4EE5, //CJK UNIFIED IDEOGRAPH - 0xD2D5: 0x827A, //CJK UNIFIED IDEOGRAPH - 0xD2D6: 0x6291, //CJK UNIFIED IDEOGRAPH - 0xD2D7: 0x6613, //CJK UNIFIED IDEOGRAPH - 0xD2D8: 0x9091, //CJK UNIFIED IDEOGRAPH - 0xD2D9: 0x5C79, //CJK UNIFIED IDEOGRAPH - 0xD2DA: 0x4EBF, //CJK UNIFIED IDEOGRAPH - 0xD2DB: 0x5F79, //CJK UNIFIED IDEOGRAPH - 0xD2DC: 0x81C6, //CJK UNIFIED IDEOGRAPH - 0xD2DD: 0x9038, //CJK UNIFIED IDEOGRAPH - 0xD2DE: 0x8084, //CJK UNIFIED IDEOGRAPH - 0xD2DF: 0x75AB, //CJK UNIFIED IDEOGRAPH - 0xD2E0: 0x4EA6, //CJK UNIFIED IDEOGRAPH - 0xD2E1: 0x88D4, //CJK UNIFIED IDEOGRAPH - 0xD2E2: 0x610F, //CJK UNIFIED IDEOGRAPH - 0xD2E3: 0x6BC5, //CJK UNIFIED IDEOGRAPH - 0xD2E4: 0x5FC6, //CJK UNIFIED IDEOGRAPH - 0xD2E5: 0x4E49, //CJK UNIFIED IDEOGRAPH - 0xD2E6: 0x76CA, //CJK UNIFIED IDEOGRAPH - 0xD2E7: 0x6EA2, //CJK UNIFIED IDEOGRAPH - 0xD2E8: 0x8BE3, //CJK UNIFIED IDEOGRAPH - 0xD2E9: 0x8BAE, //CJK UNIFIED IDEOGRAPH - 0xD2EA: 0x8C0A, //CJK UNIFIED IDEOGRAPH - 0xD2EB: 0x8BD1, //CJK UNIFIED IDEOGRAPH - 0xD2EC: 0x5F02, //CJK UNIFIED IDEOGRAPH - 0xD2ED: 0x7FFC, //CJK UNIFIED IDEOGRAPH - 0xD2EE: 0x7FCC, //CJK UNIFIED IDEOGRAPH - 0xD2EF: 0x7ECE, //CJK UNIFIED IDEOGRAPH - 0xD2F0: 0x8335, //CJK UNIFIED IDEOGRAPH - 0xD2F1: 0x836B, //CJK UNIFIED IDEOGRAPH - 0xD2F2: 0x56E0, //CJK UNIFIED IDEOGRAPH - 0xD2F3: 0x6BB7, //CJK UNIFIED IDEOGRAPH - 0xD2F4: 0x97F3, //CJK UNIFIED IDEOGRAPH - 0xD2F5: 0x9634, //CJK UNIFIED IDEOGRAPH - 0xD2F6: 0x59FB, //CJK UNIFIED IDEOGRAPH - 0xD2F7: 0x541F, //CJK UNIFIED IDEOGRAPH - 0xD2F8: 0x94F6, //CJK UNIFIED IDEOGRAPH - 0xD2F9: 0x6DEB, //CJK UNIFIED IDEOGRAPH - 0xD2FA: 0x5BC5, //CJK UNIFIED IDEOGRAPH - 0xD2FB: 0x996E, //CJK UNIFIED IDEOGRAPH - 0xD2FC: 0x5C39, //CJK UNIFIED IDEOGRAPH - 0xD2FD: 0x5F15, //CJK UNIFIED IDEOGRAPH - 0xD2FE: 0x9690, //CJK UNIFIED IDEOGRAPH - 0xD340: 0x89A2, //CJK UNIFIED IDEOGRAPH - 0xD341: 0x89A3, //CJK UNIFIED IDEOGRAPH - 0xD342: 0x89A4, //CJK UNIFIED IDEOGRAPH - 0xD343: 0x89A5, //CJK UNIFIED IDEOGRAPH - 0xD344: 0x89A6, //CJK UNIFIED IDEOGRAPH - 0xD345: 0x89A7, //CJK UNIFIED IDEOGRAPH - 0xD346: 0x89A8, //CJK UNIFIED IDEOGRAPH - 0xD347: 0x89A9, //CJK UNIFIED IDEOGRAPH - 0xD348: 0x89AA, //CJK UNIFIED IDEOGRAPH - 0xD349: 0x89AB, //CJK UNIFIED IDEOGRAPH - 0xD34A: 0x89AC, //CJK UNIFIED IDEOGRAPH - 0xD34B: 0x89AD, //CJK UNIFIED IDEOGRAPH - 0xD34C: 0x89AE, //CJK UNIFIED IDEOGRAPH - 0xD34D: 0x89AF, //CJK UNIFIED IDEOGRAPH - 0xD34E: 0x89B0, //CJK UNIFIED IDEOGRAPH - 0xD34F: 0x89B1, //CJK UNIFIED IDEOGRAPH - 0xD350: 0x89B2, //CJK UNIFIED IDEOGRAPH - 0xD351: 0x89B3, //CJK UNIFIED IDEOGRAPH - 0xD352: 0x89B4, //CJK UNIFIED IDEOGRAPH - 0xD353: 0x89B5, //CJK UNIFIED IDEOGRAPH - 0xD354: 0x89B6, //CJK UNIFIED IDEOGRAPH - 0xD355: 0x89B7, //CJK UNIFIED IDEOGRAPH - 0xD356: 0x89B8, //CJK UNIFIED IDEOGRAPH - 0xD357: 0x89B9, //CJK UNIFIED IDEOGRAPH - 0xD358: 0x89BA, //CJK UNIFIED IDEOGRAPH - 0xD359: 0x89BB, //CJK UNIFIED IDEOGRAPH - 0xD35A: 0x89BC, //CJK UNIFIED IDEOGRAPH - 0xD35B: 0x89BD, //CJK UNIFIED IDEOGRAPH - 0xD35C: 0x89BE, //CJK UNIFIED IDEOGRAPH - 0xD35D: 0x89BF, //CJK UNIFIED IDEOGRAPH - 0xD35E: 0x89C0, //CJK UNIFIED IDEOGRAPH - 0xD35F: 0x89C3, //CJK UNIFIED IDEOGRAPH - 0xD360: 0x89CD, //CJK UNIFIED IDEOGRAPH - 0xD361: 0x89D3, //CJK UNIFIED IDEOGRAPH - 0xD362: 0x89D4, //CJK UNIFIED IDEOGRAPH - 0xD363: 0x89D5, //CJK UNIFIED IDEOGRAPH - 0xD364: 0x89D7, //CJK UNIFIED IDEOGRAPH - 0xD365: 0x89D8, //CJK UNIFIED IDEOGRAPH - 0xD366: 0x89D9, //CJK UNIFIED IDEOGRAPH - 0xD367: 0x89DB, //CJK UNIFIED IDEOGRAPH - 0xD368: 0x89DD, //CJK UNIFIED IDEOGRAPH - 0xD369: 0x89DF, //CJK UNIFIED IDEOGRAPH - 0xD36A: 0x89E0, //CJK UNIFIED IDEOGRAPH - 0xD36B: 0x89E1, //CJK UNIFIED IDEOGRAPH - 0xD36C: 0x89E2, //CJK UNIFIED IDEOGRAPH - 0xD36D: 0x89E4, //CJK UNIFIED IDEOGRAPH - 0xD36E: 0x89E7, //CJK UNIFIED IDEOGRAPH - 0xD36F: 0x89E8, //CJK UNIFIED IDEOGRAPH - 0xD370: 0x89E9, //CJK UNIFIED IDEOGRAPH - 0xD371: 0x89EA, //CJK UNIFIED IDEOGRAPH - 0xD372: 0x89EC, //CJK UNIFIED IDEOGRAPH - 0xD373: 0x89ED, //CJK UNIFIED IDEOGRAPH - 0xD374: 0x89EE, //CJK UNIFIED IDEOGRAPH - 0xD375: 0x89F0, //CJK UNIFIED IDEOGRAPH - 0xD376: 0x89F1, //CJK UNIFIED IDEOGRAPH - 0xD377: 0x89F2, //CJK UNIFIED IDEOGRAPH - 0xD378: 0x89F4, //CJK UNIFIED IDEOGRAPH - 0xD379: 0x89F5, //CJK UNIFIED IDEOGRAPH - 0xD37A: 0x89F6, //CJK UNIFIED IDEOGRAPH - 0xD37B: 0x89F7, //CJK UNIFIED IDEOGRAPH - 0xD37C: 0x89F8, //CJK UNIFIED IDEOGRAPH - 0xD37D: 0x89F9, //CJK UNIFIED IDEOGRAPH - 0xD37E: 0x89FA, //CJK UNIFIED IDEOGRAPH - 0xD380: 0x89FB, //CJK UNIFIED IDEOGRAPH - 0xD381: 0x89FC, //CJK UNIFIED IDEOGRAPH - 0xD382: 0x89FD, //CJK UNIFIED IDEOGRAPH - 0xD383: 0x89FE, //CJK UNIFIED IDEOGRAPH - 0xD384: 0x89FF, //CJK UNIFIED IDEOGRAPH - 0xD385: 0x8A01, //CJK UNIFIED IDEOGRAPH - 0xD386: 0x8A02, //CJK UNIFIED IDEOGRAPH - 0xD387: 0x8A03, //CJK UNIFIED IDEOGRAPH - 0xD388: 0x8A04, //CJK UNIFIED IDEOGRAPH - 0xD389: 0x8A05, //CJK UNIFIED IDEOGRAPH - 0xD38A: 0x8A06, //CJK UNIFIED IDEOGRAPH - 0xD38B: 0x8A08, //CJK UNIFIED IDEOGRAPH - 0xD38C: 0x8A09, //CJK UNIFIED IDEOGRAPH - 0xD38D: 0x8A0A, //CJK UNIFIED IDEOGRAPH - 0xD38E: 0x8A0B, //CJK UNIFIED IDEOGRAPH - 0xD38F: 0x8A0C, //CJK UNIFIED IDEOGRAPH - 0xD390: 0x8A0D, //CJK UNIFIED IDEOGRAPH - 0xD391: 0x8A0E, //CJK UNIFIED IDEOGRAPH - 0xD392: 0x8A0F, //CJK UNIFIED IDEOGRAPH - 0xD393: 0x8A10, //CJK UNIFIED IDEOGRAPH - 0xD394: 0x8A11, //CJK UNIFIED IDEOGRAPH - 0xD395: 0x8A12, //CJK UNIFIED IDEOGRAPH - 0xD396: 0x8A13, //CJK UNIFIED IDEOGRAPH - 0xD397: 0x8A14, //CJK UNIFIED IDEOGRAPH - 0xD398: 0x8A15, //CJK UNIFIED IDEOGRAPH - 0xD399: 0x8A16, //CJK UNIFIED IDEOGRAPH - 0xD39A: 0x8A17, //CJK UNIFIED IDEOGRAPH - 0xD39B: 0x8A18, //CJK UNIFIED IDEOGRAPH - 0xD39C: 0x8A19, //CJK UNIFIED IDEOGRAPH - 0xD39D: 0x8A1A, //CJK UNIFIED IDEOGRAPH - 0xD39E: 0x8A1B, //CJK UNIFIED IDEOGRAPH - 0xD39F: 0x8A1C, //CJK UNIFIED IDEOGRAPH - 0xD3A0: 0x8A1D, //CJK UNIFIED IDEOGRAPH - 0xD3A1: 0x5370, //CJK UNIFIED IDEOGRAPH - 0xD3A2: 0x82F1, //CJK UNIFIED IDEOGRAPH - 0xD3A3: 0x6A31, //CJK UNIFIED IDEOGRAPH - 0xD3A4: 0x5A74, //CJK UNIFIED IDEOGRAPH - 0xD3A5: 0x9E70, //CJK UNIFIED IDEOGRAPH - 0xD3A6: 0x5E94, //CJK UNIFIED IDEOGRAPH - 0xD3A7: 0x7F28, //CJK UNIFIED IDEOGRAPH - 0xD3A8: 0x83B9, //CJK UNIFIED IDEOGRAPH - 0xD3A9: 0x8424, //CJK UNIFIED IDEOGRAPH - 0xD3AA: 0x8425, //CJK UNIFIED IDEOGRAPH - 0xD3AB: 0x8367, //CJK UNIFIED IDEOGRAPH - 0xD3AC: 0x8747, //CJK UNIFIED IDEOGRAPH - 0xD3AD: 0x8FCE, //CJK UNIFIED IDEOGRAPH - 0xD3AE: 0x8D62, //CJK UNIFIED IDEOGRAPH - 0xD3AF: 0x76C8, //CJK UNIFIED IDEOGRAPH - 0xD3B0: 0x5F71, //CJK UNIFIED IDEOGRAPH - 0xD3B1: 0x9896, //CJK UNIFIED IDEOGRAPH - 0xD3B2: 0x786C, //CJK UNIFIED IDEOGRAPH - 0xD3B3: 0x6620, //CJK UNIFIED IDEOGRAPH - 0xD3B4: 0x54DF, //CJK UNIFIED IDEOGRAPH - 0xD3B5: 0x62E5, //CJK UNIFIED IDEOGRAPH - 0xD3B6: 0x4F63, //CJK UNIFIED IDEOGRAPH - 0xD3B7: 0x81C3, //CJK UNIFIED IDEOGRAPH - 0xD3B8: 0x75C8, //CJK UNIFIED IDEOGRAPH - 0xD3B9: 0x5EB8, //CJK UNIFIED IDEOGRAPH - 0xD3BA: 0x96CD, //CJK UNIFIED IDEOGRAPH - 0xD3BB: 0x8E0A, //CJK UNIFIED IDEOGRAPH - 0xD3BC: 0x86F9, //CJK UNIFIED IDEOGRAPH - 0xD3BD: 0x548F, //CJK UNIFIED IDEOGRAPH - 0xD3BE: 0x6CF3, //CJK UNIFIED IDEOGRAPH - 0xD3BF: 0x6D8C, //CJK UNIFIED IDEOGRAPH - 0xD3C0: 0x6C38, //CJK UNIFIED IDEOGRAPH - 0xD3C1: 0x607F, //CJK UNIFIED IDEOGRAPH - 0xD3C2: 0x52C7, //CJK UNIFIED IDEOGRAPH - 0xD3C3: 0x7528, //CJK UNIFIED IDEOGRAPH - 0xD3C4: 0x5E7D, //CJK UNIFIED IDEOGRAPH - 0xD3C5: 0x4F18, //CJK UNIFIED IDEOGRAPH - 0xD3C6: 0x60A0, //CJK UNIFIED IDEOGRAPH - 0xD3C7: 0x5FE7, //CJK UNIFIED IDEOGRAPH - 0xD3C8: 0x5C24, //CJK UNIFIED IDEOGRAPH - 0xD3C9: 0x7531, //CJK UNIFIED IDEOGRAPH - 0xD3CA: 0x90AE, //CJK UNIFIED IDEOGRAPH - 0xD3CB: 0x94C0, //CJK UNIFIED IDEOGRAPH - 0xD3CC: 0x72B9, //CJK UNIFIED IDEOGRAPH - 0xD3CD: 0x6CB9, //CJK UNIFIED IDEOGRAPH - 0xD3CE: 0x6E38, //CJK UNIFIED IDEOGRAPH - 0xD3CF: 0x9149, //CJK UNIFIED IDEOGRAPH - 0xD3D0: 0x6709, //CJK UNIFIED IDEOGRAPH - 0xD3D1: 0x53CB, //CJK UNIFIED IDEOGRAPH - 0xD3D2: 0x53F3, //CJK UNIFIED IDEOGRAPH - 0xD3D3: 0x4F51, //CJK UNIFIED IDEOGRAPH - 0xD3D4: 0x91C9, //CJK UNIFIED IDEOGRAPH - 0xD3D5: 0x8BF1, //CJK UNIFIED IDEOGRAPH - 0xD3D6: 0x53C8, //CJK UNIFIED IDEOGRAPH - 0xD3D7: 0x5E7C, //CJK UNIFIED IDEOGRAPH - 0xD3D8: 0x8FC2, //CJK UNIFIED IDEOGRAPH - 0xD3D9: 0x6DE4, //CJK UNIFIED IDEOGRAPH - 0xD3DA: 0x4E8E, //CJK UNIFIED IDEOGRAPH - 0xD3DB: 0x76C2, //CJK UNIFIED IDEOGRAPH - 0xD3DC: 0x6986, //CJK UNIFIED IDEOGRAPH - 0xD3DD: 0x865E, //CJK UNIFIED IDEOGRAPH - 0xD3DE: 0x611A, //CJK UNIFIED IDEOGRAPH - 0xD3DF: 0x8206, //CJK UNIFIED IDEOGRAPH - 0xD3E0: 0x4F59, //CJK UNIFIED IDEOGRAPH - 0xD3E1: 0x4FDE, //CJK UNIFIED IDEOGRAPH - 0xD3E2: 0x903E, //CJK UNIFIED IDEOGRAPH - 0xD3E3: 0x9C7C, //CJK UNIFIED IDEOGRAPH - 0xD3E4: 0x6109, //CJK UNIFIED IDEOGRAPH - 0xD3E5: 0x6E1D, //CJK UNIFIED IDEOGRAPH - 0xD3E6: 0x6E14, //CJK UNIFIED IDEOGRAPH - 0xD3E7: 0x9685, //CJK UNIFIED IDEOGRAPH - 0xD3E8: 0x4E88, //CJK UNIFIED IDEOGRAPH - 0xD3E9: 0x5A31, //CJK UNIFIED IDEOGRAPH - 0xD3EA: 0x96E8, //CJK UNIFIED IDEOGRAPH - 0xD3EB: 0x4E0E, //CJK UNIFIED IDEOGRAPH - 0xD3EC: 0x5C7F, //CJK UNIFIED IDEOGRAPH - 0xD3ED: 0x79B9, //CJK UNIFIED IDEOGRAPH - 0xD3EE: 0x5B87, //CJK UNIFIED IDEOGRAPH - 0xD3EF: 0x8BED, //CJK UNIFIED IDEOGRAPH - 0xD3F0: 0x7FBD, //CJK UNIFIED IDEOGRAPH - 0xD3F1: 0x7389, //CJK UNIFIED IDEOGRAPH - 0xD3F2: 0x57DF, //CJK UNIFIED IDEOGRAPH - 0xD3F3: 0x828B, //CJK UNIFIED IDEOGRAPH - 0xD3F4: 0x90C1, //CJK UNIFIED IDEOGRAPH - 0xD3F5: 0x5401, //CJK UNIFIED IDEOGRAPH - 0xD3F6: 0x9047, //CJK UNIFIED IDEOGRAPH - 0xD3F7: 0x55BB, //CJK UNIFIED IDEOGRAPH - 0xD3F8: 0x5CEA, //CJK UNIFIED IDEOGRAPH - 0xD3F9: 0x5FA1, //CJK UNIFIED IDEOGRAPH - 0xD3FA: 0x6108, //CJK UNIFIED IDEOGRAPH - 0xD3FB: 0x6B32, //CJK UNIFIED IDEOGRAPH - 0xD3FC: 0x72F1, //CJK UNIFIED IDEOGRAPH - 0xD3FD: 0x80B2, //CJK UNIFIED IDEOGRAPH - 0xD3FE: 0x8A89, //CJK UNIFIED IDEOGRAPH - 0xD440: 0x8A1E, //CJK UNIFIED IDEOGRAPH - 0xD441: 0x8A1F, //CJK UNIFIED IDEOGRAPH - 0xD442: 0x8A20, //CJK UNIFIED IDEOGRAPH - 0xD443: 0x8A21, //CJK UNIFIED IDEOGRAPH - 0xD444: 0x8A22, //CJK UNIFIED IDEOGRAPH - 0xD445: 0x8A23, //CJK UNIFIED IDEOGRAPH - 0xD446: 0x8A24, //CJK UNIFIED IDEOGRAPH - 0xD447: 0x8A25, //CJK UNIFIED IDEOGRAPH - 0xD448: 0x8A26, //CJK UNIFIED IDEOGRAPH - 0xD449: 0x8A27, //CJK UNIFIED IDEOGRAPH - 0xD44A: 0x8A28, //CJK UNIFIED IDEOGRAPH - 0xD44B: 0x8A29, //CJK UNIFIED IDEOGRAPH - 0xD44C: 0x8A2A, //CJK UNIFIED IDEOGRAPH - 0xD44D: 0x8A2B, //CJK UNIFIED IDEOGRAPH - 0xD44E: 0x8A2C, //CJK UNIFIED IDEOGRAPH - 0xD44F: 0x8A2D, //CJK UNIFIED IDEOGRAPH - 0xD450: 0x8A2E, //CJK UNIFIED IDEOGRAPH - 0xD451: 0x8A2F, //CJK UNIFIED IDEOGRAPH - 0xD452: 0x8A30, //CJK UNIFIED IDEOGRAPH - 0xD453: 0x8A31, //CJK UNIFIED IDEOGRAPH - 0xD454: 0x8A32, //CJK UNIFIED IDEOGRAPH - 0xD455: 0x8A33, //CJK UNIFIED IDEOGRAPH - 0xD456: 0x8A34, //CJK UNIFIED IDEOGRAPH - 0xD457: 0x8A35, //CJK UNIFIED IDEOGRAPH - 0xD458: 0x8A36, //CJK UNIFIED IDEOGRAPH - 0xD459: 0x8A37, //CJK UNIFIED IDEOGRAPH - 0xD45A: 0x8A38, //CJK UNIFIED IDEOGRAPH - 0xD45B: 0x8A39, //CJK UNIFIED IDEOGRAPH - 0xD45C: 0x8A3A, //CJK UNIFIED IDEOGRAPH - 0xD45D: 0x8A3B, //CJK UNIFIED IDEOGRAPH - 0xD45E: 0x8A3C, //CJK UNIFIED IDEOGRAPH - 0xD45F: 0x8A3D, //CJK UNIFIED IDEOGRAPH - 0xD460: 0x8A3F, //CJK UNIFIED IDEOGRAPH - 0xD461: 0x8A40, //CJK UNIFIED IDEOGRAPH - 0xD462: 0x8A41, //CJK UNIFIED IDEOGRAPH - 0xD463: 0x8A42, //CJK UNIFIED IDEOGRAPH - 0xD464: 0x8A43, //CJK UNIFIED IDEOGRAPH - 0xD465: 0x8A44, //CJK UNIFIED IDEOGRAPH - 0xD466: 0x8A45, //CJK UNIFIED IDEOGRAPH - 0xD467: 0x8A46, //CJK UNIFIED IDEOGRAPH - 0xD468: 0x8A47, //CJK UNIFIED IDEOGRAPH - 0xD469: 0x8A49, //CJK UNIFIED IDEOGRAPH - 0xD46A: 0x8A4A, //CJK UNIFIED IDEOGRAPH - 0xD46B: 0x8A4B, //CJK UNIFIED IDEOGRAPH - 0xD46C: 0x8A4C, //CJK UNIFIED IDEOGRAPH - 0xD46D: 0x8A4D, //CJK UNIFIED IDEOGRAPH - 0xD46E: 0x8A4E, //CJK UNIFIED IDEOGRAPH - 0xD46F: 0x8A4F, //CJK UNIFIED IDEOGRAPH - 0xD470: 0x8A50, //CJK UNIFIED IDEOGRAPH - 0xD471: 0x8A51, //CJK UNIFIED IDEOGRAPH - 0xD472: 0x8A52, //CJK UNIFIED IDEOGRAPH - 0xD473: 0x8A53, //CJK UNIFIED IDEOGRAPH - 0xD474: 0x8A54, //CJK UNIFIED IDEOGRAPH - 0xD475: 0x8A55, //CJK UNIFIED IDEOGRAPH - 0xD476: 0x8A56, //CJK UNIFIED IDEOGRAPH - 0xD477: 0x8A57, //CJK UNIFIED IDEOGRAPH - 0xD478: 0x8A58, //CJK UNIFIED IDEOGRAPH - 0xD479: 0x8A59, //CJK UNIFIED IDEOGRAPH - 0xD47A: 0x8A5A, //CJK UNIFIED IDEOGRAPH - 0xD47B: 0x8A5B, //CJK UNIFIED IDEOGRAPH - 0xD47C: 0x8A5C, //CJK UNIFIED IDEOGRAPH - 0xD47D: 0x8A5D, //CJK UNIFIED IDEOGRAPH - 0xD47E: 0x8A5E, //CJK UNIFIED IDEOGRAPH - 0xD480: 0x8A5F, //CJK UNIFIED IDEOGRAPH - 0xD481: 0x8A60, //CJK UNIFIED IDEOGRAPH - 0xD482: 0x8A61, //CJK UNIFIED IDEOGRAPH - 0xD483: 0x8A62, //CJK UNIFIED IDEOGRAPH - 0xD484: 0x8A63, //CJK UNIFIED IDEOGRAPH - 0xD485: 0x8A64, //CJK UNIFIED IDEOGRAPH - 0xD486: 0x8A65, //CJK UNIFIED IDEOGRAPH - 0xD487: 0x8A66, //CJK UNIFIED IDEOGRAPH - 0xD488: 0x8A67, //CJK UNIFIED IDEOGRAPH - 0xD489: 0x8A68, //CJK UNIFIED IDEOGRAPH - 0xD48A: 0x8A69, //CJK UNIFIED IDEOGRAPH - 0xD48B: 0x8A6A, //CJK UNIFIED IDEOGRAPH - 0xD48C: 0x8A6B, //CJK UNIFIED IDEOGRAPH - 0xD48D: 0x8A6C, //CJK UNIFIED IDEOGRAPH - 0xD48E: 0x8A6D, //CJK UNIFIED IDEOGRAPH - 0xD48F: 0x8A6E, //CJK UNIFIED IDEOGRAPH - 0xD490: 0x8A6F, //CJK UNIFIED IDEOGRAPH - 0xD491: 0x8A70, //CJK UNIFIED IDEOGRAPH - 0xD492: 0x8A71, //CJK UNIFIED IDEOGRAPH - 0xD493: 0x8A72, //CJK UNIFIED IDEOGRAPH - 0xD494: 0x8A73, //CJK UNIFIED IDEOGRAPH - 0xD495: 0x8A74, //CJK UNIFIED IDEOGRAPH - 0xD496: 0x8A75, //CJK UNIFIED IDEOGRAPH - 0xD497: 0x8A76, //CJK UNIFIED IDEOGRAPH - 0xD498: 0x8A77, //CJK UNIFIED IDEOGRAPH - 0xD499: 0x8A78, //CJK UNIFIED IDEOGRAPH - 0xD49A: 0x8A7A, //CJK UNIFIED IDEOGRAPH - 0xD49B: 0x8A7B, //CJK UNIFIED IDEOGRAPH - 0xD49C: 0x8A7C, //CJK UNIFIED IDEOGRAPH - 0xD49D: 0x8A7D, //CJK UNIFIED IDEOGRAPH - 0xD49E: 0x8A7E, //CJK UNIFIED IDEOGRAPH - 0xD49F: 0x8A7F, //CJK UNIFIED IDEOGRAPH - 0xD4A0: 0x8A80, //CJK UNIFIED IDEOGRAPH - 0xD4A1: 0x6D74, //CJK UNIFIED IDEOGRAPH - 0xD4A2: 0x5BD3, //CJK UNIFIED IDEOGRAPH - 0xD4A3: 0x88D5, //CJK UNIFIED IDEOGRAPH - 0xD4A4: 0x9884, //CJK UNIFIED IDEOGRAPH - 0xD4A5: 0x8C6B, //CJK UNIFIED IDEOGRAPH - 0xD4A6: 0x9A6D, //CJK UNIFIED IDEOGRAPH - 0xD4A7: 0x9E33, //CJK UNIFIED IDEOGRAPH - 0xD4A8: 0x6E0A, //CJK UNIFIED IDEOGRAPH - 0xD4A9: 0x51A4, //CJK UNIFIED IDEOGRAPH - 0xD4AA: 0x5143, //CJK UNIFIED IDEOGRAPH - 0xD4AB: 0x57A3, //CJK UNIFIED IDEOGRAPH - 0xD4AC: 0x8881, //CJK UNIFIED IDEOGRAPH - 0xD4AD: 0x539F, //CJK UNIFIED IDEOGRAPH - 0xD4AE: 0x63F4, //CJK UNIFIED IDEOGRAPH - 0xD4AF: 0x8F95, //CJK UNIFIED IDEOGRAPH - 0xD4B0: 0x56ED, //CJK UNIFIED IDEOGRAPH - 0xD4B1: 0x5458, //CJK UNIFIED IDEOGRAPH - 0xD4B2: 0x5706, //CJK UNIFIED IDEOGRAPH - 0xD4B3: 0x733F, //CJK UNIFIED IDEOGRAPH - 0xD4B4: 0x6E90, //CJK UNIFIED IDEOGRAPH - 0xD4B5: 0x7F18, //CJK UNIFIED IDEOGRAPH - 0xD4B6: 0x8FDC, //CJK UNIFIED IDEOGRAPH - 0xD4B7: 0x82D1, //CJK UNIFIED IDEOGRAPH - 0xD4B8: 0x613F, //CJK UNIFIED IDEOGRAPH - 0xD4B9: 0x6028, //CJK UNIFIED IDEOGRAPH - 0xD4BA: 0x9662, //CJK UNIFIED IDEOGRAPH - 0xD4BB: 0x66F0, //CJK UNIFIED IDEOGRAPH - 0xD4BC: 0x7EA6, //CJK UNIFIED IDEOGRAPH - 0xD4BD: 0x8D8A, //CJK UNIFIED IDEOGRAPH - 0xD4BE: 0x8DC3, //CJK UNIFIED IDEOGRAPH - 0xD4BF: 0x94A5, //CJK UNIFIED IDEOGRAPH - 0xD4C0: 0x5CB3, //CJK UNIFIED IDEOGRAPH - 0xD4C1: 0x7CA4, //CJK UNIFIED IDEOGRAPH - 0xD4C2: 0x6708, //CJK UNIFIED IDEOGRAPH - 0xD4C3: 0x60A6, //CJK UNIFIED IDEOGRAPH - 0xD4C4: 0x9605, //CJK UNIFIED IDEOGRAPH - 0xD4C5: 0x8018, //CJK UNIFIED IDEOGRAPH - 0xD4C6: 0x4E91, //CJK UNIFIED IDEOGRAPH - 0xD4C7: 0x90E7, //CJK UNIFIED IDEOGRAPH - 0xD4C8: 0x5300, //CJK UNIFIED IDEOGRAPH - 0xD4C9: 0x9668, //CJK UNIFIED IDEOGRAPH - 0xD4CA: 0x5141, //CJK UNIFIED IDEOGRAPH - 0xD4CB: 0x8FD0, //CJK UNIFIED IDEOGRAPH - 0xD4CC: 0x8574, //CJK UNIFIED IDEOGRAPH - 0xD4CD: 0x915D, //CJK UNIFIED IDEOGRAPH - 0xD4CE: 0x6655, //CJK UNIFIED IDEOGRAPH - 0xD4CF: 0x97F5, //CJK UNIFIED IDEOGRAPH - 0xD4D0: 0x5B55, //CJK UNIFIED IDEOGRAPH - 0xD4D1: 0x531D, //CJK UNIFIED IDEOGRAPH - 0xD4D2: 0x7838, //CJK UNIFIED IDEOGRAPH - 0xD4D3: 0x6742, //CJK UNIFIED IDEOGRAPH - 0xD4D4: 0x683D, //CJK UNIFIED IDEOGRAPH - 0xD4D5: 0x54C9, //CJK UNIFIED IDEOGRAPH - 0xD4D6: 0x707E, //CJK UNIFIED IDEOGRAPH - 0xD4D7: 0x5BB0, //CJK UNIFIED IDEOGRAPH - 0xD4D8: 0x8F7D, //CJK UNIFIED IDEOGRAPH - 0xD4D9: 0x518D, //CJK UNIFIED IDEOGRAPH - 0xD4DA: 0x5728, //CJK UNIFIED IDEOGRAPH - 0xD4DB: 0x54B1, //CJK UNIFIED IDEOGRAPH - 0xD4DC: 0x6512, //CJK UNIFIED IDEOGRAPH - 0xD4DD: 0x6682, //CJK UNIFIED IDEOGRAPH - 0xD4DE: 0x8D5E, //CJK UNIFIED IDEOGRAPH - 0xD4DF: 0x8D43, //CJK UNIFIED IDEOGRAPH - 0xD4E0: 0x810F, //CJK UNIFIED IDEOGRAPH - 0xD4E1: 0x846C, //CJK UNIFIED IDEOGRAPH - 0xD4E2: 0x906D, //CJK UNIFIED IDEOGRAPH - 0xD4E3: 0x7CDF, //CJK UNIFIED IDEOGRAPH - 0xD4E4: 0x51FF, //CJK UNIFIED IDEOGRAPH - 0xD4E5: 0x85FB, //CJK UNIFIED IDEOGRAPH - 0xD4E6: 0x67A3, //CJK UNIFIED IDEOGRAPH - 0xD4E7: 0x65E9, //CJK UNIFIED IDEOGRAPH - 0xD4E8: 0x6FA1, //CJK UNIFIED IDEOGRAPH - 0xD4E9: 0x86A4, //CJK UNIFIED IDEOGRAPH - 0xD4EA: 0x8E81, //CJK UNIFIED IDEOGRAPH - 0xD4EB: 0x566A, //CJK UNIFIED IDEOGRAPH - 0xD4EC: 0x9020, //CJK UNIFIED IDEOGRAPH - 0xD4ED: 0x7682, //CJK UNIFIED IDEOGRAPH - 0xD4EE: 0x7076, //CJK UNIFIED IDEOGRAPH - 0xD4EF: 0x71E5, //CJK UNIFIED IDEOGRAPH - 0xD4F0: 0x8D23, //CJK UNIFIED IDEOGRAPH - 0xD4F1: 0x62E9, //CJK UNIFIED IDEOGRAPH - 0xD4F2: 0x5219, //CJK UNIFIED IDEOGRAPH - 0xD4F3: 0x6CFD, //CJK UNIFIED IDEOGRAPH - 0xD4F4: 0x8D3C, //CJK UNIFIED IDEOGRAPH - 0xD4F5: 0x600E, //CJK UNIFIED IDEOGRAPH - 0xD4F6: 0x589E, //CJK UNIFIED IDEOGRAPH - 0xD4F7: 0x618E, //CJK UNIFIED IDEOGRAPH - 0xD4F8: 0x66FE, //CJK UNIFIED IDEOGRAPH - 0xD4F9: 0x8D60, //CJK UNIFIED IDEOGRAPH - 0xD4FA: 0x624E, //CJK UNIFIED IDEOGRAPH - 0xD4FB: 0x55B3, //CJK UNIFIED IDEOGRAPH - 0xD4FC: 0x6E23, //CJK UNIFIED IDEOGRAPH - 0xD4FD: 0x672D, //CJK UNIFIED IDEOGRAPH - 0xD4FE: 0x8F67, //CJK UNIFIED IDEOGRAPH - 0xD540: 0x8A81, //CJK UNIFIED IDEOGRAPH - 0xD541: 0x8A82, //CJK UNIFIED IDEOGRAPH - 0xD542: 0x8A83, //CJK UNIFIED IDEOGRAPH - 0xD543: 0x8A84, //CJK UNIFIED IDEOGRAPH - 0xD544: 0x8A85, //CJK UNIFIED IDEOGRAPH - 0xD545: 0x8A86, //CJK UNIFIED IDEOGRAPH - 0xD546: 0x8A87, //CJK UNIFIED IDEOGRAPH - 0xD547: 0x8A88, //CJK UNIFIED IDEOGRAPH - 0xD548: 0x8A8B, //CJK UNIFIED IDEOGRAPH - 0xD549: 0x8A8C, //CJK UNIFIED IDEOGRAPH - 0xD54A: 0x8A8D, //CJK UNIFIED IDEOGRAPH - 0xD54B: 0x8A8E, //CJK UNIFIED IDEOGRAPH - 0xD54C: 0x8A8F, //CJK UNIFIED IDEOGRAPH - 0xD54D: 0x8A90, //CJK UNIFIED IDEOGRAPH - 0xD54E: 0x8A91, //CJK UNIFIED IDEOGRAPH - 0xD54F: 0x8A92, //CJK UNIFIED IDEOGRAPH - 0xD550: 0x8A94, //CJK UNIFIED IDEOGRAPH - 0xD551: 0x8A95, //CJK UNIFIED IDEOGRAPH - 0xD552: 0x8A96, //CJK UNIFIED IDEOGRAPH - 0xD553: 0x8A97, //CJK UNIFIED IDEOGRAPH - 0xD554: 0x8A98, //CJK UNIFIED IDEOGRAPH - 0xD555: 0x8A99, //CJK UNIFIED IDEOGRAPH - 0xD556: 0x8A9A, //CJK UNIFIED IDEOGRAPH - 0xD557: 0x8A9B, //CJK UNIFIED IDEOGRAPH - 0xD558: 0x8A9C, //CJK UNIFIED IDEOGRAPH - 0xD559: 0x8A9D, //CJK UNIFIED IDEOGRAPH - 0xD55A: 0x8A9E, //CJK UNIFIED IDEOGRAPH - 0xD55B: 0x8A9F, //CJK UNIFIED IDEOGRAPH - 0xD55C: 0x8AA0, //CJK UNIFIED IDEOGRAPH - 0xD55D: 0x8AA1, //CJK UNIFIED IDEOGRAPH - 0xD55E: 0x8AA2, //CJK UNIFIED IDEOGRAPH - 0xD55F: 0x8AA3, //CJK UNIFIED IDEOGRAPH - 0xD560: 0x8AA4, //CJK UNIFIED IDEOGRAPH - 0xD561: 0x8AA5, //CJK UNIFIED IDEOGRAPH - 0xD562: 0x8AA6, //CJK UNIFIED IDEOGRAPH - 0xD563: 0x8AA7, //CJK UNIFIED IDEOGRAPH - 0xD564: 0x8AA8, //CJK UNIFIED IDEOGRAPH - 0xD565: 0x8AA9, //CJK UNIFIED IDEOGRAPH - 0xD566: 0x8AAA, //CJK UNIFIED IDEOGRAPH - 0xD567: 0x8AAB, //CJK UNIFIED IDEOGRAPH - 0xD568: 0x8AAC, //CJK UNIFIED IDEOGRAPH - 0xD569: 0x8AAD, //CJK UNIFIED IDEOGRAPH - 0xD56A: 0x8AAE, //CJK UNIFIED IDEOGRAPH - 0xD56B: 0x8AAF, //CJK UNIFIED IDEOGRAPH - 0xD56C: 0x8AB0, //CJK UNIFIED IDEOGRAPH - 0xD56D: 0x8AB1, //CJK UNIFIED IDEOGRAPH - 0xD56E: 0x8AB2, //CJK UNIFIED IDEOGRAPH - 0xD56F: 0x8AB3, //CJK UNIFIED IDEOGRAPH - 0xD570: 0x8AB4, //CJK UNIFIED IDEOGRAPH - 0xD571: 0x8AB5, //CJK UNIFIED IDEOGRAPH - 0xD572: 0x8AB6, //CJK UNIFIED IDEOGRAPH - 0xD573: 0x8AB7, //CJK UNIFIED IDEOGRAPH - 0xD574: 0x8AB8, //CJK UNIFIED IDEOGRAPH - 0xD575: 0x8AB9, //CJK UNIFIED IDEOGRAPH - 0xD576: 0x8ABA, //CJK UNIFIED IDEOGRAPH - 0xD577: 0x8ABB, //CJK UNIFIED IDEOGRAPH - 0xD578: 0x8ABC, //CJK UNIFIED IDEOGRAPH - 0xD579: 0x8ABD, //CJK UNIFIED IDEOGRAPH - 0xD57A: 0x8ABE, //CJK UNIFIED IDEOGRAPH - 0xD57B: 0x8ABF, //CJK UNIFIED IDEOGRAPH - 0xD57C: 0x8AC0, //CJK UNIFIED IDEOGRAPH - 0xD57D: 0x8AC1, //CJK UNIFIED IDEOGRAPH - 0xD57E: 0x8AC2, //CJK UNIFIED IDEOGRAPH - 0xD580: 0x8AC3, //CJK UNIFIED IDEOGRAPH - 0xD581: 0x8AC4, //CJK UNIFIED IDEOGRAPH - 0xD582: 0x8AC5, //CJK UNIFIED IDEOGRAPH - 0xD583: 0x8AC6, //CJK UNIFIED IDEOGRAPH - 0xD584: 0x8AC7, //CJK UNIFIED IDEOGRAPH - 0xD585: 0x8AC8, //CJK UNIFIED IDEOGRAPH - 0xD586: 0x8AC9, //CJK UNIFIED IDEOGRAPH - 0xD587: 0x8ACA, //CJK UNIFIED IDEOGRAPH - 0xD588: 0x8ACB, //CJK UNIFIED IDEOGRAPH - 0xD589: 0x8ACC, //CJK UNIFIED IDEOGRAPH - 0xD58A: 0x8ACD, //CJK UNIFIED IDEOGRAPH - 0xD58B: 0x8ACE, //CJK UNIFIED IDEOGRAPH - 0xD58C: 0x8ACF, //CJK UNIFIED IDEOGRAPH - 0xD58D: 0x8AD0, //CJK UNIFIED IDEOGRAPH - 0xD58E: 0x8AD1, //CJK UNIFIED IDEOGRAPH - 0xD58F: 0x8AD2, //CJK UNIFIED IDEOGRAPH - 0xD590: 0x8AD3, //CJK UNIFIED IDEOGRAPH - 0xD591: 0x8AD4, //CJK UNIFIED IDEOGRAPH - 0xD592: 0x8AD5, //CJK UNIFIED IDEOGRAPH - 0xD593: 0x8AD6, //CJK UNIFIED IDEOGRAPH - 0xD594: 0x8AD7, //CJK UNIFIED IDEOGRAPH - 0xD595: 0x8AD8, //CJK UNIFIED IDEOGRAPH - 0xD596: 0x8AD9, //CJK UNIFIED IDEOGRAPH - 0xD597: 0x8ADA, //CJK UNIFIED IDEOGRAPH - 0xD598: 0x8ADB, //CJK UNIFIED IDEOGRAPH - 0xD599: 0x8ADC, //CJK UNIFIED IDEOGRAPH - 0xD59A: 0x8ADD, //CJK UNIFIED IDEOGRAPH - 0xD59B: 0x8ADE, //CJK UNIFIED IDEOGRAPH - 0xD59C: 0x8ADF, //CJK UNIFIED IDEOGRAPH - 0xD59D: 0x8AE0, //CJK UNIFIED IDEOGRAPH - 0xD59E: 0x8AE1, //CJK UNIFIED IDEOGRAPH - 0xD59F: 0x8AE2, //CJK UNIFIED IDEOGRAPH - 0xD5A0: 0x8AE3, //CJK UNIFIED IDEOGRAPH - 0xD5A1: 0x94E1, //CJK UNIFIED IDEOGRAPH - 0xD5A2: 0x95F8, //CJK UNIFIED IDEOGRAPH - 0xD5A3: 0x7728, //CJK UNIFIED IDEOGRAPH - 0xD5A4: 0x6805, //CJK UNIFIED IDEOGRAPH - 0xD5A5: 0x69A8, //CJK UNIFIED IDEOGRAPH - 0xD5A6: 0x548B, //CJK UNIFIED IDEOGRAPH - 0xD5A7: 0x4E4D, //CJK UNIFIED IDEOGRAPH - 0xD5A8: 0x70B8, //CJK UNIFIED IDEOGRAPH - 0xD5A9: 0x8BC8, //CJK UNIFIED IDEOGRAPH - 0xD5AA: 0x6458, //CJK UNIFIED IDEOGRAPH - 0xD5AB: 0x658B, //CJK UNIFIED IDEOGRAPH - 0xD5AC: 0x5B85, //CJK UNIFIED IDEOGRAPH - 0xD5AD: 0x7A84, //CJK UNIFIED IDEOGRAPH - 0xD5AE: 0x503A, //CJK UNIFIED IDEOGRAPH - 0xD5AF: 0x5BE8, //CJK UNIFIED IDEOGRAPH - 0xD5B0: 0x77BB, //CJK UNIFIED IDEOGRAPH - 0xD5B1: 0x6BE1, //CJK UNIFIED IDEOGRAPH - 0xD5B2: 0x8A79, //CJK UNIFIED IDEOGRAPH - 0xD5B3: 0x7C98, //CJK UNIFIED IDEOGRAPH - 0xD5B4: 0x6CBE, //CJK UNIFIED IDEOGRAPH - 0xD5B5: 0x76CF, //CJK UNIFIED IDEOGRAPH - 0xD5B6: 0x65A9, //CJK UNIFIED IDEOGRAPH - 0xD5B7: 0x8F97, //CJK UNIFIED IDEOGRAPH - 0xD5B8: 0x5D2D, //CJK UNIFIED IDEOGRAPH - 0xD5B9: 0x5C55, //CJK UNIFIED IDEOGRAPH - 0xD5BA: 0x8638, //CJK UNIFIED IDEOGRAPH - 0xD5BB: 0x6808, //CJK UNIFIED IDEOGRAPH - 0xD5BC: 0x5360, //CJK UNIFIED IDEOGRAPH - 0xD5BD: 0x6218, //CJK UNIFIED IDEOGRAPH - 0xD5BE: 0x7AD9, //CJK UNIFIED IDEOGRAPH - 0xD5BF: 0x6E5B, //CJK UNIFIED IDEOGRAPH - 0xD5C0: 0x7EFD, //CJK UNIFIED IDEOGRAPH - 0xD5C1: 0x6A1F, //CJK UNIFIED IDEOGRAPH - 0xD5C2: 0x7AE0, //CJK UNIFIED IDEOGRAPH - 0xD5C3: 0x5F70, //CJK UNIFIED IDEOGRAPH - 0xD5C4: 0x6F33, //CJK UNIFIED IDEOGRAPH - 0xD5C5: 0x5F20, //CJK UNIFIED IDEOGRAPH - 0xD5C6: 0x638C, //CJK UNIFIED IDEOGRAPH - 0xD5C7: 0x6DA8, //CJK UNIFIED IDEOGRAPH - 0xD5C8: 0x6756, //CJK UNIFIED IDEOGRAPH - 0xD5C9: 0x4E08, //CJK UNIFIED IDEOGRAPH - 0xD5CA: 0x5E10, //CJK UNIFIED IDEOGRAPH - 0xD5CB: 0x8D26, //CJK UNIFIED IDEOGRAPH - 0xD5CC: 0x4ED7, //CJK UNIFIED IDEOGRAPH - 0xD5CD: 0x80C0, //CJK UNIFIED IDEOGRAPH - 0xD5CE: 0x7634, //CJK UNIFIED IDEOGRAPH - 0xD5CF: 0x969C, //CJK UNIFIED IDEOGRAPH - 0xD5D0: 0x62DB, //CJK UNIFIED IDEOGRAPH - 0xD5D1: 0x662D, //CJK UNIFIED IDEOGRAPH - 0xD5D2: 0x627E, //CJK UNIFIED IDEOGRAPH - 0xD5D3: 0x6CBC, //CJK UNIFIED IDEOGRAPH - 0xD5D4: 0x8D75, //CJK UNIFIED IDEOGRAPH - 0xD5D5: 0x7167, //CJK UNIFIED IDEOGRAPH - 0xD5D6: 0x7F69, //CJK UNIFIED IDEOGRAPH - 0xD5D7: 0x5146, //CJK UNIFIED IDEOGRAPH - 0xD5D8: 0x8087, //CJK UNIFIED IDEOGRAPH - 0xD5D9: 0x53EC, //CJK UNIFIED IDEOGRAPH - 0xD5DA: 0x906E, //CJK UNIFIED IDEOGRAPH - 0xD5DB: 0x6298, //CJK UNIFIED IDEOGRAPH - 0xD5DC: 0x54F2, //CJK UNIFIED IDEOGRAPH - 0xD5DD: 0x86F0, //CJK UNIFIED IDEOGRAPH - 0xD5DE: 0x8F99, //CJK UNIFIED IDEOGRAPH - 0xD5DF: 0x8005, //CJK UNIFIED IDEOGRAPH - 0xD5E0: 0x9517, //CJK UNIFIED IDEOGRAPH - 0xD5E1: 0x8517, //CJK UNIFIED IDEOGRAPH - 0xD5E2: 0x8FD9, //CJK UNIFIED IDEOGRAPH - 0xD5E3: 0x6D59, //CJK UNIFIED IDEOGRAPH - 0xD5E4: 0x73CD, //CJK UNIFIED IDEOGRAPH - 0xD5E5: 0x659F, //CJK UNIFIED IDEOGRAPH - 0xD5E6: 0x771F, //CJK UNIFIED IDEOGRAPH - 0xD5E7: 0x7504, //CJK UNIFIED IDEOGRAPH - 0xD5E8: 0x7827, //CJK UNIFIED IDEOGRAPH - 0xD5E9: 0x81FB, //CJK UNIFIED IDEOGRAPH - 0xD5EA: 0x8D1E, //CJK UNIFIED IDEOGRAPH - 0xD5EB: 0x9488, //CJK UNIFIED IDEOGRAPH - 0xD5EC: 0x4FA6, //CJK UNIFIED IDEOGRAPH - 0xD5ED: 0x6795, //CJK UNIFIED IDEOGRAPH - 0xD5EE: 0x75B9, //CJK UNIFIED IDEOGRAPH - 0xD5EF: 0x8BCA, //CJK UNIFIED IDEOGRAPH - 0xD5F0: 0x9707, //CJK UNIFIED IDEOGRAPH - 0xD5F1: 0x632F, //CJK UNIFIED IDEOGRAPH - 0xD5F2: 0x9547, //CJK UNIFIED IDEOGRAPH - 0xD5F3: 0x9635, //CJK UNIFIED IDEOGRAPH - 0xD5F4: 0x84B8, //CJK UNIFIED IDEOGRAPH - 0xD5F5: 0x6323, //CJK UNIFIED IDEOGRAPH - 0xD5F6: 0x7741, //CJK UNIFIED IDEOGRAPH - 0xD5F7: 0x5F81, //CJK UNIFIED IDEOGRAPH - 0xD5F8: 0x72F0, //CJK UNIFIED IDEOGRAPH - 0xD5F9: 0x4E89, //CJK UNIFIED IDEOGRAPH - 0xD5FA: 0x6014, //CJK UNIFIED IDEOGRAPH - 0xD5FB: 0x6574, //CJK UNIFIED IDEOGRAPH - 0xD5FC: 0x62EF, //CJK UNIFIED IDEOGRAPH - 0xD5FD: 0x6B63, //CJK UNIFIED IDEOGRAPH - 0xD5FE: 0x653F, //CJK UNIFIED IDEOGRAPH - 0xD640: 0x8AE4, //CJK UNIFIED IDEOGRAPH - 0xD641: 0x8AE5, //CJK UNIFIED IDEOGRAPH - 0xD642: 0x8AE6, //CJK UNIFIED IDEOGRAPH - 0xD643: 0x8AE7, //CJK UNIFIED IDEOGRAPH - 0xD644: 0x8AE8, //CJK UNIFIED IDEOGRAPH - 0xD645: 0x8AE9, //CJK UNIFIED IDEOGRAPH - 0xD646: 0x8AEA, //CJK UNIFIED IDEOGRAPH - 0xD647: 0x8AEB, //CJK UNIFIED IDEOGRAPH - 0xD648: 0x8AEC, //CJK UNIFIED IDEOGRAPH - 0xD649: 0x8AED, //CJK UNIFIED IDEOGRAPH - 0xD64A: 0x8AEE, //CJK UNIFIED IDEOGRAPH - 0xD64B: 0x8AEF, //CJK UNIFIED IDEOGRAPH - 0xD64C: 0x8AF0, //CJK UNIFIED IDEOGRAPH - 0xD64D: 0x8AF1, //CJK UNIFIED IDEOGRAPH - 0xD64E: 0x8AF2, //CJK UNIFIED IDEOGRAPH - 0xD64F: 0x8AF3, //CJK UNIFIED IDEOGRAPH - 0xD650: 0x8AF4, //CJK UNIFIED IDEOGRAPH - 0xD651: 0x8AF5, //CJK UNIFIED IDEOGRAPH - 0xD652: 0x8AF6, //CJK UNIFIED IDEOGRAPH - 0xD653: 0x8AF7, //CJK UNIFIED IDEOGRAPH - 0xD654: 0x8AF8, //CJK UNIFIED IDEOGRAPH - 0xD655: 0x8AF9, //CJK UNIFIED IDEOGRAPH - 0xD656: 0x8AFA, //CJK UNIFIED IDEOGRAPH - 0xD657: 0x8AFB, //CJK UNIFIED IDEOGRAPH - 0xD658: 0x8AFC, //CJK UNIFIED IDEOGRAPH - 0xD659: 0x8AFD, //CJK UNIFIED IDEOGRAPH - 0xD65A: 0x8AFE, //CJK UNIFIED IDEOGRAPH - 0xD65B: 0x8AFF, //CJK UNIFIED IDEOGRAPH - 0xD65C: 0x8B00, //CJK UNIFIED IDEOGRAPH - 0xD65D: 0x8B01, //CJK UNIFIED IDEOGRAPH - 0xD65E: 0x8B02, //CJK UNIFIED IDEOGRAPH - 0xD65F: 0x8B03, //CJK UNIFIED IDEOGRAPH - 0xD660: 0x8B04, //CJK UNIFIED IDEOGRAPH - 0xD661: 0x8B05, //CJK UNIFIED IDEOGRAPH - 0xD662: 0x8B06, //CJK UNIFIED IDEOGRAPH - 0xD663: 0x8B08, //CJK UNIFIED IDEOGRAPH - 0xD664: 0x8B09, //CJK UNIFIED IDEOGRAPH - 0xD665: 0x8B0A, //CJK UNIFIED IDEOGRAPH - 0xD666: 0x8B0B, //CJK UNIFIED IDEOGRAPH - 0xD667: 0x8B0C, //CJK UNIFIED IDEOGRAPH - 0xD668: 0x8B0D, //CJK UNIFIED IDEOGRAPH - 0xD669: 0x8B0E, //CJK UNIFIED IDEOGRAPH - 0xD66A: 0x8B0F, //CJK UNIFIED IDEOGRAPH - 0xD66B: 0x8B10, //CJK UNIFIED IDEOGRAPH - 0xD66C: 0x8B11, //CJK UNIFIED IDEOGRAPH - 0xD66D: 0x8B12, //CJK UNIFIED IDEOGRAPH - 0xD66E: 0x8B13, //CJK UNIFIED IDEOGRAPH - 0xD66F: 0x8B14, //CJK UNIFIED IDEOGRAPH - 0xD670: 0x8B15, //CJK UNIFIED IDEOGRAPH - 0xD671: 0x8B16, //CJK UNIFIED IDEOGRAPH - 0xD672: 0x8B17, //CJK UNIFIED IDEOGRAPH - 0xD673: 0x8B18, //CJK UNIFIED IDEOGRAPH - 0xD674: 0x8B19, //CJK UNIFIED IDEOGRAPH - 0xD675: 0x8B1A, //CJK UNIFIED IDEOGRAPH - 0xD676: 0x8B1B, //CJK UNIFIED IDEOGRAPH - 0xD677: 0x8B1C, //CJK UNIFIED IDEOGRAPH - 0xD678: 0x8B1D, //CJK UNIFIED IDEOGRAPH - 0xD679: 0x8B1E, //CJK UNIFIED IDEOGRAPH - 0xD67A: 0x8B1F, //CJK UNIFIED IDEOGRAPH - 0xD67B: 0x8B20, //CJK UNIFIED IDEOGRAPH - 0xD67C: 0x8B21, //CJK UNIFIED IDEOGRAPH - 0xD67D: 0x8B22, //CJK UNIFIED IDEOGRAPH - 0xD67E: 0x8B23, //CJK UNIFIED IDEOGRAPH - 0xD680: 0x8B24, //CJK UNIFIED IDEOGRAPH - 0xD681: 0x8B25, //CJK UNIFIED IDEOGRAPH - 0xD682: 0x8B27, //CJK UNIFIED IDEOGRAPH - 0xD683: 0x8B28, //CJK UNIFIED IDEOGRAPH - 0xD684: 0x8B29, //CJK UNIFIED IDEOGRAPH - 0xD685: 0x8B2A, //CJK UNIFIED IDEOGRAPH - 0xD686: 0x8B2B, //CJK UNIFIED IDEOGRAPH - 0xD687: 0x8B2C, //CJK UNIFIED IDEOGRAPH - 0xD688: 0x8B2D, //CJK UNIFIED IDEOGRAPH - 0xD689: 0x8B2E, //CJK UNIFIED IDEOGRAPH - 0xD68A: 0x8B2F, //CJK UNIFIED IDEOGRAPH - 0xD68B: 0x8B30, //CJK UNIFIED IDEOGRAPH - 0xD68C: 0x8B31, //CJK UNIFIED IDEOGRAPH - 0xD68D: 0x8B32, //CJK UNIFIED IDEOGRAPH - 0xD68E: 0x8B33, //CJK UNIFIED IDEOGRAPH - 0xD68F: 0x8B34, //CJK UNIFIED IDEOGRAPH - 0xD690: 0x8B35, //CJK UNIFIED IDEOGRAPH - 0xD691: 0x8B36, //CJK UNIFIED IDEOGRAPH - 0xD692: 0x8B37, //CJK UNIFIED IDEOGRAPH - 0xD693: 0x8B38, //CJK UNIFIED IDEOGRAPH - 0xD694: 0x8B39, //CJK UNIFIED IDEOGRAPH - 0xD695: 0x8B3A, //CJK UNIFIED IDEOGRAPH - 0xD696: 0x8B3B, //CJK UNIFIED IDEOGRAPH - 0xD697: 0x8B3C, //CJK UNIFIED IDEOGRAPH - 0xD698: 0x8B3D, //CJK UNIFIED IDEOGRAPH - 0xD699: 0x8B3E, //CJK UNIFIED IDEOGRAPH - 0xD69A: 0x8B3F, //CJK UNIFIED IDEOGRAPH - 0xD69B: 0x8B40, //CJK UNIFIED IDEOGRAPH - 0xD69C: 0x8B41, //CJK UNIFIED IDEOGRAPH - 0xD69D: 0x8B42, //CJK UNIFIED IDEOGRAPH - 0xD69E: 0x8B43, //CJK UNIFIED IDEOGRAPH - 0xD69F: 0x8B44, //CJK UNIFIED IDEOGRAPH - 0xD6A0: 0x8B45, //CJK UNIFIED IDEOGRAPH - 0xD6A1: 0x5E27, //CJK UNIFIED IDEOGRAPH - 0xD6A2: 0x75C7, //CJK UNIFIED IDEOGRAPH - 0xD6A3: 0x90D1, //CJK UNIFIED IDEOGRAPH - 0xD6A4: 0x8BC1, //CJK UNIFIED IDEOGRAPH - 0xD6A5: 0x829D, //CJK UNIFIED IDEOGRAPH - 0xD6A6: 0x679D, //CJK UNIFIED IDEOGRAPH - 0xD6A7: 0x652F, //CJK UNIFIED IDEOGRAPH - 0xD6A8: 0x5431, //CJK UNIFIED IDEOGRAPH - 0xD6A9: 0x8718, //CJK UNIFIED IDEOGRAPH - 0xD6AA: 0x77E5, //CJK UNIFIED IDEOGRAPH - 0xD6AB: 0x80A2, //CJK UNIFIED IDEOGRAPH - 0xD6AC: 0x8102, //CJK UNIFIED IDEOGRAPH - 0xD6AD: 0x6C41, //CJK UNIFIED IDEOGRAPH - 0xD6AE: 0x4E4B, //CJK UNIFIED IDEOGRAPH - 0xD6AF: 0x7EC7, //CJK UNIFIED IDEOGRAPH - 0xD6B0: 0x804C, //CJK UNIFIED IDEOGRAPH - 0xD6B1: 0x76F4, //CJK UNIFIED IDEOGRAPH - 0xD6B2: 0x690D, //CJK UNIFIED IDEOGRAPH - 0xD6B3: 0x6B96, //CJK UNIFIED IDEOGRAPH - 0xD6B4: 0x6267, //CJK UNIFIED IDEOGRAPH - 0xD6B5: 0x503C, //CJK UNIFIED IDEOGRAPH - 0xD6B6: 0x4F84, //CJK UNIFIED IDEOGRAPH - 0xD6B7: 0x5740, //CJK UNIFIED IDEOGRAPH - 0xD6B8: 0x6307, //CJK UNIFIED IDEOGRAPH - 0xD6B9: 0x6B62, //CJK UNIFIED IDEOGRAPH - 0xD6BA: 0x8DBE, //CJK UNIFIED IDEOGRAPH - 0xD6BB: 0x53EA, //CJK UNIFIED IDEOGRAPH - 0xD6BC: 0x65E8, //CJK UNIFIED IDEOGRAPH - 0xD6BD: 0x7EB8, //CJK UNIFIED IDEOGRAPH - 0xD6BE: 0x5FD7, //CJK UNIFIED IDEOGRAPH - 0xD6BF: 0x631A, //CJK UNIFIED IDEOGRAPH - 0xD6C0: 0x63B7, //CJK UNIFIED IDEOGRAPH - 0xD6C1: 0x81F3, //CJK UNIFIED IDEOGRAPH - 0xD6C2: 0x81F4, //CJK UNIFIED IDEOGRAPH - 0xD6C3: 0x7F6E, //CJK UNIFIED IDEOGRAPH - 0xD6C4: 0x5E1C, //CJK UNIFIED IDEOGRAPH - 0xD6C5: 0x5CD9, //CJK UNIFIED IDEOGRAPH - 0xD6C6: 0x5236, //CJK UNIFIED IDEOGRAPH - 0xD6C7: 0x667A, //CJK UNIFIED IDEOGRAPH - 0xD6C8: 0x79E9, //CJK UNIFIED IDEOGRAPH - 0xD6C9: 0x7A1A, //CJK UNIFIED IDEOGRAPH - 0xD6CA: 0x8D28, //CJK UNIFIED IDEOGRAPH - 0xD6CB: 0x7099, //CJK UNIFIED IDEOGRAPH - 0xD6CC: 0x75D4, //CJK UNIFIED IDEOGRAPH - 0xD6CD: 0x6EDE, //CJK UNIFIED IDEOGRAPH - 0xD6CE: 0x6CBB, //CJK UNIFIED IDEOGRAPH - 0xD6CF: 0x7A92, //CJK UNIFIED IDEOGRAPH - 0xD6D0: 0x4E2D, //CJK UNIFIED IDEOGRAPH - 0xD6D1: 0x76C5, //CJK UNIFIED IDEOGRAPH - 0xD6D2: 0x5FE0, //CJK UNIFIED IDEOGRAPH - 0xD6D3: 0x949F, //CJK UNIFIED IDEOGRAPH - 0xD6D4: 0x8877, //CJK UNIFIED IDEOGRAPH - 0xD6D5: 0x7EC8, //CJK UNIFIED IDEOGRAPH - 0xD6D6: 0x79CD, //CJK UNIFIED IDEOGRAPH - 0xD6D7: 0x80BF, //CJK UNIFIED IDEOGRAPH - 0xD6D8: 0x91CD, //CJK UNIFIED IDEOGRAPH - 0xD6D9: 0x4EF2, //CJK UNIFIED IDEOGRAPH - 0xD6DA: 0x4F17, //CJK UNIFIED IDEOGRAPH - 0xD6DB: 0x821F, //CJK UNIFIED IDEOGRAPH - 0xD6DC: 0x5468, //CJK UNIFIED IDEOGRAPH - 0xD6DD: 0x5DDE, //CJK UNIFIED IDEOGRAPH - 0xD6DE: 0x6D32, //CJK UNIFIED IDEOGRAPH - 0xD6DF: 0x8BCC, //CJK UNIFIED IDEOGRAPH - 0xD6E0: 0x7CA5, //CJK UNIFIED IDEOGRAPH - 0xD6E1: 0x8F74, //CJK UNIFIED IDEOGRAPH - 0xD6E2: 0x8098, //CJK UNIFIED IDEOGRAPH - 0xD6E3: 0x5E1A, //CJK UNIFIED IDEOGRAPH - 0xD6E4: 0x5492, //CJK UNIFIED IDEOGRAPH - 0xD6E5: 0x76B1, //CJK UNIFIED IDEOGRAPH - 0xD6E6: 0x5B99, //CJK UNIFIED IDEOGRAPH - 0xD6E7: 0x663C, //CJK UNIFIED IDEOGRAPH - 0xD6E8: 0x9AA4, //CJK UNIFIED IDEOGRAPH - 0xD6E9: 0x73E0, //CJK UNIFIED IDEOGRAPH - 0xD6EA: 0x682A, //CJK UNIFIED IDEOGRAPH - 0xD6EB: 0x86DB, //CJK UNIFIED IDEOGRAPH - 0xD6EC: 0x6731, //CJK UNIFIED IDEOGRAPH - 0xD6ED: 0x732A, //CJK UNIFIED IDEOGRAPH - 0xD6EE: 0x8BF8, //CJK UNIFIED IDEOGRAPH - 0xD6EF: 0x8BDB, //CJK UNIFIED IDEOGRAPH - 0xD6F0: 0x9010, //CJK UNIFIED IDEOGRAPH - 0xD6F1: 0x7AF9, //CJK UNIFIED IDEOGRAPH - 0xD6F2: 0x70DB, //CJK UNIFIED IDEOGRAPH - 0xD6F3: 0x716E, //CJK UNIFIED IDEOGRAPH - 0xD6F4: 0x62C4, //CJK UNIFIED IDEOGRAPH - 0xD6F5: 0x77A9, //CJK UNIFIED IDEOGRAPH - 0xD6F6: 0x5631, //CJK UNIFIED IDEOGRAPH - 0xD6F7: 0x4E3B, //CJK UNIFIED IDEOGRAPH - 0xD6F8: 0x8457, //CJK UNIFIED IDEOGRAPH - 0xD6F9: 0x67F1, //CJK UNIFIED IDEOGRAPH - 0xD6FA: 0x52A9, //CJK UNIFIED IDEOGRAPH - 0xD6FB: 0x86C0, //CJK UNIFIED IDEOGRAPH - 0xD6FC: 0x8D2E, //CJK UNIFIED IDEOGRAPH - 0xD6FD: 0x94F8, //CJK UNIFIED IDEOGRAPH - 0xD6FE: 0x7B51, //CJK UNIFIED IDEOGRAPH - 0xD740: 0x8B46, //CJK UNIFIED IDEOGRAPH - 0xD741: 0x8B47, //CJK UNIFIED IDEOGRAPH - 0xD742: 0x8B48, //CJK UNIFIED IDEOGRAPH - 0xD743: 0x8B49, //CJK UNIFIED IDEOGRAPH - 0xD744: 0x8B4A, //CJK UNIFIED IDEOGRAPH - 0xD745: 0x8B4B, //CJK UNIFIED IDEOGRAPH - 0xD746: 0x8B4C, //CJK UNIFIED IDEOGRAPH - 0xD747: 0x8B4D, //CJK UNIFIED IDEOGRAPH - 0xD748: 0x8B4E, //CJK UNIFIED IDEOGRAPH - 0xD749: 0x8B4F, //CJK UNIFIED IDEOGRAPH - 0xD74A: 0x8B50, //CJK UNIFIED IDEOGRAPH - 0xD74B: 0x8B51, //CJK UNIFIED IDEOGRAPH - 0xD74C: 0x8B52, //CJK UNIFIED IDEOGRAPH - 0xD74D: 0x8B53, //CJK UNIFIED IDEOGRAPH - 0xD74E: 0x8B54, //CJK UNIFIED IDEOGRAPH - 0xD74F: 0x8B55, //CJK UNIFIED IDEOGRAPH - 0xD750: 0x8B56, //CJK UNIFIED IDEOGRAPH - 0xD751: 0x8B57, //CJK UNIFIED IDEOGRAPH - 0xD752: 0x8B58, //CJK UNIFIED IDEOGRAPH - 0xD753: 0x8B59, //CJK UNIFIED IDEOGRAPH - 0xD754: 0x8B5A, //CJK UNIFIED IDEOGRAPH - 0xD755: 0x8B5B, //CJK UNIFIED IDEOGRAPH - 0xD756: 0x8B5C, //CJK UNIFIED IDEOGRAPH - 0xD757: 0x8B5D, //CJK UNIFIED IDEOGRAPH - 0xD758: 0x8B5E, //CJK UNIFIED IDEOGRAPH - 0xD759: 0x8B5F, //CJK UNIFIED IDEOGRAPH - 0xD75A: 0x8B60, //CJK UNIFIED IDEOGRAPH - 0xD75B: 0x8B61, //CJK UNIFIED IDEOGRAPH - 0xD75C: 0x8B62, //CJK UNIFIED IDEOGRAPH - 0xD75D: 0x8B63, //CJK UNIFIED IDEOGRAPH - 0xD75E: 0x8B64, //CJK UNIFIED IDEOGRAPH - 0xD75F: 0x8B65, //CJK UNIFIED IDEOGRAPH - 0xD760: 0x8B67, //CJK UNIFIED IDEOGRAPH - 0xD761: 0x8B68, //CJK UNIFIED IDEOGRAPH - 0xD762: 0x8B69, //CJK UNIFIED IDEOGRAPH - 0xD763: 0x8B6A, //CJK UNIFIED IDEOGRAPH - 0xD764: 0x8B6B, //CJK UNIFIED IDEOGRAPH - 0xD765: 0x8B6D, //CJK UNIFIED IDEOGRAPH - 0xD766: 0x8B6E, //CJK UNIFIED IDEOGRAPH - 0xD767: 0x8B6F, //CJK UNIFIED IDEOGRAPH - 0xD768: 0x8B70, //CJK UNIFIED IDEOGRAPH - 0xD769: 0x8B71, //CJK UNIFIED IDEOGRAPH - 0xD76A: 0x8B72, //CJK UNIFIED IDEOGRAPH - 0xD76B: 0x8B73, //CJK UNIFIED IDEOGRAPH - 0xD76C: 0x8B74, //CJK UNIFIED IDEOGRAPH - 0xD76D: 0x8B75, //CJK UNIFIED IDEOGRAPH - 0xD76E: 0x8B76, //CJK UNIFIED IDEOGRAPH - 0xD76F: 0x8B77, //CJK UNIFIED IDEOGRAPH - 0xD770: 0x8B78, //CJK UNIFIED IDEOGRAPH - 0xD771: 0x8B79, //CJK UNIFIED IDEOGRAPH - 0xD772: 0x8B7A, //CJK UNIFIED IDEOGRAPH - 0xD773: 0x8B7B, //CJK UNIFIED IDEOGRAPH - 0xD774: 0x8B7C, //CJK UNIFIED IDEOGRAPH - 0xD775: 0x8B7D, //CJK UNIFIED IDEOGRAPH - 0xD776: 0x8B7E, //CJK UNIFIED IDEOGRAPH - 0xD777: 0x8B7F, //CJK UNIFIED IDEOGRAPH - 0xD778: 0x8B80, //CJK UNIFIED IDEOGRAPH - 0xD779: 0x8B81, //CJK UNIFIED IDEOGRAPH - 0xD77A: 0x8B82, //CJK UNIFIED IDEOGRAPH - 0xD77B: 0x8B83, //CJK UNIFIED IDEOGRAPH - 0xD77C: 0x8B84, //CJK UNIFIED IDEOGRAPH - 0xD77D: 0x8B85, //CJK UNIFIED IDEOGRAPH - 0xD77E: 0x8B86, //CJK UNIFIED IDEOGRAPH - 0xD780: 0x8B87, //CJK UNIFIED IDEOGRAPH - 0xD781: 0x8B88, //CJK UNIFIED IDEOGRAPH - 0xD782: 0x8B89, //CJK UNIFIED IDEOGRAPH - 0xD783: 0x8B8A, //CJK UNIFIED IDEOGRAPH - 0xD784: 0x8B8B, //CJK UNIFIED IDEOGRAPH - 0xD785: 0x8B8C, //CJK UNIFIED IDEOGRAPH - 0xD786: 0x8B8D, //CJK UNIFIED IDEOGRAPH - 0xD787: 0x8B8E, //CJK UNIFIED IDEOGRAPH - 0xD788: 0x8B8F, //CJK UNIFIED IDEOGRAPH - 0xD789: 0x8B90, //CJK UNIFIED IDEOGRAPH - 0xD78A: 0x8B91, //CJK UNIFIED IDEOGRAPH - 0xD78B: 0x8B92, //CJK UNIFIED IDEOGRAPH - 0xD78C: 0x8B93, //CJK UNIFIED IDEOGRAPH - 0xD78D: 0x8B94, //CJK UNIFIED IDEOGRAPH - 0xD78E: 0x8B95, //CJK UNIFIED IDEOGRAPH - 0xD78F: 0x8B96, //CJK UNIFIED IDEOGRAPH - 0xD790: 0x8B97, //CJK UNIFIED IDEOGRAPH - 0xD791: 0x8B98, //CJK UNIFIED IDEOGRAPH - 0xD792: 0x8B99, //CJK UNIFIED IDEOGRAPH - 0xD793: 0x8B9A, //CJK UNIFIED IDEOGRAPH - 0xD794: 0x8B9B, //CJK UNIFIED IDEOGRAPH - 0xD795: 0x8B9C, //CJK UNIFIED IDEOGRAPH - 0xD796: 0x8B9D, //CJK UNIFIED IDEOGRAPH - 0xD797: 0x8B9E, //CJK UNIFIED IDEOGRAPH - 0xD798: 0x8B9F, //CJK UNIFIED IDEOGRAPH - 0xD799: 0x8BAC, //CJK UNIFIED IDEOGRAPH - 0xD79A: 0x8BB1, //CJK UNIFIED IDEOGRAPH - 0xD79B: 0x8BBB, //CJK UNIFIED IDEOGRAPH - 0xD79C: 0x8BC7, //CJK UNIFIED IDEOGRAPH - 0xD79D: 0x8BD0, //CJK UNIFIED IDEOGRAPH - 0xD79E: 0x8BEA, //CJK UNIFIED IDEOGRAPH - 0xD79F: 0x8C09, //CJK UNIFIED IDEOGRAPH - 0xD7A0: 0x8C1E, //CJK UNIFIED IDEOGRAPH - 0xD7A1: 0x4F4F, //CJK UNIFIED IDEOGRAPH - 0xD7A2: 0x6CE8, //CJK UNIFIED IDEOGRAPH - 0xD7A3: 0x795D, //CJK UNIFIED IDEOGRAPH - 0xD7A4: 0x9A7B, //CJK UNIFIED IDEOGRAPH - 0xD7A5: 0x6293, //CJK UNIFIED IDEOGRAPH - 0xD7A6: 0x722A, //CJK UNIFIED IDEOGRAPH - 0xD7A7: 0x62FD, //CJK UNIFIED IDEOGRAPH - 0xD7A8: 0x4E13, //CJK UNIFIED IDEOGRAPH - 0xD7A9: 0x7816, //CJK UNIFIED IDEOGRAPH - 0xD7AA: 0x8F6C, //CJK UNIFIED IDEOGRAPH - 0xD7AB: 0x64B0, //CJK UNIFIED IDEOGRAPH - 0xD7AC: 0x8D5A, //CJK UNIFIED IDEOGRAPH - 0xD7AD: 0x7BC6, //CJK UNIFIED IDEOGRAPH - 0xD7AE: 0x6869, //CJK UNIFIED IDEOGRAPH - 0xD7AF: 0x5E84, //CJK UNIFIED IDEOGRAPH - 0xD7B0: 0x88C5, //CJK UNIFIED IDEOGRAPH - 0xD7B1: 0x5986, //CJK UNIFIED IDEOGRAPH - 0xD7B2: 0x649E, //CJK UNIFIED IDEOGRAPH - 0xD7B3: 0x58EE, //CJK UNIFIED IDEOGRAPH - 0xD7B4: 0x72B6, //CJK UNIFIED IDEOGRAPH - 0xD7B5: 0x690E, //CJK UNIFIED IDEOGRAPH - 0xD7B6: 0x9525, //CJK UNIFIED IDEOGRAPH - 0xD7B7: 0x8FFD, //CJK UNIFIED IDEOGRAPH - 0xD7B8: 0x8D58, //CJK UNIFIED IDEOGRAPH - 0xD7B9: 0x5760, //CJK UNIFIED IDEOGRAPH - 0xD7BA: 0x7F00, //CJK UNIFIED IDEOGRAPH - 0xD7BB: 0x8C06, //CJK UNIFIED IDEOGRAPH - 0xD7BC: 0x51C6, //CJK UNIFIED IDEOGRAPH - 0xD7BD: 0x6349, //CJK UNIFIED IDEOGRAPH - 0xD7BE: 0x62D9, //CJK UNIFIED IDEOGRAPH - 0xD7BF: 0x5353, //CJK UNIFIED IDEOGRAPH - 0xD7C0: 0x684C, //CJK UNIFIED IDEOGRAPH - 0xD7C1: 0x7422, //CJK UNIFIED IDEOGRAPH - 0xD7C2: 0x8301, //CJK UNIFIED IDEOGRAPH - 0xD7C3: 0x914C, //CJK UNIFIED IDEOGRAPH - 0xD7C4: 0x5544, //CJK UNIFIED IDEOGRAPH - 0xD7C5: 0x7740, //CJK UNIFIED IDEOGRAPH - 0xD7C6: 0x707C, //CJK UNIFIED IDEOGRAPH - 0xD7C7: 0x6D4A, //CJK UNIFIED IDEOGRAPH - 0xD7C8: 0x5179, //CJK UNIFIED IDEOGRAPH - 0xD7C9: 0x54A8, //CJK UNIFIED IDEOGRAPH - 0xD7CA: 0x8D44, //CJK UNIFIED IDEOGRAPH - 0xD7CB: 0x59FF, //CJK UNIFIED IDEOGRAPH - 0xD7CC: 0x6ECB, //CJK UNIFIED IDEOGRAPH - 0xD7CD: 0x6DC4, //CJK UNIFIED IDEOGRAPH - 0xD7CE: 0x5B5C, //CJK UNIFIED IDEOGRAPH - 0xD7CF: 0x7D2B, //CJK UNIFIED IDEOGRAPH - 0xD7D0: 0x4ED4, //CJK UNIFIED IDEOGRAPH - 0xD7D1: 0x7C7D, //CJK UNIFIED IDEOGRAPH - 0xD7D2: 0x6ED3, //CJK UNIFIED IDEOGRAPH - 0xD7D3: 0x5B50, //CJK UNIFIED IDEOGRAPH - 0xD7D4: 0x81EA, //CJK UNIFIED IDEOGRAPH - 0xD7D5: 0x6E0D, //CJK UNIFIED IDEOGRAPH - 0xD7D6: 0x5B57, //CJK UNIFIED IDEOGRAPH - 0xD7D7: 0x9B03, //CJK UNIFIED IDEOGRAPH - 0xD7D8: 0x68D5, //CJK UNIFIED IDEOGRAPH - 0xD7D9: 0x8E2A, //CJK UNIFIED IDEOGRAPH - 0xD7DA: 0x5B97, //CJK UNIFIED IDEOGRAPH - 0xD7DB: 0x7EFC, //CJK UNIFIED IDEOGRAPH - 0xD7DC: 0x603B, //CJK UNIFIED IDEOGRAPH - 0xD7DD: 0x7EB5, //CJK UNIFIED IDEOGRAPH - 0xD7DE: 0x90B9, //CJK UNIFIED IDEOGRAPH - 0xD7DF: 0x8D70, //CJK UNIFIED IDEOGRAPH - 0xD7E0: 0x594F, //CJK UNIFIED IDEOGRAPH - 0xD7E1: 0x63CD, //CJK UNIFIED IDEOGRAPH - 0xD7E2: 0x79DF, //CJK UNIFIED IDEOGRAPH - 0xD7E3: 0x8DB3, //CJK UNIFIED IDEOGRAPH - 0xD7E4: 0x5352, //CJK UNIFIED IDEOGRAPH - 0xD7E5: 0x65CF, //CJK UNIFIED IDEOGRAPH - 0xD7E6: 0x7956, //CJK UNIFIED IDEOGRAPH - 0xD7E7: 0x8BC5, //CJK UNIFIED IDEOGRAPH - 0xD7E8: 0x963B, //CJK UNIFIED IDEOGRAPH - 0xD7E9: 0x7EC4, //CJK UNIFIED IDEOGRAPH - 0xD7EA: 0x94BB, //CJK UNIFIED IDEOGRAPH - 0xD7EB: 0x7E82, //CJK UNIFIED IDEOGRAPH - 0xD7EC: 0x5634, //CJK UNIFIED IDEOGRAPH - 0xD7ED: 0x9189, //CJK UNIFIED IDEOGRAPH - 0xD7EE: 0x6700, //CJK UNIFIED IDEOGRAPH - 0xD7EF: 0x7F6A, //CJK UNIFIED IDEOGRAPH - 0xD7F0: 0x5C0A, //CJK UNIFIED IDEOGRAPH - 0xD7F1: 0x9075, //CJK UNIFIED IDEOGRAPH - 0xD7F2: 0x6628, //CJK UNIFIED IDEOGRAPH - 0xD7F3: 0x5DE6, //CJK UNIFIED IDEOGRAPH - 0xD7F4: 0x4F50, //CJK UNIFIED IDEOGRAPH - 0xD7F5: 0x67DE, //CJK UNIFIED IDEOGRAPH - 0xD7F6: 0x505A, //CJK UNIFIED IDEOGRAPH - 0xD7F7: 0x4F5C, //CJK UNIFIED IDEOGRAPH - 0xD7F8: 0x5750, //CJK UNIFIED IDEOGRAPH - 0xD7F9: 0x5EA7, //CJK UNIFIED IDEOGRAPH - 0xD840: 0x8C38, //CJK UNIFIED IDEOGRAPH - 0xD841: 0x8C39, //CJK UNIFIED IDEOGRAPH - 0xD842: 0x8C3A, //CJK UNIFIED IDEOGRAPH - 0xD843: 0x8C3B, //CJK UNIFIED IDEOGRAPH - 0xD844: 0x8C3C, //CJK UNIFIED IDEOGRAPH - 0xD845: 0x8C3D, //CJK UNIFIED IDEOGRAPH - 0xD846: 0x8C3E, //CJK UNIFIED IDEOGRAPH - 0xD847: 0x8C3F, //CJK UNIFIED IDEOGRAPH - 0xD848: 0x8C40, //CJK UNIFIED IDEOGRAPH - 0xD849: 0x8C42, //CJK UNIFIED IDEOGRAPH - 0xD84A: 0x8C43, //CJK UNIFIED IDEOGRAPH - 0xD84B: 0x8C44, //CJK UNIFIED IDEOGRAPH - 0xD84C: 0x8C45, //CJK UNIFIED IDEOGRAPH - 0xD84D: 0x8C48, //CJK UNIFIED IDEOGRAPH - 0xD84E: 0x8C4A, //CJK UNIFIED IDEOGRAPH - 0xD84F: 0x8C4B, //CJK UNIFIED IDEOGRAPH - 0xD850: 0x8C4D, //CJK UNIFIED IDEOGRAPH - 0xD851: 0x8C4E, //CJK UNIFIED IDEOGRAPH - 0xD852: 0x8C4F, //CJK UNIFIED IDEOGRAPH - 0xD853: 0x8C50, //CJK UNIFIED IDEOGRAPH - 0xD854: 0x8C51, //CJK UNIFIED IDEOGRAPH - 0xD855: 0x8C52, //CJK UNIFIED IDEOGRAPH - 0xD856: 0x8C53, //CJK UNIFIED IDEOGRAPH - 0xD857: 0x8C54, //CJK UNIFIED IDEOGRAPH - 0xD858: 0x8C56, //CJK UNIFIED IDEOGRAPH - 0xD859: 0x8C57, //CJK UNIFIED IDEOGRAPH - 0xD85A: 0x8C58, //CJK UNIFIED IDEOGRAPH - 0xD85B: 0x8C59, //CJK UNIFIED IDEOGRAPH - 0xD85C: 0x8C5B, //CJK UNIFIED IDEOGRAPH - 0xD85D: 0x8C5C, //CJK UNIFIED IDEOGRAPH - 0xD85E: 0x8C5D, //CJK UNIFIED IDEOGRAPH - 0xD85F: 0x8C5E, //CJK UNIFIED IDEOGRAPH - 0xD860: 0x8C5F, //CJK UNIFIED IDEOGRAPH - 0xD861: 0x8C60, //CJK UNIFIED IDEOGRAPH - 0xD862: 0x8C63, //CJK UNIFIED IDEOGRAPH - 0xD863: 0x8C64, //CJK UNIFIED IDEOGRAPH - 0xD864: 0x8C65, //CJK UNIFIED IDEOGRAPH - 0xD865: 0x8C66, //CJK UNIFIED IDEOGRAPH - 0xD866: 0x8C67, //CJK UNIFIED IDEOGRAPH - 0xD867: 0x8C68, //CJK UNIFIED IDEOGRAPH - 0xD868: 0x8C69, //CJK UNIFIED IDEOGRAPH - 0xD869: 0x8C6C, //CJK UNIFIED IDEOGRAPH - 0xD86A: 0x8C6D, //CJK UNIFIED IDEOGRAPH - 0xD86B: 0x8C6E, //CJK UNIFIED IDEOGRAPH - 0xD86C: 0x8C6F, //CJK UNIFIED IDEOGRAPH - 0xD86D: 0x8C70, //CJK UNIFIED IDEOGRAPH - 0xD86E: 0x8C71, //CJK UNIFIED IDEOGRAPH - 0xD86F: 0x8C72, //CJK UNIFIED IDEOGRAPH - 0xD870: 0x8C74, //CJK UNIFIED IDEOGRAPH - 0xD871: 0x8C75, //CJK UNIFIED IDEOGRAPH - 0xD872: 0x8C76, //CJK UNIFIED IDEOGRAPH - 0xD873: 0x8C77, //CJK UNIFIED IDEOGRAPH - 0xD874: 0x8C7B, //CJK UNIFIED IDEOGRAPH - 0xD875: 0x8C7C, //CJK UNIFIED IDEOGRAPH - 0xD876: 0x8C7D, //CJK UNIFIED IDEOGRAPH - 0xD877: 0x8C7E, //CJK UNIFIED IDEOGRAPH - 0xD878: 0x8C7F, //CJK UNIFIED IDEOGRAPH - 0xD879: 0x8C80, //CJK UNIFIED IDEOGRAPH - 0xD87A: 0x8C81, //CJK UNIFIED IDEOGRAPH - 0xD87B: 0x8C83, //CJK UNIFIED IDEOGRAPH - 0xD87C: 0x8C84, //CJK UNIFIED IDEOGRAPH - 0xD87D: 0x8C86, //CJK UNIFIED IDEOGRAPH - 0xD87E: 0x8C87, //CJK UNIFIED IDEOGRAPH - 0xD880: 0x8C88, //CJK UNIFIED IDEOGRAPH - 0xD881: 0x8C8B, //CJK UNIFIED IDEOGRAPH - 0xD882: 0x8C8D, //CJK UNIFIED IDEOGRAPH - 0xD883: 0x8C8E, //CJK UNIFIED IDEOGRAPH - 0xD884: 0x8C8F, //CJK UNIFIED IDEOGRAPH - 0xD885: 0x8C90, //CJK UNIFIED IDEOGRAPH - 0xD886: 0x8C91, //CJK UNIFIED IDEOGRAPH - 0xD887: 0x8C92, //CJK UNIFIED IDEOGRAPH - 0xD888: 0x8C93, //CJK UNIFIED IDEOGRAPH - 0xD889: 0x8C95, //CJK UNIFIED IDEOGRAPH - 0xD88A: 0x8C96, //CJK UNIFIED IDEOGRAPH - 0xD88B: 0x8C97, //CJK UNIFIED IDEOGRAPH - 0xD88C: 0x8C99, //CJK UNIFIED IDEOGRAPH - 0xD88D: 0x8C9A, //CJK UNIFIED IDEOGRAPH - 0xD88E: 0x8C9B, //CJK UNIFIED IDEOGRAPH - 0xD88F: 0x8C9C, //CJK UNIFIED IDEOGRAPH - 0xD890: 0x8C9D, //CJK UNIFIED IDEOGRAPH - 0xD891: 0x8C9E, //CJK UNIFIED IDEOGRAPH - 0xD892: 0x8C9F, //CJK UNIFIED IDEOGRAPH - 0xD893: 0x8CA0, //CJK UNIFIED IDEOGRAPH - 0xD894: 0x8CA1, //CJK UNIFIED IDEOGRAPH - 0xD895: 0x8CA2, //CJK UNIFIED IDEOGRAPH - 0xD896: 0x8CA3, //CJK UNIFIED IDEOGRAPH - 0xD897: 0x8CA4, //CJK UNIFIED IDEOGRAPH - 0xD898: 0x8CA5, //CJK UNIFIED IDEOGRAPH - 0xD899: 0x8CA6, //CJK UNIFIED IDEOGRAPH - 0xD89A: 0x8CA7, //CJK UNIFIED IDEOGRAPH - 0xD89B: 0x8CA8, //CJK UNIFIED IDEOGRAPH - 0xD89C: 0x8CA9, //CJK UNIFIED IDEOGRAPH - 0xD89D: 0x8CAA, //CJK UNIFIED IDEOGRAPH - 0xD89E: 0x8CAB, //CJK UNIFIED IDEOGRAPH - 0xD89F: 0x8CAC, //CJK UNIFIED IDEOGRAPH - 0xD8A0: 0x8CAD, //CJK UNIFIED IDEOGRAPH - 0xD8A1: 0x4E8D, //CJK UNIFIED IDEOGRAPH - 0xD8A2: 0x4E0C, //CJK UNIFIED IDEOGRAPH - 0xD8A3: 0x5140, //CJK UNIFIED IDEOGRAPH - 0xD8A4: 0x4E10, //CJK UNIFIED IDEOGRAPH - 0xD8A5: 0x5EFF, //CJK UNIFIED IDEOGRAPH - 0xD8A6: 0x5345, //CJK UNIFIED IDEOGRAPH - 0xD8A7: 0x4E15, //CJK UNIFIED IDEOGRAPH - 0xD8A8: 0x4E98, //CJK UNIFIED IDEOGRAPH - 0xD8A9: 0x4E1E, //CJK UNIFIED IDEOGRAPH - 0xD8AA: 0x9B32, //CJK UNIFIED IDEOGRAPH - 0xD8AB: 0x5B6C, //CJK UNIFIED IDEOGRAPH - 0xD8AC: 0x5669, //CJK UNIFIED IDEOGRAPH - 0xD8AD: 0x4E28, //CJK UNIFIED IDEOGRAPH - 0xD8AE: 0x79BA, //CJK UNIFIED IDEOGRAPH - 0xD8AF: 0x4E3F, //CJK UNIFIED IDEOGRAPH - 0xD8B0: 0x5315, //CJK UNIFIED IDEOGRAPH - 0xD8B1: 0x4E47, //CJK UNIFIED IDEOGRAPH - 0xD8B2: 0x592D, //CJK UNIFIED IDEOGRAPH - 0xD8B3: 0x723B, //CJK UNIFIED IDEOGRAPH - 0xD8B4: 0x536E, //CJK UNIFIED IDEOGRAPH - 0xD8B5: 0x6C10, //CJK UNIFIED IDEOGRAPH - 0xD8B6: 0x56DF, //CJK UNIFIED IDEOGRAPH - 0xD8B7: 0x80E4, //CJK UNIFIED IDEOGRAPH - 0xD8B8: 0x9997, //CJK UNIFIED IDEOGRAPH - 0xD8B9: 0x6BD3, //CJK UNIFIED IDEOGRAPH - 0xD8BA: 0x777E, //CJK UNIFIED IDEOGRAPH - 0xD8BB: 0x9F17, //CJK UNIFIED IDEOGRAPH - 0xD8BC: 0x4E36, //CJK UNIFIED IDEOGRAPH - 0xD8BD: 0x4E9F, //CJK UNIFIED IDEOGRAPH - 0xD8BE: 0x9F10, //CJK UNIFIED IDEOGRAPH - 0xD8BF: 0x4E5C, //CJK UNIFIED IDEOGRAPH - 0xD8C0: 0x4E69, //CJK UNIFIED IDEOGRAPH - 0xD8C1: 0x4E93, //CJK UNIFIED IDEOGRAPH - 0xD8C2: 0x8288, //CJK UNIFIED IDEOGRAPH - 0xD8C3: 0x5B5B, //CJK UNIFIED IDEOGRAPH - 0xD8C4: 0x556C, //CJK UNIFIED IDEOGRAPH - 0xD8C5: 0x560F, //CJK UNIFIED IDEOGRAPH - 0xD8C6: 0x4EC4, //CJK UNIFIED IDEOGRAPH - 0xD8C7: 0x538D, //CJK UNIFIED IDEOGRAPH - 0xD8C8: 0x539D, //CJK UNIFIED IDEOGRAPH - 0xD8C9: 0x53A3, //CJK UNIFIED IDEOGRAPH - 0xD8CA: 0x53A5, //CJK UNIFIED IDEOGRAPH - 0xD8CB: 0x53AE, //CJK UNIFIED IDEOGRAPH - 0xD8CC: 0x9765, //CJK UNIFIED IDEOGRAPH - 0xD8CD: 0x8D5D, //CJK UNIFIED IDEOGRAPH - 0xD8CE: 0x531A, //CJK UNIFIED IDEOGRAPH - 0xD8CF: 0x53F5, //CJK UNIFIED IDEOGRAPH - 0xD8D0: 0x5326, //CJK UNIFIED IDEOGRAPH - 0xD8D1: 0x532E, //CJK UNIFIED IDEOGRAPH - 0xD8D2: 0x533E, //CJK UNIFIED IDEOGRAPH - 0xD8D3: 0x8D5C, //CJK UNIFIED IDEOGRAPH - 0xD8D4: 0x5366, //CJK UNIFIED IDEOGRAPH - 0xD8D5: 0x5363, //CJK UNIFIED IDEOGRAPH - 0xD8D6: 0x5202, //CJK UNIFIED IDEOGRAPH - 0xD8D7: 0x5208, //CJK UNIFIED IDEOGRAPH - 0xD8D8: 0x520E, //CJK UNIFIED IDEOGRAPH - 0xD8D9: 0x522D, //CJK UNIFIED IDEOGRAPH - 0xD8DA: 0x5233, //CJK UNIFIED IDEOGRAPH - 0xD8DB: 0x523F, //CJK UNIFIED IDEOGRAPH - 0xD8DC: 0x5240, //CJK UNIFIED IDEOGRAPH - 0xD8DD: 0x524C, //CJK UNIFIED IDEOGRAPH - 0xD8DE: 0x525E, //CJK UNIFIED IDEOGRAPH - 0xD8DF: 0x5261, //CJK UNIFIED IDEOGRAPH - 0xD8E0: 0x525C, //CJK UNIFIED IDEOGRAPH - 0xD8E1: 0x84AF, //CJK UNIFIED IDEOGRAPH - 0xD8E2: 0x527D, //CJK UNIFIED IDEOGRAPH - 0xD8E3: 0x5282, //CJK UNIFIED IDEOGRAPH - 0xD8E4: 0x5281, //CJK UNIFIED IDEOGRAPH - 0xD8E5: 0x5290, //CJK UNIFIED IDEOGRAPH - 0xD8E6: 0x5293, //CJK UNIFIED IDEOGRAPH - 0xD8E7: 0x5182, //CJK UNIFIED IDEOGRAPH - 0xD8E8: 0x7F54, //CJK UNIFIED IDEOGRAPH - 0xD8E9: 0x4EBB, //CJK UNIFIED IDEOGRAPH - 0xD8EA: 0x4EC3, //CJK UNIFIED IDEOGRAPH - 0xD8EB: 0x4EC9, //CJK UNIFIED IDEOGRAPH - 0xD8EC: 0x4EC2, //CJK UNIFIED IDEOGRAPH - 0xD8ED: 0x4EE8, //CJK UNIFIED IDEOGRAPH - 0xD8EE: 0x4EE1, //CJK UNIFIED IDEOGRAPH - 0xD8EF: 0x4EEB, //CJK UNIFIED IDEOGRAPH - 0xD8F0: 0x4EDE, //CJK UNIFIED IDEOGRAPH - 0xD8F1: 0x4F1B, //CJK UNIFIED IDEOGRAPH - 0xD8F2: 0x4EF3, //CJK UNIFIED IDEOGRAPH - 0xD8F3: 0x4F22, //CJK UNIFIED IDEOGRAPH - 0xD8F4: 0x4F64, //CJK UNIFIED IDEOGRAPH - 0xD8F5: 0x4EF5, //CJK UNIFIED IDEOGRAPH - 0xD8F6: 0x4F25, //CJK UNIFIED IDEOGRAPH - 0xD8F7: 0x4F27, //CJK UNIFIED IDEOGRAPH - 0xD8F8: 0x4F09, //CJK UNIFIED IDEOGRAPH - 0xD8F9: 0x4F2B, //CJK UNIFIED IDEOGRAPH - 0xD8FA: 0x4F5E, //CJK UNIFIED IDEOGRAPH - 0xD8FB: 0x4F67, //CJK UNIFIED IDEOGRAPH - 0xD8FC: 0x6538, //CJK UNIFIED IDEOGRAPH - 0xD8FD: 0x4F5A, //CJK UNIFIED IDEOGRAPH - 0xD8FE: 0x4F5D, //CJK UNIFIED IDEOGRAPH - 0xD940: 0x8CAE, //CJK UNIFIED IDEOGRAPH - 0xD941: 0x8CAF, //CJK UNIFIED IDEOGRAPH - 0xD942: 0x8CB0, //CJK UNIFIED IDEOGRAPH - 0xD943: 0x8CB1, //CJK UNIFIED IDEOGRAPH - 0xD944: 0x8CB2, //CJK UNIFIED IDEOGRAPH - 0xD945: 0x8CB3, //CJK UNIFIED IDEOGRAPH - 0xD946: 0x8CB4, //CJK UNIFIED IDEOGRAPH - 0xD947: 0x8CB5, //CJK UNIFIED IDEOGRAPH - 0xD948: 0x8CB6, //CJK UNIFIED IDEOGRAPH - 0xD949: 0x8CB7, //CJK UNIFIED IDEOGRAPH - 0xD94A: 0x8CB8, //CJK UNIFIED IDEOGRAPH - 0xD94B: 0x8CB9, //CJK UNIFIED IDEOGRAPH - 0xD94C: 0x8CBA, //CJK UNIFIED IDEOGRAPH - 0xD94D: 0x8CBB, //CJK UNIFIED IDEOGRAPH - 0xD94E: 0x8CBC, //CJK UNIFIED IDEOGRAPH - 0xD94F: 0x8CBD, //CJK UNIFIED IDEOGRAPH - 0xD950: 0x8CBE, //CJK UNIFIED IDEOGRAPH - 0xD951: 0x8CBF, //CJK UNIFIED IDEOGRAPH - 0xD952: 0x8CC0, //CJK UNIFIED IDEOGRAPH - 0xD953: 0x8CC1, //CJK UNIFIED IDEOGRAPH - 0xD954: 0x8CC2, //CJK UNIFIED IDEOGRAPH - 0xD955: 0x8CC3, //CJK UNIFIED IDEOGRAPH - 0xD956: 0x8CC4, //CJK UNIFIED IDEOGRAPH - 0xD957: 0x8CC5, //CJK UNIFIED IDEOGRAPH - 0xD958: 0x8CC6, //CJK UNIFIED IDEOGRAPH - 0xD959: 0x8CC7, //CJK UNIFIED IDEOGRAPH - 0xD95A: 0x8CC8, //CJK UNIFIED IDEOGRAPH - 0xD95B: 0x8CC9, //CJK UNIFIED IDEOGRAPH - 0xD95C: 0x8CCA, //CJK UNIFIED IDEOGRAPH - 0xD95D: 0x8CCB, //CJK UNIFIED IDEOGRAPH - 0xD95E: 0x8CCC, //CJK UNIFIED IDEOGRAPH - 0xD95F: 0x8CCD, //CJK UNIFIED IDEOGRAPH - 0xD960: 0x8CCE, //CJK UNIFIED IDEOGRAPH - 0xD961: 0x8CCF, //CJK UNIFIED IDEOGRAPH - 0xD962: 0x8CD0, //CJK UNIFIED IDEOGRAPH - 0xD963: 0x8CD1, //CJK UNIFIED IDEOGRAPH - 0xD964: 0x8CD2, //CJK UNIFIED IDEOGRAPH - 0xD965: 0x8CD3, //CJK UNIFIED IDEOGRAPH - 0xD966: 0x8CD4, //CJK UNIFIED IDEOGRAPH - 0xD967: 0x8CD5, //CJK UNIFIED IDEOGRAPH - 0xD968: 0x8CD6, //CJK UNIFIED IDEOGRAPH - 0xD969: 0x8CD7, //CJK UNIFIED IDEOGRAPH - 0xD96A: 0x8CD8, //CJK UNIFIED IDEOGRAPH - 0xD96B: 0x8CD9, //CJK UNIFIED IDEOGRAPH - 0xD96C: 0x8CDA, //CJK UNIFIED IDEOGRAPH - 0xD96D: 0x8CDB, //CJK UNIFIED IDEOGRAPH - 0xD96E: 0x8CDC, //CJK UNIFIED IDEOGRAPH - 0xD96F: 0x8CDD, //CJK UNIFIED IDEOGRAPH - 0xD970: 0x8CDE, //CJK UNIFIED IDEOGRAPH - 0xD971: 0x8CDF, //CJK UNIFIED IDEOGRAPH - 0xD972: 0x8CE0, //CJK UNIFIED IDEOGRAPH - 0xD973: 0x8CE1, //CJK UNIFIED IDEOGRAPH - 0xD974: 0x8CE2, //CJK UNIFIED IDEOGRAPH - 0xD975: 0x8CE3, //CJK UNIFIED IDEOGRAPH - 0xD976: 0x8CE4, //CJK UNIFIED IDEOGRAPH - 0xD977: 0x8CE5, //CJK UNIFIED IDEOGRAPH - 0xD978: 0x8CE6, //CJK UNIFIED IDEOGRAPH - 0xD979: 0x8CE7, //CJK UNIFIED IDEOGRAPH - 0xD97A: 0x8CE8, //CJK UNIFIED IDEOGRAPH - 0xD97B: 0x8CE9, //CJK UNIFIED IDEOGRAPH - 0xD97C: 0x8CEA, //CJK UNIFIED IDEOGRAPH - 0xD97D: 0x8CEB, //CJK UNIFIED IDEOGRAPH - 0xD97E: 0x8CEC, //CJK UNIFIED IDEOGRAPH - 0xD980: 0x8CED, //CJK UNIFIED IDEOGRAPH - 0xD981: 0x8CEE, //CJK UNIFIED IDEOGRAPH - 0xD982: 0x8CEF, //CJK UNIFIED IDEOGRAPH - 0xD983: 0x8CF0, //CJK UNIFIED IDEOGRAPH - 0xD984: 0x8CF1, //CJK UNIFIED IDEOGRAPH - 0xD985: 0x8CF2, //CJK UNIFIED IDEOGRAPH - 0xD986: 0x8CF3, //CJK UNIFIED IDEOGRAPH - 0xD987: 0x8CF4, //CJK UNIFIED IDEOGRAPH - 0xD988: 0x8CF5, //CJK UNIFIED IDEOGRAPH - 0xD989: 0x8CF6, //CJK UNIFIED IDEOGRAPH - 0xD98A: 0x8CF7, //CJK UNIFIED IDEOGRAPH - 0xD98B: 0x8CF8, //CJK UNIFIED IDEOGRAPH - 0xD98C: 0x8CF9, //CJK UNIFIED IDEOGRAPH - 0xD98D: 0x8CFA, //CJK UNIFIED IDEOGRAPH - 0xD98E: 0x8CFB, //CJK UNIFIED IDEOGRAPH - 0xD98F: 0x8CFC, //CJK UNIFIED IDEOGRAPH - 0xD990: 0x8CFD, //CJK UNIFIED IDEOGRAPH - 0xD991: 0x8CFE, //CJK UNIFIED IDEOGRAPH - 0xD992: 0x8CFF, //CJK UNIFIED IDEOGRAPH - 0xD993: 0x8D00, //CJK UNIFIED IDEOGRAPH - 0xD994: 0x8D01, //CJK UNIFIED IDEOGRAPH - 0xD995: 0x8D02, //CJK UNIFIED IDEOGRAPH - 0xD996: 0x8D03, //CJK UNIFIED IDEOGRAPH - 0xD997: 0x8D04, //CJK UNIFIED IDEOGRAPH - 0xD998: 0x8D05, //CJK UNIFIED IDEOGRAPH - 0xD999: 0x8D06, //CJK UNIFIED IDEOGRAPH - 0xD99A: 0x8D07, //CJK UNIFIED IDEOGRAPH - 0xD99B: 0x8D08, //CJK UNIFIED IDEOGRAPH - 0xD99C: 0x8D09, //CJK UNIFIED IDEOGRAPH - 0xD99D: 0x8D0A, //CJK UNIFIED IDEOGRAPH - 0xD99E: 0x8D0B, //CJK UNIFIED IDEOGRAPH - 0xD99F: 0x8D0C, //CJK UNIFIED IDEOGRAPH - 0xD9A0: 0x8D0D, //CJK UNIFIED IDEOGRAPH - 0xD9A1: 0x4F5F, //CJK UNIFIED IDEOGRAPH - 0xD9A2: 0x4F57, //CJK UNIFIED IDEOGRAPH - 0xD9A3: 0x4F32, //CJK UNIFIED IDEOGRAPH - 0xD9A4: 0x4F3D, //CJK UNIFIED IDEOGRAPH - 0xD9A5: 0x4F76, //CJK UNIFIED IDEOGRAPH - 0xD9A6: 0x4F74, //CJK UNIFIED IDEOGRAPH - 0xD9A7: 0x4F91, //CJK UNIFIED IDEOGRAPH - 0xD9A8: 0x4F89, //CJK UNIFIED IDEOGRAPH - 0xD9A9: 0x4F83, //CJK UNIFIED IDEOGRAPH - 0xD9AA: 0x4F8F, //CJK UNIFIED IDEOGRAPH - 0xD9AB: 0x4F7E, //CJK UNIFIED IDEOGRAPH - 0xD9AC: 0x4F7B, //CJK UNIFIED IDEOGRAPH - 0xD9AD: 0x4FAA, //CJK UNIFIED IDEOGRAPH - 0xD9AE: 0x4F7C, //CJK UNIFIED IDEOGRAPH - 0xD9AF: 0x4FAC, //CJK UNIFIED IDEOGRAPH - 0xD9B0: 0x4F94, //CJK UNIFIED IDEOGRAPH - 0xD9B1: 0x4FE6, //CJK UNIFIED IDEOGRAPH - 0xD9B2: 0x4FE8, //CJK UNIFIED IDEOGRAPH - 0xD9B3: 0x4FEA, //CJK UNIFIED IDEOGRAPH - 0xD9B4: 0x4FC5, //CJK UNIFIED IDEOGRAPH - 0xD9B5: 0x4FDA, //CJK UNIFIED IDEOGRAPH - 0xD9B6: 0x4FE3, //CJK UNIFIED IDEOGRAPH - 0xD9B7: 0x4FDC, //CJK UNIFIED IDEOGRAPH - 0xD9B8: 0x4FD1, //CJK UNIFIED IDEOGRAPH - 0xD9B9: 0x4FDF, //CJK UNIFIED IDEOGRAPH - 0xD9BA: 0x4FF8, //CJK UNIFIED IDEOGRAPH - 0xD9BB: 0x5029, //CJK UNIFIED IDEOGRAPH - 0xD9BC: 0x504C, //CJK UNIFIED IDEOGRAPH - 0xD9BD: 0x4FF3, //CJK UNIFIED IDEOGRAPH - 0xD9BE: 0x502C, //CJK UNIFIED IDEOGRAPH - 0xD9BF: 0x500F, //CJK UNIFIED IDEOGRAPH - 0xD9C0: 0x502E, //CJK UNIFIED IDEOGRAPH - 0xD9C1: 0x502D, //CJK UNIFIED IDEOGRAPH - 0xD9C2: 0x4FFE, //CJK UNIFIED IDEOGRAPH - 0xD9C3: 0x501C, //CJK UNIFIED IDEOGRAPH - 0xD9C4: 0x500C, //CJK UNIFIED IDEOGRAPH - 0xD9C5: 0x5025, //CJK UNIFIED IDEOGRAPH - 0xD9C6: 0x5028, //CJK UNIFIED IDEOGRAPH - 0xD9C7: 0x507E, //CJK UNIFIED IDEOGRAPH - 0xD9C8: 0x5043, //CJK UNIFIED IDEOGRAPH - 0xD9C9: 0x5055, //CJK UNIFIED IDEOGRAPH - 0xD9CA: 0x5048, //CJK UNIFIED IDEOGRAPH - 0xD9CB: 0x504E, //CJK UNIFIED IDEOGRAPH - 0xD9CC: 0x506C, //CJK UNIFIED IDEOGRAPH - 0xD9CD: 0x507B, //CJK UNIFIED IDEOGRAPH - 0xD9CE: 0x50A5, //CJK UNIFIED IDEOGRAPH - 0xD9CF: 0x50A7, //CJK UNIFIED IDEOGRAPH - 0xD9D0: 0x50A9, //CJK UNIFIED IDEOGRAPH - 0xD9D1: 0x50BA, //CJK UNIFIED IDEOGRAPH - 0xD9D2: 0x50D6, //CJK UNIFIED IDEOGRAPH - 0xD9D3: 0x5106, //CJK UNIFIED IDEOGRAPH - 0xD9D4: 0x50ED, //CJK UNIFIED IDEOGRAPH - 0xD9D5: 0x50EC, //CJK UNIFIED IDEOGRAPH - 0xD9D6: 0x50E6, //CJK UNIFIED IDEOGRAPH - 0xD9D7: 0x50EE, //CJK UNIFIED IDEOGRAPH - 0xD9D8: 0x5107, //CJK UNIFIED IDEOGRAPH - 0xD9D9: 0x510B, //CJK UNIFIED IDEOGRAPH - 0xD9DA: 0x4EDD, //CJK UNIFIED IDEOGRAPH - 0xD9DB: 0x6C3D, //CJK UNIFIED IDEOGRAPH - 0xD9DC: 0x4F58, //CJK UNIFIED IDEOGRAPH - 0xD9DD: 0x4F65, //CJK UNIFIED IDEOGRAPH - 0xD9DE: 0x4FCE, //CJK UNIFIED IDEOGRAPH - 0xD9DF: 0x9FA0, //CJK UNIFIED IDEOGRAPH - 0xD9E0: 0x6C46, //CJK UNIFIED IDEOGRAPH - 0xD9E1: 0x7C74, //CJK UNIFIED IDEOGRAPH - 0xD9E2: 0x516E, //CJK UNIFIED IDEOGRAPH - 0xD9E3: 0x5DFD, //CJK UNIFIED IDEOGRAPH - 0xD9E4: 0x9EC9, //CJK UNIFIED IDEOGRAPH - 0xD9E5: 0x9998, //CJK UNIFIED IDEOGRAPH - 0xD9E6: 0x5181, //CJK UNIFIED IDEOGRAPH - 0xD9E7: 0x5914, //CJK UNIFIED IDEOGRAPH - 0xD9E8: 0x52F9, //CJK UNIFIED IDEOGRAPH - 0xD9E9: 0x530D, //CJK UNIFIED IDEOGRAPH - 0xD9EA: 0x8A07, //CJK UNIFIED IDEOGRAPH - 0xD9EB: 0x5310, //CJK UNIFIED IDEOGRAPH - 0xD9EC: 0x51EB, //CJK UNIFIED IDEOGRAPH - 0xD9ED: 0x5919, //CJK UNIFIED IDEOGRAPH - 0xD9EE: 0x5155, //CJK UNIFIED IDEOGRAPH - 0xD9EF: 0x4EA0, //CJK UNIFIED IDEOGRAPH - 0xD9F0: 0x5156, //CJK UNIFIED IDEOGRAPH - 0xD9F1: 0x4EB3, //CJK UNIFIED IDEOGRAPH - 0xD9F2: 0x886E, //CJK UNIFIED IDEOGRAPH - 0xD9F3: 0x88A4, //CJK UNIFIED IDEOGRAPH - 0xD9F4: 0x4EB5, //CJK UNIFIED IDEOGRAPH - 0xD9F5: 0x8114, //CJK UNIFIED IDEOGRAPH - 0xD9F6: 0x88D2, //CJK UNIFIED IDEOGRAPH - 0xD9F7: 0x7980, //CJK UNIFIED IDEOGRAPH - 0xD9F8: 0x5B34, //CJK UNIFIED IDEOGRAPH - 0xD9F9: 0x8803, //CJK UNIFIED IDEOGRAPH - 0xD9FA: 0x7FB8, //CJK UNIFIED IDEOGRAPH - 0xD9FB: 0x51AB, //CJK UNIFIED IDEOGRAPH - 0xD9FC: 0x51B1, //CJK UNIFIED IDEOGRAPH - 0xD9FD: 0x51BD, //CJK UNIFIED IDEOGRAPH - 0xD9FE: 0x51BC, //CJK UNIFIED IDEOGRAPH - 0xDA40: 0x8D0E, //CJK UNIFIED IDEOGRAPH - 0xDA41: 0x8D0F, //CJK UNIFIED IDEOGRAPH - 0xDA42: 0x8D10, //CJK UNIFIED IDEOGRAPH - 0xDA43: 0x8D11, //CJK UNIFIED IDEOGRAPH - 0xDA44: 0x8D12, //CJK UNIFIED IDEOGRAPH - 0xDA45: 0x8D13, //CJK UNIFIED IDEOGRAPH - 0xDA46: 0x8D14, //CJK UNIFIED IDEOGRAPH - 0xDA47: 0x8D15, //CJK UNIFIED IDEOGRAPH - 0xDA48: 0x8D16, //CJK UNIFIED IDEOGRAPH - 0xDA49: 0x8D17, //CJK UNIFIED IDEOGRAPH - 0xDA4A: 0x8D18, //CJK UNIFIED IDEOGRAPH - 0xDA4B: 0x8D19, //CJK UNIFIED IDEOGRAPH - 0xDA4C: 0x8D1A, //CJK UNIFIED IDEOGRAPH - 0xDA4D: 0x8D1B, //CJK UNIFIED IDEOGRAPH - 0xDA4E: 0x8D1C, //CJK UNIFIED IDEOGRAPH - 0xDA4F: 0x8D20, //CJK UNIFIED IDEOGRAPH - 0xDA50: 0x8D51, //CJK UNIFIED IDEOGRAPH - 0xDA51: 0x8D52, //CJK UNIFIED IDEOGRAPH - 0xDA52: 0x8D57, //CJK UNIFIED IDEOGRAPH - 0xDA53: 0x8D5F, //CJK UNIFIED IDEOGRAPH - 0xDA54: 0x8D65, //CJK UNIFIED IDEOGRAPH - 0xDA55: 0x8D68, //CJK UNIFIED IDEOGRAPH - 0xDA56: 0x8D69, //CJK UNIFIED IDEOGRAPH - 0xDA57: 0x8D6A, //CJK UNIFIED IDEOGRAPH - 0xDA58: 0x8D6C, //CJK UNIFIED IDEOGRAPH - 0xDA59: 0x8D6E, //CJK UNIFIED IDEOGRAPH - 0xDA5A: 0x8D6F, //CJK UNIFIED IDEOGRAPH - 0xDA5B: 0x8D71, //CJK UNIFIED IDEOGRAPH - 0xDA5C: 0x8D72, //CJK UNIFIED IDEOGRAPH - 0xDA5D: 0x8D78, //CJK UNIFIED IDEOGRAPH - 0xDA5E: 0x8D79, //CJK UNIFIED IDEOGRAPH - 0xDA5F: 0x8D7A, //CJK UNIFIED IDEOGRAPH - 0xDA60: 0x8D7B, //CJK UNIFIED IDEOGRAPH - 0xDA61: 0x8D7C, //CJK UNIFIED IDEOGRAPH - 0xDA62: 0x8D7D, //CJK UNIFIED IDEOGRAPH - 0xDA63: 0x8D7E, //CJK UNIFIED IDEOGRAPH - 0xDA64: 0x8D7F, //CJK UNIFIED IDEOGRAPH - 0xDA65: 0x8D80, //CJK UNIFIED IDEOGRAPH - 0xDA66: 0x8D82, //CJK UNIFIED IDEOGRAPH - 0xDA67: 0x8D83, //CJK UNIFIED IDEOGRAPH - 0xDA68: 0x8D86, //CJK UNIFIED IDEOGRAPH - 0xDA69: 0x8D87, //CJK UNIFIED IDEOGRAPH - 0xDA6A: 0x8D88, //CJK UNIFIED IDEOGRAPH - 0xDA6B: 0x8D89, //CJK UNIFIED IDEOGRAPH - 0xDA6C: 0x8D8C, //CJK UNIFIED IDEOGRAPH - 0xDA6D: 0x8D8D, //CJK UNIFIED IDEOGRAPH - 0xDA6E: 0x8D8E, //CJK UNIFIED IDEOGRAPH - 0xDA6F: 0x8D8F, //CJK UNIFIED IDEOGRAPH - 0xDA70: 0x8D90, //CJK UNIFIED IDEOGRAPH - 0xDA71: 0x8D92, //CJK UNIFIED IDEOGRAPH - 0xDA72: 0x8D93, //CJK UNIFIED IDEOGRAPH - 0xDA73: 0x8D95, //CJK UNIFIED IDEOGRAPH - 0xDA74: 0x8D96, //CJK UNIFIED IDEOGRAPH - 0xDA75: 0x8D97, //CJK UNIFIED IDEOGRAPH - 0xDA76: 0x8D98, //CJK UNIFIED IDEOGRAPH - 0xDA77: 0x8D99, //CJK UNIFIED IDEOGRAPH - 0xDA78: 0x8D9A, //CJK UNIFIED IDEOGRAPH - 0xDA79: 0x8D9B, //CJK UNIFIED IDEOGRAPH - 0xDA7A: 0x8D9C, //CJK UNIFIED IDEOGRAPH - 0xDA7B: 0x8D9D, //CJK UNIFIED IDEOGRAPH - 0xDA7C: 0x8D9E, //CJK UNIFIED IDEOGRAPH - 0xDA7D: 0x8DA0, //CJK UNIFIED IDEOGRAPH - 0xDA7E: 0x8DA1, //CJK UNIFIED IDEOGRAPH - 0xDA80: 0x8DA2, //CJK UNIFIED IDEOGRAPH - 0xDA81: 0x8DA4, //CJK UNIFIED IDEOGRAPH - 0xDA82: 0x8DA5, //CJK UNIFIED IDEOGRAPH - 0xDA83: 0x8DA6, //CJK UNIFIED IDEOGRAPH - 0xDA84: 0x8DA7, //CJK UNIFIED IDEOGRAPH - 0xDA85: 0x8DA8, //CJK UNIFIED IDEOGRAPH - 0xDA86: 0x8DA9, //CJK UNIFIED IDEOGRAPH - 0xDA87: 0x8DAA, //CJK UNIFIED IDEOGRAPH - 0xDA88: 0x8DAB, //CJK UNIFIED IDEOGRAPH - 0xDA89: 0x8DAC, //CJK UNIFIED IDEOGRAPH - 0xDA8A: 0x8DAD, //CJK UNIFIED IDEOGRAPH - 0xDA8B: 0x8DAE, //CJK UNIFIED IDEOGRAPH - 0xDA8C: 0x8DAF, //CJK UNIFIED IDEOGRAPH - 0xDA8D: 0x8DB0, //CJK UNIFIED IDEOGRAPH - 0xDA8E: 0x8DB2, //CJK UNIFIED IDEOGRAPH - 0xDA8F: 0x8DB6, //CJK UNIFIED IDEOGRAPH - 0xDA90: 0x8DB7, //CJK UNIFIED IDEOGRAPH - 0xDA91: 0x8DB9, //CJK UNIFIED IDEOGRAPH - 0xDA92: 0x8DBB, //CJK UNIFIED IDEOGRAPH - 0xDA93: 0x8DBD, //CJK UNIFIED IDEOGRAPH - 0xDA94: 0x8DC0, //CJK UNIFIED IDEOGRAPH - 0xDA95: 0x8DC1, //CJK UNIFIED IDEOGRAPH - 0xDA96: 0x8DC2, //CJK UNIFIED IDEOGRAPH - 0xDA97: 0x8DC5, //CJK UNIFIED IDEOGRAPH - 0xDA98: 0x8DC7, //CJK UNIFIED IDEOGRAPH - 0xDA99: 0x8DC8, //CJK UNIFIED IDEOGRAPH - 0xDA9A: 0x8DC9, //CJK UNIFIED IDEOGRAPH - 0xDA9B: 0x8DCA, //CJK UNIFIED IDEOGRAPH - 0xDA9C: 0x8DCD, //CJK UNIFIED IDEOGRAPH - 0xDA9D: 0x8DD0, //CJK UNIFIED IDEOGRAPH - 0xDA9E: 0x8DD2, //CJK UNIFIED IDEOGRAPH - 0xDA9F: 0x8DD3, //CJK UNIFIED IDEOGRAPH - 0xDAA0: 0x8DD4, //CJK UNIFIED IDEOGRAPH - 0xDAA1: 0x51C7, //CJK UNIFIED IDEOGRAPH - 0xDAA2: 0x5196, //CJK UNIFIED IDEOGRAPH - 0xDAA3: 0x51A2, //CJK UNIFIED IDEOGRAPH - 0xDAA4: 0x51A5, //CJK UNIFIED IDEOGRAPH - 0xDAA5: 0x8BA0, //CJK UNIFIED IDEOGRAPH - 0xDAA6: 0x8BA6, //CJK UNIFIED IDEOGRAPH - 0xDAA7: 0x8BA7, //CJK UNIFIED IDEOGRAPH - 0xDAA8: 0x8BAA, //CJK UNIFIED IDEOGRAPH - 0xDAA9: 0x8BB4, //CJK UNIFIED IDEOGRAPH - 0xDAAA: 0x8BB5, //CJK UNIFIED IDEOGRAPH - 0xDAAB: 0x8BB7, //CJK UNIFIED IDEOGRAPH - 0xDAAC: 0x8BC2, //CJK UNIFIED IDEOGRAPH - 0xDAAD: 0x8BC3, //CJK UNIFIED IDEOGRAPH - 0xDAAE: 0x8BCB, //CJK UNIFIED IDEOGRAPH - 0xDAAF: 0x8BCF, //CJK UNIFIED IDEOGRAPH - 0xDAB0: 0x8BCE, //CJK UNIFIED IDEOGRAPH - 0xDAB1: 0x8BD2, //CJK UNIFIED IDEOGRAPH - 0xDAB2: 0x8BD3, //CJK UNIFIED IDEOGRAPH - 0xDAB3: 0x8BD4, //CJK UNIFIED IDEOGRAPH - 0xDAB4: 0x8BD6, //CJK UNIFIED IDEOGRAPH - 0xDAB5: 0x8BD8, //CJK UNIFIED IDEOGRAPH - 0xDAB6: 0x8BD9, //CJK UNIFIED IDEOGRAPH - 0xDAB7: 0x8BDC, //CJK UNIFIED IDEOGRAPH - 0xDAB8: 0x8BDF, //CJK UNIFIED IDEOGRAPH - 0xDAB9: 0x8BE0, //CJK UNIFIED IDEOGRAPH - 0xDABA: 0x8BE4, //CJK UNIFIED IDEOGRAPH - 0xDABB: 0x8BE8, //CJK UNIFIED IDEOGRAPH - 0xDABC: 0x8BE9, //CJK UNIFIED IDEOGRAPH - 0xDABD: 0x8BEE, //CJK UNIFIED IDEOGRAPH - 0xDABE: 0x8BF0, //CJK UNIFIED IDEOGRAPH - 0xDABF: 0x8BF3, //CJK UNIFIED IDEOGRAPH - 0xDAC0: 0x8BF6, //CJK UNIFIED IDEOGRAPH - 0xDAC1: 0x8BF9, //CJK UNIFIED IDEOGRAPH - 0xDAC2: 0x8BFC, //CJK UNIFIED IDEOGRAPH - 0xDAC3: 0x8BFF, //CJK UNIFIED IDEOGRAPH - 0xDAC4: 0x8C00, //CJK UNIFIED IDEOGRAPH - 0xDAC5: 0x8C02, //CJK UNIFIED IDEOGRAPH - 0xDAC6: 0x8C04, //CJK UNIFIED IDEOGRAPH - 0xDAC7: 0x8C07, //CJK UNIFIED IDEOGRAPH - 0xDAC8: 0x8C0C, //CJK UNIFIED IDEOGRAPH - 0xDAC9: 0x8C0F, //CJK UNIFIED IDEOGRAPH - 0xDACA: 0x8C11, //CJK UNIFIED IDEOGRAPH - 0xDACB: 0x8C12, //CJK UNIFIED IDEOGRAPH - 0xDACC: 0x8C14, //CJK UNIFIED IDEOGRAPH - 0xDACD: 0x8C15, //CJK UNIFIED IDEOGRAPH - 0xDACE: 0x8C16, //CJK UNIFIED IDEOGRAPH - 0xDACF: 0x8C19, //CJK UNIFIED IDEOGRAPH - 0xDAD0: 0x8C1B, //CJK UNIFIED IDEOGRAPH - 0xDAD1: 0x8C18, //CJK UNIFIED IDEOGRAPH - 0xDAD2: 0x8C1D, //CJK UNIFIED IDEOGRAPH - 0xDAD3: 0x8C1F, //CJK UNIFIED IDEOGRAPH - 0xDAD4: 0x8C20, //CJK UNIFIED IDEOGRAPH - 0xDAD5: 0x8C21, //CJK UNIFIED IDEOGRAPH - 0xDAD6: 0x8C25, //CJK UNIFIED IDEOGRAPH - 0xDAD7: 0x8C27, //CJK UNIFIED IDEOGRAPH - 0xDAD8: 0x8C2A, //CJK UNIFIED IDEOGRAPH - 0xDAD9: 0x8C2B, //CJK UNIFIED IDEOGRAPH - 0xDADA: 0x8C2E, //CJK UNIFIED IDEOGRAPH - 0xDADB: 0x8C2F, //CJK UNIFIED IDEOGRAPH - 0xDADC: 0x8C32, //CJK UNIFIED IDEOGRAPH - 0xDADD: 0x8C33, //CJK UNIFIED IDEOGRAPH - 0xDADE: 0x8C35, //CJK UNIFIED IDEOGRAPH - 0xDADF: 0x8C36, //CJK UNIFIED IDEOGRAPH - 0xDAE0: 0x5369, //CJK UNIFIED IDEOGRAPH - 0xDAE1: 0x537A, //CJK UNIFIED IDEOGRAPH - 0xDAE2: 0x961D, //CJK UNIFIED IDEOGRAPH - 0xDAE3: 0x9622, //CJK UNIFIED IDEOGRAPH - 0xDAE4: 0x9621, //CJK UNIFIED IDEOGRAPH - 0xDAE5: 0x9631, //CJK UNIFIED IDEOGRAPH - 0xDAE6: 0x962A, //CJK UNIFIED IDEOGRAPH - 0xDAE7: 0x963D, //CJK UNIFIED IDEOGRAPH - 0xDAE8: 0x963C, //CJK UNIFIED IDEOGRAPH - 0xDAE9: 0x9642, //CJK UNIFIED IDEOGRAPH - 0xDAEA: 0x9649, //CJK UNIFIED IDEOGRAPH - 0xDAEB: 0x9654, //CJK UNIFIED IDEOGRAPH - 0xDAEC: 0x965F, //CJK UNIFIED IDEOGRAPH - 0xDAED: 0x9667, //CJK UNIFIED IDEOGRAPH - 0xDAEE: 0x966C, //CJK UNIFIED IDEOGRAPH - 0xDAEF: 0x9672, //CJK UNIFIED IDEOGRAPH - 0xDAF0: 0x9674, //CJK UNIFIED IDEOGRAPH - 0xDAF1: 0x9688, //CJK UNIFIED IDEOGRAPH - 0xDAF2: 0x968D, //CJK UNIFIED IDEOGRAPH - 0xDAF3: 0x9697, //CJK UNIFIED IDEOGRAPH - 0xDAF4: 0x96B0, //CJK UNIFIED IDEOGRAPH - 0xDAF5: 0x9097, //CJK UNIFIED IDEOGRAPH - 0xDAF6: 0x909B, //CJK UNIFIED IDEOGRAPH - 0xDAF7: 0x909D, //CJK UNIFIED IDEOGRAPH - 0xDAF8: 0x9099, //CJK UNIFIED IDEOGRAPH - 0xDAF9: 0x90AC, //CJK UNIFIED IDEOGRAPH - 0xDAFA: 0x90A1, //CJK UNIFIED IDEOGRAPH - 0xDAFB: 0x90B4, //CJK UNIFIED IDEOGRAPH - 0xDAFC: 0x90B3, //CJK UNIFIED IDEOGRAPH - 0xDAFD: 0x90B6, //CJK UNIFIED IDEOGRAPH - 0xDAFE: 0x90BA, //CJK UNIFIED IDEOGRAPH - 0xDB40: 0x8DD5, //CJK UNIFIED IDEOGRAPH - 0xDB41: 0x8DD8, //CJK UNIFIED IDEOGRAPH - 0xDB42: 0x8DD9, //CJK UNIFIED IDEOGRAPH - 0xDB43: 0x8DDC, //CJK UNIFIED IDEOGRAPH - 0xDB44: 0x8DE0, //CJK UNIFIED IDEOGRAPH - 0xDB45: 0x8DE1, //CJK UNIFIED IDEOGRAPH - 0xDB46: 0x8DE2, //CJK UNIFIED IDEOGRAPH - 0xDB47: 0x8DE5, //CJK UNIFIED IDEOGRAPH - 0xDB48: 0x8DE6, //CJK UNIFIED IDEOGRAPH - 0xDB49: 0x8DE7, //CJK UNIFIED IDEOGRAPH - 0xDB4A: 0x8DE9, //CJK UNIFIED IDEOGRAPH - 0xDB4B: 0x8DED, //CJK UNIFIED IDEOGRAPH - 0xDB4C: 0x8DEE, //CJK UNIFIED IDEOGRAPH - 0xDB4D: 0x8DF0, //CJK UNIFIED IDEOGRAPH - 0xDB4E: 0x8DF1, //CJK UNIFIED IDEOGRAPH - 0xDB4F: 0x8DF2, //CJK UNIFIED IDEOGRAPH - 0xDB50: 0x8DF4, //CJK UNIFIED IDEOGRAPH - 0xDB51: 0x8DF6, //CJK UNIFIED IDEOGRAPH - 0xDB52: 0x8DFC, //CJK UNIFIED IDEOGRAPH - 0xDB53: 0x8DFE, //CJK UNIFIED IDEOGRAPH - 0xDB54: 0x8DFF, //CJK UNIFIED IDEOGRAPH - 0xDB55: 0x8E00, //CJK UNIFIED IDEOGRAPH - 0xDB56: 0x8E01, //CJK UNIFIED IDEOGRAPH - 0xDB57: 0x8E02, //CJK UNIFIED IDEOGRAPH - 0xDB58: 0x8E03, //CJK UNIFIED IDEOGRAPH - 0xDB59: 0x8E04, //CJK UNIFIED IDEOGRAPH - 0xDB5A: 0x8E06, //CJK UNIFIED IDEOGRAPH - 0xDB5B: 0x8E07, //CJK UNIFIED IDEOGRAPH - 0xDB5C: 0x8E08, //CJK UNIFIED IDEOGRAPH - 0xDB5D: 0x8E0B, //CJK UNIFIED IDEOGRAPH - 0xDB5E: 0x8E0D, //CJK UNIFIED IDEOGRAPH - 0xDB5F: 0x8E0E, //CJK UNIFIED IDEOGRAPH - 0xDB60: 0x8E10, //CJK UNIFIED IDEOGRAPH - 0xDB61: 0x8E11, //CJK UNIFIED IDEOGRAPH - 0xDB62: 0x8E12, //CJK UNIFIED IDEOGRAPH - 0xDB63: 0x8E13, //CJK UNIFIED IDEOGRAPH - 0xDB64: 0x8E15, //CJK UNIFIED IDEOGRAPH - 0xDB65: 0x8E16, //CJK UNIFIED IDEOGRAPH - 0xDB66: 0x8E17, //CJK UNIFIED IDEOGRAPH - 0xDB67: 0x8E18, //CJK UNIFIED IDEOGRAPH - 0xDB68: 0x8E19, //CJK UNIFIED IDEOGRAPH - 0xDB69: 0x8E1A, //CJK UNIFIED IDEOGRAPH - 0xDB6A: 0x8E1B, //CJK UNIFIED IDEOGRAPH - 0xDB6B: 0x8E1C, //CJK UNIFIED IDEOGRAPH - 0xDB6C: 0x8E20, //CJK UNIFIED IDEOGRAPH - 0xDB6D: 0x8E21, //CJK UNIFIED IDEOGRAPH - 0xDB6E: 0x8E24, //CJK UNIFIED IDEOGRAPH - 0xDB6F: 0x8E25, //CJK UNIFIED IDEOGRAPH - 0xDB70: 0x8E26, //CJK UNIFIED IDEOGRAPH - 0xDB71: 0x8E27, //CJK UNIFIED IDEOGRAPH - 0xDB72: 0x8E28, //CJK UNIFIED IDEOGRAPH - 0xDB73: 0x8E2B, //CJK UNIFIED IDEOGRAPH - 0xDB74: 0x8E2D, //CJK UNIFIED IDEOGRAPH - 0xDB75: 0x8E30, //CJK UNIFIED IDEOGRAPH - 0xDB76: 0x8E32, //CJK UNIFIED IDEOGRAPH - 0xDB77: 0x8E33, //CJK UNIFIED IDEOGRAPH - 0xDB78: 0x8E34, //CJK UNIFIED IDEOGRAPH - 0xDB79: 0x8E36, //CJK UNIFIED IDEOGRAPH - 0xDB7A: 0x8E37, //CJK UNIFIED IDEOGRAPH - 0xDB7B: 0x8E38, //CJK UNIFIED IDEOGRAPH - 0xDB7C: 0x8E3B, //CJK UNIFIED IDEOGRAPH - 0xDB7D: 0x8E3C, //CJK UNIFIED IDEOGRAPH - 0xDB7E: 0x8E3E, //CJK UNIFIED IDEOGRAPH - 0xDB80: 0x8E3F, //CJK UNIFIED IDEOGRAPH - 0xDB81: 0x8E43, //CJK UNIFIED IDEOGRAPH - 0xDB82: 0x8E45, //CJK UNIFIED IDEOGRAPH - 0xDB83: 0x8E46, //CJK UNIFIED IDEOGRAPH - 0xDB84: 0x8E4C, //CJK UNIFIED IDEOGRAPH - 0xDB85: 0x8E4D, //CJK UNIFIED IDEOGRAPH - 0xDB86: 0x8E4E, //CJK UNIFIED IDEOGRAPH - 0xDB87: 0x8E4F, //CJK UNIFIED IDEOGRAPH - 0xDB88: 0x8E50, //CJK UNIFIED IDEOGRAPH - 0xDB89: 0x8E53, //CJK UNIFIED IDEOGRAPH - 0xDB8A: 0x8E54, //CJK UNIFIED IDEOGRAPH - 0xDB8B: 0x8E55, //CJK UNIFIED IDEOGRAPH - 0xDB8C: 0x8E56, //CJK UNIFIED IDEOGRAPH - 0xDB8D: 0x8E57, //CJK UNIFIED IDEOGRAPH - 0xDB8E: 0x8E58, //CJK UNIFIED IDEOGRAPH - 0xDB8F: 0x8E5A, //CJK UNIFIED IDEOGRAPH - 0xDB90: 0x8E5B, //CJK UNIFIED IDEOGRAPH - 0xDB91: 0x8E5C, //CJK UNIFIED IDEOGRAPH - 0xDB92: 0x8E5D, //CJK UNIFIED IDEOGRAPH - 0xDB93: 0x8E5E, //CJK UNIFIED IDEOGRAPH - 0xDB94: 0x8E5F, //CJK UNIFIED IDEOGRAPH - 0xDB95: 0x8E60, //CJK UNIFIED IDEOGRAPH - 0xDB96: 0x8E61, //CJK UNIFIED IDEOGRAPH - 0xDB97: 0x8E62, //CJK UNIFIED IDEOGRAPH - 0xDB98: 0x8E63, //CJK UNIFIED IDEOGRAPH - 0xDB99: 0x8E64, //CJK UNIFIED IDEOGRAPH - 0xDB9A: 0x8E65, //CJK UNIFIED IDEOGRAPH - 0xDB9B: 0x8E67, //CJK UNIFIED IDEOGRAPH - 0xDB9C: 0x8E68, //CJK UNIFIED IDEOGRAPH - 0xDB9D: 0x8E6A, //CJK UNIFIED IDEOGRAPH - 0xDB9E: 0x8E6B, //CJK UNIFIED IDEOGRAPH - 0xDB9F: 0x8E6E, //CJK UNIFIED IDEOGRAPH - 0xDBA0: 0x8E71, //CJK UNIFIED IDEOGRAPH - 0xDBA1: 0x90B8, //CJK UNIFIED IDEOGRAPH - 0xDBA2: 0x90B0, //CJK UNIFIED IDEOGRAPH - 0xDBA3: 0x90CF, //CJK UNIFIED IDEOGRAPH - 0xDBA4: 0x90C5, //CJK UNIFIED IDEOGRAPH - 0xDBA5: 0x90BE, //CJK UNIFIED IDEOGRAPH - 0xDBA6: 0x90D0, //CJK UNIFIED IDEOGRAPH - 0xDBA7: 0x90C4, //CJK UNIFIED IDEOGRAPH - 0xDBA8: 0x90C7, //CJK UNIFIED IDEOGRAPH - 0xDBA9: 0x90D3, //CJK UNIFIED IDEOGRAPH - 0xDBAA: 0x90E6, //CJK UNIFIED IDEOGRAPH - 0xDBAB: 0x90E2, //CJK UNIFIED IDEOGRAPH - 0xDBAC: 0x90DC, //CJK UNIFIED IDEOGRAPH - 0xDBAD: 0x90D7, //CJK UNIFIED IDEOGRAPH - 0xDBAE: 0x90DB, //CJK UNIFIED IDEOGRAPH - 0xDBAF: 0x90EB, //CJK UNIFIED IDEOGRAPH - 0xDBB0: 0x90EF, //CJK UNIFIED IDEOGRAPH - 0xDBB1: 0x90FE, //CJK UNIFIED IDEOGRAPH - 0xDBB2: 0x9104, //CJK UNIFIED IDEOGRAPH - 0xDBB3: 0x9122, //CJK UNIFIED IDEOGRAPH - 0xDBB4: 0x911E, //CJK UNIFIED IDEOGRAPH - 0xDBB5: 0x9123, //CJK UNIFIED IDEOGRAPH - 0xDBB6: 0x9131, //CJK UNIFIED IDEOGRAPH - 0xDBB7: 0x912F, //CJK UNIFIED IDEOGRAPH - 0xDBB8: 0x9139, //CJK UNIFIED IDEOGRAPH - 0xDBB9: 0x9143, //CJK UNIFIED IDEOGRAPH - 0xDBBA: 0x9146, //CJK UNIFIED IDEOGRAPH - 0xDBBB: 0x520D, //CJK UNIFIED IDEOGRAPH - 0xDBBC: 0x5942, //CJK UNIFIED IDEOGRAPH - 0xDBBD: 0x52A2, //CJK UNIFIED IDEOGRAPH - 0xDBBE: 0x52AC, //CJK UNIFIED IDEOGRAPH - 0xDBBF: 0x52AD, //CJK UNIFIED IDEOGRAPH - 0xDBC0: 0x52BE, //CJK UNIFIED IDEOGRAPH - 0xDBC1: 0x54FF, //CJK UNIFIED IDEOGRAPH - 0xDBC2: 0x52D0, //CJK UNIFIED IDEOGRAPH - 0xDBC3: 0x52D6, //CJK UNIFIED IDEOGRAPH - 0xDBC4: 0x52F0, //CJK UNIFIED IDEOGRAPH - 0xDBC5: 0x53DF, //CJK UNIFIED IDEOGRAPH - 0xDBC6: 0x71EE, //CJK UNIFIED IDEOGRAPH - 0xDBC7: 0x77CD, //CJK UNIFIED IDEOGRAPH - 0xDBC8: 0x5EF4, //CJK UNIFIED IDEOGRAPH - 0xDBC9: 0x51F5, //CJK UNIFIED IDEOGRAPH - 0xDBCA: 0x51FC, //CJK UNIFIED IDEOGRAPH - 0xDBCB: 0x9B2F, //CJK UNIFIED IDEOGRAPH - 0xDBCC: 0x53B6, //CJK UNIFIED IDEOGRAPH - 0xDBCD: 0x5F01, //CJK UNIFIED IDEOGRAPH - 0xDBCE: 0x755A, //CJK UNIFIED IDEOGRAPH - 0xDBCF: 0x5DEF, //CJK UNIFIED IDEOGRAPH - 0xDBD0: 0x574C, //CJK UNIFIED IDEOGRAPH - 0xDBD1: 0x57A9, //CJK UNIFIED IDEOGRAPH - 0xDBD2: 0x57A1, //CJK UNIFIED IDEOGRAPH - 0xDBD3: 0x587E, //CJK UNIFIED IDEOGRAPH - 0xDBD4: 0x58BC, //CJK UNIFIED IDEOGRAPH - 0xDBD5: 0x58C5, //CJK UNIFIED IDEOGRAPH - 0xDBD6: 0x58D1, //CJK UNIFIED IDEOGRAPH - 0xDBD7: 0x5729, //CJK UNIFIED IDEOGRAPH - 0xDBD8: 0x572C, //CJK UNIFIED IDEOGRAPH - 0xDBD9: 0x572A, //CJK UNIFIED IDEOGRAPH - 0xDBDA: 0x5733, //CJK UNIFIED IDEOGRAPH - 0xDBDB: 0x5739, //CJK UNIFIED IDEOGRAPH - 0xDBDC: 0x572E, //CJK UNIFIED IDEOGRAPH - 0xDBDD: 0x572F, //CJK UNIFIED IDEOGRAPH - 0xDBDE: 0x575C, //CJK UNIFIED IDEOGRAPH - 0xDBDF: 0x573B, //CJK UNIFIED IDEOGRAPH - 0xDBE0: 0x5742, //CJK UNIFIED IDEOGRAPH - 0xDBE1: 0x5769, //CJK UNIFIED IDEOGRAPH - 0xDBE2: 0x5785, //CJK UNIFIED IDEOGRAPH - 0xDBE3: 0x576B, //CJK UNIFIED IDEOGRAPH - 0xDBE4: 0x5786, //CJK UNIFIED IDEOGRAPH - 0xDBE5: 0x577C, //CJK UNIFIED IDEOGRAPH - 0xDBE6: 0x577B, //CJK UNIFIED IDEOGRAPH - 0xDBE7: 0x5768, //CJK UNIFIED IDEOGRAPH - 0xDBE8: 0x576D, //CJK UNIFIED IDEOGRAPH - 0xDBE9: 0x5776, //CJK UNIFIED IDEOGRAPH - 0xDBEA: 0x5773, //CJK UNIFIED IDEOGRAPH - 0xDBEB: 0x57AD, //CJK UNIFIED IDEOGRAPH - 0xDBEC: 0x57A4, //CJK UNIFIED IDEOGRAPH - 0xDBED: 0x578C, //CJK UNIFIED IDEOGRAPH - 0xDBEE: 0x57B2, //CJK UNIFIED IDEOGRAPH - 0xDBEF: 0x57CF, //CJK UNIFIED IDEOGRAPH - 0xDBF0: 0x57A7, //CJK UNIFIED IDEOGRAPH - 0xDBF1: 0x57B4, //CJK UNIFIED IDEOGRAPH - 0xDBF2: 0x5793, //CJK UNIFIED IDEOGRAPH - 0xDBF3: 0x57A0, //CJK UNIFIED IDEOGRAPH - 0xDBF4: 0x57D5, //CJK UNIFIED IDEOGRAPH - 0xDBF5: 0x57D8, //CJK UNIFIED IDEOGRAPH - 0xDBF6: 0x57DA, //CJK UNIFIED IDEOGRAPH - 0xDBF7: 0x57D9, //CJK UNIFIED IDEOGRAPH - 0xDBF8: 0x57D2, //CJK UNIFIED IDEOGRAPH - 0xDBF9: 0x57B8, //CJK UNIFIED IDEOGRAPH - 0xDBFA: 0x57F4, //CJK UNIFIED IDEOGRAPH - 0xDBFB: 0x57EF, //CJK UNIFIED IDEOGRAPH - 0xDBFC: 0x57F8, //CJK UNIFIED IDEOGRAPH - 0xDBFD: 0x57E4, //CJK UNIFIED IDEOGRAPH - 0xDBFE: 0x57DD, //CJK UNIFIED IDEOGRAPH - 0xDC40: 0x8E73, //CJK UNIFIED IDEOGRAPH - 0xDC41: 0x8E75, //CJK UNIFIED IDEOGRAPH - 0xDC42: 0x8E77, //CJK UNIFIED IDEOGRAPH - 0xDC43: 0x8E78, //CJK UNIFIED IDEOGRAPH - 0xDC44: 0x8E79, //CJK UNIFIED IDEOGRAPH - 0xDC45: 0x8E7A, //CJK UNIFIED IDEOGRAPH - 0xDC46: 0x8E7B, //CJK UNIFIED IDEOGRAPH - 0xDC47: 0x8E7D, //CJK UNIFIED IDEOGRAPH - 0xDC48: 0x8E7E, //CJK UNIFIED IDEOGRAPH - 0xDC49: 0x8E80, //CJK UNIFIED IDEOGRAPH - 0xDC4A: 0x8E82, //CJK UNIFIED IDEOGRAPH - 0xDC4B: 0x8E83, //CJK UNIFIED IDEOGRAPH - 0xDC4C: 0x8E84, //CJK UNIFIED IDEOGRAPH - 0xDC4D: 0x8E86, //CJK UNIFIED IDEOGRAPH - 0xDC4E: 0x8E88, //CJK UNIFIED IDEOGRAPH - 0xDC4F: 0x8E89, //CJK UNIFIED IDEOGRAPH - 0xDC50: 0x8E8A, //CJK UNIFIED IDEOGRAPH - 0xDC51: 0x8E8B, //CJK UNIFIED IDEOGRAPH - 0xDC52: 0x8E8C, //CJK UNIFIED IDEOGRAPH - 0xDC53: 0x8E8D, //CJK UNIFIED IDEOGRAPH - 0xDC54: 0x8E8E, //CJK UNIFIED IDEOGRAPH - 0xDC55: 0x8E91, //CJK UNIFIED IDEOGRAPH - 0xDC56: 0x8E92, //CJK UNIFIED IDEOGRAPH - 0xDC57: 0x8E93, //CJK UNIFIED IDEOGRAPH - 0xDC58: 0x8E95, //CJK UNIFIED IDEOGRAPH - 0xDC59: 0x8E96, //CJK UNIFIED IDEOGRAPH - 0xDC5A: 0x8E97, //CJK UNIFIED IDEOGRAPH - 0xDC5B: 0x8E98, //CJK UNIFIED IDEOGRAPH - 0xDC5C: 0x8E99, //CJK UNIFIED IDEOGRAPH - 0xDC5D: 0x8E9A, //CJK UNIFIED IDEOGRAPH - 0xDC5E: 0x8E9B, //CJK UNIFIED IDEOGRAPH - 0xDC5F: 0x8E9D, //CJK UNIFIED IDEOGRAPH - 0xDC60: 0x8E9F, //CJK UNIFIED IDEOGRAPH - 0xDC61: 0x8EA0, //CJK UNIFIED IDEOGRAPH - 0xDC62: 0x8EA1, //CJK UNIFIED IDEOGRAPH - 0xDC63: 0x8EA2, //CJK UNIFIED IDEOGRAPH - 0xDC64: 0x8EA3, //CJK UNIFIED IDEOGRAPH - 0xDC65: 0x8EA4, //CJK UNIFIED IDEOGRAPH - 0xDC66: 0x8EA5, //CJK UNIFIED IDEOGRAPH - 0xDC67: 0x8EA6, //CJK UNIFIED IDEOGRAPH - 0xDC68: 0x8EA7, //CJK UNIFIED IDEOGRAPH - 0xDC69: 0x8EA8, //CJK UNIFIED IDEOGRAPH - 0xDC6A: 0x8EA9, //CJK UNIFIED IDEOGRAPH - 0xDC6B: 0x8EAA, //CJK UNIFIED IDEOGRAPH - 0xDC6C: 0x8EAD, //CJK UNIFIED IDEOGRAPH - 0xDC6D: 0x8EAE, //CJK UNIFIED IDEOGRAPH - 0xDC6E: 0x8EB0, //CJK UNIFIED IDEOGRAPH - 0xDC6F: 0x8EB1, //CJK UNIFIED IDEOGRAPH - 0xDC70: 0x8EB3, //CJK UNIFIED IDEOGRAPH - 0xDC71: 0x8EB4, //CJK UNIFIED IDEOGRAPH - 0xDC72: 0x8EB5, //CJK UNIFIED IDEOGRAPH - 0xDC73: 0x8EB6, //CJK UNIFIED IDEOGRAPH - 0xDC74: 0x8EB7, //CJK UNIFIED IDEOGRAPH - 0xDC75: 0x8EB8, //CJK UNIFIED IDEOGRAPH - 0xDC76: 0x8EB9, //CJK UNIFIED IDEOGRAPH - 0xDC77: 0x8EBB, //CJK UNIFIED IDEOGRAPH - 0xDC78: 0x8EBC, //CJK UNIFIED IDEOGRAPH - 0xDC79: 0x8EBD, //CJK UNIFIED IDEOGRAPH - 0xDC7A: 0x8EBE, //CJK UNIFIED IDEOGRAPH - 0xDC7B: 0x8EBF, //CJK UNIFIED IDEOGRAPH - 0xDC7C: 0x8EC0, //CJK UNIFIED IDEOGRAPH - 0xDC7D: 0x8EC1, //CJK UNIFIED IDEOGRAPH - 0xDC7E: 0x8EC2, //CJK UNIFIED IDEOGRAPH - 0xDC80: 0x8EC3, //CJK UNIFIED IDEOGRAPH - 0xDC81: 0x8EC4, //CJK UNIFIED IDEOGRAPH - 0xDC82: 0x8EC5, //CJK UNIFIED IDEOGRAPH - 0xDC83: 0x8EC6, //CJK UNIFIED IDEOGRAPH - 0xDC84: 0x8EC7, //CJK UNIFIED IDEOGRAPH - 0xDC85: 0x8EC8, //CJK UNIFIED IDEOGRAPH - 0xDC86: 0x8EC9, //CJK UNIFIED IDEOGRAPH - 0xDC87: 0x8ECA, //CJK UNIFIED IDEOGRAPH - 0xDC88: 0x8ECB, //CJK UNIFIED IDEOGRAPH - 0xDC89: 0x8ECC, //CJK UNIFIED IDEOGRAPH - 0xDC8A: 0x8ECD, //CJK UNIFIED IDEOGRAPH - 0xDC8B: 0x8ECF, //CJK UNIFIED IDEOGRAPH - 0xDC8C: 0x8ED0, //CJK UNIFIED IDEOGRAPH - 0xDC8D: 0x8ED1, //CJK UNIFIED IDEOGRAPH - 0xDC8E: 0x8ED2, //CJK UNIFIED IDEOGRAPH - 0xDC8F: 0x8ED3, //CJK UNIFIED IDEOGRAPH - 0xDC90: 0x8ED4, //CJK UNIFIED IDEOGRAPH - 0xDC91: 0x8ED5, //CJK UNIFIED IDEOGRAPH - 0xDC92: 0x8ED6, //CJK UNIFIED IDEOGRAPH - 0xDC93: 0x8ED7, //CJK UNIFIED IDEOGRAPH - 0xDC94: 0x8ED8, //CJK UNIFIED IDEOGRAPH - 0xDC95: 0x8ED9, //CJK UNIFIED IDEOGRAPH - 0xDC96: 0x8EDA, //CJK UNIFIED IDEOGRAPH - 0xDC97: 0x8EDB, //CJK UNIFIED IDEOGRAPH - 0xDC98: 0x8EDC, //CJK UNIFIED IDEOGRAPH - 0xDC99: 0x8EDD, //CJK UNIFIED IDEOGRAPH - 0xDC9A: 0x8EDE, //CJK UNIFIED IDEOGRAPH - 0xDC9B: 0x8EDF, //CJK UNIFIED IDEOGRAPH - 0xDC9C: 0x8EE0, //CJK UNIFIED IDEOGRAPH - 0xDC9D: 0x8EE1, //CJK UNIFIED IDEOGRAPH - 0xDC9E: 0x8EE2, //CJK UNIFIED IDEOGRAPH - 0xDC9F: 0x8EE3, //CJK UNIFIED IDEOGRAPH - 0xDCA0: 0x8EE4, //CJK UNIFIED IDEOGRAPH - 0xDCA1: 0x580B, //CJK UNIFIED IDEOGRAPH - 0xDCA2: 0x580D, //CJK UNIFIED IDEOGRAPH - 0xDCA3: 0x57FD, //CJK UNIFIED IDEOGRAPH - 0xDCA4: 0x57ED, //CJK UNIFIED IDEOGRAPH - 0xDCA5: 0x5800, //CJK UNIFIED IDEOGRAPH - 0xDCA6: 0x581E, //CJK UNIFIED IDEOGRAPH - 0xDCA7: 0x5819, //CJK UNIFIED IDEOGRAPH - 0xDCA8: 0x5844, //CJK UNIFIED IDEOGRAPH - 0xDCA9: 0x5820, //CJK UNIFIED IDEOGRAPH - 0xDCAA: 0x5865, //CJK UNIFIED IDEOGRAPH - 0xDCAB: 0x586C, //CJK UNIFIED IDEOGRAPH - 0xDCAC: 0x5881, //CJK UNIFIED IDEOGRAPH - 0xDCAD: 0x5889, //CJK UNIFIED IDEOGRAPH - 0xDCAE: 0x589A, //CJK UNIFIED IDEOGRAPH - 0xDCAF: 0x5880, //CJK UNIFIED IDEOGRAPH - 0xDCB0: 0x99A8, //CJK UNIFIED IDEOGRAPH - 0xDCB1: 0x9F19, //CJK UNIFIED IDEOGRAPH - 0xDCB2: 0x61FF, //CJK UNIFIED IDEOGRAPH - 0xDCB3: 0x8279, //CJK UNIFIED IDEOGRAPH - 0xDCB4: 0x827D, //CJK UNIFIED IDEOGRAPH - 0xDCB5: 0x827F, //CJK UNIFIED IDEOGRAPH - 0xDCB6: 0x828F, //CJK UNIFIED IDEOGRAPH - 0xDCB7: 0x828A, //CJK UNIFIED IDEOGRAPH - 0xDCB8: 0x82A8, //CJK UNIFIED IDEOGRAPH - 0xDCB9: 0x8284, //CJK UNIFIED IDEOGRAPH - 0xDCBA: 0x828E, //CJK UNIFIED IDEOGRAPH - 0xDCBB: 0x8291, //CJK UNIFIED IDEOGRAPH - 0xDCBC: 0x8297, //CJK UNIFIED IDEOGRAPH - 0xDCBD: 0x8299, //CJK UNIFIED IDEOGRAPH - 0xDCBE: 0x82AB, //CJK UNIFIED IDEOGRAPH - 0xDCBF: 0x82B8, //CJK UNIFIED IDEOGRAPH - 0xDCC0: 0x82BE, //CJK UNIFIED IDEOGRAPH - 0xDCC1: 0x82B0, //CJK UNIFIED IDEOGRAPH - 0xDCC2: 0x82C8, //CJK UNIFIED IDEOGRAPH - 0xDCC3: 0x82CA, //CJK UNIFIED IDEOGRAPH - 0xDCC4: 0x82E3, //CJK UNIFIED IDEOGRAPH - 0xDCC5: 0x8298, //CJK UNIFIED IDEOGRAPH - 0xDCC6: 0x82B7, //CJK UNIFIED IDEOGRAPH - 0xDCC7: 0x82AE, //CJK UNIFIED IDEOGRAPH - 0xDCC8: 0x82CB, //CJK UNIFIED IDEOGRAPH - 0xDCC9: 0x82CC, //CJK UNIFIED IDEOGRAPH - 0xDCCA: 0x82C1, //CJK UNIFIED IDEOGRAPH - 0xDCCB: 0x82A9, //CJK UNIFIED IDEOGRAPH - 0xDCCC: 0x82B4, //CJK UNIFIED IDEOGRAPH - 0xDCCD: 0x82A1, //CJK UNIFIED IDEOGRAPH - 0xDCCE: 0x82AA, //CJK UNIFIED IDEOGRAPH - 0xDCCF: 0x829F, //CJK UNIFIED IDEOGRAPH - 0xDCD0: 0x82C4, //CJK UNIFIED IDEOGRAPH - 0xDCD1: 0x82CE, //CJK UNIFIED IDEOGRAPH - 0xDCD2: 0x82A4, //CJK UNIFIED IDEOGRAPH - 0xDCD3: 0x82E1, //CJK UNIFIED IDEOGRAPH - 0xDCD4: 0x8309, //CJK UNIFIED IDEOGRAPH - 0xDCD5: 0x82F7, //CJK UNIFIED IDEOGRAPH - 0xDCD6: 0x82E4, //CJK UNIFIED IDEOGRAPH - 0xDCD7: 0x830F, //CJK UNIFIED IDEOGRAPH - 0xDCD8: 0x8307, //CJK UNIFIED IDEOGRAPH - 0xDCD9: 0x82DC, //CJK UNIFIED IDEOGRAPH - 0xDCDA: 0x82F4, //CJK UNIFIED IDEOGRAPH - 0xDCDB: 0x82D2, //CJK UNIFIED IDEOGRAPH - 0xDCDC: 0x82D8, //CJK UNIFIED IDEOGRAPH - 0xDCDD: 0x830C, //CJK UNIFIED IDEOGRAPH - 0xDCDE: 0x82FB, //CJK UNIFIED IDEOGRAPH - 0xDCDF: 0x82D3, //CJK UNIFIED IDEOGRAPH - 0xDCE0: 0x8311, //CJK UNIFIED IDEOGRAPH - 0xDCE1: 0x831A, //CJK UNIFIED IDEOGRAPH - 0xDCE2: 0x8306, //CJK UNIFIED IDEOGRAPH - 0xDCE3: 0x8314, //CJK UNIFIED IDEOGRAPH - 0xDCE4: 0x8315, //CJK UNIFIED IDEOGRAPH - 0xDCE5: 0x82E0, //CJK UNIFIED IDEOGRAPH - 0xDCE6: 0x82D5, //CJK UNIFIED IDEOGRAPH - 0xDCE7: 0x831C, //CJK UNIFIED IDEOGRAPH - 0xDCE8: 0x8351, //CJK UNIFIED IDEOGRAPH - 0xDCE9: 0x835B, //CJK UNIFIED IDEOGRAPH - 0xDCEA: 0x835C, //CJK UNIFIED IDEOGRAPH - 0xDCEB: 0x8308, //CJK UNIFIED IDEOGRAPH - 0xDCEC: 0x8392, //CJK UNIFIED IDEOGRAPH - 0xDCED: 0x833C, //CJK UNIFIED IDEOGRAPH - 0xDCEE: 0x8334, //CJK UNIFIED IDEOGRAPH - 0xDCEF: 0x8331, //CJK UNIFIED IDEOGRAPH - 0xDCF0: 0x839B, //CJK UNIFIED IDEOGRAPH - 0xDCF1: 0x835E, //CJK UNIFIED IDEOGRAPH - 0xDCF2: 0x832F, //CJK UNIFIED IDEOGRAPH - 0xDCF3: 0x834F, //CJK UNIFIED IDEOGRAPH - 0xDCF4: 0x8347, //CJK UNIFIED IDEOGRAPH - 0xDCF5: 0x8343, //CJK UNIFIED IDEOGRAPH - 0xDCF6: 0x835F, //CJK UNIFIED IDEOGRAPH - 0xDCF7: 0x8340, //CJK UNIFIED IDEOGRAPH - 0xDCF8: 0x8317, //CJK UNIFIED IDEOGRAPH - 0xDCF9: 0x8360, //CJK UNIFIED IDEOGRAPH - 0xDCFA: 0x832D, //CJK UNIFIED IDEOGRAPH - 0xDCFB: 0x833A, //CJK UNIFIED IDEOGRAPH - 0xDCFC: 0x8333, //CJK UNIFIED IDEOGRAPH - 0xDCFD: 0x8366, //CJK UNIFIED IDEOGRAPH - 0xDCFE: 0x8365, //CJK UNIFIED IDEOGRAPH - 0xDD40: 0x8EE5, //CJK UNIFIED IDEOGRAPH - 0xDD41: 0x8EE6, //CJK UNIFIED IDEOGRAPH - 0xDD42: 0x8EE7, //CJK UNIFIED IDEOGRAPH - 0xDD43: 0x8EE8, //CJK UNIFIED IDEOGRAPH - 0xDD44: 0x8EE9, //CJK UNIFIED IDEOGRAPH - 0xDD45: 0x8EEA, //CJK UNIFIED IDEOGRAPH - 0xDD46: 0x8EEB, //CJK UNIFIED IDEOGRAPH - 0xDD47: 0x8EEC, //CJK UNIFIED IDEOGRAPH - 0xDD48: 0x8EED, //CJK UNIFIED IDEOGRAPH - 0xDD49: 0x8EEE, //CJK UNIFIED IDEOGRAPH - 0xDD4A: 0x8EEF, //CJK UNIFIED IDEOGRAPH - 0xDD4B: 0x8EF0, //CJK UNIFIED IDEOGRAPH - 0xDD4C: 0x8EF1, //CJK UNIFIED IDEOGRAPH - 0xDD4D: 0x8EF2, //CJK UNIFIED IDEOGRAPH - 0xDD4E: 0x8EF3, //CJK UNIFIED IDEOGRAPH - 0xDD4F: 0x8EF4, //CJK UNIFIED IDEOGRAPH - 0xDD50: 0x8EF5, //CJK UNIFIED IDEOGRAPH - 0xDD51: 0x8EF6, //CJK UNIFIED IDEOGRAPH - 0xDD52: 0x8EF7, //CJK UNIFIED IDEOGRAPH - 0xDD53: 0x8EF8, //CJK UNIFIED IDEOGRAPH - 0xDD54: 0x8EF9, //CJK UNIFIED IDEOGRAPH - 0xDD55: 0x8EFA, //CJK UNIFIED IDEOGRAPH - 0xDD56: 0x8EFB, //CJK UNIFIED IDEOGRAPH - 0xDD57: 0x8EFC, //CJK UNIFIED IDEOGRAPH - 0xDD58: 0x8EFD, //CJK UNIFIED IDEOGRAPH - 0xDD59: 0x8EFE, //CJK UNIFIED IDEOGRAPH - 0xDD5A: 0x8EFF, //CJK UNIFIED IDEOGRAPH - 0xDD5B: 0x8F00, //CJK UNIFIED IDEOGRAPH - 0xDD5C: 0x8F01, //CJK UNIFIED IDEOGRAPH - 0xDD5D: 0x8F02, //CJK UNIFIED IDEOGRAPH - 0xDD5E: 0x8F03, //CJK UNIFIED IDEOGRAPH - 0xDD5F: 0x8F04, //CJK UNIFIED IDEOGRAPH - 0xDD60: 0x8F05, //CJK UNIFIED IDEOGRAPH - 0xDD61: 0x8F06, //CJK UNIFIED IDEOGRAPH - 0xDD62: 0x8F07, //CJK UNIFIED IDEOGRAPH - 0xDD63: 0x8F08, //CJK UNIFIED IDEOGRAPH - 0xDD64: 0x8F09, //CJK UNIFIED IDEOGRAPH - 0xDD65: 0x8F0A, //CJK UNIFIED IDEOGRAPH - 0xDD66: 0x8F0B, //CJK UNIFIED IDEOGRAPH - 0xDD67: 0x8F0C, //CJK UNIFIED IDEOGRAPH - 0xDD68: 0x8F0D, //CJK UNIFIED IDEOGRAPH - 0xDD69: 0x8F0E, //CJK UNIFIED IDEOGRAPH - 0xDD6A: 0x8F0F, //CJK UNIFIED IDEOGRAPH - 0xDD6B: 0x8F10, //CJK UNIFIED IDEOGRAPH - 0xDD6C: 0x8F11, //CJK UNIFIED IDEOGRAPH - 0xDD6D: 0x8F12, //CJK UNIFIED IDEOGRAPH - 0xDD6E: 0x8F13, //CJK UNIFIED IDEOGRAPH - 0xDD6F: 0x8F14, //CJK UNIFIED IDEOGRAPH - 0xDD70: 0x8F15, //CJK UNIFIED IDEOGRAPH - 0xDD71: 0x8F16, //CJK UNIFIED IDEOGRAPH - 0xDD72: 0x8F17, //CJK UNIFIED IDEOGRAPH - 0xDD73: 0x8F18, //CJK UNIFIED IDEOGRAPH - 0xDD74: 0x8F19, //CJK UNIFIED IDEOGRAPH - 0xDD75: 0x8F1A, //CJK UNIFIED IDEOGRAPH - 0xDD76: 0x8F1B, //CJK UNIFIED IDEOGRAPH - 0xDD77: 0x8F1C, //CJK UNIFIED IDEOGRAPH - 0xDD78: 0x8F1D, //CJK UNIFIED IDEOGRAPH - 0xDD79: 0x8F1E, //CJK UNIFIED IDEOGRAPH - 0xDD7A: 0x8F1F, //CJK UNIFIED IDEOGRAPH - 0xDD7B: 0x8F20, //CJK UNIFIED IDEOGRAPH - 0xDD7C: 0x8F21, //CJK UNIFIED IDEOGRAPH - 0xDD7D: 0x8F22, //CJK UNIFIED IDEOGRAPH - 0xDD7E: 0x8F23, //CJK UNIFIED IDEOGRAPH - 0xDD80: 0x8F24, //CJK UNIFIED IDEOGRAPH - 0xDD81: 0x8F25, //CJK UNIFIED IDEOGRAPH - 0xDD82: 0x8F26, //CJK UNIFIED IDEOGRAPH - 0xDD83: 0x8F27, //CJK UNIFIED IDEOGRAPH - 0xDD84: 0x8F28, //CJK UNIFIED IDEOGRAPH - 0xDD85: 0x8F29, //CJK UNIFIED IDEOGRAPH - 0xDD86: 0x8F2A, //CJK UNIFIED IDEOGRAPH - 0xDD87: 0x8F2B, //CJK UNIFIED IDEOGRAPH - 0xDD88: 0x8F2C, //CJK UNIFIED IDEOGRAPH - 0xDD89: 0x8F2D, //CJK UNIFIED IDEOGRAPH - 0xDD8A: 0x8F2E, //CJK UNIFIED IDEOGRAPH - 0xDD8B: 0x8F2F, //CJK UNIFIED IDEOGRAPH - 0xDD8C: 0x8F30, //CJK UNIFIED IDEOGRAPH - 0xDD8D: 0x8F31, //CJK UNIFIED IDEOGRAPH - 0xDD8E: 0x8F32, //CJK UNIFIED IDEOGRAPH - 0xDD8F: 0x8F33, //CJK UNIFIED IDEOGRAPH - 0xDD90: 0x8F34, //CJK UNIFIED IDEOGRAPH - 0xDD91: 0x8F35, //CJK UNIFIED IDEOGRAPH - 0xDD92: 0x8F36, //CJK UNIFIED IDEOGRAPH - 0xDD93: 0x8F37, //CJK UNIFIED IDEOGRAPH - 0xDD94: 0x8F38, //CJK UNIFIED IDEOGRAPH - 0xDD95: 0x8F39, //CJK UNIFIED IDEOGRAPH - 0xDD96: 0x8F3A, //CJK UNIFIED IDEOGRAPH - 0xDD97: 0x8F3B, //CJK UNIFIED IDEOGRAPH - 0xDD98: 0x8F3C, //CJK UNIFIED IDEOGRAPH - 0xDD99: 0x8F3D, //CJK UNIFIED IDEOGRAPH - 0xDD9A: 0x8F3E, //CJK UNIFIED IDEOGRAPH - 0xDD9B: 0x8F3F, //CJK UNIFIED IDEOGRAPH - 0xDD9C: 0x8F40, //CJK UNIFIED IDEOGRAPH - 0xDD9D: 0x8F41, //CJK UNIFIED IDEOGRAPH - 0xDD9E: 0x8F42, //CJK UNIFIED IDEOGRAPH - 0xDD9F: 0x8F43, //CJK UNIFIED IDEOGRAPH - 0xDDA0: 0x8F44, //CJK UNIFIED IDEOGRAPH - 0xDDA1: 0x8368, //CJK UNIFIED IDEOGRAPH - 0xDDA2: 0x831B, //CJK UNIFIED IDEOGRAPH - 0xDDA3: 0x8369, //CJK UNIFIED IDEOGRAPH - 0xDDA4: 0x836C, //CJK UNIFIED IDEOGRAPH - 0xDDA5: 0x836A, //CJK UNIFIED IDEOGRAPH - 0xDDA6: 0x836D, //CJK UNIFIED IDEOGRAPH - 0xDDA7: 0x836E, //CJK UNIFIED IDEOGRAPH - 0xDDA8: 0x83B0, //CJK UNIFIED IDEOGRAPH - 0xDDA9: 0x8378, //CJK UNIFIED IDEOGRAPH - 0xDDAA: 0x83B3, //CJK UNIFIED IDEOGRAPH - 0xDDAB: 0x83B4, //CJK UNIFIED IDEOGRAPH - 0xDDAC: 0x83A0, //CJK UNIFIED IDEOGRAPH - 0xDDAD: 0x83AA, //CJK UNIFIED IDEOGRAPH - 0xDDAE: 0x8393, //CJK UNIFIED IDEOGRAPH - 0xDDAF: 0x839C, //CJK UNIFIED IDEOGRAPH - 0xDDB0: 0x8385, //CJK UNIFIED IDEOGRAPH - 0xDDB1: 0x837C, //CJK UNIFIED IDEOGRAPH - 0xDDB2: 0x83B6, //CJK UNIFIED IDEOGRAPH - 0xDDB3: 0x83A9, //CJK UNIFIED IDEOGRAPH - 0xDDB4: 0x837D, //CJK UNIFIED IDEOGRAPH - 0xDDB5: 0x83B8, //CJK UNIFIED IDEOGRAPH - 0xDDB6: 0x837B, //CJK UNIFIED IDEOGRAPH - 0xDDB7: 0x8398, //CJK UNIFIED IDEOGRAPH - 0xDDB8: 0x839E, //CJK UNIFIED IDEOGRAPH - 0xDDB9: 0x83A8, //CJK UNIFIED IDEOGRAPH - 0xDDBA: 0x83BA, //CJK UNIFIED IDEOGRAPH - 0xDDBB: 0x83BC, //CJK UNIFIED IDEOGRAPH - 0xDDBC: 0x83C1, //CJK UNIFIED IDEOGRAPH - 0xDDBD: 0x8401, //CJK UNIFIED IDEOGRAPH - 0xDDBE: 0x83E5, //CJK UNIFIED IDEOGRAPH - 0xDDBF: 0x83D8, //CJK UNIFIED IDEOGRAPH - 0xDDC0: 0x5807, //CJK UNIFIED IDEOGRAPH - 0xDDC1: 0x8418, //CJK UNIFIED IDEOGRAPH - 0xDDC2: 0x840B, //CJK UNIFIED IDEOGRAPH - 0xDDC3: 0x83DD, //CJK UNIFIED IDEOGRAPH - 0xDDC4: 0x83FD, //CJK UNIFIED IDEOGRAPH - 0xDDC5: 0x83D6, //CJK UNIFIED IDEOGRAPH - 0xDDC6: 0x841C, //CJK UNIFIED IDEOGRAPH - 0xDDC7: 0x8438, //CJK UNIFIED IDEOGRAPH - 0xDDC8: 0x8411, //CJK UNIFIED IDEOGRAPH - 0xDDC9: 0x8406, //CJK UNIFIED IDEOGRAPH - 0xDDCA: 0x83D4, //CJK UNIFIED IDEOGRAPH - 0xDDCB: 0x83DF, //CJK UNIFIED IDEOGRAPH - 0xDDCC: 0x840F, //CJK UNIFIED IDEOGRAPH - 0xDDCD: 0x8403, //CJK UNIFIED IDEOGRAPH - 0xDDCE: 0x83F8, //CJK UNIFIED IDEOGRAPH - 0xDDCF: 0x83F9, //CJK UNIFIED IDEOGRAPH - 0xDDD0: 0x83EA, //CJK UNIFIED IDEOGRAPH - 0xDDD1: 0x83C5, //CJK UNIFIED IDEOGRAPH - 0xDDD2: 0x83C0, //CJK UNIFIED IDEOGRAPH - 0xDDD3: 0x8426, //CJK UNIFIED IDEOGRAPH - 0xDDD4: 0x83F0, //CJK UNIFIED IDEOGRAPH - 0xDDD5: 0x83E1, //CJK UNIFIED IDEOGRAPH - 0xDDD6: 0x845C, //CJK UNIFIED IDEOGRAPH - 0xDDD7: 0x8451, //CJK UNIFIED IDEOGRAPH - 0xDDD8: 0x845A, //CJK UNIFIED IDEOGRAPH - 0xDDD9: 0x8459, //CJK UNIFIED IDEOGRAPH - 0xDDDA: 0x8473, //CJK UNIFIED IDEOGRAPH - 0xDDDB: 0x8487, //CJK UNIFIED IDEOGRAPH - 0xDDDC: 0x8488, //CJK UNIFIED IDEOGRAPH - 0xDDDD: 0x847A, //CJK UNIFIED IDEOGRAPH - 0xDDDE: 0x8489, //CJK UNIFIED IDEOGRAPH - 0xDDDF: 0x8478, //CJK UNIFIED IDEOGRAPH - 0xDDE0: 0x843C, //CJK UNIFIED IDEOGRAPH - 0xDDE1: 0x8446, //CJK UNIFIED IDEOGRAPH - 0xDDE2: 0x8469, //CJK UNIFIED IDEOGRAPH - 0xDDE3: 0x8476, //CJK UNIFIED IDEOGRAPH - 0xDDE4: 0x848C, //CJK UNIFIED IDEOGRAPH - 0xDDE5: 0x848E, //CJK UNIFIED IDEOGRAPH - 0xDDE6: 0x8431, //CJK UNIFIED IDEOGRAPH - 0xDDE7: 0x846D, //CJK UNIFIED IDEOGRAPH - 0xDDE8: 0x84C1, //CJK UNIFIED IDEOGRAPH - 0xDDE9: 0x84CD, //CJK UNIFIED IDEOGRAPH - 0xDDEA: 0x84D0, //CJK UNIFIED IDEOGRAPH - 0xDDEB: 0x84E6, //CJK UNIFIED IDEOGRAPH - 0xDDEC: 0x84BD, //CJK UNIFIED IDEOGRAPH - 0xDDED: 0x84D3, //CJK UNIFIED IDEOGRAPH - 0xDDEE: 0x84CA, //CJK UNIFIED IDEOGRAPH - 0xDDEF: 0x84BF, //CJK UNIFIED IDEOGRAPH - 0xDDF0: 0x84BA, //CJK UNIFIED IDEOGRAPH - 0xDDF1: 0x84E0, //CJK UNIFIED IDEOGRAPH - 0xDDF2: 0x84A1, //CJK UNIFIED IDEOGRAPH - 0xDDF3: 0x84B9, //CJK UNIFIED IDEOGRAPH - 0xDDF4: 0x84B4, //CJK UNIFIED IDEOGRAPH - 0xDDF5: 0x8497, //CJK UNIFIED IDEOGRAPH - 0xDDF6: 0x84E5, //CJK UNIFIED IDEOGRAPH - 0xDDF7: 0x84E3, //CJK UNIFIED IDEOGRAPH - 0xDDF8: 0x850C, //CJK UNIFIED IDEOGRAPH - 0xDDF9: 0x750D, //CJK UNIFIED IDEOGRAPH - 0xDDFA: 0x8538, //CJK UNIFIED IDEOGRAPH - 0xDDFB: 0x84F0, //CJK UNIFIED IDEOGRAPH - 0xDDFC: 0x8539, //CJK UNIFIED IDEOGRAPH - 0xDDFD: 0x851F, //CJK UNIFIED IDEOGRAPH - 0xDDFE: 0x853A, //CJK UNIFIED IDEOGRAPH - 0xDE40: 0x8F45, //CJK UNIFIED IDEOGRAPH - 0xDE41: 0x8F46, //CJK UNIFIED IDEOGRAPH - 0xDE42: 0x8F47, //CJK UNIFIED IDEOGRAPH - 0xDE43: 0x8F48, //CJK UNIFIED IDEOGRAPH - 0xDE44: 0x8F49, //CJK UNIFIED IDEOGRAPH - 0xDE45: 0x8F4A, //CJK UNIFIED IDEOGRAPH - 0xDE46: 0x8F4B, //CJK UNIFIED IDEOGRAPH - 0xDE47: 0x8F4C, //CJK UNIFIED IDEOGRAPH - 0xDE48: 0x8F4D, //CJK UNIFIED IDEOGRAPH - 0xDE49: 0x8F4E, //CJK UNIFIED IDEOGRAPH - 0xDE4A: 0x8F4F, //CJK UNIFIED IDEOGRAPH - 0xDE4B: 0x8F50, //CJK UNIFIED IDEOGRAPH - 0xDE4C: 0x8F51, //CJK UNIFIED IDEOGRAPH - 0xDE4D: 0x8F52, //CJK UNIFIED IDEOGRAPH - 0xDE4E: 0x8F53, //CJK UNIFIED IDEOGRAPH - 0xDE4F: 0x8F54, //CJK UNIFIED IDEOGRAPH - 0xDE50: 0x8F55, //CJK UNIFIED IDEOGRAPH - 0xDE51: 0x8F56, //CJK UNIFIED IDEOGRAPH - 0xDE52: 0x8F57, //CJK UNIFIED IDEOGRAPH - 0xDE53: 0x8F58, //CJK UNIFIED IDEOGRAPH - 0xDE54: 0x8F59, //CJK UNIFIED IDEOGRAPH - 0xDE55: 0x8F5A, //CJK UNIFIED IDEOGRAPH - 0xDE56: 0x8F5B, //CJK UNIFIED IDEOGRAPH - 0xDE57: 0x8F5C, //CJK UNIFIED IDEOGRAPH - 0xDE58: 0x8F5D, //CJK UNIFIED IDEOGRAPH - 0xDE59: 0x8F5E, //CJK UNIFIED IDEOGRAPH - 0xDE5A: 0x8F5F, //CJK UNIFIED IDEOGRAPH - 0xDE5B: 0x8F60, //CJK UNIFIED IDEOGRAPH - 0xDE5C: 0x8F61, //CJK UNIFIED IDEOGRAPH - 0xDE5D: 0x8F62, //CJK UNIFIED IDEOGRAPH - 0xDE5E: 0x8F63, //CJK UNIFIED IDEOGRAPH - 0xDE5F: 0x8F64, //CJK UNIFIED IDEOGRAPH - 0xDE60: 0x8F65, //CJK UNIFIED IDEOGRAPH - 0xDE61: 0x8F6A, //CJK UNIFIED IDEOGRAPH - 0xDE62: 0x8F80, //CJK UNIFIED IDEOGRAPH - 0xDE63: 0x8F8C, //CJK UNIFIED IDEOGRAPH - 0xDE64: 0x8F92, //CJK UNIFIED IDEOGRAPH - 0xDE65: 0x8F9D, //CJK UNIFIED IDEOGRAPH - 0xDE66: 0x8FA0, //CJK UNIFIED IDEOGRAPH - 0xDE67: 0x8FA1, //CJK UNIFIED IDEOGRAPH - 0xDE68: 0x8FA2, //CJK UNIFIED IDEOGRAPH - 0xDE69: 0x8FA4, //CJK UNIFIED IDEOGRAPH - 0xDE6A: 0x8FA5, //CJK UNIFIED IDEOGRAPH - 0xDE6B: 0x8FA6, //CJK UNIFIED IDEOGRAPH - 0xDE6C: 0x8FA7, //CJK UNIFIED IDEOGRAPH - 0xDE6D: 0x8FAA, //CJK UNIFIED IDEOGRAPH - 0xDE6E: 0x8FAC, //CJK UNIFIED IDEOGRAPH - 0xDE6F: 0x8FAD, //CJK UNIFIED IDEOGRAPH - 0xDE70: 0x8FAE, //CJK UNIFIED IDEOGRAPH - 0xDE71: 0x8FAF, //CJK UNIFIED IDEOGRAPH - 0xDE72: 0x8FB2, //CJK UNIFIED IDEOGRAPH - 0xDE73: 0x8FB3, //CJK UNIFIED IDEOGRAPH - 0xDE74: 0x8FB4, //CJK UNIFIED IDEOGRAPH - 0xDE75: 0x8FB5, //CJK UNIFIED IDEOGRAPH - 0xDE76: 0x8FB7, //CJK UNIFIED IDEOGRAPH - 0xDE77: 0x8FB8, //CJK UNIFIED IDEOGRAPH - 0xDE78: 0x8FBA, //CJK UNIFIED IDEOGRAPH - 0xDE79: 0x8FBB, //CJK UNIFIED IDEOGRAPH - 0xDE7A: 0x8FBC, //CJK UNIFIED IDEOGRAPH - 0xDE7B: 0x8FBF, //CJK UNIFIED IDEOGRAPH - 0xDE7C: 0x8FC0, //CJK UNIFIED IDEOGRAPH - 0xDE7D: 0x8FC3, //CJK UNIFIED IDEOGRAPH - 0xDE7E: 0x8FC6, //CJK UNIFIED IDEOGRAPH - 0xDE80: 0x8FC9, //CJK UNIFIED IDEOGRAPH - 0xDE81: 0x8FCA, //CJK UNIFIED IDEOGRAPH - 0xDE82: 0x8FCB, //CJK UNIFIED IDEOGRAPH - 0xDE83: 0x8FCC, //CJK UNIFIED IDEOGRAPH - 0xDE84: 0x8FCD, //CJK UNIFIED IDEOGRAPH - 0xDE85: 0x8FCF, //CJK UNIFIED IDEOGRAPH - 0xDE86: 0x8FD2, //CJK UNIFIED IDEOGRAPH - 0xDE87: 0x8FD6, //CJK UNIFIED IDEOGRAPH - 0xDE88: 0x8FD7, //CJK UNIFIED IDEOGRAPH - 0xDE89: 0x8FDA, //CJK UNIFIED IDEOGRAPH - 0xDE8A: 0x8FE0, //CJK UNIFIED IDEOGRAPH - 0xDE8B: 0x8FE1, //CJK UNIFIED IDEOGRAPH - 0xDE8C: 0x8FE3, //CJK UNIFIED IDEOGRAPH - 0xDE8D: 0x8FE7, //CJK UNIFIED IDEOGRAPH - 0xDE8E: 0x8FEC, //CJK UNIFIED IDEOGRAPH - 0xDE8F: 0x8FEF, //CJK UNIFIED IDEOGRAPH - 0xDE90: 0x8FF1, //CJK UNIFIED IDEOGRAPH - 0xDE91: 0x8FF2, //CJK UNIFIED IDEOGRAPH - 0xDE92: 0x8FF4, //CJK UNIFIED IDEOGRAPH - 0xDE93: 0x8FF5, //CJK UNIFIED IDEOGRAPH - 0xDE94: 0x8FF6, //CJK UNIFIED IDEOGRAPH - 0xDE95: 0x8FFA, //CJK UNIFIED IDEOGRAPH - 0xDE96: 0x8FFB, //CJK UNIFIED IDEOGRAPH - 0xDE97: 0x8FFC, //CJK UNIFIED IDEOGRAPH - 0xDE98: 0x8FFE, //CJK UNIFIED IDEOGRAPH - 0xDE99: 0x8FFF, //CJK UNIFIED IDEOGRAPH - 0xDE9A: 0x9007, //CJK UNIFIED IDEOGRAPH - 0xDE9B: 0x9008, //CJK UNIFIED IDEOGRAPH - 0xDE9C: 0x900C, //CJK UNIFIED IDEOGRAPH - 0xDE9D: 0x900E, //CJK UNIFIED IDEOGRAPH - 0xDE9E: 0x9013, //CJK UNIFIED IDEOGRAPH - 0xDE9F: 0x9015, //CJK UNIFIED IDEOGRAPH - 0xDEA0: 0x9018, //CJK UNIFIED IDEOGRAPH - 0xDEA1: 0x8556, //CJK UNIFIED IDEOGRAPH - 0xDEA2: 0x853B, //CJK UNIFIED IDEOGRAPH - 0xDEA3: 0x84FF, //CJK UNIFIED IDEOGRAPH - 0xDEA4: 0x84FC, //CJK UNIFIED IDEOGRAPH - 0xDEA5: 0x8559, //CJK UNIFIED IDEOGRAPH - 0xDEA6: 0x8548, //CJK UNIFIED IDEOGRAPH - 0xDEA7: 0x8568, //CJK UNIFIED IDEOGRAPH - 0xDEA8: 0x8564, //CJK UNIFIED IDEOGRAPH - 0xDEA9: 0x855E, //CJK UNIFIED IDEOGRAPH - 0xDEAA: 0x857A, //CJK UNIFIED IDEOGRAPH - 0xDEAB: 0x77A2, //CJK UNIFIED IDEOGRAPH - 0xDEAC: 0x8543, //CJK UNIFIED IDEOGRAPH - 0xDEAD: 0x8572, //CJK UNIFIED IDEOGRAPH - 0xDEAE: 0x857B, //CJK UNIFIED IDEOGRAPH - 0xDEAF: 0x85A4, //CJK UNIFIED IDEOGRAPH - 0xDEB0: 0x85A8, //CJK UNIFIED IDEOGRAPH - 0xDEB1: 0x8587, //CJK UNIFIED IDEOGRAPH - 0xDEB2: 0x858F, //CJK UNIFIED IDEOGRAPH - 0xDEB3: 0x8579, //CJK UNIFIED IDEOGRAPH - 0xDEB4: 0x85AE, //CJK UNIFIED IDEOGRAPH - 0xDEB5: 0x859C, //CJK UNIFIED IDEOGRAPH - 0xDEB6: 0x8585, //CJK UNIFIED IDEOGRAPH - 0xDEB7: 0x85B9, //CJK UNIFIED IDEOGRAPH - 0xDEB8: 0x85B7, //CJK UNIFIED IDEOGRAPH - 0xDEB9: 0x85B0, //CJK UNIFIED IDEOGRAPH - 0xDEBA: 0x85D3, //CJK UNIFIED IDEOGRAPH - 0xDEBB: 0x85C1, //CJK UNIFIED IDEOGRAPH - 0xDEBC: 0x85DC, //CJK UNIFIED IDEOGRAPH - 0xDEBD: 0x85FF, //CJK UNIFIED IDEOGRAPH - 0xDEBE: 0x8627, //CJK UNIFIED IDEOGRAPH - 0xDEBF: 0x8605, //CJK UNIFIED IDEOGRAPH - 0xDEC0: 0x8629, //CJK UNIFIED IDEOGRAPH - 0xDEC1: 0x8616, //CJK UNIFIED IDEOGRAPH - 0xDEC2: 0x863C, //CJK UNIFIED IDEOGRAPH - 0xDEC3: 0x5EFE, //CJK UNIFIED IDEOGRAPH - 0xDEC4: 0x5F08, //CJK UNIFIED IDEOGRAPH - 0xDEC5: 0x593C, //CJK UNIFIED IDEOGRAPH - 0xDEC6: 0x5941, //CJK UNIFIED IDEOGRAPH - 0xDEC7: 0x8037, //CJK UNIFIED IDEOGRAPH - 0xDEC8: 0x5955, //CJK UNIFIED IDEOGRAPH - 0xDEC9: 0x595A, //CJK UNIFIED IDEOGRAPH - 0xDECA: 0x5958, //CJK UNIFIED IDEOGRAPH - 0xDECB: 0x530F, //CJK UNIFIED IDEOGRAPH - 0xDECC: 0x5C22, //CJK UNIFIED IDEOGRAPH - 0xDECD: 0x5C25, //CJK UNIFIED IDEOGRAPH - 0xDECE: 0x5C2C, //CJK UNIFIED IDEOGRAPH - 0xDECF: 0x5C34, //CJK UNIFIED IDEOGRAPH - 0xDED0: 0x624C, //CJK UNIFIED IDEOGRAPH - 0xDED1: 0x626A, //CJK UNIFIED IDEOGRAPH - 0xDED2: 0x629F, //CJK UNIFIED IDEOGRAPH - 0xDED3: 0x62BB, //CJK UNIFIED IDEOGRAPH - 0xDED4: 0x62CA, //CJK UNIFIED IDEOGRAPH - 0xDED5: 0x62DA, //CJK UNIFIED IDEOGRAPH - 0xDED6: 0x62D7, //CJK UNIFIED IDEOGRAPH - 0xDED7: 0x62EE, //CJK UNIFIED IDEOGRAPH - 0xDED8: 0x6322, //CJK UNIFIED IDEOGRAPH - 0xDED9: 0x62F6, //CJK UNIFIED IDEOGRAPH - 0xDEDA: 0x6339, //CJK UNIFIED IDEOGRAPH - 0xDEDB: 0x634B, //CJK UNIFIED IDEOGRAPH - 0xDEDC: 0x6343, //CJK UNIFIED IDEOGRAPH - 0xDEDD: 0x63AD, //CJK UNIFIED IDEOGRAPH - 0xDEDE: 0x63F6, //CJK UNIFIED IDEOGRAPH - 0xDEDF: 0x6371, //CJK UNIFIED IDEOGRAPH - 0xDEE0: 0x637A, //CJK UNIFIED IDEOGRAPH - 0xDEE1: 0x638E, //CJK UNIFIED IDEOGRAPH - 0xDEE2: 0x63B4, //CJK UNIFIED IDEOGRAPH - 0xDEE3: 0x636D, //CJK UNIFIED IDEOGRAPH - 0xDEE4: 0x63AC, //CJK UNIFIED IDEOGRAPH - 0xDEE5: 0x638A, //CJK UNIFIED IDEOGRAPH - 0xDEE6: 0x6369, //CJK UNIFIED IDEOGRAPH - 0xDEE7: 0x63AE, //CJK UNIFIED IDEOGRAPH - 0xDEE8: 0x63BC, //CJK UNIFIED IDEOGRAPH - 0xDEE9: 0x63F2, //CJK UNIFIED IDEOGRAPH - 0xDEEA: 0x63F8, //CJK UNIFIED IDEOGRAPH - 0xDEEB: 0x63E0, //CJK UNIFIED IDEOGRAPH - 0xDEEC: 0x63FF, //CJK UNIFIED IDEOGRAPH - 0xDEED: 0x63C4, //CJK UNIFIED IDEOGRAPH - 0xDEEE: 0x63DE, //CJK UNIFIED IDEOGRAPH - 0xDEEF: 0x63CE, //CJK UNIFIED IDEOGRAPH - 0xDEF0: 0x6452, //CJK UNIFIED IDEOGRAPH - 0xDEF1: 0x63C6, //CJK UNIFIED IDEOGRAPH - 0xDEF2: 0x63BE, //CJK UNIFIED IDEOGRAPH - 0xDEF3: 0x6445, //CJK UNIFIED IDEOGRAPH - 0xDEF4: 0x6441, //CJK UNIFIED IDEOGRAPH - 0xDEF5: 0x640B, //CJK UNIFIED IDEOGRAPH - 0xDEF6: 0x641B, //CJK UNIFIED IDEOGRAPH - 0xDEF7: 0x6420, //CJK UNIFIED IDEOGRAPH - 0xDEF8: 0x640C, //CJK UNIFIED IDEOGRAPH - 0xDEF9: 0x6426, //CJK UNIFIED IDEOGRAPH - 0xDEFA: 0x6421, //CJK UNIFIED IDEOGRAPH - 0xDEFB: 0x645E, //CJK UNIFIED IDEOGRAPH - 0xDEFC: 0x6484, //CJK UNIFIED IDEOGRAPH - 0xDEFD: 0x646D, //CJK UNIFIED IDEOGRAPH - 0xDEFE: 0x6496, //CJK UNIFIED IDEOGRAPH - 0xDF40: 0x9019, //CJK UNIFIED IDEOGRAPH - 0xDF41: 0x901C, //CJK UNIFIED IDEOGRAPH - 0xDF42: 0x9023, //CJK UNIFIED IDEOGRAPH - 0xDF43: 0x9024, //CJK UNIFIED IDEOGRAPH - 0xDF44: 0x9025, //CJK UNIFIED IDEOGRAPH - 0xDF45: 0x9027, //CJK UNIFIED IDEOGRAPH - 0xDF46: 0x9028, //CJK UNIFIED IDEOGRAPH - 0xDF47: 0x9029, //CJK UNIFIED IDEOGRAPH - 0xDF48: 0x902A, //CJK UNIFIED IDEOGRAPH - 0xDF49: 0x902B, //CJK UNIFIED IDEOGRAPH - 0xDF4A: 0x902C, //CJK UNIFIED IDEOGRAPH - 0xDF4B: 0x9030, //CJK UNIFIED IDEOGRAPH - 0xDF4C: 0x9031, //CJK UNIFIED IDEOGRAPH - 0xDF4D: 0x9032, //CJK UNIFIED IDEOGRAPH - 0xDF4E: 0x9033, //CJK UNIFIED IDEOGRAPH - 0xDF4F: 0x9034, //CJK UNIFIED IDEOGRAPH - 0xDF50: 0x9037, //CJK UNIFIED IDEOGRAPH - 0xDF51: 0x9039, //CJK UNIFIED IDEOGRAPH - 0xDF52: 0x903A, //CJK UNIFIED IDEOGRAPH - 0xDF53: 0x903D, //CJK UNIFIED IDEOGRAPH - 0xDF54: 0x903F, //CJK UNIFIED IDEOGRAPH - 0xDF55: 0x9040, //CJK UNIFIED IDEOGRAPH - 0xDF56: 0x9043, //CJK UNIFIED IDEOGRAPH - 0xDF57: 0x9045, //CJK UNIFIED IDEOGRAPH - 0xDF58: 0x9046, //CJK UNIFIED IDEOGRAPH - 0xDF59: 0x9048, //CJK UNIFIED IDEOGRAPH - 0xDF5A: 0x9049, //CJK UNIFIED IDEOGRAPH - 0xDF5B: 0x904A, //CJK UNIFIED IDEOGRAPH - 0xDF5C: 0x904B, //CJK UNIFIED IDEOGRAPH - 0xDF5D: 0x904C, //CJK UNIFIED IDEOGRAPH - 0xDF5E: 0x904E, //CJK UNIFIED IDEOGRAPH - 0xDF5F: 0x9054, //CJK UNIFIED IDEOGRAPH - 0xDF60: 0x9055, //CJK UNIFIED IDEOGRAPH - 0xDF61: 0x9056, //CJK UNIFIED IDEOGRAPH - 0xDF62: 0x9059, //CJK UNIFIED IDEOGRAPH - 0xDF63: 0x905A, //CJK UNIFIED IDEOGRAPH - 0xDF64: 0x905C, //CJK UNIFIED IDEOGRAPH - 0xDF65: 0x905D, //CJK UNIFIED IDEOGRAPH - 0xDF66: 0x905E, //CJK UNIFIED IDEOGRAPH - 0xDF67: 0x905F, //CJK UNIFIED IDEOGRAPH - 0xDF68: 0x9060, //CJK UNIFIED IDEOGRAPH - 0xDF69: 0x9061, //CJK UNIFIED IDEOGRAPH - 0xDF6A: 0x9064, //CJK UNIFIED IDEOGRAPH - 0xDF6B: 0x9066, //CJK UNIFIED IDEOGRAPH - 0xDF6C: 0x9067, //CJK UNIFIED IDEOGRAPH - 0xDF6D: 0x9069, //CJK UNIFIED IDEOGRAPH - 0xDF6E: 0x906A, //CJK UNIFIED IDEOGRAPH - 0xDF6F: 0x906B, //CJK UNIFIED IDEOGRAPH - 0xDF70: 0x906C, //CJK UNIFIED IDEOGRAPH - 0xDF71: 0x906F, //CJK UNIFIED IDEOGRAPH - 0xDF72: 0x9070, //CJK UNIFIED IDEOGRAPH - 0xDF73: 0x9071, //CJK UNIFIED IDEOGRAPH - 0xDF74: 0x9072, //CJK UNIFIED IDEOGRAPH - 0xDF75: 0x9073, //CJK UNIFIED IDEOGRAPH - 0xDF76: 0x9076, //CJK UNIFIED IDEOGRAPH - 0xDF77: 0x9077, //CJK UNIFIED IDEOGRAPH - 0xDF78: 0x9078, //CJK UNIFIED IDEOGRAPH - 0xDF79: 0x9079, //CJK UNIFIED IDEOGRAPH - 0xDF7A: 0x907A, //CJK UNIFIED IDEOGRAPH - 0xDF7B: 0x907B, //CJK UNIFIED IDEOGRAPH - 0xDF7C: 0x907C, //CJK UNIFIED IDEOGRAPH - 0xDF7D: 0x907E, //CJK UNIFIED IDEOGRAPH - 0xDF7E: 0x9081, //CJK UNIFIED IDEOGRAPH - 0xDF80: 0x9084, //CJK UNIFIED IDEOGRAPH - 0xDF81: 0x9085, //CJK UNIFIED IDEOGRAPH - 0xDF82: 0x9086, //CJK UNIFIED IDEOGRAPH - 0xDF83: 0x9087, //CJK UNIFIED IDEOGRAPH - 0xDF84: 0x9089, //CJK UNIFIED IDEOGRAPH - 0xDF85: 0x908A, //CJK UNIFIED IDEOGRAPH - 0xDF86: 0x908C, //CJK UNIFIED IDEOGRAPH - 0xDF87: 0x908D, //CJK UNIFIED IDEOGRAPH - 0xDF88: 0x908E, //CJK UNIFIED IDEOGRAPH - 0xDF89: 0x908F, //CJK UNIFIED IDEOGRAPH - 0xDF8A: 0x9090, //CJK UNIFIED IDEOGRAPH - 0xDF8B: 0x9092, //CJK UNIFIED IDEOGRAPH - 0xDF8C: 0x9094, //CJK UNIFIED IDEOGRAPH - 0xDF8D: 0x9096, //CJK UNIFIED IDEOGRAPH - 0xDF8E: 0x9098, //CJK UNIFIED IDEOGRAPH - 0xDF8F: 0x909A, //CJK UNIFIED IDEOGRAPH - 0xDF90: 0x909C, //CJK UNIFIED IDEOGRAPH - 0xDF91: 0x909E, //CJK UNIFIED IDEOGRAPH - 0xDF92: 0x909F, //CJK UNIFIED IDEOGRAPH - 0xDF93: 0x90A0, //CJK UNIFIED IDEOGRAPH - 0xDF94: 0x90A4, //CJK UNIFIED IDEOGRAPH - 0xDF95: 0x90A5, //CJK UNIFIED IDEOGRAPH - 0xDF96: 0x90A7, //CJK UNIFIED IDEOGRAPH - 0xDF97: 0x90A8, //CJK UNIFIED IDEOGRAPH - 0xDF98: 0x90A9, //CJK UNIFIED IDEOGRAPH - 0xDF99: 0x90AB, //CJK UNIFIED IDEOGRAPH - 0xDF9A: 0x90AD, //CJK UNIFIED IDEOGRAPH - 0xDF9B: 0x90B2, //CJK UNIFIED IDEOGRAPH - 0xDF9C: 0x90B7, //CJK UNIFIED IDEOGRAPH - 0xDF9D: 0x90BC, //CJK UNIFIED IDEOGRAPH - 0xDF9E: 0x90BD, //CJK UNIFIED IDEOGRAPH - 0xDF9F: 0x90BF, //CJK UNIFIED IDEOGRAPH - 0xDFA0: 0x90C0, //CJK UNIFIED IDEOGRAPH - 0xDFA1: 0x647A, //CJK UNIFIED IDEOGRAPH - 0xDFA2: 0x64B7, //CJK UNIFIED IDEOGRAPH - 0xDFA3: 0x64B8, //CJK UNIFIED IDEOGRAPH - 0xDFA4: 0x6499, //CJK UNIFIED IDEOGRAPH - 0xDFA5: 0x64BA, //CJK UNIFIED IDEOGRAPH - 0xDFA6: 0x64C0, //CJK UNIFIED IDEOGRAPH - 0xDFA7: 0x64D0, //CJK UNIFIED IDEOGRAPH - 0xDFA8: 0x64D7, //CJK UNIFIED IDEOGRAPH - 0xDFA9: 0x64E4, //CJK UNIFIED IDEOGRAPH - 0xDFAA: 0x64E2, //CJK UNIFIED IDEOGRAPH - 0xDFAB: 0x6509, //CJK UNIFIED IDEOGRAPH - 0xDFAC: 0x6525, //CJK UNIFIED IDEOGRAPH - 0xDFAD: 0x652E, //CJK UNIFIED IDEOGRAPH - 0xDFAE: 0x5F0B, //CJK UNIFIED IDEOGRAPH - 0xDFAF: 0x5FD2, //CJK UNIFIED IDEOGRAPH - 0xDFB0: 0x7519, //CJK UNIFIED IDEOGRAPH - 0xDFB1: 0x5F11, //CJK UNIFIED IDEOGRAPH - 0xDFB2: 0x535F, //CJK UNIFIED IDEOGRAPH - 0xDFB3: 0x53F1, //CJK UNIFIED IDEOGRAPH - 0xDFB4: 0x53FD, //CJK UNIFIED IDEOGRAPH - 0xDFB5: 0x53E9, //CJK UNIFIED IDEOGRAPH - 0xDFB6: 0x53E8, //CJK UNIFIED IDEOGRAPH - 0xDFB7: 0x53FB, //CJK UNIFIED IDEOGRAPH - 0xDFB8: 0x5412, //CJK UNIFIED IDEOGRAPH - 0xDFB9: 0x5416, //CJK UNIFIED IDEOGRAPH - 0xDFBA: 0x5406, //CJK UNIFIED IDEOGRAPH - 0xDFBB: 0x544B, //CJK UNIFIED IDEOGRAPH - 0xDFBC: 0x5452, //CJK UNIFIED IDEOGRAPH - 0xDFBD: 0x5453, //CJK UNIFIED IDEOGRAPH - 0xDFBE: 0x5454, //CJK UNIFIED IDEOGRAPH - 0xDFBF: 0x5456, //CJK UNIFIED IDEOGRAPH - 0xDFC0: 0x5443, //CJK UNIFIED IDEOGRAPH - 0xDFC1: 0x5421, //CJK UNIFIED IDEOGRAPH - 0xDFC2: 0x5457, //CJK UNIFIED IDEOGRAPH - 0xDFC3: 0x5459, //CJK UNIFIED IDEOGRAPH - 0xDFC4: 0x5423, //CJK UNIFIED IDEOGRAPH - 0xDFC5: 0x5432, //CJK UNIFIED IDEOGRAPH - 0xDFC6: 0x5482, //CJK UNIFIED IDEOGRAPH - 0xDFC7: 0x5494, //CJK UNIFIED IDEOGRAPH - 0xDFC8: 0x5477, //CJK UNIFIED IDEOGRAPH - 0xDFC9: 0x5471, //CJK UNIFIED IDEOGRAPH - 0xDFCA: 0x5464, //CJK UNIFIED IDEOGRAPH - 0xDFCB: 0x549A, //CJK UNIFIED IDEOGRAPH - 0xDFCC: 0x549B, //CJK UNIFIED IDEOGRAPH - 0xDFCD: 0x5484, //CJK UNIFIED IDEOGRAPH - 0xDFCE: 0x5476, //CJK UNIFIED IDEOGRAPH - 0xDFCF: 0x5466, //CJK UNIFIED IDEOGRAPH - 0xDFD0: 0x549D, //CJK UNIFIED IDEOGRAPH - 0xDFD1: 0x54D0, //CJK UNIFIED IDEOGRAPH - 0xDFD2: 0x54AD, //CJK UNIFIED IDEOGRAPH - 0xDFD3: 0x54C2, //CJK UNIFIED IDEOGRAPH - 0xDFD4: 0x54B4, //CJK UNIFIED IDEOGRAPH - 0xDFD5: 0x54D2, //CJK UNIFIED IDEOGRAPH - 0xDFD6: 0x54A7, //CJK UNIFIED IDEOGRAPH - 0xDFD7: 0x54A6, //CJK UNIFIED IDEOGRAPH - 0xDFD8: 0x54D3, //CJK UNIFIED IDEOGRAPH - 0xDFD9: 0x54D4, //CJK UNIFIED IDEOGRAPH - 0xDFDA: 0x5472, //CJK UNIFIED IDEOGRAPH - 0xDFDB: 0x54A3, //CJK UNIFIED IDEOGRAPH - 0xDFDC: 0x54D5, //CJK UNIFIED IDEOGRAPH - 0xDFDD: 0x54BB, //CJK UNIFIED IDEOGRAPH - 0xDFDE: 0x54BF, //CJK UNIFIED IDEOGRAPH - 0xDFDF: 0x54CC, //CJK UNIFIED IDEOGRAPH - 0xDFE0: 0x54D9, //CJK UNIFIED IDEOGRAPH - 0xDFE1: 0x54DA, //CJK UNIFIED IDEOGRAPH - 0xDFE2: 0x54DC, //CJK UNIFIED IDEOGRAPH - 0xDFE3: 0x54A9, //CJK UNIFIED IDEOGRAPH - 0xDFE4: 0x54AA, //CJK UNIFIED IDEOGRAPH - 0xDFE5: 0x54A4, //CJK UNIFIED IDEOGRAPH - 0xDFE6: 0x54DD, //CJK UNIFIED IDEOGRAPH - 0xDFE7: 0x54CF, //CJK UNIFIED IDEOGRAPH - 0xDFE8: 0x54DE, //CJK UNIFIED IDEOGRAPH - 0xDFE9: 0x551B, //CJK UNIFIED IDEOGRAPH - 0xDFEA: 0x54E7, //CJK UNIFIED IDEOGRAPH - 0xDFEB: 0x5520, //CJK UNIFIED IDEOGRAPH - 0xDFEC: 0x54FD, //CJK UNIFIED IDEOGRAPH - 0xDFED: 0x5514, //CJK UNIFIED IDEOGRAPH - 0xDFEE: 0x54F3, //CJK UNIFIED IDEOGRAPH - 0xDFEF: 0x5522, //CJK UNIFIED IDEOGRAPH - 0xDFF0: 0x5523, //CJK UNIFIED IDEOGRAPH - 0xDFF1: 0x550F, //CJK UNIFIED IDEOGRAPH - 0xDFF2: 0x5511, //CJK UNIFIED IDEOGRAPH - 0xDFF3: 0x5527, //CJK UNIFIED IDEOGRAPH - 0xDFF4: 0x552A, //CJK UNIFIED IDEOGRAPH - 0xDFF5: 0x5567, //CJK UNIFIED IDEOGRAPH - 0xDFF6: 0x558F, //CJK UNIFIED IDEOGRAPH - 0xDFF7: 0x55B5, //CJK UNIFIED IDEOGRAPH - 0xDFF8: 0x5549, //CJK UNIFIED IDEOGRAPH - 0xDFF9: 0x556D, //CJK UNIFIED IDEOGRAPH - 0xDFFA: 0x5541, //CJK UNIFIED IDEOGRAPH - 0xDFFB: 0x5555, //CJK UNIFIED IDEOGRAPH - 0xDFFC: 0x553F, //CJK UNIFIED IDEOGRAPH - 0xDFFD: 0x5550, //CJK UNIFIED IDEOGRAPH - 0xDFFE: 0x553C, //CJK UNIFIED IDEOGRAPH - 0xE040: 0x90C2, //CJK UNIFIED IDEOGRAPH - 0xE041: 0x90C3, //CJK UNIFIED IDEOGRAPH - 0xE042: 0x90C6, //CJK UNIFIED IDEOGRAPH - 0xE043: 0x90C8, //CJK UNIFIED IDEOGRAPH - 0xE044: 0x90C9, //CJK UNIFIED IDEOGRAPH - 0xE045: 0x90CB, //CJK UNIFIED IDEOGRAPH - 0xE046: 0x90CC, //CJK UNIFIED IDEOGRAPH - 0xE047: 0x90CD, //CJK UNIFIED IDEOGRAPH - 0xE048: 0x90D2, //CJK UNIFIED IDEOGRAPH - 0xE049: 0x90D4, //CJK UNIFIED IDEOGRAPH - 0xE04A: 0x90D5, //CJK UNIFIED IDEOGRAPH - 0xE04B: 0x90D6, //CJK UNIFIED IDEOGRAPH - 0xE04C: 0x90D8, //CJK UNIFIED IDEOGRAPH - 0xE04D: 0x90D9, //CJK UNIFIED IDEOGRAPH - 0xE04E: 0x90DA, //CJK UNIFIED IDEOGRAPH - 0xE04F: 0x90DE, //CJK UNIFIED IDEOGRAPH - 0xE050: 0x90DF, //CJK UNIFIED IDEOGRAPH - 0xE051: 0x90E0, //CJK UNIFIED IDEOGRAPH - 0xE052: 0x90E3, //CJK UNIFIED IDEOGRAPH - 0xE053: 0x90E4, //CJK UNIFIED IDEOGRAPH - 0xE054: 0x90E5, //CJK UNIFIED IDEOGRAPH - 0xE055: 0x90E9, //CJK UNIFIED IDEOGRAPH - 0xE056: 0x90EA, //CJK UNIFIED IDEOGRAPH - 0xE057: 0x90EC, //CJK UNIFIED IDEOGRAPH - 0xE058: 0x90EE, //CJK UNIFIED IDEOGRAPH - 0xE059: 0x90F0, //CJK UNIFIED IDEOGRAPH - 0xE05A: 0x90F1, //CJK UNIFIED IDEOGRAPH - 0xE05B: 0x90F2, //CJK UNIFIED IDEOGRAPH - 0xE05C: 0x90F3, //CJK UNIFIED IDEOGRAPH - 0xE05D: 0x90F5, //CJK UNIFIED IDEOGRAPH - 0xE05E: 0x90F6, //CJK UNIFIED IDEOGRAPH - 0xE05F: 0x90F7, //CJK UNIFIED IDEOGRAPH - 0xE060: 0x90F9, //CJK UNIFIED IDEOGRAPH - 0xE061: 0x90FA, //CJK UNIFIED IDEOGRAPH - 0xE062: 0x90FB, //CJK UNIFIED IDEOGRAPH - 0xE063: 0x90FC, //CJK UNIFIED IDEOGRAPH - 0xE064: 0x90FF, //CJK UNIFIED IDEOGRAPH - 0xE065: 0x9100, //CJK UNIFIED IDEOGRAPH - 0xE066: 0x9101, //CJK UNIFIED IDEOGRAPH - 0xE067: 0x9103, //CJK UNIFIED IDEOGRAPH - 0xE068: 0x9105, //CJK UNIFIED IDEOGRAPH - 0xE069: 0x9106, //CJK UNIFIED IDEOGRAPH - 0xE06A: 0x9107, //CJK UNIFIED IDEOGRAPH - 0xE06B: 0x9108, //CJK UNIFIED IDEOGRAPH - 0xE06C: 0x9109, //CJK UNIFIED IDEOGRAPH - 0xE06D: 0x910A, //CJK UNIFIED IDEOGRAPH - 0xE06E: 0x910B, //CJK UNIFIED IDEOGRAPH - 0xE06F: 0x910C, //CJK UNIFIED IDEOGRAPH - 0xE070: 0x910D, //CJK UNIFIED IDEOGRAPH - 0xE071: 0x910E, //CJK UNIFIED IDEOGRAPH - 0xE072: 0x910F, //CJK UNIFIED IDEOGRAPH - 0xE073: 0x9110, //CJK UNIFIED IDEOGRAPH - 0xE074: 0x9111, //CJK UNIFIED IDEOGRAPH - 0xE075: 0x9112, //CJK UNIFIED IDEOGRAPH - 0xE076: 0x9113, //CJK UNIFIED IDEOGRAPH - 0xE077: 0x9114, //CJK UNIFIED IDEOGRAPH - 0xE078: 0x9115, //CJK UNIFIED IDEOGRAPH - 0xE079: 0x9116, //CJK UNIFIED IDEOGRAPH - 0xE07A: 0x9117, //CJK UNIFIED IDEOGRAPH - 0xE07B: 0x9118, //CJK UNIFIED IDEOGRAPH - 0xE07C: 0x911A, //CJK UNIFIED IDEOGRAPH - 0xE07D: 0x911B, //CJK UNIFIED IDEOGRAPH - 0xE07E: 0x911C, //CJK UNIFIED IDEOGRAPH - 0xE080: 0x911D, //CJK UNIFIED IDEOGRAPH - 0xE081: 0x911F, //CJK UNIFIED IDEOGRAPH - 0xE082: 0x9120, //CJK UNIFIED IDEOGRAPH - 0xE083: 0x9121, //CJK UNIFIED IDEOGRAPH - 0xE084: 0x9124, //CJK UNIFIED IDEOGRAPH - 0xE085: 0x9125, //CJK UNIFIED IDEOGRAPH - 0xE086: 0x9126, //CJK UNIFIED IDEOGRAPH - 0xE087: 0x9127, //CJK UNIFIED IDEOGRAPH - 0xE088: 0x9128, //CJK UNIFIED IDEOGRAPH - 0xE089: 0x9129, //CJK UNIFIED IDEOGRAPH - 0xE08A: 0x912A, //CJK UNIFIED IDEOGRAPH - 0xE08B: 0x912B, //CJK UNIFIED IDEOGRAPH - 0xE08C: 0x912C, //CJK UNIFIED IDEOGRAPH - 0xE08D: 0x912D, //CJK UNIFIED IDEOGRAPH - 0xE08E: 0x912E, //CJK UNIFIED IDEOGRAPH - 0xE08F: 0x9130, //CJK UNIFIED IDEOGRAPH - 0xE090: 0x9132, //CJK UNIFIED IDEOGRAPH - 0xE091: 0x9133, //CJK UNIFIED IDEOGRAPH - 0xE092: 0x9134, //CJK UNIFIED IDEOGRAPH - 0xE093: 0x9135, //CJK UNIFIED IDEOGRAPH - 0xE094: 0x9136, //CJK UNIFIED IDEOGRAPH - 0xE095: 0x9137, //CJK UNIFIED IDEOGRAPH - 0xE096: 0x9138, //CJK UNIFIED IDEOGRAPH - 0xE097: 0x913A, //CJK UNIFIED IDEOGRAPH - 0xE098: 0x913B, //CJK UNIFIED IDEOGRAPH - 0xE099: 0x913C, //CJK UNIFIED IDEOGRAPH - 0xE09A: 0x913D, //CJK UNIFIED IDEOGRAPH - 0xE09B: 0x913E, //CJK UNIFIED IDEOGRAPH - 0xE09C: 0x913F, //CJK UNIFIED IDEOGRAPH - 0xE09D: 0x9140, //CJK UNIFIED IDEOGRAPH - 0xE09E: 0x9141, //CJK UNIFIED IDEOGRAPH - 0xE09F: 0x9142, //CJK UNIFIED IDEOGRAPH - 0xE0A0: 0x9144, //CJK UNIFIED IDEOGRAPH - 0xE0A1: 0x5537, //CJK UNIFIED IDEOGRAPH - 0xE0A2: 0x5556, //CJK UNIFIED IDEOGRAPH - 0xE0A3: 0x5575, //CJK UNIFIED IDEOGRAPH - 0xE0A4: 0x5576, //CJK UNIFIED IDEOGRAPH - 0xE0A5: 0x5577, //CJK UNIFIED IDEOGRAPH - 0xE0A6: 0x5533, //CJK UNIFIED IDEOGRAPH - 0xE0A7: 0x5530, //CJK UNIFIED IDEOGRAPH - 0xE0A8: 0x555C, //CJK UNIFIED IDEOGRAPH - 0xE0A9: 0x558B, //CJK UNIFIED IDEOGRAPH - 0xE0AA: 0x55D2, //CJK UNIFIED IDEOGRAPH - 0xE0AB: 0x5583, //CJK UNIFIED IDEOGRAPH - 0xE0AC: 0x55B1, //CJK UNIFIED IDEOGRAPH - 0xE0AD: 0x55B9, //CJK UNIFIED IDEOGRAPH - 0xE0AE: 0x5588, //CJK UNIFIED IDEOGRAPH - 0xE0AF: 0x5581, //CJK UNIFIED IDEOGRAPH - 0xE0B0: 0x559F, //CJK UNIFIED IDEOGRAPH - 0xE0B1: 0x557E, //CJK UNIFIED IDEOGRAPH - 0xE0B2: 0x55D6, //CJK UNIFIED IDEOGRAPH - 0xE0B3: 0x5591, //CJK UNIFIED IDEOGRAPH - 0xE0B4: 0x557B, //CJK UNIFIED IDEOGRAPH - 0xE0B5: 0x55DF, //CJK UNIFIED IDEOGRAPH - 0xE0B6: 0x55BD, //CJK UNIFIED IDEOGRAPH - 0xE0B7: 0x55BE, //CJK UNIFIED IDEOGRAPH - 0xE0B8: 0x5594, //CJK UNIFIED IDEOGRAPH - 0xE0B9: 0x5599, //CJK UNIFIED IDEOGRAPH - 0xE0BA: 0x55EA, //CJK UNIFIED IDEOGRAPH - 0xE0BB: 0x55F7, //CJK UNIFIED IDEOGRAPH - 0xE0BC: 0x55C9, //CJK UNIFIED IDEOGRAPH - 0xE0BD: 0x561F, //CJK UNIFIED IDEOGRAPH - 0xE0BE: 0x55D1, //CJK UNIFIED IDEOGRAPH - 0xE0BF: 0x55EB, //CJK UNIFIED IDEOGRAPH - 0xE0C0: 0x55EC, //CJK UNIFIED IDEOGRAPH - 0xE0C1: 0x55D4, //CJK UNIFIED IDEOGRAPH - 0xE0C2: 0x55E6, //CJK UNIFIED IDEOGRAPH - 0xE0C3: 0x55DD, //CJK UNIFIED IDEOGRAPH - 0xE0C4: 0x55C4, //CJK UNIFIED IDEOGRAPH - 0xE0C5: 0x55EF, //CJK UNIFIED IDEOGRAPH - 0xE0C6: 0x55E5, //CJK UNIFIED IDEOGRAPH - 0xE0C7: 0x55F2, //CJK UNIFIED IDEOGRAPH - 0xE0C8: 0x55F3, //CJK UNIFIED IDEOGRAPH - 0xE0C9: 0x55CC, //CJK UNIFIED IDEOGRAPH - 0xE0CA: 0x55CD, //CJK UNIFIED IDEOGRAPH - 0xE0CB: 0x55E8, //CJK UNIFIED IDEOGRAPH - 0xE0CC: 0x55F5, //CJK UNIFIED IDEOGRAPH - 0xE0CD: 0x55E4, //CJK UNIFIED IDEOGRAPH - 0xE0CE: 0x8F94, //CJK UNIFIED IDEOGRAPH - 0xE0CF: 0x561E, //CJK UNIFIED IDEOGRAPH - 0xE0D0: 0x5608, //CJK UNIFIED IDEOGRAPH - 0xE0D1: 0x560C, //CJK UNIFIED IDEOGRAPH - 0xE0D2: 0x5601, //CJK UNIFIED IDEOGRAPH - 0xE0D3: 0x5624, //CJK UNIFIED IDEOGRAPH - 0xE0D4: 0x5623, //CJK UNIFIED IDEOGRAPH - 0xE0D5: 0x55FE, //CJK UNIFIED IDEOGRAPH - 0xE0D6: 0x5600, //CJK UNIFIED IDEOGRAPH - 0xE0D7: 0x5627, //CJK UNIFIED IDEOGRAPH - 0xE0D8: 0x562D, //CJK UNIFIED IDEOGRAPH - 0xE0D9: 0x5658, //CJK UNIFIED IDEOGRAPH - 0xE0DA: 0x5639, //CJK UNIFIED IDEOGRAPH - 0xE0DB: 0x5657, //CJK UNIFIED IDEOGRAPH - 0xE0DC: 0x562C, //CJK UNIFIED IDEOGRAPH - 0xE0DD: 0x564D, //CJK UNIFIED IDEOGRAPH - 0xE0DE: 0x5662, //CJK UNIFIED IDEOGRAPH - 0xE0DF: 0x5659, //CJK UNIFIED IDEOGRAPH - 0xE0E0: 0x565C, //CJK UNIFIED IDEOGRAPH - 0xE0E1: 0x564C, //CJK UNIFIED IDEOGRAPH - 0xE0E2: 0x5654, //CJK UNIFIED IDEOGRAPH - 0xE0E3: 0x5686, //CJK UNIFIED IDEOGRAPH - 0xE0E4: 0x5664, //CJK UNIFIED IDEOGRAPH - 0xE0E5: 0x5671, //CJK UNIFIED IDEOGRAPH - 0xE0E6: 0x566B, //CJK UNIFIED IDEOGRAPH - 0xE0E7: 0x567B, //CJK UNIFIED IDEOGRAPH - 0xE0E8: 0x567C, //CJK UNIFIED IDEOGRAPH - 0xE0E9: 0x5685, //CJK UNIFIED IDEOGRAPH - 0xE0EA: 0x5693, //CJK UNIFIED IDEOGRAPH - 0xE0EB: 0x56AF, //CJK UNIFIED IDEOGRAPH - 0xE0EC: 0x56D4, //CJK UNIFIED IDEOGRAPH - 0xE0ED: 0x56D7, //CJK UNIFIED IDEOGRAPH - 0xE0EE: 0x56DD, //CJK UNIFIED IDEOGRAPH - 0xE0EF: 0x56E1, //CJK UNIFIED IDEOGRAPH - 0xE0F0: 0x56F5, //CJK UNIFIED IDEOGRAPH - 0xE0F1: 0x56EB, //CJK UNIFIED IDEOGRAPH - 0xE0F2: 0x56F9, //CJK UNIFIED IDEOGRAPH - 0xE0F3: 0x56FF, //CJK UNIFIED IDEOGRAPH - 0xE0F4: 0x5704, //CJK UNIFIED IDEOGRAPH - 0xE0F5: 0x570A, //CJK UNIFIED IDEOGRAPH - 0xE0F6: 0x5709, //CJK UNIFIED IDEOGRAPH - 0xE0F7: 0x571C, //CJK UNIFIED IDEOGRAPH - 0xE0F8: 0x5E0F, //CJK UNIFIED IDEOGRAPH - 0xE0F9: 0x5E19, //CJK UNIFIED IDEOGRAPH - 0xE0FA: 0x5E14, //CJK UNIFIED IDEOGRAPH - 0xE0FB: 0x5E11, //CJK UNIFIED IDEOGRAPH - 0xE0FC: 0x5E31, //CJK UNIFIED IDEOGRAPH - 0xE0FD: 0x5E3B, //CJK UNIFIED IDEOGRAPH - 0xE0FE: 0x5E3C, //CJK UNIFIED IDEOGRAPH - 0xE140: 0x9145, //CJK UNIFIED IDEOGRAPH - 0xE141: 0x9147, //CJK UNIFIED IDEOGRAPH - 0xE142: 0x9148, //CJK UNIFIED IDEOGRAPH - 0xE143: 0x9151, //CJK UNIFIED IDEOGRAPH - 0xE144: 0x9153, //CJK UNIFIED IDEOGRAPH - 0xE145: 0x9154, //CJK UNIFIED IDEOGRAPH - 0xE146: 0x9155, //CJK UNIFIED IDEOGRAPH - 0xE147: 0x9156, //CJK UNIFIED IDEOGRAPH - 0xE148: 0x9158, //CJK UNIFIED IDEOGRAPH - 0xE149: 0x9159, //CJK UNIFIED IDEOGRAPH - 0xE14A: 0x915B, //CJK UNIFIED IDEOGRAPH - 0xE14B: 0x915C, //CJK UNIFIED IDEOGRAPH - 0xE14C: 0x915F, //CJK UNIFIED IDEOGRAPH - 0xE14D: 0x9160, //CJK UNIFIED IDEOGRAPH - 0xE14E: 0x9166, //CJK UNIFIED IDEOGRAPH - 0xE14F: 0x9167, //CJK UNIFIED IDEOGRAPH - 0xE150: 0x9168, //CJK UNIFIED IDEOGRAPH - 0xE151: 0x916B, //CJK UNIFIED IDEOGRAPH - 0xE152: 0x916D, //CJK UNIFIED IDEOGRAPH - 0xE153: 0x9173, //CJK UNIFIED IDEOGRAPH - 0xE154: 0x917A, //CJK UNIFIED IDEOGRAPH - 0xE155: 0x917B, //CJK UNIFIED IDEOGRAPH - 0xE156: 0x917C, //CJK UNIFIED IDEOGRAPH - 0xE157: 0x9180, //CJK UNIFIED IDEOGRAPH - 0xE158: 0x9181, //CJK UNIFIED IDEOGRAPH - 0xE159: 0x9182, //CJK UNIFIED IDEOGRAPH - 0xE15A: 0x9183, //CJK UNIFIED IDEOGRAPH - 0xE15B: 0x9184, //CJK UNIFIED IDEOGRAPH - 0xE15C: 0x9186, //CJK UNIFIED IDEOGRAPH - 0xE15D: 0x9188, //CJK UNIFIED IDEOGRAPH - 0xE15E: 0x918A, //CJK UNIFIED IDEOGRAPH - 0xE15F: 0x918E, //CJK UNIFIED IDEOGRAPH - 0xE160: 0x918F, //CJK UNIFIED IDEOGRAPH - 0xE161: 0x9193, //CJK UNIFIED IDEOGRAPH - 0xE162: 0x9194, //CJK UNIFIED IDEOGRAPH - 0xE163: 0x9195, //CJK UNIFIED IDEOGRAPH - 0xE164: 0x9196, //CJK UNIFIED IDEOGRAPH - 0xE165: 0x9197, //CJK UNIFIED IDEOGRAPH - 0xE166: 0x9198, //CJK UNIFIED IDEOGRAPH - 0xE167: 0x9199, //CJK UNIFIED IDEOGRAPH - 0xE168: 0x919C, //CJK UNIFIED IDEOGRAPH - 0xE169: 0x919D, //CJK UNIFIED IDEOGRAPH - 0xE16A: 0x919E, //CJK UNIFIED IDEOGRAPH - 0xE16B: 0x919F, //CJK UNIFIED IDEOGRAPH - 0xE16C: 0x91A0, //CJK UNIFIED IDEOGRAPH - 0xE16D: 0x91A1, //CJK UNIFIED IDEOGRAPH - 0xE16E: 0x91A4, //CJK UNIFIED IDEOGRAPH - 0xE16F: 0x91A5, //CJK UNIFIED IDEOGRAPH - 0xE170: 0x91A6, //CJK UNIFIED IDEOGRAPH - 0xE171: 0x91A7, //CJK UNIFIED IDEOGRAPH - 0xE172: 0x91A8, //CJK UNIFIED IDEOGRAPH - 0xE173: 0x91A9, //CJK UNIFIED IDEOGRAPH - 0xE174: 0x91AB, //CJK UNIFIED IDEOGRAPH - 0xE175: 0x91AC, //CJK UNIFIED IDEOGRAPH - 0xE176: 0x91B0, //CJK UNIFIED IDEOGRAPH - 0xE177: 0x91B1, //CJK UNIFIED IDEOGRAPH - 0xE178: 0x91B2, //CJK UNIFIED IDEOGRAPH - 0xE179: 0x91B3, //CJK UNIFIED IDEOGRAPH - 0xE17A: 0x91B6, //CJK UNIFIED IDEOGRAPH - 0xE17B: 0x91B7, //CJK UNIFIED IDEOGRAPH - 0xE17C: 0x91B8, //CJK UNIFIED IDEOGRAPH - 0xE17D: 0x91B9, //CJK UNIFIED IDEOGRAPH - 0xE17E: 0x91BB, //CJK UNIFIED IDEOGRAPH - 0xE180: 0x91BC, //CJK UNIFIED IDEOGRAPH - 0xE181: 0x91BD, //CJK UNIFIED IDEOGRAPH - 0xE182: 0x91BE, //CJK UNIFIED IDEOGRAPH - 0xE183: 0x91BF, //CJK UNIFIED IDEOGRAPH - 0xE184: 0x91C0, //CJK UNIFIED IDEOGRAPH - 0xE185: 0x91C1, //CJK UNIFIED IDEOGRAPH - 0xE186: 0x91C2, //CJK UNIFIED IDEOGRAPH - 0xE187: 0x91C3, //CJK UNIFIED IDEOGRAPH - 0xE188: 0x91C4, //CJK UNIFIED IDEOGRAPH - 0xE189: 0x91C5, //CJK UNIFIED IDEOGRAPH - 0xE18A: 0x91C6, //CJK UNIFIED IDEOGRAPH - 0xE18B: 0x91C8, //CJK UNIFIED IDEOGRAPH - 0xE18C: 0x91CB, //CJK UNIFIED IDEOGRAPH - 0xE18D: 0x91D0, //CJK UNIFIED IDEOGRAPH - 0xE18E: 0x91D2, //CJK UNIFIED IDEOGRAPH - 0xE18F: 0x91D3, //CJK UNIFIED IDEOGRAPH - 0xE190: 0x91D4, //CJK UNIFIED IDEOGRAPH - 0xE191: 0x91D5, //CJK UNIFIED IDEOGRAPH - 0xE192: 0x91D6, //CJK UNIFIED IDEOGRAPH - 0xE193: 0x91D7, //CJK UNIFIED IDEOGRAPH - 0xE194: 0x91D8, //CJK UNIFIED IDEOGRAPH - 0xE195: 0x91D9, //CJK UNIFIED IDEOGRAPH - 0xE196: 0x91DA, //CJK UNIFIED IDEOGRAPH - 0xE197: 0x91DB, //CJK UNIFIED IDEOGRAPH - 0xE198: 0x91DD, //CJK UNIFIED IDEOGRAPH - 0xE199: 0x91DE, //CJK UNIFIED IDEOGRAPH - 0xE19A: 0x91DF, //CJK UNIFIED IDEOGRAPH - 0xE19B: 0x91E0, //CJK UNIFIED IDEOGRAPH - 0xE19C: 0x91E1, //CJK UNIFIED IDEOGRAPH - 0xE19D: 0x91E2, //CJK UNIFIED IDEOGRAPH - 0xE19E: 0x91E3, //CJK UNIFIED IDEOGRAPH - 0xE19F: 0x91E4, //CJK UNIFIED IDEOGRAPH - 0xE1A0: 0x91E5, //CJK UNIFIED IDEOGRAPH - 0xE1A1: 0x5E37, //CJK UNIFIED IDEOGRAPH - 0xE1A2: 0x5E44, //CJK UNIFIED IDEOGRAPH - 0xE1A3: 0x5E54, //CJK UNIFIED IDEOGRAPH - 0xE1A4: 0x5E5B, //CJK UNIFIED IDEOGRAPH - 0xE1A5: 0x5E5E, //CJK UNIFIED IDEOGRAPH - 0xE1A6: 0x5E61, //CJK UNIFIED IDEOGRAPH - 0xE1A7: 0x5C8C, //CJK UNIFIED IDEOGRAPH - 0xE1A8: 0x5C7A, //CJK UNIFIED IDEOGRAPH - 0xE1A9: 0x5C8D, //CJK UNIFIED IDEOGRAPH - 0xE1AA: 0x5C90, //CJK UNIFIED IDEOGRAPH - 0xE1AB: 0x5C96, //CJK UNIFIED IDEOGRAPH - 0xE1AC: 0x5C88, //CJK UNIFIED IDEOGRAPH - 0xE1AD: 0x5C98, //CJK UNIFIED IDEOGRAPH - 0xE1AE: 0x5C99, //CJK UNIFIED IDEOGRAPH - 0xE1AF: 0x5C91, //CJK UNIFIED IDEOGRAPH - 0xE1B0: 0x5C9A, //CJK UNIFIED IDEOGRAPH - 0xE1B1: 0x5C9C, //CJK UNIFIED IDEOGRAPH - 0xE1B2: 0x5CB5, //CJK UNIFIED IDEOGRAPH - 0xE1B3: 0x5CA2, //CJK UNIFIED IDEOGRAPH - 0xE1B4: 0x5CBD, //CJK UNIFIED IDEOGRAPH - 0xE1B5: 0x5CAC, //CJK UNIFIED IDEOGRAPH - 0xE1B6: 0x5CAB, //CJK UNIFIED IDEOGRAPH - 0xE1B7: 0x5CB1, //CJK UNIFIED IDEOGRAPH - 0xE1B8: 0x5CA3, //CJK UNIFIED IDEOGRAPH - 0xE1B9: 0x5CC1, //CJK UNIFIED IDEOGRAPH - 0xE1BA: 0x5CB7, //CJK UNIFIED IDEOGRAPH - 0xE1BB: 0x5CC4, //CJK UNIFIED IDEOGRAPH - 0xE1BC: 0x5CD2, //CJK UNIFIED IDEOGRAPH - 0xE1BD: 0x5CE4, //CJK UNIFIED IDEOGRAPH - 0xE1BE: 0x5CCB, //CJK UNIFIED IDEOGRAPH - 0xE1BF: 0x5CE5, //CJK UNIFIED IDEOGRAPH - 0xE1C0: 0x5D02, //CJK UNIFIED IDEOGRAPH - 0xE1C1: 0x5D03, //CJK UNIFIED IDEOGRAPH - 0xE1C2: 0x5D27, //CJK UNIFIED IDEOGRAPH - 0xE1C3: 0x5D26, //CJK UNIFIED IDEOGRAPH - 0xE1C4: 0x5D2E, //CJK UNIFIED IDEOGRAPH - 0xE1C5: 0x5D24, //CJK UNIFIED IDEOGRAPH - 0xE1C6: 0x5D1E, //CJK UNIFIED IDEOGRAPH - 0xE1C7: 0x5D06, //CJK UNIFIED IDEOGRAPH - 0xE1C8: 0x5D1B, //CJK UNIFIED IDEOGRAPH - 0xE1C9: 0x5D58, //CJK UNIFIED IDEOGRAPH - 0xE1CA: 0x5D3E, //CJK UNIFIED IDEOGRAPH - 0xE1CB: 0x5D34, //CJK UNIFIED IDEOGRAPH - 0xE1CC: 0x5D3D, //CJK UNIFIED IDEOGRAPH - 0xE1CD: 0x5D6C, //CJK UNIFIED IDEOGRAPH - 0xE1CE: 0x5D5B, //CJK UNIFIED IDEOGRAPH - 0xE1CF: 0x5D6F, //CJK UNIFIED IDEOGRAPH - 0xE1D0: 0x5D5D, //CJK UNIFIED IDEOGRAPH - 0xE1D1: 0x5D6B, //CJK UNIFIED IDEOGRAPH - 0xE1D2: 0x5D4B, //CJK UNIFIED IDEOGRAPH - 0xE1D3: 0x5D4A, //CJK UNIFIED IDEOGRAPH - 0xE1D4: 0x5D69, //CJK UNIFIED IDEOGRAPH - 0xE1D5: 0x5D74, //CJK UNIFIED IDEOGRAPH - 0xE1D6: 0x5D82, //CJK UNIFIED IDEOGRAPH - 0xE1D7: 0x5D99, //CJK UNIFIED IDEOGRAPH - 0xE1D8: 0x5D9D, //CJK UNIFIED IDEOGRAPH - 0xE1D9: 0x8C73, //CJK UNIFIED IDEOGRAPH - 0xE1DA: 0x5DB7, //CJK UNIFIED IDEOGRAPH - 0xE1DB: 0x5DC5, //CJK UNIFIED IDEOGRAPH - 0xE1DC: 0x5F73, //CJK UNIFIED IDEOGRAPH - 0xE1DD: 0x5F77, //CJK UNIFIED IDEOGRAPH - 0xE1DE: 0x5F82, //CJK UNIFIED IDEOGRAPH - 0xE1DF: 0x5F87, //CJK UNIFIED IDEOGRAPH - 0xE1E0: 0x5F89, //CJK UNIFIED IDEOGRAPH - 0xE1E1: 0x5F8C, //CJK UNIFIED IDEOGRAPH - 0xE1E2: 0x5F95, //CJK UNIFIED IDEOGRAPH - 0xE1E3: 0x5F99, //CJK UNIFIED IDEOGRAPH - 0xE1E4: 0x5F9C, //CJK UNIFIED IDEOGRAPH - 0xE1E5: 0x5FA8, //CJK UNIFIED IDEOGRAPH - 0xE1E6: 0x5FAD, //CJK UNIFIED IDEOGRAPH - 0xE1E7: 0x5FB5, //CJK UNIFIED IDEOGRAPH - 0xE1E8: 0x5FBC, //CJK UNIFIED IDEOGRAPH - 0xE1E9: 0x8862, //CJK UNIFIED IDEOGRAPH - 0xE1EA: 0x5F61, //CJK UNIFIED IDEOGRAPH - 0xE1EB: 0x72AD, //CJK UNIFIED IDEOGRAPH - 0xE1EC: 0x72B0, //CJK UNIFIED IDEOGRAPH - 0xE1ED: 0x72B4, //CJK UNIFIED IDEOGRAPH - 0xE1EE: 0x72B7, //CJK UNIFIED IDEOGRAPH - 0xE1EF: 0x72B8, //CJK UNIFIED IDEOGRAPH - 0xE1F0: 0x72C3, //CJK UNIFIED IDEOGRAPH - 0xE1F1: 0x72C1, //CJK UNIFIED IDEOGRAPH - 0xE1F2: 0x72CE, //CJK UNIFIED IDEOGRAPH - 0xE1F3: 0x72CD, //CJK UNIFIED IDEOGRAPH - 0xE1F4: 0x72D2, //CJK UNIFIED IDEOGRAPH - 0xE1F5: 0x72E8, //CJK UNIFIED IDEOGRAPH - 0xE1F6: 0x72EF, //CJK UNIFIED IDEOGRAPH - 0xE1F7: 0x72E9, //CJK UNIFIED IDEOGRAPH - 0xE1F8: 0x72F2, //CJK UNIFIED IDEOGRAPH - 0xE1F9: 0x72F4, //CJK UNIFIED IDEOGRAPH - 0xE1FA: 0x72F7, //CJK UNIFIED IDEOGRAPH - 0xE1FB: 0x7301, //CJK UNIFIED IDEOGRAPH - 0xE1FC: 0x72F3, //CJK UNIFIED IDEOGRAPH - 0xE1FD: 0x7303, //CJK UNIFIED IDEOGRAPH - 0xE1FE: 0x72FA, //CJK UNIFIED IDEOGRAPH - 0xE240: 0x91E6, //CJK UNIFIED IDEOGRAPH - 0xE241: 0x91E7, //CJK UNIFIED IDEOGRAPH - 0xE242: 0x91E8, //CJK UNIFIED IDEOGRAPH - 0xE243: 0x91E9, //CJK UNIFIED IDEOGRAPH - 0xE244: 0x91EA, //CJK UNIFIED IDEOGRAPH - 0xE245: 0x91EB, //CJK UNIFIED IDEOGRAPH - 0xE246: 0x91EC, //CJK UNIFIED IDEOGRAPH - 0xE247: 0x91ED, //CJK UNIFIED IDEOGRAPH - 0xE248: 0x91EE, //CJK UNIFIED IDEOGRAPH - 0xE249: 0x91EF, //CJK UNIFIED IDEOGRAPH - 0xE24A: 0x91F0, //CJK UNIFIED IDEOGRAPH - 0xE24B: 0x91F1, //CJK UNIFIED IDEOGRAPH - 0xE24C: 0x91F2, //CJK UNIFIED IDEOGRAPH - 0xE24D: 0x91F3, //CJK UNIFIED IDEOGRAPH - 0xE24E: 0x91F4, //CJK UNIFIED IDEOGRAPH - 0xE24F: 0x91F5, //CJK UNIFIED IDEOGRAPH - 0xE250: 0x91F6, //CJK UNIFIED IDEOGRAPH - 0xE251: 0x91F7, //CJK UNIFIED IDEOGRAPH - 0xE252: 0x91F8, //CJK UNIFIED IDEOGRAPH - 0xE253: 0x91F9, //CJK UNIFIED IDEOGRAPH - 0xE254: 0x91FA, //CJK UNIFIED IDEOGRAPH - 0xE255: 0x91FB, //CJK UNIFIED IDEOGRAPH - 0xE256: 0x91FC, //CJK UNIFIED IDEOGRAPH - 0xE257: 0x91FD, //CJK UNIFIED IDEOGRAPH - 0xE258: 0x91FE, //CJK UNIFIED IDEOGRAPH - 0xE259: 0x91FF, //CJK UNIFIED IDEOGRAPH - 0xE25A: 0x9200, //CJK UNIFIED IDEOGRAPH - 0xE25B: 0x9201, //CJK UNIFIED IDEOGRAPH - 0xE25C: 0x9202, //CJK UNIFIED IDEOGRAPH - 0xE25D: 0x9203, //CJK UNIFIED IDEOGRAPH - 0xE25E: 0x9204, //CJK UNIFIED IDEOGRAPH - 0xE25F: 0x9205, //CJK UNIFIED IDEOGRAPH - 0xE260: 0x9206, //CJK UNIFIED IDEOGRAPH - 0xE261: 0x9207, //CJK UNIFIED IDEOGRAPH - 0xE262: 0x9208, //CJK UNIFIED IDEOGRAPH - 0xE263: 0x9209, //CJK UNIFIED IDEOGRAPH - 0xE264: 0x920A, //CJK UNIFIED IDEOGRAPH - 0xE265: 0x920B, //CJK UNIFIED IDEOGRAPH - 0xE266: 0x920C, //CJK UNIFIED IDEOGRAPH - 0xE267: 0x920D, //CJK UNIFIED IDEOGRAPH - 0xE268: 0x920E, //CJK UNIFIED IDEOGRAPH - 0xE269: 0x920F, //CJK UNIFIED IDEOGRAPH - 0xE26A: 0x9210, //CJK UNIFIED IDEOGRAPH - 0xE26B: 0x9211, //CJK UNIFIED IDEOGRAPH - 0xE26C: 0x9212, //CJK UNIFIED IDEOGRAPH - 0xE26D: 0x9213, //CJK UNIFIED IDEOGRAPH - 0xE26E: 0x9214, //CJK UNIFIED IDEOGRAPH - 0xE26F: 0x9215, //CJK UNIFIED IDEOGRAPH - 0xE270: 0x9216, //CJK UNIFIED IDEOGRAPH - 0xE271: 0x9217, //CJK UNIFIED IDEOGRAPH - 0xE272: 0x9218, //CJK UNIFIED IDEOGRAPH - 0xE273: 0x9219, //CJK UNIFIED IDEOGRAPH - 0xE274: 0x921A, //CJK UNIFIED IDEOGRAPH - 0xE275: 0x921B, //CJK UNIFIED IDEOGRAPH - 0xE276: 0x921C, //CJK UNIFIED IDEOGRAPH - 0xE277: 0x921D, //CJK UNIFIED IDEOGRAPH - 0xE278: 0x921E, //CJK UNIFIED IDEOGRAPH - 0xE279: 0x921F, //CJK UNIFIED IDEOGRAPH - 0xE27A: 0x9220, //CJK UNIFIED IDEOGRAPH - 0xE27B: 0x9221, //CJK UNIFIED IDEOGRAPH - 0xE27C: 0x9222, //CJK UNIFIED IDEOGRAPH - 0xE27D: 0x9223, //CJK UNIFIED IDEOGRAPH - 0xE27E: 0x9224, //CJK UNIFIED IDEOGRAPH - 0xE280: 0x9225, //CJK UNIFIED IDEOGRAPH - 0xE281: 0x9226, //CJK UNIFIED IDEOGRAPH - 0xE282: 0x9227, //CJK UNIFIED IDEOGRAPH - 0xE283: 0x9228, //CJK UNIFIED IDEOGRAPH - 0xE284: 0x9229, //CJK UNIFIED IDEOGRAPH - 0xE285: 0x922A, //CJK UNIFIED IDEOGRAPH - 0xE286: 0x922B, //CJK UNIFIED IDEOGRAPH - 0xE287: 0x922C, //CJK UNIFIED IDEOGRAPH - 0xE288: 0x922D, //CJK UNIFIED IDEOGRAPH - 0xE289: 0x922E, //CJK UNIFIED IDEOGRAPH - 0xE28A: 0x922F, //CJK UNIFIED IDEOGRAPH - 0xE28B: 0x9230, //CJK UNIFIED IDEOGRAPH - 0xE28C: 0x9231, //CJK UNIFIED IDEOGRAPH - 0xE28D: 0x9232, //CJK UNIFIED IDEOGRAPH - 0xE28E: 0x9233, //CJK UNIFIED IDEOGRAPH - 0xE28F: 0x9234, //CJK UNIFIED IDEOGRAPH - 0xE290: 0x9235, //CJK UNIFIED IDEOGRAPH - 0xE291: 0x9236, //CJK UNIFIED IDEOGRAPH - 0xE292: 0x9237, //CJK UNIFIED IDEOGRAPH - 0xE293: 0x9238, //CJK UNIFIED IDEOGRAPH - 0xE294: 0x9239, //CJK UNIFIED IDEOGRAPH - 0xE295: 0x923A, //CJK UNIFIED IDEOGRAPH - 0xE296: 0x923B, //CJK UNIFIED IDEOGRAPH - 0xE297: 0x923C, //CJK UNIFIED IDEOGRAPH - 0xE298: 0x923D, //CJK UNIFIED IDEOGRAPH - 0xE299: 0x923E, //CJK UNIFIED IDEOGRAPH - 0xE29A: 0x923F, //CJK UNIFIED IDEOGRAPH - 0xE29B: 0x9240, //CJK UNIFIED IDEOGRAPH - 0xE29C: 0x9241, //CJK UNIFIED IDEOGRAPH - 0xE29D: 0x9242, //CJK UNIFIED IDEOGRAPH - 0xE29E: 0x9243, //CJK UNIFIED IDEOGRAPH - 0xE29F: 0x9244, //CJK UNIFIED IDEOGRAPH - 0xE2A0: 0x9245, //CJK UNIFIED IDEOGRAPH - 0xE2A1: 0x72FB, //CJK UNIFIED IDEOGRAPH - 0xE2A2: 0x7317, //CJK UNIFIED IDEOGRAPH - 0xE2A3: 0x7313, //CJK UNIFIED IDEOGRAPH - 0xE2A4: 0x7321, //CJK UNIFIED IDEOGRAPH - 0xE2A5: 0x730A, //CJK UNIFIED IDEOGRAPH - 0xE2A6: 0x731E, //CJK UNIFIED IDEOGRAPH - 0xE2A7: 0x731D, //CJK UNIFIED IDEOGRAPH - 0xE2A8: 0x7315, //CJK UNIFIED IDEOGRAPH - 0xE2A9: 0x7322, //CJK UNIFIED IDEOGRAPH - 0xE2AA: 0x7339, //CJK UNIFIED IDEOGRAPH - 0xE2AB: 0x7325, //CJK UNIFIED IDEOGRAPH - 0xE2AC: 0x732C, //CJK UNIFIED IDEOGRAPH - 0xE2AD: 0x7338, //CJK UNIFIED IDEOGRAPH - 0xE2AE: 0x7331, //CJK UNIFIED IDEOGRAPH - 0xE2AF: 0x7350, //CJK UNIFIED IDEOGRAPH - 0xE2B0: 0x734D, //CJK UNIFIED IDEOGRAPH - 0xE2B1: 0x7357, //CJK UNIFIED IDEOGRAPH - 0xE2B2: 0x7360, //CJK UNIFIED IDEOGRAPH - 0xE2B3: 0x736C, //CJK UNIFIED IDEOGRAPH - 0xE2B4: 0x736F, //CJK UNIFIED IDEOGRAPH - 0xE2B5: 0x737E, //CJK UNIFIED IDEOGRAPH - 0xE2B6: 0x821B, //CJK UNIFIED IDEOGRAPH - 0xE2B7: 0x5925, //CJK UNIFIED IDEOGRAPH - 0xE2B8: 0x98E7, //CJK UNIFIED IDEOGRAPH - 0xE2B9: 0x5924, //CJK UNIFIED IDEOGRAPH - 0xE2BA: 0x5902, //CJK UNIFIED IDEOGRAPH - 0xE2BB: 0x9963, //CJK UNIFIED IDEOGRAPH - 0xE2BC: 0x9967, //CJK UNIFIED IDEOGRAPH - 0xE2BD: 0x9968, //CJK UNIFIED IDEOGRAPH - 0xE2BE: 0x9969, //CJK UNIFIED IDEOGRAPH - 0xE2BF: 0x996A, //CJK UNIFIED IDEOGRAPH - 0xE2C0: 0x996B, //CJK UNIFIED IDEOGRAPH - 0xE2C1: 0x996C, //CJK UNIFIED IDEOGRAPH - 0xE2C2: 0x9974, //CJK UNIFIED IDEOGRAPH - 0xE2C3: 0x9977, //CJK UNIFIED IDEOGRAPH - 0xE2C4: 0x997D, //CJK UNIFIED IDEOGRAPH - 0xE2C5: 0x9980, //CJK UNIFIED IDEOGRAPH - 0xE2C6: 0x9984, //CJK UNIFIED IDEOGRAPH - 0xE2C7: 0x9987, //CJK UNIFIED IDEOGRAPH - 0xE2C8: 0x998A, //CJK UNIFIED IDEOGRAPH - 0xE2C9: 0x998D, //CJK UNIFIED IDEOGRAPH - 0xE2CA: 0x9990, //CJK UNIFIED IDEOGRAPH - 0xE2CB: 0x9991, //CJK UNIFIED IDEOGRAPH - 0xE2CC: 0x9993, //CJK UNIFIED IDEOGRAPH - 0xE2CD: 0x9994, //CJK UNIFIED IDEOGRAPH - 0xE2CE: 0x9995, //CJK UNIFIED IDEOGRAPH - 0xE2CF: 0x5E80, //CJK UNIFIED IDEOGRAPH - 0xE2D0: 0x5E91, //CJK UNIFIED IDEOGRAPH - 0xE2D1: 0x5E8B, //CJK UNIFIED IDEOGRAPH - 0xE2D2: 0x5E96, //CJK UNIFIED IDEOGRAPH - 0xE2D3: 0x5EA5, //CJK UNIFIED IDEOGRAPH - 0xE2D4: 0x5EA0, //CJK UNIFIED IDEOGRAPH - 0xE2D5: 0x5EB9, //CJK UNIFIED IDEOGRAPH - 0xE2D6: 0x5EB5, //CJK UNIFIED IDEOGRAPH - 0xE2D7: 0x5EBE, //CJK UNIFIED IDEOGRAPH - 0xE2D8: 0x5EB3, //CJK UNIFIED IDEOGRAPH - 0xE2D9: 0x8D53, //CJK UNIFIED IDEOGRAPH - 0xE2DA: 0x5ED2, //CJK UNIFIED IDEOGRAPH - 0xE2DB: 0x5ED1, //CJK UNIFIED IDEOGRAPH - 0xE2DC: 0x5EDB, //CJK UNIFIED IDEOGRAPH - 0xE2DD: 0x5EE8, //CJK UNIFIED IDEOGRAPH - 0xE2DE: 0x5EEA, //CJK UNIFIED IDEOGRAPH - 0xE2DF: 0x81BA, //CJK UNIFIED IDEOGRAPH - 0xE2E0: 0x5FC4, //CJK UNIFIED IDEOGRAPH - 0xE2E1: 0x5FC9, //CJK UNIFIED IDEOGRAPH - 0xE2E2: 0x5FD6, //CJK UNIFIED IDEOGRAPH - 0xE2E3: 0x5FCF, //CJK UNIFIED IDEOGRAPH - 0xE2E4: 0x6003, //CJK UNIFIED IDEOGRAPH - 0xE2E5: 0x5FEE, //CJK UNIFIED IDEOGRAPH - 0xE2E6: 0x6004, //CJK UNIFIED IDEOGRAPH - 0xE2E7: 0x5FE1, //CJK UNIFIED IDEOGRAPH - 0xE2E8: 0x5FE4, //CJK UNIFIED IDEOGRAPH - 0xE2E9: 0x5FFE, //CJK UNIFIED IDEOGRAPH - 0xE2EA: 0x6005, //CJK UNIFIED IDEOGRAPH - 0xE2EB: 0x6006, //CJK UNIFIED IDEOGRAPH - 0xE2EC: 0x5FEA, //CJK UNIFIED IDEOGRAPH - 0xE2ED: 0x5FED, //CJK UNIFIED IDEOGRAPH - 0xE2EE: 0x5FF8, //CJK UNIFIED IDEOGRAPH - 0xE2EF: 0x6019, //CJK UNIFIED IDEOGRAPH - 0xE2F0: 0x6035, //CJK UNIFIED IDEOGRAPH - 0xE2F1: 0x6026, //CJK UNIFIED IDEOGRAPH - 0xE2F2: 0x601B, //CJK UNIFIED IDEOGRAPH - 0xE2F3: 0x600F, //CJK UNIFIED IDEOGRAPH - 0xE2F4: 0x600D, //CJK UNIFIED IDEOGRAPH - 0xE2F5: 0x6029, //CJK UNIFIED IDEOGRAPH - 0xE2F6: 0x602B, //CJK UNIFIED IDEOGRAPH - 0xE2F7: 0x600A, //CJK UNIFIED IDEOGRAPH - 0xE2F8: 0x603F, //CJK UNIFIED IDEOGRAPH - 0xE2F9: 0x6021, //CJK UNIFIED IDEOGRAPH - 0xE2FA: 0x6078, //CJK UNIFIED IDEOGRAPH - 0xE2FB: 0x6079, //CJK UNIFIED IDEOGRAPH - 0xE2FC: 0x607B, //CJK UNIFIED IDEOGRAPH - 0xE2FD: 0x607A, //CJK UNIFIED IDEOGRAPH - 0xE2FE: 0x6042, //CJK UNIFIED IDEOGRAPH - 0xE340: 0x9246, //CJK UNIFIED IDEOGRAPH - 0xE341: 0x9247, //CJK UNIFIED IDEOGRAPH - 0xE342: 0x9248, //CJK UNIFIED IDEOGRAPH - 0xE343: 0x9249, //CJK UNIFIED IDEOGRAPH - 0xE344: 0x924A, //CJK UNIFIED IDEOGRAPH - 0xE345: 0x924B, //CJK UNIFIED IDEOGRAPH - 0xE346: 0x924C, //CJK UNIFIED IDEOGRAPH - 0xE347: 0x924D, //CJK UNIFIED IDEOGRAPH - 0xE348: 0x924E, //CJK UNIFIED IDEOGRAPH - 0xE349: 0x924F, //CJK UNIFIED IDEOGRAPH - 0xE34A: 0x9250, //CJK UNIFIED IDEOGRAPH - 0xE34B: 0x9251, //CJK UNIFIED IDEOGRAPH - 0xE34C: 0x9252, //CJK UNIFIED IDEOGRAPH - 0xE34D: 0x9253, //CJK UNIFIED IDEOGRAPH - 0xE34E: 0x9254, //CJK UNIFIED IDEOGRAPH - 0xE34F: 0x9255, //CJK UNIFIED IDEOGRAPH - 0xE350: 0x9256, //CJK UNIFIED IDEOGRAPH - 0xE351: 0x9257, //CJK UNIFIED IDEOGRAPH - 0xE352: 0x9258, //CJK UNIFIED IDEOGRAPH - 0xE353: 0x9259, //CJK UNIFIED IDEOGRAPH - 0xE354: 0x925A, //CJK UNIFIED IDEOGRAPH - 0xE355: 0x925B, //CJK UNIFIED IDEOGRAPH - 0xE356: 0x925C, //CJK UNIFIED IDEOGRAPH - 0xE357: 0x925D, //CJK UNIFIED IDEOGRAPH - 0xE358: 0x925E, //CJK UNIFIED IDEOGRAPH - 0xE359: 0x925F, //CJK UNIFIED IDEOGRAPH - 0xE35A: 0x9260, //CJK UNIFIED IDEOGRAPH - 0xE35B: 0x9261, //CJK UNIFIED IDEOGRAPH - 0xE35C: 0x9262, //CJK UNIFIED IDEOGRAPH - 0xE35D: 0x9263, //CJK UNIFIED IDEOGRAPH - 0xE35E: 0x9264, //CJK UNIFIED IDEOGRAPH - 0xE35F: 0x9265, //CJK UNIFIED IDEOGRAPH - 0xE360: 0x9266, //CJK UNIFIED IDEOGRAPH - 0xE361: 0x9267, //CJK UNIFIED IDEOGRAPH - 0xE362: 0x9268, //CJK UNIFIED IDEOGRAPH - 0xE363: 0x9269, //CJK UNIFIED IDEOGRAPH - 0xE364: 0x926A, //CJK UNIFIED IDEOGRAPH - 0xE365: 0x926B, //CJK UNIFIED IDEOGRAPH - 0xE366: 0x926C, //CJK UNIFIED IDEOGRAPH - 0xE367: 0x926D, //CJK UNIFIED IDEOGRAPH - 0xE368: 0x926E, //CJK UNIFIED IDEOGRAPH - 0xE369: 0x926F, //CJK UNIFIED IDEOGRAPH - 0xE36A: 0x9270, //CJK UNIFIED IDEOGRAPH - 0xE36B: 0x9271, //CJK UNIFIED IDEOGRAPH - 0xE36C: 0x9272, //CJK UNIFIED IDEOGRAPH - 0xE36D: 0x9273, //CJK UNIFIED IDEOGRAPH - 0xE36E: 0x9275, //CJK UNIFIED IDEOGRAPH - 0xE36F: 0x9276, //CJK UNIFIED IDEOGRAPH - 0xE370: 0x9277, //CJK UNIFIED IDEOGRAPH - 0xE371: 0x9278, //CJK UNIFIED IDEOGRAPH - 0xE372: 0x9279, //CJK UNIFIED IDEOGRAPH - 0xE373: 0x927A, //CJK UNIFIED IDEOGRAPH - 0xE374: 0x927B, //CJK UNIFIED IDEOGRAPH - 0xE375: 0x927C, //CJK UNIFIED IDEOGRAPH - 0xE376: 0x927D, //CJK UNIFIED IDEOGRAPH - 0xE377: 0x927E, //CJK UNIFIED IDEOGRAPH - 0xE378: 0x927F, //CJK UNIFIED IDEOGRAPH - 0xE379: 0x9280, //CJK UNIFIED IDEOGRAPH - 0xE37A: 0x9281, //CJK UNIFIED IDEOGRAPH - 0xE37B: 0x9282, //CJK UNIFIED IDEOGRAPH - 0xE37C: 0x9283, //CJK UNIFIED IDEOGRAPH - 0xE37D: 0x9284, //CJK UNIFIED IDEOGRAPH - 0xE37E: 0x9285, //CJK UNIFIED IDEOGRAPH - 0xE380: 0x9286, //CJK UNIFIED IDEOGRAPH - 0xE381: 0x9287, //CJK UNIFIED IDEOGRAPH - 0xE382: 0x9288, //CJK UNIFIED IDEOGRAPH - 0xE383: 0x9289, //CJK UNIFIED IDEOGRAPH - 0xE384: 0x928A, //CJK UNIFIED IDEOGRAPH - 0xE385: 0x928B, //CJK UNIFIED IDEOGRAPH - 0xE386: 0x928C, //CJK UNIFIED IDEOGRAPH - 0xE387: 0x928D, //CJK UNIFIED IDEOGRAPH - 0xE388: 0x928F, //CJK UNIFIED IDEOGRAPH - 0xE389: 0x9290, //CJK UNIFIED IDEOGRAPH - 0xE38A: 0x9291, //CJK UNIFIED IDEOGRAPH - 0xE38B: 0x9292, //CJK UNIFIED IDEOGRAPH - 0xE38C: 0x9293, //CJK UNIFIED IDEOGRAPH - 0xE38D: 0x9294, //CJK UNIFIED IDEOGRAPH - 0xE38E: 0x9295, //CJK UNIFIED IDEOGRAPH - 0xE38F: 0x9296, //CJK UNIFIED IDEOGRAPH - 0xE390: 0x9297, //CJK UNIFIED IDEOGRAPH - 0xE391: 0x9298, //CJK UNIFIED IDEOGRAPH - 0xE392: 0x9299, //CJK UNIFIED IDEOGRAPH - 0xE393: 0x929A, //CJK UNIFIED IDEOGRAPH - 0xE394: 0x929B, //CJK UNIFIED IDEOGRAPH - 0xE395: 0x929C, //CJK UNIFIED IDEOGRAPH - 0xE396: 0x929D, //CJK UNIFIED IDEOGRAPH - 0xE397: 0x929E, //CJK UNIFIED IDEOGRAPH - 0xE398: 0x929F, //CJK UNIFIED IDEOGRAPH - 0xE399: 0x92A0, //CJK UNIFIED IDEOGRAPH - 0xE39A: 0x92A1, //CJK UNIFIED IDEOGRAPH - 0xE39B: 0x92A2, //CJK UNIFIED IDEOGRAPH - 0xE39C: 0x92A3, //CJK UNIFIED IDEOGRAPH - 0xE39D: 0x92A4, //CJK UNIFIED IDEOGRAPH - 0xE39E: 0x92A5, //CJK UNIFIED IDEOGRAPH - 0xE39F: 0x92A6, //CJK UNIFIED IDEOGRAPH - 0xE3A0: 0x92A7, //CJK UNIFIED IDEOGRAPH - 0xE3A1: 0x606A, //CJK UNIFIED IDEOGRAPH - 0xE3A2: 0x607D, //CJK UNIFIED IDEOGRAPH - 0xE3A3: 0x6096, //CJK UNIFIED IDEOGRAPH - 0xE3A4: 0x609A, //CJK UNIFIED IDEOGRAPH - 0xE3A5: 0x60AD, //CJK UNIFIED IDEOGRAPH - 0xE3A6: 0x609D, //CJK UNIFIED IDEOGRAPH - 0xE3A7: 0x6083, //CJK UNIFIED IDEOGRAPH - 0xE3A8: 0x6092, //CJK UNIFIED IDEOGRAPH - 0xE3A9: 0x608C, //CJK UNIFIED IDEOGRAPH - 0xE3AA: 0x609B, //CJK UNIFIED IDEOGRAPH - 0xE3AB: 0x60EC, //CJK UNIFIED IDEOGRAPH - 0xE3AC: 0x60BB, //CJK UNIFIED IDEOGRAPH - 0xE3AD: 0x60B1, //CJK UNIFIED IDEOGRAPH - 0xE3AE: 0x60DD, //CJK UNIFIED IDEOGRAPH - 0xE3AF: 0x60D8, //CJK UNIFIED IDEOGRAPH - 0xE3B0: 0x60C6, //CJK UNIFIED IDEOGRAPH - 0xE3B1: 0x60DA, //CJK UNIFIED IDEOGRAPH - 0xE3B2: 0x60B4, //CJK UNIFIED IDEOGRAPH - 0xE3B3: 0x6120, //CJK UNIFIED IDEOGRAPH - 0xE3B4: 0x6126, //CJK UNIFIED IDEOGRAPH - 0xE3B5: 0x6115, //CJK UNIFIED IDEOGRAPH - 0xE3B6: 0x6123, //CJK UNIFIED IDEOGRAPH - 0xE3B7: 0x60F4, //CJK UNIFIED IDEOGRAPH - 0xE3B8: 0x6100, //CJK UNIFIED IDEOGRAPH - 0xE3B9: 0x610E, //CJK UNIFIED IDEOGRAPH - 0xE3BA: 0x612B, //CJK UNIFIED IDEOGRAPH - 0xE3BB: 0x614A, //CJK UNIFIED IDEOGRAPH - 0xE3BC: 0x6175, //CJK UNIFIED IDEOGRAPH - 0xE3BD: 0x61AC, //CJK UNIFIED IDEOGRAPH - 0xE3BE: 0x6194, //CJK UNIFIED IDEOGRAPH - 0xE3BF: 0x61A7, //CJK UNIFIED IDEOGRAPH - 0xE3C0: 0x61B7, //CJK UNIFIED IDEOGRAPH - 0xE3C1: 0x61D4, //CJK UNIFIED IDEOGRAPH - 0xE3C2: 0x61F5, //CJK UNIFIED IDEOGRAPH - 0xE3C3: 0x5FDD, //CJK UNIFIED IDEOGRAPH - 0xE3C4: 0x96B3, //CJK UNIFIED IDEOGRAPH - 0xE3C5: 0x95E9, //CJK UNIFIED IDEOGRAPH - 0xE3C6: 0x95EB, //CJK UNIFIED IDEOGRAPH - 0xE3C7: 0x95F1, //CJK UNIFIED IDEOGRAPH - 0xE3C8: 0x95F3, //CJK UNIFIED IDEOGRAPH - 0xE3C9: 0x95F5, //CJK UNIFIED IDEOGRAPH - 0xE3CA: 0x95F6, //CJK UNIFIED IDEOGRAPH - 0xE3CB: 0x95FC, //CJK UNIFIED IDEOGRAPH - 0xE3CC: 0x95FE, //CJK UNIFIED IDEOGRAPH - 0xE3CD: 0x9603, //CJK UNIFIED IDEOGRAPH - 0xE3CE: 0x9604, //CJK UNIFIED IDEOGRAPH - 0xE3CF: 0x9606, //CJK UNIFIED IDEOGRAPH - 0xE3D0: 0x9608, //CJK UNIFIED IDEOGRAPH - 0xE3D1: 0x960A, //CJK UNIFIED IDEOGRAPH - 0xE3D2: 0x960B, //CJK UNIFIED IDEOGRAPH - 0xE3D3: 0x960C, //CJK UNIFIED IDEOGRAPH - 0xE3D4: 0x960D, //CJK UNIFIED IDEOGRAPH - 0xE3D5: 0x960F, //CJK UNIFIED IDEOGRAPH - 0xE3D6: 0x9612, //CJK UNIFIED IDEOGRAPH - 0xE3D7: 0x9615, //CJK UNIFIED IDEOGRAPH - 0xE3D8: 0x9616, //CJK UNIFIED IDEOGRAPH - 0xE3D9: 0x9617, //CJK UNIFIED IDEOGRAPH - 0xE3DA: 0x9619, //CJK UNIFIED IDEOGRAPH - 0xE3DB: 0x961A, //CJK UNIFIED IDEOGRAPH - 0xE3DC: 0x4E2C, //CJK UNIFIED IDEOGRAPH - 0xE3DD: 0x723F, //CJK UNIFIED IDEOGRAPH - 0xE3DE: 0x6215, //CJK UNIFIED IDEOGRAPH - 0xE3DF: 0x6C35, //CJK UNIFIED IDEOGRAPH - 0xE3E0: 0x6C54, //CJK UNIFIED IDEOGRAPH - 0xE3E1: 0x6C5C, //CJK UNIFIED IDEOGRAPH - 0xE3E2: 0x6C4A, //CJK UNIFIED IDEOGRAPH - 0xE3E3: 0x6CA3, //CJK UNIFIED IDEOGRAPH - 0xE3E4: 0x6C85, //CJK UNIFIED IDEOGRAPH - 0xE3E5: 0x6C90, //CJK UNIFIED IDEOGRAPH - 0xE3E6: 0x6C94, //CJK UNIFIED IDEOGRAPH - 0xE3E7: 0x6C8C, //CJK UNIFIED IDEOGRAPH - 0xE3E8: 0x6C68, //CJK UNIFIED IDEOGRAPH - 0xE3E9: 0x6C69, //CJK UNIFIED IDEOGRAPH - 0xE3EA: 0x6C74, //CJK UNIFIED IDEOGRAPH - 0xE3EB: 0x6C76, //CJK UNIFIED IDEOGRAPH - 0xE3EC: 0x6C86, //CJK UNIFIED IDEOGRAPH - 0xE3ED: 0x6CA9, //CJK UNIFIED IDEOGRAPH - 0xE3EE: 0x6CD0, //CJK UNIFIED IDEOGRAPH - 0xE3EF: 0x6CD4, //CJK UNIFIED IDEOGRAPH - 0xE3F0: 0x6CAD, //CJK UNIFIED IDEOGRAPH - 0xE3F1: 0x6CF7, //CJK UNIFIED IDEOGRAPH - 0xE3F2: 0x6CF8, //CJK UNIFIED IDEOGRAPH - 0xE3F3: 0x6CF1, //CJK UNIFIED IDEOGRAPH - 0xE3F4: 0x6CD7, //CJK UNIFIED IDEOGRAPH - 0xE3F5: 0x6CB2, //CJK UNIFIED IDEOGRAPH - 0xE3F6: 0x6CE0, //CJK UNIFIED IDEOGRAPH - 0xE3F7: 0x6CD6, //CJK UNIFIED IDEOGRAPH - 0xE3F8: 0x6CFA, //CJK UNIFIED IDEOGRAPH - 0xE3F9: 0x6CEB, //CJK UNIFIED IDEOGRAPH - 0xE3FA: 0x6CEE, //CJK UNIFIED IDEOGRAPH - 0xE3FB: 0x6CB1, //CJK UNIFIED IDEOGRAPH - 0xE3FC: 0x6CD3, //CJK UNIFIED IDEOGRAPH - 0xE3FD: 0x6CEF, //CJK UNIFIED IDEOGRAPH - 0xE3FE: 0x6CFE, //CJK UNIFIED IDEOGRAPH - 0xE440: 0x92A8, //CJK UNIFIED IDEOGRAPH - 0xE441: 0x92A9, //CJK UNIFIED IDEOGRAPH - 0xE442: 0x92AA, //CJK UNIFIED IDEOGRAPH - 0xE443: 0x92AB, //CJK UNIFIED IDEOGRAPH - 0xE444: 0x92AC, //CJK UNIFIED IDEOGRAPH - 0xE445: 0x92AD, //CJK UNIFIED IDEOGRAPH - 0xE446: 0x92AF, //CJK UNIFIED IDEOGRAPH - 0xE447: 0x92B0, //CJK UNIFIED IDEOGRAPH - 0xE448: 0x92B1, //CJK UNIFIED IDEOGRAPH - 0xE449: 0x92B2, //CJK UNIFIED IDEOGRAPH - 0xE44A: 0x92B3, //CJK UNIFIED IDEOGRAPH - 0xE44B: 0x92B4, //CJK UNIFIED IDEOGRAPH - 0xE44C: 0x92B5, //CJK UNIFIED IDEOGRAPH - 0xE44D: 0x92B6, //CJK UNIFIED IDEOGRAPH - 0xE44E: 0x92B7, //CJK UNIFIED IDEOGRAPH - 0xE44F: 0x92B8, //CJK UNIFIED IDEOGRAPH - 0xE450: 0x92B9, //CJK UNIFIED IDEOGRAPH - 0xE451: 0x92BA, //CJK UNIFIED IDEOGRAPH - 0xE452: 0x92BB, //CJK UNIFIED IDEOGRAPH - 0xE453: 0x92BC, //CJK UNIFIED IDEOGRAPH - 0xE454: 0x92BD, //CJK UNIFIED IDEOGRAPH - 0xE455: 0x92BE, //CJK UNIFIED IDEOGRAPH - 0xE456: 0x92BF, //CJK UNIFIED IDEOGRAPH - 0xE457: 0x92C0, //CJK UNIFIED IDEOGRAPH - 0xE458: 0x92C1, //CJK UNIFIED IDEOGRAPH - 0xE459: 0x92C2, //CJK UNIFIED IDEOGRAPH - 0xE45A: 0x92C3, //CJK UNIFIED IDEOGRAPH - 0xE45B: 0x92C4, //CJK UNIFIED IDEOGRAPH - 0xE45C: 0x92C5, //CJK UNIFIED IDEOGRAPH - 0xE45D: 0x92C6, //CJK UNIFIED IDEOGRAPH - 0xE45E: 0x92C7, //CJK UNIFIED IDEOGRAPH - 0xE45F: 0x92C9, //CJK UNIFIED IDEOGRAPH - 0xE460: 0x92CA, //CJK UNIFIED IDEOGRAPH - 0xE461: 0x92CB, //CJK UNIFIED IDEOGRAPH - 0xE462: 0x92CC, //CJK UNIFIED IDEOGRAPH - 0xE463: 0x92CD, //CJK UNIFIED IDEOGRAPH - 0xE464: 0x92CE, //CJK UNIFIED IDEOGRAPH - 0xE465: 0x92CF, //CJK UNIFIED IDEOGRAPH - 0xE466: 0x92D0, //CJK UNIFIED IDEOGRAPH - 0xE467: 0x92D1, //CJK UNIFIED IDEOGRAPH - 0xE468: 0x92D2, //CJK UNIFIED IDEOGRAPH - 0xE469: 0x92D3, //CJK UNIFIED IDEOGRAPH - 0xE46A: 0x92D4, //CJK UNIFIED IDEOGRAPH - 0xE46B: 0x92D5, //CJK UNIFIED IDEOGRAPH - 0xE46C: 0x92D6, //CJK UNIFIED IDEOGRAPH - 0xE46D: 0x92D7, //CJK UNIFIED IDEOGRAPH - 0xE46E: 0x92D8, //CJK UNIFIED IDEOGRAPH - 0xE46F: 0x92D9, //CJK UNIFIED IDEOGRAPH - 0xE470: 0x92DA, //CJK UNIFIED IDEOGRAPH - 0xE471: 0x92DB, //CJK UNIFIED IDEOGRAPH - 0xE472: 0x92DC, //CJK UNIFIED IDEOGRAPH - 0xE473: 0x92DD, //CJK UNIFIED IDEOGRAPH - 0xE474: 0x92DE, //CJK UNIFIED IDEOGRAPH - 0xE475: 0x92DF, //CJK UNIFIED IDEOGRAPH - 0xE476: 0x92E0, //CJK UNIFIED IDEOGRAPH - 0xE477: 0x92E1, //CJK UNIFIED IDEOGRAPH - 0xE478: 0x92E2, //CJK UNIFIED IDEOGRAPH - 0xE479: 0x92E3, //CJK UNIFIED IDEOGRAPH - 0xE47A: 0x92E4, //CJK UNIFIED IDEOGRAPH - 0xE47B: 0x92E5, //CJK UNIFIED IDEOGRAPH - 0xE47C: 0x92E6, //CJK UNIFIED IDEOGRAPH - 0xE47D: 0x92E7, //CJK UNIFIED IDEOGRAPH - 0xE47E: 0x92E8, //CJK UNIFIED IDEOGRAPH - 0xE480: 0x92E9, //CJK UNIFIED IDEOGRAPH - 0xE481: 0x92EA, //CJK UNIFIED IDEOGRAPH - 0xE482: 0x92EB, //CJK UNIFIED IDEOGRAPH - 0xE483: 0x92EC, //CJK UNIFIED IDEOGRAPH - 0xE484: 0x92ED, //CJK UNIFIED IDEOGRAPH - 0xE485: 0x92EE, //CJK UNIFIED IDEOGRAPH - 0xE486: 0x92EF, //CJK UNIFIED IDEOGRAPH - 0xE487: 0x92F0, //CJK UNIFIED IDEOGRAPH - 0xE488: 0x92F1, //CJK UNIFIED IDEOGRAPH - 0xE489: 0x92F2, //CJK UNIFIED IDEOGRAPH - 0xE48A: 0x92F3, //CJK UNIFIED IDEOGRAPH - 0xE48B: 0x92F4, //CJK UNIFIED IDEOGRAPH - 0xE48C: 0x92F5, //CJK UNIFIED IDEOGRAPH - 0xE48D: 0x92F6, //CJK UNIFIED IDEOGRAPH - 0xE48E: 0x92F7, //CJK UNIFIED IDEOGRAPH - 0xE48F: 0x92F8, //CJK UNIFIED IDEOGRAPH - 0xE490: 0x92F9, //CJK UNIFIED IDEOGRAPH - 0xE491: 0x92FA, //CJK UNIFIED IDEOGRAPH - 0xE492: 0x92FB, //CJK UNIFIED IDEOGRAPH - 0xE493: 0x92FC, //CJK UNIFIED IDEOGRAPH - 0xE494: 0x92FD, //CJK UNIFIED IDEOGRAPH - 0xE495: 0x92FE, //CJK UNIFIED IDEOGRAPH - 0xE496: 0x92FF, //CJK UNIFIED IDEOGRAPH - 0xE497: 0x9300, //CJK UNIFIED IDEOGRAPH - 0xE498: 0x9301, //CJK UNIFIED IDEOGRAPH - 0xE499: 0x9302, //CJK UNIFIED IDEOGRAPH - 0xE49A: 0x9303, //CJK UNIFIED IDEOGRAPH - 0xE49B: 0x9304, //CJK UNIFIED IDEOGRAPH - 0xE49C: 0x9305, //CJK UNIFIED IDEOGRAPH - 0xE49D: 0x9306, //CJK UNIFIED IDEOGRAPH - 0xE49E: 0x9307, //CJK UNIFIED IDEOGRAPH - 0xE49F: 0x9308, //CJK UNIFIED IDEOGRAPH - 0xE4A0: 0x9309, //CJK UNIFIED IDEOGRAPH - 0xE4A1: 0x6D39, //CJK UNIFIED IDEOGRAPH - 0xE4A2: 0x6D27, //CJK UNIFIED IDEOGRAPH - 0xE4A3: 0x6D0C, //CJK UNIFIED IDEOGRAPH - 0xE4A4: 0x6D43, //CJK UNIFIED IDEOGRAPH - 0xE4A5: 0x6D48, //CJK UNIFIED IDEOGRAPH - 0xE4A6: 0x6D07, //CJK UNIFIED IDEOGRAPH - 0xE4A7: 0x6D04, //CJK UNIFIED IDEOGRAPH - 0xE4A8: 0x6D19, //CJK UNIFIED IDEOGRAPH - 0xE4A9: 0x6D0E, //CJK UNIFIED IDEOGRAPH - 0xE4AA: 0x6D2B, //CJK UNIFIED IDEOGRAPH - 0xE4AB: 0x6D4D, //CJK UNIFIED IDEOGRAPH - 0xE4AC: 0x6D2E, //CJK UNIFIED IDEOGRAPH - 0xE4AD: 0x6D35, //CJK UNIFIED IDEOGRAPH - 0xE4AE: 0x6D1A, //CJK UNIFIED IDEOGRAPH - 0xE4AF: 0x6D4F, //CJK UNIFIED IDEOGRAPH - 0xE4B0: 0x6D52, //CJK UNIFIED IDEOGRAPH - 0xE4B1: 0x6D54, //CJK UNIFIED IDEOGRAPH - 0xE4B2: 0x6D33, //CJK UNIFIED IDEOGRAPH - 0xE4B3: 0x6D91, //CJK UNIFIED IDEOGRAPH - 0xE4B4: 0x6D6F, //CJK UNIFIED IDEOGRAPH - 0xE4B5: 0x6D9E, //CJK UNIFIED IDEOGRAPH - 0xE4B6: 0x6DA0, //CJK UNIFIED IDEOGRAPH - 0xE4B7: 0x6D5E, //CJK UNIFIED IDEOGRAPH - 0xE4B8: 0x6D93, //CJK UNIFIED IDEOGRAPH - 0xE4B9: 0x6D94, //CJK UNIFIED IDEOGRAPH - 0xE4BA: 0x6D5C, //CJK UNIFIED IDEOGRAPH - 0xE4BB: 0x6D60, //CJK UNIFIED IDEOGRAPH - 0xE4BC: 0x6D7C, //CJK UNIFIED IDEOGRAPH - 0xE4BD: 0x6D63, //CJK UNIFIED IDEOGRAPH - 0xE4BE: 0x6E1A, //CJK UNIFIED IDEOGRAPH - 0xE4BF: 0x6DC7, //CJK UNIFIED IDEOGRAPH - 0xE4C0: 0x6DC5, //CJK UNIFIED IDEOGRAPH - 0xE4C1: 0x6DDE, //CJK UNIFIED IDEOGRAPH - 0xE4C2: 0x6E0E, //CJK UNIFIED IDEOGRAPH - 0xE4C3: 0x6DBF, //CJK UNIFIED IDEOGRAPH - 0xE4C4: 0x6DE0, //CJK UNIFIED IDEOGRAPH - 0xE4C5: 0x6E11, //CJK UNIFIED IDEOGRAPH - 0xE4C6: 0x6DE6, //CJK UNIFIED IDEOGRAPH - 0xE4C7: 0x6DDD, //CJK UNIFIED IDEOGRAPH - 0xE4C8: 0x6DD9, //CJK UNIFIED IDEOGRAPH - 0xE4C9: 0x6E16, //CJK UNIFIED IDEOGRAPH - 0xE4CA: 0x6DAB, //CJK UNIFIED IDEOGRAPH - 0xE4CB: 0x6E0C, //CJK UNIFIED IDEOGRAPH - 0xE4CC: 0x6DAE, //CJK UNIFIED IDEOGRAPH - 0xE4CD: 0x6E2B, //CJK UNIFIED IDEOGRAPH - 0xE4CE: 0x6E6E, //CJK UNIFIED IDEOGRAPH - 0xE4CF: 0x6E4E, //CJK UNIFIED IDEOGRAPH - 0xE4D0: 0x6E6B, //CJK UNIFIED IDEOGRAPH - 0xE4D1: 0x6EB2, //CJK UNIFIED IDEOGRAPH - 0xE4D2: 0x6E5F, //CJK UNIFIED IDEOGRAPH - 0xE4D3: 0x6E86, //CJK UNIFIED IDEOGRAPH - 0xE4D4: 0x6E53, //CJK UNIFIED IDEOGRAPH - 0xE4D5: 0x6E54, //CJK UNIFIED IDEOGRAPH - 0xE4D6: 0x6E32, //CJK UNIFIED IDEOGRAPH - 0xE4D7: 0x6E25, //CJK UNIFIED IDEOGRAPH - 0xE4D8: 0x6E44, //CJK UNIFIED IDEOGRAPH - 0xE4D9: 0x6EDF, //CJK UNIFIED IDEOGRAPH - 0xE4DA: 0x6EB1, //CJK UNIFIED IDEOGRAPH - 0xE4DB: 0x6E98, //CJK UNIFIED IDEOGRAPH - 0xE4DC: 0x6EE0, //CJK UNIFIED IDEOGRAPH - 0xE4DD: 0x6F2D, //CJK UNIFIED IDEOGRAPH - 0xE4DE: 0x6EE2, //CJK UNIFIED IDEOGRAPH - 0xE4DF: 0x6EA5, //CJK UNIFIED IDEOGRAPH - 0xE4E0: 0x6EA7, //CJK UNIFIED IDEOGRAPH - 0xE4E1: 0x6EBD, //CJK UNIFIED IDEOGRAPH - 0xE4E2: 0x6EBB, //CJK UNIFIED IDEOGRAPH - 0xE4E3: 0x6EB7, //CJK UNIFIED IDEOGRAPH - 0xE4E4: 0x6ED7, //CJK UNIFIED IDEOGRAPH - 0xE4E5: 0x6EB4, //CJK UNIFIED IDEOGRAPH - 0xE4E6: 0x6ECF, //CJK UNIFIED IDEOGRAPH - 0xE4E7: 0x6E8F, //CJK UNIFIED IDEOGRAPH - 0xE4E8: 0x6EC2, //CJK UNIFIED IDEOGRAPH - 0xE4E9: 0x6E9F, //CJK UNIFIED IDEOGRAPH - 0xE4EA: 0x6F62, //CJK UNIFIED IDEOGRAPH - 0xE4EB: 0x6F46, //CJK UNIFIED IDEOGRAPH - 0xE4EC: 0x6F47, //CJK UNIFIED IDEOGRAPH - 0xE4ED: 0x6F24, //CJK UNIFIED IDEOGRAPH - 0xE4EE: 0x6F15, //CJK UNIFIED IDEOGRAPH - 0xE4EF: 0x6EF9, //CJK UNIFIED IDEOGRAPH - 0xE4F0: 0x6F2F, //CJK UNIFIED IDEOGRAPH - 0xE4F1: 0x6F36, //CJK UNIFIED IDEOGRAPH - 0xE4F2: 0x6F4B, //CJK UNIFIED IDEOGRAPH - 0xE4F3: 0x6F74, //CJK UNIFIED IDEOGRAPH - 0xE4F4: 0x6F2A, //CJK UNIFIED IDEOGRAPH - 0xE4F5: 0x6F09, //CJK UNIFIED IDEOGRAPH - 0xE4F6: 0x6F29, //CJK UNIFIED IDEOGRAPH - 0xE4F7: 0x6F89, //CJK UNIFIED IDEOGRAPH - 0xE4F8: 0x6F8D, //CJK UNIFIED IDEOGRAPH - 0xE4F9: 0x6F8C, //CJK UNIFIED IDEOGRAPH - 0xE4FA: 0x6F78, //CJK UNIFIED IDEOGRAPH - 0xE4FB: 0x6F72, //CJK UNIFIED IDEOGRAPH - 0xE4FC: 0x6F7C, //CJK UNIFIED IDEOGRAPH - 0xE4FD: 0x6F7A, //CJK UNIFIED IDEOGRAPH - 0xE4FE: 0x6FD1, //CJK UNIFIED IDEOGRAPH - 0xE540: 0x930A, //CJK UNIFIED IDEOGRAPH - 0xE541: 0x930B, //CJK UNIFIED IDEOGRAPH - 0xE542: 0x930C, //CJK UNIFIED IDEOGRAPH - 0xE543: 0x930D, //CJK UNIFIED IDEOGRAPH - 0xE544: 0x930E, //CJK UNIFIED IDEOGRAPH - 0xE545: 0x930F, //CJK UNIFIED IDEOGRAPH - 0xE546: 0x9310, //CJK UNIFIED IDEOGRAPH - 0xE547: 0x9311, //CJK UNIFIED IDEOGRAPH - 0xE548: 0x9312, //CJK UNIFIED IDEOGRAPH - 0xE549: 0x9313, //CJK UNIFIED IDEOGRAPH - 0xE54A: 0x9314, //CJK UNIFIED IDEOGRAPH - 0xE54B: 0x9315, //CJK UNIFIED IDEOGRAPH - 0xE54C: 0x9316, //CJK UNIFIED IDEOGRAPH - 0xE54D: 0x9317, //CJK UNIFIED IDEOGRAPH - 0xE54E: 0x9318, //CJK UNIFIED IDEOGRAPH - 0xE54F: 0x9319, //CJK UNIFIED IDEOGRAPH - 0xE550: 0x931A, //CJK UNIFIED IDEOGRAPH - 0xE551: 0x931B, //CJK UNIFIED IDEOGRAPH - 0xE552: 0x931C, //CJK UNIFIED IDEOGRAPH - 0xE553: 0x931D, //CJK UNIFIED IDEOGRAPH - 0xE554: 0x931E, //CJK UNIFIED IDEOGRAPH - 0xE555: 0x931F, //CJK UNIFIED IDEOGRAPH - 0xE556: 0x9320, //CJK UNIFIED IDEOGRAPH - 0xE557: 0x9321, //CJK UNIFIED IDEOGRAPH - 0xE558: 0x9322, //CJK UNIFIED IDEOGRAPH - 0xE559: 0x9323, //CJK UNIFIED IDEOGRAPH - 0xE55A: 0x9324, //CJK UNIFIED IDEOGRAPH - 0xE55B: 0x9325, //CJK UNIFIED IDEOGRAPH - 0xE55C: 0x9326, //CJK UNIFIED IDEOGRAPH - 0xE55D: 0x9327, //CJK UNIFIED IDEOGRAPH - 0xE55E: 0x9328, //CJK UNIFIED IDEOGRAPH - 0xE55F: 0x9329, //CJK UNIFIED IDEOGRAPH - 0xE560: 0x932A, //CJK UNIFIED IDEOGRAPH - 0xE561: 0x932B, //CJK UNIFIED IDEOGRAPH - 0xE562: 0x932C, //CJK UNIFIED IDEOGRAPH - 0xE563: 0x932D, //CJK UNIFIED IDEOGRAPH - 0xE564: 0x932E, //CJK UNIFIED IDEOGRAPH - 0xE565: 0x932F, //CJK UNIFIED IDEOGRAPH - 0xE566: 0x9330, //CJK UNIFIED IDEOGRAPH - 0xE567: 0x9331, //CJK UNIFIED IDEOGRAPH - 0xE568: 0x9332, //CJK UNIFIED IDEOGRAPH - 0xE569: 0x9333, //CJK UNIFIED IDEOGRAPH - 0xE56A: 0x9334, //CJK UNIFIED IDEOGRAPH - 0xE56B: 0x9335, //CJK UNIFIED IDEOGRAPH - 0xE56C: 0x9336, //CJK UNIFIED IDEOGRAPH - 0xE56D: 0x9337, //CJK UNIFIED IDEOGRAPH - 0xE56E: 0x9338, //CJK UNIFIED IDEOGRAPH - 0xE56F: 0x9339, //CJK UNIFIED IDEOGRAPH - 0xE570: 0x933A, //CJK UNIFIED IDEOGRAPH - 0xE571: 0x933B, //CJK UNIFIED IDEOGRAPH - 0xE572: 0x933C, //CJK UNIFIED IDEOGRAPH - 0xE573: 0x933D, //CJK UNIFIED IDEOGRAPH - 0xE574: 0x933F, //CJK UNIFIED IDEOGRAPH - 0xE575: 0x9340, //CJK UNIFIED IDEOGRAPH - 0xE576: 0x9341, //CJK UNIFIED IDEOGRAPH - 0xE577: 0x9342, //CJK UNIFIED IDEOGRAPH - 0xE578: 0x9343, //CJK UNIFIED IDEOGRAPH - 0xE579: 0x9344, //CJK UNIFIED IDEOGRAPH - 0xE57A: 0x9345, //CJK UNIFIED IDEOGRAPH - 0xE57B: 0x9346, //CJK UNIFIED IDEOGRAPH - 0xE57C: 0x9347, //CJK UNIFIED IDEOGRAPH - 0xE57D: 0x9348, //CJK UNIFIED IDEOGRAPH - 0xE57E: 0x9349, //CJK UNIFIED IDEOGRAPH - 0xE580: 0x934A, //CJK UNIFIED IDEOGRAPH - 0xE581: 0x934B, //CJK UNIFIED IDEOGRAPH - 0xE582: 0x934C, //CJK UNIFIED IDEOGRAPH - 0xE583: 0x934D, //CJK UNIFIED IDEOGRAPH - 0xE584: 0x934E, //CJK UNIFIED IDEOGRAPH - 0xE585: 0x934F, //CJK UNIFIED IDEOGRAPH - 0xE586: 0x9350, //CJK UNIFIED IDEOGRAPH - 0xE587: 0x9351, //CJK UNIFIED IDEOGRAPH - 0xE588: 0x9352, //CJK UNIFIED IDEOGRAPH - 0xE589: 0x9353, //CJK UNIFIED IDEOGRAPH - 0xE58A: 0x9354, //CJK UNIFIED IDEOGRAPH - 0xE58B: 0x9355, //CJK UNIFIED IDEOGRAPH - 0xE58C: 0x9356, //CJK UNIFIED IDEOGRAPH - 0xE58D: 0x9357, //CJK UNIFIED IDEOGRAPH - 0xE58E: 0x9358, //CJK UNIFIED IDEOGRAPH - 0xE58F: 0x9359, //CJK UNIFIED IDEOGRAPH - 0xE590: 0x935A, //CJK UNIFIED IDEOGRAPH - 0xE591: 0x935B, //CJK UNIFIED IDEOGRAPH - 0xE592: 0x935C, //CJK UNIFIED IDEOGRAPH - 0xE593: 0x935D, //CJK UNIFIED IDEOGRAPH - 0xE594: 0x935E, //CJK UNIFIED IDEOGRAPH - 0xE595: 0x935F, //CJK UNIFIED IDEOGRAPH - 0xE596: 0x9360, //CJK UNIFIED IDEOGRAPH - 0xE597: 0x9361, //CJK UNIFIED IDEOGRAPH - 0xE598: 0x9362, //CJK UNIFIED IDEOGRAPH - 0xE599: 0x9363, //CJK UNIFIED IDEOGRAPH - 0xE59A: 0x9364, //CJK UNIFIED IDEOGRAPH - 0xE59B: 0x9365, //CJK UNIFIED IDEOGRAPH - 0xE59C: 0x9366, //CJK UNIFIED IDEOGRAPH - 0xE59D: 0x9367, //CJK UNIFIED IDEOGRAPH - 0xE59E: 0x9368, //CJK UNIFIED IDEOGRAPH - 0xE59F: 0x9369, //CJK UNIFIED IDEOGRAPH - 0xE5A0: 0x936B, //CJK UNIFIED IDEOGRAPH - 0xE5A1: 0x6FC9, //CJK UNIFIED IDEOGRAPH - 0xE5A2: 0x6FA7, //CJK UNIFIED IDEOGRAPH - 0xE5A3: 0x6FB9, //CJK UNIFIED IDEOGRAPH - 0xE5A4: 0x6FB6, //CJK UNIFIED IDEOGRAPH - 0xE5A5: 0x6FC2, //CJK UNIFIED IDEOGRAPH - 0xE5A6: 0x6FE1, //CJK UNIFIED IDEOGRAPH - 0xE5A7: 0x6FEE, //CJK UNIFIED IDEOGRAPH - 0xE5A8: 0x6FDE, //CJK UNIFIED IDEOGRAPH - 0xE5A9: 0x6FE0, //CJK UNIFIED IDEOGRAPH - 0xE5AA: 0x6FEF, //CJK UNIFIED IDEOGRAPH - 0xE5AB: 0x701A, //CJK UNIFIED IDEOGRAPH - 0xE5AC: 0x7023, //CJK UNIFIED IDEOGRAPH - 0xE5AD: 0x701B, //CJK UNIFIED IDEOGRAPH - 0xE5AE: 0x7039, //CJK UNIFIED IDEOGRAPH - 0xE5AF: 0x7035, //CJK UNIFIED IDEOGRAPH - 0xE5B0: 0x704F, //CJK UNIFIED IDEOGRAPH - 0xE5B1: 0x705E, //CJK UNIFIED IDEOGRAPH - 0xE5B2: 0x5B80, //CJK UNIFIED IDEOGRAPH - 0xE5B3: 0x5B84, //CJK UNIFIED IDEOGRAPH - 0xE5B4: 0x5B95, //CJK UNIFIED IDEOGRAPH - 0xE5B5: 0x5B93, //CJK UNIFIED IDEOGRAPH - 0xE5B6: 0x5BA5, //CJK UNIFIED IDEOGRAPH - 0xE5B7: 0x5BB8, //CJK UNIFIED IDEOGRAPH - 0xE5B8: 0x752F, //CJK UNIFIED IDEOGRAPH - 0xE5B9: 0x9A9E, //CJK UNIFIED IDEOGRAPH - 0xE5BA: 0x6434, //CJK UNIFIED IDEOGRAPH - 0xE5BB: 0x5BE4, //CJK UNIFIED IDEOGRAPH - 0xE5BC: 0x5BEE, //CJK UNIFIED IDEOGRAPH - 0xE5BD: 0x8930, //CJK UNIFIED IDEOGRAPH - 0xE5BE: 0x5BF0, //CJK UNIFIED IDEOGRAPH - 0xE5BF: 0x8E47, //CJK UNIFIED IDEOGRAPH - 0xE5C0: 0x8B07, //CJK UNIFIED IDEOGRAPH - 0xE5C1: 0x8FB6, //CJK UNIFIED IDEOGRAPH - 0xE5C2: 0x8FD3, //CJK UNIFIED IDEOGRAPH - 0xE5C3: 0x8FD5, //CJK UNIFIED IDEOGRAPH - 0xE5C4: 0x8FE5, //CJK UNIFIED IDEOGRAPH - 0xE5C5: 0x8FEE, //CJK UNIFIED IDEOGRAPH - 0xE5C6: 0x8FE4, //CJK UNIFIED IDEOGRAPH - 0xE5C7: 0x8FE9, //CJK UNIFIED IDEOGRAPH - 0xE5C8: 0x8FE6, //CJK UNIFIED IDEOGRAPH - 0xE5C9: 0x8FF3, //CJK UNIFIED IDEOGRAPH - 0xE5CA: 0x8FE8, //CJK UNIFIED IDEOGRAPH - 0xE5CB: 0x9005, //CJK UNIFIED IDEOGRAPH - 0xE5CC: 0x9004, //CJK UNIFIED IDEOGRAPH - 0xE5CD: 0x900B, //CJK UNIFIED IDEOGRAPH - 0xE5CE: 0x9026, //CJK UNIFIED IDEOGRAPH - 0xE5CF: 0x9011, //CJK UNIFIED IDEOGRAPH - 0xE5D0: 0x900D, //CJK UNIFIED IDEOGRAPH - 0xE5D1: 0x9016, //CJK UNIFIED IDEOGRAPH - 0xE5D2: 0x9021, //CJK UNIFIED IDEOGRAPH - 0xE5D3: 0x9035, //CJK UNIFIED IDEOGRAPH - 0xE5D4: 0x9036, //CJK UNIFIED IDEOGRAPH - 0xE5D5: 0x902D, //CJK UNIFIED IDEOGRAPH - 0xE5D6: 0x902F, //CJK UNIFIED IDEOGRAPH - 0xE5D7: 0x9044, //CJK UNIFIED IDEOGRAPH - 0xE5D8: 0x9051, //CJK UNIFIED IDEOGRAPH - 0xE5D9: 0x9052, //CJK UNIFIED IDEOGRAPH - 0xE5DA: 0x9050, //CJK UNIFIED IDEOGRAPH - 0xE5DB: 0x9068, //CJK UNIFIED IDEOGRAPH - 0xE5DC: 0x9058, //CJK UNIFIED IDEOGRAPH - 0xE5DD: 0x9062, //CJK UNIFIED IDEOGRAPH - 0xE5DE: 0x905B, //CJK UNIFIED IDEOGRAPH - 0xE5DF: 0x66B9, //CJK UNIFIED IDEOGRAPH - 0xE5E0: 0x9074, //CJK UNIFIED IDEOGRAPH - 0xE5E1: 0x907D, //CJK UNIFIED IDEOGRAPH - 0xE5E2: 0x9082, //CJK UNIFIED IDEOGRAPH - 0xE5E3: 0x9088, //CJK UNIFIED IDEOGRAPH - 0xE5E4: 0x9083, //CJK UNIFIED IDEOGRAPH - 0xE5E5: 0x908B, //CJK UNIFIED IDEOGRAPH - 0xE5E6: 0x5F50, //CJK UNIFIED IDEOGRAPH - 0xE5E7: 0x5F57, //CJK UNIFIED IDEOGRAPH - 0xE5E8: 0x5F56, //CJK UNIFIED IDEOGRAPH - 0xE5E9: 0x5F58, //CJK UNIFIED IDEOGRAPH - 0xE5EA: 0x5C3B, //CJK UNIFIED IDEOGRAPH - 0xE5EB: 0x54AB, //CJK UNIFIED IDEOGRAPH - 0xE5EC: 0x5C50, //CJK UNIFIED IDEOGRAPH - 0xE5ED: 0x5C59, //CJK UNIFIED IDEOGRAPH - 0xE5EE: 0x5B71, //CJK UNIFIED IDEOGRAPH - 0xE5EF: 0x5C63, //CJK UNIFIED IDEOGRAPH - 0xE5F0: 0x5C66, //CJK UNIFIED IDEOGRAPH - 0xE5F1: 0x7FBC, //CJK UNIFIED IDEOGRAPH - 0xE5F2: 0x5F2A, //CJK UNIFIED IDEOGRAPH - 0xE5F3: 0x5F29, //CJK UNIFIED IDEOGRAPH - 0xE5F4: 0x5F2D, //CJK UNIFIED IDEOGRAPH - 0xE5F5: 0x8274, //CJK UNIFIED IDEOGRAPH - 0xE5F6: 0x5F3C, //CJK UNIFIED IDEOGRAPH - 0xE5F7: 0x9B3B, //CJK UNIFIED IDEOGRAPH - 0xE5F8: 0x5C6E, //CJK UNIFIED IDEOGRAPH - 0xE5F9: 0x5981, //CJK UNIFIED IDEOGRAPH - 0xE5FA: 0x5983, //CJK UNIFIED IDEOGRAPH - 0xE5FB: 0x598D, //CJK UNIFIED IDEOGRAPH - 0xE5FC: 0x59A9, //CJK UNIFIED IDEOGRAPH - 0xE5FD: 0x59AA, //CJK UNIFIED IDEOGRAPH - 0xE5FE: 0x59A3, //CJK UNIFIED IDEOGRAPH - 0xE640: 0x936C, //CJK UNIFIED IDEOGRAPH - 0xE641: 0x936D, //CJK UNIFIED IDEOGRAPH - 0xE642: 0x936E, //CJK UNIFIED IDEOGRAPH - 0xE643: 0x936F, //CJK UNIFIED IDEOGRAPH - 0xE644: 0x9370, //CJK UNIFIED IDEOGRAPH - 0xE645: 0x9371, //CJK UNIFIED IDEOGRAPH - 0xE646: 0x9372, //CJK UNIFIED IDEOGRAPH - 0xE647: 0x9373, //CJK UNIFIED IDEOGRAPH - 0xE648: 0x9374, //CJK UNIFIED IDEOGRAPH - 0xE649: 0x9375, //CJK UNIFIED IDEOGRAPH - 0xE64A: 0x9376, //CJK UNIFIED IDEOGRAPH - 0xE64B: 0x9377, //CJK UNIFIED IDEOGRAPH - 0xE64C: 0x9378, //CJK UNIFIED IDEOGRAPH - 0xE64D: 0x9379, //CJK UNIFIED IDEOGRAPH - 0xE64E: 0x937A, //CJK UNIFIED IDEOGRAPH - 0xE64F: 0x937B, //CJK UNIFIED IDEOGRAPH - 0xE650: 0x937C, //CJK UNIFIED IDEOGRAPH - 0xE651: 0x937D, //CJK UNIFIED IDEOGRAPH - 0xE652: 0x937E, //CJK UNIFIED IDEOGRAPH - 0xE653: 0x937F, //CJK UNIFIED IDEOGRAPH - 0xE654: 0x9380, //CJK UNIFIED IDEOGRAPH - 0xE655: 0x9381, //CJK UNIFIED IDEOGRAPH - 0xE656: 0x9382, //CJK UNIFIED IDEOGRAPH - 0xE657: 0x9383, //CJK UNIFIED IDEOGRAPH - 0xE658: 0x9384, //CJK UNIFIED IDEOGRAPH - 0xE659: 0x9385, //CJK UNIFIED IDEOGRAPH - 0xE65A: 0x9386, //CJK UNIFIED IDEOGRAPH - 0xE65B: 0x9387, //CJK UNIFIED IDEOGRAPH - 0xE65C: 0x9388, //CJK UNIFIED IDEOGRAPH - 0xE65D: 0x9389, //CJK UNIFIED IDEOGRAPH - 0xE65E: 0x938A, //CJK UNIFIED IDEOGRAPH - 0xE65F: 0x938B, //CJK UNIFIED IDEOGRAPH - 0xE660: 0x938C, //CJK UNIFIED IDEOGRAPH - 0xE661: 0x938D, //CJK UNIFIED IDEOGRAPH - 0xE662: 0x938E, //CJK UNIFIED IDEOGRAPH - 0xE663: 0x9390, //CJK UNIFIED IDEOGRAPH - 0xE664: 0x9391, //CJK UNIFIED IDEOGRAPH - 0xE665: 0x9392, //CJK UNIFIED IDEOGRAPH - 0xE666: 0x9393, //CJK UNIFIED IDEOGRAPH - 0xE667: 0x9394, //CJK UNIFIED IDEOGRAPH - 0xE668: 0x9395, //CJK UNIFIED IDEOGRAPH - 0xE669: 0x9396, //CJK UNIFIED IDEOGRAPH - 0xE66A: 0x9397, //CJK UNIFIED IDEOGRAPH - 0xE66B: 0x9398, //CJK UNIFIED IDEOGRAPH - 0xE66C: 0x9399, //CJK UNIFIED IDEOGRAPH - 0xE66D: 0x939A, //CJK UNIFIED IDEOGRAPH - 0xE66E: 0x939B, //CJK UNIFIED IDEOGRAPH - 0xE66F: 0x939C, //CJK UNIFIED IDEOGRAPH - 0xE670: 0x939D, //CJK UNIFIED IDEOGRAPH - 0xE671: 0x939E, //CJK UNIFIED IDEOGRAPH - 0xE672: 0x939F, //CJK UNIFIED IDEOGRAPH - 0xE673: 0x93A0, //CJK UNIFIED IDEOGRAPH - 0xE674: 0x93A1, //CJK UNIFIED IDEOGRAPH - 0xE675: 0x93A2, //CJK UNIFIED IDEOGRAPH - 0xE676: 0x93A3, //CJK UNIFIED IDEOGRAPH - 0xE677: 0x93A4, //CJK UNIFIED IDEOGRAPH - 0xE678: 0x93A5, //CJK UNIFIED IDEOGRAPH - 0xE679: 0x93A6, //CJK UNIFIED IDEOGRAPH - 0xE67A: 0x93A7, //CJK UNIFIED IDEOGRAPH - 0xE67B: 0x93A8, //CJK UNIFIED IDEOGRAPH - 0xE67C: 0x93A9, //CJK UNIFIED IDEOGRAPH - 0xE67D: 0x93AA, //CJK UNIFIED IDEOGRAPH - 0xE67E: 0x93AB, //CJK UNIFIED IDEOGRAPH - 0xE680: 0x93AC, //CJK UNIFIED IDEOGRAPH - 0xE681: 0x93AD, //CJK UNIFIED IDEOGRAPH - 0xE682: 0x93AE, //CJK UNIFIED IDEOGRAPH - 0xE683: 0x93AF, //CJK UNIFIED IDEOGRAPH - 0xE684: 0x93B0, //CJK UNIFIED IDEOGRAPH - 0xE685: 0x93B1, //CJK UNIFIED IDEOGRAPH - 0xE686: 0x93B2, //CJK UNIFIED IDEOGRAPH - 0xE687: 0x93B3, //CJK UNIFIED IDEOGRAPH - 0xE688: 0x93B4, //CJK UNIFIED IDEOGRAPH - 0xE689: 0x93B5, //CJK UNIFIED IDEOGRAPH - 0xE68A: 0x93B6, //CJK UNIFIED IDEOGRAPH - 0xE68B: 0x93B7, //CJK UNIFIED IDEOGRAPH - 0xE68C: 0x93B8, //CJK UNIFIED IDEOGRAPH - 0xE68D: 0x93B9, //CJK UNIFIED IDEOGRAPH - 0xE68E: 0x93BA, //CJK UNIFIED IDEOGRAPH - 0xE68F: 0x93BB, //CJK UNIFIED IDEOGRAPH - 0xE690: 0x93BC, //CJK UNIFIED IDEOGRAPH - 0xE691: 0x93BD, //CJK UNIFIED IDEOGRAPH - 0xE692: 0x93BE, //CJK UNIFIED IDEOGRAPH - 0xE693: 0x93BF, //CJK UNIFIED IDEOGRAPH - 0xE694: 0x93C0, //CJK UNIFIED IDEOGRAPH - 0xE695: 0x93C1, //CJK UNIFIED IDEOGRAPH - 0xE696: 0x93C2, //CJK UNIFIED IDEOGRAPH - 0xE697: 0x93C3, //CJK UNIFIED IDEOGRAPH - 0xE698: 0x93C4, //CJK UNIFIED IDEOGRAPH - 0xE699: 0x93C5, //CJK UNIFIED IDEOGRAPH - 0xE69A: 0x93C6, //CJK UNIFIED IDEOGRAPH - 0xE69B: 0x93C7, //CJK UNIFIED IDEOGRAPH - 0xE69C: 0x93C8, //CJK UNIFIED IDEOGRAPH - 0xE69D: 0x93C9, //CJK UNIFIED IDEOGRAPH - 0xE69E: 0x93CB, //CJK UNIFIED IDEOGRAPH - 0xE69F: 0x93CC, //CJK UNIFIED IDEOGRAPH - 0xE6A0: 0x93CD, //CJK UNIFIED IDEOGRAPH - 0xE6A1: 0x5997, //CJK UNIFIED IDEOGRAPH - 0xE6A2: 0x59CA, //CJK UNIFIED IDEOGRAPH - 0xE6A3: 0x59AB, //CJK UNIFIED IDEOGRAPH - 0xE6A4: 0x599E, //CJK UNIFIED IDEOGRAPH - 0xE6A5: 0x59A4, //CJK UNIFIED IDEOGRAPH - 0xE6A6: 0x59D2, //CJK UNIFIED IDEOGRAPH - 0xE6A7: 0x59B2, //CJK UNIFIED IDEOGRAPH - 0xE6A8: 0x59AF, //CJK UNIFIED IDEOGRAPH - 0xE6A9: 0x59D7, //CJK UNIFIED IDEOGRAPH - 0xE6AA: 0x59BE, //CJK UNIFIED IDEOGRAPH - 0xE6AB: 0x5A05, //CJK UNIFIED IDEOGRAPH - 0xE6AC: 0x5A06, //CJK UNIFIED IDEOGRAPH - 0xE6AD: 0x59DD, //CJK UNIFIED IDEOGRAPH - 0xE6AE: 0x5A08, //CJK UNIFIED IDEOGRAPH - 0xE6AF: 0x59E3, //CJK UNIFIED IDEOGRAPH - 0xE6B0: 0x59D8, //CJK UNIFIED IDEOGRAPH - 0xE6B1: 0x59F9, //CJK UNIFIED IDEOGRAPH - 0xE6B2: 0x5A0C, //CJK UNIFIED IDEOGRAPH - 0xE6B3: 0x5A09, //CJK UNIFIED IDEOGRAPH - 0xE6B4: 0x5A32, //CJK UNIFIED IDEOGRAPH - 0xE6B5: 0x5A34, //CJK UNIFIED IDEOGRAPH - 0xE6B6: 0x5A11, //CJK UNIFIED IDEOGRAPH - 0xE6B7: 0x5A23, //CJK UNIFIED IDEOGRAPH - 0xE6B8: 0x5A13, //CJK UNIFIED IDEOGRAPH - 0xE6B9: 0x5A40, //CJK UNIFIED IDEOGRAPH - 0xE6BA: 0x5A67, //CJK UNIFIED IDEOGRAPH - 0xE6BB: 0x5A4A, //CJK UNIFIED IDEOGRAPH - 0xE6BC: 0x5A55, //CJK UNIFIED IDEOGRAPH - 0xE6BD: 0x5A3C, //CJK UNIFIED IDEOGRAPH - 0xE6BE: 0x5A62, //CJK UNIFIED IDEOGRAPH - 0xE6BF: 0x5A75, //CJK UNIFIED IDEOGRAPH - 0xE6C0: 0x80EC, //CJK UNIFIED IDEOGRAPH - 0xE6C1: 0x5AAA, //CJK UNIFIED IDEOGRAPH - 0xE6C2: 0x5A9B, //CJK UNIFIED IDEOGRAPH - 0xE6C3: 0x5A77, //CJK UNIFIED IDEOGRAPH - 0xE6C4: 0x5A7A, //CJK UNIFIED IDEOGRAPH - 0xE6C5: 0x5ABE, //CJK UNIFIED IDEOGRAPH - 0xE6C6: 0x5AEB, //CJK UNIFIED IDEOGRAPH - 0xE6C7: 0x5AB2, //CJK UNIFIED IDEOGRAPH - 0xE6C8: 0x5AD2, //CJK UNIFIED IDEOGRAPH - 0xE6C9: 0x5AD4, //CJK UNIFIED IDEOGRAPH - 0xE6CA: 0x5AB8, //CJK UNIFIED IDEOGRAPH - 0xE6CB: 0x5AE0, //CJK UNIFIED IDEOGRAPH - 0xE6CC: 0x5AE3, //CJK UNIFIED IDEOGRAPH - 0xE6CD: 0x5AF1, //CJK UNIFIED IDEOGRAPH - 0xE6CE: 0x5AD6, //CJK UNIFIED IDEOGRAPH - 0xE6CF: 0x5AE6, //CJK UNIFIED IDEOGRAPH - 0xE6D0: 0x5AD8, //CJK UNIFIED IDEOGRAPH - 0xE6D1: 0x5ADC, //CJK UNIFIED IDEOGRAPH - 0xE6D2: 0x5B09, //CJK UNIFIED IDEOGRAPH - 0xE6D3: 0x5B17, //CJK UNIFIED IDEOGRAPH - 0xE6D4: 0x5B16, //CJK UNIFIED IDEOGRAPH - 0xE6D5: 0x5B32, //CJK UNIFIED IDEOGRAPH - 0xE6D6: 0x5B37, //CJK UNIFIED IDEOGRAPH - 0xE6D7: 0x5B40, //CJK UNIFIED IDEOGRAPH - 0xE6D8: 0x5C15, //CJK UNIFIED IDEOGRAPH - 0xE6D9: 0x5C1C, //CJK UNIFIED IDEOGRAPH - 0xE6DA: 0x5B5A, //CJK UNIFIED IDEOGRAPH - 0xE6DB: 0x5B65, //CJK UNIFIED IDEOGRAPH - 0xE6DC: 0x5B73, //CJK UNIFIED IDEOGRAPH - 0xE6DD: 0x5B51, //CJK UNIFIED IDEOGRAPH - 0xE6DE: 0x5B53, //CJK UNIFIED IDEOGRAPH - 0xE6DF: 0x5B62, //CJK UNIFIED IDEOGRAPH - 0xE6E0: 0x9A75, //CJK UNIFIED IDEOGRAPH - 0xE6E1: 0x9A77, //CJK UNIFIED IDEOGRAPH - 0xE6E2: 0x9A78, //CJK UNIFIED IDEOGRAPH - 0xE6E3: 0x9A7A, //CJK UNIFIED IDEOGRAPH - 0xE6E4: 0x9A7F, //CJK UNIFIED IDEOGRAPH - 0xE6E5: 0x9A7D, //CJK UNIFIED IDEOGRAPH - 0xE6E6: 0x9A80, //CJK UNIFIED IDEOGRAPH - 0xE6E7: 0x9A81, //CJK UNIFIED IDEOGRAPH - 0xE6E8: 0x9A85, //CJK UNIFIED IDEOGRAPH - 0xE6E9: 0x9A88, //CJK UNIFIED IDEOGRAPH - 0xE6EA: 0x9A8A, //CJK UNIFIED IDEOGRAPH - 0xE6EB: 0x9A90, //CJK UNIFIED IDEOGRAPH - 0xE6EC: 0x9A92, //CJK UNIFIED IDEOGRAPH - 0xE6ED: 0x9A93, //CJK UNIFIED IDEOGRAPH - 0xE6EE: 0x9A96, //CJK UNIFIED IDEOGRAPH - 0xE6EF: 0x9A98, //CJK UNIFIED IDEOGRAPH - 0xE6F0: 0x9A9B, //CJK UNIFIED IDEOGRAPH - 0xE6F1: 0x9A9C, //CJK UNIFIED IDEOGRAPH - 0xE6F2: 0x9A9D, //CJK UNIFIED IDEOGRAPH - 0xE6F3: 0x9A9F, //CJK UNIFIED IDEOGRAPH - 0xE6F4: 0x9AA0, //CJK UNIFIED IDEOGRAPH - 0xE6F5: 0x9AA2, //CJK UNIFIED IDEOGRAPH - 0xE6F6: 0x9AA3, //CJK UNIFIED IDEOGRAPH - 0xE6F7: 0x9AA5, //CJK UNIFIED IDEOGRAPH - 0xE6F8: 0x9AA7, //CJK UNIFIED IDEOGRAPH - 0xE6F9: 0x7E9F, //CJK UNIFIED IDEOGRAPH - 0xE6FA: 0x7EA1, //CJK UNIFIED IDEOGRAPH - 0xE6FB: 0x7EA3, //CJK UNIFIED IDEOGRAPH - 0xE6FC: 0x7EA5, //CJK UNIFIED IDEOGRAPH - 0xE6FD: 0x7EA8, //CJK UNIFIED IDEOGRAPH - 0xE6FE: 0x7EA9, //CJK UNIFIED IDEOGRAPH - 0xE740: 0x93CE, //CJK UNIFIED IDEOGRAPH - 0xE741: 0x93CF, //CJK UNIFIED IDEOGRAPH - 0xE742: 0x93D0, //CJK UNIFIED IDEOGRAPH - 0xE743: 0x93D1, //CJK UNIFIED IDEOGRAPH - 0xE744: 0x93D2, //CJK UNIFIED IDEOGRAPH - 0xE745: 0x93D3, //CJK UNIFIED IDEOGRAPH - 0xE746: 0x93D4, //CJK UNIFIED IDEOGRAPH - 0xE747: 0x93D5, //CJK UNIFIED IDEOGRAPH - 0xE748: 0x93D7, //CJK UNIFIED IDEOGRAPH - 0xE749: 0x93D8, //CJK UNIFIED IDEOGRAPH - 0xE74A: 0x93D9, //CJK UNIFIED IDEOGRAPH - 0xE74B: 0x93DA, //CJK UNIFIED IDEOGRAPH - 0xE74C: 0x93DB, //CJK UNIFIED IDEOGRAPH - 0xE74D: 0x93DC, //CJK UNIFIED IDEOGRAPH - 0xE74E: 0x93DD, //CJK UNIFIED IDEOGRAPH - 0xE74F: 0x93DE, //CJK UNIFIED IDEOGRAPH - 0xE750: 0x93DF, //CJK UNIFIED IDEOGRAPH - 0xE751: 0x93E0, //CJK UNIFIED IDEOGRAPH - 0xE752: 0x93E1, //CJK UNIFIED IDEOGRAPH - 0xE753: 0x93E2, //CJK UNIFIED IDEOGRAPH - 0xE754: 0x93E3, //CJK UNIFIED IDEOGRAPH - 0xE755: 0x93E4, //CJK UNIFIED IDEOGRAPH - 0xE756: 0x93E5, //CJK UNIFIED IDEOGRAPH - 0xE757: 0x93E6, //CJK UNIFIED IDEOGRAPH - 0xE758: 0x93E7, //CJK UNIFIED IDEOGRAPH - 0xE759: 0x93E8, //CJK UNIFIED IDEOGRAPH - 0xE75A: 0x93E9, //CJK UNIFIED IDEOGRAPH - 0xE75B: 0x93EA, //CJK UNIFIED IDEOGRAPH - 0xE75C: 0x93EB, //CJK UNIFIED IDEOGRAPH - 0xE75D: 0x93EC, //CJK UNIFIED IDEOGRAPH - 0xE75E: 0x93ED, //CJK UNIFIED IDEOGRAPH - 0xE75F: 0x93EE, //CJK UNIFIED IDEOGRAPH - 0xE760: 0x93EF, //CJK UNIFIED IDEOGRAPH - 0xE761: 0x93F0, //CJK UNIFIED IDEOGRAPH - 0xE762: 0x93F1, //CJK UNIFIED IDEOGRAPH - 0xE763: 0x93F2, //CJK UNIFIED IDEOGRAPH - 0xE764: 0x93F3, //CJK UNIFIED IDEOGRAPH - 0xE765: 0x93F4, //CJK UNIFIED IDEOGRAPH - 0xE766: 0x93F5, //CJK UNIFIED IDEOGRAPH - 0xE767: 0x93F6, //CJK UNIFIED IDEOGRAPH - 0xE768: 0x93F7, //CJK UNIFIED IDEOGRAPH - 0xE769: 0x93F8, //CJK UNIFIED IDEOGRAPH - 0xE76A: 0x93F9, //CJK UNIFIED IDEOGRAPH - 0xE76B: 0x93FA, //CJK UNIFIED IDEOGRAPH - 0xE76C: 0x93FB, //CJK UNIFIED IDEOGRAPH - 0xE76D: 0x93FC, //CJK UNIFIED IDEOGRAPH - 0xE76E: 0x93FD, //CJK UNIFIED IDEOGRAPH - 0xE76F: 0x93FE, //CJK UNIFIED IDEOGRAPH - 0xE770: 0x93FF, //CJK UNIFIED IDEOGRAPH - 0xE771: 0x9400, //CJK UNIFIED IDEOGRAPH - 0xE772: 0x9401, //CJK UNIFIED IDEOGRAPH - 0xE773: 0x9402, //CJK UNIFIED IDEOGRAPH - 0xE774: 0x9403, //CJK UNIFIED IDEOGRAPH - 0xE775: 0x9404, //CJK UNIFIED IDEOGRAPH - 0xE776: 0x9405, //CJK UNIFIED IDEOGRAPH - 0xE777: 0x9406, //CJK UNIFIED IDEOGRAPH - 0xE778: 0x9407, //CJK UNIFIED IDEOGRAPH - 0xE779: 0x9408, //CJK UNIFIED IDEOGRAPH - 0xE77A: 0x9409, //CJK UNIFIED IDEOGRAPH - 0xE77B: 0x940A, //CJK UNIFIED IDEOGRAPH - 0xE77C: 0x940B, //CJK UNIFIED IDEOGRAPH - 0xE77D: 0x940C, //CJK UNIFIED IDEOGRAPH - 0xE77E: 0x940D, //CJK UNIFIED IDEOGRAPH - 0xE780: 0x940E, //CJK UNIFIED IDEOGRAPH - 0xE781: 0x940F, //CJK UNIFIED IDEOGRAPH - 0xE782: 0x9410, //CJK UNIFIED IDEOGRAPH - 0xE783: 0x9411, //CJK UNIFIED IDEOGRAPH - 0xE784: 0x9412, //CJK UNIFIED IDEOGRAPH - 0xE785: 0x9413, //CJK UNIFIED IDEOGRAPH - 0xE786: 0x9414, //CJK UNIFIED IDEOGRAPH - 0xE787: 0x9415, //CJK UNIFIED IDEOGRAPH - 0xE788: 0x9416, //CJK UNIFIED IDEOGRAPH - 0xE789: 0x9417, //CJK UNIFIED IDEOGRAPH - 0xE78A: 0x9418, //CJK UNIFIED IDEOGRAPH - 0xE78B: 0x9419, //CJK UNIFIED IDEOGRAPH - 0xE78C: 0x941A, //CJK UNIFIED IDEOGRAPH - 0xE78D: 0x941B, //CJK UNIFIED IDEOGRAPH - 0xE78E: 0x941C, //CJK UNIFIED IDEOGRAPH - 0xE78F: 0x941D, //CJK UNIFIED IDEOGRAPH - 0xE790: 0x941E, //CJK UNIFIED IDEOGRAPH - 0xE791: 0x941F, //CJK UNIFIED IDEOGRAPH - 0xE792: 0x9420, //CJK UNIFIED IDEOGRAPH - 0xE793: 0x9421, //CJK UNIFIED IDEOGRAPH - 0xE794: 0x9422, //CJK UNIFIED IDEOGRAPH - 0xE795: 0x9423, //CJK UNIFIED IDEOGRAPH - 0xE796: 0x9424, //CJK UNIFIED IDEOGRAPH - 0xE797: 0x9425, //CJK UNIFIED IDEOGRAPH - 0xE798: 0x9426, //CJK UNIFIED IDEOGRAPH - 0xE799: 0x9427, //CJK UNIFIED IDEOGRAPH - 0xE79A: 0x9428, //CJK UNIFIED IDEOGRAPH - 0xE79B: 0x9429, //CJK UNIFIED IDEOGRAPH - 0xE79C: 0x942A, //CJK UNIFIED IDEOGRAPH - 0xE79D: 0x942B, //CJK UNIFIED IDEOGRAPH - 0xE79E: 0x942C, //CJK UNIFIED IDEOGRAPH - 0xE79F: 0x942D, //CJK UNIFIED IDEOGRAPH - 0xE7A0: 0x942E, //CJK UNIFIED IDEOGRAPH - 0xE7A1: 0x7EAD, //CJK UNIFIED IDEOGRAPH - 0xE7A2: 0x7EB0, //CJK UNIFIED IDEOGRAPH - 0xE7A3: 0x7EBE, //CJK UNIFIED IDEOGRAPH - 0xE7A4: 0x7EC0, //CJK UNIFIED IDEOGRAPH - 0xE7A5: 0x7EC1, //CJK UNIFIED IDEOGRAPH - 0xE7A6: 0x7EC2, //CJK UNIFIED IDEOGRAPH - 0xE7A7: 0x7EC9, //CJK UNIFIED IDEOGRAPH - 0xE7A8: 0x7ECB, //CJK UNIFIED IDEOGRAPH - 0xE7A9: 0x7ECC, //CJK UNIFIED IDEOGRAPH - 0xE7AA: 0x7ED0, //CJK UNIFIED IDEOGRAPH - 0xE7AB: 0x7ED4, //CJK UNIFIED IDEOGRAPH - 0xE7AC: 0x7ED7, //CJK UNIFIED IDEOGRAPH - 0xE7AD: 0x7EDB, //CJK UNIFIED IDEOGRAPH - 0xE7AE: 0x7EE0, //CJK UNIFIED IDEOGRAPH - 0xE7AF: 0x7EE1, //CJK UNIFIED IDEOGRAPH - 0xE7B0: 0x7EE8, //CJK UNIFIED IDEOGRAPH - 0xE7B1: 0x7EEB, //CJK UNIFIED IDEOGRAPH - 0xE7B2: 0x7EEE, //CJK UNIFIED IDEOGRAPH - 0xE7B3: 0x7EEF, //CJK UNIFIED IDEOGRAPH - 0xE7B4: 0x7EF1, //CJK UNIFIED IDEOGRAPH - 0xE7B5: 0x7EF2, //CJK UNIFIED IDEOGRAPH - 0xE7B6: 0x7F0D, //CJK UNIFIED IDEOGRAPH - 0xE7B7: 0x7EF6, //CJK UNIFIED IDEOGRAPH - 0xE7B8: 0x7EFA, //CJK UNIFIED IDEOGRAPH - 0xE7B9: 0x7EFB, //CJK UNIFIED IDEOGRAPH - 0xE7BA: 0x7EFE, //CJK UNIFIED IDEOGRAPH - 0xE7BB: 0x7F01, //CJK UNIFIED IDEOGRAPH - 0xE7BC: 0x7F02, //CJK UNIFIED IDEOGRAPH - 0xE7BD: 0x7F03, //CJK UNIFIED IDEOGRAPH - 0xE7BE: 0x7F07, //CJK UNIFIED IDEOGRAPH - 0xE7BF: 0x7F08, //CJK UNIFIED IDEOGRAPH - 0xE7C0: 0x7F0B, //CJK UNIFIED IDEOGRAPH - 0xE7C1: 0x7F0C, //CJK UNIFIED IDEOGRAPH - 0xE7C2: 0x7F0F, //CJK UNIFIED IDEOGRAPH - 0xE7C3: 0x7F11, //CJK UNIFIED IDEOGRAPH - 0xE7C4: 0x7F12, //CJK UNIFIED IDEOGRAPH - 0xE7C5: 0x7F17, //CJK UNIFIED IDEOGRAPH - 0xE7C6: 0x7F19, //CJK UNIFIED IDEOGRAPH - 0xE7C7: 0x7F1C, //CJK UNIFIED IDEOGRAPH - 0xE7C8: 0x7F1B, //CJK UNIFIED IDEOGRAPH - 0xE7C9: 0x7F1F, //CJK UNIFIED IDEOGRAPH - 0xE7CA: 0x7F21, //CJK UNIFIED IDEOGRAPH - 0xE7CB: 0x7F22, //CJK UNIFIED IDEOGRAPH - 0xE7CC: 0x7F23, //CJK UNIFIED IDEOGRAPH - 0xE7CD: 0x7F24, //CJK UNIFIED IDEOGRAPH - 0xE7CE: 0x7F25, //CJK UNIFIED IDEOGRAPH - 0xE7CF: 0x7F26, //CJK UNIFIED IDEOGRAPH - 0xE7D0: 0x7F27, //CJK UNIFIED IDEOGRAPH - 0xE7D1: 0x7F2A, //CJK UNIFIED IDEOGRAPH - 0xE7D2: 0x7F2B, //CJK UNIFIED IDEOGRAPH - 0xE7D3: 0x7F2C, //CJK UNIFIED IDEOGRAPH - 0xE7D4: 0x7F2D, //CJK UNIFIED IDEOGRAPH - 0xE7D5: 0x7F2F, //CJK UNIFIED IDEOGRAPH - 0xE7D6: 0x7F30, //CJK UNIFIED IDEOGRAPH - 0xE7D7: 0x7F31, //CJK UNIFIED IDEOGRAPH - 0xE7D8: 0x7F32, //CJK UNIFIED IDEOGRAPH - 0xE7D9: 0x7F33, //CJK UNIFIED IDEOGRAPH - 0xE7DA: 0x7F35, //CJK UNIFIED IDEOGRAPH - 0xE7DB: 0x5E7A, //CJK UNIFIED IDEOGRAPH - 0xE7DC: 0x757F, //CJK UNIFIED IDEOGRAPH - 0xE7DD: 0x5DDB, //CJK UNIFIED IDEOGRAPH - 0xE7DE: 0x753E, //CJK UNIFIED IDEOGRAPH - 0xE7DF: 0x9095, //CJK UNIFIED IDEOGRAPH - 0xE7E0: 0x738E, //CJK UNIFIED IDEOGRAPH - 0xE7E1: 0x7391, //CJK UNIFIED IDEOGRAPH - 0xE7E2: 0x73AE, //CJK UNIFIED IDEOGRAPH - 0xE7E3: 0x73A2, //CJK UNIFIED IDEOGRAPH - 0xE7E4: 0x739F, //CJK UNIFIED IDEOGRAPH - 0xE7E5: 0x73CF, //CJK UNIFIED IDEOGRAPH - 0xE7E6: 0x73C2, //CJK UNIFIED IDEOGRAPH - 0xE7E7: 0x73D1, //CJK UNIFIED IDEOGRAPH - 0xE7E8: 0x73B7, //CJK UNIFIED IDEOGRAPH - 0xE7E9: 0x73B3, //CJK UNIFIED IDEOGRAPH - 0xE7EA: 0x73C0, //CJK UNIFIED IDEOGRAPH - 0xE7EB: 0x73C9, //CJK UNIFIED IDEOGRAPH - 0xE7EC: 0x73C8, //CJK UNIFIED IDEOGRAPH - 0xE7ED: 0x73E5, //CJK UNIFIED IDEOGRAPH - 0xE7EE: 0x73D9, //CJK UNIFIED IDEOGRAPH - 0xE7EF: 0x987C, //CJK UNIFIED IDEOGRAPH - 0xE7F0: 0x740A, //CJK UNIFIED IDEOGRAPH - 0xE7F1: 0x73E9, //CJK UNIFIED IDEOGRAPH - 0xE7F2: 0x73E7, //CJK UNIFIED IDEOGRAPH - 0xE7F3: 0x73DE, //CJK UNIFIED IDEOGRAPH - 0xE7F4: 0x73BA, //CJK UNIFIED IDEOGRAPH - 0xE7F5: 0x73F2, //CJK UNIFIED IDEOGRAPH - 0xE7F6: 0x740F, //CJK UNIFIED IDEOGRAPH - 0xE7F7: 0x742A, //CJK UNIFIED IDEOGRAPH - 0xE7F8: 0x745B, //CJK UNIFIED IDEOGRAPH - 0xE7F9: 0x7426, //CJK UNIFIED IDEOGRAPH - 0xE7FA: 0x7425, //CJK UNIFIED IDEOGRAPH - 0xE7FB: 0x7428, //CJK UNIFIED IDEOGRAPH - 0xE7FC: 0x7430, //CJK UNIFIED IDEOGRAPH - 0xE7FD: 0x742E, //CJK UNIFIED IDEOGRAPH - 0xE7FE: 0x742C, //CJK UNIFIED IDEOGRAPH - 0xE840: 0x942F, //CJK UNIFIED IDEOGRAPH - 0xE841: 0x9430, //CJK UNIFIED IDEOGRAPH - 0xE842: 0x9431, //CJK UNIFIED IDEOGRAPH - 0xE843: 0x9432, //CJK UNIFIED IDEOGRAPH - 0xE844: 0x9433, //CJK UNIFIED IDEOGRAPH - 0xE845: 0x9434, //CJK UNIFIED IDEOGRAPH - 0xE846: 0x9435, //CJK UNIFIED IDEOGRAPH - 0xE847: 0x9436, //CJK UNIFIED IDEOGRAPH - 0xE848: 0x9437, //CJK UNIFIED IDEOGRAPH - 0xE849: 0x9438, //CJK UNIFIED IDEOGRAPH - 0xE84A: 0x9439, //CJK UNIFIED IDEOGRAPH - 0xE84B: 0x943A, //CJK UNIFIED IDEOGRAPH - 0xE84C: 0x943B, //CJK UNIFIED IDEOGRAPH - 0xE84D: 0x943C, //CJK UNIFIED IDEOGRAPH - 0xE84E: 0x943D, //CJK UNIFIED IDEOGRAPH - 0xE84F: 0x943F, //CJK UNIFIED IDEOGRAPH - 0xE850: 0x9440, //CJK UNIFIED IDEOGRAPH - 0xE851: 0x9441, //CJK UNIFIED IDEOGRAPH - 0xE852: 0x9442, //CJK UNIFIED IDEOGRAPH - 0xE853: 0x9443, //CJK UNIFIED IDEOGRAPH - 0xE854: 0x9444, //CJK UNIFIED IDEOGRAPH - 0xE855: 0x9445, //CJK UNIFIED IDEOGRAPH - 0xE856: 0x9446, //CJK UNIFIED IDEOGRAPH - 0xE857: 0x9447, //CJK UNIFIED IDEOGRAPH - 0xE858: 0x9448, //CJK UNIFIED IDEOGRAPH - 0xE859: 0x9449, //CJK UNIFIED IDEOGRAPH - 0xE85A: 0x944A, //CJK UNIFIED IDEOGRAPH - 0xE85B: 0x944B, //CJK UNIFIED IDEOGRAPH - 0xE85C: 0x944C, //CJK UNIFIED IDEOGRAPH - 0xE85D: 0x944D, //CJK UNIFIED IDEOGRAPH - 0xE85E: 0x944E, //CJK UNIFIED IDEOGRAPH - 0xE85F: 0x944F, //CJK UNIFIED IDEOGRAPH - 0xE860: 0x9450, //CJK UNIFIED IDEOGRAPH - 0xE861: 0x9451, //CJK UNIFIED IDEOGRAPH - 0xE862: 0x9452, //CJK UNIFIED IDEOGRAPH - 0xE863: 0x9453, //CJK UNIFIED IDEOGRAPH - 0xE864: 0x9454, //CJK UNIFIED IDEOGRAPH - 0xE865: 0x9455, //CJK UNIFIED IDEOGRAPH - 0xE866: 0x9456, //CJK UNIFIED IDEOGRAPH - 0xE867: 0x9457, //CJK UNIFIED IDEOGRAPH - 0xE868: 0x9458, //CJK UNIFIED IDEOGRAPH - 0xE869: 0x9459, //CJK UNIFIED IDEOGRAPH - 0xE86A: 0x945A, //CJK UNIFIED IDEOGRAPH - 0xE86B: 0x945B, //CJK UNIFIED IDEOGRAPH - 0xE86C: 0x945C, //CJK UNIFIED IDEOGRAPH - 0xE86D: 0x945D, //CJK UNIFIED IDEOGRAPH - 0xE86E: 0x945E, //CJK UNIFIED IDEOGRAPH - 0xE86F: 0x945F, //CJK UNIFIED IDEOGRAPH - 0xE870: 0x9460, //CJK UNIFIED IDEOGRAPH - 0xE871: 0x9461, //CJK UNIFIED IDEOGRAPH - 0xE872: 0x9462, //CJK UNIFIED IDEOGRAPH - 0xE873: 0x9463, //CJK UNIFIED IDEOGRAPH - 0xE874: 0x9464, //CJK UNIFIED IDEOGRAPH - 0xE875: 0x9465, //CJK UNIFIED IDEOGRAPH - 0xE876: 0x9466, //CJK UNIFIED IDEOGRAPH - 0xE877: 0x9467, //CJK UNIFIED IDEOGRAPH - 0xE878: 0x9468, //CJK UNIFIED IDEOGRAPH - 0xE879: 0x9469, //CJK UNIFIED IDEOGRAPH - 0xE87A: 0x946A, //CJK UNIFIED IDEOGRAPH - 0xE87B: 0x946C, //CJK UNIFIED IDEOGRAPH - 0xE87C: 0x946D, //CJK UNIFIED IDEOGRAPH - 0xE87D: 0x946E, //CJK UNIFIED IDEOGRAPH - 0xE87E: 0x946F, //CJK UNIFIED IDEOGRAPH - 0xE880: 0x9470, //CJK UNIFIED IDEOGRAPH - 0xE881: 0x9471, //CJK UNIFIED IDEOGRAPH - 0xE882: 0x9472, //CJK UNIFIED IDEOGRAPH - 0xE883: 0x9473, //CJK UNIFIED IDEOGRAPH - 0xE884: 0x9474, //CJK UNIFIED IDEOGRAPH - 0xE885: 0x9475, //CJK UNIFIED IDEOGRAPH - 0xE886: 0x9476, //CJK UNIFIED IDEOGRAPH - 0xE887: 0x9477, //CJK UNIFIED IDEOGRAPH - 0xE888: 0x9478, //CJK UNIFIED IDEOGRAPH - 0xE889: 0x9479, //CJK UNIFIED IDEOGRAPH - 0xE88A: 0x947A, //CJK UNIFIED IDEOGRAPH - 0xE88B: 0x947B, //CJK UNIFIED IDEOGRAPH - 0xE88C: 0x947C, //CJK UNIFIED IDEOGRAPH - 0xE88D: 0x947D, //CJK UNIFIED IDEOGRAPH - 0xE88E: 0x947E, //CJK UNIFIED IDEOGRAPH - 0xE88F: 0x947F, //CJK UNIFIED IDEOGRAPH - 0xE890: 0x9480, //CJK UNIFIED IDEOGRAPH - 0xE891: 0x9481, //CJK UNIFIED IDEOGRAPH - 0xE892: 0x9482, //CJK UNIFIED IDEOGRAPH - 0xE893: 0x9483, //CJK UNIFIED IDEOGRAPH - 0xE894: 0x9484, //CJK UNIFIED IDEOGRAPH - 0xE895: 0x9491, //CJK UNIFIED IDEOGRAPH - 0xE896: 0x9496, //CJK UNIFIED IDEOGRAPH - 0xE897: 0x9498, //CJK UNIFIED IDEOGRAPH - 0xE898: 0x94C7, //CJK UNIFIED IDEOGRAPH - 0xE899: 0x94CF, //CJK UNIFIED IDEOGRAPH - 0xE89A: 0x94D3, //CJK UNIFIED IDEOGRAPH - 0xE89B: 0x94D4, //CJK UNIFIED IDEOGRAPH - 0xE89C: 0x94DA, //CJK UNIFIED IDEOGRAPH - 0xE89D: 0x94E6, //CJK UNIFIED IDEOGRAPH - 0xE89E: 0x94FB, //CJK UNIFIED IDEOGRAPH - 0xE89F: 0x951C, //CJK UNIFIED IDEOGRAPH - 0xE8A0: 0x9520, //CJK UNIFIED IDEOGRAPH - 0xE8A1: 0x741B, //CJK UNIFIED IDEOGRAPH - 0xE8A2: 0x741A, //CJK UNIFIED IDEOGRAPH - 0xE8A3: 0x7441, //CJK UNIFIED IDEOGRAPH - 0xE8A4: 0x745C, //CJK UNIFIED IDEOGRAPH - 0xE8A5: 0x7457, //CJK UNIFIED IDEOGRAPH - 0xE8A6: 0x7455, //CJK UNIFIED IDEOGRAPH - 0xE8A7: 0x7459, //CJK UNIFIED IDEOGRAPH - 0xE8A8: 0x7477, //CJK UNIFIED IDEOGRAPH - 0xE8A9: 0x746D, //CJK UNIFIED IDEOGRAPH - 0xE8AA: 0x747E, //CJK UNIFIED IDEOGRAPH - 0xE8AB: 0x749C, //CJK UNIFIED IDEOGRAPH - 0xE8AC: 0x748E, //CJK UNIFIED IDEOGRAPH - 0xE8AD: 0x7480, //CJK UNIFIED IDEOGRAPH - 0xE8AE: 0x7481, //CJK UNIFIED IDEOGRAPH - 0xE8AF: 0x7487, //CJK UNIFIED IDEOGRAPH - 0xE8B0: 0x748B, //CJK UNIFIED IDEOGRAPH - 0xE8B1: 0x749E, //CJK UNIFIED IDEOGRAPH - 0xE8B2: 0x74A8, //CJK UNIFIED IDEOGRAPH - 0xE8B3: 0x74A9, //CJK UNIFIED IDEOGRAPH - 0xE8B4: 0x7490, //CJK UNIFIED IDEOGRAPH - 0xE8B5: 0x74A7, //CJK UNIFIED IDEOGRAPH - 0xE8B6: 0x74D2, //CJK UNIFIED IDEOGRAPH - 0xE8B7: 0x74BA, //CJK UNIFIED IDEOGRAPH - 0xE8B8: 0x97EA, //CJK UNIFIED IDEOGRAPH - 0xE8B9: 0x97EB, //CJK UNIFIED IDEOGRAPH - 0xE8BA: 0x97EC, //CJK UNIFIED IDEOGRAPH - 0xE8BB: 0x674C, //CJK UNIFIED IDEOGRAPH - 0xE8BC: 0x6753, //CJK UNIFIED IDEOGRAPH - 0xE8BD: 0x675E, //CJK UNIFIED IDEOGRAPH - 0xE8BE: 0x6748, //CJK UNIFIED IDEOGRAPH - 0xE8BF: 0x6769, //CJK UNIFIED IDEOGRAPH - 0xE8C0: 0x67A5, //CJK UNIFIED IDEOGRAPH - 0xE8C1: 0x6787, //CJK UNIFIED IDEOGRAPH - 0xE8C2: 0x676A, //CJK UNIFIED IDEOGRAPH - 0xE8C3: 0x6773, //CJK UNIFIED IDEOGRAPH - 0xE8C4: 0x6798, //CJK UNIFIED IDEOGRAPH - 0xE8C5: 0x67A7, //CJK UNIFIED IDEOGRAPH - 0xE8C6: 0x6775, //CJK UNIFIED IDEOGRAPH - 0xE8C7: 0x67A8, //CJK UNIFIED IDEOGRAPH - 0xE8C8: 0x679E, //CJK UNIFIED IDEOGRAPH - 0xE8C9: 0x67AD, //CJK UNIFIED IDEOGRAPH - 0xE8CA: 0x678B, //CJK UNIFIED IDEOGRAPH - 0xE8CB: 0x6777, //CJK UNIFIED IDEOGRAPH - 0xE8CC: 0x677C, //CJK UNIFIED IDEOGRAPH - 0xE8CD: 0x67F0, //CJK UNIFIED IDEOGRAPH - 0xE8CE: 0x6809, //CJK UNIFIED IDEOGRAPH - 0xE8CF: 0x67D8, //CJK UNIFIED IDEOGRAPH - 0xE8D0: 0x680A, //CJK UNIFIED IDEOGRAPH - 0xE8D1: 0x67E9, //CJK UNIFIED IDEOGRAPH - 0xE8D2: 0x67B0, //CJK UNIFIED IDEOGRAPH - 0xE8D3: 0x680C, //CJK UNIFIED IDEOGRAPH - 0xE8D4: 0x67D9, //CJK UNIFIED IDEOGRAPH - 0xE8D5: 0x67B5, //CJK UNIFIED IDEOGRAPH - 0xE8D6: 0x67DA, //CJK UNIFIED IDEOGRAPH - 0xE8D7: 0x67B3, //CJK UNIFIED IDEOGRAPH - 0xE8D8: 0x67DD, //CJK UNIFIED IDEOGRAPH - 0xE8D9: 0x6800, //CJK UNIFIED IDEOGRAPH - 0xE8DA: 0x67C3, //CJK UNIFIED IDEOGRAPH - 0xE8DB: 0x67B8, //CJK UNIFIED IDEOGRAPH - 0xE8DC: 0x67E2, //CJK UNIFIED IDEOGRAPH - 0xE8DD: 0x680E, //CJK UNIFIED IDEOGRAPH - 0xE8DE: 0x67C1, //CJK UNIFIED IDEOGRAPH - 0xE8DF: 0x67FD, //CJK UNIFIED IDEOGRAPH - 0xE8E0: 0x6832, //CJK UNIFIED IDEOGRAPH - 0xE8E1: 0x6833, //CJK UNIFIED IDEOGRAPH - 0xE8E2: 0x6860, //CJK UNIFIED IDEOGRAPH - 0xE8E3: 0x6861, //CJK UNIFIED IDEOGRAPH - 0xE8E4: 0x684E, //CJK UNIFIED IDEOGRAPH - 0xE8E5: 0x6862, //CJK UNIFIED IDEOGRAPH - 0xE8E6: 0x6844, //CJK UNIFIED IDEOGRAPH - 0xE8E7: 0x6864, //CJK UNIFIED IDEOGRAPH - 0xE8E8: 0x6883, //CJK UNIFIED IDEOGRAPH - 0xE8E9: 0x681D, //CJK UNIFIED IDEOGRAPH - 0xE8EA: 0x6855, //CJK UNIFIED IDEOGRAPH - 0xE8EB: 0x6866, //CJK UNIFIED IDEOGRAPH - 0xE8EC: 0x6841, //CJK UNIFIED IDEOGRAPH - 0xE8ED: 0x6867, //CJK UNIFIED IDEOGRAPH - 0xE8EE: 0x6840, //CJK UNIFIED IDEOGRAPH - 0xE8EF: 0x683E, //CJK UNIFIED IDEOGRAPH - 0xE8F0: 0x684A, //CJK UNIFIED IDEOGRAPH - 0xE8F1: 0x6849, //CJK UNIFIED IDEOGRAPH - 0xE8F2: 0x6829, //CJK UNIFIED IDEOGRAPH - 0xE8F3: 0x68B5, //CJK UNIFIED IDEOGRAPH - 0xE8F4: 0x688F, //CJK UNIFIED IDEOGRAPH - 0xE8F5: 0x6874, //CJK UNIFIED IDEOGRAPH - 0xE8F6: 0x6877, //CJK UNIFIED IDEOGRAPH - 0xE8F7: 0x6893, //CJK UNIFIED IDEOGRAPH - 0xE8F8: 0x686B, //CJK UNIFIED IDEOGRAPH - 0xE8F9: 0x68C2, //CJK UNIFIED IDEOGRAPH - 0xE8FA: 0x696E, //CJK UNIFIED IDEOGRAPH - 0xE8FB: 0x68FC, //CJK UNIFIED IDEOGRAPH - 0xE8FC: 0x691F, //CJK UNIFIED IDEOGRAPH - 0xE8FD: 0x6920, //CJK UNIFIED IDEOGRAPH - 0xE8FE: 0x68F9, //CJK UNIFIED IDEOGRAPH - 0xE940: 0x9527, //CJK UNIFIED IDEOGRAPH - 0xE941: 0x9533, //CJK UNIFIED IDEOGRAPH - 0xE942: 0x953D, //CJK UNIFIED IDEOGRAPH - 0xE943: 0x9543, //CJK UNIFIED IDEOGRAPH - 0xE944: 0x9548, //CJK UNIFIED IDEOGRAPH - 0xE945: 0x954B, //CJK UNIFIED IDEOGRAPH - 0xE946: 0x9555, //CJK UNIFIED IDEOGRAPH - 0xE947: 0x955A, //CJK UNIFIED IDEOGRAPH - 0xE948: 0x9560, //CJK UNIFIED IDEOGRAPH - 0xE949: 0x956E, //CJK UNIFIED IDEOGRAPH - 0xE94A: 0x9574, //CJK UNIFIED IDEOGRAPH - 0xE94B: 0x9575, //CJK UNIFIED IDEOGRAPH - 0xE94C: 0x9577, //CJK UNIFIED IDEOGRAPH - 0xE94D: 0x9578, //CJK UNIFIED IDEOGRAPH - 0xE94E: 0x9579, //CJK UNIFIED IDEOGRAPH - 0xE94F: 0x957A, //CJK UNIFIED IDEOGRAPH - 0xE950: 0x957B, //CJK UNIFIED IDEOGRAPH - 0xE951: 0x957C, //CJK UNIFIED IDEOGRAPH - 0xE952: 0x957D, //CJK UNIFIED IDEOGRAPH - 0xE953: 0x957E, //CJK UNIFIED IDEOGRAPH - 0xE954: 0x9580, //CJK UNIFIED IDEOGRAPH - 0xE955: 0x9581, //CJK UNIFIED IDEOGRAPH - 0xE956: 0x9582, //CJK UNIFIED IDEOGRAPH - 0xE957: 0x9583, //CJK UNIFIED IDEOGRAPH - 0xE958: 0x9584, //CJK UNIFIED IDEOGRAPH - 0xE959: 0x9585, //CJK UNIFIED IDEOGRAPH - 0xE95A: 0x9586, //CJK UNIFIED IDEOGRAPH - 0xE95B: 0x9587, //CJK UNIFIED IDEOGRAPH - 0xE95C: 0x9588, //CJK UNIFIED IDEOGRAPH - 0xE95D: 0x9589, //CJK UNIFIED IDEOGRAPH - 0xE95E: 0x958A, //CJK UNIFIED IDEOGRAPH - 0xE95F: 0x958B, //CJK UNIFIED IDEOGRAPH - 0xE960: 0x958C, //CJK UNIFIED IDEOGRAPH - 0xE961: 0x958D, //CJK UNIFIED IDEOGRAPH - 0xE962: 0x958E, //CJK UNIFIED IDEOGRAPH - 0xE963: 0x958F, //CJK UNIFIED IDEOGRAPH - 0xE964: 0x9590, //CJK UNIFIED IDEOGRAPH - 0xE965: 0x9591, //CJK UNIFIED IDEOGRAPH - 0xE966: 0x9592, //CJK UNIFIED IDEOGRAPH - 0xE967: 0x9593, //CJK UNIFIED IDEOGRAPH - 0xE968: 0x9594, //CJK UNIFIED IDEOGRAPH - 0xE969: 0x9595, //CJK UNIFIED IDEOGRAPH - 0xE96A: 0x9596, //CJK UNIFIED IDEOGRAPH - 0xE96B: 0x9597, //CJK UNIFIED IDEOGRAPH - 0xE96C: 0x9598, //CJK UNIFIED IDEOGRAPH - 0xE96D: 0x9599, //CJK UNIFIED IDEOGRAPH - 0xE96E: 0x959A, //CJK UNIFIED IDEOGRAPH - 0xE96F: 0x959B, //CJK UNIFIED IDEOGRAPH - 0xE970: 0x959C, //CJK UNIFIED IDEOGRAPH - 0xE971: 0x959D, //CJK UNIFIED IDEOGRAPH - 0xE972: 0x959E, //CJK UNIFIED IDEOGRAPH - 0xE973: 0x959F, //CJK UNIFIED IDEOGRAPH - 0xE974: 0x95A0, //CJK UNIFIED IDEOGRAPH - 0xE975: 0x95A1, //CJK UNIFIED IDEOGRAPH - 0xE976: 0x95A2, //CJK UNIFIED IDEOGRAPH - 0xE977: 0x95A3, //CJK UNIFIED IDEOGRAPH - 0xE978: 0x95A4, //CJK UNIFIED IDEOGRAPH - 0xE979: 0x95A5, //CJK UNIFIED IDEOGRAPH - 0xE97A: 0x95A6, //CJK UNIFIED IDEOGRAPH - 0xE97B: 0x95A7, //CJK UNIFIED IDEOGRAPH - 0xE97C: 0x95A8, //CJK UNIFIED IDEOGRAPH - 0xE97D: 0x95A9, //CJK UNIFIED IDEOGRAPH - 0xE97E: 0x95AA, //CJK UNIFIED IDEOGRAPH - 0xE980: 0x95AB, //CJK UNIFIED IDEOGRAPH - 0xE981: 0x95AC, //CJK UNIFIED IDEOGRAPH - 0xE982: 0x95AD, //CJK UNIFIED IDEOGRAPH - 0xE983: 0x95AE, //CJK UNIFIED IDEOGRAPH - 0xE984: 0x95AF, //CJK UNIFIED IDEOGRAPH - 0xE985: 0x95B0, //CJK UNIFIED IDEOGRAPH - 0xE986: 0x95B1, //CJK UNIFIED IDEOGRAPH - 0xE987: 0x95B2, //CJK UNIFIED IDEOGRAPH - 0xE988: 0x95B3, //CJK UNIFIED IDEOGRAPH - 0xE989: 0x95B4, //CJK UNIFIED IDEOGRAPH - 0xE98A: 0x95B5, //CJK UNIFIED IDEOGRAPH - 0xE98B: 0x95B6, //CJK UNIFIED IDEOGRAPH - 0xE98C: 0x95B7, //CJK UNIFIED IDEOGRAPH - 0xE98D: 0x95B8, //CJK UNIFIED IDEOGRAPH - 0xE98E: 0x95B9, //CJK UNIFIED IDEOGRAPH - 0xE98F: 0x95BA, //CJK UNIFIED IDEOGRAPH - 0xE990: 0x95BB, //CJK UNIFIED IDEOGRAPH - 0xE991: 0x95BC, //CJK UNIFIED IDEOGRAPH - 0xE992: 0x95BD, //CJK UNIFIED IDEOGRAPH - 0xE993: 0x95BE, //CJK UNIFIED IDEOGRAPH - 0xE994: 0x95BF, //CJK UNIFIED IDEOGRAPH - 0xE995: 0x95C0, //CJK UNIFIED IDEOGRAPH - 0xE996: 0x95C1, //CJK UNIFIED IDEOGRAPH - 0xE997: 0x95C2, //CJK UNIFIED IDEOGRAPH - 0xE998: 0x95C3, //CJK UNIFIED IDEOGRAPH - 0xE999: 0x95C4, //CJK UNIFIED IDEOGRAPH - 0xE99A: 0x95C5, //CJK UNIFIED IDEOGRAPH - 0xE99B: 0x95C6, //CJK UNIFIED IDEOGRAPH - 0xE99C: 0x95C7, //CJK UNIFIED IDEOGRAPH - 0xE99D: 0x95C8, //CJK UNIFIED IDEOGRAPH - 0xE99E: 0x95C9, //CJK UNIFIED IDEOGRAPH - 0xE99F: 0x95CA, //CJK UNIFIED IDEOGRAPH - 0xE9A0: 0x95CB, //CJK UNIFIED IDEOGRAPH - 0xE9A1: 0x6924, //CJK UNIFIED IDEOGRAPH - 0xE9A2: 0x68F0, //CJK UNIFIED IDEOGRAPH - 0xE9A3: 0x690B, //CJK UNIFIED IDEOGRAPH - 0xE9A4: 0x6901, //CJK UNIFIED IDEOGRAPH - 0xE9A5: 0x6957, //CJK UNIFIED IDEOGRAPH - 0xE9A6: 0x68E3, //CJK UNIFIED IDEOGRAPH - 0xE9A7: 0x6910, //CJK UNIFIED IDEOGRAPH - 0xE9A8: 0x6971, //CJK UNIFIED IDEOGRAPH - 0xE9A9: 0x6939, //CJK UNIFIED IDEOGRAPH - 0xE9AA: 0x6960, //CJK UNIFIED IDEOGRAPH - 0xE9AB: 0x6942, //CJK UNIFIED IDEOGRAPH - 0xE9AC: 0x695D, //CJK UNIFIED IDEOGRAPH - 0xE9AD: 0x6984, //CJK UNIFIED IDEOGRAPH - 0xE9AE: 0x696B, //CJK UNIFIED IDEOGRAPH - 0xE9AF: 0x6980, //CJK UNIFIED IDEOGRAPH - 0xE9B0: 0x6998, //CJK UNIFIED IDEOGRAPH - 0xE9B1: 0x6978, //CJK UNIFIED IDEOGRAPH - 0xE9B2: 0x6934, //CJK UNIFIED IDEOGRAPH - 0xE9B3: 0x69CC, //CJK UNIFIED IDEOGRAPH - 0xE9B4: 0x6987, //CJK UNIFIED IDEOGRAPH - 0xE9B5: 0x6988, //CJK UNIFIED IDEOGRAPH - 0xE9B6: 0x69CE, //CJK UNIFIED IDEOGRAPH - 0xE9B7: 0x6989, //CJK UNIFIED IDEOGRAPH - 0xE9B8: 0x6966, //CJK UNIFIED IDEOGRAPH - 0xE9B9: 0x6963, //CJK UNIFIED IDEOGRAPH - 0xE9BA: 0x6979, //CJK UNIFIED IDEOGRAPH - 0xE9BB: 0x699B, //CJK UNIFIED IDEOGRAPH - 0xE9BC: 0x69A7, //CJK UNIFIED IDEOGRAPH - 0xE9BD: 0x69BB, //CJK UNIFIED IDEOGRAPH - 0xE9BE: 0x69AB, //CJK UNIFIED IDEOGRAPH - 0xE9BF: 0x69AD, //CJK UNIFIED IDEOGRAPH - 0xE9C0: 0x69D4, //CJK UNIFIED IDEOGRAPH - 0xE9C1: 0x69B1, //CJK UNIFIED IDEOGRAPH - 0xE9C2: 0x69C1, //CJK UNIFIED IDEOGRAPH - 0xE9C3: 0x69CA, //CJK UNIFIED IDEOGRAPH - 0xE9C4: 0x69DF, //CJK UNIFIED IDEOGRAPH - 0xE9C5: 0x6995, //CJK UNIFIED IDEOGRAPH - 0xE9C6: 0x69E0, //CJK UNIFIED IDEOGRAPH - 0xE9C7: 0x698D, //CJK UNIFIED IDEOGRAPH - 0xE9C8: 0x69FF, //CJK UNIFIED IDEOGRAPH - 0xE9C9: 0x6A2F, //CJK UNIFIED IDEOGRAPH - 0xE9CA: 0x69ED, //CJK UNIFIED IDEOGRAPH - 0xE9CB: 0x6A17, //CJK UNIFIED IDEOGRAPH - 0xE9CC: 0x6A18, //CJK UNIFIED IDEOGRAPH - 0xE9CD: 0x6A65, //CJK UNIFIED IDEOGRAPH - 0xE9CE: 0x69F2, //CJK UNIFIED IDEOGRAPH - 0xE9CF: 0x6A44, //CJK UNIFIED IDEOGRAPH - 0xE9D0: 0x6A3E, //CJK UNIFIED IDEOGRAPH - 0xE9D1: 0x6AA0, //CJK UNIFIED IDEOGRAPH - 0xE9D2: 0x6A50, //CJK UNIFIED IDEOGRAPH - 0xE9D3: 0x6A5B, //CJK UNIFIED IDEOGRAPH - 0xE9D4: 0x6A35, //CJK UNIFIED IDEOGRAPH - 0xE9D5: 0x6A8E, //CJK UNIFIED IDEOGRAPH - 0xE9D6: 0x6A79, //CJK UNIFIED IDEOGRAPH - 0xE9D7: 0x6A3D, //CJK UNIFIED IDEOGRAPH - 0xE9D8: 0x6A28, //CJK UNIFIED IDEOGRAPH - 0xE9D9: 0x6A58, //CJK UNIFIED IDEOGRAPH - 0xE9DA: 0x6A7C, //CJK UNIFIED IDEOGRAPH - 0xE9DB: 0x6A91, //CJK UNIFIED IDEOGRAPH - 0xE9DC: 0x6A90, //CJK UNIFIED IDEOGRAPH - 0xE9DD: 0x6AA9, //CJK UNIFIED IDEOGRAPH - 0xE9DE: 0x6A97, //CJK UNIFIED IDEOGRAPH - 0xE9DF: 0x6AAB, //CJK UNIFIED IDEOGRAPH - 0xE9E0: 0x7337, //CJK UNIFIED IDEOGRAPH - 0xE9E1: 0x7352, //CJK UNIFIED IDEOGRAPH - 0xE9E2: 0x6B81, //CJK UNIFIED IDEOGRAPH - 0xE9E3: 0x6B82, //CJK UNIFIED IDEOGRAPH - 0xE9E4: 0x6B87, //CJK UNIFIED IDEOGRAPH - 0xE9E5: 0x6B84, //CJK UNIFIED IDEOGRAPH - 0xE9E6: 0x6B92, //CJK UNIFIED IDEOGRAPH - 0xE9E7: 0x6B93, //CJK UNIFIED IDEOGRAPH - 0xE9E8: 0x6B8D, //CJK UNIFIED IDEOGRAPH - 0xE9E9: 0x6B9A, //CJK UNIFIED IDEOGRAPH - 0xE9EA: 0x6B9B, //CJK UNIFIED IDEOGRAPH - 0xE9EB: 0x6BA1, //CJK UNIFIED IDEOGRAPH - 0xE9EC: 0x6BAA, //CJK UNIFIED IDEOGRAPH - 0xE9ED: 0x8F6B, //CJK UNIFIED IDEOGRAPH - 0xE9EE: 0x8F6D, //CJK UNIFIED IDEOGRAPH - 0xE9EF: 0x8F71, //CJK UNIFIED IDEOGRAPH - 0xE9F0: 0x8F72, //CJK UNIFIED IDEOGRAPH - 0xE9F1: 0x8F73, //CJK UNIFIED IDEOGRAPH - 0xE9F2: 0x8F75, //CJK UNIFIED IDEOGRAPH - 0xE9F3: 0x8F76, //CJK UNIFIED IDEOGRAPH - 0xE9F4: 0x8F78, //CJK UNIFIED IDEOGRAPH - 0xE9F5: 0x8F77, //CJK UNIFIED IDEOGRAPH - 0xE9F6: 0x8F79, //CJK UNIFIED IDEOGRAPH - 0xE9F7: 0x8F7A, //CJK UNIFIED IDEOGRAPH - 0xE9F8: 0x8F7C, //CJK UNIFIED IDEOGRAPH - 0xE9F9: 0x8F7E, //CJK UNIFIED IDEOGRAPH - 0xE9FA: 0x8F81, //CJK UNIFIED IDEOGRAPH - 0xE9FB: 0x8F82, //CJK UNIFIED IDEOGRAPH - 0xE9FC: 0x8F84, //CJK UNIFIED IDEOGRAPH - 0xE9FD: 0x8F87, //CJK UNIFIED IDEOGRAPH - 0xE9FE: 0x8F8B, //CJK UNIFIED IDEOGRAPH - 0xEA40: 0x95CC, //CJK UNIFIED IDEOGRAPH - 0xEA41: 0x95CD, //CJK UNIFIED IDEOGRAPH - 0xEA42: 0x95CE, //CJK UNIFIED IDEOGRAPH - 0xEA43: 0x95CF, //CJK UNIFIED IDEOGRAPH - 0xEA44: 0x95D0, //CJK UNIFIED IDEOGRAPH - 0xEA45: 0x95D1, //CJK UNIFIED IDEOGRAPH - 0xEA46: 0x95D2, //CJK UNIFIED IDEOGRAPH - 0xEA47: 0x95D3, //CJK UNIFIED IDEOGRAPH - 0xEA48: 0x95D4, //CJK UNIFIED IDEOGRAPH - 0xEA49: 0x95D5, //CJK UNIFIED IDEOGRAPH - 0xEA4A: 0x95D6, //CJK UNIFIED IDEOGRAPH - 0xEA4B: 0x95D7, //CJK UNIFIED IDEOGRAPH - 0xEA4C: 0x95D8, //CJK UNIFIED IDEOGRAPH - 0xEA4D: 0x95D9, //CJK UNIFIED IDEOGRAPH - 0xEA4E: 0x95DA, //CJK UNIFIED IDEOGRAPH - 0xEA4F: 0x95DB, //CJK UNIFIED IDEOGRAPH - 0xEA50: 0x95DC, //CJK UNIFIED IDEOGRAPH - 0xEA51: 0x95DD, //CJK UNIFIED IDEOGRAPH - 0xEA52: 0x95DE, //CJK UNIFIED IDEOGRAPH - 0xEA53: 0x95DF, //CJK UNIFIED IDEOGRAPH - 0xEA54: 0x95E0, //CJK UNIFIED IDEOGRAPH - 0xEA55: 0x95E1, //CJK UNIFIED IDEOGRAPH - 0xEA56: 0x95E2, //CJK UNIFIED IDEOGRAPH - 0xEA57: 0x95E3, //CJK UNIFIED IDEOGRAPH - 0xEA58: 0x95E4, //CJK UNIFIED IDEOGRAPH - 0xEA59: 0x95E5, //CJK UNIFIED IDEOGRAPH - 0xEA5A: 0x95E6, //CJK UNIFIED IDEOGRAPH - 0xEA5B: 0x95E7, //CJK UNIFIED IDEOGRAPH - 0xEA5C: 0x95EC, //CJK UNIFIED IDEOGRAPH - 0xEA5D: 0x95FF, //CJK UNIFIED IDEOGRAPH - 0xEA5E: 0x9607, //CJK UNIFIED IDEOGRAPH - 0xEA5F: 0x9613, //CJK UNIFIED IDEOGRAPH - 0xEA60: 0x9618, //CJK UNIFIED IDEOGRAPH - 0xEA61: 0x961B, //CJK UNIFIED IDEOGRAPH - 0xEA62: 0x961E, //CJK UNIFIED IDEOGRAPH - 0xEA63: 0x9620, //CJK UNIFIED IDEOGRAPH - 0xEA64: 0x9623, //CJK UNIFIED IDEOGRAPH - 0xEA65: 0x9624, //CJK UNIFIED IDEOGRAPH - 0xEA66: 0x9625, //CJK UNIFIED IDEOGRAPH - 0xEA67: 0x9626, //CJK UNIFIED IDEOGRAPH - 0xEA68: 0x9627, //CJK UNIFIED IDEOGRAPH - 0xEA69: 0x9628, //CJK UNIFIED IDEOGRAPH - 0xEA6A: 0x9629, //CJK UNIFIED IDEOGRAPH - 0xEA6B: 0x962B, //CJK UNIFIED IDEOGRAPH - 0xEA6C: 0x962C, //CJK UNIFIED IDEOGRAPH - 0xEA6D: 0x962D, //CJK UNIFIED IDEOGRAPH - 0xEA6E: 0x962F, //CJK UNIFIED IDEOGRAPH - 0xEA6F: 0x9630, //CJK UNIFIED IDEOGRAPH - 0xEA70: 0x9637, //CJK UNIFIED IDEOGRAPH - 0xEA71: 0x9638, //CJK UNIFIED IDEOGRAPH - 0xEA72: 0x9639, //CJK UNIFIED IDEOGRAPH - 0xEA73: 0x963A, //CJK UNIFIED IDEOGRAPH - 0xEA74: 0x963E, //CJK UNIFIED IDEOGRAPH - 0xEA75: 0x9641, //CJK UNIFIED IDEOGRAPH - 0xEA76: 0x9643, //CJK UNIFIED IDEOGRAPH - 0xEA77: 0x964A, //CJK UNIFIED IDEOGRAPH - 0xEA78: 0x964E, //CJK UNIFIED IDEOGRAPH - 0xEA79: 0x964F, //CJK UNIFIED IDEOGRAPH - 0xEA7A: 0x9651, //CJK UNIFIED IDEOGRAPH - 0xEA7B: 0x9652, //CJK UNIFIED IDEOGRAPH - 0xEA7C: 0x9653, //CJK UNIFIED IDEOGRAPH - 0xEA7D: 0x9656, //CJK UNIFIED IDEOGRAPH - 0xEA7E: 0x9657, //CJK UNIFIED IDEOGRAPH - 0xEA80: 0x9658, //CJK UNIFIED IDEOGRAPH - 0xEA81: 0x9659, //CJK UNIFIED IDEOGRAPH - 0xEA82: 0x965A, //CJK UNIFIED IDEOGRAPH - 0xEA83: 0x965C, //CJK UNIFIED IDEOGRAPH - 0xEA84: 0x965D, //CJK UNIFIED IDEOGRAPH - 0xEA85: 0x965E, //CJK UNIFIED IDEOGRAPH - 0xEA86: 0x9660, //CJK UNIFIED IDEOGRAPH - 0xEA87: 0x9663, //CJK UNIFIED IDEOGRAPH - 0xEA88: 0x9665, //CJK UNIFIED IDEOGRAPH - 0xEA89: 0x9666, //CJK UNIFIED IDEOGRAPH - 0xEA8A: 0x966B, //CJK UNIFIED IDEOGRAPH - 0xEA8B: 0x966D, //CJK UNIFIED IDEOGRAPH - 0xEA8C: 0x966E, //CJK UNIFIED IDEOGRAPH - 0xEA8D: 0x966F, //CJK UNIFIED IDEOGRAPH - 0xEA8E: 0x9670, //CJK UNIFIED IDEOGRAPH - 0xEA8F: 0x9671, //CJK UNIFIED IDEOGRAPH - 0xEA90: 0x9673, //CJK UNIFIED IDEOGRAPH - 0xEA91: 0x9678, //CJK UNIFIED IDEOGRAPH - 0xEA92: 0x9679, //CJK UNIFIED IDEOGRAPH - 0xEA93: 0x967A, //CJK UNIFIED IDEOGRAPH - 0xEA94: 0x967B, //CJK UNIFIED IDEOGRAPH - 0xEA95: 0x967C, //CJK UNIFIED IDEOGRAPH - 0xEA96: 0x967D, //CJK UNIFIED IDEOGRAPH - 0xEA97: 0x967E, //CJK UNIFIED IDEOGRAPH - 0xEA98: 0x967F, //CJK UNIFIED IDEOGRAPH - 0xEA99: 0x9680, //CJK UNIFIED IDEOGRAPH - 0xEA9A: 0x9681, //CJK UNIFIED IDEOGRAPH - 0xEA9B: 0x9682, //CJK UNIFIED IDEOGRAPH - 0xEA9C: 0x9683, //CJK UNIFIED IDEOGRAPH - 0xEA9D: 0x9684, //CJK UNIFIED IDEOGRAPH - 0xEA9E: 0x9687, //CJK UNIFIED IDEOGRAPH - 0xEA9F: 0x9689, //CJK UNIFIED IDEOGRAPH - 0xEAA0: 0x968A, //CJK UNIFIED IDEOGRAPH - 0xEAA1: 0x8F8D, //CJK UNIFIED IDEOGRAPH - 0xEAA2: 0x8F8E, //CJK UNIFIED IDEOGRAPH - 0xEAA3: 0x8F8F, //CJK UNIFIED IDEOGRAPH - 0xEAA4: 0x8F98, //CJK UNIFIED IDEOGRAPH - 0xEAA5: 0x8F9A, //CJK UNIFIED IDEOGRAPH - 0xEAA6: 0x8ECE, //CJK UNIFIED IDEOGRAPH - 0xEAA7: 0x620B, //CJK UNIFIED IDEOGRAPH - 0xEAA8: 0x6217, //CJK UNIFIED IDEOGRAPH - 0xEAA9: 0x621B, //CJK UNIFIED IDEOGRAPH - 0xEAAA: 0x621F, //CJK UNIFIED IDEOGRAPH - 0xEAAB: 0x6222, //CJK UNIFIED IDEOGRAPH - 0xEAAC: 0x6221, //CJK UNIFIED IDEOGRAPH - 0xEAAD: 0x6225, //CJK UNIFIED IDEOGRAPH - 0xEAAE: 0x6224, //CJK UNIFIED IDEOGRAPH - 0xEAAF: 0x622C, //CJK UNIFIED IDEOGRAPH - 0xEAB0: 0x81E7, //CJK UNIFIED IDEOGRAPH - 0xEAB1: 0x74EF, //CJK UNIFIED IDEOGRAPH - 0xEAB2: 0x74F4, //CJK UNIFIED IDEOGRAPH - 0xEAB3: 0x74FF, //CJK UNIFIED IDEOGRAPH - 0xEAB4: 0x750F, //CJK UNIFIED IDEOGRAPH - 0xEAB5: 0x7511, //CJK UNIFIED IDEOGRAPH - 0xEAB6: 0x7513, //CJK UNIFIED IDEOGRAPH - 0xEAB7: 0x6534, //CJK UNIFIED IDEOGRAPH - 0xEAB8: 0x65EE, //CJK UNIFIED IDEOGRAPH - 0xEAB9: 0x65EF, //CJK UNIFIED IDEOGRAPH - 0xEABA: 0x65F0, //CJK UNIFIED IDEOGRAPH - 0xEABB: 0x660A, //CJK UNIFIED IDEOGRAPH - 0xEABC: 0x6619, //CJK UNIFIED IDEOGRAPH - 0xEABD: 0x6772, //CJK UNIFIED IDEOGRAPH - 0xEABE: 0x6603, //CJK UNIFIED IDEOGRAPH - 0xEABF: 0x6615, //CJK UNIFIED IDEOGRAPH - 0xEAC0: 0x6600, //CJK UNIFIED IDEOGRAPH - 0xEAC1: 0x7085, //CJK UNIFIED IDEOGRAPH - 0xEAC2: 0x66F7, //CJK UNIFIED IDEOGRAPH - 0xEAC3: 0x661D, //CJK UNIFIED IDEOGRAPH - 0xEAC4: 0x6634, //CJK UNIFIED IDEOGRAPH - 0xEAC5: 0x6631, //CJK UNIFIED IDEOGRAPH - 0xEAC6: 0x6636, //CJK UNIFIED IDEOGRAPH - 0xEAC7: 0x6635, //CJK UNIFIED IDEOGRAPH - 0xEAC8: 0x8006, //CJK UNIFIED IDEOGRAPH - 0xEAC9: 0x665F, //CJK UNIFIED IDEOGRAPH - 0xEACA: 0x6654, //CJK UNIFIED IDEOGRAPH - 0xEACB: 0x6641, //CJK UNIFIED IDEOGRAPH - 0xEACC: 0x664F, //CJK UNIFIED IDEOGRAPH - 0xEACD: 0x6656, //CJK UNIFIED IDEOGRAPH - 0xEACE: 0x6661, //CJK UNIFIED IDEOGRAPH - 0xEACF: 0x6657, //CJK UNIFIED IDEOGRAPH - 0xEAD0: 0x6677, //CJK UNIFIED IDEOGRAPH - 0xEAD1: 0x6684, //CJK UNIFIED IDEOGRAPH - 0xEAD2: 0x668C, //CJK UNIFIED IDEOGRAPH - 0xEAD3: 0x66A7, //CJK UNIFIED IDEOGRAPH - 0xEAD4: 0x669D, //CJK UNIFIED IDEOGRAPH - 0xEAD5: 0x66BE, //CJK UNIFIED IDEOGRAPH - 0xEAD6: 0x66DB, //CJK UNIFIED IDEOGRAPH - 0xEAD7: 0x66DC, //CJK UNIFIED IDEOGRAPH - 0xEAD8: 0x66E6, //CJK UNIFIED IDEOGRAPH - 0xEAD9: 0x66E9, //CJK UNIFIED IDEOGRAPH - 0xEADA: 0x8D32, //CJK UNIFIED IDEOGRAPH - 0xEADB: 0x8D33, //CJK UNIFIED IDEOGRAPH - 0xEADC: 0x8D36, //CJK UNIFIED IDEOGRAPH - 0xEADD: 0x8D3B, //CJK UNIFIED IDEOGRAPH - 0xEADE: 0x8D3D, //CJK UNIFIED IDEOGRAPH - 0xEADF: 0x8D40, //CJK UNIFIED IDEOGRAPH - 0xEAE0: 0x8D45, //CJK UNIFIED IDEOGRAPH - 0xEAE1: 0x8D46, //CJK UNIFIED IDEOGRAPH - 0xEAE2: 0x8D48, //CJK UNIFIED IDEOGRAPH - 0xEAE3: 0x8D49, //CJK UNIFIED IDEOGRAPH - 0xEAE4: 0x8D47, //CJK UNIFIED IDEOGRAPH - 0xEAE5: 0x8D4D, //CJK UNIFIED IDEOGRAPH - 0xEAE6: 0x8D55, //CJK UNIFIED IDEOGRAPH - 0xEAE7: 0x8D59, //CJK UNIFIED IDEOGRAPH - 0xEAE8: 0x89C7, //CJK UNIFIED IDEOGRAPH - 0xEAE9: 0x89CA, //CJK UNIFIED IDEOGRAPH - 0xEAEA: 0x89CB, //CJK UNIFIED IDEOGRAPH - 0xEAEB: 0x89CC, //CJK UNIFIED IDEOGRAPH - 0xEAEC: 0x89CE, //CJK UNIFIED IDEOGRAPH - 0xEAED: 0x89CF, //CJK UNIFIED IDEOGRAPH - 0xEAEE: 0x89D0, //CJK UNIFIED IDEOGRAPH - 0xEAEF: 0x89D1, //CJK UNIFIED IDEOGRAPH - 0xEAF0: 0x726E, //CJK UNIFIED IDEOGRAPH - 0xEAF1: 0x729F, //CJK UNIFIED IDEOGRAPH - 0xEAF2: 0x725D, //CJK UNIFIED IDEOGRAPH - 0xEAF3: 0x7266, //CJK UNIFIED IDEOGRAPH - 0xEAF4: 0x726F, //CJK UNIFIED IDEOGRAPH - 0xEAF5: 0x727E, //CJK UNIFIED IDEOGRAPH - 0xEAF6: 0x727F, //CJK UNIFIED IDEOGRAPH - 0xEAF7: 0x7284, //CJK UNIFIED IDEOGRAPH - 0xEAF8: 0x728B, //CJK UNIFIED IDEOGRAPH - 0xEAF9: 0x728D, //CJK UNIFIED IDEOGRAPH - 0xEAFA: 0x728F, //CJK UNIFIED IDEOGRAPH - 0xEAFB: 0x7292, //CJK UNIFIED IDEOGRAPH - 0xEAFC: 0x6308, //CJK UNIFIED IDEOGRAPH - 0xEAFD: 0x6332, //CJK UNIFIED IDEOGRAPH - 0xEAFE: 0x63B0, //CJK UNIFIED IDEOGRAPH - 0xEB40: 0x968C, //CJK UNIFIED IDEOGRAPH - 0xEB41: 0x968E, //CJK UNIFIED IDEOGRAPH - 0xEB42: 0x9691, //CJK UNIFIED IDEOGRAPH - 0xEB43: 0x9692, //CJK UNIFIED IDEOGRAPH - 0xEB44: 0x9693, //CJK UNIFIED IDEOGRAPH - 0xEB45: 0x9695, //CJK UNIFIED IDEOGRAPH - 0xEB46: 0x9696, //CJK UNIFIED IDEOGRAPH - 0xEB47: 0x969A, //CJK UNIFIED IDEOGRAPH - 0xEB48: 0x969B, //CJK UNIFIED IDEOGRAPH - 0xEB49: 0x969D, //CJK UNIFIED IDEOGRAPH - 0xEB4A: 0x969E, //CJK UNIFIED IDEOGRAPH - 0xEB4B: 0x969F, //CJK UNIFIED IDEOGRAPH - 0xEB4C: 0x96A0, //CJK UNIFIED IDEOGRAPH - 0xEB4D: 0x96A1, //CJK UNIFIED IDEOGRAPH - 0xEB4E: 0x96A2, //CJK UNIFIED IDEOGRAPH - 0xEB4F: 0x96A3, //CJK UNIFIED IDEOGRAPH - 0xEB50: 0x96A4, //CJK UNIFIED IDEOGRAPH - 0xEB51: 0x96A5, //CJK UNIFIED IDEOGRAPH - 0xEB52: 0x96A6, //CJK UNIFIED IDEOGRAPH - 0xEB53: 0x96A8, //CJK UNIFIED IDEOGRAPH - 0xEB54: 0x96A9, //CJK UNIFIED IDEOGRAPH - 0xEB55: 0x96AA, //CJK UNIFIED IDEOGRAPH - 0xEB56: 0x96AB, //CJK UNIFIED IDEOGRAPH - 0xEB57: 0x96AC, //CJK UNIFIED IDEOGRAPH - 0xEB58: 0x96AD, //CJK UNIFIED IDEOGRAPH - 0xEB59: 0x96AE, //CJK UNIFIED IDEOGRAPH - 0xEB5A: 0x96AF, //CJK UNIFIED IDEOGRAPH - 0xEB5B: 0x96B1, //CJK UNIFIED IDEOGRAPH - 0xEB5C: 0x96B2, //CJK UNIFIED IDEOGRAPH - 0xEB5D: 0x96B4, //CJK UNIFIED IDEOGRAPH - 0xEB5E: 0x96B5, //CJK UNIFIED IDEOGRAPH - 0xEB5F: 0x96B7, //CJK UNIFIED IDEOGRAPH - 0xEB60: 0x96B8, //CJK UNIFIED IDEOGRAPH - 0xEB61: 0x96BA, //CJK UNIFIED IDEOGRAPH - 0xEB62: 0x96BB, //CJK UNIFIED IDEOGRAPH - 0xEB63: 0x96BF, //CJK UNIFIED IDEOGRAPH - 0xEB64: 0x96C2, //CJK UNIFIED IDEOGRAPH - 0xEB65: 0x96C3, //CJK UNIFIED IDEOGRAPH - 0xEB66: 0x96C8, //CJK UNIFIED IDEOGRAPH - 0xEB67: 0x96CA, //CJK UNIFIED IDEOGRAPH - 0xEB68: 0x96CB, //CJK UNIFIED IDEOGRAPH - 0xEB69: 0x96D0, //CJK UNIFIED IDEOGRAPH - 0xEB6A: 0x96D1, //CJK UNIFIED IDEOGRAPH - 0xEB6B: 0x96D3, //CJK UNIFIED IDEOGRAPH - 0xEB6C: 0x96D4, //CJK UNIFIED IDEOGRAPH - 0xEB6D: 0x96D6, //CJK UNIFIED IDEOGRAPH - 0xEB6E: 0x96D7, //CJK UNIFIED IDEOGRAPH - 0xEB6F: 0x96D8, //CJK UNIFIED IDEOGRAPH - 0xEB70: 0x96D9, //CJK UNIFIED IDEOGRAPH - 0xEB71: 0x96DA, //CJK UNIFIED IDEOGRAPH - 0xEB72: 0x96DB, //CJK UNIFIED IDEOGRAPH - 0xEB73: 0x96DC, //CJK UNIFIED IDEOGRAPH - 0xEB74: 0x96DD, //CJK UNIFIED IDEOGRAPH - 0xEB75: 0x96DE, //CJK UNIFIED IDEOGRAPH - 0xEB76: 0x96DF, //CJK UNIFIED IDEOGRAPH - 0xEB77: 0x96E1, //CJK UNIFIED IDEOGRAPH - 0xEB78: 0x96E2, //CJK UNIFIED IDEOGRAPH - 0xEB79: 0x96E3, //CJK UNIFIED IDEOGRAPH - 0xEB7A: 0x96E4, //CJK UNIFIED IDEOGRAPH - 0xEB7B: 0x96E5, //CJK UNIFIED IDEOGRAPH - 0xEB7C: 0x96E6, //CJK UNIFIED IDEOGRAPH - 0xEB7D: 0x96E7, //CJK UNIFIED IDEOGRAPH - 0xEB7E: 0x96EB, //CJK UNIFIED IDEOGRAPH - 0xEB80: 0x96EC, //CJK UNIFIED IDEOGRAPH - 0xEB81: 0x96ED, //CJK UNIFIED IDEOGRAPH - 0xEB82: 0x96EE, //CJK UNIFIED IDEOGRAPH - 0xEB83: 0x96F0, //CJK UNIFIED IDEOGRAPH - 0xEB84: 0x96F1, //CJK UNIFIED IDEOGRAPH - 0xEB85: 0x96F2, //CJK UNIFIED IDEOGRAPH - 0xEB86: 0x96F4, //CJK UNIFIED IDEOGRAPH - 0xEB87: 0x96F5, //CJK UNIFIED IDEOGRAPH - 0xEB88: 0x96F8, //CJK UNIFIED IDEOGRAPH - 0xEB89: 0x96FA, //CJK UNIFIED IDEOGRAPH - 0xEB8A: 0x96FB, //CJK UNIFIED IDEOGRAPH - 0xEB8B: 0x96FC, //CJK UNIFIED IDEOGRAPH - 0xEB8C: 0x96FD, //CJK UNIFIED IDEOGRAPH - 0xEB8D: 0x96FF, //CJK UNIFIED IDEOGRAPH - 0xEB8E: 0x9702, //CJK UNIFIED IDEOGRAPH - 0xEB8F: 0x9703, //CJK UNIFIED IDEOGRAPH - 0xEB90: 0x9705, //CJK UNIFIED IDEOGRAPH - 0xEB91: 0x970A, //CJK UNIFIED IDEOGRAPH - 0xEB92: 0x970B, //CJK UNIFIED IDEOGRAPH - 0xEB93: 0x970C, //CJK UNIFIED IDEOGRAPH - 0xEB94: 0x9710, //CJK UNIFIED IDEOGRAPH - 0xEB95: 0x9711, //CJK UNIFIED IDEOGRAPH - 0xEB96: 0x9712, //CJK UNIFIED IDEOGRAPH - 0xEB97: 0x9714, //CJK UNIFIED IDEOGRAPH - 0xEB98: 0x9715, //CJK UNIFIED IDEOGRAPH - 0xEB99: 0x9717, //CJK UNIFIED IDEOGRAPH - 0xEB9A: 0x9718, //CJK UNIFIED IDEOGRAPH - 0xEB9B: 0x9719, //CJK UNIFIED IDEOGRAPH - 0xEB9C: 0x971A, //CJK UNIFIED IDEOGRAPH - 0xEB9D: 0x971B, //CJK UNIFIED IDEOGRAPH - 0xEB9E: 0x971D, //CJK UNIFIED IDEOGRAPH - 0xEB9F: 0x971F, //CJK UNIFIED IDEOGRAPH - 0xEBA0: 0x9720, //CJK UNIFIED IDEOGRAPH - 0xEBA1: 0x643F, //CJK UNIFIED IDEOGRAPH - 0xEBA2: 0x64D8, //CJK UNIFIED IDEOGRAPH - 0xEBA3: 0x8004, //CJK UNIFIED IDEOGRAPH - 0xEBA4: 0x6BEA, //CJK UNIFIED IDEOGRAPH - 0xEBA5: 0x6BF3, //CJK UNIFIED IDEOGRAPH - 0xEBA6: 0x6BFD, //CJK UNIFIED IDEOGRAPH - 0xEBA7: 0x6BF5, //CJK UNIFIED IDEOGRAPH - 0xEBA8: 0x6BF9, //CJK UNIFIED IDEOGRAPH - 0xEBA9: 0x6C05, //CJK UNIFIED IDEOGRAPH - 0xEBAA: 0x6C07, //CJK UNIFIED IDEOGRAPH - 0xEBAB: 0x6C06, //CJK UNIFIED IDEOGRAPH - 0xEBAC: 0x6C0D, //CJK UNIFIED IDEOGRAPH - 0xEBAD: 0x6C15, //CJK UNIFIED IDEOGRAPH - 0xEBAE: 0x6C18, //CJK UNIFIED IDEOGRAPH - 0xEBAF: 0x6C19, //CJK UNIFIED IDEOGRAPH - 0xEBB0: 0x6C1A, //CJK UNIFIED IDEOGRAPH - 0xEBB1: 0x6C21, //CJK UNIFIED IDEOGRAPH - 0xEBB2: 0x6C29, //CJK UNIFIED IDEOGRAPH - 0xEBB3: 0x6C24, //CJK UNIFIED IDEOGRAPH - 0xEBB4: 0x6C2A, //CJK UNIFIED IDEOGRAPH - 0xEBB5: 0x6C32, //CJK UNIFIED IDEOGRAPH - 0xEBB6: 0x6535, //CJK UNIFIED IDEOGRAPH - 0xEBB7: 0x6555, //CJK UNIFIED IDEOGRAPH - 0xEBB8: 0x656B, //CJK UNIFIED IDEOGRAPH - 0xEBB9: 0x724D, //CJK UNIFIED IDEOGRAPH - 0xEBBA: 0x7252, //CJK UNIFIED IDEOGRAPH - 0xEBBB: 0x7256, //CJK UNIFIED IDEOGRAPH - 0xEBBC: 0x7230, //CJK UNIFIED IDEOGRAPH - 0xEBBD: 0x8662, //CJK UNIFIED IDEOGRAPH - 0xEBBE: 0x5216, //CJK UNIFIED IDEOGRAPH - 0xEBBF: 0x809F, //CJK UNIFIED IDEOGRAPH - 0xEBC0: 0x809C, //CJK UNIFIED IDEOGRAPH - 0xEBC1: 0x8093, //CJK UNIFIED IDEOGRAPH - 0xEBC2: 0x80BC, //CJK UNIFIED IDEOGRAPH - 0xEBC3: 0x670A, //CJK UNIFIED IDEOGRAPH - 0xEBC4: 0x80BD, //CJK UNIFIED IDEOGRAPH - 0xEBC5: 0x80B1, //CJK UNIFIED IDEOGRAPH - 0xEBC6: 0x80AB, //CJK UNIFIED IDEOGRAPH - 0xEBC7: 0x80AD, //CJK UNIFIED IDEOGRAPH - 0xEBC8: 0x80B4, //CJK UNIFIED IDEOGRAPH - 0xEBC9: 0x80B7, //CJK UNIFIED IDEOGRAPH - 0xEBCA: 0x80E7, //CJK UNIFIED IDEOGRAPH - 0xEBCB: 0x80E8, //CJK UNIFIED IDEOGRAPH - 0xEBCC: 0x80E9, //CJK UNIFIED IDEOGRAPH - 0xEBCD: 0x80EA, //CJK UNIFIED IDEOGRAPH - 0xEBCE: 0x80DB, //CJK UNIFIED IDEOGRAPH - 0xEBCF: 0x80C2, //CJK UNIFIED IDEOGRAPH - 0xEBD0: 0x80C4, //CJK UNIFIED IDEOGRAPH - 0xEBD1: 0x80D9, //CJK UNIFIED IDEOGRAPH - 0xEBD2: 0x80CD, //CJK UNIFIED IDEOGRAPH - 0xEBD3: 0x80D7, //CJK UNIFIED IDEOGRAPH - 0xEBD4: 0x6710, //CJK UNIFIED IDEOGRAPH - 0xEBD5: 0x80DD, //CJK UNIFIED IDEOGRAPH - 0xEBD6: 0x80EB, //CJK UNIFIED IDEOGRAPH - 0xEBD7: 0x80F1, //CJK UNIFIED IDEOGRAPH - 0xEBD8: 0x80F4, //CJK UNIFIED IDEOGRAPH - 0xEBD9: 0x80ED, //CJK UNIFIED IDEOGRAPH - 0xEBDA: 0x810D, //CJK UNIFIED IDEOGRAPH - 0xEBDB: 0x810E, //CJK UNIFIED IDEOGRAPH - 0xEBDC: 0x80F2, //CJK UNIFIED IDEOGRAPH - 0xEBDD: 0x80FC, //CJK UNIFIED IDEOGRAPH - 0xEBDE: 0x6715, //CJK UNIFIED IDEOGRAPH - 0xEBDF: 0x8112, //CJK UNIFIED IDEOGRAPH - 0xEBE0: 0x8C5A, //CJK UNIFIED IDEOGRAPH - 0xEBE1: 0x8136, //CJK UNIFIED IDEOGRAPH - 0xEBE2: 0x811E, //CJK UNIFIED IDEOGRAPH - 0xEBE3: 0x812C, //CJK UNIFIED IDEOGRAPH - 0xEBE4: 0x8118, //CJK UNIFIED IDEOGRAPH - 0xEBE5: 0x8132, //CJK UNIFIED IDEOGRAPH - 0xEBE6: 0x8148, //CJK UNIFIED IDEOGRAPH - 0xEBE7: 0x814C, //CJK UNIFIED IDEOGRAPH - 0xEBE8: 0x8153, //CJK UNIFIED IDEOGRAPH - 0xEBE9: 0x8174, //CJK UNIFIED IDEOGRAPH - 0xEBEA: 0x8159, //CJK UNIFIED IDEOGRAPH - 0xEBEB: 0x815A, //CJK UNIFIED IDEOGRAPH - 0xEBEC: 0x8171, //CJK UNIFIED IDEOGRAPH - 0xEBED: 0x8160, //CJK UNIFIED IDEOGRAPH - 0xEBEE: 0x8169, //CJK UNIFIED IDEOGRAPH - 0xEBEF: 0x817C, //CJK UNIFIED IDEOGRAPH - 0xEBF0: 0x817D, //CJK UNIFIED IDEOGRAPH - 0xEBF1: 0x816D, //CJK UNIFIED IDEOGRAPH - 0xEBF2: 0x8167, //CJK UNIFIED IDEOGRAPH - 0xEBF3: 0x584D, //CJK UNIFIED IDEOGRAPH - 0xEBF4: 0x5AB5, //CJK UNIFIED IDEOGRAPH - 0xEBF5: 0x8188, //CJK UNIFIED IDEOGRAPH - 0xEBF6: 0x8182, //CJK UNIFIED IDEOGRAPH - 0xEBF7: 0x8191, //CJK UNIFIED IDEOGRAPH - 0xEBF8: 0x6ED5, //CJK UNIFIED IDEOGRAPH - 0xEBF9: 0x81A3, //CJK UNIFIED IDEOGRAPH - 0xEBFA: 0x81AA, //CJK UNIFIED IDEOGRAPH - 0xEBFB: 0x81CC, //CJK UNIFIED IDEOGRAPH - 0xEBFC: 0x6726, //CJK UNIFIED IDEOGRAPH - 0xEBFD: 0x81CA, //CJK UNIFIED IDEOGRAPH - 0xEBFE: 0x81BB, //CJK UNIFIED IDEOGRAPH - 0xEC40: 0x9721, //CJK UNIFIED IDEOGRAPH - 0xEC41: 0x9722, //CJK UNIFIED IDEOGRAPH - 0xEC42: 0x9723, //CJK UNIFIED IDEOGRAPH - 0xEC43: 0x9724, //CJK UNIFIED IDEOGRAPH - 0xEC44: 0x9725, //CJK UNIFIED IDEOGRAPH - 0xEC45: 0x9726, //CJK UNIFIED IDEOGRAPH - 0xEC46: 0x9727, //CJK UNIFIED IDEOGRAPH - 0xEC47: 0x9728, //CJK UNIFIED IDEOGRAPH - 0xEC48: 0x9729, //CJK UNIFIED IDEOGRAPH - 0xEC49: 0x972B, //CJK UNIFIED IDEOGRAPH - 0xEC4A: 0x972C, //CJK UNIFIED IDEOGRAPH - 0xEC4B: 0x972E, //CJK UNIFIED IDEOGRAPH - 0xEC4C: 0x972F, //CJK UNIFIED IDEOGRAPH - 0xEC4D: 0x9731, //CJK UNIFIED IDEOGRAPH - 0xEC4E: 0x9733, //CJK UNIFIED IDEOGRAPH - 0xEC4F: 0x9734, //CJK UNIFIED IDEOGRAPH - 0xEC50: 0x9735, //CJK UNIFIED IDEOGRAPH - 0xEC51: 0x9736, //CJK UNIFIED IDEOGRAPH - 0xEC52: 0x9737, //CJK UNIFIED IDEOGRAPH - 0xEC53: 0x973A, //CJK UNIFIED IDEOGRAPH - 0xEC54: 0x973B, //CJK UNIFIED IDEOGRAPH - 0xEC55: 0x973C, //CJK UNIFIED IDEOGRAPH - 0xEC56: 0x973D, //CJK UNIFIED IDEOGRAPH - 0xEC57: 0x973F, //CJK UNIFIED IDEOGRAPH - 0xEC58: 0x9740, //CJK UNIFIED IDEOGRAPH - 0xEC59: 0x9741, //CJK UNIFIED IDEOGRAPH - 0xEC5A: 0x9742, //CJK UNIFIED IDEOGRAPH - 0xEC5B: 0x9743, //CJK UNIFIED IDEOGRAPH - 0xEC5C: 0x9744, //CJK UNIFIED IDEOGRAPH - 0xEC5D: 0x9745, //CJK UNIFIED IDEOGRAPH - 0xEC5E: 0x9746, //CJK UNIFIED IDEOGRAPH - 0xEC5F: 0x9747, //CJK UNIFIED IDEOGRAPH - 0xEC60: 0x9748, //CJK UNIFIED IDEOGRAPH - 0xEC61: 0x9749, //CJK UNIFIED IDEOGRAPH - 0xEC62: 0x974A, //CJK UNIFIED IDEOGRAPH - 0xEC63: 0x974B, //CJK UNIFIED IDEOGRAPH - 0xEC64: 0x974C, //CJK UNIFIED IDEOGRAPH - 0xEC65: 0x974D, //CJK UNIFIED IDEOGRAPH - 0xEC66: 0x974E, //CJK UNIFIED IDEOGRAPH - 0xEC67: 0x974F, //CJK UNIFIED IDEOGRAPH - 0xEC68: 0x9750, //CJK UNIFIED IDEOGRAPH - 0xEC69: 0x9751, //CJK UNIFIED IDEOGRAPH - 0xEC6A: 0x9754, //CJK UNIFIED IDEOGRAPH - 0xEC6B: 0x9755, //CJK UNIFIED IDEOGRAPH - 0xEC6C: 0x9757, //CJK UNIFIED IDEOGRAPH - 0xEC6D: 0x9758, //CJK UNIFIED IDEOGRAPH - 0xEC6E: 0x975A, //CJK UNIFIED IDEOGRAPH - 0xEC6F: 0x975C, //CJK UNIFIED IDEOGRAPH - 0xEC70: 0x975D, //CJK UNIFIED IDEOGRAPH - 0xEC71: 0x975F, //CJK UNIFIED IDEOGRAPH - 0xEC72: 0x9763, //CJK UNIFIED IDEOGRAPH - 0xEC73: 0x9764, //CJK UNIFIED IDEOGRAPH - 0xEC74: 0x9766, //CJK UNIFIED IDEOGRAPH - 0xEC75: 0x9767, //CJK UNIFIED IDEOGRAPH - 0xEC76: 0x9768, //CJK UNIFIED IDEOGRAPH - 0xEC77: 0x976A, //CJK UNIFIED IDEOGRAPH - 0xEC78: 0x976B, //CJK UNIFIED IDEOGRAPH - 0xEC79: 0x976C, //CJK UNIFIED IDEOGRAPH - 0xEC7A: 0x976D, //CJK UNIFIED IDEOGRAPH - 0xEC7B: 0x976E, //CJK UNIFIED IDEOGRAPH - 0xEC7C: 0x976F, //CJK UNIFIED IDEOGRAPH - 0xEC7D: 0x9770, //CJK UNIFIED IDEOGRAPH - 0xEC7E: 0x9771, //CJK UNIFIED IDEOGRAPH - 0xEC80: 0x9772, //CJK UNIFIED IDEOGRAPH - 0xEC81: 0x9775, //CJK UNIFIED IDEOGRAPH - 0xEC82: 0x9777, //CJK UNIFIED IDEOGRAPH - 0xEC83: 0x9778, //CJK UNIFIED IDEOGRAPH - 0xEC84: 0x9779, //CJK UNIFIED IDEOGRAPH - 0xEC85: 0x977A, //CJK UNIFIED IDEOGRAPH - 0xEC86: 0x977B, //CJK UNIFIED IDEOGRAPH - 0xEC87: 0x977D, //CJK UNIFIED IDEOGRAPH - 0xEC88: 0x977E, //CJK UNIFIED IDEOGRAPH - 0xEC89: 0x977F, //CJK UNIFIED IDEOGRAPH - 0xEC8A: 0x9780, //CJK UNIFIED IDEOGRAPH - 0xEC8B: 0x9781, //CJK UNIFIED IDEOGRAPH - 0xEC8C: 0x9782, //CJK UNIFIED IDEOGRAPH - 0xEC8D: 0x9783, //CJK UNIFIED IDEOGRAPH - 0xEC8E: 0x9784, //CJK UNIFIED IDEOGRAPH - 0xEC8F: 0x9786, //CJK UNIFIED IDEOGRAPH - 0xEC90: 0x9787, //CJK UNIFIED IDEOGRAPH - 0xEC91: 0x9788, //CJK UNIFIED IDEOGRAPH - 0xEC92: 0x9789, //CJK UNIFIED IDEOGRAPH - 0xEC93: 0x978A, //CJK UNIFIED IDEOGRAPH - 0xEC94: 0x978C, //CJK UNIFIED IDEOGRAPH - 0xEC95: 0x978E, //CJK UNIFIED IDEOGRAPH - 0xEC96: 0x978F, //CJK UNIFIED IDEOGRAPH - 0xEC97: 0x9790, //CJK UNIFIED IDEOGRAPH - 0xEC98: 0x9793, //CJK UNIFIED IDEOGRAPH - 0xEC99: 0x9795, //CJK UNIFIED IDEOGRAPH - 0xEC9A: 0x9796, //CJK UNIFIED IDEOGRAPH - 0xEC9B: 0x9797, //CJK UNIFIED IDEOGRAPH - 0xEC9C: 0x9799, //CJK UNIFIED IDEOGRAPH - 0xEC9D: 0x979A, //CJK UNIFIED IDEOGRAPH - 0xEC9E: 0x979B, //CJK UNIFIED IDEOGRAPH - 0xEC9F: 0x979C, //CJK UNIFIED IDEOGRAPH - 0xECA0: 0x979D, //CJK UNIFIED IDEOGRAPH - 0xECA1: 0x81C1, //CJK UNIFIED IDEOGRAPH - 0xECA2: 0x81A6, //CJK UNIFIED IDEOGRAPH - 0xECA3: 0x6B24, //CJK UNIFIED IDEOGRAPH - 0xECA4: 0x6B37, //CJK UNIFIED IDEOGRAPH - 0xECA5: 0x6B39, //CJK UNIFIED IDEOGRAPH - 0xECA6: 0x6B43, //CJK UNIFIED IDEOGRAPH - 0xECA7: 0x6B46, //CJK UNIFIED IDEOGRAPH - 0xECA8: 0x6B59, //CJK UNIFIED IDEOGRAPH - 0xECA9: 0x98D1, //CJK UNIFIED IDEOGRAPH - 0xECAA: 0x98D2, //CJK UNIFIED IDEOGRAPH - 0xECAB: 0x98D3, //CJK UNIFIED IDEOGRAPH - 0xECAC: 0x98D5, //CJK UNIFIED IDEOGRAPH - 0xECAD: 0x98D9, //CJK UNIFIED IDEOGRAPH - 0xECAE: 0x98DA, //CJK UNIFIED IDEOGRAPH - 0xECAF: 0x6BB3, //CJK UNIFIED IDEOGRAPH - 0xECB0: 0x5F40, //CJK UNIFIED IDEOGRAPH - 0xECB1: 0x6BC2, //CJK UNIFIED IDEOGRAPH - 0xECB2: 0x89F3, //CJK UNIFIED IDEOGRAPH - 0xECB3: 0x6590, //CJK UNIFIED IDEOGRAPH - 0xECB4: 0x9F51, //CJK UNIFIED IDEOGRAPH - 0xECB5: 0x6593, //CJK UNIFIED IDEOGRAPH - 0xECB6: 0x65BC, //CJK UNIFIED IDEOGRAPH - 0xECB7: 0x65C6, //CJK UNIFIED IDEOGRAPH - 0xECB8: 0x65C4, //CJK UNIFIED IDEOGRAPH - 0xECB9: 0x65C3, //CJK UNIFIED IDEOGRAPH - 0xECBA: 0x65CC, //CJK UNIFIED IDEOGRAPH - 0xECBB: 0x65CE, //CJK UNIFIED IDEOGRAPH - 0xECBC: 0x65D2, //CJK UNIFIED IDEOGRAPH - 0xECBD: 0x65D6, //CJK UNIFIED IDEOGRAPH - 0xECBE: 0x7080, //CJK UNIFIED IDEOGRAPH - 0xECBF: 0x709C, //CJK UNIFIED IDEOGRAPH - 0xECC0: 0x7096, //CJK UNIFIED IDEOGRAPH - 0xECC1: 0x709D, //CJK UNIFIED IDEOGRAPH - 0xECC2: 0x70BB, //CJK UNIFIED IDEOGRAPH - 0xECC3: 0x70C0, //CJK UNIFIED IDEOGRAPH - 0xECC4: 0x70B7, //CJK UNIFIED IDEOGRAPH - 0xECC5: 0x70AB, //CJK UNIFIED IDEOGRAPH - 0xECC6: 0x70B1, //CJK UNIFIED IDEOGRAPH - 0xECC7: 0x70E8, //CJK UNIFIED IDEOGRAPH - 0xECC8: 0x70CA, //CJK UNIFIED IDEOGRAPH - 0xECC9: 0x7110, //CJK UNIFIED IDEOGRAPH - 0xECCA: 0x7113, //CJK UNIFIED IDEOGRAPH - 0xECCB: 0x7116, //CJK UNIFIED IDEOGRAPH - 0xECCC: 0x712F, //CJK UNIFIED IDEOGRAPH - 0xECCD: 0x7131, //CJK UNIFIED IDEOGRAPH - 0xECCE: 0x7173, //CJK UNIFIED IDEOGRAPH - 0xECCF: 0x715C, //CJK UNIFIED IDEOGRAPH - 0xECD0: 0x7168, //CJK UNIFIED IDEOGRAPH - 0xECD1: 0x7145, //CJK UNIFIED IDEOGRAPH - 0xECD2: 0x7172, //CJK UNIFIED IDEOGRAPH - 0xECD3: 0x714A, //CJK UNIFIED IDEOGRAPH - 0xECD4: 0x7178, //CJK UNIFIED IDEOGRAPH - 0xECD5: 0x717A, //CJK UNIFIED IDEOGRAPH - 0xECD6: 0x7198, //CJK UNIFIED IDEOGRAPH - 0xECD7: 0x71B3, //CJK UNIFIED IDEOGRAPH - 0xECD8: 0x71B5, //CJK UNIFIED IDEOGRAPH - 0xECD9: 0x71A8, //CJK UNIFIED IDEOGRAPH - 0xECDA: 0x71A0, //CJK UNIFIED IDEOGRAPH - 0xECDB: 0x71E0, //CJK UNIFIED IDEOGRAPH - 0xECDC: 0x71D4, //CJK UNIFIED IDEOGRAPH - 0xECDD: 0x71E7, //CJK UNIFIED IDEOGRAPH - 0xECDE: 0x71F9, //CJK UNIFIED IDEOGRAPH - 0xECDF: 0x721D, //CJK UNIFIED IDEOGRAPH - 0xECE0: 0x7228, //CJK UNIFIED IDEOGRAPH - 0xECE1: 0x706C, //CJK UNIFIED IDEOGRAPH - 0xECE2: 0x7118, //CJK UNIFIED IDEOGRAPH - 0xECE3: 0x7166, //CJK UNIFIED IDEOGRAPH - 0xECE4: 0x71B9, //CJK UNIFIED IDEOGRAPH - 0xECE5: 0x623E, //CJK UNIFIED IDEOGRAPH - 0xECE6: 0x623D, //CJK UNIFIED IDEOGRAPH - 0xECE7: 0x6243, //CJK UNIFIED IDEOGRAPH - 0xECE8: 0x6248, //CJK UNIFIED IDEOGRAPH - 0xECE9: 0x6249, //CJK UNIFIED IDEOGRAPH - 0xECEA: 0x793B, //CJK UNIFIED IDEOGRAPH - 0xECEB: 0x7940, //CJK UNIFIED IDEOGRAPH - 0xECEC: 0x7946, //CJK UNIFIED IDEOGRAPH - 0xECED: 0x7949, //CJK UNIFIED IDEOGRAPH - 0xECEE: 0x795B, //CJK UNIFIED IDEOGRAPH - 0xECEF: 0x795C, //CJK UNIFIED IDEOGRAPH - 0xECF0: 0x7953, //CJK UNIFIED IDEOGRAPH - 0xECF1: 0x795A, //CJK UNIFIED IDEOGRAPH - 0xECF2: 0x7962, //CJK UNIFIED IDEOGRAPH - 0xECF3: 0x7957, //CJK UNIFIED IDEOGRAPH - 0xECF4: 0x7960, //CJK UNIFIED IDEOGRAPH - 0xECF5: 0x796F, //CJK UNIFIED IDEOGRAPH - 0xECF6: 0x7967, //CJK UNIFIED IDEOGRAPH - 0xECF7: 0x797A, //CJK UNIFIED IDEOGRAPH - 0xECF8: 0x7985, //CJK UNIFIED IDEOGRAPH - 0xECF9: 0x798A, //CJK UNIFIED IDEOGRAPH - 0xECFA: 0x799A, //CJK UNIFIED IDEOGRAPH - 0xECFB: 0x79A7, //CJK UNIFIED IDEOGRAPH - 0xECFC: 0x79B3, //CJK UNIFIED IDEOGRAPH - 0xECFD: 0x5FD1, //CJK UNIFIED IDEOGRAPH - 0xECFE: 0x5FD0, //CJK UNIFIED IDEOGRAPH - 0xED40: 0x979E, //CJK UNIFIED IDEOGRAPH - 0xED41: 0x979F, //CJK UNIFIED IDEOGRAPH - 0xED42: 0x97A1, //CJK UNIFIED IDEOGRAPH - 0xED43: 0x97A2, //CJK UNIFIED IDEOGRAPH - 0xED44: 0x97A4, //CJK UNIFIED IDEOGRAPH - 0xED45: 0x97A5, //CJK UNIFIED IDEOGRAPH - 0xED46: 0x97A6, //CJK UNIFIED IDEOGRAPH - 0xED47: 0x97A7, //CJK UNIFIED IDEOGRAPH - 0xED48: 0x97A8, //CJK UNIFIED IDEOGRAPH - 0xED49: 0x97A9, //CJK UNIFIED IDEOGRAPH - 0xED4A: 0x97AA, //CJK UNIFIED IDEOGRAPH - 0xED4B: 0x97AC, //CJK UNIFIED IDEOGRAPH - 0xED4C: 0x97AE, //CJK UNIFIED IDEOGRAPH - 0xED4D: 0x97B0, //CJK UNIFIED IDEOGRAPH - 0xED4E: 0x97B1, //CJK UNIFIED IDEOGRAPH - 0xED4F: 0x97B3, //CJK UNIFIED IDEOGRAPH - 0xED50: 0x97B5, //CJK UNIFIED IDEOGRAPH - 0xED51: 0x97B6, //CJK UNIFIED IDEOGRAPH - 0xED52: 0x97B7, //CJK UNIFIED IDEOGRAPH - 0xED53: 0x97B8, //CJK UNIFIED IDEOGRAPH - 0xED54: 0x97B9, //CJK UNIFIED IDEOGRAPH - 0xED55: 0x97BA, //CJK UNIFIED IDEOGRAPH - 0xED56: 0x97BB, //CJK UNIFIED IDEOGRAPH - 0xED57: 0x97BC, //CJK UNIFIED IDEOGRAPH - 0xED58: 0x97BD, //CJK UNIFIED IDEOGRAPH - 0xED59: 0x97BE, //CJK UNIFIED IDEOGRAPH - 0xED5A: 0x97BF, //CJK UNIFIED IDEOGRAPH - 0xED5B: 0x97C0, //CJK UNIFIED IDEOGRAPH - 0xED5C: 0x97C1, //CJK UNIFIED IDEOGRAPH - 0xED5D: 0x97C2, //CJK UNIFIED IDEOGRAPH - 0xED5E: 0x97C3, //CJK UNIFIED IDEOGRAPH - 0xED5F: 0x97C4, //CJK UNIFIED IDEOGRAPH - 0xED60: 0x97C5, //CJK UNIFIED IDEOGRAPH - 0xED61: 0x97C6, //CJK UNIFIED IDEOGRAPH - 0xED62: 0x97C7, //CJK UNIFIED IDEOGRAPH - 0xED63: 0x97C8, //CJK UNIFIED IDEOGRAPH - 0xED64: 0x97C9, //CJK UNIFIED IDEOGRAPH - 0xED65: 0x97CA, //CJK UNIFIED IDEOGRAPH - 0xED66: 0x97CB, //CJK UNIFIED IDEOGRAPH - 0xED67: 0x97CC, //CJK UNIFIED IDEOGRAPH - 0xED68: 0x97CD, //CJK UNIFIED IDEOGRAPH - 0xED69: 0x97CE, //CJK UNIFIED IDEOGRAPH - 0xED6A: 0x97CF, //CJK UNIFIED IDEOGRAPH - 0xED6B: 0x97D0, //CJK UNIFIED IDEOGRAPH - 0xED6C: 0x97D1, //CJK UNIFIED IDEOGRAPH - 0xED6D: 0x97D2, //CJK UNIFIED IDEOGRAPH - 0xED6E: 0x97D3, //CJK UNIFIED IDEOGRAPH - 0xED6F: 0x97D4, //CJK UNIFIED IDEOGRAPH - 0xED70: 0x97D5, //CJK UNIFIED IDEOGRAPH - 0xED71: 0x97D6, //CJK UNIFIED IDEOGRAPH - 0xED72: 0x97D7, //CJK UNIFIED IDEOGRAPH - 0xED73: 0x97D8, //CJK UNIFIED IDEOGRAPH - 0xED74: 0x97D9, //CJK UNIFIED IDEOGRAPH - 0xED75: 0x97DA, //CJK UNIFIED IDEOGRAPH - 0xED76: 0x97DB, //CJK UNIFIED IDEOGRAPH - 0xED77: 0x97DC, //CJK UNIFIED IDEOGRAPH - 0xED78: 0x97DD, //CJK UNIFIED IDEOGRAPH - 0xED79: 0x97DE, //CJK UNIFIED IDEOGRAPH - 0xED7A: 0x97DF, //CJK UNIFIED IDEOGRAPH - 0xED7B: 0x97E0, //CJK UNIFIED IDEOGRAPH - 0xED7C: 0x97E1, //CJK UNIFIED IDEOGRAPH - 0xED7D: 0x97E2, //CJK UNIFIED IDEOGRAPH - 0xED7E: 0x97E3, //CJK UNIFIED IDEOGRAPH - 0xED80: 0x97E4, //CJK UNIFIED IDEOGRAPH - 0xED81: 0x97E5, //CJK UNIFIED IDEOGRAPH - 0xED82: 0x97E8, //CJK UNIFIED IDEOGRAPH - 0xED83: 0x97EE, //CJK UNIFIED IDEOGRAPH - 0xED84: 0x97EF, //CJK UNIFIED IDEOGRAPH - 0xED85: 0x97F0, //CJK UNIFIED IDEOGRAPH - 0xED86: 0x97F1, //CJK UNIFIED IDEOGRAPH - 0xED87: 0x97F2, //CJK UNIFIED IDEOGRAPH - 0xED88: 0x97F4, //CJK UNIFIED IDEOGRAPH - 0xED89: 0x97F7, //CJK UNIFIED IDEOGRAPH - 0xED8A: 0x97F8, //CJK UNIFIED IDEOGRAPH - 0xED8B: 0x97F9, //CJK UNIFIED IDEOGRAPH - 0xED8C: 0x97FA, //CJK UNIFIED IDEOGRAPH - 0xED8D: 0x97FB, //CJK UNIFIED IDEOGRAPH - 0xED8E: 0x97FC, //CJK UNIFIED IDEOGRAPH - 0xED8F: 0x97FD, //CJK UNIFIED IDEOGRAPH - 0xED90: 0x97FE, //CJK UNIFIED IDEOGRAPH - 0xED91: 0x97FF, //CJK UNIFIED IDEOGRAPH - 0xED92: 0x9800, //CJK UNIFIED IDEOGRAPH - 0xED93: 0x9801, //CJK UNIFIED IDEOGRAPH - 0xED94: 0x9802, //CJK UNIFIED IDEOGRAPH - 0xED95: 0x9803, //CJK UNIFIED IDEOGRAPH - 0xED96: 0x9804, //CJK UNIFIED IDEOGRAPH - 0xED97: 0x9805, //CJK UNIFIED IDEOGRAPH - 0xED98: 0x9806, //CJK UNIFIED IDEOGRAPH - 0xED99: 0x9807, //CJK UNIFIED IDEOGRAPH - 0xED9A: 0x9808, //CJK UNIFIED IDEOGRAPH - 0xED9B: 0x9809, //CJK UNIFIED IDEOGRAPH - 0xED9C: 0x980A, //CJK UNIFIED IDEOGRAPH - 0xED9D: 0x980B, //CJK UNIFIED IDEOGRAPH - 0xED9E: 0x980C, //CJK UNIFIED IDEOGRAPH - 0xED9F: 0x980D, //CJK UNIFIED IDEOGRAPH - 0xEDA0: 0x980E, //CJK UNIFIED IDEOGRAPH - 0xEDA1: 0x603C, //CJK UNIFIED IDEOGRAPH - 0xEDA2: 0x605D, //CJK UNIFIED IDEOGRAPH - 0xEDA3: 0x605A, //CJK UNIFIED IDEOGRAPH - 0xEDA4: 0x6067, //CJK UNIFIED IDEOGRAPH - 0xEDA5: 0x6041, //CJK UNIFIED IDEOGRAPH - 0xEDA6: 0x6059, //CJK UNIFIED IDEOGRAPH - 0xEDA7: 0x6063, //CJK UNIFIED IDEOGRAPH - 0xEDA8: 0x60AB, //CJK UNIFIED IDEOGRAPH - 0xEDA9: 0x6106, //CJK UNIFIED IDEOGRAPH - 0xEDAA: 0x610D, //CJK UNIFIED IDEOGRAPH - 0xEDAB: 0x615D, //CJK UNIFIED IDEOGRAPH - 0xEDAC: 0x61A9, //CJK UNIFIED IDEOGRAPH - 0xEDAD: 0x619D, //CJK UNIFIED IDEOGRAPH - 0xEDAE: 0x61CB, //CJK UNIFIED IDEOGRAPH - 0xEDAF: 0x61D1, //CJK UNIFIED IDEOGRAPH - 0xEDB0: 0x6206, //CJK UNIFIED IDEOGRAPH - 0xEDB1: 0x8080, //CJK UNIFIED IDEOGRAPH - 0xEDB2: 0x807F, //CJK UNIFIED IDEOGRAPH - 0xEDB3: 0x6C93, //CJK UNIFIED IDEOGRAPH - 0xEDB4: 0x6CF6, //CJK UNIFIED IDEOGRAPH - 0xEDB5: 0x6DFC, //CJK UNIFIED IDEOGRAPH - 0xEDB6: 0x77F6, //CJK UNIFIED IDEOGRAPH - 0xEDB7: 0x77F8, //CJK UNIFIED IDEOGRAPH - 0xEDB8: 0x7800, //CJK UNIFIED IDEOGRAPH - 0xEDB9: 0x7809, //CJK UNIFIED IDEOGRAPH - 0xEDBA: 0x7817, //CJK UNIFIED IDEOGRAPH - 0xEDBB: 0x7818, //CJK UNIFIED IDEOGRAPH - 0xEDBC: 0x7811, //CJK UNIFIED IDEOGRAPH - 0xEDBD: 0x65AB, //CJK UNIFIED IDEOGRAPH - 0xEDBE: 0x782D, //CJK UNIFIED IDEOGRAPH - 0xEDBF: 0x781C, //CJK UNIFIED IDEOGRAPH - 0xEDC0: 0x781D, //CJK UNIFIED IDEOGRAPH - 0xEDC1: 0x7839, //CJK UNIFIED IDEOGRAPH - 0xEDC2: 0x783A, //CJK UNIFIED IDEOGRAPH - 0xEDC3: 0x783B, //CJK UNIFIED IDEOGRAPH - 0xEDC4: 0x781F, //CJK UNIFIED IDEOGRAPH - 0xEDC5: 0x783C, //CJK UNIFIED IDEOGRAPH - 0xEDC6: 0x7825, //CJK UNIFIED IDEOGRAPH - 0xEDC7: 0x782C, //CJK UNIFIED IDEOGRAPH - 0xEDC8: 0x7823, //CJK UNIFIED IDEOGRAPH - 0xEDC9: 0x7829, //CJK UNIFIED IDEOGRAPH - 0xEDCA: 0x784E, //CJK UNIFIED IDEOGRAPH - 0xEDCB: 0x786D, //CJK UNIFIED IDEOGRAPH - 0xEDCC: 0x7856, //CJK UNIFIED IDEOGRAPH - 0xEDCD: 0x7857, //CJK UNIFIED IDEOGRAPH - 0xEDCE: 0x7826, //CJK UNIFIED IDEOGRAPH - 0xEDCF: 0x7850, //CJK UNIFIED IDEOGRAPH - 0xEDD0: 0x7847, //CJK UNIFIED IDEOGRAPH - 0xEDD1: 0x784C, //CJK UNIFIED IDEOGRAPH - 0xEDD2: 0x786A, //CJK UNIFIED IDEOGRAPH - 0xEDD3: 0x789B, //CJK UNIFIED IDEOGRAPH - 0xEDD4: 0x7893, //CJK UNIFIED IDEOGRAPH - 0xEDD5: 0x789A, //CJK UNIFIED IDEOGRAPH - 0xEDD6: 0x7887, //CJK UNIFIED IDEOGRAPH - 0xEDD7: 0x789C, //CJK UNIFIED IDEOGRAPH - 0xEDD8: 0x78A1, //CJK UNIFIED IDEOGRAPH - 0xEDD9: 0x78A3, //CJK UNIFIED IDEOGRAPH - 0xEDDA: 0x78B2, //CJK UNIFIED IDEOGRAPH - 0xEDDB: 0x78B9, //CJK UNIFIED IDEOGRAPH - 0xEDDC: 0x78A5, //CJK UNIFIED IDEOGRAPH - 0xEDDD: 0x78D4, //CJK UNIFIED IDEOGRAPH - 0xEDDE: 0x78D9, //CJK UNIFIED IDEOGRAPH - 0xEDDF: 0x78C9, //CJK UNIFIED IDEOGRAPH - 0xEDE0: 0x78EC, //CJK UNIFIED IDEOGRAPH - 0xEDE1: 0x78F2, //CJK UNIFIED IDEOGRAPH - 0xEDE2: 0x7905, //CJK UNIFIED IDEOGRAPH - 0xEDE3: 0x78F4, //CJK UNIFIED IDEOGRAPH - 0xEDE4: 0x7913, //CJK UNIFIED IDEOGRAPH - 0xEDE5: 0x7924, //CJK UNIFIED IDEOGRAPH - 0xEDE6: 0x791E, //CJK UNIFIED IDEOGRAPH - 0xEDE7: 0x7934, //CJK UNIFIED IDEOGRAPH - 0xEDE8: 0x9F9B, //CJK UNIFIED IDEOGRAPH - 0xEDE9: 0x9EF9, //CJK UNIFIED IDEOGRAPH - 0xEDEA: 0x9EFB, //CJK UNIFIED IDEOGRAPH - 0xEDEB: 0x9EFC, //CJK UNIFIED IDEOGRAPH - 0xEDEC: 0x76F1, //CJK UNIFIED IDEOGRAPH - 0xEDED: 0x7704, //CJK UNIFIED IDEOGRAPH - 0xEDEE: 0x770D, //CJK UNIFIED IDEOGRAPH - 0xEDEF: 0x76F9, //CJK UNIFIED IDEOGRAPH - 0xEDF0: 0x7707, //CJK UNIFIED IDEOGRAPH - 0xEDF1: 0x7708, //CJK UNIFIED IDEOGRAPH - 0xEDF2: 0x771A, //CJK UNIFIED IDEOGRAPH - 0xEDF3: 0x7722, //CJK UNIFIED IDEOGRAPH - 0xEDF4: 0x7719, //CJK UNIFIED IDEOGRAPH - 0xEDF5: 0x772D, //CJK UNIFIED IDEOGRAPH - 0xEDF6: 0x7726, //CJK UNIFIED IDEOGRAPH - 0xEDF7: 0x7735, //CJK UNIFIED IDEOGRAPH - 0xEDF8: 0x7738, //CJK UNIFIED IDEOGRAPH - 0xEDF9: 0x7750, //CJK UNIFIED IDEOGRAPH - 0xEDFA: 0x7751, //CJK UNIFIED IDEOGRAPH - 0xEDFB: 0x7747, //CJK UNIFIED IDEOGRAPH - 0xEDFC: 0x7743, //CJK UNIFIED IDEOGRAPH - 0xEDFD: 0x775A, //CJK UNIFIED IDEOGRAPH - 0xEDFE: 0x7768, //CJK UNIFIED IDEOGRAPH - 0xEE40: 0x980F, //CJK UNIFIED IDEOGRAPH - 0xEE41: 0x9810, //CJK UNIFIED IDEOGRAPH - 0xEE42: 0x9811, //CJK UNIFIED IDEOGRAPH - 0xEE43: 0x9812, //CJK UNIFIED IDEOGRAPH - 0xEE44: 0x9813, //CJK UNIFIED IDEOGRAPH - 0xEE45: 0x9814, //CJK UNIFIED IDEOGRAPH - 0xEE46: 0x9815, //CJK UNIFIED IDEOGRAPH - 0xEE47: 0x9816, //CJK UNIFIED IDEOGRAPH - 0xEE48: 0x9817, //CJK UNIFIED IDEOGRAPH - 0xEE49: 0x9818, //CJK UNIFIED IDEOGRAPH - 0xEE4A: 0x9819, //CJK UNIFIED IDEOGRAPH - 0xEE4B: 0x981A, //CJK UNIFIED IDEOGRAPH - 0xEE4C: 0x981B, //CJK UNIFIED IDEOGRAPH - 0xEE4D: 0x981C, //CJK UNIFIED IDEOGRAPH - 0xEE4E: 0x981D, //CJK UNIFIED IDEOGRAPH - 0xEE4F: 0x981E, //CJK UNIFIED IDEOGRAPH - 0xEE50: 0x981F, //CJK UNIFIED IDEOGRAPH - 0xEE51: 0x9820, //CJK UNIFIED IDEOGRAPH - 0xEE52: 0x9821, //CJK UNIFIED IDEOGRAPH - 0xEE53: 0x9822, //CJK UNIFIED IDEOGRAPH - 0xEE54: 0x9823, //CJK UNIFIED IDEOGRAPH - 0xEE55: 0x9824, //CJK UNIFIED IDEOGRAPH - 0xEE56: 0x9825, //CJK UNIFIED IDEOGRAPH - 0xEE57: 0x9826, //CJK UNIFIED IDEOGRAPH - 0xEE58: 0x9827, //CJK UNIFIED IDEOGRAPH - 0xEE59: 0x9828, //CJK UNIFIED IDEOGRAPH - 0xEE5A: 0x9829, //CJK UNIFIED IDEOGRAPH - 0xEE5B: 0x982A, //CJK UNIFIED IDEOGRAPH - 0xEE5C: 0x982B, //CJK UNIFIED IDEOGRAPH - 0xEE5D: 0x982C, //CJK UNIFIED IDEOGRAPH - 0xEE5E: 0x982D, //CJK UNIFIED IDEOGRAPH - 0xEE5F: 0x982E, //CJK UNIFIED IDEOGRAPH - 0xEE60: 0x982F, //CJK UNIFIED IDEOGRAPH - 0xEE61: 0x9830, //CJK UNIFIED IDEOGRAPH - 0xEE62: 0x9831, //CJK UNIFIED IDEOGRAPH - 0xEE63: 0x9832, //CJK UNIFIED IDEOGRAPH - 0xEE64: 0x9833, //CJK UNIFIED IDEOGRAPH - 0xEE65: 0x9834, //CJK UNIFIED IDEOGRAPH - 0xEE66: 0x9835, //CJK UNIFIED IDEOGRAPH - 0xEE67: 0x9836, //CJK UNIFIED IDEOGRAPH - 0xEE68: 0x9837, //CJK UNIFIED IDEOGRAPH - 0xEE69: 0x9838, //CJK UNIFIED IDEOGRAPH - 0xEE6A: 0x9839, //CJK UNIFIED IDEOGRAPH - 0xEE6B: 0x983A, //CJK UNIFIED IDEOGRAPH - 0xEE6C: 0x983B, //CJK UNIFIED IDEOGRAPH - 0xEE6D: 0x983C, //CJK UNIFIED IDEOGRAPH - 0xEE6E: 0x983D, //CJK UNIFIED IDEOGRAPH - 0xEE6F: 0x983E, //CJK UNIFIED IDEOGRAPH - 0xEE70: 0x983F, //CJK UNIFIED IDEOGRAPH - 0xEE71: 0x9840, //CJK UNIFIED IDEOGRAPH - 0xEE72: 0x9841, //CJK UNIFIED IDEOGRAPH - 0xEE73: 0x9842, //CJK UNIFIED IDEOGRAPH - 0xEE74: 0x9843, //CJK UNIFIED IDEOGRAPH - 0xEE75: 0x9844, //CJK UNIFIED IDEOGRAPH - 0xEE76: 0x9845, //CJK UNIFIED IDEOGRAPH - 0xEE77: 0x9846, //CJK UNIFIED IDEOGRAPH - 0xEE78: 0x9847, //CJK UNIFIED IDEOGRAPH - 0xEE79: 0x9848, //CJK UNIFIED IDEOGRAPH - 0xEE7A: 0x9849, //CJK UNIFIED IDEOGRAPH - 0xEE7B: 0x984A, //CJK UNIFIED IDEOGRAPH - 0xEE7C: 0x984B, //CJK UNIFIED IDEOGRAPH - 0xEE7D: 0x984C, //CJK UNIFIED IDEOGRAPH - 0xEE7E: 0x984D, //CJK UNIFIED IDEOGRAPH - 0xEE80: 0x984E, //CJK UNIFIED IDEOGRAPH - 0xEE81: 0x984F, //CJK UNIFIED IDEOGRAPH - 0xEE82: 0x9850, //CJK UNIFIED IDEOGRAPH - 0xEE83: 0x9851, //CJK UNIFIED IDEOGRAPH - 0xEE84: 0x9852, //CJK UNIFIED IDEOGRAPH - 0xEE85: 0x9853, //CJK UNIFIED IDEOGRAPH - 0xEE86: 0x9854, //CJK UNIFIED IDEOGRAPH - 0xEE87: 0x9855, //CJK UNIFIED IDEOGRAPH - 0xEE88: 0x9856, //CJK UNIFIED IDEOGRAPH - 0xEE89: 0x9857, //CJK UNIFIED IDEOGRAPH - 0xEE8A: 0x9858, //CJK UNIFIED IDEOGRAPH - 0xEE8B: 0x9859, //CJK UNIFIED IDEOGRAPH - 0xEE8C: 0x985A, //CJK UNIFIED IDEOGRAPH - 0xEE8D: 0x985B, //CJK UNIFIED IDEOGRAPH - 0xEE8E: 0x985C, //CJK UNIFIED IDEOGRAPH - 0xEE8F: 0x985D, //CJK UNIFIED IDEOGRAPH - 0xEE90: 0x985E, //CJK UNIFIED IDEOGRAPH - 0xEE91: 0x985F, //CJK UNIFIED IDEOGRAPH - 0xEE92: 0x9860, //CJK UNIFIED IDEOGRAPH - 0xEE93: 0x9861, //CJK UNIFIED IDEOGRAPH - 0xEE94: 0x9862, //CJK UNIFIED IDEOGRAPH - 0xEE95: 0x9863, //CJK UNIFIED IDEOGRAPH - 0xEE96: 0x9864, //CJK UNIFIED IDEOGRAPH - 0xEE97: 0x9865, //CJK UNIFIED IDEOGRAPH - 0xEE98: 0x9866, //CJK UNIFIED IDEOGRAPH - 0xEE99: 0x9867, //CJK UNIFIED IDEOGRAPH - 0xEE9A: 0x9868, //CJK UNIFIED IDEOGRAPH - 0xEE9B: 0x9869, //CJK UNIFIED IDEOGRAPH - 0xEE9C: 0x986A, //CJK UNIFIED IDEOGRAPH - 0xEE9D: 0x986B, //CJK UNIFIED IDEOGRAPH - 0xEE9E: 0x986C, //CJK UNIFIED IDEOGRAPH - 0xEE9F: 0x986D, //CJK UNIFIED IDEOGRAPH - 0xEEA0: 0x986E, //CJK UNIFIED IDEOGRAPH - 0xEEA1: 0x7762, //CJK UNIFIED IDEOGRAPH - 0xEEA2: 0x7765, //CJK UNIFIED IDEOGRAPH - 0xEEA3: 0x777F, //CJK UNIFIED IDEOGRAPH - 0xEEA4: 0x778D, //CJK UNIFIED IDEOGRAPH - 0xEEA5: 0x777D, //CJK UNIFIED IDEOGRAPH - 0xEEA6: 0x7780, //CJK UNIFIED IDEOGRAPH - 0xEEA7: 0x778C, //CJK UNIFIED IDEOGRAPH - 0xEEA8: 0x7791, //CJK UNIFIED IDEOGRAPH - 0xEEA9: 0x779F, //CJK UNIFIED IDEOGRAPH - 0xEEAA: 0x77A0, //CJK UNIFIED IDEOGRAPH - 0xEEAB: 0x77B0, //CJK UNIFIED IDEOGRAPH - 0xEEAC: 0x77B5, //CJK UNIFIED IDEOGRAPH - 0xEEAD: 0x77BD, //CJK UNIFIED IDEOGRAPH - 0xEEAE: 0x753A, //CJK UNIFIED IDEOGRAPH - 0xEEAF: 0x7540, //CJK UNIFIED IDEOGRAPH - 0xEEB0: 0x754E, //CJK UNIFIED IDEOGRAPH - 0xEEB1: 0x754B, //CJK UNIFIED IDEOGRAPH - 0xEEB2: 0x7548, //CJK UNIFIED IDEOGRAPH - 0xEEB3: 0x755B, //CJK UNIFIED IDEOGRAPH - 0xEEB4: 0x7572, //CJK UNIFIED IDEOGRAPH - 0xEEB5: 0x7579, //CJK UNIFIED IDEOGRAPH - 0xEEB6: 0x7583, //CJK UNIFIED IDEOGRAPH - 0xEEB7: 0x7F58, //CJK UNIFIED IDEOGRAPH - 0xEEB8: 0x7F61, //CJK UNIFIED IDEOGRAPH - 0xEEB9: 0x7F5F, //CJK UNIFIED IDEOGRAPH - 0xEEBA: 0x8A48, //CJK UNIFIED IDEOGRAPH - 0xEEBB: 0x7F68, //CJK UNIFIED IDEOGRAPH - 0xEEBC: 0x7F74, //CJK UNIFIED IDEOGRAPH - 0xEEBD: 0x7F71, //CJK UNIFIED IDEOGRAPH - 0xEEBE: 0x7F79, //CJK UNIFIED IDEOGRAPH - 0xEEBF: 0x7F81, //CJK UNIFIED IDEOGRAPH - 0xEEC0: 0x7F7E, //CJK UNIFIED IDEOGRAPH - 0xEEC1: 0x76CD, //CJK UNIFIED IDEOGRAPH - 0xEEC2: 0x76E5, //CJK UNIFIED IDEOGRAPH - 0xEEC3: 0x8832, //CJK UNIFIED IDEOGRAPH - 0xEEC4: 0x9485, //CJK UNIFIED IDEOGRAPH - 0xEEC5: 0x9486, //CJK UNIFIED IDEOGRAPH - 0xEEC6: 0x9487, //CJK UNIFIED IDEOGRAPH - 0xEEC7: 0x948B, //CJK UNIFIED IDEOGRAPH - 0xEEC8: 0x948A, //CJK UNIFIED IDEOGRAPH - 0xEEC9: 0x948C, //CJK UNIFIED IDEOGRAPH - 0xEECA: 0x948D, //CJK UNIFIED IDEOGRAPH - 0xEECB: 0x948F, //CJK UNIFIED IDEOGRAPH - 0xEECC: 0x9490, //CJK UNIFIED IDEOGRAPH - 0xEECD: 0x9494, //CJK UNIFIED IDEOGRAPH - 0xEECE: 0x9497, //CJK UNIFIED IDEOGRAPH - 0xEECF: 0x9495, //CJK UNIFIED IDEOGRAPH - 0xEED0: 0x949A, //CJK UNIFIED IDEOGRAPH - 0xEED1: 0x949B, //CJK UNIFIED IDEOGRAPH - 0xEED2: 0x949C, //CJK UNIFIED IDEOGRAPH - 0xEED3: 0x94A3, //CJK UNIFIED IDEOGRAPH - 0xEED4: 0x94A4, //CJK UNIFIED IDEOGRAPH - 0xEED5: 0x94AB, //CJK UNIFIED IDEOGRAPH - 0xEED6: 0x94AA, //CJK UNIFIED IDEOGRAPH - 0xEED7: 0x94AD, //CJK UNIFIED IDEOGRAPH - 0xEED8: 0x94AC, //CJK UNIFIED IDEOGRAPH - 0xEED9: 0x94AF, //CJK UNIFIED IDEOGRAPH - 0xEEDA: 0x94B0, //CJK UNIFIED IDEOGRAPH - 0xEEDB: 0x94B2, //CJK UNIFIED IDEOGRAPH - 0xEEDC: 0x94B4, //CJK UNIFIED IDEOGRAPH - 0xEEDD: 0x94B6, //CJK UNIFIED IDEOGRAPH - 0xEEDE: 0x94B7, //CJK UNIFIED IDEOGRAPH - 0xEEDF: 0x94B8, //CJK UNIFIED IDEOGRAPH - 0xEEE0: 0x94B9, //CJK UNIFIED IDEOGRAPH - 0xEEE1: 0x94BA, //CJK UNIFIED IDEOGRAPH - 0xEEE2: 0x94BC, //CJK UNIFIED IDEOGRAPH - 0xEEE3: 0x94BD, //CJK UNIFIED IDEOGRAPH - 0xEEE4: 0x94BF, //CJK UNIFIED IDEOGRAPH - 0xEEE5: 0x94C4, //CJK UNIFIED IDEOGRAPH - 0xEEE6: 0x94C8, //CJK UNIFIED IDEOGRAPH - 0xEEE7: 0x94C9, //CJK UNIFIED IDEOGRAPH - 0xEEE8: 0x94CA, //CJK UNIFIED IDEOGRAPH - 0xEEE9: 0x94CB, //CJK UNIFIED IDEOGRAPH - 0xEEEA: 0x94CC, //CJK UNIFIED IDEOGRAPH - 0xEEEB: 0x94CD, //CJK UNIFIED IDEOGRAPH - 0xEEEC: 0x94CE, //CJK UNIFIED IDEOGRAPH - 0xEEED: 0x94D0, //CJK UNIFIED IDEOGRAPH - 0xEEEE: 0x94D1, //CJK UNIFIED IDEOGRAPH - 0xEEEF: 0x94D2, //CJK UNIFIED IDEOGRAPH - 0xEEF0: 0x94D5, //CJK UNIFIED IDEOGRAPH - 0xEEF1: 0x94D6, //CJK UNIFIED IDEOGRAPH - 0xEEF2: 0x94D7, //CJK UNIFIED IDEOGRAPH - 0xEEF3: 0x94D9, //CJK UNIFIED IDEOGRAPH - 0xEEF4: 0x94D8, //CJK UNIFIED IDEOGRAPH - 0xEEF5: 0x94DB, //CJK UNIFIED IDEOGRAPH - 0xEEF6: 0x94DE, //CJK UNIFIED IDEOGRAPH - 0xEEF7: 0x94DF, //CJK UNIFIED IDEOGRAPH - 0xEEF8: 0x94E0, //CJK UNIFIED IDEOGRAPH - 0xEEF9: 0x94E2, //CJK UNIFIED IDEOGRAPH - 0xEEFA: 0x94E4, //CJK UNIFIED IDEOGRAPH - 0xEEFB: 0x94E5, //CJK UNIFIED IDEOGRAPH - 0xEEFC: 0x94E7, //CJK UNIFIED IDEOGRAPH - 0xEEFD: 0x94E8, //CJK UNIFIED IDEOGRAPH - 0xEEFE: 0x94EA, //CJK UNIFIED IDEOGRAPH - 0xEF40: 0x986F, //CJK UNIFIED IDEOGRAPH - 0xEF41: 0x9870, //CJK UNIFIED IDEOGRAPH - 0xEF42: 0x9871, //CJK UNIFIED IDEOGRAPH - 0xEF43: 0x9872, //CJK UNIFIED IDEOGRAPH - 0xEF44: 0x9873, //CJK UNIFIED IDEOGRAPH - 0xEF45: 0x9874, //CJK UNIFIED IDEOGRAPH - 0xEF46: 0x988B, //CJK UNIFIED IDEOGRAPH - 0xEF47: 0x988E, //CJK UNIFIED IDEOGRAPH - 0xEF48: 0x9892, //CJK UNIFIED IDEOGRAPH - 0xEF49: 0x9895, //CJK UNIFIED IDEOGRAPH - 0xEF4A: 0x9899, //CJK UNIFIED IDEOGRAPH - 0xEF4B: 0x98A3, //CJK UNIFIED IDEOGRAPH - 0xEF4C: 0x98A8, //CJK UNIFIED IDEOGRAPH - 0xEF4D: 0x98A9, //CJK UNIFIED IDEOGRAPH - 0xEF4E: 0x98AA, //CJK UNIFIED IDEOGRAPH - 0xEF4F: 0x98AB, //CJK UNIFIED IDEOGRAPH - 0xEF50: 0x98AC, //CJK UNIFIED IDEOGRAPH - 0xEF51: 0x98AD, //CJK UNIFIED IDEOGRAPH - 0xEF52: 0x98AE, //CJK UNIFIED IDEOGRAPH - 0xEF53: 0x98AF, //CJK UNIFIED IDEOGRAPH - 0xEF54: 0x98B0, //CJK UNIFIED IDEOGRAPH - 0xEF55: 0x98B1, //CJK UNIFIED IDEOGRAPH - 0xEF56: 0x98B2, //CJK UNIFIED IDEOGRAPH - 0xEF57: 0x98B3, //CJK UNIFIED IDEOGRAPH - 0xEF58: 0x98B4, //CJK UNIFIED IDEOGRAPH - 0xEF59: 0x98B5, //CJK UNIFIED IDEOGRAPH - 0xEF5A: 0x98B6, //CJK UNIFIED IDEOGRAPH - 0xEF5B: 0x98B7, //CJK UNIFIED IDEOGRAPH - 0xEF5C: 0x98B8, //CJK UNIFIED IDEOGRAPH - 0xEF5D: 0x98B9, //CJK UNIFIED IDEOGRAPH - 0xEF5E: 0x98BA, //CJK UNIFIED IDEOGRAPH - 0xEF5F: 0x98BB, //CJK UNIFIED IDEOGRAPH - 0xEF60: 0x98BC, //CJK UNIFIED IDEOGRAPH - 0xEF61: 0x98BD, //CJK UNIFIED IDEOGRAPH - 0xEF62: 0x98BE, //CJK UNIFIED IDEOGRAPH - 0xEF63: 0x98BF, //CJK UNIFIED IDEOGRAPH - 0xEF64: 0x98C0, //CJK UNIFIED IDEOGRAPH - 0xEF65: 0x98C1, //CJK UNIFIED IDEOGRAPH - 0xEF66: 0x98C2, //CJK UNIFIED IDEOGRAPH - 0xEF67: 0x98C3, //CJK UNIFIED IDEOGRAPH - 0xEF68: 0x98C4, //CJK UNIFIED IDEOGRAPH - 0xEF69: 0x98C5, //CJK UNIFIED IDEOGRAPH - 0xEF6A: 0x98C6, //CJK UNIFIED IDEOGRAPH - 0xEF6B: 0x98C7, //CJK UNIFIED IDEOGRAPH - 0xEF6C: 0x98C8, //CJK UNIFIED IDEOGRAPH - 0xEF6D: 0x98C9, //CJK UNIFIED IDEOGRAPH - 0xEF6E: 0x98CA, //CJK UNIFIED IDEOGRAPH - 0xEF6F: 0x98CB, //CJK UNIFIED IDEOGRAPH - 0xEF70: 0x98CC, //CJK UNIFIED IDEOGRAPH - 0xEF71: 0x98CD, //CJK UNIFIED IDEOGRAPH - 0xEF72: 0x98CF, //CJK UNIFIED IDEOGRAPH - 0xEF73: 0x98D0, //CJK UNIFIED IDEOGRAPH - 0xEF74: 0x98D4, //CJK UNIFIED IDEOGRAPH - 0xEF75: 0x98D6, //CJK UNIFIED IDEOGRAPH - 0xEF76: 0x98D7, //CJK UNIFIED IDEOGRAPH - 0xEF77: 0x98DB, //CJK UNIFIED IDEOGRAPH - 0xEF78: 0x98DC, //CJK UNIFIED IDEOGRAPH - 0xEF79: 0x98DD, //CJK UNIFIED IDEOGRAPH - 0xEF7A: 0x98E0, //CJK UNIFIED IDEOGRAPH - 0xEF7B: 0x98E1, //CJK UNIFIED IDEOGRAPH - 0xEF7C: 0x98E2, //CJK UNIFIED IDEOGRAPH - 0xEF7D: 0x98E3, //CJK UNIFIED IDEOGRAPH - 0xEF7E: 0x98E4, //CJK UNIFIED IDEOGRAPH - 0xEF80: 0x98E5, //CJK UNIFIED IDEOGRAPH - 0xEF81: 0x98E6, //CJK UNIFIED IDEOGRAPH - 0xEF82: 0x98E9, //CJK UNIFIED IDEOGRAPH - 0xEF83: 0x98EA, //CJK UNIFIED IDEOGRAPH - 0xEF84: 0x98EB, //CJK UNIFIED IDEOGRAPH - 0xEF85: 0x98EC, //CJK UNIFIED IDEOGRAPH - 0xEF86: 0x98ED, //CJK UNIFIED IDEOGRAPH - 0xEF87: 0x98EE, //CJK UNIFIED IDEOGRAPH - 0xEF88: 0x98EF, //CJK UNIFIED IDEOGRAPH - 0xEF89: 0x98F0, //CJK UNIFIED IDEOGRAPH - 0xEF8A: 0x98F1, //CJK UNIFIED IDEOGRAPH - 0xEF8B: 0x98F2, //CJK UNIFIED IDEOGRAPH - 0xEF8C: 0x98F3, //CJK UNIFIED IDEOGRAPH - 0xEF8D: 0x98F4, //CJK UNIFIED IDEOGRAPH - 0xEF8E: 0x98F5, //CJK UNIFIED IDEOGRAPH - 0xEF8F: 0x98F6, //CJK UNIFIED IDEOGRAPH - 0xEF90: 0x98F7, //CJK UNIFIED IDEOGRAPH - 0xEF91: 0x98F8, //CJK UNIFIED IDEOGRAPH - 0xEF92: 0x98F9, //CJK UNIFIED IDEOGRAPH - 0xEF93: 0x98FA, //CJK UNIFIED IDEOGRAPH - 0xEF94: 0x98FB, //CJK UNIFIED IDEOGRAPH - 0xEF95: 0x98FC, //CJK UNIFIED IDEOGRAPH - 0xEF96: 0x98FD, //CJK UNIFIED IDEOGRAPH - 0xEF97: 0x98FE, //CJK UNIFIED IDEOGRAPH - 0xEF98: 0x98FF, //CJK UNIFIED IDEOGRAPH - 0xEF99: 0x9900, //CJK UNIFIED IDEOGRAPH - 0xEF9A: 0x9901, //CJK UNIFIED IDEOGRAPH - 0xEF9B: 0x9902, //CJK UNIFIED IDEOGRAPH - 0xEF9C: 0x9903, //CJK UNIFIED IDEOGRAPH - 0xEF9D: 0x9904, //CJK UNIFIED IDEOGRAPH - 0xEF9E: 0x9905, //CJK UNIFIED IDEOGRAPH - 0xEF9F: 0x9906, //CJK UNIFIED IDEOGRAPH - 0xEFA0: 0x9907, //CJK UNIFIED IDEOGRAPH - 0xEFA1: 0x94E9, //CJK UNIFIED IDEOGRAPH - 0xEFA2: 0x94EB, //CJK UNIFIED IDEOGRAPH - 0xEFA3: 0x94EE, //CJK UNIFIED IDEOGRAPH - 0xEFA4: 0x94EF, //CJK UNIFIED IDEOGRAPH - 0xEFA5: 0x94F3, //CJK UNIFIED IDEOGRAPH - 0xEFA6: 0x94F4, //CJK UNIFIED IDEOGRAPH - 0xEFA7: 0x94F5, //CJK UNIFIED IDEOGRAPH - 0xEFA8: 0x94F7, //CJK UNIFIED IDEOGRAPH - 0xEFA9: 0x94F9, //CJK UNIFIED IDEOGRAPH - 0xEFAA: 0x94FC, //CJK UNIFIED IDEOGRAPH - 0xEFAB: 0x94FD, //CJK UNIFIED IDEOGRAPH - 0xEFAC: 0x94FF, //CJK UNIFIED IDEOGRAPH - 0xEFAD: 0x9503, //CJK UNIFIED IDEOGRAPH - 0xEFAE: 0x9502, //CJK UNIFIED IDEOGRAPH - 0xEFAF: 0x9506, //CJK UNIFIED IDEOGRAPH - 0xEFB0: 0x9507, //CJK UNIFIED IDEOGRAPH - 0xEFB1: 0x9509, //CJK UNIFIED IDEOGRAPH - 0xEFB2: 0x950A, //CJK UNIFIED IDEOGRAPH - 0xEFB3: 0x950D, //CJK UNIFIED IDEOGRAPH - 0xEFB4: 0x950E, //CJK UNIFIED IDEOGRAPH - 0xEFB5: 0x950F, //CJK UNIFIED IDEOGRAPH - 0xEFB6: 0x9512, //CJK UNIFIED IDEOGRAPH - 0xEFB7: 0x9513, //CJK UNIFIED IDEOGRAPH - 0xEFB8: 0x9514, //CJK UNIFIED IDEOGRAPH - 0xEFB9: 0x9515, //CJK UNIFIED IDEOGRAPH - 0xEFBA: 0x9516, //CJK UNIFIED IDEOGRAPH - 0xEFBB: 0x9518, //CJK UNIFIED IDEOGRAPH - 0xEFBC: 0x951B, //CJK UNIFIED IDEOGRAPH - 0xEFBD: 0x951D, //CJK UNIFIED IDEOGRAPH - 0xEFBE: 0x951E, //CJK UNIFIED IDEOGRAPH - 0xEFBF: 0x951F, //CJK UNIFIED IDEOGRAPH - 0xEFC0: 0x9522, //CJK UNIFIED IDEOGRAPH - 0xEFC1: 0x952A, //CJK UNIFIED IDEOGRAPH - 0xEFC2: 0x952B, //CJK UNIFIED IDEOGRAPH - 0xEFC3: 0x9529, //CJK UNIFIED IDEOGRAPH - 0xEFC4: 0x952C, //CJK UNIFIED IDEOGRAPH - 0xEFC5: 0x9531, //CJK UNIFIED IDEOGRAPH - 0xEFC6: 0x9532, //CJK UNIFIED IDEOGRAPH - 0xEFC7: 0x9534, //CJK UNIFIED IDEOGRAPH - 0xEFC8: 0x9536, //CJK UNIFIED IDEOGRAPH - 0xEFC9: 0x9537, //CJK UNIFIED IDEOGRAPH - 0xEFCA: 0x9538, //CJK UNIFIED IDEOGRAPH - 0xEFCB: 0x953C, //CJK UNIFIED IDEOGRAPH - 0xEFCC: 0x953E, //CJK UNIFIED IDEOGRAPH - 0xEFCD: 0x953F, //CJK UNIFIED IDEOGRAPH - 0xEFCE: 0x9542, //CJK UNIFIED IDEOGRAPH - 0xEFCF: 0x9535, //CJK UNIFIED IDEOGRAPH - 0xEFD0: 0x9544, //CJK UNIFIED IDEOGRAPH - 0xEFD1: 0x9545, //CJK UNIFIED IDEOGRAPH - 0xEFD2: 0x9546, //CJK UNIFIED IDEOGRAPH - 0xEFD3: 0x9549, //CJK UNIFIED IDEOGRAPH - 0xEFD4: 0x954C, //CJK UNIFIED IDEOGRAPH - 0xEFD5: 0x954E, //CJK UNIFIED IDEOGRAPH - 0xEFD6: 0x954F, //CJK UNIFIED IDEOGRAPH - 0xEFD7: 0x9552, //CJK UNIFIED IDEOGRAPH - 0xEFD8: 0x9553, //CJK UNIFIED IDEOGRAPH - 0xEFD9: 0x9554, //CJK UNIFIED IDEOGRAPH - 0xEFDA: 0x9556, //CJK UNIFIED IDEOGRAPH - 0xEFDB: 0x9557, //CJK UNIFIED IDEOGRAPH - 0xEFDC: 0x9558, //CJK UNIFIED IDEOGRAPH - 0xEFDD: 0x9559, //CJK UNIFIED IDEOGRAPH - 0xEFDE: 0x955B, //CJK UNIFIED IDEOGRAPH - 0xEFDF: 0x955E, //CJK UNIFIED IDEOGRAPH - 0xEFE0: 0x955F, //CJK UNIFIED IDEOGRAPH - 0xEFE1: 0x955D, //CJK UNIFIED IDEOGRAPH - 0xEFE2: 0x9561, //CJK UNIFIED IDEOGRAPH - 0xEFE3: 0x9562, //CJK UNIFIED IDEOGRAPH - 0xEFE4: 0x9564, //CJK UNIFIED IDEOGRAPH - 0xEFE5: 0x9565, //CJK UNIFIED IDEOGRAPH - 0xEFE6: 0x9566, //CJK UNIFIED IDEOGRAPH - 0xEFE7: 0x9567, //CJK UNIFIED IDEOGRAPH - 0xEFE8: 0x9568, //CJK UNIFIED IDEOGRAPH - 0xEFE9: 0x9569, //CJK UNIFIED IDEOGRAPH - 0xEFEA: 0x956A, //CJK UNIFIED IDEOGRAPH - 0xEFEB: 0x956B, //CJK UNIFIED IDEOGRAPH - 0xEFEC: 0x956C, //CJK UNIFIED IDEOGRAPH - 0xEFED: 0x956F, //CJK UNIFIED IDEOGRAPH - 0xEFEE: 0x9571, //CJK UNIFIED IDEOGRAPH - 0xEFEF: 0x9572, //CJK UNIFIED IDEOGRAPH - 0xEFF0: 0x9573, //CJK UNIFIED IDEOGRAPH - 0xEFF1: 0x953A, //CJK UNIFIED IDEOGRAPH - 0xEFF2: 0x77E7, //CJK UNIFIED IDEOGRAPH - 0xEFF3: 0x77EC, //CJK UNIFIED IDEOGRAPH - 0xEFF4: 0x96C9, //CJK UNIFIED IDEOGRAPH - 0xEFF5: 0x79D5, //CJK UNIFIED IDEOGRAPH - 0xEFF6: 0x79ED, //CJK UNIFIED IDEOGRAPH - 0xEFF7: 0x79E3, //CJK UNIFIED IDEOGRAPH - 0xEFF8: 0x79EB, //CJK UNIFIED IDEOGRAPH - 0xEFF9: 0x7A06, //CJK UNIFIED IDEOGRAPH - 0xEFFA: 0x5D47, //CJK UNIFIED IDEOGRAPH - 0xEFFB: 0x7A03, //CJK UNIFIED IDEOGRAPH - 0xEFFC: 0x7A02, //CJK UNIFIED IDEOGRAPH - 0xEFFD: 0x7A1E, //CJK UNIFIED IDEOGRAPH - 0xEFFE: 0x7A14, //CJK UNIFIED IDEOGRAPH - 0xF040: 0x9908, //CJK UNIFIED IDEOGRAPH - 0xF041: 0x9909, //CJK UNIFIED IDEOGRAPH - 0xF042: 0x990A, //CJK UNIFIED IDEOGRAPH - 0xF043: 0x990B, //CJK UNIFIED IDEOGRAPH - 0xF044: 0x990C, //CJK UNIFIED IDEOGRAPH - 0xF045: 0x990E, //CJK UNIFIED IDEOGRAPH - 0xF046: 0x990F, //CJK UNIFIED IDEOGRAPH - 0xF047: 0x9911, //CJK UNIFIED IDEOGRAPH - 0xF048: 0x9912, //CJK UNIFIED IDEOGRAPH - 0xF049: 0x9913, //CJK UNIFIED IDEOGRAPH - 0xF04A: 0x9914, //CJK UNIFIED IDEOGRAPH - 0xF04B: 0x9915, //CJK UNIFIED IDEOGRAPH - 0xF04C: 0x9916, //CJK UNIFIED IDEOGRAPH - 0xF04D: 0x9917, //CJK UNIFIED IDEOGRAPH - 0xF04E: 0x9918, //CJK UNIFIED IDEOGRAPH - 0xF04F: 0x9919, //CJK UNIFIED IDEOGRAPH - 0xF050: 0x991A, //CJK UNIFIED IDEOGRAPH - 0xF051: 0x991B, //CJK UNIFIED IDEOGRAPH - 0xF052: 0x991C, //CJK UNIFIED IDEOGRAPH - 0xF053: 0x991D, //CJK UNIFIED IDEOGRAPH - 0xF054: 0x991E, //CJK UNIFIED IDEOGRAPH - 0xF055: 0x991F, //CJK UNIFIED IDEOGRAPH - 0xF056: 0x9920, //CJK UNIFIED IDEOGRAPH - 0xF057: 0x9921, //CJK UNIFIED IDEOGRAPH - 0xF058: 0x9922, //CJK UNIFIED IDEOGRAPH - 0xF059: 0x9923, //CJK UNIFIED IDEOGRAPH - 0xF05A: 0x9924, //CJK UNIFIED IDEOGRAPH - 0xF05B: 0x9925, //CJK UNIFIED IDEOGRAPH - 0xF05C: 0x9926, //CJK UNIFIED IDEOGRAPH - 0xF05D: 0x9927, //CJK UNIFIED IDEOGRAPH - 0xF05E: 0x9928, //CJK UNIFIED IDEOGRAPH - 0xF05F: 0x9929, //CJK UNIFIED IDEOGRAPH - 0xF060: 0x992A, //CJK UNIFIED IDEOGRAPH - 0xF061: 0x992B, //CJK UNIFIED IDEOGRAPH - 0xF062: 0x992C, //CJK UNIFIED IDEOGRAPH - 0xF063: 0x992D, //CJK UNIFIED IDEOGRAPH - 0xF064: 0x992F, //CJK UNIFIED IDEOGRAPH - 0xF065: 0x9930, //CJK UNIFIED IDEOGRAPH - 0xF066: 0x9931, //CJK UNIFIED IDEOGRAPH - 0xF067: 0x9932, //CJK UNIFIED IDEOGRAPH - 0xF068: 0x9933, //CJK UNIFIED IDEOGRAPH - 0xF069: 0x9934, //CJK UNIFIED IDEOGRAPH - 0xF06A: 0x9935, //CJK UNIFIED IDEOGRAPH - 0xF06B: 0x9936, //CJK UNIFIED IDEOGRAPH - 0xF06C: 0x9937, //CJK UNIFIED IDEOGRAPH - 0xF06D: 0x9938, //CJK UNIFIED IDEOGRAPH - 0xF06E: 0x9939, //CJK UNIFIED IDEOGRAPH - 0xF06F: 0x993A, //CJK UNIFIED IDEOGRAPH - 0xF070: 0x993B, //CJK UNIFIED IDEOGRAPH - 0xF071: 0x993C, //CJK UNIFIED IDEOGRAPH - 0xF072: 0x993D, //CJK UNIFIED IDEOGRAPH - 0xF073: 0x993E, //CJK UNIFIED IDEOGRAPH - 0xF074: 0x993F, //CJK UNIFIED IDEOGRAPH - 0xF075: 0x9940, //CJK UNIFIED IDEOGRAPH - 0xF076: 0x9941, //CJK UNIFIED IDEOGRAPH - 0xF077: 0x9942, //CJK UNIFIED IDEOGRAPH - 0xF078: 0x9943, //CJK UNIFIED IDEOGRAPH - 0xF079: 0x9944, //CJK UNIFIED IDEOGRAPH - 0xF07A: 0x9945, //CJK UNIFIED IDEOGRAPH - 0xF07B: 0x9946, //CJK UNIFIED IDEOGRAPH - 0xF07C: 0x9947, //CJK UNIFIED IDEOGRAPH - 0xF07D: 0x9948, //CJK UNIFIED IDEOGRAPH - 0xF07E: 0x9949, //CJK UNIFIED IDEOGRAPH - 0xF080: 0x994A, //CJK UNIFIED IDEOGRAPH - 0xF081: 0x994B, //CJK UNIFIED IDEOGRAPH - 0xF082: 0x994C, //CJK UNIFIED IDEOGRAPH - 0xF083: 0x994D, //CJK UNIFIED IDEOGRAPH - 0xF084: 0x994E, //CJK UNIFIED IDEOGRAPH - 0xF085: 0x994F, //CJK UNIFIED IDEOGRAPH - 0xF086: 0x9950, //CJK UNIFIED IDEOGRAPH - 0xF087: 0x9951, //CJK UNIFIED IDEOGRAPH - 0xF088: 0x9952, //CJK UNIFIED IDEOGRAPH - 0xF089: 0x9953, //CJK UNIFIED IDEOGRAPH - 0xF08A: 0x9956, //CJK UNIFIED IDEOGRAPH - 0xF08B: 0x9957, //CJK UNIFIED IDEOGRAPH - 0xF08C: 0x9958, //CJK UNIFIED IDEOGRAPH - 0xF08D: 0x9959, //CJK UNIFIED IDEOGRAPH - 0xF08E: 0x995A, //CJK UNIFIED IDEOGRAPH - 0xF08F: 0x995B, //CJK UNIFIED IDEOGRAPH - 0xF090: 0x995C, //CJK UNIFIED IDEOGRAPH - 0xF091: 0x995D, //CJK UNIFIED IDEOGRAPH - 0xF092: 0x995E, //CJK UNIFIED IDEOGRAPH - 0xF093: 0x995F, //CJK UNIFIED IDEOGRAPH - 0xF094: 0x9960, //CJK UNIFIED IDEOGRAPH - 0xF095: 0x9961, //CJK UNIFIED IDEOGRAPH - 0xF096: 0x9962, //CJK UNIFIED IDEOGRAPH - 0xF097: 0x9964, //CJK UNIFIED IDEOGRAPH - 0xF098: 0x9966, //CJK UNIFIED IDEOGRAPH - 0xF099: 0x9973, //CJK UNIFIED IDEOGRAPH - 0xF09A: 0x9978, //CJK UNIFIED IDEOGRAPH - 0xF09B: 0x9979, //CJK UNIFIED IDEOGRAPH - 0xF09C: 0x997B, //CJK UNIFIED IDEOGRAPH - 0xF09D: 0x997E, //CJK UNIFIED IDEOGRAPH - 0xF09E: 0x9982, //CJK UNIFIED IDEOGRAPH - 0xF09F: 0x9983, //CJK UNIFIED IDEOGRAPH - 0xF0A0: 0x9989, //CJK UNIFIED IDEOGRAPH - 0xF0A1: 0x7A39, //CJK UNIFIED IDEOGRAPH - 0xF0A2: 0x7A37, //CJK UNIFIED IDEOGRAPH - 0xF0A3: 0x7A51, //CJK UNIFIED IDEOGRAPH - 0xF0A4: 0x9ECF, //CJK UNIFIED IDEOGRAPH - 0xF0A5: 0x99A5, //CJK UNIFIED IDEOGRAPH - 0xF0A6: 0x7A70, //CJK UNIFIED IDEOGRAPH - 0xF0A7: 0x7688, //CJK UNIFIED IDEOGRAPH - 0xF0A8: 0x768E, //CJK UNIFIED IDEOGRAPH - 0xF0A9: 0x7693, //CJK UNIFIED IDEOGRAPH - 0xF0AA: 0x7699, //CJK UNIFIED IDEOGRAPH - 0xF0AB: 0x76A4, //CJK UNIFIED IDEOGRAPH - 0xF0AC: 0x74DE, //CJK UNIFIED IDEOGRAPH - 0xF0AD: 0x74E0, //CJK UNIFIED IDEOGRAPH - 0xF0AE: 0x752C, //CJK UNIFIED IDEOGRAPH - 0xF0AF: 0x9E20, //CJK UNIFIED IDEOGRAPH - 0xF0B0: 0x9E22, //CJK UNIFIED IDEOGRAPH - 0xF0B1: 0x9E28, //CJK UNIFIED IDEOGRAPH - 0xF0B2: 0x9E29, //CJK UNIFIED IDEOGRAPH - 0xF0B3: 0x9E2A, //CJK UNIFIED IDEOGRAPH - 0xF0B4: 0x9E2B, //CJK UNIFIED IDEOGRAPH - 0xF0B5: 0x9E2C, //CJK UNIFIED IDEOGRAPH - 0xF0B6: 0x9E32, //CJK UNIFIED IDEOGRAPH - 0xF0B7: 0x9E31, //CJK UNIFIED IDEOGRAPH - 0xF0B8: 0x9E36, //CJK UNIFIED IDEOGRAPH - 0xF0B9: 0x9E38, //CJK UNIFIED IDEOGRAPH - 0xF0BA: 0x9E37, //CJK UNIFIED IDEOGRAPH - 0xF0BB: 0x9E39, //CJK UNIFIED IDEOGRAPH - 0xF0BC: 0x9E3A, //CJK UNIFIED IDEOGRAPH - 0xF0BD: 0x9E3E, //CJK UNIFIED IDEOGRAPH - 0xF0BE: 0x9E41, //CJK UNIFIED IDEOGRAPH - 0xF0BF: 0x9E42, //CJK UNIFIED IDEOGRAPH - 0xF0C0: 0x9E44, //CJK UNIFIED IDEOGRAPH - 0xF0C1: 0x9E46, //CJK UNIFIED IDEOGRAPH - 0xF0C2: 0x9E47, //CJK UNIFIED IDEOGRAPH - 0xF0C3: 0x9E48, //CJK UNIFIED IDEOGRAPH - 0xF0C4: 0x9E49, //CJK UNIFIED IDEOGRAPH - 0xF0C5: 0x9E4B, //CJK UNIFIED IDEOGRAPH - 0xF0C6: 0x9E4C, //CJK UNIFIED IDEOGRAPH - 0xF0C7: 0x9E4E, //CJK UNIFIED IDEOGRAPH - 0xF0C8: 0x9E51, //CJK UNIFIED IDEOGRAPH - 0xF0C9: 0x9E55, //CJK UNIFIED IDEOGRAPH - 0xF0CA: 0x9E57, //CJK UNIFIED IDEOGRAPH - 0xF0CB: 0x9E5A, //CJK UNIFIED IDEOGRAPH - 0xF0CC: 0x9E5B, //CJK UNIFIED IDEOGRAPH - 0xF0CD: 0x9E5C, //CJK UNIFIED IDEOGRAPH - 0xF0CE: 0x9E5E, //CJK UNIFIED IDEOGRAPH - 0xF0CF: 0x9E63, //CJK UNIFIED IDEOGRAPH - 0xF0D0: 0x9E66, //CJK UNIFIED IDEOGRAPH - 0xF0D1: 0x9E67, //CJK UNIFIED IDEOGRAPH - 0xF0D2: 0x9E68, //CJK UNIFIED IDEOGRAPH - 0xF0D3: 0x9E69, //CJK UNIFIED IDEOGRAPH - 0xF0D4: 0x9E6A, //CJK UNIFIED IDEOGRAPH - 0xF0D5: 0x9E6B, //CJK UNIFIED IDEOGRAPH - 0xF0D6: 0x9E6C, //CJK UNIFIED IDEOGRAPH - 0xF0D7: 0x9E71, //CJK UNIFIED IDEOGRAPH - 0xF0D8: 0x9E6D, //CJK UNIFIED IDEOGRAPH - 0xF0D9: 0x9E73, //CJK UNIFIED IDEOGRAPH - 0xF0DA: 0x7592, //CJK UNIFIED IDEOGRAPH - 0xF0DB: 0x7594, //CJK UNIFIED IDEOGRAPH - 0xF0DC: 0x7596, //CJK UNIFIED IDEOGRAPH - 0xF0DD: 0x75A0, //CJK UNIFIED IDEOGRAPH - 0xF0DE: 0x759D, //CJK UNIFIED IDEOGRAPH - 0xF0DF: 0x75AC, //CJK UNIFIED IDEOGRAPH - 0xF0E0: 0x75A3, //CJK UNIFIED IDEOGRAPH - 0xF0E1: 0x75B3, //CJK UNIFIED IDEOGRAPH - 0xF0E2: 0x75B4, //CJK UNIFIED IDEOGRAPH - 0xF0E3: 0x75B8, //CJK UNIFIED IDEOGRAPH - 0xF0E4: 0x75C4, //CJK UNIFIED IDEOGRAPH - 0xF0E5: 0x75B1, //CJK UNIFIED IDEOGRAPH - 0xF0E6: 0x75B0, //CJK UNIFIED IDEOGRAPH - 0xF0E7: 0x75C3, //CJK UNIFIED IDEOGRAPH - 0xF0E8: 0x75C2, //CJK UNIFIED IDEOGRAPH - 0xF0E9: 0x75D6, //CJK UNIFIED IDEOGRAPH - 0xF0EA: 0x75CD, //CJK UNIFIED IDEOGRAPH - 0xF0EB: 0x75E3, //CJK UNIFIED IDEOGRAPH - 0xF0EC: 0x75E8, //CJK UNIFIED IDEOGRAPH - 0xF0ED: 0x75E6, //CJK UNIFIED IDEOGRAPH - 0xF0EE: 0x75E4, //CJK UNIFIED IDEOGRAPH - 0xF0EF: 0x75EB, //CJK UNIFIED IDEOGRAPH - 0xF0F0: 0x75E7, //CJK UNIFIED IDEOGRAPH - 0xF0F1: 0x7603, //CJK UNIFIED IDEOGRAPH - 0xF0F2: 0x75F1, //CJK UNIFIED IDEOGRAPH - 0xF0F3: 0x75FC, //CJK UNIFIED IDEOGRAPH - 0xF0F4: 0x75FF, //CJK UNIFIED IDEOGRAPH - 0xF0F5: 0x7610, //CJK UNIFIED IDEOGRAPH - 0xF0F6: 0x7600, //CJK UNIFIED IDEOGRAPH - 0xF0F7: 0x7605, //CJK UNIFIED IDEOGRAPH - 0xF0F8: 0x760C, //CJK UNIFIED IDEOGRAPH - 0xF0F9: 0x7617, //CJK UNIFIED IDEOGRAPH - 0xF0FA: 0x760A, //CJK UNIFIED IDEOGRAPH - 0xF0FB: 0x7625, //CJK UNIFIED IDEOGRAPH - 0xF0FC: 0x7618, //CJK UNIFIED IDEOGRAPH - 0xF0FD: 0x7615, //CJK UNIFIED IDEOGRAPH - 0xF0FE: 0x7619, //CJK UNIFIED IDEOGRAPH - 0xF140: 0x998C, //CJK UNIFIED IDEOGRAPH - 0xF141: 0x998E, //CJK UNIFIED IDEOGRAPH - 0xF142: 0x999A, //CJK UNIFIED IDEOGRAPH - 0xF143: 0x999B, //CJK UNIFIED IDEOGRAPH - 0xF144: 0x999C, //CJK UNIFIED IDEOGRAPH - 0xF145: 0x999D, //CJK UNIFIED IDEOGRAPH - 0xF146: 0x999E, //CJK UNIFIED IDEOGRAPH - 0xF147: 0x999F, //CJK UNIFIED IDEOGRAPH - 0xF148: 0x99A0, //CJK UNIFIED IDEOGRAPH - 0xF149: 0x99A1, //CJK UNIFIED IDEOGRAPH - 0xF14A: 0x99A2, //CJK UNIFIED IDEOGRAPH - 0xF14B: 0x99A3, //CJK UNIFIED IDEOGRAPH - 0xF14C: 0x99A4, //CJK UNIFIED IDEOGRAPH - 0xF14D: 0x99A6, //CJK UNIFIED IDEOGRAPH - 0xF14E: 0x99A7, //CJK UNIFIED IDEOGRAPH - 0xF14F: 0x99A9, //CJK UNIFIED IDEOGRAPH - 0xF150: 0x99AA, //CJK UNIFIED IDEOGRAPH - 0xF151: 0x99AB, //CJK UNIFIED IDEOGRAPH - 0xF152: 0x99AC, //CJK UNIFIED IDEOGRAPH - 0xF153: 0x99AD, //CJK UNIFIED IDEOGRAPH - 0xF154: 0x99AE, //CJK UNIFIED IDEOGRAPH - 0xF155: 0x99AF, //CJK UNIFIED IDEOGRAPH - 0xF156: 0x99B0, //CJK UNIFIED IDEOGRAPH - 0xF157: 0x99B1, //CJK UNIFIED IDEOGRAPH - 0xF158: 0x99B2, //CJK UNIFIED IDEOGRAPH - 0xF159: 0x99B3, //CJK UNIFIED IDEOGRAPH - 0xF15A: 0x99B4, //CJK UNIFIED IDEOGRAPH - 0xF15B: 0x99B5, //CJK UNIFIED IDEOGRAPH - 0xF15C: 0x99B6, //CJK UNIFIED IDEOGRAPH - 0xF15D: 0x99B7, //CJK UNIFIED IDEOGRAPH - 0xF15E: 0x99B8, //CJK UNIFIED IDEOGRAPH - 0xF15F: 0x99B9, //CJK UNIFIED IDEOGRAPH - 0xF160: 0x99BA, //CJK UNIFIED IDEOGRAPH - 0xF161: 0x99BB, //CJK UNIFIED IDEOGRAPH - 0xF162: 0x99BC, //CJK UNIFIED IDEOGRAPH - 0xF163: 0x99BD, //CJK UNIFIED IDEOGRAPH - 0xF164: 0x99BE, //CJK UNIFIED IDEOGRAPH - 0xF165: 0x99BF, //CJK UNIFIED IDEOGRAPH - 0xF166: 0x99C0, //CJK UNIFIED IDEOGRAPH - 0xF167: 0x99C1, //CJK UNIFIED IDEOGRAPH - 0xF168: 0x99C2, //CJK UNIFIED IDEOGRAPH - 0xF169: 0x99C3, //CJK UNIFIED IDEOGRAPH - 0xF16A: 0x99C4, //CJK UNIFIED IDEOGRAPH - 0xF16B: 0x99C5, //CJK UNIFIED IDEOGRAPH - 0xF16C: 0x99C6, //CJK UNIFIED IDEOGRAPH - 0xF16D: 0x99C7, //CJK UNIFIED IDEOGRAPH - 0xF16E: 0x99C8, //CJK UNIFIED IDEOGRAPH - 0xF16F: 0x99C9, //CJK UNIFIED IDEOGRAPH - 0xF170: 0x99CA, //CJK UNIFIED IDEOGRAPH - 0xF171: 0x99CB, //CJK UNIFIED IDEOGRAPH - 0xF172: 0x99CC, //CJK UNIFIED IDEOGRAPH - 0xF173: 0x99CD, //CJK UNIFIED IDEOGRAPH - 0xF174: 0x99CE, //CJK UNIFIED IDEOGRAPH - 0xF175: 0x99CF, //CJK UNIFIED IDEOGRAPH - 0xF176: 0x99D0, //CJK UNIFIED IDEOGRAPH - 0xF177: 0x99D1, //CJK UNIFIED IDEOGRAPH - 0xF178: 0x99D2, //CJK UNIFIED IDEOGRAPH - 0xF179: 0x99D3, //CJK UNIFIED IDEOGRAPH - 0xF17A: 0x99D4, //CJK UNIFIED IDEOGRAPH - 0xF17B: 0x99D5, //CJK UNIFIED IDEOGRAPH - 0xF17C: 0x99D6, //CJK UNIFIED IDEOGRAPH - 0xF17D: 0x99D7, //CJK UNIFIED IDEOGRAPH - 0xF17E: 0x99D8, //CJK UNIFIED IDEOGRAPH - 0xF180: 0x99D9, //CJK UNIFIED IDEOGRAPH - 0xF181: 0x99DA, //CJK UNIFIED IDEOGRAPH - 0xF182: 0x99DB, //CJK UNIFIED IDEOGRAPH - 0xF183: 0x99DC, //CJK UNIFIED IDEOGRAPH - 0xF184: 0x99DD, //CJK UNIFIED IDEOGRAPH - 0xF185: 0x99DE, //CJK UNIFIED IDEOGRAPH - 0xF186: 0x99DF, //CJK UNIFIED IDEOGRAPH - 0xF187: 0x99E0, //CJK UNIFIED IDEOGRAPH - 0xF188: 0x99E1, //CJK UNIFIED IDEOGRAPH - 0xF189: 0x99E2, //CJK UNIFIED IDEOGRAPH - 0xF18A: 0x99E3, //CJK UNIFIED IDEOGRAPH - 0xF18B: 0x99E4, //CJK UNIFIED IDEOGRAPH - 0xF18C: 0x99E5, //CJK UNIFIED IDEOGRAPH - 0xF18D: 0x99E6, //CJK UNIFIED IDEOGRAPH - 0xF18E: 0x99E7, //CJK UNIFIED IDEOGRAPH - 0xF18F: 0x99E8, //CJK UNIFIED IDEOGRAPH - 0xF190: 0x99E9, //CJK UNIFIED IDEOGRAPH - 0xF191: 0x99EA, //CJK UNIFIED IDEOGRAPH - 0xF192: 0x99EB, //CJK UNIFIED IDEOGRAPH - 0xF193: 0x99EC, //CJK UNIFIED IDEOGRAPH - 0xF194: 0x99ED, //CJK UNIFIED IDEOGRAPH - 0xF195: 0x99EE, //CJK UNIFIED IDEOGRAPH - 0xF196: 0x99EF, //CJK UNIFIED IDEOGRAPH - 0xF197: 0x99F0, //CJK UNIFIED IDEOGRAPH - 0xF198: 0x99F1, //CJK UNIFIED IDEOGRAPH - 0xF199: 0x99F2, //CJK UNIFIED IDEOGRAPH - 0xF19A: 0x99F3, //CJK UNIFIED IDEOGRAPH - 0xF19B: 0x99F4, //CJK UNIFIED IDEOGRAPH - 0xF19C: 0x99F5, //CJK UNIFIED IDEOGRAPH - 0xF19D: 0x99F6, //CJK UNIFIED IDEOGRAPH - 0xF19E: 0x99F7, //CJK UNIFIED IDEOGRAPH - 0xF19F: 0x99F8, //CJK UNIFIED IDEOGRAPH - 0xF1A0: 0x99F9, //CJK UNIFIED IDEOGRAPH - 0xF1A1: 0x761B, //CJK UNIFIED IDEOGRAPH - 0xF1A2: 0x763C, //CJK UNIFIED IDEOGRAPH - 0xF1A3: 0x7622, //CJK UNIFIED IDEOGRAPH - 0xF1A4: 0x7620, //CJK UNIFIED IDEOGRAPH - 0xF1A5: 0x7640, //CJK UNIFIED IDEOGRAPH - 0xF1A6: 0x762D, //CJK UNIFIED IDEOGRAPH - 0xF1A7: 0x7630, //CJK UNIFIED IDEOGRAPH - 0xF1A8: 0x763F, //CJK UNIFIED IDEOGRAPH - 0xF1A9: 0x7635, //CJK UNIFIED IDEOGRAPH - 0xF1AA: 0x7643, //CJK UNIFIED IDEOGRAPH - 0xF1AB: 0x763E, //CJK UNIFIED IDEOGRAPH - 0xF1AC: 0x7633, //CJK UNIFIED IDEOGRAPH - 0xF1AD: 0x764D, //CJK UNIFIED IDEOGRAPH - 0xF1AE: 0x765E, //CJK UNIFIED IDEOGRAPH - 0xF1AF: 0x7654, //CJK UNIFIED IDEOGRAPH - 0xF1B0: 0x765C, //CJK UNIFIED IDEOGRAPH - 0xF1B1: 0x7656, //CJK UNIFIED IDEOGRAPH - 0xF1B2: 0x766B, //CJK UNIFIED IDEOGRAPH - 0xF1B3: 0x766F, //CJK UNIFIED IDEOGRAPH - 0xF1B4: 0x7FCA, //CJK UNIFIED IDEOGRAPH - 0xF1B5: 0x7AE6, //CJK UNIFIED IDEOGRAPH - 0xF1B6: 0x7A78, //CJK UNIFIED IDEOGRAPH - 0xF1B7: 0x7A79, //CJK UNIFIED IDEOGRAPH - 0xF1B8: 0x7A80, //CJK UNIFIED IDEOGRAPH - 0xF1B9: 0x7A86, //CJK UNIFIED IDEOGRAPH - 0xF1BA: 0x7A88, //CJK UNIFIED IDEOGRAPH - 0xF1BB: 0x7A95, //CJK UNIFIED IDEOGRAPH - 0xF1BC: 0x7AA6, //CJK UNIFIED IDEOGRAPH - 0xF1BD: 0x7AA0, //CJK UNIFIED IDEOGRAPH - 0xF1BE: 0x7AAC, //CJK UNIFIED IDEOGRAPH - 0xF1BF: 0x7AA8, //CJK UNIFIED IDEOGRAPH - 0xF1C0: 0x7AAD, //CJK UNIFIED IDEOGRAPH - 0xF1C1: 0x7AB3, //CJK UNIFIED IDEOGRAPH - 0xF1C2: 0x8864, //CJK UNIFIED IDEOGRAPH - 0xF1C3: 0x8869, //CJK UNIFIED IDEOGRAPH - 0xF1C4: 0x8872, //CJK UNIFIED IDEOGRAPH - 0xF1C5: 0x887D, //CJK UNIFIED IDEOGRAPH - 0xF1C6: 0x887F, //CJK UNIFIED IDEOGRAPH - 0xF1C7: 0x8882, //CJK UNIFIED IDEOGRAPH - 0xF1C8: 0x88A2, //CJK UNIFIED IDEOGRAPH - 0xF1C9: 0x88C6, //CJK UNIFIED IDEOGRAPH - 0xF1CA: 0x88B7, //CJK UNIFIED IDEOGRAPH - 0xF1CB: 0x88BC, //CJK UNIFIED IDEOGRAPH - 0xF1CC: 0x88C9, //CJK UNIFIED IDEOGRAPH - 0xF1CD: 0x88E2, //CJK UNIFIED IDEOGRAPH - 0xF1CE: 0x88CE, //CJK UNIFIED IDEOGRAPH - 0xF1CF: 0x88E3, //CJK UNIFIED IDEOGRAPH - 0xF1D0: 0x88E5, //CJK UNIFIED IDEOGRAPH - 0xF1D1: 0x88F1, //CJK UNIFIED IDEOGRAPH - 0xF1D2: 0x891A, //CJK UNIFIED IDEOGRAPH - 0xF1D3: 0x88FC, //CJK UNIFIED IDEOGRAPH - 0xF1D4: 0x88E8, //CJK UNIFIED IDEOGRAPH - 0xF1D5: 0x88FE, //CJK UNIFIED IDEOGRAPH - 0xF1D6: 0x88F0, //CJK UNIFIED IDEOGRAPH - 0xF1D7: 0x8921, //CJK UNIFIED IDEOGRAPH - 0xF1D8: 0x8919, //CJK UNIFIED IDEOGRAPH - 0xF1D9: 0x8913, //CJK UNIFIED IDEOGRAPH - 0xF1DA: 0x891B, //CJK UNIFIED IDEOGRAPH - 0xF1DB: 0x890A, //CJK UNIFIED IDEOGRAPH - 0xF1DC: 0x8934, //CJK UNIFIED IDEOGRAPH - 0xF1DD: 0x892B, //CJK UNIFIED IDEOGRAPH - 0xF1DE: 0x8936, //CJK UNIFIED IDEOGRAPH - 0xF1DF: 0x8941, //CJK UNIFIED IDEOGRAPH - 0xF1E0: 0x8966, //CJK UNIFIED IDEOGRAPH - 0xF1E1: 0x897B, //CJK UNIFIED IDEOGRAPH - 0xF1E2: 0x758B, //CJK UNIFIED IDEOGRAPH - 0xF1E3: 0x80E5, //CJK UNIFIED IDEOGRAPH - 0xF1E4: 0x76B2, //CJK UNIFIED IDEOGRAPH - 0xF1E5: 0x76B4, //CJK UNIFIED IDEOGRAPH - 0xF1E6: 0x77DC, //CJK UNIFIED IDEOGRAPH - 0xF1E7: 0x8012, //CJK UNIFIED IDEOGRAPH - 0xF1E8: 0x8014, //CJK UNIFIED IDEOGRAPH - 0xF1E9: 0x8016, //CJK UNIFIED IDEOGRAPH - 0xF1EA: 0x801C, //CJK UNIFIED IDEOGRAPH - 0xF1EB: 0x8020, //CJK UNIFIED IDEOGRAPH - 0xF1EC: 0x8022, //CJK UNIFIED IDEOGRAPH - 0xF1ED: 0x8025, //CJK UNIFIED IDEOGRAPH - 0xF1EE: 0x8026, //CJK UNIFIED IDEOGRAPH - 0xF1EF: 0x8027, //CJK UNIFIED IDEOGRAPH - 0xF1F0: 0x8029, //CJK UNIFIED IDEOGRAPH - 0xF1F1: 0x8028, //CJK UNIFIED IDEOGRAPH - 0xF1F2: 0x8031, //CJK UNIFIED IDEOGRAPH - 0xF1F3: 0x800B, //CJK UNIFIED IDEOGRAPH - 0xF1F4: 0x8035, //CJK UNIFIED IDEOGRAPH - 0xF1F5: 0x8043, //CJK UNIFIED IDEOGRAPH - 0xF1F6: 0x8046, //CJK UNIFIED IDEOGRAPH - 0xF1F7: 0x804D, //CJK UNIFIED IDEOGRAPH - 0xF1F8: 0x8052, //CJK UNIFIED IDEOGRAPH - 0xF1F9: 0x8069, //CJK UNIFIED IDEOGRAPH - 0xF1FA: 0x8071, //CJK UNIFIED IDEOGRAPH - 0xF1FB: 0x8983, //CJK UNIFIED IDEOGRAPH - 0xF1FC: 0x9878, //CJK UNIFIED IDEOGRAPH - 0xF1FD: 0x9880, //CJK UNIFIED IDEOGRAPH - 0xF1FE: 0x9883, //CJK UNIFIED IDEOGRAPH - 0xF240: 0x99FA, //CJK UNIFIED IDEOGRAPH - 0xF241: 0x99FB, //CJK UNIFIED IDEOGRAPH - 0xF242: 0x99FC, //CJK UNIFIED IDEOGRAPH - 0xF243: 0x99FD, //CJK UNIFIED IDEOGRAPH - 0xF244: 0x99FE, //CJK UNIFIED IDEOGRAPH - 0xF245: 0x99FF, //CJK UNIFIED IDEOGRAPH - 0xF246: 0x9A00, //CJK UNIFIED IDEOGRAPH - 0xF247: 0x9A01, //CJK UNIFIED IDEOGRAPH - 0xF248: 0x9A02, //CJK UNIFIED IDEOGRAPH - 0xF249: 0x9A03, //CJK UNIFIED IDEOGRAPH - 0xF24A: 0x9A04, //CJK UNIFIED IDEOGRAPH - 0xF24B: 0x9A05, //CJK UNIFIED IDEOGRAPH - 0xF24C: 0x9A06, //CJK UNIFIED IDEOGRAPH - 0xF24D: 0x9A07, //CJK UNIFIED IDEOGRAPH - 0xF24E: 0x9A08, //CJK UNIFIED IDEOGRAPH - 0xF24F: 0x9A09, //CJK UNIFIED IDEOGRAPH - 0xF250: 0x9A0A, //CJK UNIFIED IDEOGRAPH - 0xF251: 0x9A0B, //CJK UNIFIED IDEOGRAPH - 0xF252: 0x9A0C, //CJK UNIFIED IDEOGRAPH - 0xF253: 0x9A0D, //CJK UNIFIED IDEOGRAPH - 0xF254: 0x9A0E, //CJK UNIFIED IDEOGRAPH - 0xF255: 0x9A0F, //CJK UNIFIED IDEOGRAPH - 0xF256: 0x9A10, //CJK UNIFIED IDEOGRAPH - 0xF257: 0x9A11, //CJK UNIFIED IDEOGRAPH - 0xF258: 0x9A12, //CJK UNIFIED IDEOGRAPH - 0xF259: 0x9A13, //CJK UNIFIED IDEOGRAPH - 0xF25A: 0x9A14, //CJK UNIFIED IDEOGRAPH - 0xF25B: 0x9A15, //CJK UNIFIED IDEOGRAPH - 0xF25C: 0x9A16, //CJK UNIFIED IDEOGRAPH - 0xF25D: 0x9A17, //CJK UNIFIED IDEOGRAPH - 0xF25E: 0x9A18, //CJK UNIFIED IDEOGRAPH - 0xF25F: 0x9A19, //CJK UNIFIED IDEOGRAPH - 0xF260: 0x9A1A, //CJK UNIFIED IDEOGRAPH - 0xF261: 0x9A1B, //CJK UNIFIED IDEOGRAPH - 0xF262: 0x9A1C, //CJK UNIFIED IDEOGRAPH - 0xF263: 0x9A1D, //CJK UNIFIED IDEOGRAPH - 0xF264: 0x9A1E, //CJK UNIFIED IDEOGRAPH - 0xF265: 0x9A1F, //CJK UNIFIED IDEOGRAPH - 0xF266: 0x9A20, //CJK UNIFIED IDEOGRAPH - 0xF267: 0x9A21, //CJK UNIFIED IDEOGRAPH - 0xF268: 0x9A22, //CJK UNIFIED IDEOGRAPH - 0xF269: 0x9A23, //CJK UNIFIED IDEOGRAPH - 0xF26A: 0x9A24, //CJK UNIFIED IDEOGRAPH - 0xF26B: 0x9A25, //CJK UNIFIED IDEOGRAPH - 0xF26C: 0x9A26, //CJK UNIFIED IDEOGRAPH - 0xF26D: 0x9A27, //CJK UNIFIED IDEOGRAPH - 0xF26E: 0x9A28, //CJK UNIFIED IDEOGRAPH - 0xF26F: 0x9A29, //CJK UNIFIED IDEOGRAPH - 0xF270: 0x9A2A, //CJK UNIFIED IDEOGRAPH - 0xF271: 0x9A2B, //CJK UNIFIED IDEOGRAPH - 0xF272: 0x9A2C, //CJK UNIFIED IDEOGRAPH - 0xF273: 0x9A2D, //CJK UNIFIED IDEOGRAPH - 0xF274: 0x9A2E, //CJK UNIFIED IDEOGRAPH - 0xF275: 0x9A2F, //CJK UNIFIED IDEOGRAPH - 0xF276: 0x9A30, //CJK UNIFIED IDEOGRAPH - 0xF277: 0x9A31, //CJK UNIFIED IDEOGRAPH - 0xF278: 0x9A32, //CJK UNIFIED IDEOGRAPH - 0xF279: 0x9A33, //CJK UNIFIED IDEOGRAPH - 0xF27A: 0x9A34, //CJK UNIFIED IDEOGRAPH - 0xF27B: 0x9A35, //CJK UNIFIED IDEOGRAPH - 0xF27C: 0x9A36, //CJK UNIFIED IDEOGRAPH - 0xF27D: 0x9A37, //CJK UNIFIED IDEOGRAPH - 0xF27E: 0x9A38, //CJK UNIFIED IDEOGRAPH - 0xF280: 0x9A39, //CJK UNIFIED IDEOGRAPH - 0xF281: 0x9A3A, //CJK UNIFIED IDEOGRAPH - 0xF282: 0x9A3B, //CJK UNIFIED IDEOGRAPH - 0xF283: 0x9A3C, //CJK UNIFIED IDEOGRAPH - 0xF284: 0x9A3D, //CJK UNIFIED IDEOGRAPH - 0xF285: 0x9A3E, //CJK UNIFIED IDEOGRAPH - 0xF286: 0x9A3F, //CJK UNIFIED IDEOGRAPH - 0xF287: 0x9A40, //CJK UNIFIED IDEOGRAPH - 0xF288: 0x9A41, //CJK UNIFIED IDEOGRAPH - 0xF289: 0x9A42, //CJK UNIFIED IDEOGRAPH - 0xF28A: 0x9A43, //CJK UNIFIED IDEOGRAPH - 0xF28B: 0x9A44, //CJK UNIFIED IDEOGRAPH - 0xF28C: 0x9A45, //CJK UNIFIED IDEOGRAPH - 0xF28D: 0x9A46, //CJK UNIFIED IDEOGRAPH - 0xF28E: 0x9A47, //CJK UNIFIED IDEOGRAPH - 0xF28F: 0x9A48, //CJK UNIFIED IDEOGRAPH - 0xF290: 0x9A49, //CJK UNIFIED IDEOGRAPH - 0xF291: 0x9A4A, //CJK UNIFIED IDEOGRAPH - 0xF292: 0x9A4B, //CJK UNIFIED IDEOGRAPH - 0xF293: 0x9A4C, //CJK UNIFIED IDEOGRAPH - 0xF294: 0x9A4D, //CJK UNIFIED IDEOGRAPH - 0xF295: 0x9A4E, //CJK UNIFIED IDEOGRAPH - 0xF296: 0x9A4F, //CJK UNIFIED IDEOGRAPH - 0xF297: 0x9A50, //CJK UNIFIED IDEOGRAPH - 0xF298: 0x9A51, //CJK UNIFIED IDEOGRAPH - 0xF299: 0x9A52, //CJK UNIFIED IDEOGRAPH - 0xF29A: 0x9A53, //CJK UNIFIED IDEOGRAPH - 0xF29B: 0x9A54, //CJK UNIFIED IDEOGRAPH - 0xF29C: 0x9A55, //CJK UNIFIED IDEOGRAPH - 0xF29D: 0x9A56, //CJK UNIFIED IDEOGRAPH - 0xF29E: 0x9A57, //CJK UNIFIED IDEOGRAPH - 0xF29F: 0x9A58, //CJK UNIFIED IDEOGRAPH - 0xF2A0: 0x9A59, //CJK UNIFIED IDEOGRAPH - 0xF2A1: 0x9889, //CJK UNIFIED IDEOGRAPH - 0xF2A2: 0x988C, //CJK UNIFIED IDEOGRAPH - 0xF2A3: 0x988D, //CJK UNIFIED IDEOGRAPH - 0xF2A4: 0x988F, //CJK UNIFIED IDEOGRAPH - 0xF2A5: 0x9894, //CJK UNIFIED IDEOGRAPH - 0xF2A6: 0x989A, //CJK UNIFIED IDEOGRAPH - 0xF2A7: 0x989B, //CJK UNIFIED IDEOGRAPH - 0xF2A8: 0x989E, //CJK UNIFIED IDEOGRAPH - 0xF2A9: 0x989F, //CJK UNIFIED IDEOGRAPH - 0xF2AA: 0x98A1, //CJK UNIFIED IDEOGRAPH - 0xF2AB: 0x98A2, //CJK UNIFIED IDEOGRAPH - 0xF2AC: 0x98A5, //CJK UNIFIED IDEOGRAPH - 0xF2AD: 0x98A6, //CJK UNIFIED IDEOGRAPH - 0xF2AE: 0x864D, //CJK UNIFIED IDEOGRAPH - 0xF2AF: 0x8654, //CJK UNIFIED IDEOGRAPH - 0xF2B0: 0x866C, //CJK UNIFIED IDEOGRAPH - 0xF2B1: 0x866E, //CJK UNIFIED IDEOGRAPH - 0xF2B2: 0x867F, //CJK UNIFIED IDEOGRAPH - 0xF2B3: 0x867A, //CJK UNIFIED IDEOGRAPH - 0xF2B4: 0x867C, //CJK UNIFIED IDEOGRAPH - 0xF2B5: 0x867B, //CJK UNIFIED IDEOGRAPH - 0xF2B6: 0x86A8, //CJK UNIFIED IDEOGRAPH - 0xF2B7: 0x868D, //CJK UNIFIED IDEOGRAPH - 0xF2B8: 0x868B, //CJK UNIFIED IDEOGRAPH - 0xF2B9: 0x86AC, //CJK UNIFIED IDEOGRAPH - 0xF2BA: 0x869D, //CJK UNIFIED IDEOGRAPH - 0xF2BB: 0x86A7, //CJK UNIFIED IDEOGRAPH - 0xF2BC: 0x86A3, //CJK UNIFIED IDEOGRAPH - 0xF2BD: 0x86AA, //CJK UNIFIED IDEOGRAPH - 0xF2BE: 0x8693, //CJK UNIFIED IDEOGRAPH - 0xF2BF: 0x86A9, //CJK UNIFIED IDEOGRAPH - 0xF2C0: 0x86B6, //CJK UNIFIED IDEOGRAPH - 0xF2C1: 0x86C4, //CJK UNIFIED IDEOGRAPH - 0xF2C2: 0x86B5, //CJK UNIFIED IDEOGRAPH - 0xF2C3: 0x86CE, //CJK UNIFIED IDEOGRAPH - 0xF2C4: 0x86B0, //CJK UNIFIED IDEOGRAPH - 0xF2C5: 0x86BA, //CJK UNIFIED IDEOGRAPH - 0xF2C6: 0x86B1, //CJK UNIFIED IDEOGRAPH - 0xF2C7: 0x86AF, //CJK UNIFIED IDEOGRAPH - 0xF2C8: 0x86C9, //CJK UNIFIED IDEOGRAPH - 0xF2C9: 0x86CF, //CJK UNIFIED IDEOGRAPH - 0xF2CA: 0x86B4, //CJK UNIFIED IDEOGRAPH - 0xF2CB: 0x86E9, //CJK UNIFIED IDEOGRAPH - 0xF2CC: 0x86F1, //CJK UNIFIED IDEOGRAPH - 0xF2CD: 0x86F2, //CJK UNIFIED IDEOGRAPH - 0xF2CE: 0x86ED, //CJK UNIFIED IDEOGRAPH - 0xF2CF: 0x86F3, //CJK UNIFIED IDEOGRAPH - 0xF2D0: 0x86D0, //CJK UNIFIED IDEOGRAPH - 0xF2D1: 0x8713, //CJK UNIFIED IDEOGRAPH - 0xF2D2: 0x86DE, //CJK UNIFIED IDEOGRAPH - 0xF2D3: 0x86F4, //CJK UNIFIED IDEOGRAPH - 0xF2D4: 0x86DF, //CJK UNIFIED IDEOGRAPH - 0xF2D5: 0x86D8, //CJK UNIFIED IDEOGRAPH - 0xF2D6: 0x86D1, //CJK UNIFIED IDEOGRAPH - 0xF2D7: 0x8703, //CJK UNIFIED IDEOGRAPH - 0xF2D8: 0x8707, //CJK UNIFIED IDEOGRAPH - 0xF2D9: 0x86F8, //CJK UNIFIED IDEOGRAPH - 0xF2DA: 0x8708, //CJK UNIFIED IDEOGRAPH - 0xF2DB: 0x870A, //CJK UNIFIED IDEOGRAPH - 0xF2DC: 0x870D, //CJK UNIFIED IDEOGRAPH - 0xF2DD: 0x8709, //CJK UNIFIED IDEOGRAPH - 0xF2DE: 0x8723, //CJK UNIFIED IDEOGRAPH - 0xF2DF: 0x873B, //CJK UNIFIED IDEOGRAPH - 0xF2E0: 0x871E, //CJK UNIFIED IDEOGRAPH - 0xF2E1: 0x8725, //CJK UNIFIED IDEOGRAPH - 0xF2E2: 0x872E, //CJK UNIFIED IDEOGRAPH - 0xF2E3: 0x871A, //CJK UNIFIED IDEOGRAPH - 0xF2E4: 0x873E, //CJK UNIFIED IDEOGRAPH - 0xF2E5: 0x8748, //CJK UNIFIED IDEOGRAPH - 0xF2E6: 0x8734, //CJK UNIFIED IDEOGRAPH - 0xF2E7: 0x8731, //CJK UNIFIED IDEOGRAPH - 0xF2E8: 0x8729, //CJK UNIFIED IDEOGRAPH - 0xF2E9: 0x8737, //CJK UNIFIED IDEOGRAPH - 0xF2EA: 0x873F, //CJK UNIFIED IDEOGRAPH - 0xF2EB: 0x8782, //CJK UNIFIED IDEOGRAPH - 0xF2EC: 0x8722, //CJK UNIFIED IDEOGRAPH - 0xF2ED: 0x877D, //CJK UNIFIED IDEOGRAPH - 0xF2EE: 0x877E, //CJK UNIFIED IDEOGRAPH - 0xF2EF: 0x877B, //CJK UNIFIED IDEOGRAPH - 0xF2F0: 0x8760, //CJK UNIFIED IDEOGRAPH - 0xF2F1: 0x8770, //CJK UNIFIED IDEOGRAPH - 0xF2F2: 0x874C, //CJK UNIFIED IDEOGRAPH - 0xF2F3: 0x876E, //CJK UNIFIED IDEOGRAPH - 0xF2F4: 0x878B, //CJK UNIFIED IDEOGRAPH - 0xF2F5: 0x8753, //CJK UNIFIED IDEOGRAPH - 0xF2F6: 0x8763, //CJK UNIFIED IDEOGRAPH - 0xF2F7: 0x877C, //CJK UNIFIED IDEOGRAPH - 0xF2F8: 0x8764, //CJK UNIFIED IDEOGRAPH - 0xF2F9: 0x8759, //CJK UNIFIED IDEOGRAPH - 0xF2FA: 0x8765, //CJK UNIFIED IDEOGRAPH - 0xF2FB: 0x8793, //CJK UNIFIED IDEOGRAPH - 0xF2FC: 0x87AF, //CJK UNIFIED IDEOGRAPH - 0xF2FD: 0x87A8, //CJK UNIFIED IDEOGRAPH - 0xF2FE: 0x87D2, //CJK UNIFIED IDEOGRAPH - 0xF340: 0x9A5A, //CJK UNIFIED IDEOGRAPH - 0xF341: 0x9A5B, //CJK UNIFIED IDEOGRAPH - 0xF342: 0x9A5C, //CJK UNIFIED IDEOGRAPH - 0xF343: 0x9A5D, //CJK UNIFIED IDEOGRAPH - 0xF344: 0x9A5E, //CJK UNIFIED IDEOGRAPH - 0xF345: 0x9A5F, //CJK UNIFIED IDEOGRAPH - 0xF346: 0x9A60, //CJK UNIFIED IDEOGRAPH - 0xF347: 0x9A61, //CJK UNIFIED IDEOGRAPH - 0xF348: 0x9A62, //CJK UNIFIED IDEOGRAPH - 0xF349: 0x9A63, //CJK UNIFIED IDEOGRAPH - 0xF34A: 0x9A64, //CJK UNIFIED IDEOGRAPH - 0xF34B: 0x9A65, //CJK UNIFIED IDEOGRAPH - 0xF34C: 0x9A66, //CJK UNIFIED IDEOGRAPH - 0xF34D: 0x9A67, //CJK UNIFIED IDEOGRAPH - 0xF34E: 0x9A68, //CJK UNIFIED IDEOGRAPH - 0xF34F: 0x9A69, //CJK UNIFIED IDEOGRAPH - 0xF350: 0x9A6A, //CJK UNIFIED IDEOGRAPH - 0xF351: 0x9A6B, //CJK UNIFIED IDEOGRAPH - 0xF352: 0x9A72, //CJK UNIFIED IDEOGRAPH - 0xF353: 0x9A83, //CJK UNIFIED IDEOGRAPH - 0xF354: 0x9A89, //CJK UNIFIED IDEOGRAPH - 0xF355: 0x9A8D, //CJK UNIFIED IDEOGRAPH - 0xF356: 0x9A8E, //CJK UNIFIED IDEOGRAPH - 0xF357: 0x9A94, //CJK UNIFIED IDEOGRAPH - 0xF358: 0x9A95, //CJK UNIFIED IDEOGRAPH - 0xF359: 0x9A99, //CJK UNIFIED IDEOGRAPH - 0xF35A: 0x9AA6, //CJK UNIFIED IDEOGRAPH - 0xF35B: 0x9AA9, //CJK UNIFIED IDEOGRAPH - 0xF35C: 0x9AAA, //CJK UNIFIED IDEOGRAPH - 0xF35D: 0x9AAB, //CJK UNIFIED IDEOGRAPH - 0xF35E: 0x9AAC, //CJK UNIFIED IDEOGRAPH - 0xF35F: 0x9AAD, //CJK UNIFIED IDEOGRAPH - 0xF360: 0x9AAE, //CJK UNIFIED IDEOGRAPH - 0xF361: 0x9AAF, //CJK UNIFIED IDEOGRAPH - 0xF362: 0x9AB2, //CJK UNIFIED IDEOGRAPH - 0xF363: 0x9AB3, //CJK UNIFIED IDEOGRAPH - 0xF364: 0x9AB4, //CJK UNIFIED IDEOGRAPH - 0xF365: 0x9AB5, //CJK UNIFIED IDEOGRAPH - 0xF366: 0x9AB9, //CJK UNIFIED IDEOGRAPH - 0xF367: 0x9ABB, //CJK UNIFIED IDEOGRAPH - 0xF368: 0x9ABD, //CJK UNIFIED IDEOGRAPH - 0xF369: 0x9ABE, //CJK UNIFIED IDEOGRAPH - 0xF36A: 0x9ABF, //CJK UNIFIED IDEOGRAPH - 0xF36B: 0x9AC3, //CJK UNIFIED IDEOGRAPH - 0xF36C: 0x9AC4, //CJK UNIFIED IDEOGRAPH - 0xF36D: 0x9AC6, //CJK UNIFIED IDEOGRAPH - 0xF36E: 0x9AC7, //CJK UNIFIED IDEOGRAPH - 0xF36F: 0x9AC8, //CJK UNIFIED IDEOGRAPH - 0xF370: 0x9AC9, //CJK UNIFIED IDEOGRAPH - 0xF371: 0x9ACA, //CJK UNIFIED IDEOGRAPH - 0xF372: 0x9ACD, //CJK UNIFIED IDEOGRAPH - 0xF373: 0x9ACE, //CJK UNIFIED IDEOGRAPH - 0xF374: 0x9ACF, //CJK UNIFIED IDEOGRAPH - 0xF375: 0x9AD0, //CJK UNIFIED IDEOGRAPH - 0xF376: 0x9AD2, //CJK UNIFIED IDEOGRAPH - 0xF377: 0x9AD4, //CJK UNIFIED IDEOGRAPH - 0xF378: 0x9AD5, //CJK UNIFIED IDEOGRAPH - 0xF379: 0x9AD6, //CJK UNIFIED IDEOGRAPH - 0xF37A: 0x9AD7, //CJK UNIFIED IDEOGRAPH - 0xF37B: 0x9AD9, //CJK UNIFIED IDEOGRAPH - 0xF37C: 0x9ADA, //CJK UNIFIED IDEOGRAPH - 0xF37D: 0x9ADB, //CJK UNIFIED IDEOGRAPH - 0xF37E: 0x9ADC, //CJK UNIFIED IDEOGRAPH - 0xF380: 0x9ADD, //CJK UNIFIED IDEOGRAPH - 0xF381: 0x9ADE, //CJK UNIFIED IDEOGRAPH - 0xF382: 0x9AE0, //CJK UNIFIED IDEOGRAPH - 0xF383: 0x9AE2, //CJK UNIFIED IDEOGRAPH - 0xF384: 0x9AE3, //CJK UNIFIED IDEOGRAPH - 0xF385: 0x9AE4, //CJK UNIFIED IDEOGRAPH - 0xF386: 0x9AE5, //CJK UNIFIED IDEOGRAPH - 0xF387: 0x9AE7, //CJK UNIFIED IDEOGRAPH - 0xF388: 0x9AE8, //CJK UNIFIED IDEOGRAPH - 0xF389: 0x9AE9, //CJK UNIFIED IDEOGRAPH - 0xF38A: 0x9AEA, //CJK UNIFIED IDEOGRAPH - 0xF38B: 0x9AEC, //CJK UNIFIED IDEOGRAPH - 0xF38C: 0x9AEE, //CJK UNIFIED IDEOGRAPH - 0xF38D: 0x9AF0, //CJK UNIFIED IDEOGRAPH - 0xF38E: 0x9AF1, //CJK UNIFIED IDEOGRAPH - 0xF38F: 0x9AF2, //CJK UNIFIED IDEOGRAPH - 0xF390: 0x9AF3, //CJK UNIFIED IDEOGRAPH - 0xF391: 0x9AF4, //CJK UNIFIED IDEOGRAPH - 0xF392: 0x9AF5, //CJK UNIFIED IDEOGRAPH - 0xF393: 0x9AF6, //CJK UNIFIED IDEOGRAPH - 0xF394: 0x9AF7, //CJK UNIFIED IDEOGRAPH - 0xF395: 0x9AF8, //CJK UNIFIED IDEOGRAPH - 0xF396: 0x9AFA, //CJK UNIFIED IDEOGRAPH - 0xF397: 0x9AFC, //CJK UNIFIED IDEOGRAPH - 0xF398: 0x9AFD, //CJK UNIFIED IDEOGRAPH - 0xF399: 0x9AFE, //CJK UNIFIED IDEOGRAPH - 0xF39A: 0x9AFF, //CJK UNIFIED IDEOGRAPH - 0xF39B: 0x9B00, //CJK UNIFIED IDEOGRAPH - 0xF39C: 0x9B01, //CJK UNIFIED IDEOGRAPH - 0xF39D: 0x9B02, //CJK UNIFIED IDEOGRAPH - 0xF39E: 0x9B04, //CJK UNIFIED IDEOGRAPH - 0xF39F: 0x9B05, //CJK UNIFIED IDEOGRAPH - 0xF3A0: 0x9B06, //CJK UNIFIED IDEOGRAPH - 0xF3A1: 0x87C6, //CJK UNIFIED IDEOGRAPH - 0xF3A2: 0x8788, //CJK UNIFIED IDEOGRAPH - 0xF3A3: 0x8785, //CJK UNIFIED IDEOGRAPH - 0xF3A4: 0x87AD, //CJK UNIFIED IDEOGRAPH - 0xF3A5: 0x8797, //CJK UNIFIED IDEOGRAPH - 0xF3A6: 0x8783, //CJK UNIFIED IDEOGRAPH - 0xF3A7: 0x87AB, //CJK UNIFIED IDEOGRAPH - 0xF3A8: 0x87E5, //CJK UNIFIED IDEOGRAPH - 0xF3A9: 0x87AC, //CJK UNIFIED IDEOGRAPH - 0xF3AA: 0x87B5, //CJK UNIFIED IDEOGRAPH - 0xF3AB: 0x87B3, //CJK UNIFIED IDEOGRAPH - 0xF3AC: 0x87CB, //CJK UNIFIED IDEOGRAPH - 0xF3AD: 0x87D3, //CJK UNIFIED IDEOGRAPH - 0xF3AE: 0x87BD, //CJK UNIFIED IDEOGRAPH - 0xF3AF: 0x87D1, //CJK UNIFIED IDEOGRAPH - 0xF3B0: 0x87C0, //CJK UNIFIED IDEOGRAPH - 0xF3B1: 0x87CA, //CJK UNIFIED IDEOGRAPH - 0xF3B2: 0x87DB, //CJK UNIFIED IDEOGRAPH - 0xF3B3: 0x87EA, //CJK UNIFIED IDEOGRAPH - 0xF3B4: 0x87E0, //CJK UNIFIED IDEOGRAPH - 0xF3B5: 0x87EE, //CJK UNIFIED IDEOGRAPH - 0xF3B6: 0x8816, //CJK UNIFIED IDEOGRAPH - 0xF3B7: 0x8813, //CJK UNIFIED IDEOGRAPH - 0xF3B8: 0x87FE, //CJK UNIFIED IDEOGRAPH - 0xF3B9: 0x880A, //CJK UNIFIED IDEOGRAPH - 0xF3BA: 0x881B, //CJK UNIFIED IDEOGRAPH - 0xF3BB: 0x8821, //CJK UNIFIED IDEOGRAPH - 0xF3BC: 0x8839, //CJK UNIFIED IDEOGRAPH - 0xF3BD: 0x883C, //CJK UNIFIED IDEOGRAPH - 0xF3BE: 0x7F36, //CJK UNIFIED IDEOGRAPH - 0xF3BF: 0x7F42, //CJK UNIFIED IDEOGRAPH - 0xF3C0: 0x7F44, //CJK UNIFIED IDEOGRAPH - 0xF3C1: 0x7F45, //CJK UNIFIED IDEOGRAPH - 0xF3C2: 0x8210, //CJK UNIFIED IDEOGRAPH - 0xF3C3: 0x7AFA, //CJK UNIFIED IDEOGRAPH - 0xF3C4: 0x7AFD, //CJK UNIFIED IDEOGRAPH - 0xF3C5: 0x7B08, //CJK UNIFIED IDEOGRAPH - 0xF3C6: 0x7B03, //CJK UNIFIED IDEOGRAPH - 0xF3C7: 0x7B04, //CJK UNIFIED IDEOGRAPH - 0xF3C8: 0x7B15, //CJK UNIFIED IDEOGRAPH - 0xF3C9: 0x7B0A, //CJK UNIFIED IDEOGRAPH - 0xF3CA: 0x7B2B, //CJK UNIFIED IDEOGRAPH - 0xF3CB: 0x7B0F, //CJK UNIFIED IDEOGRAPH - 0xF3CC: 0x7B47, //CJK UNIFIED IDEOGRAPH - 0xF3CD: 0x7B38, //CJK UNIFIED IDEOGRAPH - 0xF3CE: 0x7B2A, //CJK UNIFIED IDEOGRAPH - 0xF3CF: 0x7B19, //CJK UNIFIED IDEOGRAPH - 0xF3D0: 0x7B2E, //CJK UNIFIED IDEOGRAPH - 0xF3D1: 0x7B31, //CJK UNIFIED IDEOGRAPH - 0xF3D2: 0x7B20, //CJK UNIFIED IDEOGRAPH - 0xF3D3: 0x7B25, //CJK UNIFIED IDEOGRAPH - 0xF3D4: 0x7B24, //CJK UNIFIED IDEOGRAPH - 0xF3D5: 0x7B33, //CJK UNIFIED IDEOGRAPH - 0xF3D6: 0x7B3E, //CJK UNIFIED IDEOGRAPH - 0xF3D7: 0x7B1E, //CJK UNIFIED IDEOGRAPH - 0xF3D8: 0x7B58, //CJK UNIFIED IDEOGRAPH - 0xF3D9: 0x7B5A, //CJK UNIFIED IDEOGRAPH - 0xF3DA: 0x7B45, //CJK UNIFIED IDEOGRAPH - 0xF3DB: 0x7B75, //CJK UNIFIED IDEOGRAPH - 0xF3DC: 0x7B4C, //CJK UNIFIED IDEOGRAPH - 0xF3DD: 0x7B5D, //CJK UNIFIED IDEOGRAPH - 0xF3DE: 0x7B60, //CJK UNIFIED IDEOGRAPH - 0xF3DF: 0x7B6E, //CJK UNIFIED IDEOGRAPH - 0xF3E0: 0x7B7B, //CJK UNIFIED IDEOGRAPH - 0xF3E1: 0x7B62, //CJK UNIFIED IDEOGRAPH - 0xF3E2: 0x7B72, //CJK UNIFIED IDEOGRAPH - 0xF3E3: 0x7B71, //CJK UNIFIED IDEOGRAPH - 0xF3E4: 0x7B90, //CJK UNIFIED IDEOGRAPH - 0xF3E5: 0x7BA6, //CJK UNIFIED IDEOGRAPH - 0xF3E6: 0x7BA7, //CJK UNIFIED IDEOGRAPH - 0xF3E7: 0x7BB8, //CJK UNIFIED IDEOGRAPH - 0xF3E8: 0x7BAC, //CJK UNIFIED IDEOGRAPH - 0xF3E9: 0x7B9D, //CJK UNIFIED IDEOGRAPH - 0xF3EA: 0x7BA8, //CJK UNIFIED IDEOGRAPH - 0xF3EB: 0x7B85, //CJK UNIFIED IDEOGRAPH - 0xF3EC: 0x7BAA, //CJK UNIFIED IDEOGRAPH - 0xF3ED: 0x7B9C, //CJK UNIFIED IDEOGRAPH - 0xF3EE: 0x7BA2, //CJK UNIFIED IDEOGRAPH - 0xF3EF: 0x7BAB, //CJK UNIFIED IDEOGRAPH - 0xF3F0: 0x7BB4, //CJK UNIFIED IDEOGRAPH - 0xF3F1: 0x7BD1, //CJK UNIFIED IDEOGRAPH - 0xF3F2: 0x7BC1, //CJK UNIFIED IDEOGRAPH - 0xF3F3: 0x7BCC, //CJK UNIFIED IDEOGRAPH - 0xF3F4: 0x7BDD, //CJK UNIFIED IDEOGRAPH - 0xF3F5: 0x7BDA, //CJK UNIFIED IDEOGRAPH - 0xF3F6: 0x7BE5, //CJK UNIFIED IDEOGRAPH - 0xF3F7: 0x7BE6, //CJK UNIFIED IDEOGRAPH - 0xF3F8: 0x7BEA, //CJK UNIFIED IDEOGRAPH - 0xF3F9: 0x7C0C, //CJK UNIFIED IDEOGRAPH - 0xF3FA: 0x7BFE, //CJK UNIFIED IDEOGRAPH - 0xF3FB: 0x7BFC, //CJK UNIFIED IDEOGRAPH - 0xF3FC: 0x7C0F, //CJK UNIFIED IDEOGRAPH - 0xF3FD: 0x7C16, //CJK UNIFIED IDEOGRAPH - 0xF3FE: 0x7C0B, //CJK UNIFIED IDEOGRAPH - 0xF440: 0x9B07, //CJK UNIFIED IDEOGRAPH - 0xF441: 0x9B09, //CJK UNIFIED IDEOGRAPH - 0xF442: 0x9B0A, //CJK UNIFIED IDEOGRAPH - 0xF443: 0x9B0B, //CJK UNIFIED IDEOGRAPH - 0xF444: 0x9B0C, //CJK UNIFIED IDEOGRAPH - 0xF445: 0x9B0D, //CJK UNIFIED IDEOGRAPH - 0xF446: 0x9B0E, //CJK UNIFIED IDEOGRAPH - 0xF447: 0x9B10, //CJK UNIFIED IDEOGRAPH - 0xF448: 0x9B11, //CJK UNIFIED IDEOGRAPH - 0xF449: 0x9B12, //CJK UNIFIED IDEOGRAPH - 0xF44A: 0x9B14, //CJK UNIFIED IDEOGRAPH - 0xF44B: 0x9B15, //CJK UNIFIED IDEOGRAPH - 0xF44C: 0x9B16, //CJK UNIFIED IDEOGRAPH - 0xF44D: 0x9B17, //CJK UNIFIED IDEOGRAPH - 0xF44E: 0x9B18, //CJK UNIFIED IDEOGRAPH - 0xF44F: 0x9B19, //CJK UNIFIED IDEOGRAPH - 0xF450: 0x9B1A, //CJK UNIFIED IDEOGRAPH - 0xF451: 0x9B1B, //CJK UNIFIED IDEOGRAPH - 0xF452: 0x9B1C, //CJK UNIFIED IDEOGRAPH - 0xF453: 0x9B1D, //CJK UNIFIED IDEOGRAPH - 0xF454: 0x9B1E, //CJK UNIFIED IDEOGRAPH - 0xF455: 0x9B20, //CJK UNIFIED IDEOGRAPH - 0xF456: 0x9B21, //CJK UNIFIED IDEOGRAPH - 0xF457: 0x9B22, //CJK UNIFIED IDEOGRAPH - 0xF458: 0x9B24, //CJK UNIFIED IDEOGRAPH - 0xF459: 0x9B25, //CJK UNIFIED IDEOGRAPH - 0xF45A: 0x9B26, //CJK UNIFIED IDEOGRAPH - 0xF45B: 0x9B27, //CJK UNIFIED IDEOGRAPH - 0xF45C: 0x9B28, //CJK UNIFIED IDEOGRAPH - 0xF45D: 0x9B29, //CJK UNIFIED IDEOGRAPH - 0xF45E: 0x9B2A, //CJK UNIFIED IDEOGRAPH - 0xF45F: 0x9B2B, //CJK UNIFIED IDEOGRAPH - 0xF460: 0x9B2C, //CJK UNIFIED IDEOGRAPH - 0xF461: 0x9B2D, //CJK UNIFIED IDEOGRAPH - 0xF462: 0x9B2E, //CJK UNIFIED IDEOGRAPH - 0xF463: 0x9B30, //CJK UNIFIED IDEOGRAPH - 0xF464: 0x9B31, //CJK UNIFIED IDEOGRAPH - 0xF465: 0x9B33, //CJK UNIFIED IDEOGRAPH - 0xF466: 0x9B34, //CJK UNIFIED IDEOGRAPH - 0xF467: 0x9B35, //CJK UNIFIED IDEOGRAPH - 0xF468: 0x9B36, //CJK UNIFIED IDEOGRAPH - 0xF469: 0x9B37, //CJK UNIFIED IDEOGRAPH - 0xF46A: 0x9B38, //CJK UNIFIED IDEOGRAPH - 0xF46B: 0x9B39, //CJK UNIFIED IDEOGRAPH - 0xF46C: 0x9B3A, //CJK UNIFIED IDEOGRAPH - 0xF46D: 0x9B3D, //CJK UNIFIED IDEOGRAPH - 0xF46E: 0x9B3E, //CJK UNIFIED IDEOGRAPH - 0xF46F: 0x9B3F, //CJK UNIFIED IDEOGRAPH - 0xF470: 0x9B40, //CJK UNIFIED IDEOGRAPH - 0xF471: 0x9B46, //CJK UNIFIED IDEOGRAPH - 0xF472: 0x9B4A, //CJK UNIFIED IDEOGRAPH - 0xF473: 0x9B4B, //CJK UNIFIED IDEOGRAPH - 0xF474: 0x9B4C, //CJK UNIFIED IDEOGRAPH - 0xF475: 0x9B4E, //CJK UNIFIED IDEOGRAPH - 0xF476: 0x9B50, //CJK UNIFIED IDEOGRAPH - 0xF477: 0x9B52, //CJK UNIFIED IDEOGRAPH - 0xF478: 0x9B53, //CJK UNIFIED IDEOGRAPH - 0xF479: 0x9B55, //CJK UNIFIED IDEOGRAPH - 0xF47A: 0x9B56, //CJK UNIFIED IDEOGRAPH - 0xF47B: 0x9B57, //CJK UNIFIED IDEOGRAPH - 0xF47C: 0x9B58, //CJK UNIFIED IDEOGRAPH - 0xF47D: 0x9B59, //CJK UNIFIED IDEOGRAPH - 0xF47E: 0x9B5A, //CJK UNIFIED IDEOGRAPH - 0xF480: 0x9B5B, //CJK UNIFIED IDEOGRAPH - 0xF481: 0x9B5C, //CJK UNIFIED IDEOGRAPH - 0xF482: 0x9B5D, //CJK UNIFIED IDEOGRAPH - 0xF483: 0x9B5E, //CJK UNIFIED IDEOGRAPH - 0xF484: 0x9B5F, //CJK UNIFIED IDEOGRAPH - 0xF485: 0x9B60, //CJK UNIFIED IDEOGRAPH - 0xF486: 0x9B61, //CJK UNIFIED IDEOGRAPH - 0xF487: 0x9B62, //CJK UNIFIED IDEOGRAPH - 0xF488: 0x9B63, //CJK UNIFIED IDEOGRAPH - 0xF489: 0x9B64, //CJK UNIFIED IDEOGRAPH - 0xF48A: 0x9B65, //CJK UNIFIED IDEOGRAPH - 0xF48B: 0x9B66, //CJK UNIFIED IDEOGRAPH - 0xF48C: 0x9B67, //CJK UNIFIED IDEOGRAPH - 0xF48D: 0x9B68, //CJK UNIFIED IDEOGRAPH - 0xF48E: 0x9B69, //CJK UNIFIED IDEOGRAPH - 0xF48F: 0x9B6A, //CJK UNIFIED IDEOGRAPH - 0xF490: 0x9B6B, //CJK UNIFIED IDEOGRAPH - 0xF491: 0x9B6C, //CJK UNIFIED IDEOGRAPH - 0xF492: 0x9B6D, //CJK UNIFIED IDEOGRAPH - 0xF493: 0x9B6E, //CJK UNIFIED IDEOGRAPH - 0xF494: 0x9B6F, //CJK UNIFIED IDEOGRAPH - 0xF495: 0x9B70, //CJK UNIFIED IDEOGRAPH - 0xF496: 0x9B71, //CJK UNIFIED IDEOGRAPH - 0xF497: 0x9B72, //CJK UNIFIED IDEOGRAPH - 0xF498: 0x9B73, //CJK UNIFIED IDEOGRAPH - 0xF499: 0x9B74, //CJK UNIFIED IDEOGRAPH - 0xF49A: 0x9B75, //CJK UNIFIED IDEOGRAPH - 0xF49B: 0x9B76, //CJK UNIFIED IDEOGRAPH - 0xF49C: 0x9B77, //CJK UNIFIED IDEOGRAPH - 0xF49D: 0x9B78, //CJK UNIFIED IDEOGRAPH - 0xF49E: 0x9B79, //CJK UNIFIED IDEOGRAPH - 0xF49F: 0x9B7A, //CJK UNIFIED IDEOGRAPH - 0xF4A0: 0x9B7B, //CJK UNIFIED IDEOGRAPH - 0xF4A1: 0x7C1F, //CJK UNIFIED IDEOGRAPH - 0xF4A2: 0x7C2A, //CJK UNIFIED IDEOGRAPH - 0xF4A3: 0x7C26, //CJK UNIFIED IDEOGRAPH - 0xF4A4: 0x7C38, //CJK UNIFIED IDEOGRAPH - 0xF4A5: 0x7C41, //CJK UNIFIED IDEOGRAPH - 0xF4A6: 0x7C40, //CJK UNIFIED IDEOGRAPH - 0xF4A7: 0x81FE, //CJK UNIFIED IDEOGRAPH - 0xF4A8: 0x8201, //CJK UNIFIED IDEOGRAPH - 0xF4A9: 0x8202, //CJK UNIFIED IDEOGRAPH - 0xF4AA: 0x8204, //CJK UNIFIED IDEOGRAPH - 0xF4AB: 0x81EC, //CJK UNIFIED IDEOGRAPH - 0xF4AC: 0x8844, //CJK UNIFIED IDEOGRAPH - 0xF4AD: 0x8221, //CJK UNIFIED IDEOGRAPH - 0xF4AE: 0x8222, //CJK UNIFIED IDEOGRAPH - 0xF4AF: 0x8223, //CJK UNIFIED IDEOGRAPH - 0xF4B0: 0x822D, //CJK UNIFIED IDEOGRAPH - 0xF4B1: 0x822F, //CJK UNIFIED IDEOGRAPH - 0xF4B2: 0x8228, //CJK UNIFIED IDEOGRAPH - 0xF4B3: 0x822B, //CJK UNIFIED IDEOGRAPH - 0xF4B4: 0x8238, //CJK UNIFIED IDEOGRAPH - 0xF4B5: 0x823B, //CJK UNIFIED IDEOGRAPH - 0xF4B6: 0x8233, //CJK UNIFIED IDEOGRAPH - 0xF4B7: 0x8234, //CJK UNIFIED IDEOGRAPH - 0xF4B8: 0x823E, //CJK UNIFIED IDEOGRAPH - 0xF4B9: 0x8244, //CJK UNIFIED IDEOGRAPH - 0xF4BA: 0x8249, //CJK UNIFIED IDEOGRAPH - 0xF4BB: 0x824B, //CJK UNIFIED IDEOGRAPH - 0xF4BC: 0x824F, //CJK UNIFIED IDEOGRAPH - 0xF4BD: 0x825A, //CJK UNIFIED IDEOGRAPH - 0xF4BE: 0x825F, //CJK UNIFIED IDEOGRAPH - 0xF4BF: 0x8268, //CJK UNIFIED IDEOGRAPH - 0xF4C0: 0x887E, //CJK UNIFIED IDEOGRAPH - 0xF4C1: 0x8885, //CJK UNIFIED IDEOGRAPH - 0xF4C2: 0x8888, //CJK UNIFIED IDEOGRAPH - 0xF4C3: 0x88D8, //CJK UNIFIED IDEOGRAPH - 0xF4C4: 0x88DF, //CJK UNIFIED IDEOGRAPH - 0xF4C5: 0x895E, //CJK UNIFIED IDEOGRAPH - 0xF4C6: 0x7F9D, //CJK UNIFIED IDEOGRAPH - 0xF4C7: 0x7F9F, //CJK UNIFIED IDEOGRAPH - 0xF4C8: 0x7FA7, //CJK UNIFIED IDEOGRAPH - 0xF4C9: 0x7FAF, //CJK UNIFIED IDEOGRAPH - 0xF4CA: 0x7FB0, //CJK UNIFIED IDEOGRAPH - 0xF4CB: 0x7FB2, //CJK UNIFIED IDEOGRAPH - 0xF4CC: 0x7C7C, //CJK UNIFIED IDEOGRAPH - 0xF4CD: 0x6549, //CJK UNIFIED IDEOGRAPH - 0xF4CE: 0x7C91, //CJK UNIFIED IDEOGRAPH - 0xF4CF: 0x7C9D, //CJK UNIFIED IDEOGRAPH - 0xF4D0: 0x7C9C, //CJK UNIFIED IDEOGRAPH - 0xF4D1: 0x7C9E, //CJK UNIFIED IDEOGRAPH - 0xF4D2: 0x7CA2, //CJK UNIFIED IDEOGRAPH - 0xF4D3: 0x7CB2, //CJK UNIFIED IDEOGRAPH - 0xF4D4: 0x7CBC, //CJK UNIFIED IDEOGRAPH - 0xF4D5: 0x7CBD, //CJK UNIFIED IDEOGRAPH - 0xF4D6: 0x7CC1, //CJK UNIFIED IDEOGRAPH - 0xF4D7: 0x7CC7, //CJK UNIFIED IDEOGRAPH - 0xF4D8: 0x7CCC, //CJK UNIFIED IDEOGRAPH - 0xF4D9: 0x7CCD, //CJK UNIFIED IDEOGRAPH - 0xF4DA: 0x7CC8, //CJK UNIFIED IDEOGRAPH - 0xF4DB: 0x7CC5, //CJK UNIFIED IDEOGRAPH - 0xF4DC: 0x7CD7, //CJK UNIFIED IDEOGRAPH - 0xF4DD: 0x7CE8, //CJK UNIFIED IDEOGRAPH - 0xF4DE: 0x826E, //CJK UNIFIED IDEOGRAPH - 0xF4DF: 0x66A8, //CJK UNIFIED IDEOGRAPH - 0xF4E0: 0x7FBF, //CJK UNIFIED IDEOGRAPH - 0xF4E1: 0x7FCE, //CJK UNIFIED IDEOGRAPH - 0xF4E2: 0x7FD5, //CJK UNIFIED IDEOGRAPH - 0xF4E3: 0x7FE5, //CJK UNIFIED IDEOGRAPH - 0xF4E4: 0x7FE1, //CJK UNIFIED IDEOGRAPH - 0xF4E5: 0x7FE6, //CJK UNIFIED IDEOGRAPH - 0xF4E6: 0x7FE9, //CJK UNIFIED IDEOGRAPH - 0xF4E7: 0x7FEE, //CJK UNIFIED IDEOGRAPH - 0xF4E8: 0x7FF3, //CJK UNIFIED IDEOGRAPH - 0xF4E9: 0x7CF8, //CJK UNIFIED IDEOGRAPH - 0xF4EA: 0x7D77, //CJK UNIFIED IDEOGRAPH - 0xF4EB: 0x7DA6, //CJK UNIFIED IDEOGRAPH - 0xF4EC: 0x7DAE, //CJK UNIFIED IDEOGRAPH - 0xF4ED: 0x7E47, //CJK UNIFIED IDEOGRAPH - 0xF4EE: 0x7E9B, //CJK UNIFIED IDEOGRAPH - 0xF4EF: 0x9EB8, //CJK UNIFIED IDEOGRAPH - 0xF4F0: 0x9EB4, //CJK UNIFIED IDEOGRAPH - 0xF4F1: 0x8D73, //CJK UNIFIED IDEOGRAPH - 0xF4F2: 0x8D84, //CJK UNIFIED IDEOGRAPH - 0xF4F3: 0x8D94, //CJK UNIFIED IDEOGRAPH - 0xF4F4: 0x8D91, //CJK UNIFIED IDEOGRAPH - 0xF4F5: 0x8DB1, //CJK UNIFIED IDEOGRAPH - 0xF4F6: 0x8D67, //CJK UNIFIED IDEOGRAPH - 0xF4F7: 0x8D6D, //CJK UNIFIED IDEOGRAPH - 0xF4F8: 0x8C47, //CJK UNIFIED IDEOGRAPH - 0xF4F9: 0x8C49, //CJK UNIFIED IDEOGRAPH - 0xF4FA: 0x914A, //CJK UNIFIED IDEOGRAPH - 0xF4FB: 0x9150, //CJK UNIFIED IDEOGRAPH - 0xF4FC: 0x914E, //CJK UNIFIED IDEOGRAPH - 0xF4FD: 0x914F, //CJK UNIFIED IDEOGRAPH - 0xF4FE: 0x9164, //CJK UNIFIED IDEOGRAPH - 0xF540: 0x9B7C, //CJK UNIFIED IDEOGRAPH - 0xF541: 0x9B7D, //CJK UNIFIED IDEOGRAPH - 0xF542: 0x9B7E, //CJK UNIFIED IDEOGRAPH - 0xF543: 0x9B7F, //CJK UNIFIED IDEOGRAPH - 0xF544: 0x9B80, //CJK UNIFIED IDEOGRAPH - 0xF545: 0x9B81, //CJK UNIFIED IDEOGRAPH - 0xF546: 0x9B82, //CJK UNIFIED IDEOGRAPH - 0xF547: 0x9B83, //CJK UNIFIED IDEOGRAPH - 0xF548: 0x9B84, //CJK UNIFIED IDEOGRAPH - 0xF549: 0x9B85, //CJK UNIFIED IDEOGRAPH - 0xF54A: 0x9B86, //CJK UNIFIED IDEOGRAPH - 0xF54B: 0x9B87, //CJK UNIFIED IDEOGRAPH - 0xF54C: 0x9B88, //CJK UNIFIED IDEOGRAPH - 0xF54D: 0x9B89, //CJK UNIFIED IDEOGRAPH - 0xF54E: 0x9B8A, //CJK UNIFIED IDEOGRAPH - 0xF54F: 0x9B8B, //CJK UNIFIED IDEOGRAPH - 0xF550: 0x9B8C, //CJK UNIFIED IDEOGRAPH - 0xF551: 0x9B8D, //CJK UNIFIED IDEOGRAPH - 0xF552: 0x9B8E, //CJK UNIFIED IDEOGRAPH - 0xF553: 0x9B8F, //CJK UNIFIED IDEOGRAPH - 0xF554: 0x9B90, //CJK UNIFIED IDEOGRAPH - 0xF555: 0x9B91, //CJK UNIFIED IDEOGRAPH - 0xF556: 0x9B92, //CJK UNIFIED IDEOGRAPH - 0xF557: 0x9B93, //CJK UNIFIED IDEOGRAPH - 0xF558: 0x9B94, //CJK UNIFIED IDEOGRAPH - 0xF559: 0x9B95, //CJK UNIFIED IDEOGRAPH - 0xF55A: 0x9B96, //CJK UNIFIED IDEOGRAPH - 0xF55B: 0x9B97, //CJK UNIFIED IDEOGRAPH - 0xF55C: 0x9B98, //CJK UNIFIED IDEOGRAPH - 0xF55D: 0x9B99, //CJK UNIFIED IDEOGRAPH - 0xF55E: 0x9B9A, //CJK UNIFIED IDEOGRAPH - 0xF55F: 0x9B9B, //CJK UNIFIED IDEOGRAPH - 0xF560: 0x9B9C, //CJK UNIFIED IDEOGRAPH - 0xF561: 0x9B9D, //CJK UNIFIED IDEOGRAPH - 0xF562: 0x9B9E, //CJK UNIFIED IDEOGRAPH - 0xF563: 0x9B9F, //CJK UNIFIED IDEOGRAPH - 0xF564: 0x9BA0, //CJK UNIFIED IDEOGRAPH - 0xF565: 0x9BA1, //CJK UNIFIED IDEOGRAPH - 0xF566: 0x9BA2, //CJK UNIFIED IDEOGRAPH - 0xF567: 0x9BA3, //CJK UNIFIED IDEOGRAPH - 0xF568: 0x9BA4, //CJK UNIFIED IDEOGRAPH - 0xF569: 0x9BA5, //CJK UNIFIED IDEOGRAPH - 0xF56A: 0x9BA6, //CJK UNIFIED IDEOGRAPH - 0xF56B: 0x9BA7, //CJK UNIFIED IDEOGRAPH - 0xF56C: 0x9BA8, //CJK UNIFIED IDEOGRAPH - 0xF56D: 0x9BA9, //CJK UNIFIED IDEOGRAPH - 0xF56E: 0x9BAA, //CJK UNIFIED IDEOGRAPH - 0xF56F: 0x9BAB, //CJK UNIFIED IDEOGRAPH - 0xF570: 0x9BAC, //CJK UNIFIED IDEOGRAPH - 0xF571: 0x9BAD, //CJK UNIFIED IDEOGRAPH - 0xF572: 0x9BAE, //CJK UNIFIED IDEOGRAPH - 0xF573: 0x9BAF, //CJK UNIFIED IDEOGRAPH - 0xF574: 0x9BB0, //CJK UNIFIED IDEOGRAPH - 0xF575: 0x9BB1, //CJK UNIFIED IDEOGRAPH - 0xF576: 0x9BB2, //CJK UNIFIED IDEOGRAPH - 0xF577: 0x9BB3, //CJK UNIFIED IDEOGRAPH - 0xF578: 0x9BB4, //CJK UNIFIED IDEOGRAPH - 0xF579: 0x9BB5, //CJK UNIFIED IDEOGRAPH - 0xF57A: 0x9BB6, //CJK UNIFIED IDEOGRAPH - 0xF57B: 0x9BB7, //CJK UNIFIED IDEOGRAPH - 0xF57C: 0x9BB8, //CJK UNIFIED IDEOGRAPH - 0xF57D: 0x9BB9, //CJK UNIFIED IDEOGRAPH - 0xF57E: 0x9BBA, //CJK UNIFIED IDEOGRAPH - 0xF580: 0x9BBB, //CJK UNIFIED IDEOGRAPH - 0xF581: 0x9BBC, //CJK UNIFIED IDEOGRAPH - 0xF582: 0x9BBD, //CJK UNIFIED IDEOGRAPH - 0xF583: 0x9BBE, //CJK UNIFIED IDEOGRAPH - 0xF584: 0x9BBF, //CJK UNIFIED IDEOGRAPH - 0xF585: 0x9BC0, //CJK UNIFIED IDEOGRAPH - 0xF586: 0x9BC1, //CJK UNIFIED IDEOGRAPH - 0xF587: 0x9BC2, //CJK UNIFIED IDEOGRAPH - 0xF588: 0x9BC3, //CJK UNIFIED IDEOGRAPH - 0xF589: 0x9BC4, //CJK UNIFIED IDEOGRAPH - 0xF58A: 0x9BC5, //CJK UNIFIED IDEOGRAPH - 0xF58B: 0x9BC6, //CJK UNIFIED IDEOGRAPH - 0xF58C: 0x9BC7, //CJK UNIFIED IDEOGRAPH - 0xF58D: 0x9BC8, //CJK UNIFIED IDEOGRAPH - 0xF58E: 0x9BC9, //CJK UNIFIED IDEOGRAPH - 0xF58F: 0x9BCA, //CJK UNIFIED IDEOGRAPH - 0xF590: 0x9BCB, //CJK UNIFIED IDEOGRAPH - 0xF591: 0x9BCC, //CJK UNIFIED IDEOGRAPH - 0xF592: 0x9BCD, //CJK UNIFIED IDEOGRAPH - 0xF593: 0x9BCE, //CJK UNIFIED IDEOGRAPH - 0xF594: 0x9BCF, //CJK UNIFIED IDEOGRAPH - 0xF595: 0x9BD0, //CJK UNIFIED IDEOGRAPH - 0xF596: 0x9BD1, //CJK UNIFIED IDEOGRAPH - 0xF597: 0x9BD2, //CJK UNIFIED IDEOGRAPH - 0xF598: 0x9BD3, //CJK UNIFIED IDEOGRAPH - 0xF599: 0x9BD4, //CJK UNIFIED IDEOGRAPH - 0xF59A: 0x9BD5, //CJK UNIFIED IDEOGRAPH - 0xF59B: 0x9BD6, //CJK UNIFIED IDEOGRAPH - 0xF59C: 0x9BD7, //CJK UNIFIED IDEOGRAPH - 0xF59D: 0x9BD8, //CJK UNIFIED IDEOGRAPH - 0xF59E: 0x9BD9, //CJK UNIFIED IDEOGRAPH - 0xF59F: 0x9BDA, //CJK UNIFIED IDEOGRAPH - 0xF5A0: 0x9BDB, //CJK UNIFIED IDEOGRAPH - 0xF5A1: 0x9162, //CJK UNIFIED IDEOGRAPH - 0xF5A2: 0x9161, //CJK UNIFIED IDEOGRAPH - 0xF5A3: 0x9170, //CJK UNIFIED IDEOGRAPH - 0xF5A4: 0x9169, //CJK UNIFIED IDEOGRAPH - 0xF5A5: 0x916F, //CJK UNIFIED IDEOGRAPH - 0xF5A6: 0x917D, //CJK UNIFIED IDEOGRAPH - 0xF5A7: 0x917E, //CJK UNIFIED IDEOGRAPH - 0xF5A8: 0x9172, //CJK UNIFIED IDEOGRAPH - 0xF5A9: 0x9174, //CJK UNIFIED IDEOGRAPH - 0xF5AA: 0x9179, //CJK UNIFIED IDEOGRAPH - 0xF5AB: 0x918C, //CJK UNIFIED IDEOGRAPH - 0xF5AC: 0x9185, //CJK UNIFIED IDEOGRAPH - 0xF5AD: 0x9190, //CJK UNIFIED IDEOGRAPH - 0xF5AE: 0x918D, //CJK UNIFIED IDEOGRAPH - 0xF5AF: 0x9191, //CJK UNIFIED IDEOGRAPH - 0xF5B0: 0x91A2, //CJK UNIFIED IDEOGRAPH - 0xF5B1: 0x91A3, //CJK UNIFIED IDEOGRAPH - 0xF5B2: 0x91AA, //CJK UNIFIED IDEOGRAPH - 0xF5B3: 0x91AD, //CJK UNIFIED IDEOGRAPH - 0xF5B4: 0x91AE, //CJK UNIFIED IDEOGRAPH - 0xF5B5: 0x91AF, //CJK UNIFIED IDEOGRAPH - 0xF5B6: 0x91B5, //CJK UNIFIED IDEOGRAPH - 0xF5B7: 0x91B4, //CJK UNIFIED IDEOGRAPH - 0xF5B8: 0x91BA, //CJK UNIFIED IDEOGRAPH - 0xF5B9: 0x8C55, //CJK UNIFIED IDEOGRAPH - 0xF5BA: 0x9E7E, //CJK UNIFIED IDEOGRAPH - 0xF5BB: 0x8DB8, //CJK UNIFIED IDEOGRAPH - 0xF5BC: 0x8DEB, //CJK UNIFIED IDEOGRAPH - 0xF5BD: 0x8E05, //CJK UNIFIED IDEOGRAPH - 0xF5BE: 0x8E59, //CJK UNIFIED IDEOGRAPH - 0xF5BF: 0x8E69, //CJK UNIFIED IDEOGRAPH - 0xF5C0: 0x8DB5, //CJK UNIFIED IDEOGRAPH - 0xF5C1: 0x8DBF, //CJK UNIFIED IDEOGRAPH - 0xF5C2: 0x8DBC, //CJK UNIFIED IDEOGRAPH - 0xF5C3: 0x8DBA, //CJK UNIFIED IDEOGRAPH - 0xF5C4: 0x8DC4, //CJK UNIFIED IDEOGRAPH - 0xF5C5: 0x8DD6, //CJK UNIFIED IDEOGRAPH - 0xF5C6: 0x8DD7, //CJK UNIFIED IDEOGRAPH - 0xF5C7: 0x8DDA, //CJK UNIFIED IDEOGRAPH - 0xF5C8: 0x8DDE, //CJK UNIFIED IDEOGRAPH - 0xF5C9: 0x8DCE, //CJK UNIFIED IDEOGRAPH - 0xF5CA: 0x8DCF, //CJK UNIFIED IDEOGRAPH - 0xF5CB: 0x8DDB, //CJK UNIFIED IDEOGRAPH - 0xF5CC: 0x8DC6, //CJK UNIFIED IDEOGRAPH - 0xF5CD: 0x8DEC, //CJK UNIFIED IDEOGRAPH - 0xF5CE: 0x8DF7, //CJK UNIFIED IDEOGRAPH - 0xF5CF: 0x8DF8, //CJK UNIFIED IDEOGRAPH - 0xF5D0: 0x8DE3, //CJK UNIFIED IDEOGRAPH - 0xF5D1: 0x8DF9, //CJK UNIFIED IDEOGRAPH - 0xF5D2: 0x8DFB, //CJK UNIFIED IDEOGRAPH - 0xF5D3: 0x8DE4, //CJK UNIFIED IDEOGRAPH - 0xF5D4: 0x8E09, //CJK UNIFIED IDEOGRAPH - 0xF5D5: 0x8DFD, //CJK UNIFIED IDEOGRAPH - 0xF5D6: 0x8E14, //CJK UNIFIED IDEOGRAPH - 0xF5D7: 0x8E1D, //CJK UNIFIED IDEOGRAPH - 0xF5D8: 0x8E1F, //CJK UNIFIED IDEOGRAPH - 0xF5D9: 0x8E2C, //CJK UNIFIED IDEOGRAPH - 0xF5DA: 0x8E2E, //CJK UNIFIED IDEOGRAPH - 0xF5DB: 0x8E23, //CJK UNIFIED IDEOGRAPH - 0xF5DC: 0x8E2F, //CJK UNIFIED IDEOGRAPH - 0xF5DD: 0x8E3A, //CJK UNIFIED IDEOGRAPH - 0xF5DE: 0x8E40, //CJK UNIFIED IDEOGRAPH - 0xF5DF: 0x8E39, //CJK UNIFIED IDEOGRAPH - 0xF5E0: 0x8E35, //CJK UNIFIED IDEOGRAPH - 0xF5E1: 0x8E3D, //CJK UNIFIED IDEOGRAPH - 0xF5E2: 0x8E31, //CJK UNIFIED IDEOGRAPH - 0xF5E3: 0x8E49, //CJK UNIFIED IDEOGRAPH - 0xF5E4: 0x8E41, //CJK UNIFIED IDEOGRAPH - 0xF5E5: 0x8E42, //CJK UNIFIED IDEOGRAPH - 0xF5E6: 0x8E51, //CJK UNIFIED IDEOGRAPH - 0xF5E7: 0x8E52, //CJK UNIFIED IDEOGRAPH - 0xF5E8: 0x8E4A, //CJK UNIFIED IDEOGRAPH - 0xF5E9: 0x8E70, //CJK UNIFIED IDEOGRAPH - 0xF5EA: 0x8E76, //CJK UNIFIED IDEOGRAPH - 0xF5EB: 0x8E7C, //CJK UNIFIED IDEOGRAPH - 0xF5EC: 0x8E6F, //CJK UNIFIED IDEOGRAPH - 0xF5ED: 0x8E74, //CJK UNIFIED IDEOGRAPH - 0xF5EE: 0x8E85, //CJK UNIFIED IDEOGRAPH - 0xF5EF: 0x8E8F, //CJK UNIFIED IDEOGRAPH - 0xF5F0: 0x8E94, //CJK UNIFIED IDEOGRAPH - 0xF5F1: 0x8E90, //CJK UNIFIED IDEOGRAPH - 0xF5F2: 0x8E9C, //CJK UNIFIED IDEOGRAPH - 0xF5F3: 0x8E9E, //CJK UNIFIED IDEOGRAPH - 0xF5F4: 0x8C78, //CJK UNIFIED IDEOGRAPH - 0xF5F5: 0x8C82, //CJK UNIFIED IDEOGRAPH - 0xF5F6: 0x8C8A, //CJK UNIFIED IDEOGRAPH - 0xF5F7: 0x8C85, //CJK UNIFIED IDEOGRAPH - 0xF5F8: 0x8C98, //CJK UNIFIED IDEOGRAPH - 0xF5F9: 0x8C94, //CJK UNIFIED IDEOGRAPH - 0xF5FA: 0x659B, //CJK UNIFIED IDEOGRAPH - 0xF5FB: 0x89D6, //CJK UNIFIED IDEOGRAPH - 0xF5FC: 0x89DE, //CJK UNIFIED IDEOGRAPH - 0xF5FD: 0x89DA, //CJK UNIFIED IDEOGRAPH - 0xF5FE: 0x89DC, //CJK UNIFIED IDEOGRAPH - 0xF640: 0x9BDC, //CJK UNIFIED IDEOGRAPH - 0xF641: 0x9BDD, //CJK UNIFIED IDEOGRAPH - 0xF642: 0x9BDE, //CJK UNIFIED IDEOGRAPH - 0xF643: 0x9BDF, //CJK UNIFIED IDEOGRAPH - 0xF644: 0x9BE0, //CJK UNIFIED IDEOGRAPH - 0xF645: 0x9BE1, //CJK UNIFIED IDEOGRAPH - 0xF646: 0x9BE2, //CJK UNIFIED IDEOGRAPH - 0xF647: 0x9BE3, //CJK UNIFIED IDEOGRAPH - 0xF648: 0x9BE4, //CJK UNIFIED IDEOGRAPH - 0xF649: 0x9BE5, //CJK UNIFIED IDEOGRAPH - 0xF64A: 0x9BE6, //CJK UNIFIED IDEOGRAPH - 0xF64B: 0x9BE7, //CJK UNIFIED IDEOGRAPH - 0xF64C: 0x9BE8, //CJK UNIFIED IDEOGRAPH - 0xF64D: 0x9BE9, //CJK UNIFIED IDEOGRAPH - 0xF64E: 0x9BEA, //CJK UNIFIED IDEOGRAPH - 0xF64F: 0x9BEB, //CJK UNIFIED IDEOGRAPH - 0xF650: 0x9BEC, //CJK UNIFIED IDEOGRAPH - 0xF651: 0x9BED, //CJK UNIFIED IDEOGRAPH - 0xF652: 0x9BEE, //CJK UNIFIED IDEOGRAPH - 0xF653: 0x9BEF, //CJK UNIFIED IDEOGRAPH - 0xF654: 0x9BF0, //CJK UNIFIED IDEOGRAPH - 0xF655: 0x9BF1, //CJK UNIFIED IDEOGRAPH - 0xF656: 0x9BF2, //CJK UNIFIED IDEOGRAPH - 0xF657: 0x9BF3, //CJK UNIFIED IDEOGRAPH - 0xF658: 0x9BF4, //CJK UNIFIED IDEOGRAPH - 0xF659: 0x9BF5, //CJK UNIFIED IDEOGRAPH - 0xF65A: 0x9BF6, //CJK UNIFIED IDEOGRAPH - 0xF65B: 0x9BF7, //CJK UNIFIED IDEOGRAPH - 0xF65C: 0x9BF8, //CJK UNIFIED IDEOGRAPH - 0xF65D: 0x9BF9, //CJK UNIFIED IDEOGRAPH - 0xF65E: 0x9BFA, //CJK UNIFIED IDEOGRAPH - 0xF65F: 0x9BFB, //CJK UNIFIED IDEOGRAPH - 0xF660: 0x9BFC, //CJK UNIFIED IDEOGRAPH - 0xF661: 0x9BFD, //CJK UNIFIED IDEOGRAPH - 0xF662: 0x9BFE, //CJK UNIFIED IDEOGRAPH - 0xF663: 0x9BFF, //CJK UNIFIED IDEOGRAPH - 0xF664: 0x9C00, //CJK UNIFIED IDEOGRAPH - 0xF665: 0x9C01, //CJK UNIFIED IDEOGRAPH - 0xF666: 0x9C02, //CJK UNIFIED IDEOGRAPH - 0xF667: 0x9C03, //CJK UNIFIED IDEOGRAPH - 0xF668: 0x9C04, //CJK UNIFIED IDEOGRAPH - 0xF669: 0x9C05, //CJK UNIFIED IDEOGRAPH - 0xF66A: 0x9C06, //CJK UNIFIED IDEOGRAPH - 0xF66B: 0x9C07, //CJK UNIFIED IDEOGRAPH - 0xF66C: 0x9C08, //CJK UNIFIED IDEOGRAPH - 0xF66D: 0x9C09, //CJK UNIFIED IDEOGRAPH - 0xF66E: 0x9C0A, //CJK UNIFIED IDEOGRAPH - 0xF66F: 0x9C0B, //CJK UNIFIED IDEOGRAPH - 0xF670: 0x9C0C, //CJK UNIFIED IDEOGRAPH - 0xF671: 0x9C0D, //CJK UNIFIED IDEOGRAPH - 0xF672: 0x9C0E, //CJK UNIFIED IDEOGRAPH - 0xF673: 0x9C0F, //CJK UNIFIED IDEOGRAPH - 0xF674: 0x9C10, //CJK UNIFIED IDEOGRAPH - 0xF675: 0x9C11, //CJK UNIFIED IDEOGRAPH - 0xF676: 0x9C12, //CJK UNIFIED IDEOGRAPH - 0xF677: 0x9C13, //CJK UNIFIED IDEOGRAPH - 0xF678: 0x9C14, //CJK UNIFIED IDEOGRAPH - 0xF679: 0x9C15, //CJK UNIFIED IDEOGRAPH - 0xF67A: 0x9C16, //CJK UNIFIED IDEOGRAPH - 0xF67B: 0x9C17, //CJK UNIFIED IDEOGRAPH - 0xF67C: 0x9C18, //CJK UNIFIED IDEOGRAPH - 0xF67D: 0x9C19, //CJK UNIFIED IDEOGRAPH - 0xF67E: 0x9C1A, //CJK UNIFIED IDEOGRAPH - 0xF680: 0x9C1B, //CJK UNIFIED IDEOGRAPH - 0xF681: 0x9C1C, //CJK UNIFIED IDEOGRAPH - 0xF682: 0x9C1D, //CJK UNIFIED IDEOGRAPH - 0xF683: 0x9C1E, //CJK UNIFIED IDEOGRAPH - 0xF684: 0x9C1F, //CJK UNIFIED IDEOGRAPH - 0xF685: 0x9C20, //CJK UNIFIED IDEOGRAPH - 0xF686: 0x9C21, //CJK UNIFIED IDEOGRAPH - 0xF687: 0x9C22, //CJK UNIFIED IDEOGRAPH - 0xF688: 0x9C23, //CJK UNIFIED IDEOGRAPH - 0xF689: 0x9C24, //CJK UNIFIED IDEOGRAPH - 0xF68A: 0x9C25, //CJK UNIFIED IDEOGRAPH - 0xF68B: 0x9C26, //CJK UNIFIED IDEOGRAPH - 0xF68C: 0x9C27, //CJK UNIFIED IDEOGRAPH - 0xF68D: 0x9C28, //CJK UNIFIED IDEOGRAPH - 0xF68E: 0x9C29, //CJK UNIFIED IDEOGRAPH - 0xF68F: 0x9C2A, //CJK UNIFIED IDEOGRAPH - 0xF690: 0x9C2B, //CJK UNIFIED IDEOGRAPH - 0xF691: 0x9C2C, //CJK UNIFIED IDEOGRAPH - 0xF692: 0x9C2D, //CJK UNIFIED IDEOGRAPH - 0xF693: 0x9C2E, //CJK UNIFIED IDEOGRAPH - 0xF694: 0x9C2F, //CJK UNIFIED IDEOGRAPH - 0xF695: 0x9C30, //CJK UNIFIED IDEOGRAPH - 0xF696: 0x9C31, //CJK UNIFIED IDEOGRAPH - 0xF697: 0x9C32, //CJK UNIFIED IDEOGRAPH - 0xF698: 0x9C33, //CJK UNIFIED IDEOGRAPH - 0xF699: 0x9C34, //CJK UNIFIED IDEOGRAPH - 0xF69A: 0x9C35, //CJK UNIFIED IDEOGRAPH - 0xF69B: 0x9C36, //CJK UNIFIED IDEOGRAPH - 0xF69C: 0x9C37, //CJK UNIFIED IDEOGRAPH - 0xF69D: 0x9C38, //CJK UNIFIED IDEOGRAPH - 0xF69E: 0x9C39, //CJK UNIFIED IDEOGRAPH - 0xF69F: 0x9C3A, //CJK UNIFIED IDEOGRAPH - 0xF6A0: 0x9C3B, //CJK UNIFIED IDEOGRAPH - 0xF6A1: 0x89E5, //CJK UNIFIED IDEOGRAPH - 0xF6A2: 0x89EB, //CJK UNIFIED IDEOGRAPH - 0xF6A3: 0x89EF, //CJK UNIFIED IDEOGRAPH - 0xF6A4: 0x8A3E, //CJK UNIFIED IDEOGRAPH - 0xF6A5: 0x8B26, //CJK UNIFIED IDEOGRAPH - 0xF6A6: 0x9753, //CJK UNIFIED IDEOGRAPH - 0xF6A7: 0x96E9, //CJK UNIFIED IDEOGRAPH - 0xF6A8: 0x96F3, //CJK UNIFIED IDEOGRAPH - 0xF6A9: 0x96EF, //CJK UNIFIED IDEOGRAPH - 0xF6AA: 0x9706, //CJK UNIFIED IDEOGRAPH - 0xF6AB: 0x9701, //CJK UNIFIED IDEOGRAPH - 0xF6AC: 0x9708, //CJK UNIFIED IDEOGRAPH - 0xF6AD: 0x970F, //CJK UNIFIED IDEOGRAPH - 0xF6AE: 0x970E, //CJK UNIFIED IDEOGRAPH - 0xF6AF: 0x972A, //CJK UNIFIED IDEOGRAPH - 0xF6B0: 0x972D, //CJK UNIFIED IDEOGRAPH - 0xF6B1: 0x9730, //CJK UNIFIED IDEOGRAPH - 0xF6B2: 0x973E, //CJK UNIFIED IDEOGRAPH - 0xF6B3: 0x9F80, //CJK UNIFIED IDEOGRAPH - 0xF6B4: 0x9F83, //CJK UNIFIED IDEOGRAPH - 0xF6B5: 0x9F85, //CJK UNIFIED IDEOGRAPH - 0xF6B6: 0x9F86, //CJK UNIFIED IDEOGRAPH - 0xF6B7: 0x9F87, //CJK UNIFIED IDEOGRAPH - 0xF6B8: 0x9F88, //CJK UNIFIED IDEOGRAPH - 0xF6B9: 0x9F89, //CJK UNIFIED IDEOGRAPH - 0xF6BA: 0x9F8A, //CJK UNIFIED IDEOGRAPH - 0xF6BB: 0x9F8C, //CJK UNIFIED IDEOGRAPH - 0xF6BC: 0x9EFE, //CJK UNIFIED IDEOGRAPH - 0xF6BD: 0x9F0B, //CJK UNIFIED IDEOGRAPH - 0xF6BE: 0x9F0D, //CJK UNIFIED IDEOGRAPH - 0xF6BF: 0x96B9, //CJK UNIFIED IDEOGRAPH - 0xF6C0: 0x96BC, //CJK UNIFIED IDEOGRAPH - 0xF6C1: 0x96BD, //CJK UNIFIED IDEOGRAPH - 0xF6C2: 0x96CE, //CJK UNIFIED IDEOGRAPH - 0xF6C3: 0x96D2, //CJK UNIFIED IDEOGRAPH - 0xF6C4: 0x77BF, //CJK UNIFIED IDEOGRAPH - 0xF6C5: 0x96E0, //CJK UNIFIED IDEOGRAPH - 0xF6C6: 0x928E, //CJK UNIFIED IDEOGRAPH - 0xF6C7: 0x92AE, //CJK UNIFIED IDEOGRAPH - 0xF6C8: 0x92C8, //CJK UNIFIED IDEOGRAPH - 0xF6C9: 0x933E, //CJK UNIFIED IDEOGRAPH - 0xF6CA: 0x936A, //CJK UNIFIED IDEOGRAPH - 0xF6CB: 0x93CA, //CJK UNIFIED IDEOGRAPH - 0xF6CC: 0x938F, //CJK UNIFIED IDEOGRAPH - 0xF6CD: 0x943E, //CJK UNIFIED IDEOGRAPH - 0xF6CE: 0x946B, //CJK UNIFIED IDEOGRAPH - 0xF6CF: 0x9C7F, //CJK UNIFIED IDEOGRAPH - 0xF6D0: 0x9C82, //CJK UNIFIED IDEOGRAPH - 0xF6D1: 0x9C85, //CJK UNIFIED IDEOGRAPH - 0xF6D2: 0x9C86, //CJK UNIFIED IDEOGRAPH - 0xF6D3: 0x9C87, //CJK UNIFIED IDEOGRAPH - 0xF6D4: 0x9C88, //CJK UNIFIED IDEOGRAPH - 0xF6D5: 0x7A23, //CJK UNIFIED IDEOGRAPH - 0xF6D6: 0x9C8B, //CJK UNIFIED IDEOGRAPH - 0xF6D7: 0x9C8E, //CJK UNIFIED IDEOGRAPH - 0xF6D8: 0x9C90, //CJK UNIFIED IDEOGRAPH - 0xF6D9: 0x9C91, //CJK UNIFIED IDEOGRAPH - 0xF6DA: 0x9C92, //CJK UNIFIED IDEOGRAPH - 0xF6DB: 0x9C94, //CJK UNIFIED IDEOGRAPH - 0xF6DC: 0x9C95, //CJK UNIFIED IDEOGRAPH - 0xF6DD: 0x9C9A, //CJK UNIFIED IDEOGRAPH - 0xF6DE: 0x9C9B, //CJK UNIFIED IDEOGRAPH - 0xF6DF: 0x9C9E, //CJK UNIFIED IDEOGRAPH - 0xF6E0: 0x9C9F, //CJK UNIFIED IDEOGRAPH - 0xF6E1: 0x9CA0, //CJK UNIFIED IDEOGRAPH - 0xF6E2: 0x9CA1, //CJK UNIFIED IDEOGRAPH - 0xF6E3: 0x9CA2, //CJK UNIFIED IDEOGRAPH - 0xF6E4: 0x9CA3, //CJK UNIFIED IDEOGRAPH - 0xF6E5: 0x9CA5, //CJK UNIFIED IDEOGRAPH - 0xF6E6: 0x9CA6, //CJK UNIFIED IDEOGRAPH - 0xF6E7: 0x9CA7, //CJK UNIFIED IDEOGRAPH - 0xF6E8: 0x9CA8, //CJK UNIFIED IDEOGRAPH - 0xF6E9: 0x9CA9, //CJK UNIFIED IDEOGRAPH - 0xF6EA: 0x9CAB, //CJK UNIFIED IDEOGRAPH - 0xF6EB: 0x9CAD, //CJK UNIFIED IDEOGRAPH - 0xF6EC: 0x9CAE, //CJK UNIFIED IDEOGRAPH - 0xF6ED: 0x9CB0, //CJK UNIFIED IDEOGRAPH - 0xF6EE: 0x9CB1, //CJK UNIFIED IDEOGRAPH - 0xF6EF: 0x9CB2, //CJK UNIFIED IDEOGRAPH - 0xF6F0: 0x9CB3, //CJK UNIFIED IDEOGRAPH - 0xF6F1: 0x9CB4, //CJK UNIFIED IDEOGRAPH - 0xF6F2: 0x9CB5, //CJK UNIFIED IDEOGRAPH - 0xF6F3: 0x9CB6, //CJK UNIFIED IDEOGRAPH - 0xF6F4: 0x9CB7, //CJK UNIFIED IDEOGRAPH - 0xF6F5: 0x9CBA, //CJK UNIFIED IDEOGRAPH - 0xF6F6: 0x9CBB, //CJK UNIFIED IDEOGRAPH - 0xF6F7: 0x9CBC, //CJK UNIFIED IDEOGRAPH - 0xF6F8: 0x9CBD, //CJK UNIFIED IDEOGRAPH - 0xF6F9: 0x9CC4, //CJK UNIFIED IDEOGRAPH - 0xF6FA: 0x9CC5, //CJK UNIFIED IDEOGRAPH - 0xF6FB: 0x9CC6, //CJK UNIFIED IDEOGRAPH - 0xF6FC: 0x9CC7, //CJK UNIFIED IDEOGRAPH - 0xF6FD: 0x9CCA, //CJK UNIFIED IDEOGRAPH - 0xF6FE: 0x9CCB, //CJK UNIFIED IDEOGRAPH - 0xF740: 0x9C3C, //CJK UNIFIED IDEOGRAPH - 0xF741: 0x9C3D, //CJK UNIFIED IDEOGRAPH - 0xF742: 0x9C3E, //CJK UNIFIED IDEOGRAPH - 0xF743: 0x9C3F, //CJK UNIFIED IDEOGRAPH - 0xF744: 0x9C40, //CJK UNIFIED IDEOGRAPH - 0xF745: 0x9C41, //CJK UNIFIED IDEOGRAPH - 0xF746: 0x9C42, //CJK UNIFIED IDEOGRAPH - 0xF747: 0x9C43, //CJK UNIFIED IDEOGRAPH - 0xF748: 0x9C44, //CJK UNIFIED IDEOGRAPH - 0xF749: 0x9C45, //CJK UNIFIED IDEOGRAPH - 0xF74A: 0x9C46, //CJK UNIFIED IDEOGRAPH - 0xF74B: 0x9C47, //CJK UNIFIED IDEOGRAPH - 0xF74C: 0x9C48, //CJK UNIFIED IDEOGRAPH - 0xF74D: 0x9C49, //CJK UNIFIED IDEOGRAPH - 0xF74E: 0x9C4A, //CJK UNIFIED IDEOGRAPH - 0xF74F: 0x9C4B, //CJK UNIFIED IDEOGRAPH - 0xF750: 0x9C4C, //CJK UNIFIED IDEOGRAPH - 0xF751: 0x9C4D, //CJK UNIFIED IDEOGRAPH - 0xF752: 0x9C4E, //CJK UNIFIED IDEOGRAPH - 0xF753: 0x9C4F, //CJK UNIFIED IDEOGRAPH - 0xF754: 0x9C50, //CJK UNIFIED IDEOGRAPH - 0xF755: 0x9C51, //CJK UNIFIED IDEOGRAPH - 0xF756: 0x9C52, //CJK UNIFIED IDEOGRAPH - 0xF757: 0x9C53, //CJK UNIFIED IDEOGRAPH - 0xF758: 0x9C54, //CJK UNIFIED IDEOGRAPH - 0xF759: 0x9C55, //CJK UNIFIED IDEOGRAPH - 0xF75A: 0x9C56, //CJK UNIFIED IDEOGRAPH - 0xF75B: 0x9C57, //CJK UNIFIED IDEOGRAPH - 0xF75C: 0x9C58, //CJK UNIFIED IDEOGRAPH - 0xF75D: 0x9C59, //CJK UNIFIED IDEOGRAPH - 0xF75E: 0x9C5A, //CJK UNIFIED IDEOGRAPH - 0xF75F: 0x9C5B, //CJK UNIFIED IDEOGRAPH - 0xF760: 0x9C5C, //CJK UNIFIED IDEOGRAPH - 0xF761: 0x9C5D, //CJK UNIFIED IDEOGRAPH - 0xF762: 0x9C5E, //CJK UNIFIED IDEOGRAPH - 0xF763: 0x9C5F, //CJK UNIFIED IDEOGRAPH - 0xF764: 0x9C60, //CJK UNIFIED IDEOGRAPH - 0xF765: 0x9C61, //CJK UNIFIED IDEOGRAPH - 0xF766: 0x9C62, //CJK UNIFIED IDEOGRAPH - 0xF767: 0x9C63, //CJK UNIFIED IDEOGRAPH - 0xF768: 0x9C64, //CJK UNIFIED IDEOGRAPH - 0xF769: 0x9C65, //CJK UNIFIED IDEOGRAPH - 0xF76A: 0x9C66, //CJK UNIFIED IDEOGRAPH - 0xF76B: 0x9C67, //CJK UNIFIED IDEOGRAPH - 0xF76C: 0x9C68, //CJK UNIFIED IDEOGRAPH - 0xF76D: 0x9C69, //CJK UNIFIED IDEOGRAPH - 0xF76E: 0x9C6A, //CJK UNIFIED IDEOGRAPH - 0xF76F: 0x9C6B, //CJK UNIFIED IDEOGRAPH - 0xF770: 0x9C6C, //CJK UNIFIED IDEOGRAPH - 0xF771: 0x9C6D, //CJK UNIFIED IDEOGRAPH - 0xF772: 0x9C6E, //CJK UNIFIED IDEOGRAPH - 0xF773: 0x9C6F, //CJK UNIFIED IDEOGRAPH - 0xF774: 0x9C70, //CJK UNIFIED IDEOGRAPH - 0xF775: 0x9C71, //CJK UNIFIED IDEOGRAPH - 0xF776: 0x9C72, //CJK UNIFIED IDEOGRAPH - 0xF777: 0x9C73, //CJK UNIFIED IDEOGRAPH - 0xF778: 0x9C74, //CJK UNIFIED IDEOGRAPH - 0xF779: 0x9C75, //CJK UNIFIED IDEOGRAPH - 0xF77A: 0x9C76, //CJK UNIFIED IDEOGRAPH - 0xF77B: 0x9C77, //CJK UNIFIED IDEOGRAPH - 0xF77C: 0x9C78, //CJK UNIFIED IDEOGRAPH - 0xF77D: 0x9C79, //CJK UNIFIED IDEOGRAPH - 0xF77E: 0x9C7A, //CJK UNIFIED IDEOGRAPH - 0xF780: 0x9C7B, //CJK UNIFIED IDEOGRAPH - 0xF781: 0x9C7D, //CJK UNIFIED IDEOGRAPH - 0xF782: 0x9C7E, //CJK UNIFIED IDEOGRAPH - 0xF783: 0x9C80, //CJK UNIFIED IDEOGRAPH - 0xF784: 0x9C83, //CJK UNIFIED IDEOGRAPH - 0xF785: 0x9C84, //CJK UNIFIED IDEOGRAPH - 0xF786: 0x9C89, //CJK UNIFIED IDEOGRAPH - 0xF787: 0x9C8A, //CJK UNIFIED IDEOGRAPH - 0xF788: 0x9C8C, //CJK UNIFIED IDEOGRAPH - 0xF789: 0x9C8F, //CJK UNIFIED IDEOGRAPH - 0xF78A: 0x9C93, //CJK UNIFIED IDEOGRAPH - 0xF78B: 0x9C96, //CJK UNIFIED IDEOGRAPH - 0xF78C: 0x9C97, //CJK UNIFIED IDEOGRAPH - 0xF78D: 0x9C98, //CJK UNIFIED IDEOGRAPH - 0xF78E: 0x9C99, //CJK UNIFIED IDEOGRAPH - 0xF78F: 0x9C9D, //CJK UNIFIED IDEOGRAPH - 0xF790: 0x9CAA, //CJK UNIFIED IDEOGRAPH - 0xF791: 0x9CAC, //CJK UNIFIED IDEOGRAPH - 0xF792: 0x9CAF, //CJK UNIFIED IDEOGRAPH - 0xF793: 0x9CB9, //CJK UNIFIED IDEOGRAPH - 0xF794: 0x9CBE, //CJK UNIFIED IDEOGRAPH - 0xF795: 0x9CBF, //CJK UNIFIED IDEOGRAPH - 0xF796: 0x9CC0, //CJK UNIFIED IDEOGRAPH - 0xF797: 0x9CC1, //CJK UNIFIED IDEOGRAPH - 0xF798: 0x9CC2, //CJK UNIFIED IDEOGRAPH - 0xF799: 0x9CC8, //CJK UNIFIED IDEOGRAPH - 0xF79A: 0x9CC9, //CJK UNIFIED IDEOGRAPH - 0xF79B: 0x9CD1, //CJK UNIFIED IDEOGRAPH - 0xF79C: 0x9CD2, //CJK UNIFIED IDEOGRAPH - 0xF79D: 0x9CDA, //CJK UNIFIED IDEOGRAPH - 0xF79E: 0x9CDB, //CJK UNIFIED IDEOGRAPH - 0xF79F: 0x9CE0, //CJK UNIFIED IDEOGRAPH - 0xF7A0: 0x9CE1, //CJK UNIFIED IDEOGRAPH - 0xF7A1: 0x9CCC, //CJK UNIFIED IDEOGRAPH - 0xF7A2: 0x9CCD, //CJK UNIFIED IDEOGRAPH - 0xF7A3: 0x9CCE, //CJK UNIFIED IDEOGRAPH - 0xF7A4: 0x9CCF, //CJK UNIFIED IDEOGRAPH - 0xF7A5: 0x9CD0, //CJK UNIFIED IDEOGRAPH - 0xF7A6: 0x9CD3, //CJK UNIFIED IDEOGRAPH - 0xF7A7: 0x9CD4, //CJK UNIFIED IDEOGRAPH - 0xF7A8: 0x9CD5, //CJK UNIFIED IDEOGRAPH - 0xF7A9: 0x9CD7, //CJK UNIFIED IDEOGRAPH - 0xF7AA: 0x9CD8, //CJK UNIFIED IDEOGRAPH - 0xF7AB: 0x9CD9, //CJK UNIFIED IDEOGRAPH - 0xF7AC: 0x9CDC, //CJK UNIFIED IDEOGRAPH - 0xF7AD: 0x9CDD, //CJK UNIFIED IDEOGRAPH - 0xF7AE: 0x9CDF, //CJK UNIFIED IDEOGRAPH - 0xF7AF: 0x9CE2, //CJK UNIFIED IDEOGRAPH - 0xF7B0: 0x977C, //CJK UNIFIED IDEOGRAPH - 0xF7B1: 0x9785, //CJK UNIFIED IDEOGRAPH - 0xF7B2: 0x9791, //CJK UNIFIED IDEOGRAPH - 0xF7B3: 0x9792, //CJK UNIFIED IDEOGRAPH - 0xF7B4: 0x9794, //CJK UNIFIED IDEOGRAPH - 0xF7B5: 0x97AF, //CJK UNIFIED IDEOGRAPH - 0xF7B6: 0x97AB, //CJK UNIFIED IDEOGRAPH - 0xF7B7: 0x97A3, //CJK UNIFIED IDEOGRAPH - 0xF7B8: 0x97B2, //CJK UNIFIED IDEOGRAPH - 0xF7B9: 0x97B4, //CJK UNIFIED IDEOGRAPH - 0xF7BA: 0x9AB1, //CJK UNIFIED IDEOGRAPH - 0xF7BB: 0x9AB0, //CJK UNIFIED IDEOGRAPH - 0xF7BC: 0x9AB7, //CJK UNIFIED IDEOGRAPH - 0xF7BD: 0x9E58, //CJK UNIFIED IDEOGRAPH - 0xF7BE: 0x9AB6, //CJK UNIFIED IDEOGRAPH - 0xF7BF: 0x9ABA, //CJK UNIFIED IDEOGRAPH - 0xF7C0: 0x9ABC, //CJK UNIFIED IDEOGRAPH - 0xF7C1: 0x9AC1, //CJK UNIFIED IDEOGRAPH - 0xF7C2: 0x9AC0, //CJK UNIFIED IDEOGRAPH - 0xF7C3: 0x9AC5, //CJK UNIFIED IDEOGRAPH - 0xF7C4: 0x9AC2, //CJK UNIFIED IDEOGRAPH - 0xF7C5: 0x9ACB, //CJK UNIFIED IDEOGRAPH - 0xF7C6: 0x9ACC, //CJK UNIFIED IDEOGRAPH - 0xF7C7: 0x9AD1, //CJK UNIFIED IDEOGRAPH - 0xF7C8: 0x9B45, //CJK UNIFIED IDEOGRAPH - 0xF7C9: 0x9B43, //CJK UNIFIED IDEOGRAPH - 0xF7CA: 0x9B47, //CJK UNIFIED IDEOGRAPH - 0xF7CB: 0x9B49, //CJK UNIFIED IDEOGRAPH - 0xF7CC: 0x9B48, //CJK UNIFIED IDEOGRAPH - 0xF7CD: 0x9B4D, //CJK UNIFIED IDEOGRAPH - 0xF7CE: 0x9B51, //CJK UNIFIED IDEOGRAPH - 0xF7CF: 0x98E8, //CJK UNIFIED IDEOGRAPH - 0xF7D0: 0x990D, //CJK UNIFIED IDEOGRAPH - 0xF7D1: 0x992E, //CJK UNIFIED IDEOGRAPH - 0xF7D2: 0x9955, //CJK UNIFIED IDEOGRAPH - 0xF7D3: 0x9954, //CJK UNIFIED IDEOGRAPH - 0xF7D4: 0x9ADF, //CJK UNIFIED IDEOGRAPH - 0xF7D5: 0x9AE1, //CJK UNIFIED IDEOGRAPH - 0xF7D6: 0x9AE6, //CJK UNIFIED IDEOGRAPH - 0xF7D7: 0x9AEF, //CJK UNIFIED IDEOGRAPH - 0xF7D8: 0x9AEB, //CJK UNIFIED IDEOGRAPH - 0xF7D9: 0x9AFB, //CJK UNIFIED IDEOGRAPH - 0xF7DA: 0x9AED, //CJK UNIFIED IDEOGRAPH - 0xF7DB: 0x9AF9, //CJK UNIFIED IDEOGRAPH - 0xF7DC: 0x9B08, //CJK UNIFIED IDEOGRAPH - 0xF7DD: 0x9B0F, //CJK UNIFIED IDEOGRAPH - 0xF7DE: 0x9B13, //CJK UNIFIED IDEOGRAPH - 0xF7DF: 0x9B1F, //CJK UNIFIED IDEOGRAPH - 0xF7E0: 0x9B23, //CJK UNIFIED IDEOGRAPH - 0xF7E1: 0x9EBD, //CJK UNIFIED IDEOGRAPH - 0xF7E2: 0x9EBE, //CJK UNIFIED IDEOGRAPH - 0xF7E3: 0x7E3B, //CJK UNIFIED IDEOGRAPH - 0xF7E4: 0x9E82, //CJK UNIFIED IDEOGRAPH - 0xF7E5: 0x9E87, //CJK UNIFIED IDEOGRAPH - 0xF7E6: 0x9E88, //CJK UNIFIED IDEOGRAPH - 0xF7E7: 0x9E8B, //CJK UNIFIED IDEOGRAPH - 0xF7E8: 0x9E92, //CJK UNIFIED IDEOGRAPH - 0xF7E9: 0x93D6, //CJK UNIFIED IDEOGRAPH - 0xF7EA: 0x9E9D, //CJK UNIFIED IDEOGRAPH - 0xF7EB: 0x9E9F, //CJK UNIFIED IDEOGRAPH - 0xF7EC: 0x9EDB, //CJK UNIFIED IDEOGRAPH - 0xF7ED: 0x9EDC, //CJK UNIFIED IDEOGRAPH - 0xF7EE: 0x9EDD, //CJK UNIFIED IDEOGRAPH - 0xF7EF: 0x9EE0, //CJK UNIFIED IDEOGRAPH - 0xF7F0: 0x9EDF, //CJK UNIFIED IDEOGRAPH - 0xF7F1: 0x9EE2, //CJK UNIFIED IDEOGRAPH - 0xF7F2: 0x9EE9, //CJK UNIFIED IDEOGRAPH - 0xF7F3: 0x9EE7, //CJK UNIFIED IDEOGRAPH - 0xF7F4: 0x9EE5, //CJK UNIFIED IDEOGRAPH - 0xF7F5: 0x9EEA, //CJK UNIFIED IDEOGRAPH - 0xF7F6: 0x9EEF, //CJK UNIFIED IDEOGRAPH - 0xF7F7: 0x9F22, //CJK UNIFIED IDEOGRAPH - 0xF7F8: 0x9F2C, //CJK UNIFIED IDEOGRAPH - 0xF7F9: 0x9F2F, //CJK UNIFIED IDEOGRAPH - 0xF7FA: 0x9F39, //CJK UNIFIED IDEOGRAPH - 0xF7FB: 0x9F37, //CJK UNIFIED IDEOGRAPH - 0xF7FC: 0x9F3D, //CJK UNIFIED IDEOGRAPH - 0xF7FD: 0x9F3E, //CJK UNIFIED IDEOGRAPH - 0xF7FE: 0x9F44, //CJK UNIFIED IDEOGRAPH - 0xF840: 0x9CE3, //CJK UNIFIED IDEOGRAPH - 0xF841: 0x9CE4, //CJK UNIFIED IDEOGRAPH - 0xF842: 0x9CE5, //CJK UNIFIED IDEOGRAPH - 0xF843: 0x9CE6, //CJK UNIFIED IDEOGRAPH - 0xF844: 0x9CE7, //CJK UNIFIED IDEOGRAPH - 0xF845: 0x9CE8, //CJK UNIFIED IDEOGRAPH - 0xF846: 0x9CE9, //CJK UNIFIED IDEOGRAPH - 0xF847: 0x9CEA, //CJK UNIFIED IDEOGRAPH - 0xF848: 0x9CEB, //CJK UNIFIED IDEOGRAPH - 0xF849: 0x9CEC, //CJK UNIFIED IDEOGRAPH - 0xF84A: 0x9CED, //CJK UNIFIED IDEOGRAPH - 0xF84B: 0x9CEE, //CJK UNIFIED IDEOGRAPH - 0xF84C: 0x9CEF, //CJK UNIFIED IDEOGRAPH - 0xF84D: 0x9CF0, //CJK UNIFIED IDEOGRAPH - 0xF84E: 0x9CF1, //CJK UNIFIED IDEOGRAPH - 0xF84F: 0x9CF2, //CJK UNIFIED IDEOGRAPH - 0xF850: 0x9CF3, //CJK UNIFIED IDEOGRAPH - 0xF851: 0x9CF4, //CJK UNIFIED IDEOGRAPH - 0xF852: 0x9CF5, //CJK UNIFIED IDEOGRAPH - 0xF853: 0x9CF6, //CJK UNIFIED IDEOGRAPH - 0xF854: 0x9CF7, //CJK UNIFIED IDEOGRAPH - 0xF855: 0x9CF8, //CJK UNIFIED IDEOGRAPH - 0xF856: 0x9CF9, //CJK UNIFIED IDEOGRAPH - 0xF857: 0x9CFA, //CJK UNIFIED IDEOGRAPH - 0xF858: 0x9CFB, //CJK UNIFIED IDEOGRAPH - 0xF859: 0x9CFC, //CJK UNIFIED IDEOGRAPH - 0xF85A: 0x9CFD, //CJK UNIFIED IDEOGRAPH - 0xF85B: 0x9CFE, //CJK UNIFIED IDEOGRAPH - 0xF85C: 0x9CFF, //CJK UNIFIED IDEOGRAPH - 0xF85D: 0x9D00, //CJK UNIFIED IDEOGRAPH - 0xF85E: 0x9D01, //CJK UNIFIED IDEOGRAPH - 0xF85F: 0x9D02, //CJK UNIFIED IDEOGRAPH - 0xF860: 0x9D03, //CJK UNIFIED IDEOGRAPH - 0xF861: 0x9D04, //CJK UNIFIED IDEOGRAPH - 0xF862: 0x9D05, //CJK UNIFIED IDEOGRAPH - 0xF863: 0x9D06, //CJK UNIFIED IDEOGRAPH - 0xF864: 0x9D07, //CJK UNIFIED IDEOGRAPH - 0xF865: 0x9D08, //CJK UNIFIED IDEOGRAPH - 0xF866: 0x9D09, //CJK UNIFIED IDEOGRAPH - 0xF867: 0x9D0A, //CJK UNIFIED IDEOGRAPH - 0xF868: 0x9D0B, //CJK UNIFIED IDEOGRAPH - 0xF869: 0x9D0C, //CJK UNIFIED IDEOGRAPH - 0xF86A: 0x9D0D, //CJK UNIFIED IDEOGRAPH - 0xF86B: 0x9D0E, //CJK UNIFIED IDEOGRAPH - 0xF86C: 0x9D0F, //CJK UNIFIED IDEOGRAPH - 0xF86D: 0x9D10, //CJK UNIFIED IDEOGRAPH - 0xF86E: 0x9D11, //CJK UNIFIED IDEOGRAPH - 0xF86F: 0x9D12, //CJK UNIFIED IDEOGRAPH - 0xF870: 0x9D13, //CJK UNIFIED IDEOGRAPH - 0xF871: 0x9D14, //CJK UNIFIED IDEOGRAPH - 0xF872: 0x9D15, //CJK UNIFIED IDEOGRAPH - 0xF873: 0x9D16, //CJK UNIFIED IDEOGRAPH - 0xF874: 0x9D17, //CJK UNIFIED IDEOGRAPH - 0xF875: 0x9D18, //CJK UNIFIED IDEOGRAPH - 0xF876: 0x9D19, //CJK UNIFIED IDEOGRAPH - 0xF877: 0x9D1A, //CJK UNIFIED IDEOGRAPH - 0xF878: 0x9D1B, //CJK UNIFIED IDEOGRAPH - 0xF879: 0x9D1C, //CJK UNIFIED IDEOGRAPH - 0xF87A: 0x9D1D, //CJK UNIFIED IDEOGRAPH - 0xF87B: 0x9D1E, //CJK UNIFIED IDEOGRAPH - 0xF87C: 0x9D1F, //CJK UNIFIED IDEOGRAPH - 0xF87D: 0x9D20, //CJK UNIFIED IDEOGRAPH - 0xF87E: 0x9D21, //CJK UNIFIED IDEOGRAPH - 0xF880: 0x9D22, //CJK UNIFIED IDEOGRAPH - 0xF881: 0x9D23, //CJK UNIFIED IDEOGRAPH - 0xF882: 0x9D24, //CJK UNIFIED IDEOGRAPH - 0xF883: 0x9D25, //CJK UNIFIED IDEOGRAPH - 0xF884: 0x9D26, //CJK UNIFIED IDEOGRAPH - 0xF885: 0x9D27, //CJK UNIFIED IDEOGRAPH - 0xF886: 0x9D28, //CJK UNIFIED IDEOGRAPH - 0xF887: 0x9D29, //CJK UNIFIED IDEOGRAPH - 0xF888: 0x9D2A, //CJK UNIFIED IDEOGRAPH - 0xF889: 0x9D2B, //CJK UNIFIED IDEOGRAPH - 0xF88A: 0x9D2C, //CJK UNIFIED IDEOGRAPH - 0xF88B: 0x9D2D, //CJK UNIFIED IDEOGRAPH - 0xF88C: 0x9D2E, //CJK UNIFIED IDEOGRAPH - 0xF88D: 0x9D2F, //CJK UNIFIED IDEOGRAPH - 0xF88E: 0x9D30, //CJK UNIFIED IDEOGRAPH - 0xF88F: 0x9D31, //CJK UNIFIED IDEOGRAPH - 0xF890: 0x9D32, //CJK UNIFIED IDEOGRAPH - 0xF891: 0x9D33, //CJK UNIFIED IDEOGRAPH - 0xF892: 0x9D34, //CJK UNIFIED IDEOGRAPH - 0xF893: 0x9D35, //CJK UNIFIED IDEOGRAPH - 0xF894: 0x9D36, //CJK UNIFIED IDEOGRAPH - 0xF895: 0x9D37, //CJK UNIFIED IDEOGRAPH - 0xF896: 0x9D38, //CJK UNIFIED IDEOGRAPH - 0xF897: 0x9D39, //CJK UNIFIED IDEOGRAPH - 0xF898: 0x9D3A, //CJK UNIFIED IDEOGRAPH - 0xF899: 0x9D3B, //CJK UNIFIED IDEOGRAPH - 0xF89A: 0x9D3C, //CJK UNIFIED IDEOGRAPH - 0xF89B: 0x9D3D, //CJK UNIFIED IDEOGRAPH - 0xF89C: 0x9D3E, //CJK UNIFIED IDEOGRAPH - 0xF89D: 0x9D3F, //CJK UNIFIED IDEOGRAPH - 0xF89E: 0x9D40, //CJK UNIFIED IDEOGRAPH - 0xF89F: 0x9D41, //CJK UNIFIED IDEOGRAPH - 0xF8A0: 0x9D42, //CJK UNIFIED IDEOGRAPH - 0xF940: 0x9D43, //CJK UNIFIED IDEOGRAPH - 0xF941: 0x9D44, //CJK UNIFIED IDEOGRAPH - 0xF942: 0x9D45, //CJK UNIFIED IDEOGRAPH - 0xF943: 0x9D46, //CJK UNIFIED IDEOGRAPH - 0xF944: 0x9D47, //CJK UNIFIED IDEOGRAPH - 0xF945: 0x9D48, //CJK UNIFIED IDEOGRAPH - 0xF946: 0x9D49, //CJK UNIFIED IDEOGRAPH - 0xF947: 0x9D4A, //CJK UNIFIED IDEOGRAPH - 0xF948: 0x9D4B, //CJK UNIFIED IDEOGRAPH - 0xF949: 0x9D4C, //CJK UNIFIED IDEOGRAPH - 0xF94A: 0x9D4D, //CJK UNIFIED IDEOGRAPH - 0xF94B: 0x9D4E, //CJK UNIFIED IDEOGRAPH - 0xF94C: 0x9D4F, //CJK UNIFIED IDEOGRAPH - 0xF94D: 0x9D50, //CJK UNIFIED IDEOGRAPH - 0xF94E: 0x9D51, //CJK UNIFIED IDEOGRAPH - 0xF94F: 0x9D52, //CJK UNIFIED IDEOGRAPH - 0xF950: 0x9D53, //CJK UNIFIED IDEOGRAPH - 0xF951: 0x9D54, //CJK UNIFIED IDEOGRAPH - 0xF952: 0x9D55, //CJK UNIFIED IDEOGRAPH - 0xF953: 0x9D56, //CJK UNIFIED IDEOGRAPH - 0xF954: 0x9D57, //CJK UNIFIED IDEOGRAPH - 0xF955: 0x9D58, //CJK UNIFIED IDEOGRAPH - 0xF956: 0x9D59, //CJK UNIFIED IDEOGRAPH - 0xF957: 0x9D5A, //CJK UNIFIED IDEOGRAPH - 0xF958: 0x9D5B, //CJK UNIFIED IDEOGRAPH - 0xF959: 0x9D5C, //CJK UNIFIED IDEOGRAPH - 0xF95A: 0x9D5D, //CJK UNIFIED IDEOGRAPH - 0xF95B: 0x9D5E, //CJK UNIFIED IDEOGRAPH - 0xF95C: 0x9D5F, //CJK UNIFIED IDEOGRAPH - 0xF95D: 0x9D60, //CJK UNIFIED IDEOGRAPH - 0xF95E: 0x9D61, //CJK UNIFIED IDEOGRAPH - 0xF95F: 0x9D62, //CJK UNIFIED IDEOGRAPH - 0xF960: 0x9D63, //CJK UNIFIED IDEOGRAPH - 0xF961: 0x9D64, //CJK UNIFIED IDEOGRAPH - 0xF962: 0x9D65, //CJK UNIFIED IDEOGRAPH - 0xF963: 0x9D66, //CJK UNIFIED IDEOGRAPH - 0xF964: 0x9D67, //CJK UNIFIED IDEOGRAPH - 0xF965: 0x9D68, //CJK UNIFIED IDEOGRAPH - 0xF966: 0x9D69, //CJK UNIFIED IDEOGRAPH - 0xF967: 0x9D6A, //CJK UNIFIED IDEOGRAPH - 0xF968: 0x9D6B, //CJK UNIFIED IDEOGRAPH - 0xF969: 0x9D6C, //CJK UNIFIED IDEOGRAPH - 0xF96A: 0x9D6D, //CJK UNIFIED IDEOGRAPH - 0xF96B: 0x9D6E, //CJK UNIFIED IDEOGRAPH - 0xF96C: 0x9D6F, //CJK UNIFIED IDEOGRAPH - 0xF96D: 0x9D70, //CJK UNIFIED IDEOGRAPH - 0xF96E: 0x9D71, //CJK UNIFIED IDEOGRAPH - 0xF96F: 0x9D72, //CJK UNIFIED IDEOGRAPH - 0xF970: 0x9D73, //CJK UNIFIED IDEOGRAPH - 0xF971: 0x9D74, //CJK UNIFIED IDEOGRAPH - 0xF972: 0x9D75, //CJK UNIFIED IDEOGRAPH - 0xF973: 0x9D76, //CJK UNIFIED IDEOGRAPH - 0xF974: 0x9D77, //CJK UNIFIED IDEOGRAPH - 0xF975: 0x9D78, //CJK UNIFIED IDEOGRAPH - 0xF976: 0x9D79, //CJK UNIFIED IDEOGRAPH - 0xF977: 0x9D7A, //CJK UNIFIED IDEOGRAPH - 0xF978: 0x9D7B, //CJK UNIFIED IDEOGRAPH - 0xF979: 0x9D7C, //CJK UNIFIED IDEOGRAPH - 0xF97A: 0x9D7D, //CJK UNIFIED IDEOGRAPH - 0xF97B: 0x9D7E, //CJK UNIFIED IDEOGRAPH - 0xF97C: 0x9D7F, //CJK UNIFIED IDEOGRAPH - 0xF97D: 0x9D80, //CJK UNIFIED IDEOGRAPH - 0xF97E: 0x9D81, //CJK UNIFIED IDEOGRAPH - 0xF980: 0x9D82, //CJK UNIFIED IDEOGRAPH - 0xF981: 0x9D83, //CJK UNIFIED IDEOGRAPH - 0xF982: 0x9D84, //CJK UNIFIED IDEOGRAPH - 0xF983: 0x9D85, //CJK UNIFIED IDEOGRAPH - 0xF984: 0x9D86, //CJK UNIFIED IDEOGRAPH - 0xF985: 0x9D87, //CJK UNIFIED IDEOGRAPH - 0xF986: 0x9D88, //CJK UNIFIED IDEOGRAPH - 0xF987: 0x9D89, //CJK UNIFIED IDEOGRAPH - 0xF988: 0x9D8A, //CJK UNIFIED IDEOGRAPH - 0xF989: 0x9D8B, //CJK UNIFIED IDEOGRAPH - 0xF98A: 0x9D8C, //CJK UNIFIED IDEOGRAPH - 0xF98B: 0x9D8D, //CJK UNIFIED IDEOGRAPH - 0xF98C: 0x9D8E, //CJK UNIFIED IDEOGRAPH - 0xF98D: 0x9D8F, //CJK UNIFIED IDEOGRAPH - 0xF98E: 0x9D90, //CJK UNIFIED IDEOGRAPH - 0xF98F: 0x9D91, //CJK UNIFIED IDEOGRAPH - 0xF990: 0x9D92, //CJK UNIFIED IDEOGRAPH - 0xF991: 0x9D93, //CJK UNIFIED IDEOGRAPH - 0xF992: 0x9D94, //CJK UNIFIED IDEOGRAPH - 0xF993: 0x9D95, //CJK UNIFIED IDEOGRAPH - 0xF994: 0x9D96, //CJK UNIFIED IDEOGRAPH - 0xF995: 0x9D97, //CJK UNIFIED IDEOGRAPH - 0xF996: 0x9D98, //CJK UNIFIED IDEOGRAPH - 0xF997: 0x9D99, //CJK UNIFIED IDEOGRAPH - 0xF998: 0x9D9A, //CJK UNIFIED IDEOGRAPH - 0xF999: 0x9D9B, //CJK UNIFIED IDEOGRAPH - 0xF99A: 0x9D9C, //CJK UNIFIED IDEOGRAPH - 0xF99B: 0x9D9D, //CJK UNIFIED IDEOGRAPH - 0xF99C: 0x9D9E, //CJK UNIFIED IDEOGRAPH - 0xF99D: 0x9D9F, //CJK UNIFIED IDEOGRAPH - 0xF99E: 0x9DA0, //CJK UNIFIED IDEOGRAPH - 0xF99F: 0x9DA1, //CJK UNIFIED IDEOGRAPH - 0xF9A0: 0x9DA2, //CJK UNIFIED IDEOGRAPH - 0xFA40: 0x9DA3, //CJK UNIFIED IDEOGRAPH - 0xFA41: 0x9DA4, //CJK UNIFIED IDEOGRAPH - 0xFA42: 0x9DA5, //CJK UNIFIED IDEOGRAPH - 0xFA43: 0x9DA6, //CJK UNIFIED IDEOGRAPH - 0xFA44: 0x9DA7, //CJK UNIFIED IDEOGRAPH - 0xFA45: 0x9DA8, //CJK UNIFIED IDEOGRAPH - 0xFA46: 0x9DA9, //CJK UNIFIED IDEOGRAPH - 0xFA47: 0x9DAA, //CJK UNIFIED IDEOGRAPH - 0xFA48: 0x9DAB, //CJK UNIFIED IDEOGRAPH - 0xFA49: 0x9DAC, //CJK UNIFIED IDEOGRAPH - 0xFA4A: 0x9DAD, //CJK UNIFIED IDEOGRAPH - 0xFA4B: 0x9DAE, //CJK UNIFIED IDEOGRAPH - 0xFA4C: 0x9DAF, //CJK UNIFIED IDEOGRAPH - 0xFA4D: 0x9DB0, //CJK UNIFIED IDEOGRAPH - 0xFA4E: 0x9DB1, //CJK UNIFIED IDEOGRAPH - 0xFA4F: 0x9DB2, //CJK UNIFIED IDEOGRAPH - 0xFA50: 0x9DB3, //CJK UNIFIED IDEOGRAPH - 0xFA51: 0x9DB4, //CJK UNIFIED IDEOGRAPH - 0xFA52: 0x9DB5, //CJK UNIFIED IDEOGRAPH - 0xFA53: 0x9DB6, //CJK UNIFIED IDEOGRAPH - 0xFA54: 0x9DB7, //CJK UNIFIED IDEOGRAPH - 0xFA55: 0x9DB8, //CJK UNIFIED IDEOGRAPH - 0xFA56: 0x9DB9, //CJK UNIFIED IDEOGRAPH - 0xFA57: 0x9DBA, //CJK UNIFIED IDEOGRAPH - 0xFA58: 0x9DBB, //CJK UNIFIED IDEOGRAPH - 0xFA59: 0x9DBC, //CJK UNIFIED IDEOGRAPH - 0xFA5A: 0x9DBD, //CJK UNIFIED IDEOGRAPH - 0xFA5B: 0x9DBE, //CJK UNIFIED IDEOGRAPH - 0xFA5C: 0x9DBF, //CJK UNIFIED IDEOGRAPH - 0xFA5D: 0x9DC0, //CJK UNIFIED IDEOGRAPH - 0xFA5E: 0x9DC1, //CJK UNIFIED IDEOGRAPH - 0xFA5F: 0x9DC2, //CJK UNIFIED IDEOGRAPH - 0xFA60: 0x9DC3, //CJK UNIFIED IDEOGRAPH - 0xFA61: 0x9DC4, //CJK UNIFIED IDEOGRAPH - 0xFA62: 0x9DC5, //CJK UNIFIED IDEOGRAPH - 0xFA63: 0x9DC6, //CJK UNIFIED IDEOGRAPH - 0xFA64: 0x9DC7, //CJK UNIFIED IDEOGRAPH - 0xFA65: 0x9DC8, //CJK UNIFIED IDEOGRAPH - 0xFA66: 0x9DC9, //CJK UNIFIED IDEOGRAPH - 0xFA67: 0x9DCA, //CJK UNIFIED IDEOGRAPH - 0xFA68: 0x9DCB, //CJK UNIFIED IDEOGRAPH - 0xFA69: 0x9DCC, //CJK UNIFIED IDEOGRAPH - 0xFA6A: 0x9DCD, //CJK UNIFIED IDEOGRAPH - 0xFA6B: 0x9DCE, //CJK UNIFIED IDEOGRAPH - 0xFA6C: 0x9DCF, //CJK UNIFIED IDEOGRAPH - 0xFA6D: 0x9DD0, //CJK UNIFIED IDEOGRAPH - 0xFA6E: 0x9DD1, //CJK UNIFIED IDEOGRAPH - 0xFA6F: 0x9DD2, //CJK UNIFIED IDEOGRAPH - 0xFA70: 0x9DD3, //CJK UNIFIED IDEOGRAPH - 0xFA71: 0x9DD4, //CJK UNIFIED IDEOGRAPH - 0xFA72: 0x9DD5, //CJK UNIFIED IDEOGRAPH - 0xFA73: 0x9DD6, //CJK UNIFIED IDEOGRAPH - 0xFA74: 0x9DD7, //CJK UNIFIED IDEOGRAPH - 0xFA75: 0x9DD8, //CJK UNIFIED IDEOGRAPH - 0xFA76: 0x9DD9, //CJK UNIFIED IDEOGRAPH - 0xFA77: 0x9DDA, //CJK UNIFIED IDEOGRAPH - 0xFA78: 0x9DDB, //CJK UNIFIED IDEOGRAPH - 0xFA79: 0x9DDC, //CJK UNIFIED IDEOGRAPH - 0xFA7A: 0x9DDD, //CJK UNIFIED IDEOGRAPH - 0xFA7B: 0x9DDE, //CJK UNIFIED IDEOGRAPH - 0xFA7C: 0x9DDF, //CJK UNIFIED IDEOGRAPH - 0xFA7D: 0x9DE0, //CJK UNIFIED IDEOGRAPH - 0xFA7E: 0x9DE1, //CJK UNIFIED IDEOGRAPH - 0xFA80: 0x9DE2, //CJK UNIFIED IDEOGRAPH - 0xFA81: 0x9DE3, //CJK UNIFIED IDEOGRAPH - 0xFA82: 0x9DE4, //CJK UNIFIED IDEOGRAPH - 0xFA83: 0x9DE5, //CJK UNIFIED IDEOGRAPH - 0xFA84: 0x9DE6, //CJK UNIFIED IDEOGRAPH - 0xFA85: 0x9DE7, //CJK UNIFIED IDEOGRAPH - 0xFA86: 0x9DE8, //CJK UNIFIED IDEOGRAPH - 0xFA87: 0x9DE9, //CJK UNIFIED IDEOGRAPH - 0xFA88: 0x9DEA, //CJK UNIFIED IDEOGRAPH - 0xFA89: 0x9DEB, //CJK UNIFIED IDEOGRAPH - 0xFA8A: 0x9DEC, //CJK UNIFIED IDEOGRAPH - 0xFA8B: 0x9DED, //CJK UNIFIED IDEOGRAPH - 0xFA8C: 0x9DEE, //CJK UNIFIED IDEOGRAPH - 0xFA8D: 0x9DEF, //CJK UNIFIED IDEOGRAPH - 0xFA8E: 0x9DF0, //CJK UNIFIED IDEOGRAPH - 0xFA8F: 0x9DF1, //CJK UNIFIED IDEOGRAPH - 0xFA90: 0x9DF2, //CJK UNIFIED IDEOGRAPH - 0xFA91: 0x9DF3, //CJK UNIFIED IDEOGRAPH - 0xFA92: 0x9DF4, //CJK UNIFIED IDEOGRAPH - 0xFA93: 0x9DF5, //CJK UNIFIED IDEOGRAPH - 0xFA94: 0x9DF6, //CJK UNIFIED IDEOGRAPH - 0xFA95: 0x9DF7, //CJK UNIFIED IDEOGRAPH - 0xFA96: 0x9DF8, //CJK UNIFIED IDEOGRAPH - 0xFA97: 0x9DF9, //CJK UNIFIED IDEOGRAPH - 0xFA98: 0x9DFA, //CJK UNIFIED IDEOGRAPH - 0xFA99: 0x9DFB, //CJK UNIFIED IDEOGRAPH - 0xFA9A: 0x9DFC, //CJK UNIFIED IDEOGRAPH - 0xFA9B: 0x9DFD, //CJK UNIFIED IDEOGRAPH - 0xFA9C: 0x9DFE, //CJK UNIFIED IDEOGRAPH - 0xFA9D: 0x9DFF, //CJK UNIFIED IDEOGRAPH - 0xFA9E: 0x9E00, //CJK UNIFIED IDEOGRAPH - 0xFA9F: 0x9E01, //CJK UNIFIED IDEOGRAPH - 0xFAA0: 0x9E02, //CJK UNIFIED IDEOGRAPH - 0xFB40: 0x9E03, //CJK UNIFIED IDEOGRAPH - 0xFB41: 0x9E04, //CJK UNIFIED IDEOGRAPH - 0xFB42: 0x9E05, //CJK UNIFIED IDEOGRAPH - 0xFB43: 0x9E06, //CJK UNIFIED IDEOGRAPH - 0xFB44: 0x9E07, //CJK UNIFIED IDEOGRAPH - 0xFB45: 0x9E08, //CJK UNIFIED IDEOGRAPH - 0xFB46: 0x9E09, //CJK UNIFIED IDEOGRAPH - 0xFB47: 0x9E0A, //CJK UNIFIED IDEOGRAPH - 0xFB48: 0x9E0B, //CJK UNIFIED IDEOGRAPH - 0xFB49: 0x9E0C, //CJK UNIFIED IDEOGRAPH - 0xFB4A: 0x9E0D, //CJK UNIFIED IDEOGRAPH - 0xFB4B: 0x9E0E, //CJK UNIFIED IDEOGRAPH - 0xFB4C: 0x9E0F, //CJK UNIFIED IDEOGRAPH - 0xFB4D: 0x9E10, //CJK UNIFIED IDEOGRAPH - 0xFB4E: 0x9E11, //CJK UNIFIED IDEOGRAPH - 0xFB4F: 0x9E12, //CJK UNIFIED IDEOGRAPH - 0xFB50: 0x9E13, //CJK UNIFIED IDEOGRAPH - 0xFB51: 0x9E14, //CJK UNIFIED IDEOGRAPH - 0xFB52: 0x9E15, //CJK UNIFIED IDEOGRAPH - 0xFB53: 0x9E16, //CJK UNIFIED IDEOGRAPH - 0xFB54: 0x9E17, //CJK UNIFIED IDEOGRAPH - 0xFB55: 0x9E18, //CJK UNIFIED IDEOGRAPH - 0xFB56: 0x9E19, //CJK UNIFIED IDEOGRAPH - 0xFB57: 0x9E1A, //CJK UNIFIED IDEOGRAPH - 0xFB58: 0x9E1B, //CJK UNIFIED IDEOGRAPH - 0xFB59: 0x9E1C, //CJK UNIFIED IDEOGRAPH - 0xFB5A: 0x9E1D, //CJK UNIFIED IDEOGRAPH - 0xFB5B: 0x9E1E, //CJK UNIFIED IDEOGRAPH - 0xFB5C: 0x9E24, //CJK UNIFIED IDEOGRAPH - 0xFB5D: 0x9E27, //CJK UNIFIED IDEOGRAPH - 0xFB5E: 0x9E2E, //CJK UNIFIED IDEOGRAPH - 0xFB5F: 0x9E30, //CJK UNIFIED IDEOGRAPH - 0xFB60: 0x9E34, //CJK UNIFIED IDEOGRAPH - 0xFB61: 0x9E3B, //CJK UNIFIED IDEOGRAPH - 0xFB62: 0x9E3C, //CJK UNIFIED IDEOGRAPH - 0xFB63: 0x9E40, //CJK UNIFIED IDEOGRAPH - 0xFB64: 0x9E4D, //CJK UNIFIED IDEOGRAPH - 0xFB65: 0x9E50, //CJK UNIFIED IDEOGRAPH - 0xFB66: 0x9E52, //CJK UNIFIED IDEOGRAPH - 0xFB67: 0x9E53, //CJK UNIFIED IDEOGRAPH - 0xFB68: 0x9E54, //CJK UNIFIED IDEOGRAPH - 0xFB69: 0x9E56, //CJK UNIFIED IDEOGRAPH - 0xFB6A: 0x9E59, //CJK UNIFIED IDEOGRAPH - 0xFB6B: 0x9E5D, //CJK UNIFIED IDEOGRAPH - 0xFB6C: 0x9E5F, //CJK UNIFIED IDEOGRAPH - 0xFB6D: 0x9E60, //CJK UNIFIED IDEOGRAPH - 0xFB6E: 0x9E61, //CJK UNIFIED IDEOGRAPH - 0xFB6F: 0x9E62, //CJK UNIFIED IDEOGRAPH - 0xFB70: 0x9E65, //CJK UNIFIED IDEOGRAPH - 0xFB71: 0x9E6E, //CJK UNIFIED IDEOGRAPH - 0xFB72: 0x9E6F, //CJK UNIFIED IDEOGRAPH - 0xFB73: 0x9E72, //CJK UNIFIED IDEOGRAPH - 0xFB74: 0x9E74, //CJK UNIFIED IDEOGRAPH - 0xFB75: 0x9E75, //CJK UNIFIED IDEOGRAPH - 0xFB76: 0x9E76, //CJK UNIFIED IDEOGRAPH - 0xFB77: 0x9E77, //CJK UNIFIED IDEOGRAPH - 0xFB78: 0x9E78, //CJK UNIFIED IDEOGRAPH - 0xFB79: 0x9E79, //CJK UNIFIED IDEOGRAPH - 0xFB7A: 0x9E7A, //CJK UNIFIED IDEOGRAPH - 0xFB7B: 0x9E7B, //CJK UNIFIED IDEOGRAPH - 0xFB7C: 0x9E7C, //CJK UNIFIED IDEOGRAPH - 0xFB7D: 0x9E7D, //CJK UNIFIED IDEOGRAPH - 0xFB7E: 0x9E80, //CJK UNIFIED IDEOGRAPH - 0xFB80: 0x9E81, //CJK UNIFIED IDEOGRAPH - 0xFB81: 0x9E83, //CJK UNIFIED IDEOGRAPH - 0xFB82: 0x9E84, //CJK UNIFIED IDEOGRAPH - 0xFB83: 0x9E85, //CJK UNIFIED IDEOGRAPH - 0xFB84: 0x9E86, //CJK UNIFIED IDEOGRAPH - 0xFB85: 0x9E89, //CJK UNIFIED IDEOGRAPH - 0xFB86: 0x9E8A, //CJK UNIFIED IDEOGRAPH - 0xFB87: 0x9E8C, //CJK UNIFIED IDEOGRAPH - 0xFB88: 0x9E8D, //CJK UNIFIED IDEOGRAPH - 0xFB89: 0x9E8E, //CJK UNIFIED IDEOGRAPH - 0xFB8A: 0x9E8F, //CJK UNIFIED IDEOGRAPH - 0xFB8B: 0x9E90, //CJK UNIFIED IDEOGRAPH - 0xFB8C: 0x9E91, //CJK UNIFIED IDEOGRAPH - 0xFB8D: 0x9E94, //CJK UNIFIED IDEOGRAPH - 0xFB8E: 0x9E95, //CJK UNIFIED IDEOGRAPH - 0xFB8F: 0x9E96, //CJK UNIFIED IDEOGRAPH - 0xFB90: 0x9E97, //CJK UNIFIED IDEOGRAPH - 0xFB91: 0x9E98, //CJK UNIFIED IDEOGRAPH - 0xFB92: 0x9E99, //CJK UNIFIED IDEOGRAPH - 0xFB93: 0x9E9A, //CJK UNIFIED IDEOGRAPH - 0xFB94: 0x9E9B, //CJK UNIFIED IDEOGRAPH - 0xFB95: 0x9E9C, //CJK UNIFIED IDEOGRAPH - 0xFB96: 0x9E9E, //CJK UNIFIED IDEOGRAPH - 0xFB97: 0x9EA0, //CJK UNIFIED IDEOGRAPH - 0xFB98: 0x9EA1, //CJK UNIFIED IDEOGRAPH - 0xFB99: 0x9EA2, //CJK UNIFIED IDEOGRAPH - 0xFB9A: 0x9EA3, //CJK UNIFIED IDEOGRAPH - 0xFB9B: 0x9EA4, //CJK UNIFIED IDEOGRAPH - 0xFB9C: 0x9EA5, //CJK UNIFIED IDEOGRAPH - 0xFB9D: 0x9EA7, //CJK UNIFIED IDEOGRAPH - 0xFB9E: 0x9EA8, //CJK UNIFIED IDEOGRAPH - 0xFB9F: 0x9EA9, //CJK UNIFIED IDEOGRAPH - 0xFBA0: 0x9EAA, //CJK UNIFIED IDEOGRAPH - 0xFC40: 0x9EAB, //CJK UNIFIED IDEOGRAPH - 0xFC41: 0x9EAC, //CJK UNIFIED IDEOGRAPH - 0xFC42: 0x9EAD, //CJK UNIFIED IDEOGRAPH - 0xFC43: 0x9EAE, //CJK UNIFIED IDEOGRAPH - 0xFC44: 0x9EAF, //CJK UNIFIED IDEOGRAPH - 0xFC45: 0x9EB0, //CJK UNIFIED IDEOGRAPH - 0xFC46: 0x9EB1, //CJK UNIFIED IDEOGRAPH - 0xFC47: 0x9EB2, //CJK UNIFIED IDEOGRAPH - 0xFC48: 0x9EB3, //CJK UNIFIED IDEOGRAPH - 0xFC49: 0x9EB5, //CJK UNIFIED IDEOGRAPH - 0xFC4A: 0x9EB6, //CJK UNIFIED IDEOGRAPH - 0xFC4B: 0x9EB7, //CJK UNIFIED IDEOGRAPH - 0xFC4C: 0x9EB9, //CJK UNIFIED IDEOGRAPH - 0xFC4D: 0x9EBA, //CJK UNIFIED IDEOGRAPH - 0xFC4E: 0x9EBC, //CJK UNIFIED IDEOGRAPH - 0xFC4F: 0x9EBF, //CJK UNIFIED IDEOGRAPH - 0xFC50: 0x9EC0, //CJK UNIFIED IDEOGRAPH - 0xFC51: 0x9EC1, //CJK UNIFIED IDEOGRAPH - 0xFC52: 0x9EC2, //CJK UNIFIED IDEOGRAPH - 0xFC53: 0x9EC3, //CJK UNIFIED IDEOGRAPH - 0xFC54: 0x9EC5, //CJK UNIFIED IDEOGRAPH - 0xFC55: 0x9EC6, //CJK UNIFIED IDEOGRAPH - 0xFC56: 0x9EC7, //CJK UNIFIED IDEOGRAPH - 0xFC57: 0x9EC8, //CJK UNIFIED IDEOGRAPH - 0xFC58: 0x9ECA, //CJK UNIFIED IDEOGRAPH - 0xFC59: 0x9ECB, //CJK UNIFIED IDEOGRAPH - 0xFC5A: 0x9ECC, //CJK UNIFIED IDEOGRAPH - 0xFC5B: 0x9ED0, //CJK UNIFIED IDEOGRAPH - 0xFC5C: 0x9ED2, //CJK UNIFIED IDEOGRAPH - 0xFC5D: 0x9ED3, //CJK UNIFIED IDEOGRAPH - 0xFC5E: 0x9ED5, //CJK UNIFIED IDEOGRAPH - 0xFC5F: 0x9ED6, //CJK UNIFIED IDEOGRAPH - 0xFC60: 0x9ED7, //CJK UNIFIED IDEOGRAPH - 0xFC61: 0x9ED9, //CJK UNIFIED IDEOGRAPH - 0xFC62: 0x9EDA, //CJK UNIFIED IDEOGRAPH - 0xFC63: 0x9EDE, //CJK UNIFIED IDEOGRAPH - 0xFC64: 0x9EE1, //CJK UNIFIED IDEOGRAPH - 0xFC65: 0x9EE3, //CJK UNIFIED IDEOGRAPH - 0xFC66: 0x9EE4, //CJK UNIFIED IDEOGRAPH - 0xFC67: 0x9EE6, //CJK UNIFIED IDEOGRAPH - 0xFC68: 0x9EE8, //CJK UNIFIED IDEOGRAPH - 0xFC69: 0x9EEB, //CJK UNIFIED IDEOGRAPH - 0xFC6A: 0x9EEC, //CJK UNIFIED IDEOGRAPH - 0xFC6B: 0x9EED, //CJK UNIFIED IDEOGRAPH - 0xFC6C: 0x9EEE, //CJK UNIFIED IDEOGRAPH - 0xFC6D: 0x9EF0, //CJK UNIFIED IDEOGRAPH - 0xFC6E: 0x9EF1, //CJK UNIFIED IDEOGRAPH - 0xFC6F: 0x9EF2, //CJK UNIFIED IDEOGRAPH - 0xFC70: 0x9EF3, //CJK UNIFIED IDEOGRAPH - 0xFC71: 0x9EF4, //CJK UNIFIED IDEOGRAPH - 0xFC72: 0x9EF5, //CJK UNIFIED IDEOGRAPH - 0xFC73: 0x9EF6, //CJK UNIFIED IDEOGRAPH - 0xFC74: 0x9EF7, //CJK UNIFIED IDEOGRAPH - 0xFC75: 0x9EF8, //CJK UNIFIED IDEOGRAPH - 0xFC76: 0x9EFA, //CJK UNIFIED IDEOGRAPH - 0xFC77: 0x9EFD, //CJK UNIFIED IDEOGRAPH - 0xFC78: 0x9EFF, //CJK UNIFIED IDEOGRAPH - 0xFC79: 0x9F00, //CJK UNIFIED IDEOGRAPH - 0xFC7A: 0x9F01, //CJK UNIFIED IDEOGRAPH - 0xFC7B: 0x9F02, //CJK UNIFIED IDEOGRAPH - 0xFC7C: 0x9F03, //CJK UNIFIED IDEOGRAPH - 0xFC7D: 0x9F04, //CJK UNIFIED IDEOGRAPH - 0xFC7E: 0x9F05, //CJK UNIFIED IDEOGRAPH - 0xFC80: 0x9F06, //CJK UNIFIED IDEOGRAPH - 0xFC81: 0x9F07, //CJK UNIFIED IDEOGRAPH - 0xFC82: 0x9F08, //CJK UNIFIED IDEOGRAPH - 0xFC83: 0x9F09, //CJK UNIFIED IDEOGRAPH - 0xFC84: 0x9F0A, //CJK UNIFIED IDEOGRAPH - 0xFC85: 0x9F0C, //CJK UNIFIED IDEOGRAPH - 0xFC86: 0x9F0F, //CJK UNIFIED IDEOGRAPH - 0xFC87: 0x9F11, //CJK UNIFIED IDEOGRAPH - 0xFC88: 0x9F12, //CJK UNIFIED IDEOGRAPH - 0xFC89: 0x9F14, //CJK UNIFIED IDEOGRAPH - 0xFC8A: 0x9F15, //CJK UNIFIED IDEOGRAPH - 0xFC8B: 0x9F16, //CJK UNIFIED IDEOGRAPH - 0xFC8C: 0x9F18, //CJK UNIFIED IDEOGRAPH - 0xFC8D: 0x9F1A, //CJK UNIFIED IDEOGRAPH - 0xFC8E: 0x9F1B, //CJK UNIFIED IDEOGRAPH - 0xFC8F: 0x9F1C, //CJK UNIFIED IDEOGRAPH - 0xFC90: 0x9F1D, //CJK UNIFIED IDEOGRAPH - 0xFC91: 0x9F1E, //CJK UNIFIED IDEOGRAPH - 0xFC92: 0x9F1F, //CJK UNIFIED IDEOGRAPH - 0xFC93: 0x9F21, //CJK UNIFIED IDEOGRAPH - 0xFC94: 0x9F23, //CJK UNIFIED IDEOGRAPH - 0xFC95: 0x9F24, //CJK UNIFIED IDEOGRAPH - 0xFC96: 0x9F25, //CJK UNIFIED IDEOGRAPH - 0xFC97: 0x9F26, //CJK UNIFIED IDEOGRAPH - 0xFC98: 0x9F27, //CJK UNIFIED IDEOGRAPH - 0xFC99: 0x9F28, //CJK UNIFIED IDEOGRAPH - 0xFC9A: 0x9F29, //CJK UNIFIED IDEOGRAPH - 0xFC9B: 0x9F2A, //CJK UNIFIED IDEOGRAPH - 0xFC9C: 0x9F2B, //CJK UNIFIED IDEOGRAPH - 0xFC9D: 0x9F2D, //CJK UNIFIED IDEOGRAPH - 0xFC9E: 0x9F2E, //CJK UNIFIED IDEOGRAPH - 0xFC9F: 0x9F30, //CJK UNIFIED IDEOGRAPH - 0xFCA0: 0x9F31, //CJK UNIFIED IDEOGRAPH - 0xFD40: 0x9F32, //CJK UNIFIED IDEOGRAPH - 0xFD41: 0x9F33, //CJK UNIFIED IDEOGRAPH - 0xFD42: 0x9F34, //CJK UNIFIED IDEOGRAPH - 0xFD43: 0x9F35, //CJK UNIFIED IDEOGRAPH - 0xFD44: 0x9F36, //CJK UNIFIED IDEOGRAPH - 0xFD45: 0x9F38, //CJK UNIFIED IDEOGRAPH - 0xFD46: 0x9F3A, //CJK UNIFIED IDEOGRAPH - 0xFD47: 0x9F3C, //CJK UNIFIED IDEOGRAPH - 0xFD48: 0x9F3F, //CJK UNIFIED IDEOGRAPH - 0xFD49: 0x9F40, //CJK UNIFIED IDEOGRAPH - 0xFD4A: 0x9F41, //CJK UNIFIED IDEOGRAPH - 0xFD4B: 0x9F42, //CJK UNIFIED IDEOGRAPH - 0xFD4C: 0x9F43, //CJK UNIFIED IDEOGRAPH - 0xFD4D: 0x9F45, //CJK UNIFIED IDEOGRAPH - 0xFD4E: 0x9F46, //CJK UNIFIED IDEOGRAPH - 0xFD4F: 0x9F47, //CJK UNIFIED IDEOGRAPH - 0xFD50: 0x9F48, //CJK UNIFIED IDEOGRAPH - 0xFD51: 0x9F49, //CJK UNIFIED IDEOGRAPH - 0xFD52: 0x9F4A, //CJK UNIFIED IDEOGRAPH - 0xFD53: 0x9F4B, //CJK UNIFIED IDEOGRAPH - 0xFD54: 0x9F4C, //CJK UNIFIED IDEOGRAPH - 0xFD55: 0x9F4D, //CJK UNIFIED IDEOGRAPH - 0xFD56: 0x9F4E, //CJK UNIFIED IDEOGRAPH - 0xFD57: 0x9F4F, //CJK UNIFIED IDEOGRAPH - 0xFD58: 0x9F52, //CJK UNIFIED IDEOGRAPH - 0xFD59: 0x9F53, //CJK UNIFIED IDEOGRAPH - 0xFD5A: 0x9F54, //CJK UNIFIED IDEOGRAPH - 0xFD5B: 0x9F55, //CJK UNIFIED IDEOGRAPH - 0xFD5C: 0x9F56, //CJK UNIFIED IDEOGRAPH - 0xFD5D: 0x9F57, //CJK UNIFIED IDEOGRAPH - 0xFD5E: 0x9F58, //CJK UNIFIED IDEOGRAPH - 0xFD5F: 0x9F59, //CJK UNIFIED IDEOGRAPH - 0xFD60: 0x9F5A, //CJK UNIFIED IDEOGRAPH - 0xFD61: 0x9F5B, //CJK UNIFIED IDEOGRAPH - 0xFD62: 0x9F5C, //CJK UNIFIED IDEOGRAPH - 0xFD63: 0x9F5D, //CJK UNIFIED IDEOGRAPH - 0xFD64: 0x9F5E, //CJK UNIFIED IDEOGRAPH - 0xFD65: 0x9F5F, //CJK UNIFIED IDEOGRAPH - 0xFD66: 0x9F60, //CJK UNIFIED IDEOGRAPH - 0xFD67: 0x9F61, //CJK UNIFIED IDEOGRAPH - 0xFD68: 0x9F62, //CJK UNIFIED IDEOGRAPH - 0xFD69: 0x9F63, //CJK UNIFIED IDEOGRAPH - 0xFD6A: 0x9F64, //CJK UNIFIED IDEOGRAPH - 0xFD6B: 0x9F65, //CJK UNIFIED IDEOGRAPH - 0xFD6C: 0x9F66, //CJK UNIFIED IDEOGRAPH - 0xFD6D: 0x9F67, //CJK UNIFIED IDEOGRAPH - 0xFD6E: 0x9F68, //CJK UNIFIED IDEOGRAPH - 0xFD6F: 0x9F69, //CJK UNIFIED IDEOGRAPH - 0xFD70: 0x9F6A, //CJK UNIFIED IDEOGRAPH - 0xFD71: 0x9F6B, //CJK UNIFIED IDEOGRAPH - 0xFD72: 0x9F6C, //CJK UNIFIED IDEOGRAPH - 0xFD73: 0x9F6D, //CJK UNIFIED IDEOGRAPH - 0xFD74: 0x9F6E, //CJK UNIFIED IDEOGRAPH - 0xFD75: 0x9F6F, //CJK UNIFIED IDEOGRAPH - 0xFD76: 0x9F70, //CJK UNIFIED IDEOGRAPH - 0xFD77: 0x9F71, //CJK UNIFIED IDEOGRAPH - 0xFD78: 0x9F72, //CJK UNIFIED IDEOGRAPH - 0xFD79: 0x9F73, //CJK UNIFIED IDEOGRAPH - 0xFD7A: 0x9F74, //CJK UNIFIED IDEOGRAPH - 0xFD7B: 0x9F75, //CJK UNIFIED IDEOGRAPH - 0xFD7C: 0x9F76, //CJK UNIFIED IDEOGRAPH - 0xFD7D: 0x9F77, //CJK UNIFIED IDEOGRAPH - 0xFD7E: 0x9F78, //CJK UNIFIED IDEOGRAPH - 0xFD80: 0x9F79, //CJK UNIFIED IDEOGRAPH - 0xFD81: 0x9F7A, //CJK UNIFIED IDEOGRAPH - 0xFD82: 0x9F7B, //CJK UNIFIED IDEOGRAPH - 0xFD83: 0x9F7C, //CJK UNIFIED IDEOGRAPH - 0xFD84: 0x9F7D, //CJK UNIFIED IDEOGRAPH - 0xFD85: 0x9F7E, //CJK UNIFIED IDEOGRAPH - 0xFD86: 0x9F81, //CJK UNIFIED IDEOGRAPH - 0xFD87: 0x9F82, //CJK UNIFIED IDEOGRAPH - 0xFD88: 0x9F8D, //CJK UNIFIED IDEOGRAPH - 0xFD89: 0x9F8E, //CJK UNIFIED IDEOGRAPH - 0xFD8A: 0x9F8F, //CJK UNIFIED IDEOGRAPH - 0xFD8B: 0x9F90, //CJK UNIFIED IDEOGRAPH - 0xFD8C: 0x9F91, //CJK UNIFIED IDEOGRAPH - 0xFD8D: 0x9F92, //CJK UNIFIED IDEOGRAPH - 0xFD8E: 0x9F93, //CJK UNIFIED IDEOGRAPH - 0xFD8F: 0x9F94, //CJK UNIFIED IDEOGRAPH - 0xFD90: 0x9F95, //CJK UNIFIED IDEOGRAPH - 0xFD91: 0x9F96, //CJK UNIFIED IDEOGRAPH - 0xFD92: 0x9F97, //CJK UNIFIED IDEOGRAPH - 0xFD93: 0x9F98, //CJK UNIFIED IDEOGRAPH - 0xFD94: 0x9F9C, //CJK UNIFIED IDEOGRAPH - 0xFD95: 0x9F9D, //CJK UNIFIED IDEOGRAPH - 0xFD96: 0x9F9E, //CJK UNIFIED IDEOGRAPH - 0xFD97: 0x9FA1, //CJK UNIFIED IDEOGRAPH - 0xFD98: 0x9FA2, //CJK UNIFIED IDEOGRAPH - 0xFD99: 0x9FA3, //CJK UNIFIED IDEOGRAPH - 0xFD9A: 0x9FA4, //CJK UNIFIED IDEOGRAPH - 0xFD9B: 0x9FA5, //CJK UNIFIED IDEOGRAPH - 0xFD9C: 0xF92C, //CJK COMPATIBILITY IDEOGRAPH - 0xFD9D: 0xF979, //CJK COMPATIBILITY IDEOGRAPH - 0xFD9E: 0xF995, //CJK COMPATIBILITY IDEOGRAPH - 0xFD9F: 0xF9E7, //CJK COMPATIBILITY IDEOGRAPH - 0xFDA0: 0xF9F1, //CJK COMPATIBILITY IDEOGRAPH - 0xFE40: 0xFA0C, //CJK COMPATIBILITY IDEOGRAPH - 0xFE41: 0xFA0D, //CJK COMPATIBILITY IDEOGRAPH - 0xFE42: 0xFA0E, //CJK COMPATIBILITY IDEOGRAPH - 0xFE43: 0xFA0F, //CJK COMPATIBILITY IDEOGRAPH - 0xFE44: 0xFA11, //CJK COMPATIBILITY IDEOGRAPH - 0xFE45: 0xFA13, //CJK COMPATIBILITY IDEOGRAPH - 0xFE46: 0xFA14, //CJK COMPATIBILITY IDEOGRAPH - 0xFE47: 0xFA18, //CJK COMPATIBILITY IDEOGRAPH - 0xFE48: 0xFA1F, //CJK COMPATIBILITY IDEOGRAPH - 0xFE49: 0xFA20, //CJK COMPATIBILITY IDEOGRAPH - 0xFE4A: 0xFA21, //CJK COMPATIBILITY IDEOGRAPH - 0xFE4B: 0xFA23, //CJK COMPATIBILITY IDEOGRAPH - 0xFE4C: 0xFA24, //CJK COMPATIBILITY IDEOGRAPH - 0xFE4D: 0xFA27, //CJK COMPATIBILITY IDEOGRAPH - 0xFE4E: 0xFA28, //CJK COMPATIBILITY IDEOGRAPH - 0xFE4F: 0xFA29, //CJK COMPATIBILITY IDEOGRAPH - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp949.go b/vendor/github.com/denisenkom/go-mssqldb/cp949.go deleted file mode 100644 index cddfcbc85..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp949.go +++ /dev/null @@ -1,17312 +0,0 @@ -package mssql - -var cp949 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000A, //LINE FEED - 0x000B, //VERTICAL TABULATION - 0x000C, //FORM FEED - 0x000D, //CARRIAGE RETURN - 0x000E, //SHIFT OUT - 0x000F, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001A, //SUBSTITUTE - 0x001B, //ESCAPE - 0x001C, //FILE SEPARATOR - 0x001D, //GROUP SEPARATOR - 0x001E, //RECORD SEPARATOR - 0x001F, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002A, //ASTERISK - 0x002B, //PLUS SIGN - 0x002C, //COMMA - 0x002D, //HYPHEN-MINUS - 0x002E, //FULL STOP - 0x002F, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003A, //COLON - 0x003B, //SEMICOLON - 0x003C, //LESS-THAN SIGN - 0x003D, //EQUALS SIGN - 0x003E, //GREATER-THAN SIGN - 0x003F, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004A, //LATIN CAPITAL LETTER J - 0x004B, //LATIN CAPITAL LETTER K - 0x004C, //LATIN CAPITAL LETTER L - 0x004D, //LATIN CAPITAL LETTER M - 0x004E, //LATIN CAPITAL LETTER N - 0x004F, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005A, //LATIN CAPITAL LETTER Z - 0x005B, //LEFT SQUARE BRACKET - 0x005C, //REVERSE SOLIDUS - 0x005D, //RIGHT SQUARE BRACKET - 0x005E, //CIRCUMFLEX ACCENT - 0x005F, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006A, //LATIN SMALL LETTER J - 0x006B, //LATIN SMALL LETTER K - 0x006C, //LATIN SMALL LETTER L - 0x006D, //LATIN SMALL LETTER M - 0x006E, //LATIN SMALL LETTER N - 0x006F, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007A, //LATIN SMALL LETTER Z - 0x007B, //LEFT CURLY BRACKET - 0x007C, //VERTICAL LINE - 0x007D, //RIGHT CURLY BRACKET - 0x007E, //TILDE - 0x007F, //DELETE - 0xFFFD, //UNDEFINED - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - 0xFFFD, //UNDEFINED - }, - db: map[int]rune{ - 0x8141: 0xAC02, //HANGUL SYLLABLE KIYEOK A SSANGKIYEOK - 0x8142: 0xAC03, //HANGUL SYLLABLE KIYEOK A KIYEOKSIOS - 0x8143: 0xAC05, //HANGUL SYLLABLE KIYEOK A NIEUNCIEUC - 0x8144: 0xAC06, //HANGUL SYLLABLE KIYEOK A NIEUNHIEUH - 0x8145: 0xAC0B, //HANGUL SYLLABLE KIYEOK A RIEULPIEUP - 0x8146: 0xAC0C, //HANGUL SYLLABLE KIYEOK A RIEULSIOS - 0x8147: 0xAC0D, //HANGUL SYLLABLE KIYEOK A RIEULTHIEUTH - 0x8148: 0xAC0E, //HANGUL SYLLABLE KIYEOK A RIEULPHIEUPH - 0x8149: 0xAC0F, //HANGUL SYLLABLE KIYEOK A RIEULHIEUH - 0x814A: 0xAC18, //HANGUL SYLLABLE KIYEOK A KHIEUKH - 0x814B: 0xAC1E, //HANGUL SYLLABLE KIYEOK AE SSANGKIYEOK - 0x814C: 0xAC1F, //HANGUL SYLLABLE KIYEOK AE KIYEOKSIOS - 0x814D: 0xAC21, //HANGUL SYLLABLE KIYEOK AE NIEUNCIEUC - 0x814E: 0xAC22, //HANGUL SYLLABLE KIYEOK AE NIEUNHIEUH - 0x814F: 0xAC23, //HANGUL SYLLABLE KIYEOK AE TIKEUT - 0x8150: 0xAC25, //HANGUL SYLLABLE KIYEOK AE RIEULKIYEOK - 0x8151: 0xAC26, //HANGUL SYLLABLE KIYEOK AE RIEULMIEUM - 0x8152: 0xAC27, //HANGUL SYLLABLE KIYEOK AE RIEULPIEUP - 0x8153: 0xAC28, //HANGUL SYLLABLE KIYEOK AE RIEULSIOS - 0x8154: 0xAC29, //HANGUL SYLLABLE KIYEOK AE RIEULTHIEUTH - 0x8155: 0xAC2A, //HANGUL SYLLABLE KIYEOK AE RIEULPHIEUPH - 0x8156: 0xAC2B, //HANGUL SYLLABLE KIYEOK AE RIEULHIEUH - 0x8157: 0xAC2E, //HANGUL SYLLABLE KIYEOK AE PIEUPSIOS - 0x8158: 0xAC32, //HANGUL SYLLABLE KIYEOK AE CIEUC - 0x8159: 0xAC33, //HANGUL SYLLABLE KIYEOK AE CHIEUCH - 0x815A: 0xAC34, //HANGUL SYLLABLE KIYEOK AE KHIEUKH - 0x8161: 0xAC35, //HANGUL SYLLABLE KIYEOK AE THIEUTH - 0x8162: 0xAC36, //HANGUL SYLLABLE KIYEOK AE PHIEUPH - 0x8163: 0xAC37, //HANGUL SYLLABLE KIYEOK AE HIEUH - 0x8164: 0xAC3A, //HANGUL SYLLABLE KIYEOK YA SSANGKIYEOK - 0x8165: 0xAC3B, //HANGUL SYLLABLE KIYEOK YA KIYEOKSIOS - 0x8166: 0xAC3D, //HANGUL SYLLABLE KIYEOK YA NIEUNCIEUC - 0x8167: 0xAC3E, //HANGUL SYLLABLE KIYEOK YA NIEUNHIEUH - 0x8168: 0xAC3F, //HANGUL SYLLABLE KIYEOK YA TIKEUT - 0x8169: 0xAC41, //HANGUL SYLLABLE KIYEOK YA RIEULKIYEOK - 0x816A: 0xAC42, //HANGUL SYLLABLE KIYEOK YA RIEULMIEUM - 0x816B: 0xAC43, //HANGUL SYLLABLE KIYEOK YA RIEULPIEUP - 0x816C: 0xAC44, //HANGUL SYLLABLE KIYEOK YA RIEULSIOS - 0x816D: 0xAC45, //HANGUL SYLLABLE KIYEOK YA RIEULTHIEUTH - 0x816E: 0xAC46, //HANGUL SYLLABLE KIYEOK YA RIEULPHIEUPH - 0x816F: 0xAC47, //HANGUL SYLLABLE KIYEOK YA RIEULHIEUH - 0x8170: 0xAC48, //HANGUL SYLLABLE KIYEOK YA MIEUM - 0x8171: 0xAC49, //HANGUL SYLLABLE KIYEOK YA PIEUP - 0x8172: 0xAC4A, //HANGUL SYLLABLE KIYEOK YA PIEUPSIOS - 0x8173: 0xAC4C, //HANGUL SYLLABLE KIYEOK YA SSANGSIOS - 0x8174: 0xAC4E, //HANGUL SYLLABLE KIYEOK YA CIEUC - 0x8175: 0xAC4F, //HANGUL SYLLABLE KIYEOK YA CHIEUCH - 0x8176: 0xAC50, //HANGUL SYLLABLE KIYEOK YA KHIEUKH - 0x8177: 0xAC51, //HANGUL SYLLABLE KIYEOK YA THIEUTH - 0x8178: 0xAC52, //HANGUL SYLLABLE KIYEOK YA PHIEUPH - 0x8179: 0xAC53, //HANGUL SYLLABLE KIYEOK YA HIEUH - 0x817A: 0xAC55, //HANGUL SYLLABLE KIYEOK YAE KIYEOK - 0x8181: 0xAC56, //HANGUL SYLLABLE KIYEOK YAE SSANGKIYEOK - 0x8182: 0xAC57, //HANGUL SYLLABLE KIYEOK YAE KIYEOKSIOS - 0x8183: 0xAC59, //HANGUL SYLLABLE KIYEOK YAE NIEUNCIEUC - 0x8184: 0xAC5A, //HANGUL SYLLABLE KIYEOK YAE NIEUNHIEUH - 0x8185: 0xAC5B, //HANGUL SYLLABLE KIYEOK YAE TIKEUT - 0x8186: 0xAC5D, //HANGUL SYLLABLE KIYEOK YAE RIEULKIYEOK - 0x8187: 0xAC5E, //HANGUL SYLLABLE KIYEOK YAE RIEULMIEUM - 0x8188: 0xAC5F, //HANGUL SYLLABLE KIYEOK YAE RIEULPIEUP - 0x8189: 0xAC60, //HANGUL SYLLABLE KIYEOK YAE RIEULSIOS - 0x818A: 0xAC61, //HANGUL SYLLABLE KIYEOK YAE RIEULTHIEUTH - 0x818B: 0xAC62, //HANGUL SYLLABLE KIYEOK YAE RIEULPHIEUPH - 0x818C: 0xAC63, //HANGUL SYLLABLE KIYEOK YAE RIEULHIEUH - 0x818D: 0xAC64, //HANGUL SYLLABLE KIYEOK YAE MIEUM - 0x818E: 0xAC65, //HANGUL SYLLABLE KIYEOK YAE PIEUP - 0x818F: 0xAC66, //HANGUL SYLLABLE KIYEOK YAE PIEUPSIOS - 0x8190: 0xAC67, //HANGUL SYLLABLE KIYEOK YAE SIOS - 0x8191: 0xAC68, //HANGUL SYLLABLE KIYEOK YAE SSANGSIOS - 0x8192: 0xAC69, //HANGUL SYLLABLE KIYEOK YAE IEUNG - 0x8193: 0xAC6A, //HANGUL SYLLABLE KIYEOK YAE CIEUC - 0x8194: 0xAC6B, //HANGUL SYLLABLE KIYEOK YAE CHIEUCH - 0x8195: 0xAC6C, //HANGUL SYLLABLE KIYEOK YAE KHIEUKH - 0x8196: 0xAC6D, //HANGUL SYLLABLE KIYEOK YAE THIEUTH - 0x8197: 0xAC6E, //HANGUL SYLLABLE KIYEOK YAE PHIEUPH - 0x8198: 0xAC6F, //HANGUL SYLLABLE KIYEOK YAE HIEUH - 0x8199: 0xAC72, //HANGUL SYLLABLE KIYEOK EO SSANGKIYEOK - 0x819A: 0xAC73, //HANGUL SYLLABLE KIYEOK EO KIYEOKSIOS - 0x819B: 0xAC75, //HANGUL SYLLABLE KIYEOK EO NIEUNCIEUC - 0x819C: 0xAC76, //HANGUL SYLLABLE KIYEOK EO NIEUNHIEUH - 0x819D: 0xAC79, //HANGUL SYLLABLE KIYEOK EO RIEULKIYEOK - 0x819E: 0xAC7B, //HANGUL SYLLABLE KIYEOK EO RIEULPIEUP - 0x819F: 0xAC7C, //HANGUL SYLLABLE KIYEOK EO RIEULSIOS - 0x81A0: 0xAC7D, //HANGUL SYLLABLE KIYEOK EO RIEULTHIEUTH - 0x81A1: 0xAC7E, //HANGUL SYLLABLE KIYEOK EO RIEULPHIEUPH - 0x81A2: 0xAC7F, //HANGUL SYLLABLE KIYEOK EO RIEULHIEUH - 0x81A3: 0xAC82, //HANGUL SYLLABLE KIYEOK EO PIEUPSIOS - 0x81A4: 0xAC87, //HANGUL SYLLABLE KIYEOK EO CHIEUCH - 0x81A5: 0xAC88, //HANGUL SYLLABLE KIYEOK EO KHIEUKH - 0x81A6: 0xAC8D, //HANGUL SYLLABLE KIYEOK E KIYEOK - 0x81A7: 0xAC8E, //HANGUL SYLLABLE KIYEOK E SSANGKIYEOK - 0x81A8: 0xAC8F, //HANGUL SYLLABLE KIYEOK E KIYEOKSIOS - 0x81A9: 0xAC91, //HANGUL SYLLABLE KIYEOK E NIEUNCIEUC - 0x81AA: 0xAC92, //HANGUL SYLLABLE KIYEOK E NIEUNHIEUH - 0x81AB: 0xAC93, //HANGUL SYLLABLE KIYEOK E TIKEUT - 0x81AC: 0xAC95, //HANGUL SYLLABLE KIYEOK E RIEULKIYEOK - 0x81AD: 0xAC96, //HANGUL SYLLABLE KIYEOK E RIEULMIEUM - 0x81AE: 0xAC97, //HANGUL SYLLABLE KIYEOK E RIEULPIEUP - 0x81AF: 0xAC98, //HANGUL SYLLABLE KIYEOK E RIEULSIOS - 0x81B0: 0xAC99, //HANGUL SYLLABLE KIYEOK E RIEULTHIEUTH - 0x81B1: 0xAC9A, //HANGUL SYLLABLE KIYEOK E RIEULPHIEUPH - 0x81B2: 0xAC9B, //HANGUL SYLLABLE KIYEOK E RIEULHIEUH - 0x81B3: 0xAC9E, //HANGUL SYLLABLE KIYEOK E PIEUPSIOS - 0x81B4: 0xACA2, //HANGUL SYLLABLE KIYEOK E CIEUC - 0x81B5: 0xACA3, //HANGUL SYLLABLE KIYEOK E CHIEUCH - 0x81B6: 0xACA4, //HANGUL SYLLABLE KIYEOK E KHIEUKH - 0x81B7: 0xACA5, //HANGUL SYLLABLE KIYEOK E THIEUTH - 0x81B8: 0xACA6, //HANGUL SYLLABLE KIYEOK E PHIEUPH - 0x81B9: 0xACA7, //HANGUL SYLLABLE KIYEOK E HIEUH - 0x81BA: 0xACAB, //HANGUL SYLLABLE KIYEOK YEO KIYEOKSIOS - 0x81BB: 0xACAD, //HANGUL SYLLABLE KIYEOK YEO NIEUNCIEUC - 0x81BC: 0xACAE, //HANGUL SYLLABLE KIYEOK YEO NIEUNHIEUH - 0x81BD: 0xACB1, //HANGUL SYLLABLE KIYEOK YEO RIEULKIYEOK - 0x81BE: 0xACB2, //HANGUL SYLLABLE KIYEOK YEO RIEULMIEUM - 0x81BF: 0xACB3, //HANGUL SYLLABLE KIYEOK YEO RIEULPIEUP - 0x81C0: 0xACB4, //HANGUL SYLLABLE KIYEOK YEO RIEULSIOS - 0x81C1: 0xACB5, //HANGUL SYLLABLE KIYEOK YEO RIEULTHIEUTH - 0x81C2: 0xACB6, //HANGUL SYLLABLE KIYEOK YEO RIEULPHIEUPH - 0x81C3: 0xACB7, //HANGUL SYLLABLE KIYEOK YEO RIEULHIEUH - 0x81C4: 0xACBA, //HANGUL SYLLABLE KIYEOK YEO PIEUPSIOS - 0x81C5: 0xACBE, //HANGUL SYLLABLE KIYEOK YEO CIEUC - 0x81C6: 0xACBF, //HANGUL SYLLABLE KIYEOK YEO CHIEUCH - 0x81C7: 0xACC0, //HANGUL SYLLABLE KIYEOK YEO KHIEUKH - 0x81C8: 0xACC2, //HANGUL SYLLABLE KIYEOK YEO PHIEUPH - 0x81C9: 0xACC3, //HANGUL SYLLABLE KIYEOK YEO HIEUH - 0x81CA: 0xACC5, //HANGUL SYLLABLE KIYEOK YE KIYEOK - 0x81CB: 0xACC6, //HANGUL SYLLABLE KIYEOK YE SSANGKIYEOK - 0x81CC: 0xACC7, //HANGUL SYLLABLE KIYEOK YE KIYEOKSIOS - 0x81CD: 0xACC9, //HANGUL SYLLABLE KIYEOK YE NIEUNCIEUC - 0x81CE: 0xACCA, //HANGUL SYLLABLE KIYEOK YE NIEUNHIEUH - 0x81CF: 0xACCB, //HANGUL SYLLABLE KIYEOK YE TIKEUT - 0x81D0: 0xACCD, //HANGUL SYLLABLE KIYEOK YE RIEULKIYEOK - 0x81D1: 0xACCE, //HANGUL SYLLABLE KIYEOK YE RIEULMIEUM - 0x81D2: 0xACCF, //HANGUL SYLLABLE KIYEOK YE RIEULPIEUP - 0x81D3: 0xACD0, //HANGUL SYLLABLE KIYEOK YE RIEULSIOS - 0x81D4: 0xACD1, //HANGUL SYLLABLE KIYEOK YE RIEULTHIEUTH - 0x81D5: 0xACD2, //HANGUL SYLLABLE KIYEOK YE RIEULPHIEUPH - 0x81D6: 0xACD3, //HANGUL SYLLABLE KIYEOK YE RIEULHIEUH - 0x81D7: 0xACD4, //HANGUL SYLLABLE KIYEOK YE MIEUM - 0x81D8: 0xACD6, //HANGUL SYLLABLE KIYEOK YE PIEUPSIOS - 0x81D9: 0xACD8, //HANGUL SYLLABLE KIYEOK YE SSANGSIOS - 0x81DA: 0xACD9, //HANGUL SYLLABLE KIYEOK YE IEUNG - 0x81DB: 0xACDA, //HANGUL SYLLABLE KIYEOK YE CIEUC - 0x81DC: 0xACDB, //HANGUL SYLLABLE KIYEOK YE CHIEUCH - 0x81DD: 0xACDC, //HANGUL SYLLABLE KIYEOK YE KHIEUKH - 0x81DE: 0xACDD, //HANGUL SYLLABLE KIYEOK YE THIEUTH - 0x81DF: 0xACDE, //HANGUL SYLLABLE KIYEOK YE PHIEUPH - 0x81E0: 0xACDF, //HANGUL SYLLABLE KIYEOK YE HIEUH - 0x81E1: 0xACE2, //HANGUL SYLLABLE KIYEOK O SSANGKIYEOK - 0x81E2: 0xACE3, //HANGUL SYLLABLE KIYEOK O KIYEOKSIOS - 0x81E3: 0xACE5, //HANGUL SYLLABLE KIYEOK O NIEUNCIEUC - 0x81E4: 0xACE6, //HANGUL SYLLABLE KIYEOK O NIEUNHIEUH - 0x81E5: 0xACE9, //HANGUL SYLLABLE KIYEOK O RIEULKIYEOK - 0x81E6: 0xACEB, //HANGUL SYLLABLE KIYEOK O RIEULPIEUP - 0x81E7: 0xACED, //HANGUL SYLLABLE KIYEOK O RIEULTHIEUTH - 0x81E8: 0xACEE, //HANGUL SYLLABLE KIYEOK O RIEULPHIEUPH - 0x81E9: 0xACF2, //HANGUL SYLLABLE KIYEOK O PIEUPSIOS - 0x81EA: 0xACF4, //HANGUL SYLLABLE KIYEOK O SSANGSIOS - 0x81EB: 0xACF7, //HANGUL SYLLABLE KIYEOK O CHIEUCH - 0x81EC: 0xACF8, //HANGUL SYLLABLE KIYEOK O KHIEUKH - 0x81ED: 0xACF9, //HANGUL SYLLABLE KIYEOK O THIEUTH - 0x81EE: 0xACFA, //HANGUL SYLLABLE KIYEOK O PHIEUPH - 0x81EF: 0xACFB, //HANGUL SYLLABLE KIYEOK O HIEUH - 0x81F0: 0xACFE, //HANGUL SYLLABLE KIYEOK WA SSANGKIYEOK - 0x81F1: 0xACFF, //HANGUL SYLLABLE KIYEOK WA KIYEOKSIOS - 0x81F2: 0xAD01, //HANGUL SYLLABLE KIYEOK WA NIEUNCIEUC - 0x81F3: 0xAD02, //HANGUL SYLLABLE KIYEOK WA NIEUNHIEUH - 0x81F4: 0xAD03, //HANGUL SYLLABLE KIYEOK WA TIKEUT - 0x81F5: 0xAD05, //HANGUL SYLLABLE KIYEOK WA RIEULKIYEOK - 0x81F6: 0xAD07, //HANGUL SYLLABLE KIYEOK WA RIEULPIEUP - 0x81F7: 0xAD08, //HANGUL SYLLABLE KIYEOK WA RIEULSIOS - 0x81F8: 0xAD09, //HANGUL SYLLABLE KIYEOK WA RIEULTHIEUTH - 0x81F9: 0xAD0A, //HANGUL SYLLABLE KIYEOK WA RIEULPHIEUPH - 0x81FA: 0xAD0B, //HANGUL SYLLABLE KIYEOK WA RIEULHIEUH - 0x81FB: 0xAD0E, //HANGUL SYLLABLE KIYEOK WA PIEUPSIOS - 0x81FC: 0xAD10, //HANGUL SYLLABLE KIYEOK WA SSANGSIOS - 0x81FD: 0xAD12, //HANGUL SYLLABLE KIYEOK WA CIEUC - 0x81FE: 0xAD13, //HANGUL SYLLABLE KIYEOK WA CHIEUCH - 0x8241: 0xAD14, //HANGUL SYLLABLE KIYEOK WA KHIEUKH - 0x8242: 0xAD15, //HANGUL SYLLABLE KIYEOK WA THIEUTH - 0x8243: 0xAD16, //HANGUL SYLLABLE KIYEOK WA PHIEUPH - 0x8244: 0xAD17, //HANGUL SYLLABLE KIYEOK WA HIEUH - 0x8245: 0xAD19, //HANGUL SYLLABLE KIYEOK WAE KIYEOK - 0x8246: 0xAD1A, //HANGUL SYLLABLE KIYEOK WAE SSANGKIYEOK - 0x8247: 0xAD1B, //HANGUL SYLLABLE KIYEOK WAE KIYEOKSIOS - 0x8248: 0xAD1D, //HANGUL SYLLABLE KIYEOK WAE NIEUNCIEUC - 0x8249: 0xAD1E, //HANGUL SYLLABLE KIYEOK WAE NIEUNHIEUH - 0x824A: 0xAD1F, //HANGUL SYLLABLE KIYEOK WAE TIKEUT - 0x824B: 0xAD21, //HANGUL SYLLABLE KIYEOK WAE RIEULKIYEOK - 0x824C: 0xAD22, //HANGUL SYLLABLE KIYEOK WAE RIEULMIEUM - 0x824D: 0xAD23, //HANGUL SYLLABLE KIYEOK WAE RIEULPIEUP - 0x824E: 0xAD24, //HANGUL SYLLABLE KIYEOK WAE RIEULSIOS - 0x824F: 0xAD25, //HANGUL SYLLABLE KIYEOK WAE RIEULTHIEUTH - 0x8250: 0xAD26, //HANGUL SYLLABLE KIYEOK WAE RIEULPHIEUPH - 0x8251: 0xAD27, //HANGUL SYLLABLE KIYEOK WAE RIEULHIEUH - 0x8252: 0xAD28, //HANGUL SYLLABLE KIYEOK WAE MIEUM - 0x8253: 0xAD2A, //HANGUL SYLLABLE KIYEOK WAE PIEUPSIOS - 0x8254: 0xAD2B, //HANGUL SYLLABLE KIYEOK WAE SIOS - 0x8255: 0xAD2E, //HANGUL SYLLABLE KIYEOK WAE CIEUC - 0x8256: 0xAD2F, //HANGUL SYLLABLE KIYEOK WAE CHIEUCH - 0x8257: 0xAD30, //HANGUL SYLLABLE KIYEOK WAE KHIEUKH - 0x8258: 0xAD31, //HANGUL SYLLABLE KIYEOK WAE THIEUTH - 0x8259: 0xAD32, //HANGUL SYLLABLE KIYEOK WAE PHIEUPH - 0x825A: 0xAD33, //HANGUL SYLLABLE KIYEOK WAE HIEUH - 0x8261: 0xAD36, //HANGUL SYLLABLE KIYEOK OE SSANGKIYEOK - 0x8262: 0xAD37, //HANGUL SYLLABLE KIYEOK OE KIYEOKSIOS - 0x8263: 0xAD39, //HANGUL SYLLABLE KIYEOK OE NIEUNCIEUC - 0x8264: 0xAD3A, //HANGUL SYLLABLE KIYEOK OE NIEUNHIEUH - 0x8265: 0xAD3B, //HANGUL SYLLABLE KIYEOK OE TIKEUT - 0x8266: 0xAD3D, //HANGUL SYLLABLE KIYEOK OE RIEULKIYEOK - 0x8267: 0xAD3E, //HANGUL SYLLABLE KIYEOK OE RIEULMIEUM - 0x8268: 0xAD3F, //HANGUL SYLLABLE KIYEOK OE RIEULPIEUP - 0x8269: 0xAD40, //HANGUL SYLLABLE KIYEOK OE RIEULSIOS - 0x826A: 0xAD41, //HANGUL SYLLABLE KIYEOK OE RIEULTHIEUTH - 0x826B: 0xAD42, //HANGUL SYLLABLE KIYEOK OE RIEULPHIEUPH - 0x826C: 0xAD43, //HANGUL SYLLABLE KIYEOK OE RIEULHIEUH - 0x826D: 0xAD46, //HANGUL SYLLABLE KIYEOK OE PIEUPSIOS - 0x826E: 0xAD48, //HANGUL SYLLABLE KIYEOK OE SSANGSIOS - 0x826F: 0xAD4A, //HANGUL SYLLABLE KIYEOK OE CIEUC - 0x8270: 0xAD4B, //HANGUL SYLLABLE KIYEOK OE CHIEUCH - 0x8271: 0xAD4C, //HANGUL SYLLABLE KIYEOK OE KHIEUKH - 0x8272: 0xAD4D, //HANGUL SYLLABLE KIYEOK OE THIEUTH - 0x8273: 0xAD4E, //HANGUL SYLLABLE KIYEOK OE PHIEUPH - 0x8274: 0xAD4F, //HANGUL SYLLABLE KIYEOK OE HIEUH - 0x8275: 0xAD51, //HANGUL SYLLABLE KIYEOK YO KIYEOK - 0x8276: 0xAD52, //HANGUL SYLLABLE KIYEOK YO SSANGKIYEOK - 0x8277: 0xAD53, //HANGUL SYLLABLE KIYEOK YO KIYEOKSIOS - 0x8278: 0xAD55, //HANGUL SYLLABLE KIYEOK YO NIEUNCIEUC - 0x8279: 0xAD56, //HANGUL SYLLABLE KIYEOK YO NIEUNHIEUH - 0x827A: 0xAD57, //HANGUL SYLLABLE KIYEOK YO TIKEUT - 0x8281: 0xAD59, //HANGUL SYLLABLE KIYEOK YO RIEULKIYEOK - 0x8282: 0xAD5A, //HANGUL SYLLABLE KIYEOK YO RIEULMIEUM - 0x8283: 0xAD5B, //HANGUL SYLLABLE KIYEOK YO RIEULPIEUP - 0x8284: 0xAD5C, //HANGUL SYLLABLE KIYEOK YO RIEULSIOS - 0x8285: 0xAD5D, //HANGUL SYLLABLE KIYEOK YO RIEULTHIEUTH - 0x8286: 0xAD5E, //HANGUL SYLLABLE KIYEOK YO RIEULPHIEUPH - 0x8287: 0xAD5F, //HANGUL SYLLABLE KIYEOK YO RIEULHIEUH - 0x8288: 0xAD60, //HANGUL SYLLABLE KIYEOK YO MIEUM - 0x8289: 0xAD62, //HANGUL SYLLABLE KIYEOK YO PIEUPSIOS - 0x828A: 0xAD64, //HANGUL SYLLABLE KIYEOK YO SSANGSIOS - 0x828B: 0xAD65, //HANGUL SYLLABLE KIYEOK YO IEUNG - 0x828C: 0xAD66, //HANGUL SYLLABLE KIYEOK YO CIEUC - 0x828D: 0xAD67, //HANGUL SYLLABLE KIYEOK YO CHIEUCH - 0x828E: 0xAD68, //HANGUL SYLLABLE KIYEOK YO KHIEUKH - 0x828F: 0xAD69, //HANGUL SYLLABLE KIYEOK YO THIEUTH - 0x8290: 0xAD6A, //HANGUL SYLLABLE KIYEOK YO PHIEUPH - 0x8291: 0xAD6B, //HANGUL SYLLABLE KIYEOK YO HIEUH - 0x8292: 0xAD6E, //HANGUL SYLLABLE KIYEOK U SSANGKIYEOK - 0x8293: 0xAD6F, //HANGUL SYLLABLE KIYEOK U KIYEOKSIOS - 0x8294: 0xAD71, //HANGUL SYLLABLE KIYEOK U NIEUNCIEUC - 0x8295: 0xAD72, //HANGUL SYLLABLE KIYEOK U NIEUNHIEUH - 0x8296: 0xAD77, //HANGUL SYLLABLE KIYEOK U RIEULPIEUP - 0x8297: 0xAD78, //HANGUL SYLLABLE KIYEOK U RIEULSIOS - 0x8298: 0xAD79, //HANGUL SYLLABLE KIYEOK U RIEULTHIEUTH - 0x8299: 0xAD7A, //HANGUL SYLLABLE KIYEOK U RIEULPHIEUPH - 0x829A: 0xAD7E, //HANGUL SYLLABLE KIYEOK U PIEUPSIOS - 0x829B: 0xAD80, //HANGUL SYLLABLE KIYEOK U SSANGSIOS - 0x829C: 0xAD83, //HANGUL SYLLABLE KIYEOK U CHIEUCH - 0x829D: 0xAD84, //HANGUL SYLLABLE KIYEOK U KHIEUKH - 0x829E: 0xAD85, //HANGUL SYLLABLE KIYEOK U THIEUTH - 0x829F: 0xAD86, //HANGUL SYLLABLE KIYEOK U PHIEUPH - 0x82A0: 0xAD87, //HANGUL SYLLABLE KIYEOK U HIEUH - 0x82A1: 0xAD8A, //HANGUL SYLLABLE KIYEOK WEO SSANGKIYEOK - 0x82A2: 0xAD8B, //HANGUL SYLLABLE KIYEOK WEO KIYEOKSIOS - 0x82A3: 0xAD8D, //HANGUL SYLLABLE KIYEOK WEO NIEUNCIEUC - 0x82A4: 0xAD8E, //HANGUL SYLLABLE KIYEOK WEO NIEUNHIEUH - 0x82A5: 0xAD8F, //HANGUL SYLLABLE KIYEOK WEO TIKEUT - 0x82A6: 0xAD91, //HANGUL SYLLABLE KIYEOK WEO RIEULKIYEOK - 0x82A7: 0xAD92, //HANGUL SYLLABLE KIYEOK WEO RIEULMIEUM - 0x82A8: 0xAD93, //HANGUL SYLLABLE KIYEOK WEO RIEULPIEUP - 0x82A9: 0xAD94, //HANGUL SYLLABLE KIYEOK WEO RIEULSIOS - 0x82AA: 0xAD95, //HANGUL SYLLABLE KIYEOK WEO RIEULTHIEUTH - 0x82AB: 0xAD96, //HANGUL SYLLABLE KIYEOK WEO RIEULPHIEUPH - 0x82AC: 0xAD97, //HANGUL SYLLABLE KIYEOK WEO RIEULHIEUH - 0x82AD: 0xAD98, //HANGUL SYLLABLE KIYEOK WEO MIEUM - 0x82AE: 0xAD99, //HANGUL SYLLABLE KIYEOK WEO PIEUP - 0x82AF: 0xAD9A, //HANGUL SYLLABLE KIYEOK WEO PIEUPSIOS - 0x82B0: 0xAD9B, //HANGUL SYLLABLE KIYEOK WEO SIOS - 0x82B1: 0xAD9E, //HANGUL SYLLABLE KIYEOK WEO CIEUC - 0x82B2: 0xAD9F, //HANGUL SYLLABLE KIYEOK WEO CHIEUCH - 0x82B3: 0xADA0, //HANGUL SYLLABLE KIYEOK WEO KHIEUKH - 0x82B4: 0xADA1, //HANGUL SYLLABLE KIYEOK WEO THIEUTH - 0x82B5: 0xADA2, //HANGUL SYLLABLE KIYEOK WEO PHIEUPH - 0x82B6: 0xADA3, //HANGUL SYLLABLE KIYEOK WEO HIEUH - 0x82B7: 0xADA5, //HANGUL SYLLABLE KIYEOK WE KIYEOK - 0x82B8: 0xADA6, //HANGUL SYLLABLE KIYEOK WE SSANGKIYEOK - 0x82B9: 0xADA7, //HANGUL SYLLABLE KIYEOK WE KIYEOKSIOS - 0x82BA: 0xADA8, //HANGUL SYLLABLE KIYEOK WE NIEUN - 0x82BB: 0xADA9, //HANGUL SYLLABLE KIYEOK WE NIEUNCIEUC - 0x82BC: 0xADAA, //HANGUL SYLLABLE KIYEOK WE NIEUNHIEUH - 0x82BD: 0xADAB, //HANGUL SYLLABLE KIYEOK WE TIKEUT - 0x82BE: 0xADAC, //HANGUL SYLLABLE KIYEOK WE RIEUL - 0x82BF: 0xADAD, //HANGUL SYLLABLE KIYEOK WE RIEULKIYEOK - 0x82C0: 0xADAE, //HANGUL SYLLABLE KIYEOK WE RIEULMIEUM - 0x82C1: 0xADAF, //HANGUL SYLLABLE KIYEOK WE RIEULPIEUP - 0x82C2: 0xADB0, //HANGUL SYLLABLE KIYEOK WE RIEULSIOS - 0x82C3: 0xADB1, //HANGUL SYLLABLE KIYEOK WE RIEULTHIEUTH - 0x82C4: 0xADB2, //HANGUL SYLLABLE KIYEOK WE RIEULPHIEUPH - 0x82C5: 0xADB3, //HANGUL SYLLABLE KIYEOK WE RIEULHIEUH - 0x82C6: 0xADB4, //HANGUL SYLLABLE KIYEOK WE MIEUM - 0x82C7: 0xADB5, //HANGUL SYLLABLE KIYEOK WE PIEUP - 0x82C8: 0xADB6, //HANGUL SYLLABLE KIYEOK WE PIEUPSIOS - 0x82C9: 0xADB8, //HANGUL SYLLABLE KIYEOK WE SSANGSIOS - 0x82CA: 0xADB9, //HANGUL SYLLABLE KIYEOK WE IEUNG - 0x82CB: 0xADBA, //HANGUL SYLLABLE KIYEOK WE CIEUC - 0x82CC: 0xADBB, //HANGUL SYLLABLE KIYEOK WE CHIEUCH - 0x82CD: 0xADBC, //HANGUL SYLLABLE KIYEOK WE KHIEUKH - 0x82CE: 0xADBD, //HANGUL SYLLABLE KIYEOK WE THIEUTH - 0x82CF: 0xADBE, //HANGUL SYLLABLE KIYEOK WE PHIEUPH - 0x82D0: 0xADBF, //HANGUL SYLLABLE KIYEOK WE HIEUH - 0x82D1: 0xADC2, //HANGUL SYLLABLE KIYEOK WI SSANGKIYEOK - 0x82D2: 0xADC3, //HANGUL SYLLABLE KIYEOK WI KIYEOKSIOS - 0x82D3: 0xADC5, //HANGUL SYLLABLE KIYEOK WI NIEUNCIEUC - 0x82D4: 0xADC6, //HANGUL SYLLABLE KIYEOK WI NIEUNHIEUH - 0x82D5: 0xADC7, //HANGUL SYLLABLE KIYEOK WI TIKEUT - 0x82D6: 0xADC9, //HANGUL SYLLABLE KIYEOK WI RIEULKIYEOK - 0x82D7: 0xADCA, //HANGUL SYLLABLE KIYEOK WI RIEULMIEUM - 0x82D8: 0xADCB, //HANGUL SYLLABLE KIYEOK WI RIEULPIEUP - 0x82D9: 0xADCC, //HANGUL SYLLABLE KIYEOK WI RIEULSIOS - 0x82DA: 0xADCD, //HANGUL SYLLABLE KIYEOK WI RIEULTHIEUTH - 0x82DB: 0xADCE, //HANGUL SYLLABLE KIYEOK WI RIEULPHIEUPH - 0x82DC: 0xADCF, //HANGUL SYLLABLE KIYEOK WI RIEULHIEUH - 0x82DD: 0xADD2, //HANGUL SYLLABLE KIYEOK WI PIEUPSIOS - 0x82DE: 0xADD4, //HANGUL SYLLABLE KIYEOK WI SSANGSIOS - 0x82DF: 0xADD5, //HANGUL SYLLABLE KIYEOK WI IEUNG - 0x82E0: 0xADD6, //HANGUL SYLLABLE KIYEOK WI CIEUC - 0x82E1: 0xADD7, //HANGUL SYLLABLE KIYEOK WI CHIEUCH - 0x82E2: 0xADD8, //HANGUL SYLLABLE KIYEOK WI KHIEUKH - 0x82E3: 0xADD9, //HANGUL SYLLABLE KIYEOK WI THIEUTH - 0x82E4: 0xADDA, //HANGUL SYLLABLE KIYEOK WI PHIEUPH - 0x82E5: 0xADDB, //HANGUL SYLLABLE KIYEOK WI HIEUH - 0x82E6: 0xADDD, //HANGUL SYLLABLE KIYEOK YU KIYEOK - 0x82E7: 0xADDE, //HANGUL SYLLABLE KIYEOK YU SSANGKIYEOK - 0x82E8: 0xADDF, //HANGUL SYLLABLE KIYEOK YU KIYEOKSIOS - 0x82E9: 0xADE1, //HANGUL SYLLABLE KIYEOK YU NIEUNCIEUC - 0x82EA: 0xADE2, //HANGUL SYLLABLE KIYEOK YU NIEUNHIEUH - 0x82EB: 0xADE3, //HANGUL SYLLABLE KIYEOK YU TIKEUT - 0x82EC: 0xADE5, //HANGUL SYLLABLE KIYEOK YU RIEULKIYEOK - 0x82ED: 0xADE6, //HANGUL SYLLABLE KIYEOK YU RIEULMIEUM - 0x82EE: 0xADE7, //HANGUL SYLLABLE KIYEOK YU RIEULPIEUP - 0x82EF: 0xADE8, //HANGUL SYLLABLE KIYEOK YU RIEULSIOS - 0x82F0: 0xADE9, //HANGUL SYLLABLE KIYEOK YU RIEULTHIEUTH - 0x82F1: 0xADEA, //HANGUL SYLLABLE KIYEOK YU RIEULPHIEUPH - 0x82F2: 0xADEB, //HANGUL SYLLABLE KIYEOK YU RIEULHIEUH - 0x82F3: 0xADEC, //HANGUL SYLLABLE KIYEOK YU MIEUM - 0x82F4: 0xADED, //HANGUL SYLLABLE KIYEOK YU PIEUP - 0x82F5: 0xADEE, //HANGUL SYLLABLE KIYEOK YU PIEUPSIOS - 0x82F6: 0xADEF, //HANGUL SYLLABLE KIYEOK YU SIOS - 0x82F7: 0xADF0, //HANGUL SYLLABLE KIYEOK YU SSANGSIOS - 0x82F8: 0xADF1, //HANGUL SYLLABLE KIYEOK YU IEUNG - 0x82F9: 0xADF2, //HANGUL SYLLABLE KIYEOK YU CIEUC - 0x82FA: 0xADF3, //HANGUL SYLLABLE KIYEOK YU CHIEUCH - 0x82FB: 0xADF4, //HANGUL SYLLABLE KIYEOK YU KHIEUKH - 0x82FC: 0xADF5, //HANGUL SYLLABLE KIYEOK YU THIEUTH - 0x82FD: 0xADF6, //HANGUL SYLLABLE KIYEOK YU PHIEUPH - 0x82FE: 0xADF7, //HANGUL SYLLABLE KIYEOK YU HIEUH - 0x8341: 0xADFA, //HANGUL SYLLABLE KIYEOK EU SSANGKIYEOK - 0x8342: 0xADFB, //HANGUL SYLLABLE KIYEOK EU KIYEOKSIOS - 0x8343: 0xADFD, //HANGUL SYLLABLE KIYEOK EU NIEUNCIEUC - 0x8344: 0xADFE, //HANGUL SYLLABLE KIYEOK EU NIEUNHIEUH - 0x8345: 0xAE02, //HANGUL SYLLABLE KIYEOK EU RIEULMIEUM - 0x8346: 0xAE03, //HANGUL SYLLABLE KIYEOK EU RIEULPIEUP - 0x8347: 0xAE04, //HANGUL SYLLABLE KIYEOK EU RIEULSIOS - 0x8348: 0xAE05, //HANGUL SYLLABLE KIYEOK EU RIEULTHIEUTH - 0x8349: 0xAE06, //HANGUL SYLLABLE KIYEOK EU RIEULPHIEUPH - 0x834A: 0xAE07, //HANGUL SYLLABLE KIYEOK EU RIEULHIEUH - 0x834B: 0xAE0A, //HANGUL SYLLABLE KIYEOK EU PIEUPSIOS - 0x834C: 0xAE0C, //HANGUL SYLLABLE KIYEOK EU SSANGSIOS - 0x834D: 0xAE0E, //HANGUL SYLLABLE KIYEOK EU CIEUC - 0x834E: 0xAE0F, //HANGUL SYLLABLE KIYEOK EU CHIEUCH - 0x834F: 0xAE10, //HANGUL SYLLABLE KIYEOK EU KHIEUKH - 0x8350: 0xAE11, //HANGUL SYLLABLE KIYEOK EU THIEUTH - 0x8351: 0xAE12, //HANGUL SYLLABLE KIYEOK EU PHIEUPH - 0x8352: 0xAE13, //HANGUL SYLLABLE KIYEOK EU HIEUH - 0x8353: 0xAE15, //HANGUL SYLLABLE KIYEOK YI KIYEOK - 0x8354: 0xAE16, //HANGUL SYLLABLE KIYEOK YI SSANGKIYEOK - 0x8355: 0xAE17, //HANGUL SYLLABLE KIYEOK YI KIYEOKSIOS - 0x8356: 0xAE18, //HANGUL SYLLABLE KIYEOK YI NIEUN - 0x8357: 0xAE19, //HANGUL SYLLABLE KIYEOK YI NIEUNCIEUC - 0x8358: 0xAE1A, //HANGUL SYLLABLE KIYEOK YI NIEUNHIEUH - 0x8359: 0xAE1B, //HANGUL SYLLABLE KIYEOK YI TIKEUT - 0x835A: 0xAE1C, //HANGUL SYLLABLE KIYEOK YI RIEUL - 0x8361: 0xAE1D, //HANGUL SYLLABLE KIYEOK YI RIEULKIYEOK - 0x8362: 0xAE1E, //HANGUL SYLLABLE KIYEOK YI RIEULMIEUM - 0x8363: 0xAE1F, //HANGUL SYLLABLE KIYEOK YI RIEULPIEUP - 0x8364: 0xAE20, //HANGUL SYLLABLE KIYEOK YI RIEULSIOS - 0x8365: 0xAE21, //HANGUL SYLLABLE KIYEOK YI RIEULTHIEUTH - 0x8366: 0xAE22, //HANGUL SYLLABLE KIYEOK YI RIEULPHIEUPH - 0x8367: 0xAE23, //HANGUL SYLLABLE KIYEOK YI RIEULHIEUH - 0x8368: 0xAE24, //HANGUL SYLLABLE KIYEOK YI MIEUM - 0x8369: 0xAE25, //HANGUL SYLLABLE KIYEOK YI PIEUP - 0x836A: 0xAE26, //HANGUL SYLLABLE KIYEOK YI PIEUPSIOS - 0x836B: 0xAE27, //HANGUL SYLLABLE KIYEOK YI SIOS - 0x836C: 0xAE28, //HANGUL SYLLABLE KIYEOK YI SSANGSIOS - 0x836D: 0xAE29, //HANGUL SYLLABLE KIYEOK YI IEUNG - 0x836E: 0xAE2A, //HANGUL SYLLABLE KIYEOK YI CIEUC - 0x836F: 0xAE2B, //HANGUL SYLLABLE KIYEOK YI CHIEUCH - 0x8370: 0xAE2C, //HANGUL SYLLABLE KIYEOK YI KHIEUKH - 0x8371: 0xAE2D, //HANGUL SYLLABLE KIYEOK YI THIEUTH - 0x8372: 0xAE2E, //HANGUL SYLLABLE KIYEOK YI PHIEUPH - 0x8373: 0xAE2F, //HANGUL SYLLABLE KIYEOK YI HIEUH - 0x8374: 0xAE32, //HANGUL SYLLABLE KIYEOK I SSANGKIYEOK - 0x8375: 0xAE33, //HANGUL SYLLABLE KIYEOK I KIYEOKSIOS - 0x8376: 0xAE35, //HANGUL SYLLABLE KIYEOK I NIEUNCIEUC - 0x8377: 0xAE36, //HANGUL SYLLABLE KIYEOK I NIEUNHIEUH - 0x8378: 0xAE39, //HANGUL SYLLABLE KIYEOK I RIEULKIYEOK - 0x8379: 0xAE3B, //HANGUL SYLLABLE KIYEOK I RIEULPIEUP - 0x837A: 0xAE3C, //HANGUL SYLLABLE KIYEOK I RIEULSIOS - 0x8381: 0xAE3D, //HANGUL SYLLABLE KIYEOK I RIEULTHIEUTH - 0x8382: 0xAE3E, //HANGUL SYLLABLE KIYEOK I RIEULPHIEUPH - 0x8383: 0xAE3F, //HANGUL SYLLABLE KIYEOK I RIEULHIEUH - 0x8384: 0xAE42, //HANGUL SYLLABLE KIYEOK I PIEUPSIOS - 0x8385: 0xAE44, //HANGUL SYLLABLE KIYEOK I SSANGSIOS - 0x8386: 0xAE47, //HANGUL SYLLABLE KIYEOK I CHIEUCH - 0x8387: 0xAE48, //HANGUL SYLLABLE KIYEOK I KHIEUKH - 0x8388: 0xAE49, //HANGUL SYLLABLE KIYEOK I THIEUTH - 0x8389: 0xAE4B, //HANGUL SYLLABLE KIYEOK I HIEUH - 0x838A: 0xAE4F, //HANGUL SYLLABLE SSANGKIYEOK A KIYEOKSIOS - 0x838B: 0xAE51, //HANGUL SYLLABLE SSANGKIYEOK A NIEUNCIEUC - 0x838C: 0xAE52, //HANGUL SYLLABLE SSANGKIYEOK A NIEUNHIEUH - 0x838D: 0xAE53, //HANGUL SYLLABLE SSANGKIYEOK A TIKEUT - 0x838E: 0xAE55, //HANGUL SYLLABLE SSANGKIYEOK A RIEULKIYEOK - 0x838F: 0xAE57, //HANGUL SYLLABLE SSANGKIYEOK A RIEULPIEUP - 0x8390: 0xAE58, //HANGUL SYLLABLE SSANGKIYEOK A RIEULSIOS - 0x8391: 0xAE59, //HANGUL SYLLABLE SSANGKIYEOK A RIEULTHIEUTH - 0x8392: 0xAE5A, //HANGUL SYLLABLE SSANGKIYEOK A RIEULPHIEUPH - 0x8393: 0xAE5B, //HANGUL SYLLABLE SSANGKIYEOK A RIEULHIEUH - 0x8394: 0xAE5E, //HANGUL SYLLABLE SSANGKIYEOK A PIEUPSIOS - 0x8395: 0xAE62, //HANGUL SYLLABLE SSANGKIYEOK A CIEUC - 0x8396: 0xAE63, //HANGUL SYLLABLE SSANGKIYEOK A CHIEUCH - 0x8397: 0xAE64, //HANGUL SYLLABLE SSANGKIYEOK A KHIEUKH - 0x8398: 0xAE66, //HANGUL SYLLABLE SSANGKIYEOK A PHIEUPH - 0x8399: 0xAE67, //HANGUL SYLLABLE SSANGKIYEOK A HIEUH - 0x839A: 0xAE6A, //HANGUL SYLLABLE SSANGKIYEOK AE SSANGKIYEOK - 0x839B: 0xAE6B, //HANGUL SYLLABLE SSANGKIYEOK AE KIYEOKSIOS - 0x839C: 0xAE6D, //HANGUL SYLLABLE SSANGKIYEOK AE NIEUNCIEUC - 0x839D: 0xAE6E, //HANGUL SYLLABLE SSANGKIYEOK AE NIEUNHIEUH - 0x839E: 0xAE6F, //HANGUL SYLLABLE SSANGKIYEOK AE TIKEUT - 0x839F: 0xAE71, //HANGUL SYLLABLE SSANGKIYEOK AE RIEULKIYEOK - 0x83A0: 0xAE72, //HANGUL SYLLABLE SSANGKIYEOK AE RIEULMIEUM - 0x83A1: 0xAE73, //HANGUL SYLLABLE SSANGKIYEOK AE RIEULPIEUP - 0x83A2: 0xAE74, //HANGUL SYLLABLE SSANGKIYEOK AE RIEULSIOS - 0x83A3: 0xAE75, //HANGUL SYLLABLE SSANGKIYEOK AE RIEULTHIEUTH - 0x83A4: 0xAE76, //HANGUL SYLLABLE SSANGKIYEOK AE RIEULPHIEUPH - 0x83A5: 0xAE77, //HANGUL SYLLABLE SSANGKIYEOK AE RIEULHIEUH - 0x83A6: 0xAE7A, //HANGUL SYLLABLE SSANGKIYEOK AE PIEUPSIOS - 0x83A7: 0xAE7E, //HANGUL SYLLABLE SSANGKIYEOK AE CIEUC - 0x83A8: 0xAE7F, //HANGUL SYLLABLE SSANGKIYEOK AE CHIEUCH - 0x83A9: 0xAE80, //HANGUL SYLLABLE SSANGKIYEOK AE KHIEUKH - 0x83AA: 0xAE81, //HANGUL SYLLABLE SSANGKIYEOK AE THIEUTH - 0x83AB: 0xAE82, //HANGUL SYLLABLE SSANGKIYEOK AE PHIEUPH - 0x83AC: 0xAE83, //HANGUL SYLLABLE SSANGKIYEOK AE HIEUH - 0x83AD: 0xAE86, //HANGUL SYLLABLE SSANGKIYEOK YA SSANGKIYEOK - 0x83AE: 0xAE87, //HANGUL SYLLABLE SSANGKIYEOK YA KIYEOKSIOS - 0x83AF: 0xAE88, //HANGUL SYLLABLE SSANGKIYEOK YA NIEUN - 0x83B0: 0xAE89, //HANGUL SYLLABLE SSANGKIYEOK YA NIEUNCIEUC - 0x83B1: 0xAE8A, //HANGUL SYLLABLE SSANGKIYEOK YA NIEUNHIEUH - 0x83B2: 0xAE8B, //HANGUL SYLLABLE SSANGKIYEOK YA TIKEUT - 0x83B3: 0xAE8D, //HANGUL SYLLABLE SSANGKIYEOK YA RIEULKIYEOK - 0x83B4: 0xAE8E, //HANGUL SYLLABLE SSANGKIYEOK YA RIEULMIEUM - 0x83B5: 0xAE8F, //HANGUL SYLLABLE SSANGKIYEOK YA RIEULPIEUP - 0x83B6: 0xAE90, //HANGUL SYLLABLE SSANGKIYEOK YA RIEULSIOS - 0x83B7: 0xAE91, //HANGUL SYLLABLE SSANGKIYEOK YA RIEULTHIEUTH - 0x83B8: 0xAE92, //HANGUL SYLLABLE SSANGKIYEOK YA RIEULPHIEUPH - 0x83B9: 0xAE93, //HANGUL SYLLABLE SSANGKIYEOK YA RIEULHIEUH - 0x83BA: 0xAE94, //HANGUL SYLLABLE SSANGKIYEOK YA MIEUM - 0x83BB: 0xAE95, //HANGUL SYLLABLE SSANGKIYEOK YA PIEUP - 0x83BC: 0xAE96, //HANGUL SYLLABLE SSANGKIYEOK YA PIEUPSIOS - 0x83BD: 0xAE97, //HANGUL SYLLABLE SSANGKIYEOK YA SIOS - 0x83BE: 0xAE98, //HANGUL SYLLABLE SSANGKIYEOK YA SSANGSIOS - 0x83BF: 0xAE99, //HANGUL SYLLABLE SSANGKIYEOK YA IEUNG - 0x83C0: 0xAE9A, //HANGUL SYLLABLE SSANGKIYEOK YA CIEUC - 0x83C1: 0xAE9B, //HANGUL SYLLABLE SSANGKIYEOK YA CHIEUCH - 0x83C2: 0xAE9C, //HANGUL SYLLABLE SSANGKIYEOK YA KHIEUKH - 0x83C3: 0xAE9D, //HANGUL SYLLABLE SSANGKIYEOK YA THIEUTH - 0x83C4: 0xAE9E, //HANGUL SYLLABLE SSANGKIYEOK YA PHIEUPH - 0x83C5: 0xAE9F, //HANGUL SYLLABLE SSANGKIYEOK YA HIEUH - 0x83C6: 0xAEA0, //HANGUL SYLLABLE SSANGKIYEOK YAE - 0x83C7: 0xAEA1, //HANGUL SYLLABLE SSANGKIYEOK YAE KIYEOK - 0x83C8: 0xAEA2, //HANGUL SYLLABLE SSANGKIYEOK YAE SSANGKIYEOK - 0x83C9: 0xAEA3, //HANGUL SYLLABLE SSANGKIYEOK YAE KIYEOKSIOS - 0x83CA: 0xAEA4, //HANGUL SYLLABLE SSANGKIYEOK YAE NIEUN - 0x83CB: 0xAEA5, //HANGUL SYLLABLE SSANGKIYEOK YAE NIEUNCIEUC - 0x83CC: 0xAEA6, //HANGUL SYLLABLE SSANGKIYEOK YAE NIEUNHIEUH - 0x83CD: 0xAEA7, //HANGUL SYLLABLE SSANGKIYEOK YAE TIKEUT - 0x83CE: 0xAEA8, //HANGUL SYLLABLE SSANGKIYEOK YAE RIEUL - 0x83CF: 0xAEA9, //HANGUL SYLLABLE SSANGKIYEOK YAE RIEULKIYEOK - 0x83D0: 0xAEAA, //HANGUL SYLLABLE SSANGKIYEOK YAE RIEULMIEUM - 0x83D1: 0xAEAB, //HANGUL SYLLABLE SSANGKIYEOK YAE RIEULPIEUP - 0x83D2: 0xAEAC, //HANGUL SYLLABLE SSANGKIYEOK YAE RIEULSIOS - 0x83D3: 0xAEAD, //HANGUL SYLLABLE SSANGKIYEOK YAE RIEULTHIEUTH - 0x83D4: 0xAEAE, //HANGUL SYLLABLE SSANGKIYEOK YAE RIEULPHIEUPH - 0x83D5: 0xAEAF, //HANGUL SYLLABLE SSANGKIYEOK YAE RIEULHIEUH - 0x83D6: 0xAEB0, //HANGUL SYLLABLE SSANGKIYEOK YAE MIEUM - 0x83D7: 0xAEB1, //HANGUL SYLLABLE SSANGKIYEOK YAE PIEUP - 0x83D8: 0xAEB2, //HANGUL SYLLABLE SSANGKIYEOK YAE PIEUPSIOS - 0x83D9: 0xAEB3, //HANGUL SYLLABLE SSANGKIYEOK YAE SIOS - 0x83DA: 0xAEB4, //HANGUL SYLLABLE SSANGKIYEOK YAE SSANGSIOS - 0x83DB: 0xAEB5, //HANGUL SYLLABLE SSANGKIYEOK YAE IEUNG - 0x83DC: 0xAEB6, //HANGUL SYLLABLE SSANGKIYEOK YAE CIEUC - 0x83DD: 0xAEB7, //HANGUL SYLLABLE SSANGKIYEOK YAE CHIEUCH - 0x83DE: 0xAEB8, //HANGUL SYLLABLE SSANGKIYEOK YAE KHIEUKH - 0x83DF: 0xAEB9, //HANGUL SYLLABLE SSANGKIYEOK YAE THIEUTH - 0x83E0: 0xAEBA, //HANGUL SYLLABLE SSANGKIYEOK YAE PHIEUPH - 0x83E1: 0xAEBB, //HANGUL SYLLABLE SSANGKIYEOK YAE HIEUH - 0x83E2: 0xAEBF, //HANGUL SYLLABLE SSANGKIYEOK EO KIYEOKSIOS - 0x83E3: 0xAEC1, //HANGUL SYLLABLE SSANGKIYEOK EO NIEUNCIEUC - 0x83E4: 0xAEC2, //HANGUL SYLLABLE SSANGKIYEOK EO NIEUNHIEUH - 0x83E5: 0xAEC3, //HANGUL SYLLABLE SSANGKIYEOK EO TIKEUT - 0x83E6: 0xAEC5, //HANGUL SYLLABLE SSANGKIYEOK EO RIEULKIYEOK - 0x83E7: 0xAEC6, //HANGUL SYLLABLE SSANGKIYEOK EO RIEULMIEUM - 0x83E8: 0xAEC7, //HANGUL SYLLABLE SSANGKIYEOK EO RIEULPIEUP - 0x83E9: 0xAEC8, //HANGUL SYLLABLE SSANGKIYEOK EO RIEULSIOS - 0x83EA: 0xAEC9, //HANGUL SYLLABLE SSANGKIYEOK EO RIEULTHIEUTH - 0x83EB: 0xAECA, //HANGUL SYLLABLE SSANGKIYEOK EO RIEULPHIEUPH - 0x83EC: 0xAECB, //HANGUL SYLLABLE SSANGKIYEOK EO RIEULHIEUH - 0x83ED: 0xAECE, //HANGUL SYLLABLE SSANGKIYEOK EO PIEUPSIOS - 0x83EE: 0xAED2, //HANGUL SYLLABLE SSANGKIYEOK EO CIEUC - 0x83EF: 0xAED3, //HANGUL SYLLABLE SSANGKIYEOK EO CHIEUCH - 0x83F0: 0xAED4, //HANGUL SYLLABLE SSANGKIYEOK EO KHIEUKH - 0x83F1: 0xAED5, //HANGUL SYLLABLE SSANGKIYEOK EO THIEUTH - 0x83F2: 0xAED6, //HANGUL SYLLABLE SSANGKIYEOK EO PHIEUPH - 0x83F3: 0xAED7, //HANGUL SYLLABLE SSANGKIYEOK EO HIEUH - 0x83F4: 0xAEDA, //HANGUL SYLLABLE SSANGKIYEOK E SSANGKIYEOK - 0x83F5: 0xAEDB, //HANGUL SYLLABLE SSANGKIYEOK E KIYEOKSIOS - 0x83F6: 0xAEDD, //HANGUL SYLLABLE SSANGKIYEOK E NIEUNCIEUC - 0x83F7: 0xAEDE, //HANGUL SYLLABLE SSANGKIYEOK E NIEUNHIEUH - 0x83F8: 0xAEDF, //HANGUL SYLLABLE SSANGKIYEOK E TIKEUT - 0x83F9: 0xAEE0, //HANGUL SYLLABLE SSANGKIYEOK E RIEUL - 0x83FA: 0xAEE1, //HANGUL SYLLABLE SSANGKIYEOK E RIEULKIYEOK - 0x83FB: 0xAEE2, //HANGUL SYLLABLE SSANGKIYEOK E RIEULMIEUM - 0x83FC: 0xAEE3, //HANGUL SYLLABLE SSANGKIYEOK E RIEULPIEUP - 0x83FD: 0xAEE4, //HANGUL SYLLABLE SSANGKIYEOK E RIEULSIOS - 0x83FE: 0xAEE5, //HANGUL SYLLABLE SSANGKIYEOK E RIEULTHIEUTH - 0x8441: 0xAEE6, //HANGUL SYLLABLE SSANGKIYEOK E RIEULPHIEUPH - 0x8442: 0xAEE7, //HANGUL SYLLABLE SSANGKIYEOK E RIEULHIEUH - 0x8443: 0xAEE9, //HANGUL SYLLABLE SSANGKIYEOK E PIEUP - 0x8444: 0xAEEA, //HANGUL SYLLABLE SSANGKIYEOK E PIEUPSIOS - 0x8445: 0xAEEC, //HANGUL SYLLABLE SSANGKIYEOK E SSANGSIOS - 0x8446: 0xAEEE, //HANGUL SYLLABLE SSANGKIYEOK E CIEUC - 0x8447: 0xAEEF, //HANGUL SYLLABLE SSANGKIYEOK E CHIEUCH - 0x8448: 0xAEF0, //HANGUL SYLLABLE SSANGKIYEOK E KHIEUKH - 0x8449: 0xAEF1, //HANGUL SYLLABLE SSANGKIYEOK E THIEUTH - 0x844A: 0xAEF2, //HANGUL SYLLABLE SSANGKIYEOK E PHIEUPH - 0x844B: 0xAEF3, //HANGUL SYLLABLE SSANGKIYEOK E HIEUH - 0x844C: 0xAEF5, //HANGUL SYLLABLE SSANGKIYEOK YEO KIYEOK - 0x844D: 0xAEF6, //HANGUL SYLLABLE SSANGKIYEOK YEO SSANGKIYEOK - 0x844E: 0xAEF7, //HANGUL SYLLABLE SSANGKIYEOK YEO KIYEOKSIOS - 0x844F: 0xAEF9, //HANGUL SYLLABLE SSANGKIYEOK YEO NIEUNCIEUC - 0x8450: 0xAEFA, //HANGUL SYLLABLE SSANGKIYEOK YEO NIEUNHIEUH - 0x8451: 0xAEFB, //HANGUL SYLLABLE SSANGKIYEOK YEO TIKEUT - 0x8452: 0xAEFD, //HANGUL SYLLABLE SSANGKIYEOK YEO RIEULKIYEOK - 0x8453: 0xAEFE, //HANGUL SYLLABLE SSANGKIYEOK YEO RIEULMIEUM - 0x8454: 0xAEFF, //HANGUL SYLLABLE SSANGKIYEOK YEO RIEULPIEUP - 0x8455: 0xAF00, //HANGUL SYLLABLE SSANGKIYEOK YEO RIEULSIOS - 0x8456: 0xAF01, //HANGUL SYLLABLE SSANGKIYEOK YEO RIEULTHIEUTH - 0x8457: 0xAF02, //HANGUL SYLLABLE SSANGKIYEOK YEO RIEULPHIEUPH - 0x8458: 0xAF03, //HANGUL SYLLABLE SSANGKIYEOK YEO RIEULHIEUH - 0x8459: 0xAF04, //HANGUL SYLLABLE SSANGKIYEOK YEO MIEUM - 0x845A: 0xAF05, //HANGUL SYLLABLE SSANGKIYEOK YEO PIEUP - 0x8461: 0xAF06, //HANGUL SYLLABLE SSANGKIYEOK YEO PIEUPSIOS - 0x8462: 0xAF09, //HANGUL SYLLABLE SSANGKIYEOK YEO IEUNG - 0x8463: 0xAF0A, //HANGUL SYLLABLE SSANGKIYEOK YEO CIEUC - 0x8464: 0xAF0B, //HANGUL SYLLABLE SSANGKIYEOK YEO CHIEUCH - 0x8465: 0xAF0C, //HANGUL SYLLABLE SSANGKIYEOK YEO KHIEUKH - 0x8466: 0xAF0E, //HANGUL SYLLABLE SSANGKIYEOK YEO PHIEUPH - 0x8467: 0xAF0F, //HANGUL SYLLABLE SSANGKIYEOK YEO HIEUH - 0x8468: 0xAF11, //HANGUL SYLLABLE SSANGKIYEOK YE KIYEOK - 0x8469: 0xAF12, //HANGUL SYLLABLE SSANGKIYEOK YE SSANGKIYEOK - 0x846A: 0xAF13, //HANGUL SYLLABLE SSANGKIYEOK YE KIYEOKSIOS - 0x846B: 0xAF14, //HANGUL SYLLABLE SSANGKIYEOK YE NIEUN - 0x846C: 0xAF15, //HANGUL SYLLABLE SSANGKIYEOK YE NIEUNCIEUC - 0x846D: 0xAF16, //HANGUL SYLLABLE SSANGKIYEOK YE NIEUNHIEUH - 0x846E: 0xAF17, //HANGUL SYLLABLE SSANGKIYEOK YE TIKEUT - 0x846F: 0xAF18, //HANGUL SYLLABLE SSANGKIYEOK YE RIEUL - 0x8470: 0xAF19, //HANGUL SYLLABLE SSANGKIYEOK YE RIEULKIYEOK - 0x8471: 0xAF1A, //HANGUL SYLLABLE SSANGKIYEOK YE RIEULMIEUM - 0x8472: 0xAF1B, //HANGUL SYLLABLE SSANGKIYEOK YE RIEULPIEUP - 0x8473: 0xAF1C, //HANGUL SYLLABLE SSANGKIYEOK YE RIEULSIOS - 0x8474: 0xAF1D, //HANGUL SYLLABLE SSANGKIYEOK YE RIEULTHIEUTH - 0x8475: 0xAF1E, //HANGUL SYLLABLE SSANGKIYEOK YE RIEULPHIEUPH - 0x8476: 0xAF1F, //HANGUL SYLLABLE SSANGKIYEOK YE RIEULHIEUH - 0x8477: 0xAF20, //HANGUL SYLLABLE SSANGKIYEOK YE MIEUM - 0x8478: 0xAF21, //HANGUL SYLLABLE SSANGKIYEOK YE PIEUP - 0x8479: 0xAF22, //HANGUL SYLLABLE SSANGKIYEOK YE PIEUPSIOS - 0x847A: 0xAF23, //HANGUL SYLLABLE SSANGKIYEOK YE SIOS - 0x8481: 0xAF24, //HANGUL SYLLABLE SSANGKIYEOK YE SSANGSIOS - 0x8482: 0xAF25, //HANGUL SYLLABLE SSANGKIYEOK YE IEUNG - 0x8483: 0xAF26, //HANGUL SYLLABLE SSANGKIYEOK YE CIEUC - 0x8484: 0xAF27, //HANGUL SYLLABLE SSANGKIYEOK YE CHIEUCH - 0x8485: 0xAF28, //HANGUL SYLLABLE SSANGKIYEOK YE KHIEUKH - 0x8486: 0xAF29, //HANGUL SYLLABLE SSANGKIYEOK YE THIEUTH - 0x8487: 0xAF2A, //HANGUL SYLLABLE SSANGKIYEOK YE PHIEUPH - 0x8488: 0xAF2B, //HANGUL SYLLABLE SSANGKIYEOK YE HIEUH - 0x8489: 0xAF2E, //HANGUL SYLLABLE SSANGKIYEOK O SSANGKIYEOK - 0x848A: 0xAF2F, //HANGUL SYLLABLE SSANGKIYEOK O KIYEOKSIOS - 0x848B: 0xAF31, //HANGUL SYLLABLE SSANGKIYEOK O NIEUNCIEUC - 0x848C: 0xAF33, //HANGUL SYLLABLE SSANGKIYEOK O TIKEUT - 0x848D: 0xAF35, //HANGUL SYLLABLE SSANGKIYEOK O RIEULKIYEOK - 0x848E: 0xAF36, //HANGUL SYLLABLE SSANGKIYEOK O RIEULMIEUM - 0x848F: 0xAF37, //HANGUL SYLLABLE SSANGKIYEOK O RIEULPIEUP - 0x8490: 0xAF38, //HANGUL SYLLABLE SSANGKIYEOK O RIEULSIOS - 0x8491: 0xAF39, //HANGUL SYLLABLE SSANGKIYEOK O RIEULTHIEUTH - 0x8492: 0xAF3A, //HANGUL SYLLABLE SSANGKIYEOK O RIEULPHIEUPH - 0x8493: 0xAF3B, //HANGUL SYLLABLE SSANGKIYEOK O RIEULHIEUH - 0x8494: 0xAF3E, //HANGUL SYLLABLE SSANGKIYEOK O PIEUPSIOS - 0x8495: 0xAF40, //HANGUL SYLLABLE SSANGKIYEOK O SSANGSIOS - 0x8496: 0xAF44, //HANGUL SYLLABLE SSANGKIYEOK O KHIEUKH - 0x8497: 0xAF45, //HANGUL SYLLABLE SSANGKIYEOK O THIEUTH - 0x8498: 0xAF46, //HANGUL SYLLABLE SSANGKIYEOK O PHIEUPH - 0x8499: 0xAF47, //HANGUL SYLLABLE SSANGKIYEOK O HIEUH - 0x849A: 0xAF4A, //HANGUL SYLLABLE SSANGKIYEOK WA SSANGKIYEOK - 0x849B: 0xAF4B, //HANGUL SYLLABLE SSANGKIYEOK WA KIYEOKSIOS - 0x849C: 0xAF4C, //HANGUL SYLLABLE SSANGKIYEOK WA NIEUN - 0x849D: 0xAF4D, //HANGUL SYLLABLE SSANGKIYEOK WA NIEUNCIEUC - 0x849E: 0xAF4E, //HANGUL SYLLABLE SSANGKIYEOK WA NIEUNHIEUH - 0x849F: 0xAF4F, //HANGUL SYLLABLE SSANGKIYEOK WA TIKEUT - 0x84A0: 0xAF51, //HANGUL SYLLABLE SSANGKIYEOK WA RIEULKIYEOK - 0x84A1: 0xAF52, //HANGUL SYLLABLE SSANGKIYEOK WA RIEULMIEUM - 0x84A2: 0xAF53, //HANGUL SYLLABLE SSANGKIYEOK WA RIEULPIEUP - 0x84A3: 0xAF54, //HANGUL SYLLABLE SSANGKIYEOK WA RIEULSIOS - 0x84A4: 0xAF55, //HANGUL SYLLABLE SSANGKIYEOK WA RIEULTHIEUTH - 0x84A5: 0xAF56, //HANGUL SYLLABLE SSANGKIYEOK WA RIEULPHIEUPH - 0x84A6: 0xAF57, //HANGUL SYLLABLE SSANGKIYEOK WA RIEULHIEUH - 0x84A7: 0xAF58, //HANGUL SYLLABLE SSANGKIYEOK WA MIEUM - 0x84A8: 0xAF59, //HANGUL SYLLABLE SSANGKIYEOK WA PIEUP - 0x84A9: 0xAF5A, //HANGUL SYLLABLE SSANGKIYEOK WA PIEUPSIOS - 0x84AA: 0xAF5B, //HANGUL SYLLABLE SSANGKIYEOK WA SIOS - 0x84AB: 0xAF5E, //HANGUL SYLLABLE SSANGKIYEOK WA CIEUC - 0x84AC: 0xAF5F, //HANGUL SYLLABLE SSANGKIYEOK WA CHIEUCH - 0x84AD: 0xAF60, //HANGUL SYLLABLE SSANGKIYEOK WA KHIEUKH - 0x84AE: 0xAF61, //HANGUL SYLLABLE SSANGKIYEOK WA THIEUTH - 0x84AF: 0xAF62, //HANGUL SYLLABLE SSANGKIYEOK WA PHIEUPH - 0x84B0: 0xAF63, //HANGUL SYLLABLE SSANGKIYEOK WA HIEUH - 0x84B1: 0xAF66, //HANGUL SYLLABLE SSANGKIYEOK WAE SSANGKIYEOK - 0x84B2: 0xAF67, //HANGUL SYLLABLE SSANGKIYEOK WAE KIYEOKSIOS - 0x84B3: 0xAF68, //HANGUL SYLLABLE SSANGKIYEOK WAE NIEUN - 0x84B4: 0xAF69, //HANGUL SYLLABLE SSANGKIYEOK WAE NIEUNCIEUC - 0x84B5: 0xAF6A, //HANGUL SYLLABLE SSANGKIYEOK WAE NIEUNHIEUH - 0x84B6: 0xAF6B, //HANGUL SYLLABLE SSANGKIYEOK WAE TIKEUT - 0x84B7: 0xAF6C, //HANGUL SYLLABLE SSANGKIYEOK WAE RIEUL - 0x84B8: 0xAF6D, //HANGUL SYLLABLE SSANGKIYEOK WAE RIEULKIYEOK - 0x84B9: 0xAF6E, //HANGUL SYLLABLE SSANGKIYEOK WAE RIEULMIEUM - 0x84BA: 0xAF6F, //HANGUL SYLLABLE SSANGKIYEOK WAE RIEULPIEUP - 0x84BB: 0xAF70, //HANGUL SYLLABLE SSANGKIYEOK WAE RIEULSIOS - 0x84BC: 0xAF71, //HANGUL SYLLABLE SSANGKIYEOK WAE RIEULTHIEUTH - 0x84BD: 0xAF72, //HANGUL SYLLABLE SSANGKIYEOK WAE RIEULPHIEUPH - 0x84BE: 0xAF73, //HANGUL SYLLABLE SSANGKIYEOK WAE RIEULHIEUH - 0x84BF: 0xAF74, //HANGUL SYLLABLE SSANGKIYEOK WAE MIEUM - 0x84C0: 0xAF75, //HANGUL SYLLABLE SSANGKIYEOK WAE PIEUP - 0x84C1: 0xAF76, //HANGUL SYLLABLE SSANGKIYEOK WAE PIEUPSIOS - 0x84C2: 0xAF77, //HANGUL SYLLABLE SSANGKIYEOK WAE SIOS - 0x84C3: 0xAF78, //HANGUL SYLLABLE SSANGKIYEOK WAE SSANGSIOS - 0x84C4: 0xAF7A, //HANGUL SYLLABLE SSANGKIYEOK WAE CIEUC - 0x84C5: 0xAF7B, //HANGUL SYLLABLE SSANGKIYEOK WAE CHIEUCH - 0x84C6: 0xAF7C, //HANGUL SYLLABLE SSANGKIYEOK WAE KHIEUKH - 0x84C7: 0xAF7D, //HANGUL SYLLABLE SSANGKIYEOK WAE THIEUTH - 0x84C8: 0xAF7E, //HANGUL SYLLABLE SSANGKIYEOK WAE PHIEUPH - 0x84C9: 0xAF7F, //HANGUL SYLLABLE SSANGKIYEOK WAE HIEUH - 0x84CA: 0xAF81, //HANGUL SYLLABLE SSANGKIYEOK OE KIYEOK - 0x84CB: 0xAF82, //HANGUL SYLLABLE SSANGKIYEOK OE SSANGKIYEOK - 0x84CC: 0xAF83, //HANGUL SYLLABLE SSANGKIYEOK OE KIYEOKSIOS - 0x84CD: 0xAF85, //HANGUL SYLLABLE SSANGKIYEOK OE NIEUNCIEUC - 0x84CE: 0xAF86, //HANGUL SYLLABLE SSANGKIYEOK OE NIEUNHIEUH - 0x84CF: 0xAF87, //HANGUL SYLLABLE SSANGKIYEOK OE TIKEUT - 0x84D0: 0xAF89, //HANGUL SYLLABLE SSANGKIYEOK OE RIEULKIYEOK - 0x84D1: 0xAF8A, //HANGUL SYLLABLE SSANGKIYEOK OE RIEULMIEUM - 0x84D2: 0xAF8B, //HANGUL SYLLABLE SSANGKIYEOK OE RIEULPIEUP - 0x84D3: 0xAF8C, //HANGUL SYLLABLE SSANGKIYEOK OE RIEULSIOS - 0x84D4: 0xAF8D, //HANGUL SYLLABLE SSANGKIYEOK OE RIEULTHIEUTH - 0x84D5: 0xAF8E, //HANGUL SYLLABLE SSANGKIYEOK OE RIEULPHIEUPH - 0x84D6: 0xAF8F, //HANGUL SYLLABLE SSANGKIYEOK OE RIEULHIEUH - 0x84D7: 0xAF92, //HANGUL SYLLABLE SSANGKIYEOK OE PIEUPSIOS - 0x84D8: 0xAF93, //HANGUL SYLLABLE SSANGKIYEOK OE SIOS - 0x84D9: 0xAF94, //HANGUL SYLLABLE SSANGKIYEOK OE SSANGSIOS - 0x84DA: 0xAF96, //HANGUL SYLLABLE SSANGKIYEOK OE CIEUC - 0x84DB: 0xAF97, //HANGUL SYLLABLE SSANGKIYEOK OE CHIEUCH - 0x84DC: 0xAF98, //HANGUL SYLLABLE SSANGKIYEOK OE KHIEUKH - 0x84DD: 0xAF99, //HANGUL SYLLABLE SSANGKIYEOK OE THIEUTH - 0x84DE: 0xAF9A, //HANGUL SYLLABLE SSANGKIYEOK OE PHIEUPH - 0x84DF: 0xAF9B, //HANGUL SYLLABLE SSANGKIYEOK OE HIEUH - 0x84E0: 0xAF9D, //HANGUL SYLLABLE SSANGKIYEOK YO KIYEOK - 0x84E1: 0xAF9E, //HANGUL SYLLABLE SSANGKIYEOK YO SSANGKIYEOK - 0x84E2: 0xAF9F, //HANGUL SYLLABLE SSANGKIYEOK YO KIYEOKSIOS - 0x84E3: 0xAFA0, //HANGUL SYLLABLE SSANGKIYEOK YO NIEUN - 0x84E4: 0xAFA1, //HANGUL SYLLABLE SSANGKIYEOK YO NIEUNCIEUC - 0x84E5: 0xAFA2, //HANGUL SYLLABLE SSANGKIYEOK YO NIEUNHIEUH - 0x84E6: 0xAFA3, //HANGUL SYLLABLE SSANGKIYEOK YO TIKEUT - 0x84E7: 0xAFA4, //HANGUL SYLLABLE SSANGKIYEOK YO RIEUL - 0x84E8: 0xAFA5, //HANGUL SYLLABLE SSANGKIYEOK YO RIEULKIYEOK - 0x84E9: 0xAFA6, //HANGUL SYLLABLE SSANGKIYEOK YO RIEULMIEUM - 0x84EA: 0xAFA7, //HANGUL SYLLABLE SSANGKIYEOK YO RIEULPIEUP - 0x84EB: 0xAFA8, //HANGUL SYLLABLE SSANGKIYEOK YO RIEULSIOS - 0x84EC: 0xAFA9, //HANGUL SYLLABLE SSANGKIYEOK YO RIEULTHIEUTH - 0x84ED: 0xAFAA, //HANGUL SYLLABLE SSANGKIYEOK YO RIEULPHIEUPH - 0x84EE: 0xAFAB, //HANGUL SYLLABLE SSANGKIYEOK YO RIEULHIEUH - 0x84EF: 0xAFAC, //HANGUL SYLLABLE SSANGKIYEOK YO MIEUM - 0x84F0: 0xAFAD, //HANGUL SYLLABLE SSANGKIYEOK YO PIEUP - 0x84F1: 0xAFAE, //HANGUL SYLLABLE SSANGKIYEOK YO PIEUPSIOS - 0x84F2: 0xAFAF, //HANGUL SYLLABLE SSANGKIYEOK YO SIOS - 0x84F3: 0xAFB0, //HANGUL SYLLABLE SSANGKIYEOK YO SSANGSIOS - 0x84F4: 0xAFB1, //HANGUL SYLLABLE SSANGKIYEOK YO IEUNG - 0x84F5: 0xAFB2, //HANGUL SYLLABLE SSANGKIYEOK YO CIEUC - 0x84F6: 0xAFB3, //HANGUL SYLLABLE SSANGKIYEOK YO CHIEUCH - 0x84F7: 0xAFB4, //HANGUL SYLLABLE SSANGKIYEOK YO KHIEUKH - 0x84F8: 0xAFB5, //HANGUL SYLLABLE SSANGKIYEOK YO THIEUTH - 0x84F9: 0xAFB6, //HANGUL SYLLABLE SSANGKIYEOK YO PHIEUPH - 0x84FA: 0xAFB7, //HANGUL SYLLABLE SSANGKIYEOK YO HIEUH - 0x84FB: 0xAFBA, //HANGUL SYLLABLE SSANGKIYEOK U SSANGKIYEOK - 0x84FC: 0xAFBB, //HANGUL SYLLABLE SSANGKIYEOK U KIYEOKSIOS - 0x84FD: 0xAFBD, //HANGUL SYLLABLE SSANGKIYEOK U NIEUNCIEUC - 0x84FE: 0xAFBE, //HANGUL SYLLABLE SSANGKIYEOK U NIEUNHIEUH - 0x8541: 0xAFBF, //HANGUL SYLLABLE SSANGKIYEOK U TIKEUT - 0x8542: 0xAFC1, //HANGUL SYLLABLE SSANGKIYEOK U RIEULKIYEOK - 0x8543: 0xAFC2, //HANGUL SYLLABLE SSANGKIYEOK U RIEULMIEUM - 0x8544: 0xAFC3, //HANGUL SYLLABLE SSANGKIYEOK U RIEULPIEUP - 0x8545: 0xAFC4, //HANGUL SYLLABLE SSANGKIYEOK U RIEULSIOS - 0x8546: 0xAFC5, //HANGUL SYLLABLE SSANGKIYEOK U RIEULTHIEUTH - 0x8547: 0xAFC6, //HANGUL SYLLABLE SSANGKIYEOK U RIEULPHIEUPH - 0x8548: 0xAFCA, //HANGUL SYLLABLE SSANGKIYEOK U PIEUPSIOS - 0x8549: 0xAFCC, //HANGUL SYLLABLE SSANGKIYEOK U SSANGSIOS - 0x854A: 0xAFCF, //HANGUL SYLLABLE SSANGKIYEOK U CHIEUCH - 0x854B: 0xAFD0, //HANGUL SYLLABLE SSANGKIYEOK U KHIEUKH - 0x854C: 0xAFD1, //HANGUL SYLLABLE SSANGKIYEOK U THIEUTH - 0x854D: 0xAFD2, //HANGUL SYLLABLE SSANGKIYEOK U PHIEUPH - 0x854E: 0xAFD3, //HANGUL SYLLABLE SSANGKIYEOK U HIEUH - 0x854F: 0xAFD5, //HANGUL SYLLABLE SSANGKIYEOK WEO KIYEOK - 0x8550: 0xAFD6, //HANGUL SYLLABLE SSANGKIYEOK WEO SSANGKIYEOK - 0x8551: 0xAFD7, //HANGUL SYLLABLE SSANGKIYEOK WEO KIYEOKSIOS - 0x8552: 0xAFD8, //HANGUL SYLLABLE SSANGKIYEOK WEO NIEUN - 0x8553: 0xAFD9, //HANGUL SYLLABLE SSANGKIYEOK WEO NIEUNCIEUC - 0x8554: 0xAFDA, //HANGUL SYLLABLE SSANGKIYEOK WEO NIEUNHIEUH - 0x8555: 0xAFDB, //HANGUL SYLLABLE SSANGKIYEOK WEO TIKEUT - 0x8556: 0xAFDD, //HANGUL SYLLABLE SSANGKIYEOK WEO RIEULKIYEOK - 0x8557: 0xAFDE, //HANGUL SYLLABLE SSANGKIYEOK WEO RIEULMIEUM - 0x8558: 0xAFDF, //HANGUL SYLLABLE SSANGKIYEOK WEO RIEULPIEUP - 0x8559: 0xAFE0, //HANGUL SYLLABLE SSANGKIYEOK WEO RIEULSIOS - 0x855A: 0xAFE1, //HANGUL SYLLABLE SSANGKIYEOK WEO RIEULTHIEUTH - 0x8561: 0xAFE2, //HANGUL SYLLABLE SSANGKIYEOK WEO RIEULPHIEUPH - 0x8562: 0xAFE3, //HANGUL SYLLABLE SSANGKIYEOK WEO RIEULHIEUH - 0x8563: 0xAFE4, //HANGUL SYLLABLE SSANGKIYEOK WEO MIEUM - 0x8564: 0xAFE5, //HANGUL SYLLABLE SSANGKIYEOK WEO PIEUP - 0x8565: 0xAFE6, //HANGUL SYLLABLE SSANGKIYEOK WEO PIEUPSIOS - 0x8566: 0xAFE7, //HANGUL SYLLABLE SSANGKIYEOK WEO SIOS - 0x8567: 0xAFEA, //HANGUL SYLLABLE SSANGKIYEOK WEO CIEUC - 0x8568: 0xAFEB, //HANGUL SYLLABLE SSANGKIYEOK WEO CHIEUCH - 0x8569: 0xAFEC, //HANGUL SYLLABLE SSANGKIYEOK WEO KHIEUKH - 0x856A: 0xAFED, //HANGUL SYLLABLE SSANGKIYEOK WEO THIEUTH - 0x856B: 0xAFEE, //HANGUL SYLLABLE SSANGKIYEOK WEO PHIEUPH - 0x856C: 0xAFEF, //HANGUL SYLLABLE SSANGKIYEOK WEO HIEUH - 0x856D: 0xAFF2, //HANGUL SYLLABLE SSANGKIYEOK WE SSANGKIYEOK - 0x856E: 0xAFF3, //HANGUL SYLLABLE SSANGKIYEOK WE KIYEOKSIOS - 0x856F: 0xAFF5, //HANGUL SYLLABLE SSANGKIYEOK WE NIEUNCIEUC - 0x8570: 0xAFF6, //HANGUL SYLLABLE SSANGKIYEOK WE NIEUNHIEUH - 0x8571: 0xAFF7, //HANGUL SYLLABLE SSANGKIYEOK WE TIKEUT - 0x8572: 0xAFF9, //HANGUL SYLLABLE SSANGKIYEOK WE RIEULKIYEOK - 0x8573: 0xAFFA, //HANGUL SYLLABLE SSANGKIYEOK WE RIEULMIEUM - 0x8574: 0xAFFB, //HANGUL SYLLABLE SSANGKIYEOK WE RIEULPIEUP - 0x8575: 0xAFFC, //HANGUL SYLLABLE SSANGKIYEOK WE RIEULSIOS - 0x8576: 0xAFFD, //HANGUL SYLLABLE SSANGKIYEOK WE RIEULTHIEUTH - 0x8577: 0xAFFE, //HANGUL SYLLABLE SSANGKIYEOK WE RIEULPHIEUPH - 0x8578: 0xAFFF, //HANGUL SYLLABLE SSANGKIYEOK WE RIEULHIEUH - 0x8579: 0xB002, //HANGUL SYLLABLE SSANGKIYEOK WE PIEUPSIOS - 0x857A: 0xB003, //HANGUL SYLLABLE SSANGKIYEOK WE SIOS - 0x8581: 0xB005, //HANGUL SYLLABLE SSANGKIYEOK WE IEUNG - 0x8582: 0xB006, //HANGUL SYLLABLE SSANGKIYEOK WE CIEUC - 0x8583: 0xB007, //HANGUL SYLLABLE SSANGKIYEOK WE CHIEUCH - 0x8584: 0xB008, //HANGUL SYLLABLE SSANGKIYEOK WE KHIEUKH - 0x8585: 0xB009, //HANGUL SYLLABLE SSANGKIYEOK WE THIEUTH - 0x8586: 0xB00A, //HANGUL SYLLABLE SSANGKIYEOK WE PHIEUPH - 0x8587: 0xB00B, //HANGUL SYLLABLE SSANGKIYEOK WE HIEUH - 0x8588: 0xB00D, //HANGUL SYLLABLE SSANGKIYEOK WI KIYEOK - 0x8589: 0xB00E, //HANGUL SYLLABLE SSANGKIYEOK WI SSANGKIYEOK - 0x858A: 0xB00F, //HANGUL SYLLABLE SSANGKIYEOK WI KIYEOKSIOS - 0x858B: 0xB011, //HANGUL SYLLABLE SSANGKIYEOK WI NIEUNCIEUC - 0x858C: 0xB012, //HANGUL SYLLABLE SSANGKIYEOK WI NIEUNHIEUH - 0x858D: 0xB013, //HANGUL SYLLABLE SSANGKIYEOK WI TIKEUT - 0x858E: 0xB015, //HANGUL SYLLABLE SSANGKIYEOK WI RIEULKIYEOK - 0x858F: 0xB016, //HANGUL SYLLABLE SSANGKIYEOK WI RIEULMIEUM - 0x8590: 0xB017, //HANGUL SYLLABLE SSANGKIYEOK WI RIEULPIEUP - 0x8591: 0xB018, //HANGUL SYLLABLE SSANGKIYEOK WI RIEULSIOS - 0x8592: 0xB019, //HANGUL SYLLABLE SSANGKIYEOK WI RIEULTHIEUTH - 0x8593: 0xB01A, //HANGUL SYLLABLE SSANGKIYEOK WI RIEULPHIEUPH - 0x8594: 0xB01B, //HANGUL SYLLABLE SSANGKIYEOK WI RIEULHIEUH - 0x8595: 0xB01E, //HANGUL SYLLABLE SSANGKIYEOK WI PIEUPSIOS - 0x8596: 0xB01F, //HANGUL SYLLABLE SSANGKIYEOK WI SIOS - 0x8597: 0xB020, //HANGUL SYLLABLE SSANGKIYEOK WI SSANGSIOS - 0x8598: 0xB021, //HANGUL SYLLABLE SSANGKIYEOK WI IEUNG - 0x8599: 0xB022, //HANGUL SYLLABLE SSANGKIYEOK WI CIEUC - 0x859A: 0xB023, //HANGUL SYLLABLE SSANGKIYEOK WI CHIEUCH - 0x859B: 0xB024, //HANGUL SYLLABLE SSANGKIYEOK WI KHIEUKH - 0x859C: 0xB025, //HANGUL SYLLABLE SSANGKIYEOK WI THIEUTH - 0x859D: 0xB026, //HANGUL SYLLABLE SSANGKIYEOK WI PHIEUPH - 0x859E: 0xB027, //HANGUL SYLLABLE SSANGKIYEOK WI HIEUH - 0x859F: 0xB029, //HANGUL SYLLABLE SSANGKIYEOK YU KIYEOK - 0x85A0: 0xB02A, //HANGUL SYLLABLE SSANGKIYEOK YU SSANGKIYEOK - 0x85A1: 0xB02B, //HANGUL SYLLABLE SSANGKIYEOK YU KIYEOKSIOS - 0x85A2: 0xB02C, //HANGUL SYLLABLE SSANGKIYEOK YU NIEUN - 0x85A3: 0xB02D, //HANGUL SYLLABLE SSANGKIYEOK YU NIEUNCIEUC - 0x85A4: 0xB02E, //HANGUL SYLLABLE SSANGKIYEOK YU NIEUNHIEUH - 0x85A5: 0xB02F, //HANGUL SYLLABLE SSANGKIYEOK YU TIKEUT - 0x85A6: 0xB030, //HANGUL SYLLABLE SSANGKIYEOK YU RIEUL - 0x85A7: 0xB031, //HANGUL SYLLABLE SSANGKIYEOK YU RIEULKIYEOK - 0x85A8: 0xB032, //HANGUL SYLLABLE SSANGKIYEOK YU RIEULMIEUM - 0x85A9: 0xB033, //HANGUL SYLLABLE SSANGKIYEOK YU RIEULPIEUP - 0x85AA: 0xB034, //HANGUL SYLLABLE SSANGKIYEOK YU RIEULSIOS - 0x85AB: 0xB035, //HANGUL SYLLABLE SSANGKIYEOK YU RIEULTHIEUTH - 0x85AC: 0xB036, //HANGUL SYLLABLE SSANGKIYEOK YU RIEULPHIEUPH - 0x85AD: 0xB037, //HANGUL SYLLABLE SSANGKIYEOK YU RIEULHIEUH - 0x85AE: 0xB038, //HANGUL SYLLABLE SSANGKIYEOK YU MIEUM - 0x85AF: 0xB039, //HANGUL SYLLABLE SSANGKIYEOK YU PIEUP - 0x85B0: 0xB03A, //HANGUL SYLLABLE SSANGKIYEOK YU PIEUPSIOS - 0x85B1: 0xB03B, //HANGUL SYLLABLE SSANGKIYEOK YU SIOS - 0x85B2: 0xB03C, //HANGUL SYLLABLE SSANGKIYEOK YU SSANGSIOS - 0x85B3: 0xB03D, //HANGUL SYLLABLE SSANGKIYEOK YU IEUNG - 0x85B4: 0xB03E, //HANGUL SYLLABLE SSANGKIYEOK YU CIEUC - 0x85B5: 0xB03F, //HANGUL SYLLABLE SSANGKIYEOK YU CHIEUCH - 0x85B6: 0xB040, //HANGUL SYLLABLE SSANGKIYEOK YU KHIEUKH - 0x85B7: 0xB041, //HANGUL SYLLABLE SSANGKIYEOK YU THIEUTH - 0x85B8: 0xB042, //HANGUL SYLLABLE SSANGKIYEOK YU PHIEUPH - 0x85B9: 0xB043, //HANGUL SYLLABLE SSANGKIYEOK YU HIEUH - 0x85BA: 0xB046, //HANGUL SYLLABLE SSANGKIYEOK EU SSANGKIYEOK - 0x85BB: 0xB047, //HANGUL SYLLABLE SSANGKIYEOK EU KIYEOKSIOS - 0x85BC: 0xB049, //HANGUL SYLLABLE SSANGKIYEOK EU NIEUNCIEUC - 0x85BD: 0xB04B, //HANGUL SYLLABLE SSANGKIYEOK EU TIKEUT - 0x85BE: 0xB04D, //HANGUL SYLLABLE SSANGKIYEOK EU RIEULKIYEOK - 0x85BF: 0xB04F, //HANGUL SYLLABLE SSANGKIYEOK EU RIEULPIEUP - 0x85C0: 0xB050, //HANGUL SYLLABLE SSANGKIYEOK EU RIEULSIOS - 0x85C1: 0xB051, //HANGUL SYLLABLE SSANGKIYEOK EU RIEULTHIEUTH - 0x85C2: 0xB052, //HANGUL SYLLABLE SSANGKIYEOK EU RIEULPHIEUPH - 0x85C3: 0xB056, //HANGUL SYLLABLE SSANGKIYEOK EU PIEUPSIOS - 0x85C4: 0xB058, //HANGUL SYLLABLE SSANGKIYEOK EU SSANGSIOS - 0x85C5: 0xB05A, //HANGUL SYLLABLE SSANGKIYEOK EU CIEUC - 0x85C6: 0xB05B, //HANGUL SYLLABLE SSANGKIYEOK EU CHIEUCH - 0x85C7: 0xB05C, //HANGUL SYLLABLE SSANGKIYEOK EU KHIEUKH - 0x85C8: 0xB05E, //HANGUL SYLLABLE SSANGKIYEOK EU PHIEUPH - 0x85C9: 0xB05F, //HANGUL SYLLABLE SSANGKIYEOK EU HIEUH - 0x85CA: 0xB060, //HANGUL SYLLABLE SSANGKIYEOK YI - 0x85CB: 0xB061, //HANGUL SYLLABLE SSANGKIYEOK YI KIYEOK - 0x85CC: 0xB062, //HANGUL SYLLABLE SSANGKIYEOK YI SSANGKIYEOK - 0x85CD: 0xB063, //HANGUL SYLLABLE SSANGKIYEOK YI KIYEOKSIOS - 0x85CE: 0xB064, //HANGUL SYLLABLE SSANGKIYEOK YI NIEUN - 0x85CF: 0xB065, //HANGUL SYLLABLE SSANGKIYEOK YI NIEUNCIEUC - 0x85D0: 0xB066, //HANGUL SYLLABLE SSANGKIYEOK YI NIEUNHIEUH - 0x85D1: 0xB067, //HANGUL SYLLABLE SSANGKIYEOK YI TIKEUT - 0x85D2: 0xB068, //HANGUL SYLLABLE SSANGKIYEOK YI RIEUL - 0x85D3: 0xB069, //HANGUL SYLLABLE SSANGKIYEOK YI RIEULKIYEOK - 0x85D4: 0xB06A, //HANGUL SYLLABLE SSANGKIYEOK YI RIEULMIEUM - 0x85D5: 0xB06B, //HANGUL SYLLABLE SSANGKIYEOK YI RIEULPIEUP - 0x85D6: 0xB06C, //HANGUL SYLLABLE SSANGKIYEOK YI RIEULSIOS - 0x85D7: 0xB06D, //HANGUL SYLLABLE SSANGKIYEOK YI RIEULTHIEUTH - 0x85D8: 0xB06E, //HANGUL SYLLABLE SSANGKIYEOK YI RIEULPHIEUPH - 0x85D9: 0xB06F, //HANGUL SYLLABLE SSANGKIYEOK YI RIEULHIEUH - 0x85DA: 0xB070, //HANGUL SYLLABLE SSANGKIYEOK YI MIEUM - 0x85DB: 0xB071, //HANGUL SYLLABLE SSANGKIYEOK YI PIEUP - 0x85DC: 0xB072, //HANGUL SYLLABLE SSANGKIYEOK YI PIEUPSIOS - 0x85DD: 0xB073, //HANGUL SYLLABLE SSANGKIYEOK YI SIOS - 0x85DE: 0xB074, //HANGUL SYLLABLE SSANGKIYEOK YI SSANGSIOS - 0x85DF: 0xB075, //HANGUL SYLLABLE SSANGKIYEOK YI IEUNG - 0x85E0: 0xB076, //HANGUL SYLLABLE SSANGKIYEOK YI CIEUC - 0x85E1: 0xB077, //HANGUL SYLLABLE SSANGKIYEOK YI CHIEUCH - 0x85E2: 0xB078, //HANGUL SYLLABLE SSANGKIYEOK YI KHIEUKH - 0x85E3: 0xB079, //HANGUL SYLLABLE SSANGKIYEOK YI THIEUTH - 0x85E4: 0xB07A, //HANGUL SYLLABLE SSANGKIYEOK YI PHIEUPH - 0x85E5: 0xB07B, //HANGUL SYLLABLE SSANGKIYEOK YI HIEUH - 0x85E6: 0xB07E, //HANGUL SYLLABLE SSANGKIYEOK I SSANGKIYEOK - 0x85E7: 0xB07F, //HANGUL SYLLABLE SSANGKIYEOK I KIYEOKSIOS - 0x85E8: 0xB081, //HANGUL SYLLABLE SSANGKIYEOK I NIEUNCIEUC - 0x85E9: 0xB082, //HANGUL SYLLABLE SSANGKIYEOK I NIEUNHIEUH - 0x85EA: 0xB083, //HANGUL SYLLABLE SSANGKIYEOK I TIKEUT - 0x85EB: 0xB085, //HANGUL SYLLABLE SSANGKIYEOK I RIEULKIYEOK - 0x85EC: 0xB086, //HANGUL SYLLABLE SSANGKIYEOK I RIEULMIEUM - 0x85ED: 0xB087, //HANGUL SYLLABLE SSANGKIYEOK I RIEULPIEUP - 0x85EE: 0xB088, //HANGUL SYLLABLE SSANGKIYEOK I RIEULSIOS - 0x85EF: 0xB089, //HANGUL SYLLABLE SSANGKIYEOK I RIEULTHIEUTH - 0x85F0: 0xB08A, //HANGUL SYLLABLE SSANGKIYEOK I RIEULPHIEUPH - 0x85F1: 0xB08B, //HANGUL SYLLABLE SSANGKIYEOK I RIEULHIEUH - 0x85F2: 0xB08E, //HANGUL SYLLABLE SSANGKIYEOK I PIEUPSIOS - 0x85F3: 0xB090, //HANGUL SYLLABLE SSANGKIYEOK I SSANGSIOS - 0x85F4: 0xB092, //HANGUL SYLLABLE SSANGKIYEOK I CIEUC - 0x85F5: 0xB093, //HANGUL SYLLABLE SSANGKIYEOK I CHIEUCH - 0x85F6: 0xB094, //HANGUL SYLLABLE SSANGKIYEOK I KHIEUKH - 0x85F7: 0xB095, //HANGUL SYLLABLE SSANGKIYEOK I THIEUTH - 0x85F8: 0xB096, //HANGUL SYLLABLE SSANGKIYEOK I PHIEUPH - 0x85F9: 0xB097, //HANGUL SYLLABLE SSANGKIYEOK I HIEUH - 0x85FA: 0xB09B, //HANGUL SYLLABLE NIEUN A KIYEOKSIOS - 0x85FB: 0xB09D, //HANGUL SYLLABLE NIEUN A NIEUNCIEUC - 0x85FC: 0xB09E, //HANGUL SYLLABLE NIEUN A NIEUNHIEUH - 0x85FD: 0xB0A3, //HANGUL SYLLABLE NIEUN A RIEULPIEUP - 0x85FE: 0xB0A4, //HANGUL SYLLABLE NIEUN A RIEULSIOS - 0x8641: 0xB0A5, //HANGUL SYLLABLE NIEUN A RIEULTHIEUTH - 0x8642: 0xB0A6, //HANGUL SYLLABLE NIEUN A RIEULPHIEUPH - 0x8643: 0xB0A7, //HANGUL SYLLABLE NIEUN A RIEULHIEUH - 0x8644: 0xB0AA, //HANGUL SYLLABLE NIEUN A PIEUPSIOS - 0x8645: 0xB0B0, //HANGUL SYLLABLE NIEUN A KHIEUKH - 0x8646: 0xB0B2, //HANGUL SYLLABLE NIEUN A PHIEUPH - 0x8647: 0xB0B6, //HANGUL SYLLABLE NIEUN AE SSANGKIYEOK - 0x8648: 0xB0B7, //HANGUL SYLLABLE NIEUN AE KIYEOKSIOS - 0x8649: 0xB0B9, //HANGUL SYLLABLE NIEUN AE NIEUNCIEUC - 0x864A: 0xB0BA, //HANGUL SYLLABLE NIEUN AE NIEUNHIEUH - 0x864B: 0xB0BB, //HANGUL SYLLABLE NIEUN AE TIKEUT - 0x864C: 0xB0BD, //HANGUL SYLLABLE NIEUN AE RIEULKIYEOK - 0x864D: 0xB0BE, //HANGUL SYLLABLE NIEUN AE RIEULMIEUM - 0x864E: 0xB0BF, //HANGUL SYLLABLE NIEUN AE RIEULPIEUP - 0x864F: 0xB0C0, //HANGUL SYLLABLE NIEUN AE RIEULSIOS - 0x8650: 0xB0C1, //HANGUL SYLLABLE NIEUN AE RIEULTHIEUTH - 0x8651: 0xB0C2, //HANGUL SYLLABLE NIEUN AE RIEULPHIEUPH - 0x8652: 0xB0C3, //HANGUL SYLLABLE NIEUN AE RIEULHIEUH - 0x8653: 0xB0C6, //HANGUL SYLLABLE NIEUN AE PIEUPSIOS - 0x8654: 0xB0CA, //HANGUL SYLLABLE NIEUN AE CIEUC - 0x8655: 0xB0CB, //HANGUL SYLLABLE NIEUN AE CHIEUCH - 0x8656: 0xB0CC, //HANGUL SYLLABLE NIEUN AE KHIEUKH - 0x8657: 0xB0CD, //HANGUL SYLLABLE NIEUN AE THIEUTH - 0x8658: 0xB0CE, //HANGUL SYLLABLE NIEUN AE PHIEUPH - 0x8659: 0xB0CF, //HANGUL SYLLABLE NIEUN AE HIEUH - 0x865A: 0xB0D2, //HANGUL SYLLABLE NIEUN YA SSANGKIYEOK - 0x8661: 0xB0D3, //HANGUL SYLLABLE NIEUN YA KIYEOKSIOS - 0x8662: 0xB0D5, //HANGUL SYLLABLE NIEUN YA NIEUNCIEUC - 0x8663: 0xB0D6, //HANGUL SYLLABLE NIEUN YA NIEUNHIEUH - 0x8664: 0xB0D7, //HANGUL SYLLABLE NIEUN YA TIKEUT - 0x8665: 0xB0D9, //HANGUL SYLLABLE NIEUN YA RIEULKIYEOK - 0x8666: 0xB0DA, //HANGUL SYLLABLE NIEUN YA RIEULMIEUM - 0x8667: 0xB0DB, //HANGUL SYLLABLE NIEUN YA RIEULPIEUP - 0x8668: 0xB0DC, //HANGUL SYLLABLE NIEUN YA RIEULSIOS - 0x8669: 0xB0DD, //HANGUL SYLLABLE NIEUN YA RIEULTHIEUTH - 0x866A: 0xB0DE, //HANGUL SYLLABLE NIEUN YA RIEULPHIEUPH - 0x866B: 0xB0DF, //HANGUL SYLLABLE NIEUN YA RIEULHIEUH - 0x866C: 0xB0E1, //HANGUL SYLLABLE NIEUN YA PIEUP - 0x866D: 0xB0E2, //HANGUL SYLLABLE NIEUN YA PIEUPSIOS - 0x866E: 0xB0E3, //HANGUL SYLLABLE NIEUN YA SIOS - 0x866F: 0xB0E4, //HANGUL SYLLABLE NIEUN YA SSANGSIOS - 0x8670: 0xB0E6, //HANGUL SYLLABLE NIEUN YA CIEUC - 0x8671: 0xB0E7, //HANGUL SYLLABLE NIEUN YA CHIEUCH - 0x8672: 0xB0E8, //HANGUL SYLLABLE NIEUN YA KHIEUKH - 0x8673: 0xB0E9, //HANGUL SYLLABLE NIEUN YA THIEUTH - 0x8674: 0xB0EA, //HANGUL SYLLABLE NIEUN YA PHIEUPH - 0x8675: 0xB0EB, //HANGUL SYLLABLE NIEUN YA HIEUH - 0x8676: 0xB0EC, //HANGUL SYLLABLE NIEUN YAE - 0x8677: 0xB0ED, //HANGUL SYLLABLE NIEUN YAE KIYEOK - 0x8678: 0xB0EE, //HANGUL SYLLABLE NIEUN YAE SSANGKIYEOK - 0x8679: 0xB0EF, //HANGUL SYLLABLE NIEUN YAE KIYEOKSIOS - 0x867A: 0xB0F0, //HANGUL SYLLABLE NIEUN YAE NIEUN - 0x8681: 0xB0F1, //HANGUL SYLLABLE NIEUN YAE NIEUNCIEUC - 0x8682: 0xB0F2, //HANGUL SYLLABLE NIEUN YAE NIEUNHIEUH - 0x8683: 0xB0F3, //HANGUL SYLLABLE NIEUN YAE TIKEUT - 0x8684: 0xB0F4, //HANGUL SYLLABLE NIEUN YAE RIEUL - 0x8685: 0xB0F5, //HANGUL SYLLABLE NIEUN YAE RIEULKIYEOK - 0x8686: 0xB0F6, //HANGUL SYLLABLE NIEUN YAE RIEULMIEUM - 0x8687: 0xB0F7, //HANGUL SYLLABLE NIEUN YAE RIEULPIEUP - 0x8688: 0xB0F8, //HANGUL SYLLABLE NIEUN YAE RIEULSIOS - 0x8689: 0xB0F9, //HANGUL SYLLABLE NIEUN YAE RIEULTHIEUTH - 0x868A: 0xB0FA, //HANGUL SYLLABLE NIEUN YAE RIEULPHIEUPH - 0x868B: 0xB0FB, //HANGUL SYLLABLE NIEUN YAE RIEULHIEUH - 0x868C: 0xB0FC, //HANGUL SYLLABLE NIEUN YAE MIEUM - 0x868D: 0xB0FD, //HANGUL SYLLABLE NIEUN YAE PIEUP - 0x868E: 0xB0FE, //HANGUL SYLLABLE NIEUN YAE PIEUPSIOS - 0x868F: 0xB0FF, //HANGUL SYLLABLE NIEUN YAE SIOS - 0x8690: 0xB100, //HANGUL SYLLABLE NIEUN YAE SSANGSIOS - 0x8691: 0xB101, //HANGUL SYLLABLE NIEUN YAE IEUNG - 0x8692: 0xB102, //HANGUL SYLLABLE NIEUN YAE CIEUC - 0x8693: 0xB103, //HANGUL SYLLABLE NIEUN YAE CHIEUCH - 0x8694: 0xB104, //HANGUL SYLLABLE NIEUN YAE KHIEUKH - 0x8695: 0xB105, //HANGUL SYLLABLE NIEUN YAE THIEUTH - 0x8696: 0xB106, //HANGUL SYLLABLE NIEUN YAE PHIEUPH - 0x8697: 0xB107, //HANGUL SYLLABLE NIEUN YAE HIEUH - 0x8698: 0xB10A, //HANGUL SYLLABLE NIEUN EO SSANGKIYEOK - 0x8699: 0xB10D, //HANGUL SYLLABLE NIEUN EO NIEUNCIEUC - 0x869A: 0xB10E, //HANGUL SYLLABLE NIEUN EO NIEUNHIEUH - 0x869B: 0xB10F, //HANGUL SYLLABLE NIEUN EO TIKEUT - 0x869C: 0xB111, //HANGUL SYLLABLE NIEUN EO RIEULKIYEOK - 0x869D: 0xB114, //HANGUL SYLLABLE NIEUN EO RIEULSIOS - 0x869E: 0xB115, //HANGUL SYLLABLE NIEUN EO RIEULTHIEUTH - 0x869F: 0xB116, //HANGUL SYLLABLE NIEUN EO RIEULPHIEUPH - 0x86A0: 0xB117, //HANGUL SYLLABLE NIEUN EO RIEULHIEUH - 0x86A1: 0xB11A, //HANGUL SYLLABLE NIEUN EO PIEUPSIOS - 0x86A2: 0xB11E, //HANGUL SYLLABLE NIEUN EO CIEUC - 0x86A3: 0xB11F, //HANGUL SYLLABLE NIEUN EO CHIEUCH - 0x86A4: 0xB120, //HANGUL SYLLABLE NIEUN EO KHIEUKH - 0x86A5: 0xB121, //HANGUL SYLLABLE NIEUN EO THIEUTH - 0x86A6: 0xB122, //HANGUL SYLLABLE NIEUN EO PHIEUPH - 0x86A7: 0xB126, //HANGUL SYLLABLE NIEUN E SSANGKIYEOK - 0x86A8: 0xB127, //HANGUL SYLLABLE NIEUN E KIYEOKSIOS - 0x86A9: 0xB129, //HANGUL SYLLABLE NIEUN E NIEUNCIEUC - 0x86AA: 0xB12A, //HANGUL SYLLABLE NIEUN E NIEUNHIEUH - 0x86AB: 0xB12B, //HANGUL SYLLABLE NIEUN E TIKEUT - 0x86AC: 0xB12D, //HANGUL SYLLABLE NIEUN E RIEULKIYEOK - 0x86AD: 0xB12E, //HANGUL SYLLABLE NIEUN E RIEULMIEUM - 0x86AE: 0xB12F, //HANGUL SYLLABLE NIEUN E RIEULPIEUP - 0x86AF: 0xB130, //HANGUL SYLLABLE NIEUN E RIEULSIOS - 0x86B0: 0xB131, //HANGUL SYLLABLE NIEUN E RIEULTHIEUTH - 0x86B1: 0xB132, //HANGUL SYLLABLE NIEUN E RIEULPHIEUPH - 0x86B2: 0xB133, //HANGUL SYLLABLE NIEUN E RIEULHIEUH - 0x86B3: 0xB136, //HANGUL SYLLABLE NIEUN E PIEUPSIOS - 0x86B4: 0xB13A, //HANGUL SYLLABLE NIEUN E CIEUC - 0x86B5: 0xB13B, //HANGUL SYLLABLE NIEUN E CHIEUCH - 0x86B6: 0xB13C, //HANGUL SYLLABLE NIEUN E KHIEUKH - 0x86B7: 0xB13D, //HANGUL SYLLABLE NIEUN E THIEUTH - 0x86B8: 0xB13E, //HANGUL SYLLABLE NIEUN E PHIEUPH - 0x86B9: 0xB13F, //HANGUL SYLLABLE NIEUN E HIEUH - 0x86BA: 0xB142, //HANGUL SYLLABLE NIEUN YEO SSANGKIYEOK - 0x86BB: 0xB143, //HANGUL SYLLABLE NIEUN YEO KIYEOKSIOS - 0x86BC: 0xB145, //HANGUL SYLLABLE NIEUN YEO NIEUNCIEUC - 0x86BD: 0xB146, //HANGUL SYLLABLE NIEUN YEO NIEUNHIEUH - 0x86BE: 0xB147, //HANGUL SYLLABLE NIEUN YEO TIKEUT - 0x86BF: 0xB149, //HANGUL SYLLABLE NIEUN YEO RIEULKIYEOK - 0x86C0: 0xB14A, //HANGUL SYLLABLE NIEUN YEO RIEULMIEUM - 0x86C1: 0xB14B, //HANGUL SYLLABLE NIEUN YEO RIEULPIEUP - 0x86C2: 0xB14C, //HANGUL SYLLABLE NIEUN YEO RIEULSIOS - 0x86C3: 0xB14D, //HANGUL SYLLABLE NIEUN YEO RIEULTHIEUTH - 0x86C4: 0xB14E, //HANGUL SYLLABLE NIEUN YEO RIEULPHIEUPH - 0x86C5: 0xB14F, //HANGUL SYLLABLE NIEUN YEO RIEULHIEUH - 0x86C6: 0xB152, //HANGUL SYLLABLE NIEUN YEO PIEUPSIOS - 0x86C7: 0xB153, //HANGUL SYLLABLE NIEUN YEO SIOS - 0x86C8: 0xB156, //HANGUL SYLLABLE NIEUN YEO CIEUC - 0x86C9: 0xB157, //HANGUL SYLLABLE NIEUN YEO CHIEUCH - 0x86CA: 0xB159, //HANGUL SYLLABLE NIEUN YEO THIEUTH - 0x86CB: 0xB15A, //HANGUL SYLLABLE NIEUN YEO PHIEUPH - 0x86CC: 0xB15B, //HANGUL SYLLABLE NIEUN YEO HIEUH - 0x86CD: 0xB15D, //HANGUL SYLLABLE NIEUN YE KIYEOK - 0x86CE: 0xB15E, //HANGUL SYLLABLE NIEUN YE SSANGKIYEOK - 0x86CF: 0xB15F, //HANGUL SYLLABLE NIEUN YE KIYEOKSIOS - 0x86D0: 0xB161, //HANGUL SYLLABLE NIEUN YE NIEUNCIEUC - 0x86D1: 0xB162, //HANGUL SYLLABLE NIEUN YE NIEUNHIEUH - 0x86D2: 0xB163, //HANGUL SYLLABLE NIEUN YE TIKEUT - 0x86D3: 0xB164, //HANGUL SYLLABLE NIEUN YE RIEUL - 0x86D4: 0xB165, //HANGUL SYLLABLE NIEUN YE RIEULKIYEOK - 0x86D5: 0xB166, //HANGUL SYLLABLE NIEUN YE RIEULMIEUM - 0x86D6: 0xB167, //HANGUL SYLLABLE NIEUN YE RIEULPIEUP - 0x86D7: 0xB168, //HANGUL SYLLABLE NIEUN YE RIEULSIOS - 0x86D8: 0xB169, //HANGUL SYLLABLE NIEUN YE RIEULTHIEUTH - 0x86D9: 0xB16A, //HANGUL SYLLABLE NIEUN YE RIEULPHIEUPH - 0x86DA: 0xB16B, //HANGUL SYLLABLE NIEUN YE RIEULHIEUH - 0x86DB: 0xB16C, //HANGUL SYLLABLE NIEUN YE MIEUM - 0x86DC: 0xB16D, //HANGUL SYLLABLE NIEUN YE PIEUP - 0x86DD: 0xB16E, //HANGUL SYLLABLE NIEUN YE PIEUPSIOS - 0x86DE: 0xB16F, //HANGUL SYLLABLE NIEUN YE SIOS - 0x86DF: 0xB170, //HANGUL SYLLABLE NIEUN YE SSANGSIOS - 0x86E0: 0xB171, //HANGUL SYLLABLE NIEUN YE IEUNG - 0x86E1: 0xB172, //HANGUL SYLLABLE NIEUN YE CIEUC - 0x86E2: 0xB173, //HANGUL SYLLABLE NIEUN YE CHIEUCH - 0x86E3: 0xB174, //HANGUL SYLLABLE NIEUN YE KHIEUKH - 0x86E4: 0xB175, //HANGUL SYLLABLE NIEUN YE THIEUTH - 0x86E5: 0xB176, //HANGUL SYLLABLE NIEUN YE PHIEUPH - 0x86E6: 0xB177, //HANGUL SYLLABLE NIEUN YE HIEUH - 0x86E7: 0xB17A, //HANGUL SYLLABLE NIEUN O SSANGKIYEOK - 0x86E8: 0xB17B, //HANGUL SYLLABLE NIEUN O KIYEOKSIOS - 0x86E9: 0xB17D, //HANGUL SYLLABLE NIEUN O NIEUNCIEUC - 0x86EA: 0xB17E, //HANGUL SYLLABLE NIEUN O NIEUNHIEUH - 0x86EB: 0xB17F, //HANGUL SYLLABLE NIEUN O TIKEUT - 0x86EC: 0xB181, //HANGUL SYLLABLE NIEUN O RIEULKIYEOK - 0x86ED: 0xB183, //HANGUL SYLLABLE NIEUN O RIEULPIEUP - 0x86EE: 0xB184, //HANGUL SYLLABLE NIEUN O RIEULSIOS - 0x86EF: 0xB185, //HANGUL SYLLABLE NIEUN O RIEULTHIEUTH - 0x86F0: 0xB186, //HANGUL SYLLABLE NIEUN O RIEULPHIEUPH - 0x86F1: 0xB187, //HANGUL SYLLABLE NIEUN O RIEULHIEUH - 0x86F2: 0xB18A, //HANGUL SYLLABLE NIEUN O PIEUPSIOS - 0x86F3: 0xB18C, //HANGUL SYLLABLE NIEUN O SSANGSIOS - 0x86F4: 0xB18E, //HANGUL SYLLABLE NIEUN O CIEUC - 0x86F5: 0xB18F, //HANGUL SYLLABLE NIEUN O CHIEUCH - 0x86F6: 0xB190, //HANGUL SYLLABLE NIEUN O KHIEUKH - 0x86F7: 0xB191, //HANGUL SYLLABLE NIEUN O THIEUTH - 0x86F8: 0xB195, //HANGUL SYLLABLE NIEUN WA KIYEOK - 0x86F9: 0xB196, //HANGUL SYLLABLE NIEUN WA SSANGKIYEOK - 0x86FA: 0xB197, //HANGUL SYLLABLE NIEUN WA KIYEOKSIOS - 0x86FB: 0xB199, //HANGUL SYLLABLE NIEUN WA NIEUNCIEUC - 0x86FC: 0xB19A, //HANGUL SYLLABLE NIEUN WA NIEUNHIEUH - 0x86FD: 0xB19B, //HANGUL SYLLABLE NIEUN WA TIKEUT - 0x86FE: 0xB19D, //HANGUL SYLLABLE NIEUN WA RIEULKIYEOK - 0x8741: 0xB19E, //HANGUL SYLLABLE NIEUN WA RIEULMIEUM - 0x8742: 0xB19F, //HANGUL SYLLABLE NIEUN WA RIEULPIEUP - 0x8743: 0xB1A0, //HANGUL SYLLABLE NIEUN WA RIEULSIOS - 0x8744: 0xB1A1, //HANGUL SYLLABLE NIEUN WA RIEULTHIEUTH - 0x8745: 0xB1A2, //HANGUL SYLLABLE NIEUN WA RIEULPHIEUPH - 0x8746: 0xB1A3, //HANGUL SYLLABLE NIEUN WA RIEULHIEUH - 0x8747: 0xB1A4, //HANGUL SYLLABLE NIEUN WA MIEUM - 0x8748: 0xB1A5, //HANGUL SYLLABLE NIEUN WA PIEUP - 0x8749: 0xB1A6, //HANGUL SYLLABLE NIEUN WA PIEUPSIOS - 0x874A: 0xB1A7, //HANGUL SYLLABLE NIEUN WA SIOS - 0x874B: 0xB1A9, //HANGUL SYLLABLE NIEUN WA IEUNG - 0x874C: 0xB1AA, //HANGUL SYLLABLE NIEUN WA CIEUC - 0x874D: 0xB1AB, //HANGUL SYLLABLE NIEUN WA CHIEUCH - 0x874E: 0xB1AC, //HANGUL SYLLABLE NIEUN WA KHIEUKH - 0x874F: 0xB1AD, //HANGUL SYLLABLE NIEUN WA THIEUTH - 0x8750: 0xB1AE, //HANGUL SYLLABLE NIEUN WA PHIEUPH - 0x8751: 0xB1AF, //HANGUL SYLLABLE NIEUN WA HIEUH - 0x8752: 0xB1B0, //HANGUL SYLLABLE NIEUN WAE - 0x8753: 0xB1B1, //HANGUL SYLLABLE NIEUN WAE KIYEOK - 0x8754: 0xB1B2, //HANGUL SYLLABLE NIEUN WAE SSANGKIYEOK - 0x8755: 0xB1B3, //HANGUL SYLLABLE NIEUN WAE KIYEOKSIOS - 0x8756: 0xB1B4, //HANGUL SYLLABLE NIEUN WAE NIEUN - 0x8757: 0xB1B5, //HANGUL SYLLABLE NIEUN WAE NIEUNCIEUC - 0x8758: 0xB1B6, //HANGUL SYLLABLE NIEUN WAE NIEUNHIEUH - 0x8759: 0xB1B7, //HANGUL SYLLABLE NIEUN WAE TIKEUT - 0x875A: 0xB1B8, //HANGUL SYLLABLE NIEUN WAE RIEUL - 0x8761: 0xB1B9, //HANGUL SYLLABLE NIEUN WAE RIEULKIYEOK - 0x8762: 0xB1BA, //HANGUL SYLLABLE NIEUN WAE RIEULMIEUM - 0x8763: 0xB1BB, //HANGUL SYLLABLE NIEUN WAE RIEULPIEUP - 0x8764: 0xB1BC, //HANGUL SYLLABLE NIEUN WAE RIEULSIOS - 0x8765: 0xB1BD, //HANGUL SYLLABLE NIEUN WAE RIEULTHIEUTH - 0x8766: 0xB1BE, //HANGUL SYLLABLE NIEUN WAE RIEULPHIEUPH - 0x8767: 0xB1BF, //HANGUL SYLLABLE NIEUN WAE RIEULHIEUH - 0x8768: 0xB1C0, //HANGUL SYLLABLE NIEUN WAE MIEUM - 0x8769: 0xB1C1, //HANGUL SYLLABLE NIEUN WAE PIEUP - 0x876A: 0xB1C2, //HANGUL SYLLABLE NIEUN WAE PIEUPSIOS - 0x876B: 0xB1C3, //HANGUL SYLLABLE NIEUN WAE SIOS - 0x876C: 0xB1C4, //HANGUL SYLLABLE NIEUN WAE SSANGSIOS - 0x876D: 0xB1C5, //HANGUL SYLLABLE NIEUN WAE IEUNG - 0x876E: 0xB1C6, //HANGUL SYLLABLE NIEUN WAE CIEUC - 0x876F: 0xB1C7, //HANGUL SYLLABLE NIEUN WAE CHIEUCH - 0x8770: 0xB1C8, //HANGUL SYLLABLE NIEUN WAE KHIEUKH - 0x8771: 0xB1C9, //HANGUL SYLLABLE NIEUN WAE THIEUTH - 0x8772: 0xB1CA, //HANGUL SYLLABLE NIEUN WAE PHIEUPH - 0x8773: 0xB1CB, //HANGUL SYLLABLE NIEUN WAE HIEUH - 0x8774: 0xB1CD, //HANGUL SYLLABLE NIEUN OE KIYEOK - 0x8775: 0xB1CE, //HANGUL SYLLABLE NIEUN OE SSANGKIYEOK - 0x8776: 0xB1CF, //HANGUL SYLLABLE NIEUN OE KIYEOKSIOS - 0x8777: 0xB1D1, //HANGUL SYLLABLE NIEUN OE NIEUNCIEUC - 0x8778: 0xB1D2, //HANGUL SYLLABLE NIEUN OE NIEUNHIEUH - 0x8779: 0xB1D3, //HANGUL SYLLABLE NIEUN OE TIKEUT - 0x877A: 0xB1D5, //HANGUL SYLLABLE NIEUN OE RIEULKIYEOK - 0x8781: 0xB1D6, //HANGUL SYLLABLE NIEUN OE RIEULMIEUM - 0x8782: 0xB1D7, //HANGUL SYLLABLE NIEUN OE RIEULPIEUP - 0x8783: 0xB1D8, //HANGUL SYLLABLE NIEUN OE RIEULSIOS - 0x8784: 0xB1D9, //HANGUL SYLLABLE NIEUN OE RIEULTHIEUTH - 0x8785: 0xB1DA, //HANGUL SYLLABLE NIEUN OE RIEULPHIEUPH - 0x8786: 0xB1DB, //HANGUL SYLLABLE NIEUN OE RIEULHIEUH - 0x8787: 0xB1DE, //HANGUL SYLLABLE NIEUN OE PIEUPSIOS - 0x8788: 0xB1E0, //HANGUL SYLLABLE NIEUN OE SSANGSIOS - 0x8789: 0xB1E1, //HANGUL SYLLABLE NIEUN OE IEUNG - 0x878A: 0xB1E2, //HANGUL SYLLABLE NIEUN OE CIEUC - 0x878B: 0xB1E3, //HANGUL SYLLABLE NIEUN OE CHIEUCH - 0x878C: 0xB1E4, //HANGUL SYLLABLE NIEUN OE KHIEUKH - 0x878D: 0xB1E5, //HANGUL SYLLABLE NIEUN OE THIEUTH - 0x878E: 0xB1E6, //HANGUL SYLLABLE NIEUN OE PHIEUPH - 0x878F: 0xB1E7, //HANGUL SYLLABLE NIEUN OE HIEUH - 0x8790: 0xB1EA, //HANGUL SYLLABLE NIEUN YO SSANGKIYEOK - 0x8791: 0xB1EB, //HANGUL SYLLABLE NIEUN YO KIYEOKSIOS - 0x8792: 0xB1ED, //HANGUL SYLLABLE NIEUN YO NIEUNCIEUC - 0x8793: 0xB1EE, //HANGUL SYLLABLE NIEUN YO NIEUNHIEUH - 0x8794: 0xB1EF, //HANGUL SYLLABLE NIEUN YO TIKEUT - 0x8795: 0xB1F1, //HANGUL SYLLABLE NIEUN YO RIEULKIYEOK - 0x8796: 0xB1F2, //HANGUL SYLLABLE NIEUN YO RIEULMIEUM - 0x8797: 0xB1F3, //HANGUL SYLLABLE NIEUN YO RIEULPIEUP - 0x8798: 0xB1F4, //HANGUL SYLLABLE NIEUN YO RIEULSIOS - 0x8799: 0xB1F5, //HANGUL SYLLABLE NIEUN YO RIEULTHIEUTH - 0x879A: 0xB1F6, //HANGUL SYLLABLE NIEUN YO RIEULPHIEUPH - 0x879B: 0xB1F7, //HANGUL SYLLABLE NIEUN YO RIEULHIEUH - 0x879C: 0xB1F8, //HANGUL SYLLABLE NIEUN YO MIEUM - 0x879D: 0xB1FA, //HANGUL SYLLABLE NIEUN YO PIEUPSIOS - 0x879E: 0xB1FC, //HANGUL SYLLABLE NIEUN YO SSANGSIOS - 0x879F: 0xB1FE, //HANGUL SYLLABLE NIEUN YO CIEUC - 0x87A0: 0xB1FF, //HANGUL SYLLABLE NIEUN YO CHIEUCH - 0x87A1: 0xB200, //HANGUL SYLLABLE NIEUN YO KHIEUKH - 0x87A2: 0xB201, //HANGUL SYLLABLE NIEUN YO THIEUTH - 0x87A3: 0xB202, //HANGUL SYLLABLE NIEUN YO PHIEUPH - 0x87A4: 0xB203, //HANGUL SYLLABLE NIEUN YO HIEUH - 0x87A5: 0xB206, //HANGUL SYLLABLE NIEUN U SSANGKIYEOK - 0x87A6: 0xB207, //HANGUL SYLLABLE NIEUN U KIYEOKSIOS - 0x87A7: 0xB209, //HANGUL SYLLABLE NIEUN U NIEUNCIEUC - 0x87A8: 0xB20A, //HANGUL SYLLABLE NIEUN U NIEUNHIEUH - 0x87A9: 0xB20D, //HANGUL SYLLABLE NIEUN U RIEULKIYEOK - 0x87AA: 0xB20E, //HANGUL SYLLABLE NIEUN U RIEULMIEUM - 0x87AB: 0xB20F, //HANGUL SYLLABLE NIEUN U RIEULPIEUP - 0x87AC: 0xB210, //HANGUL SYLLABLE NIEUN U RIEULSIOS - 0x87AD: 0xB211, //HANGUL SYLLABLE NIEUN U RIEULTHIEUTH - 0x87AE: 0xB212, //HANGUL SYLLABLE NIEUN U RIEULPHIEUPH - 0x87AF: 0xB213, //HANGUL SYLLABLE NIEUN U RIEULHIEUH - 0x87B0: 0xB216, //HANGUL SYLLABLE NIEUN U PIEUPSIOS - 0x87B1: 0xB218, //HANGUL SYLLABLE NIEUN U SSANGSIOS - 0x87B2: 0xB21A, //HANGUL SYLLABLE NIEUN U CIEUC - 0x87B3: 0xB21B, //HANGUL SYLLABLE NIEUN U CHIEUCH - 0x87B4: 0xB21C, //HANGUL SYLLABLE NIEUN U KHIEUKH - 0x87B5: 0xB21D, //HANGUL SYLLABLE NIEUN U THIEUTH - 0x87B6: 0xB21E, //HANGUL SYLLABLE NIEUN U PHIEUPH - 0x87B7: 0xB21F, //HANGUL SYLLABLE NIEUN U HIEUH - 0x87B8: 0xB221, //HANGUL SYLLABLE NIEUN WEO KIYEOK - 0x87B9: 0xB222, //HANGUL SYLLABLE NIEUN WEO SSANGKIYEOK - 0x87BA: 0xB223, //HANGUL SYLLABLE NIEUN WEO KIYEOKSIOS - 0x87BB: 0xB224, //HANGUL SYLLABLE NIEUN WEO NIEUN - 0x87BC: 0xB225, //HANGUL SYLLABLE NIEUN WEO NIEUNCIEUC - 0x87BD: 0xB226, //HANGUL SYLLABLE NIEUN WEO NIEUNHIEUH - 0x87BE: 0xB227, //HANGUL SYLLABLE NIEUN WEO TIKEUT - 0x87BF: 0xB228, //HANGUL SYLLABLE NIEUN WEO RIEUL - 0x87C0: 0xB229, //HANGUL SYLLABLE NIEUN WEO RIEULKIYEOK - 0x87C1: 0xB22A, //HANGUL SYLLABLE NIEUN WEO RIEULMIEUM - 0x87C2: 0xB22B, //HANGUL SYLLABLE NIEUN WEO RIEULPIEUP - 0x87C3: 0xB22C, //HANGUL SYLLABLE NIEUN WEO RIEULSIOS - 0x87C4: 0xB22D, //HANGUL SYLLABLE NIEUN WEO RIEULTHIEUTH - 0x87C5: 0xB22E, //HANGUL SYLLABLE NIEUN WEO RIEULPHIEUPH - 0x87C6: 0xB22F, //HANGUL SYLLABLE NIEUN WEO RIEULHIEUH - 0x87C7: 0xB230, //HANGUL SYLLABLE NIEUN WEO MIEUM - 0x87C8: 0xB231, //HANGUL SYLLABLE NIEUN WEO PIEUP - 0x87C9: 0xB232, //HANGUL SYLLABLE NIEUN WEO PIEUPSIOS - 0x87CA: 0xB233, //HANGUL SYLLABLE NIEUN WEO SIOS - 0x87CB: 0xB235, //HANGUL SYLLABLE NIEUN WEO IEUNG - 0x87CC: 0xB236, //HANGUL SYLLABLE NIEUN WEO CIEUC - 0x87CD: 0xB237, //HANGUL SYLLABLE NIEUN WEO CHIEUCH - 0x87CE: 0xB238, //HANGUL SYLLABLE NIEUN WEO KHIEUKH - 0x87CF: 0xB239, //HANGUL SYLLABLE NIEUN WEO THIEUTH - 0x87D0: 0xB23A, //HANGUL SYLLABLE NIEUN WEO PHIEUPH - 0x87D1: 0xB23B, //HANGUL SYLLABLE NIEUN WEO HIEUH - 0x87D2: 0xB23D, //HANGUL SYLLABLE NIEUN WE KIYEOK - 0x87D3: 0xB23E, //HANGUL SYLLABLE NIEUN WE SSANGKIYEOK - 0x87D4: 0xB23F, //HANGUL SYLLABLE NIEUN WE KIYEOKSIOS - 0x87D5: 0xB240, //HANGUL SYLLABLE NIEUN WE NIEUN - 0x87D6: 0xB241, //HANGUL SYLLABLE NIEUN WE NIEUNCIEUC - 0x87D7: 0xB242, //HANGUL SYLLABLE NIEUN WE NIEUNHIEUH - 0x87D8: 0xB243, //HANGUL SYLLABLE NIEUN WE TIKEUT - 0x87D9: 0xB244, //HANGUL SYLLABLE NIEUN WE RIEUL - 0x87DA: 0xB245, //HANGUL SYLLABLE NIEUN WE RIEULKIYEOK - 0x87DB: 0xB246, //HANGUL SYLLABLE NIEUN WE RIEULMIEUM - 0x87DC: 0xB247, //HANGUL SYLLABLE NIEUN WE RIEULPIEUP - 0x87DD: 0xB248, //HANGUL SYLLABLE NIEUN WE RIEULSIOS - 0x87DE: 0xB249, //HANGUL SYLLABLE NIEUN WE RIEULTHIEUTH - 0x87DF: 0xB24A, //HANGUL SYLLABLE NIEUN WE RIEULPHIEUPH - 0x87E0: 0xB24B, //HANGUL SYLLABLE NIEUN WE RIEULHIEUH - 0x87E1: 0xB24C, //HANGUL SYLLABLE NIEUN WE MIEUM - 0x87E2: 0xB24D, //HANGUL SYLLABLE NIEUN WE PIEUP - 0x87E3: 0xB24E, //HANGUL SYLLABLE NIEUN WE PIEUPSIOS - 0x87E4: 0xB24F, //HANGUL SYLLABLE NIEUN WE SIOS - 0x87E5: 0xB250, //HANGUL SYLLABLE NIEUN WE SSANGSIOS - 0x87E6: 0xB251, //HANGUL SYLLABLE NIEUN WE IEUNG - 0x87E7: 0xB252, //HANGUL SYLLABLE NIEUN WE CIEUC - 0x87E8: 0xB253, //HANGUL SYLLABLE NIEUN WE CHIEUCH - 0x87E9: 0xB254, //HANGUL SYLLABLE NIEUN WE KHIEUKH - 0x87EA: 0xB255, //HANGUL SYLLABLE NIEUN WE THIEUTH - 0x87EB: 0xB256, //HANGUL SYLLABLE NIEUN WE PHIEUPH - 0x87EC: 0xB257, //HANGUL SYLLABLE NIEUN WE HIEUH - 0x87ED: 0xB259, //HANGUL SYLLABLE NIEUN WI KIYEOK - 0x87EE: 0xB25A, //HANGUL SYLLABLE NIEUN WI SSANGKIYEOK - 0x87EF: 0xB25B, //HANGUL SYLLABLE NIEUN WI KIYEOKSIOS - 0x87F0: 0xB25D, //HANGUL SYLLABLE NIEUN WI NIEUNCIEUC - 0x87F1: 0xB25E, //HANGUL SYLLABLE NIEUN WI NIEUNHIEUH - 0x87F2: 0xB25F, //HANGUL SYLLABLE NIEUN WI TIKEUT - 0x87F3: 0xB261, //HANGUL SYLLABLE NIEUN WI RIEULKIYEOK - 0x87F4: 0xB262, //HANGUL SYLLABLE NIEUN WI RIEULMIEUM - 0x87F5: 0xB263, //HANGUL SYLLABLE NIEUN WI RIEULPIEUP - 0x87F6: 0xB264, //HANGUL SYLLABLE NIEUN WI RIEULSIOS - 0x87F7: 0xB265, //HANGUL SYLLABLE NIEUN WI RIEULTHIEUTH - 0x87F8: 0xB266, //HANGUL SYLLABLE NIEUN WI RIEULPHIEUPH - 0x87F9: 0xB267, //HANGUL SYLLABLE NIEUN WI RIEULHIEUH - 0x87FA: 0xB26A, //HANGUL SYLLABLE NIEUN WI PIEUPSIOS - 0x87FB: 0xB26B, //HANGUL SYLLABLE NIEUN WI SIOS - 0x87FC: 0xB26C, //HANGUL SYLLABLE NIEUN WI SSANGSIOS - 0x87FD: 0xB26D, //HANGUL SYLLABLE NIEUN WI IEUNG - 0x87FE: 0xB26E, //HANGUL SYLLABLE NIEUN WI CIEUC - 0x8841: 0xB26F, //HANGUL SYLLABLE NIEUN WI CHIEUCH - 0x8842: 0xB270, //HANGUL SYLLABLE NIEUN WI KHIEUKH - 0x8843: 0xB271, //HANGUL SYLLABLE NIEUN WI THIEUTH - 0x8844: 0xB272, //HANGUL SYLLABLE NIEUN WI PHIEUPH - 0x8845: 0xB273, //HANGUL SYLLABLE NIEUN WI HIEUH - 0x8846: 0xB276, //HANGUL SYLLABLE NIEUN YU SSANGKIYEOK - 0x8847: 0xB277, //HANGUL SYLLABLE NIEUN YU KIYEOKSIOS - 0x8848: 0xB278, //HANGUL SYLLABLE NIEUN YU NIEUN - 0x8849: 0xB279, //HANGUL SYLLABLE NIEUN YU NIEUNCIEUC - 0x884A: 0xB27A, //HANGUL SYLLABLE NIEUN YU NIEUNHIEUH - 0x884B: 0xB27B, //HANGUL SYLLABLE NIEUN YU TIKEUT - 0x884C: 0xB27D, //HANGUL SYLLABLE NIEUN YU RIEULKIYEOK - 0x884D: 0xB27E, //HANGUL SYLLABLE NIEUN YU RIEULMIEUM - 0x884E: 0xB27F, //HANGUL SYLLABLE NIEUN YU RIEULPIEUP - 0x884F: 0xB280, //HANGUL SYLLABLE NIEUN YU RIEULSIOS - 0x8850: 0xB281, //HANGUL SYLLABLE NIEUN YU RIEULTHIEUTH - 0x8851: 0xB282, //HANGUL SYLLABLE NIEUN YU RIEULPHIEUPH - 0x8852: 0xB283, //HANGUL SYLLABLE NIEUN YU RIEULHIEUH - 0x8853: 0xB286, //HANGUL SYLLABLE NIEUN YU PIEUPSIOS - 0x8854: 0xB287, //HANGUL SYLLABLE NIEUN YU SIOS - 0x8855: 0xB288, //HANGUL SYLLABLE NIEUN YU SSANGSIOS - 0x8856: 0xB28A, //HANGUL SYLLABLE NIEUN YU CIEUC - 0x8857: 0xB28B, //HANGUL SYLLABLE NIEUN YU CHIEUCH - 0x8858: 0xB28C, //HANGUL SYLLABLE NIEUN YU KHIEUKH - 0x8859: 0xB28D, //HANGUL SYLLABLE NIEUN YU THIEUTH - 0x885A: 0xB28E, //HANGUL SYLLABLE NIEUN YU PHIEUPH - 0x8861: 0xB28F, //HANGUL SYLLABLE NIEUN YU HIEUH - 0x8862: 0xB292, //HANGUL SYLLABLE NIEUN EU SSANGKIYEOK - 0x8863: 0xB293, //HANGUL SYLLABLE NIEUN EU KIYEOKSIOS - 0x8864: 0xB295, //HANGUL SYLLABLE NIEUN EU NIEUNCIEUC - 0x8865: 0xB296, //HANGUL SYLLABLE NIEUN EU NIEUNHIEUH - 0x8866: 0xB297, //HANGUL SYLLABLE NIEUN EU TIKEUT - 0x8867: 0xB29B, //HANGUL SYLLABLE NIEUN EU RIEULPIEUP - 0x8868: 0xB29C, //HANGUL SYLLABLE NIEUN EU RIEULSIOS - 0x8869: 0xB29D, //HANGUL SYLLABLE NIEUN EU RIEULTHIEUTH - 0x886A: 0xB29E, //HANGUL SYLLABLE NIEUN EU RIEULPHIEUPH - 0x886B: 0xB29F, //HANGUL SYLLABLE NIEUN EU RIEULHIEUH - 0x886C: 0xB2A2, //HANGUL SYLLABLE NIEUN EU PIEUPSIOS - 0x886D: 0xB2A4, //HANGUL SYLLABLE NIEUN EU SSANGSIOS - 0x886E: 0xB2A7, //HANGUL SYLLABLE NIEUN EU CHIEUCH - 0x886F: 0xB2A8, //HANGUL SYLLABLE NIEUN EU KHIEUKH - 0x8870: 0xB2A9, //HANGUL SYLLABLE NIEUN EU THIEUTH - 0x8871: 0xB2AB, //HANGUL SYLLABLE NIEUN EU HIEUH - 0x8872: 0xB2AD, //HANGUL SYLLABLE NIEUN YI KIYEOK - 0x8873: 0xB2AE, //HANGUL SYLLABLE NIEUN YI SSANGKIYEOK - 0x8874: 0xB2AF, //HANGUL SYLLABLE NIEUN YI KIYEOKSIOS - 0x8875: 0xB2B1, //HANGUL SYLLABLE NIEUN YI NIEUNCIEUC - 0x8876: 0xB2B2, //HANGUL SYLLABLE NIEUN YI NIEUNHIEUH - 0x8877: 0xB2B3, //HANGUL SYLLABLE NIEUN YI TIKEUT - 0x8878: 0xB2B5, //HANGUL SYLLABLE NIEUN YI RIEULKIYEOK - 0x8879: 0xB2B6, //HANGUL SYLLABLE NIEUN YI RIEULMIEUM - 0x887A: 0xB2B7, //HANGUL SYLLABLE NIEUN YI RIEULPIEUP - 0x8881: 0xB2B8, //HANGUL SYLLABLE NIEUN YI RIEULSIOS - 0x8882: 0xB2B9, //HANGUL SYLLABLE NIEUN YI RIEULTHIEUTH - 0x8883: 0xB2BA, //HANGUL SYLLABLE NIEUN YI RIEULPHIEUPH - 0x8884: 0xB2BB, //HANGUL SYLLABLE NIEUN YI RIEULHIEUH - 0x8885: 0xB2BC, //HANGUL SYLLABLE NIEUN YI MIEUM - 0x8886: 0xB2BD, //HANGUL SYLLABLE NIEUN YI PIEUP - 0x8887: 0xB2BE, //HANGUL SYLLABLE NIEUN YI PIEUPSIOS - 0x8888: 0xB2BF, //HANGUL SYLLABLE NIEUN YI SIOS - 0x8889: 0xB2C0, //HANGUL SYLLABLE NIEUN YI SSANGSIOS - 0x888A: 0xB2C1, //HANGUL SYLLABLE NIEUN YI IEUNG - 0x888B: 0xB2C2, //HANGUL SYLLABLE NIEUN YI CIEUC - 0x888C: 0xB2C3, //HANGUL SYLLABLE NIEUN YI CHIEUCH - 0x888D: 0xB2C4, //HANGUL SYLLABLE NIEUN YI KHIEUKH - 0x888E: 0xB2C5, //HANGUL SYLLABLE NIEUN YI THIEUTH - 0x888F: 0xB2C6, //HANGUL SYLLABLE NIEUN YI PHIEUPH - 0x8890: 0xB2C7, //HANGUL SYLLABLE NIEUN YI HIEUH - 0x8891: 0xB2CA, //HANGUL SYLLABLE NIEUN I SSANGKIYEOK - 0x8892: 0xB2CB, //HANGUL SYLLABLE NIEUN I KIYEOKSIOS - 0x8893: 0xB2CD, //HANGUL SYLLABLE NIEUN I NIEUNCIEUC - 0x8894: 0xB2CE, //HANGUL SYLLABLE NIEUN I NIEUNHIEUH - 0x8895: 0xB2CF, //HANGUL SYLLABLE NIEUN I TIKEUT - 0x8896: 0xB2D1, //HANGUL SYLLABLE NIEUN I RIEULKIYEOK - 0x8897: 0xB2D3, //HANGUL SYLLABLE NIEUN I RIEULPIEUP - 0x8898: 0xB2D4, //HANGUL SYLLABLE NIEUN I RIEULSIOS - 0x8899: 0xB2D5, //HANGUL SYLLABLE NIEUN I RIEULTHIEUTH - 0x889A: 0xB2D6, //HANGUL SYLLABLE NIEUN I RIEULPHIEUPH - 0x889B: 0xB2D7, //HANGUL SYLLABLE NIEUN I RIEULHIEUH - 0x889C: 0xB2DA, //HANGUL SYLLABLE NIEUN I PIEUPSIOS - 0x889D: 0xB2DC, //HANGUL SYLLABLE NIEUN I SSANGSIOS - 0x889E: 0xB2DE, //HANGUL SYLLABLE NIEUN I CIEUC - 0x889F: 0xB2DF, //HANGUL SYLLABLE NIEUN I CHIEUCH - 0x88A0: 0xB2E0, //HANGUL SYLLABLE NIEUN I KHIEUKH - 0x88A1: 0xB2E1, //HANGUL SYLLABLE NIEUN I THIEUTH - 0x88A2: 0xB2E3, //HANGUL SYLLABLE NIEUN I HIEUH - 0x88A3: 0xB2E7, //HANGUL SYLLABLE TIKEUT A KIYEOKSIOS - 0x88A4: 0xB2E9, //HANGUL SYLLABLE TIKEUT A NIEUNCIEUC - 0x88A5: 0xB2EA, //HANGUL SYLLABLE TIKEUT A NIEUNHIEUH - 0x88A6: 0xB2F0, //HANGUL SYLLABLE TIKEUT A RIEULSIOS - 0x88A7: 0xB2F1, //HANGUL SYLLABLE TIKEUT A RIEULTHIEUTH - 0x88A8: 0xB2F2, //HANGUL SYLLABLE TIKEUT A RIEULPHIEUPH - 0x88A9: 0xB2F6, //HANGUL SYLLABLE TIKEUT A PIEUPSIOS - 0x88AA: 0xB2FC, //HANGUL SYLLABLE TIKEUT A KHIEUKH - 0x88AB: 0xB2FD, //HANGUL SYLLABLE TIKEUT A THIEUTH - 0x88AC: 0xB2FE, //HANGUL SYLLABLE TIKEUT A PHIEUPH - 0x88AD: 0xB302, //HANGUL SYLLABLE TIKEUT AE SSANGKIYEOK - 0x88AE: 0xB303, //HANGUL SYLLABLE TIKEUT AE KIYEOKSIOS - 0x88AF: 0xB305, //HANGUL SYLLABLE TIKEUT AE NIEUNCIEUC - 0x88B0: 0xB306, //HANGUL SYLLABLE TIKEUT AE NIEUNHIEUH - 0x88B1: 0xB307, //HANGUL SYLLABLE TIKEUT AE TIKEUT - 0x88B2: 0xB309, //HANGUL SYLLABLE TIKEUT AE RIEULKIYEOK - 0x88B3: 0xB30A, //HANGUL SYLLABLE TIKEUT AE RIEULMIEUM - 0x88B4: 0xB30B, //HANGUL SYLLABLE TIKEUT AE RIEULPIEUP - 0x88B5: 0xB30C, //HANGUL SYLLABLE TIKEUT AE RIEULSIOS - 0x88B6: 0xB30D, //HANGUL SYLLABLE TIKEUT AE RIEULTHIEUTH - 0x88B7: 0xB30E, //HANGUL SYLLABLE TIKEUT AE RIEULPHIEUPH - 0x88B8: 0xB30F, //HANGUL SYLLABLE TIKEUT AE RIEULHIEUH - 0x88B9: 0xB312, //HANGUL SYLLABLE TIKEUT AE PIEUPSIOS - 0x88BA: 0xB316, //HANGUL SYLLABLE TIKEUT AE CIEUC - 0x88BB: 0xB317, //HANGUL SYLLABLE TIKEUT AE CHIEUCH - 0x88BC: 0xB318, //HANGUL SYLLABLE TIKEUT AE KHIEUKH - 0x88BD: 0xB319, //HANGUL SYLLABLE TIKEUT AE THIEUTH - 0x88BE: 0xB31A, //HANGUL SYLLABLE TIKEUT AE PHIEUPH - 0x88BF: 0xB31B, //HANGUL SYLLABLE TIKEUT AE HIEUH - 0x88C0: 0xB31D, //HANGUL SYLLABLE TIKEUT YA KIYEOK - 0x88C1: 0xB31E, //HANGUL SYLLABLE TIKEUT YA SSANGKIYEOK - 0x88C2: 0xB31F, //HANGUL SYLLABLE TIKEUT YA KIYEOKSIOS - 0x88C3: 0xB320, //HANGUL SYLLABLE TIKEUT YA NIEUN - 0x88C4: 0xB321, //HANGUL SYLLABLE TIKEUT YA NIEUNCIEUC - 0x88C5: 0xB322, //HANGUL SYLLABLE TIKEUT YA NIEUNHIEUH - 0x88C6: 0xB323, //HANGUL SYLLABLE TIKEUT YA TIKEUT - 0x88C7: 0xB324, //HANGUL SYLLABLE TIKEUT YA RIEUL - 0x88C8: 0xB325, //HANGUL SYLLABLE TIKEUT YA RIEULKIYEOK - 0x88C9: 0xB326, //HANGUL SYLLABLE TIKEUT YA RIEULMIEUM - 0x88CA: 0xB327, //HANGUL SYLLABLE TIKEUT YA RIEULPIEUP - 0x88CB: 0xB328, //HANGUL SYLLABLE TIKEUT YA RIEULSIOS - 0x88CC: 0xB329, //HANGUL SYLLABLE TIKEUT YA RIEULTHIEUTH - 0x88CD: 0xB32A, //HANGUL SYLLABLE TIKEUT YA RIEULPHIEUPH - 0x88CE: 0xB32B, //HANGUL SYLLABLE TIKEUT YA RIEULHIEUH - 0x88CF: 0xB32C, //HANGUL SYLLABLE TIKEUT YA MIEUM - 0x88D0: 0xB32D, //HANGUL SYLLABLE TIKEUT YA PIEUP - 0x88D1: 0xB32E, //HANGUL SYLLABLE TIKEUT YA PIEUPSIOS - 0x88D2: 0xB32F, //HANGUL SYLLABLE TIKEUT YA SIOS - 0x88D3: 0xB330, //HANGUL SYLLABLE TIKEUT YA SSANGSIOS - 0x88D4: 0xB331, //HANGUL SYLLABLE TIKEUT YA IEUNG - 0x88D5: 0xB332, //HANGUL SYLLABLE TIKEUT YA CIEUC - 0x88D6: 0xB333, //HANGUL SYLLABLE TIKEUT YA CHIEUCH - 0x88D7: 0xB334, //HANGUL SYLLABLE TIKEUT YA KHIEUKH - 0x88D8: 0xB335, //HANGUL SYLLABLE TIKEUT YA THIEUTH - 0x88D9: 0xB336, //HANGUL SYLLABLE TIKEUT YA PHIEUPH - 0x88DA: 0xB337, //HANGUL SYLLABLE TIKEUT YA HIEUH - 0x88DB: 0xB338, //HANGUL SYLLABLE TIKEUT YAE - 0x88DC: 0xB339, //HANGUL SYLLABLE TIKEUT YAE KIYEOK - 0x88DD: 0xB33A, //HANGUL SYLLABLE TIKEUT YAE SSANGKIYEOK - 0x88DE: 0xB33B, //HANGUL SYLLABLE TIKEUT YAE KIYEOKSIOS - 0x88DF: 0xB33C, //HANGUL SYLLABLE TIKEUT YAE NIEUN - 0x88E0: 0xB33D, //HANGUL SYLLABLE TIKEUT YAE NIEUNCIEUC - 0x88E1: 0xB33E, //HANGUL SYLLABLE TIKEUT YAE NIEUNHIEUH - 0x88E2: 0xB33F, //HANGUL SYLLABLE TIKEUT YAE TIKEUT - 0x88E3: 0xB340, //HANGUL SYLLABLE TIKEUT YAE RIEUL - 0x88E4: 0xB341, //HANGUL SYLLABLE TIKEUT YAE RIEULKIYEOK - 0x88E5: 0xB342, //HANGUL SYLLABLE TIKEUT YAE RIEULMIEUM - 0x88E6: 0xB343, //HANGUL SYLLABLE TIKEUT YAE RIEULPIEUP - 0x88E7: 0xB344, //HANGUL SYLLABLE TIKEUT YAE RIEULSIOS - 0x88E8: 0xB345, //HANGUL SYLLABLE TIKEUT YAE RIEULTHIEUTH - 0x88E9: 0xB346, //HANGUL SYLLABLE TIKEUT YAE RIEULPHIEUPH - 0x88EA: 0xB347, //HANGUL SYLLABLE TIKEUT YAE RIEULHIEUH - 0x88EB: 0xB348, //HANGUL SYLLABLE TIKEUT YAE MIEUM - 0x88EC: 0xB349, //HANGUL SYLLABLE TIKEUT YAE PIEUP - 0x88ED: 0xB34A, //HANGUL SYLLABLE TIKEUT YAE PIEUPSIOS - 0x88EE: 0xB34B, //HANGUL SYLLABLE TIKEUT YAE SIOS - 0x88EF: 0xB34C, //HANGUL SYLLABLE TIKEUT YAE SSANGSIOS - 0x88F0: 0xB34D, //HANGUL SYLLABLE TIKEUT YAE IEUNG - 0x88F1: 0xB34E, //HANGUL SYLLABLE TIKEUT YAE CIEUC - 0x88F2: 0xB34F, //HANGUL SYLLABLE TIKEUT YAE CHIEUCH - 0x88F3: 0xB350, //HANGUL SYLLABLE TIKEUT YAE KHIEUKH - 0x88F4: 0xB351, //HANGUL SYLLABLE TIKEUT YAE THIEUTH - 0x88F5: 0xB352, //HANGUL SYLLABLE TIKEUT YAE PHIEUPH - 0x88F6: 0xB353, //HANGUL SYLLABLE TIKEUT YAE HIEUH - 0x88F7: 0xB357, //HANGUL SYLLABLE TIKEUT EO KIYEOKSIOS - 0x88F8: 0xB359, //HANGUL SYLLABLE TIKEUT EO NIEUNCIEUC - 0x88F9: 0xB35A, //HANGUL SYLLABLE TIKEUT EO NIEUNHIEUH - 0x88FA: 0xB35D, //HANGUL SYLLABLE TIKEUT EO RIEULKIYEOK - 0x88FB: 0xB360, //HANGUL SYLLABLE TIKEUT EO RIEULSIOS - 0x88FC: 0xB361, //HANGUL SYLLABLE TIKEUT EO RIEULTHIEUTH - 0x88FD: 0xB362, //HANGUL SYLLABLE TIKEUT EO RIEULPHIEUPH - 0x88FE: 0xB363, //HANGUL SYLLABLE TIKEUT EO RIEULHIEUH - 0x8941: 0xB366, //HANGUL SYLLABLE TIKEUT EO PIEUPSIOS - 0x8942: 0xB368, //HANGUL SYLLABLE TIKEUT EO SSANGSIOS - 0x8943: 0xB36A, //HANGUL SYLLABLE TIKEUT EO CIEUC - 0x8944: 0xB36C, //HANGUL SYLLABLE TIKEUT EO KHIEUKH - 0x8945: 0xB36D, //HANGUL SYLLABLE TIKEUT EO THIEUTH - 0x8946: 0xB36F, //HANGUL SYLLABLE TIKEUT EO HIEUH - 0x8947: 0xB372, //HANGUL SYLLABLE TIKEUT E SSANGKIYEOK - 0x8948: 0xB373, //HANGUL SYLLABLE TIKEUT E KIYEOKSIOS - 0x8949: 0xB375, //HANGUL SYLLABLE TIKEUT E NIEUNCIEUC - 0x894A: 0xB376, //HANGUL SYLLABLE TIKEUT E NIEUNHIEUH - 0x894B: 0xB377, //HANGUL SYLLABLE TIKEUT E TIKEUT - 0x894C: 0xB379, //HANGUL SYLLABLE TIKEUT E RIEULKIYEOK - 0x894D: 0xB37A, //HANGUL SYLLABLE TIKEUT E RIEULMIEUM - 0x894E: 0xB37B, //HANGUL SYLLABLE TIKEUT E RIEULPIEUP - 0x894F: 0xB37C, //HANGUL SYLLABLE TIKEUT E RIEULSIOS - 0x8950: 0xB37D, //HANGUL SYLLABLE TIKEUT E RIEULTHIEUTH - 0x8951: 0xB37E, //HANGUL SYLLABLE TIKEUT E RIEULPHIEUPH - 0x8952: 0xB37F, //HANGUL SYLLABLE TIKEUT E RIEULHIEUH - 0x8953: 0xB382, //HANGUL SYLLABLE TIKEUT E PIEUPSIOS - 0x8954: 0xB386, //HANGUL SYLLABLE TIKEUT E CIEUC - 0x8955: 0xB387, //HANGUL SYLLABLE TIKEUT E CHIEUCH - 0x8956: 0xB388, //HANGUL SYLLABLE TIKEUT E KHIEUKH - 0x8957: 0xB389, //HANGUL SYLLABLE TIKEUT E THIEUTH - 0x8958: 0xB38A, //HANGUL SYLLABLE TIKEUT E PHIEUPH - 0x8959: 0xB38B, //HANGUL SYLLABLE TIKEUT E HIEUH - 0x895A: 0xB38D, //HANGUL SYLLABLE TIKEUT YEO KIYEOK - 0x8961: 0xB38E, //HANGUL SYLLABLE TIKEUT YEO SSANGKIYEOK - 0x8962: 0xB38F, //HANGUL SYLLABLE TIKEUT YEO KIYEOKSIOS - 0x8963: 0xB391, //HANGUL SYLLABLE TIKEUT YEO NIEUNCIEUC - 0x8964: 0xB392, //HANGUL SYLLABLE TIKEUT YEO NIEUNHIEUH - 0x8965: 0xB393, //HANGUL SYLLABLE TIKEUT YEO TIKEUT - 0x8966: 0xB395, //HANGUL SYLLABLE TIKEUT YEO RIEULKIYEOK - 0x8967: 0xB396, //HANGUL SYLLABLE TIKEUT YEO RIEULMIEUM - 0x8968: 0xB397, //HANGUL SYLLABLE TIKEUT YEO RIEULPIEUP - 0x8969: 0xB398, //HANGUL SYLLABLE TIKEUT YEO RIEULSIOS - 0x896A: 0xB399, //HANGUL SYLLABLE TIKEUT YEO RIEULTHIEUTH - 0x896B: 0xB39A, //HANGUL SYLLABLE TIKEUT YEO RIEULPHIEUPH - 0x896C: 0xB39B, //HANGUL SYLLABLE TIKEUT YEO RIEULHIEUH - 0x896D: 0xB39C, //HANGUL SYLLABLE TIKEUT YEO MIEUM - 0x896E: 0xB39D, //HANGUL SYLLABLE TIKEUT YEO PIEUP - 0x896F: 0xB39E, //HANGUL SYLLABLE TIKEUT YEO PIEUPSIOS - 0x8970: 0xB39F, //HANGUL SYLLABLE TIKEUT YEO SIOS - 0x8971: 0xB3A2, //HANGUL SYLLABLE TIKEUT YEO CIEUC - 0x8972: 0xB3A3, //HANGUL SYLLABLE TIKEUT YEO CHIEUCH - 0x8973: 0xB3A4, //HANGUL SYLLABLE TIKEUT YEO KHIEUKH - 0x8974: 0xB3A5, //HANGUL SYLLABLE TIKEUT YEO THIEUTH - 0x8975: 0xB3A6, //HANGUL SYLLABLE TIKEUT YEO PHIEUPH - 0x8976: 0xB3A7, //HANGUL SYLLABLE TIKEUT YEO HIEUH - 0x8977: 0xB3A9, //HANGUL SYLLABLE TIKEUT YE KIYEOK - 0x8978: 0xB3AA, //HANGUL SYLLABLE TIKEUT YE SSANGKIYEOK - 0x8979: 0xB3AB, //HANGUL SYLLABLE TIKEUT YE KIYEOKSIOS - 0x897A: 0xB3AD, //HANGUL SYLLABLE TIKEUT YE NIEUNCIEUC - 0x8981: 0xB3AE, //HANGUL SYLLABLE TIKEUT YE NIEUNHIEUH - 0x8982: 0xB3AF, //HANGUL SYLLABLE TIKEUT YE TIKEUT - 0x8983: 0xB3B0, //HANGUL SYLLABLE TIKEUT YE RIEUL - 0x8984: 0xB3B1, //HANGUL SYLLABLE TIKEUT YE RIEULKIYEOK - 0x8985: 0xB3B2, //HANGUL SYLLABLE TIKEUT YE RIEULMIEUM - 0x8986: 0xB3B3, //HANGUL SYLLABLE TIKEUT YE RIEULPIEUP - 0x8987: 0xB3B4, //HANGUL SYLLABLE TIKEUT YE RIEULSIOS - 0x8988: 0xB3B5, //HANGUL SYLLABLE TIKEUT YE RIEULTHIEUTH - 0x8989: 0xB3B6, //HANGUL SYLLABLE TIKEUT YE RIEULPHIEUPH - 0x898A: 0xB3B7, //HANGUL SYLLABLE TIKEUT YE RIEULHIEUH - 0x898B: 0xB3B8, //HANGUL SYLLABLE TIKEUT YE MIEUM - 0x898C: 0xB3B9, //HANGUL SYLLABLE TIKEUT YE PIEUP - 0x898D: 0xB3BA, //HANGUL SYLLABLE TIKEUT YE PIEUPSIOS - 0x898E: 0xB3BB, //HANGUL SYLLABLE TIKEUT YE SIOS - 0x898F: 0xB3BC, //HANGUL SYLLABLE TIKEUT YE SSANGSIOS - 0x8990: 0xB3BD, //HANGUL SYLLABLE TIKEUT YE IEUNG - 0x8991: 0xB3BE, //HANGUL SYLLABLE TIKEUT YE CIEUC - 0x8992: 0xB3BF, //HANGUL SYLLABLE TIKEUT YE CHIEUCH - 0x8993: 0xB3C0, //HANGUL SYLLABLE TIKEUT YE KHIEUKH - 0x8994: 0xB3C1, //HANGUL SYLLABLE TIKEUT YE THIEUTH - 0x8995: 0xB3C2, //HANGUL SYLLABLE TIKEUT YE PHIEUPH - 0x8996: 0xB3C3, //HANGUL SYLLABLE TIKEUT YE HIEUH - 0x8997: 0xB3C6, //HANGUL SYLLABLE TIKEUT O SSANGKIYEOK - 0x8998: 0xB3C7, //HANGUL SYLLABLE TIKEUT O KIYEOKSIOS - 0x8999: 0xB3C9, //HANGUL SYLLABLE TIKEUT O NIEUNCIEUC - 0x899A: 0xB3CA, //HANGUL SYLLABLE TIKEUT O NIEUNHIEUH - 0x899B: 0xB3CD, //HANGUL SYLLABLE TIKEUT O RIEULKIYEOK - 0x899C: 0xB3CF, //HANGUL SYLLABLE TIKEUT O RIEULPIEUP - 0x899D: 0xB3D1, //HANGUL SYLLABLE TIKEUT O RIEULTHIEUTH - 0x899E: 0xB3D2, //HANGUL SYLLABLE TIKEUT O RIEULPHIEUPH - 0x899F: 0xB3D3, //HANGUL SYLLABLE TIKEUT O RIEULHIEUH - 0x89A0: 0xB3D6, //HANGUL SYLLABLE TIKEUT O PIEUPSIOS - 0x89A1: 0xB3D8, //HANGUL SYLLABLE TIKEUT O SSANGSIOS - 0x89A2: 0xB3DA, //HANGUL SYLLABLE TIKEUT O CIEUC - 0x89A3: 0xB3DC, //HANGUL SYLLABLE TIKEUT O KHIEUKH - 0x89A4: 0xB3DE, //HANGUL SYLLABLE TIKEUT O PHIEUPH - 0x89A5: 0xB3DF, //HANGUL SYLLABLE TIKEUT O HIEUH - 0x89A6: 0xB3E1, //HANGUL SYLLABLE TIKEUT WA KIYEOK - 0x89A7: 0xB3E2, //HANGUL SYLLABLE TIKEUT WA SSANGKIYEOK - 0x89A8: 0xB3E3, //HANGUL SYLLABLE TIKEUT WA KIYEOKSIOS - 0x89A9: 0xB3E5, //HANGUL SYLLABLE TIKEUT WA NIEUNCIEUC - 0x89AA: 0xB3E6, //HANGUL SYLLABLE TIKEUT WA NIEUNHIEUH - 0x89AB: 0xB3E7, //HANGUL SYLLABLE TIKEUT WA TIKEUT - 0x89AC: 0xB3E9, //HANGUL SYLLABLE TIKEUT WA RIEULKIYEOK - 0x89AD: 0xB3EA, //HANGUL SYLLABLE TIKEUT WA RIEULMIEUM - 0x89AE: 0xB3EB, //HANGUL SYLLABLE TIKEUT WA RIEULPIEUP - 0x89AF: 0xB3EC, //HANGUL SYLLABLE TIKEUT WA RIEULSIOS - 0x89B0: 0xB3ED, //HANGUL SYLLABLE TIKEUT WA RIEULTHIEUTH - 0x89B1: 0xB3EE, //HANGUL SYLLABLE TIKEUT WA RIEULPHIEUPH - 0x89B2: 0xB3EF, //HANGUL SYLLABLE TIKEUT WA RIEULHIEUH - 0x89B3: 0xB3F0, //HANGUL SYLLABLE TIKEUT WA MIEUM - 0x89B4: 0xB3F1, //HANGUL SYLLABLE TIKEUT WA PIEUP - 0x89B5: 0xB3F2, //HANGUL SYLLABLE TIKEUT WA PIEUPSIOS - 0x89B6: 0xB3F3, //HANGUL SYLLABLE TIKEUT WA SIOS - 0x89B7: 0xB3F4, //HANGUL SYLLABLE TIKEUT WA SSANGSIOS - 0x89B8: 0xB3F5, //HANGUL SYLLABLE TIKEUT WA IEUNG - 0x89B9: 0xB3F6, //HANGUL SYLLABLE TIKEUT WA CIEUC - 0x89BA: 0xB3F7, //HANGUL SYLLABLE TIKEUT WA CHIEUCH - 0x89BB: 0xB3F8, //HANGUL SYLLABLE TIKEUT WA KHIEUKH - 0x89BC: 0xB3F9, //HANGUL SYLLABLE TIKEUT WA THIEUTH - 0x89BD: 0xB3FA, //HANGUL SYLLABLE TIKEUT WA PHIEUPH - 0x89BE: 0xB3FB, //HANGUL SYLLABLE TIKEUT WA HIEUH - 0x89BF: 0xB3FD, //HANGUL SYLLABLE TIKEUT WAE KIYEOK - 0x89C0: 0xB3FE, //HANGUL SYLLABLE TIKEUT WAE SSANGKIYEOK - 0x89C1: 0xB3FF, //HANGUL SYLLABLE TIKEUT WAE KIYEOKSIOS - 0x89C2: 0xB400, //HANGUL SYLLABLE TIKEUT WAE NIEUN - 0x89C3: 0xB401, //HANGUL SYLLABLE TIKEUT WAE NIEUNCIEUC - 0x89C4: 0xB402, //HANGUL SYLLABLE TIKEUT WAE NIEUNHIEUH - 0x89C5: 0xB403, //HANGUL SYLLABLE TIKEUT WAE TIKEUT - 0x89C6: 0xB404, //HANGUL SYLLABLE TIKEUT WAE RIEUL - 0x89C7: 0xB405, //HANGUL SYLLABLE TIKEUT WAE RIEULKIYEOK - 0x89C8: 0xB406, //HANGUL SYLLABLE TIKEUT WAE RIEULMIEUM - 0x89C9: 0xB407, //HANGUL SYLLABLE TIKEUT WAE RIEULPIEUP - 0x89CA: 0xB408, //HANGUL SYLLABLE TIKEUT WAE RIEULSIOS - 0x89CB: 0xB409, //HANGUL SYLLABLE TIKEUT WAE RIEULTHIEUTH - 0x89CC: 0xB40A, //HANGUL SYLLABLE TIKEUT WAE RIEULPHIEUPH - 0x89CD: 0xB40B, //HANGUL SYLLABLE TIKEUT WAE RIEULHIEUH - 0x89CE: 0xB40C, //HANGUL SYLLABLE TIKEUT WAE MIEUM - 0x89CF: 0xB40D, //HANGUL SYLLABLE TIKEUT WAE PIEUP - 0x89D0: 0xB40E, //HANGUL SYLLABLE TIKEUT WAE PIEUPSIOS - 0x89D1: 0xB40F, //HANGUL SYLLABLE TIKEUT WAE SIOS - 0x89D2: 0xB411, //HANGUL SYLLABLE TIKEUT WAE IEUNG - 0x89D3: 0xB412, //HANGUL SYLLABLE TIKEUT WAE CIEUC - 0x89D4: 0xB413, //HANGUL SYLLABLE TIKEUT WAE CHIEUCH - 0x89D5: 0xB414, //HANGUL SYLLABLE TIKEUT WAE KHIEUKH - 0x89D6: 0xB415, //HANGUL SYLLABLE TIKEUT WAE THIEUTH - 0x89D7: 0xB416, //HANGUL SYLLABLE TIKEUT WAE PHIEUPH - 0x89D8: 0xB417, //HANGUL SYLLABLE TIKEUT WAE HIEUH - 0x89D9: 0xB419, //HANGUL SYLLABLE TIKEUT OE KIYEOK - 0x89DA: 0xB41A, //HANGUL SYLLABLE TIKEUT OE SSANGKIYEOK - 0x89DB: 0xB41B, //HANGUL SYLLABLE TIKEUT OE KIYEOKSIOS - 0x89DC: 0xB41D, //HANGUL SYLLABLE TIKEUT OE NIEUNCIEUC - 0x89DD: 0xB41E, //HANGUL SYLLABLE TIKEUT OE NIEUNHIEUH - 0x89DE: 0xB41F, //HANGUL SYLLABLE TIKEUT OE TIKEUT - 0x89DF: 0xB421, //HANGUL SYLLABLE TIKEUT OE RIEULKIYEOK - 0x89E0: 0xB422, //HANGUL SYLLABLE TIKEUT OE RIEULMIEUM - 0x89E1: 0xB423, //HANGUL SYLLABLE TIKEUT OE RIEULPIEUP - 0x89E2: 0xB424, //HANGUL SYLLABLE TIKEUT OE RIEULSIOS - 0x89E3: 0xB425, //HANGUL SYLLABLE TIKEUT OE RIEULTHIEUTH - 0x89E4: 0xB426, //HANGUL SYLLABLE TIKEUT OE RIEULPHIEUPH - 0x89E5: 0xB427, //HANGUL SYLLABLE TIKEUT OE RIEULHIEUH - 0x89E6: 0xB42A, //HANGUL SYLLABLE TIKEUT OE PIEUPSIOS - 0x89E7: 0xB42C, //HANGUL SYLLABLE TIKEUT OE SSANGSIOS - 0x89E8: 0xB42D, //HANGUL SYLLABLE TIKEUT OE IEUNG - 0x89E9: 0xB42E, //HANGUL SYLLABLE TIKEUT OE CIEUC - 0x89EA: 0xB42F, //HANGUL SYLLABLE TIKEUT OE CHIEUCH - 0x89EB: 0xB430, //HANGUL SYLLABLE TIKEUT OE KHIEUKH - 0x89EC: 0xB431, //HANGUL SYLLABLE TIKEUT OE THIEUTH - 0x89ED: 0xB432, //HANGUL SYLLABLE TIKEUT OE PHIEUPH - 0x89EE: 0xB433, //HANGUL SYLLABLE TIKEUT OE HIEUH - 0x89EF: 0xB435, //HANGUL SYLLABLE TIKEUT YO KIYEOK - 0x89F0: 0xB436, //HANGUL SYLLABLE TIKEUT YO SSANGKIYEOK - 0x89F1: 0xB437, //HANGUL SYLLABLE TIKEUT YO KIYEOKSIOS - 0x89F2: 0xB438, //HANGUL SYLLABLE TIKEUT YO NIEUN - 0x89F3: 0xB439, //HANGUL SYLLABLE TIKEUT YO NIEUNCIEUC - 0x89F4: 0xB43A, //HANGUL SYLLABLE TIKEUT YO NIEUNHIEUH - 0x89F5: 0xB43B, //HANGUL SYLLABLE TIKEUT YO TIKEUT - 0x89F6: 0xB43C, //HANGUL SYLLABLE TIKEUT YO RIEUL - 0x89F7: 0xB43D, //HANGUL SYLLABLE TIKEUT YO RIEULKIYEOK - 0x89F8: 0xB43E, //HANGUL SYLLABLE TIKEUT YO RIEULMIEUM - 0x89F9: 0xB43F, //HANGUL SYLLABLE TIKEUT YO RIEULPIEUP - 0x89FA: 0xB440, //HANGUL SYLLABLE TIKEUT YO RIEULSIOS - 0x89FB: 0xB441, //HANGUL SYLLABLE TIKEUT YO RIEULTHIEUTH - 0x89FC: 0xB442, //HANGUL SYLLABLE TIKEUT YO RIEULPHIEUPH - 0x89FD: 0xB443, //HANGUL SYLLABLE TIKEUT YO RIEULHIEUH - 0x89FE: 0xB444, //HANGUL SYLLABLE TIKEUT YO MIEUM - 0x8A41: 0xB445, //HANGUL SYLLABLE TIKEUT YO PIEUP - 0x8A42: 0xB446, //HANGUL SYLLABLE TIKEUT YO PIEUPSIOS - 0x8A43: 0xB447, //HANGUL SYLLABLE TIKEUT YO SIOS - 0x8A44: 0xB448, //HANGUL SYLLABLE TIKEUT YO SSANGSIOS - 0x8A45: 0xB449, //HANGUL SYLLABLE TIKEUT YO IEUNG - 0x8A46: 0xB44A, //HANGUL SYLLABLE TIKEUT YO CIEUC - 0x8A47: 0xB44B, //HANGUL SYLLABLE TIKEUT YO CHIEUCH - 0x8A48: 0xB44C, //HANGUL SYLLABLE TIKEUT YO KHIEUKH - 0x8A49: 0xB44D, //HANGUL SYLLABLE TIKEUT YO THIEUTH - 0x8A4A: 0xB44E, //HANGUL SYLLABLE TIKEUT YO PHIEUPH - 0x8A4B: 0xB44F, //HANGUL SYLLABLE TIKEUT YO HIEUH - 0x8A4C: 0xB452, //HANGUL SYLLABLE TIKEUT U SSANGKIYEOK - 0x8A4D: 0xB453, //HANGUL SYLLABLE TIKEUT U KIYEOKSIOS - 0x8A4E: 0xB455, //HANGUL SYLLABLE TIKEUT U NIEUNCIEUC - 0x8A4F: 0xB456, //HANGUL SYLLABLE TIKEUT U NIEUNHIEUH - 0x8A50: 0xB457, //HANGUL SYLLABLE TIKEUT U TIKEUT - 0x8A51: 0xB459, //HANGUL SYLLABLE TIKEUT U RIEULKIYEOK - 0x8A52: 0xB45A, //HANGUL SYLLABLE TIKEUT U RIEULMIEUM - 0x8A53: 0xB45B, //HANGUL SYLLABLE TIKEUT U RIEULPIEUP - 0x8A54: 0xB45C, //HANGUL SYLLABLE TIKEUT U RIEULSIOS - 0x8A55: 0xB45D, //HANGUL SYLLABLE TIKEUT U RIEULTHIEUTH - 0x8A56: 0xB45E, //HANGUL SYLLABLE TIKEUT U RIEULPHIEUPH - 0x8A57: 0xB45F, //HANGUL SYLLABLE TIKEUT U RIEULHIEUH - 0x8A58: 0xB462, //HANGUL SYLLABLE TIKEUT U PIEUPSIOS - 0x8A59: 0xB464, //HANGUL SYLLABLE TIKEUT U SSANGSIOS - 0x8A5A: 0xB466, //HANGUL SYLLABLE TIKEUT U CIEUC - 0x8A61: 0xB467, //HANGUL SYLLABLE TIKEUT U CHIEUCH - 0x8A62: 0xB468, //HANGUL SYLLABLE TIKEUT U KHIEUKH - 0x8A63: 0xB469, //HANGUL SYLLABLE TIKEUT U THIEUTH - 0x8A64: 0xB46A, //HANGUL SYLLABLE TIKEUT U PHIEUPH - 0x8A65: 0xB46B, //HANGUL SYLLABLE TIKEUT U HIEUH - 0x8A66: 0xB46D, //HANGUL SYLLABLE TIKEUT WEO KIYEOK - 0x8A67: 0xB46E, //HANGUL SYLLABLE TIKEUT WEO SSANGKIYEOK - 0x8A68: 0xB46F, //HANGUL SYLLABLE TIKEUT WEO KIYEOKSIOS - 0x8A69: 0xB470, //HANGUL SYLLABLE TIKEUT WEO NIEUN - 0x8A6A: 0xB471, //HANGUL SYLLABLE TIKEUT WEO NIEUNCIEUC - 0x8A6B: 0xB472, //HANGUL SYLLABLE TIKEUT WEO NIEUNHIEUH - 0x8A6C: 0xB473, //HANGUL SYLLABLE TIKEUT WEO TIKEUT - 0x8A6D: 0xB474, //HANGUL SYLLABLE TIKEUT WEO RIEUL - 0x8A6E: 0xB475, //HANGUL SYLLABLE TIKEUT WEO RIEULKIYEOK - 0x8A6F: 0xB476, //HANGUL SYLLABLE TIKEUT WEO RIEULMIEUM - 0x8A70: 0xB477, //HANGUL SYLLABLE TIKEUT WEO RIEULPIEUP - 0x8A71: 0xB478, //HANGUL SYLLABLE TIKEUT WEO RIEULSIOS - 0x8A72: 0xB479, //HANGUL SYLLABLE TIKEUT WEO RIEULTHIEUTH - 0x8A73: 0xB47A, //HANGUL SYLLABLE TIKEUT WEO RIEULPHIEUPH - 0x8A74: 0xB47B, //HANGUL SYLLABLE TIKEUT WEO RIEULHIEUH - 0x8A75: 0xB47C, //HANGUL SYLLABLE TIKEUT WEO MIEUM - 0x8A76: 0xB47D, //HANGUL SYLLABLE TIKEUT WEO PIEUP - 0x8A77: 0xB47E, //HANGUL SYLLABLE TIKEUT WEO PIEUPSIOS - 0x8A78: 0xB47F, //HANGUL SYLLABLE TIKEUT WEO SIOS - 0x8A79: 0xB481, //HANGUL SYLLABLE TIKEUT WEO IEUNG - 0x8A7A: 0xB482, //HANGUL SYLLABLE TIKEUT WEO CIEUC - 0x8A81: 0xB483, //HANGUL SYLLABLE TIKEUT WEO CHIEUCH - 0x8A82: 0xB484, //HANGUL SYLLABLE TIKEUT WEO KHIEUKH - 0x8A83: 0xB485, //HANGUL SYLLABLE TIKEUT WEO THIEUTH - 0x8A84: 0xB486, //HANGUL SYLLABLE TIKEUT WEO PHIEUPH - 0x8A85: 0xB487, //HANGUL SYLLABLE TIKEUT WEO HIEUH - 0x8A86: 0xB489, //HANGUL SYLLABLE TIKEUT WE KIYEOK - 0x8A87: 0xB48A, //HANGUL SYLLABLE TIKEUT WE SSANGKIYEOK - 0x8A88: 0xB48B, //HANGUL SYLLABLE TIKEUT WE KIYEOKSIOS - 0x8A89: 0xB48C, //HANGUL SYLLABLE TIKEUT WE NIEUN - 0x8A8A: 0xB48D, //HANGUL SYLLABLE TIKEUT WE NIEUNCIEUC - 0x8A8B: 0xB48E, //HANGUL SYLLABLE TIKEUT WE NIEUNHIEUH - 0x8A8C: 0xB48F, //HANGUL SYLLABLE TIKEUT WE TIKEUT - 0x8A8D: 0xB490, //HANGUL SYLLABLE TIKEUT WE RIEUL - 0x8A8E: 0xB491, //HANGUL SYLLABLE TIKEUT WE RIEULKIYEOK - 0x8A8F: 0xB492, //HANGUL SYLLABLE TIKEUT WE RIEULMIEUM - 0x8A90: 0xB493, //HANGUL SYLLABLE TIKEUT WE RIEULPIEUP - 0x8A91: 0xB494, //HANGUL SYLLABLE TIKEUT WE RIEULSIOS - 0x8A92: 0xB495, //HANGUL SYLLABLE TIKEUT WE RIEULTHIEUTH - 0x8A93: 0xB496, //HANGUL SYLLABLE TIKEUT WE RIEULPHIEUPH - 0x8A94: 0xB497, //HANGUL SYLLABLE TIKEUT WE RIEULHIEUH - 0x8A95: 0xB498, //HANGUL SYLLABLE TIKEUT WE MIEUM - 0x8A96: 0xB499, //HANGUL SYLLABLE TIKEUT WE PIEUP - 0x8A97: 0xB49A, //HANGUL SYLLABLE TIKEUT WE PIEUPSIOS - 0x8A98: 0xB49B, //HANGUL SYLLABLE TIKEUT WE SIOS - 0x8A99: 0xB49C, //HANGUL SYLLABLE TIKEUT WE SSANGSIOS - 0x8A9A: 0xB49E, //HANGUL SYLLABLE TIKEUT WE CIEUC - 0x8A9B: 0xB49F, //HANGUL SYLLABLE TIKEUT WE CHIEUCH - 0x8A9C: 0xB4A0, //HANGUL SYLLABLE TIKEUT WE KHIEUKH - 0x8A9D: 0xB4A1, //HANGUL SYLLABLE TIKEUT WE THIEUTH - 0x8A9E: 0xB4A2, //HANGUL SYLLABLE TIKEUT WE PHIEUPH - 0x8A9F: 0xB4A3, //HANGUL SYLLABLE TIKEUT WE HIEUH - 0x8AA0: 0xB4A5, //HANGUL SYLLABLE TIKEUT WI KIYEOK - 0x8AA1: 0xB4A6, //HANGUL SYLLABLE TIKEUT WI SSANGKIYEOK - 0x8AA2: 0xB4A7, //HANGUL SYLLABLE TIKEUT WI KIYEOKSIOS - 0x8AA3: 0xB4A9, //HANGUL SYLLABLE TIKEUT WI NIEUNCIEUC - 0x8AA4: 0xB4AA, //HANGUL SYLLABLE TIKEUT WI NIEUNHIEUH - 0x8AA5: 0xB4AB, //HANGUL SYLLABLE TIKEUT WI TIKEUT - 0x8AA6: 0xB4AD, //HANGUL SYLLABLE TIKEUT WI RIEULKIYEOK - 0x8AA7: 0xB4AE, //HANGUL SYLLABLE TIKEUT WI RIEULMIEUM - 0x8AA8: 0xB4AF, //HANGUL SYLLABLE TIKEUT WI RIEULPIEUP - 0x8AA9: 0xB4B0, //HANGUL SYLLABLE TIKEUT WI RIEULSIOS - 0x8AAA: 0xB4B1, //HANGUL SYLLABLE TIKEUT WI RIEULTHIEUTH - 0x8AAB: 0xB4B2, //HANGUL SYLLABLE TIKEUT WI RIEULPHIEUPH - 0x8AAC: 0xB4B3, //HANGUL SYLLABLE TIKEUT WI RIEULHIEUH - 0x8AAD: 0xB4B4, //HANGUL SYLLABLE TIKEUT WI MIEUM - 0x8AAE: 0xB4B6, //HANGUL SYLLABLE TIKEUT WI PIEUPSIOS - 0x8AAF: 0xB4B8, //HANGUL SYLLABLE TIKEUT WI SSANGSIOS - 0x8AB0: 0xB4BA, //HANGUL SYLLABLE TIKEUT WI CIEUC - 0x8AB1: 0xB4BB, //HANGUL SYLLABLE TIKEUT WI CHIEUCH - 0x8AB2: 0xB4BC, //HANGUL SYLLABLE TIKEUT WI KHIEUKH - 0x8AB3: 0xB4BD, //HANGUL SYLLABLE TIKEUT WI THIEUTH - 0x8AB4: 0xB4BE, //HANGUL SYLLABLE TIKEUT WI PHIEUPH - 0x8AB5: 0xB4BF, //HANGUL SYLLABLE TIKEUT WI HIEUH - 0x8AB6: 0xB4C1, //HANGUL SYLLABLE TIKEUT YU KIYEOK - 0x8AB7: 0xB4C2, //HANGUL SYLLABLE TIKEUT YU SSANGKIYEOK - 0x8AB8: 0xB4C3, //HANGUL SYLLABLE TIKEUT YU KIYEOKSIOS - 0x8AB9: 0xB4C5, //HANGUL SYLLABLE TIKEUT YU NIEUNCIEUC - 0x8ABA: 0xB4C6, //HANGUL SYLLABLE TIKEUT YU NIEUNHIEUH - 0x8ABB: 0xB4C7, //HANGUL SYLLABLE TIKEUT YU TIKEUT - 0x8ABC: 0xB4C9, //HANGUL SYLLABLE TIKEUT YU RIEULKIYEOK - 0x8ABD: 0xB4CA, //HANGUL SYLLABLE TIKEUT YU RIEULMIEUM - 0x8ABE: 0xB4CB, //HANGUL SYLLABLE TIKEUT YU RIEULPIEUP - 0x8ABF: 0xB4CC, //HANGUL SYLLABLE TIKEUT YU RIEULSIOS - 0x8AC0: 0xB4CD, //HANGUL SYLLABLE TIKEUT YU RIEULTHIEUTH - 0x8AC1: 0xB4CE, //HANGUL SYLLABLE TIKEUT YU RIEULPHIEUPH - 0x8AC2: 0xB4CF, //HANGUL SYLLABLE TIKEUT YU RIEULHIEUH - 0x8AC3: 0xB4D1, //HANGUL SYLLABLE TIKEUT YU PIEUP - 0x8AC4: 0xB4D2, //HANGUL SYLLABLE TIKEUT YU PIEUPSIOS - 0x8AC5: 0xB4D3, //HANGUL SYLLABLE TIKEUT YU SIOS - 0x8AC6: 0xB4D4, //HANGUL SYLLABLE TIKEUT YU SSANGSIOS - 0x8AC7: 0xB4D6, //HANGUL SYLLABLE TIKEUT YU CIEUC - 0x8AC8: 0xB4D7, //HANGUL SYLLABLE TIKEUT YU CHIEUCH - 0x8AC9: 0xB4D8, //HANGUL SYLLABLE TIKEUT YU KHIEUKH - 0x8ACA: 0xB4D9, //HANGUL SYLLABLE TIKEUT YU THIEUTH - 0x8ACB: 0xB4DA, //HANGUL SYLLABLE TIKEUT YU PHIEUPH - 0x8ACC: 0xB4DB, //HANGUL SYLLABLE TIKEUT YU HIEUH - 0x8ACD: 0xB4DE, //HANGUL SYLLABLE TIKEUT EU SSANGKIYEOK - 0x8ACE: 0xB4DF, //HANGUL SYLLABLE TIKEUT EU KIYEOKSIOS - 0x8ACF: 0xB4E1, //HANGUL SYLLABLE TIKEUT EU NIEUNCIEUC - 0x8AD0: 0xB4E2, //HANGUL SYLLABLE TIKEUT EU NIEUNHIEUH - 0x8AD1: 0xB4E5, //HANGUL SYLLABLE TIKEUT EU RIEULKIYEOK - 0x8AD2: 0xB4E7, //HANGUL SYLLABLE TIKEUT EU RIEULPIEUP - 0x8AD3: 0xB4E8, //HANGUL SYLLABLE TIKEUT EU RIEULSIOS - 0x8AD4: 0xB4E9, //HANGUL SYLLABLE TIKEUT EU RIEULTHIEUTH - 0x8AD5: 0xB4EA, //HANGUL SYLLABLE TIKEUT EU RIEULPHIEUPH - 0x8AD6: 0xB4EB, //HANGUL SYLLABLE TIKEUT EU RIEULHIEUH - 0x8AD7: 0xB4EE, //HANGUL SYLLABLE TIKEUT EU PIEUPSIOS - 0x8AD8: 0xB4F0, //HANGUL SYLLABLE TIKEUT EU SSANGSIOS - 0x8AD9: 0xB4F2, //HANGUL SYLLABLE TIKEUT EU CIEUC - 0x8ADA: 0xB4F3, //HANGUL SYLLABLE TIKEUT EU CHIEUCH - 0x8ADB: 0xB4F4, //HANGUL SYLLABLE TIKEUT EU KHIEUKH - 0x8ADC: 0xB4F5, //HANGUL SYLLABLE TIKEUT EU THIEUTH - 0x8ADD: 0xB4F6, //HANGUL SYLLABLE TIKEUT EU PHIEUPH - 0x8ADE: 0xB4F7, //HANGUL SYLLABLE TIKEUT EU HIEUH - 0x8ADF: 0xB4F9, //HANGUL SYLLABLE TIKEUT YI KIYEOK - 0x8AE0: 0xB4FA, //HANGUL SYLLABLE TIKEUT YI SSANGKIYEOK - 0x8AE1: 0xB4FB, //HANGUL SYLLABLE TIKEUT YI KIYEOKSIOS - 0x8AE2: 0xB4FC, //HANGUL SYLLABLE TIKEUT YI NIEUN - 0x8AE3: 0xB4FD, //HANGUL SYLLABLE TIKEUT YI NIEUNCIEUC - 0x8AE4: 0xB4FE, //HANGUL SYLLABLE TIKEUT YI NIEUNHIEUH - 0x8AE5: 0xB4FF, //HANGUL SYLLABLE TIKEUT YI TIKEUT - 0x8AE6: 0xB500, //HANGUL SYLLABLE TIKEUT YI RIEUL - 0x8AE7: 0xB501, //HANGUL SYLLABLE TIKEUT YI RIEULKIYEOK - 0x8AE8: 0xB502, //HANGUL SYLLABLE TIKEUT YI RIEULMIEUM - 0x8AE9: 0xB503, //HANGUL SYLLABLE TIKEUT YI RIEULPIEUP - 0x8AEA: 0xB504, //HANGUL SYLLABLE TIKEUT YI RIEULSIOS - 0x8AEB: 0xB505, //HANGUL SYLLABLE TIKEUT YI RIEULTHIEUTH - 0x8AEC: 0xB506, //HANGUL SYLLABLE TIKEUT YI RIEULPHIEUPH - 0x8AED: 0xB507, //HANGUL SYLLABLE TIKEUT YI RIEULHIEUH - 0x8AEE: 0xB508, //HANGUL SYLLABLE TIKEUT YI MIEUM - 0x8AEF: 0xB509, //HANGUL SYLLABLE TIKEUT YI PIEUP - 0x8AF0: 0xB50A, //HANGUL SYLLABLE TIKEUT YI PIEUPSIOS - 0x8AF1: 0xB50B, //HANGUL SYLLABLE TIKEUT YI SIOS - 0x8AF2: 0xB50C, //HANGUL SYLLABLE TIKEUT YI SSANGSIOS - 0x8AF3: 0xB50D, //HANGUL SYLLABLE TIKEUT YI IEUNG - 0x8AF4: 0xB50E, //HANGUL SYLLABLE TIKEUT YI CIEUC - 0x8AF5: 0xB50F, //HANGUL SYLLABLE TIKEUT YI CHIEUCH - 0x8AF6: 0xB510, //HANGUL SYLLABLE TIKEUT YI KHIEUKH - 0x8AF7: 0xB511, //HANGUL SYLLABLE TIKEUT YI THIEUTH - 0x8AF8: 0xB512, //HANGUL SYLLABLE TIKEUT YI PHIEUPH - 0x8AF9: 0xB513, //HANGUL SYLLABLE TIKEUT YI HIEUH - 0x8AFA: 0xB516, //HANGUL SYLLABLE TIKEUT I SSANGKIYEOK - 0x8AFB: 0xB517, //HANGUL SYLLABLE TIKEUT I KIYEOKSIOS - 0x8AFC: 0xB519, //HANGUL SYLLABLE TIKEUT I NIEUNCIEUC - 0x8AFD: 0xB51A, //HANGUL SYLLABLE TIKEUT I NIEUNHIEUH - 0x8AFE: 0xB51D, //HANGUL SYLLABLE TIKEUT I RIEULKIYEOK - 0x8B41: 0xB51E, //HANGUL SYLLABLE TIKEUT I RIEULMIEUM - 0x8B42: 0xB51F, //HANGUL SYLLABLE TIKEUT I RIEULPIEUP - 0x8B43: 0xB520, //HANGUL SYLLABLE TIKEUT I RIEULSIOS - 0x8B44: 0xB521, //HANGUL SYLLABLE TIKEUT I RIEULTHIEUTH - 0x8B45: 0xB522, //HANGUL SYLLABLE TIKEUT I RIEULPHIEUPH - 0x8B46: 0xB523, //HANGUL SYLLABLE TIKEUT I RIEULHIEUH - 0x8B47: 0xB526, //HANGUL SYLLABLE TIKEUT I PIEUPSIOS - 0x8B48: 0xB52B, //HANGUL SYLLABLE TIKEUT I CHIEUCH - 0x8B49: 0xB52C, //HANGUL SYLLABLE TIKEUT I KHIEUKH - 0x8B4A: 0xB52D, //HANGUL SYLLABLE TIKEUT I THIEUTH - 0x8B4B: 0xB52E, //HANGUL SYLLABLE TIKEUT I PHIEUPH - 0x8B4C: 0xB52F, //HANGUL SYLLABLE TIKEUT I HIEUH - 0x8B4D: 0xB532, //HANGUL SYLLABLE SSANGTIKEUT A SSANGKIYEOK - 0x8B4E: 0xB533, //HANGUL SYLLABLE SSANGTIKEUT A KIYEOKSIOS - 0x8B4F: 0xB535, //HANGUL SYLLABLE SSANGTIKEUT A NIEUNCIEUC - 0x8B50: 0xB536, //HANGUL SYLLABLE SSANGTIKEUT A NIEUNHIEUH - 0x8B51: 0xB537, //HANGUL SYLLABLE SSANGTIKEUT A TIKEUT - 0x8B52: 0xB539, //HANGUL SYLLABLE SSANGTIKEUT A RIEULKIYEOK - 0x8B53: 0xB53A, //HANGUL SYLLABLE SSANGTIKEUT A RIEULMIEUM - 0x8B54: 0xB53B, //HANGUL SYLLABLE SSANGTIKEUT A RIEULPIEUP - 0x8B55: 0xB53C, //HANGUL SYLLABLE SSANGTIKEUT A RIEULSIOS - 0x8B56: 0xB53D, //HANGUL SYLLABLE SSANGTIKEUT A RIEULTHIEUTH - 0x8B57: 0xB53E, //HANGUL SYLLABLE SSANGTIKEUT A RIEULPHIEUPH - 0x8B58: 0xB53F, //HANGUL SYLLABLE SSANGTIKEUT A RIEULHIEUH - 0x8B59: 0xB542, //HANGUL SYLLABLE SSANGTIKEUT A PIEUPSIOS - 0x8B5A: 0xB546, //HANGUL SYLLABLE SSANGTIKEUT A CIEUC - 0x8B61: 0xB547, //HANGUL SYLLABLE SSANGTIKEUT A CHIEUCH - 0x8B62: 0xB548, //HANGUL SYLLABLE SSANGTIKEUT A KHIEUKH - 0x8B63: 0xB549, //HANGUL SYLLABLE SSANGTIKEUT A THIEUTH - 0x8B64: 0xB54A, //HANGUL SYLLABLE SSANGTIKEUT A PHIEUPH - 0x8B65: 0xB54E, //HANGUL SYLLABLE SSANGTIKEUT AE SSANGKIYEOK - 0x8B66: 0xB54F, //HANGUL SYLLABLE SSANGTIKEUT AE KIYEOKSIOS - 0x8B67: 0xB551, //HANGUL SYLLABLE SSANGTIKEUT AE NIEUNCIEUC - 0x8B68: 0xB552, //HANGUL SYLLABLE SSANGTIKEUT AE NIEUNHIEUH - 0x8B69: 0xB553, //HANGUL SYLLABLE SSANGTIKEUT AE TIKEUT - 0x8B6A: 0xB555, //HANGUL SYLLABLE SSANGTIKEUT AE RIEULKIYEOK - 0x8B6B: 0xB556, //HANGUL SYLLABLE SSANGTIKEUT AE RIEULMIEUM - 0x8B6C: 0xB557, //HANGUL SYLLABLE SSANGTIKEUT AE RIEULPIEUP - 0x8B6D: 0xB558, //HANGUL SYLLABLE SSANGTIKEUT AE RIEULSIOS - 0x8B6E: 0xB559, //HANGUL SYLLABLE SSANGTIKEUT AE RIEULTHIEUTH - 0x8B6F: 0xB55A, //HANGUL SYLLABLE SSANGTIKEUT AE RIEULPHIEUPH - 0x8B70: 0xB55B, //HANGUL SYLLABLE SSANGTIKEUT AE RIEULHIEUH - 0x8B71: 0xB55E, //HANGUL SYLLABLE SSANGTIKEUT AE PIEUPSIOS - 0x8B72: 0xB562, //HANGUL SYLLABLE SSANGTIKEUT AE CIEUC - 0x8B73: 0xB563, //HANGUL SYLLABLE SSANGTIKEUT AE CHIEUCH - 0x8B74: 0xB564, //HANGUL SYLLABLE SSANGTIKEUT AE KHIEUKH - 0x8B75: 0xB565, //HANGUL SYLLABLE SSANGTIKEUT AE THIEUTH - 0x8B76: 0xB566, //HANGUL SYLLABLE SSANGTIKEUT AE PHIEUPH - 0x8B77: 0xB567, //HANGUL SYLLABLE SSANGTIKEUT AE HIEUH - 0x8B78: 0xB568, //HANGUL SYLLABLE SSANGTIKEUT YA - 0x8B79: 0xB569, //HANGUL SYLLABLE SSANGTIKEUT YA KIYEOK - 0x8B7A: 0xB56A, //HANGUL SYLLABLE SSANGTIKEUT YA SSANGKIYEOK - 0x8B81: 0xB56B, //HANGUL SYLLABLE SSANGTIKEUT YA KIYEOKSIOS - 0x8B82: 0xB56C, //HANGUL SYLLABLE SSANGTIKEUT YA NIEUN - 0x8B83: 0xB56D, //HANGUL SYLLABLE SSANGTIKEUT YA NIEUNCIEUC - 0x8B84: 0xB56E, //HANGUL SYLLABLE SSANGTIKEUT YA NIEUNHIEUH - 0x8B85: 0xB56F, //HANGUL SYLLABLE SSANGTIKEUT YA TIKEUT - 0x8B86: 0xB570, //HANGUL SYLLABLE SSANGTIKEUT YA RIEUL - 0x8B87: 0xB571, //HANGUL SYLLABLE SSANGTIKEUT YA RIEULKIYEOK - 0x8B88: 0xB572, //HANGUL SYLLABLE SSANGTIKEUT YA RIEULMIEUM - 0x8B89: 0xB573, //HANGUL SYLLABLE SSANGTIKEUT YA RIEULPIEUP - 0x8B8A: 0xB574, //HANGUL SYLLABLE SSANGTIKEUT YA RIEULSIOS - 0x8B8B: 0xB575, //HANGUL SYLLABLE SSANGTIKEUT YA RIEULTHIEUTH - 0x8B8C: 0xB576, //HANGUL SYLLABLE SSANGTIKEUT YA RIEULPHIEUPH - 0x8B8D: 0xB577, //HANGUL SYLLABLE SSANGTIKEUT YA RIEULHIEUH - 0x8B8E: 0xB578, //HANGUL SYLLABLE SSANGTIKEUT YA MIEUM - 0x8B8F: 0xB579, //HANGUL SYLLABLE SSANGTIKEUT YA PIEUP - 0x8B90: 0xB57A, //HANGUL SYLLABLE SSANGTIKEUT YA PIEUPSIOS - 0x8B91: 0xB57B, //HANGUL SYLLABLE SSANGTIKEUT YA SIOS - 0x8B92: 0xB57C, //HANGUL SYLLABLE SSANGTIKEUT YA SSANGSIOS - 0x8B93: 0xB57D, //HANGUL SYLLABLE SSANGTIKEUT YA IEUNG - 0x8B94: 0xB57E, //HANGUL SYLLABLE SSANGTIKEUT YA CIEUC - 0x8B95: 0xB57F, //HANGUL SYLLABLE SSANGTIKEUT YA CHIEUCH - 0x8B96: 0xB580, //HANGUL SYLLABLE SSANGTIKEUT YA KHIEUKH - 0x8B97: 0xB581, //HANGUL SYLLABLE SSANGTIKEUT YA THIEUTH - 0x8B98: 0xB582, //HANGUL SYLLABLE SSANGTIKEUT YA PHIEUPH - 0x8B99: 0xB583, //HANGUL SYLLABLE SSANGTIKEUT YA HIEUH - 0x8B9A: 0xB584, //HANGUL SYLLABLE SSANGTIKEUT YAE - 0x8B9B: 0xB585, //HANGUL SYLLABLE SSANGTIKEUT YAE KIYEOK - 0x8B9C: 0xB586, //HANGUL SYLLABLE SSANGTIKEUT YAE SSANGKIYEOK - 0x8B9D: 0xB587, //HANGUL SYLLABLE SSANGTIKEUT YAE KIYEOKSIOS - 0x8B9E: 0xB588, //HANGUL SYLLABLE SSANGTIKEUT YAE NIEUN - 0x8B9F: 0xB589, //HANGUL SYLLABLE SSANGTIKEUT YAE NIEUNCIEUC - 0x8BA0: 0xB58A, //HANGUL SYLLABLE SSANGTIKEUT YAE NIEUNHIEUH - 0x8BA1: 0xB58B, //HANGUL SYLLABLE SSANGTIKEUT YAE TIKEUT - 0x8BA2: 0xB58C, //HANGUL SYLLABLE SSANGTIKEUT YAE RIEUL - 0x8BA3: 0xB58D, //HANGUL SYLLABLE SSANGTIKEUT YAE RIEULKIYEOK - 0x8BA4: 0xB58E, //HANGUL SYLLABLE SSANGTIKEUT YAE RIEULMIEUM - 0x8BA5: 0xB58F, //HANGUL SYLLABLE SSANGTIKEUT YAE RIEULPIEUP - 0x8BA6: 0xB590, //HANGUL SYLLABLE SSANGTIKEUT YAE RIEULSIOS - 0x8BA7: 0xB591, //HANGUL SYLLABLE SSANGTIKEUT YAE RIEULTHIEUTH - 0x8BA8: 0xB592, //HANGUL SYLLABLE SSANGTIKEUT YAE RIEULPHIEUPH - 0x8BA9: 0xB593, //HANGUL SYLLABLE SSANGTIKEUT YAE RIEULHIEUH - 0x8BAA: 0xB594, //HANGUL SYLLABLE SSANGTIKEUT YAE MIEUM - 0x8BAB: 0xB595, //HANGUL SYLLABLE SSANGTIKEUT YAE PIEUP - 0x8BAC: 0xB596, //HANGUL SYLLABLE SSANGTIKEUT YAE PIEUPSIOS - 0x8BAD: 0xB597, //HANGUL SYLLABLE SSANGTIKEUT YAE SIOS - 0x8BAE: 0xB598, //HANGUL SYLLABLE SSANGTIKEUT YAE SSANGSIOS - 0x8BAF: 0xB599, //HANGUL SYLLABLE SSANGTIKEUT YAE IEUNG - 0x8BB0: 0xB59A, //HANGUL SYLLABLE SSANGTIKEUT YAE CIEUC - 0x8BB1: 0xB59B, //HANGUL SYLLABLE SSANGTIKEUT YAE CHIEUCH - 0x8BB2: 0xB59C, //HANGUL SYLLABLE SSANGTIKEUT YAE KHIEUKH - 0x8BB3: 0xB59D, //HANGUL SYLLABLE SSANGTIKEUT YAE THIEUTH - 0x8BB4: 0xB59E, //HANGUL SYLLABLE SSANGTIKEUT YAE PHIEUPH - 0x8BB5: 0xB59F, //HANGUL SYLLABLE SSANGTIKEUT YAE HIEUH - 0x8BB6: 0xB5A2, //HANGUL SYLLABLE SSANGTIKEUT EO SSANGKIYEOK - 0x8BB7: 0xB5A3, //HANGUL SYLLABLE SSANGTIKEUT EO KIYEOKSIOS - 0x8BB8: 0xB5A5, //HANGUL SYLLABLE SSANGTIKEUT EO NIEUNCIEUC - 0x8BB9: 0xB5A6, //HANGUL SYLLABLE SSANGTIKEUT EO NIEUNHIEUH - 0x8BBA: 0xB5A7, //HANGUL SYLLABLE SSANGTIKEUT EO TIKEUT - 0x8BBB: 0xB5A9, //HANGUL SYLLABLE SSANGTIKEUT EO RIEULKIYEOK - 0x8BBC: 0xB5AC, //HANGUL SYLLABLE SSANGTIKEUT EO RIEULSIOS - 0x8BBD: 0xB5AD, //HANGUL SYLLABLE SSANGTIKEUT EO RIEULTHIEUTH - 0x8BBE: 0xB5AE, //HANGUL SYLLABLE SSANGTIKEUT EO RIEULPHIEUPH - 0x8BBF: 0xB5AF, //HANGUL SYLLABLE SSANGTIKEUT EO RIEULHIEUH - 0x8BC0: 0xB5B2, //HANGUL SYLLABLE SSANGTIKEUT EO PIEUPSIOS - 0x8BC1: 0xB5B6, //HANGUL SYLLABLE SSANGTIKEUT EO CIEUC - 0x8BC2: 0xB5B7, //HANGUL SYLLABLE SSANGTIKEUT EO CHIEUCH - 0x8BC3: 0xB5B8, //HANGUL SYLLABLE SSANGTIKEUT EO KHIEUKH - 0x8BC4: 0xB5B9, //HANGUL SYLLABLE SSANGTIKEUT EO THIEUTH - 0x8BC5: 0xB5BA, //HANGUL SYLLABLE SSANGTIKEUT EO PHIEUPH - 0x8BC6: 0xB5BE, //HANGUL SYLLABLE SSANGTIKEUT E SSANGKIYEOK - 0x8BC7: 0xB5BF, //HANGUL SYLLABLE SSANGTIKEUT E KIYEOKSIOS - 0x8BC8: 0xB5C1, //HANGUL SYLLABLE SSANGTIKEUT E NIEUNCIEUC - 0x8BC9: 0xB5C2, //HANGUL SYLLABLE SSANGTIKEUT E NIEUNHIEUH - 0x8BCA: 0xB5C3, //HANGUL SYLLABLE SSANGTIKEUT E TIKEUT - 0x8BCB: 0xB5C5, //HANGUL SYLLABLE SSANGTIKEUT E RIEULKIYEOK - 0x8BCC: 0xB5C6, //HANGUL SYLLABLE SSANGTIKEUT E RIEULMIEUM - 0x8BCD: 0xB5C7, //HANGUL SYLLABLE SSANGTIKEUT E RIEULPIEUP - 0x8BCE: 0xB5C8, //HANGUL SYLLABLE SSANGTIKEUT E RIEULSIOS - 0x8BCF: 0xB5C9, //HANGUL SYLLABLE SSANGTIKEUT E RIEULTHIEUTH - 0x8BD0: 0xB5CA, //HANGUL SYLLABLE SSANGTIKEUT E RIEULPHIEUPH - 0x8BD1: 0xB5CB, //HANGUL SYLLABLE SSANGTIKEUT E RIEULHIEUH - 0x8BD2: 0xB5CE, //HANGUL SYLLABLE SSANGTIKEUT E PIEUPSIOS - 0x8BD3: 0xB5D2, //HANGUL SYLLABLE SSANGTIKEUT E CIEUC - 0x8BD4: 0xB5D3, //HANGUL SYLLABLE SSANGTIKEUT E CHIEUCH - 0x8BD5: 0xB5D4, //HANGUL SYLLABLE SSANGTIKEUT E KHIEUKH - 0x8BD6: 0xB5D5, //HANGUL SYLLABLE SSANGTIKEUT E THIEUTH - 0x8BD7: 0xB5D6, //HANGUL SYLLABLE SSANGTIKEUT E PHIEUPH - 0x8BD8: 0xB5D7, //HANGUL SYLLABLE SSANGTIKEUT E HIEUH - 0x8BD9: 0xB5D9, //HANGUL SYLLABLE SSANGTIKEUT YEO KIYEOK - 0x8BDA: 0xB5DA, //HANGUL SYLLABLE SSANGTIKEUT YEO SSANGKIYEOK - 0x8BDB: 0xB5DB, //HANGUL SYLLABLE SSANGTIKEUT YEO KIYEOKSIOS - 0x8BDC: 0xB5DC, //HANGUL SYLLABLE SSANGTIKEUT YEO NIEUN - 0x8BDD: 0xB5DD, //HANGUL SYLLABLE SSANGTIKEUT YEO NIEUNCIEUC - 0x8BDE: 0xB5DE, //HANGUL SYLLABLE SSANGTIKEUT YEO NIEUNHIEUH - 0x8BDF: 0xB5DF, //HANGUL SYLLABLE SSANGTIKEUT YEO TIKEUT - 0x8BE0: 0xB5E0, //HANGUL SYLLABLE SSANGTIKEUT YEO RIEUL - 0x8BE1: 0xB5E1, //HANGUL SYLLABLE SSANGTIKEUT YEO RIEULKIYEOK - 0x8BE2: 0xB5E2, //HANGUL SYLLABLE SSANGTIKEUT YEO RIEULMIEUM - 0x8BE3: 0xB5E3, //HANGUL SYLLABLE SSANGTIKEUT YEO RIEULPIEUP - 0x8BE4: 0xB5E4, //HANGUL SYLLABLE SSANGTIKEUT YEO RIEULSIOS - 0x8BE5: 0xB5E5, //HANGUL SYLLABLE SSANGTIKEUT YEO RIEULTHIEUTH - 0x8BE6: 0xB5E6, //HANGUL SYLLABLE SSANGTIKEUT YEO RIEULPHIEUPH - 0x8BE7: 0xB5E7, //HANGUL SYLLABLE SSANGTIKEUT YEO RIEULHIEUH - 0x8BE8: 0xB5E8, //HANGUL SYLLABLE SSANGTIKEUT YEO MIEUM - 0x8BE9: 0xB5E9, //HANGUL SYLLABLE SSANGTIKEUT YEO PIEUP - 0x8BEA: 0xB5EA, //HANGUL SYLLABLE SSANGTIKEUT YEO PIEUPSIOS - 0x8BEB: 0xB5EB, //HANGUL SYLLABLE SSANGTIKEUT YEO SIOS - 0x8BEC: 0xB5ED, //HANGUL SYLLABLE SSANGTIKEUT YEO IEUNG - 0x8BED: 0xB5EE, //HANGUL SYLLABLE SSANGTIKEUT YEO CIEUC - 0x8BEE: 0xB5EF, //HANGUL SYLLABLE SSANGTIKEUT YEO CHIEUCH - 0x8BEF: 0xB5F0, //HANGUL SYLLABLE SSANGTIKEUT YEO KHIEUKH - 0x8BF0: 0xB5F1, //HANGUL SYLLABLE SSANGTIKEUT YEO THIEUTH - 0x8BF1: 0xB5F2, //HANGUL SYLLABLE SSANGTIKEUT YEO PHIEUPH - 0x8BF2: 0xB5F3, //HANGUL SYLLABLE SSANGTIKEUT YEO HIEUH - 0x8BF3: 0xB5F4, //HANGUL SYLLABLE SSANGTIKEUT YE - 0x8BF4: 0xB5F5, //HANGUL SYLLABLE SSANGTIKEUT YE KIYEOK - 0x8BF5: 0xB5F6, //HANGUL SYLLABLE SSANGTIKEUT YE SSANGKIYEOK - 0x8BF6: 0xB5F7, //HANGUL SYLLABLE SSANGTIKEUT YE KIYEOKSIOS - 0x8BF7: 0xB5F8, //HANGUL SYLLABLE SSANGTIKEUT YE NIEUN - 0x8BF8: 0xB5F9, //HANGUL SYLLABLE SSANGTIKEUT YE NIEUNCIEUC - 0x8BF9: 0xB5FA, //HANGUL SYLLABLE SSANGTIKEUT YE NIEUNHIEUH - 0x8BFA: 0xB5FB, //HANGUL SYLLABLE SSANGTIKEUT YE TIKEUT - 0x8BFB: 0xB5FC, //HANGUL SYLLABLE SSANGTIKEUT YE RIEUL - 0x8BFC: 0xB5FD, //HANGUL SYLLABLE SSANGTIKEUT YE RIEULKIYEOK - 0x8BFD: 0xB5FE, //HANGUL SYLLABLE SSANGTIKEUT YE RIEULMIEUM - 0x8BFE: 0xB5FF, //HANGUL SYLLABLE SSANGTIKEUT YE RIEULPIEUP - 0x8C41: 0xB600, //HANGUL SYLLABLE SSANGTIKEUT YE RIEULSIOS - 0x8C42: 0xB601, //HANGUL SYLLABLE SSANGTIKEUT YE RIEULTHIEUTH - 0x8C43: 0xB602, //HANGUL SYLLABLE SSANGTIKEUT YE RIEULPHIEUPH - 0x8C44: 0xB603, //HANGUL SYLLABLE SSANGTIKEUT YE RIEULHIEUH - 0x8C45: 0xB604, //HANGUL SYLLABLE SSANGTIKEUT YE MIEUM - 0x8C46: 0xB605, //HANGUL SYLLABLE SSANGTIKEUT YE PIEUP - 0x8C47: 0xB606, //HANGUL SYLLABLE SSANGTIKEUT YE PIEUPSIOS - 0x8C48: 0xB607, //HANGUL SYLLABLE SSANGTIKEUT YE SIOS - 0x8C49: 0xB608, //HANGUL SYLLABLE SSANGTIKEUT YE SSANGSIOS - 0x8C4A: 0xB609, //HANGUL SYLLABLE SSANGTIKEUT YE IEUNG - 0x8C4B: 0xB60A, //HANGUL SYLLABLE SSANGTIKEUT YE CIEUC - 0x8C4C: 0xB60B, //HANGUL SYLLABLE SSANGTIKEUT YE CHIEUCH - 0x8C4D: 0xB60C, //HANGUL SYLLABLE SSANGTIKEUT YE KHIEUKH - 0x8C4E: 0xB60D, //HANGUL SYLLABLE SSANGTIKEUT YE THIEUTH - 0x8C4F: 0xB60E, //HANGUL SYLLABLE SSANGTIKEUT YE PHIEUPH - 0x8C50: 0xB60F, //HANGUL SYLLABLE SSANGTIKEUT YE HIEUH - 0x8C51: 0xB612, //HANGUL SYLLABLE SSANGTIKEUT O SSANGKIYEOK - 0x8C52: 0xB613, //HANGUL SYLLABLE SSANGTIKEUT O KIYEOKSIOS - 0x8C53: 0xB615, //HANGUL SYLLABLE SSANGTIKEUT O NIEUNCIEUC - 0x8C54: 0xB616, //HANGUL SYLLABLE SSANGTIKEUT O NIEUNHIEUH - 0x8C55: 0xB617, //HANGUL SYLLABLE SSANGTIKEUT O TIKEUT - 0x8C56: 0xB619, //HANGUL SYLLABLE SSANGTIKEUT O RIEULKIYEOK - 0x8C57: 0xB61A, //HANGUL SYLLABLE SSANGTIKEUT O RIEULMIEUM - 0x8C58: 0xB61B, //HANGUL SYLLABLE SSANGTIKEUT O RIEULPIEUP - 0x8C59: 0xB61C, //HANGUL SYLLABLE SSANGTIKEUT O RIEULSIOS - 0x8C5A: 0xB61D, //HANGUL SYLLABLE SSANGTIKEUT O RIEULTHIEUTH - 0x8C61: 0xB61E, //HANGUL SYLLABLE SSANGTIKEUT O RIEULPHIEUPH - 0x8C62: 0xB61F, //HANGUL SYLLABLE SSANGTIKEUT O RIEULHIEUH - 0x8C63: 0xB620, //HANGUL SYLLABLE SSANGTIKEUT O MIEUM - 0x8C64: 0xB621, //HANGUL SYLLABLE SSANGTIKEUT O PIEUP - 0x8C65: 0xB622, //HANGUL SYLLABLE SSANGTIKEUT O PIEUPSIOS - 0x8C66: 0xB623, //HANGUL SYLLABLE SSANGTIKEUT O SIOS - 0x8C67: 0xB624, //HANGUL SYLLABLE SSANGTIKEUT O SSANGSIOS - 0x8C68: 0xB626, //HANGUL SYLLABLE SSANGTIKEUT O CIEUC - 0x8C69: 0xB627, //HANGUL SYLLABLE SSANGTIKEUT O CHIEUCH - 0x8C6A: 0xB628, //HANGUL SYLLABLE SSANGTIKEUT O KHIEUKH - 0x8C6B: 0xB629, //HANGUL SYLLABLE SSANGTIKEUT O THIEUTH - 0x8C6C: 0xB62A, //HANGUL SYLLABLE SSANGTIKEUT O PHIEUPH - 0x8C6D: 0xB62B, //HANGUL SYLLABLE SSANGTIKEUT O HIEUH - 0x8C6E: 0xB62D, //HANGUL SYLLABLE SSANGTIKEUT WA KIYEOK - 0x8C6F: 0xB62E, //HANGUL SYLLABLE SSANGTIKEUT WA SSANGKIYEOK - 0x8C70: 0xB62F, //HANGUL SYLLABLE SSANGTIKEUT WA KIYEOKSIOS - 0x8C71: 0xB630, //HANGUL SYLLABLE SSANGTIKEUT WA NIEUN - 0x8C72: 0xB631, //HANGUL SYLLABLE SSANGTIKEUT WA NIEUNCIEUC - 0x8C73: 0xB632, //HANGUL SYLLABLE SSANGTIKEUT WA NIEUNHIEUH - 0x8C74: 0xB633, //HANGUL SYLLABLE SSANGTIKEUT WA TIKEUT - 0x8C75: 0xB635, //HANGUL SYLLABLE SSANGTIKEUT WA RIEULKIYEOK - 0x8C76: 0xB636, //HANGUL SYLLABLE SSANGTIKEUT WA RIEULMIEUM - 0x8C77: 0xB637, //HANGUL SYLLABLE SSANGTIKEUT WA RIEULPIEUP - 0x8C78: 0xB638, //HANGUL SYLLABLE SSANGTIKEUT WA RIEULSIOS - 0x8C79: 0xB639, //HANGUL SYLLABLE SSANGTIKEUT WA RIEULTHIEUTH - 0x8C7A: 0xB63A, //HANGUL SYLLABLE SSANGTIKEUT WA RIEULPHIEUPH - 0x8C81: 0xB63B, //HANGUL SYLLABLE SSANGTIKEUT WA RIEULHIEUH - 0x8C82: 0xB63C, //HANGUL SYLLABLE SSANGTIKEUT WA MIEUM - 0x8C83: 0xB63D, //HANGUL SYLLABLE SSANGTIKEUT WA PIEUP - 0x8C84: 0xB63E, //HANGUL SYLLABLE SSANGTIKEUT WA PIEUPSIOS - 0x8C85: 0xB63F, //HANGUL SYLLABLE SSANGTIKEUT WA SIOS - 0x8C86: 0xB640, //HANGUL SYLLABLE SSANGTIKEUT WA SSANGSIOS - 0x8C87: 0xB641, //HANGUL SYLLABLE SSANGTIKEUT WA IEUNG - 0x8C88: 0xB642, //HANGUL SYLLABLE SSANGTIKEUT WA CIEUC - 0x8C89: 0xB643, //HANGUL SYLLABLE SSANGTIKEUT WA CHIEUCH - 0x8C8A: 0xB644, //HANGUL SYLLABLE SSANGTIKEUT WA KHIEUKH - 0x8C8B: 0xB645, //HANGUL SYLLABLE SSANGTIKEUT WA THIEUTH - 0x8C8C: 0xB646, //HANGUL SYLLABLE SSANGTIKEUT WA PHIEUPH - 0x8C8D: 0xB647, //HANGUL SYLLABLE SSANGTIKEUT WA HIEUH - 0x8C8E: 0xB649, //HANGUL SYLLABLE SSANGTIKEUT WAE KIYEOK - 0x8C8F: 0xB64A, //HANGUL SYLLABLE SSANGTIKEUT WAE SSANGKIYEOK - 0x8C90: 0xB64B, //HANGUL SYLLABLE SSANGTIKEUT WAE KIYEOKSIOS - 0x8C91: 0xB64C, //HANGUL SYLLABLE SSANGTIKEUT WAE NIEUN - 0x8C92: 0xB64D, //HANGUL SYLLABLE SSANGTIKEUT WAE NIEUNCIEUC - 0x8C93: 0xB64E, //HANGUL SYLLABLE SSANGTIKEUT WAE NIEUNHIEUH - 0x8C94: 0xB64F, //HANGUL SYLLABLE SSANGTIKEUT WAE TIKEUT - 0x8C95: 0xB650, //HANGUL SYLLABLE SSANGTIKEUT WAE RIEUL - 0x8C96: 0xB651, //HANGUL SYLLABLE SSANGTIKEUT WAE RIEULKIYEOK - 0x8C97: 0xB652, //HANGUL SYLLABLE SSANGTIKEUT WAE RIEULMIEUM - 0x8C98: 0xB653, //HANGUL SYLLABLE SSANGTIKEUT WAE RIEULPIEUP - 0x8C99: 0xB654, //HANGUL SYLLABLE SSANGTIKEUT WAE RIEULSIOS - 0x8C9A: 0xB655, //HANGUL SYLLABLE SSANGTIKEUT WAE RIEULTHIEUTH - 0x8C9B: 0xB656, //HANGUL SYLLABLE SSANGTIKEUT WAE RIEULPHIEUPH - 0x8C9C: 0xB657, //HANGUL SYLLABLE SSANGTIKEUT WAE RIEULHIEUH - 0x8C9D: 0xB658, //HANGUL SYLLABLE SSANGTIKEUT WAE MIEUM - 0x8C9E: 0xB659, //HANGUL SYLLABLE SSANGTIKEUT WAE PIEUP - 0x8C9F: 0xB65A, //HANGUL SYLLABLE SSANGTIKEUT WAE PIEUPSIOS - 0x8CA0: 0xB65B, //HANGUL SYLLABLE SSANGTIKEUT WAE SIOS - 0x8CA1: 0xB65C, //HANGUL SYLLABLE SSANGTIKEUT WAE SSANGSIOS - 0x8CA2: 0xB65D, //HANGUL SYLLABLE SSANGTIKEUT WAE IEUNG - 0x8CA3: 0xB65E, //HANGUL SYLLABLE SSANGTIKEUT WAE CIEUC - 0x8CA4: 0xB65F, //HANGUL SYLLABLE SSANGTIKEUT WAE CHIEUCH - 0x8CA5: 0xB660, //HANGUL SYLLABLE SSANGTIKEUT WAE KHIEUKH - 0x8CA6: 0xB661, //HANGUL SYLLABLE SSANGTIKEUT WAE THIEUTH - 0x8CA7: 0xB662, //HANGUL SYLLABLE SSANGTIKEUT WAE PHIEUPH - 0x8CA8: 0xB663, //HANGUL SYLLABLE SSANGTIKEUT WAE HIEUH - 0x8CA9: 0xB665, //HANGUL SYLLABLE SSANGTIKEUT OE KIYEOK - 0x8CAA: 0xB666, //HANGUL SYLLABLE SSANGTIKEUT OE SSANGKIYEOK - 0x8CAB: 0xB667, //HANGUL SYLLABLE SSANGTIKEUT OE KIYEOKSIOS - 0x8CAC: 0xB669, //HANGUL SYLLABLE SSANGTIKEUT OE NIEUNCIEUC - 0x8CAD: 0xB66A, //HANGUL SYLLABLE SSANGTIKEUT OE NIEUNHIEUH - 0x8CAE: 0xB66B, //HANGUL SYLLABLE SSANGTIKEUT OE TIKEUT - 0x8CAF: 0xB66C, //HANGUL SYLLABLE SSANGTIKEUT OE RIEUL - 0x8CB0: 0xB66D, //HANGUL SYLLABLE SSANGTIKEUT OE RIEULKIYEOK - 0x8CB1: 0xB66E, //HANGUL SYLLABLE SSANGTIKEUT OE RIEULMIEUM - 0x8CB2: 0xB66F, //HANGUL SYLLABLE SSANGTIKEUT OE RIEULPIEUP - 0x8CB3: 0xB670, //HANGUL SYLLABLE SSANGTIKEUT OE RIEULSIOS - 0x8CB4: 0xB671, //HANGUL SYLLABLE SSANGTIKEUT OE RIEULTHIEUTH - 0x8CB5: 0xB672, //HANGUL SYLLABLE SSANGTIKEUT OE RIEULPHIEUPH - 0x8CB6: 0xB673, //HANGUL SYLLABLE SSANGTIKEUT OE RIEULHIEUH - 0x8CB7: 0xB674, //HANGUL SYLLABLE SSANGTIKEUT OE MIEUM - 0x8CB8: 0xB675, //HANGUL SYLLABLE SSANGTIKEUT OE PIEUP - 0x8CB9: 0xB676, //HANGUL SYLLABLE SSANGTIKEUT OE PIEUPSIOS - 0x8CBA: 0xB677, //HANGUL SYLLABLE SSANGTIKEUT OE SIOS - 0x8CBB: 0xB678, //HANGUL SYLLABLE SSANGTIKEUT OE SSANGSIOS - 0x8CBC: 0xB679, //HANGUL SYLLABLE SSANGTIKEUT OE IEUNG - 0x8CBD: 0xB67A, //HANGUL SYLLABLE SSANGTIKEUT OE CIEUC - 0x8CBE: 0xB67B, //HANGUL SYLLABLE SSANGTIKEUT OE CHIEUCH - 0x8CBF: 0xB67C, //HANGUL SYLLABLE SSANGTIKEUT OE KHIEUKH - 0x8CC0: 0xB67D, //HANGUL SYLLABLE SSANGTIKEUT OE THIEUTH - 0x8CC1: 0xB67E, //HANGUL SYLLABLE SSANGTIKEUT OE PHIEUPH - 0x8CC2: 0xB67F, //HANGUL SYLLABLE SSANGTIKEUT OE HIEUH - 0x8CC3: 0xB680, //HANGUL SYLLABLE SSANGTIKEUT YO - 0x8CC4: 0xB681, //HANGUL SYLLABLE SSANGTIKEUT YO KIYEOK - 0x8CC5: 0xB682, //HANGUL SYLLABLE SSANGTIKEUT YO SSANGKIYEOK - 0x8CC6: 0xB683, //HANGUL SYLLABLE SSANGTIKEUT YO KIYEOKSIOS - 0x8CC7: 0xB684, //HANGUL SYLLABLE SSANGTIKEUT YO NIEUN - 0x8CC8: 0xB685, //HANGUL SYLLABLE SSANGTIKEUT YO NIEUNCIEUC - 0x8CC9: 0xB686, //HANGUL SYLLABLE SSANGTIKEUT YO NIEUNHIEUH - 0x8CCA: 0xB687, //HANGUL SYLLABLE SSANGTIKEUT YO TIKEUT - 0x8CCB: 0xB688, //HANGUL SYLLABLE SSANGTIKEUT YO RIEUL - 0x8CCC: 0xB689, //HANGUL SYLLABLE SSANGTIKEUT YO RIEULKIYEOK - 0x8CCD: 0xB68A, //HANGUL SYLLABLE SSANGTIKEUT YO RIEULMIEUM - 0x8CCE: 0xB68B, //HANGUL SYLLABLE SSANGTIKEUT YO RIEULPIEUP - 0x8CCF: 0xB68C, //HANGUL SYLLABLE SSANGTIKEUT YO RIEULSIOS - 0x8CD0: 0xB68D, //HANGUL SYLLABLE SSANGTIKEUT YO RIEULTHIEUTH - 0x8CD1: 0xB68E, //HANGUL SYLLABLE SSANGTIKEUT YO RIEULPHIEUPH - 0x8CD2: 0xB68F, //HANGUL SYLLABLE SSANGTIKEUT YO RIEULHIEUH - 0x8CD3: 0xB690, //HANGUL SYLLABLE SSANGTIKEUT YO MIEUM - 0x8CD4: 0xB691, //HANGUL SYLLABLE SSANGTIKEUT YO PIEUP - 0x8CD5: 0xB692, //HANGUL SYLLABLE SSANGTIKEUT YO PIEUPSIOS - 0x8CD6: 0xB693, //HANGUL SYLLABLE SSANGTIKEUT YO SIOS - 0x8CD7: 0xB694, //HANGUL SYLLABLE SSANGTIKEUT YO SSANGSIOS - 0x8CD8: 0xB695, //HANGUL SYLLABLE SSANGTIKEUT YO IEUNG - 0x8CD9: 0xB696, //HANGUL SYLLABLE SSANGTIKEUT YO CIEUC - 0x8CDA: 0xB697, //HANGUL SYLLABLE SSANGTIKEUT YO CHIEUCH - 0x8CDB: 0xB698, //HANGUL SYLLABLE SSANGTIKEUT YO KHIEUKH - 0x8CDC: 0xB699, //HANGUL SYLLABLE SSANGTIKEUT YO THIEUTH - 0x8CDD: 0xB69A, //HANGUL SYLLABLE SSANGTIKEUT YO PHIEUPH - 0x8CDE: 0xB69B, //HANGUL SYLLABLE SSANGTIKEUT YO HIEUH - 0x8CDF: 0xB69E, //HANGUL SYLLABLE SSANGTIKEUT U SSANGKIYEOK - 0x8CE0: 0xB69F, //HANGUL SYLLABLE SSANGTIKEUT U KIYEOKSIOS - 0x8CE1: 0xB6A1, //HANGUL SYLLABLE SSANGTIKEUT U NIEUNCIEUC - 0x8CE2: 0xB6A2, //HANGUL SYLLABLE SSANGTIKEUT U NIEUNHIEUH - 0x8CE3: 0xB6A3, //HANGUL SYLLABLE SSANGTIKEUT U TIKEUT - 0x8CE4: 0xB6A5, //HANGUL SYLLABLE SSANGTIKEUT U RIEULKIYEOK - 0x8CE5: 0xB6A6, //HANGUL SYLLABLE SSANGTIKEUT U RIEULMIEUM - 0x8CE6: 0xB6A7, //HANGUL SYLLABLE SSANGTIKEUT U RIEULPIEUP - 0x8CE7: 0xB6A8, //HANGUL SYLLABLE SSANGTIKEUT U RIEULSIOS - 0x8CE8: 0xB6A9, //HANGUL SYLLABLE SSANGTIKEUT U RIEULTHIEUTH - 0x8CE9: 0xB6AA, //HANGUL SYLLABLE SSANGTIKEUT U RIEULPHIEUPH - 0x8CEA: 0xB6AD, //HANGUL SYLLABLE SSANGTIKEUT U PIEUP - 0x8CEB: 0xB6AE, //HANGUL SYLLABLE SSANGTIKEUT U PIEUPSIOS - 0x8CEC: 0xB6AF, //HANGUL SYLLABLE SSANGTIKEUT U SIOS - 0x8CED: 0xB6B0, //HANGUL SYLLABLE SSANGTIKEUT U SSANGSIOS - 0x8CEE: 0xB6B2, //HANGUL SYLLABLE SSANGTIKEUT U CIEUC - 0x8CEF: 0xB6B3, //HANGUL SYLLABLE SSANGTIKEUT U CHIEUCH - 0x8CF0: 0xB6B4, //HANGUL SYLLABLE SSANGTIKEUT U KHIEUKH - 0x8CF1: 0xB6B5, //HANGUL SYLLABLE SSANGTIKEUT U THIEUTH - 0x8CF2: 0xB6B6, //HANGUL SYLLABLE SSANGTIKEUT U PHIEUPH - 0x8CF3: 0xB6B7, //HANGUL SYLLABLE SSANGTIKEUT U HIEUH - 0x8CF4: 0xB6B8, //HANGUL SYLLABLE SSANGTIKEUT WEO - 0x8CF5: 0xB6B9, //HANGUL SYLLABLE SSANGTIKEUT WEO KIYEOK - 0x8CF6: 0xB6BA, //HANGUL SYLLABLE SSANGTIKEUT WEO SSANGKIYEOK - 0x8CF7: 0xB6BB, //HANGUL SYLLABLE SSANGTIKEUT WEO KIYEOKSIOS - 0x8CF8: 0xB6BC, //HANGUL SYLLABLE SSANGTIKEUT WEO NIEUN - 0x8CF9: 0xB6BD, //HANGUL SYLLABLE SSANGTIKEUT WEO NIEUNCIEUC - 0x8CFA: 0xB6BE, //HANGUL SYLLABLE SSANGTIKEUT WEO NIEUNHIEUH - 0x8CFB: 0xB6BF, //HANGUL SYLLABLE SSANGTIKEUT WEO TIKEUT - 0x8CFC: 0xB6C0, //HANGUL SYLLABLE SSANGTIKEUT WEO RIEUL - 0x8CFD: 0xB6C1, //HANGUL SYLLABLE SSANGTIKEUT WEO RIEULKIYEOK - 0x8CFE: 0xB6C2, //HANGUL SYLLABLE SSANGTIKEUT WEO RIEULMIEUM - 0x8D41: 0xB6C3, //HANGUL SYLLABLE SSANGTIKEUT WEO RIEULPIEUP - 0x8D42: 0xB6C4, //HANGUL SYLLABLE SSANGTIKEUT WEO RIEULSIOS - 0x8D43: 0xB6C5, //HANGUL SYLLABLE SSANGTIKEUT WEO RIEULTHIEUTH - 0x8D44: 0xB6C6, //HANGUL SYLLABLE SSANGTIKEUT WEO RIEULPHIEUPH - 0x8D45: 0xB6C7, //HANGUL SYLLABLE SSANGTIKEUT WEO RIEULHIEUH - 0x8D46: 0xB6C8, //HANGUL SYLLABLE SSANGTIKEUT WEO MIEUM - 0x8D47: 0xB6C9, //HANGUL SYLLABLE SSANGTIKEUT WEO PIEUP - 0x8D48: 0xB6CA, //HANGUL SYLLABLE SSANGTIKEUT WEO PIEUPSIOS - 0x8D49: 0xB6CB, //HANGUL SYLLABLE SSANGTIKEUT WEO SIOS - 0x8D4A: 0xB6CC, //HANGUL SYLLABLE SSANGTIKEUT WEO SSANGSIOS - 0x8D4B: 0xB6CD, //HANGUL SYLLABLE SSANGTIKEUT WEO IEUNG - 0x8D4C: 0xB6CE, //HANGUL SYLLABLE SSANGTIKEUT WEO CIEUC - 0x8D4D: 0xB6CF, //HANGUL SYLLABLE SSANGTIKEUT WEO CHIEUCH - 0x8D4E: 0xB6D0, //HANGUL SYLLABLE SSANGTIKEUT WEO KHIEUKH - 0x8D4F: 0xB6D1, //HANGUL SYLLABLE SSANGTIKEUT WEO THIEUTH - 0x8D50: 0xB6D2, //HANGUL SYLLABLE SSANGTIKEUT WEO PHIEUPH - 0x8D51: 0xB6D3, //HANGUL SYLLABLE SSANGTIKEUT WEO HIEUH - 0x8D52: 0xB6D5, //HANGUL SYLLABLE SSANGTIKEUT WE KIYEOK - 0x8D53: 0xB6D6, //HANGUL SYLLABLE SSANGTIKEUT WE SSANGKIYEOK - 0x8D54: 0xB6D7, //HANGUL SYLLABLE SSANGTIKEUT WE KIYEOKSIOS - 0x8D55: 0xB6D8, //HANGUL SYLLABLE SSANGTIKEUT WE NIEUN - 0x8D56: 0xB6D9, //HANGUL SYLLABLE SSANGTIKEUT WE NIEUNCIEUC - 0x8D57: 0xB6DA, //HANGUL SYLLABLE SSANGTIKEUT WE NIEUNHIEUH - 0x8D58: 0xB6DB, //HANGUL SYLLABLE SSANGTIKEUT WE TIKEUT - 0x8D59: 0xB6DC, //HANGUL SYLLABLE SSANGTIKEUT WE RIEUL - 0x8D5A: 0xB6DD, //HANGUL SYLLABLE SSANGTIKEUT WE RIEULKIYEOK - 0x8D61: 0xB6DE, //HANGUL SYLLABLE SSANGTIKEUT WE RIEULMIEUM - 0x8D62: 0xB6DF, //HANGUL SYLLABLE SSANGTIKEUT WE RIEULPIEUP - 0x8D63: 0xB6E0, //HANGUL SYLLABLE SSANGTIKEUT WE RIEULSIOS - 0x8D64: 0xB6E1, //HANGUL SYLLABLE SSANGTIKEUT WE RIEULTHIEUTH - 0x8D65: 0xB6E2, //HANGUL SYLLABLE SSANGTIKEUT WE RIEULPHIEUPH - 0x8D66: 0xB6E3, //HANGUL SYLLABLE SSANGTIKEUT WE RIEULHIEUH - 0x8D67: 0xB6E4, //HANGUL SYLLABLE SSANGTIKEUT WE MIEUM - 0x8D68: 0xB6E5, //HANGUL SYLLABLE SSANGTIKEUT WE PIEUP - 0x8D69: 0xB6E6, //HANGUL SYLLABLE SSANGTIKEUT WE PIEUPSIOS - 0x8D6A: 0xB6E7, //HANGUL SYLLABLE SSANGTIKEUT WE SIOS - 0x8D6B: 0xB6E8, //HANGUL SYLLABLE SSANGTIKEUT WE SSANGSIOS - 0x8D6C: 0xB6E9, //HANGUL SYLLABLE SSANGTIKEUT WE IEUNG - 0x8D6D: 0xB6EA, //HANGUL SYLLABLE SSANGTIKEUT WE CIEUC - 0x8D6E: 0xB6EB, //HANGUL SYLLABLE SSANGTIKEUT WE CHIEUCH - 0x8D6F: 0xB6EC, //HANGUL SYLLABLE SSANGTIKEUT WE KHIEUKH - 0x8D70: 0xB6ED, //HANGUL SYLLABLE SSANGTIKEUT WE THIEUTH - 0x8D71: 0xB6EE, //HANGUL SYLLABLE SSANGTIKEUT WE PHIEUPH - 0x8D72: 0xB6EF, //HANGUL SYLLABLE SSANGTIKEUT WE HIEUH - 0x8D73: 0xB6F1, //HANGUL SYLLABLE SSANGTIKEUT WI KIYEOK - 0x8D74: 0xB6F2, //HANGUL SYLLABLE SSANGTIKEUT WI SSANGKIYEOK - 0x8D75: 0xB6F3, //HANGUL SYLLABLE SSANGTIKEUT WI KIYEOKSIOS - 0x8D76: 0xB6F5, //HANGUL SYLLABLE SSANGTIKEUT WI NIEUNCIEUC - 0x8D77: 0xB6F6, //HANGUL SYLLABLE SSANGTIKEUT WI NIEUNHIEUH - 0x8D78: 0xB6F7, //HANGUL SYLLABLE SSANGTIKEUT WI TIKEUT - 0x8D79: 0xB6F9, //HANGUL SYLLABLE SSANGTIKEUT WI RIEULKIYEOK - 0x8D7A: 0xB6FA, //HANGUL SYLLABLE SSANGTIKEUT WI RIEULMIEUM - 0x8D81: 0xB6FB, //HANGUL SYLLABLE SSANGTIKEUT WI RIEULPIEUP - 0x8D82: 0xB6FC, //HANGUL SYLLABLE SSANGTIKEUT WI RIEULSIOS - 0x8D83: 0xB6FD, //HANGUL SYLLABLE SSANGTIKEUT WI RIEULTHIEUTH - 0x8D84: 0xB6FE, //HANGUL SYLLABLE SSANGTIKEUT WI RIEULPHIEUPH - 0x8D85: 0xB6FF, //HANGUL SYLLABLE SSANGTIKEUT WI RIEULHIEUH - 0x8D86: 0xB702, //HANGUL SYLLABLE SSANGTIKEUT WI PIEUPSIOS - 0x8D87: 0xB703, //HANGUL SYLLABLE SSANGTIKEUT WI SIOS - 0x8D88: 0xB704, //HANGUL SYLLABLE SSANGTIKEUT WI SSANGSIOS - 0x8D89: 0xB706, //HANGUL SYLLABLE SSANGTIKEUT WI CIEUC - 0x8D8A: 0xB707, //HANGUL SYLLABLE SSANGTIKEUT WI CHIEUCH - 0x8D8B: 0xB708, //HANGUL SYLLABLE SSANGTIKEUT WI KHIEUKH - 0x8D8C: 0xB709, //HANGUL SYLLABLE SSANGTIKEUT WI THIEUTH - 0x8D8D: 0xB70A, //HANGUL SYLLABLE SSANGTIKEUT WI PHIEUPH - 0x8D8E: 0xB70B, //HANGUL SYLLABLE SSANGTIKEUT WI HIEUH - 0x8D8F: 0xB70C, //HANGUL SYLLABLE SSANGTIKEUT YU - 0x8D90: 0xB70D, //HANGUL SYLLABLE SSANGTIKEUT YU KIYEOK - 0x8D91: 0xB70E, //HANGUL SYLLABLE SSANGTIKEUT YU SSANGKIYEOK - 0x8D92: 0xB70F, //HANGUL SYLLABLE SSANGTIKEUT YU KIYEOKSIOS - 0x8D93: 0xB710, //HANGUL SYLLABLE SSANGTIKEUT YU NIEUN - 0x8D94: 0xB711, //HANGUL SYLLABLE SSANGTIKEUT YU NIEUNCIEUC - 0x8D95: 0xB712, //HANGUL SYLLABLE SSANGTIKEUT YU NIEUNHIEUH - 0x8D96: 0xB713, //HANGUL SYLLABLE SSANGTIKEUT YU TIKEUT - 0x8D97: 0xB714, //HANGUL SYLLABLE SSANGTIKEUT YU RIEUL - 0x8D98: 0xB715, //HANGUL SYLLABLE SSANGTIKEUT YU RIEULKIYEOK - 0x8D99: 0xB716, //HANGUL SYLLABLE SSANGTIKEUT YU RIEULMIEUM - 0x8D9A: 0xB717, //HANGUL SYLLABLE SSANGTIKEUT YU RIEULPIEUP - 0x8D9B: 0xB718, //HANGUL SYLLABLE SSANGTIKEUT YU RIEULSIOS - 0x8D9C: 0xB719, //HANGUL SYLLABLE SSANGTIKEUT YU RIEULTHIEUTH - 0x8D9D: 0xB71A, //HANGUL SYLLABLE SSANGTIKEUT YU RIEULPHIEUPH - 0x8D9E: 0xB71B, //HANGUL SYLLABLE SSANGTIKEUT YU RIEULHIEUH - 0x8D9F: 0xB71C, //HANGUL SYLLABLE SSANGTIKEUT YU MIEUM - 0x8DA0: 0xB71D, //HANGUL SYLLABLE SSANGTIKEUT YU PIEUP - 0x8DA1: 0xB71E, //HANGUL SYLLABLE SSANGTIKEUT YU PIEUPSIOS - 0x8DA2: 0xB71F, //HANGUL SYLLABLE SSANGTIKEUT YU SIOS - 0x8DA3: 0xB720, //HANGUL SYLLABLE SSANGTIKEUT YU SSANGSIOS - 0x8DA4: 0xB721, //HANGUL SYLLABLE SSANGTIKEUT YU IEUNG - 0x8DA5: 0xB722, //HANGUL SYLLABLE SSANGTIKEUT YU CIEUC - 0x8DA6: 0xB723, //HANGUL SYLLABLE SSANGTIKEUT YU CHIEUCH - 0x8DA7: 0xB724, //HANGUL SYLLABLE SSANGTIKEUT YU KHIEUKH - 0x8DA8: 0xB725, //HANGUL SYLLABLE SSANGTIKEUT YU THIEUTH - 0x8DA9: 0xB726, //HANGUL SYLLABLE SSANGTIKEUT YU PHIEUPH - 0x8DAA: 0xB727, //HANGUL SYLLABLE SSANGTIKEUT YU HIEUH - 0x8DAB: 0xB72A, //HANGUL SYLLABLE SSANGTIKEUT EU SSANGKIYEOK - 0x8DAC: 0xB72B, //HANGUL SYLLABLE SSANGTIKEUT EU KIYEOKSIOS - 0x8DAD: 0xB72D, //HANGUL SYLLABLE SSANGTIKEUT EU NIEUNCIEUC - 0x8DAE: 0xB72E, //HANGUL SYLLABLE SSANGTIKEUT EU NIEUNHIEUH - 0x8DAF: 0xB731, //HANGUL SYLLABLE SSANGTIKEUT EU RIEULKIYEOK - 0x8DB0: 0xB732, //HANGUL SYLLABLE SSANGTIKEUT EU RIEULMIEUM - 0x8DB1: 0xB733, //HANGUL SYLLABLE SSANGTIKEUT EU RIEULPIEUP - 0x8DB2: 0xB734, //HANGUL SYLLABLE SSANGTIKEUT EU RIEULSIOS - 0x8DB3: 0xB735, //HANGUL SYLLABLE SSANGTIKEUT EU RIEULTHIEUTH - 0x8DB4: 0xB736, //HANGUL SYLLABLE SSANGTIKEUT EU RIEULPHIEUPH - 0x8DB5: 0xB737, //HANGUL SYLLABLE SSANGTIKEUT EU RIEULHIEUH - 0x8DB6: 0xB73A, //HANGUL SYLLABLE SSANGTIKEUT EU PIEUPSIOS - 0x8DB7: 0xB73C, //HANGUL SYLLABLE SSANGTIKEUT EU SSANGSIOS - 0x8DB8: 0xB73D, //HANGUL SYLLABLE SSANGTIKEUT EU IEUNG - 0x8DB9: 0xB73E, //HANGUL SYLLABLE SSANGTIKEUT EU CIEUC - 0x8DBA: 0xB73F, //HANGUL SYLLABLE SSANGTIKEUT EU CHIEUCH - 0x8DBB: 0xB740, //HANGUL SYLLABLE SSANGTIKEUT EU KHIEUKH - 0x8DBC: 0xB741, //HANGUL SYLLABLE SSANGTIKEUT EU THIEUTH - 0x8DBD: 0xB742, //HANGUL SYLLABLE SSANGTIKEUT EU PHIEUPH - 0x8DBE: 0xB743, //HANGUL SYLLABLE SSANGTIKEUT EU HIEUH - 0x8DBF: 0xB745, //HANGUL SYLLABLE SSANGTIKEUT YI KIYEOK - 0x8DC0: 0xB746, //HANGUL SYLLABLE SSANGTIKEUT YI SSANGKIYEOK - 0x8DC1: 0xB747, //HANGUL SYLLABLE SSANGTIKEUT YI KIYEOKSIOS - 0x8DC2: 0xB749, //HANGUL SYLLABLE SSANGTIKEUT YI NIEUNCIEUC - 0x8DC3: 0xB74A, //HANGUL SYLLABLE SSANGTIKEUT YI NIEUNHIEUH - 0x8DC4: 0xB74B, //HANGUL SYLLABLE SSANGTIKEUT YI TIKEUT - 0x8DC5: 0xB74D, //HANGUL SYLLABLE SSANGTIKEUT YI RIEULKIYEOK - 0x8DC6: 0xB74E, //HANGUL SYLLABLE SSANGTIKEUT YI RIEULMIEUM - 0x8DC7: 0xB74F, //HANGUL SYLLABLE SSANGTIKEUT YI RIEULPIEUP - 0x8DC8: 0xB750, //HANGUL SYLLABLE SSANGTIKEUT YI RIEULSIOS - 0x8DC9: 0xB751, //HANGUL SYLLABLE SSANGTIKEUT YI RIEULTHIEUTH - 0x8DCA: 0xB752, //HANGUL SYLLABLE SSANGTIKEUT YI RIEULPHIEUPH - 0x8DCB: 0xB753, //HANGUL SYLLABLE SSANGTIKEUT YI RIEULHIEUH - 0x8DCC: 0xB756, //HANGUL SYLLABLE SSANGTIKEUT YI PIEUPSIOS - 0x8DCD: 0xB757, //HANGUL SYLLABLE SSANGTIKEUT YI SIOS - 0x8DCE: 0xB758, //HANGUL SYLLABLE SSANGTIKEUT YI SSANGSIOS - 0x8DCF: 0xB759, //HANGUL SYLLABLE SSANGTIKEUT YI IEUNG - 0x8DD0: 0xB75A, //HANGUL SYLLABLE SSANGTIKEUT YI CIEUC - 0x8DD1: 0xB75B, //HANGUL SYLLABLE SSANGTIKEUT YI CHIEUCH - 0x8DD2: 0xB75C, //HANGUL SYLLABLE SSANGTIKEUT YI KHIEUKH - 0x8DD3: 0xB75D, //HANGUL SYLLABLE SSANGTIKEUT YI THIEUTH - 0x8DD4: 0xB75E, //HANGUL SYLLABLE SSANGTIKEUT YI PHIEUPH - 0x8DD5: 0xB75F, //HANGUL SYLLABLE SSANGTIKEUT YI HIEUH - 0x8DD6: 0xB761, //HANGUL SYLLABLE SSANGTIKEUT I KIYEOK - 0x8DD7: 0xB762, //HANGUL SYLLABLE SSANGTIKEUT I SSANGKIYEOK - 0x8DD8: 0xB763, //HANGUL SYLLABLE SSANGTIKEUT I KIYEOKSIOS - 0x8DD9: 0xB765, //HANGUL SYLLABLE SSANGTIKEUT I NIEUNCIEUC - 0x8DDA: 0xB766, //HANGUL SYLLABLE SSANGTIKEUT I NIEUNHIEUH - 0x8DDB: 0xB767, //HANGUL SYLLABLE SSANGTIKEUT I TIKEUT - 0x8DDC: 0xB769, //HANGUL SYLLABLE SSANGTIKEUT I RIEULKIYEOK - 0x8DDD: 0xB76A, //HANGUL SYLLABLE SSANGTIKEUT I RIEULMIEUM - 0x8DDE: 0xB76B, //HANGUL SYLLABLE SSANGTIKEUT I RIEULPIEUP - 0x8DDF: 0xB76C, //HANGUL SYLLABLE SSANGTIKEUT I RIEULSIOS - 0x8DE0: 0xB76D, //HANGUL SYLLABLE SSANGTIKEUT I RIEULTHIEUTH - 0x8DE1: 0xB76E, //HANGUL SYLLABLE SSANGTIKEUT I RIEULPHIEUPH - 0x8DE2: 0xB76F, //HANGUL SYLLABLE SSANGTIKEUT I RIEULHIEUH - 0x8DE3: 0xB772, //HANGUL SYLLABLE SSANGTIKEUT I PIEUPSIOS - 0x8DE4: 0xB774, //HANGUL SYLLABLE SSANGTIKEUT I SSANGSIOS - 0x8DE5: 0xB776, //HANGUL SYLLABLE SSANGTIKEUT I CIEUC - 0x8DE6: 0xB777, //HANGUL SYLLABLE SSANGTIKEUT I CHIEUCH - 0x8DE7: 0xB778, //HANGUL SYLLABLE SSANGTIKEUT I KHIEUKH - 0x8DE8: 0xB779, //HANGUL SYLLABLE SSANGTIKEUT I THIEUTH - 0x8DE9: 0xB77A, //HANGUL SYLLABLE SSANGTIKEUT I PHIEUPH - 0x8DEA: 0xB77B, //HANGUL SYLLABLE SSANGTIKEUT I HIEUH - 0x8DEB: 0xB77E, //HANGUL SYLLABLE RIEUL A SSANGKIYEOK - 0x8DEC: 0xB77F, //HANGUL SYLLABLE RIEUL A KIYEOKSIOS - 0x8DED: 0xB781, //HANGUL SYLLABLE RIEUL A NIEUNCIEUC - 0x8DEE: 0xB782, //HANGUL SYLLABLE RIEUL A NIEUNHIEUH - 0x8DEF: 0xB783, //HANGUL SYLLABLE RIEUL A TIKEUT - 0x8DF0: 0xB785, //HANGUL SYLLABLE RIEUL A RIEULKIYEOK - 0x8DF1: 0xB786, //HANGUL SYLLABLE RIEUL A RIEULMIEUM - 0x8DF2: 0xB787, //HANGUL SYLLABLE RIEUL A RIEULPIEUP - 0x8DF3: 0xB788, //HANGUL SYLLABLE RIEUL A RIEULSIOS - 0x8DF4: 0xB789, //HANGUL SYLLABLE RIEUL A RIEULTHIEUTH - 0x8DF5: 0xB78A, //HANGUL SYLLABLE RIEUL A RIEULPHIEUPH - 0x8DF6: 0xB78B, //HANGUL SYLLABLE RIEUL A RIEULHIEUH - 0x8DF7: 0xB78E, //HANGUL SYLLABLE RIEUL A PIEUPSIOS - 0x8DF8: 0xB793, //HANGUL SYLLABLE RIEUL A CHIEUCH - 0x8DF9: 0xB794, //HANGUL SYLLABLE RIEUL A KHIEUKH - 0x8DFA: 0xB795, //HANGUL SYLLABLE RIEUL A THIEUTH - 0x8DFB: 0xB79A, //HANGUL SYLLABLE RIEUL AE SSANGKIYEOK - 0x8DFC: 0xB79B, //HANGUL SYLLABLE RIEUL AE KIYEOKSIOS - 0x8DFD: 0xB79D, //HANGUL SYLLABLE RIEUL AE NIEUNCIEUC - 0x8DFE: 0xB79E, //HANGUL SYLLABLE RIEUL AE NIEUNHIEUH - 0x8E41: 0xB79F, //HANGUL SYLLABLE RIEUL AE TIKEUT - 0x8E42: 0xB7A1, //HANGUL SYLLABLE RIEUL AE RIEULKIYEOK - 0x8E43: 0xB7A2, //HANGUL SYLLABLE RIEUL AE RIEULMIEUM - 0x8E44: 0xB7A3, //HANGUL SYLLABLE RIEUL AE RIEULPIEUP - 0x8E45: 0xB7A4, //HANGUL SYLLABLE RIEUL AE RIEULSIOS - 0x8E46: 0xB7A5, //HANGUL SYLLABLE RIEUL AE RIEULTHIEUTH - 0x8E47: 0xB7A6, //HANGUL SYLLABLE RIEUL AE RIEULPHIEUPH - 0x8E48: 0xB7A7, //HANGUL SYLLABLE RIEUL AE RIEULHIEUH - 0x8E49: 0xB7AA, //HANGUL SYLLABLE RIEUL AE PIEUPSIOS - 0x8E4A: 0xB7AE, //HANGUL SYLLABLE RIEUL AE CIEUC - 0x8E4B: 0xB7AF, //HANGUL SYLLABLE RIEUL AE CHIEUCH - 0x8E4C: 0xB7B0, //HANGUL SYLLABLE RIEUL AE KHIEUKH - 0x8E4D: 0xB7B1, //HANGUL SYLLABLE RIEUL AE THIEUTH - 0x8E4E: 0xB7B2, //HANGUL SYLLABLE RIEUL AE PHIEUPH - 0x8E4F: 0xB7B3, //HANGUL SYLLABLE RIEUL AE HIEUH - 0x8E50: 0xB7B6, //HANGUL SYLLABLE RIEUL YA SSANGKIYEOK - 0x8E51: 0xB7B7, //HANGUL SYLLABLE RIEUL YA KIYEOKSIOS - 0x8E52: 0xB7B9, //HANGUL SYLLABLE RIEUL YA NIEUNCIEUC - 0x8E53: 0xB7BA, //HANGUL SYLLABLE RIEUL YA NIEUNHIEUH - 0x8E54: 0xB7BB, //HANGUL SYLLABLE RIEUL YA TIKEUT - 0x8E55: 0xB7BC, //HANGUL SYLLABLE RIEUL YA RIEUL - 0x8E56: 0xB7BD, //HANGUL SYLLABLE RIEUL YA RIEULKIYEOK - 0x8E57: 0xB7BE, //HANGUL SYLLABLE RIEUL YA RIEULMIEUM - 0x8E58: 0xB7BF, //HANGUL SYLLABLE RIEUL YA RIEULPIEUP - 0x8E59: 0xB7C0, //HANGUL SYLLABLE RIEUL YA RIEULSIOS - 0x8E5A: 0xB7C1, //HANGUL SYLLABLE RIEUL YA RIEULTHIEUTH - 0x8E61: 0xB7C2, //HANGUL SYLLABLE RIEUL YA RIEULPHIEUPH - 0x8E62: 0xB7C3, //HANGUL SYLLABLE RIEUL YA RIEULHIEUH - 0x8E63: 0xB7C4, //HANGUL SYLLABLE RIEUL YA MIEUM - 0x8E64: 0xB7C5, //HANGUL SYLLABLE RIEUL YA PIEUP - 0x8E65: 0xB7C6, //HANGUL SYLLABLE RIEUL YA PIEUPSIOS - 0x8E66: 0xB7C8, //HANGUL SYLLABLE RIEUL YA SSANGSIOS - 0x8E67: 0xB7CA, //HANGUL SYLLABLE RIEUL YA CIEUC - 0x8E68: 0xB7CB, //HANGUL SYLLABLE RIEUL YA CHIEUCH - 0x8E69: 0xB7CC, //HANGUL SYLLABLE RIEUL YA KHIEUKH - 0x8E6A: 0xB7CD, //HANGUL SYLLABLE RIEUL YA THIEUTH - 0x8E6B: 0xB7CE, //HANGUL SYLLABLE RIEUL YA PHIEUPH - 0x8E6C: 0xB7CF, //HANGUL SYLLABLE RIEUL YA HIEUH - 0x8E6D: 0xB7D0, //HANGUL SYLLABLE RIEUL YAE - 0x8E6E: 0xB7D1, //HANGUL SYLLABLE RIEUL YAE KIYEOK - 0x8E6F: 0xB7D2, //HANGUL SYLLABLE RIEUL YAE SSANGKIYEOK - 0x8E70: 0xB7D3, //HANGUL SYLLABLE RIEUL YAE KIYEOKSIOS - 0x8E71: 0xB7D4, //HANGUL SYLLABLE RIEUL YAE NIEUN - 0x8E72: 0xB7D5, //HANGUL SYLLABLE RIEUL YAE NIEUNCIEUC - 0x8E73: 0xB7D6, //HANGUL SYLLABLE RIEUL YAE NIEUNHIEUH - 0x8E74: 0xB7D7, //HANGUL SYLLABLE RIEUL YAE TIKEUT - 0x8E75: 0xB7D8, //HANGUL SYLLABLE RIEUL YAE RIEUL - 0x8E76: 0xB7D9, //HANGUL SYLLABLE RIEUL YAE RIEULKIYEOK - 0x8E77: 0xB7DA, //HANGUL SYLLABLE RIEUL YAE RIEULMIEUM - 0x8E78: 0xB7DB, //HANGUL SYLLABLE RIEUL YAE RIEULPIEUP - 0x8E79: 0xB7DC, //HANGUL SYLLABLE RIEUL YAE RIEULSIOS - 0x8E7A: 0xB7DD, //HANGUL SYLLABLE RIEUL YAE RIEULTHIEUTH - 0x8E81: 0xB7DE, //HANGUL SYLLABLE RIEUL YAE RIEULPHIEUPH - 0x8E82: 0xB7DF, //HANGUL SYLLABLE RIEUL YAE RIEULHIEUH - 0x8E83: 0xB7E0, //HANGUL SYLLABLE RIEUL YAE MIEUM - 0x8E84: 0xB7E1, //HANGUL SYLLABLE RIEUL YAE PIEUP - 0x8E85: 0xB7E2, //HANGUL SYLLABLE RIEUL YAE PIEUPSIOS - 0x8E86: 0xB7E3, //HANGUL SYLLABLE RIEUL YAE SIOS - 0x8E87: 0xB7E4, //HANGUL SYLLABLE RIEUL YAE SSANGSIOS - 0x8E88: 0xB7E5, //HANGUL SYLLABLE RIEUL YAE IEUNG - 0x8E89: 0xB7E6, //HANGUL SYLLABLE RIEUL YAE CIEUC - 0x8E8A: 0xB7E7, //HANGUL SYLLABLE RIEUL YAE CHIEUCH - 0x8E8B: 0xB7E8, //HANGUL SYLLABLE RIEUL YAE KHIEUKH - 0x8E8C: 0xB7E9, //HANGUL SYLLABLE RIEUL YAE THIEUTH - 0x8E8D: 0xB7EA, //HANGUL SYLLABLE RIEUL YAE PHIEUPH - 0x8E8E: 0xB7EB, //HANGUL SYLLABLE RIEUL YAE HIEUH - 0x8E8F: 0xB7EE, //HANGUL SYLLABLE RIEUL EO SSANGKIYEOK - 0x8E90: 0xB7EF, //HANGUL SYLLABLE RIEUL EO KIYEOKSIOS - 0x8E91: 0xB7F1, //HANGUL SYLLABLE RIEUL EO NIEUNCIEUC - 0x8E92: 0xB7F2, //HANGUL SYLLABLE RIEUL EO NIEUNHIEUH - 0x8E93: 0xB7F3, //HANGUL SYLLABLE RIEUL EO TIKEUT - 0x8E94: 0xB7F5, //HANGUL SYLLABLE RIEUL EO RIEULKIYEOK - 0x8E95: 0xB7F6, //HANGUL SYLLABLE RIEUL EO RIEULMIEUM - 0x8E96: 0xB7F7, //HANGUL SYLLABLE RIEUL EO RIEULPIEUP - 0x8E97: 0xB7F8, //HANGUL SYLLABLE RIEUL EO RIEULSIOS - 0x8E98: 0xB7F9, //HANGUL SYLLABLE RIEUL EO RIEULTHIEUTH - 0x8E99: 0xB7FA, //HANGUL SYLLABLE RIEUL EO RIEULPHIEUPH - 0x8E9A: 0xB7FB, //HANGUL SYLLABLE RIEUL EO RIEULHIEUH - 0x8E9B: 0xB7FE, //HANGUL SYLLABLE RIEUL EO PIEUPSIOS - 0x8E9C: 0xB802, //HANGUL SYLLABLE RIEUL EO CIEUC - 0x8E9D: 0xB803, //HANGUL SYLLABLE RIEUL EO CHIEUCH - 0x8E9E: 0xB804, //HANGUL SYLLABLE RIEUL EO KHIEUKH - 0x8E9F: 0xB805, //HANGUL SYLLABLE RIEUL EO THIEUTH - 0x8EA0: 0xB806, //HANGUL SYLLABLE RIEUL EO PHIEUPH - 0x8EA1: 0xB80A, //HANGUL SYLLABLE RIEUL E SSANGKIYEOK - 0x8EA2: 0xB80B, //HANGUL SYLLABLE RIEUL E KIYEOKSIOS - 0x8EA3: 0xB80D, //HANGUL SYLLABLE RIEUL E NIEUNCIEUC - 0x8EA4: 0xB80E, //HANGUL SYLLABLE RIEUL E NIEUNHIEUH - 0x8EA5: 0xB80F, //HANGUL SYLLABLE RIEUL E TIKEUT - 0x8EA6: 0xB811, //HANGUL SYLLABLE RIEUL E RIEULKIYEOK - 0x8EA7: 0xB812, //HANGUL SYLLABLE RIEUL E RIEULMIEUM - 0x8EA8: 0xB813, //HANGUL SYLLABLE RIEUL E RIEULPIEUP - 0x8EA9: 0xB814, //HANGUL SYLLABLE RIEUL E RIEULSIOS - 0x8EAA: 0xB815, //HANGUL SYLLABLE RIEUL E RIEULTHIEUTH - 0x8EAB: 0xB816, //HANGUL SYLLABLE RIEUL E RIEULPHIEUPH - 0x8EAC: 0xB817, //HANGUL SYLLABLE RIEUL E RIEULHIEUH - 0x8EAD: 0xB81A, //HANGUL SYLLABLE RIEUL E PIEUPSIOS - 0x8EAE: 0xB81C, //HANGUL SYLLABLE RIEUL E SSANGSIOS - 0x8EAF: 0xB81E, //HANGUL SYLLABLE RIEUL E CIEUC - 0x8EB0: 0xB81F, //HANGUL SYLLABLE RIEUL E CHIEUCH - 0x8EB1: 0xB820, //HANGUL SYLLABLE RIEUL E KHIEUKH - 0x8EB2: 0xB821, //HANGUL SYLLABLE RIEUL E THIEUTH - 0x8EB3: 0xB822, //HANGUL SYLLABLE RIEUL E PHIEUPH - 0x8EB4: 0xB823, //HANGUL SYLLABLE RIEUL E HIEUH - 0x8EB5: 0xB826, //HANGUL SYLLABLE RIEUL YEO SSANGKIYEOK - 0x8EB6: 0xB827, //HANGUL SYLLABLE RIEUL YEO KIYEOKSIOS - 0x8EB7: 0xB829, //HANGUL SYLLABLE RIEUL YEO NIEUNCIEUC - 0x8EB8: 0xB82A, //HANGUL SYLLABLE RIEUL YEO NIEUNHIEUH - 0x8EB9: 0xB82B, //HANGUL SYLLABLE RIEUL YEO TIKEUT - 0x8EBA: 0xB82D, //HANGUL SYLLABLE RIEUL YEO RIEULKIYEOK - 0x8EBB: 0xB82E, //HANGUL SYLLABLE RIEUL YEO RIEULMIEUM - 0x8EBC: 0xB82F, //HANGUL SYLLABLE RIEUL YEO RIEULPIEUP - 0x8EBD: 0xB830, //HANGUL SYLLABLE RIEUL YEO RIEULSIOS - 0x8EBE: 0xB831, //HANGUL SYLLABLE RIEUL YEO RIEULTHIEUTH - 0x8EBF: 0xB832, //HANGUL SYLLABLE RIEUL YEO RIEULPHIEUPH - 0x8EC0: 0xB833, //HANGUL SYLLABLE RIEUL YEO RIEULHIEUH - 0x8EC1: 0xB836, //HANGUL SYLLABLE RIEUL YEO PIEUPSIOS - 0x8EC2: 0xB83A, //HANGUL SYLLABLE RIEUL YEO CIEUC - 0x8EC3: 0xB83B, //HANGUL SYLLABLE RIEUL YEO CHIEUCH - 0x8EC4: 0xB83C, //HANGUL SYLLABLE RIEUL YEO KHIEUKH - 0x8EC5: 0xB83D, //HANGUL SYLLABLE RIEUL YEO THIEUTH - 0x8EC6: 0xB83E, //HANGUL SYLLABLE RIEUL YEO PHIEUPH - 0x8EC7: 0xB83F, //HANGUL SYLLABLE RIEUL YEO HIEUH - 0x8EC8: 0xB841, //HANGUL SYLLABLE RIEUL YE KIYEOK - 0x8EC9: 0xB842, //HANGUL SYLLABLE RIEUL YE SSANGKIYEOK - 0x8ECA: 0xB843, //HANGUL SYLLABLE RIEUL YE KIYEOKSIOS - 0x8ECB: 0xB845, //HANGUL SYLLABLE RIEUL YE NIEUNCIEUC - 0x8ECC: 0xB846, //HANGUL SYLLABLE RIEUL YE NIEUNHIEUH - 0x8ECD: 0xB847, //HANGUL SYLLABLE RIEUL YE TIKEUT - 0x8ECE: 0xB848, //HANGUL SYLLABLE RIEUL YE RIEUL - 0x8ECF: 0xB849, //HANGUL SYLLABLE RIEUL YE RIEULKIYEOK - 0x8ED0: 0xB84A, //HANGUL SYLLABLE RIEUL YE RIEULMIEUM - 0x8ED1: 0xB84B, //HANGUL SYLLABLE RIEUL YE RIEULPIEUP - 0x8ED2: 0xB84C, //HANGUL SYLLABLE RIEUL YE RIEULSIOS - 0x8ED3: 0xB84D, //HANGUL SYLLABLE RIEUL YE RIEULTHIEUTH - 0x8ED4: 0xB84E, //HANGUL SYLLABLE RIEUL YE RIEULPHIEUPH - 0x8ED5: 0xB84F, //HANGUL SYLLABLE RIEUL YE RIEULHIEUH - 0x8ED6: 0xB850, //HANGUL SYLLABLE RIEUL YE MIEUM - 0x8ED7: 0xB852, //HANGUL SYLLABLE RIEUL YE PIEUPSIOS - 0x8ED8: 0xB854, //HANGUL SYLLABLE RIEUL YE SSANGSIOS - 0x8ED9: 0xB855, //HANGUL SYLLABLE RIEUL YE IEUNG - 0x8EDA: 0xB856, //HANGUL SYLLABLE RIEUL YE CIEUC - 0x8EDB: 0xB857, //HANGUL SYLLABLE RIEUL YE CHIEUCH - 0x8EDC: 0xB858, //HANGUL SYLLABLE RIEUL YE KHIEUKH - 0x8EDD: 0xB859, //HANGUL SYLLABLE RIEUL YE THIEUTH - 0x8EDE: 0xB85A, //HANGUL SYLLABLE RIEUL YE PHIEUPH - 0x8EDF: 0xB85B, //HANGUL SYLLABLE RIEUL YE HIEUH - 0x8EE0: 0xB85E, //HANGUL SYLLABLE RIEUL O SSANGKIYEOK - 0x8EE1: 0xB85F, //HANGUL SYLLABLE RIEUL O KIYEOKSIOS - 0x8EE2: 0xB861, //HANGUL SYLLABLE RIEUL O NIEUNCIEUC - 0x8EE3: 0xB862, //HANGUL SYLLABLE RIEUL O NIEUNHIEUH - 0x8EE4: 0xB863, //HANGUL SYLLABLE RIEUL O TIKEUT - 0x8EE5: 0xB865, //HANGUL SYLLABLE RIEUL O RIEULKIYEOK - 0x8EE6: 0xB866, //HANGUL SYLLABLE RIEUL O RIEULMIEUM - 0x8EE7: 0xB867, //HANGUL SYLLABLE RIEUL O RIEULPIEUP - 0x8EE8: 0xB868, //HANGUL SYLLABLE RIEUL O RIEULSIOS - 0x8EE9: 0xB869, //HANGUL SYLLABLE RIEUL O RIEULTHIEUTH - 0x8EEA: 0xB86A, //HANGUL SYLLABLE RIEUL O RIEULPHIEUPH - 0x8EEB: 0xB86B, //HANGUL SYLLABLE RIEUL O RIEULHIEUH - 0x8EEC: 0xB86E, //HANGUL SYLLABLE RIEUL O PIEUPSIOS - 0x8EED: 0xB870, //HANGUL SYLLABLE RIEUL O SSANGSIOS - 0x8EEE: 0xB872, //HANGUL SYLLABLE RIEUL O CIEUC - 0x8EEF: 0xB873, //HANGUL SYLLABLE RIEUL O CHIEUCH - 0x8EF0: 0xB874, //HANGUL SYLLABLE RIEUL O KHIEUKH - 0x8EF1: 0xB875, //HANGUL SYLLABLE RIEUL O THIEUTH - 0x8EF2: 0xB876, //HANGUL SYLLABLE RIEUL O PHIEUPH - 0x8EF3: 0xB877, //HANGUL SYLLABLE RIEUL O HIEUH - 0x8EF4: 0xB879, //HANGUL SYLLABLE RIEUL WA KIYEOK - 0x8EF5: 0xB87A, //HANGUL SYLLABLE RIEUL WA SSANGKIYEOK - 0x8EF6: 0xB87B, //HANGUL SYLLABLE RIEUL WA KIYEOKSIOS - 0x8EF7: 0xB87D, //HANGUL SYLLABLE RIEUL WA NIEUNCIEUC - 0x8EF8: 0xB87E, //HANGUL SYLLABLE RIEUL WA NIEUNHIEUH - 0x8EF9: 0xB87F, //HANGUL SYLLABLE RIEUL WA TIKEUT - 0x8EFA: 0xB880, //HANGUL SYLLABLE RIEUL WA RIEUL - 0x8EFB: 0xB881, //HANGUL SYLLABLE RIEUL WA RIEULKIYEOK - 0x8EFC: 0xB882, //HANGUL SYLLABLE RIEUL WA RIEULMIEUM - 0x8EFD: 0xB883, //HANGUL SYLLABLE RIEUL WA RIEULPIEUP - 0x8EFE: 0xB884, //HANGUL SYLLABLE RIEUL WA RIEULSIOS - 0x8F41: 0xB885, //HANGUL SYLLABLE RIEUL WA RIEULTHIEUTH - 0x8F42: 0xB886, //HANGUL SYLLABLE RIEUL WA RIEULPHIEUPH - 0x8F43: 0xB887, //HANGUL SYLLABLE RIEUL WA RIEULHIEUH - 0x8F44: 0xB888, //HANGUL SYLLABLE RIEUL WA MIEUM - 0x8F45: 0xB889, //HANGUL SYLLABLE RIEUL WA PIEUP - 0x8F46: 0xB88A, //HANGUL SYLLABLE RIEUL WA PIEUPSIOS - 0x8F47: 0xB88B, //HANGUL SYLLABLE RIEUL WA SIOS - 0x8F48: 0xB88C, //HANGUL SYLLABLE RIEUL WA SSANGSIOS - 0x8F49: 0xB88E, //HANGUL SYLLABLE RIEUL WA CIEUC - 0x8F4A: 0xB88F, //HANGUL SYLLABLE RIEUL WA CHIEUCH - 0x8F4B: 0xB890, //HANGUL SYLLABLE RIEUL WA KHIEUKH - 0x8F4C: 0xB891, //HANGUL SYLLABLE RIEUL WA THIEUTH - 0x8F4D: 0xB892, //HANGUL SYLLABLE RIEUL WA PHIEUPH - 0x8F4E: 0xB893, //HANGUL SYLLABLE RIEUL WA HIEUH - 0x8F4F: 0xB894, //HANGUL SYLLABLE RIEUL WAE - 0x8F50: 0xB895, //HANGUL SYLLABLE RIEUL WAE KIYEOK - 0x8F51: 0xB896, //HANGUL SYLLABLE RIEUL WAE SSANGKIYEOK - 0x8F52: 0xB897, //HANGUL SYLLABLE RIEUL WAE KIYEOKSIOS - 0x8F53: 0xB898, //HANGUL SYLLABLE RIEUL WAE NIEUN - 0x8F54: 0xB899, //HANGUL SYLLABLE RIEUL WAE NIEUNCIEUC - 0x8F55: 0xB89A, //HANGUL SYLLABLE RIEUL WAE NIEUNHIEUH - 0x8F56: 0xB89B, //HANGUL SYLLABLE RIEUL WAE TIKEUT - 0x8F57: 0xB89C, //HANGUL SYLLABLE RIEUL WAE RIEUL - 0x8F58: 0xB89D, //HANGUL SYLLABLE RIEUL WAE RIEULKIYEOK - 0x8F59: 0xB89E, //HANGUL SYLLABLE RIEUL WAE RIEULMIEUM - 0x8F5A: 0xB89F, //HANGUL SYLLABLE RIEUL WAE RIEULPIEUP - 0x8F61: 0xB8A0, //HANGUL SYLLABLE RIEUL WAE RIEULSIOS - 0x8F62: 0xB8A1, //HANGUL SYLLABLE RIEUL WAE RIEULTHIEUTH - 0x8F63: 0xB8A2, //HANGUL SYLLABLE RIEUL WAE RIEULPHIEUPH - 0x8F64: 0xB8A3, //HANGUL SYLLABLE RIEUL WAE RIEULHIEUH - 0x8F65: 0xB8A4, //HANGUL SYLLABLE RIEUL WAE MIEUM - 0x8F66: 0xB8A5, //HANGUL SYLLABLE RIEUL WAE PIEUP - 0x8F67: 0xB8A6, //HANGUL SYLLABLE RIEUL WAE PIEUPSIOS - 0x8F68: 0xB8A7, //HANGUL SYLLABLE RIEUL WAE SIOS - 0x8F69: 0xB8A9, //HANGUL SYLLABLE RIEUL WAE IEUNG - 0x8F6A: 0xB8AA, //HANGUL SYLLABLE RIEUL WAE CIEUC - 0x8F6B: 0xB8AB, //HANGUL SYLLABLE RIEUL WAE CHIEUCH - 0x8F6C: 0xB8AC, //HANGUL SYLLABLE RIEUL WAE KHIEUKH - 0x8F6D: 0xB8AD, //HANGUL SYLLABLE RIEUL WAE THIEUTH - 0x8F6E: 0xB8AE, //HANGUL SYLLABLE RIEUL WAE PHIEUPH - 0x8F6F: 0xB8AF, //HANGUL SYLLABLE RIEUL WAE HIEUH - 0x8F70: 0xB8B1, //HANGUL SYLLABLE RIEUL OE KIYEOK - 0x8F71: 0xB8B2, //HANGUL SYLLABLE RIEUL OE SSANGKIYEOK - 0x8F72: 0xB8B3, //HANGUL SYLLABLE RIEUL OE KIYEOKSIOS - 0x8F73: 0xB8B5, //HANGUL SYLLABLE RIEUL OE NIEUNCIEUC - 0x8F74: 0xB8B6, //HANGUL SYLLABLE RIEUL OE NIEUNHIEUH - 0x8F75: 0xB8B7, //HANGUL SYLLABLE RIEUL OE TIKEUT - 0x8F76: 0xB8B9, //HANGUL SYLLABLE RIEUL OE RIEULKIYEOK - 0x8F77: 0xB8BA, //HANGUL SYLLABLE RIEUL OE RIEULMIEUM - 0x8F78: 0xB8BB, //HANGUL SYLLABLE RIEUL OE RIEULPIEUP - 0x8F79: 0xB8BC, //HANGUL SYLLABLE RIEUL OE RIEULSIOS - 0x8F7A: 0xB8BD, //HANGUL SYLLABLE RIEUL OE RIEULTHIEUTH - 0x8F81: 0xB8BE, //HANGUL SYLLABLE RIEUL OE RIEULPHIEUPH - 0x8F82: 0xB8BF, //HANGUL SYLLABLE RIEUL OE RIEULHIEUH - 0x8F83: 0xB8C2, //HANGUL SYLLABLE RIEUL OE PIEUPSIOS - 0x8F84: 0xB8C4, //HANGUL SYLLABLE RIEUL OE SSANGSIOS - 0x8F85: 0xB8C6, //HANGUL SYLLABLE RIEUL OE CIEUC - 0x8F86: 0xB8C7, //HANGUL SYLLABLE RIEUL OE CHIEUCH - 0x8F87: 0xB8C8, //HANGUL SYLLABLE RIEUL OE KHIEUKH - 0x8F88: 0xB8C9, //HANGUL SYLLABLE RIEUL OE THIEUTH - 0x8F89: 0xB8CA, //HANGUL SYLLABLE RIEUL OE PHIEUPH - 0x8F8A: 0xB8CB, //HANGUL SYLLABLE RIEUL OE HIEUH - 0x8F8B: 0xB8CD, //HANGUL SYLLABLE RIEUL YO KIYEOK - 0x8F8C: 0xB8CE, //HANGUL SYLLABLE RIEUL YO SSANGKIYEOK - 0x8F8D: 0xB8CF, //HANGUL SYLLABLE RIEUL YO KIYEOKSIOS - 0x8F8E: 0xB8D1, //HANGUL SYLLABLE RIEUL YO NIEUNCIEUC - 0x8F8F: 0xB8D2, //HANGUL SYLLABLE RIEUL YO NIEUNHIEUH - 0x8F90: 0xB8D3, //HANGUL SYLLABLE RIEUL YO TIKEUT - 0x8F91: 0xB8D5, //HANGUL SYLLABLE RIEUL YO RIEULKIYEOK - 0x8F92: 0xB8D6, //HANGUL SYLLABLE RIEUL YO RIEULMIEUM - 0x8F93: 0xB8D7, //HANGUL SYLLABLE RIEUL YO RIEULPIEUP - 0x8F94: 0xB8D8, //HANGUL SYLLABLE RIEUL YO RIEULSIOS - 0x8F95: 0xB8D9, //HANGUL SYLLABLE RIEUL YO RIEULTHIEUTH - 0x8F96: 0xB8DA, //HANGUL SYLLABLE RIEUL YO RIEULPHIEUPH - 0x8F97: 0xB8DB, //HANGUL SYLLABLE RIEUL YO RIEULHIEUH - 0x8F98: 0xB8DC, //HANGUL SYLLABLE RIEUL YO MIEUM - 0x8F99: 0xB8DE, //HANGUL SYLLABLE RIEUL YO PIEUPSIOS - 0x8F9A: 0xB8E0, //HANGUL SYLLABLE RIEUL YO SSANGSIOS - 0x8F9B: 0xB8E2, //HANGUL SYLLABLE RIEUL YO CIEUC - 0x8F9C: 0xB8E3, //HANGUL SYLLABLE RIEUL YO CHIEUCH - 0x8F9D: 0xB8E4, //HANGUL SYLLABLE RIEUL YO KHIEUKH - 0x8F9E: 0xB8E5, //HANGUL SYLLABLE RIEUL YO THIEUTH - 0x8F9F: 0xB8E6, //HANGUL SYLLABLE RIEUL YO PHIEUPH - 0x8FA0: 0xB8E7, //HANGUL SYLLABLE RIEUL YO HIEUH - 0x8FA1: 0xB8EA, //HANGUL SYLLABLE RIEUL U SSANGKIYEOK - 0x8FA2: 0xB8EB, //HANGUL SYLLABLE RIEUL U KIYEOKSIOS - 0x8FA3: 0xB8ED, //HANGUL SYLLABLE RIEUL U NIEUNCIEUC - 0x8FA4: 0xB8EE, //HANGUL SYLLABLE RIEUL U NIEUNHIEUH - 0x8FA5: 0xB8EF, //HANGUL SYLLABLE RIEUL U TIKEUT - 0x8FA6: 0xB8F1, //HANGUL SYLLABLE RIEUL U RIEULKIYEOK - 0x8FA7: 0xB8F2, //HANGUL SYLLABLE RIEUL U RIEULMIEUM - 0x8FA8: 0xB8F3, //HANGUL SYLLABLE RIEUL U RIEULPIEUP - 0x8FA9: 0xB8F4, //HANGUL SYLLABLE RIEUL U RIEULSIOS - 0x8FAA: 0xB8F5, //HANGUL SYLLABLE RIEUL U RIEULTHIEUTH - 0x8FAB: 0xB8F6, //HANGUL SYLLABLE RIEUL U RIEULPHIEUPH - 0x8FAC: 0xB8F7, //HANGUL SYLLABLE RIEUL U RIEULHIEUH - 0x8FAD: 0xB8FA, //HANGUL SYLLABLE RIEUL U PIEUPSIOS - 0x8FAE: 0xB8FC, //HANGUL SYLLABLE RIEUL U SSANGSIOS - 0x8FAF: 0xB8FE, //HANGUL SYLLABLE RIEUL U CIEUC - 0x8FB0: 0xB8FF, //HANGUL SYLLABLE RIEUL U CHIEUCH - 0x8FB1: 0xB900, //HANGUL SYLLABLE RIEUL U KHIEUKH - 0x8FB2: 0xB901, //HANGUL SYLLABLE RIEUL U THIEUTH - 0x8FB3: 0xB902, //HANGUL SYLLABLE RIEUL U PHIEUPH - 0x8FB4: 0xB903, //HANGUL SYLLABLE RIEUL U HIEUH - 0x8FB5: 0xB905, //HANGUL SYLLABLE RIEUL WEO KIYEOK - 0x8FB6: 0xB906, //HANGUL SYLLABLE RIEUL WEO SSANGKIYEOK - 0x8FB7: 0xB907, //HANGUL SYLLABLE RIEUL WEO KIYEOKSIOS - 0x8FB8: 0xB908, //HANGUL SYLLABLE RIEUL WEO NIEUN - 0x8FB9: 0xB909, //HANGUL SYLLABLE RIEUL WEO NIEUNCIEUC - 0x8FBA: 0xB90A, //HANGUL SYLLABLE RIEUL WEO NIEUNHIEUH - 0x8FBB: 0xB90B, //HANGUL SYLLABLE RIEUL WEO TIKEUT - 0x8FBC: 0xB90C, //HANGUL SYLLABLE RIEUL WEO RIEUL - 0x8FBD: 0xB90D, //HANGUL SYLLABLE RIEUL WEO RIEULKIYEOK - 0x8FBE: 0xB90E, //HANGUL SYLLABLE RIEUL WEO RIEULMIEUM - 0x8FBF: 0xB90F, //HANGUL SYLLABLE RIEUL WEO RIEULPIEUP - 0x8FC0: 0xB910, //HANGUL SYLLABLE RIEUL WEO RIEULSIOS - 0x8FC1: 0xB911, //HANGUL SYLLABLE RIEUL WEO RIEULTHIEUTH - 0x8FC2: 0xB912, //HANGUL SYLLABLE RIEUL WEO RIEULPHIEUPH - 0x8FC3: 0xB913, //HANGUL SYLLABLE RIEUL WEO RIEULHIEUH - 0x8FC4: 0xB914, //HANGUL SYLLABLE RIEUL WEO MIEUM - 0x8FC5: 0xB915, //HANGUL SYLLABLE RIEUL WEO PIEUP - 0x8FC6: 0xB916, //HANGUL SYLLABLE RIEUL WEO PIEUPSIOS - 0x8FC7: 0xB917, //HANGUL SYLLABLE RIEUL WEO SIOS - 0x8FC8: 0xB919, //HANGUL SYLLABLE RIEUL WEO IEUNG - 0x8FC9: 0xB91A, //HANGUL SYLLABLE RIEUL WEO CIEUC - 0x8FCA: 0xB91B, //HANGUL SYLLABLE RIEUL WEO CHIEUCH - 0x8FCB: 0xB91C, //HANGUL SYLLABLE RIEUL WEO KHIEUKH - 0x8FCC: 0xB91D, //HANGUL SYLLABLE RIEUL WEO THIEUTH - 0x8FCD: 0xB91E, //HANGUL SYLLABLE RIEUL WEO PHIEUPH - 0x8FCE: 0xB91F, //HANGUL SYLLABLE RIEUL WEO HIEUH - 0x8FCF: 0xB921, //HANGUL SYLLABLE RIEUL WE KIYEOK - 0x8FD0: 0xB922, //HANGUL SYLLABLE RIEUL WE SSANGKIYEOK - 0x8FD1: 0xB923, //HANGUL SYLLABLE RIEUL WE KIYEOKSIOS - 0x8FD2: 0xB924, //HANGUL SYLLABLE RIEUL WE NIEUN - 0x8FD3: 0xB925, //HANGUL SYLLABLE RIEUL WE NIEUNCIEUC - 0x8FD4: 0xB926, //HANGUL SYLLABLE RIEUL WE NIEUNHIEUH - 0x8FD5: 0xB927, //HANGUL SYLLABLE RIEUL WE TIKEUT - 0x8FD6: 0xB928, //HANGUL SYLLABLE RIEUL WE RIEUL - 0x8FD7: 0xB929, //HANGUL SYLLABLE RIEUL WE RIEULKIYEOK - 0x8FD8: 0xB92A, //HANGUL SYLLABLE RIEUL WE RIEULMIEUM - 0x8FD9: 0xB92B, //HANGUL SYLLABLE RIEUL WE RIEULPIEUP - 0x8FDA: 0xB92C, //HANGUL SYLLABLE RIEUL WE RIEULSIOS - 0x8FDB: 0xB92D, //HANGUL SYLLABLE RIEUL WE RIEULTHIEUTH - 0x8FDC: 0xB92E, //HANGUL SYLLABLE RIEUL WE RIEULPHIEUPH - 0x8FDD: 0xB92F, //HANGUL SYLLABLE RIEUL WE RIEULHIEUH - 0x8FDE: 0xB930, //HANGUL SYLLABLE RIEUL WE MIEUM - 0x8FDF: 0xB931, //HANGUL SYLLABLE RIEUL WE PIEUP - 0x8FE0: 0xB932, //HANGUL SYLLABLE RIEUL WE PIEUPSIOS - 0x8FE1: 0xB933, //HANGUL SYLLABLE RIEUL WE SIOS - 0x8FE2: 0xB934, //HANGUL SYLLABLE RIEUL WE SSANGSIOS - 0x8FE3: 0xB935, //HANGUL SYLLABLE RIEUL WE IEUNG - 0x8FE4: 0xB936, //HANGUL SYLLABLE RIEUL WE CIEUC - 0x8FE5: 0xB937, //HANGUL SYLLABLE RIEUL WE CHIEUCH - 0x8FE6: 0xB938, //HANGUL SYLLABLE RIEUL WE KHIEUKH - 0x8FE7: 0xB939, //HANGUL SYLLABLE RIEUL WE THIEUTH - 0x8FE8: 0xB93A, //HANGUL SYLLABLE RIEUL WE PHIEUPH - 0x8FE9: 0xB93B, //HANGUL SYLLABLE RIEUL WE HIEUH - 0x8FEA: 0xB93E, //HANGUL SYLLABLE RIEUL WI SSANGKIYEOK - 0x8FEB: 0xB93F, //HANGUL SYLLABLE RIEUL WI KIYEOKSIOS - 0x8FEC: 0xB941, //HANGUL SYLLABLE RIEUL WI NIEUNCIEUC - 0x8FED: 0xB942, //HANGUL SYLLABLE RIEUL WI NIEUNHIEUH - 0x8FEE: 0xB943, //HANGUL SYLLABLE RIEUL WI TIKEUT - 0x8FEF: 0xB945, //HANGUL SYLLABLE RIEUL WI RIEULKIYEOK - 0x8FF0: 0xB946, //HANGUL SYLLABLE RIEUL WI RIEULMIEUM - 0x8FF1: 0xB947, //HANGUL SYLLABLE RIEUL WI RIEULPIEUP - 0x8FF2: 0xB948, //HANGUL SYLLABLE RIEUL WI RIEULSIOS - 0x8FF3: 0xB949, //HANGUL SYLLABLE RIEUL WI RIEULTHIEUTH - 0x8FF4: 0xB94A, //HANGUL SYLLABLE RIEUL WI RIEULPHIEUPH - 0x8FF5: 0xB94B, //HANGUL SYLLABLE RIEUL WI RIEULHIEUH - 0x8FF6: 0xB94D, //HANGUL SYLLABLE RIEUL WI PIEUP - 0x8FF7: 0xB94E, //HANGUL SYLLABLE RIEUL WI PIEUPSIOS - 0x8FF8: 0xB950, //HANGUL SYLLABLE RIEUL WI SSANGSIOS - 0x8FF9: 0xB952, //HANGUL SYLLABLE RIEUL WI CIEUC - 0x8FFA: 0xB953, //HANGUL SYLLABLE RIEUL WI CHIEUCH - 0x8FFB: 0xB954, //HANGUL SYLLABLE RIEUL WI KHIEUKH - 0x8FFC: 0xB955, //HANGUL SYLLABLE RIEUL WI THIEUTH - 0x8FFD: 0xB956, //HANGUL SYLLABLE RIEUL WI PHIEUPH - 0x8FFE: 0xB957, //HANGUL SYLLABLE RIEUL WI HIEUH - 0x9041: 0xB95A, //HANGUL SYLLABLE RIEUL YU SSANGKIYEOK - 0x9042: 0xB95B, //HANGUL SYLLABLE RIEUL YU KIYEOKSIOS - 0x9043: 0xB95D, //HANGUL SYLLABLE RIEUL YU NIEUNCIEUC - 0x9044: 0xB95E, //HANGUL SYLLABLE RIEUL YU NIEUNHIEUH - 0x9045: 0xB95F, //HANGUL SYLLABLE RIEUL YU TIKEUT - 0x9046: 0xB961, //HANGUL SYLLABLE RIEUL YU RIEULKIYEOK - 0x9047: 0xB962, //HANGUL SYLLABLE RIEUL YU RIEULMIEUM - 0x9048: 0xB963, //HANGUL SYLLABLE RIEUL YU RIEULPIEUP - 0x9049: 0xB964, //HANGUL SYLLABLE RIEUL YU RIEULSIOS - 0x904A: 0xB965, //HANGUL SYLLABLE RIEUL YU RIEULTHIEUTH - 0x904B: 0xB966, //HANGUL SYLLABLE RIEUL YU RIEULPHIEUPH - 0x904C: 0xB967, //HANGUL SYLLABLE RIEUL YU RIEULHIEUH - 0x904D: 0xB96A, //HANGUL SYLLABLE RIEUL YU PIEUPSIOS - 0x904E: 0xB96C, //HANGUL SYLLABLE RIEUL YU SSANGSIOS - 0x904F: 0xB96E, //HANGUL SYLLABLE RIEUL YU CIEUC - 0x9050: 0xB96F, //HANGUL SYLLABLE RIEUL YU CHIEUCH - 0x9051: 0xB970, //HANGUL SYLLABLE RIEUL YU KHIEUKH - 0x9052: 0xB971, //HANGUL SYLLABLE RIEUL YU THIEUTH - 0x9053: 0xB972, //HANGUL SYLLABLE RIEUL YU PHIEUPH - 0x9054: 0xB973, //HANGUL SYLLABLE RIEUL YU HIEUH - 0x9055: 0xB976, //HANGUL SYLLABLE RIEUL EU SSANGKIYEOK - 0x9056: 0xB977, //HANGUL SYLLABLE RIEUL EU KIYEOKSIOS - 0x9057: 0xB979, //HANGUL SYLLABLE RIEUL EU NIEUNCIEUC - 0x9058: 0xB97A, //HANGUL SYLLABLE RIEUL EU NIEUNHIEUH - 0x9059: 0xB97B, //HANGUL SYLLABLE RIEUL EU TIKEUT - 0x905A: 0xB97D, //HANGUL SYLLABLE RIEUL EU RIEULKIYEOK - 0x9061: 0xB97E, //HANGUL SYLLABLE RIEUL EU RIEULMIEUM - 0x9062: 0xB97F, //HANGUL SYLLABLE RIEUL EU RIEULPIEUP - 0x9063: 0xB980, //HANGUL SYLLABLE RIEUL EU RIEULSIOS - 0x9064: 0xB981, //HANGUL SYLLABLE RIEUL EU RIEULTHIEUTH - 0x9065: 0xB982, //HANGUL SYLLABLE RIEUL EU RIEULPHIEUPH - 0x9066: 0xB983, //HANGUL SYLLABLE RIEUL EU RIEULHIEUH - 0x9067: 0xB986, //HANGUL SYLLABLE RIEUL EU PIEUPSIOS - 0x9068: 0xB988, //HANGUL SYLLABLE RIEUL EU SSANGSIOS - 0x9069: 0xB98B, //HANGUL SYLLABLE RIEUL EU CHIEUCH - 0x906A: 0xB98C, //HANGUL SYLLABLE RIEUL EU KHIEUKH - 0x906B: 0xB98F, //HANGUL SYLLABLE RIEUL EU HIEUH - 0x906C: 0xB990, //HANGUL SYLLABLE RIEUL YI - 0x906D: 0xB991, //HANGUL SYLLABLE RIEUL YI KIYEOK - 0x906E: 0xB992, //HANGUL SYLLABLE RIEUL YI SSANGKIYEOK - 0x906F: 0xB993, //HANGUL SYLLABLE RIEUL YI KIYEOKSIOS - 0x9070: 0xB994, //HANGUL SYLLABLE RIEUL YI NIEUN - 0x9071: 0xB995, //HANGUL SYLLABLE RIEUL YI NIEUNCIEUC - 0x9072: 0xB996, //HANGUL SYLLABLE RIEUL YI NIEUNHIEUH - 0x9073: 0xB997, //HANGUL SYLLABLE RIEUL YI TIKEUT - 0x9074: 0xB998, //HANGUL SYLLABLE RIEUL YI RIEUL - 0x9075: 0xB999, //HANGUL SYLLABLE RIEUL YI RIEULKIYEOK - 0x9076: 0xB99A, //HANGUL SYLLABLE RIEUL YI RIEULMIEUM - 0x9077: 0xB99B, //HANGUL SYLLABLE RIEUL YI RIEULPIEUP - 0x9078: 0xB99C, //HANGUL SYLLABLE RIEUL YI RIEULSIOS - 0x9079: 0xB99D, //HANGUL SYLLABLE RIEUL YI RIEULTHIEUTH - 0x907A: 0xB99E, //HANGUL SYLLABLE RIEUL YI RIEULPHIEUPH - 0x9081: 0xB99F, //HANGUL SYLLABLE RIEUL YI RIEULHIEUH - 0x9082: 0xB9A0, //HANGUL SYLLABLE RIEUL YI MIEUM - 0x9083: 0xB9A1, //HANGUL SYLLABLE RIEUL YI PIEUP - 0x9084: 0xB9A2, //HANGUL SYLLABLE RIEUL YI PIEUPSIOS - 0x9085: 0xB9A3, //HANGUL SYLLABLE RIEUL YI SIOS - 0x9086: 0xB9A4, //HANGUL SYLLABLE RIEUL YI SSANGSIOS - 0x9087: 0xB9A5, //HANGUL SYLLABLE RIEUL YI IEUNG - 0x9088: 0xB9A6, //HANGUL SYLLABLE RIEUL YI CIEUC - 0x9089: 0xB9A7, //HANGUL SYLLABLE RIEUL YI CHIEUCH - 0x908A: 0xB9A8, //HANGUL SYLLABLE RIEUL YI KHIEUKH - 0x908B: 0xB9A9, //HANGUL SYLLABLE RIEUL YI THIEUTH - 0x908C: 0xB9AA, //HANGUL SYLLABLE RIEUL YI PHIEUPH - 0x908D: 0xB9AB, //HANGUL SYLLABLE RIEUL YI HIEUH - 0x908E: 0xB9AE, //HANGUL SYLLABLE RIEUL I SSANGKIYEOK - 0x908F: 0xB9AF, //HANGUL SYLLABLE RIEUL I KIYEOKSIOS - 0x9090: 0xB9B1, //HANGUL SYLLABLE RIEUL I NIEUNCIEUC - 0x9091: 0xB9B2, //HANGUL SYLLABLE RIEUL I NIEUNHIEUH - 0x9092: 0xB9B3, //HANGUL SYLLABLE RIEUL I TIKEUT - 0x9093: 0xB9B5, //HANGUL SYLLABLE RIEUL I RIEULKIYEOK - 0x9094: 0xB9B6, //HANGUL SYLLABLE RIEUL I RIEULMIEUM - 0x9095: 0xB9B7, //HANGUL SYLLABLE RIEUL I RIEULPIEUP - 0x9096: 0xB9B8, //HANGUL SYLLABLE RIEUL I RIEULSIOS - 0x9097: 0xB9B9, //HANGUL SYLLABLE RIEUL I RIEULTHIEUTH - 0x9098: 0xB9BA, //HANGUL SYLLABLE RIEUL I RIEULPHIEUPH - 0x9099: 0xB9BB, //HANGUL SYLLABLE RIEUL I RIEULHIEUH - 0x909A: 0xB9BE, //HANGUL SYLLABLE RIEUL I PIEUPSIOS - 0x909B: 0xB9C0, //HANGUL SYLLABLE RIEUL I SSANGSIOS - 0x909C: 0xB9C2, //HANGUL SYLLABLE RIEUL I CIEUC - 0x909D: 0xB9C3, //HANGUL SYLLABLE RIEUL I CHIEUCH - 0x909E: 0xB9C4, //HANGUL SYLLABLE RIEUL I KHIEUKH - 0x909F: 0xB9C5, //HANGUL SYLLABLE RIEUL I THIEUTH - 0x90A0: 0xB9C6, //HANGUL SYLLABLE RIEUL I PHIEUPH - 0x90A1: 0xB9C7, //HANGUL SYLLABLE RIEUL I HIEUH - 0x90A2: 0xB9CA, //HANGUL SYLLABLE MIEUM A SSANGKIYEOK - 0x90A3: 0xB9CB, //HANGUL SYLLABLE MIEUM A KIYEOKSIOS - 0x90A4: 0xB9CD, //HANGUL SYLLABLE MIEUM A NIEUNCIEUC - 0x90A5: 0xB9D3, //HANGUL SYLLABLE MIEUM A RIEULPIEUP - 0x90A6: 0xB9D4, //HANGUL SYLLABLE MIEUM A RIEULSIOS - 0x90A7: 0xB9D5, //HANGUL SYLLABLE MIEUM A RIEULTHIEUTH - 0x90A8: 0xB9D6, //HANGUL SYLLABLE MIEUM A RIEULPHIEUPH - 0x90A9: 0xB9D7, //HANGUL SYLLABLE MIEUM A RIEULHIEUH - 0x90AA: 0xB9DA, //HANGUL SYLLABLE MIEUM A PIEUPSIOS - 0x90AB: 0xB9DC, //HANGUL SYLLABLE MIEUM A SSANGSIOS - 0x90AC: 0xB9DF, //HANGUL SYLLABLE MIEUM A CHIEUCH - 0x90AD: 0xB9E0, //HANGUL SYLLABLE MIEUM A KHIEUKH - 0x90AE: 0xB9E2, //HANGUL SYLLABLE MIEUM A PHIEUPH - 0x90AF: 0xB9E6, //HANGUL SYLLABLE MIEUM AE SSANGKIYEOK - 0x90B0: 0xB9E7, //HANGUL SYLLABLE MIEUM AE KIYEOKSIOS - 0x90B1: 0xB9E9, //HANGUL SYLLABLE MIEUM AE NIEUNCIEUC - 0x90B2: 0xB9EA, //HANGUL SYLLABLE MIEUM AE NIEUNHIEUH - 0x90B3: 0xB9EB, //HANGUL SYLLABLE MIEUM AE TIKEUT - 0x90B4: 0xB9ED, //HANGUL SYLLABLE MIEUM AE RIEULKIYEOK - 0x90B5: 0xB9EE, //HANGUL SYLLABLE MIEUM AE RIEULMIEUM - 0x90B6: 0xB9EF, //HANGUL SYLLABLE MIEUM AE RIEULPIEUP - 0x90B7: 0xB9F0, //HANGUL SYLLABLE MIEUM AE RIEULSIOS - 0x90B8: 0xB9F1, //HANGUL SYLLABLE MIEUM AE RIEULTHIEUTH - 0x90B9: 0xB9F2, //HANGUL SYLLABLE MIEUM AE RIEULPHIEUPH - 0x90BA: 0xB9F3, //HANGUL SYLLABLE MIEUM AE RIEULHIEUH - 0x90BB: 0xB9F6, //HANGUL SYLLABLE MIEUM AE PIEUPSIOS - 0x90BC: 0xB9FB, //HANGUL SYLLABLE MIEUM AE CHIEUCH - 0x90BD: 0xB9FC, //HANGUL SYLLABLE MIEUM AE KHIEUKH - 0x90BE: 0xB9FD, //HANGUL SYLLABLE MIEUM AE THIEUTH - 0x90BF: 0xB9FE, //HANGUL SYLLABLE MIEUM AE PHIEUPH - 0x90C0: 0xB9FF, //HANGUL SYLLABLE MIEUM AE HIEUH - 0x90C1: 0xBA02, //HANGUL SYLLABLE MIEUM YA SSANGKIYEOK - 0x90C2: 0xBA03, //HANGUL SYLLABLE MIEUM YA KIYEOKSIOS - 0x90C3: 0xBA04, //HANGUL SYLLABLE MIEUM YA NIEUN - 0x90C4: 0xBA05, //HANGUL SYLLABLE MIEUM YA NIEUNCIEUC - 0x90C5: 0xBA06, //HANGUL SYLLABLE MIEUM YA NIEUNHIEUH - 0x90C6: 0xBA07, //HANGUL SYLLABLE MIEUM YA TIKEUT - 0x90C7: 0xBA09, //HANGUL SYLLABLE MIEUM YA RIEULKIYEOK - 0x90C8: 0xBA0A, //HANGUL SYLLABLE MIEUM YA RIEULMIEUM - 0x90C9: 0xBA0B, //HANGUL SYLLABLE MIEUM YA RIEULPIEUP - 0x90CA: 0xBA0C, //HANGUL SYLLABLE MIEUM YA RIEULSIOS - 0x90CB: 0xBA0D, //HANGUL SYLLABLE MIEUM YA RIEULTHIEUTH - 0x90CC: 0xBA0E, //HANGUL SYLLABLE MIEUM YA RIEULPHIEUPH - 0x90CD: 0xBA0F, //HANGUL SYLLABLE MIEUM YA RIEULHIEUH - 0x90CE: 0xBA10, //HANGUL SYLLABLE MIEUM YA MIEUM - 0x90CF: 0xBA11, //HANGUL SYLLABLE MIEUM YA PIEUP - 0x90D0: 0xBA12, //HANGUL SYLLABLE MIEUM YA PIEUPSIOS - 0x90D1: 0xBA13, //HANGUL SYLLABLE MIEUM YA SIOS - 0x90D2: 0xBA14, //HANGUL SYLLABLE MIEUM YA SSANGSIOS - 0x90D3: 0xBA16, //HANGUL SYLLABLE MIEUM YA CIEUC - 0x90D4: 0xBA17, //HANGUL SYLLABLE MIEUM YA CHIEUCH - 0x90D5: 0xBA18, //HANGUL SYLLABLE MIEUM YA KHIEUKH - 0x90D6: 0xBA19, //HANGUL SYLLABLE MIEUM YA THIEUTH - 0x90D7: 0xBA1A, //HANGUL SYLLABLE MIEUM YA PHIEUPH - 0x90D8: 0xBA1B, //HANGUL SYLLABLE MIEUM YA HIEUH - 0x90D9: 0xBA1C, //HANGUL SYLLABLE MIEUM YAE - 0x90DA: 0xBA1D, //HANGUL SYLLABLE MIEUM YAE KIYEOK - 0x90DB: 0xBA1E, //HANGUL SYLLABLE MIEUM YAE SSANGKIYEOK - 0x90DC: 0xBA1F, //HANGUL SYLLABLE MIEUM YAE KIYEOKSIOS - 0x90DD: 0xBA20, //HANGUL SYLLABLE MIEUM YAE NIEUN - 0x90DE: 0xBA21, //HANGUL SYLLABLE MIEUM YAE NIEUNCIEUC - 0x90DF: 0xBA22, //HANGUL SYLLABLE MIEUM YAE NIEUNHIEUH - 0x90E0: 0xBA23, //HANGUL SYLLABLE MIEUM YAE TIKEUT - 0x90E1: 0xBA24, //HANGUL SYLLABLE MIEUM YAE RIEUL - 0x90E2: 0xBA25, //HANGUL SYLLABLE MIEUM YAE RIEULKIYEOK - 0x90E3: 0xBA26, //HANGUL SYLLABLE MIEUM YAE RIEULMIEUM - 0x90E4: 0xBA27, //HANGUL SYLLABLE MIEUM YAE RIEULPIEUP - 0x90E5: 0xBA28, //HANGUL SYLLABLE MIEUM YAE RIEULSIOS - 0x90E6: 0xBA29, //HANGUL SYLLABLE MIEUM YAE RIEULTHIEUTH - 0x90E7: 0xBA2A, //HANGUL SYLLABLE MIEUM YAE RIEULPHIEUPH - 0x90E8: 0xBA2B, //HANGUL SYLLABLE MIEUM YAE RIEULHIEUH - 0x90E9: 0xBA2C, //HANGUL SYLLABLE MIEUM YAE MIEUM - 0x90EA: 0xBA2D, //HANGUL SYLLABLE MIEUM YAE PIEUP - 0x90EB: 0xBA2E, //HANGUL SYLLABLE MIEUM YAE PIEUPSIOS - 0x90EC: 0xBA2F, //HANGUL SYLLABLE MIEUM YAE SIOS - 0x90ED: 0xBA30, //HANGUL SYLLABLE MIEUM YAE SSANGSIOS - 0x90EE: 0xBA31, //HANGUL SYLLABLE MIEUM YAE IEUNG - 0x90EF: 0xBA32, //HANGUL SYLLABLE MIEUM YAE CIEUC - 0x90F0: 0xBA33, //HANGUL SYLLABLE MIEUM YAE CHIEUCH - 0x90F1: 0xBA34, //HANGUL SYLLABLE MIEUM YAE KHIEUKH - 0x90F2: 0xBA35, //HANGUL SYLLABLE MIEUM YAE THIEUTH - 0x90F3: 0xBA36, //HANGUL SYLLABLE MIEUM YAE PHIEUPH - 0x90F4: 0xBA37, //HANGUL SYLLABLE MIEUM YAE HIEUH - 0x90F5: 0xBA3A, //HANGUL SYLLABLE MIEUM EO SSANGKIYEOK - 0x90F6: 0xBA3B, //HANGUL SYLLABLE MIEUM EO KIYEOKSIOS - 0x90F7: 0xBA3D, //HANGUL SYLLABLE MIEUM EO NIEUNCIEUC - 0x90F8: 0xBA3E, //HANGUL SYLLABLE MIEUM EO NIEUNHIEUH - 0x90F9: 0xBA3F, //HANGUL SYLLABLE MIEUM EO TIKEUT - 0x90FA: 0xBA41, //HANGUL SYLLABLE MIEUM EO RIEULKIYEOK - 0x90FB: 0xBA43, //HANGUL SYLLABLE MIEUM EO RIEULPIEUP - 0x90FC: 0xBA44, //HANGUL SYLLABLE MIEUM EO RIEULSIOS - 0x90FD: 0xBA45, //HANGUL SYLLABLE MIEUM EO RIEULTHIEUTH - 0x90FE: 0xBA46, //HANGUL SYLLABLE MIEUM EO RIEULPHIEUPH - 0x9141: 0xBA47, //HANGUL SYLLABLE MIEUM EO RIEULHIEUH - 0x9142: 0xBA4A, //HANGUL SYLLABLE MIEUM EO PIEUPSIOS - 0x9143: 0xBA4C, //HANGUL SYLLABLE MIEUM EO SSANGSIOS - 0x9144: 0xBA4F, //HANGUL SYLLABLE MIEUM EO CHIEUCH - 0x9145: 0xBA50, //HANGUL SYLLABLE MIEUM EO KHIEUKH - 0x9146: 0xBA51, //HANGUL SYLLABLE MIEUM EO THIEUTH - 0x9147: 0xBA52, //HANGUL SYLLABLE MIEUM EO PHIEUPH - 0x9148: 0xBA56, //HANGUL SYLLABLE MIEUM E SSANGKIYEOK - 0x9149: 0xBA57, //HANGUL SYLLABLE MIEUM E KIYEOKSIOS - 0x914A: 0xBA59, //HANGUL SYLLABLE MIEUM E NIEUNCIEUC - 0x914B: 0xBA5A, //HANGUL SYLLABLE MIEUM E NIEUNHIEUH - 0x914C: 0xBA5B, //HANGUL SYLLABLE MIEUM E TIKEUT - 0x914D: 0xBA5D, //HANGUL SYLLABLE MIEUM E RIEULKIYEOK - 0x914E: 0xBA5E, //HANGUL SYLLABLE MIEUM E RIEULMIEUM - 0x914F: 0xBA5F, //HANGUL SYLLABLE MIEUM E RIEULPIEUP - 0x9150: 0xBA60, //HANGUL SYLLABLE MIEUM E RIEULSIOS - 0x9151: 0xBA61, //HANGUL SYLLABLE MIEUM E RIEULTHIEUTH - 0x9152: 0xBA62, //HANGUL SYLLABLE MIEUM E RIEULPHIEUPH - 0x9153: 0xBA63, //HANGUL SYLLABLE MIEUM E RIEULHIEUH - 0x9154: 0xBA66, //HANGUL SYLLABLE MIEUM E PIEUPSIOS - 0x9155: 0xBA6A, //HANGUL SYLLABLE MIEUM E CIEUC - 0x9156: 0xBA6B, //HANGUL SYLLABLE MIEUM E CHIEUCH - 0x9157: 0xBA6C, //HANGUL SYLLABLE MIEUM E KHIEUKH - 0x9158: 0xBA6D, //HANGUL SYLLABLE MIEUM E THIEUTH - 0x9159: 0xBA6E, //HANGUL SYLLABLE MIEUM E PHIEUPH - 0x915A: 0xBA6F, //HANGUL SYLLABLE MIEUM E HIEUH - 0x9161: 0xBA72, //HANGUL SYLLABLE MIEUM YEO SSANGKIYEOK - 0x9162: 0xBA73, //HANGUL SYLLABLE MIEUM YEO KIYEOKSIOS - 0x9163: 0xBA75, //HANGUL SYLLABLE MIEUM YEO NIEUNCIEUC - 0x9164: 0xBA76, //HANGUL SYLLABLE MIEUM YEO NIEUNHIEUH - 0x9165: 0xBA77, //HANGUL SYLLABLE MIEUM YEO TIKEUT - 0x9166: 0xBA79, //HANGUL SYLLABLE MIEUM YEO RIEULKIYEOK - 0x9167: 0xBA7A, //HANGUL SYLLABLE MIEUM YEO RIEULMIEUM - 0x9168: 0xBA7B, //HANGUL SYLLABLE MIEUM YEO RIEULPIEUP - 0x9169: 0xBA7C, //HANGUL SYLLABLE MIEUM YEO RIEULSIOS - 0x916A: 0xBA7D, //HANGUL SYLLABLE MIEUM YEO RIEULTHIEUTH - 0x916B: 0xBA7E, //HANGUL SYLLABLE MIEUM YEO RIEULPHIEUPH - 0x916C: 0xBA7F, //HANGUL SYLLABLE MIEUM YEO RIEULHIEUH - 0x916D: 0xBA80, //HANGUL SYLLABLE MIEUM YEO MIEUM - 0x916E: 0xBA81, //HANGUL SYLLABLE MIEUM YEO PIEUP - 0x916F: 0xBA82, //HANGUL SYLLABLE MIEUM YEO PIEUPSIOS - 0x9170: 0xBA86, //HANGUL SYLLABLE MIEUM YEO CIEUC - 0x9171: 0xBA88, //HANGUL SYLLABLE MIEUM YEO KHIEUKH - 0x9172: 0xBA89, //HANGUL SYLLABLE MIEUM YEO THIEUTH - 0x9173: 0xBA8A, //HANGUL SYLLABLE MIEUM YEO PHIEUPH - 0x9174: 0xBA8B, //HANGUL SYLLABLE MIEUM YEO HIEUH - 0x9175: 0xBA8D, //HANGUL SYLLABLE MIEUM YE KIYEOK - 0x9176: 0xBA8E, //HANGUL SYLLABLE MIEUM YE SSANGKIYEOK - 0x9177: 0xBA8F, //HANGUL SYLLABLE MIEUM YE KIYEOKSIOS - 0x9178: 0xBA90, //HANGUL SYLLABLE MIEUM YE NIEUN - 0x9179: 0xBA91, //HANGUL SYLLABLE MIEUM YE NIEUNCIEUC - 0x917A: 0xBA92, //HANGUL SYLLABLE MIEUM YE NIEUNHIEUH - 0x9181: 0xBA93, //HANGUL SYLLABLE MIEUM YE TIKEUT - 0x9182: 0xBA94, //HANGUL SYLLABLE MIEUM YE RIEUL - 0x9183: 0xBA95, //HANGUL SYLLABLE MIEUM YE RIEULKIYEOK - 0x9184: 0xBA96, //HANGUL SYLLABLE MIEUM YE RIEULMIEUM - 0x9185: 0xBA97, //HANGUL SYLLABLE MIEUM YE RIEULPIEUP - 0x9186: 0xBA98, //HANGUL SYLLABLE MIEUM YE RIEULSIOS - 0x9187: 0xBA99, //HANGUL SYLLABLE MIEUM YE RIEULTHIEUTH - 0x9188: 0xBA9A, //HANGUL SYLLABLE MIEUM YE RIEULPHIEUPH - 0x9189: 0xBA9B, //HANGUL SYLLABLE MIEUM YE RIEULHIEUH - 0x918A: 0xBA9C, //HANGUL SYLLABLE MIEUM YE MIEUM - 0x918B: 0xBA9D, //HANGUL SYLLABLE MIEUM YE PIEUP - 0x918C: 0xBA9E, //HANGUL SYLLABLE MIEUM YE PIEUPSIOS - 0x918D: 0xBA9F, //HANGUL SYLLABLE MIEUM YE SIOS - 0x918E: 0xBAA0, //HANGUL SYLLABLE MIEUM YE SSANGSIOS - 0x918F: 0xBAA1, //HANGUL SYLLABLE MIEUM YE IEUNG - 0x9190: 0xBAA2, //HANGUL SYLLABLE MIEUM YE CIEUC - 0x9191: 0xBAA3, //HANGUL SYLLABLE MIEUM YE CHIEUCH - 0x9192: 0xBAA4, //HANGUL SYLLABLE MIEUM YE KHIEUKH - 0x9193: 0xBAA5, //HANGUL SYLLABLE MIEUM YE THIEUTH - 0x9194: 0xBAA6, //HANGUL SYLLABLE MIEUM YE PHIEUPH - 0x9195: 0xBAA7, //HANGUL SYLLABLE MIEUM YE HIEUH - 0x9196: 0xBAAA, //HANGUL SYLLABLE MIEUM O SSANGKIYEOK - 0x9197: 0xBAAD, //HANGUL SYLLABLE MIEUM O NIEUNCIEUC - 0x9198: 0xBAAE, //HANGUL SYLLABLE MIEUM O NIEUNHIEUH - 0x9199: 0xBAAF, //HANGUL SYLLABLE MIEUM O TIKEUT - 0x919A: 0xBAB1, //HANGUL SYLLABLE MIEUM O RIEULKIYEOK - 0x919B: 0xBAB3, //HANGUL SYLLABLE MIEUM O RIEULPIEUP - 0x919C: 0xBAB4, //HANGUL SYLLABLE MIEUM O RIEULSIOS - 0x919D: 0xBAB5, //HANGUL SYLLABLE MIEUM O RIEULTHIEUTH - 0x919E: 0xBAB6, //HANGUL SYLLABLE MIEUM O RIEULPHIEUPH - 0x919F: 0xBAB7, //HANGUL SYLLABLE MIEUM O RIEULHIEUH - 0x91A0: 0xBABA, //HANGUL SYLLABLE MIEUM O PIEUPSIOS - 0x91A1: 0xBABC, //HANGUL SYLLABLE MIEUM O SSANGSIOS - 0x91A2: 0xBABE, //HANGUL SYLLABLE MIEUM O CIEUC - 0x91A3: 0xBABF, //HANGUL SYLLABLE MIEUM O CHIEUCH - 0x91A4: 0xBAC0, //HANGUL SYLLABLE MIEUM O KHIEUKH - 0x91A5: 0xBAC1, //HANGUL SYLLABLE MIEUM O THIEUTH - 0x91A6: 0xBAC2, //HANGUL SYLLABLE MIEUM O PHIEUPH - 0x91A7: 0xBAC3, //HANGUL SYLLABLE MIEUM O HIEUH - 0x91A8: 0xBAC5, //HANGUL SYLLABLE MIEUM WA KIYEOK - 0x91A9: 0xBAC6, //HANGUL SYLLABLE MIEUM WA SSANGKIYEOK - 0x91AA: 0xBAC7, //HANGUL SYLLABLE MIEUM WA KIYEOKSIOS - 0x91AB: 0xBAC9, //HANGUL SYLLABLE MIEUM WA NIEUNCIEUC - 0x91AC: 0xBACA, //HANGUL SYLLABLE MIEUM WA NIEUNHIEUH - 0x91AD: 0xBACB, //HANGUL SYLLABLE MIEUM WA TIKEUT - 0x91AE: 0xBACC, //HANGUL SYLLABLE MIEUM WA RIEUL - 0x91AF: 0xBACD, //HANGUL SYLLABLE MIEUM WA RIEULKIYEOK - 0x91B0: 0xBACE, //HANGUL SYLLABLE MIEUM WA RIEULMIEUM - 0x91B1: 0xBACF, //HANGUL SYLLABLE MIEUM WA RIEULPIEUP - 0x91B2: 0xBAD0, //HANGUL SYLLABLE MIEUM WA RIEULSIOS - 0x91B3: 0xBAD1, //HANGUL SYLLABLE MIEUM WA RIEULTHIEUTH - 0x91B4: 0xBAD2, //HANGUL SYLLABLE MIEUM WA RIEULPHIEUPH - 0x91B5: 0xBAD3, //HANGUL SYLLABLE MIEUM WA RIEULHIEUH - 0x91B6: 0xBAD4, //HANGUL SYLLABLE MIEUM WA MIEUM - 0x91B7: 0xBAD5, //HANGUL SYLLABLE MIEUM WA PIEUP - 0x91B8: 0xBAD6, //HANGUL SYLLABLE MIEUM WA PIEUPSIOS - 0x91B9: 0xBAD7, //HANGUL SYLLABLE MIEUM WA SIOS - 0x91BA: 0xBADA, //HANGUL SYLLABLE MIEUM WA CIEUC - 0x91BB: 0xBADB, //HANGUL SYLLABLE MIEUM WA CHIEUCH - 0x91BC: 0xBADC, //HANGUL SYLLABLE MIEUM WA KHIEUKH - 0x91BD: 0xBADD, //HANGUL SYLLABLE MIEUM WA THIEUTH - 0x91BE: 0xBADE, //HANGUL SYLLABLE MIEUM WA PHIEUPH - 0x91BF: 0xBADF, //HANGUL SYLLABLE MIEUM WA HIEUH - 0x91C0: 0xBAE0, //HANGUL SYLLABLE MIEUM WAE - 0x91C1: 0xBAE1, //HANGUL SYLLABLE MIEUM WAE KIYEOK - 0x91C2: 0xBAE2, //HANGUL SYLLABLE MIEUM WAE SSANGKIYEOK - 0x91C3: 0xBAE3, //HANGUL SYLLABLE MIEUM WAE KIYEOKSIOS - 0x91C4: 0xBAE4, //HANGUL SYLLABLE MIEUM WAE NIEUN - 0x91C5: 0xBAE5, //HANGUL SYLLABLE MIEUM WAE NIEUNCIEUC - 0x91C6: 0xBAE6, //HANGUL SYLLABLE MIEUM WAE NIEUNHIEUH - 0x91C7: 0xBAE7, //HANGUL SYLLABLE MIEUM WAE TIKEUT - 0x91C8: 0xBAE8, //HANGUL SYLLABLE MIEUM WAE RIEUL - 0x91C9: 0xBAE9, //HANGUL SYLLABLE MIEUM WAE RIEULKIYEOK - 0x91CA: 0xBAEA, //HANGUL SYLLABLE MIEUM WAE RIEULMIEUM - 0x91CB: 0xBAEB, //HANGUL SYLLABLE MIEUM WAE RIEULPIEUP - 0x91CC: 0xBAEC, //HANGUL SYLLABLE MIEUM WAE RIEULSIOS - 0x91CD: 0xBAED, //HANGUL SYLLABLE MIEUM WAE RIEULTHIEUTH - 0x91CE: 0xBAEE, //HANGUL SYLLABLE MIEUM WAE RIEULPHIEUPH - 0x91CF: 0xBAEF, //HANGUL SYLLABLE MIEUM WAE RIEULHIEUH - 0x91D0: 0xBAF0, //HANGUL SYLLABLE MIEUM WAE MIEUM - 0x91D1: 0xBAF1, //HANGUL SYLLABLE MIEUM WAE PIEUP - 0x91D2: 0xBAF2, //HANGUL SYLLABLE MIEUM WAE PIEUPSIOS - 0x91D3: 0xBAF3, //HANGUL SYLLABLE MIEUM WAE SIOS - 0x91D4: 0xBAF4, //HANGUL SYLLABLE MIEUM WAE SSANGSIOS - 0x91D5: 0xBAF5, //HANGUL SYLLABLE MIEUM WAE IEUNG - 0x91D6: 0xBAF6, //HANGUL SYLLABLE MIEUM WAE CIEUC - 0x91D7: 0xBAF7, //HANGUL SYLLABLE MIEUM WAE CHIEUCH - 0x91D8: 0xBAF8, //HANGUL SYLLABLE MIEUM WAE KHIEUKH - 0x91D9: 0xBAF9, //HANGUL SYLLABLE MIEUM WAE THIEUTH - 0x91DA: 0xBAFA, //HANGUL SYLLABLE MIEUM WAE PHIEUPH - 0x91DB: 0xBAFB, //HANGUL SYLLABLE MIEUM WAE HIEUH - 0x91DC: 0xBAFD, //HANGUL SYLLABLE MIEUM OE KIYEOK - 0x91DD: 0xBAFE, //HANGUL SYLLABLE MIEUM OE SSANGKIYEOK - 0x91DE: 0xBAFF, //HANGUL SYLLABLE MIEUM OE KIYEOKSIOS - 0x91DF: 0xBB01, //HANGUL SYLLABLE MIEUM OE NIEUNCIEUC - 0x91E0: 0xBB02, //HANGUL SYLLABLE MIEUM OE NIEUNHIEUH - 0x91E1: 0xBB03, //HANGUL SYLLABLE MIEUM OE TIKEUT - 0x91E2: 0xBB05, //HANGUL SYLLABLE MIEUM OE RIEULKIYEOK - 0x91E3: 0xBB06, //HANGUL SYLLABLE MIEUM OE RIEULMIEUM - 0x91E4: 0xBB07, //HANGUL SYLLABLE MIEUM OE RIEULPIEUP - 0x91E5: 0xBB08, //HANGUL SYLLABLE MIEUM OE RIEULSIOS - 0x91E6: 0xBB09, //HANGUL SYLLABLE MIEUM OE RIEULTHIEUTH - 0x91E7: 0xBB0A, //HANGUL SYLLABLE MIEUM OE RIEULPHIEUPH - 0x91E8: 0xBB0B, //HANGUL SYLLABLE MIEUM OE RIEULHIEUH - 0x91E9: 0xBB0C, //HANGUL SYLLABLE MIEUM OE MIEUM - 0x91EA: 0xBB0E, //HANGUL SYLLABLE MIEUM OE PIEUPSIOS - 0x91EB: 0xBB10, //HANGUL SYLLABLE MIEUM OE SSANGSIOS - 0x91EC: 0xBB12, //HANGUL SYLLABLE MIEUM OE CIEUC - 0x91ED: 0xBB13, //HANGUL SYLLABLE MIEUM OE CHIEUCH - 0x91EE: 0xBB14, //HANGUL SYLLABLE MIEUM OE KHIEUKH - 0x91EF: 0xBB15, //HANGUL SYLLABLE MIEUM OE THIEUTH - 0x91F0: 0xBB16, //HANGUL SYLLABLE MIEUM OE PHIEUPH - 0x91F1: 0xBB17, //HANGUL SYLLABLE MIEUM OE HIEUH - 0x91F2: 0xBB19, //HANGUL SYLLABLE MIEUM YO KIYEOK - 0x91F3: 0xBB1A, //HANGUL SYLLABLE MIEUM YO SSANGKIYEOK - 0x91F4: 0xBB1B, //HANGUL SYLLABLE MIEUM YO KIYEOKSIOS - 0x91F5: 0xBB1D, //HANGUL SYLLABLE MIEUM YO NIEUNCIEUC - 0x91F6: 0xBB1E, //HANGUL SYLLABLE MIEUM YO NIEUNHIEUH - 0x91F7: 0xBB1F, //HANGUL SYLLABLE MIEUM YO TIKEUT - 0x91F8: 0xBB21, //HANGUL SYLLABLE MIEUM YO RIEULKIYEOK - 0x91F9: 0xBB22, //HANGUL SYLLABLE MIEUM YO RIEULMIEUM - 0x91FA: 0xBB23, //HANGUL SYLLABLE MIEUM YO RIEULPIEUP - 0x91FB: 0xBB24, //HANGUL SYLLABLE MIEUM YO RIEULSIOS - 0x91FC: 0xBB25, //HANGUL SYLLABLE MIEUM YO RIEULTHIEUTH - 0x91FD: 0xBB26, //HANGUL SYLLABLE MIEUM YO RIEULPHIEUPH - 0x91FE: 0xBB27, //HANGUL SYLLABLE MIEUM YO RIEULHIEUH - 0x9241: 0xBB28, //HANGUL SYLLABLE MIEUM YO MIEUM - 0x9242: 0xBB2A, //HANGUL SYLLABLE MIEUM YO PIEUPSIOS - 0x9243: 0xBB2C, //HANGUL SYLLABLE MIEUM YO SSANGSIOS - 0x9244: 0xBB2D, //HANGUL SYLLABLE MIEUM YO IEUNG - 0x9245: 0xBB2E, //HANGUL SYLLABLE MIEUM YO CIEUC - 0x9246: 0xBB2F, //HANGUL SYLLABLE MIEUM YO CHIEUCH - 0x9247: 0xBB30, //HANGUL SYLLABLE MIEUM YO KHIEUKH - 0x9248: 0xBB31, //HANGUL SYLLABLE MIEUM YO THIEUTH - 0x9249: 0xBB32, //HANGUL SYLLABLE MIEUM YO PHIEUPH - 0x924A: 0xBB33, //HANGUL SYLLABLE MIEUM YO HIEUH - 0x924B: 0xBB37, //HANGUL SYLLABLE MIEUM U KIYEOKSIOS - 0x924C: 0xBB39, //HANGUL SYLLABLE MIEUM U NIEUNCIEUC - 0x924D: 0xBB3A, //HANGUL SYLLABLE MIEUM U NIEUNHIEUH - 0x924E: 0xBB3F, //HANGUL SYLLABLE MIEUM U RIEULPIEUP - 0x924F: 0xBB40, //HANGUL SYLLABLE MIEUM U RIEULSIOS - 0x9250: 0xBB41, //HANGUL SYLLABLE MIEUM U RIEULTHIEUTH - 0x9251: 0xBB42, //HANGUL SYLLABLE MIEUM U RIEULPHIEUPH - 0x9252: 0xBB43, //HANGUL SYLLABLE MIEUM U RIEULHIEUH - 0x9253: 0xBB46, //HANGUL SYLLABLE MIEUM U PIEUPSIOS - 0x9254: 0xBB48, //HANGUL SYLLABLE MIEUM U SSANGSIOS - 0x9255: 0xBB4A, //HANGUL SYLLABLE MIEUM U CIEUC - 0x9256: 0xBB4B, //HANGUL SYLLABLE MIEUM U CHIEUCH - 0x9257: 0xBB4C, //HANGUL SYLLABLE MIEUM U KHIEUKH - 0x9258: 0xBB4E, //HANGUL SYLLABLE MIEUM U PHIEUPH - 0x9259: 0xBB51, //HANGUL SYLLABLE MIEUM WEO KIYEOK - 0x925A: 0xBB52, //HANGUL SYLLABLE MIEUM WEO SSANGKIYEOK - 0x9261: 0xBB53, //HANGUL SYLLABLE MIEUM WEO KIYEOKSIOS - 0x9262: 0xBB55, //HANGUL SYLLABLE MIEUM WEO NIEUNCIEUC - 0x9263: 0xBB56, //HANGUL SYLLABLE MIEUM WEO NIEUNHIEUH - 0x9264: 0xBB57, //HANGUL SYLLABLE MIEUM WEO TIKEUT - 0x9265: 0xBB59, //HANGUL SYLLABLE MIEUM WEO RIEULKIYEOK - 0x9266: 0xBB5A, //HANGUL SYLLABLE MIEUM WEO RIEULMIEUM - 0x9267: 0xBB5B, //HANGUL SYLLABLE MIEUM WEO RIEULPIEUP - 0x9268: 0xBB5C, //HANGUL SYLLABLE MIEUM WEO RIEULSIOS - 0x9269: 0xBB5D, //HANGUL SYLLABLE MIEUM WEO RIEULTHIEUTH - 0x926A: 0xBB5E, //HANGUL SYLLABLE MIEUM WEO RIEULPHIEUPH - 0x926B: 0xBB5F, //HANGUL SYLLABLE MIEUM WEO RIEULHIEUH - 0x926C: 0xBB60, //HANGUL SYLLABLE MIEUM WEO MIEUM - 0x926D: 0xBB62, //HANGUL SYLLABLE MIEUM WEO PIEUPSIOS - 0x926E: 0xBB64, //HANGUL SYLLABLE MIEUM WEO SSANGSIOS - 0x926F: 0xBB65, //HANGUL SYLLABLE MIEUM WEO IEUNG - 0x9270: 0xBB66, //HANGUL SYLLABLE MIEUM WEO CIEUC - 0x9271: 0xBB67, //HANGUL SYLLABLE MIEUM WEO CHIEUCH - 0x9272: 0xBB68, //HANGUL SYLLABLE MIEUM WEO KHIEUKH - 0x9273: 0xBB69, //HANGUL SYLLABLE MIEUM WEO THIEUTH - 0x9274: 0xBB6A, //HANGUL SYLLABLE MIEUM WEO PHIEUPH - 0x9275: 0xBB6B, //HANGUL SYLLABLE MIEUM WEO HIEUH - 0x9276: 0xBB6D, //HANGUL SYLLABLE MIEUM WE KIYEOK - 0x9277: 0xBB6E, //HANGUL SYLLABLE MIEUM WE SSANGKIYEOK - 0x9278: 0xBB6F, //HANGUL SYLLABLE MIEUM WE KIYEOKSIOS - 0x9279: 0xBB70, //HANGUL SYLLABLE MIEUM WE NIEUN - 0x927A: 0xBB71, //HANGUL SYLLABLE MIEUM WE NIEUNCIEUC - 0x9281: 0xBB72, //HANGUL SYLLABLE MIEUM WE NIEUNHIEUH - 0x9282: 0xBB73, //HANGUL SYLLABLE MIEUM WE TIKEUT - 0x9283: 0xBB74, //HANGUL SYLLABLE MIEUM WE RIEUL - 0x9284: 0xBB75, //HANGUL SYLLABLE MIEUM WE RIEULKIYEOK - 0x9285: 0xBB76, //HANGUL SYLLABLE MIEUM WE RIEULMIEUM - 0x9286: 0xBB77, //HANGUL SYLLABLE MIEUM WE RIEULPIEUP - 0x9287: 0xBB78, //HANGUL SYLLABLE MIEUM WE RIEULSIOS - 0x9288: 0xBB79, //HANGUL SYLLABLE MIEUM WE RIEULTHIEUTH - 0x9289: 0xBB7A, //HANGUL SYLLABLE MIEUM WE RIEULPHIEUPH - 0x928A: 0xBB7B, //HANGUL SYLLABLE MIEUM WE RIEULHIEUH - 0x928B: 0xBB7C, //HANGUL SYLLABLE MIEUM WE MIEUM - 0x928C: 0xBB7D, //HANGUL SYLLABLE MIEUM WE PIEUP - 0x928D: 0xBB7E, //HANGUL SYLLABLE MIEUM WE PIEUPSIOS - 0x928E: 0xBB7F, //HANGUL SYLLABLE MIEUM WE SIOS - 0x928F: 0xBB80, //HANGUL SYLLABLE MIEUM WE SSANGSIOS - 0x9290: 0xBB81, //HANGUL SYLLABLE MIEUM WE IEUNG - 0x9291: 0xBB82, //HANGUL SYLLABLE MIEUM WE CIEUC - 0x9292: 0xBB83, //HANGUL SYLLABLE MIEUM WE CHIEUCH - 0x9293: 0xBB84, //HANGUL SYLLABLE MIEUM WE KHIEUKH - 0x9294: 0xBB85, //HANGUL SYLLABLE MIEUM WE THIEUTH - 0x9295: 0xBB86, //HANGUL SYLLABLE MIEUM WE PHIEUPH - 0x9296: 0xBB87, //HANGUL SYLLABLE MIEUM WE HIEUH - 0x9297: 0xBB89, //HANGUL SYLLABLE MIEUM WI KIYEOK - 0x9298: 0xBB8A, //HANGUL SYLLABLE MIEUM WI SSANGKIYEOK - 0x9299: 0xBB8B, //HANGUL SYLLABLE MIEUM WI KIYEOKSIOS - 0x929A: 0xBB8D, //HANGUL SYLLABLE MIEUM WI NIEUNCIEUC - 0x929B: 0xBB8E, //HANGUL SYLLABLE MIEUM WI NIEUNHIEUH - 0x929C: 0xBB8F, //HANGUL SYLLABLE MIEUM WI TIKEUT - 0x929D: 0xBB91, //HANGUL SYLLABLE MIEUM WI RIEULKIYEOK - 0x929E: 0xBB92, //HANGUL SYLLABLE MIEUM WI RIEULMIEUM - 0x929F: 0xBB93, //HANGUL SYLLABLE MIEUM WI RIEULPIEUP - 0x92A0: 0xBB94, //HANGUL SYLLABLE MIEUM WI RIEULSIOS - 0x92A1: 0xBB95, //HANGUL SYLLABLE MIEUM WI RIEULTHIEUTH - 0x92A2: 0xBB96, //HANGUL SYLLABLE MIEUM WI RIEULPHIEUPH - 0x92A3: 0xBB97, //HANGUL SYLLABLE MIEUM WI RIEULHIEUH - 0x92A4: 0xBB98, //HANGUL SYLLABLE MIEUM WI MIEUM - 0x92A5: 0xBB99, //HANGUL SYLLABLE MIEUM WI PIEUP - 0x92A6: 0xBB9A, //HANGUL SYLLABLE MIEUM WI PIEUPSIOS - 0x92A7: 0xBB9B, //HANGUL SYLLABLE MIEUM WI SIOS - 0x92A8: 0xBB9C, //HANGUL SYLLABLE MIEUM WI SSANGSIOS - 0x92A9: 0xBB9D, //HANGUL SYLLABLE MIEUM WI IEUNG - 0x92AA: 0xBB9E, //HANGUL SYLLABLE MIEUM WI CIEUC - 0x92AB: 0xBB9F, //HANGUL SYLLABLE MIEUM WI CHIEUCH - 0x92AC: 0xBBA0, //HANGUL SYLLABLE MIEUM WI KHIEUKH - 0x92AD: 0xBBA1, //HANGUL SYLLABLE MIEUM WI THIEUTH - 0x92AE: 0xBBA2, //HANGUL SYLLABLE MIEUM WI PHIEUPH - 0x92AF: 0xBBA3, //HANGUL SYLLABLE MIEUM WI HIEUH - 0x92B0: 0xBBA5, //HANGUL SYLLABLE MIEUM YU KIYEOK - 0x92B1: 0xBBA6, //HANGUL SYLLABLE MIEUM YU SSANGKIYEOK - 0x92B2: 0xBBA7, //HANGUL SYLLABLE MIEUM YU KIYEOKSIOS - 0x92B3: 0xBBA9, //HANGUL SYLLABLE MIEUM YU NIEUNCIEUC - 0x92B4: 0xBBAA, //HANGUL SYLLABLE MIEUM YU NIEUNHIEUH - 0x92B5: 0xBBAB, //HANGUL SYLLABLE MIEUM YU TIKEUT - 0x92B6: 0xBBAD, //HANGUL SYLLABLE MIEUM YU RIEULKIYEOK - 0x92B7: 0xBBAE, //HANGUL SYLLABLE MIEUM YU RIEULMIEUM - 0x92B8: 0xBBAF, //HANGUL SYLLABLE MIEUM YU RIEULPIEUP - 0x92B9: 0xBBB0, //HANGUL SYLLABLE MIEUM YU RIEULSIOS - 0x92BA: 0xBBB1, //HANGUL SYLLABLE MIEUM YU RIEULTHIEUTH - 0x92BB: 0xBBB2, //HANGUL SYLLABLE MIEUM YU RIEULPHIEUPH - 0x92BC: 0xBBB3, //HANGUL SYLLABLE MIEUM YU RIEULHIEUH - 0x92BD: 0xBBB5, //HANGUL SYLLABLE MIEUM YU PIEUP - 0x92BE: 0xBBB6, //HANGUL SYLLABLE MIEUM YU PIEUPSIOS - 0x92BF: 0xBBB8, //HANGUL SYLLABLE MIEUM YU SSANGSIOS - 0x92C0: 0xBBB9, //HANGUL SYLLABLE MIEUM YU IEUNG - 0x92C1: 0xBBBA, //HANGUL SYLLABLE MIEUM YU CIEUC - 0x92C2: 0xBBBB, //HANGUL SYLLABLE MIEUM YU CHIEUCH - 0x92C3: 0xBBBC, //HANGUL SYLLABLE MIEUM YU KHIEUKH - 0x92C4: 0xBBBD, //HANGUL SYLLABLE MIEUM YU THIEUTH - 0x92C5: 0xBBBE, //HANGUL SYLLABLE MIEUM YU PHIEUPH - 0x92C6: 0xBBBF, //HANGUL SYLLABLE MIEUM YU HIEUH - 0x92C7: 0xBBC1, //HANGUL SYLLABLE MIEUM EU KIYEOK - 0x92C8: 0xBBC2, //HANGUL SYLLABLE MIEUM EU SSANGKIYEOK - 0x92C9: 0xBBC3, //HANGUL SYLLABLE MIEUM EU KIYEOKSIOS - 0x92CA: 0xBBC5, //HANGUL SYLLABLE MIEUM EU NIEUNCIEUC - 0x92CB: 0xBBC6, //HANGUL SYLLABLE MIEUM EU NIEUNHIEUH - 0x92CC: 0xBBC7, //HANGUL SYLLABLE MIEUM EU TIKEUT - 0x92CD: 0xBBC9, //HANGUL SYLLABLE MIEUM EU RIEULKIYEOK - 0x92CE: 0xBBCA, //HANGUL SYLLABLE MIEUM EU RIEULMIEUM - 0x92CF: 0xBBCB, //HANGUL SYLLABLE MIEUM EU RIEULPIEUP - 0x92D0: 0xBBCC, //HANGUL SYLLABLE MIEUM EU RIEULSIOS - 0x92D1: 0xBBCD, //HANGUL SYLLABLE MIEUM EU RIEULTHIEUTH - 0x92D2: 0xBBCE, //HANGUL SYLLABLE MIEUM EU RIEULPHIEUPH - 0x92D3: 0xBBCF, //HANGUL SYLLABLE MIEUM EU RIEULHIEUH - 0x92D4: 0xBBD1, //HANGUL SYLLABLE MIEUM EU PIEUP - 0x92D5: 0xBBD2, //HANGUL SYLLABLE MIEUM EU PIEUPSIOS - 0x92D6: 0xBBD4, //HANGUL SYLLABLE MIEUM EU SSANGSIOS - 0x92D7: 0xBBD5, //HANGUL SYLLABLE MIEUM EU IEUNG - 0x92D8: 0xBBD6, //HANGUL SYLLABLE MIEUM EU CIEUC - 0x92D9: 0xBBD7, //HANGUL SYLLABLE MIEUM EU CHIEUCH - 0x92DA: 0xBBD8, //HANGUL SYLLABLE MIEUM EU KHIEUKH - 0x92DB: 0xBBD9, //HANGUL SYLLABLE MIEUM EU THIEUTH - 0x92DC: 0xBBDA, //HANGUL SYLLABLE MIEUM EU PHIEUPH - 0x92DD: 0xBBDB, //HANGUL SYLLABLE MIEUM EU HIEUH - 0x92DE: 0xBBDC, //HANGUL SYLLABLE MIEUM YI - 0x92DF: 0xBBDD, //HANGUL SYLLABLE MIEUM YI KIYEOK - 0x92E0: 0xBBDE, //HANGUL SYLLABLE MIEUM YI SSANGKIYEOK - 0x92E1: 0xBBDF, //HANGUL SYLLABLE MIEUM YI KIYEOKSIOS - 0x92E2: 0xBBE0, //HANGUL SYLLABLE MIEUM YI NIEUN - 0x92E3: 0xBBE1, //HANGUL SYLLABLE MIEUM YI NIEUNCIEUC - 0x92E4: 0xBBE2, //HANGUL SYLLABLE MIEUM YI NIEUNHIEUH - 0x92E5: 0xBBE3, //HANGUL SYLLABLE MIEUM YI TIKEUT - 0x92E6: 0xBBE4, //HANGUL SYLLABLE MIEUM YI RIEUL - 0x92E7: 0xBBE5, //HANGUL SYLLABLE MIEUM YI RIEULKIYEOK - 0x92E8: 0xBBE6, //HANGUL SYLLABLE MIEUM YI RIEULMIEUM - 0x92E9: 0xBBE7, //HANGUL SYLLABLE MIEUM YI RIEULPIEUP - 0x92EA: 0xBBE8, //HANGUL SYLLABLE MIEUM YI RIEULSIOS - 0x92EB: 0xBBE9, //HANGUL SYLLABLE MIEUM YI RIEULTHIEUTH - 0x92EC: 0xBBEA, //HANGUL SYLLABLE MIEUM YI RIEULPHIEUPH - 0x92ED: 0xBBEB, //HANGUL SYLLABLE MIEUM YI RIEULHIEUH - 0x92EE: 0xBBEC, //HANGUL SYLLABLE MIEUM YI MIEUM - 0x92EF: 0xBBED, //HANGUL SYLLABLE MIEUM YI PIEUP - 0x92F0: 0xBBEE, //HANGUL SYLLABLE MIEUM YI PIEUPSIOS - 0x92F1: 0xBBEF, //HANGUL SYLLABLE MIEUM YI SIOS - 0x92F2: 0xBBF0, //HANGUL SYLLABLE MIEUM YI SSANGSIOS - 0x92F3: 0xBBF1, //HANGUL SYLLABLE MIEUM YI IEUNG - 0x92F4: 0xBBF2, //HANGUL SYLLABLE MIEUM YI CIEUC - 0x92F5: 0xBBF3, //HANGUL SYLLABLE MIEUM YI CHIEUCH - 0x92F6: 0xBBF4, //HANGUL SYLLABLE MIEUM YI KHIEUKH - 0x92F7: 0xBBF5, //HANGUL SYLLABLE MIEUM YI THIEUTH - 0x92F8: 0xBBF6, //HANGUL SYLLABLE MIEUM YI PHIEUPH - 0x92F9: 0xBBF7, //HANGUL SYLLABLE MIEUM YI HIEUH - 0x92FA: 0xBBFA, //HANGUL SYLLABLE MIEUM I SSANGKIYEOK - 0x92FB: 0xBBFB, //HANGUL SYLLABLE MIEUM I KIYEOKSIOS - 0x92FC: 0xBBFD, //HANGUL SYLLABLE MIEUM I NIEUNCIEUC - 0x92FD: 0xBBFE, //HANGUL SYLLABLE MIEUM I NIEUNHIEUH - 0x92FE: 0xBC01, //HANGUL SYLLABLE MIEUM I RIEULKIYEOK - 0x9341: 0xBC03, //HANGUL SYLLABLE MIEUM I RIEULPIEUP - 0x9342: 0xBC04, //HANGUL SYLLABLE MIEUM I RIEULSIOS - 0x9343: 0xBC05, //HANGUL SYLLABLE MIEUM I RIEULTHIEUTH - 0x9344: 0xBC06, //HANGUL SYLLABLE MIEUM I RIEULPHIEUPH - 0x9345: 0xBC07, //HANGUL SYLLABLE MIEUM I RIEULHIEUH - 0x9346: 0xBC0A, //HANGUL SYLLABLE MIEUM I PIEUPSIOS - 0x9347: 0xBC0E, //HANGUL SYLLABLE MIEUM I CIEUC - 0x9348: 0xBC10, //HANGUL SYLLABLE MIEUM I KHIEUKH - 0x9349: 0xBC12, //HANGUL SYLLABLE MIEUM I PHIEUPH - 0x934A: 0xBC13, //HANGUL SYLLABLE MIEUM I HIEUH - 0x934B: 0xBC19, //HANGUL SYLLABLE PIEUP A NIEUNCIEUC - 0x934C: 0xBC1A, //HANGUL SYLLABLE PIEUP A NIEUNHIEUH - 0x934D: 0xBC20, //HANGUL SYLLABLE PIEUP A RIEULSIOS - 0x934E: 0xBC21, //HANGUL SYLLABLE PIEUP A RIEULTHIEUTH - 0x934F: 0xBC22, //HANGUL SYLLABLE PIEUP A RIEULPHIEUPH - 0x9350: 0xBC23, //HANGUL SYLLABLE PIEUP A RIEULHIEUH - 0x9351: 0xBC26, //HANGUL SYLLABLE PIEUP A PIEUPSIOS - 0x9352: 0xBC28, //HANGUL SYLLABLE PIEUP A SSANGSIOS - 0x9353: 0xBC2A, //HANGUL SYLLABLE PIEUP A CIEUC - 0x9354: 0xBC2B, //HANGUL SYLLABLE PIEUP A CHIEUCH - 0x9355: 0xBC2C, //HANGUL SYLLABLE PIEUP A KHIEUKH - 0x9356: 0xBC2E, //HANGUL SYLLABLE PIEUP A PHIEUPH - 0x9357: 0xBC2F, //HANGUL SYLLABLE PIEUP A HIEUH - 0x9358: 0xBC32, //HANGUL SYLLABLE PIEUP AE SSANGKIYEOK - 0x9359: 0xBC33, //HANGUL SYLLABLE PIEUP AE KIYEOKSIOS - 0x935A: 0xBC35, //HANGUL SYLLABLE PIEUP AE NIEUNCIEUC - 0x9361: 0xBC36, //HANGUL SYLLABLE PIEUP AE NIEUNHIEUH - 0x9362: 0xBC37, //HANGUL SYLLABLE PIEUP AE TIKEUT - 0x9363: 0xBC39, //HANGUL SYLLABLE PIEUP AE RIEULKIYEOK - 0x9364: 0xBC3A, //HANGUL SYLLABLE PIEUP AE RIEULMIEUM - 0x9365: 0xBC3B, //HANGUL SYLLABLE PIEUP AE RIEULPIEUP - 0x9366: 0xBC3C, //HANGUL SYLLABLE PIEUP AE RIEULSIOS - 0x9367: 0xBC3D, //HANGUL SYLLABLE PIEUP AE RIEULTHIEUTH - 0x9368: 0xBC3E, //HANGUL SYLLABLE PIEUP AE RIEULPHIEUPH - 0x9369: 0xBC3F, //HANGUL SYLLABLE PIEUP AE RIEULHIEUH - 0x936A: 0xBC42, //HANGUL SYLLABLE PIEUP AE PIEUPSIOS - 0x936B: 0xBC46, //HANGUL SYLLABLE PIEUP AE CIEUC - 0x936C: 0xBC47, //HANGUL SYLLABLE PIEUP AE CHIEUCH - 0x936D: 0xBC48, //HANGUL SYLLABLE PIEUP AE KHIEUKH - 0x936E: 0xBC4A, //HANGUL SYLLABLE PIEUP AE PHIEUPH - 0x936F: 0xBC4B, //HANGUL SYLLABLE PIEUP AE HIEUH - 0x9370: 0xBC4E, //HANGUL SYLLABLE PIEUP YA SSANGKIYEOK - 0x9371: 0xBC4F, //HANGUL SYLLABLE PIEUP YA KIYEOKSIOS - 0x9372: 0xBC51, //HANGUL SYLLABLE PIEUP YA NIEUNCIEUC - 0x9373: 0xBC52, //HANGUL SYLLABLE PIEUP YA NIEUNHIEUH - 0x9374: 0xBC53, //HANGUL SYLLABLE PIEUP YA TIKEUT - 0x9375: 0xBC54, //HANGUL SYLLABLE PIEUP YA RIEUL - 0x9376: 0xBC55, //HANGUL SYLLABLE PIEUP YA RIEULKIYEOK - 0x9377: 0xBC56, //HANGUL SYLLABLE PIEUP YA RIEULMIEUM - 0x9378: 0xBC57, //HANGUL SYLLABLE PIEUP YA RIEULPIEUP - 0x9379: 0xBC58, //HANGUL SYLLABLE PIEUP YA RIEULSIOS - 0x937A: 0xBC59, //HANGUL SYLLABLE PIEUP YA RIEULTHIEUTH - 0x9381: 0xBC5A, //HANGUL SYLLABLE PIEUP YA RIEULPHIEUPH - 0x9382: 0xBC5B, //HANGUL SYLLABLE PIEUP YA RIEULHIEUH - 0x9383: 0xBC5C, //HANGUL SYLLABLE PIEUP YA MIEUM - 0x9384: 0xBC5E, //HANGUL SYLLABLE PIEUP YA PIEUPSIOS - 0x9385: 0xBC5F, //HANGUL SYLLABLE PIEUP YA SIOS - 0x9386: 0xBC60, //HANGUL SYLLABLE PIEUP YA SSANGSIOS - 0x9387: 0xBC61, //HANGUL SYLLABLE PIEUP YA IEUNG - 0x9388: 0xBC62, //HANGUL SYLLABLE PIEUP YA CIEUC - 0x9389: 0xBC63, //HANGUL SYLLABLE PIEUP YA CHIEUCH - 0x938A: 0xBC64, //HANGUL SYLLABLE PIEUP YA KHIEUKH - 0x938B: 0xBC65, //HANGUL SYLLABLE PIEUP YA THIEUTH - 0x938C: 0xBC66, //HANGUL SYLLABLE PIEUP YA PHIEUPH - 0x938D: 0xBC67, //HANGUL SYLLABLE PIEUP YA HIEUH - 0x938E: 0xBC68, //HANGUL SYLLABLE PIEUP YAE - 0x938F: 0xBC69, //HANGUL SYLLABLE PIEUP YAE KIYEOK - 0x9390: 0xBC6A, //HANGUL SYLLABLE PIEUP YAE SSANGKIYEOK - 0x9391: 0xBC6B, //HANGUL SYLLABLE PIEUP YAE KIYEOKSIOS - 0x9392: 0xBC6C, //HANGUL SYLLABLE PIEUP YAE NIEUN - 0x9393: 0xBC6D, //HANGUL SYLLABLE PIEUP YAE NIEUNCIEUC - 0x9394: 0xBC6E, //HANGUL SYLLABLE PIEUP YAE NIEUNHIEUH - 0x9395: 0xBC6F, //HANGUL SYLLABLE PIEUP YAE TIKEUT - 0x9396: 0xBC70, //HANGUL SYLLABLE PIEUP YAE RIEUL - 0x9397: 0xBC71, //HANGUL SYLLABLE PIEUP YAE RIEULKIYEOK - 0x9398: 0xBC72, //HANGUL SYLLABLE PIEUP YAE RIEULMIEUM - 0x9399: 0xBC73, //HANGUL SYLLABLE PIEUP YAE RIEULPIEUP - 0x939A: 0xBC74, //HANGUL SYLLABLE PIEUP YAE RIEULSIOS - 0x939B: 0xBC75, //HANGUL SYLLABLE PIEUP YAE RIEULTHIEUTH - 0x939C: 0xBC76, //HANGUL SYLLABLE PIEUP YAE RIEULPHIEUPH - 0x939D: 0xBC77, //HANGUL SYLLABLE PIEUP YAE RIEULHIEUH - 0x939E: 0xBC78, //HANGUL SYLLABLE PIEUP YAE MIEUM - 0x939F: 0xBC79, //HANGUL SYLLABLE PIEUP YAE PIEUP - 0x93A0: 0xBC7A, //HANGUL SYLLABLE PIEUP YAE PIEUPSIOS - 0x93A1: 0xBC7B, //HANGUL SYLLABLE PIEUP YAE SIOS - 0x93A2: 0xBC7C, //HANGUL SYLLABLE PIEUP YAE SSANGSIOS - 0x93A3: 0xBC7D, //HANGUL SYLLABLE PIEUP YAE IEUNG - 0x93A4: 0xBC7E, //HANGUL SYLLABLE PIEUP YAE CIEUC - 0x93A5: 0xBC7F, //HANGUL SYLLABLE PIEUP YAE CHIEUCH - 0x93A6: 0xBC80, //HANGUL SYLLABLE PIEUP YAE KHIEUKH - 0x93A7: 0xBC81, //HANGUL SYLLABLE PIEUP YAE THIEUTH - 0x93A8: 0xBC82, //HANGUL SYLLABLE PIEUP YAE PHIEUPH - 0x93A9: 0xBC83, //HANGUL SYLLABLE PIEUP YAE HIEUH - 0x93AA: 0xBC86, //HANGUL SYLLABLE PIEUP EO SSANGKIYEOK - 0x93AB: 0xBC87, //HANGUL SYLLABLE PIEUP EO KIYEOKSIOS - 0x93AC: 0xBC89, //HANGUL SYLLABLE PIEUP EO NIEUNCIEUC - 0x93AD: 0xBC8A, //HANGUL SYLLABLE PIEUP EO NIEUNHIEUH - 0x93AE: 0xBC8D, //HANGUL SYLLABLE PIEUP EO RIEULKIYEOK - 0x93AF: 0xBC8F, //HANGUL SYLLABLE PIEUP EO RIEULPIEUP - 0x93B0: 0xBC90, //HANGUL SYLLABLE PIEUP EO RIEULSIOS - 0x93B1: 0xBC91, //HANGUL SYLLABLE PIEUP EO RIEULTHIEUTH - 0x93B2: 0xBC92, //HANGUL SYLLABLE PIEUP EO RIEULPHIEUPH - 0x93B3: 0xBC93, //HANGUL SYLLABLE PIEUP EO RIEULHIEUH - 0x93B4: 0xBC96, //HANGUL SYLLABLE PIEUP EO PIEUPSIOS - 0x93B5: 0xBC98, //HANGUL SYLLABLE PIEUP EO SSANGSIOS - 0x93B6: 0xBC9B, //HANGUL SYLLABLE PIEUP EO CHIEUCH - 0x93B7: 0xBC9C, //HANGUL SYLLABLE PIEUP EO KHIEUKH - 0x93B8: 0xBC9D, //HANGUL SYLLABLE PIEUP EO THIEUTH - 0x93B9: 0xBC9E, //HANGUL SYLLABLE PIEUP EO PHIEUPH - 0x93BA: 0xBC9F, //HANGUL SYLLABLE PIEUP EO HIEUH - 0x93BB: 0xBCA2, //HANGUL SYLLABLE PIEUP E SSANGKIYEOK - 0x93BC: 0xBCA3, //HANGUL SYLLABLE PIEUP E KIYEOKSIOS - 0x93BD: 0xBCA5, //HANGUL SYLLABLE PIEUP E NIEUNCIEUC - 0x93BE: 0xBCA6, //HANGUL SYLLABLE PIEUP E NIEUNHIEUH - 0x93BF: 0xBCA9, //HANGUL SYLLABLE PIEUP E RIEULKIYEOK - 0x93C0: 0xBCAA, //HANGUL SYLLABLE PIEUP E RIEULMIEUM - 0x93C1: 0xBCAB, //HANGUL SYLLABLE PIEUP E RIEULPIEUP - 0x93C2: 0xBCAC, //HANGUL SYLLABLE PIEUP E RIEULSIOS - 0x93C3: 0xBCAD, //HANGUL SYLLABLE PIEUP E RIEULTHIEUTH - 0x93C4: 0xBCAE, //HANGUL SYLLABLE PIEUP E RIEULPHIEUPH - 0x93C5: 0xBCAF, //HANGUL SYLLABLE PIEUP E RIEULHIEUH - 0x93C6: 0xBCB2, //HANGUL SYLLABLE PIEUP E PIEUPSIOS - 0x93C7: 0xBCB6, //HANGUL SYLLABLE PIEUP E CIEUC - 0x93C8: 0xBCB7, //HANGUL SYLLABLE PIEUP E CHIEUCH - 0x93C9: 0xBCB8, //HANGUL SYLLABLE PIEUP E KHIEUKH - 0x93CA: 0xBCB9, //HANGUL SYLLABLE PIEUP E THIEUTH - 0x93CB: 0xBCBA, //HANGUL SYLLABLE PIEUP E PHIEUPH - 0x93CC: 0xBCBB, //HANGUL SYLLABLE PIEUP E HIEUH - 0x93CD: 0xBCBE, //HANGUL SYLLABLE PIEUP YEO SSANGKIYEOK - 0x93CE: 0xBCBF, //HANGUL SYLLABLE PIEUP YEO KIYEOKSIOS - 0x93CF: 0xBCC1, //HANGUL SYLLABLE PIEUP YEO NIEUNCIEUC - 0x93D0: 0xBCC2, //HANGUL SYLLABLE PIEUP YEO NIEUNHIEUH - 0x93D1: 0xBCC3, //HANGUL SYLLABLE PIEUP YEO TIKEUT - 0x93D2: 0xBCC5, //HANGUL SYLLABLE PIEUP YEO RIEULKIYEOK - 0x93D3: 0xBCC6, //HANGUL SYLLABLE PIEUP YEO RIEULMIEUM - 0x93D4: 0xBCC7, //HANGUL SYLLABLE PIEUP YEO RIEULPIEUP - 0x93D5: 0xBCC8, //HANGUL SYLLABLE PIEUP YEO RIEULSIOS - 0x93D6: 0xBCC9, //HANGUL SYLLABLE PIEUP YEO RIEULTHIEUTH - 0x93D7: 0xBCCA, //HANGUL SYLLABLE PIEUP YEO RIEULPHIEUPH - 0x93D8: 0xBCCB, //HANGUL SYLLABLE PIEUP YEO RIEULHIEUH - 0x93D9: 0xBCCC, //HANGUL SYLLABLE PIEUP YEO MIEUM - 0x93DA: 0xBCCE, //HANGUL SYLLABLE PIEUP YEO PIEUPSIOS - 0x93DB: 0xBCD2, //HANGUL SYLLABLE PIEUP YEO CIEUC - 0x93DC: 0xBCD3, //HANGUL SYLLABLE PIEUP YEO CHIEUCH - 0x93DD: 0xBCD4, //HANGUL SYLLABLE PIEUP YEO KHIEUKH - 0x93DE: 0xBCD6, //HANGUL SYLLABLE PIEUP YEO PHIEUPH - 0x93DF: 0xBCD7, //HANGUL SYLLABLE PIEUP YEO HIEUH - 0x93E0: 0xBCD9, //HANGUL SYLLABLE PIEUP YE KIYEOK - 0x93E1: 0xBCDA, //HANGUL SYLLABLE PIEUP YE SSANGKIYEOK - 0x93E2: 0xBCDB, //HANGUL SYLLABLE PIEUP YE KIYEOKSIOS - 0x93E3: 0xBCDD, //HANGUL SYLLABLE PIEUP YE NIEUNCIEUC - 0x93E4: 0xBCDE, //HANGUL SYLLABLE PIEUP YE NIEUNHIEUH - 0x93E5: 0xBCDF, //HANGUL SYLLABLE PIEUP YE TIKEUT - 0x93E6: 0xBCE0, //HANGUL SYLLABLE PIEUP YE RIEUL - 0x93E7: 0xBCE1, //HANGUL SYLLABLE PIEUP YE RIEULKIYEOK - 0x93E8: 0xBCE2, //HANGUL SYLLABLE PIEUP YE RIEULMIEUM - 0x93E9: 0xBCE3, //HANGUL SYLLABLE PIEUP YE RIEULPIEUP - 0x93EA: 0xBCE4, //HANGUL SYLLABLE PIEUP YE RIEULSIOS - 0x93EB: 0xBCE5, //HANGUL SYLLABLE PIEUP YE RIEULTHIEUTH - 0x93EC: 0xBCE6, //HANGUL SYLLABLE PIEUP YE RIEULPHIEUPH - 0x93ED: 0xBCE7, //HANGUL SYLLABLE PIEUP YE RIEULHIEUH - 0x93EE: 0xBCE8, //HANGUL SYLLABLE PIEUP YE MIEUM - 0x93EF: 0xBCE9, //HANGUL SYLLABLE PIEUP YE PIEUP - 0x93F0: 0xBCEA, //HANGUL SYLLABLE PIEUP YE PIEUPSIOS - 0x93F1: 0xBCEB, //HANGUL SYLLABLE PIEUP YE SIOS - 0x93F2: 0xBCEC, //HANGUL SYLLABLE PIEUP YE SSANGSIOS - 0x93F3: 0xBCED, //HANGUL SYLLABLE PIEUP YE IEUNG - 0x93F4: 0xBCEE, //HANGUL SYLLABLE PIEUP YE CIEUC - 0x93F5: 0xBCEF, //HANGUL SYLLABLE PIEUP YE CHIEUCH - 0x93F6: 0xBCF0, //HANGUL SYLLABLE PIEUP YE KHIEUKH - 0x93F7: 0xBCF1, //HANGUL SYLLABLE PIEUP YE THIEUTH - 0x93F8: 0xBCF2, //HANGUL SYLLABLE PIEUP YE PHIEUPH - 0x93F9: 0xBCF3, //HANGUL SYLLABLE PIEUP YE HIEUH - 0x93FA: 0xBCF7, //HANGUL SYLLABLE PIEUP O KIYEOKSIOS - 0x93FB: 0xBCF9, //HANGUL SYLLABLE PIEUP O NIEUNCIEUC - 0x93FC: 0xBCFA, //HANGUL SYLLABLE PIEUP O NIEUNHIEUH - 0x93FD: 0xBCFB, //HANGUL SYLLABLE PIEUP O TIKEUT - 0x93FE: 0xBCFD, //HANGUL SYLLABLE PIEUP O RIEULKIYEOK - 0x9441: 0xBCFE, //HANGUL SYLLABLE PIEUP O RIEULMIEUM - 0x9442: 0xBCFF, //HANGUL SYLLABLE PIEUP O RIEULPIEUP - 0x9443: 0xBD00, //HANGUL SYLLABLE PIEUP O RIEULSIOS - 0x9444: 0xBD01, //HANGUL SYLLABLE PIEUP O RIEULTHIEUTH - 0x9445: 0xBD02, //HANGUL SYLLABLE PIEUP O RIEULPHIEUPH - 0x9446: 0xBD03, //HANGUL SYLLABLE PIEUP O RIEULHIEUH - 0x9447: 0xBD06, //HANGUL SYLLABLE PIEUP O PIEUPSIOS - 0x9448: 0xBD08, //HANGUL SYLLABLE PIEUP O SSANGSIOS - 0x9449: 0xBD0A, //HANGUL SYLLABLE PIEUP O CIEUC - 0x944A: 0xBD0B, //HANGUL SYLLABLE PIEUP O CHIEUCH - 0x944B: 0xBD0C, //HANGUL SYLLABLE PIEUP O KHIEUKH - 0x944C: 0xBD0D, //HANGUL SYLLABLE PIEUP O THIEUTH - 0x944D: 0xBD0E, //HANGUL SYLLABLE PIEUP O PHIEUPH - 0x944E: 0xBD0F, //HANGUL SYLLABLE PIEUP O HIEUH - 0x944F: 0xBD11, //HANGUL SYLLABLE PIEUP WA KIYEOK - 0x9450: 0xBD12, //HANGUL SYLLABLE PIEUP WA SSANGKIYEOK - 0x9451: 0xBD13, //HANGUL SYLLABLE PIEUP WA KIYEOKSIOS - 0x9452: 0xBD15, //HANGUL SYLLABLE PIEUP WA NIEUNCIEUC - 0x9453: 0xBD16, //HANGUL SYLLABLE PIEUP WA NIEUNHIEUH - 0x9454: 0xBD17, //HANGUL SYLLABLE PIEUP WA TIKEUT - 0x9455: 0xBD18, //HANGUL SYLLABLE PIEUP WA RIEUL - 0x9456: 0xBD19, //HANGUL SYLLABLE PIEUP WA RIEULKIYEOK - 0x9457: 0xBD1A, //HANGUL SYLLABLE PIEUP WA RIEULMIEUM - 0x9458: 0xBD1B, //HANGUL SYLLABLE PIEUP WA RIEULPIEUP - 0x9459: 0xBD1C, //HANGUL SYLLABLE PIEUP WA RIEULSIOS - 0x945A: 0xBD1D, //HANGUL SYLLABLE PIEUP WA RIEULTHIEUTH - 0x9461: 0xBD1E, //HANGUL SYLLABLE PIEUP WA RIEULPHIEUPH - 0x9462: 0xBD1F, //HANGUL SYLLABLE PIEUP WA RIEULHIEUH - 0x9463: 0xBD20, //HANGUL SYLLABLE PIEUP WA MIEUM - 0x9464: 0xBD21, //HANGUL SYLLABLE PIEUP WA PIEUP - 0x9465: 0xBD22, //HANGUL SYLLABLE PIEUP WA PIEUPSIOS - 0x9466: 0xBD23, //HANGUL SYLLABLE PIEUP WA SIOS - 0x9467: 0xBD25, //HANGUL SYLLABLE PIEUP WA IEUNG - 0x9468: 0xBD26, //HANGUL SYLLABLE PIEUP WA CIEUC - 0x9469: 0xBD27, //HANGUL SYLLABLE PIEUP WA CHIEUCH - 0x946A: 0xBD28, //HANGUL SYLLABLE PIEUP WA KHIEUKH - 0x946B: 0xBD29, //HANGUL SYLLABLE PIEUP WA THIEUTH - 0x946C: 0xBD2A, //HANGUL SYLLABLE PIEUP WA PHIEUPH - 0x946D: 0xBD2B, //HANGUL SYLLABLE PIEUP WA HIEUH - 0x946E: 0xBD2D, //HANGUL SYLLABLE PIEUP WAE KIYEOK - 0x946F: 0xBD2E, //HANGUL SYLLABLE PIEUP WAE SSANGKIYEOK - 0x9470: 0xBD2F, //HANGUL SYLLABLE PIEUP WAE KIYEOKSIOS - 0x9471: 0xBD30, //HANGUL SYLLABLE PIEUP WAE NIEUN - 0x9472: 0xBD31, //HANGUL SYLLABLE PIEUP WAE NIEUNCIEUC - 0x9473: 0xBD32, //HANGUL SYLLABLE PIEUP WAE NIEUNHIEUH - 0x9474: 0xBD33, //HANGUL SYLLABLE PIEUP WAE TIKEUT - 0x9475: 0xBD34, //HANGUL SYLLABLE PIEUP WAE RIEUL - 0x9476: 0xBD35, //HANGUL SYLLABLE PIEUP WAE RIEULKIYEOK - 0x9477: 0xBD36, //HANGUL SYLLABLE PIEUP WAE RIEULMIEUM - 0x9478: 0xBD37, //HANGUL SYLLABLE PIEUP WAE RIEULPIEUP - 0x9479: 0xBD38, //HANGUL SYLLABLE PIEUP WAE RIEULSIOS - 0x947A: 0xBD39, //HANGUL SYLLABLE PIEUP WAE RIEULTHIEUTH - 0x9481: 0xBD3A, //HANGUL SYLLABLE PIEUP WAE RIEULPHIEUPH - 0x9482: 0xBD3B, //HANGUL SYLLABLE PIEUP WAE RIEULHIEUH - 0x9483: 0xBD3C, //HANGUL SYLLABLE PIEUP WAE MIEUM - 0x9484: 0xBD3D, //HANGUL SYLLABLE PIEUP WAE PIEUP - 0x9485: 0xBD3E, //HANGUL SYLLABLE PIEUP WAE PIEUPSIOS - 0x9486: 0xBD3F, //HANGUL SYLLABLE PIEUP WAE SIOS - 0x9487: 0xBD41, //HANGUL SYLLABLE PIEUP WAE IEUNG - 0x9488: 0xBD42, //HANGUL SYLLABLE PIEUP WAE CIEUC - 0x9489: 0xBD43, //HANGUL SYLLABLE PIEUP WAE CHIEUCH - 0x948A: 0xBD44, //HANGUL SYLLABLE PIEUP WAE KHIEUKH - 0x948B: 0xBD45, //HANGUL SYLLABLE PIEUP WAE THIEUTH - 0x948C: 0xBD46, //HANGUL SYLLABLE PIEUP WAE PHIEUPH - 0x948D: 0xBD47, //HANGUL SYLLABLE PIEUP WAE HIEUH - 0x948E: 0xBD4A, //HANGUL SYLLABLE PIEUP OE SSANGKIYEOK - 0x948F: 0xBD4B, //HANGUL SYLLABLE PIEUP OE KIYEOKSIOS - 0x9490: 0xBD4D, //HANGUL SYLLABLE PIEUP OE NIEUNCIEUC - 0x9491: 0xBD4E, //HANGUL SYLLABLE PIEUP OE NIEUNHIEUH - 0x9492: 0xBD4F, //HANGUL SYLLABLE PIEUP OE TIKEUT - 0x9493: 0xBD51, //HANGUL SYLLABLE PIEUP OE RIEULKIYEOK - 0x9494: 0xBD52, //HANGUL SYLLABLE PIEUP OE RIEULMIEUM - 0x9495: 0xBD53, //HANGUL SYLLABLE PIEUP OE RIEULPIEUP - 0x9496: 0xBD54, //HANGUL SYLLABLE PIEUP OE RIEULSIOS - 0x9497: 0xBD55, //HANGUL SYLLABLE PIEUP OE RIEULTHIEUTH - 0x9498: 0xBD56, //HANGUL SYLLABLE PIEUP OE RIEULPHIEUPH - 0x9499: 0xBD57, //HANGUL SYLLABLE PIEUP OE RIEULHIEUH - 0x949A: 0xBD5A, //HANGUL SYLLABLE PIEUP OE PIEUPSIOS - 0x949B: 0xBD5B, //HANGUL SYLLABLE PIEUP OE SIOS - 0x949C: 0xBD5C, //HANGUL SYLLABLE PIEUP OE SSANGSIOS - 0x949D: 0xBD5D, //HANGUL SYLLABLE PIEUP OE IEUNG - 0x949E: 0xBD5E, //HANGUL SYLLABLE PIEUP OE CIEUC - 0x949F: 0xBD5F, //HANGUL SYLLABLE PIEUP OE CHIEUCH - 0x94A0: 0xBD60, //HANGUL SYLLABLE PIEUP OE KHIEUKH - 0x94A1: 0xBD61, //HANGUL SYLLABLE PIEUP OE THIEUTH - 0x94A2: 0xBD62, //HANGUL SYLLABLE PIEUP OE PHIEUPH - 0x94A3: 0xBD63, //HANGUL SYLLABLE PIEUP OE HIEUH - 0x94A4: 0xBD65, //HANGUL SYLLABLE PIEUP YO KIYEOK - 0x94A5: 0xBD66, //HANGUL SYLLABLE PIEUP YO SSANGKIYEOK - 0x94A6: 0xBD67, //HANGUL SYLLABLE PIEUP YO KIYEOKSIOS - 0x94A7: 0xBD69, //HANGUL SYLLABLE PIEUP YO NIEUNCIEUC - 0x94A8: 0xBD6A, //HANGUL SYLLABLE PIEUP YO NIEUNHIEUH - 0x94A9: 0xBD6B, //HANGUL SYLLABLE PIEUP YO TIKEUT - 0x94AA: 0xBD6C, //HANGUL SYLLABLE PIEUP YO RIEUL - 0x94AB: 0xBD6D, //HANGUL SYLLABLE PIEUP YO RIEULKIYEOK - 0x94AC: 0xBD6E, //HANGUL SYLLABLE PIEUP YO RIEULMIEUM - 0x94AD: 0xBD6F, //HANGUL SYLLABLE PIEUP YO RIEULPIEUP - 0x94AE: 0xBD70, //HANGUL SYLLABLE PIEUP YO RIEULSIOS - 0x94AF: 0xBD71, //HANGUL SYLLABLE PIEUP YO RIEULTHIEUTH - 0x94B0: 0xBD72, //HANGUL SYLLABLE PIEUP YO RIEULPHIEUPH - 0x94B1: 0xBD73, //HANGUL SYLLABLE PIEUP YO RIEULHIEUH - 0x94B2: 0xBD74, //HANGUL SYLLABLE PIEUP YO MIEUM - 0x94B3: 0xBD75, //HANGUL SYLLABLE PIEUP YO PIEUP - 0x94B4: 0xBD76, //HANGUL SYLLABLE PIEUP YO PIEUPSIOS - 0x94B5: 0xBD77, //HANGUL SYLLABLE PIEUP YO SIOS - 0x94B6: 0xBD78, //HANGUL SYLLABLE PIEUP YO SSANGSIOS - 0x94B7: 0xBD79, //HANGUL SYLLABLE PIEUP YO IEUNG - 0x94B8: 0xBD7A, //HANGUL SYLLABLE PIEUP YO CIEUC - 0x94B9: 0xBD7B, //HANGUL SYLLABLE PIEUP YO CHIEUCH - 0x94BA: 0xBD7C, //HANGUL SYLLABLE PIEUP YO KHIEUKH - 0x94BB: 0xBD7D, //HANGUL SYLLABLE PIEUP YO THIEUTH - 0x94BC: 0xBD7E, //HANGUL SYLLABLE PIEUP YO PHIEUPH - 0x94BD: 0xBD7F, //HANGUL SYLLABLE PIEUP YO HIEUH - 0x94BE: 0xBD82, //HANGUL SYLLABLE PIEUP U SSANGKIYEOK - 0x94BF: 0xBD83, //HANGUL SYLLABLE PIEUP U KIYEOKSIOS - 0x94C0: 0xBD85, //HANGUL SYLLABLE PIEUP U NIEUNCIEUC - 0x94C1: 0xBD86, //HANGUL SYLLABLE PIEUP U NIEUNHIEUH - 0x94C2: 0xBD8B, //HANGUL SYLLABLE PIEUP U RIEULPIEUP - 0x94C3: 0xBD8C, //HANGUL SYLLABLE PIEUP U RIEULSIOS - 0x94C4: 0xBD8D, //HANGUL SYLLABLE PIEUP U RIEULTHIEUTH - 0x94C5: 0xBD8E, //HANGUL SYLLABLE PIEUP U RIEULPHIEUPH - 0x94C6: 0xBD8F, //HANGUL SYLLABLE PIEUP U RIEULHIEUH - 0x94C7: 0xBD92, //HANGUL SYLLABLE PIEUP U PIEUPSIOS - 0x94C8: 0xBD94, //HANGUL SYLLABLE PIEUP U SSANGSIOS - 0x94C9: 0xBD96, //HANGUL SYLLABLE PIEUP U CIEUC - 0x94CA: 0xBD97, //HANGUL SYLLABLE PIEUP U CHIEUCH - 0x94CB: 0xBD98, //HANGUL SYLLABLE PIEUP U KHIEUKH - 0x94CC: 0xBD9B, //HANGUL SYLLABLE PIEUP U HIEUH - 0x94CD: 0xBD9D, //HANGUL SYLLABLE PIEUP WEO KIYEOK - 0x94CE: 0xBD9E, //HANGUL SYLLABLE PIEUP WEO SSANGKIYEOK - 0x94CF: 0xBD9F, //HANGUL SYLLABLE PIEUP WEO KIYEOKSIOS - 0x94D0: 0xBDA0, //HANGUL SYLLABLE PIEUP WEO NIEUN - 0x94D1: 0xBDA1, //HANGUL SYLLABLE PIEUP WEO NIEUNCIEUC - 0x94D2: 0xBDA2, //HANGUL SYLLABLE PIEUP WEO NIEUNHIEUH - 0x94D3: 0xBDA3, //HANGUL SYLLABLE PIEUP WEO TIKEUT - 0x94D4: 0xBDA5, //HANGUL SYLLABLE PIEUP WEO RIEULKIYEOK - 0x94D5: 0xBDA6, //HANGUL SYLLABLE PIEUP WEO RIEULMIEUM - 0x94D6: 0xBDA7, //HANGUL SYLLABLE PIEUP WEO RIEULPIEUP - 0x94D7: 0xBDA8, //HANGUL SYLLABLE PIEUP WEO RIEULSIOS - 0x94D8: 0xBDA9, //HANGUL SYLLABLE PIEUP WEO RIEULTHIEUTH - 0x94D9: 0xBDAA, //HANGUL SYLLABLE PIEUP WEO RIEULPHIEUPH - 0x94DA: 0xBDAB, //HANGUL SYLLABLE PIEUP WEO RIEULHIEUH - 0x94DB: 0xBDAC, //HANGUL SYLLABLE PIEUP WEO MIEUM - 0x94DC: 0xBDAD, //HANGUL SYLLABLE PIEUP WEO PIEUP - 0x94DD: 0xBDAE, //HANGUL SYLLABLE PIEUP WEO PIEUPSIOS - 0x94DE: 0xBDAF, //HANGUL SYLLABLE PIEUP WEO SIOS - 0x94DF: 0xBDB1, //HANGUL SYLLABLE PIEUP WEO IEUNG - 0x94E0: 0xBDB2, //HANGUL SYLLABLE PIEUP WEO CIEUC - 0x94E1: 0xBDB3, //HANGUL SYLLABLE PIEUP WEO CHIEUCH - 0x94E2: 0xBDB4, //HANGUL SYLLABLE PIEUP WEO KHIEUKH - 0x94E3: 0xBDB5, //HANGUL SYLLABLE PIEUP WEO THIEUTH - 0x94E4: 0xBDB6, //HANGUL SYLLABLE PIEUP WEO PHIEUPH - 0x94E5: 0xBDB7, //HANGUL SYLLABLE PIEUP WEO HIEUH - 0x94E6: 0xBDB9, //HANGUL SYLLABLE PIEUP WE KIYEOK - 0x94E7: 0xBDBA, //HANGUL SYLLABLE PIEUP WE SSANGKIYEOK - 0x94E8: 0xBDBB, //HANGUL SYLLABLE PIEUP WE KIYEOKSIOS - 0x94E9: 0xBDBC, //HANGUL SYLLABLE PIEUP WE NIEUN - 0x94EA: 0xBDBD, //HANGUL SYLLABLE PIEUP WE NIEUNCIEUC - 0x94EB: 0xBDBE, //HANGUL SYLLABLE PIEUP WE NIEUNHIEUH - 0x94EC: 0xBDBF, //HANGUL SYLLABLE PIEUP WE TIKEUT - 0x94ED: 0xBDC0, //HANGUL SYLLABLE PIEUP WE RIEUL - 0x94EE: 0xBDC1, //HANGUL SYLLABLE PIEUP WE RIEULKIYEOK - 0x94EF: 0xBDC2, //HANGUL SYLLABLE PIEUP WE RIEULMIEUM - 0x94F0: 0xBDC3, //HANGUL SYLLABLE PIEUP WE RIEULPIEUP - 0x94F1: 0xBDC4, //HANGUL SYLLABLE PIEUP WE RIEULSIOS - 0x94F2: 0xBDC5, //HANGUL SYLLABLE PIEUP WE RIEULTHIEUTH - 0x94F3: 0xBDC6, //HANGUL SYLLABLE PIEUP WE RIEULPHIEUPH - 0x94F4: 0xBDC7, //HANGUL SYLLABLE PIEUP WE RIEULHIEUH - 0x94F5: 0xBDC8, //HANGUL SYLLABLE PIEUP WE MIEUM - 0x94F6: 0xBDC9, //HANGUL SYLLABLE PIEUP WE PIEUP - 0x94F7: 0xBDCA, //HANGUL SYLLABLE PIEUP WE PIEUPSIOS - 0x94F8: 0xBDCB, //HANGUL SYLLABLE PIEUP WE SIOS - 0x94F9: 0xBDCC, //HANGUL SYLLABLE PIEUP WE SSANGSIOS - 0x94FA: 0xBDCD, //HANGUL SYLLABLE PIEUP WE IEUNG - 0x94FB: 0xBDCE, //HANGUL SYLLABLE PIEUP WE CIEUC - 0x94FC: 0xBDCF, //HANGUL SYLLABLE PIEUP WE CHIEUCH - 0x94FD: 0xBDD0, //HANGUL SYLLABLE PIEUP WE KHIEUKH - 0x94FE: 0xBDD1, //HANGUL SYLLABLE PIEUP WE THIEUTH - 0x9541: 0xBDD2, //HANGUL SYLLABLE PIEUP WE PHIEUPH - 0x9542: 0xBDD3, //HANGUL SYLLABLE PIEUP WE HIEUH - 0x9543: 0xBDD6, //HANGUL SYLLABLE PIEUP WI SSANGKIYEOK - 0x9544: 0xBDD7, //HANGUL SYLLABLE PIEUP WI KIYEOKSIOS - 0x9545: 0xBDD9, //HANGUL SYLLABLE PIEUP WI NIEUNCIEUC - 0x9546: 0xBDDA, //HANGUL SYLLABLE PIEUP WI NIEUNHIEUH - 0x9547: 0xBDDB, //HANGUL SYLLABLE PIEUP WI TIKEUT - 0x9548: 0xBDDD, //HANGUL SYLLABLE PIEUP WI RIEULKIYEOK - 0x9549: 0xBDDE, //HANGUL SYLLABLE PIEUP WI RIEULMIEUM - 0x954A: 0xBDDF, //HANGUL SYLLABLE PIEUP WI RIEULPIEUP - 0x954B: 0xBDE0, //HANGUL SYLLABLE PIEUP WI RIEULSIOS - 0x954C: 0xBDE1, //HANGUL SYLLABLE PIEUP WI RIEULTHIEUTH - 0x954D: 0xBDE2, //HANGUL SYLLABLE PIEUP WI RIEULPHIEUPH - 0x954E: 0xBDE3, //HANGUL SYLLABLE PIEUP WI RIEULHIEUH - 0x954F: 0xBDE4, //HANGUL SYLLABLE PIEUP WI MIEUM - 0x9550: 0xBDE5, //HANGUL SYLLABLE PIEUP WI PIEUP - 0x9551: 0xBDE6, //HANGUL SYLLABLE PIEUP WI PIEUPSIOS - 0x9552: 0xBDE7, //HANGUL SYLLABLE PIEUP WI SIOS - 0x9553: 0xBDE8, //HANGUL SYLLABLE PIEUP WI SSANGSIOS - 0x9554: 0xBDEA, //HANGUL SYLLABLE PIEUP WI CIEUC - 0x9555: 0xBDEB, //HANGUL SYLLABLE PIEUP WI CHIEUCH - 0x9556: 0xBDEC, //HANGUL SYLLABLE PIEUP WI KHIEUKH - 0x9557: 0xBDED, //HANGUL SYLLABLE PIEUP WI THIEUTH - 0x9558: 0xBDEE, //HANGUL SYLLABLE PIEUP WI PHIEUPH - 0x9559: 0xBDEF, //HANGUL SYLLABLE PIEUP WI HIEUH - 0x955A: 0xBDF1, //HANGUL SYLLABLE PIEUP YU KIYEOK - 0x9561: 0xBDF2, //HANGUL SYLLABLE PIEUP YU SSANGKIYEOK - 0x9562: 0xBDF3, //HANGUL SYLLABLE PIEUP YU KIYEOKSIOS - 0x9563: 0xBDF5, //HANGUL SYLLABLE PIEUP YU NIEUNCIEUC - 0x9564: 0xBDF6, //HANGUL SYLLABLE PIEUP YU NIEUNHIEUH - 0x9565: 0xBDF7, //HANGUL SYLLABLE PIEUP YU TIKEUT - 0x9566: 0xBDF9, //HANGUL SYLLABLE PIEUP YU RIEULKIYEOK - 0x9567: 0xBDFA, //HANGUL SYLLABLE PIEUP YU RIEULMIEUM - 0x9568: 0xBDFB, //HANGUL SYLLABLE PIEUP YU RIEULPIEUP - 0x9569: 0xBDFC, //HANGUL SYLLABLE PIEUP YU RIEULSIOS - 0x956A: 0xBDFD, //HANGUL SYLLABLE PIEUP YU RIEULTHIEUTH - 0x956B: 0xBDFE, //HANGUL SYLLABLE PIEUP YU RIEULPHIEUPH - 0x956C: 0xBDFF, //HANGUL SYLLABLE PIEUP YU RIEULHIEUH - 0x956D: 0xBE01, //HANGUL SYLLABLE PIEUP YU PIEUP - 0x956E: 0xBE02, //HANGUL SYLLABLE PIEUP YU PIEUPSIOS - 0x956F: 0xBE04, //HANGUL SYLLABLE PIEUP YU SSANGSIOS - 0x9570: 0xBE06, //HANGUL SYLLABLE PIEUP YU CIEUC - 0x9571: 0xBE07, //HANGUL SYLLABLE PIEUP YU CHIEUCH - 0x9572: 0xBE08, //HANGUL SYLLABLE PIEUP YU KHIEUKH - 0x9573: 0xBE09, //HANGUL SYLLABLE PIEUP YU THIEUTH - 0x9574: 0xBE0A, //HANGUL SYLLABLE PIEUP YU PHIEUPH - 0x9575: 0xBE0B, //HANGUL SYLLABLE PIEUP YU HIEUH - 0x9576: 0xBE0E, //HANGUL SYLLABLE PIEUP EU SSANGKIYEOK - 0x9577: 0xBE0F, //HANGUL SYLLABLE PIEUP EU KIYEOKSIOS - 0x9578: 0xBE11, //HANGUL SYLLABLE PIEUP EU NIEUNCIEUC - 0x9579: 0xBE12, //HANGUL SYLLABLE PIEUP EU NIEUNHIEUH - 0x957A: 0xBE13, //HANGUL SYLLABLE PIEUP EU TIKEUT - 0x9581: 0xBE15, //HANGUL SYLLABLE PIEUP EU RIEULKIYEOK - 0x9582: 0xBE16, //HANGUL SYLLABLE PIEUP EU RIEULMIEUM - 0x9583: 0xBE17, //HANGUL SYLLABLE PIEUP EU RIEULPIEUP - 0x9584: 0xBE18, //HANGUL SYLLABLE PIEUP EU RIEULSIOS - 0x9585: 0xBE19, //HANGUL SYLLABLE PIEUP EU RIEULTHIEUTH - 0x9586: 0xBE1A, //HANGUL SYLLABLE PIEUP EU RIEULPHIEUPH - 0x9587: 0xBE1B, //HANGUL SYLLABLE PIEUP EU RIEULHIEUH - 0x9588: 0xBE1E, //HANGUL SYLLABLE PIEUP EU PIEUPSIOS - 0x9589: 0xBE20, //HANGUL SYLLABLE PIEUP EU SSANGSIOS - 0x958A: 0xBE21, //HANGUL SYLLABLE PIEUP EU IEUNG - 0x958B: 0xBE22, //HANGUL SYLLABLE PIEUP EU CIEUC - 0x958C: 0xBE23, //HANGUL SYLLABLE PIEUP EU CHIEUCH - 0x958D: 0xBE24, //HANGUL SYLLABLE PIEUP EU KHIEUKH - 0x958E: 0xBE25, //HANGUL SYLLABLE PIEUP EU THIEUTH - 0x958F: 0xBE26, //HANGUL SYLLABLE PIEUP EU PHIEUPH - 0x9590: 0xBE27, //HANGUL SYLLABLE PIEUP EU HIEUH - 0x9591: 0xBE28, //HANGUL SYLLABLE PIEUP YI - 0x9592: 0xBE29, //HANGUL SYLLABLE PIEUP YI KIYEOK - 0x9593: 0xBE2A, //HANGUL SYLLABLE PIEUP YI SSANGKIYEOK - 0x9594: 0xBE2B, //HANGUL SYLLABLE PIEUP YI KIYEOKSIOS - 0x9595: 0xBE2C, //HANGUL SYLLABLE PIEUP YI NIEUN - 0x9596: 0xBE2D, //HANGUL SYLLABLE PIEUP YI NIEUNCIEUC - 0x9597: 0xBE2E, //HANGUL SYLLABLE PIEUP YI NIEUNHIEUH - 0x9598: 0xBE2F, //HANGUL SYLLABLE PIEUP YI TIKEUT - 0x9599: 0xBE30, //HANGUL SYLLABLE PIEUP YI RIEUL - 0x959A: 0xBE31, //HANGUL SYLLABLE PIEUP YI RIEULKIYEOK - 0x959B: 0xBE32, //HANGUL SYLLABLE PIEUP YI RIEULMIEUM - 0x959C: 0xBE33, //HANGUL SYLLABLE PIEUP YI RIEULPIEUP - 0x959D: 0xBE34, //HANGUL SYLLABLE PIEUP YI RIEULSIOS - 0x959E: 0xBE35, //HANGUL SYLLABLE PIEUP YI RIEULTHIEUTH - 0x959F: 0xBE36, //HANGUL SYLLABLE PIEUP YI RIEULPHIEUPH - 0x95A0: 0xBE37, //HANGUL SYLLABLE PIEUP YI RIEULHIEUH - 0x95A1: 0xBE38, //HANGUL SYLLABLE PIEUP YI MIEUM - 0x95A2: 0xBE39, //HANGUL SYLLABLE PIEUP YI PIEUP - 0x95A3: 0xBE3A, //HANGUL SYLLABLE PIEUP YI PIEUPSIOS - 0x95A4: 0xBE3B, //HANGUL SYLLABLE PIEUP YI SIOS - 0x95A5: 0xBE3C, //HANGUL SYLLABLE PIEUP YI SSANGSIOS - 0x95A6: 0xBE3D, //HANGUL SYLLABLE PIEUP YI IEUNG - 0x95A7: 0xBE3E, //HANGUL SYLLABLE PIEUP YI CIEUC - 0x95A8: 0xBE3F, //HANGUL SYLLABLE PIEUP YI CHIEUCH - 0x95A9: 0xBE40, //HANGUL SYLLABLE PIEUP YI KHIEUKH - 0x95AA: 0xBE41, //HANGUL SYLLABLE PIEUP YI THIEUTH - 0x95AB: 0xBE42, //HANGUL SYLLABLE PIEUP YI PHIEUPH - 0x95AC: 0xBE43, //HANGUL SYLLABLE PIEUP YI HIEUH - 0x95AD: 0xBE46, //HANGUL SYLLABLE PIEUP I SSANGKIYEOK - 0x95AE: 0xBE47, //HANGUL SYLLABLE PIEUP I KIYEOKSIOS - 0x95AF: 0xBE49, //HANGUL SYLLABLE PIEUP I NIEUNCIEUC - 0x95B0: 0xBE4A, //HANGUL SYLLABLE PIEUP I NIEUNHIEUH - 0x95B1: 0xBE4B, //HANGUL SYLLABLE PIEUP I TIKEUT - 0x95B2: 0xBE4D, //HANGUL SYLLABLE PIEUP I RIEULKIYEOK - 0x95B3: 0xBE4F, //HANGUL SYLLABLE PIEUP I RIEULPIEUP - 0x95B4: 0xBE50, //HANGUL SYLLABLE PIEUP I RIEULSIOS - 0x95B5: 0xBE51, //HANGUL SYLLABLE PIEUP I RIEULTHIEUTH - 0x95B6: 0xBE52, //HANGUL SYLLABLE PIEUP I RIEULPHIEUPH - 0x95B7: 0xBE53, //HANGUL SYLLABLE PIEUP I RIEULHIEUH - 0x95B8: 0xBE56, //HANGUL SYLLABLE PIEUP I PIEUPSIOS - 0x95B9: 0xBE58, //HANGUL SYLLABLE PIEUP I SSANGSIOS - 0x95BA: 0xBE5C, //HANGUL SYLLABLE PIEUP I KHIEUKH - 0x95BB: 0xBE5D, //HANGUL SYLLABLE PIEUP I THIEUTH - 0x95BC: 0xBE5E, //HANGUL SYLLABLE PIEUP I PHIEUPH - 0x95BD: 0xBE5F, //HANGUL SYLLABLE PIEUP I HIEUH - 0x95BE: 0xBE62, //HANGUL SYLLABLE SSANGPIEUP A SSANGKIYEOK - 0x95BF: 0xBE63, //HANGUL SYLLABLE SSANGPIEUP A KIYEOKSIOS - 0x95C0: 0xBE65, //HANGUL SYLLABLE SSANGPIEUP A NIEUNCIEUC - 0x95C1: 0xBE66, //HANGUL SYLLABLE SSANGPIEUP A NIEUNHIEUH - 0x95C2: 0xBE67, //HANGUL SYLLABLE SSANGPIEUP A TIKEUT - 0x95C3: 0xBE69, //HANGUL SYLLABLE SSANGPIEUP A RIEULKIYEOK - 0x95C4: 0xBE6B, //HANGUL SYLLABLE SSANGPIEUP A RIEULPIEUP - 0x95C5: 0xBE6C, //HANGUL SYLLABLE SSANGPIEUP A RIEULSIOS - 0x95C6: 0xBE6D, //HANGUL SYLLABLE SSANGPIEUP A RIEULTHIEUTH - 0x95C7: 0xBE6E, //HANGUL SYLLABLE SSANGPIEUP A RIEULPHIEUPH - 0x95C8: 0xBE6F, //HANGUL SYLLABLE SSANGPIEUP A RIEULHIEUH - 0x95C9: 0xBE72, //HANGUL SYLLABLE SSANGPIEUP A PIEUPSIOS - 0x95CA: 0xBE76, //HANGUL SYLLABLE SSANGPIEUP A CIEUC - 0x95CB: 0xBE77, //HANGUL SYLLABLE SSANGPIEUP A CHIEUCH - 0x95CC: 0xBE78, //HANGUL SYLLABLE SSANGPIEUP A KHIEUKH - 0x95CD: 0xBE79, //HANGUL SYLLABLE SSANGPIEUP A THIEUTH - 0x95CE: 0xBE7A, //HANGUL SYLLABLE SSANGPIEUP A PHIEUPH - 0x95CF: 0xBE7E, //HANGUL SYLLABLE SSANGPIEUP AE SSANGKIYEOK - 0x95D0: 0xBE7F, //HANGUL SYLLABLE SSANGPIEUP AE KIYEOKSIOS - 0x95D1: 0xBE81, //HANGUL SYLLABLE SSANGPIEUP AE NIEUNCIEUC - 0x95D2: 0xBE82, //HANGUL SYLLABLE SSANGPIEUP AE NIEUNHIEUH - 0x95D3: 0xBE83, //HANGUL SYLLABLE SSANGPIEUP AE TIKEUT - 0x95D4: 0xBE85, //HANGUL SYLLABLE SSANGPIEUP AE RIEULKIYEOK - 0x95D5: 0xBE86, //HANGUL SYLLABLE SSANGPIEUP AE RIEULMIEUM - 0x95D6: 0xBE87, //HANGUL SYLLABLE SSANGPIEUP AE RIEULPIEUP - 0x95D7: 0xBE88, //HANGUL SYLLABLE SSANGPIEUP AE RIEULSIOS - 0x95D8: 0xBE89, //HANGUL SYLLABLE SSANGPIEUP AE RIEULTHIEUTH - 0x95D9: 0xBE8A, //HANGUL SYLLABLE SSANGPIEUP AE RIEULPHIEUPH - 0x95DA: 0xBE8B, //HANGUL SYLLABLE SSANGPIEUP AE RIEULHIEUH - 0x95DB: 0xBE8E, //HANGUL SYLLABLE SSANGPIEUP AE PIEUPSIOS - 0x95DC: 0xBE92, //HANGUL SYLLABLE SSANGPIEUP AE CIEUC - 0x95DD: 0xBE93, //HANGUL SYLLABLE SSANGPIEUP AE CHIEUCH - 0x95DE: 0xBE94, //HANGUL SYLLABLE SSANGPIEUP AE KHIEUKH - 0x95DF: 0xBE95, //HANGUL SYLLABLE SSANGPIEUP AE THIEUTH - 0x95E0: 0xBE96, //HANGUL SYLLABLE SSANGPIEUP AE PHIEUPH - 0x95E1: 0xBE97, //HANGUL SYLLABLE SSANGPIEUP AE HIEUH - 0x95E2: 0xBE9A, //HANGUL SYLLABLE SSANGPIEUP YA SSANGKIYEOK - 0x95E3: 0xBE9B, //HANGUL SYLLABLE SSANGPIEUP YA KIYEOKSIOS - 0x95E4: 0xBE9C, //HANGUL SYLLABLE SSANGPIEUP YA NIEUN - 0x95E5: 0xBE9D, //HANGUL SYLLABLE SSANGPIEUP YA NIEUNCIEUC - 0x95E6: 0xBE9E, //HANGUL SYLLABLE SSANGPIEUP YA NIEUNHIEUH - 0x95E7: 0xBE9F, //HANGUL SYLLABLE SSANGPIEUP YA TIKEUT - 0x95E8: 0xBEA0, //HANGUL SYLLABLE SSANGPIEUP YA RIEUL - 0x95E9: 0xBEA1, //HANGUL SYLLABLE SSANGPIEUP YA RIEULKIYEOK - 0x95EA: 0xBEA2, //HANGUL SYLLABLE SSANGPIEUP YA RIEULMIEUM - 0x95EB: 0xBEA3, //HANGUL SYLLABLE SSANGPIEUP YA RIEULPIEUP - 0x95EC: 0xBEA4, //HANGUL SYLLABLE SSANGPIEUP YA RIEULSIOS - 0x95ED: 0xBEA5, //HANGUL SYLLABLE SSANGPIEUP YA RIEULTHIEUTH - 0x95EE: 0xBEA6, //HANGUL SYLLABLE SSANGPIEUP YA RIEULPHIEUPH - 0x95EF: 0xBEA7, //HANGUL SYLLABLE SSANGPIEUP YA RIEULHIEUH - 0x95F0: 0xBEA9, //HANGUL SYLLABLE SSANGPIEUP YA PIEUP - 0x95F1: 0xBEAA, //HANGUL SYLLABLE SSANGPIEUP YA PIEUPSIOS - 0x95F2: 0xBEAB, //HANGUL SYLLABLE SSANGPIEUP YA SIOS - 0x95F3: 0xBEAC, //HANGUL SYLLABLE SSANGPIEUP YA SSANGSIOS - 0x95F4: 0xBEAD, //HANGUL SYLLABLE SSANGPIEUP YA IEUNG - 0x95F5: 0xBEAE, //HANGUL SYLLABLE SSANGPIEUP YA CIEUC - 0x95F6: 0xBEAF, //HANGUL SYLLABLE SSANGPIEUP YA CHIEUCH - 0x95F7: 0xBEB0, //HANGUL SYLLABLE SSANGPIEUP YA KHIEUKH - 0x95F8: 0xBEB1, //HANGUL SYLLABLE SSANGPIEUP YA THIEUTH - 0x95F9: 0xBEB2, //HANGUL SYLLABLE SSANGPIEUP YA PHIEUPH - 0x95FA: 0xBEB3, //HANGUL SYLLABLE SSANGPIEUP YA HIEUH - 0x95FB: 0xBEB4, //HANGUL SYLLABLE SSANGPIEUP YAE - 0x95FC: 0xBEB5, //HANGUL SYLLABLE SSANGPIEUP YAE KIYEOK - 0x95FD: 0xBEB6, //HANGUL SYLLABLE SSANGPIEUP YAE SSANGKIYEOK - 0x95FE: 0xBEB7, //HANGUL SYLLABLE SSANGPIEUP YAE KIYEOKSIOS - 0x9641: 0xBEB8, //HANGUL SYLLABLE SSANGPIEUP YAE NIEUN - 0x9642: 0xBEB9, //HANGUL SYLLABLE SSANGPIEUP YAE NIEUNCIEUC - 0x9643: 0xBEBA, //HANGUL SYLLABLE SSANGPIEUP YAE NIEUNHIEUH - 0x9644: 0xBEBB, //HANGUL SYLLABLE SSANGPIEUP YAE TIKEUT - 0x9645: 0xBEBC, //HANGUL SYLLABLE SSANGPIEUP YAE RIEUL - 0x9646: 0xBEBD, //HANGUL SYLLABLE SSANGPIEUP YAE RIEULKIYEOK - 0x9647: 0xBEBE, //HANGUL SYLLABLE SSANGPIEUP YAE RIEULMIEUM - 0x9648: 0xBEBF, //HANGUL SYLLABLE SSANGPIEUP YAE RIEULPIEUP - 0x9649: 0xBEC0, //HANGUL SYLLABLE SSANGPIEUP YAE RIEULSIOS - 0x964A: 0xBEC1, //HANGUL SYLLABLE SSANGPIEUP YAE RIEULTHIEUTH - 0x964B: 0xBEC2, //HANGUL SYLLABLE SSANGPIEUP YAE RIEULPHIEUPH - 0x964C: 0xBEC3, //HANGUL SYLLABLE SSANGPIEUP YAE RIEULHIEUH - 0x964D: 0xBEC4, //HANGUL SYLLABLE SSANGPIEUP YAE MIEUM - 0x964E: 0xBEC5, //HANGUL SYLLABLE SSANGPIEUP YAE PIEUP - 0x964F: 0xBEC6, //HANGUL SYLLABLE SSANGPIEUP YAE PIEUPSIOS - 0x9650: 0xBEC7, //HANGUL SYLLABLE SSANGPIEUP YAE SIOS - 0x9651: 0xBEC8, //HANGUL SYLLABLE SSANGPIEUP YAE SSANGSIOS - 0x9652: 0xBEC9, //HANGUL SYLLABLE SSANGPIEUP YAE IEUNG - 0x9653: 0xBECA, //HANGUL SYLLABLE SSANGPIEUP YAE CIEUC - 0x9654: 0xBECB, //HANGUL SYLLABLE SSANGPIEUP YAE CHIEUCH - 0x9655: 0xBECC, //HANGUL SYLLABLE SSANGPIEUP YAE KHIEUKH - 0x9656: 0xBECD, //HANGUL SYLLABLE SSANGPIEUP YAE THIEUTH - 0x9657: 0xBECE, //HANGUL SYLLABLE SSANGPIEUP YAE PHIEUPH - 0x9658: 0xBECF, //HANGUL SYLLABLE SSANGPIEUP YAE HIEUH - 0x9659: 0xBED2, //HANGUL SYLLABLE SSANGPIEUP EO SSANGKIYEOK - 0x965A: 0xBED3, //HANGUL SYLLABLE SSANGPIEUP EO KIYEOKSIOS - 0x9661: 0xBED5, //HANGUL SYLLABLE SSANGPIEUP EO NIEUNCIEUC - 0x9662: 0xBED6, //HANGUL SYLLABLE SSANGPIEUP EO NIEUNHIEUH - 0x9663: 0xBED9, //HANGUL SYLLABLE SSANGPIEUP EO RIEULKIYEOK - 0x9664: 0xBEDA, //HANGUL SYLLABLE SSANGPIEUP EO RIEULMIEUM - 0x9665: 0xBEDB, //HANGUL SYLLABLE SSANGPIEUP EO RIEULPIEUP - 0x9666: 0xBEDC, //HANGUL SYLLABLE SSANGPIEUP EO RIEULSIOS - 0x9667: 0xBEDD, //HANGUL SYLLABLE SSANGPIEUP EO RIEULTHIEUTH - 0x9668: 0xBEDE, //HANGUL SYLLABLE SSANGPIEUP EO RIEULPHIEUPH - 0x9669: 0xBEDF, //HANGUL SYLLABLE SSANGPIEUP EO RIEULHIEUH - 0x966A: 0xBEE1, //HANGUL SYLLABLE SSANGPIEUP EO PIEUP - 0x966B: 0xBEE2, //HANGUL SYLLABLE SSANGPIEUP EO PIEUPSIOS - 0x966C: 0xBEE6, //HANGUL SYLLABLE SSANGPIEUP EO CIEUC - 0x966D: 0xBEE7, //HANGUL SYLLABLE SSANGPIEUP EO CHIEUCH - 0x966E: 0xBEE8, //HANGUL SYLLABLE SSANGPIEUP EO KHIEUKH - 0x966F: 0xBEE9, //HANGUL SYLLABLE SSANGPIEUP EO THIEUTH - 0x9670: 0xBEEA, //HANGUL SYLLABLE SSANGPIEUP EO PHIEUPH - 0x9671: 0xBEEB, //HANGUL SYLLABLE SSANGPIEUP EO HIEUH - 0x9672: 0xBEED, //HANGUL SYLLABLE SSANGPIEUP E KIYEOK - 0x9673: 0xBEEE, //HANGUL SYLLABLE SSANGPIEUP E SSANGKIYEOK - 0x9674: 0xBEEF, //HANGUL SYLLABLE SSANGPIEUP E KIYEOKSIOS - 0x9675: 0xBEF0, //HANGUL SYLLABLE SSANGPIEUP E NIEUN - 0x9676: 0xBEF1, //HANGUL SYLLABLE SSANGPIEUP E NIEUNCIEUC - 0x9677: 0xBEF2, //HANGUL SYLLABLE SSANGPIEUP E NIEUNHIEUH - 0x9678: 0xBEF3, //HANGUL SYLLABLE SSANGPIEUP E TIKEUT - 0x9679: 0xBEF4, //HANGUL SYLLABLE SSANGPIEUP E RIEUL - 0x967A: 0xBEF5, //HANGUL SYLLABLE SSANGPIEUP E RIEULKIYEOK - 0x9681: 0xBEF6, //HANGUL SYLLABLE SSANGPIEUP E RIEULMIEUM - 0x9682: 0xBEF7, //HANGUL SYLLABLE SSANGPIEUP E RIEULPIEUP - 0x9683: 0xBEF8, //HANGUL SYLLABLE SSANGPIEUP E RIEULSIOS - 0x9684: 0xBEF9, //HANGUL SYLLABLE SSANGPIEUP E RIEULTHIEUTH - 0x9685: 0xBEFA, //HANGUL SYLLABLE SSANGPIEUP E RIEULPHIEUPH - 0x9686: 0xBEFB, //HANGUL SYLLABLE SSANGPIEUP E RIEULHIEUH - 0x9687: 0xBEFC, //HANGUL SYLLABLE SSANGPIEUP E MIEUM - 0x9688: 0xBEFD, //HANGUL SYLLABLE SSANGPIEUP E PIEUP - 0x9689: 0xBEFE, //HANGUL SYLLABLE SSANGPIEUP E PIEUPSIOS - 0x968A: 0xBEFF, //HANGUL SYLLABLE SSANGPIEUP E SIOS - 0x968B: 0xBF00, //HANGUL SYLLABLE SSANGPIEUP E SSANGSIOS - 0x968C: 0xBF02, //HANGUL SYLLABLE SSANGPIEUP E CIEUC - 0x968D: 0xBF03, //HANGUL SYLLABLE SSANGPIEUP E CHIEUCH - 0x968E: 0xBF04, //HANGUL SYLLABLE SSANGPIEUP E KHIEUKH - 0x968F: 0xBF05, //HANGUL SYLLABLE SSANGPIEUP E THIEUTH - 0x9690: 0xBF06, //HANGUL SYLLABLE SSANGPIEUP E PHIEUPH - 0x9691: 0xBF07, //HANGUL SYLLABLE SSANGPIEUP E HIEUH - 0x9692: 0xBF0A, //HANGUL SYLLABLE SSANGPIEUP YEO SSANGKIYEOK - 0x9693: 0xBF0B, //HANGUL SYLLABLE SSANGPIEUP YEO KIYEOKSIOS - 0x9694: 0xBF0C, //HANGUL SYLLABLE SSANGPIEUP YEO NIEUN - 0x9695: 0xBF0D, //HANGUL SYLLABLE SSANGPIEUP YEO NIEUNCIEUC - 0x9696: 0xBF0E, //HANGUL SYLLABLE SSANGPIEUP YEO NIEUNHIEUH - 0x9697: 0xBF0F, //HANGUL SYLLABLE SSANGPIEUP YEO TIKEUT - 0x9698: 0xBF10, //HANGUL SYLLABLE SSANGPIEUP YEO RIEUL - 0x9699: 0xBF11, //HANGUL SYLLABLE SSANGPIEUP YEO RIEULKIYEOK - 0x969A: 0xBF12, //HANGUL SYLLABLE SSANGPIEUP YEO RIEULMIEUM - 0x969B: 0xBF13, //HANGUL SYLLABLE SSANGPIEUP YEO RIEULPIEUP - 0x969C: 0xBF14, //HANGUL SYLLABLE SSANGPIEUP YEO RIEULSIOS - 0x969D: 0xBF15, //HANGUL SYLLABLE SSANGPIEUP YEO RIEULTHIEUTH - 0x969E: 0xBF16, //HANGUL SYLLABLE SSANGPIEUP YEO RIEULPHIEUPH - 0x969F: 0xBF17, //HANGUL SYLLABLE SSANGPIEUP YEO RIEULHIEUH - 0x96A0: 0xBF1A, //HANGUL SYLLABLE SSANGPIEUP YEO PIEUPSIOS - 0x96A1: 0xBF1E, //HANGUL SYLLABLE SSANGPIEUP YEO CIEUC - 0x96A2: 0xBF1F, //HANGUL SYLLABLE SSANGPIEUP YEO CHIEUCH - 0x96A3: 0xBF20, //HANGUL SYLLABLE SSANGPIEUP YEO KHIEUKH - 0x96A4: 0xBF21, //HANGUL SYLLABLE SSANGPIEUP YEO THIEUTH - 0x96A5: 0xBF22, //HANGUL SYLLABLE SSANGPIEUP YEO PHIEUPH - 0x96A6: 0xBF23, //HANGUL SYLLABLE SSANGPIEUP YEO HIEUH - 0x96A7: 0xBF24, //HANGUL SYLLABLE SSANGPIEUP YE - 0x96A8: 0xBF25, //HANGUL SYLLABLE SSANGPIEUP YE KIYEOK - 0x96A9: 0xBF26, //HANGUL SYLLABLE SSANGPIEUP YE SSANGKIYEOK - 0x96AA: 0xBF27, //HANGUL SYLLABLE SSANGPIEUP YE KIYEOKSIOS - 0x96AB: 0xBF28, //HANGUL SYLLABLE SSANGPIEUP YE NIEUN - 0x96AC: 0xBF29, //HANGUL SYLLABLE SSANGPIEUP YE NIEUNCIEUC - 0x96AD: 0xBF2A, //HANGUL SYLLABLE SSANGPIEUP YE NIEUNHIEUH - 0x96AE: 0xBF2B, //HANGUL SYLLABLE SSANGPIEUP YE TIKEUT - 0x96AF: 0xBF2C, //HANGUL SYLLABLE SSANGPIEUP YE RIEUL - 0x96B0: 0xBF2D, //HANGUL SYLLABLE SSANGPIEUP YE RIEULKIYEOK - 0x96B1: 0xBF2E, //HANGUL SYLLABLE SSANGPIEUP YE RIEULMIEUM - 0x96B2: 0xBF2F, //HANGUL SYLLABLE SSANGPIEUP YE RIEULPIEUP - 0x96B3: 0xBF30, //HANGUL SYLLABLE SSANGPIEUP YE RIEULSIOS - 0x96B4: 0xBF31, //HANGUL SYLLABLE SSANGPIEUP YE RIEULTHIEUTH - 0x96B5: 0xBF32, //HANGUL SYLLABLE SSANGPIEUP YE RIEULPHIEUPH - 0x96B6: 0xBF33, //HANGUL SYLLABLE SSANGPIEUP YE RIEULHIEUH - 0x96B7: 0xBF34, //HANGUL SYLLABLE SSANGPIEUP YE MIEUM - 0x96B8: 0xBF35, //HANGUL SYLLABLE SSANGPIEUP YE PIEUP - 0x96B9: 0xBF36, //HANGUL SYLLABLE SSANGPIEUP YE PIEUPSIOS - 0x96BA: 0xBF37, //HANGUL SYLLABLE SSANGPIEUP YE SIOS - 0x96BB: 0xBF38, //HANGUL SYLLABLE SSANGPIEUP YE SSANGSIOS - 0x96BC: 0xBF39, //HANGUL SYLLABLE SSANGPIEUP YE IEUNG - 0x96BD: 0xBF3A, //HANGUL SYLLABLE SSANGPIEUP YE CIEUC - 0x96BE: 0xBF3B, //HANGUL SYLLABLE SSANGPIEUP YE CHIEUCH - 0x96BF: 0xBF3C, //HANGUL SYLLABLE SSANGPIEUP YE KHIEUKH - 0x96C0: 0xBF3D, //HANGUL SYLLABLE SSANGPIEUP YE THIEUTH - 0x96C1: 0xBF3E, //HANGUL SYLLABLE SSANGPIEUP YE PHIEUPH - 0x96C2: 0xBF3F, //HANGUL SYLLABLE SSANGPIEUP YE HIEUH - 0x96C3: 0xBF42, //HANGUL SYLLABLE SSANGPIEUP O SSANGKIYEOK - 0x96C4: 0xBF43, //HANGUL SYLLABLE SSANGPIEUP O KIYEOKSIOS - 0x96C5: 0xBF45, //HANGUL SYLLABLE SSANGPIEUP O NIEUNCIEUC - 0x96C6: 0xBF46, //HANGUL SYLLABLE SSANGPIEUP O NIEUNHIEUH - 0x96C7: 0xBF47, //HANGUL SYLLABLE SSANGPIEUP O TIKEUT - 0x96C8: 0xBF49, //HANGUL SYLLABLE SSANGPIEUP O RIEULKIYEOK - 0x96C9: 0xBF4A, //HANGUL SYLLABLE SSANGPIEUP O RIEULMIEUM - 0x96CA: 0xBF4B, //HANGUL SYLLABLE SSANGPIEUP O RIEULPIEUP - 0x96CB: 0xBF4C, //HANGUL SYLLABLE SSANGPIEUP O RIEULSIOS - 0x96CC: 0xBF4D, //HANGUL SYLLABLE SSANGPIEUP O RIEULTHIEUTH - 0x96CD: 0xBF4E, //HANGUL SYLLABLE SSANGPIEUP O RIEULPHIEUPH - 0x96CE: 0xBF4F, //HANGUL SYLLABLE SSANGPIEUP O RIEULHIEUH - 0x96CF: 0xBF52, //HANGUL SYLLABLE SSANGPIEUP O PIEUPSIOS - 0x96D0: 0xBF53, //HANGUL SYLLABLE SSANGPIEUP O SIOS - 0x96D1: 0xBF54, //HANGUL SYLLABLE SSANGPIEUP O SSANGSIOS - 0x96D2: 0xBF56, //HANGUL SYLLABLE SSANGPIEUP O CIEUC - 0x96D3: 0xBF57, //HANGUL SYLLABLE SSANGPIEUP O CHIEUCH - 0x96D4: 0xBF58, //HANGUL SYLLABLE SSANGPIEUP O KHIEUKH - 0x96D5: 0xBF59, //HANGUL SYLLABLE SSANGPIEUP O THIEUTH - 0x96D6: 0xBF5A, //HANGUL SYLLABLE SSANGPIEUP O PHIEUPH - 0x96D7: 0xBF5B, //HANGUL SYLLABLE SSANGPIEUP O HIEUH - 0x96D8: 0xBF5C, //HANGUL SYLLABLE SSANGPIEUP WA - 0x96D9: 0xBF5D, //HANGUL SYLLABLE SSANGPIEUP WA KIYEOK - 0x96DA: 0xBF5E, //HANGUL SYLLABLE SSANGPIEUP WA SSANGKIYEOK - 0x96DB: 0xBF5F, //HANGUL SYLLABLE SSANGPIEUP WA KIYEOKSIOS - 0x96DC: 0xBF60, //HANGUL SYLLABLE SSANGPIEUP WA NIEUN - 0x96DD: 0xBF61, //HANGUL SYLLABLE SSANGPIEUP WA NIEUNCIEUC - 0x96DE: 0xBF62, //HANGUL SYLLABLE SSANGPIEUP WA NIEUNHIEUH - 0x96DF: 0xBF63, //HANGUL SYLLABLE SSANGPIEUP WA TIKEUT - 0x96E0: 0xBF64, //HANGUL SYLLABLE SSANGPIEUP WA RIEUL - 0x96E1: 0xBF65, //HANGUL SYLLABLE SSANGPIEUP WA RIEULKIYEOK - 0x96E2: 0xBF66, //HANGUL SYLLABLE SSANGPIEUP WA RIEULMIEUM - 0x96E3: 0xBF67, //HANGUL SYLLABLE SSANGPIEUP WA RIEULPIEUP - 0x96E4: 0xBF68, //HANGUL SYLLABLE SSANGPIEUP WA RIEULSIOS - 0x96E5: 0xBF69, //HANGUL SYLLABLE SSANGPIEUP WA RIEULTHIEUTH - 0x96E6: 0xBF6A, //HANGUL SYLLABLE SSANGPIEUP WA RIEULPHIEUPH - 0x96E7: 0xBF6B, //HANGUL SYLLABLE SSANGPIEUP WA RIEULHIEUH - 0x96E8: 0xBF6C, //HANGUL SYLLABLE SSANGPIEUP WA MIEUM - 0x96E9: 0xBF6D, //HANGUL SYLLABLE SSANGPIEUP WA PIEUP - 0x96EA: 0xBF6E, //HANGUL SYLLABLE SSANGPIEUP WA PIEUPSIOS - 0x96EB: 0xBF6F, //HANGUL SYLLABLE SSANGPIEUP WA SIOS - 0x96EC: 0xBF70, //HANGUL SYLLABLE SSANGPIEUP WA SSANGSIOS - 0x96ED: 0xBF71, //HANGUL SYLLABLE SSANGPIEUP WA IEUNG - 0x96EE: 0xBF72, //HANGUL SYLLABLE SSANGPIEUP WA CIEUC - 0x96EF: 0xBF73, //HANGUL SYLLABLE SSANGPIEUP WA CHIEUCH - 0x96F0: 0xBF74, //HANGUL SYLLABLE SSANGPIEUP WA KHIEUKH - 0x96F1: 0xBF75, //HANGUL SYLLABLE SSANGPIEUP WA THIEUTH - 0x96F2: 0xBF76, //HANGUL SYLLABLE SSANGPIEUP WA PHIEUPH - 0x96F3: 0xBF77, //HANGUL SYLLABLE SSANGPIEUP WA HIEUH - 0x96F4: 0xBF78, //HANGUL SYLLABLE SSANGPIEUP WAE - 0x96F5: 0xBF79, //HANGUL SYLLABLE SSANGPIEUP WAE KIYEOK - 0x96F6: 0xBF7A, //HANGUL SYLLABLE SSANGPIEUP WAE SSANGKIYEOK - 0x96F7: 0xBF7B, //HANGUL SYLLABLE SSANGPIEUP WAE KIYEOKSIOS - 0x96F8: 0xBF7C, //HANGUL SYLLABLE SSANGPIEUP WAE NIEUN - 0x96F9: 0xBF7D, //HANGUL SYLLABLE SSANGPIEUP WAE NIEUNCIEUC - 0x96FA: 0xBF7E, //HANGUL SYLLABLE SSANGPIEUP WAE NIEUNHIEUH - 0x96FB: 0xBF7F, //HANGUL SYLLABLE SSANGPIEUP WAE TIKEUT - 0x96FC: 0xBF80, //HANGUL SYLLABLE SSANGPIEUP WAE RIEUL - 0x96FD: 0xBF81, //HANGUL SYLLABLE SSANGPIEUP WAE RIEULKIYEOK - 0x96FE: 0xBF82, //HANGUL SYLLABLE SSANGPIEUP WAE RIEULMIEUM - 0x9741: 0xBF83, //HANGUL SYLLABLE SSANGPIEUP WAE RIEULPIEUP - 0x9742: 0xBF84, //HANGUL SYLLABLE SSANGPIEUP WAE RIEULSIOS - 0x9743: 0xBF85, //HANGUL SYLLABLE SSANGPIEUP WAE RIEULTHIEUTH - 0x9744: 0xBF86, //HANGUL SYLLABLE SSANGPIEUP WAE RIEULPHIEUPH - 0x9745: 0xBF87, //HANGUL SYLLABLE SSANGPIEUP WAE RIEULHIEUH - 0x9746: 0xBF88, //HANGUL SYLLABLE SSANGPIEUP WAE MIEUM - 0x9747: 0xBF89, //HANGUL SYLLABLE SSANGPIEUP WAE PIEUP - 0x9748: 0xBF8A, //HANGUL SYLLABLE SSANGPIEUP WAE PIEUPSIOS - 0x9749: 0xBF8B, //HANGUL SYLLABLE SSANGPIEUP WAE SIOS - 0x974A: 0xBF8C, //HANGUL SYLLABLE SSANGPIEUP WAE SSANGSIOS - 0x974B: 0xBF8D, //HANGUL SYLLABLE SSANGPIEUP WAE IEUNG - 0x974C: 0xBF8E, //HANGUL SYLLABLE SSANGPIEUP WAE CIEUC - 0x974D: 0xBF8F, //HANGUL SYLLABLE SSANGPIEUP WAE CHIEUCH - 0x974E: 0xBF90, //HANGUL SYLLABLE SSANGPIEUP WAE KHIEUKH - 0x974F: 0xBF91, //HANGUL SYLLABLE SSANGPIEUP WAE THIEUTH - 0x9750: 0xBF92, //HANGUL SYLLABLE SSANGPIEUP WAE PHIEUPH - 0x9751: 0xBF93, //HANGUL SYLLABLE SSANGPIEUP WAE HIEUH - 0x9752: 0xBF95, //HANGUL SYLLABLE SSANGPIEUP OE KIYEOK - 0x9753: 0xBF96, //HANGUL SYLLABLE SSANGPIEUP OE SSANGKIYEOK - 0x9754: 0xBF97, //HANGUL SYLLABLE SSANGPIEUP OE KIYEOKSIOS - 0x9755: 0xBF98, //HANGUL SYLLABLE SSANGPIEUP OE NIEUN - 0x9756: 0xBF99, //HANGUL SYLLABLE SSANGPIEUP OE NIEUNCIEUC - 0x9757: 0xBF9A, //HANGUL SYLLABLE SSANGPIEUP OE NIEUNHIEUH - 0x9758: 0xBF9B, //HANGUL SYLLABLE SSANGPIEUP OE TIKEUT - 0x9759: 0xBF9C, //HANGUL SYLLABLE SSANGPIEUP OE RIEUL - 0x975A: 0xBF9D, //HANGUL SYLLABLE SSANGPIEUP OE RIEULKIYEOK - 0x9761: 0xBF9E, //HANGUL SYLLABLE SSANGPIEUP OE RIEULMIEUM - 0x9762: 0xBF9F, //HANGUL SYLLABLE SSANGPIEUP OE RIEULPIEUP - 0x9763: 0xBFA0, //HANGUL SYLLABLE SSANGPIEUP OE RIEULSIOS - 0x9764: 0xBFA1, //HANGUL SYLLABLE SSANGPIEUP OE RIEULTHIEUTH - 0x9765: 0xBFA2, //HANGUL SYLLABLE SSANGPIEUP OE RIEULPHIEUPH - 0x9766: 0xBFA3, //HANGUL SYLLABLE SSANGPIEUP OE RIEULHIEUH - 0x9767: 0xBFA4, //HANGUL SYLLABLE SSANGPIEUP OE MIEUM - 0x9768: 0xBFA5, //HANGUL SYLLABLE SSANGPIEUP OE PIEUP - 0x9769: 0xBFA6, //HANGUL SYLLABLE SSANGPIEUP OE PIEUPSIOS - 0x976A: 0xBFA7, //HANGUL SYLLABLE SSANGPIEUP OE SIOS - 0x976B: 0xBFA8, //HANGUL SYLLABLE SSANGPIEUP OE SSANGSIOS - 0x976C: 0xBFA9, //HANGUL SYLLABLE SSANGPIEUP OE IEUNG - 0x976D: 0xBFAA, //HANGUL SYLLABLE SSANGPIEUP OE CIEUC - 0x976E: 0xBFAB, //HANGUL SYLLABLE SSANGPIEUP OE CHIEUCH - 0x976F: 0xBFAC, //HANGUL SYLLABLE SSANGPIEUP OE KHIEUKH - 0x9770: 0xBFAD, //HANGUL SYLLABLE SSANGPIEUP OE THIEUTH - 0x9771: 0xBFAE, //HANGUL SYLLABLE SSANGPIEUP OE PHIEUPH - 0x9772: 0xBFAF, //HANGUL SYLLABLE SSANGPIEUP OE HIEUH - 0x9773: 0xBFB1, //HANGUL SYLLABLE SSANGPIEUP YO KIYEOK - 0x9774: 0xBFB2, //HANGUL SYLLABLE SSANGPIEUP YO SSANGKIYEOK - 0x9775: 0xBFB3, //HANGUL SYLLABLE SSANGPIEUP YO KIYEOKSIOS - 0x9776: 0xBFB4, //HANGUL SYLLABLE SSANGPIEUP YO NIEUN - 0x9777: 0xBFB5, //HANGUL SYLLABLE SSANGPIEUP YO NIEUNCIEUC - 0x9778: 0xBFB6, //HANGUL SYLLABLE SSANGPIEUP YO NIEUNHIEUH - 0x9779: 0xBFB7, //HANGUL SYLLABLE SSANGPIEUP YO TIKEUT - 0x977A: 0xBFB8, //HANGUL SYLLABLE SSANGPIEUP YO RIEUL - 0x9781: 0xBFB9, //HANGUL SYLLABLE SSANGPIEUP YO RIEULKIYEOK - 0x9782: 0xBFBA, //HANGUL SYLLABLE SSANGPIEUP YO RIEULMIEUM - 0x9783: 0xBFBB, //HANGUL SYLLABLE SSANGPIEUP YO RIEULPIEUP - 0x9784: 0xBFBC, //HANGUL SYLLABLE SSANGPIEUP YO RIEULSIOS - 0x9785: 0xBFBD, //HANGUL SYLLABLE SSANGPIEUP YO RIEULTHIEUTH - 0x9786: 0xBFBE, //HANGUL SYLLABLE SSANGPIEUP YO RIEULPHIEUPH - 0x9787: 0xBFBF, //HANGUL SYLLABLE SSANGPIEUP YO RIEULHIEUH - 0x9788: 0xBFC0, //HANGUL SYLLABLE SSANGPIEUP YO MIEUM - 0x9789: 0xBFC1, //HANGUL SYLLABLE SSANGPIEUP YO PIEUP - 0x978A: 0xBFC2, //HANGUL SYLLABLE SSANGPIEUP YO PIEUPSIOS - 0x978B: 0xBFC3, //HANGUL SYLLABLE SSANGPIEUP YO SIOS - 0x978C: 0xBFC4, //HANGUL SYLLABLE SSANGPIEUP YO SSANGSIOS - 0x978D: 0xBFC6, //HANGUL SYLLABLE SSANGPIEUP YO CIEUC - 0x978E: 0xBFC7, //HANGUL SYLLABLE SSANGPIEUP YO CHIEUCH - 0x978F: 0xBFC8, //HANGUL SYLLABLE SSANGPIEUP YO KHIEUKH - 0x9790: 0xBFC9, //HANGUL SYLLABLE SSANGPIEUP YO THIEUTH - 0x9791: 0xBFCA, //HANGUL SYLLABLE SSANGPIEUP YO PHIEUPH - 0x9792: 0xBFCB, //HANGUL SYLLABLE SSANGPIEUP YO HIEUH - 0x9793: 0xBFCE, //HANGUL SYLLABLE SSANGPIEUP U SSANGKIYEOK - 0x9794: 0xBFCF, //HANGUL SYLLABLE SSANGPIEUP U KIYEOKSIOS - 0x9795: 0xBFD1, //HANGUL SYLLABLE SSANGPIEUP U NIEUNCIEUC - 0x9796: 0xBFD2, //HANGUL SYLLABLE SSANGPIEUP U NIEUNHIEUH - 0x9797: 0xBFD3, //HANGUL SYLLABLE SSANGPIEUP U TIKEUT - 0x9798: 0xBFD5, //HANGUL SYLLABLE SSANGPIEUP U RIEULKIYEOK - 0x9799: 0xBFD6, //HANGUL SYLLABLE SSANGPIEUP U RIEULMIEUM - 0x979A: 0xBFD7, //HANGUL SYLLABLE SSANGPIEUP U RIEULPIEUP - 0x979B: 0xBFD8, //HANGUL SYLLABLE SSANGPIEUP U RIEULSIOS - 0x979C: 0xBFD9, //HANGUL SYLLABLE SSANGPIEUP U RIEULTHIEUTH - 0x979D: 0xBFDA, //HANGUL SYLLABLE SSANGPIEUP U RIEULPHIEUPH - 0x979E: 0xBFDB, //HANGUL SYLLABLE SSANGPIEUP U RIEULHIEUH - 0x979F: 0xBFDD, //HANGUL SYLLABLE SSANGPIEUP U PIEUP - 0x97A0: 0xBFDE, //HANGUL SYLLABLE SSANGPIEUP U PIEUPSIOS - 0x97A1: 0xBFE0, //HANGUL SYLLABLE SSANGPIEUP U SSANGSIOS - 0x97A2: 0xBFE2, //HANGUL SYLLABLE SSANGPIEUP U CIEUC - 0x97A3: 0xBFE3, //HANGUL SYLLABLE SSANGPIEUP U CHIEUCH - 0x97A4: 0xBFE4, //HANGUL SYLLABLE SSANGPIEUP U KHIEUKH - 0x97A5: 0xBFE5, //HANGUL SYLLABLE SSANGPIEUP U THIEUTH - 0x97A6: 0xBFE6, //HANGUL SYLLABLE SSANGPIEUP U PHIEUPH - 0x97A7: 0xBFE7, //HANGUL SYLLABLE SSANGPIEUP U HIEUH - 0x97A8: 0xBFE8, //HANGUL SYLLABLE SSANGPIEUP WEO - 0x97A9: 0xBFE9, //HANGUL SYLLABLE SSANGPIEUP WEO KIYEOK - 0x97AA: 0xBFEA, //HANGUL SYLLABLE SSANGPIEUP WEO SSANGKIYEOK - 0x97AB: 0xBFEB, //HANGUL SYLLABLE SSANGPIEUP WEO KIYEOKSIOS - 0x97AC: 0xBFEC, //HANGUL SYLLABLE SSANGPIEUP WEO NIEUN - 0x97AD: 0xBFED, //HANGUL SYLLABLE SSANGPIEUP WEO NIEUNCIEUC - 0x97AE: 0xBFEE, //HANGUL SYLLABLE SSANGPIEUP WEO NIEUNHIEUH - 0x97AF: 0xBFEF, //HANGUL SYLLABLE SSANGPIEUP WEO TIKEUT - 0x97B0: 0xBFF0, //HANGUL SYLLABLE SSANGPIEUP WEO RIEUL - 0x97B1: 0xBFF1, //HANGUL SYLLABLE SSANGPIEUP WEO RIEULKIYEOK - 0x97B2: 0xBFF2, //HANGUL SYLLABLE SSANGPIEUP WEO RIEULMIEUM - 0x97B3: 0xBFF3, //HANGUL SYLLABLE SSANGPIEUP WEO RIEULPIEUP - 0x97B4: 0xBFF4, //HANGUL SYLLABLE SSANGPIEUP WEO RIEULSIOS - 0x97B5: 0xBFF5, //HANGUL SYLLABLE SSANGPIEUP WEO RIEULTHIEUTH - 0x97B6: 0xBFF6, //HANGUL SYLLABLE SSANGPIEUP WEO RIEULPHIEUPH - 0x97B7: 0xBFF7, //HANGUL SYLLABLE SSANGPIEUP WEO RIEULHIEUH - 0x97B8: 0xBFF8, //HANGUL SYLLABLE SSANGPIEUP WEO MIEUM - 0x97B9: 0xBFF9, //HANGUL SYLLABLE SSANGPIEUP WEO PIEUP - 0x97BA: 0xBFFA, //HANGUL SYLLABLE SSANGPIEUP WEO PIEUPSIOS - 0x97BB: 0xBFFB, //HANGUL SYLLABLE SSANGPIEUP WEO SIOS - 0x97BC: 0xBFFC, //HANGUL SYLLABLE SSANGPIEUP WEO SSANGSIOS - 0x97BD: 0xBFFD, //HANGUL SYLLABLE SSANGPIEUP WEO IEUNG - 0x97BE: 0xBFFE, //HANGUL SYLLABLE SSANGPIEUP WEO CIEUC - 0x97BF: 0xBFFF, //HANGUL SYLLABLE SSANGPIEUP WEO CHIEUCH - 0x97C0: 0xC000, //HANGUL SYLLABLE SSANGPIEUP WEO KHIEUKH - 0x97C1: 0xC001, //HANGUL SYLLABLE SSANGPIEUP WEO THIEUTH - 0x97C2: 0xC002, //HANGUL SYLLABLE SSANGPIEUP WEO PHIEUPH - 0x97C3: 0xC003, //HANGUL SYLLABLE SSANGPIEUP WEO HIEUH - 0x97C4: 0xC004, //HANGUL SYLLABLE SSANGPIEUP WE - 0x97C5: 0xC005, //HANGUL SYLLABLE SSANGPIEUP WE KIYEOK - 0x97C6: 0xC006, //HANGUL SYLLABLE SSANGPIEUP WE SSANGKIYEOK - 0x97C7: 0xC007, //HANGUL SYLLABLE SSANGPIEUP WE KIYEOKSIOS - 0x97C8: 0xC008, //HANGUL SYLLABLE SSANGPIEUP WE NIEUN - 0x97C9: 0xC009, //HANGUL SYLLABLE SSANGPIEUP WE NIEUNCIEUC - 0x97CA: 0xC00A, //HANGUL SYLLABLE SSANGPIEUP WE NIEUNHIEUH - 0x97CB: 0xC00B, //HANGUL SYLLABLE SSANGPIEUP WE TIKEUT - 0x97CC: 0xC00C, //HANGUL SYLLABLE SSANGPIEUP WE RIEUL - 0x97CD: 0xC00D, //HANGUL SYLLABLE SSANGPIEUP WE RIEULKIYEOK - 0x97CE: 0xC00E, //HANGUL SYLLABLE SSANGPIEUP WE RIEULMIEUM - 0x97CF: 0xC00F, //HANGUL SYLLABLE SSANGPIEUP WE RIEULPIEUP - 0x97D0: 0xC010, //HANGUL SYLLABLE SSANGPIEUP WE RIEULSIOS - 0x97D1: 0xC011, //HANGUL SYLLABLE SSANGPIEUP WE RIEULTHIEUTH - 0x97D2: 0xC012, //HANGUL SYLLABLE SSANGPIEUP WE RIEULPHIEUPH - 0x97D3: 0xC013, //HANGUL SYLLABLE SSANGPIEUP WE RIEULHIEUH - 0x97D4: 0xC014, //HANGUL SYLLABLE SSANGPIEUP WE MIEUM - 0x97D5: 0xC015, //HANGUL SYLLABLE SSANGPIEUP WE PIEUP - 0x97D6: 0xC016, //HANGUL SYLLABLE SSANGPIEUP WE PIEUPSIOS - 0x97D7: 0xC017, //HANGUL SYLLABLE SSANGPIEUP WE SIOS - 0x97D8: 0xC018, //HANGUL SYLLABLE SSANGPIEUP WE SSANGSIOS - 0x97D9: 0xC019, //HANGUL SYLLABLE SSANGPIEUP WE IEUNG - 0x97DA: 0xC01A, //HANGUL SYLLABLE SSANGPIEUP WE CIEUC - 0x97DB: 0xC01B, //HANGUL SYLLABLE SSANGPIEUP WE CHIEUCH - 0x97DC: 0xC01C, //HANGUL SYLLABLE SSANGPIEUP WE KHIEUKH - 0x97DD: 0xC01D, //HANGUL SYLLABLE SSANGPIEUP WE THIEUTH - 0x97DE: 0xC01E, //HANGUL SYLLABLE SSANGPIEUP WE PHIEUPH - 0x97DF: 0xC01F, //HANGUL SYLLABLE SSANGPIEUP WE HIEUH - 0x97E0: 0xC020, //HANGUL SYLLABLE SSANGPIEUP WI - 0x97E1: 0xC021, //HANGUL SYLLABLE SSANGPIEUP WI KIYEOK - 0x97E2: 0xC022, //HANGUL SYLLABLE SSANGPIEUP WI SSANGKIYEOK - 0x97E3: 0xC023, //HANGUL SYLLABLE SSANGPIEUP WI KIYEOKSIOS - 0x97E4: 0xC024, //HANGUL SYLLABLE SSANGPIEUP WI NIEUN - 0x97E5: 0xC025, //HANGUL SYLLABLE SSANGPIEUP WI NIEUNCIEUC - 0x97E6: 0xC026, //HANGUL SYLLABLE SSANGPIEUP WI NIEUNHIEUH - 0x97E7: 0xC027, //HANGUL SYLLABLE SSANGPIEUP WI TIKEUT - 0x97E8: 0xC028, //HANGUL SYLLABLE SSANGPIEUP WI RIEUL - 0x97E9: 0xC029, //HANGUL SYLLABLE SSANGPIEUP WI RIEULKIYEOK - 0x97EA: 0xC02A, //HANGUL SYLLABLE SSANGPIEUP WI RIEULMIEUM - 0x97EB: 0xC02B, //HANGUL SYLLABLE SSANGPIEUP WI RIEULPIEUP - 0x97EC: 0xC02C, //HANGUL SYLLABLE SSANGPIEUP WI RIEULSIOS - 0x97ED: 0xC02D, //HANGUL SYLLABLE SSANGPIEUP WI RIEULTHIEUTH - 0x97EE: 0xC02E, //HANGUL SYLLABLE SSANGPIEUP WI RIEULPHIEUPH - 0x97EF: 0xC02F, //HANGUL SYLLABLE SSANGPIEUP WI RIEULHIEUH - 0x97F0: 0xC030, //HANGUL SYLLABLE SSANGPIEUP WI MIEUM - 0x97F1: 0xC031, //HANGUL SYLLABLE SSANGPIEUP WI PIEUP - 0x97F2: 0xC032, //HANGUL SYLLABLE SSANGPIEUP WI PIEUPSIOS - 0x97F3: 0xC033, //HANGUL SYLLABLE SSANGPIEUP WI SIOS - 0x97F4: 0xC034, //HANGUL SYLLABLE SSANGPIEUP WI SSANGSIOS - 0x97F5: 0xC035, //HANGUL SYLLABLE SSANGPIEUP WI IEUNG - 0x97F6: 0xC036, //HANGUL SYLLABLE SSANGPIEUP WI CIEUC - 0x97F7: 0xC037, //HANGUL SYLLABLE SSANGPIEUP WI CHIEUCH - 0x97F8: 0xC038, //HANGUL SYLLABLE SSANGPIEUP WI KHIEUKH - 0x97F9: 0xC039, //HANGUL SYLLABLE SSANGPIEUP WI THIEUTH - 0x97FA: 0xC03A, //HANGUL SYLLABLE SSANGPIEUP WI PHIEUPH - 0x97FB: 0xC03B, //HANGUL SYLLABLE SSANGPIEUP WI HIEUH - 0x97FC: 0xC03D, //HANGUL SYLLABLE SSANGPIEUP YU KIYEOK - 0x97FD: 0xC03E, //HANGUL SYLLABLE SSANGPIEUP YU SSANGKIYEOK - 0x97FE: 0xC03F, //HANGUL SYLLABLE SSANGPIEUP YU KIYEOKSIOS - 0x9841: 0xC040, //HANGUL SYLLABLE SSANGPIEUP YU NIEUN - 0x9842: 0xC041, //HANGUL SYLLABLE SSANGPIEUP YU NIEUNCIEUC - 0x9843: 0xC042, //HANGUL SYLLABLE SSANGPIEUP YU NIEUNHIEUH - 0x9844: 0xC043, //HANGUL SYLLABLE SSANGPIEUP YU TIKEUT - 0x9845: 0xC044, //HANGUL SYLLABLE SSANGPIEUP YU RIEUL - 0x9846: 0xC045, //HANGUL SYLLABLE SSANGPIEUP YU RIEULKIYEOK - 0x9847: 0xC046, //HANGUL SYLLABLE SSANGPIEUP YU RIEULMIEUM - 0x9848: 0xC047, //HANGUL SYLLABLE SSANGPIEUP YU RIEULPIEUP - 0x9849: 0xC048, //HANGUL SYLLABLE SSANGPIEUP YU RIEULSIOS - 0x984A: 0xC049, //HANGUL SYLLABLE SSANGPIEUP YU RIEULTHIEUTH - 0x984B: 0xC04A, //HANGUL SYLLABLE SSANGPIEUP YU RIEULPHIEUPH - 0x984C: 0xC04B, //HANGUL SYLLABLE SSANGPIEUP YU RIEULHIEUH - 0x984D: 0xC04C, //HANGUL SYLLABLE SSANGPIEUP YU MIEUM - 0x984E: 0xC04D, //HANGUL SYLLABLE SSANGPIEUP YU PIEUP - 0x984F: 0xC04E, //HANGUL SYLLABLE SSANGPIEUP YU PIEUPSIOS - 0x9850: 0xC04F, //HANGUL SYLLABLE SSANGPIEUP YU SIOS - 0x9851: 0xC050, //HANGUL SYLLABLE SSANGPIEUP YU SSANGSIOS - 0x9852: 0xC052, //HANGUL SYLLABLE SSANGPIEUP YU CIEUC - 0x9853: 0xC053, //HANGUL SYLLABLE SSANGPIEUP YU CHIEUCH - 0x9854: 0xC054, //HANGUL SYLLABLE SSANGPIEUP YU KHIEUKH - 0x9855: 0xC055, //HANGUL SYLLABLE SSANGPIEUP YU THIEUTH - 0x9856: 0xC056, //HANGUL SYLLABLE SSANGPIEUP YU PHIEUPH - 0x9857: 0xC057, //HANGUL SYLLABLE SSANGPIEUP YU HIEUH - 0x9858: 0xC059, //HANGUL SYLLABLE SSANGPIEUP EU KIYEOK - 0x9859: 0xC05A, //HANGUL SYLLABLE SSANGPIEUP EU SSANGKIYEOK - 0x985A: 0xC05B, //HANGUL SYLLABLE SSANGPIEUP EU KIYEOKSIOS - 0x9861: 0xC05D, //HANGUL SYLLABLE SSANGPIEUP EU NIEUNCIEUC - 0x9862: 0xC05E, //HANGUL SYLLABLE SSANGPIEUP EU NIEUNHIEUH - 0x9863: 0xC05F, //HANGUL SYLLABLE SSANGPIEUP EU TIKEUT - 0x9864: 0xC061, //HANGUL SYLLABLE SSANGPIEUP EU RIEULKIYEOK - 0x9865: 0xC062, //HANGUL SYLLABLE SSANGPIEUP EU RIEULMIEUM - 0x9866: 0xC063, //HANGUL SYLLABLE SSANGPIEUP EU RIEULPIEUP - 0x9867: 0xC064, //HANGUL SYLLABLE SSANGPIEUP EU RIEULSIOS - 0x9868: 0xC065, //HANGUL SYLLABLE SSANGPIEUP EU RIEULTHIEUTH - 0x9869: 0xC066, //HANGUL SYLLABLE SSANGPIEUP EU RIEULPHIEUPH - 0x986A: 0xC067, //HANGUL SYLLABLE SSANGPIEUP EU RIEULHIEUH - 0x986B: 0xC06A, //HANGUL SYLLABLE SSANGPIEUP EU PIEUPSIOS - 0x986C: 0xC06B, //HANGUL SYLLABLE SSANGPIEUP EU SIOS - 0x986D: 0xC06C, //HANGUL SYLLABLE SSANGPIEUP EU SSANGSIOS - 0x986E: 0xC06D, //HANGUL SYLLABLE SSANGPIEUP EU IEUNG - 0x986F: 0xC06E, //HANGUL SYLLABLE SSANGPIEUP EU CIEUC - 0x9870: 0xC06F, //HANGUL SYLLABLE SSANGPIEUP EU CHIEUCH - 0x9871: 0xC070, //HANGUL SYLLABLE SSANGPIEUP EU KHIEUKH - 0x9872: 0xC071, //HANGUL SYLLABLE SSANGPIEUP EU THIEUTH - 0x9873: 0xC072, //HANGUL SYLLABLE SSANGPIEUP EU PHIEUPH - 0x9874: 0xC073, //HANGUL SYLLABLE SSANGPIEUP EU HIEUH - 0x9875: 0xC074, //HANGUL SYLLABLE SSANGPIEUP YI - 0x9876: 0xC075, //HANGUL SYLLABLE SSANGPIEUP YI KIYEOK - 0x9877: 0xC076, //HANGUL SYLLABLE SSANGPIEUP YI SSANGKIYEOK - 0x9878: 0xC077, //HANGUL SYLLABLE SSANGPIEUP YI KIYEOKSIOS - 0x9879: 0xC078, //HANGUL SYLLABLE SSANGPIEUP YI NIEUN - 0x987A: 0xC079, //HANGUL SYLLABLE SSANGPIEUP YI NIEUNCIEUC - 0x9881: 0xC07A, //HANGUL SYLLABLE SSANGPIEUP YI NIEUNHIEUH - 0x9882: 0xC07B, //HANGUL SYLLABLE SSANGPIEUP YI TIKEUT - 0x9883: 0xC07C, //HANGUL SYLLABLE SSANGPIEUP YI RIEUL - 0x9884: 0xC07D, //HANGUL SYLLABLE SSANGPIEUP YI RIEULKIYEOK - 0x9885: 0xC07E, //HANGUL SYLLABLE SSANGPIEUP YI RIEULMIEUM - 0x9886: 0xC07F, //HANGUL SYLLABLE SSANGPIEUP YI RIEULPIEUP - 0x9887: 0xC080, //HANGUL SYLLABLE SSANGPIEUP YI RIEULSIOS - 0x9888: 0xC081, //HANGUL SYLLABLE SSANGPIEUP YI RIEULTHIEUTH - 0x9889: 0xC082, //HANGUL SYLLABLE SSANGPIEUP YI RIEULPHIEUPH - 0x988A: 0xC083, //HANGUL SYLLABLE SSANGPIEUP YI RIEULHIEUH - 0x988B: 0xC084, //HANGUL SYLLABLE SSANGPIEUP YI MIEUM - 0x988C: 0xC085, //HANGUL SYLLABLE SSANGPIEUP YI PIEUP - 0x988D: 0xC086, //HANGUL SYLLABLE SSANGPIEUP YI PIEUPSIOS - 0x988E: 0xC087, //HANGUL SYLLABLE SSANGPIEUP YI SIOS - 0x988F: 0xC088, //HANGUL SYLLABLE SSANGPIEUP YI SSANGSIOS - 0x9890: 0xC089, //HANGUL SYLLABLE SSANGPIEUP YI IEUNG - 0x9891: 0xC08A, //HANGUL SYLLABLE SSANGPIEUP YI CIEUC - 0x9892: 0xC08B, //HANGUL SYLLABLE SSANGPIEUP YI CHIEUCH - 0x9893: 0xC08C, //HANGUL SYLLABLE SSANGPIEUP YI KHIEUKH - 0x9894: 0xC08D, //HANGUL SYLLABLE SSANGPIEUP YI THIEUTH - 0x9895: 0xC08E, //HANGUL SYLLABLE SSANGPIEUP YI PHIEUPH - 0x9896: 0xC08F, //HANGUL SYLLABLE SSANGPIEUP YI HIEUH - 0x9897: 0xC092, //HANGUL SYLLABLE SSANGPIEUP I SSANGKIYEOK - 0x9898: 0xC093, //HANGUL SYLLABLE SSANGPIEUP I KIYEOKSIOS - 0x9899: 0xC095, //HANGUL SYLLABLE SSANGPIEUP I NIEUNCIEUC - 0x989A: 0xC096, //HANGUL SYLLABLE SSANGPIEUP I NIEUNHIEUH - 0x989B: 0xC097, //HANGUL SYLLABLE SSANGPIEUP I TIKEUT - 0x989C: 0xC099, //HANGUL SYLLABLE SSANGPIEUP I RIEULKIYEOK - 0x989D: 0xC09A, //HANGUL SYLLABLE SSANGPIEUP I RIEULMIEUM - 0x989E: 0xC09B, //HANGUL SYLLABLE SSANGPIEUP I RIEULPIEUP - 0x989F: 0xC09C, //HANGUL SYLLABLE SSANGPIEUP I RIEULSIOS - 0x98A0: 0xC09D, //HANGUL SYLLABLE SSANGPIEUP I RIEULTHIEUTH - 0x98A1: 0xC09E, //HANGUL SYLLABLE SSANGPIEUP I RIEULPHIEUPH - 0x98A2: 0xC09F, //HANGUL SYLLABLE SSANGPIEUP I RIEULHIEUH - 0x98A3: 0xC0A2, //HANGUL SYLLABLE SSANGPIEUP I PIEUPSIOS - 0x98A4: 0xC0A4, //HANGUL SYLLABLE SSANGPIEUP I SSANGSIOS - 0x98A5: 0xC0A6, //HANGUL SYLLABLE SSANGPIEUP I CIEUC - 0x98A6: 0xC0A7, //HANGUL SYLLABLE SSANGPIEUP I CHIEUCH - 0x98A7: 0xC0A8, //HANGUL SYLLABLE SSANGPIEUP I KHIEUKH - 0x98A8: 0xC0A9, //HANGUL SYLLABLE SSANGPIEUP I THIEUTH - 0x98A9: 0xC0AA, //HANGUL SYLLABLE SSANGPIEUP I PHIEUPH - 0x98AA: 0xC0AB, //HANGUL SYLLABLE SSANGPIEUP I HIEUH - 0x98AB: 0xC0AE, //HANGUL SYLLABLE SIOS A SSANGKIYEOK - 0x98AC: 0xC0B1, //HANGUL SYLLABLE SIOS A NIEUNCIEUC - 0x98AD: 0xC0B2, //HANGUL SYLLABLE SIOS A NIEUNHIEUH - 0x98AE: 0xC0B7, //HANGUL SYLLABLE SIOS A RIEULPIEUP - 0x98AF: 0xC0B8, //HANGUL SYLLABLE SIOS A RIEULSIOS - 0x98B0: 0xC0B9, //HANGUL SYLLABLE SIOS A RIEULTHIEUTH - 0x98B1: 0xC0BA, //HANGUL SYLLABLE SIOS A RIEULPHIEUPH - 0x98B2: 0xC0BB, //HANGUL SYLLABLE SIOS A RIEULHIEUH - 0x98B3: 0xC0BE, //HANGUL SYLLABLE SIOS A PIEUPSIOS - 0x98B4: 0xC0C2, //HANGUL SYLLABLE SIOS A CIEUC - 0x98B5: 0xC0C3, //HANGUL SYLLABLE SIOS A CHIEUCH - 0x98B6: 0xC0C4, //HANGUL SYLLABLE SIOS A KHIEUKH - 0x98B7: 0xC0C6, //HANGUL SYLLABLE SIOS A PHIEUPH - 0x98B8: 0xC0C7, //HANGUL SYLLABLE SIOS A HIEUH - 0x98B9: 0xC0CA, //HANGUL SYLLABLE SIOS AE SSANGKIYEOK - 0x98BA: 0xC0CB, //HANGUL SYLLABLE SIOS AE KIYEOKSIOS - 0x98BB: 0xC0CD, //HANGUL SYLLABLE SIOS AE NIEUNCIEUC - 0x98BC: 0xC0CE, //HANGUL SYLLABLE SIOS AE NIEUNHIEUH - 0x98BD: 0xC0CF, //HANGUL SYLLABLE SIOS AE TIKEUT - 0x98BE: 0xC0D1, //HANGUL SYLLABLE SIOS AE RIEULKIYEOK - 0x98BF: 0xC0D2, //HANGUL SYLLABLE SIOS AE RIEULMIEUM - 0x98C0: 0xC0D3, //HANGUL SYLLABLE SIOS AE RIEULPIEUP - 0x98C1: 0xC0D4, //HANGUL SYLLABLE SIOS AE RIEULSIOS - 0x98C2: 0xC0D5, //HANGUL SYLLABLE SIOS AE RIEULTHIEUTH - 0x98C3: 0xC0D6, //HANGUL SYLLABLE SIOS AE RIEULPHIEUPH - 0x98C4: 0xC0D7, //HANGUL SYLLABLE SIOS AE RIEULHIEUH - 0x98C5: 0xC0DA, //HANGUL SYLLABLE SIOS AE PIEUPSIOS - 0x98C6: 0xC0DE, //HANGUL SYLLABLE SIOS AE CIEUC - 0x98C7: 0xC0DF, //HANGUL SYLLABLE SIOS AE CHIEUCH - 0x98C8: 0xC0E0, //HANGUL SYLLABLE SIOS AE KHIEUKH - 0x98C9: 0xC0E1, //HANGUL SYLLABLE SIOS AE THIEUTH - 0x98CA: 0xC0E2, //HANGUL SYLLABLE SIOS AE PHIEUPH - 0x98CB: 0xC0E3, //HANGUL SYLLABLE SIOS AE HIEUH - 0x98CC: 0xC0E6, //HANGUL SYLLABLE SIOS YA SSANGKIYEOK - 0x98CD: 0xC0E7, //HANGUL SYLLABLE SIOS YA KIYEOKSIOS - 0x98CE: 0xC0E9, //HANGUL SYLLABLE SIOS YA NIEUNCIEUC - 0x98CF: 0xC0EA, //HANGUL SYLLABLE SIOS YA NIEUNHIEUH - 0x98D0: 0xC0EB, //HANGUL SYLLABLE SIOS YA TIKEUT - 0x98D1: 0xC0ED, //HANGUL SYLLABLE SIOS YA RIEULKIYEOK - 0x98D2: 0xC0EE, //HANGUL SYLLABLE SIOS YA RIEULMIEUM - 0x98D3: 0xC0EF, //HANGUL SYLLABLE SIOS YA RIEULPIEUP - 0x98D4: 0xC0F0, //HANGUL SYLLABLE SIOS YA RIEULSIOS - 0x98D5: 0xC0F1, //HANGUL SYLLABLE SIOS YA RIEULTHIEUTH - 0x98D6: 0xC0F2, //HANGUL SYLLABLE SIOS YA RIEULPHIEUPH - 0x98D7: 0xC0F3, //HANGUL SYLLABLE SIOS YA RIEULHIEUH - 0x98D8: 0xC0F6, //HANGUL SYLLABLE SIOS YA PIEUPSIOS - 0x98D9: 0xC0F8, //HANGUL SYLLABLE SIOS YA SSANGSIOS - 0x98DA: 0xC0FA, //HANGUL SYLLABLE SIOS YA CIEUC - 0x98DB: 0xC0FB, //HANGUL SYLLABLE SIOS YA CHIEUCH - 0x98DC: 0xC0FC, //HANGUL SYLLABLE SIOS YA KHIEUKH - 0x98DD: 0xC0FD, //HANGUL SYLLABLE SIOS YA THIEUTH - 0x98DE: 0xC0FE, //HANGUL SYLLABLE SIOS YA PHIEUPH - 0x98DF: 0xC0FF, //HANGUL SYLLABLE SIOS YA HIEUH - 0x98E0: 0xC101, //HANGUL SYLLABLE SIOS YAE KIYEOK - 0x98E1: 0xC102, //HANGUL SYLLABLE SIOS YAE SSANGKIYEOK - 0x98E2: 0xC103, //HANGUL SYLLABLE SIOS YAE KIYEOKSIOS - 0x98E3: 0xC105, //HANGUL SYLLABLE SIOS YAE NIEUNCIEUC - 0x98E4: 0xC106, //HANGUL SYLLABLE SIOS YAE NIEUNHIEUH - 0x98E5: 0xC107, //HANGUL SYLLABLE SIOS YAE TIKEUT - 0x98E6: 0xC109, //HANGUL SYLLABLE SIOS YAE RIEULKIYEOK - 0x98E7: 0xC10A, //HANGUL SYLLABLE SIOS YAE RIEULMIEUM - 0x98E8: 0xC10B, //HANGUL SYLLABLE SIOS YAE RIEULPIEUP - 0x98E9: 0xC10C, //HANGUL SYLLABLE SIOS YAE RIEULSIOS - 0x98EA: 0xC10D, //HANGUL SYLLABLE SIOS YAE RIEULTHIEUTH - 0x98EB: 0xC10E, //HANGUL SYLLABLE SIOS YAE RIEULPHIEUPH - 0x98EC: 0xC10F, //HANGUL SYLLABLE SIOS YAE RIEULHIEUH - 0x98ED: 0xC111, //HANGUL SYLLABLE SIOS YAE PIEUP - 0x98EE: 0xC112, //HANGUL SYLLABLE SIOS YAE PIEUPSIOS - 0x98EF: 0xC113, //HANGUL SYLLABLE SIOS YAE SIOS - 0x98F0: 0xC114, //HANGUL SYLLABLE SIOS YAE SSANGSIOS - 0x98F1: 0xC116, //HANGUL SYLLABLE SIOS YAE CIEUC - 0x98F2: 0xC117, //HANGUL SYLLABLE SIOS YAE CHIEUCH - 0x98F3: 0xC118, //HANGUL SYLLABLE SIOS YAE KHIEUKH - 0x98F4: 0xC119, //HANGUL SYLLABLE SIOS YAE THIEUTH - 0x98F5: 0xC11A, //HANGUL SYLLABLE SIOS YAE PHIEUPH - 0x98F6: 0xC11B, //HANGUL SYLLABLE SIOS YAE HIEUH - 0x98F7: 0xC121, //HANGUL SYLLABLE SIOS EO NIEUNCIEUC - 0x98F8: 0xC122, //HANGUL SYLLABLE SIOS EO NIEUNHIEUH - 0x98F9: 0xC125, //HANGUL SYLLABLE SIOS EO RIEULKIYEOK - 0x98FA: 0xC128, //HANGUL SYLLABLE SIOS EO RIEULSIOS - 0x98FB: 0xC129, //HANGUL SYLLABLE SIOS EO RIEULTHIEUTH - 0x98FC: 0xC12A, //HANGUL SYLLABLE SIOS EO RIEULPHIEUPH - 0x98FD: 0xC12B, //HANGUL SYLLABLE SIOS EO RIEULHIEUH - 0x98FE: 0xC12E, //HANGUL SYLLABLE SIOS EO PIEUPSIOS - 0x9941: 0xC132, //HANGUL SYLLABLE SIOS EO CIEUC - 0x9942: 0xC133, //HANGUL SYLLABLE SIOS EO CHIEUCH - 0x9943: 0xC134, //HANGUL SYLLABLE SIOS EO KHIEUKH - 0x9944: 0xC135, //HANGUL SYLLABLE SIOS EO THIEUTH - 0x9945: 0xC137, //HANGUL SYLLABLE SIOS EO HIEUH - 0x9946: 0xC13A, //HANGUL SYLLABLE SIOS E SSANGKIYEOK - 0x9947: 0xC13B, //HANGUL SYLLABLE SIOS E KIYEOKSIOS - 0x9948: 0xC13D, //HANGUL SYLLABLE SIOS E NIEUNCIEUC - 0x9949: 0xC13E, //HANGUL SYLLABLE SIOS E NIEUNHIEUH - 0x994A: 0xC13F, //HANGUL SYLLABLE SIOS E TIKEUT - 0x994B: 0xC141, //HANGUL SYLLABLE SIOS E RIEULKIYEOK - 0x994C: 0xC142, //HANGUL SYLLABLE SIOS E RIEULMIEUM - 0x994D: 0xC143, //HANGUL SYLLABLE SIOS E RIEULPIEUP - 0x994E: 0xC144, //HANGUL SYLLABLE SIOS E RIEULSIOS - 0x994F: 0xC145, //HANGUL SYLLABLE SIOS E RIEULTHIEUTH - 0x9950: 0xC146, //HANGUL SYLLABLE SIOS E RIEULPHIEUPH - 0x9951: 0xC147, //HANGUL SYLLABLE SIOS E RIEULHIEUH - 0x9952: 0xC14A, //HANGUL SYLLABLE SIOS E PIEUPSIOS - 0x9953: 0xC14E, //HANGUL SYLLABLE SIOS E CIEUC - 0x9954: 0xC14F, //HANGUL SYLLABLE SIOS E CHIEUCH - 0x9955: 0xC150, //HANGUL SYLLABLE SIOS E KHIEUKH - 0x9956: 0xC151, //HANGUL SYLLABLE SIOS E THIEUTH - 0x9957: 0xC152, //HANGUL SYLLABLE SIOS E PHIEUPH - 0x9958: 0xC153, //HANGUL SYLLABLE SIOS E HIEUH - 0x9959: 0xC156, //HANGUL SYLLABLE SIOS YEO SSANGKIYEOK - 0x995A: 0xC157, //HANGUL SYLLABLE SIOS YEO KIYEOKSIOS - 0x9961: 0xC159, //HANGUL SYLLABLE SIOS YEO NIEUNCIEUC - 0x9962: 0xC15A, //HANGUL SYLLABLE SIOS YEO NIEUNHIEUH - 0x9963: 0xC15B, //HANGUL SYLLABLE SIOS YEO TIKEUT - 0x9964: 0xC15D, //HANGUL SYLLABLE SIOS YEO RIEULKIYEOK - 0x9965: 0xC15E, //HANGUL SYLLABLE SIOS YEO RIEULMIEUM - 0x9966: 0xC15F, //HANGUL SYLLABLE SIOS YEO RIEULPIEUP - 0x9967: 0xC160, //HANGUL SYLLABLE SIOS YEO RIEULSIOS - 0x9968: 0xC161, //HANGUL SYLLABLE SIOS YEO RIEULTHIEUTH - 0x9969: 0xC162, //HANGUL SYLLABLE SIOS YEO RIEULPHIEUPH - 0x996A: 0xC163, //HANGUL SYLLABLE SIOS YEO RIEULHIEUH - 0x996B: 0xC166, //HANGUL SYLLABLE SIOS YEO PIEUPSIOS - 0x996C: 0xC16A, //HANGUL SYLLABLE SIOS YEO CIEUC - 0x996D: 0xC16B, //HANGUL SYLLABLE SIOS YEO CHIEUCH - 0x996E: 0xC16C, //HANGUL SYLLABLE SIOS YEO KHIEUKH - 0x996F: 0xC16D, //HANGUL SYLLABLE SIOS YEO THIEUTH - 0x9970: 0xC16E, //HANGUL SYLLABLE SIOS YEO PHIEUPH - 0x9971: 0xC16F, //HANGUL SYLLABLE SIOS YEO HIEUH - 0x9972: 0xC171, //HANGUL SYLLABLE SIOS YE KIYEOK - 0x9973: 0xC172, //HANGUL SYLLABLE SIOS YE SSANGKIYEOK - 0x9974: 0xC173, //HANGUL SYLLABLE SIOS YE KIYEOKSIOS - 0x9975: 0xC175, //HANGUL SYLLABLE SIOS YE NIEUNCIEUC - 0x9976: 0xC176, //HANGUL SYLLABLE SIOS YE NIEUNHIEUH - 0x9977: 0xC177, //HANGUL SYLLABLE SIOS YE TIKEUT - 0x9978: 0xC179, //HANGUL SYLLABLE SIOS YE RIEULKIYEOK - 0x9979: 0xC17A, //HANGUL SYLLABLE SIOS YE RIEULMIEUM - 0x997A: 0xC17B, //HANGUL SYLLABLE SIOS YE RIEULPIEUP - 0x9981: 0xC17C, //HANGUL SYLLABLE SIOS YE RIEULSIOS - 0x9982: 0xC17D, //HANGUL SYLLABLE SIOS YE RIEULTHIEUTH - 0x9983: 0xC17E, //HANGUL SYLLABLE SIOS YE RIEULPHIEUPH - 0x9984: 0xC17F, //HANGUL SYLLABLE SIOS YE RIEULHIEUH - 0x9985: 0xC180, //HANGUL SYLLABLE SIOS YE MIEUM - 0x9986: 0xC181, //HANGUL SYLLABLE SIOS YE PIEUP - 0x9987: 0xC182, //HANGUL SYLLABLE SIOS YE PIEUPSIOS - 0x9988: 0xC183, //HANGUL SYLLABLE SIOS YE SIOS - 0x9989: 0xC184, //HANGUL SYLLABLE SIOS YE SSANGSIOS - 0x998A: 0xC186, //HANGUL SYLLABLE SIOS YE CIEUC - 0x998B: 0xC187, //HANGUL SYLLABLE SIOS YE CHIEUCH - 0x998C: 0xC188, //HANGUL SYLLABLE SIOS YE KHIEUKH - 0x998D: 0xC189, //HANGUL SYLLABLE SIOS YE THIEUTH - 0x998E: 0xC18A, //HANGUL SYLLABLE SIOS YE PHIEUPH - 0x998F: 0xC18B, //HANGUL SYLLABLE SIOS YE HIEUH - 0x9990: 0xC18F, //HANGUL SYLLABLE SIOS O KIYEOKSIOS - 0x9991: 0xC191, //HANGUL SYLLABLE SIOS O NIEUNCIEUC - 0x9992: 0xC192, //HANGUL SYLLABLE SIOS O NIEUNHIEUH - 0x9993: 0xC193, //HANGUL SYLLABLE SIOS O TIKEUT - 0x9994: 0xC195, //HANGUL SYLLABLE SIOS O RIEULKIYEOK - 0x9995: 0xC197, //HANGUL SYLLABLE SIOS O RIEULPIEUP - 0x9996: 0xC198, //HANGUL SYLLABLE SIOS O RIEULSIOS - 0x9997: 0xC199, //HANGUL SYLLABLE SIOS O RIEULTHIEUTH - 0x9998: 0xC19A, //HANGUL SYLLABLE SIOS O RIEULPHIEUPH - 0x9999: 0xC19B, //HANGUL SYLLABLE SIOS O RIEULHIEUH - 0x999A: 0xC19E, //HANGUL SYLLABLE SIOS O PIEUPSIOS - 0x999B: 0xC1A0, //HANGUL SYLLABLE SIOS O SSANGSIOS - 0x999C: 0xC1A2, //HANGUL SYLLABLE SIOS O CIEUC - 0x999D: 0xC1A3, //HANGUL SYLLABLE SIOS O CHIEUCH - 0x999E: 0xC1A4, //HANGUL SYLLABLE SIOS O KHIEUKH - 0x999F: 0xC1A6, //HANGUL SYLLABLE SIOS O PHIEUPH - 0x99A0: 0xC1A7, //HANGUL SYLLABLE SIOS O HIEUH - 0x99A1: 0xC1AA, //HANGUL SYLLABLE SIOS WA SSANGKIYEOK - 0x99A2: 0xC1AB, //HANGUL SYLLABLE SIOS WA KIYEOKSIOS - 0x99A3: 0xC1AD, //HANGUL SYLLABLE SIOS WA NIEUNCIEUC - 0x99A4: 0xC1AE, //HANGUL SYLLABLE SIOS WA NIEUNHIEUH - 0x99A5: 0xC1AF, //HANGUL SYLLABLE SIOS WA TIKEUT - 0x99A6: 0xC1B1, //HANGUL SYLLABLE SIOS WA RIEULKIYEOK - 0x99A7: 0xC1B2, //HANGUL SYLLABLE SIOS WA RIEULMIEUM - 0x99A8: 0xC1B3, //HANGUL SYLLABLE SIOS WA RIEULPIEUP - 0x99A9: 0xC1B4, //HANGUL SYLLABLE SIOS WA RIEULSIOS - 0x99AA: 0xC1B5, //HANGUL SYLLABLE SIOS WA RIEULTHIEUTH - 0x99AB: 0xC1B6, //HANGUL SYLLABLE SIOS WA RIEULPHIEUPH - 0x99AC: 0xC1B7, //HANGUL SYLLABLE SIOS WA RIEULHIEUH - 0x99AD: 0xC1B8, //HANGUL SYLLABLE SIOS WA MIEUM - 0x99AE: 0xC1B9, //HANGUL SYLLABLE SIOS WA PIEUP - 0x99AF: 0xC1BA, //HANGUL SYLLABLE SIOS WA PIEUPSIOS - 0x99B0: 0xC1BB, //HANGUL SYLLABLE SIOS WA SIOS - 0x99B1: 0xC1BC, //HANGUL SYLLABLE SIOS WA SSANGSIOS - 0x99B2: 0xC1BE, //HANGUL SYLLABLE SIOS WA CIEUC - 0x99B3: 0xC1BF, //HANGUL SYLLABLE SIOS WA CHIEUCH - 0x99B4: 0xC1C0, //HANGUL SYLLABLE SIOS WA KHIEUKH - 0x99B5: 0xC1C1, //HANGUL SYLLABLE SIOS WA THIEUTH - 0x99B6: 0xC1C2, //HANGUL SYLLABLE SIOS WA PHIEUPH - 0x99B7: 0xC1C3, //HANGUL SYLLABLE SIOS WA HIEUH - 0x99B8: 0xC1C5, //HANGUL SYLLABLE SIOS WAE KIYEOK - 0x99B9: 0xC1C6, //HANGUL SYLLABLE SIOS WAE SSANGKIYEOK - 0x99BA: 0xC1C7, //HANGUL SYLLABLE SIOS WAE KIYEOKSIOS - 0x99BB: 0xC1C9, //HANGUL SYLLABLE SIOS WAE NIEUNCIEUC - 0x99BC: 0xC1CA, //HANGUL SYLLABLE SIOS WAE NIEUNHIEUH - 0x99BD: 0xC1CB, //HANGUL SYLLABLE SIOS WAE TIKEUT - 0x99BE: 0xC1CD, //HANGUL SYLLABLE SIOS WAE RIEULKIYEOK - 0x99BF: 0xC1CE, //HANGUL SYLLABLE SIOS WAE RIEULMIEUM - 0x99C0: 0xC1CF, //HANGUL SYLLABLE SIOS WAE RIEULPIEUP - 0x99C1: 0xC1D0, //HANGUL SYLLABLE SIOS WAE RIEULSIOS - 0x99C2: 0xC1D1, //HANGUL SYLLABLE SIOS WAE RIEULTHIEUTH - 0x99C3: 0xC1D2, //HANGUL SYLLABLE SIOS WAE RIEULPHIEUPH - 0x99C4: 0xC1D3, //HANGUL SYLLABLE SIOS WAE RIEULHIEUH - 0x99C5: 0xC1D5, //HANGUL SYLLABLE SIOS WAE PIEUP - 0x99C6: 0xC1D6, //HANGUL SYLLABLE SIOS WAE PIEUPSIOS - 0x99C7: 0xC1D9, //HANGUL SYLLABLE SIOS WAE IEUNG - 0x99C8: 0xC1DA, //HANGUL SYLLABLE SIOS WAE CIEUC - 0x99C9: 0xC1DB, //HANGUL SYLLABLE SIOS WAE CHIEUCH - 0x99CA: 0xC1DC, //HANGUL SYLLABLE SIOS WAE KHIEUKH - 0x99CB: 0xC1DD, //HANGUL SYLLABLE SIOS WAE THIEUTH - 0x99CC: 0xC1DE, //HANGUL SYLLABLE SIOS WAE PHIEUPH - 0x99CD: 0xC1DF, //HANGUL SYLLABLE SIOS WAE HIEUH - 0x99CE: 0xC1E1, //HANGUL SYLLABLE SIOS OE KIYEOK - 0x99CF: 0xC1E2, //HANGUL SYLLABLE SIOS OE SSANGKIYEOK - 0x99D0: 0xC1E3, //HANGUL SYLLABLE SIOS OE KIYEOKSIOS - 0x99D1: 0xC1E5, //HANGUL SYLLABLE SIOS OE NIEUNCIEUC - 0x99D2: 0xC1E6, //HANGUL SYLLABLE SIOS OE NIEUNHIEUH - 0x99D3: 0xC1E7, //HANGUL SYLLABLE SIOS OE TIKEUT - 0x99D4: 0xC1E9, //HANGUL SYLLABLE SIOS OE RIEULKIYEOK - 0x99D5: 0xC1EA, //HANGUL SYLLABLE SIOS OE RIEULMIEUM - 0x99D6: 0xC1EB, //HANGUL SYLLABLE SIOS OE RIEULPIEUP - 0x99D7: 0xC1EC, //HANGUL SYLLABLE SIOS OE RIEULSIOS - 0x99D8: 0xC1ED, //HANGUL SYLLABLE SIOS OE RIEULTHIEUTH - 0x99D9: 0xC1EE, //HANGUL SYLLABLE SIOS OE RIEULPHIEUPH - 0x99DA: 0xC1EF, //HANGUL SYLLABLE SIOS OE RIEULHIEUH - 0x99DB: 0xC1F2, //HANGUL SYLLABLE SIOS OE PIEUPSIOS - 0x99DC: 0xC1F4, //HANGUL SYLLABLE SIOS OE SSANGSIOS - 0x99DD: 0xC1F5, //HANGUL SYLLABLE SIOS OE IEUNG - 0x99DE: 0xC1F6, //HANGUL SYLLABLE SIOS OE CIEUC - 0x99DF: 0xC1F7, //HANGUL SYLLABLE SIOS OE CHIEUCH - 0x99E0: 0xC1F8, //HANGUL SYLLABLE SIOS OE KHIEUKH - 0x99E1: 0xC1F9, //HANGUL SYLLABLE SIOS OE THIEUTH - 0x99E2: 0xC1FA, //HANGUL SYLLABLE SIOS OE PHIEUPH - 0x99E3: 0xC1FB, //HANGUL SYLLABLE SIOS OE HIEUH - 0x99E4: 0xC1FE, //HANGUL SYLLABLE SIOS YO SSANGKIYEOK - 0x99E5: 0xC1FF, //HANGUL SYLLABLE SIOS YO KIYEOKSIOS - 0x99E6: 0xC201, //HANGUL SYLLABLE SIOS YO NIEUNCIEUC - 0x99E7: 0xC202, //HANGUL SYLLABLE SIOS YO NIEUNHIEUH - 0x99E8: 0xC203, //HANGUL SYLLABLE SIOS YO TIKEUT - 0x99E9: 0xC205, //HANGUL SYLLABLE SIOS YO RIEULKIYEOK - 0x99EA: 0xC206, //HANGUL SYLLABLE SIOS YO RIEULMIEUM - 0x99EB: 0xC207, //HANGUL SYLLABLE SIOS YO RIEULPIEUP - 0x99EC: 0xC208, //HANGUL SYLLABLE SIOS YO RIEULSIOS - 0x99ED: 0xC209, //HANGUL SYLLABLE SIOS YO RIEULTHIEUTH - 0x99EE: 0xC20A, //HANGUL SYLLABLE SIOS YO RIEULPHIEUPH - 0x99EF: 0xC20B, //HANGUL SYLLABLE SIOS YO RIEULHIEUH - 0x99F0: 0xC20E, //HANGUL SYLLABLE SIOS YO PIEUPSIOS - 0x99F1: 0xC210, //HANGUL SYLLABLE SIOS YO SSANGSIOS - 0x99F2: 0xC212, //HANGUL SYLLABLE SIOS YO CIEUC - 0x99F3: 0xC213, //HANGUL SYLLABLE SIOS YO CHIEUCH - 0x99F4: 0xC214, //HANGUL SYLLABLE SIOS YO KHIEUKH - 0x99F5: 0xC215, //HANGUL SYLLABLE SIOS YO THIEUTH - 0x99F6: 0xC216, //HANGUL SYLLABLE SIOS YO PHIEUPH - 0x99F7: 0xC217, //HANGUL SYLLABLE SIOS YO HIEUH - 0x99F8: 0xC21A, //HANGUL SYLLABLE SIOS U SSANGKIYEOK - 0x99F9: 0xC21B, //HANGUL SYLLABLE SIOS U KIYEOKSIOS - 0x99FA: 0xC21D, //HANGUL SYLLABLE SIOS U NIEUNCIEUC - 0x99FB: 0xC21E, //HANGUL SYLLABLE SIOS U NIEUNHIEUH - 0x99FC: 0xC221, //HANGUL SYLLABLE SIOS U RIEULKIYEOK - 0x99FD: 0xC222, //HANGUL SYLLABLE SIOS U RIEULMIEUM - 0x99FE: 0xC223, //HANGUL SYLLABLE SIOS U RIEULPIEUP - 0x9A41: 0xC224, //HANGUL SYLLABLE SIOS U RIEULSIOS - 0x9A42: 0xC225, //HANGUL SYLLABLE SIOS U RIEULTHIEUTH - 0x9A43: 0xC226, //HANGUL SYLLABLE SIOS U RIEULPHIEUPH - 0x9A44: 0xC227, //HANGUL SYLLABLE SIOS U RIEULHIEUH - 0x9A45: 0xC22A, //HANGUL SYLLABLE SIOS U PIEUPSIOS - 0x9A46: 0xC22C, //HANGUL SYLLABLE SIOS U SSANGSIOS - 0x9A47: 0xC22E, //HANGUL SYLLABLE SIOS U CIEUC - 0x9A48: 0xC230, //HANGUL SYLLABLE SIOS U KHIEUKH - 0x9A49: 0xC233, //HANGUL SYLLABLE SIOS U HIEUH - 0x9A4A: 0xC235, //HANGUL SYLLABLE SIOS WEO KIYEOK - 0x9A4B: 0xC236, //HANGUL SYLLABLE SIOS WEO SSANGKIYEOK - 0x9A4C: 0xC237, //HANGUL SYLLABLE SIOS WEO KIYEOKSIOS - 0x9A4D: 0xC238, //HANGUL SYLLABLE SIOS WEO NIEUN - 0x9A4E: 0xC239, //HANGUL SYLLABLE SIOS WEO NIEUNCIEUC - 0x9A4F: 0xC23A, //HANGUL SYLLABLE SIOS WEO NIEUNHIEUH - 0x9A50: 0xC23B, //HANGUL SYLLABLE SIOS WEO TIKEUT - 0x9A51: 0xC23C, //HANGUL SYLLABLE SIOS WEO RIEUL - 0x9A52: 0xC23D, //HANGUL SYLLABLE SIOS WEO RIEULKIYEOK - 0x9A53: 0xC23E, //HANGUL SYLLABLE SIOS WEO RIEULMIEUM - 0x9A54: 0xC23F, //HANGUL SYLLABLE SIOS WEO RIEULPIEUP - 0x9A55: 0xC240, //HANGUL SYLLABLE SIOS WEO RIEULSIOS - 0x9A56: 0xC241, //HANGUL SYLLABLE SIOS WEO RIEULTHIEUTH - 0x9A57: 0xC242, //HANGUL SYLLABLE SIOS WEO RIEULPHIEUPH - 0x9A58: 0xC243, //HANGUL SYLLABLE SIOS WEO RIEULHIEUH - 0x9A59: 0xC244, //HANGUL SYLLABLE SIOS WEO MIEUM - 0x9A5A: 0xC245, //HANGUL SYLLABLE SIOS WEO PIEUP - 0x9A61: 0xC246, //HANGUL SYLLABLE SIOS WEO PIEUPSIOS - 0x9A62: 0xC247, //HANGUL SYLLABLE SIOS WEO SIOS - 0x9A63: 0xC249, //HANGUL SYLLABLE SIOS WEO IEUNG - 0x9A64: 0xC24A, //HANGUL SYLLABLE SIOS WEO CIEUC - 0x9A65: 0xC24B, //HANGUL SYLLABLE SIOS WEO CHIEUCH - 0x9A66: 0xC24C, //HANGUL SYLLABLE SIOS WEO KHIEUKH - 0x9A67: 0xC24D, //HANGUL SYLLABLE SIOS WEO THIEUTH - 0x9A68: 0xC24E, //HANGUL SYLLABLE SIOS WEO PHIEUPH - 0x9A69: 0xC24F, //HANGUL SYLLABLE SIOS WEO HIEUH - 0x9A6A: 0xC252, //HANGUL SYLLABLE SIOS WE SSANGKIYEOK - 0x9A6B: 0xC253, //HANGUL SYLLABLE SIOS WE KIYEOKSIOS - 0x9A6C: 0xC255, //HANGUL SYLLABLE SIOS WE NIEUNCIEUC - 0x9A6D: 0xC256, //HANGUL SYLLABLE SIOS WE NIEUNHIEUH - 0x9A6E: 0xC257, //HANGUL SYLLABLE SIOS WE TIKEUT - 0x9A6F: 0xC259, //HANGUL SYLLABLE SIOS WE RIEULKIYEOK - 0x9A70: 0xC25A, //HANGUL SYLLABLE SIOS WE RIEULMIEUM - 0x9A71: 0xC25B, //HANGUL SYLLABLE SIOS WE RIEULPIEUP - 0x9A72: 0xC25C, //HANGUL SYLLABLE SIOS WE RIEULSIOS - 0x9A73: 0xC25D, //HANGUL SYLLABLE SIOS WE RIEULTHIEUTH - 0x9A74: 0xC25E, //HANGUL SYLLABLE SIOS WE RIEULPHIEUPH - 0x9A75: 0xC25F, //HANGUL SYLLABLE SIOS WE RIEULHIEUH - 0x9A76: 0xC261, //HANGUL SYLLABLE SIOS WE PIEUP - 0x9A77: 0xC262, //HANGUL SYLLABLE SIOS WE PIEUPSIOS - 0x9A78: 0xC263, //HANGUL SYLLABLE SIOS WE SIOS - 0x9A79: 0xC264, //HANGUL SYLLABLE SIOS WE SSANGSIOS - 0x9A7A: 0xC266, //HANGUL SYLLABLE SIOS WE CIEUC - 0x9A81: 0xC267, //HANGUL SYLLABLE SIOS WE CHIEUCH - 0x9A82: 0xC268, //HANGUL SYLLABLE SIOS WE KHIEUKH - 0x9A83: 0xC269, //HANGUL SYLLABLE SIOS WE THIEUTH - 0x9A84: 0xC26A, //HANGUL SYLLABLE SIOS WE PHIEUPH - 0x9A85: 0xC26B, //HANGUL SYLLABLE SIOS WE HIEUH - 0x9A86: 0xC26E, //HANGUL SYLLABLE SIOS WI SSANGKIYEOK - 0x9A87: 0xC26F, //HANGUL SYLLABLE SIOS WI KIYEOKSIOS - 0x9A88: 0xC271, //HANGUL SYLLABLE SIOS WI NIEUNCIEUC - 0x9A89: 0xC272, //HANGUL SYLLABLE SIOS WI NIEUNHIEUH - 0x9A8A: 0xC273, //HANGUL SYLLABLE SIOS WI TIKEUT - 0x9A8B: 0xC275, //HANGUL SYLLABLE SIOS WI RIEULKIYEOK - 0x9A8C: 0xC276, //HANGUL SYLLABLE SIOS WI RIEULMIEUM - 0x9A8D: 0xC277, //HANGUL SYLLABLE SIOS WI RIEULPIEUP - 0x9A8E: 0xC278, //HANGUL SYLLABLE SIOS WI RIEULSIOS - 0x9A8F: 0xC279, //HANGUL SYLLABLE SIOS WI RIEULTHIEUTH - 0x9A90: 0xC27A, //HANGUL SYLLABLE SIOS WI RIEULPHIEUPH - 0x9A91: 0xC27B, //HANGUL SYLLABLE SIOS WI RIEULHIEUH - 0x9A92: 0xC27E, //HANGUL SYLLABLE SIOS WI PIEUPSIOS - 0x9A93: 0xC280, //HANGUL SYLLABLE SIOS WI SSANGSIOS - 0x9A94: 0xC282, //HANGUL SYLLABLE SIOS WI CIEUC - 0x9A95: 0xC283, //HANGUL SYLLABLE SIOS WI CHIEUCH - 0x9A96: 0xC284, //HANGUL SYLLABLE SIOS WI KHIEUKH - 0x9A97: 0xC285, //HANGUL SYLLABLE SIOS WI THIEUTH - 0x9A98: 0xC286, //HANGUL SYLLABLE SIOS WI PHIEUPH - 0x9A99: 0xC287, //HANGUL SYLLABLE SIOS WI HIEUH - 0x9A9A: 0xC28A, //HANGUL SYLLABLE SIOS YU SSANGKIYEOK - 0x9A9B: 0xC28B, //HANGUL SYLLABLE SIOS YU KIYEOKSIOS - 0x9A9C: 0xC28C, //HANGUL SYLLABLE SIOS YU NIEUN - 0x9A9D: 0xC28D, //HANGUL SYLLABLE SIOS YU NIEUNCIEUC - 0x9A9E: 0xC28E, //HANGUL SYLLABLE SIOS YU NIEUNHIEUH - 0x9A9F: 0xC28F, //HANGUL SYLLABLE SIOS YU TIKEUT - 0x9AA0: 0xC291, //HANGUL SYLLABLE SIOS YU RIEULKIYEOK - 0x9AA1: 0xC292, //HANGUL SYLLABLE SIOS YU RIEULMIEUM - 0x9AA2: 0xC293, //HANGUL SYLLABLE SIOS YU RIEULPIEUP - 0x9AA3: 0xC294, //HANGUL SYLLABLE SIOS YU RIEULSIOS - 0x9AA4: 0xC295, //HANGUL SYLLABLE SIOS YU RIEULTHIEUTH - 0x9AA5: 0xC296, //HANGUL SYLLABLE SIOS YU RIEULPHIEUPH - 0x9AA6: 0xC297, //HANGUL SYLLABLE SIOS YU RIEULHIEUH - 0x9AA7: 0xC299, //HANGUL SYLLABLE SIOS YU PIEUP - 0x9AA8: 0xC29A, //HANGUL SYLLABLE SIOS YU PIEUPSIOS - 0x9AA9: 0xC29C, //HANGUL SYLLABLE SIOS YU SSANGSIOS - 0x9AAA: 0xC29E, //HANGUL SYLLABLE SIOS YU CIEUC - 0x9AAB: 0xC29F, //HANGUL SYLLABLE SIOS YU CHIEUCH - 0x9AAC: 0xC2A0, //HANGUL SYLLABLE SIOS YU KHIEUKH - 0x9AAD: 0xC2A1, //HANGUL SYLLABLE SIOS YU THIEUTH - 0x9AAE: 0xC2A2, //HANGUL SYLLABLE SIOS YU PHIEUPH - 0x9AAF: 0xC2A3, //HANGUL SYLLABLE SIOS YU HIEUH - 0x9AB0: 0xC2A6, //HANGUL SYLLABLE SIOS EU SSANGKIYEOK - 0x9AB1: 0xC2A7, //HANGUL SYLLABLE SIOS EU KIYEOKSIOS - 0x9AB2: 0xC2A9, //HANGUL SYLLABLE SIOS EU NIEUNCIEUC - 0x9AB3: 0xC2AA, //HANGUL SYLLABLE SIOS EU NIEUNHIEUH - 0x9AB4: 0xC2AB, //HANGUL SYLLABLE SIOS EU TIKEUT - 0x9AB5: 0xC2AE, //HANGUL SYLLABLE SIOS EU RIEULMIEUM - 0x9AB6: 0xC2AF, //HANGUL SYLLABLE SIOS EU RIEULPIEUP - 0x9AB7: 0xC2B0, //HANGUL SYLLABLE SIOS EU RIEULSIOS - 0x9AB8: 0xC2B1, //HANGUL SYLLABLE SIOS EU RIEULTHIEUTH - 0x9AB9: 0xC2B2, //HANGUL SYLLABLE SIOS EU RIEULPHIEUPH - 0x9ABA: 0xC2B3, //HANGUL SYLLABLE SIOS EU RIEULHIEUH - 0x9ABB: 0xC2B6, //HANGUL SYLLABLE SIOS EU PIEUPSIOS - 0x9ABC: 0xC2B8, //HANGUL SYLLABLE SIOS EU SSANGSIOS - 0x9ABD: 0xC2BA, //HANGUL SYLLABLE SIOS EU CIEUC - 0x9ABE: 0xC2BB, //HANGUL SYLLABLE SIOS EU CHIEUCH - 0x9ABF: 0xC2BC, //HANGUL SYLLABLE SIOS EU KHIEUKH - 0x9AC0: 0xC2BD, //HANGUL SYLLABLE SIOS EU THIEUTH - 0x9AC1: 0xC2BE, //HANGUL SYLLABLE SIOS EU PHIEUPH - 0x9AC2: 0xC2BF, //HANGUL SYLLABLE SIOS EU HIEUH - 0x9AC3: 0xC2C0, //HANGUL SYLLABLE SIOS YI - 0x9AC4: 0xC2C1, //HANGUL SYLLABLE SIOS YI KIYEOK - 0x9AC5: 0xC2C2, //HANGUL SYLLABLE SIOS YI SSANGKIYEOK - 0x9AC6: 0xC2C3, //HANGUL SYLLABLE SIOS YI KIYEOKSIOS - 0x9AC7: 0xC2C4, //HANGUL SYLLABLE SIOS YI NIEUN - 0x9AC8: 0xC2C5, //HANGUL SYLLABLE SIOS YI NIEUNCIEUC - 0x9AC9: 0xC2C6, //HANGUL SYLLABLE SIOS YI NIEUNHIEUH - 0x9ACA: 0xC2C7, //HANGUL SYLLABLE SIOS YI TIKEUT - 0x9ACB: 0xC2C8, //HANGUL SYLLABLE SIOS YI RIEUL - 0x9ACC: 0xC2C9, //HANGUL SYLLABLE SIOS YI RIEULKIYEOK - 0x9ACD: 0xC2CA, //HANGUL SYLLABLE SIOS YI RIEULMIEUM - 0x9ACE: 0xC2CB, //HANGUL SYLLABLE SIOS YI RIEULPIEUP - 0x9ACF: 0xC2CC, //HANGUL SYLLABLE SIOS YI RIEULSIOS - 0x9AD0: 0xC2CD, //HANGUL SYLLABLE SIOS YI RIEULTHIEUTH - 0x9AD1: 0xC2CE, //HANGUL SYLLABLE SIOS YI RIEULPHIEUPH - 0x9AD2: 0xC2CF, //HANGUL SYLLABLE SIOS YI RIEULHIEUH - 0x9AD3: 0xC2D0, //HANGUL SYLLABLE SIOS YI MIEUM - 0x9AD4: 0xC2D1, //HANGUL SYLLABLE SIOS YI PIEUP - 0x9AD5: 0xC2D2, //HANGUL SYLLABLE SIOS YI PIEUPSIOS - 0x9AD6: 0xC2D3, //HANGUL SYLLABLE SIOS YI SIOS - 0x9AD7: 0xC2D4, //HANGUL SYLLABLE SIOS YI SSANGSIOS - 0x9AD8: 0xC2D5, //HANGUL SYLLABLE SIOS YI IEUNG - 0x9AD9: 0xC2D6, //HANGUL SYLLABLE SIOS YI CIEUC - 0x9ADA: 0xC2D7, //HANGUL SYLLABLE SIOS YI CHIEUCH - 0x9ADB: 0xC2D8, //HANGUL SYLLABLE SIOS YI KHIEUKH - 0x9ADC: 0xC2D9, //HANGUL SYLLABLE SIOS YI THIEUTH - 0x9ADD: 0xC2DA, //HANGUL SYLLABLE SIOS YI PHIEUPH - 0x9ADE: 0xC2DB, //HANGUL SYLLABLE SIOS YI HIEUH - 0x9ADF: 0xC2DE, //HANGUL SYLLABLE SIOS I SSANGKIYEOK - 0x9AE0: 0xC2DF, //HANGUL SYLLABLE SIOS I KIYEOKSIOS - 0x9AE1: 0xC2E1, //HANGUL SYLLABLE SIOS I NIEUNCIEUC - 0x9AE2: 0xC2E2, //HANGUL SYLLABLE SIOS I NIEUNHIEUH - 0x9AE3: 0xC2E5, //HANGUL SYLLABLE SIOS I RIEULKIYEOK - 0x9AE4: 0xC2E6, //HANGUL SYLLABLE SIOS I RIEULMIEUM - 0x9AE5: 0xC2E7, //HANGUL SYLLABLE SIOS I RIEULPIEUP - 0x9AE6: 0xC2E8, //HANGUL SYLLABLE SIOS I RIEULSIOS - 0x9AE7: 0xC2E9, //HANGUL SYLLABLE SIOS I RIEULTHIEUTH - 0x9AE8: 0xC2EA, //HANGUL SYLLABLE SIOS I RIEULPHIEUPH - 0x9AE9: 0xC2EE, //HANGUL SYLLABLE SIOS I PIEUPSIOS - 0x9AEA: 0xC2F0, //HANGUL SYLLABLE SIOS I SSANGSIOS - 0x9AEB: 0xC2F2, //HANGUL SYLLABLE SIOS I CIEUC - 0x9AEC: 0xC2F3, //HANGUL SYLLABLE SIOS I CHIEUCH - 0x9AED: 0xC2F4, //HANGUL SYLLABLE SIOS I KHIEUKH - 0x9AEE: 0xC2F5, //HANGUL SYLLABLE SIOS I THIEUTH - 0x9AEF: 0xC2F7, //HANGUL SYLLABLE SIOS I HIEUH - 0x9AF0: 0xC2FA, //HANGUL SYLLABLE SSANGSIOS A SSANGKIYEOK - 0x9AF1: 0xC2FD, //HANGUL SYLLABLE SSANGSIOS A NIEUNCIEUC - 0x9AF2: 0xC2FE, //HANGUL SYLLABLE SSANGSIOS A NIEUNHIEUH - 0x9AF3: 0xC2FF, //HANGUL SYLLABLE SSANGSIOS A TIKEUT - 0x9AF4: 0xC301, //HANGUL SYLLABLE SSANGSIOS A RIEULKIYEOK - 0x9AF5: 0xC302, //HANGUL SYLLABLE SSANGSIOS A RIEULMIEUM - 0x9AF6: 0xC303, //HANGUL SYLLABLE SSANGSIOS A RIEULPIEUP - 0x9AF7: 0xC304, //HANGUL SYLLABLE SSANGSIOS A RIEULSIOS - 0x9AF8: 0xC305, //HANGUL SYLLABLE SSANGSIOS A RIEULTHIEUTH - 0x9AF9: 0xC306, //HANGUL SYLLABLE SSANGSIOS A RIEULPHIEUPH - 0x9AFA: 0xC307, //HANGUL SYLLABLE SSANGSIOS A RIEULHIEUH - 0x9AFB: 0xC30A, //HANGUL SYLLABLE SSANGSIOS A PIEUPSIOS - 0x9AFC: 0xC30B, //HANGUL SYLLABLE SSANGSIOS A SIOS - 0x9AFD: 0xC30E, //HANGUL SYLLABLE SSANGSIOS A CIEUC - 0x9AFE: 0xC30F, //HANGUL SYLLABLE SSANGSIOS A CHIEUCH - 0x9B41: 0xC310, //HANGUL SYLLABLE SSANGSIOS A KHIEUKH - 0x9B42: 0xC311, //HANGUL SYLLABLE SSANGSIOS A THIEUTH - 0x9B43: 0xC312, //HANGUL SYLLABLE SSANGSIOS A PHIEUPH - 0x9B44: 0xC316, //HANGUL SYLLABLE SSANGSIOS AE SSANGKIYEOK - 0x9B45: 0xC317, //HANGUL SYLLABLE SSANGSIOS AE KIYEOKSIOS - 0x9B46: 0xC319, //HANGUL SYLLABLE SSANGSIOS AE NIEUNCIEUC - 0x9B47: 0xC31A, //HANGUL SYLLABLE SSANGSIOS AE NIEUNHIEUH - 0x9B48: 0xC31B, //HANGUL SYLLABLE SSANGSIOS AE TIKEUT - 0x9B49: 0xC31D, //HANGUL SYLLABLE SSANGSIOS AE RIEULKIYEOK - 0x9B4A: 0xC31E, //HANGUL SYLLABLE SSANGSIOS AE RIEULMIEUM - 0x9B4B: 0xC31F, //HANGUL SYLLABLE SSANGSIOS AE RIEULPIEUP - 0x9B4C: 0xC320, //HANGUL SYLLABLE SSANGSIOS AE RIEULSIOS - 0x9B4D: 0xC321, //HANGUL SYLLABLE SSANGSIOS AE RIEULTHIEUTH - 0x9B4E: 0xC322, //HANGUL SYLLABLE SSANGSIOS AE RIEULPHIEUPH - 0x9B4F: 0xC323, //HANGUL SYLLABLE SSANGSIOS AE RIEULHIEUH - 0x9B50: 0xC326, //HANGUL SYLLABLE SSANGSIOS AE PIEUPSIOS - 0x9B51: 0xC327, //HANGUL SYLLABLE SSANGSIOS AE SIOS - 0x9B52: 0xC32A, //HANGUL SYLLABLE SSANGSIOS AE CIEUC - 0x9B53: 0xC32B, //HANGUL SYLLABLE SSANGSIOS AE CHIEUCH - 0x9B54: 0xC32C, //HANGUL SYLLABLE SSANGSIOS AE KHIEUKH - 0x9B55: 0xC32D, //HANGUL SYLLABLE SSANGSIOS AE THIEUTH - 0x9B56: 0xC32E, //HANGUL SYLLABLE SSANGSIOS AE PHIEUPH - 0x9B57: 0xC32F, //HANGUL SYLLABLE SSANGSIOS AE HIEUH - 0x9B58: 0xC330, //HANGUL SYLLABLE SSANGSIOS YA - 0x9B59: 0xC331, //HANGUL SYLLABLE SSANGSIOS YA KIYEOK - 0x9B5A: 0xC332, //HANGUL SYLLABLE SSANGSIOS YA SSANGKIYEOK - 0x9B61: 0xC333, //HANGUL SYLLABLE SSANGSIOS YA KIYEOKSIOS - 0x9B62: 0xC334, //HANGUL SYLLABLE SSANGSIOS YA NIEUN - 0x9B63: 0xC335, //HANGUL SYLLABLE SSANGSIOS YA NIEUNCIEUC - 0x9B64: 0xC336, //HANGUL SYLLABLE SSANGSIOS YA NIEUNHIEUH - 0x9B65: 0xC337, //HANGUL SYLLABLE SSANGSIOS YA TIKEUT - 0x9B66: 0xC338, //HANGUL SYLLABLE SSANGSIOS YA RIEUL - 0x9B67: 0xC339, //HANGUL SYLLABLE SSANGSIOS YA RIEULKIYEOK - 0x9B68: 0xC33A, //HANGUL SYLLABLE SSANGSIOS YA RIEULMIEUM - 0x9B69: 0xC33B, //HANGUL SYLLABLE SSANGSIOS YA RIEULPIEUP - 0x9B6A: 0xC33C, //HANGUL SYLLABLE SSANGSIOS YA RIEULSIOS - 0x9B6B: 0xC33D, //HANGUL SYLLABLE SSANGSIOS YA RIEULTHIEUTH - 0x9B6C: 0xC33E, //HANGUL SYLLABLE SSANGSIOS YA RIEULPHIEUPH - 0x9B6D: 0xC33F, //HANGUL SYLLABLE SSANGSIOS YA RIEULHIEUH - 0x9B6E: 0xC340, //HANGUL SYLLABLE SSANGSIOS YA MIEUM - 0x9B6F: 0xC341, //HANGUL SYLLABLE SSANGSIOS YA PIEUP - 0x9B70: 0xC342, //HANGUL SYLLABLE SSANGSIOS YA PIEUPSIOS - 0x9B71: 0xC343, //HANGUL SYLLABLE SSANGSIOS YA SIOS - 0x9B72: 0xC344, //HANGUL SYLLABLE SSANGSIOS YA SSANGSIOS - 0x9B73: 0xC346, //HANGUL SYLLABLE SSANGSIOS YA CIEUC - 0x9B74: 0xC347, //HANGUL SYLLABLE SSANGSIOS YA CHIEUCH - 0x9B75: 0xC348, //HANGUL SYLLABLE SSANGSIOS YA KHIEUKH - 0x9B76: 0xC349, //HANGUL SYLLABLE SSANGSIOS YA THIEUTH - 0x9B77: 0xC34A, //HANGUL SYLLABLE SSANGSIOS YA PHIEUPH - 0x9B78: 0xC34B, //HANGUL SYLLABLE SSANGSIOS YA HIEUH - 0x9B79: 0xC34C, //HANGUL SYLLABLE SSANGSIOS YAE - 0x9B7A: 0xC34D, //HANGUL SYLLABLE SSANGSIOS YAE KIYEOK - 0x9B81: 0xC34E, //HANGUL SYLLABLE SSANGSIOS YAE SSANGKIYEOK - 0x9B82: 0xC34F, //HANGUL SYLLABLE SSANGSIOS YAE KIYEOKSIOS - 0x9B83: 0xC350, //HANGUL SYLLABLE SSANGSIOS YAE NIEUN - 0x9B84: 0xC351, //HANGUL SYLLABLE SSANGSIOS YAE NIEUNCIEUC - 0x9B85: 0xC352, //HANGUL SYLLABLE SSANGSIOS YAE NIEUNHIEUH - 0x9B86: 0xC353, //HANGUL SYLLABLE SSANGSIOS YAE TIKEUT - 0x9B87: 0xC354, //HANGUL SYLLABLE SSANGSIOS YAE RIEUL - 0x9B88: 0xC355, //HANGUL SYLLABLE SSANGSIOS YAE RIEULKIYEOK - 0x9B89: 0xC356, //HANGUL SYLLABLE SSANGSIOS YAE RIEULMIEUM - 0x9B8A: 0xC357, //HANGUL SYLLABLE SSANGSIOS YAE RIEULPIEUP - 0x9B8B: 0xC358, //HANGUL SYLLABLE SSANGSIOS YAE RIEULSIOS - 0x9B8C: 0xC359, //HANGUL SYLLABLE SSANGSIOS YAE RIEULTHIEUTH - 0x9B8D: 0xC35A, //HANGUL SYLLABLE SSANGSIOS YAE RIEULPHIEUPH - 0x9B8E: 0xC35B, //HANGUL SYLLABLE SSANGSIOS YAE RIEULHIEUH - 0x9B8F: 0xC35C, //HANGUL SYLLABLE SSANGSIOS YAE MIEUM - 0x9B90: 0xC35D, //HANGUL SYLLABLE SSANGSIOS YAE PIEUP - 0x9B91: 0xC35E, //HANGUL SYLLABLE SSANGSIOS YAE PIEUPSIOS - 0x9B92: 0xC35F, //HANGUL SYLLABLE SSANGSIOS YAE SIOS - 0x9B93: 0xC360, //HANGUL SYLLABLE SSANGSIOS YAE SSANGSIOS - 0x9B94: 0xC361, //HANGUL SYLLABLE SSANGSIOS YAE IEUNG - 0x9B95: 0xC362, //HANGUL SYLLABLE SSANGSIOS YAE CIEUC - 0x9B96: 0xC363, //HANGUL SYLLABLE SSANGSIOS YAE CHIEUCH - 0x9B97: 0xC364, //HANGUL SYLLABLE SSANGSIOS YAE KHIEUKH - 0x9B98: 0xC365, //HANGUL SYLLABLE SSANGSIOS YAE THIEUTH - 0x9B99: 0xC366, //HANGUL SYLLABLE SSANGSIOS YAE PHIEUPH - 0x9B9A: 0xC367, //HANGUL SYLLABLE SSANGSIOS YAE HIEUH - 0x9B9B: 0xC36A, //HANGUL SYLLABLE SSANGSIOS EO SSANGKIYEOK - 0x9B9C: 0xC36B, //HANGUL SYLLABLE SSANGSIOS EO KIYEOKSIOS - 0x9B9D: 0xC36D, //HANGUL SYLLABLE SSANGSIOS EO NIEUNCIEUC - 0x9B9E: 0xC36E, //HANGUL SYLLABLE SSANGSIOS EO NIEUNHIEUH - 0x9B9F: 0xC36F, //HANGUL SYLLABLE SSANGSIOS EO TIKEUT - 0x9BA0: 0xC371, //HANGUL SYLLABLE SSANGSIOS EO RIEULKIYEOK - 0x9BA1: 0xC373, //HANGUL SYLLABLE SSANGSIOS EO RIEULPIEUP - 0x9BA2: 0xC374, //HANGUL SYLLABLE SSANGSIOS EO RIEULSIOS - 0x9BA3: 0xC375, //HANGUL SYLLABLE SSANGSIOS EO RIEULTHIEUTH - 0x9BA4: 0xC376, //HANGUL SYLLABLE SSANGSIOS EO RIEULPHIEUPH - 0x9BA5: 0xC377, //HANGUL SYLLABLE SSANGSIOS EO RIEULHIEUH - 0x9BA6: 0xC37A, //HANGUL SYLLABLE SSANGSIOS EO PIEUPSIOS - 0x9BA7: 0xC37B, //HANGUL SYLLABLE SSANGSIOS EO SIOS - 0x9BA8: 0xC37E, //HANGUL SYLLABLE SSANGSIOS EO CIEUC - 0x9BA9: 0xC37F, //HANGUL SYLLABLE SSANGSIOS EO CHIEUCH - 0x9BAA: 0xC380, //HANGUL SYLLABLE SSANGSIOS EO KHIEUKH - 0x9BAB: 0xC381, //HANGUL SYLLABLE SSANGSIOS EO THIEUTH - 0x9BAC: 0xC382, //HANGUL SYLLABLE SSANGSIOS EO PHIEUPH - 0x9BAD: 0xC383, //HANGUL SYLLABLE SSANGSIOS EO HIEUH - 0x9BAE: 0xC385, //HANGUL SYLLABLE SSANGSIOS E KIYEOK - 0x9BAF: 0xC386, //HANGUL SYLLABLE SSANGSIOS E SSANGKIYEOK - 0x9BB0: 0xC387, //HANGUL SYLLABLE SSANGSIOS E KIYEOKSIOS - 0x9BB1: 0xC389, //HANGUL SYLLABLE SSANGSIOS E NIEUNCIEUC - 0x9BB2: 0xC38A, //HANGUL SYLLABLE SSANGSIOS E NIEUNHIEUH - 0x9BB3: 0xC38B, //HANGUL SYLLABLE SSANGSIOS E TIKEUT - 0x9BB4: 0xC38D, //HANGUL SYLLABLE SSANGSIOS E RIEULKIYEOK - 0x9BB5: 0xC38E, //HANGUL SYLLABLE SSANGSIOS E RIEULMIEUM - 0x9BB6: 0xC38F, //HANGUL SYLLABLE SSANGSIOS E RIEULPIEUP - 0x9BB7: 0xC390, //HANGUL SYLLABLE SSANGSIOS E RIEULSIOS - 0x9BB8: 0xC391, //HANGUL SYLLABLE SSANGSIOS E RIEULTHIEUTH - 0x9BB9: 0xC392, //HANGUL SYLLABLE SSANGSIOS E RIEULPHIEUPH - 0x9BBA: 0xC393, //HANGUL SYLLABLE SSANGSIOS E RIEULHIEUH - 0x9BBB: 0xC394, //HANGUL SYLLABLE SSANGSIOS E MIEUM - 0x9BBC: 0xC395, //HANGUL SYLLABLE SSANGSIOS E PIEUP - 0x9BBD: 0xC396, //HANGUL SYLLABLE SSANGSIOS E PIEUPSIOS - 0x9BBE: 0xC397, //HANGUL SYLLABLE SSANGSIOS E SIOS - 0x9BBF: 0xC398, //HANGUL SYLLABLE SSANGSIOS E SSANGSIOS - 0x9BC0: 0xC399, //HANGUL SYLLABLE SSANGSIOS E IEUNG - 0x9BC1: 0xC39A, //HANGUL SYLLABLE SSANGSIOS E CIEUC - 0x9BC2: 0xC39B, //HANGUL SYLLABLE SSANGSIOS E CHIEUCH - 0x9BC3: 0xC39C, //HANGUL SYLLABLE SSANGSIOS E KHIEUKH - 0x9BC4: 0xC39D, //HANGUL SYLLABLE SSANGSIOS E THIEUTH - 0x9BC5: 0xC39E, //HANGUL SYLLABLE SSANGSIOS E PHIEUPH - 0x9BC6: 0xC39F, //HANGUL SYLLABLE SSANGSIOS E HIEUH - 0x9BC7: 0xC3A0, //HANGUL SYLLABLE SSANGSIOS YEO - 0x9BC8: 0xC3A1, //HANGUL SYLLABLE SSANGSIOS YEO KIYEOK - 0x9BC9: 0xC3A2, //HANGUL SYLLABLE SSANGSIOS YEO SSANGKIYEOK - 0x9BCA: 0xC3A3, //HANGUL SYLLABLE SSANGSIOS YEO KIYEOKSIOS - 0x9BCB: 0xC3A4, //HANGUL SYLLABLE SSANGSIOS YEO NIEUN - 0x9BCC: 0xC3A5, //HANGUL SYLLABLE SSANGSIOS YEO NIEUNCIEUC - 0x9BCD: 0xC3A6, //HANGUL SYLLABLE SSANGSIOS YEO NIEUNHIEUH - 0x9BCE: 0xC3A7, //HANGUL SYLLABLE SSANGSIOS YEO TIKEUT - 0x9BCF: 0xC3A8, //HANGUL SYLLABLE SSANGSIOS YEO RIEUL - 0x9BD0: 0xC3A9, //HANGUL SYLLABLE SSANGSIOS YEO RIEULKIYEOK - 0x9BD1: 0xC3AA, //HANGUL SYLLABLE SSANGSIOS YEO RIEULMIEUM - 0x9BD2: 0xC3AB, //HANGUL SYLLABLE SSANGSIOS YEO RIEULPIEUP - 0x9BD3: 0xC3AC, //HANGUL SYLLABLE SSANGSIOS YEO RIEULSIOS - 0x9BD4: 0xC3AD, //HANGUL SYLLABLE SSANGSIOS YEO RIEULTHIEUTH - 0x9BD5: 0xC3AE, //HANGUL SYLLABLE SSANGSIOS YEO RIEULPHIEUPH - 0x9BD6: 0xC3AF, //HANGUL SYLLABLE SSANGSIOS YEO RIEULHIEUH - 0x9BD7: 0xC3B0, //HANGUL SYLLABLE SSANGSIOS YEO MIEUM - 0x9BD8: 0xC3B1, //HANGUL SYLLABLE SSANGSIOS YEO PIEUP - 0x9BD9: 0xC3B2, //HANGUL SYLLABLE SSANGSIOS YEO PIEUPSIOS - 0x9BDA: 0xC3B3, //HANGUL SYLLABLE SSANGSIOS YEO SIOS - 0x9BDB: 0xC3B4, //HANGUL SYLLABLE SSANGSIOS YEO SSANGSIOS - 0x9BDC: 0xC3B5, //HANGUL SYLLABLE SSANGSIOS YEO IEUNG - 0x9BDD: 0xC3B6, //HANGUL SYLLABLE SSANGSIOS YEO CIEUC - 0x9BDE: 0xC3B7, //HANGUL SYLLABLE SSANGSIOS YEO CHIEUCH - 0x9BDF: 0xC3B8, //HANGUL SYLLABLE SSANGSIOS YEO KHIEUKH - 0x9BE0: 0xC3B9, //HANGUL SYLLABLE SSANGSIOS YEO THIEUTH - 0x9BE1: 0xC3BA, //HANGUL SYLLABLE SSANGSIOS YEO PHIEUPH - 0x9BE2: 0xC3BB, //HANGUL SYLLABLE SSANGSIOS YEO HIEUH - 0x9BE3: 0xC3BC, //HANGUL SYLLABLE SSANGSIOS YE - 0x9BE4: 0xC3BD, //HANGUL SYLLABLE SSANGSIOS YE KIYEOK - 0x9BE5: 0xC3BE, //HANGUL SYLLABLE SSANGSIOS YE SSANGKIYEOK - 0x9BE6: 0xC3BF, //HANGUL SYLLABLE SSANGSIOS YE KIYEOKSIOS - 0x9BE7: 0xC3C1, //HANGUL SYLLABLE SSANGSIOS YE NIEUNCIEUC - 0x9BE8: 0xC3C2, //HANGUL SYLLABLE SSANGSIOS YE NIEUNHIEUH - 0x9BE9: 0xC3C3, //HANGUL SYLLABLE SSANGSIOS YE TIKEUT - 0x9BEA: 0xC3C4, //HANGUL SYLLABLE SSANGSIOS YE RIEUL - 0x9BEB: 0xC3C5, //HANGUL SYLLABLE SSANGSIOS YE RIEULKIYEOK - 0x9BEC: 0xC3C6, //HANGUL SYLLABLE SSANGSIOS YE RIEULMIEUM - 0x9BED: 0xC3C7, //HANGUL SYLLABLE SSANGSIOS YE RIEULPIEUP - 0x9BEE: 0xC3C8, //HANGUL SYLLABLE SSANGSIOS YE RIEULSIOS - 0x9BEF: 0xC3C9, //HANGUL SYLLABLE SSANGSIOS YE RIEULTHIEUTH - 0x9BF0: 0xC3CA, //HANGUL SYLLABLE SSANGSIOS YE RIEULPHIEUPH - 0x9BF1: 0xC3CB, //HANGUL SYLLABLE SSANGSIOS YE RIEULHIEUH - 0x9BF2: 0xC3CC, //HANGUL SYLLABLE SSANGSIOS YE MIEUM - 0x9BF3: 0xC3CD, //HANGUL SYLLABLE SSANGSIOS YE PIEUP - 0x9BF4: 0xC3CE, //HANGUL SYLLABLE SSANGSIOS YE PIEUPSIOS - 0x9BF5: 0xC3CF, //HANGUL SYLLABLE SSANGSIOS YE SIOS - 0x9BF6: 0xC3D0, //HANGUL SYLLABLE SSANGSIOS YE SSANGSIOS - 0x9BF7: 0xC3D1, //HANGUL SYLLABLE SSANGSIOS YE IEUNG - 0x9BF8: 0xC3D2, //HANGUL SYLLABLE SSANGSIOS YE CIEUC - 0x9BF9: 0xC3D3, //HANGUL SYLLABLE SSANGSIOS YE CHIEUCH - 0x9BFA: 0xC3D4, //HANGUL SYLLABLE SSANGSIOS YE KHIEUKH - 0x9BFB: 0xC3D5, //HANGUL SYLLABLE SSANGSIOS YE THIEUTH - 0x9BFC: 0xC3D6, //HANGUL SYLLABLE SSANGSIOS YE PHIEUPH - 0x9BFD: 0xC3D7, //HANGUL SYLLABLE SSANGSIOS YE HIEUH - 0x9BFE: 0xC3DA, //HANGUL SYLLABLE SSANGSIOS O SSANGKIYEOK - 0x9C41: 0xC3DB, //HANGUL SYLLABLE SSANGSIOS O KIYEOKSIOS - 0x9C42: 0xC3DD, //HANGUL SYLLABLE SSANGSIOS O NIEUNCIEUC - 0x9C43: 0xC3DE, //HANGUL SYLLABLE SSANGSIOS O NIEUNHIEUH - 0x9C44: 0xC3E1, //HANGUL SYLLABLE SSANGSIOS O RIEULKIYEOK - 0x9C45: 0xC3E3, //HANGUL SYLLABLE SSANGSIOS O RIEULPIEUP - 0x9C46: 0xC3E4, //HANGUL SYLLABLE SSANGSIOS O RIEULSIOS - 0x9C47: 0xC3E5, //HANGUL SYLLABLE SSANGSIOS O RIEULTHIEUTH - 0x9C48: 0xC3E6, //HANGUL SYLLABLE SSANGSIOS O RIEULPHIEUPH - 0x9C49: 0xC3E7, //HANGUL SYLLABLE SSANGSIOS O RIEULHIEUH - 0x9C4A: 0xC3EA, //HANGUL SYLLABLE SSANGSIOS O PIEUPSIOS - 0x9C4B: 0xC3EB, //HANGUL SYLLABLE SSANGSIOS O SIOS - 0x9C4C: 0xC3EC, //HANGUL SYLLABLE SSANGSIOS O SSANGSIOS - 0x9C4D: 0xC3EE, //HANGUL SYLLABLE SSANGSIOS O CIEUC - 0x9C4E: 0xC3EF, //HANGUL SYLLABLE SSANGSIOS O CHIEUCH - 0x9C4F: 0xC3F0, //HANGUL SYLLABLE SSANGSIOS O KHIEUKH - 0x9C50: 0xC3F1, //HANGUL SYLLABLE SSANGSIOS O THIEUTH - 0x9C51: 0xC3F2, //HANGUL SYLLABLE SSANGSIOS O PHIEUPH - 0x9C52: 0xC3F3, //HANGUL SYLLABLE SSANGSIOS O HIEUH - 0x9C53: 0xC3F6, //HANGUL SYLLABLE SSANGSIOS WA SSANGKIYEOK - 0x9C54: 0xC3F7, //HANGUL SYLLABLE SSANGSIOS WA KIYEOKSIOS - 0x9C55: 0xC3F9, //HANGUL SYLLABLE SSANGSIOS WA NIEUNCIEUC - 0x9C56: 0xC3FA, //HANGUL SYLLABLE SSANGSIOS WA NIEUNHIEUH - 0x9C57: 0xC3FB, //HANGUL SYLLABLE SSANGSIOS WA TIKEUT - 0x9C58: 0xC3FC, //HANGUL SYLLABLE SSANGSIOS WA RIEUL - 0x9C59: 0xC3FD, //HANGUL SYLLABLE SSANGSIOS WA RIEULKIYEOK - 0x9C5A: 0xC3FE, //HANGUL SYLLABLE SSANGSIOS WA RIEULMIEUM - 0x9C61: 0xC3FF, //HANGUL SYLLABLE SSANGSIOS WA RIEULPIEUP - 0x9C62: 0xC400, //HANGUL SYLLABLE SSANGSIOS WA RIEULSIOS - 0x9C63: 0xC401, //HANGUL SYLLABLE SSANGSIOS WA RIEULTHIEUTH - 0x9C64: 0xC402, //HANGUL SYLLABLE SSANGSIOS WA RIEULPHIEUPH - 0x9C65: 0xC403, //HANGUL SYLLABLE SSANGSIOS WA RIEULHIEUH - 0x9C66: 0xC404, //HANGUL SYLLABLE SSANGSIOS WA MIEUM - 0x9C67: 0xC405, //HANGUL SYLLABLE SSANGSIOS WA PIEUP - 0x9C68: 0xC406, //HANGUL SYLLABLE SSANGSIOS WA PIEUPSIOS - 0x9C69: 0xC407, //HANGUL SYLLABLE SSANGSIOS WA SIOS - 0x9C6A: 0xC409, //HANGUL SYLLABLE SSANGSIOS WA IEUNG - 0x9C6B: 0xC40A, //HANGUL SYLLABLE SSANGSIOS WA CIEUC - 0x9C6C: 0xC40B, //HANGUL SYLLABLE SSANGSIOS WA CHIEUCH - 0x9C6D: 0xC40C, //HANGUL SYLLABLE SSANGSIOS WA KHIEUKH - 0x9C6E: 0xC40D, //HANGUL SYLLABLE SSANGSIOS WA THIEUTH - 0x9C6F: 0xC40E, //HANGUL SYLLABLE SSANGSIOS WA PHIEUPH - 0x9C70: 0xC40F, //HANGUL SYLLABLE SSANGSIOS WA HIEUH - 0x9C71: 0xC411, //HANGUL SYLLABLE SSANGSIOS WAE KIYEOK - 0x9C72: 0xC412, //HANGUL SYLLABLE SSANGSIOS WAE SSANGKIYEOK - 0x9C73: 0xC413, //HANGUL SYLLABLE SSANGSIOS WAE KIYEOKSIOS - 0x9C74: 0xC414, //HANGUL SYLLABLE SSANGSIOS WAE NIEUN - 0x9C75: 0xC415, //HANGUL SYLLABLE SSANGSIOS WAE NIEUNCIEUC - 0x9C76: 0xC416, //HANGUL SYLLABLE SSANGSIOS WAE NIEUNHIEUH - 0x9C77: 0xC417, //HANGUL SYLLABLE SSANGSIOS WAE TIKEUT - 0x9C78: 0xC418, //HANGUL SYLLABLE SSANGSIOS WAE RIEUL - 0x9C79: 0xC419, //HANGUL SYLLABLE SSANGSIOS WAE RIEULKIYEOK - 0x9C7A: 0xC41A, //HANGUL SYLLABLE SSANGSIOS WAE RIEULMIEUM - 0x9C81: 0xC41B, //HANGUL SYLLABLE SSANGSIOS WAE RIEULPIEUP - 0x9C82: 0xC41C, //HANGUL SYLLABLE SSANGSIOS WAE RIEULSIOS - 0x9C83: 0xC41D, //HANGUL SYLLABLE SSANGSIOS WAE RIEULTHIEUTH - 0x9C84: 0xC41E, //HANGUL SYLLABLE SSANGSIOS WAE RIEULPHIEUPH - 0x9C85: 0xC41F, //HANGUL SYLLABLE SSANGSIOS WAE RIEULHIEUH - 0x9C86: 0xC420, //HANGUL SYLLABLE SSANGSIOS WAE MIEUM - 0x9C87: 0xC421, //HANGUL SYLLABLE SSANGSIOS WAE PIEUP - 0x9C88: 0xC422, //HANGUL SYLLABLE SSANGSIOS WAE PIEUPSIOS - 0x9C89: 0xC423, //HANGUL SYLLABLE SSANGSIOS WAE SIOS - 0x9C8A: 0xC425, //HANGUL SYLLABLE SSANGSIOS WAE IEUNG - 0x9C8B: 0xC426, //HANGUL SYLLABLE SSANGSIOS WAE CIEUC - 0x9C8C: 0xC427, //HANGUL SYLLABLE SSANGSIOS WAE CHIEUCH - 0x9C8D: 0xC428, //HANGUL SYLLABLE SSANGSIOS WAE KHIEUKH - 0x9C8E: 0xC429, //HANGUL SYLLABLE SSANGSIOS WAE THIEUTH - 0x9C8F: 0xC42A, //HANGUL SYLLABLE SSANGSIOS WAE PHIEUPH - 0x9C90: 0xC42B, //HANGUL SYLLABLE SSANGSIOS WAE HIEUH - 0x9C91: 0xC42D, //HANGUL SYLLABLE SSANGSIOS OE KIYEOK - 0x9C92: 0xC42E, //HANGUL SYLLABLE SSANGSIOS OE SSANGKIYEOK - 0x9C93: 0xC42F, //HANGUL SYLLABLE SSANGSIOS OE KIYEOKSIOS - 0x9C94: 0xC431, //HANGUL SYLLABLE SSANGSIOS OE NIEUNCIEUC - 0x9C95: 0xC432, //HANGUL SYLLABLE SSANGSIOS OE NIEUNHIEUH - 0x9C96: 0xC433, //HANGUL SYLLABLE SSANGSIOS OE TIKEUT - 0x9C97: 0xC435, //HANGUL SYLLABLE SSANGSIOS OE RIEULKIYEOK - 0x9C98: 0xC436, //HANGUL SYLLABLE SSANGSIOS OE RIEULMIEUM - 0x9C99: 0xC437, //HANGUL SYLLABLE SSANGSIOS OE RIEULPIEUP - 0x9C9A: 0xC438, //HANGUL SYLLABLE SSANGSIOS OE RIEULSIOS - 0x9C9B: 0xC439, //HANGUL SYLLABLE SSANGSIOS OE RIEULTHIEUTH - 0x9C9C: 0xC43A, //HANGUL SYLLABLE SSANGSIOS OE RIEULPHIEUPH - 0x9C9D: 0xC43B, //HANGUL SYLLABLE SSANGSIOS OE RIEULHIEUH - 0x9C9E: 0xC43E, //HANGUL SYLLABLE SSANGSIOS OE PIEUPSIOS - 0x9C9F: 0xC43F, //HANGUL SYLLABLE SSANGSIOS OE SIOS - 0x9CA0: 0xC440, //HANGUL SYLLABLE SSANGSIOS OE SSANGSIOS - 0x9CA1: 0xC441, //HANGUL SYLLABLE SSANGSIOS OE IEUNG - 0x9CA2: 0xC442, //HANGUL SYLLABLE SSANGSIOS OE CIEUC - 0x9CA3: 0xC443, //HANGUL SYLLABLE SSANGSIOS OE CHIEUCH - 0x9CA4: 0xC444, //HANGUL SYLLABLE SSANGSIOS OE KHIEUKH - 0x9CA5: 0xC445, //HANGUL SYLLABLE SSANGSIOS OE THIEUTH - 0x9CA6: 0xC446, //HANGUL SYLLABLE SSANGSIOS OE PHIEUPH - 0x9CA7: 0xC447, //HANGUL SYLLABLE SSANGSIOS OE HIEUH - 0x9CA8: 0xC449, //HANGUL SYLLABLE SSANGSIOS YO KIYEOK - 0x9CA9: 0xC44A, //HANGUL SYLLABLE SSANGSIOS YO SSANGKIYEOK - 0x9CAA: 0xC44B, //HANGUL SYLLABLE SSANGSIOS YO KIYEOKSIOS - 0x9CAB: 0xC44C, //HANGUL SYLLABLE SSANGSIOS YO NIEUN - 0x9CAC: 0xC44D, //HANGUL SYLLABLE SSANGSIOS YO NIEUNCIEUC - 0x9CAD: 0xC44E, //HANGUL SYLLABLE SSANGSIOS YO NIEUNHIEUH - 0x9CAE: 0xC44F, //HANGUL SYLLABLE SSANGSIOS YO TIKEUT - 0x9CAF: 0xC450, //HANGUL SYLLABLE SSANGSIOS YO RIEUL - 0x9CB0: 0xC451, //HANGUL SYLLABLE SSANGSIOS YO RIEULKIYEOK - 0x9CB1: 0xC452, //HANGUL SYLLABLE SSANGSIOS YO RIEULMIEUM - 0x9CB2: 0xC453, //HANGUL SYLLABLE SSANGSIOS YO RIEULPIEUP - 0x9CB3: 0xC454, //HANGUL SYLLABLE SSANGSIOS YO RIEULSIOS - 0x9CB4: 0xC455, //HANGUL SYLLABLE SSANGSIOS YO RIEULTHIEUTH - 0x9CB5: 0xC456, //HANGUL SYLLABLE SSANGSIOS YO RIEULPHIEUPH - 0x9CB6: 0xC457, //HANGUL SYLLABLE SSANGSIOS YO RIEULHIEUH - 0x9CB7: 0xC458, //HANGUL SYLLABLE SSANGSIOS YO MIEUM - 0x9CB8: 0xC459, //HANGUL SYLLABLE SSANGSIOS YO PIEUP - 0x9CB9: 0xC45A, //HANGUL SYLLABLE SSANGSIOS YO PIEUPSIOS - 0x9CBA: 0xC45B, //HANGUL SYLLABLE SSANGSIOS YO SIOS - 0x9CBB: 0xC45C, //HANGUL SYLLABLE SSANGSIOS YO SSANGSIOS - 0x9CBC: 0xC45D, //HANGUL SYLLABLE SSANGSIOS YO IEUNG - 0x9CBD: 0xC45E, //HANGUL SYLLABLE SSANGSIOS YO CIEUC - 0x9CBE: 0xC45F, //HANGUL SYLLABLE SSANGSIOS YO CHIEUCH - 0x9CBF: 0xC460, //HANGUL SYLLABLE SSANGSIOS YO KHIEUKH - 0x9CC0: 0xC461, //HANGUL SYLLABLE SSANGSIOS YO THIEUTH - 0x9CC1: 0xC462, //HANGUL SYLLABLE SSANGSIOS YO PHIEUPH - 0x9CC2: 0xC463, //HANGUL SYLLABLE SSANGSIOS YO HIEUH - 0x9CC3: 0xC466, //HANGUL SYLLABLE SSANGSIOS U SSANGKIYEOK - 0x9CC4: 0xC467, //HANGUL SYLLABLE SSANGSIOS U KIYEOKSIOS - 0x9CC5: 0xC469, //HANGUL SYLLABLE SSANGSIOS U NIEUNCIEUC - 0x9CC6: 0xC46A, //HANGUL SYLLABLE SSANGSIOS U NIEUNHIEUH - 0x9CC7: 0xC46B, //HANGUL SYLLABLE SSANGSIOS U TIKEUT - 0x9CC8: 0xC46D, //HANGUL SYLLABLE SSANGSIOS U RIEULKIYEOK - 0x9CC9: 0xC46E, //HANGUL SYLLABLE SSANGSIOS U RIEULMIEUM - 0x9CCA: 0xC46F, //HANGUL SYLLABLE SSANGSIOS U RIEULPIEUP - 0x9CCB: 0xC470, //HANGUL SYLLABLE SSANGSIOS U RIEULSIOS - 0x9CCC: 0xC471, //HANGUL SYLLABLE SSANGSIOS U RIEULTHIEUTH - 0x9CCD: 0xC472, //HANGUL SYLLABLE SSANGSIOS U RIEULPHIEUPH - 0x9CCE: 0xC473, //HANGUL SYLLABLE SSANGSIOS U RIEULHIEUH - 0x9CCF: 0xC476, //HANGUL SYLLABLE SSANGSIOS U PIEUPSIOS - 0x9CD0: 0xC477, //HANGUL SYLLABLE SSANGSIOS U SIOS - 0x9CD1: 0xC478, //HANGUL SYLLABLE SSANGSIOS U SSANGSIOS - 0x9CD2: 0xC47A, //HANGUL SYLLABLE SSANGSIOS U CIEUC - 0x9CD3: 0xC47B, //HANGUL SYLLABLE SSANGSIOS U CHIEUCH - 0x9CD4: 0xC47C, //HANGUL SYLLABLE SSANGSIOS U KHIEUKH - 0x9CD5: 0xC47D, //HANGUL SYLLABLE SSANGSIOS U THIEUTH - 0x9CD6: 0xC47E, //HANGUL SYLLABLE SSANGSIOS U PHIEUPH - 0x9CD7: 0xC47F, //HANGUL SYLLABLE SSANGSIOS U HIEUH - 0x9CD8: 0xC481, //HANGUL SYLLABLE SSANGSIOS WEO KIYEOK - 0x9CD9: 0xC482, //HANGUL SYLLABLE SSANGSIOS WEO SSANGKIYEOK - 0x9CDA: 0xC483, //HANGUL SYLLABLE SSANGSIOS WEO KIYEOKSIOS - 0x9CDB: 0xC484, //HANGUL SYLLABLE SSANGSIOS WEO NIEUN - 0x9CDC: 0xC485, //HANGUL SYLLABLE SSANGSIOS WEO NIEUNCIEUC - 0x9CDD: 0xC486, //HANGUL SYLLABLE SSANGSIOS WEO NIEUNHIEUH - 0x9CDE: 0xC487, //HANGUL SYLLABLE SSANGSIOS WEO TIKEUT - 0x9CDF: 0xC488, //HANGUL SYLLABLE SSANGSIOS WEO RIEUL - 0x9CE0: 0xC489, //HANGUL SYLLABLE SSANGSIOS WEO RIEULKIYEOK - 0x9CE1: 0xC48A, //HANGUL SYLLABLE SSANGSIOS WEO RIEULMIEUM - 0x9CE2: 0xC48B, //HANGUL SYLLABLE SSANGSIOS WEO RIEULPIEUP - 0x9CE3: 0xC48C, //HANGUL SYLLABLE SSANGSIOS WEO RIEULSIOS - 0x9CE4: 0xC48D, //HANGUL SYLLABLE SSANGSIOS WEO RIEULTHIEUTH - 0x9CE5: 0xC48E, //HANGUL SYLLABLE SSANGSIOS WEO RIEULPHIEUPH - 0x9CE6: 0xC48F, //HANGUL SYLLABLE SSANGSIOS WEO RIEULHIEUH - 0x9CE7: 0xC490, //HANGUL SYLLABLE SSANGSIOS WEO MIEUM - 0x9CE8: 0xC491, //HANGUL SYLLABLE SSANGSIOS WEO PIEUP - 0x9CE9: 0xC492, //HANGUL SYLLABLE SSANGSIOS WEO PIEUPSIOS - 0x9CEA: 0xC493, //HANGUL SYLLABLE SSANGSIOS WEO SIOS - 0x9CEB: 0xC495, //HANGUL SYLLABLE SSANGSIOS WEO IEUNG - 0x9CEC: 0xC496, //HANGUL SYLLABLE SSANGSIOS WEO CIEUC - 0x9CED: 0xC497, //HANGUL SYLLABLE SSANGSIOS WEO CHIEUCH - 0x9CEE: 0xC498, //HANGUL SYLLABLE SSANGSIOS WEO KHIEUKH - 0x9CEF: 0xC499, //HANGUL SYLLABLE SSANGSIOS WEO THIEUTH - 0x9CF0: 0xC49A, //HANGUL SYLLABLE SSANGSIOS WEO PHIEUPH - 0x9CF1: 0xC49B, //HANGUL SYLLABLE SSANGSIOS WEO HIEUH - 0x9CF2: 0xC49D, //HANGUL SYLLABLE SSANGSIOS WE KIYEOK - 0x9CF3: 0xC49E, //HANGUL SYLLABLE SSANGSIOS WE SSANGKIYEOK - 0x9CF4: 0xC49F, //HANGUL SYLLABLE SSANGSIOS WE KIYEOKSIOS - 0x9CF5: 0xC4A0, //HANGUL SYLLABLE SSANGSIOS WE NIEUN - 0x9CF6: 0xC4A1, //HANGUL SYLLABLE SSANGSIOS WE NIEUNCIEUC - 0x9CF7: 0xC4A2, //HANGUL SYLLABLE SSANGSIOS WE NIEUNHIEUH - 0x9CF8: 0xC4A3, //HANGUL SYLLABLE SSANGSIOS WE TIKEUT - 0x9CF9: 0xC4A4, //HANGUL SYLLABLE SSANGSIOS WE RIEUL - 0x9CFA: 0xC4A5, //HANGUL SYLLABLE SSANGSIOS WE RIEULKIYEOK - 0x9CFB: 0xC4A6, //HANGUL SYLLABLE SSANGSIOS WE RIEULMIEUM - 0x9CFC: 0xC4A7, //HANGUL SYLLABLE SSANGSIOS WE RIEULPIEUP - 0x9CFD: 0xC4A8, //HANGUL SYLLABLE SSANGSIOS WE RIEULSIOS - 0x9CFE: 0xC4A9, //HANGUL SYLLABLE SSANGSIOS WE RIEULTHIEUTH - 0x9D41: 0xC4AA, //HANGUL SYLLABLE SSANGSIOS WE RIEULPHIEUPH - 0x9D42: 0xC4AB, //HANGUL SYLLABLE SSANGSIOS WE RIEULHIEUH - 0x9D43: 0xC4AC, //HANGUL SYLLABLE SSANGSIOS WE MIEUM - 0x9D44: 0xC4AD, //HANGUL SYLLABLE SSANGSIOS WE PIEUP - 0x9D45: 0xC4AE, //HANGUL SYLLABLE SSANGSIOS WE PIEUPSIOS - 0x9D46: 0xC4AF, //HANGUL SYLLABLE SSANGSIOS WE SIOS - 0x9D47: 0xC4B0, //HANGUL SYLLABLE SSANGSIOS WE SSANGSIOS - 0x9D48: 0xC4B1, //HANGUL SYLLABLE SSANGSIOS WE IEUNG - 0x9D49: 0xC4B2, //HANGUL SYLLABLE SSANGSIOS WE CIEUC - 0x9D4A: 0xC4B3, //HANGUL SYLLABLE SSANGSIOS WE CHIEUCH - 0x9D4B: 0xC4B4, //HANGUL SYLLABLE SSANGSIOS WE KHIEUKH - 0x9D4C: 0xC4B5, //HANGUL SYLLABLE SSANGSIOS WE THIEUTH - 0x9D4D: 0xC4B6, //HANGUL SYLLABLE SSANGSIOS WE PHIEUPH - 0x9D4E: 0xC4B7, //HANGUL SYLLABLE SSANGSIOS WE HIEUH - 0x9D4F: 0xC4B9, //HANGUL SYLLABLE SSANGSIOS WI KIYEOK - 0x9D50: 0xC4BA, //HANGUL SYLLABLE SSANGSIOS WI SSANGKIYEOK - 0x9D51: 0xC4BB, //HANGUL SYLLABLE SSANGSIOS WI KIYEOKSIOS - 0x9D52: 0xC4BD, //HANGUL SYLLABLE SSANGSIOS WI NIEUNCIEUC - 0x9D53: 0xC4BE, //HANGUL SYLLABLE SSANGSIOS WI NIEUNHIEUH - 0x9D54: 0xC4BF, //HANGUL SYLLABLE SSANGSIOS WI TIKEUT - 0x9D55: 0xC4C0, //HANGUL SYLLABLE SSANGSIOS WI RIEUL - 0x9D56: 0xC4C1, //HANGUL SYLLABLE SSANGSIOS WI RIEULKIYEOK - 0x9D57: 0xC4C2, //HANGUL SYLLABLE SSANGSIOS WI RIEULMIEUM - 0x9D58: 0xC4C3, //HANGUL SYLLABLE SSANGSIOS WI RIEULPIEUP - 0x9D59: 0xC4C4, //HANGUL SYLLABLE SSANGSIOS WI RIEULSIOS - 0x9D5A: 0xC4C5, //HANGUL SYLLABLE SSANGSIOS WI RIEULTHIEUTH - 0x9D61: 0xC4C6, //HANGUL SYLLABLE SSANGSIOS WI RIEULPHIEUPH - 0x9D62: 0xC4C7, //HANGUL SYLLABLE SSANGSIOS WI RIEULHIEUH - 0x9D63: 0xC4C8, //HANGUL SYLLABLE SSANGSIOS WI MIEUM - 0x9D64: 0xC4C9, //HANGUL SYLLABLE SSANGSIOS WI PIEUP - 0x9D65: 0xC4CA, //HANGUL SYLLABLE SSANGSIOS WI PIEUPSIOS - 0x9D66: 0xC4CB, //HANGUL SYLLABLE SSANGSIOS WI SIOS - 0x9D67: 0xC4CC, //HANGUL SYLLABLE SSANGSIOS WI SSANGSIOS - 0x9D68: 0xC4CD, //HANGUL SYLLABLE SSANGSIOS WI IEUNG - 0x9D69: 0xC4CE, //HANGUL SYLLABLE SSANGSIOS WI CIEUC - 0x9D6A: 0xC4CF, //HANGUL SYLLABLE SSANGSIOS WI CHIEUCH - 0x9D6B: 0xC4D0, //HANGUL SYLLABLE SSANGSIOS WI KHIEUKH - 0x9D6C: 0xC4D1, //HANGUL SYLLABLE SSANGSIOS WI THIEUTH - 0x9D6D: 0xC4D2, //HANGUL SYLLABLE SSANGSIOS WI PHIEUPH - 0x9D6E: 0xC4D3, //HANGUL SYLLABLE SSANGSIOS WI HIEUH - 0x9D6F: 0xC4D4, //HANGUL SYLLABLE SSANGSIOS YU - 0x9D70: 0xC4D5, //HANGUL SYLLABLE SSANGSIOS YU KIYEOK - 0x9D71: 0xC4D6, //HANGUL SYLLABLE SSANGSIOS YU SSANGKIYEOK - 0x9D72: 0xC4D7, //HANGUL SYLLABLE SSANGSIOS YU KIYEOKSIOS - 0x9D73: 0xC4D8, //HANGUL SYLLABLE SSANGSIOS YU NIEUN - 0x9D74: 0xC4D9, //HANGUL SYLLABLE SSANGSIOS YU NIEUNCIEUC - 0x9D75: 0xC4DA, //HANGUL SYLLABLE SSANGSIOS YU NIEUNHIEUH - 0x9D76: 0xC4DB, //HANGUL SYLLABLE SSANGSIOS YU TIKEUT - 0x9D77: 0xC4DC, //HANGUL SYLLABLE SSANGSIOS YU RIEUL - 0x9D78: 0xC4DD, //HANGUL SYLLABLE SSANGSIOS YU RIEULKIYEOK - 0x9D79: 0xC4DE, //HANGUL SYLLABLE SSANGSIOS YU RIEULMIEUM - 0x9D7A: 0xC4DF, //HANGUL SYLLABLE SSANGSIOS YU RIEULPIEUP - 0x9D81: 0xC4E0, //HANGUL SYLLABLE SSANGSIOS YU RIEULSIOS - 0x9D82: 0xC4E1, //HANGUL SYLLABLE SSANGSIOS YU RIEULTHIEUTH - 0x9D83: 0xC4E2, //HANGUL SYLLABLE SSANGSIOS YU RIEULPHIEUPH - 0x9D84: 0xC4E3, //HANGUL SYLLABLE SSANGSIOS YU RIEULHIEUH - 0x9D85: 0xC4E4, //HANGUL SYLLABLE SSANGSIOS YU MIEUM - 0x9D86: 0xC4E5, //HANGUL SYLLABLE SSANGSIOS YU PIEUP - 0x9D87: 0xC4E6, //HANGUL SYLLABLE SSANGSIOS YU PIEUPSIOS - 0x9D88: 0xC4E7, //HANGUL SYLLABLE SSANGSIOS YU SIOS - 0x9D89: 0xC4E8, //HANGUL SYLLABLE SSANGSIOS YU SSANGSIOS - 0x9D8A: 0xC4EA, //HANGUL SYLLABLE SSANGSIOS YU CIEUC - 0x9D8B: 0xC4EB, //HANGUL SYLLABLE SSANGSIOS YU CHIEUCH - 0x9D8C: 0xC4EC, //HANGUL SYLLABLE SSANGSIOS YU KHIEUKH - 0x9D8D: 0xC4ED, //HANGUL SYLLABLE SSANGSIOS YU THIEUTH - 0x9D8E: 0xC4EE, //HANGUL SYLLABLE SSANGSIOS YU PHIEUPH - 0x9D8F: 0xC4EF, //HANGUL SYLLABLE SSANGSIOS YU HIEUH - 0x9D90: 0xC4F2, //HANGUL SYLLABLE SSANGSIOS EU SSANGKIYEOK - 0x9D91: 0xC4F3, //HANGUL SYLLABLE SSANGSIOS EU KIYEOKSIOS - 0x9D92: 0xC4F5, //HANGUL SYLLABLE SSANGSIOS EU NIEUNCIEUC - 0x9D93: 0xC4F6, //HANGUL SYLLABLE SSANGSIOS EU NIEUNHIEUH - 0x9D94: 0xC4F7, //HANGUL SYLLABLE SSANGSIOS EU TIKEUT - 0x9D95: 0xC4F9, //HANGUL SYLLABLE SSANGSIOS EU RIEULKIYEOK - 0x9D96: 0xC4FB, //HANGUL SYLLABLE SSANGSIOS EU RIEULPIEUP - 0x9D97: 0xC4FC, //HANGUL SYLLABLE SSANGSIOS EU RIEULSIOS - 0x9D98: 0xC4FD, //HANGUL SYLLABLE SSANGSIOS EU RIEULTHIEUTH - 0x9D99: 0xC4FE, //HANGUL SYLLABLE SSANGSIOS EU RIEULPHIEUPH - 0x9D9A: 0xC502, //HANGUL SYLLABLE SSANGSIOS EU PIEUPSIOS - 0x9D9B: 0xC503, //HANGUL SYLLABLE SSANGSIOS EU SIOS - 0x9D9C: 0xC504, //HANGUL SYLLABLE SSANGSIOS EU SSANGSIOS - 0x9D9D: 0xC505, //HANGUL SYLLABLE SSANGSIOS EU IEUNG - 0x9D9E: 0xC506, //HANGUL SYLLABLE SSANGSIOS EU CIEUC - 0x9D9F: 0xC507, //HANGUL SYLLABLE SSANGSIOS EU CHIEUCH - 0x9DA0: 0xC508, //HANGUL SYLLABLE SSANGSIOS EU KHIEUKH - 0x9DA1: 0xC509, //HANGUL SYLLABLE SSANGSIOS EU THIEUTH - 0x9DA2: 0xC50A, //HANGUL SYLLABLE SSANGSIOS EU PHIEUPH - 0x9DA3: 0xC50B, //HANGUL SYLLABLE SSANGSIOS EU HIEUH - 0x9DA4: 0xC50D, //HANGUL SYLLABLE SSANGSIOS YI KIYEOK - 0x9DA5: 0xC50E, //HANGUL SYLLABLE SSANGSIOS YI SSANGKIYEOK - 0x9DA6: 0xC50F, //HANGUL SYLLABLE SSANGSIOS YI KIYEOKSIOS - 0x9DA7: 0xC511, //HANGUL SYLLABLE SSANGSIOS YI NIEUNCIEUC - 0x9DA8: 0xC512, //HANGUL SYLLABLE SSANGSIOS YI NIEUNHIEUH - 0x9DA9: 0xC513, //HANGUL SYLLABLE SSANGSIOS YI TIKEUT - 0x9DAA: 0xC515, //HANGUL SYLLABLE SSANGSIOS YI RIEULKIYEOK - 0x9DAB: 0xC516, //HANGUL SYLLABLE SSANGSIOS YI RIEULMIEUM - 0x9DAC: 0xC517, //HANGUL SYLLABLE SSANGSIOS YI RIEULPIEUP - 0x9DAD: 0xC518, //HANGUL SYLLABLE SSANGSIOS YI RIEULSIOS - 0x9DAE: 0xC519, //HANGUL SYLLABLE SSANGSIOS YI RIEULTHIEUTH - 0x9DAF: 0xC51A, //HANGUL SYLLABLE SSANGSIOS YI RIEULPHIEUPH - 0x9DB0: 0xC51B, //HANGUL SYLLABLE SSANGSIOS YI RIEULHIEUH - 0x9DB1: 0xC51D, //HANGUL SYLLABLE SSANGSIOS YI PIEUP - 0x9DB2: 0xC51E, //HANGUL SYLLABLE SSANGSIOS YI PIEUPSIOS - 0x9DB3: 0xC51F, //HANGUL SYLLABLE SSANGSIOS YI SIOS - 0x9DB4: 0xC520, //HANGUL SYLLABLE SSANGSIOS YI SSANGSIOS - 0x9DB5: 0xC521, //HANGUL SYLLABLE SSANGSIOS YI IEUNG - 0x9DB6: 0xC522, //HANGUL SYLLABLE SSANGSIOS YI CIEUC - 0x9DB7: 0xC523, //HANGUL SYLLABLE SSANGSIOS YI CHIEUCH - 0x9DB8: 0xC524, //HANGUL SYLLABLE SSANGSIOS YI KHIEUKH - 0x9DB9: 0xC525, //HANGUL SYLLABLE SSANGSIOS YI THIEUTH - 0x9DBA: 0xC526, //HANGUL SYLLABLE SSANGSIOS YI PHIEUPH - 0x9DBB: 0xC527, //HANGUL SYLLABLE SSANGSIOS YI HIEUH - 0x9DBC: 0xC52A, //HANGUL SYLLABLE SSANGSIOS I SSANGKIYEOK - 0x9DBD: 0xC52B, //HANGUL SYLLABLE SSANGSIOS I KIYEOKSIOS - 0x9DBE: 0xC52D, //HANGUL SYLLABLE SSANGSIOS I NIEUNCIEUC - 0x9DBF: 0xC52E, //HANGUL SYLLABLE SSANGSIOS I NIEUNHIEUH - 0x9DC0: 0xC52F, //HANGUL SYLLABLE SSANGSIOS I TIKEUT - 0x9DC1: 0xC531, //HANGUL SYLLABLE SSANGSIOS I RIEULKIYEOK - 0x9DC2: 0xC532, //HANGUL SYLLABLE SSANGSIOS I RIEULMIEUM - 0x9DC3: 0xC533, //HANGUL SYLLABLE SSANGSIOS I RIEULPIEUP - 0x9DC4: 0xC534, //HANGUL SYLLABLE SSANGSIOS I RIEULSIOS - 0x9DC5: 0xC535, //HANGUL SYLLABLE SSANGSIOS I RIEULTHIEUTH - 0x9DC6: 0xC536, //HANGUL SYLLABLE SSANGSIOS I RIEULPHIEUPH - 0x9DC7: 0xC537, //HANGUL SYLLABLE SSANGSIOS I RIEULHIEUH - 0x9DC8: 0xC53A, //HANGUL SYLLABLE SSANGSIOS I PIEUPSIOS - 0x9DC9: 0xC53C, //HANGUL SYLLABLE SSANGSIOS I SSANGSIOS - 0x9DCA: 0xC53E, //HANGUL SYLLABLE SSANGSIOS I CIEUC - 0x9DCB: 0xC53F, //HANGUL SYLLABLE SSANGSIOS I CHIEUCH - 0x9DCC: 0xC540, //HANGUL SYLLABLE SSANGSIOS I KHIEUKH - 0x9DCD: 0xC541, //HANGUL SYLLABLE SSANGSIOS I THIEUTH - 0x9DCE: 0xC542, //HANGUL SYLLABLE SSANGSIOS I PHIEUPH - 0x9DCF: 0xC543, //HANGUL SYLLABLE SSANGSIOS I HIEUH - 0x9DD0: 0xC546, //HANGUL SYLLABLE IEUNG A SSANGKIYEOK - 0x9DD1: 0xC547, //HANGUL SYLLABLE IEUNG A KIYEOKSIOS - 0x9DD2: 0xC54B, //HANGUL SYLLABLE IEUNG A TIKEUT - 0x9DD3: 0xC54F, //HANGUL SYLLABLE IEUNG A RIEULPIEUP - 0x9DD4: 0xC550, //HANGUL SYLLABLE IEUNG A RIEULSIOS - 0x9DD5: 0xC551, //HANGUL SYLLABLE IEUNG A RIEULTHIEUTH - 0x9DD6: 0xC552, //HANGUL SYLLABLE IEUNG A RIEULPHIEUPH - 0x9DD7: 0xC556, //HANGUL SYLLABLE IEUNG A PIEUPSIOS - 0x9DD8: 0xC55A, //HANGUL SYLLABLE IEUNG A CIEUC - 0x9DD9: 0xC55B, //HANGUL SYLLABLE IEUNG A CHIEUCH - 0x9DDA: 0xC55C, //HANGUL SYLLABLE IEUNG A KHIEUKH - 0x9DDB: 0xC55F, //HANGUL SYLLABLE IEUNG A HIEUH - 0x9DDC: 0xC562, //HANGUL SYLLABLE IEUNG AE SSANGKIYEOK - 0x9DDD: 0xC563, //HANGUL SYLLABLE IEUNG AE KIYEOKSIOS - 0x9DDE: 0xC565, //HANGUL SYLLABLE IEUNG AE NIEUNCIEUC - 0x9DDF: 0xC566, //HANGUL SYLLABLE IEUNG AE NIEUNHIEUH - 0x9DE0: 0xC567, //HANGUL SYLLABLE IEUNG AE TIKEUT - 0x9DE1: 0xC569, //HANGUL SYLLABLE IEUNG AE RIEULKIYEOK - 0x9DE2: 0xC56A, //HANGUL SYLLABLE IEUNG AE RIEULMIEUM - 0x9DE3: 0xC56B, //HANGUL SYLLABLE IEUNG AE RIEULPIEUP - 0x9DE4: 0xC56C, //HANGUL SYLLABLE IEUNG AE RIEULSIOS - 0x9DE5: 0xC56D, //HANGUL SYLLABLE IEUNG AE RIEULTHIEUTH - 0x9DE6: 0xC56E, //HANGUL SYLLABLE IEUNG AE RIEULPHIEUPH - 0x9DE7: 0xC56F, //HANGUL SYLLABLE IEUNG AE RIEULHIEUH - 0x9DE8: 0xC572, //HANGUL SYLLABLE IEUNG AE PIEUPSIOS - 0x9DE9: 0xC576, //HANGUL SYLLABLE IEUNG AE CIEUC - 0x9DEA: 0xC577, //HANGUL SYLLABLE IEUNG AE CHIEUCH - 0x9DEB: 0xC578, //HANGUL SYLLABLE IEUNG AE KHIEUKH - 0x9DEC: 0xC579, //HANGUL SYLLABLE IEUNG AE THIEUTH - 0x9DED: 0xC57A, //HANGUL SYLLABLE IEUNG AE PHIEUPH - 0x9DEE: 0xC57B, //HANGUL SYLLABLE IEUNG AE HIEUH - 0x9DEF: 0xC57E, //HANGUL SYLLABLE IEUNG YA SSANGKIYEOK - 0x9DF0: 0xC57F, //HANGUL SYLLABLE IEUNG YA KIYEOKSIOS - 0x9DF1: 0xC581, //HANGUL SYLLABLE IEUNG YA NIEUNCIEUC - 0x9DF2: 0xC582, //HANGUL SYLLABLE IEUNG YA NIEUNHIEUH - 0x9DF3: 0xC583, //HANGUL SYLLABLE IEUNG YA TIKEUT - 0x9DF4: 0xC585, //HANGUL SYLLABLE IEUNG YA RIEULKIYEOK - 0x9DF5: 0xC586, //HANGUL SYLLABLE IEUNG YA RIEULMIEUM - 0x9DF6: 0xC588, //HANGUL SYLLABLE IEUNG YA RIEULSIOS - 0x9DF7: 0xC589, //HANGUL SYLLABLE IEUNG YA RIEULTHIEUTH - 0x9DF8: 0xC58A, //HANGUL SYLLABLE IEUNG YA RIEULPHIEUPH - 0x9DF9: 0xC58B, //HANGUL SYLLABLE IEUNG YA RIEULHIEUH - 0x9DFA: 0xC58E, //HANGUL SYLLABLE IEUNG YA PIEUPSIOS - 0x9DFB: 0xC590, //HANGUL SYLLABLE IEUNG YA SSANGSIOS - 0x9DFC: 0xC592, //HANGUL SYLLABLE IEUNG YA CIEUC - 0x9DFD: 0xC593, //HANGUL SYLLABLE IEUNG YA CHIEUCH - 0x9DFE: 0xC594, //HANGUL SYLLABLE IEUNG YA KHIEUKH - 0x9E41: 0xC596, //HANGUL SYLLABLE IEUNG YA PHIEUPH - 0x9E42: 0xC599, //HANGUL SYLLABLE IEUNG YAE KIYEOK - 0x9E43: 0xC59A, //HANGUL SYLLABLE IEUNG YAE SSANGKIYEOK - 0x9E44: 0xC59B, //HANGUL SYLLABLE IEUNG YAE KIYEOKSIOS - 0x9E45: 0xC59D, //HANGUL SYLLABLE IEUNG YAE NIEUNCIEUC - 0x9E46: 0xC59E, //HANGUL SYLLABLE IEUNG YAE NIEUNHIEUH - 0x9E47: 0xC59F, //HANGUL SYLLABLE IEUNG YAE TIKEUT - 0x9E48: 0xC5A1, //HANGUL SYLLABLE IEUNG YAE RIEULKIYEOK - 0x9E49: 0xC5A2, //HANGUL SYLLABLE IEUNG YAE RIEULMIEUM - 0x9E4A: 0xC5A3, //HANGUL SYLLABLE IEUNG YAE RIEULPIEUP - 0x9E4B: 0xC5A4, //HANGUL SYLLABLE IEUNG YAE RIEULSIOS - 0x9E4C: 0xC5A5, //HANGUL SYLLABLE IEUNG YAE RIEULTHIEUTH - 0x9E4D: 0xC5A6, //HANGUL SYLLABLE IEUNG YAE RIEULPHIEUPH - 0x9E4E: 0xC5A7, //HANGUL SYLLABLE IEUNG YAE RIEULHIEUH - 0x9E4F: 0xC5A8, //HANGUL SYLLABLE IEUNG YAE MIEUM - 0x9E50: 0xC5AA, //HANGUL SYLLABLE IEUNG YAE PIEUPSIOS - 0x9E51: 0xC5AB, //HANGUL SYLLABLE IEUNG YAE SIOS - 0x9E52: 0xC5AC, //HANGUL SYLLABLE IEUNG YAE SSANGSIOS - 0x9E53: 0xC5AD, //HANGUL SYLLABLE IEUNG YAE IEUNG - 0x9E54: 0xC5AE, //HANGUL SYLLABLE IEUNG YAE CIEUC - 0x9E55: 0xC5AF, //HANGUL SYLLABLE IEUNG YAE CHIEUCH - 0x9E56: 0xC5B0, //HANGUL SYLLABLE IEUNG YAE KHIEUKH - 0x9E57: 0xC5B1, //HANGUL SYLLABLE IEUNG YAE THIEUTH - 0x9E58: 0xC5B2, //HANGUL SYLLABLE IEUNG YAE PHIEUPH - 0x9E59: 0xC5B3, //HANGUL SYLLABLE IEUNG YAE HIEUH - 0x9E5A: 0xC5B6, //HANGUL SYLLABLE IEUNG EO SSANGKIYEOK - 0x9E61: 0xC5B7, //HANGUL SYLLABLE IEUNG EO KIYEOKSIOS - 0x9E62: 0xC5BA, //HANGUL SYLLABLE IEUNG EO NIEUNHIEUH - 0x9E63: 0xC5BF, //HANGUL SYLLABLE IEUNG EO RIEULPIEUP - 0x9E64: 0xC5C0, //HANGUL SYLLABLE IEUNG EO RIEULSIOS - 0x9E65: 0xC5C1, //HANGUL SYLLABLE IEUNG EO RIEULTHIEUTH - 0x9E66: 0xC5C2, //HANGUL SYLLABLE IEUNG EO RIEULPHIEUPH - 0x9E67: 0xC5C3, //HANGUL SYLLABLE IEUNG EO RIEULHIEUH - 0x9E68: 0xC5CB, //HANGUL SYLLABLE IEUNG EO CHIEUCH - 0x9E69: 0xC5CD, //HANGUL SYLLABLE IEUNG EO THIEUTH - 0x9E6A: 0xC5CF, //HANGUL SYLLABLE IEUNG EO HIEUH - 0x9E6B: 0xC5D2, //HANGUL SYLLABLE IEUNG E SSANGKIYEOK - 0x9E6C: 0xC5D3, //HANGUL SYLLABLE IEUNG E KIYEOKSIOS - 0x9E6D: 0xC5D5, //HANGUL SYLLABLE IEUNG E NIEUNCIEUC - 0x9E6E: 0xC5D6, //HANGUL SYLLABLE IEUNG E NIEUNHIEUH - 0x9E6F: 0xC5D7, //HANGUL SYLLABLE IEUNG E TIKEUT - 0x9E70: 0xC5D9, //HANGUL SYLLABLE IEUNG E RIEULKIYEOK - 0x9E71: 0xC5DA, //HANGUL SYLLABLE IEUNG E RIEULMIEUM - 0x9E72: 0xC5DB, //HANGUL SYLLABLE IEUNG E RIEULPIEUP - 0x9E73: 0xC5DC, //HANGUL SYLLABLE IEUNG E RIEULSIOS - 0x9E74: 0xC5DD, //HANGUL SYLLABLE IEUNG E RIEULTHIEUTH - 0x9E75: 0xC5DE, //HANGUL SYLLABLE IEUNG E RIEULPHIEUPH - 0x9E76: 0xC5DF, //HANGUL SYLLABLE IEUNG E RIEULHIEUH - 0x9E77: 0xC5E2, //HANGUL SYLLABLE IEUNG E PIEUPSIOS - 0x9E78: 0xC5E4, //HANGUL SYLLABLE IEUNG E SSANGSIOS - 0x9E79: 0xC5E6, //HANGUL SYLLABLE IEUNG E CIEUC - 0x9E7A: 0xC5E7, //HANGUL SYLLABLE IEUNG E CHIEUCH - 0x9E81: 0xC5E8, //HANGUL SYLLABLE IEUNG E KHIEUKH - 0x9E82: 0xC5E9, //HANGUL SYLLABLE IEUNG E THIEUTH - 0x9E83: 0xC5EA, //HANGUL SYLLABLE IEUNG E PHIEUPH - 0x9E84: 0xC5EB, //HANGUL SYLLABLE IEUNG E HIEUH - 0x9E85: 0xC5EF, //HANGUL SYLLABLE IEUNG YEO KIYEOKSIOS - 0x9E86: 0xC5F1, //HANGUL SYLLABLE IEUNG YEO NIEUNCIEUC - 0x9E87: 0xC5F2, //HANGUL SYLLABLE IEUNG YEO NIEUNHIEUH - 0x9E88: 0xC5F3, //HANGUL SYLLABLE IEUNG YEO TIKEUT - 0x9E89: 0xC5F5, //HANGUL SYLLABLE IEUNG YEO RIEULKIYEOK - 0x9E8A: 0xC5F8, //HANGUL SYLLABLE IEUNG YEO RIEULSIOS - 0x9E8B: 0xC5F9, //HANGUL SYLLABLE IEUNG YEO RIEULTHIEUTH - 0x9E8C: 0xC5FA, //HANGUL SYLLABLE IEUNG YEO RIEULPHIEUPH - 0x9E8D: 0xC5FB, //HANGUL SYLLABLE IEUNG YEO RIEULHIEUH - 0x9E8E: 0xC602, //HANGUL SYLLABLE IEUNG YEO CIEUC - 0x9E8F: 0xC603, //HANGUL SYLLABLE IEUNG YEO CHIEUCH - 0x9E90: 0xC604, //HANGUL SYLLABLE IEUNG YEO KHIEUKH - 0x9E91: 0xC609, //HANGUL SYLLABLE IEUNG YE KIYEOK - 0x9E92: 0xC60A, //HANGUL SYLLABLE IEUNG YE SSANGKIYEOK - 0x9E93: 0xC60B, //HANGUL SYLLABLE IEUNG YE KIYEOKSIOS - 0x9E94: 0xC60D, //HANGUL SYLLABLE IEUNG YE NIEUNCIEUC - 0x9E95: 0xC60E, //HANGUL SYLLABLE IEUNG YE NIEUNHIEUH - 0x9E96: 0xC60F, //HANGUL SYLLABLE IEUNG YE TIKEUT - 0x9E97: 0xC611, //HANGUL SYLLABLE IEUNG YE RIEULKIYEOK - 0x9E98: 0xC612, //HANGUL SYLLABLE IEUNG YE RIEULMIEUM - 0x9E99: 0xC613, //HANGUL SYLLABLE IEUNG YE RIEULPIEUP - 0x9E9A: 0xC614, //HANGUL SYLLABLE IEUNG YE RIEULSIOS - 0x9E9B: 0xC615, //HANGUL SYLLABLE IEUNG YE RIEULTHIEUTH - 0x9E9C: 0xC616, //HANGUL SYLLABLE IEUNG YE RIEULPHIEUPH - 0x9E9D: 0xC617, //HANGUL SYLLABLE IEUNG YE RIEULHIEUH - 0x9E9E: 0xC61A, //HANGUL SYLLABLE IEUNG YE PIEUPSIOS - 0x9E9F: 0xC61D, //HANGUL SYLLABLE IEUNG YE IEUNG - 0x9EA0: 0xC61E, //HANGUL SYLLABLE IEUNG YE CIEUC - 0x9EA1: 0xC61F, //HANGUL SYLLABLE IEUNG YE CHIEUCH - 0x9EA2: 0xC620, //HANGUL SYLLABLE IEUNG YE KHIEUKH - 0x9EA3: 0xC621, //HANGUL SYLLABLE IEUNG YE THIEUTH - 0x9EA4: 0xC622, //HANGUL SYLLABLE IEUNG YE PHIEUPH - 0x9EA5: 0xC623, //HANGUL SYLLABLE IEUNG YE HIEUH - 0x9EA6: 0xC626, //HANGUL SYLLABLE IEUNG O SSANGKIYEOK - 0x9EA7: 0xC627, //HANGUL SYLLABLE IEUNG O KIYEOKSIOS - 0x9EA8: 0xC629, //HANGUL SYLLABLE IEUNG O NIEUNCIEUC - 0x9EA9: 0xC62A, //HANGUL SYLLABLE IEUNG O NIEUNHIEUH - 0x9EAA: 0xC62B, //HANGUL SYLLABLE IEUNG O TIKEUT - 0x9EAB: 0xC62F, //HANGUL SYLLABLE IEUNG O RIEULPIEUP - 0x9EAC: 0xC631, //HANGUL SYLLABLE IEUNG O RIEULTHIEUTH - 0x9EAD: 0xC632, //HANGUL SYLLABLE IEUNG O RIEULPHIEUPH - 0x9EAE: 0xC636, //HANGUL SYLLABLE IEUNG O PIEUPSIOS - 0x9EAF: 0xC638, //HANGUL SYLLABLE IEUNG O SSANGSIOS - 0x9EB0: 0xC63A, //HANGUL SYLLABLE IEUNG O CIEUC - 0x9EB1: 0xC63C, //HANGUL SYLLABLE IEUNG O KHIEUKH - 0x9EB2: 0xC63D, //HANGUL SYLLABLE IEUNG O THIEUTH - 0x9EB3: 0xC63E, //HANGUL SYLLABLE IEUNG O PHIEUPH - 0x9EB4: 0xC63F, //HANGUL SYLLABLE IEUNG O HIEUH - 0x9EB5: 0xC642, //HANGUL SYLLABLE IEUNG WA SSANGKIYEOK - 0x9EB6: 0xC643, //HANGUL SYLLABLE IEUNG WA KIYEOKSIOS - 0x9EB7: 0xC645, //HANGUL SYLLABLE IEUNG WA NIEUNCIEUC - 0x9EB8: 0xC646, //HANGUL SYLLABLE IEUNG WA NIEUNHIEUH - 0x9EB9: 0xC647, //HANGUL SYLLABLE IEUNG WA TIKEUT - 0x9EBA: 0xC649, //HANGUL SYLLABLE IEUNG WA RIEULKIYEOK - 0x9EBB: 0xC64A, //HANGUL SYLLABLE IEUNG WA RIEULMIEUM - 0x9EBC: 0xC64B, //HANGUL SYLLABLE IEUNG WA RIEULPIEUP - 0x9EBD: 0xC64C, //HANGUL SYLLABLE IEUNG WA RIEULSIOS - 0x9EBE: 0xC64D, //HANGUL SYLLABLE IEUNG WA RIEULTHIEUTH - 0x9EBF: 0xC64E, //HANGUL SYLLABLE IEUNG WA RIEULPHIEUPH - 0x9EC0: 0xC64F, //HANGUL SYLLABLE IEUNG WA RIEULHIEUH - 0x9EC1: 0xC652, //HANGUL SYLLABLE IEUNG WA PIEUPSIOS - 0x9EC2: 0xC656, //HANGUL SYLLABLE IEUNG WA CIEUC - 0x9EC3: 0xC657, //HANGUL SYLLABLE IEUNG WA CHIEUCH - 0x9EC4: 0xC658, //HANGUL SYLLABLE IEUNG WA KHIEUKH - 0x9EC5: 0xC659, //HANGUL SYLLABLE IEUNG WA THIEUTH - 0x9EC6: 0xC65A, //HANGUL SYLLABLE IEUNG WA PHIEUPH - 0x9EC7: 0xC65B, //HANGUL SYLLABLE IEUNG WA HIEUH - 0x9EC8: 0xC65E, //HANGUL SYLLABLE IEUNG WAE SSANGKIYEOK - 0x9EC9: 0xC65F, //HANGUL SYLLABLE IEUNG WAE KIYEOKSIOS - 0x9ECA: 0xC661, //HANGUL SYLLABLE IEUNG WAE NIEUNCIEUC - 0x9ECB: 0xC662, //HANGUL SYLLABLE IEUNG WAE NIEUNHIEUH - 0x9ECC: 0xC663, //HANGUL SYLLABLE IEUNG WAE TIKEUT - 0x9ECD: 0xC664, //HANGUL SYLLABLE IEUNG WAE RIEUL - 0x9ECE: 0xC665, //HANGUL SYLLABLE IEUNG WAE RIEULKIYEOK - 0x9ECF: 0xC666, //HANGUL SYLLABLE IEUNG WAE RIEULMIEUM - 0x9ED0: 0xC667, //HANGUL SYLLABLE IEUNG WAE RIEULPIEUP - 0x9ED1: 0xC668, //HANGUL SYLLABLE IEUNG WAE RIEULSIOS - 0x9ED2: 0xC669, //HANGUL SYLLABLE IEUNG WAE RIEULTHIEUTH - 0x9ED3: 0xC66A, //HANGUL SYLLABLE IEUNG WAE RIEULPHIEUPH - 0x9ED4: 0xC66B, //HANGUL SYLLABLE IEUNG WAE RIEULHIEUH - 0x9ED5: 0xC66D, //HANGUL SYLLABLE IEUNG WAE PIEUP - 0x9ED6: 0xC66E, //HANGUL SYLLABLE IEUNG WAE PIEUPSIOS - 0x9ED7: 0xC670, //HANGUL SYLLABLE IEUNG WAE SSANGSIOS - 0x9ED8: 0xC672, //HANGUL SYLLABLE IEUNG WAE CIEUC - 0x9ED9: 0xC673, //HANGUL SYLLABLE IEUNG WAE CHIEUCH - 0x9EDA: 0xC674, //HANGUL SYLLABLE IEUNG WAE KHIEUKH - 0x9EDB: 0xC675, //HANGUL SYLLABLE IEUNG WAE THIEUTH - 0x9EDC: 0xC676, //HANGUL SYLLABLE IEUNG WAE PHIEUPH - 0x9EDD: 0xC677, //HANGUL SYLLABLE IEUNG WAE HIEUH - 0x9EDE: 0xC67A, //HANGUL SYLLABLE IEUNG OE SSANGKIYEOK - 0x9EDF: 0xC67B, //HANGUL SYLLABLE IEUNG OE KIYEOKSIOS - 0x9EE0: 0xC67D, //HANGUL SYLLABLE IEUNG OE NIEUNCIEUC - 0x9EE1: 0xC67E, //HANGUL SYLLABLE IEUNG OE NIEUNHIEUH - 0x9EE2: 0xC67F, //HANGUL SYLLABLE IEUNG OE TIKEUT - 0x9EE3: 0xC681, //HANGUL SYLLABLE IEUNG OE RIEULKIYEOK - 0x9EE4: 0xC682, //HANGUL SYLLABLE IEUNG OE RIEULMIEUM - 0x9EE5: 0xC683, //HANGUL SYLLABLE IEUNG OE RIEULPIEUP - 0x9EE6: 0xC684, //HANGUL SYLLABLE IEUNG OE RIEULSIOS - 0x9EE7: 0xC685, //HANGUL SYLLABLE IEUNG OE RIEULTHIEUTH - 0x9EE8: 0xC686, //HANGUL SYLLABLE IEUNG OE RIEULPHIEUPH - 0x9EE9: 0xC687, //HANGUL SYLLABLE IEUNG OE RIEULHIEUH - 0x9EEA: 0xC68A, //HANGUL SYLLABLE IEUNG OE PIEUPSIOS - 0x9EEB: 0xC68C, //HANGUL SYLLABLE IEUNG OE SSANGSIOS - 0x9EEC: 0xC68E, //HANGUL SYLLABLE IEUNG OE CIEUC - 0x9EED: 0xC68F, //HANGUL SYLLABLE IEUNG OE CHIEUCH - 0x9EEE: 0xC690, //HANGUL SYLLABLE IEUNG OE KHIEUKH - 0x9EEF: 0xC691, //HANGUL SYLLABLE IEUNG OE THIEUTH - 0x9EF0: 0xC692, //HANGUL SYLLABLE IEUNG OE PHIEUPH - 0x9EF1: 0xC693, //HANGUL SYLLABLE IEUNG OE HIEUH - 0x9EF2: 0xC696, //HANGUL SYLLABLE IEUNG YO SSANGKIYEOK - 0x9EF3: 0xC697, //HANGUL SYLLABLE IEUNG YO KIYEOKSIOS - 0x9EF4: 0xC699, //HANGUL SYLLABLE IEUNG YO NIEUNCIEUC - 0x9EF5: 0xC69A, //HANGUL SYLLABLE IEUNG YO NIEUNHIEUH - 0x9EF6: 0xC69B, //HANGUL SYLLABLE IEUNG YO TIKEUT - 0x9EF7: 0xC69D, //HANGUL SYLLABLE IEUNG YO RIEULKIYEOK - 0x9EF8: 0xC69E, //HANGUL SYLLABLE IEUNG YO RIEULMIEUM - 0x9EF9: 0xC69F, //HANGUL SYLLABLE IEUNG YO RIEULPIEUP - 0x9EFA: 0xC6A0, //HANGUL SYLLABLE IEUNG YO RIEULSIOS - 0x9EFB: 0xC6A1, //HANGUL SYLLABLE IEUNG YO RIEULTHIEUTH - 0x9EFC: 0xC6A2, //HANGUL SYLLABLE IEUNG YO RIEULPHIEUPH - 0x9EFD: 0xC6A3, //HANGUL SYLLABLE IEUNG YO RIEULHIEUH - 0x9EFE: 0xC6A6, //HANGUL SYLLABLE IEUNG YO PIEUPSIOS - 0x9F41: 0xC6A8, //HANGUL SYLLABLE IEUNG YO SSANGSIOS - 0x9F42: 0xC6AA, //HANGUL SYLLABLE IEUNG YO CIEUC - 0x9F43: 0xC6AB, //HANGUL SYLLABLE IEUNG YO CHIEUCH - 0x9F44: 0xC6AC, //HANGUL SYLLABLE IEUNG YO KHIEUKH - 0x9F45: 0xC6AD, //HANGUL SYLLABLE IEUNG YO THIEUTH - 0x9F46: 0xC6AE, //HANGUL SYLLABLE IEUNG YO PHIEUPH - 0x9F47: 0xC6AF, //HANGUL SYLLABLE IEUNG YO HIEUH - 0x9F48: 0xC6B2, //HANGUL SYLLABLE IEUNG U SSANGKIYEOK - 0x9F49: 0xC6B3, //HANGUL SYLLABLE IEUNG U KIYEOKSIOS - 0x9F4A: 0xC6B5, //HANGUL SYLLABLE IEUNG U NIEUNCIEUC - 0x9F4B: 0xC6B6, //HANGUL SYLLABLE IEUNG U NIEUNHIEUH - 0x9F4C: 0xC6B7, //HANGUL SYLLABLE IEUNG U TIKEUT - 0x9F4D: 0xC6BB, //HANGUL SYLLABLE IEUNG U RIEULPIEUP - 0x9F4E: 0xC6BC, //HANGUL SYLLABLE IEUNG U RIEULSIOS - 0x9F4F: 0xC6BD, //HANGUL SYLLABLE IEUNG U RIEULTHIEUTH - 0x9F50: 0xC6BE, //HANGUL SYLLABLE IEUNG U RIEULPHIEUPH - 0x9F51: 0xC6BF, //HANGUL SYLLABLE IEUNG U RIEULHIEUH - 0x9F52: 0xC6C2, //HANGUL SYLLABLE IEUNG U PIEUPSIOS - 0x9F53: 0xC6C4, //HANGUL SYLLABLE IEUNG U SSANGSIOS - 0x9F54: 0xC6C6, //HANGUL SYLLABLE IEUNG U CIEUC - 0x9F55: 0xC6C7, //HANGUL SYLLABLE IEUNG U CHIEUCH - 0x9F56: 0xC6C8, //HANGUL SYLLABLE IEUNG U KHIEUKH - 0x9F57: 0xC6C9, //HANGUL SYLLABLE IEUNG U THIEUTH - 0x9F58: 0xC6CA, //HANGUL SYLLABLE IEUNG U PHIEUPH - 0x9F59: 0xC6CB, //HANGUL SYLLABLE IEUNG U HIEUH - 0x9F5A: 0xC6CE, //HANGUL SYLLABLE IEUNG WEO SSANGKIYEOK - 0x9F61: 0xC6CF, //HANGUL SYLLABLE IEUNG WEO KIYEOKSIOS - 0x9F62: 0xC6D1, //HANGUL SYLLABLE IEUNG WEO NIEUNCIEUC - 0x9F63: 0xC6D2, //HANGUL SYLLABLE IEUNG WEO NIEUNHIEUH - 0x9F64: 0xC6D3, //HANGUL SYLLABLE IEUNG WEO TIKEUT - 0x9F65: 0xC6D5, //HANGUL SYLLABLE IEUNG WEO RIEULKIYEOK - 0x9F66: 0xC6D6, //HANGUL SYLLABLE IEUNG WEO RIEULMIEUM - 0x9F67: 0xC6D7, //HANGUL SYLLABLE IEUNG WEO RIEULPIEUP - 0x9F68: 0xC6D8, //HANGUL SYLLABLE IEUNG WEO RIEULSIOS - 0x9F69: 0xC6D9, //HANGUL SYLLABLE IEUNG WEO RIEULTHIEUTH - 0x9F6A: 0xC6DA, //HANGUL SYLLABLE IEUNG WEO RIEULPHIEUPH - 0x9F6B: 0xC6DB, //HANGUL SYLLABLE IEUNG WEO RIEULHIEUH - 0x9F6C: 0xC6DE, //HANGUL SYLLABLE IEUNG WEO PIEUPSIOS - 0x9F6D: 0xC6DF, //HANGUL SYLLABLE IEUNG WEO SIOS - 0x9F6E: 0xC6E2, //HANGUL SYLLABLE IEUNG WEO CIEUC - 0x9F6F: 0xC6E3, //HANGUL SYLLABLE IEUNG WEO CHIEUCH - 0x9F70: 0xC6E4, //HANGUL SYLLABLE IEUNG WEO KHIEUKH - 0x9F71: 0xC6E5, //HANGUL SYLLABLE IEUNG WEO THIEUTH - 0x9F72: 0xC6E6, //HANGUL SYLLABLE IEUNG WEO PHIEUPH - 0x9F73: 0xC6E7, //HANGUL SYLLABLE IEUNG WEO HIEUH - 0x9F74: 0xC6EA, //HANGUL SYLLABLE IEUNG WE SSANGKIYEOK - 0x9F75: 0xC6EB, //HANGUL SYLLABLE IEUNG WE KIYEOKSIOS - 0x9F76: 0xC6ED, //HANGUL SYLLABLE IEUNG WE NIEUNCIEUC - 0x9F77: 0xC6EE, //HANGUL SYLLABLE IEUNG WE NIEUNHIEUH - 0x9F78: 0xC6EF, //HANGUL SYLLABLE IEUNG WE TIKEUT - 0x9F79: 0xC6F1, //HANGUL SYLLABLE IEUNG WE RIEULKIYEOK - 0x9F7A: 0xC6F2, //HANGUL SYLLABLE IEUNG WE RIEULMIEUM - 0x9F81: 0xC6F3, //HANGUL SYLLABLE IEUNG WE RIEULPIEUP - 0x9F82: 0xC6F4, //HANGUL SYLLABLE IEUNG WE RIEULSIOS - 0x9F83: 0xC6F5, //HANGUL SYLLABLE IEUNG WE RIEULTHIEUTH - 0x9F84: 0xC6F6, //HANGUL SYLLABLE IEUNG WE RIEULPHIEUPH - 0x9F85: 0xC6F7, //HANGUL SYLLABLE IEUNG WE RIEULHIEUH - 0x9F86: 0xC6FA, //HANGUL SYLLABLE IEUNG WE PIEUPSIOS - 0x9F87: 0xC6FB, //HANGUL SYLLABLE IEUNG WE SIOS - 0x9F88: 0xC6FC, //HANGUL SYLLABLE IEUNG WE SSANGSIOS - 0x9F89: 0xC6FE, //HANGUL SYLLABLE IEUNG WE CIEUC - 0x9F8A: 0xC6FF, //HANGUL SYLLABLE IEUNG WE CHIEUCH - 0x9F8B: 0xC700, //HANGUL SYLLABLE IEUNG WE KHIEUKH - 0x9F8C: 0xC701, //HANGUL SYLLABLE IEUNG WE THIEUTH - 0x9F8D: 0xC702, //HANGUL SYLLABLE IEUNG WE PHIEUPH - 0x9F8E: 0xC703, //HANGUL SYLLABLE IEUNG WE HIEUH - 0x9F8F: 0xC706, //HANGUL SYLLABLE IEUNG WI SSANGKIYEOK - 0x9F90: 0xC707, //HANGUL SYLLABLE IEUNG WI KIYEOKSIOS - 0x9F91: 0xC709, //HANGUL SYLLABLE IEUNG WI NIEUNCIEUC - 0x9F92: 0xC70A, //HANGUL SYLLABLE IEUNG WI NIEUNHIEUH - 0x9F93: 0xC70B, //HANGUL SYLLABLE IEUNG WI TIKEUT - 0x9F94: 0xC70D, //HANGUL SYLLABLE IEUNG WI RIEULKIYEOK - 0x9F95: 0xC70E, //HANGUL SYLLABLE IEUNG WI RIEULMIEUM - 0x9F96: 0xC70F, //HANGUL SYLLABLE IEUNG WI RIEULPIEUP - 0x9F97: 0xC710, //HANGUL SYLLABLE IEUNG WI RIEULSIOS - 0x9F98: 0xC711, //HANGUL SYLLABLE IEUNG WI RIEULTHIEUTH - 0x9F99: 0xC712, //HANGUL SYLLABLE IEUNG WI RIEULPHIEUPH - 0x9F9A: 0xC713, //HANGUL SYLLABLE IEUNG WI RIEULHIEUH - 0x9F9B: 0xC716, //HANGUL SYLLABLE IEUNG WI PIEUPSIOS - 0x9F9C: 0xC718, //HANGUL SYLLABLE IEUNG WI SSANGSIOS - 0x9F9D: 0xC71A, //HANGUL SYLLABLE IEUNG WI CIEUC - 0x9F9E: 0xC71B, //HANGUL SYLLABLE IEUNG WI CHIEUCH - 0x9F9F: 0xC71C, //HANGUL SYLLABLE IEUNG WI KHIEUKH - 0x9FA0: 0xC71D, //HANGUL SYLLABLE IEUNG WI THIEUTH - 0x9FA1: 0xC71E, //HANGUL SYLLABLE IEUNG WI PHIEUPH - 0x9FA2: 0xC71F, //HANGUL SYLLABLE IEUNG WI HIEUH - 0x9FA3: 0xC722, //HANGUL SYLLABLE IEUNG YU SSANGKIYEOK - 0x9FA4: 0xC723, //HANGUL SYLLABLE IEUNG YU KIYEOKSIOS - 0x9FA5: 0xC725, //HANGUL SYLLABLE IEUNG YU NIEUNCIEUC - 0x9FA6: 0xC726, //HANGUL SYLLABLE IEUNG YU NIEUNHIEUH - 0x9FA7: 0xC727, //HANGUL SYLLABLE IEUNG YU TIKEUT - 0x9FA8: 0xC729, //HANGUL SYLLABLE IEUNG YU RIEULKIYEOK - 0x9FA9: 0xC72A, //HANGUL SYLLABLE IEUNG YU RIEULMIEUM - 0x9FAA: 0xC72B, //HANGUL SYLLABLE IEUNG YU RIEULPIEUP - 0x9FAB: 0xC72C, //HANGUL SYLLABLE IEUNG YU RIEULSIOS - 0x9FAC: 0xC72D, //HANGUL SYLLABLE IEUNG YU RIEULTHIEUTH - 0x9FAD: 0xC72E, //HANGUL SYLLABLE IEUNG YU RIEULPHIEUPH - 0x9FAE: 0xC72F, //HANGUL SYLLABLE IEUNG YU RIEULHIEUH - 0x9FAF: 0xC732, //HANGUL SYLLABLE IEUNG YU PIEUPSIOS - 0x9FB0: 0xC734, //HANGUL SYLLABLE IEUNG YU SSANGSIOS - 0x9FB1: 0xC736, //HANGUL SYLLABLE IEUNG YU CIEUC - 0x9FB2: 0xC738, //HANGUL SYLLABLE IEUNG YU KHIEUKH - 0x9FB3: 0xC739, //HANGUL SYLLABLE IEUNG YU THIEUTH - 0x9FB4: 0xC73A, //HANGUL SYLLABLE IEUNG YU PHIEUPH - 0x9FB5: 0xC73B, //HANGUL SYLLABLE IEUNG YU HIEUH - 0x9FB6: 0xC73E, //HANGUL SYLLABLE IEUNG EU SSANGKIYEOK - 0x9FB7: 0xC73F, //HANGUL SYLLABLE IEUNG EU KIYEOKSIOS - 0x9FB8: 0xC741, //HANGUL SYLLABLE IEUNG EU NIEUNCIEUC - 0x9FB9: 0xC742, //HANGUL SYLLABLE IEUNG EU NIEUNHIEUH - 0x9FBA: 0xC743, //HANGUL SYLLABLE IEUNG EU TIKEUT - 0x9FBB: 0xC745, //HANGUL SYLLABLE IEUNG EU RIEULKIYEOK - 0x9FBC: 0xC746, //HANGUL SYLLABLE IEUNG EU RIEULMIEUM - 0x9FBD: 0xC747, //HANGUL SYLLABLE IEUNG EU RIEULPIEUP - 0x9FBE: 0xC748, //HANGUL SYLLABLE IEUNG EU RIEULSIOS - 0x9FBF: 0xC749, //HANGUL SYLLABLE IEUNG EU RIEULTHIEUTH - 0x9FC0: 0xC74B, //HANGUL SYLLABLE IEUNG EU RIEULHIEUH - 0x9FC1: 0xC74E, //HANGUL SYLLABLE IEUNG EU PIEUPSIOS - 0x9FC2: 0xC750, //HANGUL SYLLABLE IEUNG EU SSANGSIOS - 0x9FC3: 0xC759, //HANGUL SYLLABLE IEUNG YI KIYEOK - 0x9FC4: 0xC75A, //HANGUL SYLLABLE IEUNG YI SSANGKIYEOK - 0x9FC5: 0xC75B, //HANGUL SYLLABLE IEUNG YI KIYEOKSIOS - 0x9FC6: 0xC75D, //HANGUL SYLLABLE IEUNG YI NIEUNCIEUC - 0x9FC7: 0xC75E, //HANGUL SYLLABLE IEUNG YI NIEUNHIEUH - 0x9FC8: 0xC75F, //HANGUL SYLLABLE IEUNG YI TIKEUT - 0x9FC9: 0xC761, //HANGUL SYLLABLE IEUNG YI RIEULKIYEOK - 0x9FCA: 0xC762, //HANGUL SYLLABLE IEUNG YI RIEULMIEUM - 0x9FCB: 0xC763, //HANGUL SYLLABLE IEUNG YI RIEULPIEUP - 0x9FCC: 0xC764, //HANGUL SYLLABLE IEUNG YI RIEULSIOS - 0x9FCD: 0xC765, //HANGUL SYLLABLE IEUNG YI RIEULTHIEUTH - 0x9FCE: 0xC766, //HANGUL SYLLABLE IEUNG YI RIEULPHIEUPH - 0x9FCF: 0xC767, //HANGUL SYLLABLE IEUNG YI RIEULHIEUH - 0x9FD0: 0xC769, //HANGUL SYLLABLE IEUNG YI PIEUP - 0x9FD1: 0xC76A, //HANGUL SYLLABLE IEUNG YI PIEUPSIOS - 0x9FD2: 0xC76C, //HANGUL SYLLABLE IEUNG YI SSANGSIOS - 0x9FD3: 0xC76D, //HANGUL SYLLABLE IEUNG YI IEUNG - 0x9FD4: 0xC76E, //HANGUL SYLLABLE IEUNG YI CIEUC - 0x9FD5: 0xC76F, //HANGUL SYLLABLE IEUNG YI CHIEUCH - 0x9FD6: 0xC770, //HANGUL SYLLABLE IEUNG YI KHIEUKH - 0x9FD7: 0xC771, //HANGUL SYLLABLE IEUNG YI THIEUTH - 0x9FD8: 0xC772, //HANGUL SYLLABLE IEUNG YI PHIEUPH - 0x9FD9: 0xC773, //HANGUL SYLLABLE IEUNG YI HIEUH - 0x9FDA: 0xC776, //HANGUL SYLLABLE IEUNG I SSANGKIYEOK - 0x9FDB: 0xC777, //HANGUL SYLLABLE IEUNG I KIYEOKSIOS - 0x9FDC: 0xC779, //HANGUL SYLLABLE IEUNG I NIEUNCIEUC - 0x9FDD: 0xC77A, //HANGUL SYLLABLE IEUNG I NIEUNHIEUH - 0x9FDE: 0xC77B, //HANGUL SYLLABLE IEUNG I TIKEUT - 0x9FDF: 0xC77F, //HANGUL SYLLABLE IEUNG I RIEULPIEUP - 0x9FE0: 0xC780, //HANGUL SYLLABLE IEUNG I RIEULSIOS - 0x9FE1: 0xC781, //HANGUL SYLLABLE IEUNG I RIEULTHIEUTH - 0x9FE2: 0xC782, //HANGUL SYLLABLE IEUNG I RIEULPHIEUPH - 0x9FE3: 0xC786, //HANGUL SYLLABLE IEUNG I PIEUPSIOS - 0x9FE4: 0xC78B, //HANGUL SYLLABLE IEUNG I CHIEUCH - 0x9FE5: 0xC78C, //HANGUL SYLLABLE IEUNG I KHIEUKH - 0x9FE6: 0xC78D, //HANGUL SYLLABLE IEUNG I THIEUTH - 0x9FE7: 0xC78F, //HANGUL SYLLABLE IEUNG I HIEUH - 0x9FE8: 0xC792, //HANGUL SYLLABLE CIEUC A SSANGKIYEOK - 0x9FE9: 0xC793, //HANGUL SYLLABLE CIEUC A KIYEOKSIOS - 0x9FEA: 0xC795, //HANGUL SYLLABLE CIEUC A NIEUNCIEUC - 0x9FEB: 0xC799, //HANGUL SYLLABLE CIEUC A RIEULKIYEOK - 0x9FEC: 0xC79B, //HANGUL SYLLABLE CIEUC A RIEULPIEUP - 0x9FED: 0xC79C, //HANGUL SYLLABLE CIEUC A RIEULSIOS - 0x9FEE: 0xC79D, //HANGUL SYLLABLE CIEUC A RIEULTHIEUTH - 0x9FEF: 0xC79E, //HANGUL SYLLABLE CIEUC A RIEULPHIEUPH - 0x9FF0: 0xC79F, //HANGUL SYLLABLE CIEUC A RIEULHIEUH - 0x9FF1: 0xC7A2, //HANGUL SYLLABLE CIEUC A PIEUPSIOS - 0x9FF2: 0xC7A7, //HANGUL SYLLABLE CIEUC A CHIEUCH - 0x9FF3: 0xC7A8, //HANGUL SYLLABLE CIEUC A KHIEUKH - 0x9FF4: 0xC7A9, //HANGUL SYLLABLE CIEUC A THIEUTH - 0x9FF5: 0xC7AA, //HANGUL SYLLABLE CIEUC A PHIEUPH - 0x9FF6: 0xC7AB, //HANGUL SYLLABLE CIEUC A HIEUH - 0x9FF7: 0xC7AE, //HANGUL SYLLABLE CIEUC AE SSANGKIYEOK - 0x9FF8: 0xC7AF, //HANGUL SYLLABLE CIEUC AE KIYEOKSIOS - 0x9FF9: 0xC7B1, //HANGUL SYLLABLE CIEUC AE NIEUNCIEUC - 0x9FFA: 0xC7B2, //HANGUL SYLLABLE CIEUC AE NIEUNHIEUH - 0x9FFB: 0xC7B3, //HANGUL SYLLABLE CIEUC AE TIKEUT - 0x9FFC: 0xC7B5, //HANGUL SYLLABLE CIEUC AE RIEULKIYEOK - 0x9FFD: 0xC7B6, //HANGUL SYLLABLE CIEUC AE RIEULMIEUM - 0x9FFE: 0xC7B7, //HANGUL SYLLABLE CIEUC AE RIEULPIEUP - 0xA041: 0xC7B8, //HANGUL SYLLABLE CIEUC AE RIEULSIOS - 0xA042: 0xC7B9, //HANGUL SYLLABLE CIEUC AE RIEULTHIEUTH - 0xA043: 0xC7BA, //HANGUL SYLLABLE CIEUC AE RIEULPHIEUPH - 0xA044: 0xC7BB, //HANGUL SYLLABLE CIEUC AE RIEULHIEUH - 0xA045: 0xC7BE, //HANGUL SYLLABLE CIEUC AE PIEUPSIOS - 0xA046: 0xC7C2, //HANGUL SYLLABLE CIEUC AE CIEUC - 0xA047: 0xC7C3, //HANGUL SYLLABLE CIEUC AE CHIEUCH - 0xA048: 0xC7C4, //HANGUL SYLLABLE CIEUC AE KHIEUKH - 0xA049: 0xC7C5, //HANGUL SYLLABLE CIEUC AE THIEUTH - 0xA04A: 0xC7C6, //HANGUL SYLLABLE CIEUC AE PHIEUPH - 0xA04B: 0xC7C7, //HANGUL SYLLABLE CIEUC AE HIEUH - 0xA04C: 0xC7CA, //HANGUL SYLLABLE CIEUC YA SSANGKIYEOK - 0xA04D: 0xC7CB, //HANGUL SYLLABLE CIEUC YA KIYEOKSIOS - 0xA04E: 0xC7CD, //HANGUL SYLLABLE CIEUC YA NIEUNCIEUC - 0xA04F: 0xC7CF, //HANGUL SYLLABLE CIEUC YA TIKEUT - 0xA050: 0xC7D1, //HANGUL SYLLABLE CIEUC YA RIEULKIYEOK - 0xA051: 0xC7D2, //HANGUL SYLLABLE CIEUC YA RIEULMIEUM - 0xA052: 0xC7D3, //HANGUL SYLLABLE CIEUC YA RIEULPIEUP - 0xA053: 0xC7D4, //HANGUL SYLLABLE CIEUC YA RIEULSIOS - 0xA054: 0xC7D5, //HANGUL SYLLABLE CIEUC YA RIEULTHIEUTH - 0xA055: 0xC7D6, //HANGUL SYLLABLE CIEUC YA RIEULPHIEUPH - 0xA056: 0xC7D7, //HANGUL SYLLABLE CIEUC YA RIEULHIEUH - 0xA057: 0xC7D9, //HANGUL SYLLABLE CIEUC YA PIEUP - 0xA058: 0xC7DA, //HANGUL SYLLABLE CIEUC YA PIEUPSIOS - 0xA059: 0xC7DB, //HANGUL SYLLABLE CIEUC YA SIOS - 0xA05A: 0xC7DC, //HANGUL SYLLABLE CIEUC YA SSANGSIOS - 0xA061: 0xC7DE, //HANGUL SYLLABLE CIEUC YA CIEUC - 0xA062: 0xC7DF, //HANGUL SYLLABLE CIEUC YA CHIEUCH - 0xA063: 0xC7E0, //HANGUL SYLLABLE CIEUC YA KHIEUKH - 0xA064: 0xC7E1, //HANGUL SYLLABLE CIEUC YA THIEUTH - 0xA065: 0xC7E2, //HANGUL SYLLABLE CIEUC YA PHIEUPH - 0xA066: 0xC7E3, //HANGUL SYLLABLE CIEUC YA HIEUH - 0xA067: 0xC7E5, //HANGUL SYLLABLE CIEUC YAE KIYEOK - 0xA068: 0xC7E6, //HANGUL SYLLABLE CIEUC YAE SSANGKIYEOK - 0xA069: 0xC7E7, //HANGUL SYLLABLE CIEUC YAE KIYEOKSIOS - 0xA06A: 0xC7E9, //HANGUL SYLLABLE CIEUC YAE NIEUNCIEUC - 0xA06B: 0xC7EA, //HANGUL SYLLABLE CIEUC YAE NIEUNHIEUH - 0xA06C: 0xC7EB, //HANGUL SYLLABLE CIEUC YAE TIKEUT - 0xA06D: 0xC7ED, //HANGUL SYLLABLE CIEUC YAE RIEULKIYEOK - 0xA06E: 0xC7EE, //HANGUL SYLLABLE CIEUC YAE RIEULMIEUM - 0xA06F: 0xC7EF, //HANGUL SYLLABLE CIEUC YAE RIEULPIEUP - 0xA070: 0xC7F0, //HANGUL SYLLABLE CIEUC YAE RIEULSIOS - 0xA071: 0xC7F1, //HANGUL SYLLABLE CIEUC YAE RIEULTHIEUTH - 0xA072: 0xC7F2, //HANGUL SYLLABLE CIEUC YAE RIEULPHIEUPH - 0xA073: 0xC7F3, //HANGUL SYLLABLE CIEUC YAE RIEULHIEUH - 0xA074: 0xC7F4, //HANGUL SYLLABLE CIEUC YAE MIEUM - 0xA075: 0xC7F5, //HANGUL SYLLABLE CIEUC YAE PIEUP - 0xA076: 0xC7F6, //HANGUL SYLLABLE CIEUC YAE PIEUPSIOS - 0xA077: 0xC7F7, //HANGUL SYLLABLE CIEUC YAE SIOS - 0xA078: 0xC7F8, //HANGUL SYLLABLE CIEUC YAE SSANGSIOS - 0xA079: 0xC7F9, //HANGUL SYLLABLE CIEUC YAE IEUNG - 0xA07A: 0xC7FA, //HANGUL SYLLABLE CIEUC YAE CIEUC - 0xA081: 0xC7FB, //HANGUL SYLLABLE CIEUC YAE CHIEUCH - 0xA082: 0xC7FC, //HANGUL SYLLABLE CIEUC YAE KHIEUKH - 0xA083: 0xC7FD, //HANGUL SYLLABLE CIEUC YAE THIEUTH - 0xA084: 0xC7FE, //HANGUL SYLLABLE CIEUC YAE PHIEUPH - 0xA085: 0xC7FF, //HANGUL SYLLABLE CIEUC YAE HIEUH - 0xA086: 0xC802, //HANGUL SYLLABLE CIEUC EO SSANGKIYEOK - 0xA087: 0xC803, //HANGUL SYLLABLE CIEUC EO KIYEOKSIOS - 0xA088: 0xC805, //HANGUL SYLLABLE CIEUC EO NIEUNCIEUC - 0xA089: 0xC806, //HANGUL SYLLABLE CIEUC EO NIEUNHIEUH - 0xA08A: 0xC807, //HANGUL SYLLABLE CIEUC EO TIKEUT - 0xA08B: 0xC809, //HANGUL SYLLABLE CIEUC EO RIEULKIYEOK - 0xA08C: 0xC80B, //HANGUL SYLLABLE CIEUC EO RIEULPIEUP - 0xA08D: 0xC80C, //HANGUL SYLLABLE CIEUC EO RIEULSIOS - 0xA08E: 0xC80D, //HANGUL SYLLABLE CIEUC EO RIEULTHIEUTH - 0xA08F: 0xC80E, //HANGUL SYLLABLE CIEUC EO RIEULPHIEUPH - 0xA090: 0xC80F, //HANGUL SYLLABLE CIEUC EO RIEULHIEUH - 0xA091: 0xC812, //HANGUL SYLLABLE CIEUC EO PIEUPSIOS - 0xA092: 0xC814, //HANGUL SYLLABLE CIEUC EO SSANGSIOS - 0xA093: 0xC817, //HANGUL SYLLABLE CIEUC EO CHIEUCH - 0xA094: 0xC818, //HANGUL SYLLABLE CIEUC EO KHIEUKH - 0xA095: 0xC819, //HANGUL SYLLABLE CIEUC EO THIEUTH - 0xA096: 0xC81A, //HANGUL SYLLABLE CIEUC EO PHIEUPH - 0xA097: 0xC81B, //HANGUL SYLLABLE CIEUC EO HIEUH - 0xA098: 0xC81E, //HANGUL SYLLABLE CIEUC E SSANGKIYEOK - 0xA099: 0xC81F, //HANGUL SYLLABLE CIEUC E KIYEOKSIOS - 0xA09A: 0xC821, //HANGUL SYLLABLE CIEUC E NIEUNCIEUC - 0xA09B: 0xC822, //HANGUL SYLLABLE CIEUC E NIEUNHIEUH - 0xA09C: 0xC823, //HANGUL SYLLABLE CIEUC E TIKEUT - 0xA09D: 0xC825, //HANGUL SYLLABLE CIEUC E RIEULKIYEOK - 0xA09E: 0xC826, //HANGUL SYLLABLE CIEUC E RIEULMIEUM - 0xA09F: 0xC827, //HANGUL SYLLABLE CIEUC E RIEULPIEUP - 0xA0A0: 0xC828, //HANGUL SYLLABLE CIEUC E RIEULSIOS - 0xA0A1: 0xC829, //HANGUL SYLLABLE CIEUC E RIEULTHIEUTH - 0xA0A2: 0xC82A, //HANGUL SYLLABLE CIEUC E RIEULPHIEUPH - 0xA0A3: 0xC82B, //HANGUL SYLLABLE CIEUC E RIEULHIEUH - 0xA0A4: 0xC82E, //HANGUL SYLLABLE CIEUC E PIEUPSIOS - 0xA0A5: 0xC830, //HANGUL SYLLABLE CIEUC E SSANGSIOS - 0xA0A6: 0xC832, //HANGUL SYLLABLE CIEUC E CIEUC - 0xA0A7: 0xC833, //HANGUL SYLLABLE CIEUC E CHIEUCH - 0xA0A8: 0xC834, //HANGUL SYLLABLE CIEUC E KHIEUKH - 0xA0A9: 0xC835, //HANGUL SYLLABLE CIEUC E THIEUTH - 0xA0AA: 0xC836, //HANGUL SYLLABLE CIEUC E PHIEUPH - 0xA0AB: 0xC837, //HANGUL SYLLABLE CIEUC E HIEUH - 0xA0AC: 0xC839, //HANGUL SYLLABLE CIEUC YEO KIYEOK - 0xA0AD: 0xC83A, //HANGUL SYLLABLE CIEUC YEO SSANGKIYEOK - 0xA0AE: 0xC83B, //HANGUL SYLLABLE CIEUC YEO KIYEOKSIOS - 0xA0AF: 0xC83D, //HANGUL SYLLABLE CIEUC YEO NIEUNCIEUC - 0xA0B0: 0xC83E, //HANGUL SYLLABLE CIEUC YEO NIEUNHIEUH - 0xA0B1: 0xC83F, //HANGUL SYLLABLE CIEUC YEO TIKEUT - 0xA0B2: 0xC841, //HANGUL SYLLABLE CIEUC YEO RIEULKIYEOK - 0xA0B3: 0xC842, //HANGUL SYLLABLE CIEUC YEO RIEULMIEUM - 0xA0B4: 0xC843, //HANGUL SYLLABLE CIEUC YEO RIEULPIEUP - 0xA0B5: 0xC844, //HANGUL SYLLABLE CIEUC YEO RIEULSIOS - 0xA0B6: 0xC845, //HANGUL SYLLABLE CIEUC YEO RIEULTHIEUTH - 0xA0B7: 0xC846, //HANGUL SYLLABLE CIEUC YEO RIEULPHIEUPH - 0xA0B8: 0xC847, //HANGUL SYLLABLE CIEUC YEO RIEULHIEUH - 0xA0B9: 0xC84A, //HANGUL SYLLABLE CIEUC YEO PIEUPSIOS - 0xA0BA: 0xC84B, //HANGUL SYLLABLE CIEUC YEO SIOS - 0xA0BB: 0xC84E, //HANGUL SYLLABLE CIEUC YEO CIEUC - 0xA0BC: 0xC84F, //HANGUL SYLLABLE CIEUC YEO CHIEUCH - 0xA0BD: 0xC850, //HANGUL SYLLABLE CIEUC YEO KHIEUKH - 0xA0BE: 0xC851, //HANGUL SYLLABLE CIEUC YEO THIEUTH - 0xA0BF: 0xC852, //HANGUL SYLLABLE CIEUC YEO PHIEUPH - 0xA0C0: 0xC853, //HANGUL SYLLABLE CIEUC YEO HIEUH - 0xA0C1: 0xC855, //HANGUL SYLLABLE CIEUC YE KIYEOK - 0xA0C2: 0xC856, //HANGUL SYLLABLE CIEUC YE SSANGKIYEOK - 0xA0C3: 0xC857, //HANGUL SYLLABLE CIEUC YE KIYEOKSIOS - 0xA0C4: 0xC858, //HANGUL SYLLABLE CIEUC YE NIEUN - 0xA0C5: 0xC859, //HANGUL SYLLABLE CIEUC YE NIEUNCIEUC - 0xA0C6: 0xC85A, //HANGUL SYLLABLE CIEUC YE NIEUNHIEUH - 0xA0C7: 0xC85B, //HANGUL SYLLABLE CIEUC YE TIKEUT - 0xA0C8: 0xC85C, //HANGUL SYLLABLE CIEUC YE RIEUL - 0xA0C9: 0xC85D, //HANGUL SYLLABLE CIEUC YE RIEULKIYEOK - 0xA0CA: 0xC85E, //HANGUL SYLLABLE CIEUC YE RIEULMIEUM - 0xA0CB: 0xC85F, //HANGUL SYLLABLE CIEUC YE RIEULPIEUP - 0xA0CC: 0xC860, //HANGUL SYLLABLE CIEUC YE RIEULSIOS - 0xA0CD: 0xC861, //HANGUL SYLLABLE CIEUC YE RIEULTHIEUTH - 0xA0CE: 0xC862, //HANGUL SYLLABLE CIEUC YE RIEULPHIEUPH - 0xA0CF: 0xC863, //HANGUL SYLLABLE CIEUC YE RIEULHIEUH - 0xA0D0: 0xC864, //HANGUL SYLLABLE CIEUC YE MIEUM - 0xA0D1: 0xC865, //HANGUL SYLLABLE CIEUC YE PIEUP - 0xA0D2: 0xC866, //HANGUL SYLLABLE CIEUC YE PIEUPSIOS - 0xA0D3: 0xC867, //HANGUL SYLLABLE CIEUC YE SIOS - 0xA0D4: 0xC868, //HANGUL SYLLABLE CIEUC YE SSANGSIOS - 0xA0D5: 0xC869, //HANGUL SYLLABLE CIEUC YE IEUNG - 0xA0D6: 0xC86A, //HANGUL SYLLABLE CIEUC YE CIEUC - 0xA0D7: 0xC86B, //HANGUL SYLLABLE CIEUC YE CHIEUCH - 0xA0D8: 0xC86C, //HANGUL SYLLABLE CIEUC YE KHIEUKH - 0xA0D9: 0xC86D, //HANGUL SYLLABLE CIEUC YE THIEUTH - 0xA0DA: 0xC86E, //HANGUL SYLLABLE CIEUC YE PHIEUPH - 0xA0DB: 0xC86F, //HANGUL SYLLABLE CIEUC YE HIEUH - 0xA0DC: 0xC872, //HANGUL SYLLABLE CIEUC O SSANGKIYEOK - 0xA0DD: 0xC873, //HANGUL SYLLABLE CIEUC O KIYEOKSIOS - 0xA0DE: 0xC875, //HANGUL SYLLABLE CIEUC O NIEUNCIEUC - 0xA0DF: 0xC876, //HANGUL SYLLABLE CIEUC O NIEUNHIEUH - 0xA0E0: 0xC877, //HANGUL SYLLABLE CIEUC O TIKEUT - 0xA0E1: 0xC879, //HANGUL SYLLABLE CIEUC O RIEULKIYEOK - 0xA0E2: 0xC87B, //HANGUL SYLLABLE CIEUC O RIEULPIEUP - 0xA0E3: 0xC87C, //HANGUL SYLLABLE CIEUC O RIEULSIOS - 0xA0E4: 0xC87D, //HANGUL SYLLABLE CIEUC O RIEULTHIEUTH - 0xA0E5: 0xC87E, //HANGUL SYLLABLE CIEUC O RIEULPHIEUPH - 0xA0E6: 0xC87F, //HANGUL SYLLABLE CIEUC O RIEULHIEUH - 0xA0E7: 0xC882, //HANGUL SYLLABLE CIEUC O PIEUPSIOS - 0xA0E8: 0xC884, //HANGUL SYLLABLE CIEUC O SSANGSIOS - 0xA0E9: 0xC888, //HANGUL SYLLABLE CIEUC O KHIEUKH - 0xA0EA: 0xC889, //HANGUL SYLLABLE CIEUC O THIEUTH - 0xA0EB: 0xC88A, //HANGUL SYLLABLE CIEUC O PHIEUPH - 0xA0EC: 0xC88E, //HANGUL SYLLABLE CIEUC WA SSANGKIYEOK - 0xA0ED: 0xC88F, //HANGUL SYLLABLE CIEUC WA KIYEOKSIOS - 0xA0EE: 0xC890, //HANGUL SYLLABLE CIEUC WA NIEUN - 0xA0EF: 0xC891, //HANGUL SYLLABLE CIEUC WA NIEUNCIEUC - 0xA0F0: 0xC892, //HANGUL SYLLABLE CIEUC WA NIEUNHIEUH - 0xA0F1: 0xC893, //HANGUL SYLLABLE CIEUC WA TIKEUT - 0xA0F2: 0xC895, //HANGUL SYLLABLE CIEUC WA RIEULKIYEOK - 0xA0F3: 0xC896, //HANGUL SYLLABLE CIEUC WA RIEULMIEUM - 0xA0F4: 0xC897, //HANGUL SYLLABLE CIEUC WA RIEULPIEUP - 0xA0F5: 0xC898, //HANGUL SYLLABLE CIEUC WA RIEULSIOS - 0xA0F6: 0xC899, //HANGUL SYLLABLE CIEUC WA RIEULTHIEUTH - 0xA0F7: 0xC89A, //HANGUL SYLLABLE CIEUC WA RIEULPHIEUPH - 0xA0F8: 0xC89B, //HANGUL SYLLABLE CIEUC WA RIEULHIEUH - 0xA0F9: 0xC89C, //HANGUL SYLLABLE CIEUC WA MIEUM - 0xA0FA: 0xC89E, //HANGUL SYLLABLE CIEUC WA PIEUPSIOS - 0xA0FB: 0xC8A0, //HANGUL SYLLABLE CIEUC WA SSANGSIOS - 0xA0FC: 0xC8A2, //HANGUL SYLLABLE CIEUC WA CIEUC - 0xA0FD: 0xC8A3, //HANGUL SYLLABLE CIEUC WA CHIEUCH - 0xA0FE: 0xC8A4, //HANGUL SYLLABLE CIEUC WA KHIEUKH - 0xA141: 0xC8A5, //HANGUL SYLLABLE CIEUC WA THIEUTH - 0xA142: 0xC8A6, //HANGUL SYLLABLE CIEUC WA PHIEUPH - 0xA143: 0xC8A7, //HANGUL SYLLABLE CIEUC WA HIEUH - 0xA144: 0xC8A9, //HANGUL SYLLABLE CIEUC WAE KIYEOK - 0xA145: 0xC8AA, //HANGUL SYLLABLE CIEUC WAE SSANGKIYEOK - 0xA146: 0xC8AB, //HANGUL SYLLABLE CIEUC WAE KIYEOKSIOS - 0xA147: 0xC8AC, //HANGUL SYLLABLE CIEUC WAE NIEUN - 0xA148: 0xC8AD, //HANGUL SYLLABLE CIEUC WAE NIEUNCIEUC - 0xA149: 0xC8AE, //HANGUL SYLLABLE CIEUC WAE NIEUNHIEUH - 0xA14A: 0xC8AF, //HANGUL SYLLABLE CIEUC WAE TIKEUT - 0xA14B: 0xC8B0, //HANGUL SYLLABLE CIEUC WAE RIEUL - 0xA14C: 0xC8B1, //HANGUL SYLLABLE CIEUC WAE RIEULKIYEOK - 0xA14D: 0xC8B2, //HANGUL SYLLABLE CIEUC WAE RIEULMIEUM - 0xA14E: 0xC8B3, //HANGUL SYLLABLE CIEUC WAE RIEULPIEUP - 0xA14F: 0xC8B4, //HANGUL SYLLABLE CIEUC WAE RIEULSIOS - 0xA150: 0xC8B5, //HANGUL SYLLABLE CIEUC WAE RIEULTHIEUTH - 0xA151: 0xC8B6, //HANGUL SYLLABLE CIEUC WAE RIEULPHIEUPH - 0xA152: 0xC8B7, //HANGUL SYLLABLE CIEUC WAE RIEULHIEUH - 0xA153: 0xC8B8, //HANGUL SYLLABLE CIEUC WAE MIEUM - 0xA154: 0xC8B9, //HANGUL SYLLABLE CIEUC WAE PIEUP - 0xA155: 0xC8BA, //HANGUL SYLLABLE CIEUC WAE PIEUPSIOS - 0xA156: 0xC8BB, //HANGUL SYLLABLE CIEUC WAE SIOS - 0xA157: 0xC8BE, //HANGUL SYLLABLE CIEUC WAE CIEUC - 0xA158: 0xC8BF, //HANGUL SYLLABLE CIEUC WAE CHIEUCH - 0xA159: 0xC8C0, //HANGUL SYLLABLE CIEUC WAE KHIEUKH - 0xA15A: 0xC8C1, //HANGUL SYLLABLE CIEUC WAE THIEUTH - 0xA161: 0xC8C2, //HANGUL SYLLABLE CIEUC WAE PHIEUPH - 0xA162: 0xC8C3, //HANGUL SYLLABLE CIEUC WAE HIEUH - 0xA163: 0xC8C5, //HANGUL SYLLABLE CIEUC OE KIYEOK - 0xA164: 0xC8C6, //HANGUL SYLLABLE CIEUC OE SSANGKIYEOK - 0xA165: 0xC8C7, //HANGUL SYLLABLE CIEUC OE KIYEOKSIOS - 0xA166: 0xC8C9, //HANGUL SYLLABLE CIEUC OE NIEUNCIEUC - 0xA167: 0xC8CA, //HANGUL SYLLABLE CIEUC OE NIEUNHIEUH - 0xA168: 0xC8CB, //HANGUL SYLLABLE CIEUC OE TIKEUT - 0xA169: 0xC8CD, //HANGUL SYLLABLE CIEUC OE RIEULKIYEOK - 0xA16A: 0xC8CE, //HANGUL SYLLABLE CIEUC OE RIEULMIEUM - 0xA16B: 0xC8CF, //HANGUL SYLLABLE CIEUC OE RIEULPIEUP - 0xA16C: 0xC8D0, //HANGUL SYLLABLE CIEUC OE RIEULSIOS - 0xA16D: 0xC8D1, //HANGUL SYLLABLE CIEUC OE RIEULTHIEUTH - 0xA16E: 0xC8D2, //HANGUL SYLLABLE CIEUC OE RIEULPHIEUPH - 0xA16F: 0xC8D3, //HANGUL SYLLABLE CIEUC OE RIEULHIEUH - 0xA170: 0xC8D6, //HANGUL SYLLABLE CIEUC OE PIEUPSIOS - 0xA171: 0xC8D8, //HANGUL SYLLABLE CIEUC OE SSANGSIOS - 0xA172: 0xC8DA, //HANGUL SYLLABLE CIEUC OE CIEUC - 0xA173: 0xC8DB, //HANGUL SYLLABLE CIEUC OE CHIEUCH - 0xA174: 0xC8DC, //HANGUL SYLLABLE CIEUC OE KHIEUKH - 0xA175: 0xC8DD, //HANGUL SYLLABLE CIEUC OE THIEUTH - 0xA176: 0xC8DE, //HANGUL SYLLABLE CIEUC OE PHIEUPH - 0xA177: 0xC8DF, //HANGUL SYLLABLE CIEUC OE HIEUH - 0xA178: 0xC8E2, //HANGUL SYLLABLE CIEUC YO SSANGKIYEOK - 0xA179: 0xC8E3, //HANGUL SYLLABLE CIEUC YO KIYEOKSIOS - 0xA17A: 0xC8E5, //HANGUL SYLLABLE CIEUC YO NIEUNCIEUC - 0xA181: 0xC8E6, //HANGUL SYLLABLE CIEUC YO NIEUNHIEUH - 0xA182: 0xC8E7, //HANGUL SYLLABLE CIEUC YO TIKEUT - 0xA183: 0xC8E8, //HANGUL SYLLABLE CIEUC YO RIEUL - 0xA184: 0xC8E9, //HANGUL SYLLABLE CIEUC YO RIEULKIYEOK - 0xA185: 0xC8EA, //HANGUL SYLLABLE CIEUC YO RIEULMIEUM - 0xA186: 0xC8EB, //HANGUL SYLLABLE CIEUC YO RIEULPIEUP - 0xA187: 0xC8EC, //HANGUL SYLLABLE CIEUC YO RIEULSIOS - 0xA188: 0xC8ED, //HANGUL SYLLABLE CIEUC YO RIEULTHIEUTH - 0xA189: 0xC8EE, //HANGUL SYLLABLE CIEUC YO RIEULPHIEUPH - 0xA18A: 0xC8EF, //HANGUL SYLLABLE CIEUC YO RIEULHIEUH - 0xA18B: 0xC8F0, //HANGUL SYLLABLE CIEUC YO MIEUM - 0xA18C: 0xC8F1, //HANGUL SYLLABLE CIEUC YO PIEUP - 0xA18D: 0xC8F2, //HANGUL SYLLABLE CIEUC YO PIEUPSIOS - 0xA18E: 0xC8F3, //HANGUL SYLLABLE CIEUC YO SIOS - 0xA18F: 0xC8F4, //HANGUL SYLLABLE CIEUC YO SSANGSIOS - 0xA190: 0xC8F6, //HANGUL SYLLABLE CIEUC YO CIEUC - 0xA191: 0xC8F7, //HANGUL SYLLABLE CIEUC YO CHIEUCH - 0xA192: 0xC8F8, //HANGUL SYLLABLE CIEUC YO KHIEUKH - 0xA193: 0xC8F9, //HANGUL SYLLABLE CIEUC YO THIEUTH - 0xA194: 0xC8FA, //HANGUL SYLLABLE CIEUC YO PHIEUPH - 0xA195: 0xC8FB, //HANGUL SYLLABLE CIEUC YO HIEUH - 0xA196: 0xC8FE, //HANGUL SYLLABLE CIEUC U SSANGKIYEOK - 0xA197: 0xC8FF, //HANGUL SYLLABLE CIEUC U KIYEOKSIOS - 0xA198: 0xC901, //HANGUL SYLLABLE CIEUC U NIEUNCIEUC - 0xA199: 0xC902, //HANGUL SYLLABLE CIEUC U NIEUNHIEUH - 0xA19A: 0xC903, //HANGUL SYLLABLE CIEUC U TIKEUT - 0xA19B: 0xC907, //HANGUL SYLLABLE CIEUC U RIEULPIEUP - 0xA19C: 0xC908, //HANGUL SYLLABLE CIEUC U RIEULSIOS - 0xA19D: 0xC909, //HANGUL SYLLABLE CIEUC U RIEULTHIEUTH - 0xA19E: 0xC90A, //HANGUL SYLLABLE CIEUC U RIEULPHIEUPH - 0xA19F: 0xC90B, //HANGUL SYLLABLE CIEUC U RIEULHIEUH - 0xA1A0: 0xC90E, //HANGUL SYLLABLE CIEUC U PIEUPSIOS - 0xA1A1: 0x3000, //IDEOGRAPHIC SPACE - 0xA1A2: 0x3001, //IDEOGRAPHIC COMMA - 0xA1A3: 0x3002, //IDEOGRAPHIC FULL STOP - 0xA1A4: 0x00B7, //MIDDLE DOT - 0xA1A5: 0x2025, //TWO DOT LEADER - 0xA1A6: 0x2026, //HORIZONTAL ELLIPSIS - 0xA1A7: 0x00A8, //DIAERESIS - 0xA1A8: 0x3003, //DITTO MARK - 0xA1A9: 0x00AD, //SOFT HYPHEN - 0xA1AA: 0x2015, //HORIZONTAL BAR - 0xA1AB: 0x2225, //PARALLEL TO - 0xA1AC: 0xFF3C, //FULLWIDTH REVERSE SOLIDUS - 0xA1AD: 0x223C, //TILDE OPERATOR - 0xA1AE: 0x2018, //LEFT SINGLE QUOTATION MARK - 0xA1AF: 0x2019, //RIGHT SINGLE QUOTATION MARK - 0xA1B0: 0x201C, //LEFT DOUBLE QUOTATION MARK - 0xA1B1: 0x201D, //RIGHT DOUBLE QUOTATION MARK - 0xA1B2: 0x3014, //LEFT TORTOISE SHELL BRACKET - 0xA1B3: 0x3015, //RIGHT TORTOISE SHELL BRACKET - 0xA1B4: 0x3008, //LEFT ANGLE BRACKET - 0xA1B5: 0x3009, //RIGHT ANGLE BRACKET - 0xA1B6: 0x300A, //LEFT DOUBLE ANGLE BRACKET - 0xA1B7: 0x300B, //RIGHT DOUBLE ANGLE BRACKET - 0xA1B8: 0x300C, //LEFT CORNER BRACKET - 0xA1B9: 0x300D, //RIGHT CORNER BRACKET - 0xA1BA: 0x300E, //LEFT WHITE CORNER BRACKET - 0xA1BB: 0x300F, //RIGHT WHITE CORNER BRACKET - 0xA1BC: 0x3010, //LEFT BLACK LENTICULAR BRACKET - 0xA1BD: 0x3011, //RIGHT BLACK LENTICULAR BRACKET - 0xA1BE: 0x00B1, //PLUS-MINUS SIGN - 0xA1BF: 0x00D7, //MULTIPLICATION SIGN - 0xA1C0: 0x00F7, //DIVISION SIGN - 0xA1C1: 0x2260, //NOT EQUAL TO - 0xA1C2: 0x2264, //LESS-THAN OR EQUAL TO - 0xA1C3: 0x2265, //GREATER-THAN OR EQUAL TO - 0xA1C4: 0x221E, //INFINITY - 0xA1C5: 0x2234, //THEREFORE - 0xA1C6: 0x00B0, //DEGREE SIGN - 0xA1C7: 0x2032, //PRIME - 0xA1C8: 0x2033, //DOUBLE PRIME - 0xA1C9: 0x2103, //DEGREE CELSIUS - 0xA1CA: 0x212B, //ANGSTROM SIGN - 0xA1CB: 0xFFE0, //FULLWIDTH CENT SIGN - 0xA1CC: 0xFFE1, //FULLWIDTH POUND SIGN - 0xA1CD: 0xFFE5, //FULLWIDTH YEN SIGN - 0xA1CE: 0x2642, //MALE SIGN - 0xA1CF: 0x2640, //FEMALE SIGN - 0xA1D0: 0x2220, //ANGLE - 0xA1D1: 0x22A5, //UP TACK - 0xA1D2: 0x2312, //ARC - 0xA1D3: 0x2202, //PARTIAL DIFFERENTIAL - 0xA1D4: 0x2207, //NABLA - 0xA1D5: 0x2261, //IDENTICAL TO - 0xA1D6: 0x2252, //APPROXIMATELY EQUAL TO OR THE IMAGE OF - 0xA1D7: 0x00A7, //SECTION SIGN - 0xA1D8: 0x203B, //REFERENCE MARK - 0xA1D9: 0x2606, //WHITE STAR - 0xA1DA: 0x2605, //BLACK STAR - 0xA1DB: 0x25CB, //WHITE CIRCLE - 0xA1DC: 0x25CF, //BLACK CIRCLE - 0xA1DD: 0x25CE, //BULLSEYE - 0xA1DE: 0x25C7, //WHITE DIAMOND - 0xA1DF: 0x25C6, //BLACK DIAMOND - 0xA1E0: 0x25A1, //WHITE SQUARE - 0xA1E1: 0x25A0, //BLACK SQUARE - 0xA1E2: 0x25B3, //WHITE UP-POINTING TRIANGLE - 0xA1E3: 0x25B2, //BLACK UP-POINTING TRIANGLE - 0xA1E4: 0x25BD, //WHITE DOWN-POINTING TRIANGLE - 0xA1E5: 0x25BC, //BLACK DOWN-POINTING TRIANGLE - 0xA1E6: 0x2192, //RIGHTWARDS ARROW - 0xA1E7: 0x2190, //LEFTWARDS ARROW - 0xA1E8: 0x2191, //UPWARDS ARROW - 0xA1E9: 0x2193, //DOWNWARDS ARROW - 0xA1EA: 0x2194, //LEFT RIGHT ARROW - 0xA1EB: 0x3013, //GETA MARK - 0xA1EC: 0x226A, //MUCH LESS-THAN - 0xA1ED: 0x226B, //MUCH GREATER-THAN - 0xA1EE: 0x221A, //SQUARE ROOT - 0xA1EF: 0x223D, //REVERSED TILDE - 0xA1F0: 0x221D, //PROPORTIONAL TO - 0xA1F1: 0x2235, //BECAUSE - 0xA1F2: 0x222B, //INTEGRAL - 0xA1F3: 0x222C, //DOUBLE INTEGRAL - 0xA1F4: 0x2208, //ELEMENT OF - 0xA1F5: 0x220B, //CONTAINS AS MEMBER - 0xA1F6: 0x2286, //SUBSET OF OR EQUAL TO - 0xA1F7: 0x2287, //SUPERSET OF OR EQUAL TO - 0xA1F8: 0x2282, //SUBSET OF - 0xA1F9: 0x2283, //SUPERSET OF - 0xA1FA: 0x222A, //UNION - 0xA1FB: 0x2229, //INTERSECTION - 0xA1FC: 0x2227, //LOGICAL AND - 0xA1FD: 0x2228, //LOGICAL OR - 0xA1FE: 0xFFE2, //FULLWIDTH NOT SIGN - 0xA241: 0xC910, //HANGUL SYLLABLE CIEUC U SSANGSIOS - 0xA242: 0xC912, //HANGUL SYLLABLE CIEUC U CIEUC - 0xA243: 0xC913, //HANGUL SYLLABLE CIEUC U CHIEUCH - 0xA244: 0xC914, //HANGUL SYLLABLE CIEUC U KHIEUKH - 0xA245: 0xC915, //HANGUL SYLLABLE CIEUC U THIEUTH - 0xA246: 0xC916, //HANGUL SYLLABLE CIEUC U PHIEUPH - 0xA247: 0xC917, //HANGUL SYLLABLE CIEUC U HIEUH - 0xA248: 0xC919, //HANGUL SYLLABLE CIEUC WEO KIYEOK - 0xA249: 0xC91A, //HANGUL SYLLABLE CIEUC WEO SSANGKIYEOK - 0xA24A: 0xC91B, //HANGUL SYLLABLE CIEUC WEO KIYEOKSIOS - 0xA24B: 0xC91C, //HANGUL SYLLABLE CIEUC WEO NIEUN - 0xA24C: 0xC91D, //HANGUL SYLLABLE CIEUC WEO NIEUNCIEUC - 0xA24D: 0xC91E, //HANGUL SYLLABLE CIEUC WEO NIEUNHIEUH - 0xA24E: 0xC91F, //HANGUL SYLLABLE CIEUC WEO TIKEUT - 0xA24F: 0xC920, //HANGUL SYLLABLE CIEUC WEO RIEUL - 0xA250: 0xC921, //HANGUL SYLLABLE CIEUC WEO RIEULKIYEOK - 0xA251: 0xC922, //HANGUL SYLLABLE CIEUC WEO RIEULMIEUM - 0xA252: 0xC923, //HANGUL SYLLABLE CIEUC WEO RIEULPIEUP - 0xA253: 0xC924, //HANGUL SYLLABLE CIEUC WEO RIEULSIOS - 0xA254: 0xC925, //HANGUL SYLLABLE CIEUC WEO RIEULTHIEUTH - 0xA255: 0xC926, //HANGUL SYLLABLE CIEUC WEO RIEULPHIEUPH - 0xA256: 0xC927, //HANGUL SYLLABLE CIEUC WEO RIEULHIEUH - 0xA257: 0xC928, //HANGUL SYLLABLE CIEUC WEO MIEUM - 0xA258: 0xC929, //HANGUL SYLLABLE CIEUC WEO PIEUP - 0xA259: 0xC92A, //HANGUL SYLLABLE CIEUC WEO PIEUPSIOS - 0xA25A: 0xC92B, //HANGUL SYLLABLE CIEUC WEO SIOS - 0xA261: 0xC92D, //HANGUL SYLLABLE CIEUC WEO IEUNG - 0xA262: 0xC92E, //HANGUL SYLLABLE CIEUC WEO CIEUC - 0xA263: 0xC92F, //HANGUL SYLLABLE CIEUC WEO CHIEUCH - 0xA264: 0xC930, //HANGUL SYLLABLE CIEUC WEO KHIEUKH - 0xA265: 0xC931, //HANGUL SYLLABLE CIEUC WEO THIEUTH - 0xA266: 0xC932, //HANGUL SYLLABLE CIEUC WEO PHIEUPH - 0xA267: 0xC933, //HANGUL SYLLABLE CIEUC WEO HIEUH - 0xA268: 0xC935, //HANGUL SYLLABLE CIEUC WE KIYEOK - 0xA269: 0xC936, //HANGUL SYLLABLE CIEUC WE SSANGKIYEOK - 0xA26A: 0xC937, //HANGUL SYLLABLE CIEUC WE KIYEOKSIOS - 0xA26B: 0xC938, //HANGUL SYLLABLE CIEUC WE NIEUN - 0xA26C: 0xC939, //HANGUL SYLLABLE CIEUC WE NIEUNCIEUC - 0xA26D: 0xC93A, //HANGUL SYLLABLE CIEUC WE NIEUNHIEUH - 0xA26E: 0xC93B, //HANGUL SYLLABLE CIEUC WE TIKEUT - 0xA26F: 0xC93C, //HANGUL SYLLABLE CIEUC WE RIEUL - 0xA270: 0xC93D, //HANGUL SYLLABLE CIEUC WE RIEULKIYEOK - 0xA271: 0xC93E, //HANGUL SYLLABLE CIEUC WE RIEULMIEUM - 0xA272: 0xC93F, //HANGUL SYLLABLE CIEUC WE RIEULPIEUP - 0xA273: 0xC940, //HANGUL SYLLABLE CIEUC WE RIEULSIOS - 0xA274: 0xC941, //HANGUL SYLLABLE CIEUC WE RIEULTHIEUTH - 0xA275: 0xC942, //HANGUL SYLLABLE CIEUC WE RIEULPHIEUPH - 0xA276: 0xC943, //HANGUL SYLLABLE CIEUC WE RIEULHIEUH - 0xA277: 0xC944, //HANGUL SYLLABLE CIEUC WE MIEUM - 0xA278: 0xC945, //HANGUL SYLLABLE CIEUC WE PIEUP - 0xA279: 0xC946, //HANGUL SYLLABLE CIEUC WE PIEUPSIOS - 0xA27A: 0xC947, //HANGUL SYLLABLE CIEUC WE SIOS - 0xA281: 0xC948, //HANGUL SYLLABLE CIEUC WE SSANGSIOS - 0xA282: 0xC949, //HANGUL SYLLABLE CIEUC WE IEUNG - 0xA283: 0xC94A, //HANGUL SYLLABLE CIEUC WE CIEUC - 0xA284: 0xC94B, //HANGUL SYLLABLE CIEUC WE CHIEUCH - 0xA285: 0xC94C, //HANGUL SYLLABLE CIEUC WE KHIEUKH - 0xA286: 0xC94D, //HANGUL SYLLABLE CIEUC WE THIEUTH - 0xA287: 0xC94E, //HANGUL SYLLABLE CIEUC WE PHIEUPH - 0xA288: 0xC94F, //HANGUL SYLLABLE CIEUC WE HIEUH - 0xA289: 0xC952, //HANGUL SYLLABLE CIEUC WI SSANGKIYEOK - 0xA28A: 0xC953, //HANGUL SYLLABLE CIEUC WI KIYEOKSIOS - 0xA28B: 0xC955, //HANGUL SYLLABLE CIEUC WI NIEUNCIEUC - 0xA28C: 0xC956, //HANGUL SYLLABLE CIEUC WI NIEUNHIEUH - 0xA28D: 0xC957, //HANGUL SYLLABLE CIEUC WI TIKEUT - 0xA28E: 0xC959, //HANGUL SYLLABLE CIEUC WI RIEULKIYEOK - 0xA28F: 0xC95A, //HANGUL SYLLABLE CIEUC WI RIEULMIEUM - 0xA290: 0xC95B, //HANGUL SYLLABLE CIEUC WI RIEULPIEUP - 0xA291: 0xC95C, //HANGUL SYLLABLE CIEUC WI RIEULSIOS - 0xA292: 0xC95D, //HANGUL SYLLABLE CIEUC WI RIEULTHIEUTH - 0xA293: 0xC95E, //HANGUL SYLLABLE CIEUC WI RIEULPHIEUPH - 0xA294: 0xC95F, //HANGUL SYLLABLE CIEUC WI RIEULHIEUH - 0xA295: 0xC962, //HANGUL SYLLABLE CIEUC WI PIEUPSIOS - 0xA296: 0xC964, //HANGUL SYLLABLE CIEUC WI SSANGSIOS - 0xA297: 0xC965, //HANGUL SYLLABLE CIEUC WI IEUNG - 0xA298: 0xC966, //HANGUL SYLLABLE CIEUC WI CIEUC - 0xA299: 0xC967, //HANGUL SYLLABLE CIEUC WI CHIEUCH - 0xA29A: 0xC968, //HANGUL SYLLABLE CIEUC WI KHIEUKH - 0xA29B: 0xC969, //HANGUL SYLLABLE CIEUC WI THIEUTH - 0xA29C: 0xC96A, //HANGUL SYLLABLE CIEUC WI PHIEUPH - 0xA29D: 0xC96B, //HANGUL SYLLABLE CIEUC WI HIEUH - 0xA29E: 0xC96D, //HANGUL SYLLABLE CIEUC YU KIYEOK - 0xA29F: 0xC96E, //HANGUL SYLLABLE CIEUC YU SSANGKIYEOK - 0xA2A0: 0xC96F, //HANGUL SYLLABLE CIEUC YU KIYEOKSIOS - 0xA2A1: 0x21D2, //RIGHTWARDS DOUBLE ARROW - 0xA2A2: 0x21D4, //LEFT RIGHT DOUBLE ARROW - 0xA2A3: 0x2200, //FOR ALL - 0xA2A4: 0x2203, //THERE EXISTS - 0xA2A5: 0x00B4, //ACUTE ACCENT - 0xA2A6: 0xFF5E, //FULLWIDTH TILDE - 0xA2A7: 0x02C7, //CARON - 0xA2A8: 0x02D8, //BREVE - 0xA2A9: 0x02DD, //DOUBLE ACUTE ACCENT - 0xA2AA: 0x02DA, //RING ABOVE - 0xA2AB: 0x02D9, //DOT ABOVE - 0xA2AC: 0x00B8, //CEDILLA - 0xA2AD: 0x02DB, //OGONEK - 0xA2AE: 0x00A1, //INVERTED EXCLAMATION MARK - 0xA2AF: 0x00BF, //INVERTED QUESTION MARK - 0xA2B0: 0x02D0, //MODIFIER LETTER TRIANGULAR COLON - 0xA2B1: 0x222E, //CONTOUR INTEGRAL - 0xA2B2: 0x2211, //N-ARY SUMMATION - 0xA2B3: 0x220F, //N-ARY PRODUCT - 0xA2B4: 0x00A4, //CURRENCY SIGN - 0xA2B5: 0x2109, //DEGREE FAHRENHEIT - 0xA2B6: 0x2030, //PER MILLE SIGN - 0xA2B7: 0x25C1, //WHITE LEFT-POINTING TRIANGLE - 0xA2B8: 0x25C0, //BLACK LEFT-POINTING TRIANGLE - 0xA2B9: 0x25B7, //WHITE RIGHT-POINTING TRIANGLE - 0xA2BA: 0x25B6, //BLACK RIGHT-POINTING TRIANGLE - 0xA2BB: 0x2664, //WHITE SPADE SUIT - 0xA2BC: 0x2660, //BLACK SPADE SUIT - 0xA2BD: 0x2661, //WHITE HEART SUIT - 0xA2BE: 0x2665, //BLACK HEART SUIT - 0xA2BF: 0x2667, //WHITE CLUB SUIT - 0xA2C0: 0x2663, //BLACK CLUB SUIT - 0xA2C1: 0x2299, //CIRCLED DOT OPERATOR - 0xA2C2: 0x25C8, //WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND - 0xA2C3: 0x25A3, //WHITE SQUARE CONTAINING BLACK SMALL SQUARE - 0xA2C4: 0x25D0, //CIRCLE WITH LEFT HALF BLACK - 0xA2C5: 0x25D1, //CIRCLE WITH RIGHT HALF BLACK - 0xA2C6: 0x2592, //MEDIUM SHADE - 0xA2C7: 0x25A4, //SQUARE WITH HORIZONTAL FILL - 0xA2C8: 0x25A5, //SQUARE WITH VERTICAL FILL - 0xA2C9: 0x25A8, //SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL - 0xA2CA: 0x25A7, //SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL - 0xA2CB: 0x25A6, //SQUARE WITH ORTHOGONAL CROSSHATCH FILL - 0xA2CC: 0x25A9, //SQUARE WITH DIAGONAL CROSSHATCH FILL - 0xA2CD: 0x2668, //HOT SPRINGS - 0xA2CE: 0x260F, //WHITE TELEPHONE - 0xA2CF: 0x260E, //BLACK TELEPHONE - 0xA2D0: 0x261C, //WHITE LEFT POINTING INDEX - 0xA2D1: 0x261E, //WHITE RIGHT POINTING INDEX - 0xA2D2: 0x00B6, //PILCROW SIGN - 0xA2D3: 0x2020, //DAGGER - 0xA2D4: 0x2021, //DOUBLE DAGGER - 0xA2D5: 0x2195, //UP DOWN ARROW - 0xA2D6: 0x2197, //NORTH EAST ARROW - 0xA2D7: 0x2199, //SOUTH WEST ARROW - 0xA2D8: 0x2196, //NORTH WEST ARROW - 0xA2D9: 0x2198, //SOUTH EAST ARROW - 0xA2DA: 0x266D, //MUSIC FLAT SIGN - 0xA2DB: 0x2669, //QUARTER NOTE - 0xA2DC: 0x266A, //EIGHTH NOTE - 0xA2DD: 0x266C, //BEAMED SIXTEENTH NOTES - 0xA2DE: 0x327F, //KOREAN STANDARD SYMBOL - 0xA2DF: 0x321C, //PARENTHESIZED HANGUL CIEUC U - 0xA2E0: 0x2116, //NUMERO SIGN - 0xA2E1: 0x33C7, //SQUARE CO - 0xA2E2: 0x2122, //TRADE MARK SIGN - 0xA2E3: 0x33C2, //SQUARE AM - 0xA2E4: 0x33D8, //SQUARE PM - 0xA2E5: 0x2121, //TELEPHONE SIGN - 0xA2E6: 0x20AC, //EURO SIGN - 0xA2E7: 0x00AE, //REGISTERED SIGN - 0xA341: 0xC971, //HANGUL SYLLABLE CIEUC YU NIEUNCIEUC - 0xA342: 0xC972, //HANGUL SYLLABLE CIEUC YU NIEUNHIEUH - 0xA343: 0xC973, //HANGUL SYLLABLE CIEUC YU TIKEUT - 0xA344: 0xC975, //HANGUL SYLLABLE CIEUC YU RIEULKIYEOK - 0xA345: 0xC976, //HANGUL SYLLABLE CIEUC YU RIEULMIEUM - 0xA346: 0xC977, //HANGUL SYLLABLE CIEUC YU RIEULPIEUP - 0xA347: 0xC978, //HANGUL SYLLABLE CIEUC YU RIEULSIOS - 0xA348: 0xC979, //HANGUL SYLLABLE CIEUC YU RIEULTHIEUTH - 0xA349: 0xC97A, //HANGUL SYLLABLE CIEUC YU RIEULPHIEUPH - 0xA34A: 0xC97B, //HANGUL SYLLABLE CIEUC YU RIEULHIEUH - 0xA34B: 0xC97D, //HANGUL SYLLABLE CIEUC YU PIEUP - 0xA34C: 0xC97E, //HANGUL SYLLABLE CIEUC YU PIEUPSIOS - 0xA34D: 0xC97F, //HANGUL SYLLABLE CIEUC YU SIOS - 0xA34E: 0xC980, //HANGUL SYLLABLE CIEUC YU SSANGSIOS - 0xA34F: 0xC981, //HANGUL SYLLABLE CIEUC YU IEUNG - 0xA350: 0xC982, //HANGUL SYLLABLE CIEUC YU CIEUC - 0xA351: 0xC983, //HANGUL SYLLABLE CIEUC YU CHIEUCH - 0xA352: 0xC984, //HANGUL SYLLABLE CIEUC YU KHIEUKH - 0xA353: 0xC985, //HANGUL SYLLABLE CIEUC YU THIEUTH - 0xA354: 0xC986, //HANGUL SYLLABLE CIEUC YU PHIEUPH - 0xA355: 0xC987, //HANGUL SYLLABLE CIEUC YU HIEUH - 0xA356: 0xC98A, //HANGUL SYLLABLE CIEUC EU SSANGKIYEOK - 0xA357: 0xC98B, //HANGUL SYLLABLE CIEUC EU KIYEOKSIOS - 0xA358: 0xC98D, //HANGUL SYLLABLE CIEUC EU NIEUNCIEUC - 0xA359: 0xC98E, //HANGUL SYLLABLE CIEUC EU NIEUNHIEUH - 0xA35A: 0xC98F, //HANGUL SYLLABLE CIEUC EU TIKEUT - 0xA361: 0xC991, //HANGUL SYLLABLE CIEUC EU RIEULKIYEOK - 0xA362: 0xC992, //HANGUL SYLLABLE CIEUC EU RIEULMIEUM - 0xA363: 0xC993, //HANGUL SYLLABLE CIEUC EU RIEULPIEUP - 0xA364: 0xC994, //HANGUL SYLLABLE CIEUC EU RIEULSIOS - 0xA365: 0xC995, //HANGUL SYLLABLE CIEUC EU RIEULTHIEUTH - 0xA366: 0xC996, //HANGUL SYLLABLE CIEUC EU RIEULPHIEUPH - 0xA367: 0xC997, //HANGUL SYLLABLE CIEUC EU RIEULHIEUH - 0xA368: 0xC99A, //HANGUL SYLLABLE CIEUC EU PIEUPSIOS - 0xA369: 0xC99C, //HANGUL SYLLABLE CIEUC EU SSANGSIOS - 0xA36A: 0xC99E, //HANGUL SYLLABLE CIEUC EU CIEUC - 0xA36B: 0xC99F, //HANGUL SYLLABLE CIEUC EU CHIEUCH - 0xA36C: 0xC9A0, //HANGUL SYLLABLE CIEUC EU KHIEUKH - 0xA36D: 0xC9A1, //HANGUL SYLLABLE CIEUC EU THIEUTH - 0xA36E: 0xC9A2, //HANGUL SYLLABLE CIEUC EU PHIEUPH - 0xA36F: 0xC9A3, //HANGUL SYLLABLE CIEUC EU HIEUH - 0xA370: 0xC9A4, //HANGUL SYLLABLE CIEUC YI - 0xA371: 0xC9A5, //HANGUL SYLLABLE CIEUC YI KIYEOK - 0xA372: 0xC9A6, //HANGUL SYLLABLE CIEUC YI SSANGKIYEOK - 0xA373: 0xC9A7, //HANGUL SYLLABLE CIEUC YI KIYEOKSIOS - 0xA374: 0xC9A8, //HANGUL SYLLABLE CIEUC YI NIEUN - 0xA375: 0xC9A9, //HANGUL SYLLABLE CIEUC YI NIEUNCIEUC - 0xA376: 0xC9AA, //HANGUL SYLLABLE CIEUC YI NIEUNHIEUH - 0xA377: 0xC9AB, //HANGUL SYLLABLE CIEUC YI TIKEUT - 0xA378: 0xC9AC, //HANGUL SYLLABLE CIEUC YI RIEUL - 0xA379: 0xC9AD, //HANGUL SYLLABLE CIEUC YI RIEULKIYEOK - 0xA37A: 0xC9AE, //HANGUL SYLLABLE CIEUC YI RIEULMIEUM - 0xA381: 0xC9AF, //HANGUL SYLLABLE CIEUC YI RIEULPIEUP - 0xA382: 0xC9B0, //HANGUL SYLLABLE CIEUC YI RIEULSIOS - 0xA383: 0xC9B1, //HANGUL SYLLABLE CIEUC YI RIEULTHIEUTH - 0xA384: 0xC9B2, //HANGUL SYLLABLE CIEUC YI RIEULPHIEUPH - 0xA385: 0xC9B3, //HANGUL SYLLABLE CIEUC YI RIEULHIEUH - 0xA386: 0xC9B4, //HANGUL SYLLABLE CIEUC YI MIEUM - 0xA387: 0xC9B5, //HANGUL SYLLABLE CIEUC YI PIEUP - 0xA388: 0xC9B6, //HANGUL SYLLABLE CIEUC YI PIEUPSIOS - 0xA389: 0xC9B7, //HANGUL SYLLABLE CIEUC YI SIOS - 0xA38A: 0xC9B8, //HANGUL SYLLABLE CIEUC YI SSANGSIOS - 0xA38B: 0xC9B9, //HANGUL SYLLABLE CIEUC YI IEUNG - 0xA38C: 0xC9BA, //HANGUL SYLLABLE CIEUC YI CIEUC - 0xA38D: 0xC9BB, //HANGUL SYLLABLE CIEUC YI CHIEUCH - 0xA38E: 0xC9BC, //HANGUL SYLLABLE CIEUC YI KHIEUKH - 0xA38F: 0xC9BD, //HANGUL SYLLABLE CIEUC YI THIEUTH - 0xA390: 0xC9BE, //HANGUL SYLLABLE CIEUC YI PHIEUPH - 0xA391: 0xC9BF, //HANGUL SYLLABLE CIEUC YI HIEUH - 0xA392: 0xC9C2, //HANGUL SYLLABLE CIEUC I SSANGKIYEOK - 0xA393: 0xC9C3, //HANGUL SYLLABLE CIEUC I KIYEOKSIOS - 0xA394: 0xC9C5, //HANGUL SYLLABLE CIEUC I NIEUNCIEUC - 0xA395: 0xC9C6, //HANGUL SYLLABLE CIEUC I NIEUNHIEUH - 0xA396: 0xC9C9, //HANGUL SYLLABLE CIEUC I RIEULKIYEOK - 0xA397: 0xC9CB, //HANGUL SYLLABLE CIEUC I RIEULPIEUP - 0xA398: 0xC9CC, //HANGUL SYLLABLE CIEUC I RIEULSIOS - 0xA399: 0xC9CD, //HANGUL SYLLABLE CIEUC I RIEULTHIEUTH - 0xA39A: 0xC9CE, //HANGUL SYLLABLE CIEUC I RIEULPHIEUPH - 0xA39B: 0xC9CF, //HANGUL SYLLABLE CIEUC I RIEULHIEUH - 0xA39C: 0xC9D2, //HANGUL SYLLABLE CIEUC I PIEUPSIOS - 0xA39D: 0xC9D4, //HANGUL SYLLABLE CIEUC I SSANGSIOS - 0xA39E: 0xC9D7, //HANGUL SYLLABLE CIEUC I CHIEUCH - 0xA39F: 0xC9D8, //HANGUL SYLLABLE CIEUC I KHIEUKH - 0xA3A0: 0xC9DB, //HANGUL SYLLABLE CIEUC I HIEUH - 0xA3A1: 0xFF01, //FULLWIDTH EXCLAMATION MARK - 0xA3A2: 0xFF02, //FULLWIDTH QUOTATION MARK - 0xA3A3: 0xFF03, //FULLWIDTH NUMBER SIGN - 0xA3A4: 0xFF04, //FULLWIDTH DOLLAR SIGN - 0xA3A5: 0xFF05, //FULLWIDTH PERCENT SIGN - 0xA3A6: 0xFF06, //FULLWIDTH AMPERSAND - 0xA3A7: 0xFF07, //FULLWIDTH APOSTROPHE - 0xA3A8: 0xFF08, //FULLWIDTH LEFT PARENTHESIS - 0xA3A9: 0xFF09, //FULLWIDTH RIGHT PARENTHESIS - 0xA3AA: 0xFF0A, //FULLWIDTH ASTERISK - 0xA3AB: 0xFF0B, //FULLWIDTH PLUS SIGN - 0xA3AC: 0xFF0C, //FULLWIDTH COMMA - 0xA3AD: 0xFF0D, //FULLWIDTH HYPHEN-MINUS - 0xA3AE: 0xFF0E, //FULLWIDTH FULL STOP - 0xA3AF: 0xFF0F, //FULLWIDTH SOLIDUS - 0xA3B0: 0xFF10, //FULLWIDTH DIGIT ZERO - 0xA3B1: 0xFF11, //FULLWIDTH DIGIT ONE - 0xA3B2: 0xFF12, //FULLWIDTH DIGIT TWO - 0xA3B3: 0xFF13, //FULLWIDTH DIGIT THREE - 0xA3B4: 0xFF14, //FULLWIDTH DIGIT FOUR - 0xA3B5: 0xFF15, //FULLWIDTH DIGIT FIVE - 0xA3B6: 0xFF16, //FULLWIDTH DIGIT SIX - 0xA3B7: 0xFF17, //FULLWIDTH DIGIT SEVEN - 0xA3B8: 0xFF18, //FULLWIDTH DIGIT EIGHT - 0xA3B9: 0xFF19, //FULLWIDTH DIGIT NINE - 0xA3BA: 0xFF1A, //FULLWIDTH COLON - 0xA3BB: 0xFF1B, //FULLWIDTH SEMICOLON - 0xA3BC: 0xFF1C, //FULLWIDTH LESS-THAN SIGN - 0xA3BD: 0xFF1D, //FULLWIDTH EQUALS SIGN - 0xA3BE: 0xFF1E, //FULLWIDTH GREATER-THAN SIGN - 0xA3BF: 0xFF1F, //FULLWIDTH QUESTION MARK - 0xA3C0: 0xFF20, //FULLWIDTH COMMERCIAL AT - 0xA3C1: 0xFF21, //FULLWIDTH LATIN CAPITAL LETTER A - 0xA3C2: 0xFF22, //FULLWIDTH LATIN CAPITAL LETTER B - 0xA3C3: 0xFF23, //FULLWIDTH LATIN CAPITAL LETTER C - 0xA3C4: 0xFF24, //FULLWIDTH LATIN CAPITAL LETTER D - 0xA3C5: 0xFF25, //FULLWIDTH LATIN CAPITAL LETTER E - 0xA3C6: 0xFF26, //FULLWIDTH LATIN CAPITAL LETTER F - 0xA3C7: 0xFF27, //FULLWIDTH LATIN CAPITAL LETTER G - 0xA3C8: 0xFF28, //FULLWIDTH LATIN CAPITAL LETTER H - 0xA3C9: 0xFF29, //FULLWIDTH LATIN CAPITAL LETTER I - 0xA3CA: 0xFF2A, //FULLWIDTH LATIN CAPITAL LETTER J - 0xA3CB: 0xFF2B, //FULLWIDTH LATIN CAPITAL LETTER K - 0xA3CC: 0xFF2C, //FULLWIDTH LATIN CAPITAL LETTER L - 0xA3CD: 0xFF2D, //FULLWIDTH LATIN CAPITAL LETTER M - 0xA3CE: 0xFF2E, //FULLWIDTH LATIN CAPITAL LETTER N - 0xA3CF: 0xFF2F, //FULLWIDTH LATIN CAPITAL LETTER O - 0xA3D0: 0xFF30, //FULLWIDTH LATIN CAPITAL LETTER P - 0xA3D1: 0xFF31, //FULLWIDTH LATIN CAPITAL LETTER Q - 0xA3D2: 0xFF32, //FULLWIDTH LATIN CAPITAL LETTER R - 0xA3D3: 0xFF33, //FULLWIDTH LATIN CAPITAL LETTER S - 0xA3D4: 0xFF34, //FULLWIDTH LATIN CAPITAL LETTER T - 0xA3D5: 0xFF35, //FULLWIDTH LATIN CAPITAL LETTER U - 0xA3D6: 0xFF36, //FULLWIDTH LATIN CAPITAL LETTER V - 0xA3D7: 0xFF37, //FULLWIDTH LATIN CAPITAL LETTER W - 0xA3D8: 0xFF38, //FULLWIDTH LATIN CAPITAL LETTER X - 0xA3D9: 0xFF39, //FULLWIDTH LATIN CAPITAL LETTER Y - 0xA3DA: 0xFF3A, //FULLWIDTH LATIN CAPITAL LETTER Z - 0xA3DB: 0xFF3B, //FULLWIDTH LEFT SQUARE BRACKET - 0xA3DC: 0xFFE6, //FULLWIDTH WON SIGN - 0xA3DD: 0xFF3D, //FULLWIDTH RIGHT SQUARE BRACKET - 0xA3DE: 0xFF3E, //FULLWIDTH CIRCUMFLEX ACCENT - 0xA3DF: 0xFF3F, //FULLWIDTH LOW LINE - 0xA3E0: 0xFF40, //FULLWIDTH GRAVE ACCENT - 0xA3E1: 0xFF41, //FULLWIDTH LATIN SMALL LETTER A - 0xA3E2: 0xFF42, //FULLWIDTH LATIN SMALL LETTER B - 0xA3E3: 0xFF43, //FULLWIDTH LATIN SMALL LETTER C - 0xA3E4: 0xFF44, //FULLWIDTH LATIN SMALL LETTER D - 0xA3E5: 0xFF45, //FULLWIDTH LATIN SMALL LETTER E - 0xA3E6: 0xFF46, //FULLWIDTH LATIN SMALL LETTER F - 0xA3E7: 0xFF47, //FULLWIDTH LATIN SMALL LETTER G - 0xA3E8: 0xFF48, //FULLWIDTH LATIN SMALL LETTER H - 0xA3E9: 0xFF49, //FULLWIDTH LATIN SMALL LETTER I - 0xA3EA: 0xFF4A, //FULLWIDTH LATIN SMALL LETTER J - 0xA3EB: 0xFF4B, //FULLWIDTH LATIN SMALL LETTER K - 0xA3EC: 0xFF4C, //FULLWIDTH LATIN SMALL LETTER L - 0xA3ED: 0xFF4D, //FULLWIDTH LATIN SMALL LETTER M - 0xA3EE: 0xFF4E, //FULLWIDTH LATIN SMALL LETTER N - 0xA3EF: 0xFF4F, //FULLWIDTH LATIN SMALL LETTER O - 0xA3F0: 0xFF50, //FULLWIDTH LATIN SMALL LETTER P - 0xA3F1: 0xFF51, //FULLWIDTH LATIN SMALL LETTER Q - 0xA3F2: 0xFF52, //FULLWIDTH LATIN SMALL LETTER R - 0xA3F3: 0xFF53, //FULLWIDTH LATIN SMALL LETTER S - 0xA3F4: 0xFF54, //FULLWIDTH LATIN SMALL LETTER T - 0xA3F5: 0xFF55, //FULLWIDTH LATIN SMALL LETTER U - 0xA3F6: 0xFF56, //FULLWIDTH LATIN SMALL LETTER V - 0xA3F7: 0xFF57, //FULLWIDTH LATIN SMALL LETTER W - 0xA3F8: 0xFF58, //FULLWIDTH LATIN SMALL LETTER X - 0xA3F9: 0xFF59, //FULLWIDTH LATIN SMALL LETTER Y - 0xA3FA: 0xFF5A, //FULLWIDTH LATIN SMALL LETTER Z - 0xA3FB: 0xFF5B, //FULLWIDTH LEFT CURLY BRACKET - 0xA3FC: 0xFF5C, //FULLWIDTH VERTICAL LINE - 0xA3FD: 0xFF5D, //FULLWIDTH RIGHT CURLY BRACKET - 0xA3FE: 0xFFE3, //FULLWIDTH MACRON - 0xA441: 0xC9DE, //HANGUL SYLLABLE SSANGCIEUC A SSANGKIYEOK - 0xA442: 0xC9DF, //HANGUL SYLLABLE SSANGCIEUC A KIYEOKSIOS - 0xA443: 0xC9E1, //HANGUL SYLLABLE SSANGCIEUC A NIEUNCIEUC - 0xA444: 0xC9E3, //HANGUL SYLLABLE SSANGCIEUC A TIKEUT - 0xA445: 0xC9E5, //HANGUL SYLLABLE SSANGCIEUC A RIEULKIYEOK - 0xA446: 0xC9E6, //HANGUL SYLLABLE SSANGCIEUC A RIEULMIEUM - 0xA447: 0xC9E8, //HANGUL SYLLABLE SSANGCIEUC A RIEULSIOS - 0xA448: 0xC9E9, //HANGUL SYLLABLE SSANGCIEUC A RIEULTHIEUTH - 0xA449: 0xC9EA, //HANGUL SYLLABLE SSANGCIEUC A RIEULPHIEUPH - 0xA44A: 0xC9EB, //HANGUL SYLLABLE SSANGCIEUC A RIEULHIEUH - 0xA44B: 0xC9EE, //HANGUL SYLLABLE SSANGCIEUC A PIEUPSIOS - 0xA44C: 0xC9F2, //HANGUL SYLLABLE SSANGCIEUC A CIEUC - 0xA44D: 0xC9F3, //HANGUL SYLLABLE SSANGCIEUC A CHIEUCH - 0xA44E: 0xC9F4, //HANGUL SYLLABLE SSANGCIEUC A KHIEUKH - 0xA44F: 0xC9F5, //HANGUL SYLLABLE SSANGCIEUC A THIEUTH - 0xA450: 0xC9F6, //HANGUL SYLLABLE SSANGCIEUC A PHIEUPH - 0xA451: 0xC9F7, //HANGUL SYLLABLE SSANGCIEUC A HIEUH - 0xA452: 0xC9FA, //HANGUL SYLLABLE SSANGCIEUC AE SSANGKIYEOK - 0xA453: 0xC9FB, //HANGUL SYLLABLE SSANGCIEUC AE KIYEOKSIOS - 0xA454: 0xC9FD, //HANGUL SYLLABLE SSANGCIEUC AE NIEUNCIEUC - 0xA455: 0xC9FE, //HANGUL SYLLABLE SSANGCIEUC AE NIEUNHIEUH - 0xA456: 0xC9FF, //HANGUL SYLLABLE SSANGCIEUC AE TIKEUT - 0xA457: 0xCA01, //HANGUL SYLLABLE SSANGCIEUC AE RIEULKIYEOK - 0xA458: 0xCA02, //HANGUL SYLLABLE SSANGCIEUC AE RIEULMIEUM - 0xA459: 0xCA03, //HANGUL SYLLABLE SSANGCIEUC AE RIEULPIEUP - 0xA45A: 0xCA04, //HANGUL SYLLABLE SSANGCIEUC AE RIEULSIOS - 0xA461: 0xCA05, //HANGUL SYLLABLE SSANGCIEUC AE RIEULTHIEUTH - 0xA462: 0xCA06, //HANGUL SYLLABLE SSANGCIEUC AE RIEULPHIEUPH - 0xA463: 0xCA07, //HANGUL SYLLABLE SSANGCIEUC AE RIEULHIEUH - 0xA464: 0xCA0A, //HANGUL SYLLABLE SSANGCIEUC AE PIEUPSIOS - 0xA465: 0xCA0E, //HANGUL SYLLABLE SSANGCIEUC AE CIEUC - 0xA466: 0xCA0F, //HANGUL SYLLABLE SSANGCIEUC AE CHIEUCH - 0xA467: 0xCA10, //HANGUL SYLLABLE SSANGCIEUC AE KHIEUKH - 0xA468: 0xCA11, //HANGUL SYLLABLE SSANGCIEUC AE THIEUTH - 0xA469: 0xCA12, //HANGUL SYLLABLE SSANGCIEUC AE PHIEUPH - 0xA46A: 0xCA13, //HANGUL SYLLABLE SSANGCIEUC AE HIEUH - 0xA46B: 0xCA15, //HANGUL SYLLABLE SSANGCIEUC YA KIYEOK - 0xA46C: 0xCA16, //HANGUL SYLLABLE SSANGCIEUC YA SSANGKIYEOK - 0xA46D: 0xCA17, //HANGUL SYLLABLE SSANGCIEUC YA KIYEOKSIOS - 0xA46E: 0xCA19, //HANGUL SYLLABLE SSANGCIEUC YA NIEUNCIEUC - 0xA46F: 0xCA1A, //HANGUL SYLLABLE SSANGCIEUC YA NIEUNHIEUH - 0xA470: 0xCA1B, //HANGUL SYLLABLE SSANGCIEUC YA TIKEUT - 0xA471: 0xCA1C, //HANGUL SYLLABLE SSANGCIEUC YA RIEUL - 0xA472: 0xCA1D, //HANGUL SYLLABLE SSANGCIEUC YA RIEULKIYEOK - 0xA473: 0xCA1E, //HANGUL SYLLABLE SSANGCIEUC YA RIEULMIEUM - 0xA474: 0xCA1F, //HANGUL SYLLABLE SSANGCIEUC YA RIEULPIEUP - 0xA475: 0xCA20, //HANGUL SYLLABLE SSANGCIEUC YA RIEULSIOS - 0xA476: 0xCA21, //HANGUL SYLLABLE SSANGCIEUC YA RIEULTHIEUTH - 0xA477: 0xCA22, //HANGUL SYLLABLE SSANGCIEUC YA RIEULPHIEUPH - 0xA478: 0xCA23, //HANGUL SYLLABLE SSANGCIEUC YA RIEULHIEUH - 0xA479: 0xCA24, //HANGUL SYLLABLE SSANGCIEUC YA MIEUM - 0xA47A: 0xCA25, //HANGUL SYLLABLE SSANGCIEUC YA PIEUP - 0xA481: 0xCA26, //HANGUL SYLLABLE SSANGCIEUC YA PIEUPSIOS - 0xA482: 0xCA27, //HANGUL SYLLABLE SSANGCIEUC YA SIOS - 0xA483: 0xCA28, //HANGUL SYLLABLE SSANGCIEUC YA SSANGSIOS - 0xA484: 0xCA2A, //HANGUL SYLLABLE SSANGCIEUC YA CIEUC - 0xA485: 0xCA2B, //HANGUL SYLLABLE SSANGCIEUC YA CHIEUCH - 0xA486: 0xCA2C, //HANGUL SYLLABLE SSANGCIEUC YA KHIEUKH - 0xA487: 0xCA2D, //HANGUL SYLLABLE SSANGCIEUC YA THIEUTH - 0xA488: 0xCA2E, //HANGUL SYLLABLE SSANGCIEUC YA PHIEUPH - 0xA489: 0xCA2F, //HANGUL SYLLABLE SSANGCIEUC YA HIEUH - 0xA48A: 0xCA30, //HANGUL SYLLABLE SSANGCIEUC YAE - 0xA48B: 0xCA31, //HANGUL SYLLABLE SSANGCIEUC YAE KIYEOK - 0xA48C: 0xCA32, //HANGUL SYLLABLE SSANGCIEUC YAE SSANGKIYEOK - 0xA48D: 0xCA33, //HANGUL SYLLABLE SSANGCIEUC YAE KIYEOKSIOS - 0xA48E: 0xCA34, //HANGUL SYLLABLE SSANGCIEUC YAE NIEUN - 0xA48F: 0xCA35, //HANGUL SYLLABLE SSANGCIEUC YAE NIEUNCIEUC - 0xA490: 0xCA36, //HANGUL SYLLABLE SSANGCIEUC YAE NIEUNHIEUH - 0xA491: 0xCA37, //HANGUL SYLLABLE SSANGCIEUC YAE TIKEUT - 0xA492: 0xCA38, //HANGUL SYLLABLE SSANGCIEUC YAE RIEUL - 0xA493: 0xCA39, //HANGUL SYLLABLE SSANGCIEUC YAE RIEULKIYEOK - 0xA494: 0xCA3A, //HANGUL SYLLABLE SSANGCIEUC YAE RIEULMIEUM - 0xA495: 0xCA3B, //HANGUL SYLLABLE SSANGCIEUC YAE RIEULPIEUP - 0xA496: 0xCA3C, //HANGUL SYLLABLE SSANGCIEUC YAE RIEULSIOS - 0xA497: 0xCA3D, //HANGUL SYLLABLE SSANGCIEUC YAE RIEULTHIEUTH - 0xA498: 0xCA3E, //HANGUL SYLLABLE SSANGCIEUC YAE RIEULPHIEUPH - 0xA499: 0xCA3F, //HANGUL SYLLABLE SSANGCIEUC YAE RIEULHIEUH - 0xA49A: 0xCA40, //HANGUL SYLLABLE SSANGCIEUC YAE MIEUM - 0xA49B: 0xCA41, //HANGUL SYLLABLE SSANGCIEUC YAE PIEUP - 0xA49C: 0xCA42, //HANGUL SYLLABLE SSANGCIEUC YAE PIEUPSIOS - 0xA49D: 0xCA43, //HANGUL SYLLABLE SSANGCIEUC YAE SIOS - 0xA49E: 0xCA44, //HANGUL SYLLABLE SSANGCIEUC YAE SSANGSIOS - 0xA49F: 0xCA45, //HANGUL SYLLABLE SSANGCIEUC YAE IEUNG - 0xA4A0: 0xCA46, //HANGUL SYLLABLE SSANGCIEUC YAE CIEUC - 0xA4A1: 0x3131, //HANGUL LETTER KIYEOK - 0xA4A2: 0x3132, //HANGUL LETTER SSANGKIYEOK - 0xA4A3: 0x3133, //HANGUL LETTER KIYEOK-SIOS - 0xA4A4: 0x3134, //HANGUL LETTER NIEUN - 0xA4A5: 0x3135, //HANGUL LETTER NIEUN-CIEUC - 0xA4A6: 0x3136, //HANGUL LETTER NIEUN-HIEUH - 0xA4A7: 0x3137, //HANGUL LETTER TIKEUT - 0xA4A8: 0x3138, //HANGUL LETTER SSANGTIKEUT - 0xA4A9: 0x3139, //HANGUL LETTER RIEUL - 0xA4AA: 0x313A, //HANGUL LETTER RIEUL-KIYEOK - 0xA4AB: 0x313B, //HANGUL LETTER RIEUL-MIEUM - 0xA4AC: 0x313C, //HANGUL LETTER RIEUL-PIEUP - 0xA4AD: 0x313D, //HANGUL LETTER RIEUL-SIOS - 0xA4AE: 0x313E, //HANGUL LETTER RIEUL-THIEUTH - 0xA4AF: 0x313F, //HANGUL LETTER RIEUL-PHIEUPH - 0xA4B0: 0x3140, //HANGUL LETTER RIEUL-HIEUH - 0xA4B1: 0x3141, //HANGUL LETTER MIEUM - 0xA4B2: 0x3142, //HANGUL LETTER PIEUP - 0xA4B3: 0x3143, //HANGUL LETTER SSANGPIEUP - 0xA4B4: 0x3144, //HANGUL LETTER PIEUP-SIOS - 0xA4B5: 0x3145, //HANGUL LETTER SIOS - 0xA4B6: 0x3146, //HANGUL LETTER SSANGSIOS - 0xA4B7: 0x3147, //HANGUL LETTER IEUNG - 0xA4B8: 0x3148, //HANGUL LETTER CIEUC - 0xA4B9: 0x3149, //HANGUL LETTER SSANGCIEUC - 0xA4BA: 0x314A, //HANGUL LETTER CHIEUCH - 0xA4BB: 0x314B, //HANGUL LETTER KHIEUKH - 0xA4BC: 0x314C, //HANGUL LETTER THIEUTH - 0xA4BD: 0x314D, //HANGUL LETTER PHIEUPH - 0xA4BE: 0x314E, //HANGUL LETTER HIEUH - 0xA4BF: 0x314F, //HANGUL LETTER A - 0xA4C0: 0x3150, //HANGUL LETTER AE - 0xA4C1: 0x3151, //HANGUL LETTER YA - 0xA4C2: 0x3152, //HANGUL LETTER YAE - 0xA4C3: 0x3153, //HANGUL LETTER EO - 0xA4C4: 0x3154, //HANGUL LETTER E - 0xA4C5: 0x3155, //HANGUL LETTER YEO - 0xA4C6: 0x3156, //HANGUL LETTER YE - 0xA4C7: 0x3157, //HANGUL LETTER O - 0xA4C8: 0x3158, //HANGUL LETTER WA - 0xA4C9: 0x3159, //HANGUL LETTER WAE - 0xA4CA: 0x315A, //HANGUL LETTER OE - 0xA4CB: 0x315B, //HANGUL LETTER YO - 0xA4CC: 0x315C, //HANGUL LETTER U - 0xA4CD: 0x315D, //HANGUL LETTER WEO - 0xA4CE: 0x315E, //HANGUL LETTER WE - 0xA4CF: 0x315F, //HANGUL LETTER WI - 0xA4D0: 0x3160, //HANGUL LETTER YU - 0xA4D1: 0x3161, //HANGUL LETTER EU - 0xA4D2: 0x3162, //HANGUL LETTER YI - 0xA4D3: 0x3163, //HANGUL LETTER I - 0xA4D4: 0x3164, //HANGUL FILLER - 0xA4D5: 0x3165, //HANGUL LETTER SSANGNIEUN - 0xA4D6: 0x3166, //HANGUL LETTER NIEUN-TIKEUT - 0xA4D7: 0x3167, //HANGUL LETTER NIEUN-SIOS - 0xA4D8: 0x3168, //HANGUL LETTER NIEUN-PANSIOS - 0xA4D9: 0x3169, //HANGUL LETTER RIEUL-KIYEOK-SIOS - 0xA4DA: 0x316A, //HANGUL LETTER RIEUL-TIKEUT - 0xA4DB: 0x316B, //HANGUL LETTER RIEUL-PIEUP-SIOS - 0xA4DC: 0x316C, //HANGUL LETTER RIEUL-PANSIOS - 0xA4DD: 0x316D, //HANGUL LETTER RIEUL-YEORINHIEUH - 0xA4DE: 0x316E, //HANGUL LETTER MIEUM-PIEUP - 0xA4DF: 0x316F, //HANGUL LETTER MIEUM-SIOS - 0xA4E0: 0x3170, //HANGUL LETTER MIEUM-PANSIOS - 0xA4E1: 0x3171, //HANGUL LETTER KAPYEOUNMIEUM - 0xA4E2: 0x3172, //HANGUL LETTER PIEUP-KIYEOK - 0xA4E3: 0x3173, //HANGUL LETTER PIEUP-TIKEUT - 0xA4E4: 0x3174, //HANGUL LETTER PIEUP-SIOS-KIYEOK - 0xA4E5: 0x3175, //HANGUL LETTER PIEUP-SIOS-TIKEUT - 0xA4E6: 0x3176, //HANGUL LETTER PIEUP-CIEUC - 0xA4E7: 0x3177, //HANGUL LETTER PIEUP-THIEUTH - 0xA4E8: 0x3178, //HANGUL LETTER KAPYEOUNPIEUP - 0xA4E9: 0x3179, //HANGUL LETTER KAPYEOUNSSANGPIEUP - 0xA4EA: 0x317A, //HANGUL LETTER SIOS-KIYEOK - 0xA4EB: 0x317B, //HANGUL LETTER SIOS-NIEUN - 0xA4EC: 0x317C, //HANGUL LETTER SIOS-TIKEUT - 0xA4ED: 0x317D, //HANGUL LETTER SIOS-PIEUP - 0xA4EE: 0x317E, //HANGUL LETTER SIOS-CIEUC - 0xA4EF: 0x317F, //HANGUL LETTER PANSIOS - 0xA4F0: 0x3180, //HANGUL LETTER SSANGIEUNG - 0xA4F1: 0x3181, //HANGUL LETTER YESIEUNG - 0xA4F2: 0x3182, //HANGUL LETTER YESIEUNG-SIOS - 0xA4F3: 0x3183, //HANGUL LETTER YESIEUNG-PANSIOS - 0xA4F4: 0x3184, //HANGUL LETTER KAPYEOUNPHIEUPH - 0xA4F5: 0x3185, //HANGUL LETTER SSANGHIEUH - 0xA4F6: 0x3186, //HANGUL LETTER YEORINHIEUH - 0xA4F7: 0x3187, //HANGUL LETTER YO-YA - 0xA4F8: 0x3188, //HANGUL LETTER YO-YAE - 0xA4F9: 0x3189, //HANGUL LETTER YO-I - 0xA4FA: 0x318A, //HANGUL LETTER YU-YEO - 0xA4FB: 0x318B, //HANGUL LETTER YU-YE - 0xA4FC: 0x318C, //HANGUL LETTER YU-I - 0xA4FD: 0x318D, //HANGUL LETTER ARAEA - 0xA4FE: 0x318E, //HANGUL LETTER ARAEAE - 0xA541: 0xCA47, //HANGUL SYLLABLE SSANGCIEUC YAE CHIEUCH - 0xA542: 0xCA48, //HANGUL SYLLABLE SSANGCIEUC YAE KHIEUKH - 0xA543: 0xCA49, //HANGUL SYLLABLE SSANGCIEUC YAE THIEUTH - 0xA544: 0xCA4A, //HANGUL SYLLABLE SSANGCIEUC YAE PHIEUPH - 0xA545: 0xCA4B, //HANGUL SYLLABLE SSANGCIEUC YAE HIEUH - 0xA546: 0xCA4E, //HANGUL SYLLABLE SSANGCIEUC EO SSANGKIYEOK - 0xA547: 0xCA4F, //HANGUL SYLLABLE SSANGCIEUC EO KIYEOKSIOS - 0xA548: 0xCA51, //HANGUL SYLLABLE SSANGCIEUC EO NIEUNCIEUC - 0xA549: 0xCA52, //HANGUL SYLLABLE SSANGCIEUC EO NIEUNHIEUH - 0xA54A: 0xCA53, //HANGUL SYLLABLE SSANGCIEUC EO TIKEUT - 0xA54B: 0xCA55, //HANGUL SYLLABLE SSANGCIEUC EO RIEULKIYEOK - 0xA54C: 0xCA56, //HANGUL SYLLABLE SSANGCIEUC EO RIEULMIEUM - 0xA54D: 0xCA57, //HANGUL SYLLABLE SSANGCIEUC EO RIEULPIEUP - 0xA54E: 0xCA58, //HANGUL SYLLABLE SSANGCIEUC EO RIEULSIOS - 0xA54F: 0xCA59, //HANGUL SYLLABLE SSANGCIEUC EO RIEULTHIEUTH - 0xA550: 0xCA5A, //HANGUL SYLLABLE SSANGCIEUC EO RIEULPHIEUPH - 0xA551: 0xCA5B, //HANGUL SYLLABLE SSANGCIEUC EO RIEULHIEUH - 0xA552: 0xCA5E, //HANGUL SYLLABLE SSANGCIEUC EO PIEUPSIOS - 0xA553: 0xCA62, //HANGUL SYLLABLE SSANGCIEUC EO CIEUC - 0xA554: 0xCA63, //HANGUL SYLLABLE SSANGCIEUC EO CHIEUCH - 0xA555: 0xCA64, //HANGUL SYLLABLE SSANGCIEUC EO KHIEUKH - 0xA556: 0xCA65, //HANGUL SYLLABLE SSANGCIEUC EO THIEUTH - 0xA557: 0xCA66, //HANGUL SYLLABLE SSANGCIEUC EO PHIEUPH - 0xA558: 0xCA67, //HANGUL SYLLABLE SSANGCIEUC EO HIEUH - 0xA559: 0xCA69, //HANGUL SYLLABLE SSANGCIEUC E KIYEOK - 0xA55A: 0xCA6A, //HANGUL SYLLABLE SSANGCIEUC E SSANGKIYEOK - 0xA561: 0xCA6B, //HANGUL SYLLABLE SSANGCIEUC E KIYEOKSIOS - 0xA562: 0xCA6C, //HANGUL SYLLABLE SSANGCIEUC E NIEUN - 0xA563: 0xCA6D, //HANGUL SYLLABLE SSANGCIEUC E NIEUNCIEUC - 0xA564: 0xCA6E, //HANGUL SYLLABLE SSANGCIEUC E NIEUNHIEUH - 0xA565: 0xCA6F, //HANGUL SYLLABLE SSANGCIEUC E TIKEUT - 0xA566: 0xCA70, //HANGUL SYLLABLE SSANGCIEUC E RIEUL - 0xA567: 0xCA71, //HANGUL SYLLABLE SSANGCIEUC E RIEULKIYEOK - 0xA568: 0xCA72, //HANGUL SYLLABLE SSANGCIEUC E RIEULMIEUM - 0xA569: 0xCA73, //HANGUL SYLLABLE SSANGCIEUC E RIEULPIEUP - 0xA56A: 0xCA74, //HANGUL SYLLABLE SSANGCIEUC E RIEULSIOS - 0xA56B: 0xCA75, //HANGUL SYLLABLE SSANGCIEUC E RIEULTHIEUTH - 0xA56C: 0xCA76, //HANGUL SYLLABLE SSANGCIEUC E RIEULPHIEUPH - 0xA56D: 0xCA77, //HANGUL SYLLABLE SSANGCIEUC E RIEULHIEUH - 0xA56E: 0xCA78, //HANGUL SYLLABLE SSANGCIEUC E MIEUM - 0xA56F: 0xCA79, //HANGUL SYLLABLE SSANGCIEUC E PIEUP - 0xA570: 0xCA7A, //HANGUL SYLLABLE SSANGCIEUC E PIEUPSIOS - 0xA571: 0xCA7B, //HANGUL SYLLABLE SSANGCIEUC E SIOS - 0xA572: 0xCA7C, //HANGUL SYLLABLE SSANGCIEUC E SSANGSIOS - 0xA573: 0xCA7E, //HANGUL SYLLABLE SSANGCIEUC E CIEUC - 0xA574: 0xCA7F, //HANGUL SYLLABLE SSANGCIEUC E CHIEUCH - 0xA575: 0xCA80, //HANGUL SYLLABLE SSANGCIEUC E KHIEUKH - 0xA576: 0xCA81, //HANGUL SYLLABLE SSANGCIEUC E THIEUTH - 0xA577: 0xCA82, //HANGUL SYLLABLE SSANGCIEUC E PHIEUPH - 0xA578: 0xCA83, //HANGUL SYLLABLE SSANGCIEUC E HIEUH - 0xA579: 0xCA85, //HANGUL SYLLABLE SSANGCIEUC YEO KIYEOK - 0xA57A: 0xCA86, //HANGUL SYLLABLE SSANGCIEUC YEO SSANGKIYEOK - 0xA581: 0xCA87, //HANGUL SYLLABLE SSANGCIEUC YEO KIYEOKSIOS - 0xA582: 0xCA88, //HANGUL SYLLABLE SSANGCIEUC YEO NIEUN - 0xA583: 0xCA89, //HANGUL SYLLABLE SSANGCIEUC YEO NIEUNCIEUC - 0xA584: 0xCA8A, //HANGUL SYLLABLE SSANGCIEUC YEO NIEUNHIEUH - 0xA585: 0xCA8B, //HANGUL SYLLABLE SSANGCIEUC YEO TIKEUT - 0xA586: 0xCA8C, //HANGUL SYLLABLE SSANGCIEUC YEO RIEUL - 0xA587: 0xCA8D, //HANGUL SYLLABLE SSANGCIEUC YEO RIEULKIYEOK - 0xA588: 0xCA8E, //HANGUL SYLLABLE SSANGCIEUC YEO RIEULMIEUM - 0xA589: 0xCA8F, //HANGUL SYLLABLE SSANGCIEUC YEO RIEULPIEUP - 0xA58A: 0xCA90, //HANGUL SYLLABLE SSANGCIEUC YEO RIEULSIOS - 0xA58B: 0xCA91, //HANGUL SYLLABLE SSANGCIEUC YEO RIEULTHIEUTH - 0xA58C: 0xCA92, //HANGUL SYLLABLE SSANGCIEUC YEO RIEULPHIEUPH - 0xA58D: 0xCA93, //HANGUL SYLLABLE SSANGCIEUC YEO RIEULHIEUH - 0xA58E: 0xCA94, //HANGUL SYLLABLE SSANGCIEUC YEO MIEUM - 0xA58F: 0xCA95, //HANGUL SYLLABLE SSANGCIEUC YEO PIEUP - 0xA590: 0xCA96, //HANGUL SYLLABLE SSANGCIEUC YEO PIEUPSIOS - 0xA591: 0xCA97, //HANGUL SYLLABLE SSANGCIEUC YEO SIOS - 0xA592: 0xCA99, //HANGUL SYLLABLE SSANGCIEUC YEO IEUNG - 0xA593: 0xCA9A, //HANGUL SYLLABLE SSANGCIEUC YEO CIEUC - 0xA594: 0xCA9B, //HANGUL SYLLABLE SSANGCIEUC YEO CHIEUCH - 0xA595: 0xCA9C, //HANGUL SYLLABLE SSANGCIEUC YEO KHIEUKH - 0xA596: 0xCA9D, //HANGUL SYLLABLE SSANGCIEUC YEO THIEUTH - 0xA597: 0xCA9E, //HANGUL SYLLABLE SSANGCIEUC YEO PHIEUPH - 0xA598: 0xCA9F, //HANGUL SYLLABLE SSANGCIEUC YEO HIEUH - 0xA599: 0xCAA0, //HANGUL SYLLABLE SSANGCIEUC YE - 0xA59A: 0xCAA1, //HANGUL SYLLABLE SSANGCIEUC YE KIYEOK - 0xA59B: 0xCAA2, //HANGUL SYLLABLE SSANGCIEUC YE SSANGKIYEOK - 0xA59C: 0xCAA3, //HANGUL SYLLABLE SSANGCIEUC YE KIYEOKSIOS - 0xA59D: 0xCAA4, //HANGUL SYLLABLE SSANGCIEUC YE NIEUN - 0xA59E: 0xCAA5, //HANGUL SYLLABLE SSANGCIEUC YE NIEUNCIEUC - 0xA59F: 0xCAA6, //HANGUL SYLLABLE SSANGCIEUC YE NIEUNHIEUH - 0xA5A0: 0xCAA7, //HANGUL SYLLABLE SSANGCIEUC YE TIKEUT - 0xA5A1: 0x2170, //SMALL ROMAN NUMERAL ONE - 0xA5A2: 0x2171, //SMALL ROMAN NUMERAL TWO - 0xA5A3: 0x2172, //SMALL ROMAN NUMERAL THREE - 0xA5A4: 0x2173, //SMALL ROMAN NUMERAL FOUR - 0xA5A5: 0x2174, //SMALL ROMAN NUMERAL FIVE - 0xA5A6: 0x2175, //SMALL ROMAN NUMERAL SIX - 0xA5A7: 0x2176, //SMALL ROMAN NUMERAL SEVEN - 0xA5A8: 0x2177, //SMALL ROMAN NUMERAL EIGHT - 0xA5A9: 0x2178, //SMALL ROMAN NUMERAL NINE - 0xA5AA: 0x2179, //SMALL ROMAN NUMERAL TEN - 0xA5B0: 0x2160, //ROMAN NUMERAL ONE - 0xA5B1: 0x2161, //ROMAN NUMERAL TWO - 0xA5B2: 0x2162, //ROMAN NUMERAL THREE - 0xA5B3: 0x2163, //ROMAN NUMERAL FOUR - 0xA5B4: 0x2164, //ROMAN NUMERAL FIVE - 0xA5B5: 0x2165, //ROMAN NUMERAL SIX - 0xA5B6: 0x2166, //ROMAN NUMERAL SEVEN - 0xA5B7: 0x2167, //ROMAN NUMERAL EIGHT - 0xA5B8: 0x2168, //ROMAN NUMERAL NINE - 0xA5B9: 0x2169, //ROMAN NUMERAL TEN - 0xA5C1: 0x0391, //GREEK CAPITAL LETTER ALPHA - 0xA5C2: 0x0392, //GREEK CAPITAL LETTER BETA - 0xA5C3: 0x0393, //GREEK CAPITAL LETTER GAMMA - 0xA5C4: 0x0394, //GREEK CAPITAL LETTER DELTA - 0xA5C5: 0x0395, //GREEK CAPITAL LETTER EPSILON - 0xA5C6: 0x0396, //GREEK CAPITAL LETTER ZETA - 0xA5C7: 0x0397, //GREEK CAPITAL LETTER ETA - 0xA5C8: 0x0398, //GREEK CAPITAL LETTER THETA - 0xA5C9: 0x0399, //GREEK CAPITAL LETTER IOTA - 0xA5CA: 0x039A, //GREEK CAPITAL LETTER KAPPA - 0xA5CB: 0x039B, //GREEK CAPITAL LETTER LAMDA - 0xA5CC: 0x039C, //GREEK CAPITAL LETTER MU - 0xA5CD: 0x039D, //GREEK CAPITAL LETTER NU - 0xA5CE: 0x039E, //GREEK CAPITAL LETTER XI - 0xA5CF: 0x039F, //GREEK CAPITAL LETTER OMICRON - 0xA5D0: 0x03A0, //GREEK CAPITAL LETTER PI - 0xA5D1: 0x03A1, //GREEK CAPITAL LETTER RHO - 0xA5D2: 0x03A3, //GREEK CAPITAL LETTER SIGMA - 0xA5D3: 0x03A4, //GREEK CAPITAL LETTER TAU - 0xA5D4: 0x03A5, //GREEK CAPITAL LETTER UPSILON - 0xA5D5: 0x03A6, //GREEK CAPITAL LETTER PHI - 0xA5D6: 0x03A7, //GREEK CAPITAL LETTER CHI - 0xA5D7: 0x03A8, //GREEK CAPITAL LETTER PSI - 0xA5D8: 0x03A9, //GREEK CAPITAL LETTER OMEGA - 0xA5E1: 0x03B1, //GREEK SMALL LETTER ALPHA - 0xA5E2: 0x03B2, //GREEK SMALL LETTER BETA - 0xA5E3: 0x03B3, //GREEK SMALL LETTER GAMMA - 0xA5E4: 0x03B4, //GREEK SMALL LETTER DELTA - 0xA5E5: 0x03B5, //GREEK SMALL LETTER EPSILON - 0xA5E6: 0x03B6, //GREEK SMALL LETTER ZETA - 0xA5E7: 0x03B7, //GREEK SMALL LETTER ETA - 0xA5E8: 0x03B8, //GREEK SMALL LETTER THETA - 0xA5E9: 0x03B9, //GREEK SMALL LETTER IOTA - 0xA5EA: 0x03BA, //GREEK SMALL LETTER KAPPA - 0xA5EB: 0x03BB, //GREEK SMALL LETTER LAMDA - 0xA5EC: 0x03BC, //GREEK SMALL LETTER MU - 0xA5ED: 0x03BD, //GREEK SMALL LETTER NU - 0xA5EE: 0x03BE, //GREEK SMALL LETTER XI - 0xA5EF: 0x03BF, //GREEK SMALL LETTER OMICRON - 0xA5F0: 0x03C0, //GREEK SMALL LETTER PI - 0xA5F1: 0x03C1, //GREEK SMALL LETTER RHO - 0xA5F2: 0x03C3, //GREEK SMALL LETTER SIGMA - 0xA5F3: 0x03C4, //GREEK SMALL LETTER TAU - 0xA5F4: 0x03C5, //GREEK SMALL LETTER UPSILON - 0xA5F5: 0x03C6, //GREEK SMALL LETTER PHI - 0xA5F6: 0x03C7, //GREEK SMALL LETTER CHI - 0xA5F7: 0x03C8, //GREEK SMALL LETTER PSI - 0xA5F8: 0x03C9, //GREEK SMALL LETTER OMEGA - 0xA641: 0xCAA8, //HANGUL SYLLABLE SSANGCIEUC YE RIEUL - 0xA642: 0xCAA9, //HANGUL SYLLABLE SSANGCIEUC YE RIEULKIYEOK - 0xA643: 0xCAAA, //HANGUL SYLLABLE SSANGCIEUC YE RIEULMIEUM - 0xA644: 0xCAAB, //HANGUL SYLLABLE SSANGCIEUC YE RIEULPIEUP - 0xA645: 0xCAAC, //HANGUL SYLLABLE SSANGCIEUC YE RIEULSIOS - 0xA646: 0xCAAD, //HANGUL SYLLABLE SSANGCIEUC YE RIEULTHIEUTH - 0xA647: 0xCAAE, //HANGUL SYLLABLE SSANGCIEUC YE RIEULPHIEUPH - 0xA648: 0xCAAF, //HANGUL SYLLABLE SSANGCIEUC YE RIEULHIEUH - 0xA649: 0xCAB0, //HANGUL SYLLABLE SSANGCIEUC YE MIEUM - 0xA64A: 0xCAB1, //HANGUL SYLLABLE SSANGCIEUC YE PIEUP - 0xA64B: 0xCAB2, //HANGUL SYLLABLE SSANGCIEUC YE PIEUPSIOS - 0xA64C: 0xCAB3, //HANGUL SYLLABLE SSANGCIEUC YE SIOS - 0xA64D: 0xCAB4, //HANGUL SYLLABLE SSANGCIEUC YE SSANGSIOS - 0xA64E: 0xCAB5, //HANGUL SYLLABLE SSANGCIEUC YE IEUNG - 0xA64F: 0xCAB6, //HANGUL SYLLABLE SSANGCIEUC YE CIEUC - 0xA650: 0xCAB7, //HANGUL SYLLABLE SSANGCIEUC YE CHIEUCH - 0xA651: 0xCAB8, //HANGUL SYLLABLE SSANGCIEUC YE KHIEUKH - 0xA652: 0xCAB9, //HANGUL SYLLABLE SSANGCIEUC YE THIEUTH - 0xA653: 0xCABA, //HANGUL SYLLABLE SSANGCIEUC YE PHIEUPH - 0xA654: 0xCABB, //HANGUL SYLLABLE SSANGCIEUC YE HIEUH - 0xA655: 0xCABE, //HANGUL SYLLABLE SSANGCIEUC O SSANGKIYEOK - 0xA656: 0xCABF, //HANGUL SYLLABLE SSANGCIEUC O KIYEOKSIOS - 0xA657: 0xCAC1, //HANGUL SYLLABLE SSANGCIEUC O NIEUNCIEUC - 0xA658: 0xCAC2, //HANGUL SYLLABLE SSANGCIEUC O NIEUNHIEUH - 0xA659: 0xCAC3, //HANGUL SYLLABLE SSANGCIEUC O TIKEUT - 0xA65A: 0xCAC5, //HANGUL SYLLABLE SSANGCIEUC O RIEULKIYEOK - 0xA661: 0xCAC6, //HANGUL SYLLABLE SSANGCIEUC O RIEULMIEUM - 0xA662: 0xCAC7, //HANGUL SYLLABLE SSANGCIEUC O RIEULPIEUP - 0xA663: 0xCAC8, //HANGUL SYLLABLE SSANGCIEUC O RIEULSIOS - 0xA664: 0xCAC9, //HANGUL SYLLABLE SSANGCIEUC O RIEULTHIEUTH - 0xA665: 0xCACA, //HANGUL SYLLABLE SSANGCIEUC O RIEULPHIEUPH - 0xA666: 0xCACB, //HANGUL SYLLABLE SSANGCIEUC O RIEULHIEUH - 0xA667: 0xCACE, //HANGUL SYLLABLE SSANGCIEUC O PIEUPSIOS - 0xA668: 0xCAD0, //HANGUL SYLLABLE SSANGCIEUC O SSANGSIOS - 0xA669: 0xCAD2, //HANGUL SYLLABLE SSANGCIEUC O CIEUC - 0xA66A: 0xCAD4, //HANGUL SYLLABLE SSANGCIEUC O KHIEUKH - 0xA66B: 0xCAD5, //HANGUL SYLLABLE SSANGCIEUC O THIEUTH - 0xA66C: 0xCAD6, //HANGUL SYLLABLE SSANGCIEUC O PHIEUPH - 0xA66D: 0xCAD7, //HANGUL SYLLABLE SSANGCIEUC O HIEUH - 0xA66E: 0xCADA, //HANGUL SYLLABLE SSANGCIEUC WA SSANGKIYEOK - 0xA66F: 0xCADB, //HANGUL SYLLABLE SSANGCIEUC WA KIYEOKSIOS - 0xA670: 0xCADC, //HANGUL SYLLABLE SSANGCIEUC WA NIEUN - 0xA671: 0xCADD, //HANGUL SYLLABLE SSANGCIEUC WA NIEUNCIEUC - 0xA672: 0xCADE, //HANGUL SYLLABLE SSANGCIEUC WA NIEUNHIEUH - 0xA673: 0xCADF, //HANGUL SYLLABLE SSANGCIEUC WA TIKEUT - 0xA674: 0xCAE1, //HANGUL SYLLABLE SSANGCIEUC WA RIEULKIYEOK - 0xA675: 0xCAE2, //HANGUL SYLLABLE SSANGCIEUC WA RIEULMIEUM - 0xA676: 0xCAE3, //HANGUL SYLLABLE SSANGCIEUC WA RIEULPIEUP - 0xA677: 0xCAE4, //HANGUL SYLLABLE SSANGCIEUC WA RIEULSIOS - 0xA678: 0xCAE5, //HANGUL SYLLABLE SSANGCIEUC WA RIEULTHIEUTH - 0xA679: 0xCAE6, //HANGUL SYLLABLE SSANGCIEUC WA RIEULPHIEUPH - 0xA67A: 0xCAE7, //HANGUL SYLLABLE SSANGCIEUC WA RIEULHIEUH - 0xA681: 0xCAE8, //HANGUL SYLLABLE SSANGCIEUC WA MIEUM - 0xA682: 0xCAE9, //HANGUL SYLLABLE SSANGCIEUC WA PIEUP - 0xA683: 0xCAEA, //HANGUL SYLLABLE SSANGCIEUC WA PIEUPSIOS - 0xA684: 0xCAEB, //HANGUL SYLLABLE SSANGCIEUC WA SIOS - 0xA685: 0xCAED, //HANGUL SYLLABLE SSANGCIEUC WA IEUNG - 0xA686: 0xCAEE, //HANGUL SYLLABLE SSANGCIEUC WA CIEUC - 0xA687: 0xCAEF, //HANGUL SYLLABLE SSANGCIEUC WA CHIEUCH - 0xA688: 0xCAF0, //HANGUL SYLLABLE SSANGCIEUC WA KHIEUKH - 0xA689: 0xCAF1, //HANGUL SYLLABLE SSANGCIEUC WA THIEUTH - 0xA68A: 0xCAF2, //HANGUL SYLLABLE SSANGCIEUC WA PHIEUPH - 0xA68B: 0xCAF3, //HANGUL SYLLABLE SSANGCIEUC WA HIEUH - 0xA68C: 0xCAF5, //HANGUL SYLLABLE SSANGCIEUC WAE KIYEOK - 0xA68D: 0xCAF6, //HANGUL SYLLABLE SSANGCIEUC WAE SSANGKIYEOK - 0xA68E: 0xCAF7, //HANGUL SYLLABLE SSANGCIEUC WAE KIYEOKSIOS - 0xA68F: 0xCAF8, //HANGUL SYLLABLE SSANGCIEUC WAE NIEUN - 0xA690: 0xCAF9, //HANGUL SYLLABLE SSANGCIEUC WAE NIEUNCIEUC - 0xA691: 0xCAFA, //HANGUL SYLLABLE SSANGCIEUC WAE NIEUNHIEUH - 0xA692: 0xCAFB, //HANGUL SYLLABLE SSANGCIEUC WAE TIKEUT - 0xA693: 0xCAFC, //HANGUL SYLLABLE SSANGCIEUC WAE RIEUL - 0xA694: 0xCAFD, //HANGUL SYLLABLE SSANGCIEUC WAE RIEULKIYEOK - 0xA695: 0xCAFE, //HANGUL SYLLABLE SSANGCIEUC WAE RIEULMIEUM - 0xA696: 0xCAFF, //HANGUL SYLLABLE SSANGCIEUC WAE RIEULPIEUP - 0xA697: 0xCB00, //HANGUL SYLLABLE SSANGCIEUC WAE RIEULSIOS - 0xA698: 0xCB01, //HANGUL SYLLABLE SSANGCIEUC WAE RIEULTHIEUTH - 0xA699: 0xCB02, //HANGUL SYLLABLE SSANGCIEUC WAE RIEULPHIEUPH - 0xA69A: 0xCB03, //HANGUL SYLLABLE SSANGCIEUC WAE RIEULHIEUH - 0xA69B: 0xCB04, //HANGUL SYLLABLE SSANGCIEUC WAE MIEUM - 0xA69C: 0xCB05, //HANGUL SYLLABLE SSANGCIEUC WAE PIEUP - 0xA69D: 0xCB06, //HANGUL SYLLABLE SSANGCIEUC WAE PIEUPSIOS - 0xA69E: 0xCB07, //HANGUL SYLLABLE SSANGCIEUC WAE SIOS - 0xA69F: 0xCB09, //HANGUL SYLLABLE SSANGCIEUC WAE IEUNG - 0xA6A0: 0xCB0A, //HANGUL SYLLABLE SSANGCIEUC WAE CIEUC - 0xA6A1: 0x2500, //BOX DRAWINGS LIGHT HORIZONTAL - 0xA6A2: 0x2502, //BOX DRAWINGS LIGHT VERTICAL - 0xA6A3: 0x250C, //BOX DRAWINGS LIGHT DOWN AND RIGHT - 0xA6A4: 0x2510, //BOX DRAWINGS LIGHT DOWN AND LEFT - 0xA6A5: 0x2518, //BOX DRAWINGS LIGHT UP AND LEFT - 0xA6A6: 0x2514, //BOX DRAWINGS LIGHT UP AND RIGHT - 0xA6A7: 0x251C, //BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0xA6A8: 0x252C, //BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0xA6A9: 0x2524, //BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0xA6AA: 0x2534, //BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0xA6AB: 0x253C, //BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0xA6AC: 0x2501, //BOX DRAWINGS HEAVY HORIZONTAL - 0xA6AD: 0x2503, //BOX DRAWINGS HEAVY VERTICAL - 0xA6AE: 0x250F, //BOX DRAWINGS HEAVY DOWN AND RIGHT - 0xA6AF: 0x2513, //BOX DRAWINGS HEAVY DOWN AND LEFT - 0xA6B0: 0x251B, //BOX DRAWINGS HEAVY UP AND LEFT - 0xA6B1: 0x2517, //BOX DRAWINGS HEAVY UP AND RIGHT - 0xA6B2: 0x2523, //BOX DRAWINGS HEAVY VERTICAL AND RIGHT - 0xA6B3: 0x2533, //BOX DRAWINGS HEAVY DOWN AND HORIZONTAL - 0xA6B4: 0x252B, //BOX DRAWINGS HEAVY VERTICAL AND LEFT - 0xA6B5: 0x253B, //BOX DRAWINGS HEAVY UP AND HORIZONTAL - 0xA6B6: 0x254B, //BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL - 0xA6B7: 0x2520, //BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT - 0xA6B8: 0x252F, //BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY - 0xA6B9: 0x2528, //BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT - 0xA6BA: 0x2537, //BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY - 0xA6BB: 0x253F, //BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY - 0xA6BC: 0x251D, //BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY - 0xA6BD: 0x2530, //BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT - 0xA6BE: 0x2525, //BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY - 0xA6BF: 0x2538, //BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT - 0xA6C0: 0x2542, //BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT - 0xA6C1: 0x2512, //BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT - 0xA6C2: 0x2511, //BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY - 0xA6C3: 0x251A, //BOX DRAWINGS UP HEAVY AND LEFT LIGHT - 0xA6C4: 0x2519, //BOX DRAWINGS UP LIGHT AND LEFT HEAVY - 0xA6C5: 0x2516, //BOX DRAWINGS UP HEAVY AND RIGHT LIGHT - 0xA6C6: 0x2515, //BOX DRAWINGS UP LIGHT AND RIGHT HEAVY - 0xA6C7: 0x250E, //BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT - 0xA6C8: 0x250D, //BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY - 0xA6C9: 0x251E, //BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT - 0xA6CA: 0x251F, //BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT - 0xA6CB: 0x2521, //BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY - 0xA6CC: 0x2522, //BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY - 0xA6CD: 0x2526, //BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT - 0xA6CE: 0x2527, //BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT - 0xA6CF: 0x2529, //BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY - 0xA6D0: 0x252A, //BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY - 0xA6D1: 0x252D, //BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT - 0xA6D2: 0x252E, //BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT - 0xA6D3: 0x2531, //BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY - 0xA6D4: 0x2532, //BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY - 0xA6D5: 0x2535, //BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT - 0xA6D6: 0x2536, //BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT - 0xA6D7: 0x2539, //BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY - 0xA6D8: 0x253A, //BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY - 0xA6D9: 0x253D, //BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT - 0xA6DA: 0x253E, //BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT - 0xA6DB: 0x2540, //BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT - 0xA6DC: 0x2541, //BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT - 0xA6DD: 0x2543, //BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT - 0xA6DE: 0x2544, //BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT - 0xA6DF: 0x2545, //BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT - 0xA6E0: 0x2546, //BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT - 0xA6E1: 0x2547, //BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY - 0xA6E2: 0x2548, //BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY - 0xA6E3: 0x2549, //BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY - 0xA6E4: 0x254A, //BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY - 0xA741: 0xCB0B, //HANGUL SYLLABLE SSANGCIEUC WAE CHIEUCH - 0xA742: 0xCB0C, //HANGUL SYLLABLE SSANGCIEUC WAE KHIEUKH - 0xA743: 0xCB0D, //HANGUL SYLLABLE SSANGCIEUC WAE THIEUTH - 0xA744: 0xCB0E, //HANGUL SYLLABLE SSANGCIEUC WAE PHIEUPH - 0xA745: 0xCB0F, //HANGUL SYLLABLE SSANGCIEUC WAE HIEUH - 0xA746: 0xCB11, //HANGUL SYLLABLE SSANGCIEUC OE KIYEOK - 0xA747: 0xCB12, //HANGUL SYLLABLE SSANGCIEUC OE SSANGKIYEOK - 0xA748: 0xCB13, //HANGUL SYLLABLE SSANGCIEUC OE KIYEOKSIOS - 0xA749: 0xCB15, //HANGUL SYLLABLE SSANGCIEUC OE NIEUNCIEUC - 0xA74A: 0xCB16, //HANGUL SYLLABLE SSANGCIEUC OE NIEUNHIEUH - 0xA74B: 0xCB17, //HANGUL SYLLABLE SSANGCIEUC OE TIKEUT - 0xA74C: 0xCB19, //HANGUL SYLLABLE SSANGCIEUC OE RIEULKIYEOK - 0xA74D: 0xCB1A, //HANGUL SYLLABLE SSANGCIEUC OE RIEULMIEUM - 0xA74E: 0xCB1B, //HANGUL SYLLABLE SSANGCIEUC OE RIEULPIEUP - 0xA74F: 0xCB1C, //HANGUL SYLLABLE SSANGCIEUC OE RIEULSIOS - 0xA750: 0xCB1D, //HANGUL SYLLABLE SSANGCIEUC OE RIEULTHIEUTH - 0xA751: 0xCB1E, //HANGUL SYLLABLE SSANGCIEUC OE RIEULPHIEUPH - 0xA752: 0xCB1F, //HANGUL SYLLABLE SSANGCIEUC OE RIEULHIEUH - 0xA753: 0xCB22, //HANGUL SYLLABLE SSANGCIEUC OE PIEUPSIOS - 0xA754: 0xCB23, //HANGUL SYLLABLE SSANGCIEUC OE SIOS - 0xA755: 0xCB24, //HANGUL SYLLABLE SSANGCIEUC OE SSANGSIOS - 0xA756: 0xCB25, //HANGUL SYLLABLE SSANGCIEUC OE IEUNG - 0xA757: 0xCB26, //HANGUL SYLLABLE SSANGCIEUC OE CIEUC - 0xA758: 0xCB27, //HANGUL SYLLABLE SSANGCIEUC OE CHIEUCH - 0xA759: 0xCB28, //HANGUL SYLLABLE SSANGCIEUC OE KHIEUKH - 0xA75A: 0xCB29, //HANGUL SYLLABLE SSANGCIEUC OE THIEUTH - 0xA761: 0xCB2A, //HANGUL SYLLABLE SSANGCIEUC OE PHIEUPH - 0xA762: 0xCB2B, //HANGUL SYLLABLE SSANGCIEUC OE HIEUH - 0xA763: 0xCB2C, //HANGUL SYLLABLE SSANGCIEUC YO - 0xA764: 0xCB2D, //HANGUL SYLLABLE SSANGCIEUC YO KIYEOK - 0xA765: 0xCB2E, //HANGUL SYLLABLE SSANGCIEUC YO SSANGKIYEOK - 0xA766: 0xCB2F, //HANGUL SYLLABLE SSANGCIEUC YO KIYEOKSIOS - 0xA767: 0xCB30, //HANGUL SYLLABLE SSANGCIEUC YO NIEUN - 0xA768: 0xCB31, //HANGUL SYLLABLE SSANGCIEUC YO NIEUNCIEUC - 0xA769: 0xCB32, //HANGUL SYLLABLE SSANGCIEUC YO NIEUNHIEUH - 0xA76A: 0xCB33, //HANGUL SYLLABLE SSANGCIEUC YO TIKEUT - 0xA76B: 0xCB34, //HANGUL SYLLABLE SSANGCIEUC YO RIEUL - 0xA76C: 0xCB35, //HANGUL SYLLABLE SSANGCIEUC YO RIEULKIYEOK - 0xA76D: 0xCB36, //HANGUL SYLLABLE SSANGCIEUC YO RIEULMIEUM - 0xA76E: 0xCB37, //HANGUL SYLLABLE SSANGCIEUC YO RIEULPIEUP - 0xA76F: 0xCB38, //HANGUL SYLLABLE SSANGCIEUC YO RIEULSIOS - 0xA770: 0xCB39, //HANGUL SYLLABLE SSANGCIEUC YO RIEULTHIEUTH - 0xA771: 0xCB3A, //HANGUL SYLLABLE SSANGCIEUC YO RIEULPHIEUPH - 0xA772: 0xCB3B, //HANGUL SYLLABLE SSANGCIEUC YO RIEULHIEUH - 0xA773: 0xCB3C, //HANGUL SYLLABLE SSANGCIEUC YO MIEUM - 0xA774: 0xCB3D, //HANGUL SYLLABLE SSANGCIEUC YO PIEUP - 0xA775: 0xCB3E, //HANGUL SYLLABLE SSANGCIEUC YO PIEUPSIOS - 0xA776: 0xCB3F, //HANGUL SYLLABLE SSANGCIEUC YO SIOS - 0xA777: 0xCB40, //HANGUL SYLLABLE SSANGCIEUC YO SSANGSIOS - 0xA778: 0xCB42, //HANGUL SYLLABLE SSANGCIEUC YO CIEUC - 0xA779: 0xCB43, //HANGUL SYLLABLE SSANGCIEUC YO CHIEUCH - 0xA77A: 0xCB44, //HANGUL SYLLABLE SSANGCIEUC YO KHIEUKH - 0xA781: 0xCB45, //HANGUL SYLLABLE SSANGCIEUC YO THIEUTH - 0xA782: 0xCB46, //HANGUL SYLLABLE SSANGCIEUC YO PHIEUPH - 0xA783: 0xCB47, //HANGUL SYLLABLE SSANGCIEUC YO HIEUH - 0xA784: 0xCB4A, //HANGUL SYLLABLE SSANGCIEUC U SSANGKIYEOK - 0xA785: 0xCB4B, //HANGUL SYLLABLE SSANGCIEUC U KIYEOKSIOS - 0xA786: 0xCB4D, //HANGUL SYLLABLE SSANGCIEUC U NIEUNCIEUC - 0xA787: 0xCB4E, //HANGUL SYLLABLE SSANGCIEUC U NIEUNHIEUH - 0xA788: 0xCB4F, //HANGUL SYLLABLE SSANGCIEUC U TIKEUT - 0xA789: 0xCB51, //HANGUL SYLLABLE SSANGCIEUC U RIEULKIYEOK - 0xA78A: 0xCB52, //HANGUL SYLLABLE SSANGCIEUC U RIEULMIEUM - 0xA78B: 0xCB53, //HANGUL SYLLABLE SSANGCIEUC U RIEULPIEUP - 0xA78C: 0xCB54, //HANGUL SYLLABLE SSANGCIEUC U RIEULSIOS - 0xA78D: 0xCB55, //HANGUL SYLLABLE SSANGCIEUC U RIEULTHIEUTH - 0xA78E: 0xCB56, //HANGUL SYLLABLE SSANGCIEUC U RIEULPHIEUPH - 0xA78F: 0xCB57, //HANGUL SYLLABLE SSANGCIEUC U RIEULHIEUH - 0xA790: 0xCB5A, //HANGUL SYLLABLE SSANGCIEUC U PIEUPSIOS - 0xA791: 0xCB5B, //HANGUL SYLLABLE SSANGCIEUC U SIOS - 0xA792: 0xCB5C, //HANGUL SYLLABLE SSANGCIEUC U SSANGSIOS - 0xA793: 0xCB5E, //HANGUL SYLLABLE SSANGCIEUC U CIEUC - 0xA794: 0xCB5F, //HANGUL SYLLABLE SSANGCIEUC U CHIEUCH - 0xA795: 0xCB60, //HANGUL SYLLABLE SSANGCIEUC U KHIEUKH - 0xA796: 0xCB61, //HANGUL SYLLABLE SSANGCIEUC U THIEUTH - 0xA797: 0xCB62, //HANGUL SYLLABLE SSANGCIEUC U PHIEUPH - 0xA798: 0xCB63, //HANGUL SYLLABLE SSANGCIEUC U HIEUH - 0xA799: 0xCB65, //HANGUL SYLLABLE SSANGCIEUC WEO KIYEOK - 0xA79A: 0xCB66, //HANGUL SYLLABLE SSANGCIEUC WEO SSANGKIYEOK - 0xA79B: 0xCB67, //HANGUL SYLLABLE SSANGCIEUC WEO KIYEOKSIOS - 0xA79C: 0xCB68, //HANGUL SYLLABLE SSANGCIEUC WEO NIEUN - 0xA79D: 0xCB69, //HANGUL SYLLABLE SSANGCIEUC WEO NIEUNCIEUC - 0xA79E: 0xCB6A, //HANGUL SYLLABLE SSANGCIEUC WEO NIEUNHIEUH - 0xA79F: 0xCB6B, //HANGUL SYLLABLE SSANGCIEUC WEO TIKEUT - 0xA7A0: 0xCB6C, //HANGUL SYLLABLE SSANGCIEUC WEO RIEUL - 0xA7A1: 0x3395, //SQUARE MU L - 0xA7A2: 0x3396, //SQUARE ML - 0xA7A3: 0x3397, //SQUARE DL - 0xA7A4: 0x2113, //SCRIPT SMALL L - 0xA7A5: 0x3398, //SQUARE KL - 0xA7A6: 0x33C4, //SQUARE CC - 0xA7A7: 0x33A3, //SQUARE MM CUBED - 0xA7A8: 0x33A4, //SQUARE CM CUBED - 0xA7A9: 0x33A5, //SQUARE M CUBED - 0xA7AA: 0x33A6, //SQUARE KM CUBED - 0xA7AB: 0x3399, //SQUARE FM - 0xA7AC: 0x339A, //SQUARE NM - 0xA7AD: 0x339B, //SQUARE MU M - 0xA7AE: 0x339C, //SQUARE MM - 0xA7AF: 0x339D, //SQUARE CM - 0xA7B0: 0x339E, //SQUARE KM - 0xA7B1: 0x339F, //SQUARE MM SQUARED - 0xA7B2: 0x33A0, //SQUARE CM SQUARED - 0xA7B3: 0x33A1, //SQUARE M SQUARED - 0xA7B4: 0x33A2, //SQUARE KM SQUARED - 0xA7B5: 0x33CA, //SQUARE HA - 0xA7B6: 0x338D, //SQUARE MU G - 0xA7B7: 0x338E, //SQUARE MG - 0xA7B8: 0x338F, //SQUARE KG - 0xA7B9: 0x33CF, //SQUARE KT - 0xA7BA: 0x3388, //SQUARE CAL - 0xA7BB: 0x3389, //SQUARE KCAL - 0xA7BC: 0x33C8, //SQUARE DB - 0xA7BD: 0x33A7, //SQUARE M OVER S - 0xA7BE: 0x33A8, //SQUARE M OVER S SQUARED - 0xA7BF: 0x33B0, //SQUARE PS - 0xA7C0: 0x33B1, //SQUARE NS - 0xA7C1: 0x33B2, //SQUARE MU S - 0xA7C2: 0x33B3, //SQUARE MS - 0xA7C3: 0x33B4, //SQUARE PV - 0xA7C4: 0x33B5, //SQUARE NV - 0xA7C5: 0x33B6, //SQUARE MU V - 0xA7C6: 0x33B7, //SQUARE MV - 0xA7C7: 0x33B8, //SQUARE KV - 0xA7C8: 0x33B9, //SQUARE MV MEGA - 0xA7C9: 0x3380, //SQUARE PA AMPS - 0xA7CA: 0x3381, //SQUARE NA - 0xA7CB: 0x3382, //SQUARE MU A - 0xA7CC: 0x3383, //SQUARE MA - 0xA7CD: 0x3384, //SQUARE KA - 0xA7CE: 0x33BA, //SQUARE PW - 0xA7CF: 0x33BB, //SQUARE NW - 0xA7D0: 0x33BC, //SQUARE MU W - 0xA7D1: 0x33BD, //SQUARE MW - 0xA7D2: 0x33BE, //SQUARE KW - 0xA7D3: 0x33BF, //SQUARE MW MEGA - 0xA7D4: 0x3390, //SQUARE HZ - 0xA7D5: 0x3391, //SQUARE KHZ - 0xA7D6: 0x3392, //SQUARE MHZ - 0xA7D7: 0x3393, //SQUARE GHZ - 0xA7D8: 0x3394, //SQUARE THZ - 0xA7D9: 0x2126, //OHM SIGN - 0xA7DA: 0x33C0, //SQUARE K OHM - 0xA7DB: 0x33C1, //SQUARE M OHM - 0xA7DC: 0x338A, //SQUARE PF - 0xA7DD: 0x338B, //SQUARE NF - 0xA7DE: 0x338C, //SQUARE MU F - 0xA7DF: 0x33D6, //SQUARE MOL - 0xA7E0: 0x33C5, //SQUARE CD - 0xA7E1: 0x33AD, //SQUARE RAD - 0xA7E2: 0x33AE, //SQUARE RAD OVER S - 0xA7E3: 0x33AF, //SQUARE RAD OVER S SQUARED - 0xA7E4: 0x33DB, //SQUARE SR - 0xA7E5: 0x33A9, //SQUARE PA - 0xA7E6: 0x33AA, //SQUARE KPA - 0xA7E7: 0x33AB, //SQUARE MPA - 0xA7E8: 0x33AC, //SQUARE GPA - 0xA7E9: 0x33DD, //SQUARE WB - 0xA7EA: 0x33D0, //SQUARE LM - 0xA7EB: 0x33D3, //SQUARE LX - 0xA7EC: 0x33C3, //SQUARE BQ - 0xA7ED: 0x33C9, //SQUARE GY - 0xA7EE: 0x33DC, //SQUARE SV - 0xA7EF: 0x33C6, //SQUARE C OVER KG - 0xA841: 0xCB6D, //HANGUL SYLLABLE SSANGCIEUC WEO RIEULKIYEOK - 0xA842: 0xCB6E, //HANGUL SYLLABLE SSANGCIEUC WEO RIEULMIEUM - 0xA843: 0xCB6F, //HANGUL SYLLABLE SSANGCIEUC WEO RIEULPIEUP - 0xA844: 0xCB70, //HANGUL SYLLABLE SSANGCIEUC WEO RIEULSIOS - 0xA845: 0xCB71, //HANGUL SYLLABLE SSANGCIEUC WEO RIEULTHIEUTH - 0xA846: 0xCB72, //HANGUL SYLLABLE SSANGCIEUC WEO RIEULPHIEUPH - 0xA847: 0xCB73, //HANGUL SYLLABLE SSANGCIEUC WEO RIEULHIEUH - 0xA848: 0xCB74, //HANGUL SYLLABLE SSANGCIEUC WEO MIEUM - 0xA849: 0xCB75, //HANGUL SYLLABLE SSANGCIEUC WEO PIEUP - 0xA84A: 0xCB76, //HANGUL SYLLABLE SSANGCIEUC WEO PIEUPSIOS - 0xA84B: 0xCB77, //HANGUL SYLLABLE SSANGCIEUC WEO SIOS - 0xA84C: 0xCB7A, //HANGUL SYLLABLE SSANGCIEUC WEO CIEUC - 0xA84D: 0xCB7B, //HANGUL SYLLABLE SSANGCIEUC WEO CHIEUCH - 0xA84E: 0xCB7C, //HANGUL SYLLABLE SSANGCIEUC WEO KHIEUKH - 0xA84F: 0xCB7D, //HANGUL SYLLABLE SSANGCIEUC WEO THIEUTH - 0xA850: 0xCB7E, //HANGUL SYLLABLE SSANGCIEUC WEO PHIEUPH - 0xA851: 0xCB7F, //HANGUL SYLLABLE SSANGCIEUC WEO HIEUH - 0xA852: 0xCB80, //HANGUL SYLLABLE SSANGCIEUC WE - 0xA853: 0xCB81, //HANGUL SYLLABLE SSANGCIEUC WE KIYEOK - 0xA854: 0xCB82, //HANGUL SYLLABLE SSANGCIEUC WE SSANGKIYEOK - 0xA855: 0xCB83, //HANGUL SYLLABLE SSANGCIEUC WE KIYEOKSIOS - 0xA856: 0xCB84, //HANGUL SYLLABLE SSANGCIEUC WE NIEUN - 0xA857: 0xCB85, //HANGUL SYLLABLE SSANGCIEUC WE NIEUNCIEUC - 0xA858: 0xCB86, //HANGUL SYLLABLE SSANGCIEUC WE NIEUNHIEUH - 0xA859: 0xCB87, //HANGUL SYLLABLE SSANGCIEUC WE TIKEUT - 0xA85A: 0xCB88, //HANGUL SYLLABLE SSANGCIEUC WE RIEUL - 0xA861: 0xCB89, //HANGUL SYLLABLE SSANGCIEUC WE RIEULKIYEOK - 0xA862: 0xCB8A, //HANGUL SYLLABLE SSANGCIEUC WE RIEULMIEUM - 0xA863: 0xCB8B, //HANGUL SYLLABLE SSANGCIEUC WE RIEULPIEUP - 0xA864: 0xCB8C, //HANGUL SYLLABLE SSANGCIEUC WE RIEULSIOS - 0xA865: 0xCB8D, //HANGUL SYLLABLE SSANGCIEUC WE RIEULTHIEUTH - 0xA866: 0xCB8E, //HANGUL SYLLABLE SSANGCIEUC WE RIEULPHIEUPH - 0xA867: 0xCB8F, //HANGUL SYLLABLE SSANGCIEUC WE RIEULHIEUH - 0xA868: 0xCB90, //HANGUL SYLLABLE SSANGCIEUC WE MIEUM - 0xA869: 0xCB91, //HANGUL SYLLABLE SSANGCIEUC WE PIEUP - 0xA86A: 0xCB92, //HANGUL SYLLABLE SSANGCIEUC WE PIEUPSIOS - 0xA86B: 0xCB93, //HANGUL SYLLABLE SSANGCIEUC WE SIOS - 0xA86C: 0xCB94, //HANGUL SYLLABLE SSANGCIEUC WE SSANGSIOS - 0xA86D: 0xCB95, //HANGUL SYLLABLE SSANGCIEUC WE IEUNG - 0xA86E: 0xCB96, //HANGUL SYLLABLE SSANGCIEUC WE CIEUC - 0xA86F: 0xCB97, //HANGUL SYLLABLE SSANGCIEUC WE CHIEUCH - 0xA870: 0xCB98, //HANGUL SYLLABLE SSANGCIEUC WE KHIEUKH - 0xA871: 0xCB99, //HANGUL SYLLABLE SSANGCIEUC WE THIEUTH - 0xA872: 0xCB9A, //HANGUL SYLLABLE SSANGCIEUC WE PHIEUPH - 0xA873: 0xCB9B, //HANGUL SYLLABLE SSANGCIEUC WE HIEUH - 0xA874: 0xCB9D, //HANGUL SYLLABLE SSANGCIEUC WI KIYEOK - 0xA875: 0xCB9E, //HANGUL SYLLABLE SSANGCIEUC WI SSANGKIYEOK - 0xA876: 0xCB9F, //HANGUL SYLLABLE SSANGCIEUC WI KIYEOKSIOS - 0xA877: 0xCBA0, //HANGUL SYLLABLE SSANGCIEUC WI NIEUN - 0xA878: 0xCBA1, //HANGUL SYLLABLE SSANGCIEUC WI NIEUNCIEUC - 0xA879: 0xCBA2, //HANGUL SYLLABLE SSANGCIEUC WI NIEUNHIEUH - 0xA87A: 0xCBA3, //HANGUL SYLLABLE SSANGCIEUC WI TIKEUT - 0xA881: 0xCBA4, //HANGUL SYLLABLE SSANGCIEUC WI RIEUL - 0xA882: 0xCBA5, //HANGUL SYLLABLE SSANGCIEUC WI RIEULKIYEOK - 0xA883: 0xCBA6, //HANGUL SYLLABLE SSANGCIEUC WI RIEULMIEUM - 0xA884: 0xCBA7, //HANGUL SYLLABLE SSANGCIEUC WI RIEULPIEUP - 0xA885: 0xCBA8, //HANGUL SYLLABLE SSANGCIEUC WI RIEULSIOS - 0xA886: 0xCBA9, //HANGUL SYLLABLE SSANGCIEUC WI RIEULTHIEUTH - 0xA887: 0xCBAA, //HANGUL SYLLABLE SSANGCIEUC WI RIEULPHIEUPH - 0xA888: 0xCBAB, //HANGUL SYLLABLE SSANGCIEUC WI RIEULHIEUH - 0xA889: 0xCBAC, //HANGUL SYLLABLE SSANGCIEUC WI MIEUM - 0xA88A: 0xCBAD, //HANGUL SYLLABLE SSANGCIEUC WI PIEUP - 0xA88B: 0xCBAE, //HANGUL SYLLABLE SSANGCIEUC WI PIEUPSIOS - 0xA88C: 0xCBAF, //HANGUL SYLLABLE SSANGCIEUC WI SIOS - 0xA88D: 0xCBB0, //HANGUL SYLLABLE SSANGCIEUC WI SSANGSIOS - 0xA88E: 0xCBB1, //HANGUL SYLLABLE SSANGCIEUC WI IEUNG - 0xA88F: 0xCBB2, //HANGUL SYLLABLE SSANGCIEUC WI CIEUC - 0xA890: 0xCBB3, //HANGUL SYLLABLE SSANGCIEUC WI CHIEUCH - 0xA891: 0xCBB4, //HANGUL SYLLABLE SSANGCIEUC WI KHIEUKH - 0xA892: 0xCBB5, //HANGUL SYLLABLE SSANGCIEUC WI THIEUTH - 0xA893: 0xCBB6, //HANGUL SYLLABLE SSANGCIEUC WI PHIEUPH - 0xA894: 0xCBB7, //HANGUL SYLLABLE SSANGCIEUC WI HIEUH - 0xA895: 0xCBB9, //HANGUL SYLLABLE SSANGCIEUC YU KIYEOK - 0xA896: 0xCBBA, //HANGUL SYLLABLE SSANGCIEUC YU SSANGKIYEOK - 0xA897: 0xCBBB, //HANGUL SYLLABLE SSANGCIEUC YU KIYEOKSIOS - 0xA898: 0xCBBC, //HANGUL SYLLABLE SSANGCIEUC YU NIEUN - 0xA899: 0xCBBD, //HANGUL SYLLABLE SSANGCIEUC YU NIEUNCIEUC - 0xA89A: 0xCBBE, //HANGUL SYLLABLE SSANGCIEUC YU NIEUNHIEUH - 0xA89B: 0xCBBF, //HANGUL SYLLABLE SSANGCIEUC YU TIKEUT - 0xA89C: 0xCBC0, //HANGUL SYLLABLE SSANGCIEUC YU RIEUL - 0xA89D: 0xCBC1, //HANGUL SYLLABLE SSANGCIEUC YU RIEULKIYEOK - 0xA89E: 0xCBC2, //HANGUL SYLLABLE SSANGCIEUC YU RIEULMIEUM - 0xA89F: 0xCBC3, //HANGUL SYLLABLE SSANGCIEUC YU RIEULPIEUP - 0xA8A0: 0xCBC4, //HANGUL SYLLABLE SSANGCIEUC YU RIEULSIOS - 0xA8A1: 0x00C6, //LATIN CAPITAL LETTER AE - 0xA8A2: 0x00D0, //LATIN CAPITAL LETTER ETH - 0xA8A3: 0x00AA, //FEMININE ORDINAL INDICATOR - 0xA8A4: 0x0126, //LATIN CAPITAL LETTER H WITH STROKE - 0xA8A6: 0x0132, //LATIN CAPITAL LIGATURE IJ - 0xA8A8: 0x013F, //LATIN CAPITAL LETTER L WITH MIDDLE DOT - 0xA8A9: 0x0141, //LATIN CAPITAL LETTER L WITH STROKE - 0xA8AA: 0x00D8, //LATIN CAPITAL LETTER O WITH STROKE - 0xA8AB: 0x0152, //LATIN CAPITAL LIGATURE OE - 0xA8AC: 0x00BA, //MASCULINE ORDINAL INDICATOR - 0xA8AD: 0x00DE, //LATIN CAPITAL LETTER THORN - 0xA8AE: 0x0166, //LATIN CAPITAL LETTER T WITH STROKE - 0xA8AF: 0x014A, //LATIN CAPITAL LETTER ENG - 0xA8B1: 0x3260, //CIRCLED HANGUL KIYEOK - 0xA8B2: 0x3261, //CIRCLED HANGUL NIEUN - 0xA8B3: 0x3262, //CIRCLED HANGUL TIKEUT - 0xA8B4: 0x3263, //CIRCLED HANGUL RIEUL - 0xA8B5: 0x3264, //CIRCLED HANGUL MIEUM - 0xA8B6: 0x3265, //CIRCLED HANGUL PIEUP - 0xA8B7: 0x3266, //CIRCLED HANGUL SIOS - 0xA8B8: 0x3267, //CIRCLED HANGUL IEUNG - 0xA8B9: 0x3268, //CIRCLED HANGUL CIEUC - 0xA8BA: 0x3269, //CIRCLED HANGUL CHIEUCH - 0xA8BB: 0x326A, //CIRCLED HANGUL KHIEUKH - 0xA8BC: 0x326B, //CIRCLED HANGUL THIEUTH - 0xA8BD: 0x326C, //CIRCLED HANGUL PHIEUPH - 0xA8BE: 0x326D, //CIRCLED HANGUL HIEUH - 0xA8BF: 0x326E, //CIRCLED HANGUL KIYEOK A - 0xA8C0: 0x326F, //CIRCLED HANGUL NIEUN A - 0xA8C1: 0x3270, //CIRCLED HANGUL TIKEUT A - 0xA8C2: 0x3271, //CIRCLED HANGUL RIEUL A - 0xA8C3: 0x3272, //CIRCLED HANGUL MIEUM A - 0xA8C4: 0x3273, //CIRCLED HANGUL PIEUP A - 0xA8C5: 0x3274, //CIRCLED HANGUL SIOS A - 0xA8C6: 0x3275, //CIRCLED HANGUL IEUNG A - 0xA8C7: 0x3276, //CIRCLED HANGUL CIEUC A - 0xA8C8: 0x3277, //CIRCLED HANGUL CHIEUCH A - 0xA8C9: 0x3278, //CIRCLED HANGUL KHIEUKH A - 0xA8CA: 0x3279, //CIRCLED HANGUL THIEUTH A - 0xA8CB: 0x327A, //CIRCLED HANGUL PHIEUPH A - 0xA8CC: 0x327B, //CIRCLED HANGUL HIEUH A - 0xA8CD: 0x24D0, //CIRCLED LATIN SMALL LETTER A - 0xA8CE: 0x24D1, //CIRCLED LATIN SMALL LETTER B - 0xA8CF: 0x24D2, //CIRCLED LATIN SMALL LETTER C - 0xA8D0: 0x24D3, //CIRCLED LATIN SMALL LETTER D - 0xA8D1: 0x24D4, //CIRCLED LATIN SMALL LETTER E - 0xA8D2: 0x24D5, //CIRCLED LATIN SMALL LETTER F - 0xA8D3: 0x24D6, //CIRCLED LATIN SMALL LETTER G - 0xA8D4: 0x24D7, //CIRCLED LATIN SMALL LETTER H - 0xA8D5: 0x24D8, //CIRCLED LATIN SMALL LETTER I - 0xA8D6: 0x24D9, //CIRCLED LATIN SMALL LETTER J - 0xA8D7: 0x24DA, //CIRCLED LATIN SMALL LETTER K - 0xA8D8: 0x24DB, //CIRCLED LATIN SMALL LETTER L - 0xA8D9: 0x24DC, //CIRCLED LATIN SMALL LETTER M - 0xA8DA: 0x24DD, //CIRCLED LATIN SMALL LETTER N - 0xA8DB: 0x24DE, //CIRCLED LATIN SMALL LETTER O - 0xA8DC: 0x24DF, //CIRCLED LATIN SMALL LETTER P - 0xA8DD: 0x24E0, //CIRCLED LATIN SMALL LETTER Q - 0xA8DE: 0x24E1, //CIRCLED LATIN SMALL LETTER R - 0xA8DF: 0x24E2, //CIRCLED LATIN SMALL LETTER S - 0xA8E0: 0x24E3, //CIRCLED LATIN SMALL LETTER T - 0xA8E1: 0x24E4, //CIRCLED LATIN SMALL LETTER U - 0xA8E2: 0x24E5, //CIRCLED LATIN SMALL LETTER V - 0xA8E3: 0x24E6, //CIRCLED LATIN SMALL LETTER W - 0xA8E4: 0x24E7, //CIRCLED LATIN SMALL LETTER X - 0xA8E5: 0x24E8, //CIRCLED LATIN SMALL LETTER Y - 0xA8E6: 0x24E9, //CIRCLED LATIN SMALL LETTER Z - 0xA8E7: 0x2460, //CIRCLED DIGIT ONE - 0xA8E8: 0x2461, //CIRCLED DIGIT TWO - 0xA8E9: 0x2462, //CIRCLED DIGIT THREE - 0xA8EA: 0x2463, //CIRCLED DIGIT FOUR - 0xA8EB: 0x2464, //CIRCLED DIGIT FIVE - 0xA8EC: 0x2465, //CIRCLED DIGIT SIX - 0xA8ED: 0x2466, //CIRCLED DIGIT SEVEN - 0xA8EE: 0x2467, //CIRCLED DIGIT EIGHT - 0xA8EF: 0x2468, //CIRCLED DIGIT NINE - 0xA8F0: 0x2469, //CIRCLED NUMBER TEN - 0xA8F1: 0x246A, //CIRCLED NUMBER ELEVEN - 0xA8F2: 0x246B, //CIRCLED NUMBER TWELVE - 0xA8F3: 0x246C, //CIRCLED NUMBER THIRTEEN - 0xA8F4: 0x246D, //CIRCLED NUMBER FOURTEEN - 0xA8F5: 0x246E, //CIRCLED NUMBER FIFTEEN - 0xA8F6: 0x00BD, //VULGAR FRACTION ONE HALF - 0xA8F7: 0x2153, //VULGAR FRACTION ONE THIRD - 0xA8F8: 0x2154, //VULGAR FRACTION TWO THIRDS - 0xA8F9: 0x00BC, //VULGAR FRACTION ONE QUARTER - 0xA8FA: 0x00BE, //VULGAR FRACTION THREE QUARTERS - 0xA8FB: 0x215B, //VULGAR FRACTION ONE EIGHTH - 0xA8FC: 0x215C, //VULGAR FRACTION THREE EIGHTHS - 0xA8FD: 0x215D, //VULGAR FRACTION FIVE EIGHTHS - 0xA8FE: 0x215E, //VULGAR FRACTION SEVEN EIGHTHS - 0xA941: 0xCBC5, //HANGUL SYLLABLE SSANGCIEUC YU RIEULTHIEUTH - 0xA942: 0xCBC6, //HANGUL SYLLABLE SSANGCIEUC YU RIEULPHIEUPH - 0xA943: 0xCBC7, //HANGUL SYLLABLE SSANGCIEUC YU RIEULHIEUH - 0xA944: 0xCBC8, //HANGUL SYLLABLE SSANGCIEUC YU MIEUM - 0xA945: 0xCBC9, //HANGUL SYLLABLE SSANGCIEUC YU PIEUP - 0xA946: 0xCBCA, //HANGUL SYLLABLE SSANGCIEUC YU PIEUPSIOS - 0xA947: 0xCBCB, //HANGUL SYLLABLE SSANGCIEUC YU SIOS - 0xA948: 0xCBCC, //HANGUL SYLLABLE SSANGCIEUC YU SSANGSIOS - 0xA949: 0xCBCD, //HANGUL SYLLABLE SSANGCIEUC YU IEUNG - 0xA94A: 0xCBCE, //HANGUL SYLLABLE SSANGCIEUC YU CIEUC - 0xA94B: 0xCBCF, //HANGUL SYLLABLE SSANGCIEUC YU CHIEUCH - 0xA94C: 0xCBD0, //HANGUL SYLLABLE SSANGCIEUC YU KHIEUKH - 0xA94D: 0xCBD1, //HANGUL SYLLABLE SSANGCIEUC YU THIEUTH - 0xA94E: 0xCBD2, //HANGUL SYLLABLE SSANGCIEUC YU PHIEUPH - 0xA94F: 0xCBD3, //HANGUL SYLLABLE SSANGCIEUC YU HIEUH - 0xA950: 0xCBD5, //HANGUL SYLLABLE SSANGCIEUC EU KIYEOK - 0xA951: 0xCBD6, //HANGUL SYLLABLE SSANGCIEUC EU SSANGKIYEOK - 0xA952: 0xCBD7, //HANGUL SYLLABLE SSANGCIEUC EU KIYEOKSIOS - 0xA953: 0xCBD8, //HANGUL SYLLABLE SSANGCIEUC EU NIEUN - 0xA954: 0xCBD9, //HANGUL SYLLABLE SSANGCIEUC EU NIEUNCIEUC - 0xA955: 0xCBDA, //HANGUL SYLLABLE SSANGCIEUC EU NIEUNHIEUH - 0xA956: 0xCBDB, //HANGUL SYLLABLE SSANGCIEUC EU TIKEUT - 0xA957: 0xCBDC, //HANGUL SYLLABLE SSANGCIEUC EU RIEUL - 0xA958: 0xCBDD, //HANGUL SYLLABLE SSANGCIEUC EU RIEULKIYEOK - 0xA959: 0xCBDE, //HANGUL SYLLABLE SSANGCIEUC EU RIEULMIEUM - 0xA95A: 0xCBDF, //HANGUL SYLLABLE SSANGCIEUC EU RIEULPIEUP - 0xA961: 0xCBE0, //HANGUL SYLLABLE SSANGCIEUC EU RIEULSIOS - 0xA962: 0xCBE1, //HANGUL SYLLABLE SSANGCIEUC EU RIEULTHIEUTH - 0xA963: 0xCBE2, //HANGUL SYLLABLE SSANGCIEUC EU RIEULPHIEUPH - 0xA964: 0xCBE3, //HANGUL SYLLABLE SSANGCIEUC EU RIEULHIEUH - 0xA965: 0xCBE5, //HANGUL SYLLABLE SSANGCIEUC EU PIEUP - 0xA966: 0xCBE6, //HANGUL SYLLABLE SSANGCIEUC EU PIEUPSIOS - 0xA967: 0xCBE8, //HANGUL SYLLABLE SSANGCIEUC EU SSANGSIOS - 0xA968: 0xCBEA, //HANGUL SYLLABLE SSANGCIEUC EU CIEUC - 0xA969: 0xCBEB, //HANGUL SYLLABLE SSANGCIEUC EU CHIEUCH - 0xA96A: 0xCBEC, //HANGUL SYLLABLE SSANGCIEUC EU KHIEUKH - 0xA96B: 0xCBED, //HANGUL SYLLABLE SSANGCIEUC EU THIEUTH - 0xA96C: 0xCBEE, //HANGUL SYLLABLE SSANGCIEUC EU PHIEUPH - 0xA96D: 0xCBEF, //HANGUL SYLLABLE SSANGCIEUC EU HIEUH - 0xA96E: 0xCBF0, //HANGUL SYLLABLE SSANGCIEUC YI - 0xA96F: 0xCBF1, //HANGUL SYLLABLE SSANGCIEUC YI KIYEOK - 0xA970: 0xCBF2, //HANGUL SYLLABLE SSANGCIEUC YI SSANGKIYEOK - 0xA971: 0xCBF3, //HANGUL SYLLABLE SSANGCIEUC YI KIYEOKSIOS - 0xA972: 0xCBF4, //HANGUL SYLLABLE SSANGCIEUC YI NIEUN - 0xA973: 0xCBF5, //HANGUL SYLLABLE SSANGCIEUC YI NIEUNCIEUC - 0xA974: 0xCBF6, //HANGUL SYLLABLE SSANGCIEUC YI NIEUNHIEUH - 0xA975: 0xCBF7, //HANGUL SYLLABLE SSANGCIEUC YI TIKEUT - 0xA976: 0xCBF8, //HANGUL SYLLABLE SSANGCIEUC YI RIEUL - 0xA977: 0xCBF9, //HANGUL SYLLABLE SSANGCIEUC YI RIEULKIYEOK - 0xA978: 0xCBFA, //HANGUL SYLLABLE SSANGCIEUC YI RIEULMIEUM - 0xA979: 0xCBFB, //HANGUL SYLLABLE SSANGCIEUC YI RIEULPIEUP - 0xA97A: 0xCBFC, //HANGUL SYLLABLE SSANGCIEUC YI RIEULSIOS - 0xA981: 0xCBFD, //HANGUL SYLLABLE SSANGCIEUC YI RIEULTHIEUTH - 0xA982: 0xCBFE, //HANGUL SYLLABLE SSANGCIEUC YI RIEULPHIEUPH - 0xA983: 0xCBFF, //HANGUL SYLLABLE SSANGCIEUC YI RIEULHIEUH - 0xA984: 0xCC00, //HANGUL SYLLABLE SSANGCIEUC YI MIEUM - 0xA985: 0xCC01, //HANGUL SYLLABLE SSANGCIEUC YI PIEUP - 0xA986: 0xCC02, //HANGUL SYLLABLE SSANGCIEUC YI PIEUPSIOS - 0xA987: 0xCC03, //HANGUL SYLLABLE SSANGCIEUC YI SIOS - 0xA988: 0xCC04, //HANGUL SYLLABLE SSANGCIEUC YI SSANGSIOS - 0xA989: 0xCC05, //HANGUL SYLLABLE SSANGCIEUC YI IEUNG - 0xA98A: 0xCC06, //HANGUL SYLLABLE SSANGCIEUC YI CIEUC - 0xA98B: 0xCC07, //HANGUL SYLLABLE SSANGCIEUC YI CHIEUCH - 0xA98C: 0xCC08, //HANGUL SYLLABLE SSANGCIEUC YI KHIEUKH - 0xA98D: 0xCC09, //HANGUL SYLLABLE SSANGCIEUC YI THIEUTH - 0xA98E: 0xCC0A, //HANGUL SYLLABLE SSANGCIEUC YI PHIEUPH - 0xA98F: 0xCC0B, //HANGUL SYLLABLE SSANGCIEUC YI HIEUH - 0xA990: 0xCC0E, //HANGUL SYLLABLE SSANGCIEUC I SSANGKIYEOK - 0xA991: 0xCC0F, //HANGUL SYLLABLE SSANGCIEUC I KIYEOKSIOS - 0xA992: 0xCC11, //HANGUL SYLLABLE SSANGCIEUC I NIEUNCIEUC - 0xA993: 0xCC12, //HANGUL SYLLABLE SSANGCIEUC I NIEUNHIEUH - 0xA994: 0xCC13, //HANGUL SYLLABLE SSANGCIEUC I TIKEUT - 0xA995: 0xCC15, //HANGUL SYLLABLE SSANGCIEUC I RIEULKIYEOK - 0xA996: 0xCC16, //HANGUL SYLLABLE SSANGCIEUC I RIEULMIEUM - 0xA997: 0xCC17, //HANGUL SYLLABLE SSANGCIEUC I RIEULPIEUP - 0xA998: 0xCC18, //HANGUL SYLLABLE SSANGCIEUC I RIEULSIOS - 0xA999: 0xCC19, //HANGUL SYLLABLE SSANGCIEUC I RIEULTHIEUTH - 0xA99A: 0xCC1A, //HANGUL SYLLABLE SSANGCIEUC I RIEULPHIEUPH - 0xA99B: 0xCC1B, //HANGUL SYLLABLE SSANGCIEUC I RIEULHIEUH - 0xA99C: 0xCC1E, //HANGUL SYLLABLE SSANGCIEUC I PIEUPSIOS - 0xA99D: 0xCC1F, //HANGUL SYLLABLE SSANGCIEUC I SIOS - 0xA99E: 0xCC20, //HANGUL SYLLABLE SSANGCIEUC I SSANGSIOS - 0xA99F: 0xCC23, //HANGUL SYLLABLE SSANGCIEUC I CHIEUCH - 0xA9A0: 0xCC24, //HANGUL SYLLABLE SSANGCIEUC I KHIEUKH - 0xA9A1: 0x00E6, //LATIN SMALL LETTER AE - 0xA9A2: 0x0111, //LATIN SMALL LETTER D WITH STROKE - 0xA9A3: 0x00F0, //LATIN SMALL LETTER ETH - 0xA9A4: 0x0127, //LATIN SMALL LETTER H WITH STROKE - 0xA9A5: 0x0131, //LATIN SMALL LETTER DOTLESS I - 0xA9A6: 0x0133, //LATIN SMALL LIGATURE IJ - 0xA9A7: 0x0138, //LATIN SMALL LETTER KRA - 0xA9A8: 0x0140, //LATIN SMALL LETTER L WITH MIDDLE DOT - 0xA9A9: 0x0142, //LATIN SMALL LETTER L WITH STROKE - 0xA9AA: 0x00F8, //LATIN SMALL LETTER O WITH STROKE - 0xA9AB: 0x0153, //LATIN SMALL LIGATURE OE - 0xA9AC: 0x00DF, //LATIN SMALL LETTER SHARP S - 0xA9AD: 0x00FE, //LATIN SMALL LETTER THORN - 0xA9AE: 0x0167, //LATIN SMALL LETTER T WITH STROKE - 0xA9AF: 0x014B, //LATIN SMALL LETTER ENG - 0xA9B0: 0x0149, //LATIN SMALL LETTER N PRECEDED BY APOSTROPHE - 0xA9B1: 0x3200, //PARENTHESIZED HANGUL KIYEOK - 0xA9B2: 0x3201, //PARENTHESIZED HANGUL NIEUN - 0xA9B3: 0x3202, //PARENTHESIZED HANGUL TIKEUT - 0xA9B4: 0x3203, //PARENTHESIZED HANGUL RIEUL - 0xA9B5: 0x3204, //PARENTHESIZED HANGUL MIEUM - 0xA9B6: 0x3205, //PARENTHESIZED HANGUL PIEUP - 0xA9B7: 0x3206, //PARENTHESIZED HANGUL SIOS - 0xA9B8: 0x3207, //PARENTHESIZED HANGUL IEUNG - 0xA9B9: 0x3208, //PARENTHESIZED HANGUL CIEUC - 0xA9BA: 0x3209, //PARENTHESIZED HANGUL CHIEUCH - 0xA9BB: 0x320A, //PARENTHESIZED HANGUL KHIEUKH - 0xA9BC: 0x320B, //PARENTHESIZED HANGUL THIEUTH - 0xA9BD: 0x320C, //PARENTHESIZED HANGUL PHIEUPH - 0xA9BE: 0x320D, //PARENTHESIZED HANGUL HIEUH - 0xA9BF: 0x320E, //PARENTHESIZED HANGUL KIYEOK A - 0xA9C0: 0x320F, //PARENTHESIZED HANGUL NIEUN A - 0xA9C1: 0x3210, //PARENTHESIZED HANGUL TIKEUT A - 0xA9C2: 0x3211, //PARENTHESIZED HANGUL RIEUL A - 0xA9C3: 0x3212, //PARENTHESIZED HANGUL MIEUM A - 0xA9C4: 0x3213, //PARENTHESIZED HANGUL PIEUP A - 0xA9C5: 0x3214, //PARENTHESIZED HANGUL SIOS A - 0xA9C6: 0x3215, //PARENTHESIZED HANGUL IEUNG A - 0xA9C7: 0x3216, //PARENTHESIZED HANGUL CIEUC A - 0xA9C8: 0x3217, //PARENTHESIZED HANGUL CHIEUCH A - 0xA9C9: 0x3218, //PARENTHESIZED HANGUL KHIEUKH A - 0xA9CA: 0x3219, //PARENTHESIZED HANGUL THIEUTH A - 0xA9CB: 0x321A, //PARENTHESIZED HANGUL PHIEUPH A - 0xA9CC: 0x321B, //PARENTHESIZED HANGUL HIEUH A - 0xA9CD: 0x249C, //PARENTHESIZED LATIN SMALL LETTER A - 0xA9CE: 0x249D, //PARENTHESIZED LATIN SMALL LETTER B - 0xA9CF: 0x249E, //PARENTHESIZED LATIN SMALL LETTER C - 0xA9D0: 0x249F, //PARENTHESIZED LATIN SMALL LETTER D - 0xA9D1: 0x24A0, //PARENTHESIZED LATIN SMALL LETTER E - 0xA9D2: 0x24A1, //PARENTHESIZED LATIN SMALL LETTER F - 0xA9D3: 0x24A2, //PARENTHESIZED LATIN SMALL LETTER G - 0xA9D4: 0x24A3, //PARENTHESIZED LATIN SMALL LETTER H - 0xA9D5: 0x24A4, //PARENTHESIZED LATIN SMALL LETTER I - 0xA9D6: 0x24A5, //PARENTHESIZED LATIN SMALL LETTER J - 0xA9D7: 0x24A6, //PARENTHESIZED LATIN SMALL LETTER K - 0xA9D8: 0x24A7, //PARENTHESIZED LATIN SMALL LETTER L - 0xA9D9: 0x24A8, //PARENTHESIZED LATIN SMALL LETTER M - 0xA9DA: 0x24A9, //PARENTHESIZED LATIN SMALL LETTER N - 0xA9DB: 0x24AA, //PARENTHESIZED LATIN SMALL LETTER O - 0xA9DC: 0x24AB, //PARENTHESIZED LATIN SMALL LETTER P - 0xA9DD: 0x24AC, //PARENTHESIZED LATIN SMALL LETTER Q - 0xA9DE: 0x24AD, //PARENTHESIZED LATIN SMALL LETTER R - 0xA9DF: 0x24AE, //PARENTHESIZED LATIN SMALL LETTER S - 0xA9E0: 0x24AF, //PARENTHESIZED LATIN SMALL LETTER T - 0xA9E1: 0x24B0, //PARENTHESIZED LATIN SMALL LETTER U - 0xA9E2: 0x24B1, //PARENTHESIZED LATIN SMALL LETTER V - 0xA9E3: 0x24B2, //PARENTHESIZED LATIN SMALL LETTER W - 0xA9E4: 0x24B3, //PARENTHESIZED LATIN SMALL LETTER X - 0xA9E5: 0x24B4, //PARENTHESIZED LATIN SMALL LETTER Y - 0xA9E6: 0x24B5, //PARENTHESIZED LATIN SMALL LETTER Z - 0xA9E7: 0x2474, //PARENTHESIZED DIGIT ONE - 0xA9E8: 0x2475, //PARENTHESIZED DIGIT TWO - 0xA9E9: 0x2476, //PARENTHESIZED DIGIT THREE - 0xA9EA: 0x2477, //PARENTHESIZED DIGIT FOUR - 0xA9EB: 0x2478, //PARENTHESIZED DIGIT FIVE - 0xA9EC: 0x2479, //PARENTHESIZED DIGIT SIX - 0xA9ED: 0x247A, //PARENTHESIZED DIGIT SEVEN - 0xA9EE: 0x247B, //PARENTHESIZED DIGIT EIGHT - 0xA9EF: 0x247C, //PARENTHESIZED DIGIT NINE - 0xA9F0: 0x247D, //PARENTHESIZED NUMBER TEN - 0xA9F1: 0x247E, //PARENTHESIZED NUMBER ELEVEN - 0xA9F2: 0x247F, //PARENTHESIZED NUMBER TWELVE - 0xA9F3: 0x2480, //PARENTHESIZED NUMBER THIRTEEN - 0xA9F4: 0x2481, //PARENTHESIZED NUMBER FOURTEEN - 0xA9F5: 0x2482, //PARENTHESIZED NUMBER FIFTEEN - 0xA9F6: 0x00B9, //SUPERSCRIPT ONE - 0xA9F7: 0x00B2, //SUPERSCRIPT TWO - 0xA9F8: 0x00B3, //SUPERSCRIPT THREE - 0xA9F9: 0x2074, //SUPERSCRIPT FOUR - 0xA9FA: 0x207F, //SUPERSCRIPT LATIN SMALL LETTER N - 0xA9FB: 0x2081, //SUBSCRIPT ONE - 0xA9FC: 0x2082, //SUBSCRIPT TWO - 0xA9FD: 0x2083, //SUBSCRIPT THREE - 0xA9FE: 0x2084, //SUBSCRIPT FOUR - 0xAA41: 0xCC25, //HANGUL SYLLABLE SSANGCIEUC I THIEUTH - 0xAA42: 0xCC26, //HANGUL SYLLABLE SSANGCIEUC I PHIEUPH - 0xAA43: 0xCC2A, //HANGUL SYLLABLE CHIEUCH A SSANGKIYEOK - 0xAA44: 0xCC2B, //HANGUL SYLLABLE CHIEUCH A KIYEOKSIOS - 0xAA45: 0xCC2D, //HANGUL SYLLABLE CHIEUCH A NIEUNCIEUC - 0xAA46: 0xCC2F, //HANGUL SYLLABLE CHIEUCH A TIKEUT - 0xAA47: 0xCC31, //HANGUL SYLLABLE CHIEUCH A RIEULKIYEOK - 0xAA48: 0xCC32, //HANGUL SYLLABLE CHIEUCH A RIEULMIEUM - 0xAA49: 0xCC33, //HANGUL SYLLABLE CHIEUCH A RIEULPIEUP - 0xAA4A: 0xCC34, //HANGUL SYLLABLE CHIEUCH A RIEULSIOS - 0xAA4B: 0xCC35, //HANGUL SYLLABLE CHIEUCH A RIEULTHIEUTH - 0xAA4C: 0xCC36, //HANGUL SYLLABLE CHIEUCH A RIEULPHIEUPH - 0xAA4D: 0xCC37, //HANGUL SYLLABLE CHIEUCH A RIEULHIEUH - 0xAA4E: 0xCC3A, //HANGUL SYLLABLE CHIEUCH A PIEUPSIOS - 0xAA4F: 0xCC3F, //HANGUL SYLLABLE CHIEUCH A CHIEUCH - 0xAA50: 0xCC40, //HANGUL SYLLABLE CHIEUCH A KHIEUKH - 0xAA51: 0xCC41, //HANGUL SYLLABLE CHIEUCH A THIEUTH - 0xAA52: 0xCC42, //HANGUL SYLLABLE CHIEUCH A PHIEUPH - 0xAA53: 0xCC43, //HANGUL SYLLABLE CHIEUCH A HIEUH - 0xAA54: 0xCC46, //HANGUL SYLLABLE CHIEUCH AE SSANGKIYEOK - 0xAA55: 0xCC47, //HANGUL SYLLABLE CHIEUCH AE KIYEOKSIOS - 0xAA56: 0xCC49, //HANGUL SYLLABLE CHIEUCH AE NIEUNCIEUC - 0xAA57: 0xCC4A, //HANGUL SYLLABLE CHIEUCH AE NIEUNHIEUH - 0xAA58: 0xCC4B, //HANGUL SYLLABLE CHIEUCH AE TIKEUT - 0xAA59: 0xCC4D, //HANGUL SYLLABLE CHIEUCH AE RIEULKIYEOK - 0xAA5A: 0xCC4E, //HANGUL SYLLABLE CHIEUCH AE RIEULMIEUM - 0xAA61: 0xCC4F, //HANGUL SYLLABLE CHIEUCH AE RIEULPIEUP - 0xAA62: 0xCC50, //HANGUL SYLLABLE CHIEUCH AE RIEULSIOS - 0xAA63: 0xCC51, //HANGUL SYLLABLE CHIEUCH AE RIEULTHIEUTH - 0xAA64: 0xCC52, //HANGUL SYLLABLE CHIEUCH AE RIEULPHIEUPH - 0xAA65: 0xCC53, //HANGUL SYLLABLE CHIEUCH AE RIEULHIEUH - 0xAA66: 0xCC56, //HANGUL SYLLABLE CHIEUCH AE PIEUPSIOS - 0xAA67: 0xCC5A, //HANGUL SYLLABLE CHIEUCH AE CIEUC - 0xAA68: 0xCC5B, //HANGUL SYLLABLE CHIEUCH AE CHIEUCH - 0xAA69: 0xCC5C, //HANGUL SYLLABLE CHIEUCH AE KHIEUKH - 0xAA6A: 0xCC5D, //HANGUL SYLLABLE CHIEUCH AE THIEUTH - 0xAA6B: 0xCC5E, //HANGUL SYLLABLE CHIEUCH AE PHIEUPH - 0xAA6C: 0xCC5F, //HANGUL SYLLABLE CHIEUCH AE HIEUH - 0xAA6D: 0xCC61, //HANGUL SYLLABLE CHIEUCH YA KIYEOK - 0xAA6E: 0xCC62, //HANGUL SYLLABLE CHIEUCH YA SSANGKIYEOK - 0xAA6F: 0xCC63, //HANGUL SYLLABLE CHIEUCH YA KIYEOKSIOS - 0xAA70: 0xCC65, //HANGUL SYLLABLE CHIEUCH YA NIEUNCIEUC - 0xAA71: 0xCC67, //HANGUL SYLLABLE CHIEUCH YA TIKEUT - 0xAA72: 0xCC69, //HANGUL SYLLABLE CHIEUCH YA RIEULKIYEOK - 0xAA73: 0xCC6A, //HANGUL SYLLABLE CHIEUCH YA RIEULMIEUM - 0xAA74: 0xCC6B, //HANGUL SYLLABLE CHIEUCH YA RIEULPIEUP - 0xAA75: 0xCC6C, //HANGUL SYLLABLE CHIEUCH YA RIEULSIOS - 0xAA76: 0xCC6D, //HANGUL SYLLABLE CHIEUCH YA RIEULTHIEUTH - 0xAA77: 0xCC6E, //HANGUL SYLLABLE CHIEUCH YA RIEULPHIEUPH - 0xAA78: 0xCC6F, //HANGUL SYLLABLE CHIEUCH YA RIEULHIEUH - 0xAA79: 0xCC71, //HANGUL SYLLABLE CHIEUCH YA PIEUP - 0xAA7A: 0xCC72, //HANGUL SYLLABLE CHIEUCH YA PIEUPSIOS - 0xAA81: 0xCC73, //HANGUL SYLLABLE CHIEUCH YA SIOS - 0xAA82: 0xCC74, //HANGUL SYLLABLE CHIEUCH YA SSANGSIOS - 0xAA83: 0xCC76, //HANGUL SYLLABLE CHIEUCH YA CIEUC - 0xAA84: 0xCC77, //HANGUL SYLLABLE CHIEUCH YA CHIEUCH - 0xAA85: 0xCC78, //HANGUL SYLLABLE CHIEUCH YA KHIEUKH - 0xAA86: 0xCC79, //HANGUL SYLLABLE CHIEUCH YA THIEUTH - 0xAA87: 0xCC7A, //HANGUL SYLLABLE CHIEUCH YA PHIEUPH - 0xAA88: 0xCC7B, //HANGUL SYLLABLE CHIEUCH YA HIEUH - 0xAA89: 0xCC7C, //HANGUL SYLLABLE CHIEUCH YAE - 0xAA8A: 0xCC7D, //HANGUL SYLLABLE CHIEUCH YAE KIYEOK - 0xAA8B: 0xCC7E, //HANGUL SYLLABLE CHIEUCH YAE SSANGKIYEOK - 0xAA8C: 0xCC7F, //HANGUL SYLLABLE CHIEUCH YAE KIYEOKSIOS - 0xAA8D: 0xCC80, //HANGUL SYLLABLE CHIEUCH YAE NIEUN - 0xAA8E: 0xCC81, //HANGUL SYLLABLE CHIEUCH YAE NIEUNCIEUC - 0xAA8F: 0xCC82, //HANGUL SYLLABLE CHIEUCH YAE NIEUNHIEUH - 0xAA90: 0xCC83, //HANGUL SYLLABLE CHIEUCH YAE TIKEUT - 0xAA91: 0xCC84, //HANGUL SYLLABLE CHIEUCH YAE RIEUL - 0xAA92: 0xCC85, //HANGUL SYLLABLE CHIEUCH YAE RIEULKIYEOK - 0xAA93: 0xCC86, //HANGUL SYLLABLE CHIEUCH YAE RIEULMIEUM - 0xAA94: 0xCC87, //HANGUL SYLLABLE CHIEUCH YAE RIEULPIEUP - 0xAA95: 0xCC88, //HANGUL SYLLABLE CHIEUCH YAE RIEULSIOS - 0xAA96: 0xCC89, //HANGUL SYLLABLE CHIEUCH YAE RIEULTHIEUTH - 0xAA97: 0xCC8A, //HANGUL SYLLABLE CHIEUCH YAE RIEULPHIEUPH - 0xAA98: 0xCC8B, //HANGUL SYLLABLE CHIEUCH YAE RIEULHIEUH - 0xAA99: 0xCC8C, //HANGUL SYLLABLE CHIEUCH YAE MIEUM - 0xAA9A: 0xCC8D, //HANGUL SYLLABLE CHIEUCH YAE PIEUP - 0xAA9B: 0xCC8E, //HANGUL SYLLABLE CHIEUCH YAE PIEUPSIOS - 0xAA9C: 0xCC8F, //HANGUL SYLLABLE CHIEUCH YAE SIOS - 0xAA9D: 0xCC90, //HANGUL SYLLABLE CHIEUCH YAE SSANGSIOS - 0xAA9E: 0xCC91, //HANGUL SYLLABLE CHIEUCH YAE IEUNG - 0xAA9F: 0xCC92, //HANGUL SYLLABLE CHIEUCH YAE CIEUC - 0xAAA0: 0xCC93, //HANGUL SYLLABLE CHIEUCH YAE CHIEUCH - 0xAAA1: 0x3041, //HIRAGANA LETTER SMALL A - 0xAAA2: 0x3042, //HIRAGANA LETTER A - 0xAAA3: 0x3043, //HIRAGANA LETTER SMALL I - 0xAAA4: 0x3044, //HIRAGANA LETTER I - 0xAAA5: 0x3045, //HIRAGANA LETTER SMALL U - 0xAAA6: 0x3046, //HIRAGANA LETTER U - 0xAAA7: 0x3047, //HIRAGANA LETTER SMALL E - 0xAAA8: 0x3048, //HIRAGANA LETTER E - 0xAAA9: 0x3049, //HIRAGANA LETTER SMALL O - 0xAAAA: 0x304A, //HIRAGANA LETTER O - 0xAAAB: 0x304B, //HIRAGANA LETTER KA - 0xAAAC: 0x304C, //HIRAGANA LETTER GA - 0xAAAD: 0x304D, //HIRAGANA LETTER KI - 0xAAAE: 0x304E, //HIRAGANA LETTER GI - 0xAAAF: 0x304F, //HIRAGANA LETTER KU - 0xAAB0: 0x3050, //HIRAGANA LETTER GU - 0xAAB1: 0x3051, //HIRAGANA LETTER KE - 0xAAB2: 0x3052, //HIRAGANA LETTER GE - 0xAAB3: 0x3053, //HIRAGANA LETTER KO - 0xAAB4: 0x3054, //HIRAGANA LETTER GO - 0xAAB5: 0x3055, //HIRAGANA LETTER SA - 0xAAB6: 0x3056, //HIRAGANA LETTER ZA - 0xAAB7: 0x3057, //HIRAGANA LETTER SI - 0xAAB8: 0x3058, //HIRAGANA LETTER ZI - 0xAAB9: 0x3059, //HIRAGANA LETTER SU - 0xAABA: 0x305A, //HIRAGANA LETTER ZU - 0xAABB: 0x305B, //HIRAGANA LETTER SE - 0xAABC: 0x305C, //HIRAGANA LETTER ZE - 0xAABD: 0x305D, //HIRAGANA LETTER SO - 0xAABE: 0x305E, //HIRAGANA LETTER ZO - 0xAABF: 0x305F, //HIRAGANA LETTER TA - 0xAAC0: 0x3060, //HIRAGANA LETTER DA - 0xAAC1: 0x3061, //HIRAGANA LETTER TI - 0xAAC2: 0x3062, //HIRAGANA LETTER DI - 0xAAC3: 0x3063, //HIRAGANA LETTER SMALL TU - 0xAAC4: 0x3064, //HIRAGANA LETTER TU - 0xAAC5: 0x3065, //HIRAGANA LETTER DU - 0xAAC6: 0x3066, //HIRAGANA LETTER TE - 0xAAC7: 0x3067, //HIRAGANA LETTER DE - 0xAAC8: 0x3068, //HIRAGANA LETTER TO - 0xAAC9: 0x3069, //HIRAGANA LETTER DO - 0xAACA: 0x306A, //HIRAGANA LETTER NA - 0xAACB: 0x306B, //HIRAGANA LETTER NI - 0xAACC: 0x306C, //HIRAGANA LETTER NU - 0xAACD: 0x306D, //HIRAGANA LETTER NE - 0xAACE: 0x306E, //HIRAGANA LETTER NO - 0xAACF: 0x306F, //HIRAGANA LETTER HA - 0xAAD0: 0x3070, //HIRAGANA LETTER BA - 0xAAD1: 0x3071, //HIRAGANA LETTER PA - 0xAAD2: 0x3072, //HIRAGANA LETTER HI - 0xAAD3: 0x3073, //HIRAGANA LETTER BI - 0xAAD4: 0x3074, //HIRAGANA LETTER PI - 0xAAD5: 0x3075, //HIRAGANA LETTER HU - 0xAAD6: 0x3076, //HIRAGANA LETTER BU - 0xAAD7: 0x3077, //HIRAGANA LETTER PU - 0xAAD8: 0x3078, //HIRAGANA LETTER HE - 0xAAD9: 0x3079, //HIRAGANA LETTER BE - 0xAADA: 0x307A, //HIRAGANA LETTER PE - 0xAADB: 0x307B, //HIRAGANA LETTER HO - 0xAADC: 0x307C, //HIRAGANA LETTER BO - 0xAADD: 0x307D, //HIRAGANA LETTER PO - 0xAADE: 0x307E, //HIRAGANA LETTER MA - 0xAADF: 0x307F, //HIRAGANA LETTER MI - 0xAAE0: 0x3080, //HIRAGANA LETTER MU - 0xAAE1: 0x3081, //HIRAGANA LETTER ME - 0xAAE2: 0x3082, //HIRAGANA LETTER MO - 0xAAE3: 0x3083, //HIRAGANA LETTER SMALL YA - 0xAAE4: 0x3084, //HIRAGANA LETTER YA - 0xAAE5: 0x3085, //HIRAGANA LETTER SMALL YU - 0xAAE6: 0x3086, //HIRAGANA LETTER YU - 0xAAE7: 0x3087, //HIRAGANA LETTER SMALL YO - 0xAAE8: 0x3088, //HIRAGANA LETTER YO - 0xAAE9: 0x3089, //HIRAGANA LETTER RA - 0xAAEA: 0x308A, //HIRAGANA LETTER RI - 0xAAEB: 0x308B, //HIRAGANA LETTER RU - 0xAAEC: 0x308C, //HIRAGANA LETTER RE - 0xAAED: 0x308D, //HIRAGANA LETTER RO - 0xAAEE: 0x308E, //HIRAGANA LETTER SMALL WA - 0xAAEF: 0x308F, //HIRAGANA LETTER WA - 0xAAF0: 0x3090, //HIRAGANA LETTER WI - 0xAAF1: 0x3091, //HIRAGANA LETTER WE - 0xAAF2: 0x3092, //HIRAGANA LETTER WO - 0xAAF3: 0x3093, //HIRAGANA LETTER N - 0xAB41: 0xCC94, //HANGUL SYLLABLE CHIEUCH YAE KHIEUKH - 0xAB42: 0xCC95, //HANGUL SYLLABLE CHIEUCH YAE THIEUTH - 0xAB43: 0xCC96, //HANGUL SYLLABLE CHIEUCH YAE PHIEUPH - 0xAB44: 0xCC97, //HANGUL SYLLABLE CHIEUCH YAE HIEUH - 0xAB45: 0xCC9A, //HANGUL SYLLABLE CHIEUCH EO SSANGKIYEOK - 0xAB46: 0xCC9B, //HANGUL SYLLABLE CHIEUCH EO KIYEOKSIOS - 0xAB47: 0xCC9D, //HANGUL SYLLABLE CHIEUCH EO NIEUNCIEUC - 0xAB48: 0xCC9E, //HANGUL SYLLABLE CHIEUCH EO NIEUNHIEUH - 0xAB49: 0xCC9F, //HANGUL SYLLABLE CHIEUCH EO TIKEUT - 0xAB4A: 0xCCA1, //HANGUL SYLLABLE CHIEUCH EO RIEULKIYEOK - 0xAB4B: 0xCCA2, //HANGUL SYLLABLE CHIEUCH EO RIEULMIEUM - 0xAB4C: 0xCCA3, //HANGUL SYLLABLE CHIEUCH EO RIEULPIEUP - 0xAB4D: 0xCCA4, //HANGUL SYLLABLE CHIEUCH EO RIEULSIOS - 0xAB4E: 0xCCA5, //HANGUL SYLLABLE CHIEUCH EO RIEULTHIEUTH - 0xAB4F: 0xCCA6, //HANGUL SYLLABLE CHIEUCH EO RIEULPHIEUPH - 0xAB50: 0xCCA7, //HANGUL SYLLABLE CHIEUCH EO RIEULHIEUH - 0xAB51: 0xCCAA, //HANGUL SYLLABLE CHIEUCH EO PIEUPSIOS - 0xAB52: 0xCCAE, //HANGUL SYLLABLE CHIEUCH EO CIEUC - 0xAB53: 0xCCAF, //HANGUL SYLLABLE CHIEUCH EO CHIEUCH - 0xAB54: 0xCCB0, //HANGUL SYLLABLE CHIEUCH EO KHIEUKH - 0xAB55: 0xCCB1, //HANGUL SYLLABLE CHIEUCH EO THIEUTH - 0xAB56: 0xCCB2, //HANGUL SYLLABLE CHIEUCH EO PHIEUPH - 0xAB57: 0xCCB3, //HANGUL SYLLABLE CHIEUCH EO HIEUH - 0xAB58: 0xCCB6, //HANGUL SYLLABLE CHIEUCH E SSANGKIYEOK - 0xAB59: 0xCCB7, //HANGUL SYLLABLE CHIEUCH E KIYEOKSIOS - 0xAB5A: 0xCCB9, //HANGUL SYLLABLE CHIEUCH E NIEUNCIEUC - 0xAB61: 0xCCBA, //HANGUL SYLLABLE CHIEUCH E NIEUNHIEUH - 0xAB62: 0xCCBB, //HANGUL SYLLABLE CHIEUCH E TIKEUT - 0xAB63: 0xCCBD, //HANGUL SYLLABLE CHIEUCH E RIEULKIYEOK - 0xAB64: 0xCCBE, //HANGUL SYLLABLE CHIEUCH E RIEULMIEUM - 0xAB65: 0xCCBF, //HANGUL SYLLABLE CHIEUCH E RIEULPIEUP - 0xAB66: 0xCCC0, //HANGUL SYLLABLE CHIEUCH E RIEULSIOS - 0xAB67: 0xCCC1, //HANGUL SYLLABLE CHIEUCH E RIEULTHIEUTH - 0xAB68: 0xCCC2, //HANGUL SYLLABLE CHIEUCH E RIEULPHIEUPH - 0xAB69: 0xCCC3, //HANGUL SYLLABLE CHIEUCH E RIEULHIEUH - 0xAB6A: 0xCCC6, //HANGUL SYLLABLE CHIEUCH E PIEUPSIOS - 0xAB6B: 0xCCC8, //HANGUL SYLLABLE CHIEUCH E SSANGSIOS - 0xAB6C: 0xCCCA, //HANGUL SYLLABLE CHIEUCH E CIEUC - 0xAB6D: 0xCCCB, //HANGUL SYLLABLE CHIEUCH E CHIEUCH - 0xAB6E: 0xCCCC, //HANGUL SYLLABLE CHIEUCH E KHIEUKH - 0xAB6F: 0xCCCD, //HANGUL SYLLABLE CHIEUCH E THIEUTH - 0xAB70: 0xCCCE, //HANGUL SYLLABLE CHIEUCH E PHIEUPH - 0xAB71: 0xCCCF, //HANGUL SYLLABLE CHIEUCH E HIEUH - 0xAB72: 0xCCD1, //HANGUL SYLLABLE CHIEUCH YEO KIYEOK - 0xAB73: 0xCCD2, //HANGUL SYLLABLE CHIEUCH YEO SSANGKIYEOK - 0xAB74: 0xCCD3, //HANGUL SYLLABLE CHIEUCH YEO KIYEOKSIOS - 0xAB75: 0xCCD5, //HANGUL SYLLABLE CHIEUCH YEO NIEUNCIEUC - 0xAB76: 0xCCD6, //HANGUL SYLLABLE CHIEUCH YEO NIEUNHIEUH - 0xAB77: 0xCCD7, //HANGUL SYLLABLE CHIEUCH YEO TIKEUT - 0xAB78: 0xCCD8, //HANGUL SYLLABLE CHIEUCH YEO RIEUL - 0xAB79: 0xCCD9, //HANGUL SYLLABLE CHIEUCH YEO RIEULKIYEOK - 0xAB7A: 0xCCDA, //HANGUL SYLLABLE CHIEUCH YEO RIEULMIEUM - 0xAB81: 0xCCDB, //HANGUL SYLLABLE CHIEUCH YEO RIEULPIEUP - 0xAB82: 0xCCDC, //HANGUL SYLLABLE CHIEUCH YEO RIEULSIOS - 0xAB83: 0xCCDD, //HANGUL SYLLABLE CHIEUCH YEO RIEULTHIEUTH - 0xAB84: 0xCCDE, //HANGUL SYLLABLE CHIEUCH YEO RIEULPHIEUPH - 0xAB85: 0xCCDF, //HANGUL SYLLABLE CHIEUCH YEO RIEULHIEUH - 0xAB86: 0xCCE0, //HANGUL SYLLABLE CHIEUCH YEO MIEUM - 0xAB87: 0xCCE1, //HANGUL SYLLABLE CHIEUCH YEO PIEUP - 0xAB88: 0xCCE2, //HANGUL SYLLABLE CHIEUCH YEO PIEUPSIOS - 0xAB89: 0xCCE3, //HANGUL SYLLABLE CHIEUCH YEO SIOS - 0xAB8A: 0xCCE5, //HANGUL SYLLABLE CHIEUCH YEO IEUNG - 0xAB8B: 0xCCE6, //HANGUL SYLLABLE CHIEUCH YEO CIEUC - 0xAB8C: 0xCCE7, //HANGUL SYLLABLE CHIEUCH YEO CHIEUCH - 0xAB8D: 0xCCE8, //HANGUL SYLLABLE CHIEUCH YEO KHIEUKH - 0xAB8E: 0xCCE9, //HANGUL SYLLABLE CHIEUCH YEO THIEUTH - 0xAB8F: 0xCCEA, //HANGUL SYLLABLE CHIEUCH YEO PHIEUPH - 0xAB90: 0xCCEB, //HANGUL SYLLABLE CHIEUCH YEO HIEUH - 0xAB91: 0xCCED, //HANGUL SYLLABLE CHIEUCH YE KIYEOK - 0xAB92: 0xCCEE, //HANGUL SYLLABLE CHIEUCH YE SSANGKIYEOK - 0xAB93: 0xCCEF, //HANGUL SYLLABLE CHIEUCH YE KIYEOKSIOS - 0xAB94: 0xCCF1, //HANGUL SYLLABLE CHIEUCH YE NIEUNCIEUC - 0xAB95: 0xCCF2, //HANGUL SYLLABLE CHIEUCH YE NIEUNHIEUH - 0xAB96: 0xCCF3, //HANGUL SYLLABLE CHIEUCH YE TIKEUT - 0xAB97: 0xCCF4, //HANGUL SYLLABLE CHIEUCH YE RIEUL - 0xAB98: 0xCCF5, //HANGUL SYLLABLE CHIEUCH YE RIEULKIYEOK - 0xAB99: 0xCCF6, //HANGUL SYLLABLE CHIEUCH YE RIEULMIEUM - 0xAB9A: 0xCCF7, //HANGUL SYLLABLE CHIEUCH YE RIEULPIEUP - 0xAB9B: 0xCCF8, //HANGUL SYLLABLE CHIEUCH YE RIEULSIOS - 0xAB9C: 0xCCF9, //HANGUL SYLLABLE CHIEUCH YE RIEULTHIEUTH - 0xAB9D: 0xCCFA, //HANGUL SYLLABLE CHIEUCH YE RIEULPHIEUPH - 0xAB9E: 0xCCFB, //HANGUL SYLLABLE CHIEUCH YE RIEULHIEUH - 0xAB9F: 0xCCFC, //HANGUL SYLLABLE CHIEUCH YE MIEUM - 0xABA0: 0xCCFD, //HANGUL SYLLABLE CHIEUCH YE PIEUP - 0xABA1: 0x30A1, //KATAKANA LETTER SMALL A - 0xABA2: 0x30A2, //KATAKANA LETTER A - 0xABA3: 0x30A3, //KATAKANA LETTER SMALL I - 0xABA4: 0x30A4, //KATAKANA LETTER I - 0xABA5: 0x30A5, //KATAKANA LETTER SMALL U - 0xABA6: 0x30A6, //KATAKANA LETTER U - 0xABA7: 0x30A7, //KATAKANA LETTER SMALL E - 0xABA8: 0x30A8, //KATAKANA LETTER E - 0xABA9: 0x30A9, //KATAKANA LETTER SMALL O - 0xABAA: 0x30AA, //KATAKANA LETTER O - 0xABAB: 0x30AB, //KATAKANA LETTER KA - 0xABAC: 0x30AC, //KATAKANA LETTER GA - 0xABAD: 0x30AD, //KATAKANA LETTER KI - 0xABAE: 0x30AE, //KATAKANA LETTER GI - 0xABAF: 0x30AF, //KATAKANA LETTER KU - 0xABB0: 0x30B0, //KATAKANA LETTER GU - 0xABB1: 0x30B1, //KATAKANA LETTER KE - 0xABB2: 0x30B2, //KATAKANA LETTER GE - 0xABB3: 0x30B3, //KATAKANA LETTER KO - 0xABB4: 0x30B4, //KATAKANA LETTER GO - 0xABB5: 0x30B5, //KATAKANA LETTER SA - 0xABB6: 0x30B6, //KATAKANA LETTER ZA - 0xABB7: 0x30B7, //KATAKANA LETTER SI - 0xABB8: 0x30B8, //KATAKANA LETTER ZI - 0xABB9: 0x30B9, //KATAKANA LETTER SU - 0xABBA: 0x30BA, //KATAKANA LETTER ZU - 0xABBB: 0x30BB, //KATAKANA LETTER SE - 0xABBC: 0x30BC, //KATAKANA LETTER ZE - 0xABBD: 0x30BD, //KATAKANA LETTER SO - 0xABBE: 0x30BE, //KATAKANA LETTER ZO - 0xABBF: 0x30BF, //KATAKANA LETTER TA - 0xABC0: 0x30C0, //KATAKANA LETTER DA - 0xABC1: 0x30C1, //KATAKANA LETTER TI - 0xABC2: 0x30C2, //KATAKANA LETTER DI - 0xABC3: 0x30C3, //KATAKANA LETTER SMALL TU - 0xABC4: 0x30C4, //KATAKANA LETTER TU - 0xABC5: 0x30C5, //KATAKANA LETTER DU - 0xABC6: 0x30C6, //KATAKANA LETTER TE - 0xABC7: 0x30C7, //KATAKANA LETTER DE - 0xABC8: 0x30C8, //KATAKANA LETTER TO - 0xABC9: 0x30C9, //KATAKANA LETTER DO - 0xABCA: 0x30CA, //KATAKANA LETTER NA - 0xABCB: 0x30CB, //KATAKANA LETTER NI - 0xABCC: 0x30CC, //KATAKANA LETTER NU - 0xABCD: 0x30CD, //KATAKANA LETTER NE - 0xABCE: 0x30CE, //KATAKANA LETTER NO - 0xABCF: 0x30CF, //KATAKANA LETTER HA - 0xABD0: 0x30D0, //KATAKANA LETTER BA - 0xABD1: 0x30D1, //KATAKANA LETTER PA - 0xABD2: 0x30D2, //KATAKANA LETTER HI - 0xABD3: 0x30D3, //KATAKANA LETTER BI - 0xABD4: 0x30D4, //KATAKANA LETTER PI - 0xABD5: 0x30D5, //KATAKANA LETTER HU - 0xABD6: 0x30D6, //KATAKANA LETTER BU - 0xABD7: 0x30D7, //KATAKANA LETTER PU - 0xABD8: 0x30D8, //KATAKANA LETTER HE - 0xABD9: 0x30D9, //KATAKANA LETTER BE - 0xABDA: 0x30DA, //KATAKANA LETTER PE - 0xABDB: 0x30DB, //KATAKANA LETTER HO - 0xABDC: 0x30DC, //KATAKANA LETTER BO - 0xABDD: 0x30DD, //KATAKANA LETTER PO - 0xABDE: 0x30DE, //KATAKANA LETTER MA - 0xABDF: 0x30DF, //KATAKANA LETTER MI - 0xABE0: 0x30E0, //KATAKANA LETTER MU - 0xABE1: 0x30E1, //KATAKANA LETTER ME - 0xABE2: 0x30E2, //KATAKANA LETTER MO - 0xABE3: 0x30E3, //KATAKANA LETTER SMALL YA - 0xABE4: 0x30E4, //KATAKANA LETTER YA - 0xABE5: 0x30E5, //KATAKANA LETTER SMALL YU - 0xABE6: 0x30E6, //KATAKANA LETTER YU - 0xABE7: 0x30E7, //KATAKANA LETTER SMALL YO - 0xABE8: 0x30E8, //KATAKANA LETTER YO - 0xABE9: 0x30E9, //KATAKANA LETTER RA - 0xABEA: 0x30EA, //KATAKANA LETTER RI - 0xABEB: 0x30EB, //KATAKANA LETTER RU - 0xABEC: 0x30EC, //KATAKANA LETTER RE - 0xABED: 0x30ED, //KATAKANA LETTER RO - 0xABEE: 0x30EE, //KATAKANA LETTER SMALL WA - 0xABEF: 0x30EF, //KATAKANA LETTER WA - 0xABF0: 0x30F0, //KATAKANA LETTER WI - 0xABF1: 0x30F1, //KATAKANA LETTER WE - 0xABF2: 0x30F2, //KATAKANA LETTER WO - 0xABF3: 0x30F3, //KATAKANA LETTER N - 0xABF4: 0x30F4, //KATAKANA LETTER VU - 0xABF5: 0x30F5, //KATAKANA LETTER SMALL KA - 0xABF6: 0x30F6, //KATAKANA LETTER SMALL KE - 0xAC41: 0xCCFE, //HANGUL SYLLABLE CHIEUCH YE PIEUPSIOS - 0xAC42: 0xCCFF, //HANGUL SYLLABLE CHIEUCH YE SIOS - 0xAC43: 0xCD00, //HANGUL SYLLABLE CHIEUCH YE SSANGSIOS - 0xAC44: 0xCD02, //HANGUL SYLLABLE CHIEUCH YE CIEUC - 0xAC45: 0xCD03, //HANGUL SYLLABLE CHIEUCH YE CHIEUCH - 0xAC46: 0xCD04, //HANGUL SYLLABLE CHIEUCH YE KHIEUKH - 0xAC47: 0xCD05, //HANGUL SYLLABLE CHIEUCH YE THIEUTH - 0xAC48: 0xCD06, //HANGUL SYLLABLE CHIEUCH YE PHIEUPH - 0xAC49: 0xCD07, //HANGUL SYLLABLE CHIEUCH YE HIEUH - 0xAC4A: 0xCD0A, //HANGUL SYLLABLE CHIEUCH O SSANGKIYEOK - 0xAC4B: 0xCD0B, //HANGUL SYLLABLE CHIEUCH O KIYEOKSIOS - 0xAC4C: 0xCD0D, //HANGUL SYLLABLE CHIEUCH O NIEUNCIEUC - 0xAC4D: 0xCD0E, //HANGUL SYLLABLE CHIEUCH O NIEUNHIEUH - 0xAC4E: 0xCD0F, //HANGUL SYLLABLE CHIEUCH O TIKEUT - 0xAC4F: 0xCD11, //HANGUL SYLLABLE CHIEUCH O RIEULKIYEOK - 0xAC50: 0xCD12, //HANGUL SYLLABLE CHIEUCH O RIEULMIEUM - 0xAC51: 0xCD13, //HANGUL SYLLABLE CHIEUCH O RIEULPIEUP - 0xAC52: 0xCD14, //HANGUL SYLLABLE CHIEUCH O RIEULSIOS - 0xAC53: 0xCD15, //HANGUL SYLLABLE CHIEUCH O RIEULTHIEUTH - 0xAC54: 0xCD16, //HANGUL SYLLABLE CHIEUCH O RIEULPHIEUPH - 0xAC55: 0xCD17, //HANGUL SYLLABLE CHIEUCH O RIEULHIEUH - 0xAC56: 0xCD1A, //HANGUL SYLLABLE CHIEUCH O PIEUPSIOS - 0xAC57: 0xCD1C, //HANGUL SYLLABLE CHIEUCH O SSANGSIOS - 0xAC58: 0xCD1E, //HANGUL SYLLABLE CHIEUCH O CIEUC - 0xAC59: 0xCD1F, //HANGUL SYLLABLE CHIEUCH O CHIEUCH - 0xAC5A: 0xCD20, //HANGUL SYLLABLE CHIEUCH O KHIEUKH - 0xAC61: 0xCD21, //HANGUL SYLLABLE CHIEUCH O THIEUTH - 0xAC62: 0xCD22, //HANGUL SYLLABLE CHIEUCH O PHIEUPH - 0xAC63: 0xCD23, //HANGUL SYLLABLE CHIEUCH O HIEUH - 0xAC64: 0xCD25, //HANGUL SYLLABLE CHIEUCH WA KIYEOK - 0xAC65: 0xCD26, //HANGUL SYLLABLE CHIEUCH WA SSANGKIYEOK - 0xAC66: 0xCD27, //HANGUL SYLLABLE CHIEUCH WA KIYEOKSIOS - 0xAC67: 0xCD29, //HANGUL SYLLABLE CHIEUCH WA NIEUNCIEUC - 0xAC68: 0xCD2A, //HANGUL SYLLABLE CHIEUCH WA NIEUNHIEUH - 0xAC69: 0xCD2B, //HANGUL SYLLABLE CHIEUCH WA TIKEUT - 0xAC6A: 0xCD2D, //HANGUL SYLLABLE CHIEUCH WA RIEULKIYEOK - 0xAC6B: 0xCD2E, //HANGUL SYLLABLE CHIEUCH WA RIEULMIEUM - 0xAC6C: 0xCD2F, //HANGUL SYLLABLE CHIEUCH WA RIEULPIEUP - 0xAC6D: 0xCD30, //HANGUL SYLLABLE CHIEUCH WA RIEULSIOS - 0xAC6E: 0xCD31, //HANGUL SYLLABLE CHIEUCH WA RIEULTHIEUTH - 0xAC6F: 0xCD32, //HANGUL SYLLABLE CHIEUCH WA RIEULPHIEUPH - 0xAC70: 0xCD33, //HANGUL SYLLABLE CHIEUCH WA RIEULHIEUH - 0xAC71: 0xCD34, //HANGUL SYLLABLE CHIEUCH WA MIEUM - 0xAC72: 0xCD35, //HANGUL SYLLABLE CHIEUCH WA PIEUP - 0xAC73: 0xCD36, //HANGUL SYLLABLE CHIEUCH WA PIEUPSIOS - 0xAC74: 0xCD37, //HANGUL SYLLABLE CHIEUCH WA SIOS - 0xAC75: 0xCD38, //HANGUL SYLLABLE CHIEUCH WA SSANGSIOS - 0xAC76: 0xCD3A, //HANGUL SYLLABLE CHIEUCH WA CIEUC - 0xAC77: 0xCD3B, //HANGUL SYLLABLE CHIEUCH WA CHIEUCH - 0xAC78: 0xCD3C, //HANGUL SYLLABLE CHIEUCH WA KHIEUKH - 0xAC79: 0xCD3D, //HANGUL SYLLABLE CHIEUCH WA THIEUTH - 0xAC7A: 0xCD3E, //HANGUL SYLLABLE CHIEUCH WA PHIEUPH - 0xAC81: 0xCD3F, //HANGUL SYLLABLE CHIEUCH WA HIEUH - 0xAC82: 0xCD40, //HANGUL SYLLABLE CHIEUCH WAE - 0xAC83: 0xCD41, //HANGUL SYLLABLE CHIEUCH WAE KIYEOK - 0xAC84: 0xCD42, //HANGUL SYLLABLE CHIEUCH WAE SSANGKIYEOK - 0xAC85: 0xCD43, //HANGUL SYLLABLE CHIEUCH WAE KIYEOKSIOS - 0xAC86: 0xCD44, //HANGUL SYLLABLE CHIEUCH WAE NIEUN - 0xAC87: 0xCD45, //HANGUL SYLLABLE CHIEUCH WAE NIEUNCIEUC - 0xAC88: 0xCD46, //HANGUL SYLLABLE CHIEUCH WAE NIEUNHIEUH - 0xAC89: 0xCD47, //HANGUL SYLLABLE CHIEUCH WAE TIKEUT - 0xAC8A: 0xCD48, //HANGUL SYLLABLE CHIEUCH WAE RIEUL - 0xAC8B: 0xCD49, //HANGUL SYLLABLE CHIEUCH WAE RIEULKIYEOK - 0xAC8C: 0xCD4A, //HANGUL SYLLABLE CHIEUCH WAE RIEULMIEUM - 0xAC8D: 0xCD4B, //HANGUL SYLLABLE CHIEUCH WAE RIEULPIEUP - 0xAC8E: 0xCD4C, //HANGUL SYLLABLE CHIEUCH WAE RIEULSIOS - 0xAC8F: 0xCD4D, //HANGUL SYLLABLE CHIEUCH WAE RIEULTHIEUTH - 0xAC90: 0xCD4E, //HANGUL SYLLABLE CHIEUCH WAE RIEULPHIEUPH - 0xAC91: 0xCD4F, //HANGUL SYLLABLE CHIEUCH WAE RIEULHIEUH - 0xAC92: 0xCD50, //HANGUL SYLLABLE CHIEUCH WAE MIEUM - 0xAC93: 0xCD51, //HANGUL SYLLABLE CHIEUCH WAE PIEUP - 0xAC94: 0xCD52, //HANGUL SYLLABLE CHIEUCH WAE PIEUPSIOS - 0xAC95: 0xCD53, //HANGUL SYLLABLE CHIEUCH WAE SIOS - 0xAC96: 0xCD54, //HANGUL SYLLABLE CHIEUCH WAE SSANGSIOS - 0xAC97: 0xCD55, //HANGUL SYLLABLE CHIEUCH WAE IEUNG - 0xAC98: 0xCD56, //HANGUL SYLLABLE CHIEUCH WAE CIEUC - 0xAC99: 0xCD57, //HANGUL SYLLABLE CHIEUCH WAE CHIEUCH - 0xAC9A: 0xCD58, //HANGUL SYLLABLE CHIEUCH WAE KHIEUKH - 0xAC9B: 0xCD59, //HANGUL SYLLABLE CHIEUCH WAE THIEUTH - 0xAC9C: 0xCD5A, //HANGUL SYLLABLE CHIEUCH WAE PHIEUPH - 0xAC9D: 0xCD5B, //HANGUL SYLLABLE CHIEUCH WAE HIEUH - 0xAC9E: 0xCD5D, //HANGUL SYLLABLE CHIEUCH OE KIYEOK - 0xAC9F: 0xCD5E, //HANGUL SYLLABLE CHIEUCH OE SSANGKIYEOK - 0xACA0: 0xCD5F, //HANGUL SYLLABLE CHIEUCH OE KIYEOKSIOS - 0xACA1: 0x0410, //CYRILLIC CAPITAL LETTER A - 0xACA2: 0x0411, //CYRILLIC CAPITAL LETTER BE - 0xACA3: 0x0412, //CYRILLIC CAPITAL LETTER VE - 0xACA4: 0x0413, //CYRILLIC CAPITAL LETTER GHE - 0xACA5: 0x0414, //CYRILLIC CAPITAL LETTER DE - 0xACA6: 0x0415, //CYRILLIC CAPITAL LETTER IE - 0xACA7: 0x0401, //CYRILLIC CAPITAL LETTER IO - 0xACA8: 0x0416, //CYRILLIC CAPITAL LETTER ZHE - 0xACA9: 0x0417, //CYRILLIC CAPITAL LETTER ZE - 0xACAA: 0x0418, //CYRILLIC CAPITAL LETTER I - 0xACAB: 0x0419, //CYRILLIC CAPITAL LETTER SHORT I - 0xACAC: 0x041A, //CYRILLIC CAPITAL LETTER KA - 0xACAD: 0x041B, //CYRILLIC CAPITAL LETTER EL - 0xACAE: 0x041C, //CYRILLIC CAPITAL LETTER EM - 0xACAF: 0x041D, //CYRILLIC CAPITAL LETTER EN - 0xACB0: 0x041E, //CYRILLIC CAPITAL LETTER O - 0xACB1: 0x041F, //CYRILLIC CAPITAL LETTER PE - 0xACB2: 0x0420, //CYRILLIC CAPITAL LETTER ER - 0xACB3: 0x0421, //CYRILLIC CAPITAL LETTER ES - 0xACB4: 0x0422, //CYRILLIC CAPITAL LETTER TE - 0xACB5: 0x0423, //CYRILLIC CAPITAL LETTER U - 0xACB6: 0x0424, //CYRILLIC CAPITAL LETTER EF - 0xACB7: 0x0425, //CYRILLIC CAPITAL LETTER HA - 0xACB8: 0x0426, //CYRILLIC CAPITAL LETTER TSE - 0xACB9: 0x0427, //CYRILLIC CAPITAL LETTER CHE - 0xACBA: 0x0428, //CYRILLIC CAPITAL LETTER SHA - 0xACBB: 0x0429, //CYRILLIC CAPITAL LETTER SHCHA - 0xACBC: 0x042A, //CYRILLIC CAPITAL LETTER HARD SIGN - 0xACBD: 0x042B, //CYRILLIC CAPITAL LETTER YERU - 0xACBE: 0x042C, //CYRILLIC CAPITAL LETTER SOFT SIGN - 0xACBF: 0x042D, //CYRILLIC CAPITAL LETTER E - 0xACC0: 0x042E, //CYRILLIC CAPITAL LETTER YU - 0xACC1: 0x042F, //CYRILLIC CAPITAL LETTER YA - 0xACD1: 0x0430, //CYRILLIC SMALL LETTER A - 0xACD2: 0x0431, //CYRILLIC SMALL LETTER BE - 0xACD3: 0x0432, //CYRILLIC SMALL LETTER VE - 0xACD4: 0x0433, //CYRILLIC SMALL LETTER GHE - 0xACD5: 0x0434, //CYRILLIC SMALL LETTER DE - 0xACD6: 0x0435, //CYRILLIC SMALL LETTER IE - 0xACD7: 0x0451, //CYRILLIC SMALL LETTER IO - 0xACD8: 0x0436, //CYRILLIC SMALL LETTER ZHE - 0xACD9: 0x0437, //CYRILLIC SMALL LETTER ZE - 0xACDA: 0x0438, //CYRILLIC SMALL LETTER I - 0xACDB: 0x0439, //CYRILLIC SMALL LETTER SHORT I - 0xACDC: 0x043A, //CYRILLIC SMALL LETTER KA - 0xACDD: 0x043B, //CYRILLIC SMALL LETTER EL - 0xACDE: 0x043C, //CYRILLIC SMALL LETTER EM - 0xACDF: 0x043D, //CYRILLIC SMALL LETTER EN - 0xACE0: 0x043E, //CYRILLIC SMALL LETTER O - 0xACE1: 0x043F, //CYRILLIC SMALL LETTER PE - 0xACE2: 0x0440, //CYRILLIC SMALL LETTER ER - 0xACE3: 0x0441, //CYRILLIC SMALL LETTER ES - 0xACE4: 0x0442, //CYRILLIC SMALL LETTER TE - 0xACE5: 0x0443, //CYRILLIC SMALL LETTER U - 0xACE6: 0x0444, //CYRILLIC SMALL LETTER EF - 0xACE7: 0x0445, //CYRILLIC SMALL LETTER HA - 0xACE8: 0x0446, //CYRILLIC SMALL LETTER TSE - 0xACE9: 0x0447, //CYRILLIC SMALL LETTER CHE - 0xACEA: 0x0448, //CYRILLIC SMALL LETTER SHA - 0xACEB: 0x0449, //CYRILLIC SMALL LETTER SHCHA - 0xACEC: 0x044A, //CYRILLIC SMALL LETTER HARD SIGN - 0xACED: 0x044B, //CYRILLIC SMALL LETTER YERU - 0xACEE: 0x044C, //CYRILLIC SMALL LETTER SOFT SIGN - 0xACEF: 0x044D, //CYRILLIC SMALL LETTER E - 0xACF0: 0x044E, //CYRILLIC SMALL LETTER YU - 0xACF1: 0x044F, //CYRILLIC SMALL LETTER YA - 0xAD41: 0xCD61, //HANGUL SYLLABLE CHIEUCH OE NIEUNCIEUC - 0xAD42: 0xCD62, //HANGUL SYLLABLE CHIEUCH OE NIEUNHIEUH - 0xAD43: 0xCD63, //HANGUL SYLLABLE CHIEUCH OE TIKEUT - 0xAD44: 0xCD65, //HANGUL SYLLABLE CHIEUCH OE RIEULKIYEOK - 0xAD45: 0xCD66, //HANGUL SYLLABLE CHIEUCH OE RIEULMIEUM - 0xAD46: 0xCD67, //HANGUL SYLLABLE CHIEUCH OE RIEULPIEUP - 0xAD47: 0xCD68, //HANGUL SYLLABLE CHIEUCH OE RIEULSIOS - 0xAD48: 0xCD69, //HANGUL SYLLABLE CHIEUCH OE RIEULTHIEUTH - 0xAD49: 0xCD6A, //HANGUL SYLLABLE CHIEUCH OE RIEULPHIEUPH - 0xAD4A: 0xCD6B, //HANGUL SYLLABLE CHIEUCH OE RIEULHIEUH - 0xAD4B: 0xCD6E, //HANGUL SYLLABLE CHIEUCH OE PIEUPSIOS - 0xAD4C: 0xCD70, //HANGUL SYLLABLE CHIEUCH OE SSANGSIOS - 0xAD4D: 0xCD72, //HANGUL SYLLABLE CHIEUCH OE CIEUC - 0xAD4E: 0xCD73, //HANGUL SYLLABLE CHIEUCH OE CHIEUCH - 0xAD4F: 0xCD74, //HANGUL SYLLABLE CHIEUCH OE KHIEUKH - 0xAD50: 0xCD75, //HANGUL SYLLABLE CHIEUCH OE THIEUTH - 0xAD51: 0xCD76, //HANGUL SYLLABLE CHIEUCH OE PHIEUPH - 0xAD52: 0xCD77, //HANGUL SYLLABLE CHIEUCH OE HIEUH - 0xAD53: 0xCD79, //HANGUL SYLLABLE CHIEUCH YO KIYEOK - 0xAD54: 0xCD7A, //HANGUL SYLLABLE CHIEUCH YO SSANGKIYEOK - 0xAD55: 0xCD7B, //HANGUL SYLLABLE CHIEUCH YO KIYEOKSIOS - 0xAD56: 0xCD7C, //HANGUL SYLLABLE CHIEUCH YO NIEUN - 0xAD57: 0xCD7D, //HANGUL SYLLABLE CHIEUCH YO NIEUNCIEUC - 0xAD58: 0xCD7E, //HANGUL SYLLABLE CHIEUCH YO NIEUNHIEUH - 0xAD59: 0xCD7F, //HANGUL SYLLABLE CHIEUCH YO TIKEUT - 0xAD5A: 0xCD80, //HANGUL SYLLABLE CHIEUCH YO RIEUL - 0xAD61: 0xCD81, //HANGUL SYLLABLE CHIEUCH YO RIEULKIYEOK - 0xAD62: 0xCD82, //HANGUL SYLLABLE CHIEUCH YO RIEULMIEUM - 0xAD63: 0xCD83, //HANGUL SYLLABLE CHIEUCH YO RIEULPIEUP - 0xAD64: 0xCD84, //HANGUL SYLLABLE CHIEUCH YO RIEULSIOS - 0xAD65: 0xCD85, //HANGUL SYLLABLE CHIEUCH YO RIEULTHIEUTH - 0xAD66: 0xCD86, //HANGUL SYLLABLE CHIEUCH YO RIEULPHIEUPH - 0xAD67: 0xCD87, //HANGUL SYLLABLE CHIEUCH YO RIEULHIEUH - 0xAD68: 0xCD89, //HANGUL SYLLABLE CHIEUCH YO PIEUP - 0xAD69: 0xCD8A, //HANGUL SYLLABLE CHIEUCH YO PIEUPSIOS - 0xAD6A: 0xCD8B, //HANGUL SYLLABLE CHIEUCH YO SIOS - 0xAD6B: 0xCD8C, //HANGUL SYLLABLE CHIEUCH YO SSANGSIOS - 0xAD6C: 0xCD8D, //HANGUL SYLLABLE CHIEUCH YO IEUNG - 0xAD6D: 0xCD8E, //HANGUL SYLLABLE CHIEUCH YO CIEUC - 0xAD6E: 0xCD8F, //HANGUL SYLLABLE CHIEUCH YO CHIEUCH - 0xAD6F: 0xCD90, //HANGUL SYLLABLE CHIEUCH YO KHIEUKH - 0xAD70: 0xCD91, //HANGUL SYLLABLE CHIEUCH YO THIEUTH - 0xAD71: 0xCD92, //HANGUL SYLLABLE CHIEUCH YO PHIEUPH - 0xAD72: 0xCD93, //HANGUL SYLLABLE CHIEUCH YO HIEUH - 0xAD73: 0xCD96, //HANGUL SYLLABLE CHIEUCH U SSANGKIYEOK - 0xAD74: 0xCD97, //HANGUL SYLLABLE CHIEUCH U KIYEOKSIOS - 0xAD75: 0xCD99, //HANGUL SYLLABLE CHIEUCH U NIEUNCIEUC - 0xAD76: 0xCD9A, //HANGUL SYLLABLE CHIEUCH U NIEUNHIEUH - 0xAD77: 0xCD9B, //HANGUL SYLLABLE CHIEUCH U TIKEUT - 0xAD78: 0xCD9D, //HANGUL SYLLABLE CHIEUCH U RIEULKIYEOK - 0xAD79: 0xCD9E, //HANGUL SYLLABLE CHIEUCH U RIEULMIEUM - 0xAD7A: 0xCD9F, //HANGUL SYLLABLE CHIEUCH U RIEULPIEUP - 0xAD81: 0xCDA0, //HANGUL SYLLABLE CHIEUCH U RIEULSIOS - 0xAD82: 0xCDA1, //HANGUL SYLLABLE CHIEUCH U RIEULTHIEUTH - 0xAD83: 0xCDA2, //HANGUL SYLLABLE CHIEUCH U RIEULPHIEUPH - 0xAD84: 0xCDA3, //HANGUL SYLLABLE CHIEUCH U RIEULHIEUH - 0xAD85: 0xCDA6, //HANGUL SYLLABLE CHIEUCH U PIEUPSIOS - 0xAD86: 0xCDA8, //HANGUL SYLLABLE CHIEUCH U SSANGSIOS - 0xAD87: 0xCDAA, //HANGUL SYLLABLE CHIEUCH U CIEUC - 0xAD88: 0xCDAB, //HANGUL SYLLABLE CHIEUCH U CHIEUCH - 0xAD89: 0xCDAC, //HANGUL SYLLABLE CHIEUCH U KHIEUKH - 0xAD8A: 0xCDAD, //HANGUL SYLLABLE CHIEUCH U THIEUTH - 0xAD8B: 0xCDAE, //HANGUL SYLLABLE CHIEUCH U PHIEUPH - 0xAD8C: 0xCDAF, //HANGUL SYLLABLE CHIEUCH U HIEUH - 0xAD8D: 0xCDB1, //HANGUL SYLLABLE CHIEUCH WEO KIYEOK - 0xAD8E: 0xCDB2, //HANGUL SYLLABLE CHIEUCH WEO SSANGKIYEOK - 0xAD8F: 0xCDB3, //HANGUL SYLLABLE CHIEUCH WEO KIYEOKSIOS - 0xAD90: 0xCDB4, //HANGUL SYLLABLE CHIEUCH WEO NIEUN - 0xAD91: 0xCDB5, //HANGUL SYLLABLE CHIEUCH WEO NIEUNCIEUC - 0xAD92: 0xCDB6, //HANGUL SYLLABLE CHIEUCH WEO NIEUNHIEUH - 0xAD93: 0xCDB7, //HANGUL SYLLABLE CHIEUCH WEO TIKEUT - 0xAD94: 0xCDB8, //HANGUL SYLLABLE CHIEUCH WEO RIEUL - 0xAD95: 0xCDB9, //HANGUL SYLLABLE CHIEUCH WEO RIEULKIYEOK - 0xAD96: 0xCDBA, //HANGUL SYLLABLE CHIEUCH WEO RIEULMIEUM - 0xAD97: 0xCDBB, //HANGUL SYLLABLE CHIEUCH WEO RIEULPIEUP - 0xAD98: 0xCDBC, //HANGUL SYLLABLE CHIEUCH WEO RIEULSIOS - 0xAD99: 0xCDBD, //HANGUL SYLLABLE CHIEUCH WEO RIEULTHIEUTH - 0xAD9A: 0xCDBE, //HANGUL SYLLABLE CHIEUCH WEO RIEULPHIEUPH - 0xAD9B: 0xCDBF, //HANGUL SYLLABLE CHIEUCH WEO RIEULHIEUH - 0xAD9C: 0xCDC0, //HANGUL SYLLABLE CHIEUCH WEO MIEUM - 0xAD9D: 0xCDC1, //HANGUL SYLLABLE CHIEUCH WEO PIEUP - 0xAD9E: 0xCDC2, //HANGUL SYLLABLE CHIEUCH WEO PIEUPSIOS - 0xAD9F: 0xCDC3, //HANGUL SYLLABLE CHIEUCH WEO SIOS - 0xADA0: 0xCDC5, //HANGUL SYLLABLE CHIEUCH WEO IEUNG - 0xAE41: 0xCDC6, //HANGUL SYLLABLE CHIEUCH WEO CIEUC - 0xAE42: 0xCDC7, //HANGUL SYLLABLE CHIEUCH WEO CHIEUCH - 0xAE43: 0xCDC8, //HANGUL SYLLABLE CHIEUCH WEO KHIEUKH - 0xAE44: 0xCDC9, //HANGUL SYLLABLE CHIEUCH WEO THIEUTH - 0xAE45: 0xCDCA, //HANGUL SYLLABLE CHIEUCH WEO PHIEUPH - 0xAE46: 0xCDCB, //HANGUL SYLLABLE CHIEUCH WEO HIEUH - 0xAE47: 0xCDCD, //HANGUL SYLLABLE CHIEUCH WE KIYEOK - 0xAE48: 0xCDCE, //HANGUL SYLLABLE CHIEUCH WE SSANGKIYEOK - 0xAE49: 0xCDCF, //HANGUL SYLLABLE CHIEUCH WE KIYEOKSIOS - 0xAE4A: 0xCDD1, //HANGUL SYLLABLE CHIEUCH WE NIEUNCIEUC - 0xAE4B: 0xCDD2, //HANGUL SYLLABLE CHIEUCH WE NIEUNHIEUH - 0xAE4C: 0xCDD3, //HANGUL SYLLABLE CHIEUCH WE TIKEUT - 0xAE4D: 0xCDD4, //HANGUL SYLLABLE CHIEUCH WE RIEUL - 0xAE4E: 0xCDD5, //HANGUL SYLLABLE CHIEUCH WE RIEULKIYEOK - 0xAE4F: 0xCDD6, //HANGUL SYLLABLE CHIEUCH WE RIEULMIEUM - 0xAE50: 0xCDD7, //HANGUL SYLLABLE CHIEUCH WE RIEULPIEUP - 0xAE51: 0xCDD8, //HANGUL SYLLABLE CHIEUCH WE RIEULSIOS - 0xAE52: 0xCDD9, //HANGUL SYLLABLE CHIEUCH WE RIEULTHIEUTH - 0xAE53: 0xCDDA, //HANGUL SYLLABLE CHIEUCH WE RIEULPHIEUPH - 0xAE54: 0xCDDB, //HANGUL SYLLABLE CHIEUCH WE RIEULHIEUH - 0xAE55: 0xCDDC, //HANGUL SYLLABLE CHIEUCH WE MIEUM - 0xAE56: 0xCDDD, //HANGUL SYLLABLE CHIEUCH WE PIEUP - 0xAE57: 0xCDDE, //HANGUL SYLLABLE CHIEUCH WE PIEUPSIOS - 0xAE58: 0xCDDF, //HANGUL SYLLABLE CHIEUCH WE SIOS - 0xAE59: 0xCDE0, //HANGUL SYLLABLE CHIEUCH WE SSANGSIOS - 0xAE5A: 0xCDE1, //HANGUL SYLLABLE CHIEUCH WE IEUNG - 0xAE61: 0xCDE2, //HANGUL SYLLABLE CHIEUCH WE CIEUC - 0xAE62: 0xCDE3, //HANGUL SYLLABLE CHIEUCH WE CHIEUCH - 0xAE63: 0xCDE4, //HANGUL SYLLABLE CHIEUCH WE KHIEUKH - 0xAE64: 0xCDE5, //HANGUL SYLLABLE CHIEUCH WE THIEUTH - 0xAE65: 0xCDE6, //HANGUL SYLLABLE CHIEUCH WE PHIEUPH - 0xAE66: 0xCDE7, //HANGUL SYLLABLE CHIEUCH WE HIEUH - 0xAE67: 0xCDE9, //HANGUL SYLLABLE CHIEUCH WI KIYEOK - 0xAE68: 0xCDEA, //HANGUL SYLLABLE CHIEUCH WI SSANGKIYEOK - 0xAE69: 0xCDEB, //HANGUL SYLLABLE CHIEUCH WI KIYEOKSIOS - 0xAE6A: 0xCDED, //HANGUL SYLLABLE CHIEUCH WI NIEUNCIEUC - 0xAE6B: 0xCDEE, //HANGUL SYLLABLE CHIEUCH WI NIEUNHIEUH - 0xAE6C: 0xCDEF, //HANGUL SYLLABLE CHIEUCH WI TIKEUT - 0xAE6D: 0xCDF1, //HANGUL SYLLABLE CHIEUCH WI RIEULKIYEOK - 0xAE6E: 0xCDF2, //HANGUL SYLLABLE CHIEUCH WI RIEULMIEUM - 0xAE6F: 0xCDF3, //HANGUL SYLLABLE CHIEUCH WI RIEULPIEUP - 0xAE70: 0xCDF4, //HANGUL SYLLABLE CHIEUCH WI RIEULSIOS - 0xAE71: 0xCDF5, //HANGUL SYLLABLE CHIEUCH WI RIEULTHIEUTH - 0xAE72: 0xCDF6, //HANGUL SYLLABLE CHIEUCH WI RIEULPHIEUPH - 0xAE73: 0xCDF7, //HANGUL SYLLABLE CHIEUCH WI RIEULHIEUH - 0xAE74: 0xCDFA, //HANGUL SYLLABLE CHIEUCH WI PIEUPSIOS - 0xAE75: 0xCDFC, //HANGUL SYLLABLE CHIEUCH WI SSANGSIOS - 0xAE76: 0xCDFE, //HANGUL SYLLABLE CHIEUCH WI CIEUC - 0xAE77: 0xCDFF, //HANGUL SYLLABLE CHIEUCH WI CHIEUCH - 0xAE78: 0xCE00, //HANGUL SYLLABLE CHIEUCH WI KHIEUKH - 0xAE79: 0xCE01, //HANGUL SYLLABLE CHIEUCH WI THIEUTH - 0xAE7A: 0xCE02, //HANGUL SYLLABLE CHIEUCH WI PHIEUPH - 0xAE81: 0xCE03, //HANGUL SYLLABLE CHIEUCH WI HIEUH - 0xAE82: 0xCE05, //HANGUL SYLLABLE CHIEUCH YU KIYEOK - 0xAE83: 0xCE06, //HANGUL SYLLABLE CHIEUCH YU SSANGKIYEOK - 0xAE84: 0xCE07, //HANGUL SYLLABLE CHIEUCH YU KIYEOKSIOS - 0xAE85: 0xCE09, //HANGUL SYLLABLE CHIEUCH YU NIEUNCIEUC - 0xAE86: 0xCE0A, //HANGUL SYLLABLE CHIEUCH YU NIEUNHIEUH - 0xAE87: 0xCE0B, //HANGUL SYLLABLE CHIEUCH YU TIKEUT - 0xAE88: 0xCE0D, //HANGUL SYLLABLE CHIEUCH YU RIEULKIYEOK - 0xAE89: 0xCE0E, //HANGUL SYLLABLE CHIEUCH YU RIEULMIEUM - 0xAE8A: 0xCE0F, //HANGUL SYLLABLE CHIEUCH YU RIEULPIEUP - 0xAE8B: 0xCE10, //HANGUL SYLLABLE CHIEUCH YU RIEULSIOS - 0xAE8C: 0xCE11, //HANGUL SYLLABLE CHIEUCH YU RIEULTHIEUTH - 0xAE8D: 0xCE12, //HANGUL SYLLABLE CHIEUCH YU RIEULPHIEUPH - 0xAE8E: 0xCE13, //HANGUL SYLLABLE CHIEUCH YU RIEULHIEUH - 0xAE8F: 0xCE15, //HANGUL SYLLABLE CHIEUCH YU PIEUP - 0xAE90: 0xCE16, //HANGUL SYLLABLE CHIEUCH YU PIEUPSIOS - 0xAE91: 0xCE17, //HANGUL SYLLABLE CHIEUCH YU SIOS - 0xAE92: 0xCE18, //HANGUL SYLLABLE CHIEUCH YU SSANGSIOS - 0xAE93: 0xCE1A, //HANGUL SYLLABLE CHIEUCH YU CIEUC - 0xAE94: 0xCE1B, //HANGUL SYLLABLE CHIEUCH YU CHIEUCH - 0xAE95: 0xCE1C, //HANGUL SYLLABLE CHIEUCH YU KHIEUKH - 0xAE96: 0xCE1D, //HANGUL SYLLABLE CHIEUCH YU THIEUTH - 0xAE97: 0xCE1E, //HANGUL SYLLABLE CHIEUCH YU PHIEUPH - 0xAE98: 0xCE1F, //HANGUL SYLLABLE CHIEUCH YU HIEUH - 0xAE99: 0xCE22, //HANGUL SYLLABLE CHIEUCH EU SSANGKIYEOK - 0xAE9A: 0xCE23, //HANGUL SYLLABLE CHIEUCH EU KIYEOKSIOS - 0xAE9B: 0xCE25, //HANGUL SYLLABLE CHIEUCH EU NIEUNCIEUC - 0xAE9C: 0xCE26, //HANGUL SYLLABLE CHIEUCH EU NIEUNHIEUH - 0xAE9D: 0xCE27, //HANGUL SYLLABLE CHIEUCH EU TIKEUT - 0xAE9E: 0xCE29, //HANGUL SYLLABLE CHIEUCH EU RIEULKIYEOK - 0xAE9F: 0xCE2A, //HANGUL SYLLABLE CHIEUCH EU RIEULMIEUM - 0xAEA0: 0xCE2B, //HANGUL SYLLABLE CHIEUCH EU RIEULPIEUP - 0xAF41: 0xCE2C, //HANGUL SYLLABLE CHIEUCH EU RIEULSIOS - 0xAF42: 0xCE2D, //HANGUL SYLLABLE CHIEUCH EU RIEULTHIEUTH - 0xAF43: 0xCE2E, //HANGUL SYLLABLE CHIEUCH EU RIEULPHIEUPH - 0xAF44: 0xCE2F, //HANGUL SYLLABLE CHIEUCH EU RIEULHIEUH - 0xAF45: 0xCE32, //HANGUL SYLLABLE CHIEUCH EU PIEUPSIOS - 0xAF46: 0xCE34, //HANGUL SYLLABLE CHIEUCH EU SSANGSIOS - 0xAF47: 0xCE36, //HANGUL SYLLABLE CHIEUCH EU CIEUC - 0xAF48: 0xCE37, //HANGUL SYLLABLE CHIEUCH EU CHIEUCH - 0xAF49: 0xCE38, //HANGUL SYLLABLE CHIEUCH EU KHIEUKH - 0xAF4A: 0xCE39, //HANGUL SYLLABLE CHIEUCH EU THIEUTH - 0xAF4B: 0xCE3A, //HANGUL SYLLABLE CHIEUCH EU PHIEUPH - 0xAF4C: 0xCE3B, //HANGUL SYLLABLE CHIEUCH EU HIEUH - 0xAF4D: 0xCE3C, //HANGUL SYLLABLE CHIEUCH YI - 0xAF4E: 0xCE3D, //HANGUL SYLLABLE CHIEUCH YI KIYEOK - 0xAF4F: 0xCE3E, //HANGUL SYLLABLE CHIEUCH YI SSANGKIYEOK - 0xAF50: 0xCE3F, //HANGUL SYLLABLE CHIEUCH YI KIYEOKSIOS - 0xAF51: 0xCE40, //HANGUL SYLLABLE CHIEUCH YI NIEUN - 0xAF52: 0xCE41, //HANGUL SYLLABLE CHIEUCH YI NIEUNCIEUC - 0xAF53: 0xCE42, //HANGUL SYLLABLE CHIEUCH YI NIEUNHIEUH - 0xAF54: 0xCE43, //HANGUL SYLLABLE CHIEUCH YI TIKEUT - 0xAF55: 0xCE44, //HANGUL SYLLABLE CHIEUCH YI RIEUL - 0xAF56: 0xCE45, //HANGUL SYLLABLE CHIEUCH YI RIEULKIYEOK - 0xAF57: 0xCE46, //HANGUL SYLLABLE CHIEUCH YI RIEULMIEUM - 0xAF58: 0xCE47, //HANGUL SYLLABLE CHIEUCH YI RIEULPIEUP - 0xAF59: 0xCE48, //HANGUL SYLLABLE CHIEUCH YI RIEULSIOS - 0xAF5A: 0xCE49, //HANGUL SYLLABLE CHIEUCH YI RIEULTHIEUTH - 0xAF61: 0xCE4A, //HANGUL SYLLABLE CHIEUCH YI RIEULPHIEUPH - 0xAF62: 0xCE4B, //HANGUL SYLLABLE CHIEUCH YI RIEULHIEUH - 0xAF63: 0xCE4C, //HANGUL SYLLABLE CHIEUCH YI MIEUM - 0xAF64: 0xCE4D, //HANGUL SYLLABLE CHIEUCH YI PIEUP - 0xAF65: 0xCE4E, //HANGUL SYLLABLE CHIEUCH YI PIEUPSIOS - 0xAF66: 0xCE4F, //HANGUL SYLLABLE CHIEUCH YI SIOS - 0xAF67: 0xCE50, //HANGUL SYLLABLE CHIEUCH YI SSANGSIOS - 0xAF68: 0xCE51, //HANGUL SYLLABLE CHIEUCH YI IEUNG - 0xAF69: 0xCE52, //HANGUL SYLLABLE CHIEUCH YI CIEUC - 0xAF6A: 0xCE53, //HANGUL SYLLABLE CHIEUCH YI CHIEUCH - 0xAF6B: 0xCE54, //HANGUL SYLLABLE CHIEUCH YI KHIEUKH - 0xAF6C: 0xCE55, //HANGUL SYLLABLE CHIEUCH YI THIEUTH - 0xAF6D: 0xCE56, //HANGUL SYLLABLE CHIEUCH YI PHIEUPH - 0xAF6E: 0xCE57, //HANGUL SYLLABLE CHIEUCH YI HIEUH - 0xAF6F: 0xCE5A, //HANGUL SYLLABLE CHIEUCH I SSANGKIYEOK - 0xAF70: 0xCE5B, //HANGUL SYLLABLE CHIEUCH I KIYEOKSIOS - 0xAF71: 0xCE5D, //HANGUL SYLLABLE CHIEUCH I NIEUNCIEUC - 0xAF72: 0xCE5E, //HANGUL SYLLABLE CHIEUCH I NIEUNHIEUH - 0xAF73: 0xCE62, //HANGUL SYLLABLE CHIEUCH I RIEULMIEUM - 0xAF74: 0xCE63, //HANGUL SYLLABLE CHIEUCH I RIEULPIEUP - 0xAF75: 0xCE64, //HANGUL SYLLABLE CHIEUCH I RIEULSIOS - 0xAF76: 0xCE65, //HANGUL SYLLABLE CHIEUCH I RIEULTHIEUTH - 0xAF77: 0xCE66, //HANGUL SYLLABLE CHIEUCH I RIEULPHIEUPH - 0xAF78: 0xCE67, //HANGUL SYLLABLE CHIEUCH I RIEULHIEUH - 0xAF79: 0xCE6A, //HANGUL SYLLABLE CHIEUCH I PIEUPSIOS - 0xAF7A: 0xCE6C, //HANGUL SYLLABLE CHIEUCH I SSANGSIOS - 0xAF81: 0xCE6E, //HANGUL SYLLABLE CHIEUCH I CIEUC - 0xAF82: 0xCE6F, //HANGUL SYLLABLE CHIEUCH I CHIEUCH - 0xAF83: 0xCE70, //HANGUL SYLLABLE CHIEUCH I KHIEUKH - 0xAF84: 0xCE71, //HANGUL SYLLABLE CHIEUCH I THIEUTH - 0xAF85: 0xCE72, //HANGUL SYLLABLE CHIEUCH I PHIEUPH - 0xAF86: 0xCE73, //HANGUL SYLLABLE CHIEUCH I HIEUH - 0xAF87: 0xCE76, //HANGUL SYLLABLE KHIEUKH A SSANGKIYEOK - 0xAF88: 0xCE77, //HANGUL SYLLABLE KHIEUKH A KIYEOKSIOS - 0xAF89: 0xCE79, //HANGUL SYLLABLE KHIEUKH A NIEUNCIEUC - 0xAF8A: 0xCE7A, //HANGUL SYLLABLE KHIEUKH A NIEUNHIEUH - 0xAF8B: 0xCE7B, //HANGUL SYLLABLE KHIEUKH A TIKEUT - 0xAF8C: 0xCE7D, //HANGUL SYLLABLE KHIEUKH A RIEULKIYEOK - 0xAF8D: 0xCE7E, //HANGUL SYLLABLE KHIEUKH A RIEULMIEUM - 0xAF8E: 0xCE7F, //HANGUL SYLLABLE KHIEUKH A RIEULPIEUP - 0xAF8F: 0xCE80, //HANGUL SYLLABLE KHIEUKH A RIEULSIOS - 0xAF90: 0xCE81, //HANGUL SYLLABLE KHIEUKH A RIEULTHIEUTH - 0xAF91: 0xCE82, //HANGUL SYLLABLE KHIEUKH A RIEULPHIEUPH - 0xAF92: 0xCE83, //HANGUL SYLLABLE KHIEUKH A RIEULHIEUH - 0xAF93: 0xCE86, //HANGUL SYLLABLE KHIEUKH A PIEUPSIOS - 0xAF94: 0xCE88, //HANGUL SYLLABLE KHIEUKH A SSANGSIOS - 0xAF95: 0xCE8A, //HANGUL SYLLABLE KHIEUKH A CIEUC - 0xAF96: 0xCE8B, //HANGUL SYLLABLE KHIEUKH A CHIEUCH - 0xAF97: 0xCE8C, //HANGUL SYLLABLE KHIEUKH A KHIEUKH - 0xAF98: 0xCE8D, //HANGUL SYLLABLE KHIEUKH A THIEUTH - 0xAF99: 0xCE8E, //HANGUL SYLLABLE KHIEUKH A PHIEUPH - 0xAF9A: 0xCE8F, //HANGUL SYLLABLE KHIEUKH A HIEUH - 0xAF9B: 0xCE92, //HANGUL SYLLABLE KHIEUKH AE SSANGKIYEOK - 0xAF9C: 0xCE93, //HANGUL SYLLABLE KHIEUKH AE KIYEOKSIOS - 0xAF9D: 0xCE95, //HANGUL SYLLABLE KHIEUKH AE NIEUNCIEUC - 0xAF9E: 0xCE96, //HANGUL SYLLABLE KHIEUKH AE NIEUNHIEUH - 0xAF9F: 0xCE97, //HANGUL SYLLABLE KHIEUKH AE TIKEUT - 0xAFA0: 0xCE99, //HANGUL SYLLABLE KHIEUKH AE RIEULKIYEOK - 0xB041: 0xCE9A, //HANGUL SYLLABLE KHIEUKH AE RIEULMIEUM - 0xB042: 0xCE9B, //HANGUL SYLLABLE KHIEUKH AE RIEULPIEUP - 0xB043: 0xCE9C, //HANGUL SYLLABLE KHIEUKH AE RIEULSIOS - 0xB044: 0xCE9D, //HANGUL SYLLABLE KHIEUKH AE RIEULTHIEUTH - 0xB045: 0xCE9E, //HANGUL SYLLABLE KHIEUKH AE RIEULPHIEUPH - 0xB046: 0xCE9F, //HANGUL SYLLABLE KHIEUKH AE RIEULHIEUH - 0xB047: 0xCEA2, //HANGUL SYLLABLE KHIEUKH AE PIEUPSIOS - 0xB048: 0xCEA6, //HANGUL SYLLABLE KHIEUKH AE CIEUC - 0xB049: 0xCEA7, //HANGUL SYLLABLE KHIEUKH AE CHIEUCH - 0xB04A: 0xCEA8, //HANGUL SYLLABLE KHIEUKH AE KHIEUKH - 0xB04B: 0xCEA9, //HANGUL SYLLABLE KHIEUKH AE THIEUTH - 0xB04C: 0xCEAA, //HANGUL SYLLABLE KHIEUKH AE PHIEUPH - 0xB04D: 0xCEAB, //HANGUL SYLLABLE KHIEUKH AE HIEUH - 0xB04E: 0xCEAE, //HANGUL SYLLABLE KHIEUKH YA SSANGKIYEOK - 0xB04F: 0xCEAF, //HANGUL SYLLABLE KHIEUKH YA KIYEOKSIOS - 0xB050: 0xCEB0, //HANGUL SYLLABLE KHIEUKH YA NIEUN - 0xB051: 0xCEB1, //HANGUL SYLLABLE KHIEUKH YA NIEUNCIEUC - 0xB052: 0xCEB2, //HANGUL SYLLABLE KHIEUKH YA NIEUNHIEUH - 0xB053: 0xCEB3, //HANGUL SYLLABLE KHIEUKH YA TIKEUT - 0xB054: 0xCEB4, //HANGUL SYLLABLE KHIEUKH YA RIEUL - 0xB055: 0xCEB5, //HANGUL SYLLABLE KHIEUKH YA RIEULKIYEOK - 0xB056: 0xCEB6, //HANGUL SYLLABLE KHIEUKH YA RIEULMIEUM - 0xB057: 0xCEB7, //HANGUL SYLLABLE KHIEUKH YA RIEULPIEUP - 0xB058: 0xCEB8, //HANGUL SYLLABLE KHIEUKH YA RIEULSIOS - 0xB059: 0xCEB9, //HANGUL SYLLABLE KHIEUKH YA RIEULTHIEUTH - 0xB05A: 0xCEBA, //HANGUL SYLLABLE KHIEUKH YA RIEULPHIEUPH - 0xB061: 0xCEBB, //HANGUL SYLLABLE KHIEUKH YA RIEULHIEUH - 0xB062: 0xCEBC, //HANGUL SYLLABLE KHIEUKH YA MIEUM - 0xB063: 0xCEBD, //HANGUL SYLLABLE KHIEUKH YA PIEUP - 0xB064: 0xCEBE, //HANGUL SYLLABLE KHIEUKH YA PIEUPSIOS - 0xB065: 0xCEBF, //HANGUL SYLLABLE KHIEUKH YA SIOS - 0xB066: 0xCEC0, //HANGUL SYLLABLE KHIEUKH YA SSANGSIOS - 0xB067: 0xCEC2, //HANGUL SYLLABLE KHIEUKH YA CIEUC - 0xB068: 0xCEC3, //HANGUL SYLLABLE KHIEUKH YA CHIEUCH - 0xB069: 0xCEC4, //HANGUL SYLLABLE KHIEUKH YA KHIEUKH - 0xB06A: 0xCEC5, //HANGUL SYLLABLE KHIEUKH YA THIEUTH - 0xB06B: 0xCEC6, //HANGUL SYLLABLE KHIEUKH YA PHIEUPH - 0xB06C: 0xCEC7, //HANGUL SYLLABLE KHIEUKH YA HIEUH - 0xB06D: 0xCEC8, //HANGUL SYLLABLE KHIEUKH YAE - 0xB06E: 0xCEC9, //HANGUL SYLLABLE KHIEUKH YAE KIYEOK - 0xB06F: 0xCECA, //HANGUL SYLLABLE KHIEUKH YAE SSANGKIYEOK - 0xB070: 0xCECB, //HANGUL SYLLABLE KHIEUKH YAE KIYEOKSIOS - 0xB071: 0xCECC, //HANGUL SYLLABLE KHIEUKH YAE NIEUN - 0xB072: 0xCECD, //HANGUL SYLLABLE KHIEUKH YAE NIEUNCIEUC - 0xB073: 0xCECE, //HANGUL SYLLABLE KHIEUKH YAE NIEUNHIEUH - 0xB074: 0xCECF, //HANGUL SYLLABLE KHIEUKH YAE TIKEUT - 0xB075: 0xCED0, //HANGUL SYLLABLE KHIEUKH YAE RIEUL - 0xB076: 0xCED1, //HANGUL SYLLABLE KHIEUKH YAE RIEULKIYEOK - 0xB077: 0xCED2, //HANGUL SYLLABLE KHIEUKH YAE RIEULMIEUM - 0xB078: 0xCED3, //HANGUL SYLLABLE KHIEUKH YAE RIEULPIEUP - 0xB079: 0xCED4, //HANGUL SYLLABLE KHIEUKH YAE RIEULSIOS - 0xB07A: 0xCED5, //HANGUL SYLLABLE KHIEUKH YAE RIEULTHIEUTH - 0xB081: 0xCED6, //HANGUL SYLLABLE KHIEUKH YAE RIEULPHIEUPH - 0xB082: 0xCED7, //HANGUL SYLLABLE KHIEUKH YAE RIEULHIEUH - 0xB083: 0xCED8, //HANGUL SYLLABLE KHIEUKH YAE MIEUM - 0xB084: 0xCED9, //HANGUL SYLLABLE KHIEUKH YAE PIEUP - 0xB085: 0xCEDA, //HANGUL SYLLABLE KHIEUKH YAE PIEUPSIOS - 0xB086: 0xCEDB, //HANGUL SYLLABLE KHIEUKH YAE SIOS - 0xB087: 0xCEDC, //HANGUL SYLLABLE KHIEUKH YAE SSANGSIOS - 0xB088: 0xCEDD, //HANGUL SYLLABLE KHIEUKH YAE IEUNG - 0xB089: 0xCEDE, //HANGUL SYLLABLE KHIEUKH YAE CIEUC - 0xB08A: 0xCEDF, //HANGUL SYLLABLE KHIEUKH YAE CHIEUCH - 0xB08B: 0xCEE0, //HANGUL SYLLABLE KHIEUKH YAE KHIEUKH - 0xB08C: 0xCEE1, //HANGUL SYLLABLE KHIEUKH YAE THIEUTH - 0xB08D: 0xCEE2, //HANGUL SYLLABLE KHIEUKH YAE PHIEUPH - 0xB08E: 0xCEE3, //HANGUL SYLLABLE KHIEUKH YAE HIEUH - 0xB08F: 0xCEE6, //HANGUL SYLLABLE KHIEUKH EO SSANGKIYEOK - 0xB090: 0xCEE7, //HANGUL SYLLABLE KHIEUKH EO KIYEOKSIOS - 0xB091: 0xCEE9, //HANGUL SYLLABLE KHIEUKH EO NIEUNCIEUC - 0xB092: 0xCEEA, //HANGUL SYLLABLE KHIEUKH EO NIEUNHIEUH - 0xB093: 0xCEED, //HANGUL SYLLABLE KHIEUKH EO RIEULKIYEOK - 0xB094: 0xCEEE, //HANGUL SYLLABLE KHIEUKH EO RIEULMIEUM - 0xB095: 0xCEEF, //HANGUL SYLLABLE KHIEUKH EO RIEULPIEUP - 0xB096: 0xCEF0, //HANGUL SYLLABLE KHIEUKH EO RIEULSIOS - 0xB097: 0xCEF1, //HANGUL SYLLABLE KHIEUKH EO RIEULTHIEUTH - 0xB098: 0xCEF2, //HANGUL SYLLABLE KHIEUKH EO RIEULPHIEUPH - 0xB099: 0xCEF3, //HANGUL SYLLABLE KHIEUKH EO RIEULHIEUH - 0xB09A: 0xCEF6, //HANGUL SYLLABLE KHIEUKH EO PIEUPSIOS - 0xB09B: 0xCEFA, //HANGUL SYLLABLE KHIEUKH EO CIEUC - 0xB09C: 0xCEFB, //HANGUL SYLLABLE KHIEUKH EO CHIEUCH - 0xB09D: 0xCEFC, //HANGUL SYLLABLE KHIEUKH EO KHIEUKH - 0xB09E: 0xCEFD, //HANGUL SYLLABLE KHIEUKH EO THIEUTH - 0xB09F: 0xCEFE, //HANGUL SYLLABLE KHIEUKH EO PHIEUPH - 0xB0A0: 0xCEFF, //HANGUL SYLLABLE KHIEUKH EO HIEUH - 0xB0A1: 0xAC00, //HANGUL SYLLABLE KIYEOK A - 0xB0A2: 0xAC01, //HANGUL SYLLABLE KIYEOK A KIYEOK - 0xB0A3: 0xAC04, //HANGUL SYLLABLE KIYEOK A NIEUN - 0xB0A4: 0xAC07, //HANGUL SYLLABLE KIYEOK A TIKEUT - 0xB0A5: 0xAC08, //HANGUL SYLLABLE KIYEOK A RIEUL - 0xB0A6: 0xAC09, //HANGUL SYLLABLE KIYEOK A RIEULKIYEOK - 0xB0A7: 0xAC0A, //HANGUL SYLLABLE KIYEOK A RIEULMIEUM - 0xB0A8: 0xAC10, //HANGUL SYLLABLE KIYEOK A MIEUM - 0xB0A9: 0xAC11, //HANGUL SYLLABLE KIYEOK A PIEUP - 0xB0AA: 0xAC12, //HANGUL SYLLABLE KIYEOK A PIEUPSIOS - 0xB0AB: 0xAC13, //HANGUL SYLLABLE KIYEOK A SIOS - 0xB0AC: 0xAC14, //HANGUL SYLLABLE KIYEOK A SSANGSIOS - 0xB0AD: 0xAC15, //HANGUL SYLLABLE KIYEOK A IEUNG - 0xB0AE: 0xAC16, //HANGUL SYLLABLE KIYEOK A CIEUC - 0xB0AF: 0xAC17, //HANGUL SYLLABLE KIYEOK A CHIEUCH - 0xB0B0: 0xAC19, //HANGUL SYLLABLE KIYEOK A THIEUTH - 0xB0B1: 0xAC1A, //HANGUL SYLLABLE KIYEOK A PHIEUPH - 0xB0B2: 0xAC1B, //HANGUL SYLLABLE KIYEOK A HIEUH - 0xB0B3: 0xAC1C, //HANGUL SYLLABLE KIYEOK AE - 0xB0B4: 0xAC1D, //HANGUL SYLLABLE KIYEOK AE KIYEOK - 0xB0B5: 0xAC20, //HANGUL SYLLABLE KIYEOK AE NIEUN - 0xB0B6: 0xAC24, //HANGUL SYLLABLE KIYEOK AE RIEUL - 0xB0B7: 0xAC2C, //HANGUL SYLLABLE KIYEOK AE MIEUM - 0xB0B8: 0xAC2D, //HANGUL SYLLABLE KIYEOK AE PIEUP - 0xB0B9: 0xAC2F, //HANGUL SYLLABLE KIYEOK AE SIOS - 0xB0BA: 0xAC30, //HANGUL SYLLABLE KIYEOK AE SSANGSIOS - 0xB0BB: 0xAC31, //HANGUL SYLLABLE KIYEOK AE IEUNG - 0xB0BC: 0xAC38, //HANGUL SYLLABLE KIYEOK YA - 0xB0BD: 0xAC39, //HANGUL SYLLABLE KIYEOK YA KIYEOK - 0xB0BE: 0xAC3C, //HANGUL SYLLABLE KIYEOK YA NIEUN - 0xB0BF: 0xAC40, //HANGUL SYLLABLE KIYEOK YA RIEUL - 0xB0C0: 0xAC4B, //HANGUL SYLLABLE KIYEOK YA SIOS - 0xB0C1: 0xAC4D, //HANGUL SYLLABLE KIYEOK YA IEUNG - 0xB0C2: 0xAC54, //HANGUL SYLLABLE KIYEOK YAE - 0xB0C3: 0xAC58, //HANGUL SYLLABLE KIYEOK YAE NIEUN - 0xB0C4: 0xAC5C, //HANGUL SYLLABLE KIYEOK YAE RIEUL - 0xB0C5: 0xAC70, //HANGUL SYLLABLE KIYEOK EO - 0xB0C6: 0xAC71, //HANGUL SYLLABLE KIYEOK EO KIYEOK - 0xB0C7: 0xAC74, //HANGUL SYLLABLE KIYEOK EO NIEUN - 0xB0C8: 0xAC77, //HANGUL SYLLABLE KIYEOK EO TIKEUT - 0xB0C9: 0xAC78, //HANGUL SYLLABLE KIYEOK EO RIEUL - 0xB0CA: 0xAC7A, //HANGUL SYLLABLE KIYEOK EO RIEULMIEUM - 0xB0CB: 0xAC80, //HANGUL SYLLABLE KIYEOK EO MIEUM - 0xB0CC: 0xAC81, //HANGUL SYLLABLE KIYEOK EO PIEUP - 0xB0CD: 0xAC83, //HANGUL SYLLABLE KIYEOK EO SIOS - 0xB0CE: 0xAC84, //HANGUL SYLLABLE KIYEOK EO SSANGSIOS - 0xB0CF: 0xAC85, //HANGUL SYLLABLE KIYEOK EO IEUNG - 0xB0D0: 0xAC86, //HANGUL SYLLABLE KIYEOK EO CIEUC - 0xB0D1: 0xAC89, //HANGUL SYLLABLE KIYEOK EO THIEUTH - 0xB0D2: 0xAC8A, //HANGUL SYLLABLE KIYEOK EO PHIEUPH - 0xB0D3: 0xAC8B, //HANGUL SYLLABLE KIYEOK EO HIEUH - 0xB0D4: 0xAC8C, //HANGUL SYLLABLE KIYEOK E - 0xB0D5: 0xAC90, //HANGUL SYLLABLE KIYEOK E NIEUN - 0xB0D6: 0xAC94, //HANGUL SYLLABLE KIYEOK E RIEUL - 0xB0D7: 0xAC9C, //HANGUL SYLLABLE KIYEOK E MIEUM - 0xB0D8: 0xAC9D, //HANGUL SYLLABLE KIYEOK E PIEUP - 0xB0D9: 0xAC9F, //HANGUL SYLLABLE KIYEOK E SIOS - 0xB0DA: 0xACA0, //HANGUL SYLLABLE KIYEOK E SSANGSIOS - 0xB0DB: 0xACA1, //HANGUL SYLLABLE KIYEOK E IEUNG - 0xB0DC: 0xACA8, //HANGUL SYLLABLE KIYEOK YEO - 0xB0DD: 0xACA9, //HANGUL SYLLABLE KIYEOK YEO KIYEOK - 0xB0DE: 0xACAA, //HANGUL SYLLABLE KIYEOK YEO SSANGKIYEOK - 0xB0DF: 0xACAC, //HANGUL SYLLABLE KIYEOK YEO NIEUN - 0xB0E0: 0xACAF, //HANGUL SYLLABLE KIYEOK YEO TIKEUT - 0xB0E1: 0xACB0, //HANGUL SYLLABLE KIYEOK YEO RIEUL - 0xB0E2: 0xACB8, //HANGUL SYLLABLE KIYEOK YEO MIEUM - 0xB0E3: 0xACB9, //HANGUL SYLLABLE KIYEOK YEO PIEUP - 0xB0E4: 0xACBB, //HANGUL SYLLABLE KIYEOK YEO SIOS - 0xB0E5: 0xACBC, //HANGUL SYLLABLE KIYEOK YEO SSANGSIOS - 0xB0E6: 0xACBD, //HANGUL SYLLABLE KIYEOK YEO IEUNG - 0xB0E7: 0xACC1, //HANGUL SYLLABLE KIYEOK YEO THIEUTH - 0xB0E8: 0xACC4, //HANGUL SYLLABLE KIYEOK YE - 0xB0E9: 0xACC8, //HANGUL SYLLABLE KIYEOK YE NIEUN - 0xB0EA: 0xACCC, //HANGUL SYLLABLE KIYEOK YE RIEUL - 0xB0EB: 0xACD5, //HANGUL SYLLABLE KIYEOK YE PIEUP - 0xB0EC: 0xACD7, //HANGUL SYLLABLE KIYEOK YE SIOS - 0xB0ED: 0xACE0, //HANGUL SYLLABLE KIYEOK O - 0xB0EE: 0xACE1, //HANGUL SYLLABLE KIYEOK O KIYEOK - 0xB0EF: 0xACE4, //HANGUL SYLLABLE KIYEOK O NIEUN - 0xB0F0: 0xACE7, //HANGUL SYLLABLE KIYEOK O TIKEUT - 0xB0F1: 0xACE8, //HANGUL SYLLABLE KIYEOK O RIEUL - 0xB0F2: 0xACEA, //HANGUL SYLLABLE KIYEOK O RIEULMIEUM - 0xB0F3: 0xACEC, //HANGUL SYLLABLE KIYEOK O RIEULSIOS - 0xB0F4: 0xACEF, //HANGUL SYLLABLE KIYEOK O RIEULHIEUH - 0xB0F5: 0xACF0, //HANGUL SYLLABLE KIYEOK O MIEUM - 0xB0F6: 0xACF1, //HANGUL SYLLABLE KIYEOK O PIEUP - 0xB0F7: 0xACF3, //HANGUL SYLLABLE KIYEOK O SIOS - 0xB0F8: 0xACF5, //HANGUL SYLLABLE KIYEOK O IEUNG - 0xB0F9: 0xACF6, //HANGUL SYLLABLE KIYEOK O CIEUC - 0xB0FA: 0xACFC, //HANGUL SYLLABLE KIYEOK WA - 0xB0FB: 0xACFD, //HANGUL SYLLABLE KIYEOK WA KIYEOK - 0xB0FC: 0xAD00, //HANGUL SYLLABLE KIYEOK WA NIEUN - 0xB0FD: 0xAD04, //HANGUL SYLLABLE KIYEOK WA RIEUL - 0xB0FE: 0xAD06, //HANGUL SYLLABLE KIYEOK WA RIEULMIEUM - 0xB141: 0xCF02, //HANGUL SYLLABLE KHIEUKH E SSANGKIYEOK - 0xB142: 0xCF03, //HANGUL SYLLABLE KHIEUKH E KIYEOKSIOS - 0xB143: 0xCF05, //HANGUL SYLLABLE KHIEUKH E NIEUNCIEUC - 0xB144: 0xCF06, //HANGUL SYLLABLE KHIEUKH E NIEUNHIEUH - 0xB145: 0xCF07, //HANGUL SYLLABLE KHIEUKH E TIKEUT - 0xB146: 0xCF09, //HANGUL SYLLABLE KHIEUKH E RIEULKIYEOK - 0xB147: 0xCF0A, //HANGUL SYLLABLE KHIEUKH E RIEULMIEUM - 0xB148: 0xCF0B, //HANGUL SYLLABLE KHIEUKH E RIEULPIEUP - 0xB149: 0xCF0C, //HANGUL SYLLABLE KHIEUKH E RIEULSIOS - 0xB14A: 0xCF0D, //HANGUL SYLLABLE KHIEUKH E RIEULTHIEUTH - 0xB14B: 0xCF0E, //HANGUL SYLLABLE KHIEUKH E RIEULPHIEUPH - 0xB14C: 0xCF0F, //HANGUL SYLLABLE KHIEUKH E RIEULHIEUH - 0xB14D: 0xCF12, //HANGUL SYLLABLE KHIEUKH E PIEUPSIOS - 0xB14E: 0xCF14, //HANGUL SYLLABLE KHIEUKH E SSANGSIOS - 0xB14F: 0xCF16, //HANGUL SYLLABLE KHIEUKH E CIEUC - 0xB150: 0xCF17, //HANGUL SYLLABLE KHIEUKH E CHIEUCH - 0xB151: 0xCF18, //HANGUL SYLLABLE KHIEUKH E KHIEUKH - 0xB152: 0xCF19, //HANGUL SYLLABLE KHIEUKH E THIEUTH - 0xB153: 0xCF1A, //HANGUL SYLLABLE KHIEUKH E PHIEUPH - 0xB154: 0xCF1B, //HANGUL SYLLABLE KHIEUKH E HIEUH - 0xB155: 0xCF1D, //HANGUL SYLLABLE KHIEUKH YEO KIYEOK - 0xB156: 0xCF1E, //HANGUL SYLLABLE KHIEUKH YEO SSANGKIYEOK - 0xB157: 0xCF1F, //HANGUL SYLLABLE KHIEUKH YEO KIYEOKSIOS - 0xB158: 0xCF21, //HANGUL SYLLABLE KHIEUKH YEO NIEUNCIEUC - 0xB159: 0xCF22, //HANGUL SYLLABLE KHIEUKH YEO NIEUNHIEUH - 0xB15A: 0xCF23, //HANGUL SYLLABLE KHIEUKH YEO TIKEUT - 0xB161: 0xCF25, //HANGUL SYLLABLE KHIEUKH YEO RIEULKIYEOK - 0xB162: 0xCF26, //HANGUL SYLLABLE KHIEUKH YEO RIEULMIEUM - 0xB163: 0xCF27, //HANGUL SYLLABLE KHIEUKH YEO RIEULPIEUP - 0xB164: 0xCF28, //HANGUL SYLLABLE KHIEUKH YEO RIEULSIOS - 0xB165: 0xCF29, //HANGUL SYLLABLE KHIEUKH YEO RIEULTHIEUTH - 0xB166: 0xCF2A, //HANGUL SYLLABLE KHIEUKH YEO RIEULPHIEUPH - 0xB167: 0xCF2B, //HANGUL SYLLABLE KHIEUKH YEO RIEULHIEUH - 0xB168: 0xCF2E, //HANGUL SYLLABLE KHIEUKH YEO PIEUPSIOS - 0xB169: 0xCF32, //HANGUL SYLLABLE KHIEUKH YEO CIEUC - 0xB16A: 0xCF33, //HANGUL SYLLABLE KHIEUKH YEO CHIEUCH - 0xB16B: 0xCF34, //HANGUL SYLLABLE KHIEUKH YEO KHIEUKH - 0xB16C: 0xCF35, //HANGUL SYLLABLE KHIEUKH YEO THIEUTH - 0xB16D: 0xCF36, //HANGUL SYLLABLE KHIEUKH YEO PHIEUPH - 0xB16E: 0xCF37, //HANGUL SYLLABLE KHIEUKH YEO HIEUH - 0xB16F: 0xCF39, //HANGUL SYLLABLE KHIEUKH YE KIYEOK - 0xB170: 0xCF3A, //HANGUL SYLLABLE KHIEUKH YE SSANGKIYEOK - 0xB171: 0xCF3B, //HANGUL SYLLABLE KHIEUKH YE KIYEOKSIOS - 0xB172: 0xCF3C, //HANGUL SYLLABLE KHIEUKH YE NIEUN - 0xB173: 0xCF3D, //HANGUL SYLLABLE KHIEUKH YE NIEUNCIEUC - 0xB174: 0xCF3E, //HANGUL SYLLABLE KHIEUKH YE NIEUNHIEUH - 0xB175: 0xCF3F, //HANGUL SYLLABLE KHIEUKH YE TIKEUT - 0xB176: 0xCF40, //HANGUL SYLLABLE KHIEUKH YE RIEUL - 0xB177: 0xCF41, //HANGUL SYLLABLE KHIEUKH YE RIEULKIYEOK - 0xB178: 0xCF42, //HANGUL SYLLABLE KHIEUKH YE RIEULMIEUM - 0xB179: 0xCF43, //HANGUL SYLLABLE KHIEUKH YE RIEULPIEUP - 0xB17A: 0xCF44, //HANGUL SYLLABLE KHIEUKH YE RIEULSIOS - 0xB181: 0xCF45, //HANGUL SYLLABLE KHIEUKH YE RIEULTHIEUTH - 0xB182: 0xCF46, //HANGUL SYLLABLE KHIEUKH YE RIEULPHIEUPH - 0xB183: 0xCF47, //HANGUL SYLLABLE KHIEUKH YE RIEULHIEUH - 0xB184: 0xCF48, //HANGUL SYLLABLE KHIEUKH YE MIEUM - 0xB185: 0xCF49, //HANGUL SYLLABLE KHIEUKH YE PIEUP - 0xB186: 0xCF4A, //HANGUL SYLLABLE KHIEUKH YE PIEUPSIOS - 0xB187: 0xCF4B, //HANGUL SYLLABLE KHIEUKH YE SIOS - 0xB188: 0xCF4C, //HANGUL SYLLABLE KHIEUKH YE SSANGSIOS - 0xB189: 0xCF4D, //HANGUL SYLLABLE KHIEUKH YE IEUNG - 0xB18A: 0xCF4E, //HANGUL SYLLABLE KHIEUKH YE CIEUC - 0xB18B: 0xCF4F, //HANGUL SYLLABLE KHIEUKH YE CHIEUCH - 0xB18C: 0xCF50, //HANGUL SYLLABLE KHIEUKH YE KHIEUKH - 0xB18D: 0xCF51, //HANGUL SYLLABLE KHIEUKH YE THIEUTH - 0xB18E: 0xCF52, //HANGUL SYLLABLE KHIEUKH YE PHIEUPH - 0xB18F: 0xCF53, //HANGUL SYLLABLE KHIEUKH YE HIEUH - 0xB190: 0xCF56, //HANGUL SYLLABLE KHIEUKH O SSANGKIYEOK - 0xB191: 0xCF57, //HANGUL SYLLABLE KHIEUKH O KIYEOKSIOS - 0xB192: 0xCF59, //HANGUL SYLLABLE KHIEUKH O NIEUNCIEUC - 0xB193: 0xCF5A, //HANGUL SYLLABLE KHIEUKH O NIEUNHIEUH - 0xB194: 0xCF5B, //HANGUL SYLLABLE KHIEUKH O TIKEUT - 0xB195: 0xCF5D, //HANGUL SYLLABLE KHIEUKH O RIEULKIYEOK - 0xB196: 0xCF5E, //HANGUL SYLLABLE KHIEUKH O RIEULMIEUM - 0xB197: 0xCF5F, //HANGUL SYLLABLE KHIEUKH O RIEULPIEUP - 0xB198: 0xCF60, //HANGUL SYLLABLE KHIEUKH O RIEULSIOS - 0xB199: 0xCF61, //HANGUL SYLLABLE KHIEUKH O RIEULTHIEUTH - 0xB19A: 0xCF62, //HANGUL SYLLABLE KHIEUKH O RIEULPHIEUPH - 0xB19B: 0xCF63, //HANGUL SYLLABLE KHIEUKH O RIEULHIEUH - 0xB19C: 0xCF66, //HANGUL SYLLABLE KHIEUKH O PIEUPSIOS - 0xB19D: 0xCF68, //HANGUL SYLLABLE KHIEUKH O SSANGSIOS - 0xB19E: 0xCF6A, //HANGUL SYLLABLE KHIEUKH O CIEUC - 0xB19F: 0xCF6B, //HANGUL SYLLABLE KHIEUKH O CHIEUCH - 0xB1A0: 0xCF6C, //HANGUL SYLLABLE KHIEUKH O KHIEUKH - 0xB1A1: 0xAD0C, //HANGUL SYLLABLE KIYEOK WA MIEUM - 0xB1A2: 0xAD0D, //HANGUL SYLLABLE KIYEOK WA PIEUP - 0xB1A3: 0xAD0F, //HANGUL SYLLABLE KIYEOK WA SIOS - 0xB1A4: 0xAD11, //HANGUL SYLLABLE KIYEOK WA IEUNG - 0xB1A5: 0xAD18, //HANGUL SYLLABLE KIYEOK WAE - 0xB1A6: 0xAD1C, //HANGUL SYLLABLE KIYEOK WAE NIEUN - 0xB1A7: 0xAD20, //HANGUL SYLLABLE KIYEOK WAE RIEUL - 0xB1A8: 0xAD29, //HANGUL SYLLABLE KIYEOK WAE PIEUP - 0xB1A9: 0xAD2C, //HANGUL SYLLABLE KIYEOK WAE SSANGSIOS - 0xB1AA: 0xAD2D, //HANGUL SYLLABLE KIYEOK WAE IEUNG - 0xB1AB: 0xAD34, //HANGUL SYLLABLE KIYEOK OE - 0xB1AC: 0xAD35, //HANGUL SYLLABLE KIYEOK OE KIYEOK - 0xB1AD: 0xAD38, //HANGUL SYLLABLE KIYEOK OE NIEUN - 0xB1AE: 0xAD3C, //HANGUL SYLLABLE KIYEOK OE RIEUL - 0xB1AF: 0xAD44, //HANGUL SYLLABLE KIYEOK OE MIEUM - 0xB1B0: 0xAD45, //HANGUL SYLLABLE KIYEOK OE PIEUP - 0xB1B1: 0xAD47, //HANGUL SYLLABLE KIYEOK OE SIOS - 0xB1B2: 0xAD49, //HANGUL SYLLABLE KIYEOK OE IEUNG - 0xB1B3: 0xAD50, //HANGUL SYLLABLE KIYEOK YO - 0xB1B4: 0xAD54, //HANGUL SYLLABLE KIYEOK YO NIEUN - 0xB1B5: 0xAD58, //HANGUL SYLLABLE KIYEOK YO RIEUL - 0xB1B6: 0xAD61, //HANGUL SYLLABLE KIYEOK YO PIEUP - 0xB1B7: 0xAD63, //HANGUL SYLLABLE KIYEOK YO SIOS - 0xB1B8: 0xAD6C, //HANGUL SYLLABLE KIYEOK U - 0xB1B9: 0xAD6D, //HANGUL SYLLABLE KIYEOK U KIYEOK - 0xB1BA: 0xAD70, //HANGUL SYLLABLE KIYEOK U NIEUN - 0xB1BB: 0xAD73, //HANGUL SYLLABLE KIYEOK U TIKEUT - 0xB1BC: 0xAD74, //HANGUL SYLLABLE KIYEOK U RIEUL - 0xB1BD: 0xAD75, //HANGUL SYLLABLE KIYEOK U RIEULKIYEOK - 0xB1BE: 0xAD76, //HANGUL SYLLABLE KIYEOK U RIEULMIEUM - 0xB1BF: 0xAD7B, //HANGUL SYLLABLE KIYEOK U RIEULHIEUH - 0xB1C0: 0xAD7C, //HANGUL SYLLABLE KIYEOK U MIEUM - 0xB1C1: 0xAD7D, //HANGUL SYLLABLE KIYEOK U PIEUP - 0xB1C2: 0xAD7F, //HANGUL SYLLABLE KIYEOK U SIOS - 0xB1C3: 0xAD81, //HANGUL SYLLABLE KIYEOK U IEUNG - 0xB1C4: 0xAD82, //HANGUL SYLLABLE KIYEOK U CIEUC - 0xB1C5: 0xAD88, //HANGUL SYLLABLE KIYEOK WEO - 0xB1C6: 0xAD89, //HANGUL SYLLABLE KIYEOK WEO KIYEOK - 0xB1C7: 0xAD8C, //HANGUL SYLLABLE KIYEOK WEO NIEUN - 0xB1C8: 0xAD90, //HANGUL SYLLABLE KIYEOK WEO RIEUL - 0xB1C9: 0xAD9C, //HANGUL SYLLABLE KIYEOK WEO SSANGSIOS - 0xB1CA: 0xAD9D, //HANGUL SYLLABLE KIYEOK WEO IEUNG - 0xB1CB: 0xADA4, //HANGUL SYLLABLE KIYEOK WE - 0xB1CC: 0xADB7, //HANGUL SYLLABLE KIYEOK WE SIOS - 0xB1CD: 0xADC0, //HANGUL SYLLABLE KIYEOK WI - 0xB1CE: 0xADC1, //HANGUL SYLLABLE KIYEOK WI KIYEOK - 0xB1CF: 0xADC4, //HANGUL SYLLABLE KIYEOK WI NIEUN - 0xB1D0: 0xADC8, //HANGUL SYLLABLE KIYEOK WI RIEUL - 0xB1D1: 0xADD0, //HANGUL SYLLABLE KIYEOK WI MIEUM - 0xB1D2: 0xADD1, //HANGUL SYLLABLE KIYEOK WI PIEUP - 0xB1D3: 0xADD3, //HANGUL SYLLABLE KIYEOK WI SIOS - 0xB1D4: 0xADDC, //HANGUL SYLLABLE KIYEOK YU - 0xB1D5: 0xADE0, //HANGUL SYLLABLE KIYEOK YU NIEUN - 0xB1D6: 0xADE4, //HANGUL SYLLABLE KIYEOK YU RIEUL - 0xB1D7: 0xADF8, //HANGUL SYLLABLE KIYEOK EU - 0xB1D8: 0xADF9, //HANGUL SYLLABLE KIYEOK EU KIYEOK - 0xB1D9: 0xADFC, //HANGUL SYLLABLE KIYEOK EU NIEUN - 0xB1DA: 0xADFF, //HANGUL SYLLABLE KIYEOK EU TIKEUT - 0xB1DB: 0xAE00, //HANGUL SYLLABLE KIYEOK EU RIEUL - 0xB1DC: 0xAE01, //HANGUL SYLLABLE KIYEOK EU RIEULKIYEOK - 0xB1DD: 0xAE08, //HANGUL SYLLABLE KIYEOK EU MIEUM - 0xB1DE: 0xAE09, //HANGUL SYLLABLE KIYEOK EU PIEUP - 0xB1DF: 0xAE0B, //HANGUL SYLLABLE KIYEOK EU SIOS - 0xB1E0: 0xAE0D, //HANGUL SYLLABLE KIYEOK EU IEUNG - 0xB1E1: 0xAE14, //HANGUL SYLLABLE KIYEOK YI - 0xB1E2: 0xAE30, //HANGUL SYLLABLE KIYEOK I - 0xB1E3: 0xAE31, //HANGUL SYLLABLE KIYEOK I KIYEOK - 0xB1E4: 0xAE34, //HANGUL SYLLABLE KIYEOK I NIEUN - 0xB1E5: 0xAE37, //HANGUL SYLLABLE KIYEOK I TIKEUT - 0xB1E6: 0xAE38, //HANGUL SYLLABLE KIYEOK I RIEUL - 0xB1E7: 0xAE3A, //HANGUL SYLLABLE KIYEOK I RIEULMIEUM - 0xB1E8: 0xAE40, //HANGUL SYLLABLE KIYEOK I MIEUM - 0xB1E9: 0xAE41, //HANGUL SYLLABLE KIYEOK I PIEUP - 0xB1EA: 0xAE43, //HANGUL SYLLABLE KIYEOK I SIOS - 0xB1EB: 0xAE45, //HANGUL SYLLABLE KIYEOK I IEUNG - 0xB1EC: 0xAE46, //HANGUL SYLLABLE KIYEOK I CIEUC - 0xB1ED: 0xAE4A, //HANGUL SYLLABLE KIYEOK I PHIEUPH - 0xB1EE: 0xAE4C, //HANGUL SYLLABLE SSANGKIYEOK A - 0xB1EF: 0xAE4D, //HANGUL SYLLABLE SSANGKIYEOK A KIYEOK - 0xB1F0: 0xAE4E, //HANGUL SYLLABLE SSANGKIYEOK A SSANGKIYEOK - 0xB1F1: 0xAE50, //HANGUL SYLLABLE SSANGKIYEOK A NIEUN - 0xB1F2: 0xAE54, //HANGUL SYLLABLE SSANGKIYEOK A RIEUL - 0xB1F3: 0xAE56, //HANGUL SYLLABLE SSANGKIYEOK A RIEULMIEUM - 0xB1F4: 0xAE5C, //HANGUL SYLLABLE SSANGKIYEOK A MIEUM - 0xB1F5: 0xAE5D, //HANGUL SYLLABLE SSANGKIYEOK A PIEUP - 0xB1F6: 0xAE5F, //HANGUL SYLLABLE SSANGKIYEOK A SIOS - 0xB1F7: 0xAE60, //HANGUL SYLLABLE SSANGKIYEOK A SSANGSIOS - 0xB1F8: 0xAE61, //HANGUL SYLLABLE SSANGKIYEOK A IEUNG - 0xB1F9: 0xAE65, //HANGUL SYLLABLE SSANGKIYEOK A THIEUTH - 0xB1FA: 0xAE68, //HANGUL SYLLABLE SSANGKIYEOK AE - 0xB1FB: 0xAE69, //HANGUL SYLLABLE SSANGKIYEOK AE KIYEOK - 0xB1FC: 0xAE6C, //HANGUL SYLLABLE SSANGKIYEOK AE NIEUN - 0xB1FD: 0xAE70, //HANGUL SYLLABLE SSANGKIYEOK AE RIEUL - 0xB1FE: 0xAE78, //HANGUL SYLLABLE SSANGKIYEOK AE MIEUM - 0xB241: 0xCF6D, //HANGUL SYLLABLE KHIEUKH O THIEUTH - 0xB242: 0xCF6E, //HANGUL SYLLABLE KHIEUKH O PHIEUPH - 0xB243: 0xCF6F, //HANGUL SYLLABLE KHIEUKH O HIEUH - 0xB244: 0xCF72, //HANGUL SYLLABLE KHIEUKH WA SSANGKIYEOK - 0xB245: 0xCF73, //HANGUL SYLLABLE KHIEUKH WA KIYEOKSIOS - 0xB246: 0xCF75, //HANGUL SYLLABLE KHIEUKH WA NIEUNCIEUC - 0xB247: 0xCF76, //HANGUL SYLLABLE KHIEUKH WA NIEUNHIEUH - 0xB248: 0xCF77, //HANGUL SYLLABLE KHIEUKH WA TIKEUT - 0xB249: 0xCF79, //HANGUL SYLLABLE KHIEUKH WA RIEULKIYEOK - 0xB24A: 0xCF7A, //HANGUL SYLLABLE KHIEUKH WA RIEULMIEUM - 0xB24B: 0xCF7B, //HANGUL SYLLABLE KHIEUKH WA RIEULPIEUP - 0xB24C: 0xCF7C, //HANGUL SYLLABLE KHIEUKH WA RIEULSIOS - 0xB24D: 0xCF7D, //HANGUL SYLLABLE KHIEUKH WA RIEULTHIEUTH - 0xB24E: 0xCF7E, //HANGUL SYLLABLE KHIEUKH WA RIEULPHIEUPH - 0xB24F: 0xCF7F, //HANGUL SYLLABLE KHIEUKH WA RIEULHIEUH - 0xB250: 0xCF81, //HANGUL SYLLABLE KHIEUKH WA PIEUP - 0xB251: 0xCF82, //HANGUL SYLLABLE KHIEUKH WA PIEUPSIOS - 0xB252: 0xCF83, //HANGUL SYLLABLE KHIEUKH WA SIOS - 0xB253: 0xCF84, //HANGUL SYLLABLE KHIEUKH WA SSANGSIOS - 0xB254: 0xCF86, //HANGUL SYLLABLE KHIEUKH WA CIEUC - 0xB255: 0xCF87, //HANGUL SYLLABLE KHIEUKH WA CHIEUCH - 0xB256: 0xCF88, //HANGUL SYLLABLE KHIEUKH WA KHIEUKH - 0xB257: 0xCF89, //HANGUL SYLLABLE KHIEUKH WA THIEUTH - 0xB258: 0xCF8A, //HANGUL SYLLABLE KHIEUKH WA PHIEUPH - 0xB259: 0xCF8B, //HANGUL SYLLABLE KHIEUKH WA HIEUH - 0xB25A: 0xCF8D, //HANGUL SYLLABLE KHIEUKH WAE KIYEOK - 0xB261: 0xCF8E, //HANGUL SYLLABLE KHIEUKH WAE SSANGKIYEOK - 0xB262: 0xCF8F, //HANGUL SYLLABLE KHIEUKH WAE KIYEOKSIOS - 0xB263: 0xCF90, //HANGUL SYLLABLE KHIEUKH WAE NIEUN - 0xB264: 0xCF91, //HANGUL SYLLABLE KHIEUKH WAE NIEUNCIEUC - 0xB265: 0xCF92, //HANGUL SYLLABLE KHIEUKH WAE NIEUNHIEUH - 0xB266: 0xCF93, //HANGUL SYLLABLE KHIEUKH WAE TIKEUT - 0xB267: 0xCF94, //HANGUL SYLLABLE KHIEUKH WAE RIEUL - 0xB268: 0xCF95, //HANGUL SYLLABLE KHIEUKH WAE RIEULKIYEOK - 0xB269: 0xCF96, //HANGUL SYLLABLE KHIEUKH WAE RIEULMIEUM - 0xB26A: 0xCF97, //HANGUL SYLLABLE KHIEUKH WAE RIEULPIEUP - 0xB26B: 0xCF98, //HANGUL SYLLABLE KHIEUKH WAE RIEULSIOS - 0xB26C: 0xCF99, //HANGUL SYLLABLE KHIEUKH WAE RIEULTHIEUTH - 0xB26D: 0xCF9A, //HANGUL SYLLABLE KHIEUKH WAE RIEULPHIEUPH - 0xB26E: 0xCF9B, //HANGUL SYLLABLE KHIEUKH WAE RIEULHIEUH - 0xB26F: 0xCF9C, //HANGUL SYLLABLE KHIEUKH WAE MIEUM - 0xB270: 0xCF9D, //HANGUL SYLLABLE KHIEUKH WAE PIEUP - 0xB271: 0xCF9E, //HANGUL SYLLABLE KHIEUKH WAE PIEUPSIOS - 0xB272: 0xCF9F, //HANGUL SYLLABLE KHIEUKH WAE SIOS - 0xB273: 0xCFA0, //HANGUL SYLLABLE KHIEUKH WAE SSANGSIOS - 0xB274: 0xCFA2, //HANGUL SYLLABLE KHIEUKH WAE CIEUC - 0xB275: 0xCFA3, //HANGUL SYLLABLE KHIEUKH WAE CHIEUCH - 0xB276: 0xCFA4, //HANGUL SYLLABLE KHIEUKH WAE KHIEUKH - 0xB277: 0xCFA5, //HANGUL SYLLABLE KHIEUKH WAE THIEUTH - 0xB278: 0xCFA6, //HANGUL SYLLABLE KHIEUKH WAE PHIEUPH - 0xB279: 0xCFA7, //HANGUL SYLLABLE KHIEUKH WAE HIEUH - 0xB27A: 0xCFA9, //HANGUL SYLLABLE KHIEUKH OE KIYEOK - 0xB281: 0xCFAA, //HANGUL SYLLABLE KHIEUKH OE SSANGKIYEOK - 0xB282: 0xCFAB, //HANGUL SYLLABLE KHIEUKH OE KIYEOKSIOS - 0xB283: 0xCFAC, //HANGUL SYLLABLE KHIEUKH OE NIEUN - 0xB284: 0xCFAD, //HANGUL SYLLABLE KHIEUKH OE NIEUNCIEUC - 0xB285: 0xCFAE, //HANGUL SYLLABLE KHIEUKH OE NIEUNHIEUH - 0xB286: 0xCFAF, //HANGUL SYLLABLE KHIEUKH OE TIKEUT - 0xB287: 0xCFB1, //HANGUL SYLLABLE KHIEUKH OE RIEULKIYEOK - 0xB288: 0xCFB2, //HANGUL SYLLABLE KHIEUKH OE RIEULMIEUM - 0xB289: 0xCFB3, //HANGUL SYLLABLE KHIEUKH OE RIEULPIEUP - 0xB28A: 0xCFB4, //HANGUL SYLLABLE KHIEUKH OE RIEULSIOS - 0xB28B: 0xCFB5, //HANGUL SYLLABLE KHIEUKH OE RIEULTHIEUTH - 0xB28C: 0xCFB6, //HANGUL SYLLABLE KHIEUKH OE RIEULPHIEUPH - 0xB28D: 0xCFB7, //HANGUL SYLLABLE KHIEUKH OE RIEULHIEUH - 0xB28E: 0xCFB8, //HANGUL SYLLABLE KHIEUKH OE MIEUM - 0xB28F: 0xCFB9, //HANGUL SYLLABLE KHIEUKH OE PIEUP - 0xB290: 0xCFBA, //HANGUL SYLLABLE KHIEUKH OE PIEUPSIOS - 0xB291: 0xCFBB, //HANGUL SYLLABLE KHIEUKH OE SIOS - 0xB292: 0xCFBC, //HANGUL SYLLABLE KHIEUKH OE SSANGSIOS - 0xB293: 0xCFBD, //HANGUL SYLLABLE KHIEUKH OE IEUNG - 0xB294: 0xCFBE, //HANGUL SYLLABLE KHIEUKH OE CIEUC - 0xB295: 0xCFBF, //HANGUL SYLLABLE KHIEUKH OE CHIEUCH - 0xB296: 0xCFC0, //HANGUL SYLLABLE KHIEUKH OE KHIEUKH - 0xB297: 0xCFC1, //HANGUL SYLLABLE KHIEUKH OE THIEUTH - 0xB298: 0xCFC2, //HANGUL SYLLABLE KHIEUKH OE PHIEUPH - 0xB299: 0xCFC3, //HANGUL SYLLABLE KHIEUKH OE HIEUH - 0xB29A: 0xCFC5, //HANGUL SYLLABLE KHIEUKH YO KIYEOK - 0xB29B: 0xCFC6, //HANGUL SYLLABLE KHIEUKH YO SSANGKIYEOK - 0xB29C: 0xCFC7, //HANGUL SYLLABLE KHIEUKH YO KIYEOKSIOS - 0xB29D: 0xCFC8, //HANGUL SYLLABLE KHIEUKH YO NIEUN - 0xB29E: 0xCFC9, //HANGUL SYLLABLE KHIEUKH YO NIEUNCIEUC - 0xB29F: 0xCFCA, //HANGUL SYLLABLE KHIEUKH YO NIEUNHIEUH - 0xB2A0: 0xCFCB, //HANGUL SYLLABLE KHIEUKH YO TIKEUT - 0xB2A1: 0xAE79, //HANGUL SYLLABLE SSANGKIYEOK AE PIEUP - 0xB2A2: 0xAE7B, //HANGUL SYLLABLE SSANGKIYEOK AE SIOS - 0xB2A3: 0xAE7C, //HANGUL SYLLABLE SSANGKIYEOK AE SSANGSIOS - 0xB2A4: 0xAE7D, //HANGUL SYLLABLE SSANGKIYEOK AE IEUNG - 0xB2A5: 0xAE84, //HANGUL SYLLABLE SSANGKIYEOK YA - 0xB2A6: 0xAE85, //HANGUL SYLLABLE SSANGKIYEOK YA KIYEOK - 0xB2A7: 0xAE8C, //HANGUL SYLLABLE SSANGKIYEOK YA RIEUL - 0xB2A8: 0xAEBC, //HANGUL SYLLABLE SSANGKIYEOK EO - 0xB2A9: 0xAEBD, //HANGUL SYLLABLE SSANGKIYEOK EO KIYEOK - 0xB2AA: 0xAEBE, //HANGUL SYLLABLE SSANGKIYEOK EO SSANGKIYEOK - 0xB2AB: 0xAEC0, //HANGUL SYLLABLE SSANGKIYEOK EO NIEUN - 0xB2AC: 0xAEC4, //HANGUL SYLLABLE SSANGKIYEOK EO RIEUL - 0xB2AD: 0xAECC, //HANGUL SYLLABLE SSANGKIYEOK EO MIEUM - 0xB2AE: 0xAECD, //HANGUL SYLLABLE SSANGKIYEOK EO PIEUP - 0xB2AF: 0xAECF, //HANGUL SYLLABLE SSANGKIYEOK EO SIOS - 0xB2B0: 0xAED0, //HANGUL SYLLABLE SSANGKIYEOK EO SSANGSIOS - 0xB2B1: 0xAED1, //HANGUL SYLLABLE SSANGKIYEOK EO IEUNG - 0xB2B2: 0xAED8, //HANGUL SYLLABLE SSANGKIYEOK E - 0xB2B3: 0xAED9, //HANGUL SYLLABLE SSANGKIYEOK E KIYEOK - 0xB2B4: 0xAEDC, //HANGUL SYLLABLE SSANGKIYEOK E NIEUN - 0xB2B5: 0xAEE8, //HANGUL SYLLABLE SSANGKIYEOK E MIEUM - 0xB2B6: 0xAEEB, //HANGUL SYLLABLE SSANGKIYEOK E SIOS - 0xB2B7: 0xAEED, //HANGUL SYLLABLE SSANGKIYEOK E IEUNG - 0xB2B8: 0xAEF4, //HANGUL SYLLABLE SSANGKIYEOK YEO - 0xB2B9: 0xAEF8, //HANGUL SYLLABLE SSANGKIYEOK YEO NIEUN - 0xB2BA: 0xAEFC, //HANGUL SYLLABLE SSANGKIYEOK YEO RIEUL - 0xB2BB: 0xAF07, //HANGUL SYLLABLE SSANGKIYEOK YEO SIOS - 0xB2BC: 0xAF08, //HANGUL SYLLABLE SSANGKIYEOK YEO SSANGSIOS - 0xB2BD: 0xAF0D, //HANGUL SYLLABLE SSANGKIYEOK YEO THIEUTH - 0xB2BE: 0xAF10, //HANGUL SYLLABLE SSANGKIYEOK YE - 0xB2BF: 0xAF2C, //HANGUL SYLLABLE SSANGKIYEOK O - 0xB2C0: 0xAF2D, //HANGUL SYLLABLE SSANGKIYEOK O KIYEOK - 0xB2C1: 0xAF30, //HANGUL SYLLABLE SSANGKIYEOK O NIEUN - 0xB2C2: 0xAF32, //HANGUL SYLLABLE SSANGKIYEOK O NIEUNHIEUH - 0xB2C3: 0xAF34, //HANGUL SYLLABLE SSANGKIYEOK O RIEUL - 0xB2C4: 0xAF3C, //HANGUL SYLLABLE SSANGKIYEOK O MIEUM - 0xB2C5: 0xAF3D, //HANGUL SYLLABLE SSANGKIYEOK O PIEUP - 0xB2C6: 0xAF3F, //HANGUL SYLLABLE SSANGKIYEOK O SIOS - 0xB2C7: 0xAF41, //HANGUL SYLLABLE SSANGKIYEOK O IEUNG - 0xB2C8: 0xAF42, //HANGUL SYLLABLE SSANGKIYEOK O CIEUC - 0xB2C9: 0xAF43, //HANGUL SYLLABLE SSANGKIYEOK O CHIEUCH - 0xB2CA: 0xAF48, //HANGUL SYLLABLE SSANGKIYEOK WA - 0xB2CB: 0xAF49, //HANGUL SYLLABLE SSANGKIYEOK WA KIYEOK - 0xB2CC: 0xAF50, //HANGUL SYLLABLE SSANGKIYEOK WA RIEUL - 0xB2CD: 0xAF5C, //HANGUL SYLLABLE SSANGKIYEOK WA SSANGSIOS - 0xB2CE: 0xAF5D, //HANGUL SYLLABLE SSANGKIYEOK WA IEUNG - 0xB2CF: 0xAF64, //HANGUL SYLLABLE SSANGKIYEOK WAE - 0xB2D0: 0xAF65, //HANGUL SYLLABLE SSANGKIYEOK WAE KIYEOK - 0xB2D1: 0xAF79, //HANGUL SYLLABLE SSANGKIYEOK WAE IEUNG - 0xB2D2: 0xAF80, //HANGUL SYLLABLE SSANGKIYEOK OE - 0xB2D3: 0xAF84, //HANGUL SYLLABLE SSANGKIYEOK OE NIEUN - 0xB2D4: 0xAF88, //HANGUL SYLLABLE SSANGKIYEOK OE RIEUL - 0xB2D5: 0xAF90, //HANGUL SYLLABLE SSANGKIYEOK OE MIEUM - 0xB2D6: 0xAF91, //HANGUL SYLLABLE SSANGKIYEOK OE PIEUP - 0xB2D7: 0xAF95, //HANGUL SYLLABLE SSANGKIYEOK OE IEUNG - 0xB2D8: 0xAF9C, //HANGUL SYLLABLE SSANGKIYEOK YO - 0xB2D9: 0xAFB8, //HANGUL SYLLABLE SSANGKIYEOK U - 0xB2DA: 0xAFB9, //HANGUL SYLLABLE SSANGKIYEOK U KIYEOK - 0xB2DB: 0xAFBC, //HANGUL SYLLABLE SSANGKIYEOK U NIEUN - 0xB2DC: 0xAFC0, //HANGUL SYLLABLE SSANGKIYEOK U RIEUL - 0xB2DD: 0xAFC7, //HANGUL SYLLABLE SSANGKIYEOK U RIEULHIEUH - 0xB2DE: 0xAFC8, //HANGUL SYLLABLE SSANGKIYEOK U MIEUM - 0xB2DF: 0xAFC9, //HANGUL SYLLABLE SSANGKIYEOK U PIEUP - 0xB2E0: 0xAFCB, //HANGUL SYLLABLE SSANGKIYEOK U SIOS - 0xB2E1: 0xAFCD, //HANGUL SYLLABLE SSANGKIYEOK U IEUNG - 0xB2E2: 0xAFCE, //HANGUL SYLLABLE SSANGKIYEOK U CIEUC - 0xB2E3: 0xAFD4, //HANGUL SYLLABLE SSANGKIYEOK WEO - 0xB2E4: 0xAFDC, //HANGUL SYLLABLE SSANGKIYEOK WEO RIEUL - 0xB2E5: 0xAFE8, //HANGUL SYLLABLE SSANGKIYEOK WEO SSANGSIOS - 0xB2E6: 0xAFE9, //HANGUL SYLLABLE SSANGKIYEOK WEO IEUNG - 0xB2E7: 0xAFF0, //HANGUL SYLLABLE SSANGKIYEOK WE - 0xB2E8: 0xAFF1, //HANGUL SYLLABLE SSANGKIYEOK WE KIYEOK - 0xB2E9: 0xAFF4, //HANGUL SYLLABLE SSANGKIYEOK WE NIEUN - 0xB2EA: 0xAFF8, //HANGUL SYLLABLE SSANGKIYEOK WE RIEUL - 0xB2EB: 0xB000, //HANGUL SYLLABLE SSANGKIYEOK WE MIEUM - 0xB2EC: 0xB001, //HANGUL SYLLABLE SSANGKIYEOK WE PIEUP - 0xB2ED: 0xB004, //HANGUL SYLLABLE SSANGKIYEOK WE SSANGSIOS - 0xB2EE: 0xB00C, //HANGUL SYLLABLE SSANGKIYEOK WI - 0xB2EF: 0xB010, //HANGUL SYLLABLE SSANGKIYEOK WI NIEUN - 0xB2F0: 0xB014, //HANGUL SYLLABLE SSANGKIYEOK WI RIEUL - 0xB2F1: 0xB01C, //HANGUL SYLLABLE SSANGKIYEOK WI MIEUM - 0xB2F2: 0xB01D, //HANGUL SYLLABLE SSANGKIYEOK WI PIEUP - 0xB2F3: 0xB028, //HANGUL SYLLABLE SSANGKIYEOK YU - 0xB2F4: 0xB044, //HANGUL SYLLABLE SSANGKIYEOK EU - 0xB2F5: 0xB045, //HANGUL SYLLABLE SSANGKIYEOK EU KIYEOK - 0xB2F6: 0xB048, //HANGUL SYLLABLE SSANGKIYEOK EU NIEUN - 0xB2F7: 0xB04A, //HANGUL SYLLABLE SSANGKIYEOK EU NIEUNHIEUH - 0xB2F8: 0xB04C, //HANGUL SYLLABLE SSANGKIYEOK EU RIEUL - 0xB2F9: 0xB04E, //HANGUL SYLLABLE SSANGKIYEOK EU RIEULMIEUM - 0xB2FA: 0xB053, //HANGUL SYLLABLE SSANGKIYEOK EU RIEULHIEUH - 0xB2FB: 0xB054, //HANGUL SYLLABLE SSANGKIYEOK EU MIEUM - 0xB2FC: 0xB055, //HANGUL SYLLABLE SSANGKIYEOK EU PIEUP - 0xB2FD: 0xB057, //HANGUL SYLLABLE SSANGKIYEOK EU SIOS - 0xB2FE: 0xB059, //HANGUL SYLLABLE SSANGKIYEOK EU IEUNG - 0xB341: 0xCFCC, //HANGUL SYLLABLE KHIEUKH YO RIEUL - 0xB342: 0xCFCD, //HANGUL SYLLABLE KHIEUKH YO RIEULKIYEOK - 0xB343: 0xCFCE, //HANGUL SYLLABLE KHIEUKH YO RIEULMIEUM - 0xB344: 0xCFCF, //HANGUL SYLLABLE KHIEUKH YO RIEULPIEUP - 0xB345: 0xCFD0, //HANGUL SYLLABLE KHIEUKH YO RIEULSIOS - 0xB346: 0xCFD1, //HANGUL SYLLABLE KHIEUKH YO RIEULTHIEUTH - 0xB347: 0xCFD2, //HANGUL SYLLABLE KHIEUKH YO RIEULPHIEUPH - 0xB348: 0xCFD3, //HANGUL SYLLABLE KHIEUKH YO RIEULHIEUH - 0xB349: 0xCFD4, //HANGUL SYLLABLE KHIEUKH YO MIEUM - 0xB34A: 0xCFD5, //HANGUL SYLLABLE KHIEUKH YO PIEUP - 0xB34B: 0xCFD6, //HANGUL SYLLABLE KHIEUKH YO PIEUPSIOS - 0xB34C: 0xCFD7, //HANGUL SYLLABLE KHIEUKH YO SIOS - 0xB34D: 0xCFD8, //HANGUL SYLLABLE KHIEUKH YO SSANGSIOS - 0xB34E: 0xCFD9, //HANGUL SYLLABLE KHIEUKH YO IEUNG - 0xB34F: 0xCFDA, //HANGUL SYLLABLE KHIEUKH YO CIEUC - 0xB350: 0xCFDB, //HANGUL SYLLABLE KHIEUKH YO CHIEUCH - 0xB351: 0xCFDC, //HANGUL SYLLABLE KHIEUKH YO KHIEUKH - 0xB352: 0xCFDD, //HANGUL SYLLABLE KHIEUKH YO THIEUTH - 0xB353: 0xCFDE, //HANGUL SYLLABLE KHIEUKH YO PHIEUPH - 0xB354: 0xCFDF, //HANGUL SYLLABLE KHIEUKH YO HIEUH - 0xB355: 0xCFE2, //HANGUL SYLLABLE KHIEUKH U SSANGKIYEOK - 0xB356: 0xCFE3, //HANGUL SYLLABLE KHIEUKH U KIYEOKSIOS - 0xB357: 0xCFE5, //HANGUL SYLLABLE KHIEUKH U NIEUNCIEUC - 0xB358: 0xCFE6, //HANGUL SYLLABLE KHIEUKH U NIEUNHIEUH - 0xB359: 0xCFE7, //HANGUL SYLLABLE KHIEUKH U TIKEUT - 0xB35A: 0xCFE9, //HANGUL SYLLABLE KHIEUKH U RIEULKIYEOK - 0xB361: 0xCFEA, //HANGUL SYLLABLE KHIEUKH U RIEULMIEUM - 0xB362: 0xCFEB, //HANGUL SYLLABLE KHIEUKH U RIEULPIEUP - 0xB363: 0xCFEC, //HANGUL SYLLABLE KHIEUKH U RIEULSIOS - 0xB364: 0xCFED, //HANGUL SYLLABLE KHIEUKH U RIEULTHIEUTH - 0xB365: 0xCFEE, //HANGUL SYLLABLE KHIEUKH U RIEULPHIEUPH - 0xB366: 0xCFEF, //HANGUL SYLLABLE KHIEUKH U RIEULHIEUH - 0xB367: 0xCFF2, //HANGUL SYLLABLE KHIEUKH U PIEUPSIOS - 0xB368: 0xCFF4, //HANGUL SYLLABLE KHIEUKH U SSANGSIOS - 0xB369: 0xCFF6, //HANGUL SYLLABLE KHIEUKH U CIEUC - 0xB36A: 0xCFF7, //HANGUL SYLLABLE KHIEUKH U CHIEUCH - 0xB36B: 0xCFF8, //HANGUL SYLLABLE KHIEUKH U KHIEUKH - 0xB36C: 0xCFF9, //HANGUL SYLLABLE KHIEUKH U THIEUTH - 0xB36D: 0xCFFA, //HANGUL SYLLABLE KHIEUKH U PHIEUPH - 0xB36E: 0xCFFB, //HANGUL SYLLABLE KHIEUKH U HIEUH - 0xB36F: 0xCFFD, //HANGUL SYLLABLE KHIEUKH WEO KIYEOK - 0xB370: 0xCFFE, //HANGUL SYLLABLE KHIEUKH WEO SSANGKIYEOK - 0xB371: 0xCFFF, //HANGUL SYLLABLE KHIEUKH WEO KIYEOKSIOS - 0xB372: 0xD001, //HANGUL SYLLABLE KHIEUKH WEO NIEUNCIEUC - 0xB373: 0xD002, //HANGUL SYLLABLE KHIEUKH WEO NIEUNHIEUH - 0xB374: 0xD003, //HANGUL SYLLABLE KHIEUKH WEO TIKEUT - 0xB375: 0xD005, //HANGUL SYLLABLE KHIEUKH WEO RIEULKIYEOK - 0xB376: 0xD006, //HANGUL SYLLABLE KHIEUKH WEO RIEULMIEUM - 0xB377: 0xD007, //HANGUL SYLLABLE KHIEUKH WEO RIEULPIEUP - 0xB378: 0xD008, //HANGUL SYLLABLE KHIEUKH WEO RIEULSIOS - 0xB379: 0xD009, //HANGUL SYLLABLE KHIEUKH WEO RIEULTHIEUTH - 0xB37A: 0xD00A, //HANGUL SYLLABLE KHIEUKH WEO RIEULPHIEUPH - 0xB381: 0xD00B, //HANGUL SYLLABLE KHIEUKH WEO RIEULHIEUH - 0xB382: 0xD00C, //HANGUL SYLLABLE KHIEUKH WEO MIEUM - 0xB383: 0xD00D, //HANGUL SYLLABLE KHIEUKH WEO PIEUP - 0xB384: 0xD00E, //HANGUL SYLLABLE KHIEUKH WEO PIEUPSIOS - 0xB385: 0xD00F, //HANGUL SYLLABLE KHIEUKH WEO SIOS - 0xB386: 0xD010, //HANGUL SYLLABLE KHIEUKH WEO SSANGSIOS - 0xB387: 0xD012, //HANGUL SYLLABLE KHIEUKH WEO CIEUC - 0xB388: 0xD013, //HANGUL SYLLABLE KHIEUKH WEO CHIEUCH - 0xB389: 0xD014, //HANGUL SYLLABLE KHIEUKH WEO KHIEUKH - 0xB38A: 0xD015, //HANGUL SYLLABLE KHIEUKH WEO THIEUTH - 0xB38B: 0xD016, //HANGUL SYLLABLE KHIEUKH WEO PHIEUPH - 0xB38C: 0xD017, //HANGUL SYLLABLE KHIEUKH WEO HIEUH - 0xB38D: 0xD019, //HANGUL SYLLABLE KHIEUKH WE KIYEOK - 0xB38E: 0xD01A, //HANGUL SYLLABLE KHIEUKH WE SSANGKIYEOK - 0xB38F: 0xD01B, //HANGUL SYLLABLE KHIEUKH WE KIYEOKSIOS - 0xB390: 0xD01C, //HANGUL SYLLABLE KHIEUKH WE NIEUN - 0xB391: 0xD01D, //HANGUL SYLLABLE KHIEUKH WE NIEUNCIEUC - 0xB392: 0xD01E, //HANGUL SYLLABLE KHIEUKH WE NIEUNHIEUH - 0xB393: 0xD01F, //HANGUL SYLLABLE KHIEUKH WE TIKEUT - 0xB394: 0xD020, //HANGUL SYLLABLE KHIEUKH WE RIEUL - 0xB395: 0xD021, //HANGUL SYLLABLE KHIEUKH WE RIEULKIYEOK - 0xB396: 0xD022, //HANGUL SYLLABLE KHIEUKH WE RIEULMIEUM - 0xB397: 0xD023, //HANGUL SYLLABLE KHIEUKH WE RIEULPIEUP - 0xB398: 0xD024, //HANGUL SYLLABLE KHIEUKH WE RIEULSIOS - 0xB399: 0xD025, //HANGUL SYLLABLE KHIEUKH WE RIEULTHIEUTH - 0xB39A: 0xD026, //HANGUL SYLLABLE KHIEUKH WE RIEULPHIEUPH - 0xB39B: 0xD027, //HANGUL SYLLABLE KHIEUKH WE RIEULHIEUH - 0xB39C: 0xD028, //HANGUL SYLLABLE KHIEUKH WE MIEUM - 0xB39D: 0xD029, //HANGUL SYLLABLE KHIEUKH WE PIEUP - 0xB39E: 0xD02A, //HANGUL SYLLABLE KHIEUKH WE PIEUPSIOS - 0xB39F: 0xD02B, //HANGUL SYLLABLE KHIEUKH WE SIOS - 0xB3A0: 0xD02C, //HANGUL SYLLABLE KHIEUKH WE SSANGSIOS - 0xB3A1: 0xB05D, //HANGUL SYLLABLE SSANGKIYEOK EU THIEUTH - 0xB3A2: 0xB07C, //HANGUL SYLLABLE SSANGKIYEOK I - 0xB3A3: 0xB07D, //HANGUL SYLLABLE SSANGKIYEOK I KIYEOK - 0xB3A4: 0xB080, //HANGUL SYLLABLE SSANGKIYEOK I NIEUN - 0xB3A5: 0xB084, //HANGUL SYLLABLE SSANGKIYEOK I RIEUL - 0xB3A6: 0xB08C, //HANGUL SYLLABLE SSANGKIYEOK I MIEUM - 0xB3A7: 0xB08D, //HANGUL SYLLABLE SSANGKIYEOK I PIEUP - 0xB3A8: 0xB08F, //HANGUL SYLLABLE SSANGKIYEOK I SIOS - 0xB3A9: 0xB091, //HANGUL SYLLABLE SSANGKIYEOK I IEUNG - 0xB3AA: 0xB098, //HANGUL SYLLABLE NIEUN A - 0xB3AB: 0xB099, //HANGUL SYLLABLE NIEUN A KIYEOK - 0xB3AC: 0xB09A, //HANGUL SYLLABLE NIEUN A SSANGKIYEOK - 0xB3AD: 0xB09C, //HANGUL SYLLABLE NIEUN A NIEUN - 0xB3AE: 0xB09F, //HANGUL SYLLABLE NIEUN A TIKEUT - 0xB3AF: 0xB0A0, //HANGUL SYLLABLE NIEUN A RIEUL - 0xB3B0: 0xB0A1, //HANGUL SYLLABLE NIEUN A RIEULKIYEOK - 0xB3B1: 0xB0A2, //HANGUL SYLLABLE NIEUN A RIEULMIEUM - 0xB3B2: 0xB0A8, //HANGUL SYLLABLE NIEUN A MIEUM - 0xB3B3: 0xB0A9, //HANGUL SYLLABLE NIEUN A PIEUP - 0xB3B4: 0xB0AB, //HANGUL SYLLABLE NIEUN A SIOS - 0xB3B5: 0xB0AC, //HANGUL SYLLABLE NIEUN A SSANGSIOS - 0xB3B6: 0xB0AD, //HANGUL SYLLABLE NIEUN A IEUNG - 0xB3B7: 0xB0AE, //HANGUL SYLLABLE NIEUN A CIEUC - 0xB3B8: 0xB0AF, //HANGUL SYLLABLE NIEUN A CHIEUCH - 0xB3B9: 0xB0B1, //HANGUL SYLLABLE NIEUN A THIEUTH - 0xB3BA: 0xB0B3, //HANGUL SYLLABLE NIEUN A HIEUH - 0xB3BB: 0xB0B4, //HANGUL SYLLABLE NIEUN AE - 0xB3BC: 0xB0B5, //HANGUL SYLLABLE NIEUN AE KIYEOK - 0xB3BD: 0xB0B8, //HANGUL SYLLABLE NIEUN AE NIEUN - 0xB3BE: 0xB0BC, //HANGUL SYLLABLE NIEUN AE RIEUL - 0xB3BF: 0xB0C4, //HANGUL SYLLABLE NIEUN AE MIEUM - 0xB3C0: 0xB0C5, //HANGUL SYLLABLE NIEUN AE PIEUP - 0xB3C1: 0xB0C7, //HANGUL SYLLABLE NIEUN AE SIOS - 0xB3C2: 0xB0C8, //HANGUL SYLLABLE NIEUN AE SSANGSIOS - 0xB3C3: 0xB0C9, //HANGUL SYLLABLE NIEUN AE IEUNG - 0xB3C4: 0xB0D0, //HANGUL SYLLABLE NIEUN YA - 0xB3C5: 0xB0D1, //HANGUL SYLLABLE NIEUN YA KIYEOK - 0xB3C6: 0xB0D4, //HANGUL SYLLABLE NIEUN YA NIEUN - 0xB3C7: 0xB0D8, //HANGUL SYLLABLE NIEUN YA RIEUL - 0xB3C8: 0xB0E0, //HANGUL SYLLABLE NIEUN YA MIEUM - 0xB3C9: 0xB0E5, //HANGUL SYLLABLE NIEUN YA IEUNG - 0xB3CA: 0xB108, //HANGUL SYLLABLE NIEUN EO - 0xB3CB: 0xB109, //HANGUL SYLLABLE NIEUN EO KIYEOK - 0xB3CC: 0xB10B, //HANGUL SYLLABLE NIEUN EO KIYEOKSIOS - 0xB3CD: 0xB10C, //HANGUL SYLLABLE NIEUN EO NIEUN - 0xB3CE: 0xB110, //HANGUL SYLLABLE NIEUN EO RIEUL - 0xB3CF: 0xB112, //HANGUL SYLLABLE NIEUN EO RIEULMIEUM - 0xB3D0: 0xB113, //HANGUL SYLLABLE NIEUN EO RIEULPIEUP - 0xB3D1: 0xB118, //HANGUL SYLLABLE NIEUN EO MIEUM - 0xB3D2: 0xB119, //HANGUL SYLLABLE NIEUN EO PIEUP - 0xB3D3: 0xB11B, //HANGUL SYLLABLE NIEUN EO SIOS - 0xB3D4: 0xB11C, //HANGUL SYLLABLE NIEUN EO SSANGSIOS - 0xB3D5: 0xB11D, //HANGUL SYLLABLE NIEUN EO IEUNG - 0xB3D6: 0xB123, //HANGUL SYLLABLE NIEUN EO HIEUH - 0xB3D7: 0xB124, //HANGUL SYLLABLE NIEUN E - 0xB3D8: 0xB125, //HANGUL SYLLABLE NIEUN E KIYEOK - 0xB3D9: 0xB128, //HANGUL SYLLABLE NIEUN E NIEUN - 0xB3DA: 0xB12C, //HANGUL SYLLABLE NIEUN E RIEUL - 0xB3DB: 0xB134, //HANGUL SYLLABLE NIEUN E MIEUM - 0xB3DC: 0xB135, //HANGUL SYLLABLE NIEUN E PIEUP - 0xB3DD: 0xB137, //HANGUL SYLLABLE NIEUN E SIOS - 0xB3DE: 0xB138, //HANGUL SYLLABLE NIEUN E SSANGSIOS - 0xB3DF: 0xB139, //HANGUL SYLLABLE NIEUN E IEUNG - 0xB3E0: 0xB140, //HANGUL SYLLABLE NIEUN YEO - 0xB3E1: 0xB141, //HANGUL SYLLABLE NIEUN YEO KIYEOK - 0xB3E2: 0xB144, //HANGUL SYLLABLE NIEUN YEO NIEUN - 0xB3E3: 0xB148, //HANGUL SYLLABLE NIEUN YEO RIEUL - 0xB3E4: 0xB150, //HANGUL SYLLABLE NIEUN YEO MIEUM - 0xB3E5: 0xB151, //HANGUL SYLLABLE NIEUN YEO PIEUP - 0xB3E6: 0xB154, //HANGUL SYLLABLE NIEUN YEO SSANGSIOS - 0xB3E7: 0xB155, //HANGUL SYLLABLE NIEUN YEO IEUNG - 0xB3E8: 0xB158, //HANGUL SYLLABLE NIEUN YEO KHIEUKH - 0xB3E9: 0xB15C, //HANGUL SYLLABLE NIEUN YE - 0xB3EA: 0xB160, //HANGUL SYLLABLE NIEUN YE NIEUN - 0xB3EB: 0xB178, //HANGUL SYLLABLE NIEUN O - 0xB3EC: 0xB179, //HANGUL SYLLABLE NIEUN O KIYEOK - 0xB3ED: 0xB17C, //HANGUL SYLLABLE NIEUN O NIEUN - 0xB3EE: 0xB180, //HANGUL SYLLABLE NIEUN O RIEUL - 0xB3EF: 0xB182, //HANGUL SYLLABLE NIEUN O RIEULMIEUM - 0xB3F0: 0xB188, //HANGUL SYLLABLE NIEUN O MIEUM - 0xB3F1: 0xB189, //HANGUL SYLLABLE NIEUN O PIEUP - 0xB3F2: 0xB18B, //HANGUL SYLLABLE NIEUN O SIOS - 0xB3F3: 0xB18D, //HANGUL SYLLABLE NIEUN O IEUNG - 0xB3F4: 0xB192, //HANGUL SYLLABLE NIEUN O PHIEUPH - 0xB3F5: 0xB193, //HANGUL SYLLABLE NIEUN O HIEUH - 0xB3F6: 0xB194, //HANGUL SYLLABLE NIEUN WA - 0xB3F7: 0xB198, //HANGUL SYLLABLE NIEUN WA NIEUN - 0xB3F8: 0xB19C, //HANGUL SYLLABLE NIEUN WA RIEUL - 0xB3F9: 0xB1A8, //HANGUL SYLLABLE NIEUN WA SSANGSIOS - 0xB3FA: 0xB1CC, //HANGUL SYLLABLE NIEUN OE - 0xB3FB: 0xB1D0, //HANGUL SYLLABLE NIEUN OE NIEUN - 0xB3FC: 0xB1D4, //HANGUL SYLLABLE NIEUN OE RIEUL - 0xB3FD: 0xB1DC, //HANGUL SYLLABLE NIEUN OE MIEUM - 0xB3FE: 0xB1DD, //HANGUL SYLLABLE NIEUN OE PIEUP - 0xB441: 0xD02E, //HANGUL SYLLABLE KHIEUKH WE CIEUC - 0xB442: 0xD02F, //HANGUL SYLLABLE KHIEUKH WE CHIEUCH - 0xB443: 0xD030, //HANGUL SYLLABLE KHIEUKH WE KHIEUKH - 0xB444: 0xD031, //HANGUL SYLLABLE KHIEUKH WE THIEUTH - 0xB445: 0xD032, //HANGUL SYLLABLE KHIEUKH WE PHIEUPH - 0xB446: 0xD033, //HANGUL SYLLABLE KHIEUKH WE HIEUH - 0xB447: 0xD036, //HANGUL SYLLABLE KHIEUKH WI SSANGKIYEOK - 0xB448: 0xD037, //HANGUL SYLLABLE KHIEUKH WI KIYEOKSIOS - 0xB449: 0xD039, //HANGUL SYLLABLE KHIEUKH WI NIEUNCIEUC - 0xB44A: 0xD03A, //HANGUL SYLLABLE KHIEUKH WI NIEUNHIEUH - 0xB44B: 0xD03B, //HANGUL SYLLABLE KHIEUKH WI TIKEUT - 0xB44C: 0xD03D, //HANGUL SYLLABLE KHIEUKH WI RIEULKIYEOK - 0xB44D: 0xD03E, //HANGUL SYLLABLE KHIEUKH WI RIEULMIEUM - 0xB44E: 0xD03F, //HANGUL SYLLABLE KHIEUKH WI RIEULPIEUP - 0xB44F: 0xD040, //HANGUL SYLLABLE KHIEUKH WI RIEULSIOS - 0xB450: 0xD041, //HANGUL SYLLABLE KHIEUKH WI RIEULTHIEUTH - 0xB451: 0xD042, //HANGUL SYLLABLE KHIEUKH WI RIEULPHIEUPH - 0xB452: 0xD043, //HANGUL SYLLABLE KHIEUKH WI RIEULHIEUH - 0xB453: 0xD046, //HANGUL SYLLABLE KHIEUKH WI PIEUPSIOS - 0xB454: 0xD048, //HANGUL SYLLABLE KHIEUKH WI SSANGSIOS - 0xB455: 0xD04A, //HANGUL SYLLABLE KHIEUKH WI CIEUC - 0xB456: 0xD04B, //HANGUL SYLLABLE KHIEUKH WI CHIEUCH - 0xB457: 0xD04C, //HANGUL SYLLABLE KHIEUKH WI KHIEUKH - 0xB458: 0xD04D, //HANGUL SYLLABLE KHIEUKH WI THIEUTH - 0xB459: 0xD04E, //HANGUL SYLLABLE KHIEUKH WI PHIEUPH - 0xB45A: 0xD04F, //HANGUL SYLLABLE KHIEUKH WI HIEUH - 0xB461: 0xD051, //HANGUL SYLLABLE KHIEUKH YU KIYEOK - 0xB462: 0xD052, //HANGUL SYLLABLE KHIEUKH YU SSANGKIYEOK - 0xB463: 0xD053, //HANGUL SYLLABLE KHIEUKH YU KIYEOKSIOS - 0xB464: 0xD055, //HANGUL SYLLABLE KHIEUKH YU NIEUNCIEUC - 0xB465: 0xD056, //HANGUL SYLLABLE KHIEUKH YU NIEUNHIEUH - 0xB466: 0xD057, //HANGUL SYLLABLE KHIEUKH YU TIKEUT - 0xB467: 0xD059, //HANGUL SYLLABLE KHIEUKH YU RIEULKIYEOK - 0xB468: 0xD05A, //HANGUL SYLLABLE KHIEUKH YU RIEULMIEUM - 0xB469: 0xD05B, //HANGUL SYLLABLE KHIEUKH YU RIEULPIEUP - 0xB46A: 0xD05C, //HANGUL SYLLABLE KHIEUKH YU RIEULSIOS - 0xB46B: 0xD05D, //HANGUL SYLLABLE KHIEUKH YU RIEULTHIEUTH - 0xB46C: 0xD05E, //HANGUL SYLLABLE KHIEUKH YU RIEULPHIEUPH - 0xB46D: 0xD05F, //HANGUL SYLLABLE KHIEUKH YU RIEULHIEUH - 0xB46E: 0xD061, //HANGUL SYLLABLE KHIEUKH YU PIEUP - 0xB46F: 0xD062, //HANGUL SYLLABLE KHIEUKH YU PIEUPSIOS - 0xB470: 0xD063, //HANGUL SYLLABLE KHIEUKH YU SIOS - 0xB471: 0xD064, //HANGUL SYLLABLE KHIEUKH YU SSANGSIOS - 0xB472: 0xD065, //HANGUL SYLLABLE KHIEUKH YU IEUNG - 0xB473: 0xD066, //HANGUL SYLLABLE KHIEUKH YU CIEUC - 0xB474: 0xD067, //HANGUL SYLLABLE KHIEUKH YU CHIEUCH - 0xB475: 0xD068, //HANGUL SYLLABLE KHIEUKH YU KHIEUKH - 0xB476: 0xD069, //HANGUL SYLLABLE KHIEUKH YU THIEUTH - 0xB477: 0xD06A, //HANGUL SYLLABLE KHIEUKH YU PHIEUPH - 0xB478: 0xD06B, //HANGUL SYLLABLE KHIEUKH YU HIEUH - 0xB479: 0xD06E, //HANGUL SYLLABLE KHIEUKH EU SSANGKIYEOK - 0xB47A: 0xD06F, //HANGUL SYLLABLE KHIEUKH EU KIYEOKSIOS - 0xB481: 0xD071, //HANGUL SYLLABLE KHIEUKH EU NIEUNCIEUC - 0xB482: 0xD072, //HANGUL SYLLABLE KHIEUKH EU NIEUNHIEUH - 0xB483: 0xD073, //HANGUL SYLLABLE KHIEUKH EU TIKEUT - 0xB484: 0xD075, //HANGUL SYLLABLE KHIEUKH EU RIEULKIYEOK - 0xB485: 0xD076, //HANGUL SYLLABLE KHIEUKH EU RIEULMIEUM - 0xB486: 0xD077, //HANGUL SYLLABLE KHIEUKH EU RIEULPIEUP - 0xB487: 0xD078, //HANGUL SYLLABLE KHIEUKH EU RIEULSIOS - 0xB488: 0xD079, //HANGUL SYLLABLE KHIEUKH EU RIEULTHIEUTH - 0xB489: 0xD07A, //HANGUL SYLLABLE KHIEUKH EU RIEULPHIEUPH - 0xB48A: 0xD07B, //HANGUL SYLLABLE KHIEUKH EU RIEULHIEUH - 0xB48B: 0xD07E, //HANGUL SYLLABLE KHIEUKH EU PIEUPSIOS - 0xB48C: 0xD07F, //HANGUL SYLLABLE KHIEUKH EU SIOS - 0xB48D: 0xD080, //HANGUL SYLLABLE KHIEUKH EU SSANGSIOS - 0xB48E: 0xD082, //HANGUL SYLLABLE KHIEUKH EU CIEUC - 0xB48F: 0xD083, //HANGUL SYLLABLE KHIEUKH EU CHIEUCH - 0xB490: 0xD084, //HANGUL SYLLABLE KHIEUKH EU KHIEUKH - 0xB491: 0xD085, //HANGUL SYLLABLE KHIEUKH EU THIEUTH - 0xB492: 0xD086, //HANGUL SYLLABLE KHIEUKH EU PHIEUPH - 0xB493: 0xD087, //HANGUL SYLLABLE KHIEUKH EU HIEUH - 0xB494: 0xD088, //HANGUL SYLLABLE KHIEUKH YI - 0xB495: 0xD089, //HANGUL SYLLABLE KHIEUKH YI KIYEOK - 0xB496: 0xD08A, //HANGUL SYLLABLE KHIEUKH YI SSANGKIYEOK - 0xB497: 0xD08B, //HANGUL SYLLABLE KHIEUKH YI KIYEOKSIOS - 0xB498: 0xD08C, //HANGUL SYLLABLE KHIEUKH YI NIEUN - 0xB499: 0xD08D, //HANGUL SYLLABLE KHIEUKH YI NIEUNCIEUC - 0xB49A: 0xD08E, //HANGUL SYLLABLE KHIEUKH YI NIEUNHIEUH - 0xB49B: 0xD08F, //HANGUL SYLLABLE KHIEUKH YI TIKEUT - 0xB49C: 0xD090, //HANGUL SYLLABLE KHIEUKH YI RIEUL - 0xB49D: 0xD091, //HANGUL SYLLABLE KHIEUKH YI RIEULKIYEOK - 0xB49E: 0xD092, //HANGUL SYLLABLE KHIEUKH YI RIEULMIEUM - 0xB49F: 0xD093, //HANGUL SYLLABLE KHIEUKH YI RIEULPIEUP - 0xB4A0: 0xD094, //HANGUL SYLLABLE KHIEUKH YI RIEULSIOS - 0xB4A1: 0xB1DF, //HANGUL SYLLABLE NIEUN OE SIOS - 0xB4A2: 0xB1E8, //HANGUL SYLLABLE NIEUN YO - 0xB4A3: 0xB1E9, //HANGUL SYLLABLE NIEUN YO KIYEOK - 0xB4A4: 0xB1EC, //HANGUL SYLLABLE NIEUN YO NIEUN - 0xB4A5: 0xB1F0, //HANGUL SYLLABLE NIEUN YO RIEUL - 0xB4A6: 0xB1F9, //HANGUL SYLLABLE NIEUN YO PIEUP - 0xB4A7: 0xB1FB, //HANGUL SYLLABLE NIEUN YO SIOS - 0xB4A8: 0xB1FD, //HANGUL SYLLABLE NIEUN YO IEUNG - 0xB4A9: 0xB204, //HANGUL SYLLABLE NIEUN U - 0xB4AA: 0xB205, //HANGUL SYLLABLE NIEUN U KIYEOK - 0xB4AB: 0xB208, //HANGUL SYLLABLE NIEUN U NIEUN - 0xB4AC: 0xB20B, //HANGUL SYLLABLE NIEUN U TIKEUT - 0xB4AD: 0xB20C, //HANGUL SYLLABLE NIEUN U RIEUL - 0xB4AE: 0xB214, //HANGUL SYLLABLE NIEUN U MIEUM - 0xB4AF: 0xB215, //HANGUL SYLLABLE NIEUN U PIEUP - 0xB4B0: 0xB217, //HANGUL SYLLABLE NIEUN U SIOS - 0xB4B1: 0xB219, //HANGUL SYLLABLE NIEUN U IEUNG - 0xB4B2: 0xB220, //HANGUL SYLLABLE NIEUN WEO - 0xB4B3: 0xB234, //HANGUL SYLLABLE NIEUN WEO SSANGSIOS - 0xB4B4: 0xB23C, //HANGUL SYLLABLE NIEUN WE - 0xB4B5: 0xB258, //HANGUL SYLLABLE NIEUN WI - 0xB4B6: 0xB25C, //HANGUL SYLLABLE NIEUN WI NIEUN - 0xB4B7: 0xB260, //HANGUL SYLLABLE NIEUN WI RIEUL - 0xB4B8: 0xB268, //HANGUL SYLLABLE NIEUN WI MIEUM - 0xB4B9: 0xB269, //HANGUL SYLLABLE NIEUN WI PIEUP - 0xB4BA: 0xB274, //HANGUL SYLLABLE NIEUN YU - 0xB4BB: 0xB275, //HANGUL SYLLABLE NIEUN YU KIYEOK - 0xB4BC: 0xB27C, //HANGUL SYLLABLE NIEUN YU RIEUL - 0xB4BD: 0xB284, //HANGUL SYLLABLE NIEUN YU MIEUM - 0xB4BE: 0xB285, //HANGUL SYLLABLE NIEUN YU PIEUP - 0xB4BF: 0xB289, //HANGUL SYLLABLE NIEUN YU IEUNG - 0xB4C0: 0xB290, //HANGUL SYLLABLE NIEUN EU - 0xB4C1: 0xB291, //HANGUL SYLLABLE NIEUN EU KIYEOK - 0xB4C2: 0xB294, //HANGUL SYLLABLE NIEUN EU NIEUN - 0xB4C3: 0xB298, //HANGUL SYLLABLE NIEUN EU RIEUL - 0xB4C4: 0xB299, //HANGUL SYLLABLE NIEUN EU RIEULKIYEOK - 0xB4C5: 0xB29A, //HANGUL SYLLABLE NIEUN EU RIEULMIEUM - 0xB4C6: 0xB2A0, //HANGUL SYLLABLE NIEUN EU MIEUM - 0xB4C7: 0xB2A1, //HANGUL SYLLABLE NIEUN EU PIEUP - 0xB4C8: 0xB2A3, //HANGUL SYLLABLE NIEUN EU SIOS - 0xB4C9: 0xB2A5, //HANGUL SYLLABLE NIEUN EU IEUNG - 0xB4CA: 0xB2A6, //HANGUL SYLLABLE NIEUN EU CIEUC - 0xB4CB: 0xB2AA, //HANGUL SYLLABLE NIEUN EU PHIEUPH - 0xB4CC: 0xB2AC, //HANGUL SYLLABLE NIEUN YI - 0xB4CD: 0xB2B0, //HANGUL SYLLABLE NIEUN YI NIEUN - 0xB4CE: 0xB2B4, //HANGUL SYLLABLE NIEUN YI RIEUL - 0xB4CF: 0xB2C8, //HANGUL SYLLABLE NIEUN I - 0xB4D0: 0xB2C9, //HANGUL SYLLABLE NIEUN I KIYEOK - 0xB4D1: 0xB2CC, //HANGUL SYLLABLE NIEUN I NIEUN - 0xB4D2: 0xB2D0, //HANGUL SYLLABLE NIEUN I RIEUL - 0xB4D3: 0xB2D2, //HANGUL SYLLABLE NIEUN I RIEULMIEUM - 0xB4D4: 0xB2D8, //HANGUL SYLLABLE NIEUN I MIEUM - 0xB4D5: 0xB2D9, //HANGUL SYLLABLE NIEUN I PIEUP - 0xB4D6: 0xB2DB, //HANGUL SYLLABLE NIEUN I SIOS - 0xB4D7: 0xB2DD, //HANGUL SYLLABLE NIEUN I IEUNG - 0xB4D8: 0xB2E2, //HANGUL SYLLABLE NIEUN I PHIEUPH - 0xB4D9: 0xB2E4, //HANGUL SYLLABLE TIKEUT A - 0xB4DA: 0xB2E5, //HANGUL SYLLABLE TIKEUT A KIYEOK - 0xB4DB: 0xB2E6, //HANGUL SYLLABLE TIKEUT A SSANGKIYEOK - 0xB4DC: 0xB2E8, //HANGUL SYLLABLE TIKEUT A NIEUN - 0xB4DD: 0xB2EB, //HANGUL SYLLABLE TIKEUT A TIKEUT - 0xB4DE: 0xB2EC, //HANGUL SYLLABLE TIKEUT A RIEUL - 0xB4DF: 0xB2ED, //HANGUL SYLLABLE TIKEUT A RIEULKIYEOK - 0xB4E0: 0xB2EE, //HANGUL SYLLABLE TIKEUT A RIEULMIEUM - 0xB4E1: 0xB2EF, //HANGUL SYLLABLE TIKEUT A RIEULPIEUP - 0xB4E2: 0xB2F3, //HANGUL SYLLABLE TIKEUT A RIEULHIEUH - 0xB4E3: 0xB2F4, //HANGUL SYLLABLE TIKEUT A MIEUM - 0xB4E4: 0xB2F5, //HANGUL SYLLABLE TIKEUT A PIEUP - 0xB4E5: 0xB2F7, //HANGUL SYLLABLE TIKEUT A SIOS - 0xB4E6: 0xB2F8, //HANGUL SYLLABLE TIKEUT A SSANGSIOS - 0xB4E7: 0xB2F9, //HANGUL SYLLABLE TIKEUT A IEUNG - 0xB4E8: 0xB2FA, //HANGUL SYLLABLE TIKEUT A CIEUC - 0xB4E9: 0xB2FB, //HANGUL SYLLABLE TIKEUT A CHIEUCH - 0xB4EA: 0xB2FF, //HANGUL SYLLABLE TIKEUT A HIEUH - 0xB4EB: 0xB300, //HANGUL SYLLABLE TIKEUT AE - 0xB4EC: 0xB301, //HANGUL SYLLABLE TIKEUT AE KIYEOK - 0xB4ED: 0xB304, //HANGUL SYLLABLE TIKEUT AE NIEUN - 0xB4EE: 0xB308, //HANGUL SYLLABLE TIKEUT AE RIEUL - 0xB4EF: 0xB310, //HANGUL SYLLABLE TIKEUT AE MIEUM - 0xB4F0: 0xB311, //HANGUL SYLLABLE TIKEUT AE PIEUP - 0xB4F1: 0xB313, //HANGUL SYLLABLE TIKEUT AE SIOS - 0xB4F2: 0xB314, //HANGUL SYLLABLE TIKEUT AE SSANGSIOS - 0xB4F3: 0xB315, //HANGUL SYLLABLE TIKEUT AE IEUNG - 0xB4F4: 0xB31C, //HANGUL SYLLABLE TIKEUT YA - 0xB4F5: 0xB354, //HANGUL SYLLABLE TIKEUT EO - 0xB4F6: 0xB355, //HANGUL SYLLABLE TIKEUT EO KIYEOK - 0xB4F7: 0xB356, //HANGUL SYLLABLE TIKEUT EO SSANGKIYEOK - 0xB4F8: 0xB358, //HANGUL SYLLABLE TIKEUT EO NIEUN - 0xB4F9: 0xB35B, //HANGUL SYLLABLE TIKEUT EO TIKEUT - 0xB4FA: 0xB35C, //HANGUL SYLLABLE TIKEUT EO RIEUL - 0xB4FB: 0xB35E, //HANGUL SYLLABLE TIKEUT EO RIEULMIEUM - 0xB4FC: 0xB35F, //HANGUL SYLLABLE TIKEUT EO RIEULPIEUP - 0xB4FD: 0xB364, //HANGUL SYLLABLE TIKEUT EO MIEUM - 0xB4FE: 0xB365, //HANGUL SYLLABLE TIKEUT EO PIEUP - 0xB541: 0xD095, //HANGUL SYLLABLE KHIEUKH YI RIEULTHIEUTH - 0xB542: 0xD096, //HANGUL SYLLABLE KHIEUKH YI RIEULPHIEUPH - 0xB543: 0xD097, //HANGUL SYLLABLE KHIEUKH YI RIEULHIEUH - 0xB544: 0xD098, //HANGUL SYLLABLE KHIEUKH YI MIEUM - 0xB545: 0xD099, //HANGUL SYLLABLE KHIEUKH YI PIEUP - 0xB546: 0xD09A, //HANGUL SYLLABLE KHIEUKH YI PIEUPSIOS - 0xB547: 0xD09B, //HANGUL SYLLABLE KHIEUKH YI SIOS - 0xB548: 0xD09C, //HANGUL SYLLABLE KHIEUKH YI SSANGSIOS - 0xB549: 0xD09D, //HANGUL SYLLABLE KHIEUKH YI IEUNG - 0xB54A: 0xD09E, //HANGUL SYLLABLE KHIEUKH YI CIEUC - 0xB54B: 0xD09F, //HANGUL SYLLABLE KHIEUKH YI CHIEUCH - 0xB54C: 0xD0A0, //HANGUL SYLLABLE KHIEUKH YI KHIEUKH - 0xB54D: 0xD0A1, //HANGUL SYLLABLE KHIEUKH YI THIEUTH - 0xB54E: 0xD0A2, //HANGUL SYLLABLE KHIEUKH YI PHIEUPH - 0xB54F: 0xD0A3, //HANGUL SYLLABLE KHIEUKH YI HIEUH - 0xB550: 0xD0A6, //HANGUL SYLLABLE KHIEUKH I SSANGKIYEOK - 0xB551: 0xD0A7, //HANGUL SYLLABLE KHIEUKH I KIYEOKSIOS - 0xB552: 0xD0A9, //HANGUL SYLLABLE KHIEUKH I NIEUNCIEUC - 0xB553: 0xD0AA, //HANGUL SYLLABLE KHIEUKH I NIEUNHIEUH - 0xB554: 0xD0AB, //HANGUL SYLLABLE KHIEUKH I TIKEUT - 0xB555: 0xD0AD, //HANGUL SYLLABLE KHIEUKH I RIEULKIYEOK - 0xB556: 0xD0AE, //HANGUL SYLLABLE KHIEUKH I RIEULMIEUM - 0xB557: 0xD0AF, //HANGUL SYLLABLE KHIEUKH I RIEULPIEUP - 0xB558: 0xD0B0, //HANGUL SYLLABLE KHIEUKH I RIEULSIOS - 0xB559: 0xD0B1, //HANGUL SYLLABLE KHIEUKH I RIEULTHIEUTH - 0xB55A: 0xD0B2, //HANGUL SYLLABLE KHIEUKH I RIEULPHIEUPH - 0xB561: 0xD0B3, //HANGUL SYLLABLE KHIEUKH I RIEULHIEUH - 0xB562: 0xD0B6, //HANGUL SYLLABLE KHIEUKH I PIEUPSIOS - 0xB563: 0xD0B8, //HANGUL SYLLABLE KHIEUKH I SSANGSIOS - 0xB564: 0xD0BA, //HANGUL SYLLABLE KHIEUKH I CIEUC - 0xB565: 0xD0BB, //HANGUL SYLLABLE KHIEUKH I CHIEUCH - 0xB566: 0xD0BC, //HANGUL SYLLABLE KHIEUKH I KHIEUKH - 0xB567: 0xD0BD, //HANGUL SYLLABLE KHIEUKH I THIEUTH - 0xB568: 0xD0BE, //HANGUL SYLLABLE KHIEUKH I PHIEUPH - 0xB569: 0xD0BF, //HANGUL SYLLABLE KHIEUKH I HIEUH - 0xB56A: 0xD0C2, //HANGUL SYLLABLE THIEUTH A SSANGKIYEOK - 0xB56B: 0xD0C3, //HANGUL SYLLABLE THIEUTH A KIYEOKSIOS - 0xB56C: 0xD0C5, //HANGUL SYLLABLE THIEUTH A NIEUNCIEUC - 0xB56D: 0xD0C6, //HANGUL SYLLABLE THIEUTH A NIEUNHIEUH - 0xB56E: 0xD0C7, //HANGUL SYLLABLE THIEUTH A TIKEUT - 0xB56F: 0xD0CA, //HANGUL SYLLABLE THIEUTH A RIEULMIEUM - 0xB570: 0xD0CB, //HANGUL SYLLABLE THIEUTH A RIEULPIEUP - 0xB571: 0xD0CC, //HANGUL SYLLABLE THIEUTH A RIEULSIOS - 0xB572: 0xD0CD, //HANGUL SYLLABLE THIEUTH A RIEULTHIEUTH - 0xB573: 0xD0CE, //HANGUL SYLLABLE THIEUTH A RIEULPHIEUPH - 0xB574: 0xD0CF, //HANGUL SYLLABLE THIEUTH A RIEULHIEUH - 0xB575: 0xD0D2, //HANGUL SYLLABLE THIEUTH A PIEUPSIOS - 0xB576: 0xD0D6, //HANGUL SYLLABLE THIEUTH A CIEUC - 0xB577: 0xD0D7, //HANGUL SYLLABLE THIEUTH A CHIEUCH - 0xB578: 0xD0D8, //HANGUL SYLLABLE THIEUTH A KHIEUKH - 0xB579: 0xD0D9, //HANGUL SYLLABLE THIEUTH A THIEUTH - 0xB57A: 0xD0DA, //HANGUL SYLLABLE THIEUTH A PHIEUPH - 0xB581: 0xD0DB, //HANGUL SYLLABLE THIEUTH A HIEUH - 0xB582: 0xD0DE, //HANGUL SYLLABLE THIEUTH AE SSANGKIYEOK - 0xB583: 0xD0DF, //HANGUL SYLLABLE THIEUTH AE KIYEOKSIOS - 0xB584: 0xD0E1, //HANGUL SYLLABLE THIEUTH AE NIEUNCIEUC - 0xB585: 0xD0E2, //HANGUL SYLLABLE THIEUTH AE NIEUNHIEUH - 0xB586: 0xD0E3, //HANGUL SYLLABLE THIEUTH AE TIKEUT - 0xB587: 0xD0E5, //HANGUL SYLLABLE THIEUTH AE RIEULKIYEOK - 0xB588: 0xD0E6, //HANGUL SYLLABLE THIEUTH AE RIEULMIEUM - 0xB589: 0xD0E7, //HANGUL SYLLABLE THIEUTH AE RIEULPIEUP - 0xB58A: 0xD0E8, //HANGUL SYLLABLE THIEUTH AE RIEULSIOS - 0xB58B: 0xD0E9, //HANGUL SYLLABLE THIEUTH AE RIEULTHIEUTH - 0xB58C: 0xD0EA, //HANGUL SYLLABLE THIEUTH AE RIEULPHIEUPH - 0xB58D: 0xD0EB, //HANGUL SYLLABLE THIEUTH AE RIEULHIEUH - 0xB58E: 0xD0EE, //HANGUL SYLLABLE THIEUTH AE PIEUPSIOS - 0xB58F: 0xD0F2, //HANGUL SYLLABLE THIEUTH AE CIEUC - 0xB590: 0xD0F3, //HANGUL SYLLABLE THIEUTH AE CHIEUCH - 0xB591: 0xD0F4, //HANGUL SYLLABLE THIEUTH AE KHIEUKH - 0xB592: 0xD0F5, //HANGUL SYLLABLE THIEUTH AE THIEUTH - 0xB593: 0xD0F6, //HANGUL SYLLABLE THIEUTH AE PHIEUPH - 0xB594: 0xD0F7, //HANGUL SYLLABLE THIEUTH AE HIEUH - 0xB595: 0xD0F9, //HANGUL SYLLABLE THIEUTH YA KIYEOK - 0xB596: 0xD0FA, //HANGUL SYLLABLE THIEUTH YA SSANGKIYEOK - 0xB597: 0xD0FB, //HANGUL SYLLABLE THIEUTH YA KIYEOKSIOS - 0xB598: 0xD0FC, //HANGUL SYLLABLE THIEUTH YA NIEUN - 0xB599: 0xD0FD, //HANGUL SYLLABLE THIEUTH YA NIEUNCIEUC - 0xB59A: 0xD0FE, //HANGUL SYLLABLE THIEUTH YA NIEUNHIEUH - 0xB59B: 0xD0FF, //HANGUL SYLLABLE THIEUTH YA TIKEUT - 0xB59C: 0xD100, //HANGUL SYLLABLE THIEUTH YA RIEUL - 0xB59D: 0xD101, //HANGUL SYLLABLE THIEUTH YA RIEULKIYEOK - 0xB59E: 0xD102, //HANGUL SYLLABLE THIEUTH YA RIEULMIEUM - 0xB59F: 0xD103, //HANGUL SYLLABLE THIEUTH YA RIEULPIEUP - 0xB5A0: 0xD104, //HANGUL SYLLABLE THIEUTH YA RIEULSIOS - 0xB5A1: 0xB367, //HANGUL SYLLABLE TIKEUT EO SIOS - 0xB5A2: 0xB369, //HANGUL SYLLABLE TIKEUT EO IEUNG - 0xB5A3: 0xB36B, //HANGUL SYLLABLE TIKEUT EO CHIEUCH - 0xB5A4: 0xB36E, //HANGUL SYLLABLE TIKEUT EO PHIEUPH - 0xB5A5: 0xB370, //HANGUL SYLLABLE TIKEUT E - 0xB5A6: 0xB371, //HANGUL SYLLABLE TIKEUT E KIYEOK - 0xB5A7: 0xB374, //HANGUL SYLLABLE TIKEUT E NIEUN - 0xB5A8: 0xB378, //HANGUL SYLLABLE TIKEUT E RIEUL - 0xB5A9: 0xB380, //HANGUL SYLLABLE TIKEUT E MIEUM - 0xB5AA: 0xB381, //HANGUL SYLLABLE TIKEUT E PIEUP - 0xB5AB: 0xB383, //HANGUL SYLLABLE TIKEUT E SIOS - 0xB5AC: 0xB384, //HANGUL SYLLABLE TIKEUT E SSANGSIOS - 0xB5AD: 0xB385, //HANGUL SYLLABLE TIKEUT E IEUNG - 0xB5AE: 0xB38C, //HANGUL SYLLABLE TIKEUT YEO - 0xB5AF: 0xB390, //HANGUL SYLLABLE TIKEUT YEO NIEUN - 0xB5B0: 0xB394, //HANGUL SYLLABLE TIKEUT YEO RIEUL - 0xB5B1: 0xB3A0, //HANGUL SYLLABLE TIKEUT YEO SSANGSIOS - 0xB5B2: 0xB3A1, //HANGUL SYLLABLE TIKEUT YEO IEUNG - 0xB5B3: 0xB3A8, //HANGUL SYLLABLE TIKEUT YE - 0xB5B4: 0xB3AC, //HANGUL SYLLABLE TIKEUT YE NIEUN - 0xB5B5: 0xB3C4, //HANGUL SYLLABLE TIKEUT O - 0xB5B6: 0xB3C5, //HANGUL SYLLABLE TIKEUT O KIYEOK - 0xB5B7: 0xB3C8, //HANGUL SYLLABLE TIKEUT O NIEUN - 0xB5B8: 0xB3CB, //HANGUL SYLLABLE TIKEUT O TIKEUT - 0xB5B9: 0xB3CC, //HANGUL SYLLABLE TIKEUT O RIEUL - 0xB5BA: 0xB3CE, //HANGUL SYLLABLE TIKEUT O RIEULMIEUM - 0xB5BB: 0xB3D0, //HANGUL SYLLABLE TIKEUT O RIEULSIOS - 0xB5BC: 0xB3D4, //HANGUL SYLLABLE TIKEUT O MIEUM - 0xB5BD: 0xB3D5, //HANGUL SYLLABLE TIKEUT O PIEUP - 0xB5BE: 0xB3D7, //HANGUL SYLLABLE TIKEUT O SIOS - 0xB5BF: 0xB3D9, //HANGUL SYLLABLE TIKEUT O IEUNG - 0xB5C0: 0xB3DB, //HANGUL SYLLABLE TIKEUT O CHIEUCH - 0xB5C1: 0xB3DD, //HANGUL SYLLABLE TIKEUT O THIEUTH - 0xB5C2: 0xB3E0, //HANGUL SYLLABLE TIKEUT WA - 0xB5C3: 0xB3E4, //HANGUL SYLLABLE TIKEUT WA NIEUN - 0xB5C4: 0xB3E8, //HANGUL SYLLABLE TIKEUT WA RIEUL - 0xB5C5: 0xB3FC, //HANGUL SYLLABLE TIKEUT WAE - 0xB5C6: 0xB410, //HANGUL SYLLABLE TIKEUT WAE SSANGSIOS - 0xB5C7: 0xB418, //HANGUL SYLLABLE TIKEUT OE - 0xB5C8: 0xB41C, //HANGUL SYLLABLE TIKEUT OE NIEUN - 0xB5C9: 0xB420, //HANGUL SYLLABLE TIKEUT OE RIEUL - 0xB5CA: 0xB428, //HANGUL SYLLABLE TIKEUT OE MIEUM - 0xB5CB: 0xB429, //HANGUL SYLLABLE TIKEUT OE PIEUP - 0xB5CC: 0xB42B, //HANGUL SYLLABLE TIKEUT OE SIOS - 0xB5CD: 0xB434, //HANGUL SYLLABLE TIKEUT YO - 0xB5CE: 0xB450, //HANGUL SYLLABLE TIKEUT U - 0xB5CF: 0xB451, //HANGUL SYLLABLE TIKEUT U KIYEOK - 0xB5D0: 0xB454, //HANGUL SYLLABLE TIKEUT U NIEUN - 0xB5D1: 0xB458, //HANGUL SYLLABLE TIKEUT U RIEUL - 0xB5D2: 0xB460, //HANGUL SYLLABLE TIKEUT U MIEUM - 0xB5D3: 0xB461, //HANGUL SYLLABLE TIKEUT U PIEUP - 0xB5D4: 0xB463, //HANGUL SYLLABLE TIKEUT U SIOS - 0xB5D5: 0xB465, //HANGUL SYLLABLE TIKEUT U IEUNG - 0xB5D6: 0xB46C, //HANGUL SYLLABLE TIKEUT WEO - 0xB5D7: 0xB480, //HANGUL SYLLABLE TIKEUT WEO SSANGSIOS - 0xB5D8: 0xB488, //HANGUL SYLLABLE TIKEUT WE - 0xB5D9: 0xB49D, //HANGUL SYLLABLE TIKEUT WE IEUNG - 0xB5DA: 0xB4A4, //HANGUL SYLLABLE TIKEUT WI - 0xB5DB: 0xB4A8, //HANGUL SYLLABLE TIKEUT WI NIEUN - 0xB5DC: 0xB4AC, //HANGUL SYLLABLE TIKEUT WI RIEUL - 0xB5DD: 0xB4B5, //HANGUL SYLLABLE TIKEUT WI PIEUP - 0xB5DE: 0xB4B7, //HANGUL SYLLABLE TIKEUT WI SIOS - 0xB5DF: 0xB4B9, //HANGUL SYLLABLE TIKEUT WI IEUNG - 0xB5E0: 0xB4C0, //HANGUL SYLLABLE TIKEUT YU - 0xB5E1: 0xB4C4, //HANGUL SYLLABLE TIKEUT YU NIEUN - 0xB5E2: 0xB4C8, //HANGUL SYLLABLE TIKEUT YU RIEUL - 0xB5E3: 0xB4D0, //HANGUL SYLLABLE TIKEUT YU MIEUM - 0xB5E4: 0xB4D5, //HANGUL SYLLABLE TIKEUT YU IEUNG - 0xB5E5: 0xB4DC, //HANGUL SYLLABLE TIKEUT EU - 0xB5E6: 0xB4DD, //HANGUL SYLLABLE TIKEUT EU KIYEOK - 0xB5E7: 0xB4E0, //HANGUL SYLLABLE TIKEUT EU NIEUN - 0xB5E8: 0xB4E3, //HANGUL SYLLABLE TIKEUT EU TIKEUT - 0xB5E9: 0xB4E4, //HANGUL SYLLABLE TIKEUT EU RIEUL - 0xB5EA: 0xB4E6, //HANGUL SYLLABLE TIKEUT EU RIEULMIEUM - 0xB5EB: 0xB4EC, //HANGUL SYLLABLE TIKEUT EU MIEUM - 0xB5EC: 0xB4ED, //HANGUL SYLLABLE TIKEUT EU PIEUP - 0xB5ED: 0xB4EF, //HANGUL SYLLABLE TIKEUT EU SIOS - 0xB5EE: 0xB4F1, //HANGUL SYLLABLE TIKEUT EU IEUNG - 0xB5EF: 0xB4F8, //HANGUL SYLLABLE TIKEUT YI - 0xB5F0: 0xB514, //HANGUL SYLLABLE TIKEUT I - 0xB5F1: 0xB515, //HANGUL SYLLABLE TIKEUT I KIYEOK - 0xB5F2: 0xB518, //HANGUL SYLLABLE TIKEUT I NIEUN - 0xB5F3: 0xB51B, //HANGUL SYLLABLE TIKEUT I TIKEUT - 0xB5F4: 0xB51C, //HANGUL SYLLABLE TIKEUT I RIEUL - 0xB5F5: 0xB524, //HANGUL SYLLABLE TIKEUT I MIEUM - 0xB5F6: 0xB525, //HANGUL SYLLABLE TIKEUT I PIEUP - 0xB5F7: 0xB527, //HANGUL SYLLABLE TIKEUT I SIOS - 0xB5F8: 0xB528, //HANGUL SYLLABLE TIKEUT I SSANGSIOS - 0xB5F9: 0xB529, //HANGUL SYLLABLE TIKEUT I IEUNG - 0xB5FA: 0xB52A, //HANGUL SYLLABLE TIKEUT I CIEUC - 0xB5FB: 0xB530, //HANGUL SYLLABLE SSANGTIKEUT A - 0xB5FC: 0xB531, //HANGUL SYLLABLE SSANGTIKEUT A KIYEOK - 0xB5FD: 0xB534, //HANGUL SYLLABLE SSANGTIKEUT A NIEUN - 0xB5FE: 0xB538, //HANGUL SYLLABLE SSANGTIKEUT A RIEUL - 0xB641: 0xD105, //HANGUL SYLLABLE THIEUTH YA RIEULTHIEUTH - 0xB642: 0xD106, //HANGUL SYLLABLE THIEUTH YA RIEULPHIEUPH - 0xB643: 0xD107, //HANGUL SYLLABLE THIEUTH YA RIEULHIEUH - 0xB644: 0xD108, //HANGUL SYLLABLE THIEUTH YA MIEUM - 0xB645: 0xD109, //HANGUL SYLLABLE THIEUTH YA PIEUP - 0xB646: 0xD10A, //HANGUL SYLLABLE THIEUTH YA PIEUPSIOS - 0xB647: 0xD10B, //HANGUL SYLLABLE THIEUTH YA SIOS - 0xB648: 0xD10C, //HANGUL SYLLABLE THIEUTH YA SSANGSIOS - 0xB649: 0xD10E, //HANGUL SYLLABLE THIEUTH YA CIEUC - 0xB64A: 0xD10F, //HANGUL SYLLABLE THIEUTH YA CHIEUCH - 0xB64B: 0xD110, //HANGUL SYLLABLE THIEUTH YA KHIEUKH - 0xB64C: 0xD111, //HANGUL SYLLABLE THIEUTH YA THIEUTH - 0xB64D: 0xD112, //HANGUL SYLLABLE THIEUTH YA PHIEUPH - 0xB64E: 0xD113, //HANGUL SYLLABLE THIEUTH YA HIEUH - 0xB64F: 0xD114, //HANGUL SYLLABLE THIEUTH YAE - 0xB650: 0xD115, //HANGUL SYLLABLE THIEUTH YAE KIYEOK - 0xB651: 0xD116, //HANGUL SYLLABLE THIEUTH YAE SSANGKIYEOK - 0xB652: 0xD117, //HANGUL SYLLABLE THIEUTH YAE KIYEOKSIOS - 0xB653: 0xD118, //HANGUL SYLLABLE THIEUTH YAE NIEUN - 0xB654: 0xD119, //HANGUL SYLLABLE THIEUTH YAE NIEUNCIEUC - 0xB655: 0xD11A, //HANGUL SYLLABLE THIEUTH YAE NIEUNHIEUH - 0xB656: 0xD11B, //HANGUL SYLLABLE THIEUTH YAE TIKEUT - 0xB657: 0xD11C, //HANGUL SYLLABLE THIEUTH YAE RIEUL - 0xB658: 0xD11D, //HANGUL SYLLABLE THIEUTH YAE RIEULKIYEOK - 0xB659: 0xD11E, //HANGUL SYLLABLE THIEUTH YAE RIEULMIEUM - 0xB65A: 0xD11F, //HANGUL SYLLABLE THIEUTH YAE RIEULPIEUP - 0xB661: 0xD120, //HANGUL SYLLABLE THIEUTH YAE RIEULSIOS - 0xB662: 0xD121, //HANGUL SYLLABLE THIEUTH YAE RIEULTHIEUTH - 0xB663: 0xD122, //HANGUL SYLLABLE THIEUTH YAE RIEULPHIEUPH - 0xB664: 0xD123, //HANGUL SYLLABLE THIEUTH YAE RIEULHIEUH - 0xB665: 0xD124, //HANGUL SYLLABLE THIEUTH YAE MIEUM - 0xB666: 0xD125, //HANGUL SYLLABLE THIEUTH YAE PIEUP - 0xB667: 0xD126, //HANGUL SYLLABLE THIEUTH YAE PIEUPSIOS - 0xB668: 0xD127, //HANGUL SYLLABLE THIEUTH YAE SIOS - 0xB669: 0xD128, //HANGUL SYLLABLE THIEUTH YAE SSANGSIOS - 0xB66A: 0xD129, //HANGUL SYLLABLE THIEUTH YAE IEUNG - 0xB66B: 0xD12A, //HANGUL SYLLABLE THIEUTH YAE CIEUC - 0xB66C: 0xD12B, //HANGUL SYLLABLE THIEUTH YAE CHIEUCH - 0xB66D: 0xD12C, //HANGUL SYLLABLE THIEUTH YAE KHIEUKH - 0xB66E: 0xD12D, //HANGUL SYLLABLE THIEUTH YAE THIEUTH - 0xB66F: 0xD12E, //HANGUL SYLLABLE THIEUTH YAE PHIEUPH - 0xB670: 0xD12F, //HANGUL SYLLABLE THIEUTH YAE HIEUH - 0xB671: 0xD132, //HANGUL SYLLABLE THIEUTH EO SSANGKIYEOK - 0xB672: 0xD133, //HANGUL SYLLABLE THIEUTH EO KIYEOKSIOS - 0xB673: 0xD135, //HANGUL SYLLABLE THIEUTH EO NIEUNCIEUC - 0xB674: 0xD136, //HANGUL SYLLABLE THIEUTH EO NIEUNHIEUH - 0xB675: 0xD137, //HANGUL SYLLABLE THIEUTH EO TIKEUT - 0xB676: 0xD139, //HANGUL SYLLABLE THIEUTH EO RIEULKIYEOK - 0xB677: 0xD13B, //HANGUL SYLLABLE THIEUTH EO RIEULPIEUP - 0xB678: 0xD13C, //HANGUL SYLLABLE THIEUTH EO RIEULSIOS - 0xB679: 0xD13D, //HANGUL SYLLABLE THIEUTH EO RIEULTHIEUTH - 0xB67A: 0xD13E, //HANGUL SYLLABLE THIEUTH EO RIEULPHIEUPH - 0xB681: 0xD13F, //HANGUL SYLLABLE THIEUTH EO RIEULHIEUH - 0xB682: 0xD142, //HANGUL SYLLABLE THIEUTH EO PIEUPSIOS - 0xB683: 0xD146, //HANGUL SYLLABLE THIEUTH EO CIEUC - 0xB684: 0xD147, //HANGUL SYLLABLE THIEUTH EO CHIEUCH - 0xB685: 0xD148, //HANGUL SYLLABLE THIEUTH EO KHIEUKH - 0xB686: 0xD149, //HANGUL SYLLABLE THIEUTH EO THIEUTH - 0xB687: 0xD14A, //HANGUL SYLLABLE THIEUTH EO PHIEUPH - 0xB688: 0xD14B, //HANGUL SYLLABLE THIEUTH EO HIEUH - 0xB689: 0xD14E, //HANGUL SYLLABLE THIEUTH E SSANGKIYEOK - 0xB68A: 0xD14F, //HANGUL SYLLABLE THIEUTH E KIYEOKSIOS - 0xB68B: 0xD151, //HANGUL SYLLABLE THIEUTH E NIEUNCIEUC - 0xB68C: 0xD152, //HANGUL SYLLABLE THIEUTH E NIEUNHIEUH - 0xB68D: 0xD153, //HANGUL SYLLABLE THIEUTH E TIKEUT - 0xB68E: 0xD155, //HANGUL SYLLABLE THIEUTH E RIEULKIYEOK - 0xB68F: 0xD156, //HANGUL SYLLABLE THIEUTH E RIEULMIEUM - 0xB690: 0xD157, //HANGUL SYLLABLE THIEUTH E RIEULPIEUP - 0xB691: 0xD158, //HANGUL SYLLABLE THIEUTH E RIEULSIOS - 0xB692: 0xD159, //HANGUL SYLLABLE THIEUTH E RIEULTHIEUTH - 0xB693: 0xD15A, //HANGUL SYLLABLE THIEUTH E RIEULPHIEUPH - 0xB694: 0xD15B, //HANGUL SYLLABLE THIEUTH E RIEULHIEUH - 0xB695: 0xD15E, //HANGUL SYLLABLE THIEUTH E PIEUPSIOS - 0xB696: 0xD160, //HANGUL SYLLABLE THIEUTH E SSANGSIOS - 0xB697: 0xD162, //HANGUL SYLLABLE THIEUTH E CIEUC - 0xB698: 0xD163, //HANGUL SYLLABLE THIEUTH E CHIEUCH - 0xB699: 0xD164, //HANGUL SYLLABLE THIEUTH E KHIEUKH - 0xB69A: 0xD165, //HANGUL SYLLABLE THIEUTH E THIEUTH - 0xB69B: 0xD166, //HANGUL SYLLABLE THIEUTH E PHIEUPH - 0xB69C: 0xD167, //HANGUL SYLLABLE THIEUTH E HIEUH - 0xB69D: 0xD169, //HANGUL SYLLABLE THIEUTH YEO KIYEOK - 0xB69E: 0xD16A, //HANGUL SYLLABLE THIEUTH YEO SSANGKIYEOK - 0xB69F: 0xD16B, //HANGUL SYLLABLE THIEUTH YEO KIYEOKSIOS - 0xB6A0: 0xD16D, //HANGUL SYLLABLE THIEUTH YEO NIEUNCIEUC - 0xB6A1: 0xB540, //HANGUL SYLLABLE SSANGTIKEUT A MIEUM - 0xB6A2: 0xB541, //HANGUL SYLLABLE SSANGTIKEUT A PIEUP - 0xB6A3: 0xB543, //HANGUL SYLLABLE SSANGTIKEUT A SIOS - 0xB6A4: 0xB544, //HANGUL SYLLABLE SSANGTIKEUT A SSANGSIOS - 0xB6A5: 0xB545, //HANGUL SYLLABLE SSANGTIKEUT A IEUNG - 0xB6A6: 0xB54B, //HANGUL SYLLABLE SSANGTIKEUT A HIEUH - 0xB6A7: 0xB54C, //HANGUL SYLLABLE SSANGTIKEUT AE - 0xB6A8: 0xB54D, //HANGUL SYLLABLE SSANGTIKEUT AE KIYEOK - 0xB6A9: 0xB550, //HANGUL SYLLABLE SSANGTIKEUT AE NIEUN - 0xB6AA: 0xB554, //HANGUL SYLLABLE SSANGTIKEUT AE RIEUL - 0xB6AB: 0xB55C, //HANGUL SYLLABLE SSANGTIKEUT AE MIEUM - 0xB6AC: 0xB55D, //HANGUL SYLLABLE SSANGTIKEUT AE PIEUP - 0xB6AD: 0xB55F, //HANGUL SYLLABLE SSANGTIKEUT AE SIOS - 0xB6AE: 0xB560, //HANGUL SYLLABLE SSANGTIKEUT AE SSANGSIOS - 0xB6AF: 0xB561, //HANGUL SYLLABLE SSANGTIKEUT AE IEUNG - 0xB6B0: 0xB5A0, //HANGUL SYLLABLE SSANGTIKEUT EO - 0xB6B1: 0xB5A1, //HANGUL SYLLABLE SSANGTIKEUT EO KIYEOK - 0xB6B2: 0xB5A4, //HANGUL SYLLABLE SSANGTIKEUT EO NIEUN - 0xB6B3: 0xB5A8, //HANGUL SYLLABLE SSANGTIKEUT EO RIEUL - 0xB6B4: 0xB5AA, //HANGUL SYLLABLE SSANGTIKEUT EO RIEULMIEUM - 0xB6B5: 0xB5AB, //HANGUL SYLLABLE SSANGTIKEUT EO RIEULPIEUP - 0xB6B6: 0xB5B0, //HANGUL SYLLABLE SSANGTIKEUT EO MIEUM - 0xB6B7: 0xB5B1, //HANGUL SYLLABLE SSANGTIKEUT EO PIEUP - 0xB6B8: 0xB5B3, //HANGUL SYLLABLE SSANGTIKEUT EO SIOS - 0xB6B9: 0xB5B4, //HANGUL SYLLABLE SSANGTIKEUT EO SSANGSIOS - 0xB6BA: 0xB5B5, //HANGUL SYLLABLE SSANGTIKEUT EO IEUNG - 0xB6BB: 0xB5BB, //HANGUL SYLLABLE SSANGTIKEUT EO HIEUH - 0xB6BC: 0xB5BC, //HANGUL SYLLABLE SSANGTIKEUT E - 0xB6BD: 0xB5BD, //HANGUL SYLLABLE SSANGTIKEUT E KIYEOK - 0xB6BE: 0xB5C0, //HANGUL SYLLABLE SSANGTIKEUT E NIEUN - 0xB6BF: 0xB5C4, //HANGUL SYLLABLE SSANGTIKEUT E RIEUL - 0xB6C0: 0xB5CC, //HANGUL SYLLABLE SSANGTIKEUT E MIEUM - 0xB6C1: 0xB5CD, //HANGUL SYLLABLE SSANGTIKEUT E PIEUP - 0xB6C2: 0xB5CF, //HANGUL SYLLABLE SSANGTIKEUT E SIOS - 0xB6C3: 0xB5D0, //HANGUL SYLLABLE SSANGTIKEUT E SSANGSIOS - 0xB6C4: 0xB5D1, //HANGUL SYLLABLE SSANGTIKEUT E IEUNG - 0xB6C5: 0xB5D8, //HANGUL SYLLABLE SSANGTIKEUT YEO - 0xB6C6: 0xB5EC, //HANGUL SYLLABLE SSANGTIKEUT YEO SSANGSIOS - 0xB6C7: 0xB610, //HANGUL SYLLABLE SSANGTIKEUT O - 0xB6C8: 0xB611, //HANGUL SYLLABLE SSANGTIKEUT O KIYEOK - 0xB6C9: 0xB614, //HANGUL SYLLABLE SSANGTIKEUT O NIEUN - 0xB6CA: 0xB618, //HANGUL SYLLABLE SSANGTIKEUT O RIEUL - 0xB6CB: 0xB625, //HANGUL SYLLABLE SSANGTIKEUT O IEUNG - 0xB6CC: 0xB62C, //HANGUL SYLLABLE SSANGTIKEUT WA - 0xB6CD: 0xB634, //HANGUL SYLLABLE SSANGTIKEUT WA RIEUL - 0xB6CE: 0xB648, //HANGUL SYLLABLE SSANGTIKEUT WAE - 0xB6CF: 0xB664, //HANGUL SYLLABLE SSANGTIKEUT OE - 0xB6D0: 0xB668, //HANGUL SYLLABLE SSANGTIKEUT OE NIEUN - 0xB6D1: 0xB69C, //HANGUL SYLLABLE SSANGTIKEUT U - 0xB6D2: 0xB69D, //HANGUL SYLLABLE SSANGTIKEUT U KIYEOK - 0xB6D3: 0xB6A0, //HANGUL SYLLABLE SSANGTIKEUT U NIEUN - 0xB6D4: 0xB6A4, //HANGUL SYLLABLE SSANGTIKEUT U RIEUL - 0xB6D5: 0xB6AB, //HANGUL SYLLABLE SSANGTIKEUT U RIEULHIEUH - 0xB6D6: 0xB6AC, //HANGUL SYLLABLE SSANGTIKEUT U MIEUM - 0xB6D7: 0xB6B1, //HANGUL SYLLABLE SSANGTIKEUT U IEUNG - 0xB6D8: 0xB6D4, //HANGUL SYLLABLE SSANGTIKEUT WE - 0xB6D9: 0xB6F0, //HANGUL SYLLABLE SSANGTIKEUT WI - 0xB6DA: 0xB6F4, //HANGUL SYLLABLE SSANGTIKEUT WI NIEUN - 0xB6DB: 0xB6F8, //HANGUL SYLLABLE SSANGTIKEUT WI RIEUL - 0xB6DC: 0xB700, //HANGUL SYLLABLE SSANGTIKEUT WI MIEUM - 0xB6DD: 0xB701, //HANGUL SYLLABLE SSANGTIKEUT WI PIEUP - 0xB6DE: 0xB705, //HANGUL SYLLABLE SSANGTIKEUT WI IEUNG - 0xB6DF: 0xB728, //HANGUL SYLLABLE SSANGTIKEUT EU - 0xB6E0: 0xB729, //HANGUL SYLLABLE SSANGTIKEUT EU KIYEOK - 0xB6E1: 0xB72C, //HANGUL SYLLABLE SSANGTIKEUT EU NIEUN - 0xB6E2: 0xB72F, //HANGUL SYLLABLE SSANGTIKEUT EU TIKEUT - 0xB6E3: 0xB730, //HANGUL SYLLABLE SSANGTIKEUT EU RIEUL - 0xB6E4: 0xB738, //HANGUL SYLLABLE SSANGTIKEUT EU MIEUM - 0xB6E5: 0xB739, //HANGUL SYLLABLE SSANGTIKEUT EU PIEUP - 0xB6E6: 0xB73B, //HANGUL SYLLABLE SSANGTIKEUT EU SIOS - 0xB6E7: 0xB744, //HANGUL SYLLABLE SSANGTIKEUT YI - 0xB6E8: 0xB748, //HANGUL SYLLABLE SSANGTIKEUT YI NIEUN - 0xB6E9: 0xB74C, //HANGUL SYLLABLE SSANGTIKEUT YI RIEUL - 0xB6EA: 0xB754, //HANGUL SYLLABLE SSANGTIKEUT YI MIEUM - 0xB6EB: 0xB755, //HANGUL SYLLABLE SSANGTIKEUT YI PIEUP - 0xB6EC: 0xB760, //HANGUL SYLLABLE SSANGTIKEUT I - 0xB6ED: 0xB764, //HANGUL SYLLABLE SSANGTIKEUT I NIEUN - 0xB6EE: 0xB768, //HANGUL SYLLABLE SSANGTIKEUT I RIEUL - 0xB6EF: 0xB770, //HANGUL SYLLABLE SSANGTIKEUT I MIEUM - 0xB6F0: 0xB771, //HANGUL SYLLABLE SSANGTIKEUT I PIEUP - 0xB6F1: 0xB773, //HANGUL SYLLABLE SSANGTIKEUT I SIOS - 0xB6F2: 0xB775, //HANGUL SYLLABLE SSANGTIKEUT I IEUNG - 0xB6F3: 0xB77C, //HANGUL SYLLABLE RIEUL A - 0xB6F4: 0xB77D, //HANGUL SYLLABLE RIEUL A KIYEOK - 0xB6F5: 0xB780, //HANGUL SYLLABLE RIEUL A NIEUN - 0xB6F6: 0xB784, //HANGUL SYLLABLE RIEUL A RIEUL - 0xB6F7: 0xB78C, //HANGUL SYLLABLE RIEUL A MIEUM - 0xB6F8: 0xB78D, //HANGUL SYLLABLE RIEUL A PIEUP - 0xB6F9: 0xB78F, //HANGUL SYLLABLE RIEUL A SIOS - 0xB6FA: 0xB790, //HANGUL SYLLABLE RIEUL A SSANGSIOS - 0xB6FB: 0xB791, //HANGUL SYLLABLE RIEUL A IEUNG - 0xB6FC: 0xB792, //HANGUL SYLLABLE RIEUL A CIEUC - 0xB6FD: 0xB796, //HANGUL SYLLABLE RIEUL A PHIEUPH - 0xB6FE: 0xB797, //HANGUL SYLLABLE RIEUL A HIEUH - 0xB741: 0xD16E, //HANGUL SYLLABLE THIEUTH YEO NIEUNHIEUH - 0xB742: 0xD16F, //HANGUL SYLLABLE THIEUTH YEO TIKEUT - 0xB743: 0xD170, //HANGUL SYLLABLE THIEUTH YEO RIEUL - 0xB744: 0xD171, //HANGUL SYLLABLE THIEUTH YEO RIEULKIYEOK - 0xB745: 0xD172, //HANGUL SYLLABLE THIEUTH YEO RIEULMIEUM - 0xB746: 0xD173, //HANGUL SYLLABLE THIEUTH YEO RIEULPIEUP - 0xB747: 0xD174, //HANGUL SYLLABLE THIEUTH YEO RIEULSIOS - 0xB748: 0xD175, //HANGUL SYLLABLE THIEUTH YEO RIEULTHIEUTH - 0xB749: 0xD176, //HANGUL SYLLABLE THIEUTH YEO RIEULPHIEUPH - 0xB74A: 0xD177, //HANGUL SYLLABLE THIEUTH YEO RIEULHIEUH - 0xB74B: 0xD178, //HANGUL SYLLABLE THIEUTH YEO MIEUM - 0xB74C: 0xD179, //HANGUL SYLLABLE THIEUTH YEO PIEUP - 0xB74D: 0xD17A, //HANGUL SYLLABLE THIEUTH YEO PIEUPSIOS - 0xB74E: 0xD17B, //HANGUL SYLLABLE THIEUTH YEO SIOS - 0xB74F: 0xD17D, //HANGUL SYLLABLE THIEUTH YEO IEUNG - 0xB750: 0xD17E, //HANGUL SYLLABLE THIEUTH YEO CIEUC - 0xB751: 0xD17F, //HANGUL SYLLABLE THIEUTH YEO CHIEUCH - 0xB752: 0xD180, //HANGUL SYLLABLE THIEUTH YEO KHIEUKH - 0xB753: 0xD181, //HANGUL SYLLABLE THIEUTH YEO THIEUTH - 0xB754: 0xD182, //HANGUL SYLLABLE THIEUTH YEO PHIEUPH - 0xB755: 0xD183, //HANGUL SYLLABLE THIEUTH YEO HIEUH - 0xB756: 0xD185, //HANGUL SYLLABLE THIEUTH YE KIYEOK - 0xB757: 0xD186, //HANGUL SYLLABLE THIEUTH YE SSANGKIYEOK - 0xB758: 0xD187, //HANGUL SYLLABLE THIEUTH YE KIYEOKSIOS - 0xB759: 0xD189, //HANGUL SYLLABLE THIEUTH YE NIEUNCIEUC - 0xB75A: 0xD18A, //HANGUL SYLLABLE THIEUTH YE NIEUNHIEUH - 0xB761: 0xD18B, //HANGUL SYLLABLE THIEUTH YE TIKEUT - 0xB762: 0xD18C, //HANGUL SYLLABLE THIEUTH YE RIEUL - 0xB763: 0xD18D, //HANGUL SYLLABLE THIEUTH YE RIEULKIYEOK - 0xB764: 0xD18E, //HANGUL SYLLABLE THIEUTH YE RIEULMIEUM - 0xB765: 0xD18F, //HANGUL SYLLABLE THIEUTH YE RIEULPIEUP - 0xB766: 0xD190, //HANGUL SYLLABLE THIEUTH YE RIEULSIOS - 0xB767: 0xD191, //HANGUL SYLLABLE THIEUTH YE RIEULTHIEUTH - 0xB768: 0xD192, //HANGUL SYLLABLE THIEUTH YE RIEULPHIEUPH - 0xB769: 0xD193, //HANGUL SYLLABLE THIEUTH YE RIEULHIEUH - 0xB76A: 0xD194, //HANGUL SYLLABLE THIEUTH YE MIEUM - 0xB76B: 0xD195, //HANGUL SYLLABLE THIEUTH YE PIEUP - 0xB76C: 0xD196, //HANGUL SYLLABLE THIEUTH YE PIEUPSIOS - 0xB76D: 0xD197, //HANGUL SYLLABLE THIEUTH YE SIOS - 0xB76E: 0xD198, //HANGUL SYLLABLE THIEUTH YE SSANGSIOS - 0xB76F: 0xD199, //HANGUL SYLLABLE THIEUTH YE IEUNG - 0xB770: 0xD19A, //HANGUL SYLLABLE THIEUTH YE CIEUC - 0xB771: 0xD19B, //HANGUL SYLLABLE THIEUTH YE CHIEUCH - 0xB772: 0xD19C, //HANGUL SYLLABLE THIEUTH YE KHIEUKH - 0xB773: 0xD19D, //HANGUL SYLLABLE THIEUTH YE THIEUTH - 0xB774: 0xD19E, //HANGUL SYLLABLE THIEUTH YE PHIEUPH - 0xB775: 0xD19F, //HANGUL SYLLABLE THIEUTH YE HIEUH - 0xB776: 0xD1A2, //HANGUL SYLLABLE THIEUTH O SSANGKIYEOK - 0xB777: 0xD1A3, //HANGUL SYLLABLE THIEUTH O KIYEOKSIOS - 0xB778: 0xD1A5, //HANGUL SYLLABLE THIEUTH O NIEUNCIEUC - 0xB779: 0xD1A6, //HANGUL SYLLABLE THIEUTH O NIEUNHIEUH - 0xB77A: 0xD1A7, //HANGUL SYLLABLE THIEUTH O TIKEUT - 0xB781: 0xD1A9, //HANGUL SYLLABLE THIEUTH O RIEULKIYEOK - 0xB782: 0xD1AA, //HANGUL SYLLABLE THIEUTH O RIEULMIEUM - 0xB783: 0xD1AB, //HANGUL SYLLABLE THIEUTH O RIEULPIEUP - 0xB784: 0xD1AC, //HANGUL SYLLABLE THIEUTH O RIEULSIOS - 0xB785: 0xD1AD, //HANGUL SYLLABLE THIEUTH O RIEULTHIEUTH - 0xB786: 0xD1AE, //HANGUL SYLLABLE THIEUTH O RIEULPHIEUPH - 0xB787: 0xD1AF, //HANGUL SYLLABLE THIEUTH O RIEULHIEUH - 0xB788: 0xD1B2, //HANGUL SYLLABLE THIEUTH O PIEUPSIOS - 0xB789: 0xD1B4, //HANGUL SYLLABLE THIEUTH O SSANGSIOS - 0xB78A: 0xD1B6, //HANGUL SYLLABLE THIEUTH O CIEUC - 0xB78B: 0xD1B7, //HANGUL SYLLABLE THIEUTH O CHIEUCH - 0xB78C: 0xD1B8, //HANGUL SYLLABLE THIEUTH O KHIEUKH - 0xB78D: 0xD1B9, //HANGUL SYLLABLE THIEUTH O THIEUTH - 0xB78E: 0xD1BB, //HANGUL SYLLABLE THIEUTH O HIEUH - 0xB78F: 0xD1BD, //HANGUL SYLLABLE THIEUTH WA KIYEOK - 0xB790: 0xD1BE, //HANGUL SYLLABLE THIEUTH WA SSANGKIYEOK - 0xB791: 0xD1BF, //HANGUL SYLLABLE THIEUTH WA KIYEOKSIOS - 0xB792: 0xD1C1, //HANGUL SYLLABLE THIEUTH WA NIEUNCIEUC - 0xB793: 0xD1C2, //HANGUL SYLLABLE THIEUTH WA NIEUNHIEUH - 0xB794: 0xD1C3, //HANGUL SYLLABLE THIEUTH WA TIKEUT - 0xB795: 0xD1C4, //HANGUL SYLLABLE THIEUTH WA RIEUL - 0xB796: 0xD1C5, //HANGUL SYLLABLE THIEUTH WA RIEULKIYEOK - 0xB797: 0xD1C6, //HANGUL SYLLABLE THIEUTH WA RIEULMIEUM - 0xB798: 0xD1C7, //HANGUL SYLLABLE THIEUTH WA RIEULPIEUP - 0xB799: 0xD1C8, //HANGUL SYLLABLE THIEUTH WA RIEULSIOS - 0xB79A: 0xD1C9, //HANGUL SYLLABLE THIEUTH WA RIEULTHIEUTH - 0xB79B: 0xD1CA, //HANGUL SYLLABLE THIEUTH WA RIEULPHIEUPH - 0xB79C: 0xD1CB, //HANGUL SYLLABLE THIEUTH WA RIEULHIEUH - 0xB79D: 0xD1CC, //HANGUL SYLLABLE THIEUTH WA MIEUM - 0xB79E: 0xD1CD, //HANGUL SYLLABLE THIEUTH WA PIEUP - 0xB79F: 0xD1CE, //HANGUL SYLLABLE THIEUTH WA PIEUPSIOS - 0xB7A0: 0xD1CF, //HANGUL SYLLABLE THIEUTH WA SIOS - 0xB7A1: 0xB798, //HANGUL SYLLABLE RIEUL AE - 0xB7A2: 0xB799, //HANGUL SYLLABLE RIEUL AE KIYEOK - 0xB7A3: 0xB79C, //HANGUL SYLLABLE RIEUL AE NIEUN - 0xB7A4: 0xB7A0, //HANGUL SYLLABLE RIEUL AE RIEUL - 0xB7A5: 0xB7A8, //HANGUL SYLLABLE RIEUL AE MIEUM - 0xB7A6: 0xB7A9, //HANGUL SYLLABLE RIEUL AE PIEUP - 0xB7A7: 0xB7AB, //HANGUL SYLLABLE RIEUL AE SIOS - 0xB7A8: 0xB7AC, //HANGUL SYLLABLE RIEUL AE SSANGSIOS - 0xB7A9: 0xB7AD, //HANGUL SYLLABLE RIEUL AE IEUNG - 0xB7AA: 0xB7B4, //HANGUL SYLLABLE RIEUL YA - 0xB7AB: 0xB7B5, //HANGUL SYLLABLE RIEUL YA KIYEOK - 0xB7AC: 0xB7B8, //HANGUL SYLLABLE RIEUL YA NIEUN - 0xB7AD: 0xB7C7, //HANGUL SYLLABLE RIEUL YA SIOS - 0xB7AE: 0xB7C9, //HANGUL SYLLABLE RIEUL YA IEUNG - 0xB7AF: 0xB7EC, //HANGUL SYLLABLE RIEUL EO - 0xB7B0: 0xB7ED, //HANGUL SYLLABLE RIEUL EO KIYEOK - 0xB7B1: 0xB7F0, //HANGUL SYLLABLE RIEUL EO NIEUN - 0xB7B2: 0xB7F4, //HANGUL SYLLABLE RIEUL EO RIEUL - 0xB7B3: 0xB7FC, //HANGUL SYLLABLE RIEUL EO MIEUM - 0xB7B4: 0xB7FD, //HANGUL SYLLABLE RIEUL EO PIEUP - 0xB7B5: 0xB7FF, //HANGUL SYLLABLE RIEUL EO SIOS - 0xB7B6: 0xB800, //HANGUL SYLLABLE RIEUL EO SSANGSIOS - 0xB7B7: 0xB801, //HANGUL SYLLABLE RIEUL EO IEUNG - 0xB7B8: 0xB807, //HANGUL SYLLABLE RIEUL EO HIEUH - 0xB7B9: 0xB808, //HANGUL SYLLABLE RIEUL E - 0xB7BA: 0xB809, //HANGUL SYLLABLE RIEUL E KIYEOK - 0xB7BB: 0xB80C, //HANGUL SYLLABLE RIEUL E NIEUN - 0xB7BC: 0xB810, //HANGUL SYLLABLE RIEUL E RIEUL - 0xB7BD: 0xB818, //HANGUL SYLLABLE RIEUL E MIEUM - 0xB7BE: 0xB819, //HANGUL SYLLABLE RIEUL E PIEUP - 0xB7BF: 0xB81B, //HANGUL SYLLABLE RIEUL E SIOS - 0xB7C0: 0xB81D, //HANGUL SYLLABLE RIEUL E IEUNG - 0xB7C1: 0xB824, //HANGUL SYLLABLE RIEUL YEO - 0xB7C2: 0xB825, //HANGUL SYLLABLE RIEUL YEO KIYEOK - 0xB7C3: 0xB828, //HANGUL SYLLABLE RIEUL YEO NIEUN - 0xB7C4: 0xB82C, //HANGUL SYLLABLE RIEUL YEO RIEUL - 0xB7C5: 0xB834, //HANGUL SYLLABLE RIEUL YEO MIEUM - 0xB7C6: 0xB835, //HANGUL SYLLABLE RIEUL YEO PIEUP - 0xB7C7: 0xB837, //HANGUL SYLLABLE RIEUL YEO SIOS - 0xB7C8: 0xB838, //HANGUL SYLLABLE RIEUL YEO SSANGSIOS - 0xB7C9: 0xB839, //HANGUL SYLLABLE RIEUL YEO IEUNG - 0xB7CA: 0xB840, //HANGUL SYLLABLE RIEUL YE - 0xB7CB: 0xB844, //HANGUL SYLLABLE RIEUL YE NIEUN - 0xB7CC: 0xB851, //HANGUL SYLLABLE RIEUL YE PIEUP - 0xB7CD: 0xB853, //HANGUL SYLLABLE RIEUL YE SIOS - 0xB7CE: 0xB85C, //HANGUL SYLLABLE RIEUL O - 0xB7CF: 0xB85D, //HANGUL SYLLABLE RIEUL O KIYEOK - 0xB7D0: 0xB860, //HANGUL SYLLABLE RIEUL O NIEUN - 0xB7D1: 0xB864, //HANGUL SYLLABLE RIEUL O RIEUL - 0xB7D2: 0xB86C, //HANGUL SYLLABLE RIEUL O MIEUM - 0xB7D3: 0xB86D, //HANGUL SYLLABLE RIEUL O PIEUP - 0xB7D4: 0xB86F, //HANGUL SYLLABLE RIEUL O SIOS - 0xB7D5: 0xB871, //HANGUL SYLLABLE RIEUL O IEUNG - 0xB7D6: 0xB878, //HANGUL SYLLABLE RIEUL WA - 0xB7D7: 0xB87C, //HANGUL SYLLABLE RIEUL WA NIEUN - 0xB7D8: 0xB88D, //HANGUL SYLLABLE RIEUL WA IEUNG - 0xB7D9: 0xB8A8, //HANGUL SYLLABLE RIEUL WAE SSANGSIOS - 0xB7DA: 0xB8B0, //HANGUL SYLLABLE RIEUL OE - 0xB7DB: 0xB8B4, //HANGUL SYLLABLE RIEUL OE NIEUN - 0xB7DC: 0xB8B8, //HANGUL SYLLABLE RIEUL OE RIEUL - 0xB7DD: 0xB8C0, //HANGUL SYLLABLE RIEUL OE MIEUM - 0xB7DE: 0xB8C1, //HANGUL SYLLABLE RIEUL OE PIEUP - 0xB7DF: 0xB8C3, //HANGUL SYLLABLE RIEUL OE SIOS - 0xB7E0: 0xB8C5, //HANGUL SYLLABLE RIEUL OE IEUNG - 0xB7E1: 0xB8CC, //HANGUL SYLLABLE RIEUL YO - 0xB7E2: 0xB8D0, //HANGUL SYLLABLE RIEUL YO NIEUN - 0xB7E3: 0xB8D4, //HANGUL SYLLABLE RIEUL YO RIEUL - 0xB7E4: 0xB8DD, //HANGUL SYLLABLE RIEUL YO PIEUP - 0xB7E5: 0xB8DF, //HANGUL SYLLABLE RIEUL YO SIOS - 0xB7E6: 0xB8E1, //HANGUL SYLLABLE RIEUL YO IEUNG - 0xB7E7: 0xB8E8, //HANGUL SYLLABLE RIEUL U - 0xB7E8: 0xB8E9, //HANGUL SYLLABLE RIEUL U KIYEOK - 0xB7E9: 0xB8EC, //HANGUL SYLLABLE RIEUL U NIEUN - 0xB7EA: 0xB8F0, //HANGUL SYLLABLE RIEUL U RIEUL - 0xB7EB: 0xB8F8, //HANGUL SYLLABLE RIEUL U MIEUM - 0xB7EC: 0xB8F9, //HANGUL SYLLABLE RIEUL U PIEUP - 0xB7ED: 0xB8FB, //HANGUL SYLLABLE RIEUL U SIOS - 0xB7EE: 0xB8FD, //HANGUL SYLLABLE RIEUL U IEUNG - 0xB7EF: 0xB904, //HANGUL SYLLABLE RIEUL WEO - 0xB7F0: 0xB918, //HANGUL SYLLABLE RIEUL WEO SSANGSIOS - 0xB7F1: 0xB920, //HANGUL SYLLABLE RIEUL WE - 0xB7F2: 0xB93C, //HANGUL SYLLABLE RIEUL WI - 0xB7F3: 0xB93D, //HANGUL SYLLABLE RIEUL WI KIYEOK - 0xB7F4: 0xB940, //HANGUL SYLLABLE RIEUL WI NIEUN - 0xB7F5: 0xB944, //HANGUL SYLLABLE RIEUL WI RIEUL - 0xB7F6: 0xB94C, //HANGUL SYLLABLE RIEUL WI MIEUM - 0xB7F7: 0xB94F, //HANGUL SYLLABLE RIEUL WI SIOS - 0xB7F8: 0xB951, //HANGUL SYLLABLE RIEUL WI IEUNG - 0xB7F9: 0xB958, //HANGUL SYLLABLE RIEUL YU - 0xB7FA: 0xB959, //HANGUL SYLLABLE RIEUL YU KIYEOK - 0xB7FB: 0xB95C, //HANGUL SYLLABLE RIEUL YU NIEUN - 0xB7FC: 0xB960, //HANGUL SYLLABLE RIEUL YU RIEUL - 0xB7FD: 0xB968, //HANGUL SYLLABLE RIEUL YU MIEUM - 0xB7FE: 0xB969, //HANGUL SYLLABLE RIEUL YU PIEUP - 0xB841: 0xD1D0, //HANGUL SYLLABLE THIEUTH WA SSANGSIOS - 0xB842: 0xD1D1, //HANGUL SYLLABLE THIEUTH WA IEUNG - 0xB843: 0xD1D2, //HANGUL SYLLABLE THIEUTH WA CIEUC - 0xB844: 0xD1D3, //HANGUL SYLLABLE THIEUTH WA CHIEUCH - 0xB845: 0xD1D4, //HANGUL SYLLABLE THIEUTH WA KHIEUKH - 0xB846: 0xD1D5, //HANGUL SYLLABLE THIEUTH WA THIEUTH - 0xB847: 0xD1D6, //HANGUL SYLLABLE THIEUTH WA PHIEUPH - 0xB848: 0xD1D7, //HANGUL SYLLABLE THIEUTH WA HIEUH - 0xB849: 0xD1D9, //HANGUL SYLLABLE THIEUTH WAE KIYEOK - 0xB84A: 0xD1DA, //HANGUL SYLLABLE THIEUTH WAE SSANGKIYEOK - 0xB84B: 0xD1DB, //HANGUL SYLLABLE THIEUTH WAE KIYEOKSIOS - 0xB84C: 0xD1DC, //HANGUL SYLLABLE THIEUTH WAE NIEUN - 0xB84D: 0xD1DD, //HANGUL SYLLABLE THIEUTH WAE NIEUNCIEUC - 0xB84E: 0xD1DE, //HANGUL SYLLABLE THIEUTH WAE NIEUNHIEUH - 0xB84F: 0xD1DF, //HANGUL SYLLABLE THIEUTH WAE TIKEUT - 0xB850: 0xD1E0, //HANGUL SYLLABLE THIEUTH WAE RIEUL - 0xB851: 0xD1E1, //HANGUL SYLLABLE THIEUTH WAE RIEULKIYEOK - 0xB852: 0xD1E2, //HANGUL SYLLABLE THIEUTH WAE RIEULMIEUM - 0xB853: 0xD1E3, //HANGUL SYLLABLE THIEUTH WAE RIEULPIEUP - 0xB854: 0xD1E4, //HANGUL SYLLABLE THIEUTH WAE RIEULSIOS - 0xB855: 0xD1E5, //HANGUL SYLLABLE THIEUTH WAE RIEULTHIEUTH - 0xB856: 0xD1E6, //HANGUL SYLLABLE THIEUTH WAE RIEULPHIEUPH - 0xB857: 0xD1E7, //HANGUL SYLLABLE THIEUTH WAE RIEULHIEUH - 0xB858: 0xD1E8, //HANGUL SYLLABLE THIEUTH WAE MIEUM - 0xB859: 0xD1E9, //HANGUL SYLLABLE THIEUTH WAE PIEUP - 0xB85A: 0xD1EA, //HANGUL SYLLABLE THIEUTH WAE PIEUPSIOS - 0xB861: 0xD1EB, //HANGUL SYLLABLE THIEUTH WAE SIOS - 0xB862: 0xD1EC, //HANGUL SYLLABLE THIEUTH WAE SSANGSIOS - 0xB863: 0xD1ED, //HANGUL SYLLABLE THIEUTH WAE IEUNG - 0xB864: 0xD1EE, //HANGUL SYLLABLE THIEUTH WAE CIEUC - 0xB865: 0xD1EF, //HANGUL SYLLABLE THIEUTH WAE CHIEUCH - 0xB866: 0xD1F0, //HANGUL SYLLABLE THIEUTH WAE KHIEUKH - 0xB867: 0xD1F1, //HANGUL SYLLABLE THIEUTH WAE THIEUTH - 0xB868: 0xD1F2, //HANGUL SYLLABLE THIEUTH WAE PHIEUPH - 0xB869: 0xD1F3, //HANGUL SYLLABLE THIEUTH WAE HIEUH - 0xB86A: 0xD1F5, //HANGUL SYLLABLE THIEUTH OE KIYEOK - 0xB86B: 0xD1F6, //HANGUL SYLLABLE THIEUTH OE SSANGKIYEOK - 0xB86C: 0xD1F7, //HANGUL SYLLABLE THIEUTH OE KIYEOKSIOS - 0xB86D: 0xD1F9, //HANGUL SYLLABLE THIEUTH OE NIEUNCIEUC - 0xB86E: 0xD1FA, //HANGUL SYLLABLE THIEUTH OE NIEUNHIEUH - 0xB86F: 0xD1FB, //HANGUL SYLLABLE THIEUTH OE TIKEUT - 0xB870: 0xD1FC, //HANGUL SYLLABLE THIEUTH OE RIEUL - 0xB871: 0xD1FD, //HANGUL SYLLABLE THIEUTH OE RIEULKIYEOK - 0xB872: 0xD1FE, //HANGUL SYLLABLE THIEUTH OE RIEULMIEUM - 0xB873: 0xD1FF, //HANGUL SYLLABLE THIEUTH OE RIEULPIEUP - 0xB874: 0xD200, //HANGUL SYLLABLE THIEUTH OE RIEULSIOS - 0xB875: 0xD201, //HANGUL SYLLABLE THIEUTH OE RIEULTHIEUTH - 0xB876: 0xD202, //HANGUL SYLLABLE THIEUTH OE RIEULPHIEUPH - 0xB877: 0xD203, //HANGUL SYLLABLE THIEUTH OE RIEULHIEUH - 0xB878: 0xD204, //HANGUL SYLLABLE THIEUTH OE MIEUM - 0xB879: 0xD205, //HANGUL SYLLABLE THIEUTH OE PIEUP - 0xB87A: 0xD206, //HANGUL SYLLABLE THIEUTH OE PIEUPSIOS - 0xB881: 0xD208, //HANGUL SYLLABLE THIEUTH OE SSANGSIOS - 0xB882: 0xD20A, //HANGUL SYLLABLE THIEUTH OE CIEUC - 0xB883: 0xD20B, //HANGUL SYLLABLE THIEUTH OE CHIEUCH - 0xB884: 0xD20C, //HANGUL SYLLABLE THIEUTH OE KHIEUKH - 0xB885: 0xD20D, //HANGUL SYLLABLE THIEUTH OE THIEUTH - 0xB886: 0xD20E, //HANGUL SYLLABLE THIEUTH OE PHIEUPH - 0xB887: 0xD20F, //HANGUL SYLLABLE THIEUTH OE HIEUH - 0xB888: 0xD211, //HANGUL SYLLABLE THIEUTH YO KIYEOK - 0xB889: 0xD212, //HANGUL SYLLABLE THIEUTH YO SSANGKIYEOK - 0xB88A: 0xD213, //HANGUL SYLLABLE THIEUTH YO KIYEOKSIOS - 0xB88B: 0xD214, //HANGUL SYLLABLE THIEUTH YO NIEUN - 0xB88C: 0xD215, //HANGUL SYLLABLE THIEUTH YO NIEUNCIEUC - 0xB88D: 0xD216, //HANGUL SYLLABLE THIEUTH YO NIEUNHIEUH - 0xB88E: 0xD217, //HANGUL SYLLABLE THIEUTH YO TIKEUT - 0xB88F: 0xD218, //HANGUL SYLLABLE THIEUTH YO RIEUL - 0xB890: 0xD219, //HANGUL SYLLABLE THIEUTH YO RIEULKIYEOK - 0xB891: 0xD21A, //HANGUL SYLLABLE THIEUTH YO RIEULMIEUM - 0xB892: 0xD21B, //HANGUL SYLLABLE THIEUTH YO RIEULPIEUP - 0xB893: 0xD21C, //HANGUL SYLLABLE THIEUTH YO RIEULSIOS - 0xB894: 0xD21D, //HANGUL SYLLABLE THIEUTH YO RIEULTHIEUTH - 0xB895: 0xD21E, //HANGUL SYLLABLE THIEUTH YO RIEULPHIEUPH - 0xB896: 0xD21F, //HANGUL SYLLABLE THIEUTH YO RIEULHIEUH - 0xB897: 0xD220, //HANGUL SYLLABLE THIEUTH YO MIEUM - 0xB898: 0xD221, //HANGUL SYLLABLE THIEUTH YO PIEUP - 0xB899: 0xD222, //HANGUL SYLLABLE THIEUTH YO PIEUPSIOS - 0xB89A: 0xD223, //HANGUL SYLLABLE THIEUTH YO SIOS - 0xB89B: 0xD224, //HANGUL SYLLABLE THIEUTH YO SSANGSIOS - 0xB89C: 0xD225, //HANGUL SYLLABLE THIEUTH YO IEUNG - 0xB89D: 0xD226, //HANGUL SYLLABLE THIEUTH YO CIEUC - 0xB89E: 0xD227, //HANGUL SYLLABLE THIEUTH YO CHIEUCH - 0xB89F: 0xD228, //HANGUL SYLLABLE THIEUTH YO KHIEUKH - 0xB8A0: 0xD229, //HANGUL SYLLABLE THIEUTH YO THIEUTH - 0xB8A1: 0xB96B, //HANGUL SYLLABLE RIEUL YU SIOS - 0xB8A2: 0xB96D, //HANGUL SYLLABLE RIEUL YU IEUNG - 0xB8A3: 0xB974, //HANGUL SYLLABLE RIEUL EU - 0xB8A4: 0xB975, //HANGUL SYLLABLE RIEUL EU KIYEOK - 0xB8A5: 0xB978, //HANGUL SYLLABLE RIEUL EU NIEUN - 0xB8A6: 0xB97C, //HANGUL SYLLABLE RIEUL EU RIEUL - 0xB8A7: 0xB984, //HANGUL SYLLABLE RIEUL EU MIEUM - 0xB8A8: 0xB985, //HANGUL SYLLABLE RIEUL EU PIEUP - 0xB8A9: 0xB987, //HANGUL SYLLABLE RIEUL EU SIOS - 0xB8AA: 0xB989, //HANGUL SYLLABLE RIEUL EU IEUNG - 0xB8AB: 0xB98A, //HANGUL SYLLABLE RIEUL EU CIEUC - 0xB8AC: 0xB98D, //HANGUL SYLLABLE RIEUL EU THIEUTH - 0xB8AD: 0xB98E, //HANGUL SYLLABLE RIEUL EU PHIEUPH - 0xB8AE: 0xB9AC, //HANGUL SYLLABLE RIEUL I - 0xB8AF: 0xB9AD, //HANGUL SYLLABLE RIEUL I KIYEOK - 0xB8B0: 0xB9B0, //HANGUL SYLLABLE RIEUL I NIEUN - 0xB8B1: 0xB9B4, //HANGUL SYLLABLE RIEUL I RIEUL - 0xB8B2: 0xB9BC, //HANGUL SYLLABLE RIEUL I MIEUM - 0xB8B3: 0xB9BD, //HANGUL SYLLABLE RIEUL I PIEUP - 0xB8B4: 0xB9BF, //HANGUL SYLLABLE RIEUL I SIOS - 0xB8B5: 0xB9C1, //HANGUL SYLLABLE RIEUL I IEUNG - 0xB8B6: 0xB9C8, //HANGUL SYLLABLE MIEUM A - 0xB8B7: 0xB9C9, //HANGUL SYLLABLE MIEUM A KIYEOK - 0xB8B8: 0xB9CC, //HANGUL SYLLABLE MIEUM A NIEUN - 0xB8B9: 0xB9CE, //HANGUL SYLLABLE MIEUM A NIEUNHIEUH - 0xB8BA: 0xB9CF, //HANGUL SYLLABLE MIEUM A TIKEUT - 0xB8BB: 0xB9D0, //HANGUL SYLLABLE MIEUM A RIEUL - 0xB8BC: 0xB9D1, //HANGUL SYLLABLE MIEUM A RIEULKIYEOK - 0xB8BD: 0xB9D2, //HANGUL SYLLABLE MIEUM A RIEULMIEUM - 0xB8BE: 0xB9D8, //HANGUL SYLLABLE MIEUM A MIEUM - 0xB8BF: 0xB9D9, //HANGUL SYLLABLE MIEUM A PIEUP - 0xB8C0: 0xB9DB, //HANGUL SYLLABLE MIEUM A SIOS - 0xB8C1: 0xB9DD, //HANGUL SYLLABLE MIEUM A IEUNG - 0xB8C2: 0xB9DE, //HANGUL SYLLABLE MIEUM A CIEUC - 0xB8C3: 0xB9E1, //HANGUL SYLLABLE MIEUM A THIEUTH - 0xB8C4: 0xB9E3, //HANGUL SYLLABLE MIEUM A HIEUH - 0xB8C5: 0xB9E4, //HANGUL SYLLABLE MIEUM AE - 0xB8C6: 0xB9E5, //HANGUL SYLLABLE MIEUM AE KIYEOK - 0xB8C7: 0xB9E8, //HANGUL SYLLABLE MIEUM AE NIEUN - 0xB8C8: 0xB9EC, //HANGUL SYLLABLE MIEUM AE RIEUL - 0xB8C9: 0xB9F4, //HANGUL SYLLABLE MIEUM AE MIEUM - 0xB8CA: 0xB9F5, //HANGUL SYLLABLE MIEUM AE PIEUP - 0xB8CB: 0xB9F7, //HANGUL SYLLABLE MIEUM AE SIOS - 0xB8CC: 0xB9F8, //HANGUL SYLLABLE MIEUM AE SSANGSIOS - 0xB8CD: 0xB9F9, //HANGUL SYLLABLE MIEUM AE IEUNG - 0xB8CE: 0xB9FA, //HANGUL SYLLABLE MIEUM AE CIEUC - 0xB8CF: 0xBA00, //HANGUL SYLLABLE MIEUM YA - 0xB8D0: 0xBA01, //HANGUL SYLLABLE MIEUM YA KIYEOK - 0xB8D1: 0xBA08, //HANGUL SYLLABLE MIEUM YA RIEUL - 0xB8D2: 0xBA15, //HANGUL SYLLABLE MIEUM YA IEUNG - 0xB8D3: 0xBA38, //HANGUL SYLLABLE MIEUM EO - 0xB8D4: 0xBA39, //HANGUL SYLLABLE MIEUM EO KIYEOK - 0xB8D5: 0xBA3C, //HANGUL SYLLABLE MIEUM EO NIEUN - 0xB8D6: 0xBA40, //HANGUL SYLLABLE MIEUM EO RIEUL - 0xB8D7: 0xBA42, //HANGUL SYLLABLE MIEUM EO RIEULMIEUM - 0xB8D8: 0xBA48, //HANGUL SYLLABLE MIEUM EO MIEUM - 0xB8D9: 0xBA49, //HANGUL SYLLABLE MIEUM EO PIEUP - 0xB8DA: 0xBA4B, //HANGUL SYLLABLE MIEUM EO SIOS - 0xB8DB: 0xBA4D, //HANGUL SYLLABLE MIEUM EO IEUNG - 0xB8DC: 0xBA4E, //HANGUL SYLLABLE MIEUM EO CIEUC - 0xB8DD: 0xBA53, //HANGUL SYLLABLE MIEUM EO HIEUH - 0xB8DE: 0xBA54, //HANGUL SYLLABLE MIEUM E - 0xB8DF: 0xBA55, //HANGUL SYLLABLE MIEUM E KIYEOK - 0xB8E0: 0xBA58, //HANGUL SYLLABLE MIEUM E NIEUN - 0xB8E1: 0xBA5C, //HANGUL SYLLABLE MIEUM E RIEUL - 0xB8E2: 0xBA64, //HANGUL SYLLABLE MIEUM E MIEUM - 0xB8E3: 0xBA65, //HANGUL SYLLABLE MIEUM E PIEUP - 0xB8E4: 0xBA67, //HANGUL SYLLABLE MIEUM E SIOS - 0xB8E5: 0xBA68, //HANGUL SYLLABLE MIEUM E SSANGSIOS - 0xB8E6: 0xBA69, //HANGUL SYLLABLE MIEUM E IEUNG - 0xB8E7: 0xBA70, //HANGUL SYLLABLE MIEUM YEO - 0xB8E8: 0xBA71, //HANGUL SYLLABLE MIEUM YEO KIYEOK - 0xB8E9: 0xBA74, //HANGUL SYLLABLE MIEUM YEO NIEUN - 0xB8EA: 0xBA78, //HANGUL SYLLABLE MIEUM YEO RIEUL - 0xB8EB: 0xBA83, //HANGUL SYLLABLE MIEUM YEO SIOS - 0xB8EC: 0xBA84, //HANGUL SYLLABLE MIEUM YEO SSANGSIOS - 0xB8ED: 0xBA85, //HANGUL SYLLABLE MIEUM YEO IEUNG - 0xB8EE: 0xBA87, //HANGUL SYLLABLE MIEUM YEO CHIEUCH - 0xB8EF: 0xBA8C, //HANGUL SYLLABLE MIEUM YE - 0xB8F0: 0xBAA8, //HANGUL SYLLABLE MIEUM O - 0xB8F1: 0xBAA9, //HANGUL SYLLABLE MIEUM O KIYEOK - 0xB8F2: 0xBAAB, //HANGUL SYLLABLE MIEUM O KIYEOKSIOS - 0xB8F3: 0xBAAC, //HANGUL SYLLABLE MIEUM O NIEUN - 0xB8F4: 0xBAB0, //HANGUL SYLLABLE MIEUM O RIEUL - 0xB8F5: 0xBAB2, //HANGUL SYLLABLE MIEUM O RIEULMIEUM - 0xB8F6: 0xBAB8, //HANGUL SYLLABLE MIEUM O MIEUM - 0xB8F7: 0xBAB9, //HANGUL SYLLABLE MIEUM O PIEUP - 0xB8F8: 0xBABB, //HANGUL SYLLABLE MIEUM O SIOS - 0xB8F9: 0xBABD, //HANGUL SYLLABLE MIEUM O IEUNG - 0xB8FA: 0xBAC4, //HANGUL SYLLABLE MIEUM WA - 0xB8FB: 0xBAC8, //HANGUL SYLLABLE MIEUM WA NIEUN - 0xB8FC: 0xBAD8, //HANGUL SYLLABLE MIEUM WA SSANGSIOS - 0xB8FD: 0xBAD9, //HANGUL SYLLABLE MIEUM WA IEUNG - 0xB8FE: 0xBAFC, //HANGUL SYLLABLE MIEUM OE - 0xB941: 0xD22A, //HANGUL SYLLABLE THIEUTH YO PHIEUPH - 0xB942: 0xD22B, //HANGUL SYLLABLE THIEUTH YO HIEUH - 0xB943: 0xD22E, //HANGUL SYLLABLE THIEUTH U SSANGKIYEOK - 0xB944: 0xD22F, //HANGUL SYLLABLE THIEUTH U KIYEOKSIOS - 0xB945: 0xD231, //HANGUL SYLLABLE THIEUTH U NIEUNCIEUC - 0xB946: 0xD232, //HANGUL SYLLABLE THIEUTH U NIEUNHIEUH - 0xB947: 0xD233, //HANGUL SYLLABLE THIEUTH U TIKEUT - 0xB948: 0xD235, //HANGUL SYLLABLE THIEUTH U RIEULKIYEOK - 0xB949: 0xD236, //HANGUL SYLLABLE THIEUTH U RIEULMIEUM - 0xB94A: 0xD237, //HANGUL SYLLABLE THIEUTH U RIEULPIEUP - 0xB94B: 0xD238, //HANGUL SYLLABLE THIEUTH U RIEULSIOS - 0xB94C: 0xD239, //HANGUL SYLLABLE THIEUTH U RIEULTHIEUTH - 0xB94D: 0xD23A, //HANGUL SYLLABLE THIEUTH U RIEULPHIEUPH - 0xB94E: 0xD23B, //HANGUL SYLLABLE THIEUTH U RIEULHIEUH - 0xB94F: 0xD23E, //HANGUL SYLLABLE THIEUTH U PIEUPSIOS - 0xB950: 0xD240, //HANGUL SYLLABLE THIEUTH U SSANGSIOS - 0xB951: 0xD242, //HANGUL SYLLABLE THIEUTH U CIEUC - 0xB952: 0xD243, //HANGUL SYLLABLE THIEUTH U CHIEUCH - 0xB953: 0xD244, //HANGUL SYLLABLE THIEUTH U KHIEUKH - 0xB954: 0xD245, //HANGUL SYLLABLE THIEUTH U THIEUTH - 0xB955: 0xD246, //HANGUL SYLLABLE THIEUTH U PHIEUPH - 0xB956: 0xD247, //HANGUL SYLLABLE THIEUTH U HIEUH - 0xB957: 0xD249, //HANGUL SYLLABLE THIEUTH WEO KIYEOK - 0xB958: 0xD24A, //HANGUL SYLLABLE THIEUTH WEO SSANGKIYEOK - 0xB959: 0xD24B, //HANGUL SYLLABLE THIEUTH WEO KIYEOKSIOS - 0xB95A: 0xD24C, //HANGUL SYLLABLE THIEUTH WEO NIEUN - 0xB961: 0xD24D, //HANGUL SYLLABLE THIEUTH WEO NIEUNCIEUC - 0xB962: 0xD24E, //HANGUL SYLLABLE THIEUTH WEO NIEUNHIEUH - 0xB963: 0xD24F, //HANGUL SYLLABLE THIEUTH WEO TIKEUT - 0xB964: 0xD250, //HANGUL SYLLABLE THIEUTH WEO RIEUL - 0xB965: 0xD251, //HANGUL SYLLABLE THIEUTH WEO RIEULKIYEOK - 0xB966: 0xD252, //HANGUL SYLLABLE THIEUTH WEO RIEULMIEUM - 0xB967: 0xD253, //HANGUL SYLLABLE THIEUTH WEO RIEULPIEUP - 0xB968: 0xD254, //HANGUL SYLLABLE THIEUTH WEO RIEULSIOS - 0xB969: 0xD255, //HANGUL SYLLABLE THIEUTH WEO RIEULTHIEUTH - 0xB96A: 0xD256, //HANGUL SYLLABLE THIEUTH WEO RIEULPHIEUPH - 0xB96B: 0xD257, //HANGUL SYLLABLE THIEUTH WEO RIEULHIEUH - 0xB96C: 0xD258, //HANGUL SYLLABLE THIEUTH WEO MIEUM - 0xB96D: 0xD259, //HANGUL SYLLABLE THIEUTH WEO PIEUP - 0xB96E: 0xD25A, //HANGUL SYLLABLE THIEUTH WEO PIEUPSIOS - 0xB96F: 0xD25B, //HANGUL SYLLABLE THIEUTH WEO SIOS - 0xB970: 0xD25D, //HANGUL SYLLABLE THIEUTH WEO IEUNG - 0xB971: 0xD25E, //HANGUL SYLLABLE THIEUTH WEO CIEUC - 0xB972: 0xD25F, //HANGUL SYLLABLE THIEUTH WEO CHIEUCH - 0xB973: 0xD260, //HANGUL SYLLABLE THIEUTH WEO KHIEUKH - 0xB974: 0xD261, //HANGUL SYLLABLE THIEUTH WEO THIEUTH - 0xB975: 0xD262, //HANGUL SYLLABLE THIEUTH WEO PHIEUPH - 0xB976: 0xD263, //HANGUL SYLLABLE THIEUTH WEO HIEUH - 0xB977: 0xD265, //HANGUL SYLLABLE THIEUTH WE KIYEOK - 0xB978: 0xD266, //HANGUL SYLLABLE THIEUTH WE SSANGKIYEOK - 0xB979: 0xD267, //HANGUL SYLLABLE THIEUTH WE KIYEOKSIOS - 0xB97A: 0xD268, //HANGUL SYLLABLE THIEUTH WE NIEUN - 0xB981: 0xD269, //HANGUL SYLLABLE THIEUTH WE NIEUNCIEUC - 0xB982: 0xD26A, //HANGUL SYLLABLE THIEUTH WE NIEUNHIEUH - 0xB983: 0xD26B, //HANGUL SYLLABLE THIEUTH WE TIKEUT - 0xB984: 0xD26C, //HANGUL SYLLABLE THIEUTH WE RIEUL - 0xB985: 0xD26D, //HANGUL SYLLABLE THIEUTH WE RIEULKIYEOK - 0xB986: 0xD26E, //HANGUL SYLLABLE THIEUTH WE RIEULMIEUM - 0xB987: 0xD26F, //HANGUL SYLLABLE THIEUTH WE RIEULPIEUP - 0xB988: 0xD270, //HANGUL SYLLABLE THIEUTH WE RIEULSIOS - 0xB989: 0xD271, //HANGUL SYLLABLE THIEUTH WE RIEULTHIEUTH - 0xB98A: 0xD272, //HANGUL SYLLABLE THIEUTH WE RIEULPHIEUPH - 0xB98B: 0xD273, //HANGUL SYLLABLE THIEUTH WE RIEULHIEUH - 0xB98C: 0xD274, //HANGUL SYLLABLE THIEUTH WE MIEUM - 0xB98D: 0xD275, //HANGUL SYLLABLE THIEUTH WE PIEUP - 0xB98E: 0xD276, //HANGUL SYLLABLE THIEUTH WE PIEUPSIOS - 0xB98F: 0xD277, //HANGUL SYLLABLE THIEUTH WE SIOS - 0xB990: 0xD278, //HANGUL SYLLABLE THIEUTH WE SSANGSIOS - 0xB991: 0xD279, //HANGUL SYLLABLE THIEUTH WE IEUNG - 0xB992: 0xD27A, //HANGUL SYLLABLE THIEUTH WE CIEUC - 0xB993: 0xD27B, //HANGUL SYLLABLE THIEUTH WE CHIEUCH - 0xB994: 0xD27C, //HANGUL SYLLABLE THIEUTH WE KHIEUKH - 0xB995: 0xD27D, //HANGUL SYLLABLE THIEUTH WE THIEUTH - 0xB996: 0xD27E, //HANGUL SYLLABLE THIEUTH WE PHIEUPH - 0xB997: 0xD27F, //HANGUL SYLLABLE THIEUTH WE HIEUH - 0xB998: 0xD282, //HANGUL SYLLABLE THIEUTH WI SSANGKIYEOK - 0xB999: 0xD283, //HANGUL SYLLABLE THIEUTH WI KIYEOKSIOS - 0xB99A: 0xD285, //HANGUL SYLLABLE THIEUTH WI NIEUNCIEUC - 0xB99B: 0xD286, //HANGUL SYLLABLE THIEUTH WI NIEUNHIEUH - 0xB99C: 0xD287, //HANGUL SYLLABLE THIEUTH WI TIKEUT - 0xB99D: 0xD289, //HANGUL SYLLABLE THIEUTH WI RIEULKIYEOK - 0xB99E: 0xD28A, //HANGUL SYLLABLE THIEUTH WI RIEULMIEUM - 0xB99F: 0xD28B, //HANGUL SYLLABLE THIEUTH WI RIEULPIEUP - 0xB9A0: 0xD28C, //HANGUL SYLLABLE THIEUTH WI RIEULSIOS - 0xB9A1: 0xBB00, //HANGUL SYLLABLE MIEUM OE NIEUN - 0xB9A2: 0xBB04, //HANGUL SYLLABLE MIEUM OE RIEUL - 0xB9A3: 0xBB0D, //HANGUL SYLLABLE MIEUM OE PIEUP - 0xB9A4: 0xBB0F, //HANGUL SYLLABLE MIEUM OE SIOS - 0xB9A5: 0xBB11, //HANGUL SYLLABLE MIEUM OE IEUNG - 0xB9A6: 0xBB18, //HANGUL SYLLABLE MIEUM YO - 0xB9A7: 0xBB1C, //HANGUL SYLLABLE MIEUM YO NIEUN - 0xB9A8: 0xBB20, //HANGUL SYLLABLE MIEUM YO RIEUL - 0xB9A9: 0xBB29, //HANGUL SYLLABLE MIEUM YO PIEUP - 0xB9AA: 0xBB2B, //HANGUL SYLLABLE MIEUM YO SIOS - 0xB9AB: 0xBB34, //HANGUL SYLLABLE MIEUM U - 0xB9AC: 0xBB35, //HANGUL SYLLABLE MIEUM U KIYEOK - 0xB9AD: 0xBB36, //HANGUL SYLLABLE MIEUM U SSANGKIYEOK - 0xB9AE: 0xBB38, //HANGUL SYLLABLE MIEUM U NIEUN - 0xB9AF: 0xBB3B, //HANGUL SYLLABLE MIEUM U TIKEUT - 0xB9B0: 0xBB3C, //HANGUL SYLLABLE MIEUM U RIEUL - 0xB9B1: 0xBB3D, //HANGUL SYLLABLE MIEUM U RIEULKIYEOK - 0xB9B2: 0xBB3E, //HANGUL SYLLABLE MIEUM U RIEULMIEUM - 0xB9B3: 0xBB44, //HANGUL SYLLABLE MIEUM U MIEUM - 0xB9B4: 0xBB45, //HANGUL SYLLABLE MIEUM U PIEUP - 0xB9B5: 0xBB47, //HANGUL SYLLABLE MIEUM U SIOS - 0xB9B6: 0xBB49, //HANGUL SYLLABLE MIEUM U IEUNG - 0xB9B7: 0xBB4D, //HANGUL SYLLABLE MIEUM U THIEUTH - 0xB9B8: 0xBB4F, //HANGUL SYLLABLE MIEUM U HIEUH - 0xB9B9: 0xBB50, //HANGUL SYLLABLE MIEUM WEO - 0xB9BA: 0xBB54, //HANGUL SYLLABLE MIEUM WEO NIEUN - 0xB9BB: 0xBB58, //HANGUL SYLLABLE MIEUM WEO RIEUL - 0xB9BC: 0xBB61, //HANGUL SYLLABLE MIEUM WEO PIEUP - 0xB9BD: 0xBB63, //HANGUL SYLLABLE MIEUM WEO SIOS - 0xB9BE: 0xBB6C, //HANGUL SYLLABLE MIEUM WE - 0xB9BF: 0xBB88, //HANGUL SYLLABLE MIEUM WI - 0xB9C0: 0xBB8C, //HANGUL SYLLABLE MIEUM WI NIEUN - 0xB9C1: 0xBB90, //HANGUL SYLLABLE MIEUM WI RIEUL - 0xB9C2: 0xBBA4, //HANGUL SYLLABLE MIEUM YU - 0xB9C3: 0xBBA8, //HANGUL SYLLABLE MIEUM YU NIEUN - 0xB9C4: 0xBBAC, //HANGUL SYLLABLE MIEUM YU RIEUL - 0xB9C5: 0xBBB4, //HANGUL SYLLABLE MIEUM YU MIEUM - 0xB9C6: 0xBBB7, //HANGUL SYLLABLE MIEUM YU SIOS - 0xB9C7: 0xBBC0, //HANGUL SYLLABLE MIEUM EU - 0xB9C8: 0xBBC4, //HANGUL SYLLABLE MIEUM EU NIEUN - 0xB9C9: 0xBBC8, //HANGUL SYLLABLE MIEUM EU RIEUL - 0xB9CA: 0xBBD0, //HANGUL SYLLABLE MIEUM EU MIEUM - 0xB9CB: 0xBBD3, //HANGUL SYLLABLE MIEUM EU SIOS - 0xB9CC: 0xBBF8, //HANGUL SYLLABLE MIEUM I - 0xB9CD: 0xBBF9, //HANGUL SYLLABLE MIEUM I KIYEOK - 0xB9CE: 0xBBFC, //HANGUL SYLLABLE MIEUM I NIEUN - 0xB9CF: 0xBBFF, //HANGUL SYLLABLE MIEUM I TIKEUT - 0xB9D0: 0xBC00, //HANGUL SYLLABLE MIEUM I RIEUL - 0xB9D1: 0xBC02, //HANGUL SYLLABLE MIEUM I RIEULMIEUM - 0xB9D2: 0xBC08, //HANGUL SYLLABLE MIEUM I MIEUM - 0xB9D3: 0xBC09, //HANGUL SYLLABLE MIEUM I PIEUP - 0xB9D4: 0xBC0B, //HANGUL SYLLABLE MIEUM I SIOS - 0xB9D5: 0xBC0C, //HANGUL SYLLABLE MIEUM I SSANGSIOS - 0xB9D6: 0xBC0D, //HANGUL SYLLABLE MIEUM I IEUNG - 0xB9D7: 0xBC0F, //HANGUL SYLLABLE MIEUM I CHIEUCH - 0xB9D8: 0xBC11, //HANGUL SYLLABLE MIEUM I THIEUTH - 0xB9D9: 0xBC14, //HANGUL SYLLABLE PIEUP A - 0xB9DA: 0xBC15, //HANGUL SYLLABLE PIEUP A KIYEOK - 0xB9DB: 0xBC16, //HANGUL SYLLABLE PIEUP A SSANGKIYEOK - 0xB9DC: 0xBC17, //HANGUL SYLLABLE PIEUP A KIYEOKSIOS - 0xB9DD: 0xBC18, //HANGUL SYLLABLE PIEUP A NIEUN - 0xB9DE: 0xBC1B, //HANGUL SYLLABLE PIEUP A TIKEUT - 0xB9DF: 0xBC1C, //HANGUL SYLLABLE PIEUP A RIEUL - 0xB9E0: 0xBC1D, //HANGUL SYLLABLE PIEUP A RIEULKIYEOK - 0xB9E1: 0xBC1E, //HANGUL SYLLABLE PIEUP A RIEULMIEUM - 0xB9E2: 0xBC1F, //HANGUL SYLLABLE PIEUP A RIEULPIEUP - 0xB9E3: 0xBC24, //HANGUL SYLLABLE PIEUP A MIEUM - 0xB9E4: 0xBC25, //HANGUL SYLLABLE PIEUP A PIEUP - 0xB9E5: 0xBC27, //HANGUL SYLLABLE PIEUP A SIOS - 0xB9E6: 0xBC29, //HANGUL SYLLABLE PIEUP A IEUNG - 0xB9E7: 0xBC2D, //HANGUL SYLLABLE PIEUP A THIEUTH - 0xB9E8: 0xBC30, //HANGUL SYLLABLE PIEUP AE - 0xB9E9: 0xBC31, //HANGUL SYLLABLE PIEUP AE KIYEOK - 0xB9EA: 0xBC34, //HANGUL SYLLABLE PIEUP AE NIEUN - 0xB9EB: 0xBC38, //HANGUL SYLLABLE PIEUP AE RIEUL - 0xB9EC: 0xBC40, //HANGUL SYLLABLE PIEUP AE MIEUM - 0xB9ED: 0xBC41, //HANGUL SYLLABLE PIEUP AE PIEUP - 0xB9EE: 0xBC43, //HANGUL SYLLABLE PIEUP AE SIOS - 0xB9EF: 0xBC44, //HANGUL SYLLABLE PIEUP AE SSANGSIOS - 0xB9F0: 0xBC45, //HANGUL SYLLABLE PIEUP AE IEUNG - 0xB9F1: 0xBC49, //HANGUL SYLLABLE PIEUP AE THIEUTH - 0xB9F2: 0xBC4C, //HANGUL SYLLABLE PIEUP YA - 0xB9F3: 0xBC4D, //HANGUL SYLLABLE PIEUP YA KIYEOK - 0xB9F4: 0xBC50, //HANGUL SYLLABLE PIEUP YA NIEUN - 0xB9F5: 0xBC5D, //HANGUL SYLLABLE PIEUP YA PIEUP - 0xB9F6: 0xBC84, //HANGUL SYLLABLE PIEUP EO - 0xB9F7: 0xBC85, //HANGUL SYLLABLE PIEUP EO KIYEOK - 0xB9F8: 0xBC88, //HANGUL SYLLABLE PIEUP EO NIEUN - 0xB9F9: 0xBC8B, //HANGUL SYLLABLE PIEUP EO TIKEUT - 0xB9FA: 0xBC8C, //HANGUL SYLLABLE PIEUP EO RIEUL - 0xB9FB: 0xBC8E, //HANGUL SYLLABLE PIEUP EO RIEULMIEUM - 0xB9FC: 0xBC94, //HANGUL SYLLABLE PIEUP EO MIEUM - 0xB9FD: 0xBC95, //HANGUL SYLLABLE PIEUP EO PIEUP - 0xB9FE: 0xBC97, //HANGUL SYLLABLE PIEUP EO SIOS - 0xBA41: 0xD28D, //HANGUL SYLLABLE THIEUTH WI RIEULTHIEUTH - 0xBA42: 0xD28E, //HANGUL SYLLABLE THIEUTH WI RIEULPHIEUPH - 0xBA43: 0xD28F, //HANGUL SYLLABLE THIEUTH WI RIEULHIEUH - 0xBA44: 0xD292, //HANGUL SYLLABLE THIEUTH WI PIEUPSIOS - 0xBA45: 0xD293, //HANGUL SYLLABLE THIEUTH WI SIOS - 0xBA46: 0xD294, //HANGUL SYLLABLE THIEUTH WI SSANGSIOS - 0xBA47: 0xD296, //HANGUL SYLLABLE THIEUTH WI CIEUC - 0xBA48: 0xD297, //HANGUL SYLLABLE THIEUTH WI CHIEUCH - 0xBA49: 0xD298, //HANGUL SYLLABLE THIEUTH WI KHIEUKH - 0xBA4A: 0xD299, //HANGUL SYLLABLE THIEUTH WI THIEUTH - 0xBA4B: 0xD29A, //HANGUL SYLLABLE THIEUTH WI PHIEUPH - 0xBA4C: 0xD29B, //HANGUL SYLLABLE THIEUTH WI HIEUH - 0xBA4D: 0xD29D, //HANGUL SYLLABLE THIEUTH YU KIYEOK - 0xBA4E: 0xD29E, //HANGUL SYLLABLE THIEUTH YU SSANGKIYEOK - 0xBA4F: 0xD29F, //HANGUL SYLLABLE THIEUTH YU KIYEOKSIOS - 0xBA50: 0xD2A1, //HANGUL SYLLABLE THIEUTH YU NIEUNCIEUC - 0xBA51: 0xD2A2, //HANGUL SYLLABLE THIEUTH YU NIEUNHIEUH - 0xBA52: 0xD2A3, //HANGUL SYLLABLE THIEUTH YU TIKEUT - 0xBA53: 0xD2A5, //HANGUL SYLLABLE THIEUTH YU RIEULKIYEOK - 0xBA54: 0xD2A6, //HANGUL SYLLABLE THIEUTH YU RIEULMIEUM - 0xBA55: 0xD2A7, //HANGUL SYLLABLE THIEUTH YU RIEULPIEUP - 0xBA56: 0xD2A8, //HANGUL SYLLABLE THIEUTH YU RIEULSIOS - 0xBA57: 0xD2A9, //HANGUL SYLLABLE THIEUTH YU RIEULTHIEUTH - 0xBA58: 0xD2AA, //HANGUL SYLLABLE THIEUTH YU RIEULPHIEUPH - 0xBA59: 0xD2AB, //HANGUL SYLLABLE THIEUTH YU RIEULHIEUH - 0xBA5A: 0xD2AD, //HANGUL SYLLABLE THIEUTH YU PIEUP - 0xBA61: 0xD2AE, //HANGUL SYLLABLE THIEUTH YU PIEUPSIOS - 0xBA62: 0xD2AF, //HANGUL SYLLABLE THIEUTH YU SIOS - 0xBA63: 0xD2B0, //HANGUL SYLLABLE THIEUTH YU SSANGSIOS - 0xBA64: 0xD2B2, //HANGUL SYLLABLE THIEUTH YU CIEUC - 0xBA65: 0xD2B3, //HANGUL SYLLABLE THIEUTH YU CHIEUCH - 0xBA66: 0xD2B4, //HANGUL SYLLABLE THIEUTH YU KHIEUKH - 0xBA67: 0xD2B5, //HANGUL SYLLABLE THIEUTH YU THIEUTH - 0xBA68: 0xD2B6, //HANGUL SYLLABLE THIEUTH YU PHIEUPH - 0xBA69: 0xD2B7, //HANGUL SYLLABLE THIEUTH YU HIEUH - 0xBA6A: 0xD2BA, //HANGUL SYLLABLE THIEUTH EU SSANGKIYEOK - 0xBA6B: 0xD2BB, //HANGUL SYLLABLE THIEUTH EU KIYEOKSIOS - 0xBA6C: 0xD2BD, //HANGUL SYLLABLE THIEUTH EU NIEUNCIEUC - 0xBA6D: 0xD2BE, //HANGUL SYLLABLE THIEUTH EU NIEUNHIEUH - 0xBA6E: 0xD2C1, //HANGUL SYLLABLE THIEUTH EU RIEULKIYEOK - 0xBA6F: 0xD2C3, //HANGUL SYLLABLE THIEUTH EU RIEULPIEUP - 0xBA70: 0xD2C4, //HANGUL SYLLABLE THIEUTH EU RIEULSIOS - 0xBA71: 0xD2C5, //HANGUL SYLLABLE THIEUTH EU RIEULTHIEUTH - 0xBA72: 0xD2C6, //HANGUL SYLLABLE THIEUTH EU RIEULPHIEUPH - 0xBA73: 0xD2C7, //HANGUL SYLLABLE THIEUTH EU RIEULHIEUH - 0xBA74: 0xD2CA, //HANGUL SYLLABLE THIEUTH EU PIEUPSIOS - 0xBA75: 0xD2CC, //HANGUL SYLLABLE THIEUTH EU SSANGSIOS - 0xBA76: 0xD2CD, //HANGUL SYLLABLE THIEUTH EU IEUNG - 0xBA77: 0xD2CE, //HANGUL SYLLABLE THIEUTH EU CIEUC - 0xBA78: 0xD2CF, //HANGUL SYLLABLE THIEUTH EU CHIEUCH - 0xBA79: 0xD2D0, //HANGUL SYLLABLE THIEUTH EU KHIEUKH - 0xBA7A: 0xD2D1, //HANGUL SYLLABLE THIEUTH EU THIEUTH - 0xBA81: 0xD2D2, //HANGUL SYLLABLE THIEUTH EU PHIEUPH - 0xBA82: 0xD2D3, //HANGUL SYLLABLE THIEUTH EU HIEUH - 0xBA83: 0xD2D5, //HANGUL SYLLABLE THIEUTH YI KIYEOK - 0xBA84: 0xD2D6, //HANGUL SYLLABLE THIEUTH YI SSANGKIYEOK - 0xBA85: 0xD2D7, //HANGUL SYLLABLE THIEUTH YI KIYEOKSIOS - 0xBA86: 0xD2D9, //HANGUL SYLLABLE THIEUTH YI NIEUNCIEUC - 0xBA87: 0xD2DA, //HANGUL SYLLABLE THIEUTH YI NIEUNHIEUH - 0xBA88: 0xD2DB, //HANGUL SYLLABLE THIEUTH YI TIKEUT - 0xBA89: 0xD2DD, //HANGUL SYLLABLE THIEUTH YI RIEULKIYEOK - 0xBA8A: 0xD2DE, //HANGUL SYLLABLE THIEUTH YI RIEULMIEUM - 0xBA8B: 0xD2DF, //HANGUL SYLLABLE THIEUTH YI RIEULPIEUP - 0xBA8C: 0xD2E0, //HANGUL SYLLABLE THIEUTH YI RIEULSIOS - 0xBA8D: 0xD2E1, //HANGUL SYLLABLE THIEUTH YI RIEULTHIEUTH - 0xBA8E: 0xD2E2, //HANGUL SYLLABLE THIEUTH YI RIEULPHIEUPH - 0xBA8F: 0xD2E3, //HANGUL SYLLABLE THIEUTH YI RIEULHIEUH - 0xBA90: 0xD2E6, //HANGUL SYLLABLE THIEUTH YI PIEUPSIOS - 0xBA91: 0xD2E7, //HANGUL SYLLABLE THIEUTH YI SIOS - 0xBA92: 0xD2E8, //HANGUL SYLLABLE THIEUTH YI SSANGSIOS - 0xBA93: 0xD2E9, //HANGUL SYLLABLE THIEUTH YI IEUNG - 0xBA94: 0xD2EA, //HANGUL SYLLABLE THIEUTH YI CIEUC - 0xBA95: 0xD2EB, //HANGUL SYLLABLE THIEUTH YI CHIEUCH - 0xBA96: 0xD2EC, //HANGUL SYLLABLE THIEUTH YI KHIEUKH - 0xBA97: 0xD2ED, //HANGUL SYLLABLE THIEUTH YI THIEUTH - 0xBA98: 0xD2EE, //HANGUL SYLLABLE THIEUTH YI PHIEUPH - 0xBA99: 0xD2EF, //HANGUL SYLLABLE THIEUTH YI HIEUH - 0xBA9A: 0xD2F2, //HANGUL SYLLABLE THIEUTH I SSANGKIYEOK - 0xBA9B: 0xD2F3, //HANGUL SYLLABLE THIEUTH I KIYEOKSIOS - 0xBA9C: 0xD2F5, //HANGUL SYLLABLE THIEUTH I NIEUNCIEUC - 0xBA9D: 0xD2F6, //HANGUL SYLLABLE THIEUTH I NIEUNHIEUH - 0xBA9E: 0xD2F7, //HANGUL SYLLABLE THIEUTH I TIKEUT - 0xBA9F: 0xD2F9, //HANGUL SYLLABLE THIEUTH I RIEULKIYEOK - 0xBAA0: 0xD2FA, //HANGUL SYLLABLE THIEUTH I RIEULMIEUM - 0xBAA1: 0xBC99, //HANGUL SYLLABLE PIEUP EO IEUNG - 0xBAA2: 0xBC9A, //HANGUL SYLLABLE PIEUP EO CIEUC - 0xBAA3: 0xBCA0, //HANGUL SYLLABLE PIEUP E - 0xBAA4: 0xBCA1, //HANGUL SYLLABLE PIEUP E KIYEOK - 0xBAA5: 0xBCA4, //HANGUL SYLLABLE PIEUP E NIEUN - 0xBAA6: 0xBCA7, //HANGUL SYLLABLE PIEUP E TIKEUT - 0xBAA7: 0xBCA8, //HANGUL SYLLABLE PIEUP E RIEUL - 0xBAA8: 0xBCB0, //HANGUL SYLLABLE PIEUP E MIEUM - 0xBAA9: 0xBCB1, //HANGUL SYLLABLE PIEUP E PIEUP - 0xBAAA: 0xBCB3, //HANGUL SYLLABLE PIEUP E SIOS - 0xBAAB: 0xBCB4, //HANGUL SYLLABLE PIEUP E SSANGSIOS - 0xBAAC: 0xBCB5, //HANGUL SYLLABLE PIEUP E IEUNG - 0xBAAD: 0xBCBC, //HANGUL SYLLABLE PIEUP YEO - 0xBAAE: 0xBCBD, //HANGUL SYLLABLE PIEUP YEO KIYEOK - 0xBAAF: 0xBCC0, //HANGUL SYLLABLE PIEUP YEO NIEUN - 0xBAB0: 0xBCC4, //HANGUL SYLLABLE PIEUP YEO RIEUL - 0xBAB1: 0xBCCD, //HANGUL SYLLABLE PIEUP YEO PIEUP - 0xBAB2: 0xBCCF, //HANGUL SYLLABLE PIEUP YEO SIOS - 0xBAB3: 0xBCD0, //HANGUL SYLLABLE PIEUP YEO SSANGSIOS - 0xBAB4: 0xBCD1, //HANGUL SYLLABLE PIEUP YEO IEUNG - 0xBAB5: 0xBCD5, //HANGUL SYLLABLE PIEUP YEO THIEUTH - 0xBAB6: 0xBCD8, //HANGUL SYLLABLE PIEUP YE - 0xBAB7: 0xBCDC, //HANGUL SYLLABLE PIEUP YE NIEUN - 0xBAB8: 0xBCF4, //HANGUL SYLLABLE PIEUP O - 0xBAB9: 0xBCF5, //HANGUL SYLLABLE PIEUP O KIYEOK - 0xBABA: 0xBCF6, //HANGUL SYLLABLE PIEUP O SSANGKIYEOK - 0xBABB: 0xBCF8, //HANGUL SYLLABLE PIEUP O NIEUN - 0xBABC: 0xBCFC, //HANGUL SYLLABLE PIEUP O RIEUL - 0xBABD: 0xBD04, //HANGUL SYLLABLE PIEUP O MIEUM - 0xBABE: 0xBD05, //HANGUL SYLLABLE PIEUP O PIEUP - 0xBABF: 0xBD07, //HANGUL SYLLABLE PIEUP O SIOS - 0xBAC0: 0xBD09, //HANGUL SYLLABLE PIEUP O IEUNG - 0xBAC1: 0xBD10, //HANGUL SYLLABLE PIEUP WA - 0xBAC2: 0xBD14, //HANGUL SYLLABLE PIEUP WA NIEUN - 0xBAC3: 0xBD24, //HANGUL SYLLABLE PIEUP WA SSANGSIOS - 0xBAC4: 0xBD2C, //HANGUL SYLLABLE PIEUP WAE - 0xBAC5: 0xBD40, //HANGUL SYLLABLE PIEUP WAE SSANGSIOS - 0xBAC6: 0xBD48, //HANGUL SYLLABLE PIEUP OE - 0xBAC7: 0xBD49, //HANGUL SYLLABLE PIEUP OE KIYEOK - 0xBAC8: 0xBD4C, //HANGUL SYLLABLE PIEUP OE NIEUN - 0xBAC9: 0xBD50, //HANGUL SYLLABLE PIEUP OE RIEUL - 0xBACA: 0xBD58, //HANGUL SYLLABLE PIEUP OE MIEUM - 0xBACB: 0xBD59, //HANGUL SYLLABLE PIEUP OE PIEUP - 0xBACC: 0xBD64, //HANGUL SYLLABLE PIEUP YO - 0xBACD: 0xBD68, //HANGUL SYLLABLE PIEUP YO NIEUN - 0xBACE: 0xBD80, //HANGUL SYLLABLE PIEUP U - 0xBACF: 0xBD81, //HANGUL SYLLABLE PIEUP U KIYEOK - 0xBAD0: 0xBD84, //HANGUL SYLLABLE PIEUP U NIEUN - 0xBAD1: 0xBD87, //HANGUL SYLLABLE PIEUP U TIKEUT - 0xBAD2: 0xBD88, //HANGUL SYLLABLE PIEUP U RIEUL - 0xBAD3: 0xBD89, //HANGUL SYLLABLE PIEUP U RIEULKIYEOK - 0xBAD4: 0xBD8A, //HANGUL SYLLABLE PIEUP U RIEULMIEUM - 0xBAD5: 0xBD90, //HANGUL SYLLABLE PIEUP U MIEUM - 0xBAD6: 0xBD91, //HANGUL SYLLABLE PIEUP U PIEUP - 0xBAD7: 0xBD93, //HANGUL SYLLABLE PIEUP U SIOS - 0xBAD8: 0xBD95, //HANGUL SYLLABLE PIEUP U IEUNG - 0xBAD9: 0xBD99, //HANGUL SYLLABLE PIEUP U THIEUTH - 0xBADA: 0xBD9A, //HANGUL SYLLABLE PIEUP U PHIEUPH - 0xBADB: 0xBD9C, //HANGUL SYLLABLE PIEUP WEO - 0xBADC: 0xBDA4, //HANGUL SYLLABLE PIEUP WEO RIEUL - 0xBADD: 0xBDB0, //HANGUL SYLLABLE PIEUP WEO SSANGSIOS - 0xBADE: 0xBDB8, //HANGUL SYLLABLE PIEUP WE - 0xBADF: 0xBDD4, //HANGUL SYLLABLE PIEUP WI - 0xBAE0: 0xBDD5, //HANGUL SYLLABLE PIEUP WI KIYEOK - 0xBAE1: 0xBDD8, //HANGUL SYLLABLE PIEUP WI NIEUN - 0xBAE2: 0xBDDC, //HANGUL SYLLABLE PIEUP WI RIEUL - 0xBAE3: 0xBDE9, //HANGUL SYLLABLE PIEUP WI IEUNG - 0xBAE4: 0xBDF0, //HANGUL SYLLABLE PIEUP YU - 0xBAE5: 0xBDF4, //HANGUL SYLLABLE PIEUP YU NIEUN - 0xBAE6: 0xBDF8, //HANGUL SYLLABLE PIEUP YU RIEUL - 0xBAE7: 0xBE00, //HANGUL SYLLABLE PIEUP YU MIEUM - 0xBAE8: 0xBE03, //HANGUL SYLLABLE PIEUP YU SIOS - 0xBAE9: 0xBE05, //HANGUL SYLLABLE PIEUP YU IEUNG - 0xBAEA: 0xBE0C, //HANGUL SYLLABLE PIEUP EU - 0xBAEB: 0xBE0D, //HANGUL SYLLABLE PIEUP EU KIYEOK - 0xBAEC: 0xBE10, //HANGUL SYLLABLE PIEUP EU NIEUN - 0xBAED: 0xBE14, //HANGUL SYLLABLE PIEUP EU RIEUL - 0xBAEE: 0xBE1C, //HANGUL SYLLABLE PIEUP EU MIEUM - 0xBAEF: 0xBE1D, //HANGUL SYLLABLE PIEUP EU PIEUP - 0xBAF0: 0xBE1F, //HANGUL SYLLABLE PIEUP EU SIOS - 0xBAF1: 0xBE44, //HANGUL SYLLABLE PIEUP I - 0xBAF2: 0xBE45, //HANGUL SYLLABLE PIEUP I KIYEOK - 0xBAF3: 0xBE48, //HANGUL SYLLABLE PIEUP I NIEUN - 0xBAF4: 0xBE4C, //HANGUL SYLLABLE PIEUP I RIEUL - 0xBAF5: 0xBE4E, //HANGUL SYLLABLE PIEUP I RIEULMIEUM - 0xBAF6: 0xBE54, //HANGUL SYLLABLE PIEUP I MIEUM - 0xBAF7: 0xBE55, //HANGUL SYLLABLE PIEUP I PIEUP - 0xBAF8: 0xBE57, //HANGUL SYLLABLE PIEUP I SIOS - 0xBAF9: 0xBE59, //HANGUL SYLLABLE PIEUP I IEUNG - 0xBAFA: 0xBE5A, //HANGUL SYLLABLE PIEUP I CIEUC - 0xBAFB: 0xBE5B, //HANGUL SYLLABLE PIEUP I CHIEUCH - 0xBAFC: 0xBE60, //HANGUL SYLLABLE SSANGPIEUP A - 0xBAFD: 0xBE61, //HANGUL SYLLABLE SSANGPIEUP A KIYEOK - 0xBAFE: 0xBE64, //HANGUL SYLLABLE SSANGPIEUP A NIEUN - 0xBB41: 0xD2FB, //HANGUL SYLLABLE THIEUTH I RIEULPIEUP - 0xBB42: 0xD2FC, //HANGUL SYLLABLE THIEUTH I RIEULSIOS - 0xBB43: 0xD2FD, //HANGUL SYLLABLE THIEUTH I RIEULTHIEUTH - 0xBB44: 0xD2FE, //HANGUL SYLLABLE THIEUTH I RIEULPHIEUPH - 0xBB45: 0xD2FF, //HANGUL SYLLABLE THIEUTH I RIEULHIEUH - 0xBB46: 0xD302, //HANGUL SYLLABLE THIEUTH I PIEUPSIOS - 0xBB47: 0xD304, //HANGUL SYLLABLE THIEUTH I SSANGSIOS - 0xBB48: 0xD306, //HANGUL SYLLABLE THIEUTH I CIEUC - 0xBB49: 0xD307, //HANGUL SYLLABLE THIEUTH I CHIEUCH - 0xBB4A: 0xD308, //HANGUL SYLLABLE THIEUTH I KHIEUKH - 0xBB4B: 0xD309, //HANGUL SYLLABLE THIEUTH I THIEUTH - 0xBB4C: 0xD30A, //HANGUL SYLLABLE THIEUTH I PHIEUPH - 0xBB4D: 0xD30B, //HANGUL SYLLABLE THIEUTH I HIEUH - 0xBB4E: 0xD30F, //HANGUL SYLLABLE PHIEUPH A KIYEOKSIOS - 0xBB4F: 0xD311, //HANGUL SYLLABLE PHIEUPH A NIEUNCIEUC - 0xBB50: 0xD312, //HANGUL SYLLABLE PHIEUPH A NIEUNHIEUH - 0xBB51: 0xD313, //HANGUL SYLLABLE PHIEUPH A TIKEUT - 0xBB52: 0xD315, //HANGUL SYLLABLE PHIEUPH A RIEULKIYEOK - 0xBB53: 0xD317, //HANGUL SYLLABLE PHIEUPH A RIEULPIEUP - 0xBB54: 0xD318, //HANGUL SYLLABLE PHIEUPH A RIEULSIOS - 0xBB55: 0xD319, //HANGUL SYLLABLE PHIEUPH A RIEULTHIEUTH - 0xBB56: 0xD31A, //HANGUL SYLLABLE PHIEUPH A RIEULPHIEUPH - 0xBB57: 0xD31B, //HANGUL SYLLABLE PHIEUPH A RIEULHIEUH - 0xBB58: 0xD31E, //HANGUL SYLLABLE PHIEUPH A PIEUPSIOS - 0xBB59: 0xD322, //HANGUL SYLLABLE PHIEUPH A CIEUC - 0xBB5A: 0xD323, //HANGUL SYLLABLE PHIEUPH A CHIEUCH - 0xBB61: 0xD324, //HANGUL SYLLABLE PHIEUPH A KHIEUKH - 0xBB62: 0xD326, //HANGUL SYLLABLE PHIEUPH A PHIEUPH - 0xBB63: 0xD327, //HANGUL SYLLABLE PHIEUPH A HIEUH - 0xBB64: 0xD32A, //HANGUL SYLLABLE PHIEUPH AE SSANGKIYEOK - 0xBB65: 0xD32B, //HANGUL SYLLABLE PHIEUPH AE KIYEOKSIOS - 0xBB66: 0xD32D, //HANGUL SYLLABLE PHIEUPH AE NIEUNCIEUC - 0xBB67: 0xD32E, //HANGUL SYLLABLE PHIEUPH AE NIEUNHIEUH - 0xBB68: 0xD32F, //HANGUL SYLLABLE PHIEUPH AE TIKEUT - 0xBB69: 0xD331, //HANGUL SYLLABLE PHIEUPH AE RIEULKIYEOK - 0xBB6A: 0xD332, //HANGUL SYLLABLE PHIEUPH AE RIEULMIEUM - 0xBB6B: 0xD333, //HANGUL SYLLABLE PHIEUPH AE RIEULPIEUP - 0xBB6C: 0xD334, //HANGUL SYLLABLE PHIEUPH AE RIEULSIOS - 0xBB6D: 0xD335, //HANGUL SYLLABLE PHIEUPH AE RIEULTHIEUTH - 0xBB6E: 0xD336, //HANGUL SYLLABLE PHIEUPH AE RIEULPHIEUPH - 0xBB6F: 0xD337, //HANGUL SYLLABLE PHIEUPH AE RIEULHIEUH - 0xBB70: 0xD33A, //HANGUL SYLLABLE PHIEUPH AE PIEUPSIOS - 0xBB71: 0xD33E, //HANGUL SYLLABLE PHIEUPH AE CIEUC - 0xBB72: 0xD33F, //HANGUL SYLLABLE PHIEUPH AE CHIEUCH - 0xBB73: 0xD340, //HANGUL SYLLABLE PHIEUPH AE KHIEUKH - 0xBB74: 0xD341, //HANGUL SYLLABLE PHIEUPH AE THIEUTH - 0xBB75: 0xD342, //HANGUL SYLLABLE PHIEUPH AE PHIEUPH - 0xBB76: 0xD343, //HANGUL SYLLABLE PHIEUPH AE HIEUH - 0xBB77: 0xD346, //HANGUL SYLLABLE PHIEUPH YA SSANGKIYEOK - 0xBB78: 0xD347, //HANGUL SYLLABLE PHIEUPH YA KIYEOKSIOS - 0xBB79: 0xD348, //HANGUL SYLLABLE PHIEUPH YA NIEUN - 0xBB7A: 0xD349, //HANGUL SYLLABLE PHIEUPH YA NIEUNCIEUC - 0xBB81: 0xD34A, //HANGUL SYLLABLE PHIEUPH YA NIEUNHIEUH - 0xBB82: 0xD34B, //HANGUL SYLLABLE PHIEUPH YA TIKEUT - 0xBB83: 0xD34C, //HANGUL SYLLABLE PHIEUPH YA RIEUL - 0xBB84: 0xD34D, //HANGUL SYLLABLE PHIEUPH YA RIEULKIYEOK - 0xBB85: 0xD34E, //HANGUL SYLLABLE PHIEUPH YA RIEULMIEUM - 0xBB86: 0xD34F, //HANGUL SYLLABLE PHIEUPH YA RIEULPIEUP - 0xBB87: 0xD350, //HANGUL SYLLABLE PHIEUPH YA RIEULSIOS - 0xBB88: 0xD351, //HANGUL SYLLABLE PHIEUPH YA RIEULTHIEUTH - 0xBB89: 0xD352, //HANGUL SYLLABLE PHIEUPH YA RIEULPHIEUPH - 0xBB8A: 0xD353, //HANGUL SYLLABLE PHIEUPH YA RIEULHIEUH - 0xBB8B: 0xD354, //HANGUL SYLLABLE PHIEUPH YA MIEUM - 0xBB8C: 0xD355, //HANGUL SYLLABLE PHIEUPH YA PIEUP - 0xBB8D: 0xD356, //HANGUL SYLLABLE PHIEUPH YA PIEUPSIOS - 0xBB8E: 0xD357, //HANGUL SYLLABLE PHIEUPH YA SIOS - 0xBB8F: 0xD358, //HANGUL SYLLABLE PHIEUPH YA SSANGSIOS - 0xBB90: 0xD359, //HANGUL SYLLABLE PHIEUPH YA IEUNG - 0xBB91: 0xD35A, //HANGUL SYLLABLE PHIEUPH YA CIEUC - 0xBB92: 0xD35B, //HANGUL SYLLABLE PHIEUPH YA CHIEUCH - 0xBB93: 0xD35C, //HANGUL SYLLABLE PHIEUPH YA KHIEUKH - 0xBB94: 0xD35D, //HANGUL SYLLABLE PHIEUPH YA THIEUTH - 0xBB95: 0xD35E, //HANGUL SYLLABLE PHIEUPH YA PHIEUPH - 0xBB96: 0xD35F, //HANGUL SYLLABLE PHIEUPH YA HIEUH - 0xBB97: 0xD360, //HANGUL SYLLABLE PHIEUPH YAE - 0xBB98: 0xD361, //HANGUL SYLLABLE PHIEUPH YAE KIYEOK - 0xBB99: 0xD362, //HANGUL SYLLABLE PHIEUPH YAE SSANGKIYEOK - 0xBB9A: 0xD363, //HANGUL SYLLABLE PHIEUPH YAE KIYEOKSIOS - 0xBB9B: 0xD364, //HANGUL SYLLABLE PHIEUPH YAE NIEUN - 0xBB9C: 0xD365, //HANGUL SYLLABLE PHIEUPH YAE NIEUNCIEUC - 0xBB9D: 0xD366, //HANGUL SYLLABLE PHIEUPH YAE NIEUNHIEUH - 0xBB9E: 0xD367, //HANGUL SYLLABLE PHIEUPH YAE TIKEUT - 0xBB9F: 0xD368, //HANGUL SYLLABLE PHIEUPH YAE RIEUL - 0xBBA0: 0xD369, //HANGUL SYLLABLE PHIEUPH YAE RIEULKIYEOK - 0xBBA1: 0xBE68, //HANGUL SYLLABLE SSANGPIEUP A RIEUL - 0xBBA2: 0xBE6A, //HANGUL SYLLABLE SSANGPIEUP A RIEULMIEUM - 0xBBA3: 0xBE70, //HANGUL SYLLABLE SSANGPIEUP A MIEUM - 0xBBA4: 0xBE71, //HANGUL SYLLABLE SSANGPIEUP A PIEUP - 0xBBA5: 0xBE73, //HANGUL SYLLABLE SSANGPIEUP A SIOS - 0xBBA6: 0xBE74, //HANGUL SYLLABLE SSANGPIEUP A SSANGSIOS - 0xBBA7: 0xBE75, //HANGUL SYLLABLE SSANGPIEUP A IEUNG - 0xBBA8: 0xBE7B, //HANGUL SYLLABLE SSANGPIEUP A HIEUH - 0xBBA9: 0xBE7C, //HANGUL SYLLABLE SSANGPIEUP AE - 0xBBAA: 0xBE7D, //HANGUL SYLLABLE SSANGPIEUP AE KIYEOK - 0xBBAB: 0xBE80, //HANGUL SYLLABLE SSANGPIEUP AE NIEUN - 0xBBAC: 0xBE84, //HANGUL SYLLABLE SSANGPIEUP AE RIEUL - 0xBBAD: 0xBE8C, //HANGUL SYLLABLE SSANGPIEUP AE MIEUM - 0xBBAE: 0xBE8D, //HANGUL SYLLABLE SSANGPIEUP AE PIEUP - 0xBBAF: 0xBE8F, //HANGUL SYLLABLE SSANGPIEUP AE SIOS - 0xBBB0: 0xBE90, //HANGUL SYLLABLE SSANGPIEUP AE SSANGSIOS - 0xBBB1: 0xBE91, //HANGUL SYLLABLE SSANGPIEUP AE IEUNG - 0xBBB2: 0xBE98, //HANGUL SYLLABLE SSANGPIEUP YA - 0xBBB3: 0xBE99, //HANGUL SYLLABLE SSANGPIEUP YA KIYEOK - 0xBBB4: 0xBEA8, //HANGUL SYLLABLE SSANGPIEUP YA MIEUM - 0xBBB5: 0xBED0, //HANGUL SYLLABLE SSANGPIEUP EO - 0xBBB6: 0xBED1, //HANGUL SYLLABLE SSANGPIEUP EO KIYEOK - 0xBBB7: 0xBED4, //HANGUL SYLLABLE SSANGPIEUP EO NIEUN - 0xBBB8: 0xBED7, //HANGUL SYLLABLE SSANGPIEUP EO TIKEUT - 0xBBB9: 0xBED8, //HANGUL SYLLABLE SSANGPIEUP EO RIEUL - 0xBBBA: 0xBEE0, //HANGUL SYLLABLE SSANGPIEUP EO MIEUM - 0xBBBB: 0xBEE3, //HANGUL SYLLABLE SSANGPIEUP EO SIOS - 0xBBBC: 0xBEE4, //HANGUL SYLLABLE SSANGPIEUP EO SSANGSIOS - 0xBBBD: 0xBEE5, //HANGUL SYLLABLE SSANGPIEUP EO IEUNG - 0xBBBE: 0xBEEC, //HANGUL SYLLABLE SSANGPIEUP E - 0xBBBF: 0xBF01, //HANGUL SYLLABLE SSANGPIEUP E IEUNG - 0xBBC0: 0xBF08, //HANGUL SYLLABLE SSANGPIEUP YEO - 0xBBC1: 0xBF09, //HANGUL SYLLABLE SSANGPIEUP YEO KIYEOK - 0xBBC2: 0xBF18, //HANGUL SYLLABLE SSANGPIEUP YEO MIEUM - 0xBBC3: 0xBF19, //HANGUL SYLLABLE SSANGPIEUP YEO PIEUP - 0xBBC4: 0xBF1B, //HANGUL SYLLABLE SSANGPIEUP YEO SIOS - 0xBBC5: 0xBF1C, //HANGUL SYLLABLE SSANGPIEUP YEO SSANGSIOS - 0xBBC6: 0xBF1D, //HANGUL SYLLABLE SSANGPIEUP YEO IEUNG - 0xBBC7: 0xBF40, //HANGUL SYLLABLE SSANGPIEUP O - 0xBBC8: 0xBF41, //HANGUL SYLLABLE SSANGPIEUP O KIYEOK - 0xBBC9: 0xBF44, //HANGUL SYLLABLE SSANGPIEUP O NIEUN - 0xBBCA: 0xBF48, //HANGUL SYLLABLE SSANGPIEUP O RIEUL - 0xBBCB: 0xBF50, //HANGUL SYLLABLE SSANGPIEUP O MIEUM - 0xBBCC: 0xBF51, //HANGUL SYLLABLE SSANGPIEUP O PIEUP - 0xBBCD: 0xBF55, //HANGUL SYLLABLE SSANGPIEUP O IEUNG - 0xBBCE: 0xBF94, //HANGUL SYLLABLE SSANGPIEUP OE - 0xBBCF: 0xBFB0, //HANGUL SYLLABLE SSANGPIEUP YO - 0xBBD0: 0xBFC5, //HANGUL SYLLABLE SSANGPIEUP YO IEUNG - 0xBBD1: 0xBFCC, //HANGUL SYLLABLE SSANGPIEUP U - 0xBBD2: 0xBFCD, //HANGUL SYLLABLE SSANGPIEUP U KIYEOK - 0xBBD3: 0xBFD0, //HANGUL SYLLABLE SSANGPIEUP U NIEUN - 0xBBD4: 0xBFD4, //HANGUL SYLLABLE SSANGPIEUP U RIEUL - 0xBBD5: 0xBFDC, //HANGUL SYLLABLE SSANGPIEUP U MIEUM - 0xBBD6: 0xBFDF, //HANGUL SYLLABLE SSANGPIEUP U SIOS - 0xBBD7: 0xBFE1, //HANGUL SYLLABLE SSANGPIEUP U IEUNG - 0xBBD8: 0xC03C, //HANGUL SYLLABLE SSANGPIEUP YU - 0xBBD9: 0xC051, //HANGUL SYLLABLE SSANGPIEUP YU IEUNG - 0xBBDA: 0xC058, //HANGUL SYLLABLE SSANGPIEUP EU - 0xBBDB: 0xC05C, //HANGUL SYLLABLE SSANGPIEUP EU NIEUN - 0xBBDC: 0xC060, //HANGUL SYLLABLE SSANGPIEUP EU RIEUL - 0xBBDD: 0xC068, //HANGUL SYLLABLE SSANGPIEUP EU MIEUM - 0xBBDE: 0xC069, //HANGUL SYLLABLE SSANGPIEUP EU PIEUP - 0xBBDF: 0xC090, //HANGUL SYLLABLE SSANGPIEUP I - 0xBBE0: 0xC091, //HANGUL SYLLABLE SSANGPIEUP I KIYEOK - 0xBBE1: 0xC094, //HANGUL SYLLABLE SSANGPIEUP I NIEUN - 0xBBE2: 0xC098, //HANGUL SYLLABLE SSANGPIEUP I RIEUL - 0xBBE3: 0xC0A0, //HANGUL SYLLABLE SSANGPIEUP I MIEUM - 0xBBE4: 0xC0A1, //HANGUL SYLLABLE SSANGPIEUP I PIEUP - 0xBBE5: 0xC0A3, //HANGUL SYLLABLE SSANGPIEUP I SIOS - 0xBBE6: 0xC0A5, //HANGUL SYLLABLE SSANGPIEUP I IEUNG - 0xBBE7: 0xC0AC, //HANGUL SYLLABLE SIOS A - 0xBBE8: 0xC0AD, //HANGUL SYLLABLE SIOS A KIYEOK - 0xBBE9: 0xC0AF, //HANGUL SYLLABLE SIOS A KIYEOKSIOS - 0xBBEA: 0xC0B0, //HANGUL SYLLABLE SIOS A NIEUN - 0xBBEB: 0xC0B3, //HANGUL SYLLABLE SIOS A TIKEUT - 0xBBEC: 0xC0B4, //HANGUL SYLLABLE SIOS A RIEUL - 0xBBED: 0xC0B5, //HANGUL SYLLABLE SIOS A RIEULKIYEOK - 0xBBEE: 0xC0B6, //HANGUL SYLLABLE SIOS A RIEULMIEUM - 0xBBEF: 0xC0BC, //HANGUL SYLLABLE SIOS A MIEUM - 0xBBF0: 0xC0BD, //HANGUL SYLLABLE SIOS A PIEUP - 0xBBF1: 0xC0BF, //HANGUL SYLLABLE SIOS A SIOS - 0xBBF2: 0xC0C0, //HANGUL SYLLABLE SIOS A SSANGSIOS - 0xBBF3: 0xC0C1, //HANGUL SYLLABLE SIOS A IEUNG - 0xBBF4: 0xC0C5, //HANGUL SYLLABLE SIOS A THIEUTH - 0xBBF5: 0xC0C8, //HANGUL SYLLABLE SIOS AE - 0xBBF6: 0xC0C9, //HANGUL SYLLABLE SIOS AE KIYEOK - 0xBBF7: 0xC0CC, //HANGUL SYLLABLE SIOS AE NIEUN - 0xBBF8: 0xC0D0, //HANGUL SYLLABLE SIOS AE RIEUL - 0xBBF9: 0xC0D8, //HANGUL SYLLABLE SIOS AE MIEUM - 0xBBFA: 0xC0D9, //HANGUL SYLLABLE SIOS AE PIEUP - 0xBBFB: 0xC0DB, //HANGUL SYLLABLE SIOS AE SIOS - 0xBBFC: 0xC0DC, //HANGUL SYLLABLE SIOS AE SSANGSIOS - 0xBBFD: 0xC0DD, //HANGUL SYLLABLE SIOS AE IEUNG - 0xBBFE: 0xC0E4, //HANGUL SYLLABLE SIOS YA - 0xBC41: 0xD36A, //HANGUL SYLLABLE PHIEUPH YAE RIEULMIEUM - 0xBC42: 0xD36B, //HANGUL SYLLABLE PHIEUPH YAE RIEULPIEUP - 0xBC43: 0xD36C, //HANGUL SYLLABLE PHIEUPH YAE RIEULSIOS - 0xBC44: 0xD36D, //HANGUL SYLLABLE PHIEUPH YAE RIEULTHIEUTH - 0xBC45: 0xD36E, //HANGUL SYLLABLE PHIEUPH YAE RIEULPHIEUPH - 0xBC46: 0xD36F, //HANGUL SYLLABLE PHIEUPH YAE RIEULHIEUH - 0xBC47: 0xD370, //HANGUL SYLLABLE PHIEUPH YAE MIEUM - 0xBC48: 0xD371, //HANGUL SYLLABLE PHIEUPH YAE PIEUP - 0xBC49: 0xD372, //HANGUL SYLLABLE PHIEUPH YAE PIEUPSIOS - 0xBC4A: 0xD373, //HANGUL SYLLABLE PHIEUPH YAE SIOS - 0xBC4B: 0xD374, //HANGUL SYLLABLE PHIEUPH YAE SSANGSIOS - 0xBC4C: 0xD375, //HANGUL SYLLABLE PHIEUPH YAE IEUNG - 0xBC4D: 0xD376, //HANGUL SYLLABLE PHIEUPH YAE CIEUC - 0xBC4E: 0xD377, //HANGUL SYLLABLE PHIEUPH YAE CHIEUCH - 0xBC4F: 0xD378, //HANGUL SYLLABLE PHIEUPH YAE KHIEUKH - 0xBC50: 0xD379, //HANGUL SYLLABLE PHIEUPH YAE THIEUTH - 0xBC51: 0xD37A, //HANGUL SYLLABLE PHIEUPH YAE PHIEUPH - 0xBC52: 0xD37B, //HANGUL SYLLABLE PHIEUPH YAE HIEUH - 0xBC53: 0xD37E, //HANGUL SYLLABLE PHIEUPH EO SSANGKIYEOK - 0xBC54: 0xD37F, //HANGUL SYLLABLE PHIEUPH EO KIYEOKSIOS - 0xBC55: 0xD381, //HANGUL SYLLABLE PHIEUPH EO NIEUNCIEUC - 0xBC56: 0xD382, //HANGUL SYLLABLE PHIEUPH EO NIEUNHIEUH - 0xBC57: 0xD383, //HANGUL SYLLABLE PHIEUPH EO TIKEUT - 0xBC58: 0xD385, //HANGUL SYLLABLE PHIEUPH EO RIEULKIYEOK - 0xBC59: 0xD386, //HANGUL SYLLABLE PHIEUPH EO RIEULMIEUM - 0xBC5A: 0xD387, //HANGUL SYLLABLE PHIEUPH EO RIEULPIEUP - 0xBC61: 0xD388, //HANGUL SYLLABLE PHIEUPH EO RIEULSIOS - 0xBC62: 0xD389, //HANGUL SYLLABLE PHIEUPH EO RIEULTHIEUTH - 0xBC63: 0xD38A, //HANGUL SYLLABLE PHIEUPH EO RIEULPHIEUPH - 0xBC64: 0xD38B, //HANGUL SYLLABLE PHIEUPH EO RIEULHIEUH - 0xBC65: 0xD38E, //HANGUL SYLLABLE PHIEUPH EO PIEUPSIOS - 0xBC66: 0xD392, //HANGUL SYLLABLE PHIEUPH EO CIEUC - 0xBC67: 0xD393, //HANGUL SYLLABLE PHIEUPH EO CHIEUCH - 0xBC68: 0xD394, //HANGUL SYLLABLE PHIEUPH EO KHIEUKH - 0xBC69: 0xD395, //HANGUL SYLLABLE PHIEUPH EO THIEUTH - 0xBC6A: 0xD396, //HANGUL SYLLABLE PHIEUPH EO PHIEUPH - 0xBC6B: 0xD397, //HANGUL SYLLABLE PHIEUPH EO HIEUH - 0xBC6C: 0xD39A, //HANGUL SYLLABLE PHIEUPH E SSANGKIYEOK - 0xBC6D: 0xD39B, //HANGUL SYLLABLE PHIEUPH E KIYEOKSIOS - 0xBC6E: 0xD39D, //HANGUL SYLLABLE PHIEUPH E NIEUNCIEUC - 0xBC6F: 0xD39E, //HANGUL SYLLABLE PHIEUPH E NIEUNHIEUH - 0xBC70: 0xD39F, //HANGUL SYLLABLE PHIEUPH E TIKEUT - 0xBC71: 0xD3A1, //HANGUL SYLLABLE PHIEUPH E RIEULKIYEOK - 0xBC72: 0xD3A2, //HANGUL SYLLABLE PHIEUPH E RIEULMIEUM - 0xBC73: 0xD3A3, //HANGUL SYLLABLE PHIEUPH E RIEULPIEUP - 0xBC74: 0xD3A4, //HANGUL SYLLABLE PHIEUPH E RIEULSIOS - 0xBC75: 0xD3A5, //HANGUL SYLLABLE PHIEUPH E RIEULTHIEUTH - 0xBC76: 0xD3A6, //HANGUL SYLLABLE PHIEUPH E RIEULPHIEUPH - 0xBC77: 0xD3A7, //HANGUL SYLLABLE PHIEUPH E RIEULHIEUH - 0xBC78: 0xD3AA, //HANGUL SYLLABLE PHIEUPH E PIEUPSIOS - 0xBC79: 0xD3AC, //HANGUL SYLLABLE PHIEUPH E SSANGSIOS - 0xBC7A: 0xD3AE, //HANGUL SYLLABLE PHIEUPH E CIEUC - 0xBC81: 0xD3AF, //HANGUL SYLLABLE PHIEUPH E CHIEUCH - 0xBC82: 0xD3B0, //HANGUL SYLLABLE PHIEUPH E KHIEUKH - 0xBC83: 0xD3B1, //HANGUL SYLLABLE PHIEUPH E THIEUTH - 0xBC84: 0xD3B2, //HANGUL SYLLABLE PHIEUPH E PHIEUPH - 0xBC85: 0xD3B3, //HANGUL SYLLABLE PHIEUPH E HIEUH - 0xBC86: 0xD3B5, //HANGUL SYLLABLE PHIEUPH YEO KIYEOK - 0xBC87: 0xD3B6, //HANGUL SYLLABLE PHIEUPH YEO SSANGKIYEOK - 0xBC88: 0xD3B7, //HANGUL SYLLABLE PHIEUPH YEO KIYEOKSIOS - 0xBC89: 0xD3B9, //HANGUL SYLLABLE PHIEUPH YEO NIEUNCIEUC - 0xBC8A: 0xD3BA, //HANGUL SYLLABLE PHIEUPH YEO NIEUNHIEUH - 0xBC8B: 0xD3BB, //HANGUL SYLLABLE PHIEUPH YEO TIKEUT - 0xBC8C: 0xD3BD, //HANGUL SYLLABLE PHIEUPH YEO RIEULKIYEOK - 0xBC8D: 0xD3BE, //HANGUL SYLLABLE PHIEUPH YEO RIEULMIEUM - 0xBC8E: 0xD3BF, //HANGUL SYLLABLE PHIEUPH YEO RIEULPIEUP - 0xBC8F: 0xD3C0, //HANGUL SYLLABLE PHIEUPH YEO RIEULSIOS - 0xBC90: 0xD3C1, //HANGUL SYLLABLE PHIEUPH YEO RIEULTHIEUTH - 0xBC91: 0xD3C2, //HANGUL SYLLABLE PHIEUPH YEO RIEULPHIEUPH - 0xBC92: 0xD3C3, //HANGUL SYLLABLE PHIEUPH YEO RIEULHIEUH - 0xBC93: 0xD3C6, //HANGUL SYLLABLE PHIEUPH YEO PIEUPSIOS - 0xBC94: 0xD3C7, //HANGUL SYLLABLE PHIEUPH YEO SIOS - 0xBC95: 0xD3CA, //HANGUL SYLLABLE PHIEUPH YEO CIEUC - 0xBC96: 0xD3CB, //HANGUL SYLLABLE PHIEUPH YEO CHIEUCH - 0xBC97: 0xD3CC, //HANGUL SYLLABLE PHIEUPH YEO KHIEUKH - 0xBC98: 0xD3CD, //HANGUL SYLLABLE PHIEUPH YEO THIEUTH - 0xBC99: 0xD3CE, //HANGUL SYLLABLE PHIEUPH YEO PHIEUPH - 0xBC9A: 0xD3CF, //HANGUL SYLLABLE PHIEUPH YEO HIEUH - 0xBC9B: 0xD3D1, //HANGUL SYLLABLE PHIEUPH YE KIYEOK - 0xBC9C: 0xD3D2, //HANGUL SYLLABLE PHIEUPH YE SSANGKIYEOK - 0xBC9D: 0xD3D3, //HANGUL SYLLABLE PHIEUPH YE KIYEOKSIOS - 0xBC9E: 0xD3D4, //HANGUL SYLLABLE PHIEUPH YE NIEUN - 0xBC9F: 0xD3D5, //HANGUL SYLLABLE PHIEUPH YE NIEUNCIEUC - 0xBCA0: 0xD3D6, //HANGUL SYLLABLE PHIEUPH YE NIEUNHIEUH - 0xBCA1: 0xC0E5, //HANGUL SYLLABLE SIOS YA KIYEOK - 0xBCA2: 0xC0E8, //HANGUL SYLLABLE SIOS YA NIEUN - 0xBCA3: 0xC0EC, //HANGUL SYLLABLE SIOS YA RIEUL - 0xBCA4: 0xC0F4, //HANGUL SYLLABLE SIOS YA MIEUM - 0xBCA5: 0xC0F5, //HANGUL SYLLABLE SIOS YA PIEUP - 0xBCA6: 0xC0F7, //HANGUL SYLLABLE SIOS YA SIOS - 0xBCA7: 0xC0F9, //HANGUL SYLLABLE SIOS YA IEUNG - 0xBCA8: 0xC100, //HANGUL SYLLABLE SIOS YAE - 0xBCA9: 0xC104, //HANGUL SYLLABLE SIOS YAE NIEUN - 0xBCAA: 0xC108, //HANGUL SYLLABLE SIOS YAE RIEUL - 0xBCAB: 0xC110, //HANGUL SYLLABLE SIOS YAE MIEUM - 0xBCAC: 0xC115, //HANGUL SYLLABLE SIOS YAE IEUNG - 0xBCAD: 0xC11C, //HANGUL SYLLABLE SIOS EO - 0xBCAE: 0xC11D, //HANGUL SYLLABLE SIOS EO KIYEOK - 0xBCAF: 0xC11E, //HANGUL SYLLABLE SIOS EO SSANGKIYEOK - 0xBCB0: 0xC11F, //HANGUL SYLLABLE SIOS EO KIYEOKSIOS - 0xBCB1: 0xC120, //HANGUL SYLLABLE SIOS EO NIEUN - 0xBCB2: 0xC123, //HANGUL SYLLABLE SIOS EO TIKEUT - 0xBCB3: 0xC124, //HANGUL SYLLABLE SIOS EO RIEUL - 0xBCB4: 0xC126, //HANGUL SYLLABLE SIOS EO RIEULMIEUM - 0xBCB5: 0xC127, //HANGUL SYLLABLE SIOS EO RIEULPIEUP - 0xBCB6: 0xC12C, //HANGUL SYLLABLE SIOS EO MIEUM - 0xBCB7: 0xC12D, //HANGUL SYLLABLE SIOS EO PIEUP - 0xBCB8: 0xC12F, //HANGUL SYLLABLE SIOS EO SIOS - 0xBCB9: 0xC130, //HANGUL SYLLABLE SIOS EO SSANGSIOS - 0xBCBA: 0xC131, //HANGUL SYLLABLE SIOS EO IEUNG - 0xBCBB: 0xC136, //HANGUL SYLLABLE SIOS EO PHIEUPH - 0xBCBC: 0xC138, //HANGUL SYLLABLE SIOS E - 0xBCBD: 0xC139, //HANGUL SYLLABLE SIOS E KIYEOK - 0xBCBE: 0xC13C, //HANGUL SYLLABLE SIOS E NIEUN - 0xBCBF: 0xC140, //HANGUL SYLLABLE SIOS E RIEUL - 0xBCC0: 0xC148, //HANGUL SYLLABLE SIOS E MIEUM - 0xBCC1: 0xC149, //HANGUL SYLLABLE SIOS E PIEUP - 0xBCC2: 0xC14B, //HANGUL SYLLABLE SIOS E SIOS - 0xBCC3: 0xC14C, //HANGUL SYLLABLE SIOS E SSANGSIOS - 0xBCC4: 0xC14D, //HANGUL SYLLABLE SIOS E IEUNG - 0xBCC5: 0xC154, //HANGUL SYLLABLE SIOS YEO - 0xBCC6: 0xC155, //HANGUL SYLLABLE SIOS YEO KIYEOK - 0xBCC7: 0xC158, //HANGUL SYLLABLE SIOS YEO NIEUN - 0xBCC8: 0xC15C, //HANGUL SYLLABLE SIOS YEO RIEUL - 0xBCC9: 0xC164, //HANGUL SYLLABLE SIOS YEO MIEUM - 0xBCCA: 0xC165, //HANGUL SYLLABLE SIOS YEO PIEUP - 0xBCCB: 0xC167, //HANGUL SYLLABLE SIOS YEO SIOS - 0xBCCC: 0xC168, //HANGUL SYLLABLE SIOS YEO SSANGSIOS - 0xBCCD: 0xC169, //HANGUL SYLLABLE SIOS YEO IEUNG - 0xBCCE: 0xC170, //HANGUL SYLLABLE SIOS YE - 0xBCCF: 0xC174, //HANGUL SYLLABLE SIOS YE NIEUN - 0xBCD0: 0xC178, //HANGUL SYLLABLE SIOS YE RIEUL - 0xBCD1: 0xC185, //HANGUL SYLLABLE SIOS YE IEUNG - 0xBCD2: 0xC18C, //HANGUL SYLLABLE SIOS O - 0xBCD3: 0xC18D, //HANGUL SYLLABLE SIOS O KIYEOK - 0xBCD4: 0xC18E, //HANGUL SYLLABLE SIOS O SSANGKIYEOK - 0xBCD5: 0xC190, //HANGUL SYLLABLE SIOS O NIEUN - 0xBCD6: 0xC194, //HANGUL SYLLABLE SIOS O RIEUL - 0xBCD7: 0xC196, //HANGUL SYLLABLE SIOS O RIEULMIEUM - 0xBCD8: 0xC19C, //HANGUL SYLLABLE SIOS O MIEUM - 0xBCD9: 0xC19D, //HANGUL SYLLABLE SIOS O PIEUP - 0xBCDA: 0xC19F, //HANGUL SYLLABLE SIOS O SIOS - 0xBCDB: 0xC1A1, //HANGUL SYLLABLE SIOS O IEUNG - 0xBCDC: 0xC1A5, //HANGUL SYLLABLE SIOS O THIEUTH - 0xBCDD: 0xC1A8, //HANGUL SYLLABLE SIOS WA - 0xBCDE: 0xC1A9, //HANGUL SYLLABLE SIOS WA KIYEOK - 0xBCDF: 0xC1AC, //HANGUL SYLLABLE SIOS WA NIEUN - 0xBCE0: 0xC1B0, //HANGUL SYLLABLE SIOS WA RIEUL - 0xBCE1: 0xC1BD, //HANGUL SYLLABLE SIOS WA IEUNG - 0xBCE2: 0xC1C4, //HANGUL SYLLABLE SIOS WAE - 0xBCE3: 0xC1C8, //HANGUL SYLLABLE SIOS WAE NIEUN - 0xBCE4: 0xC1CC, //HANGUL SYLLABLE SIOS WAE RIEUL - 0xBCE5: 0xC1D4, //HANGUL SYLLABLE SIOS WAE MIEUM - 0xBCE6: 0xC1D7, //HANGUL SYLLABLE SIOS WAE SIOS - 0xBCE7: 0xC1D8, //HANGUL SYLLABLE SIOS WAE SSANGSIOS - 0xBCE8: 0xC1E0, //HANGUL SYLLABLE SIOS OE - 0xBCE9: 0xC1E4, //HANGUL SYLLABLE SIOS OE NIEUN - 0xBCEA: 0xC1E8, //HANGUL SYLLABLE SIOS OE RIEUL - 0xBCEB: 0xC1F0, //HANGUL SYLLABLE SIOS OE MIEUM - 0xBCEC: 0xC1F1, //HANGUL SYLLABLE SIOS OE PIEUP - 0xBCED: 0xC1F3, //HANGUL SYLLABLE SIOS OE SIOS - 0xBCEE: 0xC1FC, //HANGUL SYLLABLE SIOS YO - 0xBCEF: 0xC1FD, //HANGUL SYLLABLE SIOS YO KIYEOK - 0xBCF0: 0xC200, //HANGUL SYLLABLE SIOS YO NIEUN - 0xBCF1: 0xC204, //HANGUL SYLLABLE SIOS YO RIEUL - 0xBCF2: 0xC20C, //HANGUL SYLLABLE SIOS YO MIEUM - 0xBCF3: 0xC20D, //HANGUL SYLLABLE SIOS YO PIEUP - 0xBCF4: 0xC20F, //HANGUL SYLLABLE SIOS YO SIOS - 0xBCF5: 0xC211, //HANGUL SYLLABLE SIOS YO IEUNG - 0xBCF6: 0xC218, //HANGUL SYLLABLE SIOS U - 0xBCF7: 0xC219, //HANGUL SYLLABLE SIOS U KIYEOK - 0xBCF8: 0xC21C, //HANGUL SYLLABLE SIOS U NIEUN - 0xBCF9: 0xC21F, //HANGUL SYLLABLE SIOS U TIKEUT - 0xBCFA: 0xC220, //HANGUL SYLLABLE SIOS U RIEUL - 0xBCFB: 0xC228, //HANGUL SYLLABLE SIOS U MIEUM - 0xBCFC: 0xC229, //HANGUL SYLLABLE SIOS U PIEUP - 0xBCFD: 0xC22B, //HANGUL SYLLABLE SIOS U SIOS - 0xBCFE: 0xC22D, //HANGUL SYLLABLE SIOS U IEUNG - 0xBD41: 0xD3D7, //HANGUL SYLLABLE PHIEUPH YE TIKEUT - 0xBD42: 0xD3D9, //HANGUL SYLLABLE PHIEUPH YE RIEULKIYEOK - 0xBD43: 0xD3DA, //HANGUL SYLLABLE PHIEUPH YE RIEULMIEUM - 0xBD44: 0xD3DB, //HANGUL SYLLABLE PHIEUPH YE RIEULPIEUP - 0xBD45: 0xD3DC, //HANGUL SYLLABLE PHIEUPH YE RIEULSIOS - 0xBD46: 0xD3DD, //HANGUL SYLLABLE PHIEUPH YE RIEULTHIEUTH - 0xBD47: 0xD3DE, //HANGUL SYLLABLE PHIEUPH YE RIEULPHIEUPH - 0xBD48: 0xD3DF, //HANGUL SYLLABLE PHIEUPH YE RIEULHIEUH - 0xBD49: 0xD3E0, //HANGUL SYLLABLE PHIEUPH YE MIEUM - 0xBD4A: 0xD3E2, //HANGUL SYLLABLE PHIEUPH YE PIEUPSIOS - 0xBD4B: 0xD3E4, //HANGUL SYLLABLE PHIEUPH YE SSANGSIOS - 0xBD4C: 0xD3E5, //HANGUL SYLLABLE PHIEUPH YE IEUNG - 0xBD4D: 0xD3E6, //HANGUL SYLLABLE PHIEUPH YE CIEUC - 0xBD4E: 0xD3E7, //HANGUL SYLLABLE PHIEUPH YE CHIEUCH - 0xBD4F: 0xD3E8, //HANGUL SYLLABLE PHIEUPH YE KHIEUKH - 0xBD50: 0xD3E9, //HANGUL SYLLABLE PHIEUPH YE THIEUTH - 0xBD51: 0xD3EA, //HANGUL SYLLABLE PHIEUPH YE PHIEUPH - 0xBD52: 0xD3EB, //HANGUL SYLLABLE PHIEUPH YE HIEUH - 0xBD53: 0xD3EE, //HANGUL SYLLABLE PHIEUPH O SSANGKIYEOK - 0xBD54: 0xD3EF, //HANGUL SYLLABLE PHIEUPH O KIYEOKSIOS - 0xBD55: 0xD3F1, //HANGUL SYLLABLE PHIEUPH O NIEUNCIEUC - 0xBD56: 0xD3F2, //HANGUL SYLLABLE PHIEUPH O NIEUNHIEUH - 0xBD57: 0xD3F3, //HANGUL SYLLABLE PHIEUPH O TIKEUT - 0xBD58: 0xD3F5, //HANGUL SYLLABLE PHIEUPH O RIEULKIYEOK - 0xBD59: 0xD3F6, //HANGUL SYLLABLE PHIEUPH O RIEULMIEUM - 0xBD5A: 0xD3F7, //HANGUL SYLLABLE PHIEUPH O RIEULPIEUP - 0xBD61: 0xD3F8, //HANGUL SYLLABLE PHIEUPH O RIEULSIOS - 0xBD62: 0xD3F9, //HANGUL SYLLABLE PHIEUPH O RIEULTHIEUTH - 0xBD63: 0xD3FA, //HANGUL SYLLABLE PHIEUPH O RIEULPHIEUPH - 0xBD64: 0xD3FB, //HANGUL SYLLABLE PHIEUPH O RIEULHIEUH - 0xBD65: 0xD3FE, //HANGUL SYLLABLE PHIEUPH O PIEUPSIOS - 0xBD66: 0xD400, //HANGUL SYLLABLE PHIEUPH O SSANGSIOS - 0xBD67: 0xD402, //HANGUL SYLLABLE PHIEUPH O CIEUC - 0xBD68: 0xD403, //HANGUL SYLLABLE PHIEUPH O CHIEUCH - 0xBD69: 0xD404, //HANGUL SYLLABLE PHIEUPH O KHIEUKH - 0xBD6A: 0xD405, //HANGUL SYLLABLE PHIEUPH O THIEUTH - 0xBD6B: 0xD406, //HANGUL SYLLABLE PHIEUPH O PHIEUPH - 0xBD6C: 0xD407, //HANGUL SYLLABLE PHIEUPH O HIEUH - 0xBD6D: 0xD409, //HANGUL SYLLABLE PHIEUPH WA KIYEOK - 0xBD6E: 0xD40A, //HANGUL SYLLABLE PHIEUPH WA SSANGKIYEOK - 0xBD6F: 0xD40B, //HANGUL SYLLABLE PHIEUPH WA KIYEOKSIOS - 0xBD70: 0xD40C, //HANGUL SYLLABLE PHIEUPH WA NIEUN - 0xBD71: 0xD40D, //HANGUL SYLLABLE PHIEUPH WA NIEUNCIEUC - 0xBD72: 0xD40E, //HANGUL SYLLABLE PHIEUPH WA NIEUNHIEUH - 0xBD73: 0xD40F, //HANGUL SYLLABLE PHIEUPH WA TIKEUT - 0xBD74: 0xD410, //HANGUL SYLLABLE PHIEUPH WA RIEUL - 0xBD75: 0xD411, //HANGUL SYLLABLE PHIEUPH WA RIEULKIYEOK - 0xBD76: 0xD412, //HANGUL SYLLABLE PHIEUPH WA RIEULMIEUM - 0xBD77: 0xD413, //HANGUL SYLLABLE PHIEUPH WA RIEULPIEUP - 0xBD78: 0xD414, //HANGUL SYLLABLE PHIEUPH WA RIEULSIOS - 0xBD79: 0xD415, //HANGUL SYLLABLE PHIEUPH WA RIEULTHIEUTH - 0xBD7A: 0xD416, //HANGUL SYLLABLE PHIEUPH WA RIEULPHIEUPH - 0xBD81: 0xD417, //HANGUL SYLLABLE PHIEUPH WA RIEULHIEUH - 0xBD82: 0xD418, //HANGUL SYLLABLE PHIEUPH WA MIEUM - 0xBD83: 0xD419, //HANGUL SYLLABLE PHIEUPH WA PIEUP - 0xBD84: 0xD41A, //HANGUL SYLLABLE PHIEUPH WA PIEUPSIOS - 0xBD85: 0xD41B, //HANGUL SYLLABLE PHIEUPH WA SIOS - 0xBD86: 0xD41C, //HANGUL SYLLABLE PHIEUPH WA SSANGSIOS - 0xBD87: 0xD41E, //HANGUL SYLLABLE PHIEUPH WA CIEUC - 0xBD88: 0xD41F, //HANGUL SYLLABLE PHIEUPH WA CHIEUCH - 0xBD89: 0xD420, //HANGUL SYLLABLE PHIEUPH WA KHIEUKH - 0xBD8A: 0xD421, //HANGUL SYLLABLE PHIEUPH WA THIEUTH - 0xBD8B: 0xD422, //HANGUL SYLLABLE PHIEUPH WA PHIEUPH - 0xBD8C: 0xD423, //HANGUL SYLLABLE PHIEUPH WA HIEUH - 0xBD8D: 0xD424, //HANGUL SYLLABLE PHIEUPH WAE - 0xBD8E: 0xD425, //HANGUL SYLLABLE PHIEUPH WAE KIYEOK - 0xBD8F: 0xD426, //HANGUL SYLLABLE PHIEUPH WAE SSANGKIYEOK - 0xBD90: 0xD427, //HANGUL SYLLABLE PHIEUPH WAE KIYEOKSIOS - 0xBD91: 0xD428, //HANGUL SYLLABLE PHIEUPH WAE NIEUN - 0xBD92: 0xD429, //HANGUL SYLLABLE PHIEUPH WAE NIEUNCIEUC - 0xBD93: 0xD42A, //HANGUL SYLLABLE PHIEUPH WAE NIEUNHIEUH - 0xBD94: 0xD42B, //HANGUL SYLLABLE PHIEUPH WAE TIKEUT - 0xBD95: 0xD42C, //HANGUL SYLLABLE PHIEUPH WAE RIEUL - 0xBD96: 0xD42D, //HANGUL SYLLABLE PHIEUPH WAE RIEULKIYEOK - 0xBD97: 0xD42E, //HANGUL SYLLABLE PHIEUPH WAE RIEULMIEUM - 0xBD98: 0xD42F, //HANGUL SYLLABLE PHIEUPH WAE RIEULPIEUP - 0xBD99: 0xD430, //HANGUL SYLLABLE PHIEUPH WAE RIEULSIOS - 0xBD9A: 0xD431, //HANGUL SYLLABLE PHIEUPH WAE RIEULTHIEUTH - 0xBD9B: 0xD432, //HANGUL SYLLABLE PHIEUPH WAE RIEULPHIEUPH - 0xBD9C: 0xD433, //HANGUL SYLLABLE PHIEUPH WAE RIEULHIEUH - 0xBD9D: 0xD434, //HANGUL SYLLABLE PHIEUPH WAE MIEUM - 0xBD9E: 0xD435, //HANGUL SYLLABLE PHIEUPH WAE PIEUP - 0xBD9F: 0xD436, //HANGUL SYLLABLE PHIEUPH WAE PIEUPSIOS - 0xBDA0: 0xD437, //HANGUL SYLLABLE PHIEUPH WAE SIOS - 0xBDA1: 0xC22F, //HANGUL SYLLABLE SIOS U CHIEUCH - 0xBDA2: 0xC231, //HANGUL SYLLABLE SIOS U THIEUTH - 0xBDA3: 0xC232, //HANGUL SYLLABLE SIOS U PHIEUPH - 0xBDA4: 0xC234, //HANGUL SYLLABLE SIOS WEO - 0xBDA5: 0xC248, //HANGUL SYLLABLE SIOS WEO SSANGSIOS - 0xBDA6: 0xC250, //HANGUL SYLLABLE SIOS WE - 0xBDA7: 0xC251, //HANGUL SYLLABLE SIOS WE KIYEOK - 0xBDA8: 0xC254, //HANGUL SYLLABLE SIOS WE NIEUN - 0xBDA9: 0xC258, //HANGUL SYLLABLE SIOS WE RIEUL - 0xBDAA: 0xC260, //HANGUL SYLLABLE SIOS WE MIEUM - 0xBDAB: 0xC265, //HANGUL SYLLABLE SIOS WE IEUNG - 0xBDAC: 0xC26C, //HANGUL SYLLABLE SIOS WI - 0xBDAD: 0xC26D, //HANGUL SYLLABLE SIOS WI KIYEOK - 0xBDAE: 0xC270, //HANGUL SYLLABLE SIOS WI NIEUN - 0xBDAF: 0xC274, //HANGUL SYLLABLE SIOS WI RIEUL - 0xBDB0: 0xC27C, //HANGUL SYLLABLE SIOS WI MIEUM - 0xBDB1: 0xC27D, //HANGUL SYLLABLE SIOS WI PIEUP - 0xBDB2: 0xC27F, //HANGUL SYLLABLE SIOS WI SIOS - 0xBDB3: 0xC281, //HANGUL SYLLABLE SIOS WI IEUNG - 0xBDB4: 0xC288, //HANGUL SYLLABLE SIOS YU - 0xBDB5: 0xC289, //HANGUL SYLLABLE SIOS YU KIYEOK - 0xBDB6: 0xC290, //HANGUL SYLLABLE SIOS YU RIEUL - 0xBDB7: 0xC298, //HANGUL SYLLABLE SIOS YU MIEUM - 0xBDB8: 0xC29B, //HANGUL SYLLABLE SIOS YU SIOS - 0xBDB9: 0xC29D, //HANGUL SYLLABLE SIOS YU IEUNG - 0xBDBA: 0xC2A4, //HANGUL SYLLABLE SIOS EU - 0xBDBB: 0xC2A5, //HANGUL SYLLABLE SIOS EU KIYEOK - 0xBDBC: 0xC2A8, //HANGUL SYLLABLE SIOS EU NIEUN - 0xBDBD: 0xC2AC, //HANGUL SYLLABLE SIOS EU RIEUL - 0xBDBE: 0xC2AD, //HANGUL SYLLABLE SIOS EU RIEULKIYEOK - 0xBDBF: 0xC2B4, //HANGUL SYLLABLE SIOS EU MIEUM - 0xBDC0: 0xC2B5, //HANGUL SYLLABLE SIOS EU PIEUP - 0xBDC1: 0xC2B7, //HANGUL SYLLABLE SIOS EU SIOS - 0xBDC2: 0xC2B9, //HANGUL SYLLABLE SIOS EU IEUNG - 0xBDC3: 0xC2DC, //HANGUL SYLLABLE SIOS I - 0xBDC4: 0xC2DD, //HANGUL SYLLABLE SIOS I KIYEOK - 0xBDC5: 0xC2E0, //HANGUL SYLLABLE SIOS I NIEUN - 0xBDC6: 0xC2E3, //HANGUL SYLLABLE SIOS I TIKEUT - 0xBDC7: 0xC2E4, //HANGUL SYLLABLE SIOS I RIEUL - 0xBDC8: 0xC2EB, //HANGUL SYLLABLE SIOS I RIEULHIEUH - 0xBDC9: 0xC2EC, //HANGUL SYLLABLE SIOS I MIEUM - 0xBDCA: 0xC2ED, //HANGUL SYLLABLE SIOS I PIEUP - 0xBDCB: 0xC2EF, //HANGUL SYLLABLE SIOS I SIOS - 0xBDCC: 0xC2F1, //HANGUL SYLLABLE SIOS I IEUNG - 0xBDCD: 0xC2F6, //HANGUL SYLLABLE SIOS I PHIEUPH - 0xBDCE: 0xC2F8, //HANGUL SYLLABLE SSANGSIOS A - 0xBDCF: 0xC2F9, //HANGUL SYLLABLE SSANGSIOS A KIYEOK - 0xBDD0: 0xC2FB, //HANGUL SYLLABLE SSANGSIOS A KIYEOKSIOS - 0xBDD1: 0xC2FC, //HANGUL SYLLABLE SSANGSIOS A NIEUN - 0xBDD2: 0xC300, //HANGUL SYLLABLE SSANGSIOS A RIEUL - 0xBDD3: 0xC308, //HANGUL SYLLABLE SSANGSIOS A MIEUM - 0xBDD4: 0xC309, //HANGUL SYLLABLE SSANGSIOS A PIEUP - 0xBDD5: 0xC30C, //HANGUL SYLLABLE SSANGSIOS A SSANGSIOS - 0xBDD6: 0xC30D, //HANGUL SYLLABLE SSANGSIOS A IEUNG - 0xBDD7: 0xC313, //HANGUL SYLLABLE SSANGSIOS A HIEUH - 0xBDD8: 0xC314, //HANGUL SYLLABLE SSANGSIOS AE - 0xBDD9: 0xC315, //HANGUL SYLLABLE SSANGSIOS AE KIYEOK - 0xBDDA: 0xC318, //HANGUL SYLLABLE SSANGSIOS AE NIEUN - 0xBDDB: 0xC31C, //HANGUL SYLLABLE SSANGSIOS AE RIEUL - 0xBDDC: 0xC324, //HANGUL SYLLABLE SSANGSIOS AE MIEUM - 0xBDDD: 0xC325, //HANGUL SYLLABLE SSANGSIOS AE PIEUP - 0xBDDE: 0xC328, //HANGUL SYLLABLE SSANGSIOS AE SSANGSIOS - 0xBDDF: 0xC329, //HANGUL SYLLABLE SSANGSIOS AE IEUNG - 0xBDE0: 0xC345, //HANGUL SYLLABLE SSANGSIOS YA IEUNG - 0xBDE1: 0xC368, //HANGUL SYLLABLE SSANGSIOS EO - 0xBDE2: 0xC369, //HANGUL SYLLABLE SSANGSIOS EO KIYEOK - 0xBDE3: 0xC36C, //HANGUL SYLLABLE SSANGSIOS EO NIEUN - 0xBDE4: 0xC370, //HANGUL SYLLABLE SSANGSIOS EO RIEUL - 0xBDE5: 0xC372, //HANGUL SYLLABLE SSANGSIOS EO RIEULMIEUM - 0xBDE6: 0xC378, //HANGUL SYLLABLE SSANGSIOS EO MIEUM - 0xBDE7: 0xC379, //HANGUL SYLLABLE SSANGSIOS EO PIEUP - 0xBDE8: 0xC37C, //HANGUL SYLLABLE SSANGSIOS EO SSANGSIOS - 0xBDE9: 0xC37D, //HANGUL SYLLABLE SSANGSIOS EO IEUNG - 0xBDEA: 0xC384, //HANGUL SYLLABLE SSANGSIOS E - 0xBDEB: 0xC388, //HANGUL SYLLABLE SSANGSIOS E NIEUN - 0xBDEC: 0xC38C, //HANGUL SYLLABLE SSANGSIOS E RIEUL - 0xBDED: 0xC3C0, //HANGUL SYLLABLE SSANGSIOS YE NIEUN - 0xBDEE: 0xC3D8, //HANGUL SYLLABLE SSANGSIOS O - 0xBDEF: 0xC3D9, //HANGUL SYLLABLE SSANGSIOS O KIYEOK - 0xBDF0: 0xC3DC, //HANGUL SYLLABLE SSANGSIOS O NIEUN - 0xBDF1: 0xC3DF, //HANGUL SYLLABLE SSANGSIOS O TIKEUT - 0xBDF2: 0xC3E0, //HANGUL SYLLABLE SSANGSIOS O RIEUL - 0xBDF3: 0xC3E2, //HANGUL SYLLABLE SSANGSIOS O RIEULMIEUM - 0xBDF4: 0xC3E8, //HANGUL SYLLABLE SSANGSIOS O MIEUM - 0xBDF5: 0xC3E9, //HANGUL SYLLABLE SSANGSIOS O PIEUP - 0xBDF6: 0xC3ED, //HANGUL SYLLABLE SSANGSIOS O IEUNG - 0xBDF7: 0xC3F4, //HANGUL SYLLABLE SSANGSIOS WA - 0xBDF8: 0xC3F5, //HANGUL SYLLABLE SSANGSIOS WA KIYEOK - 0xBDF9: 0xC3F8, //HANGUL SYLLABLE SSANGSIOS WA NIEUN - 0xBDFA: 0xC408, //HANGUL SYLLABLE SSANGSIOS WA SSANGSIOS - 0xBDFB: 0xC410, //HANGUL SYLLABLE SSANGSIOS WAE - 0xBDFC: 0xC424, //HANGUL SYLLABLE SSANGSIOS WAE SSANGSIOS - 0xBDFD: 0xC42C, //HANGUL SYLLABLE SSANGSIOS OE - 0xBDFE: 0xC430, //HANGUL SYLLABLE SSANGSIOS OE NIEUN - 0xBE41: 0xD438, //HANGUL SYLLABLE PHIEUPH WAE SSANGSIOS - 0xBE42: 0xD439, //HANGUL SYLLABLE PHIEUPH WAE IEUNG - 0xBE43: 0xD43A, //HANGUL SYLLABLE PHIEUPH WAE CIEUC - 0xBE44: 0xD43B, //HANGUL SYLLABLE PHIEUPH WAE CHIEUCH - 0xBE45: 0xD43C, //HANGUL SYLLABLE PHIEUPH WAE KHIEUKH - 0xBE46: 0xD43D, //HANGUL SYLLABLE PHIEUPH WAE THIEUTH - 0xBE47: 0xD43E, //HANGUL SYLLABLE PHIEUPH WAE PHIEUPH - 0xBE48: 0xD43F, //HANGUL SYLLABLE PHIEUPH WAE HIEUH - 0xBE49: 0xD441, //HANGUL SYLLABLE PHIEUPH OE KIYEOK - 0xBE4A: 0xD442, //HANGUL SYLLABLE PHIEUPH OE SSANGKIYEOK - 0xBE4B: 0xD443, //HANGUL SYLLABLE PHIEUPH OE KIYEOKSIOS - 0xBE4C: 0xD445, //HANGUL SYLLABLE PHIEUPH OE NIEUNCIEUC - 0xBE4D: 0xD446, //HANGUL SYLLABLE PHIEUPH OE NIEUNHIEUH - 0xBE4E: 0xD447, //HANGUL SYLLABLE PHIEUPH OE TIKEUT - 0xBE4F: 0xD448, //HANGUL SYLLABLE PHIEUPH OE RIEUL - 0xBE50: 0xD449, //HANGUL SYLLABLE PHIEUPH OE RIEULKIYEOK - 0xBE51: 0xD44A, //HANGUL SYLLABLE PHIEUPH OE RIEULMIEUM - 0xBE52: 0xD44B, //HANGUL SYLLABLE PHIEUPH OE RIEULPIEUP - 0xBE53: 0xD44C, //HANGUL SYLLABLE PHIEUPH OE RIEULSIOS - 0xBE54: 0xD44D, //HANGUL SYLLABLE PHIEUPH OE RIEULTHIEUTH - 0xBE55: 0xD44E, //HANGUL SYLLABLE PHIEUPH OE RIEULPHIEUPH - 0xBE56: 0xD44F, //HANGUL SYLLABLE PHIEUPH OE RIEULHIEUH - 0xBE57: 0xD450, //HANGUL SYLLABLE PHIEUPH OE MIEUM - 0xBE58: 0xD451, //HANGUL SYLLABLE PHIEUPH OE PIEUP - 0xBE59: 0xD452, //HANGUL SYLLABLE PHIEUPH OE PIEUPSIOS - 0xBE5A: 0xD453, //HANGUL SYLLABLE PHIEUPH OE SIOS - 0xBE61: 0xD454, //HANGUL SYLLABLE PHIEUPH OE SSANGSIOS - 0xBE62: 0xD455, //HANGUL SYLLABLE PHIEUPH OE IEUNG - 0xBE63: 0xD456, //HANGUL SYLLABLE PHIEUPH OE CIEUC - 0xBE64: 0xD457, //HANGUL SYLLABLE PHIEUPH OE CHIEUCH - 0xBE65: 0xD458, //HANGUL SYLLABLE PHIEUPH OE KHIEUKH - 0xBE66: 0xD459, //HANGUL SYLLABLE PHIEUPH OE THIEUTH - 0xBE67: 0xD45A, //HANGUL SYLLABLE PHIEUPH OE PHIEUPH - 0xBE68: 0xD45B, //HANGUL SYLLABLE PHIEUPH OE HIEUH - 0xBE69: 0xD45D, //HANGUL SYLLABLE PHIEUPH YO KIYEOK - 0xBE6A: 0xD45E, //HANGUL SYLLABLE PHIEUPH YO SSANGKIYEOK - 0xBE6B: 0xD45F, //HANGUL SYLLABLE PHIEUPH YO KIYEOKSIOS - 0xBE6C: 0xD461, //HANGUL SYLLABLE PHIEUPH YO NIEUNCIEUC - 0xBE6D: 0xD462, //HANGUL SYLLABLE PHIEUPH YO NIEUNHIEUH - 0xBE6E: 0xD463, //HANGUL SYLLABLE PHIEUPH YO TIKEUT - 0xBE6F: 0xD465, //HANGUL SYLLABLE PHIEUPH YO RIEULKIYEOK - 0xBE70: 0xD466, //HANGUL SYLLABLE PHIEUPH YO RIEULMIEUM - 0xBE71: 0xD467, //HANGUL SYLLABLE PHIEUPH YO RIEULPIEUP - 0xBE72: 0xD468, //HANGUL SYLLABLE PHIEUPH YO RIEULSIOS - 0xBE73: 0xD469, //HANGUL SYLLABLE PHIEUPH YO RIEULTHIEUTH - 0xBE74: 0xD46A, //HANGUL SYLLABLE PHIEUPH YO RIEULPHIEUPH - 0xBE75: 0xD46B, //HANGUL SYLLABLE PHIEUPH YO RIEULHIEUH - 0xBE76: 0xD46C, //HANGUL SYLLABLE PHIEUPH YO MIEUM - 0xBE77: 0xD46E, //HANGUL SYLLABLE PHIEUPH YO PIEUPSIOS - 0xBE78: 0xD470, //HANGUL SYLLABLE PHIEUPH YO SSANGSIOS - 0xBE79: 0xD471, //HANGUL SYLLABLE PHIEUPH YO IEUNG - 0xBE7A: 0xD472, //HANGUL SYLLABLE PHIEUPH YO CIEUC - 0xBE81: 0xD473, //HANGUL SYLLABLE PHIEUPH YO CHIEUCH - 0xBE82: 0xD474, //HANGUL SYLLABLE PHIEUPH YO KHIEUKH - 0xBE83: 0xD475, //HANGUL SYLLABLE PHIEUPH YO THIEUTH - 0xBE84: 0xD476, //HANGUL SYLLABLE PHIEUPH YO PHIEUPH - 0xBE85: 0xD477, //HANGUL SYLLABLE PHIEUPH YO HIEUH - 0xBE86: 0xD47A, //HANGUL SYLLABLE PHIEUPH U SSANGKIYEOK - 0xBE87: 0xD47B, //HANGUL SYLLABLE PHIEUPH U KIYEOKSIOS - 0xBE88: 0xD47D, //HANGUL SYLLABLE PHIEUPH U NIEUNCIEUC - 0xBE89: 0xD47E, //HANGUL SYLLABLE PHIEUPH U NIEUNHIEUH - 0xBE8A: 0xD481, //HANGUL SYLLABLE PHIEUPH U RIEULKIYEOK - 0xBE8B: 0xD483, //HANGUL SYLLABLE PHIEUPH U RIEULPIEUP - 0xBE8C: 0xD484, //HANGUL SYLLABLE PHIEUPH U RIEULSIOS - 0xBE8D: 0xD485, //HANGUL SYLLABLE PHIEUPH U RIEULTHIEUTH - 0xBE8E: 0xD486, //HANGUL SYLLABLE PHIEUPH U RIEULPHIEUPH - 0xBE8F: 0xD487, //HANGUL SYLLABLE PHIEUPH U RIEULHIEUH - 0xBE90: 0xD48A, //HANGUL SYLLABLE PHIEUPH U PIEUPSIOS - 0xBE91: 0xD48C, //HANGUL SYLLABLE PHIEUPH U SSANGSIOS - 0xBE92: 0xD48E, //HANGUL SYLLABLE PHIEUPH U CIEUC - 0xBE93: 0xD48F, //HANGUL SYLLABLE PHIEUPH U CHIEUCH - 0xBE94: 0xD490, //HANGUL SYLLABLE PHIEUPH U KHIEUKH - 0xBE95: 0xD491, //HANGUL SYLLABLE PHIEUPH U THIEUTH - 0xBE96: 0xD492, //HANGUL SYLLABLE PHIEUPH U PHIEUPH - 0xBE97: 0xD493, //HANGUL SYLLABLE PHIEUPH U HIEUH - 0xBE98: 0xD495, //HANGUL SYLLABLE PHIEUPH WEO KIYEOK - 0xBE99: 0xD496, //HANGUL SYLLABLE PHIEUPH WEO SSANGKIYEOK - 0xBE9A: 0xD497, //HANGUL SYLLABLE PHIEUPH WEO KIYEOKSIOS - 0xBE9B: 0xD498, //HANGUL SYLLABLE PHIEUPH WEO NIEUN - 0xBE9C: 0xD499, //HANGUL SYLLABLE PHIEUPH WEO NIEUNCIEUC - 0xBE9D: 0xD49A, //HANGUL SYLLABLE PHIEUPH WEO NIEUNHIEUH - 0xBE9E: 0xD49B, //HANGUL SYLLABLE PHIEUPH WEO TIKEUT - 0xBE9F: 0xD49C, //HANGUL SYLLABLE PHIEUPH WEO RIEUL - 0xBEA0: 0xD49D, //HANGUL SYLLABLE PHIEUPH WEO RIEULKIYEOK - 0xBEA1: 0xC434, //HANGUL SYLLABLE SSANGSIOS OE RIEUL - 0xBEA2: 0xC43C, //HANGUL SYLLABLE SSANGSIOS OE MIEUM - 0xBEA3: 0xC43D, //HANGUL SYLLABLE SSANGSIOS OE PIEUP - 0xBEA4: 0xC448, //HANGUL SYLLABLE SSANGSIOS YO - 0xBEA5: 0xC464, //HANGUL SYLLABLE SSANGSIOS U - 0xBEA6: 0xC465, //HANGUL SYLLABLE SSANGSIOS U KIYEOK - 0xBEA7: 0xC468, //HANGUL SYLLABLE SSANGSIOS U NIEUN - 0xBEA8: 0xC46C, //HANGUL SYLLABLE SSANGSIOS U RIEUL - 0xBEA9: 0xC474, //HANGUL SYLLABLE SSANGSIOS U MIEUM - 0xBEAA: 0xC475, //HANGUL SYLLABLE SSANGSIOS U PIEUP - 0xBEAB: 0xC479, //HANGUL SYLLABLE SSANGSIOS U IEUNG - 0xBEAC: 0xC480, //HANGUL SYLLABLE SSANGSIOS WEO - 0xBEAD: 0xC494, //HANGUL SYLLABLE SSANGSIOS WEO SSANGSIOS - 0xBEAE: 0xC49C, //HANGUL SYLLABLE SSANGSIOS WE - 0xBEAF: 0xC4B8, //HANGUL SYLLABLE SSANGSIOS WI - 0xBEB0: 0xC4BC, //HANGUL SYLLABLE SSANGSIOS WI NIEUN - 0xBEB1: 0xC4E9, //HANGUL SYLLABLE SSANGSIOS YU IEUNG - 0xBEB2: 0xC4F0, //HANGUL SYLLABLE SSANGSIOS EU - 0xBEB3: 0xC4F1, //HANGUL SYLLABLE SSANGSIOS EU KIYEOK - 0xBEB4: 0xC4F4, //HANGUL SYLLABLE SSANGSIOS EU NIEUN - 0xBEB5: 0xC4F8, //HANGUL SYLLABLE SSANGSIOS EU RIEUL - 0xBEB6: 0xC4FA, //HANGUL SYLLABLE SSANGSIOS EU RIEULMIEUM - 0xBEB7: 0xC4FF, //HANGUL SYLLABLE SSANGSIOS EU RIEULHIEUH - 0xBEB8: 0xC500, //HANGUL SYLLABLE SSANGSIOS EU MIEUM - 0xBEB9: 0xC501, //HANGUL SYLLABLE SSANGSIOS EU PIEUP - 0xBEBA: 0xC50C, //HANGUL SYLLABLE SSANGSIOS YI - 0xBEBB: 0xC510, //HANGUL SYLLABLE SSANGSIOS YI NIEUN - 0xBEBC: 0xC514, //HANGUL SYLLABLE SSANGSIOS YI RIEUL - 0xBEBD: 0xC51C, //HANGUL SYLLABLE SSANGSIOS YI MIEUM - 0xBEBE: 0xC528, //HANGUL SYLLABLE SSANGSIOS I - 0xBEBF: 0xC529, //HANGUL SYLLABLE SSANGSIOS I KIYEOK - 0xBEC0: 0xC52C, //HANGUL SYLLABLE SSANGSIOS I NIEUN - 0xBEC1: 0xC530, //HANGUL SYLLABLE SSANGSIOS I RIEUL - 0xBEC2: 0xC538, //HANGUL SYLLABLE SSANGSIOS I MIEUM - 0xBEC3: 0xC539, //HANGUL SYLLABLE SSANGSIOS I PIEUP - 0xBEC4: 0xC53B, //HANGUL SYLLABLE SSANGSIOS I SIOS - 0xBEC5: 0xC53D, //HANGUL SYLLABLE SSANGSIOS I IEUNG - 0xBEC6: 0xC544, //HANGUL SYLLABLE IEUNG A - 0xBEC7: 0xC545, //HANGUL SYLLABLE IEUNG A KIYEOK - 0xBEC8: 0xC548, //HANGUL SYLLABLE IEUNG A NIEUN - 0xBEC9: 0xC549, //HANGUL SYLLABLE IEUNG A NIEUNCIEUC - 0xBECA: 0xC54A, //HANGUL SYLLABLE IEUNG A NIEUNHIEUH - 0xBECB: 0xC54C, //HANGUL SYLLABLE IEUNG A RIEUL - 0xBECC: 0xC54D, //HANGUL SYLLABLE IEUNG A RIEULKIYEOK - 0xBECD: 0xC54E, //HANGUL SYLLABLE IEUNG A RIEULMIEUM - 0xBECE: 0xC553, //HANGUL SYLLABLE IEUNG A RIEULHIEUH - 0xBECF: 0xC554, //HANGUL SYLLABLE IEUNG A MIEUM - 0xBED0: 0xC555, //HANGUL SYLLABLE IEUNG A PIEUP - 0xBED1: 0xC557, //HANGUL SYLLABLE IEUNG A SIOS - 0xBED2: 0xC558, //HANGUL SYLLABLE IEUNG A SSANGSIOS - 0xBED3: 0xC559, //HANGUL SYLLABLE IEUNG A IEUNG - 0xBED4: 0xC55D, //HANGUL SYLLABLE IEUNG A THIEUTH - 0xBED5: 0xC55E, //HANGUL SYLLABLE IEUNG A PHIEUPH - 0xBED6: 0xC560, //HANGUL SYLLABLE IEUNG AE - 0xBED7: 0xC561, //HANGUL SYLLABLE IEUNG AE KIYEOK - 0xBED8: 0xC564, //HANGUL SYLLABLE IEUNG AE NIEUN - 0xBED9: 0xC568, //HANGUL SYLLABLE IEUNG AE RIEUL - 0xBEDA: 0xC570, //HANGUL SYLLABLE IEUNG AE MIEUM - 0xBEDB: 0xC571, //HANGUL SYLLABLE IEUNG AE PIEUP - 0xBEDC: 0xC573, //HANGUL SYLLABLE IEUNG AE SIOS - 0xBEDD: 0xC574, //HANGUL SYLLABLE IEUNG AE SSANGSIOS - 0xBEDE: 0xC575, //HANGUL SYLLABLE IEUNG AE IEUNG - 0xBEDF: 0xC57C, //HANGUL SYLLABLE IEUNG YA - 0xBEE0: 0xC57D, //HANGUL SYLLABLE IEUNG YA KIYEOK - 0xBEE1: 0xC580, //HANGUL SYLLABLE IEUNG YA NIEUN - 0xBEE2: 0xC584, //HANGUL SYLLABLE IEUNG YA RIEUL - 0xBEE3: 0xC587, //HANGUL SYLLABLE IEUNG YA RIEULPIEUP - 0xBEE4: 0xC58C, //HANGUL SYLLABLE IEUNG YA MIEUM - 0xBEE5: 0xC58D, //HANGUL SYLLABLE IEUNG YA PIEUP - 0xBEE6: 0xC58F, //HANGUL SYLLABLE IEUNG YA SIOS - 0xBEE7: 0xC591, //HANGUL SYLLABLE IEUNG YA IEUNG - 0xBEE8: 0xC595, //HANGUL SYLLABLE IEUNG YA THIEUTH - 0xBEE9: 0xC597, //HANGUL SYLLABLE IEUNG YA HIEUH - 0xBEEA: 0xC598, //HANGUL SYLLABLE IEUNG YAE - 0xBEEB: 0xC59C, //HANGUL SYLLABLE IEUNG YAE NIEUN - 0xBEEC: 0xC5A0, //HANGUL SYLLABLE IEUNG YAE RIEUL - 0xBEED: 0xC5A9, //HANGUL SYLLABLE IEUNG YAE PIEUP - 0xBEEE: 0xC5B4, //HANGUL SYLLABLE IEUNG EO - 0xBEEF: 0xC5B5, //HANGUL SYLLABLE IEUNG EO KIYEOK - 0xBEF0: 0xC5B8, //HANGUL SYLLABLE IEUNG EO NIEUN - 0xBEF1: 0xC5B9, //HANGUL SYLLABLE IEUNG EO NIEUNCIEUC - 0xBEF2: 0xC5BB, //HANGUL SYLLABLE IEUNG EO TIKEUT - 0xBEF3: 0xC5BC, //HANGUL SYLLABLE IEUNG EO RIEUL - 0xBEF4: 0xC5BD, //HANGUL SYLLABLE IEUNG EO RIEULKIYEOK - 0xBEF5: 0xC5BE, //HANGUL SYLLABLE IEUNG EO RIEULMIEUM - 0xBEF6: 0xC5C4, //HANGUL SYLLABLE IEUNG EO MIEUM - 0xBEF7: 0xC5C5, //HANGUL SYLLABLE IEUNG EO PIEUP - 0xBEF8: 0xC5C6, //HANGUL SYLLABLE IEUNG EO PIEUPSIOS - 0xBEF9: 0xC5C7, //HANGUL SYLLABLE IEUNG EO SIOS - 0xBEFA: 0xC5C8, //HANGUL SYLLABLE IEUNG EO SSANGSIOS - 0xBEFB: 0xC5C9, //HANGUL SYLLABLE IEUNG EO IEUNG - 0xBEFC: 0xC5CA, //HANGUL SYLLABLE IEUNG EO CIEUC - 0xBEFD: 0xC5CC, //HANGUL SYLLABLE IEUNG EO KHIEUKH - 0xBEFE: 0xC5CE, //HANGUL SYLLABLE IEUNG EO PHIEUPH - 0xBF41: 0xD49E, //HANGUL SYLLABLE PHIEUPH WEO RIEULMIEUM - 0xBF42: 0xD49F, //HANGUL SYLLABLE PHIEUPH WEO RIEULPIEUP - 0xBF43: 0xD4A0, //HANGUL SYLLABLE PHIEUPH WEO RIEULSIOS - 0xBF44: 0xD4A1, //HANGUL SYLLABLE PHIEUPH WEO RIEULTHIEUTH - 0xBF45: 0xD4A2, //HANGUL SYLLABLE PHIEUPH WEO RIEULPHIEUPH - 0xBF46: 0xD4A3, //HANGUL SYLLABLE PHIEUPH WEO RIEULHIEUH - 0xBF47: 0xD4A4, //HANGUL SYLLABLE PHIEUPH WEO MIEUM - 0xBF48: 0xD4A5, //HANGUL SYLLABLE PHIEUPH WEO PIEUP - 0xBF49: 0xD4A6, //HANGUL SYLLABLE PHIEUPH WEO PIEUPSIOS - 0xBF4A: 0xD4A7, //HANGUL SYLLABLE PHIEUPH WEO SIOS - 0xBF4B: 0xD4A8, //HANGUL SYLLABLE PHIEUPH WEO SSANGSIOS - 0xBF4C: 0xD4AA, //HANGUL SYLLABLE PHIEUPH WEO CIEUC - 0xBF4D: 0xD4AB, //HANGUL SYLLABLE PHIEUPH WEO CHIEUCH - 0xBF4E: 0xD4AC, //HANGUL SYLLABLE PHIEUPH WEO KHIEUKH - 0xBF4F: 0xD4AD, //HANGUL SYLLABLE PHIEUPH WEO THIEUTH - 0xBF50: 0xD4AE, //HANGUL SYLLABLE PHIEUPH WEO PHIEUPH - 0xBF51: 0xD4AF, //HANGUL SYLLABLE PHIEUPH WEO HIEUH - 0xBF52: 0xD4B0, //HANGUL SYLLABLE PHIEUPH WE - 0xBF53: 0xD4B1, //HANGUL SYLLABLE PHIEUPH WE KIYEOK - 0xBF54: 0xD4B2, //HANGUL SYLLABLE PHIEUPH WE SSANGKIYEOK - 0xBF55: 0xD4B3, //HANGUL SYLLABLE PHIEUPH WE KIYEOKSIOS - 0xBF56: 0xD4B4, //HANGUL SYLLABLE PHIEUPH WE NIEUN - 0xBF57: 0xD4B5, //HANGUL SYLLABLE PHIEUPH WE NIEUNCIEUC - 0xBF58: 0xD4B6, //HANGUL SYLLABLE PHIEUPH WE NIEUNHIEUH - 0xBF59: 0xD4B7, //HANGUL SYLLABLE PHIEUPH WE TIKEUT - 0xBF5A: 0xD4B8, //HANGUL SYLLABLE PHIEUPH WE RIEUL - 0xBF61: 0xD4B9, //HANGUL SYLLABLE PHIEUPH WE RIEULKIYEOK - 0xBF62: 0xD4BA, //HANGUL SYLLABLE PHIEUPH WE RIEULMIEUM - 0xBF63: 0xD4BB, //HANGUL SYLLABLE PHIEUPH WE RIEULPIEUP - 0xBF64: 0xD4BC, //HANGUL SYLLABLE PHIEUPH WE RIEULSIOS - 0xBF65: 0xD4BD, //HANGUL SYLLABLE PHIEUPH WE RIEULTHIEUTH - 0xBF66: 0xD4BE, //HANGUL SYLLABLE PHIEUPH WE RIEULPHIEUPH - 0xBF67: 0xD4BF, //HANGUL SYLLABLE PHIEUPH WE RIEULHIEUH - 0xBF68: 0xD4C0, //HANGUL SYLLABLE PHIEUPH WE MIEUM - 0xBF69: 0xD4C1, //HANGUL SYLLABLE PHIEUPH WE PIEUP - 0xBF6A: 0xD4C2, //HANGUL SYLLABLE PHIEUPH WE PIEUPSIOS - 0xBF6B: 0xD4C3, //HANGUL SYLLABLE PHIEUPH WE SIOS - 0xBF6C: 0xD4C4, //HANGUL SYLLABLE PHIEUPH WE SSANGSIOS - 0xBF6D: 0xD4C5, //HANGUL SYLLABLE PHIEUPH WE IEUNG - 0xBF6E: 0xD4C6, //HANGUL SYLLABLE PHIEUPH WE CIEUC - 0xBF6F: 0xD4C7, //HANGUL SYLLABLE PHIEUPH WE CHIEUCH - 0xBF70: 0xD4C8, //HANGUL SYLLABLE PHIEUPH WE KHIEUKH - 0xBF71: 0xD4C9, //HANGUL SYLLABLE PHIEUPH WE THIEUTH - 0xBF72: 0xD4CA, //HANGUL SYLLABLE PHIEUPH WE PHIEUPH - 0xBF73: 0xD4CB, //HANGUL SYLLABLE PHIEUPH WE HIEUH - 0xBF74: 0xD4CD, //HANGUL SYLLABLE PHIEUPH WI KIYEOK - 0xBF75: 0xD4CE, //HANGUL SYLLABLE PHIEUPH WI SSANGKIYEOK - 0xBF76: 0xD4CF, //HANGUL SYLLABLE PHIEUPH WI KIYEOKSIOS - 0xBF77: 0xD4D1, //HANGUL SYLLABLE PHIEUPH WI NIEUNCIEUC - 0xBF78: 0xD4D2, //HANGUL SYLLABLE PHIEUPH WI NIEUNHIEUH - 0xBF79: 0xD4D3, //HANGUL SYLLABLE PHIEUPH WI TIKEUT - 0xBF7A: 0xD4D5, //HANGUL SYLLABLE PHIEUPH WI RIEULKIYEOK - 0xBF81: 0xD4D6, //HANGUL SYLLABLE PHIEUPH WI RIEULMIEUM - 0xBF82: 0xD4D7, //HANGUL SYLLABLE PHIEUPH WI RIEULPIEUP - 0xBF83: 0xD4D8, //HANGUL SYLLABLE PHIEUPH WI RIEULSIOS - 0xBF84: 0xD4D9, //HANGUL SYLLABLE PHIEUPH WI RIEULTHIEUTH - 0xBF85: 0xD4DA, //HANGUL SYLLABLE PHIEUPH WI RIEULPHIEUPH - 0xBF86: 0xD4DB, //HANGUL SYLLABLE PHIEUPH WI RIEULHIEUH - 0xBF87: 0xD4DD, //HANGUL SYLLABLE PHIEUPH WI PIEUP - 0xBF88: 0xD4DE, //HANGUL SYLLABLE PHIEUPH WI PIEUPSIOS - 0xBF89: 0xD4E0, //HANGUL SYLLABLE PHIEUPH WI SSANGSIOS - 0xBF8A: 0xD4E1, //HANGUL SYLLABLE PHIEUPH WI IEUNG - 0xBF8B: 0xD4E2, //HANGUL SYLLABLE PHIEUPH WI CIEUC - 0xBF8C: 0xD4E3, //HANGUL SYLLABLE PHIEUPH WI CHIEUCH - 0xBF8D: 0xD4E4, //HANGUL SYLLABLE PHIEUPH WI KHIEUKH - 0xBF8E: 0xD4E5, //HANGUL SYLLABLE PHIEUPH WI THIEUTH - 0xBF8F: 0xD4E6, //HANGUL SYLLABLE PHIEUPH WI PHIEUPH - 0xBF90: 0xD4E7, //HANGUL SYLLABLE PHIEUPH WI HIEUH - 0xBF91: 0xD4E9, //HANGUL SYLLABLE PHIEUPH YU KIYEOK - 0xBF92: 0xD4EA, //HANGUL SYLLABLE PHIEUPH YU SSANGKIYEOK - 0xBF93: 0xD4EB, //HANGUL SYLLABLE PHIEUPH YU KIYEOKSIOS - 0xBF94: 0xD4ED, //HANGUL SYLLABLE PHIEUPH YU NIEUNCIEUC - 0xBF95: 0xD4EE, //HANGUL SYLLABLE PHIEUPH YU NIEUNHIEUH - 0xBF96: 0xD4EF, //HANGUL SYLLABLE PHIEUPH YU TIKEUT - 0xBF97: 0xD4F1, //HANGUL SYLLABLE PHIEUPH YU RIEULKIYEOK - 0xBF98: 0xD4F2, //HANGUL SYLLABLE PHIEUPH YU RIEULMIEUM - 0xBF99: 0xD4F3, //HANGUL SYLLABLE PHIEUPH YU RIEULPIEUP - 0xBF9A: 0xD4F4, //HANGUL SYLLABLE PHIEUPH YU RIEULSIOS - 0xBF9B: 0xD4F5, //HANGUL SYLLABLE PHIEUPH YU RIEULTHIEUTH - 0xBF9C: 0xD4F6, //HANGUL SYLLABLE PHIEUPH YU RIEULPHIEUPH - 0xBF9D: 0xD4F7, //HANGUL SYLLABLE PHIEUPH YU RIEULHIEUH - 0xBF9E: 0xD4F9, //HANGUL SYLLABLE PHIEUPH YU PIEUP - 0xBF9F: 0xD4FA, //HANGUL SYLLABLE PHIEUPH YU PIEUPSIOS - 0xBFA0: 0xD4FC, //HANGUL SYLLABLE PHIEUPH YU SSANGSIOS - 0xBFA1: 0xC5D0, //HANGUL SYLLABLE IEUNG E - 0xBFA2: 0xC5D1, //HANGUL SYLLABLE IEUNG E KIYEOK - 0xBFA3: 0xC5D4, //HANGUL SYLLABLE IEUNG E NIEUN - 0xBFA4: 0xC5D8, //HANGUL SYLLABLE IEUNG E RIEUL - 0xBFA5: 0xC5E0, //HANGUL SYLLABLE IEUNG E MIEUM - 0xBFA6: 0xC5E1, //HANGUL SYLLABLE IEUNG E PIEUP - 0xBFA7: 0xC5E3, //HANGUL SYLLABLE IEUNG E SIOS - 0xBFA8: 0xC5E5, //HANGUL SYLLABLE IEUNG E IEUNG - 0xBFA9: 0xC5EC, //HANGUL SYLLABLE IEUNG YEO - 0xBFAA: 0xC5ED, //HANGUL SYLLABLE IEUNG YEO KIYEOK - 0xBFAB: 0xC5EE, //HANGUL SYLLABLE IEUNG YEO SSANGKIYEOK - 0xBFAC: 0xC5F0, //HANGUL SYLLABLE IEUNG YEO NIEUN - 0xBFAD: 0xC5F4, //HANGUL SYLLABLE IEUNG YEO RIEUL - 0xBFAE: 0xC5F6, //HANGUL SYLLABLE IEUNG YEO RIEULMIEUM - 0xBFAF: 0xC5F7, //HANGUL SYLLABLE IEUNG YEO RIEULPIEUP - 0xBFB0: 0xC5FC, //HANGUL SYLLABLE IEUNG YEO MIEUM - 0xBFB1: 0xC5FD, //HANGUL SYLLABLE IEUNG YEO PIEUP - 0xBFB2: 0xC5FE, //HANGUL SYLLABLE IEUNG YEO PIEUPSIOS - 0xBFB3: 0xC5FF, //HANGUL SYLLABLE IEUNG YEO SIOS - 0xBFB4: 0xC600, //HANGUL SYLLABLE IEUNG YEO SSANGSIOS - 0xBFB5: 0xC601, //HANGUL SYLLABLE IEUNG YEO IEUNG - 0xBFB6: 0xC605, //HANGUL SYLLABLE IEUNG YEO THIEUTH - 0xBFB7: 0xC606, //HANGUL SYLLABLE IEUNG YEO PHIEUPH - 0xBFB8: 0xC607, //HANGUL SYLLABLE IEUNG YEO HIEUH - 0xBFB9: 0xC608, //HANGUL SYLLABLE IEUNG YE - 0xBFBA: 0xC60C, //HANGUL SYLLABLE IEUNG YE NIEUN - 0xBFBB: 0xC610, //HANGUL SYLLABLE IEUNG YE RIEUL - 0xBFBC: 0xC618, //HANGUL SYLLABLE IEUNG YE MIEUM - 0xBFBD: 0xC619, //HANGUL SYLLABLE IEUNG YE PIEUP - 0xBFBE: 0xC61B, //HANGUL SYLLABLE IEUNG YE SIOS - 0xBFBF: 0xC61C, //HANGUL SYLLABLE IEUNG YE SSANGSIOS - 0xBFC0: 0xC624, //HANGUL SYLLABLE IEUNG O - 0xBFC1: 0xC625, //HANGUL SYLLABLE IEUNG O KIYEOK - 0xBFC2: 0xC628, //HANGUL SYLLABLE IEUNG O NIEUN - 0xBFC3: 0xC62C, //HANGUL SYLLABLE IEUNG O RIEUL - 0xBFC4: 0xC62D, //HANGUL SYLLABLE IEUNG O RIEULKIYEOK - 0xBFC5: 0xC62E, //HANGUL SYLLABLE IEUNG O RIEULMIEUM - 0xBFC6: 0xC630, //HANGUL SYLLABLE IEUNG O RIEULSIOS - 0xBFC7: 0xC633, //HANGUL SYLLABLE IEUNG O RIEULHIEUH - 0xBFC8: 0xC634, //HANGUL SYLLABLE IEUNG O MIEUM - 0xBFC9: 0xC635, //HANGUL SYLLABLE IEUNG O PIEUP - 0xBFCA: 0xC637, //HANGUL SYLLABLE IEUNG O SIOS - 0xBFCB: 0xC639, //HANGUL SYLLABLE IEUNG O IEUNG - 0xBFCC: 0xC63B, //HANGUL SYLLABLE IEUNG O CHIEUCH - 0xBFCD: 0xC640, //HANGUL SYLLABLE IEUNG WA - 0xBFCE: 0xC641, //HANGUL SYLLABLE IEUNG WA KIYEOK - 0xBFCF: 0xC644, //HANGUL SYLLABLE IEUNG WA NIEUN - 0xBFD0: 0xC648, //HANGUL SYLLABLE IEUNG WA RIEUL - 0xBFD1: 0xC650, //HANGUL SYLLABLE IEUNG WA MIEUM - 0xBFD2: 0xC651, //HANGUL SYLLABLE IEUNG WA PIEUP - 0xBFD3: 0xC653, //HANGUL SYLLABLE IEUNG WA SIOS - 0xBFD4: 0xC654, //HANGUL SYLLABLE IEUNG WA SSANGSIOS - 0xBFD5: 0xC655, //HANGUL SYLLABLE IEUNG WA IEUNG - 0xBFD6: 0xC65C, //HANGUL SYLLABLE IEUNG WAE - 0xBFD7: 0xC65D, //HANGUL SYLLABLE IEUNG WAE KIYEOK - 0xBFD8: 0xC660, //HANGUL SYLLABLE IEUNG WAE NIEUN - 0xBFD9: 0xC66C, //HANGUL SYLLABLE IEUNG WAE MIEUM - 0xBFDA: 0xC66F, //HANGUL SYLLABLE IEUNG WAE SIOS - 0xBFDB: 0xC671, //HANGUL SYLLABLE IEUNG WAE IEUNG - 0xBFDC: 0xC678, //HANGUL SYLLABLE IEUNG OE - 0xBFDD: 0xC679, //HANGUL SYLLABLE IEUNG OE KIYEOK - 0xBFDE: 0xC67C, //HANGUL SYLLABLE IEUNG OE NIEUN - 0xBFDF: 0xC680, //HANGUL SYLLABLE IEUNG OE RIEUL - 0xBFE0: 0xC688, //HANGUL SYLLABLE IEUNG OE MIEUM - 0xBFE1: 0xC689, //HANGUL SYLLABLE IEUNG OE PIEUP - 0xBFE2: 0xC68B, //HANGUL SYLLABLE IEUNG OE SIOS - 0xBFE3: 0xC68D, //HANGUL SYLLABLE IEUNG OE IEUNG - 0xBFE4: 0xC694, //HANGUL SYLLABLE IEUNG YO - 0xBFE5: 0xC695, //HANGUL SYLLABLE IEUNG YO KIYEOK - 0xBFE6: 0xC698, //HANGUL SYLLABLE IEUNG YO NIEUN - 0xBFE7: 0xC69C, //HANGUL SYLLABLE IEUNG YO RIEUL - 0xBFE8: 0xC6A4, //HANGUL SYLLABLE IEUNG YO MIEUM - 0xBFE9: 0xC6A5, //HANGUL SYLLABLE IEUNG YO PIEUP - 0xBFEA: 0xC6A7, //HANGUL SYLLABLE IEUNG YO SIOS - 0xBFEB: 0xC6A9, //HANGUL SYLLABLE IEUNG YO IEUNG - 0xBFEC: 0xC6B0, //HANGUL SYLLABLE IEUNG U - 0xBFED: 0xC6B1, //HANGUL SYLLABLE IEUNG U KIYEOK - 0xBFEE: 0xC6B4, //HANGUL SYLLABLE IEUNG U NIEUN - 0xBFEF: 0xC6B8, //HANGUL SYLLABLE IEUNG U RIEUL - 0xBFF0: 0xC6B9, //HANGUL SYLLABLE IEUNG U RIEULKIYEOK - 0xBFF1: 0xC6BA, //HANGUL SYLLABLE IEUNG U RIEULMIEUM - 0xBFF2: 0xC6C0, //HANGUL SYLLABLE IEUNG U MIEUM - 0xBFF3: 0xC6C1, //HANGUL SYLLABLE IEUNG U PIEUP - 0xBFF4: 0xC6C3, //HANGUL SYLLABLE IEUNG U SIOS - 0xBFF5: 0xC6C5, //HANGUL SYLLABLE IEUNG U IEUNG - 0xBFF6: 0xC6CC, //HANGUL SYLLABLE IEUNG WEO - 0xBFF7: 0xC6CD, //HANGUL SYLLABLE IEUNG WEO KIYEOK - 0xBFF8: 0xC6D0, //HANGUL SYLLABLE IEUNG WEO NIEUN - 0xBFF9: 0xC6D4, //HANGUL SYLLABLE IEUNG WEO RIEUL - 0xBFFA: 0xC6DC, //HANGUL SYLLABLE IEUNG WEO MIEUM - 0xBFFB: 0xC6DD, //HANGUL SYLLABLE IEUNG WEO PIEUP - 0xBFFC: 0xC6E0, //HANGUL SYLLABLE IEUNG WEO SSANGSIOS - 0xBFFD: 0xC6E1, //HANGUL SYLLABLE IEUNG WEO IEUNG - 0xBFFE: 0xC6E8, //HANGUL SYLLABLE IEUNG WE - 0xC041: 0xD4FE, //HANGUL SYLLABLE PHIEUPH YU CIEUC - 0xC042: 0xD4FF, //HANGUL SYLLABLE PHIEUPH YU CHIEUCH - 0xC043: 0xD500, //HANGUL SYLLABLE PHIEUPH YU KHIEUKH - 0xC044: 0xD501, //HANGUL SYLLABLE PHIEUPH YU THIEUTH - 0xC045: 0xD502, //HANGUL SYLLABLE PHIEUPH YU PHIEUPH - 0xC046: 0xD503, //HANGUL SYLLABLE PHIEUPH YU HIEUH - 0xC047: 0xD505, //HANGUL SYLLABLE PHIEUPH EU KIYEOK - 0xC048: 0xD506, //HANGUL SYLLABLE PHIEUPH EU SSANGKIYEOK - 0xC049: 0xD507, //HANGUL SYLLABLE PHIEUPH EU KIYEOKSIOS - 0xC04A: 0xD509, //HANGUL SYLLABLE PHIEUPH EU NIEUNCIEUC - 0xC04B: 0xD50A, //HANGUL SYLLABLE PHIEUPH EU NIEUNHIEUH - 0xC04C: 0xD50B, //HANGUL SYLLABLE PHIEUPH EU TIKEUT - 0xC04D: 0xD50D, //HANGUL SYLLABLE PHIEUPH EU RIEULKIYEOK - 0xC04E: 0xD50E, //HANGUL SYLLABLE PHIEUPH EU RIEULMIEUM - 0xC04F: 0xD50F, //HANGUL SYLLABLE PHIEUPH EU RIEULPIEUP - 0xC050: 0xD510, //HANGUL SYLLABLE PHIEUPH EU RIEULSIOS - 0xC051: 0xD511, //HANGUL SYLLABLE PHIEUPH EU RIEULTHIEUTH - 0xC052: 0xD512, //HANGUL SYLLABLE PHIEUPH EU RIEULPHIEUPH - 0xC053: 0xD513, //HANGUL SYLLABLE PHIEUPH EU RIEULHIEUH - 0xC054: 0xD516, //HANGUL SYLLABLE PHIEUPH EU PIEUPSIOS - 0xC055: 0xD518, //HANGUL SYLLABLE PHIEUPH EU SSANGSIOS - 0xC056: 0xD519, //HANGUL SYLLABLE PHIEUPH EU IEUNG - 0xC057: 0xD51A, //HANGUL SYLLABLE PHIEUPH EU CIEUC - 0xC058: 0xD51B, //HANGUL SYLLABLE PHIEUPH EU CHIEUCH - 0xC059: 0xD51C, //HANGUL SYLLABLE PHIEUPH EU KHIEUKH - 0xC05A: 0xD51D, //HANGUL SYLLABLE PHIEUPH EU THIEUTH - 0xC061: 0xD51E, //HANGUL SYLLABLE PHIEUPH EU PHIEUPH - 0xC062: 0xD51F, //HANGUL SYLLABLE PHIEUPH EU HIEUH - 0xC063: 0xD520, //HANGUL SYLLABLE PHIEUPH YI - 0xC064: 0xD521, //HANGUL SYLLABLE PHIEUPH YI KIYEOK - 0xC065: 0xD522, //HANGUL SYLLABLE PHIEUPH YI SSANGKIYEOK - 0xC066: 0xD523, //HANGUL SYLLABLE PHIEUPH YI KIYEOKSIOS - 0xC067: 0xD524, //HANGUL SYLLABLE PHIEUPH YI NIEUN - 0xC068: 0xD525, //HANGUL SYLLABLE PHIEUPH YI NIEUNCIEUC - 0xC069: 0xD526, //HANGUL SYLLABLE PHIEUPH YI NIEUNHIEUH - 0xC06A: 0xD527, //HANGUL SYLLABLE PHIEUPH YI TIKEUT - 0xC06B: 0xD528, //HANGUL SYLLABLE PHIEUPH YI RIEUL - 0xC06C: 0xD529, //HANGUL SYLLABLE PHIEUPH YI RIEULKIYEOK - 0xC06D: 0xD52A, //HANGUL SYLLABLE PHIEUPH YI RIEULMIEUM - 0xC06E: 0xD52B, //HANGUL SYLLABLE PHIEUPH YI RIEULPIEUP - 0xC06F: 0xD52C, //HANGUL SYLLABLE PHIEUPH YI RIEULSIOS - 0xC070: 0xD52D, //HANGUL SYLLABLE PHIEUPH YI RIEULTHIEUTH - 0xC071: 0xD52E, //HANGUL SYLLABLE PHIEUPH YI RIEULPHIEUPH - 0xC072: 0xD52F, //HANGUL SYLLABLE PHIEUPH YI RIEULHIEUH - 0xC073: 0xD530, //HANGUL SYLLABLE PHIEUPH YI MIEUM - 0xC074: 0xD531, //HANGUL SYLLABLE PHIEUPH YI PIEUP - 0xC075: 0xD532, //HANGUL SYLLABLE PHIEUPH YI PIEUPSIOS - 0xC076: 0xD533, //HANGUL SYLLABLE PHIEUPH YI SIOS - 0xC077: 0xD534, //HANGUL SYLLABLE PHIEUPH YI SSANGSIOS - 0xC078: 0xD535, //HANGUL SYLLABLE PHIEUPH YI IEUNG - 0xC079: 0xD536, //HANGUL SYLLABLE PHIEUPH YI CIEUC - 0xC07A: 0xD537, //HANGUL SYLLABLE PHIEUPH YI CHIEUCH - 0xC081: 0xD538, //HANGUL SYLLABLE PHIEUPH YI KHIEUKH - 0xC082: 0xD539, //HANGUL SYLLABLE PHIEUPH YI THIEUTH - 0xC083: 0xD53A, //HANGUL SYLLABLE PHIEUPH YI PHIEUPH - 0xC084: 0xD53B, //HANGUL SYLLABLE PHIEUPH YI HIEUH - 0xC085: 0xD53E, //HANGUL SYLLABLE PHIEUPH I SSANGKIYEOK - 0xC086: 0xD53F, //HANGUL SYLLABLE PHIEUPH I KIYEOKSIOS - 0xC087: 0xD541, //HANGUL SYLLABLE PHIEUPH I NIEUNCIEUC - 0xC088: 0xD542, //HANGUL SYLLABLE PHIEUPH I NIEUNHIEUH - 0xC089: 0xD543, //HANGUL SYLLABLE PHIEUPH I TIKEUT - 0xC08A: 0xD545, //HANGUL SYLLABLE PHIEUPH I RIEULKIYEOK - 0xC08B: 0xD546, //HANGUL SYLLABLE PHIEUPH I RIEULMIEUM - 0xC08C: 0xD547, //HANGUL SYLLABLE PHIEUPH I RIEULPIEUP - 0xC08D: 0xD548, //HANGUL SYLLABLE PHIEUPH I RIEULSIOS - 0xC08E: 0xD549, //HANGUL SYLLABLE PHIEUPH I RIEULTHIEUTH - 0xC08F: 0xD54A, //HANGUL SYLLABLE PHIEUPH I RIEULPHIEUPH - 0xC090: 0xD54B, //HANGUL SYLLABLE PHIEUPH I RIEULHIEUH - 0xC091: 0xD54E, //HANGUL SYLLABLE PHIEUPH I PIEUPSIOS - 0xC092: 0xD550, //HANGUL SYLLABLE PHIEUPH I SSANGSIOS - 0xC093: 0xD552, //HANGUL SYLLABLE PHIEUPH I CIEUC - 0xC094: 0xD553, //HANGUL SYLLABLE PHIEUPH I CHIEUCH - 0xC095: 0xD554, //HANGUL SYLLABLE PHIEUPH I KHIEUKH - 0xC096: 0xD555, //HANGUL SYLLABLE PHIEUPH I THIEUTH - 0xC097: 0xD556, //HANGUL SYLLABLE PHIEUPH I PHIEUPH - 0xC098: 0xD557, //HANGUL SYLLABLE PHIEUPH I HIEUH - 0xC099: 0xD55A, //HANGUL SYLLABLE HIEUH A SSANGKIYEOK - 0xC09A: 0xD55B, //HANGUL SYLLABLE HIEUH A KIYEOKSIOS - 0xC09B: 0xD55D, //HANGUL SYLLABLE HIEUH A NIEUNCIEUC - 0xC09C: 0xD55E, //HANGUL SYLLABLE HIEUH A NIEUNHIEUH - 0xC09D: 0xD55F, //HANGUL SYLLABLE HIEUH A TIKEUT - 0xC09E: 0xD561, //HANGUL SYLLABLE HIEUH A RIEULKIYEOK - 0xC09F: 0xD562, //HANGUL SYLLABLE HIEUH A RIEULMIEUM - 0xC0A0: 0xD563, //HANGUL SYLLABLE HIEUH A RIEULPIEUP - 0xC0A1: 0xC6E9, //HANGUL SYLLABLE IEUNG WE KIYEOK - 0xC0A2: 0xC6EC, //HANGUL SYLLABLE IEUNG WE NIEUN - 0xC0A3: 0xC6F0, //HANGUL SYLLABLE IEUNG WE RIEUL - 0xC0A4: 0xC6F8, //HANGUL SYLLABLE IEUNG WE MIEUM - 0xC0A5: 0xC6F9, //HANGUL SYLLABLE IEUNG WE PIEUP - 0xC0A6: 0xC6FD, //HANGUL SYLLABLE IEUNG WE IEUNG - 0xC0A7: 0xC704, //HANGUL SYLLABLE IEUNG WI - 0xC0A8: 0xC705, //HANGUL SYLLABLE IEUNG WI KIYEOK - 0xC0A9: 0xC708, //HANGUL SYLLABLE IEUNG WI NIEUN - 0xC0AA: 0xC70C, //HANGUL SYLLABLE IEUNG WI RIEUL - 0xC0AB: 0xC714, //HANGUL SYLLABLE IEUNG WI MIEUM - 0xC0AC: 0xC715, //HANGUL SYLLABLE IEUNG WI PIEUP - 0xC0AD: 0xC717, //HANGUL SYLLABLE IEUNG WI SIOS - 0xC0AE: 0xC719, //HANGUL SYLLABLE IEUNG WI IEUNG - 0xC0AF: 0xC720, //HANGUL SYLLABLE IEUNG YU - 0xC0B0: 0xC721, //HANGUL SYLLABLE IEUNG YU KIYEOK - 0xC0B1: 0xC724, //HANGUL SYLLABLE IEUNG YU NIEUN - 0xC0B2: 0xC728, //HANGUL SYLLABLE IEUNG YU RIEUL - 0xC0B3: 0xC730, //HANGUL SYLLABLE IEUNG YU MIEUM - 0xC0B4: 0xC731, //HANGUL SYLLABLE IEUNG YU PIEUP - 0xC0B5: 0xC733, //HANGUL SYLLABLE IEUNG YU SIOS - 0xC0B6: 0xC735, //HANGUL SYLLABLE IEUNG YU IEUNG - 0xC0B7: 0xC737, //HANGUL SYLLABLE IEUNG YU CHIEUCH - 0xC0B8: 0xC73C, //HANGUL SYLLABLE IEUNG EU - 0xC0B9: 0xC73D, //HANGUL SYLLABLE IEUNG EU KIYEOK - 0xC0BA: 0xC740, //HANGUL SYLLABLE IEUNG EU NIEUN - 0xC0BB: 0xC744, //HANGUL SYLLABLE IEUNG EU RIEUL - 0xC0BC: 0xC74A, //HANGUL SYLLABLE IEUNG EU RIEULPHIEUPH - 0xC0BD: 0xC74C, //HANGUL SYLLABLE IEUNG EU MIEUM - 0xC0BE: 0xC74D, //HANGUL SYLLABLE IEUNG EU PIEUP - 0xC0BF: 0xC74F, //HANGUL SYLLABLE IEUNG EU SIOS - 0xC0C0: 0xC751, //HANGUL SYLLABLE IEUNG EU IEUNG - 0xC0C1: 0xC752, //HANGUL SYLLABLE IEUNG EU CIEUC - 0xC0C2: 0xC753, //HANGUL SYLLABLE IEUNG EU CHIEUCH - 0xC0C3: 0xC754, //HANGUL SYLLABLE IEUNG EU KHIEUKH - 0xC0C4: 0xC755, //HANGUL SYLLABLE IEUNG EU THIEUTH - 0xC0C5: 0xC756, //HANGUL SYLLABLE IEUNG EU PHIEUPH - 0xC0C6: 0xC757, //HANGUL SYLLABLE IEUNG EU HIEUH - 0xC0C7: 0xC758, //HANGUL SYLLABLE IEUNG YI - 0xC0C8: 0xC75C, //HANGUL SYLLABLE IEUNG YI NIEUN - 0xC0C9: 0xC760, //HANGUL SYLLABLE IEUNG YI RIEUL - 0xC0CA: 0xC768, //HANGUL SYLLABLE IEUNG YI MIEUM - 0xC0CB: 0xC76B, //HANGUL SYLLABLE IEUNG YI SIOS - 0xC0CC: 0xC774, //HANGUL SYLLABLE IEUNG I - 0xC0CD: 0xC775, //HANGUL SYLLABLE IEUNG I KIYEOK - 0xC0CE: 0xC778, //HANGUL SYLLABLE IEUNG I NIEUN - 0xC0CF: 0xC77C, //HANGUL SYLLABLE IEUNG I RIEUL - 0xC0D0: 0xC77D, //HANGUL SYLLABLE IEUNG I RIEULKIYEOK - 0xC0D1: 0xC77E, //HANGUL SYLLABLE IEUNG I RIEULMIEUM - 0xC0D2: 0xC783, //HANGUL SYLLABLE IEUNG I RIEULHIEUH - 0xC0D3: 0xC784, //HANGUL SYLLABLE IEUNG I MIEUM - 0xC0D4: 0xC785, //HANGUL SYLLABLE IEUNG I PIEUP - 0xC0D5: 0xC787, //HANGUL SYLLABLE IEUNG I SIOS - 0xC0D6: 0xC788, //HANGUL SYLLABLE IEUNG I SSANGSIOS - 0xC0D7: 0xC789, //HANGUL SYLLABLE IEUNG I IEUNG - 0xC0D8: 0xC78A, //HANGUL SYLLABLE IEUNG I CIEUC - 0xC0D9: 0xC78E, //HANGUL SYLLABLE IEUNG I PHIEUPH - 0xC0DA: 0xC790, //HANGUL SYLLABLE CIEUC A - 0xC0DB: 0xC791, //HANGUL SYLLABLE CIEUC A KIYEOK - 0xC0DC: 0xC794, //HANGUL SYLLABLE CIEUC A NIEUN - 0xC0DD: 0xC796, //HANGUL SYLLABLE CIEUC A NIEUNHIEUH - 0xC0DE: 0xC797, //HANGUL SYLLABLE CIEUC A TIKEUT - 0xC0DF: 0xC798, //HANGUL SYLLABLE CIEUC A RIEUL - 0xC0E0: 0xC79A, //HANGUL SYLLABLE CIEUC A RIEULMIEUM - 0xC0E1: 0xC7A0, //HANGUL SYLLABLE CIEUC A MIEUM - 0xC0E2: 0xC7A1, //HANGUL SYLLABLE CIEUC A PIEUP - 0xC0E3: 0xC7A3, //HANGUL SYLLABLE CIEUC A SIOS - 0xC0E4: 0xC7A4, //HANGUL SYLLABLE CIEUC A SSANGSIOS - 0xC0E5: 0xC7A5, //HANGUL SYLLABLE CIEUC A IEUNG - 0xC0E6: 0xC7A6, //HANGUL SYLLABLE CIEUC A CIEUC - 0xC0E7: 0xC7AC, //HANGUL SYLLABLE CIEUC AE - 0xC0E8: 0xC7AD, //HANGUL SYLLABLE CIEUC AE KIYEOK - 0xC0E9: 0xC7B0, //HANGUL SYLLABLE CIEUC AE NIEUN - 0xC0EA: 0xC7B4, //HANGUL SYLLABLE CIEUC AE RIEUL - 0xC0EB: 0xC7BC, //HANGUL SYLLABLE CIEUC AE MIEUM - 0xC0EC: 0xC7BD, //HANGUL SYLLABLE CIEUC AE PIEUP - 0xC0ED: 0xC7BF, //HANGUL SYLLABLE CIEUC AE SIOS - 0xC0EE: 0xC7C0, //HANGUL SYLLABLE CIEUC AE SSANGSIOS - 0xC0EF: 0xC7C1, //HANGUL SYLLABLE CIEUC AE IEUNG - 0xC0F0: 0xC7C8, //HANGUL SYLLABLE CIEUC YA - 0xC0F1: 0xC7C9, //HANGUL SYLLABLE CIEUC YA KIYEOK - 0xC0F2: 0xC7CC, //HANGUL SYLLABLE CIEUC YA NIEUN - 0xC0F3: 0xC7CE, //HANGUL SYLLABLE CIEUC YA NIEUNHIEUH - 0xC0F4: 0xC7D0, //HANGUL SYLLABLE CIEUC YA RIEUL - 0xC0F5: 0xC7D8, //HANGUL SYLLABLE CIEUC YA MIEUM - 0xC0F6: 0xC7DD, //HANGUL SYLLABLE CIEUC YA IEUNG - 0xC0F7: 0xC7E4, //HANGUL SYLLABLE CIEUC YAE - 0xC0F8: 0xC7E8, //HANGUL SYLLABLE CIEUC YAE NIEUN - 0xC0F9: 0xC7EC, //HANGUL SYLLABLE CIEUC YAE RIEUL - 0xC0FA: 0xC800, //HANGUL SYLLABLE CIEUC EO - 0xC0FB: 0xC801, //HANGUL SYLLABLE CIEUC EO KIYEOK - 0xC0FC: 0xC804, //HANGUL SYLLABLE CIEUC EO NIEUN - 0xC0FD: 0xC808, //HANGUL SYLLABLE CIEUC EO RIEUL - 0xC0FE: 0xC80A, //HANGUL SYLLABLE CIEUC EO RIEULMIEUM - 0xC141: 0xD564, //HANGUL SYLLABLE HIEUH A RIEULSIOS - 0xC142: 0xD566, //HANGUL SYLLABLE HIEUH A RIEULPHIEUPH - 0xC143: 0xD567, //HANGUL SYLLABLE HIEUH A RIEULHIEUH - 0xC144: 0xD56A, //HANGUL SYLLABLE HIEUH A PIEUPSIOS - 0xC145: 0xD56C, //HANGUL SYLLABLE HIEUH A SSANGSIOS - 0xC146: 0xD56E, //HANGUL SYLLABLE HIEUH A CIEUC - 0xC147: 0xD56F, //HANGUL SYLLABLE HIEUH A CHIEUCH - 0xC148: 0xD570, //HANGUL SYLLABLE HIEUH A KHIEUKH - 0xC149: 0xD571, //HANGUL SYLLABLE HIEUH A THIEUTH - 0xC14A: 0xD572, //HANGUL SYLLABLE HIEUH A PHIEUPH - 0xC14B: 0xD573, //HANGUL SYLLABLE HIEUH A HIEUH - 0xC14C: 0xD576, //HANGUL SYLLABLE HIEUH AE SSANGKIYEOK - 0xC14D: 0xD577, //HANGUL SYLLABLE HIEUH AE KIYEOKSIOS - 0xC14E: 0xD579, //HANGUL SYLLABLE HIEUH AE NIEUNCIEUC - 0xC14F: 0xD57A, //HANGUL SYLLABLE HIEUH AE NIEUNHIEUH - 0xC150: 0xD57B, //HANGUL SYLLABLE HIEUH AE TIKEUT - 0xC151: 0xD57D, //HANGUL SYLLABLE HIEUH AE RIEULKIYEOK - 0xC152: 0xD57E, //HANGUL SYLLABLE HIEUH AE RIEULMIEUM - 0xC153: 0xD57F, //HANGUL SYLLABLE HIEUH AE RIEULPIEUP - 0xC154: 0xD580, //HANGUL SYLLABLE HIEUH AE RIEULSIOS - 0xC155: 0xD581, //HANGUL SYLLABLE HIEUH AE RIEULTHIEUTH - 0xC156: 0xD582, //HANGUL SYLLABLE HIEUH AE RIEULPHIEUPH - 0xC157: 0xD583, //HANGUL SYLLABLE HIEUH AE RIEULHIEUH - 0xC158: 0xD586, //HANGUL SYLLABLE HIEUH AE PIEUPSIOS - 0xC159: 0xD58A, //HANGUL SYLLABLE HIEUH AE CIEUC - 0xC15A: 0xD58B, //HANGUL SYLLABLE HIEUH AE CHIEUCH - 0xC161: 0xD58C, //HANGUL SYLLABLE HIEUH AE KHIEUKH - 0xC162: 0xD58D, //HANGUL SYLLABLE HIEUH AE THIEUTH - 0xC163: 0xD58E, //HANGUL SYLLABLE HIEUH AE PHIEUPH - 0xC164: 0xD58F, //HANGUL SYLLABLE HIEUH AE HIEUH - 0xC165: 0xD591, //HANGUL SYLLABLE HIEUH YA KIYEOK - 0xC166: 0xD592, //HANGUL SYLLABLE HIEUH YA SSANGKIYEOK - 0xC167: 0xD593, //HANGUL SYLLABLE HIEUH YA KIYEOKSIOS - 0xC168: 0xD594, //HANGUL SYLLABLE HIEUH YA NIEUN - 0xC169: 0xD595, //HANGUL SYLLABLE HIEUH YA NIEUNCIEUC - 0xC16A: 0xD596, //HANGUL SYLLABLE HIEUH YA NIEUNHIEUH - 0xC16B: 0xD597, //HANGUL SYLLABLE HIEUH YA TIKEUT - 0xC16C: 0xD598, //HANGUL SYLLABLE HIEUH YA RIEUL - 0xC16D: 0xD599, //HANGUL SYLLABLE HIEUH YA RIEULKIYEOK - 0xC16E: 0xD59A, //HANGUL SYLLABLE HIEUH YA RIEULMIEUM - 0xC16F: 0xD59B, //HANGUL SYLLABLE HIEUH YA RIEULPIEUP - 0xC170: 0xD59C, //HANGUL SYLLABLE HIEUH YA RIEULSIOS - 0xC171: 0xD59D, //HANGUL SYLLABLE HIEUH YA RIEULTHIEUTH - 0xC172: 0xD59E, //HANGUL SYLLABLE HIEUH YA RIEULPHIEUPH - 0xC173: 0xD59F, //HANGUL SYLLABLE HIEUH YA RIEULHIEUH - 0xC174: 0xD5A0, //HANGUL SYLLABLE HIEUH YA MIEUM - 0xC175: 0xD5A1, //HANGUL SYLLABLE HIEUH YA PIEUP - 0xC176: 0xD5A2, //HANGUL SYLLABLE HIEUH YA PIEUPSIOS - 0xC177: 0xD5A3, //HANGUL SYLLABLE HIEUH YA SIOS - 0xC178: 0xD5A4, //HANGUL SYLLABLE HIEUH YA SSANGSIOS - 0xC179: 0xD5A6, //HANGUL SYLLABLE HIEUH YA CIEUC - 0xC17A: 0xD5A7, //HANGUL SYLLABLE HIEUH YA CHIEUCH - 0xC181: 0xD5A8, //HANGUL SYLLABLE HIEUH YA KHIEUKH - 0xC182: 0xD5A9, //HANGUL SYLLABLE HIEUH YA THIEUTH - 0xC183: 0xD5AA, //HANGUL SYLLABLE HIEUH YA PHIEUPH - 0xC184: 0xD5AB, //HANGUL SYLLABLE HIEUH YA HIEUH - 0xC185: 0xD5AC, //HANGUL SYLLABLE HIEUH YAE - 0xC186: 0xD5AD, //HANGUL SYLLABLE HIEUH YAE KIYEOK - 0xC187: 0xD5AE, //HANGUL SYLLABLE HIEUH YAE SSANGKIYEOK - 0xC188: 0xD5AF, //HANGUL SYLLABLE HIEUH YAE KIYEOKSIOS - 0xC189: 0xD5B0, //HANGUL SYLLABLE HIEUH YAE NIEUN - 0xC18A: 0xD5B1, //HANGUL SYLLABLE HIEUH YAE NIEUNCIEUC - 0xC18B: 0xD5B2, //HANGUL SYLLABLE HIEUH YAE NIEUNHIEUH - 0xC18C: 0xD5B3, //HANGUL SYLLABLE HIEUH YAE TIKEUT - 0xC18D: 0xD5B4, //HANGUL SYLLABLE HIEUH YAE RIEUL - 0xC18E: 0xD5B5, //HANGUL SYLLABLE HIEUH YAE RIEULKIYEOK - 0xC18F: 0xD5B6, //HANGUL SYLLABLE HIEUH YAE RIEULMIEUM - 0xC190: 0xD5B7, //HANGUL SYLLABLE HIEUH YAE RIEULPIEUP - 0xC191: 0xD5B8, //HANGUL SYLLABLE HIEUH YAE RIEULSIOS - 0xC192: 0xD5B9, //HANGUL SYLLABLE HIEUH YAE RIEULTHIEUTH - 0xC193: 0xD5BA, //HANGUL SYLLABLE HIEUH YAE RIEULPHIEUPH - 0xC194: 0xD5BB, //HANGUL SYLLABLE HIEUH YAE RIEULHIEUH - 0xC195: 0xD5BC, //HANGUL SYLLABLE HIEUH YAE MIEUM - 0xC196: 0xD5BD, //HANGUL SYLLABLE HIEUH YAE PIEUP - 0xC197: 0xD5BE, //HANGUL SYLLABLE HIEUH YAE PIEUPSIOS - 0xC198: 0xD5BF, //HANGUL SYLLABLE HIEUH YAE SIOS - 0xC199: 0xD5C0, //HANGUL SYLLABLE HIEUH YAE SSANGSIOS - 0xC19A: 0xD5C1, //HANGUL SYLLABLE HIEUH YAE IEUNG - 0xC19B: 0xD5C2, //HANGUL SYLLABLE HIEUH YAE CIEUC - 0xC19C: 0xD5C3, //HANGUL SYLLABLE HIEUH YAE CHIEUCH - 0xC19D: 0xD5C4, //HANGUL SYLLABLE HIEUH YAE KHIEUKH - 0xC19E: 0xD5C5, //HANGUL SYLLABLE HIEUH YAE THIEUTH - 0xC19F: 0xD5C6, //HANGUL SYLLABLE HIEUH YAE PHIEUPH - 0xC1A0: 0xD5C7, //HANGUL SYLLABLE HIEUH YAE HIEUH - 0xC1A1: 0xC810, //HANGUL SYLLABLE CIEUC EO MIEUM - 0xC1A2: 0xC811, //HANGUL SYLLABLE CIEUC EO PIEUP - 0xC1A3: 0xC813, //HANGUL SYLLABLE CIEUC EO SIOS - 0xC1A4: 0xC815, //HANGUL SYLLABLE CIEUC EO IEUNG - 0xC1A5: 0xC816, //HANGUL SYLLABLE CIEUC EO CIEUC - 0xC1A6: 0xC81C, //HANGUL SYLLABLE CIEUC E - 0xC1A7: 0xC81D, //HANGUL SYLLABLE CIEUC E KIYEOK - 0xC1A8: 0xC820, //HANGUL SYLLABLE CIEUC E NIEUN - 0xC1A9: 0xC824, //HANGUL SYLLABLE CIEUC E RIEUL - 0xC1AA: 0xC82C, //HANGUL SYLLABLE CIEUC E MIEUM - 0xC1AB: 0xC82D, //HANGUL SYLLABLE CIEUC E PIEUP - 0xC1AC: 0xC82F, //HANGUL SYLLABLE CIEUC E SIOS - 0xC1AD: 0xC831, //HANGUL SYLLABLE CIEUC E IEUNG - 0xC1AE: 0xC838, //HANGUL SYLLABLE CIEUC YEO - 0xC1AF: 0xC83C, //HANGUL SYLLABLE CIEUC YEO NIEUN - 0xC1B0: 0xC840, //HANGUL SYLLABLE CIEUC YEO RIEUL - 0xC1B1: 0xC848, //HANGUL SYLLABLE CIEUC YEO MIEUM - 0xC1B2: 0xC849, //HANGUL SYLLABLE CIEUC YEO PIEUP - 0xC1B3: 0xC84C, //HANGUL SYLLABLE CIEUC YEO SSANGSIOS - 0xC1B4: 0xC84D, //HANGUL SYLLABLE CIEUC YEO IEUNG - 0xC1B5: 0xC854, //HANGUL SYLLABLE CIEUC YE - 0xC1B6: 0xC870, //HANGUL SYLLABLE CIEUC O - 0xC1B7: 0xC871, //HANGUL SYLLABLE CIEUC O KIYEOK - 0xC1B8: 0xC874, //HANGUL SYLLABLE CIEUC O NIEUN - 0xC1B9: 0xC878, //HANGUL SYLLABLE CIEUC O RIEUL - 0xC1BA: 0xC87A, //HANGUL SYLLABLE CIEUC O RIEULMIEUM - 0xC1BB: 0xC880, //HANGUL SYLLABLE CIEUC O MIEUM - 0xC1BC: 0xC881, //HANGUL SYLLABLE CIEUC O PIEUP - 0xC1BD: 0xC883, //HANGUL SYLLABLE CIEUC O SIOS - 0xC1BE: 0xC885, //HANGUL SYLLABLE CIEUC O IEUNG - 0xC1BF: 0xC886, //HANGUL SYLLABLE CIEUC O CIEUC - 0xC1C0: 0xC887, //HANGUL SYLLABLE CIEUC O CHIEUCH - 0xC1C1: 0xC88B, //HANGUL SYLLABLE CIEUC O HIEUH - 0xC1C2: 0xC88C, //HANGUL SYLLABLE CIEUC WA - 0xC1C3: 0xC88D, //HANGUL SYLLABLE CIEUC WA KIYEOK - 0xC1C4: 0xC894, //HANGUL SYLLABLE CIEUC WA RIEUL - 0xC1C5: 0xC89D, //HANGUL SYLLABLE CIEUC WA PIEUP - 0xC1C6: 0xC89F, //HANGUL SYLLABLE CIEUC WA SIOS - 0xC1C7: 0xC8A1, //HANGUL SYLLABLE CIEUC WA IEUNG - 0xC1C8: 0xC8A8, //HANGUL SYLLABLE CIEUC WAE - 0xC1C9: 0xC8BC, //HANGUL SYLLABLE CIEUC WAE SSANGSIOS - 0xC1CA: 0xC8BD, //HANGUL SYLLABLE CIEUC WAE IEUNG - 0xC1CB: 0xC8C4, //HANGUL SYLLABLE CIEUC OE - 0xC1CC: 0xC8C8, //HANGUL SYLLABLE CIEUC OE NIEUN - 0xC1CD: 0xC8CC, //HANGUL SYLLABLE CIEUC OE RIEUL - 0xC1CE: 0xC8D4, //HANGUL SYLLABLE CIEUC OE MIEUM - 0xC1CF: 0xC8D5, //HANGUL SYLLABLE CIEUC OE PIEUP - 0xC1D0: 0xC8D7, //HANGUL SYLLABLE CIEUC OE SIOS - 0xC1D1: 0xC8D9, //HANGUL SYLLABLE CIEUC OE IEUNG - 0xC1D2: 0xC8E0, //HANGUL SYLLABLE CIEUC YO - 0xC1D3: 0xC8E1, //HANGUL SYLLABLE CIEUC YO KIYEOK - 0xC1D4: 0xC8E4, //HANGUL SYLLABLE CIEUC YO NIEUN - 0xC1D5: 0xC8F5, //HANGUL SYLLABLE CIEUC YO IEUNG - 0xC1D6: 0xC8FC, //HANGUL SYLLABLE CIEUC U - 0xC1D7: 0xC8FD, //HANGUL SYLLABLE CIEUC U KIYEOK - 0xC1D8: 0xC900, //HANGUL SYLLABLE CIEUC U NIEUN - 0xC1D9: 0xC904, //HANGUL SYLLABLE CIEUC U RIEUL - 0xC1DA: 0xC905, //HANGUL SYLLABLE CIEUC U RIEULKIYEOK - 0xC1DB: 0xC906, //HANGUL SYLLABLE CIEUC U RIEULMIEUM - 0xC1DC: 0xC90C, //HANGUL SYLLABLE CIEUC U MIEUM - 0xC1DD: 0xC90D, //HANGUL SYLLABLE CIEUC U PIEUP - 0xC1DE: 0xC90F, //HANGUL SYLLABLE CIEUC U SIOS - 0xC1DF: 0xC911, //HANGUL SYLLABLE CIEUC U IEUNG - 0xC1E0: 0xC918, //HANGUL SYLLABLE CIEUC WEO - 0xC1E1: 0xC92C, //HANGUL SYLLABLE CIEUC WEO SSANGSIOS - 0xC1E2: 0xC934, //HANGUL SYLLABLE CIEUC WE - 0xC1E3: 0xC950, //HANGUL SYLLABLE CIEUC WI - 0xC1E4: 0xC951, //HANGUL SYLLABLE CIEUC WI KIYEOK - 0xC1E5: 0xC954, //HANGUL SYLLABLE CIEUC WI NIEUN - 0xC1E6: 0xC958, //HANGUL SYLLABLE CIEUC WI RIEUL - 0xC1E7: 0xC960, //HANGUL SYLLABLE CIEUC WI MIEUM - 0xC1E8: 0xC961, //HANGUL SYLLABLE CIEUC WI PIEUP - 0xC1E9: 0xC963, //HANGUL SYLLABLE CIEUC WI SIOS - 0xC1EA: 0xC96C, //HANGUL SYLLABLE CIEUC YU - 0xC1EB: 0xC970, //HANGUL SYLLABLE CIEUC YU NIEUN - 0xC1EC: 0xC974, //HANGUL SYLLABLE CIEUC YU RIEUL - 0xC1ED: 0xC97C, //HANGUL SYLLABLE CIEUC YU MIEUM - 0xC1EE: 0xC988, //HANGUL SYLLABLE CIEUC EU - 0xC1EF: 0xC989, //HANGUL SYLLABLE CIEUC EU KIYEOK - 0xC1F0: 0xC98C, //HANGUL SYLLABLE CIEUC EU NIEUN - 0xC1F1: 0xC990, //HANGUL SYLLABLE CIEUC EU RIEUL - 0xC1F2: 0xC998, //HANGUL SYLLABLE CIEUC EU MIEUM - 0xC1F3: 0xC999, //HANGUL SYLLABLE CIEUC EU PIEUP - 0xC1F4: 0xC99B, //HANGUL SYLLABLE CIEUC EU SIOS - 0xC1F5: 0xC99D, //HANGUL SYLLABLE CIEUC EU IEUNG - 0xC1F6: 0xC9C0, //HANGUL SYLLABLE CIEUC I - 0xC1F7: 0xC9C1, //HANGUL SYLLABLE CIEUC I KIYEOK - 0xC1F8: 0xC9C4, //HANGUL SYLLABLE CIEUC I NIEUN - 0xC1F9: 0xC9C7, //HANGUL SYLLABLE CIEUC I TIKEUT - 0xC1FA: 0xC9C8, //HANGUL SYLLABLE CIEUC I RIEUL - 0xC1FB: 0xC9CA, //HANGUL SYLLABLE CIEUC I RIEULMIEUM - 0xC1FC: 0xC9D0, //HANGUL SYLLABLE CIEUC I MIEUM - 0xC1FD: 0xC9D1, //HANGUL SYLLABLE CIEUC I PIEUP - 0xC1FE: 0xC9D3, //HANGUL SYLLABLE CIEUC I SIOS - 0xC241: 0xD5CA, //HANGUL SYLLABLE HIEUH EO SSANGKIYEOK - 0xC242: 0xD5CB, //HANGUL SYLLABLE HIEUH EO KIYEOKSIOS - 0xC243: 0xD5CD, //HANGUL SYLLABLE HIEUH EO NIEUNCIEUC - 0xC244: 0xD5CE, //HANGUL SYLLABLE HIEUH EO NIEUNHIEUH - 0xC245: 0xD5CF, //HANGUL SYLLABLE HIEUH EO TIKEUT - 0xC246: 0xD5D1, //HANGUL SYLLABLE HIEUH EO RIEULKIYEOK - 0xC247: 0xD5D3, //HANGUL SYLLABLE HIEUH EO RIEULPIEUP - 0xC248: 0xD5D4, //HANGUL SYLLABLE HIEUH EO RIEULSIOS - 0xC249: 0xD5D5, //HANGUL SYLLABLE HIEUH EO RIEULTHIEUTH - 0xC24A: 0xD5D6, //HANGUL SYLLABLE HIEUH EO RIEULPHIEUPH - 0xC24B: 0xD5D7, //HANGUL SYLLABLE HIEUH EO RIEULHIEUH - 0xC24C: 0xD5DA, //HANGUL SYLLABLE HIEUH EO PIEUPSIOS - 0xC24D: 0xD5DC, //HANGUL SYLLABLE HIEUH EO SSANGSIOS - 0xC24E: 0xD5DE, //HANGUL SYLLABLE HIEUH EO CIEUC - 0xC24F: 0xD5DF, //HANGUL SYLLABLE HIEUH EO CHIEUCH - 0xC250: 0xD5E0, //HANGUL SYLLABLE HIEUH EO KHIEUKH - 0xC251: 0xD5E1, //HANGUL SYLLABLE HIEUH EO THIEUTH - 0xC252: 0xD5E2, //HANGUL SYLLABLE HIEUH EO PHIEUPH - 0xC253: 0xD5E3, //HANGUL SYLLABLE HIEUH EO HIEUH - 0xC254: 0xD5E6, //HANGUL SYLLABLE HIEUH E SSANGKIYEOK - 0xC255: 0xD5E7, //HANGUL SYLLABLE HIEUH E KIYEOKSIOS - 0xC256: 0xD5E9, //HANGUL SYLLABLE HIEUH E NIEUNCIEUC - 0xC257: 0xD5EA, //HANGUL SYLLABLE HIEUH E NIEUNHIEUH - 0xC258: 0xD5EB, //HANGUL SYLLABLE HIEUH E TIKEUT - 0xC259: 0xD5ED, //HANGUL SYLLABLE HIEUH E RIEULKIYEOK - 0xC25A: 0xD5EE, //HANGUL SYLLABLE HIEUH E RIEULMIEUM - 0xC261: 0xD5EF, //HANGUL SYLLABLE HIEUH E RIEULPIEUP - 0xC262: 0xD5F0, //HANGUL SYLLABLE HIEUH E RIEULSIOS - 0xC263: 0xD5F1, //HANGUL SYLLABLE HIEUH E RIEULTHIEUTH - 0xC264: 0xD5F2, //HANGUL SYLLABLE HIEUH E RIEULPHIEUPH - 0xC265: 0xD5F3, //HANGUL SYLLABLE HIEUH E RIEULHIEUH - 0xC266: 0xD5F6, //HANGUL SYLLABLE HIEUH E PIEUPSIOS - 0xC267: 0xD5F8, //HANGUL SYLLABLE HIEUH E SSANGSIOS - 0xC268: 0xD5FA, //HANGUL SYLLABLE HIEUH E CIEUC - 0xC269: 0xD5FB, //HANGUL SYLLABLE HIEUH E CHIEUCH - 0xC26A: 0xD5FC, //HANGUL SYLLABLE HIEUH E KHIEUKH - 0xC26B: 0xD5FD, //HANGUL SYLLABLE HIEUH E THIEUTH - 0xC26C: 0xD5FE, //HANGUL SYLLABLE HIEUH E PHIEUPH - 0xC26D: 0xD5FF, //HANGUL SYLLABLE HIEUH E HIEUH - 0xC26E: 0xD602, //HANGUL SYLLABLE HIEUH YEO SSANGKIYEOK - 0xC26F: 0xD603, //HANGUL SYLLABLE HIEUH YEO KIYEOKSIOS - 0xC270: 0xD605, //HANGUL SYLLABLE HIEUH YEO NIEUNCIEUC - 0xC271: 0xD606, //HANGUL SYLLABLE HIEUH YEO NIEUNHIEUH - 0xC272: 0xD607, //HANGUL SYLLABLE HIEUH YEO TIKEUT - 0xC273: 0xD609, //HANGUL SYLLABLE HIEUH YEO RIEULKIYEOK - 0xC274: 0xD60A, //HANGUL SYLLABLE HIEUH YEO RIEULMIEUM - 0xC275: 0xD60B, //HANGUL SYLLABLE HIEUH YEO RIEULPIEUP - 0xC276: 0xD60C, //HANGUL SYLLABLE HIEUH YEO RIEULSIOS - 0xC277: 0xD60D, //HANGUL SYLLABLE HIEUH YEO RIEULTHIEUTH - 0xC278: 0xD60E, //HANGUL SYLLABLE HIEUH YEO RIEULPHIEUPH - 0xC279: 0xD60F, //HANGUL SYLLABLE HIEUH YEO RIEULHIEUH - 0xC27A: 0xD612, //HANGUL SYLLABLE HIEUH YEO PIEUPSIOS - 0xC281: 0xD616, //HANGUL SYLLABLE HIEUH YEO CIEUC - 0xC282: 0xD617, //HANGUL SYLLABLE HIEUH YEO CHIEUCH - 0xC283: 0xD618, //HANGUL SYLLABLE HIEUH YEO KHIEUKH - 0xC284: 0xD619, //HANGUL SYLLABLE HIEUH YEO THIEUTH - 0xC285: 0xD61A, //HANGUL SYLLABLE HIEUH YEO PHIEUPH - 0xC286: 0xD61B, //HANGUL SYLLABLE HIEUH YEO HIEUH - 0xC287: 0xD61D, //HANGUL SYLLABLE HIEUH YE KIYEOK - 0xC288: 0xD61E, //HANGUL SYLLABLE HIEUH YE SSANGKIYEOK - 0xC289: 0xD61F, //HANGUL SYLLABLE HIEUH YE KIYEOKSIOS - 0xC28A: 0xD621, //HANGUL SYLLABLE HIEUH YE NIEUNCIEUC - 0xC28B: 0xD622, //HANGUL SYLLABLE HIEUH YE NIEUNHIEUH - 0xC28C: 0xD623, //HANGUL SYLLABLE HIEUH YE TIKEUT - 0xC28D: 0xD625, //HANGUL SYLLABLE HIEUH YE RIEULKIYEOK - 0xC28E: 0xD626, //HANGUL SYLLABLE HIEUH YE RIEULMIEUM - 0xC28F: 0xD627, //HANGUL SYLLABLE HIEUH YE RIEULPIEUP - 0xC290: 0xD628, //HANGUL SYLLABLE HIEUH YE RIEULSIOS - 0xC291: 0xD629, //HANGUL SYLLABLE HIEUH YE RIEULTHIEUTH - 0xC292: 0xD62A, //HANGUL SYLLABLE HIEUH YE RIEULPHIEUPH - 0xC293: 0xD62B, //HANGUL SYLLABLE HIEUH YE RIEULHIEUH - 0xC294: 0xD62C, //HANGUL SYLLABLE HIEUH YE MIEUM - 0xC295: 0xD62E, //HANGUL SYLLABLE HIEUH YE PIEUPSIOS - 0xC296: 0xD62F, //HANGUL SYLLABLE HIEUH YE SIOS - 0xC297: 0xD630, //HANGUL SYLLABLE HIEUH YE SSANGSIOS - 0xC298: 0xD631, //HANGUL SYLLABLE HIEUH YE IEUNG - 0xC299: 0xD632, //HANGUL SYLLABLE HIEUH YE CIEUC - 0xC29A: 0xD633, //HANGUL SYLLABLE HIEUH YE CHIEUCH - 0xC29B: 0xD634, //HANGUL SYLLABLE HIEUH YE KHIEUKH - 0xC29C: 0xD635, //HANGUL SYLLABLE HIEUH YE THIEUTH - 0xC29D: 0xD636, //HANGUL SYLLABLE HIEUH YE PHIEUPH - 0xC29E: 0xD637, //HANGUL SYLLABLE HIEUH YE HIEUH - 0xC29F: 0xD63A, //HANGUL SYLLABLE HIEUH O SSANGKIYEOK - 0xC2A0: 0xD63B, //HANGUL SYLLABLE HIEUH O KIYEOKSIOS - 0xC2A1: 0xC9D5, //HANGUL SYLLABLE CIEUC I IEUNG - 0xC2A2: 0xC9D6, //HANGUL SYLLABLE CIEUC I CIEUC - 0xC2A3: 0xC9D9, //HANGUL SYLLABLE CIEUC I THIEUTH - 0xC2A4: 0xC9DA, //HANGUL SYLLABLE CIEUC I PHIEUPH - 0xC2A5: 0xC9DC, //HANGUL SYLLABLE SSANGCIEUC A - 0xC2A6: 0xC9DD, //HANGUL SYLLABLE SSANGCIEUC A KIYEOK - 0xC2A7: 0xC9E0, //HANGUL SYLLABLE SSANGCIEUC A NIEUN - 0xC2A8: 0xC9E2, //HANGUL SYLLABLE SSANGCIEUC A NIEUNHIEUH - 0xC2A9: 0xC9E4, //HANGUL SYLLABLE SSANGCIEUC A RIEUL - 0xC2AA: 0xC9E7, //HANGUL SYLLABLE SSANGCIEUC A RIEULPIEUP - 0xC2AB: 0xC9EC, //HANGUL SYLLABLE SSANGCIEUC A MIEUM - 0xC2AC: 0xC9ED, //HANGUL SYLLABLE SSANGCIEUC A PIEUP - 0xC2AD: 0xC9EF, //HANGUL SYLLABLE SSANGCIEUC A SIOS - 0xC2AE: 0xC9F0, //HANGUL SYLLABLE SSANGCIEUC A SSANGSIOS - 0xC2AF: 0xC9F1, //HANGUL SYLLABLE SSANGCIEUC A IEUNG - 0xC2B0: 0xC9F8, //HANGUL SYLLABLE SSANGCIEUC AE - 0xC2B1: 0xC9F9, //HANGUL SYLLABLE SSANGCIEUC AE KIYEOK - 0xC2B2: 0xC9FC, //HANGUL SYLLABLE SSANGCIEUC AE NIEUN - 0xC2B3: 0xCA00, //HANGUL SYLLABLE SSANGCIEUC AE RIEUL - 0xC2B4: 0xCA08, //HANGUL SYLLABLE SSANGCIEUC AE MIEUM - 0xC2B5: 0xCA09, //HANGUL SYLLABLE SSANGCIEUC AE PIEUP - 0xC2B6: 0xCA0B, //HANGUL SYLLABLE SSANGCIEUC AE SIOS - 0xC2B7: 0xCA0C, //HANGUL SYLLABLE SSANGCIEUC AE SSANGSIOS - 0xC2B8: 0xCA0D, //HANGUL SYLLABLE SSANGCIEUC AE IEUNG - 0xC2B9: 0xCA14, //HANGUL SYLLABLE SSANGCIEUC YA - 0xC2BA: 0xCA18, //HANGUL SYLLABLE SSANGCIEUC YA NIEUN - 0xC2BB: 0xCA29, //HANGUL SYLLABLE SSANGCIEUC YA IEUNG - 0xC2BC: 0xCA4C, //HANGUL SYLLABLE SSANGCIEUC EO - 0xC2BD: 0xCA4D, //HANGUL SYLLABLE SSANGCIEUC EO KIYEOK - 0xC2BE: 0xCA50, //HANGUL SYLLABLE SSANGCIEUC EO NIEUN - 0xC2BF: 0xCA54, //HANGUL SYLLABLE SSANGCIEUC EO RIEUL - 0xC2C0: 0xCA5C, //HANGUL SYLLABLE SSANGCIEUC EO MIEUM - 0xC2C1: 0xCA5D, //HANGUL SYLLABLE SSANGCIEUC EO PIEUP - 0xC2C2: 0xCA5F, //HANGUL SYLLABLE SSANGCIEUC EO SIOS - 0xC2C3: 0xCA60, //HANGUL SYLLABLE SSANGCIEUC EO SSANGSIOS - 0xC2C4: 0xCA61, //HANGUL SYLLABLE SSANGCIEUC EO IEUNG - 0xC2C5: 0xCA68, //HANGUL SYLLABLE SSANGCIEUC E - 0xC2C6: 0xCA7D, //HANGUL SYLLABLE SSANGCIEUC E IEUNG - 0xC2C7: 0xCA84, //HANGUL SYLLABLE SSANGCIEUC YEO - 0xC2C8: 0xCA98, //HANGUL SYLLABLE SSANGCIEUC YEO SSANGSIOS - 0xC2C9: 0xCABC, //HANGUL SYLLABLE SSANGCIEUC O - 0xC2CA: 0xCABD, //HANGUL SYLLABLE SSANGCIEUC O KIYEOK - 0xC2CB: 0xCAC0, //HANGUL SYLLABLE SSANGCIEUC O NIEUN - 0xC2CC: 0xCAC4, //HANGUL SYLLABLE SSANGCIEUC O RIEUL - 0xC2CD: 0xCACC, //HANGUL SYLLABLE SSANGCIEUC O MIEUM - 0xC2CE: 0xCACD, //HANGUL SYLLABLE SSANGCIEUC O PIEUP - 0xC2CF: 0xCACF, //HANGUL SYLLABLE SSANGCIEUC O SIOS - 0xC2D0: 0xCAD1, //HANGUL SYLLABLE SSANGCIEUC O IEUNG - 0xC2D1: 0xCAD3, //HANGUL SYLLABLE SSANGCIEUC O CHIEUCH - 0xC2D2: 0xCAD8, //HANGUL SYLLABLE SSANGCIEUC WA - 0xC2D3: 0xCAD9, //HANGUL SYLLABLE SSANGCIEUC WA KIYEOK - 0xC2D4: 0xCAE0, //HANGUL SYLLABLE SSANGCIEUC WA RIEUL - 0xC2D5: 0xCAEC, //HANGUL SYLLABLE SSANGCIEUC WA SSANGSIOS - 0xC2D6: 0xCAF4, //HANGUL SYLLABLE SSANGCIEUC WAE - 0xC2D7: 0xCB08, //HANGUL SYLLABLE SSANGCIEUC WAE SSANGSIOS - 0xC2D8: 0xCB10, //HANGUL SYLLABLE SSANGCIEUC OE - 0xC2D9: 0xCB14, //HANGUL SYLLABLE SSANGCIEUC OE NIEUN - 0xC2DA: 0xCB18, //HANGUL SYLLABLE SSANGCIEUC OE RIEUL - 0xC2DB: 0xCB20, //HANGUL SYLLABLE SSANGCIEUC OE MIEUM - 0xC2DC: 0xCB21, //HANGUL SYLLABLE SSANGCIEUC OE PIEUP - 0xC2DD: 0xCB41, //HANGUL SYLLABLE SSANGCIEUC YO IEUNG - 0xC2DE: 0xCB48, //HANGUL SYLLABLE SSANGCIEUC U - 0xC2DF: 0xCB49, //HANGUL SYLLABLE SSANGCIEUC U KIYEOK - 0xC2E0: 0xCB4C, //HANGUL SYLLABLE SSANGCIEUC U NIEUN - 0xC2E1: 0xCB50, //HANGUL SYLLABLE SSANGCIEUC U RIEUL - 0xC2E2: 0xCB58, //HANGUL SYLLABLE SSANGCIEUC U MIEUM - 0xC2E3: 0xCB59, //HANGUL SYLLABLE SSANGCIEUC U PIEUP - 0xC2E4: 0xCB5D, //HANGUL SYLLABLE SSANGCIEUC U IEUNG - 0xC2E5: 0xCB64, //HANGUL SYLLABLE SSANGCIEUC WEO - 0xC2E6: 0xCB78, //HANGUL SYLLABLE SSANGCIEUC WEO SSANGSIOS - 0xC2E7: 0xCB79, //HANGUL SYLLABLE SSANGCIEUC WEO IEUNG - 0xC2E8: 0xCB9C, //HANGUL SYLLABLE SSANGCIEUC WI - 0xC2E9: 0xCBB8, //HANGUL SYLLABLE SSANGCIEUC YU - 0xC2EA: 0xCBD4, //HANGUL SYLLABLE SSANGCIEUC EU - 0xC2EB: 0xCBE4, //HANGUL SYLLABLE SSANGCIEUC EU MIEUM - 0xC2EC: 0xCBE7, //HANGUL SYLLABLE SSANGCIEUC EU SIOS - 0xC2ED: 0xCBE9, //HANGUL SYLLABLE SSANGCIEUC EU IEUNG - 0xC2EE: 0xCC0C, //HANGUL SYLLABLE SSANGCIEUC I - 0xC2EF: 0xCC0D, //HANGUL SYLLABLE SSANGCIEUC I KIYEOK - 0xC2F0: 0xCC10, //HANGUL SYLLABLE SSANGCIEUC I NIEUN - 0xC2F1: 0xCC14, //HANGUL SYLLABLE SSANGCIEUC I RIEUL - 0xC2F2: 0xCC1C, //HANGUL SYLLABLE SSANGCIEUC I MIEUM - 0xC2F3: 0xCC1D, //HANGUL SYLLABLE SSANGCIEUC I PIEUP - 0xC2F4: 0xCC21, //HANGUL SYLLABLE SSANGCIEUC I IEUNG - 0xC2F5: 0xCC22, //HANGUL SYLLABLE SSANGCIEUC I CIEUC - 0xC2F6: 0xCC27, //HANGUL SYLLABLE SSANGCIEUC I HIEUH - 0xC2F7: 0xCC28, //HANGUL SYLLABLE CHIEUCH A - 0xC2F8: 0xCC29, //HANGUL SYLLABLE CHIEUCH A KIYEOK - 0xC2F9: 0xCC2C, //HANGUL SYLLABLE CHIEUCH A NIEUN - 0xC2FA: 0xCC2E, //HANGUL SYLLABLE CHIEUCH A NIEUNHIEUH - 0xC2FB: 0xCC30, //HANGUL SYLLABLE CHIEUCH A RIEUL - 0xC2FC: 0xCC38, //HANGUL SYLLABLE CHIEUCH A MIEUM - 0xC2FD: 0xCC39, //HANGUL SYLLABLE CHIEUCH A PIEUP - 0xC2FE: 0xCC3B, //HANGUL SYLLABLE CHIEUCH A SIOS - 0xC341: 0xD63D, //HANGUL SYLLABLE HIEUH O NIEUNCIEUC - 0xC342: 0xD63E, //HANGUL SYLLABLE HIEUH O NIEUNHIEUH - 0xC343: 0xD63F, //HANGUL SYLLABLE HIEUH O TIKEUT - 0xC344: 0xD641, //HANGUL SYLLABLE HIEUH O RIEULKIYEOK - 0xC345: 0xD642, //HANGUL SYLLABLE HIEUH O RIEULMIEUM - 0xC346: 0xD643, //HANGUL SYLLABLE HIEUH O RIEULPIEUP - 0xC347: 0xD644, //HANGUL SYLLABLE HIEUH O RIEULSIOS - 0xC348: 0xD646, //HANGUL SYLLABLE HIEUH O RIEULPHIEUPH - 0xC349: 0xD647, //HANGUL SYLLABLE HIEUH O RIEULHIEUH - 0xC34A: 0xD64A, //HANGUL SYLLABLE HIEUH O PIEUPSIOS - 0xC34B: 0xD64C, //HANGUL SYLLABLE HIEUH O SSANGSIOS - 0xC34C: 0xD64E, //HANGUL SYLLABLE HIEUH O CIEUC - 0xC34D: 0xD64F, //HANGUL SYLLABLE HIEUH O CHIEUCH - 0xC34E: 0xD650, //HANGUL SYLLABLE HIEUH O KHIEUKH - 0xC34F: 0xD652, //HANGUL SYLLABLE HIEUH O PHIEUPH - 0xC350: 0xD653, //HANGUL SYLLABLE HIEUH O HIEUH - 0xC351: 0xD656, //HANGUL SYLLABLE HIEUH WA SSANGKIYEOK - 0xC352: 0xD657, //HANGUL SYLLABLE HIEUH WA KIYEOKSIOS - 0xC353: 0xD659, //HANGUL SYLLABLE HIEUH WA NIEUNCIEUC - 0xC354: 0xD65A, //HANGUL SYLLABLE HIEUH WA NIEUNHIEUH - 0xC355: 0xD65B, //HANGUL SYLLABLE HIEUH WA TIKEUT - 0xC356: 0xD65D, //HANGUL SYLLABLE HIEUH WA RIEULKIYEOK - 0xC357: 0xD65E, //HANGUL SYLLABLE HIEUH WA RIEULMIEUM - 0xC358: 0xD65F, //HANGUL SYLLABLE HIEUH WA RIEULPIEUP - 0xC359: 0xD660, //HANGUL SYLLABLE HIEUH WA RIEULSIOS - 0xC35A: 0xD661, //HANGUL SYLLABLE HIEUH WA RIEULTHIEUTH - 0xC361: 0xD662, //HANGUL SYLLABLE HIEUH WA RIEULPHIEUPH - 0xC362: 0xD663, //HANGUL SYLLABLE HIEUH WA RIEULHIEUH - 0xC363: 0xD664, //HANGUL SYLLABLE HIEUH WA MIEUM - 0xC364: 0xD665, //HANGUL SYLLABLE HIEUH WA PIEUP - 0xC365: 0xD666, //HANGUL SYLLABLE HIEUH WA PIEUPSIOS - 0xC366: 0xD668, //HANGUL SYLLABLE HIEUH WA SSANGSIOS - 0xC367: 0xD66A, //HANGUL SYLLABLE HIEUH WA CIEUC - 0xC368: 0xD66B, //HANGUL SYLLABLE HIEUH WA CHIEUCH - 0xC369: 0xD66C, //HANGUL SYLLABLE HIEUH WA KHIEUKH - 0xC36A: 0xD66D, //HANGUL SYLLABLE HIEUH WA THIEUTH - 0xC36B: 0xD66E, //HANGUL SYLLABLE HIEUH WA PHIEUPH - 0xC36C: 0xD66F, //HANGUL SYLLABLE HIEUH WA HIEUH - 0xC36D: 0xD672, //HANGUL SYLLABLE HIEUH WAE SSANGKIYEOK - 0xC36E: 0xD673, //HANGUL SYLLABLE HIEUH WAE KIYEOKSIOS - 0xC36F: 0xD675, //HANGUL SYLLABLE HIEUH WAE NIEUNCIEUC - 0xC370: 0xD676, //HANGUL SYLLABLE HIEUH WAE NIEUNHIEUH - 0xC371: 0xD677, //HANGUL SYLLABLE HIEUH WAE TIKEUT - 0xC372: 0xD678, //HANGUL SYLLABLE HIEUH WAE RIEUL - 0xC373: 0xD679, //HANGUL SYLLABLE HIEUH WAE RIEULKIYEOK - 0xC374: 0xD67A, //HANGUL SYLLABLE HIEUH WAE RIEULMIEUM - 0xC375: 0xD67B, //HANGUL SYLLABLE HIEUH WAE RIEULPIEUP - 0xC376: 0xD67C, //HANGUL SYLLABLE HIEUH WAE RIEULSIOS - 0xC377: 0xD67D, //HANGUL SYLLABLE HIEUH WAE RIEULTHIEUTH - 0xC378: 0xD67E, //HANGUL SYLLABLE HIEUH WAE RIEULPHIEUPH - 0xC379: 0xD67F, //HANGUL SYLLABLE HIEUH WAE RIEULHIEUH - 0xC37A: 0xD680, //HANGUL SYLLABLE HIEUH WAE MIEUM - 0xC381: 0xD681, //HANGUL SYLLABLE HIEUH WAE PIEUP - 0xC382: 0xD682, //HANGUL SYLLABLE HIEUH WAE PIEUPSIOS - 0xC383: 0xD684, //HANGUL SYLLABLE HIEUH WAE SSANGSIOS - 0xC384: 0xD686, //HANGUL SYLLABLE HIEUH WAE CIEUC - 0xC385: 0xD687, //HANGUL SYLLABLE HIEUH WAE CHIEUCH - 0xC386: 0xD688, //HANGUL SYLLABLE HIEUH WAE KHIEUKH - 0xC387: 0xD689, //HANGUL SYLLABLE HIEUH WAE THIEUTH - 0xC388: 0xD68A, //HANGUL SYLLABLE HIEUH WAE PHIEUPH - 0xC389: 0xD68B, //HANGUL SYLLABLE HIEUH WAE HIEUH - 0xC38A: 0xD68E, //HANGUL SYLLABLE HIEUH OE SSANGKIYEOK - 0xC38B: 0xD68F, //HANGUL SYLLABLE HIEUH OE KIYEOKSIOS - 0xC38C: 0xD691, //HANGUL SYLLABLE HIEUH OE NIEUNCIEUC - 0xC38D: 0xD692, //HANGUL SYLLABLE HIEUH OE NIEUNHIEUH - 0xC38E: 0xD693, //HANGUL SYLLABLE HIEUH OE TIKEUT - 0xC38F: 0xD695, //HANGUL SYLLABLE HIEUH OE RIEULKIYEOK - 0xC390: 0xD696, //HANGUL SYLLABLE HIEUH OE RIEULMIEUM - 0xC391: 0xD697, //HANGUL SYLLABLE HIEUH OE RIEULPIEUP - 0xC392: 0xD698, //HANGUL SYLLABLE HIEUH OE RIEULSIOS - 0xC393: 0xD699, //HANGUL SYLLABLE HIEUH OE RIEULTHIEUTH - 0xC394: 0xD69A, //HANGUL SYLLABLE HIEUH OE RIEULPHIEUPH - 0xC395: 0xD69B, //HANGUL SYLLABLE HIEUH OE RIEULHIEUH - 0xC396: 0xD69C, //HANGUL SYLLABLE HIEUH OE MIEUM - 0xC397: 0xD69E, //HANGUL SYLLABLE HIEUH OE PIEUPSIOS - 0xC398: 0xD6A0, //HANGUL SYLLABLE HIEUH OE SSANGSIOS - 0xC399: 0xD6A2, //HANGUL SYLLABLE HIEUH OE CIEUC - 0xC39A: 0xD6A3, //HANGUL SYLLABLE HIEUH OE CHIEUCH - 0xC39B: 0xD6A4, //HANGUL SYLLABLE HIEUH OE KHIEUKH - 0xC39C: 0xD6A5, //HANGUL SYLLABLE HIEUH OE THIEUTH - 0xC39D: 0xD6A6, //HANGUL SYLLABLE HIEUH OE PHIEUPH - 0xC39E: 0xD6A7, //HANGUL SYLLABLE HIEUH OE HIEUH - 0xC39F: 0xD6A9, //HANGUL SYLLABLE HIEUH YO KIYEOK - 0xC3A0: 0xD6AA, //HANGUL SYLLABLE HIEUH YO SSANGKIYEOK - 0xC3A1: 0xCC3C, //HANGUL SYLLABLE CHIEUCH A SSANGSIOS - 0xC3A2: 0xCC3D, //HANGUL SYLLABLE CHIEUCH A IEUNG - 0xC3A3: 0xCC3E, //HANGUL SYLLABLE CHIEUCH A CIEUC - 0xC3A4: 0xCC44, //HANGUL SYLLABLE CHIEUCH AE - 0xC3A5: 0xCC45, //HANGUL SYLLABLE CHIEUCH AE KIYEOK - 0xC3A6: 0xCC48, //HANGUL SYLLABLE CHIEUCH AE NIEUN - 0xC3A7: 0xCC4C, //HANGUL SYLLABLE CHIEUCH AE RIEUL - 0xC3A8: 0xCC54, //HANGUL SYLLABLE CHIEUCH AE MIEUM - 0xC3A9: 0xCC55, //HANGUL SYLLABLE CHIEUCH AE PIEUP - 0xC3AA: 0xCC57, //HANGUL SYLLABLE CHIEUCH AE SIOS - 0xC3AB: 0xCC58, //HANGUL SYLLABLE CHIEUCH AE SSANGSIOS - 0xC3AC: 0xCC59, //HANGUL SYLLABLE CHIEUCH AE IEUNG - 0xC3AD: 0xCC60, //HANGUL SYLLABLE CHIEUCH YA - 0xC3AE: 0xCC64, //HANGUL SYLLABLE CHIEUCH YA NIEUN - 0xC3AF: 0xCC66, //HANGUL SYLLABLE CHIEUCH YA NIEUNHIEUH - 0xC3B0: 0xCC68, //HANGUL SYLLABLE CHIEUCH YA RIEUL - 0xC3B1: 0xCC70, //HANGUL SYLLABLE CHIEUCH YA MIEUM - 0xC3B2: 0xCC75, //HANGUL SYLLABLE CHIEUCH YA IEUNG - 0xC3B3: 0xCC98, //HANGUL SYLLABLE CHIEUCH EO - 0xC3B4: 0xCC99, //HANGUL SYLLABLE CHIEUCH EO KIYEOK - 0xC3B5: 0xCC9C, //HANGUL SYLLABLE CHIEUCH EO NIEUN - 0xC3B6: 0xCCA0, //HANGUL SYLLABLE CHIEUCH EO RIEUL - 0xC3B7: 0xCCA8, //HANGUL SYLLABLE CHIEUCH EO MIEUM - 0xC3B8: 0xCCA9, //HANGUL SYLLABLE CHIEUCH EO PIEUP - 0xC3B9: 0xCCAB, //HANGUL SYLLABLE CHIEUCH EO SIOS - 0xC3BA: 0xCCAC, //HANGUL SYLLABLE CHIEUCH EO SSANGSIOS - 0xC3BB: 0xCCAD, //HANGUL SYLLABLE CHIEUCH EO IEUNG - 0xC3BC: 0xCCB4, //HANGUL SYLLABLE CHIEUCH E - 0xC3BD: 0xCCB5, //HANGUL SYLLABLE CHIEUCH E KIYEOK - 0xC3BE: 0xCCB8, //HANGUL SYLLABLE CHIEUCH E NIEUN - 0xC3BF: 0xCCBC, //HANGUL SYLLABLE CHIEUCH E RIEUL - 0xC3C0: 0xCCC4, //HANGUL SYLLABLE CHIEUCH E MIEUM - 0xC3C1: 0xCCC5, //HANGUL SYLLABLE CHIEUCH E PIEUP - 0xC3C2: 0xCCC7, //HANGUL SYLLABLE CHIEUCH E SIOS - 0xC3C3: 0xCCC9, //HANGUL SYLLABLE CHIEUCH E IEUNG - 0xC3C4: 0xCCD0, //HANGUL SYLLABLE CHIEUCH YEO - 0xC3C5: 0xCCD4, //HANGUL SYLLABLE CHIEUCH YEO NIEUN - 0xC3C6: 0xCCE4, //HANGUL SYLLABLE CHIEUCH YEO SSANGSIOS - 0xC3C7: 0xCCEC, //HANGUL SYLLABLE CHIEUCH YE - 0xC3C8: 0xCCF0, //HANGUL SYLLABLE CHIEUCH YE NIEUN - 0xC3C9: 0xCD01, //HANGUL SYLLABLE CHIEUCH YE IEUNG - 0xC3CA: 0xCD08, //HANGUL SYLLABLE CHIEUCH O - 0xC3CB: 0xCD09, //HANGUL SYLLABLE CHIEUCH O KIYEOK - 0xC3CC: 0xCD0C, //HANGUL SYLLABLE CHIEUCH O NIEUN - 0xC3CD: 0xCD10, //HANGUL SYLLABLE CHIEUCH O RIEUL - 0xC3CE: 0xCD18, //HANGUL SYLLABLE CHIEUCH O MIEUM - 0xC3CF: 0xCD19, //HANGUL SYLLABLE CHIEUCH O PIEUP - 0xC3D0: 0xCD1B, //HANGUL SYLLABLE CHIEUCH O SIOS - 0xC3D1: 0xCD1D, //HANGUL SYLLABLE CHIEUCH O IEUNG - 0xC3D2: 0xCD24, //HANGUL SYLLABLE CHIEUCH WA - 0xC3D3: 0xCD28, //HANGUL SYLLABLE CHIEUCH WA NIEUN - 0xC3D4: 0xCD2C, //HANGUL SYLLABLE CHIEUCH WA RIEUL - 0xC3D5: 0xCD39, //HANGUL SYLLABLE CHIEUCH WA IEUNG - 0xC3D6: 0xCD5C, //HANGUL SYLLABLE CHIEUCH OE - 0xC3D7: 0xCD60, //HANGUL SYLLABLE CHIEUCH OE NIEUN - 0xC3D8: 0xCD64, //HANGUL SYLLABLE CHIEUCH OE RIEUL - 0xC3D9: 0xCD6C, //HANGUL SYLLABLE CHIEUCH OE MIEUM - 0xC3DA: 0xCD6D, //HANGUL SYLLABLE CHIEUCH OE PIEUP - 0xC3DB: 0xCD6F, //HANGUL SYLLABLE CHIEUCH OE SIOS - 0xC3DC: 0xCD71, //HANGUL SYLLABLE CHIEUCH OE IEUNG - 0xC3DD: 0xCD78, //HANGUL SYLLABLE CHIEUCH YO - 0xC3DE: 0xCD88, //HANGUL SYLLABLE CHIEUCH YO MIEUM - 0xC3DF: 0xCD94, //HANGUL SYLLABLE CHIEUCH U - 0xC3E0: 0xCD95, //HANGUL SYLLABLE CHIEUCH U KIYEOK - 0xC3E1: 0xCD98, //HANGUL SYLLABLE CHIEUCH U NIEUN - 0xC3E2: 0xCD9C, //HANGUL SYLLABLE CHIEUCH U RIEUL - 0xC3E3: 0xCDA4, //HANGUL SYLLABLE CHIEUCH U MIEUM - 0xC3E4: 0xCDA5, //HANGUL SYLLABLE CHIEUCH U PIEUP - 0xC3E5: 0xCDA7, //HANGUL SYLLABLE CHIEUCH U SIOS - 0xC3E6: 0xCDA9, //HANGUL SYLLABLE CHIEUCH U IEUNG - 0xC3E7: 0xCDB0, //HANGUL SYLLABLE CHIEUCH WEO - 0xC3E8: 0xCDC4, //HANGUL SYLLABLE CHIEUCH WEO SSANGSIOS - 0xC3E9: 0xCDCC, //HANGUL SYLLABLE CHIEUCH WE - 0xC3EA: 0xCDD0, //HANGUL SYLLABLE CHIEUCH WE NIEUN - 0xC3EB: 0xCDE8, //HANGUL SYLLABLE CHIEUCH WI - 0xC3EC: 0xCDEC, //HANGUL SYLLABLE CHIEUCH WI NIEUN - 0xC3ED: 0xCDF0, //HANGUL SYLLABLE CHIEUCH WI RIEUL - 0xC3EE: 0xCDF8, //HANGUL SYLLABLE CHIEUCH WI MIEUM - 0xC3EF: 0xCDF9, //HANGUL SYLLABLE CHIEUCH WI PIEUP - 0xC3F0: 0xCDFB, //HANGUL SYLLABLE CHIEUCH WI SIOS - 0xC3F1: 0xCDFD, //HANGUL SYLLABLE CHIEUCH WI IEUNG - 0xC3F2: 0xCE04, //HANGUL SYLLABLE CHIEUCH YU - 0xC3F3: 0xCE08, //HANGUL SYLLABLE CHIEUCH YU NIEUN - 0xC3F4: 0xCE0C, //HANGUL SYLLABLE CHIEUCH YU RIEUL - 0xC3F5: 0xCE14, //HANGUL SYLLABLE CHIEUCH YU MIEUM - 0xC3F6: 0xCE19, //HANGUL SYLLABLE CHIEUCH YU IEUNG - 0xC3F7: 0xCE20, //HANGUL SYLLABLE CHIEUCH EU - 0xC3F8: 0xCE21, //HANGUL SYLLABLE CHIEUCH EU KIYEOK - 0xC3F9: 0xCE24, //HANGUL SYLLABLE CHIEUCH EU NIEUN - 0xC3FA: 0xCE28, //HANGUL SYLLABLE CHIEUCH EU RIEUL - 0xC3FB: 0xCE30, //HANGUL SYLLABLE CHIEUCH EU MIEUM - 0xC3FC: 0xCE31, //HANGUL SYLLABLE CHIEUCH EU PIEUP - 0xC3FD: 0xCE33, //HANGUL SYLLABLE CHIEUCH EU SIOS - 0xC3FE: 0xCE35, //HANGUL SYLLABLE CHIEUCH EU IEUNG - 0xC441: 0xD6AB, //HANGUL SYLLABLE HIEUH YO KIYEOKSIOS - 0xC442: 0xD6AD, //HANGUL SYLLABLE HIEUH YO NIEUNCIEUC - 0xC443: 0xD6AE, //HANGUL SYLLABLE HIEUH YO NIEUNHIEUH - 0xC444: 0xD6AF, //HANGUL SYLLABLE HIEUH YO TIKEUT - 0xC445: 0xD6B1, //HANGUL SYLLABLE HIEUH YO RIEULKIYEOK - 0xC446: 0xD6B2, //HANGUL SYLLABLE HIEUH YO RIEULMIEUM - 0xC447: 0xD6B3, //HANGUL SYLLABLE HIEUH YO RIEULPIEUP - 0xC448: 0xD6B4, //HANGUL SYLLABLE HIEUH YO RIEULSIOS - 0xC449: 0xD6B5, //HANGUL SYLLABLE HIEUH YO RIEULTHIEUTH - 0xC44A: 0xD6B6, //HANGUL SYLLABLE HIEUH YO RIEULPHIEUPH - 0xC44B: 0xD6B7, //HANGUL SYLLABLE HIEUH YO RIEULHIEUH - 0xC44C: 0xD6B8, //HANGUL SYLLABLE HIEUH YO MIEUM - 0xC44D: 0xD6BA, //HANGUL SYLLABLE HIEUH YO PIEUPSIOS - 0xC44E: 0xD6BC, //HANGUL SYLLABLE HIEUH YO SSANGSIOS - 0xC44F: 0xD6BD, //HANGUL SYLLABLE HIEUH YO IEUNG - 0xC450: 0xD6BE, //HANGUL SYLLABLE HIEUH YO CIEUC - 0xC451: 0xD6BF, //HANGUL SYLLABLE HIEUH YO CHIEUCH - 0xC452: 0xD6C0, //HANGUL SYLLABLE HIEUH YO KHIEUKH - 0xC453: 0xD6C1, //HANGUL SYLLABLE HIEUH YO THIEUTH - 0xC454: 0xD6C2, //HANGUL SYLLABLE HIEUH YO PHIEUPH - 0xC455: 0xD6C3, //HANGUL SYLLABLE HIEUH YO HIEUH - 0xC456: 0xD6C6, //HANGUL SYLLABLE HIEUH U SSANGKIYEOK - 0xC457: 0xD6C7, //HANGUL SYLLABLE HIEUH U KIYEOKSIOS - 0xC458: 0xD6C9, //HANGUL SYLLABLE HIEUH U NIEUNCIEUC - 0xC459: 0xD6CA, //HANGUL SYLLABLE HIEUH U NIEUNHIEUH - 0xC45A: 0xD6CB, //HANGUL SYLLABLE HIEUH U TIKEUT - 0xC461: 0xD6CD, //HANGUL SYLLABLE HIEUH U RIEULKIYEOK - 0xC462: 0xD6CE, //HANGUL SYLLABLE HIEUH U RIEULMIEUM - 0xC463: 0xD6CF, //HANGUL SYLLABLE HIEUH U RIEULPIEUP - 0xC464: 0xD6D0, //HANGUL SYLLABLE HIEUH U RIEULSIOS - 0xC465: 0xD6D2, //HANGUL SYLLABLE HIEUH U RIEULPHIEUPH - 0xC466: 0xD6D3, //HANGUL SYLLABLE HIEUH U RIEULHIEUH - 0xC467: 0xD6D5, //HANGUL SYLLABLE HIEUH U PIEUP - 0xC468: 0xD6D6, //HANGUL SYLLABLE HIEUH U PIEUPSIOS - 0xC469: 0xD6D8, //HANGUL SYLLABLE HIEUH U SSANGSIOS - 0xC46A: 0xD6DA, //HANGUL SYLLABLE HIEUH U CIEUC - 0xC46B: 0xD6DB, //HANGUL SYLLABLE HIEUH U CHIEUCH - 0xC46C: 0xD6DC, //HANGUL SYLLABLE HIEUH U KHIEUKH - 0xC46D: 0xD6DD, //HANGUL SYLLABLE HIEUH U THIEUTH - 0xC46E: 0xD6DE, //HANGUL SYLLABLE HIEUH U PHIEUPH - 0xC46F: 0xD6DF, //HANGUL SYLLABLE HIEUH U HIEUH - 0xC470: 0xD6E1, //HANGUL SYLLABLE HIEUH WEO KIYEOK - 0xC471: 0xD6E2, //HANGUL SYLLABLE HIEUH WEO SSANGKIYEOK - 0xC472: 0xD6E3, //HANGUL SYLLABLE HIEUH WEO KIYEOKSIOS - 0xC473: 0xD6E5, //HANGUL SYLLABLE HIEUH WEO NIEUNCIEUC - 0xC474: 0xD6E6, //HANGUL SYLLABLE HIEUH WEO NIEUNHIEUH - 0xC475: 0xD6E7, //HANGUL SYLLABLE HIEUH WEO TIKEUT - 0xC476: 0xD6E9, //HANGUL SYLLABLE HIEUH WEO RIEULKIYEOK - 0xC477: 0xD6EA, //HANGUL SYLLABLE HIEUH WEO RIEULMIEUM - 0xC478: 0xD6EB, //HANGUL SYLLABLE HIEUH WEO RIEULPIEUP - 0xC479: 0xD6EC, //HANGUL SYLLABLE HIEUH WEO RIEULSIOS - 0xC47A: 0xD6ED, //HANGUL SYLLABLE HIEUH WEO RIEULTHIEUTH - 0xC481: 0xD6EE, //HANGUL SYLLABLE HIEUH WEO RIEULPHIEUPH - 0xC482: 0xD6EF, //HANGUL SYLLABLE HIEUH WEO RIEULHIEUH - 0xC483: 0xD6F1, //HANGUL SYLLABLE HIEUH WEO PIEUP - 0xC484: 0xD6F2, //HANGUL SYLLABLE HIEUH WEO PIEUPSIOS - 0xC485: 0xD6F3, //HANGUL SYLLABLE HIEUH WEO SIOS - 0xC486: 0xD6F4, //HANGUL SYLLABLE HIEUH WEO SSANGSIOS - 0xC487: 0xD6F6, //HANGUL SYLLABLE HIEUH WEO CIEUC - 0xC488: 0xD6F7, //HANGUL SYLLABLE HIEUH WEO CHIEUCH - 0xC489: 0xD6F8, //HANGUL SYLLABLE HIEUH WEO KHIEUKH - 0xC48A: 0xD6F9, //HANGUL SYLLABLE HIEUH WEO THIEUTH - 0xC48B: 0xD6FA, //HANGUL SYLLABLE HIEUH WEO PHIEUPH - 0xC48C: 0xD6FB, //HANGUL SYLLABLE HIEUH WEO HIEUH - 0xC48D: 0xD6FE, //HANGUL SYLLABLE HIEUH WE SSANGKIYEOK - 0xC48E: 0xD6FF, //HANGUL SYLLABLE HIEUH WE KIYEOKSIOS - 0xC48F: 0xD701, //HANGUL SYLLABLE HIEUH WE NIEUNCIEUC - 0xC490: 0xD702, //HANGUL SYLLABLE HIEUH WE NIEUNHIEUH - 0xC491: 0xD703, //HANGUL SYLLABLE HIEUH WE TIKEUT - 0xC492: 0xD705, //HANGUL SYLLABLE HIEUH WE RIEULKIYEOK - 0xC493: 0xD706, //HANGUL SYLLABLE HIEUH WE RIEULMIEUM - 0xC494: 0xD707, //HANGUL SYLLABLE HIEUH WE RIEULPIEUP - 0xC495: 0xD708, //HANGUL SYLLABLE HIEUH WE RIEULSIOS - 0xC496: 0xD709, //HANGUL SYLLABLE HIEUH WE RIEULTHIEUTH - 0xC497: 0xD70A, //HANGUL SYLLABLE HIEUH WE RIEULPHIEUPH - 0xC498: 0xD70B, //HANGUL SYLLABLE HIEUH WE RIEULHIEUH - 0xC499: 0xD70C, //HANGUL SYLLABLE HIEUH WE MIEUM - 0xC49A: 0xD70D, //HANGUL SYLLABLE HIEUH WE PIEUP - 0xC49B: 0xD70E, //HANGUL SYLLABLE HIEUH WE PIEUPSIOS - 0xC49C: 0xD70F, //HANGUL SYLLABLE HIEUH WE SIOS - 0xC49D: 0xD710, //HANGUL SYLLABLE HIEUH WE SSANGSIOS - 0xC49E: 0xD712, //HANGUL SYLLABLE HIEUH WE CIEUC - 0xC49F: 0xD713, //HANGUL SYLLABLE HIEUH WE CHIEUCH - 0xC4A0: 0xD714, //HANGUL SYLLABLE HIEUH WE KHIEUKH - 0xC4A1: 0xCE58, //HANGUL SYLLABLE CHIEUCH I - 0xC4A2: 0xCE59, //HANGUL SYLLABLE CHIEUCH I KIYEOK - 0xC4A3: 0xCE5C, //HANGUL SYLLABLE CHIEUCH I NIEUN - 0xC4A4: 0xCE5F, //HANGUL SYLLABLE CHIEUCH I TIKEUT - 0xC4A5: 0xCE60, //HANGUL SYLLABLE CHIEUCH I RIEUL - 0xC4A6: 0xCE61, //HANGUL SYLLABLE CHIEUCH I RIEULKIYEOK - 0xC4A7: 0xCE68, //HANGUL SYLLABLE CHIEUCH I MIEUM - 0xC4A8: 0xCE69, //HANGUL SYLLABLE CHIEUCH I PIEUP - 0xC4A9: 0xCE6B, //HANGUL SYLLABLE CHIEUCH I SIOS - 0xC4AA: 0xCE6D, //HANGUL SYLLABLE CHIEUCH I IEUNG - 0xC4AB: 0xCE74, //HANGUL SYLLABLE KHIEUKH A - 0xC4AC: 0xCE75, //HANGUL SYLLABLE KHIEUKH A KIYEOK - 0xC4AD: 0xCE78, //HANGUL SYLLABLE KHIEUKH A NIEUN - 0xC4AE: 0xCE7C, //HANGUL SYLLABLE KHIEUKH A RIEUL - 0xC4AF: 0xCE84, //HANGUL SYLLABLE KHIEUKH A MIEUM - 0xC4B0: 0xCE85, //HANGUL SYLLABLE KHIEUKH A PIEUP - 0xC4B1: 0xCE87, //HANGUL SYLLABLE KHIEUKH A SIOS - 0xC4B2: 0xCE89, //HANGUL SYLLABLE KHIEUKH A IEUNG - 0xC4B3: 0xCE90, //HANGUL SYLLABLE KHIEUKH AE - 0xC4B4: 0xCE91, //HANGUL SYLLABLE KHIEUKH AE KIYEOK - 0xC4B5: 0xCE94, //HANGUL SYLLABLE KHIEUKH AE NIEUN - 0xC4B6: 0xCE98, //HANGUL SYLLABLE KHIEUKH AE RIEUL - 0xC4B7: 0xCEA0, //HANGUL SYLLABLE KHIEUKH AE MIEUM - 0xC4B8: 0xCEA1, //HANGUL SYLLABLE KHIEUKH AE PIEUP - 0xC4B9: 0xCEA3, //HANGUL SYLLABLE KHIEUKH AE SIOS - 0xC4BA: 0xCEA4, //HANGUL SYLLABLE KHIEUKH AE SSANGSIOS - 0xC4BB: 0xCEA5, //HANGUL SYLLABLE KHIEUKH AE IEUNG - 0xC4BC: 0xCEAC, //HANGUL SYLLABLE KHIEUKH YA - 0xC4BD: 0xCEAD, //HANGUL SYLLABLE KHIEUKH YA KIYEOK - 0xC4BE: 0xCEC1, //HANGUL SYLLABLE KHIEUKH YA IEUNG - 0xC4BF: 0xCEE4, //HANGUL SYLLABLE KHIEUKH EO - 0xC4C0: 0xCEE5, //HANGUL SYLLABLE KHIEUKH EO KIYEOK - 0xC4C1: 0xCEE8, //HANGUL SYLLABLE KHIEUKH EO NIEUN - 0xC4C2: 0xCEEB, //HANGUL SYLLABLE KHIEUKH EO TIKEUT - 0xC4C3: 0xCEEC, //HANGUL SYLLABLE KHIEUKH EO RIEUL - 0xC4C4: 0xCEF4, //HANGUL SYLLABLE KHIEUKH EO MIEUM - 0xC4C5: 0xCEF5, //HANGUL SYLLABLE KHIEUKH EO PIEUP - 0xC4C6: 0xCEF7, //HANGUL SYLLABLE KHIEUKH EO SIOS - 0xC4C7: 0xCEF8, //HANGUL SYLLABLE KHIEUKH EO SSANGSIOS - 0xC4C8: 0xCEF9, //HANGUL SYLLABLE KHIEUKH EO IEUNG - 0xC4C9: 0xCF00, //HANGUL SYLLABLE KHIEUKH E - 0xC4CA: 0xCF01, //HANGUL SYLLABLE KHIEUKH E KIYEOK - 0xC4CB: 0xCF04, //HANGUL SYLLABLE KHIEUKH E NIEUN - 0xC4CC: 0xCF08, //HANGUL SYLLABLE KHIEUKH E RIEUL - 0xC4CD: 0xCF10, //HANGUL SYLLABLE KHIEUKH E MIEUM - 0xC4CE: 0xCF11, //HANGUL SYLLABLE KHIEUKH E PIEUP - 0xC4CF: 0xCF13, //HANGUL SYLLABLE KHIEUKH E SIOS - 0xC4D0: 0xCF15, //HANGUL SYLLABLE KHIEUKH E IEUNG - 0xC4D1: 0xCF1C, //HANGUL SYLLABLE KHIEUKH YEO - 0xC4D2: 0xCF20, //HANGUL SYLLABLE KHIEUKH YEO NIEUN - 0xC4D3: 0xCF24, //HANGUL SYLLABLE KHIEUKH YEO RIEUL - 0xC4D4: 0xCF2C, //HANGUL SYLLABLE KHIEUKH YEO MIEUM - 0xC4D5: 0xCF2D, //HANGUL SYLLABLE KHIEUKH YEO PIEUP - 0xC4D6: 0xCF2F, //HANGUL SYLLABLE KHIEUKH YEO SIOS - 0xC4D7: 0xCF30, //HANGUL SYLLABLE KHIEUKH YEO SSANGSIOS - 0xC4D8: 0xCF31, //HANGUL SYLLABLE KHIEUKH YEO IEUNG - 0xC4D9: 0xCF38, //HANGUL SYLLABLE KHIEUKH YE - 0xC4DA: 0xCF54, //HANGUL SYLLABLE KHIEUKH O - 0xC4DB: 0xCF55, //HANGUL SYLLABLE KHIEUKH O KIYEOK - 0xC4DC: 0xCF58, //HANGUL SYLLABLE KHIEUKH O NIEUN - 0xC4DD: 0xCF5C, //HANGUL SYLLABLE KHIEUKH O RIEUL - 0xC4DE: 0xCF64, //HANGUL SYLLABLE KHIEUKH O MIEUM - 0xC4DF: 0xCF65, //HANGUL SYLLABLE KHIEUKH O PIEUP - 0xC4E0: 0xCF67, //HANGUL SYLLABLE KHIEUKH O SIOS - 0xC4E1: 0xCF69, //HANGUL SYLLABLE KHIEUKH O IEUNG - 0xC4E2: 0xCF70, //HANGUL SYLLABLE KHIEUKH WA - 0xC4E3: 0xCF71, //HANGUL SYLLABLE KHIEUKH WA KIYEOK - 0xC4E4: 0xCF74, //HANGUL SYLLABLE KHIEUKH WA NIEUN - 0xC4E5: 0xCF78, //HANGUL SYLLABLE KHIEUKH WA RIEUL - 0xC4E6: 0xCF80, //HANGUL SYLLABLE KHIEUKH WA MIEUM - 0xC4E7: 0xCF85, //HANGUL SYLLABLE KHIEUKH WA IEUNG - 0xC4E8: 0xCF8C, //HANGUL SYLLABLE KHIEUKH WAE - 0xC4E9: 0xCFA1, //HANGUL SYLLABLE KHIEUKH WAE IEUNG - 0xC4EA: 0xCFA8, //HANGUL SYLLABLE KHIEUKH OE - 0xC4EB: 0xCFB0, //HANGUL SYLLABLE KHIEUKH OE RIEUL - 0xC4EC: 0xCFC4, //HANGUL SYLLABLE KHIEUKH YO - 0xC4ED: 0xCFE0, //HANGUL SYLLABLE KHIEUKH U - 0xC4EE: 0xCFE1, //HANGUL SYLLABLE KHIEUKH U KIYEOK - 0xC4EF: 0xCFE4, //HANGUL SYLLABLE KHIEUKH U NIEUN - 0xC4F0: 0xCFE8, //HANGUL SYLLABLE KHIEUKH U RIEUL - 0xC4F1: 0xCFF0, //HANGUL SYLLABLE KHIEUKH U MIEUM - 0xC4F2: 0xCFF1, //HANGUL SYLLABLE KHIEUKH U PIEUP - 0xC4F3: 0xCFF3, //HANGUL SYLLABLE KHIEUKH U SIOS - 0xC4F4: 0xCFF5, //HANGUL SYLLABLE KHIEUKH U IEUNG - 0xC4F5: 0xCFFC, //HANGUL SYLLABLE KHIEUKH WEO - 0xC4F6: 0xD000, //HANGUL SYLLABLE KHIEUKH WEO NIEUN - 0xC4F7: 0xD004, //HANGUL SYLLABLE KHIEUKH WEO RIEUL - 0xC4F8: 0xD011, //HANGUL SYLLABLE KHIEUKH WEO IEUNG - 0xC4F9: 0xD018, //HANGUL SYLLABLE KHIEUKH WE - 0xC4FA: 0xD02D, //HANGUL SYLLABLE KHIEUKH WE IEUNG - 0xC4FB: 0xD034, //HANGUL SYLLABLE KHIEUKH WI - 0xC4FC: 0xD035, //HANGUL SYLLABLE KHIEUKH WI KIYEOK - 0xC4FD: 0xD038, //HANGUL SYLLABLE KHIEUKH WI NIEUN - 0xC4FE: 0xD03C, //HANGUL SYLLABLE KHIEUKH WI RIEUL - 0xC541: 0xD715, //HANGUL SYLLABLE HIEUH WE THIEUTH - 0xC542: 0xD716, //HANGUL SYLLABLE HIEUH WE PHIEUPH - 0xC543: 0xD717, //HANGUL SYLLABLE HIEUH WE HIEUH - 0xC544: 0xD71A, //HANGUL SYLLABLE HIEUH WI SSANGKIYEOK - 0xC545: 0xD71B, //HANGUL SYLLABLE HIEUH WI KIYEOKSIOS - 0xC546: 0xD71D, //HANGUL SYLLABLE HIEUH WI NIEUNCIEUC - 0xC547: 0xD71E, //HANGUL SYLLABLE HIEUH WI NIEUNHIEUH - 0xC548: 0xD71F, //HANGUL SYLLABLE HIEUH WI TIKEUT - 0xC549: 0xD721, //HANGUL SYLLABLE HIEUH WI RIEULKIYEOK - 0xC54A: 0xD722, //HANGUL SYLLABLE HIEUH WI RIEULMIEUM - 0xC54B: 0xD723, //HANGUL SYLLABLE HIEUH WI RIEULPIEUP - 0xC54C: 0xD724, //HANGUL SYLLABLE HIEUH WI RIEULSIOS - 0xC54D: 0xD725, //HANGUL SYLLABLE HIEUH WI RIEULTHIEUTH - 0xC54E: 0xD726, //HANGUL SYLLABLE HIEUH WI RIEULPHIEUPH - 0xC54F: 0xD727, //HANGUL SYLLABLE HIEUH WI RIEULHIEUH - 0xC550: 0xD72A, //HANGUL SYLLABLE HIEUH WI PIEUPSIOS - 0xC551: 0xD72C, //HANGUL SYLLABLE HIEUH WI SSANGSIOS - 0xC552: 0xD72E, //HANGUL SYLLABLE HIEUH WI CIEUC - 0xC553: 0xD72F, //HANGUL SYLLABLE HIEUH WI CHIEUCH - 0xC554: 0xD730, //HANGUL SYLLABLE HIEUH WI KHIEUKH - 0xC555: 0xD731, //HANGUL SYLLABLE HIEUH WI THIEUTH - 0xC556: 0xD732, //HANGUL SYLLABLE HIEUH WI PHIEUPH - 0xC557: 0xD733, //HANGUL SYLLABLE HIEUH WI HIEUH - 0xC558: 0xD736, //HANGUL SYLLABLE HIEUH YU SSANGKIYEOK - 0xC559: 0xD737, //HANGUL SYLLABLE HIEUH YU KIYEOKSIOS - 0xC55A: 0xD739, //HANGUL SYLLABLE HIEUH YU NIEUNCIEUC - 0xC561: 0xD73A, //HANGUL SYLLABLE HIEUH YU NIEUNHIEUH - 0xC562: 0xD73B, //HANGUL SYLLABLE HIEUH YU TIKEUT - 0xC563: 0xD73D, //HANGUL SYLLABLE HIEUH YU RIEULKIYEOK - 0xC564: 0xD73E, //HANGUL SYLLABLE HIEUH YU RIEULMIEUM - 0xC565: 0xD73F, //HANGUL SYLLABLE HIEUH YU RIEULPIEUP - 0xC566: 0xD740, //HANGUL SYLLABLE HIEUH YU RIEULSIOS - 0xC567: 0xD741, //HANGUL SYLLABLE HIEUH YU RIEULTHIEUTH - 0xC568: 0xD742, //HANGUL SYLLABLE HIEUH YU RIEULPHIEUPH - 0xC569: 0xD743, //HANGUL SYLLABLE HIEUH YU RIEULHIEUH - 0xC56A: 0xD745, //HANGUL SYLLABLE HIEUH YU PIEUP - 0xC56B: 0xD746, //HANGUL SYLLABLE HIEUH YU PIEUPSIOS - 0xC56C: 0xD748, //HANGUL SYLLABLE HIEUH YU SSANGSIOS - 0xC56D: 0xD74A, //HANGUL SYLLABLE HIEUH YU CIEUC - 0xC56E: 0xD74B, //HANGUL SYLLABLE HIEUH YU CHIEUCH - 0xC56F: 0xD74C, //HANGUL SYLLABLE HIEUH YU KHIEUKH - 0xC570: 0xD74D, //HANGUL SYLLABLE HIEUH YU THIEUTH - 0xC571: 0xD74E, //HANGUL SYLLABLE HIEUH YU PHIEUPH - 0xC572: 0xD74F, //HANGUL SYLLABLE HIEUH YU HIEUH - 0xC573: 0xD752, //HANGUL SYLLABLE HIEUH EU SSANGKIYEOK - 0xC574: 0xD753, //HANGUL SYLLABLE HIEUH EU KIYEOKSIOS - 0xC575: 0xD755, //HANGUL SYLLABLE HIEUH EU NIEUNCIEUC - 0xC576: 0xD75A, //HANGUL SYLLABLE HIEUH EU RIEULMIEUM - 0xC577: 0xD75B, //HANGUL SYLLABLE HIEUH EU RIEULPIEUP - 0xC578: 0xD75C, //HANGUL SYLLABLE HIEUH EU RIEULSIOS - 0xC579: 0xD75D, //HANGUL SYLLABLE HIEUH EU RIEULTHIEUTH - 0xC57A: 0xD75E, //HANGUL SYLLABLE HIEUH EU RIEULPHIEUPH - 0xC581: 0xD75F, //HANGUL SYLLABLE HIEUH EU RIEULHIEUH - 0xC582: 0xD762, //HANGUL SYLLABLE HIEUH EU PIEUPSIOS - 0xC583: 0xD764, //HANGUL SYLLABLE HIEUH EU SSANGSIOS - 0xC584: 0xD766, //HANGUL SYLLABLE HIEUH EU CIEUC - 0xC585: 0xD767, //HANGUL SYLLABLE HIEUH EU CHIEUCH - 0xC586: 0xD768, //HANGUL SYLLABLE HIEUH EU KHIEUKH - 0xC587: 0xD76A, //HANGUL SYLLABLE HIEUH EU PHIEUPH - 0xC588: 0xD76B, //HANGUL SYLLABLE HIEUH EU HIEUH - 0xC589: 0xD76D, //HANGUL SYLLABLE HIEUH YI KIYEOK - 0xC58A: 0xD76E, //HANGUL SYLLABLE HIEUH YI SSANGKIYEOK - 0xC58B: 0xD76F, //HANGUL SYLLABLE HIEUH YI KIYEOKSIOS - 0xC58C: 0xD771, //HANGUL SYLLABLE HIEUH YI NIEUNCIEUC - 0xC58D: 0xD772, //HANGUL SYLLABLE HIEUH YI NIEUNHIEUH - 0xC58E: 0xD773, //HANGUL SYLLABLE HIEUH YI TIKEUT - 0xC58F: 0xD775, //HANGUL SYLLABLE HIEUH YI RIEULKIYEOK - 0xC590: 0xD776, //HANGUL SYLLABLE HIEUH YI RIEULMIEUM - 0xC591: 0xD777, //HANGUL SYLLABLE HIEUH YI RIEULPIEUP - 0xC592: 0xD778, //HANGUL SYLLABLE HIEUH YI RIEULSIOS - 0xC593: 0xD779, //HANGUL SYLLABLE HIEUH YI RIEULTHIEUTH - 0xC594: 0xD77A, //HANGUL SYLLABLE HIEUH YI RIEULPHIEUPH - 0xC595: 0xD77B, //HANGUL SYLLABLE HIEUH YI RIEULHIEUH - 0xC596: 0xD77E, //HANGUL SYLLABLE HIEUH YI PIEUPSIOS - 0xC597: 0xD77F, //HANGUL SYLLABLE HIEUH YI SIOS - 0xC598: 0xD780, //HANGUL SYLLABLE HIEUH YI SSANGSIOS - 0xC599: 0xD782, //HANGUL SYLLABLE HIEUH YI CIEUC - 0xC59A: 0xD783, //HANGUL SYLLABLE HIEUH YI CHIEUCH - 0xC59B: 0xD784, //HANGUL SYLLABLE HIEUH YI KHIEUKH - 0xC59C: 0xD785, //HANGUL SYLLABLE HIEUH YI THIEUTH - 0xC59D: 0xD786, //HANGUL SYLLABLE HIEUH YI PHIEUPH - 0xC59E: 0xD787, //HANGUL SYLLABLE HIEUH YI HIEUH - 0xC59F: 0xD78A, //HANGUL SYLLABLE HIEUH I SSANGKIYEOK - 0xC5A0: 0xD78B, //HANGUL SYLLABLE HIEUH I KIYEOKSIOS - 0xC5A1: 0xD044, //HANGUL SYLLABLE KHIEUKH WI MIEUM - 0xC5A2: 0xD045, //HANGUL SYLLABLE KHIEUKH WI PIEUP - 0xC5A3: 0xD047, //HANGUL SYLLABLE KHIEUKH WI SIOS - 0xC5A4: 0xD049, //HANGUL SYLLABLE KHIEUKH WI IEUNG - 0xC5A5: 0xD050, //HANGUL SYLLABLE KHIEUKH YU - 0xC5A6: 0xD054, //HANGUL SYLLABLE KHIEUKH YU NIEUN - 0xC5A7: 0xD058, //HANGUL SYLLABLE KHIEUKH YU RIEUL - 0xC5A8: 0xD060, //HANGUL SYLLABLE KHIEUKH YU MIEUM - 0xC5A9: 0xD06C, //HANGUL SYLLABLE KHIEUKH EU - 0xC5AA: 0xD06D, //HANGUL SYLLABLE KHIEUKH EU KIYEOK - 0xC5AB: 0xD070, //HANGUL SYLLABLE KHIEUKH EU NIEUN - 0xC5AC: 0xD074, //HANGUL SYLLABLE KHIEUKH EU RIEUL - 0xC5AD: 0xD07C, //HANGUL SYLLABLE KHIEUKH EU MIEUM - 0xC5AE: 0xD07D, //HANGUL SYLLABLE KHIEUKH EU PIEUP - 0xC5AF: 0xD081, //HANGUL SYLLABLE KHIEUKH EU IEUNG - 0xC5B0: 0xD0A4, //HANGUL SYLLABLE KHIEUKH I - 0xC5B1: 0xD0A5, //HANGUL SYLLABLE KHIEUKH I KIYEOK - 0xC5B2: 0xD0A8, //HANGUL SYLLABLE KHIEUKH I NIEUN - 0xC5B3: 0xD0AC, //HANGUL SYLLABLE KHIEUKH I RIEUL - 0xC5B4: 0xD0B4, //HANGUL SYLLABLE KHIEUKH I MIEUM - 0xC5B5: 0xD0B5, //HANGUL SYLLABLE KHIEUKH I PIEUP - 0xC5B6: 0xD0B7, //HANGUL SYLLABLE KHIEUKH I SIOS - 0xC5B7: 0xD0B9, //HANGUL SYLLABLE KHIEUKH I IEUNG - 0xC5B8: 0xD0C0, //HANGUL SYLLABLE THIEUTH A - 0xC5B9: 0xD0C1, //HANGUL SYLLABLE THIEUTH A KIYEOK - 0xC5BA: 0xD0C4, //HANGUL SYLLABLE THIEUTH A NIEUN - 0xC5BB: 0xD0C8, //HANGUL SYLLABLE THIEUTH A RIEUL - 0xC5BC: 0xD0C9, //HANGUL SYLLABLE THIEUTH A RIEULKIYEOK - 0xC5BD: 0xD0D0, //HANGUL SYLLABLE THIEUTH A MIEUM - 0xC5BE: 0xD0D1, //HANGUL SYLLABLE THIEUTH A PIEUP - 0xC5BF: 0xD0D3, //HANGUL SYLLABLE THIEUTH A SIOS - 0xC5C0: 0xD0D4, //HANGUL SYLLABLE THIEUTH A SSANGSIOS - 0xC5C1: 0xD0D5, //HANGUL SYLLABLE THIEUTH A IEUNG - 0xC5C2: 0xD0DC, //HANGUL SYLLABLE THIEUTH AE - 0xC5C3: 0xD0DD, //HANGUL SYLLABLE THIEUTH AE KIYEOK - 0xC5C4: 0xD0E0, //HANGUL SYLLABLE THIEUTH AE NIEUN - 0xC5C5: 0xD0E4, //HANGUL SYLLABLE THIEUTH AE RIEUL - 0xC5C6: 0xD0EC, //HANGUL SYLLABLE THIEUTH AE MIEUM - 0xC5C7: 0xD0ED, //HANGUL SYLLABLE THIEUTH AE PIEUP - 0xC5C8: 0xD0EF, //HANGUL SYLLABLE THIEUTH AE SIOS - 0xC5C9: 0xD0F0, //HANGUL SYLLABLE THIEUTH AE SSANGSIOS - 0xC5CA: 0xD0F1, //HANGUL SYLLABLE THIEUTH AE IEUNG - 0xC5CB: 0xD0F8, //HANGUL SYLLABLE THIEUTH YA - 0xC5CC: 0xD10D, //HANGUL SYLLABLE THIEUTH YA IEUNG - 0xC5CD: 0xD130, //HANGUL SYLLABLE THIEUTH EO - 0xC5CE: 0xD131, //HANGUL SYLLABLE THIEUTH EO KIYEOK - 0xC5CF: 0xD134, //HANGUL SYLLABLE THIEUTH EO NIEUN - 0xC5D0: 0xD138, //HANGUL SYLLABLE THIEUTH EO RIEUL - 0xC5D1: 0xD13A, //HANGUL SYLLABLE THIEUTH EO RIEULMIEUM - 0xC5D2: 0xD140, //HANGUL SYLLABLE THIEUTH EO MIEUM - 0xC5D3: 0xD141, //HANGUL SYLLABLE THIEUTH EO PIEUP - 0xC5D4: 0xD143, //HANGUL SYLLABLE THIEUTH EO SIOS - 0xC5D5: 0xD144, //HANGUL SYLLABLE THIEUTH EO SSANGSIOS - 0xC5D6: 0xD145, //HANGUL SYLLABLE THIEUTH EO IEUNG - 0xC5D7: 0xD14C, //HANGUL SYLLABLE THIEUTH E - 0xC5D8: 0xD14D, //HANGUL SYLLABLE THIEUTH E KIYEOK - 0xC5D9: 0xD150, //HANGUL SYLLABLE THIEUTH E NIEUN - 0xC5DA: 0xD154, //HANGUL SYLLABLE THIEUTH E RIEUL - 0xC5DB: 0xD15C, //HANGUL SYLLABLE THIEUTH E MIEUM - 0xC5DC: 0xD15D, //HANGUL SYLLABLE THIEUTH E PIEUP - 0xC5DD: 0xD15F, //HANGUL SYLLABLE THIEUTH E SIOS - 0xC5DE: 0xD161, //HANGUL SYLLABLE THIEUTH E IEUNG - 0xC5DF: 0xD168, //HANGUL SYLLABLE THIEUTH YEO - 0xC5E0: 0xD16C, //HANGUL SYLLABLE THIEUTH YEO NIEUN - 0xC5E1: 0xD17C, //HANGUL SYLLABLE THIEUTH YEO SSANGSIOS - 0xC5E2: 0xD184, //HANGUL SYLLABLE THIEUTH YE - 0xC5E3: 0xD188, //HANGUL SYLLABLE THIEUTH YE NIEUN - 0xC5E4: 0xD1A0, //HANGUL SYLLABLE THIEUTH O - 0xC5E5: 0xD1A1, //HANGUL SYLLABLE THIEUTH O KIYEOK - 0xC5E6: 0xD1A4, //HANGUL SYLLABLE THIEUTH O NIEUN - 0xC5E7: 0xD1A8, //HANGUL SYLLABLE THIEUTH O RIEUL - 0xC5E8: 0xD1B0, //HANGUL SYLLABLE THIEUTH O MIEUM - 0xC5E9: 0xD1B1, //HANGUL SYLLABLE THIEUTH O PIEUP - 0xC5EA: 0xD1B3, //HANGUL SYLLABLE THIEUTH O SIOS - 0xC5EB: 0xD1B5, //HANGUL SYLLABLE THIEUTH O IEUNG - 0xC5EC: 0xD1BA, //HANGUL SYLLABLE THIEUTH O PHIEUPH - 0xC5ED: 0xD1BC, //HANGUL SYLLABLE THIEUTH WA - 0xC5EE: 0xD1C0, //HANGUL SYLLABLE THIEUTH WA NIEUN - 0xC5EF: 0xD1D8, //HANGUL SYLLABLE THIEUTH WAE - 0xC5F0: 0xD1F4, //HANGUL SYLLABLE THIEUTH OE - 0xC5F1: 0xD1F8, //HANGUL SYLLABLE THIEUTH OE NIEUN - 0xC5F2: 0xD207, //HANGUL SYLLABLE THIEUTH OE SIOS - 0xC5F3: 0xD209, //HANGUL SYLLABLE THIEUTH OE IEUNG - 0xC5F4: 0xD210, //HANGUL SYLLABLE THIEUTH YO - 0xC5F5: 0xD22C, //HANGUL SYLLABLE THIEUTH U - 0xC5F6: 0xD22D, //HANGUL SYLLABLE THIEUTH U KIYEOK - 0xC5F7: 0xD230, //HANGUL SYLLABLE THIEUTH U NIEUN - 0xC5F8: 0xD234, //HANGUL SYLLABLE THIEUTH U RIEUL - 0xC5F9: 0xD23C, //HANGUL SYLLABLE THIEUTH U MIEUM - 0xC5FA: 0xD23D, //HANGUL SYLLABLE THIEUTH U PIEUP - 0xC5FB: 0xD23F, //HANGUL SYLLABLE THIEUTH U SIOS - 0xC5FC: 0xD241, //HANGUL SYLLABLE THIEUTH U IEUNG - 0xC5FD: 0xD248, //HANGUL SYLLABLE THIEUTH WEO - 0xC5FE: 0xD25C, //HANGUL SYLLABLE THIEUTH WEO SSANGSIOS - 0xC641: 0xD78D, //HANGUL SYLLABLE HIEUH I NIEUNCIEUC - 0xC642: 0xD78E, //HANGUL SYLLABLE HIEUH I NIEUNHIEUH - 0xC643: 0xD78F, //HANGUL SYLLABLE HIEUH I TIKEUT - 0xC644: 0xD791, //HANGUL SYLLABLE HIEUH I RIEULKIYEOK - 0xC645: 0xD792, //HANGUL SYLLABLE HIEUH I RIEULMIEUM - 0xC646: 0xD793, //HANGUL SYLLABLE HIEUH I RIEULPIEUP - 0xC647: 0xD794, //HANGUL SYLLABLE HIEUH I RIEULSIOS - 0xC648: 0xD795, //HANGUL SYLLABLE HIEUH I RIEULTHIEUTH - 0xC649: 0xD796, //HANGUL SYLLABLE HIEUH I RIEULPHIEUPH - 0xC64A: 0xD797, //HANGUL SYLLABLE HIEUH I RIEULHIEUH - 0xC64B: 0xD79A, //HANGUL SYLLABLE HIEUH I PIEUPSIOS - 0xC64C: 0xD79C, //HANGUL SYLLABLE HIEUH I SSANGSIOS - 0xC64D: 0xD79E, //HANGUL SYLLABLE HIEUH I CIEUC - 0xC64E: 0xD79F, //HANGUL SYLLABLE HIEUH I CHIEUCH - 0xC64F: 0xD7A0, //HANGUL SYLLABLE HIEUH I KHIEUKH - 0xC650: 0xD7A1, //HANGUL SYLLABLE HIEUH I THIEUTH - 0xC651: 0xD7A2, //HANGUL SYLLABLE HIEUH I PHIEUPH - 0xC652: 0xD7A3, //HANGUL SYLLABLE HIEUH I HIEUH - 0xC6A1: 0xD264, //HANGUL SYLLABLE THIEUTH WE - 0xC6A2: 0xD280, //HANGUL SYLLABLE THIEUTH WI - 0xC6A3: 0xD281, //HANGUL SYLLABLE THIEUTH WI KIYEOK - 0xC6A4: 0xD284, //HANGUL SYLLABLE THIEUTH WI NIEUN - 0xC6A5: 0xD288, //HANGUL SYLLABLE THIEUTH WI RIEUL - 0xC6A6: 0xD290, //HANGUL SYLLABLE THIEUTH WI MIEUM - 0xC6A7: 0xD291, //HANGUL SYLLABLE THIEUTH WI PIEUP - 0xC6A8: 0xD295, //HANGUL SYLLABLE THIEUTH WI IEUNG - 0xC6A9: 0xD29C, //HANGUL SYLLABLE THIEUTH YU - 0xC6AA: 0xD2A0, //HANGUL SYLLABLE THIEUTH YU NIEUN - 0xC6AB: 0xD2A4, //HANGUL SYLLABLE THIEUTH YU RIEUL - 0xC6AC: 0xD2AC, //HANGUL SYLLABLE THIEUTH YU MIEUM - 0xC6AD: 0xD2B1, //HANGUL SYLLABLE THIEUTH YU IEUNG - 0xC6AE: 0xD2B8, //HANGUL SYLLABLE THIEUTH EU - 0xC6AF: 0xD2B9, //HANGUL SYLLABLE THIEUTH EU KIYEOK - 0xC6B0: 0xD2BC, //HANGUL SYLLABLE THIEUTH EU NIEUN - 0xC6B1: 0xD2BF, //HANGUL SYLLABLE THIEUTH EU TIKEUT - 0xC6B2: 0xD2C0, //HANGUL SYLLABLE THIEUTH EU RIEUL - 0xC6B3: 0xD2C2, //HANGUL SYLLABLE THIEUTH EU RIEULMIEUM - 0xC6B4: 0xD2C8, //HANGUL SYLLABLE THIEUTH EU MIEUM - 0xC6B5: 0xD2C9, //HANGUL SYLLABLE THIEUTH EU PIEUP - 0xC6B6: 0xD2CB, //HANGUL SYLLABLE THIEUTH EU SIOS - 0xC6B7: 0xD2D4, //HANGUL SYLLABLE THIEUTH YI - 0xC6B8: 0xD2D8, //HANGUL SYLLABLE THIEUTH YI NIEUN - 0xC6B9: 0xD2DC, //HANGUL SYLLABLE THIEUTH YI RIEUL - 0xC6BA: 0xD2E4, //HANGUL SYLLABLE THIEUTH YI MIEUM - 0xC6BB: 0xD2E5, //HANGUL SYLLABLE THIEUTH YI PIEUP - 0xC6BC: 0xD2F0, //HANGUL SYLLABLE THIEUTH I - 0xC6BD: 0xD2F1, //HANGUL SYLLABLE THIEUTH I KIYEOK - 0xC6BE: 0xD2F4, //HANGUL SYLLABLE THIEUTH I NIEUN - 0xC6BF: 0xD2F8, //HANGUL SYLLABLE THIEUTH I RIEUL - 0xC6C0: 0xD300, //HANGUL SYLLABLE THIEUTH I MIEUM - 0xC6C1: 0xD301, //HANGUL SYLLABLE THIEUTH I PIEUP - 0xC6C2: 0xD303, //HANGUL SYLLABLE THIEUTH I SIOS - 0xC6C3: 0xD305, //HANGUL SYLLABLE THIEUTH I IEUNG - 0xC6C4: 0xD30C, //HANGUL SYLLABLE PHIEUPH A - 0xC6C5: 0xD30D, //HANGUL SYLLABLE PHIEUPH A KIYEOK - 0xC6C6: 0xD30E, //HANGUL SYLLABLE PHIEUPH A SSANGKIYEOK - 0xC6C7: 0xD310, //HANGUL SYLLABLE PHIEUPH A NIEUN - 0xC6C8: 0xD314, //HANGUL SYLLABLE PHIEUPH A RIEUL - 0xC6C9: 0xD316, //HANGUL SYLLABLE PHIEUPH A RIEULMIEUM - 0xC6CA: 0xD31C, //HANGUL SYLLABLE PHIEUPH A MIEUM - 0xC6CB: 0xD31D, //HANGUL SYLLABLE PHIEUPH A PIEUP - 0xC6CC: 0xD31F, //HANGUL SYLLABLE PHIEUPH A SIOS - 0xC6CD: 0xD320, //HANGUL SYLLABLE PHIEUPH A SSANGSIOS - 0xC6CE: 0xD321, //HANGUL SYLLABLE PHIEUPH A IEUNG - 0xC6CF: 0xD325, //HANGUL SYLLABLE PHIEUPH A THIEUTH - 0xC6D0: 0xD328, //HANGUL SYLLABLE PHIEUPH AE - 0xC6D1: 0xD329, //HANGUL SYLLABLE PHIEUPH AE KIYEOK - 0xC6D2: 0xD32C, //HANGUL SYLLABLE PHIEUPH AE NIEUN - 0xC6D3: 0xD330, //HANGUL SYLLABLE PHIEUPH AE RIEUL - 0xC6D4: 0xD338, //HANGUL SYLLABLE PHIEUPH AE MIEUM - 0xC6D5: 0xD339, //HANGUL SYLLABLE PHIEUPH AE PIEUP - 0xC6D6: 0xD33B, //HANGUL SYLLABLE PHIEUPH AE SIOS - 0xC6D7: 0xD33C, //HANGUL SYLLABLE PHIEUPH AE SSANGSIOS - 0xC6D8: 0xD33D, //HANGUL SYLLABLE PHIEUPH AE IEUNG - 0xC6D9: 0xD344, //HANGUL SYLLABLE PHIEUPH YA - 0xC6DA: 0xD345, //HANGUL SYLLABLE PHIEUPH YA KIYEOK - 0xC6DB: 0xD37C, //HANGUL SYLLABLE PHIEUPH EO - 0xC6DC: 0xD37D, //HANGUL SYLLABLE PHIEUPH EO KIYEOK - 0xC6DD: 0xD380, //HANGUL SYLLABLE PHIEUPH EO NIEUN - 0xC6DE: 0xD384, //HANGUL SYLLABLE PHIEUPH EO RIEUL - 0xC6DF: 0xD38C, //HANGUL SYLLABLE PHIEUPH EO MIEUM - 0xC6E0: 0xD38D, //HANGUL SYLLABLE PHIEUPH EO PIEUP - 0xC6E1: 0xD38F, //HANGUL SYLLABLE PHIEUPH EO SIOS - 0xC6E2: 0xD390, //HANGUL SYLLABLE PHIEUPH EO SSANGSIOS - 0xC6E3: 0xD391, //HANGUL SYLLABLE PHIEUPH EO IEUNG - 0xC6E4: 0xD398, //HANGUL SYLLABLE PHIEUPH E - 0xC6E5: 0xD399, //HANGUL SYLLABLE PHIEUPH E KIYEOK - 0xC6E6: 0xD39C, //HANGUL SYLLABLE PHIEUPH E NIEUN - 0xC6E7: 0xD3A0, //HANGUL SYLLABLE PHIEUPH E RIEUL - 0xC6E8: 0xD3A8, //HANGUL SYLLABLE PHIEUPH E MIEUM - 0xC6E9: 0xD3A9, //HANGUL SYLLABLE PHIEUPH E PIEUP - 0xC6EA: 0xD3AB, //HANGUL SYLLABLE PHIEUPH E SIOS - 0xC6EB: 0xD3AD, //HANGUL SYLLABLE PHIEUPH E IEUNG - 0xC6EC: 0xD3B4, //HANGUL SYLLABLE PHIEUPH YEO - 0xC6ED: 0xD3B8, //HANGUL SYLLABLE PHIEUPH YEO NIEUN - 0xC6EE: 0xD3BC, //HANGUL SYLLABLE PHIEUPH YEO RIEUL - 0xC6EF: 0xD3C4, //HANGUL SYLLABLE PHIEUPH YEO MIEUM - 0xC6F0: 0xD3C5, //HANGUL SYLLABLE PHIEUPH YEO PIEUP - 0xC6F1: 0xD3C8, //HANGUL SYLLABLE PHIEUPH YEO SSANGSIOS - 0xC6F2: 0xD3C9, //HANGUL SYLLABLE PHIEUPH YEO IEUNG - 0xC6F3: 0xD3D0, //HANGUL SYLLABLE PHIEUPH YE - 0xC6F4: 0xD3D8, //HANGUL SYLLABLE PHIEUPH YE RIEUL - 0xC6F5: 0xD3E1, //HANGUL SYLLABLE PHIEUPH YE PIEUP - 0xC6F6: 0xD3E3, //HANGUL SYLLABLE PHIEUPH YE SIOS - 0xC6F7: 0xD3EC, //HANGUL SYLLABLE PHIEUPH O - 0xC6F8: 0xD3ED, //HANGUL SYLLABLE PHIEUPH O KIYEOK - 0xC6F9: 0xD3F0, //HANGUL SYLLABLE PHIEUPH O NIEUN - 0xC6FA: 0xD3F4, //HANGUL SYLLABLE PHIEUPH O RIEUL - 0xC6FB: 0xD3FC, //HANGUL SYLLABLE PHIEUPH O MIEUM - 0xC6FC: 0xD3FD, //HANGUL SYLLABLE PHIEUPH O PIEUP - 0xC6FD: 0xD3FF, //HANGUL SYLLABLE PHIEUPH O SIOS - 0xC6FE: 0xD401, //HANGUL SYLLABLE PHIEUPH O IEUNG - 0xC7A1: 0xD408, //HANGUL SYLLABLE PHIEUPH WA - 0xC7A2: 0xD41D, //HANGUL SYLLABLE PHIEUPH WA IEUNG - 0xC7A3: 0xD440, //HANGUL SYLLABLE PHIEUPH OE - 0xC7A4: 0xD444, //HANGUL SYLLABLE PHIEUPH OE NIEUN - 0xC7A5: 0xD45C, //HANGUL SYLLABLE PHIEUPH YO - 0xC7A6: 0xD460, //HANGUL SYLLABLE PHIEUPH YO NIEUN - 0xC7A7: 0xD464, //HANGUL SYLLABLE PHIEUPH YO RIEUL - 0xC7A8: 0xD46D, //HANGUL SYLLABLE PHIEUPH YO PIEUP - 0xC7A9: 0xD46F, //HANGUL SYLLABLE PHIEUPH YO SIOS - 0xC7AA: 0xD478, //HANGUL SYLLABLE PHIEUPH U - 0xC7AB: 0xD479, //HANGUL SYLLABLE PHIEUPH U KIYEOK - 0xC7AC: 0xD47C, //HANGUL SYLLABLE PHIEUPH U NIEUN - 0xC7AD: 0xD47F, //HANGUL SYLLABLE PHIEUPH U TIKEUT - 0xC7AE: 0xD480, //HANGUL SYLLABLE PHIEUPH U RIEUL - 0xC7AF: 0xD482, //HANGUL SYLLABLE PHIEUPH U RIEULMIEUM - 0xC7B0: 0xD488, //HANGUL SYLLABLE PHIEUPH U MIEUM - 0xC7B1: 0xD489, //HANGUL SYLLABLE PHIEUPH U PIEUP - 0xC7B2: 0xD48B, //HANGUL SYLLABLE PHIEUPH U SIOS - 0xC7B3: 0xD48D, //HANGUL SYLLABLE PHIEUPH U IEUNG - 0xC7B4: 0xD494, //HANGUL SYLLABLE PHIEUPH WEO - 0xC7B5: 0xD4A9, //HANGUL SYLLABLE PHIEUPH WEO IEUNG - 0xC7B6: 0xD4CC, //HANGUL SYLLABLE PHIEUPH WI - 0xC7B7: 0xD4D0, //HANGUL SYLLABLE PHIEUPH WI NIEUN - 0xC7B8: 0xD4D4, //HANGUL SYLLABLE PHIEUPH WI RIEUL - 0xC7B9: 0xD4DC, //HANGUL SYLLABLE PHIEUPH WI MIEUM - 0xC7BA: 0xD4DF, //HANGUL SYLLABLE PHIEUPH WI SIOS - 0xC7BB: 0xD4E8, //HANGUL SYLLABLE PHIEUPH YU - 0xC7BC: 0xD4EC, //HANGUL SYLLABLE PHIEUPH YU NIEUN - 0xC7BD: 0xD4F0, //HANGUL SYLLABLE PHIEUPH YU RIEUL - 0xC7BE: 0xD4F8, //HANGUL SYLLABLE PHIEUPH YU MIEUM - 0xC7BF: 0xD4FB, //HANGUL SYLLABLE PHIEUPH YU SIOS - 0xC7C0: 0xD4FD, //HANGUL SYLLABLE PHIEUPH YU IEUNG - 0xC7C1: 0xD504, //HANGUL SYLLABLE PHIEUPH EU - 0xC7C2: 0xD508, //HANGUL SYLLABLE PHIEUPH EU NIEUN - 0xC7C3: 0xD50C, //HANGUL SYLLABLE PHIEUPH EU RIEUL - 0xC7C4: 0xD514, //HANGUL SYLLABLE PHIEUPH EU MIEUM - 0xC7C5: 0xD515, //HANGUL SYLLABLE PHIEUPH EU PIEUP - 0xC7C6: 0xD517, //HANGUL SYLLABLE PHIEUPH EU SIOS - 0xC7C7: 0xD53C, //HANGUL SYLLABLE PHIEUPH I - 0xC7C8: 0xD53D, //HANGUL SYLLABLE PHIEUPH I KIYEOK - 0xC7C9: 0xD540, //HANGUL SYLLABLE PHIEUPH I NIEUN - 0xC7CA: 0xD544, //HANGUL SYLLABLE PHIEUPH I RIEUL - 0xC7CB: 0xD54C, //HANGUL SYLLABLE PHIEUPH I MIEUM - 0xC7CC: 0xD54D, //HANGUL SYLLABLE PHIEUPH I PIEUP - 0xC7CD: 0xD54F, //HANGUL SYLLABLE PHIEUPH I SIOS - 0xC7CE: 0xD551, //HANGUL SYLLABLE PHIEUPH I IEUNG - 0xC7CF: 0xD558, //HANGUL SYLLABLE HIEUH A - 0xC7D0: 0xD559, //HANGUL SYLLABLE HIEUH A KIYEOK - 0xC7D1: 0xD55C, //HANGUL SYLLABLE HIEUH A NIEUN - 0xC7D2: 0xD560, //HANGUL SYLLABLE HIEUH A RIEUL - 0xC7D3: 0xD565, //HANGUL SYLLABLE HIEUH A RIEULTHIEUTH - 0xC7D4: 0xD568, //HANGUL SYLLABLE HIEUH A MIEUM - 0xC7D5: 0xD569, //HANGUL SYLLABLE HIEUH A PIEUP - 0xC7D6: 0xD56B, //HANGUL SYLLABLE HIEUH A SIOS - 0xC7D7: 0xD56D, //HANGUL SYLLABLE HIEUH A IEUNG - 0xC7D8: 0xD574, //HANGUL SYLLABLE HIEUH AE - 0xC7D9: 0xD575, //HANGUL SYLLABLE HIEUH AE KIYEOK - 0xC7DA: 0xD578, //HANGUL SYLLABLE HIEUH AE NIEUN - 0xC7DB: 0xD57C, //HANGUL SYLLABLE HIEUH AE RIEUL - 0xC7DC: 0xD584, //HANGUL SYLLABLE HIEUH AE MIEUM - 0xC7DD: 0xD585, //HANGUL SYLLABLE HIEUH AE PIEUP - 0xC7DE: 0xD587, //HANGUL SYLLABLE HIEUH AE SIOS - 0xC7DF: 0xD588, //HANGUL SYLLABLE HIEUH AE SSANGSIOS - 0xC7E0: 0xD589, //HANGUL SYLLABLE HIEUH AE IEUNG - 0xC7E1: 0xD590, //HANGUL SYLLABLE HIEUH YA - 0xC7E2: 0xD5A5, //HANGUL SYLLABLE HIEUH YA IEUNG - 0xC7E3: 0xD5C8, //HANGUL SYLLABLE HIEUH EO - 0xC7E4: 0xD5C9, //HANGUL SYLLABLE HIEUH EO KIYEOK - 0xC7E5: 0xD5CC, //HANGUL SYLLABLE HIEUH EO NIEUN - 0xC7E6: 0xD5D0, //HANGUL SYLLABLE HIEUH EO RIEUL - 0xC7E7: 0xD5D2, //HANGUL SYLLABLE HIEUH EO RIEULMIEUM - 0xC7E8: 0xD5D8, //HANGUL SYLLABLE HIEUH EO MIEUM - 0xC7E9: 0xD5D9, //HANGUL SYLLABLE HIEUH EO PIEUP - 0xC7EA: 0xD5DB, //HANGUL SYLLABLE HIEUH EO SIOS - 0xC7EB: 0xD5DD, //HANGUL SYLLABLE HIEUH EO IEUNG - 0xC7EC: 0xD5E4, //HANGUL SYLLABLE HIEUH E - 0xC7ED: 0xD5E5, //HANGUL SYLLABLE HIEUH E KIYEOK - 0xC7EE: 0xD5E8, //HANGUL SYLLABLE HIEUH E NIEUN - 0xC7EF: 0xD5EC, //HANGUL SYLLABLE HIEUH E RIEUL - 0xC7F0: 0xD5F4, //HANGUL SYLLABLE HIEUH E MIEUM - 0xC7F1: 0xD5F5, //HANGUL SYLLABLE HIEUH E PIEUP - 0xC7F2: 0xD5F7, //HANGUL SYLLABLE HIEUH E SIOS - 0xC7F3: 0xD5F9, //HANGUL SYLLABLE HIEUH E IEUNG - 0xC7F4: 0xD600, //HANGUL SYLLABLE HIEUH YEO - 0xC7F5: 0xD601, //HANGUL SYLLABLE HIEUH YEO KIYEOK - 0xC7F6: 0xD604, //HANGUL SYLLABLE HIEUH YEO NIEUN - 0xC7F7: 0xD608, //HANGUL SYLLABLE HIEUH YEO RIEUL - 0xC7F8: 0xD610, //HANGUL SYLLABLE HIEUH YEO MIEUM - 0xC7F9: 0xD611, //HANGUL SYLLABLE HIEUH YEO PIEUP - 0xC7FA: 0xD613, //HANGUL SYLLABLE HIEUH YEO SIOS - 0xC7FB: 0xD614, //HANGUL SYLLABLE HIEUH YEO SSANGSIOS - 0xC7FC: 0xD615, //HANGUL SYLLABLE HIEUH YEO IEUNG - 0xC7FD: 0xD61C, //HANGUL SYLLABLE HIEUH YE - 0xC7FE: 0xD620, //HANGUL SYLLABLE HIEUH YE NIEUN - 0xC8A1: 0xD624, //HANGUL SYLLABLE HIEUH YE RIEUL - 0xC8A2: 0xD62D, //HANGUL SYLLABLE HIEUH YE PIEUP - 0xC8A3: 0xD638, //HANGUL SYLLABLE HIEUH O - 0xC8A4: 0xD639, //HANGUL SYLLABLE HIEUH O KIYEOK - 0xC8A5: 0xD63C, //HANGUL SYLLABLE HIEUH O NIEUN - 0xC8A6: 0xD640, //HANGUL SYLLABLE HIEUH O RIEUL - 0xC8A7: 0xD645, //HANGUL SYLLABLE HIEUH O RIEULTHIEUTH - 0xC8A8: 0xD648, //HANGUL SYLLABLE HIEUH O MIEUM - 0xC8A9: 0xD649, //HANGUL SYLLABLE HIEUH O PIEUP - 0xC8AA: 0xD64B, //HANGUL SYLLABLE HIEUH O SIOS - 0xC8AB: 0xD64D, //HANGUL SYLLABLE HIEUH O IEUNG - 0xC8AC: 0xD651, //HANGUL SYLLABLE HIEUH O THIEUTH - 0xC8AD: 0xD654, //HANGUL SYLLABLE HIEUH WA - 0xC8AE: 0xD655, //HANGUL SYLLABLE HIEUH WA KIYEOK - 0xC8AF: 0xD658, //HANGUL SYLLABLE HIEUH WA NIEUN - 0xC8B0: 0xD65C, //HANGUL SYLLABLE HIEUH WA RIEUL - 0xC8B1: 0xD667, //HANGUL SYLLABLE HIEUH WA SIOS - 0xC8B2: 0xD669, //HANGUL SYLLABLE HIEUH WA IEUNG - 0xC8B3: 0xD670, //HANGUL SYLLABLE HIEUH WAE - 0xC8B4: 0xD671, //HANGUL SYLLABLE HIEUH WAE KIYEOK - 0xC8B5: 0xD674, //HANGUL SYLLABLE HIEUH WAE NIEUN - 0xC8B6: 0xD683, //HANGUL SYLLABLE HIEUH WAE SIOS - 0xC8B7: 0xD685, //HANGUL SYLLABLE HIEUH WAE IEUNG - 0xC8B8: 0xD68C, //HANGUL SYLLABLE HIEUH OE - 0xC8B9: 0xD68D, //HANGUL SYLLABLE HIEUH OE KIYEOK - 0xC8BA: 0xD690, //HANGUL SYLLABLE HIEUH OE NIEUN - 0xC8BB: 0xD694, //HANGUL SYLLABLE HIEUH OE RIEUL - 0xC8BC: 0xD69D, //HANGUL SYLLABLE HIEUH OE PIEUP - 0xC8BD: 0xD69F, //HANGUL SYLLABLE HIEUH OE SIOS - 0xC8BE: 0xD6A1, //HANGUL SYLLABLE HIEUH OE IEUNG - 0xC8BF: 0xD6A8, //HANGUL SYLLABLE HIEUH YO - 0xC8C0: 0xD6AC, //HANGUL SYLLABLE HIEUH YO NIEUN - 0xC8C1: 0xD6B0, //HANGUL SYLLABLE HIEUH YO RIEUL - 0xC8C2: 0xD6B9, //HANGUL SYLLABLE HIEUH YO PIEUP - 0xC8C3: 0xD6BB, //HANGUL SYLLABLE HIEUH YO SIOS - 0xC8C4: 0xD6C4, //HANGUL SYLLABLE HIEUH U - 0xC8C5: 0xD6C5, //HANGUL SYLLABLE HIEUH U KIYEOK - 0xC8C6: 0xD6C8, //HANGUL SYLLABLE HIEUH U NIEUN - 0xC8C7: 0xD6CC, //HANGUL SYLLABLE HIEUH U RIEUL - 0xC8C8: 0xD6D1, //HANGUL SYLLABLE HIEUH U RIEULTHIEUTH - 0xC8C9: 0xD6D4, //HANGUL SYLLABLE HIEUH U MIEUM - 0xC8CA: 0xD6D7, //HANGUL SYLLABLE HIEUH U SIOS - 0xC8CB: 0xD6D9, //HANGUL SYLLABLE HIEUH U IEUNG - 0xC8CC: 0xD6E0, //HANGUL SYLLABLE HIEUH WEO - 0xC8CD: 0xD6E4, //HANGUL SYLLABLE HIEUH WEO NIEUN - 0xC8CE: 0xD6E8, //HANGUL SYLLABLE HIEUH WEO RIEUL - 0xC8CF: 0xD6F0, //HANGUL SYLLABLE HIEUH WEO MIEUM - 0xC8D0: 0xD6F5, //HANGUL SYLLABLE HIEUH WEO IEUNG - 0xC8D1: 0xD6FC, //HANGUL SYLLABLE HIEUH WE - 0xC8D2: 0xD6FD, //HANGUL SYLLABLE HIEUH WE KIYEOK - 0xC8D3: 0xD700, //HANGUL SYLLABLE HIEUH WE NIEUN - 0xC8D4: 0xD704, //HANGUL SYLLABLE HIEUH WE RIEUL - 0xC8D5: 0xD711, //HANGUL SYLLABLE HIEUH WE IEUNG - 0xC8D6: 0xD718, //HANGUL SYLLABLE HIEUH WI - 0xC8D7: 0xD719, //HANGUL SYLLABLE HIEUH WI KIYEOK - 0xC8D8: 0xD71C, //HANGUL SYLLABLE HIEUH WI NIEUN - 0xC8D9: 0xD720, //HANGUL SYLLABLE HIEUH WI RIEUL - 0xC8DA: 0xD728, //HANGUL SYLLABLE HIEUH WI MIEUM - 0xC8DB: 0xD729, //HANGUL SYLLABLE HIEUH WI PIEUP - 0xC8DC: 0xD72B, //HANGUL SYLLABLE HIEUH WI SIOS - 0xC8DD: 0xD72D, //HANGUL SYLLABLE HIEUH WI IEUNG - 0xC8DE: 0xD734, //HANGUL SYLLABLE HIEUH YU - 0xC8DF: 0xD735, //HANGUL SYLLABLE HIEUH YU KIYEOK - 0xC8E0: 0xD738, //HANGUL SYLLABLE HIEUH YU NIEUN - 0xC8E1: 0xD73C, //HANGUL SYLLABLE HIEUH YU RIEUL - 0xC8E2: 0xD744, //HANGUL SYLLABLE HIEUH YU MIEUM - 0xC8E3: 0xD747, //HANGUL SYLLABLE HIEUH YU SIOS - 0xC8E4: 0xD749, //HANGUL SYLLABLE HIEUH YU IEUNG - 0xC8E5: 0xD750, //HANGUL SYLLABLE HIEUH EU - 0xC8E6: 0xD751, //HANGUL SYLLABLE HIEUH EU KIYEOK - 0xC8E7: 0xD754, //HANGUL SYLLABLE HIEUH EU NIEUN - 0xC8E8: 0xD756, //HANGUL SYLLABLE HIEUH EU NIEUNHIEUH - 0xC8E9: 0xD757, //HANGUL SYLLABLE HIEUH EU TIKEUT - 0xC8EA: 0xD758, //HANGUL SYLLABLE HIEUH EU RIEUL - 0xC8EB: 0xD759, //HANGUL SYLLABLE HIEUH EU RIEULKIYEOK - 0xC8EC: 0xD760, //HANGUL SYLLABLE HIEUH EU MIEUM - 0xC8ED: 0xD761, //HANGUL SYLLABLE HIEUH EU PIEUP - 0xC8EE: 0xD763, //HANGUL SYLLABLE HIEUH EU SIOS - 0xC8EF: 0xD765, //HANGUL SYLLABLE HIEUH EU IEUNG - 0xC8F0: 0xD769, //HANGUL SYLLABLE HIEUH EU THIEUTH - 0xC8F1: 0xD76C, //HANGUL SYLLABLE HIEUH YI - 0xC8F2: 0xD770, //HANGUL SYLLABLE HIEUH YI NIEUN - 0xC8F3: 0xD774, //HANGUL SYLLABLE HIEUH YI RIEUL - 0xC8F4: 0xD77C, //HANGUL SYLLABLE HIEUH YI MIEUM - 0xC8F5: 0xD77D, //HANGUL SYLLABLE HIEUH YI PIEUP - 0xC8F6: 0xD781, //HANGUL SYLLABLE HIEUH YI IEUNG - 0xC8F7: 0xD788, //HANGUL SYLLABLE HIEUH I - 0xC8F8: 0xD789, //HANGUL SYLLABLE HIEUH I KIYEOK - 0xC8F9: 0xD78C, //HANGUL SYLLABLE HIEUH I NIEUN - 0xC8FA: 0xD790, //HANGUL SYLLABLE HIEUH I RIEUL - 0xC8FB: 0xD798, //HANGUL SYLLABLE HIEUH I MIEUM - 0xC8FC: 0xD799, //HANGUL SYLLABLE HIEUH I PIEUP - 0xC8FD: 0xD79B, //HANGUL SYLLABLE HIEUH I SIOS - 0xC8FE: 0xD79D, //HANGUL SYLLABLE HIEUH I IEUNG - 0xCAA1: 0x4F3D, //CJK UNIFIED IDEOGRAPH - 0xCAA2: 0x4F73, //CJK UNIFIED IDEOGRAPH - 0xCAA3: 0x5047, //CJK UNIFIED IDEOGRAPH - 0xCAA4: 0x50F9, //CJK UNIFIED IDEOGRAPH - 0xCAA5: 0x52A0, //CJK UNIFIED IDEOGRAPH - 0xCAA6: 0x53EF, //CJK UNIFIED IDEOGRAPH - 0xCAA7: 0x5475, //CJK UNIFIED IDEOGRAPH - 0xCAA8: 0x54E5, //CJK UNIFIED IDEOGRAPH - 0xCAA9: 0x5609, //CJK UNIFIED IDEOGRAPH - 0xCAAA: 0x5AC1, //CJK UNIFIED IDEOGRAPH - 0xCAAB: 0x5BB6, //CJK UNIFIED IDEOGRAPH - 0xCAAC: 0x6687, //CJK UNIFIED IDEOGRAPH - 0xCAAD: 0x67B6, //CJK UNIFIED IDEOGRAPH - 0xCAAE: 0x67B7, //CJK UNIFIED IDEOGRAPH - 0xCAAF: 0x67EF, //CJK UNIFIED IDEOGRAPH - 0xCAB0: 0x6B4C, //CJK UNIFIED IDEOGRAPH - 0xCAB1: 0x73C2, //CJK UNIFIED IDEOGRAPH - 0xCAB2: 0x75C2, //CJK UNIFIED IDEOGRAPH - 0xCAB3: 0x7A3C, //CJK UNIFIED IDEOGRAPH - 0xCAB4: 0x82DB, //CJK UNIFIED IDEOGRAPH - 0xCAB5: 0x8304, //CJK UNIFIED IDEOGRAPH - 0xCAB6: 0x8857, //CJK UNIFIED IDEOGRAPH - 0xCAB7: 0x8888, //CJK UNIFIED IDEOGRAPH - 0xCAB8: 0x8A36, //CJK UNIFIED IDEOGRAPH - 0xCAB9: 0x8CC8, //CJK UNIFIED IDEOGRAPH - 0xCABA: 0x8DCF, //CJK UNIFIED IDEOGRAPH - 0xCABB: 0x8EFB, //CJK UNIFIED IDEOGRAPH - 0xCABC: 0x8FE6, //CJK UNIFIED IDEOGRAPH - 0xCABD: 0x99D5, //CJK UNIFIED IDEOGRAPH - 0xCABE: 0x523B, //CJK UNIFIED IDEOGRAPH - 0xCABF: 0x5374, //CJK UNIFIED IDEOGRAPH - 0xCAC0: 0x5404, //CJK UNIFIED IDEOGRAPH - 0xCAC1: 0x606A, //CJK UNIFIED IDEOGRAPH - 0xCAC2: 0x6164, //CJK UNIFIED IDEOGRAPH - 0xCAC3: 0x6BBC, //CJK UNIFIED IDEOGRAPH - 0xCAC4: 0x73CF, //CJK UNIFIED IDEOGRAPH - 0xCAC5: 0x811A, //CJK UNIFIED IDEOGRAPH - 0xCAC6: 0x89BA, //CJK UNIFIED IDEOGRAPH - 0xCAC7: 0x89D2, //CJK UNIFIED IDEOGRAPH - 0xCAC8: 0x95A3, //CJK UNIFIED IDEOGRAPH - 0xCAC9: 0x4F83, //CJK UNIFIED IDEOGRAPH - 0xCACA: 0x520A, //CJK UNIFIED IDEOGRAPH - 0xCACB: 0x58BE, //CJK UNIFIED IDEOGRAPH - 0xCACC: 0x5978, //CJK UNIFIED IDEOGRAPH - 0xCACD: 0x59E6, //CJK UNIFIED IDEOGRAPH - 0xCACE: 0x5E72, //CJK UNIFIED IDEOGRAPH - 0xCACF: 0x5E79, //CJK UNIFIED IDEOGRAPH - 0xCAD0: 0x61C7, //CJK UNIFIED IDEOGRAPH - 0xCAD1: 0x63C0, //CJK UNIFIED IDEOGRAPH - 0xCAD2: 0x6746, //CJK UNIFIED IDEOGRAPH - 0xCAD3: 0x67EC, //CJK UNIFIED IDEOGRAPH - 0xCAD4: 0x687F, //CJK UNIFIED IDEOGRAPH - 0xCAD5: 0x6F97, //CJK UNIFIED IDEOGRAPH - 0xCAD6: 0x764E, //CJK UNIFIED IDEOGRAPH - 0xCAD7: 0x770B, //CJK UNIFIED IDEOGRAPH - 0xCAD8: 0x78F5, //CJK UNIFIED IDEOGRAPH - 0xCAD9: 0x7A08, //CJK UNIFIED IDEOGRAPH - 0xCADA: 0x7AFF, //CJK UNIFIED IDEOGRAPH - 0xCADB: 0x7C21, //CJK UNIFIED IDEOGRAPH - 0xCADC: 0x809D, //CJK UNIFIED IDEOGRAPH - 0xCADD: 0x826E, //CJK UNIFIED IDEOGRAPH - 0xCADE: 0x8271, //CJK UNIFIED IDEOGRAPH - 0xCADF: 0x8AEB, //CJK UNIFIED IDEOGRAPH - 0xCAE0: 0x9593, //CJK UNIFIED IDEOGRAPH - 0xCAE1: 0x4E6B, //CJK UNIFIED IDEOGRAPH - 0xCAE2: 0x559D, //CJK UNIFIED IDEOGRAPH - 0xCAE3: 0x66F7, //CJK UNIFIED IDEOGRAPH - 0xCAE4: 0x6E34, //CJK UNIFIED IDEOGRAPH - 0xCAE5: 0x78A3, //CJK UNIFIED IDEOGRAPH - 0xCAE6: 0x7AED, //CJK UNIFIED IDEOGRAPH - 0xCAE7: 0x845B, //CJK UNIFIED IDEOGRAPH - 0xCAE8: 0x8910, //CJK UNIFIED IDEOGRAPH - 0xCAE9: 0x874E, //CJK UNIFIED IDEOGRAPH - 0xCAEA: 0x97A8, //CJK UNIFIED IDEOGRAPH - 0xCAEB: 0x52D8, //CJK UNIFIED IDEOGRAPH - 0xCAEC: 0x574E, //CJK UNIFIED IDEOGRAPH - 0xCAED: 0x582A, //CJK UNIFIED IDEOGRAPH - 0xCAEE: 0x5D4C, //CJK UNIFIED IDEOGRAPH - 0xCAEF: 0x611F, //CJK UNIFIED IDEOGRAPH - 0xCAF0: 0x61BE, //CJK UNIFIED IDEOGRAPH - 0xCAF1: 0x6221, //CJK UNIFIED IDEOGRAPH - 0xCAF2: 0x6562, //CJK UNIFIED IDEOGRAPH - 0xCAF3: 0x67D1, //CJK UNIFIED IDEOGRAPH - 0xCAF4: 0x6A44, //CJK UNIFIED IDEOGRAPH - 0xCAF5: 0x6E1B, //CJK UNIFIED IDEOGRAPH - 0xCAF6: 0x7518, //CJK UNIFIED IDEOGRAPH - 0xCAF7: 0x75B3, //CJK UNIFIED IDEOGRAPH - 0xCAF8: 0x76E3, //CJK UNIFIED IDEOGRAPH - 0xCAF9: 0x77B0, //CJK UNIFIED IDEOGRAPH - 0xCAFA: 0x7D3A, //CJK UNIFIED IDEOGRAPH - 0xCAFB: 0x90AF, //CJK UNIFIED IDEOGRAPH - 0xCAFC: 0x9451, //CJK UNIFIED IDEOGRAPH - 0xCAFD: 0x9452, //CJK UNIFIED IDEOGRAPH - 0xCAFE: 0x9F95, //CJK UNIFIED IDEOGRAPH - 0xCBA1: 0x5323, //CJK UNIFIED IDEOGRAPH - 0xCBA2: 0x5CAC, //CJK UNIFIED IDEOGRAPH - 0xCBA3: 0x7532, //CJK UNIFIED IDEOGRAPH - 0xCBA4: 0x80DB, //CJK UNIFIED IDEOGRAPH - 0xCBA5: 0x9240, //CJK UNIFIED IDEOGRAPH - 0xCBA6: 0x9598, //CJK UNIFIED IDEOGRAPH - 0xCBA7: 0x525B, //CJK UNIFIED IDEOGRAPH - 0xCBA8: 0x5808, //CJK UNIFIED IDEOGRAPH - 0xCBA9: 0x59DC, //CJK UNIFIED IDEOGRAPH - 0xCBAA: 0x5CA1, //CJK UNIFIED IDEOGRAPH - 0xCBAB: 0x5D17, //CJK UNIFIED IDEOGRAPH - 0xCBAC: 0x5EB7, //CJK UNIFIED IDEOGRAPH - 0xCBAD: 0x5F3A, //CJK UNIFIED IDEOGRAPH - 0xCBAE: 0x5F4A, //CJK UNIFIED IDEOGRAPH - 0xCBAF: 0x6177, //CJK UNIFIED IDEOGRAPH - 0xCBB0: 0x6C5F, //CJK UNIFIED IDEOGRAPH - 0xCBB1: 0x757A, //CJK UNIFIED IDEOGRAPH - 0xCBB2: 0x7586, //CJK UNIFIED IDEOGRAPH - 0xCBB3: 0x7CE0, //CJK UNIFIED IDEOGRAPH - 0xCBB4: 0x7D73, //CJK UNIFIED IDEOGRAPH - 0xCBB5: 0x7DB1, //CJK UNIFIED IDEOGRAPH - 0xCBB6: 0x7F8C, //CJK UNIFIED IDEOGRAPH - 0xCBB7: 0x8154, //CJK UNIFIED IDEOGRAPH - 0xCBB8: 0x8221, //CJK UNIFIED IDEOGRAPH - 0xCBB9: 0x8591, //CJK UNIFIED IDEOGRAPH - 0xCBBA: 0x8941, //CJK UNIFIED IDEOGRAPH - 0xCBBB: 0x8B1B, //CJK UNIFIED IDEOGRAPH - 0xCBBC: 0x92FC, //CJK UNIFIED IDEOGRAPH - 0xCBBD: 0x964D, //CJK UNIFIED IDEOGRAPH - 0xCBBE: 0x9C47, //CJK UNIFIED IDEOGRAPH - 0xCBBF: 0x4ECB, //CJK UNIFIED IDEOGRAPH - 0xCBC0: 0x4EF7, //CJK UNIFIED IDEOGRAPH - 0xCBC1: 0x500B, //CJK UNIFIED IDEOGRAPH - 0xCBC2: 0x51F1, //CJK UNIFIED IDEOGRAPH - 0xCBC3: 0x584F, //CJK UNIFIED IDEOGRAPH - 0xCBC4: 0x6137, //CJK UNIFIED IDEOGRAPH - 0xCBC5: 0x613E, //CJK UNIFIED IDEOGRAPH - 0xCBC6: 0x6168, //CJK UNIFIED IDEOGRAPH - 0xCBC7: 0x6539, //CJK UNIFIED IDEOGRAPH - 0xCBC8: 0x69EA, //CJK UNIFIED IDEOGRAPH - 0xCBC9: 0x6F11, //CJK UNIFIED IDEOGRAPH - 0xCBCA: 0x75A5, //CJK UNIFIED IDEOGRAPH - 0xCBCB: 0x7686, //CJK UNIFIED IDEOGRAPH - 0xCBCC: 0x76D6, //CJK UNIFIED IDEOGRAPH - 0xCBCD: 0x7B87, //CJK UNIFIED IDEOGRAPH - 0xCBCE: 0x82A5, //CJK UNIFIED IDEOGRAPH - 0xCBCF: 0x84CB, //CJK UNIFIED IDEOGRAPH - 0xCBD0: 0xF900, //CJK COMPATIBILITY IDEOGRAPH - 0xCBD1: 0x93A7, //CJK UNIFIED IDEOGRAPH - 0xCBD2: 0x958B, //CJK UNIFIED IDEOGRAPH - 0xCBD3: 0x5580, //CJK UNIFIED IDEOGRAPH - 0xCBD4: 0x5BA2, //CJK UNIFIED IDEOGRAPH - 0xCBD5: 0x5751, //CJK UNIFIED IDEOGRAPH - 0xCBD6: 0xF901, //CJK COMPATIBILITY IDEOGRAPH - 0xCBD7: 0x7CB3, //CJK UNIFIED IDEOGRAPH - 0xCBD8: 0x7FB9, //CJK UNIFIED IDEOGRAPH - 0xCBD9: 0x91B5, //CJK UNIFIED IDEOGRAPH - 0xCBDA: 0x5028, //CJK UNIFIED IDEOGRAPH - 0xCBDB: 0x53BB, //CJK UNIFIED IDEOGRAPH - 0xCBDC: 0x5C45, //CJK UNIFIED IDEOGRAPH - 0xCBDD: 0x5DE8, //CJK UNIFIED IDEOGRAPH - 0xCBDE: 0x62D2, //CJK UNIFIED IDEOGRAPH - 0xCBDF: 0x636E, //CJK UNIFIED IDEOGRAPH - 0xCBE0: 0x64DA, //CJK UNIFIED IDEOGRAPH - 0xCBE1: 0x64E7, //CJK UNIFIED IDEOGRAPH - 0xCBE2: 0x6E20, //CJK UNIFIED IDEOGRAPH - 0xCBE3: 0x70AC, //CJK UNIFIED IDEOGRAPH - 0xCBE4: 0x795B, //CJK UNIFIED IDEOGRAPH - 0xCBE5: 0x8DDD, //CJK UNIFIED IDEOGRAPH - 0xCBE6: 0x8E1E, //CJK UNIFIED IDEOGRAPH - 0xCBE7: 0xF902, //CJK COMPATIBILITY IDEOGRAPH - 0xCBE8: 0x907D, //CJK UNIFIED IDEOGRAPH - 0xCBE9: 0x9245, //CJK UNIFIED IDEOGRAPH - 0xCBEA: 0x92F8, //CJK UNIFIED IDEOGRAPH - 0xCBEB: 0x4E7E, //CJK UNIFIED IDEOGRAPH - 0xCBEC: 0x4EF6, //CJK UNIFIED IDEOGRAPH - 0xCBED: 0x5065, //CJK UNIFIED IDEOGRAPH - 0xCBEE: 0x5DFE, //CJK UNIFIED IDEOGRAPH - 0xCBEF: 0x5EFA, //CJK UNIFIED IDEOGRAPH - 0xCBF0: 0x6106, //CJK UNIFIED IDEOGRAPH - 0xCBF1: 0x6957, //CJK UNIFIED IDEOGRAPH - 0xCBF2: 0x8171, //CJK UNIFIED IDEOGRAPH - 0xCBF3: 0x8654, //CJK UNIFIED IDEOGRAPH - 0xCBF4: 0x8E47, //CJK UNIFIED IDEOGRAPH - 0xCBF5: 0x9375, //CJK UNIFIED IDEOGRAPH - 0xCBF6: 0x9A2B, //CJK UNIFIED IDEOGRAPH - 0xCBF7: 0x4E5E, //CJK UNIFIED IDEOGRAPH - 0xCBF8: 0x5091, //CJK UNIFIED IDEOGRAPH - 0xCBF9: 0x6770, //CJK UNIFIED IDEOGRAPH - 0xCBFA: 0x6840, //CJK UNIFIED IDEOGRAPH - 0xCBFB: 0x5109, //CJK UNIFIED IDEOGRAPH - 0xCBFC: 0x528D, //CJK UNIFIED IDEOGRAPH - 0xCBFD: 0x5292, //CJK UNIFIED IDEOGRAPH - 0xCBFE: 0x6AA2, //CJK UNIFIED IDEOGRAPH - 0xCCA1: 0x77BC, //CJK UNIFIED IDEOGRAPH - 0xCCA2: 0x9210, //CJK UNIFIED IDEOGRAPH - 0xCCA3: 0x9ED4, //CJK UNIFIED IDEOGRAPH - 0xCCA4: 0x52AB, //CJK UNIFIED IDEOGRAPH - 0xCCA5: 0x602F, //CJK UNIFIED IDEOGRAPH - 0xCCA6: 0x8FF2, //CJK UNIFIED IDEOGRAPH - 0xCCA7: 0x5048, //CJK UNIFIED IDEOGRAPH - 0xCCA8: 0x61A9, //CJK UNIFIED IDEOGRAPH - 0xCCA9: 0x63ED, //CJK UNIFIED IDEOGRAPH - 0xCCAA: 0x64CA, //CJK UNIFIED IDEOGRAPH - 0xCCAB: 0x683C, //CJK UNIFIED IDEOGRAPH - 0xCCAC: 0x6A84, //CJK UNIFIED IDEOGRAPH - 0xCCAD: 0x6FC0, //CJK UNIFIED IDEOGRAPH - 0xCCAE: 0x8188, //CJK UNIFIED IDEOGRAPH - 0xCCAF: 0x89A1, //CJK UNIFIED IDEOGRAPH - 0xCCB0: 0x9694, //CJK UNIFIED IDEOGRAPH - 0xCCB1: 0x5805, //CJK UNIFIED IDEOGRAPH - 0xCCB2: 0x727D, //CJK UNIFIED IDEOGRAPH - 0xCCB3: 0x72AC, //CJK UNIFIED IDEOGRAPH - 0xCCB4: 0x7504, //CJK UNIFIED IDEOGRAPH - 0xCCB5: 0x7D79, //CJK UNIFIED IDEOGRAPH - 0xCCB6: 0x7E6D, //CJK UNIFIED IDEOGRAPH - 0xCCB7: 0x80A9, //CJK UNIFIED IDEOGRAPH - 0xCCB8: 0x898B, //CJK UNIFIED IDEOGRAPH - 0xCCB9: 0x8B74, //CJK UNIFIED IDEOGRAPH - 0xCCBA: 0x9063, //CJK UNIFIED IDEOGRAPH - 0xCCBB: 0x9D51, //CJK UNIFIED IDEOGRAPH - 0xCCBC: 0x6289, //CJK UNIFIED IDEOGRAPH - 0xCCBD: 0x6C7A, //CJK UNIFIED IDEOGRAPH - 0xCCBE: 0x6F54, //CJK UNIFIED IDEOGRAPH - 0xCCBF: 0x7D50, //CJK UNIFIED IDEOGRAPH - 0xCCC0: 0x7F3A, //CJK UNIFIED IDEOGRAPH - 0xCCC1: 0x8A23, //CJK UNIFIED IDEOGRAPH - 0xCCC2: 0x517C, //CJK UNIFIED IDEOGRAPH - 0xCCC3: 0x614A, //CJK UNIFIED IDEOGRAPH - 0xCCC4: 0x7B9D, //CJK UNIFIED IDEOGRAPH - 0xCCC5: 0x8B19, //CJK UNIFIED IDEOGRAPH - 0xCCC6: 0x9257, //CJK UNIFIED IDEOGRAPH - 0xCCC7: 0x938C, //CJK UNIFIED IDEOGRAPH - 0xCCC8: 0x4EAC, //CJK UNIFIED IDEOGRAPH - 0xCCC9: 0x4FD3, //CJK UNIFIED IDEOGRAPH - 0xCCCA: 0x501E, //CJK UNIFIED IDEOGRAPH - 0xCCCB: 0x50BE, //CJK UNIFIED IDEOGRAPH - 0xCCCC: 0x5106, //CJK UNIFIED IDEOGRAPH - 0xCCCD: 0x52C1, //CJK UNIFIED IDEOGRAPH - 0xCCCE: 0x52CD, //CJK UNIFIED IDEOGRAPH - 0xCCCF: 0x537F, //CJK UNIFIED IDEOGRAPH - 0xCCD0: 0x5770, //CJK UNIFIED IDEOGRAPH - 0xCCD1: 0x5883, //CJK UNIFIED IDEOGRAPH - 0xCCD2: 0x5E9A, //CJK UNIFIED IDEOGRAPH - 0xCCD3: 0x5F91, //CJK UNIFIED IDEOGRAPH - 0xCCD4: 0x6176, //CJK UNIFIED IDEOGRAPH - 0xCCD5: 0x61AC, //CJK UNIFIED IDEOGRAPH - 0xCCD6: 0x64CE, //CJK UNIFIED IDEOGRAPH - 0xCCD7: 0x656C, //CJK UNIFIED IDEOGRAPH - 0xCCD8: 0x666F, //CJK UNIFIED IDEOGRAPH - 0xCCD9: 0x66BB, //CJK UNIFIED IDEOGRAPH - 0xCCDA: 0x66F4, //CJK UNIFIED IDEOGRAPH - 0xCCDB: 0x6897, //CJK UNIFIED IDEOGRAPH - 0xCCDC: 0x6D87, //CJK UNIFIED IDEOGRAPH - 0xCCDD: 0x7085, //CJK UNIFIED IDEOGRAPH - 0xCCDE: 0x70F1, //CJK UNIFIED IDEOGRAPH - 0xCCDF: 0x749F, //CJK UNIFIED IDEOGRAPH - 0xCCE0: 0x74A5, //CJK UNIFIED IDEOGRAPH - 0xCCE1: 0x74CA, //CJK UNIFIED IDEOGRAPH - 0xCCE2: 0x75D9, //CJK UNIFIED IDEOGRAPH - 0xCCE3: 0x786C, //CJK UNIFIED IDEOGRAPH - 0xCCE4: 0x78EC, //CJK UNIFIED IDEOGRAPH - 0xCCE5: 0x7ADF, //CJK UNIFIED IDEOGRAPH - 0xCCE6: 0x7AF6, //CJK UNIFIED IDEOGRAPH - 0xCCE7: 0x7D45, //CJK UNIFIED IDEOGRAPH - 0xCCE8: 0x7D93, //CJK UNIFIED IDEOGRAPH - 0xCCE9: 0x8015, //CJK UNIFIED IDEOGRAPH - 0xCCEA: 0x803F, //CJK UNIFIED IDEOGRAPH - 0xCCEB: 0x811B, //CJK UNIFIED IDEOGRAPH - 0xCCEC: 0x8396, //CJK UNIFIED IDEOGRAPH - 0xCCED: 0x8B66, //CJK UNIFIED IDEOGRAPH - 0xCCEE: 0x8F15, //CJK UNIFIED IDEOGRAPH - 0xCCEF: 0x9015, //CJK UNIFIED IDEOGRAPH - 0xCCF0: 0x93E1, //CJK UNIFIED IDEOGRAPH - 0xCCF1: 0x9803, //CJK UNIFIED IDEOGRAPH - 0xCCF2: 0x9838, //CJK UNIFIED IDEOGRAPH - 0xCCF3: 0x9A5A, //CJK UNIFIED IDEOGRAPH - 0xCCF4: 0x9BE8, //CJK UNIFIED IDEOGRAPH - 0xCCF5: 0x4FC2, //CJK UNIFIED IDEOGRAPH - 0xCCF6: 0x5553, //CJK UNIFIED IDEOGRAPH - 0xCCF7: 0x583A, //CJK UNIFIED IDEOGRAPH - 0xCCF8: 0x5951, //CJK UNIFIED IDEOGRAPH - 0xCCF9: 0x5B63, //CJK UNIFIED IDEOGRAPH - 0xCCFA: 0x5C46, //CJK UNIFIED IDEOGRAPH - 0xCCFB: 0x60B8, //CJK UNIFIED IDEOGRAPH - 0xCCFC: 0x6212, //CJK UNIFIED IDEOGRAPH - 0xCCFD: 0x6842, //CJK UNIFIED IDEOGRAPH - 0xCCFE: 0x68B0, //CJK UNIFIED IDEOGRAPH - 0xCDA1: 0x68E8, //CJK UNIFIED IDEOGRAPH - 0xCDA2: 0x6EAA, //CJK UNIFIED IDEOGRAPH - 0xCDA3: 0x754C, //CJK UNIFIED IDEOGRAPH - 0xCDA4: 0x7678, //CJK UNIFIED IDEOGRAPH - 0xCDA5: 0x78CE, //CJK UNIFIED IDEOGRAPH - 0xCDA6: 0x7A3D, //CJK UNIFIED IDEOGRAPH - 0xCDA7: 0x7CFB, //CJK UNIFIED IDEOGRAPH - 0xCDA8: 0x7E6B, //CJK UNIFIED IDEOGRAPH - 0xCDA9: 0x7E7C, //CJK UNIFIED IDEOGRAPH - 0xCDAA: 0x8A08, //CJK UNIFIED IDEOGRAPH - 0xCDAB: 0x8AA1, //CJK UNIFIED IDEOGRAPH - 0xCDAC: 0x8C3F, //CJK UNIFIED IDEOGRAPH - 0xCDAD: 0x968E, //CJK UNIFIED IDEOGRAPH - 0xCDAE: 0x9DC4, //CJK UNIFIED IDEOGRAPH - 0xCDAF: 0x53E4, //CJK UNIFIED IDEOGRAPH - 0xCDB0: 0x53E9, //CJK UNIFIED IDEOGRAPH - 0xCDB1: 0x544A, //CJK UNIFIED IDEOGRAPH - 0xCDB2: 0x5471, //CJK UNIFIED IDEOGRAPH - 0xCDB3: 0x56FA, //CJK UNIFIED IDEOGRAPH - 0xCDB4: 0x59D1, //CJK UNIFIED IDEOGRAPH - 0xCDB5: 0x5B64, //CJK UNIFIED IDEOGRAPH - 0xCDB6: 0x5C3B, //CJK UNIFIED IDEOGRAPH - 0xCDB7: 0x5EAB, //CJK UNIFIED IDEOGRAPH - 0xCDB8: 0x62F7, //CJK UNIFIED IDEOGRAPH - 0xCDB9: 0x6537, //CJK UNIFIED IDEOGRAPH - 0xCDBA: 0x6545, //CJK UNIFIED IDEOGRAPH - 0xCDBB: 0x6572, //CJK UNIFIED IDEOGRAPH - 0xCDBC: 0x66A0, //CJK UNIFIED IDEOGRAPH - 0xCDBD: 0x67AF, //CJK UNIFIED IDEOGRAPH - 0xCDBE: 0x69C1, //CJK UNIFIED IDEOGRAPH - 0xCDBF: 0x6CBD, //CJK UNIFIED IDEOGRAPH - 0xCDC0: 0x75FC, //CJK UNIFIED IDEOGRAPH - 0xCDC1: 0x7690, //CJK UNIFIED IDEOGRAPH - 0xCDC2: 0x777E, //CJK UNIFIED IDEOGRAPH - 0xCDC3: 0x7A3F, //CJK UNIFIED IDEOGRAPH - 0xCDC4: 0x7F94, //CJK UNIFIED IDEOGRAPH - 0xCDC5: 0x8003, //CJK UNIFIED IDEOGRAPH - 0xCDC6: 0x80A1, //CJK UNIFIED IDEOGRAPH - 0xCDC7: 0x818F, //CJK UNIFIED IDEOGRAPH - 0xCDC8: 0x82E6, //CJK UNIFIED IDEOGRAPH - 0xCDC9: 0x82FD, //CJK UNIFIED IDEOGRAPH - 0xCDCA: 0x83F0, //CJK UNIFIED IDEOGRAPH - 0xCDCB: 0x85C1, //CJK UNIFIED IDEOGRAPH - 0xCDCC: 0x8831, //CJK UNIFIED IDEOGRAPH - 0xCDCD: 0x88B4, //CJK UNIFIED IDEOGRAPH - 0xCDCE: 0x8AA5, //CJK UNIFIED IDEOGRAPH - 0xCDCF: 0xF903, //CJK COMPATIBILITY IDEOGRAPH - 0xCDD0: 0x8F9C, //CJK UNIFIED IDEOGRAPH - 0xCDD1: 0x932E, //CJK UNIFIED IDEOGRAPH - 0xCDD2: 0x96C7, //CJK UNIFIED IDEOGRAPH - 0xCDD3: 0x9867, //CJK UNIFIED IDEOGRAPH - 0xCDD4: 0x9AD8, //CJK UNIFIED IDEOGRAPH - 0xCDD5: 0x9F13, //CJK UNIFIED IDEOGRAPH - 0xCDD6: 0x54ED, //CJK UNIFIED IDEOGRAPH - 0xCDD7: 0x659B, //CJK UNIFIED IDEOGRAPH - 0xCDD8: 0x66F2, //CJK UNIFIED IDEOGRAPH - 0xCDD9: 0x688F, //CJK UNIFIED IDEOGRAPH - 0xCDDA: 0x7A40, //CJK UNIFIED IDEOGRAPH - 0xCDDB: 0x8C37, //CJK UNIFIED IDEOGRAPH - 0xCDDC: 0x9D60, //CJK UNIFIED IDEOGRAPH - 0xCDDD: 0x56F0, //CJK UNIFIED IDEOGRAPH - 0xCDDE: 0x5764, //CJK UNIFIED IDEOGRAPH - 0xCDDF: 0x5D11, //CJK UNIFIED IDEOGRAPH - 0xCDE0: 0x6606, //CJK UNIFIED IDEOGRAPH - 0xCDE1: 0x68B1, //CJK UNIFIED IDEOGRAPH - 0xCDE2: 0x68CD, //CJK UNIFIED IDEOGRAPH - 0xCDE3: 0x6EFE, //CJK UNIFIED IDEOGRAPH - 0xCDE4: 0x7428, //CJK UNIFIED IDEOGRAPH - 0xCDE5: 0x889E, //CJK UNIFIED IDEOGRAPH - 0xCDE6: 0x9BE4, //CJK UNIFIED IDEOGRAPH - 0xCDE7: 0x6C68, //CJK UNIFIED IDEOGRAPH - 0xCDE8: 0xF904, //CJK COMPATIBILITY IDEOGRAPH - 0xCDE9: 0x9AA8, //CJK UNIFIED IDEOGRAPH - 0xCDEA: 0x4F9B, //CJK UNIFIED IDEOGRAPH - 0xCDEB: 0x516C, //CJK UNIFIED IDEOGRAPH - 0xCDEC: 0x5171, //CJK UNIFIED IDEOGRAPH - 0xCDED: 0x529F, //CJK UNIFIED IDEOGRAPH - 0xCDEE: 0x5B54, //CJK UNIFIED IDEOGRAPH - 0xCDEF: 0x5DE5, //CJK UNIFIED IDEOGRAPH - 0xCDF0: 0x6050, //CJK UNIFIED IDEOGRAPH - 0xCDF1: 0x606D, //CJK UNIFIED IDEOGRAPH - 0xCDF2: 0x62F1, //CJK UNIFIED IDEOGRAPH - 0xCDF3: 0x63A7, //CJK UNIFIED IDEOGRAPH - 0xCDF4: 0x653B, //CJK UNIFIED IDEOGRAPH - 0xCDF5: 0x73D9, //CJK UNIFIED IDEOGRAPH - 0xCDF6: 0x7A7A, //CJK UNIFIED IDEOGRAPH - 0xCDF7: 0x86A3, //CJK UNIFIED IDEOGRAPH - 0xCDF8: 0x8CA2, //CJK UNIFIED IDEOGRAPH - 0xCDF9: 0x978F, //CJK UNIFIED IDEOGRAPH - 0xCDFA: 0x4E32, //CJK UNIFIED IDEOGRAPH - 0xCDFB: 0x5BE1, //CJK UNIFIED IDEOGRAPH - 0xCDFC: 0x6208, //CJK UNIFIED IDEOGRAPH - 0xCDFD: 0x679C, //CJK UNIFIED IDEOGRAPH - 0xCDFE: 0x74DC, //CJK UNIFIED IDEOGRAPH - 0xCEA1: 0x79D1, //CJK UNIFIED IDEOGRAPH - 0xCEA2: 0x83D3, //CJK UNIFIED IDEOGRAPH - 0xCEA3: 0x8A87, //CJK UNIFIED IDEOGRAPH - 0xCEA4: 0x8AB2, //CJK UNIFIED IDEOGRAPH - 0xCEA5: 0x8DE8, //CJK UNIFIED IDEOGRAPH - 0xCEA6: 0x904E, //CJK UNIFIED IDEOGRAPH - 0xCEA7: 0x934B, //CJK UNIFIED IDEOGRAPH - 0xCEA8: 0x9846, //CJK UNIFIED IDEOGRAPH - 0xCEA9: 0x5ED3, //CJK UNIFIED IDEOGRAPH - 0xCEAA: 0x69E8, //CJK UNIFIED IDEOGRAPH - 0xCEAB: 0x85FF, //CJK UNIFIED IDEOGRAPH - 0xCEAC: 0x90ED, //CJK UNIFIED IDEOGRAPH - 0xCEAD: 0xF905, //CJK COMPATIBILITY IDEOGRAPH - 0xCEAE: 0x51A0, //CJK UNIFIED IDEOGRAPH - 0xCEAF: 0x5B98, //CJK UNIFIED IDEOGRAPH - 0xCEB0: 0x5BEC, //CJK UNIFIED IDEOGRAPH - 0xCEB1: 0x6163, //CJK UNIFIED IDEOGRAPH - 0xCEB2: 0x68FA, //CJK UNIFIED IDEOGRAPH - 0xCEB3: 0x6B3E, //CJK UNIFIED IDEOGRAPH - 0xCEB4: 0x704C, //CJK UNIFIED IDEOGRAPH - 0xCEB5: 0x742F, //CJK UNIFIED IDEOGRAPH - 0xCEB6: 0x74D8, //CJK UNIFIED IDEOGRAPH - 0xCEB7: 0x7BA1, //CJK UNIFIED IDEOGRAPH - 0xCEB8: 0x7F50, //CJK UNIFIED IDEOGRAPH - 0xCEB9: 0x83C5, //CJK UNIFIED IDEOGRAPH - 0xCEBA: 0x89C0, //CJK UNIFIED IDEOGRAPH - 0xCEBB: 0x8CAB, //CJK UNIFIED IDEOGRAPH - 0xCEBC: 0x95DC, //CJK UNIFIED IDEOGRAPH - 0xCEBD: 0x9928, //CJK UNIFIED IDEOGRAPH - 0xCEBE: 0x522E, //CJK UNIFIED IDEOGRAPH - 0xCEBF: 0x605D, //CJK UNIFIED IDEOGRAPH - 0xCEC0: 0x62EC, //CJK UNIFIED IDEOGRAPH - 0xCEC1: 0x9002, //CJK UNIFIED IDEOGRAPH - 0xCEC2: 0x4F8A, //CJK UNIFIED IDEOGRAPH - 0xCEC3: 0x5149, //CJK UNIFIED IDEOGRAPH - 0xCEC4: 0x5321, //CJK UNIFIED IDEOGRAPH - 0xCEC5: 0x58D9, //CJK UNIFIED IDEOGRAPH - 0xCEC6: 0x5EE3, //CJK UNIFIED IDEOGRAPH - 0xCEC7: 0x66E0, //CJK UNIFIED IDEOGRAPH - 0xCEC8: 0x6D38, //CJK UNIFIED IDEOGRAPH - 0xCEC9: 0x709A, //CJK UNIFIED IDEOGRAPH - 0xCECA: 0x72C2, //CJK UNIFIED IDEOGRAPH - 0xCECB: 0x73D6, //CJK UNIFIED IDEOGRAPH - 0xCECC: 0x7B50, //CJK UNIFIED IDEOGRAPH - 0xCECD: 0x80F1, //CJK UNIFIED IDEOGRAPH - 0xCECE: 0x945B, //CJK UNIFIED IDEOGRAPH - 0xCECF: 0x5366, //CJK UNIFIED IDEOGRAPH - 0xCED0: 0x639B, //CJK UNIFIED IDEOGRAPH - 0xCED1: 0x7F6B, //CJK UNIFIED IDEOGRAPH - 0xCED2: 0x4E56, //CJK UNIFIED IDEOGRAPH - 0xCED3: 0x5080, //CJK UNIFIED IDEOGRAPH - 0xCED4: 0x584A, //CJK UNIFIED IDEOGRAPH - 0xCED5: 0x58DE, //CJK UNIFIED IDEOGRAPH - 0xCED6: 0x602A, //CJK UNIFIED IDEOGRAPH - 0xCED7: 0x6127, //CJK UNIFIED IDEOGRAPH - 0xCED8: 0x62D0, //CJK UNIFIED IDEOGRAPH - 0xCED9: 0x69D0, //CJK UNIFIED IDEOGRAPH - 0xCEDA: 0x9B41, //CJK UNIFIED IDEOGRAPH - 0xCEDB: 0x5B8F, //CJK UNIFIED IDEOGRAPH - 0xCEDC: 0x7D18, //CJK UNIFIED IDEOGRAPH - 0xCEDD: 0x80B1, //CJK UNIFIED IDEOGRAPH - 0xCEDE: 0x8F5F, //CJK UNIFIED IDEOGRAPH - 0xCEDF: 0x4EA4, //CJK UNIFIED IDEOGRAPH - 0xCEE0: 0x50D1, //CJK UNIFIED IDEOGRAPH - 0xCEE1: 0x54AC, //CJK UNIFIED IDEOGRAPH - 0xCEE2: 0x55AC, //CJK UNIFIED IDEOGRAPH - 0xCEE3: 0x5B0C, //CJK UNIFIED IDEOGRAPH - 0xCEE4: 0x5DA0, //CJK UNIFIED IDEOGRAPH - 0xCEE5: 0x5DE7, //CJK UNIFIED IDEOGRAPH - 0xCEE6: 0x652A, //CJK UNIFIED IDEOGRAPH - 0xCEE7: 0x654E, //CJK UNIFIED IDEOGRAPH - 0xCEE8: 0x6821, //CJK UNIFIED IDEOGRAPH - 0xCEE9: 0x6A4B, //CJK UNIFIED IDEOGRAPH - 0xCEEA: 0x72E1, //CJK UNIFIED IDEOGRAPH - 0xCEEB: 0x768E, //CJK UNIFIED IDEOGRAPH - 0xCEEC: 0x77EF, //CJK UNIFIED IDEOGRAPH - 0xCEED: 0x7D5E, //CJK UNIFIED IDEOGRAPH - 0xCEEE: 0x7FF9, //CJK UNIFIED IDEOGRAPH - 0xCEEF: 0x81A0, //CJK UNIFIED IDEOGRAPH - 0xCEF0: 0x854E, //CJK UNIFIED IDEOGRAPH - 0xCEF1: 0x86DF, //CJK UNIFIED IDEOGRAPH - 0xCEF2: 0x8F03, //CJK UNIFIED IDEOGRAPH - 0xCEF3: 0x8F4E, //CJK UNIFIED IDEOGRAPH - 0xCEF4: 0x90CA, //CJK UNIFIED IDEOGRAPH - 0xCEF5: 0x9903, //CJK UNIFIED IDEOGRAPH - 0xCEF6: 0x9A55, //CJK UNIFIED IDEOGRAPH - 0xCEF7: 0x9BAB, //CJK UNIFIED IDEOGRAPH - 0xCEF8: 0x4E18, //CJK UNIFIED IDEOGRAPH - 0xCEF9: 0x4E45, //CJK UNIFIED IDEOGRAPH - 0xCEFA: 0x4E5D, //CJK UNIFIED IDEOGRAPH - 0xCEFB: 0x4EC7, //CJK UNIFIED IDEOGRAPH - 0xCEFC: 0x4FF1, //CJK UNIFIED IDEOGRAPH - 0xCEFD: 0x5177, //CJK UNIFIED IDEOGRAPH - 0xCEFE: 0x52FE, //CJK UNIFIED IDEOGRAPH - 0xCFA1: 0x5340, //CJK UNIFIED IDEOGRAPH - 0xCFA2: 0x53E3, //CJK UNIFIED IDEOGRAPH - 0xCFA3: 0x53E5, //CJK UNIFIED IDEOGRAPH - 0xCFA4: 0x548E, //CJK UNIFIED IDEOGRAPH - 0xCFA5: 0x5614, //CJK UNIFIED IDEOGRAPH - 0xCFA6: 0x5775, //CJK UNIFIED IDEOGRAPH - 0xCFA7: 0x57A2, //CJK UNIFIED IDEOGRAPH - 0xCFA8: 0x5BC7, //CJK UNIFIED IDEOGRAPH - 0xCFA9: 0x5D87, //CJK UNIFIED IDEOGRAPH - 0xCFAA: 0x5ED0, //CJK UNIFIED IDEOGRAPH - 0xCFAB: 0x61FC, //CJK UNIFIED IDEOGRAPH - 0xCFAC: 0x62D8, //CJK UNIFIED IDEOGRAPH - 0xCFAD: 0x6551, //CJK UNIFIED IDEOGRAPH - 0xCFAE: 0x67B8, //CJK UNIFIED IDEOGRAPH - 0xCFAF: 0x67E9, //CJK UNIFIED IDEOGRAPH - 0xCFB0: 0x69CB, //CJK UNIFIED IDEOGRAPH - 0xCFB1: 0x6B50, //CJK UNIFIED IDEOGRAPH - 0xCFB2: 0x6BC6, //CJK UNIFIED IDEOGRAPH - 0xCFB3: 0x6BEC, //CJK UNIFIED IDEOGRAPH - 0xCFB4: 0x6C42, //CJK UNIFIED IDEOGRAPH - 0xCFB5: 0x6E9D, //CJK UNIFIED IDEOGRAPH - 0xCFB6: 0x7078, //CJK UNIFIED IDEOGRAPH - 0xCFB7: 0x72D7, //CJK UNIFIED IDEOGRAPH - 0xCFB8: 0x7396, //CJK UNIFIED IDEOGRAPH - 0xCFB9: 0x7403, //CJK UNIFIED IDEOGRAPH - 0xCFBA: 0x77BF, //CJK UNIFIED IDEOGRAPH - 0xCFBB: 0x77E9, //CJK UNIFIED IDEOGRAPH - 0xCFBC: 0x7A76, //CJK UNIFIED IDEOGRAPH - 0xCFBD: 0x7D7F, //CJK UNIFIED IDEOGRAPH - 0xCFBE: 0x8009, //CJK UNIFIED IDEOGRAPH - 0xCFBF: 0x81FC, //CJK UNIFIED IDEOGRAPH - 0xCFC0: 0x8205, //CJK UNIFIED IDEOGRAPH - 0xCFC1: 0x820A, //CJK UNIFIED IDEOGRAPH - 0xCFC2: 0x82DF, //CJK UNIFIED IDEOGRAPH - 0xCFC3: 0x8862, //CJK UNIFIED IDEOGRAPH - 0xCFC4: 0x8B33, //CJK UNIFIED IDEOGRAPH - 0xCFC5: 0x8CFC, //CJK UNIFIED IDEOGRAPH - 0xCFC6: 0x8EC0, //CJK UNIFIED IDEOGRAPH - 0xCFC7: 0x9011, //CJK UNIFIED IDEOGRAPH - 0xCFC8: 0x90B1, //CJK UNIFIED IDEOGRAPH - 0xCFC9: 0x9264, //CJK UNIFIED IDEOGRAPH - 0xCFCA: 0x92B6, //CJK UNIFIED IDEOGRAPH - 0xCFCB: 0x99D2, //CJK UNIFIED IDEOGRAPH - 0xCFCC: 0x9A45, //CJK UNIFIED IDEOGRAPH - 0xCFCD: 0x9CE9, //CJK UNIFIED IDEOGRAPH - 0xCFCE: 0x9DD7, //CJK UNIFIED IDEOGRAPH - 0xCFCF: 0x9F9C, //CJK UNIFIED IDEOGRAPH - 0xCFD0: 0x570B, //CJK UNIFIED IDEOGRAPH - 0xCFD1: 0x5C40, //CJK UNIFIED IDEOGRAPH - 0xCFD2: 0x83CA, //CJK UNIFIED IDEOGRAPH - 0xCFD3: 0x97A0, //CJK UNIFIED IDEOGRAPH - 0xCFD4: 0x97AB, //CJK UNIFIED IDEOGRAPH - 0xCFD5: 0x9EB4, //CJK UNIFIED IDEOGRAPH - 0xCFD6: 0x541B, //CJK UNIFIED IDEOGRAPH - 0xCFD7: 0x7A98, //CJK UNIFIED IDEOGRAPH - 0xCFD8: 0x7FA4, //CJK UNIFIED IDEOGRAPH - 0xCFD9: 0x88D9, //CJK UNIFIED IDEOGRAPH - 0xCFDA: 0x8ECD, //CJK UNIFIED IDEOGRAPH - 0xCFDB: 0x90E1, //CJK UNIFIED IDEOGRAPH - 0xCFDC: 0x5800, //CJK UNIFIED IDEOGRAPH - 0xCFDD: 0x5C48, //CJK UNIFIED IDEOGRAPH - 0xCFDE: 0x6398, //CJK UNIFIED IDEOGRAPH - 0xCFDF: 0x7A9F, //CJK UNIFIED IDEOGRAPH - 0xCFE0: 0x5BAE, //CJK UNIFIED IDEOGRAPH - 0xCFE1: 0x5F13, //CJK UNIFIED IDEOGRAPH - 0xCFE2: 0x7A79, //CJK UNIFIED IDEOGRAPH - 0xCFE3: 0x7AAE, //CJK UNIFIED IDEOGRAPH - 0xCFE4: 0x828E, //CJK UNIFIED IDEOGRAPH - 0xCFE5: 0x8EAC, //CJK UNIFIED IDEOGRAPH - 0xCFE6: 0x5026, //CJK UNIFIED IDEOGRAPH - 0xCFE7: 0x5238, //CJK UNIFIED IDEOGRAPH - 0xCFE8: 0x52F8, //CJK UNIFIED IDEOGRAPH - 0xCFE9: 0x5377, //CJK UNIFIED IDEOGRAPH - 0xCFEA: 0x5708, //CJK UNIFIED IDEOGRAPH - 0xCFEB: 0x62F3, //CJK UNIFIED IDEOGRAPH - 0xCFEC: 0x6372, //CJK UNIFIED IDEOGRAPH - 0xCFED: 0x6B0A, //CJK UNIFIED IDEOGRAPH - 0xCFEE: 0x6DC3, //CJK UNIFIED IDEOGRAPH - 0xCFEF: 0x7737, //CJK UNIFIED IDEOGRAPH - 0xCFF0: 0x53A5, //CJK UNIFIED IDEOGRAPH - 0xCFF1: 0x7357, //CJK UNIFIED IDEOGRAPH - 0xCFF2: 0x8568, //CJK UNIFIED IDEOGRAPH - 0xCFF3: 0x8E76, //CJK UNIFIED IDEOGRAPH - 0xCFF4: 0x95D5, //CJK UNIFIED IDEOGRAPH - 0xCFF5: 0x673A, //CJK UNIFIED IDEOGRAPH - 0xCFF6: 0x6AC3, //CJK UNIFIED IDEOGRAPH - 0xCFF7: 0x6F70, //CJK UNIFIED IDEOGRAPH - 0xCFF8: 0x8A6D, //CJK UNIFIED IDEOGRAPH - 0xCFF9: 0x8ECC, //CJK UNIFIED IDEOGRAPH - 0xCFFA: 0x994B, //CJK UNIFIED IDEOGRAPH - 0xCFFB: 0xF906, //CJK COMPATIBILITY IDEOGRAPH - 0xCFFC: 0x6677, //CJK UNIFIED IDEOGRAPH - 0xCFFD: 0x6B78, //CJK UNIFIED IDEOGRAPH - 0xCFFE: 0x8CB4, //CJK UNIFIED IDEOGRAPH - 0xD0A1: 0x9B3C, //CJK UNIFIED IDEOGRAPH - 0xD0A2: 0xF907, //CJK COMPATIBILITY IDEOGRAPH - 0xD0A3: 0x53EB, //CJK UNIFIED IDEOGRAPH - 0xD0A4: 0x572D, //CJK UNIFIED IDEOGRAPH - 0xD0A5: 0x594E, //CJK UNIFIED IDEOGRAPH - 0xD0A6: 0x63C6, //CJK UNIFIED IDEOGRAPH - 0xD0A7: 0x69FB, //CJK UNIFIED IDEOGRAPH - 0xD0A8: 0x73EA, //CJK UNIFIED IDEOGRAPH - 0xD0A9: 0x7845, //CJK UNIFIED IDEOGRAPH - 0xD0AA: 0x7ABA, //CJK UNIFIED IDEOGRAPH - 0xD0AB: 0x7AC5, //CJK UNIFIED IDEOGRAPH - 0xD0AC: 0x7CFE, //CJK UNIFIED IDEOGRAPH - 0xD0AD: 0x8475, //CJK UNIFIED IDEOGRAPH - 0xD0AE: 0x898F, //CJK UNIFIED IDEOGRAPH - 0xD0AF: 0x8D73, //CJK UNIFIED IDEOGRAPH - 0xD0B0: 0x9035, //CJK UNIFIED IDEOGRAPH - 0xD0B1: 0x95A8, //CJK UNIFIED IDEOGRAPH - 0xD0B2: 0x52FB, //CJK UNIFIED IDEOGRAPH - 0xD0B3: 0x5747, //CJK UNIFIED IDEOGRAPH - 0xD0B4: 0x7547, //CJK UNIFIED IDEOGRAPH - 0xD0B5: 0x7B60, //CJK UNIFIED IDEOGRAPH - 0xD0B6: 0x83CC, //CJK UNIFIED IDEOGRAPH - 0xD0B7: 0x921E, //CJK UNIFIED IDEOGRAPH - 0xD0B8: 0xF908, //CJK COMPATIBILITY IDEOGRAPH - 0xD0B9: 0x6A58, //CJK UNIFIED IDEOGRAPH - 0xD0BA: 0x514B, //CJK UNIFIED IDEOGRAPH - 0xD0BB: 0x524B, //CJK UNIFIED IDEOGRAPH - 0xD0BC: 0x5287, //CJK UNIFIED IDEOGRAPH - 0xD0BD: 0x621F, //CJK UNIFIED IDEOGRAPH - 0xD0BE: 0x68D8, //CJK UNIFIED IDEOGRAPH - 0xD0BF: 0x6975, //CJK UNIFIED IDEOGRAPH - 0xD0C0: 0x9699, //CJK UNIFIED IDEOGRAPH - 0xD0C1: 0x50C5, //CJK UNIFIED IDEOGRAPH - 0xD0C2: 0x52A4, //CJK UNIFIED IDEOGRAPH - 0xD0C3: 0x52E4, //CJK UNIFIED IDEOGRAPH - 0xD0C4: 0x61C3, //CJK UNIFIED IDEOGRAPH - 0xD0C5: 0x65A4, //CJK UNIFIED IDEOGRAPH - 0xD0C6: 0x6839, //CJK UNIFIED IDEOGRAPH - 0xD0C7: 0x69FF, //CJK UNIFIED IDEOGRAPH - 0xD0C8: 0x747E, //CJK UNIFIED IDEOGRAPH - 0xD0C9: 0x7B4B, //CJK UNIFIED IDEOGRAPH - 0xD0CA: 0x82B9, //CJK UNIFIED IDEOGRAPH - 0xD0CB: 0x83EB, //CJK UNIFIED IDEOGRAPH - 0xD0CC: 0x89B2, //CJK UNIFIED IDEOGRAPH - 0xD0CD: 0x8B39, //CJK UNIFIED IDEOGRAPH - 0xD0CE: 0x8FD1, //CJK UNIFIED IDEOGRAPH - 0xD0CF: 0x9949, //CJK UNIFIED IDEOGRAPH - 0xD0D0: 0xF909, //CJK COMPATIBILITY IDEOGRAPH - 0xD0D1: 0x4ECA, //CJK UNIFIED IDEOGRAPH - 0xD0D2: 0x5997, //CJK UNIFIED IDEOGRAPH - 0xD0D3: 0x64D2, //CJK UNIFIED IDEOGRAPH - 0xD0D4: 0x6611, //CJK UNIFIED IDEOGRAPH - 0xD0D5: 0x6A8E, //CJK UNIFIED IDEOGRAPH - 0xD0D6: 0x7434, //CJK UNIFIED IDEOGRAPH - 0xD0D7: 0x7981, //CJK UNIFIED IDEOGRAPH - 0xD0D8: 0x79BD, //CJK UNIFIED IDEOGRAPH - 0xD0D9: 0x82A9, //CJK UNIFIED IDEOGRAPH - 0xD0DA: 0x887E, //CJK UNIFIED IDEOGRAPH - 0xD0DB: 0x887F, //CJK UNIFIED IDEOGRAPH - 0xD0DC: 0x895F, //CJK UNIFIED IDEOGRAPH - 0xD0DD: 0xF90A, //CJK COMPATIBILITY IDEOGRAPH - 0xD0DE: 0x9326, //CJK UNIFIED IDEOGRAPH - 0xD0DF: 0x4F0B, //CJK UNIFIED IDEOGRAPH - 0xD0E0: 0x53CA, //CJK UNIFIED IDEOGRAPH - 0xD0E1: 0x6025, //CJK UNIFIED IDEOGRAPH - 0xD0E2: 0x6271, //CJK UNIFIED IDEOGRAPH - 0xD0E3: 0x6C72, //CJK UNIFIED IDEOGRAPH - 0xD0E4: 0x7D1A, //CJK UNIFIED IDEOGRAPH - 0xD0E5: 0x7D66, //CJK UNIFIED IDEOGRAPH - 0xD0E6: 0x4E98, //CJK UNIFIED IDEOGRAPH - 0xD0E7: 0x5162, //CJK UNIFIED IDEOGRAPH - 0xD0E8: 0x77DC, //CJK UNIFIED IDEOGRAPH - 0xD0E9: 0x80AF, //CJK UNIFIED IDEOGRAPH - 0xD0EA: 0x4F01, //CJK UNIFIED IDEOGRAPH - 0xD0EB: 0x4F0E, //CJK UNIFIED IDEOGRAPH - 0xD0EC: 0x5176, //CJK UNIFIED IDEOGRAPH - 0xD0ED: 0x5180, //CJK UNIFIED IDEOGRAPH - 0xD0EE: 0x55DC, //CJK UNIFIED IDEOGRAPH - 0xD0EF: 0x5668, //CJK UNIFIED IDEOGRAPH - 0xD0F0: 0x573B, //CJK UNIFIED IDEOGRAPH - 0xD0F1: 0x57FA, //CJK UNIFIED IDEOGRAPH - 0xD0F2: 0x57FC, //CJK UNIFIED IDEOGRAPH - 0xD0F3: 0x5914, //CJK UNIFIED IDEOGRAPH - 0xD0F4: 0x5947, //CJK UNIFIED IDEOGRAPH - 0xD0F5: 0x5993, //CJK UNIFIED IDEOGRAPH - 0xD0F6: 0x5BC4, //CJK UNIFIED IDEOGRAPH - 0xD0F7: 0x5C90, //CJK UNIFIED IDEOGRAPH - 0xD0F8: 0x5D0E, //CJK UNIFIED IDEOGRAPH - 0xD0F9: 0x5DF1, //CJK UNIFIED IDEOGRAPH - 0xD0FA: 0x5E7E, //CJK UNIFIED IDEOGRAPH - 0xD0FB: 0x5FCC, //CJK UNIFIED IDEOGRAPH - 0xD0FC: 0x6280, //CJK UNIFIED IDEOGRAPH - 0xD0FD: 0x65D7, //CJK UNIFIED IDEOGRAPH - 0xD0FE: 0x65E3, //CJK UNIFIED IDEOGRAPH - 0xD1A1: 0x671E, //CJK UNIFIED IDEOGRAPH - 0xD1A2: 0x671F, //CJK UNIFIED IDEOGRAPH - 0xD1A3: 0x675E, //CJK UNIFIED IDEOGRAPH - 0xD1A4: 0x68CB, //CJK UNIFIED IDEOGRAPH - 0xD1A5: 0x68C4, //CJK UNIFIED IDEOGRAPH - 0xD1A6: 0x6A5F, //CJK UNIFIED IDEOGRAPH - 0xD1A7: 0x6B3A, //CJK UNIFIED IDEOGRAPH - 0xD1A8: 0x6C23, //CJK UNIFIED IDEOGRAPH - 0xD1A9: 0x6C7D, //CJK UNIFIED IDEOGRAPH - 0xD1AA: 0x6C82, //CJK UNIFIED IDEOGRAPH - 0xD1AB: 0x6DC7, //CJK UNIFIED IDEOGRAPH - 0xD1AC: 0x7398, //CJK UNIFIED IDEOGRAPH - 0xD1AD: 0x7426, //CJK UNIFIED IDEOGRAPH - 0xD1AE: 0x742A, //CJK UNIFIED IDEOGRAPH - 0xD1AF: 0x7482, //CJK UNIFIED IDEOGRAPH - 0xD1B0: 0x74A3, //CJK UNIFIED IDEOGRAPH - 0xD1B1: 0x7578, //CJK UNIFIED IDEOGRAPH - 0xD1B2: 0x757F, //CJK UNIFIED IDEOGRAPH - 0xD1B3: 0x7881, //CJK UNIFIED IDEOGRAPH - 0xD1B4: 0x78EF, //CJK UNIFIED IDEOGRAPH - 0xD1B5: 0x7941, //CJK UNIFIED IDEOGRAPH - 0xD1B6: 0x7947, //CJK UNIFIED IDEOGRAPH - 0xD1B7: 0x7948, //CJK UNIFIED IDEOGRAPH - 0xD1B8: 0x797A, //CJK UNIFIED IDEOGRAPH - 0xD1B9: 0x7B95, //CJK UNIFIED IDEOGRAPH - 0xD1BA: 0x7D00, //CJK UNIFIED IDEOGRAPH - 0xD1BB: 0x7DBA, //CJK UNIFIED IDEOGRAPH - 0xD1BC: 0x7F88, //CJK UNIFIED IDEOGRAPH - 0xD1BD: 0x8006, //CJK UNIFIED IDEOGRAPH - 0xD1BE: 0x802D, //CJK UNIFIED IDEOGRAPH - 0xD1BF: 0x808C, //CJK UNIFIED IDEOGRAPH - 0xD1C0: 0x8A18, //CJK UNIFIED IDEOGRAPH - 0xD1C1: 0x8B4F, //CJK UNIFIED IDEOGRAPH - 0xD1C2: 0x8C48, //CJK UNIFIED IDEOGRAPH - 0xD1C3: 0x8D77, //CJK UNIFIED IDEOGRAPH - 0xD1C4: 0x9321, //CJK UNIFIED IDEOGRAPH - 0xD1C5: 0x9324, //CJK UNIFIED IDEOGRAPH - 0xD1C6: 0x98E2, //CJK UNIFIED IDEOGRAPH - 0xD1C7: 0x9951, //CJK UNIFIED IDEOGRAPH - 0xD1C8: 0x9A0E, //CJK UNIFIED IDEOGRAPH - 0xD1C9: 0x9A0F, //CJK UNIFIED IDEOGRAPH - 0xD1CA: 0x9A65, //CJK UNIFIED IDEOGRAPH - 0xD1CB: 0x9E92, //CJK UNIFIED IDEOGRAPH - 0xD1CC: 0x7DCA, //CJK UNIFIED IDEOGRAPH - 0xD1CD: 0x4F76, //CJK UNIFIED IDEOGRAPH - 0xD1CE: 0x5409, //CJK UNIFIED IDEOGRAPH - 0xD1CF: 0x62EE, //CJK UNIFIED IDEOGRAPH - 0xD1D0: 0x6854, //CJK UNIFIED IDEOGRAPH - 0xD1D1: 0x91D1, //CJK UNIFIED IDEOGRAPH - 0xD1D2: 0x55AB, //CJK UNIFIED IDEOGRAPH - 0xD1D3: 0x513A, //CJK UNIFIED IDEOGRAPH - 0xD1D4: 0xF90B, //CJK COMPATIBILITY IDEOGRAPH - 0xD1D5: 0xF90C, //CJK COMPATIBILITY IDEOGRAPH - 0xD1D6: 0x5A1C, //CJK UNIFIED IDEOGRAPH - 0xD1D7: 0x61E6, //CJK UNIFIED IDEOGRAPH - 0xD1D8: 0xF90D, //CJK COMPATIBILITY IDEOGRAPH - 0xD1D9: 0x62CF, //CJK UNIFIED IDEOGRAPH - 0xD1DA: 0x62FF, //CJK UNIFIED IDEOGRAPH - 0xD1DB: 0xF90E, //CJK COMPATIBILITY IDEOGRAPH - 0xD1DC: 0xF90F, //CJK COMPATIBILITY IDEOGRAPH - 0xD1DD: 0xF910, //CJK COMPATIBILITY IDEOGRAPH - 0xD1DE: 0xF911, //CJK COMPATIBILITY IDEOGRAPH - 0xD1DF: 0xF912, //CJK COMPATIBILITY IDEOGRAPH - 0xD1E0: 0xF913, //CJK COMPATIBILITY IDEOGRAPH - 0xD1E1: 0x90A3, //CJK UNIFIED IDEOGRAPH - 0xD1E2: 0xF914, //CJK COMPATIBILITY IDEOGRAPH - 0xD1E3: 0xF915, //CJK COMPATIBILITY IDEOGRAPH - 0xD1E4: 0xF916, //CJK COMPATIBILITY IDEOGRAPH - 0xD1E5: 0xF917, //CJK COMPATIBILITY IDEOGRAPH - 0xD1E6: 0xF918, //CJK COMPATIBILITY IDEOGRAPH - 0xD1E7: 0x8AFE, //CJK UNIFIED IDEOGRAPH - 0xD1E8: 0xF919, //CJK COMPATIBILITY IDEOGRAPH - 0xD1E9: 0xF91A, //CJK COMPATIBILITY IDEOGRAPH - 0xD1EA: 0xF91B, //CJK COMPATIBILITY IDEOGRAPH - 0xD1EB: 0xF91C, //CJK COMPATIBILITY IDEOGRAPH - 0xD1EC: 0x6696, //CJK UNIFIED IDEOGRAPH - 0xD1ED: 0xF91D, //CJK COMPATIBILITY IDEOGRAPH - 0xD1EE: 0x7156, //CJK UNIFIED IDEOGRAPH - 0xD1EF: 0xF91E, //CJK COMPATIBILITY IDEOGRAPH - 0xD1F0: 0xF91F, //CJK COMPATIBILITY IDEOGRAPH - 0xD1F1: 0x96E3, //CJK UNIFIED IDEOGRAPH - 0xD1F2: 0xF920, //CJK COMPATIBILITY IDEOGRAPH - 0xD1F3: 0x634F, //CJK UNIFIED IDEOGRAPH - 0xD1F4: 0x637A, //CJK UNIFIED IDEOGRAPH - 0xD1F5: 0x5357, //CJK UNIFIED IDEOGRAPH - 0xD1F6: 0xF921, //CJK COMPATIBILITY IDEOGRAPH - 0xD1F7: 0x678F, //CJK UNIFIED IDEOGRAPH - 0xD1F8: 0x6960, //CJK UNIFIED IDEOGRAPH - 0xD1F9: 0x6E73, //CJK UNIFIED IDEOGRAPH - 0xD1FA: 0xF922, //CJK COMPATIBILITY IDEOGRAPH - 0xD1FB: 0x7537, //CJK UNIFIED IDEOGRAPH - 0xD1FC: 0xF923, //CJK COMPATIBILITY IDEOGRAPH - 0xD1FD: 0xF924, //CJK COMPATIBILITY IDEOGRAPH - 0xD1FE: 0xF925, //CJK COMPATIBILITY IDEOGRAPH - 0xD2A1: 0x7D0D, //CJK UNIFIED IDEOGRAPH - 0xD2A2: 0xF926, //CJK COMPATIBILITY IDEOGRAPH - 0xD2A3: 0xF927, //CJK COMPATIBILITY IDEOGRAPH - 0xD2A4: 0x8872, //CJK UNIFIED IDEOGRAPH - 0xD2A5: 0x56CA, //CJK UNIFIED IDEOGRAPH - 0xD2A6: 0x5A18, //CJK UNIFIED IDEOGRAPH - 0xD2A7: 0xF928, //CJK COMPATIBILITY IDEOGRAPH - 0xD2A8: 0xF929, //CJK COMPATIBILITY IDEOGRAPH - 0xD2A9: 0xF92A, //CJK COMPATIBILITY IDEOGRAPH - 0xD2AA: 0xF92B, //CJK COMPATIBILITY IDEOGRAPH - 0xD2AB: 0xF92C, //CJK COMPATIBILITY IDEOGRAPH - 0xD2AC: 0x4E43, //CJK UNIFIED IDEOGRAPH - 0xD2AD: 0xF92D, //CJK COMPATIBILITY IDEOGRAPH - 0xD2AE: 0x5167, //CJK UNIFIED IDEOGRAPH - 0xD2AF: 0x5948, //CJK UNIFIED IDEOGRAPH - 0xD2B0: 0x67F0, //CJK UNIFIED IDEOGRAPH - 0xD2B1: 0x8010, //CJK UNIFIED IDEOGRAPH - 0xD2B2: 0xF92E, //CJK COMPATIBILITY IDEOGRAPH - 0xD2B3: 0x5973, //CJK UNIFIED IDEOGRAPH - 0xD2B4: 0x5E74, //CJK UNIFIED IDEOGRAPH - 0xD2B5: 0x649A, //CJK UNIFIED IDEOGRAPH - 0xD2B6: 0x79CA, //CJK UNIFIED IDEOGRAPH - 0xD2B7: 0x5FF5, //CJK UNIFIED IDEOGRAPH - 0xD2B8: 0x606C, //CJK UNIFIED IDEOGRAPH - 0xD2B9: 0x62C8, //CJK UNIFIED IDEOGRAPH - 0xD2BA: 0x637B, //CJK UNIFIED IDEOGRAPH - 0xD2BB: 0x5BE7, //CJK UNIFIED IDEOGRAPH - 0xD2BC: 0x5BD7, //CJK UNIFIED IDEOGRAPH - 0xD2BD: 0x52AA, //CJK UNIFIED IDEOGRAPH - 0xD2BE: 0xF92F, //CJK COMPATIBILITY IDEOGRAPH - 0xD2BF: 0x5974, //CJK UNIFIED IDEOGRAPH - 0xD2C0: 0x5F29, //CJK UNIFIED IDEOGRAPH - 0xD2C1: 0x6012, //CJK UNIFIED IDEOGRAPH - 0xD2C2: 0xF930, //CJK COMPATIBILITY IDEOGRAPH - 0xD2C3: 0xF931, //CJK COMPATIBILITY IDEOGRAPH - 0xD2C4: 0xF932, //CJK COMPATIBILITY IDEOGRAPH - 0xD2C5: 0x7459, //CJK UNIFIED IDEOGRAPH - 0xD2C6: 0xF933, //CJK COMPATIBILITY IDEOGRAPH - 0xD2C7: 0xF934, //CJK COMPATIBILITY IDEOGRAPH - 0xD2C8: 0xF935, //CJK COMPATIBILITY IDEOGRAPH - 0xD2C9: 0xF936, //CJK COMPATIBILITY IDEOGRAPH - 0xD2CA: 0xF937, //CJK COMPATIBILITY IDEOGRAPH - 0xD2CB: 0xF938, //CJK COMPATIBILITY IDEOGRAPH - 0xD2CC: 0x99D1, //CJK UNIFIED IDEOGRAPH - 0xD2CD: 0xF939, //CJK COMPATIBILITY IDEOGRAPH - 0xD2CE: 0xF93A, //CJK COMPATIBILITY IDEOGRAPH - 0xD2CF: 0xF93B, //CJK COMPATIBILITY IDEOGRAPH - 0xD2D0: 0xF93C, //CJK COMPATIBILITY IDEOGRAPH - 0xD2D1: 0xF93D, //CJK COMPATIBILITY IDEOGRAPH - 0xD2D2: 0xF93E, //CJK COMPATIBILITY IDEOGRAPH - 0xD2D3: 0xF93F, //CJK COMPATIBILITY IDEOGRAPH - 0xD2D4: 0xF940, //CJK COMPATIBILITY IDEOGRAPH - 0xD2D5: 0xF941, //CJK COMPATIBILITY IDEOGRAPH - 0xD2D6: 0xF942, //CJK COMPATIBILITY IDEOGRAPH - 0xD2D7: 0xF943, //CJK COMPATIBILITY IDEOGRAPH - 0xD2D8: 0x6FC3, //CJK UNIFIED IDEOGRAPH - 0xD2D9: 0xF944, //CJK COMPATIBILITY IDEOGRAPH - 0xD2DA: 0xF945, //CJK COMPATIBILITY IDEOGRAPH - 0xD2DB: 0x81BF, //CJK UNIFIED IDEOGRAPH - 0xD2DC: 0x8FB2, //CJK UNIFIED IDEOGRAPH - 0xD2DD: 0x60F1, //CJK UNIFIED IDEOGRAPH - 0xD2DE: 0xF946, //CJK COMPATIBILITY IDEOGRAPH - 0xD2DF: 0xF947, //CJK COMPATIBILITY IDEOGRAPH - 0xD2E0: 0x8166, //CJK UNIFIED IDEOGRAPH - 0xD2E1: 0xF948, //CJK COMPATIBILITY IDEOGRAPH - 0xD2E2: 0xF949, //CJK COMPATIBILITY IDEOGRAPH - 0xD2E3: 0x5C3F, //CJK UNIFIED IDEOGRAPH - 0xD2E4: 0xF94A, //CJK COMPATIBILITY IDEOGRAPH - 0xD2E5: 0xF94B, //CJK COMPATIBILITY IDEOGRAPH - 0xD2E6: 0xF94C, //CJK COMPATIBILITY IDEOGRAPH - 0xD2E7: 0xF94D, //CJK COMPATIBILITY IDEOGRAPH - 0xD2E8: 0xF94E, //CJK COMPATIBILITY IDEOGRAPH - 0xD2E9: 0xF94F, //CJK COMPATIBILITY IDEOGRAPH - 0xD2EA: 0xF950, //CJK COMPATIBILITY IDEOGRAPH - 0xD2EB: 0xF951, //CJK COMPATIBILITY IDEOGRAPH - 0xD2EC: 0x5AE9, //CJK UNIFIED IDEOGRAPH - 0xD2ED: 0x8A25, //CJK UNIFIED IDEOGRAPH - 0xD2EE: 0x677B, //CJK UNIFIED IDEOGRAPH - 0xD2EF: 0x7D10, //CJK UNIFIED IDEOGRAPH - 0xD2F0: 0xF952, //CJK COMPATIBILITY IDEOGRAPH - 0xD2F1: 0xF953, //CJK COMPATIBILITY IDEOGRAPH - 0xD2F2: 0xF954, //CJK COMPATIBILITY IDEOGRAPH - 0xD2F3: 0xF955, //CJK COMPATIBILITY IDEOGRAPH - 0xD2F4: 0xF956, //CJK COMPATIBILITY IDEOGRAPH - 0xD2F5: 0xF957, //CJK COMPATIBILITY IDEOGRAPH - 0xD2F6: 0x80FD, //CJK UNIFIED IDEOGRAPH - 0xD2F7: 0xF958, //CJK COMPATIBILITY IDEOGRAPH - 0xD2F8: 0xF959, //CJK COMPATIBILITY IDEOGRAPH - 0xD2F9: 0x5C3C, //CJK UNIFIED IDEOGRAPH - 0xD2FA: 0x6CE5, //CJK UNIFIED IDEOGRAPH - 0xD2FB: 0x533F, //CJK UNIFIED IDEOGRAPH - 0xD2FC: 0x6EBA, //CJK UNIFIED IDEOGRAPH - 0xD2FD: 0x591A, //CJK UNIFIED IDEOGRAPH - 0xD2FE: 0x8336, //CJK UNIFIED IDEOGRAPH - 0xD3A1: 0x4E39, //CJK UNIFIED IDEOGRAPH - 0xD3A2: 0x4EB6, //CJK UNIFIED IDEOGRAPH - 0xD3A3: 0x4F46, //CJK UNIFIED IDEOGRAPH - 0xD3A4: 0x55AE, //CJK UNIFIED IDEOGRAPH - 0xD3A5: 0x5718, //CJK UNIFIED IDEOGRAPH - 0xD3A6: 0x58C7, //CJK UNIFIED IDEOGRAPH - 0xD3A7: 0x5F56, //CJK UNIFIED IDEOGRAPH - 0xD3A8: 0x65B7, //CJK UNIFIED IDEOGRAPH - 0xD3A9: 0x65E6, //CJK UNIFIED IDEOGRAPH - 0xD3AA: 0x6A80, //CJK UNIFIED IDEOGRAPH - 0xD3AB: 0x6BB5, //CJK UNIFIED IDEOGRAPH - 0xD3AC: 0x6E4D, //CJK UNIFIED IDEOGRAPH - 0xD3AD: 0x77ED, //CJK UNIFIED IDEOGRAPH - 0xD3AE: 0x7AEF, //CJK UNIFIED IDEOGRAPH - 0xD3AF: 0x7C1E, //CJK UNIFIED IDEOGRAPH - 0xD3B0: 0x7DDE, //CJK UNIFIED IDEOGRAPH - 0xD3B1: 0x86CB, //CJK UNIFIED IDEOGRAPH - 0xD3B2: 0x8892, //CJK UNIFIED IDEOGRAPH - 0xD3B3: 0x9132, //CJK UNIFIED IDEOGRAPH - 0xD3B4: 0x935B, //CJK UNIFIED IDEOGRAPH - 0xD3B5: 0x64BB, //CJK UNIFIED IDEOGRAPH - 0xD3B6: 0x6FBE, //CJK UNIFIED IDEOGRAPH - 0xD3B7: 0x737A, //CJK UNIFIED IDEOGRAPH - 0xD3B8: 0x75B8, //CJK UNIFIED IDEOGRAPH - 0xD3B9: 0x9054, //CJK UNIFIED IDEOGRAPH - 0xD3BA: 0x5556, //CJK UNIFIED IDEOGRAPH - 0xD3BB: 0x574D, //CJK UNIFIED IDEOGRAPH - 0xD3BC: 0x61BA, //CJK UNIFIED IDEOGRAPH - 0xD3BD: 0x64D4, //CJK UNIFIED IDEOGRAPH - 0xD3BE: 0x66C7, //CJK UNIFIED IDEOGRAPH - 0xD3BF: 0x6DE1, //CJK UNIFIED IDEOGRAPH - 0xD3C0: 0x6E5B, //CJK UNIFIED IDEOGRAPH - 0xD3C1: 0x6F6D, //CJK UNIFIED IDEOGRAPH - 0xD3C2: 0x6FB9, //CJK UNIFIED IDEOGRAPH - 0xD3C3: 0x75F0, //CJK UNIFIED IDEOGRAPH - 0xD3C4: 0x8043, //CJK UNIFIED IDEOGRAPH - 0xD3C5: 0x81BD, //CJK UNIFIED IDEOGRAPH - 0xD3C6: 0x8541, //CJK UNIFIED IDEOGRAPH - 0xD3C7: 0x8983, //CJK UNIFIED IDEOGRAPH - 0xD3C8: 0x8AC7, //CJK UNIFIED IDEOGRAPH - 0xD3C9: 0x8B5A, //CJK UNIFIED IDEOGRAPH - 0xD3CA: 0x931F, //CJK UNIFIED IDEOGRAPH - 0xD3CB: 0x6C93, //CJK UNIFIED IDEOGRAPH - 0xD3CC: 0x7553, //CJK UNIFIED IDEOGRAPH - 0xD3CD: 0x7B54, //CJK UNIFIED IDEOGRAPH - 0xD3CE: 0x8E0F, //CJK UNIFIED IDEOGRAPH - 0xD3CF: 0x905D, //CJK UNIFIED IDEOGRAPH - 0xD3D0: 0x5510, //CJK UNIFIED IDEOGRAPH - 0xD3D1: 0x5802, //CJK UNIFIED IDEOGRAPH - 0xD3D2: 0x5858, //CJK UNIFIED IDEOGRAPH - 0xD3D3: 0x5E62, //CJK UNIFIED IDEOGRAPH - 0xD3D4: 0x6207, //CJK UNIFIED IDEOGRAPH - 0xD3D5: 0x649E, //CJK UNIFIED IDEOGRAPH - 0xD3D6: 0x68E0, //CJK UNIFIED IDEOGRAPH - 0xD3D7: 0x7576, //CJK UNIFIED IDEOGRAPH - 0xD3D8: 0x7CD6, //CJK UNIFIED IDEOGRAPH - 0xD3D9: 0x87B3, //CJK UNIFIED IDEOGRAPH - 0xD3DA: 0x9EE8, //CJK UNIFIED IDEOGRAPH - 0xD3DB: 0x4EE3, //CJK UNIFIED IDEOGRAPH - 0xD3DC: 0x5788, //CJK UNIFIED IDEOGRAPH - 0xD3DD: 0x576E, //CJK UNIFIED IDEOGRAPH - 0xD3DE: 0x5927, //CJK UNIFIED IDEOGRAPH - 0xD3DF: 0x5C0D, //CJK UNIFIED IDEOGRAPH - 0xD3E0: 0x5CB1, //CJK UNIFIED IDEOGRAPH - 0xD3E1: 0x5E36, //CJK UNIFIED IDEOGRAPH - 0xD3E2: 0x5F85, //CJK UNIFIED IDEOGRAPH - 0xD3E3: 0x6234, //CJK UNIFIED IDEOGRAPH - 0xD3E4: 0x64E1, //CJK UNIFIED IDEOGRAPH - 0xD3E5: 0x73B3, //CJK UNIFIED IDEOGRAPH - 0xD3E6: 0x81FA, //CJK UNIFIED IDEOGRAPH - 0xD3E7: 0x888B, //CJK UNIFIED IDEOGRAPH - 0xD3E8: 0x8CB8, //CJK UNIFIED IDEOGRAPH - 0xD3E9: 0x968A, //CJK UNIFIED IDEOGRAPH - 0xD3EA: 0x9EDB, //CJK UNIFIED IDEOGRAPH - 0xD3EB: 0x5B85, //CJK UNIFIED IDEOGRAPH - 0xD3EC: 0x5FB7, //CJK UNIFIED IDEOGRAPH - 0xD3ED: 0x60B3, //CJK UNIFIED IDEOGRAPH - 0xD3EE: 0x5012, //CJK UNIFIED IDEOGRAPH - 0xD3EF: 0x5200, //CJK UNIFIED IDEOGRAPH - 0xD3F0: 0x5230, //CJK UNIFIED IDEOGRAPH - 0xD3F1: 0x5716, //CJK UNIFIED IDEOGRAPH - 0xD3F2: 0x5835, //CJK UNIFIED IDEOGRAPH - 0xD3F3: 0x5857, //CJK UNIFIED IDEOGRAPH - 0xD3F4: 0x5C0E, //CJK UNIFIED IDEOGRAPH - 0xD3F5: 0x5C60, //CJK UNIFIED IDEOGRAPH - 0xD3F6: 0x5CF6, //CJK UNIFIED IDEOGRAPH - 0xD3F7: 0x5D8B, //CJK UNIFIED IDEOGRAPH - 0xD3F8: 0x5EA6, //CJK UNIFIED IDEOGRAPH - 0xD3F9: 0x5F92, //CJK UNIFIED IDEOGRAPH - 0xD3FA: 0x60BC, //CJK UNIFIED IDEOGRAPH - 0xD3FB: 0x6311, //CJK UNIFIED IDEOGRAPH - 0xD3FC: 0x6389, //CJK UNIFIED IDEOGRAPH - 0xD3FD: 0x6417, //CJK UNIFIED IDEOGRAPH - 0xD3FE: 0x6843, //CJK UNIFIED IDEOGRAPH - 0xD4A1: 0x68F9, //CJK UNIFIED IDEOGRAPH - 0xD4A2: 0x6AC2, //CJK UNIFIED IDEOGRAPH - 0xD4A3: 0x6DD8, //CJK UNIFIED IDEOGRAPH - 0xD4A4: 0x6E21, //CJK UNIFIED IDEOGRAPH - 0xD4A5: 0x6ED4, //CJK UNIFIED IDEOGRAPH - 0xD4A6: 0x6FE4, //CJK UNIFIED IDEOGRAPH - 0xD4A7: 0x71FE, //CJK UNIFIED IDEOGRAPH - 0xD4A8: 0x76DC, //CJK UNIFIED IDEOGRAPH - 0xD4A9: 0x7779, //CJK UNIFIED IDEOGRAPH - 0xD4AA: 0x79B1, //CJK UNIFIED IDEOGRAPH - 0xD4AB: 0x7A3B, //CJK UNIFIED IDEOGRAPH - 0xD4AC: 0x8404, //CJK UNIFIED IDEOGRAPH - 0xD4AD: 0x89A9, //CJK UNIFIED IDEOGRAPH - 0xD4AE: 0x8CED, //CJK UNIFIED IDEOGRAPH - 0xD4AF: 0x8DF3, //CJK UNIFIED IDEOGRAPH - 0xD4B0: 0x8E48, //CJK UNIFIED IDEOGRAPH - 0xD4B1: 0x9003, //CJK UNIFIED IDEOGRAPH - 0xD4B2: 0x9014, //CJK UNIFIED IDEOGRAPH - 0xD4B3: 0x9053, //CJK UNIFIED IDEOGRAPH - 0xD4B4: 0x90FD, //CJK UNIFIED IDEOGRAPH - 0xD4B5: 0x934D, //CJK UNIFIED IDEOGRAPH - 0xD4B6: 0x9676, //CJK UNIFIED IDEOGRAPH - 0xD4B7: 0x97DC, //CJK UNIFIED IDEOGRAPH - 0xD4B8: 0x6BD2, //CJK UNIFIED IDEOGRAPH - 0xD4B9: 0x7006, //CJK UNIFIED IDEOGRAPH - 0xD4BA: 0x7258, //CJK UNIFIED IDEOGRAPH - 0xD4BB: 0x72A2, //CJK UNIFIED IDEOGRAPH - 0xD4BC: 0x7368, //CJK UNIFIED IDEOGRAPH - 0xD4BD: 0x7763, //CJK UNIFIED IDEOGRAPH - 0xD4BE: 0x79BF, //CJK UNIFIED IDEOGRAPH - 0xD4BF: 0x7BE4, //CJK UNIFIED IDEOGRAPH - 0xD4C0: 0x7E9B, //CJK UNIFIED IDEOGRAPH - 0xD4C1: 0x8B80, //CJK UNIFIED IDEOGRAPH - 0xD4C2: 0x58A9, //CJK UNIFIED IDEOGRAPH - 0xD4C3: 0x60C7, //CJK UNIFIED IDEOGRAPH - 0xD4C4: 0x6566, //CJK UNIFIED IDEOGRAPH - 0xD4C5: 0x65FD, //CJK UNIFIED IDEOGRAPH - 0xD4C6: 0x66BE, //CJK UNIFIED IDEOGRAPH - 0xD4C7: 0x6C8C, //CJK UNIFIED IDEOGRAPH - 0xD4C8: 0x711E, //CJK UNIFIED IDEOGRAPH - 0xD4C9: 0x71C9, //CJK UNIFIED IDEOGRAPH - 0xD4CA: 0x8C5A, //CJK UNIFIED IDEOGRAPH - 0xD4CB: 0x9813, //CJK UNIFIED IDEOGRAPH - 0xD4CC: 0x4E6D, //CJK UNIFIED IDEOGRAPH - 0xD4CD: 0x7A81, //CJK UNIFIED IDEOGRAPH - 0xD4CE: 0x4EDD, //CJK UNIFIED IDEOGRAPH - 0xD4CF: 0x51AC, //CJK UNIFIED IDEOGRAPH - 0xD4D0: 0x51CD, //CJK UNIFIED IDEOGRAPH - 0xD4D1: 0x52D5, //CJK UNIFIED IDEOGRAPH - 0xD4D2: 0x540C, //CJK UNIFIED IDEOGRAPH - 0xD4D3: 0x61A7, //CJK UNIFIED IDEOGRAPH - 0xD4D4: 0x6771, //CJK UNIFIED IDEOGRAPH - 0xD4D5: 0x6850, //CJK UNIFIED IDEOGRAPH - 0xD4D6: 0x68DF, //CJK UNIFIED IDEOGRAPH - 0xD4D7: 0x6D1E, //CJK UNIFIED IDEOGRAPH - 0xD4D8: 0x6F7C, //CJK UNIFIED IDEOGRAPH - 0xD4D9: 0x75BC, //CJK UNIFIED IDEOGRAPH - 0xD4DA: 0x77B3, //CJK UNIFIED IDEOGRAPH - 0xD4DB: 0x7AE5, //CJK UNIFIED IDEOGRAPH - 0xD4DC: 0x80F4, //CJK UNIFIED IDEOGRAPH - 0xD4DD: 0x8463, //CJK UNIFIED IDEOGRAPH - 0xD4DE: 0x9285, //CJK UNIFIED IDEOGRAPH - 0xD4DF: 0x515C, //CJK UNIFIED IDEOGRAPH - 0xD4E0: 0x6597, //CJK UNIFIED IDEOGRAPH - 0xD4E1: 0x675C, //CJK UNIFIED IDEOGRAPH - 0xD4E2: 0x6793, //CJK UNIFIED IDEOGRAPH - 0xD4E3: 0x75D8, //CJK UNIFIED IDEOGRAPH - 0xD4E4: 0x7AC7, //CJK UNIFIED IDEOGRAPH - 0xD4E5: 0x8373, //CJK UNIFIED IDEOGRAPH - 0xD4E6: 0xF95A, //CJK COMPATIBILITY IDEOGRAPH - 0xD4E7: 0x8C46, //CJK UNIFIED IDEOGRAPH - 0xD4E8: 0x9017, //CJK UNIFIED IDEOGRAPH - 0xD4E9: 0x982D, //CJK UNIFIED IDEOGRAPH - 0xD4EA: 0x5C6F, //CJK UNIFIED IDEOGRAPH - 0xD4EB: 0x81C0, //CJK UNIFIED IDEOGRAPH - 0xD4EC: 0x829A, //CJK UNIFIED IDEOGRAPH - 0xD4ED: 0x9041, //CJK UNIFIED IDEOGRAPH - 0xD4EE: 0x906F, //CJK UNIFIED IDEOGRAPH - 0xD4EF: 0x920D, //CJK UNIFIED IDEOGRAPH - 0xD4F0: 0x5F97, //CJK UNIFIED IDEOGRAPH - 0xD4F1: 0x5D9D, //CJK UNIFIED IDEOGRAPH - 0xD4F2: 0x6A59, //CJK UNIFIED IDEOGRAPH - 0xD4F3: 0x71C8, //CJK UNIFIED IDEOGRAPH - 0xD4F4: 0x767B, //CJK UNIFIED IDEOGRAPH - 0xD4F5: 0x7B49, //CJK UNIFIED IDEOGRAPH - 0xD4F6: 0x85E4, //CJK UNIFIED IDEOGRAPH - 0xD4F7: 0x8B04, //CJK UNIFIED IDEOGRAPH - 0xD4F8: 0x9127, //CJK UNIFIED IDEOGRAPH - 0xD4F9: 0x9A30, //CJK UNIFIED IDEOGRAPH - 0xD4FA: 0x5587, //CJK UNIFIED IDEOGRAPH - 0xD4FB: 0x61F6, //CJK UNIFIED IDEOGRAPH - 0xD4FC: 0xF95B, //CJK COMPATIBILITY IDEOGRAPH - 0xD4FD: 0x7669, //CJK UNIFIED IDEOGRAPH - 0xD4FE: 0x7F85, //CJK UNIFIED IDEOGRAPH - 0xD5A1: 0x863F, //CJK UNIFIED IDEOGRAPH - 0xD5A2: 0x87BA, //CJK UNIFIED IDEOGRAPH - 0xD5A3: 0x88F8, //CJK UNIFIED IDEOGRAPH - 0xD5A4: 0x908F, //CJK UNIFIED IDEOGRAPH - 0xD5A5: 0xF95C, //CJK COMPATIBILITY IDEOGRAPH - 0xD5A6: 0x6D1B, //CJK UNIFIED IDEOGRAPH - 0xD5A7: 0x70D9, //CJK UNIFIED IDEOGRAPH - 0xD5A8: 0x73DE, //CJK UNIFIED IDEOGRAPH - 0xD5A9: 0x7D61, //CJK UNIFIED IDEOGRAPH - 0xD5AA: 0x843D, //CJK UNIFIED IDEOGRAPH - 0xD5AB: 0xF95D, //CJK COMPATIBILITY IDEOGRAPH - 0xD5AC: 0x916A, //CJK UNIFIED IDEOGRAPH - 0xD5AD: 0x99F1, //CJK UNIFIED IDEOGRAPH - 0xD5AE: 0xF95E, //CJK COMPATIBILITY IDEOGRAPH - 0xD5AF: 0x4E82, //CJK UNIFIED IDEOGRAPH - 0xD5B0: 0x5375, //CJK UNIFIED IDEOGRAPH - 0xD5B1: 0x6B04, //CJK UNIFIED IDEOGRAPH - 0xD5B2: 0x6B12, //CJK UNIFIED IDEOGRAPH - 0xD5B3: 0x703E, //CJK UNIFIED IDEOGRAPH - 0xD5B4: 0x721B, //CJK UNIFIED IDEOGRAPH - 0xD5B5: 0x862D, //CJK UNIFIED IDEOGRAPH - 0xD5B6: 0x9E1E, //CJK UNIFIED IDEOGRAPH - 0xD5B7: 0x524C, //CJK UNIFIED IDEOGRAPH - 0xD5B8: 0x8FA3, //CJK UNIFIED IDEOGRAPH - 0xD5B9: 0x5D50, //CJK UNIFIED IDEOGRAPH - 0xD5BA: 0x64E5, //CJK UNIFIED IDEOGRAPH - 0xD5BB: 0x652C, //CJK UNIFIED IDEOGRAPH - 0xD5BC: 0x6B16, //CJK UNIFIED IDEOGRAPH - 0xD5BD: 0x6FEB, //CJK UNIFIED IDEOGRAPH - 0xD5BE: 0x7C43, //CJK UNIFIED IDEOGRAPH - 0xD5BF: 0x7E9C, //CJK UNIFIED IDEOGRAPH - 0xD5C0: 0x85CD, //CJK UNIFIED IDEOGRAPH - 0xD5C1: 0x8964, //CJK UNIFIED IDEOGRAPH - 0xD5C2: 0x89BD, //CJK UNIFIED IDEOGRAPH - 0xD5C3: 0x62C9, //CJK UNIFIED IDEOGRAPH - 0xD5C4: 0x81D8, //CJK UNIFIED IDEOGRAPH - 0xD5C5: 0x881F, //CJK UNIFIED IDEOGRAPH - 0xD5C6: 0x5ECA, //CJK UNIFIED IDEOGRAPH - 0xD5C7: 0x6717, //CJK UNIFIED IDEOGRAPH - 0xD5C8: 0x6D6A, //CJK UNIFIED IDEOGRAPH - 0xD5C9: 0x72FC, //CJK UNIFIED IDEOGRAPH - 0xD5CA: 0x7405, //CJK UNIFIED IDEOGRAPH - 0xD5CB: 0x746F, //CJK UNIFIED IDEOGRAPH - 0xD5CC: 0x8782, //CJK UNIFIED IDEOGRAPH - 0xD5CD: 0x90DE, //CJK UNIFIED IDEOGRAPH - 0xD5CE: 0x4F86, //CJK UNIFIED IDEOGRAPH - 0xD5CF: 0x5D0D, //CJK UNIFIED IDEOGRAPH - 0xD5D0: 0x5FA0, //CJK UNIFIED IDEOGRAPH - 0xD5D1: 0x840A, //CJK UNIFIED IDEOGRAPH - 0xD5D2: 0x51B7, //CJK UNIFIED IDEOGRAPH - 0xD5D3: 0x63A0, //CJK UNIFIED IDEOGRAPH - 0xD5D4: 0x7565, //CJK UNIFIED IDEOGRAPH - 0xD5D5: 0x4EAE, //CJK UNIFIED IDEOGRAPH - 0xD5D6: 0x5006, //CJK UNIFIED IDEOGRAPH - 0xD5D7: 0x5169, //CJK UNIFIED IDEOGRAPH - 0xD5D8: 0x51C9, //CJK UNIFIED IDEOGRAPH - 0xD5D9: 0x6881, //CJK UNIFIED IDEOGRAPH - 0xD5DA: 0x6A11, //CJK UNIFIED IDEOGRAPH - 0xD5DB: 0x7CAE, //CJK UNIFIED IDEOGRAPH - 0xD5DC: 0x7CB1, //CJK UNIFIED IDEOGRAPH - 0xD5DD: 0x7CE7, //CJK UNIFIED IDEOGRAPH - 0xD5DE: 0x826F, //CJK UNIFIED IDEOGRAPH - 0xD5DF: 0x8AD2, //CJK UNIFIED IDEOGRAPH - 0xD5E0: 0x8F1B, //CJK UNIFIED IDEOGRAPH - 0xD5E1: 0x91CF, //CJK UNIFIED IDEOGRAPH - 0xD5E2: 0x4FB6, //CJK UNIFIED IDEOGRAPH - 0xD5E3: 0x5137, //CJK UNIFIED IDEOGRAPH - 0xD5E4: 0x52F5, //CJK UNIFIED IDEOGRAPH - 0xD5E5: 0x5442, //CJK UNIFIED IDEOGRAPH - 0xD5E6: 0x5EEC, //CJK UNIFIED IDEOGRAPH - 0xD5E7: 0x616E, //CJK UNIFIED IDEOGRAPH - 0xD5E8: 0x623E, //CJK UNIFIED IDEOGRAPH - 0xD5E9: 0x65C5, //CJK UNIFIED IDEOGRAPH - 0xD5EA: 0x6ADA, //CJK UNIFIED IDEOGRAPH - 0xD5EB: 0x6FFE, //CJK UNIFIED IDEOGRAPH - 0xD5EC: 0x792A, //CJK UNIFIED IDEOGRAPH - 0xD5ED: 0x85DC, //CJK UNIFIED IDEOGRAPH - 0xD5EE: 0x8823, //CJK UNIFIED IDEOGRAPH - 0xD5EF: 0x95AD, //CJK UNIFIED IDEOGRAPH - 0xD5F0: 0x9A62, //CJK UNIFIED IDEOGRAPH - 0xD5F1: 0x9A6A, //CJK UNIFIED IDEOGRAPH - 0xD5F2: 0x9E97, //CJK UNIFIED IDEOGRAPH - 0xD5F3: 0x9ECE, //CJK UNIFIED IDEOGRAPH - 0xD5F4: 0x529B, //CJK UNIFIED IDEOGRAPH - 0xD5F5: 0x66C6, //CJK UNIFIED IDEOGRAPH - 0xD5F6: 0x6B77, //CJK UNIFIED IDEOGRAPH - 0xD5F7: 0x701D, //CJK UNIFIED IDEOGRAPH - 0xD5F8: 0x792B, //CJK UNIFIED IDEOGRAPH - 0xD5F9: 0x8F62, //CJK UNIFIED IDEOGRAPH - 0xD5FA: 0x9742, //CJK UNIFIED IDEOGRAPH - 0xD5FB: 0x6190, //CJK UNIFIED IDEOGRAPH - 0xD5FC: 0x6200, //CJK UNIFIED IDEOGRAPH - 0xD5FD: 0x6523, //CJK UNIFIED IDEOGRAPH - 0xD5FE: 0x6F23, //CJK UNIFIED IDEOGRAPH - 0xD6A1: 0x7149, //CJK UNIFIED IDEOGRAPH - 0xD6A2: 0x7489, //CJK UNIFIED IDEOGRAPH - 0xD6A3: 0x7DF4, //CJK UNIFIED IDEOGRAPH - 0xD6A4: 0x806F, //CJK UNIFIED IDEOGRAPH - 0xD6A5: 0x84EE, //CJK UNIFIED IDEOGRAPH - 0xD6A6: 0x8F26, //CJK UNIFIED IDEOGRAPH - 0xD6A7: 0x9023, //CJK UNIFIED IDEOGRAPH - 0xD6A8: 0x934A, //CJK UNIFIED IDEOGRAPH - 0xD6A9: 0x51BD, //CJK UNIFIED IDEOGRAPH - 0xD6AA: 0x5217, //CJK UNIFIED IDEOGRAPH - 0xD6AB: 0x52A3, //CJK UNIFIED IDEOGRAPH - 0xD6AC: 0x6D0C, //CJK UNIFIED IDEOGRAPH - 0xD6AD: 0x70C8, //CJK UNIFIED IDEOGRAPH - 0xD6AE: 0x88C2, //CJK UNIFIED IDEOGRAPH - 0xD6AF: 0x5EC9, //CJK UNIFIED IDEOGRAPH - 0xD6B0: 0x6582, //CJK UNIFIED IDEOGRAPH - 0xD6B1: 0x6BAE, //CJK UNIFIED IDEOGRAPH - 0xD6B2: 0x6FC2, //CJK UNIFIED IDEOGRAPH - 0xD6B3: 0x7C3E, //CJK UNIFIED IDEOGRAPH - 0xD6B4: 0x7375, //CJK UNIFIED IDEOGRAPH - 0xD6B5: 0x4EE4, //CJK UNIFIED IDEOGRAPH - 0xD6B6: 0x4F36, //CJK UNIFIED IDEOGRAPH - 0xD6B7: 0x56F9, //CJK UNIFIED IDEOGRAPH - 0xD6B8: 0xF95F, //CJK COMPATIBILITY IDEOGRAPH - 0xD6B9: 0x5CBA, //CJK UNIFIED IDEOGRAPH - 0xD6BA: 0x5DBA, //CJK UNIFIED IDEOGRAPH - 0xD6BB: 0x601C, //CJK UNIFIED IDEOGRAPH - 0xD6BC: 0x73B2, //CJK UNIFIED IDEOGRAPH - 0xD6BD: 0x7B2D, //CJK UNIFIED IDEOGRAPH - 0xD6BE: 0x7F9A, //CJK UNIFIED IDEOGRAPH - 0xD6BF: 0x7FCE, //CJK UNIFIED IDEOGRAPH - 0xD6C0: 0x8046, //CJK UNIFIED IDEOGRAPH - 0xD6C1: 0x901E, //CJK UNIFIED IDEOGRAPH - 0xD6C2: 0x9234, //CJK UNIFIED IDEOGRAPH - 0xD6C3: 0x96F6, //CJK UNIFIED IDEOGRAPH - 0xD6C4: 0x9748, //CJK UNIFIED IDEOGRAPH - 0xD6C5: 0x9818, //CJK UNIFIED IDEOGRAPH - 0xD6C6: 0x9F61, //CJK UNIFIED IDEOGRAPH - 0xD6C7: 0x4F8B, //CJK UNIFIED IDEOGRAPH - 0xD6C8: 0x6FA7, //CJK UNIFIED IDEOGRAPH - 0xD6C9: 0x79AE, //CJK UNIFIED IDEOGRAPH - 0xD6CA: 0x91B4, //CJK UNIFIED IDEOGRAPH - 0xD6CB: 0x96B7, //CJK UNIFIED IDEOGRAPH - 0xD6CC: 0x52DE, //CJK UNIFIED IDEOGRAPH - 0xD6CD: 0xF960, //CJK COMPATIBILITY IDEOGRAPH - 0xD6CE: 0x6488, //CJK UNIFIED IDEOGRAPH - 0xD6CF: 0x64C4, //CJK UNIFIED IDEOGRAPH - 0xD6D0: 0x6AD3, //CJK UNIFIED IDEOGRAPH - 0xD6D1: 0x6F5E, //CJK UNIFIED IDEOGRAPH - 0xD6D2: 0x7018, //CJK UNIFIED IDEOGRAPH - 0xD6D3: 0x7210, //CJK UNIFIED IDEOGRAPH - 0xD6D4: 0x76E7, //CJK UNIFIED IDEOGRAPH - 0xD6D5: 0x8001, //CJK UNIFIED IDEOGRAPH - 0xD6D6: 0x8606, //CJK UNIFIED IDEOGRAPH - 0xD6D7: 0x865C, //CJK UNIFIED IDEOGRAPH - 0xD6D8: 0x8DEF, //CJK UNIFIED IDEOGRAPH - 0xD6D9: 0x8F05, //CJK UNIFIED IDEOGRAPH - 0xD6DA: 0x9732, //CJK UNIFIED IDEOGRAPH - 0xD6DB: 0x9B6F, //CJK UNIFIED IDEOGRAPH - 0xD6DC: 0x9DFA, //CJK UNIFIED IDEOGRAPH - 0xD6DD: 0x9E75, //CJK UNIFIED IDEOGRAPH - 0xD6DE: 0x788C, //CJK UNIFIED IDEOGRAPH - 0xD6DF: 0x797F, //CJK UNIFIED IDEOGRAPH - 0xD6E0: 0x7DA0, //CJK UNIFIED IDEOGRAPH - 0xD6E1: 0x83C9, //CJK UNIFIED IDEOGRAPH - 0xD6E2: 0x9304, //CJK UNIFIED IDEOGRAPH - 0xD6E3: 0x9E7F, //CJK UNIFIED IDEOGRAPH - 0xD6E4: 0x9E93, //CJK UNIFIED IDEOGRAPH - 0xD6E5: 0x8AD6, //CJK UNIFIED IDEOGRAPH - 0xD6E6: 0x58DF, //CJK UNIFIED IDEOGRAPH - 0xD6E7: 0x5F04, //CJK UNIFIED IDEOGRAPH - 0xD6E8: 0x6727, //CJK UNIFIED IDEOGRAPH - 0xD6E9: 0x7027, //CJK UNIFIED IDEOGRAPH - 0xD6EA: 0x74CF, //CJK UNIFIED IDEOGRAPH - 0xD6EB: 0x7C60, //CJK UNIFIED IDEOGRAPH - 0xD6EC: 0x807E, //CJK UNIFIED IDEOGRAPH - 0xD6ED: 0x5121, //CJK UNIFIED IDEOGRAPH - 0xD6EE: 0x7028, //CJK UNIFIED IDEOGRAPH - 0xD6EF: 0x7262, //CJK UNIFIED IDEOGRAPH - 0xD6F0: 0x78CA, //CJK UNIFIED IDEOGRAPH - 0xD6F1: 0x8CC2, //CJK UNIFIED IDEOGRAPH - 0xD6F2: 0x8CDA, //CJK UNIFIED IDEOGRAPH - 0xD6F3: 0x8CF4, //CJK UNIFIED IDEOGRAPH - 0xD6F4: 0x96F7, //CJK UNIFIED IDEOGRAPH - 0xD6F5: 0x4E86, //CJK UNIFIED IDEOGRAPH - 0xD6F6: 0x50DA, //CJK UNIFIED IDEOGRAPH - 0xD6F7: 0x5BEE, //CJK UNIFIED IDEOGRAPH - 0xD6F8: 0x5ED6, //CJK UNIFIED IDEOGRAPH - 0xD6F9: 0x6599, //CJK UNIFIED IDEOGRAPH - 0xD6FA: 0x71CE, //CJK UNIFIED IDEOGRAPH - 0xD6FB: 0x7642, //CJK UNIFIED IDEOGRAPH - 0xD6FC: 0x77AD, //CJK UNIFIED IDEOGRAPH - 0xD6FD: 0x804A, //CJK UNIFIED IDEOGRAPH - 0xD6FE: 0x84FC, //CJK UNIFIED IDEOGRAPH - 0xD7A1: 0x907C, //CJK UNIFIED IDEOGRAPH - 0xD7A2: 0x9B27, //CJK UNIFIED IDEOGRAPH - 0xD7A3: 0x9F8D, //CJK UNIFIED IDEOGRAPH - 0xD7A4: 0x58D8, //CJK UNIFIED IDEOGRAPH - 0xD7A5: 0x5A41, //CJK UNIFIED IDEOGRAPH - 0xD7A6: 0x5C62, //CJK UNIFIED IDEOGRAPH - 0xD7A7: 0x6A13, //CJK UNIFIED IDEOGRAPH - 0xD7A8: 0x6DDA, //CJK UNIFIED IDEOGRAPH - 0xD7A9: 0x6F0F, //CJK UNIFIED IDEOGRAPH - 0xD7AA: 0x763B, //CJK UNIFIED IDEOGRAPH - 0xD7AB: 0x7D2F, //CJK UNIFIED IDEOGRAPH - 0xD7AC: 0x7E37, //CJK UNIFIED IDEOGRAPH - 0xD7AD: 0x851E, //CJK UNIFIED IDEOGRAPH - 0xD7AE: 0x8938, //CJK UNIFIED IDEOGRAPH - 0xD7AF: 0x93E4, //CJK UNIFIED IDEOGRAPH - 0xD7B0: 0x964B, //CJK UNIFIED IDEOGRAPH - 0xD7B1: 0x5289, //CJK UNIFIED IDEOGRAPH - 0xD7B2: 0x65D2, //CJK UNIFIED IDEOGRAPH - 0xD7B3: 0x67F3, //CJK UNIFIED IDEOGRAPH - 0xD7B4: 0x69B4, //CJK UNIFIED IDEOGRAPH - 0xD7B5: 0x6D41, //CJK UNIFIED IDEOGRAPH - 0xD7B6: 0x6E9C, //CJK UNIFIED IDEOGRAPH - 0xD7B7: 0x700F, //CJK UNIFIED IDEOGRAPH - 0xD7B8: 0x7409, //CJK UNIFIED IDEOGRAPH - 0xD7B9: 0x7460, //CJK UNIFIED IDEOGRAPH - 0xD7BA: 0x7559, //CJK UNIFIED IDEOGRAPH - 0xD7BB: 0x7624, //CJK UNIFIED IDEOGRAPH - 0xD7BC: 0x786B, //CJK UNIFIED IDEOGRAPH - 0xD7BD: 0x8B2C, //CJK UNIFIED IDEOGRAPH - 0xD7BE: 0x985E, //CJK UNIFIED IDEOGRAPH - 0xD7BF: 0x516D, //CJK UNIFIED IDEOGRAPH - 0xD7C0: 0x622E, //CJK UNIFIED IDEOGRAPH - 0xD7C1: 0x9678, //CJK UNIFIED IDEOGRAPH - 0xD7C2: 0x4F96, //CJK UNIFIED IDEOGRAPH - 0xD7C3: 0x502B, //CJK UNIFIED IDEOGRAPH - 0xD7C4: 0x5D19, //CJK UNIFIED IDEOGRAPH - 0xD7C5: 0x6DEA, //CJK UNIFIED IDEOGRAPH - 0xD7C6: 0x7DB8, //CJK UNIFIED IDEOGRAPH - 0xD7C7: 0x8F2A, //CJK UNIFIED IDEOGRAPH - 0xD7C8: 0x5F8B, //CJK UNIFIED IDEOGRAPH - 0xD7C9: 0x6144, //CJK UNIFIED IDEOGRAPH - 0xD7CA: 0x6817, //CJK UNIFIED IDEOGRAPH - 0xD7CB: 0xF961, //CJK COMPATIBILITY IDEOGRAPH - 0xD7CC: 0x9686, //CJK UNIFIED IDEOGRAPH - 0xD7CD: 0x52D2, //CJK UNIFIED IDEOGRAPH - 0xD7CE: 0x808B, //CJK UNIFIED IDEOGRAPH - 0xD7CF: 0x51DC, //CJK UNIFIED IDEOGRAPH - 0xD7D0: 0x51CC, //CJK UNIFIED IDEOGRAPH - 0xD7D1: 0x695E, //CJK UNIFIED IDEOGRAPH - 0xD7D2: 0x7A1C, //CJK UNIFIED IDEOGRAPH - 0xD7D3: 0x7DBE, //CJK UNIFIED IDEOGRAPH - 0xD7D4: 0x83F1, //CJK UNIFIED IDEOGRAPH - 0xD7D5: 0x9675, //CJK UNIFIED IDEOGRAPH - 0xD7D6: 0x4FDA, //CJK UNIFIED IDEOGRAPH - 0xD7D7: 0x5229, //CJK UNIFIED IDEOGRAPH - 0xD7D8: 0x5398, //CJK UNIFIED IDEOGRAPH - 0xD7D9: 0x540F, //CJK UNIFIED IDEOGRAPH - 0xD7DA: 0x550E, //CJK UNIFIED IDEOGRAPH - 0xD7DB: 0x5C65, //CJK UNIFIED IDEOGRAPH - 0xD7DC: 0x60A7, //CJK UNIFIED IDEOGRAPH - 0xD7DD: 0x674E, //CJK UNIFIED IDEOGRAPH - 0xD7DE: 0x68A8, //CJK UNIFIED IDEOGRAPH - 0xD7DF: 0x6D6C, //CJK UNIFIED IDEOGRAPH - 0xD7E0: 0x7281, //CJK UNIFIED IDEOGRAPH - 0xD7E1: 0x72F8, //CJK UNIFIED IDEOGRAPH - 0xD7E2: 0x7406, //CJK UNIFIED IDEOGRAPH - 0xD7E3: 0x7483, //CJK UNIFIED IDEOGRAPH - 0xD7E4: 0xF962, //CJK COMPATIBILITY IDEOGRAPH - 0xD7E5: 0x75E2, //CJK UNIFIED IDEOGRAPH - 0xD7E6: 0x7C6C, //CJK UNIFIED IDEOGRAPH - 0xD7E7: 0x7F79, //CJK UNIFIED IDEOGRAPH - 0xD7E8: 0x7FB8, //CJK UNIFIED IDEOGRAPH - 0xD7E9: 0x8389, //CJK UNIFIED IDEOGRAPH - 0xD7EA: 0x88CF, //CJK UNIFIED IDEOGRAPH - 0xD7EB: 0x88E1, //CJK UNIFIED IDEOGRAPH - 0xD7EC: 0x91CC, //CJK UNIFIED IDEOGRAPH - 0xD7ED: 0x91D0, //CJK UNIFIED IDEOGRAPH - 0xD7EE: 0x96E2, //CJK UNIFIED IDEOGRAPH - 0xD7EF: 0x9BC9, //CJK UNIFIED IDEOGRAPH - 0xD7F0: 0x541D, //CJK UNIFIED IDEOGRAPH - 0xD7F1: 0x6F7E, //CJK UNIFIED IDEOGRAPH - 0xD7F2: 0x71D0, //CJK UNIFIED IDEOGRAPH - 0xD7F3: 0x7498, //CJK UNIFIED IDEOGRAPH - 0xD7F4: 0x85FA, //CJK UNIFIED IDEOGRAPH - 0xD7F5: 0x8EAA, //CJK UNIFIED IDEOGRAPH - 0xD7F6: 0x96A3, //CJK UNIFIED IDEOGRAPH - 0xD7F7: 0x9C57, //CJK UNIFIED IDEOGRAPH - 0xD7F8: 0x9E9F, //CJK UNIFIED IDEOGRAPH - 0xD7F9: 0x6797, //CJK UNIFIED IDEOGRAPH - 0xD7FA: 0x6DCB, //CJK UNIFIED IDEOGRAPH - 0xD7FB: 0x7433, //CJK UNIFIED IDEOGRAPH - 0xD7FC: 0x81E8, //CJK UNIFIED IDEOGRAPH - 0xD7FD: 0x9716, //CJK UNIFIED IDEOGRAPH - 0xD7FE: 0x782C, //CJK UNIFIED IDEOGRAPH - 0xD8A1: 0x7ACB, //CJK UNIFIED IDEOGRAPH - 0xD8A2: 0x7B20, //CJK UNIFIED IDEOGRAPH - 0xD8A3: 0x7C92, //CJK UNIFIED IDEOGRAPH - 0xD8A4: 0x6469, //CJK UNIFIED IDEOGRAPH - 0xD8A5: 0x746A, //CJK UNIFIED IDEOGRAPH - 0xD8A6: 0x75F2, //CJK UNIFIED IDEOGRAPH - 0xD8A7: 0x78BC, //CJK UNIFIED IDEOGRAPH - 0xD8A8: 0x78E8, //CJK UNIFIED IDEOGRAPH - 0xD8A9: 0x99AC, //CJK UNIFIED IDEOGRAPH - 0xD8AA: 0x9B54, //CJK UNIFIED IDEOGRAPH - 0xD8AB: 0x9EBB, //CJK UNIFIED IDEOGRAPH - 0xD8AC: 0x5BDE, //CJK UNIFIED IDEOGRAPH - 0xD8AD: 0x5E55, //CJK UNIFIED IDEOGRAPH - 0xD8AE: 0x6F20, //CJK UNIFIED IDEOGRAPH - 0xD8AF: 0x819C, //CJK UNIFIED IDEOGRAPH - 0xD8B0: 0x83AB, //CJK UNIFIED IDEOGRAPH - 0xD8B1: 0x9088, //CJK UNIFIED IDEOGRAPH - 0xD8B2: 0x4E07, //CJK UNIFIED IDEOGRAPH - 0xD8B3: 0x534D, //CJK UNIFIED IDEOGRAPH - 0xD8B4: 0x5A29, //CJK UNIFIED IDEOGRAPH - 0xD8B5: 0x5DD2, //CJK UNIFIED IDEOGRAPH - 0xD8B6: 0x5F4E, //CJK UNIFIED IDEOGRAPH - 0xD8B7: 0x6162, //CJK UNIFIED IDEOGRAPH - 0xD8B8: 0x633D, //CJK UNIFIED IDEOGRAPH - 0xD8B9: 0x6669, //CJK UNIFIED IDEOGRAPH - 0xD8BA: 0x66FC, //CJK UNIFIED IDEOGRAPH - 0xD8BB: 0x6EFF, //CJK UNIFIED IDEOGRAPH - 0xD8BC: 0x6F2B, //CJK UNIFIED IDEOGRAPH - 0xD8BD: 0x7063, //CJK UNIFIED IDEOGRAPH - 0xD8BE: 0x779E, //CJK UNIFIED IDEOGRAPH - 0xD8BF: 0x842C, //CJK UNIFIED IDEOGRAPH - 0xD8C0: 0x8513, //CJK UNIFIED IDEOGRAPH - 0xD8C1: 0x883B, //CJK UNIFIED IDEOGRAPH - 0xD8C2: 0x8F13, //CJK UNIFIED IDEOGRAPH - 0xD8C3: 0x9945, //CJK UNIFIED IDEOGRAPH - 0xD8C4: 0x9C3B, //CJK UNIFIED IDEOGRAPH - 0xD8C5: 0x551C, //CJK UNIFIED IDEOGRAPH - 0xD8C6: 0x62B9, //CJK UNIFIED IDEOGRAPH - 0xD8C7: 0x672B, //CJK UNIFIED IDEOGRAPH - 0xD8C8: 0x6CAB, //CJK UNIFIED IDEOGRAPH - 0xD8C9: 0x8309, //CJK UNIFIED IDEOGRAPH - 0xD8CA: 0x896A, //CJK UNIFIED IDEOGRAPH - 0xD8CB: 0x977A, //CJK UNIFIED IDEOGRAPH - 0xD8CC: 0x4EA1, //CJK UNIFIED IDEOGRAPH - 0xD8CD: 0x5984, //CJK UNIFIED IDEOGRAPH - 0xD8CE: 0x5FD8, //CJK UNIFIED IDEOGRAPH - 0xD8CF: 0x5FD9, //CJK UNIFIED IDEOGRAPH - 0xD8D0: 0x671B, //CJK UNIFIED IDEOGRAPH - 0xD8D1: 0x7DB2, //CJK UNIFIED IDEOGRAPH - 0xD8D2: 0x7F54, //CJK UNIFIED IDEOGRAPH - 0xD8D3: 0x8292, //CJK UNIFIED IDEOGRAPH - 0xD8D4: 0x832B, //CJK UNIFIED IDEOGRAPH - 0xD8D5: 0x83BD, //CJK UNIFIED IDEOGRAPH - 0xD8D6: 0x8F1E, //CJK UNIFIED IDEOGRAPH - 0xD8D7: 0x9099, //CJK UNIFIED IDEOGRAPH - 0xD8D8: 0x57CB, //CJK UNIFIED IDEOGRAPH - 0xD8D9: 0x59B9, //CJK UNIFIED IDEOGRAPH - 0xD8DA: 0x5A92, //CJK UNIFIED IDEOGRAPH - 0xD8DB: 0x5BD0, //CJK UNIFIED IDEOGRAPH - 0xD8DC: 0x6627, //CJK UNIFIED IDEOGRAPH - 0xD8DD: 0x679A, //CJK UNIFIED IDEOGRAPH - 0xD8DE: 0x6885, //CJK UNIFIED IDEOGRAPH - 0xD8DF: 0x6BCF, //CJK UNIFIED IDEOGRAPH - 0xD8E0: 0x7164, //CJK UNIFIED IDEOGRAPH - 0xD8E1: 0x7F75, //CJK UNIFIED IDEOGRAPH - 0xD8E2: 0x8CB7, //CJK UNIFIED IDEOGRAPH - 0xD8E3: 0x8CE3, //CJK UNIFIED IDEOGRAPH - 0xD8E4: 0x9081, //CJK UNIFIED IDEOGRAPH - 0xD8E5: 0x9B45, //CJK UNIFIED IDEOGRAPH - 0xD8E6: 0x8108, //CJK UNIFIED IDEOGRAPH - 0xD8E7: 0x8C8A, //CJK UNIFIED IDEOGRAPH - 0xD8E8: 0x964C, //CJK UNIFIED IDEOGRAPH - 0xD8E9: 0x9A40, //CJK UNIFIED IDEOGRAPH - 0xD8EA: 0x9EA5, //CJK UNIFIED IDEOGRAPH - 0xD8EB: 0x5B5F, //CJK UNIFIED IDEOGRAPH - 0xD8EC: 0x6C13, //CJK UNIFIED IDEOGRAPH - 0xD8ED: 0x731B, //CJK UNIFIED IDEOGRAPH - 0xD8EE: 0x76F2, //CJK UNIFIED IDEOGRAPH - 0xD8EF: 0x76DF, //CJK UNIFIED IDEOGRAPH - 0xD8F0: 0x840C, //CJK UNIFIED IDEOGRAPH - 0xD8F1: 0x51AA, //CJK UNIFIED IDEOGRAPH - 0xD8F2: 0x8993, //CJK UNIFIED IDEOGRAPH - 0xD8F3: 0x514D, //CJK UNIFIED IDEOGRAPH - 0xD8F4: 0x5195, //CJK UNIFIED IDEOGRAPH - 0xD8F5: 0x52C9, //CJK UNIFIED IDEOGRAPH - 0xD8F6: 0x68C9, //CJK UNIFIED IDEOGRAPH - 0xD8F7: 0x6C94, //CJK UNIFIED IDEOGRAPH - 0xD8F8: 0x7704, //CJK UNIFIED IDEOGRAPH - 0xD8F9: 0x7720, //CJK UNIFIED IDEOGRAPH - 0xD8FA: 0x7DBF, //CJK UNIFIED IDEOGRAPH - 0xD8FB: 0x7DEC, //CJK UNIFIED IDEOGRAPH - 0xD8FC: 0x9762, //CJK UNIFIED IDEOGRAPH - 0xD8FD: 0x9EB5, //CJK UNIFIED IDEOGRAPH - 0xD8FE: 0x6EC5, //CJK UNIFIED IDEOGRAPH - 0xD9A1: 0x8511, //CJK UNIFIED IDEOGRAPH - 0xD9A2: 0x51A5, //CJK UNIFIED IDEOGRAPH - 0xD9A3: 0x540D, //CJK UNIFIED IDEOGRAPH - 0xD9A4: 0x547D, //CJK UNIFIED IDEOGRAPH - 0xD9A5: 0x660E, //CJK UNIFIED IDEOGRAPH - 0xD9A6: 0x669D, //CJK UNIFIED IDEOGRAPH - 0xD9A7: 0x6927, //CJK UNIFIED IDEOGRAPH - 0xD9A8: 0x6E9F, //CJK UNIFIED IDEOGRAPH - 0xD9A9: 0x76BF, //CJK UNIFIED IDEOGRAPH - 0xD9AA: 0x7791, //CJK UNIFIED IDEOGRAPH - 0xD9AB: 0x8317, //CJK UNIFIED IDEOGRAPH - 0xD9AC: 0x84C2, //CJK UNIFIED IDEOGRAPH - 0xD9AD: 0x879F, //CJK UNIFIED IDEOGRAPH - 0xD9AE: 0x9169, //CJK UNIFIED IDEOGRAPH - 0xD9AF: 0x9298, //CJK UNIFIED IDEOGRAPH - 0xD9B0: 0x9CF4, //CJK UNIFIED IDEOGRAPH - 0xD9B1: 0x8882, //CJK UNIFIED IDEOGRAPH - 0xD9B2: 0x4FAE, //CJK UNIFIED IDEOGRAPH - 0xD9B3: 0x5192, //CJK UNIFIED IDEOGRAPH - 0xD9B4: 0x52DF, //CJK UNIFIED IDEOGRAPH - 0xD9B5: 0x59C6, //CJK UNIFIED IDEOGRAPH - 0xD9B6: 0x5E3D, //CJK UNIFIED IDEOGRAPH - 0xD9B7: 0x6155, //CJK UNIFIED IDEOGRAPH - 0xD9B8: 0x6478, //CJK UNIFIED IDEOGRAPH - 0xD9B9: 0x6479, //CJK UNIFIED IDEOGRAPH - 0xD9BA: 0x66AE, //CJK UNIFIED IDEOGRAPH - 0xD9BB: 0x67D0, //CJK UNIFIED IDEOGRAPH - 0xD9BC: 0x6A21, //CJK UNIFIED IDEOGRAPH - 0xD9BD: 0x6BCD, //CJK UNIFIED IDEOGRAPH - 0xD9BE: 0x6BDB, //CJK UNIFIED IDEOGRAPH - 0xD9BF: 0x725F, //CJK UNIFIED IDEOGRAPH - 0xD9C0: 0x7261, //CJK UNIFIED IDEOGRAPH - 0xD9C1: 0x7441, //CJK UNIFIED IDEOGRAPH - 0xD9C2: 0x7738, //CJK UNIFIED IDEOGRAPH - 0xD9C3: 0x77DB, //CJK UNIFIED IDEOGRAPH - 0xD9C4: 0x8017, //CJK UNIFIED IDEOGRAPH - 0xD9C5: 0x82BC, //CJK UNIFIED IDEOGRAPH - 0xD9C6: 0x8305, //CJK UNIFIED IDEOGRAPH - 0xD9C7: 0x8B00, //CJK UNIFIED IDEOGRAPH - 0xD9C8: 0x8B28, //CJK UNIFIED IDEOGRAPH - 0xD9C9: 0x8C8C, //CJK UNIFIED IDEOGRAPH - 0xD9CA: 0x6728, //CJK UNIFIED IDEOGRAPH - 0xD9CB: 0x6C90, //CJK UNIFIED IDEOGRAPH - 0xD9CC: 0x7267, //CJK UNIFIED IDEOGRAPH - 0xD9CD: 0x76EE, //CJK UNIFIED IDEOGRAPH - 0xD9CE: 0x7766, //CJK UNIFIED IDEOGRAPH - 0xD9CF: 0x7A46, //CJK UNIFIED IDEOGRAPH - 0xD9D0: 0x9DA9, //CJK UNIFIED IDEOGRAPH - 0xD9D1: 0x6B7F, //CJK UNIFIED IDEOGRAPH - 0xD9D2: 0x6C92, //CJK UNIFIED IDEOGRAPH - 0xD9D3: 0x5922, //CJK UNIFIED IDEOGRAPH - 0xD9D4: 0x6726, //CJK UNIFIED IDEOGRAPH - 0xD9D5: 0x8499, //CJK UNIFIED IDEOGRAPH - 0xD9D6: 0x536F, //CJK UNIFIED IDEOGRAPH - 0xD9D7: 0x5893, //CJK UNIFIED IDEOGRAPH - 0xD9D8: 0x5999, //CJK UNIFIED IDEOGRAPH - 0xD9D9: 0x5EDF, //CJK UNIFIED IDEOGRAPH - 0xD9DA: 0x63CF, //CJK UNIFIED IDEOGRAPH - 0xD9DB: 0x6634, //CJK UNIFIED IDEOGRAPH - 0xD9DC: 0x6773, //CJK UNIFIED IDEOGRAPH - 0xD9DD: 0x6E3A, //CJK UNIFIED IDEOGRAPH - 0xD9DE: 0x732B, //CJK UNIFIED IDEOGRAPH - 0xD9DF: 0x7AD7, //CJK UNIFIED IDEOGRAPH - 0xD9E0: 0x82D7, //CJK UNIFIED IDEOGRAPH - 0xD9E1: 0x9328, //CJK UNIFIED IDEOGRAPH - 0xD9E2: 0x52D9, //CJK UNIFIED IDEOGRAPH - 0xD9E3: 0x5DEB, //CJK UNIFIED IDEOGRAPH - 0xD9E4: 0x61AE, //CJK UNIFIED IDEOGRAPH - 0xD9E5: 0x61CB, //CJK UNIFIED IDEOGRAPH - 0xD9E6: 0x620A, //CJK UNIFIED IDEOGRAPH - 0xD9E7: 0x62C7, //CJK UNIFIED IDEOGRAPH - 0xD9E8: 0x64AB, //CJK UNIFIED IDEOGRAPH - 0xD9E9: 0x65E0, //CJK UNIFIED IDEOGRAPH - 0xD9EA: 0x6959, //CJK UNIFIED IDEOGRAPH - 0xD9EB: 0x6B66, //CJK UNIFIED IDEOGRAPH - 0xD9EC: 0x6BCB, //CJK UNIFIED IDEOGRAPH - 0xD9ED: 0x7121, //CJK UNIFIED IDEOGRAPH - 0xD9EE: 0x73F7, //CJK UNIFIED IDEOGRAPH - 0xD9EF: 0x755D, //CJK UNIFIED IDEOGRAPH - 0xD9F0: 0x7E46, //CJK UNIFIED IDEOGRAPH - 0xD9F1: 0x821E, //CJK UNIFIED IDEOGRAPH - 0xD9F2: 0x8302, //CJK UNIFIED IDEOGRAPH - 0xD9F3: 0x856A, //CJK UNIFIED IDEOGRAPH - 0xD9F4: 0x8AA3, //CJK UNIFIED IDEOGRAPH - 0xD9F5: 0x8CBF, //CJK UNIFIED IDEOGRAPH - 0xD9F6: 0x9727, //CJK UNIFIED IDEOGRAPH - 0xD9F7: 0x9D61, //CJK UNIFIED IDEOGRAPH - 0xD9F8: 0x58A8, //CJK UNIFIED IDEOGRAPH - 0xD9F9: 0x9ED8, //CJK UNIFIED IDEOGRAPH - 0xD9FA: 0x5011, //CJK UNIFIED IDEOGRAPH - 0xD9FB: 0x520E, //CJK UNIFIED IDEOGRAPH - 0xD9FC: 0x543B, //CJK UNIFIED IDEOGRAPH - 0xD9FD: 0x554F, //CJK UNIFIED IDEOGRAPH - 0xD9FE: 0x6587, //CJK UNIFIED IDEOGRAPH - 0xDAA1: 0x6C76, //CJK UNIFIED IDEOGRAPH - 0xDAA2: 0x7D0A, //CJK UNIFIED IDEOGRAPH - 0xDAA3: 0x7D0B, //CJK UNIFIED IDEOGRAPH - 0xDAA4: 0x805E, //CJK UNIFIED IDEOGRAPH - 0xDAA5: 0x868A, //CJK UNIFIED IDEOGRAPH - 0xDAA6: 0x9580, //CJK UNIFIED IDEOGRAPH - 0xDAA7: 0x96EF, //CJK UNIFIED IDEOGRAPH - 0xDAA8: 0x52FF, //CJK UNIFIED IDEOGRAPH - 0xDAA9: 0x6C95, //CJK UNIFIED IDEOGRAPH - 0xDAAA: 0x7269, //CJK UNIFIED IDEOGRAPH - 0xDAAB: 0x5473, //CJK UNIFIED IDEOGRAPH - 0xDAAC: 0x5A9A, //CJK UNIFIED IDEOGRAPH - 0xDAAD: 0x5C3E, //CJK UNIFIED IDEOGRAPH - 0xDAAE: 0x5D4B, //CJK UNIFIED IDEOGRAPH - 0xDAAF: 0x5F4C, //CJK UNIFIED IDEOGRAPH - 0xDAB0: 0x5FAE, //CJK UNIFIED IDEOGRAPH - 0xDAB1: 0x672A, //CJK UNIFIED IDEOGRAPH - 0xDAB2: 0x68B6, //CJK UNIFIED IDEOGRAPH - 0xDAB3: 0x6963, //CJK UNIFIED IDEOGRAPH - 0xDAB4: 0x6E3C, //CJK UNIFIED IDEOGRAPH - 0xDAB5: 0x6E44, //CJK UNIFIED IDEOGRAPH - 0xDAB6: 0x7709, //CJK UNIFIED IDEOGRAPH - 0xDAB7: 0x7C73, //CJK UNIFIED IDEOGRAPH - 0xDAB8: 0x7F8E, //CJK UNIFIED IDEOGRAPH - 0xDAB9: 0x8587, //CJK UNIFIED IDEOGRAPH - 0xDABA: 0x8B0E, //CJK UNIFIED IDEOGRAPH - 0xDABB: 0x8FF7, //CJK UNIFIED IDEOGRAPH - 0xDABC: 0x9761, //CJK UNIFIED IDEOGRAPH - 0xDABD: 0x9EF4, //CJK UNIFIED IDEOGRAPH - 0xDABE: 0x5CB7, //CJK UNIFIED IDEOGRAPH - 0xDABF: 0x60B6, //CJK UNIFIED IDEOGRAPH - 0xDAC0: 0x610D, //CJK UNIFIED IDEOGRAPH - 0xDAC1: 0x61AB, //CJK UNIFIED IDEOGRAPH - 0xDAC2: 0x654F, //CJK UNIFIED IDEOGRAPH - 0xDAC3: 0x65FB, //CJK UNIFIED IDEOGRAPH - 0xDAC4: 0x65FC, //CJK UNIFIED IDEOGRAPH - 0xDAC5: 0x6C11, //CJK UNIFIED IDEOGRAPH - 0xDAC6: 0x6CEF, //CJK UNIFIED IDEOGRAPH - 0xDAC7: 0x739F, //CJK UNIFIED IDEOGRAPH - 0xDAC8: 0x73C9, //CJK UNIFIED IDEOGRAPH - 0xDAC9: 0x7DE1, //CJK UNIFIED IDEOGRAPH - 0xDACA: 0x9594, //CJK UNIFIED IDEOGRAPH - 0xDACB: 0x5BC6, //CJK UNIFIED IDEOGRAPH - 0xDACC: 0x871C, //CJK UNIFIED IDEOGRAPH - 0xDACD: 0x8B10, //CJK UNIFIED IDEOGRAPH - 0xDACE: 0x525D, //CJK UNIFIED IDEOGRAPH - 0xDACF: 0x535A, //CJK UNIFIED IDEOGRAPH - 0xDAD0: 0x62CD, //CJK UNIFIED IDEOGRAPH - 0xDAD1: 0x640F, //CJK UNIFIED IDEOGRAPH - 0xDAD2: 0x64B2, //CJK UNIFIED IDEOGRAPH - 0xDAD3: 0x6734, //CJK UNIFIED IDEOGRAPH - 0xDAD4: 0x6A38, //CJK UNIFIED IDEOGRAPH - 0xDAD5: 0x6CCA, //CJK UNIFIED IDEOGRAPH - 0xDAD6: 0x73C0, //CJK UNIFIED IDEOGRAPH - 0xDAD7: 0x749E, //CJK UNIFIED IDEOGRAPH - 0xDAD8: 0x7B94, //CJK UNIFIED IDEOGRAPH - 0xDAD9: 0x7C95, //CJK UNIFIED IDEOGRAPH - 0xDADA: 0x7E1B, //CJK UNIFIED IDEOGRAPH - 0xDADB: 0x818A, //CJK UNIFIED IDEOGRAPH - 0xDADC: 0x8236, //CJK UNIFIED IDEOGRAPH - 0xDADD: 0x8584, //CJK UNIFIED IDEOGRAPH - 0xDADE: 0x8FEB, //CJK UNIFIED IDEOGRAPH - 0xDADF: 0x96F9, //CJK UNIFIED IDEOGRAPH - 0xDAE0: 0x99C1, //CJK UNIFIED IDEOGRAPH - 0xDAE1: 0x4F34, //CJK UNIFIED IDEOGRAPH - 0xDAE2: 0x534A, //CJK UNIFIED IDEOGRAPH - 0xDAE3: 0x53CD, //CJK UNIFIED IDEOGRAPH - 0xDAE4: 0x53DB, //CJK UNIFIED IDEOGRAPH - 0xDAE5: 0x62CC, //CJK UNIFIED IDEOGRAPH - 0xDAE6: 0x642C, //CJK UNIFIED IDEOGRAPH - 0xDAE7: 0x6500, //CJK UNIFIED IDEOGRAPH - 0xDAE8: 0x6591, //CJK UNIFIED IDEOGRAPH - 0xDAE9: 0x69C3, //CJK UNIFIED IDEOGRAPH - 0xDAEA: 0x6CEE, //CJK UNIFIED IDEOGRAPH - 0xDAEB: 0x6F58, //CJK UNIFIED IDEOGRAPH - 0xDAEC: 0x73ED, //CJK UNIFIED IDEOGRAPH - 0xDAED: 0x7554, //CJK UNIFIED IDEOGRAPH - 0xDAEE: 0x7622, //CJK UNIFIED IDEOGRAPH - 0xDAEF: 0x76E4, //CJK UNIFIED IDEOGRAPH - 0xDAF0: 0x76FC, //CJK UNIFIED IDEOGRAPH - 0xDAF1: 0x78D0, //CJK UNIFIED IDEOGRAPH - 0xDAF2: 0x78FB, //CJK UNIFIED IDEOGRAPH - 0xDAF3: 0x792C, //CJK UNIFIED IDEOGRAPH - 0xDAF4: 0x7D46, //CJK UNIFIED IDEOGRAPH - 0xDAF5: 0x822C, //CJK UNIFIED IDEOGRAPH - 0xDAF6: 0x87E0, //CJK UNIFIED IDEOGRAPH - 0xDAF7: 0x8FD4, //CJK UNIFIED IDEOGRAPH - 0xDAF8: 0x9812, //CJK UNIFIED IDEOGRAPH - 0xDAF9: 0x98EF, //CJK UNIFIED IDEOGRAPH - 0xDAFA: 0x52C3, //CJK UNIFIED IDEOGRAPH - 0xDAFB: 0x62D4, //CJK UNIFIED IDEOGRAPH - 0xDAFC: 0x64A5, //CJK UNIFIED IDEOGRAPH - 0xDAFD: 0x6E24, //CJK UNIFIED IDEOGRAPH - 0xDAFE: 0x6F51, //CJK UNIFIED IDEOGRAPH - 0xDBA1: 0x767C, //CJK UNIFIED IDEOGRAPH - 0xDBA2: 0x8DCB, //CJK UNIFIED IDEOGRAPH - 0xDBA3: 0x91B1, //CJK UNIFIED IDEOGRAPH - 0xDBA4: 0x9262, //CJK UNIFIED IDEOGRAPH - 0xDBA5: 0x9AEE, //CJK UNIFIED IDEOGRAPH - 0xDBA6: 0x9B43, //CJK UNIFIED IDEOGRAPH - 0xDBA7: 0x5023, //CJK UNIFIED IDEOGRAPH - 0xDBA8: 0x508D, //CJK UNIFIED IDEOGRAPH - 0xDBA9: 0x574A, //CJK UNIFIED IDEOGRAPH - 0xDBAA: 0x59A8, //CJK UNIFIED IDEOGRAPH - 0xDBAB: 0x5C28, //CJK UNIFIED IDEOGRAPH - 0xDBAC: 0x5E47, //CJK UNIFIED IDEOGRAPH - 0xDBAD: 0x5F77, //CJK UNIFIED IDEOGRAPH - 0xDBAE: 0x623F, //CJK UNIFIED IDEOGRAPH - 0xDBAF: 0x653E, //CJK UNIFIED IDEOGRAPH - 0xDBB0: 0x65B9, //CJK UNIFIED IDEOGRAPH - 0xDBB1: 0x65C1, //CJK UNIFIED IDEOGRAPH - 0xDBB2: 0x6609, //CJK UNIFIED IDEOGRAPH - 0xDBB3: 0x678B, //CJK UNIFIED IDEOGRAPH - 0xDBB4: 0x699C, //CJK UNIFIED IDEOGRAPH - 0xDBB5: 0x6EC2, //CJK UNIFIED IDEOGRAPH - 0xDBB6: 0x78C5, //CJK UNIFIED IDEOGRAPH - 0xDBB7: 0x7D21, //CJK UNIFIED IDEOGRAPH - 0xDBB8: 0x80AA, //CJK UNIFIED IDEOGRAPH - 0xDBB9: 0x8180, //CJK UNIFIED IDEOGRAPH - 0xDBBA: 0x822B, //CJK UNIFIED IDEOGRAPH - 0xDBBB: 0x82B3, //CJK UNIFIED IDEOGRAPH - 0xDBBC: 0x84A1, //CJK UNIFIED IDEOGRAPH - 0xDBBD: 0x868C, //CJK UNIFIED IDEOGRAPH - 0xDBBE: 0x8A2A, //CJK UNIFIED IDEOGRAPH - 0xDBBF: 0x8B17, //CJK UNIFIED IDEOGRAPH - 0xDBC0: 0x90A6, //CJK UNIFIED IDEOGRAPH - 0xDBC1: 0x9632, //CJK UNIFIED IDEOGRAPH - 0xDBC2: 0x9F90, //CJK UNIFIED IDEOGRAPH - 0xDBC3: 0x500D, //CJK UNIFIED IDEOGRAPH - 0xDBC4: 0x4FF3, //CJK UNIFIED IDEOGRAPH - 0xDBC5: 0xF963, //CJK COMPATIBILITY IDEOGRAPH - 0xDBC6: 0x57F9, //CJK UNIFIED IDEOGRAPH - 0xDBC7: 0x5F98, //CJK UNIFIED IDEOGRAPH - 0xDBC8: 0x62DC, //CJK UNIFIED IDEOGRAPH - 0xDBC9: 0x6392, //CJK UNIFIED IDEOGRAPH - 0xDBCA: 0x676F, //CJK UNIFIED IDEOGRAPH - 0xDBCB: 0x6E43, //CJK UNIFIED IDEOGRAPH - 0xDBCC: 0x7119, //CJK UNIFIED IDEOGRAPH - 0xDBCD: 0x76C3, //CJK UNIFIED IDEOGRAPH - 0xDBCE: 0x80CC, //CJK UNIFIED IDEOGRAPH - 0xDBCF: 0x80DA, //CJK UNIFIED IDEOGRAPH - 0xDBD0: 0x88F4, //CJK UNIFIED IDEOGRAPH - 0xDBD1: 0x88F5, //CJK UNIFIED IDEOGRAPH - 0xDBD2: 0x8919, //CJK UNIFIED IDEOGRAPH - 0xDBD3: 0x8CE0, //CJK UNIFIED IDEOGRAPH - 0xDBD4: 0x8F29, //CJK UNIFIED IDEOGRAPH - 0xDBD5: 0x914D, //CJK UNIFIED IDEOGRAPH - 0xDBD6: 0x966A, //CJK UNIFIED IDEOGRAPH - 0xDBD7: 0x4F2F, //CJK UNIFIED IDEOGRAPH - 0xDBD8: 0x4F70, //CJK UNIFIED IDEOGRAPH - 0xDBD9: 0x5E1B, //CJK UNIFIED IDEOGRAPH - 0xDBDA: 0x67CF, //CJK UNIFIED IDEOGRAPH - 0xDBDB: 0x6822, //CJK UNIFIED IDEOGRAPH - 0xDBDC: 0x767D, //CJK UNIFIED IDEOGRAPH - 0xDBDD: 0x767E, //CJK UNIFIED IDEOGRAPH - 0xDBDE: 0x9B44, //CJK UNIFIED IDEOGRAPH - 0xDBDF: 0x5E61, //CJK UNIFIED IDEOGRAPH - 0xDBE0: 0x6A0A, //CJK UNIFIED IDEOGRAPH - 0xDBE1: 0x7169, //CJK UNIFIED IDEOGRAPH - 0xDBE2: 0x71D4, //CJK UNIFIED IDEOGRAPH - 0xDBE3: 0x756A, //CJK UNIFIED IDEOGRAPH - 0xDBE4: 0xF964, //CJK COMPATIBILITY IDEOGRAPH - 0xDBE5: 0x7E41, //CJK UNIFIED IDEOGRAPH - 0xDBE6: 0x8543, //CJK UNIFIED IDEOGRAPH - 0xDBE7: 0x85E9, //CJK UNIFIED IDEOGRAPH - 0xDBE8: 0x98DC, //CJK UNIFIED IDEOGRAPH - 0xDBE9: 0x4F10, //CJK UNIFIED IDEOGRAPH - 0xDBEA: 0x7B4F, //CJK UNIFIED IDEOGRAPH - 0xDBEB: 0x7F70, //CJK UNIFIED IDEOGRAPH - 0xDBEC: 0x95A5, //CJK UNIFIED IDEOGRAPH - 0xDBED: 0x51E1, //CJK UNIFIED IDEOGRAPH - 0xDBEE: 0x5E06, //CJK UNIFIED IDEOGRAPH - 0xDBEF: 0x68B5, //CJK UNIFIED IDEOGRAPH - 0xDBF0: 0x6C3E, //CJK UNIFIED IDEOGRAPH - 0xDBF1: 0x6C4E, //CJK UNIFIED IDEOGRAPH - 0xDBF2: 0x6CDB, //CJK UNIFIED IDEOGRAPH - 0xDBF3: 0x72AF, //CJK UNIFIED IDEOGRAPH - 0xDBF4: 0x7BC4, //CJK UNIFIED IDEOGRAPH - 0xDBF5: 0x8303, //CJK UNIFIED IDEOGRAPH - 0xDBF6: 0x6CD5, //CJK UNIFIED IDEOGRAPH - 0xDBF7: 0x743A, //CJK UNIFIED IDEOGRAPH - 0xDBF8: 0x50FB, //CJK UNIFIED IDEOGRAPH - 0xDBF9: 0x5288, //CJK UNIFIED IDEOGRAPH - 0xDBFA: 0x58C1, //CJK UNIFIED IDEOGRAPH - 0xDBFB: 0x64D8, //CJK UNIFIED IDEOGRAPH - 0xDBFC: 0x6A97, //CJK UNIFIED IDEOGRAPH - 0xDBFD: 0x74A7, //CJK UNIFIED IDEOGRAPH - 0xDBFE: 0x7656, //CJK UNIFIED IDEOGRAPH - 0xDCA1: 0x78A7, //CJK UNIFIED IDEOGRAPH - 0xDCA2: 0x8617, //CJK UNIFIED IDEOGRAPH - 0xDCA3: 0x95E2, //CJK UNIFIED IDEOGRAPH - 0xDCA4: 0x9739, //CJK UNIFIED IDEOGRAPH - 0xDCA5: 0xF965, //CJK COMPATIBILITY IDEOGRAPH - 0xDCA6: 0x535E, //CJK UNIFIED IDEOGRAPH - 0xDCA7: 0x5F01, //CJK UNIFIED IDEOGRAPH - 0xDCA8: 0x8B8A, //CJK UNIFIED IDEOGRAPH - 0xDCA9: 0x8FA8, //CJK UNIFIED IDEOGRAPH - 0xDCAA: 0x8FAF, //CJK UNIFIED IDEOGRAPH - 0xDCAB: 0x908A, //CJK UNIFIED IDEOGRAPH - 0xDCAC: 0x5225, //CJK UNIFIED IDEOGRAPH - 0xDCAD: 0x77A5, //CJK UNIFIED IDEOGRAPH - 0xDCAE: 0x9C49, //CJK UNIFIED IDEOGRAPH - 0xDCAF: 0x9F08, //CJK UNIFIED IDEOGRAPH - 0xDCB0: 0x4E19, //CJK UNIFIED IDEOGRAPH - 0xDCB1: 0x5002, //CJK UNIFIED IDEOGRAPH - 0xDCB2: 0x5175, //CJK UNIFIED IDEOGRAPH - 0xDCB3: 0x5C5B, //CJK UNIFIED IDEOGRAPH - 0xDCB4: 0x5E77, //CJK UNIFIED IDEOGRAPH - 0xDCB5: 0x661E, //CJK UNIFIED IDEOGRAPH - 0xDCB6: 0x663A, //CJK UNIFIED IDEOGRAPH - 0xDCB7: 0x67C4, //CJK UNIFIED IDEOGRAPH - 0xDCB8: 0x68C5, //CJK UNIFIED IDEOGRAPH - 0xDCB9: 0x70B3, //CJK UNIFIED IDEOGRAPH - 0xDCBA: 0x7501, //CJK UNIFIED IDEOGRAPH - 0xDCBB: 0x75C5, //CJK UNIFIED IDEOGRAPH - 0xDCBC: 0x79C9, //CJK UNIFIED IDEOGRAPH - 0xDCBD: 0x7ADD, //CJK UNIFIED IDEOGRAPH - 0xDCBE: 0x8F27, //CJK UNIFIED IDEOGRAPH - 0xDCBF: 0x9920, //CJK UNIFIED IDEOGRAPH - 0xDCC0: 0x9A08, //CJK UNIFIED IDEOGRAPH - 0xDCC1: 0x4FDD, //CJK UNIFIED IDEOGRAPH - 0xDCC2: 0x5821, //CJK UNIFIED IDEOGRAPH - 0xDCC3: 0x5831, //CJK UNIFIED IDEOGRAPH - 0xDCC4: 0x5BF6, //CJK UNIFIED IDEOGRAPH - 0xDCC5: 0x666E, //CJK UNIFIED IDEOGRAPH - 0xDCC6: 0x6B65, //CJK UNIFIED IDEOGRAPH - 0xDCC7: 0x6D11, //CJK UNIFIED IDEOGRAPH - 0xDCC8: 0x6E7A, //CJK UNIFIED IDEOGRAPH - 0xDCC9: 0x6F7D, //CJK UNIFIED IDEOGRAPH - 0xDCCA: 0x73E4, //CJK UNIFIED IDEOGRAPH - 0xDCCB: 0x752B, //CJK UNIFIED IDEOGRAPH - 0xDCCC: 0x83E9, //CJK UNIFIED IDEOGRAPH - 0xDCCD: 0x88DC, //CJK UNIFIED IDEOGRAPH - 0xDCCE: 0x8913, //CJK UNIFIED IDEOGRAPH - 0xDCCF: 0x8B5C, //CJK UNIFIED IDEOGRAPH - 0xDCD0: 0x8F14, //CJK UNIFIED IDEOGRAPH - 0xDCD1: 0x4F0F, //CJK UNIFIED IDEOGRAPH - 0xDCD2: 0x50D5, //CJK UNIFIED IDEOGRAPH - 0xDCD3: 0x5310, //CJK UNIFIED IDEOGRAPH - 0xDCD4: 0x535C, //CJK UNIFIED IDEOGRAPH - 0xDCD5: 0x5B93, //CJK UNIFIED IDEOGRAPH - 0xDCD6: 0x5FA9, //CJK UNIFIED IDEOGRAPH - 0xDCD7: 0x670D, //CJK UNIFIED IDEOGRAPH - 0xDCD8: 0x798F, //CJK UNIFIED IDEOGRAPH - 0xDCD9: 0x8179, //CJK UNIFIED IDEOGRAPH - 0xDCDA: 0x832F, //CJK UNIFIED IDEOGRAPH - 0xDCDB: 0x8514, //CJK UNIFIED IDEOGRAPH - 0xDCDC: 0x8907, //CJK UNIFIED IDEOGRAPH - 0xDCDD: 0x8986, //CJK UNIFIED IDEOGRAPH - 0xDCDE: 0x8F39, //CJK UNIFIED IDEOGRAPH - 0xDCDF: 0x8F3B, //CJK UNIFIED IDEOGRAPH - 0xDCE0: 0x99A5, //CJK UNIFIED IDEOGRAPH - 0xDCE1: 0x9C12, //CJK UNIFIED IDEOGRAPH - 0xDCE2: 0x672C, //CJK UNIFIED IDEOGRAPH - 0xDCE3: 0x4E76, //CJK UNIFIED IDEOGRAPH - 0xDCE4: 0x4FF8, //CJK UNIFIED IDEOGRAPH - 0xDCE5: 0x5949, //CJK UNIFIED IDEOGRAPH - 0xDCE6: 0x5C01, //CJK UNIFIED IDEOGRAPH - 0xDCE7: 0x5CEF, //CJK UNIFIED IDEOGRAPH - 0xDCE8: 0x5CF0, //CJK UNIFIED IDEOGRAPH - 0xDCE9: 0x6367, //CJK UNIFIED IDEOGRAPH - 0xDCEA: 0x68D2, //CJK UNIFIED IDEOGRAPH - 0xDCEB: 0x70FD, //CJK UNIFIED IDEOGRAPH - 0xDCEC: 0x71A2, //CJK UNIFIED IDEOGRAPH - 0xDCED: 0x742B, //CJK UNIFIED IDEOGRAPH - 0xDCEE: 0x7E2B, //CJK UNIFIED IDEOGRAPH - 0xDCEF: 0x84EC, //CJK UNIFIED IDEOGRAPH - 0xDCF0: 0x8702, //CJK UNIFIED IDEOGRAPH - 0xDCF1: 0x9022, //CJK UNIFIED IDEOGRAPH - 0xDCF2: 0x92D2, //CJK UNIFIED IDEOGRAPH - 0xDCF3: 0x9CF3, //CJK UNIFIED IDEOGRAPH - 0xDCF4: 0x4E0D, //CJK UNIFIED IDEOGRAPH - 0xDCF5: 0x4ED8, //CJK UNIFIED IDEOGRAPH - 0xDCF6: 0x4FEF, //CJK UNIFIED IDEOGRAPH - 0xDCF7: 0x5085, //CJK UNIFIED IDEOGRAPH - 0xDCF8: 0x5256, //CJK UNIFIED IDEOGRAPH - 0xDCF9: 0x526F, //CJK UNIFIED IDEOGRAPH - 0xDCFA: 0x5426, //CJK UNIFIED IDEOGRAPH - 0xDCFB: 0x5490, //CJK UNIFIED IDEOGRAPH - 0xDCFC: 0x57E0, //CJK UNIFIED IDEOGRAPH - 0xDCFD: 0x592B, //CJK UNIFIED IDEOGRAPH - 0xDCFE: 0x5A66, //CJK UNIFIED IDEOGRAPH - 0xDDA1: 0x5B5A, //CJK UNIFIED IDEOGRAPH - 0xDDA2: 0x5B75, //CJK UNIFIED IDEOGRAPH - 0xDDA3: 0x5BCC, //CJK UNIFIED IDEOGRAPH - 0xDDA4: 0x5E9C, //CJK UNIFIED IDEOGRAPH - 0xDDA5: 0xF966, //CJK COMPATIBILITY IDEOGRAPH - 0xDDA6: 0x6276, //CJK UNIFIED IDEOGRAPH - 0xDDA7: 0x6577, //CJK UNIFIED IDEOGRAPH - 0xDDA8: 0x65A7, //CJK UNIFIED IDEOGRAPH - 0xDDA9: 0x6D6E, //CJK UNIFIED IDEOGRAPH - 0xDDAA: 0x6EA5, //CJK UNIFIED IDEOGRAPH - 0xDDAB: 0x7236, //CJK UNIFIED IDEOGRAPH - 0xDDAC: 0x7B26, //CJK UNIFIED IDEOGRAPH - 0xDDAD: 0x7C3F, //CJK UNIFIED IDEOGRAPH - 0xDDAE: 0x7F36, //CJK UNIFIED IDEOGRAPH - 0xDDAF: 0x8150, //CJK UNIFIED IDEOGRAPH - 0xDDB0: 0x8151, //CJK UNIFIED IDEOGRAPH - 0xDDB1: 0x819A, //CJK UNIFIED IDEOGRAPH - 0xDDB2: 0x8240, //CJK UNIFIED IDEOGRAPH - 0xDDB3: 0x8299, //CJK UNIFIED IDEOGRAPH - 0xDDB4: 0x83A9, //CJK UNIFIED IDEOGRAPH - 0xDDB5: 0x8A03, //CJK UNIFIED IDEOGRAPH - 0xDDB6: 0x8CA0, //CJK UNIFIED IDEOGRAPH - 0xDDB7: 0x8CE6, //CJK UNIFIED IDEOGRAPH - 0xDDB8: 0x8CFB, //CJK UNIFIED IDEOGRAPH - 0xDDB9: 0x8D74, //CJK UNIFIED IDEOGRAPH - 0xDDBA: 0x8DBA, //CJK UNIFIED IDEOGRAPH - 0xDDBB: 0x90E8, //CJK UNIFIED IDEOGRAPH - 0xDDBC: 0x91DC, //CJK UNIFIED IDEOGRAPH - 0xDDBD: 0x961C, //CJK UNIFIED IDEOGRAPH - 0xDDBE: 0x9644, //CJK UNIFIED IDEOGRAPH - 0xDDBF: 0x99D9, //CJK UNIFIED IDEOGRAPH - 0xDDC0: 0x9CE7, //CJK UNIFIED IDEOGRAPH - 0xDDC1: 0x5317, //CJK UNIFIED IDEOGRAPH - 0xDDC2: 0x5206, //CJK UNIFIED IDEOGRAPH - 0xDDC3: 0x5429, //CJK UNIFIED IDEOGRAPH - 0xDDC4: 0x5674, //CJK UNIFIED IDEOGRAPH - 0xDDC5: 0x58B3, //CJK UNIFIED IDEOGRAPH - 0xDDC6: 0x5954, //CJK UNIFIED IDEOGRAPH - 0xDDC7: 0x596E, //CJK UNIFIED IDEOGRAPH - 0xDDC8: 0x5FFF, //CJK UNIFIED IDEOGRAPH - 0xDDC9: 0x61A4, //CJK UNIFIED IDEOGRAPH - 0xDDCA: 0x626E, //CJK UNIFIED IDEOGRAPH - 0xDDCB: 0x6610, //CJK UNIFIED IDEOGRAPH - 0xDDCC: 0x6C7E, //CJK UNIFIED IDEOGRAPH - 0xDDCD: 0x711A, //CJK UNIFIED IDEOGRAPH - 0xDDCE: 0x76C6, //CJK UNIFIED IDEOGRAPH - 0xDDCF: 0x7C89, //CJK UNIFIED IDEOGRAPH - 0xDDD0: 0x7CDE, //CJK UNIFIED IDEOGRAPH - 0xDDD1: 0x7D1B, //CJK UNIFIED IDEOGRAPH - 0xDDD2: 0x82AC, //CJK UNIFIED IDEOGRAPH - 0xDDD3: 0x8CC1, //CJK UNIFIED IDEOGRAPH - 0xDDD4: 0x96F0, //CJK UNIFIED IDEOGRAPH - 0xDDD5: 0xF967, //CJK COMPATIBILITY IDEOGRAPH - 0xDDD6: 0x4F5B, //CJK UNIFIED IDEOGRAPH - 0xDDD7: 0x5F17, //CJK UNIFIED IDEOGRAPH - 0xDDD8: 0x5F7F, //CJK UNIFIED IDEOGRAPH - 0xDDD9: 0x62C2, //CJK UNIFIED IDEOGRAPH - 0xDDDA: 0x5D29, //CJK UNIFIED IDEOGRAPH - 0xDDDB: 0x670B, //CJK UNIFIED IDEOGRAPH - 0xDDDC: 0x68DA, //CJK UNIFIED IDEOGRAPH - 0xDDDD: 0x787C, //CJK UNIFIED IDEOGRAPH - 0xDDDE: 0x7E43, //CJK UNIFIED IDEOGRAPH - 0xDDDF: 0x9D6C, //CJK UNIFIED IDEOGRAPH - 0xDDE0: 0x4E15, //CJK UNIFIED IDEOGRAPH - 0xDDE1: 0x5099, //CJK UNIFIED IDEOGRAPH - 0xDDE2: 0x5315, //CJK UNIFIED IDEOGRAPH - 0xDDE3: 0x532A, //CJK UNIFIED IDEOGRAPH - 0xDDE4: 0x5351, //CJK UNIFIED IDEOGRAPH - 0xDDE5: 0x5983, //CJK UNIFIED IDEOGRAPH - 0xDDE6: 0x5A62, //CJK UNIFIED IDEOGRAPH - 0xDDE7: 0x5E87, //CJK UNIFIED IDEOGRAPH - 0xDDE8: 0x60B2, //CJK UNIFIED IDEOGRAPH - 0xDDE9: 0x618A, //CJK UNIFIED IDEOGRAPH - 0xDDEA: 0x6249, //CJK UNIFIED IDEOGRAPH - 0xDDEB: 0x6279, //CJK UNIFIED IDEOGRAPH - 0xDDEC: 0x6590, //CJK UNIFIED IDEOGRAPH - 0xDDED: 0x6787, //CJK UNIFIED IDEOGRAPH - 0xDDEE: 0x69A7, //CJK UNIFIED IDEOGRAPH - 0xDDEF: 0x6BD4, //CJK UNIFIED IDEOGRAPH - 0xDDF0: 0x6BD6, //CJK UNIFIED IDEOGRAPH - 0xDDF1: 0x6BD7, //CJK UNIFIED IDEOGRAPH - 0xDDF2: 0x6BD8, //CJK UNIFIED IDEOGRAPH - 0xDDF3: 0x6CB8, //CJK UNIFIED IDEOGRAPH - 0xDDF4: 0xF968, //CJK COMPATIBILITY IDEOGRAPH - 0xDDF5: 0x7435, //CJK UNIFIED IDEOGRAPH - 0xDDF6: 0x75FA, //CJK UNIFIED IDEOGRAPH - 0xDDF7: 0x7812, //CJK UNIFIED IDEOGRAPH - 0xDDF8: 0x7891, //CJK UNIFIED IDEOGRAPH - 0xDDF9: 0x79D5, //CJK UNIFIED IDEOGRAPH - 0xDDFA: 0x79D8, //CJK UNIFIED IDEOGRAPH - 0xDDFB: 0x7C83, //CJK UNIFIED IDEOGRAPH - 0xDDFC: 0x7DCB, //CJK UNIFIED IDEOGRAPH - 0xDDFD: 0x7FE1, //CJK UNIFIED IDEOGRAPH - 0xDDFE: 0x80A5, //CJK UNIFIED IDEOGRAPH - 0xDEA1: 0x813E, //CJK UNIFIED IDEOGRAPH - 0xDEA2: 0x81C2, //CJK UNIFIED IDEOGRAPH - 0xDEA3: 0x83F2, //CJK UNIFIED IDEOGRAPH - 0xDEA4: 0x871A, //CJK UNIFIED IDEOGRAPH - 0xDEA5: 0x88E8, //CJK UNIFIED IDEOGRAPH - 0xDEA6: 0x8AB9, //CJK UNIFIED IDEOGRAPH - 0xDEA7: 0x8B6C, //CJK UNIFIED IDEOGRAPH - 0xDEA8: 0x8CBB, //CJK UNIFIED IDEOGRAPH - 0xDEA9: 0x9119, //CJK UNIFIED IDEOGRAPH - 0xDEAA: 0x975E, //CJK UNIFIED IDEOGRAPH - 0xDEAB: 0x98DB, //CJK UNIFIED IDEOGRAPH - 0xDEAC: 0x9F3B, //CJK UNIFIED IDEOGRAPH - 0xDEAD: 0x56AC, //CJK UNIFIED IDEOGRAPH - 0xDEAE: 0x5B2A, //CJK UNIFIED IDEOGRAPH - 0xDEAF: 0x5F6C, //CJK UNIFIED IDEOGRAPH - 0xDEB0: 0x658C, //CJK UNIFIED IDEOGRAPH - 0xDEB1: 0x6AB3, //CJK UNIFIED IDEOGRAPH - 0xDEB2: 0x6BAF, //CJK UNIFIED IDEOGRAPH - 0xDEB3: 0x6D5C, //CJK UNIFIED IDEOGRAPH - 0xDEB4: 0x6FF1, //CJK UNIFIED IDEOGRAPH - 0xDEB5: 0x7015, //CJK UNIFIED IDEOGRAPH - 0xDEB6: 0x725D, //CJK UNIFIED IDEOGRAPH - 0xDEB7: 0x73AD, //CJK UNIFIED IDEOGRAPH - 0xDEB8: 0x8CA7, //CJK UNIFIED IDEOGRAPH - 0xDEB9: 0x8CD3, //CJK UNIFIED IDEOGRAPH - 0xDEBA: 0x983B, //CJK UNIFIED IDEOGRAPH - 0xDEBB: 0x6191, //CJK UNIFIED IDEOGRAPH - 0xDEBC: 0x6C37, //CJK UNIFIED IDEOGRAPH - 0xDEBD: 0x8058, //CJK UNIFIED IDEOGRAPH - 0xDEBE: 0x9A01, //CJK UNIFIED IDEOGRAPH - 0xDEBF: 0x4E4D, //CJK UNIFIED IDEOGRAPH - 0xDEC0: 0x4E8B, //CJK UNIFIED IDEOGRAPH - 0xDEC1: 0x4E9B, //CJK UNIFIED IDEOGRAPH - 0xDEC2: 0x4ED5, //CJK UNIFIED IDEOGRAPH - 0xDEC3: 0x4F3A, //CJK UNIFIED IDEOGRAPH - 0xDEC4: 0x4F3C, //CJK UNIFIED IDEOGRAPH - 0xDEC5: 0x4F7F, //CJK UNIFIED IDEOGRAPH - 0xDEC6: 0x4FDF, //CJK UNIFIED IDEOGRAPH - 0xDEC7: 0x50FF, //CJK UNIFIED IDEOGRAPH - 0xDEC8: 0x53F2, //CJK UNIFIED IDEOGRAPH - 0xDEC9: 0x53F8, //CJK UNIFIED IDEOGRAPH - 0xDECA: 0x5506, //CJK UNIFIED IDEOGRAPH - 0xDECB: 0x55E3, //CJK UNIFIED IDEOGRAPH - 0xDECC: 0x56DB, //CJK UNIFIED IDEOGRAPH - 0xDECD: 0x58EB, //CJK UNIFIED IDEOGRAPH - 0xDECE: 0x5962, //CJK UNIFIED IDEOGRAPH - 0xDECF: 0x5A11, //CJK UNIFIED IDEOGRAPH - 0xDED0: 0x5BEB, //CJK UNIFIED IDEOGRAPH - 0xDED1: 0x5BFA, //CJK UNIFIED IDEOGRAPH - 0xDED2: 0x5C04, //CJK UNIFIED IDEOGRAPH - 0xDED3: 0x5DF3, //CJK UNIFIED IDEOGRAPH - 0xDED4: 0x5E2B, //CJK UNIFIED IDEOGRAPH - 0xDED5: 0x5F99, //CJK UNIFIED IDEOGRAPH - 0xDED6: 0x601D, //CJK UNIFIED IDEOGRAPH - 0xDED7: 0x6368, //CJK UNIFIED IDEOGRAPH - 0xDED8: 0x659C, //CJK UNIFIED IDEOGRAPH - 0xDED9: 0x65AF, //CJK UNIFIED IDEOGRAPH - 0xDEDA: 0x67F6, //CJK UNIFIED IDEOGRAPH - 0xDEDB: 0x67FB, //CJK UNIFIED IDEOGRAPH - 0xDEDC: 0x68AD, //CJK UNIFIED IDEOGRAPH - 0xDEDD: 0x6B7B, //CJK UNIFIED IDEOGRAPH - 0xDEDE: 0x6C99, //CJK UNIFIED IDEOGRAPH - 0xDEDF: 0x6CD7, //CJK UNIFIED IDEOGRAPH - 0xDEE0: 0x6E23, //CJK UNIFIED IDEOGRAPH - 0xDEE1: 0x7009, //CJK UNIFIED IDEOGRAPH - 0xDEE2: 0x7345, //CJK UNIFIED IDEOGRAPH - 0xDEE3: 0x7802, //CJK UNIFIED IDEOGRAPH - 0xDEE4: 0x793E, //CJK UNIFIED IDEOGRAPH - 0xDEE5: 0x7940, //CJK UNIFIED IDEOGRAPH - 0xDEE6: 0x7960, //CJK UNIFIED IDEOGRAPH - 0xDEE7: 0x79C1, //CJK UNIFIED IDEOGRAPH - 0xDEE8: 0x7BE9, //CJK UNIFIED IDEOGRAPH - 0xDEE9: 0x7D17, //CJK UNIFIED IDEOGRAPH - 0xDEEA: 0x7D72, //CJK UNIFIED IDEOGRAPH - 0xDEEB: 0x8086, //CJK UNIFIED IDEOGRAPH - 0xDEEC: 0x820D, //CJK UNIFIED IDEOGRAPH - 0xDEED: 0x838E, //CJK UNIFIED IDEOGRAPH - 0xDEEE: 0x84D1, //CJK UNIFIED IDEOGRAPH - 0xDEEF: 0x86C7, //CJK UNIFIED IDEOGRAPH - 0xDEF0: 0x88DF, //CJK UNIFIED IDEOGRAPH - 0xDEF1: 0x8A50, //CJK UNIFIED IDEOGRAPH - 0xDEF2: 0x8A5E, //CJK UNIFIED IDEOGRAPH - 0xDEF3: 0x8B1D, //CJK UNIFIED IDEOGRAPH - 0xDEF4: 0x8CDC, //CJK UNIFIED IDEOGRAPH - 0xDEF5: 0x8D66, //CJK UNIFIED IDEOGRAPH - 0xDEF6: 0x8FAD, //CJK UNIFIED IDEOGRAPH - 0xDEF7: 0x90AA, //CJK UNIFIED IDEOGRAPH - 0xDEF8: 0x98FC, //CJK UNIFIED IDEOGRAPH - 0xDEF9: 0x99DF, //CJK UNIFIED IDEOGRAPH - 0xDEFA: 0x9E9D, //CJK UNIFIED IDEOGRAPH - 0xDEFB: 0x524A, //CJK UNIFIED IDEOGRAPH - 0xDEFC: 0xF969, //CJK COMPATIBILITY IDEOGRAPH - 0xDEFD: 0x6714, //CJK UNIFIED IDEOGRAPH - 0xDEFE: 0xF96A, //CJK COMPATIBILITY IDEOGRAPH - 0xDFA1: 0x5098, //CJK UNIFIED IDEOGRAPH - 0xDFA2: 0x522A, //CJK UNIFIED IDEOGRAPH - 0xDFA3: 0x5C71, //CJK UNIFIED IDEOGRAPH - 0xDFA4: 0x6563, //CJK UNIFIED IDEOGRAPH - 0xDFA5: 0x6C55, //CJK UNIFIED IDEOGRAPH - 0xDFA6: 0x73CA, //CJK UNIFIED IDEOGRAPH - 0xDFA7: 0x7523, //CJK UNIFIED IDEOGRAPH - 0xDFA8: 0x759D, //CJK UNIFIED IDEOGRAPH - 0xDFA9: 0x7B97, //CJK UNIFIED IDEOGRAPH - 0xDFAA: 0x849C, //CJK UNIFIED IDEOGRAPH - 0xDFAB: 0x9178, //CJK UNIFIED IDEOGRAPH - 0xDFAC: 0x9730, //CJK UNIFIED IDEOGRAPH - 0xDFAD: 0x4E77, //CJK UNIFIED IDEOGRAPH - 0xDFAE: 0x6492, //CJK UNIFIED IDEOGRAPH - 0xDFAF: 0x6BBA, //CJK UNIFIED IDEOGRAPH - 0xDFB0: 0x715E, //CJK UNIFIED IDEOGRAPH - 0xDFB1: 0x85A9, //CJK UNIFIED IDEOGRAPH - 0xDFB2: 0x4E09, //CJK UNIFIED IDEOGRAPH - 0xDFB3: 0xF96B, //CJK COMPATIBILITY IDEOGRAPH - 0xDFB4: 0x6749, //CJK UNIFIED IDEOGRAPH - 0xDFB5: 0x68EE, //CJK UNIFIED IDEOGRAPH - 0xDFB6: 0x6E17, //CJK UNIFIED IDEOGRAPH - 0xDFB7: 0x829F, //CJK UNIFIED IDEOGRAPH - 0xDFB8: 0x8518, //CJK UNIFIED IDEOGRAPH - 0xDFB9: 0x886B, //CJK UNIFIED IDEOGRAPH - 0xDFBA: 0x63F7, //CJK UNIFIED IDEOGRAPH - 0xDFBB: 0x6F81, //CJK UNIFIED IDEOGRAPH - 0xDFBC: 0x9212, //CJK UNIFIED IDEOGRAPH - 0xDFBD: 0x98AF, //CJK UNIFIED IDEOGRAPH - 0xDFBE: 0x4E0A, //CJK UNIFIED IDEOGRAPH - 0xDFBF: 0x50B7, //CJK UNIFIED IDEOGRAPH - 0xDFC0: 0x50CF, //CJK UNIFIED IDEOGRAPH - 0xDFC1: 0x511F, //CJK UNIFIED IDEOGRAPH - 0xDFC2: 0x5546, //CJK UNIFIED IDEOGRAPH - 0xDFC3: 0x55AA, //CJK UNIFIED IDEOGRAPH - 0xDFC4: 0x5617, //CJK UNIFIED IDEOGRAPH - 0xDFC5: 0x5B40, //CJK UNIFIED IDEOGRAPH - 0xDFC6: 0x5C19, //CJK UNIFIED IDEOGRAPH - 0xDFC7: 0x5CE0, //CJK UNIFIED IDEOGRAPH - 0xDFC8: 0x5E38, //CJK UNIFIED IDEOGRAPH - 0xDFC9: 0x5E8A, //CJK UNIFIED IDEOGRAPH - 0xDFCA: 0x5EA0, //CJK UNIFIED IDEOGRAPH - 0xDFCB: 0x5EC2, //CJK UNIFIED IDEOGRAPH - 0xDFCC: 0x60F3, //CJK UNIFIED IDEOGRAPH - 0xDFCD: 0x6851, //CJK UNIFIED IDEOGRAPH - 0xDFCE: 0x6A61, //CJK UNIFIED IDEOGRAPH - 0xDFCF: 0x6E58, //CJK UNIFIED IDEOGRAPH - 0xDFD0: 0x723D, //CJK UNIFIED IDEOGRAPH - 0xDFD1: 0x7240, //CJK UNIFIED IDEOGRAPH - 0xDFD2: 0x72C0, //CJK UNIFIED IDEOGRAPH - 0xDFD3: 0x76F8, //CJK UNIFIED IDEOGRAPH - 0xDFD4: 0x7965, //CJK UNIFIED IDEOGRAPH - 0xDFD5: 0x7BB1, //CJK UNIFIED IDEOGRAPH - 0xDFD6: 0x7FD4, //CJK UNIFIED IDEOGRAPH - 0xDFD7: 0x88F3, //CJK UNIFIED IDEOGRAPH - 0xDFD8: 0x89F4, //CJK UNIFIED IDEOGRAPH - 0xDFD9: 0x8A73, //CJK UNIFIED IDEOGRAPH - 0xDFDA: 0x8C61, //CJK UNIFIED IDEOGRAPH - 0xDFDB: 0x8CDE, //CJK UNIFIED IDEOGRAPH - 0xDFDC: 0x971C, //CJK UNIFIED IDEOGRAPH - 0xDFDD: 0x585E, //CJK UNIFIED IDEOGRAPH - 0xDFDE: 0x74BD, //CJK UNIFIED IDEOGRAPH - 0xDFDF: 0x8CFD, //CJK UNIFIED IDEOGRAPH - 0xDFE0: 0x55C7, //CJK UNIFIED IDEOGRAPH - 0xDFE1: 0xF96C, //CJK COMPATIBILITY IDEOGRAPH - 0xDFE2: 0x7A61, //CJK UNIFIED IDEOGRAPH - 0xDFE3: 0x7D22, //CJK UNIFIED IDEOGRAPH - 0xDFE4: 0x8272, //CJK UNIFIED IDEOGRAPH - 0xDFE5: 0x7272, //CJK UNIFIED IDEOGRAPH - 0xDFE6: 0x751F, //CJK UNIFIED IDEOGRAPH - 0xDFE7: 0x7525, //CJK UNIFIED IDEOGRAPH - 0xDFE8: 0xF96D, //CJK COMPATIBILITY IDEOGRAPH - 0xDFE9: 0x7B19, //CJK UNIFIED IDEOGRAPH - 0xDFEA: 0x5885, //CJK UNIFIED IDEOGRAPH - 0xDFEB: 0x58FB, //CJK UNIFIED IDEOGRAPH - 0xDFEC: 0x5DBC, //CJK UNIFIED IDEOGRAPH - 0xDFED: 0x5E8F, //CJK UNIFIED IDEOGRAPH - 0xDFEE: 0x5EB6, //CJK UNIFIED IDEOGRAPH - 0xDFEF: 0x5F90, //CJK UNIFIED IDEOGRAPH - 0xDFF0: 0x6055, //CJK UNIFIED IDEOGRAPH - 0xDFF1: 0x6292, //CJK UNIFIED IDEOGRAPH - 0xDFF2: 0x637F, //CJK UNIFIED IDEOGRAPH - 0xDFF3: 0x654D, //CJK UNIFIED IDEOGRAPH - 0xDFF4: 0x6691, //CJK UNIFIED IDEOGRAPH - 0xDFF5: 0x66D9, //CJK UNIFIED IDEOGRAPH - 0xDFF6: 0x66F8, //CJK UNIFIED IDEOGRAPH - 0xDFF7: 0x6816, //CJK UNIFIED IDEOGRAPH - 0xDFF8: 0x68F2, //CJK UNIFIED IDEOGRAPH - 0xDFF9: 0x7280, //CJK UNIFIED IDEOGRAPH - 0xDFFA: 0x745E, //CJK UNIFIED IDEOGRAPH - 0xDFFB: 0x7B6E, //CJK UNIFIED IDEOGRAPH - 0xDFFC: 0x7D6E, //CJK UNIFIED IDEOGRAPH - 0xDFFD: 0x7DD6, //CJK UNIFIED IDEOGRAPH - 0xDFFE: 0x7F72, //CJK UNIFIED IDEOGRAPH - 0xE0A1: 0x80E5, //CJK UNIFIED IDEOGRAPH - 0xE0A2: 0x8212, //CJK UNIFIED IDEOGRAPH - 0xE0A3: 0x85AF, //CJK UNIFIED IDEOGRAPH - 0xE0A4: 0x897F, //CJK UNIFIED IDEOGRAPH - 0xE0A5: 0x8A93, //CJK UNIFIED IDEOGRAPH - 0xE0A6: 0x901D, //CJK UNIFIED IDEOGRAPH - 0xE0A7: 0x92E4, //CJK UNIFIED IDEOGRAPH - 0xE0A8: 0x9ECD, //CJK UNIFIED IDEOGRAPH - 0xE0A9: 0x9F20, //CJK UNIFIED IDEOGRAPH - 0xE0AA: 0x5915, //CJK UNIFIED IDEOGRAPH - 0xE0AB: 0x596D, //CJK UNIFIED IDEOGRAPH - 0xE0AC: 0x5E2D, //CJK UNIFIED IDEOGRAPH - 0xE0AD: 0x60DC, //CJK UNIFIED IDEOGRAPH - 0xE0AE: 0x6614, //CJK UNIFIED IDEOGRAPH - 0xE0AF: 0x6673, //CJK UNIFIED IDEOGRAPH - 0xE0B0: 0x6790, //CJK UNIFIED IDEOGRAPH - 0xE0B1: 0x6C50, //CJK UNIFIED IDEOGRAPH - 0xE0B2: 0x6DC5, //CJK UNIFIED IDEOGRAPH - 0xE0B3: 0x6F5F, //CJK UNIFIED IDEOGRAPH - 0xE0B4: 0x77F3, //CJK UNIFIED IDEOGRAPH - 0xE0B5: 0x78A9, //CJK UNIFIED IDEOGRAPH - 0xE0B6: 0x84C6, //CJK UNIFIED IDEOGRAPH - 0xE0B7: 0x91CB, //CJK UNIFIED IDEOGRAPH - 0xE0B8: 0x932B, //CJK UNIFIED IDEOGRAPH - 0xE0B9: 0x4ED9, //CJK UNIFIED IDEOGRAPH - 0xE0BA: 0x50CA, //CJK UNIFIED IDEOGRAPH - 0xE0BB: 0x5148, //CJK UNIFIED IDEOGRAPH - 0xE0BC: 0x5584, //CJK UNIFIED IDEOGRAPH - 0xE0BD: 0x5B0B, //CJK UNIFIED IDEOGRAPH - 0xE0BE: 0x5BA3, //CJK UNIFIED IDEOGRAPH - 0xE0BF: 0x6247, //CJK UNIFIED IDEOGRAPH - 0xE0C0: 0x657E, //CJK UNIFIED IDEOGRAPH - 0xE0C1: 0x65CB, //CJK UNIFIED IDEOGRAPH - 0xE0C2: 0x6E32, //CJK UNIFIED IDEOGRAPH - 0xE0C3: 0x717D, //CJK UNIFIED IDEOGRAPH - 0xE0C4: 0x7401, //CJK UNIFIED IDEOGRAPH - 0xE0C5: 0x7444, //CJK UNIFIED IDEOGRAPH - 0xE0C6: 0x7487, //CJK UNIFIED IDEOGRAPH - 0xE0C7: 0x74BF, //CJK UNIFIED IDEOGRAPH - 0xE0C8: 0x766C, //CJK UNIFIED IDEOGRAPH - 0xE0C9: 0x79AA, //CJK UNIFIED IDEOGRAPH - 0xE0CA: 0x7DDA, //CJK UNIFIED IDEOGRAPH - 0xE0CB: 0x7E55, //CJK UNIFIED IDEOGRAPH - 0xE0CC: 0x7FA8, //CJK UNIFIED IDEOGRAPH - 0xE0CD: 0x817A, //CJK UNIFIED IDEOGRAPH - 0xE0CE: 0x81B3, //CJK UNIFIED IDEOGRAPH - 0xE0CF: 0x8239, //CJK UNIFIED IDEOGRAPH - 0xE0D0: 0x861A, //CJK UNIFIED IDEOGRAPH - 0xE0D1: 0x87EC, //CJK UNIFIED IDEOGRAPH - 0xE0D2: 0x8A75, //CJK UNIFIED IDEOGRAPH - 0xE0D3: 0x8DE3, //CJK UNIFIED IDEOGRAPH - 0xE0D4: 0x9078, //CJK UNIFIED IDEOGRAPH - 0xE0D5: 0x9291, //CJK UNIFIED IDEOGRAPH - 0xE0D6: 0x9425, //CJK UNIFIED IDEOGRAPH - 0xE0D7: 0x994D, //CJK UNIFIED IDEOGRAPH - 0xE0D8: 0x9BAE, //CJK UNIFIED IDEOGRAPH - 0xE0D9: 0x5368, //CJK UNIFIED IDEOGRAPH - 0xE0DA: 0x5C51, //CJK UNIFIED IDEOGRAPH - 0xE0DB: 0x6954, //CJK UNIFIED IDEOGRAPH - 0xE0DC: 0x6CC4, //CJK UNIFIED IDEOGRAPH - 0xE0DD: 0x6D29, //CJK UNIFIED IDEOGRAPH - 0xE0DE: 0x6E2B, //CJK UNIFIED IDEOGRAPH - 0xE0DF: 0x820C, //CJK UNIFIED IDEOGRAPH - 0xE0E0: 0x859B, //CJK UNIFIED IDEOGRAPH - 0xE0E1: 0x893B, //CJK UNIFIED IDEOGRAPH - 0xE0E2: 0x8A2D, //CJK UNIFIED IDEOGRAPH - 0xE0E3: 0x8AAA, //CJK UNIFIED IDEOGRAPH - 0xE0E4: 0x96EA, //CJK UNIFIED IDEOGRAPH - 0xE0E5: 0x9F67, //CJK UNIFIED IDEOGRAPH - 0xE0E6: 0x5261, //CJK UNIFIED IDEOGRAPH - 0xE0E7: 0x66B9, //CJK UNIFIED IDEOGRAPH - 0xE0E8: 0x6BB2, //CJK UNIFIED IDEOGRAPH - 0xE0E9: 0x7E96, //CJK UNIFIED IDEOGRAPH - 0xE0EA: 0x87FE, //CJK UNIFIED IDEOGRAPH - 0xE0EB: 0x8D0D, //CJK UNIFIED IDEOGRAPH - 0xE0EC: 0x9583, //CJK UNIFIED IDEOGRAPH - 0xE0ED: 0x965D, //CJK UNIFIED IDEOGRAPH - 0xE0EE: 0x651D, //CJK UNIFIED IDEOGRAPH - 0xE0EF: 0x6D89, //CJK UNIFIED IDEOGRAPH - 0xE0F0: 0x71EE, //CJK UNIFIED IDEOGRAPH - 0xE0F1: 0xF96E, //CJK COMPATIBILITY IDEOGRAPH - 0xE0F2: 0x57CE, //CJK UNIFIED IDEOGRAPH - 0xE0F3: 0x59D3, //CJK UNIFIED IDEOGRAPH - 0xE0F4: 0x5BAC, //CJK UNIFIED IDEOGRAPH - 0xE0F5: 0x6027, //CJK UNIFIED IDEOGRAPH - 0xE0F6: 0x60FA, //CJK UNIFIED IDEOGRAPH - 0xE0F7: 0x6210, //CJK UNIFIED IDEOGRAPH - 0xE0F8: 0x661F, //CJK UNIFIED IDEOGRAPH - 0xE0F9: 0x665F, //CJK UNIFIED IDEOGRAPH - 0xE0FA: 0x7329, //CJK UNIFIED IDEOGRAPH - 0xE0FB: 0x73F9, //CJK UNIFIED IDEOGRAPH - 0xE0FC: 0x76DB, //CJK UNIFIED IDEOGRAPH - 0xE0FD: 0x7701, //CJK UNIFIED IDEOGRAPH - 0xE0FE: 0x7B6C, //CJK UNIFIED IDEOGRAPH - 0xE1A1: 0x8056, //CJK UNIFIED IDEOGRAPH - 0xE1A2: 0x8072, //CJK UNIFIED IDEOGRAPH - 0xE1A3: 0x8165, //CJK UNIFIED IDEOGRAPH - 0xE1A4: 0x8AA0, //CJK UNIFIED IDEOGRAPH - 0xE1A5: 0x9192, //CJK UNIFIED IDEOGRAPH - 0xE1A6: 0x4E16, //CJK UNIFIED IDEOGRAPH - 0xE1A7: 0x52E2, //CJK UNIFIED IDEOGRAPH - 0xE1A8: 0x6B72, //CJK UNIFIED IDEOGRAPH - 0xE1A9: 0x6D17, //CJK UNIFIED IDEOGRAPH - 0xE1AA: 0x7A05, //CJK UNIFIED IDEOGRAPH - 0xE1AB: 0x7B39, //CJK UNIFIED IDEOGRAPH - 0xE1AC: 0x7D30, //CJK UNIFIED IDEOGRAPH - 0xE1AD: 0xF96F, //CJK COMPATIBILITY IDEOGRAPH - 0xE1AE: 0x8CB0, //CJK UNIFIED IDEOGRAPH - 0xE1AF: 0x53EC, //CJK UNIFIED IDEOGRAPH - 0xE1B0: 0x562F, //CJK UNIFIED IDEOGRAPH - 0xE1B1: 0x5851, //CJK UNIFIED IDEOGRAPH - 0xE1B2: 0x5BB5, //CJK UNIFIED IDEOGRAPH - 0xE1B3: 0x5C0F, //CJK UNIFIED IDEOGRAPH - 0xE1B4: 0x5C11, //CJK UNIFIED IDEOGRAPH - 0xE1B5: 0x5DE2, //CJK UNIFIED IDEOGRAPH - 0xE1B6: 0x6240, //CJK UNIFIED IDEOGRAPH - 0xE1B7: 0x6383, //CJK UNIFIED IDEOGRAPH - 0xE1B8: 0x6414, //CJK UNIFIED IDEOGRAPH - 0xE1B9: 0x662D, //CJK UNIFIED IDEOGRAPH - 0xE1BA: 0x68B3, //CJK UNIFIED IDEOGRAPH - 0xE1BB: 0x6CBC, //CJK UNIFIED IDEOGRAPH - 0xE1BC: 0x6D88, //CJK UNIFIED IDEOGRAPH - 0xE1BD: 0x6EAF, //CJK UNIFIED IDEOGRAPH - 0xE1BE: 0x701F, //CJK UNIFIED IDEOGRAPH - 0xE1BF: 0x70A4, //CJK UNIFIED IDEOGRAPH - 0xE1C0: 0x71D2, //CJK UNIFIED IDEOGRAPH - 0xE1C1: 0x7526, //CJK UNIFIED IDEOGRAPH - 0xE1C2: 0x758F, //CJK UNIFIED IDEOGRAPH - 0xE1C3: 0x758E, //CJK UNIFIED IDEOGRAPH - 0xE1C4: 0x7619, //CJK UNIFIED IDEOGRAPH - 0xE1C5: 0x7B11, //CJK UNIFIED IDEOGRAPH - 0xE1C6: 0x7BE0, //CJK UNIFIED IDEOGRAPH - 0xE1C7: 0x7C2B, //CJK UNIFIED IDEOGRAPH - 0xE1C8: 0x7D20, //CJK UNIFIED IDEOGRAPH - 0xE1C9: 0x7D39, //CJK UNIFIED IDEOGRAPH - 0xE1CA: 0x852C, //CJK UNIFIED IDEOGRAPH - 0xE1CB: 0x856D, //CJK UNIFIED IDEOGRAPH - 0xE1CC: 0x8607, //CJK UNIFIED IDEOGRAPH - 0xE1CD: 0x8A34, //CJK UNIFIED IDEOGRAPH - 0xE1CE: 0x900D, //CJK UNIFIED IDEOGRAPH - 0xE1CF: 0x9061, //CJK UNIFIED IDEOGRAPH - 0xE1D0: 0x90B5, //CJK UNIFIED IDEOGRAPH - 0xE1D1: 0x92B7, //CJK UNIFIED IDEOGRAPH - 0xE1D2: 0x97F6, //CJK UNIFIED IDEOGRAPH - 0xE1D3: 0x9A37, //CJK UNIFIED IDEOGRAPH - 0xE1D4: 0x4FD7, //CJK UNIFIED IDEOGRAPH - 0xE1D5: 0x5C6C, //CJK UNIFIED IDEOGRAPH - 0xE1D6: 0x675F, //CJK UNIFIED IDEOGRAPH - 0xE1D7: 0x6D91, //CJK UNIFIED IDEOGRAPH - 0xE1D8: 0x7C9F, //CJK UNIFIED IDEOGRAPH - 0xE1D9: 0x7E8C, //CJK UNIFIED IDEOGRAPH - 0xE1DA: 0x8B16, //CJK UNIFIED IDEOGRAPH - 0xE1DB: 0x8D16, //CJK UNIFIED IDEOGRAPH - 0xE1DC: 0x901F, //CJK UNIFIED IDEOGRAPH - 0xE1DD: 0x5B6B, //CJK UNIFIED IDEOGRAPH - 0xE1DE: 0x5DFD, //CJK UNIFIED IDEOGRAPH - 0xE1DF: 0x640D, //CJK UNIFIED IDEOGRAPH - 0xE1E0: 0x84C0, //CJK UNIFIED IDEOGRAPH - 0xE1E1: 0x905C, //CJK UNIFIED IDEOGRAPH - 0xE1E2: 0x98E1, //CJK UNIFIED IDEOGRAPH - 0xE1E3: 0x7387, //CJK UNIFIED IDEOGRAPH - 0xE1E4: 0x5B8B, //CJK UNIFIED IDEOGRAPH - 0xE1E5: 0x609A, //CJK UNIFIED IDEOGRAPH - 0xE1E6: 0x677E, //CJK UNIFIED IDEOGRAPH - 0xE1E7: 0x6DDE, //CJK UNIFIED IDEOGRAPH - 0xE1E8: 0x8A1F, //CJK UNIFIED IDEOGRAPH - 0xE1E9: 0x8AA6, //CJK UNIFIED IDEOGRAPH - 0xE1EA: 0x9001, //CJK UNIFIED IDEOGRAPH - 0xE1EB: 0x980C, //CJK UNIFIED IDEOGRAPH - 0xE1EC: 0x5237, //CJK UNIFIED IDEOGRAPH - 0xE1ED: 0xF970, //CJK COMPATIBILITY IDEOGRAPH - 0xE1EE: 0x7051, //CJK UNIFIED IDEOGRAPH - 0xE1EF: 0x788E, //CJK UNIFIED IDEOGRAPH - 0xE1F0: 0x9396, //CJK UNIFIED IDEOGRAPH - 0xE1F1: 0x8870, //CJK UNIFIED IDEOGRAPH - 0xE1F2: 0x91D7, //CJK UNIFIED IDEOGRAPH - 0xE1F3: 0x4FEE, //CJK UNIFIED IDEOGRAPH - 0xE1F4: 0x53D7, //CJK UNIFIED IDEOGRAPH - 0xE1F5: 0x55FD, //CJK UNIFIED IDEOGRAPH - 0xE1F6: 0x56DA, //CJK UNIFIED IDEOGRAPH - 0xE1F7: 0x5782, //CJK UNIFIED IDEOGRAPH - 0xE1F8: 0x58FD, //CJK UNIFIED IDEOGRAPH - 0xE1F9: 0x5AC2, //CJK UNIFIED IDEOGRAPH - 0xE1FA: 0x5B88, //CJK UNIFIED IDEOGRAPH - 0xE1FB: 0x5CAB, //CJK UNIFIED IDEOGRAPH - 0xE1FC: 0x5CC0, //CJK UNIFIED IDEOGRAPH - 0xE1FD: 0x5E25, //CJK UNIFIED IDEOGRAPH - 0xE1FE: 0x6101, //CJK UNIFIED IDEOGRAPH - 0xE2A1: 0x620D, //CJK UNIFIED IDEOGRAPH - 0xE2A2: 0x624B, //CJK UNIFIED IDEOGRAPH - 0xE2A3: 0x6388, //CJK UNIFIED IDEOGRAPH - 0xE2A4: 0x641C, //CJK UNIFIED IDEOGRAPH - 0xE2A5: 0x6536, //CJK UNIFIED IDEOGRAPH - 0xE2A6: 0x6578, //CJK UNIFIED IDEOGRAPH - 0xE2A7: 0x6A39, //CJK UNIFIED IDEOGRAPH - 0xE2A8: 0x6B8A, //CJK UNIFIED IDEOGRAPH - 0xE2A9: 0x6C34, //CJK UNIFIED IDEOGRAPH - 0xE2AA: 0x6D19, //CJK UNIFIED IDEOGRAPH - 0xE2AB: 0x6F31, //CJK UNIFIED IDEOGRAPH - 0xE2AC: 0x71E7, //CJK UNIFIED IDEOGRAPH - 0xE2AD: 0x72E9, //CJK UNIFIED IDEOGRAPH - 0xE2AE: 0x7378, //CJK UNIFIED IDEOGRAPH - 0xE2AF: 0x7407, //CJK UNIFIED IDEOGRAPH - 0xE2B0: 0x74B2, //CJK UNIFIED IDEOGRAPH - 0xE2B1: 0x7626, //CJK UNIFIED IDEOGRAPH - 0xE2B2: 0x7761, //CJK UNIFIED IDEOGRAPH - 0xE2B3: 0x79C0, //CJK UNIFIED IDEOGRAPH - 0xE2B4: 0x7A57, //CJK UNIFIED IDEOGRAPH - 0xE2B5: 0x7AEA, //CJK UNIFIED IDEOGRAPH - 0xE2B6: 0x7CB9, //CJK UNIFIED IDEOGRAPH - 0xE2B7: 0x7D8F, //CJK UNIFIED IDEOGRAPH - 0xE2B8: 0x7DAC, //CJK UNIFIED IDEOGRAPH - 0xE2B9: 0x7E61, //CJK UNIFIED IDEOGRAPH - 0xE2BA: 0x7F9E, //CJK UNIFIED IDEOGRAPH - 0xE2BB: 0x8129, //CJK UNIFIED IDEOGRAPH - 0xE2BC: 0x8331, //CJK UNIFIED IDEOGRAPH - 0xE2BD: 0x8490, //CJK UNIFIED IDEOGRAPH - 0xE2BE: 0x84DA, //CJK UNIFIED IDEOGRAPH - 0xE2BF: 0x85EA, //CJK UNIFIED IDEOGRAPH - 0xE2C0: 0x8896, //CJK UNIFIED IDEOGRAPH - 0xE2C1: 0x8AB0, //CJK UNIFIED IDEOGRAPH - 0xE2C2: 0x8B90, //CJK UNIFIED IDEOGRAPH - 0xE2C3: 0x8F38, //CJK UNIFIED IDEOGRAPH - 0xE2C4: 0x9042, //CJK UNIFIED IDEOGRAPH - 0xE2C5: 0x9083, //CJK UNIFIED IDEOGRAPH - 0xE2C6: 0x916C, //CJK UNIFIED IDEOGRAPH - 0xE2C7: 0x9296, //CJK UNIFIED IDEOGRAPH - 0xE2C8: 0x92B9, //CJK UNIFIED IDEOGRAPH - 0xE2C9: 0x968B, //CJK UNIFIED IDEOGRAPH - 0xE2CA: 0x96A7, //CJK UNIFIED IDEOGRAPH - 0xE2CB: 0x96A8, //CJK UNIFIED IDEOGRAPH - 0xE2CC: 0x96D6, //CJK UNIFIED IDEOGRAPH - 0xE2CD: 0x9700, //CJK UNIFIED IDEOGRAPH - 0xE2CE: 0x9808, //CJK UNIFIED IDEOGRAPH - 0xE2CF: 0x9996, //CJK UNIFIED IDEOGRAPH - 0xE2D0: 0x9AD3, //CJK UNIFIED IDEOGRAPH - 0xE2D1: 0x9B1A, //CJK UNIFIED IDEOGRAPH - 0xE2D2: 0x53D4, //CJK UNIFIED IDEOGRAPH - 0xE2D3: 0x587E, //CJK UNIFIED IDEOGRAPH - 0xE2D4: 0x5919, //CJK UNIFIED IDEOGRAPH - 0xE2D5: 0x5B70, //CJK UNIFIED IDEOGRAPH - 0xE2D6: 0x5BBF, //CJK UNIFIED IDEOGRAPH - 0xE2D7: 0x6DD1, //CJK UNIFIED IDEOGRAPH - 0xE2D8: 0x6F5A, //CJK UNIFIED IDEOGRAPH - 0xE2D9: 0x719F, //CJK UNIFIED IDEOGRAPH - 0xE2DA: 0x7421, //CJK UNIFIED IDEOGRAPH - 0xE2DB: 0x74B9, //CJK UNIFIED IDEOGRAPH - 0xE2DC: 0x8085, //CJK UNIFIED IDEOGRAPH - 0xE2DD: 0x83FD, //CJK UNIFIED IDEOGRAPH - 0xE2DE: 0x5DE1, //CJK UNIFIED IDEOGRAPH - 0xE2DF: 0x5F87, //CJK UNIFIED IDEOGRAPH - 0xE2E0: 0x5FAA, //CJK UNIFIED IDEOGRAPH - 0xE2E1: 0x6042, //CJK UNIFIED IDEOGRAPH - 0xE2E2: 0x65EC, //CJK UNIFIED IDEOGRAPH - 0xE2E3: 0x6812, //CJK UNIFIED IDEOGRAPH - 0xE2E4: 0x696F, //CJK UNIFIED IDEOGRAPH - 0xE2E5: 0x6A53, //CJK UNIFIED IDEOGRAPH - 0xE2E6: 0x6B89, //CJK UNIFIED IDEOGRAPH - 0xE2E7: 0x6D35, //CJK UNIFIED IDEOGRAPH - 0xE2E8: 0x6DF3, //CJK UNIFIED IDEOGRAPH - 0xE2E9: 0x73E3, //CJK UNIFIED IDEOGRAPH - 0xE2EA: 0x76FE, //CJK UNIFIED IDEOGRAPH - 0xE2EB: 0x77AC, //CJK UNIFIED IDEOGRAPH - 0xE2EC: 0x7B4D, //CJK UNIFIED IDEOGRAPH - 0xE2ED: 0x7D14, //CJK UNIFIED IDEOGRAPH - 0xE2EE: 0x8123, //CJK UNIFIED IDEOGRAPH - 0xE2EF: 0x821C, //CJK UNIFIED IDEOGRAPH - 0xE2F0: 0x8340, //CJK UNIFIED IDEOGRAPH - 0xE2F1: 0x84F4, //CJK UNIFIED IDEOGRAPH - 0xE2F2: 0x8563, //CJK UNIFIED IDEOGRAPH - 0xE2F3: 0x8A62, //CJK UNIFIED IDEOGRAPH - 0xE2F4: 0x8AC4, //CJK UNIFIED IDEOGRAPH - 0xE2F5: 0x9187, //CJK UNIFIED IDEOGRAPH - 0xE2F6: 0x931E, //CJK UNIFIED IDEOGRAPH - 0xE2F7: 0x9806, //CJK UNIFIED IDEOGRAPH - 0xE2F8: 0x99B4, //CJK UNIFIED IDEOGRAPH - 0xE2F9: 0x620C, //CJK UNIFIED IDEOGRAPH - 0xE2FA: 0x8853, //CJK UNIFIED IDEOGRAPH - 0xE2FB: 0x8FF0, //CJK UNIFIED IDEOGRAPH - 0xE2FC: 0x9265, //CJK UNIFIED IDEOGRAPH - 0xE2FD: 0x5D07, //CJK UNIFIED IDEOGRAPH - 0xE2FE: 0x5D27, //CJK UNIFIED IDEOGRAPH - 0xE3A1: 0x5D69, //CJK UNIFIED IDEOGRAPH - 0xE3A2: 0x745F, //CJK UNIFIED IDEOGRAPH - 0xE3A3: 0x819D, //CJK UNIFIED IDEOGRAPH - 0xE3A4: 0x8768, //CJK UNIFIED IDEOGRAPH - 0xE3A5: 0x6FD5, //CJK UNIFIED IDEOGRAPH - 0xE3A6: 0x62FE, //CJK UNIFIED IDEOGRAPH - 0xE3A7: 0x7FD2, //CJK UNIFIED IDEOGRAPH - 0xE3A8: 0x8936, //CJK UNIFIED IDEOGRAPH - 0xE3A9: 0x8972, //CJK UNIFIED IDEOGRAPH - 0xE3AA: 0x4E1E, //CJK UNIFIED IDEOGRAPH - 0xE3AB: 0x4E58, //CJK UNIFIED IDEOGRAPH - 0xE3AC: 0x50E7, //CJK UNIFIED IDEOGRAPH - 0xE3AD: 0x52DD, //CJK UNIFIED IDEOGRAPH - 0xE3AE: 0x5347, //CJK UNIFIED IDEOGRAPH - 0xE3AF: 0x627F, //CJK UNIFIED IDEOGRAPH - 0xE3B0: 0x6607, //CJK UNIFIED IDEOGRAPH - 0xE3B1: 0x7E69, //CJK UNIFIED IDEOGRAPH - 0xE3B2: 0x8805, //CJK UNIFIED IDEOGRAPH - 0xE3B3: 0x965E, //CJK UNIFIED IDEOGRAPH - 0xE3B4: 0x4F8D, //CJK UNIFIED IDEOGRAPH - 0xE3B5: 0x5319, //CJK UNIFIED IDEOGRAPH - 0xE3B6: 0x5636, //CJK UNIFIED IDEOGRAPH - 0xE3B7: 0x59CB, //CJK UNIFIED IDEOGRAPH - 0xE3B8: 0x5AA4, //CJK UNIFIED IDEOGRAPH - 0xE3B9: 0x5C38, //CJK UNIFIED IDEOGRAPH - 0xE3BA: 0x5C4E, //CJK UNIFIED IDEOGRAPH - 0xE3BB: 0x5C4D, //CJK UNIFIED IDEOGRAPH - 0xE3BC: 0x5E02, //CJK UNIFIED IDEOGRAPH - 0xE3BD: 0x5F11, //CJK UNIFIED IDEOGRAPH - 0xE3BE: 0x6043, //CJK UNIFIED IDEOGRAPH - 0xE3BF: 0x65BD, //CJK UNIFIED IDEOGRAPH - 0xE3C0: 0x662F, //CJK UNIFIED IDEOGRAPH - 0xE3C1: 0x6642, //CJK UNIFIED IDEOGRAPH - 0xE3C2: 0x67BE, //CJK UNIFIED IDEOGRAPH - 0xE3C3: 0x67F4, //CJK UNIFIED IDEOGRAPH - 0xE3C4: 0x731C, //CJK UNIFIED IDEOGRAPH - 0xE3C5: 0x77E2, //CJK UNIFIED IDEOGRAPH - 0xE3C6: 0x793A, //CJK UNIFIED IDEOGRAPH - 0xE3C7: 0x7FC5, //CJK UNIFIED IDEOGRAPH - 0xE3C8: 0x8494, //CJK UNIFIED IDEOGRAPH - 0xE3C9: 0x84CD, //CJK UNIFIED IDEOGRAPH - 0xE3CA: 0x8996, //CJK UNIFIED IDEOGRAPH - 0xE3CB: 0x8A66, //CJK UNIFIED IDEOGRAPH - 0xE3CC: 0x8A69, //CJK UNIFIED IDEOGRAPH - 0xE3CD: 0x8AE1, //CJK UNIFIED IDEOGRAPH - 0xE3CE: 0x8C55, //CJK UNIFIED IDEOGRAPH - 0xE3CF: 0x8C7A, //CJK UNIFIED IDEOGRAPH - 0xE3D0: 0x57F4, //CJK UNIFIED IDEOGRAPH - 0xE3D1: 0x5BD4, //CJK UNIFIED IDEOGRAPH - 0xE3D2: 0x5F0F, //CJK UNIFIED IDEOGRAPH - 0xE3D3: 0x606F, //CJK UNIFIED IDEOGRAPH - 0xE3D4: 0x62ED, //CJK UNIFIED IDEOGRAPH - 0xE3D5: 0x690D, //CJK UNIFIED IDEOGRAPH - 0xE3D6: 0x6B96, //CJK UNIFIED IDEOGRAPH - 0xE3D7: 0x6E5C, //CJK UNIFIED IDEOGRAPH - 0xE3D8: 0x7184, //CJK UNIFIED IDEOGRAPH - 0xE3D9: 0x7BD2, //CJK UNIFIED IDEOGRAPH - 0xE3DA: 0x8755, //CJK UNIFIED IDEOGRAPH - 0xE3DB: 0x8B58, //CJK UNIFIED IDEOGRAPH - 0xE3DC: 0x8EFE, //CJK UNIFIED IDEOGRAPH - 0xE3DD: 0x98DF, //CJK UNIFIED IDEOGRAPH - 0xE3DE: 0x98FE, //CJK UNIFIED IDEOGRAPH - 0xE3DF: 0x4F38, //CJK UNIFIED IDEOGRAPH - 0xE3E0: 0x4F81, //CJK UNIFIED IDEOGRAPH - 0xE3E1: 0x4FE1, //CJK UNIFIED IDEOGRAPH - 0xE3E2: 0x547B, //CJK UNIFIED IDEOGRAPH - 0xE3E3: 0x5A20, //CJK UNIFIED IDEOGRAPH - 0xE3E4: 0x5BB8, //CJK UNIFIED IDEOGRAPH - 0xE3E5: 0x613C, //CJK UNIFIED IDEOGRAPH - 0xE3E6: 0x65B0, //CJK UNIFIED IDEOGRAPH - 0xE3E7: 0x6668, //CJK UNIFIED IDEOGRAPH - 0xE3E8: 0x71FC, //CJK UNIFIED IDEOGRAPH - 0xE3E9: 0x7533, //CJK UNIFIED IDEOGRAPH - 0xE3EA: 0x795E, //CJK UNIFIED IDEOGRAPH - 0xE3EB: 0x7D33, //CJK UNIFIED IDEOGRAPH - 0xE3EC: 0x814E, //CJK UNIFIED IDEOGRAPH - 0xE3ED: 0x81E3, //CJK UNIFIED IDEOGRAPH - 0xE3EE: 0x8398, //CJK UNIFIED IDEOGRAPH - 0xE3EF: 0x85AA, //CJK UNIFIED IDEOGRAPH - 0xE3F0: 0x85CE, //CJK UNIFIED IDEOGRAPH - 0xE3F1: 0x8703, //CJK UNIFIED IDEOGRAPH - 0xE3F2: 0x8A0A, //CJK UNIFIED IDEOGRAPH - 0xE3F3: 0x8EAB, //CJK UNIFIED IDEOGRAPH - 0xE3F4: 0x8F9B, //CJK UNIFIED IDEOGRAPH - 0xE3F5: 0xF971, //CJK COMPATIBILITY IDEOGRAPH - 0xE3F6: 0x8FC5, //CJK UNIFIED IDEOGRAPH - 0xE3F7: 0x5931, //CJK UNIFIED IDEOGRAPH - 0xE3F8: 0x5BA4, //CJK UNIFIED IDEOGRAPH - 0xE3F9: 0x5BE6, //CJK UNIFIED IDEOGRAPH - 0xE3FA: 0x6089, //CJK UNIFIED IDEOGRAPH - 0xE3FB: 0x5BE9, //CJK UNIFIED IDEOGRAPH - 0xE3FC: 0x5C0B, //CJK UNIFIED IDEOGRAPH - 0xE3FD: 0x5FC3, //CJK UNIFIED IDEOGRAPH - 0xE3FE: 0x6C81, //CJK UNIFIED IDEOGRAPH - 0xE4A1: 0xF972, //CJK COMPATIBILITY IDEOGRAPH - 0xE4A2: 0x6DF1, //CJK UNIFIED IDEOGRAPH - 0xE4A3: 0x700B, //CJK UNIFIED IDEOGRAPH - 0xE4A4: 0x751A, //CJK UNIFIED IDEOGRAPH - 0xE4A5: 0x82AF, //CJK UNIFIED IDEOGRAPH - 0xE4A6: 0x8AF6, //CJK UNIFIED IDEOGRAPH - 0xE4A7: 0x4EC0, //CJK UNIFIED IDEOGRAPH - 0xE4A8: 0x5341, //CJK UNIFIED IDEOGRAPH - 0xE4A9: 0xF973, //CJK COMPATIBILITY IDEOGRAPH - 0xE4AA: 0x96D9, //CJK UNIFIED IDEOGRAPH - 0xE4AB: 0x6C0F, //CJK UNIFIED IDEOGRAPH - 0xE4AC: 0x4E9E, //CJK UNIFIED IDEOGRAPH - 0xE4AD: 0x4FC4, //CJK UNIFIED IDEOGRAPH - 0xE4AE: 0x5152, //CJK UNIFIED IDEOGRAPH - 0xE4AF: 0x555E, //CJK UNIFIED IDEOGRAPH - 0xE4B0: 0x5A25, //CJK UNIFIED IDEOGRAPH - 0xE4B1: 0x5CE8, //CJK UNIFIED IDEOGRAPH - 0xE4B2: 0x6211, //CJK UNIFIED IDEOGRAPH - 0xE4B3: 0x7259, //CJK UNIFIED IDEOGRAPH - 0xE4B4: 0x82BD, //CJK UNIFIED IDEOGRAPH - 0xE4B5: 0x83AA, //CJK UNIFIED IDEOGRAPH - 0xE4B6: 0x86FE, //CJK UNIFIED IDEOGRAPH - 0xE4B7: 0x8859, //CJK UNIFIED IDEOGRAPH - 0xE4B8: 0x8A1D, //CJK UNIFIED IDEOGRAPH - 0xE4B9: 0x963F, //CJK UNIFIED IDEOGRAPH - 0xE4BA: 0x96C5, //CJK UNIFIED IDEOGRAPH - 0xE4BB: 0x9913, //CJK UNIFIED IDEOGRAPH - 0xE4BC: 0x9D09, //CJK UNIFIED IDEOGRAPH - 0xE4BD: 0x9D5D, //CJK UNIFIED IDEOGRAPH - 0xE4BE: 0x580A, //CJK UNIFIED IDEOGRAPH - 0xE4BF: 0x5CB3, //CJK UNIFIED IDEOGRAPH - 0xE4C0: 0x5DBD, //CJK UNIFIED IDEOGRAPH - 0xE4C1: 0x5E44, //CJK UNIFIED IDEOGRAPH - 0xE4C2: 0x60E1, //CJK UNIFIED IDEOGRAPH - 0xE4C3: 0x6115, //CJK UNIFIED IDEOGRAPH - 0xE4C4: 0x63E1, //CJK UNIFIED IDEOGRAPH - 0xE4C5: 0x6A02, //CJK UNIFIED IDEOGRAPH - 0xE4C6: 0x6E25, //CJK UNIFIED IDEOGRAPH - 0xE4C7: 0x9102, //CJK UNIFIED IDEOGRAPH - 0xE4C8: 0x9354, //CJK UNIFIED IDEOGRAPH - 0xE4C9: 0x984E, //CJK UNIFIED IDEOGRAPH - 0xE4CA: 0x9C10, //CJK UNIFIED IDEOGRAPH - 0xE4CB: 0x9F77, //CJK UNIFIED IDEOGRAPH - 0xE4CC: 0x5B89, //CJK UNIFIED IDEOGRAPH - 0xE4CD: 0x5CB8, //CJK UNIFIED IDEOGRAPH - 0xE4CE: 0x6309, //CJK UNIFIED IDEOGRAPH - 0xE4CF: 0x664F, //CJK UNIFIED IDEOGRAPH - 0xE4D0: 0x6848, //CJK UNIFIED IDEOGRAPH - 0xE4D1: 0x773C, //CJK UNIFIED IDEOGRAPH - 0xE4D2: 0x96C1, //CJK UNIFIED IDEOGRAPH - 0xE4D3: 0x978D, //CJK UNIFIED IDEOGRAPH - 0xE4D4: 0x9854, //CJK UNIFIED IDEOGRAPH - 0xE4D5: 0x9B9F, //CJK UNIFIED IDEOGRAPH - 0xE4D6: 0x65A1, //CJK UNIFIED IDEOGRAPH - 0xE4D7: 0x8B01, //CJK UNIFIED IDEOGRAPH - 0xE4D8: 0x8ECB, //CJK UNIFIED IDEOGRAPH - 0xE4D9: 0x95BC, //CJK UNIFIED IDEOGRAPH - 0xE4DA: 0x5535, //CJK UNIFIED IDEOGRAPH - 0xE4DB: 0x5CA9, //CJK UNIFIED IDEOGRAPH - 0xE4DC: 0x5DD6, //CJK UNIFIED IDEOGRAPH - 0xE4DD: 0x5EB5, //CJK UNIFIED IDEOGRAPH - 0xE4DE: 0x6697, //CJK UNIFIED IDEOGRAPH - 0xE4DF: 0x764C, //CJK UNIFIED IDEOGRAPH - 0xE4E0: 0x83F4, //CJK UNIFIED IDEOGRAPH - 0xE4E1: 0x95C7, //CJK UNIFIED IDEOGRAPH - 0xE4E2: 0x58D3, //CJK UNIFIED IDEOGRAPH - 0xE4E3: 0x62BC, //CJK UNIFIED IDEOGRAPH - 0xE4E4: 0x72CE, //CJK UNIFIED IDEOGRAPH - 0xE4E5: 0x9D28, //CJK UNIFIED IDEOGRAPH - 0xE4E6: 0x4EF0, //CJK UNIFIED IDEOGRAPH - 0xE4E7: 0x592E, //CJK UNIFIED IDEOGRAPH - 0xE4E8: 0x600F, //CJK UNIFIED IDEOGRAPH - 0xE4E9: 0x663B, //CJK UNIFIED IDEOGRAPH - 0xE4EA: 0x6B83, //CJK UNIFIED IDEOGRAPH - 0xE4EB: 0x79E7, //CJK UNIFIED IDEOGRAPH - 0xE4EC: 0x9D26, //CJK UNIFIED IDEOGRAPH - 0xE4ED: 0x5393, //CJK UNIFIED IDEOGRAPH - 0xE4EE: 0x54C0, //CJK UNIFIED IDEOGRAPH - 0xE4EF: 0x57C3, //CJK UNIFIED IDEOGRAPH - 0xE4F0: 0x5D16, //CJK UNIFIED IDEOGRAPH - 0xE4F1: 0x611B, //CJK UNIFIED IDEOGRAPH - 0xE4F2: 0x66D6, //CJK UNIFIED IDEOGRAPH - 0xE4F3: 0x6DAF, //CJK UNIFIED IDEOGRAPH - 0xE4F4: 0x788D, //CJK UNIFIED IDEOGRAPH - 0xE4F5: 0x827E, //CJK UNIFIED IDEOGRAPH - 0xE4F6: 0x9698, //CJK UNIFIED IDEOGRAPH - 0xE4F7: 0x9744, //CJK UNIFIED IDEOGRAPH - 0xE4F8: 0x5384, //CJK UNIFIED IDEOGRAPH - 0xE4F9: 0x627C, //CJK UNIFIED IDEOGRAPH - 0xE4FA: 0x6396, //CJK UNIFIED IDEOGRAPH - 0xE4FB: 0x6DB2, //CJK UNIFIED IDEOGRAPH - 0xE4FC: 0x7E0A, //CJK UNIFIED IDEOGRAPH - 0xE4FD: 0x814B, //CJK UNIFIED IDEOGRAPH - 0xE4FE: 0x984D, //CJK UNIFIED IDEOGRAPH - 0xE5A1: 0x6AFB, //CJK UNIFIED IDEOGRAPH - 0xE5A2: 0x7F4C, //CJK UNIFIED IDEOGRAPH - 0xE5A3: 0x9DAF, //CJK UNIFIED IDEOGRAPH - 0xE5A4: 0x9E1A, //CJK UNIFIED IDEOGRAPH - 0xE5A5: 0x4E5F, //CJK UNIFIED IDEOGRAPH - 0xE5A6: 0x503B, //CJK UNIFIED IDEOGRAPH - 0xE5A7: 0x51B6, //CJK UNIFIED IDEOGRAPH - 0xE5A8: 0x591C, //CJK UNIFIED IDEOGRAPH - 0xE5A9: 0x60F9, //CJK UNIFIED IDEOGRAPH - 0xE5AA: 0x63F6, //CJK UNIFIED IDEOGRAPH - 0xE5AB: 0x6930, //CJK UNIFIED IDEOGRAPH - 0xE5AC: 0x723A, //CJK UNIFIED IDEOGRAPH - 0xE5AD: 0x8036, //CJK UNIFIED IDEOGRAPH - 0xE5AE: 0xF974, //CJK COMPATIBILITY IDEOGRAPH - 0xE5AF: 0x91CE, //CJK UNIFIED IDEOGRAPH - 0xE5B0: 0x5F31, //CJK UNIFIED IDEOGRAPH - 0xE5B1: 0xF975, //CJK COMPATIBILITY IDEOGRAPH - 0xE5B2: 0xF976, //CJK COMPATIBILITY IDEOGRAPH - 0xE5B3: 0x7D04, //CJK UNIFIED IDEOGRAPH - 0xE5B4: 0x82E5, //CJK UNIFIED IDEOGRAPH - 0xE5B5: 0x846F, //CJK UNIFIED IDEOGRAPH - 0xE5B6: 0x84BB, //CJK UNIFIED IDEOGRAPH - 0xE5B7: 0x85E5, //CJK UNIFIED IDEOGRAPH - 0xE5B8: 0x8E8D, //CJK UNIFIED IDEOGRAPH - 0xE5B9: 0xF977, //CJK COMPATIBILITY IDEOGRAPH - 0xE5BA: 0x4F6F, //CJK UNIFIED IDEOGRAPH - 0xE5BB: 0xF978, //CJK COMPATIBILITY IDEOGRAPH - 0xE5BC: 0xF979, //CJK COMPATIBILITY IDEOGRAPH - 0xE5BD: 0x58E4, //CJK UNIFIED IDEOGRAPH - 0xE5BE: 0x5B43, //CJK UNIFIED IDEOGRAPH - 0xE5BF: 0x6059, //CJK UNIFIED IDEOGRAPH - 0xE5C0: 0x63DA, //CJK UNIFIED IDEOGRAPH - 0xE5C1: 0x6518, //CJK UNIFIED IDEOGRAPH - 0xE5C2: 0x656D, //CJK UNIFIED IDEOGRAPH - 0xE5C3: 0x6698, //CJK UNIFIED IDEOGRAPH - 0xE5C4: 0xF97A, //CJK COMPATIBILITY IDEOGRAPH - 0xE5C5: 0x694A, //CJK UNIFIED IDEOGRAPH - 0xE5C6: 0x6A23, //CJK UNIFIED IDEOGRAPH - 0xE5C7: 0x6D0B, //CJK UNIFIED IDEOGRAPH - 0xE5C8: 0x7001, //CJK UNIFIED IDEOGRAPH - 0xE5C9: 0x716C, //CJK UNIFIED IDEOGRAPH - 0xE5CA: 0x75D2, //CJK UNIFIED IDEOGRAPH - 0xE5CB: 0x760D, //CJK UNIFIED IDEOGRAPH - 0xE5CC: 0x79B3, //CJK UNIFIED IDEOGRAPH - 0xE5CD: 0x7A70, //CJK UNIFIED IDEOGRAPH - 0xE5CE: 0xF97B, //CJK COMPATIBILITY IDEOGRAPH - 0xE5CF: 0x7F8A, //CJK UNIFIED IDEOGRAPH - 0xE5D0: 0xF97C, //CJK COMPATIBILITY IDEOGRAPH - 0xE5D1: 0x8944, //CJK UNIFIED IDEOGRAPH - 0xE5D2: 0xF97D, //CJK COMPATIBILITY IDEOGRAPH - 0xE5D3: 0x8B93, //CJK UNIFIED IDEOGRAPH - 0xE5D4: 0x91C0, //CJK UNIFIED IDEOGRAPH - 0xE5D5: 0x967D, //CJK UNIFIED IDEOGRAPH - 0xE5D6: 0xF97E, //CJK COMPATIBILITY IDEOGRAPH - 0xE5D7: 0x990A, //CJK UNIFIED IDEOGRAPH - 0xE5D8: 0x5704, //CJK UNIFIED IDEOGRAPH - 0xE5D9: 0x5FA1, //CJK UNIFIED IDEOGRAPH - 0xE5DA: 0x65BC, //CJK UNIFIED IDEOGRAPH - 0xE5DB: 0x6F01, //CJK UNIFIED IDEOGRAPH - 0xE5DC: 0x7600, //CJK UNIFIED IDEOGRAPH - 0xE5DD: 0x79A6, //CJK UNIFIED IDEOGRAPH - 0xE5DE: 0x8A9E, //CJK UNIFIED IDEOGRAPH - 0xE5DF: 0x99AD, //CJK UNIFIED IDEOGRAPH - 0xE5E0: 0x9B5A, //CJK UNIFIED IDEOGRAPH - 0xE5E1: 0x9F6C, //CJK UNIFIED IDEOGRAPH - 0xE5E2: 0x5104, //CJK UNIFIED IDEOGRAPH - 0xE5E3: 0x61B6, //CJK UNIFIED IDEOGRAPH - 0xE5E4: 0x6291, //CJK UNIFIED IDEOGRAPH - 0xE5E5: 0x6A8D, //CJK UNIFIED IDEOGRAPH - 0xE5E6: 0x81C6, //CJK UNIFIED IDEOGRAPH - 0xE5E7: 0x5043, //CJK UNIFIED IDEOGRAPH - 0xE5E8: 0x5830, //CJK UNIFIED IDEOGRAPH - 0xE5E9: 0x5F66, //CJK UNIFIED IDEOGRAPH - 0xE5EA: 0x7109, //CJK UNIFIED IDEOGRAPH - 0xE5EB: 0x8A00, //CJK UNIFIED IDEOGRAPH - 0xE5EC: 0x8AFA, //CJK UNIFIED IDEOGRAPH - 0xE5ED: 0x5B7C, //CJK UNIFIED IDEOGRAPH - 0xE5EE: 0x8616, //CJK UNIFIED IDEOGRAPH - 0xE5EF: 0x4FFA, //CJK UNIFIED IDEOGRAPH - 0xE5F0: 0x513C, //CJK UNIFIED IDEOGRAPH - 0xE5F1: 0x56B4, //CJK UNIFIED IDEOGRAPH - 0xE5F2: 0x5944, //CJK UNIFIED IDEOGRAPH - 0xE5F3: 0x63A9, //CJK UNIFIED IDEOGRAPH - 0xE5F4: 0x6DF9, //CJK UNIFIED IDEOGRAPH - 0xE5F5: 0x5DAA, //CJK UNIFIED IDEOGRAPH - 0xE5F6: 0x696D, //CJK UNIFIED IDEOGRAPH - 0xE5F7: 0x5186, //CJK UNIFIED IDEOGRAPH - 0xE5F8: 0x4E88, //CJK UNIFIED IDEOGRAPH - 0xE5F9: 0x4F59, //CJK UNIFIED IDEOGRAPH - 0xE5FA: 0xF97F, //CJK COMPATIBILITY IDEOGRAPH - 0xE5FB: 0xF980, //CJK COMPATIBILITY IDEOGRAPH - 0xE5FC: 0xF981, //CJK COMPATIBILITY IDEOGRAPH - 0xE5FD: 0x5982, //CJK UNIFIED IDEOGRAPH - 0xE5FE: 0xF982, //CJK COMPATIBILITY IDEOGRAPH - 0xE6A1: 0xF983, //CJK COMPATIBILITY IDEOGRAPH - 0xE6A2: 0x6B5F, //CJK UNIFIED IDEOGRAPH - 0xE6A3: 0x6C5D, //CJK UNIFIED IDEOGRAPH - 0xE6A4: 0xF984, //CJK COMPATIBILITY IDEOGRAPH - 0xE6A5: 0x74B5, //CJK UNIFIED IDEOGRAPH - 0xE6A6: 0x7916, //CJK UNIFIED IDEOGRAPH - 0xE6A7: 0xF985, //CJK COMPATIBILITY IDEOGRAPH - 0xE6A8: 0x8207, //CJK UNIFIED IDEOGRAPH - 0xE6A9: 0x8245, //CJK UNIFIED IDEOGRAPH - 0xE6AA: 0x8339, //CJK UNIFIED IDEOGRAPH - 0xE6AB: 0x8F3F, //CJK UNIFIED IDEOGRAPH - 0xE6AC: 0x8F5D, //CJK UNIFIED IDEOGRAPH - 0xE6AD: 0xF986, //CJK COMPATIBILITY IDEOGRAPH - 0xE6AE: 0x9918, //CJK UNIFIED IDEOGRAPH - 0xE6AF: 0xF987, //CJK COMPATIBILITY IDEOGRAPH - 0xE6B0: 0xF988, //CJK COMPATIBILITY IDEOGRAPH - 0xE6B1: 0xF989, //CJK COMPATIBILITY IDEOGRAPH - 0xE6B2: 0x4EA6, //CJK UNIFIED IDEOGRAPH - 0xE6B3: 0xF98A, //CJK COMPATIBILITY IDEOGRAPH - 0xE6B4: 0x57DF, //CJK UNIFIED IDEOGRAPH - 0xE6B5: 0x5F79, //CJK UNIFIED IDEOGRAPH - 0xE6B6: 0x6613, //CJK UNIFIED IDEOGRAPH - 0xE6B7: 0xF98B, //CJK COMPATIBILITY IDEOGRAPH - 0xE6B8: 0xF98C, //CJK COMPATIBILITY IDEOGRAPH - 0xE6B9: 0x75AB, //CJK UNIFIED IDEOGRAPH - 0xE6BA: 0x7E79, //CJK UNIFIED IDEOGRAPH - 0xE6BB: 0x8B6F, //CJK UNIFIED IDEOGRAPH - 0xE6BC: 0xF98D, //CJK COMPATIBILITY IDEOGRAPH - 0xE6BD: 0x9006, //CJK UNIFIED IDEOGRAPH - 0xE6BE: 0x9A5B, //CJK UNIFIED IDEOGRAPH - 0xE6BF: 0x56A5, //CJK UNIFIED IDEOGRAPH - 0xE6C0: 0x5827, //CJK UNIFIED IDEOGRAPH - 0xE6C1: 0x59F8, //CJK UNIFIED IDEOGRAPH - 0xE6C2: 0x5A1F, //CJK UNIFIED IDEOGRAPH - 0xE6C3: 0x5BB4, //CJK UNIFIED IDEOGRAPH - 0xE6C4: 0xF98E, //CJK COMPATIBILITY IDEOGRAPH - 0xE6C5: 0x5EF6, //CJK UNIFIED IDEOGRAPH - 0xE6C6: 0xF98F, //CJK COMPATIBILITY IDEOGRAPH - 0xE6C7: 0xF990, //CJK COMPATIBILITY IDEOGRAPH - 0xE6C8: 0x6350, //CJK UNIFIED IDEOGRAPH - 0xE6C9: 0x633B, //CJK UNIFIED IDEOGRAPH - 0xE6CA: 0xF991, //CJK COMPATIBILITY IDEOGRAPH - 0xE6CB: 0x693D, //CJK UNIFIED IDEOGRAPH - 0xE6CC: 0x6C87, //CJK UNIFIED IDEOGRAPH - 0xE6CD: 0x6CBF, //CJK UNIFIED IDEOGRAPH - 0xE6CE: 0x6D8E, //CJK UNIFIED IDEOGRAPH - 0xE6CF: 0x6D93, //CJK UNIFIED IDEOGRAPH - 0xE6D0: 0x6DF5, //CJK UNIFIED IDEOGRAPH - 0xE6D1: 0x6F14, //CJK UNIFIED IDEOGRAPH - 0xE6D2: 0xF992, //CJK COMPATIBILITY IDEOGRAPH - 0xE6D3: 0x70DF, //CJK UNIFIED IDEOGRAPH - 0xE6D4: 0x7136, //CJK UNIFIED IDEOGRAPH - 0xE6D5: 0x7159, //CJK UNIFIED IDEOGRAPH - 0xE6D6: 0xF993, //CJK COMPATIBILITY IDEOGRAPH - 0xE6D7: 0x71C3, //CJK UNIFIED IDEOGRAPH - 0xE6D8: 0x71D5, //CJK UNIFIED IDEOGRAPH - 0xE6D9: 0xF994, //CJK COMPATIBILITY IDEOGRAPH - 0xE6DA: 0x784F, //CJK UNIFIED IDEOGRAPH - 0xE6DB: 0x786F, //CJK UNIFIED IDEOGRAPH - 0xE6DC: 0xF995, //CJK COMPATIBILITY IDEOGRAPH - 0xE6DD: 0x7B75, //CJK UNIFIED IDEOGRAPH - 0xE6DE: 0x7DE3, //CJK UNIFIED IDEOGRAPH - 0xE6DF: 0xF996, //CJK COMPATIBILITY IDEOGRAPH - 0xE6E0: 0x7E2F, //CJK UNIFIED IDEOGRAPH - 0xE6E1: 0xF997, //CJK COMPATIBILITY IDEOGRAPH - 0xE6E2: 0x884D, //CJK UNIFIED IDEOGRAPH - 0xE6E3: 0x8EDF, //CJK UNIFIED IDEOGRAPH - 0xE6E4: 0xF998, //CJK COMPATIBILITY IDEOGRAPH - 0xE6E5: 0xF999, //CJK COMPATIBILITY IDEOGRAPH - 0xE6E6: 0xF99A, //CJK COMPATIBILITY IDEOGRAPH - 0xE6E7: 0x925B, //CJK UNIFIED IDEOGRAPH - 0xE6E8: 0xF99B, //CJK COMPATIBILITY IDEOGRAPH - 0xE6E9: 0x9CF6, //CJK UNIFIED IDEOGRAPH - 0xE6EA: 0xF99C, //CJK COMPATIBILITY IDEOGRAPH - 0xE6EB: 0xF99D, //CJK COMPATIBILITY IDEOGRAPH - 0xE6EC: 0xF99E, //CJK COMPATIBILITY IDEOGRAPH - 0xE6ED: 0x6085, //CJK UNIFIED IDEOGRAPH - 0xE6EE: 0x6D85, //CJK UNIFIED IDEOGRAPH - 0xE6EF: 0xF99F, //CJK COMPATIBILITY IDEOGRAPH - 0xE6F0: 0x71B1, //CJK UNIFIED IDEOGRAPH - 0xE6F1: 0xF9A0, //CJK COMPATIBILITY IDEOGRAPH - 0xE6F2: 0xF9A1, //CJK COMPATIBILITY IDEOGRAPH - 0xE6F3: 0x95B1, //CJK UNIFIED IDEOGRAPH - 0xE6F4: 0x53AD, //CJK UNIFIED IDEOGRAPH - 0xE6F5: 0xF9A2, //CJK COMPATIBILITY IDEOGRAPH - 0xE6F6: 0xF9A3, //CJK COMPATIBILITY IDEOGRAPH - 0xE6F7: 0xF9A4, //CJK COMPATIBILITY IDEOGRAPH - 0xE6F8: 0x67D3, //CJK UNIFIED IDEOGRAPH - 0xE6F9: 0xF9A5, //CJK COMPATIBILITY IDEOGRAPH - 0xE6FA: 0x708E, //CJK UNIFIED IDEOGRAPH - 0xE6FB: 0x7130, //CJK UNIFIED IDEOGRAPH - 0xE6FC: 0x7430, //CJK UNIFIED IDEOGRAPH - 0xE6FD: 0x8276, //CJK UNIFIED IDEOGRAPH - 0xE6FE: 0x82D2, //CJK UNIFIED IDEOGRAPH - 0xE7A1: 0xF9A6, //CJK COMPATIBILITY IDEOGRAPH - 0xE7A2: 0x95BB, //CJK UNIFIED IDEOGRAPH - 0xE7A3: 0x9AE5, //CJK UNIFIED IDEOGRAPH - 0xE7A4: 0x9E7D, //CJK UNIFIED IDEOGRAPH - 0xE7A5: 0x66C4, //CJK UNIFIED IDEOGRAPH - 0xE7A6: 0xF9A7, //CJK COMPATIBILITY IDEOGRAPH - 0xE7A7: 0x71C1, //CJK UNIFIED IDEOGRAPH - 0xE7A8: 0x8449, //CJK UNIFIED IDEOGRAPH - 0xE7A9: 0xF9A8, //CJK COMPATIBILITY IDEOGRAPH - 0xE7AA: 0xF9A9, //CJK COMPATIBILITY IDEOGRAPH - 0xE7AB: 0x584B, //CJK UNIFIED IDEOGRAPH - 0xE7AC: 0xF9AA, //CJK COMPATIBILITY IDEOGRAPH - 0xE7AD: 0xF9AB, //CJK COMPATIBILITY IDEOGRAPH - 0xE7AE: 0x5DB8, //CJK UNIFIED IDEOGRAPH - 0xE7AF: 0x5F71, //CJK UNIFIED IDEOGRAPH - 0xE7B0: 0xF9AC, //CJK COMPATIBILITY IDEOGRAPH - 0xE7B1: 0x6620, //CJK UNIFIED IDEOGRAPH - 0xE7B2: 0x668E, //CJK UNIFIED IDEOGRAPH - 0xE7B3: 0x6979, //CJK UNIFIED IDEOGRAPH - 0xE7B4: 0x69AE, //CJK UNIFIED IDEOGRAPH - 0xE7B5: 0x6C38, //CJK UNIFIED IDEOGRAPH - 0xE7B6: 0x6CF3, //CJK UNIFIED IDEOGRAPH - 0xE7B7: 0x6E36, //CJK UNIFIED IDEOGRAPH - 0xE7B8: 0x6F41, //CJK UNIFIED IDEOGRAPH - 0xE7B9: 0x6FDA, //CJK UNIFIED IDEOGRAPH - 0xE7BA: 0x701B, //CJK UNIFIED IDEOGRAPH - 0xE7BB: 0x702F, //CJK UNIFIED IDEOGRAPH - 0xE7BC: 0x7150, //CJK UNIFIED IDEOGRAPH - 0xE7BD: 0x71DF, //CJK UNIFIED IDEOGRAPH - 0xE7BE: 0x7370, //CJK UNIFIED IDEOGRAPH - 0xE7BF: 0xF9AD, //CJK COMPATIBILITY IDEOGRAPH - 0xE7C0: 0x745B, //CJK UNIFIED IDEOGRAPH - 0xE7C1: 0xF9AE, //CJK COMPATIBILITY IDEOGRAPH - 0xE7C2: 0x74D4, //CJK UNIFIED IDEOGRAPH - 0xE7C3: 0x76C8, //CJK UNIFIED IDEOGRAPH - 0xE7C4: 0x7A4E, //CJK UNIFIED IDEOGRAPH - 0xE7C5: 0x7E93, //CJK UNIFIED IDEOGRAPH - 0xE7C6: 0xF9AF, //CJK COMPATIBILITY IDEOGRAPH - 0xE7C7: 0xF9B0, //CJK COMPATIBILITY IDEOGRAPH - 0xE7C8: 0x82F1, //CJK UNIFIED IDEOGRAPH - 0xE7C9: 0x8A60, //CJK UNIFIED IDEOGRAPH - 0xE7CA: 0x8FCE, //CJK UNIFIED IDEOGRAPH - 0xE7CB: 0xF9B1, //CJK COMPATIBILITY IDEOGRAPH - 0xE7CC: 0x9348, //CJK UNIFIED IDEOGRAPH - 0xE7CD: 0xF9B2, //CJK COMPATIBILITY IDEOGRAPH - 0xE7CE: 0x9719, //CJK UNIFIED IDEOGRAPH - 0xE7CF: 0xF9B3, //CJK COMPATIBILITY IDEOGRAPH - 0xE7D0: 0xF9B4, //CJK COMPATIBILITY IDEOGRAPH - 0xE7D1: 0x4E42, //CJK UNIFIED IDEOGRAPH - 0xE7D2: 0x502A, //CJK UNIFIED IDEOGRAPH - 0xE7D3: 0xF9B5, //CJK COMPATIBILITY IDEOGRAPH - 0xE7D4: 0x5208, //CJK UNIFIED IDEOGRAPH - 0xE7D5: 0x53E1, //CJK UNIFIED IDEOGRAPH - 0xE7D6: 0x66F3, //CJK UNIFIED IDEOGRAPH - 0xE7D7: 0x6C6D, //CJK UNIFIED IDEOGRAPH - 0xE7D8: 0x6FCA, //CJK UNIFIED IDEOGRAPH - 0xE7D9: 0x730A, //CJK UNIFIED IDEOGRAPH - 0xE7DA: 0x777F, //CJK UNIFIED IDEOGRAPH - 0xE7DB: 0x7A62, //CJK UNIFIED IDEOGRAPH - 0xE7DC: 0x82AE, //CJK UNIFIED IDEOGRAPH - 0xE7DD: 0x85DD, //CJK UNIFIED IDEOGRAPH - 0xE7DE: 0x8602, //CJK UNIFIED IDEOGRAPH - 0xE7DF: 0xF9B6, //CJK COMPATIBILITY IDEOGRAPH - 0xE7E0: 0x88D4, //CJK UNIFIED IDEOGRAPH - 0xE7E1: 0x8A63, //CJK UNIFIED IDEOGRAPH - 0xE7E2: 0x8B7D, //CJK UNIFIED IDEOGRAPH - 0xE7E3: 0x8C6B, //CJK UNIFIED IDEOGRAPH - 0xE7E4: 0xF9B7, //CJK COMPATIBILITY IDEOGRAPH - 0xE7E5: 0x92B3, //CJK UNIFIED IDEOGRAPH - 0xE7E6: 0xF9B8, //CJK COMPATIBILITY IDEOGRAPH - 0xE7E7: 0x9713, //CJK UNIFIED IDEOGRAPH - 0xE7E8: 0x9810, //CJK UNIFIED IDEOGRAPH - 0xE7E9: 0x4E94, //CJK UNIFIED IDEOGRAPH - 0xE7EA: 0x4F0D, //CJK UNIFIED IDEOGRAPH - 0xE7EB: 0x4FC9, //CJK UNIFIED IDEOGRAPH - 0xE7EC: 0x50B2, //CJK UNIFIED IDEOGRAPH - 0xE7ED: 0x5348, //CJK UNIFIED IDEOGRAPH - 0xE7EE: 0x543E, //CJK UNIFIED IDEOGRAPH - 0xE7EF: 0x5433, //CJK UNIFIED IDEOGRAPH - 0xE7F0: 0x55DA, //CJK UNIFIED IDEOGRAPH - 0xE7F1: 0x5862, //CJK UNIFIED IDEOGRAPH - 0xE7F2: 0x58BA, //CJK UNIFIED IDEOGRAPH - 0xE7F3: 0x5967, //CJK UNIFIED IDEOGRAPH - 0xE7F4: 0x5A1B, //CJK UNIFIED IDEOGRAPH - 0xE7F5: 0x5BE4, //CJK UNIFIED IDEOGRAPH - 0xE7F6: 0x609F, //CJK UNIFIED IDEOGRAPH - 0xE7F7: 0xF9B9, //CJK COMPATIBILITY IDEOGRAPH - 0xE7F8: 0x61CA, //CJK UNIFIED IDEOGRAPH - 0xE7F9: 0x6556, //CJK UNIFIED IDEOGRAPH - 0xE7FA: 0x65FF, //CJK UNIFIED IDEOGRAPH - 0xE7FB: 0x6664, //CJK UNIFIED IDEOGRAPH - 0xE7FC: 0x68A7, //CJK UNIFIED IDEOGRAPH - 0xE7FD: 0x6C5A, //CJK UNIFIED IDEOGRAPH - 0xE7FE: 0x6FB3, //CJK UNIFIED IDEOGRAPH - 0xE8A1: 0x70CF, //CJK UNIFIED IDEOGRAPH - 0xE8A2: 0x71AC, //CJK UNIFIED IDEOGRAPH - 0xE8A3: 0x7352, //CJK UNIFIED IDEOGRAPH - 0xE8A4: 0x7B7D, //CJK UNIFIED IDEOGRAPH - 0xE8A5: 0x8708, //CJK UNIFIED IDEOGRAPH - 0xE8A6: 0x8AA4, //CJK UNIFIED IDEOGRAPH - 0xE8A7: 0x9C32, //CJK UNIFIED IDEOGRAPH - 0xE8A8: 0x9F07, //CJK UNIFIED IDEOGRAPH - 0xE8A9: 0x5C4B, //CJK UNIFIED IDEOGRAPH - 0xE8AA: 0x6C83, //CJK UNIFIED IDEOGRAPH - 0xE8AB: 0x7344, //CJK UNIFIED IDEOGRAPH - 0xE8AC: 0x7389, //CJK UNIFIED IDEOGRAPH - 0xE8AD: 0x923A, //CJK UNIFIED IDEOGRAPH - 0xE8AE: 0x6EAB, //CJK UNIFIED IDEOGRAPH - 0xE8AF: 0x7465, //CJK UNIFIED IDEOGRAPH - 0xE8B0: 0x761F, //CJK UNIFIED IDEOGRAPH - 0xE8B1: 0x7A69, //CJK UNIFIED IDEOGRAPH - 0xE8B2: 0x7E15, //CJK UNIFIED IDEOGRAPH - 0xE8B3: 0x860A, //CJK UNIFIED IDEOGRAPH - 0xE8B4: 0x5140, //CJK UNIFIED IDEOGRAPH - 0xE8B5: 0x58C5, //CJK UNIFIED IDEOGRAPH - 0xE8B6: 0x64C1, //CJK UNIFIED IDEOGRAPH - 0xE8B7: 0x74EE, //CJK UNIFIED IDEOGRAPH - 0xE8B8: 0x7515, //CJK UNIFIED IDEOGRAPH - 0xE8B9: 0x7670, //CJK UNIFIED IDEOGRAPH - 0xE8BA: 0x7FC1, //CJK UNIFIED IDEOGRAPH - 0xE8BB: 0x9095, //CJK UNIFIED IDEOGRAPH - 0xE8BC: 0x96CD, //CJK UNIFIED IDEOGRAPH - 0xE8BD: 0x9954, //CJK UNIFIED IDEOGRAPH - 0xE8BE: 0x6E26, //CJK UNIFIED IDEOGRAPH - 0xE8BF: 0x74E6, //CJK UNIFIED IDEOGRAPH - 0xE8C0: 0x7AA9, //CJK UNIFIED IDEOGRAPH - 0xE8C1: 0x7AAA, //CJK UNIFIED IDEOGRAPH - 0xE8C2: 0x81E5, //CJK UNIFIED IDEOGRAPH - 0xE8C3: 0x86D9, //CJK UNIFIED IDEOGRAPH - 0xE8C4: 0x8778, //CJK UNIFIED IDEOGRAPH - 0xE8C5: 0x8A1B, //CJK UNIFIED IDEOGRAPH - 0xE8C6: 0x5A49, //CJK UNIFIED IDEOGRAPH - 0xE8C7: 0x5B8C, //CJK UNIFIED IDEOGRAPH - 0xE8C8: 0x5B9B, //CJK UNIFIED IDEOGRAPH - 0xE8C9: 0x68A1, //CJK UNIFIED IDEOGRAPH - 0xE8CA: 0x6900, //CJK UNIFIED IDEOGRAPH - 0xE8CB: 0x6D63, //CJK UNIFIED IDEOGRAPH - 0xE8CC: 0x73A9, //CJK UNIFIED IDEOGRAPH - 0xE8CD: 0x7413, //CJK UNIFIED IDEOGRAPH - 0xE8CE: 0x742C, //CJK UNIFIED IDEOGRAPH - 0xE8CF: 0x7897, //CJK UNIFIED IDEOGRAPH - 0xE8D0: 0x7DE9, //CJK UNIFIED IDEOGRAPH - 0xE8D1: 0x7FEB, //CJK UNIFIED IDEOGRAPH - 0xE8D2: 0x8118, //CJK UNIFIED IDEOGRAPH - 0xE8D3: 0x8155, //CJK UNIFIED IDEOGRAPH - 0xE8D4: 0x839E, //CJK UNIFIED IDEOGRAPH - 0xE8D5: 0x8C4C, //CJK UNIFIED IDEOGRAPH - 0xE8D6: 0x962E, //CJK UNIFIED IDEOGRAPH - 0xE8D7: 0x9811, //CJK UNIFIED IDEOGRAPH - 0xE8D8: 0x66F0, //CJK UNIFIED IDEOGRAPH - 0xE8D9: 0x5F80, //CJK UNIFIED IDEOGRAPH - 0xE8DA: 0x65FA, //CJK UNIFIED IDEOGRAPH - 0xE8DB: 0x6789, //CJK UNIFIED IDEOGRAPH - 0xE8DC: 0x6C6A, //CJK UNIFIED IDEOGRAPH - 0xE8DD: 0x738B, //CJK UNIFIED IDEOGRAPH - 0xE8DE: 0x502D, //CJK UNIFIED IDEOGRAPH - 0xE8DF: 0x5A03, //CJK UNIFIED IDEOGRAPH - 0xE8E0: 0x6B6A, //CJK UNIFIED IDEOGRAPH - 0xE8E1: 0x77EE, //CJK UNIFIED IDEOGRAPH - 0xE8E2: 0x5916, //CJK UNIFIED IDEOGRAPH - 0xE8E3: 0x5D6C, //CJK UNIFIED IDEOGRAPH - 0xE8E4: 0x5DCD, //CJK UNIFIED IDEOGRAPH - 0xE8E5: 0x7325, //CJK UNIFIED IDEOGRAPH - 0xE8E6: 0x754F, //CJK UNIFIED IDEOGRAPH - 0xE8E7: 0xF9BA, //CJK COMPATIBILITY IDEOGRAPH - 0xE8E8: 0xF9BB, //CJK COMPATIBILITY IDEOGRAPH - 0xE8E9: 0x50E5, //CJK UNIFIED IDEOGRAPH - 0xE8EA: 0x51F9, //CJK UNIFIED IDEOGRAPH - 0xE8EB: 0x582F, //CJK UNIFIED IDEOGRAPH - 0xE8EC: 0x592D, //CJK UNIFIED IDEOGRAPH - 0xE8ED: 0x5996, //CJK UNIFIED IDEOGRAPH - 0xE8EE: 0x59DA, //CJK UNIFIED IDEOGRAPH - 0xE8EF: 0x5BE5, //CJK UNIFIED IDEOGRAPH - 0xE8F0: 0xF9BC, //CJK COMPATIBILITY IDEOGRAPH - 0xE8F1: 0xF9BD, //CJK COMPATIBILITY IDEOGRAPH - 0xE8F2: 0x5DA2, //CJK UNIFIED IDEOGRAPH - 0xE8F3: 0x62D7, //CJK UNIFIED IDEOGRAPH - 0xE8F4: 0x6416, //CJK UNIFIED IDEOGRAPH - 0xE8F5: 0x6493, //CJK UNIFIED IDEOGRAPH - 0xE8F6: 0x64FE, //CJK UNIFIED IDEOGRAPH - 0xE8F7: 0xF9BE, //CJK COMPATIBILITY IDEOGRAPH - 0xE8F8: 0x66DC, //CJK UNIFIED IDEOGRAPH - 0xE8F9: 0xF9BF, //CJK COMPATIBILITY IDEOGRAPH - 0xE8FA: 0x6A48, //CJK UNIFIED IDEOGRAPH - 0xE8FB: 0xF9C0, //CJK COMPATIBILITY IDEOGRAPH - 0xE8FC: 0x71FF, //CJK UNIFIED IDEOGRAPH - 0xE8FD: 0x7464, //CJK UNIFIED IDEOGRAPH - 0xE8FE: 0xF9C1, //CJK COMPATIBILITY IDEOGRAPH - 0xE9A1: 0x7A88, //CJK UNIFIED IDEOGRAPH - 0xE9A2: 0x7AAF, //CJK UNIFIED IDEOGRAPH - 0xE9A3: 0x7E47, //CJK UNIFIED IDEOGRAPH - 0xE9A4: 0x7E5E, //CJK UNIFIED IDEOGRAPH - 0xE9A5: 0x8000, //CJK UNIFIED IDEOGRAPH - 0xE9A6: 0x8170, //CJK UNIFIED IDEOGRAPH - 0xE9A7: 0xF9C2, //CJK COMPATIBILITY IDEOGRAPH - 0xE9A8: 0x87EF, //CJK UNIFIED IDEOGRAPH - 0xE9A9: 0x8981, //CJK UNIFIED IDEOGRAPH - 0xE9AA: 0x8B20, //CJK UNIFIED IDEOGRAPH - 0xE9AB: 0x9059, //CJK UNIFIED IDEOGRAPH - 0xE9AC: 0xF9C3, //CJK COMPATIBILITY IDEOGRAPH - 0xE9AD: 0x9080, //CJK UNIFIED IDEOGRAPH - 0xE9AE: 0x9952, //CJK UNIFIED IDEOGRAPH - 0xE9AF: 0x617E, //CJK UNIFIED IDEOGRAPH - 0xE9B0: 0x6B32, //CJK UNIFIED IDEOGRAPH - 0xE9B1: 0x6D74, //CJK UNIFIED IDEOGRAPH - 0xE9B2: 0x7E1F, //CJK UNIFIED IDEOGRAPH - 0xE9B3: 0x8925, //CJK UNIFIED IDEOGRAPH - 0xE9B4: 0x8FB1, //CJK UNIFIED IDEOGRAPH - 0xE9B5: 0x4FD1, //CJK UNIFIED IDEOGRAPH - 0xE9B6: 0x50AD, //CJK UNIFIED IDEOGRAPH - 0xE9B7: 0x5197, //CJK UNIFIED IDEOGRAPH - 0xE9B8: 0x52C7, //CJK UNIFIED IDEOGRAPH - 0xE9B9: 0x57C7, //CJK UNIFIED IDEOGRAPH - 0xE9BA: 0x5889, //CJK UNIFIED IDEOGRAPH - 0xE9BB: 0x5BB9, //CJK UNIFIED IDEOGRAPH - 0xE9BC: 0x5EB8, //CJK UNIFIED IDEOGRAPH - 0xE9BD: 0x6142, //CJK UNIFIED IDEOGRAPH - 0xE9BE: 0x6995, //CJK UNIFIED IDEOGRAPH - 0xE9BF: 0x6D8C, //CJK UNIFIED IDEOGRAPH - 0xE9C0: 0x6E67, //CJK UNIFIED IDEOGRAPH - 0xE9C1: 0x6EB6, //CJK UNIFIED IDEOGRAPH - 0xE9C2: 0x7194, //CJK UNIFIED IDEOGRAPH - 0xE9C3: 0x7462, //CJK UNIFIED IDEOGRAPH - 0xE9C4: 0x7528, //CJK UNIFIED IDEOGRAPH - 0xE9C5: 0x752C, //CJK UNIFIED IDEOGRAPH - 0xE9C6: 0x8073, //CJK UNIFIED IDEOGRAPH - 0xE9C7: 0x8338, //CJK UNIFIED IDEOGRAPH - 0xE9C8: 0x84C9, //CJK UNIFIED IDEOGRAPH - 0xE9C9: 0x8E0A, //CJK UNIFIED IDEOGRAPH - 0xE9CA: 0x9394, //CJK UNIFIED IDEOGRAPH - 0xE9CB: 0x93DE, //CJK UNIFIED IDEOGRAPH - 0xE9CC: 0xF9C4, //CJK COMPATIBILITY IDEOGRAPH - 0xE9CD: 0x4E8E, //CJK UNIFIED IDEOGRAPH - 0xE9CE: 0x4F51, //CJK UNIFIED IDEOGRAPH - 0xE9CF: 0x5076, //CJK UNIFIED IDEOGRAPH - 0xE9D0: 0x512A, //CJK UNIFIED IDEOGRAPH - 0xE9D1: 0x53C8, //CJK UNIFIED IDEOGRAPH - 0xE9D2: 0x53CB, //CJK UNIFIED IDEOGRAPH - 0xE9D3: 0x53F3, //CJK UNIFIED IDEOGRAPH - 0xE9D4: 0x5B87, //CJK UNIFIED IDEOGRAPH - 0xE9D5: 0x5BD3, //CJK UNIFIED IDEOGRAPH - 0xE9D6: 0x5C24, //CJK UNIFIED IDEOGRAPH - 0xE9D7: 0x611A, //CJK UNIFIED IDEOGRAPH - 0xE9D8: 0x6182, //CJK UNIFIED IDEOGRAPH - 0xE9D9: 0x65F4, //CJK UNIFIED IDEOGRAPH - 0xE9DA: 0x725B, //CJK UNIFIED IDEOGRAPH - 0xE9DB: 0x7397, //CJK UNIFIED IDEOGRAPH - 0xE9DC: 0x7440, //CJK UNIFIED IDEOGRAPH - 0xE9DD: 0x76C2, //CJK UNIFIED IDEOGRAPH - 0xE9DE: 0x7950, //CJK UNIFIED IDEOGRAPH - 0xE9DF: 0x7991, //CJK UNIFIED IDEOGRAPH - 0xE9E0: 0x79B9, //CJK UNIFIED IDEOGRAPH - 0xE9E1: 0x7D06, //CJK UNIFIED IDEOGRAPH - 0xE9E2: 0x7FBD, //CJK UNIFIED IDEOGRAPH - 0xE9E3: 0x828B, //CJK UNIFIED IDEOGRAPH - 0xE9E4: 0x85D5, //CJK UNIFIED IDEOGRAPH - 0xE9E5: 0x865E, //CJK UNIFIED IDEOGRAPH - 0xE9E6: 0x8FC2, //CJK UNIFIED IDEOGRAPH - 0xE9E7: 0x9047, //CJK UNIFIED IDEOGRAPH - 0xE9E8: 0x90F5, //CJK UNIFIED IDEOGRAPH - 0xE9E9: 0x91EA, //CJK UNIFIED IDEOGRAPH - 0xE9EA: 0x9685, //CJK UNIFIED IDEOGRAPH - 0xE9EB: 0x96E8, //CJK UNIFIED IDEOGRAPH - 0xE9EC: 0x96E9, //CJK UNIFIED IDEOGRAPH - 0xE9ED: 0x52D6, //CJK UNIFIED IDEOGRAPH - 0xE9EE: 0x5F67, //CJK UNIFIED IDEOGRAPH - 0xE9EF: 0x65ED, //CJK UNIFIED IDEOGRAPH - 0xE9F0: 0x6631, //CJK UNIFIED IDEOGRAPH - 0xE9F1: 0x682F, //CJK UNIFIED IDEOGRAPH - 0xE9F2: 0x715C, //CJK UNIFIED IDEOGRAPH - 0xE9F3: 0x7A36, //CJK UNIFIED IDEOGRAPH - 0xE9F4: 0x90C1, //CJK UNIFIED IDEOGRAPH - 0xE9F5: 0x980A, //CJK UNIFIED IDEOGRAPH - 0xE9F6: 0x4E91, //CJK UNIFIED IDEOGRAPH - 0xE9F7: 0xF9C5, //CJK COMPATIBILITY IDEOGRAPH - 0xE9F8: 0x6A52, //CJK UNIFIED IDEOGRAPH - 0xE9F9: 0x6B9E, //CJK UNIFIED IDEOGRAPH - 0xE9FA: 0x6F90, //CJK UNIFIED IDEOGRAPH - 0xE9FB: 0x7189, //CJK UNIFIED IDEOGRAPH - 0xE9FC: 0x8018, //CJK UNIFIED IDEOGRAPH - 0xE9FD: 0x82B8, //CJK UNIFIED IDEOGRAPH - 0xE9FE: 0x8553, //CJK UNIFIED IDEOGRAPH - 0xEAA1: 0x904B, //CJK UNIFIED IDEOGRAPH - 0xEAA2: 0x9695, //CJK UNIFIED IDEOGRAPH - 0xEAA3: 0x96F2, //CJK UNIFIED IDEOGRAPH - 0xEAA4: 0x97FB, //CJK UNIFIED IDEOGRAPH - 0xEAA5: 0x851A, //CJK UNIFIED IDEOGRAPH - 0xEAA6: 0x9B31, //CJK UNIFIED IDEOGRAPH - 0xEAA7: 0x4E90, //CJK UNIFIED IDEOGRAPH - 0xEAA8: 0x718A, //CJK UNIFIED IDEOGRAPH - 0xEAA9: 0x96C4, //CJK UNIFIED IDEOGRAPH - 0xEAAA: 0x5143, //CJK UNIFIED IDEOGRAPH - 0xEAAB: 0x539F, //CJK UNIFIED IDEOGRAPH - 0xEAAC: 0x54E1, //CJK UNIFIED IDEOGRAPH - 0xEAAD: 0x5713, //CJK UNIFIED IDEOGRAPH - 0xEAAE: 0x5712, //CJK UNIFIED IDEOGRAPH - 0xEAAF: 0x57A3, //CJK UNIFIED IDEOGRAPH - 0xEAB0: 0x5A9B, //CJK UNIFIED IDEOGRAPH - 0xEAB1: 0x5AC4, //CJK UNIFIED IDEOGRAPH - 0xEAB2: 0x5BC3, //CJK UNIFIED IDEOGRAPH - 0xEAB3: 0x6028, //CJK UNIFIED IDEOGRAPH - 0xEAB4: 0x613F, //CJK UNIFIED IDEOGRAPH - 0xEAB5: 0x63F4, //CJK UNIFIED IDEOGRAPH - 0xEAB6: 0x6C85, //CJK UNIFIED IDEOGRAPH - 0xEAB7: 0x6D39, //CJK UNIFIED IDEOGRAPH - 0xEAB8: 0x6E72, //CJK UNIFIED IDEOGRAPH - 0xEAB9: 0x6E90, //CJK UNIFIED IDEOGRAPH - 0xEABA: 0x7230, //CJK UNIFIED IDEOGRAPH - 0xEABB: 0x733F, //CJK UNIFIED IDEOGRAPH - 0xEABC: 0x7457, //CJK UNIFIED IDEOGRAPH - 0xEABD: 0x82D1, //CJK UNIFIED IDEOGRAPH - 0xEABE: 0x8881, //CJK UNIFIED IDEOGRAPH - 0xEABF: 0x8F45, //CJK UNIFIED IDEOGRAPH - 0xEAC0: 0x9060, //CJK UNIFIED IDEOGRAPH - 0xEAC1: 0xF9C6, //CJK COMPATIBILITY IDEOGRAPH - 0xEAC2: 0x9662, //CJK UNIFIED IDEOGRAPH - 0xEAC3: 0x9858, //CJK UNIFIED IDEOGRAPH - 0xEAC4: 0x9D1B, //CJK UNIFIED IDEOGRAPH - 0xEAC5: 0x6708, //CJK UNIFIED IDEOGRAPH - 0xEAC6: 0x8D8A, //CJK UNIFIED IDEOGRAPH - 0xEAC7: 0x925E, //CJK UNIFIED IDEOGRAPH - 0xEAC8: 0x4F4D, //CJK UNIFIED IDEOGRAPH - 0xEAC9: 0x5049, //CJK UNIFIED IDEOGRAPH - 0xEACA: 0x50DE, //CJK UNIFIED IDEOGRAPH - 0xEACB: 0x5371, //CJK UNIFIED IDEOGRAPH - 0xEACC: 0x570D, //CJK UNIFIED IDEOGRAPH - 0xEACD: 0x59D4, //CJK UNIFIED IDEOGRAPH - 0xEACE: 0x5A01, //CJK UNIFIED IDEOGRAPH - 0xEACF: 0x5C09, //CJK UNIFIED IDEOGRAPH - 0xEAD0: 0x6170, //CJK UNIFIED IDEOGRAPH - 0xEAD1: 0x6690, //CJK UNIFIED IDEOGRAPH - 0xEAD2: 0x6E2D, //CJK UNIFIED IDEOGRAPH - 0xEAD3: 0x7232, //CJK UNIFIED IDEOGRAPH - 0xEAD4: 0x744B, //CJK UNIFIED IDEOGRAPH - 0xEAD5: 0x7DEF, //CJK UNIFIED IDEOGRAPH - 0xEAD6: 0x80C3, //CJK UNIFIED IDEOGRAPH - 0xEAD7: 0x840E, //CJK UNIFIED IDEOGRAPH - 0xEAD8: 0x8466, //CJK UNIFIED IDEOGRAPH - 0xEAD9: 0x853F, //CJK UNIFIED IDEOGRAPH - 0xEADA: 0x875F, //CJK UNIFIED IDEOGRAPH - 0xEADB: 0x885B, //CJK UNIFIED IDEOGRAPH - 0xEADC: 0x8918, //CJK UNIFIED IDEOGRAPH - 0xEADD: 0x8B02, //CJK UNIFIED IDEOGRAPH - 0xEADE: 0x9055, //CJK UNIFIED IDEOGRAPH - 0xEADF: 0x97CB, //CJK UNIFIED IDEOGRAPH - 0xEAE0: 0x9B4F, //CJK UNIFIED IDEOGRAPH - 0xEAE1: 0x4E73, //CJK UNIFIED IDEOGRAPH - 0xEAE2: 0x4F91, //CJK UNIFIED IDEOGRAPH - 0xEAE3: 0x5112, //CJK UNIFIED IDEOGRAPH - 0xEAE4: 0x516A, //CJK UNIFIED IDEOGRAPH - 0xEAE5: 0xF9C7, //CJK COMPATIBILITY IDEOGRAPH - 0xEAE6: 0x552F, //CJK UNIFIED IDEOGRAPH - 0xEAE7: 0x55A9, //CJK UNIFIED IDEOGRAPH - 0xEAE8: 0x5B7A, //CJK UNIFIED IDEOGRAPH - 0xEAE9: 0x5BA5, //CJK UNIFIED IDEOGRAPH - 0xEAEA: 0x5E7C, //CJK UNIFIED IDEOGRAPH - 0xEAEB: 0x5E7D, //CJK UNIFIED IDEOGRAPH - 0xEAEC: 0x5EBE, //CJK UNIFIED IDEOGRAPH - 0xEAED: 0x60A0, //CJK UNIFIED IDEOGRAPH - 0xEAEE: 0x60DF, //CJK UNIFIED IDEOGRAPH - 0xEAEF: 0x6108, //CJK UNIFIED IDEOGRAPH - 0xEAF0: 0x6109, //CJK UNIFIED IDEOGRAPH - 0xEAF1: 0x63C4, //CJK UNIFIED IDEOGRAPH - 0xEAF2: 0x6538, //CJK UNIFIED IDEOGRAPH - 0xEAF3: 0x6709, //CJK UNIFIED IDEOGRAPH - 0xEAF4: 0xF9C8, //CJK COMPATIBILITY IDEOGRAPH - 0xEAF5: 0x67D4, //CJK UNIFIED IDEOGRAPH - 0xEAF6: 0x67DA, //CJK UNIFIED IDEOGRAPH - 0xEAF7: 0xF9C9, //CJK COMPATIBILITY IDEOGRAPH - 0xEAF8: 0x6961, //CJK UNIFIED IDEOGRAPH - 0xEAF9: 0x6962, //CJK UNIFIED IDEOGRAPH - 0xEAFA: 0x6CB9, //CJK UNIFIED IDEOGRAPH - 0xEAFB: 0x6D27, //CJK UNIFIED IDEOGRAPH - 0xEAFC: 0xF9CA, //CJK COMPATIBILITY IDEOGRAPH - 0xEAFD: 0x6E38, //CJK UNIFIED IDEOGRAPH - 0xEAFE: 0xF9CB, //CJK COMPATIBILITY IDEOGRAPH - 0xEBA1: 0x6FE1, //CJK UNIFIED IDEOGRAPH - 0xEBA2: 0x7336, //CJK UNIFIED IDEOGRAPH - 0xEBA3: 0x7337, //CJK UNIFIED IDEOGRAPH - 0xEBA4: 0xF9CC, //CJK COMPATIBILITY IDEOGRAPH - 0xEBA5: 0x745C, //CJK UNIFIED IDEOGRAPH - 0xEBA6: 0x7531, //CJK UNIFIED IDEOGRAPH - 0xEBA7: 0xF9CD, //CJK COMPATIBILITY IDEOGRAPH - 0xEBA8: 0x7652, //CJK UNIFIED IDEOGRAPH - 0xEBA9: 0xF9CE, //CJK COMPATIBILITY IDEOGRAPH - 0xEBAA: 0xF9CF, //CJK COMPATIBILITY IDEOGRAPH - 0xEBAB: 0x7DAD, //CJK UNIFIED IDEOGRAPH - 0xEBAC: 0x81FE, //CJK UNIFIED IDEOGRAPH - 0xEBAD: 0x8438, //CJK UNIFIED IDEOGRAPH - 0xEBAE: 0x88D5, //CJK UNIFIED IDEOGRAPH - 0xEBAF: 0x8A98, //CJK UNIFIED IDEOGRAPH - 0xEBB0: 0x8ADB, //CJK UNIFIED IDEOGRAPH - 0xEBB1: 0x8AED, //CJK UNIFIED IDEOGRAPH - 0xEBB2: 0x8E30, //CJK UNIFIED IDEOGRAPH - 0xEBB3: 0x8E42, //CJK UNIFIED IDEOGRAPH - 0xEBB4: 0x904A, //CJK UNIFIED IDEOGRAPH - 0xEBB5: 0x903E, //CJK UNIFIED IDEOGRAPH - 0xEBB6: 0x907A, //CJK UNIFIED IDEOGRAPH - 0xEBB7: 0x9149, //CJK UNIFIED IDEOGRAPH - 0xEBB8: 0x91C9, //CJK UNIFIED IDEOGRAPH - 0xEBB9: 0x936E, //CJK UNIFIED IDEOGRAPH - 0xEBBA: 0xF9D0, //CJK COMPATIBILITY IDEOGRAPH - 0xEBBB: 0xF9D1, //CJK COMPATIBILITY IDEOGRAPH - 0xEBBC: 0x5809, //CJK UNIFIED IDEOGRAPH - 0xEBBD: 0xF9D2, //CJK COMPATIBILITY IDEOGRAPH - 0xEBBE: 0x6BD3, //CJK UNIFIED IDEOGRAPH - 0xEBBF: 0x8089, //CJK UNIFIED IDEOGRAPH - 0xEBC0: 0x80B2, //CJK UNIFIED IDEOGRAPH - 0xEBC1: 0xF9D3, //CJK COMPATIBILITY IDEOGRAPH - 0xEBC2: 0xF9D4, //CJK COMPATIBILITY IDEOGRAPH - 0xEBC3: 0x5141, //CJK UNIFIED IDEOGRAPH - 0xEBC4: 0x596B, //CJK UNIFIED IDEOGRAPH - 0xEBC5: 0x5C39, //CJK UNIFIED IDEOGRAPH - 0xEBC6: 0xF9D5, //CJK COMPATIBILITY IDEOGRAPH - 0xEBC7: 0xF9D6, //CJK COMPATIBILITY IDEOGRAPH - 0xEBC8: 0x6F64, //CJK UNIFIED IDEOGRAPH - 0xEBC9: 0x73A7, //CJK UNIFIED IDEOGRAPH - 0xEBCA: 0x80E4, //CJK UNIFIED IDEOGRAPH - 0xEBCB: 0x8D07, //CJK UNIFIED IDEOGRAPH - 0xEBCC: 0xF9D7, //CJK COMPATIBILITY IDEOGRAPH - 0xEBCD: 0x9217, //CJK UNIFIED IDEOGRAPH - 0xEBCE: 0x958F, //CJK UNIFIED IDEOGRAPH - 0xEBCF: 0xF9D8, //CJK COMPATIBILITY IDEOGRAPH - 0xEBD0: 0xF9D9, //CJK COMPATIBILITY IDEOGRAPH - 0xEBD1: 0xF9DA, //CJK COMPATIBILITY IDEOGRAPH - 0xEBD2: 0xF9DB, //CJK COMPATIBILITY IDEOGRAPH - 0xEBD3: 0x807F, //CJK UNIFIED IDEOGRAPH - 0xEBD4: 0x620E, //CJK UNIFIED IDEOGRAPH - 0xEBD5: 0x701C, //CJK UNIFIED IDEOGRAPH - 0xEBD6: 0x7D68, //CJK UNIFIED IDEOGRAPH - 0xEBD7: 0x878D, //CJK UNIFIED IDEOGRAPH - 0xEBD8: 0xF9DC, //CJK COMPATIBILITY IDEOGRAPH - 0xEBD9: 0x57A0, //CJK UNIFIED IDEOGRAPH - 0xEBDA: 0x6069, //CJK UNIFIED IDEOGRAPH - 0xEBDB: 0x6147, //CJK UNIFIED IDEOGRAPH - 0xEBDC: 0x6BB7, //CJK UNIFIED IDEOGRAPH - 0xEBDD: 0x8ABE, //CJK UNIFIED IDEOGRAPH - 0xEBDE: 0x9280, //CJK UNIFIED IDEOGRAPH - 0xEBDF: 0x96B1, //CJK UNIFIED IDEOGRAPH - 0xEBE0: 0x4E59, //CJK UNIFIED IDEOGRAPH - 0xEBE1: 0x541F, //CJK UNIFIED IDEOGRAPH - 0xEBE2: 0x6DEB, //CJK UNIFIED IDEOGRAPH - 0xEBE3: 0x852D, //CJK UNIFIED IDEOGRAPH - 0xEBE4: 0x9670, //CJK UNIFIED IDEOGRAPH - 0xEBE5: 0x97F3, //CJK UNIFIED IDEOGRAPH - 0xEBE6: 0x98EE, //CJK UNIFIED IDEOGRAPH - 0xEBE7: 0x63D6, //CJK UNIFIED IDEOGRAPH - 0xEBE8: 0x6CE3, //CJK UNIFIED IDEOGRAPH - 0xEBE9: 0x9091, //CJK UNIFIED IDEOGRAPH - 0xEBEA: 0x51DD, //CJK UNIFIED IDEOGRAPH - 0xEBEB: 0x61C9, //CJK UNIFIED IDEOGRAPH - 0xEBEC: 0x81BA, //CJK UNIFIED IDEOGRAPH - 0xEBED: 0x9DF9, //CJK UNIFIED IDEOGRAPH - 0xEBEE: 0x4F9D, //CJK UNIFIED IDEOGRAPH - 0xEBEF: 0x501A, //CJK UNIFIED IDEOGRAPH - 0xEBF0: 0x5100, //CJK UNIFIED IDEOGRAPH - 0xEBF1: 0x5B9C, //CJK UNIFIED IDEOGRAPH - 0xEBF2: 0x610F, //CJK UNIFIED IDEOGRAPH - 0xEBF3: 0x61FF, //CJK UNIFIED IDEOGRAPH - 0xEBF4: 0x64EC, //CJK UNIFIED IDEOGRAPH - 0xEBF5: 0x6905, //CJK UNIFIED IDEOGRAPH - 0xEBF6: 0x6BC5, //CJK UNIFIED IDEOGRAPH - 0xEBF7: 0x7591, //CJK UNIFIED IDEOGRAPH - 0xEBF8: 0x77E3, //CJK UNIFIED IDEOGRAPH - 0xEBF9: 0x7FA9, //CJK UNIFIED IDEOGRAPH - 0xEBFA: 0x8264, //CJK UNIFIED IDEOGRAPH - 0xEBFB: 0x858F, //CJK UNIFIED IDEOGRAPH - 0xEBFC: 0x87FB, //CJK UNIFIED IDEOGRAPH - 0xEBFD: 0x8863, //CJK UNIFIED IDEOGRAPH - 0xEBFE: 0x8ABC, //CJK UNIFIED IDEOGRAPH - 0xECA1: 0x8B70, //CJK UNIFIED IDEOGRAPH - 0xECA2: 0x91AB, //CJK UNIFIED IDEOGRAPH - 0xECA3: 0x4E8C, //CJK UNIFIED IDEOGRAPH - 0xECA4: 0x4EE5, //CJK UNIFIED IDEOGRAPH - 0xECA5: 0x4F0A, //CJK UNIFIED IDEOGRAPH - 0xECA6: 0xF9DD, //CJK COMPATIBILITY IDEOGRAPH - 0xECA7: 0xF9DE, //CJK COMPATIBILITY IDEOGRAPH - 0xECA8: 0x5937, //CJK UNIFIED IDEOGRAPH - 0xECA9: 0x59E8, //CJK UNIFIED IDEOGRAPH - 0xECAA: 0xF9DF, //CJK COMPATIBILITY IDEOGRAPH - 0xECAB: 0x5DF2, //CJK UNIFIED IDEOGRAPH - 0xECAC: 0x5F1B, //CJK UNIFIED IDEOGRAPH - 0xECAD: 0x5F5B, //CJK UNIFIED IDEOGRAPH - 0xECAE: 0x6021, //CJK UNIFIED IDEOGRAPH - 0xECAF: 0xF9E0, //CJK COMPATIBILITY IDEOGRAPH - 0xECB0: 0xF9E1, //CJK COMPATIBILITY IDEOGRAPH - 0xECB1: 0xF9E2, //CJK COMPATIBILITY IDEOGRAPH - 0xECB2: 0xF9E3, //CJK COMPATIBILITY IDEOGRAPH - 0xECB3: 0x723E, //CJK UNIFIED IDEOGRAPH - 0xECB4: 0x73E5, //CJK UNIFIED IDEOGRAPH - 0xECB5: 0xF9E4, //CJK COMPATIBILITY IDEOGRAPH - 0xECB6: 0x7570, //CJK UNIFIED IDEOGRAPH - 0xECB7: 0x75CD, //CJK UNIFIED IDEOGRAPH - 0xECB8: 0xF9E5, //CJK COMPATIBILITY IDEOGRAPH - 0xECB9: 0x79FB, //CJK UNIFIED IDEOGRAPH - 0xECBA: 0xF9E6, //CJK COMPATIBILITY IDEOGRAPH - 0xECBB: 0x800C, //CJK UNIFIED IDEOGRAPH - 0xECBC: 0x8033, //CJK UNIFIED IDEOGRAPH - 0xECBD: 0x8084, //CJK UNIFIED IDEOGRAPH - 0xECBE: 0x82E1, //CJK UNIFIED IDEOGRAPH - 0xECBF: 0x8351, //CJK UNIFIED IDEOGRAPH - 0xECC0: 0xF9E7, //CJK COMPATIBILITY IDEOGRAPH - 0xECC1: 0xF9E8, //CJK COMPATIBILITY IDEOGRAPH - 0xECC2: 0x8CBD, //CJK UNIFIED IDEOGRAPH - 0xECC3: 0x8CB3, //CJK UNIFIED IDEOGRAPH - 0xECC4: 0x9087, //CJK UNIFIED IDEOGRAPH - 0xECC5: 0xF9E9, //CJK COMPATIBILITY IDEOGRAPH - 0xECC6: 0xF9EA, //CJK COMPATIBILITY IDEOGRAPH - 0xECC7: 0x98F4, //CJK UNIFIED IDEOGRAPH - 0xECC8: 0x990C, //CJK UNIFIED IDEOGRAPH - 0xECC9: 0xF9EB, //CJK COMPATIBILITY IDEOGRAPH - 0xECCA: 0xF9EC, //CJK COMPATIBILITY IDEOGRAPH - 0xECCB: 0x7037, //CJK UNIFIED IDEOGRAPH - 0xECCC: 0x76CA, //CJK UNIFIED IDEOGRAPH - 0xECCD: 0x7FCA, //CJK UNIFIED IDEOGRAPH - 0xECCE: 0x7FCC, //CJK UNIFIED IDEOGRAPH - 0xECCF: 0x7FFC, //CJK UNIFIED IDEOGRAPH - 0xECD0: 0x8B1A, //CJK UNIFIED IDEOGRAPH - 0xECD1: 0x4EBA, //CJK UNIFIED IDEOGRAPH - 0xECD2: 0x4EC1, //CJK UNIFIED IDEOGRAPH - 0xECD3: 0x5203, //CJK UNIFIED IDEOGRAPH - 0xECD4: 0x5370, //CJK UNIFIED IDEOGRAPH - 0xECD5: 0xF9ED, //CJK COMPATIBILITY IDEOGRAPH - 0xECD6: 0x54BD, //CJK UNIFIED IDEOGRAPH - 0xECD7: 0x56E0, //CJK UNIFIED IDEOGRAPH - 0xECD8: 0x59FB, //CJK UNIFIED IDEOGRAPH - 0xECD9: 0x5BC5, //CJK UNIFIED IDEOGRAPH - 0xECDA: 0x5F15, //CJK UNIFIED IDEOGRAPH - 0xECDB: 0x5FCD, //CJK UNIFIED IDEOGRAPH - 0xECDC: 0x6E6E, //CJK UNIFIED IDEOGRAPH - 0xECDD: 0xF9EE, //CJK COMPATIBILITY IDEOGRAPH - 0xECDE: 0xF9EF, //CJK COMPATIBILITY IDEOGRAPH - 0xECDF: 0x7D6A, //CJK UNIFIED IDEOGRAPH - 0xECE0: 0x8335, //CJK UNIFIED IDEOGRAPH - 0xECE1: 0xF9F0, //CJK COMPATIBILITY IDEOGRAPH - 0xECE2: 0x8693, //CJK UNIFIED IDEOGRAPH - 0xECE3: 0x8A8D, //CJK UNIFIED IDEOGRAPH - 0xECE4: 0xF9F1, //CJK COMPATIBILITY IDEOGRAPH - 0xECE5: 0x976D, //CJK UNIFIED IDEOGRAPH - 0xECE6: 0x9777, //CJK UNIFIED IDEOGRAPH - 0xECE7: 0xF9F2, //CJK COMPATIBILITY IDEOGRAPH - 0xECE8: 0xF9F3, //CJK COMPATIBILITY IDEOGRAPH - 0xECE9: 0x4E00, //CJK UNIFIED IDEOGRAPH - 0xECEA: 0x4F5A, //CJK UNIFIED IDEOGRAPH - 0xECEB: 0x4F7E, //CJK UNIFIED IDEOGRAPH - 0xECEC: 0x58F9, //CJK UNIFIED IDEOGRAPH - 0xECED: 0x65E5, //CJK UNIFIED IDEOGRAPH - 0xECEE: 0x6EA2, //CJK UNIFIED IDEOGRAPH - 0xECEF: 0x9038, //CJK UNIFIED IDEOGRAPH - 0xECF0: 0x93B0, //CJK UNIFIED IDEOGRAPH - 0xECF1: 0x99B9, //CJK UNIFIED IDEOGRAPH - 0xECF2: 0x4EFB, //CJK UNIFIED IDEOGRAPH - 0xECF3: 0x58EC, //CJK UNIFIED IDEOGRAPH - 0xECF4: 0x598A, //CJK UNIFIED IDEOGRAPH - 0xECF5: 0x59D9, //CJK UNIFIED IDEOGRAPH - 0xECF6: 0x6041, //CJK UNIFIED IDEOGRAPH - 0xECF7: 0xF9F4, //CJK COMPATIBILITY IDEOGRAPH - 0xECF8: 0xF9F5, //CJK COMPATIBILITY IDEOGRAPH - 0xECF9: 0x7A14, //CJK UNIFIED IDEOGRAPH - 0xECFA: 0xF9F6, //CJK COMPATIBILITY IDEOGRAPH - 0xECFB: 0x834F, //CJK UNIFIED IDEOGRAPH - 0xECFC: 0x8CC3, //CJK UNIFIED IDEOGRAPH - 0xECFD: 0x5165, //CJK UNIFIED IDEOGRAPH - 0xECFE: 0x5344, //CJK UNIFIED IDEOGRAPH - 0xEDA1: 0xF9F7, //CJK COMPATIBILITY IDEOGRAPH - 0xEDA2: 0xF9F8, //CJK COMPATIBILITY IDEOGRAPH - 0xEDA3: 0xF9F9, //CJK COMPATIBILITY IDEOGRAPH - 0xEDA4: 0x4ECD, //CJK UNIFIED IDEOGRAPH - 0xEDA5: 0x5269, //CJK UNIFIED IDEOGRAPH - 0xEDA6: 0x5B55, //CJK UNIFIED IDEOGRAPH - 0xEDA7: 0x82BF, //CJK UNIFIED IDEOGRAPH - 0xEDA8: 0x4ED4, //CJK UNIFIED IDEOGRAPH - 0xEDA9: 0x523A, //CJK UNIFIED IDEOGRAPH - 0xEDAA: 0x54A8, //CJK UNIFIED IDEOGRAPH - 0xEDAB: 0x59C9, //CJK UNIFIED IDEOGRAPH - 0xEDAC: 0x59FF, //CJK UNIFIED IDEOGRAPH - 0xEDAD: 0x5B50, //CJK UNIFIED IDEOGRAPH - 0xEDAE: 0x5B57, //CJK UNIFIED IDEOGRAPH - 0xEDAF: 0x5B5C, //CJK UNIFIED IDEOGRAPH - 0xEDB0: 0x6063, //CJK UNIFIED IDEOGRAPH - 0xEDB1: 0x6148, //CJK UNIFIED IDEOGRAPH - 0xEDB2: 0x6ECB, //CJK UNIFIED IDEOGRAPH - 0xEDB3: 0x7099, //CJK UNIFIED IDEOGRAPH - 0xEDB4: 0x716E, //CJK UNIFIED IDEOGRAPH - 0xEDB5: 0x7386, //CJK UNIFIED IDEOGRAPH - 0xEDB6: 0x74F7, //CJK UNIFIED IDEOGRAPH - 0xEDB7: 0x75B5, //CJK UNIFIED IDEOGRAPH - 0xEDB8: 0x78C1, //CJK UNIFIED IDEOGRAPH - 0xEDB9: 0x7D2B, //CJK UNIFIED IDEOGRAPH - 0xEDBA: 0x8005, //CJK UNIFIED IDEOGRAPH - 0xEDBB: 0x81EA, //CJK UNIFIED IDEOGRAPH - 0xEDBC: 0x8328, //CJK UNIFIED IDEOGRAPH - 0xEDBD: 0x8517, //CJK UNIFIED IDEOGRAPH - 0xEDBE: 0x85C9, //CJK UNIFIED IDEOGRAPH - 0xEDBF: 0x8AEE, //CJK UNIFIED IDEOGRAPH - 0xEDC0: 0x8CC7, //CJK UNIFIED IDEOGRAPH - 0xEDC1: 0x96CC, //CJK UNIFIED IDEOGRAPH - 0xEDC2: 0x4F5C, //CJK UNIFIED IDEOGRAPH - 0xEDC3: 0x52FA, //CJK UNIFIED IDEOGRAPH - 0xEDC4: 0x56BC, //CJK UNIFIED IDEOGRAPH - 0xEDC5: 0x65AB, //CJK UNIFIED IDEOGRAPH - 0xEDC6: 0x6628, //CJK UNIFIED IDEOGRAPH - 0xEDC7: 0x707C, //CJK UNIFIED IDEOGRAPH - 0xEDC8: 0x70B8, //CJK UNIFIED IDEOGRAPH - 0xEDC9: 0x7235, //CJK UNIFIED IDEOGRAPH - 0xEDCA: 0x7DBD, //CJK UNIFIED IDEOGRAPH - 0xEDCB: 0x828D, //CJK UNIFIED IDEOGRAPH - 0xEDCC: 0x914C, //CJK UNIFIED IDEOGRAPH - 0xEDCD: 0x96C0, //CJK UNIFIED IDEOGRAPH - 0xEDCE: 0x9D72, //CJK UNIFIED IDEOGRAPH - 0xEDCF: 0x5B71, //CJK UNIFIED IDEOGRAPH - 0xEDD0: 0x68E7, //CJK UNIFIED IDEOGRAPH - 0xEDD1: 0x6B98, //CJK UNIFIED IDEOGRAPH - 0xEDD2: 0x6F7A, //CJK UNIFIED IDEOGRAPH - 0xEDD3: 0x76DE, //CJK UNIFIED IDEOGRAPH - 0xEDD4: 0x5C91, //CJK UNIFIED IDEOGRAPH - 0xEDD5: 0x66AB, //CJK UNIFIED IDEOGRAPH - 0xEDD6: 0x6F5B, //CJK UNIFIED IDEOGRAPH - 0xEDD7: 0x7BB4, //CJK UNIFIED IDEOGRAPH - 0xEDD8: 0x7C2A, //CJK UNIFIED IDEOGRAPH - 0xEDD9: 0x8836, //CJK UNIFIED IDEOGRAPH - 0xEDDA: 0x96DC, //CJK UNIFIED IDEOGRAPH - 0xEDDB: 0x4E08, //CJK UNIFIED IDEOGRAPH - 0xEDDC: 0x4ED7, //CJK UNIFIED IDEOGRAPH - 0xEDDD: 0x5320, //CJK UNIFIED IDEOGRAPH - 0xEDDE: 0x5834, //CJK UNIFIED IDEOGRAPH - 0xEDDF: 0x58BB, //CJK UNIFIED IDEOGRAPH - 0xEDE0: 0x58EF, //CJK UNIFIED IDEOGRAPH - 0xEDE1: 0x596C, //CJK UNIFIED IDEOGRAPH - 0xEDE2: 0x5C07, //CJK UNIFIED IDEOGRAPH - 0xEDE3: 0x5E33, //CJK UNIFIED IDEOGRAPH - 0xEDE4: 0x5E84, //CJK UNIFIED IDEOGRAPH - 0xEDE5: 0x5F35, //CJK UNIFIED IDEOGRAPH - 0xEDE6: 0x638C, //CJK UNIFIED IDEOGRAPH - 0xEDE7: 0x66B2, //CJK UNIFIED IDEOGRAPH - 0xEDE8: 0x6756, //CJK UNIFIED IDEOGRAPH - 0xEDE9: 0x6A1F, //CJK UNIFIED IDEOGRAPH - 0xEDEA: 0x6AA3, //CJK UNIFIED IDEOGRAPH - 0xEDEB: 0x6B0C, //CJK UNIFIED IDEOGRAPH - 0xEDEC: 0x6F3F, //CJK UNIFIED IDEOGRAPH - 0xEDED: 0x7246, //CJK UNIFIED IDEOGRAPH - 0xEDEE: 0xF9FA, //CJK COMPATIBILITY IDEOGRAPH - 0xEDEF: 0x7350, //CJK UNIFIED IDEOGRAPH - 0xEDF0: 0x748B, //CJK UNIFIED IDEOGRAPH - 0xEDF1: 0x7AE0, //CJK UNIFIED IDEOGRAPH - 0xEDF2: 0x7CA7, //CJK UNIFIED IDEOGRAPH - 0xEDF3: 0x8178, //CJK UNIFIED IDEOGRAPH - 0xEDF4: 0x81DF, //CJK UNIFIED IDEOGRAPH - 0xEDF5: 0x81E7, //CJK UNIFIED IDEOGRAPH - 0xEDF6: 0x838A, //CJK UNIFIED IDEOGRAPH - 0xEDF7: 0x846C, //CJK UNIFIED IDEOGRAPH - 0xEDF8: 0x8523, //CJK UNIFIED IDEOGRAPH - 0xEDF9: 0x8594, //CJK UNIFIED IDEOGRAPH - 0xEDFA: 0x85CF, //CJK UNIFIED IDEOGRAPH - 0xEDFB: 0x88DD, //CJK UNIFIED IDEOGRAPH - 0xEDFC: 0x8D13, //CJK UNIFIED IDEOGRAPH - 0xEDFD: 0x91AC, //CJK UNIFIED IDEOGRAPH - 0xEDFE: 0x9577, //CJK UNIFIED IDEOGRAPH - 0xEEA1: 0x969C, //CJK UNIFIED IDEOGRAPH - 0xEEA2: 0x518D, //CJK UNIFIED IDEOGRAPH - 0xEEA3: 0x54C9, //CJK UNIFIED IDEOGRAPH - 0xEEA4: 0x5728, //CJK UNIFIED IDEOGRAPH - 0xEEA5: 0x5BB0, //CJK UNIFIED IDEOGRAPH - 0xEEA6: 0x624D, //CJK UNIFIED IDEOGRAPH - 0xEEA7: 0x6750, //CJK UNIFIED IDEOGRAPH - 0xEEA8: 0x683D, //CJK UNIFIED IDEOGRAPH - 0xEEA9: 0x6893, //CJK UNIFIED IDEOGRAPH - 0xEEAA: 0x6E3D, //CJK UNIFIED IDEOGRAPH - 0xEEAB: 0x6ED3, //CJK UNIFIED IDEOGRAPH - 0xEEAC: 0x707D, //CJK UNIFIED IDEOGRAPH - 0xEEAD: 0x7E21, //CJK UNIFIED IDEOGRAPH - 0xEEAE: 0x88C1, //CJK UNIFIED IDEOGRAPH - 0xEEAF: 0x8CA1, //CJK UNIFIED IDEOGRAPH - 0xEEB0: 0x8F09, //CJK UNIFIED IDEOGRAPH - 0xEEB1: 0x9F4B, //CJK UNIFIED IDEOGRAPH - 0xEEB2: 0x9F4E, //CJK UNIFIED IDEOGRAPH - 0xEEB3: 0x722D, //CJK UNIFIED IDEOGRAPH - 0xEEB4: 0x7B8F, //CJK UNIFIED IDEOGRAPH - 0xEEB5: 0x8ACD, //CJK UNIFIED IDEOGRAPH - 0xEEB6: 0x931A, //CJK UNIFIED IDEOGRAPH - 0xEEB7: 0x4F47, //CJK UNIFIED IDEOGRAPH - 0xEEB8: 0x4F4E, //CJK UNIFIED IDEOGRAPH - 0xEEB9: 0x5132, //CJK UNIFIED IDEOGRAPH - 0xEEBA: 0x5480, //CJK UNIFIED IDEOGRAPH - 0xEEBB: 0x59D0, //CJK UNIFIED IDEOGRAPH - 0xEEBC: 0x5E95, //CJK UNIFIED IDEOGRAPH - 0xEEBD: 0x62B5, //CJK UNIFIED IDEOGRAPH - 0xEEBE: 0x6775, //CJK UNIFIED IDEOGRAPH - 0xEEBF: 0x696E, //CJK UNIFIED IDEOGRAPH - 0xEEC0: 0x6A17, //CJK UNIFIED IDEOGRAPH - 0xEEC1: 0x6CAE, //CJK UNIFIED IDEOGRAPH - 0xEEC2: 0x6E1A, //CJK UNIFIED IDEOGRAPH - 0xEEC3: 0x72D9, //CJK UNIFIED IDEOGRAPH - 0xEEC4: 0x732A, //CJK UNIFIED IDEOGRAPH - 0xEEC5: 0x75BD, //CJK UNIFIED IDEOGRAPH - 0xEEC6: 0x7BB8, //CJK UNIFIED IDEOGRAPH - 0xEEC7: 0x7D35, //CJK UNIFIED IDEOGRAPH - 0xEEC8: 0x82E7, //CJK UNIFIED IDEOGRAPH - 0xEEC9: 0x83F9, //CJK UNIFIED IDEOGRAPH - 0xEECA: 0x8457, //CJK UNIFIED IDEOGRAPH - 0xEECB: 0x85F7, //CJK UNIFIED IDEOGRAPH - 0xEECC: 0x8A5B, //CJK UNIFIED IDEOGRAPH - 0xEECD: 0x8CAF, //CJK UNIFIED IDEOGRAPH - 0xEECE: 0x8E87, //CJK UNIFIED IDEOGRAPH - 0xEECF: 0x9019, //CJK UNIFIED IDEOGRAPH - 0xEED0: 0x90B8, //CJK UNIFIED IDEOGRAPH - 0xEED1: 0x96CE, //CJK UNIFIED IDEOGRAPH - 0xEED2: 0x9F5F, //CJK UNIFIED IDEOGRAPH - 0xEED3: 0x52E3, //CJK UNIFIED IDEOGRAPH - 0xEED4: 0x540A, //CJK UNIFIED IDEOGRAPH - 0xEED5: 0x5AE1, //CJK UNIFIED IDEOGRAPH - 0xEED6: 0x5BC2, //CJK UNIFIED IDEOGRAPH - 0xEED7: 0x6458, //CJK UNIFIED IDEOGRAPH - 0xEED8: 0x6575, //CJK UNIFIED IDEOGRAPH - 0xEED9: 0x6EF4, //CJK UNIFIED IDEOGRAPH - 0xEEDA: 0x72C4, //CJK UNIFIED IDEOGRAPH - 0xEEDB: 0xF9FB, //CJK COMPATIBILITY IDEOGRAPH - 0xEEDC: 0x7684, //CJK UNIFIED IDEOGRAPH - 0xEEDD: 0x7A4D, //CJK UNIFIED IDEOGRAPH - 0xEEDE: 0x7B1B, //CJK UNIFIED IDEOGRAPH - 0xEEDF: 0x7C4D, //CJK UNIFIED IDEOGRAPH - 0xEEE0: 0x7E3E, //CJK UNIFIED IDEOGRAPH - 0xEEE1: 0x7FDF, //CJK UNIFIED IDEOGRAPH - 0xEEE2: 0x837B, //CJK UNIFIED IDEOGRAPH - 0xEEE3: 0x8B2B, //CJK UNIFIED IDEOGRAPH - 0xEEE4: 0x8CCA, //CJK UNIFIED IDEOGRAPH - 0xEEE5: 0x8D64, //CJK UNIFIED IDEOGRAPH - 0xEEE6: 0x8DE1, //CJK UNIFIED IDEOGRAPH - 0xEEE7: 0x8E5F, //CJK UNIFIED IDEOGRAPH - 0xEEE8: 0x8FEA, //CJK UNIFIED IDEOGRAPH - 0xEEE9: 0x8FF9, //CJK UNIFIED IDEOGRAPH - 0xEEEA: 0x9069, //CJK UNIFIED IDEOGRAPH - 0xEEEB: 0x93D1, //CJK UNIFIED IDEOGRAPH - 0xEEEC: 0x4F43, //CJK UNIFIED IDEOGRAPH - 0xEEED: 0x4F7A, //CJK UNIFIED IDEOGRAPH - 0xEEEE: 0x50B3, //CJK UNIFIED IDEOGRAPH - 0xEEEF: 0x5168, //CJK UNIFIED IDEOGRAPH - 0xEEF0: 0x5178, //CJK UNIFIED IDEOGRAPH - 0xEEF1: 0x524D, //CJK UNIFIED IDEOGRAPH - 0xEEF2: 0x526A, //CJK UNIFIED IDEOGRAPH - 0xEEF3: 0x5861, //CJK UNIFIED IDEOGRAPH - 0xEEF4: 0x587C, //CJK UNIFIED IDEOGRAPH - 0xEEF5: 0x5960, //CJK UNIFIED IDEOGRAPH - 0xEEF6: 0x5C08, //CJK UNIFIED IDEOGRAPH - 0xEEF7: 0x5C55, //CJK UNIFIED IDEOGRAPH - 0xEEF8: 0x5EDB, //CJK UNIFIED IDEOGRAPH - 0xEEF9: 0x609B, //CJK UNIFIED IDEOGRAPH - 0xEEFA: 0x6230, //CJK UNIFIED IDEOGRAPH - 0xEEFB: 0x6813, //CJK UNIFIED IDEOGRAPH - 0xEEFC: 0x6BBF, //CJK UNIFIED IDEOGRAPH - 0xEEFD: 0x6C08, //CJK UNIFIED IDEOGRAPH - 0xEEFE: 0x6FB1, //CJK UNIFIED IDEOGRAPH - 0xEFA1: 0x714E, //CJK UNIFIED IDEOGRAPH - 0xEFA2: 0x7420, //CJK UNIFIED IDEOGRAPH - 0xEFA3: 0x7530, //CJK UNIFIED IDEOGRAPH - 0xEFA4: 0x7538, //CJK UNIFIED IDEOGRAPH - 0xEFA5: 0x7551, //CJK UNIFIED IDEOGRAPH - 0xEFA6: 0x7672, //CJK UNIFIED IDEOGRAPH - 0xEFA7: 0x7B4C, //CJK UNIFIED IDEOGRAPH - 0xEFA8: 0x7B8B, //CJK UNIFIED IDEOGRAPH - 0xEFA9: 0x7BAD, //CJK UNIFIED IDEOGRAPH - 0xEFAA: 0x7BC6, //CJK UNIFIED IDEOGRAPH - 0xEFAB: 0x7E8F, //CJK UNIFIED IDEOGRAPH - 0xEFAC: 0x8A6E, //CJK UNIFIED IDEOGRAPH - 0xEFAD: 0x8F3E, //CJK UNIFIED IDEOGRAPH - 0xEFAE: 0x8F49, //CJK UNIFIED IDEOGRAPH - 0xEFAF: 0x923F, //CJK UNIFIED IDEOGRAPH - 0xEFB0: 0x9293, //CJK UNIFIED IDEOGRAPH - 0xEFB1: 0x9322, //CJK UNIFIED IDEOGRAPH - 0xEFB2: 0x942B, //CJK UNIFIED IDEOGRAPH - 0xEFB3: 0x96FB, //CJK UNIFIED IDEOGRAPH - 0xEFB4: 0x985A, //CJK UNIFIED IDEOGRAPH - 0xEFB5: 0x986B, //CJK UNIFIED IDEOGRAPH - 0xEFB6: 0x991E, //CJK UNIFIED IDEOGRAPH - 0xEFB7: 0x5207, //CJK UNIFIED IDEOGRAPH - 0xEFB8: 0x622A, //CJK UNIFIED IDEOGRAPH - 0xEFB9: 0x6298, //CJK UNIFIED IDEOGRAPH - 0xEFBA: 0x6D59, //CJK UNIFIED IDEOGRAPH - 0xEFBB: 0x7664, //CJK UNIFIED IDEOGRAPH - 0xEFBC: 0x7ACA, //CJK UNIFIED IDEOGRAPH - 0xEFBD: 0x7BC0, //CJK UNIFIED IDEOGRAPH - 0xEFBE: 0x7D76, //CJK UNIFIED IDEOGRAPH - 0xEFBF: 0x5360, //CJK UNIFIED IDEOGRAPH - 0xEFC0: 0x5CBE, //CJK UNIFIED IDEOGRAPH - 0xEFC1: 0x5E97, //CJK UNIFIED IDEOGRAPH - 0xEFC2: 0x6F38, //CJK UNIFIED IDEOGRAPH - 0xEFC3: 0x70B9, //CJK UNIFIED IDEOGRAPH - 0xEFC4: 0x7C98, //CJK UNIFIED IDEOGRAPH - 0xEFC5: 0x9711, //CJK UNIFIED IDEOGRAPH - 0xEFC6: 0x9B8E, //CJK UNIFIED IDEOGRAPH - 0xEFC7: 0x9EDE, //CJK UNIFIED IDEOGRAPH - 0xEFC8: 0x63A5, //CJK UNIFIED IDEOGRAPH - 0xEFC9: 0x647A, //CJK UNIFIED IDEOGRAPH - 0xEFCA: 0x8776, //CJK UNIFIED IDEOGRAPH - 0xEFCB: 0x4E01, //CJK UNIFIED IDEOGRAPH - 0xEFCC: 0x4E95, //CJK UNIFIED IDEOGRAPH - 0xEFCD: 0x4EAD, //CJK UNIFIED IDEOGRAPH - 0xEFCE: 0x505C, //CJK UNIFIED IDEOGRAPH - 0xEFCF: 0x5075, //CJK UNIFIED IDEOGRAPH - 0xEFD0: 0x5448, //CJK UNIFIED IDEOGRAPH - 0xEFD1: 0x59C3, //CJK UNIFIED IDEOGRAPH - 0xEFD2: 0x5B9A, //CJK UNIFIED IDEOGRAPH - 0xEFD3: 0x5E40, //CJK UNIFIED IDEOGRAPH - 0xEFD4: 0x5EAD, //CJK UNIFIED IDEOGRAPH - 0xEFD5: 0x5EF7, //CJK UNIFIED IDEOGRAPH - 0xEFD6: 0x5F81, //CJK UNIFIED IDEOGRAPH - 0xEFD7: 0x60C5, //CJK UNIFIED IDEOGRAPH - 0xEFD8: 0x633A, //CJK UNIFIED IDEOGRAPH - 0xEFD9: 0x653F, //CJK UNIFIED IDEOGRAPH - 0xEFDA: 0x6574, //CJK UNIFIED IDEOGRAPH - 0xEFDB: 0x65CC, //CJK UNIFIED IDEOGRAPH - 0xEFDC: 0x6676, //CJK UNIFIED IDEOGRAPH - 0xEFDD: 0x6678, //CJK UNIFIED IDEOGRAPH - 0xEFDE: 0x67FE, //CJK UNIFIED IDEOGRAPH - 0xEFDF: 0x6968, //CJK UNIFIED IDEOGRAPH - 0xEFE0: 0x6A89, //CJK UNIFIED IDEOGRAPH - 0xEFE1: 0x6B63, //CJK UNIFIED IDEOGRAPH - 0xEFE2: 0x6C40, //CJK UNIFIED IDEOGRAPH - 0xEFE3: 0x6DC0, //CJK UNIFIED IDEOGRAPH - 0xEFE4: 0x6DE8, //CJK UNIFIED IDEOGRAPH - 0xEFE5: 0x6E1F, //CJK UNIFIED IDEOGRAPH - 0xEFE6: 0x6E5E, //CJK UNIFIED IDEOGRAPH - 0xEFE7: 0x701E, //CJK UNIFIED IDEOGRAPH - 0xEFE8: 0x70A1, //CJK UNIFIED IDEOGRAPH - 0xEFE9: 0x738E, //CJK UNIFIED IDEOGRAPH - 0xEFEA: 0x73FD, //CJK UNIFIED IDEOGRAPH - 0xEFEB: 0x753A, //CJK UNIFIED IDEOGRAPH - 0xEFEC: 0x775B, //CJK UNIFIED IDEOGRAPH - 0xEFED: 0x7887, //CJK UNIFIED IDEOGRAPH - 0xEFEE: 0x798E, //CJK UNIFIED IDEOGRAPH - 0xEFEF: 0x7A0B, //CJK UNIFIED IDEOGRAPH - 0xEFF0: 0x7A7D, //CJK UNIFIED IDEOGRAPH - 0xEFF1: 0x7CBE, //CJK UNIFIED IDEOGRAPH - 0xEFF2: 0x7D8E, //CJK UNIFIED IDEOGRAPH - 0xEFF3: 0x8247, //CJK UNIFIED IDEOGRAPH - 0xEFF4: 0x8A02, //CJK UNIFIED IDEOGRAPH - 0xEFF5: 0x8AEA, //CJK UNIFIED IDEOGRAPH - 0xEFF6: 0x8C9E, //CJK UNIFIED IDEOGRAPH - 0xEFF7: 0x912D, //CJK UNIFIED IDEOGRAPH - 0xEFF8: 0x914A, //CJK UNIFIED IDEOGRAPH - 0xEFF9: 0x91D8, //CJK UNIFIED IDEOGRAPH - 0xEFFA: 0x9266, //CJK UNIFIED IDEOGRAPH - 0xEFFB: 0x92CC, //CJK UNIFIED IDEOGRAPH - 0xEFFC: 0x9320, //CJK UNIFIED IDEOGRAPH - 0xEFFD: 0x9706, //CJK UNIFIED IDEOGRAPH - 0xEFFE: 0x9756, //CJK UNIFIED IDEOGRAPH - 0xF0A1: 0x975C, //CJK UNIFIED IDEOGRAPH - 0xF0A2: 0x9802, //CJK UNIFIED IDEOGRAPH - 0xF0A3: 0x9F0E, //CJK UNIFIED IDEOGRAPH - 0xF0A4: 0x5236, //CJK UNIFIED IDEOGRAPH - 0xF0A5: 0x5291, //CJK UNIFIED IDEOGRAPH - 0xF0A6: 0x557C, //CJK UNIFIED IDEOGRAPH - 0xF0A7: 0x5824, //CJK UNIFIED IDEOGRAPH - 0xF0A8: 0x5E1D, //CJK UNIFIED IDEOGRAPH - 0xF0A9: 0x5F1F, //CJK UNIFIED IDEOGRAPH - 0xF0AA: 0x608C, //CJK UNIFIED IDEOGRAPH - 0xF0AB: 0x63D0, //CJK UNIFIED IDEOGRAPH - 0xF0AC: 0x68AF, //CJK UNIFIED IDEOGRAPH - 0xF0AD: 0x6FDF, //CJK UNIFIED IDEOGRAPH - 0xF0AE: 0x796D, //CJK UNIFIED IDEOGRAPH - 0xF0AF: 0x7B2C, //CJK UNIFIED IDEOGRAPH - 0xF0B0: 0x81CD, //CJK UNIFIED IDEOGRAPH - 0xF0B1: 0x85BA, //CJK UNIFIED IDEOGRAPH - 0xF0B2: 0x88FD, //CJK UNIFIED IDEOGRAPH - 0xF0B3: 0x8AF8, //CJK UNIFIED IDEOGRAPH - 0xF0B4: 0x8E44, //CJK UNIFIED IDEOGRAPH - 0xF0B5: 0x918D, //CJK UNIFIED IDEOGRAPH - 0xF0B6: 0x9664, //CJK UNIFIED IDEOGRAPH - 0xF0B7: 0x969B, //CJK UNIFIED IDEOGRAPH - 0xF0B8: 0x973D, //CJK UNIFIED IDEOGRAPH - 0xF0B9: 0x984C, //CJK UNIFIED IDEOGRAPH - 0xF0BA: 0x9F4A, //CJK UNIFIED IDEOGRAPH - 0xF0BB: 0x4FCE, //CJK UNIFIED IDEOGRAPH - 0xF0BC: 0x5146, //CJK UNIFIED IDEOGRAPH - 0xF0BD: 0x51CB, //CJK UNIFIED IDEOGRAPH - 0xF0BE: 0x52A9, //CJK UNIFIED IDEOGRAPH - 0xF0BF: 0x5632, //CJK UNIFIED IDEOGRAPH - 0xF0C0: 0x5F14, //CJK UNIFIED IDEOGRAPH - 0xF0C1: 0x5F6B, //CJK UNIFIED IDEOGRAPH - 0xF0C2: 0x63AA, //CJK UNIFIED IDEOGRAPH - 0xF0C3: 0x64CD, //CJK UNIFIED IDEOGRAPH - 0xF0C4: 0x65E9, //CJK UNIFIED IDEOGRAPH - 0xF0C5: 0x6641, //CJK UNIFIED IDEOGRAPH - 0xF0C6: 0x66FA, //CJK UNIFIED IDEOGRAPH - 0xF0C7: 0x66F9, //CJK UNIFIED IDEOGRAPH - 0xF0C8: 0x671D, //CJK UNIFIED IDEOGRAPH - 0xF0C9: 0x689D, //CJK UNIFIED IDEOGRAPH - 0xF0CA: 0x68D7, //CJK UNIFIED IDEOGRAPH - 0xF0CB: 0x69FD, //CJK UNIFIED IDEOGRAPH - 0xF0CC: 0x6F15, //CJK UNIFIED IDEOGRAPH - 0xF0CD: 0x6F6E, //CJK UNIFIED IDEOGRAPH - 0xF0CE: 0x7167, //CJK UNIFIED IDEOGRAPH - 0xF0CF: 0x71E5, //CJK UNIFIED IDEOGRAPH - 0xF0D0: 0x722A, //CJK UNIFIED IDEOGRAPH - 0xF0D1: 0x74AA, //CJK UNIFIED IDEOGRAPH - 0xF0D2: 0x773A, //CJK UNIFIED IDEOGRAPH - 0xF0D3: 0x7956, //CJK UNIFIED IDEOGRAPH - 0xF0D4: 0x795A, //CJK UNIFIED IDEOGRAPH - 0xF0D5: 0x79DF, //CJK UNIFIED IDEOGRAPH - 0xF0D6: 0x7A20, //CJK UNIFIED IDEOGRAPH - 0xF0D7: 0x7A95, //CJK UNIFIED IDEOGRAPH - 0xF0D8: 0x7C97, //CJK UNIFIED IDEOGRAPH - 0xF0D9: 0x7CDF, //CJK UNIFIED IDEOGRAPH - 0xF0DA: 0x7D44, //CJK UNIFIED IDEOGRAPH - 0xF0DB: 0x7E70, //CJK UNIFIED IDEOGRAPH - 0xF0DC: 0x8087, //CJK UNIFIED IDEOGRAPH - 0xF0DD: 0x85FB, //CJK UNIFIED IDEOGRAPH - 0xF0DE: 0x86A4, //CJK UNIFIED IDEOGRAPH - 0xF0DF: 0x8A54, //CJK UNIFIED IDEOGRAPH - 0xF0E0: 0x8ABF, //CJK UNIFIED IDEOGRAPH - 0xF0E1: 0x8D99, //CJK UNIFIED IDEOGRAPH - 0xF0E2: 0x8E81, //CJK UNIFIED IDEOGRAPH - 0xF0E3: 0x9020, //CJK UNIFIED IDEOGRAPH - 0xF0E4: 0x906D, //CJK UNIFIED IDEOGRAPH - 0xF0E5: 0x91E3, //CJK UNIFIED IDEOGRAPH - 0xF0E6: 0x963B, //CJK UNIFIED IDEOGRAPH - 0xF0E7: 0x96D5, //CJK UNIFIED IDEOGRAPH - 0xF0E8: 0x9CE5, //CJK UNIFIED IDEOGRAPH - 0xF0E9: 0x65CF, //CJK UNIFIED IDEOGRAPH - 0xF0EA: 0x7C07, //CJK UNIFIED IDEOGRAPH - 0xF0EB: 0x8DB3, //CJK UNIFIED IDEOGRAPH - 0xF0EC: 0x93C3, //CJK UNIFIED IDEOGRAPH - 0xF0ED: 0x5B58, //CJK UNIFIED IDEOGRAPH - 0xF0EE: 0x5C0A, //CJK UNIFIED IDEOGRAPH - 0xF0EF: 0x5352, //CJK UNIFIED IDEOGRAPH - 0xF0F0: 0x62D9, //CJK UNIFIED IDEOGRAPH - 0xF0F1: 0x731D, //CJK UNIFIED IDEOGRAPH - 0xF0F2: 0x5027, //CJK UNIFIED IDEOGRAPH - 0xF0F3: 0x5B97, //CJK UNIFIED IDEOGRAPH - 0xF0F4: 0x5F9E, //CJK UNIFIED IDEOGRAPH - 0xF0F5: 0x60B0, //CJK UNIFIED IDEOGRAPH - 0xF0F6: 0x616B, //CJK UNIFIED IDEOGRAPH - 0xF0F7: 0x68D5, //CJK UNIFIED IDEOGRAPH - 0xF0F8: 0x6DD9, //CJK UNIFIED IDEOGRAPH - 0xF0F9: 0x742E, //CJK UNIFIED IDEOGRAPH - 0xF0FA: 0x7A2E, //CJK UNIFIED IDEOGRAPH - 0xF0FB: 0x7D42, //CJK UNIFIED IDEOGRAPH - 0xF0FC: 0x7D9C, //CJK UNIFIED IDEOGRAPH - 0xF0FD: 0x7E31, //CJK UNIFIED IDEOGRAPH - 0xF0FE: 0x816B, //CJK UNIFIED IDEOGRAPH - 0xF1A1: 0x8E2A, //CJK UNIFIED IDEOGRAPH - 0xF1A2: 0x8E35, //CJK UNIFIED IDEOGRAPH - 0xF1A3: 0x937E, //CJK UNIFIED IDEOGRAPH - 0xF1A4: 0x9418, //CJK UNIFIED IDEOGRAPH - 0xF1A5: 0x4F50, //CJK UNIFIED IDEOGRAPH - 0xF1A6: 0x5750, //CJK UNIFIED IDEOGRAPH - 0xF1A7: 0x5DE6, //CJK UNIFIED IDEOGRAPH - 0xF1A8: 0x5EA7, //CJK UNIFIED IDEOGRAPH - 0xF1A9: 0x632B, //CJK UNIFIED IDEOGRAPH - 0xF1AA: 0x7F6A, //CJK UNIFIED IDEOGRAPH - 0xF1AB: 0x4E3B, //CJK UNIFIED IDEOGRAPH - 0xF1AC: 0x4F4F, //CJK UNIFIED IDEOGRAPH - 0xF1AD: 0x4F8F, //CJK UNIFIED IDEOGRAPH - 0xF1AE: 0x505A, //CJK UNIFIED IDEOGRAPH - 0xF1AF: 0x59DD, //CJK UNIFIED IDEOGRAPH - 0xF1B0: 0x80C4, //CJK UNIFIED IDEOGRAPH - 0xF1B1: 0x546A, //CJK UNIFIED IDEOGRAPH - 0xF1B2: 0x5468, //CJK UNIFIED IDEOGRAPH - 0xF1B3: 0x55FE, //CJK UNIFIED IDEOGRAPH - 0xF1B4: 0x594F, //CJK UNIFIED IDEOGRAPH - 0xF1B5: 0x5B99, //CJK UNIFIED IDEOGRAPH - 0xF1B6: 0x5DDE, //CJK UNIFIED IDEOGRAPH - 0xF1B7: 0x5EDA, //CJK UNIFIED IDEOGRAPH - 0xF1B8: 0x665D, //CJK UNIFIED IDEOGRAPH - 0xF1B9: 0x6731, //CJK UNIFIED IDEOGRAPH - 0xF1BA: 0x67F1, //CJK UNIFIED IDEOGRAPH - 0xF1BB: 0x682A, //CJK UNIFIED IDEOGRAPH - 0xF1BC: 0x6CE8, //CJK UNIFIED IDEOGRAPH - 0xF1BD: 0x6D32, //CJK UNIFIED IDEOGRAPH - 0xF1BE: 0x6E4A, //CJK UNIFIED IDEOGRAPH - 0xF1BF: 0x6F8D, //CJK UNIFIED IDEOGRAPH - 0xF1C0: 0x70B7, //CJK UNIFIED IDEOGRAPH - 0xF1C1: 0x73E0, //CJK UNIFIED IDEOGRAPH - 0xF1C2: 0x7587, //CJK UNIFIED IDEOGRAPH - 0xF1C3: 0x7C4C, //CJK UNIFIED IDEOGRAPH - 0xF1C4: 0x7D02, //CJK UNIFIED IDEOGRAPH - 0xF1C5: 0x7D2C, //CJK UNIFIED IDEOGRAPH - 0xF1C6: 0x7DA2, //CJK UNIFIED IDEOGRAPH - 0xF1C7: 0x821F, //CJK UNIFIED IDEOGRAPH - 0xF1C8: 0x86DB, //CJK UNIFIED IDEOGRAPH - 0xF1C9: 0x8A3B, //CJK UNIFIED IDEOGRAPH - 0xF1CA: 0x8A85, //CJK UNIFIED IDEOGRAPH - 0xF1CB: 0x8D70, //CJK UNIFIED IDEOGRAPH - 0xF1CC: 0x8E8A, //CJK UNIFIED IDEOGRAPH - 0xF1CD: 0x8F33, //CJK UNIFIED IDEOGRAPH - 0xF1CE: 0x9031, //CJK UNIFIED IDEOGRAPH - 0xF1CF: 0x914E, //CJK UNIFIED IDEOGRAPH - 0xF1D0: 0x9152, //CJK UNIFIED IDEOGRAPH - 0xF1D1: 0x9444, //CJK UNIFIED IDEOGRAPH - 0xF1D2: 0x99D0, //CJK UNIFIED IDEOGRAPH - 0xF1D3: 0x7AF9, //CJK UNIFIED IDEOGRAPH - 0xF1D4: 0x7CA5, //CJK UNIFIED IDEOGRAPH - 0xF1D5: 0x4FCA, //CJK UNIFIED IDEOGRAPH - 0xF1D6: 0x5101, //CJK UNIFIED IDEOGRAPH - 0xF1D7: 0x51C6, //CJK UNIFIED IDEOGRAPH - 0xF1D8: 0x57C8, //CJK UNIFIED IDEOGRAPH - 0xF1D9: 0x5BEF, //CJK UNIFIED IDEOGRAPH - 0xF1DA: 0x5CFB, //CJK UNIFIED IDEOGRAPH - 0xF1DB: 0x6659, //CJK UNIFIED IDEOGRAPH - 0xF1DC: 0x6A3D, //CJK UNIFIED IDEOGRAPH - 0xF1DD: 0x6D5A, //CJK UNIFIED IDEOGRAPH - 0xF1DE: 0x6E96, //CJK UNIFIED IDEOGRAPH - 0xF1DF: 0x6FEC, //CJK UNIFIED IDEOGRAPH - 0xF1E0: 0x710C, //CJK UNIFIED IDEOGRAPH - 0xF1E1: 0x756F, //CJK UNIFIED IDEOGRAPH - 0xF1E2: 0x7AE3, //CJK UNIFIED IDEOGRAPH - 0xF1E3: 0x8822, //CJK UNIFIED IDEOGRAPH - 0xF1E4: 0x9021, //CJK UNIFIED IDEOGRAPH - 0xF1E5: 0x9075, //CJK UNIFIED IDEOGRAPH - 0xF1E6: 0x96CB, //CJK UNIFIED IDEOGRAPH - 0xF1E7: 0x99FF, //CJK UNIFIED IDEOGRAPH - 0xF1E8: 0x8301, //CJK UNIFIED IDEOGRAPH - 0xF1E9: 0x4E2D, //CJK UNIFIED IDEOGRAPH - 0xF1EA: 0x4EF2, //CJK UNIFIED IDEOGRAPH - 0xF1EB: 0x8846, //CJK UNIFIED IDEOGRAPH - 0xF1EC: 0x91CD, //CJK UNIFIED IDEOGRAPH - 0xF1ED: 0x537D, //CJK UNIFIED IDEOGRAPH - 0xF1EE: 0x6ADB, //CJK UNIFIED IDEOGRAPH - 0xF1EF: 0x696B, //CJK UNIFIED IDEOGRAPH - 0xF1F0: 0x6C41, //CJK UNIFIED IDEOGRAPH - 0xF1F1: 0x847A, //CJK UNIFIED IDEOGRAPH - 0xF1F2: 0x589E, //CJK UNIFIED IDEOGRAPH - 0xF1F3: 0x618E, //CJK UNIFIED IDEOGRAPH - 0xF1F4: 0x66FE, //CJK UNIFIED IDEOGRAPH - 0xF1F5: 0x62EF, //CJK UNIFIED IDEOGRAPH - 0xF1F6: 0x70DD, //CJK UNIFIED IDEOGRAPH - 0xF1F7: 0x7511, //CJK UNIFIED IDEOGRAPH - 0xF1F8: 0x75C7, //CJK UNIFIED IDEOGRAPH - 0xF1F9: 0x7E52, //CJK UNIFIED IDEOGRAPH - 0xF1FA: 0x84B8, //CJK UNIFIED IDEOGRAPH - 0xF1FB: 0x8B49, //CJK UNIFIED IDEOGRAPH - 0xF1FC: 0x8D08, //CJK UNIFIED IDEOGRAPH - 0xF1FD: 0x4E4B, //CJK UNIFIED IDEOGRAPH - 0xF1FE: 0x53EA, //CJK UNIFIED IDEOGRAPH - 0xF2A1: 0x54AB, //CJK UNIFIED IDEOGRAPH - 0xF2A2: 0x5730, //CJK UNIFIED IDEOGRAPH - 0xF2A3: 0x5740, //CJK UNIFIED IDEOGRAPH - 0xF2A4: 0x5FD7, //CJK UNIFIED IDEOGRAPH - 0xF2A5: 0x6301, //CJK UNIFIED IDEOGRAPH - 0xF2A6: 0x6307, //CJK UNIFIED IDEOGRAPH - 0xF2A7: 0x646F, //CJK UNIFIED IDEOGRAPH - 0xF2A8: 0x652F, //CJK UNIFIED IDEOGRAPH - 0xF2A9: 0x65E8, //CJK UNIFIED IDEOGRAPH - 0xF2AA: 0x667A, //CJK UNIFIED IDEOGRAPH - 0xF2AB: 0x679D, //CJK UNIFIED IDEOGRAPH - 0xF2AC: 0x67B3, //CJK UNIFIED IDEOGRAPH - 0xF2AD: 0x6B62, //CJK UNIFIED IDEOGRAPH - 0xF2AE: 0x6C60, //CJK UNIFIED IDEOGRAPH - 0xF2AF: 0x6C9A, //CJK UNIFIED IDEOGRAPH - 0xF2B0: 0x6F2C, //CJK UNIFIED IDEOGRAPH - 0xF2B1: 0x77E5, //CJK UNIFIED IDEOGRAPH - 0xF2B2: 0x7825, //CJK UNIFIED IDEOGRAPH - 0xF2B3: 0x7949, //CJK UNIFIED IDEOGRAPH - 0xF2B4: 0x7957, //CJK UNIFIED IDEOGRAPH - 0xF2B5: 0x7D19, //CJK UNIFIED IDEOGRAPH - 0xF2B6: 0x80A2, //CJK UNIFIED IDEOGRAPH - 0xF2B7: 0x8102, //CJK UNIFIED IDEOGRAPH - 0xF2B8: 0x81F3, //CJK UNIFIED IDEOGRAPH - 0xF2B9: 0x829D, //CJK UNIFIED IDEOGRAPH - 0xF2BA: 0x82B7, //CJK UNIFIED IDEOGRAPH - 0xF2BB: 0x8718, //CJK UNIFIED IDEOGRAPH - 0xF2BC: 0x8A8C, //CJK UNIFIED IDEOGRAPH - 0xF2BD: 0xF9FC, //CJK COMPATIBILITY IDEOGRAPH - 0xF2BE: 0x8D04, //CJK UNIFIED IDEOGRAPH - 0xF2BF: 0x8DBE, //CJK UNIFIED IDEOGRAPH - 0xF2C0: 0x9072, //CJK UNIFIED IDEOGRAPH - 0xF2C1: 0x76F4, //CJK UNIFIED IDEOGRAPH - 0xF2C2: 0x7A19, //CJK UNIFIED IDEOGRAPH - 0xF2C3: 0x7A37, //CJK UNIFIED IDEOGRAPH - 0xF2C4: 0x7E54, //CJK UNIFIED IDEOGRAPH - 0xF2C5: 0x8077, //CJK UNIFIED IDEOGRAPH - 0xF2C6: 0x5507, //CJK UNIFIED IDEOGRAPH - 0xF2C7: 0x55D4, //CJK UNIFIED IDEOGRAPH - 0xF2C8: 0x5875, //CJK UNIFIED IDEOGRAPH - 0xF2C9: 0x632F, //CJK UNIFIED IDEOGRAPH - 0xF2CA: 0x6422, //CJK UNIFIED IDEOGRAPH - 0xF2CB: 0x6649, //CJK UNIFIED IDEOGRAPH - 0xF2CC: 0x664B, //CJK UNIFIED IDEOGRAPH - 0xF2CD: 0x686D, //CJK UNIFIED IDEOGRAPH - 0xF2CE: 0x699B, //CJK UNIFIED IDEOGRAPH - 0xF2CF: 0x6B84, //CJK UNIFIED IDEOGRAPH - 0xF2D0: 0x6D25, //CJK UNIFIED IDEOGRAPH - 0xF2D1: 0x6EB1, //CJK UNIFIED IDEOGRAPH - 0xF2D2: 0x73CD, //CJK UNIFIED IDEOGRAPH - 0xF2D3: 0x7468, //CJK UNIFIED IDEOGRAPH - 0xF2D4: 0x74A1, //CJK UNIFIED IDEOGRAPH - 0xF2D5: 0x755B, //CJK UNIFIED IDEOGRAPH - 0xF2D6: 0x75B9, //CJK UNIFIED IDEOGRAPH - 0xF2D7: 0x76E1, //CJK UNIFIED IDEOGRAPH - 0xF2D8: 0x771E, //CJK UNIFIED IDEOGRAPH - 0xF2D9: 0x778B, //CJK UNIFIED IDEOGRAPH - 0xF2DA: 0x79E6, //CJK UNIFIED IDEOGRAPH - 0xF2DB: 0x7E09, //CJK UNIFIED IDEOGRAPH - 0xF2DC: 0x7E1D, //CJK UNIFIED IDEOGRAPH - 0xF2DD: 0x81FB, //CJK UNIFIED IDEOGRAPH - 0xF2DE: 0x852F, //CJK UNIFIED IDEOGRAPH - 0xF2DF: 0x8897, //CJK UNIFIED IDEOGRAPH - 0xF2E0: 0x8A3A, //CJK UNIFIED IDEOGRAPH - 0xF2E1: 0x8CD1, //CJK UNIFIED IDEOGRAPH - 0xF2E2: 0x8EEB, //CJK UNIFIED IDEOGRAPH - 0xF2E3: 0x8FB0, //CJK UNIFIED IDEOGRAPH - 0xF2E4: 0x9032, //CJK UNIFIED IDEOGRAPH - 0xF2E5: 0x93AD, //CJK UNIFIED IDEOGRAPH - 0xF2E6: 0x9663, //CJK UNIFIED IDEOGRAPH - 0xF2E7: 0x9673, //CJK UNIFIED IDEOGRAPH - 0xF2E8: 0x9707, //CJK UNIFIED IDEOGRAPH - 0xF2E9: 0x4F84, //CJK UNIFIED IDEOGRAPH - 0xF2EA: 0x53F1, //CJK UNIFIED IDEOGRAPH - 0xF2EB: 0x59EA, //CJK UNIFIED IDEOGRAPH - 0xF2EC: 0x5AC9, //CJK UNIFIED IDEOGRAPH - 0xF2ED: 0x5E19, //CJK UNIFIED IDEOGRAPH - 0xF2EE: 0x684E, //CJK UNIFIED IDEOGRAPH - 0xF2EF: 0x74C6, //CJK UNIFIED IDEOGRAPH - 0xF2F0: 0x75BE, //CJK UNIFIED IDEOGRAPH - 0xF2F1: 0x79E9, //CJK UNIFIED IDEOGRAPH - 0xF2F2: 0x7A92, //CJK UNIFIED IDEOGRAPH - 0xF2F3: 0x81A3, //CJK UNIFIED IDEOGRAPH - 0xF2F4: 0x86ED, //CJK UNIFIED IDEOGRAPH - 0xF2F5: 0x8CEA, //CJK UNIFIED IDEOGRAPH - 0xF2F6: 0x8DCC, //CJK UNIFIED IDEOGRAPH - 0xF2F7: 0x8FED, //CJK UNIFIED IDEOGRAPH - 0xF2F8: 0x659F, //CJK UNIFIED IDEOGRAPH - 0xF2F9: 0x6715, //CJK UNIFIED IDEOGRAPH - 0xF2FA: 0xF9FD, //CJK COMPATIBILITY IDEOGRAPH - 0xF2FB: 0x57F7, //CJK UNIFIED IDEOGRAPH - 0xF2FC: 0x6F57, //CJK UNIFIED IDEOGRAPH - 0xF2FD: 0x7DDD, //CJK UNIFIED IDEOGRAPH - 0xF2FE: 0x8F2F, //CJK UNIFIED IDEOGRAPH - 0xF3A1: 0x93F6, //CJK UNIFIED IDEOGRAPH - 0xF3A2: 0x96C6, //CJK UNIFIED IDEOGRAPH - 0xF3A3: 0x5FB5, //CJK UNIFIED IDEOGRAPH - 0xF3A4: 0x61F2, //CJK UNIFIED IDEOGRAPH - 0xF3A5: 0x6F84, //CJK UNIFIED IDEOGRAPH - 0xF3A6: 0x4E14, //CJK UNIFIED IDEOGRAPH - 0xF3A7: 0x4F98, //CJK UNIFIED IDEOGRAPH - 0xF3A8: 0x501F, //CJK UNIFIED IDEOGRAPH - 0xF3A9: 0x53C9, //CJK UNIFIED IDEOGRAPH - 0xF3AA: 0x55DF, //CJK UNIFIED IDEOGRAPH - 0xF3AB: 0x5D6F, //CJK UNIFIED IDEOGRAPH - 0xF3AC: 0x5DEE, //CJK UNIFIED IDEOGRAPH - 0xF3AD: 0x6B21, //CJK UNIFIED IDEOGRAPH - 0xF3AE: 0x6B64, //CJK UNIFIED IDEOGRAPH - 0xF3AF: 0x78CB, //CJK UNIFIED IDEOGRAPH - 0xF3B0: 0x7B9A, //CJK UNIFIED IDEOGRAPH - 0xF3B1: 0xF9FE, //CJK COMPATIBILITY IDEOGRAPH - 0xF3B2: 0x8E49, //CJK UNIFIED IDEOGRAPH - 0xF3B3: 0x8ECA, //CJK UNIFIED IDEOGRAPH - 0xF3B4: 0x906E, //CJK UNIFIED IDEOGRAPH - 0xF3B5: 0x6349, //CJK UNIFIED IDEOGRAPH - 0xF3B6: 0x643E, //CJK UNIFIED IDEOGRAPH - 0xF3B7: 0x7740, //CJK UNIFIED IDEOGRAPH - 0xF3B8: 0x7A84, //CJK UNIFIED IDEOGRAPH - 0xF3B9: 0x932F, //CJK UNIFIED IDEOGRAPH - 0xF3BA: 0x947F, //CJK UNIFIED IDEOGRAPH - 0xF3BB: 0x9F6A, //CJK UNIFIED IDEOGRAPH - 0xF3BC: 0x64B0, //CJK UNIFIED IDEOGRAPH - 0xF3BD: 0x6FAF, //CJK UNIFIED IDEOGRAPH - 0xF3BE: 0x71E6, //CJK UNIFIED IDEOGRAPH - 0xF3BF: 0x74A8, //CJK UNIFIED IDEOGRAPH - 0xF3C0: 0x74DA, //CJK UNIFIED IDEOGRAPH - 0xF3C1: 0x7AC4, //CJK UNIFIED IDEOGRAPH - 0xF3C2: 0x7C12, //CJK UNIFIED IDEOGRAPH - 0xF3C3: 0x7E82, //CJK UNIFIED IDEOGRAPH - 0xF3C4: 0x7CB2, //CJK UNIFIED IDEOGRAPH - 0xF3C5: 0x7E98, //CJK UNIFIED IDEOGRAPH - 0xF3C6: 0x8B9A, //CJK UNIFIED IDEOGRAPH - 0xF3C7: 0x8D0A, //CJK UNIFIED IDEOGRAPH - 0xF3C8: 0x947D, //CJK UNIFIED IDEOGRAPH - 0xF3C9: 0x9910, //CJK UNIFIED IDEOGRAPH - 0xF3CA: 0x994C, //CJK UNIFIED IDEOGRAPH - 0xF3CB: 0x5239, //CJK UNIFIED IDEOGRAPH - 0xF3CC: 0x5BDF, //CJK UNIFIED IDEOGRAPH - 0xF3CD: 0x64E6, //CJK UNIFIED IDEOGRAPH - 0xF3CE: 0x672D, //CJK UNIFIED IDEOGRAPH - 0xF3CF: 0x7D2E, //CJK UNIFIED IDEOGRAPH - 0xF3D0: 0x50ED, //CJK UNIFIED IDEOGRAPH - 0xF3D1: 0x53C3, //CJK UNIFIED IDEOGRAPH - 0xF3D2: 0x5879, //CJK UNIFIED IDEOGRAPH - 0xF3D3: 0x6158, //CJK UNIFIED IDEOGRAPH - 0xF3D4: 0x6159, //CJK UNIFIED IDEOGRAPH - 0xF3D5: 0x61FA, //CJK UNIFIED IDEOGRAPH - 0xF3D6: 0x65AC, //CJK UNIFIED IDEOGRAPH - 0xF3D7: 0x7AD9, //CJK UNIFIED IDEOGRAPH - 0xF3D8: 0x8B92, //CJK UNIFIED IDEOGRAPH - 0xF3D9: 0x8B96, //CJK UNIFIED IDEOGRAPH - 0xF3DA: 0x5009, //CJK UNIFIED IDEOGRAPH - 0xF3DB: 0x5021, //CJK UNIFIED IDEOGRAPH - 0xF3DC: 0x5275, //CJK UNIFIED IDEOGRAPH - 0xF3DD: 0x5531, //CJK UNIFIED IDEOGRAPH - 0xF3DE: 0x5A3C, //CJK UNIFIED IDEOGRAPH - 0xF3DF: 0x5EE0, //CJK UNIFIED IDEOGRAPH - 0xF3E0: 0x5F70, //CJK UNIFIED IDEOGRAPH - 0xF3E1: 0x6134, //CJK UNIFIED IDEOGRAPH - 0xF3E2: 0x655E, //CJK UNIFIED IDEOGRAPH - 0xF3E3: 0x660C, //CJK UNIFIED IDEOGRAPH - 0xF3E4: 0x6636, //CJK UNIFIED IDEOGRAPH - 0xF3E5: 0x66A2, //CJK UNIFIED IDEOGRAPH - 0xF3E6: 0x69CD, //CJK UNIFIED IDEOGRAPH - 0xF3E7: 0x6EC4, //CJK UNIFIED IDEOGRAPH - 0xF3E8: 0x6F32, //CJK UNIFIED IDEOGRAPH - 0xF3E9: 0x7316, //CJK UNIFIED IDEOGRAPH - 0xF3EA: 0x7621, //CJK UNIFIED IDEOGRAPH - 0xF3EB: 0x7A93, //CJK UNIFIED IDEOGRAPH - 0xF3EC: 0x8139, //CJK UNIFIED IDEOGRAPH - 0xF3ED: 0x8259, //CJK UNIFIED IDEOGRAPH - 0xF3EE: 0x83D6, //CJK UNIFIED IDEOGRAPH - 0xF3EF: 0x84BC, //CJK UNIFIED IDEOGRAPH - 0xF3F0: 0x50B5, //CJK UNIFIED IDEOGRAPH - 0xF3F1: 0x57F0, //CJK UNIFIED IDEOGRAPH - 0xF3F2: 0x5BC0, //CJK UNIFIED IDEOGRAPH - 0xF3F3: 0x5BE8, //CJK UNIFIED IDEOGRAPH - 0xF3F4: 0x5F69, //CJK UNIFIED IDEOGRAPH - 0xF3F5: 0x63A1, //CJK UNIFIED IDEOGRAPH - 0xF3F6: 0x7826, //CJK UNIFIED IDEOGRAPH - 0xF3F7: 0x7DB5, //CJK UNIFIED IDEOGRAPH - 0xF3F8: 0x83DC, //CJK UNIFIED IDEOGRAPH - 0xF3F9: 0x8521, //CJK UNIFIED IDEOGRAPH - 0xF3FA: 0x91C7, //CJK UNIFIED IDEOGRAPH - 0xF3FB: 0x91F5, //CJK UNIFIED IDEOGRAPH - 0xF3FC: 0x518A, //CJK UNIFIED IDEOGRAPH - 0xF3FD: 0x67F5, //CJK UNIFIED IDEOGRAPH - 0xF3FE: 0x7B56, //CJK UNIFIED IDEOGRAPH - 0xF4A1: 0x8CAC, //CJK UNIFIED IDEOGRAPH - 0xF4A2: 0x51C4, //CJK UNIFIED IDEOGRAPH - 0xF4A3: 0x59BB, //CJK UNIFIED IDEOGRAPH - 0xF4A4: 0x60BD, //CJK UNIFIED IDEOGRAPH - 0xF4A5: 0x8655, //CJK UNIFIED IDEOGRAPH - 0xF4A6: 0x501C, //CJK UNIFIED IDEOGRAPH - 0xF4A7: 0xF9FF, //CJK COMPATIBILITY IDEOGRAPH - 0xF4A8: 0x5254, //CJK UNIFIED IDEOGRAPH - 0xF4A9: 0x5C3A, //CJK UNIFIED IDEOGRAPH - 0xF4AA: 0x617D, //CJK UNIFIED IDEOGRAPH - 0xF4AB: 0x621A, //CJK UNIFIED IDEOGRAPH - 0xF4AC: 0x62D3, //CJK UNIFIED IDEOGRAPH - 0xF4AD: 0x64F2, //CJK UNIFIED IDEOGRAPH - 0xF4AE: 0x65A5, //CJK UNIFIED IDEOGRAPH - 0xF4AF: 0x6ECC, //CJK UNIFIED IDEOGRAPH - 0xF4B0: 0x7620, //CJK UNIFIED IDEOGRAPH - 0xF4B1: 0x810A, //CJK UNIFIED IDEOGRAPH - 0xF4B2: 0x8E60, //CJK UNIFIED IDEOGRAPH - 0xF4B3: 0x965F, //CJK UNIFIED IDEOGRAPH - 0xF4B4: 0x96BB, //CJK UNIFIED IDEOGRAPH - 0xF4B5: 0x4EDF, //CJK UNIFIED IDEOGRAPH - 0xF4B6: 0x5343, //CJK UNIFIED IDEOGRAPH - 0xF4B7: 0x5598, //CJK UNIFIED IDEOGRAPH - 0xF4B8: 0x5929, //CJK UNIFIED IDEOGRAPH - 0xF4B9: 0x5DDD, //CJK UNIFIED IDEOGRAPH - 0xF4BA: 0x64C5, //CJK UNIFIED IDEOGRAPH - 0xF4BB: 0x6CC9, //CJK UNIFIED IDEOGRAPH - 0xF4BC: 0x6DFA, //CJK UNIFIED IDEOGRAPH - 0xF4BD: 0x7394, //CJK UNIFIED IDEOGRAPH - 0xF4BE: 0x7A7F, //CJK UNIFIED IDEOGRAPH - 0xF4BF: 0x821B, //CJK UNIFIED IDEOGRAPH - 0xF4C0: 0x85A6, //CJK UNIFIED IDEOGRAPH - 0xF4C1: 0x8CE4, //CJK UNIFIED IDEOGRAPH - 0xF4C2: 0x8E10, //CJK UNIFIED IDEOGRAPH - 0xF4C3: 0x9077, //CJK UNIFIED IDEOGRAPH - 0xF4C4: 0x91E7, //CJK UNIFIED IDEOGRAPH - 0xF4C5: 0x95E1, //CJK UNIFIED IDEOGRAPH - 0xF4C6: 0x9621, //CJK UNIFIED IDEOGRAPH - 0xF4C7: 0x97C6, //CJK UNIFIED IDEOGRAPH - 0xF4C8: 0x51F8, //CJK UNIFIED IDEOGRAPH - 0xF4C9: 0x54F2, //CJK UNIFIED IDEOGRAPH - 0xF4CA: 0x5586, //CJK UNIFIED IDEOGRAPH - 0xF4CB: 0x5FB9, //CJK UNIFIED IDEOGRAPH - 0xF4CC: 0x64A4, //CJK UNIFIED IDEOGRAPH - 0xF4CD: 0x6F88, //CJK UNIFIED IDEOGRAPH - 0xF4CE: 0x7DB4, //CJK UNIFIED IDEOGRAPH - 0xF4CF: 0x8F1F, //CJK UNIFIED IDEOGRAPH - 0xF4D0: 0x8F4D, //CJK UNIFIED IDEOGRAPH - 0xF4D1: 0x9435, //CJK UNIFIED IDEOGRAPH - 0xF4D2: 0x50C9, //CJK UNIFIED IDEOGRAPH - 0xF4D3: 0x5C16, //CJK UNIFIED IDEOGRAPH - 0xF4D4: 0x6CBE, //CJK UNIFIED IDEOGRAPH - 0xF4D5: 0x6DFB, //CJK UNIFIED IDEOGRAPH - 0xF4D6: 0x751B, //CJK UNIFIED IDEOGRAPH - 0xF4D7: 0x77BB, //CJK UNIFIED IDEOGRAPH - 0xF4D8: 0x7C3D, //CJK UNIFIED IDEOGRAPH - 0xF4D9: 0x7C64, //CJK UNIFIED IDEOGRAPH - 0xF4DA: 0x8A79, //CJK UNIFIED IDEOGRAPH - 0xF4DB: 0x8AC2, //CJK UNIFIED IDEOGRAPH - 0xF4DC: 0x581E, //CJK UNIFIED IDEOGRAPH - 0xF4DD: 0x59BE, //CJK UNIFIED IDEOGRAPH - 0xF4DE: 0x5E16, //CJK UNIFIED IDEOGRAPH - 0xF4DF: 0x6377, //CJK UNIFIED IDEOGRAPH - 0xF4E0: 0x7252, //CJK UNIFIED IDEOGRAPH - 0xF4E1: 0x758A, //CJK UNIFIED IDEOGRAPH - 0xF4E2: 0x776B, //CJK UNIFIED IDEOGRAPH - 0xF4E3: 0x8ADC, //CJK UNIFIED IDEOGRAPH - 0xF4E4: 0x8CBC, //CJK UNIFIED IDEOGRAPH - 0xF4E5: 0x8F12, //CJK UNIFIED IDEOGRAPH - 0xF4E6: 0x5EF3, //CJK UNIFIED IDEOGRAPH - 0xF4E7: 0x6674, //CJK UNIFIED IDEOGRAPH - 0xF4E8: 0x6DF8, //CJK UNIFIED IDEOGRAPH - 0xF4E9: 0x807D, //CJK UNIFIED IDEOGRAPH - 0xF4EA: 0x83C1, //CJK UNIFIED IDEOGRAPH - 0xF4EB: 0x8ACB, //CJK UNIFIED IDEOGRAPH - 0xF4EC: 0x9751, //CJK UNIFIED IDEOGRAPH - 0xF4ED: 0x9BD6, //CJK UNIFIED IDEOGRAPH - 0xF4EE: 0xFA00, //CJK COMPATIBILITY IDEOGRAPH - 0xF4EF: 0x5243, //CJK UNIFIED IDEOGRAPH - 0xF4F0: 0x66FF, //CJK UNIFIED IDEOGRAPH - 0xF4F1: 0x6D95, //CJK UNIFIED IDEOGRAPH - 0xF4F2: 0x6EEF, //CJK UNIFIED IDEOGRAPH - 0xF4F3: 0x7DE0, //CJK UNIFIED IDEOGRAPH - 0xF4F4: 0x8AE6, //CJK UNIFIED IDEOGRAPH - 0xF4F5: 0x902E, //CJK UNIFIED IDEOGRAPH - 0xF4F6: 0x905E, //CJK UNIFIED IDEOGRAPH - 0xF4F7: 0x9AD4, //CJK UNIFIED IDEOGRAPH - 0xF4F8: 0x521D, //CJK UNIFIED IDEOGRAPH - 0xF4F9: 0x527F, //CJK UNIFIED IDEOGRAPH - 0xF4FA: 0x54E8, //CJK UNIFIED IDEOGRAPH - 0xF4FB: 0x6194, //CJK UNIFIED IDEOGRAPH - 0xF4FC: 0x6284, //CJK UNIFIED IDEOGRAPH - 0xF4FD: 0x62DB, //CJK UNIFIED IDEOGRAPH - 0xF4FE: 0x68A2, //CJK UNIFIED IDEOGRAPH - 0xF5A1: 0x6912, //CJK UNIFIED IDEOGRAPH - 0xF5A2: 0x695A, //CJK UNIFIED IDEOGRAPH - 0xF5A3: 0x6A35, //CJK UNIFIED IDEOGRAPH - 0xF5A4: 0x7092, //CJK UNIFIED IDEOGRAPH - 0xF5A5: 0x7126, //CJK UNIFIED IDEOGRAPH - 0xF5A6: 0x785D, //CJK UNIFIED IDEOGRAPH - 0xF5A7: 0x7901, //CJK UNIFIED IDEOGRAPH - 0xF5A8: 0x790E, //CJK UNIFIED IDEOGRAPH - 0xF5A9: 0x79D2, //CJK UNIFIED IDEOGRAPH - 0xF5AA: 0x7A0D, //CJK UNIFIED IDEOGRAPH - 0xF5AB: 0x8096, //CJK UNIFIED IDEOGRAPH - 0xF5AC: 0x8278, //CJK UNIFIED IDEOGRAPH - 0xF5AD: 0x82D5, //CJK UNIFIED IDEOGRAPH - 0xF5AE: 0x8349, //CJK UNIFIED IDEOGRAPH - 0xF5AF: 0x8549, //CJK UNIFIED IDEOGRAPH - 0xF5B0: 0x8C82, //CJK UNIFIED IDEOGRAPH - 0xF5B1: 0x8D85, //CJK UNIFIED IDEOGRAPH - 0xF5B2: 0x9162, //CJK UNIFIED IDEOGRAPH - 0xF5B3: 0x918B, //CJK UNIFIED IDEOGRAPH - 0xF5B4: 0x91AE, //CJK UNIFIED IDEOGRAPH - 0xF5B5: 0x4FC3, //CJK UNIFIED IDEOGRAPH - 0xF5B6: 0x56D1, //CJK UNIFIED IDEOGRAPH - 0xF5B7: 0x71ED, //CJK UNIFIED IDEOGRAPH - 0xF5B8: 0x77D7, //CJK UNIFIED IDEOGRAPH - 0xF5B9: 0x8700, //CJK UNIFIED IDEOGRAPH - 0xF5BA: 0x89F8, //CJK UNIFIED IDEOGRAPH - 0xF5BB: 0x5BF8, //CJK UNIFIED IDEOGRAPH - 0xF5BC: 0x5FD6, //CJK UNIFIED IDEOGRAPH - 0xF5BD: 0x6751, //CJK UNIFIED IDEOGRAPH - 0xF5BE: 0x90A8, //CJK UNIFIED IDEOGRAPH - 0xF5BF: 0x53E2, //CJK UNIFIED IDEOGRAPH - 0xF5C0: 0x585A, //CJK UNIFIED IDEOGRAPH - 0xF5C1: 0x5BF5, //CJK UNIFIED IDEOGRAPH - 0xF5C2: 0x60A4, //CJK UNIFIED IDEOGRAPH - 0xF5C3: 0x6181, //CJK UNIFIED IDEOGRAPH - 0xF5C4: 0x6460, //CJK UNIFIED IDEOGRAPH - 0xF5C5: 0x7E3D, //CJK UNIFIED IDEOGRAPH - 0xF5C6: 0x8070, //CJK UNIFIED IDEOGRAPH - 0xF5C7: 0x8525, //CJK UNIFIED IDEOGRAPH - 0xF5C8: 0x9283, //CJK UNIFIED IDEOGRAPH - 0xF5C9: 0x64AE, //CJK UNIFIED IDEOGRAPH - 0xF5CA: 0x50AC, //CJK UNIFIED IDEOGRAPH - 0xF5CB: 0x5D14, //CJK UNIFIED IDEOGRAPH - 0xF5CC: 0x6700, //CJK UNIFIED IDEOGRAPH - 0xF5CD: 0x589C, //CJK UNIFIED IDEOGRAPH - 0xF5CE: 0x62BD, //CJK UNIFIED IDEOGRAPH - 0xF5CF: 0x63A8, //CJK UNIFIED IDEOGRAPH - 0xF5D0: 0x690E, //CJK UNIFIED IDEOGRAPH - 0xF5D1: 0x6978, //CJK UNIFIED IDEOGRAPH - 0xF5D2: 0x6A1E, //CJK UNIFIED IDEOGRAPH - 0xF5D3: 0x6E6B, //CJK UNIFIED IDEOGRAPH - 0xF5D4: 0x76BA, //CJK UNIFIED IDEOGRAPH - 0xF5D5: 0x79CB, //CJK UNIFIED IDEOGRAPH - 0xF5D6: 0x82BB, //CJK UNIFIED IDEOGRAPH - 0xF5D7: 0x8429, //CJK UNIFIED IDEOGRAPH - 0xF5D8: 0x8ACF, //CJK UNIFIED IDEOGRAPH - 0xF5D9: 0x8DA8, //CJK UNIFIED IDEOGRAPH - 0xF5DA: 0x8FFD, //CJK UNIFIED IDEOGRAPH - 0xF5DB: 0x9112, //CJK UNIFIED IDEOGRAPH - 0xF5DC: 0x914B, //CJK UNIFIED IDEOGRAPH - 0xF5DD: 0x919C, //CJK UNIFIED IDEOGRAPH - 0xF5DE: 0x9310, //CJK UNIFIED IDEOGRAPH - 0xF5DF: 0x9318, //CJK UNIFIED IDEOGRAPH - 0xF5E0: 0x939A, //CJK UNIFIED IDEOGRAPH - 0xF5E1: 0x96DB, //CJK UNIFIED IDEOGRAPH - 0xF5E2: 0x9A36, //CJK UNIFIED IDEOGRAPH - 0xF5E3: 0x9C0D, //CJK UNIFIED IDEOGRAPH - 0xF5E4: 0x4E11, //CJK UNIFIED IDEOGRAPH - 0xF5E5: 0x755C, //CJK UNIFIED IDEOGRAPH - 0xF5E6: 0x795D, //CJK UNIFIED IDEOGRAPH - 0xF5E7: 0x7AFA, //CJK UNIFIED IDEOGRAPH - 0xF5E8: 0x7B51, //CJK UNIFIED IDEOGRAPH - 0xF5E9: 0x7BC9, //CJK UNIFIED IDEOGRAPH - 0xF5EA: 0x7E2E, //CJK UNIFIED IDEOGRAPH - 0xF5EB: 0x84C4, //CJK UNIFIED IDEOGRAPH - 0xF5EC: 0x8E59, //CJK UNIFIED IDEOGRAPH - 0xF5ED: 0x8E74, //CJK UNIFIED IDEOGRAPH - 0xF5EE: 0x8EF8, //CJK UNIFIED IDEOGRAPH - 0xF5EF: 0x9010, //CJK UNIFIED IDEOGRAPH - 0xF5F0: 0x6625, //CJK UNIFIED IDEOGRAPH - 0xF5F1: 0x693F, //CJK UNIFIED IDEOGRAPH - 0xF5F2: 0x7443, //CJK UNIFIED IDEOGRAPH - 0xF5F3: 0x51FA, //CJK UNIFIED IDEOGRAPH - 0xF5F4: 0x672E, //CJK UNIFIED IDEOGRAPH - 0xF5F5: 0x9EDC, //CJK UNIFIED IDEOGRAPH - 0xF5F6: 0x5145, //CJK UNIFIED IDEOGRAPH - 0xF5F7: 0x5FE0, //CJK UNIFIED IDEOGRAPH - 0xF5F8: 0x6C96, //CJK UNIFIED IDEOGRAPH - 0xF5F9: 0x87F2, //CJK UNIFIED IDEOGRAPH - 0xF5FA: 0x885D, //CJK UNIFIED IDEOGRAPH - 0xF5FB: 0x8877, //CJK UNIFIED IDEOGRAPH - 0xF5FC: 0x60B4, //CJK UNIFIED IDEOGRAPH - 0xF5FD: 0x81B5, //CJK UNIFIED IDEOGRAPH - 0xF5FE: 0x8403, //CJK UNIFIED IDEOGRAPH - 0xF6A1: 0x8D05, //CJK UNIFIED IDEOGRAPH - 0xF6A2: 0x53D6, //CJK UNIFIED IDEOGRAPH - 0xF6A3: 0x5439, //CJK UNIFIED IDEOGRAPH - 0xF6A4: 0x5634, //CJK UNIFIED IDEOGRAPH - 0xF6A5: 0x5A36, //CJK UNIFIED IDEOGRAPH - 0xF6A6: 0x5C31, //CJK UNIFIED IDEOGRAPH - 0xF6A7: 0x708A, //CJK UNIFIED IDEOGRAPH - 0xF6A8: 0x7FE0, //CJK UNIFIED IDEOGRAPH - 0xF6A9: 0x805A, //CJK UNIFIED IDEOGRAPH - 0xF6AA: 0x8106, //CJK UNIFIED IDEOGRAPH - 0xF6AB: 0x81ED, //CJK UNIFIED IDEOGRAPH - 0xF6AC: 0x8DA3, //CJK UNIFIED IDEOGRAPH - 0xF6AD: 0x9189, //CJK UNIFIED IDEOGRAPH - 0xF6AE: 0x9A5F, //CJK UNIFIED IDEOGRAPH - 0xF6AF: 0x9DF2, //CJK UNIFIED IDEOGRAPH - 0xF6B0: 0x5074, //CJK UNIFIED IDEOGRAPH - 0xF6B1: 0x4EC4, //CJK UNIFIED IDEOGRAPH - 0xF6B2: 0x53A0, //CJK UNIFIED IDEOGRAPH - 0xF6B3: 0x60FB, //CJK UNIFIED IDEOGRAPH - 0xF6B4: 0x6E2C, //CJK UNIFIED IDEOGRAPH - 0xF6B5: 0x5C64, //CJK UNIFIED IDEOGRAPH - 0xF6B6: 0x4F88, //CJK UNIFIED IDEOGRAPH - 0xF6B7: 0x5024, //CJK UNIFIED IDEOGRAPH - 0xF6B8: 0x55E4, //CJK UNIFIED IDEOGRAPH - 0xF6B9: 0x5CD9, //CJK UNIFIED IDEOGRAPH - 0xF6BA: 0x5E5F, //CJK UNIFIED IDEOGRAPH - 0xF6BB: 0x6065, //CJK UNIFIED IDEOGRAPH - 0xF6BC: 0x6894, //CJK UNIFIED IDEOGRAPH - 0xF6BD: 0x6CBB, //CJK UNIFIED IDEOGRAPH - 0xF6BE: 0x6DC4, //CJK UNIFIED IDEOGRAPH - 0xF6BF: 0x71BE, //CJK UNIFIED IDEOGRAPH - 0xF6C0: 0x75D4, //CJK UNIFIED IDEOGRAPH - 0xF6C1: 0x75F4, //CJK UNIFIED IDEOGRAPH - 0xF6C2: 0x7661, //CJK UNIFIED IDEOGRAPH - 0xF6C3: 0x7A1A, //CJK UNIFIED IDEOGRAPH - 0xF6C4: 0x7A49, //CJK UNIFIED IDEOGRAPH - 0xF6C5: 0x7DC7, //CJK UNIFIED IDEOGRAPH - 0xF6C6: 0x7DFB, //CJK UNIFIED IDEOGRAPH - 0xF6C7: 0x7F6E, //CJK UNIFIED IDEOGRAPH - 0xF6C8: 0x81F4, //CJK UNIFIED IDEOGRAPH - 0xF6C9: 0x86A9, //CJK UNIFIED IDEOGRAPH - 0xF6CA: 0x8F1C, //CJK UNIFIED IDEOGRAPH - 0xF6CB: 0x96C9, //CJK UNIFIED IDEOGRAPH - 0xF6CC: 0x99B3, //CJK UNIFIED IDEOGRAPH - 0xF6CD: 0x9F52, //CJK UNIFIED IDEOGRAPH - 0xF6CE: 0x5247, //CJK UNIFIED IDEOGRAPH - 0xF6CF: 0x52C5, //CJK UNIFIED IDEOGRAPH - 0xF6D0: 0x98ED, //CJK UNIFIED IDEOGRAPH - 0xF6D1: 0x89AA, //CJK UNIFIED IDEOGRAPH - 0xF6D2: 0x4E03, //CJK UNIFIED IDEOGRAPH - 0xF6D3: 0x67D2, //CJK UNIFIED IDEOGRAPH - 0xF6D4: 0x6F06, //CJK UNIFIED IDEOGRAPH - 0xF6D5: 0x4FB5, //CJK UNIFIED IDEOGRAPH - 0xF6D6: 0x5BE2, //CJK UNIFIED IDEOGRAPH - 0xF6D7: 0x6795, //CJK UNIFIED IDEOGRAPH - 0xF6D8: 0x6C88, //CJK UNIFIED IDEOGRAPH - 0xF6D9: 0x6D78, //CJK UNIFIED IDEOGRAPH - 0xF6DA: 0x741B, //CJK UNIFIED IDEOGRAPH - 0xF6DB: 0x7827, //CJK UNIFIED IDEOGRAPH - 0xF6DC: 0x91DD, //CJK UNIFIED IDEOGRAPH - 0xF6DD: 0x937C, //CJK UNIFIED IDEOGRAPH - 0xF6DE: 0x87C4, //CJK UNIFIED IDEOGRAPH - 0xF6DF: 0x79E4, //CJK UNIFIED IDEOGRAPH - 0xF6E0: 0x7A31, //CJK UNIFIED IDEOGRAPH - 0xF6E1: 0x5FEB, //CJK UNIFIED IDEOGRAPH - 0xF6E2: 0x4ED6, //CJK UNIFIED IDEOGRAPH - 0xF6E3: 0x54A4, //CJK UNIFIED IDEOGRAPH - 0xF6E4: 0x553E, //CJK UNIFIED IDEOGRAPH - 0xF6E5: 0x58AE, //CJK UNIFIED IDEOGRAPH - 0xF6E6: 0x59A5, //CJK UNIFIED IDEOGRAPH - 0xF6E7: 0x60F0, //CJK UNIFIED IDEOGRAPH - 0xF6E8: 0x6253, //CJK UNIFIED IDEOGRAPH - 0xF6E9: 0x62D6, //CJK UNIFIED IDEOGRAPH - 0xF6EA: 0x6736, //CJK UNIFIED IDEOGRAPH - 0xF6EB: 0x6955, //CJK UNIFIED IDEOGRAPH - 0xF6EC: 0x8235, //CJK UNIFIED IDEOGRAPH - 0xF6ED: 0x9640, //CJK UNIFIED IDEOGRAPH - 0xF6EE: 0x99B1, //CJK UNIFIED IDEOGRAPH - 0xF6EF: 0x99DD, //CJK UNIFIED IDEOGRAPH - 0xF6F0: 0x502C, //CJK UNIFIED IDEOGRAPH - 0xF6F1: 0x5353, //CJK UNIFIED IDEOGRAPH - 0xF6F2: 0x5544, //CJK UNIFIED IDEOGRAPH - 0xF6F3: 0x577C, //CJK UNIFIED IDEOGRAPH - 0xF6F4: 0xFA01, //CJK COMPATIBILITY IDEOGRAPH - 0xF6F5: 0x6258, //CJK UNIFIED IDEOGRAPH - 0xF6F6: 0xFA02, //CJK COMPATIBILITY IDEOGRAPH - 0xF6F7: 0x64E2, //CJK UNIFIED IDEOGRAPH - 0xF6F8: 0x666B, //CJK UNIFIED IDEOGRAPH - 0xF6F9: 0x67DD, //CJK UNIFIED IDEOGRAPH - 0xF6FA: 0x6FC1, //CJK UNIFIED IDEOGRAPH - 0xF6FB: 0x6FEF, //CJK UNIFIED IDEOGRAPH - 0xF6FC: 0x7422, //CJK UNIFIED IDEOGRAPH - 0xF6FD: 0x7438, //CJK UNIFIED IDEOGRAPH - 0xF6FE: 0x8A17, //CJK UNIFIED IDEOGRAPH - 0xF7A1: 0x9438, //CJK UNIFIED IDEOGRAPH - 0xF7A2: 0x5451, //CJK UNIFIED IDEOGRAPH - 0xF7A3: 0x5606, //CJK UNIFIED IDEOGRAPH - 0xF7A4: 0x5766, //CJK UNIFIED IDEOGRAPH - 0xF7A5: 0x5F48, //CJK UNIFIED IDEOGRAPH - 0xF7A6: 0x619A, //CJK UNIFIED IDEOGRAPH - 0xF7A7: 0x6B4E, //CJK UNIFIED IDEOGRAPH - 0xF7A8: 0x7058, //CJK UNIFIED IDEOGRAPH - 0xF7A9: 0x70AD, //CJK UNIFIED IDEOGRAPH - 0xF7AA: 0x7DBB, //CJK UNIFIED IDEOGRAPH - 0xF7AB: 0x8A95, //CJK UNIFIED IDEOGRAPH - 0xF7AC: 0x596A, //CJK UNIFIED IDEOGRAPH - 0xF7AD: 0x812B, //CJK UNIFIED IDEOGRAPH - 0xF7AE: 0x63A2, //CJK UNIFIED IDEOGRAPH - 0xF7AF: 0x7708, //CJK UNIFIED IDEOGRAPH - 0xF7B0: 0x803D, //CJK UNIFIED IDEOGRAPH - 0xF7B1: 0x8CAA, //CJK UNIFIED IDEOGRAPH - 0xF7B2: 0x5854, //CJK UNIFIED IDEOGRAPH - 0xF7B3: 0x642D, //CJK UNIFIED IDEOGRAPH - 0xF7B4: 0x69BB, //CJK UNIFIED IDEOGRAPH - 0xF7B5: 0x5B95, //CJK UNIFIED IDEOGRAPH - 0xF7B6: 0x5E11, //CJK UNIFIED IDEOGRAPH - 0xF7B7: 0x6E6F, //CJK UNIFIED IDEOGRAPH - 0xF7B8: 0xFA03, //CJK COMPATIBILITY IDEOGRAPH - 0xF7B9: 0x8569, //CJK UNIFIED IDEOGRAPH - 0xF7BA: 0x514C, //CJK UNIFIED IDEOGRAPH - 0xF7BB: 0x53F0, //CJK UNIFIED IDEOGRAPH - 0xF7BC: 0x592A, //CJK UNIFIED IDEOGRAPH - 0xF7BD: 0x6020, //CJK UNIFIED IDEOGRAPH - 0xF7BE: 0x614B, //CJK UNIFIED IDEOGRAPH - 0xF7BF: 0x6B86, //CJK UNIFIED IDEOGRAPH - 0xF7C0: 0x6C70, //CJK UNIFIED IDEOGRAPH - 0xF7C1: 0x6CF0, //CJK UNIFIED IDEOGRAPH - 0xF7C2: 0x7B1E, //CJK UNIFIED IDEOGRAPH - 0xF7C3: 0x80CE, //CJK UNIFIED IDEOGRAPH - 0xF7C4: 0x82D4, //CJK UNIFIED IDEOGRAPH - 0xF7C5: 0x8DC6, //CJK UNIFIED IDEOGRAPH - 0xF7C6: 0x90B0, //CJK UNIFIED IDEOGRAPH - 0xF7C7: 0x98B1, //CJK UNIFIED IDEOGRAPH - 0xF7C8: 0xFA04, //CJK COMPATIBILITY IDEOGRAPH - 0xF7C9: 0x64C7, //CJK UNIFIED IDEOGRAPH - 0xF7CA: 0x6FA4, //CJK UNIFIED IDEOGRAPH - 0xF7CB: 0x6491, //CJK UNIFIED IDEOGRAPH - 0xF7CC: 0x6504, //CJK UNIFIED IDEOGRAPH - 0xF7CD: 0x514E, //CJK UNIFIED IDEOGRAPH - 0xF7CE: 0x5410, //CJK UNIFIED IDEOGRAPH - 0xF7CF: 0x571F, //CJK UNIFIED IDEOGRAPH - 0xF7D0: 0x8A0E, //CJK UNIFIED IDEOGRAPH - 0xF7D1: 0x615F, //CJK UNIFIED IDEOGRAPH - 0xF7D2: 0x6876, //CJK UNIFIED IDEOGRAPH - 0xF7D3: 0xFA05, //CJK COMPATIBILITY IDEOGRAPH - 0xF7D4: 0x75DB, //CJK UNIFIED IDEOGRAPH - 0xF7D5: 0x7B52, //CJK UNIFIED IDEOGRAPH - 0xF7D6: 0x7D71, //CJK UNIFIED IDEOGRAPH - 0xF7D7: 0x901A, //CJK UNIFIED IDEOGRAPH - 0xF7D8: 0x5806, //CJK UNIFIED IDEOGRAPH - 0xF7D9: 0x69CC, //CJK UNIFIED IDEOGRAPH - 0xF7DA: 0x817F, //CJK UNIFIED IDEOGRAPH - 0xF7DB: 0x892A, //CJK UNIFIED IDEOGRAPH - 0xF7DC: 0x9000, //CJK UNIFIED IDEOGRAPH - 0xF7DD: 0x9839, //CJK UNIFIED IDEOGRAPH - 0xF7DE: 0x5078, //CJK UNIFIED IDEOGRAPH - 0xF7DF: 0x5957, //CJK UNIFIED IDEOGRAPH - 0xF7E0: 0x59AC, //CJK UNIFIED IDEOGRAPH - 0xF7E1: 0x6295, //CJK UNIFIED IDEOGRAPH - 0xF7E2: 0x900F, //CJK UNIFIED IDEOGRAPH - 0xF7E3: 0x9B2A, //CJK UNIFIED IDEOGRAPH - 0xF7E4: 0x615D, //CJK UNIFIED IDEOGRAPH - 0xF7E5: 0x7279, //CJK UNIFIED IDEOGRAPH - 0xF7E6: 0x95D6, //CJK UNIFIED IDEOGRAPH - 0xF7E7: 0x5761, //CJK UNIFIED IDEOGRAPH - 0xF7E8: 0x5A46, //CJK UNIFIED IDEOGRAPH - 0xF7E9: 0x5DF4, //CJK UNIFIED IDEOGRAPH - 0xF7EA: 0x628A, //CJK UNIFIED IDEOGRAPH - 0xF7EB: 0x64AD, //CJK UNIFIED IDEOGRAPH - 0xF7EC: 0x64FA, //CJK UNIFIED IDEOGRAPH - 0xF7ED: 0x6777, //CJK UNIFIED IDEOGRAPH - 0xF7EE: 0x6CE2, //CJK UNIFIED IDEOGRAPH - 0xF7EF: 0x6D3E, //CJK UNIFIED IDEOGRAPH - 0xF7F0: 0x722C, //CJK UNIFIED IDEOGRAPH - 0xF7F1: 0x7436, //CJK UNIFIED IDEOGRAPH - 0xF7F2: 0x7834, //CJK UNIFIED IDEOGRAPH - 0xF7F3: 0x7F77, //CJK UNIFIED IDEOGRAPH - 0xF7F4: 0x82AD, //CJK UNIFIED IDEOGRAPH - 0xF7F5: 0x8DDB, //CJK UNIFIED IDEOGRAPH - 0xF7F6: 0x9817, //CJK UNIFIED IDEOGRAPH - 0xF7F7: 0x5224, //CJK UNIFIED IDEOGRAPH - 0xF7F8: 0x5742, //CJK UNIFIED IDEOGRAPH - 0xF7F9: 0x677F, //CJK UNIFIED IDEOGRAPH - 0xF7FA: 0x7248, //CJK UNIFIED IDEOGRAPH - 0xF7FB: 0x74E3, //CJK UNIFIED IDEOGRAPH - 0xF7FC: 0x8CA9, //CJK UNIFIED IDEOGRAPH - 0xF7FD: 0x8FA6, //CJK UNIFIED IDEOGRAPH - 0xF7FE: 0x9211, //CJK UNIFIED IDEOGRAPH - 0xF8A1: 0x962A, //CJK UNIFIED IDEOGRAPH - 0xF8A2: 0x516B, //CJK UNIFIED IDEOGRAPH - 0xF8A3: 0x53ED, //CJK UNIFIED IDEOGRAPH - 0xF8A4: 0x634C, //CJK UNIFIED IDEOGRAPH - 0xF8A5: 0x4F69, //CJK UNIFIED IDEOGRAPH - 0xF8A6: 0x5504, //CJK UNIFIED IDEOGRAPH - 0xF8A7: 0x6096, //CJK UNIFIED IDEOGRAPH - 0xF8A8: 0x6557, //CJK UNIFIED IDEOGRAPH - 0xF8A9: 0x6C9B, //CJK UNIFIED IDEOGRAPH - 0xF8AA: 0x6D7F, //CJK UNIFIED IDEOGRAPH - 0xF8AB: 0x724C, //CJK UNIFIED IDEOGRAPH - 0xF8AC: 0x72FD, //CJK UNIFIED IDEOGRAPH - 0xF8AD: 0x7A17, //CJK UNIFIED IDEOGRAPH - 0xF8AE: 0x8987, //CJK UNIFIED IDEOGRAPH - 0xF8AF: 0x8C9D, //CJK UNIFIED IDEOGRAPH - 0xF8B0: 0x5F6D, //CJK UNIFIED IDEOGRAPH - 0xF8B1: 0x6F8E, //CJK UNIFIED IDEOGRAPH - 0xF8B2: 0x70F9, //CJK UNIFIED IDEOGRAPH - 0xF8B3: 0x81A8, //CJK UNIFIED IDEOGRAPH - 0xF8B4: 0x610E, //CJK UNIFIED IDEOGRAPH - 0xF8B5: 0x4FBF, //CJK UNIFIED IDEOGRAPH - 0xF8B6: 0x504F, //CJK UNIFIED IDEOGRAPH - 0xF8B7: 0x6241, //CJK UNIFIED IDEOGRAPH - 0xF8B8: 0x7247, //CJK UNIFIED IDEOGRAPH - 0xF8B9: 0x7BC7, //CJK UNIFIED IDEOGRAPH - 0xF8BA: 0x7DE8, //CJK UNIFIED IDEOGRAPH - 0xF8BB: 0x7FE9, //CJK UNIFIED IDEOGRAPH - 0xF8BC: 0x904D, //CJK UNIFIED IDEOGRAPH - 0xF8BD: 0x97AD, //CJK UNIFIED IDEOGRAPH - 0xF8BE: 0x9A19, //CJK UNIFIED IDEOGRAPH - 0xF8BF: 0x8CB6, //CJK UNIFIED IDEOGRAPH - 0xF8C0: 0x576A, //CJK UNIFIED IDEOGRAPH - 0xF8C1: 0x5E73, //CJK UNIFIED IDEOGRAPH - 0xF8C2: 0x67B0, //CJK UNIFIED IDEOGRAPH - 0xF8C3: 0x840D, //CJK UNIFIED IDEOGRAPH - 0xF8C4: 0x8A55, //CJK UNIFIED IDEOGRAPH - 0xF8C5: 0x5420, //CJK UNIFIED IDEOGRAPH - 0xF8C6: 0x5B16, //CJK UNIFIED IDEOGRAPH - 0xF8C7: 0x5E63, //CJK UNIFIED IDEOGRAPH - 0xF8C8: 0x5EE2, //CJK UNIFIED IDEOGRAPH - 0xF8C9: 0x5F0A, //CJK UNIFIED IDEOGRAPH - 0xF8CA: 0x6583, //CJK UNIFIED IDEOGRAPH - 0xF8CB: 0x80BA, //CJK UNIFIED IDEOGRAPH - 0xF8CC: 0x853D, //CJK UNIFIED IDEOGRAPH - 0xF8CD: 0x9589, //CJK UNIFIED IDEOGRAPH - 0xF8CE: 0x965B, //CJK UNIFIED IDEOGRAPH - 0xF8CF: 0x4F48, //CJK UNIFIED IDEOGRAPH - 0xF8D0: 0x5305, //CJK UNIFIED IDEOGRAPH - 0xF8D1: 0x530D, //CJK UNIFIED IDEOGRAPH - 0xF8D2: 0x530F, //CJK UNIFIED IDEOGRAPH - 0xF8D3: 0x5486, //CJK UNIFIED IDEOGRAPH - 0xF8D4: 0x54FA, //CJK UNIFIED IDEOGRAPH - 0xF8D5: 0x5703, //CJK UNIFIED IDEOGRAPH - 0xF8D6: 0x5E03, //CJK UNIFIED IDEOGRAPH - 0xF8D7: 0x6016, //CJK UNIFIED IDEOGRAPH - 0xF8D8: 0x629B, //CJK UNIFIED IDEOGRAPH - 0xF8D9: 0x62B1, //CJK UNIFIED IDEOGRAPH - 0xF8DA: 0x6355, //CJK UNIFIED IDEOGRAPH - 0xF8DB: 0xFA06, //CJK COMPATIBILITY IDEOGRAPH - 0xF8DC: 0x6CE1, //CJK UNIFIED IDEOGRAPH - 0xF8DD: 0x6D66, //CJK UNIFIED IDEOGRAPH - 0xF8DE: 0x75B1, //CJK UNIFIED IDEOGRAPH - 0xF8DF: 0x7832, //CJK UNIFIED IDEOGRAPH - 0xF8E0: 0x80DE, //CJK UNIFIED IDEOGRAPH - 0xF8E1: 0x812F, //CJK UNIFIED IDEOGRAPH - 0xF8E2: 0x82DE, //CJK UNIFIED IDEOGRAPH - 0xF8E3: 0x8461, //CJK UNIFIED IDEOGRAPH - 0xF8E4: 0x84B2, //CJK UNIFIED IDEOGRAPH - 0xF8E5: 0x888D, //CJK UNIFIED IDEOGRAPH - 0xF8E6: 0x8912, //CJK UNIFIED IDEOGRAPH - 0xF8E7: 0x900B, //CJK UNIFIED IDEOGRAPH - 0xF8E8: 0x92EA, //CJK UNIFIED IDEOGRAPH - 0xF8E9: 0x98FD, //CJK UNIFIED IDEOGRAPH - 0xF8EA: 0x9B91, //CJK UNIFIED IDEOGRAPH - 0xF8EB: 0x5E45, //CJK UNIFIED IDEOGRAPH - 0xF8EC: 0x66B4, //CJK UNIFIED IDEOGRAPH - 0xF8ED: 0x66DD, //CJK UNIFIED IDEOGRAPH - 0xF8EE: 0x7011, //CJK UNIFIED IDEOGRAPH - 0xF8EF: 0x7206, //CJK UNIFIED IDEOGRAPH - 0xF8F0: 0xFA07, //CJK COMPATIBILITY IDEOGRAPH - 0xF8F1: 0x4FF5, //CJK UNIFIED IDEOGRAPH - 0xF8F2: 0x527D, //CJK UNIFIED IDEOGRAPH - 0xF8F3: 0x5F6A, //CJK UNIFIED IDEOGRAPH - 0xF8F4: 0x6153, //CJK UNIFIED IDEOGRAPH - 0xF8F5: 0x6753, //CJK UNIFIED IDEOGRAPH - 0xF8F6: 0x6A19, //CJK UNIFIED IDEOGRAPH - 0xF8F7: 0x6F02, //CJK UNIFIED IDEOGRAPH - 0xF8F8: 0x74E2, //CJK UNIFIED IDEOGRAPH - 0xF8F9: 0x7968, //CJK UNIFIED IDEOGRAPH - 0xF8FA: 0x8868, //CJK UNIFIED IDEOGRAPH - 0xF8FB: 0x8C79, //CJK UNIFIED IDEOGRAPH - 0xF8FC: 0x98C7, //CJK UNIFIED IDEOGRAPH - 0xF8FD: 0x98C4, //CJK UNIFIED IDEOGRAPH - 0xF8FE: 0x9A43, //CJK UNIFIED IDEOGRAPH - 0xF9A1: 0x54C1, //CJK UNIFIED IDEOGRAPH - 0xF9A2: 0x7A1F, //CJK UNIFIED IDEOGRAPH - 0xF9A3: 0x6953, //CJK UNIFIED IDEOGRAPH - 0xF9A4: 0x8AF7, //CJK UNIFIED IDEOGRAPH - 0xF9A5: 0x8C4A, //CJK UNIFIED IDEOGRAPH - 0xF9A6: 0x98A8, //CJK UNIFIED IDEOGRAPH - 0xF9A7: 0x99AE, //CJK UNIFIED IDEOGRAPH - 0xF9A8: 0x5F7C, //CJK UNIFIED IDEOGRAPH - 0xF9A9: 0x62AB, //CJK UNIFIED IDEOGRAPH - 0xF9AA: 0x75B2, //CJK UNIFIED IDEOGRAPH - 0xF9AB: 0x76AE, //CJK UNIFIED IDEOGRAPH - 0xF9AC: 0x88AB, //CJK UNIFIED IDEOGRAPH - 0xF9AD: 0x907F, //CJK UNIFIED IDEOGRAPH - 0xF9AE: 0x9642, //CJK UNIFIED IDEOGRAPH - 0xF9AF: 0x5339, //CJK UNIFIED IDEOGRAPH - 0xF9B0: 0x5F3C, //CJK UNIFIED IDEOGRAPH - 0xF9B1: 0x5FC5, //CJK UNIFIED IDEOGRAPH - 0xF9B2: 0x6CCC, //CJK UNIFIED IDEOGRAPH - 0xF9B3: 0x73CC, //CJK UNIFIED IDEOGRAPH - 0xF9B4: 0x7562, //CJK UNIFIED IDEOGRAPH - 0xF9B5: 0x758B, //CJK UNIFIED IDEOGRAPH - 0xF9B6: 0x7B46, //CJK UNIFIED IDEOGRAPH - 0xF9B7: 0x82FE, //CJK UNIFIED IDEOGRAPH - 0xF9B8: 0x999D, //CJK UNIFIED IDEOGRAPH - 0xF9B9: 0x4E4F, //CJK UNIFIED IDEOGRAPH - 0xF9BA: 0x903C, //CJK UNIFIED IDEOGRAPH - 0xF9BB: 0x4E0B, //CJK UNIFIED IDEOGRAPH - 0xF9BC: 0x4F55, //CJK UNIFIED IDEOGRAPH - 0xF9BD: 0x53A6, //CJK UNIFIED IDEOGRAPH - 0xF9BE: 0x590F, //CJK UNIFIED IDEOGRAPH - 0xF9BF: 0x5EC8, //CJK UNIFIED IDEOGRAPH - 0xF9C0: 0x6630, //CJK UNIFIED IDEOGRAPH - 0xF9C1: 0x6CB3, //CJK UNIFIED IDEOGRAPH - 0xF9C2: 0x7455, //CJK UNIFIED IDEOGRAPH - 0xF9C3: 0x8377, //CJK UNIFIED IDEOGRAPH - 0xF9C4: 0x8766, //CJK UNIFIED IDEOGRAPH - 0xF9C5: 0x8CC0, //CJK UNIFIED IDEOGRAPH - 0xF9C6: 0x9050, //CJK UNIFIED IDEOGRAPH - 0xF9C7: 0x971E, //CJK UNIFIED IDEOGRAPH - 0xF9C8: 0x9C15, //CJK UNIFIED IDEOGRAPH - 0xF9C9: 0x58D1, //CJK UNIFIED IDEOGRAPH - 0xF9CA: 0x5B78, //CJK UNIFIED IDEOGRAPH - 0xF9CB: 0x8650, //CJK UNIFIED IDEOGRAPH - 0xF9CC: 0x8B14, //CJK UNIFIED IDEOGRAPH - 0xF9CD: 0x9DB4, //CJK UNIFIED IDEOGRAPH - 0xF9CE: 0x5BD2, //CJK UNIFIED IDEOGRAPH - 0xF9CF: 0x6068, //CJK UNIFIED IDEOGRAPH - 0xF9D0: 0x608D, //CJK UNIFIED IDEOGRAPH - 0xF9D1: 0x65F1, //CJK UNIFIED IDEOGRAPH - 0xF9D2: 0x6C57, //CJK UNIFIED IDEOGRAPH - 0xF9D3: 0x6F22, //CJK UNIFIED IDEOGRAPH - 0xF9D4: 0x6FA3, //CJK UNIFIED IDEOGRAPH - 0xF9D5: 0x701A, //CJK UNIFIED IDEOGRAPH - 0xF9D6: 0x7F55, //CJK UNIFIED IDEOGRAPH - 0xF9D7: 0x7FF0, //CJK UNIFIED IDEOGRAPH - 0xF9D8: 0x9591, //CJK UNIFIED IDEOGRAPH - 0xF9D9: 0x9592, //CJK UNIFIED IDEOGRAPH - 0xF9DA: 0x9650, //CJK UNIFIED IDEOGRAPH - 0xF9DB: 0x97D3, //CJK UNIFIED IDEOGRAPH - 0xF9DC: 0x5272, //CJK UNIFIED IDEOGRAPH - 0xF9DD: 0x8F44, //CJK UNIFIED IDEOGRAPH - 0xF9DE: 0x51FD, //CJK UNIFIED IDEOGRAPH - 0xF9DF: 0x542B, //CJK UNIFIED IDEOGRAPH - 0xF9E0: 0x54B8, //CJK UNIFIED IDEOGRAPH - 0xF9E1: 0x5563, //CJK UNIFIED IDEOGRAPH - 0xF9E2: 0x558A, //CJK UNIFIED IDEOGRAPH - 0xF9E3: 0x6ABB, //CJK UNIFIED IDEOGRAPH - 0xF9E4: 0x6DB5, //CJK UNIFIED IDEOGRAPH - 0xF9E5: 0x7DD8, //CJK UNIFIED IDEOGRAPH - 0xF9E6: 0x8266, //CJK UNIFIED IDEOGRAPH - 0xF9E7: 0x929C, //CJK UNIFIED IDEOGRAPH - 0xF9E8: 0x9677, //CJK UNIFIED IDEOGRAPH - 0xF9E9: 0x9E79, //CJK UNIFIED IDEOGRAPH - 0xF9EA: 0x5408, //CJK UNIFIED IDEOGRAPH - 0xF9EB: 0x54C8, //CJK UNIFIED IDEOGRAPH - 0xF9EC: 0x76D2, //CJK UNIFIED IDEOGRAPH - 0xF9ED: 0x86E4, //CJK UNIFIED IDEOGRAPH - 0xF9EE: 0x95A4, //CJK UNIFIED IDEOGRAPH - 0xF9EF: 0x95D4, //CJK UNIFIED IDEOGRAPH - 0xF9F0: 0x965C, //CJK UNIFIED IDEOGRAPH - 0xF9F1: 0x4EA2, //CJK UNIFIED IDEOGRAPH - 0xF9F2: 0x4F09, //CJK UNIFIED IDEOGRAPH - 0xF9F3: 0x59EE, //CJK UNIFIED IDEOGRAPH - 0xF9F4: 0x5AE6, //CJK UNIFIED IDEOGRAPH - 0xF9F5: 0x5DF7, //CJK UNIFIED IDEOGRAPH - 0xF9F6: 0x6052, //CJK UNIFIED IDEOGRAPH - 0xF9F7: 0x6297, //CJK UNIFIED IDEOGRAPH - 0xF9F8: 0x676D, //CJK UNIFIED IDEOGRAPH - 0xF9F9: 0x6841, //CJK UNIFIED IDEOGRAPH - 0xF9FA: 0x6C86, //CJK UNIFIED IDEOGRAPH - 0xF9FB: 0x6E2F, //CJK UNIFIED IDEOGRAPH - 0xF9FC: 0x7F38, //CJK UNIFIED IDEOGRAPH - 0xF9FD: 0x809B, //CJK UNIFIED IDEOGRAPH - 0xF9FE: 0x822A, //CJK UNIFIED IDEOGRAPH - 0xFAA1: 0xFA08, //CJK COMPATIBILITY IDEOGRAPH - 0xFAA2: 0xFA09, //CJK COMPATIBILITY IDEOGRAPH - 0xFAA3: 0x9805, //CJK UNIFIED IDEOGRAPH - 0xFAA4: 0x4EA5, //CJK UNIFIED IDEOGRAPH - 0xFAA5: 0x5055, //CJK UNIFIED IDEOGRAPH - 0xFAA6: 0x54B3, //CJK UNIFIED IDEOGRAPH - 0xFAA7: 0x5793, //CJK UNIFIED IDEOGRAPH - 0xFAA8: 0x595A, //CJK UNIFIED IDEOGRAPH - 0xFAA9: 0x5B69, //CJK UNIFIED IDEOGRAPH - 0xFAAA: 0x5BB3, //CJK UNIFIED IDEOGRAPH - 0xFAAB: 0x61C8, //CJK UNIFIED IDEOGRAPH - 0xFAAC: 0x6977, //CJK UNIFIED IDEOGRAPH - 0xFAAD: 0x6D77, //CJK UNIFIED IDEOGRAPH - 0xFAAE: 0x7023, //CJK UNIFIED IDEOGRAPH - 0xFAAF: 0x87F9, //CJK UNIFIED IDEOGRAPH - 0xFAB0: 0x89E3, //CJK UNIFIED IDEOGRAPH - 0xFAB1: 0x8A72, //CJK UNIFIED IDEOGRAPH - 0xFAB2: 0x8AE7, //CJK UNIFIED IDEOGRAPH - 0xFAB3: 0x9082, //CJK UNIFIED IDEOGRAPH - 0xFAB4: 0x99ED, //CJK UNIFIED IDEOGRAPH - 0xFAB5: 0x9AB8, //CJK UNIFIED IDEOGRAPH - 0xFAB6: 0x52BE, //CJK UNIFIED IDEOGRAPH - 0xFAB7: 0x6838, //CJK UNIFIED IDEOGRAPH - 0xFAB8: 0x5016, //CJK UNIFIED IDEOGRAPH - 0xFAB9: 0x5E78, //CJK UNIFIED IDEOGRAPH - 0xFABA: 0x674F, //CJK UNIFIED IDEOGRAPH - 0xFABB: 0x8347, //CJK UNIFIED IDEOGRAPH - 0xFABC: 0x884C, //CJK UNIFIED IDEOGRAPH - 0xFABD: 0x4EAB, //CJK UNIFIED IDEOGRAPH - 0xFABE: 0x5411, //CJK UNIFIED IDEOGRAPH - 0xFABF: 0x56AE, //CJK UNIFIED IDEOGRAPH - 0xFAC0: 0x73E6, //CJK UNIFIED IDEOGRAPH - 0xFAC1: 0x9115, //CJK UNIFIED IDEOGRAPH - 0xFAC2: 0x97FF, //CJK UNIFIED IDEOGRAPH - 0xFAC3: 0x9909, //CJK UNIFIED IDEOGRAPH - 0xFAC4: 0x9957, //CJK UNIFIED IDEOGRAPH - 0xFAC5: 0x9999, //CJK UNIFIED IDEOGRAPH - 0xFAC6: 0x5653, //CJK UNIFIED IDEOGRAPH - 0xFAC7: 0x589F, //CJK UNIFIED IDEOGRAPH - 0xFAC8: 0x865B, //CJK UNIFIED IDEOGRAPH - 0xFAC9: 0x8A31, //CJK UNIFIED IDEOGRAPH - 0xFACA: 0x61B2, //CJK UNIFIED IDEOGRAPH - 0xFACB: 0x6AF6, //CJK UNIFIED IDEOGRAPH - 0xFACC: 0x737B, //CJK UNIFIED IDEOGRAPH - 0xFACD: 0x8ED2, //CJK UNIFIED IDEOGRAPH - 0xFACE: 0x6B47, //CJK UNIFIED IDEOGRAPH - 0xFACF: 0x96AA, //CJK UNIFIED IDEOGRAPH - 0xFAD0: 0x9A57, //CJK UNIFIED IDEOGRAPH - 0xFAD1: 0x5955, //CJK UNIFIED IDEOGRAPH - 0xFAD2: 0x7200, //CJK UNIFIED IDEOGRAPH - 0xFAD3: 0x8D6B, //CJK UNIFIED IDEOGRAPH - 0xFAD4: 0x9769, //CJK UNIFIED IDEOGRAPH - 0xFAD5: 0x4FD4, //CJK UNIFIED IDEOGRAPH - 0xFAD6: 0x5CF4, //CJK UNIFIED IDEOGRAPH - 0xFAD7: 0x5F26, //CJK UNIFIED IDEOGRAPH - 0xFAD8: 0x61F8, //CJK UNIFIED IDEOGRAPH - 0xFAD9: 0x665B, //CJK UNIFIED IDEOGRAPH - 0xFADA: 0x6CEB, //CJK UNIFIED IDEOGRAPH - 0xFADB: 0x70AB, //CJK UNIFIED IDEOGRAPH - 0xFADC: 0x7384, //CJK UNIFIED IDEOGRAPH - 0xFADD: 0x73B9, //CJK UNIFIED IDEOGRAPH - 0xFADE: 0x73FE, //CJK UNIFIED IDEOGRAPH - 0xFADF: 0x7729, //CJK UNIFIED IDEOGRAPH - 0xFAE0: 0x774D, //CJK UNIFIED IDEOGRAPH - 0xFAE1: 0x7D43, //CJK UNIFIED IDEOGRAPH - 0xFAE2: 0x7D62, //CJK UNIFIED IDEOGRAPH - 0xFAE3: 0x7E23, //CJK UNIFIED IDEOGRAPH - 0xFAE4: 0x8237, //CJK UNIFIED IDEOGRAPH - 0xFAE5: 0x8852, //CJK UNIFIED IDEOGRAPH - 0xFAE6: 0xFA0A, //CJK COMPATIBILITY IDEOGRAPH - 0xFAE7: 0x8CE2, //CJK UNIFIED IDEOGRAPH - 0xFAE8: 0x9249, //CJK UNIFIED IDEOGRAPH - 0xFAE9: 0x986F, //CJK UNIFIED IDEOGRAPH - 0xFAEA: 0x5B51, //CJK UNIFIED IDEOGRAPH - 0xFAEB: 0x7A74, //CJK UNIFIED IDEOGRAPH - 0xFAEC: 0x8840, //CJK UNIFIED IDEOGRAPH - 0xFAED: 0x9801, //CJK UNIFIED IDEOGRAPH - 0xFAEE: 0x5ACC, //CJK UNIFIED IDEOGRAPH - 0xFAEF: 0x4FE0, //CJK UNIFIED IDEOGRAPH - 0xFAF0: 0x5354, //CJK UNIFIED IDEOGRAPH - 0xFAF1: 0x593E, //CJK UNIFIED IDEOGRAPH - 0xFAF2: 0x5CFD, //CJK UNIFIED IDEOGRAPH - 0xFAF3: 0x633E, //CJK UNIFIED IDEOGRAPH - 0xFAF4: 0x6D79, //CJK UNIFIED IDEOGRAPH - 0xFAF5: 0x72F9, //CJK UNIFIED IDEOGRAPH - 0xFAF6: 0x8105, //CJK UNIFIED IDEOGRAPH - 0xFAF7: 0x8107, //CJK UNIFIED IDEOGRAPH - 0xFAF8: 0x83A2, //CJK UNIFIED IDEOGRAPH - 0xFAF9: 0x92CF, //CJK UNIFIED IDEOGRAPH - 0xFAFA: 0x9830, //CJK UNIFIED IDEOGRAPH - 0xFAFB: 0x4EA8, //CJK UNIFIED IDEOGRAPH - 0xFAFC: 0x5144, //CJK UNIFIED IDEOGRAPH - 0xFAFD: 0x5211, //CJK UNIFIED IDEOGRAPH - 0xFAFE: 0x578B, //CJK UNIFIED IDEOGRAPH - 0xFBA1: 0x5F62, //CJK UNIFIED IDEOGRAPH - 0xFBA2: 0x6CC2, //CJK UNIFIED IDEOGRAPH - 0xFBA3: 0x6ECE, //CJK UNIFIED IDEOGRAPH - 0xFBA4: 0x7005, //CJK UNIFIED IDEOGRAPH - 0xFBA5: 0x7050, //CJK UNIFIED IDEOGRAPH - 0xFBA6: 0x70AF, //CJK UNIFIED IDEOGRAPH - 0xFBA7: 0x7192, //CJK UNIFIED IDEOGRAPH - 0xFBA8: 0x73E9, //CJK UNIFIED IDEOGRAPH - 0xFBA9: 0x7469, //CJK UNIFIED IDEOGRAPH - 0xFBAA: 0x834A, //CJK UNIFIED IDEOGRAPH - 0xFBAB: 0x87A2, //CJK UNIFIED IDEOGRAPH - 0xFBAC: 0x8861, //CJK UNIFIED IDEOGRAPH - 0xFBAD: 0x9008, //CJK UNIFIED IDEOGRAPH - 0xFBAE: 0x90A2, //CJK UNIFIED IDEOGRAPH - 0xFBAF: 0x93A3, //CJK UNIFIED IDEOGRAPH - 0xFBB0: 0x99A8, //CJK UNIFIED IDEOGRAPH - 0xFBB1: 0x516E, //CJK UNIFIED IDEOGRAPH - 0xFBB2: 0x5F57, //CJK UNIFIED IDEOGRAPH - 0xFBB3: 0x60E0, //CJK UNIFIED IDEOGRAPH - 0xFBB4: 0x6167, //CJK UNIFIED IDEOGRAPH - 0xFBB5: 0x66B3, //CJK UNIFIED IDEOGRAPH - 0xFBB6: 0x8559, //CJK UNIFIED IDEOGRAPH - 0xFBB7: 0x8E4A, //CJK UNIFIED IDEOGRAPH - 0xFBB8: 0x91AF, //CJK UNIFIED IDEOGRAPH - 0xFBB9: 0x978B, //CJK UNIFIED IDEOGRAPH - 0xFBBA: 0x4E4E, //CJK UNIFIED IDEOGRAPH - 0xFBBB: 0x4E92, //CJK UNIFIED IDEOGRAPH - 0xFBBC: 0x547C, //CJK UNIFIED IDEOGRAPH - 0xFBBD: 0x58D5, //CJK UNIFIED IDEOGRAPH - 0xFBBE: 0x58FA, //CJK UNIFIED IDEOGRAPH - 0xFBBF: 0x597D, //CJK UNIFIED IDEOGRAPH - 0xFBC0: 0x5CB5, //CJK UNIFIED IDEOGRAPH - 0xFBC1: 0x5F27, //CJK UNIFIED IDEOGRAPH - 0xFBC2: 0x6236, //CJK UNIFIED IDEOGRAPH - 0xFBC3: 0x6248, //CJK UNIFIED IDEOGRAPH - 0xFBC4: 0x660A, //CJK UNIFIED IDEOGRAPH - 0xFBC5: 0x6667, //CJK UNIFIED IDEOGRAPH - 0xFBC6: 0x6BEB, //CJK UNIFIED IDEOGRAPH - 0xFBC7: 0x6D69, //CJK UNIFIED IDEOGRAPH - 0xFBC8: 0x6DCF, //CJK UNIFIED IDEOGRAPH - 0xFBC9: 0x6E56, //CJK UNIFIED IDEOGRAPH - 0xFBCA: 0x6EF8, //CJK UNIFIED IDEOGRAPH - 0xFBCB: 0x6F94, //CJK UNIFIED IDEOGRAPH - 0xFBCC: 0x6FE0, //CJK UNIFIED IDEOGRAPH - 0xFBCD: 0x6FE9, //CJK UNIFIED IDEOGRAPH - 0xFBCE: 0x705D, //CJK UNIFIED IDEOGRAPH - 0xFBCF: 0x72D0, //CJK UNIFIED IDEOGRAPH - 0xFBD0: 0x7425, //CJK UNIFIED IDEOGRAPH - 0xFBD1: 0x745A, //CJK UNIFIED IDEOGRAPH - 0xFBD2: 0x74E0, //CJK UNIFIED IDEOGRAPH - 0xFBD3: 0x7693, //CJK UNIFIED IDEOGRAPH - 0xFBD4: 0x795C, //CJK UNIFIED IDEOGRAPH - 0xFBD5: 0x7CCA, //CJK UNIFIED IDEOGRAPH - 0xFBD6: 0x7E1E, //CJK UNIFIED IDEOGRAPH - 0xFBD7: 0x80E1, //CJK UNIFIED IDEOGRAPH - 0xFBD8: 0x82A6, //CJK UNIFIED IDEOGRAPH - 0xFBD9: 0x846B, //CJK UNIFIED IDEOGRAPH - 0xFBDA: 0x84BF, //CJK UNIFIED IDEOGRAPH - 0xFBDB: 0x864E, //CJK UNIFIED IDEOGRAPH - 0xFBDC: 0x865F, //CJK UNIFIED IDEOGRAPH - 0xFBDD: 0x8774, //CJK UNIFIED IDEOGRAPH - 0xFBDE: 0x8B77, //CJK UNIFIED IDEOGRAPH - 0xFBDF: 0x8C6A, //CJK UNIFIED IDEOGRAPH - 0xFBE0: 0x93AC, //CJK UNIFIED IDEOGRAPH - 0xFBE1: 0x9800, //CJK UNIFIED IDEOGRAPH - 0xFBE2: 0x9865, //CJK UNIFIED IDEOGRAPH - 0xFBE3: 0x60D1, //CJK UNIFIED IDEOGRAPH - 0xFBE4: 0x6216, //CJK UNIFIED IDEOGRAPH - 0xFBE5: 0x9177, //CJK UNIFIED IDEOGRAPH - 0xFBE6: 0x5A5A, //CJK UNIFIED IDEOGRAPH - 0xFBE7: 0x660F, //CJK UNIFIED IDEOGRAPH - 0xFBE8: 0x6DF7, //CJK UNIFIED IDEOGRAPH - 0xFBE9: 0x6E3E, //CJK UNIFIED IDEOGRAPH - 0xFBEA: 0x743F, //CJK UNIFIED IDEOGRAPH - 0xFBEB: 0x9B42, //CJK UNIFIED IDEOGRAPH - 0xFBEC: 0x5FFD, //CJK UNIFIED IDEOGRAPH - 0xFBED: 0x60DA, //CJK UNIFIED IDEOGRAPH - 0xFBEE: 0x7B0F, //CJK UNIFIED IDEOGRAPH - 0xFBEF: 0x54C4, //CJK UNIFIED IDEOGRAPH - 0xFBF0: 0x5F18, //CJK UNIFIED IDEOGRAPH - 0xFBF1: 0x6C5E, //CJK UNIFIED IDEOGRAPH - 0xFBF2: 0x6CD3, //CJK UNIFIED IDEOGRAPH - 0xFBF3: 0x6D2A, //CJK UNIFIED IDEOGRAPH - 0xFBF4: 0x70D8, //CJK UNIFIED IDEOGRAPH - 0xFBF5: 0x7D05, //CJK UNIFIED IDEOGRAPH - 0xFBF6: 0x8679, //CJK UNIFIED IDEOGRAPH - 0xFBF7: 0x8A0C, //CJK UNIFIED IDEOGRAPH - 0xFBF8: 0x9D3B, //CJK UNIFIED IDEOGRAPH - 0xFBF9: 0x5316, //CJK UNIFIED IDEOGRAPH - 0xFBFA: 0x548C, //CJK UNIFIED IDEOGRAPH - 0xFBFB: 0x5B05, //CJK UNIFIED IDEOGRAPH - 0xFBFC: 0x6A3A, //CJK UNIFIED IDEOGRAPH - 0xFBFD: 0x706B, //CJK UNIFIED IDEOGRAPH - 0xFBFE: 0x7575, //CJK UNIFIED IDEOGRAPH - 0xFCA1: 0x798D, //CJK UNIFIED IDEOGRAPH - 0xFCA2: 0x79BE, //CJK UNIFIED IDEOGRAPH - 0xFCA3: 0x82B1, //CJK UNIFIED IDEOGRAPH - 0xFCA4: 0x83EF, //CJK UNIFIED IDEOGRAPH - 0xFCA5: 0x8A71, //CJK UNIFIED IDEOGRAPH - 0xFCA6: 0x8B41, //CJK UNIFIED IDEOGRAPH - 0xFCA7: 0x8CA8, //CJK UNIFIED IDEOGRAPH - 0xFCA8: 0x9774, //CJK UNIFIED IDEOGRAPH - 0xFCA9: 0xFA0B, //CJK COMPATIBILITY IDEOGRAPH - 0xFCAA: 0x64F4, //CJK UNIFIED IDEOGRAPH - 0xFCAB: 0x652B, //CJK UNIFIED IDEOGRAPH - 0xFCAC: 0x78BA, //CJK UNIFIED IDEOGRAPH - 0xFCAD: 0x78BB, //CJK UNIFIED IDEOGRAPH - 0xFCAE: 0x7A6B, //CJK UNIFIED IDEOGRAPH - 0xFCAF: 0x4E38, //CJK UNIFIED IDEOGRAPH - 0xFCB0: 0x559A, //CJK UNIFIED IDEOGRAPH - 0xFCB1: 0x5950, //CJK UNIFIED IDEOGRAPH - 0xFCB2: 0x5BA6, //CJK UNIFIED IDEOGRAPH - 0xFCB3: 0x5E7B, //CJK UNIFIED IDEOGRAPH - 0xFCB4: 0x60A3, //CJK UNIFIED IDEOGRAPH - 0xFCB5: 0x63DB, //CJK UNIFIED IDEOGRAPH - 0xFCB6: 0x6B61, //CJK UNIFIED IDEOGRAPH - 0xFCB7: 0x6665, //CJK UNIFIED IDEOGRAPH - 0xFCB8: 0x6853, //CJK UNIFIED IDEOGRAPH - 0xFCB9: 0x6E19, //CJK UNIFIED IDEOGRAPH - 0xFCBA: 0x7165, //CJK UNIFIED IDEOGRAPH - 0xFCBB: 0x74B0, //CJK UNIFIED IDEOGRAPH - 0xFCBC: 0x7D08, //CJK UNIFIED IDEOGRAPH - 0xFCBD: 0x9084, //CJK UNIFIED IDEOGRAPH - 0xFCBE: 0x9A69, //CJK UNIFIED IDEOGRAPH - 0xFCBF: 0x9C25, //CJK UNIFIED IDEOGRAPH - 0xFCC0: 0x6D3B, //CJK UNIFIED IDEOGRAPH - 0xFCC1: 0x6ED1, //CJK UNIFIED IDEOGRAPH - 0xFCC2: 0x733E, //CJK UNIFIED IDEOGRAPH - 0xFCC3: 0x8C41, //CJK UNIFIED IDEOGRAPH - 0xFCC4: 0x95CA, //CJK UNIFIED IDEOGRAPH - 0xFCC5: 0x51F0, //CJK UNIFIED IDEOGRAPH - 0xFCC6: 0x5E4C, //CJK UNIFIED IDEOGRAPH - 0xFCC7: 0x5FA8, //CJK UNIFIED IDEOGRAPH - 0xFCC8: 0x604D, //CJK UNIFIED IDEOGRAPH - 0xFCC9: 0x60F6, //CJK UNIFIED IDEOGRAPH - 0xFCCA: 0x6130, //CJK UNIFIED IDEOGRAPH - 0xFCCB: 0x614C, //CJK UNIFIED IDEOGRAPH - 0xFCCC: 0x6643, //CJK UNIFIED IDEOGRAPH - 0xFCCD: 0x6644, //CJK UNIFIED IDEOGRAPH - 0xFCCE: 0x69A5, //CJK UNIFIED IDEOGRAPH - 0xFCCF: 0x6CC1, //CJK UNIFIED IDEOGRAPH - 0xFCD0: 0x6E5F, //CJK UNIFIED IDEOGRAPH - 0xFCD1: 0x6EC9, //CJK UNIFIED IDEOGRAPH - 0xFCD2: 0x6F62, //CJK UNIFIED IDEOGRAPH - 0xFCD3: 0x714C, //CJK UNIFIED IDEOGRAPH - 0xFCD4: 0x749C, //CJK UNIFIED IDEOGRAPH - 0xFCD5: 0x7687, //CJK UNIFIED IDEOGRAPH - 0xFCD6: 0x7BC1, //CJK UNIFIED IDEOGRAPH - 0xFCD7: 0x7C27, //CJK UNIFIED IDEOGRAPH - 0xFCD8: 0x8352, //CJK UNIFIED IDEOGRAPH - 0xFCD9: 0x8757, //CJK UNIFIED IDEOGRAPH - 0xFCDA: 0x9051, //CJK UNIFIED IDEOGRAPH - 0xFCDB: 0x968D, //CJK UNIFIED IDEOGRAPH - 0xFCDC: 0x9EC3, //CJK UNIFIED IDEOGRAPH - 0xFCDD: 0x532F, //CJK UNIFIED IDEOGRAPH - 0xFCDE: 0x56DE, //CJK UNIFIED IDEOGRAPH - 0xFCDF: 0x5EFB, //CJK UNIFIED IDEOGRAPH - 0xFCE0: 0x5F8A, //CJK UNIFIED IDEOGRAPH - 0xFCE1: 0x6062, //CJK UNIFIED IDEOGRAPH - 0xFCE2: 0x6094, //CJK UNIFIED IDEOGRAPH - 0xFCE3: 0x61F7, //CJK UNIFIED IDEOGRAPH - 0xFCE4: 0x6666, //CJK UNIFIED IDEOGRAPH - 0xFCE5: 0x6703, //CJK UNIFIED IDEOGRAPH - 0xFCE6: 0x6A9C, //CJK UNIFIED IDEOGRAPH - 0xFCE7: 0x6DEE, //CJK UNIFIED IDEOGRAPH - 0xFCE8: 0x6FAE, //CJK UNIFIED IDEOGRAPH - 0xFCE9: 0x7070, //CJK UNIFIED IDEOGRAPH - 0xFCEA: 0x736A, //CJK UNIFIED IDEOGRAPH - 0xFCEB: 0x7E6A, //CJK UNIFIED IDEOGRAPH - 0xFCEC: 0x81BE, //CJK UNIFIED IDEOGRAPH - 0xFCED: 0x8334, //CJK UNIFIED IDEOGRAPH - 0xFCEE: 0x86D4, //CJK UNIFIED IDEOGRAPH - 0xFCEF: 0x8AA8, //CJK UNIFIED IDEOGRAPH - 0xFCF0: 0x8CC4, //CJK UNIFIED IDEOGRAPH - 0xFCF1: 0x5283, //CJK UNIFIED IDEOGRAPH - 0xFCF2: 0x7372, //CJK UNIFIED IDEOGRAPH - 0xFCF3: 0x5B96, //CJK UNIFIED IDEOGRAPH - 0xFCF4: 0x6A6B, //CJK UNIFIED IDEOGRAPH - 0xFCF5: 0x9404, //CJK UNIFIED IDEOGRAPH - 0xFCF6: 0x54EE, //CJK UNIFIED IDEOGRAPH - 0xFCF7: 0x5686, //CJK UNIFIED IDEOGRAPH - 0xFCF8: 0x5B5D, //CJK UNIFIED IDEOGRAPH - 0xFCF9: 0x6548, //CJK UNIFIED IDEOGRAPH - 0xFCFA: 0x6585, //CJK UNIFIED IDEOGRAPH - 0xFCFB: 0x66C9, //CJK UNIFIED IDEOGRAPH - 0xFCFC: 0x689F, //CJK UNIFIED IDEOGRAPH - 0xFCFD: 0x6D8D, //CJK UNIFIED IDEOGRAPH - 0xFCFE: 0x6DC6, //CJK UNIFIED IDEOGRAPH - 0xFDA1: 0x723B, //CJK UNIFIED IDEOGRAPH - 0xFDA2: 0x80B4, //CJK UNIFIED IDEOGRAPH - 0xFDA3: 0x9175, //CJK UNIFIED IDEOGRAPH - 0xFDA4: 0x9A4D, //CJK UNIFIED IDEOGRAPH - 0xFDA5: 0x4FAF, //CJK UNIFIED IDEOGRAPH - 0xFDA6: 0x5019, //CJK UNIFIED IDEOGRAPH - 0xFDA7: 0x539A, //CJK UNIFIED IDEOGRAPH - 0xFDA8: 0x540E, //CJK UNIFIED IDEOGRAPH - 0xFDA9: 0x543C, //CJK UNIFIED IDEOGRAPH - 0xFDAA: 0x5589, //CJK UNIFIED IDEOGRAPH - 0xFDAB: 0x55C5, //CJK UNIFIED IDEOGRAPH - 0xFDAC: 0x5E3F, //CJK UNIFIED IDEOGRAPH - 0xFDAD: 0x5F8C, //CJK UNIFIED IDEOGRAPH - 0xFDAE: 0x673D, //CJK UNIFIED IDEOGRAPH - 0xFDAF: 0x7166, //CJK UNIFIED IDEOGRAPH - 0xFDB0: 0x73DD, //CJK UNIFIED IDEOGRAPH - 0xFDB1: 0x9005, //CJK UNIFIED IDEOGRAPH - 0xFDB2: 0x52DB, //CJK UNIFIED IDEOGRAPH - 0xFDB3: 0x52F3, //CJK UNIFIED IDEOGRAPH - 0xFDB4: 0x5864, //CJK UNIFIED IDEOGRAPH - 0xFDB5: 0x58CE, //CJK UNIFIED IDEOGRAPH - 0xFDB6: 0x7104, //CJK UNIFIED IDEOGRAPH - 0xFDB7: 0x718F, //CJK UNIFIED IDEOGRAPH - 0xFDB8: 0x71FB, //CJK UNIFIED IDEOGRAPH - 0xFDB9: 0x85B0, //CJK UNIFIED IDEOGRAPH - 0xFDBA: 0x8A13, //CJK UNIFIED IDEOGRAPH - 0xFDBB: 0x6688, //CJK UNIFIED IDEOGRAPH - 0xFDBC: 0x85A8, //CJK UNIFIED IDEOGRAPH - 0xFDBD: 0x55A7, //CJK UNIFIED IDEOGRAPH - 0xFDBE: 0x6684, //CJK UNIFIED IDEOGRAPH - 0xFDBF: 0x714A, //CJK UNIFIED IDEOGRAPH - 0xFDC0: 0x8431, //CJK UNIFIED IDEOGRAPH - 0xFDC1: 0x5349, //CJK UNIFIED IDEOGRAPH - 0xFDC2: 0x5599, //CJK UNIFIED IDEOGRAPH - 0xFDC3: 0x6BC1, //CJK UNIFIED IDEOGRAPH - 0xFDC4: 0x5F59, //CJK UNIFIED IDEOGRAPH - 0xFDC5: 0x5FBD, //CJK UNIFIED IDEOGRAPH - 0xFDC6: 0x63EE, //CJK UNIFIED IDEOGRAPH - 0xFDC7: 0x6689, //CJK UNIFIED IDEOGRAPH - 0xFDC8: 0x7147, //CJK UNIFIED IDEOGRAPH - 0xFDC9: 0x8AF1, //CJK UNIFIED IDEOGRAPH - 0xFDCA: 0x8F1D, //CJK UNIFIED IDEOGRAPH - 0xFDCB: 0x9EBE, //CJK UNIFIED IDEOGRAPH - 0xFDCC: 0x4F11, //CJK UNIFIED IDEOGRAPH - 0xFDCD: 0x643A, //CJK UNIFIED IDEOGRAPH - 0xFDCE: 0x70CB, //CJK UNIFIED IDEOGRAPH - 0xFDCF: 0x7566, //CJK UNIFIED IDEOGRAPH - 0xFDD0: 0x8667, //CJK UNIFIED IDEOGRAPH - 0xFDD1: 0x6064, //CJK UNIFIED IDEOGRAPH - 0xFDD2: 0x8B4E, //CJK UNIFIED IDEOGRAPH - 0xFDD3: 0x9DF8, //CJK UNIFIED IDEOGRAPH - 0xFDD4: 0x5147, //CJK UNIFIED IDEOGRAPH - 0xFDD5: 0x51F6, //CJK UNIFIED IDEOGRAPH - 0xFDD6: 0x5308, //CJK UNIFIED IDEOGRAPH - 0xFDD7: 0x6D36, //CJK UNIFIED IDEOGRAPH - 0xFDD8: 0x80F8, //CJK UNIFIED IDEOGRAPH - 0xFDD9: 0x9ED1, //CJK UNIFIED IDEOGRAPH - 0xFDDA: 0x6615, //CJK UNIFIED IDEOGRAPH - 0xFDDB: 0x6B23, //CJK UNIFIED IDEOGRAPH - 0xFDDC: 0x7098, //CJK UNIFIED IDEOGRAPH - 0xFDDD: 0x75D5, //CJK UNIFIED IDEOGRAPH - 0xFDDE: 0x5403, //CJK UNIFIED IDEOGRAPH - 0xFDDF: 0x5C79, //CJK UNIFIED IDEOGRAPH - 0xFDE0: 0x7D07, //CJK UNIFIED IDEOGRAPH - 0xFDE1: 0x8A16, //CJK UNIFIED IDEOGRAPH - 0xFDE2: 0x6B20, //CJK UNIFIED IDEOGRAPH - 0xFDE3: 0x6B3D, //CJK UNIFIED IDEOGRAPH - 0xFDE4: 0x6B46, //CJK UNIFIED IDEOGRAPH - 0xFDE5: 0x5438, //CJK UNIFIED IDEOGRAPH - 0xFDE6: 0x6070, //CJK UNIFIED IDEOGRAPH - 0xFDE7: 0x6D3D, //CJK UNIFIED IDEOGRAPH - 0xFDE8: 0x7FD5, //CJK UNIFIED IDEOGRAPH - 0xFDE9: 0x8208, //CJK UNIFIED IDEOGRAPH - 0xFDEA: 0x50D6, //CJK UNIFIED IDEOGRAPH - 0xFDEB: 0x51DE, //CJK UNIFIED IDEOGRAPH - 0xFDEC: 0x559C, //CJK UNIFIED IDEOGRAPH - 0xFDED: 0x566B, //CJK UNIFIED IDEOGRAPH - 0xFDEE: 0x56CD, //CJK UNIFIED IDEOGRAPH - 0xFDEF: 0x59EC, //CJK UNIFIED IDEOGRAPH - 0xFDF0: 0x5B09, //CJK UNIFIED IDEOGRAPH - 0xFDF1: 0x5E0C, //CJK UNIFIED IDEOGRAPH - 0xFDF2: 0x6199, //CJK UNIFIED IDEOGRAPH - 0xFDF3: 0x6198, //CJK UNIFIED IDEOGRAPH - 0xFDF4: 0x6231, //CJK UNIFIED IDEOGRAPH - 0xFDF5: 0x665E, //CJK UNIFIED IDEOGRAPH - 0xFDF6: 0x66E6, //CJK UNIFIED IDEOGRAPH - 0xFDF7: 0x7199, //CJK UNIFIED IDEOGRAPH - 0xFDF8: 0x71B9, //CJK UNIFIED IDEOGRAPH - 0xFDF9: 0x71BA, //CJK UNIFIED IDEOGRAPH - 0xFDFA: 0x72A7, //CJK UNIFIED IDEOGRAPH - 0xFDFB: 0x79A7, //CJK UNIFIED IDEOGRAPH - 0xFDFC: 0x7A00, //CJK UNIFIED IDEOGRAPH - 0xFDFD: 0x7FB2, //CJK UNIFIED IDEOGRAPH - 0xFDFE: 0x8A70, //CJK UNIFIED IDEOGRAPH - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/cp950.go b/vendor/github.com/denisenkom/go-mssqldb/cp950.go deleted file mode 100644 index cbf25cb91..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/cp950.go +++ /dev/null @@ -1,13767 +0,0 @@ -package mssql - -var cp950 *charsetMap = &charsetMap{ - sb: [256]rune{ - 0x0000, //NULL - 0x0001, //START OF HEADING - 0x0002, //START OF TEXT - 0x0003, //END OF TEXT - 0x0004, //END OF TRANSMISSION - 0x0005, //ENQUIRY - 0x0006, //ACKNOWLEDGE - 0x0007, //BELL - 0x0008, //BACKSPACE - 0x0009, //HORIZONTAL TABULATION - 0x000A, //LINE FEED - 0x000B, //VERTICAL TABULATION - 0x000C, //FORM FEED - 0x000D, //CARRIAGE RETURN - 0x000E, //SHIFT OUT - 0x000F, //SHIFT IN - 0x0010, //DATA LINK ESCAPE - 0x0011, //DEVICE CONTROL ONE - 0x0012, //DEVICE CONTROL TWO - 0x0013, //DEVICE CONTROL THREE - 0x0014, //DEVICE CONTROL FOUR - 0x0015, //NEGATIVE ACKNOWLEDGE - 0x0016, //SYNCHRONOUS IDLE - 0x0017, //END OF TRANSMISSION BLOCK - 0x0018, //CANCEL - 0x0019, //END OF MEDIUM - 0x001A, //SUBSTITUTE - 0x001B, //ESCAPE - 0x001C, //FILE SEPARATOR - 0x001D, //GROUP SEPARATOR - 0x001E, //RECORD SEPARATOR - 0x001F, //UNIT SEPARATOR - 0x0020, //SPACE - 0x0021, //EXCLAMATION MARK - 0x0022, //QUOTATION MARK - 0x0023, //NUMBER SIGN - 0x0024, //DOLLAR SIGN - 0x0025, //PERCENT SIGN - 0x0026, //AMPERSAND - 0x0027, //APOSTROPHE - 0x0028, //LEFT PARENTHESIS - 0x0029, //RIGHT PARENTHESIS - 0x002A, //ASTERISK - 0x002B, //PLUS SIGN - 0x002C, //COMMA - 0x002D, //HYPHEN-MINUS - 0x002E, //FULL STOP - 0x002F, //SOLIDUS - 0x0030, //DIGIT ZERO - 0x0031, //DIGIT ONE - 0x0032, //DIGIT TWO - 0x0033, //DIGIT THREE - 0x0034, //DIGIT FOUR - 0x0035, //DIGIT FIVE - 0x0036, //DIGIT SIX - 0x0037, //DIGIT SEVEN - 0x0038, //DIGIT EIGHT - 0x0039, //DIGIT NINE - 0x003A, //COLON - 0x003B, //SEMICOLON - 0x003C, //LESS-THAN SIGN - 0x003D, //EQUALS SIGN - 0x003E, //GREATER-THAN SIGN - 0x003F, //QUESTION MARK - 0x0040, //COMMERCIAL AT - 0x0041, //LATIN CAPITAL LETTER A - 0x0042, //LATIN CAPITAL LETTER B - 0x0043, //LATIN CAPITAL LETTER C - 0x0044, //LATIN CAPITAL LETTER D - 0x0045, //LATIN CAPITAL LETTER E - 0x0046, //LATIN CAPITAL LETTER F - 0x0047, //LATIN CAPITAL LETTER G - 0x0048, //LATIN CAPITAL LETTER H - 0x0049, //LATIN CAPITAL LETTER I - 0x004A, //LATIN CAPITAL LETTER J - 0x004B, //LATIN CAPITAL LETTER K - 0x004C, //LATIN CAPITAL LETTER L - 0x004D, //LATIN CAPITAL LETTER M - 0x004E, //LATIN CAPITAL LETTER N - 0x004F, //LATIN CAPITAL LETTER O - 0x0050, //LATIN CAPITAL LETTER P - 0x0051, //LATIN CAPITAL LETTER Q - 0x0052, //LATIN CAPITAL LETTER R - 0x0053, //LATIN CAPITAL LETTER S - 0x0054, //LATIN CAPITAL LETTER T - 0x0055, //LATIN CAPITAL LETTER U - 0x0056, //LATIN CAPITAL LETTER V - 0x0057, //LATIN CAPITAL LETTER W - 0x0058, //LATIN CAPITAL LETTER X - 0x0059, //LATIN CAPITAL LETTER Y - 0x005A, //LATIN CAPITAL LETTER Z - 0x005B, //LEFT SQUARE BRACKET - 0x005C, //REVERSE SOLIDUS - 0x005D, //RIGHT SQUARE BRACKET - 0x005E, //CIRCUMFLEX ACCENT - 0x005F, //LOW LINE - 0x0060, //GRAVE ACCENT - 0x0061, //LATIN SMALL LETTER A - 0x0062, //LATIN SMALL LETTER B - 0x0063, //LATIN SMALL LETTER C - 0x0064, //LATIN SMALL LETTER D - 0x0065, //LATIN SMALL LETTER E - 0x0066, //LATIN SMALL LETTER F - 0x0067, //LATIN SMALL LETTER G - 0x0068, //LATIN SMALL LETTER H - 0x0069, //LATIN SMALL LETTER I - 0x006A, //LATIN SMALL LETTER J - 0x006B, //LATIN SMALL LETTER K - 0x006C, //LATIN SMALL LETTER L - 0x006D, //LATIN SMALL LETTER M - 0x006E, //LATIN SMALL LETTER N - 0x006F, //LATIN SMALL LETTER O - 0x0070, //LATIN SMALL LETTER P - 0x0071, //LATIN SMALL LETTER Q - 0x0072, //LATIN SMALL LETTER R - 0x0073, //LATIN SMALL LETTER S - 0x0074, //LATIN SMALL LETTER T - 0x0075, //LATIN SMALL LETTER U - 0x0076, //LATIN SMALL LETTER V - 0x0077, //LATIN SMALL LETTER W - 0x0078, //LATIN SMALL LETTER X - 0x0079, //LATIN SMALL LETTER Y - 0x007A, //LATIN SMALL LETTER Z - 0x007B, //LEFT CURLY BRACKET - 0x007C, //VERTICAL LINE - 0x007D, //RIGHT CURLY BRACKET - 0x007E, //TILDE - 0x007F, //DELETE - 0xFFFD, //UNDEFINED - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - -1, //DBCS LEAD BYTE - 0xFFFD, //UNDEFINED - }, - db: map[int]rune{ - 0xA140: 0x3000, //IDEOGRAPHIC SPACE - 0xA141: 0xFF0C, //FULLWIDTH COMMA - 0xA142: 0x3001, //IDEOGRAPHIC COMMA - 0xA143: 0x3002, //IDEOGRAPHIC FULL STOP - 0xA144: 0xFF0E, //FULLWIDTH FULL STOP - 0xA145: 0x2027, //HYPHENATION POINT - 0xA146: 0xFF1B, //FULLWIDTH SEMICOLON - 0xA147: 0xFF1A, //FULLWIDTH COLON - 0xA148: 0xFF1F, //FULLWIDTH QUESTION MARK - 0xA149: 0xFF01, //FULLWIDTH EXCLAMATION MARK - 0xA14A: 0xFE30, //PRESENTATION FORM FOR VERTICAL TWO DOT LEADER - 0xA14B: 0x2026, //HORIZONTAL ELLIPSIS - 0xA14C: 0x2025, //TWO DOT LEADER - 0xA14D: 0xFE50, //SMALL COMMA - 0xA14E: 0xFE51, //SMALL IDEOGRAPHIC COMMA - 0xA14F: 0xFE52, //SMALL FULL STOP - 0xA150: 0x00B7, //MIDDLE DOT - 0xA151: 0xFE54, //SMALL SEMICOLON - 0xA152: 0xFE55, //SMALL COLON - 0xA153: 0xFE56, //SMALL QUESTION MARK - 0xA154: 0xFE57, //SMALL EXCLAMATION MARK - 0xA155: 0xFF5C, //FULLWIDTH VERTICAL LINE - 0xA156: 0x2013, //EN DASH - 0xA157: 0xFE31, //PRESENTATION FORM FOR VERTICAL EM DASH - 0xA158: 0x2014, //EM DASH - 0xA159: 0xFE33, //PRESENTATION FORM FOR VERTICAL LOW LINE - 0xA15A: 0x2574, //BOX DRAWINGS LIGHT LEFT - 0xA15B: 0xFE34, //PRESENTATION FORM FOR VERTICAL WAVY LOW LINE - 0xA15C: 0xFE4F, //WAVY LOW LINE - 0xA15D: 0xFF08, //FULLWIDTH LEFT PARENTHESIS - 0xA15E: 0xFF09, //FULLWIDTH RIGHT PARENTHESIS - 0xA15F: 0xFE35, //PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS - 0xA160: 0xFE36, //PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS - 0xA161: 0xFF5B, //FULLWIDTH LEFT CURLY BRACKET - 0xA162: 0xFF5D, //FULLWIDTH RIGHT CURLY BRACKET - 0xA163: 0xFE37, //PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET - 0xA164: 0xFE38, //PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET - 0xA165: 0x3014, //LEFT TORTOISE SHELL BRACKET - 0xA166: 0x3015, //RIGHT TORTOISE SHELL BRACKET - 0xA167: 0xFE39, //PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET - 0xA168: 0xFE3A, //PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET - 0xA169: 0x3010, //LEFT BLACK LENTICULAR BRACKET - 0xA16A: 0x3011, //RIGHT BLACK LENTICULAR BRACKET - 0xA16B: 0xFE3B, //PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET - 0xA16C: 0xFE3C, //PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET - 0xA16D: 0x300A, //LEFT DOUBLE ANGLE BRACKET - 0xA16E: 0x300B, //RIGHT DOUBLE ANGLE BRACKET - 0xA16F: 0xFE3D, //PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET - 0xA170: 0xFE3E, //PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET - 0xA171: 0x3008, //LEFT ANGLE BRACKET - 0xA172: 0x3009, //RIGHT ANGLE BRACKET - 0xA173: 0xFE3F, //PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET - 0xA174: 0xFE40, //PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET - 0xA175: 0x300C, //LEFT CORNER BRACKET - 0xA176: 0x300D, //RIGHT CORNER BRACKET - 0xA177: 0xFE41, //PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET - 0xA178: 0xFE42, //PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET - 0xA179: 0x300E, //LEFT WHITE CORNER BRACKET - 0xA17A: 0x300F, //RIGHT WHITE CORNER BRACKET - 0xA17B: 0xFE43, //PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET - 0xA17C: 0xFE44, //PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET - 0xA17D: 0xFE59, //SMALL LEFT PARENTHESIS - 0xA17E: 0xFE5A, //SMALL RIGHT PARENTHESIS - 0xA1A1: 0xFE5B, //SMALL LEFT CURLY BRACKET - 0xA1A2: 0xFE5C, //SMALL RIGHT CURLY BRACKET - 0xA1A3: 0xFE5D, //SMALL LEFT TORTOISE SHELL BRACKET - 0xA1A4: 0xFE5E, //SMALL RIGHT TORTOISE SHELL BRACKET - 0xA1A5: 0x2018, //LEFT SINGLE QUOTATION MARK - 0xA1A6: 0x2019, //RIGHT SINGLE QUOTATION MARK - 0xA1A7: 0x201C, //LEFT DOUBLE QUOTATION MARK - 0xA1A8: 0x201D, //RIGHT DOUBLE QUOTATION MARK - 0xA1A9: 0x301D, //REVERSED DOUBLE PRIME QUOTATION MARK - 0xA1AA: 0x301E, //DOUBLE PRIME QUOTATION MARK - 0xA1AB: 0x2035, //REVERSED PRIME - 0xA1AC: 0x2032, //PRIME - 0xA1AD: 0xFF03, //FULLWIDTH NUMBER SIGN - 0xA1AE: 0xFF06, //FULLWIDTH AMPERSAND - 0xA1AF: 0xFF0A, //FULLWIDTH ASTERISK - 0xA1B0: 0x203B, //REFERENCE MARK - 0xA1B1: 0x00A7, //SECTION SIGN - 0xA1B2: 0x3003, //DITTO MARK - 0xA1B3: 0x25CB, //WHITE CIRCLE - 0xA1B4: 0x25CF, //BLACK CIRCLE - 0xA1B5: 0x25B3, //WHITE UP-POINTING TRIANGLE - 0xA1B6: 0x25B2, //BLACK UP-POINTING TRIANGLE - 0xA1B7: 0x25CE, //BULLSEYE - 0xA1B8: 0x2606, //WHITE STAR - 0xA1B9: 0x2605, //BLACK STAR - 0xA1BA: 0x25C7, //WHITE DIAMOND - 0xA1BB: 0x25C6, //BLACK DIAMOND - 0xA1BC: 0x25A1, //WHITE SQUARE - 0xA1BD: 0x25A0, //BLACK SQUARE - 0xA1BE: 0x25BD, //WHITE DOWN-POINTING TRIANGLE - 0xA1BF: 0x25BC, //BLACK DOWN-POINTING TRIANGLE - 0xA1C0: 0x32A3, //CIRCLED IDEOGRAPH CORRECT - 0xA1C1: 0x2105, //CARE OF - 0xA1C2: 0x00AF, //MACRON - 0xA1C3: 0xFFE3, //FULLWIDTH MACRON - 0xA1C4: 0xFF3F, //FULLWIDTH LOW LINE - 0xA1C5: 0x02CD, //MODIFIER LETTER LOW MACRON - 0xA1C6: 0xFE49, //DASHED OVERLINE - 0xA1C7: 0xFE4A, //CENTRELINE OVERLINE - 0xA1C8: 0xFE4D, //DASHED LOW LINE - 0xA1C9: 0xFE4E, //CENTRELINE LOW LINE - 0xA1CA: 0xFE4B, //WAVY OVERLINE - 0xA1CB: 0xFE4C, //DOUBLE WAVY OVERLINE - 0xA1CC: 0xFE5F, //SMALL NUMBER SIGN - 0xA1CD: 0xFE60, //SMALL AMPERSAND - 0xA1CE: 0xFE61, //SMALL ASTERISK - 0xA1CF: 0xFF0B, //FULLWIDTH PLUS SIGN - 0xA1D0: 0xFF0D, //FULLWIDTH HYPHEN-MINUS - 0xA1D1: 0x00D7, //MULTIPLICATION SIGN - 0xA1D2: 0x00F7, //DIVISION SIGN - 0xA1D3: 0x00B1, //PLUS-MINUS SIGN - 0xA1D4: 0x221A, //SQUARE ROOT - 0xA1D5: 0xFF1C, //FULLWIDTH LESS-THAN SIGN - 0xA1D6: 0xFF1E, //FULLWIDTH GREATER-THAN SIGN - 0xA1D7: 0xFF1D, //FULLWIDTH EQUALS SIGN - 0xA1D8: 0x2266, //LESS-THAN OVER EQUAL TO - 0xA1D9: 0x2267, //GREATER-THAN OVER EQUAL TO - 0xA1DA: 0x2260, //NOT EQUAL TO - 0xA1DB: 0x221E, //INFINITY - 0xA1DC: 0x2252, //APPROXIMATELY EQUAL TO OR THE IMAGE OF - 0xA1DD: 0x2261, //IDENTICAL TO - 0xA1DE: 0xFE62, //SMALL PLUS SIGN - 0xA1DF: 0xFE63, //SMALL HYPHEN-MINUS - 0xA1E0: 0xFE64, //SMALL LESS-THAN SIGN - 0xA1E1: 0xFE65, //SMALL GREATER-THAN SIGN - 0xA1E2: 0xFE66, //SMALL EQUALS SIGN - 0xA1E3: 0xFF5E, //FULLWIDTH TILDE - 0xA1E4: 0x2229, //INTERSECTION - 0xA1E5: 0x222A, //UNION - 0xA1E6: 0x22A5, //UP TACK - 0xA1E7: 0x2220, //ANGLE - 0xA1E8: 0x221F, //RIGHT ANGLE - 0xA1E9: 0x22BF, //RIGHT TRIANGLE - 0xA1EA: 0x33D2, //SQUARE LOG - 0xA1EB: 0x33D1, //SQUARE LN - 0xA1EC: 0x222B, //INTEGRAL - 0xA1ED: 0x222E, //CONTOUR INTEGRAL - 0xA1EE: 0x2235, //BECAUSE - 0xA1EF: 0x2234, //THEREFORE - 0xA1F0: 0x2640, //FEMALE SIGN - 0xA1F1: 0x2642, //MALE SIGN - 0xA1F2: 0x2295, //CIRCLED PLUS - 0xA1F3: 0x2299, //CIRCLED DOT OPERATOR - 0xA1F4: 0x2191, //UPWARDS ARROW - 0xA1F5: 0x2193, //DOWNWARDS ARROW - 0xA1F6: 0x2190, //LEFTWARDS ARROW - 0xA1F7: 0x2192, //RIGHTWARDS ARROW - 0xA1F8: 0x2196, //NORTH WEST ARROW - 0xA1F9: 0x2197, //NORTH EAST ARROW - 0xA1FA: 0x2199, //SOUTH WEST ARROW - 0xA1FB: 0x2198, //SOUTH EAST ARROW - 0xA1FC: 0x2225, //PARALLEL TO - 0xA1FD: 0x2223, //DIVIDES - 0xA1FE: 0xFF0F, //FULLWIDTH SOLIDUS - 0xA240: 0xFF3C, //FULLWIDTH REVERSE SOLIDUS - 0xA241: 0x2215, //DIVISION SLASH - 0xA242: 0xFE68, //SMALL REVERSE SOLIDUS - 0xA243: 0xFF04, //FULLWIDTH DOLLAR SIGN - 0xA244: 0xFFE5, //FULLWIDTH YEN SIGN - 0xA245: 0x3012, //POSTAL MARK - 0xA246: 0xFFE0, //FULLWIDTH CENT SIGN - 0xA247: 0xFFE1, //FULLWIDTH POUND SIGN - 0xA248: 0xFF05, //FULLWIDTH PERCENT SIGN - 0xA249: 0xFF20, //FULLWIDTH COMMERCIAL AT - 0xA24A: 0x2103, //DEGREE CELSIUS - 0xA24B: 0x2109, //DEGREE FAHRENHEIT - 0xA24C: 0xFE69, //SMALL DOLLAR SIGN - 0xA24D: 0xFE6A, //SMALL PERCENT SIGN - 0xA24E: 0xFE6B, //SMALL COMMERCIAL AT - 0xA24F: 0x33D5, //SQUARE MIL - 0xA250: 0x339C, //SQUARE MM - 0xA251: 0x339D, //SQUARE CM - 0xA252: 0x339E, //SQUARE KM - 0xA253: 0x33CE, //SQUARE KM CAPITAL - 0xA254: 0x33A1, //SQUARE M SQUARED - 0xA255: 0x338E, //SQUARE MG - 0xA256: 0x338F, //SQUARE KG - 0xA257: 0x33C4, //SQUARE CC - 0xA258: 0x00B0, //DEGREE SIGN - 0xA259: 0x5159, //CJK UNIFIED IDEOGRAPH - 0xA25A: 0x515B, //CJK UNIFIED IDEOGRAPH - 0xA25B: 0x515E, //CJK UNIFIED IDEOGRAPH - 0xA25C: 0x515D, //CJK UNIFIED IDEOGRAPH - 0xA25D: 0x5161, //CJK UNIFIED IDEOGRAPH - 0xA25E: 0x5163, //CJK UNIFIED IDEOGRAPH - 0xA25F: 0x55E7, //CJK UNIFIED IDEOGRAPH - 0xA260: 0x74E9, //CJK UNIFIED IDEOGRAPH - 0xA261: 0x7CCE, //CJK UNIFIED IDEOGRAPH - 0xA262: 0x2581, //LOWER ONE EIGHTH BLOCK - 0xA263: 0x2582, //LOWER ONE QUARTER BLOCK - 0xA264: 0x2583, //LOWER THREE EIGHTHS BLOCK - 0xA265: 0x2584, //LOWER HALF BLOCK - 0xA266: 0x2585, //LOWER FIVE EIGHTHS BLOCK - 0xA267: 0x2586, //LOWER THREE QUARTERS BLOCK - 0xA268: 0x2587, //LOWER SEVEN EIGHTHS BLOCK - 0xA269: 0x2588, //FULL BLOCK - 0xA26A: 0x258F, //LEFT ONE EIGHTH BLOCK - 0xA26B: 0x258E, //LEFT ONE QUARTER BLOCK - 0xA26C: 0x258D, //LEFT THREE EIGHTHS BLOCK - 0xA26D: 0x258C, //LEFT HALF BLOCK - 0xA26E: 0x258B, //LEFT FIVE EIGHTHS BLOCK - 0xA26F: 0x258A, //LEFT THREE QUARTERS BLOCK - 0xA270: 0x2589, //LEFT SEVEN EIGHTHS BLOCK - 0xA271: 0x253C, //BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - 0xA272: 0x2534, //BOX DRAWINGS LIGHT UP AND HORIZONTAL - 0xA273: 0x252C, //BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - 0xA274: 0x2524, //BOX DRAWINGS LIGHT VERTICAL AND LEFT - 0xA275: 0x251C, //BOX DRAWINGS LIGHT VERTICAL AND RIGHT - 0xA276: 0x2594, //UPPER ONE EIGHTH BLOCK - 0xA277: 0x2500, //BOX DRAWINGS LIGHT HORIZONTAL - 0xA278: 0x2502, //BOX DRAWINGS LIGHT VERTICAL - 0xA279: 0x2595, //RIGHT ONE EIGHTH BLOCK - 0xA27A: 0x250C, //BOX DRAWINGS LIGHT DOWN AND RIGHT - 0xA27B: 0x2510, //BOX DRAWINGS LIGHT DOWN AND LEFT - 0xA27C: 0x2514, //BOX DRAWINGS LIGHT UP AND RIGHT - 0xA27D: 0x2518, //BOX DRAWINGS LIGHT UP AND LEFT - 0xA27E: 0x256D, //BOX DRAWINGS LIGHT ARC DOWN AND RIGHT - 0xA2A1: 0x256E, //BOX DRAWINGS LIGHT ARC DOWN AND LEFT - 0xA2A2: 0x2570, //BOX DRAWINGS LIGHT ARC UP AND RIGHT - 0xA2A3: 0x256F, //BOX DRAWINGS LIGHT ARC UP AND LEFT - 0xA2A4: 0x2550, //BOX DRAWINGS DOUBLE HORIZONTAL - 0xA2A5: 0x255E, //BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0xA2A6: 0x256A, //BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0xA2A7: 0x2561, //BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0xA2A8: 0x25E2, //BLACK LOWER RIGHT TRIANGLE - 0xA2A9: 0x25E3, //BLACK LOWER LEFT TRIANGLE - 0xA2AA: 0x25E5, //BLACK UPPER RIGHT TRIANGLE - 0xA2AB: 0x25E4, //BLACK UPPER LEFT TRIANGLE - 0xA2AC: 0x2571, //BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT - 0xA2AD: 0x2572, //BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT - 0xA2AE: 0x2573, //BOX DRAWINGS LIGHT DIAGONAL CROSS - 0xA2AF: 0xFF10, //FULLWIDTH DIGIT ZERO - 0xA2B0: 0xFF11, //FULLWIDTH DIGIT ONE - 0xA2B1: 0xFF12, //FULLWIDTH DIGIT TWO - 0xA2B2: 0xFF13, //FULLWIDTH DIGIT THREE - 0xA2B3: 0xFF14, //FULLWIDTH DIGIT FOUR - 0xA2B4: 0xFF15, //FULLWIDTH DIGIT FIVE - 0xA2B5: 0xFF16, //FULLWIDTH DIGIT SIX - 0xA2B6: 0xFF17, //FULLWIDTH DIGIT SEVEN - 0xA2B7: 0xFF18, //FULLWIDTH DIGIT EIGHT - 0xA2B8: 0xFF19, //FULLWIDTH DIGIT NINE - 0xA2B9: 0x2160, //ROMAN NUMERAL ONE - 0xA2BA: 0x2161, //ROMAN NUMERAL TWO - 0xA2BB: 0x2162, //ROMAN NUMERAL THREE - 0xA2BC: 0x2163, //ROMAN NUMERAL FOUR - 0xA2BD: 0x2164, //ROMAN NUMERAL FIVE - 0xA2BE: 0x2165, //ROMAN NUMERAL SIX - 0xA2BF: 0x2166, //ROMAN NUMERAL SEVEN - 0xA2C0: 0x2167, //ROMAN NUMERAL EIGHT - 0xA2C1: 0x2168, //ROMAN NUMERAL NINE - 0xA2C2: 0x2169, //ROMAN NUMERAL TEN - 0xA2C3: 0x3021, //HANGZHOU NUMERAL ONE - 0xA2C4: 0x3022, //HANGZHOU NUMERAL TWO - 0xA2C5: 0x3023, //HANGZHOU NUMERAL THREE - 0xA2C6: 0x3024, //HANGZHOU NUMERAL FOUR - 0xA2C7: 0x3025, //HANGZHOU NUMERAL FIVE - 0xA2C8: 0x3026, //HANGZHOU NUMERAL SIX - 0xA2C9: 0x3027, //HANGZHOU NUMERAL SEVEN - 0xA2CA: 0x3028, //HANGZHOU NUMERAL EIGHT - 0xA2CB: 0x3029, //HANGZHOU NUMERAL NINE - 0xA2CC: 0x5341, //CJK UNIFIED IDEOGRAPH - 0xA2CD: 0x5344, //CJK UNIFIED IDEOGRAPH - 0xA2CE: 0x5345, //CJK UNIFIED IDEOGRAPH - 0xA2CF: 0xFF21, //FULLWIDTH LATIN CAPITAL LETTER A - 0xA2D0: 0xFF22, //FULLWIDTH LATIN CAPITAL LETTER B - 0xA2D1: 0xFF23, //FULLWIDTH LATIN CAPITAL LETTER C - 0xA2D2: 0xFF24, //FULLWIDTH LATIN CAPITAL LETTER D - 0xA2D3: 0xFF25, //FULLWIDTH LATIN CAPITAL LETTER E - 0xA2D4: 0xFF26, //FULLWIDTH LATIN CAPITAL LETTER F - 0xA2D5: 0xFF27, //FULLWIDTH LATIN CAPITAL LETTER G - 0xA2D6: 0xFF28, //FULLWIDTH LATIN CAPITAL LETTER H - 0xA2D7: 0xFF29, //FULLWIDTH LATIN CAPITAL LETTER I - 0xA2D8: 0xFF2A, //FULLWIDTH LATIN CAPITAL LETTER J - 0xA2D9: 0xFF2B, //FULLWIDTH LATIN CAPITAL LETTER K - 0xA2DA: 0xFF2C, //FULLWIDTH LATIN CAPITAL LETTER L - 0xA2DB: 0xFF2D, //FULLWIDTH LATIN CAPITAL LETTER M - 0xA2DC: 0xFF2E, //FULLWIDTH LATIN CAPITAL LETTER N - 0xA2DD: 0xFF2F, //FULLWIDTH LATIN CAPITAL LETTER O - 0xA2DE: 0xFF30, //FULLWIDTH LATIN CAPITAL LETTER P - 0xA2DF: 0xFF31, //FULLWIDTH LATIN CAPITAL LETTER Q - 0xA2E0: 0xFF32, //FULLWIDTH LATIN CAPITAL LETTER R - 0xA2E1: 0xFF33, //FULLWIDTH LATIN CAPITAL LETTER S - 0xA2E2: 0xFF34, //FULLWIDTH LATIN CAPITAL LETTER T - 0xA2E3: 0xFF35, //FULLWIDTH LATIN CAPITAL LETTER U - 0xA2E4: 0xFF36, //FULLWIDTH LATIN CAPITAL LETTER V - 0xA2E5: 0xFF37, //FULLWIDTH LATIN CAPITAL LETTER W - 0xA2E6: 0xFF38, //FULLWIDTH LATIN CAPITAL LETTER X - 0xA2E7: 0xFF39, //FULLWIDTH LATIN CAPITAL LETTER Y - 0xA2E8: 0xFF3A, //FULLWIDTH LATIN CAPITAL LETTER Z - 0xA2E9: 0xFF41, //FULLWIDTH LATIN SMALL LETTER A - 0xA2EA: 0xFF42, //FULLWIDTH LATIN SMALL LETTER B - 0xA2EB: 0xFF43, //FULLWIDTH LATIN SMALL LETTER C - 0xA2EC: 0xFF44, //FULLWIDTH LATIN SMALL LETTER D - 0xA2ED: 0xFF45, //FULLWIDTH LATIN SMALL LETTER E - 0xA2EE: 0xFF46, //FULLWIDTH LATIN SMALL LETTER F - 0xA2EF: 0xFF47, //FULLWIDTH LATIN SMALL LETTER G - 0xA2F0: 0xFF48, //FULLWIDTH LATIN SMALL LETTER H - 0xA2F1: 0xFF49, //FULLWIDTH LATIN SMALL LETTER I - 0xA2F2: 0xFF4A, //FULLWIDTH LATIN SMALL LETTER J - 0xA2F3: 0xFF4B, //FULLWIDTH LATIN SMALL LETTER K - 0xA2F4: 0xFF4C, //FULLWIDTH LATIN SMALL LETTER L - 0xA2F5: 0xFF4D, //FULLWIDTH LATIN SMALL LETTER M - 0xA2F6: 0xFF4E, //FULLWIDTH LATIN SMALL LETTER N - 0xA2F7: 0xFF4F, //FULLWIDTH LATIN SMALL LETTER O - 0xA2F8: 0xFF50, //FULLWIDTH LATIN SMALL LETTER P - 0xA2F9: 0xFF51, //FULLWIDTH LATIN SMALL LETTER Q - 0xA2FA: 0xFF52, //FULLWIDTH LATIN SMALL LETTER R - 0xA2FB: 0xFF53, //FULLWIDTH LATIN SMALL LETTER S - 0xA2FC: 0xFF54, //FULLWIDTH LATIN SMALL LETTER T - 0xA2FD: 0xFF55, //FULLWIDTH LATIN SMALL LETTER U - 0xA2FE: 0xFF56, //FULLWIDTH LATIN SMALL LETTER V - 0xA340: 0xFF57, //FULLWIDTH LATIN SMALL LETTER W - 0xA341: 0xFF58, //FULLWIDTH LATIN SMALL LETTER X - 0xA342: 0xFF59, //FULLWIDTH LATIN SMALL LETTER Y - 0xA343: 0xFF5A, //FULLWIDTH LATIN SMALL LETTER Z - 0xA344: 0x0391, //GREEK CAPITAL LETTER ALPHA - 0xA345: 0x0392, //GREEK CAPITAL LETTER BETA - 0xA346: 0x0393, //GREEK CAPITAL LETTER GAMMA - 0xA347: 0x0394, //GREEK CAPITAL LETTER DELTA - 0xA348: 0x0395, //GREEK CAPITAL LETTER EPSILON - 0xA349: 0x0396, //GREEK CAPITAL LETTER ZETA - 0xA34A: 0x0397, //GREEK CAPITAL LETTER ETA - 0xA34B: 0x0398, //GREEK CAPITAL LETTER THETA - 0xA34C: 0x0399, //GREEK CAPITAL LETTER IOTA - 0xA34D: 0x039A, //GREEK CAPITAL LETTER KAPPA - 0xA34E: 0x039B, //GREEK CAPITAL LETTER LAMDA - 0xA34F: 0x039C, //GREEK CAPITAL LETTER MU - 0xA350: 0x039D, //GREEK CAPITAL LETTER NU - 0xA351: 0x039E, //GREEK CAPITAL LETTER XI - 0xA352: 0x039F, //GREEK CAPITAL LETTER OMICRON - 0xA353: 0x03A0, //GREEK CAPITAL LETTER PI - 0xA354: 0x03A1, //GREEK CAPITAL LETTER RHO - 0xA355: 0x03A3, //GREEK CAPITAL LETTER SIGMA - 0xA356: 0x03A4, //GREEK CAPITAL LETTER TAU - 0xA357: 0x03A5, //GREEK CAPITAL LETTER UPSILON - 0xA358: 0x03A6, //GREEK CAPITAL LETTER PHI - 0xA359: 0x03A7, //GREEK CAPITAL LETTER CHI - 0xA35A: 0x03A8, //GREEK CAPITAL LETTER PSI - 0xA35B: 0x03A9, //GREEK CAPITAL LETTER OMEGA - 0xA35C: 0x03B1, //GREEK SMALL LETTER ALPHA - 0xA35D: 0x03B2, //GREEK SMALL LETTER BETA - 0xA35E: 0x03B3, //GREEK SMALL LETTER GAMMA - 0xA35F: 0x03B4, //GREEK SMALL LETTER DELTA - 0xA360: 0x03B5, //GREEK SMALL LETTER EPSILON - 0xA361: 0x03B6, //GREEK SMALL LETTER ZETA - 0xA362: 0x03B7, //GREEK SMALL LETTER ETA - 0xA363: 0x03B8, //GREEK SMALL LETTER THETA - 0xA364: 0x03B9, //GREEK SMALL LETTER IOTA - 0xA365: 0x03BA, //GREEK SMALL LETTER KAPPA - 0xA366: 0x03BB, //GREEK SMALL LETTER LAMDA - 0xA367: 0x03BC, //GREEK SMALL LETTER MU - 0xA368: 0x03BD, //GREEK SMALL LETTER NU - 0xA369: 0x03BE, //GREEK SMALL LETTER XI - 0xA36A: 0x03BF, //GREEK SMALL LETTER OMICRON - 0xA36B: 0x03C0, //GREEK SMALL LETTER PI - 0xA36C: 0x03C1, //GREEK SMALL LETTER RHO - 0xA36D: 0x03C3, //GREEK SMALL LETTER SIGMA - 0xA36E: 0x03C4, //GREEK SMALL LETTER TAU - 0xA36F: 0x03C5, //GREEK SMALL LETTER UPSILON - 0xA370: 0x03C6, //GREEK SMALL LETTER PHI - 0xA371: 0x03C7, //GREEK SMALL LETTER CHI - 0xA372: 0x03C8, //GREEK SMALL LETTER PSI - 0xA373: 0x03C9, //GREEK SMALL LETTER OMEGA - 0xA374: 0x3105, //BOPOMOFO LETTER B - 0xA375: 0x3106, //BOPOMOFO LETTER P - 0xA376: 0x3107, //BOPOMOFO LETTER M - 0xA377: 0x3108, //BOPOMOFO LETTER F - 0xA378: 0x3109, //BOPOMOFO LETTER D - 0xA379: 0x310A, //BOPOMOFO LETTER T - 0xA37A: 0x310B, //BOPOMOFO LETTER N - 0xA37B: 0x310C, //BOPOMOFO LETTER L - 0xA37C: 0x310D, //BOPOMOFO LETTER G - 0xA37D: 0x310E, //BOPOMOFO LETTER K - 0xA37E: 0x310F, //BOPOMOFO LETTER H - 0xA3A1: 0x3110, //BOPOMOFO LETTER J - 0xA3A2: 0x3111, //BOPOMOFO LETTER Q - 0xA3A3: 0x3112, //BOPOMOFO LETTER X - 0xA3A4: 0x3113, //BOPOMOFO LETTER ZH - 0xA3A5: 0x3114, //BOPOMOFO LETTER CH - 0xA3A6: 0x3115, //BOPOMOFO LETTER SH - 0xA3A7: 0x3116, //BOPOMOFO LETTER R - 0xA3A8: 0x3117, //BOPOMOFO LETTER Z - 0xA3A9: 0x3118, //BOPOMOFO LETTER C - 0xA3AA: 0x3119, //BOPOMOFO LETTER S - 0xA3AB: 0x311A, //BOPOMOFO LETTER A - 0xA3AC: 0x311B, //BOPOMOFO LETTER O - 0xA3AD: 0x311C, //BOPOMOFO LETTER E - 0xA3AE: 0x311D, //BOPOMOFO LETTER EH - 0xA3AF: 0x311E, //BOPOMOFO LETTER AI - 0xA3B0: 0x311F, //BOPOMOFO LETTER EI - 0xA3B1: 0x3120, //BOPOMOFO LETTER AU - 0xA3B2: 0x3121, //BOPOMOFO LETTER OU - 0xA3B3: 0x3122, //BOPOMOFO LETTER AN - 0xA3B4: 0x3123, //BOPOMOFO LETTER EN - 0xA3B5: 0x3124, //BOPOMOFO LETTER ANG - 0xA3B6: 0x3125, //BOPOMOFO LETTER ENG - 0xA3B7: 0x3126, //BOPOMOFO LETTER ER - 0xA3B8: 0x3127, //BOPOMOFO LETTER I - 0xA3B9: 0x3128, //BOPOMOFO LETTER U - 0xA3BA: 0x3129, //BOPOMOFO LETTER IU - 0xA3BB: 0x02D9, //DOT ABOVE - 0xA3BC: 0x02C9, //MODIFIER LETTER MACRON - 0xA3BD: 0x02CA, //MODIFIER LETTER ACUTE ACCENT - 0xA3BE: 0x02C7, //CARON - 0xA3BF: 0x02CB, //MODIFIER LETTER GRAVE ACCENT - 0xA3E1: 0x20AC, //EURO SIGN - 0xA440: 0x4E00, //CJK UNIFIED IDEOGRAPH - 0xA441: 0x4E59, //CJK UNIFIED IDEOGRAPH - 0xA442: 0x4E01, //CJK UNIFIED IDEOGRAPH - 0xA443: 0x4E03, //CJK UNIFIED IDEOGRAPH - 0xA444: 0x4E43, //CJK UNIFIED IDEOGRAPH - 0xA445: 0x4E5D, //CJK UNIFIED IDEOGRAPH - 0xA446: 0x4E86, //CJK UNIFIED IDEOGRAPH - 0xA447: 0x4E8C, //CJK UNIFIED IDEOGRAPH - 0xA448: 0x4EBA, //CJK UNIFIED IDEOGRAPH - 0xA449: 0x513F, //CJK UNIFIED IDEOGRAPH - 0xA44A: 0x5165, //CJK UNIFIED IDEOGRAPH - 0xA44B: 0x516B, //CJK UNIFIED IDEOGRAPH - 0xA44C: 0x51E0, //CJK UNIFIED IDEOGRAPH - 0xA44D: 0x5200, //CJK UNIFIED IDEOGRAPH - 0xA44E: 0x5201, //CJK UNIFIED IDEOGRAPH - 0xA44F: 0x529B, //CJK UNIFIED IDEOGRAPH - 0xA450: 0x5315, //CJK UNIFIED IDEOGRAPH - 0xA451: 0x5341, //CJK UNIFIED IDEOGRAPH - 0xA452: 0x535C, //CJK UNIFIED IDEOGRAPH - 0xA453: 0x53C8, //CJK UNIFIED IDEOGRAPH - 0xA454: 0x4E09, //CJK UNIFIED IDEOGRAPH - 0xA455: 0x4E0B, //CJK UNIFIED IDEOGRAPH - 0xA456: 0x4E08, //CJK UNIFIED IDEOGRAPH - 0xA457: 0x4E0A, //CJK UNIFIED IDEOGRAPH - 0xA458: 0x4E2B, //CJK UNIFIED IDEOGRAPH - 0xA459: 0x4E38, //CJK UNIFIED IDEOGRAPH - 0xA45A: 0x51E1, //CJK UNIFIED IDEOGRAPH - 0xA45B: 0x4E45, //CJK UNIFIED IDEOGRAPH - 0xA45C: 0x4E48, //CJK UNIFIED IDEOGRAPH - 0xA45D: 0x4E5F, //CJK UNIFIED IDEOGRAPH - 0xA45E: 0x4E5E, //CJK UNIFIED IDEOGRAPH - 0xA45F: 0x4E8E, //CJK UNIFIED IDEOGRAPH - 0xA460: 0x4EA1, //CJK UNIFIED IDEOGRAPH - 0xA461: 0x5140, //CJK UNIFIED IDEOGRAPH - 0xA462: 0x5203, //CJK UNIFIED IDEOGRAPH - 0xA463: 0x52FA, //CJK UNIFIED IDEOGRAPH - 0xA464: 0x5343, //CJK UNIFIED IDEOGRAPH - 0xA465: 0x53C9, //CJK UNIFIED IDEOGRAPH - 0xA466: 0x53E3, //CJK UNIFIED IDEOGRAPH - 0xA467: 0x571F, //CJK UNIFIED IDEOGRAPH - 0xA468: 0x58EB, //CJK UNIFIED IDEOGRAPH - 0xA469: 0x5915, //CJK UNIFIED IDEOGRAPH - 0xA46A: 0x5927, //CJK UNIFIED IDEOGRAPH - 0xA46B: 0x5973, //CJK UNIFIED IDEOGRAPH - 0xA46C: 0x5B50, //CJK UNIFIED IDEOGRAPH - 0xA46D: 0x5B51, //CJK UNIFIED IDEOGRAPH - 0xA46E: 0x5B53, //CJK UNIFIED IDEOGRAPH - 0xA46F: 0x5BF8, //CJK UNIFIED IDEOGRAPH - 0xA470: 0x5C0F, //CJK UNIFIED IDEOGRAPH - 0xA471: 0x5C22, //CJK UNIFIED IDEOGRAPH - 0xA472: 0x5C38, //CJK UNIFIED IDEOGRAPH - 0xA473: 0x5C71, //CJK UNIFIED IDEOGRAPH - 0xA474: 0x5DDD, //CJK UNIFIED IDEOGRAPH - 0xA475: 0x5DE5, //CJK UNIFIED IDEOGRAPH - 0xA476: 0x5DF1, //CJK UNIFIED IDEOGRAPH - 0xA477: 0x5DF2, //CJK UNIFIED IDEOGRAPH - 0xA478: 0x5DF3, //CJK UNIFIED IDEOGRAPH - 0xA479: 0x5DFE, //CJK UNIFIED IDEOGRAPH - 0xA47A: 0x5E72, //CJK UNIFIED IDEOGRAPH - 0xA47B: 0x5EFE, //CJK UNIFIED IDEOGRAPH - 0xA47C: 0x5F0B, //CJK UNIFIED IDEOGRAPH - 0xA47D: 0x5F13, //CJK UNIFIED IDEOGRAPH - 0xA47E: 0x624D, //CJK UNIFIED IDEOGRAPH - 0xA4A1: 0x4E11, //CJK UNIFIED IDEOGRAPH - 0xA4A2: 0x4E10, //CJK UNIFIED IDEOGRAPH - 0xA4A3: 0x4E0D, //CJK UNIFIED IDEOGRAPH - 0xA4A4: 0x4E2D, //CJK UNIFIED IDEOGRAPH - 0xA4A5: 0x4E30, //CJK UNIFIED IDEOGRAPH - 0xA4A6: 0x4E39, //CJK UNIFIED IDEOGRAPH - 0xA4A7: 0x4E4B, //CJK UNIFIED IDEOGRAPH - 0xA4A8: 0x5C39, //CJK UNIFIED IDEOGRAPH - 0xA4A9: 0x4E88, //CJK UNIFIED IDEOGRAPH - 0xA4AA: 0x4E91, //CJK UNIFIED IDEOGRAPH - 0xA4AB: 0x4E95, //CJK UNIFIED IDEOGRAPH - 0xA4AC: 0x4E92, //CJK UNIFIED IDEOGRAPH - 0xA4AD: 0x4E94, //CJK UNIFIED IDEOGRAPH - 0xA4AE: 0x4EA2, //CJK UNIFIED IDEOGRAPH - 0xA4AF: 0x4EC1, //CJK UNIFIED IDEOGRAPH - 0xA4B0: 0x4EC0, //CJK UNIFIED IDEOGRAPH - 0xA4B1: 0x4EC3, //CJK UNIFIED IDEOGRAPH - 0xA4B2: 0x4EC6, //CJK UNIFIED IDEOGRAPH - 0xA4B3: 0x4EC7, //CJK UNIFIED IDEOGRAPH - 0xA4B4: 0x4ECD, //CJK UNIFIED IDEOGRAPH - 0xA4B5: 0x4ECA, //CJK UNIFIED IDEOGRAPH - 0xA4B6: 0x4ECB, //CJK UNIFIED IDEOGRAPH - 0xA4B7: 0x4EC4, //CJK UNIFIED IDEOGRAPH - 0xA4B8: 0x5143, //CJK UNIFIED IDEOGRAPH - 0xA4B9: 0x5141, //CJK UNIFIED IDEOGRAPH - 0xA4BA: 0x5167, //CJK UNIFIED IDEOGRAPH - 0xA4BB: 0x516D, //CJK UNIFIED IDEOGRAPH - 0xA4BC: 0x516E, //CJK UNIFIED IDEOGRAPH - 0xA4BD: 0x516C, //CJK UNIFIED IDEOGRAPH - 0xA4BE: 0x5197, //CJK UNIFIED IDEOGRAPH - 0xA4BF: 0x51F6, //CJK UNIFIED IDEOGRAPH - 0xA4C0: 0x5206, //CJK UNIFIED IDEOGRAPH - 0xA4C1: 0x5207, //CJK UNIFIED IDEOGRAPH - 0xA4C2: 0x5208, //CJK UNIFIED IDEOGRAPH - 0xA4C3: 0x52FB, //CJK UNIFIED IDEOGRAPH - 0xA4C4: 0x52FE, //CJK UNIFIED IDEOGRAPH - 0xA4C5: 0x52FF, //CJK UNIFIED IDEOGRAPH - 0xA4C6: 0x5316, //CJK UNIFIED IDEOGRAPH - 0xA4C7: 0x5339, //CJK UNIFIED IDEOGRAPH - 0xA4C8: 0x5348, //CJK UNIFIED IDEOGRAPH - 0xA4C9: 0x5347, //CJK UNIFIED IDEOGRAPH - 0xA4CA: 0x5345, //CJK UNIFIED IDEOGRAPH - 0xA4CB: 0x535E, //CJK UNIFIED IDEOGRAPH - 0xA4CC: 0x5384, //CJK UNIFIED IDEOGRAPH - 0xA4CD: 0x53CB, //CJK UNIFIED IDEOGRAPH - 0xA4CE: 0x53CA, //CJK UNIFIED IDEOGRAPH - 0xA4CF: 0x53CD, //CJK UNIFIED IDEOGRAPH - 0xA4D0: 0x58EC, //CJK UNIFIED IDEOGRAPH - 0xA4D1: 0x5929, //CJK UNIFIED IDEOGRAPH - 0xA4D2: 0x592B, //CJK UNIFIED IDEOGRAPH - 0xA4D3: 0x592A, //CJK UNIFIED IDEOGRAPH - 0xA4D4: 0x592D, //CJK UNIFIED IDEOGRAPH - 0xA4D5: 0x5B54, //CJK UNIFIED IDEOGRAPH - 0xA4D6: 0x5C11, //CJK UNIFIED IDEOGRAPH - 0xA4D7: 0x5C24, //CJK UNIFIED IDEOGRAPH - 0xA4D8: 0x5C3A, //CJK UNIFIED IDEOGRAPH - 0xA4D9: 0x5C6F, //CJK UNIFIED IDEOGRAPH - 0xA4DA: 0x5DF4, //CJK UNIFIED IDEOGRAPH - 0xA4DB: 0x5E7B, //CJK UNIFIED IDEOGRAPH - 0xA4DC: 0x5EFF, //CJK UNIFIED IDEOGRAPH - 0xA4DD: 0x5F14, //CJK UNIFIED IDEOGRAPH - 0xA4DE: 0x5F15, //CJK UNIFIED IDEOGRAPH - 0xA4DF: 0x5FC3, //CJK UNIFIED IDEOGRAPH - 0xA4E0: 0x6208, //CJK UNIFIED IDEOGRAPH - 0xA4E1: 0x6236, //CJK UNIFIED IDEOGRAPH - 0xA4E2: 0x624B, //CJK UNIFIED IDEOGRAPH - 0xA4E3: 0x624E, //CJK UNIFIED IDEOGRAPH - 0xA4E4: 0x652F, //CJK UNIFIED IDEOGRAPH - 0xA4E5: 0x6587, //CJK UNIFIED IDEOGRAPH - 0xA4E6: 0x6597, //CJK UNIFIED IDEOGRAPH - 0xA4E7: 0x65A4, //CJK UNIFIED IDEOGRAPH - 0xA4E8: 0x65B9, //CJK UNIFIED IDEOGRAPH - 0xA4E9: 0x65E5, //CJK UNIFIED IDEOGRAPH - 0xA4EA: 0x66F0, //CJK UNIFIED IDEOGRAPH - 0xA4EB: 0x6708, //CJK UNIFIED IDEOGRAPH - 0xA4EC: 0x6728, //CJK UNIFIED IDEOGRAPH - 0xA4ED: 0x6B20, //CJK UNIFIED IDEOGRAPH - 0xA4EE: 0x6B62, //CJK UNIFIED IDEOGRAPH - 0xA4EF: 0x6B79, //CJK UNIFIED IDEOGRAPH - 0xA4F0: 0x6BCB, //CJK UNIFIED IDEOGRAPH - 0xA4F1: 0x6BD4, //CJK UNIFIED IDEOGRAPH - 0xA4F2: 0x6BDB, //CJK UNIFIED IDEOGRAPH - 0xA4F3: 0x6C0F, //CJK UNIFIED IDEOGRAPH - 0xA4F4: 0x6C34, //CJK UNIFIED IDEOGRAPH - 0xA4F5: 0x706B, //CJK UNIFIED IDEOGRAPH - 0xA4F6: 0x722A, //CJK UNIFIED IDEOGRAPH - 0xA4F7: 0x7236, //CJK UNIFIED IDEOGRAPH - 0xA4F8: 0x723B, //CJK UNIFIED IDEOGRAPH - 0xA4F9: 0x7247, //CJK UNIFIED IDEOGRAPH - 0xA4FA: 0x7259, //CJK UNIFIED IDEOGRAPH - 0xA4FB: 0x725B, //CJK UNIFIED IDEOGRAPH - 0xA4FC: 0x72AC, //CJK UNIFIED IDEOGRAPH - 0xA4FD: 0x738B, //CJK UNIFIED IDEOGRAPH - 0xA4FE: 0x4E19, //CJK UNIFIED IDEOGRAPH - 0xA540: 0x4E16, //CJK UNIFIED IDEOGRAPH - 0xA541: 0x4E15, //CJK UNIFIED IDEOGRAPH - 0xA542: 0x4E14, //CJK UNIFIED IDEOGRAPH - 0xA543: 0x4E18, //CJK UNIFIED IDEOGRAPH - 0xA544: 0x4E3B, //CJK UNIFIED IDEOGRAPH - 0xA545: 0x4E4D, //CJK UNIFIED IDEOGRAPH - 0xA546: 0x4E4F, //CJK UNIFIED IDEOGRAPH - 0xA547: 0x4E4E, //CJK UNIFIED IDEOGRAPH - 0xA548: 0x4EE5, //CJK UNIFIED IDEOGRAPH - 0xA549: 0x4ED8, //CJK UNIFIED IDEOGRAPH - 0xA54A: 0x4ED4, //CJK UNIFIED IDEOGRAPH - 0xA54B: 0x4ED5, //CJK UNIFIED IDEOGRAPH - 0xA54C: 0x4ED6, //CJK UNIFIED IDEOGRAPH - 0xA54D: 0x4ED7, //CJK UNIFIED IDEOGRAPH - 0xA54E: 0x4EE3, //CJK UNIFIED IDEOGRAPH - 0xA54F: 0x4EE4, //CJK UNIFIED IDEOGRAPH - 0xA550: 0x4ED9, //CJK UNIFIED IDEOGRAPH - 0xA551: 0x4EDE, //CJK UNIFIED IDEOGRAPH - 0xA552: 0x5145, //CJK UNIFIED IDEOGRAPH - 0xA553: 0x5144, //CJK UNIFIED IDEOGRAPH - 0xA554: 0x5189, //CJK UNIFIED IDEOGRAPH - 0xA555: 0x518A, //CJK UNIFIED IDEOGRAPH - 0xA556: 0x51AC, //CJK UNIFIED IDEOGRAPH - 0xA557: 0x51F9, //CJK UNIFIED IDEOGRAPH - 0xA558: 0x51FA, //CJK UNIFIED IDEOGRAPH - 0xA559: 0x51F8, //CJK UNIFIED IDEOGRAPH - 0xA55A: 0x520A, //CJK UNIFIED IDEOGRAPH - 0xA55B: 0x52A0, //CJK UNIFIED IDEOGRAPH - 0xA55C: 0x529F, //CJK UNIFIED IDEOGRAPH - 0xA55D: 0x5305, //CJK UNIFIED IDEOGRAPH - 0xA55E: 0x5306, //CJK UNIFIED IDEOGRAPH - 0xA55F: 0x5317, //CJK UNIFIED IDEOGRAPH - 0xA560: 0x531D, //CJK UNIFIED IDEOGRAPH - 0xA561: 0x4EDF, //CJK UNIFIED IDEOGRAPH - 0xA562: 0x534A, //CJK UNIFIED IDEOGRAPH - 0xA563: 0x5349, //CJK UNIFIED IDEOGRAPH - 0xA564: 0x5361, //CJK UNIFIED IDEOGRAPH - 0xA565: 0x5360, //CJK UNIFIED IDEOGRAPH - 0xA566: 0x536F, //CJK UNIFIED IDEOGRAPH - 0xA567: 0x536E, //CJK UNIFIED IDEOGRAPH - 0xA568: 0x53BB, //CJK UNIFIED IDEOGRAPH - 0xA569: 0x53EF, //CJK UNIFIED IDEOGRAPH - 0xA56A: 0x53E4, //CJK UNIFIED IDEOGRAPH - 0xA56B: 0x53F3, //CJK UNIFIED IDEOGRAPH - 0xA56C: 0x53EC, //CJK UNIFIED IDEOGRAPH - 0xA56D: 0x53EE, //CJK UNIFIED IDEOGRAPH - 0xA56E: 0x53E9, //CJK UNIFIED IDEOGRAPH - 0xA56F: 0x53E8, //CJK UNIFIED IDEOGRAPH - 0xA570: 0x53FC, //CJK UNIFIED IDEOGRAPH - 0xA571: 0x53F8, //CJK UNIFIED IDEOGRAPH - 0xA572: 0x53F5, //CJK UNIFIED IDEOGRAPH - 0xA573: 0x53EB, //CJK UNIFIED IDEOGRAPH - 0xA574: 0x53E6, //CJK UNIFIED IDEOGRAPH - 0xA575: 0x53EA, //CJK UNIFIED IDEOGRAPH - 0xA576: 0x53F2, //CJK UNIFIED IDEOGRAPH - 0xA577: 0x53F1, //CJK UNIFIED IDEOGRAPH - 0xA578: 0x53F0, //CJK UNIFIED IDEOGRAPH - 0xA579: 0x53E5, //CJK UNIFIED IDEOGRAPH - 0xA57A: 0x53ED, //CJK UNIFIED IDEOGRAPH - 0xA57B: 0x53FB, //CJK UNIFIED IDEOGRAPH - 0xA57C: 0x56DB, //CJK UNIFIED IDEOGRAPH - 0xA57D: 0x56DA, //CJK UNIFIED IDEOGRAPH - 0xA57E: 0x5916, //CJK UNIFIED IDEOGRAPH - 0xA5A1: 0x592E, //CJK UNIFIED IDEOGRAPH - 0xA5A2: 0x5931, //CJK UNIFIED IDEOGRAPH - 0xA5A3: 0x5974, //CJK UNIFIED IDEOGRAPH - 0xA5A4: 0x5976, //CJK UNIFIED IDEOGRAPH - 0xA5A5: 0x5B55, //CJK UNIFIED IDEOGRAPH - 0xA5A6: 0x5B83, //CJK UNIFIED IDEOGRAPH - 0xA5A7: 0x5C3C, //CJK UNIFIED IDEOGRAPH - 0xA5A8: 0x5DE8, //CJK UNIFIED IDEOGRAPH - 0xA5A9: 0x5DE7, //CJK UNIFIED IDEOGRAPH - 0xA5AA: 0x5DE6, //CJK UNIFIED IDEOGRAPH - 0xA5AB: 0x5E02, //CJK UNIFIED IDEOGRAPH - 0xA5AC: 0x5E03, //CJK UNIFIED IDEOGRAPH - 0xA5AD: 0x5E73, //CJK UNIFIED IDEOGRAPH - 0xA5AE: 0x5E7C, //CJK UNIFIED IDEOGRAPH - 0xA5AF: 0x5F01, //CJK UNIFIED IDEOGRAPH - 0xA5B0: 0x5F18, //CJK UNIFIED IDEOGRAPH - 0xA5B1: 0x5F17, //CJK UNIFIED IDEOGRAPH - 0xA5B2: 0x5FC5, //CJK UNIFIED IDEOGRAPH - 0xA5B3: 0x620A, //CJK UNIFIED IDEOGRAPH - 0xA5B4: 0x6253, //CJK UNIFIED IDEOGRAPH - 0xA5B5: 0x6254, //CJK UNIFIED IDEOGRAPH - 0xA5B6: 0x6252, //CJK UNIFIED IDEOGRAPH - 0xA5B7: 0x6251, //CJK UNIFIED IDEOGRAPH - 0xA5B8: 0x65A5, //CJK UNIFIED IDEOGRAPH - 0xA5B9: 0x65E6, //CJK UNIFIED IDEOGRAPH - 0xA5BA: 0x672E, //CJK UNIFIED IDEOGRAPH - 0xA5BB: 0x672C, //CJK UNIFIED IDEOGRAPH - 0xA5BC: 0x672A, //CJK UNIFIED IDEOGRAPH - 0xA5BD: 0x672B, //CJK UNIFIED IDEOGRAPH - 0xA5BE: 0x672D, //CJK UNIFIED IDEOGRAPH - 0xA5BF: 0x6B63, //CJK UNIFIED IDEOGRAPH - 0xA5C0: 0x6BCD, //CJK UNIFIED IDEOGRAPH - 0xA5C1: 0x6C11, //CJK UNIFIED IDEOGRAPH - 0xA5C2: 0x6C10, //CJK UNIFIED IDEOGRAPH - 0xA5C3: 0x6C38, //CJK UNIFIED IDEOGRAPH - 0xA5C4: 0x6C41, //CJK UNIFIED IDEOGRAPH - 0xA5C5: 0x6C40, //CJK UNIFIED IDEOGRAPH - 0xA5C6: 0x6C3E, //CJK UNIFIED IDEOGRAPH - 0xA5C7: 0x72AF, //CJK UNIFIED IDEOGRAPH - 0xA5C8: 0x7384, //CJK UNIFIED IDEOGRAPH - 0xA5C9: 0x7389, //CJK UNIFIED IDEOGRAPH - 0xA5CA: 0x74DC, //CJK UNIFIED IDEOGRAPH - 0xA5CB: 0x74E6, //CJK UNIFIED IDEOGRAPH - 0xA5CC: 0x7518, //CJK UNIFIED IDEOGRAPH - 0xA5CD: 0x751F, //CJK UNIFIED IDEOGRAPH - 0xA5CE: 0x7528, //CJK UNIFIED IDEOGRAPH - 0xA5CF: 0x7529, //CJK UNIFIED IDEOGRAPH - 0xA5D0: 0x7530, //CJK UNIFIED IDEOGRAPH - 0xA5D1: 0x7531, //CJK UNIFIED IDEOGRAPH - 0xA5D2: 0x7532, //CJK UNIFIED IDEOGRAPH - 0xA5D3: 0x7533, //CJK UNIFIED IDEOGRAPH - 0xA5D4: 0x758B, //CJK UNIFIED IDEOGRAPH - 0xA5D5: 0x767D, //CJK UNIFIED IDEOGRAPH - 0xA5D6: 0x76AE, //CJK UNIFIED IDEOGRAPH - 0xA5D7: 0x76BF, //CJK UNIFIED IDEOGRAPH - 0xA5D8: 0x76EE, //CJK UNIFIED IDEOGRAPH - 0xA5D9: 0x77DB, //CJK UNIFIED IDEOGRAPH - 0xA5DA: 0x77E2, //CJK UNIFIED IDEOGRAPH - 0xA5DB: 0x77F3, //CJK UNIFIED IDEOGRAPH - 0xA5DC: 0x793A, //CJK UNIFIED IDEOGRAPH - 0xA5DD: 0x79BE, //CJK UNIFIED IDEOGRAPH - 0xA5DE: 0x7A74, //CJK UNIFIED IDEOGRAPH - 0xA5DF: 0x7ACB, //CJK UNIFIED IDEOGRAPH - 0xA5E0: 0x4E1E, //CJK UNIFIED IDEOGRAPH - 0xA5E1: 0x4E1F, //CJK UNIFIED IDEOGRAPH - 0xA5E2: 0x4E52, //CJK UNIFIED IDEOGRAPH - 0xA5E3: 0x4E53, //CJK UNIFIED IDEOGRAPH - 0xA5E4: 0x4E69, //CJK UNIFIED IDEOGRAPH - 0xA5E5: 0x4E99, //CJK UNIFIED IDEOGRAPH - 0xA5E6: 0x4EA4, //CJK UNIFIED IDEOGRAPH - 0xA5E7: 0x4EA6, //CJK UNIFIED IDEOGRAPH - 0xA5E8: 0x4EA5, //CJK UNIFIED IDEOGRAPH - 0xA5E9: 0x4EFF, //CJK UNIFIED IDEOGRAPH - 0xA5EA: 0x4F09, //CJK UNIFIED IDEOGRAPH - 0xA5EB: 0x4F19, //CJK UNIFIED IDEOGRAPH - 0xA5EC: 0x4F0A, //CJK UNIFIED IDEOGRAPH - 0xA5ED: 0x4F15, //CJK UNIFIED IDEOGRAPH - 0xA5EE: 0x4F0D, //CJK UNIFIED IDEOGRAPH - 0xA5EF: 0x4F10, //CJK UNIFIED IDEOGRAPH - 0xA5F0: 0x4F11, //CJK UNIFIED IDEOGRAPH - 0xA5F1: 0x4F0F, //CJK UNIFIED IDEOGRAPH - 0xA5F2: 0x4EF2, //CJK UNIFIED IDEOGRAPH - 0xA5F3: 0x4EF6, //CJK UNIFIED IDEOGRAPH - 0xA5F4: 0x4EFB, //CJK UNIFIED IDEOGRAPH - 0xA5F5: 0x4EF0, //CJK UNIFIED IDEOGRAPH - 0xA5F6: 0x4EF3, //CJK UNIFIED IDEOGRAPH - 0xA5F7: 0x4EFD, //CJK UNIFIED IDEOGRAPH - 0xA5F8: 0x4F01, //CJK UNIFIED IDEOGRAPH - 0xA5F9: 0x4F0B, //CJK UNIFIED IDEOGRAPH - 0xA5FA: 0x5149, //CJK UNIFIED IDEOGRAPH - 0xA5FB: 0x5147, //CJK UNIFIED IDEOGRAPH - 0xA5FC: 0x5146, //CJK UNIFIED IDEOGRAPH - 0xA5FD: 0x5148, //CJK UNIFIED IDEOGRAPH - 0xA5FE: 0x5168, //CJK UNIFIED IDEOGRAPH - 0xA640: 0x5171, //CJK UNIFIED IDEOGRAPH - 0xA641: 0x518D, //CJK UNIFIED IDEOGRAPH - 0xA642: 0x51B0, //CJK UNIFIED IDEOGRAPH - 0xA643: 0x5217, //CJK UNIFIED IDEOGRAPH - 0xA644: 0x5211, //CJK UNIFIED IDEOGRAPH - 0xA645: 0x5212, //CJK UNIFIED IDEOGRAPH - 0xA646: 0x520E, //CJK UNIFIED IDEOGRAPH - 0xA647: 0x5216, //CJK UNIFIED IDEOGRAPH - 0xA648: 0x52A3, //CJK UNIFIED IDEOGRAPH - 0xA649: 0x5308, //CJK UNIFIED IDEOGRAPH - 0xA64A: 0x5321, //CJK UNIFIED IDEOGRAPH - 0xA64B: 0x5320, //CJK UNIFIED IDEOGRAPH - 0xA64C: 0x5370, //CJK UNIFIED IDEOGRAPH - 0xA64D: 0x5371, //CJK UNIFIED IDEOGRAPH - 0xA64E: 0x5409, //CJK UNIFIED IDEOGRAPH - 0xA64F: 0x540F, //CJK UNIFIED IDEOGRAPH - 0xA650: 0x540C, //CJK UNIFIED IDEOGRAPH - 0xA651: 0x540A, //CJK UNIFIED IDEOGRAPH - 0xA652: 0x5410, //CJK UNIFIED IDEOGRAPH - 0xA653: 0x5401, //CJK UNIFIED IDEOGRAPH - 0xA654: 0x540B, //CJK UNIFIED IDEOGRAPH - 0xA655: 0x5404, //CJK UNIFIED IDEOGRAPH - 0xA656: 0x5411, //CJK UNIFIED IDEOGRAPH - 0xA657: 0x540D, //CJK UNIFIED IDEOGRAPH - 0xA658: 0x5408, //CJK UNIFIED IDEOGRAPH - 0xA659: 0x5403, //CJK UNIFIED IDEOGRAPH - 0xA65A: 0x540E, //CJK UNIFIED IDEOGRAPH - 0xA65B: 0x5406, //CJK UNIFIED IDEOGRAPH - 0xA65C: 0x5412, //CJK UNIFIED IDEOGRAPH - 0xA65D: 0x56E0, //CJK UNIFIED IDEOGRAPH - 0xA65E: 0x56DE, //CJK UNIFIED IDEOGRAPH - 0xA65F: 0x56DD, //CJK UNIFIED IDEOGRAPH - 0xA660: 0x5733, //CJK UNIFIED IDEOGRAPH - 0xA661: 0x5730, //CJK UNIFIED IDEOGRAPH - 0xA662: 0x5728, //CJK UNIFIED IDEOGRAPH - 0xA663: 0x572D, //CJK UNIFIED IDEOGRAPH - 0xA664: 0x572C, //CJK UNIFIED IDEOGRAPH - 0xA665: 0x572F, //CJK UNIFIED IDEOGRAPH - 0xA666: 0x5729, //CJK UNIFIED IDEOGRAPH - 0xA667: 0x5919, //CJK UNIFIED IDEOGRAPH - 0xA668: 0x591A, //CJK UNIFIED IDEOGRAPH - 0xA669: 0x5937, //CJK UNIFIED IDEOGRAPH - 0xA66A: 0x5938, //CJK UNIFIED IDEOGRAPH - 0xA66B: 0x5984, //CJK UNIFIED IDEOGRAPH - 0xA66C: 0x5978, //CJK UNIFIED IDEOGRAPH - 0xA66D: 0x5983, //CJK UNIFIED IDEOGRAPH - 0xA66E: 0x597D, //CJK UNIFIED IDEOGRAPH - 0xA66F: 0x5979, //CJK UNIFIED IDEOGRAPH - 0xA670: 0x5982, //CJK UNIFIED IDEOGRAPH - 0xA671: 0x5981, //CJK UNIFIED IDEOGRAPH - 0xA672: 0x5B57, //CJK UNIFIED IDEOGRAPH - 0xA673: 0x5B58, //CJK UNIFIED IDEOGRAPH - 0xA674: 0x5B87, //CJK UNIFIED IDEOGRAPH - 0xA675: 0x5B88, //CJK UNIFIED IDEOGRAPH - 0xA676: 0x5B85, //CJK UNIFIED IDEOGRAPH - 0xA677: 0x5B89, //CJK UNIFIED IDEOGRAPH - 0xA678: 0x5BFA, //CJK UNIFIED IDEOGRAPH - 0xA679: 0x5C16, //CJK UNIFIED IDEOGRAPH - 0xA67A: 0x5C79, //CJK UNIFIED IDEOGRAPH - 0xA67B: 0x5DDE, //CJK UNIFIED IDEOGRAPH - 0xA67C: 0x5E06, //CJK UNIFIED IDEOGRAPH - 0xA67D: 0x5E76, //CJK UNIFIED IDEOGRAPH - 0xA67E: 0x5E74, //CJK UNIFIED IDEOGRAPH - 0xA6A1: 0x5F0F, //CJK UNIFIED IDEOGRAPH - 0xA6A2: 0x5F1B, //CJK UNIFIED IDEOGRAPH - 0xA6A3: 0x5FD9, //CJK UNIFIED IDEOGRAPH - 0xA6A4: 0x5FD6, //CJK UNIFIED IDEOGRAPH - 0xA6A5: 0x620E, //CJK UNIFIED IDEOGRAPH - 0xA6A6: 0x620C, //CJK UNIFIED IDEOGRAPH - 0xA6A7: 0x620D, //CJK UNIFIED IDEOGRAPH - 0xA6A8: 0x6210, //CJK UNIFIED IDEOGRAPH - 0xA6A9: 0x6263, //CJK UNIFIED IDEOGRAPH - 0xA6AA: 0x625B, //CJK UNIFIED IDEOGRAPH - 0xA6AB: 0x6258, //CJK UNIFIED IDEOGRAPH - 0xA6AC: 0x6536, //CJK UNIFIED IDEOGRAPH - 0xA6AD: 0x65E9, //CJK UNIFIED IDEOGRAPH - 0xA6AE: 0x65E8, //CJK UNIFIED IDEOGRAPH - 0xA6AF: 0x65EC, //CJK UNIFIED IDEOGRAPH - 0xA6B0: 0x65ED, //CJK UNIFIED IDEOGRAPH - 0xA6B1: 0x66F2, //CJK UNIFIED IDEOGRAPH - 0xA6B2: 0x66F3, //CJK UNIFIED IDEOGRAPH - 0xA6B3: 0x6709, //CJK UNIFIED IDEOGRAPH - 0xA6B4: 0x673D, //CJK UNIFIED IDEOGRAPH - 0xA6B5: 0x6734, //CJK UNIFIED IDEOGRAPH - 0xA6B6: 0x6731, //CJK UNIFIED IDEOGRAPH - 0xA6B7: 0x6735, //CJK UNIFIED IDEOGRAPH - 0xA6B8: 0x6B21, //CJK UNIFIED IDEOGRAPH - 0xA6B9: 0x6B64, //CJK UNIFIED IDEOGRAPH - 0xA6BA: 0x6B7B, //CJK UNIFIED IDEOGRAPH - 0xA6BB: 0x6C16, //CJK UNIFIED IDEOGRAPH - 0xA6BC: 0x6C5D, //CJK UNIFIED IDEOGRAPH - 0xA6BD: 0x6C57, //CJK UNIFIED IDEOGRAPH - 0xA6BE: 0x6C59, //CJK UNIFIED IDEOGRAPH - 0xA6BF: 0x6C5F, //CJK UNIFIED IDEOGRAPH - 0xA6C0: 0x6C60, //CJK UNIFIED IDEOGRAPH - 0xA6C1: 0x6C50, //CJK UNIFIED IDEOGRAPH - 0xA6C2: 0x6C55, //CJK UNIFIED IDEOGRAPH - 0xA6C3: 0x6C61, //CJK UNIFIED IDEOGRAPH - 0xA6C4: 0x6C5B, //CJK UNIFIED IDEOGRAPH - 0xA6C5: 0x6C4D, //CJK UNIFIED IDEOGRAPH - 0xA6C6: 0x6C4E, //CJK UNIFIED IDEOGRAPH - 0xA6C7: 0x7070, //CJK UNIFIED IDEOGRAPH - 0xA6C8: 0x725F, //CJK UNIFIED IDEOGRAPH - 0xA6C9: 0x725D, //CJK UNIFIED IDEOGRAPH - 0xA6CA: 0x767E, //CJK UNIFIED IDEOGRAPH - 0xA6CB: 0x7AF9, //CJK UNIFIED IDEOGRAPH - 0xA6CC: 0x7C73, //CJK UNIFIED IDEOGRAPH - 0xA6CD: 0x7CF8, //CJK UNIFIED IDEOGRAPH - 0xA6CE: 0x7F36, //CJK UNIFIED IDEOGRAPH - 0xA6CF: 0x7F8A, //CJK UNIFIED IDEOGRAPH - 0xA6D0: 0x7FBD, //CJK UNIFIED IDEOGRAPH - 0xA6D1: 0x8001, //CJK UNIFIED IDEOGRAPH - 0xA6D2: 0x8003, //CJK UNIFIED IDEOGRAPH - 0xA6D3: 0x800C, //CJK UNIFIED IDEOGRAPH - 0xA6D4: 0x8012, //CJK UNIFIED IDEOGRAPH - 0xA6D5: 0x8033, //CJK UNIFIED IDEOGRAPH - 0xA6D6: 0x807F, //CJK UNIFIED IDEOGRAPH - 0xA6D7: 0x8089, //CJK UNIFIED IDEOGRAPH - 0xA6D8: 0x808B, //CJK UNIFIED IDEOGRAPH - 0xA6D9: 0x808C, //CJK UNIFIED IDEOGRAPH - 0xA6DA: 0x81E3, //CJK UNIFIED IDEOGRAPH - 0xA6DB: 0x81EA, //CJK UNIFIED IDEOGRAPH - 0xA6DC: 0x81F3, //CJK UNIFIED IDEOGRAPH - 0xA6DD: 0x81FC, //CJK UNIFIED IDEOGRAPH - 0xA6DE: 0x820C, //CJK UNIFIED IDEOGRAPH - 0xA6DF: 0x821B, //CJK UNIFIED IDEOGRAPH - 0xA6E0: 0x821F, //CJK UNIFIED IDEOGRAPH - 0xA6E1: 0x826E, //CJK UNIFIED IDEOGRAPH - 0xA6E2: 0x8272, //CJK UNIFIED IDEOGRAPH - 0xA6E3: 0x827E, //CJK UNIFIED IDEOGRAPH - 0xA6E4: 0x866B, //CJK UNIFIED IDEOGRAPH - 0xA6E5: 0x8840, //CJK UNIFIED IDEOGRAPH - 0xA6E6: 0x884C, //CJK UNIFIED IDEOGRAPH - 0xA6E7: 0x8863, //CJK UNIFIED IDEOGRAPH - 0xA6E8: 0x897F, //CJK UNIFIED IDEOGRAPH - 0xA6E9: 0x9621, //CJK UNIFIED IDEOGRAPH - 0xA6EA: 0x4E32, //CJK UNIFIED IDEOGRAPH - 0xA6EB: 0x4EA8, //CJK UNIFIED IDEOGRAPH - 0xA6EC: 0x4F4D, //CJK UNIFIED IDEOGRAPH - 0xA6ED: 0x4F4F, //CJK UNIFIED IDEOGRAPH - 0xA6EE: 0x4F47, //CJK UNIFIED IDEOGRAPH - 0xA6EF: 0x4F57, //CJK UNIFIED IDEOGRAPH - 0xA6F0: 0x4F5E, //CJK UNIFIED IDEOGRAPH - 0xA6F1: 0x4F34, //CJK UNIFIED IDEOGRAPH - 0xA6F2: 0x4F5B, //CJK UNIFIED IDEOGRAPH - 0xA6F3: 0x4F55, //CJK UNIFIED IDEOGRAPH - 0xA6F4: 0x4F30, //CJK UNIFIED IDEOGRAPH - 0xA6F5: 0x4F50, //CJK UNIFIED IDEOGRAPH - 0xA6F6: 0x4F51, //CJK UNIFIED IDEOGRAPH - 0xA6F7: 0x4F3D, //CJK UNIFIED IDEOGRAPH - 0xA6F8: 0x4F3A, //CJK UNIFIED IDEOGRAPH - 0xA6F9: 0x4F38, //CJK UNIFIED IDEOGRAPH - 0xA6FA: 0x4F43, //CJK UNIFIED IDEOGRAPH - 0xA6FB: 0x4F54, //CJK UNIFIED IDEOGRAPH - 0xA6FC: 0x4F3C, //CJK UNIFIED IDEOGRAPH - 0xA6FD: 0x4F46, //CJK UNIFIED IDEOGRAPH - 0xA6FE: 0x4F63, //CJK UNIFIED IDEOGRAPH - 0xA740: 0x4F5C, //CJK UNIFIED IDEOGRAPH - 0xA741: 0x4F60, //CJK UNIFIED IDEOGRAPH - 0xA742: 0x4F2F, //CJK UNIFIED IDEOGRAPH - 0xA743: 0x4F4E, //CJK UNIFIED IDEOGRAPH - 0xA744: 0x4F36, //CJK UNIFIED IDEOGRAPH - 0xA745: 0x4F59, //CJK UNIFIED IDEOGRAPH - 0xA746: 0x4F5D, //CJK UNIFIED IDEOGRAPH - 0xA747: 0x4F48, //CJK UNIFIED IDEOGRAPH - 0xA748: 0x4F5A, //CJK UNIFIED IDEOGRAPH - 0xA749: 0x514C, //CJK UNIFIED IDEOGRAPH - 0xA74A: 0x514B, //CJK UNIFIED IDEOGRAPH - 0xA74B: 0x514D, //CJK UNIFIED IDEOGRAPH - 0xA74C: 0x5175, //CJK UNIFIED IDEOGRAPH - 0xA74D: 0x51B6, //CJK UNIFIED IDEOGRAPH - 0xA74E: 0x51B7, //CJK UNIFIED IDEOGRAPH - 0xA74F: 0x5225, //CJK UNIFIED IDEOGRAPH - 0xA750: 0x5224, //CJK UNIFIED IDEOGRAPH - 0xA751: 0x5229, //CJK UNIFIED IDEOGRAPH - 0xA752: 0x522A, //CJK UNIFIED IDEOGRAPH - 0xA753: 0x5228, //CJK UNIFIED IDEOGRAPH - 0xA754: 0x52AB, //CJK UNIFIED IDEOGRAPH - 0xA755: 0x52A9, //CJK UNIFIED IDEOGRAPH - 0xA756: 0x52AA, //CJK UNIFIED IDEOGRAPH - 0xA757: 0x52AC, //CJK UNIFIED IDEOGRAPH - 0xA758: 0x5323, //CJK UNIFIED IDEOGRAPH - 0xA759: 0x5373, //CJK UNIFIED IDEOGRAPH - 0xA75A: 0x5375, //CJK UNIFIED IDEOGRAPH - 0xA75B: 0x541D, //CJK UNIFIED IDEOGRAPH - 0xA75C: 0x542D, //CJK UNIFIED IDEOGRAPH - 0xA75D: 0x541E, //CJK UNIFIED IDEOGRAPH - 0xA75E: 0x543E, //CJK UNIFIED IDEOGRAPH - 0xA75F: 0x5426, //CJK UNIFIED IDEOGRAPH - 0xA760: 0x544E, //CJK UNIFIED IDEOGRAPH - 0xA761: 0x5427, //CJK UNIFIED IDEOGRAPH - 0xA762: 0x5446, //CJK UNIFIED IDEOGRAPH - 0xA763: 0x5443, //CJK UNIFIED IDEOGRAPH - 0xA764: 0x5433, //CJK UNIFIED IDEOGRAPH - 0xA765: 0x5448, //CJK UNIFIED IDEOGRAPH - 0xA766: 0x5442, //CJK UNIFIED IDEOGRAPH - 0xA767: 0x541B, //CJK UNIFIED IDEOGRAPH - 0xA768: 0x5429, //CJK UNIFIED IDEOGRAPH - 0xA769: 0x544A, //CJK UNIFIED IDEOGRAPH - 0xA76A: 0x5439, //CJK UNIFIED IDEOGRAPH - 0xA76B: 0x543B, //CJK UNIFIED IDEOGRAPH - 0xA76C: 0x5438, //CJK UNIFIED IDEOGRAPH - 0xA76D: 0x542E, //CJK UNIFIED IDEOGRAPH - 0xA76E: 0x5435, //CJK UNIFIED IDEOGRAPH - 0xA76F: 0x5436, //CJK UNIFIED IDEOGRAPH - 0xA770: 0x5420, //CJK UNIFIED IDEOGRAPH - 0xA771: 0x543C, //CJK UNIFIED IDEOGRAPH - 0xA772: 0x5440, //CJK UNIFIED IDEOGRAPH - 0xA773: 0x5431, //CJK UNIFIED IDEOGRAPH - 0xA774: 0x542B, //CJK UNIFIED IDEOGRAPH - 0xA775: 0x541F, //CJK UNIFIED IDEOGRAPH - 0xA776: 0x542C, //CJK UNIFIED IDEOGRAPH - 0xA777: 0x56EA, //CJK UNIFIED IDEOGRAPH - 0xA778: 0x56F0, //CJK UNIFIED IDEOGRAPH - 0xA779: 0x56E4, //CJK UNIFIED IDEOGRAPH - 0xA77A: 0x56EB, //CJK UNIFIED IDEOGRAPH - 0xA77B: 0x574A, //CJK UNIFIED IDEOGRAPH - 0xA77C: 0x5751, //CJK UNIFIED IDEOGRAPH - 0xA77D: 0x5740, //CJK UNIFIED IDEOGRAPH - 0xA77E: 0x574D, //CJK UNIFIED IDEOGRAPH - 0xA7A1: 0x5747, //CJK UNIFIED IDEOGRAPH - 0xA7A2: 0x574E, //CJK UNIFIED IDEOGRAPH - 0xA7A3: 0x573E, //CJK UNIFIED IDEOGRAPH - 0xA7A4: 0x5750, //CJK UNIFIED IDEOGRAPH - 0xA7A5: 0x574F, //CJK UNIFIED IDEOGRAPH - 0xA7A6: 0x573B, //CJK UNIFIED IDEOGRAPH - 0xA7A7: 0x58EF, //CJK UNIFIED IDEOGRAPH - 0xA7A8: 0x593E, //CJK UNIFIED IDEOGRAPH - 0xA7A9: 0x599D, //CJK UNIFIED IDEOGRAPH - 0xA7AA: 0x5992, //CJK UNIFIED IDEOGRAPH - 0xA7AB: 0x59A8, //CJK UNIFIED IDEOGRAPH - 0xA7AC: 0x599E, //CJK UNIFIED IDEOGRAPH - 0xA7AD: 0x59A3, //CJK UNIFIED IDEOGRAPH - 0xA7AE: 0x5999, //CJK UNIFIED IDEOGRAPH - 0xA7AF: 0x5996, //CJK UNIFIED IDEOGRAPH - 0xA7B0: 0x598D, //CJK UNIFIED IDEOGRAPH - 0xA7B1: 0x59A4, //CJK UNIFIED IDEOGRAPH - 0xA7B2: 0x5993, //CJK UNIFIED IDEOGRAPH - 0xA7B3: 0x598A, //CJK UNIFIED IDEOGRAPH - 0xA7B4: 0x59A5, //CJK UNIFIED IDEOGRAPH - 0xA7B5: 0x5B5D, //CJK UNIFIED IDEOGRAPH - 0xA7B6: 0x5B5C, //CJK UNIFIED IDEOGRAPH - 0xA7B7: 0x5B5A, //CJK UNIFIED IDEOGRAPH - 0xA7B8: 0x5B5B, //CJK UNIFIED IDEOGRAPH - 0xA7B9: 0x5B8C, //CJK UNIFIED IDEOGRAPH - 0xA7BA: 0x5B8B, //CJK UNIFIED IDEOGRAPH - 0xA7BB: 0x5B8F, //CJK UNIFIED IDEOGRAPH - 0xA7BC: 0x5C2C, //CJK UNIFIED IDEOGRAPH - 0xA7BD: 0x5C40, //CJK UNIFIED IDEOGRAPH - 0xA7BE: 0x5C41, //CJK UNIFIED IDEOGRAPH - 0xA7BF: 0x5C3F, //CJK UNIFIED IDEOGRAPH - 0xA7C0: 0x5C3E, //CJK UNIFIED IDEOGRAPH - 0xA7C1: 0x5C90, //CJK UNIFIED IDEOGRAPH - 0xA7C2: 0x5C91, //CJK UNIFIED IDEOGRAPH - 0xA7C3: 0x5C94, //CJK UNIFIED IDEOGRAPH - 0xA7C4: 0x5C8C, //CJK UNIFIED IDEOGRAPH - 0xA7C5: 0x5DEB, //CJK UNIFIED IDEOGRAPH - 0xA7C6: 0x5E0C, //CJK UNIFIED IDEOGRAPH - 0xA7C7: 0x5E8F, //CJK UNIFIED IDEOGRAPH - 0xA7C8: 0x5E87, //CJK UNIFIED IDEOGRAPH - 0xA7C9: 0x5E8A, //CJK UNIFIED IDEOGRAPH - 0xA7CA: 0x5EF7, //CJK UNIFIED IDEOGRAPH - 0xA7CB: 0x5F04, //CJK UNIFIED IDEOGRAPH - 0xA7CC: 0x5F1F, //CJK UNIFIED IDEOGRAPH - 0xA7CD: 0x5F64, //CJK UNIFIED IDEOGRAPH - 0xA7CE: 0x5F62, //CJK UNIFIED IDEOGRAPH - 0xA7CF: 0x5F77, //CJK UNIFIED IDEOGRAPH - 0xA7D0: 0x5F79, //CJK UNIFIED IDEOGRAPH - 0xA7D1: 0x5FD8, //CJK UNIFIED IDEOGRAPH - 0xA7D2: 0x5FCC, //CJK UNIFIED IDEOGRAPH - 0xA7D3: 0x5FD7, //CJK UNIFIED IDEOGRAPH - 0xA7D4: 0x5FCD, //CJK UNIFIED IDEOGRAPH - 0xA7D5: 0x5FF1, //CJK UNIFIED IDEOGRAPH - 0xA7D6: 0x5FEB, //CJK UNIFIED IDEOGRAPH - 0xA7D7: 0x5FF8, //CJK UNIFIED IDEOGRAPH - 0xA7D8: 0x5FEA, //CJK UNIFIED IDEOGRAPH - 0xA7D9: 0x6212, //CJK UNIFIED IDEOGRAPH - 0xA7DA: 0x6211, //CJK UNIFIED IDEOGRAPH - 0xA7DB: 0x6284, //CJK UNIFIED IDEOGRAPH - 0xA7DC: 0x6297, //CJK UNIFIED IDEOGRAPH - 0xA7DD: 0x6296, //CJK UNIFIED IDEOGRAPH - 0xA7DE: 0x6280, //CJK UNIFIED IDEOGRAPH - 0xA7DF: 0x6276, //CJK UNIFIED IDEOGRAPH - 0xA7E0: 0x6289, //CJK UNIFIED IDEOGRAPH - 0xA7E1: 0x626D, //CJK UNIFIED IDEOGRAPH - 0xA7E2: 0x628A, //CJK UNIFIED IDEOGRAPH - 0xA7E3: 0x627C, //CJK UNIFIED IDEOGRAPH - 0xA7E4: 0x627E, //CJK UNIFIED IDEOGRAPH - 0xA7E5: 0x6279, //CJK UNIFIED IDEOGRAPH - 0xA7E6: 0x6273, //CJK UNIFIED IDEOGRAPH - 0xA7E7: 0x6292, //CJK UNIFIED IDEOGRAPH - 0xA7E8: 0x626F, //CJK UNIFIED IDEOGRAPH - 0xA7E9: 0x6298, //CJK UNIFIED IDEOGRAPH - 0xA7EA: 0x626E, //CJK UNIFIED IDEOGRAPH - 0xA7EB: 0x6295, //CJK UNIFIED IDEOGRAPH - 0xA7EC: 0x6293, //CJK UNIFIED IDEOGRAPH - 0xA7ED: 0x6291, //CJK UNIFIED IDEOGRAPH - 0xA7EE: 0x6286, //CJK UNIFIED IDEOGRAPH - 0xA7EF: 0x6539, //CJK UNIFIED IDEOGRAPH - 0xA7F0: 0x653B, //CJK UNIFIED IDEOGRAPH - 0xA7F1: 0x6538, //CJK UNIFIED IDEOGRAPH - 0xA7F2: 0x65F1, //CJK UNIFIED IDEOGRAPH - 0xA7F3: 0x66F4, //CJK UNIFIED IDEOGRAPH - 0xA7F4: 0x675F, //CJK UNIFIED IDEOGRAPH - 0xA7F5: 0x674E, //CJK UNIFIED IDEOGRAPH - 0xA7F6: 0x674F, //CJK UNIFIED IDEOGRAPH - 0xA7F7: 0x6750, //CJK UNIFIED IDEOGRAPH - 0xA7F8: 0x6751, //CJK UNIFIED IDEOGRAPH - 0xA7F9: 0x675C, //CJK UNIFIED IDEOGRAPH - 0xA7FA: 0x6756, //CJK UNIFIED IDEOGRAPH - 0xA7FB: 0x675E, //CJK UNIFIED IDEOGRAPH - 0xA7FC: 0x6749, //CJK UNIFIED IDEOGRAPH - 0xA7FD: 0x6746, //CJK UNIFIED IDEOGRAPH - 0xA7FE: 0x6760, //CJK UNIFIED IDEOGRAPH - 0xA840: 0x6753, //CJK UNIFIED IDEOGRAPH - 0xA841: 0x6757, //CJK UNIFIED IDEOGRAPH - 0xA842: 0x6B65, //CJK UNIFIED IDEOGRAPH - 0xA843: 0x6BCF, //CJK UNIFIED IDEOGRAPH - 0xA844: 0x6C42, //CJK UNIFIED IDEOGRAPH - 0xA845: 0x6C5E, //CJK UNIFIED IDEOGRAPH - 0xA846: 0x6C99, //CJK UNIFIED IDEOGRAPH - 0xA847: 0x6C81, //CJK UNIFIED IDEOGRAPH - 0xA848: 0x6C88, //CJK UNIFIED IDEOGRAPH - 0xA849: 0x6C89, //CJK UNIFIED IDEOGRAPH - 0xA84A: 0x6C85, //CJK UNIFIED IDEOGRAPH - 0xA84B: 0x6C9B, //CJK UNIFIED IDEOGRAPH - 0xA84C: 0x6C6A, //CJK UNIFIED IDEOGRAPH - 0xA84D: 0x6C7A, //CJK UNIFIED IDEOGRAPH - 0xA84E: 0x6C90, //CJK UNIFIED IDEOGRAPH - 0xA84F: 0x6C70, //CJK UNIFIED IDEOGRAPH - 0xA850: 0x6C8C, //CJK UNIFIED IDEOGRAPH - 0xA851: 0x6C68, //CJK UNIFIED IDEOGRAPH - 0xA852: 0x6C96, //CJK UNIFIED IDEOGRAPH - 0xA853: 0x6C92, //CJK UNIFIED IDEOGRAPH - 0xA854: 0x6C7D, //CJK UNIFIED IDEOGRAPH - 0xA855: 0x6C83, //CJK UNIFIED IDEOGRAPH - 0xA856: 0x6C72, //CJK UNIFIED IDEOGRAPH - 0xA857: 0x6C7E, //CJK UNIFIED IDEOGRAPH - 0xA858: 0x6C74, //CJK UNIFIED IDEOGRAPH - 0xA859: 0x6C86, //CJK UNIFIED IDEOGRAPH - 0xA85A: 0x6C76, //CJK UNIFIED IDEOGRAPH - 0xA85B: 0x6C8D, //CJK UNIFIED IDEOGRAPH - 0xA85C: 0x6C94, //CJK UNIFIED IDEOGRAPH - 0xA85D: 0x6C98, //CJK UNIFIED IDEOGRAPH - 0xA85E: 0x6C82, //CJK UNIFIED IDEOGRAPH - 0xA85F: 0x7076, //CJK UNIFIED IDEOGRAPH - 0xA860: 0x707C, //CJK UNIFIED IDEOGRAPH - 0xA861: 0x707D, //CJK UNIFIED IDEOGRAPH - 0xA862: 0x7078, //CJK UNIFIED IDEOGRAPH - 0xA863: 0x7262, //CJK UNIFIED IDEOGRAPH - 0xA864: 0x7261, //CJK UNIFIED IDEOGRAPH - 0xA865: 0x7260, //CJK UNIFIED IDEOGRAPH - 0xA866: 0x72C4, //CJK UNIFIED IDEOGRAPH - 0xA867: 0x72C2, //CJK UNIFIED IDEOGRAPH - 0xA868: 0x7396, //CJK UNIFIED IDEOGRAPH - 0xA869: 0x752C, //CJK UNIFIED IDEOGRAPH - 0xA86A: 0x752B, //CJK UNIFIED IDEOGRAPH - 0xA86B: 0x7537, //CJK UNIFIED IDEOGRAPH - 0xA86C: 0x7538, //CJK UNIFIED IDEOGRAPH - 0xA86D: 0x7682, //CJK UNIFIED IDEOGRAPH - 0xA86E: 0x76EF, //CJK UNIFIED IDEOGRAPH - 0xA86F: 0x77E3, //CJK UNIFIED IDEOGRAPH - 0xA870: 0x79C1, //CJK UNIFIED IDEOGRAPH - 0xA871: 0x79C0, //CJK UNIFIED IDEOGRAPH - 0xA872: 0x79BF, //CJK UNIFIED IDEOGRAPH - 0xA873: 0x7A76, //CJK UNIFIED IDEOGRAPH - 0xA874: 0x7CFB, //CJK UNIFIED IDEOGRAPH - 0xA875: 0x7F55, //CJK UNIFIED IDEOGRAPH - 0xA876: 0x8096, //CJK UNIFIED IDEOGRAPH - 0xA877: 0x8093, //CJK UNIFIED IDEOGRAPH - 0xA878: 0x809D, //CJK UNIFIED IDEOGRAPH - 0xA879: 0x8098, //CJK UNIFIED IDEOGRAPH - 0xA87A: 0x809B, //CJK UNIFIED IDEOGRAPH - 0xA87B: 0x809A, //CJK UNIFIED IDEOGRAPH - 0xA87C: 0x80B2, //CJK UNIFIED IDEOGRAPH - 0xA87D: 0x826F, //CJK UNIFIED IDEOGRAPH - 0xA87E: 0x8292, //CJK UNIFIED IDEOGRAPH - 0xA8A1: 0x828B, //CJK UNIFIED IDEOGRAPH - 0xA8A2: 0x828D, //CJK UNIFIED IDEOGRAPH - 0xA8A3: 0x898B, //CJK UNIFIED IDEOGRAPH - 0xA8A4: 0x89D2, //CJK UNIFIED IDEOGRAPH - 0xA8A5: 0x8A00, //CJK UNIFIED IDEOGRAPH - 0xA8A6: 0x8C37, //CJK UNIFIED IDEOGRAPH - 0xA8A7: 0x8C46, //CJK UNIFIED IDEOGRAPH - 0xA8A8: 0x8C55, //CJK UNIFIED IDEOGRAPH - 0xA8A9: 0x8C9D, //CJK UNIFIED IDEOGRAPH - 0xA8AA: 0x8D64, //CJK UNIFIED IDEOGRAPH - 0xA8AB: 0x8D70, //CJK UNIFIED IDEOGRAPH - 0xA8AC: 0x8DB3, //CJK UNIFIED IDEOGRAPH - 0xA8AD: 0x8EAB, //CJK UNIFIED IDEOGRAPH - 0xA8AE: 0x8ECA, //CJK UNIFIED IDEOGRAPH - 0xA8AF: 0x8F9B, //CJK UNIFIED IDEOGRAPH - 0xA8B0: 0x8FB0, //CJK UNIFIED IDEOGRAPH - 0xA8B1: 0x8FC2, //CJK UNIFIED IDEOGRAPH - 0xA8B2: 0x8FC6, //CJK UNIFIED IDEOGRAPH - 0xA8B3: 0x8FC5, //CJK UNIFIED IDEOGRAPH - 0xA8B4: 0x8FC4, //CJK UNIFIED IDEOGRAPH - 0xA8B5: 0x5DE1, //CJK UNIFIED IDEOGRAPH - 0xA8B6: 0x9091, //CJK UNIFIED IDEOGRAPH - 0xA8B7: 0x90A2, //CJK UNIFIED IDEOGRAPH - 0xA8B8: 0x90AA, //CJK UNIFIED IDEOGRAPH - 0xA8B9: 0x90A6, //CJK UNIFIED IDEOGRAPH - 0xA8BA: 0x90A3, //CJK UNIFIED IDEOGRAPH - 0xA8BB: 0x9149, //CJK UNIFIED IDEOGRAPH - 0xA8BC: 0x91C6, //CJK UNIFIED IDEOGRAPH - 0xA8BD: 0x91CC, //CJK UNIFIED IDEOGRAPH - 0xA8BE: 0x9632, //CJK UNIFIED IDEOGRAPH - 0xA8BF: 0x962E, //CJK UNIFIED IDEOGRAPH - 0xA8C0: 0x9631, //CJK UNIFIED IDEOGRAPH - 0xA8C1: 0x962A, //CJK UNIFIED IDEOGRAPH - 0xA8C2: 0x962C, //CJK UNIFIED IDEOGRAPH - 0xA8C3: 0x4E26, //CJK UNIFIED IDEOGRAPH - 0xA8C4: 0x4E56, //CJK UNIFIED IDEOGRAPH - 0xA8C5: 0x4E73, //CJK UNIFIED IDEOGRAPH - 0xA8C6: 0x4E8B, //CJK UNIFIED IDEOGRAPH - 0xA8C7: 0x4E9B, //CJK UNIFIED IDEOGRAPH - 0xA8C8: 0x4E9E, //CJK UNIFIED IDEOGRAPH - 0xA8C9: 0x4EAB, //CJK UNIFIED IDEOGRAPH - 0xA8CA: 0x4EAC, //CJK UNIFIED IDEOGRAPH - 0xA8CB: 0x4F6F, //CJK UNIFIED IDEOGRAPH - 0xA8CC: 0x4F9D, //CJK UNIFIED IDEOGRAPH - 0xA8CD: 0x4F8D, //CJK UNIFIED IDEOGRAPH - 0xA8CE: 0x4F73, //CJK UNIFIED IDEOGRAPH - 0xA8CF: 0x4F7F, //CJK UNIFIED IDEOGRAPH - 0xA8D0: 0x4F6C, //CJK UNIFIED IDEOGRAPH - 0xA8D1: 0x4F9B, //CJK UNIFIED IDEOGRAPH - 0xA8D2: 0x4F8B, //CJK UNIFIED IDEOGRAPH - 0xA8D3: 0x4F86, //CJK UNIFIED IDEOGRAPH - 0xA8D4: 0x4F83, //CJK UNIFIED IDEOGRAPH - 0xA8D5: 0x4F70, //CJK UNIFIED IDEOGRAPH - 0xA8D6: 0x4F75, //CJK UNIFIED IDEOGRAPH - 0xA8D7: 0x4F88, //CJK UNIFIED IDEOGRAPH - 0xA8D8: 0x4F69, //CJK UNIFIED IDEOGRAPH - 0xA8D9: 0x4F7B, //CJK UNIFIED IDEOGRAPH - 0xA8DA: 0x4F96, //CJK UNIFIED IDEOGRAPH - 0xA8DB: 0x4F7E, //CJK UNIFIED IDEOGRAPH - 0xA8DC: 0x4F8F, //CJK UNIFIED IDEOGRAPH - 0xA8DD: 0x4F91, //CJK UNIFIED IDEOGRAPH - 0xA8DE: 0x4F7A, //CJK UNIFIED IDEOGRAPH - 0xA8DF: 0x5154, //CJK UNIFIED IDEOGRAPH - 0xA8E0: 0x5152, //CJK UNIFIED IDEOGRAPH - 0xA8E1: 0x5155, //CJK UNIFIED IDEOGRAPH - 0xA8E2: 0x5169, //CJK UNIFIED IDEOGRAPH - 0xA8E3: 0x5177, //CJK UNIFIED IDEOGRAPH - 0xA8E4: 0x5176, //CJK UNIFIED IDEOGRAPH - 0xA8E5: 0x5178, //CJK UNIFIED IDEOGRAPH - 0xA8E6: 0x51BD, //CJK UNIFIED IDEOGRAPH - 0xA8E7: 0x51FD, //CJK UNIFIED IDEOGRAPH - 0xA8E8: 0x523B, //CJK UNIFIED IDEOGRAPH - 0xA8E9: 0x5238, //CJK UNIFIED IDEOGRAPH - 0xA8EA: 0x5237, //CJK UNIFIED IDEOGRAPH - 0xA8EB: 0x523A, //CJK UNIFIED IDEOGRAPH - 0xA8EC: 0x5230, //CJK UNIFIED IDEOGRAPH - 0xA8ED: 0x522E, //CJK UNIFIED IDEOGRAPH - 0xA8EE: 0x5236, //CJK UNIFIED IDEOGRAPH - 0xA8EF: 0x5241, //CJK UNIFIED IDEOGRAPH - 0xA8F0: 0x52BE, //CJK UNIFIED IDEOGRAPH - 0xA8F1: 0x52BB, //CJK UNIFIED IDEOGRAPH - 0xA8F2: 0x5352, //CJK UNIFIED IDEOGRAPH - 0xA8F3: 0x5354, //CJK UNIFIED IDEOGRAPH - 0xA8F4: 0x5353, //CJK UNIFIED IDEOGRAPH - 0xA8F5: 0x5351, //CJK UNIFIED IDEOGRAPH - 0xA8F6: 0x5366, //CJK UNIFIED IDEOGRAPH - 0xA8F7: 0x5377, //CJK UNIFIED IDEOGRAPH - 0xA8F8: 0x5378, //CJK UNIFIED IDEOGRAPH - 0xA8F9: 0x5379, //CJK UNIFIED IDEOGRAPH - 0xA8FA: 0x53D6, //CJK UNIFIED IDEOGRAPH - 0xA8FB: 0x53D4, //CJK UNIFIED IDEOGRAPH - 0xA8FC: 0x53D7, //CJK UNIFIED IDEOGRAPH - 0xA8FD: 0x5473, //CJK UNIFIED IDEOGRAPH - 0xA8FE: 0x5475, //CJK UNIFIED IDEOGRAPH - 0xA940: 0x5496, //CJK UNIFIED IDEOGRAPH - 0xA941: 0x5478, //CJK UNIFIED IDEOGRAPH - 0xA942: 0x5495, //CJK UNIFIED IDEOGRAPH - 0xA943: 0x5480, //CJK UNIFIED IDEOGRAPH - 0xA944: 0x547B, //CJK UNIFIED IDEOGRAPH - 0xA945: 0x5477, //CJK UNIFIED IDEOGRAPH - 0xA946: 0x5484, //CJK UNIFIED IDEOGRAPH - 0xA947: 0x5492, //CJK UNIFIED IDEOGRAPH - 0xA948: 0x5486, //CJK UNIFIED IDEOGRAPH - 0xA949: 0x547C, //CJK UNIFIED IDEOGRAPH - 0xA94A: 0x5490, //CJK UNIFIED IDEOGRAPH - 0xA94B: 0x5471, //CJK UNIFIED IDEOGRAPH - 0xA94C: 0x5476, //CJK UNIFIED IDEOGRAPH - 0xA94D: 0x548C, //CJK UNIFIED IDEOGRAPH - 0xA94E: 0x549A, //CJK UNIFIED IDEOGRAPH - 0xA94F: 0x5462, //CJK UNIFIED IDEOGRAPH - 0xA950: 0x5468, //CJK UNIFIED IDEOGRAPH - 0xA951: 0x548B, //CJK UNIFIED IDEOGRAPH - 0xA952: 0x547D, //CJK UNIFIED IDEOGRAPH - 0xA953: 0x548E, //CJK UNIFIED IDEOGRAPH - 0xA954: 0x56FA, //CJK UNIFIED IDEOGRAPH - 0xA955: 0x5783, //CJK UNIFIED IDEOGRAPH - 0xA956: 0x5777, //CJK UNIFIED IDEOGRAPH - 0xA957: 0x576A, //CJK UNIFIED IDEOGRAPH - 0xA958: 0x5769, //CJK UNIFIED IDEOGRAPH - 0xA959: 0x5761, //CJK UNIFIED IDEOGRAPH - 0xA95A: 0x5766, //CJK UNIFIED IDEOGRAPH - 0xA95B: 0x5764, //CJK UNIFIED IDEOGRAPH - 0xA95C: 0x577C, //CJK UNIFIED IDEOGRAPH - 0xA95D: 0x591C, //CJK UNIFIED IDEOGRAPH - 0xA95E: 0x5949, //CJK UNIFIED IDEOGRAPH - 0xA95F: 0x5947, //CJK UNIFIED IDEOGRAPH - 0xA960: 0x5948, //CJK UNIFIED IDEOGRAPH - 0xA961: 0x5944, //CJK UNIFIED IDEOGRAPH - 0xA962: 0x5954, //CJK UNIFIED IDEOGRAPH - 0xA963: 0x59BE, //CJK UNIFIED IDEOGRAPH - 0xA964: 0x59BB, //CJK UNIFIED IDEOGRAPH - 0xA965: 0x59D4, //CJK UNIFIED IDEOGRAPH - 0xA966: 0x59B9, //CJK UNIFIED IDEOGRAPH - 0xA967: 0x59AE, //CJK UNIFIED IDEOGRAPH - 0xA968: 0x59D1, //CJK UNIFIED IDEOGRAPH - 0xA969: 0x59C6, //CJK UNIFIED IDEOGRAPH - 0xA96A: 0x59D0, //CJK UNIFIED IDEOGRAPH - 0xA96B: 0x59CD, //CJK UNIFIED IDEOGRAPH - 0xA96C: 0x59CB, //CJK UNIFIED IDEOGRAPH - 0xA96D: 0x59D3, //CJK UNIFIED IDEOGRAPH - 0xA96E: 0x59CA, //CJK UNIFIED IDEOGRAPH - 0xA96F: 0x59AF, //CJK UNIFIED IDEOGRAPH - 0xA970: 0x59B3, //CJK UNIFIED IDEOGRAPH - 0xA971: 0x59D2, //CJK UNIFIED IDEOGRAPH - 0xA972: 0x59C5, //CJK UNIFIED IDEOGRAPH - 0xA973: 0x5B5F, //CJK UNIFIED IDEOGRAPH - 0xA974: 0x5B64, //CJK UNIFIED IDEOGRAPH - 0xA975: 0x5B63, //CJK UNIFIED IDEOGRAPH - 0xA976: 0x5B97, //CJK UNIFIED IDEOGRAPH - 0xA977: 0x5B9A, //CJK UNIFIED IDEOGRAPH - 0xA978: 0x5B98, //CJK UNIFIED IDEOGRAPH - 0xA979: 0x5B9C, //CJK UNIFIED IDEOGRAPH - 0xA97A: 0x5B99, //CJK UNIFIED IDEOGRAPH - 0xA97B: 0x5B9B, //CJK UNIFIED IDEOGRAPH - 0xA97C: 0x5C1A, //CJK UNIFIED IDEOGRAPH - 0xA97D: 0x5C48, //CJK UNIFIED IDEOGRAPH - 0xA97E: 0x5C45, //CJK UNIFIED IDEOGRAPH - 0xA9A1: 0x5C46, //CJK UNIFIED IDEOGRAPH - 0xA9A2: 0x5CB7, //CJK UNIFIED IDEOGRAPH - 0xA9A3: 0x5CA1, //CJK UNIFIED IDEOGRAPH - 0xA9A4: 0x5CB8, //CJK UNIFIED IDEOGRAPH - 0xA9A5: 0x5CA9, //CJK UNIFIED IDEOGRAPH - 0xA9A6: 0x5CAB, //CJK UNIFIED IDEOGRAPH - 0xA9A7: 0x5CB1, //CJK UNIFIED IDEOGRAPH - 0xA9A8: 0x5CB3, //CJK UNIFIED IDEOGRAPH - 0xA9A9: 0x5E18, //CJK UNIFIED IDEOGRAPH - 0xA9AA: 0x5E1A, //CJK UNIFIED IDEOGRAPH - 0xA9AB: 0x5E16, //CJK UNIFIED IDEOGRAPH - 0xA9AC: 0x5E15, //CJK UNIFIED IDEOGRAPH - 0xA9AD: 0x5E1B, //CJK UNIFIED IDEOGRAPH - 0xA9AE: 0x5E11, //CJK UNIFIED IDEOGRAPH - 0xA9AF: 0x5E78, //CJK UNIFIED IDEOGRAPH - 0xA9B0: 0x5E9A, //CJK UNIFIED IDEOGRAPH - 0xA9B1: 0x5E97, //CJK UNIFIED IDEOGRAPH - 0xA9B2: 0x5E9C, //CJK UNIFIED IDEOGRAPH - 0xA9B3: 0x5E95, //CJK UNIFIED IDEOGRAPH - 0xA9B4: 0x5E96, //CJK UNIFIED IDEOGRAPH - 0xA9B5: 0x5EF6, //CJK UNIFIED IDEOGRAPH - 0xA9B6: 0x5F26, //CJK UNIFIED IDEOGRAPH - 0xA9B7: 0x5F27, //CJK UNIFIED IDEOGRAPH - 0xA9B8: 0x5F29, //CJK UNIFIED IDEOGRAPH - 0xA9B9: 0x5F80, //CJK UNIFIED IDEOGRAPH - 0xA9BA: 0x5F81, //CJK UNIFIED IDEOGRAPH - 0xA9BB: 0x5F7F, //CJK UNIFIED IDEOGRAPH - 0xA9BC: 0x5F7C, //CJK UNIFIED IDEOGRAPH - 0xA9BD: 0x5FDD, //CJK UNIFIED IDEOGRAPH - 0xA9BE: 0x5FE0, //CJK UNIFIED IDEOGRAPH - 0xA9BF: 0x5FFD, //CJK UNIFIED IDEOGRAPH - 0xA9C0: 0x5FF5, //CJK UNIFIED IDEOGRAPH - 0xA9C1: 0x5FFF, //CJK UNIFIED IDEOGRAPH - 0xA9C2: 0x600F, //CJK UNIFIED IDEOGRAPH - 0xA9C3: 0x6014, //CJK UNIFIED IDEOGRAPH - 0xA9C4: 0x602F, //CJK UNIFIED IDEOGRAPH - 0xA9C5: 0x6035, //CJK UNIFIED IDEOGRAPH - 0xA9C6: 0x6016, //CJK UNIFIED IDEOGRAPH - 0xA9C7: 0x602A, //CJK UNIFIED IDEOGRAPH - 0xA9C8: 0x6015, //CJK UNIFIED IDEOGRAPH - 0xA9C9: 0x6021, //CJK UNIFIED IDEOGRAPH - 0xA9CA: 0x6027, //CJK UNIFIED IDEOGRAPH - 0xA9CB: 0x6029, //CJK UNIFIED IDEOGRAPH - 0xA9CC: 0x602B, //CJK UNIFIED IDEOGRAPH - 0xA9CD: 0x601B, //CJK UNIFIED IDEOGRAPH - 0xA9CE: 0x6216, //CJK UNIFIED IDEOGRAPH - 0xA9CF: 0x6215, //CJK UNIFIED IDEOGRAPH - 0xA9D0: 0x623F, //CJK UNIFIED IDEOGRAPH - 0xA9D1: 0x623E, //CJK UNIFIED IDEOGRAPH - 0xA9D2: 0x6240, //CJK UNIFIED IDEOGRAPH - 0xA9D3: 0x627F, //CJK UNIFIED IDEOGRAPH - 0xA9D4: 0x62C9, //CJK UNIFIED IDEOGRAPH - 0xA9D5: 0x62CC, //CJK UNIFIED IDEOGRAPH - 0xA9D6: 0x62C4, //CJK UNIFIED IDEOGRAPH - 0xA9D7: 0x62BF, //CJK UNIFIED IDEOGRAPH - 0xA9D8: 0x62C2, //CJK UNIFIED IDEOGRAPH - 0xA9D9: 0x62B9, //CJK UNIFIED IDEOGRAPH - 0xA9DA: 0x62D2, //CJK UNIFIED IDEOGRAPH - 0xA9DB: 0x62DB, //CJK UNIFIED IDEOGRAPH - 0xA9DC: 0x62AB, //CJK UNIFIED IDEOGRAPH - 0xA9DD: 0x62D3, //CJK UNIFIED IDEOGRAPH - 0xA9DE: 0x62D4, //CJK UNIFIED IDEOGRAPH - 0xA9DF: 0x62CB, //CJK UNIFIED IDEOGRAPH - 0xA9E0: 0x62C8, //CJK UNIFIED IDEOGRAPH - 0xA9E1: 0x62A8, //CJK UNIFIED IDEOGRAPH - 0xA9E2: 0x62BD, //CJK UNIFIED IDEOGRAPH - 0xA9E3: 0x62BC, //CJK UNIFIED IDEOGRAPH - 0xA9E4: 0x62D0, //CJK UNIFIED IDEOGRAPH - 0xA9E5: 0x62D9, //CJK UNIFIED IDEOGRAPH - 0xA9E6: 0x62C7, //CJK UNIFIED IDEOGRAPH - 0xA9E7: 0x62CD, //CJK UNIFIED IDEOGRAPH - 0xA9E8: 0x62B5, //CJK UNIFIED IDEOGRAPH - 0xA9E9: 0x62DA, //CJK UNIFIED IDEOGRAPH - 0xA9EA: 0x62B1, //CJK UNIFIED IDEOGRAPH - 0xA9EB: 0x62D8, //CJK UNIFIED IDEOGRAPH - 0xA9EC: 0x62D6, //CJK UNIFIED IDEOGRAPH - 0xA9ED: 0x62D7, //CJK UNIFIED IDEOGRAPH - 0xA9EE: 0x62C6, //CJK UNIFIED IDEOGRAPH - 0xA9EF: 0x62AC, //CJK UNIFIED IDEOGRAPH - 0xA9F0: 0x62CE, //CJK UNIFIED IDEOGRAPH - 0xA9F1: 0x653E, //CJK UNIFIED IDEOGRAPH - 0xA9F2: 0x65A7, //CJK UNIFIED IDEOGRAPH - 0xA9F3: 0x65BC, //CJK UNIFIED IDEOGRAPH - 0xA9F4: 0x65FA, //CJK UNIFIED IDEOGRAPH - 0xA9F5: 0x6614, //CJK UNIFIED IDEOGRAPH - 0xA9F6: 0x6613, //CJK UNIFIED IDEOGRAPH - 0xA9F7: 0x660C, //CJK UNIFIED IDEOGRAPH - 0xA9F8: 0x6606, //CJK UNIFIED IDEOGRAPH - 0xA9F9: 0x6602, //CJK UNIFIED IDEOGRAPH - 0xA9FA: 0x660E, //CJK UNIFIED IDEOGRAPH - 0xA9FB: 0x6600, //CJK UNIFIED IDEOGRAPH - 0xA9FC: 0x660F, //CJK UNIFIED IDEOGRAPH - 0xA9FD: 0x6615, //CJK UNIFIED IDEOGRAPH - 0xA9FE: 0x660A, //CJK UNIFIED IDEOGRAPH - 0xAA40: 0x6607, //CJK UNIFIED IDEOGRAPH - 0xAA41: 0x670D, //CJK UNIFIED IDEOGRAPH - 0xAA42: 0x670B, //CJK UNIFIED IDEOGRAPH - 0xAA43: 0x676D, //CJK UNIFIED IDEOGRAPH - 0xAA44: 0x678B, //CJK UNIFIED IDEOGRAPH - 0xAA45: 0x6795, //CJK UNIFIED IDEOGRAPH - 0xAA46: 0x6771, //CJK UNIFIED IDEOGRAPH - 0xAA47: 0x679C, //CJK UNIFIED IDEOGRAPH - 0xAA48: 0x6773, //CJK UNIFIED IDEOGRAPH - 0xAA49: 0x6777, //CJK UNIFIED IDEOGRAPH - 0xAA4A: 0x6787, //CJK UNIFIED IDEOGRAPH - 0xAA4B: 0x679D, //CJK UNIFIED IDEOGRAPH - 0xAA4C: 0x6797, //CJK UNIFIED IDEOGRAPH - 0xAA4D: 0x676F, //CJK UNIFIED IDEOGRAPH - 0xAA4E: 0x6770, //CJK UNIFIED IDEOGRAPH - 0xAA4F: 0x677F, //CJK UNIFIED IDEOGRAPH - 0xAA50: 0x6789, //CJK UNIFIED IDEOGRAPH - 0xAA51: 0x677E, //CJK UNIFIED IDEOGRAPH - 0xAA52: 0x6790, //CJK UNIFIED IDEOGRAPH - 0xAA53: 0x6775, //CJK UNIFIED IDEOGRAPH - 0xAA54: 0x679A, //CJK UNIFIED IDEOGRAPH - 0xAA55: 0x6793, //CJK UNIFIED IDEOGRAPH - 0xAA56: 0x677C, //CJK UNIFIED IDEOGRAPH - 0xAA57: 0x676A, //CJK UNIFIED IDEOGRAPH - 0xAA58: 0x6772, //CJK UNIFIED IDEOGRAPH - 0xAA59: 0x6B23, //CJK UNIFIED IDEOGRAPH - 0xAA5A: 0x6B66, //CJK UNIFIED IDEOGRAPH - 0xAA5B: 0x6B67, //CJK UNIFIED IDEOGRAPH - 0xAA5C: 0x6B7F, //CJK UNIFIED IDEOGRAPH - 0xAA5D: 0x6C13, //CJK UNIFIED IDEOGRAPH - 0xAA5E: 0x6C1B, //CJK UNIFIED IDEOGRAPH - 0xAA5F: 0x6CE3, //CJK UNIFIED IDEOGRAPH - 0xAA60: 0x6CE8, //CJK UNIFIED IDEOGRAPH - 0xAA61: 0x6CF3, //CJK UNIFIED IDEOGRAPH - 0xAA62: 0x6CB1, //CJK UNIFIED IDEOGRAPH - 0xAA63: 0x6CCC, //CJK UNIFIED IDEOGRAPH - 0xAA64: 0x6CE5, //CJK UNIFIED IDEOGRAPH - 0xAA65: 0x6CB3, //CJK UNIFIED IDEOGRAPH - 0xAA66: 0x6CBD, //CJK UNIFIED IDEOGRAPH - 0xAA67: 0x6CBE, //CJK UNIFIED IDEOGRAPH - 0xAA68: 0x6CBC, //CJK UNIFIED IDEOGRAPH - 0xAA69: 0x6CE2, //CJK UNIFIED IDEOGRAPH - 0xAA6A: 0x6CAB, //CJK UNIFIED IDEOGRAPH - 0xAA6B: 0x6CD5, //CJK UNIFIED IDEOGRAPH - 0xAA6C: 0x6CD3, //CJK UNIFIED IDEOGRAPH - 0xAA6D: 0x6CB8, //CJK UNIFIED IDEOGRAPH - 0xAA6E: 0x6CC4, //CJK UNIFIED IDEOGRAPH - 0xAA6F: 0x6CB9, //CJK UNIFIED IDEOGRAPH - 0xAA70: 0x6CC1, //CJK UNIFIED IDEOGRAPH - 0xAA71: 0x6CAE, //CJK UNIFIED IDEOGRAPH - 0xAA72: 0x6CD7, //CJK UNIFIED IDEOGRAPH - 0xAA73: 0x6CC5, //CJK UNIFIED IDEOGRAPH - 0xAA74: 0x6CF1, //CJK UNIFIED IDEOGRAPH - 0xAA75: 0x6CBF, //CJK UNIFIED IDEOGRAPH - 0xAA76: 0x6CBB, //CJK UNIFIED IDEOGRAPH - 0xAA77: 0x6CE1, //CJK UNIFIED IDEOGRAPH - 0xAA78: 0x6CDB, //CJK UNIFIED IDEOGRAPH - 0xAA79: 0x6CCA, //CJK UNIFIED IDEOGRAPH - 0xAA7A: 0x6CAC, //CJK UNIFIED IDEOGRAPH - 0xAA7B: 0x6CEF, //CJK UNIFIED IDEOGRAPH - 0xAA7C: 0x6CDC, //CJK UNIFIED IDEOGRAPH - 0xAA7D: 0x6CD6, //CJK UNIFIED IDEOGRAPH - 0xAA7E: 0x6CE0, //CJK UNIFIED IDEOGRAPH - 0xAAA1: 0x7095, //CJK UNIFIED IDEOGRAPH - 0xAAA2: 0x708E, //CJK UNIFIED IDEOGRAPH - 0xAAA3: 0x7092, //CJK UNIFIED IDEOGRAPH - 0xAAA4: 0x708A, //CJK UNIFIED IDEOGRAPH - 0xAAA5: 0x7099, //CJK UNIFIED IDEOGRAPH - 0xAAA6: 0x722C, //CJK UNIFIED IDEOGRAPH - 0xAAA7: 0x722D, //CJK UNIFIED IDEOGRAPH - 0xAAA8: 0x7238, //CJK UNIFIED IDEOGRAPH - 0xAAA9: 0x7248, //CJK UNIFIED IDEOGRAPH - 0xAAAA: 0x7267, //CJK UNIFIED IDEOGRAPH - 0xAAAB: 0x7269, //CJK UNIFIED IDEOGRAPH - 0xAAAC: 0x72C0, //CJK UNIFIED IDEOGRAPH - 0xAAAD: 0x72CE, //CJK UNIFIED IDEOGRAPH - 0xAAAE: 0x72D9, //CJK UNIFIED IDEOGRAPH - 0xAAAF: 0x72D7, //CJK UNIFIED IDEOGRAPH - 0xAAB0: 0x72D0, //CJK UNIFIED IDEOGRAPH - 0xAAB1: 0x73A9, //CJK UNIFIED IDEOGRAPH - 0xAAB2: 0x73A8, //CJK UNIFIED IDEOGRAPH - 0xAAB3: 0x739F, //CJK UNIFIED IDEOGRAPH - 0xAAB4: 0x73AB, //CJK UNIFIED IDEOGRAPH - 0xAAB5: 0x73A5, //CJK UNIFIED IDEOGRAPH - 0xAAB6: 0x753D, //CJK UNIFIED IDEOGRAPH - 0xAAB7: 0x759D, //CJK UNIFIED IDEOGRAPH - 0xAAB8: 0x7599, //CJK UNIFIED IDEOGRAPH - 0xAAB9: 0x759A, //CJK UNIFIED IDEOGRAPH - 0xAABA: 0x7684, //CJK UNIFIED IDEOGRAPH - 0xAABB: 0x76C2, //CJK UNIFIED IDEOGRAPH - 0xAABC: 0x76F2, //CJK UNIFIED IDEOGRAPH - 0xAABD: 0x76F4, //CJK UNIFIED IDEOGRAPH - 0xAABE: 0x77E5, //CJK UNIFIED IDEOGRAPH - 0xAABF: 0x77FD, //CJK UNIFIED IDEOGRAPH - 0xAAC0: 0x793E, //CJK UNIFIED IDEOGRAPH - 0xAAC1: 0x7940, //CJK UNIFIED IDEOGRAPH - 0xAAC2: 0x7941, //CJK UNIFIED IDEOGRAPH - 0xAAC3: 0x79C9, //CJK UNIFIED IDEOGRAPH - 0xAAC4: 0x79C8, //CJK UNIFIED IDEOGRAPH - 0xAAC5: 0x7A7A, //CJK UNIFIED IDEOGRAPH - 0xAAC6: 0x7A79, //CJK UNIFIED IDEOGRAPH - 0xAAC7: 0x7AFA, //CJK UNIFIED IDEOGRAPH - 0xAAC8: 0x7CFE, //CJK UNIFIED IDEOGRAPH - 0xAAC9: 0x7F54, //CJK UNIFIED IDEOGRAPH - 0xAACA: 0x7F8C, //CJK UNIFIED IDEOGRAPH - 0xAACB: 0x7F8B, //CJK UNIFIED IDEOGRAPH - 0xAACC: 0x8005, //CJK UNIFIED IDEOGRAPH - 0xAACD: 0x80BA, //CJK UNIFIED IDEOGRAPH - 0xAACE: 0x80A5, //CJK UNIFIED IDEOGRAPH - 0xAACF: 0x80A2, //CJK UNIFIED IDEOGRAPH - 0xAAD0: 0x80B1, //CJK UNIFIED IDEOGRAPH - 0xAAD1: 0x80A1, //CJK UNIFIED IDEOGRAPH - 0xAAD2: 0x80AB, //CJK UNIFIED IDEOGRAPH - 0xAAD3: 0x80A9, //CJK UNIFIED IDEOGRAPH - 0xAAD4: 0x80B4, //CJK UNIFIED IDEOGRAPH - 0xAAD5: 0x80AA, //CJK UNIFIED IDEOGRAPH - 0xAAD6: 0x80AF, //CJK UNIFIED IDEOGRAPH - 0xAAD7: 0x81E5, //CJK UNIFIED IDEOGRAPH - 0xAAD8: 0x81FE, //CJK UNIFIED IDEOGRAPH - 0xAAD9: 0x820D, //CJK UNIFIED IDEOGRAPH - 0xAADA: 0x82B3, //CJK UNIFIED IDEOGRAPH - 0xAADB: 0x829D, //CJK UNIFIED IDEOGRAPH - 0xAADC: 0x8299, //CJK UNIFIED IDEOGRAPH - 0xAADD: 0x82AD, //CJK UNIFIED IDEOGRAPH - 0xAADE: 0x82BD, //CJK UNIFIED IDEOGRAPH - 0xAADF: 0x829F, //CJK UNIFIED IDEOGRAPH - 0xAAE0: 0x82B9, //CJK UNIFIED IDEOGRAPH - 0xAAE1: 0x82B1, //CJK UNIFIED IDEOGRAPH - 0xAAE2: 0x82AC, //CJK UNIFIED IDEOGRAPH - 0xAAE3: 0x82A5, //CJK UNIFIED IDEOGRAPH - 0xAAE4: 0x82AF, //CJK UNIFIED IDEOGRAPH - 0xAAE5: 0x82B8, //CJK UNIFIED IDEOGRAPH - 0xAAE6: 0x82A3, //CJK UNIFIED IDEOGRAPH - 0xAAE7: 0x82B0, //CJK UNIFIED IDEOGRAPH - 0xAAE8: 0x82BE, //CJK UNIFIED IDEOGRAPH - 0xAAE9: 0x82B7, //CJK UNIFIED IDEOGRAPH - 0xAAEA: 0x864E, //CJK UNIFIED IDEOGRAPH - 0xAAEB: 0x8671, //CJK UNIFIED IDEOGRAPH - 0xAAEC: 0x521D, //CJK UNIFIED IDEOGRAPH - 0xAAED: 0x8868, //CJK UNIFIED IDEOGRAPH - 0xAAEE: 0x8ECB, //CJK UNIFIED IDEOGRAPH - 0xAAEF: 0x8FCE, //CJK UNIFIED IDEOGRAPH - 0xAAF0: 0x8FD4, //CJK UNIFIED IDEOGRAPH - 0xAAF1: 0x8FD1, //CJK UNIFIED IDEOGRAPH - 0xAAF2: 0x90B5, //CJK UNIFIED IDEOGRAPH - 0xAAF3: 0x90B8, //CJK UNIFIED IDEOGRAPH - 0xAAF4: 0x90B1, //CJK UNIFIED IDEOGRAPH - 0xAAF5: 0x90B6, //CJK UNIFIED IDEOGRAPH - 0xAAF6: 0x91C7, //CJK UNIFIED IDEOGRAPH - 0xAAF7: 0x91D1, //CJK UNIFIED IDEOGRAPH - 0xAAF8: 0x9577, //CJK UNIFIED IDEOGRAPH - 0xAAF9: 0x9580, //CJK UNIFIED IDEOGRAPH - 0xAAFA: 0x961C, //CJK UNIFIED IDEOGRAPH - 0xAAFB: 0x9640, //CJK UNIFIED IDEOGRAPH - 0xAAFC: 0x963F, //CJK UNIFIED IDEOGRAPH - 0xAAFD: 0x963B, //CJK UNIFIED IDEOGRAPH - 0xAAFE: 0x9644, //CJK UNIFIED IDEOGRAPH - 0xAB40: 0x9642, //CJK UNIFIED IDEOGRAPH - 0xAB41: 0x96B9, //CJK UNIFIED IDEOGRAPH - 0xAB42: 0x96E8, //CJK UNIFIED IDEOGRAPH - 0xAB43: 0x9752, //CJK UNIFIED IDEOGRAPH - 0xAB44: 0x975E, //CJK UNIFIED IDEOGRAPH - 0xAB45: 0x4E9F, //CJK UNIFIED IDEOGRAPH - 0xAB46: 0x4EAD, //CJK UNIFIED IDEOGRAPH - 0xAB47: 0x4EAE, //CJK UNIFIED IDEOGRAPH - 0xAB48: 0x4FE1, //CJK UNIFIED IDEOGRAPH - 0xAB49: 0x4FB5, //CJK UNIFIED IDEOGRAPH - 0xAB4A: 0x4FAF, //CJK UNIFIED IDEOGRAPH - 0xAB4B: 0x4FBF, //CJK UNIFIED IDEOGRAPH - 0xAB4C: 0x4FE0, //CJK UNIFIED IDEOGRAPH - 0xAB4D: 0x4FD1, //CJK UNIFIED IDEOGRAPH - 0xAB4E: 0x4FCF, //CJK UNIFIED IDEOGRAPH - 0xAB4F: 0x4FDD, //CJK UNIFIED IDEOGRAPH - 0xAB50: 0x4FC3, //CJK UNIFIED IDEOGRAPH - 0xAB51: 0x4FB6, //CJK UNIFIED IDEOGRAPH - 0xAB52: 0x4FD8, //CJK UNIFIED IDEOGRAPH - 0xAB53: 0x4FDF, //CJK UNIFIED IDEOGRAPH - 0xAB54: 0x4FCA, //CJK UNIFIED IDEOGRAPH - 0xAB55: 0x4FD7, //CJK UNIFIED IDEOGRAPH - 0xAB56: 0x4FAE, //CJK UNIFIED IDEOGRAPH - 0xAB57: 0x4FD0, //CJK UNIFIED IDEOGRAPH - 0xAB58: 0x4FC4, //CJK UNIFIED IDEOGRAPH - 0xAB59: 0x4FC2, //CJK UNIFIED IDEOGRAPH - 0xAB5A: 0x4FDA, //CJK UNIFIED IDEOGRAPH - 0xAB5B: 0x4FCE, //CJK UNIFIED IDEOGRAPH - 0xAB5C: 0x4FDE, //CJK UNIFIED IDEOGRAPH - 0xAB5D: 0x4FB7, //CJK UNIFIED IDEOGRAPH - 0xAB5E: 0x5157, //CJK UNIFIED IDEOGRAPH - 0xAB5F: 0x5192, //CJK UNIFIED IDEOGRAPH - 0xAB60: 0x5191, //CJK UNIFIED IDEOGRAPH - 0xAB61: 0x51A0, //CJK UNIFIED IDEOGRAPH - 0xAB62: 0x524E, //CJK UNIFIED IDEOGRAPH - 0xAB63: 0x5243, //CJK UNIFIED IDEOGRAPH - 0xAB64: 0x524A, //CJK UNIFIED IDEOGRAPH - 0xAB65: 0x524D, //CJK UNIFIED IDEOGRAPH - 0xAB66: 0x524C, //CJK UNIFIED IDEOGRAPH - 0xAB67: 0x524B, //CJK UNIFIED IDEOGRAPH - 0xAB68: 0x5247, //CJK UNIFIED IDEOGRAPH - 0xAB69: 0x52C7, //CJK UNIFIED IDEOGRAPH - 0xAB6A: 0x52C9, //CJK UNIFIED IDEOGRAPH - 0xAB6B: 0x52C3, //CJK UNIFIED IDEOGRAPH - 0xAB6C: 0x52C1, //CJK UNIFIED IDEOGRAPH - 0xAB6D: 0x530D, //CJK UNIFIED IDEOGRAPH - 0xAB6E: 0x5357, //CJK UNIFIED IDEOGRAPH - 0xAB6F: 0x537B, //CJK UNIFIED IDEOGRAPH - 0xAB70: 0x539A, //CJK UNIFIED IDEOGRAPH - 0xAB71: 0x53DB, //CJK UNIFIED IDEOGRAPH - 0xAB72: 0x54AC, //CJK UNIFIED IDEOGRAPH - 0xAB73: 0x54C0, //CJK UNIFIED IDEOGRAPH - 0xAB74: 0x54A8, //CJK UNIFIED IDEOGRAPH - 0xAB75: 0x54CE, //CJK UNIFIED IDEOGRAPH - 0xAB76: 0x54C9, //CJK UNIFIED IDEOGRAPH - 0xAB77: 0x54B8, //CJK UNIFIED IDEOGRAPH - 0xAB78: 0x54A6, //CJK UNIFIED IDEOGRAPH - 0xAB79: 0x54B3, //CJK UNIFIED IDEOGRAPH - 0xAB7A: 0x54C7, //CJK UNIFIED IDEOGRAPH - 0xAB7B: 0x54C2, //CJK UNIFIED IDEOGRAPH - 0xAB7C: 0x54BD, //CJK UNIFIED IDEOGRAPH - 0xAB7D: 0x54AA, //CJK UNIFIED IDEOGRAPH - 0xAB7E: 0x54C1, //CJK UNIFIED IDEOGRAPH - 0xABA1: 0x54C4, //CJK UNIFIED IDEOGRAPH - 0xABA2: 0x54C8, //CJK UNIFIED IDEOGRAPH - 0xABA3: 0x54AF, //CJK UNIFIED IDEOGRAPH - 0xABA4: 0x54AB, //CJK UNIFIED IDEOGRAPH - 0xABA5: 0x54B1, //CJK UNIFIED IDEOGRAPH - 0xABA6: 0x54BB, //CJK UNIFIED IDEOGRAPH - 0xABA7: 0x54A9, //CJK UNIFIED IDEOGRAPH - 0xABA8: 0x54A7, //CJK UNIFIED IDEOGRAPH - 0xABA9: 0x54BF, //CJK UNIFIED IDEOGRAPH - 0xABAA: 0x56FF, //CJK UNIFIED IDEOGRAPH - 0xABAB: 0x5782, //CJK UNIFIED IDEOGRAPH - 0xABAC: 0x578B, //CJK UNIFIED IDEOGRAPH - 0xABAD: 0x57A0, //CJK UNIFIED IDEOGRAPH - 0xABAE: 0x57A3, //CJK UNIFIED IDEOGRAPH - 0xABAF: 0x57A2, //CJK UNIFIED IDEOGRAPH - 0xABB0: 0x57CE, //CJK UNIFIED IDEOGRAPH - 0xABB1: 0x57AE, //CJK UNIFIED IDEOGRAPH - 0xABB2: 0x5793, //CJK UNIFIED IDEOGRAPH - 0xABB3: 0x5955, //CJK UNIFIED IDEOGRAPH - 0xABB4: 0x5951, //CJK UNIFIED IDEOGRAPH - 0xABB5: 0x594F, //CJK UNIFIED IDEOGRAPH - 0xABB6: 0x594E, //CJK UNIFIED IDEOGRAPH - 0xABB7: 0x5950, //CJK UNIFIED IDEOGRAPH - 0xABB8: 0x59DC, //CJK UNIFIED IDEOGRAPH - 0xABB9: 0x59D8, //CJK UNIFIED IDEOGRAPH - 0xABBA: 0x59FF, //CJK UNIFIED IDEOGRAPH - 0xABBB: 0x59E3, //CJK UNIFIED IDEOGRAPH - 0xABBC: 0x59E8, //CJK UNIFIED IDEOGRAPH - 0xABBD: 0x5A03, //CJK UNIFIED IDEOGRAPH - 0xABBE: 0x59E5, //CJK UNIFIED IDEOGRAPH - 0xABBF: 0x59EA, //CJK UNIFIED IDEOGRAPH - 0xABC0: 0x59DA, //CJK UNIFIED IDEOGRAPH - 0xABC1: 0x59E6, //CJK UNIFIED IDEOGRAPH - 0xABC2: 0x5A01, //CJK UNIFIED IDEOGRAPH - 0xABC3: 0x59FB, //CJK UNIFIED IDEOGRAPH - 0xABC4: 0x5B69, //CJK UNIFIED IDEOGRAPH - 0xABC5: 0x5BA3, //CJK UNIFIED IDEOGRAPH - 0xABC6: 0x5BA6, //CJK UNIFIED IDEOGRAPH - 0xABC7: 0x5BA4, //CJK UNIFIED IDEOGRAPH - 0xABC8: 0x5BA2, //CJK UNIFIED IDEOGRAPH - 0xABC9: 0x5BA5, //CJK UNIFIED IDEOGRAPH - 0xABCA: 0x5C01, //CJK UNIFIED IDEOGRAPH - 0xABCB: 0x5C4E, //CJK UNIFIED IDEOGRAPH - 0xABCC: 0x5C4F, //CJK UNIFIED IDEOGRAPH - 0xABCD: 0x5C4D, //CJK UNIFIED IDEOGRAPH - 0xABCE: 0x5C4B, //CJK UNIFIED IDEOGRAPH - 0xABCF: 0x5CD9, //CJK UNIFIED IDEOGRAPH - 0xABD0: 0x5CD2, //CJK UNIFIED IDEOGRAPH - 0xABD1: 0x5DF7, //CJK UNIFIED IDEOGRAPH - 0xABD2: 0x5E1D, //CJK UNIFIED IDEOGRAPH - 0xABD3: 0x5E25, //CJK UNIFIED IDEOGRAPH - 0xABD4: 0x5E1F, //CJK UNIFIED IDEOGRAPH - 0xABD5: 0x5E7D, //CJK UNIFIED IDEOGRAPH - 0xABD6: 0x5EA0, //CJK UNIFIED IDEOGRAPH - 0xABD7: 0x5EA6, //CJK UNIFIED IDEOGRAPH - 0xABD8: 0x5EFA, //CJK UNIFIED IDEOGRAPH - 0xABD9: 0x5F08, //CJK UNIFIED IDEOGRAPH - 0xABDA: 0x5F2D, //CJK UNIFIED IDEOGRAPH - 0xABDB: 0x5F65, //CJK UNIFIED IDEOGRAPH - 0xABDC: 0x5F88, //CJK UNIFIED IDEOGRAPH - 0xABDD: 0x5F85, //CJK UNIFIED IDEOGRAPH - 0xABDE: 0x5F8A, //CJK UNIFIED IDEOGRAPH - 0xABDF: 0x5F8B, //CJK UNIFIED IDEOGRAPH - 0xABE0: 0x5F87, //CJK UNIFIED IDEOGRAPH - 0xABE1: 0x5F8C, //CJK UNIFIED IDEOGRAPH - 0xABE2: 0x5F89, //CJK UNIFIED IDEOGRAPH - 0xABE3: 0x6012, //CJK UNIFIED IDEOGRAPH - 0xABE4: 0x601D, //CJK UNIFIED IDEOGRAPH - 0xABE5: 0x6020, //CJK UNIFIED IDEOGRAPH - 0xABE6: 0x6025, //CJK UNIFIED IDEOGRAPH - 0xABE7: 0x600E, //CJK UNIFIED IDEOGRAPH - 0xABE8: 0x6028, //CJK UNIFIED IDEOGRAPH - 0xABE9: 0x604D, //CJK UNIFIED IDEOGRAPH - 0xABEA: 0x6070, //CJK UNIFIED IDEOGRAPH - 0xABEB: 0x6068, //CJK UNIFIED IDEOGRAPH - 0xABEC: 0x6062, //CJK UNIFIED IDEOGRAPH - 0xABED: 0x6046, //CJK UNIFIED IDEOGRAPH - 0xABEE: 0x6043, //CJK UNIFIED IDEOGRAPH - 0xABEF: 0x606C, //CJK UNIFIED IDEOGRAPH - 0xABF0: 0x606B, //CJK UNIFIED IDEOGRAPH - 0xABF1: 0x606A, //CJK UNIFIED IDEOGRAPH - 0xABF2: 0x6064, //CJK UNIFIED IDEOGRAPH - 0xABF3: 0x6241, //CJK UNIFIED IDEOGRAPH - 0xABF4: 0x62DC, //CJK UNIFIED IDEOGRAPH - 0xABF5: 0x6316, //CJK UNIFIED IDEOGRAPH - 0xABF6: 0x6309, //CJK UNIFIED IDEOGRAPH - 0xABF7: 0x62FC, //CJK UNIFIED IDEOGRAPH - 0xABF8: 0x62ED, //CJK UNIFIED IDEOGRAPH - 0xABF9: 0x6301, //CJK UNIFIED IDEOGRAPH - 0xABFA: 0x62EE, //CJK UNIFIED IDEOGRAPH - 0xABFB: 0x62FD, //CJK UNIFIED IDEOGRAPH - 0xABFC: 0x6307, //CJK UNIFIED IDEOGRAPH - 0xABFD: 0x62F1, //CJK UNIFIED IDEOGRAPH - 0xABFE: 0x62F7, //CJK UNIFIED IDEOGRAPH - 0xAC40: 0x62EF, //CJK UNIFIED IDEOGRAPH - 0xAC41: 0x62EC, //CJK UNIFIED IDEOGRAPH - 0xAC42: 0x62FE, //CJK UNIFIED IDEOGRAPH - 0xAC43: 0x62F4, //CJK UNIFIED IDEOGRAPH - 0xAC44: 0x6311, //CJK UNIFIED IDEOGRAPH - 0xAC45: 0x6302, //CJK UNIFIED IDEOGRAPH - 0xAC46: 0x653F, //CJK UNIFIED IDEOGRAPH - 0xAC47: 0x6545, //CJK UNIFIED IDEOGRAPH - 0xAC48: 0x65AB, //CJK UNIFIED IDEOGRAPH - 0xAC49: 0x65BD, //CJK UNIFIED IDEOGRAPH - 0xAC4A: 0x65E2, //CJK UNIFIED IDEOGRAPH - 0xAC4B: 0x6625, //CJK UNIFIED IDEOGRAPH - 0xAC4C: 0x662D, //CJK UNIFIED IDEOGRAPH - 0xAC4D: 0x6620, //CJK UNIFIED IDEOGRAPH - 0xAC4E: 0x6627, //CJK UNIFIED IDEOGRAPH - 0xAC4F: 0x662F, //CJK UNIFIED IDEOGRAPH - 0xAC50: 0x661F, //CJK UNIFIED IDEOGRAPH - 0xAC51: 0x6628, //CJK UNIFIED IDEOGRAPH - 0xAC52: 0x6631, //CJK UNIFIED IDEOGRAPH - 0xAC53: 0x6624, //CJK UNIFIED IDEOGRAPH - 0xAC54: 0x66F7, //CJK UNIFIED IDEOGRAPH - 0xAC55: 0x67FF, //CJK UNIFIED IDEOGRAPH - 0xAC56: 0x67D3, //CJK UNIFIED IDEOGRAPH - 0xAC57: 0x67F1, //CJK UNIFIED IDEOGRAPH - 0xAC58: 0x67D4, //CJK UNIFIED IDEOGRAPH - 0xAC59: 0x67D0, //CJK UNIFIED IDEOGRAPH - 0xAC5A: 0x67EC, //CJK UNIFIED IDEOGRAPH - 0xAC5B: 0x67B6, //CJK UNIFIED IDEOGRAPH - 0xAC5C: 0x67AF, //CJK UNIFIED IDEOGRAPH - 0xAC5D: 0x67F5, //CJK UNIFIED IDEOGRAPH - 0xAC5E: 0x67E9, //CJK UNIFIED IDEOGRAPH - 0xAC5F: 0x67EF, //CJK UNIFIED IDEOGRAPH - 0xAC60: 0x67C4, //CJK UNIFIED IDEOGRAPH - 0xAC61: 0x67D1, //CJK UNIFIED IDEOGRAPH - 0xAC62: 0x67B4, //CJK UNIFIED IDEOGRAPH - 0xAC63: 0x67DA, //CJK UNIFIED IDEOGRAPH - 0xAC64: 0x67E5, //CJK UNIFIED IDEOGRAPH - 0xAC65: 0x67B8, //CJK UNIFIED IDEOGRAPH - 0xAC66: 0x67CF, //CJK UNIFIED IDEOGRAPH - 0xAC67: 0x67DE, //CJK UNIFIED IDEOGRAPH - 0xAC68: 0x67F3, //CJK UNIFIED IDEOGRAPH - 0xAC69: 0x67B0, //CJK UNIFIED IDEOGRAPH - 0xAC6A: 0x67D9, //CJK UNIFIED IDEOGRAPH - 0xAC6B: 0x67E2, //CJK UNIFIED IDEOGRAPH - 0xAC6C: 0x67DD, //CJK UNIFIED IDEOGRAPH - 0xAC6D: 0x67D2, //CJK UNIFIED IDEOGRAPH - 0xAC6E: 0x6B6A, //CJK UNIFIED IDEOGRAPH - 0xAC6F: 0x6B83, //CJK UNIFIED IDEOGRAPH - 0xAC70: 0x6B86, //CJK UNIFIED IDEOGRAPH - 0xAC71: 0x6BB5, //CJK UNIFIED IDEOGRAPH - 0xAC72: 0x6BD2, //CJK UNIFIED IDEOGRAPH - 0xAC73: 0x6BD7, //CJK UNIFIED IDEOGRAPH - 0xAC74: 0x6C1F, //CJK UNIFIED IDEOGRAPH - 0xAC75: 0x6CC9, //CJK UNIFIED IDEOGRAPH - 0xAC76: 0x6D0B, //CJK UNIFIED IDEOGRAPH - 0xAC77: 0x6D32, //CJK UNIFIED IDEOGRAPH - 0xAC78: 0x6D2A, //CJK UNIFIED IDEOGRAPH - 0xAC79: 0x6D41, //CJK UNIFIED IDEOGRAPH - 0xAC7A: 0x6D25, //CJK UNIFIED IDEOGRAPH - 0xAC7B: 0x6D0C, //CJK UNIFIED IDEOGRAPH - 0xAC7C: 0x6D31, //CJK UNIFIED IDEOGRAPH - 0xAC7D: 0x6D1E, //CJK UNIFIED IDEOGRAPH - 0xAC7E: 0x6D17, //CJK UNIFIED IDEOGRAPH - 0xACA1: 0x6D3B, //CJK UNIFIED IDEOGRAPH - 0xACA2: 0x6D3D, //CJK UNIFIED IDEOGRAPH - 0xACA3: 0x6D3E, //CJK UNIFIED IDEOGRAPH - 0xACA4: 0x6D36, //CJK UNIFIED IDEOGRAPH - 0xACA5: 0x6D1B, //CJK UNIFIED IDEOGRAPH - 0xACA6: 0x6CF5, //CJK UNIFIED IDEOGRAPH - 0xACA7: 0x6D39, //CJK UNIFIED IDEOGRAPH - 0xACA8: 0x6D27, //CJK UNIFIED IDEOGRAPH - 0xACA9: 0x6D38, //CJK UNIFIED IDEOGRAPH - 0xACAA: 0x6D29, //CJK UNIFIED IDEOGRAPH - 0xACAB: 0x6D2E, //CJK UNIFIED IDEOGRAPH - 0xACAC: 0x6D35, //CJK UNIFIED IDEOGRAPH - 0xACAD: 0x6D0E, //CJK UNIFIED IDEOGRAPH - 0xACAE: 0x6D2B, //CJK UNIFIED IDEOGRAPH - 0xACAF: 0x70AB, //CJK UNIFIED IDEOGRAPH - 0xACB0: 0x70BA, //CJK UNIFIED IDEOGRAPH - 0xACB1: 0x70B3, //CJK UNIFIED IDEOGRAPH - 0xACB2: 0x70AC, //CJK UNIFIED IDEOGRAPH - 0xACB3: 0x70AF, //CJK UNIFIED IDEOGRAPH - 0xACB4: 0x70AD, //CJK UNIFIED IDEOGRAPH - 0xACB5: 0x70B8, //CJK UNIFIED IDEOGRAPH - 0xACB6: 0x70AE, //CJK UNIFIED IDEOGRAPH - 0xACB7: 0x70A4, //CJK UNIFIED IDEOGRAPH - 0xACB8: 0x7230, //CJK UNIFIED IDEOGRAPH - 0xACB9: 0x7272, //CJK UNIFIED IDEOGRAPH - 0xACBA: 0x726F, //CJK UNIFIED IDEOGRAPH - 0xACBB: 0x7274, //CJK UNIFIED IDEOGRAPH - 0xACBC: 0x72E9, //CJK UNIFIED IDEOGRAPH - 0xACBD: 0x72E0, //CJK UNIFIED IDEOGRAPH - 0xACBE: 0x72E1, //CJK UNIFIED IDEOGRAPH - 0xACBF: 0x73B7, //CJK UNIFIED IDEOGRAPH - 0xACC0: 0x73CA, //CJK UNIFIED IDEOGRAPH - 0xACC1: 0x73BB, //CJK UNIFIED IDEOGRAPH - 0xACC2: 0x73B2, //CJK UNIFIED IDEOGRAPH - 0xACC3: 0x73CD, //CJK UNIFIED IDEOGRAPH - 0xACC4: 0x73C0, //CJK UNIFIED IDEOGRAPH - 0xACC5: 0x73B3, //CJK UNIFIED IDEOGRAPH - 0xACC6: 0x751A, //CJK UNIFIED IDEOGRAPH - 0xACC7: 0x752D, //CJK UNIFIED IDEOGRAPH - 0xACC8: 0x754F, //CJK UNIFIED IDEOGRAPH - 0xACC9: 0x754C, //CJK UNIFIED IDEOGRAPH - 0xACCA: 0x754E, //CJK UNIFIED IDEOGRAPH - 0xACCB: 0x754B, //CJK UNIFIED IDEOGRAPH - 0xACCC: 0x75AB, //CJK UNIFIED IDEOGRAPH - 0xACCD: 0x75A4, //CJK UNIFIED IDEOGRAPH - 0xACCE: 0x75A5, //CJK UNIFIED IDEOGRAPH - 0xACCF: 0x75A2, //CJK UNIFIED IDEOGRAPH - 0xACD0: 0x75A3, //CJK UNIFIED IDEOGRAPH - 0xACD1: 0x7678, //CJK UNIFIED IDEOGRAPH - 0xACD2: 0x7686, //CJK UNIFIED IDEOGRAPH - 0xACD3: 0x7687, //CJK UNIFIED IDEOGRAPH - 0xACD4: 0x7688, //CJK UNIFIED IDEOGRAPH - 0xACD5: 0x76C8, //CJK UNIFIED IDEOGRAPH - 0xACD6: 0x76C6, //CJK UNIFIED IDEOGRAPH - 0xACD7: 0x76C3, //CJK UNIFIED IDEOGRAPH - 0xACD8: 0x76C5, //CJK UNIFIED IDEOGRAPH - 0xACD9: 0x7701, //CJK UNIFIED IDEOGRAPH - 0xACDA: 0x76F9, //CJK UNIFIED IDEOGRAPH - 0xACDB: 0x76F8, //CJK UNIFIED IDEOGRAPH - 0xACDC: 0x7709, //CJK UNIFIED IDEOGRAPH - 0xACDD: 0x770B, //CJK UNIFIED IDEOGRAPH - 0xACDE: 0x76FE, //CJK UNIFIED IDEOGRAPH - 0xACDF: 0x76FC, //CJK UNIFIED IDEOGRAPH - 0xACE0: 0x7707, //CJK UNIFIED IDEOGRAPH - 0xACE1: 0x77DC, //CJK UNIFIED IDEOGRAPH - 0xACE2: 0x7802, //CJK UNIFIED IDEOGRAPH - 0xACE3: 0x7814, //CJK UNIFIED IDEOGRAPH - 0xACE4: 0x780C, //CJK UNIFIED IDEOGRAPH - 0xACE5: 0x780D, //CJK UNIFIED IDEOGRAPH - 0xACE6: 0x7946, //CJK UNIFIED IDEOGRAPH - 0xACE7: 0x7949, //CJK UNIFIED IDEOGRAPH - 0xACE8: 0x7948, //CJK UNIFIED IDEOGRAPH - 0xACE9: 0x7947, //CJK UNIFIED IDEOGRAPH - 0xACEA: 0x79B9, //CJK UNIFIED IDEOGRAPH - 0xACEB: 0x79BA, //CJK UNIFIED IDEOGRAPH - 0xACEC: 0x79D1, //CJK UNIFIED IDEOGRAPH - 0xACED: 0x79D2, //CJK UNIFIED IDEOGRAPH - 0xACEE: 0x79CB, //CJK UNIFIED IDEOGRAPH - 0xACEF: 0x7A7F, //CJK UNIFIED IDEOGRAPH - 0xACF0: 0x7A81, //CJK UNIFIED IDEOGRAPH - 0xACF1: 0x7AFF, //CJK UNIFIED IDEOGRAPH - 0xACF2: 0x7AFD, //CJK UNIFIED IDEOGRAPH - 0xACF3: 0x7C7D, //CJK UNIFIED IDEOGRAPH - 0xACF4: 0x7D02, //CJK UNIFIED IDEOGRAPH - 0xACF5: 0x7D05, //CJK UNIFIED IDEOGRAPH - 0xACF6: 0x7D00, //CJK UNIFIED IDEOGRAPH - 0xACF7: 0x7D09, //CJK UNIFIED IDEOGRAPH - 0xACF8: 0x7D07, //CJK UNIFIED IDEOGRAPH - 0xACF9: 0x7D04, //CJK UNIFIED IDEOGRAPH - 0xACFA: 0x7D06, //CJK UNIFIED IDEOGRAPH - 0xACFB: 0x7F38, //CJK UNIFIED IDEOGRAPH - 0xACFC: 0x7F8E, //CJK UNIFIED IDEOGRAPH - 0xACFD: 0x7FBF, //CJK UNIFIED IDEOGRAPH - 0xACFE: 0x8004, //CJK UNIFIED IDEOGRAPH - 0xAD40: 0x8010, //CJK UNIFIED IDEOGRAPH - 0xAD41: 0x800D, //CJK UNIFIED IDEOGRAPH - 0xAD42: 0x8011, //CJK UNIFIED IDEOGRAPH - 0xAD43: 0x8036, //CJK UNIFIED IDEOGRAPH - 0xAD44: 0x80D6, //CJK UNIFIED IDEOGRAPH - 0xAD45: 0x80E5, //CJK UNIFIED IDEOGRAPH - 0xAD46: 0x80DA, //CJK UNIFIED IDEOGRAPH - 0xAD47: 0x80C3, //CJK UNIFIED IDEOGRAPH - 0xAD48: 0x80C4, //CJK UNIFIED IDEOGRAPH - 0xAD49: 0x80CC, //CJK UNIFIED IDEOGRAPH - 0xAD4A: 0x80E1, //CJK UNIFIED IDEOGRAPH - 0xAD4B: 0x80DB, //CJK UNIFIED IDEOGRAPH - 0xAD4C: 0x80CE, //CJK UNIFIED IDEOGRAPH - 0xAD4D: 0x80DE, //CJK UNIFIED IDEOGRAPH - 0xAD4E: 0x80E4, //CJK UNIFIED IDEOGRAPH - 0xAD4F: 0x80DD, //CJK UNIFIED IDEOGRAPH - 0xAD50: 0x81F4, //CJK UNIFIED IDEOGRAPH - 0xAD51: 0x8222, //CJK UNIFIED IDEOGRAPH - 0xAD52: 0x82E7, //CJK UNIFIED IDEOGRAPH - 0xAD53: 0x8303, //CJK UNIFIED IDEOGRAPH - 0xAD54: 0x8305, //CJK UNIFIED IDEOGRAPH - 0xAD55: 0x82E3, //CJK UNIFIED IDEOGRAPH - 0xAD56: 0x82DB, //CJK UNIFIED IDEOGRAPH - 0xAD57: 0x82E6, //CJK UNIFIED IDEOGRAPH - 0xAD58: 0x8304, //CJK UNIFIED IDEOGRAPH - 0xAD59: 0x82E5, //CJK UNIFIED IDEOGRAPH - 0xAD5A: 0x8302, //CJK UNIFIED IDEOGRAPH - 0xAD5B: 0x8309, //CJK UNIFIED IDEOGRAPH - 0xAD5C: 0x82D2, //CJK UNIFIED IDEOGRAPH - 0xAD5D: 0x82D7, //CJK UNIFIED IDEOGRAPH - 0xAD5E: 0x82F1, //CJK UNIFIED IDEOGRAPH - 0xAD5F: 0x8301, //CJK UNIFIED IDEOGRAPH - 0xAD60: 0x82DC, //CJK UNIFIED IDEOGRAPH - 0xAD61: 0x82D4, //CJK UNIFIED IDEOGRAPH - 0xAD62: 0x82D1, //CJK UNIFIED IDEOGRAPH - 0xAD63: 0x82DE, //CJK UNIFIED IDEOGRAPH - 0xAD64: 0x82D3, //CJK UNIFIED IDEOGRAPH - 0xAD65: 0x82DF, //CJK UNIFIED IDEOGRAPH - 0xAD66: 0x82EF, //CJK UNIFIED IDEOGRAPH - 0xAD67: 0x8306, //CJK UNIFIED IDEOGRAPH - 0xAD68: 0x8650, //CJK UNIFIED IDEOGRAPH - 0xAD69: 0x8679, //CJK UNIFIED IDEOGRAPH - 0xAD6A: 0x867B, //CJK UNIFIED IDEOGRAPH - 0xAD6B: 0x867A, //CJK UNIFIED IDEOGRAPH - 0xAD6C: 0x884D, //CJK UNIFIED IDEOGRAPH - 0xAD6D: 0x886B, //CJK UNIFIED IDEOGRAPH - 0xAD6E: 0x8981, //CJK UNIFIED IDEOGRAPH - 0xAD6F: 0x89D4, //CJK UNIFIED IDEOGRAPH - 0xAD70: 0x8A08, //CJK UNIFIED IDEOGRAPH - 0xAD71: 0x8A02, //CJK UNIFIED IDEOGRAPH - 0xAD72: 0x8A03, //CJK UNIFIED IDEOGRAPH - 0xAD73: 0x8C9E, //CJK UNIFIED IDEOGRAPH - 0xAD74: 0x8CA0, //CJK UNIFIED IDEOGRAPH - 0xAD75: 0x8D74, //CJK UNIFIED IDEOGRAPH - 0xAD76: 0x8D73, //CJK UNIFIED IDEOGRAPH - 0xAD77: 0x8DB4, //CJK UNIFIED IDEOGRAPH - 0xAD78: 0x8ECD, //CJK UNIFIED IDEOGRAPH - 0xAD79: 0x8ECC, //CJK UNIFIED IDEOGRAPH - 0xAD7A: 0x8FF0, //CJK UNIFIED IDEOGRAPH - 0xAD7B: 0x8FE6, //CJK UNIFIED IDEOGRAPH - 0xAD7C: 0x8FE2, //CJK UNIFIED IDEOGRAPH - 0xAD7D: 0x8FEA, //CJK UNIFIED IDEOGRAPH - 0xAD7E: 0x8FE5, //CJK UNIFIED IDEOGRAPH - 0xADA1: 0x8FED, //CJK UNIFIED IDEOGRAPH - 0xADA2: 0x8FEB, //CJK UNIFIED IDEOGRAPH - 0xADA3: 0x8FE4, //CJK UNIFIED IDEOGRAPH - 0xADA4: 0x8FE8, //CJK UNIFIED IDEOGRAPH - 0xADA5: 0x90CA, //CJK UNIFIED IDEOGRAPH - 0xADA6: 0x90CE, //CJK UNIFIED IDEOGRAPH - 0xADA7: 0x90C1, //CJK UNIFIED IDEOGRAPH - 0xADA8: 0x90C3, //CJK UNIFIED IDEOGRAPH - 0xADA9: 0x914B, //CJK UNIFIED IDEOGRAPH - 0xADAA: 0x914A, //CJK UNIFIED IDEOGRAPH - 0xADAB: 0x91CD, //CJK UNIFIED IDEOGRAPH - 0xADAC: 0x9582, //CJK UNIFIED IDEOGRAPH - 0xADAD: 0x9650, //CJK UNIFIED IDEOGRAPH - 0xADAE: 0x964B, //CJK UNIFIED IDEOGRAPH - 0xADAF: 0x964C, //CJK UNIFIED IDEOGRAPH - 0xADB0: 0x964D, //CJK UNIFIED IDEOGRAPH - 0xADB1: 0x9762, //CJK UNIFIED IDEOGRAPH - 0xADB2: 0x9769, //CJK UNIFIED IDEOGRAPH - 0xADB3: 0x97CB, //CJK UNIFIED IDEOGRAPH - 0xADB4: 0x97ED, //CJK UNIFIED IDEOGRAPH - 0xADB5: 0x97F3, //CJK UNIFIED IDEOGRAPH - 0xADB6: 0x9801, //CJK UNIFIED IDEOGRAPH - 0xADB7: 0x98A8, //CJK UNIFIED IDEOGRAPH - 0xADB8: 0x98DB, //CJK UNIFIED IDEOGRAPH - 0xADB9: 0x98DF, //CJK UNIFIED IDEOGRAPH - 0xADBA: 0x9996, //CJK UNIFIED IDEOGRAPH - 0xADBB: 0x9999, //CJK UNIFIED IDEOGRAPH - 0xADBC: 0x4E58, //CJK UNIFIED IDEOGRAPH - 0xADBD: 0x4EB3, //CJK UNIFIED IDEOGRAPH - 0xADBE: 0x500C, //CJK UNIFIED IDEOGRAPH - 0xADBF: 0x500D, //CJK UNIFIED IDEOGRAPH - 0xADC0: 0x5023, //CJK UNIFIED IDEOGRAPH - 0xADC1: 0x4FEF, //CJK UNIFIED IDEOGRAPH - 0xADC2: 0x5026, //CJK UNIFIED IDEOGRAPH - 0xADC3: 0x5025, //CJK UNIFIED IDEOGRAPH - 0xADC4: 0x4FF8, //CJK UNIFIED IDEOGRAPH - 0xADC5: 0x5029, //CJK UNIFIED IDEOGRAPH - 0xADC6: 0x5016, //CJK UNIFIED IDEOGRAPH - 0xADC7: 0x5006, //CJK UNIFIED IDEOGRAPH - 0xADC8: 0x503C, //CJK UNIFIED IDEOGRAPH - 0xADC9: 0x501F, //CJK UNIFIED IDEOGRAPH - 0xADCA: 0x501A, //CJK UNIFIED IDEOGRAPH - 0xADCB: 0x5012, //CJK UNIFIED IDEOGRAPH - 0xADCC: 0x5011, //CJK UNIFIED IDEOGRAPH - 0xADCD: 0x4FFA, //CJK UNIFIED IDEOGRAPH - 0xADCE: 0x5000, //CJK UNIFIED IDEOGRAPH - 0xADCF: 0x5014, //CJK UNIFIED IDEOGRAPH - 0xADD0: 0x5028, //CJK UNIFIED IDEOGRAPH - 0xADD1: 0x4FF1, //CJK UNIFIED IDEOGRAPH - 0xADD2: 0x5021, //CJK UNIFIED IDEOGRAPH - 0xADD3: 0x500B, //CJK UNIFIED IDEOGRAPH - 0xADD4: 0x5019, //CJK UNIFIED IDEOGRAPH - 0xADD5: 0x5018, //CJK UNIFIED IDEOGRAPH - 0xADD6: 0x4FF3, //CJK UNIFIED IDEOGRAPH - 0xADD7: 0x4FEE, //CJK UNIFIED IDEOGRAPH - 0xADD8: 0x502D, //CJK UNIFIED IDEOGRAPH - 0xADD9: 0x502A, //CJK UNIFIED IDEOGRAPH - 0xADDA: 0x4FFE, //CJK UNIFIED IDEOGRAPH - 0xADDB: 0x502B, //CJK UNIFIED IDEOGRAPH - 0xADDC: 0x5009, //CJK UNIFIED IDEOGRAPH - 0xADDD: 0x517C, //CJK UNIFIED IDEOGRAPH - 0xADDE: 0x51A4, //CJK UNIFIED IDEOGRAPH - 0xADDF: 0x51A5, //CJK UNIFIED IDEOGRAPH - 0xADE0: 0x51A2, //CJK UNIFIED IDEOGRAPH - 0xADE1: 0x51CD, //CJK UNIFIED IDEOGRAPH - 0xADE2: 0x51CC, //CJK UNIFIED IDEOGRAPH - 0xADE3: 0x51C6, //CJK UNIFIED IDEOGRAPH - 0xADE4: 0x51CB, //CJK UNIFIED IDEOGRAPH - 0xADE5: 0x5256, //CJK UNIFIED IDEOGRAPH - 0xADE6: 0x525C, //CJK UNIFIED IDEOGRAPH - 0xADE7: 0x5254, //CJK UNIFIED IDEOGRAPH - 0xADE8: 0x525B, //CJK UNIFIED IDEOGRAPH - 0xADE9: 0x525D, //CJK UNIFIED IDEOGRAPH - 0xADEA: 0x532A, //CJK UNIFIED IDEOGRAPH - 0xADEB: 0x537F, //CJK UNIFIED IDEOGRAPH - 0xADEC: 0x539F, //CJK UNIFIED IDEOGRAPH - 0xADED: 0x539D, //CJK UNIFIED IDEOGRAPH - 0xADEE: 0x53DF, //CJK UNIFIED IDEOGRAPH - 0xADEF: 0x54E8, //CJK UNIFIED IDEOGRAPH - 0xADF0: 0x5510, //CJK UNIFIED IDEOGRAPH - 0xADF1: 0x5501, //CJK UNIFIED IDEOGRAPH - 0xADF2: 0x5537, //CJK UNIFIED IDEOGRAPH - 0xADF3: 0x54FC, //CJK UNIFIED IDEOGRAPH - 0xADF4: 0x54E5, //CJK UNIFIED IDEOGRAPH - 0xADF5: 0x54F2, //CJK UNIFIED IDEOGRAPH - 0xADF6: 0x5506, //CJK UNIFIED IDEOGRAPH - 0xADF7: 0x54FA, //CJK UNIFIED IDEOGRAPH - 0xADF8: 0x5514, //CJK UNIFIED IDEOGRAPH - 0xADF9: 0x54E9, //CJK UNIFIED IDEOGRAPH - 0xADFA: 0x54ED, //CJK UNIFIED IDEOGRAPH - 0xADFB: 0x54E1, //CJK UNIFIED IDEOGRAPH - 0xADFC: 0x5509, //CJK UNIFIED IDEOGRAPH - 0xADFD: 0x54EE, //CJK UNIFIED IDEOGRAPH - 0xADFE: 0x54EA, //CJK UNIFIED IDEOGRAPH - 0xAE40: 0x54E6, //CJK UNIFIED IDEOGRAPH - 0xAE41: 0x5527, //CJK UNIFIED IDEOGRAPH - 0xAE42: 0x5507, //CJK UNIFIED IDEOGRAPH - 0xAE43: 0x54FD, //CJK UNIFIED IDEOGRAPH - 0xAE44: 0x550F, //CJK UNIFIED IDEOGRAPH - 0xAE45: 0x5703, //CJK UNIFIED IDEOGRAPH - 0xAE46: 0x5704, //CJK UNIFIED IDEOGRAPH - 0xAE47: 0x57C2, //CJK UNIFIED IDEOGRAPH - 0xAE48: 0x57D4, //CJK UNIFIED IDEOGRAPH - 0xAE49: 0x57CB, //CJK UNIFIED IDEOGRAPH - 0xAE4A: 0x57C3, //CJK UNIFIED IDEOGRAPH - 0xAE4B: 0x5809, //CJK UNIFIED IDEOGRAPH - 0xAE4C: 0x590F, //CJK UNIFIED IDEOGRAPH - 0xAE4D: 0x5957, //CJK UNIFIED IDEOGRAPH - 0xAE4E: 0x5958, //CJK UNIFIED IDEOGRAPH - 0xAE4F: 0x595A, //CJK UNIFIED IDEOGRAPH - 0xAE50: 0x5A11, //CJK UNIFIED IDEOGRAPH - 0xAE51: 0x5A18, //CJK UNIFIED IDEOGRAPH - 0xAE52: 0x5A1C, //CJK UNIFIED IDEOGRAPH - 0xAE53: 0x5A1F, //CJK UNIFIED IDEOGRAPH - 0xAE54: 0x5A1B, //CJK UNIFIED IDEOGRAPH - 0xAE55: 0x5A13, //CJK UNIFIED IDEOGRAPH - 0xAE56: 0x59EC, //CJK UNIFIED IDEOGRAPH - 0xAE57: 0x5A20, //CJK UNIFIED IDEOGRAPH - 0xAE58: 0x5A23, //CJK UNIFIED IDEOGRAPH - 0xAE59: 0x5A29, //CJK UNIFIED IDEOGRAPH - 0xAE5A: 0x5A25, //CJK UNIFIED IDEOGRAPH - 0xAE5B: 0x5A0C, //CJK UNIFIED IDEOGRAPH - 0xAE5C: 0x5A09, //CJK UNIFIED IDEOGRAPH - 0xAE5D: 0x5B6B, //CJK UNIFIED IDEOGRAPH - 0xAE5E: 0x5C58, //CJK UNIFIED IDEOGRAPH - 0xAE5F: 0x5BB0, //CJK UNIFIED IDEOGRAPH - 0xAE60: 0x5BB3, //CJK UNIFIED IDEOGRAPH - 0xAE61: 0x5BB6, //CJK UNIFIED IDEOGRAPH - 0xAE62: 0x5BB4, //CJK UNIFIED IDEOGRAPH - 0xAE63: 0x5BAE, //CJK UNIFIED IDEOGRAPH - 0xAE64: 0x5BB5, //CJK UNIFIED IDEOGRAPH - 0xAE65: 0x5BB9, //CJK UNIFIED IDEOGRAPH - 0xAE66: 0x5BB8, //CJK UNIFIED IDEOGRAPH - 0xAE67: 0x5C04, //CJK UNIFIED IDEOGRAPH - 0xAE68: 0x5C51, //CJK UNIFIED IDEOGRAPH - 0xAE69: 0x5C55, //CJK UNIFIED IDEOGRAPH - 0xAE6A: 0x5C50, //CJK UNIFIED IDEOGRAPH - 0xAE6B: 0x5CED, //CJK UNIFIED IDEOGRAPH - 0xAE6C: 0x5CFD, //CJK UNIFIED IDEOGRAPH - 0xAE6D: 0x5CFB, //CJK UNIFIED IDEOGRAPH - 0xAE6E: 0x5CEA, //CJK UNIFIED IDEOGRAPH - 0xAE6F: 0x5CE8, //CJK UNIFIED IDEOGRAPH - 0xAE70: 0x5CF0, //CJK UNIFIED IDEOGRAPH - 0xAE71: 0x5CF6, //CJK UNIFIED IDEOGRAPH - 0xAE72: 0x5D01, //CJK UNIFIED IDEOGRAPH - 0xAE73: 0x5CF4, //CJK UNIFIED IDEOGRAPH - 0xAE74: 0x5DEE, //CJK UNIFIED IDEOGRAPH - 0xAE75: 0x5E2D, //CJK UNIFIED IDEOGRAPH - 0xAE76: 0x5E2B, //CJK UNIFIED IDEOGRAPH - 0xAE77: 0x5EAB, //CJK UNIFIED IDEOGRAPH - 0xAE78: 0x5EAD, //CJK UNIFIED IDEOGRAPH - 0xAE79: 0x5EA7, //CJK UNIFIED IDEOGRAPH - 0xAE7A: 0x5F31, //CJK UNIFIED IDEOGRAPH - 0xAE7B: 0x5F92, //CJK UNIFIED IDEOGRAPH - 0xAE7C: 0x5F91, //CJK UNIFIED IDEOGRAPH - 0xAE7D: 0x5F90, //CJK UNIFIED IDEOGRAPH - 0xAE7E: 0x6059, //CJK UNIFIED IDEOGRAPH - 0xAEA1: 0x6063, //CJK UNIFIED IDEOGRAPH - 0xAEA2: 0x6065, //CJK UNIFIED IDEOGRAPH - 0xAEA3: 0x6050, //CJK UNIFIED IDEOGRAPH - 0xAEA4: 0x6055, //CJK UNIFIED IDEOGRAPH - 0xAEA5: 0x606D, //CJK UNIFIED IDEOGRAPH - 0xAEA6: 0x6069, //CJK UNIFIED IDEOGRAPH - 0xAEA7: 0x606F, //CJK UNIFIED IDEOGRAPH - 0xAEA8: 0x6084, //CJK UNIFIED IDEOGRAPH - 0xAEA9: 0x609F, //CJK UNIFIED IDEOGRAPH - 0xAEAA: 0x609A, //CJK UNIFIED IDEOGRAPH - 0xAEAB: 0x608D, //CJK UNIFIED IDEOGRAPH - 0xAEAC: 0x6094, //CJK UNIFIED IDEOGRAPH - 0xAEAD: 0x608C, //CJK UNIFIED IDEOGRAPH - 0xAEAE: 0x6085, //CJK UNIFIED IDEOGRAPH - 0xAEAF: 0x6096, //CJK UNIFIED IDEOGRAPH - 0xAEB0: 0x6247, //CJK UNIFIED IDEOGRAPH - 0xAEB1: 0x62F3, //CJK UNIFIED IDEOGRAPH - 0xAEB2: 0x6308, //CJK UNIFIED IDEOGRAPH - 0xAEB3: 0x62FF, //CJK UNIFIED IDEOGRAPH - 0xAEB4: 0x634E, //CJK UNIFIED IDEOGRAPH - 0xAEB5: 0x633E, //CJK UNIFIED IDEOGRAPH - 0xAEB6: 0x632F, //CJK UNIFIED IDEOGRAPH - 0xAEB7: 0x6355, //CJK UNIFIED IDEOGRAPH - 0xAEB8: 0x6342, //CJK UNIFIED IDEOGRAPH - 0xAEB9: 0x6346, //CJK UNIFIED IDEOGRAPH - 0xAEBA: 0x634F, //CJK UNIFIED IDEOGRAPH - 0xAEBB: 0x6349, //CJK UNIFIED IDEOGRAPH - 0xAEBC: 0x633A, //CJK UNIFIED IDEOGRAPH - 0xAEBD: 0x6350, //CJK UNIFIED IDEOGRAPH - 0xAEBE: 0x633D, //CJK UNIFIED IDEOGRAPH - 0xAEBF: 0x632A, //CJK UNIFIED IDEOGRAPH - 0xAEC0: 0x632B, //CJK UNIFIED IDEOGRAPH - 0xAEC1: 0x6328, //CJK UNIFIED IDEOGRAPH - 0xAEC2: 0x634D, //CJK UNIFIED IDEOGRAPH - 0xAEC3: 0x634C, //CJK UNIFIED IDEOGRAPH - 0xAEC4: 0x6548, //CJK UNIFIED IDEOGRAPH - 0xAEC5: 0x6549, //CJK UNIFIED IDEOGRAPH - 0xAEC6: 0x6599, //CJK UNIFIED IDEOGRAPH - 0xAEC7: 0x65C1, //CJK UNIFIED IDEOGRAPH - 0xAEC8: 0x65C5, //CJK UNIFIED IDEOGRAPH - 0xAEC9: 0x6642, //CJK UNIFIED IDEOGRAPH - 0xAECA: 0x6649, //CJK UNIFIED IDEOGRAPH - 0xAECB: 0x664F, //CJK UNIFIED IDEOGRAPH - 0xAECC: 0x6643, //CJK UNIFIED IDEOGRAPH - 0xAECD: 0x6652, //CJK UNIFIED IDEOGRAPH - 0xAECE: 0x664C, //CJK UNIFIED IDEOGRAPH - 0xAECF: 0x6645, //CJK UNIFIED IDEOGRAPH - 0xAED0: 0x6641, //CJK UNIFIED IDEOGRAPH - 0xAED1: 0x66F8, //CJK UNIFIED IDEOGRAPH - 0xAED2: 0x6714, //CJK UNIFIED IDEOGRAPH - 0xAED3: 0x6715, //CJK UNIFIED IDEOGRAPH - 0xAED4: 0x6717, //CJK UNIFIED IDEOGRAPH - 0xAED5: 0x6821, //CJK UNIFIED IDEOGRAPH - 0xAED6: 0x6838, //CJK UNIFIED IDEOGRAPH - 0xAED7: 0x6848, //CJK UNIFIED IDEOGRAPH - 0xAED8: 0x6846, //CJK UNIFIED IDEOGRAPH - 0xAED9: 0x6853, //CJK UNIFIED IDEOGRAPH - 0xAEDA: 0x6839, //CJK UNIFIED IDEOGRAPH - 0xAEDB: 0x6842, //CJK UNIFIED IDEOGRAPH - 0xAEDC: 0x6854, //CJK UNIFIED IDEOGRAPH - 0xAEDD: 0x6829, //CJK UNIFIED IDEOGRAPH - 0xAEDE: 0x68B3, //CJK UNIFIED IDEOGRAPH - 0xAEDF: 0x6817, //CJK UNIFIED IDEOGRAPH - 0xAEE0: 0x684C, //CJK UNIFIED IDEOGRAPH - 0xAEE1: 0x6851, //CJK UNIFIED IDEOGRAPH - 0xAEE2: 0x683D, //CJK UNIFIED IDEOGRAPH - 0xAEE3: 0x67F4, //CJK UNIFIED IDEOGRAPH - 0xAEE4: 0x6850, //CJK UNIFIED IDEOGRAPH - 0xAEE5: 0x6840, //CJK UNIFIED IDEOGRAPH - 0xAEE6: 0x683C, //CJK UNIFIED IDEOGRAPH - 0xAEE7: 0x6843, //CJK UNIFIED IDEOGRAPH - 0xAEE8: 0x682A, //CJK UNIFIED IDEOGRAPH - 0xAEE9: 0x6845, //CJK UNIFIED IDEOGRAPH - 0xAEEA: 0x6813, //CJK UNIFIED IDEOGRAPH - 0xAEEB: 0x6818, //CJK UNIFIED IDEOGRAPH - 0xAEEC: 0x6841, //CJK UNIFIED IDEOGRAPH - 0xAEED: 0x6B8A, //CJK UNIFIED IDEOGRAPH - 0xAEEE: 0x6B89, //CJK UNIFIED IDEOGRAPH - 0xAEEF: 0x6BB7, //CJK UNIFIED IDEOGRAPH - 0xAEF0: 0x6C23, //CJK UNIFIED IDEOGRAPH - 0xAEF1: 0x6C27, //CJK UNIFIED IDEOGRAPH - 0xAEF2: 0x6C28, //CJK UNIFIED IDEOGRAPH - 0xAEF3: 0x6C26, //CJK UNIFIED IDEOGRAPH - 0xAEF4: 0x6C24, //CJK UNIFIED IDEOGRAPH - 0xAEF5: 0x6CF0, //CJK UNIFIED IDEOGRAPH - 0xAEF6: 0x6D6A, //CJK UNIFIED IDEOGRAPH - 0xAEF7: 0x6D95, //CJK UNIFIED IDEOGRAPH - 0xAEF8: 0x6D88, //CJK UNIFIED IDEOGRAPH - 0xAEF9: 0x6D87, //CJK UNIFIED IDEOGRAPH - 0xAEFA: 0x6D66, //CJK UNIFIED IDEOGRAPH - 0xAEFB: 0x6D78, //CJK UNIFIED IDEOGRAPH - 0xAEFC: 0x6D77, //CJK UNIFIED IDEOGRAPH - 0xAEFD: 0x6D59, //CJK UNIFIED IDEOGRAPH - 0xAEFE: 0x6D93, //CJK UNIFIED IDEOGRAPH - 0xAF40: 0x6D6C, //CJK UNIFIED IDEOGRAPH - 0xAF41: 0x6D89, //CJK UNIFIED IDEOGRAPH - 0xAF42: 0x6D6E, //CJK UNIFIED IDEOGRAPH - 0xAF43: 0x6D5A, //CJK UNIFIED IDEOGRAPH - 0xAF44: 0x6D74, //CJK UNIFIED IDEOGRAPH - 0xAF45: 0x6D69, //CJK UNIFIED IDEOGRAPH - 0xAF46: 0x6D8C, //CJK UNIFIED IDEOGRAPH - 0xAF47: 0x6D8A, //CJK UNIFIED IDEOGRAPH - 0xAF48: 0x6D79, //CJK UNIFIED IDEOGRAPH - 0xAF49: 0x6D85, //CJK UNIFIED IDEOGRAPH - 0xAF4A: 0x6D65, //CJK UNIFIED IDEOGRAPH - 0xAF4B: 0x6D94, //CJK UNIFIED IDEOGRAPH - 0xAF4C: 0x70CA, //CJK UNIFIED IDEOGRAPH - 0xAF4D: 0x70D8, //CJK UNIFIED IDEOGRAPH - 0xAF4E: 0x70E4, //CJK UNIFIED IDEOGRAPH - 0xAF4F: 0x70D9, //CJK UNIFIED IDEOGRAPH - 0xAF50: 0x70C8, //CJK UNIFIED IDEOGRAPH - 0xAF51: 0x70CF, //CJK UNIFIED IDEOGRAPH - 0xAF52: 0x7239, //CJK UNIFIED IDEOGRAPH - 0xAF53: 0x7279, //CJK UNIFIED IDEOGRAPH - 0xAF54: 0x72FC, //CJK UNIFIED IDEOGRAPH - 0xAF55: 0x72F9, //CJK UNIFIED IDEOGRAPH - 0xAF56: 0x72FD, //CJK UNIFIED IDEOGRAPH - 0xAF57: 0x72F8, //CJK UNIFIED IDEOGRAPH - 0xAF58: 0x72F7, //CJK UNIFIED IDEOGRAPH - 0xAF59: 0x7386, //CJK UNIFIED IDEOGRAPH - 0xAF5A: 0x73ED, //CJK UNIFIED IDEOGRAPH - 0xAF5B: 0x7409, //CJK UNIFIED IDEOGRAPH - 0xAF5C: 0x73EE, //CJK UNIFIED IDEOGRAPH - 0xAF5D: 0x73E0, //CJK UNIFIED IDEOGRAPH - 0xAF5E: 0x73EA, //CJK UNIFIED IDEOGRAPH - 0xAF5F: 0x73DE, //CJK UNIFIED IDEOGRAPH - 0xAF60: 0x7554, //CJK UNIFIED IDEOGRAPH - 0xAF61: 0x755D, //CJK UNIFIED IDEOGRAPH - 0xAF62: 0x755C, //CJK UNIFIED IDEOGRAPH - 0xAF63: 0x755A, //CJK UNIFIED IDEOGRAPH - 0xAF64: 0x7559, //CJK UNIFIED IDEOGRAPH - 0xAF65: 0x75BE, //CJK UNIFIED IDEOGRAPH - 0xAF66: 0x75C5, //CJK UNIFIED IDEOGRAPH - 0xAF67: 0x75C7, //CJK UNIFIED IDEOGRAPH - 0xAF68: 0x75B2, //CJK UNIFIED IDEOGRAPH - 0xAF69: 0x75B3, //CJK UNIFIED IDEOGRAPH - 0xAF6A: 0x75BD, //CJK UNIFIED IDEOGRAPH - 0xAF6B: 0x75BC, //CJK UNIFIED IDEOGRAPH - 0xAF6C: 0x75B9, //CJK UNIFIED IDEOGRAPH - 0xAF6D: 0x75C2, //CJK UNIFIED IDEOGRAPH - 0xAF6E: 0x75B8, //CJK UNIFIED IDEOGRAPH - 0xAF6F: 0x768B, //CJK UNIFIED IDEOGRAPH - 0xAF70: 0x76B0, //CJK UNIFIED IDEOGRAPH - 0xAF71: 0x76CA, //CJK UNIFIED IDEOGRAPH - 0xAF72: 0x76CD, //CJK UNIFIED IDEOGRAPH - 0xAF73: 0x76CE, //CJK UNIFIED IDEOGRAPH - 0xAF74: 0x7729, //CJK UNIFIED IDEOGRAPH - 0xAF75: 0x771F, //CJK UNIFIED IDEOGRAPH - 0xAF76: 0x7720, //CJK UNIFIED IDEOGRAPH - 0xAF77: 0x7728, //CJK UNIFIED IDEOGRAPH - 0xAF78: 0x77E9, //CJK UNIFIED IDEOGRAPH - 0xAF79: 0x7830, //CJK UNIFIED IDEOGRAPH - 0xAF7A: 0x7827, //CJK UNIFIED IDEOGRAPH - 0xAF7B: 0x7838, //CJK UNIFIED IDEOGRAPH - 0xAF7C: 0x781D, //CJK UNIFIED IDEOGRAPH - 0xAF7D: 0x7834, //CJK UNIFIED IDEOGRAPH - 0xAF7E: 0x7837, //CJK UNIFIED IDEOGRAPH - 0xAFA1: 0x7825, //CJK UNIFIED IDEOGRAPH - 0xAFA2: 0x782D, //CJK UNIFIED IDEOGRAPH - 0xAFA3: 0x7820, //CJK UNIFIED IDEOGRAPH - 0xAFA4: 0x781F, //CJK UNIFIED IDEOGRAPH - 0xAFA5: 0x7832, //CJK UNIFIED IDEOGRAPH - 0xAFA6: 0x7955, //CJK UNIFIED IDEOGRAPH - 0xAFA7: 0x7950, //CJK UNIFIED IDEOGRAPH - 0xAFA8: 0x7960, //CJK UNIFIED IDEOGRAPH - 0xAFA9: 0x795F, //CJK UNIFIED IDEOGRAPH - 0xAFAA: 0x7956, //CJK UNIFIED IDEOGRAPH - 0xAFAB: 0x795E, //CJK UNIFIED IDEOGRAPH - 0xAFAC: 0x795D, //CJK UNIFIED IDEOGRAPH - 0xAFAD: 0x7957, //CJK UNIFIED IDEOGRAPH - 0xAFAE: 0x795A, //CJK UNIFIED IDEOGRAPH - 0xAFAF: 0x79E4, //CJK UNIFIED IDEOGRAPH - 0xAFB0: 0x79E3, //CJK UNIFIED IDEOGRAPH - 0xAFB1: 0x79E7, //CJK UNIFIED IDEOGRAPH - 0xAFB2: 0x79DF, //CJK UNIFIED IDEOGRAPH - 0xAFB3: 0x79E6, //CJK UNIFIED IDEOGRAPH - 0xAFB4: 0x79E9, //CJK UNIFIED IDEOGRAPH - 0xAFB5: 0x79D8, //CJK UNIFIED IDEOGRAPH - 0xAFB6: 0x7A84, //CJK UNIFIED IDEOGRAPH - 0xAFB7: 0x7A88, //CJK UNIFIED IDEOGRAPH - 0xAFB8: 0x7AD9, //CJK UNIFIED IDEOGRAPH - 0xAFB9: 0x7B06, //CJK UNIFIED IDEOGRAPH - 0xAFBA: 0x7B11, //CJK UNIFIED IDEOGRAPH - 0xAFBB: 0x7C89, //CJK UNIFIED IDEOGRAPH - 0xAFBC: 0x7D21, //CJK UNIFIED IDEOGRAPH - 0xAFBD: 0x7D17, //CJK UNIFIED IDEOGRAPH - 0xAFBE: 0x7D0B, //CJK UNIFIED IDEOGRAPH - 0xAFBF: 0x7D0A, //CJK UNIFIED IDEOGRAPH - 0xAFC0: 0x7D20, //CJK UNIFIED IDEOGRAPH - 0xAFC1: 0x7D22, //CJK UNIFIED IDEOGRAPH - 0xAFC2: 0x7D14, //CJK UNIFIED IDEOGRAPH - 0xAFC3: 0x7D10, //CJK UNIFIED IDEOGRAPH - 0xAFC4: 0x7D15, //CJK UNIFIED IDEOGRAPH - 0xAFC5: 0x7D1A, //CJK UNIFIED IDEOGRAPH - 0xAFC6: 0x7D1C, //CJK UNIFIED IDEOGRAPH - 0xAFC7: 0x7D0D, //CJK UNIFIED IDEOGRAPH - 0xAFC8: 0x7D19, //CJK UNIFIED IDEOGRAPH - 0xAFC9: 0x7D1B, //CJK UNIFIED IDEOGRAPH - 0xAFCA: 0x7F3A, //CJK UNIFIED IDEOGRAPH - 0xAFCB: 0x7F5F, //CJK UNIFIED IDEOGRAPH - 0xAFCC: 0x7F94, //CJK UNIFIED IDEOGRAPH - 0xAFCD: 0x7FC5, //CJK UNIFIED IDEOGRAPH - 0xAFCE: 0x7FC1, //CJK UNIFIED IDEOGRAPH - 0xAFCF: 0x8006, //CJK UNIFIED IDEOGRAPH - 0xAFD0: 0x8018, //CJK UNIFIED IDEOGRAPH - 0xAFD1: 0x8015, //CJK UNIFIED IDEOGRAPH - 0xAFD2: 0x8019, //CJK UNIFIED IDEOGRAPH - 0xAFD3: 0x8017, //CJK UNIFIED IDEOGRAPH - 0xAFD4: 0x803D, //CJK UNIFIED IDEOGRAPH - 0xAFD5: 0x803F, //CJK UNIFIED IDEOGRAPH - 0xAFD6: 0x80F1, //CJK UNIFIED IDEOGRAPH - 0xAFD7: 0x8102, //CJK UNIFIED IDEOGRAPH - 0xAFD8: 0x80F0, //CJK UNIFIED IDEOGRAPH - 0xAFD9: 0x8105, //CJK UNIFIED IDEOGRAPH - 0xAFDA: 0x80ED, //CJK UNIFIED IDEOGRAPH - 0xAFDB: 0x80F4, //CJK UNIFIED IDEOGRAPH - 0xAFDC: 0x8106, //CJK UNIFIED IDEOGRAPH - 0xAFDD: 0x80F8, //CJK UNIFIED IDEOGRAPH - 0xAFDE: 0x80F3, //CJK UNIFIED IDEOGRAPH - 0xAFDF: 0x8108, //CJK UNIFIED IDEOGRAPH - 0xAFE0: 0x80FD, //CJK UNIFIED IDEOGRAPH - 0xAFE1: 0x810A, //CJK UNIFIED IDEOGRAPH - 0xAFE2: 0x80FC, //CJK UNIFIED IDEOGRAPH - 0xAFE3: 0x80EF, //CJK UNIFIED IDEOGRAPH - 0xAFE4: 0x81ED, //CJK UNIFIED IDEOGRAPH - 0xAFE5: 0x81EC, //CJK UNIFIED IDEOGRAPH - 0xAFE6: 0x8200, //CJK UNIFIED IDEOGRAPH - 0xAFE7: 0x8210, //CJK UNIFIED IDEOGRAPH - 0xAFE8: 0x822A, //CJK UNIFIED IDEOGRAPH - 0xAFE9: 0x822B, //CJK UNIFIED IDEOGRAPH - 0xAFEA: 0x8228, //CJK UNIFIED IDEOGRAPH - 0xAFEB: 0x822C, //CJK UNIFIED IDEOGRAPH - 0xAFEC: 0x82BB, //CJK UNIFIED IDEOGRAPH - 0xAFED: 0x832B, //CJK UNIFIED IDEOGRAPH - 0xAFEE: 0x8352, //CJK UNIFIED IDEOGRAPH - 0xAFEF: 0x8354, //CJK UNIFIED IDEOGRAPH - 0xAFF0: 0x834A, //CJK UNIFIED IDEOGRAPH - 0xAFF1: 0x8338, //CJK UNIFIED IDEOGRAPH - 0xAFF2: 0x8350, //CJK UNIFIED IDEOGRAPH - 0xAFF3: 0x8349, //CJK UNIFIED IDEOGRAPH - 0xAFF4: 0x8335, //CJK UNIFIED IDEOGRAPH - 0xAFF5: 0x8334, //CJK UNIFIED IDEOGRAPH - 0xAFF6: 0x834F, //CJK UNIFIED IDEOGRAPH - 0xAFF7: 0x8332, //CJK UNIFIED IDEOGRAPH - 0xAFF8: 0x8339, //CJK UNIFIED IDEOGRAPH - 0xAFF9: 0x8336, //CJK UNIFIED IDEOGRAPH - 0xAFFA: 0x8317, //CJK UNIFIED IDEOGRAPH - 0xAFFB: 0x8340, //CJK UNIFIED IDEOGRAPH - 0xAFFC: 0x8331, //CJK UNIFIED IDEOGRAPH - 0xAFFD: 0x8328, //CJK UNIFIED IDEOGRAPH - 0xAFFE: 0x8343, //CJK UNIFIED IDEOGRAPH - 0xB040: 0x8654, //CJK UNIFIED IDEOGRAPH - 0xB041: 0x868A, //CJK UNIFIED IDEOGRAPH - 0xB042: 0x86AA, //CJK UNIFIED IDEOGRAPH - 0xB043: 0x8693, //CJK UNIFIED IDEOGRAPH - 0xB044: 0x86A4, //CJK UNIFIED IDEOGRAPH - 0xB045: 0x86A9, //CJK UNIFIED IDEOGRAPH - 0xB046: 0x868C, //CJK UNIFIED IDEOGRAPH - 0xB047: 0x86A3, //CJK UNIFIED IDEOGRAPH - 0xB048: 0x869C, //CJK UNIFIED IDEOGRAPH - 0xB049: 0x8870, //CJK UNIFIED IDEOGRAPH - 0xB04A: 0x8877, //CJK UNIFIED IDEOGRAPH - 0xB04B: 0x8881, //CJK UNIFIED IDEOGRAPH - 0xB04C: 0x8882, //CJK UNIFIED IDEOGRAPH - 0xB04D: 0x887D, //CJK UNIFIED IDEOGRAPH - 0xB04E: 0x8879, //CJK UNIFIED IDEOGRAPH - 0xB04F: 0x8A18, //CJK UNIFIED IDEOGRAPH - 0xB050: 0x8A10, //CJK UNIFIED IDEOGRAPH - 0xB051: 0x8A0E, //CJK UNIFIED IDEOGRAPH - 0xB052: 0x8A0C, //CJK UNIFIED IDEOGRAPH - 0xB053: 0x8A15, //CJK UNIFIED IDEOGRAPH - 0xB054: 0x8A0A, //CJK UNIFIED IDEOGRAPH - 0xB055: 0x8A17, //CJK UNIFIED IDEOGRAPH - 0xB056: 0x8A13, //CJK UNIFIED IDEOGRAPH - 0xB057: 0x8A16, //CJK UNIFIED IDEOGRAPH - 0xB058: 0x8A0F, //CJK UNIFIED IDEOGRAPH - 0xB059: 0x8A11, //CJK UNIFIED IDEOGRAPH - 0xB05A: 0x8C48, //CJK UNIFIED IDEOGRAPH - 0xB05B: 0x8C7A, //CJK UNIFIED IDEOGRAPH - 0xB05C: 0x8C79, //CJK UNIFIED IDEOGRAPH - 0xB05D: 0x8CA1, //CJK UNIFIED IDEOGRAPH - 0xB05E: 0x8CA2, //CJK UNIFIED IDEOGRAPH - 0xB05F: 0x8D77, //CJK UNIFIED IDEOGRAPH - 0xB060: 0x8EAC, //CJK UNIFIED IDEOGRAPH - 0xB061: 0x8ED2, //CJK UNIFIED IDEOGRAPH - 0xB062: 0x8ED4, //CJK UNIFIED IDEOGRAPH - 0xB063: 0x8ECF, //CJK UNIFIED IDEOGRAPH - 0xB064: 0x8FB1, //CJK UNIFIED IDEOGRAPH - 0xB065: 0x9001, //CJK UNIFIED IDEOGRAPH - 0xB066: 0x9006, //CJK UNIFIED IDEOGRAPH - 0xB067: 0x8FF7, //CJK UNIFIED IDEOGRAPH - 0xB068: 0x9000, //CJK UNIFIED IDEOGRAPH - 0xB069: 0x8FFA, //CJK UNIFIED IDEOGRAPH - 0xB06A: 0x8FF4, //CJK UNIFIED IDEOGRAPH - 0xB06B: 0x9003, //CJK UNIFIED IDEOGRAPH - 0xB06C: 0x8FFD, //CJK UNIFIED IDEOGRAPH - 0xB06D: 0x9005, //CJK UNIFIED IDEOGRAPH - 0xB06E: 0x8FF8, //CJK UNIFIED IDEOGRAPH - 0xB06F: 0x9095, //CJK UNIFIED IDEOGRAPH - 0xB070: 0x90E1, //CJK UNIFIED IDEOGRAPH - 0xB071: 0x90DD, //CJK UNIFIED IDEOGRAPH - 0xB072: 0x90E2, //CJK UNIFIED IDEOGRAPH - 0xB073: 0x9152, //CJK UNIFIED IDEOGRAPH - 0xB074: 0x914D, //CJK UNIFIED IDEOGRAPH - 0xB075: 0x914C, //CJK UNIFIED IDEOGRAPH - 0xB076: 0x91D8, //CJK UNIFIED IDEOGRAPH - 0xB077: 0x91DD, //CJK UNIFIED IDEOGRAPH - 0xB078: 0x91D7, //CJK UNIFIED IDEOGRAPH - 0xB079: 0x91DC, //CJK UNIFIED IDEOGRAPH - 0xB07A: 0x91D9, //CJK UNIFIED IDEOGRAPH - 0xB07B: 0x9583, //CJK UNIFIED IDEOGRAPH - 0xB07C: 0x9662, //CJK UNIFIED IDEOGRAPH - 0xB07D: 0x9663, //CJK UNIFIED IDEOGRAPH - 0xB07E: 0x9661, //CJK UNIFIED IDEOGRAPH - 0xB0A1: 0x965B, //CJK UNIFIED IDEOGRAPH - 0xB0A2: 0x965D, //CJK UNIFIED IDEOGRAPH - 0xB0A3: 0x9664, //CJK UNIFIED IDEOGRAPH - 0xB0A4: 0x9658, //CJK UNIFIED IDEOGRAPH - 0xB0A5: 0x965E, //CJK UNIFIED IDEOGRAPH - 0xB0A6: 0x96BB, //CJK UNIFIED IDEOGRAPH - 0xB0A7: 0x98E2, //CJK UNIFIED IDEOGRAPH - 0xB0A8: 0x99AC, //CJK UNIFIED IDEOGRAPH - 0xB0A9: 0x9AA8, //CJK UNIFIED IDEOGRAPH - 0xB0AA: 0x9AD8, //CJK UNIFIED IDEOGRAPH - 0xB0AB: 0x9B25, //CJK UNIFIED IDEOGRAPH - 0xB0AC: 0x9B32, //CJK UNIFIED IDEOGRAPH - 0xB0AD: 0x9B3C, //CJK UNIFIED IDEOGRAPH - 0xB0AE: 0x4E7E, //CJK UNIFIED IDEOGRAPH - 0xB0AF: 0x507A, //CJK UNIFIED IDEOGRAPH - 0xB0B0: 0x507D, //CJK UNIFIED IDEOGRAPH - 0xB0B1: 0x505C, //CJK UNIFIED IDEOGRAPH - 0xB0B2: 0x5047, //CJK UNIFIED IDEOGRAPH - 0xB0B3: 0x5043, //CJK UNIFIED IDEOGRAPH - 0xB0B4: 0x504C, //CJK UNIFIED IDEOGRAPH - 0xB0B5: 0x505A, //CJK UNIFIED IDEOGRAPH - 0xB0B6: 0x5049, //CJK UNIFIED IDEOGRAPH - 0xB0B7: 0x5065, //CJK UNIFIED IDEOGRAPH - 0xB0B8: 0x5076, //CJK UNIFIED IDEOGRAPH - 0xB0B9: 0x504E, //CJK UNIFIED IDEOGRAPH - 0xB0BA: 0x5055, //CJK UNIFIED IDEOGRAPH - 0xB0BB: 0x5075, //CJK UNIFIED IDEOGRAPH - 0xB0BC: 0x5074, //CJK UNIFIED IDEOGRAPH - 0xB0BD: 0x5077, //CJK UNIFIED IDEOGRAPH - 0xB0BE: 0x504F, //CJK UNIFIED IDEOGRAPH - 0xB0BF: 0x500F, //CJK UNIFIED IDEOGRAPH - 0xB0C0: 0x506F, //CJK UNIFIED IDEOGRAPH - 0xB0C1: 0x506D, //CJK UNIFIED IDEOGRAPH - 0xB0C2: 0x515C, //CJK UNIFIED IDEOGRAPH - 0xB0C3: 0x5195, //CJK UNIFIED IDEOGRAPH - 0xB0C4: 0x51F0, //CJK UNIFIED IDEOGRAPH - 0xB0C5: 0x526A, //CJK UNIFIED IDEOGRAPH - 0xB0C6: 0x526F, //CJK UNIFIED IDEOGRAPH - 0xB0C7: 0x52D2, //CJK UNIFIED IDEOGRAPH - 0xB0C8: 0x52D9, //CJK UNIFIED IDEOGRAPH - 0xB0C9: 0x52D8, //CJK UNIFIED IDEOGRAPH - 0xB0CA: 0x52D5, //CJK UNIFIED IDEOGRAPH - 0xB0CB: 0x5310, //CJK UNIFIED IDEOGRAPH - 0xB0CC: 0x530F, //CJK UNIFIED IDEOGRAPH - 0xB0CD: 0x5319, //CJK UNIFIED IDEOGRAPH - 0xB0CE: 0x533F, //CJK UNIFIED IDEOGRAPH - 0xB0CF: 0x5340, //CJK UNIFIED IDEOGRAPH - 0xB0D0: 0x533E, //CJK UNIFIED IDEOGRAPH - 0xB0D1: 0x53C3, //CJK UNIFIED IDEOGRAPH - 0xB0D2: 0x66FC, //CJK UNIFIED IDEOGRAPH - 0xB0D3: 0x5546, //CJK UNIFIED IDEOGRAPH - 0xB0D4: 0x556A, //CJK UNIFIED IDEOGRAPH - 0xB0D5: 0x5566, //CJK UNIFIED IDEOGRAPH - 0xB0D6: 0x5544, //CJK UNIFIED IDEOGRAPH - 0xB0D7: 0x555E, //CJK UNIFIED IDEOGRAPH - 0xB0D8: 0x5561, //CJK UNIFIED IDEOGRAPH - 0xB0D9: 0x5543, //CJK UNIFIED IDEOGRAPH - 0xB0DA: 0x554A, //CJK UNIFIED IDEOGRAPH - 0xB0DB: 0x5531, //CJK UNIFIED IDEOGRAPH - 0xB0DC: 0x5556, //CJK UNIFIED IDEOGRAPH - 0xB0DD: 0x554F, //CJK UNIFIED IDEOGRAPH - 0xB0DE: 0x5555, //CJK UNIFIED IDEOGRAPH - 0xB0DF: 0x552F, //CJK UNIFIED IDEOGRAPH - 0xB0E0: 0x5564, //CJK UNIFIED IDEOGRAPH - 0xB0E1: 0x5538, //CJK UNIFIED IDEOGRAPH - 0xB0E2: 0x552E, //CJK UNIFIED IDEOGRAPH - 0xB0E3: 0x555C, //CJK UNIFIED IDEOGRAPH - 0xB0E4: 0x552C, //CJK UNIFIED IDEOGRAPH - 0xB0E5: 0x5563, //CJK UNIFIED IDEOGRAPH - 0xB0E6: 0x5533, //CJK UNIFIED IDEOGRAPH - 0xB0E7: 0x5541, //CJK UNIFIED IDEOGRAPH - 0xB0E8: 0x5557, //CJK UNIFIED IDEOGRAPH - 0xB0E9: 0x5708, //CJK UNIFIED IDEOGRAPH - 0xB0EA: 0x570B, //CJK UNIFIED IDEOGRAPH - 0xB0EB: 0x5709, //CJK UNIFIED IDEOGRAPH - 0xB0EC: 0x57DF, //CJK UNIFIED IDEOGRAPH - 0xB0ED: 0x5805, //CJK UNIFIED IDEOGRAPH - 0xB0EE: 0x580A, //CJK UNIFIED IDEOGRAPH - 0xB0EF: 0x5806, //CJK UNIFIED IDEOGRAPH - 0xB0F0: 0x57E0, //CJK UNIFIED IDEOGRAPH - 0xB0F1: 0x57E4, //CJK UNIFIED IDEOGRAPH - 0xB0F2: 0x57FA, //CJK UNIFIED IDEOGRAPH - 0xB0F3: 0x5802, //CJK UNIFIED IDEOGRAPH - 0xB0F4: 0x5835, //CJK UNIFIED IDEOGRAPH - 0xB0F5: 0x57F7, //CJK UNIFIED IDEOGRAPH - 0xB0F6: 0x57F9, //CJK UNIFIED IDEOGRAPH - 0xB0F7: 0x5920, //CJK UNIFIED IDEOGRAPH - 0xB0F8: 0x5962, //CJK UNIFIED IDEOGRAPH - 0xB0F9: 0x5A36, //CJK UNIFIED IDEOGRAPH - 0xB0FA: 0x5A41, //CJK UNIFIED IDEOGRAPH - 0xB0FB: 0x5A49, //CJK UNIFIED IDEOGRAPH - 0xB0FC: 0x5A66, //CJK UNIFIED IDEOGRAPH - 0xB0FD: 0x5A6A, //CJK UNIFIED IDEOGRAPH - 0xB0FE: 0x5A40, //CJK UNIFIED IDEOGRAPH - 0xB140: 0x5A3C, //CJK UNIFIED IDEOGRAPH - 0xB141: 0x5A62, //CJK UNIFIED IDEOGRAPH - 0xB142: 0x5A5A, //CJK UNIFIED IDEOGRAPH - 0xB143: 0x5A46, //CJK UNIFIED IDEOGRAPH - 0xB144: 0x5A4A, //CJK UNIFIED IDEOGRAPH - 0xB145: 0x5B70, //CJK UNIFIED IDEOGRAPH - 0xB146: 0x5BC7, //CJK UNIFIED IDEOGRAPH - 0xB147: 0x5BC5, //CJK UNIFIED IDEOGRAPH - 0xB148: 0x5BC4, //CJK UNIFIED IDEOGRAPH - 0xB149: 0x5BC2, //CJK UNIFIED IDEOGRAPH - 0xB14A: 0x5BBF, //CJK UNIFIED IDEOGRAPH - 0xB14B: 0x5BC6, //CJK UNIFIED IDEOGRAPH - 0xB14C: 0x5C09, //CJK UNIFIED IDEOGRAPH - 0xB14D: 0x5C08, //CJK UNIFIED IDEOGRAPH - 0xB14E: 0x5C07, //CJK UNIFIED IDEOGRAPH - 0xB14F: 0x5C60, //CJK UNIFIED IDEOGRAPH - 0xB150: 0x5C5C, //CJK UNIFIED IDEOGRAPH - 0xB151: 0x5C5D, //CJK UNIFIED IDEOGRAPH - 0xB152: 0x5D07, //CJK UNIFIED IDEOGRAPH - 0xB153: 0x5D06, //CJK UNIFIED IDEOGRAPH - 0xB154: 0x5D0E, //CJK UNIFIED IDEOGRAPH - 0xB155: 0x5D1B, //CJK UNIFIED IDEOGRAPH - 0xB156: 0x5D16, //CJK UNIFIED IDEOGRAPH - 0xB157: 0x5D22, //CJK UNIFIED IDEOGRAPH - 0xB158: 0x5D11, //CJK UNIFIED IDEOGRAPH - 0xB159: 0x5D29, //CJK UNIFIED IDEOGRAPH - 0xB15A: 0x5D14, //CJK UNIFIED IDEOGRAPH - 0xB15B: 0x5D19, //CJK UNIFIED IDEOGRAPH - 0xB15C: 0x5D24, //CJK UNIFIED IDEOGRAPH - 0xB15D: 0x5D27, //CJK UNIFIED IDEOGRAPH - 0xB15E: 0x5D17, //CJK UNIFIED IDEOGRAPH - 0xB15F: 0x5DE2, //CJK UNIFIED IDEOGRAPH - 0xB160: 0x5E38, //CJK UNIFIED IDEOGRAPH - 0xB161: 0x5E36, //CJK UNIFIED IDEOGRAPH - 0xB162: 0x5E33, //CJK UNIFIED IDEOGRAPH - 0xB163: 0x5E37, //CJK UNIFIED IDEOGRAPH - 0xB164: 0x5EB7, //CJK UNIFIED IDEOGRAPH - 0xB165: 0x5EB8, //CJK UNIFIED IDEOGRAPH - 0xB166: 0x5EB6, //CJK UNIFIED IDEOGRAPH - 0xB167: 0x5EB5, //CJK UNIFIED IDEOGRAPH - 0xB168: 0x5EBE, //CJK UNIFIED IDEOGRAPH - 0xB169: 0x5F35, //CJK UNIFIED IDEOGRAPH - 0xB16A: 0x5F37, //CJK UNIFIED IDEOGRAPH - 0xB16B: 0x5F57, //CJK UNIFIED IDEOGRAPH - 0xB16C: 0x5F6C, //CJK UNIFIED IDEOGRAPH - 0xB16D: 0x5F69, //CJK UNIFIED IDEOGRAPH - 0xB16E: 0x5F6B, //CJK UNIFIED IDEOGRAPH - 0xB16F: 0x5F97, //CJK UNIFIED IDEOGRAPH - 0xB170: 0x5F99, //CJK UNIFIED IDEOGRAPH - 0xB171: 0x5F9E, //CJK UNIFIED IDEOGRAPH - 0xB172: 0x5F98, //CJK UNIFIED IDEOGRAPH - 0xB173: 0x5FA1, //CJK UNIFIED IDEOGRAPH - 0xB174: 0x5FA0, //CJK UNIFIED IDEOGRAPH - 0xB175: 0x5F9C, //CJK UNIFIED IDEOGRAPH - 0xB176: 0x607F, //CJK UNIFIED IDEOGRAPH - 0xB177: 0x60A3, //CJK UNIFIED IDEOGRAPH - 0xB178: 0x6089, //CJK UNIFIED IDEOGRAPH - 0xB179: 0x60A0, //CJK UNIFIED IDEOGRAPH - 0xB17A: 0x60A8, //CJK UNIFIED IDEOGRAPH - 0xB17B: 0x60CB, //CJK UNIFIED IDEOGRAPH - 0xB17C: 0x60B4, //CJK UNIFIED IDEOGRAPH - 0xB17D: 0x60E6, //CJK UNIFIED IDEOGRAPH - 0xB17E: 0x60BD, //CJK UNIFIED IDEOGRAPH - 0xB1A1: 0x60C5, //CJK UNIFIED IDEOGRAPH - 0xB1A2: 0x60BB, //CJK UNIFIED IDEOGRAPH - 0xB1A3: 0x60B5, //CJK UNIFIED IDEOGRAPH - 0xB1A4: 0x60DC, //CJK UNIFIED IDEOGRAPH - 0xB1A5: 0x60BC, //CJK UNIFIED IDEOGRAPH - 0xB1A6: 0x60D8, //CJK UNIFIED IDEOGRAPH - 0xB1A7: 0x60D5, //CJK UNIFIED IDEOGRAPH - 0xB1A8: 0x60C6, //CJK UNIFIED IDEOGRAPH - 0xB1A9: 0x60DF, //CJK UNIFIED IDEOGRAPH - 0xB1AA: 0x60B8, //CJK UNIFIED IDEOGRAPH - 0xB1AB: 0x60DA, //CJK UNIFIED IDEOGRAPH - 0xB1AC: 0x60C7, //CJK UNIFIED IDEOGRAPH - 0xB1AD: 0x621A, //CJK UNIFIED IDEOGRAPH - 0xB1AE: 0x621B, //CJK UNIFIED IDEOGRAPH - 0xB1AF: 0x6248, //CJK UNIFIED IDEOGRAPH - 0xB1B0: 0x63A0, //CJK UNIFIED IDEOGRAPH - 0xB1B1: 0x63A7, //CJK UNIFIED IDEOGRAPH - 0xB1B2: 0x6372, //CJK UNIFIED IDEOGRAPH - 0xB1B3: 0x6396, //CJK UNIFIED IDEOGRAPH - 0xB1B4: 0x63A2, //CJK UNIFIED IDEOGRAPH - 0xB1B5: 0x63A5, //CJK UNIFIED IDEOGRAPH - 0xB1B6: 0x6377, //CJK UNIFIED IDEOGRAPH - 0xB1B7: 0x6367, //CJK UNIFIED IDEOGRAPH - 0xB1B8: 0x6398, //CJK UNIFIED IDEOGRAPH - 0xB1B9: 0x63AA, //CJK UNIFIED IDEOGRAPH - 0xB1BA: 0x6371, //CJK UNIFIED IDEOGRAPH - 0xB1BB: 0x63A9, //CJK UNIFIED IDEOGRAPH - 0xB1BC: 0x6389, //CJK UNIFIED IDEOGRAPH - 0xB1BD: 0x6383, //CJK UNIFIED IDEOGRAPH - 0xB1BE: 0x639B, //CJK UNIFIED IDEOGRAPH - 0xB1BF: 0x636B, //CJK UNIFIED IDEOGRAPH - 0xB1C0: 0x63A8, //CJK UNIFIED IDEOGRAPH - 0xB1C1: 0x6384, //CJK UNIFIED IDEOGRAPH - 0xB1C2: 0x6388, //CJK UNIFIED IDEOGRAPH - 0xB1C3: 0x6399, //CJK UNIFIED IDEOGRAPH - 0xB1C4: 0x63A1, //CJK UNIFIED IDEOGRAPH - 0xB1C5: 0x63AC, //CJK UNIFIED IDEOGRAPH - 0xB1C6: 0x6392, //CJK UNIFIED IDEOGRAPH - 0xB1C7: 0x638F, //CJK UNIFIED IDEOGRAPH - 0xB1C8: 0x6380, //CJK UNIFIED IDEOGRAPH - 0xB1C9: 0x637B, //CJK UNIFIED IDEOGRAPH - 0xB1CA: 0x6369, //CJK UNIFIED IDEOGRAPH - 0xB1CB: 0x6368, //CJK UNIFIED IDEOGRAPH - 0xB1CC: 0x637A, //CJK UNIFIED IDEOGRAPH - 0xB1CD: 0x655D, //CJK UNIFIED IDEOGRAPH - 0xB1CE: 0x6556, //CJK UNIFIED IDEOGRAPH - 0xB1CF: 0x6551, //CJK UNIFIED IDEOGRAPH - 0xB1D0: 0x6559, //CJK UNIFIED IDEOGRAPH - 0xB1D1: 0x6557, //CJK UNIFIED IDEOGRAPH - 0xB1D2: 0x555F, //CJK UNIFIED IDEOGRAPH - 0xB1D3: 0x654F, //CJK UNIFIED IDEOGRAPH - 0xB1D4: 0x6558, //CJK UNIFIED IDEOGRAPH - 0xB1D5: 0x6555, //CJK UNIFIED IDEOGRAPH - 0xB1D6: 0x6554, //CJK UNIFIED IDEOGRAPH - 0xB1D7: 0x659C, //CJK UNIFIED IDEOGRAPH - 0xB1D8: 0x659B, //CJK UNIFIED IDEOGRAPH - 0xB1D9: 0x65AC, //CJK UNIFIED IDEOGRAPH - 0xB1DA: 0x65CF, //CJK UNIFIED IDEOGRAPH - 0xB1DB: 0x65CB, //CJK UNIFIED IDEOGRAPH - 0xB1DC: 0x65CC, //CJK UNIFIED IDEOGRAPH - 0xB1DD: 0x65CE, //CJK UNIFIED IDEOGRAPH - 0xB1DE: 0x665D, //CJK UNIFIED IDEOGRAPH - 0xB1DF: 0x665A, //CJK UNIFIED IDEOGRAPH - 0xB1E0: 0x6664, //CJK UNIFIED IDEOGRAPH - 0xB1E1: 0x6668, //CJK UNIFIED IDEOGRAPH - 0xB1E2: 0x6666, //CJK UNIFIED IDEOGRAPH - 0xB1E3: 0x665E, //CJK UNIFIED IDEOGRAPH - 0xB1E4: 0x66F9, //CJK UNIFIED IDEOGRAPH - 0xB1E5: 0x52D7, //CJK UNIFIED IDEOGRAPH - 0xB1E6: 0x671B, //CJK UNIFIED IDEOGRAPH - 0xB1E7: 0x6881, //CJK UNIFIED IDEOGRAPH - 0xB1E8: 0x68AF, //CJK UNIFIED IDEOGRAPH - 0xB1E9: 0x68A2, //CJK UNIFIED IDEOGRAPH - 0xB1EA: 0x6893, //CJK UNIFIED IDEOGRAPH - 0xB1EB: 0x68B5, //CJK UNIFIED IDEOGRAPH - 0xB1EC: 0x687F, //CJK UNIFIED IDEOGRAPH - 0xB1ED: 0x6876, //CJK UNIFIED IDEOGRAPH - 0xB1EE: 0x68B1, //CJK UNIFIED IDEOGRAPH - 0xB1EF: 0x68A7, //CJK UNIFIED IDEOGRAPH - 0xB1F0: 0x6897, //CJK UNIFIED IDEOGRAPH - 0xB1F1: 0x68B0, //CJK UNIFIED IDEOGRAPH - 0xB1F2: 0x6883, //CJK UNIFIED IDEOGRAPH - 0xB1F3: 0x68C4, //CJK UNIFIED IDEOGRAPH - 0xB1F4: 0x68AD, //CJK UNIFIED IDEOGRAPH - 0xB1F5: 0x6886, //CJK UNIFIED IDEOGRAPH - 0xB1F6: 0x6885, //CJK UNIFIED IDEOGRAPH - 0xB1F7: 0x6894, //CJK UNIFIED IDEOGRAPH - 0xB1F8: 0x689D, //CJK UNIFIED IDEOGRAPH - 0xB1F9: 0x68A8, //CJK UNIFIED IDEOGRAPH - 0xB1FA: 0x689F, //CJK UNIFIED IDEOGRAPH - 0xB1FB: 0x68A1, //CJK UNIFIED IDEOGRAPH - 0xB1FC: 0x6882, //CJK UNIFIED IDEOGRAPH - 0xB1FD: 0x6B32, //CJK UNIFIED IDEOGRAPH - 0xB1FE: 0x6BBA, //CJK UNIFIED IDEOGRAPH - 0xB240: 0x6BEB, //CJK UNIFIED IDEOGRAPH - 0xB241: 0x6BEC, //CJK UNIFIED IDEOGRAPH - 0xB242: 0x6C2B, //CJK UNIFIED IDEOGRAPH - 0xB243: 0x6D8E, //CJK UNIFIED IDEOGRAPH - 0xB244: 0x6DBC, //CJK UNIFIED IDEOGRAPH - 0xB245: 0x6DF3, //CJK UNIFIED IDEOGRAPH - 0xB246: 0x6DD9, //CJK UNIFIED IDEOGRAPH - 0xB247: 0x6DB2, //CJK UNIFIED IDEOGRAPH - 0xB248: 0x6DE1, //CJK UNIFIED IDEOGRAPH - 0xB249: 0x6DCC, //CJK UNIFIED IDEOGRAPH - 0xB24A: 0x6DE4, //CJK UNIFIED IDEOGRAPH - 0xB24B: 0x6DFB, //CJK UNIFIED IDEOGRAPH - 0xB24C: 0x6DFA, //CJK UNIFIED IDEOGRAPH - 0xB24D: 0x6E05, //CJK UNIFIED IDEOGRAPH - 0xB24E: 0x6DC7, //CJK UNIFIED IDEOGRAPH - 0xB24F: 0x6DCB, //CJK UNIFIED IDEOGRAPH - 0xB250: 0x6DAF, //CJK UNIFIED IDEOGRAPH - 0xB251: 0x6DD1, //CJK UNIFIED IDEOGRAPH - 0xB252: 0x6DAE, //CJK UNIFIED IDEOGRAPH - 0xB253: 0x6DDE, //CJK UNIFIED IDEOGRAPH - 0xB254: 0x6DF9, //CJK UNIFIED IDEOGRAPH - 0xB255: 0x6DB8, //CJK UNIFIED IDEOGRAPH - 0xB256: 0x6DF7, //CJK UNIFIED IDEOGRAPH - 0xB257: 0x6DF5, //CJK UNIFIED IDEOGRAPH - 0xB258: 0x6DC5, //CJK UNIFIED IDEOGRAPH - 0xB259: 0x6DD2, //CJK UNIFIED IDEOGRAPH - 0xB25A: 0x6E1A, //CJK UNIFIED IDEOGRAPH - 0xB25B: 0x6DB5, //CJK UNIFIED IDEOGRAPH - 0xB25C: 0x6DDA, //CJK UNIFIED IDEOGRAPH - 0xB25D: 0x6DEB, //CJK UNIFIED IDEOGRAPH - 0xB25E: 0x6DD8, //CJK UNIFIED IDEOGRAPH - 0xB25F: 0x6DEA, //CJK UNIFIED IDEOGRAPH - 0xB260: 0x6DF1, //CJK UNIFIED IDEOGRAPH - 0xB261: 0x6DEE, //CJK UNIFIED IDEOGRAPH - 0xB262: 0x6DE8, //CJK UNIFIED IDEOGRAPH - 0xB263: 0x6DC6, //CJK UNIFIED IDEOGRAPH - 0xB264: 0x6DC4, //CJK UNIFIED IDEOGRAPH - 0xB265: 0x6DAA, //CJK UNIFIED IDEOGRAPH - 0xB266: 0x6DEC, //CJK UNIFIED IDEOGRAPH - 0xB267: 0x6DBF, //CJK UNIFIED IDEOGRAPH - 0xB268: 0x6DE6, //CJK UNIFIED IDEOGRAPH - 0xB269: 0x70F9, //CJK UNIFIED IDEOGRAPH - 0xB26A: 0x7109, //CJK UNIFIED IDEOGRAPH - 0xB26B: 0x710A, //CJK UNIFIED IDEOGRAPH - 0xB26C: 0x70FD, //CJK UNIFIED IDEOGRAPH - 0xB26D: 0x70EF, //CJK UNIFIED IDEOGRAPH - 0xB26E: 0x723D, //CJK UNIFIED IDEOGRAPH - 0xB26F: 0x727D, //CJK UNIFIED IDEOGRAPH - 0xB270: 0x7281, //CJK UNIFIED IDEOGRAPH - 0xB271: 0x731C, //CJK UNIFIED IDEOGRAPH - 0xB272: 0x731B, //CJK UNIFIED IDEOGRAPH - 0xB273: 0x7316, //CJK UNIFIED IDEOGRAPH - 0xB274: 0x7313, //CJK UNIFIED IDEOGRAPH - 0xB275: 0x7319, //CJK UNIFIED IDEOGRAPH - 0xB276: 0x7387, //CJK UNIFIED IDEOGRAPH - 0xB277: 0x7405, //CJK UNIFIED IDEOGRAPH - 0xB278: 0x740A, //CJK UNIFIED IDEOGRAPH - 0xB279: 0x7403, //CJK UNIFIED IDEOGRAPH - 0xB27A: 0x7406, //CJK UNIFIED IDEOGRAPH - 0xB27B: 0x73FE, //CJK UNIFIED IDEOGRAPH - 0xB27C: 0x740D, //CJK UNIFIED IDEOGRAPH - 0xB27D: 0x74E0, //CJK UNIFIED IDEOGRAPH - 0xB27E: 0x74F6, //CJK UNIFIED IDEOGRAPH - 0xB2A1: 0x74F7, //CJK UNIFIED IDEOGRAPH - 0xB2A2: 0x751C, //CJK UNIFIED IDEOGRAPH - 0xB2A3: 0x7522, //CJK UNIFIED IDEOGRAPH - 0xB2A4: 0x7565, //CJK UNIFIED IDEOGRAPH - 0xB2A5: 0x7566, //CJK UNIFIED IDEOGRAPH - 0xB2A6: 0x7562, //CJK UNIFIED IDEOGRAPH - 0xB2A7: 0x7570, //CJK UNIFIED IDEOGRAPH - 0xB2A8: 0x758F, //CJK UNIFIED IDEOGRAPH - 0xB2A9: 0x75D4, //CJK UNIFIED IDEOGRAPH - 0xB2AA: 0x75D5, //CJK UNIFIED IDEOGRAPH - 0xB2AB: 0x75B5, //CJK UNIFIED IDEOGRAPH - 0xB2AC: 0x75CA, //CJK UNIFIED IDEOGRAPH - 0xB2AD: 0x75CD, //CJK UNIFIED IDEOGRAPH - 0xB2AE: 0x768E, //CJK UNIFIED IDEOGRAPH - 0xB2AF: 0x76D4, //CJK UNIFIED IDEOGRAPH - 0xB2B0: 0x76D2, //CJK UNIFIED IDEOGRAPH - 0xB2B1: 0x76DB, //CJK UNIFIED IDEOGRAPH - 0xB2B2: 0x7737, //CJK UNIFIED IDEOGRAPH - 0xB2B3: 0x773E, //CJK UNIFIED IDEOGRAPH - 0xB2B4: 0x773C, //CJK UNIFIED IDEOGRAPH - 0xB2B5: 0x7736, //CJK UNIFIED IDEOGRAPH - 0xB2B6: 0x7738, //CJK UNIFIED IDEOGRAPH - 0xB2B7: 0x773A, //CJK UNIFIED IDEOGRAPH - 0xB2B8: 0x786B, //CJK UNIFIED IDEOGRAPH - 0xB2B9: 0x7843, //CJK UNIFIED IDEOGRAPH - 0xB2BA: 0x784E, //CJK UNIFIED IDEOGRAPH - 0xB2BB: 0x7965, //CJK UNIFIED IDEOGRAPH - 0xB2BC: 0x7968, //CJK UNIFIED IDEOGRAPH - 0xB2BD: 0x796D, //CJK UNIFIED IDEOGRAPH - 0xB2BE: 0x79FB, //CJK UNIFIED IDEOGRAPH - 0xB2BF: 0x7A92, //CJK UNIFIED IDEOGRAPH - 0xB2C0: 0x7A95, //CJK UNIFIED IDEOGRAPH - 0xB2C1: 0x7B20, //CJK UNIFIED IDEOGRAPH - 0xB2C2: 0x7B28, //CJK UNIFIED IDEOGRAPH - 0xB2C3: 0x7B1B, //CJK UNIFIED IDEOGRAPH - 0xB2C4: 0x7B2C, //CJK UNIFIED IDEOGRAPH - 0xB2C5: 0x7B26, //CJK UNIFIED IDEOGRAPH - 0xB2C6: 0x7B19, //CJK UNIFIED IDEOGRAPH - 0xB2C7: 0x7B1E, //CJK UNIFIED IDEOGRAPH - 0xB2C8: 0x7B2E, //CJK UNIFIED IDEOGRAPH - 0xB2C9: 0x7C92, //CJK UNIFIED IDEOGRAPH - 0xB2CA: 0x7C97, //CJK UNIFIED IDEOGRAPH - 0xB2CB: 0x7C95, //CJK UNIFIED IDEOGRAPH - 0xB2CC: 0x7D46, //CJK UNIFIED IDEOGRAPH - 0xB2CD: 0x7D43, //CJK UNIFIED IDEOGRAPH - 0xB2CE: 0x7D71, //CJK UNIFIED IDEOGRAPH - 0xB2CF: 0x7D2E, //CJK UNIFIED IDEOGRAPH - 0xB2D0: 0x7D39, //CJK UNIFIED IDEOGRAPH - 0xB2D1: 0x7D3C, //CJK UNIFIED IDEOGRAPH - 0xB2D2: 0x7D40, //CJK UNIFIED IDEOGRAPH - 0xB2D3: 0x7D30, //CJK UNIFIED IDEOGRAPH - 0xB2D4: 0x7D33, //CJK UNIFIED IDEOGRAPH - 0xB2D5: 0x7D44, //CJK UNIFIED IDEOGRAPH - 0xB2D6: 0x7D2F, //CJK UNIFIED IDEOGRAPH - 0xB2D7: 0x7D42, //CJK UNIFIED IDEOGRAPH - 0xB2D8: 0x7D32, //CJK UNIFIED IDEOGRAPH - 0xB2D9: 0x7D31, //CJK UNIFIED IDEOGRAPH - 0xB2DA: 0x7F3D, //CJK UNIFIED IDEOGRAPH - 0xB2DB: 0x7F9E, //CJK UNIFIED IDEOGRAPH - 0xB2DC: 0x7F9A, //CJK UNIFIED IDEOGRAPH - 0xB2DD: 0x7FCC, //CJK UNIFIED IDEOGRAPH - 0xB2DE: 0x7FCE, //CJK UNIFIED IDEOGRAPH - 0xB2DF: 0x7FD2, //CJK UNIFIED IDEOGRAPH - 0xB2E0: 0x801C, //CJK UNIFIED IDEOGRAPH - 0xB2E1: 0x804A, //CJK UNIFIED IDEOGRAPH - 0xB2E2: 0x8046, //CJK UNIFIED IDEOGRAPH - 0xB2E3: 0x812F, //CJK UNIFIED IDEOGRAPH - 0xB2E4: 0x8116, //CJK UNIFIED IDEOGRAPH - 0xB2E5: 0x8123, //CJK UNIFIED IDEOGRAPH - 0xB2E6: 0x812B, //CJK UNIFIED IDEOGRAPH - 0xB2E7: 0x8129, //CJK UNIFIED IDEOGRAPH - 0xB2E8: 0x8130, //CJK UNIFIED IDEOGRAPH - 0xB2E9: 0x8124, //CJK UNIFIED IDEOGRAPH - 0xB2EA: 0x8202, //CJK UNIFIED IDEOGRAPH - 0xB2EB: 0x8235, //CJK UNIFIED IDEOGRAPH - 0xB2EC: 0x8237, //CJK UNIFIED IDEOGRAPH - 0xB2ED: 0x8236, //CJK UNIFIED IDEOGRAPH - 0xB2EE: 0x8239, //CJK UNIFIED IDEOGRAPH - 0xB2EF: 0x838E, //CJK UNIFIED IDEOGRAPH - 0xB2F0: 0x839E, //CJK UNIFIED IDEOGRAPH - 0xB2F1: 0x8398, //CJK UNIFIED IDEOGRAPH - 0xB2F2: 0x8378, //CJK UNIFIED IDEOGRAPH - 0xB2F3: 0x83A2, //CJK UNIFIED IDEOGRAPH - 0xB2F4: 0x8396, //CJK UNIFIED IDEOGRAPH - 0xB2F5: 0x83BD, //CJK UNIFIED IDEOGRAPH - 0xB2F6: 0x83AB, //CJK UNIFIED IDEOGRAPH - 0xB2F7: 0x8392, //CJK UNIFIED IDEOGRAPH - 0xB2F8: 0x838A, //CJK UNIFIED IDEOGRAPH - 0xB2F9: 0x8393, //CJK UNIFIED IDEOGRAPH - 0xB2FA: 0x8389, //CJK UNIFIED IDEOGRAPH - 0xB2FB: 0x83A0, //CJK UNIFIED IDEOGRAPH - 0xB2FC: 0x8377, //CJK UNIFIED IDEOGRAPH - 0xB2FD: 0x837B, //CJK UNIFIED IDEOGRAPH - 0xB2FE: 0x837C, //CJK UNIFIED IDEOGRAPH - 0xB340: 0x8386, //CJK UNIFIED IDEOGRAPH - 0xB341: 0x83A7, //CJK UNIFIED IDEOGRAPH - 0xB342: 0x8655, //CJK UNIFIED IDEOGRAPH - 0xB343: 0x5F6A, //CJK UNIFIED IDEOGRAPH - 0xB344: 0x86C7, //CJK UNIFIED IDEOGRAPH - 0xB345: 0x86C0, //CJK UNIFIED IDEOGRAPH - 0xB346: 0x86B6, //CJK UNIFIED IDEOGRAPH - 0xB347: 0x86C4, //CJK UNIFIED IDEOGRAPH - 0xB348: 0x86B5, //CJK UNIFIED IDEOGRAPH - 0xB349: 0x86C6, //CJK UNIFIED IDEOGRAPH - 0xB34A: 0x86CB, //CJK UNIFIED IDEOGRAPH - 0xB34B: 0x86B1, //CJK UNIFIED IDEOGRAPH - 0xB34C: 0x86AF, //CJK UNIFIED IDEOGRAPH - 0xB34D: 0x86C9, //CJK UNIFIED IDEOGRAPH - 0xB34E: 0x8853, //CJK UNIFIED IDEOGRAPH - 0xB34F: 0x889E, //CJK UNIFIED IDEOGRAPH - 0xB350: 0x8888, //CJK UNIFIED IDEOGRAPH - 0xB351: 0x88AB, //CJK UNIFIED IDEOGRAPH - 0xB352: 0x8892, //CJK UNIFIED IDEOGRAPH - 0xB353: 0x8896, //CJK UNIFIED IDEOGRAPH - 0xB354: 0x888D, //CJK UNIFIED IDEOGRAPH - 0xB355: 0x888B, //CJK UNIFIED IDEOGRAPH - 0xB356: 0x8993, //CJK UNIFIED IDEOGRAPH - 0xB357: 0x898F, //CJK UNIFIED IDEOGRAPH - 0xB358: 0x8A2A, //CJK UNIFIED IDEOGRAPH - 0xB359: 0x8A1D, //CJK UNIFIED IDEOGRAPH - 0xB35A: 0x8A23, //CJK UNIFIED IDEOGRAPH - 0xB35B: 0x8A25, //CJK UNIFIED IDEOGRAPH - 0xB35C: 0x8A31, //CJK UNIFIED IDEOGRAPH - 0xB35D: 0x8A2D, //CJK UNIFIED IDEOGRAPH - 0xB35E: 0x8A1F, //CJK UNIFIED IDEOGRAPH - 0xB35F: 0x8A1B, //CJK UNIFIED IDEOGRAPH - 0xB360: 0x8A22, //CJK UNIFIED IDEOGRAPH - 0xB361: 0x8C49, //CJK UNIFIED IDEOGRAPH - 0xB362: 0x8C5A, //CJK UNIFIED IDEOGRAPH - 0xB363: 0x8CA9, //CJK UNIFIED IDEOGRAPH - 0xB364: 0x8CAC, //CJK UNIFIED IDEOGRAPH - 0xB365: 0x8CAB, //CJK UNIFIED IDEOGRAPH - 0xB366: 0x8CA8, //CJK UNIFIED IDEOGRAPH - 0xB367: 0x8CAA, //CJK UNIFIED IDEOGRAPH - 0xB368: 0x8CA7, //CJK UNIFIED IDEOGRAPH - 0xB369: 0x8D67, //CJK UNIFIED IDEOGRAPH - 0xB36A: 0x8D66, //CJK UNIFIED IDEOGRAPH - 0xB36B: 0x8DBE, //CJK UNIFIED IDEOGRAPH - 0xB36C: 0x8DBA, //CJK UNIFIED IDEOGRAPH - 0xB36D: 0x8EDB, //CJK UNIFIED IDEOGRAPH - 0xB36E: 0x8EDF, //CJK UNIFIED IDEOGRAPH - 0xB36F: 0x9019, //CJK UNIFIED IDEOGRAPH - 0xB370: 0x900D, //CJK UNIFIED IDEOGRAPH - 0xB371: 0x901A, //CJK UNIFIED IDEOGRAPH - 0xB372: 0x9017, //CJK UNIFIED IDEOGRAPH - 0xB373: 0x9023, //CJK UNIFIED IDEOGRAPH - 0xB374: 0x901F, //CJK UNIFIED IDEOGRAPH - 0xB375: 0x901D, //CJK UNIFIED IDEOGRAPH - 0xB376: 0x9010, //CJK UNIFIED IDEOGRAPH - 0xB377: 0x9015, //CJK UNIFIED IDEOGRAPH - 0xB378: 0x901E, //CJK UNIFIED IDEOGRAPH - 0xB379: 0x9020, //CJK UNIFIED IDEOGRAPH - 0xB37A: 0x900F, //CJK UNIFIED IDEOGRAPH - 0xB37B: 0x9022, //CJK UNIFIED IDEOGRAPH - 0xB37C: 0x9016, //CJK UNIFIED IDEOGRAPH - 0xB37D: 0x901B, //CJK UNIFIED IDEOGRAPH - 0xB37E: 0x9014, //CJK UNIFIED IDEOGRAPH - 0xB3A1: 0x90E8, //CJK UNIFIED IDEOGRAPH - 0xB3A2: 0x90ED, //CJK UNIFIED IDEOGRAPH - 0xB3A3: 0x90FD, //CJK UNIFIED IDEOGRAPH - 0xB3A4: 0x9157, //CJK UNIFIED IDEOGRAPH - 0xB3A5: 0x91CE, //CJK UNIFIED IDEOGRAPH - 0xB3A6: 0x91F5, //CJK UNIFIED IDEOGRAPH - 0xB3A7: 0x91E6, //CJK UNIFIED IDEOGRAPH - 0xB3A8: 0x91E3, //CJK UNIFIED IDEOGRAPH - 0xB3A9: 0x91E7, //CJK UNIFIED IDEOGRAPH - 0xB3AA: 0x91ED, //CJK UNIFIED IDEOGRAPH - 0xB3AB: 0x91E9, //CJK UNIFIED IDEOGRAPH - 0xB3AC: 0x9589, //CJK UNIFIED IDEOGRAPH - 0xB3AD: 0x966A, //CJK UNIFIED IDEOGRAPH - 0xB3AE: 0x9675, //CJK UNIFIED IDEOGRAPH - 0xB3AF: 0x9673, //CJK UNIFIED IDEOGRAPH - 0xB3B0: 0x9678, //CJK UNIFIED IDEOGRAPH - 0xB3B1: 0x9670, //CJK UNIFIED IDEOGRAPH - 0xB3B2: 0x9674, //CJK UNIFIED IDEOGRAPH - 0xB3B3: 0x9676, //CJK UNIFIED IDEOGRAPH - 0xB3B4: 0x9677, //CJK UNIFIED IDEOGRAPH - 0xB3B5: 0x966C, //CJK UNIFIED IDEOGRAPH - 0xB3B6: 0x96C0, //CJK UNIFIED IDEOGRAPH - 0xB3B7: 0x96EA, //CJK UNIFIED IDEOGRAPH - 0xB3B8: 0x96E9, //CJK UNIFIED IDEOGRAPH - 0xB3B9: 0x7AE0, //CJK UNIFIED IDEOGRAPH - 0xB3BA: 0x7ADF, //CJK UNIFIED IDEOGRAPH - 0xB3BB: 0x9802, //CJK UNIFIED IDEOGRAPH - 0xB3BC: 0x9803, //CJK UNIFIED IDEOGRAPH - 0xB3BD: 0x9B5A, //CJK UNIFIED IDEOGRAPH - 0xB3BE: 0x9CE5, //CJK UNIFIED IDEOGRAPH - 0xB3BF: 0x9E75, //CJK UNIFIED IDEOGRAPH - 0xB3C0: 0x9E7F, //CJK UNIFIED IDEOGRAPH - 0xB3C1: 0x9EA5, //CJK UNIFIED IDEOGRAPH - 0xB3C2: 0x9EBB, //CJK UNIFIED IDEOGRAPH - 0xB3C3: 0x50A2, //CJK UNIFIED IDEOGRAPH - 0xB3C4: 0x508D, //CJK UNIFIED IDEOGRAPH - 0xB3C5: 0x5085, //CJK UNIFIED IDEOGRAPH - 0xB3C6: 0x5099, //CJK UNIFIED IDEOGRAPH - 0xB3C7: 0x5091, //CJK UNIFIED IDEOGRAPH - 0xB3C8: 0x5080, //CJK UNIFIED IDEOGRAPH - 0xB3C9: 0x5096, //CJK UNIFIED IDEOGRAPH - 0xB3CA: 0x5098, //CJK UNIFIED IDEOGRAPH - 0xB3CB: 0x509A, //CJK UNIFIED IDEOGRAPH - 0xB3CC: 0x6700, //CJK UNIFIED IDEOGRAPH - 0xB3CD: 0x51F1, //CJK UNIFIED IDEOGRAPH - 0xB3CE: 0x5272, //CJK UNIFIED IDEOGRAPH - 0xB3CF: 0x5274, //CJK UNIFIED IDEOGRAPH - 0xB3D0: 0x5275, //CJK UNIFIED IDEOGRAPH - 0xB3D1: 0x5269, //CJK UNIFIED IDEOGRAPH - 0xB3D2: 0x52DE, //CJK UNIFIED IDEOGRAPH - 0xB3D3: 0x52DD, //CJK UNIFIED IDEOGRAPH - 0xB3D4: 0x52DB, //CJK UNIFIED IDEOGRAPH - 0xB3D5: 0x535A, //CJK UNIFIED IDEOGRAPH - 0xB3D6: 0x53A5, //CJK UNIFIED IDEOGRAPH - 0xB3D7: 0x557B, //CJK UNIFIED IDEOGRAPH - 0xB3D8: 0x5580, //CJK UNIFIED IDEOGRAPH - 0xB3D9: 0x55A7, //CJK UNIFIED IDEOGRAPH - 0xB3DA: 0x557C, //CJK UNIFIED IDEOGRAPH - 0xB3DB: 0x558A, //CJK UNIFIED IDEOGRAPH - 0xB3DC: 0x559D, //CJK UNIFIED IDEOGRAPH - 0xB3DD: 0x5598, //CJK UNIFIED IDEOGRAPH - 0xB3DE: 0x5582, //CJK UNIFIED IDEOGRAPH - 0xB3DF: 0x559C, //CJK UNIFIED IDEOGRAPH - 0xB3E0: 0x55AA, //CJK UNIFIED IDEOGRAPH - 0xB3E1: 0x5594, //CJK UNIFIED IDEOGRAPH - 0xB3E2: 0x5587, //CJK UNIFIED IDEOGRAPH - 0xB3E3: 0x558B, //CJK UNIFIED IDEOGRAPH - 0xB3E4: 0x5583, //CJK UNIFIED IDEOGRAPH - 0xB3E5: 0x55B3, //CJK UNIFIED IDEOGRAPH - 0xB3E6: 0x55AE, //CJK UNIFIED IDEOGRAPH - 0xB3E7: 0x559F, //CJK UNIFIED IDEOGRAPH - 0xB3E8: 0x553E, //CJK UNIFIED IDEOGRAPH - 0xB3E9: 0x55B2, //CJK UNIFIED IDEOGRAPH - 0xB3EA: 0x559A, //CJK UNIFIED IDEOGRAPH - 0xB3EB: 0x55BB, //CJK UNIFIED IDEOGRAPH - 0xB3EC: 0x55AC, //CJK UNIFIED IDEOGRAPH - 0xB3ED: 0x55B1, //CJK UNIFIED IDEOGRAPH - 0xB3EE: 0x557E, //CJK UNIFIED IDEOGRAPH - 0xB3EF: 0x5589, //CJK UNIFIED IDEOGRAPH - 0xB3F0: 0x55AB, //CJK UNIFIED IDEOGRAPH - 0xB3F1: 0x5599, //CJK UNIFIED IDEOGRAPH - 0xB3F2: 0x570D, //CJK UNIFIED IDEOGRAPH - 0xB3F3: 0x582F, //CJK UNIFIED IDEOGRAPH - 0xB3F4: 0x582A, //CJK UNIFIED IDEOGRAPH - 0xB3F5: 0x5834, //CJK UNIFIED IDEOGRAPH - 0xB3F6: 0x5824, //CJK UNIFIED IDEOGRAPH - 0xB3F7: 0x5830, //CJK UNIFIED IDEOGRAPH - 0xB3F8: 0x5831, //CJK UNIFIED IDEOGRAPH - 0xB3F9: 0x5821, //CJK UNIFIED IDEOGRAPH - 0xB3FA: 0x581D, //CJK UNIFIED IDEOGRAPH - 0xB3FB: 0x5820, //CJK UNIFIED IDEOGRAPH - 0xB3FC: 0x58F9, //CJK UNIFIED IDEOGRAPH - 0xB3FD: 0x58FA, //CJK UNIFIED IDEOGRAPH - 0xB3FE: 0x5960, //CJK UNIFIED IDEOGRAPH - 0xB440: 0x5A77, //CJK UNIFIED IDEOGRAPH - 0xB441: 0x5A9A, //CJK UNIFIED IDEOGRAPH - 0xB442: 0x5A7F, //CJK UNIFIED IDEOGRAPH - 0xB443: 0x5A92, //CJK UNIFIED IDEOGRAPH - 0xB444: 0x5A9B, //CJK UNIFIED IDEOGRAPH - 0xB445: 0x5AA7, //CJK UNIFIED IDEOGRAPH - 0xB446: 0x5B73, //CJK UNIFIED IDEOGRAPH - 0xB447: 0x5B71, //CJK UNIFIED IDEOGRAPH - 0xB448: 0x5BD2, //CJK UNIFIED IDEOGRAPH - 0xB449: 0x5BCC, //CJK UNIFIED IDEOGRAPH - 0xB44A: 0x5BD3, //CJK UNIFIED IDEOGRAPH - 0xB44B: 0x5BD0, //CJK UNIFIED IDEOGRAPH - 0xB44C: 0x5C0A, //CJK UNIFIED IDEOGRAPH - 0xB44D: 0x5C0B, //CJK UNIFIED IDEOGRAPH - 0xB44E: 0x5C31, //CJK UNIFIED IDEOGRAPH - 0xB44F: 0x5D4C, //CJK UNIFIED IDEOGRAPH - 0xB450: 0x5D50, //CJK UNIFIED IDEOGRAPH - 0xB451: 0x5D34, //CJK UNIFIED IDEOGRAPH - 0xB452: 0x5D47, //CJK UNIFIED IDEOGRAPH - 0xB453: 0x5DFD, //CJK UNIFIED IDEOGRAPH - 0xB454: 0x5E45, //CJK UNIFIED IDEOGRAPH - 0xB455: 0x5E3D, //CJK UNIFIED IDEOGRAPH - 0xB456: 0x5E40, //CJK UNIFIED IDEOGRAPH - 0xB457: 0x5E43, //CJK UNIFIED IDEOGRAPH - 0xB458: 0x5E7E, //CJK UNIFIED IDEOGRAPH - 0xB459: 0x5ECA, //CJK UNIFIED IDEOGRAPH - 0xB45A: 0x5EC1, //CJK UNIFIED IDEOGRAPH - 0xB45B: 0x5EC2, //CJK UNIFIED IDEOGRAPH - 0xB45C: 0x5EC4, //CJK UNIFIED IDEOGRAPH - 0xB45D: 0x5F3C, //CJK UNIFIED IDEOGRAPH - 0xB45E: 0x5F6D, //CJK UNIFIED IDEOGRAPH - 0xB45F: 0x5FA9, //CJK UNIFIED IDEOGRAPH - 0xB460: 0x5FAA, //CJK UNIFIED IDEOGRAPH - 0xB461: 0x5FA8, //CJK UNIFIED IDEOGRAPH - 0xB462: 0x60D1, //CJK UNIFIED IDEOGRAPH - 0xB463: 0x60E1, //CJK UNIFIED IDEOGRAPH - 0xB464: 0x60B2, //CJK UNIFIED IDEOGRAPH - 0xB465: 0x60B6, //CJK UNIFIED IDEOGRAPH - 0xB466: 0x60E0, //CJK UNIFIED IDEOGRAPH - 0xB467: 0x611C, //CJK UNIFIED IDEOGRAPH - 0xB468: 0x6123, //CJK UNIFIED IDEOGRAPH - 0xB469: 0x60FA, //CJK UNIFIED IDEOGRAPH - 0xB46A: 0x6115, //CJK UNIFIED IDEOGRAPH - 0xB46B: 0x60F0, //CJK UNIFIED IDEOGRAPH - 0xB46C: 0x60FB, //CJK UNIFIED IDEOGRAPH - 0xB46D: 0x60F4, //CJK UNIFIED IDEOGRAPH - 0xB46E: 0x6168, //CJK UNIFIED IDEOGRAPH - 0xB46F: 0x60F1, //CJK UNIFIED IDEOGRAPH - 0xB470: 0x610E, //CJK UNIFIED IDEOGRAPH - 0xB471: 0x60F6, //CJK UNIFIED IDEOGRAPH - 0xB472: 0x6109, //CJK UNIFIED IDEOGRAPH - 0xB473: 0x6100, //CJK UNIFIED IDEOGRAPH - 0xB474: 0x6112, //CJK UNIFIED IDEOGRAPH - 0xB475: 0x621F, //CJK UNIFIED IDEOGRAPH - 0xB476: 0x6249, //CJK UNIFIED IDEOGRAPH - 0xB477: 0x63A3, //CJK UNIFIED IDEOGRAPH - 0xB478: 0x638C, //CJK UNIFIED IDEOGRAPH - 0xB479: 0x63CF, //CJK UNIFIED IDEOGRAPH - 0xB47A: 0x63C0, //CJK UNIFIED IDEOGRAPH - 0xB47B: 0x63E9, //CJK UNIFIED IDEOGRAPH - 0xB47C: 0x63C9, //CJK UNIFIED IDEOGRAPH - 0xB47D: 0x63C6, //CJK UNIFIED IDEOGRAPH - 0xB47E: 0x63CD, //CJK UNIFIED IDEOGRAPH - 0xB4A1: 0x63D2, //CJK UNIFIED IDEOGRAPH - 0xB4A2: 0x63E3, //CJK UNIFIED IDEOGRAPH - 0xB4A3: 0x63D0, //CJK UNIFIED IDEOGRAPH - 0xB4A4: 0x63E1, //CJK UNIFIED IDEOGRAPH - 0xB4A5: 0x63D6, //CJK UNIFIED IDEOGRAPH - 0xB4A6: 0x63ED, //CJK UNIFIED IDEOGRAPH - 0xB4A7: 0x63EE, //CJK UNIFIED IDEOGRAPH - 0xB4A8: 0x6376, //CJK UNIFIED IDEOGRAPH - 0xB4A9: 0x63F4, //CJK UNIFIED IDEOGRAPH - 0xB4AA: 0x63EA, //CJK UNIFIED IDEOGRAPH - 0xB4AB: 0x63DB, //CJK UNIFIED IDEOGRAPH - 0xB4AC: 0x6452, //CJK UNIFIED IDEOGRAPH - 0xB4AD: 0x63DA, //CJK UNIFIED IDEOGRAPH - 0xB4AE: 0x63F9, //CJK UNIFIED IDEOGRAPH - 0xB4AF: 0x655E, //CJK UNIFIED IDEOGRAPH - 0xB4B0: 0x6566, //CJK UNIFIED IDEOGRAPH - 0xB4B1: 0x6562, //CJK UNIFIED IDEOGRAPH - 0xB4B2: 0x6563, //CJK UNIFIED IDEOGRAPH - 0xB4B3: 0x6591, //CJK UNIFIED IDEOGRAPH - 0xB4B4: 0x6590, //CJK UNIFIED IDEOGRAPH - 0xB4B5: 0x65AF, //CJK UNIFIED IDEOGRAPH - 0xB4B6: 0x666E, //CJK UNIFIED IDEOGRAPH - 0xB4B7: 0x6670, //CJK UNIFIED IDEOGRAPH - 0xB4B8: 0x6674, //CJK UNIFIED IDEOGRAPH - 0xB4B9: 0x6676, //CJK UNIFIED IDEOGRAPH - 0xB4BA: 0x666F, //CJK UNIFIED IDEOGRAPH - 0xB4BB: 0x6691, //CJK UNIFIED IDEOGRAPH - 0xB4BC: 0x667A, //CJK UNIFIED IDEOGRAPH - 0xB4BD: 0x667E, //CJK UNIFIED IDEOGRAPH - 0xB4BE: 0x6677, //CJK UNIFIED IDEOGRAPH - 0xB4BF: 0x66FE, //CJK UNIFIED IDEOGRAPH - 0xB4C0: 0x66FF, //CJK UNIFIED IDEOGRAPH - 0xB4C1: 0x671F, //CJK UNIFIED IDEOGRAPH - 0xB4C2: 0x671D, //CJK UNIFIED IDEOGRAPH - 0xB4C3: 0x68FA, //CJK UNIFIED IDEOGRAPH - 0xB4C4: 0x68D5, //CJK UNIFIED IDEOGRAPH - 0xB4C5: 0x68E0, //CJK UNIFIED IDEOGRAPH - 0xB4C6: 0x68D8, //CJK UNIFIED IDEOGRAPH - 0xB4C7: 0x68D7, //CJK UNIFIED IDEOGRAPH - 0xB4C8: 0x6905, //CJK UNIFIED IDEOGRAPH - 0xB4C9: 0x68DF, //CJK UNIFIED IDEOGRAPH - 0xB4CA: 0x68F5, //CJK UNIFIED IDEOGRAPH - 0xB4CB: 0x68EE, //CJK UNIFIED IDEOGRAPH - 0xB4CC: 0x68E7, //CJK UNIFIED IDEOGRAPH - 0xB4CD: 0x68F9, //CJK UNIFIED IDEOGRAPH - 0xB4CE: 0x68D2, //CJK UNIFIED IDEOGRAPH - 0xB4CF: 0x68F2, //CJK UNIFIED IDEOGRAPH - 0xB4D0: 0x68E3, //CJK UNIFIED IDEOGRAPH - 0xB4D1: 0x68CB, //CJK UNIFIED IDEOGRAPH - 0xB4D2: 0x68CD, //CJK UNIFIED IDEOGRAPH - 0xB4D3: 0x690D, //CJK UNIFIED IDEOGRAPH - 0xB4D4: 0x6912, //CJK UNIFIED IDEOGRAPH - 0xB4D5: 0x690E, //CJK UNIFIED IDEOGRAPH - 0xB4D6: 0x68C9, //CJK UNIFIED IDEOGRAPH - 0xB4D7: 0x68DA, //CJK UNIFIED IDEOGRAPH - 0xB4D8: 0x696E, //CJK UNIFIED IDEOGRAPH - 0xB4D9: 0x68FB, //CJK UNIFIED IDEOGRAPH - 0xB4DA: 0x6B3E, //CJK UNIFIED IDEOGRAPH - 0xB4DB: 0x6B3A, //CJK UNIFIED IDEOGRAPH - 0xB4DC: 0x6B3D, //CJK UNIFIED IDEOGRAPH - 0xB4DD: 0x6B98, //CJK UNIFIED IDEOGRAPH - 0xB4DE: 0x6B96, //CJK UNIFIED IDEOGRAPH - 0xB4DF: 0x6BBC, //CJK UNIFIED IDEOGRAPH - 0xB4E0: 0x6BEF, //CJK UNIFIED IDEOGRAPH - 0xB4E1: 0x6C2E, //CJK UNIFIED IDEOGRAPH - 0xB4E2: 0x6C2F, //CJK UNIFIED IDEOGRAPH - 0xB4E3: 0x6C2C, //CJK UNIFIED IDEOGRAPH - 0xB4E4: 0x6E2F, //CJK UNIFIED IDEOGRAPH - 0xB4E5: 0x6E38, //CJK UNIFIED IDEOGRAPH - 0xB4E6: 0x6E54, //CJK UNIFIED IDEOGRAPH - 0xB4E7: 0x6E21, //CJK UNIFIED IDEOGRAPH - 0xB4E8: 0x6E32, //CJK UNIFIED IDEOGRAPH - 0xB4E9: 0x6E67, //CJK UNIFIED IDEOGRAPH - 0xB4EA: 0x6E4A, //CJK UNIFIED IDEOGRAPH - 0xB4EB: 0x6E20, //CJK UNIFIED IDEOGRAPH - 0xB4EC: 0x6E25, //CJK UNIFIED IDEOGRAPH - 0xB4ED: 0x6E23, //CJK UNIFIED IDEOGRAPH - 0xB4EE: 0x6E1B, //CJK UNIFIED IDEOGRAPH - 0xB4EF: 0x6E5B, //CJK UNIFIED IDEOGRAPH - 0xB4F0: 0x6E58, //CJK UNIFIED IDEOGRAPH - 0xB4F1: 0x6E24, //CJK UNIFIED IDEOGRAPH - 0xB4F2: 0x6E56, //CJK UNIFIED IDEOGRAPH - 0xB4F3: 0x6E6E, //CJK UNIFIED IDEOGRAPH - 0xB4F4: 0x6E2D, //CJK UNIFIED IDEOGRAPH - 0xB4F5: 0x6E26, //CJK UNIFIED IDEOGRAPH - 0xB4F6: 0x6E6F, //CJK UNIFIED IDEOGRAPH - 0xB4F7: 0x6E34, //CJK UNIFIED IDEOGRAPH - 0xB4F8: 0x6E4D, //CJK UNIFIED IDEOGRAPH - 0xB4F9: 0x6E3A, //CJK UNIFIED IDEOGRAPH - 0xB4FA: 0x6E2C, //CJK UNIFIED IDEOGRAPH - 0xB4FB: 0x6E43, //CJK UNIFIED IDEOGRAPH - 0xB4FC: 0x6E1D, //CJK UNIFIED IDEOGRAPH - 0xB4FD: 0x6E3E, //CJK UNIFIED IDEOGRAPH - 0xB4FE: 0x6ECB, //CJK UNIFIED IDEOGRAPH - 0xB540: 0x6E89, //CJK UNIFIED IDEOGRAPH - 0xB541: 0x6E19, //CJK UNIFIED IDEOGRAPH - 0xB542: 0x6E4E, //CJK UNIFIED IDEOGRAPH - 0xB543: 0x6E63, //CJK UNIFIED IDEOGRAPH - 0xB544: 0x6E44, //CJK UNIFIED IDEOGRAPH - 0xB545: 0x6E72, //CJK UNIFIED IDEOGRAPH - 0xB546: 0x6E69, //CJK UNIFIED IDEOGRAPH - 0xB547: 0x6E5F, //CJK UNIFIED IDEOGRAPH - 0xB548: 0x7119, //CJK UNIFIED IDEOGRAPH - 0xB549: 0x711A, //CJK UNIFIED IDEOGRAPH - 0xB54A: 0x7126, //CJK UNIFIED IDEOGRAPH - 0xB54B: 0x7130, //CJK UNIFIED IDEOGRAPH - 0xB54C: 0x7121, //CJK UNIFIED IDEOGRAPH - 0xB54D: 0x7136, //CJK UNIFIED IDEOGRAPH - 0xB54E: 0x716E, //CJK UNIFIED IDEOGRAPH - 0xB54F: 0x711C, //CJK UNIFIED IDEOGRAPH - 0xB550: 0x724C, //CJK UNIFIED IDEOGRAPH - 0xB551: 0x7284, //CJK UNIFIED IDEOGRAPH - 0xB552: 0x7280, //CJK UNIFIED IDEOGRAPH - 0xB553: 0x7336, //CJK UNIFIED IDEOGRAPH - 0xB554: 0x7325, //CJK UNIFIED IDEOGRAPH - 0xB555: 0x7334, //CJK UNIFIED IDEOGRAPH - 0xB556: 0x7329, //CJK UNIFIED IDEOGRAPH - 0xB557: 0x743A, //CJK UNIFIED IDEOGRAPH - 0xB558: 0x742A, //CJK UNIFIED IDEOGRAPH - 0xB559: 0x7433, //CJK UNIFIED IDEOGRAPH - 0xB55A: 0x7422, //CJK UNIFIED IDEOGRAPH - 0xB55B: 0x7425, //CJK UNIFIED IDEOGRAPH - 0xB55C: 0x7435, //CJK UNIFIED IDEOGRAPH - 0xB55D: 0x7436, //CJK UNIFIED IDEOGRAPH - 0xB55E: 0x7434, //CJK UNIFIED IDEOGRAPH - 0xB55F: 0x742F, //CJK UNIFIED IDEOGRAPH - 0xB560: 0x741B, //CJK UNIFIED IDEOGRAPH - 0xB561: 0x7426, //CJK UNIFIED IDEOGRAPH - 0xB562: 0x7428, //CJK UNIFIED IDEOGRAPH - 0xB563: 0x7525, //CJK UNIFIED IDEOGRAPH - 0xB564: 0x7526, //CJK UNIFIED IDEOGRAPH - 0xB565: 0x756B, //CJK UNIFIED IDEOGRAPH - 0xB566: 0x756A, //CJK UNIFIED IDEOGRAPH - 0xB567: 0x75E2, //CJK UNIFIED IDEOGRAPH - 0xB568: 0x75DB, //CJK UNIFIED IDEOGRAPH - 0xB569: 0x75E3, //CJK UNIFIED IDEOGRAPH - 0xB56A: 0x75D9, //CJK UNIFIED IDEOGRAPH - 0xB56B: 0x75D8, //CJK UNIFIED IDEOGRAPH - 0xB56C: 0x75DE, //CJK UNIFIED IDEOGRAPH - 0xB56D: 0x75E0, //CJK UNIFIED IDEOGRAPH - 0xB56E: 0x767B, //CJK UNIFIED IDEOGRAPH - 0xB56F: 0x767C, //CJK UNIFIED IDEOGRAPH - 0xB570: 0x7696, //CJK UNIFIED IDEOGRAPH - 0xB571: 0x7693, //CJK UNIFIED IDEOGRAPH - 0xB572: 0x76B4, //CJK UNIFIED IDEOGRAPH - 0xB573: 0x76DC, //CJK UNIFIED IDEOGRAPH - 0xB574: 0x774F, //CJK UNIFIED IDEOGRAPH - 0xB575: 0x77ED, //CJK UNIFIED IDEOGRAPH - 0xB576: 0x785D, //CJK UNIFIED IDEOGRAPH - 0xB577: 0x786C, //CJK UNIFIED IDEOGRAPH - 0xB578: 0x786F, //CJK UNIFIED IDEOGRAPH - 0xB579: 0x7A0D, //CJK UNIFIED IDEOGRAPH - 0xB57A: 0x7A08, //CJK UNIFIED IDEOGRAPH - 0xB57B: 0x7A0B, //CJK UNIFIED IDEOGRAPH - 0xB57C: 0x7A05, //CJK UNIFIED IDEOGRAPH - 0xB57D: 0x7A00, //CJK UNIFIED IDEOGRAPH - 0xB57E: 0x7A98, //CJK UNIFIED IDEOGRAPH - 0xB5A1: 0x7A97, //CJK UNIFIED IDEOGRAPH - 0xB5A2: 0x7A96, //CJK UNIFIED IDEOGRAPH - 0xB5A3: 0x7AE5, //CJK UNIFIED IDEOGRAPH - 0xB5A4: 0x7AE3, //CJK UNIFIED IDEOGRAPH - 0xB5A5: 0x7B49, //CJK UNIFIED IDEOGRAPH - 0xB5A6: 0x7B56, //CJK UNIFIED IDEOGRAPH - 0xB5A7: 0x7B46, //CJK UNIFIED IDEOGRAPH - 0xB5A8: 0x7B50, //CJK UNIFIED IDEOGRAPH - 0xB5A9: 0x7B52, //CJK UNIFIED IDEOGRAPH - 0xB5AA: 0x7B54, //CJK UNIFIED IDEOGRAPH - 0xB5AB: 0x7B4D, //CJK UNIFIED IDEOGRAPH - 0xB5AC: 0x7B4B, //CJK UNIFIED IDEOGRAPH - 0xB5AD: 0x7B4F, //CJK UNIFIED IDEOGRAPH - 0xB5AE: 0x7B51, //CJK UNIFIED IDEOGRAPH - 0xB5AF: 0x7C9F, //CJK UNIFIED IDEOGRAPH - 0xB5B0: 0x7CA5, //CJK UNIFIED IDEOGRAPH - 0xB5B1: 0x7D5E, //CJK UNIFIED IDEOGRAPH - 0xB5B2: 0x7D50, //CJK UNIFIED IDEOGRAPH - 0xB5B3: 0x7D68, //CJK UNIFIED IDEOGRAPH - 0xB5B4: 0x7D55, //CJK UNIFIED IDEOGRAPH - 0xB5B5: 0x7D2B, //CJK UNIFIED IDEOGRAPH - 0xB5B6: 0x7D6E, //CJK UNIFIED IDEOGRAPH - 0xB5B7: 0x7D72, //CJK UNIFIED IDEOGRAPH - 0xB5B8: 0x7D61, //CJK UNIFIED IDEOGRAPH - 0xB5B9: 0x7D66, //CJK UNIFIED IDEOGRAPH - 0xB5BA: 0x7D62, //CJK UNIFIED IDEOGRAPH - 0xB5BB: 0x7D70, //CJK UNIFIED IDEOGRAPH - 0xB5BC: 0x7D73, //CJK UNIFIED IDEOGRAPH - 0xB5BD: 0x5584, //CJK UNIFIED IDEOGRAPH - 0xB5BE: 0x7FD4, //CJK UNIFIED IDEOGRAPH - 0xB5BF: 0x7FD5, //CJK UNIFIED IDEOGRAPH - 0xB5C0: 0x800B, //CJK UNIFIED IDEOGRAPH - 0xB5C1: 0x8052, //CJK UNIFIED IDEOGRAPH - 0xB5C2: 0x8085, //CJK UNIFIED IDEOGRAPH - 0xB5C3: 0x8155, //CJK UNIFIED IDEOGRAPH - 0xB5C4: 0x8154, //CJK UNIFIED IDEOGRAPH - 0xB5C5: 0x814B, //CJK UNIFIED IDEOGRAPH - 0xB5C6: 0x8151, //CJK UNIFIED IDEOGRAPH - 0xB5C7: 0x814E, //CJK UNIFIED IDEOGRAPH - 0xB5C8: 0x8139, //CJK UNIFIED IDEOGRAPH - 0xB5C9: 0x8146, //CJK UNIFIED IDEOGRAPH - 0xB5CA: 0x813E, //CJK UNIFIED IDEOGRAPH - 0xB5CB: 0x814C, //CJK UNIFIED IDEOGRAPH - 0xB5CC: 0x8153, //CJK UNIFIED IDEOGRAPH - 0xB5CD: 0x8174, //CJK UNIFIED IDEOGRAPH - 0xB5CE: 0x8212, //CJK UNIFIED IDEOGRAPH - 0xB5CF: 0x821C, //CJK UNIFIED IDEOGRAPH - 0xB5D0: 0x83E9, //CJK UNIFIED IDEOGRAPH - 0xB5D1: 0x8403, //CJK UNIFIED IDEOGRAPH - 0xB5D2: 0x83F8, //CJK UNIFIED IDEOGRAPH - 0xB5D3: 0x840D, //CJK UNIFIED IDEOGRAPH - 0xB5D4: 0x83E0, //CJK UNIFIED IDEOGRAPH - 0xB5D5: 0x83C5, //CJK UNIFIED IDEOGRAPH - 0xB5D6: 0x840B, //CJK UNIFIED IDEOGRAPH - 0xB5D7: 0x83C1, //CJK UNIFIED IDEOGRAPH - 0xB5D8: 0x83EF, //CJK UNIFIED IDEOGRAPH - 0xB5D9: 0x83F1, //CJK UNIFIED IDEOGRAPH - 0xB5DA: 0x83F4, //CJK UNIFIED IDEOGRAPH - 0xB5DB: 0x8457, //CJK UNIFIED IDEOGRAPH - 0xB5DC: 0x840A, //CJK UNIFIED IDEOGRAPH - 0xB5DD: 0x83F0, //CJK UNIFIED IDEOGRAPH - 0xB5DE: 0x840C, //CJK UNIFIED IDEOGRAPH - 0xB5DF: 0x83CC, //CJK UNIFIED IDEOGRAPH - 0xB5E0: 0x83FD, //CJK UNIFIED IDEOGRAPH - 0xB5E1: 0x83F2, //CJK UNIFIED IDEOGRAPH - 0xB5E2: 0x83CA, //CJK UNIFIED IDEOGRAPH - 0xB5E3: 0x8438, //CJK UNIFIED IDEOGRAPH - 0xB5E4: 0x840E, //CJK UNIFIED IDEOGRAPH - 0xB5E5: 0x8404, //CJK UNIFIED IDEOGRAPH - 0xB5E6: 0x83DC, //CJK UNIFIED IDEOGRAPH - 0xB5E7: 0x8407, //CJK UNIFIED IDEOGRAPH - 0xB5E8: 0x83D4, //CJK UNIFIED IDEOGRAPH - 0xB5E9: 0x83DF, //CJK UNIFIED IDEOGRAPH - 0xB5EA: 0x865B, //CJK UNIFIED IDEOGRAPH - 0xB5EB: 0x86DF, //CJK UNIFIED IDEOGRAPH - 0xB5EC: 0x86D9, //CJK UNIFIED IDEOGRAPH - 0xB5ED: 0x86ED, //CJK UNIFIED IDEOGRAPH - 0xB5EE: 0x86D4, //CJK UNIFIED IDEOGRAPH - 0xB5EF: 0x86DB, //CJK UNIFIED IDEOGRAPH - 0xB5F0: 0x86E4, //CJK UNIFIED IDEOGRAPH - 0xB5F1: 0x86D0, //CJK UNIFIED IDEOGRAPH - 0xB5F2: 0x86DE, //CJK UNIFIED IDEOGRAPH - 0xB5F3: 0x8857, //CJK UNIFIED IDEOGRAPH - 0xB5F4: 0x88C1, //CJK UNIFIED IDEOGRAPH - 0xB5F5: 0x88C2, //CJK UNIFIED IDEOGRAPH - 0xB5F6: 0x88B1, //CJK UNIFIED IDEOGRAPH - 0xB5F7: 0x8983, //CJK UNIFIED IDEOGRAPH - 0xB5F8: 0x8996, //CJK UNIFIED IDEOGRAPH - 0xB5F9: 0x8A3B, //CJK UNIFIED IDEOGRAPH - 0xB5FA: 0x8A60, //CJK UNIFIED IDEOGRAPH - 0xB5FB: 0x8A55, //CJK UNIFIED IDEOGRAPH - 0xB5FC: 0x8A5E, //CJK UNIFIED IDEOGRAPH - 0xB5FD: 0x8A3C, //CJK UNIFIED IDEOGRAPH - 0xB5FE: 0x8A41, //CJK UNIFIED IDEOGRAPH - 0xB640: 0x8A54, //CJK UNIFIED IDEOGRAPH - 0xB641: 0x8A5B, //CJK UNIFIED IDEOGRAPH - 0xB642: 0x8A50, //CJK UNIFIED IDEOGRAPH - 0xB643: 0x8A46, //CJK UNIFIED IDEOGRAPH - 0xB644: 0x8A34, //CJK UNIFIED IDEOGRAPH - 0xB645: 0x8A3A, //CJK UNIFIED IDEOGRAPH - 0xB646: 0x8A36, //CJK UNIFIED IDEOGRAPH - 0xB647: 0x8A56, //CJK UNIFIED IDEOGRAPH - 0xB648: 0x8C61, //CJK UNIFIED IDEOGRAPH - 0xB649: 0x8C82, //CJK UNIFIED IDEOGRAPH - 0xB64A: 0x8CAF, //CJK UNIFIED IDEOGRAPH - 0xB64B: 0x8CBC, //CJK UNIFIED IDEOGRAPH - 0xB64C: 0x8CB3, //CJK UNIFIED IDEOGRAPH - 0xB64D: 0x8CBD, //CJK UNIFIED IDEOGRAPH - 0xB64E: 0x8CC1, //CJK UNIFIED IDEOGRAPH - 0xB64F: 0x8CBB, //CJK UNIFIED IDEOGRAPH - 0xB650: 0x8CC0, //CJK UNIFIED IDEOGRAPH - 0xB651: 0x8CB4, //CJK UNIFIED IDEOGRAPH - 0xB652: 0x8CB7, //CJK UNIFIED IDEOGRAPH - 0xB653: 0x8CB6, //CJK UNIFIED IDEOGRAPH - 0xB654: 0x8CBF, //CJK UNIFIED IDEOGRAPH - 0xB655: 0x8CB8, //CJK UNIFIED IDEOGRAPH - 0xB656: 0x8D8A, //CJK UNIFIED IDEOGRAPH - 0xB657: 0x8D85, //CJK UNIFIED IDEOGRAPH - 0xB658: 0x8D81, //CJK UNIFIED IDEOGRAPH - 0xB659: 0x8DCE, //CJK UNIFIED IDEOGRAPH - 0xB65A: 0x8DDD, //CJK UNIFIED IDEOGRAPH - 0xB65B: 0x8DCB, //CJK UNIFIED IDEOGRAPH - 0xB65C: 0x8DDA, //CJK UNIFIED IDEOGRAPH - 0xB65D: 0x8DD1, //CJK UNIFIED IDEOGRAPH - 0xB65E: 0x8DCC, //CJK UNIFIED IDEOGRAPH - 0xB65F: 0x8DDB, //CJK UNIFIED IDEOGRAPH - 0xB660: 0x8DC6, //CJK UNIFIED IDEOGRAPH - 0xB661: 0x8EFB, //CJK UNIFIED IDEOGRAPH - 0xB662: 0x8EF8, //CJK UNIFIED IDEOGRAPH - 0xB663: 0x8EFC, //CJK UNIFIED IDEOGRAPH - 0xB664: 0x8F9C, //CJK UNIFIED IDEOGRAPH - 0xB665: 0x902E, //CJK UNIFIED IDEOGRAPH - 0xB666: 0x9035, //CJK UNIFIED IDEOGRAPH - 0xB667: 0x9031, //CJK UNIFIED IDEOGRAPH - 0xB668: 0x9038, //CJK UNIFIED IDEOGRAPH - 0xB669: 0x9032, //CJK UNIFIED IDEOGRAPH - 0xB66A: 0x9036, //CJK UNIFIED IDEOGRAPH - 0xB66B: 0x9102, //CJK UNIFIED IDEOGRAPH - 0xB66C: 0x90F5, //CJK UNIFIED IDEOGRAPH - 0xB66D: 0x9109, //CJK UNIFIED IDEOGRAPH - 0xB66E: 0x90FE, //CJK UNIFIED IDEOGRAPH - 0xB66F: 0x9163, //CJK UNIFIED IDEOGRAPH - 0xB670: 0x9165, //CJK UNIFIED IDEOGRAPH - 0xB671: 0x91CF, //CJK UNIFIED IDEOGRAPH - 0xB672: 0x9214, //CJK UNIFIED IDEOGRAPH - 0xB673: 0x9215, //CJK UNIFIED IDEOGRAPH - 0xB674: 0x9223, //CJK UNIFIED IDEOGRAPH - 0xB675: 0x9209, //CJK UNIFIED IDEOGRAPH - 0xB676: 0x921E, //CJK UNIFIED IDEOGRAPH - 0xB677: 0x920D, //CJK UNIFIED IDEOGRAPH - 0xB678: 0x9210, //CJK UNIFIED IDEOGRAPH - 0xB679: 0x9207, //CJK UNIFIED IDEOGRAPH - 0xB67A: 0x9211, //CJK UNIFIED IDEOGRAPH - 0xB67B: 0x9594, //CJK UNIFIED IDEOGRAPH - 0xB67C: 0x958F, //CJK UNIFIED IDEOGRAPH - 0xB67D: 0x958B, //CJK UNIFIED IDEOGRAPH - 0xB67E: 0x9591, //CJK UNIFIED IDEOGRAPH - 0xB6A1: 0x9593, //CJK UNIFIED IDEOGRAPH - 0xB6A2: 0x9592, //CJK UNIFIED IDEOGRAPH - 0xB6A3: 0x958E, //CJK UNIFIED IDEOGRAPH - 0xB6A4: 0x968A, //CJK UNIFIED IDEOGRAPH - 0xB6A5: 0x968E, //CJK UNIFIED IDEOGRAPH - 0xB6A6: 0x968B, //CJK UNIFIED IDEOGRAPH - 0xB6A7: 0x967D, //CJK UNIFIED IDEOGRAPH - 0xB6A8: 0x9685, //CJK UNIFIED IDEOGRAPH - 0xB6A9: 0x9686, //CJK UNIFIED IDEOGRAPH - 0xB6AA: 0x968D, //CJK UNIFIED IDEOGRAPH - 0xB6AB: 0x9672, //CJK UNIFIED IDEOGRAPH - 0xB6AC: 0x9684, //CJK UNIFIED IDEOGRAPH - 0xB6AD: 0x96C1, //CJK UNIFIED IDEOGRAPH - 0xB6AE: 0x96C5, //CJK UNIFIED IDEOGRAPH - 0xB6AF: 0x96C4, //CJK UNIFIED IDEOGRAPH - 0xB6B0: 0x96C6, //CJK UNIFIED IDEOGRAPH - 0xB6B1: 0x96C7, //CJK UNIFIED IDEOGRAPH - 0xB6B2: 0x96EF, //CJK UNIFIED IDEOGRAPH - 0xB6B3: 0x96F2, //CJK UNIFIED IDEOGRAPH - 0xB6B4: 0x97CC, //CJK UNIFIED IDEOGRAPH - 0xB6B5: 0x9805, //CJK UNIFIED IDEOGRAPH - 0xB6B6: 0x9806, //CJK UNIFIED IDEOGRAPH - 0xB6B7: 0x9808, //CJK UNIFIED IDEOGRAPH - 0xB6B8: 0x98E7, //CJK UNIFIED IDEOGRAPH - 0xB6B9: 0x98EA, //CJK UNIFIED IDEOGRAPH - 0xB6BA: 0x98EF, //CJK UNIFIED IDEOGRAPH - 0xB6BB: 0x98E9, //CJK UNIFIED IDEOGRAPH - 0xB6BC: 0x98F2, //CJK UNIFIED IDEOGRAPH - 0xB6BD: 0x98ED, //CJK UNIFIED IDEOGRAPH - 0xB6BE: 0x99AE, //CJK UNIFIED IDEOGRAPH - 0xB6BF: 0x99AD, //CJK UNIFIED IDEOGRAPH - 0xB6C0: 0x9EC3, //CJK UNIFIED IDEOGRAPH - 0xB6C1: 0x9ECD, //CJK UNIFIED IDEOGRAPH - 0xB6C2: 0x9ED1, //CJK UNIFIED IDEOGRAPH - 0xB6C3: 0x4E82, //CJK UNIFIED IDEOGRAPH - 0xB6C4: 0x50AD, //CJK UNIFIED IDEOGRAPH - 0xB6C5: 0x50B5, //CJK UNIFIED IDEOGRAPH - 0xB6C6: 0x50B2, //CJK UNIFIED IDEOGRAPH - 0xB6C7: 0x50B3, //CJK UNIFIED IDEOGRAPH - 0xB6C8: 0x50C5, //CJK UNIFIED IDEOGRAPH - 0xB6C9: 0x50BE, //CJK UNIFIED IDEOGRAPH - 0xB6CA: 0x50AC, //CJK UNIFIED IDEOGRAPH - 0xB6CB: 0x50B7, //CJK UNIFIED IDEOGRAPH - 0xB6CC: 0x50BB, //CJK UNIFIED IDEOGRAPH - 0xB6CD: 0x50AF, //CJK UNIFIED IDEOGRAPH - 0xB6CE: 0x50C7, //CJK UNIFIED IDEOGRAPH - 0xB6CF: 0x527F, //CJK UNIFIED IDEOGRAPH - 0xB6D0: 0x5277, //CJK UNIFIED IDEOGRAPH - 0xB6D1: 0x527D, //CJK UNIFIED IDEOGRAPH - 0xB6D2: 0x52DF, //CJK UNIFIED IDEOGRAPH - 0xB6D3: 0x52E6, //CJK UNIFIED IDEOGRAPH - 0xB6D4: 0x52E4, //CJK UNIFIED IDEOGRAPH - 0xB6D5: 0x52E2, //CJK UNIFIED IDEOGRAPH - 0xB6D6: 0x52E3, //CJK UNIFIED IDEOGRAPH - 0xB6D7: 0x532F, //CJK UNIFIED IDEOGRAPH - 0xB6D8: 0x55DF, //CJK UNIFIED IDEOGRAPH - 0xB6D9: 0x55E8, //CJK UNIFIED IDEOGRAPH - 0xB6DA: 0x55D3, //CJK UNIFIED IDEOGRAPH - 0xB6DB: 0x55E6, //CJK UNIFIED IDEOGRAPH - 0xB6DC: 0x55CE, //CJK UNIFIED IDEOGRAPH - 0xB6DD: 0x55DC, //CJK UNIFIED IDEOGRAPH - 0xB6DE: 0x55C7, //CJK UNIFIED IDEOGRAPH - 0xB6DF: 0x55D1, //CJK UNIFIED IDEOGRAPH - 0xB6E0: 0x55E3, //CJK UNIFIED IDEOGRAPH - 0xB6E1: 0x55E4, //CJK UNIFIED IDEOGRAPH - 0xB6E2: 0x55EF, //CJK UNIFIED IDEOGRAPH - 0xB6E3: 0x55DA, //CJK UNIFIED IDEOGRAPH - 0xB6E4: 0x55E1, //CJK UNIFIED IDEOGRAPH - 0xB6E5: 0x55C5, //CJK UNIFIED IDEOGRAPH - 0xB6E6: 0x55C6, //CJK UNIFIED IDEOGRAPH - 0xB6E7: 0x55E5, //CJK UNIFIED IDEOGRAPH - 0xB6E8: 0x55C9, //CJK UNIFIED IDEOGRAPH - 0xB6E9: 0x5712, //CJK UNIFIED IDEOGRAPH - 0xB6EA: 0x5713, //CJK UNIFIED IDEOGRAPH - 0xB6EB: 0x585E, //CJK UNIFIED IDEOGRAPH - 0xB6EC: 0x5851, //CJK UNIFIED IDEOGRAPH - 0xB6ED: 0x5858, //CJK UNIFIED IDEOGRAPH - 0xB6EE: 0x5857, //CJK UNIFIED IDEOGRAPH - 0xB6EF: 0x585A, //CJK UNIFIED IDEOGRAPH - 0xB6F0: 0x5854, //CJK UNIFIED IDEOGRAPH - 0xB6F1: 0x586B, //CJK UNIFIED IDEOGRAPH - 0xB6F2: 0x584C, //CJK UNIFIED IDEOGRAPH - 0xB6F3: 0x586D, //CJK UNIFIED IDEOGRAPH - 0xB6F4: 0x584A, //CJK UNIFIED IDEOGRAPH - 0xB6F5: 0x5862, //CJK UNIFIED IDEOGRAPH - 0xB6F6: 0x5852, //CJK UNIFIED IDEOGRAPH - 0xB6F7: 0x584B, //CJK UNIFIED IDEOGRAPH - 0xB6F8: 0x5967, //CJK UNIFIED IDEOGRAPH - 0xB6F9: 0x5AC1, //CJK UNIFIED IDEOGRAPH - 0xB6FA: 0x5AC9, //CJK UNIFIED IDEOGRAPH - 0xB6FB: 0x5ACC, //CJK UNIFIED IDEOGRAPH - 0xB6FC: 0x5ABE, //CJK UNIFIED IDEOGRAPH - 0xB6FD: 0x5ABD, //CJK UNIFIED IDEOGRAPH - 0xB6FE: 0x5ABC, //CJK UNIFIED IDEOGRAPH - 0xB740: 0x5AB3, //CJK UNIFIED IDEOGRAPH - 0xB741: 0x5AC2, //CJK UNIFIED IDEOGRAPH - 0xB742: 0x5AB2, //CJK UNIFIED IDEOGRAPH - 0xB743: 0x5D69, //CJK UNIFIED IDEOGRAPH - 0xB744: 0x5D6F, //CJK UNIFIED IDEOGRAPH - 0xB745: 0x5E4C, //CJK UNIFIED IDEOGRAPH - 0xB746: 0x5E79, //CJK UNIFIED IDEOGRAPH - 0xB747: 0x5EC9, //CJK UNIFIED IDEOGRAPH - 0xB748: 0x5EC8, //CJK UNIFIED IDEOGRAPH - 0xB749: 0x5F12, //CJK UNIFIED IDEOGRAPH - 0xB74A: 0x5F59, //CJK UNIFIED IDEOGRAPH - 0xB74B: 0x5FAC, //CJK UNIFIED IDEOGRAPH - 0xB74C: 0x5FAE, //CJK UNIFIED IDEOGRAPH - 0xB74D: 0x611A, //CJK UNIFIED IDEOGRAPH - 0xB74E: 0x610F, //CJK UNIFIED IDEOGRAPH - 0xB74F: 0x6148, //CJK UNIFIED IDEOGRAPH - 0xB750: 0x611F, //CJK UNIFIED IDEOGRAPH - 0xB751: 0x60F3, //CJK UNIFIED IDEOGRAPH - 0xB752: 0x611B, //CJK UNIFIED IDEOGRAPH - 0xB753: 0x60F9, //CJK UNIFIED IDEOGRAPH - 0xB754: 0x6101, //CJK UNIFIED IDEOGRAPH - 0xB755: 0x6108, //CJK UNIFIED IDEOGRAPH - 0xB756: 0x614E, //CJK UNIFIED IDEOGRAPH - 0xB757: 0x614C, //CJK UNIFIED IDEOGRAPH - 0xB758: 0x6144, //CJK UNIFIED IDEOGRAPH - 0xB759: 0x614D, //CJK UNIFIED IDEOGRAPH - 0xB75A: 0x613E, //CJK UNIFIED IDEOGRAPH - 0xB75B: 0x6134, //CJK UNIFIED IDEOGRAPH - 0xB75C: 0x6127, //CJK UNIFIED IDEOGRAPH - 0xB75D: 0x610D, //CJK UNIFIED IDEOGRAPH - 0xB75E: 0x6106, //CJK UNIFIED IDEOGRAPH - 0xB75F: 0x6137, //CJK UNIFIED IDEOGRAPH - 0xB760: 0x6221, //CJK UNIFIED IDEOGRAPH - 0xB761: 0x6222, //CJK UNIFIED IDEOGRAPH - 0xB762: 0x6413, //CJK UNIFIED IDEOGRAPH - 0xB763: 0x643E, //CJK UNIFIED IDEOGRAPH - 0xB764: 0x641E, //CJK UNIFIED IDEOGRAPH - 0xB765: 0x642A, //CJK UNIFIED IDEOGRAPH - 0xB766: 0x642D, //CJK UNIFIED IDEOGRAPH - 0xB767: 0x643D, //CJK UNIFIED IDEOGRAPH - 0xB768: 0x642C, //CJK UNIFIED IDEOGRAPH - 0xB769: 0x640F, //CJK UNIFIED IDEOGRAPH - 0xB76A: 0x641C, //CJK UNIFIED IDEOGRAPH - 0xB76B: 0x6414, //CJK UNIFIED IDEOGRAPH - 0xB76C: 0x640D, //CJK UNIFIED IDEOGRAPH - 0xB76D: 0x6436, //CJK UNIFIED IDEOGRAPH - 0xB76E: 0x6416, //CJK UNIFIED IDEOGRAPH - 0xB76F: 0x6417, //CJK UNIFIED IDEOGRAPH - 0xB770: 0x6406, //CJK UNIFIED IDEOGRAPH - 0xB771: 0x656C, //CJK UNIFIED IDEOGRAPH - 0xB772: 0x659F, //CJK UNIFIED IDEOGRAPH - 0xB773: 0x65B0, //CJK UNIFIED IDEOGRAPH - 0xB774: 0x6697, //CJK UNIFIED IDEOGRAPH - 0xB775: 0x6689, //CJK UNIFIED IDEOGRAPH - 0xB776: 0x6687, //CJK UNIFIED IDEOGRAPH - 0xB777: 0x6688, //CJK UNIFIED IDEOGRAPH - 0xB778: 0x6696, //CJK UNIFIED IDEOGRAPH - 0xB779: 0x6684, //CJK UNIFIED IDEOGRAPH - 0xB77A: 0x6698, //CJK UNIFIED IDEOGRAPH - 0xB77B: 0x668D, //CJK UNIFIED IDEOGRAPH - 0xB77C: 0x6703, //CJK UNIFIED IDEOGRAPH - 0xB77D: 0x6994, //CJK UNIFIED IDEOGRAPH - 0xB77E: 0x696D, //CJK UNIFIED IDEOGRAPH - 0xB7A1: 0x695A, //CJK UNIFIED IDEOGRAPH - 0xB7A2: 0x6977, //CJK UNIFIED IDEOGRAPH - 0xB7A3: 0x6960, //CJK UNIFIED IDEOGRAPH - 0xB7A4: 0x6954, //CJK UNIFIED IDEOGRAPH - 0xB7A5: 0x6975, //CJK UNIFIED IDEOGRAPH - 0xB7A6: 0x6930, //CJK UNIFIED IDEOGRAPH - 0xB7A7: 0x6982, //CJK UNIFIED IDEOGRAPH - 0xB7A8: 0x694A, //CJK UNIFIED IDEOGRAPH - 0xB7A9: 0x6968, //CJK UNIFIED IDEOGRAPH - 0xB7AA: 0x696B, //CJK UNIFIED IDEOGRAPH - 0xB7AB: 0x695E, //CJK UNIFIED IDEOGRAPH - 0xB7AC: 0x6953, //CJK UNIFIED IDEOGRAPH - 0xB7AD: 0x6979, //CJK UNIFIED IDEOGRAPH - 0xB7AE: 0x6986, //CJK UNIFIED IDEOGRAPH - 0xB7AF: 0x695D, //CJK UNIFIED IDEOGRAPH - 0xB7B0: 0x6963, //CJK UNIFIED IDEOGRAPH - 0xB7B1: 0x695B, //CJK UNIFIED IDEOGRAPH - 0xB7B2: 0x6B47, //CJK UNIFIED IDEOGRAPH - 0xB7B3: 0x6B72, //CJK UNIFIED IDEOGRAPH - 0xB7B4: 0x6BC0, //CJK UNIFIED IDEOGRAPH - 0xB7B5: 0x6BBF, //CJK UNIFIED IDEOGRAPH - 0xB7B6: 0x6BD3, //CJK UNIFIED IDEOGRAPH - 0xB7B7: 0x6BFD, //CJK UNIFIED IDEOGRAPH - 0xB7B8: 0x6EA2, //CJK UNIFIED IDEOGRAPH - 0xB7B9: 0x6EAF, //CJK UNIFIED IDEOGRAPH - 0xB7BA: 0x6ED3, //CJK UNIFIED IDEOGRAPH - 0xB7BB: 0x6EB6, //CJK UNIFIED IDEOGRAPH - 0xB7BC: 0x6EC2, //CJK UNIFIED IDEOGRAPH - 0xB7BD: 0x6E90, //CJK UNIFIED IDEOGRAPH - 0xB7BE: 0x6E9D, //CJK UNIFIED IDEOGRAPH - 0xB7BF: 0x6EC7, //CJK UNIFIED IDEOGRAPH - 0xB7C0: 0x6EC5, //CJK UNIFIED IDEOGRAPH - 0xB7C1: 0x6EA5, //CJK UNIFIED IDEOGRAPH - 0xB7C2: 0x6E98, //CJK UNIFIED IDEOGRAPH - 0xB7C3: 0x6EBC, //CJK UNIFIED IDEOGRAPH - 0xB7C4: 0x6EBA, //CJK UNIFIED IDEOGRAPH - 0xB7C5: 0x6EAB, //CJK UNIFIED IDEOGRAPH - 0xB7C6: 0x6ED1, //CJK UNIFIED IDEOGRAPH - 0xB7C7: 0x6E96, //CJK UNIFIED IDEOGRAPH - 0xB7C8: 0x6E9C, //CJK UNIFIED IDEOGRAPH - 0xB7C9: 0x6EC4, //CJK UNIFIED IDEOGRAPH - 0xB7CA: 0x6ED4, //CJK UNIFIED IDEOGRAPH - 0xB7CB: 0x6EAA, //CJK UNIFIED IDEOGRAPH - 0xB7CC: 0x6EA7, //CJK UNIFIED IDEOGRAPH - 0xB7CD: 0x6EB4, //CJK UNIFIED IDEOGRAPH - 0xB7CE: 0x714E, //CJK UNIFIED IDEOGRAPH - 0xB7CF: 0x7159, //CJK UNIFIED IDEOGRAPH - 0xB7D0: 0x7169, //CJK UNIFIED IDEOGRAPH - 0xB7D1: 0x7164, //CJK UNIFIED IDEOGRAPH - 0xB7D2: 0x7149, //CJK UNIFIED IDEOGRAPH - 0xB7D3: 0x7167, //CJK UNIFIED IDEOGRAPH - 0xB7D4: 0x715C, //CJK UNIFIED IDEOGRAPH - 0xB7D5: 0x716C, //CJK UNIFIED IDEOGRAPH - 0xB7D6: 0x7166, //CJK UNIFIED IDEOGRAPH - 0xB7D7: 0x714C, //CJK UNIFIED IDEOGRAPH - 0xB7D8: 0x7165, //CJK UNIFIED IDEOGRAPH - 0xB7D9: 0x715E, //CJK UNIFIED IDEOGRAPH - 0xB7DA: 0x7146, //CJK UNIFIED IDEOGRAPH - 0xB7DB: 0x7168, //CJK UNIFIED IDEOGRAPH - 0xB7DC: 0x7156, //CJK UNIFIED IDEOGRAPH - 0xB7DD: 0x723A, //CJK UNIFIED IDEOGRAPH - 0xB7DE: 0x7252, //CJK UNIFIED IDEOGRAPH - 0xB7DF: 0x7337, //CJK UNIFIED IDEOGRAPH - 0xB7E0: 0x7345, //CJK UNIFIED IDEOGRAPH - 0xB7E1: 0x733F, //CJK UNIFIED IDEOGRAPH - 0xB7E2: 0x733E, //CJK UNIFIED IDEOGRAPH - 0xB7E3: 0x746F, //CJK UNIFIED IDEOGRAPH - 0xB7E4: 0x745A, //CJK UNIFIED IDEOGRAPH - 0xB7E5: 0x7455, //CJK UNIFIED IDEOGRAPH - 0xB7E6: 0x745F, //CJK UNIFIED IDEOGRAPH - 0xB7E7: 0x745E, //CJK UNIFIED IDEOGRAPH - 0xB7E8: 0x7441, //CJK UNIFIED IDEOGRAPH - 0xB7E9: 0x743F, //CJK UNIFIED IDEOGRAPH - 0xB7EA: 0x7459, //CJK UNIFIED IDEOGRAPH - 0xB7EB: 0x745B, //CJK UNIFIED IDEOGRAPH - 0xB7EC: 0x745C, //CJK UNIFIED IDEOGRAPH - 0xB7ED: 0x7576, //CJK UNIFIED IDEOGRAPH - 0xB7EE: 0x7578, //CJK UNIFIED IDEOGRAPH - 0xB7EF: 0x7600, //CJK UNIFIED IDEOGRAPH - 0xB7F0: 0x75F0, //CJK UNIFIED IDEOGRAPH - 0xB7F1: 0x7601, //CJK UNIFIED IDEOGRAPH - 0xB7F2: 0x75F2, //CJK UNIFIED IDEOGRAPH - 0xB7F3: 0x75F1, //CJK UNIFIED IDEOGRAPH - 0xB7F4: 0x75FA, //CJK UNIFIED IDEOGRAPH - 0xB7F5: 0x75FF, //CJK UNIFIED IDEOGRAPH - 0xB7F6: 0x75F4, //CJK UNIFIED IDEOGRAPH - 0xB7F7: 0x75F3, //CJK UNIFIED IDEOGRAPH - 0xB7F8: 0x76DE, //CJK UNIFIED IDEOGRAPH - 0xB7F9: 0x76DF, //CJK UNIFIED IDEOGRAPH - 0xB7FA: 0x775B, //CJK UNIFIED IDEOGRAPH - 0xB7FB: 0x776B, //CJK UNIFIED IDEOGRAPH - 0xB7FC: 0x7766, //CJK UNIFIED IDEOGRAPH - 0xB7FD: 0x775E, //CJK UNIFIED IDEOGRAPH - 0xB7FE: 0x7763, //CJK UNIFIED IDEOGRAPH - 0xB840: 0x7779, //CJK UNIFIED IDEOGRAPH - 0xB841: 0x776A, //CJK UNIFIED IDEOGRAPH - 0xB842: 0x776C, //CJK UNIFIED IDEOGRAPH - 0xB843: 0x775C, //CJK UNIFIED IDEOGRAPH - 0xB844: 0x7765, //CJK UNIFIED IDEOGRAPH - 0xB845: 0x7768, //CJK UNIFIED IDEOGRAPH - 0xB846: 0x7762, //CJK UNIFIED IDEOGRAPH - 0xB847: 0x77EE, //CJK UNIFIED IDEOGRAPH - 0xB848: 0x788E, //CJK UNIFIED IDEOGRAPH - 0xB849: 0x78B0, //CJK UNIFIED IDEOGRAPH - 0xB84A: 0x7897, //CJK UNIFIED IDEOGRAPH - 0xB84B: 0x7898, //CJK UNIFIED IDEOGRAPH - 0xB84C: 0x788C, //CJK UNIFIED IDEOGRAPH - 0xB84D: 0x7889, //CJK UNIFIED IDEOGRAPH - 0xB84E: 0x787C, //CJK UNIFIED IDEOGRAPH - 0xB84F: 0x7891, //CJK UNIFIED IDEOGRAPH - 0xB850: 0x7893, //CJK UNIFIED IDEOGRAPH - 0xB851: 0x787F, //CJK UNIFIED IDEOGRAPH - 0xB852: 0x797A, //CJK UNIFIED IDEOGRAPH - 0xB853: 0x797F, //CJK UNIFIED IDEOGRAPH - 0xB854: 0x7981, //CJK UNIFIED IDEOGRAPH - 0xB855: 0x842C, //CJK UNIFIED IDEOGRAPH - 0xB856: 0x79BD, //CJK UNIFIED IDEOGRAPH - 0xB857: 0x7A1C, //CJK UNIFIED IDEOGRAPH - 0xB858: 0x7A1A, //CJK UNIFIED IDEOGRAPH - 0xB859: 0x7A20, //CJK UNIFIED IDEOGRAPH - 0xB85A: 0x7A14, //CJK UNIFIED IDEOGRAPH - 0xB85B: 0x7A1F, //CJK UNIFIED IDEOGRAPH - 0xB85C: 0x7A1E, //CJK UNIFIED IDEOGRAPH - 0xB85D: 0x7A9F, //CJK UNIFIED IDEOGRAPH - 0xB85E: 0x7AA0, //CJK UNIFIED IDEOGRAPH - 0xB85F: 0x7B77, //CJK UNIFIED IDEOGRAPH - 0xB860: 0x7BC0, //CJK UNIFIED IDEOGRAPH - 0xB861: 0x7B60, //CJK UNIFIED IDEOGRAPH - 0xB862: 0x7B6E, //CJK UNIFIED IDEOGRAPH - 0xB863: 0x7B67, //CJK UNIFIED IDEOGRAPH - 0xB864: 0x7CB1, //CJK UNIFIED IDEOGRAPH - 0xB865: 0x7CB3, //CJK UNIFIED IDEOGRAPH - 0xB866: 0x7CB5, //CJK UNIFIED IDEOGRAPH - 0xB867: 0x7D93, //CJK UNIFIED IDEOGRAPH - 0xB868: 0x7D79, //CJK UNIFIED IDEOGRAPH - 0xB869: 0x7D91, //CJK UNIFIED IDEOGRAPH - 0xB86A: 0x7D81, //CJK UNIFIED IDEOGRAPH - 0xB86B: 0x7D8F, //CJK UNIFIED IDEOGRAPH - 0xB86C: 0x7D5B, //CJK UNIFIED IDEOGRAPH - 0xB86D: 0x7F6E, //CJK UNIFIED IDEOGRAPH - 0xB86E: 0x7F69, //CJK UNIFIED IDEOGRAPH - 0xB86F: 0x7F6A, //CJK UNIFIED IDEOGRAPH - 0xB870: 0x7F72, //CJK UNIFIED IDEOGRAPH - 0xB871: 0x7FA9, //CJK UNIFIED IDEOGRAPH - 0xB872: 0x7FA8, //CJK UNIFIED IDEOGRAPH - 0xB873: 0x7FA4, //CJK UNIFIED IDEOGRAPH - 0xB874: 0x8056, //CJK UNIFIED IDEOGRAPH - 0xB875: 0x8058, //CJK UNIFIED IDEOGRAPH - 0xB876: 0x8086, //CJK UNIFIED IDEOGRAPH - 0xB877: 0x8084, //CJK UNIFIED IDEOGRAPH - 0xB878: 0x8171, //CJK UNIFIED IDEOGRAPH - 0xB879: 0x8170, //CJK UNIFIED IDEOGRAPH - 0xB87A: 0x8178, //CJK UNIFIED IDEOGRAPH - 0xB87B: 0x8165, //CJK UNIFIED IDEOGRAPH - 0xB87C: 0x816E, //CJK UNIFIED IDEOGRAPH - 0xB87D: 0x8173, //CJK UNIFIED IDEOGRAPH - 0xB87E: 0x816B, //CJK UNIFIED IDEOGRAPH - 0xB8A1: 0x8179, //CJK UNIFIED IDEOGRAPH - 0xB8A2: 0x817A, //CJK UNIFIED IDEOGRAPH - 0xB8A3: 0x8166, //CJK UNIFIED IDEOGRAPH - 0xB8A4: 0x8205, //CJK UNIFIED IDEOGRAPH - 0xB8A5: 0x8247, //CJK UNIFIED IDEOGRAPH - 0xB8A6: 0x8482, //CJK UNIFIED IDEOGRAPH - 0xB8A7: 0x8477, //CJK UNIFIED IDEOGRAPH - 0xB8A8: 0x843D, //CJK UNIFIED IDEOGRAPH - 0xB8A9: 0x8431, //CJK UNIFIED IDEOGRAPH - 0xB8AA: 0x8475, //CJK UNIFIED IDEOGRAPH - 0xB8AB: 0x8466, //CJK UNIFIED IDEOGRAPH - 0xB8AC: 0x846B, //CJK UNIFIED IDEOGRAPH - 0xB8AD: 0x8449, //CJK UNIFIED IDEOGRAPH - 0xB8AE: 0x846C, //CJK UNIFIED IDEOGRAPH - 0xB8AF: 0x845B, //CJK UNIFIED IDEOGRAPH - 0xB8B0: 0x843C, //CJK UNIFIED IDEOGRAPH - 0xB8B1: 0x8435, //CJK UNIFIED IDEOGRAPH - 0xB8B2: 0x8461, //CJK UNIFIED IDEOGRAPH - 0xB8B3: 0x8463, //CJK UNIFIED IDEOGRAPH - 0xB8B4: 0x8469, //CJK UNIFIED IDEOGRAPH - 0xB8B5: 0x846D, //CJK UNIFIED IDEOGRAPH - 0xB8B6: 0x8446, //CJK UNIFIED IDEOGRAPH - 0xB8B7: 0x865E, //CJK UNIFIED IDEOGRAPH - 0xB8B8: 0x865C, //CJK UNIFIED IDEOGRAPH - 0xB8B9: 0x865F, //CJK UNIFIED IDEOGRAPH - 0xB8BA: 0x86F9, //CJK UNIFIED IDEOGRAPH - 0xB8BB: 0x8713, //CJK UNIFIED IDEOGRAPH - 0xB8BC: 0x8708, //CJK UNIFIED IDEOGRAPH - 0xB8BD: 0x8707, //CJK UNIFIED IDEOGRAPH - 0xB8BE: 0x8700, //CJK UNIFIED IDEOGRAPH - 0xB8BF: 0x86FE, //CJK UNIFIED IDEOGRAPH - 0xB8C0: 0x86FB, //CJK UNIFIED IDEOGRAPH - 0xB8C1: 0x8702, //CJK UNIFIED IDEOGRAPH - 0xB8C2: 0x8703, //CJK UNIFIED IDEOGRAPH - 0xB8C3: 0x8706, //CJK UNIFIED IDEOGRAPH - 0xB8C4: 0x870A, //CJK UNIFIED IDEOGRAPH - 0xB8C5: 0x8859, //CJK UNIFIED IDEOGRAPH - 0xB8C6: 0x88DF, //CJK UNIFIED IDEOGRAPH - 0xB8C7: 0x88D4, //CJK UNIFIED IDEOGRAPH - 0xB8C8: 0x88D9, //CJK UNIFIED IDEOGRAPH - 0xB8C9: 0x88DC, //CJK UNIFIED IDEOGRAPH - 0xB8CA: 0x88D8, //CJK UNIFIED IDEOGRAPH - 0xB8CB: 0x88DD, //CJK UNIFIED IDEOGRAPH - 0xB8CC: 0x88E1, //CJK UNIFIED IDEOGRAPH - 0xB8CD: 0x88CA, //CJK UNIFIED IDEOGRAPH - 0xB8CE: 0x88D5, //CJK UNIFIED IDEOGRAPH - 0xB8CF: 0x88D2, //CJK UNIFIED IDEOGRAPH - 0xB8D0: 0x899C, //CJK UNIFIED IDEOGRAPH - 0xB8D1: 0x89E3, //CJK UNIFIED IDEOGRAPH - 0xB8D2: 0x8A6B, //CJK UNIFIED IDEOGRAPH - 0xB8D3: 0x8A72, //CJK UNIFIED IDEOGRAPH - 0xB8D4: 0x8A73, //CJK UNIFIED IDEOGRAPH - 0xB8D5: 0x8A66, //CJK UNIFIED IDEOGRAPH - 0xB8D6: 0x8A69, //CJK UNIFIED IDEOGRAPH - 0xB8D7: 0x8A70, //CJK UNIFIED IDEOGRAPH - 0xB8D8: 0x8A87, //CJK UNIFIED IDEOGRAPH - 0xB8D9: 0x8A7C, //CJK UNIFIED IDEOGRAPH - 0xB8DA: 0x8A63, //CJK UNIFIED IDEOGRAPH - 0xB8DB: 0x8AA0, //CJK UNIFIED IDEOGRAPH - 0xB8DC: 0x8A71, //CJK UNIFIED IDEOGRAPH - 0xB8DD: 0x8A85, //CJK UNIFIED IDEOGRAPH - 0xB8DE: 0x8A6D, //CJK UNIFIED IDEOGRAPH - 0xB8DF: 0x8A62, //CJK UNIFIED IDEOGRAPH - 0xB8E0: 0x8A6E, //CJK UNIFIED IDEOGRAPH - 0xB8E1: 0x8A6C, //CJK UNIFIED IDEOGRAPH - 0xB8E2: 0x8A79, //CJK UNIFIED IDEOGRAPH - 0xB8E3: 0x8A7B, //CJK UNIFIED IDEOGRAPH - 0xB8E4: 0x8A3E, //CJK UNIFIED IDEOGRAPH - 0xB8E5: 0x8A68, //CJK UNIFIED IDEOGRAPH - 0xB8E6: 0x8C62, //CJK UNIFIED IDEOGRAPH - 0xB8E7: 0x8C8A, //CJK UNIFIED IDEOGRAPH - 0xB8E8: 0x8C89, //CJK UNIFIED IDEOGRAPH - 0xB8E9: 0x8CCA, //CJK UNIFIED IDEOGRAPH - 0xB8EA: 0x8CC7, //CJK UNIFIED IDEOGRAPH - 0xB8EB: 0x8CC8, //CJK UNIFIED IDEOGRAPH - 0xB8EC: 0x8CC4, //CJK UNIFIED IDEOGRAPH - 0xB8ED: 0x8CB2, //CJK UNIFIED IDEOGRAPH - 0xB8EE: 0x8CC3, //CJK UNIFIED IDEOGRAPH - 0xB8EF: 0x8CC2, //CJK UNIFIED IDEOGRAPH - 0xB8F0: 0x8CC5, //CJK UNIFIED IDEOGRAPH - 0xB8F1: 0x8DE1, //CJK UNIFIED IDEOGRAPH - 0xB8F2: 0x8DDF, //CJK UNIFIED IDEOGRAPH - 0xB8F3: 0x8DE8, //CJK UNIFIED IDEOGRAPH - 0xB8F4: 0x8DEF, //CJK UNIFIED IDEOGRAPH - 0xB8F5: 0x8DF3, //CJK UNIFIED IDEOGRAPH - 0xB8F6: 0x8DFA, //CJK UNIFIED IDEOGRAPH - 0xB8F7: 0x8DEA, //CJK UNIFIED IDEOGRAPH - 0xB8F8: 0x8DE4, //CJK UNIFIED IDEOGRAPH - 0xB8F9: 0x8DE6, //CJK UNIFIED IDEOGRAPH - 0xB8FA: 0x8EB2, //CJK UNIFIED IDEOGRAPH - 0xB8FB: 0x8F03, //CJK UNIFIED IDEOGRAPH - 0xB8FC: 0x8F09, //CJK UNIFIED IDEOGRAPH - 0xB8FD: 0x8EFE, //CJK UNIFIED IDEOGRAPH - 0xB8FE: 0x8F0A, //CJK UNIFIED IDEOGRAPH - 0xB940: 0x8F9F, //CJK UNIFIED IDEOGRAPH - 0xB941: 0x8FB2, //CJK UNIFIED IDEOGRAPH - 0xB942: 0x904B, //CJK UNIFIED IDEOGRAPH - 0xB943: 0x904A, //CJK UNIFIED IDEOGRAPH - 0xB944: 0x9053, //CJK UNIFIED IDEOGRAPH - 0xB945: 0x9042, //CJK UNIFIED IDEOGRAPH - 0xB946: 0x9054, //CJK UNIFIED IDEOGRAPH - 0xB947: 0x903C, //CJK UNIFIED IDEOGRAPH - 0xB948: 0x9055, //CJK UNIFIED IDEOGRAPH - 0xB949: 0x9050, //CJK UNIFIED IDEOGRAPH - 0xB94A: 0x9047, //CJK UNIFIED IDEOGRAPH - 0xB94B: 0x904F, //CJK UNIFIED IDEOGRAPH - 0xB94C: 0x904E, //CJK UNIFIED IDEOGRAPH - 0xB94D: 0x904D, //CJK UNIFIED IDEOGRAPH - 0xB94E: 0x9051, //CJK UNIFIED IDEOGRAPH - 0xB94F: 0x903E, //CJK UNIFIED IDEOGRAPH - 0xB950: 0x9041, //CJK UNIFIED IDEOGRAPH - 0xB951: 0x9112, //CJK UNIFIED IDEOGRAPH - 0xB952: 0x9117, //CJK UNIFIED IDEOGRAPH - 0xB953: 0x916C, //CJK UNIFIED IDEOGRAPH - 0xB954: 0x916A, //CJK UNIFIED IDEOGRAPH - 0xB955: 0x9169, //CJK UNIFIED IDEOGRAPH - 0xB956: 0x91C9, //CJK UNIFIED IDEOGRAPH - 0xB957: 0x9237, //CJK UNIFIED IDEOGRAPH - 0xB958: 0x9257, //CJK UNIFIED IDEOGRAPH - 0xB959: 0x9238, //CJK UNIFIED IDEOGRAPH - 0xB95A: 0x923D, //CJK UNIFIED IDEOGRAPH - 0xB95B: 0x9240, //CJK UNIFIED IDEOGRAPH - 0xB95C: 0x923E, //CJK UNIFIED IDEOGRAPH - 0xB95D: 0x925B, //CJK UNIFIED IDEOGRAPH - 0xB95E: 0x924B, //CJK UNIFIED IDEOGRAPH - 0xB95F: 0x9264, //CJK UNIFIED IDEOGRAPH - 0xB960: 0x9251, //CJK UNIFIED IDEOGRAPH - 0xB961: 0x9234, //CJK UNIFIED IDEOGRAPH - 0xB962: 0x9249, //CJK UNIFIED IDEOGRAPH - 0xB963: 0x924D, //CJK UNIFIED IDEOGRAPH - 0xB964: 0x9245, //CJK UNIFIED IDEOGRAPH - 0xB965: 0x9239, //CJK UNIFIED IDEOGRAPH - 0xB966: 0x923F, //CJK UNIFIED IDEOGRAPH - 0xB967: 0x925A, //CJK UNIFIED IDEOGRAPH - 0xB968: 0x9598, //CJK UNIFIED IDEOGRAPH - 0xB969: 0x9698, //CJK UNIFIED IDEOGRAPH - 0xB96A: 0x9694, //CJK UNIFIED IDEOGRAPH - 0xB96B: 0x9695, //CJK UNIFIED IDEOGRAPH - 0xB96C: 0x96CD, //CJK UNIFIED IDEOGRAPH - 0xB96D: 0x96CB, //CJK UNIFIED IDEOGRAPH - 0xB96E: 0x96C9, //CJK UNIFIED IDEOGRAPH - 0xB96F: 0x96CA, //CJK UNIFIED IDEOGRAPH - 0xB970: 0x96F7, //CJK UNIFIED IDEOGRAPH - 0xB971: 0x96FB, //CJK UNIFIED IDEOGRAPH - 0xB972: 0x96F9, //CJK UNIFIED IDEOGRAPH - 0xB973: 0x96F6, //CJK UNIFIED IDEOGRAPH - 0xB974: 0x9756, //CJK UNIFIED IDEOGRAPH - 0xB975: 0x9774, //CJK UNIFIED IDEOGRAPH - 0xB976: 0x9776, //CJK UNIFIED IDEOGRAPH - 0xB977: 0x9810, //CJK UNIFIED IDEOGRAPH - 0xB978: 0x9811, //CJK UNIFIED IDEOGRAPH - 0xB979: 0x9813, //CJK UNIFIED IDEOGRAPH - 0xB97A: 0x980A, //CJK UNIFIED IDEOGRAPH - 0xB97B: 0x9812, //CJK UNIFIED IDEOGRAPH - 0xB97C: 0x980C, //CJK UNIFIED IDEOGRAPH - 0xB97D: 0x98FC, //CJK UNIFIED IDEOGRAPH - 0xB97E: 0x98F4, //CJK UNIFIED IDEOGRAPH - 0xB9A1: 0x98FD, //CJK UNIFIED IDEOGRAPH - 0xB9A2: 0x98FE, //CJK UNIFIED IDEOGRAPH - 0xB9A3: 0x99B3, //CJK UNIFIED IDEOGRAPH - 0xB9A4: 0x99B1, //CJK UNIFIED IDEOGRAPH - 0xB9A5: 0x99B4, //CJK UNIFIED IDEOGRAPH - 0xB9A6: 0x9AE1, //CJK UNIFIED IDEOGRAPH - 0xB9A7: 0x9CE9, //CJK UNIFIED IDEOGRAPH - 0xB9A8: 0x9E82, //CJK UNIFIED IDEOGRAPH - 0xB9A9: 0x9F0E, //CJK UNIFIED IDEOGRAPH - 0xB9AA: 0x9F13, //CJK UNIFIED IDEOGRAPH - 0xB9AB: 0x9F20, //CJK UNIFIED IDEOGRAPH - 0xB9AC: 0x50E7, //CJK UNIFIED IDEOGRAPH - 0xB9AD: 0x50EE, //CJK UNIFIED IDEOGRAPH - 0xB9AE: 0x50E5, //CJK UNIFIED IDEOGRAPH - 0xB9AF: 0x50D6, //CJK UNIFIED IDEOGRAPH - 0xB9B0: 0x50ED, //CJK UNIFIED IDEOGRAPH - 0xB9B1: 0x50DA, //CJK UNIFIED IDEOGRAPH - 0xB9B2: 0x50D5, //CJK UNIFIED IDEOGRAPH - 0xB9B3: 0x50CF, //CJK UNIFIED IDEOGRAPH - 0xB9B4: 0x50D1, //CJK UNIFIED IDEOGRAPH - 0xB9B5: 0x50F1, //CJK UNIFIED IDEOGRAPH - 0xB9B6: 0x50CE, //CJK UNIFIED IDEOGRAPH - 0xB9B7: 0x50E9, //CJK UNIFIED IDEOGRAPH - 0xB9B8: 0x5162, //CJK UNIFIED IDEOGRAPH - 0xB9B9: 0x51F3, //CJK UNIFIED IDEOGRAPH - 0xB9BA: 0x5283, //CJK UNIFIED IDEOGRAPH - 0xB9BB: 0x5282, //CJK UNIFIED IDEOGRAPH - 0xB9BC: 0x5331, //CJK UNIFIED IDEOGRAPH - 0xB9BD: 0x53AD, //CJK UNIFIED IDEOGRAPH - 0xB9BE: 0x55FE, //CJK UNIFIED IDEOGRAPH - 0xB9BF: 0x5600, //CJK UNIFIED IDEOGRAPH - 0xB9C0: 0x561B, //CJK UNIFIED IDEOGRAPH - 0xB9C1: 0x5617, //CJK UNIFIED IDEOGRAPH - 0xB9C2: 0x55FD, //CJK UNIFIED IDEOGRAPH - 0xB9C3: 0x5614, //CJK UNIFIED IDEOGRAPH - 0xB9C4: 0x5606, //CJK UNIFIED IDEOGRAPH - 0xB9C5: 0x5609, //CJK UNIFIED IDEOGRAPH - 0xB9C6: 0x560D, //CJK UNIFIED IDEOGRAPH - 0xB9C7: 0x560E, //CJK UNIFIED IDEOGRAPH - 0xB9C8: 0x55F7, //CJK UNIFIED IDEOGRAPH - 0xB9C9: 0x5616, //CJK UNIFIED IDEOGRAPH - 0xB9CA: 0x561F, //CJK UNIFIED IDEOGRAPH - 0xB9CB: 0x5608, //CJK UNIFIED IDEOGRAPH - 0xB9CC: 0x5610, //CJK UNIFIED IDEOGRAPH - 0xB9CD: 0x55F6, //CJK UNIFIED IDEOGRAPH - 0xB9CE: 0x5718, //CJK UNIFIED IDEOGRAPH - 0xB9CF: 0x5716, //CJK UNIFIED IDEOGRAPH - 0xB9D0: 0x5875, //CJK UNIFIED IDEOGRAPH - 0xB9D1: 0x587E, //CJK UNIFIED IDEOGRAPH - 0xB9D2: 0x5883, //CJK UNIFIED IDEOGRAPH - 0xB9D3: 0x5893, //CJK UNIFIED IDEOGRAPH - 0xB9D4: 0x588A, //CJK UNIFIED IDEOGRAPH - 0xB9D5: 0x5879, //CJK UNIFIED IDEOGRAPH - 0xB9D6: 0x5885, //CJK UNIFIED IDEOGRAPH - 0xB9D7: 0x587D, //CJK UNIFIED IDEOGRAPH - 0xB9D8: 0x58FD, //CJK UNIFIED IDEOGRAPH - 0xB9D9: 0x5925, //CJK UNIFIED IDEOGRAPH - 0xB9DA: 0x5922, //CJK UNIFIED IDEOGRAPH - 0xB9DB: 0x5924, //CJK UNIFIED IDEOGRAPH - 0xB9DC: 0x596A, //CJK UNIFIED IDEOGRAPH - 0xB9DD: 0x5969, //CJK UNIFIED IDEOGRAPH - 0xB9DE: 0x5AE1, //CJK UNIFIED IDEOGRAPH - 0xB9DF: 0x5AE6, //CJK UNIFIED IDEOGRAPH - 0xB9E0: 0x5AE9, //CJK UNIFIED IDEOGRAPH - 0xB9E1: 0x5AD7, //CJK UNIFIED IDEOGRAPH - 0xB9E2: 0x5AD6, //CJK UNIFIED IDEOGRAPH - 0xB9E3: 0x5AD8, //CJK UNIFIED IDEOGRAPH - 0xB9E4: 0x5AE3, //CJK UNIFIED IDEOGRAPH - 0xB9E5: 0x5B75, //CJK UNIFIED IDEOGRAPH - 0xB9E6: 0x5BDE, //CJK UNIFIED IDEOGRAPH - 0xB9E7: 0x5BE7, //CJK UNIFIED IDEOGRAPH - 0xB9E8: 0x5BE1, //CJK UNIFIED IDEOGRAPH - 0xB9E9: 0x5BE5, //CJK UNIFIED IDEOGRAPH - 0xB9EA: 0x5BE6, //CJK UNIFIED IDEOGRAPH - 0xB9EB: 0x5BE8, //CJK UNIFIED IDEOGRAPH - 0xB9EC: 0x5BE2, //CJK UNIFIED IDEOGRAPH - 0xB9ED: 0x5BE4, //CJK UNIFIED IDEOGRAPH - 0xB9EE: 0x5BDF, //CJK UNIFIED IDEOGRAPH - 0xB9EF: 0x5C0D, //CJK UNIFIED IDEOGRAPH - 0xB9F0: 0x5C62, //CJK UNIFIED IDEOGRAPH - 0xB9F1: 0x5D84, //CJK UNIFIED IDEOGRAPH - 0xB9F2: 0x5D87, //CJK UNIFIED IDEOGRAPH - 0xB9F3: 0x5E5B, //CJK UNIFIED IDEOGRAPH - 0xB9F4: 0x5E63, //CJK UNIFIED IDEOGRAPH - 0xB9F5: 0x5E55, //CJK UNIFIED IDEOGRAPH - 0xB9F6: 0x5E57, //CJK UNIFIED IDEOGRAPH - 0xB9F7: 0x5E54, //CJK UNIFIED IDEOGRAPH - 0xB9F8: 0x5ED3, //CJK UNIFIED IDEOGRAPH - 0xB9F9: 0x5ED6, //CJK UNIFIED IDEOGRAPH - 0xB9FA: 0x5F0A, //CJK UNIFIED IDEOGRAPH - 0xB9FB: 0x5F46, //CJK UNIFIED IDEOGRAPH - 0xB9FC: 0x5F70, //CJK UNIFIED IDEOGRAPH - 0xB9FD: 0x5FB9, //CJK UNIFIED IDEOGRAPH - 0xB9FE: 0x6147, //CJK UNIFIED IDEOGRAPH - 0xBA40: 0x613F, //CJK UNIFIED IDEOGRAPH - 0xBA41: 0x614B, //CJK UNIFIED IDEOGRAPH - 0xBA42: 0x6177, //CJK UNIFIED IDEOGRAPH - 0xBA43: 0x6162, //CJK UNIFIED IDEOGRAPH - 0xBA44: 0x6163, //CJK UNIFIED IDEOGRAPH - 0xBA45: 0x615F, //CJK UNIFIED IDEOGRAPH - 0xBA46: 0x615A, //CJK UNIFIED IDEOGRAPH - 0xBA47: 0x6158, //CJK UNIFIED IDEOGRAPH - 0xBA48: 0x6175, //CJK UNIFIED IDEOGRAPH - 0xBA49: 0x622A, //CJK UNIFIED IDEOGRAPH - 0xBA4A: 0x6487, //CJK UNIFIED IDEOGRAPH - 0xBA4B: 0x6458, //CJK UNIFIED IDEOGRAPH - 0xBA4C: 0x6454, //CJK UNIFIED IDEOGRAPH - 0xBA4D: 0x64A4, //CJK UNIFIED IDEOGRAPH - 0xBA4E: 0x6478, //CJK UNIFIED IDEOGRAPH - 0xBA4F: 0x645F, //CJK UNIFIED IDEOGRAPH - 0xBA50: 0x647A, //CJK UNIFIED IDEOGRAPH - 0xBA51: 0x6451, //CJK UNIFIED IDEOGRAPH - 0xBA52: 0x6467, //CJK UNIFIED IDEOGRAPH - 0xBA53: 0x6434, //CJK UNIFIED IDEOGRAPH - 0xBA54: 0x646D, //CJK UNIFIED IDEOGRAPH - 0xBA55: 0x647B, //CJK UNIFIED IDEOGRAPH - 0xBA56: 0x6572, //CJK UNIFIED IDEOGRAPH - 0xBA57: 0x65A1, //CJK UNIFIED IDEOGRAPH - 0xBA58: 0x65D7, //CJK UNIFIED IDEOGRAPH - 0xBA59: 0x65D6, //CJK UNIFIED IDEOGRAPH - 0xBA5A: 0x66A2, //CJK UNIFIED IDEOGRAPH - 0xBA5B: 0x66A8, //CJK UNIFIED IDEOGRAPH - 0xBA5C: 0x669D, //CJK UNIFIED IDEOGRAPH - 0xBA5D: 0x699C, //CJK UNIFIED IDEOGRAPH - 0xBA5E: 0x69A8, //CJK UNIFIED IDEOGRAPH - 0xBA5F: 0x6995, //CJK UNIFIED IDEOGRAPH - 0xBA60: 0x69C1, //CJK UNIFIED IDEOGRAPH - 0xBA61: 0x69AE, //CJK UNIFIED IDEOGRAPH - 0xBA62: 0x69D3, //CJK UNIFIED IDEOGRAPH - 0xBA63: 0x69CB, //CJK UNIFIED IDEOGRAPH - 0xBA64: 0x699B, //CJK UNIFIED IDEOGRAPH - 0xBA65: 0x69B7, //CJK UNIFIED IDEOGRAPH - 0xBA66: 0x69BB, //CJK UNIFIED IDEOGRAPH - 0xBA67: 0x69AB, //CJK UNIFIED IDEOGRAPH - 0xBA68: 0x69B4, //CJK UNIFIED IDEOGRAPH - 0xBA69: 0x69D0, //CJK UNIFIED IDEOGRAPH - 0xBA6A: 0x69CD, //CJK UNIFIED IDEOGRAPH - 0xBA6B: 0x69AD, //CJK UNIFIED IDEOGRAPH - 0xBA6C: 0x69CC, //CJK UNIFIED IDEOGRAPH - 0xBA6D: 0x69A6, //CJK UNIFIED IDEOGRAPH - 0xBA6E: 0x69C3, //CJK UNIFIED IDEOGRAPH - 0xBA6F: 0x69A3, //CJK UNIFIED IDEOGRAPH - 0xBA70: 0x6B49, //CJK UNIFIED IDEOGRAPH - 0xBA71: 0x6B4C, //CJK UNIFIED IDEOGRAPH - 0xBA72: 0x6C33, //CJK UNIFIED IDEOGRAPH - 0xBA73: 0x6F33, //CJK UNIFIED IDEOGRAPH - 0xBA74: 0x6F14, //CJK UNIFIED IDEOGRAPH - 0xBA75: 0x6EFE, //CJK UNIFIED IDEOGRAPH - 0xBA76: 0x6F13, //CJK UNIFIED IDEOGRAPH - 0xBA77: 0x6EF4, //CJK UNIFIED IDEOGRAPH - 0xBA78: 0x6F29, //CJK UNIFIED IDEOGRAPH - 0xBA79: 0x6F3E, //CJK UNIFIED IDEOGRAPH - 0xBA7A: 0x6F20, //CJK UNIFIED IDEOGRAPH - 0xBA7B: 0x6F2C, //CJK UNIFIED IDEOGRAPH - 0xBA7C: 0x6F0F, //CJK UNIFIED IDEOGRAPH - 0xBA7D: 0x6F02, //CJK UNIFIED IDEOGRAPH - 0xBA7E: 0x6F22, //CJK UNIFIED IDEOGRAPH - 0xBAA1: 0x6EFF, //CJK UNIFIED IDEOGRAPH - 0xBAA2: 0x6EEF, //CJK UNIFIED IDEOGRAPH - 0xBAA3: 0x6F06, //CJK UNIFIED IDEOGRAPH - 0xBAA4: 0x6F31, //CJK UNIFIED IDEOGRAPH - 0xBAA5: 0x6F38, //CJK UNIFIED IDEOGRAPH - 0xBAA6: 0x6F32, //CJK UNIFIED IDEOGRAPH - 0xBAA7: 0x6F23, //CJK UNIFIED IDEOGRAPH - 0xBAA8: 0x6F15, //CJK UNIFIED IDEOGRAPH - 0xBAA9: 0x6F2B, //CJK UNIFIED IDEOGRAPH - 0xBAAA: 0x6F2F, //CJK UNIFIED IDEOGRAPH - 0xBAAB: 0x6F88, //CJK UNIFIED IDEOGRAPH - 0xBAAC: 0x6F2A, //CJK UNIFIED IDEOGRAPH - 0xBAAD: 0x6EEC, //CJK UNIFIED IDEOGRAPH - 0xBAAE: 0x6F01, //CJK UNIFIED IDEOGRAPH - 0xBAAF: 0x6EF2, //CJK UNIFIED IDEOGRAPH - 0xBAB0: 0x6ECC, //CJK UNIFIED IDEOGRAPH - 0xBAB1: 0x6EF7, //CJK UNIFIED IDEOGRAPH - 0xBAB2: 0x7194, //CJK UNIFIED IDEOGRAPH - 0xBAB3: 0x7199, //CJK UNIFIED IDEOGRAPH - 0xBAB4: 0x717D, //CJK UNIFIED IDEOGRAPH - 0xBAB5: 0x718A, //CJK UNIFIED IDEOGRAPH - 0xBAB6: 0x7184, //CJK UNIFIED IDEOGRAPH - 0xBAB7: 0x7192, //CJK UNIFIED IDEOGRAPH - 0xBAB8: 0x723E, //CJK UNIFIED IDEOGRAPH - 0xBAB9: 0x7292, //CJK UNIFIED IDEOGRAPH - 0xBABA: 0x7296, //CJK UNIFIED IDEOGRAPH - 0xBABB: 0x7344, //CJK UNIFIED IDEOGRAPH - 0xBABC: 0x7350, //CJK UNIFIED IDEOGRAPH - 0xBABD: 0x7464, //CJK UNIFIED IDEOGRAPH - 0xBABE: 0x7463, //CJK UNIFIED IDEOGRAPH - 0xBABF: 0x746A, //CJK UNIFIED IDEOGRAPH - 0xBAC0: 0x7470, //CJK UNIFIED IDEOGRAPH - 0xBAC1: 0x746D, //CJK UNIFIED IDEOGRAPH - 0xBAC2: 0x7504, //CJK UNIFIED IDEOGRAPH - 0xBAC3: 0x7591, //CJK UNIFIED IDEOGRAPH - 0xBAC4: 0x7627, //CJK UNIFIED IDEOGRAPH - 0xBAC5: 0x760D, //CJK UNIFIED IDEOGRAPH - 0xBAC6: 0x760B, //CJK UNIFIED IDEOGRAPH - 0xBAC7: 0x7609, //CJK UNIFIED IDEOGRAPH - 0xBAC8: 0x7613, //CJK UNIFIED IDEOGRAPH - 0xBAC9: 0x76E1, //CJK UNIFIED IDEOGRAPH - 0xBACA: 0x76E3, //CJK UNIFIED IDEOGRAPH - 0xBACB: 0x7784, //CJK UNIFIED IDEOGRAPH - 0xBACC: 0x777D, //CJK UNIFIED IDEOGRAPH - 0xBACD: 0x777F, //CJK UNIFIED IDEOGRAPH - 0xBACE: 0x7761, //CJK UNIFIED IDEOGRAPH - 0xBACF: 0x78C1, //CJK UNIFIED IDEOGRAPH - 0xBAD0: 0x789F, //CJK UNIFIED IDEOGRAPH - 0xBAD1: 0x78A7, //CJK UNIFIED IDEOGRAPH - 0xBAD2: 0x78B3, //CJK UNIFIED IDEOGRAPH - 0xBAD3: 0x78A9, //CJK UNIFIED IDEOGRAPH - 0xBAD4: 0x78A3, //CJK UNIFIED IDEOGRAPH - 0xBAD5: 0x798E, //CJK UNIFIED IDEOGRAPH - 0xBAD6: 0x798F, //CJK UNIFIED IDEOGRAPH - 0xBAD7: 0x798D, //CJK UNIFIED IDEOGRAPH - 0xBAD8: 0x7A2E, //CJK UNIFIED IDEOGRAPH - 0xBAD9: 0x7A31, //CJK UNIFIED IDEOGRAPH - 0xBADA: 0x7AAA, //CJK UNIFIED IDEOGRAPH - 0xBADB: 0x7AA9, //CJK UNIFIED IDEOGRAPH - 0xBADC: 0x7AED, //CJK UNIFIED IDEOGRAPH - 0xBADD: 0x7AEF, //CJK UNIFIED IDEOGRAPH - 0xBADE: 0x7BA1, //CJK UNIFIED IDEOGRAPH - 0xBADF: 0x7B95, //CJK UNIFIED IDEOGRAPH - 0xBAE0: 0x7B8B, //CJK UNIFIED IDEOGRAPH - 0xBAE1: 0x7B75, //CJK UNIFIED IDEOGRAPH - 0xBAE2: 0x7B97, //CJK UNIFIED IDEOGRAPH - 0xBAE3: 0x7B9D, //CJK UNIFIED IDEOGRAPH - 0xBAE4: 0x7B94, //CJK UNIFIED IDEOGRAPH - 0xBAE5: 0x7B8F, //CJK UNIFIED IDEOGRAPH - 0xBAE6: 0x7BB8, //CJK UNIFIED IDEOGRAPH - 0xBAE7: 0x7B87, //CJK UNIFIED IDEOGRAPH - 0xBAE8: 0x7B84, //CJK UNIFIED IDEOGRAPH - 0xBAE9: 0x7CB9, //CJK UNIFIED IDEOGRAPH - 0xBAEA: 0x7CBD, //CJK UNIFIED IDEOGRAPH - 0xBAEB: 0x7CBE, //CJK UNIFIED IDEOGRAPH - 0xBAEC: 0x7DBB, //CJK UNIFIED IDEOGRAPH - 0xBAED: 0x7DB0, //CJK UNIFIED IDEOGRAPH - 0xBAEE: 0x7D9C, //CJK UNIFIED IDEOGRAPH - 0xBAEF: 0x7DBD, //CJK UNIFIED IDEOGRAPH - 0xBAF0: 0x7DBE, //CJK UNIFIED IDEOGRAPH - 0xBAF1: 0x7DA0, //CJK UNIFIED IDEOGRAPH - 0xBAF2: 0x7DCA, //CJK UNIFIED IDEOGRAPH - 0xBAF3: 0x7DB4, //CJK UNIFIED IDEOGRAPH - 0xBAF4: 0x7DB2, //CJK UNIFIED IDEOGRAPH - 0xBAF5: 0x7DB1, //CJK UNIFIED IDEOGRAPH - 0xBAF6: 0x7DBA, //CJK UNIFIED IDEOGRAPH - 0xBAF7: 0x7DA2, //CJK UNIFIED IDEOGRAPH - 0xBAF8: 0x7DBF, //CJK UNIFIED IDEOGRAPH - 0xBAF9: 0x7DB5, //CJK UNIFIED IDEOGRAPH - 0xBAFA: 0x7DB8, //CJK UNIFIED IDEOGRAPH - 0xBAFB: 0x7DAD, //CJK UNIFIED IDEOGRAPH - 0xBAFC: 0x7DD2, //CJK UNIFIED IDEOGRAPH - 0xBAFD: 0x7DC7, //CJK UNIFIED IDEOGRAPH - 0xBAFE: 0x7DAC, //CJK UNIFIED IDEOGRAPH - 0xBB40: 0x7F70, //CJK UNIFIED IDEOGRAPH - 0xBB41: 0x7FE0, //CJK UNIFIED IDEOGRAPH - 0xBB42: 0x7FE1, //CJK UNIFIED IDEOGRAPH - 0xBB43: 0x7FDF, //CJK UNIFIED IDEOGRAPH - 0xBB44: 0x805E, //CJK UNIFIED IDEOGRAPH - 0xBB45: 0x805A, //CJK UNIFIED IDEOGRAPH - 0xBB46: 0x8087, //CJK UNIFIED IDEOGRAPH - 0xBB47: 0x8150, //CJK UNIFIED IDEOGRAPH - 0xBB48: 0x8180, //CJK UNIFIED IDEOGRAPH - 0xBB49: 0x818F, //CJK UNIFIED IDEOGRAPH - 0xBB4A: 0x8188, //CJK UNIFIED IDEOGRAPH - 0xBB4B: 0x818A, //CJK UNIFIED IDEOGRAPH - 0xBB4C: 0x817F, //CJK UNIFIED IDEOGRAPH - 0xBB4D: 0x8182, //CJK UNIFIED IDEOGRAPH - 0xBB4E: 0x81E7, //CJK UNIFIED IDEOGRAPH - 0xBB4F: 0x81FA, //CJK UNIFIED IDEOGRAPH - 0xBB50: 0x8207, //CJK UNIFIED IDEOGRAPH - 0xBB51: 0x8214, //CJK UNIFIED IDEOGRAPH - 0xBB52: 0x821E, //CJK UNIFIED IDEOGRAPH - 0xBB53: 0x824B, //CJK UNIFIED IDEOGRAPH - 0xBB54: 0x84C9, //CJK UNIFIED IDEOGRAPH - 0xBB55: 0x84BF, //CJK UNIFIED IDEOGRAPH - 0xBB56: 0x84C6, //CJK UNIFIED IDEOGRAPH - 0xBB57: 0x84C4, //CJK UNIFIED IDEOGRAPH - 0xBB58: 0x8499, //CJK UNIFIED IDEOGRAPH - 0xBB59: 0x849E, //CJK UNIFIED IDEOGRAPH - 0xBB5A: 0x84B2, //CJK UNIFIED IDEOGRAPH - 0xBB5B: 0x849C, //CJK UNIFIED IDEOGRAPH - 0xBB5C: 0x84CB, //CJK UNIFIED IDEOGRAPH - 0xBB5D: 0x84B8, //CJK UNIFIED IDEOGRAPH - 0xBB5E: 0x84C0, //CJK UNIFIED IDEOGRAPH - 0xBB5F: 0x84D3, //CJK UNIFIED IDEOGRAPH - 0xBB60: 0x8490, //CJK UNIFIED IDEOGRAPH - 0xBB61: 0x84BC, //CJK UNIFIED IDEOGRAPH - 0xBB62: 0x84D1, //CJK UNIFIED IDEOGRAPH - 0xBB63: 0x84CA, //CJK UNIFIED IDEOGRAPH - 0xBB64: 0x873F, //CJK UNIFIED IDEOGRAPH - 0xBB65: 0x871C, //CJK UNIFIED IDEOGRAPH - 0xBB66: 0x873B, //CJK UNIFIED IDEOGRAPH - 0xBB67: 0x8722, //CJK UNIFIED IDEOGRAPH - 0xBB68: 0x8725, //CJK UNIFIED IDEOGRAPH - 0xBB69: 0x8734, //CJK UNIFIED IDEOGRAPH - 0xBB6A: 0x8718, //CJK UNIFIED IDEOGRAPH - 0xBB6B: 0x8755, //CJK UNIFIED IDEOGRAPH - 0xBB6C: 0x8737, //CJK UNIFIED IDEOGRAPH - 0xBB6D: 0x8729, //CJK UNIFIED IDEOGRAPH - 0xBB6E: 0x88F3, //CJK UNIFIED IDEOGRAPH - 0xBB6F: 0x8902, //CJK UNIFIED IDEOGRAPH - 0xBB70: 0x88F4, //CJK UNIFIED IDEOGRAPH - 0xBB71: 0x88F9, //CJK UNIFIED IDEOGRAPH - 0xBB72: 0x88F8, //CJK UNIFIED IDEOGRAPH - 0xBB73: 0x88FD, //CJK UNIFIED IDEOGRAPH - 0xBB74: 0x88E8, //CJK UNIFIED IDEOGRAPH - 0xBB75: 0x891A, //CJK UNIFIED IDEOGRAPH - 0xBB76: 0x88EF, //CJK UNIFIED IDEOGRAPH - 0xBB77: 0x8AA6, //CJK UNIFIED IDEOGRAPH - 0xBB78: 0x8A8C, //CJK UNIFIED IDEOGRAPH - 0xBB79: 0x8A9E, //CJK UNIFIED IDEOGRAPH - 0xBB7A: 0x8AA3, //CJK UNIFIED IDEOGRAPH - 0xBB7B: 0x8A8D, //CJK UNIFIED IDEOGRAPH - 0xBB7C: 0x8AA1, //CJK UNIFIED IDEOGRAPH - 0xBB7D: 0x8A93, //CJK UNIFIED IDEOGRAPH - 0xBB7E: 0x8AA4, //CJK UNIFIED IDEOGRAPH - 0xBBA1: 0x8AAA, //CJK UNIFIED IDEOGRAPH - 0xBBA2: 0x8AA5, //CJK UNIFIED IDEOGRAPH - 0xBBA3: 0x8AA8, //CJK UNIFIED IDEOGRAPH - 0xBBA4: 0x8A98, //CJK UNIFIED IDEOGRAPH - 0xBBA5: 0x8A91, //CJK UNIFIED IDEOGRAPH - 0xBBA6: 0x8A9A, //CJK UNIFIED IDEOGRAPH - 0xBBA7: 0x8AA7, //CJK UNIFIED IDEOGRAPH - 0xBBA8: 0x8C6A, //CJK UNIFIED IDEOGRAPH - 0xBBA9: 0x8C8D, //CJK UNIFIED IDEOGRAPH - 0xBBAA: 0x8C8C, //CJK UNIFIED IDEOGRAPH - 0xBBAB: 0x8CD3, //CJK UNIFIED IDEOGRAPH - 0xBBAC: 0x8CD1, //CJK UNIFIED IDEOGRAPH - 0xBBAD: 0x8CD2, //CJK UNIFIED IDEOGRAPH - 0xBBAE: 0x8D6B, //CJK UNIFIED IDEOGRAPH - 0xBBAF: 0x8D99, //CJK UNIFIED IDEOGRAPH - 0xBBB0: 0x8D95, //CJK UNIFIED IDEOGRAPH - 0xBBB1: 0x8DFC, //CJK UNIFIED IDEOGRAPH - 0xBBB2: 0x8F14, //CJK UNIFIED IDEOGRAPH - 0xBBB3: 0x8F12, //CJK UNIFIED IDEOGRAPH - 0xBBB4: 0x8F15, //CJK UNIFIED IDEOGRAPH - 0xBBB5: 0x8F13, //CJK UNIFIED IDEOGRAPH - 0xBBB6: 0x8FA3, //CJK UNIFIED IDEOGRAPH - 0xBBB7: 0x9060, //CJK UNIFIED IDEOGRAPH - 0xBBB8: 0x9058, //CJK UNIFIED IDEOGRAPH - 0xBBB9: 0x905C, //CJK UNIFIED IDEOGRAPH - 0xBBBA: 0x9063, //CJK UNIFIED IDEOGRAPH - 0xBBBB: 0x9059, //CJK UNIFIED IDEOGRAPH - 0xBBBC: 0x905E, //CJK UNIFIED IDEOGRAPH - 0xBBBD: 0x9062, //CJK UNIFIED IDEOGRAPH - 0xBBBE: 0x905D, //CJK UNIFIED IDEOGRAPH - 0xBBBF: 0x905B, //CJK UNIFIED IDEOGRAPH - 0xBBC0: 0x9119, //CJK UNIFIED IDEOGRAPH - 0xBBC1: 0x9118, //CJK UNIFIED IDEOGRAPH - 0xBBC2: 0x911E, //CJK UNIFIED IDEOGRAPH - 0xBBC3: 0x9175, //CJK UNIFIED IDEOGRAPH - 0xBBC4: 0x9178, //CJK UNIFIED IDEOGRAPH - 0xBBC5: 0x9177, //CJK UNIFIED IDEOGRAPH - 0xBBC6: 0x9174, //CJK UNIFIED IDEOGRAPH - 0xBBC7: 0x9278, //CJK UNIFIED IDEOGRAPH - 0xBBC8: 0x9280, //CJK UNIFIED IDEOGRAPH - 0xBBC9: 0x9285, //CJK UNIFIED IDEOGRAPH - 0xBBCA: 0x9298, //CJK UNIFIED IDEOGRAPH - 0xBBCB: 0x9296, //CJK UNIFIED IDEOGRAPH - 0xBBCC: 0x927B, //CJK UNIFIED IDEOGRAPH - 0xBBCD: 0x9293, //CJK UNIFIED IDEOGRAPH - 0xBBCE: 0x929C, //CJK UNIFIED IDEOGRAPH - 0xBBCF: 0x92A8, //CJK UNIFIED IDEOGRAPH - 0xBBD0: 0x927C, //CJK UNIFIED IDEOGRAPH - 0xBBD1: 0x9291, //CJK UNIFIED IDEOGRAPH - 0xBBD2: 0x95A1, //CJK UNIFIED IDEOGRAPH - 0xBBD3: 0x95A8, //CJK UNIFIED IDEOGRAPH - 0xBBD4: 0x95A9, //CJK UNIFIED IDEOGRAPH - 0xBBD5: 0x95A3, //CJK UNIFIED IDEOGRAPH - 0xBBD6: 0x95A5, //CJK UNIFIED IDEOGRAPH - 0xBBD7: 0x95A4, //CJK UNIFIED IDEOGRAPH - 0xBBD8: 0x9699, //CJK UNIFIED IDEOGRAPH - 0xBBD9: 0x969C, //CJK UNIFIED IDEOGRAPH - 0xBBDA: 0x969B, //CJK UNIFIED IDEOGRAPH - 0xBBDB: 0x96CC, //CJK UNIFIED IDEOGRAPH - 0xBBDC: 0x96D2, //CJK UNIFIED IDEOGRAPH - 0xBBDD: 0x9700, //CJK UNIFIED IDEOGRAPH - 0xBBDE: 0x977C, //CJK UNIFIED IDEOGRAPH - 0xBBDF: 0x9785, //CJK UNIFIED IDEOGRAPH - 0xBBE0: 0x97F6, //CJK UNIFIED IDEOGRAPH - 0xBBE1: 0x9817, //CJK UNIFIED IDEOGRAPH - 0xBBE2: 0x9818, //CJK UNIFIED IDEOGRAPH - 0xBBE3: 0x98AF, //CJK UNIFIED IDEOGRAPH - 0xBBE4: 0x98B1, //CJK UNIFIED IDEOGRAPH - 0xBBE5: 0x9903, //CJK UNIFIED IDEOGRAPH - 0xBBE6: 0x9905, //CJK UNIFIED IDEOGRAPH - 0xBBE7: 0x990C, //CJK UNIFIED IDEOGRAPH - 0xBBE8: 0x9909, //CJK UNIFIED IDEOGRAPH - 0xBBE9: 0x99C1, //CJK UNIFIED IDEOGRAPH - 0xBBEA: 0x9AAF, //CJK UNIFIED IDEOGRAPH - 0xBBEB: 0x9AB0, //CJK UNIFIED IDEOGRAPH - 0xBBEC: 0x9AE6, //CJK UNIFIED IDEOGRAPH - 0xBBED: 0x9B41, //CJK UNIFIED IDEOGRAPH - 0xBBEE: 0x9B42, //CJK UNIFIED IDEOGRAPH - 0xBBEF: 0x9CF4, //CJK UNIFIED IDEOGRAPH - 0xBBF0: 0x9CF6, //CJK UNIFIED IDEOGRAPH - 0xBBF1: 0x9CF3, //CJK UNIFIED IDEOGRAPH - 0xBBF2: 0x9EBC, //CJK UNIFIED IDEOGRAPH - 0xBBF3: 0x9F3B, //CJK UNIFIED IDEOGRAPH - 0xBBF4: 0x9F4A, //CJK UNIFIED IDEOGRAPH - 0xBBF5: 0x5104, //CJK UNIFIED IDEOGRAPH - 0xBBF6: 0x5100, //CJK UNIFIED IDEOGRAPH - 0xBBF7: 0x50FB, //CJK UNIFIED IDEOGRAPH - 0xBBF8: 0x50F5, //CJK UNIFIED IDEOGRAPH - 0xBBF9: 0x50F9, //CJK UNIFIED IDEOGRAPH - 0xBBFA: 0x5102, //CJK UNIFIED IDEOGRAPH - 0xBBFB: 0x5108, //CJK UNIFIED IDEOGRAPH - 0xBBFC: 0x5109, //CJK UNIFIED IDEOGRAPH - 0xBBFD: 0x5105, //CJK UNIFIED IDEOGRAPH - 0xBBFE: 0x51DC, //CJK UNIFIED IDEOGRAPH - 0xBC40: 0x5287, //CJK UNIFIED IDEOGRAPH - 0xBC41: 0x5288, //CJK UNIFIED IDEOGRAPH - 0xBC42: 0x5289, //CJK UNIFIED IDEOGRAPH - 0xBC43: 0x528D, //CJK UNIFIED IDEOGRAPH - 0xBC44: 0x528A, //CJK UNIFIED IDEOGRAPH - 0xBC45: 0x52F0, //CJK UNIFIED IDEOGRAPH - 0xBC46: 0x53B2, //CJK UNIFIED IDEOGRAPH - 0xBC47: 0x562E, //CJK UNIFIED IDEOGRAPH - 0xBC48: 0x563B, //CJK UNIFIED IDEOGRAPH - 0xBC49: 0x5639, //CJK UNIFIED IDEOGRAPH - 0xBC4A: 0x5632, //CJK UNIFIED IDEOGRAPH - 0xBC4B: 0x563F, //CJK UNIFIED IDEOGRAPH - 0xBC4C: 0x5634, //CJK UNIFIED IDEOGRAPH - 0xBC4D: 0x5629, //CJK UNIFIED IDEOGRAPH - 0xBC4E: 0x5653, //CJK UNIFIED IDEOGRAPH - 0xBC4F: 0x564E, //CJK UNIFIED IDEOGRAPH - 0xBC50: 0x5657, //CJK UNIFIED IDEOGRAPH - 0xBC51: 0x5674, //CJK UNIFIED IDEOGRAPH - 0xBC52: 0x5636, //CJK UNIFIED IDEOGRAPH - 0xBC53: 0x562F, //CJK UNIFIED IDEOGRAPH - 0xBC54: 0x5630, //CJK UNIFIED IDEOGRAPH - 0xBC55: 0x5880, //CJK UNIFIED IDEOGRAPH - 0xBC56: 0x589F, //CJK UNIFIED IDEOGRAPH - 0xBC57: 0x589E, //CJK UNIFIED IDEOGRAPH - 0xBC58: 0x58B3, //CJK UNIFIED IDEOGRAPH - 0xBC59: 0x589C, //CJK UNIFIED IDEOGRAPH - 0xBC5A: 0x58AE, //CJK UNIFIED IDEOGRAPH - 0xBC5B: 0x58A9, //CJK UNIFIED IDEOGRAPH - 0xBC5C: 0x58A6, //CJK UNIFIED IDEOGRAPH - 0xBC5D: 0x596D, //CJK UNIFIED IDEOGRAPH - 0xBC5E: 0x5B09, //CJK UNIFIED IDEOGRAPH - 0xBC5F: 0x5AFB, //CJK UNIFIED IDEOGRAPH - 0xBC60: 0x5B0B, //CJK UNIFIED IDEOGRAPH - 0xBC61: 0x5AF5, //CJK UNIFIED IDEOGRAPH - 0xBC62: 0x5B0C, //CJK UNIFIED IDEOGRAPH - 0xBC63: 0x5B08, //CJK UNIFIED IDEOGRAPH - 0xBC64: 0x5BEE, //CJK UNIFIED IDEOGRAPH - 0xBC65: 0x5BEC, //CJK UNIFIED IDEOGRAPH - 0xBC66: 0x5BE9, //CJK UNIFIED IDEOGRAPH - 0xBC67: 0x5BEB, //CJK UNIFIED IDEOGRAPH - 0xBC68: 0x5C64, //CJK UNIFIED IDEOGRAPH - 0xBC69: 0x5C65, //CJK UNIFIED IDEOGRAPH - 0xBC6A: 0x5D9D, //CJK UNIFIED IDEOGRAPH - 0xBC6B: 0x5D94, //CJK UNIFIED IDEOGRAPH - 0xBC6C: 0x5E62, //CJK UNIFIED IDEOGRAPH - 0xBC6D: 0x5E5F, //CJK UNIFIED IDEOGRAPH - 0xBC6E: 0x5E61, //CJK UNIFIED IDEOGRAPH - 0xBC6F: 0x5EE2, //CJK UNIFIED IDEOGRAPH - 0xBC70: 0x5EDA, //CJK UNIFIED IDEOGRAPH - 0xBC71: 0x5EDF, //CJK UNIFIED IDEOGRAPH - 0xBC72: 0x5EDD, //CJK UNIFIED IDEOGRAPH - 0xBC73: 0x5EE3, //CJK UNIFIED IDEOGRAPH - 0xBC74: 0x5EE0, //CJK UNIFIED IDEOGRAPH - 0xBC75: 0x5F48, //CJK UNIFIED IDEOGRAPH - 0xBC76: 0x5F71, //CJK UNIFIED IDEOGRAPH - 0xBC77: 0x5FB7, //CJK UNIFIED IDEOGRAPH - 0xBC78: 0x5FB5, //CJK UNIFIED IDEOGRAPH - 0xBC79: 0x6176, //CJK UNIFIED IDEOGRAPH - 0xBC7A: 0x6167, //CJK UNIFIED IDEOGRAPH - 0xBC7B: 0x616E, //CJK UNIFIED IDEOGRAPH - 0xBC7C: 0x615D, //CJK UNIFIED IDEOGRAPH - 0xBC7D: 0x6155, //CJK UNIFIED IDEOGRAPH - 0xBC7E: 0x6182, //CJK UNIFIED IDEOGRAPH - 0xBCA1: 0x617C, //CJK UNIFIED IDEOGRAPH - 0xBCA2: 0x6170, //CJK UNIFIED IDEOGRAPH - 0xBCA3: 0x616B, //CJK UNIFIED IDEOGRAPH - 0xBCA4: 0x617E, //CJK UNIFIED IDEOGRAPH - 0xBCA5: 0x61A7, //CJK UNIFIED IDEOGRAPH - 0xBCA6: 0x6190, //CJK UNIFIED IDEOGRAPH - 0xBCA7: 0x61AB, //CJK UNIFIED IDEOGRAPH - 0xBCA8: 0x618E, //CJK UNIFIED IDEOGRAPH - 0xBCA9: 0x61AC, //CJK UNIFIED IDEOGRAPH - 0xBCAA: 0x619A, //CJK UNIFIED IDEOGRAPH - 0xBCAB: 0x61A4, //CJK UNIFIED IDEOGRAPH - 0xBCAC: 0x6194, //CJK UNIFIED IDEOGRAPH - 0xBCAD: 0x61AE, //CJK UNIFIED IDEOGRAPH - 0xBCAE: 0x622E, //CJK UNIFIED IDEOGRAPH - 0xBCAF: 0x6469, //CJK UNIFIED IDEOGRAPH - 0xBCB0: 0x646F, //CJK UNIFIED IDEOGRAPH - 0xBCB1: 0x6479, //CJK UNIFIED IDEOGRAPH - 0xBCB2: 0x649E, //CJK UNIFIED IDEOGRAPH - 0xBCB3: 0x64B2, //CJK UNIFIED IDEOGRAPH - 0xBCB4: 0x6488, //CJK UNIFIED IDEOGRAPH - 0xBCB5: 0x6490, //CJK UNIFIED IDEOGRAPH - 0xBCB6: 0x64B0, //CJK UNIFIED IDEOGRAPH - 0xBCB7: 0x64A5, //CJK UNIFIED IDEOGRAPH - 0xBCB8: 0x6493, //CJK UNIFIED IDEOGRAPH - 0xBCB9: 0x6495, //CJK UNIFIED IDEOGRAPH - 0xBCBA: 0x64A9, //CJK UNIFIED IDEOGRAPH - 0xBCBB: 0x6492, //CJK UNIFIED IDEOGRAPH - 0xBCBC: 0x64AE, //CJK UNIFIED IDEOGRAPH - 0xBCBD: 0x64AD, //CJK UNIFIED IDEOGRAPH - 0xBCBE: 0x64AB, //CJK UNIFIED IDEOGRAPH - 0xBCBF: 0x649A, //CJK UNIFIED IDEOGRAPH - 0xBCC0: 0x64AC, //CJK UNIFIED IDEOGRAPH - 0xBCC1: 0x6499, //CJK UNIFIED IDEOGRAPH - 0xBCC2: 0x64A2, //CJK UNIFIED IDEOGRAPH - 0xBCC3: 0x64B3, //CJK UNIFIED IDEOGRAPH - 0xBCC4: 0x6575, //CJK UNIFIED IDEOGRAPH - 0xBCC5: 0x6577, //CJK UNIFIED IDEOGRAPH - 0xBCC6: 0x6578, //CJK UNIFIED IDEOGRAPH - 0xBCC7: 0x66AE, //CJK UNIFIED IDEOGRAPH - 0xBCC8: 0x66AB, //CJK UNIFIED IDEOGRAPH - 0xBCC9: 0x66B4, //CJK UNIFIED IDEOGRAPH - 0xBCCA: 0x66B1, //CJK UNIFIED IDEOGRAPH - 0xBCCB: 0x6A23, //CJK UNIFIED IDEOGRAPH - 0xBCCC: 0x6A1F, //CJK UNIFIED IDEOGRAPH - 0xBCCD: 0x69E8, //CJK UNIFIED IDEOGRAPH - 0xBCCE: 0x6A01, //CJK UNIFIED IDEOGRAPH - 0xBCCF: 0x6A1E, //CJK UNIFIED IDEOGRAPH - 0xBCD0: 0x6A19, //CJK UNIFIED IDEOGRAPH - 0xBCD1: 0x69FD, //CJK UNIFIED IDEOGRAPH - 0xBCD2: 0x6A21, //CJK UNIFIED IDEOGRAPH - 0xBCD3: 0x6A13, //CJK UNIFIED IDEOGRAPH - 0xBCD4: 0x6A0A, //CJK UNIFIED IDEOGRAPH - 0xBCD5: 0x69F3, //CJK UNIFIED IDEOGRAPH - 0xBCD6: 0x6A02, //CJK UNIFIED IDEOGRAPH - 0xBCD7: 0x6A05, //CJK UNIFIED IDEOGRAPH - 0xBCD8: 0x69ED, //CJK UNIFIED IDEOGRAPH - 0xBCD9: 0x6A11, //CJK UNIFIED IDEOGRAPH - 0xBCDA: 0x6B50, //CJK UNIFIED IDEOGRAPH - 0xBCDB: 0x6B4E, //CJK UNIFIED IDEOGRAPH - 0xBCDC: 0x6BA4, //CJK UNIFIED IDEOGRAPH - 0xBCDD: 0x6BC5, //CJK UNIFIED IDEOGRAPH - 0xBCDE: 0x6BC6, //CJK UNIFIED IDEOGRAPH - 0xBCDF: 0x6F3F, //CJK UNIFIED IDEOGRAPH - 0xBCE0: 0x6F7C, //CJK UNIFIED IDEOGRAPH - 0xBCE1: 0x6F84, //CJK UNIFIED IDEOGRAPH - 0xBCE2: 0x6F51, //CJK UNIFIED IDEOGRAPH - 0xBCE3: 0x6F66, //CJK UNIFIED IDEOGRAPH - 0xBCE4: 0x6F54, //CJK UNIFIED IDEOGRAPH - 0xBCE5: 0x6F86, //CJK UNIFIED IDEOGRAPH - 0xBCE6: 0x6F6D, //CJK UNIFIED IDEOGRAPH - 0xBCE7: 0x6F5B, //CJK UNIFIED IDEOGRAPH - 0xBCE8: 0x6F78, //CJK UNIFIED IDEOGRAPH - 0xBCE9: 0x6F6E, //CJK UNIFIED IDEOGRAPH - 0xBCEA: 0x6F8E, //CJK UNIFIED IDEOGRAPH - 0xBCEB: 0x6F7A, //CJK UNIFIED IDEOGRAPH - 0xBCEC: 0x6F70, //CJK UNIFIED IDEOGRAPH - 0xBCED: 0x6F64, //CJK UNIFIED IDEOGRAPH - 0xBCEE: 0x6F97, //CJK UNIFIED IDEOGRAPH - 0xBCEF: 0x6F58, //CJK UNIFIED IDEOGRAPH - 0xBCF0: 0x6ED5, //CJK UNIFIED IDEOGRAPH - 0xBCF1: 0x6F6F, //CJK UNIFIED IDEOGRAPH - 0xBCF2: 0x6F60, //CJK UNIFIED IDEOGRAPH - 0xBCF3: 0x6F5F, //CJK UNIFIED IDEOGRAPH - 0xBCF4: 0x719F, //CJK UNIFIED IDEOGRAPH - 0xBCF5: 0x71AC, //CJK UNIFIED IDEOGRAPH - 0xBCF6: 0x71B1, //CJK UNIFIED IDEOGRAPH - 0xBCF7: 0x71A8, //CJK UNIFIED IDEOGRAPH - 0xBCF8: 0x7256, //CJK UNIFIED IDEOGRAPH - 0xBCF9: 0x729B, //CJK UNIFIED IDEOGRAPH - 0xBCFA: 0x734E, //CJK UNIFIED IDEOGRAPH - 0xBCFB: 0x7357, //CJK UNIFIED IDEOGRAPH - 0xBCFC: 0x7469, //CJK UNIFIED IDEOGRAPH - 0xBCFD: 0x748B, //CJK UNIFIED IDEOGRAPH - 0xBCFE: 0x7483, //CJK UNIFIED IDEOGRAPH - 0xBD40: 0x747E, //CJK UNIFIED IDEOGRAPH - 0xBD41: 0x7480, //CJK UNIFIED IDEOGRAPH - 0xBD42: 0x757F, //CJK UNIFIED IDEOGRAPH - 0xBD43: 0x7620, //CJK UNIFIED IDEOGRAPH - 0xBD44: 0x7629, //CJK UNIFIED IDEOGRAPH - 0xBD45: 0x761F, //CJK UNIFIED IDEOGRAPH - 0xBD46: 0x7624, //CJK UNIFIED IDEOGRAPH - 0xBD47: 0x7626, //CJK UNIFIED IDEOGRAPH - 0xBD48: 0x7621, //CJK UNIFIED IDEOGRAPH - 0xBD49: 0x7622, //CJK UNIFIED IDEOGRAPH - 0xBD4A: 0x769A, //CJK UNIFIED IDEOGRAPH - 0xBD4B: 0x76BA, //CJK UNIFIED IDEOGRAPH - 0xBD4C: 0x76E4, //CJK UNIFIED IDEOGRAPH - 0xBD4D: 0x778E, //CJK UNIFIED IDEOGRAPH - 0xBD4E: 0x7787, //CJK UNIFIED IDEOGRAPH - 0xBD4F: 0x778C, //CJK UNIFIED IDEOGRAPH - 0xBD50: 0x7791, //CJK UNIFIED IDEOGRAPH - 0xBD51: 0x778B, //CJK UNIFIED IDEOGRAPH - 0xBD52: 0x78CB, //CJK UNIFIED IDEOGRAPH - 0xBD53: 0x78C5, //CJK UNIFIED IDEOGRAPH - 0xBD54: 0x78BA, //CJK UNIFIED IDEOGRAPH - 0xBD55: 0x78CA, //CJK UNIFIED IDEOGRAPH - 0xBD56: 0x78BE, //CJK UNIFIED IDEOGRAPH - 0xBD57: 0x78D5, //CJK UNIFIED IDEOGRAPH - 0xBD58: 0x78BC, //CJK UNIFIED IDEOGRAPH - 0xBD59: 0x78D0, //CJK UNIFIED IDEOGRAPH - 0xBD5A: 0x7A3F, //CJK UNIFIED IDEOGRAPH - 0xBD5B: 0x7A3C, //CJK UNIFIED IDEOGRAPH - 0xBD5C: 0x7A40, //CJK UNIFIED IDEOGRAPH - 0xBD5D: 0x7A3D, //CJK UNIFIED IDEOGRAPH - 0xBD5E: 0x7A37, //CJK UNIFIED IDEOGRAPH - 0xBD5F: 0x7A3B, //CJK UNIFIED IDEOGRAPH - 0xBD60: 0x7AAF, //CJK UNIFIED IDEOGRAPH - 0xBD61: 0x7AAE, //CJK UNIFIED IDEOGRAPH - 0xBD62: 0x7BAD, //CJK UNIFIED IDEOGRAPH - 0xBD63: 0x7BB1, //CJK UNIFIED IDEOGRAPH - 0xBD64: 0x7BC4, //CJK UNIFIED IDEOGRAPH - 0xBD65: 0x7BB4, //CJK UNIFIED IDEOGRAPH - 0xBD66: 0x7BC6, //CJK UNIFIED IDEOGRAPH - 0xBD67: 0x7BC7, //CJK UNIFIED IDEOGRAPH - 0xBD68: 0x7BC1, //CJK UNIFIED IDEOGRAPH - 0xBD69: 0x7BA0, //CJK UNIFIED IDEOGRAPH - 0xBD6A: 0x7BCC, //CJK UNIFIED IDEOGRAPH - 0xBD6B: 0x7CCA, //CJK UNIFIED IDEOGRAPH - 0xBD6C: 0x7DE0, //CJK UNIFIED IDEOGRAPH - 0xBD6D: 0x7DF4, //CJK UNIFIED IDEOGRAPH - 0xBD6E: 0x7DEF, //CJK UNIFIED IDEOGRAPH - 0xBD6F: 0x7DFB, //CJK UNIFIED IDEOGRAPH - 0xBD70: 0x7DD8, //CJK UNIFIED IDEOGRAPH - 0xBD71: 0x7DEC, //CJK UNIFIED IDEOGRAPH - 0xBD72: 0x7DDD, //CJK UNIFIED IDEOGRAPH - 0xBD73: 0x7DE8, //CJK UNIFIED IDEOGRAPH - 0xBD74: 0x7DE3, //CJK UNIFIED IDEOGRAPH - 0xBD75: 0x7DDA, //CJK UNIFIED IDEOGRAPH - 0xBD76: 0x7DDE, //CJK UNIFIED IDEOGRAPH - 0xBD77: 0x7DE9, //CJK UNIFIED IDEOGRAPH - 0xBD78: 0x7D9E, //CJK UNIFIED IDEOGRAPH - 0xBD79: 0x7DD9, //CJK UNIFIED IDEOGRAPH - 0xBD7A: 0x7DF2, //CJK UNIFIED IDEOGRAPH - 0xBD7B: 0x7DF9, //CJK UNIFIED IDEOGRAPH - 0xBD7C: 0x7F75, //CJK UNIFIED IDEOGRAPH - 0xBD7D: 0x7F77, //CJK UNIFIED IDEOGRAPH - 0xBD7E: 0x7FAF, //CJK UNIFIED IDEOGRAPH - 0xBDA1: 0x7FE9, //CJK UNIFIED IDEOGRAPH - 0xBDA2: 0x8026, //CJK UNIFIED IDEOGRAPH - 0xBDA3: 0x819B, //CJK UNIFIED IDEOGRAPH - 0xBDA4: 0x819C, //CJK UNIFIED IDEOGRAPH - 0xBDA5: 0x819D, //CJK UNIFIED IDEOGRAPH - 0xBDA6: 0x81A0, //CJK UNIFIED IDEOGRAPH - 0xBDA7: 0x819A, //CJK UNIFIED IDEOGRAPH - 0xBDA8: 0x8198, //CJK UNIFIED IDEOGRAPH - 0xBDA9: 0x8517, //CJK UNIFIED IDEOGRAPH - 0xBDAA: 0x853D, //CJK UNIFIED IDEOGRAPH - 0xBDAB: 0x851A, //CJK UNIFIED IDEOGRAPH - 0xBDAC: 0x84EE, //CJK UNIFIED IDEOGRAPH - 0xBDAD: 0x852C, //CJK UNIFIED IDEOGRAPH - 0xBDAE: 0x852D, //CJK UNIFIED IDEOGRAPH - 0xBDAF: 0x8513, //CJK UNIFIED IDEOGRAPH - 0xBDB0: 0x8511, //CJK UNIFIED IDEOGRAPH - 0xBDB1: 0x8523, //CJK UNIFIED IDEOGRAPH - 0xBDB2: 0x8521, //CJK UNIFIED IDEOGRAPH - 0xBDB3: 0x8514, //CJK UNIFIED IDEOGRAPH - 0xBDB4: 0x84EC, //CJK UNIFIED IDEOGRAPH - 0xBDB5: 0x8525, //CJK UNIFIED IDEOGRAPH - 0xBDB6: 0x84FF, //CJK UNIFIED IDEOGRAPH - 0xBDB7: 0x8506, //CJK UNIFIED IDEOGRAPH - 0xBDB8: 0x8782, //CJK UNIFIED IDEOGRAPH - 0xBDB9: 0x8774, //CJK UNIFIED IDEOGRAPH - 0xBDBA: 0x8776, //CJK UNIFIED IDEOGRAPH - 0xBDBB: 0x8760, //CJK UNIFIED IDEOGRAPH - 0xBDBC: 0x8766, //CJK UNIFIED IDEOGRAPH - 0xBDBD: 0x8778, //CJK UNIFIED IDEOGRAPH - 0xBDBE: 0x8768, //CJK UNIFIED IDEOGRAPH - 0xBDBF: 0x8759, //CJK UNIFIED IDEOGRAPH - 0xBDC0: 0x8757, //CJK UNIFIED IDEOGRAPH - 0xBDC1: 0x874C, //CJK UNIFIED IDEOGRAPH - 0xBDC2: 0x8753, //CJK UNIFIED IDEOGRAPH - 0xBDC3: 0x885B, //CJK UNIFIED IDEOGRAPH - 0xBDC4: 0x885D, //CJK UNIFIED IDEOGRAPH - 0xBDC5: 0x8910, //CJK UNIFIED IDEOGRAPH - 0xBDC6: 0x8907, //CJK UNIFIED IDEOGRAPH - 0xBDC7: 0x8912, //CJK UNIFIED IDEOGRAPH - 0xBDC8: 0x8913, //CJK UNIFIED IDEOGRAPH - 0xBDC9: 0x8915, //CJK UNIFIED IDEOGRAPH - 0xBDCA: 0x890A, //CJK UNIFIED IDEOGRAPH - 0xBDCB: 0x8ABC, //CJK UNIFIED IDEOGRAPH - 0xBDCC: 0x8AD2, //CJK UNIFIED IDEOGRAPH - 0xBDCD: 0x8AC7, //CJK UNIFIED IDEOGRAPH - 0xBDCE: 0x8AC4, //CJK UNIFIED IDEOGRAPH - 0xBDCF: 0x8A95, //CJK UNIFIED IDEOGRAPH - 0xBDD0: 0x8ACB, //CJK UNIFIED IDEOGRAPH - 0xBDD1: 0x8AF8, //CJK UNIFIED IDEOGRAPH - 0xBDD2: 0x8AB2, //CJK UNIFIED IDEOGRAPH - 0xBDD3: 0x8AC9, //CJK UNIFIED IDEOGRAPH - 0xBDD4: 0x8AC2, //CJK UNIFIED IDEOGRAPH - 0xBDD5: 0x8ABF, //CJK UNIFIED IDEOGRAPH - 0xBDD6: 0x8AB0, //CJK UNIFIED IDEOGRAPH - 0xBDD7: 0x8AD6, //CJK UNIFIED IDEOGRAPH - 0xBDD8: 0x8ACD, //CJK UNIFIED IDEOGRAPH - 0xBDD9: 0x8AB6, //CJK UNIFIED IDEOGRAPH - 0xBDDA: 0x8AB9, //CJK UNIFIED IDEOGRAPH - 0xBDDB: 0x8ADB, //CJK UNIFIED IDEOGRAPH - 0xBDDC: 0x8C4C, //CJK UNIFIED IDEOGRAPH - 0xBDDD: 0x8C4E, //CJK UNIFIED IDEOGRAPH - 0xBDDE: 0x8C6C, //CJK UNIFIED IDEOGRAPH - 0xBDDF: 0x8CE0, //CJK UNIFIED IDEOGRAPH - 0xBDE0: 0x8CDE, //CJK UNIFIED IDEOGRAPH - 0xBDE1: 0x8CE6, //CJK UNIFIED IDEOGRAPH - 0xBDE2: 0x8CE4, //CJK UNIFIED IDEOGRAPH - 0xBDE3: 0x8CEC, //CJK UNIFIED IDEOGRAPH - 0xBDE4: 0x8CED, //CJK UNIFIED IDEOGRAPH - 0xBDE5: 0x8CE2, //CJK UNIFIED IDEOGRAPH - 0xBDE6: 0x8CE3, //CJK UNIFIED IDEOGRAPH - 0xBDE7: 0x8CDC, //CJK UNIFIED IDEOGRAPH - 0xBDE8: 0x8CEA, //CJK UNIFIED IDEOGRAPH - 0xBDE9: 0x8CE1, //CJK UNIFIED IDEOGRAPH - 0xBDEA: 0x8D6D, //CJK UNIFIED IDEOGRAPH - 0xBDEB: 0x8D9F, //CJK UNIFIED IDEOGRAPH - 0xBDEC: 0x8DA3, //CJK UNIFIED IDEOGRAPH - 0xBDED: 0x8E2B, //CJK UNIFIED IDEOGRAPH - 0xBDEE: 0x8E10, //CJK UNIFIED IDEOGRAPH - 0xBDEF: 0x8E1D, //CJK UNIFIED IDEOGRAPH - 0xBDF0: 0x8E22, //CJK UNIFIED IDEOGRAPH - 0xBDF1: 0x8E0F, //CJK UNIFIED IDEOGRAPH - 0xBDF2: 0x8E29, //CJK UNIFIED IDEOGRAPH - 0xBDF3: 0x8E1F, //CJK UNIFIED IDEOGRAPH - 0xBDF4: 0x8E21, //CJK UNIFIED IDEOGRAPH - 0xBDF5: 0x8E1E, //CJK UNIFIED IDEOGRAPH - 0xBDF6: 0x8EBA, //CJK UNIFIED IDEOGRAPH - 0xBDF7: 0x8F1D, //CJK UNIFIED IDEOGRAPH - 0xBDF8: 0x8F1B, //CJK UNIFIED IDEOGRAPH - 0xBDF9: 0x8F1F, //CJK UNIFIED IDEOGRAPH - 0xBDFA: 0x8F29, //CJK UNIFIED IDEOGRAPH - 0xBDFB: 0x8F26, //CJK UNIFIED IDEOGRAPH - 0xBDFC: 0x8F2A, //CJK UNIFIED IDEOGRAPH - 0xBDFD: 0x8F1C, //CJK UNIFIED IDEOGRAPH - 0xBDFE: 0x8F1E, //CJK UNIFIED IDEOGRAPH - 0xBE40: 0x8F25, //CJK UNIFIED IDEOGRAPH - 0xBE41: 0x9069, //CJK UNIFIED IDEOGRAPH - 0xBE42: 0x906E, //CJK UNIFIED IDEOGRAPH - 0xBE43: 0x9068, //CJK UNIFIED IDEOGRAPH - 0xBE44: 0x906D, //CJK UNIFIED IDEOGRAPH - 0xBE45: 0x9077, //CJK UNIFIED IDEOGRAPH - 0xBE46: 0x9130, //CJK UNIFIED IDEOGRAPH - 0xBE47: 0x912D, //CJK UNIFIED IDEOGRAPH - 0xBE48: 0x9127, //CJK UNIFIED IDEOGRAPH - 0xBE49: 0x9131, //CJK UNIFIED IDEOGRAPH - 0xBE4A: 0x9187, //CJK UNIFIED IDEOGRAPH - 0xBE4B: 0x9189, //CJK UNIFIED IDEOGRAPH - 0xBE4C: 0x918B, //CJK UNIFIED IDEOGRAPH - 0xBE4D: 0x9183, //CJK UNIFIED IDEOGRAPH - 0xBE4E: 0x92C5, //CJK UNIFIED IDEOGRAPH - 0xBE4F: 0x92BB, //CJK UNIFIED IDEOGRAPH - 0xBE50: 0x92B7, //CJK UNIFIED IDEOGRAPH - 0xBE51: 0x92EA, //CJK UNIFIED IDEOGRAPH - 0xBE52: 0x92AC, //CJK UNIFIED IDEOGRAPH - 0xBE53: 0x92E4, //CJK UNIFIED IDEOGRAPH - 0xBE54: 0x92C1, //CJK UNIFIED IDEOGRAPH - 0xBE55: 0x92B3, //CJK UNIFIED IDEOGRAPH - 0xBE56: 0x92BC, //CJK UNIFIED IDEOGRAPH - 0xBE57: 0x92D2, //CJK UNIFIED IDEOGRAPH - 0xBE58: 0x92C7, //CJK UNIFIED IDEOGRAPH - 0xBE59: 0x92F0, //CJK UNIFIED IDEOGRAPH - 0xBE5A: 0x92B2, //CJK UNIFIED IDEOGRAPH - 0xBE5B: 0x95AD, //CJK UNIFIED IDEOGRAPH - 0xBE5C: 0x95B1, //CJK UNIFIED IDEOGRAPH - 0xBE5D: 0x9704, //CJK UNIFIED IDEOGRAPH - 0xBE5E: 0x9706, //CJK UNIFIED IDEOGRAPH - 0xBE5F: 0x9707, //CJK UNIFIED IDEOGRAPH - 0xBE60: 0x9709, //CJK UNIFIED IDEOGRAPH - 0xBE61: 0x9760, //CJK UNIFIED IDEOGRAPH - 0xBE62: 0x978D, //CJK UNIFIED IDEOGRAPH - 0xBE63: 0x978B, //CJK UNIFIED IDEOGRAPH - 0xBE64: 0x978F, //CJK UNIFIED IDEOGRAPH - 0xBE65: 0x9821, //CJK UNIFIED IDEOGRAPH - 0xBE66: 0x982B, //CJK UNIFIED IDEOGRAPH - 0xBE67: 0x981C, //CJK UNIFIED IDEOGRAPH - 0xBE68: 0x98B3, //CJK UNIFIED IDEOGRAPH - 0xBE69: 0x990A, //CJK UNIFIED IDEOGRAPH - 0xBE6A: 0x9913, //CJK UNIFIED IDEOGRAPH - 0xBE6B: 0x9912, //CJK UNIFIED IDEOGRAPH - 0xBE6C: 0x9918, //CJK UNIFIED IDEOGRAPH - 0xBE6D: 0x99DD, //CJK UNIFIED IDEOGRAPH - 0xBE6E: 0x99D0, //CJK UNIFIED IDEOGRAPH - 0xBE6F: 0x99DF, //CJK UNIFIED IDEOGRAPH - 0xBE70: 0x99DB, //CJK UNIFIED IDEOGRAPH - 0xBE71: 0x99D1, //CJK UNIFIED IDEOGRAPH - 0xBE72: 0x99D5, //CJK UNIFIED IDEOGRAPH - 0xBE73: 0x99D2, //CJK UNIFIED IDEOGRAPH - 0xBE74: 0x99D9, //CJK UNIFIED IDEOGRAPH - 0xBE75: 0x9AB7, //CJK UNIFIED IDEOGRAPH - 0xBE76: 0x9AEE, //CJK UNIFIED IDEOGRAPH - 0xBE77: 0x9AEF, //CJK UNIFIED IDEOGRAPH - 0xBE78: 0x9B27, //CJK UNIFIED IDEOGRAPH - 0xBE79: 0x9B45, //CJK UNIFIED IDEOGRAPH - 0xBE7A: 0x9B44, //CJK UNIFIED IDEOGRAPH - 0xBE7B: 0x9B77, //CJK UNIFIED IDEOGRAPH - 0xBE7C: 0x9B6F, //CJK UNIFIED IDEOGRAPH - 0xBE7D: 0x9D06, //CJK UNIFIED IDEOGRAPH - 0xBE7E: 0x9D09, //CJK UNIFIED IDEOGRAPH - 0xBEA1: 0x9D03, //CJK UNIFIED IDEOGRAPH - 0xBEA2: 0x9EA9, //CJK UNIFIED IDEOGRAPH - 0xBEA3: 0x9EBE, //CJK UNIFIED IDEOGRAPH - 0xBEA4: 0x9ECE, //CJK UNIFIED IDEOGRAPH - 0xBEA5: 0x58A8, //CJK UNIFIED IDEOGRAPH - 0xBEA6: 0x9F52, //CJK UNIFIED IDEOGRAPH - 0xBEA7: 0x5112, //CJK UNIFIED IDEOGRAPH - 0xBEA8: 0x5118, //CJK UNIFIED IDEOGRAPH - 0xBEA9: 0x5114, //CJK UNIFIED IDEOGRAPH - 0xBEAA: 0x5110, //CJK UNIFIED IDEOGRAPH - 0xBEAB: 0x5115, //CJK UNIFIED IDEOGRAPH - 0xBEAC: 0x5180, //CJK UNIFIED IDEOGRAPH - 0xBEAD: 0x51AA, //CJK UNIFIED IDEOGRAPH - 0xBEAE: 0x51DD, //CJK UNIFIED IDEOGRAPH - 0xBEAF: 0x5291, //CJK UNIFIED IDEOGRAPH - 0xBEB0: 0x5293, //CJK UNIFIED IDEOGRAPH - 0xBEB1: 0x52F3, //CJK UNIFIED IDEOGRAPH - 0xBEB2: 0x5659, //CJK UNIFIED IDEOGRAPH - 0xBEB3: 0x566B, //CJK UNIFIED IDEOGRAPH - 0xBEB4: 0x5679, //CJK UNIFIED IDEOGRAPH - 0xBEB5: 0x5669, //CJK UNIFIED IDEOGRAPH - 0xBEB6: 0x5664, //CJK UNIFIED IDEOGRAPH - 0xBEB7: 0x5678, //CJK UNIFIED IDEOGRAPH - 0xBEB8: 0x566A, //CJK UNIFIED IDEOGRAPH - 0xBEB9: 0x5668, //CJK UNIFIED IDEOGRAPH - 0xBEBA: 0x5665, //CJK UNIFIED IDEOGRAPH - 0xBEBB: 0x5671, //CJK UNIFIED IDEOGRAPH - 0xBEBC: 0x566F, //CJK UNIFIED IDEOGRAPH - 0xBEBD: 0x566C, //CJK UNIFIED IDEOGRAPH - 0xBEBE: 0x5662, //CJK UNIFIED IDEOGRAPH - 0xBEBF: 0x5676, //CJK UNIFIED IDEOGRAPH - 0xBEC0: 0x58C1, //CJK UNIFIED IDEOGRAPH - 0xBEC1: 0x58BE, //CJK UNIFIED IDEOGRAPH - 0xBEC2: 0x58C7, //CJK UNIFIED IDEOGRAPH - 0xBEC3: 0x58C5, //CJK UNIFIED IDEOGRAPH - 0xBEC4: 0x596E, //CJK UNIFIED IDEOGRAPH - 0xBEC5: 0x5B1D, //CJK UNIFIED IDEOGRAPH - 0xBEC6: 0x5B34, //CJK UNIFIED IDEOGRAPH - 0xBEC7: 0x5B78, //CJK UNIFIED IDEOGRAPH - 0xBEC8: 0x5BF0, //CJK UNIFIED IDEOGRAPH - 0xBEC9: 0x5C0E, //CJK UNIFIED IDEOGRAPH - 0xBECA: 0x5F4A, //CJK UNIFIED IDEOGRAPH - 0xBECB: 0x61B2, //CJK UNIFIED IDEOGRAPH - 0xBECC: 0x6191, //CJK UNIFIED IDEOGRAPH - 0xBECD: 0x61A9, //CJK UNIFIED IDEOGRAPH - 0xBECE: 0x618A, //CJK UNIFIED IDEOGRAPH - 0xBECF: 0x61CD, //CJK UNIFIED IDEOGRAPH - 0xBED0: 0x61B6, //CJK UNIFIED IDEOGRAPH - 0xBED1: 0x61BE, //CJK UNIFIED IDEOGRAPH - 0xBED2: 0x61CA, //CJK UNIFIED IDEOGRAPH - 0xBED3: 0x61C8, //CJK UNIFIED IDEOGRAPH - 0xBED4: 0x6230, //CJK UNIFIED IDEOGRAPH - 0xBED5: 0x64C5, //CJK UNIFIED IDEOGRAPH - 0xBED6: 0x64C1, //CJK UNIFIED IDEOGRAPH - 0xBED7: 0x64CB, //CJK UNIFIED IDEOGRAPH - 0xBED8: 0x64BB, //CJK UNIFIED IDEOGRAPH - 0xBED9: 0x64BC, //CJK UNIFIED IDEOGRAPH - 0xBEDA: 0x64DA, //CJK UNIFIED IDEOGRAPH - 0xBEDB: 0x64C4, //CJK UNIFIED IDEOGRAPH - 0xBEDC: 0x64C7, //CJK UNIFIED IDEOGRAPH - 0xBEDD: 0x64C2, //CJK UNIFIED IDEOGRAPH - 0xBEDE: 0x64CD, //CJK UNIFIED IDEOGRAPH - 0xBEDF: 0x64BF, //CJK UNIFIED IDEOGRAPH - 0xBEE0: 0x64D2, //CJK UNIFIED IDEOGRAPH - 0xBEE1: 0x64D4, //CJK UNIFIED IDEOGRAPH - 0xBEE2: 0x64BE, //CJK UNIFIED IDEOGRAPH - 0xBEE3: 0x6574, //CJK UNIFIED IDEOGRAPH - 0xBEE4: 0x66C6, //CJK UNIFIED IDEOGRAPH - 0xBEE5: 0x66C9, //CJK UNIFIED IDEOGRAPH - 0xBEE6: 0x66B9, //CJK UNIFIED IDEOGRAPH - 0xBEE7: 0x66C4, //CJK UNIFIED IDEOGRAPH - 0xBEE8: 0x66C7, //CJK UNIFIED IDEOGRAPH - 0xBEE9: 0x66B8, //CJK UNIFIED IDEOGRAPH - 0xBEEA: 0x6A3D, //CJK UNIFIED IDEOGRAPH - 0xBEEB: 0x6A38, //CJK UNIFIED IDEOGRAPH - 0xBEEC: 0x6A3A, //CJK UNIFIED IDEOGRAPH - 0xBEED: 0x6A59, //CJK UNIFIED IDEOGRAPH - 0xBEEE: 0x6A6B, //CJK UNIFIED IDEOGRAPH - 0xBEEF: 0x6A58, //CJK UNIFIED IDEOGRAPH - 0xBEF0: 0x6A39, //CJK UNIFIED IDEOGRAPH - 0xBEF1: 0x6A44, //CJK UNIFIED IDEOGRAPH - 0xBEF2: 0x6A62, //CJK UNIFIED IDEOGRAPH - 0xBEF3: 0x6A61, //CJK UNIFIED IDEOGRAPH - 0xBEF4: 0x6A4B, //CJK UNIFIED IDEOGRAPH - 0xBEF5: 0x6A47, //CJK UNIFIED IDEOGRAPH - 0xBEF6: 0x6A35, //CJK UNIFIED IDEOGRAPH - 0xBEF7: 0x6A5F, //CJK UNIFIED IDEOGRAPH - 0xBEF8: 0x6A48, //CJK UNIFIED IDEOGRAPH - 0xBEF9: 0x6B59, //CJK UNIFIED IDEOGRAPH - 0xBEFA: 0x6B77, //CJK UNIFIED IDEOGRAPH - 0xBEFB: 0x6C05, //CJK UNIFIED IDEOGRAPH - 0xBEFC: 0x6FC2, //CJK UNIFIED IDEOGRAPH - 0xBEFD: 0x6FB1, //CJK UNIFIED IDEOGRAPH - 0xBEFE: 0x6FA1, //CJK UNIFIED IDEOGRAPH - 0xBF40: 0x6FC3, //CJK UNIFIED IDEOGRAPH - 0xBF41: 0x6FA4, //CJK UNIFIED IDEOGRAPH - 0xBF42: 0x6FC1, //CJK UNIFIED IDEOGRAPH - 0xBF43: 0x6FA7, //CJK UNIFIED IDEOGRAPH - 0xBF44: 0x6FB3, //CJK UNIFIED IDEOGRAPH - 0xBF45: 0x6FC0, //CJK UNIFIED IDEOGRAPH - 0xBF46: 0x6FB9, //CJK UNIFIED IDEOGRAPH - 0xBF47: 0x6FB6, //CJK UNIFIED IDEOGRAPH - 0xBF48: 0x6FA6, //CJK UNIFIED IDEOGRAPH - 0xBF49: 0x6FA0, //CJK UNIFIED IDEOGRAPH - 0xBF4A: 0x6FB4, //CJK UNIFIED IDEOGRAPH - 0xBF4B: 0x71BE, //CJK UNIFIED IDEOGRAPH - 0xBF4C: 0x71C9, //CJK UNIFIED IDEOGRAPH - 0xBF4D: 0x71D0, //CJK UNIFIED IDEOGRAPH - 0xBF4E: 0x71D2, //CJK UNIFIED IDEOGRAPH - 0xBF4F: 0x71C8, //CJK UNIFIED IDEOGRAPH - 0xBF50: 0x71D5, //CJK UNIFIED IDEOGRAPH - 0xBF51: 0x71B9, //CJK UNIFIED IDEOGRAPH - 0xBF52: 0x71CE, //CJK UNIFIED IDEOGRAPH - 0xBF53: 0x71D9, //CJK UNIFIED IDEOGRAPH - 0xBF54: 0x71DC, //CJK UNIFIED IDEOGRAPH - 0xBF55: 0x71C3, //CJK UNIFIED IDEOGRAPH - 0xBF56: 0x71C4, //CJK UNIFIED IDEOGRAPH - 0xBF57: 0x7368, //CJK UNIFIED IDEOGRAPH - 0xBF58: 0x749C, //CJK UNIFIED IDEOGRAPH - 0xBF59: 0x74A3, //CJK UNIFIED IDEOGRAPH - 0xBF5A: 0x7498, //CJK UNIFIED IDEOGRAPH - 0xBF5B: 0x749F, //CJK UNIFIED IDEOGRAPH - 0xBF5C: 0x749E, //CJK UNIFIED IDEOGRAPH - 0xBF5D: 0x74E2, //CJK UNIFIED IDEOGRAPH - 0xBF5E: 0x750C, //CJK UNIFIED IDEOGRAPH - 0xBF5F: 0x750D, //CJK UNIFIED IDEOGRAPH - 0xBF60: 0x7634, //CJK UNIFIED IDEOGRAPH - 0xBF61: 0x7638, //CJK UNIFIED IDEOGRAPH - 0xBF62: 0x763A, //CJK UNIFIED IDEOGRAPH - 0xBF63: 0x76E7, //CJK UNIFIED IDEOGRAPH - 0xBF64: 0x76E5, //CJK UNIFIED IDEOGRAPH - 0xBF65: 0x77A0, //CJK UNIFIED IDEOGRAPH - 0xBF66: 0x779E, //CJK UNIFIED IDEOGRAPH - 0xBF67: 0x779F, //CJK UNIFIED IDEOGRAPH - 0xBF68: 0x77A5, //CJK UNIFIED IDEOGRAPH - 0xBF69: 0x78E8, //CJK UNIFIED IDEOGRAPH - 0xBF6A: 0x78DA, //CJK UNIFIED IDEOGRAPH - 0xBF6B: 0x78EC, //CJK UNIFIED IDEOGRAPH - 0xBF6C: 0x78E7, //CJK UNIFIED IDEOGRAPH - 0xBF6D: 0x79A6, //CJK UNIFIED IDEOGRAPH - 0xBF6E: 0x7A4D, //CJK UNIFIED IDEOGRAPH - 0xBF6F: 0x7A4E, //CJK UNIFIED IDEOGRAPH - 0xBF70: 0x7A46, //CJK UNIFIED IDEOGRAPH - 0xBF71: 0x7A4C, //CJK UNIFIED IDEOGRAPH - 0xBF72: 0x7A4B, //CJK UNIFIED IDEOGRAPH - 0xBF73: 0x7ABA, //CJK UNIFIED IDEOGRAPH - 0xBF74: 0x7BD9, //CJK UNIFIED IDEOGRAPH - 0xBF75: 0x7C11, //CJK UNIFIED IDEOGRAPH - 0xBF76: 0x7BC9, //CJK UNIFIED IDEOGRAPH - 0xBF77: 0x7BE4, //CJK UNIFIED IDEOGRAPH - 0xBF78: 0x7BDB, //CJK UNIFIED IDEOGRAPH - 0xBF79: 0x7BE1, //CJK UNIFIED IDEOGRAPH - 0xBF7A: 0x7BE9, //CJK UNIFIED IDEOGRAPH - 0xBF7B: 0x7BE6, //CJK UNIFIED IDEOGRAPH - 0xBF7C: 0x7CD5, //CJK UNIFIED IDEOGRAPH - 0xBF7D: 0x7CD6, //CJK UNIFIED IDEOGRAPH - 0xBF7E: 0x7E0A, //CJK UNIFIED IDEOGRAPH - 0xBFA1: 0x7E11, //CJK UNIFIED IDEOGRAPH - 0xBFA2: 0x7E08, //CJK UNIFIED IDEOGRAPH - 0xBFA3: 0x7E1B, //CJK UNIFIED IDEOGRAPH - 0xBFA4: 0x7E23, //CJK UNIFIED IDEOGRAPH - 0xBFA5: 0x7E1E, //CJK UNIFIED IDEOGRAPH - 0xBFA6: 0x7E1D, //CJK UNIFIED IDEOGRAPH - 0xBFA7: 0x7E09, //CJK UNIFIED IDEOGRAPH - 0xBFA8: 0x7E10, //CJK UNIFIED IDEOGRAPH - 0xBFA9: 0x7F79, //CJK UNIFIED IDEOGRAPH - 0xBFAA: 0x7FB2, //CJK UNIFIED IDEOGRAPH - 0xBFAB: 0x7FF0, //CJK UNIFIED IDEOGRAPH - 0xBFAC: 0x7FF1, //CJK UNIFIED IDEOGRAPH - 0xBFAD: 0x7FEE, //CJK UNIFIED IDEOGRAPH - 0xBFAE: 0x8028, //CJK UNIFIED IDEOGRAPH - 0xBFAF: 0x81B3, //CJK UNIFIED IDEOGRAPH - 0xBFB0: 0x81A9, //CJK UNIFIED IDEOGRAPH - 0xBFB1: 0x81A8, //CJK UNIFIED IDEOGRAPH - 0xBFB2: 0x81FB, //CJK UNIFIED IDEOGRAPH - 0xBFB3: 0x8208, //CJK UNIFIED IDEOGRAPH - 0xBFB4: 0x8258, //CJK UNIFIED IDEOGRAPH - 0xBFB5: 0x8259, //CJK UNIFIED IDEOGRAPH - 0xBFB6: 0x854A, //CJK UNIFIED IDEOGRAPH - 0xBFB7: 0x8559, //CJK UNIFIED IDEOGRAPH - 0xBFB8: 0x8548, //CJK UNIFIED IDEOGRAPH - 0xBFB9: 0x8568, //CJK UNIFIED IDEOGRAPH - 0xBFBA: 0x8569, //CJK UNIFIED IDEOGRAPH - 0xBFBB: 0x8543, //CJK UNIFIED IDEOGRAPH - 0xBFBC: 0x8549, //CJK UNIFIED IDEOGRAPH - 0xBFBD: 0x856D, //CJK UNIFIED IDEOGRAPH - 0xBFBE: 0x856A, //CJK UNIFIED IDEOGRAPH - 0xBFBF: 0x855E, //CJK UNIFIED IDEOGRAPH - 0xBFC0: 0x8783, //CJK UNIFIED IDEOGRAPH - 0xBFC1: 0x879F, //CJK UNIFIED IDEOGRAPH - 0xBFC2: 0x879E, //CJK UNIFIED IDEOGRAPH - 0xBFC3: 0x87A2, //CJK UNIFIED IDEOGRAPH - 0xBFC4: 0x878D, //CJK UNIFIED IDEOGRAPH - 0xBFC5: 0x8861, //CJK UNIFIED IDEOGRAPH - 0xBFC6: 0x892A, //CJK UNIFIED IDEOGRAPH - 0xBFC7: 0x8932, //CJK UNIFIED IDEOGRAPH - 0xBFC8: 0x8925, //CJK UNIFIED IDEOGRAPH - 0xBFC9: 0x892B, //CJK UNIFIED IDEOGRAPH - 0xBFCA: 0x8921, //CJK UNIFIED IDEOGRAPH - 0xBFCB: 0x89AA, //CJK UNIFIED IDEOGRAPH - 0xBFCC: 0x89A6, //CJK UNIFIED IDEOGRAPH - 0xBFCD: 0x8AE6, //CJK UNIFIED IDEOGRAPH - 0xBFCE: 0x8AFA, //CJK UNIFIED IDEOGRAPH - 0xBFCF: 0x8AEB, //CJK UNIFIED IDEOGRAPH - 0xBFD0: 0x8AF1, //CJK UNIFIED IDEOGRAPH - 0xBFD1: 0x8B00, //CJK UNIFIED IDEOGRAPH - 0xBFD2: 0x8ADC, //CJK UNIFIED IDEOGRAPH - 0xBFD3: 0x8AE7, //CJK UNIFIED IDEOGRAPH - 0xBFD4: 0x8AEE, //CJK UNIFIED IDEOGRAPH - 0xBFD5: 0x8AFE, //CJK UNIFIED IDEOGRAPH - 0xBFD6: 0x8B01, //CJK UNIFIED IDEOGRAPH - 0xBFD7: 0x8B02, //CJK UNIFIED IDEOGRAPH - 0xBFD8: 0x8AF7, //CJK UNIFIED IDEOGRAPH - 0xBFD9: 0x8AED, //CJK UNIFIED IDEOGRAPH - 0xBFDA: 0x8AF3, //CJK UNIFIED IDEOGRAPH - 0xBFDB: 0x8AF6, //CJK UNIFIED IDEOGRAPH - 0xBFDC: 0x8AFC, //CJK UNIFIED IDEOGRAPH - 0xBFDD: 0x8C6B, //CJK UNIFIED IDEOGRAPH - 0xBFDE: 0x8C6D, //CJK UNIFIED IDEOGRAPH - 0xBFDF: 0x8C93, //CJK UNIFIED IDEOGRAPH - 0xBFE0: 0x8CF4, //CJK UNIFIED IDEOGRAPH - 0xBFE1: 0x8E44, //CJK UNIFIED IDEOGRAPH - 0xBFE2: 0x8E31, //CJK UNIFIED IDEOGRAPH - 0xBFE3: 0x8E34, //CJK UNIFIED IDEOGRAPH - 0xBFE4: 0x8E42, //CJK UNIFIED IDEOGRAPH - 0xBFE5: 0x8E39, //CJK UNIFIED IDEOGRAPH - 0xBFE6: 0x8E35, //CJK UNIFIED IDEOGRAPH - 0xBFE7: 0x8F3B, //CJK UNIFIED IDEOGRAPH - 0xBFE8: 0x8F2F, //CJK UNIFIED IDEOGRAPH - 0xBFE9: 0x8F38, //CJK UNIFIED IDEOGRAPH - 0xBFEA: 0x8F33, //CJK UNIFIED IDEOGRAPH - 0xBFEB: 0x8FA8, //CJK UNIFIED IDEOGRAPH - 0xBFEC: 0x8FA6, //CJK UNIFIED IDEOGRAPH - 0xBFED: 0x9075, //CJK UNIFIED IDEOGRAPH - 0xBFEE: 0x9074, //CJK UNIFIED IDEOGRAPH - 0xBFEF: 0x9078, //CJK UNIFIED IDEOGRAPH - 0xBFF0: 0x9072, //CJK UNIFIED IDEOGRAPH - 0xBFF1: 0x907C, //CJK UNIFIED IDEOGRAPH - 0xBFF2: 0x907A, //CJK UNIFIED IDEOGRAPH - 0xBFF3: 0x9134, //CJK UNIFIED IDEOGRAPH - 0xBFF4: 0x9192, //CJK UNIFIED IDEOGRAPH - 0xBFF5: 0x9320, //CJK UNIFIED IDEOGRAPH - 0xBFF6: 0x9336, //CJK UNIFIED IDEOGRAPH - 0xBFF7: 0x92F8, //CJK UNIFIED IDEOGRAPH - 0xBFF8: 0x9333, //CJK UNIFIED IDEOGRAPH - 0xBFF9: 0x932F, //CJK UNIFIED IDEOGRAPH - 0xBFFA: 0x9322, //CJK UNIFIED IDEOGRAPH - 0xBFFB: 0x92FC, //CJK UNIFIED IDEOGRAPH - 0xBFFC: 0x932B, //CJK UNIFIED IDEOGRAPH - 0xBFFD: 0x9304, //CJK UNIFIED IDEOGRAPH - 0xBFFE: 0x931A, //CJK UNIFIED IDEOGRAPH - 0xC040: 0x9310, //CJK UNIFIED IDEOGRAPH - 0xC041: 0x9326, //CJK UNIFIED IDEOGRAPH - 0xC042: 0x9321, //CJK UNIFIED IDEOGRAPH - 0xC043: 0x9315, //CJK UNIFIED IDEOGRAPH - 0xC044: 0x932E, //CJK UNIFIED IDEOGRAPH - 0xC045: 0x9319, //CJK UNIFIED IDEOGRAPH - 0xC046: 0x95BB, //CJK UNIFIED IDEOGRAPH - 0xC047: 0x96A7, //CJK UNIFIED IDEOGRAPH - 0xC048: 0x96A8, //CJK UNIFIED IDEOGRAPH - 0xC049: 0x96AA, //CJK UNIFIED IDEOGRAPH - 0xC04A: 0x96D5, //CJK UNIFIED IDEOGRAPH - 0xC04B: 0x970E, //CJK UNIFIED IDEOGRAPH - 0xC04C: 0x9711, //CJK UNIFIED IDEOGRAPH - 0xC04D: 0x9716, //CJK UNIFIED IDEOGRAPH - 0xC04E: 0x970D, //CJK UNIFIED IDEOGRAPH - 0xC04F: 0x9713, //CJK UNIFIED IDEOGRAPH - 0xC050: 0x970F, //CJK UNIFIED IDEOGRAPH - 0xC051: 0x975B, //CJK UNIFIED IDEOGRAPH - 0xC052: 0x975C, //CJK UNIFIED IDEOGRAPH - 0xC053: 0x9766, //CJK UNIFIED IDEOGRAPH - 0xC054: 0x9798, //CJK UNIFIED IDEOGRAPH - 0xC055: 0x9830, //CJK UNIFIED IDEOGRAPH - 0xC056: 0x9838, //CJK UNIFIED IDEOGRAPH - 0xC057: 0x983B, //CJK UNIFIED IDEOGRAPH - 0xC058: 0x9837, //CJK UNIFIED IDEOGRAPH - 0xC059: 0x982D, //CJK UNIFIED IDEOGRAPH - 0xC05A: 0x9839, //CJK UNIFIED IDEOGRAPH - 0xC05B: 0x9824, //CJK UNIFIED IDEOGRAPH - 0xC05C: 0x9910, //CJK UNIFIED IDEOGRAPH - 0xC05D: 0x9928, //CJK UNIFIED IDEOGRAPH - 0xC05E: 0x991E, //CJK UNIFIED IDEOGRAPH - 0xC05F: 0x991B, //CJK UNIFIED IDEOGRAPH - 0xC060: 0x9921, //CJK UNIFIED IDEOGRAPH - 0xC061: 0x991A, //CJK UNIFIED IDEOGRAPH - 0xC062: 0x99ED, //CJK UNIFIED IDEOGRAPH - 0xC063: 0x99E2, //CJK UNIFIED IDEOGRAPH - 0xC064: 0x99F1, //CJK UNIFIED IDEOGRAPH - 0xC065: 0x9AB8, //CJK UNIFIED IDEOGRAPH - 0xC066: 0x9ABC, //CJK UNIFIED IDEOGRAPH - 0xC067: 0x9AFB, //CJK UNIFIED IDEOGRAPH - 0xC068: 0x9AED, //CJK UNIFIED IDEOGRAPH - 0xC069: 0x9B28, //CJK UNIFIED IDEOGRAPH - 0xC06A: 0x9B91, //CJK UNIFIED IDEOGRAPH - 0xC06B: 0x9D15, //CJK UNIFIED IDEOGRAPH - 0xC06C: 0x9D23, //CJK UNIFIED IDEOGRAPH - 0xC06D: 0x9D26, //CJK UNIFIED IDEOGRAPH - 0xC06E: 0x9D28, //CJK UNIFIED IDEOGRAPH - 0xC06F: 0x9D12, //CJK UNIFIED IDEOGRAPH - 0xC070: 0x9D1B, //CJK UNIFIED IDEOGRAPH - 0xC071: 0x9ED8, //CJK UNIFIED IDEOGRAPH - 0xC072: 0x9ED4, //CJK UNIFIED IDEOGRAPH - 0xC073: 0x9F8D, //CJK UNIFIED IDEOGRAPH - 0xC074: 0x9F9C, //CJK UNIFIED IDEOGRAPH - 0xC075: 0x512A, //CJK UNIFIED IDEOGRAPH - 0xC076: 0x511F, //CJK UNIFIED IDEOGRAPH - 0xC077: 0x5121, //CJK UNIFIED IDEOGRAPH - 0xC078: 0x5132, //CJK UNIFIED IDEOGRAPH - 0xC079: 0x52F5, //CJK UNIFIED IDEOGRAPH - 0xC07A: 0x568E, //CJK UNIFIED IDEOGRAPH - 0xC07B: 0x5680, //CJK UNIFIED IDEOGRAPH - 0xC07C: 0x5690, //CJK UNIFIED IDEOGRAPH - 0xC07D: 0x5685, //CJK UNIFIED IDEOGRAPH - 0xC07E: 0x5687, //CJK UNIFIED IDEOGRAPH - 0xC0A1: 0x568F, //CJK UNIFIED IDEOGRAPH - 0xC0A2: 0x58D5, //CJK UNIFIED IDEOGRAPH - 0xC0A3: 0x58D3, //CJK UNIFIED IDEOGRAPH - 0xC0A4: 0x58D1, //CJK UNIFIED IDEOGRAPH - 0xC0A5: 0x58CE, //CJK UNIFIED IDEOGRAPH - 0xC0A6: 0x5B30, //CJK UNIFIED IDEOGRAPH - 0xC0A7: 0x5B2A, //CJK UNIFIED IDEOGRAPH - 0xC0A8: 0x5B24, //CJK UNIFIED IDEOGRAPH - 0xC0A9: 0x5B7A, //CJK UNIFIED IDEOGRAPH - 0xC0AA: 0x5C37, //CJK UNIFIED IDEOGRAPH - 0xC0AB: 0x5C68, //CJK UNIFIED IDEOGRAPH - 0xC0AC: 0x5DBC, //CJK UNIFIED IDEOGRAPH - 0xC0AD: 0x5DBA, //CJK UNIFIED IDEOGRAPH - 0xC0AE: 0x5DBD, //CJK UNIFIED IDEOGRAPH - 0xC0AF: 0x5DB8, //CJK UNIFIED IDEOGRAPH - 0xC0B0: 0x5E6B, //CJK UNIFIED IDEOGRAPH - 0xC0B1: 0x5F4C, //CJK UNIFIED IDEOGRAPH - 0xC0B2: 0x5FBD, //CJK UNIFIED IDEOGRAPH - 0xC0B3: 0x61C9, //CJK UNIFIED IDEOGRAPH - 0xC0B4: 0x61C2, //CJK UNIFIED IDEOGRAPH - 0xC0B5: 0x61C7, //CJK UNIFIED IDEOGRAPH - 0xC0B6: 0x61E6, //CJK UNIFIED IDEOGRAPH - 0xC0B7: 0x61CB, //CJK UNIFIED IDEOGRAPH - 0xC0B8: 0x6232, //CJK UNIFIED IDEOGRAPH - 0xC0B9: 0x6234, //CJK UNIFIED IDEOGRAPH - 0xC0BA: 0x64CE, //CJK UNIFIED IDEOGRAPH - 0xC0BB: 0x64CA, //CJK UNIFIED IDEOGRAPH - 0xC0BC: 0x64D8, //CJK UNIFIED IDEOGRAPH - 0xC0BD: 0x64E0, //CJK UNIFIED IDEOGRAPH - 0xC0BE: 0x64F0, //CJK UNIFIED IDEOGRAPH - 0xC0BF: 0x64E6, //CJK UNIFIED IDEOGRAPH - 0xC0C0: 0x64EC, //CJK UNIFIED IDEOGRAPH - 0xC0C1: 0x64F1, //CJK UNIFIED IDEOGRAPH - 0xC0C2: 0x64E2, //CJK UNIFIED IDEOGRAPH - 0xC0C3: 0x64ED, //CJK UNIFIED IDEOGRAPH - 0xC0C4: 0x6582, //CJK UNIFIED IDEOGRAPH - 0xC0C5: 0x6583, //CJK UNIFIED IDEOGRAPH - 0xC0C6: 0x66D9, //CJK UNIFIED IDEOGRAPH - 0xC0C7: 0x66D6, //CJK UNIFIED IDEOGRAPH - 0xC0C8: 0x6A80, //CJK UNIFIED IDEOGRAPH - 0xC0C9: 0x6A94, //CJK UNIFIED IDEOGRAPH - 0xC0CA: 0x6A84, //CJK UNIFIED IDEOGRAPH - 0xC0CB: 0x6AA2, //CJK UNIFIED IDEOGRAPH - 0xC0CC: 0x6A9C, //CJK UNIFIED IDEOGRAPH - 0xC0CD: 0x6ADB, //CJK UNIFIED IDEOGRAPH - 0xC0CE: 0x6AA3, //CJK UNIFIED IDEOGRAPH - 0xC0CF: 0x6A7E, //CJK UNIFIED IDEOGRAPH - 0xC0D0: 0x6A97, //CJK UNIFIED IDEOGRAPH - 0xC0D1: 0x6A90, //CJK UNIFIED IDEOGRAPH - 0xC0D2: 0x6AA0, //CJK UNIFIED IDEOGRAPH - 0xC0D3: 0x6B5C, //CJK UNIFIED IDEOGRAPH - 0xC0D4: 0x6BAE, //CJK UNIFIED IDEOGRAPH - 0xC0D5: 0x6BDA, //CJK UNIFIED IDEOGRAPH - 0xC0D6: 0x6C08, //CJK UNIFIED IDEOGRAPH - 0xC0D7: 0x6FD8, //CJK UNIFIED IDEOGRAPH - 0xC0D8: 0x6FF1, //CJK UNIFIED IDEOGRAPH - 0xC0D9: 0x6FDF, //CJK UNIFIED IDEOGRAPH - 0xC0DA: 0x6FE0, //CJK UNIFIED IDEOGRAPH - 0xC0DB: 0x6FDB, //CJK UNIFIED IDEOGRAPH - 0xC0DC: 0x6FE4, //CJK UNIFIED IDEOGRAPH - 0xC0DD: 0x6FEB, //CJK UNIFIED IDEOGRAPH - 0xC0DE: 0x6FEF, //CJK UNIFIED IDEOGRAPH - 0xC0DF: 0x6F80, //CJK UNIFIED IDEOGRAPH - 0xC0E0: 0x6FEC, //CJK UNIFIED IDEOGRAPH - 0xC0E1: 0x6FE1, //CJK UNIFIED IDEOGRAPH - 0xC0E2: 0x6FE9, //CJK UNIFIED IDEOGRAPH - 0xC0E3: 0x6FD5, //CJK UNIFIED IDEOGRAPH - 0xC0E4: 0x6FEE, //CJK UNIFIED IDEOGRAPH - 0xC0E5: 0x6FF0, //CJK UNIFIED IDEOGRAPH - 0xC0E6: 0x71E7, //CJK UNIFIED IDEOGRAPH - 0xC0E7: 0x71DF, //CJK UNIFIED IDEOGRAPH - 0xC0E8: 0x71EE, //CJK UNIFIED IDEOGRAPH - 0xC0E9: 0x71E6, //CJK UNIFIED IDEOGRAPH - 0xC0EA: 0x71E5, //CJK UNIFIED IDEOGRAPH - 0xC0EB: 0x71ED, //CJK UNIFIED IDEOGRAPH - 0xC0EC: 0x71EC, //CJK UNIFIED IDEOGRAPH - 0xC0ED: 0x71F4, //CJK UNIFIED IDEOGRAPH - 0xC0EE: 0x71E0, //CJK UNIFIED IDEOGRAPH - 0xC0EF: 0x7235, //CJK UNIFIED IDEOGRAPH - 0xC0F0: 0x7246, //CJK UNIFIED IDEOGRAPH - 0xC0F1: 0x7370, //CJK UNIFIED IDEOGRAPH - 0xC0F2: 0x7372, //CJK UNIFIED IDEOGRAPH - 0xC0F3: 0x74A9, //CJK UNIFIED IDEOGRAPH - 0xC0F4: 0x74B0, //CJK UNIFIED IDEOGRAPH - 0xC0F5: 0x74A6, //CJK UNIFIED IDEOGRAPH - 0xC0F6: 0x74A8, //CJK UNIFIED IDEOGRAPH - 0xC0F7: 0x7646, //CJK UNIFIED IDEOGRAPH - 0xC0F8: 0x7642, //CJK UNIFIED IDEOGRAPH - 0xC0F9: 0x764C, //CJK UNIFIED IDEOGRAPH - 0xC0FA: 0x76EA, //CJK UNIFIED IDEOGRAPH - 0xC0FB: 0x77B3, //CJK UNIFIED IDEOGRAPH - 0xC0FC: 0x77AA, //CJK UNIFIED IDEOGRAPH - 0xC0FD: 0x77B0, //CJK UNIFIED IDEOGRAPH - 0xC0FE: 0x77AC, //CJK UNIFIED IDEOGRAPH - 0xC140: 0x77A7, //CJK UNIFIED IDEOGRAPH - 0xC141: 0x77AD, //CJK UNIFIED IDEOGRAPH - 0xC142: 0x77EF, //CJK UNIFIED IDEOGRAPH - 0xC143: 0x78F7, //CJK UNIFIED IDEOGRAPH - 0xC144: 0x78FA, //CJK UNIFIED IDEOGRAPH - 0xC145: 0x78F4, //CJK UNIFIED IDEOGRAPH - 0xC146: 0x78EF, //CJK UNIFIED IDEOGRAPH - 0xC147: 0x7901, //CJK UNIFIED IDEOGRAPH - 0xC148: 0x79A7, //CJK UNIFIED IDEOGRAPH - 0xC149: 0x79AA, //CJK UNIFIED IDEOGRAPH - 0xC14A: 0x7A57, //CJK UNIFIED IDEOGRAPH - 0xC14B: 0x7ABF, //CJK UNIFIED IDEOGRAPH - 0xC14C: 0x7C07, //CJK UNIFIED IDEOGRAPH - 0xC14D: 0x7C0D, //CJK UNIFIED IDEOGRAPH - 0xC14E: 0x7BFE, //CJK UNIFIED IDEOGRAPH - 0xC14F: 0x7BF7, //CJK UNIFIED IDEOGRAPH - 0xC150: 0x7C0C, //CJK UNIFIED IDEOGRAPH - 0xC151: 0x7BE0, //CJK UNIFIED IDEOGRAPH - 0xC152: 0x7CE0, //CJK UNIFIED IDEOGRAPH - 0xC153: 0x7CDC, //CJK UNIFIED IDEOGRAPH - 0xC154: 0x7CDE, //CJK UNIFIED IDEOGRAPH - 0xC155: 0x7CE2, //CJK UNIFIED IDEOGRAPH - 0xC156: 0x7CDF, //CJK UNIFIED IDEOGRAPH - 0xC157: 0x7CD9, //CJK UNIFIED IDEOGRAPH - 0xC158: 0x7CDD, //CJK UNIFIED IDEOGRAPH - 0xC159: 0x7E2E, //CJK UNIFIED IDEOGRAPH - 0xC15A: 0x7E3E, //CJK UNIFIED IDEOGRAPH - 0xC15B: 0x7E46, //CJK UNIFIED IDEOGRAPH - 0xC15C: 0x7E37, //CJK UNIFIED IDEOGRAPH - 0xC15D: 0x7E32, //CJK UNIFIED IDEOGRAPH - 0xC15E: 0x7E43, //CJK UNIFIED IDEOGRAPH - 0xC15F: 0x7E2B, //CJK UNIFIED IDEOGRAPH - 0xC160: 0x7E3D, //CJK UNIFIED IDEOGRAPH - 0xC161: 0x7E31, //CJK UNIFIED IDEOGRAPH - 0xC162: 0x7E45, //CJK UNIFIED IDEOGRAPH - 0xC163: 0x7E41, //CJK UNIFIED IDEOGRAPH - 0xC164: 0x7E34, //CJK UNIFIED IDEOGRAPH - 0xC165: 0x7E39, //CJK UNIFIED IDEOGRAPH - 0xC166: 0x7E48, //CJK UNIFIED IDEOGRAPH - 0xC167: 0x7E35, //CJK UNIFIED IDEOGRAPH - 0xC168: 0x7E3F, //CJK UNIFIED IDEOGRAPH - 0xC169: 0x7E2F, //CJK UNIFIED IDEOGRAPH - 0xC16A: 0x7F44, //CJK UNIFIED IDEOGRAPH - 0xC16B: 0x7FF3, //CJK UNIFIED IDEOGRAPH - 0xC16C: 0x7FFC, //CJK UNIFIED IDEOGRAPH - 0xC16D: 0x8071, //CJK UNIFIED IDEOGRAPH - 0xC16E: 0x8072, //CJK UNIFIED IDEOGRAPH - 0xC16F: 0x8070, //CJK UNIFIED IDEOGRAPH - 0xC170: 0x806F, //CJK UNIFIED IDEOGRAPH - 0xC171: 0x8073, //CJK UNIFIED IDEOGRAPH - 0xC172: 0x81C6, //CJK UNIFIED IDEOGRAPH - 0xC173: 0x81C3, //CJK UNIFIED IDEOGRAPH - 0xC174: 0x81BA, //CJK UNIFIED IDEOGRAPH - 0xC175: 0x81C2, //CJK UNIFIED IDEOGRAPH - 0xC176: 0x81C0, //CJK UNIFIED IDEOGRAPH - 0xC177: 0x81BF, //CJK UNIFIED IDEOGRAPH - 0xC178: 0x81BD, //CJK UNIFIED IDEOGRAPH - 0xC179: 0x81C9, //CJK UNIFIED IDEOGRAPH - 0xC17A: 0x81BE, //CJK UNIFIED IDEOGRAPH - 0xC17B: 0x81E8, //CJK UNIFIED IDEOGRAPH - 0xC17C: 0x8209, //CJK UNIFIED IDEOGRAPH - 0xC17D: 0x8271, //CJK UNIFIED IDEOGRAPH - 0xC17E: 0x85AA, //CJK UNIFIED IDEOGRAPH - 0xC1A1: 0x8584, //CJK UNIFIED IDEOGRAPH - 0xC1A2: 0x857E, //CJK UNIFIED IDEOGRAPH - 0xC1A3: 0x859C, //CJK UNIFIED IDEOGRAPH - 0xC1A4: 0x8591, //CJK UNIFIED IDEOGRAPH - 0xC1A5: 0x8594, //CJK UNIFIED IDEOGRAPH - 0xC1A6: 0x85AF, //CJK UNIFIED IDEOGRAPH - 0xC1A7: 0x859B, //CJK UNIFIED IDEOGRAPH - 0xC1A8: 0x8587, //CJK UNIFIED IDEOGRAPH - 0xC1A9: 0x85A8, //CJK UNIFIED IDEOGRAPH - 0xC1AA: 0x858A, //CJK UNIFIED IDEOGRAPH - 0xC1AB: 0x8667, //CJK UNIFIED IDEOGRAPH - 0xC1AC: 0x87C0, //CJK UNIFIED IDEOGRAPH - 0xC1AD: 0x87D1, //CJK UNIFIED IDEOGRAPH - 0xC1AE: 0x87B3, //CJK UNIFIED IDEOGRAPH - 0xC1AF: 0x87D2, //CJK UNIFIED IDEOGRAPH - 0xC1B0: 0x87C6, //CJK UNIFIED IDEOGRAPH - 0xC1B1: 0x87AB, //CJK UNIFIED IDEOGRAPH - 0xC1B2: 0x87BB, //CJK UNIFIED IDEOGRAPH - 0xC1B3: 0x87BA, //CJK UNIFIED IDEOGRAPH - 0xC1B4: 0x87C8, //CJK UNIFIED IDEOGRAPH - 0xC1B5: 0x87CB, //CJK UNIFIED IDEOGRAPH - 0xC1B6: 0x893B, //CJK UNIFIED IDEOGRAPH - 0xC1B7: 0x8936, //CJK UNIFIED IDEOGRAPH - 0xC1B8: 0x8944, //CJK UNIFIED IDEOGRAPH - 0xC1B9: 0x8938, //CJK UNIFIED IDEOGRAPH - 0xC1BA: 0x893D, //CJK UNIFIED IDEOGRAPH - 0xC1BB: 0x89AC, //CJK UNIFIED IDEOGRAPH - 0xC1BC: 0x8B0E, //CJK UNIFIED IDEOGRAPH - 0xC1BD: 0x8B17, //CJK UNIFIED IDEOGRAPH - 0xC1BE: 0x8B19, //CJK UNIFIED IDEOGRAPH - 0xC1BF: 0x8B1B, //CJK UNIFIED IDEOGRAPH - 0xC1C0: 0x8B0A, //CJK UNIFIED IDEOGRAPH - 0xC1C1: 0x8B20, //CJK UNIFIED IDEOGRAPH - 0xC1C2: 0x8B1D, //CJK UNIFIED IDEOGRAPH - 0xC1C3: 0x8B04, //CJK UNIFIED IDEOGRAPH - 0xC1C4: 0x8B10, //CJK UNIFIED IDEOGRAPH - 0xC1C5: 0x8C41, //CJK UNIFIED IDEOGRAPH - 0xC1C6: 0x8C3F, //CJK UNIFIED IDEOGRAPH - 0xC1C7: 0x8C73, //CJK UNIFIED IDEOGRAPH - 0xC1C8: 0x8CFA, //CJK UNIFIED IDEOGRAPH - 0xC1C9: 0x8CFD, //CJK UNIFIED IDEOGRAPH - 0xC1CA: 0x8CFC, //CJK UNIFIED IDEOGRAPH - 0xC1CB: 0x8CF8, //CJK UNIFIED IDEOGRAPH - 0xC1CC: 0x8CFB, //CJK UNIFIED IDEOGRAPH - 0xC1CD: 0x8DA8, //CJK UNIFIED IDEOGRAPH - 0xC1CE: 0x8E49, //CJK UNIFIED IDEOGRAPH - 0xC1CF: 0x8E4B, //CJK UNIFIED IDEOGRAPH - 0xC1D0: 0x8E48, //CJK UNIFIED IDEOGRAPH - 0xC1D1: 0x8E4A, //CJK UNIFIED IDEOGRAPH - 0xC1D2: 0x8F44, //CJK UNIFIED IDEOGRAPH - 0xC1D3: 0x8F3E, //CJK UNIFIED IDEOGRAPH - 0xC1D4: 0x8F42, //CJK UNIFIED IDEOGRAPH - 0xC1D5: 0x8F45, //CJK UNIFIED IDEOGRAPH - 0xC1D6: 0x8F3F, //CJK UNIFIED IDEOGRAPH - 0xC1D7: 0x907F, //CJK UNIFIED IDEOGRAPH - 0xC1D8: 0x907D, //CJK UNIFIED IDEOGRAPH - 0xC1D9: 0x9084, //CJK UNIFIED IDEOGRAPH - 0xC1DA: 0x9081, //CJK UNIFIED IDEOGRAPH - 0xC1DB: 0x9082, //CJK UNIFIED IDEOGRAPH - 0xC1DC: 0x9080, //CJK UNIFIED IDEOGRAPH - 0xC1DD: 0x9139, //CJK UNIFIED IDEOGRAPH - 0xC1DE: 0x91A3, //CJK UNIFIED IDEOGRAPH - 0xC1DF: 0x919E, //CJK UNIFIED IDEOGRAPH - 0xC1E0: 0x919C, //CJK UNIFIED IDEOGRAPH - 0xC1E1: 0x934D, //CJK UNIFIED IDEOGRAPH - 0xC1E2: 0x9382, //CJK UNIFIED IDEOGRAPH - 0xC1E3: 0x9328, //CJK UNIFIED IDEOGRAPH - 0xC1E4: 0x9375, //CJK UNIFIED IDEOGRAPH - 0xC1E5: 0x934A, //CJK UNIFIED IDEOGRAPH - 0xC1E6: 0x9365, //CJK UNIFIED IDEOGRAPH - 0xC1E7: 0x934B, //CJK UNIFIED IDEOGRAPH - 0xC1E8: 0x9318, //CJK UNIFIED IDEOGRAPH - 0xC1E9: 0x937E, //CJK UNIFIED IDEOGRAPH - 0xC1EA: 0x936C, //CJK UNIFIED IDEOGRAPH - 0xC1EB: 0x935B, //CJK UNIFIED IDEOGRAPH - 0xC1EC: 0x9370, //CJK UNIFIED IDEOGRAPH - 0xC1ED: 0x935A, //CJK UNIFIED IDEOGRAPH - 0xC1EE: 0x9354, //CJK UNIFIED IDEOGRAPH - 0xC1EF: 0x95CA, //CJK UNIFIED IDEOGRAPH - 0xC1F0: 0x95CB, //CJK UNIFIED IDEOGRAPH - 0xC1F1: 0x95CC, //CJK UNIFIED IDEOGRAPH - 0xC1F2: 0x95C8, //CJK UNIFIED IDEOGRAPH - 0xC1F3: 0x95C6, //CJK UNIFIED IDEOGRAPH - 0xC1F4: 0x96B1, //CJK UNIFIED IDEOGRAPH - 0xC1F5: 0x96B8, //CJK UNIFIED IDEOGRAPH - 0xC1F6: 0x96D6, //CJK UNIFIED IDEOGRAPH - 0xC1F7: 0x971C, //CJK UNIFIED IDEOGRAPH - 0xC1F8: 0x971E, //CJK UNIFIED IDEOGRAPH - 0xC1F9: 0x97A0, //CJK UNIFIED IDEOGRAPH - 0xC1FA: 0x97D3, //CJK UNIFIED IDEOGRAPH - 0xC1FB: 0x9846, //CJK UNIFIED IDEOGRAPH - 0xC1FC: 0x98B6, //CJK UNIFIED IDEOGRAPH - 0xC1FD: 0x9935, //CJK UNIFIED IDEOGRAPH - 0xC1FE: 0x9A01, //CJK UNIFIED IDEOGRAPH - 0xC240: 0x99FF, //CJK UNIFIED IDEOGRAPH - 0xC241: 0x9BAE, //CJK UNIFIED IDEOGRAPH - 0xC242: 0x9BAB, //CJK UNIFIED IDEOGRAPH - 0xC243: 0x9BAA, //CJK UNIFIED IDEOGRAPH - 0xC244: 0x9BAD, //CJK UNIFIED IDEOGRAPH - 0xC245: 0x9D3B, //CJK UNIFIED IDEOGRAPH - 0xC246: 0x9D3F, //CJK UNIFIED IDEOGRAPH - 0xC247: 0x9E8B, //CJK UNIFIED IDEOGRAPH - 0xC248: 0x9ECF, //CJK UNIFIED IDEOGRAPH - 0xC249: 0x9EDE, //CJK UNIFIED IDEOGRAPH - 0xC24A: 0x9EDC, //CJK UNIFIED IDEOGRAPH - 0xC24B: 0x9EDD, //CJK UNIFIED IDEOGRAPH - 0xC24C: 0x9EDB, //CJK UNIFIED IDEOGRAPH - 0xC24D: 0x9F3E, //CJK UNIFIED IDEOGRAPH - 0xC24E: 0x9F4B, //CJK UNIFIED IDEOGRAPH - 0xC24F: 0x53E2, //CJK UNIFIED IDEOGRAPH - 0xC250: 0x5695, //CJK UNIFIED IDEOGRAPH - 0xC251: 0x56AE, //CJK UNIFIED IDEOGRAPH - 0xC252: 0x58D9, //CJK UNIFIED IDEOGRAPH - 0xC253: 0x58D8, //CJK UNIFIED IDEOGRAPH - 0xC254: 0x5B38, //CJK UNIFIED IDEOGRAPH - 0xC255: 0x5F5D, //CJK UNIFIED IDEOGRAPH - 0xC256: 0x61E3, //CJK UNIFIED IDEOGRAPH - 0xC257: 0x6233, //CJK UNIFIED IDEOGRAPH - 0xC258: 0x64F4, //CJK UNIFIED IDEOGRAPH - 0xC259: 0x64F2, //CJK UNIFIED IDEOGRAPH - 0xC25A: 0x64FE, //CJK UNIFIED IDEOGRAPH - 0xC25B: 0x6506, //CJK UNIFIED IDEOGRAPH - 0xC25C: 0x64FA, //CJK UNIFIED IDEOGRAPH - 0xC25D: 0x64FB, //CJK UNIFIED IDEOGRAPH - 0xC25E: 0x64F7, //CJK UNIFIED IDEOGRAPH - 0xC25F: 0x65B7, //CJK UNIFIED IDEOGRAPH - 0xC260: 0x66DC, //CJK UNIFIED IDEOGRAPH - 0xC261: 0x6726, //CJK UNIFIED IDEOGRAPH - 0xC262: 0x6AB3, //CJK UNIFIED IDEOGRAPH - 0xC263: 0x6AAC, //CJK UNIFIED IDEOGRAPH - 0xC264: 0x6AC3, //CJK UNIFIED IDEOGRAPH - 0xC265: 0x6ABB, //CJK UNIFIED IDEOGRAPH - 0xC266: 0x6AB8, //CJK UNIFIED IDEOGRAPH - 0xC267: 0x6AC2, //CJK UNIFIED IDEOGRAPH - 0xC268: 0x6AAE, //CJK UNIFIED IDEOGRAPH - 0xC269: 0x6AAF, //CJK UNIFIED IDEOGRAPH - 0xC26A: 0x6B5F, //CJK UNIFIED IDEOGRAPH - 0xC26B: 0x6B78, //CJK UNIFIED IDEOGRAPH - 0xC26C: 0x6BAF, //CJK UNIFIED IDEOGRAPH - 0xC26D: 0x7009, //CJK UNIFIED IDEOGRAPH - 0xC26E: 0x700B, //CJK UNIFIED IDEOGRAPH - 0xC26F: 0x6FFE, //CJK UNIFIED IDEOGRAPH - 0xC270: 0x7006, //CJK UNIFIED IDEOGRAPH - 0xC271: 0x6FFA, //CJK UNIFIED IDEOGRAPH - 0xC272: 0x7011, //CJK UNIFIED IDEOGRAPH - 0xC273: 0x700F, //CJK UNIFIED IDEOGRAPH - 0xC274: 0x71FB, //CJK UNIFIED IDEOGRAPH - 0xC275: 0x71FC, //CJK UNIFIED IDEOGRAPH - 0xC276: 0x71FE, //CJK UNIFIED IDEOGRAPH - 0xC277: 0x71F8, //CJK UNIFIED IDEOGRAPH - 0xC278: 0x7377, //CJK UNIFIED IDEOGRAPH - 0xC279: 0x7375, //CJK UNIFIED IDEOGRAPH - 0xC27A: 0x74A7, //CJK UNIFIED IDEOGRAPH - 0xC27B: 0x74BF, //CJK UNIFIED IDEOGRAPH - 0xC27C: 0x7515, //CJK UNIFIED IDEOGRAPH - 0xC27D: 0x7656, //CJK UNIFIED IDEOGRAPH - 0xC27E: 0x7658, //CJK UNIFIED IDEOGRAPH - 0xC2A1: 0x7652, //CJK UNIFIED IDEOGRAPH - 0xC2A2: 0x77BD, //CJK UNIFIED IDEOGRAPH - 0xC2A3: 0x77BF, //CJK UNIFIED IDEOGRAPH - 0xC2A4: 0x77BB, //CJK UNIFIED IDEOGRAPH - 0xC2A5: 0x77BC, //CJK UNIFIED IDEOGRAPH - 0xC2A6: 0x790E, //CJK UNIFIED IDEOGRAPH - 0xC2A7: 0x79AE, //CJK UNIFIED IDEOGRAPH - 0xC2A8: 0x7A61, //CJK UNIFIED IDEOGRAPH - 0xC2A9: 0x7A62, //CJK UNIFIED IDEOGRAPH - 0xC2AA: 0x7A60, //CJK UNIFIED IDEOGRAPH - 0xC2AB: 0x7AC4, //CJK UNIFIED IDEOGRAPH - 0xC2AC: 0x7AC5, //CJK UNIFIED IDEOGRAPH - 0xC2AD: 0x7C2B, //CJK UNIFIED IDEOGRAPH - 0xC2AE: 0x7C27, //CJK UNIFIED IDEOGRAPH - 0xC2AF: 0x7C2A, //CJK UNIFIED IDEOGRAPH - 0xC2B0: 0x7C1E, //CJK UNIFIED IDEOGRAPH - 0xC2B1: 0x7C23, //CJK UNIFIED IDEOGRAPH - 0xC2B2: 0x7C21, //CJK UNIFIED IDEOGRAPH - 0xC2B3: 0x7CE7, //CJK UNIFIED IDEOGRAPH - 0xC2B4: 0x7E54, //CJK UNIFIED IDEOGRAPH - 0xC2B5: 0x7E55, //CJK UNIFIED IDEOGRAPH - 0xC2B6: 0x7E5E, //CJK UNIFIED IDEOGRAPH - 0xC2B7: 0x7E5A, //CJK UNIFIED IDEOGRAPH - 0xC2B8: 0x7E61, //CJK UNIFIED IDEOGRAPH - 0xC2B9: 0x7E52, //CJK UNIFIED IDEOGRAPH - 0xC2BA: 0x7E59, //CJK UNIFIED IDEOGRAPH - 0xC2BB: 0x7F48, //CJK UNIFIED IDEOGRAPH - 0xC2BC: 0x7FF9, //CJK UNIFIED IDEOGRAPH - 0xC2BD: 0x7FFB, //CJK UNIFIED IDEOGRAPH - 0xC2BE: 0x8077, //CJK UNIFIED IDEOGRAPH - 0xC2BF: 0x8076, //CJK UNIFIED IDEOGRAPH - 0xC2C0: 0x81CD, //CJK UNIFIED IDEOGRAPH - 0xC2C1: 0x81CF, //CJK UNIFIED IDEOGRAPH - 0xC2C2: 0x820A, //CJK UNIFIED IDEOGRAPH - 0xC2C3: 0x85CF, //CJK UNIFIED IDEOGRAPH - 0xC2C4: 0x85A9, //CJK UNIFIED IDEOGRAPH - 0xC2C5: 0x85CD, //CJK UNIFIED IDEOGRAPH - 0xC2C6: 0x85D0, //CJK UNIFIED IDEOGRAPH - 0xC2C7: 0x85C9, //CJK UNIFIED IDEOGRAPH - 0xC2C8: 0x85B0, //CJK UNIFIED IDEOGRAPH - 0xC2C9: 0x85BA, //CJK UNIFIED IDEOGRAPH - 0xC2CA: 0x85B9, //CJK UNIFIED IDEOGRAPH - 0xC2CB: 0x85A6, //CJK UNIFIED IDEOGRAPH - 0xC2CC: 0x87EF, //CJK UNIFIED IDEOGRAPH - 0xC2CD: 0x87EC, //CJK UNIFIED IDEOGRAPH - 0xC2CE: 0x87F2, //CJK UNIFIED IDEOGRAPH - 0xC2CF: 0x87E0, //CJK UNIFIED IDEOGRAPH - 0xC2D0: 0x8986, //CJK UNIFIED IDEOGRAPH - 0xC2D1: 0x89B2, //CJK UNIFIED IDEOGRAPH - 0xC2D2: 0x89F4, //CJK UNIFIED IDEOGRAPH - 0xC2D3: 0x8B28, //CJK UNIFIED IDEOGRAPH - 0xC2D4: 0x8B39, //CJK UNIFIED IDEOGRAPH - 0xC2D5: 0x8B2C, //CJK UNIFIED IDEOGRAPH - 0xC2D6: 0x8B2B, //CJK UNIFIED IDEOGRAPH - 0xC2D7: 0x8C50, //CJK UNIFIED IDEOGRAPH - 0xC2D8: 0x8D05, //CJK UNIFIED IDEOGRAPH - 0xC2D9: 0x8E59, //CJK UNIFIED IDEOGRAPH - 0xC2DA: 0x8E63, //CJK UNIFIED IDEOGRAPH - 0xC2DB: 0x8E66, //CJK UNIFIED IDEOGRAPH - 0xC2DC: 0x8E64, //CJK UNIFIED IDEOGRAPH - 0xC2DD: 0x8E5F, //CJK UNIFIED IDEOGRAPH - 0xC2DE: 0x8E55, //CJK UNIFIED IDEOGRAPH - 0xC2DF: 0x8EC0, //CJK UNIFIED IDEOGRAPH - 0xC2E0: 0x8F49, //CJK UNIFIED IDEOGRAPH - 0xC2E1: 0x8F4D, //CJK UNIFIED IDEOGRAPH - 0xC2E2: 0x9087, //CJK UNIFIED IDEOGRAPH - 0xC2E3: 0x9083, //CJK UNIFIED IDEOGRAPH - 0xC2E4: 0x9088, //CJK UNIFIED IDEOGRAPH - 0xC2E5: 0x91AB, //CJK UNIFIED IDEOGRAPH - 0xC2E6: 0x91AC, //CJK UNIFIED IDEOGRAPH - 0xC2E7: 0x91D0, //CJK UNIFIED IDEOGRAPH - 0xC2E8: 0x9394, //CJK UNIFIED IDEOGRAPH - 0xC2E9: 0x938A, //CJK UNIFIED IDEOGRAPH - 0xC2EA: 0x9396, //CJK UNIFIED IDEOGRAPH - 0xC2EB: 0x93A2, //CJK UNIFIED IDEOGRAPH - 0xC2EC: 0x93B3, //CJK UNIFIED IDEOGRAPH - 0xC2ED: 0x93AE, //CJK UNIFIED IDEOGRAPH - 0xC2EE: 0x93AC, //CJK UNIFIED IDEOGRAPH - 0xC2EF: 0x93B0, //CJK UNIFIED IDEOGRAPH - 0xC2F0: 0x9398, //CJK UNIFIED IDEOGRAPH - 0xC2F1: 0x939A, //CJK UNIFIED IDEOGRAPH - 0xC2F2: 0x9397, //CJK UNIFIED IDEOGRAPH - 0xC2F3: 0x95D4, //CJK UNIFIED IDEOGRAPH - 0xC2F4: 0x95D6, //CJK UNIFIED IDEOGRAPH - 0xC2F5: 0x95D0, //CJK UNIFIED IDEOGRAPH - 0xC2F6: 0x95D5, //CJK UNIFIED IDEOGRAPH - 0xC2F7: 0x96E2, //CJK UNIFIED IDEOGRAPH - 0xC2F8: 0x96DC, //CJK UNIFIED IDEOGRAPH - 0xC2F9: 0x96D9, //CJK UNIFIED IDEOGRAPH - 0xC2FA: 0x96DB, //CJK UNIFIED IDEOGRAPH - 0xC2FB: 0x96DE, //CJK UNIFIED IDEOGRAPH - 0xC2FC: 0x9724, //CJK UNIFIED IDEOGRAPH - 0xC2FD: 0x97A3, //CJK UNIFIED IDEOGRAPH - 0xC2FE: 0x97A6, //CJK UNIFIED IDEOGRAPH - 0xC340: 0x97AD, //CJK UNIFIED IDEOGRAPH - 0xC341: 0x97F9, //CJK UNIFIED IDEOGRAPH - 0xC342: 0x984D, //CJK UNIFIED IDEOGRAPH - 0xC343: 0x984F, //CJK UNIFIED IDEOGRAPH - 0xC344: 0x984C, //CJK UNIFIED IDEOGRAPH - 0xC345: 0x984E, //CJK UNIFIED IDEOGRAPH - 0xC346: 0x9853, //CJK UNIFIED IDEOGRAPH - 0xC347: 0x98BA, //CJK UNIFIED IDEOGRAPH - 0xC348: 0x993E, //CJK UNIFIED IDEOGRAPH - 0xC349: 0x993F, //CJK UNIFIED IDEOGRAPH - 0xC34A: 0x993D, //CJK UNIFIED IDEOGRAPH - 0xC34B: 0x992E, //CJK UNIFIED IDEOGRAPH - 0xC34C: 0x99A5, //CJK UNIFIED IDEOGRAPH - 0xC34D: 0x9A0E, //CJK UNIFIED IDEOGRAPH - 0xC34E: 0x9AC1, //CJK UNIFIED IDEOGRAPH - 0xC34F: 0x9B03, //CJK UNIFIED IDEOGRAPH - 0xC350: 0x9B06, //CJK UNIFIED IDEOGRAPH - 0xC351: 0x9B4F, //CJK UNIFIED IDEOGRAPH - 0xC352: 0x9B4E, //CJK UNIFIED IDEOGRAPH - 0xC353: 0x9B4D, //CJK UNIFIED IDEOGRAPH - 0xC354: 0x9BCA, //CJK UNIFIED IDEOGRAPH - 0xC355: 0x9BC9, //CJK UNIFIED IDEOGRAPH - 0xC356: 0x9BFD, //CJK UNIFIED IDEOGRAPH - 0xC357: 0x9BC8, //CJK UNIFIED IDEOGRAPH - 0xC358: 0x9BC0, //CJK UNIFIED IDEOGRAPH - 0xC359: 0x9D51, //CJK UNIFIED IDEOGRAPH - 0xC35A: 0x9D5D, //CJK UNIFIED IDEOGRAPH - 0xC35B: 0x9D60, //CJK UNIFIED IDEOGRAPH - 0xC35C: 0x9EE0, //CJK UNIFIED IDEOGRAPH - 0xC35D: 0x9F15, //CJK UNIFIED IDEOGRAPH - 0xC35E: 0x9F2C, //CJK UNIFIED IDEOGRAPH - 0xC35F: 0x5133, //CJK UNIFIED IDEOGRAPH - 0xC360: 0x56A5, //CJK UNIFIED IDEOGRAPH - 0xC361: 0x58DE, //CJK UNIFIED IDEOGRAPH - 0xC362: 0x58DF, //CJK UNIFIED IDEOGRAPH - 0xC363: 0x58E2, //CJK UNIFIED IDEOGRAPH - 0xC364: 0x5BF5, //CJK UNIFIED IDEOGRAPH - 0xC365: 0x9F90, //CJK UNIFIED IDEOGRAPH - 0xC366: 0x5EEC, //CJK UNIFIED IDEOGRAPH - 0xC367: 0x61F2, //CJK UNIFIED IDEOGRAPH - 0xC368: 0x61F7, //CJK UNIFIED IDEOGRAPH - 0xC369: 0x61F6, //CJK UNIFIED IDEOGRAPH - 0xC36A: 0x61F5, //CJK UNIFIED IDEOGRAPH - 0xC36B: 0x6500, //CJK UNIFIED IDEOGRAPH - 0xC36C: 0x650F, //CJK UNIFIED IDEOGRAPH - 0xC36D: 0x66E0, //CJK UNIFIED IDEOGRAPH - 0xC36E: 0x66DD, //CJK UNIFIED IDEOGRAPH - 0xC36F: 0x6AE5, //CJK UNIFIED IDEOGRAPH - 0xC370: 0x6ADD, //CJK UNIFIED IDEOGRAPH - 0xC371: 0x6ADA, //CJK UNIFIED IDEOGRAPH - 0xC372: 0x6AD3, //CJK UNIFIED IDEOGRAPH - 0xC373: 0x701B, //CJK UNIFIED IDEOGRAPH - 0xC374: 0x701F, //CJK UNIFIED IDEOGRAPH - 0xC375: 0x7028, //CJK UNIFIED IDEOGRAPH - 0xC376: 0x701A, //CJK UNIFIED IDEOGRAPH - 0xC377: 0x701D, //CJK UNIFIED IDEOGRAPH - 0xC378: 0x7015, //CJK UNIFIED IDEOGRAPH - 0xC379: 0x7018, //CJK UNIFIED IDEOGRAPH - 0xC37A: 0x7206, //CJK UNIFIED IDEOGRAPH - 0xC37B: 0x720D, //CJK UNIFIED IDEOGRAPH - 0xC37C: 0x7258, //CJK UNIFIED IDEOGRAPH - 0xC37D: 0x72A2, //CJK UNIFIED IDEOGRAPH - 0xC37E: 0x7378, //CJK UNIFIED IDEOGRAPH - 0xC3A1: 0x737A, //CJK UNIFIED IDEOGRAPH - 0xC3A2: 0x74BD, //CJK UNIFIED IDEOGRAPH - 0xC3A3: 0x74CA, //CJK UNIFIED IDEOGRAPH - 0xC3A4: 0x74E3, //CJK UNIFIED IDEOGRAPH - 0xC3A5: 0x7587, //CJK UNIFIED IDEOGRAPH - 0xC3A6: 0x7586, //CJK UNIFIED IDEOGRAPH - 0xC3A7: 0x765F, //CJK UNIFIED IDEOGRAPH - 0xC3A8: 0x7661, //CJK UNIFIED IDEOGRAPH - 0xC3A9: 0x77C7, //CJK UNIFIED IDEOGRAPH - 0xC3AA: 0x7919, //CJK UNIFIED IDEOGRAPH - 0xC3AB: 0x79B1, //CJK UNIFIED IDEOGRAPH - 0xC3AC: 0x7A6B, //CJK UNIFIED IDEOGRAPH - 0xC3AD: 0x7A69, //CJK UNIFIED IDEOGRAPH - 0xC3AE: 0x7C3E, //CJK UNIFIED IDEOGRAPH - 0xC3AF: 0x7C3F, //CJK UNIFIED IDEOGRAPH - 0xC3B0: 0x7C38, //CJK UNIFIED IDEOGRAPH - 0xC3B1: 0x7C3D, //CJK UNIFIED IDEOGRAPH - 0xC3B2: 0x7C37, //CJK UNIFIED IDEOGRAPH - 0xC3B3: 0x7C40, //CJK UNIFIED IDEOGRAPH - 0xC3B4: 0x7E6B, //CJK UNIFIED IDEOGRAPH - 0xC3B5: 0x7E6D, //CJK UNIFIED IDEOGRAPH - 0xC3B6: 0x7E79, //CJK UNIFIED IDEOGRAPH - 0xC3B7: 0x7E69, //CJK UNIFIED IDEOGRAPH - 0xC3B8: 0x7E6A, //CJK UNIFIED IDEOGRAPH - 0xC3B9: 0x7F85, //CJK UNIFIED IDEOGRAPH - 0xC3BA: 0x7E73, //CJK UNIFIED IDEOGRAPH - 0xC3BB: 0x7FB6, //CJK UNIFIED IDEOGRAPH - 0xC3BC: 0x7FB9, //CJK UNIFIED IDEOGRAPH - 0xC3BD: 0x7FB8, //CJK UNIFIED IDEOGRAPH - 0xC3BE: 0x81D8, //CJK UNIFIED IDEOGRAPH - 0xC3BF: 0x85E9, //CJK UNIFIED IDEOGRAPH - 0xC3C0: 0x85DD, //CJK UNIFIED IDEOGRAPH - 0xC3C1: 0x85EA, //CJK UNIFIED IDEOGRAPH - 0xC3C2: 0x85D5, //CJK UNIFIED IDEOGRAPH - 0xC3C3: 0x85E4, //CJK UNIFIED IDEOGRAPH - 0xC3C4: 0x85E5, //CJK UNIFIED IDEOGRAPH - 0xC3C5: 0x85F7, //CJK UNIFIED IDEOGRAPH - 0xC3C6: 0x87FB, //CJK UNIFIED IDEOGRAPH - 0xC3C7: 0x8805, //CJK UNIFIED IDEOGRAPH - 0xC3C8: 0x880D, //CJK UNIFIED IDEOGRAPH - 0xC3C9: 0x87F9, //CJK UNIFIED IDEOGRAPH - 0xC3CA: 0x87FE, //CJK UNIFIED IDEOGRAPH - 0xC3CB: 0x8960, //CJK UNIFIED IDEOGRAPH - 0xC3CC: 0x895F, //CJK UNIFIED IDEOGRAPH - 0xC3CD: 0x8956, //CJK UNIFIED IDEOGRAPH - 0xC3CE: 0x895E, //CJK UNIFIED IDEOGRAPH - 0xC3CF: 0x8B41, //CJK UNIFIED IDEOGRAPH - 0xC3D0: 0x8B5C, //CJK UNIFIED IDEOGRAPH - 0xC3D1: 0x8B58, //CJK UNIFIED IDEOGRAPH - 0xC3D2: 0x8B49, //CJK UNIFIED IDEOGRAPH - 0xC3D3: 0x8B5A, //CJK UNIFIED IDEOGRAPH - 0xC3D4: 0x8B4E, //CJK UNIFIED IDEOGRAPH - 0xC3D5: 0x8B4F, //CJK UNIFIED IDEOGRAPH - 0xC3D6: 0x8B46, //CJK UNIFIED IDEOGRAPH - 0xC3D7: 0x8B59, //CJK UNIFIED IDEOGRAPH - 0xC3D8: 0x8D08, //CJK UNIFIED IDEOGRAPH - 0xC3D9: 0x8D0A, //CJK UNIFIED IDEOGRAPH - 0xC3DA: 0x8E7C, //CJK UNIFIED IDEOGRAPH - 0xC3DB: 0x8E72, //CJK UNIFIED IDEOGRAPH - 0xC3DC: 0x8E87, //CJK UNIFIED IDEOGRAPH - 0xC3DD: 0x8E76, //CJK UNIFIED IDEOGRAPH - 0xC3DE: 0x8E6C, //CJK UNIFIED IDEOGRAPH - 0xC3DF: 0x8E7A, //CJK UNIFIED IDEOGRAPH - 0xC3E0: 0x8E74, //CJK UNIFIED IDEOGRAPH - 0xC3E1: 0x8F54, //CJK UNIFIED IDEOGRAPH - 0xC3E2: 0x8F4E, //CJK UNIFIED IDEOGRAPH - 0xC3E3: 0x8FAD, //CJK UNIFIED IDEOGRAPH - 0xC3E4: 0x908A, //CJK UNIFIED IDEOGRAPH - 0xC3E5: 0x908B, //CJK UNIFIED IDEOGRAPH - 0xC3E6: 0x91B1, //CJK UNIFIED IDEOGRAPH - 0xC3E7: 0x91AE, //CJK UNIFIED IDEOGRAPH - 0xC3E8: 0x93E1, //CJK UNIFIED IDEOGRAPH - 0xC3E9: 0x93D1, //CJK UNIFIED IDEOGRAPH - 0xC3EA: 0x93DF, //CJK UNIFIED IDEOGRAPH - 0xC3EB: 0x93C3, //CJK UNIFIED IDEOGRAPH - 0xC3EC: 0x93C8, //CJK UNIFIED IDEOGRAPH - 0xC3ED: 0x93DC, //CJK UNIFIED IDEOGRAPH - 0xC3EE: 0x93DD, //CJK UNIFIED IDEOGRAPH - 0xC3EF: 0x93D6, //CJK UNIFIED IDEOGRAPH - 0xC3F0: 0x93E2, //CJK UNIFIED IDEOGRAPH - 0xC3F1: 0x93CD, //CJK UNIFIED IDEOGRAPH - 0xC3F2: 0x93D8, //CJK UNIFIED IDEOGRAPH - 0xC3F3: 0x93E4, //CJK UNIFIED IDEOGRAPH - 0xC3F4: 0x93D7, //CJK UNIFIED IDEOGRAPH - 0xC3F5: 0x93E8, //CJK UNIFIED IDEOGRAPH - 0xC3F6: 0x95DC, //CJK UNIFIED IDEOGRAPH - 0xC3F7: 0x96B4, //CJK UNIFIED IDEOGRAPH - 0xC3F8: 0x96E3, //CJK UNIFIED IDEOGRAPH - 0xC3F9: 0x972A, //CJK UNIFIED IDEOGRAPH - 0xC3FA: 0x9727, //CJK UNIFIED IDEOGRAPH - 0xC3FB: 0x9761, //CJK UNIFIED IDEOGRAPH - 0xC3FC: 0x97DC, //CJK UNIFIED IDEOGRAPH - 0xC3FD: 0x97FB, //CJK UNIFIED IDEOGRAPH - 0xC3FE: 0x985E, //CJK UNIFIED IDEOGRAPH - 0xC440: 0x9858, //CJK UNIFIED IDEOGRAPH - 0xC441: 0x985B, //CJK UNIFIED IDEOGRAPH - 0xC442: 0x98BC, //CJK UNIFIED IDEOGRAPH - 0xC443: 0x9945, //CJK UNIFIED IDEOGRAPH - 0xC444: 0x9949, //CJK UNIFIED IDEOGRAPH - 0xC445: 0x9A16, //CJK UNIFIED IDEOGRAPH - 0xC446: 0x9A19, //CJK UNIFIED IDEOGRAPH - 0xC447: 0x9B0D, //CJK UNIFIED IDEOGRAPH - 0xC448: 0x9BE8, //CJK UNIFIED IDEOGRAPH - 0xC449: 0x9BE7, //CJK UNIFIED IDEOGRAPH - 0xC44A: 0x9BD6, //CJK UNIFIED IDEOGRAPH - 0xC44B: 0x9BDB, //CJK UNIFIED IDEOGRAPH - 0xC44C: 0x9D89, //CJK UNIFIED IDEOGRAPH - 0xC44D: 0x9D61, //CJK UNIFIED IDEOGRAPH - 0xC44E: 0x9D72, //CJK UNIFIED IDEOGRAPH - 0xC44F: 0x9D6A, //CJK UNIFIED IDEOGRAPH - 0xC450: 0x9D6C, //CJK UNIFIED IDEOGRAPH - 0xC451: 0x9E92, //CJK UNIFIED IDEOGRAPH - 0xC452: 0x9E97, //CJK UNIFIED IDEOGRAPH - 0xC453: 0x9E93, //CJK UNIFIED IDEOGRAPH - 0xC454: 0x9EB4, //CJK UNIFIED IDEOGRAPH - 0xC455: 0x52F8, //CJK UNIFIED IDEOGRAPH - 0xC456: 0x56A8, //CJK UNIFIED IDEOGRAPH - 0xC457: 0x56B7, //CJK UNIFIED IDEOGRAPH - 0xC458: 0x56B6, //CJK UNIFIED IDEOGRAPH - 0xC459: 0x56B4, //CJK UNIFIED IDEOGRAPH - 0xC45A: 0x56BC, //CJK UNIFIED IDEOGRAPH - 0xC45B: 0x58E4, //CJK UNIFIED IDEOGRAPH - 0xC45C: 0x5B40, //CJK UNIFIED IDEOGRAPH - 0xC45D: 0x5B43, //CJK UNIFIED IDEOGRAPH - 0xC45E: 0x5B7D, //CJK UNIFIED IDEOGRAPH - 0xC45F: 0x5BF6, //CJK UNIFIED IDEOGRAPH - 0xC460: 0x5DC9, //CJK UNIFIED IDEOGRAPH - 0xC461: 0x61F8, //CJK UNIFIED IDEOGRAPH - 0xC462: 0x61FA, //CJK UNIFIED IDEOGRAPH - 0xC463: 0x6518, //CJK UNIFIED IDEOGRAPH - 0xC464: 0x6514, //CJK UNIFIED IDEOGRAPH - 0xC465: 0x6519, //CJK UNIFIED IDEOGRAPH - 0xC466: 0x66E6, //CJK UNIFIED IDEOGRAPH - 0xC467: 0x6727, //CJK UNIFIED IDEOGRAPH - 0xC468: 0x6AEC, //CJK UNIFIED IDEOGRAPH - 0xC469: 0x703E, //CJK UNIFIED IDEOGRAPH - 0xC46A: 0x7030, //CJK UNIFIED IDEOGRAPH - 0xC46B: 0x7032, //CJK UNIFIED IDEOGRAPH - 0xC46C: 0x7210, //CJK UNIFIED IDEOGRAPH - 0xC46D: 0x737B, //CJK UNIFIED IDEOGRAPH - 0xC46E: 0x74CF, //CJK UNIFIED IDEOGRAPH - 0xC46F: 0x7662, //CJK UNIFIED IDEOGRAPH - 0xC470: 0x7665, //CJK UNIFIED IDEOGRAPH - 0xC471: 0x7926, //CJK UNIFIED IDEOGRAPH - 0xC472: 0x792A, //CJK UNIFIED IDEOGRAPH - 0xC473: 0x792C, //CJK UNIFIED IDEOGRAPH - 0xC474: 0x792B, //CJK UNIFIED IDEOGRAPH - 0xC475: 0x7AC7, //CJK UNIFIED IDEOGRAPH - 0xC476: 0x7AF6, //CJK UNIFIED IDEOGRAPH - 0xC477: 0x7C4C, //CJK UNIFIED IDEOGRAPH - 0xC478: 0x7C43, //CJK UNIFIED IDEOGRAPH - 0xC479: 0x7C4D, //CJK UNIFIED IDEOGRAPH - 0xC47A: 0x7CEF, //CJK UNIFIED IDEOGRAPH - 0xC47B: 0x7CF0, //CJK UNIFIED IDEOGRAPH - 0xC47C: 0x8FAE, //CJK UNIFIED IDEOGRAPH - 0xC47D: 0x7E7D, //CJK UNIFIED IDEOGRAPH - 0xC47E: 0x7E7C, //CJK UNIFIED IDEOGRAPH - 0xC4A1: 0x7E82, //CJK UNIFIED IDEOGRAPH - 0xC4A2: 0x7F4C, //CJK UNIFIED IDEOGRAPH - 0xC4A3: 0x8000, //CJK UNIFIED IDEOGRAPH - 0xC4A4: 0x81DA, //CJK UNIFIED IDEOGRAPH - 0xC4A5: 0x8266, //CJK UNIFIED IDEOGRAPH - 0xC4A6: 0x85FB, //CJK UNIFIED IDEOGRAPH - 0xC4A7: 0x85F9, //CJK UNIFIED IDEOGRAPH - 0xC4A8: 0x8611, //CJK UNIFIED IDEOGRAPH - 0xC4A9: 0x85FA, //CJK UNIFIED IDEOGRAPH - 0xC4AA: 0x8606, //CJK UNIFIED IDEOGRAPH - 0xC4AB: 0x860B, //CJK UNIFIED IDEOGRAPH - 0xC4AC: 0x8607, //CJK UNIFIED IDEOGRAPH - 0xC4AD: 0x860A, //CJK UNIFIED IDEOGRAPH - 0xC4AE: 0x8814, //CJK UNIFIED IDEOGRAPH - 0xC4AF: 0x8815, //CJK UNIFIED IDEOGRAPH - 0xC4B0: 0x8964, //CJK UNIFIED IDEOGRAPH - 0xC4B1: 0x89BA, //CJK UNIFIED IDEOGRAPH - 0xC4B2: 0x89F8, //CJK UNIFIED IDEOGRAPH - 0xC4B3: 0x8B70, //CJK UNIFIED IDEOGRAPH - 0xC4B4: 0x8B6C, //CJK UNIFIED IDEOGRAPH - 0xC4B5: 0x8B66, //CJK UNIFIED IDEOGRAPH - 0xC4B6: 0x8B6F, //CJK UNIFIED IDEOGRAPH - 0xC4B7: 0x8B5F, //CJK UNIFIED IDEOGRAPH - 0xC4B8: 0x8B6B, //CJK UNIFIED IDEOGRAPH - 0xC4B9: 0x8D0F, //CJK UNIFIED IDEOGRAPH - 0xC4BA: 0x8D0D, //CJK UNIFIED IDEOGRAPH - 0xC4BB: 0x8E89, //CJK UNIFIED IDEOGRAPH - 0xC4BC: 0x8E81, //CJK UNIFIED IDEOGRAPH - 0xC4BD: 0x8E85, //CJK UNIFIED IDEOGRAPH - 0xC4BE: 0x8E82, //CJK UNIFIED IDEOGRAPH - 0xC4BF: 0x91B4, //CJK UNIFIED IDEOGRAPH - 0xC4C0: 0x91CB, //CJK UNIFIED IDEOGRAPH - 0xC4C1: 0x9418, //CJK UNIFIED IDEOGRAPH - 0xC4C2: 0x9403, //CJK UNIFIED IDEOGRAPH - 0xC4C3: 0x93FD, //CJK UNIFIED IDEOGRAPH - 0xC4C4: 0x95E1, //CJK UNIFIED IDEOGRAPH - 0xC4C5: 0x9730, //CJK UNIFIED IDEOGRAPH - 0xC4C6: 0x98C4, //CJK UNIFIED IDEOGRAPH - 0xC4C7: 0x9952, //CJK UNIFIED IDEOGRAPH - 0xC4C8: 0x9951, //CJK UNIFIED IDEOGRAPH - 0xC4C9: 0x99A8, //CJK UNIFIED IDEOGRAPH - 0xC4CA: 0x9A2B, //CJK UNIFIED IDEOGRAPH - 0xC4CB: 0x9A30, //CJK UNIFIED IDEOGRAPH - 0xC4CC: 0x9A37, //CJK UNIFIED IDEOGRAPH - 0xC4CD: 0x9A35, //CJK UNIFIED IDEOGRAPH - 0xC4CE: 0x9C13, //CJK UNIFIED IDEOGRAPH - 0xC4CF: 0x9C0D, //CJK UNIFIED IDEOGRAPH - 0xC4D0: 0x9E79, //CJK UNIFIED IDEOGRAPH - 0xC4D1: 0x9EB5, //CJK UNIFIED IDEOGRAPH - 0xC4D2: 0x9EE8, //CJK UNIFIED IDEOGRAPH - 0xC4D3: 0x9F2F, //CJK UNIFIED IDEOGRAPH - 0xC4D4: 0x9F5F, //CJK UNIFIED IDEOGRAPH - 0xC4D5: 0x9F63, //CJK UNIFIED IDEOGRAPH - 0xC4D6: 0x9F61, //CJK UNIFIED IDEOGRAPH - 0xC4D7: 0x5137, //CJK UNIFIED IDEOGRAPH - 0xC4D8: 0x5138, //CJK UNIFIED IDEOGRAPH - 0xC4D9: 0x56C1, //CJK UNIFIED IDEOGRAPH - 0xC4DA: 0x56C0, //CJK UNIFIED IDEOGRAPH - 0xC4DB: 0x56C2, //CJK UNIFIED IDEOGRAPH - 0xC4DC: 0x5914, //CJK UNIFIED IDEOGRAPH - 0xC4DD: 0x5C6C, //CJK UNIFIED IDEOGRAPH - 0xC4DE: 0x5DCD, //CJK UNIFIED IDEOGRAPH - 0xC4DF: 0x61FC, //CJK UNIFIED IDEOGRAPH - 0xC4E0: 0x61FE, //CJK UNIFIED IDEOGRAPH - 0xC4E1: 0x651D, //CJK UNIFIED IDEOGRAPH - 0xC4E2: 0x651C, //CJK UNIFIED IDEOGRAPH - 0xC4E3: 0x6595, //CJK UNIFIED IDEOGRAPH - 0xC4E4: 0x66E9, //CJK UNIFIED IDEOGRAPH - 0xC4E5: 0x6AFB, //CJK UNIFIED IDEOGRAPH - 0xC4E6: 0x6B04, //CJK UNIFIED IDEOGRAPH - 0xC4E7: 0x6AFA, //CJK UNIFIED IDEOGRAPH - 0xC4E8: 0x6BB2, //CJK UNIFIED IDEOGRAPH - 0xC4E9: 0x704C, //CJK UNIFIED IDEOGRAPH - 0xC4EA: 0x721B, //CJK UNIFIED IDEOGRAPH - 0xC4EB: 0x72A7, //CJK UNIFIED IDEOGRAPH - 0xC4EC: 0x74D6, //CJK UNIFIED IDEOGRAPH - 0xC4ED: 0x74D4, //CJK UNIFIED IDEOGRAPH - 0xC4EE: 0x7669, //CJK UNIFIED IDEOGRAPH - 0xC4EF: 0x77D3, //CJK UNIFIED IDEOGRAPH - 0xC4F0: 0x7C50, //CJK UNIFIED IDEOGRAPH - 0xC4F1: 0x7E8F, //CJK UNIFIED IDEOGRAPH - 0xC4F2: 0x7E8C, //CJK UNIFIED IDEOGRAPH - 0xC4F3: 0x7FBC, //CJK UNIFIED IDEOGRAPH - 0xC4F4: 0x8617, //CJK UNIFIED IDEOGRAPH - 0xC4F5: 0x862D, //CJK UNIFIED IDEOGRAPH - 0xC4F6: 0x861A, //CJK UNIFIED IDEOGRAPH - 0xC4F7: 0x8823, //CJK UNIFIED IDEOGRAPH - 0xC4F8: 0x8822, //CJK UNIFIED IDEOGRAPH - 0xC4F9: 0x8821, //CJK UNIFIED IDEOGRAPH - 0xC4FA: 0x881F, //CJK UNIFIED IDEOGRAPH - 0xC4FB: 0x896A, //CJK UNIFIED IDEOGRAPH - 0xC4FC: 0x896C, //CJK UNIFIED IDEOGRAPH - 0xC4FD: 0x89BD, //CJK UNIFIED IDEOGRAPH - 0xC4FE: 0x8B74, //CJK UNIFIED IDEOGRAPH - 0xC540: 0x8B77, //CJK UNIFIED IDEOGRAPH - 0xC541: 0x8B7D, //CJK UNIFIED IDEOGRAPH - 0xC542: 0x8D13, //CJK UNIFIED IDEOGRAPH - 0xC543: 0x8E8A, //CJK UNIFIED IDEOGRAPH - 0xC544: 0x8E8D, //CJK UNIFIED IDEOGRAPH - 0xC545: 0x8E8B, //CJK UNIFIED IDEOGRAPH - 0xC546: 0x8F5F, //CJK UNIFIED IDEOGRAPH - 0xC547: 0x8FAF, //CJK UNIFIED IDEOGRAPH - 0xC548: 0x91BA, //CJK UNIFIED IDEOGRAPH - 0xC549: 0x942E, //CJK UNIFIED IDEOGRAPH - 0xC54A: 0x9433, //CJK UNIFIED IDEOGRAPH - 0xC54B: 0x9435, //CJK UNIFIED IDEOGRAPH - 0xC54C: 0x943A, //CJK UNIFIED IDEOGRAPH - 0xC54D: 0x9438, //CJK UNIFIED IDEOGRAPH - 0xC54E: 0x9432, //CJK UNIFIED IDEOGRAPH - 0xC54F: 0x942B, //CJK UNIFIED IDEOGRAPH - 0xC550: 0x95E2, //CJK UNIFIED IDEOGRAPH - 0xC551: 0x9738, //CJK UNIFIED IDEOGRAPH - 0xC552: 0x9739, //CJK UNIFIED IDEOGRAPH - 0xC553: 0x9732, //CJK UNIFIED IDEOGRAPH - 0xC554: 0x97FF, //CJK UNIFIED IDEOGRAPH - 0xC555: 0x9867, //CJK UNIFIED IDEOGRAPH - 0xC556: 0x9865, //CJK UNIFIED IDEOGRAPH - 0xC557: 0x9957, //CJK UNIFIED IDEOGRAPH - 0xC558: 0x9A45, //CJK UNIFIED IDEOGRAPH - 0xC559: 0x9A43, //CJK UNIFIED IDEOGRAPH - 0xC55A: 0x9A40, //CJK UNIFIED IDEOGRAPH - 0xC55B: 0x9A3E, //CJK UNIFIED IDEOGRAPH - 0xC55C: 0x9ACF, //CJK UNIFIED IDEOGRAPH - 0xC55D: 0x9B54, //CJK UNIFIED IDEOGRAPH - 0xC55E: 0x9B51, //CJK UNIFIED IDEOGRAPH - 0xC55F: 0x9C2D, //CJK UNIFIED IDEOGRAPH - 0xC560: 0x9C25, //CJK UNIFIED IDEOGRAPH - 0xC561: 0x9DAF, //CJK UNIFIED IDEOGRAPH - 0xC562: 0x9DB4, //CJK UNIFIED IDEOGRAPH - 0xC563: 0x9DC2, //CJK UNIFIED IDEOGRAPH - 0xC564: 0x9DB8, //CJK UNIFIED IDEOGRAPH - 0xC565: 0x9E9D, //CJK UNIFIED IDEOGRAPH - 0xC566: 0x9EEF, //CJK UNIFIED IDEOGRAPH - 0xC567: 0x9F19, //CJK UNIFIED IDEOGRAPH - 0xC568: 0x9F5C, //CJK UNIFIED IDEOGRAPH - 0xC569: 0x9F66, //CJK UNIFIED IDEOGRAPH - 0xC56A: 0x9F67, //CJK UNIFIED IDEOGRAPH - 0xC56B: 0x513C, //CJK UNIFIED IDEOGRAPH - 0xC56C: 0x513B, //CJK UNIFIED IDEOGRAPH - 0xC56D: 0x56C8, //CJK UNIFIED IDEOGRAPH - 0xC56E: 0x56CA, //CJK UNIFIED IDEOGRAPH - 0xC56F: 0x56C9, //CJK UNIFIED IDEOGRAPH - 0xC570: 0x5B7F, //CJK UNIFIED IDEOGRAPH - 0xC571: 0x5DD4, //CJK UNIFIED IDEOGRAPH - 0xC572: 0x5DD2, //CJK UNIFIED IDEOGRAPH - 0xC573: 0x5F4E, //CJK UNIFIED IDEOGRAPH - 0xC574: 0x61FF, //CJK UNIFIED IDEOGRAPH - 0xC575: 0x6524, //CJK UNIFIED IDEOGRAPH - 0xC576: 0x6B0A, //CJK UNIFIED IDEOGRAPH - 0xC577: 0x6B61, //CJK UNIFIED IDEOGRAPH - 0xC578: 0x7051, //CJK UNIFIED IDEOGRAPH - 0xC579: 0x7058, //CJK UNIFIED IDEOGRAPH - 0xC57A: 0x7380, //CJK UNIFIED IDEOGRAPH - 0xC57B: 0x74E4, //CJK UNIFIED IDEOGRAPH - 0xC57C: 0x758A, //CJK UNIFIED IDEOGRAPH - 0xC57D: 0x766E, //CJK UNIFIED IDEOGRAPH - 0xC57E: 0x766C, //CJK UNIFIED IDEOGRAPH - 0xC5A1: 0x79B3, //CJK UNIFIED IDEOGRAPH - 0xC5A2: 0x7C60, //CJK UNIFIED IDEOGRAPH - 0xC5A3: 0x7C5F, //CJK UNIFIED IDEOGRAPH - 0xC5A4: 0x807E, //CJK UNIFIED IDEOGRAPH - 0xC5A5: 0x807D, //CJK UNIFIED IDEOGRAPH - 0xC5A6: 0x81DF, //CJK UNIFIED IDEOGRAPH - 0xC5A7: 0x8972, //CJK UNIFIED IDEOGRAPH - 0xC5A8: 0x896F, //CJK UNIFIED IDEOGRAPH - 0xC5A9: 0x89FC, //CJK UNIFIED IDEOGRAPH - 0xC5AA: 0x8B80, //CJK UNIFIED IDEOGRAPH - 0xC5AB: 0x8D16, //CJK UNIFIED IDEOGRAPH - 0xC5AC: 0x8D17, //CJK UNIFIED IDEOGRAPH - 0xC5AD: 0x8E91, //CJK UNIFIED IDEOGRAPH - 0xC5AE: 0x8E93, //CJK UNIFIED IDEOGRAPH - 0xC5AF: 0x8F61, //CJK UNIFIED IDEOGRAPH - 0xC5B0: 0x9148, //CJK UNIFIED IDEOGRAPH - 0xC5B1: 0x9444, //CJK UNIFIED IDEOGRAPH - 0xC5B2: 0x9451, //CJK UNIFIED IDEOGRAPH - 0xC5B3: 0x9452, //CJK UNIFIED IDEOGRAPH - 0xC5B4: 0x973D, //CJK UNIFIED IDEOGRAPH - 0xC5B5: 0x973E, //CJK UNIFIED IDEOGRAPH - 0xC5B6: 0x97C3, //CJK UNIFIED IDEOGRAPH - 0xC5B7: 0x97C1, //CJK UNIFIED IDEOGRAPH - 0xC5B8: 0x986B, //CJK UNIFIED IDEOGRAPH - 0xC5B9: 0x9955, //CJK UNIFIED IDEOGRAPH - 0xC5BA: 0x9A55, //CJK UNIFIED IDEOGRAPH - 0xC5BB: 0x9A4D, //CJK UNIFIED IDEOGRAPH - 0xC5BC: 0x9AD2, //CJK UNIFIED IDEOGRAPH - 0xC5BD: 0x9B1A, //CJK UNIFIED IDEOGRAPH - 0xC5BE: 0x9C49, //CJK UNIFIED IDEOGRAPH - 0xC5BF: 0x9C31, //CJK UNIFIED IDEOGRAPH - 0xC5C0: 0x9C3E, //CJK UNIFIED IDEOGRAPH - 0xC5C1: 0x9C3B, //CJK UNIFIED IDEOGRAPH - 0xC5C2: 0x9DD3, //CJK UNIFIED IDEOGRAPH - 0xC5C3: 0x9DD7, //CJK UNIFIED IDEOGRAPH - 0xC5C4: 0x9F34, //CJK UNIFIED IDEOGRAPH - 0xC5C5: 0x9F6C, //CJK UNIFIED IDEOGRAPH - 0xC5C6: 0x9F6A, //CJK UNIFIED IDEOGRAPH - 0xC5C7: 0x9F94, //CJK UNIFIED IDEOGRAPH - 0xC5C8: 0x56CC, //CJK UNIFIED IDEOGRAPH - 0xC5C9: 0x5DD6, //CJK UNIFIED IDEOGRAPH - 0xC5CA: 0x6200, //CJK UNIFIED IDEOGRAPH - 0xC5CB: 0x6523, //CJK UNIFIED IDEOGRAPH - 0xC5CC: 0x652B, //CJK UNIFIED IDEOGRAPH - 0xC5CD: 0x652A, //CJK UNIFIED IDEOGRAPH - 0xC5CE: 0x66EC, //CJK UNIFIED IDEOGRAPH - 0xC5CF: 0x6B10, //CJK UNIFIED IDEOGRAPH - 0xC5D0: 0x74DA, //CJK UNIFIED IDEOGRAPH - 0xC5D1: 0x7ACA, //CJK UNIFIED IDEOGRAPH - 0xC5D2: 0x7C64, //CJK UNIFIED IDEOGRAPH - 0xC5D3: 0x7C63, //CJK UNIFIED IDEOGRAPH - 0xC5D4: 0x7C65, //CJK UNIFIED IDEOGRAPH - 0xC5D5: 0x7E93, //CJK UNIFIED IDEOGRAPH - 0xC5D6: 0x7E96, //CJK UNIFIED IDEOGRAPH - 0xC5D7: 0x7E94, //CJK UNIFIED IDEOGRAPH - 0xC5D8: 0x81E2, //CJK UNIFIED IDEOGRAPH - 0xC5D9: 0x8638, //CJK UNIFIED IDEOGRAPH - 0xC5DA: 0x863F, //CJK UNIFIED IDEOGRAPH - 0xC5DB: 0x8831, //CJK UNIFIED IDEOGRAPH - 0xC5DC: 0x8B8A, //CJK UNIFIED IDEOGRAPH - 0xC5DD: 0x9090, //CJK UNIFIED IDEOGRAPH - 0xC5DE: 0x908F, //CJK UNIFIED IDEOGRAPH - 0xC5DF: 0x9463, //CJK UNIFIED IDEOGRAPH - 0xC5E0: 0x9460, //CJK UNIFIED IDEOGRAPH - 0xC5E1: 0x9464, //CJK UNIFIED IDEOGRAPH - 0xC5E2: 0x9768, //CJK UNIFIED IDEOGRAPH - 0xC5E3: 0x986F, //CJK UNIFIED IDEOGRAPH - 0xC5E4: 0x995C, //CJK UNIFIED IDEOGRAPH - 0xC5E5: 0x9A5A, //CJK UNIFIED IDEOGRAPH - 0xC5E6: 0x9A5B, //CJK UNIFIED IDEOGRAPH - 0xC5E7: 0x9A57, //CJK UNIFIED IDEOGRAPH - 0xC5E8: 0x9AD3, //CJK UNIFIED IDEOGRAPH - 0xC5E9: 0x9AD4, //CJK UNIFIED IDEOGRAPH - 0xC5EA: 0x9AD1, //CJK UNIFIED IDEOGRAPH - 0xC5EB: 0x9C54, //CJK UNIFIED IDEOGRAPH - 0xC5EC: 0x9C57, //CJK UNIFIED IDEOGRAPH - 0xC5ED: 0x9C56, //CJK UNIFIED IDEOGRAPH - 0xC5EE: 0x9DE5, //CJK UNIFIED IDEOGRAPH - 0xC5EF: 0x9E9F, //CJK UNIFIED IDEOGRAPH - 0xC5F0: 0x9EF4, //CJK UNIFIED IDEOGRAPH - 0xC5F1: 0x56D1, //CJK UNIFIED IDEOGRAPH - 0xC5F2: 0x58E9, //CJK UNIFIED IDEOGRAPH - 0xC5F3: 0x652C, //CJK UNIFIED IDEOGRAPH - 0xC5F4: 0x705E, //CJK UNIFIED IDEOGRAPH - 0xC5F5: 0x7671, //CJK UNIFIED IDEOGRAPH - 0xC5F6: 0x7672, //CJK UNIFIED IDEOGRAPH - 0xC5F7: 0x77D7, //CJK UNIFIED IDEOGRAPH - 0xC5F8: 0x7F50, //CJK UNIFIED IDEOGRAPH - 0xC5F9: 0x7F88, //CJK UNIFIED IDEOGRAPH - 0xC5FA: 0x8836, //CJK UNIFIED IDEOGRAPH - 0xC5FB: 0x8839, //CJK UNIFIED IDEOGRAPH - 0xC5FC: 0x8862, //CJK UNIFIED IDEOGRAPH - 0xC5FD: 0x8B93, //CJK UNIFIED IDEOGRAPH - 0xC5FE: 0x8B92, //CJK UNIFIED IDEOGRAPH - 0xC640: 0x8B96, //CJK UNIFIED IDEOGRAPH - 0xC641: 0x8277, //CJK UNIFIED IDEOGRAPH - 0xC642: 0x8D1B, //CJK UNIFIED IDEOGRAPH - 0xC643: 0x91C0, //CJK UNIFIED IDEOGRAPH - 0xC644: 0x946A, //CJK UNIFIED IDEOGRAPH - 0xC645: 0x9742, //CJK UNIFIED IDEOGRAPH - 0xC646: 0x9748, //CJK UNIFIED IDEOGRAPH - 0xC647: 0x9744, //CJK UNIFIED IDEOGRAPH - 0xC648: 0x97C6, //CJK UNIFIED IDEOGRAPH - 0xC649: 0x9870, //CJK UNIFIED IDEOGRAPH - 0xC64A: 0x9A5F, //CJK UNIFIED IDEOGRAPH - 0xC64B: 0x9B22, //CJK UNIFIED IDEOGRAPH - 0xC64C: 0x9B58, //CJK UNIFIED IDEOGRAPH - 0xC64D: 0x9C5F, //CJK UNIFIED IDEOGRAPH - 0xC64E: 0x9DF9, //CJK UNIFIED IDEOGRAPH - 0xC64F: 0x9DFA, //CJK UNIFIED IDEOGRAPH - 0xC650: 0x9E7C, //CJK UNIFIED IDEOGRAPH - 0xC651: 0x9E7D, //CJK UNIFIED IDEOGRAPH - 0xC652: 0x9F07, //CJK UNIFIED IDEOGRAPH - 0xC653: 0x9F77, //CJK UNIFIED IDEOGRAPH - 0xC654: 0x9F72, //CJK UNIFIED IDEOGRAPH - 0xC655: 0x5EF3, //CJK UNIFIED IDEOGRAPH - 0xC656: 0x6B16, //CJK UNIFIED IDEOGRAPH - 0xC657: 0x7063, //CJK UNIFIED IDEOGRAPH - 0xC658: 0x7C6C, //CJK UNIFIED IDEOGRAPH - 0xC659: 0x7C6E, //CJK UNIFIED IDEOGRAPH - 0xC65A: 0x883B, //CJK UNIFIED IDEOGRAPH - 0xC65B: 0x89C0, //CJK UNIFIED IDEOGRAPH - 0xC65C: 0x8EA1, //CJK UNIFIED IDEOGRAPH - 0xC65D: 0x91C1, //CJK UNIFIED IDEOGRAPH - 0xC65E: 0x9472, //CJK UNIFIED IDEOGRAPH - 0xC65F: 0x9470, //CJK UNIFIED IDEOGRAPH - 0xC660: 0x9871, //CJK UNIFIED IDEOGRAPH - 0xC661: 0x995E, //CJK UNIFIED IDEOGRAPH - 0xC662: 0x9AD6, //CJK UNIFIED IDEOGRAPH - 0xC663: 0x9B23, //CJK UNIFIED IDEOGRAPH - 0xC664: 0x9ECC, //CJK UNIFIED IDEOGRAPH - 0xC665: 0x7064, //CJK UNIFIED IDEOGRAPH - 0xC666: 0x77DA, //CJK UNIFIED IDEOGRAPH - 0xC667: 0x8B9A, //CJK UNIFIED IDEOGRAPH - 0xC668: 0x9477, //CJK UNIFIED IDEOGRAPH - 0xC669: 0x97C9, //CJK UNIFIED IDEOGRAPH - 0xC66A: 0x9A62, //CJK UNIFIED IDEOGRAPH - 0xC66B: 0x9A65, //CJK UNIFIED IDEOGRAPH - 0xC66C: 0x7E9C, //CJK UNIFIED IDEOGRAPH - 0xC66D: 0x8B9C, //CJK UNIFIED IDEOGRAPH - 0xC66E: 0x8EAA, //CJK UNIFIED IDEOGRAPH - 0xC66F: 0x91C5, //CJK UNIFIED IDEOGRAPH - 0xC670: 0x947D, //CJK UNIFIED IDEOGRAPH - 0xC671: 0x947E, //CJK UNIFIED IDEOGRAPH - 0xC672: 0x947C, //CJK UNIFIED IDEOGRAPH - 0xC673: 0x9C77, //CJK UNIFIED IDEOGRAPH - 0xC674: 0x9C78, //CJK UNIFIED IDEOGRAPH - 0xC675: 0x9EF7, //CJK UNIFIED IDEOGRAPH - 0xC676: 0x8C54, //CJK UNIFIED IDEOGRAPH - 0xC677: 0x947F, //CJK UNIFIED IDEOGRAPH - 0xC678: 0x9E1A, //CJK UNIFIED IDEOGRAPH - 0xC679: 0x7228, //CJK UNIFIED IDEOGRAPH - 0xC67A: 0x9A6A, //CJK UNIFIED IDEOGRAPH - 0xC67B: 0x9B31, //CJK UNIFIED IDEOGRAPH - 0xC67C: 0x9E1B, //CJK UNIFIED IDEOGRAPH - 0xC67D: 0x9E1E, //CJK UNIFIED IDEOGRAPH - 0xC67E: 0x7C72, //CJK UNIFIED IDEOGRAPH - 0xC940: 0x4E42, //CJK UNIFIED IDEOGRAPH - 0xC941: 0x4E5C, //CJK UNIFIED IDEOGRAPH - 0xC942: 0x51F5, //CJK UNIFIED IDEOGRAPH - 0xC943: 0x531A, //CJK UNIFIED IDEOGRAPH - 0xC944: 0x5382, //CJK UNIFIED IDEOGRAPH - 0xC945: 0x4E07, //CJK UNIFIED IDEOGRAPH - 0xC946: 0x4E0C, //CJK UNIFIED IDEOGRAPH - 0xC947: 0x4E47, //CJK UNIFIED IDEOGRAPH - 0xC948: 0x4E8D, //CJK UNIFIED IDEOGRAPH - 0xC949: 0x56D7, //CJK UNIFIED IDEOGRAPH - 0xC94A: 0xFA0C, //CJK COMPATIBILITY IDEOGRAPH - 0xC94B: 0x5C6E, //CJK UNIFIED IDEOGRAPH - 0xC94C: 0x5F73, //CJK UNIFIED IDEOGRAPH - 0xC94D: 0x4E0F, //CJK UNIFIED IDEOGRAPH - 0xC94E: 0x5187, //CJK UNIFIED IDEOGRAPH - 0xC94F: 0x4E0E, //CJK UNIFIED IDEOGRAPH - 0xC950: 0x4E2E, //CJK UNIFIED IDEOGRAPH - 0xC951: 0x4E93, //CJK UNIFIED IDEOGRAPH - 0xC952: 0x4EC2, //CJK UNIFIED IDEOGRAPH - 0xC953: 0x4EC9, //CJK UNIFIED IDEOGRAPH - 0xC954: 0x4EC8, //CJK UNIFIED IDEOGRAPH - 0xC955: 0x5198, //CJK UNIFIED IDEOGRAPH - 0xC956: 0x52FC, //CJK UNIFIED IDEOGRAPH - 0xC957: 0x536C, //CJK UNIFIED IDEOGRAPH - 0xC958: 0x53B9, //CJK UNIFIED IDEOGRAPH - 0xC959: 0x5720, //CJK UNIFIED IDEOGRAPH - 0xC95A: 0x5903, //CJK UNIFIED IDEOGRAPH - 0xC95B: 0x592C, //CJK UNIFIED IDEOGRAPH - 0xC95C: 0x5C10, //CJK UNIFIED IDEOGRAPH - 0xC95D: 0x5DFF, //CJK UNIFIED IDEOGRAPH - 0xC95E: 0x65E1, //CJK UNIFIED IDEOGRAPH - 0xC95F: 0x6BB3, //CJK UNIFIED IDEOGRAPH - 0xC960: 0x6BCC, //CJK UNIFIED IDEOGRAPH - 0xC961: 0x6C14, //CJK UNIFIED IDEOGRAPH - 0xC962: 0x723F, //CJK UNIFIED IDEOGRAPH - 0xC963: 0x4E31, //CJK UNIFIED IDEOGRAPH - 0xC964: 0x4E3C, //CJK UNIFIED IDEOGRAPH - 0xC965: 0x4EE8, //CJK UNIFIED IDEOGRAPH - 0xC966: 0x4EDC, //CJK UNIFIED IDEOGRAPH - 0xC967: 0x4EE9, //CJK UNIFIED IDEOGRAPH - 0xC968: 0x4EE1, //CJK UNIFIED IDEOGRAPH - 0xC969: 0x4EDD, //CJK UNIFIED IDEOGRAPH - 0xC96A: 0x4EDA, //CJK UNIFIED IDEOGRAPH - 0xC96B: 0x520C, //CJK UNIFIED IDEOGRAPH - 0xC96C: 0x531C, //CJK UNIFIED IDEOGRAPH - 0xC96D: 0x534C, //CJK UNIFIED IDEOGRAPH - 0xC96E: 0x5722, //CJK UNIFIED IDEOGRAPH - 0xC96F: 0x5723, //CJK UNIFIED IDEOGRAPH - 0xC970: 0x5917, //CJK UNIFIED IDEOGRAPH - 0xC971: 0x592F, //CJK UNIFIED IDEOGRAPH - 0xC972: 0x5B81, //CJK UNIFIED IDEOGRAPH - 0xC973: 0x5B84, //CJK UNIFIED IDEOGRAPH - 0xC974: 0x5C12, //CJK UNIFIED IDEOGRAPH - 0xC975: 0x5C3B, //CJK UNIFIED IDEOGRAPH - 0xC976: 0x5C74, //CJK UNIFIED IDEOGRAPH - 0xC977: 0x5C73, //CJK UNIFIED IDEOGRAPH - 0xC978: 0x5E04, //CJK UNIFIED IDEOGRAPH - 0xC979: 0x5E80, //CJK UNIFIED IDEOGRAPH - 0xC97A: 0x5E82, //CJK UNIFIED IDEOGRAPH - 0xC97B: 0x5FC9, //CJK UNIFIED IDEOGRAPH - 0xC97C: 0x6209, //CJK UNIFIED IDEOGRAPH - 0xC97D: 0x6250, //CJK UNIFIED IDEOGRAPH - 0xC97E: 0x6C15, //CJK UNIFIED IDEOGRAPH - 0xC9A1: 0x6C36, //CJK UNIFIED IDEOGRAPH - 0xC9A2: 0x6C43, //CJK UNIFIED IDEOGRAPH - 0xC9A3: 0x6C3F, //CJK UNIFIED IDEOGRAPH - 0xC9A4: 0x6C3B, //CJK UNIFIED IDEOGRAPH - 0xC9A5: 0x72AE, //CJK UNIFIED IDEOGRAPH - 0xC9A6: 0x72B0, //CJK UNIFIED IDEOGRAPH - 0xC9A7: 0x738A, //CJK UNIFIED IDEOGRAPH - 0xC9A8: 0x79B8, //CJK UNIFIED IDEOGRAPH - 0xC9A9: 0x808A, //CJK UNIFIED IDEOGRAPH - 0xC9AA: 0x961E, //CJK UNIFIED IDEOGRAPH - 0xC9AB: 0x4F0E, //CJK UNIFIED IDEOGRAPH - 0xC9AC: 0x4F18, //CJK UNIFIED IDEOGRAPH - 0xC9AD: 0x4F2C, //CJK UNIFIED IDEOGRAPH - 0xC9AE: 0x4EF5, //CJK UNIFIED IDEOGRAPH - 0xC9AF: 0x4F14, //CJK UNIFIED IDEOGRAPH - 0xC9B0: 0x4EF1, //CJK UNIFIED IDEOGRAPH - 0xC9B1: 0x4F00, //CJK UNIFIED IDEOGRAPH - 0xC9B2: 0x4EF7, //CJK UNIFIED IDEOGRAPH - 0xC9B3: 0x4F08, //CJK UNIFIED IDEOGRAPH - 0xC9B4: 0x4F1D, //CJK UNIFIED IDEOGRAPH - 0xC9B5: 0x4F02, //CJK UNIFIED IDEOGRAPH - 0xC9B6: 0x4F05, //CJK UNIFIED IDEOGRAPH - 0xC9B7: 0x4F22, //CJK UNIFIED IDEOGRAPH - 0xC9B8: 0x4F13, //CJK UNIFIED IDEOGRAPH - 0xC9B9: 0x4F04, //CJK UNIFIED IDEOGRAPH - 0xC9BA: 0x4EF4, //CJK UNIFIED IDEOGRAPH - 0xC9BB: 0x4F12, //CJK UNIFIED IDEOGRAPH - 0xC9BC: 0x51B1, //CJK UNIFIED IDEOGRAPH - 0xC9BD: 0x5213, //CJK UNIFIED IDEOGRAPH - 0xC9BE: 0x5209, //CJK UNIFIED IDEOGRAPH - 0xC9BF: 0x5210, //CJK UNIFIED IDEOGRAPH - 0xC9C0: 0x52A6, //CJK UNIFIED IDEOGRAPH - 0xC9C1: 0x5322, //CJK UNIFIED IDEOGRAPH - 0xC9C2: 0x531F, //CJK UNIFIED IDEOGRAPH - 0xC9C3: 0x534D, //CJK UNIFIED IDEOGRAPH - 0xC9C4: 0x538A, //CJK UNIFIED IDEOGRAPH - 0xC9C5: 0x5407, //CJK UNIFIED IDEOGRAPH - 0xC9C6: 0x56E1, //CJK UNIFIED IDEOGRAPH - 0xC9C7: 0x56DF, //CJK UNIFIED IDEOGRAPH - 0xC9C8: 0x572E, //CJK UNIFIED IDEOGRAPH - 0xC9C9: 0x572A, //CJK UNIFIED IDEOGRAPH - 0xC9CA: 0x5734, //CJK UNIFIED IDEOGRAPH - 0xC9CB: 0x593C, //CJK UNIFIED IDEOGRAPH - 0xC9CC: 0x5980, //CJK UNIFIED IDEOGRAPH - 0xC9CD: 0x597C, //CJK UNIFIED IDEOGRAPH - 0xC9CE: 0x5985, //CJK UNIFIED IDEOGRAPH - 0xC9CF: 0x597B, //CJK UNIFIED IDEOGRAPH - 0xC9D0: 0x597E, //CJK UNIFIED IDEOGRAPH - 0xC9D1: 0x5977, //CJK UNIFIED IDEOGRAPH - 0xC9D2: 0x597F, //CJK UNIFIED IDEOGRAPH - 0xC9D3: 0x5B56, //CJK UNIFIED IDEOGRAPH - 0xC9D4: 0x5C15, //CJK UNIFIED IDEOGRAPH - 0xC9D5: 0x5C25, //CJK UNIFIED IDEOGRAPH - 0xC9D6: 0x5C7C, //CJK UNIFIED IDEOGRAPH - 0xC9D7: 0x5C7A, //CJK UNIFIED IDEOGRAPH - 0xC9D8: 0x5C7B, //CJK UNIFIED IDEOGRAPH - 0xC9D9: 0x5C7E, //CJK UNIFIED IDEOGRAPH - 0xC9DA: 0x5DDF, //CJK UNIFIED IDEOGRAPH - 0xC9DB: 0x5E75, //CJK UNIFIED IDEOGRAPH - 0xC9DC: 0x5E84, //CJK UNIFIED IDEOGRAPH - 0xC9DD: 0x5F02, //CJK UNIFIED IDEOGRAPH - 0xC9DE: 0x5F1A, //CJK UNIFIED IDEOGRAPH - 0xC9DF: 0x5F74, //CJK UNIFIED IDEOGRAPH - 0xC9E0: 0x5FD5, //CJK UNIFIED IDEOGRAPH - 0xC9E1: 0x5FD4, //CJK UNIFIED IDEOGRAPH - 0xC9E2: 0x5FCF, //CJK UNIFIED IDEOGRAPH - 0xC9E3: 0x625C, //CJK UNIFIED IDEOGRAPH - 0xC9E4: 0x625E, //CJK UNIFIED IDEOGRAPH - 0xC9E5: 0x6264, //CJK UNIFIED IDEOGRAPH - 0xC9E6: 0x6261, //CJK UNIFIED IDEOGRAPH - 0xC9E7: 0x6266, //CJK UNIFIED IDEOGRAPH - 0xC9E8: 0x6262, //CJK UNIFIED IDEOGRAPH - 0xC9E9: 0x6259, //CJK UNIFIED IDEOGRAPH - 0xC9EA: 0x6260, //CJK UNIFIED IDEOGRAPH - 0xC9EB: 0x625A, //CJK UNIFIED IDEOGRAPH - 0xC9EC: 0x6265, //CJK UNIFIED IDEOGRAPH - 0xC9ED: 0x65EF, //CJK UNIFIED IDEOGRAPH - 0xC9EE: 0x65EE, //CJK UNIFIED IDEOGRAPH - 0xC9EF: 0x673E, //CJK UNIFIED IDEOGRAPH - 0xC9F0: 0x6739, //CJK UNIFIED IDEOGRAPH - 0xC9F1: 0x6738, //CJK UNIFIED IDEOGRAPH - 0xC9F2: 0x673B, //CJK UNIFIED IDEOGRAPH - 0xC9F3: 0x673A, //CJK UNIFIED IDEOGRAPH - 0xC9F4: 0x673F, //CJK UNIFIED IDEOGRAPH - 0xC9F5: 0x673C, //CJK UNIFIED IDEOGRAPH - 0xC9F6: 0x6733, //CJK UNIFIED IDEOGRAPH - 0xC9F7: 0x6C18, //CJK UNIFIED IDEOGRAPH - 0xC9F8: 0x6C46, //CJK UNIFIED IDEOGRAPH - 0xC9F9: 0x6C52, //CJK UNIFIED IDEOGRAPH - 0xC9FA: 0x6C5C, //CJK UNIFIED IDEOGRAPH - 0xC9FB: 0x6C4F, //CJK UNIFIED IDEOGRAPH - 0xC9FC: 0x6C4A, //CJK UNIFIED IDEOGRAPH - 0xC9FD: 0x6C54, //CJK UNIFIED IDEOGRAPH - 0xC9FE: 0x6C4B, //CJK UNIFIED IDEOGRAPH - 0xCA40: 0x6C4C, //CJK UNIFIED IDEOGRAPH - 0xCA41: 0x7071, //CJK UNIFIED IDEOGRAPH - 0xCA42: 0x725E, //CJK UNIFIED IDEOGRAPH - 0xCA43: 0x72B4, //CJK UNIFIED IDEOGRAPH - 0xCA44: 0x72B5, //CJK UNIFIED IDEOGRAPH - 0xCA45: 0x738E, //CJK UNIFIED IDEOGRAPH - 0xCA46: 0x752A, //CJK UNIFIED IDEOGRAPH - 0xCA47: 0x767F, //CJK UNIFIED IDEOGRAPH - 0xCA48: 0x7A75, //CJK UNIFIED IDEOGRAPH - 0xCA49: 0x7F51, //CJK UNIFIED IDEOGRAPH - 0xCA4A: 0x8278, //CJK UNIFIED IDEOGRAPH - 0xCA4B: 0x827C, //CJK UNIFIED IDEOGRAPH - 0xCA4C: 0x8280, //CJK UNIFIED IDEOGRAPH - 0xCA4D: 0x827D, //CJK UNIFIED IDEOGRAPH - 0xCA4E: 0x827F, //CJK UNIFIED IDEOGRAPH - 0xCA4F: 0x864D, //CJK UNIFIED IDEOGRAPH - 0xCA50: 0x897E, //CJK UNIFIED IDEOGRAPH - 0xCA51: 0x9099, //CJK UNIFIED IDEOGRAPH - 0xCA52: 0x9097, //CJK UNIFIED IDEOGRAPH - 0xCA53: 0x9098, //CJK UNIFIED IDEOGRAPH - 0xCA54: 0x909B, //CJK UNIFIED IDEOGRAPH - 0xCA55: 0x9094, //CJK UNIFIED IDEOGRAPH - 0xCA56: 0x9622, //CJK UNIFIED IDEOGRAPH - 0xCA57: 0x9624, //CJK UNIFIED IDEOGRAPH - 0xCA58: 0x9620, //CJK UNIFIED IDEOGRAPH - 0xCA59: 0x9623, //CJK UNIFIED IDEOGRAPH - 0xCA5A: 0x4F56, //CJK UNIFIED IDEOGRAPH - 0xCA5B: 0x4F3B, //CJK UNIFIED IDEOGRAPH - 0xCA5C: 0x4F62, //CJK UNIFIED IDEOGRAPH - 0xCA5D: 0x4F49, //CJK UNIFIED IDEOGRAPH - 0xCA5E: 0x4F53, //CJK UNIFIED IDEOGRAPH - 0xCA5F: 0x4F64, //CJK UNIFIED IDEOGRAPH - 0xCA60: 0x4F3E, //CJK UNIFIED IDEOGRAPH - 0xCA61: 0x4F67, //CJK UNIFIED IDEOGRAPH - 0xCA62: 0x4F52, //CJK UNIFIED IDEOGRAPH - 0xCA63: 0x4F5F, //CJK UNIFIED IDEOGRAPH - 0xCA64: 0x4F41, //CJK UNIFIED IDEOGRAPH - 0xCA65: 0x4F58, //CJK UNIFIED IDEOGRAPH - 0xCA66: 0x4F2D, //CJK UNIFIED IDEOGRAPH - 0xCA67: 0x4F33, //CJK UNIFIED IDEOGRAPH - 0xCA68: 0x4F3F, //CJK UNIFIED IDEOGRAPH - 0xCA69: 0x4F61, //CJK UNIFIED IDEOGRAPH - 0xCA6A: 0x518F, //CJK UNIFIED IDEOGRAPH - 0xCA6B: 0x51B9, //CJK UNIFIED IDEOGRAPH - 0xCA6C: 0x521C, //CJK UNIFIED IDEOGRAPH - 0xCA6D: 0x521E, //CJK UNIFIED IDEOGRAPH - 0xCA6E: 0x5221, //CJK UNIFIED IDEOGRAPH - 0xCA6F: 0x52AD, //CJK UNIFIED IDEOGRAPH - 0xCA70: 0x52AE, //CJK UNIFIED IDEOGRAPH - 0xCA71: 0x5309, //CJK UNIFIED IDEOGRAPH - 0xCA72: 0x5363, //CJK UNIFIED IDEOGRAPH - 0xCA73: 0x5372, //CJK UNIFIED IDEOGRAPH - 0xCA74: 0x538E, //CJK UNIFIED IDEOGRAPH - 0xCA75: 0x538F, //CJK UNIFIED IDEOGRAPH - 0xCA76: 0x5430, //CJK UNIFIED IDEOGRAPH - 0xCA77: 0x5437, //CJK UNIFIED IDEOGRAPH - 0xCA78: 0x542A, //CJK UNIFIED IDEOGRAPH - 0xCA79: 0x5454, //CJK UNIFIED IDEOGRAPH - 0xCA7A: 0x5445, //CJK UNIFIED IDEOGRAPH - 0xCA7B: 0x5419, //CJK UNIFIED IDEOGRAPH - 0xCA7C: 0x541C, //CJK UNIFIED IDEOGRAPH - 0xCA7D: 0x5425, //CJK UNIFIED IDEOGRAPH - 0xCA7E: 0x5418, //CJK UNIFIED IDEOGRAPH - 0xCAA1: 0x543D, //CJK UNIFIED IDEOGRAPH - 0xCAA2: 0x544F, //CJK UNIFIED IDEOGRAPH - 0xCAA3: 0x5441, //CJK UNIFIED IDEOGRAPH - 0xCAA4: 0x5428, //CJK UNIFIED IDEOGRAPH - 0xCAA5: 0x5424, //CJK UNIFIED IDEOGRAPH - 0xCAA6: 0x5447, //CJK UNIFIED IDEOGRAPH - 0xCAA7: 0x56EE, //CJK UNIFIED IDEOGRAPH - 0xCAA8: 0x56E7, //CJK UNIFIED IDEOGRAPH - 0xCAA9: 0x56E5, //CJK UNIFIED IDEOGRAPH - 0xCAAA: 0x5741, //CJK UNIFIED IDEOGRAPH - 0xCAAB: 0x5745, //CJK UNIFIED IDEOGRAPH - 0xCAAC: 0x574C, //CJK UNIFIED IDEOGRAPH - 0xCAAD: 0x5749, //CJK UNIFIED IDEOGRAPH - 0xCAAE: 0x574B, //CJK UNIFIED IDEOGRAPH - 0xCAAF: 0x5752, //CJK UNIFIED IDEOGRAPH - 0xCAB0: 0x5906, //CJK UNIFIED IDEOGRAPH - 0xCAB1: 0x5940, //CJK UNIFIED IDEOGRAPH - 0xCAB2: 0x59A6, //CJK UNIFIED IDEOGRAPH - 0xCAB3: 0x5998, //CJK UNIFIED IDEOGRAPH - 0xCAB4: 0x59A0, //CJK UNIFIED IDEOGRAPH - 0xCAB5: 0x5997, //CJK UNIFIED IDEOGRAPH - 0xCAB6: 0x598E, //CJK UNIFIED IDEOGRAPH - 0xCAB7: 0x59A2, //CJK UNIFIED IDEOGRAPH - 0xCAB8: 0x5990, //CJK UNIFIED IDEOGRAPH - 0xCAB9: 0x598F, //CJK UNIFIED IDEOGRAPH - 0xCABA: 0x59A7, //CJK UNIFIED IDEOGRAPH - 0xCABB: 0x59A1, //CJK UNIFIED IDEOGRAPH - 0xCABC: 0x5B8E, //CJK UNIFIED IDEOGRAPH - 0xCABD: 0x5B92, //CJK UNIFIED IDEOGRAPH - 0xCABE: 0x5C28, //CJK UNIFIED IDEOGRAPH - 0xCABF: 0x5C2A, //CJK UNIFIED IDEOGRAPH - 0xCAC0: 0x5C8D, //CJK UNIFIED IDEOGRAPH - 0xCAC1: 0x5C8F, //CJK UNIFIED IDEOGRAPH - 0xCAC2: 0x5C88, //CJK UNIFIED IDEOGRAPH - 0xCAC3: 0x5C8B, //CJK UNIFIED IDEOGRAPH - 0xCAC4: 0x5C89, //CJK UNIFIED IDEOGRAPH - 0xCAC5: 0x5C92, //CJK UNIFIED IDEOGRAPH - 0xCAC6: 0x5C8A, //CJK UNIFIED IDEOGRAPH - 0xCAC7: 0x5C86, //CJK UNIFIED IDEOGRAPH - 0xCAC8: 0x5C93, //CJK UNIFIED IDEOGRAPH - 0xCAC9: 0x5C95, //CJK UNIFIED IDEOGRAPH - 0xCACA: 0x5DE0, //CJK UNIFIED IDEOGRAPH - 0xCACB: 0x5E0A, //CJK UNIFIED IDEOGRAPH - 0xCACC: 0x5E0E, //CJK UNIFIED IDEOGRAPH - 0xCACD: 0x5E8B, //CJK UNIFIED IDEOGRAPH - 0xCACE: 0x5E89, //CJK UNIFIED IDEOGRAPH - 0xCACF: 0x5E8C, //CJK UNIFIED IDEOGRAPH - 0xCAD0: 0x5E88, //CJK UNIFIED IDEOGRAPH - 0xCAD1: 0x5E8D, //CJK UNIFIED IDEOGRAPH - 0xCAD2: 0x5F05, //CJK UNIFIED IDEOGRAPH - 0xCAD3: 0x5F1D, //CJK UNIFIED IDEOGRAPH - 0xCAD4: 0x5F78, //CJK UNIFIED IDEOGRAPH - 0xCAD5: 0x5F76, //CJK UNIFIED IDEOGRAPH - 0xCAD6: 0x5FD2, //CJK UNIFIED IDEOGRAPH - 0xCAD7: 0x5FD1, //CJK UNIFIED IDEOGRAPH - 0xCAD8: 0x5FD0, //CJK UNIFIED IDEOGRAPH - 0xCAD9: 0x5FED, //CJK UNIFIED IDEOGRAPH - 0xCADA: 0x5FE8, //CJK UNIFIED IDEOGRAPH - 0xCADB: 0x5FEE, //CJK UNIFIED IDEOGRAPH - 0xCADC: 0x5FF3, //CJK UNIFIED IDEOGRAPH - 0xCADD: 0x5FE1, //CJK UNIFIED IDEOGRAPH - 0xCADE: 0x5FE4, //CJK UNIFIED IDEOGRAPH - 0xCADF: 0x5FE3, //CJK UNIFIED IDEOGRAPH - 0xCAE0: 0x5FFA, //CJK UNIFIED IDEOGRAPH - 0xCAE1: 0x5FEF, //CJK UNIFIED IDEOGRAPH - 0xCAE2: 0x5FF7, //CJK UNIFIED IDEOGRAPH - 0xCAE3: 0x5FFB, //CJK UNIFIED IDEOGRAPH - 0xCAE4: 0x6000, //CJK UNIFIED IDEOGRAPH - 0xCAE5: 0x5FF4, //CJK UNIFIED IDEOGRAPH - 0xCAE6: 0x623A, //CJK UNIFIED IDEOGRAPH - 0xCAE7: 0x6283, //CJK UNIFIED IDEOGRAPH - 0xCAE8: 0x628C, //CJK UNIFIED IDEOGRAPH - 0xCAE9: 0x628E, //CJK UNIFIED IDEOGRAPH - 0xCAEA: 0x628F, //CJK UNIFIED IDEOGRAPH - 0xCAEB: 0x6294, //CJK UNIFIED IDEOGRAPH - 0xCAEC: 0x6287, //CJK UNIFIED IDEOGRAPH - 0xCAED: 0x6271, //CJK UNIFIED IDEOGRAPH - 0xCAEE: 0x627B, //CJK UNIFIED IDEOGRAPH - 0xCAEF: 0x627A, //CJK UNIFIED IDEOGRAPH - 0xCAF0: 0x6270, //CJK UNIFIED IDEOGRAPH - 0xCAF1: 0x6281, //CJK UNIFIED IDEOGRAPH - 0xCAF2: 0x6288, //CJK UNIFIED IDEOGRAPH - 0xCAF3: 0x6277, //CJK UNIFIED IDEOGRAPH - 0xCAF4: 0x627D, //CJK UNIFIED IDEOGRAPH - 0xCAF5: 0x6272, //CJK UNIFIED IDEOGRAPH - 0xCAF6: 0x6274, //CJK UNIFIED IDEOGRAPH - 0xCAF7: 0x6537, //CJK UNIFIED IDEOGRAPH - 0xCAF8: 0x65F0, //CJK UNIFIED IDEOGRAPH - 0xCAF9: 0x65F4, //CJK UNIFIED IDEOGRAPH - 0xCAFA: 0x65F3, //CJK UNIFIED IDEOGRAPH - 0xCAFB: 0x65F2, //CJK UNIFIED IDEOGRAPH - 0xCAFC: 0x65F5, //CJK UNIFIED IDEOGRAPH - 0xCAFD: 0x6745, //CJK UNIFIED IDEOGRAPH - 0xCAFE: 0x6747, //CJK UNIFIED IDEOGRAPH - 0xCB40: 0x6759, //CJK UNIFIED IDEOGRAPH - 0xCB41: 0x6755, //CJK UNIFIED IDEOGRAPH - 0xCB42: 0x674C, //CJK UNIFIED IDEOGRAPH - 0xCB43: 0x6748, //CJK UNIFIED IDEOGRAPH - 0xCB44: 0x675D, //CJK UNIFIED IDEOGRAPH - 0xCB45: 0x674D, //CJK UNIFIED IDEOGRAPH - 0xCB46: 0x675A, //CJK UNIFIED IDEOGRAPH - 0xCB47: 0x674B, //CJK UNIFIED IDEOGRAPH - 0xCB48: 0x6BD0, //CJK UNIFIED IDEOGRAPH - 0xCB49: 0x6C19, //CJK UNIFIED IDEOGRAPH - 0xCB4A: 0x6C1A, //CJK UNIFIED IDEOGRAPH - 0xCB4B: 0x6C78, //CJK UNIFIED IDEOGRAPH - 0xCB4C: 0x6C67, //CJK UNIFIED IDEOGRAPH - 0xCB4D: 0x6C6B, //CJK UNIFIED IDEOGRAPH - 0xCB4E: 0x6C84, //CJK UNIFIED IDEOGRAPH - 0xCB4F: 0x6C8B, //CJK UNIFIED IDEOGRAPH - 0xCB50: 0x6C8F, //CJK UNIFIED IDEOGRAPH - 0xCB51: 0x6C71, //CJK UNIFIED IDEOGRAPH - 0xCB52: 0x6C6F, //CJK UNIFIED IDEOGRAPH - 0xCB53: 0x6C69, //CJK UNIFIED IDEOGRAPH - 0xCB54: 0x6C9A, //CJK UNIFIED IDEOGRAPH - 0xCB55: 0x6C6D, //CJK UNIFIED IDEOGRAPH - 0xCB56: 0x6C87, //CJK UNIFIED IDEOGRAPH - 0xCB57: 0x6C95, //CJK UNIFIED IDEOGRAPH - 0xCB58: 0x6C9C, //CJK UNIFIED IDEOGRAPH - 0xCB59: 0x6C66, //CJK UNIFIED IDEOGRAPH - 0xCB5A: 0x6C73, //CJK UNIFIED IDEOGRAPH - 0xCB5B: 0x6C65, //CJK UNIFIED IDEOGRAPH - 0xCB5C: 0x6C7B, //CJK UNIFIED IDEOGRAPH - 0xCB5D: 0x6C8E, //CJK UNIFIED IDEOGRAPH - 0xCB5E: 0x7074, //CJK UNIFIED IDEOGRAPH - 0xCB5F: 0x707A, //CJK UNIFIED IDEOGRAPH - 0xCB60: 0x7263, //CJK UNIFIED IDEOGRAPH - 0xCB61: 0x72BF, //CJK UNIFIED IDEOGRAPH - 0xCB62: 0x72BD, //CJK UNIFIED IDEOGRAPH - 0xCB63: 0x72C3, //CJK UNIFIED IDEOGRAPH - 0xCB64: 0x72C6, //CJK UNIFIED IDEOGRAPH - 0xCB65: 0x72C1, //CJK UNIFIED IDEOGRAPH - 0xCB66: 0x72BA, //CJK UNIFIED IDEOGRAPH - 0xCB67: 0x72C5, //CJK UNIFIED IDEOGRAPH - 0xCB68: 0x7395, //CJK UNIFIED IDEOGRAPH - 0xCB69: 0x7397, //CJK UNIFIED IDEOGRAPH - 0xCB6A: 0x7393, //CJK UNIFIED IDEOGRAPH - 0xCB6B: 0x7394, //CJK UNIFIED IDEOGRAPH - 0xCB6C: 0x7392, //CJK UNIFIED IDEOGRAPH - 0xCB6D: 0x753A, //CJK UNIFIED IDEOGRAPH - 0xCB6E: 0x7539, //CJK UNIFIED IDEOGRAPH - 0xCB6F: 0x7594, //CJK UNIFIED IDEOGRAPH - 0xCB70: 0x7595, //CJK UNIFIED IDEOGRAPH - 0xCB71: 0x7681, //CJK UNIFIED IDEOGRAPH - 0xCB72: 0x793D, //CJK UNIFIED IDEOGRAPH - 0xCB73: 0x8034, //CJK UNIFIED IDEOGRAPH - 0xCB74: 0x8095, //CJK UNIFIED IDEOGRAPH - 0xCB75: 0x8099, //CJK UNIFIED IDEOGRAPH - 0xCB76: 0x8090, //CJK UNIFIED IDEOGRAPH - 0xCB77: 0x8092, //CJK UNIFIED IDEOGRAPH - 0xCB78: 0x809C, //CJK UNIFIED IDEOGRAPH - 0xCB79: 0x8290, //CJK UNIFIED IDEOGRAPH - 0xCB7A: 0x828F, //CJK UNIFIED IDEOGRAPH - 0xCB7B: 0x8285, //CJK UNIFIED IDEOGRAPH - 0xCB7C: 0x828E, //CJK UNIFIED IDEOGRAPH - 0xCB7D: 0x8291, //CJK UNIFIED IDEOGRAPH - 0xCB7E: 0x8293, //CJK UNIFIED IDEOGRAPH - 0xCBA1: 0x828A, //CJK UNIFIED IDEOGRAPH - 0xCBA2: 0x8283, //CJK UNIFIED IDEOGRAPH - 0xCBA3: 0x8284, //CJK UNIFIED IDEOGRAPH - 0xCBA4: 0x8C78, //CJK UNIFIED IDEOGRAPH - 0xCBA5: 0x8FC9, //CJK UNIFIED IDEOGRAPH - 0xCBA6: 0x8FBF, //CJK UNIFIED IDEOGRAPH - 0xCBA7: 0x909F, //CJK UNIFIED IDEOGRAPH - 0xCBA8: 0x90A1, //CJK UNIFIED IDEOGRAPH - 0xCBA9: 0x90A5, //CJK UNIFIED IDEOGRAPH - 0xCBAA: 0x909E, //CJK UNIFIED IDEOGRAPH - 0xCBAB: 0x90A7, //CJK UNIFIED IDEOGRAPH - 0xCBAC: 0x90A0, //CJK UNIFIED IDEOGRAPH - 0xCBAD: 0x9630, //CJK UNIFIED IDEOGRAPH - 0xCBAE: 0x9628, //CJK UNIFIED IDEOGRAPH - 0xCBAF: 0x962F, //CJK UNIFIED IDEOGRAPH - 0xCBB0: 0x962D, //CJK UNIFIED IDEOGRAPH - 0xCBB1: 0x4E33, //CJK UNIFIED IDEOGRAPH - 0xCBB2: 0x4F98, //CJK UNIFIED IDEOGRAPH - 0xCBB3: 0x4F7C, //CJK UNIFIED IDEOGRAPH - 0xCBB4: 0x4F85, //CJK UNIFIED IDEOGRAPH - 0xCBB5: 0x4F7D, //CJK UNIFIED IDEOGRAPH - 0xCBB6: 0x4F80, //CJK UNIFIED IDEOGRAPH - 0xCBB7: 0x4F87, //CJK UNIFIED IDEOGRAPH - 0xCBB8: 0x4F76, //CJK UNIFIED IDEOGRAPH - 0xCBB9: 0x4F74, //CJK UNIFIED IDEOGRAPH - 0xCBBA: 0x4F89, //CJK UNIFIED IDEOGRAPH - 0xCBBB: 0x4F84, //CJK UNIFIED IDEOGRAPH - 0xCBBC: 0x4F77, //CJK UNIFIED IDEOGRAPH - 0xCBBD: 0x4F4C, //CJK UNIFIED IDEOGRAPH - 0xCBBE: 0x4F97, //CJK UNIFIED IDEOGRAPH - 0xCBBF: 0x4F6A, //CJK UNIFIED IDEOGRAPH - 0xCBC0: 0x4F9A, //CJK UNIFIED IDEOGRAPH - 0xCBC1: 0x4F79, //CJK UNIFIED IDEOGRAPH - 0xCBC2: 0x4F81, //CJK UNIFIED IDEOGRAPH - 0xCBC3: 0x4F78, //CJK UNIFIED IDEOGRAPH - 0xCBC4: 0x4F90, //CJK UNIFIED IDEOGRAPH - 0xCBC5: 0x4F9C, //CJK UNIFIED IDEOGRAPH - 0xCBC6: 0x4F94, //CJK UNIFIED IDEOGRAPH - 0xCBC7: 0x4F9E, //CJK UNIFIED IDEOGRAPH - 0xCBC8: 0x4F92, //CJK UNIFIED IDEOGRAPH - 0xCBC9: 0x4F82, //CJK UNIFIED IDEOGRAPH - 0xCBCA: 0x4F95, //CJK UNIFIED IDEOGRAPH - 0xCBCB: 0x4F6B, //CJK UNIFIED IDEOGRAPH - 0xCBCC: 0x4F6E, //CJK UNIFIED IDEOGRAPH - 0xCBCD: 0x519E, //CJK UNIFIED IDEOGRAPH - 0xCBCE: 0x51BC, //CJK UNIFIED IDEOGRAPH - 0xCBCF: 0x51BE, //CJK UNIFIED IDEOGRAPH - 0xCBD0: 0x5235, //CJK UNIFIED IDEOGRAPH - 0xCBD1: 0x5232, //CJK UNIFIED IDEOGRAPH - 0xCBD2: 0x5233, //CJK UNIFIED IDEOGRAPH - 0xCBD3: 0x5246, //CJK UNIFIED IDEOGRAPH - 0xCBD4: 0x5231, //CJK UNIFIED IDEOGRAPH - 0xCBD5: 0x52BC, //CJK UNIFIED IDEOGRAPH - 0xCBD6: 0x530A, //CJK UNIFIED IDEOGRAPH - 0xCBD7: 0x530B, //CJK UNIFIED IDEOGRAPH - 0xCBD8: 0x533C, //CJK UNIFIED IDEOGRAPH - 0xCBD9: 0x5392, //CJK UNIFIED IDEOGRAPH - 0xCBDA: 0x5394, //CJK UNIFIED IDEOGRAPH - 0xCBDB: 0x5487, //CJK UNIFIED IDEOGRAPH - 0xCBDC: 0x547F, //CJK UNIFIED IDEOGRAPH - 0xCBDD: 0x5481, //CJK UNIFIED IDEOGRAPH - 0xCBDE: 0x5491, //CJK UNIFIED IDEOGRAPH - 0xCBDF: 0x5482, //CJK UNIFIED IDEOGRAPH - 0xCBE0: 0x5488, //CJK UNIFIED IDEOGRAPH - 0xCBE1: 0x546B, //CJK UNIFIED IDEOGRAPH - 0xCBE2: 0x547A, //CJK UNIFIED IDEOGRAPH - 0xCBE3: 0x547E, //CJK UNIFIED IDEOGRAPH - 0xCBE4: 0x5465, //CJK UNIFIED IDEOGRAPH - 0xCBE5: 0x546C, //CJK UNIFIED IDEOGRAPH - 0xCBE6: 0x5474, //CJK UNIFIED IDEOGRAPH - 0xCBE7: 0x5466, //CJK UNIFIED IDEOGRAPH - 0xCBE8: 0x548D, //CJK UNIFIED IDEOGRAPH - 0xCBE9: 0x546F, //CJK UNIFIED IDEOGRAPH - 0xCBEA: 0x5461, //CJK UNIFIED IDEOGRAPH - 0xCBEB: 0x5460, //CJK UNIFIED IDEOGRAPH - 0xCBEC: 0x5498, //CJK UNIFIED IDEOGRAPH - 0xCBED: 0x5463, //CJK UNIFIED IDEOGRAPH - 0xCBEE: 0x5467, //CJK UNIFIED IDEOGRAPH - 0xCBEF: 0x5464, //CJK UNIFIED IDEOGRAPH - 0xCBF0: 0x56F7, //CJK UNIFIED IDEOGRAPH - 0xCBF1: 0x56F9, //CJK UNIFIED IDEOGRAPH - 0xCBF2: 0x576F, //CJK UNIFIED IDEOGRAPH - 0xCBF3: 0x5772, //CJK UNIFIED IDEOGRAPH - 0xCBF4: 0x576D, //CJK UNIFIED IDEOGRAPH - 0xCBF5: 0x576B, //CJK UNIFIED IDEOGRAPH - 0xCBF6: 0x5771, //CJK UNIFIED IDEOGRAPH - 0xCBF7: 0x5770, //CJK UNIFIED IDEOGRAPH - 0xCBF8: 0x5776, //CJK UNIFIED IDEOGRAPH - 0xCBF9: 0x5780, //CJK UNIFIED IDEOGRAPH - 0xCBFA: 0x5775, //CJK UNIFIED IDEOGRAPH - 0xCBFB: 0x577B, //CJK UNIFIED IDEOGRAPH - 0xCBFC: 0x5773, //CJK UNIFIED IDEOGRAPH - 0xCBFD: 0x5774, //CJK UNIFIED IDEOGRAPH - 0xCBFE: 0x5762, //CJK UNIFIED IDEOGRAPH - 0xCC40: 0x5768, //CJK UNIFIED IDEOGRAPH - 0xCC41: 0x577D, //CJK UNIFIED IDEOGRAPH - 0xCC42: 0x590C, //CJK UNIFIED IDEOGRAPH - 0xCC43: 0x5945, //CJK UNIFIED IDEOGRAPH - 0xCC44: 0x59B5, //CJK UNIFIED IDEOGRAPH - 0xCC45: 0x59BA, //CJK UNIFIED IDEOGRAPH - 0xCC46: 0x59CF, //CJK UNIFIED IDEOGRAPH - 0xCC47: 0x59CE, //CJK UNIFIED IDEOGRAPH - 0xCC48: 0x59B2, //CJK UNIFIED IDEOGRAPH - 0xCC49: 0x59CC, //CJK UNIFIED IDEOGRAPH - 0xCC4A: 0x59C1, //CJK UNIFIED IDEOGRAPH - 0xCC4B: 0x59B6, //CJK UNIFIED IDEOGRAPH - 0xCC4C: 0x59BC, //CJK UNIFIED IDEOGRAPH - 0xCC4D: 0x59C3, //CJK UNIFIED IDEOGRAPH - 0xCC4E: 0x59D6, //CJK UNIFIED IDEOGRAPH - 0xCC4F: 0x59B1, //CJK UNIFIED IDEOGRAPH - 0xCC50: 0x59BD, //CJK UNIFIED IDEOGRAPH - 0xCC51: 0x59C0, //CJK UNIFIED IDEOGRAPH - 0xCC52: 0x59C8, //CJK UNIFIED IDEOGRAPH - 0xCC53: 0x59B4, //CJK UNIFIED IDEOGRAPH - 0xCC54: 0x59C7, //CJK UNIFIED IDEOGRAPH - 0xCC55: 0x5B62, //CJK UNIFIED IDEOGRAPH - 0xCC56: 0x5B65, //CJK UNIFIED IDEOGRAPH - 0xCC57: 0x5B93, //CJK UNIFIED IDEOGRAPH - 0xCC58: 0x5B95, //CJK UNIFIED IDEOGRAPH - 0xCC59: 0x5C44, //CJK UNIFIED IDEOGRAPH - 0xCC5A: 0x5C47, //CJK UNIFIED IDEOGRAPH - 0xCC5B: 0x5CAE, //CJK UNIFIED IDEOGRAPH - 0xCC5C: 0x5CA4, //CJK UNIFIED IDEOGRAPH - 0xCC5D: 0x5CA0, //CJK UNIFIED IDEOGRAPH - 0xCC5E: 0x5CB5, //CJK UNIFIED IDEOGRAPH - 0xCC5F: 0x5CAF, //CJK UNIFIED IDEOGRAPH - 0xCC60: 0x5CA8, //CJK UNIFIED IDEOGRAPH - 0xCC61: 0x5CAC, //CJK UNIFIED IDEOGRAPH - 0xCC62: 0x5C9F, //CJK UNIFIED IDEOGRAPH - 0xCC63: 0x5CA3, //CJK UNIFIED IDEOGRAPH - 0xCC64: 0x5CAD, //CJK UNIFIED IDEOGRAPH - 0xCC65: 0x5CA2, //CJK UNIFIED IDEOGRAPH - 0xCC66: 0x5CAA, //CJK UNIFIED IDEOGRAPH - 0xCC67: 0x5CA7, //CJK UNIFIED IDEOGRAPH - 0xCC68: 0x5C9D, //CJK UNIFIED IDEOGRAPH - 0xCC69: 0x5CA5, //CJK UNIFIED IDEOGRAPH - 0xCC6A: 0x5CB6, //CJK UNIFIED IDEOGRAPH - 0xCC6B: 0x5CB0, //CJK UNIFIED IDEOGRAPH - 0xCC6C: 0x5CA6, //CJK UNIFIED IDEOGRAPH - 0xCC6D: 0x5E17, //CJK UNIFIED IDEOGRAPH - 0xCC6E: 0x5E14, //CJK UNIFIED IDEOGRAPH - 0xCC6F: 0x5E19, //CJK UNIFIED IDEOGRAPH - 0xCC70: 0x5F28, //CJK UNIFIED IDEOGRAPH - 0xCC71: 0x5F22, //CJK UNIFIED IDEOGRAPH - 0xCC72: 0x5F23, //CJK UNIFIED IDEOGRAPH - 0xCC73: 0x5F24, //CJK UNIFIED IDEOGRAPH - 0xCC74: 0x5F54, //CJK UNIFIED IDEOGRAPH - 0xCC75: 0x5F82, //CJK UNIFIED IDEOGRAPH - 0xCC76: 0x5F7E, //CJK UNIFIED IDEOGRAPH - 0xCC77: 0x5F7D, //CJK UNIFIED IDEOGRAPH - 0xCC78: 0x5FDE, //CJK UNIFIED IDEOGRAPH - 0xCC79: 0x5FE5, //CJK UNIFIED IDEOGRAPH - 0xCC7A: 0x602D, //CJK UNIFIED IDEOGRAPH - 0xCC7B: 0x6026, //CJK UNIFIED IDEOGRAPH - 0xCC7C: 0x6019, //CJK UNIFIED IDEOGRAPH - 0xCC7D: 0x6032, //CJK UNIFIED IDEOGRAPH - 0xCC7E: 0x600B, //CJK UNIFIED IDEOGRAPH - 0xCCA1: 0x6034, //CJK UNIFIED IDEOGRAPH - 0xCCA2: 0x600A, //CJK UNIFIED IDEOGRAPH - 0xCCA3: 0x6017, //CJK UNIFIED IDEOGRAPH - 0xCCA4: 0x6033, //CJK UNIFIED IDEOGRAPH - 0xCCA5: 0x601A, //CJK UNIFIED IDEOGRAPH - 0xCCA6: 0x601E, //CJK UNIFIED IDEOGRAPH - 0xCCA7: 0x602C, //CJK UNIFIED IDEOGRAPH - 0xCCA8: 0x6022, //CJK UNIFIED IDEOGRAPH - 0xCCA9: 0x600D, //CJK UNIFIED IDEOGRAPH - 0xCCAA: 0x6010, //CJK UNIFIED IDEOGRAPH - 0xCCAB: 0x602E, //CJK UNIFIED IDEOGRAPH - 0xCCAC: 0x6013, //CJK UNIFIED IDEOGRAPH - 0xCCAD: 0x6011, //CJK UNIFIED IDEOGRAPH - 0xCCAE: 0x600C, //CJK UNIFIED IDEOGRAPH - 0xCCAF: 0x6009, //CJK UNIFIED IDEOGRAPH - 0xCCB0: 0x601C, //CJK UNIFIED IDEOGRAPH - 0xCCB1: 0x6214, //CJK UNIFIED IDEOGRAPH - 0xCCB2: 0x623D, //CJK UNIFIED IDEOGRAPH - 0xCCB3: 0x62AD, //CJK UNIFIED IDEOGRAPH - 0xCCB4: 0x62B4, //CJK UNIFIED IDEOGRAPH - 0xCCB5: 0x62D1, //CJK UNIFIED IDEOGRAPH - 0xCCB6: 0x62BE, //CJK UNIFIED IDEOGRAPH - 0xCCB7: 0x62AA, //CJK UNIFIED IDEOGRAPH - 0xCCB8: 0x62B6, //CJK UNIFIED IDEOGRAPH - 0xCCB9: 0x62CA, //CJK UNIFIED IDEOGRAPH - 0xCCBA: 0x62AE, //CJK UNIFIED IDEOGRAPH - 0xCCBB: 0x62B3, //CJK UNIFIED IDEOGRAPH - 0xCCBC: 0x62AF, //CJK UNIFIED IDEOGRAPH - 0xCCBD: 0x62BB, //CJK UNIFIED IDEOGRAPH - 0xCCBE: 0x62A9, //CJK UNIFIED IDEOGRAPH - 0xCCBF: 0x62B0, //CJK UNIFIED IDEOGRAPH - 0xCCC0: 0x62B8, //CJK UNIFIED IDEOGRAPH - 0xCCC1: 0x653D, //CJK UNIFIED IDEOGRAPH - 0xCCC2: 0x65A8, //CJK UNIFIED IDEOGRAPH - 0xCCC3: 0x65BB, //CJK UNIFIED IDEOGRAPH - 0xCCC4: 0x6609, //CJK UNIFIED IDEOGRAPH - 0xCCC5: 0x65FC, //CJK UNIFIED IDEOGRAPH - 0xCCC6: 0x6604, //CJK UNIFIED IDEOGRAPH - 0xCCC7: 0x6612, //CJK UNIFIED IDEOGRAPH - 0xCCC8: 0x6608, //CJK UNIFIED IDEOGRAPH - 0xCCC9: 0x65FB, //CJK UNIFIED IDEOGRAPH - 0xCCCA: 0x6603, //CJK UNIFIED IDEOGRAPH - 0xCCCB: 0x660B, //CJK UNIFIED IDEOGRAPH - 0xCCCC: 0x660D, //CJK UNIFIED IDEOGRAPH - 0xCCCD: 0x6605, //CJK UNIFIED IDEOGRAPH - 0xCCCE: 0x65FD, //CJK UNIFIED IDEOGRAPH - 0xCCCF: 0x6611, //CJK UNIFIED IDEOGRAPH - 0xCCD0: 0x6610, //CJK UNIFIED IDEOGRAPH - 0xCCD1: 0x66F6, //CJK UNIFIED IDEOGRAPH - 0xCCD2: 0x670A, //CJK UNIFIED IDEOGRAPH - 0xCCD3: 0x6785, //CJK UNIFIED IDEOGRAPH - 0xCCD4: 0x676C, //CJK UNIFIED IDEOGRAPH - 0xCCD5: 0x678E, //CJK UNIFIED IDEOGRAPH - 0xCCD6: 0x6792, //CJK UNIFIED IDEOGRAPH - 0xCCD7: 0x6776, //CJK UNIFIED IDEOGRAPH - 0xCCD8: 0x677B, //CJK UNIFIED IDEOGRAPH - 0xCCD9: 0x6798, //CJK UNIFIED IDEOGRAPH - 0xCCDA: 0x6786, //CJK UNIFIED IDEOGRAPH - 0xCCDB: 0x6784, //CJK UNIFIED IDEOGRAPH - 0xCCDC: 0x6774, //CJK UNIFIED IDEOGRAPH - 0xCCDD: 0x678D, //CJK UNIFIED IDEOGRAPH - 0xCCDE: 0x678C, //CJK UNIFIED IDEOGRAPH - 0xCCDF: 0x677A, //CJK UNIFIED IDEOGRAPH - 0xCCE0: 0x679F, //CJK UNIFIED IDEOGRAPH - 0xCCE1: 0x6791, //CJK UNIFIED IDEOGRAPH - 0xCCE2: 0x6799, //CJK UNIFIED IDEOGRAPH - 0xCCE3: 0x6783, //CJK UNIFIED IDEOGRAPH - 0xCCE4: 0x677D, //CJK UNIFIED IDEOGRAPH - 0xCCE5: 0x6781, //CJK UNIFIED IDEOGRAPH - 0xCCE6: 0x6778, //CJK UNIFIED IDEOGRAPH - 0xCCE7: 0x6779, //CJK UNIFIED IDEOGRAPH - 0xCCE8: 0x6794, //CJK UNIFIED IDEOGRAPH - 0xCCE9: 0x6B25, //CJK UNIFIED IDEOGRAPH - 0xCCEA: 0x6B80, //CJK UNIFIED IDEOGRAPH - 0xCCEB: 0x6B7E, //CJK UNIFIED IDEOGRAPH - 0xCCEC: 0x6BDE, //CJK UNIFIED IDEOGRAPH - 0xCCED: 0x6C1D, //CJK UNIFIED IDEOGRAPH - 0xCCEE: 0x6C93, //CJK UNIFIED IDEOGRAPH - 0xCCEF: 0x6CEC, //CJK UNIFIED IDEOGRAPH - 0xCCF0: 0x6CEB, //CJK UNIFIED IDEOGRAPH - 0xCCF1: 0x6CEE, //CJK UNIFIED IDEOGRAPH - 0xCCF2: 0x6CD9, //CJK UNIFIED IDEOGRAPH - 0xCCF3: 0x6CB6, //CJK UNIFIED IDEOGRAPH - 0xCCF4: 0x6CD4, //CJK UNIFIED IDEOGRAPH - 0xCCF5: 0x6CAD, //CJK UNIFIED IDEOGRAPH - 0xCCF6: 0x6CE7, //CJK UNIFIED IDEOGRAPH - 0xCCF7: 0x6CB7, //CJK UNIFIED IDEOGRAPH - 0xCCF8: 0x6CD0, //CJK UNIFIED IDEOGRAPH - 0xCCF9: 0x6CC2, //CJK UNIFIED IDEOGRAPH - 0xCCFA: 0x6CBA, //CJK UNIFIED IDEOGRAPH - 0xCCFB: 0x6CC3, //CJK UNIFIED IDEOGRAPH - 0xCCFC: 0x6CC6, //CJK UNIFIED IDEOGRAPH - 0xCCFD: 0x6CED, //CJK UNIFIED IDEOGRAPH - 0xCCFE: 0x6CF2, //CJK UNIFIED IDEOGRAPH - 0xCD40: 0x6CD2, //CJK UNIFIED IDEOGRAPH - 0xCD41: 0x6CDD, //CJK UNIFIED IDEOGRAPH - 0xCD42: 0x6CB4, //CJK UNIFIED IDEOGRAPH - 0xCD43: 0x6C8A, //CJK UNIFIED IDEOGRAPH - 0xCD44: 0x6C9D, //CJK UNIFIED IDEOGRAPH - 0xCD45: 0x6C80, //CJK UNIFIED IDEOGRAPH - 0xCD46: 0x6CDE, //CJK UNIFIED IDEOGRAPH - 0xCD47: 0x6CC0, //CJK UNIFIED IDEOGRAPH - 0xCD48: 0x6D30, //CJK UNIFIED IDEOGRAPH - 0xCD49: 0x6CCD, //CJK UNIFIED IDEOGRAPH - 0xCD4A: 0x6CC7, //CJK UNIFIED IDEOGRAPH - 0xCD4B: 0x6CB0, //CJK UNIFIED IDEOGRAPH - 0xCD4C: 0x6CF9, //CJK UNIFIED IDEOGRAPH - 0xCD4D: 0x6CCF, //CJK UNIFIED IDEOGRAPH - 0xCD4E: 0x6CE9, //CJK UNIFIED IDEOGRAPH - 0xCD4F: 0x6CD1, //CJK UNIFIED IDEOGRAPH - 0xCD50: 0x7094, //CJK UNIFIED IDEOGRAPH - 0xCD51: 0x7098, //CJK UNIFIED IDEOGRAPH - 0xCD52: 0x7085, //CJK UNIFIED IDEOGRAPH - 0xCD53: 0x7093, //CJK UNIFIED IDEOGRAPH - 0xCD54: 0x7086, //CJK UNIFIED IDEOGRAPH - 0xCD55: 0x7084, //CJK UNIFIED IDEOGRAPH - 0xCD56: 0x7091, //CJK UNIFIED IDEOGRAPH - 0xCD57: 0x7096, //CJK UNIFIED IDEOGRAPH - 0xCD58: 0x7082, //CJK UNIFIED IDEOGRAPH - 0xCD59: 0x709A, //CJK UNIFIED IDEOGRAPH - 0xCD5A: 0x7083, //CJK UNIFIED IDEOGRAPH - 0xCD5B: 0x726A, //CJK UNIFIED IDEOGRAPH - 0xCD5C: 0x72D6, //CJK UNIFIED IDEOGRAPH - 0xCD5D: 0x72CB, //CJK UNIFIED IDEOGRAPH - 0xCD5E: 0x72D8, //CJK UNIFIED IDEOGRAPH - 0xCD5F: 0x72C9, //CJK UNIFIED IDEOGRAPH - 0xCD60: 0x72DC, //CJK UNIFIED IDEOGRAPH - 0xCD61: 0x72D2, //CJK UNIFIED IDEOGRAPH - 0xCD62: 0x72D4, //CJK UNIFIED IDEOGRAPH - 0xCD63: 0x72DA, //CJK UNIFIED IDEOGRAPH - 0xCD64: 0x72CC, //CJK UNIFIED IDEOGRAPH - 0xCD65: 0x72D1, //CJK UNIFIED IDEOGRAPH - 0xCD66: 0x73A4, //CJK UNIFIED IDEOGRAPH - 0xCD67: 0x73A1, //CJK UNIFIED IDEOGRAPH - 0xCD68: 0x73AD, //CJK UNIFIED IDEOGRAPH - 0xCD69: 0x73A6, //CJK UNIFIED IDEOGRAPH - 0xCD6A: 0x73A2, //CJK UNIFIED IDEOGRAPH - 0xCD6B: 0x73A0, //CJK UNIFIED IDEOGRAPH - 0xCD6C: 0x73AC, //CJK UNIFIED IDEOGRAPH - 0xCD6D: 0x739D, //CJK UNIFIED IDEOGRAPH - 0xCD6E: 0x74DD, //CJK UNIFIED IDEOGRAPH - 0xCD6F: 0x74E8, //CJK UNIFIED IDEOGRAPH - 0xCD70: 0x753F, //CJK UNIFIED IDEOGRAPH - 0xCD71: 0x7540, //CJK UNIFIED IDEOGRAPH - 0xCD72: 0x753E, //CJK UNIFIED IDEOGRAPH - 0xCD73: 0x758C, //CJK UNIFIED IDEOGRAPH - 0xCD74: 0x7598, //CJK UNIFIED IDEOGRAPH - 0xCD75: 0x76AF, //CJK UNIFIED IDEOGRAPH - 0xCD76: 0x76F3, //CJK UNIFIED IDEOGRAPH - 0xCD77: 0x76F1, //CJK UNIFIED IDEOGRAPH - 0xCD78: 0x76F0, //CJK UNIFIED IDEOGRAPH - 0xCD79: 0x76F5, //CJK UNIFIED IDEOGRAPH - 0xCD7A: 0x77F8, //CJK UNIFIED IDEOGRAPH - 0xCD7B: 0x77FC, //CJK UNIFIED IDEOGRAPH - 0xCD7C: 0x77F9, //CJK UNIFIED IDEOGRAPH - 0xCD7D: 0x77FB, //CJK UNIFIED IDEOGRAPH - 0xCD7E: 0x77FA, //CJK UNIFIED IDEOGRAPH - 0xCDA1: 0x77F7, //CJK UNIFIED IDEOGRAPH - 0xCDA2: 0x7942, //CJK UNIFIED IDEOGRAPH - 0xCDA3: 0x793F, //CJK UNIFIED IDEOGRAPH - 0xCDA4: 0x79C5, //CJK UNIFIED IDEOGRAPH - 0xCDA5: 0x7A78, //CJK UNIFIED IDEOGRAPH - 0xCDA6: 0x7A7B, //CJK UNIFIED IDEOGRAPH - 0xCDA7: 0x7AFB, //CJK UNIFIED IDEOGRAPH - 0xCDA8: 0x7C75, //CJK UNIFIED IDEOGRAPH - 0xCDA9: 0x7CFD, //CJK UNIFIED IDEOGRAPH - 0xCDAA: 0x8035, //CJK UNIFIED IDEOGRAPH - 0xCDAB: 0x808F, //CJK UNIFIED IDEOGRAPH - 0xCDAC: 0x80AE, //CJK UNIFIED IDEOGRAPH - 0xCDAD: 0x80A3, //CJK UNIFIED IDEOGRAPH - 0xCDAE: 0x80B8, //CJK UNIFIED IDEOGRAPH - 0xCDAF: 0x80B5, //CJK UNIFIED IDEOGRAPH - 0xCDB0: 0x80AD, //CJK UNIFIED IDEOGRAPH - 0xCDB1: 0x8220, //CJK UNIFIED IDEOGRAPH - 0xCDB2: 0x82A0, //CJK UNIFIED IDEOGRAPH - 0xCDB3: 0x82C0, //CJK UNIFIED IDEOGRAPH - 0xCDB4: 0x82AB, //CJK UNIFIED IDEOGRAPH - 0xCDB5: 0x829A, //CJK UNIFIED IDEOGRAPH - 0xCDB6: 0x8298, //CJK UNIFIED IDEOGRAPH - 0xCDB7: 0x829B, //CJK UNIFIED IDEOGRAPH - 0xCDB8: 0x82B5, //CJK UNIFIED IDEOGRAPH - 0xCDB9: 0x82A7, //CJK UNIFIED IDEOGRAPH - 0xCDBA: 0x82AE, //CJK UNIFIED IDEOGRAPH - 0xCDBB: 0x82BC, //CJK UNIFIED IDEOGRAPH - 0xCDBC: 0x829E, //CJK UNIFIED IDEOGRAPH - 0xCDBD: 0x82BA, //CJK UNIFIED IDEOGRAPH - 0xCDBE: 0x82B4, //CJK UNIFIED IDEOGRAPH - 0xCDBF: 0x82A8, //CJK UNIFIED IDEOGRAPH - 0xCDC0: 0x82A1, //CJK UNIFIED IDEOGRAPH - 0xCDC1: 0x82A9, //CJK UNIFIED IDEOGRAPH - 0xCDC2: 0x82C2, //CJK UNIFIED IDEOGRAPH - 0xCDC3: 0x82A4, //CJK UNIFIED IDEOGRAPH - 0xCDC4: 0x82C3, //CJK UNIFIED IDEOGRAPH - 0xCDC5: 0x82B6, //CJK UNIFIED IDEOGRAPH - 0xCDC6: 0x82A2, //CJK UNIFIED IDEOGRAPH - 0xCDC7: 0x8670, //CJK UNIFIED IDEOGRAPH - 0xCDC8: 0x866F, //CJK UNIFIED IDEOGRAPH - 0xCDC9: 0x866D, //CJK UNIFIED IDEOGRAPH - 0xCDCA: 0x866E, //CJK UNIFIED IDEOGRAPH - 0xCDCB: 0x8C56, //CJK UNIFIED IDEOGRAPH - 0xCDCC: 0x8FD2, //CJK UNIFIED IDEOGRAPH - 0xCDCD: 0x8FCB, //CJK UNIFIED IDEOGRAPH - 0xCDCE: 0x8FD3, //CJK UNIFIED IDEOGRAPH - 0xCDCF: 0x8FCD, //CJK UNIFIED IDEOGRAPH - 0xCDD0: 0x8FD6, //CJK UNIFIED IDEOGRAPH - 0xCDD1: 0x8FD5, //CJK UNIFIED IDEOGRAPH - 0xCDD2: 0x8FD7, //CJK UNIFIED IDEOGRAPH - 0xCDD3: 0x90B2, //CJK UNIFIED IDEOGRAPH - 0xCDD4: 0x90B4, //CJK UNIFIED IDEOGRAPH - 0xCDD5: 0x90AF, //CJK UNIFIED IDEOGRAPH - 0xCDD6: 0x90B3, //CJK UNIFIED IDEOGRAPH - 0xCDD7: 0x90B0, //CJK UNIFIED IDEOGRAPH - 0xCDD8: 0x9639, //CJK UNIFIED IDEOGRAPH - 0xCDD9: 0x963D, //CJK UNIFIED IDEOGRAPH - 0xCDDA: 0x963C, //CJK UNIFIED IDEOGRAPH - 0xCDDB: 0x963A, //CJK UNIFIED IDEOGRAPH - 0xCDDC: 0x9643, //CJK UNIFIED IDEOGRAPH - 0xCDDD: 0x4FCD, //CJK UNIFIED IDEOGRAPH - 0xCDDE: 0x4FC5, //CJK UNIFIED IDEOGRAPH - 0xCDDF: 0x4FD3, //CJK UNIFIED IDEOGRAPH - 0xCDE0: 0x4FB2, //CJK UNIFIED IDEOGRAPH - 0xCDE1: 0x4FC9, //CJK UNIFIED IDEOGRAPH - 0xCDE2: 0x4FCB, //CJK UNIFIED IDEOGRAPH - 0xCDE3: 0x4FC1, //CJK UNIFIED IDEOGRAPH - 0xCDE4: 0x4FD4, //CJK UNIFIED IDEOGRAPH - 0xCDE5: 0x4FDC, //CJK UNIFIED IDEOGRAPH - 0xCDE6: 0x4FD9, //CJK UNIFIED IDEOGRAPH - 0xCDE7: 0x4FBB, //CJK UNIFIED IDEOGRAPH - 0xCDE8: 0x4FB3, //CJK UNIFIED IDEOGRAPH - 0xCDE9: 0x4FDB, //CJK UNIFIED IDEOGRAPH - 0xCDEA: 0x4FC7, //CJK UNIFIED IDEOGRAPH - 0xCDEB: 0x4FD6, //CJK UNIFIED IDEOGRAPH - 0xCDEC: 0x4FBA, //CJK UNIFIED IDEOGRAPH - 0xCDED: 0x4FC0, //CJK UNIFIED IDEOGRAPH - 0xCDEE: 0x4FB9, //CJK UNIFIED IDEOGRAPH - 0xCDEF: 0x4FEC, //CJK UNIFIED IDEOGRAPH - 0xCDF0: 0x5244, //CJK UNIFIED IDEOGRAPH - 0xCDF1: 0x5249, //CJK UNIFIED IDEOGRAPH - 0xCDF2: 0x52C0, //CJK UNIFIED IDEOGRAPH - 0xCDF3: 0x52C2, //CJK UNIFIED IDEOGRAPH - 0xCDF4: 0x533D, //CJK UNIFIED IDEOGRAPH - 0xCDF5: 0x537C, //CJK UNIFIED IDEOGRAPH - 0xCDF6: 0x5397, //CJK UNIFIED IDEOGRAPH - 0xCDF7: 0x5396, //CJK UNIFIED IDEOGRAPH - 0xCDF8: 0x5399, //CJK UNIFIED IDEOGRAPH - 0xCDF9: 0x5398, //CJK UNIFIED IDEOGRAPH - 0xCDFA: 0x54BA, //CJK UNIFIED IDEOGRAPH - 0xCDFB: 0x54A1, //CJK UNIFIED IDEOGRAPH - 0xCDFC: 0x54AD, //CJK UNIFIED IDEOGRAPH - 0xCDFD: 0x54A5, //CJK UNIFIED IDEOGRAPH - 0xCDFE: 0x54CF, //CJK UNIFIED IDEOGRAPH - 0xCE40: 0x54C3, //CJK UNIFIED IDEOGRAPH - 0xCE41: 0x830D, //CJK UNIFIED IDEOGRAPH - 0xCE42: 0x54B7, //CJK UNIFIED IDEOGRAPH - 0xCE43: 0x54AE, //CJK UNIFIED IDEOGRAPH - 0xCE44: 0x54D6, //CJK UNIFIED IDEOGRAPH - 0xCE45: 0x54B6, //CJK UNIFIED IDEOGRAPH - 0xCE46: 0x54C5, //CJK UNIFIED IDEOGRAPH - 0xCE47: 0x54C6, //CJK UNIFIED IDEOGRAPH - 0xCE48: 0x54A0, //CJK UNIFIED IDEOGRAPH - 0xCE49: 0x5470, //CJK UNIFIED IDEOGRAPH - 0xCE4A: 0x54BC, //CJK UNIFIED IDEOGRAPH - 0xCE4B: 0x54A2, //CJK UNIFIED IDEOGRAPH - 0xCE4C: 0x54BE, //CJK UNIFIED IDEOGRAPH - 0xCE4D: 0x5472, //CJK UNIFIED IDEOGRAPH - 0xCE4E: 0x54DE, //CJK UNIFIED IDEOGRAPH - 0xCE4F: 0x54B0, //CJK UNIFIED IDEOGRAPH - 0xCE50: 0x57B5, //CJK UNIFIED IDEOGRAPH - 0xCE51: 0x579E, //CJK UNIFIED IDEOGRAPH - 0xCE52: 0x579F, //CJK UNIFIED IDEOGRAPH - 0xCE53: 0x57A4, //CJK UNIFIED IDEOGRAPH - 0xCE54: 0x578C, //CJK UNIFIED IDEOGRAPH - 0xCE55: 0x5797, //CJK UNIFIED IDEOGRAPH - 0xCE56: 0x579D, //CJK UNIFIED IDEOGRAPH - 0xCE57: 0x579B, //CJK UNIFIED IDEOGRAPH - 0xCE58: 0x5794, //CJK UNIFIED IDEOGRAPH - 0xCE59: 0x5798, //CJK UNIFIED IDEOGRAPH - 0xCE5A: 0x578F, //CJK UNIFIED IDEOGRAPH - 0xCE5B: 0x5799, //CJK UNIFIED IDEOGRAPH - 0xCE5C: 0x57A5, //CJK UNIFIED IDEOGRAPH - 0xCE5D: 0x579A, //CJK UNIFIED IDEOGRAPH - 0xCE5E: 0x5795, //CJK UNIFIED IDEOGRAPH - 0xCE5F: 0x58F4, //CJK UNIFIED IDEOGRAPH - 0xCE60: 0x590D, //CJK UNIFIED IDEOGRAPH - 0xCE61: 0x5953, //CJK UNIFIED IDEOGRAPH - 0xCE62: 0x59E1, //CJK UNIFIED IDEOGRAPH - 0xCE63: 0x59DE, //CJK UNIFIED IDEOGRAPH - 0xCE64: 0x59EE, //CJK UNIFIED IDEOGRAPH - 0xCE65: 0x5A00, //CJK UNIFIED IDEOGRAPH - 0xCE66: 0x59F1, //CJK UNIFIED IDEOGRAPH - 0xCE67: 0x59DD, //CJK UNIFIED IDEOGRAPH - 0xCE68: 0x59FA, //CJK UNIFIED IDEOGRAPH - 0xCE69: 0x59FD, //CJK UNIFIED IDEOGRAPH - 0xCE6A: 0x59FC, //CJK UNIFIED IDEOGRAPH - 0xCE6B: 0x59F6, //CJK UNIFIED IDEOGRAPH - 0xCE6C: 0x59E4, //CJK UNIFIED IDEOGRAPH - 0xCE6D: 0x59F2, //CJK UNIFIED IDEOGRAPH - 0xCE6E: 0x59F7, //CJK UNIFIED IDEOGRAPH - 0xCE6F: 0x59DB, //CJK UNIFIED IDEOGRAPH - 0xCE70: 0x59E9, //CJK UNIFIED IDEOGRAPH - 0xCE71: 0x59F3, //CJK UNIFIED IDEOGRAPH - 0xCE72: 0x59F5, //CJK UNIFIED IDEOGRAPH - 0xCE73: 0x59E0, //CJK UNIFIED IDEOGRAPH - 0xCE74: 0x59FE, //CJK UNIFIED IDEOGRAPH - 0xCE75: 0x59F4, //CJK UNIFIED IDEOGRAPH - 0xCE76: 0x59ED, //CJK UNIFIED IDEOGRAPH - 0xCE77: 0x5BA8, //CJK UNIFIED IDEOGRAPH - 0xCE78: 0x5C4C, //CJK UNIFIED IDEOGRAPH - 0xCE79: 0x5CD0, //CJK UNIFIED IDEOGRAPH - 0xCE7A: 0x5CD8, //CJK UNIFIED IDEOGRAPH - 0xCE7B: 0x5CCC, //CJK UNIFIED IDEOGRAPH - 0xCE7C: 0x5CD7, //CJK UNIFIED IDEOGRAPH - 0xCE7D: 0x5CCB, //CJK UNIFIED IDEOGRAPH - 0xCE7E: 0x5CDB, //CJK UNIFIED IDEOGRAPH - 0xCEA1: 0x5CDE, //CJK UNIFIED IDEOGRAPH - 0xCEA2: 0x5CDA, //CJK UNIFIED IDEOGRAPH - 0xCEA3: 0x5CC9, //CJK UNIFIED IDEOGRAPH - 0xCEA4: 0x5CC7, //CJK UNIFIED IDEOGRAPH - 0xCEA5: 0x5CCA, //CJK UNIFIED IDEOGRAPH - 0xCEA6: 0x5CD6, //CJK UNIFIED IDEOGRAPH - 0xCEA7: 0x5CD3, //CJK UNIFIED IDEOGRAPH - 0xCEA8: 0x5CD4, //CJK UNIFIED IDEOGRAPH - 0xCEA9: 0x5CCF, //CJK UNIFIED IDEOGRAPH - 0xCEAA: 0x5CC8, //CJK UNIFIED IDEOGRAPH - 0xCEAB: 0x5CC6, //CJK UNIFIED IDEOGRAPH - 0xCEAC: 0x5CCE, //CJK UNIFIED IDEOGRAPH - 0xCEAD: 0x5CDF, //CJK UNIFIED IDEOGRAPH - 0xCEAE: 0x5CF8, //CJK UNIFIED IDEOGRAPH - 0xCEAF: 0x5DF9, //CJK UNIFIED IDEOGRAPH - 0xCEB0: 0x5E21, //CJK UNIFIED IDEOGRAPH - 0xCEB1: 0x5E22, //CJK UNIFIED IDEOGRAPH - 0xCEB2: 0x5E23, //CJK UNIFIED IDEOGRAPH - 0xCEB3: 0x5E20, //CJK UNIFIED IDEOGRAPH - 0xCEB4: 0x5E24, //CJK UNIFIED IDEOGRAPH - 0xCEB5: 0x5EB0, //CJK UNIFIED IDEOGRAPH - 0xCEB6: 0x5EA4, //CJK UNIFIED IDEOGRAPH - 0xCEB7: 0x5EA2, //CJK UNIFIED IDEOGRAPH - 0xCEB8: 0x5E9B, //CJK UNIFIED IDEOGRAPH - 0xCEB9: 0x5EA3, //CJK UNIFIED IDEOGRAPH - 0xCEBA: 0x5EA5, //CJK UNIFIED IDEOGRAPH - 0xCEBB: 0x5F07, //CJK UNIFIED IDEOGRAPH - 0xCEBC: 0x5F2E, //CJK UNIFIED IDEOGRAPH - 0xCEBD: 0x5F56, //CJK UNIFIED IDEOGRAPH - 0xCEBE: 0x5F86, //CJK UNIFIED IDEOGRAPH - 0xCEBF: 0x6037, //CJK UNIFIED IDEOGRAPH - 0xCEC0: 0x6039, //CJK UNIFIED IDEOGRAPH - 0xCEC1: 0x6054, //CJK UNIFIED IDEOGRAPH - 0xCEC2: 0x6072, //CJK UNIFIED IDEOGRAPH - 0xCEC3: 0x605E, //CJK UNIFIED IDEOGRAPH - 0xCEC4: 0x6045, //CJK UNIFIED IDEOGRAPH - 0xCEC5: 0x6053, //CJK UNIFIED IDEOGRAPH - 0xCEC6: 0x6047, //CJK UNIFIED IDEOGRAPH - 0xCEC7: 0x6049, //CJK UNIFIED IDEOGRAPH - 0xCEC8: 0x605B, //CJK UNIFIED IDEOGRAPH - 0xCEC9: 0x604C, //CJK UNIFIED IDEOGRAPH - 0xCECA: 0x6040, //CJK UNIFIED IDEOGRAPH - 0xCECB: 0x6042, //CJK UNIFIED IDEOGRAPH - 0xCECC: 0x605F, //CJK UNIFIED IDEOGRAPH - 0xCECD: 0x6024, //CJK UNIFIED IDEOGRAPH - 0xCECE: 0x6044, //CJK UNIFIED IDEOGRAPH - 0xCECF: 0x6058, //CJK UNIFIED IDEOGRAPH - 0xCED0: 0x6066, //CJK UNIFIED IDEOGRAPH - 0xCED1: 0x606E, //CJK UNIFIED IDEOGRAPH - 0xCED2: 0x6242, //CJK UNIFIED IDEOGRAPH - 0xCED3: 0x6243, //CJK UNIFIED IDEOGRAPH - 0xCED4: 0x62CF, //CJK UNIFIED IDEOGRAPH - 0xCED5: 0x630D, //CJK UNIFIED IDEOGRAPH - 0xCED6: 0x630B, //CJK UNIFIED IDEOGRAPH - 0xCED7: 0x62F5, //CJK UNIFIED IDEOGRAPH - 0xCED8: 0x630E, //CJK UNIFIED IDEOGRAPH - 0xCED9: 0x6303, //CJK UNIFIED IDEOGRAPH - 0xCEDA: 0x62EB, //CJK UNIFIED IDEOGRAPH - 0xCEDB: 0x62F9, //CJK UNIFIED IDEOGRAPH - 0xCEDC: 0x630F, //CJK UNIFIED IDEOGRAPH - 0xCEDD: 0x630C, //CJK UNIFIED IDEOGRAPH - 0xCEDE: 0x62F8, //CJK UNIFIED IDEOGRAPH - 0xCEDF: 0x62F6, //CJK UNIFIED IDEOGRAPH - 0xCEE0: 0x6300, //CJK UNIFIED IDEOGRAPH - 0xCEE1: 0x6313, //CJK UNIFIED IDEOGRAPH - 0xCEE2: 0x6314, //CJK UNIFIED IDEOGRAPH - 0xCEE3: 0x62FA, //CJK UNIFIED IDEOGRAPH - 0xCEE4: 0x6315, //CJK UNIFIED IDEOGRAPH - 0xCEE5: 0x62FB, //CJK UNIFIED IDEOGRAPH - 0xCEE6: 0x62F0, //CJK UNIFIED IDEOGRAPH - 0xCEE7: 0x6541, //CJK UNIFIED IDEOGRAPH - 0xCEE8: 0x6543, //CJK UNIFIED IDEOGRAPH - 0xCEE9: 0x65AA, //CJK UNIFIED IDEOGRAPH - 0xCEEA: 0x65BF, //CJK UNIFIED IDEOGRAPH - 0xCEEB: 0x6636, //CJK UNIFIED IDEOGRAPH - 0xCEEC: 0x6621, //CJK UNIFIED IDEOGRAPH - 0xCEED: 0x6632, //CJK UNIFIED IDEOGRAPH - 0xCEEE: 0x6635, //CJK UNIFIED IDEOGRAPH - 0xCEEF: 0x661C, //CJK UNIFIED IDEOGRAPH - 0xCEF0: 0x6626, //CJK UNIFIED IDEOGRAPH - 0xCEF1: 0x6622, //CJK UNIFIED IDEOGRAPH - 0xCEF2: 0x6633, //CJK UNIFIED IDEOGRAPH - 0xCEF3: 0x662B, //CJK UNIFIED IDEOGRAPH - 0xCEF4: 0x663A, //CJK UNIFIED IDEOGRAPH - 0xCEF5: 0x661D, //CJK UNIFIED IDEOGRAPH - 0xCEF6: 0x6634, //CJK UNIFIED IDEOGRAPH - 0xCEF7: 0x6639, //CJK UNIFIED IDEOGRAPH - 0xCEF8: 0x662E, //CJK UNIFIED IDEOGRAPH - 0xCEF9: 0x670F, //CJK UNIFIED IDEOGRAPH - 0xCEFA: 0x6710, //CJK UNIFIED IDEOGRAPH - 0xCEFB: 0x67C1, //CJK UNIFIED IDEOGRAPH - 0xCEFC: 0x67F2, //CJK UNIFIED IDEOGRAPH - 0xCEFD: 0x67C8, //CJK UNIFIED IDEOGRAPH - 0xCEFE: 0x67BA, //CJK UNIFIED IDEOGRAPH - 0xCF40: 0x67DC, //CJK UNIFIED IDEOGRAPH - 0xCF41: 0x67BB, //CJK UNIFIED IDEOGRAPH - 0xCF42: 0x67F8, //CJK UNIFIED IDEOGRAPH - 0xCF43: 0x67D8, //CJK UNIFIED IDEOGRAPH - 0xCF44: 0x67C0, //CJK UNIFIED IDEOGRAPH - 0xCF45: 0x67B7, //CJK UNIFIED IDEOGRAPH - 0xCF46: 0x67C5, //CJK UNIFIED IDEOGRAPH - 0xCF47: 0x67EB, //CJK UNIFIED IDEOGRAPH - 0xCF48: 0x67E4, //CJK UNIFIED IDEOGRAPH - 0xCF49: 0x67DF, //CJK UNIFIED IDEOGRAPH - 0xCF4A: 0x67B5, //CJK UNIFIED IDEOGRAPH - 0xCF4B: 0x67CD, //CJK UNIFIED IDEOGRAPH - 0xCF4C: 0x67B3, //CJK UNIFIED IDEOGRAPH - 0xCF4D: 0x67F7, //CJK UNIFIED IDEOGRAPH - 0xCF4E: 0x67F6, //CJK UNIFIED IDEOGRAPH - 0xCF4F: 0x67EE, //CJK UNIFIED IDEOGRAPH - 0xCF50: 0x67E3, //CJK UNIFIED IDEOGRAPH - 0xCF51: 0x67C2, //CJK UNIFIED IDEOGRAPH - 0xCF52: 0x67B9, //CJK UNIFIED IDEOGRAPH - 0xCF53: 0x67CE, //CJK UNIFIED IDEOGRAPH - 0xCF54: 0x67E7, //CJK UNIFIED IDEOGRAPH - 0xCF55: 0x67F0, //CJK UNIFIED IDEOGRAPH - 0xCF56: 0x67B2, //CJK UNIFIED IDEOGRAPH - 0xCF57: 0x67FC, //CJK UNIFIED IDEOGRAPH - 0xCF58: 0x67C6, //CJK UNIFIED IDEOGRAPH - 0xCF59: 0x67ED, //CJK UNIFIED IDEOGRAPH - 0xCF5A: 0x67CC, //CJK UNIFIED IDEOGRAPH - 0xCF5B: 0x67AE, //CJK UNIFIED IDEOGRAPH - 0xCF5C: 0x67E6, //CJK UNIFIED IDEOGRAPH - 0xCF5D: 0x67DB, //CJK UNIFIED IDEOGRAPH - 0xCF5E: 0x67FA, //CJK UNIFIED IDEOGRAPH - 0xCF5F: 0x67C9, //CJK UNIFIED IDEOGRAPH - 0xCF60: 0x67CA, //CJK UNIFIED IDEOGRAPH - 0xCF61: 0x67C3, //CJK UNIFIED IDEOGRAPH - 0xCF62: 0x67EA, //CJK UNIFIED IDEOGRAPH - 0xCF63: 0x67CB, //CJK UNIFIED IDEOGRAPH - 0xCF64: 0x6B28, //CJK UNIFIED IDEOGRAPH - 0xCF65: 0x6B82, //CJK UNIFIED IDEOGRAPH - 0xCF66: 0x6B84, //CJK UNIFIED IDEOGRAPH - 0xCF67: 0x6BB6, //CJK UNIFIED IDEOGRAPH - 0xCF68: 0x6BD6, //CJK UNIFIED IDEOGRAPH - 0xCF69: 0x6BD8, //CJK UNIFIED IDEOGRAPH - 0xCF6A: 0x6BE0, //CJK UNIFIED IDEOGRAPH - 0xCF6B: 0x6C20, //CJK UNIFIED IDEOGRAPH - 0xCF6C: 0x6C21, //CJK UNIFIED IDEOGRAPH - 0xCF6D: 0x6D28, //CJK UNIFIED IDEOGRAPH - 0xCF6E: 0x6D34, //CJK UNIFIED IDEOGRAPH - 0xCF6F: 0x6D2D, //CJK UNIFIED IDEOGRAPH - 0xCF70: 0x6D1F, //CJK UNIFIED IDEOGRAPH - 0xCF71: 0x6D3C, //CJK UNIFIED IDEOGRAPH - 0xCF72: 0x6D3F, //CJK UNIFIED IDEOGRAPH - 0xCF73: 0x6D12, //CJK UNIFIED IDEOGRAPH - 0xCF74: 0x6D0A, //CJK UNIFIED IDEOGRAPH - 0xCF75: 0x6CDA, //CJK UNIFIED IDEOGRAPH - 0xCF76: 0x6D33, //CJK UNIFIED IDEOGRAPH - 0xCF77: 0x6D04, //CJK UNIFIED IDEOGRAPH - 0xCF78: 0x6D19, //CJK UNIFIED IDEOGRAPH - 0xCF79: 0x6D3A, //CJK UNIFIED IDEOGRAPH - 0xCF7A: 0x6D1A, //CJK UNIFIED IDEOGRAPH - 0xCF7B: 0x6D11, //CJK UNIFIED IDEOGRAPH - 0xCF7C: 0x6D00, //CJK UNIFIED IDEOGRAPH - 0xCF7D: 0x6D1D, //CJK UNIFIED IDEOGRAPH - 0xCF7E: 0x6D42, //CJK UNIFIED IDEOGRAPH - 0xCFA1: 0x6D01, //CJK UNIFIED IDEOGRAPH - 0xCFA2: 0x6D18, //CJK UNIFIED IDEOGRAPH - 0xCFA3: 0x6D37, //CJK UNIFIED IDEOGRAPH - 0xCFA4: 0x6D03, //CJK UNIFIED IDEOGRAPH - 0xCFA5: 0x6D0F, //CJK UNIFIED IDEOGRAPH - 0xCFA6: 0x6D40, //CJK UNIFIED IDEOGRAPH - 0xCFA7: 0x6D07, //CJK UNIFIED IDEOGRAPH - 0xCFA8: 0x6D20, //CJK UNIFIED IDEOGRAPH - 0xCFA9: 0x6D2C, //CJK UNIFIED IDEOGRAPH - 0xCFAA: 0x6D08, //CJK UNIFIED IDEOGRAPH - 0xCFAB: 0x6D22, //CJK UNIFIED IDEOGRAPH - 0xCFAC: 0x6D09, //CJK UNIFIED IDEOGRAPH - 0xCFAD: 0x6D10, //CJK UNIFIED IDEOGRAPH - 0xCFAE: 0x70B7, //CJK UNIFIED IDEOGRAPH - 0xCFAF: 0x709F, //CJK UNIFIED IDEOGRAPH - 0xCFB0: 0x70BE, //CJK UNIFIED IDEOGRAPH - 0xCFB1: 0x70B1, //CJK UNIFIED IDEOGRAPH - 0xCFB2: 0x70B0, //CJK UNIFIED IDEOGRAPH - 0xCFB3: 0x70A1, //CJK UNIFIED IDEOGRAPH - 0xCFB4: 0x70B4, //CJK UNIFIED IDEOGRAPH - 0xCFB5: 0x70B5, //CJK UNIFIED IDEOGRAPH - 0xCFB6: 0x70A9, //CJK UNIFIED IDEOGRAPH - 0xCFB7: 0x7241, //CJK UNIFIED IDEOGRAPH - 0xCFB8: 0x7249, //CJK UNIFIED IDEOGRAPH - 0xCFB9: 0x724A, //CJK UNIFIED IDEOGRAPH - 0xCFBA: 0x726C, //CJK UNIFIED IDEOGRAPH - 0xCFBB: 0x7270, //CJK UNIFIED IDEOGRAPH - 0xCFBC: 0x7273, //CJK UNIFIED IDEOGRAPH - 0xCFBD: 0x726E, //CJK UNIFIED IDEOGRAPH - 0xCFBE: 0x72CA, //CJK UNIFIED IDEOGRAPH - 0xCFBF: 0x72E4, //CJK UNIFIED IDEOGRAPH - 0xCFC0: 0x72E8, //CJK UNIFIED IDEOGRAPH - 0xCFC1: 0x72EB, //CJK UNIFIED IDEOGRAPH - 0xCFC2: 0x72DF, //CJK UNIFIED IDEOGRAPH - 0xCFC3: 0x72EA, //CJK UNIFIED IDEOGRAPH - 0xCFC4: 0x72E6, //CJK UNIFIED IDEOGRAPH - 0xCFC5: 0x72E3, //CJK UNIFIED IDEOGRAPH - 0xCFC6: 0x7385, //CJK UNIFIED IDEOGRAPH - 0xCFC7: 0x73CC, //CJK UNIFIED IDEOGRAPH - 0xCFC8: 0x73C2, //CJK UNIFIED IDEOGRAPH - 0xCFC9: 0x73C8, //CJK UNIFIED IDEOGRAPH - 0xCFCA: 0x73C5, //CJK UNIFIED IDEOGRAPH - 0xCFCB: 0x73B9, //CJK UNIFIED IDEOGRAPH - 0xCFCC: 0x73B6, //CJK UNIFIED IDEOGRAPH - 0xCFCD: 0x73B5, //CJK UNIFIED IDEOGRAPH - 0xCFCE: 0x73B4, //CJK UNIFIED IDEOGRAPH - 0xCFCF: 0x73EB, //CJK UNIFIED IDEOGRAPH - 0xCFD0: 0x73BF, //CJK UNIFIED IDEOGRAPH - 0xCFD1: 0x73C7, //CJK UNIFIED IDEOGRAPH - 0xCFD2: 0x73BE, //CJK UNIFIED IDEOGRAPH - 0xCFD3: 0x73C3, //CJK UNIFIED IDEOGRAPH - 0xCFD4: 0x73C6, //CJK UNIFIED IDEOGRAPH - 0xCFD5: 0x73B8, //CJK UNIFIED IDEOGRAPH - 0xCFD6: 0x73CB, //CJK UNIFIED IDEOGRAPH - 0xCFD7: 0x74EC, //CJK UNIFIED IDEOGRAPH - 0xCFD8: 0x74EE, //CJK UNIFIED IDEOGRAPH - 0xCFD9: 0x752E, //CJK UNIFIED IDEOGRAPH - 0xCFDA: 0x7547, //CJK UNIFIED IDEOGRAPH - 0xCFDB: 0x7548, //CJK UNIFIED IDEOGRAPH - 0xCFDC: 0x75A7, //CJK UNIFIED IDEOGRAPH - 0xCFDD: 0x75AA, //CJK UNIFIED IDEOGRAPH - 0xCFDE: 0x7679, //CJK UNIFIED IDEOGRAPH - 0xCFDF: 0x76C4, //CJK UNIFIED IDEOGRAPH - 0xCFE0: 0x7708, //CJK UNIFIED IDEOGRAPH - 0xCFE1: 0x7703, //CJK UNIFIED IDEOGRAPH - 0xCFE2: 0x7704, //CJK UNIFIED IDEOGRAPH - 0xCFE3: 0x7705, //CJK UNIFIED IDEOGRAPH - 0xCFE4: 0x770A, //CJK UNIFIED IDEOGRAPH - 0xCFE5: 0x76F7, //CJK UNIFIED IDEOGRAPH - 0xCFE6: 0x76FB, //CJK UNIFIED IDEOGRAPH - 0xCFE7: 0x76FA, //CJK UNIFIED IDEOGRAPH - 0xCFE8: 0x77E7, //CJK UNIFIED IDEOGRAPH - 0xCFE9: 0x77E8, //CJK UNIFIED IDEOGRAPH - 0xCFEA: 0x7806, //CJK UNIFIED IDEOGRAPH - 0xCFEB: 0x7811, //CJK UNIFIED IDEOGRAPH - 0xCFEC: 0x7812, //CJK UNIFIED IDEOGRAPH - 0xCFED: 0x7805, //CJK UNIFIED IDEOGRAPH - 0xCFEE: 0x7810, //CJK UNIFIED IDEOGRAPH - 0xCFEF: 0x780F, //CJK UNIFIED IDEOGRAPH - 0xCFF0: 0x780E, //CJK UNIFIED IDEOGRAPH - 0xCFF1: 0x7809, //CJK UNIFIED IDEOGRAPH - 0xCFF2: 0x7803, //CJK UNIFIED IDEOGRAPH - 0xCFF3: 0x7813, //CJK UNIFIED IDEOGRAPH - 0xCFF4: 0x794A, //CJK UNIFIED IDEOGRAPH - 0xCFF5: 0x794C, //CJK UNIFIED IDEOGRAPH - 0xCFF6: 0x794B, //CJK UNIFIED IDEOGRAPH - 0xCFF7: 0x7945, //CJK UNIFIED IDEOGRAPH - 0xCFF8: 0x7944, //CJK UNIFIED IDEOGRAPH - 0xCFF9: 0x79D5, //CJK UNIFIED IDEOGRAPH - 0xCFFA: 0x79CD, //CJK UNIFIED IDEOGRAPH - 0xCFFB: 0x79CF, //CJK UNIFIED IDEOGRAPH - 0xCFFC: 0x79D6, //CJK UNIFIED IDEOGRAPH - 0xCFFD: 0x79CE, //CJK UNIFIED IDEOGRAPH - 0xCFFE: 0x7A80, //CJK UNIFIED IDEOGRAPH - 0xD040: 0x7A7E, //CJK UNIFIED IDEOGRAPH - 0xD041: 0x7AD1, //CJK UNIFIED IDEOGRAPH - 0xD042: 0x7B00, //CJK UNIFIED IDEOGRAPH - 0xD043: 0x7B01, //CJK UNIFIED IDEOGRAPH - 0xD044: 0x7C7A, //CJK UNIFIED IDEOGRAPH - 0xD045: 0x7C78, //CJK UNIFIED IDEOGRAPH - 0xD046: 0x7C79, //CJK UNIFIED IDEOGRAPH - 0xD047: 0x7C7F, //CJK UNIFIED IDEOGRAPH - 0xD048: 0x7C80, //CJK UNIFIED IDEOGRAPH - 0xD049: 0x7C81, //CJK UNIFIED IDEOGRAPH - 0xD04A: 0x7D03, //CJK UNIFIED IDEOGRAPH - 0xD04B: 0x7D08, //CJK UNIFIED IDEOGRAPH - 0xD04C: 0x7D01, //CJK UNIFIED IDEOGRAPH - 0xD04D: 0x7F58, //CJK UNIFIED IDEOGRAPH - 0xD04E: 0x7F91, //CJK UNIFIED IDEOGRAPH - 0xD04F: 0x7F8D, //CJK UNIFIED IDEOGRAPH - 0xD050: 0x7FBE, //CJK UNIFIED IDEOGRAPH - 0xD051: 0x8007, //CJK UNIFIED IDEOGRAPH - 0xD052: 0x800E, //CJK UNIFIED IDEOGRAPH - 0xD053: 0x800F, //CJK UNIFIED IDEOGRAPH - 0xD054: 0x8014, //CJK UNIFIED IDEOGRAPH - 0xD055: 0x8037, //CJK UNIFIED IDEOGRAPH - 0xD056: 0x80D8, //CJK UNIFIED IDEOGRAPH - 0xD057: 0x80C7, //CJK UNIFIED IDEOGRAPH - 0xD058: 0x80E0, //CJK UNIFIED IDEOGRAPH - 0xD059: 0x80D1, //CJK UNIFIED IDEOGRAPH - 0xD05A: 0x80C8, //CJK UNIFIED IDEOGRAPH - 0xD05B: 0x80C2, //CJK UNIFIED IDEOGRAPH - 0xD05C: 0x80D0, //CJK UNIFIED IDEOGRAPH - 0xD05D: 0x80C5, //CJK UNIFIED IDEOGRAPH - 0xD05E: 0x80E3, //CJK UNIFIED IDEOGRAPH - 0xD05F: 0x80D9, //CJK UNIFIED IDEOGRAPH - 0xD060: 0x80DC, //CJK UNIFIED IDEOGRAPH - 0xD061: 0x80CA, //CJK UNIFIED IDEOGRAPH - 0xD062: 0x80D5, //CJK UNIFIED IDEOGRAPH - 0xD063: 0x80C9, //CJK UNIFIED IDEOGRAPH - 0xD064: 0x80CF, //CJK UNIFIED IDEOGRAPH - 0xD065: 0x80D7, //CJK UNIFIED IDEOGRAPH - 0xD066: 0x80E6, //CJK UNIFIED IDEOGRAPH - 0xD067: 0x80CD, //CJK UNIFIED IDEOGRAPH - 0xD068: 0x81FF, //CJK UNIFIED IDEOGRAPH - 0xD069: 0x8221, //CJK UNIFIED IDEOGRAPH - 0xD06A: 0x8294, //CJK UNIFIED IDEOGRAPH - 0xD06B: 0x82D9, //CJK UNIFIED IDEOGRAPH - 0xD06C: 0x82FE, //CJK UNIFIED IDEOGRAPH - 0xD06D: 0x82F9, //CJK UNIFIED IDEOGRAPH - 0xD06E: 0x8307, //CJK UNIFIED IDEOGRAPH - 0xD06F: 0x82E8, //CJK UNIFIED IDEOGRAPH - 0xD070: 0x8300, //CJK UNIFIED IDEOGRAPH - 0xD071: 0x82D5, //CJK UNIFIED IDEOGRAPH - 0xD072: 0x833A, //CJK UNIFIED IDEOGRAPH - 0xD073: 0x82EB, //CJK UNIFIED IDEOGRAPH - 0xD074: 0x82D6, //CJK UNIFIED IDEOGRAPH - 0xD075: 0x82F4, //CJK UNIFIED IDEOGRAPH - 0xD076: 0x82EC, //CJK UNIFIED IDEOGRAPH - 0xD077: 0x82E1, //CJK UNIFIED IDEOGRAPH - 0xD078: 0x82F2, //CJK UNIFIED IDEOGRAPH - 0xD079: 0x82F5, //CJK UNIFIED IDEOGRAPH - 0xD07A: 0x830C, //CJK UNIFIED IDEOGRAPH - 0xD07B: 0x82FB, //CJK UNIFIED IDEOGRAPH - 0xD07C: 0x82F6, //CJK UNIFIED IDEOGRAPH - 0xD07D: 0x82F0, //CJK UNIFIED IDEOGRAPH - 0xD07E: 0x82EA, //CJK UNIFIED IDEOGRAPH - 0xD0A1: 0x82E4, //CJK UNIFIED IDEOGRAPH - 0xD0A2: 0x82E0, //CJK UNIFIED IDEOGRAPH - 0xD0A3: 0x82FA, //CJK UNIFIED IDEOGRAPH - 0xD0A4: 0x82F3, //CJK UNIFIED IDEOGRAPH - 0xD0A5: 0x82ED, //CJK UNIFIED IDEOGRAPH - 0xD0A6: 0x8677, //CJK UNIFIED IDEOGRAPH - 0xD0A7: 0x8674, //CJK UNIFIED IDEOGRAPH - 0xD0A8: 0x867C, //CJK UNIFIED IDEOGRAPH - 0xD0A9: 0x8673, //CJK UNIFIED IDEOGRAPH - 0xD0AA: 0x8841, //CJK UNIFIED IDEOGRAPH - 0xD0AB: 0x884E, //CJK UNIFIED IDEOGRAPH - 0xD0AC: 0x8867, //CJK UNIFIED IDEOGRAPH - 0xD0AD: 0x886A, //CJK UNIFIED IDEOGRAPH - 0xD0AE: 0x8869, //CJK UNIFIED IDEOGRAPH - 0xD0AF: 0x89D3, //CJK UNIFIED IDEOGRAPH - 0xD0B0: 0x8A04, //CJK UNIFIED IDEOGRAPH - 0xD0B1: 0x8A07, //CJK UNIFIED IDEOGRAPH - 0xD0B2: 0x8D72, //CJK UNIFIED IDEOGRAPH - 0xD0B3: 0x8FE3, //CJK UNIFIED IDEOGRAPH - 0xD0B4: 0x8FE1, //CJK UNIFIED IDEOGRAPH - 0xD0B5: 0x8FEE, //CJK UNIFIED IDEOGRAPH - 0xD0B6: 0x8FE0, //CJK UNIFIED IDEOGRAPH - 0xD0B7: 0x90F1, //CJK UNIFIED IDEOGRAPH - 0xD0B8: 0x90BD, //CJK UNIFIED IDEOGRAPH - 0xD0B9: 0x90BF, //CJK UNIFIED IDEOGRAPH - 0xD0BA: 0x90D5, //CJK UNIFIED IDEOGRAPH - 0xD0BB: 0x90C5, //CJK UNIFIED IDEOGRAPH - 0xD0BC: 0x90BE, //CJK UNIFIED IDEOGRAPH - 0xD0BD: 0x90C7, //CJK UNIFIED IDEOGRAPH - 0xD0BE: 0x90CB, //CJK UNIFIED IDEOGRAPH - 0xD0BF: 0x90C8, //CJK UNIFIED IDEOGRAPH - 0xD0C0: 0x91D4, //CJK UNIFIED IDEOGRAPH - 0xD0C1: 0x91D3, //CJK UNIFIED IDEOGRAPH - 0xD0C2: 0x9654, //CJK UNIFIED IDEOGRAPH - 0xD0C3: 0x964F, //CJK UNIFIED IDEOGRAPH - 0xD0C4: 0x9651, //CJK UNIFIED IDEOGRAPH - 0xD0C5: 0x9653, //CJK UNIFIED IDEOGRAPH - 0xD0C6: 0x964A, //CJK UNIFIED IDEOGRAPH - 0xD0C7: 0x964E, //CJK UNIFIED IDEOGRAPH - 0xD0C8: 0x501E, //CJK UNIFIED IDEOGRAPH - 0xD0C9: 0x5005, //CJK UNIFIED IDEOGRAPH - 0xD0CA: 0x5007, //CJK UNIFIED IDEOGRAPH - 0xD0CB: 0x5013, //CJK UNIFIED IDEOGRAPH - 0xD0CC: 0x5022, //CJK UNIFIED IDEOGRAPH - 0xD0CD: 0x5030, //CJK UNIFIED IDEOGRAPH - 0xD0CE: 0x501B, //CJK UNIFIED IDEOGRAPH - 0xD0CF: 0x4FF5, //CJK UNIFIED IDEOGRAPH - 0xD0D0: 0x4FF4, //CJK UNIFIED IDEOGRAPH - 0xD0D1: 0x5033, //CJK UNIFIED IDEOGRAPH - 0xD0D2: 0x5037, //CJK UNIFIED IDEOGRAPH - 0xD0D3: 0x502C, //CJK UNIFIED IDEOGRAPH - 0xD0D4: 0x4FF6, //CJK UNIFIED IDEOGRAPH - 0xD0D5: 0x4FF7, //CJK UNIFIED IDEOGRAPH - 0xD0D6: 0x5017, //CJK UNIFIED IDEOGRAPH - 0xD0D7: 0x501C, //CJK UNIFIED IDEOGRAPH - 0xD0D8: 0x5020, //CJK UNIFIED IDEOGRAPH - 0xD0D9: 0x5027, //CJK UNIFIED IDEOGRAPH - 0xD0DA: 0x5035, //CJK UNIFIED IDEOGRAPH - 0xD0DB: 0x502F, //CJK UNIFIED IDEOGRAPH - 0xD0DC: 0x5031, //CJK UNIFIED IDEOGRAPH - 0xD0DD: 0x500E, //CJK UNIFIED IDEOGRAPH - 0xD0DE: 0x515A, //CJK UNIFIED IDEOGRAPH - 0xD0DF: 0x5194, //CJK UNIFIED IDEOGRAPH - 0xD0E0: 0x5193, //CJK UNIFIED IDEOGRAPH - 0xD0E1: 0x51CA, //CJK UNIFIED IDEOGRAPH - 0xD0E2: 0x51C4, //CJK UNIFIED IDEOGRAPH - 0xD0E3: 0x51C5, //CJK UNIFIED IDEOGRAPH - 0xD0E4: 0x51C8, //CJK UNIFIED IDEOGRAPH - 0xD0E5: 0x51CE, //CJK UNIFIED IDEOGRAPH - 0xD0E6: 0x5261, //CJK UNIFIED IDEOGRAPH - 0xD0E7: 0x525A, //CJK UNIFIED IDEOGRAPH - 0xD0E8: 0x5252, //CJK UNIFIED IDEOGRAPH - 0xD0E9: 0x525E, //CJK UNIFIED IDEOGRAPH - 0xD0EA: 0x525F, //CJK UNIFIED IDEOGRAPH - 0xD0EB: 0x5255, //CJK UNIFIED IDEOGRAPH - 0xD0EC: 0x5262, //CJK UNIFIED IDEOGRAPH - 0xD0ED: 0x52CD, //CJK UNIFIED IDEOGRAPH - 0xD0EE: 0x530E, //CJK UNIFIED IDEOGRAPH - 0xD0EF: 0x539E, //CJK UNIFIED IDEOGRAPH - 0xD0F0: 0x5526, //CJK UNIFIED IDEOGRAPH - 0xD0F1: 0x54E2, //CJK UNIFIED IDEOGRAPH - 0xD0F2: 0x5517, //CJK UNIFIED IDEOGRAPH - 0xD0F3: 0x5512, //CJK UNIFIED IDEOGRAPH - 0xD0F4: 0x54E7, //CJK UNIFIED IDEOGRAPH - 0xD0F5: 0x54F3, //CJK UNIFIED IDEOGRAPH - 0xD0F6: 0x54E4, //CJK UNIFIED IDEOGRAPH - 0xD0F7: 0x551A, //CJK UNIFIED IDEOGRAPH - 0xD0F8: 0x54FF, //CJK UNIFIED IDEOGRAPH - 0xD0F9: 0x5504, //CJK UNIFIED IDEOGRAPH - 0xD0FA: 0x5508, //CJK UNIFIED IDEOGRAPH - 0xD0FB: 0x54EB, //CJK UNIFIED IDEOGRAPH - 0xD0FC: 0x5511, //CJK UNIFIED IDEOGRAPH - 0xD0FD: 0x5505, //CJK UNIFIED IDEOGRAPH - 0xD0FE: 0x54F1, //CJK UNIFIED IDEOGRAPH - 0xD140: 0x550A, //CJK UNIFIED IDEOGRAPH - 0xD141: 0x54FB, //CJK UNIFIED IDEOGRAPH - 0xD142: 0x54F7, //CJK UNIFIED IDEOGRAPH - 0xD143: 0x54F8, //CJK UNIFIED IDEOGRAPH - 0xD144: 0x54E0, //CJK UNIFIED IDEOGRAPH - 0xD145: 0x550E, //CJK UNIFIED IDEOGRAPH - 0xD146: 0x5503, //CJK UNIFIED IDEOGRAPH - 0xD147: 0x550B, //CJK UNIFIED IDEOGRAPH - 0xD148: 0x5701, //CJK UNIFIED IDEOGRAPH - 0xD149: 0x5702, //CJK UNIFIED IDEOGRAPH - 0xD14A: 0x57CC, //CJK UNIFIED IDEOGRAPH - 0xD14B: 0x5832, //CJK UNIFIED IDEOGRAPH - 0xD14C: 0x57D5, //CJK UNIFIED IDEOGRAPH - 0xD14D: 0x57D2, //CJK UNIFIED IDEOGRAPH - 0xD14E: 0x57BA, //CJK UNIFIED IDEOGRAPH - 0xD14F: 0x57C6, //CJK UNIFIED IDEOGRAPH - 0xD150: 0x57BD, //CJK UNIFIED IDEOGRAPH - 0xD151: 0x57BC, //CJK UNIFIED IDEOGRAPH - 0xD152: 0x57B8, //CJK UNIFIED IDEOGRAPH - 0xD153: 0x57B6, //CJK UNIFIED IDEOGRAPH - 0xD154: 0x57BF, //CJK UNIFIED IDEOGRAPH - 0xD155: 0x57C7, //CJK UNIFIED IDEOGRAPH - 0xD156: 0x57D0, //CJK UNIFIED IDEOGRAPH - 0xD157: 0x57B9, //CJK UNIFIED IDEOGRAPH - 0xD158: 0x57C1, //CJK UNIFIED IDEOGRAPH - 0xD159: 0x590E, //CJK UNIFIED IDEOGRAPH - 0xD15A: 0x594A, //CJK UNIFIED IDEOGRAPH - 0xD15B: 0x5A19, //CJK UNIFIED IDEOGRAPH - 0xD15C: 0x5A16, //CJK UNIFIED IDEOGRAPH - 0xD15D: 0x5A2D, //CJK UNIFIED IDEOGRAPH - 0xD15E: 0x5A2E, //CJK UNIFIED IDEOGRAPH - 0xD15F: 0x5A15, //CJK UNIFIED IDEOGRAPH - 0xD160: 0x5A0F, //CJK UNIFIED IDEOGRAPH - 0xD161: 0x5A17, //CJK UNIFIED IDEOGRAPH - 0xD162: 0x5A0A, //CJK UNIFIED IDEOGRAPH - 0xD163: 0x5A1E, //CJK UNIFIED IDEOGRAPH - 0xD164: 0x5A33, //CJK UNIFIED IDEOGRAPH - 0xD165: 0x5B6C, //CJK UNIFIED IDEOGRAPH - 0xD166: 0x5BA7, //CJK UNIFIED IDEOGRAPH - 0xD167: 0x5BAD, //CJK UNIFIED IDEOGRAPH - 0xD168: 0x5BAC, //CJK UNIFIED IDEOGRAPH - 0xD169: 0x5C03, //CJK UNIFIED IDEOGRAPH - 0xD16A: 0x5C56, //CJK UNIFIED IDEOGRAPH - 0xD16B: 0x5C54, //CJK UNIFIED IDEOGRAPH - 0xD16C: 0x5CEC, //CJK UNIFIED IDEOGRAPH - 0xD16D: 0x5CFF, //CJK UNIFIED IDEOGRAPH - 0xD16E: 0x5CEE, //CJK UNIFIED IDEOGRAPH - 0xD16F: 0x5CF1, //CJK UNIFIED IDEOGRAPH - 0xD170: 0x5CF7, //CJK UNIFIED IDEOGRAPH - 0xD171: 0x5D00, //CJK UNIFIED IDEOGRAPH - 0xD172: 0x5CF9, //CJK UNIFIED IDEOGRAPH - 0xD173: 0x5E29, //CJK UNIFIED IDEOGRAPH - 0xD174: 0x5E28, //CJK UNIFIED IDEOGRAPH - 0xD175: 0x5EA8, //CJK UNIFIED IDEOGRAPH - 0xD176: 0x5EAE, //CJK UNIFIED IDEOGRAPH - 0xD177: 0x5EAA, //CJK UNIFIED IDEOGRAPH - 0xD178: 0x5EAC, //CJK UNIFIED IDEOGRAPH - 0xD179: 0x5F33, //CJK UNIFIED IDEOGRAPH - 0xD17A: 0x5F30, //CJK UNIFIED IDEOGRAPH - 0xD17B: 0x5F67, //CJK UNIFIED IDEOGRAPH - 0xD17C: 0x605D, //CJK UNIFIED IDEOGRAPH - 0xD17D: 0x605A, //CJK UNIFIED IDEOGRAPH - 0xD17E: 0x6067, //CJK UNIFIED IDEOGRAPH - 0xD1A1: 0x6041, //CJK UNIFIED IDEOGRAPH - 0xD1A2: 0x60A2, //CJK UNIFIED IDEOGRAPH - 0xD1A3: 0x6088, //CJK UNIFIED IDEOGRAPH - 0xD1A4: 0x6080, //CJK UNIFIED IDEOGRAPH - 0xD1A5: 0x6092, //CJK UNIFIED IDEOGRAPH - 0xD1A6: 0x6081, //CJK UNIFIED IDEOGRAPH - 0xD1A7: 0x609D, //CJK UNIFIED IDEOGRAPH - 0xD1A8: 0x6083, //CJK UNIFIED IDEOGRAPH - 0xD1A9: 0x6095, //CJK UNIFIED IDEOGRAPH - 0xD1AA: 0x609B, //CJK UNIFIED IDEOGRAPH - 0xD1AB: 0x6097, //CJK UNIFIED IDEOGRAPH - 0xD1AC: 0x6087, //CJK UNIFIED IDEOGRAPH - 0xD1AD: 0x609C, //CJK UNIFIED IDEOGRAPH - 0xD1AE: 0x608E, //CJK UNIFIED IDEOGRAPH - 0xD1AF: 0x6219, //CJK UNIFIED IDEOGRAPH - 0xD1B0: 0x6246, //CJK UNIFIED IDEOGRAPH - 0xD1B1: 0x62F2, //CJK UNIFIED IDEOGRAPH - 0xD1B2: 0x6310, //CJK UNIFIED IDEOGRAPH - 0xD1B3: 0x6356, //CJK UNIFIED IDEOGRAPH - 0xD1B4: 0x632C, //CJK UNIFIED IDEOGRAPH - 0xD1B5: 0x6344, //CJK UNIFIED IDEOGRAPH - 0xD1B6: 0x6345, //CJK UNIFIED IDEOGRAPH - 0xD1B7: 0x6336, //CJK UNIFIED IDEOGRAPH - 0xD1B8: 0x6343, //CJK UNIFIED IDEOGRAPH - 0xD1B9: 0x63E4, //CJK UNIFIED IDEOGRAPH - 0xD1BA: 0x6339, //CJK UNIFIED IDEOGRAPH - 0xD1BB: 0x634B, //CJK UNIFIED IDEOGRAPH - 0xD1BC: 0x634A, //CJK UNIFIED IDEOGRAPH - 0xD1BD: 0x633C, //CJK UNIFIED IDEOGRAPH - 0xD1BE: 0x6329, //CJK UNIFIED IDEOGRAPH - 0xD1BF: 0x6341, //CJK UNIFIED IDEOGRAPH - 0xD1C0: 0x6334, //CJK UNIFIED IDEOGRAPH - 0xD1C1: 0x6358, //CJK UNIFIED IDEOGRAPH - 0xD1C2: 0x6354, //CJK UNIFIED IDEOGRAPH - 0xD1C3: 0x6359, //CJK UNIFIED IDEOGRAPH - 0xD1C4: 0x632D, //CJK UNIFIED IDEOGRAPH - 0xD1C5: 0x6347, //CJK UNIFIED IDEOGRAPH - 0xD1C6: 0x6333, //CJK UNIFIED IDEOGRAPH - 0xD1C7: 0x635A, //CJK UNIFIED IDEOGRAPH - 0xD1C8: 0x6351, //CJK UNIFIED IDEOGRAPH - 0xD1C9: 0x6338, //CJK UNIFIED IDEOGRAPH - 0xD1CA: 0x6357, //CJK UNIFIED IDEOGRAPH - 0xD1CB: 0x6340, //CJK UNIFIED IDEOGRAPH - 0xD1CC: 0x6348, //CJK UNIFIED IDEOGRAPH - 0xD1CD: 0x654A, //CJK UNIFIED IDEOGRAPH - 0xD1CE: 0x6546, //CJK UNIFIED IDEOGRAPH - 0xD1CF: 0x65C6, //CJK UNIFIED IDEOGRAPH - 0xD1D0: 0x65C3, //CJK UNIFIED IDEOGRAPH - 0xD1D1: 0x65C4, //CJK UNIFIED IDEOGRAPH - 0xD1D2: 0x65C2, //CJK UNIFIED IDEOGRAPH - 0xD1D3: 0x664A, //CJK UNIFIED IDEOGRAPH - 0xD1D4: 0x665F, //CJK UNIFIED IDEOGRAPH - 0xD1D5: 0x6647, //CJK UNIFIED IDEOGRAPH - 0xD1D6: 0x6651, //CJK UNIFIED IDEOGRAPH - 0xD1D7: 0x6712, //CJK UNIFIED IDEOGRAPH - 0xD1D8: 0x6713, //CJK UNIFIED IDEOGRAPH - 0xD1D9: 0x681F, //CJK UNIFIED IDEOGRAPH - 0xD1DA: 0x681A, //CJK UNIFIED IDEOGRAPH - 0xD1DB: 0x6849, //CJK UNIFIED IDEOGRAPH - 0xD1DC: 0x6832, //CJK UNIFIED IDEOGRAPH - 0xD1DD: 0x6833, //CJK UNIFIED IDEOGRAPH - 0xD1DE: 0x683B, //CJK UNIFIED IDEOGRAPH - 0xD1DF: 0x684B, //CJK UNIFIED IDEOGRAPH - 0xD1E0: 0x684F, //CJK UNIFIED IDEOGRAPH - 0xD1E1: 0x6816, //CJK UNIFIED IDEOGRAPH - 0xD1E2: 0x6831, //CJK UNIFIED IDEOGRAPH - 0xD1E3: 0x681C, //CJK UNIFIED IDEOGRAPH - 0xD1E4: 0x6835, //CJK UNIFIED IDEOGRAPH - 0xD1E5: 0x682B, //CJK UNIFIED IDEOGRAPH - 0xD1E6: 0x682D, //CJK UNIFIED IDEOGRAPH - 0xD1E7: 0x682F, //CJK UNIFIED IDEOGRAPH - 0xD1E8: 0x684E, //CJK UNIFIED IDEOGRAPH - 0xD1E9: 0x6844, //CJK UNIFIED IDEOGRAPH - 0xD1EA: 0x6834, //CJK UNIFIED IDEOGRAPH - 0xD1EB: 0x681D, //CJK UNIFIED IDEOGRAPH - 0xD1EC: 0x6812, //CJK UNIFIED IDEOGRAPH - 0xD1ED: 0x6814, //CJK UNIFIED IDEOGRAPH - 0xD1EE: 0x6826, //CJK UNIFIED IDEOGRAPH - 0xD1EF: 0x6828, //CJK UNIFIED IDEOGRAPH - 0xD1F0: 0x682E, //CJK UNIFIED IDEOGRAPH - 0xD1F1: 0x684D, //CJK UNIFIED IDEOGRAPH - 0xD1F2: 0x683A, //CJK UNIFIED IDEOGRAPH - 0xD1F3: 0x6825, //CJK UNIFIED IDEOGRAPH - 0xD1F4: 0x6820, //CJK UNIFIED IDEOGRAPH - 0xD1F5: 0x6B2C, //CJK UNIFIED IDEOGRAPH - 0xD1F6: 0x6B2F, //CJK UNIFIED IDEOGRAPH - 0xD1F7: 0x6B2D, //CJK UNIFIED IDEOGRAPH - 0xD1F8: 0x6B31, //CJK UNIFIED IDEOGRAPH - 0xD1F9: 0x6B34, //CJK UNIFIED IDEOGRAPH - 0xD1FA: 0x6B6D, //CJK UNIFIED IDEOGRAPH - 0xD1FB: 0x8082, //CJK UNIFIED IDEOGRAPH - 0xD1FC: 0x6B88, //CJK UNIFIED IDEOGRAPH - 0xD1FD: 0x6BE6, //CJK UNIFIED IDEOGRAPH - 0xD1FE: 0x6BE4, //CJK UNIFIED IDEOGRAPH - 0xD240: 0x6BE8, //CJK UNIFIED IDEOGRAPH - 0xD241: 0x6BE3, //CJK UNIFIED IDEOGRAPH - 0xD242: 0x6BE2, //CJK UNIFIED IDEOGRAPH - 0xD243: 0x6BE7, //CJK UNIFIED IDEOGRAPH - 0xD244: 0x6C25, //CJK UNIFIED IDEOGRAPH - 0xD245: 0x6D7A, //CJK UNIFIED IDEOGRAPH - 0xD246: 0x6D63, //CJK UNIFIED IDEOGRAPH - 0xD247: 0x6D64, //CJK UNIFIED IDEOGRAPH - 0xD248: 0x6D76, //CJK UNIFIED IDEOGRAPH - 0xD249: 0x6D0D, //CJK UNIFIED IDEOGRAPH - 0xD24A: 0x6D61, //CJK UNIFIED IDEOGRAPH - 0xD24B: 0x6D92, //CJK UNIFIED IDEOGRAPH - 0xD24C: 0x6D58, //CJK UNIFIED IDEOGRAPH - 0xD24D: 0x6D62, //CJK UNIFIED IDEOGRAPH - 0xD24E: 0x6D6D, //CJK UNIFIED IDEOGRAPH - 0xD24F: 0x6D6F, //CJK UNIFIED IDEOGRAPH - 0xD250: 0x6D91, //CJK UNIFIED IDEOGRAPH - 0xD251: 0x6D8D, //CJK UNIFIED IDEOGRAPH - 0xD252: 0x6DEF, //CJK UNIFIED IDEOGRAPH - 0xD253: 0x6D7F, //CJK UNIFIED IDEOGRAPH - 0xD254: 0x6D86, //CJK UNIFIED IDEOGRAPH - 0xD255: 0x6D5E, //CJK UNIFIED IDEOGRAPH - 0xD256: 0x6D67, //CJK UNIFIED IDEOGRAPH - 0xD257: 0x6D60, //CJK UNIFIED IDEOGRAPH - 0xD258: 0x6D97, //CJK UNIFIED IDEOGRAPH - 0xD259: 0x6D70, //CJK UNIFIED IDEOGRAPH - 0xD25A: 0x6D7C, //CJK UNIFIED IDEOGRAPH - 0xD25B: 0x6D5F, //CJK UNIFIED IDEOGRAPH - 0xD25C: 0x6D82, //CJK UNIFIED IDEOGRAPH - 0xD25D: 0x6D98, //CJK UNIFIED IDEOGRAPH - 0xD25E: 0x6D2F, //CJK UNIFIED IDEOGRAPH - 0xD25F: 0x6D68, //CJK UNIFIED IDEOGRAPH - 0xD260: 0x6D8B, //CJK UNIFIED IDEOGRAPH - 0xD261: 0x6D7E, //CJK UNIFIED IDEOGRAPH - 0xD262: 0x6D80, //CJK UNIFIED IDEOGRAPH - 0xD263: 0x6D84, //CJK UNIFIED IDEOGRAPH - 0xD264: 0x6D16, //CJK UNIFIED IDEOGRAPH - 0xD265: 0x6D83, //CJK UNIFIED IDEOGRAPH - 0xD266: 0x6D7B, //CJK UNIFIED IDEOGRAPH - 0xD267: 0x6D7D, //CJK UNIFIED IDEOGRAPH - 0xD268: 0x6D75, //CJK UNIFIED IDEOGRAPH - 0xD269: 0x6D90, //CJK UNIFIED IDEOGRAPH - 0xD26A: 0x70DC, //CJK UNIFIED IDEOGRAPH - 0xD26B: 0x70D3, //CJK UNIFIED IDEOGRAPH - 0xD26C: 0x70D1, //CJK UNIFIED IDEOGRAPH - 0xD26D: 0x70DD, //CJK UNIFIED IDEOGRAPH - 0xD26E: 0x70CB, //CJK UNIFIED IDEOGRAPH - 0xD26F: 0x7F39, //CJK UNIFIED IDEOGRAPH - 0xD270: 0x70E2, //CJK UNIFIED IDEOGRAPH - 0xD271: 0x70D7, //CJK UNIFIED IDEOGRAPH - 0xD272: 0x70D2, //CJK UNIFIED IDEOGRAPH - 0xD273: 0x70DE, //CJK UNIFIED IDEOGRAPH - 0xD274: 0x70E0, //CJK UNIFIED IDEOGRAPH - 0xD275: 0x70D4, //CJK UNIFIED IDEOGRAPH - 0xD276: 0x70CD, //CJK UNIFIED IDEOGRAPH - 0xD277: 0x70C5, //CJK UNIFIED IDEOGRAPH - 0xD278: 0x70C6, //CJK UNIFIED IDEOGRAPH - 0xD279: 0x70C7, //CJK UNIFIED IDEOGRAPH - 0xD27A: 0x70DA, //CJK UNIFIED IDEOGRAPH - 0xD27B: 0x70CE, //CJK UNIFIED IDEOGRAPH - 0xD27C: 0x70E1, //CJK UNIFIED IDEOGRAPH - 0xD27D: 0x7242, //CJK UNIFIED IDEOGRAPH - 0xD27E: 0x7278, //CJK UNIFIED IDEOGRAPH - 0xD2A1: 0x7277, //CJK UNIFIED IDEOGRAPH - 0xD2A2: 0x7276, //CJK UNIFIED IDEOGRAPH - 0xD2A3: 0x7300, //CJK UNIFIED IDEOGRAPH - 0xD2A4: 0x72FA, //CJK UNIFIED IDEOGRAPH - 0xD2A5: 0x72F4, //CJK UNIFIED IDEOGRAPH - 0xD2A6: 0x72FE, //CJK UNIFIED IDEOGRAPH - 0xD2A7: 0x72F6, //CJK UNIFIED IDEOGRAPH - 0xD2A8: 0x72F3, //CJK UNIFIED IDEOGRAPH - 0xD2A9: 0x72FB, //CJK UNIFIED IDEOGRAPH - 0xD2AA: 0x7301, //CJK UNIFIED IDEOGRAPH - 0xD2AB: 0x73D3, //CJK UNIFIED IDEOGRAPH - 0xD2AC: 0x73D9, //CJK UNIFIED IDEOGRAPH - 0xD2AD: 0x73E5, //CJK UNIFIED IDEOGRAPH - 0xD2AE: 0x73D6, //CJK UNIFIED IDEOGRAPH - 0xD2AF: 0x73BC, //CJK UNIFIED IDEOGRAPH - 0xD2B0: 0x73E7, //CJK UNIFIED IDEOGRAPH - 0xD2B1: 0x73E3, //CJK UNIFIED IDEOGRAPH - 0xD2B2: 0x73E9, //CJK UNIFIED IDEOGRAPH - 0xD2B3: 0x73DC, //CJK UNIFIED IDEOGRAPH - 0xD2B4: 0x73D2, //CJK UNIFIED IDEOGRAPH - 0xD2B5: 0x73DB, //CJK UNIFIED IDEOGRAPH - 0xD2B6: 0x73D4, //CJK UNIFIED IDEOGRAPH - 0xD2B7: 0x73DD, //CJK UNIFIED IDEOGRAPH - 0xD2B8: 0x73DA, //CJK UNIFIED IDEOGRAPH - 0xD2B9: 0x73D7, //CJK UNIFIED IDEOGRAPH - 0xD2BA: 0x73D8, //CJK UNIFIED IDEOGRAPH - 0xD2BB: 0x73E8, //CJK UNIFIED IDEOGRAPH - 0xD2BC: 0x74DE, //CJK UNIFIED IDEOGRAPH - 0xD2BD: 0x74DF, //CJK UNIFIED IDEOGRAPH - 0xD2BE: 0x74F4, //CJK UNIFIED IDEOGRAPH - 0xD2BF: 0x74F5, //CJK UNIFIED IDEOGRAPH - 0xD2C0: 0x7521, //CJK UNIFIED IDEOGRAPH - 0xD2C1: 0x755B, //CJK UNIFIED IDEOGRAPH - 0xD2C2: 0x755F, //CJK UNIFIED IDEOGRAPH - 0xD2C3: 0x75B0, //CJK UNIFIED IDEOGRAPH - 0xD2C4: 0x75C1, //CJK UNIFIED IDEOGRAPH - 0xD2C5: 0x75BB, //CJK UNIFIED IDEOGRAPH - 0xD2C6: 0x75C4, //CJK UNIFIED IDEOGRAPH - 0xD2C7: 0x75C0, //CJK UNIFIED IDEOGRAPH - 0xD2C8: 0x75BF, //CJK UNIFIED IDEOGRAPH - 0xD2C9: 0x75B6, //CJK UNIFIED IDEOGRAPH - 0xD2CA: 0x75BA, //CJK UNIFIED IDEOGRAPH - 0xD2CB: 0x768A, //CJK UNIFIED IDEOGRAPH - 0xD2CC: 0x76C9, //CJK UNIFIED IDEOGRAPH - 0xD2CD: 0x771D, //CJK UNIFIED IDEOGRAPH - 0xD2CE: 0x771B, //CJK UNIFIED IDEOGRAPH - 0xD2CF: 0x7710, //CJK UNIFIED IDEOGRAPH - 0xD2D0: 0x7713, //CJK UNIFIED IDEOGRAPH - 0xD2D1: 0x7712, //CJK UNIFIED IDEOGRAPH - 0xD2D2: 0x7723, //CJK UNIFIED IDEOGRAPH - 0xD2D3: 0x7711, //CJK UNIFIED IDEOGRAPH - 0xD2D4: 0x7715, //CJK UNIFIED IDEOGRAPH - 0xD2D5: 0x7719, //CJK UNIFIED IDEOGRAPH - 0xD2D6: 0x771A, //CJK UNIFIED IDEOGRAPH - 0xD2D7: 0x7722, //CJK UNIFIED IDEOGRAPH - 0xD2D8: 0x7727, //CJK UNIFIED IDEOGRAPH - 0xD2D9: 0x7823, //CJK UNIFIED IDEOGRAPH - 0xD2DA: 0x782C, //CJK UNIFIED IDEOGRAPH - 0xD2DB: 0x7822, //CJK UNIFIED IDEOGRAPH - 0xD2DC: 0x7835, //CJK UNIFIED IDEOGRAPH - 0xD2DD: 0x782F, //CJK UNIFIED IDEOGRAPH - 0xD2DE: 0x7828, //CJK UNIFIED IDEOGRAPH - 0xD2DF: 0x782E, //CJK UNIFIED IDEOGRAPH - 0xD2E0: 0x782B, //CJK UNIFIED IDEOGRAPH - 0xD2E1: 0x7821, //CJK UNIFIED IDEOGRAPH - 0xD2E2: 0x7829, //CJK UNIFIED IDEOGRAPH - 0xD2E3: 0x7833, //CJK UNIFIED IDEOGRAPH - 0xD2E4: 0x782A, //CJK UNIFIED IDEOGRAPH - 0xD2E5: 0x7831, //CJK UNIFIED IDEOGRAPH - 0xD2E6: 0x7954, //CJK UNIFIED IDEOGRAPH - 0xD2E7: 0x795B, //CJK UNIFIED IDEOGRAPH - 0xD2E8: 0x794F, //CJK UNIFIED IDEOGRAPH - 0xD2E9: 0x795C, //CJK UNIFIED IDEOGRAPH - 0xD2EA: 0x7953, //CJK UNIFIED IDEOGRAPH - 0xD2EB: 0x7952, //CJK UNIFIED IDEOGRAPH - 0xD2EC: 0x7951, //CJK UNIFIED IDEOGRAPH - 0xD2ED: 0x79EB, //CJK UNIFIED IDEOGRAPH - 0xD2EE: 0x79EC, //CJK UNIFIED IDEOGRAPH - 0xD2EF: 0x79E0, //CJK UNIFIED IDEOGRAPH - 0xD2F0: 0x79EE, //CJK UNIFIED IDEOGRAPH - 0xD2F1: 0x79ED, //CJK UNIFIED IDEOGRAPH - 0xD2F2: 0x79EA, //CJK UNIFIED IDEOGRAPH - 0xD2F3: 0x79DC, //CJK UNIFIED IDEOGRAPH - 0xD2F4: 0x79DE, //CJK UNIFIED IDEOGRAPH - 0xD2F5: 0x79DD, //CJK UNIFIED IDEOGRAPH - 0xD2F6: 0x7A86, //CJK UNIFIED IDEOGRAPH - 0xD2F7: 0x7A89, //CJK UNIFIED IDEOGRAPH - 0xD2F8: 0x7A85, //CJK UNIFIED IDEOGRAPH - 0xD2F9: 0x7A8B, //CJK UNIFIED IDEOGRAPH - 0xD2FA: 0x7A8C, //CJK UNIFIED IDEOGRAPH - 0xD2FB: 0x7A8A, //CJK UNIFIED IDEOGRAPH - 0xD2FC: 0x7A87, //CJK UNIFIED IDEOGRAPH - 0xD2FD: 0x7AD8, //CJK UNIFIED IDEOGRAPH - 0xD2FE: 0x7B10, //CJK UNIFIED IDEOGRAPH - 0xD340: 0x7B04, //CJK UNIFIED IDEOGRAPH - 0xD341: 0x7B13, //CJK UNIFIED IDEOGRAPH - 0xD342: 0x7B05, //CJK UNIFIED IDEOGRAPH - 0xD343: 0x7B0F, //CJK UNIFIED IDEOGRAPH - 0xD344: 0x7B08, //CJK UNIFIED IDEOGRAPH - 0xD345: 0x7B0A, //CJK UNIFIED IDEOGRAPH - 0xD346: 0x7B0E, //CJK UNIFIED IDEOGRAPH - 0xD347: 0x7B09, //CJK UNIFIED IDEOGRAPH - 0xD348: 0x7B12, //CJK UNIFIED IDEOGRAPH - 0xD349: 0x7C84, //CJK UNIFIED IDEOGRAPH - 0xD34A: 0x7C91, //CJK UNIFIED IDEOGRAPH - 0xD34B: 0x7C8A, //CJK UNIFIED IDEOGRAPH - 0xD34C: 0x7C8C, //CJK UNIFIED IDEOGRAPH - 0xD34D: 0x7C88, //CJK UNIFIED IDEOGRAPH - 0xD34E: 0x7C8D, //CJK UNIFIED IDEOGRAPH - 0xD34F: 0x7C85, //CJK UNIFIED IDEOGRAPH - 0xD350: 0x7D1E, //CJK UNIFIED IDEOGRAPH - 0xD351: 0x7D1D, //CJK UNIFIED IDEOGRAPH - 0xD352: 0x7D11, //CJK UNIFIED IDEOGRAPH - 0xD353: 0x7D0E, //CJK UNIFIED IDEOGRAPH - 0xD354: 0x7D18, //CJK UNIFIED IDEOGRAPH - 0xD355: 0x7D16, //CJK UNIFIED IDEOGRAPH - 0xD356: 0x7D13, //CJK UNIFIED IDEOGRAPH - 0xD357: 0x7D1F, //CJK UNIFIED IDEOGRAPH - 0xD358: 0x7D12, //CJK UNIFIED IDEOGRAPH - 0xD359: 0x7D0F, //CJK UNIFIED IDEOGRAPH - 0xD35A: 0x7D0C, //CJK UNIFIED IDEOGRAPH - 0xD35B: 0x7F5C, //CJK UNIFIED IDEOGRAPH - 0xD35C: 0x7F61, //CJK UNIFIED IDEOGRAPH - 0xD35D: 0x7F5E, //CJK UNIFIED IDEOGRAPH - 0xD35E: 0x7F60, //CJK UNIFIED IDEOGRAPH - 0xD35F: 0x7F5D, //CJK UNIFIED IDEOGRAPH - 0xD360: 0x7F5B, //CJK UNIFIED IDEOGRAPH - 0xD361: 0x7F96, //CJK UNIFIED IDEOGRAPH - 0xD362: 0x7F92, //CJK UNIFIED IDEOGRAPH - 0xD363: 0x7FC3, //CJK UNIFIED IDEOGRAPH - 0xD364: 0x7FC2, //CJK UNIFIED IDEOGRAPH - 0xD365: 0x7FC0, //CJK UNIFIED IDEOGRAPH - 0xD366: 0x8016, //CJK UNIFIED IDEOGRAPH - 0xD367: 0x803E, //CJK UNIFIED IDEOGRAPH - 0xD368: 0x8039, //CJK UNIFIED IDEOGRAPH - 0xD369: 0x80FA, //CJK UNIFIED IDEOGRAPH - 0xD36A: 0x80F2, //CJK UNIFIED IDEOGRAPH - 0xD36B: 0x80F9, //CJK UNIFIED IDEOGRAPH - 0xD36C: 0x80F5, //CJK UNIFIED IDEOGRAPH - 0xD36D: 0x8101, //CJK UNIFIED IDEOGRAPH - 0xD36E: 0x80FB, //CJK UNIFIED IDEOGRAPH - 0xD36F: 0x8100, //CJK UNIFIED IDEOGRAPH - 0xD370: 0x8201, //CJK UNIFIED IDEOGRAPH - 0xD371: 0x822F, //CJK UNIFIED IDEOGRAPH - 0xD372: 0x8225, //CJK UNIFIED IDEOGRAPH - 0xD373: 0x8333, //CJK UNIFIED IDEOGRAPH - 0xD374: 0x832D, //CJK UNIFIED IDEOGRAPH - 0xD375: 0x8344, //CJK UNIFIED IDEOGRAPH - 0xD376: 0x8319, //CJK UNIFIED IDEOGRAPH - 0xD377: 0x8351, //CJK UNIFIED IDEOGRAPH - 0xD378: 0x8325, //CJK UNIFIED IDEOGRAPH - 0xD379: 0x8356, //CJK UNIFIED IDEOGRAPH - 0xD37A: 0x833F, //CJK UNIFIED IDEOGRAPH - 0xD37B: 0x8341, //CJK UNIFIED IDEOGRAPH - 0xD37C: 0x8326, //CJK UNIFIED IDEOGRAPH - 0xD37D: 0x831C, //CJK UNIFIED IDEOGRAPH - 0xD37E: 0x8322, //CJK UNIFIED IDEOGRAPH - 0xD3A1: 0x8342, //CJK UNIFIED IDEOGRAPH - 0xD3A2: 0x834E, //CJK UNIFIED IDEOGRAPH - 0xD3A3: 0x831B, //CJK UNIFIED IDEOGRAPH - 0xD3A4: 0x832A, //CJK UNIFIED IDEOGRAPH - 0xD3A5: 0x8308, //CJK UNIFIED IDEOGRAPH - 0xD3A6: 0x833C, //CJK UNIFIED IDEOGRAPH - 0xD3A7: 0x834D, //CJK UNIFIED IDEOGRAPH - 0xD3A8: 0x8316, //CJK UNIFIED IDEOGRAPH - 0xD3A9: 0x8324, //CJK UNIFIED IDEOGRAPH - 0xD3AA: 0x8320, //CJK UNIFIED IDEOGRAPH - 0xD3AB: 0x8337, //CJK UNIFIED IDEOGRAPH - 0xD3AC: 0x832F, //CJK UNIFIED IDEOGRAPH - 0xD3AD: 0x8329, //CJK UNIFIED IDEOGRAPH - 0xD3AE: 0x8347, //CJK UNIFIED IDEOGRAPH - 0xD3AF: 0x8345, //CJK UNIFIED IDEOGRAPH - 0xD3B0: 0x834C, //CJK UNIFIED IDEOGRAPH - 0xD3B1: 0x8353, //CJK UNIFIED IDEOGRAPH - 0xD3B2: 0x831E, //CJK UNIFIED IDEOGRAPH - 0xD3B3: 0x832C, //CJK UNIFIED IDEOGRAPH - 0xD3B4: 0x834B, //CJK UNIFIED IDEOGRAPH - 0xD3B5: 0x8327, //CJK UNIFIED IDEOGRAPH - 0xD3B6: 0x8348, //CJK UNIFIED IDEOGRAPH - 0xD3B7: 0x8653, //CJK UNIFIED IDEOGRAPH - 0xD3B8: 0x8652, //CJK UNIFIED IDEOGRAPH - 0xD3B9: 0x86A2, //CJK UNIFIED IDEOGRAPH - 0xD3BA: 0x86A8, //CJK UNIFIED IDEOGRAPH - 0xD3BB: 0x8696, //CJK UNIFIED IDEOGRAPH - 0xD3BC: 0x868D, //CJK UNIFIED IDEOGRAPH - 0xD3BD: 0x8691, //CJK UNIFIED IDEOGRAPH - 0xD3BE: 0x869E, //CJK UNIFIED IDEOGRAPH - 0xD3BF: 0x8687, //CJK UNIFIED IDEOGRAPH - 0xD3C0: 0x8697, //CJK UNIFIED IDEOGRAPH - 0xD3C1: 0x8686, //CJK UNIFIED IDEOGRAPH - 0xD3C2: 0x868B, //CJK UNIFIED IDEOGRAPH - 0xD3C3: 0x869A, //CJK UNIFIED IDEOGRAPH - 0xD3C4: 0x8685, //CJK UNIFIED IDEOGRAPH - 0xD3C5: 0x86A5, //CJK UNIFIED IDEOGRAPH - 0xD3C6: 0x8699, //CJK UNIFIED IDEOGRAPH - 0xD3C7: 0x86A1, //CJK UNIFIED IDEOGRAPH - 0xD3C8: 0x86A7, //CJK UNIFIED IDEOGRAPH - 0xD3C9: 0x8695, //CJK UNIFIED IDEOGRAPH - 0xD3CA: 0x8698, //CJK UNIFIED IDEOGRAPH - 0xD3CB: 0x868E, //CJK UNIFIED IDEOGRAPH - 0xD3CC: 0x869D, //CJK UNIFIED IDEOGRAPH - 0xD3CD: 0x8690, //CJK UNIFIED IDEOGRAPH - 0xD3CE: 0x8694, //CJK UNIFIED IDEOGRAPH - 0xD3CF: 0x8843, //CJK UNIFIED IDEOGRAPH - 0xD3D0: 0x8844, //CJK UNIFIED IDEOGRAPH - 0xD3D1: 0x886D, //CJK UNIFIED IDEOGRAPH - 0xD3D2: 0x8875, //CJK UNIFIED IDEOGRAPH - 0xD3D3: 0x8876, //CJK UNIFIED IDEOGRAPH - 0xD3D4: 0x8872, //CJK UNIFIED IDEOGRAPH - 0xD3D5: 0x8880, //CJK UNIFIED IDEOGRAPH - 0xD3D6: 0x8871, //CJK UNIFIED IDEOGRAPH - 0xD3D7: 0x887F, //CJK UNIFIED IDEOGRAPH - 0xD3D8: 0x886F, //CJK UNIFIED IDEOGRAPH - 0xD3D9: 0x8883, //CJK UNIFIED IDEOGRAPH - 0xD3DA: 0x887E, //CJK UNIFIED IDEOGRAPH - 0xD3DB: 0x8874, //CJK UNIFIED IDEOGRAPH - 0xD3DC: 0x887C, //CJK UNIFIED IDEOGRAPH - 0xD3DD: 0x8A12, //CJK UNIFIED IDEOGRAPH - 0xD3DE: 0x8C47, //CJK UNIFIED IDEOGRAPH - 0xD3DF: 0x8C57, //CJK UNIFIED IDEOGRAPH - 0xD3E0: 0x8C7B, //CJK UNIFIED IDEOGRAPH - 0xD3E1: 0x8CA4, //CJK UNIFIED IDEOGRAPH - 0xD3E2: 0x8CA3, //CJK UNIFIED IDEOGRAPH - 0xD3E3: 0x8D76, //CJK UNIFIED IDEOGRAPH - 0xD3E4: 0x8D78, //CJK UNIFIED IDEOGRAPH - 0xD3E5: 0x8DB5, //CJK UNIFIED IDEOGRAPH - 0xD3E6: 0x8DB7, //CJK UNIFIED IDEOGRAPH - 0xD3E7: 0x8DB6, //CJK UNIFIED IDEOGRAPH - 0xD3E8: 0x8ED1, //CJK UNIFIED IDEOGRAPH - 0xD3E9: 0x8ED3, //CJK UNIFIED IDEOGRAPH - 0xD3EA: 0x8FFE, //CJK UNIFIED IDEOGRAPH - 0xD3EB: 0x8FF5, //CJK UNIFIED IDEOGRAPH - 0xD3EC: 0x9002, //CJK UNIFIED IDEOGRAPH - 0xD3ED: 0x8FFF, //CJK UNIFIED IDEOGRAPH - 0xD3EE: 0x8FFB, //CJK UNIFIED IDEOGRAPH - 0xD3EF: 0x9004, //CJK UNIFIED IDEOGRAPH - 0xD3F0: 0x8FFC, //CJK UNIFIED IDEOGRAPH - 0xD3F1: 0x8FF6, //CJK UNIFIED IDEOGRAPH - 0xD3F2: 0x90D6, //CJK UNIFIED IDEOGRAPH - 0xD3F3: 0x90E0, //CJK UNIFIED IDEOGRAPH - 0xD3F4: 0x90D9, //CJK UNIFIED IDEOGRAPH - 0xD3F5: 0x90DA, //CJK UNIFIED IDEOGRAPH - 0xD3F6: 0x90E3, //CJK UNIFIED IDEOGRAPH - 0xD3F7: 0x90DF, //CJK UNIFIED IDEOGRAPH - 0xD3F8: 0x90E5, //CJK UNIFIED IDEOGRAPH - 0xD3F9: 0x90D8, //CJK UNIFIED IDEOGRAPH - 0xD3FA: 0x90DB, //CJK UNIFIED IDEOGRAPH - 0xD3FB: 0x90D7, //CJK UNIFIED IDEOGRAPH - 0xD3FC: 0x90DC, //CJK UNIFIED IDEOGRAPH - 0xD3FD: 0x90E4, //CJK UNIFIED IDEOGRAPH - 0xD3FE: 0x9150, //CJK UNIFIED IDEOGRAPH - 0xD440: 0x914E, //CJK UNIFIED IDEOGRAPH - 0xD441: 0x914F, //CJK UNIFIED IDEOGRAPH - 0xD442: 0x91D5, //CJK UNIFIED IDEOGRAPH - 0xD443: 0x91E2, //CJK UNIFIED IDEOGRAPH - 0xD444: 0x91DA, //CJK UNIFIED IDEOGRAPH - 0xD445: 0x965C, //CJK UNIFIED IDEOGRAPH - 0xD446: 0x965F, //CJK UNIFIED IDEOGRAPH - 0xD447: 0x96BC, //CJK UNIFIED IDEOGRAPH - 0xD448: 0x98E3, //CJK UNIFIED IDEOGRAPH - 0xD449: 0x9ADF, //CJK UNIFIED IDEOGRAPH - 0xD44A: 0x9B2F, //CJK UNIFIED IDEOGRAPH - 0xD44B: 0x4E7F, //CJK UNIFIED IDEOGRAPH - 0xD44C: 0x5070, //CJK UNIFIED IDEOGRAPH - 0xD44D: 0x506A, //CJK UNIFIED IDEOGRAPH - 0xD44E: 0x5061, //CJK UNIFIED IDEOGRAPH - 0xD44F: 0x505E, //CJK UNIFIED IDEOGRAPH - 0xD450: 0x5060, //CJK UNIFIED IDEOGRAPH - 0xD451: 0x5053, //CJK UNIFIED IDEOGRAPH - 0xD452: 0x504B, //CJK UNIFIED IDEOGRAPH - 0xD453: 0x505D, //CJK UNIFIED IDEOGRAPH - 0xD454: 0x5072, //CJK UNIFIED IDEOGRAPH - 0xD455: 0x5048, //CJK UNIFIED IDEOGRAPH - 0xD456: 0x504D, //CJK UNIFIED IDEOGRAPH - 0xD457: 0x5041, //CJK UNIFIED IDEOGRAPH - 0xD458: 0x505B, //CJK UNIFIED IDEOGRAPH - 0xD459: 0x504A, //CJK UNIFIED IDEOGRAPH - 0xD45A: 0x5062, //CJK UNIFIED IDEOGRAPH - 0xD45B: 0x5015, //CJK UNIFIED IDEOGRAPH - 0xD45C: 0x5045, //CJK UNIFIED IDEOGRAPH - 0xD45D: 0x505F, //CJK UNIFIED IDEOGRAPH - 0xD45E: 0x5069, //CJK UNIFIED IDEOGRAPH - 0xD45F: 0x506B, //CJK UNIFIED IDEOGRAPH - 0xD460: 0x5063, //CJK UNIFIED IDEOGRAPH - 0xD461: 0x5064, //CJK UNIFIED IDEOGRAPH - 0xD462: 0x5046, //CJK UNIFIED IDEOGRAPH - 0xD463: 0x5040, //CJK UNIFIED IDEOGRAPH - 0xD464: 0x506E, //CJK UNIFIED IDEOGRAPH - 0xD465: 0x5073, //CJK UNIFIED IDEOGRAPH - 0xD466: 0x5057, //CJK UNIFIED IDEOGRAPH - 0xD467: 0x5051, //CJK UNIFIED IDEOGRAPH - 0xD468: 0x51D0, //CJK UNIFIED IDEOGRAPH - 0xD469: 0x526B, //CJK UNIFIED IDEOGRAPH - 0xD46A: 0x526D, //CJK UNIFIED IDEOGRAPH - 0xD46B: 0x526C, //CJK UNIFIED IDEOGRAPH - 0xD46C: 0x526E, //CJK UNIFIED IDEOGRAPH - 0xD46D: 0x52D6, //CJK UNIFIED IDEOGRAPH - 0xD46E: 0x52D3, //CJK UNIFIED IDEOGRAPH - 0xD46F: 0x532D, //CJK UNIFIED IDEOGRAPH - 0xD470: 0x539C, //CJK UNIFIED IDEOGRAPH - 0xD471: 0x5575, //CJK UNIFIED IDEOGRAPH - 0xD472: 0x5576, //CJK UNIFIED IDEOGRAPH - 0xD473: 0x553C, //CJK UNIFIED IDEOGRAPH - 0xD474: 0x554D, //CJK UNIFIED IDEOGRAPH - 0xD475: 0x5550, //CJK UNIFIED IDEOGRAPH - 0xD476: 0x5534, //CJK UNIFIED IDEOGRAPH - 0xD477: 0x552A, //CJK UNIFIED IDEOGRAPH - 0xD478: 0x5551, //CJK UNIFIED IDEOGRAPH - 0xD479: 0x5562, //CJK UNIFIED IDEOGRAPH - 0xD47A: 0x5536, //CJK UNIFIED IDEOGRAPH - 0xD47B: 0x5535, //CJK UNIFIED IDEOGRAPH - 0xD47C: 0x5530, //CJK UNIFIED IDEOGRAPH - 0xD47D: 0x5552, //CJK UNIFIED IDEOGRAPH - 0xD47E: 0x5545, //CJK UNIFIED IDEOGRAPH - 0xD4A1: 0x550C, //CJK UNIFIED IDEOGRAPH - 0xD4A2: 0x5532, //CJK UNIFIED IDEOGRAPH - 0xD4A3: 0x5565, //CJK UNIFIED IDEOGRAPH - 0xD4A4: 0x554E, //CJK UNIFIED IDEOGRAPH - 0xD4A5: 0x5539, //CJK UNIFIED IDEOGRAPH - 0xD4A6: 0x5548, //CJK UNIFIED IDEOGRAPH - 0xD4A7: 0x552D, //CJK UNIFIED IDEOGRAPH - 0xD4A8: 0x553B, //CJK UNIFIED IDEOGRAPH - 0xD4A9: 0x5540, //CJK UNIFIED IDEOGRAPH - 0xD4AA: 0x554B, //CJK UNIFIED IDEOGRAPH - 0xD4AB: 0x570A, //CJK UNIFIED IDEOGRAPH - 0xD4AC: 0x5707, //CJK UNIFIED IDEOGRAPH - 0xD4AD: 0x57FB, //CJK UNIFIED IDEOGRAPH - 0xD4AE: 0x5814, //CJK UNIFIED IDEOGRAPH - 0xD4AF: 0x57E2, //CJK UNIFIED IDEOGRAPH - 0xD4B0: 0x57F6, //CJK UNIFIED IDEOGRAPH - 0xD4B1: 0x57DC, //CJK UNIFIED IDEOGRAPH - 0xD4B2: 0x57F4, //CJK UNIFIED IDEOGRAPH - 0xD4B3: 0x5800, //CJK UNIFIED IDEOGRAPH - 0xD4B4: 0x57ED, //CJK UNIFIED IDEOGRAPH - 0xD4B5: 0x57FD, //CJK UNIFIED IDEOGRAPH - 0xD4B6: 0x5808, //CJK UNIFIED IDEOGRAPH - 0xD4B7: 0x57F8, //CJK UNIFIED IDEOGRAPH - 0xD4B8: 0x580B, //CJK UNIFIED IDEOGRAPH - 0xD4B9: 0x57F3, //CJK UNIFIED IDEOGRAPH - 0xD4BA: 0x57CF, //CJK UNIFIED IDEOGRAPH - 0xD4BB: 0x5807, //CJK UNIFIED IDEOGRAPH - 0xD4BC: 0x57EE, //CJK UNIFIED IDEOGRAPH - 0xD4BD: 0x57E3, //CJK UNIFIED IDEOGRAPH - 0xD4BE: 0x57F2, //CJK UNIFIED IDEOGRAPH - 0xD4BF: 0x57E5, //CJK UNIFIED IDEOGRAPH - 0xD4C0: 0x57EC, //CJK UNIFIED IDEOGRAPH - 0xD4C1: 0x57E1, //CJK UNIFIED IDEOGRAPH - 0xD4C2: 0x580E, //CJK UNIFIED IDEOGRAPH - 0xD4C3: 0x57FC, //CJK UNIFIED IDEOGRAPH - 0xD4C4: 0x5810, //CJK UNIFIED IDEOGRAPH - 0xD4C5: 0x57E7, //CJK UNIFIED IDEOGRAPH - 0xD4C6: 0x5801, //CJK UNIFIED IDEOGRAPH - 0xD4C7: 0x580C, //CJK UNIFIED IDEOGRAPH - 0xD4C8: 0x57F1, //CJK UNIFIED IDEOGRAPH - 0xD4C9: 0x57E9, //CJK UNIFIED IDEOGRAPH - 0xD4CA: 0x57F0, //CJK UNIFIED IDEOGRAPH - 0xD4CB: 0x580D, //CJK UNIFIED IDEOGRAPH - 0xD4CC: 0x5804, //CJK UNIFIED IDEOGRAPH - 0xD4CD: 0x595C, //CJK UNIFIED IDEOGRAPH - 0xD4CE: 0x5A60, //CJK UNIFIED IDEOGRAPH - 0xD4CF: 0x5A58, //CJK UNIFIED IDEOGRAPH - 0xD4D0: 0x5A55, //CJK UNIFIED IDEOGRAPH - 0xD4D1: 0x5A67, //CJK UNIFIED IDEOGRAPH - 0xD4D2: 0x5A5E, //CJK UNIFIED IDEOGRAPH - 0xD4D3: 0x5A38, //CJK UNIFIED IDEOGRAPH - 0xD4D4: 0x5A35, //CJK UNIFIED IDEOGRAPH - 0xD4D5: 0x5A6D, //CJK UNIFIED IDEOGRAPH - 0xD4D6: 0x5A50, //CJK UNIFIED IDEOGRAPH - 0xD4D7: 0x5A5F, //CJK UNIFIED IDEOGRAPH - 0xD4D8: 0x5A65, //CJK UNIFIED IDEOGRAPH - 0xD4D9: 0x5A6C, //CJK UNIFIED IDEOGRAPH - 0xD4DA: 0x5A53, //CJK UNIFIED IDEOGRAPH - 0xD4DB: 0x5A64, //CJK UNIFIED IDEOGRAPH - 0xD4DC: 0x5A57, //CJK UNIFIED IDEOGRAPH - 0xD4DD: 0x5A43, //CJK UNIFIED IDEOGRAPH - 0xD4DE: 0x5A5D, //CJK UNIFIED IDEOGRAPH - 0xD4DF: 0x5A52, //CJK UNIFIED IDEOGRAPH - 0xD4E0: 0x5A44, //CJK UNIFIED IDEOGRAPH - 0xD4E1: 0x5A5B, //CJK UNIFIED IDEOGRAPH - 0xD4E2: 0x5A48, //CJK UNIFIED IDEOGRAPH - 0xD4E3: 0x5A8E, //CJK UNIFIED IDEOGRAPH - 0xD4E4: 0x5A3E, //CJK UNIFIED IDEOGRAPH - 0xD4E5: 0x5A4D, //CJK UNIFIED IDEOGRAPH - 0xD4E6: 0x5A39, //CJK UNIFIED IDEOGRAPH - 0xD4E7: 0x5A4C, //CJK UNIFIED IDEOGRAPH - 0xD4E8: 0x5A70, //CJK UNIFIED IDEOGRAPH - 0xD4E9: 0x5A69, //CJK UNIFIED IDEOGRAPH - 0xD4EA: 0x5A47, //CJK UNIFIED IDEOGRAPH - 0xD4EB: 0x5A51, //CJK UNIFIED IDEOGRAPH - 0xD4EC: 0x5A56, //CJK UNIFIED IDEOGRAPH - 0xD4ED: 0x5A42, //CJK UNIFIED IDEOGRAPH - 0xD4EE: 0x5A5C, //CJK UNIFIED IDEOGRAPH - 0xD4EF: 0x5B72, //CJK UNIFIED IDEOGRAPH - 0xD4F0: 0x5B6E, //CJK UNIFIED IDEOGRAPH - 0xD4F1: 0x5BC1, //CJK UNIFIED IDEOGRAPH - 0xD4F2: 0x5BC0, //CJK UNIFIED IDEOGRAPH - 0xD4F3: 0x5C59, //CJK UNIFIED IDEOGRAPH - 0xD4F4: 0x5D1E, //CJK UNIFIED IDEOGRAPH - 0xD4F5: 0x5D0B, //CJK UNIFIED IDEOGRAPH - 0xD4F6: 0x5D1D, //CJK UNIFIED IDEOGRAPH - 0xD4F7: 0x5D1A, //CJK UNIFIED IDEOGRAPH - 0xD4F8: 0x5D20, //CJK UNIFIED IDEOGRAPH - 0xD4F9: 0x5D0C, //CJK UNIFIED IDEOGRAPH - 0xD4FA: 0x5D28, //CJK UNIFIED IDEOGRAPH - 0xD4FB: 0x5D0D, //CJK UNIFIED IDEOGRAPH - 0xD4FC: 0x5D26, //CJK UNIFIED IDEOGRAPH - 0xD4FD: 0x5D25, //CJK UNIFIED IDEOGRAPH - 0xD4FE: 0x5D0F, //CJK UNIFIED IDEOGRAPH - 0xD540: 0x5D30, //CJK UNIFIED IDEOGRAPH - 0xD541: 0x5D12, //CJK UNIFIED IDEOGRAPH - 0xD542: 0x5D23, //CJK UNIFIED IDEOGRAPH - 0xD543: 0x5D1F, //CJK UNIFIED IDEOGRAPH - 0xD544: 0x5D2E, //CJK UNIFIED IDEOGRAPH - 0xD545: 0x5E3E, //CJK UNIFIED IDEOGRAPH - 0xD546: 0x5E34, //CJK UNIFIED IDEOGRAPH - 0xD547: 0x5EB1, //CJK UNIFIED IDEOGRAPH - 0xD548: 0x5EB4, //CJK UNIFIED IDEOGRAPH - 0xD549: 0x5EB9, //CJK UNIFIED IDEOGRAPH - 0xD54A: 0x5EB2, //CJK UNIFIED IDEOGRAPH - 0xD54B: 0x5EB3, //CJK UNIFIED IDEOGRAPH - 0xD54C: 0x5F36, //CJK UNIFIED IDEOGRAPH - 0xD54D: 0x5F38, //CJK UNIFIED IDEOGRAPH - 0xD54E: 0x5F9B, //CJK UNIFIED IDEOGRAPH - 0xD54F: 0x5F96, //CJK UNIFIED IDEOGRAPH - 0xD550: 0x5F9F, //CJK UNIFIED IDEOGRAPH - 0xD551: 0x608A, //CJK UNIFIED IDEOGRAPH - 0xD552: 0x6090, //CJK UNIFIED IDEOGRAPH - 0xD553: 0x6086, //CJK UNIFIED IDEOGRAPH - 0xD554: 0x60BE, //CJK UNIFIED IDEOGRAPH - 0xD555: 0x60B0, //CJK UNIFIED IDEOGRAPH - 0xD556: 0x60BA, //CJK UNIFIED IDEOGRAPH - 0xD557: 0x60D3, //CJK UNIFIED IDEOGRAPH - 0xD558: 0x60D4, //CJK UNIFIED IDEOGRAPH - 0xD559: 0x60CF, //CJK UNIFIED IDEOGRAPH - 0xD55A: 0x60E4, //CJK UNIFIED IDEOGRAPH - 0xD55B: 0x60D9, //CJK UNIFIED IDEOGRAPH - 0xD55C: 0x60DD, //CJK UNIFIED IDEOGRAPH - 0xD55D: 0x60C8, //CJK UNIFIED IDEOGRAPH - 0xD55E: 0x60B1, //CJK UNIFIED IDEOGRAPH - 0xD55F: 0x60DB, //CJK UNIFIED IDEOGRAPH - 0xD560: 0x60B7, //CJK UNIFIED IDEOGRAPH - 0xD561: 0x60CA, //CJK UNIFIED IDEOGRAPH - 0xD562: 0x60BF, //CJK UNIFIED IDEOGRAPH - 0xD563: 0x60C3, //CJK UNIFIED IDEOGRAPH - 0xD564: 0x60CD, //CJK UNIFIED IDEOGRAPH - 0xD565: 0x60C0, //CJK UNIFIED IDEOGRAPH - 0xD566: 0x6332, //CJK UNIFIED IDEOGRAPH - 0xD567: 0x6365, //CJK UNIFIED IDEOGRAPH - 0xD568: 0x638A, //CJK UNIFIED IDEOGRAPH - 0xD569: 0x6382, //CJK UNIFIED IDEOGRAPH - 0xD56A: 0x637D, //CJK UNIFIED IDEOGRAPH - 0xD56B: 0x63BD, //CJK UNIFIED IDEOGRAPH - 0xD56C: 0x639E, //CJK UNIFIED IDEOGRAPH - 0xD56D: 0x63AD, //CJK UNIFIED IDEOGRAPH - 0xD56E: 0x639D, //CJK UNIFIED IDEOGRAPH - 0xD56F: 0x6397, //CJK UNIFIED IDEOGRAPH - 0xD570: 0x63AB, //CJK UNIFIED IDEOGRAPH - 0xD571: 0x638E, //CJK UNIFIED IDEOGRAPH - 0xD572: 0x636F, //CJK UNIFIED IDEOGRAPH - 0xD573: 0x6387, //CJK UNIFIED IDEOGRAPH - 0xD574: 0x6390, //CJK UNIFIED IDEOGRAPH - 0xD575: 0x636E, //CJK UNIFIED IDEOGRAPH - 0xD576: 0x63AF, //CJK UNIFIED IDEOGRAPH - 0xD577: 0x6375, //CJK UNIFIED IDEOGRAPH - 0xD578: 0x639C, //CJK UNIFIED IDEOGRAPH - 0xD579: 0x636D, //CJK UNIFIED IDEOGRAPH - 0xD57A: 0x63AE, //CJK UNIFIED IDEOGRAPH - 0xD57B: 0x637C, //CJK UNIFIED IDEOGRAPH - 0xD57C: 0x63A4, //CJK UNIFIED IDEOGRAPH - 0xD57D: 0x633B, //CJK UNIFIED IDEOGRAPH - 0xD57E: 0x639F, //CJK UNIFIED IDEOGRAPH - 0xD5A1: 0x6378, //CJK UNIFIED IDEOGRAPH - 0xD5A2: 0x6385, //CJK UNIFIED IDEOGRAPH - 0xD5A3: 0x6381, //CJK UNIFIED IDEOGRAPH - 0xD5A4: 0x6391, //CJK UNIFIED IDEOGRAPH - 0xD5A5: 0x638D, //CJK UNIFIED IDEOGRAPH - 0xD5A6: 0x6370, //CJK UNIFIED IDEOGRAPH - 0xD5A7: 0x6553, //CJK UNIFIED IDEOGRAPH - 0xD5A8: 0x65CD, //CJK UNIFIED IDEOGRAPH - 0xD5A9: 0x6665, //CJK UNIFIED IDEOGRAPH - 0xD5AA: 0x6661, //CJK UNIFIED IDEOGRAPH - 0xD5AB: 0x665B, //CJK UNIFIED IDEOGRAPH - 0xD5AC: 0x6659, //CJK UNIFIED IDEOGRAPH - 0xD5AD: 0x665C, //CJK UNIFIED IDEOGRAPH - 0xD5AE: 0x6662, //CJK UNIFIED IDEOGRAPH - 0xD5AF: 0x6718, //CJK UNIFIED IDEOGRAPH - 0xD5B0: 0x6879, //CJK UNIFIED IDEOGRAPH - 0xD5B1: 0x6887, //CJK UNIFIED IDEOGRAPH - 0xD5B2: 0x6890, //CJK UNIFIED IDEOGRAPH - 0xD5B3: 0x689C, //CJK UNIFIED IDEOGRAPH - 0xD5B4: 0x686D, //CJK UNIFIED IDEOGRAPH - 0xD5B5: 0x686E, //CJK UNIFIED IDEOGRAPH - 0xD5B6: 0x68AE, //CJK UNIFIED IDEOGRAPH - 0xD5B7: 0x68AB, //CJK UNIFIED IDEOGRAPH - 0xD5B8: 0x6956, //CJK UNIFIED IDEOGRAPH - 0xD5B9: 0x686F, //CJK UNIFIED IDEOGRAPH - 0xD5BA: 0x68A3, //CJK UNIFIED IDEOGRAPH - 0xD5BB: 0x68AC, //CJK UNIFIED IDEOGRAPH - 0xD5BC: 0x68A9, //CJK UNIFIED IDEOGRAPH - 0xD5BD: 0x6875, //CJK UNIFIED IDEOGRAPH - 0xD5BE: 0x6874, //CJK UNIFIED IDEOGRAPH - 0xD5BF: 0x68B2, //CJK UNIFIED IDEOGRAPH - 0xD5C0: 0x688F, //CJK UNIFIED IDEOGRAPH - 0xD5C1: 0x6877, //CJK UNIFIED IDEOGRAPH - 0xD5C2: 0x6892, //CJK UNIFIED IDEOGRAPH - 0xD5C3: 0x687C, //CJK UNIFIED IDEOGRAPH - 0xD5C4: 0x686B, //CJK UNIFIED IDEOGRAPH - 0xD5C5: 0x6872, //CJK UNIFIED IDEOGRAPH - 0xD5C6: 0x68AA, //CJK UNIFIED IDEOGRAPH - 0xD5C7: 0x6880, //CJK UNIFIED IDEOGRAPH - 0xD5C8: 0x6871, //CJK UNIFIED IDEOGRAPH - 0xD5C9: 0x687E, //CJK UNIFIED IDEOGRAPH - 0xD5CA: 0x689B, //CJK UNIFIED IDEOGRAPH - 0xD5CB: 0x6896, //CJK UNIFIED IDEOGRAPH - 0xD5CC: 0x688B, //CJK UNIFIED IDEOGRAPH - 0xD5CD: 0x68A0, //CJK UNIFIED IDEOGRAPH - 0xD5CE: 0x6889, //CJK UNIFIED IDEOGRAPH - 0xD5CF: 0x68A4, //CJK UNIFIED IDEOGRAPH - 0xD5D0: 0x6878, //CJK UNIFIED IDEOGRAPH - 0xD5D1: 0x687B, //CJK UNIFIED IDEOGRAPH - 0xD5D2: 0x6891, //CJK UNIFIED IDEOGRAPH - 0xD5D3: 0x688C, //CJK UNIFIED IDEOGRAPH - 0xD5D4: 0x688A, //CJK UNIFIED IDEOGRAPH - 0xD5D5: 0x687D, //CJK UNIFIED IDEOGRAPH - 0xD5D6: 0x6B36, //CJK UNIFIED IDEOGRAPH - 0xD5D7: 0x6B33, //CJK UNIFIED IDEOGRAPH - 0xD5D8: 0x6B37, //CJK UNIFIED IDEOGRAPH - 0xD5D9: 0x6B38, //CJK UNIFIED IDEOGRAPH - 0xD5DA: 0x6B91, //CJK UNIFIED IDEOGRAPH - 0xD5DB: 0x6B8F, //CJK UNIFIED IDEOGRAPH - 0xD5DC: 0x6B8D, //CJK UNIFIED IDEOGRAPH - 0xD5DD: 0x6B8E, //CJK UNIFIED IDEOGRAPH - 0xD5DE: 0x6B8C, //CJK UNIFIED IDEOGRAPH - 0xD5DF: 0x6C2A, //CJK UNIFIED IDEOGRAPH - 0xD5E0: 0x6DC0, //CJK UNIFIED IDEOGRAPH - 0xD5E1: 0x6DAB, //CJK UNIFIED IDEOGRAPH - 0xD5E2: 0x6DB4, //CJK UNIFIED IDEOGRAPH - 0xD5E3: 0x6DB3, //CJK UNIFIED IDEOGRAPH - 0xD5E4: 0x6E74, //CJK UNIFIED IDEOGRAPH - 0xD5E5: 0x6DAC, //CJK UNIFIED IDEOGRAPH - 0xD5E6: 0x6DE9, //CJK UNIFIED IDEOGRAPH - 0xD5E7: 0x6DE2, //CJK UNIFIED IDEOGRAPH - 0xD5E8: 0x6DB7, //CJK UNIFIED IDEOGRAPH - 0xD5E9: 0x6DF6, //CJK UNIFIED IDEOGRAPH - 0xD5EA: 0x6DD4, //CJK UNIFIED IDEOGRAPH - 0xD5EB: 0x6E00, //CJK UNIFIED IDEOGRAPH - 0xD5EC: 0x6DC8, //CJK UNIFIED IDEOGRAPH - 0xD5ED: 0x6DE0, //CJK UNIFIED IDEOGRAPH - 0xD5EE: 0x6DDF, //CJK UNIFIED IDEOGRAPH - 0xD5EF: 0x6DD6, //CJK UNIFIED IDEOGRAPH - 0xD5F0: 0x6DBE, //CJK UNIFIED IDEOGRAPH - 0xD5F1: 0x6DE5, //CJK UNIFIED IDEOGRAPH - 0xD5F2: 0x6DDC, //CJK UNIFIED IDEOGRAPH - 0xD5F3: 0x6DDD, //CJK UNIFIED IDEOGRAPH - 0xD5F4: 0x6DDB, //CJK UNIFIED IDEOGRAPH - 0xD5F5: 0x6DF4, //CJK UNIFIED IDEOGRAPH - 0xD5F6: 0x6DCA, //CJK UNIFIED IDEOGRAPH - 0xD5F7: 0x6DBD, //CJK UNIFIED IDEOGRAPH - 0xD5F8: 0x6DED, //CJK UNIFIED IDEOGRAPH - 0xD5F9: 0x6DF0, //CJK UNIFIED IDEOGRAPH - 0xD5FA: 0x6DBA, //CJK UNIFIED IDEOGRAPH - 0xD5FB: 0x6DD5, //CJK UNIFIED IDEOGRAPH - 0xD5FC: 0x6DC2, //CJK UNIFIED IDEOGRAPH - 0xD5FD: 0x6DCF, //CJK UNIFIED IDEOGRAPH - 0xD5FE: 0x6DC9, //CJK UNIFIED IDEOGRAPH - 0xD640: 0x6DD0, //CJK UNIFIED IDEOGRAPH - 0xD641: 0x6DF2, //CJK UNIFIED IDEOGRAPH - 0xD642: 0x6DD3, //CJK UNIFIED IDEOGRAPH - 0xD643: 0x6DFD, //CJK UNIFIED IDEOGRAPH - 0xD644: 0x6DD7, //CJK UNIFIED IDEOGRAPH - 0xD645: 0x6DCD, //CJK UNIFIED IDEOGRAPH - 0xD646: 0x6DE3, //CJK UNIFIED IDEOGRAPH - 0xD647: 0x6DBB, //CJK UNIFIED IDEOGRAPH - 0xD648: 0x70FA, //CJK UNIFIED IDEOGRAPH - 0xD649: 0x710D, //CJK UNIFIED IDEOGRAPH - 0xD64A: 0x70F7, //CJK UNIFIED IDEOGRAPH - 0xD64B: 0x7117, //CJK UNIFIED IDEOGRAPH - 0xD64C: 0x70F4, //CJK UNIFIED IDEOGRAPH - 0xD64D: 0x710C, //CJK UNIFIED IDEOGRAPH - 0xD64E: 0x70F0, //CJK UNIFIED IDEOGRAPH - 0xD64F: 0x7104, //CJK UNIFIED IDEOGRAPH - 0xD650: 0x70F3, //CJK UNIFIED IDEOGRAPH - 0xD651: 0x7110, //CJK UNIFIED IDEOGRAPH - 0xD652: 0x70FC, //CJK UNIFIED IDEOGRAPH - 0xD653: 0x70FF, //CJK UNIFIED IDEOGRAPH - 0xD654: 0x7106, //CJK UNIFIED IDEOGRAPH - 0xD655: 0x7113, //CJK UNIFIED IDEOGRAPH - 0xD656: 0x7100, //CJK UNIFIED IDEOGRAPH - 0xD657: 0x70F8, //CJK UNIFIED IDEOGRAPH - 0xD658: 0x70F6, //CJK UNIFIED IDEOGRAPH - 0xD659: 0x710B, //CJK UNIFIED IDEOGRAPH - 0xD65A: 0x7102, //CJK UNIFIED IDEOGRAPH - 0xD65B: 0x710E, //CJK UNIFIED IDEOGRAPH - 0xD65C: 0x727E, //CJK UNIFIED IDEOGRAPH - 0xD65D: 0x727B, //CJK UNIFIED IDEOGRAPH - 0xD65E: 0x727C, //CJK UNIFIED IDEOGRAPH - 0xD65F: 0x727F, //CJK UNIFIED IDEOGRAPH - 0xD660: 0x731D, //CJK UNIFIED IDEOGRAPH - 0xD661: 0x7317, //CJK UNIFIED IDEOGRAPH - 0xD662: 0x7307, //CJK UNIFIED IDEOGRAPH - 0xD663: 0x7311, //CJK UNIFIED IDEOGRAPH - 0xD664: 0x7318, //CJK UNIFIED IDEOGRAPH - 0xD665: 0x730A, //CJK UNIFIED IDEOGRAPH - 0xD666: 0x7308, //CJK UNIFIED IDEOGRAPH - 0xD667: 0x72FF, //CJK UNIFIED IDEOGRAPH - 0xD668: 0x730F, //CJK UNIFIED IDEOGRAPH - 0xD669: 0x731E, //CJK UNIFIED IDEOGRAPH - 0xD66A: 0x7388, //CJK UNIFIED IDEOGRAPH - 0xD66B: 0x73F6, //CJK UNIFIED IDEOGRAPH - 0xD66C: 0x73F8, //CJK UNIFIED IDEOGRAPH - 0xD66D: 0x73F5, //CJK UNIFIED IDEOGRAPH - 0xD66E: 0x7404, //CJK UNIFIED IDEOGRAPH - 0xD66F: 0x7401, //CJK UNIFIED IDEOGRAPH - 0xD670: 0x73FD, //CJK UNIFIED IDEOGRAPH - 0xD671: 0x7407, //CJK UNIFIED IDEOGRAPH - 0xD672: 0x7400, //CJK UNIFIED IDEOGRAPH - 0xD673: 0x73FA, //CJK UNIFIED IDEOGRAPH - 0xD674: 0x73FC, //CJK UNIFIED IDEOGRAPH - 0xD675: 0x73FF, //CJK UNIFIED IDEOGRAPH - 0xD676: 0x740C, //CJK UNIFIED IDEOGRAPH - 0xD677: 0x740B, //CJK UNIFIED IDEOGRAPH - 0xD678: 0x73F4, //CJK UNIFIED IDEOGRAPH - 0xD679: 0x7408, //CJK UNIFIED IDEOGRAPH - 0xD67A: 0x7564, //CJK UNIFIED IDEOGRAPH - 0xD67B: 0x7563, //CJK UNIFIED IDEOGRAPH - 0xD67C: 0x75CE, //CJK UNIFIED IDEOGRAPH - 0xD67D: 0x75D2, //CJK UNIFIED IDEOGRAPH - 0xD67E: 0x75CF, //CJK UNIFIED IDEOGRAPH - 0xD6A1: 0x75CB, //CJK UNIFIED IDEOGRAPH - 0xD6A2: 0x75CC, //CJK UNIFIED IDEOGRAPH - 0xD6A3: 0x75D1, //CJK UNIFIED IDEOGRAPH - 0xD6A4: 0x75D0, //CJK UNIFIED IDEOGRAPH - 0xD6A5: 0x768F, //CJK UNIFIED IDEOGRAPH - 0xD6A6: 0x7689, //CJK UNIFIED IDEOGRAPH - 0xD6A7: 0x76D3, //CJK UNIFIED IDEOGRAPH - 0xD6A8: 0x7739, //CJK UNIFIED IDEOGRAPH - 0xD6A9: 0x772F, //CJK UNIFIED IDEOGRAPH - 0xD6AA: 0x772D, //CJK UNIFIED IDEOGRAPH - 0xD6AB: 0x7731, //CJK UNIFIED IDEOGRAPH - 0xD6AC: 0x7732, //CJK UNIFIED IDEOGRAPH - 0xD6AD: 0x7734, //CJK UNIFIED IDEOGRAPH - 0xD6AE: 0x7733, //CJK UNIFIED IDEOGRAPH - 0xD6AF: 0x773D, //CJK UNIFIED IDEOGRAPH - 0xD6B0: 0x7725, //CJK UNIFIED IDEOGRAPH - 0xD6B1: 0x773B, //CJK UNIFIED IDEOGRAPH - 0xD6B2: 0x7735, //CJK UNIFIED IDEOGRAPH - 0xD6B3: 0x7848, //CJK UNIFIED IDEOGRAPH - 0xD6B4: 0x7852, //CJK UNIFIED IDEOGRAPH - 0xD6B5: 0x7849, //CJK UNIFIED IDEOGRAPH - 0xD6B6: 0x784D, //CJK UNIFIED IDEOGRAPH - 0xD6B7: 0x784A, //CJK UNIFIED IDEOGRAPH - 0xD6B8: 0x784C, //CJK UNIFIED IDEOGRAPH - 0xD6B9: 0x7826, //CJK UNIFIED IDEOGRAPH - 0xD6BA: 0x7845, //CJK UNIFIED IDEOGRAPH - 0xD6BB: 0x7850, //CJK UNIFIED IDEOGRAPH - 0xD6BC: 0x7964, //CJK UNIFIED IDEOGRAPH - 0xD6BD: 0x7967, //CJK UNIFIED IDEOGRAPH - 0xD6BE: 0x7969, //CJK UNIFIED IDEOGRAPH - 0xD6BF: 0x796A, //CJK UNIFIED IDEOGRAPH - 0xD6C0: 0x7963, //CJK UNIFIED IDEOGRAPH - 0xD6C1: 0x796B, //CJK UNIFIED IDEOGRAPH - 0xD6C2: 0x7961, //CJK UNIFIED IDEOGRAPH - 0xD6C3: 0x79BB, //CJK UNIFIED IDEOGRAPH - 0xD6C4: 0x79FA, //CJK UNIFIED IDEOGRAPH - 0xD6C5: 0x79F8, //CJK UNIFIED IDEOGRAPH - 0xD6C6: 0x79F6, //CJK UNIFIED IDEOGRAPH - 0xD6C7: 0x79F7, //CJK UNIFIED IDEOGRAPH - 0xD6C8: 0x7A8F, //CJK UNIFIED IDEOGRAPH - 0xD6C9: 0x7A94, //CJK UNIFIED IDEOGRAPH - 0xD6CA: 0x7A90, //CJK UNIFIED IDEOGRAPH - 0xD6CB: 0x7B35, //CJK UNIFIED IDEOGRAPH - 0xD6CC: 0x7B47, //CJK UNIFIED IDEOGRAPH - 0xD6CD: 0x7B34, //CJK UNIFIED IDEOGRAPH - 0xD6CE: 0x7B25, //CJK UNIFIED IDEOGRAPH - 0xD6CF: 0x7B30, //CJK UNIFIED IDEOGRAPH - 0xD6D0: 0x7B22, //CJK UNIFIED IDEOGRAPH - 0xD6D1: 0x7B24, //CJK UNIFIED IDEOGRAPH - 0xD6D2: 0x7B33, //CJK UNIFIED IDEOGRAPH - 0xD6D3: 0x7B18, //CJK UNIFIED IDEOGRAPH - 0xD6D4: 0x7B2A, //CJK UNIFIED IDEOGRAPH - 0xD6D5: 0x7B1D, //CJK UNIFIED IDEOGRAPH - 0xD6D6: 0x7B31, //CJK UNIFIED IDEOGRAPH - 0xD6D7: 0x7B2B, //CJK UNIFIED IDEOGRAPH - 0xD6D8: 0x7B2D, //CJK UNIFIED IDEOGRAPH - 0xD6D9: 0x7B2F, //CJK UNIFIED IDEOGRAPH - 0xD6DA: 0x7B32, //CJK UNIFIED IDEOGRAPH - 0xD6DB: 0x7B38, //CJK UNIFIED IDEOGRAPH - 0xD6DC: 0x7B1A, //CJK UNIFIED IDEOGRAPH - 0xD6DD: 0x7B23, //CJK UNIFIED IDEOGRAPH - 0xD6DE: 0x7C94, //CJK UNIFIED IDEOGRAPH - 0xD6DF: 0x7C98, //CJK UNIFIED IDEOGRAPH - 0xD6E0: 0x7C96, //CJK UNIFIED IDEOGRAPH - 0xD6E1: 0x7CA3, //CJK UNIFIED IDEOGRAPH - 0xD6E2: 0x7D35, //CJK UNIFIED IDEOGRAPH - 0xD6E3: 0x7D3D, //CJK UNIFIED IDEOGRAPH - 0xD6E4: 0x7D38, //CJK UNIFIED IDEOGRAPH - 0xD6E5: 0x7D36, //CJK UNIFIED IDEOGRAPH - 0xD6E6: 0x7D3A, //CJK UNIFIED IDEOGRAPH - 0xD6E7: 0x7D45, //CJK UNIFIED IDEOGRAPH - 0xD6E8: 0x7D2C, //CJK UNIFIED IDEOGRAPH - 0xD6E9: 0x7D29, //CJK UNIFIED IDEOGRAPH - 0xD6EA: 0x7D41, //CJK UNIFIED IDEOGRAPH - 0xD6EB: 0x7D47, //CJK UNIFIED IDEOGRAPH - 0xD6EC: 0x7D3E, //CJK UNIFIED IDEOGRAPH - 0xD6ED: 0x7D3F, //CJK UNIFIED IDEOGRAPH - 0xD6EE: 0x7D4A, //CJK UNIFIED IDEOGRAPH - 0xD6EF: 0x7D3B, //CJK UNIFIED IDEOGRAPH - 0xD6F0: 0x7D28, //CJK UNIFIED IDEOGRAPH - 0xD6F1: 0x7F63, //CJK UNIFIED IDEOGRAPH - 0xD6F2: 0x7F95, //CJK UNIFIED IDEOGRAPH - 0xD6F3: 0x7F9C, //CJK UNIFIED IDEOGRAPH - 0xD6F4: 0x7F9D, //CJK UNIFIED IDEOGRAPH - 0xD6F5: 0x7F9B, //CJK UNIFIED IDEOGRAPH - 0xD6F6: 0x7FCA, //CJK UNIFIED IDEOGRAPH - 0xD6F7: 0x7FCB, //CJK UNIFIED IDEOGRAPH - 0xD6F8: 0x7FCD, //CJK UNIFIED IDEOGRAPH - 0xD6F9: 0x7FD0, //CJK UNIFIED IDEOGRAPH - 0xD6FA: 0x7FD1, //CJK UNIFIED IDEOGRAPH - 0xD6FB: 0x7FC7, //CJK UNIFIED IDEOGRAPH - 0xD6FC: 0x7FCF, //CJK UNIFIED IDEOGRAPH - 0xD6FD: 0x7FC9, //CJK UNIFIED IDEOGRAPH - 0xD6FE: 0x801F, //CJK UNIFIED IDEOGRAPH - 0xD740: 0x801E, //CJK UNIFIED IDEOGRAPH - 0xD741: 0x801B, //CJK UNIFIED IDEOGRAPH - 0xD742: 0x8047, //CJK UNIFIED IDEOGRAPH - 0xD743: 0x8043, //CJK UNIFIED IDEOGRAPH - 0xD744: 0x8048, //CJK UNIFIED IDEOGRAPH - 0xD745: 0x8118, //CJK UNIFIED IDEOGRAPH - 0xD746: 0x8125, //CJK UNIFIED IDEOGRAPH - 0xD747: 0x8119, //CJK UNIFIED IDEOGRAPH - 0xD748: 0x811B, //CJK UNIFIED IDEOGRAPH - 0xD749: 0x812D, //CJK UNIFIED IDEOGRAPH - 0xD74A: 0x811F, //CJK UNIFIED IDEOGRAPH - 0xD74B: 0x812C, //CJK UNIFIED IDEOGRAPH - 0xD74C: 0x811E, //CJK UNIFIED IDEOGRAPH - 0xD74D: 0x8121, //CJK UNIFIED IDEOGRAPH - 0xD74E: 0x8115, //CJK UNIFIED IDEOGRAPH - 0xD74F: 0x8127, //CJK UNIFIED IDEOGRAPH - 0xD750: 0x811D, //CJK UNIFIED IDEOGRAPH - 0xD751: 0x8122, //CJK UNIFIED IDEOGRAPH - 0xD752: 0x8211, //CJK UNIFIED IDEOGRAPH - 0xD753: 0x8238, //CJK UNIFIED IDEOGRAPH - 0xD754: 0x8233, //CJK UNIFIED IDEOGRAPH - 0xD755: 0x823A, //CJK UNIFIED IDEOGRAPH - 0xD756: 0x8234, //CJK UNIFIED IDEOGRAPH - 0xD757: 0x8232, //CJK UNIFIED IDEOGRAPH - 0xD758: 0x8274, //CJK UNIFIED IDEOGRAPH - 0xD759: 0x8390, //CJK UNIFIED IDEOGRAPH - 0xD75A: 0x83A3, //CJK UNIFIED IDEOGRAPH - 0xD75B: 0x83A8, //CJK UNIFIED IDEOGRAPH - 0xD75C: 0x838D, //CJK UNIFIED IDEOGRAPH - 0xD75D: 0x837A, //CJK UNIFIED IDEOGRAPH - 0xD75E: 0x8373, //CJK UNIFIED IDEOGRAPH - 0xD75F: 0x83A4, //CJK UNIFIED IDEOGRAPH - 0xD760: 0x8374, //CJK UNIFIED IDEOGRAPH - 0xD761: 0x838F, //CJK UNIFIED IDEOGRAPH - 0xD762: 0x8381, //CJK UNIFIED IDEOGRAPH - 0xD763: 0x8395, //CJK UNIFIED IDEOGRAPH - 0xD764: 0x8399, //CJK UNIFIED IDEOGRAPH - 0xD765: 0x8375, //CJK UNIFIED IDEOGRAPH - 0xD766: 0x8394, //CJK UNIFIED IDEOGRAPH - 0xD767: 0x83A9, //CJK UNIFIED IDEOGRAPH - 0xD768: 0x837D, //CJK UNIFIED IDEOGRAPH - 0xD769: 0x8383, //CJK UNIFIED IDEOGRAPH - 0xD76A: 0x838C, //CJK UNIFIED IDEOGRAPH - 0xD76B: 0x839D, //CJK UNIFIED IDEOGRAPH - 0xD76C: 0x839B, //CJK UNIFIED IDEOGRAPH - 0xD76D: 0x83AA, //CJK UNIFIED IDEOGRAPH - 0xD76E: 0x838B, //CJK UNIFIED IDEOGRAPH - 0xD76F: 0x837E, //CJK UNIFIED IDEOGRAPH - 0xD770: 0x83A5, //CJK UNIFIED IDEOGRAPH - 0xD771: 0x83AF, //CJK UNIFIED IDEOGRAPH - 0xD772: 0x8388, //CJK UNIFIED IDEOGRAPH - 0xD773: 0x8397, //CJK UNIFIED IDEOGRAPH - 0xD774: 0x83B0, //CJK UNIFIED IDEOGRAPH - 0xD775: 0x837F, //CJK UNIFIED IDEOGRAPH - 0xD776: 0x83A6, //CJK UNIFIED IDEOGRAPH - 0xD777: 0x8387, //CJK UNIFIED IDEOGRAPH - 0xD778: 0x83AE, //CJK UNIFIED IDEOGRAPH - 0xD779: 0x8376, //CJK UNIFIED IDEOGRAPH - 0xD77A: 0x839A, //CJK UNIFIED IDEOGRAPH - 0xD77B: 0x8659, //CJK UNIFIED IDEOGRAPH - 0xD77C: 0x8656, //CJK UNIFIED IDEOGRAPH - 0xD77D: 0x86BF, //CJK UNIFIED IDEOGRAPH - 0xD77E: 0x86B7, //CJK UNIFIED IDEOGRAPH - 0xD7A1: 0x86C2, //CJK UNIFIED IDEOGRAPH - 0xD7A2: 0x86C1, //CJK UNIFIED IDEOGRAPH - 0xD7A3: 0x86C5, //CJK UNIFIED IDEOGRAPH - 0xD7A4: 0x86BA, //CJK UNIFIED IDEOGRAPH - 0xD7A5: 0x86B0, //CJK UNIFIED IDEOGRAPH - 0xD7A6: 0x86C8, //CJK UNIFIED IDEOGRAPH - 0xD7A7: 0x86B9, //CJK UNIFIED IDEOGRAPH - 0xD7A8: 0x86B3, //CJK UNIFIED IDEOGRAPH - 0xD7A9: 0x86B8, //CJK UNIFIED IDEOGRAPH - 0xD7AA: 0x86CC, //CJK UNIFIED IDEOGRAPH - 0xD7AB: 0x86B4, //CJK UNIFIED IDEOGRAPH - 0xD7AC: 0x86BB, //CJK UNIFIED IDEOGRAPH - 0xD7AD: 0x86BC, //CJK UNIFIED IDEOGRAPH - 0xD7AE: 0x86C3, //CJK UNIFIED IDEOGRAPH - 0xD7AF: 0x86BD, //CJK UNIFIED IDEOGRAPH - 0xD7B0: 0x86BE, //CJK UNIFIED IDEOGRAPH - 0xD7B1: 0x8852, //CJK UNIFIED IDEOGRAPH - 0xD7B2: 0x8889, //CJK UNIFIED IDEOGRAPH - 0xD7B3: 0x8895, //CJK UNIFIED IDEOGRAPH - 0xD7B4: 0x88A8, //CJK UNIFIED IDEOGRAPH - 0xD7B5: 0x88A2, //CJK UNIFIED IDEOGRAPH - 0xD7B6: 0x88AA, //CJK UNIFIED IDEOGRAPH - 0xD7B7: 0x889A, //CJK UNIFIED IDEOGRAPH - 0xD7B8: 0x8891, //CJK UNIFIED IDEOGRAPH - 0xD7B9: 0x88A1, //CJK UNIFIED IDEOGRAPH - 0xD7BA: 0x889F, //CJK UNIFIED IDEOGRAPH - 0xD7BB: 0x8898, //CJK UNIFIED IDEOGRAPH - 0xD7BC: 0x88A7, //CJK UNIFIED IDEOGRAPH - 0xD7BD: 0x8899, //CJK UNIFIED IDEOGRAPH - 0xD7BE: 0x889B, //CJK UNIFIED IDEOGRAPH - 0xD7BF: 0x8897, //CJK UNIFIED IDEOGRAPH - 0xD7C0: 0x88A4, //CJK UNIFIED IDEOGRAPH - 0xD7C1: 0x88AC, //CJK UNIFIED IDEOGRAPH - 0xD7C2: 0x888C, //CJK UNIFIED IDEOGRAPH - 0xD7C3: 0x8893, //CJK UNIFIED IDEOGRAPH - 0xD7C4: 0x888E, //CJK UNIFIED IDEOGRAPH - 0xD7C5: 0x8982, //CJK UNIFIED IDEOGRAPH - 0xD7C6: 0x89D6, //CJK UNIFIED IDEOGRAPH - 0xD7C7: 0x89D9, //CJK UNIFIED IDEOGRAPH - 0xD7C8: 0x89D5, //CJK UNIFIED IDEOGRAPH - 0xD7C9: 0x8A30, //CJK UNIFIED IDEOGRAPH - 0xD7CA: 0x8A27, //CJK UNIFIED IDEOGRAPH - 0xD7CB: 0x8A2C, //CJK UNIFIED IDEOGRAPH - 0xD7CC: 0x8A1E, //CJK UNIFIED IDEOGRAPH - 0xD7CD: 0x8C39, //CJK UNIFIED IDEOGRAPH - 0xD7CE: 0x8C3B, //CJK UNIFIED IDEOGRAPH - 0xD7CF: 0x8C5C, //CJK UNIFIED IDEOGRAPH - 0xD7D0: 0x8C5D, //CJK UNIFIED IDEOGRAPH - 0xD7D1: 0x8C7D, //CJK UNIFIED IDEOGRAPH - 0xD7D2: 0x8CA5, //CJK UNIFIED IDEOGRAPH - 0xD7D3: 0x8D7D, //CJK UNIFIED IDEOGRAPH - 0xD7D4: 0x8D7B, //CJK UNIFIED IDEOGRAPH - 0xD7D5: 0x8D79, //CJK UNIFIED IDEOGRAPH - 0xD7D6: 0x8DBC, //CJK UNIFIED IDEOGRAPH - 0xD7D7: 0x8DC2, //CJK UNIFIED IDEOGRAPH - 0xD7D8: 0x8DB9, //CJK UNIFIED IDEOGRAPH - 0xD7D9: 0x8DBF, //CJK UNIFIED IDEOGRAPH - 0xD7DA: 0x8DC1, //CJK UNIFIED IDEOGRAPH - 0xD7DB: 0x8ED8, //CJK UNIFIED IDEOGRAPH - 0xD7DC: 0x8EDE, //CJK UNIFIED IDEOGRAPH - 0xD7DD: 0x8EDD, //CJK UNIFIED IDEOGRAPH - 0xD7DE: 0x8EDC, //CJK UNIFIED IDEOGRAPH - 0xD7DF: 0x8ED7, //CJK UNIFIED IDEOGRAPH - 0xD7E0: 0x8EE0, //CJK UNIFIED IDEOGRAPH - 0xD7E1: 0x8EE1, //CJK UNIFIED IDEOGRAPH - 0xD7E2: 0x9024, //CJK UNIFIED IDEOGRAPH - 0xD7E3: 0x900B, //CJK UNIFIED IDEOGRAPH - 0xD7E4: 0x9011, //CJK UNIFIED IDEOGRAPH - 0xD7E5: 0x901C, //CJK UNIFIED IDEOGRAPH - 0xD7E6: 0x900C, //CJK UNIFIED IDEOGRAPH - 0xD7E7: 0x9021, //CJK UNIFIED IDEOGRAPH - 0xD7E8: 0x90EF, //CJK UNIFIED IDEOGRAPH - 0xD7E9: 0x90EA, //CJK UNIFIED IDEOGRAPH - 0xD7EA: 0x90F0, //CJK UNIFIED IDEOGRAPH - 0xD7EB: 0x90F4, //CJK UNIFIED IDEOGRAPH - 0xD7EC: 0x90F2, //CJK UNIFIED IDEOGRAPH - 0xD7ED: 0x90F3, //CJK UNIFIED IDEOGRAPH - 0xD7EE: 0x90D4, //CJK UNIFIED IDEOGRAPH - 0xD7EF: 0x90EB, //CJK UNIFIED IDEOGRAPH - 0xD7F0: 0x90EC, //CJK UNIFIED IDEOGRAPH - 0xD7F1: 0x90E9, //CJK UNIFIED IDEOGRAPH - 0xD7F2: 0x9156, //CJK UNIFIED IDEOGRAPH - 0xD7F3: 0x9158, //CJK UNIFIED IDEOGRAPH - 0xD7F4: 0x915A, //CJK UNIFIED IDEOGRAPH - 0xD7F5: 0x9153, //CJK UNIFIED IDEOGRAPH - 0xD7F6: 0x9155, //CJK UNIFIED IDEOGRAPH - 0xD7F7: 0x91EC, //CJK UNIFIED IDEOGRAPH - 0xD7F8: 0x91F4, //CJK UNIFIED IDEOGRAPH - 0xD7F9: 0x91F1, //CJK UNIFIED IDEOGRAPH - 0xD7FA: 0x91F3, //CJK UNIFIED IDEOGRAPH - 0xD7FB: 0x91F8, //CJK UNIFIED IDEOGRAPH - 0xD7FC: 0x91E4, //CJK UNIFIED IDEOGRAPH - 0xD7FD: 0x91F9, //CJK UNIFIED IDEOGRAPH - 0xD7FE: 0x91EA, //CJK UNIFIED IDEOGRAPH - 0xD840: 0x91EB, //CJK UNIFIED IDEOGRAPH - 0xD841: 0x91F7, //CJK UNIFIED IDEOGRAPH - 0xD842: 0x91E8, //CJK UNIFIED IDEOGRAPH - 0xD843: 0x91EE, //CJK UNIFIED IDEOGRAPH - 0xD844: 0x957A, //CJK UNIFIED IDEOGRAPH - 0xD845: 0x9586, //CJK UNIFIED IDEOGRAPH - 0xD846: 0x9588, //CJK UNIFIED IDEOGRAPH - 0xD847: 0x967C, //CJK UNIFIED IDEOGRAPH - 0xD848: 0x966D, //CJK UNIFIED IDEOGRAPH - 0xD849: 0x966B, //CJK UNIFIED IDEOGRAPH - 0xD84A: 0x9671, //CJK UNIFIED IDEOGRAPH - 0xD84B: 0x966F, //CJK UNIFIED IDEOGRAPH - 0xD84C: 0x96BF, //CJK UNIFIED IDEOGRAPH - 0xD84D: 0x976A, //CJK UNIFIED IDEOGRAPH - 0xD84E: 0x9804, //CJK UNIFIED IDEOGRAPH - 0xD84F: 0x98E5, //CJK UNIFIED IDEOGRAPH - 0xD850: 0x9997, //CJK UNIFIED IDEOGRAPH - 0xD851: 0x509B, //CJK UNIFIED IDEOGRAPH - 0xD852: 0x5095, //CJK UNIFIED IDEOGRAPH - 0xD853: 0x5094, //CJK UNIFIED IDEOGRAPH - 0xD854: 0x509E, //CJK UNIFIED IDEOGRAPH - 0xD855: 0x508B, //CJK UNIFIED IDEOGRAPH - 0xD856: 0x50A3, //CJK UNIFIED IDEOGRAPH - 0xD857: 0x5083, //CJK UNIFIED IDEOGRAPH - 0xD858: 0x508C, //CJK UNIFIED IDEOGRAPH - 0xD859: 0x508E, //CJK UNIFIED IDEOGRAPH - 0xD85A: 0x509D, //CJK UNIFIED IDEOGRAPH - 0xD85B: 0x5068, //CJK UNIFIED IDEOGRAPH - 0xD85C: 0x509C, //CJK UNIFIED IDEOGRAPH - 0xD85D: 0x5092, //CJK UNIFIED IDEOGRAPH - 0xD85E: 0x5082, //CJK UNIFIED IDEOGRAPH - 0xD85F: 0x5087, //CJK UNIFIED IDEOGRAPH - 0xD860: 0x515F, //CJK UNIFIED IDEOGRAPH - 0xD861: 0x51D4, //CJK UNIFIED IDEOGRAPH - 0xD862: 0x5312, //CJK UNIFIED IDEOGRAPH - 0xD863: 0x5311, //CJK UNIFIED IDEOGRAPH - 0xD864: 0x53A4, //CJK UNIFIED IDEOGRAPH - 0xD865: 0x53A7, //CJK UNIFIED IDEOGRAPH - 0xD866: 0x5591, //CJK UNIFIED IDEOGRAPH - 0xD867: 0x55A8, //CJK UNIFIED IDEOGRAPH - 0xD868: 0x55A5, //CJK UNIFIED IDEOGRAPH - 0xD869: 0x55AD, //CJK UNIFIED IDEOGRAPH - 0xD86A: 0x5577, //CJK UNIFIED IDEOGRAPH - 0xD86B: 0x5645, //CJK UNIFIED IDEOGRAPH - 0xD86C: 0x55A2, //CJK UNIFIED IDEOGRAPH - 0xD86D: 0x5593, //CJK UNIFIED IDEOGRAPH - 0xD86E: 0x5588, //CJK UNIFIED IDEOGRAPH - 0xD86F: 0x558F, //CJK UNIFIED IDEOGRAPH - 0xD870: 0x55B5, //CJK UNIFIED IDEOGRAPH - 0xD871: 0x5581, //CJK UNIFIED IDEOGRAPH - 0xD872: 0x55A3, //CJK UNIFIED IDEOGRAPH - 0xD873: 0x5592, //CJK UNIFIED IDEOGRAPH - 0xD874: 0x55A4, //CJK UNIFIED IDEOGRAPH - 0xD875: 0x557D, //CJK UNIFIED IDEOGRAPH - 0xD876: 0x558C, //CJK UNIFIED IDEOGRAPH - 0xD877: 0x55A6, //CJK UNIFIED IDEOGRAPH - 0xD878: 0x557F, //CJK UNIFIED IDEOGRAPH - 0xD879: 0x5595, //CJK UNIFIED IDEOGRAPH - 0xD87A: 0x55A1, //CJK UNIFIED IDEOGRAPH - 0xD87B: 0x558E, //CJK UNIFIED IDEOGRAPH - 0xD87C: 0x570C, //CJK UNIFIED IDEOGRAPH - 0xD87D: 0x5829, //CJK UNIFIED IDEOGRAPH - 0xD87E: 0x5837, //CJK UNIFIED IDEOGRAPH - 0xD8A1: 0x5819, //CJK UNIFIED IDEOGRAPH - 0xD8A2: 0x581E, //CJK UNIFIED IDEOGRAPH - 0xD8A3: 0x5827, //CJK UNIFIED IDEOGRAPH - 0xD8A4: 0x5823, //CJK UNIFIED IDEOGRAPH - 0xD8A5: 0x5828, //CJK UNIFIED IDEOGRAPH - 0xD8A6: 0x57F5, //CJK UNIFIED IDEOGRAPH - 0xD8A7: 0x5848, //CJK UNIFIED IDEOGRAPH - 0xD8A8: 0x5825, //CJK UNIFIED IDEOGRAPH - 0xD8A9: 0x581C, //CJK UNIFIED IDEOGRAPH - 0xD8AA: 0x581B, //CJK UNIFIED IDEOGRAPH - 0xD8AB: 0x5833, //CJK UNIFIED IDEOGRAPH - 0xD8AC: 0x583F, //CJK UNIFIED IDEOGRAPH - 0xD8AD: 0x5836, //CJK UNIFIED IDEOGRAPH - 0xD8AE: 0x582E, //CJK UNIFIED IDEOGRAPH - 0xD8AF: 0x5839, //CJK UNIFIED IDEOGRAPH - 0xD8B0: 0x5838, //CJK UNIFIED IDEOGRAPH - 0xD8B1: 0x582D, //CJK UNIFIED IDEOGRAPH - 0xD8B2: 0x582C, //CJK UNIFIED IDEOGRAPH - 0xD8B3: 0x583B, //CJK UNIFIED IDEOGRAPH - 0xD8B4: 0x5961, //CJK UNIFIED IDEOGRAPH - 0xD8B5: 0x5AAF, //CJK UNIFIED IDEOGRAPH - 0xD8B6: 0x5A94, //CJK UNIFIED IDEOGRAPH - 0xD8B7: 0x5A9F, //CJK UNIFIED IDEOGRAPH - 0xD8B8: 0x5A7A, //CJK UNIFIED IDEOGRAPH - 0xD8B9: 0x5AA2, //CJK UNIFIED IDEOGRAPH - 0xD8BA: 0x5A9E, //CJK UNIFIED IDEOGRAPH - 0xD8BB: 0x5A78, //CJK UNIFIED IDEOGRAPH - 0xD8BC: 0x5AA6, //CJK UNIFIED IDEOGRAPH - 0xD8BD: 0x5A7C, //CJK UNIFIED IDEOGRAPH - 0xD8BE: 0x5AA5, //CJK UNIFIED IDEOGRAPH - 0xD8BF: 0x5AAC, //CJK UNIFIED IDEOGRAPH - 0xD8C0: 0x5A95, //CJK UNIFIED IDEOGRAPH - 0xD8C1: 0x5AAE, //CJK UNIFIED IDEOGRAPH - 0xD8C2: 0x5A37, //CJK UNIFIED IDEOGRAPH - 0xD8C3: 0x5A84, //CJK UNIFIED IDEOGRAPH - 0xD8C4: 0x5A8A, //CJK UNIFIED IDEOGRAPH - 0xD8C5: 0x5A97, //CJK UNIFIED IDEOGRAPH - 0xD8C6: 0x5A83, //CJK UNIFIED IDEOGRAPH - 0xD8C7: 0x5A8B, //CJK UNIFIED IDEOGRAPH - 0xD8C8: 0x5AA9, //CJK UNIFIED IDEOGRAPH - 0xD8C9: 0x5A7B, //CJK UNIFIED IDEOGRAPH - 0xD8CA: 0x5A7D, //CJK UNIFIED IDEOGRAPH - 0xD8CB: 0x5A8C, //CJK UNIFIED IDEOGRAPH - 0xD8CC: 0x5A9C, //CJK UNIFIED IDEOGRAPH - 0xD8CD: 0x5A8F, //CJK UNIFIED IDEOGRAPH - 0xD8CE: 0x5A93, //CJK UNIFIED IDEOGRAPH - 0xD8CF: 0x5A9D, //CJK UNIFIED IDEOGRAPH - 0xD8D0: 0x5BEA, //CJK UNIFIED IDEOGRAPH - 0xD8D1: 0x5BCD, //CJK UNIFIED IDEOGRAPH - 0xD8D2: 0x5BCB, //CJK UNIFIED IDEOGRAPH - 0xD8D3: 0x5BD4, //CJK UNIFIED IDEOGRAPH - 0xD8D4: 0x5BD1, //CJK UNIFIED IDEOGRAPH - 0xD8D5: 0x5BCA, //CJK UNIFIED IDEOGRAPH - 0xD8D6: 0x5BCE, //CJK UNIFIED IDEOGRAPH - 0xD8D7: 0x5C0C, //CJK UNIFIED IDEOGRAPH - 0xD8D8: 0x5C30, //CJK UNIFIED IDEOGRAPH - 0xD8D9: 0x5D37, //CJK UNIFIED IDEOGRAPH - 0xD8DA: 0x5D43, //CJK UNIFIED IDEOGRAPH - 0xD8DB: 0x5D6B, //CJK UNIFIED IDEOGRAPH - 0xD8DC: 0x5D41, //CJK UNIFIED IDEOGRAPH - 0xD8DD: 0x5D4B, //CJK UNIFIED IDEOGRAPH - 0xD8DE: 0x5D3F, //CJK UNIFIED IDEOGRAPH - 0xD8DF: 0x5D35, //CJK UNIFIED IDEOGRAPH - 0xD8E0: 0x5D51, //CJK UNIFIED IDEOGRAPH - 0xD8E1: 0x5D4E, //CJK UNIFIED IDEOGRAPH - 0xD8E2: 0x5D55, //CJK UNIFIED IDEOGRAPH - 0xD8E3: 0x5D33, //CJK UNIFIED IDEOGRAPH - 0xD8E4: 0x5D3A, //CJK UNIFIED IDEOGRAPH - 0xD8E5: 0x5D52, //CJK UNIFIED IDEOGRAPH - 0xD8E6: 0x5D3D, //CJK UNIFIED IDEOGRAPH - 0xD8E7: 0x5D31, //CJK UNIFIED IDEOGRAPH - 0xD8E8: 0x5D59, //CJK UNIFIED IDEOGRAPH - 0xD8E9: 0x5D42, //CJK UNIFIED IDEOGRAPH - 0xD8EA: 0x5D39, //CJK UNIFIED IDEOGRAPH - 0xD8EB: 0x5D49, //CJK UNIFIED IDEOGRAPH - 0xD8EC: 0x5D38, //CJK UNIFIED IDEOGRAPH - 0xD8ED: 0x5D3C, //CJK UNIFIED IDEOGRAPH - 0xD8EE: 0x5D32, //CJK UNIFIED IDEOGRAPH - 0xD8EF: 0x5D36, //CJK UNIFIED IDEOGRAPH - 0xD8F0: 0x5D40, //CJK UNIFIED IDEOGRAPH - 0xD8F1: 0x5D45, //CJK UNIFIED IDEOGRAPH - 0xD8F2: 0x5E44, //CJK UNIFIED IDEOGRAPH - 0xD8F3: 0x5E41, //CJK UNIFIED IDEOGRAPH - 0xD8F4: 0x5F58, //CJK UNIFIED IDEOGRAPH - 0xD8F5: 0x5FA6, //CJK UNIFIED IDEOGRAPH - 0xD8F6: 0x5FA5, //CJK UNIFIED IDEOGRAPH - 0xD8F7: 0x5FAB, //CJK UNIFIED IDEOGRAPH - 0xD8F8: 0x60C9, //CJK UNIFIED IDEOGRAPH - 0xD8F9: 0x60B9, //CJK UNIFIED IDEOGRAPH - 0xD8FA: 0x60CC, //CJK UNIFIED IDEOGRAPH - 0xD8FB: 0x60E2, //CJK UNIFIED IDEOGRAPH - 0xD8FC: 0x60CE, //CJK UNIFIED IDEOGRAPH - 0xD8FD: 0x60C4, //CJK UNIFIED IDEOGRAPH - 0xD8FE: 0x6114, //CJK UNIFIED IDEOGRAPH - 0xD940: 0x60F2, //CJK UNIFIED IDEOGRAPH - 0xD941: 0x610A, //CJK UNIFIED IDEOGRAPH - 0xD942: 0x6116, //CJK UNIFIED IDEOGRAPH - 0xD943: 0x6105, //CJK UNIFIED IDEOGRAPH - 0xD944: 0x60F5, //CJK UNIFIED IDEOGRAPH - 0xD945: 0x6113, //CJK UNIFIED IDEOGRAPH - 0xD946: 0x60F8, //CJK UNIFIED IDEOGRAPH - 0xD947: 0x60FC, //CJK UNIFIED IDEOGRAPH - 0xD948: 0x60FE, //CJK UNIFIED IDEOGRAPH - 0xD949: 0x60C1, //CJK UNIFIED IDEOGRAPH - 0xD94A: 0x6103, //CJK UNIFIED IDEOGRAPH - 0xD94B: 0x6118, //CJK UNIFIED IDEOGRAPH - 0xD94C: 0x611D, //CJK UNIFIED IDEOGRAPH - 0xD94D: 0x6110, //CJK UNIFIED IDEOGRAPH - 0xD94E: 0x60FF, //CJK UNIFIED IDEOGRAPH - 0xD94F: 0x6104, //CJK UNIFIED IDEOGRAPH - 0xD950: 0x610B, //CJK UNIFIED IDEOGRAPH - 0xD951: 0x624A, //CJK UNIFIED IDEOGRAPH - 0xD952: 0x6394, //CJK UNIFIED IDEOGRAPH - 0xD953: 0x63B1, //CJK UNIFIED IDEOGRAPH - 0xD954: 0x63B0, //CJK UNIFIED IDEOGRAPH - 0xD955: 0x63CE, //CJK UNIFIED IDEOGRAPH - 0xD956: 0x63E5, //CJK UNIFIED IDEOGRAPH - 0xD957: 0x63E8, //CJK UNIFIED IDEOGRAPH - 0xD958: 0x63EF, //CJK UNIFIED IDEOGRAPH - 0xD959: 0x63C3, //CJK UNIFIED IDEOGRAPH - 0xD95A: 0x649D, //CJK UNIFIED IDEOGRAPH - 0xD95B: 0x63F3, //CJK UNIFIED IDEOGRAPH - 0xD95C: 0x63CA, //CJK UNIFIED IDEOGRAPH - 0xD95D: 0x63E0, //CJK UNIFIED IDEOGRAPH - 0xD95E: 0x63F6, //CJK UNIFIED IDEOGRAPH - 0xD95F: 0x63D5, //CJK UNIFIED IDEOGRAPH - 0xD960: 0x63F2, //CJK UNIFIED IDEOGRAPH - 0xD961: 0x63F5, //CJK UNIFIED IDEOGRAPH - 0xD962: 0x6461, //CJK UNIFIED IDEOGRAPH - 0xD963: 0x63DF, //CJK UNIFIED IDEOGRAPH - 0xD964: 0x63BE, //CJK UNIFIED IDEOGRAPH - 0xD965: 0x63DD, //CJK UNIFIED IDEOGRAPH - 0xD966: 0x63DC, //CJK UNIFIED IDEOGRAPH - 0xD967: 0x63C4, //CJK UNIFIED IDEOGRAPH - 0xD968: 0x63D8, //CJK UNIFIED IDEOGRAPH - 0xD969: 0x63D3, //CJK UNIFIED IDEOGRAPH - 0xD96A: 0x63C2, //CJK UNIFIED IDEOGRAPH - 0xD96B: 0x63C7, //CJK UNIFIED IDEOGRAPH - 0xD96C: 0x63CC, //CJK UNIFIED IDEOGRAPH - 0xD96D: 0x63CB, //CJK UNIFIED IDEOGRAPH - 0xD96E: 0x63C8, //CJK UNIFIED IDEOGRAPH - 0xD96F: 0x63F0, //CJK UNIFIED IDEOGRAPH - 0xD970: 0x63D7, //CJK UNIFIED IDEOGRAPH - 0xD971: 0x63D9, //CJK UNIFIED IDEOGRAPH - 0xD972: 0x6532, //CJK UNIFIED IDEOGRAPH - 0xD973: 0x6567, //CJK UNIFIED IDEOGRAPH - 0xD974: 0x656A, //CJK UNIFIED IDEOGRAPH - 0xD975: 0x6564, //CJK UNIFIED IDEOGRAPH - 0xD976: 0x655C, //CJK UNIFIED IDEOGRAPH - 0xD977: 0x6568, //CJK UNIFIED IDEOGRAPH - 0xD978: 0x6565, //CJK UNIFIED IDEOGRAPH - 0xD979: 0x658C, //CJK UNIFIED IDEOGRAPH - 0xD97A: 0x659D, //CJK UNIFIED IDEOGRAPH - 0xD97B: 0x659E, //CJK UNIFIED IDEOGRAPH - 0xD97C: 0x65AE, //CJK UNIFIED IDEOGRAPH - 0xD97D: 0x65D0, //CJK UNIFIED IDEOGRAPH - 0xD97E: 0x65D2, //CJK UNIFIED IDEOGRAPH - 0xD9A1: 0x667C, //CJK UNIFIED IDEOGRAPH - 0xD9A2: 0x666C, //CJK UNIFIED IDEOGRAPH - 0xD9A3: 0x667B, //CJK UNIFIED IDEOGRAPH - 0xD9A4: 0x6680, //CJK UNIFIED IDEOGRAPH - 0xD9A5: 0x6671, //CJK UNIFIED IDEOGRAPH - 0xD9A6: 0x6679, //CJK UNIFIED IDEOGRAPH - 0xD9A7: 0x666A, //CJK UNIFIED IDEOGRAPH - 0xD9A8: 0x6672, //CJK UNIFIED IDEOGRAPH - 0xD9A9: 0x6701, //CJK UNIFIED IDEOGRAPH - 0xD9AA: 0x690C, //CJK UNIFIED IDEOGRAPH - 0xD9AB: 0x68D3, //CJK UNIFIED IDEOGRAPH - 0xD9AC: 0x6904, //CJK UNIFIED IDEOGRAPH - 0xD9AD: 0x68DC, //CJK UNIFIED IDEOGRAPH - 0xD9AE: 0x692A, //CJK UNIFIED IDEOGRAPH - 0xD9AF: 0x68EC, //CJK UNIFIED IDEOGRAPH - 0xD9B0: 0x68EA, //CJK UNIFIED IDEOGRAPH - 0xD9B1: 0x68F1, //CJK UNIFIED IDEOGRAPH - 0xD9B2: 0x690F, //CJK UNIFIED IDEOGRAPH - 0xD9B3: 0x68D6, //CJK UNIFIED IDEOGRAPH - 0xD9B4: 0x68F7, //CJK UNIFIED IDEOGRAPH - 0xD9B5: 0x68EB, //CJK UNIFIED IDEOGRAPH - 0xD9B6: 0x68E4, //CJK UNIFIED IDEOGRAPH - 0xD9B7: 0x68F6, //CJK UNIFIED IDEOGRAPH - 0xD9B8: 0x6913, //CJK UNIFIED IDEOGRAPH - 0xD9B9: 0x6910, //CJK UNIFIED IDEOGRAPH - 0xD9BA: 0x68F3, //CJK UNIFIED IDEOGRAPH - 0xD9BB: 0x68E1, //CJK UNIFIED IDEOGRAPH - 0xD9BC: 0x6907, //CJK UNIFIED IDEOGRAPH - 0xD9BD: 0x68CC, //CJK UNIFIED IDEOGRAPH - 0xD9BE: 0x6908, //CJK UNIFIED IDEOGRAPH - 0xD9BF: 0x6970, //CJK UNIFIED IDEOGRAPH - 0xD9C0: 0x68B4, //CJK UNIFIED IDEOGRAPH - 0xD9C1: 0x6911, //CJK UNIFIED IDEOGRAPH - 0xD9C2: 0x68EF, //CJK UNIFIED IDEOGRAPH - 0xD9C3: 0x68C6, //CJK UNIFIED IDEOGRAPH - 0xD9C4: 0x6914, //CJK UNIFIED IDEOGRAPH - 0xD9C5: 0x68F8, //CJK UNIFIED IDEOGRAPH - 0xD9C6: 0x68D0, //CJK UNIFIED IDEOGRAPH - 0xD9C7: 0x68FD, //CJK UNIFIED IDEOGRAPH - 0xD9C8: 0x68FC, //CJK UNIFIED IDEOGRAPH - 0xD9C9: 0x68E8, //CJK UNIFIED IDEOGRAPH - 0xD9CA: 0x690B, //CJK UNIFIED IDEOGRAPH - 0xD9CB: 0x690A, //CJK UNIFIED IDEOGRAPH - 0xD9CC: 0x6917, //CJK UNIFIED IDEOGRAPH - 0xD9CD: 0x68CE, //CJK UNIFIED IDEOGRAPH - 0xD9CE: 0x68C8, //CJK UNIFIED IDEOGRAPH - 0xD9CF: 0x68DD, //CJK UNIFIED IDEOGRAPH - 0xD9D0: 0x68DE, //CJK UNIFIED IDEOGRAPH - 0xD9D1: 0x68E6, //CJK UNIFIED IDEOGRAPH - 0xD9D2: 0x68F4, //CJK UNIFIED IDEOGRAPH - 0xD9D3: 0x68D1, //CJK UNIFIED IDEOGRAPH - 0xD9D4: 0x6906, //CJK UNIFIED IDEOGRAPH - 0xD9D5: 0x68D4, //CJK UNIFIED IDEOGRAPH - 0xD9D6: 0x68E9, //CJK UNIFIED IDEOGRAPH - 0xD9D7: 0x6915, //CJK UNIFIED IDEOGRAPH - 0xD9D8: 0x6925, //CJK UNIFIED IDEOGRAPH - 0xD9D9: 0x68C7, //CJK UNIFIED IDEOGRAPH - 0xD9DA: 0x6B39, //CJK UNIFIED IDEOGRAPH - 0xD9DB: 0x6B3B, //CJK UNIFIED IDEOGRAPH - 0xD9DC: 0x6B3F, //CJK UNIFIED IDEOGRAPH - 0xD9DD: 0x6B3C, //CJK UNIFIED IDEOGRAPH - 0xD9DE: 0x6B94, //CJK UNIFIED IDEOGRAPH - 0xD9DF: 0x6B97, //CJK UNIFIED IDEOGRAPH - 0xD9E0: 0x6B99, //CJK UNIFIED IDEOGRAPH - 0xD9E1: 0x6B95, //CJK UNIFIED IDEOGRAPH - 0xD9E2: 0x6BBD, //CJK UNIFIED IDEOGRAPH - 0xD9E3: 0x6BF0, //CJK UNIFIED IDEOGRAPH - 0xD9E4: 0x6BF2, //CJK UNIFIED IDEOGRAPH - 0xD9E5: 0x6BF3, //CJK UNIFIED IDEOGRAPH - 0xD9E6: 0x6C30, //CJK UNIFIED IDEOGRAPH - 0xD9E7: 0x6DFC, //CJK UNIFIED IDEOGRAPH - 0xD9E8: 0x6E46, //CJK UNIFIED IDEOGRAPH - 0xD9E9: 0x6E47, //CJK UNIFIED IDEOGRAPH - 0xD9EA: 0x6E1F, //CJK UNIFIED IDEOGRAPH - 0xD9EB: 0x6E49, //CJK UNIFIED IDEOGRAPH - 0xD9EC: 0x6E88, //CJK UNIFIED IDEOGRAPH - 0xD9ED: 0x6E3C, //CJK UNIFIED IDEOGRAPH - 0xD9EE: 0x6E3D, //CJK UNIFIED IDEOGRAPH - 0xD9EF: 0x6E45, //CJK UNIFIED IDEOGRAPH - 0xD9F0: 0x6E62, //CJK UNIFIED IDEOGRAPH - 0xD9F1: 0x6E2B, //CJK UNIFIED IDEOGRAPH - 0xD9F2: 0x6E3F, //CJK UNIFIED IDEOGRAPH - 0xD9F3: 0x6E41, //CJK UNIFIED IDEOGRAPH - 0xD9F4: 0x6E5D, //CJK UNIFIED IDEOGRAPH - 0xD9F5: 0x6E73, //CJK UNIFIED IDEOGRAPH - 0xD9F6: 0x6E1C, //CJK UNIFIED IDEOGRAPH - 0xD9F7: 0x6E33, //CJK UNIFIED IDEOGRAPH - 0xD9F8: 0x6E4B, //CJK UNIFIED IDEOGRAPH - 0xD9F9: 0x6E40, //CJK UNIFIED IDEOGRAPH - 0xD9FA: 0x6E51, //CJK UNIFIED IDEOGRAPH - 0xD9FB: 0x6E3B, //CJK UNIFIED IDEOGRAPH - 0xD9FC: 0x6E03, //CJK UNIFIED IDEOGRAPH - 0xD9FD: 0x6E2E, //CJK UNIFIED IDEOGRAPH - 0xD9FE: 0x6E5E, //CJK UNIFIED IDEOGRAPH - 0xDA40: 0x6E68, //CJK UNIFIED IDEOGRAPH - 0xDA41: 0x6E5C, //CJK UNIFIED IDEOGRAPH - 0xDA42: 0x6E61, //CJK UNIFIED IDEOGRAPH - 0xDA43: 0x6E31, //CJK UNIFIED IDEOGRAPH - 0xDA44: 0x6E28, //CJK UNIFIED IDEOGRAPH - 0xDA45: 0x6E60, //CJK UNIFIED IDEOGRAPH - 0xDA46: 0x6E71, //CJK UNIFIED IDEOGRAPH - 0xDA47: 0x6E6B, //CJK UNIFIED IDEOGRAPH - 0xDA48: 0x6E39, //CJK UNIFIED IDEOGRAPH - 0xDA49: 0x6E22, //CJK UNIFIED IDEOGRAPH - 0xDA4A: 0x6E30, //CJK UNIFIED IDEOGRAPH - 0xDA4B: 0x6E53, //CJK UNIFIED IDEOGRAPH - 0xDA4C: 0x6E65, //CJK UNIFIED IDEOGRAPH - 0xDA4D: 0x6E27, //CJK UNIFIED IDEOGRAPH - 0xDA4E: 0x6E78, //CJK UNIFIED IDEOGRAPH - 0xDA4F: 0x6E64, //CJK UNIFIED IDEOGRAPH - 0xDA50: 0x6E77, //CJK UNIFIED IDEOGRAPH - 0xDA51: 0x6E55, //CJK UNIFIED IDEOGRAPH - 0xDA52: 0x6E79, //CJK UNIFIED IDEOGRAPH - 0xDA53: 0x6E52, //CJK UNIFIED IDEOGRAPH - 0xDA54: 0x6E66, //CJK UNIFIED IDEOGRAPH - 0xDA55: 0x6E35, //CJK UNIFIED IDEOGRAPH - 0xDA56: 0x6E36, //CJK UNIFIED IDEOGRAPH - 0xDA57: 0x6E5A, //CJK UNIFIED IDEOGRAPH - 0xDA58: 0x7120, //CJK UNIFIED IDEOGRAPH - 0xDA59: 0x711E, //CJK UNIFIED IDEOGRAPH - 0xDA5A: 0x712F, //CJK UNIFIED IDEOGRAPH - 0xDA5B: 0x70FB, //CJK UNIFIED IDEOGRAPH - 0xDA5C: 0x712E, //CJK UNIFIED IDEOGRAPH - 0xDA5D: 0x7131, //CJK UNIFIED IDEOGRAPH - 0xDA5E: 0x7123, //CJK UNIFIED IDEOGRAPH - 0xDA5F: 0x7125, //CJK UNIFIED IDEOGRAPH - 0xDA60: 0x7122, //CJK UNIFIED IDEOGRAPH - 0xDA61: 0x7132, //CJK UNIFIED IDEOGRAPH - 0xDA62: 0x711F, //CJK UNIFIED IDEOGRAPH - 0xDA63: 0x7128, //CJK UNIFIED IDEOGRAPH - 0xDA64: 0x713A, //CJK UNIFIED IDEOGRAPH - 0xDA65: 0x711B, //CJK UNIFIED IDEOGRAPH - 0xDA66: 0x724B, //CJK UNIFIED IDEOGRAPH - 0xDA67: 0x725A, //CJK UNIFIED IDEOGRAPH - 0xDA68: 0x7288, //CJK UNIFIED IDEOGRAPH - 0xDA69: 0x7289, //CJK UNIFIED IDEOGRAPH - 0xDA6A: 0x7286, //CJK UNIFIED IDEOGRAPH - 0xDA6B: 0x7285, //CJK UNIFIED IDEOGRAPH - 0xDA6C: 0x728B, //CJK UNIFIED IDEOGRAPH - 0xDA6D: 0x7312, //CJK UNIFIED IDEOGRAPH - 0xDA6E: 0x730B, //CJK UNIFIED IDEOGRAPH - 0xDA6F: 0x7330, //CJK UNIFIED IDEOGRAPH - 0xDA70: 0x7322, //CJK UNIFIED IDEOGRAPH - 0xDA71: 0x7331, //CJK UNIFIED IDEOGRAPH - 0xDA72: 0x7333, //CJK UNIFIED IDEOGRAPH - 0xDA73: 0x7327, //CJK UNIFIED IDEOGRAPH - 0xDA74: 0x7332, //CJK UNIFIED IDEOGRAPH - 0xDA75: 0x732D, //CJK UNIFIED IDEOGRAPH - 0xDA76: 0x7326, //CJK UNIFIED IDEOGRAPH - 0xDA77: 0x7323, //CJK UNIFIED IDEOGRAPH - 0xDA78: 0x7335, //CJK UNIFIED IDEOGRAPH - 0xDA79: 0x730C, //CJK UNIFIED IDEOGRAPH - 0xDA7A: 0x742E, //CJK UNIFIED IDEOGRAPH - 0xDA7B: 0x742C, //CJK UNIFIED IDEOGRAPH - 0xDA7C: 0x7430, //CJK UNIFIED IDEOGRAPH - 0xDA7D: 0x742B, //CJK UNIFIED IDEOGRAPH - 0xDA7E: 0x7416, //CJK UNIFIED IDEOGRAPH - 0xDAA1: 0x741A, //CJK UNIFIED IDEOGRAPH - 0xDAA2: 0x7421, //CJK UNIFIED IDEOGRAPH - 0xDAA3: 0x742D, //CJK UNIFIED IDEOGRAPH - 0xDAA4: 0x7431, //CJK UNIFIED IDEOGRAPH - 0xDAA5: 0x7424, //CJK UNIFIED IDEOGRAPH - 0xDAA6: 0x7423, //CJK UNIFIED IDEOGRAPH - 0xDAA7: 0x741D, //CJK UNIFIED IDEOGRAPH - 0xDAA8: 0x7429, //CJK UNIFIED IDEOGRAPH - 0xDAA9: 0x7420, //CJK UNIFIED IDEOGRAPH - 0xDAAA: 0x7432, //CJK UNIFIED IDEOGRAPH - 0xDAAB: 0x74FB, //CJK UNIFIED IDEOGRAPH - 0xDAAC: 0x752F, //CJK UNIFIED IDEOGRAPH - 0xDAAD: 0x756F, //CJK UNIFIED IDEOGRAPH - 0xDAAE: 0x756C, //CJK UNIFIED IDEOGRAPH - 0xDAAF: 0x75E7, //CJK UNIFIED IDEOGRAPH - 0xDAB0: 0x75DA, //CJK UNIFIED IDEOGRAPH - 0xDAB1: 0x75E1, //CJK UNIFIED IDEOGRAPH - 0xDAB2: 0x75E6, //CJK UNIFIED IDEOGRAPH - 0xDAB3: 0x75DD, //CJK UNIFIED IDEOGRAPH - 0xDAB4: 0x75DF, //CJK UNIFIED IDEOGRAPH - 0xDAB5: 0x75E4, //CJK UNIFIED IDEOGRAPH - 0xDAB6: 0x75D7, //CJK UNIFIED IDEOGRAPH - 0xDAB7: 0x7695, //CJK UNIFIED IDEOGRAPH - 0xDAB8: 0x7692, //CJK UNIFIED IDEOGRAPH - 0xDAB9: 0x76DA, //CJK UNIFIED IDEOGRAPH - 0xDABA: 0x7746, //CJK UNIFIED IDEOGRAPH - 0xDABB: 0x7747, //CJK UNIFIED IDEOGRAPH - 0xDABC: 0x7744, //CJK UNIFIED IDEOGRAPH - 0xDABD: 0x774D, //CJK UNIFIED IDEOGRAPH - 0xDABE: 0x7745, //CJK UNIFIED IDEOGRAPH - 0xDABF: 0x774A, //CJK UNIFIED IDEOGRAPH - 0xDAC0: 0x774E, //CJK UNIFIED IDEOGRAPH - 0xDAC1: 0x774B, //CJK UNIFIED IDEOGRAPH - 0xDAC2: 0x774C, //CJK UNIFIED IDEOGRAPH - 0xDAC3: 0x77DE, //CJK UNIFIED IDEOGRAPH - 0xDAC4: 0x77EC, //CJK UNIFIED IDEOGRAPH - 0xDAC5: 0x7860, //CJK UNIFIED IDEOGRAPH - 0xDAC6: 0x7864, //CJK UNIFIED IDEOGRAPH - 0xDAC7: 0x7865, //CJK UNIFIED IDEOGRAPH - 0xDAC8: 0x785C, //CJK UNIFIED IDEOGRAPH - 0xDAC9: 0x786D, //CJK UNIFIED IDEOGRAPH - 0xDACA: 0x7871, //CJK UNIFIED IDEOGRAPH - 0xDACB: 0x786A, //CJK UNIFIED IDEOGRAPH - 0xDACC: 0x786E, //CJK UNIFIED IDEOGRAPH - 0xDACD: 0x7870, //CJK UNIFIED IDEOGRAPH - 0xDACE: 0x7869, //CJK UNIFIED IDEOGRAPH - 0xDACF: 0x7868, //CJK UNIFIED IDEOGRAPH - 0xDAD0: 0x785E, //CJK UNIFIED IDEOGRAPH - 0xDAD1: 0x7862, //CJK UNIFIED IDEOGRAPH - 0xDAD2: 0x7974, //CJK UNIFIED IDEOGRAPH - 0xDAD3: 0x7973, //CJK UNIFIED IDEOGRAPH - 0xDAD4: 0x7972, //CJK UNIFIED IDEOGRAPH - 0xDAD5: 0x7970, //CJK UNIFIED IDEOGRAPH - 0xDAD6: 0x7A02, //CJK UNIFIED IDEOGRAPH - 0xDAD7: 0x7A0A, //CJK UNIFIED IDEOGRAPH - 0xDAD8: 0x7A03, //CJK UNIFIED IDEOGRAPH - 0xDAD9: 0x7A0C, //CJK UNIFIED IDEOGRAPH - 0xDADA: 0x7A04, //CJK UNIFIED IDEOGRAPH - 0xDADB: 0x7A99, //CJK UNIFIED IDEOGRAPH - 0xDADC: 0x7AE6, //CJK UNIFIED IDEOGRAPH - 0xDADD: 0x7AE4, //CJK UNIFIED IDEOGRAPH - 0xDADE: 0x7B4A, //CJK UNIFIED IDEOGRAPH - 0xDADF: 0x7B3B, //CJK UNIFIED IDEOGRAPH - 0xDAE0: 0x7B44, //CJK UNIFIED IDEOGRAPH - 0xDAE1: 0x7B48, //CJK UNIFIED IDEOGRAPH - 0xDAE2: 0x7B4C, //CJK UNIFIED IDEOGRAPH - 0xDAE3: 0x7B4E, //CJK UNIFIED IDEOGRAPH - 0xDAE4: 0x7B40, //CJK UNIFIED IDEOGRAPH - 0xDAE5: 0x7B58, //CJK UNIFIED IDEOGRAPH - 0xDAE6: 0x7B45, //CJK UNIFIED IDEOGRAPH - 0xDAE7: 0x7CA2, //CJK UNIFIED IDEOGRAPH - 0xDAE8: 0x7C9E, //CJK UNIFIED IDEOGRAPH - 0xDAE9: 0x7CA8, //CJK UNIFIED IDEOGRAPH - 0xDAEA: 0x7CA1, //CJK UNIFIED IDEOGRAPH - 0xDAEB: 0x7D58, //CJK UNIFIED IDEOGRAPH - 0xDAEC: 0x7D6F, //CJK UNIFIED IDEOGRAPH - 0xDAED: 0x7D63, //CJK UNIFIED IDEOGRAPH - 0xDAEE: 0x7D53, //CJK UNIFIED IDEOGRAPH - 0xDAEF: 0x7D56, //CJK UNIFIED IDEOGRAPH - 0xDAF0: 0x7D67, //CJK UNIFIED IDEOGRAPH - 0xDAF1: 0x7D6A, //CJK UNIFIED IDEOGRAPH - 0xDAF2: 0x7D4F, //CJK UNIFIED IDEOGRAPH - 0xDAF3: 0x7D6D, //CJK UNIFIED IDEOGRAPH - 0xDAF4: 0x7D5C, //CJK UNIFIED IDEOGRAPH - 0xDAF5: 0x7D6B, //CJK UNIFIED IDEOGRAPH - 0xDAF6: 0x7D52, //CJK UNIFIED IDEOGRAPH - 0xDAF7: 0x7D54, //CJK UNIFIED IDEOGRAPH - 0xDAF8: 0x7D69, //CJK UNIFIED IDEOGRAPH - 0xDAF9: 0x7D51, //CJK UNIFIED IDEOGRAPH - 0xDAFA: 0x7D5F, //CJK UNIFIED IDEOGRAPH - 0xDAFB: 0x7D4E, //CJK UNIFIED IDEOGRAPH - 0xDAFC: 0x7F3E, //CJK UNIFIED IDEOGRAPH - 0xDAFD: 0x7F3F, //CJK UNIFIED IDEOGRAPH - 0xDAFE: 0x7F65, //CJK UNIFIED IDEOGRAPH - 0xDB40: 0x7F66, //CJK UNIFIED IDEOGRAPH - 0xDB41: 0x7FA2, //CJK UNIFIED IDEOGRAPH - 0xDB42: 0x7FA0, //CJK UNIFIED IDEOGRAPH - 0xDB43: 0x7FA1, //CJK UNIFIED IDEOGRAPH - 0xDB44: 0x7FD7, //CJK UNIFIED IDEOGRAPH - 0xDB45: 0x8051, //CJK UNIFIED IDEOGRAPH - 0xDB46: 0x804F, //CJK UNIFIED IDEOGRAPH - 0xDB47: 0x8050, //CJK UNIFIED IDEOGRAPH - 0xDB48: 0x80FE, //CJK UNIFIED IDEOGRAPH - 0xDB49: 0x80D4, //CJK UNIFIED IDEOGRAPH - 0xDB4A: 0x8143, //CJK UNIFIED IDEOGRAPH - 0xDB4B: 0x814A, //CJK UNIFIED IDEOGRAPH - 0xDB4C: 0x8152, //CJK UNIFIED IDEOGRAPH - 0xDB4D: 0x814F, //CJK UNIFIED IDEOGRAPH - 0xDB4E: 0x8147, //CJK UNIFIED IDEOGRAPH - 0xDB4F: 0x813D, //CJK UNIFIED IDEOGRAPH - 0xDB50: 0x814D, //CJK UNIFIED IDEOGRAPH - 0xDB51: 0x813A, //CJK UNIFIED IDEOGRAPH - 0xDB52: 0x81E6, //CJK UNIFIED IDEOGRAPH - 0xDB53: 0x81EE, //CJK UNIFIED IDEOGRAPH - 0xDB54: 0x81F7, //CJK UNIFIED IDEOGRAPH - 0xDB55: 0x81F8, //CJK UNIFIED IDEOGRAPH - 0xDB56: 0x81F9, //CJK UNIFIED IDEOGRAPH - 0xDB57: 0x8204, //CJK UNIFIED IDEOGRAPH - 0xDB58: 0x823C, //CJK UNIFIED IDEOGRAPH - 0xDB59: 0x823D, //CJK UNIFIED IDEOGRAPH - 0xDB5A: 0x823F, //CJK UNIFIED IDEOGRAPH - 0xDB5B: 0x8275, //CJK UNIFIED IDEOGRAPH - 0xDB5C: 0x833B, //CJK UNIFIED IDEOGRAPH - 0xDB5D: 0x83CF, //CJK UNIFIED IDEOGRAPH - 0xDB5E: 0x83F9, //CJK UNIFIED IDEOGRAPH - 0xDB5F: 0x8423, //CJK UNIFIED IDEOGRAPH - 0xDB60: 0x83C0, //CJK UNIFIED IDEOGRAPH - 0xDB61: 0x83E8, //CJK UNIFIED IDEOGRAPH - 0xDB62: 0x8412, //CJK UNIFIED IDEOGRAPH - 0xDB63: 0x83E7, //CJK UNIFIED IDEOGRAPH - 0xDB64: 0x83E4, //CJK UNIFIED IDEOGRAPH - 0xDB65: 0x83FC, //CJK UNIFIED IDEOGRAPH - 0xDB66: 0x83F6, //CJK UNIFIED IDEOGRAPH - 0xDB67: 0x8410, //CJK UNIFIED IDEOGRAPH - 0xDB68: 0x83C6, //CJK UNIFIED IDEOGRAPH - 0xDB69: 0x83C8, //CJK UNIFIED IDEOGRAPH - 0xDB6A: 0x83EB, //CJK UNIFIED IDEOGRAPH - 0xDB6B: 0x83E3, //CJK UNIFIED IDEOGRAPH - 0xDB6C: 0x83BF, //CJK UNIFIED IDEOGRAPH - 0xDB6D: 0x8401, //CJK UNIFIED IDEOGRAPH - 0xDB6E: 0x83DD, //CJK UNIFIED IDEOGRAPH - 0xDB6F: 0x83E5, //CJK UNIFIED IDEOGRAPH - 0xDB70: 0x83D8, //CJK UNIFIED IDEOGRAPH - 0xDB71: 0x83FF, //CJK UNIFIED IDEOGRAPH - 0xDB72: 0x83E1, //CJK UNIFIED IDEOGRAPH - 0xDB73: 0x83CB, //CJK UNIFIED IDEOGRAPH - 0xDB74: 0x83CE, //CJK UNIFIED IDEOGRAPH - 0xDB75: 0x83D6, //CJK UNIFIED IDEOGRAPH - 0xDB76: 0x83F5, //CJK UNIFIED IDEOGRAPH - 0xDB77: 0x83C9, //CJK UNIFIED IDEOGRAPH - 0xDB78: 0x8409, //CJK UNIFIED IDEOGRAPH - 0xDB79: 0x840F, //CJK UNIFIED IDEOGRAPH - 0xDB7A: 0x83DE, //CJK UNIFIED IDEOGRAPH - 0xDB7B: 0x8411, //CJK UNIFIED IDEOGRAPH - 0xDB7C: 0x8406, //CJK UNIFIED IDEOGRAPH - 0xDB7D: 0x83C2, //CJK UNIFIED IDEOGRAPH - 0xDB7E: 0x83F3, //CJK UNIFIED IDEOGRAPH - 0xDBA1: 0x83D5, //CJK UNIFIED IDEOGRAPH - 0xDBA2: 0x83FA, //CJK UNIFIED IDEOGRAPH - 0xDBA3: 0x83C7, //CJK UNIFIED IDEOGRAPH - 0xDBA4: 0x83D1, //CJK UNIFIED IDEOGRAPH - 0xDBA5: 0x83EA, //CJK UNIFIED IDEOGRAPH - 0xDBA6: 0x8413, //CJK UNIFIED IDEOGRAPH - 0xDBA7: 0x83C3, //CJK UNIFIED IDEOGRAPH - 0xDBA8: 0x83EC, //CJK UNIFIED IDEOGRAPH - 0xDBA9: 0x83EE, //CJK UNIFIED IDEOGRAPH - 0xDBAA: 0x83C4, //CJK UNIFIED IDEOGRAPH - 0xDBAB: 0x83FB, //CJK UNIFIED IDEOGRAPH - 0xDBAC: 0x83D7, //CJK UNIFIED IDEOGRAPH - 0xDBAD: 0x83E2, //CJK UNIFIED IDEOGRAPH - 0xDBAE: 0x841B, //CJK UNIFIED IDEOGRAPH - 0xDBAF: 0x83DB, //CJK UNIFIED IDEOGRAPH - 0xDBB0: 0x83FE, //CJK UNIFIED IDEOGRAPH - 0xDBB1: 0x86D8, //CJK UNIFIED IDEOGRAPH - 0xDBB2: 0x86E2, //CJK UNIFIED IDEOGRAPH - 0xDBB3: 0x86E6, //CJK UNIFIED IDEOGRAPH - 0xDBB4: 0x86D3, //CJK UNIFIED IDEOGRAPH - 0xDBB5: 0x86E3, //CJK UNIFIED IDEOGRAPH - 0xDBB6: 0x86DA, //CJK UNIFIED IDEOGRAPH - 0xDBB7: 0x86EA, //CJK UNIFIED IDEOGRAPH - 0xDBB8: 0x86DD, //CJK UNIFIED IDEOGRAPH - 0xDBB9: 0x86EB, //CJK UNIFIED IDEOGRAPH - 0xDBBA: 0x86DC, //CJK UNIFIED IDEOGRAPH - 0xDBBB: 0x86EC, //CJK UNIFIED IDEOGRAPH - 0xDBBC: 0x86E9, //CJK UNIFIED IDEOGRAPH - 0xDBBD: 0x86D7, //CJK UNIFIED IDEOGRAPH - 0xDBBE: 0x86E8, //CJK UNIFIED IDEOGRAPH - 0xDBBF: 0x86D1, //CJK UNIFIED IDEOGRAPH - 0xDBC0: 0x8848, //CJK UNIFIED IDEOGRAPH - 0xDBC1: 0x8856, //CJK UNIFIED IDEOGRAPH - 0xDBC2: 0x8855, //CJK UNIFIED IDEOGRAPH - 0xDBC3: 0x88BA, //CJK UNIFIED IDEOGRAPH - 0xDBC4: 0x88D7, //CJK UNIFIED IDEOGRAPH - 0xDBC5: 0x88B9, //CJK UNIFIED IDEOGRAPH - 0xDBC6: 0x88B8, //CJK UNIFIED IDEOGRAPH - 0xDBC7: 0x88C0, //CJK UNIFIED IDEOGRAPH - 0xDBC8: 0x88BE, //CJK UNIFIED IDEOGRAPH - 0xDBC9: 0x88B6, //CJK UNIFIED IDEOGRAPH - 0xDBCA: 0x88BC, //CJK UNIFIED IDEOGRAPH - 0xDBCB: 0x88B7, //CJK UNIFIED IDEOGRAPH - 0xDBCC: 0x88BD, //CJK UNIFIED IDEOGRAPH - 0xDBCD: 0x88B2, //CJK UNIFIED IDEOGRAPH - 0xDBCE: 0x8901, //CJK UNIFIED IDEOGRAPH - 0xDBCF: 0x88C9, //CJK UNIFIED IDEOGRAPH - 0xDBD0: 0x8995, //CJK UNIFIED IDEOGRAPH - 0xDBD1: 0x8998, //CJK UNIFIED IDEOGRAPH - 0xDBD2: 0x8997, //CJK UNIFIED IDEOGRAPH - 0xDBD3: 0x89DD, //CJK UNIFIED IDEOGRAPH - 0xDBD4: 0x89DA, //CJK UNIFIED IDEOGRAPH - 0xDBD5: 0x89DB, //CJK UNIFIED IDEOGRAPH - 0xDBD6: 0x8A4E, //CJK UNIFIED IDEOGRAPH - 0xDBD7: 0x8A4D, //CJK UNIFIED IDEOGRAPH - 0xDBD8: 0x8A39, //CJK UNIFIED IDEOGRAPH - 0xDBD9: 0x8A59, //CJK UNIFIED IDEOGRAPH - 0xDBDA: 0x8A40, //CJK UNIFIED IDEOGRAPH - 0xDBDB: 0x8A57, //CJK UNIFIED IDEOGRAPH - 0xDBDC: 0x8A58, //CJK UNIFIED IDEOGRAPH - 0xDBDD: 0x8A44, //CJK UNIFIED IDEOGRAPH - 0xDBDE: 0x8A45, //CJK UNIFIED IDEOGRAPH - 0xDBDF: 0x8A52, //CJK UNIFIED IDEOGRAPH - 0xDBE0: 0x8A48, //CJK UNIFIED IDEOGRAPH - 0xDBE1: 0x8A51, //CJK UNIFIED IDEOGRAPH - 0xDBE2: 0x8A4A, //CJK UNIFIED IDEOGRAPH - 0xDBE3: 0x8A4C, //CJK UNIFIED IDEOGRAPH - 0xDBE4: 0x8A4F, //CJK UNIFIED IDEOGRAPH - 0xDBE5: 0x8C5F, //CJK UNIFIED IDEOGRAPH - 0xDBE6: 0x8C81, //CJK UNIFIED IDEOGRAPH - 0xDBE7: 0x8C80, //CJK UNIFIED IDEOGRAPH - 0xDBE8: 0x8CBA, //CJK UNIFIED IDEOGRAPH - 0xDBE9: 0x8CBE, //CJK UNIFIED IDEOGRAPH - 0xDBEA: 0x8CB0, //CJK UNIFIED IDEOGRAPH - 0xDBEB: 0x8CB9, //CJK UNIFIED IDEOGRAPH - 0xDBEC: 0x8CB5, //CJK UNIFIED IDEOGRAPH - 0xDBED: 0x8D84, //CJK UNIFIED IDEOGRAPH - 0xDBEE: 0x8D80, //CJK UNIFIED IDEOGRAPH - 0xDBEF: 0x8D89, //CJK UNIFIED IDEOGRAPH - 0xDBF0: 0x8DD8, //CJK UNIFIED IDEOGRAPH - 0xDBF1: 0x8DD3, //CJK UNIFIED IDEOGRAPH - 0xDBF2: 0x8DCD, //CJK UNIFIED IDEOGRAPH - 0xDBF3: 0x8DC7, //CJK UNIFIED IDEOGRAPH - 0xDBF4: 0x8DD6, //CJK UNIFIED IDEOGRAPH - 0xDBF5: 0x8DDC, //CJK UNIFIED IDEOGRAPH - 0xDBF6: 0x8DCF, //CJK UNIFIED IDEOGRAPH - 0xDBF7: 0x8DD5, //CJK UNIFIED IDEOGRAPH - 0xDBF8: 0x8DD9, //CJK UNIFIED IDEOGRAPH - 0xDBF9: 0x8DC8, //CJK UNIFIED IDEOGRAPH - 0xDBFA: 0x8DD7, //CJK UNIFIED IDEOGRAPH - 0xDBFB: 0x8DC5, //CJK UNIFIED IDEOGRAPH - 0xDBFC: 0x8EEF, //CJK UNIFIED IDEOGRAPH - 0xDBFD: 0x8EF7, //CJK UNIFIED IDEOGRAPH - 0xDBFE: 0x8EFA, //CJK UNIFIED IDEOGRAPH - 0xDC40: 0x8EF9, //CJK UNIFIED IDEOGRAPH - 0xDC41: 0x8EE6, //CJK UNIFIED IDEOGRAPH - 0xDC42: 0x8EEE, //CJK UNIFIED IDEOGRAPH - 0xDC43: 0x8EE5, //CJK UNIFIED IDEOGRAPH - 0xDC44: 0x8EF5, //CJK UNIFIED IDEOGRAPH - 0xDC45: 0x8EE7, //CJK UNIFIED IDEOGRAPH - 0xDC46: 0x8EE8, //CJK UNIFIED IDEOGRAPH - 0xDC47: 0x8EF6, //CJK UNIFIED IDEOGRAPH - 0xDC48: 0x8EEB, //CJK UNIFIED IDEOGRAPH - 0xDC49: 0x8EF1, //CJK UNIFIED IDEOGRAPH - 0xDC4A: 0x8EEC, //CJK UNIFIED IDEOGRAPH - 0xDC4B: 0x8EF4, //CJK UNIFIED IDEOGRAPH - 0xDC4C: 0x8EE9, //CJK UNIFIED IDEOGRAPH - 0xDC4D: 0x902D, //CJK UNIFIED IDEOGRAPH - 0xDC4E: 0x9034, //CJK UNIFIED IDEOGRAPH - 0xDC4F: 0x902F, //CJK UNIFIED IDEOGRAPH - 0xDC50: 0x9106, //CJK UNIFIED IDEOGRAPH - 0xDC51: 0x912C, //CJK UNIFIED IDEOGRAPH - 0xDC52: 0x9104, //CJK UNIFIED IDEOGRAPH - 0xDC53: 0x90FF, //CJK UNIFIED IDEOGRAPH - 0xDC54: 0x90FC, //CJK UNIFIED IDEOGRAPH - 0xDC55: 0x9108, //CJK UNIFIED IDEOGRAPH - 0xDC56: 0x90F9, //CJK UNIFIED IDEOGRAPH - 0xDC57: 0x90FB, //CJK UNIFIED IDEOGRAPH - 0xDC58: 0x9101, //CJK UNIFIED IDEOGRAPH - 0xDC59: 0x9100, //CJK UNIFIED IDEOGRAPH - 0xDC5A: 0x9107, //CJK UNIFIED IDEOGRAPH - 0xDC5B: 0x9105, //CJK UNIFIED IDEOGRAPH - 0xDC5C: 0x9103, //CJK UNIFIED IDEOGRAPH - 0xDC5D: 0x9161, //CJK UNIFIED IDEOGRAPH - 0xDC5E: 0x9164, //CJK UNIFIED IDEOGRAPH - 0xDC5F: 0x915F, //CJK UNIFIED IDEOGRAPH - 0xDC60: 0x9162, //CJK UNIFIED IDEOGRAPH - 0xDC61: 0x9160, //CJK UNIFIED IDEOGRAPH - 0xDC62: 0x9201, //CJK UNIFIED IDEOGRAPH - 0xDC63: 0x920A, //CJK UNIFIED IDEOGRAPH - 0xDC64: 0x9225, //CJK UNIFIED IDEOGRAPH - 0xDC65: 0x9203, //CJK UNIFIED IDEOGRAPH - 0xDC66: 0x921A, //CJK UNIFIED IDEOGRAPH - 0xDC67: 0x9226, //CJK UNIFIED IDEOGRAPH - 0xDC68: 0x920F, //CJK UNIFIED IDEOGRAPH - 0xDC69: 0x920C, //CJK UNIFIED IDEOGRAPH - 0xDC6A: 0x9200, //CJK UNIFIED IDEOGRAPH - 0xDC6B: 0x9212, //CJK UNIFIED IDEOGRAPH - 0xDC6C: 0x91FF, //CJK UNIFIED IDEOGRAPH - 0xDC6D: 0x91FD, //CJK UNIFIED IDEOGRAPH - 0xDC6E: 0x9206, //CJK UNIFIED IDEOGRAPH - 0xDC6F: 0x9204, //CJK UNIFIED IDEOGRAPH - 0xDC70: 0x9227, //CJK UNIFIED IDEOGRAPH - 0xDC71: 0x9202, //CJK UNIFIED IDEOGRAPH - 0xDC72: 0x921C, //CJK UNIFIED IDEOGRAPH - 0xDC73: 0x9224, //CJK UNIFIED IDEOGRAPH - 0xDC74: 0x9219, //CJK UNIFIED IDEOGRAPH - 0xDC75: 0x9217, //CJK UNIFIED IDEOGRAPH - 0xDC76: 0x9205, //CJK UNIFIED IDEOGRAPH - 0xDC77: 0x9216, //CJK UNIFIED IDEOGRAPH - 0xDC78: 0x957B, //CJK UNIFIED IDEOGRAPH - 0xDC79: 0x958D, //CJK UNIFIED IDEOGRAPH - 0xDC7A: 0x958C, //CJK UNIFIED IDEOGRAPH - 0xDC7B: 0x9590, //CJK UNIFIED IDEOGRAPH - 0xDC7C: 0x9687, //CJK UNIFIED IDEOGRAPH - 0xDC7D: 0x967E, //CJK UNIFIED IDEOGRAPH - 0xDC7E: 0x9688, //CJK UNIFIED IDEOGRAPH - 0xDCA1: 0x9689, //CJK UNIFIED IDEOGRAPH - 0xDCA2: 0x9683, //CJK UNIFIED IDEOGRAPH - 0xDCA3: 0x9680, //CJK UNIFIED IDEOGRAPH - 0xDCA4: 0x96C2, //CJK UNIFIED IDEOGRAPH - 0xDCA5: 0x96C8, //CJK UNIFIED IDEOGRAPH - 0xDCA6: 0x96C3, //CJK UNIFIED IDEOGRAPH - 0xDCA7: 0x96F1, //CJK UNIFIED IDEOGRAPH - 0xDCA8: 0x96F0, //CJK UNIFIED IDEOGRAPH - 0xDCA9: 0x976C, //CJK UNIFIED IDEOGRAPH - 0xDCAA: 0x9770, //CJK UNIFIED IDEOGRAPH - 0xDCAB: 0x976E, //CJK UNIFIED IDEOGRAPH - 0xDCAC: 0x9807, //CJK UNIFIED IDEOGRAPH - 0xDCAD: 0x98A9, //CJK UNIFIED IDEOGRAPH - 0xDCAE: 0x98EB, //CJK UNIFIED IDEOGRAPH - 0xDCAF: 0x9CE6, //CJK UNIFIED IDEOGRAPH - 0xDCB0: 0x9EF9, //CJK UNIFIED IDEOGRAPH - 0xDCB1: 0x4E83, //CJK UNIFIED IDEOGRAPH - 0xDCB2: 0x4E84, //CJK UNIFIED IDEOGRAPH - 0xDCB3: 0x4EB6, //CJK UNIFIED IDEOGRAPH - 0xDCB4: 0x50BD, //CJK UNIFIED IDEOGRAPH - 0xDCB5: 0x50BF, //CJK UNIFIED IDEOGRAPH - 0xDCB6: 0x50C6, //CJK UNIFIED IDEOGRAPH - 0xDCB7: 0x50AE, //CJK UNIFIED IDEOGRAPH - 0xDCB8: 0x50C4, //CJK UNIFIED IDEOGRAPH - 0xDCB9: 0x50CA, //CJK UNIFIED IDEOGRAPH - 0xDCBA: 0x50B4, //CJK UNIFIED IDEOGRAPH - 0xDCBB: 0x50C8, //CJK UNIFIED IDEOGRAPH - 0xDCBC: 0x50C2, //CJK UNIFIED IDEOGRAPH - 0xDCBD: 0x50B0, //CJK UNIFIED IDEOGRAPH - 0xDCBE: 0x50C1, //CJK UNIFIED IDEOGRAPH - 0xDCBF: 0x50BA, //CJK UNIFIED IDEOGRAPH - 0xDCC0: 0x50B1, //CJK UNIFIED IDEOGRAPH - 0xDCC1: 0x50CB, //CJK UNIFIED IDEOGRAPH - 0xDCC2: 0x50C9, //CJK UNIFIED IDEOGRAPH - 0xDCC3: 0x50B6, //CJK UNIFIED IDEOGRAPH - 0xDCC4: 0x50B8, //CJK UNIFIED IDEOGRAPH - 0xDCC5: 0x51D7, //CJK UNIFIED IDEOGRAPH - 0xDCC6: 0x527A, //CJK UNIFIED IDEOGRAPH - 0xDCC7: 0x5278, //CJK UNIFIED IDEOGRAPH - 0xDCC8: 0x527B, //CJK UNIFIED IDEOGRAPH - 0xDCC9: 0x527C, //CJK UNIFIED IDEOGRAPH - 0xDCCA: 0x55C3, //CJK UNIFIED IDEOGRAPH - 0xDCCB: 0x55DB, //CJK UNIFIED IDEOGRAPH - 0xDCCC: 0x55CC, //CJK UNIFIED IDEOGRAPH - 0xDCCD: 0x55D0, //CJK UNIFIED IDEOGRAPH - 0xDCCE: 0x55CB, //CJK UNIFIED IDEOGRAPH - 0xDCCF: 0x55CA, //CJK UNIFIED IDEOGRAPH - 0xDCD0: 0x55DD, //CJK UNIFIED IDEOGRAPH - 0xDCD1: 0x55C0, //CJK UNIFIED IDEOGRAPH - 0xDCD2: 0x55D4, //CJK UNIFIED IDEOGRAPH - 0xDCD3: 0x55C4, //CJK UNIFIED IDEOGRAPH - 0xDCD4: 0x55E9, //CJK UNIFIED IDEOGRAPH - 0xDCD5: 0x55BF, //CJK UNIFIED IDEOGRAPH - 0xDCD6: 0x55D2, //CJK UNIFIED IDEOGRAPH - 0xDCD7: 0x558D, //CJK UNIFIED IDEOGRAPH - 0xDCD8: 0x55CF, //CJK UNIFIED IDEOGRAPH - 0xDCD9: 0x55D5, //CJK UNIFIED IDEOGRAPH - 0xDCDA: 0x55E2, //CJK UNIFIED IDEOGRAPH - 0xDCDB: 0x55D6, //CJK UNIFIED IDEOGRAPH - 0xDCDC: 0x55C8, //CJK UNIFIED IDEOGRAPH - 0xDCDD: 0x55F2, //CJK UNIFIED IDEOGRAPH - 0xDCDE: 0x55CD, //CJK UNIFIED IDEOGRAPH - 0xDCDF: 0x55D9, //CJK UNIFIED IDEOGRAPH - 0xDCE0: 0x55C2, //CJK UNIFIED IDEOGRAPH - 0xDCE1: 0x5714, //CJK UNIFIED IDEOGRAPH - 0xDCE2: 0x5853, //CJK UNIFIED IDEOGRAPH - 0xDCE3: 0x5868, //CJK UNIFIED IDEOGRAPH - 0xDCE4: 0x5864, //CJK UNIFIED IDEOGRAPH - 0xDCE5: 0x584F, //CJK UNIFIED IDEOGRAPH - 0xDCE6: 0x584D, //CJK UNIFIED IDEOGRAPH - 0xDCE7: 0x5849, //CJK UNIFIED IDEOGRAPH - 0xDCE8: 0x586F, //CJK UNIFIED IDEOGRAPH - 0xDCE9: 0x5855, //CJK UNIFIED IDEOGRAPH - 0xDCEA: 0x584E, //CJK UNIFIED IDEOGRAPH - 0xDCEB: 0x585D, //CJK UNIFIED IDEOGRAPH - 0xDCEC: 0x5859, //CJK UNIFIED IDEOGRAPH - 0xDCED: 0x5865, //CJK UNIFIED IDEOGRAPH - 0xDCEE: 0x585B, //CJK UNIFIED IDEOGRAPH - 0xDCEF: 0x583D, //CJK UNIFIED IDEOGRAPH - 0xDCF0: 0x5863, //CJK UNIFIED IDEOGRAPH - 0xDCF1: 0x5871, //CJK UNIFIED IDEOGRAPH - 0xDCF2: 0x58FC, //CJK UNIFIED IDEOGRAPH - 0xDCF3: 0x5AC7, //CJK UNIFIED IDEOGRAPH - 0xDCF4: 0x5AC4, //CJK UNIFIED IDEOGRAPH - 0xDCF5: 0x5ACB, //CJK UNIFIED IDEOGRAPH - 0xDCF6: 0x5ABA, //CJK UNIFIED IDEOGRAPH - 0xDCF7: 0x5AB8, //CJK UNIFIED IDEOGRAPH - 0xDCF8: 0x5AB1, //CJK UNIFIED IDEOGRAPH - 0xDCF9: 0x5AB5, //CJK UNIFIED IDEOGRAPH - 0xDCFA: 0x5AB0, //CJK UNIFIED IDEOGRAPH - 0xDCFB: 0x5ABF, //CJK UNIFIED IDEOGRAPH - 0xDCFC: 0x5AC8, //CJK UNIFIED IDEOGRAPH - 0xDCFD: 0x5ABB, //CJK UNIFIED IDEOGRAPH - 0xDCFE: 0x5AC6, //CJK UNIFIED IDEOGRAPH - 0xDD40: 0x5AB7, //CJK UNIFIED IDEOGRAPH - 0xDD41: 0x5AC0, //CJK UNIFIED IDEOGRAPH - 0xDD42: 0x5ACA, //CJK UNIFIED IDEOGRAPH - 0xDD43: 0x5AB4, //CJK UNIFIED IDEOGRAPH - 0xDD44: 0x5AB6, //CJK UNIFIED IDEOGRAPH - 0xDD45: 0x5ACD, //CJK UNIFIED IDEOGRAPH - 0xDD46: 0x5AB9, //CJK UNIFIED IDEOGRAPH - 0xDD47: 0x5A90, //CJK UNIFIED IDEOGRAPH - 0xDD48: 0x5BD6, //CJK UNIFIED IDEOGRAPH - 0xDD49: 0x5BD8, //CJK UNIFIED IDEOGRAPH - 0xDD4A: 0x5BD9, //CJK UNIFIED IDEOGRAPH - 0xDD4B: 0x5C1F, //CJK UNIFIED IDEOGRAPH - 0xDD4C: 0x5C33, //CJK UNIFIED IDEOGRAPH - 0xDD4D: 0x5D71, //CJK UNIFIED IDEOGRAPH - 0xDD4E: 0x5D63, //CJK UNIFIED IDEOGRAPH - 0xDD4F: 0x5D4A, //CJK UNIFIED IDEOGRAPH - 0xDD50: 0x5D65, //CJK UNIFIED IDEOGRAPH - 0xDD51: 0x5D72, //CJK UNIFIED IDEOGRAPH - 0xDD52: 0x5D6C, //CJK UNIFIED IDEOGRAPH - 0xDD53: 0x5D5E, //CJK UNIFIED IDEOGRAPH - 0xDD54: 0x5D68, //CJK UNIFIED IDEOGRAPH - 0xDD55: 0x5D67, //CJK UNIFIED IDEOGRAPH - 0xDD56: 0x5D62, //CJK UNIFIED IDEOGRAPH - 0xDD57: 0x5DF0, //CJK UNIFIED IDEOGRAPH - 0xDD58: 0x5E4F, //CJK UNIFIED IDEOGRAPH - 0xDD59: 0x5E4E, //CJK UNIFIED IDEOGRAPH - 0xDD5A: 0x5E4A, //CJK UNIFIED IDEOGRAPH - 0xDD5B: 0x5E4D, //CJK UNIFIED IDEOGRAPH - 0xDD5C: 0x5E4B, //CJK UNIFIED IDEOGRAPH - 0xDD5D: 0x5EC5, //CJK UNIFIED IDEOGRAPH - 0xDD5E: 0x5ECC, //CJK UNIFIED IDEOGRAPH - 0xDD5F: 0x5EC6, //CJK UNIFIED IDEOGRAPH - 0xDD60: 0x5ECB, //CJK UNIFIED IDEOGRAPH - 0xDD61: 0x5EC7, //CJK UNIFIED IDEOGRAPH - 0xDD62: 0x5F40, //CJK UNIFIED IDEOGRAPH - 0xDD63: 0x5FAF, //CJK UNIFIED IDEOGRAPH - 0xDD64: 0x5FAD, //CJK UNIFIED IDEOGRAPH - 0xDD65: 0x60F7, //CJK UNIFIED IDEOGRAPH - 0xDD66: 0x6149, //CJK UNIFIED IDEOGRAPH - 0xDD67: 0x614A, //CJK UNIFIED IDEOGRAPH - 0xDD68: 0x612B, //CJK UNIFIED IDEOGRAPH - 0xDD69: 0x6145, //CJK UNIFIED IDEOGRAPH - 0xDD6A: 0x6136, //CJK UNIFIED IDEOGRAPH - 0xDD6B: 0x6132, //CJK UNIFIED IDEOGRAPH - 0xDD6C: 0x612E, //CJK UNIFIED IDEOGRAPH - 0xDD6D: 0x6146, //CJK UNIFIED IDEOGRAPH - 0xDD6E: 0x612F, //CJK UNIFIED IDEOGRAPH - 0xDD6F: 0x614F, //CJK UNIFIED IDEOGRAPH - 0xDD70: 0x6129, //CJK UNIFIED IDEOGRAPH - 0xDD71: 0x6140, //CJK UNIFIED IDEOGRAPH - 0xDD72: 0x6220, //CJK UNIFIED IDEOGRAPH - 0xDD73: 0x9168, //CJK UNIFIED IDEOGRAPH - 0xDD74: 0x6223, //CJK UNIFIED IDEOGRAPH - 0xDD75: 0x6225, //CJK UNIFIED IDEOGRAPH - 0xDD76: 0x6224, //CJK UNIFIED IDEOGRAPH - 0xDD77: 0x63C5, //CJK UNIFIED IDEOGRAPH - 0xDD78: 0x63F1, //CJK UNIFIED IDEOGRAPH - 0xDD79: 0x63EB, //CJK UNIFIED IDEOGRAPH - 0xDD7A: 0x6410, //CJK UNIFIED IDEOGRAPH - 0xDD7B: 0x6412, //CJK UNIFIED IDEOGRAPH - 0xDD7C: 0x6409, //CJK UNIFIED IDEOGRAPH - 0xDD7D: 0x6420, //CJK UNIFIED IDEOGRAPH - 0xDD7E: 0x6424, //CJK UNIFIED IDEOGRAPH - 0xDDA1: 0x6433, //CJK UNIFIED IDEOGRAPH - 0xDDA2: 0x6443, //CJK UNIFIED IDEOGRAPH - 0xDDA3: 0x641F, //CJK UNIFIED IDEOGRAPH - 0xDDA4: 0x6415, //CJK UNIFIED IDEOGRAPH - 0xDDA5: 0x6418, //CJK UNIFIED IDEOGRAPH - 0xDDA6: 0x6439, //CJK UNIFIED IDEOGRAPH - 0xDDA7: 0x6437, //CJK UNIFIED IDEOGRAPH - 0xDDA8: 0x6422, //CJK UNIFIED IDEOGRAPH - 0xDDA9: 0x6423, //CJK UNIFIED IDEOGRAPH - 0xDDAA: 0x640C, //CJK UNIFIED IDEOGRAPH - 0xDDAB: 0x6426, //CJK UNIFIED IDEOGRAPH - 0xDDAC: 0x6430, //CJK UNIFIED IDEOGRAPH - 0xDDAD: 0x6428, //CJK UNIFIED IDEOGRAPH - 0xDDAE: 0x6441, //CJK UNIFIED IDEOGRAPH - 0xDDAF: 0x6435, //CJK UNIFIED IDEOGRAPH - 0xDDB0: 0x642F, //CJK UNIFIED IDEOGRAPH - 0xDDB1: 0x640A, //CJK UNIFIED IDEOGRAPH - 0xDDB2: 0x641A, //CJK UNIFIED IDEOGRAPH - 0xDDB3: 0x6440, //CJK UNIFIED IDEOGRAPH - 0xDDB4: 0x6425, //CJK UNIFIED IDEOGRAPH - 0xDDB5: 0x6427, //CJK UNIFIED IDEOGRAPH - 0xDDB6: 0x640B, //CJK UNIFIED IDEOGRAPH - 0xDDB7: 0x63E7, //CJK UNIFIED IDEOGRAPH - 0xDDB8: 0x641B, //CJK UNIFIED IDEOGRAPH - 0xDDB9: 0x642E, //CJK UNIFIED IDEOGRAPH - 0xDDBA: 0x6421, //CJK UNIFIED IDEOGRAPH - 0xDDBB: 0x640E, //CJK UNIFIED IDEOGRAPH - 0xDDBC: 0x656F, //CJK UNIFIED IDEOGRAPH - 0xDDBD: 0x6592, //CJK UNIFIED IDEOGRAPH - 0xDDBE: 0x65D3, //CJK UNIFIED IDEOGRAPH - 0xDDBF: 0x6686, //CJK UNIFIED IDEOGRAPH - 0xDDC0: 0x668C, //CJK UNIFIED IDEOGRAPH - 0xDDC1: 0x6695, //CJK UNIFIED IDEOGRAPH - 0xDDC2: 0x6690, //CJK UNIFIED IDEOGRAPH - 0xDDC3: 0x668B, //CJK UNIFIED IDEOGRAPH - 0xDDC4: 0x668A, //CJK UNIFIED IDEOGRAPH - 0xDDC5: 0x6699, //CJK UNIFIED IDEOGRAPH - 0xDDC6: 0x6694, //CJK UNIFIED IDEOGRAPH - 0xDDC7: 0x6678, //CJK UNIFIED IDEOGRAPH - 0xDDC8: 0x6720, //CJK UNIFIED IDEOGRAPH - 0xDDC9: 0x6966, //CJK UNIFIED IDEOGRAPH - 0xDDCA: 0x695F, //CJK UNIFIED IDEOGRAPH - 0xDDCB: 0x6938, //CJK UNIFIED IDEOGRAPH - 0xDDCC: 0x694E, //CJK UNIFIED IDEOGRAPH - 0xDDCD: 0x6962, //CJK UNIFIED IDEOGRAPH - 0xDDCE: 0x6971, //CJK UNIFIED IDEOGRAPH - 0xDDCF: 0x693F, //CJK UNIFIED IDEOGRAPH - 0xDDD0: 0x6945, //CJK UNIFIED IDEOGRAPH - 0xDDD1: 0x696A, //CJK UNIFIED IDEOGRAPH - 0xDDD2: 0x6939, //CJK UNIFIED IDEOGRAPH - 0xDDD3: 0x6942, //CJK UNIFIED IDEOGRAPH - 0xDDD4: 0x6957, //CJK UNIFIED IDEOGRAPH - 0xDDD5: 0x6959, //CJK UNIFIED IDEOGRAPH - 0xDDD6: 0x697A, //CJK UNIFIED IDEOGRAPH - 0xDDD7: 0x6948, //CJK UNIFIED IDEOGRAPH - 0xDDD8: 0x6949, //CJK UNIFIED IDEOGRAPH - 0xDDD9: 0x6935, //CJK UNIFIED IDEOGRAPH - 0xDDDA: 0x696C, //CJK UNIFIED IDEOGRAPH - 0xDDDB: 0x6933, //CJK UNIFIED IDEOGRAPH - 0xDDDC: 0x693D, //CJK UNIFIED IDEOGRAPH - 0xDDDD: 0x6965, //CJK UNIFIED IDEOGRAPH - 0xDDDE: 0x68F0, //CJK UNIFIED IDEOGRAPH - 0xDDDF: 0x6978, //CJK UNIFIED IDEOGRAPH - 0xDDE0: 0x6934, //CJK UNIFIED IDEOGRAPH - 0xDDE1: 0x6969, //CJK UNIFIED IDEOGRAPH - 0xDDE2: 0x6940, //CJK UNIFIED IDEOGRAPH - 0xDDE3: 0x696F, //CJK UNIFIED IDEOGRAPH - 0xDDE4: 0x6944, //CJK UNIFIED IDEOGRAPH - 0xDDE5: 0x6976, //CJK UNIFIED IDEOGRAPH - 0xDDE6: 0x6958, //CJK UNIFIED IDEOGRAPH - 0xDDE7: 0x6941, //CJK UNIFIED IDEOGRAPH - 0xDDE8: 0x6974, //CJK UNIFIED IDEOGRAPH - 0xDDE9: 0x694C, //CJK UNIFIED IDEOGRAPH - 0xDDEA: 0x693B, //CJK UNIFIED IDEOGRAPH - 0xDDEB: 0x694B, //CJK UNIFIED IDEOGRAPH - 0xDDEC: 0x6937, //CJK UNIFIED IDEOGRAPH - 0xDDED: 0x695C, //CJK UNIFIED IDEOGRAPH - 0xDDEE: 0x694F, //CJK UNIFIED IDEOGRAPH - 0xDDEF: 0x6951, //CJK UNIFIED IDEOGRAPH - 0xDDF0: 0x6932, //CJK UNIFIED IDEOGRAPH - 0xDDF1: 0x6952, //CJK UNIFIED IDEOGRAPH - 0xDDF2: 0x692F, //CJK UNIFIED IDEOGRAPH - 0xDDF3: 0x697B, //CJK UNIFIED IDEOGRAPH - 0xDDF4: 0x693C, //CJK UNIFIED IDEOGRAPH - 0xDDF5: 0x6B46, //CJK UNIFIED IDEOGRAPH - 0xDDF6: 0x6B45, //CJK UNIFIED IDEOGRAPH - 0xDDF7: 0x6B43, //CJK UNIFIED IDEOGRAPH - 0xDDF8: 0x6B42, //CJK UNIFIED IDEOGRAPH - 0xDDF9: 0x6B48, //CJK UNIFIED IDEOGRAPH - 0xDDFA: 0x6B41, //CJK UNIFIED IDEOGRAPH - 0xDDFB: 0x6B9B, //CJK UNIFIED IDEOGRAPH - 0xDDFC: 0xFA0D, //CJK COMPATIBILITY IDEOGRAPH - 0xDDFD: 0x6BFB, //CJK UNIFIED IDEOGRAPH - 0xDDFE: 0x6BFC, //CJK UNIFIED IDEOGRAPH - 0xDE40: 0x6BF9, //CJK UNIFIED IDEOGRAPH - 0xDE41: 0x6BF7, //CJK UNIFIED IDEOGRAPH - 0xDE42: 0x6BF8, //CJK UNIFIED IDEOGRAPH - 0xDE43: 0x6E9B, //CJK UNIFIED IDEOGRAPH - 0xDE44: 0x6ED6, //CJK UNIFIED IDEOGRAPH - 0xDE45: 0x6EC8, //CJK UNIFIED IDEOGRAPH - 0xDE46: 0x6E8F, //CJK UNIFIED IDEOGRAPH - 0xDE47: 0x6EC0, //CJK UNIFIED IDEOGRAPH - 0xDE48: 0x6E9F, //CJK UNIFIED IDEOGRAPH - 0xDE49: 0x6E93, //CJK UNIFIED IDEOGRAPH - 0xDE4A: 0x6E94, //CJK UNIFIED IDEOGRAPH - 0xDE4B: 0x6EA0, //CJK UNIFIED IDEOGRAPH - 0xDE4C: 0x6EB1, //CJK UNIFIED IDEOGRAPH - 0xDE4D: 0x6EB9, //CJK UNIFIED IDEOGRAPH - 0xDE4E: 0x6EC6, //CJK UNIFIED IDEOGRAPH - 0xDE4F: 0x6ED2, //CJK UNIFIED IDEOGRAPH - 0xDE50: 0x6EBD, //CJK UNIFIED IDEOGRAPH - 0xDE51: 0x6EC1, //CJK UNIFIED IDEOGRAPH - 0xDE52: 0x6E9E, //CJK UNIFIED IDEOGRAPH - 0xDE53: 0x6EC9, //CJK UNIFIED IDEOGRAPH - 0xDE54: 0x6EB7, //CJK UNIFIED IDEOGRAPH - 0xDE55: 0x6EB0, //CJK UNIFIED IDEOGRAPH - 0xDE56: 0x6ECD, //CJK UNIFIED IDEOGRAPH - 0xDE57: 0x6EA6, //CJK UNIFIED IDEOGRAPH - 0xDE58: 0x6ECF, //CJK UNIFIED IDEOGRAPH - 0xDE59: 0x6EB2, //CJK UNIFIED IDEOGRAPH - 0xDE5A: 0x6EBE, //CJK UNIFIED IDEOGRAPH - 0xDE5B: 0x6EC3, //CJK UNIFIED IDEOGRAPH - 0xDE5C: 0x6EDC, //CJK UNIFIED IDEOGRAPH - 0xDE5D: 0x6ED8, //CJK UNIFIED IDEOGRAPH - 0xDE5E: 0x6E99, //CJK UNIFIED IDEOGRAPH - 0xDE5F: 0x6E92, //CJK UNIFIED IDEOGRAPH - 0xDE60: 0x6E8E, //CJK UNIFIED IDEOGRAPH - 0xDE61: 0x6E8D, //CJK UNIFIED IDEOGRAPH - 0xDE62: 0x6EA4, //CJK UNIFIED IDEOGRAPH - 0xDE63: 0x6EA1, //CJK UNIFIED IDEOGRAPH - 0xDE64: 0x6EBF, //CJK UNIFIED IDEOGRAPH - 0xDE65: 0x6EB3, //CJK UNIFIED IDEOGRAPH - 0xDE66: 0x6ED0, //CJK UNIFIED IDEOGRAPH - 0xDE67: 0x6ECA, //CJK UNIFIED IDEOGRAPH - 0xDE68: 0x6E97, //CJK UNIFIED IDEOGRAPH - 0xDE69: 0x6EAE, //CJK UNIFIED IDEOGRAPH - 0xDE6A: 0x6EA3, //CJK UNIFIED IDEOGRAPH - 0xDE6B: 0x7147, //CJK UNIFIED IDEOGRAPH - 0xDE6C: 0x7154, //CJK UNIFIED IDEOGRAPH - 0xDE6D: 0x7152, //CJK UNIFIED IDEOGRAPH - 0xDE6E: 0x7163, //CJK UNIFIED IDEOGRAPH - 0xDE6F: 0x7160, //CJK UNIFIED IDEOGRAPH - 0xDE70: 0x7141, //CJK UNIFIED IDEOGRAPH - 0xDE71: 0x715D, //CJK UNIFIED IDEOGRAPH - 0xDE72: 0x7162, //CJK UNIFIED IDEOGRAPH - 0xDE73: 0x7172, //CJK UNIFIED IDEOGRAPH - 0xDE74: 0x7178, //CJK UNIFIED IDEOGRAPH - 0xDE75: 0x716A, //CJK UNIFIED IDEOGRAPH - 0xDE76: 0x7161, //CJK UNIFIED IDEOGRAPH - 0xDE77: 0x7142, //CJK UNIFIED IDEOGRAPH - 0xDE78: 0x7158, //CJK UNIFIED IDEOGRAPH - 0xDE79: 0x7143, //CJK UNIFIED IDEOGRAPH - 0xDE7A: 0x714B, //CJK UNIFIED IDEOGRAPH - 0xDE7B: 0x7170, //CJK UNIFIED IDEOGRAPH - 0xDE7C: 0x715F, //CJK UNIFIED IDEOGRAPH - 0xDE7D: 0x7150, //CJK UNIFIED IDEOGRAPH - 0xDE7E: 0x7153, //CJK UNIFIED IDEOGRAPH - 0xDEA1: 0x7144, //CJK UNIFIED IDEOGRAPH - 0xDEA2: 0x714D, //CJK UNIFIED IDEOGRAPH - 0xDEA3: 0x715A, //CJK UNIFIED IDEOGRAPH - 0xDEA4: 0x724F, //CJK UNIFIED IDEOGRAPH - 0xDEA5: 0x728D, //CJK UNIFIED IDEOGRAPH - 0xDEA6: 0x728C, //CJK UNIFIED IDEOGRAPH - 0xDEA7: 0x7291, //CJK UNIFIED IDEOGRAPH - 0xDEA8: 0x7290, //CJK UNIFIED IDEOGRAPH - 0xDEA9: 0x728E, //CJK UNIFIED IDEOGRAPH - 0xDEAA: 0x733C, //CJK UNIFIED IDEOGRAPH - 0xDEAB: 0x7342, //CJK UNIFIED IDEOGRAPH - 0xDEAC: 0x733B, //CJK UNIFIED IDEOGRAPH - 0xDEAD: 0x733A, //CJK UNIFIED IDEOGRAPH - 0xDEAE: 0x7340, //CJK UNIFIED IDEOGRAPH - 0xDEAF: 0x734A, //CJK UNIFIED IDEOGRAPH - 0xDEB0: 0x7349, //CJK UNIFIED IDEOGRAPH - 0xDEB1: 0x7444, //CJK UNIFIED IDEOGRAPH - 0xDEB2: 0x744A, //CJK UNIFIED IDEOGRAPH - 0xDEB3: 0x744B, //CJK UNIFIED IDEOGRAPH - 0xDEB4: 0x7452, //CJK UNIFIED IDEOGRAPH - 0xDEB5: 0x7451, //CJK UNIFIED IDEOGRAPH - 0xDEB6: 0x7457, //CJK UNIFIED IDEOGRAPH - 0xDEB7: 0x7440, //CJK UNIFIED IDEOGRAPH - 0xDEB8: 0x744F, //CJK UNIFIED IDEOGRAPH - 0xDEB9: 0x7450, //CJK UNIFIED IDEOGRAPH - 0xDEBA: 0x744E, //CJK UNIFIED IDEOGRAPH - 0xDEBB: 0x7442, //CJK UNIFIED IDEOGRAPH - 0xDEBC: 0x7446, //CJK UNIFIED IDEOGRAPH - 0xDEBD: 0x744D, //CJK UNIFIED IDEOGRAPH - 0xDEBE: 0x7454, //CJK UNIFIED IDEOGRAPH - 0xDEBF: 0x74E1, //CJK UNIFIED IDEOGRAPH - 0xDEC0: 0x74FF, //CJK UNIFIED IDEOGRAPH - 0xDEC1: 0x74FE, //CJK UNIFIED IDEOGRAPH - 0xDEC2: 0x74FD, //CJK UNIFIED IDEOGRAPH - 0xDEC3: 0x751D, //CJK UNIFIED IDEOGRAPH - 0xDEC4: 0x7579, //CJK UNIFIED IDEOGRAPH - 0xDEC5: 0x7577, //CJK UNIFIED IDEOGRAPH - 0xDEC6: 0x6983, //CJK UNIFIED IDEOGRAPH - 0xDEC7: 0x75EF, //CJK UNIFIED IDEOGRAPH - 0xDEC8: 0x760F, //CJK UNIFIED IDEOGRAPH - 0xDEC9: 0x7603, //CJK UNIFIED IDEOGRAPH - 0xDECA: 0x75F7, //CJK UNIFIED IDEOGRAPH - 0xDECB: 0x75FE, //CJK UNIFIED IDEOGRAPH - 0xDECC: 0x75FC, //CJK UNIFIED IDEOGRAPH - 0xDECD: 0x75F9, //CJK UNIFIED IDEOGRAPH - 0xDECE: 0x75F8, //CJK UNIFIED IDEOGRAPH - 0xDECF: 0x7610, //CJK UNIFIED IDEOGRAPH - 0xDED0: 0x75FB, //CJK UNIFIED IDEOGRAPH - 0xDED1: 0x75F6, //CJK UNIFIED IDEOGRAPH - 0xDED2: 0x75ED, //CJK UNIFIED IDEOGRAPH - 0xDED3: 0x75F5, //CJK UNIFIED IDEOGRAPH - 0xDED4: 0x75FD, //CJK UNIFIED IDEOGRAPH - 0xDED5: 0x7699, //CJK UNIFIED IDEOGRAPH - 0xDED6: 0x76B5, //CJK UNIFIED IDEOGRAPH - 0xDED7: 0x76DD, //CJK UNIFIED IDEOGRAPH - 0xDED8: 0x7755, //CJK UNIFIED IDEOGRAPH - 0xDED9: 0x775F, //CJK UNIFIED IDEOGRAPH - 0xDEDA: 0x7760, //CJK UNIFIED IDEOGRAPH - 0xDEDB: 0x7752, //CJK UNIFIED IDEOGRAPH - 0xDEDC: 0x7756, //CJK UNIFIED IDEOGRAPH - 0xDEDD: 0x775A, //CJK UNIFIED IDEOGRAPH - 0xDEDE: 0x7769, //CJK UNIFIED IDEOGRAPH - 0xDEDF: 0x7767, //CJK UNIFIED IDEOGRAPH - 0xDEE0: 0x7754, //CJK UNIFIED IDEOGRAPH - 0xDEE1: 0x7759, //CJK UNIFIED IDEOGRAPH - 0xDEE2: 0x776D, //CJK UNIFIED IDEOGRAPH - 0xDEE3: 0x77E0, //CJK UNIFIED IDEOGRAPH - 0xDEE4: 0x7887, //CJK UNIFIED IDEOGRAPH - 0xDEE5: 0x789A, //CJK UNIFIED IDEOGRAPH - 0xDEE6: 0x7894, //CJK UNIFIED IDEOGRAPH - 0xDEE7: 0x788F, //CJK UNIFIED IDEOGRAPH - 0xDEE8: 0x7884, //CJK UNIFIED IDEOGRAPH - 0xDEE9: 0x7895, //CJK UNIFIED IDEOGRAPH - 0xDEEA: 0x7885, //CJK UNIFIED IDEOGRAPH - 0xDEEB: 0x7886, //CJK UNIFIED IDEOGRAPH - 0xDEEC: 0x78A1, //CJK UNIFIED IDEOGRAPH - 0xDEED: 0x7883, //CJK UNIFIED IDEOGRAPH - 0xDEEE: 0x7879, //CJK UNIFIED IDEOGRAPH - 0xDEEF: 0x7899, //CJK UNIFIED IDEOGRAPH - 0xDEF0: 0x7880, //CJK UNIFIED IDEOGRAPH - 0xDEF1: 0x7896, //CJK UNIFIED IDEOGRAPH - 0xDEF2: 0x787B, //CJK UNIFIED IDEOGRAPH - 0xDEF3: 0x797C, //CJK UNIFIED IDEOGRAPH - 0xDEF4: 0x7982, //CJK UNIFIED IDEOGRAPH - 0xDEF5: 0x797D, //CJK UNIFIED IDEOGRAPH - 0xDEF6: 0x7979, //CJK UNIFIED IDEOGRAPH - 0xDEF7: 0x7A11, //CJK UNIFIED IDEOGRAPH - 0xDEF8: 0x7A18, //CJK UNIFIED IDEOGRAPH - 0xDEF9: 0x7A19, //CJK UNIFIED IDEOGRAPH - 0xDEFA: 0x7A12, //CJK UNIFIED IDEOGRAPH - 0xDEFB: 0x7A17, //CJK UNIFIED IDEOGRAPH - 0xDEFC: 0x7A15, //CJK UNIFIED IDEOGRAPH - 0xDEFD: 0x7A22, //CJK UNIFIED IDEOGRAPH - 0xDEFE: 0x7A13, //CJK UNIFIED IDEOGRAPH - 0xDF40: 0x7A1B, //CJK UNIFIED IDEOGRAPH - 0xDF41: 0x7A10, //CJK UNIFIED IDEOGRAPH - 0xDF42: 0x7AA3, //CJK UNIFIED IDEOGRAPH - 0xDF43: 0x7AA2, //CJK UNIFIED IDEOGRAPH - 0xDF44: 0x7A9E, //CJK UNIFIED IDEOGRAPH - 0xDF45: 0x7AEB, //CJK UNIFIED IDEOGRAPH - 0xDF46: 0x7B66, //CJK UNIFIED IDEOGRAPH - 0xDF47: 0x7B64, //CJK UNIFIED IDEOGRAPH - 0xDF48: 0x7B6D, //CJK UNIFIED IDEOGRAPH - 0xDF49: 0x7B74, //CJK UNIFIED IDEOGRAPH - 0xDF4A: 0x7B69, //CJK UNIFIED IDEOGRAPH - 0xDF4B: 0x7B72, //CJK UNIFIED IDEOGRAPH - 0xDF4C: 0x7B65, //CJK UNIFIED IDEOGRAPH - 0xDF4D: 0x7B73, //CJK UNIFIED IDEOGRAPH - 0xDF4E: 0x7B71, //CJK UNIFIED IDEOGRAPH - 0xDF4F: 0x7B70, //CJK UNIFIED IDEOGRAPH - 0xDF50: 0x7B61, //CJK UNIFIED IDEOGRAPH - 0xDF51: 0x7B78, //CJK UNIFIED IDEOGRAPH - 0xDF52: 0x7B76, //CJK UNIFIED IDEOGRAPH - 0xDF53: 0x7B63, //CJK UNIFIED IDEOGRAPH - 0xDF54: 0x7CB2, //CJK UNIFIED IDEOGRAPH - 0xDF55: 0x7CB4, //CJK UNIFIED IDEOGRAPH - 0xDF56: 0x7CAF, //CJK UNIFIED IDEOGRAPH - 0xDF57: 0x7D88, //CJK UNIFIED IDEOGRAPH - 0xDF58: 0x7D86, //CJK UNIFIED IDEOGRAPH - 0xDF59: 0x7D80, //CJK UNIFIED IDEOGRAPH - 0xDF5A: 0x7D8D, //CJK UNIFIED IDEOGRAPH - 0xDF5B: 0x7D7F, //CJK UNIFIED IDEOGRAPH - 0xDF5C: 0x7D85, //CJK UNIFIED IDEOGRAPH - 0xDF5D: 0x7D7A, //CJK UNIFIED IDEOGRAPH - 0xDF5E: 0x7D8E, //CJK UNIFIED IDEOGRAPH - 0xDF5F: 0x7D7B, //CJK UNIFIED IDEOGRAPH - 0xDF60: 0x7D83, //CJK UNIFIED IDEOGRAPH - 0xDF61: 0x7D7C, //CJK UNIFIED IDEOGRAPH - 0xDF62: 0x7D8C, //CJK UNIFIED IDEOGRAPH - 0xDF63: 0x7D94, //CJK UNIFIED IDEOGRAPH - 0xDF64: 0x7D84, //CJK UNIFIED IDEOGRAPH - 0xDF65: 0x7D7D, //CJK UNIFIED IDEOGRAPH - 0xDF66: 0x7D92, //CJK UNIFIED IDEOGRAPH - 0xDF67: 0x7F6D, //CJK UNIFIED IDEOGRAPH - 0xDF68: 0x7F6B, //CJK UNIFIED IDEOGRAPH - 0xDF69: 0x7F67, //CJK UNIFIED IDEOGRAPH - 0xDF6A: 0x7F68, //CJK UNIFIED IDEOGRAPH - 0xDF6B: 0x7F6C, //CJK UNIFIED IDEOGRAPH - 0xDF6C: 0x7FA6, //CJK UNIFIED IDEOGRAPH - 0xDF6D: 0x7FA5, //CJK UNIFIED IDEOGRAPH - 0xDF6E: 0x7FA7, //CJK UNIFIED IDEOGRAPH - 0xDF6F: 0x7FDB, //CJK UNIFIED IDEOGRAPH - 0xDF70: 0x7FDC, //CJK UNIFIED IDEOGRAPH - 0xDF71: 0x8021, //CJK UNIFIED IDEOGRAPH - 0xDF72: 0x8164, //CJK UNIFIED IDEOGRAPH - 0xDF73: 0x8160, //CJK UNIFIED IDEOGRAPH - 0xDF74: 0x8177, //CJK UNIFIED IDEOGRAPH - 0xDF75: 0x815C, //CJK UNIFIED IDEOGRAPH - 0xDF76: 0x8169, //CJK UNIFIED IDEOGRAPH - 0xDF77: 0x815B, //CJK UNIFIED IDEOGRAPH - 0xDF78: 0x8162, //CJK UNIFIED IDEOGRAPH - 0xDF79: 0x8172, //CJK UNIFIED IDEOGRAPH - 0xDF7A: 0x6721, //CJK UNIFIED IDEOGRAPH - 0xDF7B: 0x815E, //CJK UNIFIED IDEOGRAPH - 0xDF7C: 0x8176, //CJK UNIFIED IDEOGRAPH - 0xDF7D: 0x8167, //CJK UNIFIED IDEOGRAPH - 0xDF7E: 0x816F, //CJK UNIFIED IDEOGRAPH - 0xDFA1: 0x8144, //CJK UNIFIED IDEOGRAPH - 0xDFA2: 0x8161, //CJK UNIFIED IDEOGRAPH - 0xDFA3: 0x821D, //CJK UNIFIED IDEOGRAPH - 0xDFA4: 0x8249, //CJK UNIFIED IDEOGRAPH - 0xDFA5: 0x8244, //CJK UNIFIED IDEOGRAPH - 0xDFA6: 0x8240, //CJK UNIFIED IDEOGRAPH - 0xDFA7: 0x8242, //CJK UNIFIED IDEOGRAPH - 0xDFA8: 0x8245, //CJK UNIFIED IDEOGRAPH - 0xDFA9: 0x84F1, //CJK UNIFIED IDEOGRAPH - 0xDFAA: 0x843F, //CJK UNIFIED IDEOGRAPH - 0xDFAB: 0x8456, //CJK UNIFIED IDEOGRAPH - 0xDFAC: 0x8476, //CJK UNIFIED IDEOGRAPH - 0xDFAD: 0x8479, //CJK UNIFIED IDEOGRAPH - 0xDFAE: 0x848F, //CJK UNIFIED IDEOGRAPH - 0xDFAF: 0x848D, //CJK UNIFIED IDEOGRAPH - 0xDFB0: 0x8465, //CJK UNIFIED IDEOGRAPH - 0xDFB1: 0x8451, //CJK UNIFIED IDEOGRAPH - 0xDFB2: 0x8440, //CJK UNIFIED IDEOGRAPH - 0xDFB3: 0x8486, //CJK UNIFIED IDEOGRAPH - 0xDFB4: 0x8467, //CJK UNIFIED IDEOGRAPH - 0xDFB5: 0x8430, //CJK UNIFIED IDEOGRAPH - 0xDFB6: 0x844D, //CJK UNIFIED IDEOGRAPH - 0xDFB7: 0x847D, //CJK UNIFIED IDEOGRAPH - 0xDFB8: 0x845A, //CJK UNIFIED IDEOGRAPH - 0xDFB9: 0x8459, //CJK UNIFIED IDEOGRAPH - 0xDFBA: 0x8474, //CJK UNIFIED IDEOGRAPH - 0xDFBB: 0x8473, //CJK UNIFIED IDEOGRAPH - 0xDFBC: 0x845D, //CJK UNIFIED IDEOGRAPH - 0xDFBD: 0x8507, //CJK UNIFIED IDEOGRAPH - 0xDFBE: 0x845E, //CJK UNIFIED IDEOGRAPH - 0xDFBF: 0x8437, //CJK UNIFIED IDEOGRAPH - 0xDFC0: 0x843A, //CJK UNIFIED IDEOGRAPH - 0xDFC1: 0x8434, //CJK UNIFIED IDEOGRAPH - 0xDFC2: 0x847A, //CJK UNIFIED IDEOGRAPH - 0xDFC3: 0x8443, //CJK UNIFIED IDEOGRAPH - 0xDFC4: 0x8478, //CJK UNIFIED IDEOGRAPH - 0xDFC5: 0x8432, //CJK UNIFIED IDEOGRAPH - 0xDFC6: 0x8445, //CJK UNIFIED IDEOGRAPH - 0xDFC7: 0x8429, //CJK UNIFIED IDEOGRAPH - 0xDFC8: 0x83D9, //CJK UNIFIED IDEOGRAPH - 0xDFC9: 0x844B, //CJK UNIFIED IDEOGRAPH - 0xDFCA: 0x842F, //CJK UNIFIED IDEOGRAPH - 0xDFCB: 0x8442, //CJK UNIFIED IDEOGRAPH - 0xDFCC: 0x842D, //CJK UNIFIED IDEOGRAPH - 0xDFCD: 0x845F, //CJK UNIFIED IDEOGRAPH - 0xDFCE: 0x8470, //CJK UNIFIED IDEOGRAPH - 0xDFCF: 0x8439, //CJK UNIFIED IDEOGRAPH - 0xDFD0: 0x844E, //CJK UNIFIED IDEOGRAPH - 0xDFD1: 0x844C, //CJK UNIFIED IDEOGRAPH - 0xDFD2: 0x8452, //CJK UNIFIED IDEOGRAPH - 0xDFD3: 0x846F, //CJK UNIFIED IDEOGRAPH - 0xDFD4: 0x84C5, //CJK UNIFIED IDEOGRAPH - 0xDFD5: 0x848E, //CJK UNIFIED IDEOGRAPH - 0xDFD6: 0x843B, //CJK UNIFIED IDEOGRAPH - 0xDFD7: 0x8447, //CJK UNIFIED IDEOGRAPH - 0xDFD8: 0x8436, //CJK UNIFIED IDEOGRAPH - 0xDFD9: 0x8433, //CJK UNIFIED IDEOGRAPH - 0xDFDA: 0x8468, //CJK UNIFIED IDEOGRAPH - 0xDFDB: 0x847E, //CJK UNIFIED IDEOGRAPH - 0xDFDC: 0x8444, //CJK UNIFIED IDEOGRAPH - 0xDFDD: 0x842B, //CJK UNIFIED IDEOGRAPH - 0xDFDE: 0x8460, //CJK UNIFIED IDEOGRAPH - 0xDFDF: 0x8454, //CJK UNIFIED IDEOGRAPH - 0xDFE0: 0x846E, //CJK UNIFIED IDEOGRAPH - 0xDFE1: 0x8450, //CJK UNIFIED IDEOGRAPH - 0xDFE2: 0x870B, //CJK UNIFIED IDEOGRAPH - 0xDFE3: 0x8704, //CJK UNIFIED IDEOGRAPH - 0xDFE4: 0x86F7, //CJK UNIFIED IDEOGRAPH - 0xDFE5: 0x870C, //CJK UNIFIED IDEOGRAPH - 0xDFE6: 0x86FA, //CJK UNIFIED IDEOGRAPH - 0xDFE7: 0x86D6, //CJK UNIFIED IDEOGRAPH - 0xDFE8: 0x86F5, //CJK UNIFIED IDEOGRAPH - 0xDFE9: 0x874D, //CJK UNIFIED IDEOGRAPH - 0xDFEA: 0x86F8, //CJK UNIFIED IDEOGRAPH - 0xDFEB: 0x870E, //CJK UNIFIED IDEOGRAPH - 0xDFEC: 0x8709, //CJK UNIFIED IDEOGRAPH - 0xDFED: 0x8701, //CJK UNIFIED IDEOGRAPH - 0xDFEE: 0x86F6, //CJK UNIFIED IDEOGRAPH - 0xDFEF: 0x870D, //CJK UNIFIED IDEOGRAPH - 0xDFF0: 0x8705, //CJK UNIFIED IDEOGRAPH - 0xDFF1: 0x88D6, //CJK UNIFIED IDEOGRAPH - 0xDFF2: 0x88CB, //CJK UNIFIED IDEOGRAPH - 0xDFF3: 0x88CD, //CJK UNIFIED IDEOGRAPH - 0xDFF4: 0x88CE, //CJK UNIFIED IDEOGRAPH - 0xDFF5: 0x88DE, //CJK UNIFIED IDEOGRAPH - 0xDFF6: 0x88DB, //CJK UNIFIED IDEOGRAPH - 0xDFF7: 0x88DA, //CJK UNIFIED IDEOGRAPH - 0xDFF8: 0x88CC, //CJK UNIFIED IDEOGRAPH - 0xDFF9: 0x88D0, //CJK UNIFIED IDEOGRAPH - 0xDFFA: 0x8985, //CJK UNIFIED IDEOGRAPH - 0xDFFB: 0x899B, //CJK UNIFIED IDEOGRAPH - 0xDFFC: 0x89DF, //CJK UNIFIED IDEOGRAPH - 0xDFFD: 0x89E5, //CJK UNIFIED IDEOGRAPH - 0xDFFE: 0x89E4, //CJK UNIFIED IDEOGRAPH - 0xE040: 0x89E1, //CJK UNIFIED IDEOGRAPH - 0xE041: 0x89E0, //CJK UNIFIED IDEOGRAPH - 0xE042: 0x89E2, //CJK UNIFIED IDEOGRAPH - 0xE043: 0x89DC, //CJK UNIFIED IDEOGRAPH - 0xE044: 0x89E6, //CJK UNIFIED IDEOGRAPH - 0xE045: 0x8A76, //CJK UNIFIED IDEOGRAPH - 0xE046: 0x8A86, //CJK UNIFIED IDEOGRAPH - 0xE047: 0x8A7F, //CJK UNIFIED IDEOGRAPH - 0xE048: 0x8A61, //CJK UNIFIED IDEOGRAPH - 0xE049: 0x8A3F, //CJK UNIFIED IDEOGRAPH - 0xE04A: 0x8A77, //CJK UNIFIED IDEOGRAPH - 0xE04B: 0x8A82, //CJK UNIFIED IDEOGRAPH - 0xE04C: 0x8A84, //CJK UNIFIED IDEOGRAPH - 0xE04D: 0x8A75, //CJK UNIFIED IDEOGRAPH - 0xE04E: 0x8A83, //CJK UNIFIED IDEOGRAPH - 0xE04F: 0x8A81, //CJK UNIFIED IDEOGRAPH - 0xE050: 0x8A74, //CJK UNIFIED IDEOGRAPH - 0xE051: 0x8A7A, //CJK UNIFIED IDEOGRAPH - 0xE052: 0x8C3C, //CJK UNIFIED IDEOGRAPH - 0xE053: 0x8C4B, //CJK UNIFIED IDEOGRAPH - 0xE054: 0x8C4A, //CJK UNIFIED IDEOGRAPH - 0xE055: 0x8C65, //CJK UNIFIED IDEOGRAPH - 0xE056: 0x8C64, //CJK UNIFIED IDEOGRAPH - 0xE057: 0x8C66, //CJK UNIFIED IDEOGRAPH - 0xE058: 0x8C86, //CJK UNIFIED IDEOGRAPH - 0xE059: 0x8C84, //CJK UNIFIED IDEOGRAPH - 0xE05A: 0x8C85, //CJK UNIFIED IDEOGRAPH - 0xE05B: 0x8CCC, //CJK UNIFIED IDEOGRAPH - 0xE05C: 0x8D68, //CJK UNIFIED IDEOGRAPH - 0xE05D: 0x8D69, //CJK UNIFIED IDEOGRAPH - 0xE05E: 0x8D91, //CJK UNIFIED IDEOGRAPH - 0xE05F: 0x8D8C, //CJK UNIFIED IDEOGRAPH - 0xE060: 0x8D8E, //CJK UNIFIED IDEOGRAPH - 0xE061: 0x8D8F, //CJK UNIFIED IDEOGRAPH - 0xE062: 0x8D8D, //CJK UNIFIED IDEOGRAPH - 0xE063: 0x8D93, //CJK UNIFIED IDEOGRAPH - 0xE064: 0x8D94, //CJK UNIFIED IDEOGRAPH - 0xE065: 0x8D90, //CJK UNIFIED IDEOGRAPH - 0xE066: 0x8D92, //CJK UNIFIED IDEOGRAPH - 0xE067: 0x8DF0, //CJK UNIFIED IDEOGRAPH - 0xE068: 0x8DE0, //CJK UNIFIED IDEOGRAPH - 0xE069: 0x8DEC, //CJK UNIFIED IDEOGRAPH - 0xE06A: 0x8DF1, //CJK UNIFIED IDEOGRAPH - 0xE06B: 0x8DEE, //CJK UNIFIED IDEOGRAPH - 0xE06C: 0x8DD0, //CJK UNIFIED IDEOGRAPH - 0xE06D: 0x8DE9, //CJK UNIFIED IDEOGRAPH - 0xE06E: 0x8DE3, //CJK UNIFIED IDEOGRAPH - 0xE06F: 0x8DE2, //CJK UNIFIED IDEOGRAPH - 0xE070: 0x8DE7, //CJK UNIFIED IDEOGRAPH - 0xE071: 0x8DF2, //CJK UNIFIED IDEOGRAPH - 0xE072: 0x8DEB, //CJK UNIFIED IDEOGRAPH - 0xE073: 0x8DF4, //CJK UNIFIED IDEOGRAPH - 0xE074: 0x8F06, //CJK UNIFIED IDEOGRAPH - 0xE075: 0x8EFF, //CJK UNIFIED IDEOGRAPH - 0xE076: 0x8F01, //CJK UNIFIED IDEOGRAPH - 0xE077: 0x8F00, //CJK UNIFIED IDEOGRAPH - 0xE078: 0x8F05, //CJK UNIFIED IDEOGRAPH - 0xE079: 0x8F07, //CJK UNIFIED IDEOGRAPH - 0xE07A: 0x8F08, //CJK UNIFIED IDEOGRAPH - 0xE07B: 0x8F02, //CJK UNIFIED IDEOGRAPH - 0xE07C: 0x8F0B, //CJK UNIFIED IDEOGRAPH - 0xE07D: 0x9052, //CJK UNIFIED IDEOGRAPH - 0xE07E: 0x903F, //CJK UNIFIED IDEOGRAPH - 0xE0A1: 0x9044, //CJK UNIFIED IDEOGRAPH - 0xE0A2: 0x9049, //CJK UNIFIED IDEOGRAPH - 0xE0A3: 0x903D, //CJK UNIFIED IDEOGRAPH - 0xE0A4: 0x9110, //CJK UNIFIED IDEOGRAPH - 0xE0A5: 0x910D, //CJK UNIFIED IDEOGRAPH - 0xE0A6: 0x910F, //CJK UNIFIED IDEOGRAPH - 0xE0A7: 0x9111, //CJK UNIFIED IDEOGRAPH - 0xE0A8: 0x9116, //CJK UNIFIED IDEOGRAPH - 0xE0A9: 0x9114, //CJK UNIFIED IDEOGRAPH - 0xE0AA: 0x910B, //CJK UNIFIED IDEOGRAPH - 0xE0AB: 0x910E, //CJK UNIFIED IDEOGRAPH - 0xE0AC: 0x916E, //CJK UNIFIED IDEOGRAPH - 0xE0AD: 0x916F, //CJK UNIFIED IDEOGRAPH - 0xE0AE: 0x9248, //CJK UNIFIED IDEOGRAPH - 0xE0AF: 0x9252, //CJK UNIFIED IDEOGRAPH - 0xE0B0: 0x9230, //CJK UNIFIED IDEOGRAPH - 0xE0B1: 0x923A, //CJK UNIFIED IDEOGRAPH - 0xE0B2: 0x9266, //CJK UNIFIED IDEOGRAPH - 0xE0B3: 0x9233, //CJK UNIFIED IDEOGRAPH - 0xE0B4: 0x9265, //CJK UNIFIED IDEOGRAPH - 0xE0B5: 0x925E, //CJK UNIFIED IDEOGRAPH - 0xE0B6: 0x9283, //CJK UNIFIED IDEOGRAPH - 0xE0B7: 0x922E, //CJK UNIFIED IDEOGRAPH - 0xE0B8: 0x924A, //CJK UNIFIED IDEOGRAPH - 0xE0B9: 0x9246, //CJK UNIFIED IDEOGRAPH - 0xE0BA: 0x926D, //CJK UNIFIED IDEOGRAPH - 0xE0BB: 0x926C, //CJK UNIFIED IDEOGRAPH - 0xE0BC: 0x924F, //CJK UNIFIED IDEOGRAPH - 0xE0BD: 0x9260, //CJK UNIFIED IDEOGRAPH - 0xE0BE: 0x9267, //CJK UNIFIED IDEOGRAPH - 0xE0BF: 0x926F, //CJK UNIFIED IDEOGRAPH - 0xE0C0: 0x9236, //CJK UNIFIED IDEOGRAPH - 0xE0C1: 0x9261, //CJK UNIFIED IDEOGRAPH - 0xE0C2: 0x9270, //CJK UNIFIED IDEOGRAPH - 0xE0C3: 0x9231, //CJK UNIFIED IDEOGRAPH - 0xE0C4: 0x9254, //CJK UNIFIED IDEOGRAPH - 0xE0C5: 0x9263, //CJK UNIFIED IDEOGRAPH - 0xE0C6: 0x9250, //CJK UNIFIED IDEOGRAPH - 0xE0C7: 0x9272, //CJK UNIFIED IDEOGRAPH - 0xE0C8: 0x924E, //CJK UNIFIED IDEOGRAPH - 0xE0C9: 0x9253, //CJK UNIFIED IDEOGRAPH - 0xE0CA: 0x924C, //CJK UNIFIED IDEOGRAPH - 0xE0CB: 0x9256, //CJK UNIFIED IDEOGRAPH - 0xE0CC: 0x9232, //CJK UNIFIED IDEOGRAPH - 0xE0CD: 0x959F, //CJK UNIFIED IDEOGRAPH - 0xE0CE: 0x959C, //CJK UNIFIED IDEOGRAPH - 0xE0CF: 0x959E, //CJK UNIFIED IDEOGRAPH - 0xE0D0: 0x959B, //CJK UNIFIED IDEOGRAPH - 0xE0D1: 0x9692, //CJK UNIFIED IDEOGRAPH - 0xE0D2: 0x9693, //CJK UNIFIED IDEOGRAPH - 0xE0D3: 0x9691, //CJK UNIFIED IDEOGRAPH - 0xE0D4: 0x9697, //CJK UNIFIED IDEOGRAPH - 0xE0D5: 0x96CE, //CJK UNIFIED IDEOGRAPH - 0xE0D6: 0x96FA, //CJK UNIFIED IDEOGRAPH - 0xE0D7: 0x96FD, //CJK UNIFIED IDEOGRAPH - 0xE0D8: 0x96F8, //CJK UNIFIED IDEOGRAPH - 0xE0D9: 0x96F5, //CJK UNIFIED IDEOGRAPH - 0xE0DA: 0x9773, //CJK UNIFIED IDEOGRAPH - 0xE0DB: 0x9777, //CJK UNIFIED IDEOGRAPH - 0xE0DC: 0x9778, //CJK UNIFIED IDEOGRAPH - 0xE0DD: 0x9772, //CJK UNIFIED IDEOGRAPH - 0xE0DE: 0x980F, //CJK UNIFIED IDEOGRAPH - 0xE0DF: 0x980D, //CJK UNIFIED IDEOGRAPH - 0xE0E0: 0x980E, //CJK UNIFIED IDEOGRAPH - 0xE0E1: 0x98AC, //CJK UNIFIED IDEOGRAPH - 0xE0E2: 0x98F6, //CJK UNIFIED IDEOGRAPH - 0xE0E3: 0x98F9, //CJK UNIFIED IDEOGRAPH - 0xE0E4: 0x99AF, //CJK UNIFIED IDEOGRAPH - 0xE0E5: 0x99B2, //CJK UNIFIED IDEOGRAPH - 0xE0E6: 0x99B0, //CJK UNIFIED IDEOGRAPH - 0xE0E7: 0x99B5, //CJK UNIFIED IDEOGRAPH - 0xE0E8: 0x9AAD, //CJK UNIFIED IDEOGRAPH - 0xE0E9: 0x9AAB, //CJK UNIFIED IDEOGRAPH - 0xE0EA: 0x9B5B, //CJK UNIFIED IDEOGRAPH - 0xE0EB: 0x9CEA, //CJK UNIFIED IDEOGRAPH - 0xE0EC: 0x9CED, //CJK UNIFIED IDEOGRAPH - 0xE0ED: 0x9CE7, //CJK UNIFIED IDEOGRAPH - 0xE0EE: 0x9E80, //CJK UNIFIED IDEOGRAPH - 0xE0EF: 0x9EFD, //CJK UNIFIED IDEOGRAPH - 0xE0F0: 0x50E6, //CJK UNIFIED IDEOGRAPH - 0xE0F1: 0x50D4, //CJK UNIFIED IDEOGRAPH - 0xE0F2: 0x50D7, //CJK UNIFIED IDEOGRAPH - 0xE0F3: 0x50E8, //CJK UNIFIED IDEOGRAPH - 0xE0F4: 0x50F3, //CJK UNIFIED IDEOGRAPH - 0xE0F5: 0x50DB, //CJK UNIFIED IDEOGRAPH - 0xE0F6: 0x50EA, //CJK UNIFIED IDEOGRAPH - 0xE0F7: 0x50DD, //CJK UNIFIED IDEOGRAPH - 0xE0F8: 0x50E4, //CJK UNIFIED IDEOGRAPH - 0xE0F9: 0x50D3, //CJK UNIFIED IDEOGRAPH - 0xE0FA: 0x50EC, //CJK UNIFIED IDEOGRAPH - 0xE0FB: 0x50F0, //CJK UNIFIED IDEOGRAPH - 0xE0FC: 0x50EF, //CJK UNIFIED IDEOGRAPH - 0xE0FD: 0x50E3, //CJK UNIFIED IDEOGRAPH - 0xE0FE: 0x50E0, //CJK UNIFIED IDEOGRAPH - 0xE140: 0x51D8, //CJK UNIFIED IDEOGRAPH - 0xE141: 0x5280, //CJK UNIFIED IDEOGRAPH - 0xE142: 0x5281, //CJK UNIFIED IDEOGRAPH - 0xE143: 0x52E9, //CJK UNIFIED IDEOGRAPH - 0xE144: 0x52EB, //CJK UNIFIED IDEOGRAPH - 0xE145: 0x5330, //CJK UNIFIED IDEOGRAPH - 0xE146: 0x53AC, //CJK UNIFIED IDEOGRAPH - 0xE147: 0x5627, //CJK UNIFIED IDEOGRAPH - 0xE148: 0x5615, //CJK UNIFIED IDEOGRAPH - 0xE149: 0x560C, //CJK UNIFIED IDEOGRAPH - 0xE14A: 0x5612, //CJK UNIFIED IDEOGRAPH - 0xE14B: 0x55FC, //CJK UNIFIED IDEOGRAPH - 0xE14C: 0x560F, //CJK UNIFIED IDEOGRAPH - 0xE14D: 0x561C, //CJK UNIFIED IDEOGRAPH - 0xE14E: 0x5601, //CJK UNIFIED IDEOGRAPH - 0xE14F: 0x5613, //CJK UNIFIED IDEOGRAPH - 0xE150: 0x5602, //CJK UNIFIED IDEOGRAPH - 0xE151: 0x55FA, //CJK UNIFIED IDEOGRAPH - 0xE152: 0x561D, //CJK UNIFIED IDEOGRAPH - 0xE153: 0x5604, //CJK UNIFIED IDEOGRAPH - 0xE154: 0x55FF, //CJK UNIFIED IDEOGRAPH - 0xE155: 0x55F9, //CJK UNIFIED IDEOGRAPH - 0xE156: 0x5889, //CJK UNIFIED IDEOGRAPH - 0xE157: 0x587C, //CJK UNIFIED IDEOGRAPH - 0xE158: 0x5890, //CJK UNIFIED IDEOGRAPH - 0xE159: 0x5898, //CJK UNIFIED IDEOGRAPH - 0xE15A: 0x5886, //CJK UNIFIED IDEOGRAPH - 0xE15B: 0x5881, //CJK UNIFIED IDEOGRAPH - 0xE15C: 0x587F, //CJK UNIFIED IDEOGRAPH - 0xE15D: 0x5874, //CJK UNIFIED IDEOGRAPH - 0xE15E: 0x588B, //CJK UNIFIED IDEOGRAPH - 0xE15F: 0x587A, //CJK UNIFIED IDEOGRAPH - 0xE160: 0x5887, //CJK UNIFIED IDEOGRAPH - 0xE161: 0x5891, //CJK UNIFIED IDEOGRAPH - 0xE162: 0x588E, //CJK UNIFIED IDEOGRAPH - 0xE163: 0x5876, //CJK UNIFIED IDEOGRAPH - 0xE164: 0x5882, //CJK UNIFIED IDEOGRAPH - 0xE165: 0x5888, //CJK UNIFIED IDEOGRAPH - 0xE166: 0x587B, //CJK UNIFIED IDEOGRAPH - 0xE167: 0x5894, //CJK UNIFIED IDEOGRAPH - 0xE168: 0x588F, //CJK UNIFIED IDEOGRAPH - 0xE169: 0x58FE, //CJK UNIFIED IDEOGRAPH - 0xE16A: 0x596B, //CJK UNIFIED IDEOGRAPH - 0xE16B: 0x5ADC, //CJK UNIFIED IDEOGRAPH - 0xE16C: 0x5AEE, //CJK UNIFIED IDEOGRAPH - 0xE16D: 0x5AE5, //CJK UNIFIED IDEOGRAPH - 0xE16E: 0x5AD5, //CJK UNIFIED IDEOGRAPH - 0xE16F: 0x5AEA, //CJK UNIFIED IDEOGRAPH - 0xE170: 0x5ADA, //CJK UNIFIED IDEOGRAPH - 0xE171: 0x5AED, //CJK UNIFIED IDEOGRAPH - 0xE172: 0x5AEB, //CJK UNIFIED IDEOGRAPH - 0xE173: 0x5AF3, //CJK UNIFIED IDEOGRAPH - 0xE174: 0x5AE2, //CJK UNIFIED IDEOGRAPH - 0xE175: 0x5AE0, //CJK UNIFIED IDEOGRAPH - 0xE176: 0x5ADB, //CJK UNIFIED IDEOGRAPH - 0xE177: 0x5AEC, //CJK UNIFIED IDEOGRAPH - 0xE178: 0x5ADE, //CJK UNIFIED IDEOGRAPH - 0xE179: 0x5ADD, //CJK UNIFIED IDEOGRAPH - 0xE17A: 0x5AD9, //CJK UNIFIED IDEOGRAPH - 0xE17B: 0x5AE8, //CJK UNIFIED IDEOGRAPH - 0xE17C: 0x5ADF, //CJK UNIFIED IDEOGRAPH - 0xE17D: 0x5B77, //CJK UNIFIED IDEOGRAPH - 0xE17E: 0x5BE0, //CJK UNIFIED IDEOGRAPH - 0xE1A1: 0x5BE3, //CJK UNIFIED IDEOGRAPH - 0xE1A2: 0x5C63, //CJK UNIFIED IDEOGRAPH - 0xE1A3: 0x5D82, //CJK UNIFIED IDEOGRAPH - 0xE1A4: 0x5D80, //CJK UNIFIED IDEOGRAPH - 0xE1A5: 0x5D7D, //CJK UNIFIED IDEOGRAPH - 0xE1A6: 0x5D86, //CJK UNIFIED IDEOGRAPH - 0xE1A7: 0x5D7A, //CJK UNIFIED IDEOGRAPH - 0xE1A8: 0x5D81, //CJK UNIFIED IDEOGRAPH - 0xE1A9: 0x5D77, //CJK UNIFIED IDEOGRAPH - 0xE1AA: 0x5D8A, //CJK UNIFIED IDEOGRAPH - 0xE1AB: 0x5D89, //CJK UNIFIED IDEOGRAPH - 0xE1AC: 0x5D88, //CJK UNIFIED IDEOGRAPH - 0xE1AD: 0x5D7E, //CJK UNIFIED IDEOGRAPH - 0xE1AE: 0x5D7C, //CJK UNIFIED IDEOGRAPH - 0xE1AF: 0x5D8D, //CJK UNIFIED IDEOGRAPH - 0xE1B0: 0x5D79, //CJK UNIFIED IDEOGRAPH - 0xE1B1: 0x5D7F, //CJK UNIFIED IDEOGRAPH - 0xE1B2: 0x5E58, //CJK UNIFIED IDEOGRAPH - 0xE1B3: 0x5E59, //CJK UNIFIED IDEOGRAPH - 0xE1B4: 0x5E53, //CJK UNIFIED IDEOGRAPH - 0xE1B5: 0x5ED8, //CJK UNIFIED IDEOGRAPH - 0xE1B6: 0x5ED1, //CJK UNIFIED IDEOGRAPH - 0xE1B7: 0x5ED7, //CJK UNIFIED IDEOGRAPH - 0xE1B8: 0x5ECE, //CJK UNIFIED IDEOGRAPH - 0xE1B9: 0x5EDC, //CJK UNIFIED IDEOGRAPH - 0xE1BA: 0x5ED5, //CJK UNIFIED IDEOGRAPH - 0xE1BB: 0x5ED9, //CJK UNIFIED IDEOGRAPH - 0xE1BC: 0x5ED2, //CJK UNIFIED IDEOGRAPH - 0xE1BD: 0x5ED4, //CJK UNIFIED IDEOGRAPH - 0xE1BE: 0x5F44, //CJK UNIFIED IDEOGRAPH - 0xE1BF: 0x5F43, //CJK UNIFIED IDEOGRAPH - 0xE1C0: 0x5F6F, //CJK UNIFIED IDEOGRAPH - 0xE1C1: 0x5FB6, //CJK UNIFIED IDEOGRAPH - 0xE1C2: 0x612C, //CJK UNIFIED IDEOGRAPH - 0xE1C3: 0x6128, //CJK UNIFIED IDEOGRAPH - 0xE1C4: 0x6141, //CJK UNIFIED IDEOGRAPH - 0xE1C5: 0x615E, //CJK UNIFIED IDEOGRAPH - 0xE1C6: 0x6171, //CJK UNIFIED IDEOGRAPH - 0xE1C7: 0x6173, //CJK UNIFIED IDEOGRAPH - 0xE1C8: 0x6152, //CJK UNIFIED IDEOGRAPH - 0xE1C9: 0x6153, //CJK UNIFIED IDEOGRAPH - 0xE1CA: 0x6172, //CJK UNIFIED IDEOGRAPH - 0xE1CB: 0x616C, //CJK UNIFIED IDEOGRAPH - 0xE1CC: 0x6180, //CJK UNIFIED IDEOGRAPH - 0xE1CD: 0x6174, //CJK UNIFIED IDEOGRAPH - 0xE1CE: 0x6154, //CJK UNIFIED IDEOGRAPH - 0xE1CF: 0x617A, //CJK UNIFIED IDEOGRAPH - 0xE1D0: 0x615B, //CJK UNIFIED IDEOGRAPH - 0xE1D1: 0x6165, //CJK UNIFIED IDEOGRAPH - 0xE1D2: 0x613B, //CJK UNIFIED IDEOGRAPH - 0xE1D3: 0x616A, //CJK UNIFIED IDEOGRAPH - 0xE1D4: 0x6161, //CJK UNIFIED IDEOGRAPH - 0xE1D5: 0x6156, //CJK UNIFIED IDEOGRAPH - 0xE1D6: 0x6229, //CJK UNIFIED IDEOGRAPH - 0xE1D7: 0x6227, //CJK UNIFIED IDEOGRAPH - 0xE1D8: 0x622B, //CJK UNIFIED IDEOGRAPH - 0xE1D9: 0x642B, //CJK UNIFIED IDEOGRAPH - 0xE1DA: 0x644D, //CJK UNIFIED IDEOGRAPH - 0xE1DB: 0x645B, //CJK UNIFIED IDEOGRAPH - 0xE1DC: 0x645D, //CJK UNIFIED IDEOGRAPH - 0xE1DD: 0x6474, //CJK UNIFIED IDEOGRAPH - 0xE1DE: 0x6476, //CJK UNIFIED IDEOGRAPH - 0xE1DF: 0x6472, //CJK UNIFIED IDEOGRAPH - 0xE1E0: 0x6473, //CJK UNIFIED IDEOGRAPH - 0xE1E1: 0x647D, //CJK UNIFIED IDEOGRAPH - 0xE1E2: 0x6475, //CJK UNIFIED IDEOGRAPH - 0xE1E3: 0x6466, //CJK UNIFIED IDEOGRAPH - 0xE1E4: 0x64A6, //CJK UNIFIED IDEOGRAPH - 0xE1E5: 0x644E, //CJK UNIFIED IDEOGRAPH - 0xE1E6: 0x6482, //CJK UNIFIED IDEOGRAPH - 0xE1E7: 0x645E, //CJK UNIFIED IDEOGRAPH - 0xE1E8: 0x645C, //CJK UNIFIED IDEOGRAPH - 0xE1E9: 0x644B, //CJK UNIFIED IDEOGRAPH - 0xE1EA: 0x6453, //CJK UNIFIED IDEOGRAPH - 0xE1EB: 0x6460, //CJK UNIFIED IDEOGRAPH - 0xE1EC: 0x6450, //CJK UNIFIED IDEOGRAPH - 0xE1ED: 0x647F, //CJK UNIFIED IDEOGRAPH - 0xE1EE: 0x643F, //CJK UNIFIED IDEOGRAPH - 0xE1EF: 0x646C, //CJK UNIFIED IDEOGRAPH - 0xE1F0: 0x646B, //CJK UNIFIED IDEOGRAPH - 0xE1F1: 0x6459, //CJK UNIFIED IDEOGRAPH - 0xE1F2: 0x6465, //CJK UNIFIED IDEOGRAPH - 0xE1F3: 0x6477, //CJK UNIFIED IDEOGRAPH - 0xE1F4: 0x6573, //CJK UNIFIED IDEOGRAPH - 0xE1F5: 0x65A0, //CJK UNIFIED IDEOGRAPH - 0xE1F6: 0x66A1, //CJK UNIFIED IDEOGRAPH - 0xE1F7: 0x66A0, //CJK UNIFIED IDEOGRAPH - 0xE1F8: 0x669F, //CJK UNIFIED IDEOGRAPH - 0xE1F9: 0x6705, //CJK UNIFIED IDEOGRAPH - 0xE1FA: 0x6704, //CJK UNIFIED IDEOGRAPH - 0xE1FB: 0x6722, //CJK UNIFIED IDEOGRAPH - 0xE1FC: 0x69B1, //CJK UNIFIED IDEOGRAPH - 0xE1FD: 0x69B6, //CJK UNIFIED IDEOGRAPH - 0xE1FE: 0x69C9, //CJK UNIFIED IDEOGRAPH - 0xE240: 0x69A0, //CJK UNIFIED IDEOGRAPH - 0xE241: 0x69CE, //CJK UNIFIED IDEOGRAPH - 0xE242: 0x6996, //CJK UNIFIED IDEOGRAPH - 0xE243: 0x69B0, //CJK UNIFIED IDEOGRAPH - 0xE244: 0x69AC, //CJK UNIFIED IDEOGRAPH - 0xE245: 0x69BC, //CJK UNIFIED IDEOGRAPH - 0xE246: 0x6991, //CJK UNIFIED IDEOGRAPH - 0xE247: 0x6999, //CJK UNIFIED IDEOGRAPH - 0xE248: 0x698E, //CJK UNIFIED IDEOGRAPH - 0xE249: 0x69A7, //CJK UNIFIED IDEOGRAPH - 0xE24A: 0x698D, //CJK UNIFIED IDEOGRAPH - 0xE24B: 0x69A9, //CJK UNIFIED IDEOGRAPH - 0xE24C: 0x69BE, //CJK UNIFIED IDEOGRAPH - 0xE24D: 0x69AF, //CJK UNIFIED IDEOGRAPH - 0xE24E: 0x69BF, //CJK UNIFIED IDEOGRAPH - 0xE24F: 0x69C4, //CJK UNIFIED IDEOGRAPH - 0xE250: 0x69BD, //CJK UNIFIED IDEOGRAPH - 0xE251: 0x69A4, //CJK UNIFIED IDEOGRAPH - 0xE252: 0x69D4, //CJK UNIFIED IDEOGRAPH - 0xE253: 0x69B9, //CJK UNIFIED IDEOGRAPH - 0xE254: 0x69CA, //CJK UNIFIED IDEOGRAPH - 0xE255: 0x699A, //CJK UNIFIED IDEOGRAPH - 0xE256: 0x69CF, //CJK UNIFIED IDEOGRAPH - 0xE257: 0x69B3, //CJK UNIFIED IDEOGRAPH - 0xE258: 0x6993, //CJK UNIFIED IDEOGRAPH - 0xE259: 0x69AA, //CJK UNIFIED IDEOGRAPH - 0xE25A: 0x69A1, //CJK UNIFIED IDEOGRAPH - 0xE25B: 0x699E, //CJK UNIFIED IDEOGRAPH - 0xE25C: 0x69D9, //CJK UNIFIED IDEOGRAPH - 0xE25D: 0x6997, //CJK UNIFIED IDEOGRAPH - 0xE25E: 0x6990, //CJK UNIFIED IDEOGRAPH - 0xE25F: 0x69C2, //CJK UNIFIED IDEOGRAPH - 0xE260: 0x69B5, //CJK UNIFIED IDEOGRAPH - 0xE261: 0x69A5, //CJK UNIFIED IDEOGRAPH - 0xE262: 0x69C6, //CJK UNIFIED IDEOGRAPH - 0xE263: 0x6B4A, //CJK UNIFIED IDEOGRAPH - 0xE264: 0x6B4D, //CJK UNIFIED IDEOGRAPH - 0xE265: 0x6B4B, //CJK UNIFIED IDEOGRAPH - 0xE266: 0x6B9E, //CJK UNIFIED IDEOGRAPH - 0xE267: 0x6B9F, //CJK UNIFIED IDEOGRAPH - 0xE268: 0x6BA0, //CJK UNIFIED IDEOGRAPH - 0xE269: 0x6BC3, //CJK UNIFIED IDEOGRAPH - 0xE26A: 0x6BC4, //CJK UNIFIED IDEOGRAPH - 0xE26B: 0x6BFE, //CJK UNIFIED IDEOGRAPH - 0xE26C: 0x6ECE, //CJK UNIFIED IDEOGRAPH - 0xE26D: 0x6EF5, //CJK UNIFIED IDEOGRAPH - 0xE26E: 0x6EF1, //CJK UNIFIED IDEOGRAPH - 0xE26F: 0x6F03, //CJK UNIFIED IDEOGRAPH - 0xE270: 0x6F25, //CJK UNIFIED IDEOGRAPH - 0xE271: 0x6EF8, //CJK UNIFIED IDEOGRAPH - 0xE272: 0x6F37, //CJK UNIFIED IDEOGRAPH - 0xE273: 0x6EFB, //CJK UNIFIED IDEOGRAPH - 0xE274: 0x6F2E, //CJK UNIFIED IDEOGRAPH - 0xE275: 0x6F09, //CJK UNIFIED IDEOGRAPH - 0xE276: 0x6F4E, //CJK UNIFIED IDEOGRAPH - 0xE277: 0x6F19, //CJK UNIFIED IDEOGRAPH - 0xE278: 0x6F1A, //CJK UNIFIED IDEOGRAPH - 0xE279: 0x6F27, //CJK UNIFIED IDEOGRAPH - 0xE27A: 0x6F18, //CJK UNIFIED IDEOGRAPH - 0xE27B: 0x6F3B, //CJK UNIFIED IDEOGRAPH - 0xE27C: 0x6F12, //CJK UNIFIED IDEOGRAPH - 0xE27D: 0x6EED, //CJK UNIFIED IDEOGRAPH - 0xE27E: 0x6F0A, //CJK UNIFIED IDEOGRAPH - 0xE2A1: 0x6F36, //CJK UNIFIED IDEOGRAPH - 0xE2A2: 0x6F73, //CJK UNIFIED IDEOGRAPH - 0xE2A3: 0x6EF9, //CJK UNIFIED IDEOGRAPH - 0xE2A4: 0x6EEE, //CJK UNIFIED IDEOGRAPH - 0xE2A5: 0x6F2D, //CJK UNIFIED IDEOGRAPH - 0xE2A6: 0x6F40, //CJK UNIFIED IDEOGRAPH - 0xE2A7: 0x6F30, //CJK UNIFIED IDEOGRAPH - 0xE2A8: 0x6F3C, //CJK UNIFIED IDEOGRAPH - 0xE2A9: 0x6F35, //CJK UNIFIED IDEOGRAPH - 0xE2AA: 0x6EEB, //CJK UNIFIED IDEOGRAPH - 0xE2AB: 0x6F07, //CJK UNIFIED IDEOGRAPH - 0xE2AC: 0x6F0E, //CJK UNIFIED IDEOGRAPH - 0xE2AD: 0x6F43, //CJK UNIFIED IDEOGRAPH - 0xE2AE: 0x6F05, //CJK UNIFIED IDEOGRAPH - 0xE2AF: 0x6EFD, //CJK UNIFIED IDEOGRAPH - 0xE2B0: 0x6EF6, //CJK UNIFIED IDEOGRAPH - 0xE2B1: 0x6F39, //CJK UNIFIED IDEOGRAPH - 0xE2B2: 0x6F1C, //CJK UNIFIED IDEOGRAPH - 0xE2B3: 0x6EFC, //CJK UNIFIED IDEOGRAPH - 0xE2B4: 0x6F3A, //CJK UNIFIED IDEOGRAPH - 0xE2B5: 0x6F1F, //CJK UNIFIED IDEOGRAPH - 0xE2B6: 0x6F0D, //CJK UNIFIED IDEOGRAPH - 0xE2B7: 0x6F1E, //CJK UNIFIED IDEOGRAPH - 0xE2B8: 0x6F08, //CJK UNIFIED IDEOGRAPH - 0xE2B9: 0x6F21, //CJK UNIFIED IDEOGRAPH - 0xE2BA: 0x7187, //CJK UNIFIED IDEOGRAPH - 0xE2BB: 0x7190, //CJK UNIFIED IDEOGRAPH - 0xE2BC: 0x7189, //CJK UNIFIED IDEOGRAPH - 0xE2BD: 0x7180, //CJK UNIFIED IDEOGRAPH - 0xE2BE: 0x7185, //CJK UNIFIED IDEOGRAPH - 0xE2BF: 0x7182, //CJK UNIFIED IDEOGRAPH - 0xE2C0: 0x718F, //CJK UNIFIED IDEOGRAPH - 0xE2C1: 0x717B, //CJK UNIFIED IDEOGRAPH - 0xE2C2: 0x7186, //CJK UNIFIED IDEOGRAPH - 0xE2C3: 0x7181, //CJK UNIFIED IDEOGRAPH - 0xE2C4: 0x7197, //CJK UNIFIED IDEOGRAPH - 0xE2C5: 0x7244, //CJK UNIFIED IDEOGRAPH - 0xE2C6: 0x7253, //CJK UNIFIED IDEOGRAPH - 0xE2C7: 0x7297, //CJK UNIFIED IDEOGRAPH - 0xE2C8: 0x7295, //CJK UNIFIED IDEOGRAPH - 0xE2C9: 0x7293, //CJK UNIFIED IDEOGRAPH - 0xE2CA: 0x7343, //CJK UNIFIED IDEOGRAPH - 0xE2CB: 0x734D, //CJK UNIFIED IDEOGRAPH - 0xE2CC: 0x7351, //CJK UNIFIED IDEOGRAPH - 0xE2CD: 0x734C, //CJK UNIFIED IDEOGRAPH - 0xE2CE: 0x7462, //CJK UNIFIED IDEOGRAPH - 0xE2CF: 0x7473, //CJK UNIFIED IDEOGRAPH - 0xE2D0: 0x7471, //CJK UNIFIED IDEOGRAPH - 0xE2D1: 0x7475, //CJK UNIFIED IDEOGRAPH - 0xE2D2: 0x7472, //CJK UNIFIED IDEOGRAPH - 0xE2D3: 0x7467, //CJK UNIFIED IDEOGRAPH - 0xE2D4: 0x746E, //CJK UNIFIED IDEOGRAPH - 0xE2D5: 0x7500, //CJK UNIFIED IDEOGRAPH - 0xE2D6: 0x7502, //CJK UNIFIED IDEOGRAPH - 0xE2D7: 0x7503, //CJK UNIFIED IDEOGRAPH - 0xE2D8: 0x757D, //CJK UNIFIED IDEOGRAPH - 0xE2D9: 0x7590, //CJK UNIFIED IDEOGRAPH - 0xE2DA: 0x7616, //CJK UNIFIED IDEOGRAPH - 0xE2DB: 0x7608, //CJK UNIFIED IDEOGRAPH - 0xE2DC: 0x760C, //CJK UNIFIED IDEOGRAPH - 0xE2DD: 0x7615, //CJK UNIFIED IDEOGRAPH - 0xE2DE: 0x7611, //CJK UNIFIED IDEOGRAPH - 0xE2DF: 0x760A, //CJK UNIFIED IDEOGRAPH - 0xE2E0: 0x7614, //CJK UNIFIED IDEOGRAPH - 0xE2E1: 0x76B8, //CJK UNIFIED IDEOGRAPH - 0xE2E2: 0x7781, //CJK UNIFIED IDEOGRAPH - 0xE2E3: 0x777C, //CJK UNIFIED IDEOGRAPH - 0xE2E4: 0x7785, //CJK UNIFIED IDEOGRAPH - 0xE2E5: 0x7782, //CJK UNIFIED IDEOGRAPH - 0xE2E6: 0x776E, //CJK UNIFIED IDEOGRAPH - 0xE2E7: 0x7780, //CJK UNIFIED IDEOGRAPH - 0xE2E8: 0x776F, //CJK UNIFIED IDEOGRAPH - 0xE2E9: 0x777E, //CJK UNIFIED IDEOGRAPH - 0xE2EA: 0x7783, //CJK UNIFIED IDEOGRAPH - 0xE2EB: 0x78B2, //CJK UNIFIED IDEOGRAPH - 0xE2EC: 0x78AA, //CJK UNIFIED IDEOGRAPH - 0xE2ED: 0x78B4, //CJK UNIFIED IDEOGRAPH - 0xE2EE: 0x78AD, //CJK UNIFIED IDEOGRAPH - 0xE2EF: 0x78A8, //CJK UNIFIED IDEOGRAPH - 0xE2F0: 0x787E, //CJK UNIFIED IDEOGRAPH - 0xE2F1: 0x78AB, //CJK UNIFIED IDEOGRAPH - 0xE2F2: 0x789E, //CJK UNIFIED IDEOGRAPH - 0xE2F3: 0x78A5, //CJK UNIFIED IDEOGRAPH - 0xE2F4: 0x78A0, //CJK UNIFIED IDEOGRAPH - 0xE2F5: 0x78AC, //CJK UNIFIED IDEOGRAPH - 0xE2F6: 0x78A2, //CJK UNIFIED IDEOGRAPH - 0xE2F7: 0x78A4, //CJK UNIFIED IDEOGRAPH - 0xE2F8: 0x7998, //CJK UNIFIED IDEOGRAPH - 0xE2F9: 0x798A, //CJK UNIFIED IDEOGRAPH - 0xE2FA: 0x798B, //CJK UNIFIED IDEOGRAPH - 0xE2FB: 0x7996, //CJK UNIFIED IDEOGRAPH - 0xE2FC: 0x7995, //CJK UNIFIED IDEOGRAPH - 0xE2FD: 0x7994, //CJK UNIFIED IDEOGRAPH - 0xE2FE: 0x7993, //CJK UNIFIED IDEOGRAPH - 0xE340: 0x7997, //CJK UNIFIED IDEOGRAPH - 0xE341: 0x7988, //CJK UNIFIED IDEOGRAPH - 0xE342: 0x7992, //CJK UNIFIED IDEOGRAPH - 0xE343: 0x7990, //CJK UNIFIED IDEOGRAPH - 0xE344: 0x7A2B, //CJK UNIFIED IDEOGRAPH - 0xE345: 0x7A4A, //CJK UNIFIED IDEOGRAPH - 0xE346: 0x7A30, //CJK UNIFIED IDEOGRAPH - 0xE347: 0x7A2F, //CJK UNIFIED IDEOGRAPH - 0xE348: 0x7A28, //CJK UNIFIED IDEOGRAPH - 0xE349: 0x7A26, //CJK UNIFIED IDEOGRAPH - 0xE34A: 0x7AA8, //CJK UNIFIED IDEOGRAPH - 0xE34B: 0x7AAB, //CJK UNIFIED IDEOGRAPH - 0xE34C: 0x7AAC, //CJK UNIFIED IDEOGRAPH - 0xE34D: 0x7AEE, //CJK UNIFIED IDEOGRAPH - 0xE34E: 0x7B88, //CJK UNIFIED IDEOGRAPH - 0xE34F: 0x7B9C, //CJK UNIFIED IDEOGRAPH - 0xE350: 0x7B8A, //CJK UNIFIED IDEOGRAPH - 0xE351: 0x7B91, //CJK UNIFIED IDEOGRAPH - 0xE352: 0x7B90, //CJK UNIFIED IDEOGRAPH - 0xE353: 0x7B96, //CJK UNIFIED IDEOGRAPH - 0xE354: 0x7B8D, //CJK UNIFIED IDEOGRAPH - 0xE355: 0x7B8C, //CJK UNIFIED IDEOGRAPH - 0xE356: 0x7B9B, //CJK UNIFIED IDEOGRAPH - 0xE357: 0x7B8E, //CJK UNIFIED IDEOGRAPH - 0xE358: 0x7B85, //CJK UNIFIED IDEOGRAPH - 0xE359: 0x7B98, //CJK UNIFIED IDEOGRAPH - 0xE35A: 0x5284, //CJK UNIFIED IDEOGRAPH - 0xE35B: 0x7B99, //CJK UNIFIED IDEOGRAPH - 0xE35C: 0x7BA4, //CJK UNIFIED IDEOGRAPH - 0xE35D: 0x7B82, //CJK UNIFIED IDEOGRAPH - 0xE35E: 0x7CBB, //CJK UNIFIED IDEOGRAPH - 0xE35F: 0x7CBF, //CJK UNIFIED IDEOGRAPH - 0xE360: 0x7CBC, //CJK UNIFIED IDEOGRAPH - 0xE361: 0x7CBA, //CJK UNIFIED IDEOGRAPH - 0xE362: 0x7DA7, //CJK UNIFIED IDEOGRAPH - 0xE363: 0x7DB7, //CJK UNIFIED IDEOGRAPH - 0xE364: 0x7DC2, //CJK UNIFIED IDEOGRAPH - 0xE365: 0x7DA3, //CJK UNIFIED IDEOGRAPH - 0xE366: 0x7DAA, //CJK UNIFIED IDEOGRAPH - 0xE367: 0x7DC1, //CJK UNIFIED IDEOGRAPH - 0xE368: 0x7DC0, //CJK UNIFIED IDEOGRAPH - 0xE369: 0x7DC5, //CJK UNIFIED IDEOGRAPH - 0xE36A: 0x7D9D, //CJK UNIFIED IDEOGRAPH - 0xE36B: 0x7DCE, //CJK UNIFIED IDEOGRAPH - 0xE36C: 0x7DC4, //CJK UNIFIED IDEOGRAPH - 0xE36D: 0x7DC6, //CJK UNIFIED IDEOGRAPH - 0xE36E: 0x7DCB, //CJK UNIFIED IDEOGRAPH - 0xE36F: 0x7DCC, //CJK UNIFIED IDEOGRAPH - 0xE370: 0x7DAF, //CJK UNIFIED IDEOGRAPH - 0xE371: 0x7DB9, //CJK UNIFIED IDEOGRAPH - 0xE372: 0x7D96, //CJK UNIFIED IDEOGRAPH - 0xE373: 0x7DBC, //CJK UNIFIED IDEOGRAPH - 0xE374: 0x7D9F, //CJK UNIFIED IDEOGRAPH - 0xE375: 0x7DA6, //CJK UNIFIED IDEOGRAPH - 0xE376: 0x7DAE, //CJK UNIFIED IDEOGRAPH - 0xE377: 0x7DA9, //CJK UNIFIED IDEOGRAPH - 0xE378: 0x7DA1, //CJK UNIFIED IDEOGRAPH - 0xE379: 0x7DC9, //CJK UNIFIED IDEOGRAPH - 0xE37A: 0x7F73, //CJK UNIFIED IDEOGRAPH - 0xE37B: 0x7FE2, //CJK UNIFIED IDEOGRAPH - 0xE37C: 0x7FE3, //CJK UNIFIED IDEOGRAPH - 0xE37D: 0x7FE5, //CJK UNIFIED IDEOGRAPH - 0xE37E: 0x7FDE, //CJK UNIFIED IDEOGRAPH - 0xE3A1: 0x8024, //CJK UNIFIED IDEOGRAPH - 0xE3A2: 0x805D, //CJK UNIFIED IDEOGRAPH - 0xE3A3: 0x805C, //CJK UNIFIED IDEOGRAPH - 0xE3A4: 0x8189, //CJK UNIFIED IDEOGRAPH - 0xE3A5: 0x8186, //CJK UNIFIED IDEOGRAPH - 0xE3A6: 0x8183, //CJK UNIFIED IDEOGRAPH - 0xE3A7: 0x8187, //CJK UNIFIED IDEOGRAPH - 0xE3A8: 0x818D, //CJK UNIFIED IDEOGRAPH - 0xE3A9: 0x818C, //CJK UNIFIED IDEOGRAPH - 0xE3AA: 0x818B, //CJK UNIFIED IDEOGRAPH - 0xE3AB: 0x8215, //CJK UNIFIED IDEOGRAPH - 0xE3AC: 0x8497, //CJK UNIFIED IDEOGRAPH - 0xE3AD: 0x84A4, //CJK UNIFIED IDEOGRAPH - 0xE3AE: 0x84A1, //CJK UNIFIED IDEOGRAPH - 0xE3AF: 0x849F, //CJK UNIFIED IDEOGRAPH - 0xE3B0: 0x84BA, //CJK UNIFIED IDEOGRAPH - 0xE3B1: 0x84CE, //CJK UNIFIED IDEOGRAPH - 0xE3B2: 0x84C2, //CJK UNIFIED IDEOGRAPH - 0xE3B3: 0x84AC, //CJK UNIFIED IDEOGRAPH - 0xE3B4: 0x84AE, //CJK UNIFIED IDEOGRAPH - 0xE3B5: 0x84AB, //CJK UNIFIED IDEOGRAPH - 0xE3B6: 0x84B9, //CJK UNIFIED IDEOGRAPH - 0xE3B7: 0x84B4, //CJK UNIFIED IDEOGRAPH - 0xE3B8: 0x84C1, //CJK UNIFIED IDEOGRAPH - 0xE3B9: 0x84CD, //CJK UNIFIED IDEOGRAPH - 0xE3BA: 0x84AA, //CJK UNIFIED IDEOGRAPH - 0xE3BB: 0x849A, //CJK UNIFIED IDEOGRAPH - 0xE3BC: 0x84B1, //CJK UNIFIED IDEOGRAPH - 0xE3BD: 0x84D0, //CJK UNIFIED IDEOGRAPH - 0xE3BE: 0x849D, //CJK UNIFIED IDEOGRAPH - 0xE3BF: 0x84A7, //CJK UNIFIED IDEOGRAPH - 0xE3C0: 0x84BB, //CJK UNIFIED IDEOGRAPH - 0xE3C1: 0x84A2, //CJK UNIFIED IDEOGRAPH - 0xE3C2: 0x8494, //CJK UNIFIED IDEOGRAPH - 0xE3C3: 0x84C7, //CJK UNIFIED IDEOGRAPH - 0xE3C4: 0x84CC, //CJK UNIFIED IDEOGRAPH - 0xE3C5: 0x849B, //CJK UNIFIED IDEOGRAPH - 0xE3C6: 0x84A9, //CJK UNIFIED IDEOGRAPH - 0xE3C7: 0x84AF, //CJK UNIFIED IDEOGRAPH - 0xE3C8: 0x84A8, //CJK UNIFIED IDEOGRAPH - 0xE3C9: 0x84D6, //CJK UNIFIED IDEOGRAPH - 0xE3CA: 0x8498, //CJK UNIFIED IDEOGRAPH - 0xE3CB: 0x84B6, //CJK UNIFIED IDEOGRAPH - 0xE3CC: 0x84CF, //CJK UNIFIED IDEOGRAPH - 0xE3CD: 0x84A0, //CJK UNIFIED IDEOGRAPH - 0xE3CE: 0x84D7, //CJK UNIFIED IDEOGRAPH - 0xE3CF: 0x84D4, //CJK UNIFIED IDEOGRAPH - 0xE3D0: 0x84D2, //CJK UNIFIED IDEOGRAPH - 0xE3D1: 0x84DB, //CJK UNIFIED IDEOGRAPH - 0xE3D2: 0x84B0, //CJK UNIFIED IDEOGRAPH - 0xE3D3: 0x8491, //CJK UNIFIED IDEOGRAPH - 0xE3D4: 0x8661, //CJK UNIFIED IDEOGRAPH - 0xE3D5: 0x8733, //CJK UNIFIED IDEOGRAPH - 0xE3D6: 0x8723, //CJK UNIFIED IDEOGRAPH - 0xE3D7: 0x8728, //CJK UNIFIED IDEOGRAPH - 0xE3D8: 0x876B, //CJK UNIFIED IDEOGRAPH - 0xE3D9: 0x8740, //CJK UNIFIED IDEOGRAPH - 0xE3DA: 0x872E, //CJK UNIFIED IDEOGRAPH - 0xE3DB: 0x871E, //CJK UNIFIED IDEOGRAPH - 0xE3DC: 0x8721, //CJK UNIFIED IDEOGRAPH - 0xE3DD: 0x8719, //CJK UNIFIED IDEOGRAPH - 0xE3DE: 0x871B, //CJK UNIFIED IDEOGRAPH - 0xE3DF: 0x8743, //CJK UNIFIED IDEOGRAPH - 0xE3E0: 0x872C, //CJK UNIFIED IDEOGRAPH - 0xE3E1: 0x8741, //CJK UNIFIED IDEOGRAPH - 0xE3E2: 0x873E, //CJK UNIFIED IDEOGRAPH - 0xE3E3: 0x8746, //CJK UNIFIED IDEOGRAPH - 0xE3E4: 0x8720, //CJK UNIFIED IDEOGRAPH - 0xE3E5: 0x8732, //CJK UNIFIED IDEOGRAPH - 0xE3E6: 0x872A, //CJK UNIFIED IDEOGRAPH - 0xE3E7: 0x872D, //CJK UNIFIED IDEOGRAPH - 0xE3E8: 0x873C, //CJK UNIFIED IDEOGRAPH - 0xE3E9: 0x8712, //CJK UNIFIED IDEOGRAPH - 0xE3EA: 0x873A, //CJK UNIFIED IDEOGRAPH - 0xE3EB: 0x8731, //CJK UNIFIED IDEOGRAPH - 0xE3EC: 0x8735, //CJK UNIFIED IDEOGRAPH - 0xE3ED: 0x8742, //CJK UNIFIED IDEOGRAPH - 0xE3EE: 0x8726, //CJK UNIFIED IDEOGRAPH - 0xE3EF: 0x8727, //CJK UNIFIED IDEOGRAPH - 0xE3F0: 0x8738, //CJK UNIFIED IDEOGRAPH - 0xE3F1: 0x8724, //CJK UNIFIED IDEOGRAPH - 0xE3F2: 0x871A, //CJK UNIFIED IDEOGRAPH - 0xE3F3: 0x8730, //CJK UNIFIED IDEOGRAPH - 0xE3F4: 0x8711, //CJK UNIFIED IDEOGRAPH - 0xE3F5: 0x88F7, //CJK UNIFIED IDEOGRAPH - 0xE3F6: 0x88E7, //CJK UNIFIED IDEOGRAPH - 0xE3F7: 0x88F1, //CJK UNIFIED IDEOGRAPH - 0xE3F8: 0x88F2, //CJK UNIFIED IDEOGRAPH - 0xE3F9: 0x88FA, //CJK UNIFIED IDEOGRAPH - 0xE3FA: 0x88FE, //CJK UNIFIED IDEOGRAPH - 0xE3FB: 0x88EE, //CJK UNIFIED IDEOGRAPH - 0xE3FC: 0x88FC, //CJK UNIFIED IDEOGRAPH - 0xE3FD: 0x88F6, //CJK UNIFIED IDEOGRAPH - 0xE3FE: 0x88FB, //CJK UNIFIED IDEOGRAPH - 0xE440: 0x88F0, //CJK UNIFIED IDEOGRAPH - 0xE441: 0x88EC, //CJK UNIFIED IDEOGRAPH - 0xE442: 0x88EB, //CJK UNIFIED IDEOGRAPH - 0xE443: 0x899D, //CJK UNIFIED IDEOGRAPH - 0xE444: 0x89A1, //CJK UNIFIED IDEOGRAPH - 0xE445: 0x899F, //CJK UNIFIED IDEOGRAPH - 0xE446: 0x899E, //CJK UNIFIED IDEOGRAPH - 0xE447: 0x89E9, //CJK UNIFIED IDEOGRAPH - 0xE448: 0x89EB, //CJK UNIFIED IDEOGRAPH - 0xE449: 0x89E8, //CJK UNIFIED IDEOGRAPH - 0xE44A: 0x8AAB, //CJK UNIFIED IDEOGRAPH - 0xE44B: 0x8A99, //CJK UNIFIED IDEOGRAPH - 0xE44C: 0x8A8B, //CJK UNIFIED IDEOGRAPH - 0xE44D: 0x8A92, //CJK UNIFIED IDEOGRAPH - 0xE44E: 0x8A8F, //CJK UNIFIED IDEOGRAPH - 0xE44F: 0x8A96, //CJK UNIFIED IDEOGRAPH - 0xE450: 0x8C3D, //CJK UNIFIED IDEOGRAPH - 0xE451: 0x8C68, //CJK UNIFIED IDEOGRAPH - 0xE452: 0x8C69, //CJK UNIFIED IDEOGRAPH - 0xE453: 0x8CD5, //CJK UNIFIED IDEOGRAPH - 0xE454: 0x8CCF, //CJK UNIFIED IDEOGRAPH - 0xE455: 0x8CD7, //CJK UNIFIED IDEOGRAPH - 0xE456: 0x8D96, //CJK UNIFIED IDEOGRAPH - 0xE457: 0x8E09, //CJK UNIFIED IDEOGRAPH - 0xE458: 0x8E02, //CJK UNIFIED IDEOGRAPH - 0xE459: 0x8DFF, //CJK UNIFIED IDEOGRAPH - 0xE45A: 0x8E0D, //CJK UNIFIED IDEOGRAPH - 0xE45B: 0x8DFD, //CJK UNIFIED IDEOGRAPH - 0xE45C: 0x8E0A, //CJK UNIFIED IDEOGRAPH - 0xE45D: 0x8E03, //CJK UNIFIED IDEOGRAPH - 0xE45E: 0x8E07, //CJK UNIFIED IDEOGRAPH - 0xE45F: 0x8E06, //CJK UNIFIED IDEOGRAPH - 0xE460: 0x8E05, //CJK UNIFIED IDEOGRAPH - 0xE461: 0x8DFE, //CJK UNIFIED IDEOGRAPH - 0xE462: 0x8E00, //CJK UNIFIED IDEOGRAPH - 0xE463: 0x8E04, //CJK UNIFIED IDEOGRAPH - 0xE464: 0x8F10, //CJK UNIFIED IDEOGRAPH - 0xE465: 0x8F11, //CJK UNIFIED IDEOGRAPH - 0xE466: 0x8F0E, //CJK UNIFIED IDEOGRAPH - 0xE467: 0x8F0D, //CJK UNIFIED IDEOGRAPH - 0xE468: 0x9123, //CJK UNIFIED IDEOGRAPH - 0xE469: 0x911C, //CJK UNIFIED IDEOGRAPH - 0xE46A: 0x9120, //CJK UNIFIED IDEOGRAPH - 0xE46B: 0x9122, //CJK UNIFIED IDEOGRAPH - 0xE46C: 0x911F, //CJK UNIFIED IDEOGRAPH - 0xE46D: 0x911D, //CJK UNIFIED IDEOGRAPH - 0xE46E: 0x911A, //CJK UNIFIED IDEOGRAPH - 0xE46F: 0x9124, //CJK UNIFIED IDEOGRAPH - 0xE470: 0x9121, //CJK UNIFIED IDEOGRAPH - 0xE471: 0x911B, //CJK UNIFIED IDEOGRAPH - 0xE472: 0x917A, //CJK UNIFIED IDEOGRAPH - 0xE473: 0x9172, //CJK UNIFIED IDEOGRAPH - 0xE474: 0x9179, //CJK UNIFIED IDEOGRAPH - 0xE475: 0x9173, //CJK UNIFIED IDEOGRAPH - 0xE476: 0x92A5, //CJK UNIFIED IDEOGRAPH - 0xE477: 0x92A4, //CJK UNIFIED IDEOGRAPH - 0xE478: 0x9276, //CJK UNIFIED IDEOGRAPH - 0xE479: 0x929B, //CJK UNIFIED IDEOGRAPH - 0xE47A: 0x927A, //CJK UNIFIED IDEOGRAPH - 0xE47B: 0x92A0, //CJK UNIFIED IDEOGRAPH - 0xE47C: 0x9294, //CJK UNIFIED IDEOGRAPH - 0xE47D: 0x92AA, //CJK UNIFIED IDEOGRAPH - 0xE47E: 0x928D, //CJK UNIFIED IDEOGRAPH - 0xE4A1: 0x92A6, //CJK UNIFIED IDEOGRAPH - 0xE4A2: 0x929A, //CJK UNIFIED IDEOGRAPH - 0xE4A3: 0x92AB, //CJK UNIFIED IDEOGRAPH - 0xE4A4: 0x9279, //CJK UNIFIED IDEOGRAPH - 0xE4A5: 0x9297, //CJK UNIFIED IDEOGRAPH - 0xE4A6: 0x927F, //CJK UNIFIED IDEOGRAPH - 0xE4A7: 0x92A3, //CJK UNIFIED IDEOGRAPH - 0xE4A8: 0x92EE, //CJK UNIFIED IDEOGRAPH - 0xE4A9: 0x928E, //CJK UNIFIED IDEOGRAPH - 0xE4AA: 0x9282, //CJK UNIFIED IDEOGRAPH - 0xE4AB: 0x9295, //CJK UNIFIED IDEOGRAPH - 0xE4AC: 0x92A2, //CJK UNIFIED IDEOGRAPH - 0xE4AD: 0x927D, //CJK UNIFIED IDEOGRAPH - 0xE4AE: 0x9288, //CJK UNIFIED IDEOGRAPH - 0xE4AF: 0x92A1, //CJK UNIFIED IDEOGRAPH - 0xE4B0: 0x928A, //CJK UNIFIED IDEOGRAPH - 0xE4B1: 0x9286, //CJK UNIFIED IDEOGRAPH - 0xE4B2: 0x928C, //CJK UNIFIED IDEOGRAPH - 0xE4B3: 0x9299, //CJK UNIFIED IDEOGRAPH - 0xE4B4: 0x92A7, //CJK UNIFIED IDEOGRAPH - 0xE4B5: 0x927E, //CJK UNIFIED IDEOGRAPH - 0xE4B6: 0x9287, //CJK UNIFIED IDEOGRAPH - 0xE4B7: 0x92A9, //CJK UNIFIED IDEOGRAPH - 0xE4B8: 0x929D, //CJK UNIFIED IDEOGRAPH - 0xE4B9: 0x928B, //CJK UNIFIED IDEOGRAPH - 0xE4BA: 0x922D, //CJK UNIFIED IDEOGRAPH - 0xE4BB: 0x969E, //CJK UNIFIED IDEOGRAPH - 0xE4BC: 0x96A1, //CJK UNIFIED IDEOGRAPH - 0xE4BD: 0x96FF, //CJK UNIFIED IDEOGRAPH - 0xE4BE: 0x9758, //CJK UNIFIED IDEOGRAPH - 0xE4BF: 0x977D, //CJK UNIFIED IDEOGRAPH - 0xE4C0: 0x977A, //CJK UNIFIED IDEOGRAPH - 0xE4C1: 0x977E, //CJK UNIFIED IDEOGRAPH - 0xE4C2: 0x9783, //CJK UNIFIED IDEOGRAPH - 0xE4C3: 0x9780, //CJK UNIFIED IDEOGRAPH - 0xE4C4: 0x9782, //CJK UNIFIED IDEOGRAPH - 0xE4C5: 0x977B, //CJK UNIFIED IDEOGRAPH - 0xE4C6: 0x9784, //CJK UNIFIED IDEOGRAPH - 0xE4C7: 0x9781, //CJK UNIFIED IDEOGRAPH - 0xE4C8: 0x977F, //CJK UNIFIED IDEOGRAPH - 0xE4C9: 0x97CE, //CJK UNIFIED IDEOGRAPH - 0xE4CA: 0x97CD, //CJK UNIFIED IDEOGRAPH - 0xE4CB: 0x9816, //CJK UNIFIED IDEOGRAPH - 0xE4CC: 0x98AD, //CJK UNIFIED IDEOGRAPH - 0xE4CD: 0x98AE, //CJK UNIFIED IDEOGRAPH - 0xE4CE: 0x9902, //CJK UNIFIED IDEOGRAPH - 0xE4CF: 0x9900, //CJK UNIFIED IDEOGRAPH - 0xE4D0: 0x9907, //CJK UNIFIED IDEOGRAPH - 0xE4D1: 0x999D, //CJK UNIFIED IDEOGRAPH - 0xE4D2: 0x999C, //CJK UNIFIED IDEOGRAPH - 0xE4D3: 0x99C3, //CJK UNIFIED IDEOGRAPH - 0xE4D4: 0x99B9, //CJK UNIFIED IDEOGRAPH - 0xE4D5: 0x99BB, //CJK UNIFIED IDEOGRAPH - 0xE4D6: 0x99BA, //CJK UNIFIED IDEOGRAPH - 0xE4D7: 0x99C2, //CJK UNIFIED IDEOGRAPH - 0xE4D8: 0x99BD, //CJK UNIFIED IDEOGRAPH - 0xE4D9: 0x99C7, //CJK UNIFIED IDEOGRAPH - 0xE4DA: 0x9AB1, //CJK UNIFIED IDEOGRAPH - 0xE4DB: 0x9AE3, //CJK UNIFIED IDEOGRAPH - 0xE4DC: 0x9AE7, //CJK UNIFIED IDEOGRAPH - 0xE4DD: 0x9B3E, //CJK UNIFIED IDEOGRAPH - 0xE4DE: 0x9B3F, //CJK UNIFIED IDEOGRAPH - 0xE4DF: 0x9B60, //CJK UNIFIED IDEOGRAPH - 0xE4E0: 0x9B61, //CJK UNIFIED IDEOGRAPH - 0xE4E1: 0x9B5F, //CJK UNIFIED IDEOGRAPH - 0xE4E2: 0x9CF1, //CJK UNIFIED IDEOGRAPH - 0xE4E3: 0x9CF2, //CJK UNIFIED IDEOGRAPH - 0xE4E4: 0x9CF5, //CJK UNIFIED IDEOGRAPH - 0xE4E5: 0x9EA7, //CJK UNIFIED IDEOGRAPH - 0xE4E6: 0x50FF, //CJK UNIFIED IDEOGRAPH - 0xE4E7: 0x5103, //CJK UNIFIED IDEOGRAPH - 0xE4E8: 0x5130, //CJK UNIFIED IDEOGRAPH - 0xE4E9: 0x50F8, //CJK UNIFIED IDEOGRAPH - 0xE4EA: 0x5106, //CJK UNIFIED IDEOGRAPH - 0xE4EB: 0x5107, //CJK UNIFIED IDEOGRAPH - 0xE4EC: 0x50F6, //CJK UNIFIED IDEOGRAPH - 0xE4ED: 0x50FE, //CJK UNIFIED IDEOGRAPH - 0xE4EE: 0x510B, //CJK UNIFIED IDEOGRAPH - 0xE4EF: 0x510C, //CJK UNIFIED IDEOGRAPH - 0xE4F0: 0x50FD, //CJK UNIFIED IDEOGRAPH - 0xE4F1: 0x510A, //CJK UNIFIED IDEOGRAPH - 0xE4F2: 0x528B, //CJK UNIFIED IDEOGRAPH - 0xE4F3: 0x528C, //CJK UNIFIED IDEOGRAPH - 0xE4F4: 0x52F1, //CJK UNIFIED IDEOGRAPH - 0xE4F5: 0x52EF, //CJK UNIFIED IDEOGRAPH - 0xE4F6: 0x5648, //CJK UNIFIED IDEOGRAPH - 0xE4F7: 0x5642, //CJK UNIFIED IDEOGRAPH - 0xE4F8: 0x564C, //CJK UNIFIED IDEOGRAPH - 0xE4F9: 0x5635, //CJK UNIFIED IDEOGRAPH - 0xE4FA: 0x5641, //CJK UNIFIED IDEOGRAPH - 0xE4FB: 0x564A, //CJK UNIFIED IDEOGRAPH - 0xE4FC: 0x5649, //CJK UNIFIED IDEOGRAPH - 0xE4FD: 0x5646, //CJK UNIFIED IDEOGRAPH - 0xE4FE: 0x5658, //CJK UNIFIED IDEOGRAPH - 0xE540: 0x565A, //CJK UNIFIED IDEOGRAPH - 0xE541: 0x5640, //CJK UNIFIED IDEOGRAPH - 0xE542: 0x5633, //CJK UNIFIED IDEOGRAPH - 0xE543: 0x563D, //CJK UNIFIED IDEOGRAPH - 0xE544: 0x562C, //CJK UNIFIED IDEOGRAPH - 0xE545: 0x563E, //CJK UNIFIED IDEOGRAPH - 0xE546: 0x5638, //CJK UNIFIED IDEOGRAPH - 0xE547: 0x562A, //CJK UNIFIED IDEOGRAPH - 0xE548: 0x563A, //CJK UNIFIED IDEOGRAPH - 0xE549: 0x571A, //CJK UNIFIED IDEOGRAPH - 0xE54A: 0x58AB, //CJK UNIFIED IDEOGRAPH - 0xE54B: 0x589D, //CJK UNIFIED IDEOGRAPH - 0xE54C: 0x58B1, //CJK UNIFIED IDEOGRAPH - 0xE54D: 0x58A0, //CJK UNIFIED IDEOGRAPH - 0xE54E: 0x58A3, //CJK UNIFIED IDEOGRAPH - 0xE54F: 0x58AF, //CJK UNIFIED IDEOGRAPH - 0xE550: 0x58AC, //CJK UNIFIED IDEOGRAPH - 0xE551: 0x58A5, //CJK UNIFIED IDEOGRAPH - 0xE552: 0x58A1, //CJK UNIFIED IDEOGRAPH - 0xE553: 0x58FF, //CJK UNIFIED IDEOGRAPH - 0xE554: 0x5AFF, //CJK UNIFIED IDEOGRAPH - 0xE555: 0x5AF4, //CJK UNIFIED IDEOGRAPH - 0xE556: 0x5AFD, //CJK UNIFIED IDEOGRAPH - 0xE557: 0x5AF7, //CJK UNIFIED IDEOGRAPH - 0xE558: 0x5AF6, //CJK UNIFIED IDEOGRAPH - 0xE559: 0x5B03, //CJK UNIFIED IDEOGRAPH - 0xE55A: 0x5AF8, //CJK UNIFIED IDEOGRAPH - 0xE55B: 0x5B02, //CJK UNIFIED IDEOGRAPH - 0xE55C: 0x5AF9, //CJK UNIFIED IDEOGRAPH - 0xE55D: 0x5B01, //CJK UNIFIED IDEOGRAPH - 0xE55E: 0x5B07, //CJK UNIFIED IDEOGRAPH - 0xE55F: 0x5B05, //CJK UNIFIED IDEOGRAPH - 0xE560: 0x5B0F, //CJK UNIFIED IDEOGRAPH - 0xE561: 0x5C67, //CJK UNIFIED IDEOGRAPH - 0xE562: 0x5D99, //CJK UNIFIED IDEOGRAPH - 0xE563: 0x5D97, //CJK UNIFIED IDEOGRAPH - 0xE564: 0x5D9F, //CJK UNIFIED IDEOGRAPH - 0xE565: 0x5D92, //CJK UNIFIED IDEOGRAPH - 0xE566: 0x5DA2, //CJK UNIFIED IDEOGRAPH - 0xE567: 0x5D93, //CJK UNIFIED IDEOGRAPH - 0xE568: 0x5D95, //CJK UNIFIED IDEOGRAPH - 0xE569: 0x5DA0, //CJK UNIFIED IDEOGRAPH - 0xE56A: 0x5D9C, //CJK UNIFIED IDEOGRAPH - 0xE56B: 0x5DA1, //CJK UNIFIED IDEOGRAPH - 0xE56C: 0x5D9A, //CJK UNIFIED IDEOGRAPH - 0xE56D: 0x5D9E, //CJK UNIFIED IDEOGRAPH - 0xE56E: 0x5E69, //CJK UNIFIED IDEOGRAPH - 0xE56F: 0x5E5D, //CJK UNIFIED IDEOGRAPH - 0xE570: 0x5E60, //CJK UNIFIED IDEOGRAPH - 0xE571: 0x5E5C, //CJK UNIFIED IDEOGRAPH - 0xE572: 0x7DF3, //CJK UNIFIED IDEOGRAPH - 0xE573: 0x5EDB, //CJK UNIFIED IDEOGRAPH - 0xE574: 0x5EDE, //CJK UNIFIED IDEOGRAPH - 0xE575: 0x5EE1, //CJK UNIFIED IDEOGRAPH - 0xE576: 0x5F49, //CJK UNIFIED IDEOGRAPH - 0xE577: 0x5FB2, //CJK UNIFIED IDEOGRAPH - 0xE578: 0x618B, //CJK UNIFIED IDEOGRAPH - 0xE579: 0x6183, //CJK UNIFIED IDEOGRAPH - 0xE57A: 0x6179, //CJK UNIFIED IDEOGRAPH - 0xE57B: 0x61B1, //CJK UNIFIED IDEOGRAPH - 0xE57C: 0x61B0, //CJK UNIFIED IDEOGRAPH - 0xE57D: 0x61A2, //CJK UNIFIED IDEOGRAPH - 0xE57E: 0x6189, //CJK UNIFIED IDEOGRAPH - 0xE5A1: 0x619B, //CJK UNIFIED IDEOGRAPH - 0xE5A2: 0x6193, //CJK UNIFIED IDEOGRAPH - 0xE5A3: 0x61AF, //CJK UNIFIED IDEOGRAPH - 0xE5A4: 0x61AD, //CJK UNIFIED IDEOGRAPH - 0xE5A5: 0x619F, //CJK UNIFIED IDEOGRAPH - 0xE5A6: 0x6192, //CJK UNIFIED IDEOGRAPH - 0xE5A7: 0x61AA, //CJK UNIFIED IDEOGRAPH - 0xE5A8: 0x61A1, //CJK UNIFIED IDEOGRAPH - 0xE5A9: 0x618D, //CJK UNIFIED IDEOGRAPH - 0xE5AA: 0x6166, //CJK UNIFIED IDEOGRAPH - 0xE5AB: 0x61B3, //CJK UNIFIED IDEOGRAPH - 0xE5AC: 0x622D, //CJK UNIFIED IDEOGRAPH - 0xE5AD: 0x646E, //CJK UNIFIED IDEOGRAPH - 0xE5AE: 0x6470, //CJK UNIFIED IDEOGRAPH - 0xE5AF: 0x6496, //CJK UNIFIED IDEOGRAPH - 0xE5B0: 0x64A0, //CJK UNIFIED IDEOGRAPH - 0xE5B1: 0x6485, //CJK UNIFIED IDEOGRAPH - 0xE5B2: 0x6497, //CJK UNIFIED IDEOGRAPH - 0xE5B3: 0x649C, //CJK UNIFIED IDEOGRAPH - 0xE5B4: 0x648F, //CJK UNIFIED IDEOGRAPH - 0xE5B5: 0x648B, //CJK UNIFIED IDEOGRAPH - 0xE5B6: 0x648A, //CJK UNIFIED IDEOGRAPH - 0xE5B7: 0x648C, //CJK UNIFIED IDEOGRAPH - 0xE5B8: 0x64A3, //CJK UNIFIED IDEOGRAPH - 0xE5B9: 0x649F, //CJK UNIFIED IDEOGRAPH - 0xE5BA: 0x6468, //CJK UNIFIED IDEOGRAPH - 0xE5BB: 0x64B1, //CJK UNIFIED IDEOGRAPH - 0xE5BC: 0x6498, //CJK UNIFIED IDEOGRAPH - 0xE5BD: 0x6576, //CJK UNIFIED IDEOGRAPH - 0xE5BE: 0x657A, //CJK UNIFIED IDEOGRAPH - 0xE5BF: 0x6579, //CJK UNIFIED IDEOGRAPH - 0xE5C0: 0x657B, //CJK UNIFIED IDEOGRAPH - 0xE5C1: 0x65B2, //CJK UNIFIED IDEOGRAPH - 0xE5C2: 0x65B3, //CJK UNIFIED IDEOGRAPH - 0xE5C3: 0x66B5, //CJK UNIFIED IDEOGRAPH - 0xE5C4: 0x66B0, //CJK UNIFIED IDEOGRAPH - 0xE5C5: 0x66A9, //CJK UNIFIED IDEOGRAPH - 0xE5C6: 0x66B2, //CJK UNIFIED IDEOGRAPH - 0xE5C7: 0x66B7, //CJK UNIFIED IDEOGRAPH - 0xE5C8: 0x66AA, //CJK UNIFIED IDEOGRAPH - 0xE5C9: 0x66AF, //CJK UNIFIED IDEOGRAPH - 0xE5CA: 0x6A00, //CJK UNIFIED IDEOGRAPH - 0xE5CB: 0x6A06, //CJK UNIFIED IDEOGRAPH - 0xE5CC: 0x6A17, //CJK UNIFIED IDEOGRAPH - 0xE5CD: 0x69E5, //CJK UNIFIED IDEOGRAPH - 0xE5CE: 0x69F8, //CJK UNIFIED IDEOGRAPH - 0xE5CF: 0x6A15, //CJK UNIFIED IDEOGRAPH - 0xE5D0: 0x69F1, //CJK UNIFIED IDEOGRAPH - 0xE5D1: 0x69E4, //CJK UNIFIED IDEOGRAPH - 0xE5D2: 0x6A20, //CJK UNIFIED IDEOGRAPH - 0xE5D3: 0x69FF, //CJK UNIFIED IDEOGRAPH - 0xE5D4: 0x69EC, //CJK UNIFIED IDEOGRAPH - 0xE5D5: 0x69E2, //CJK UNIFIED IDEOGRAPH - 0xE5D6: 0x6A1B, //CJK UNIFIED IDEOGRAPH - 0xE5D7: 0x6A1D, //CJK UNIFIED IDEOGRAPH - 0xE5D8: 0x69FE, //CJK UNIFIED IDEOGRAPH - 0xE5D9: 0x6A27, //CJK UNIFIED IDEOGRAPH - 0xE5DA: 0x69F2, //CJK UNIFIED IDEOGRAPH - 0xE5DB: 0x69EE, //CJK UNIFIED IDEOGRAPH - 0xE5DC: 0x6A14, //CJK UNIFIED IDEOGRAPH - 0xE5DD: 0x69F7, //CJK UNIFIED IDEOGRAPH - 0xE5DE: 0x69E7, //CJK UNIFIED IDEOGRAPH - 0xE5DF: 0x6A40, //CJK UNIFIED IDEOGRAPH - 0xE5E0: 0x6A08, //CJK UNIFIED IDEOGRAPH - 0xE5E1: 0x69E6, //CJK UNIFIED IDEOGRAPH - 0xE5E2: 0x69FB, //CJK UNIFIED IDEOGRAPH - 0xE5E3: 0x6A0D, //CJK UNIFIED IDEOGRAPH - 0xE5E4: 0x69FC, //CJK UNIFIED IDEOGRAPH - 0xE5E5: 0x69EB, //CJK UNIFIED IDEOGRAPH - 0xE5E6: 0x6A09, //CJK UNIFIED IDEOGRAPH - 0xE5E7: 0x6A04, //CJK UNIFIED IDEOGRAPH - 0xE5E8: 0x6A18, //CJK UNIFIED IDEOGRAPH - 0xE5E9: 0x6A25, //CJK UNIFIED IDEOGRAPH - 0xE5EA: 0x6A0F, //CJK UNIFIED IDEOGRAPH - 0xE5EB: 0x69F6, //CJK UNIFIED IDEOGRAPH - 0xE5EC: 0x6A26, //CJK UNIFIED IDEOGRAPH - 0xE5ED: 0x6A07, //CJK UNIFIED IDEOGRAPH - 0xE5EE: 0x69F4, //CJK UNIFIED IDEOGRAPH - 0xE5EF: 0x6A16, //CJK UNIFIED IDEOGRAPH - 0xE5F0: 0x6B51, //CJK UNIFIED IDEOGRAPH - 0xE5F1: 0x6BA5, //CJK UNIFIED IDEOGRAPH - 0xE5F2: 0x6BA3, //CJK UNIFIED IDEOGRAPH - 0xE5F3: 0x6BA2, //CJK UNIFIED IDEOGRAPH - 0xE5F4: 0x6BA6, //CJK UNIFIED IDEOGRAPH - 0xE5F5: 0x6C01, //CJK UNIFIED IDEOGRAPH - 0xE5F6: 0x6C00, //CJK UNIFIED IDEOGRAPH - 0xE5F7: 0x6BFF, //CJK UNIFIED IDEOGRAPH - 0xE5F8: 0x6C02, //CJK UNIFIED IDEOGRAPH - 0xE5F9: 0x6F41, //CJK UNIFIED IDEOGRAPH - 0xE5FA: 0x6F26, //CJK UNIFIED IDEOGRAPH - 0xE5FB: 0x6F7E, //CJK UNIFIED IDEOGRAPH - 0xE5FC: 0x6F87, //CJK UNIFIED IDEOGRAPH - 0xE5FD: 0x6FC6, //CJK UNIFIED IDEOGRAPH - 0xE5FE: 0x6F92, //CJK UNIFIED IDEOGRAPH - 0xE640: 0x6F8D, //CJK UNIFIED IDEOGRAPH - 0xE641: 0x6F89, //CJK UNIFIED IDEOGRAPH - 0xE642: 0x6F8C, //CJK UNIFIED IDEOGRAPH - 0xE643: 0x6F62, //CJK UNIFIED IDEOGRAPH - 0xE644: 0x6F4F, //CJK UNIFIED IDEOGRAPH - 0xE645: 0x6F85, //CJK UNIFIED IDEOGRAPH - 0xE646: 0x6F5A, //CJK UNIFIED IDEOGRAPH - 0xE647: 0x6F96, //CJK UNIFIED IDEOGRAPH - 0xE648: 0x6F76, //CJK UNIFIED IDEOGRAPH - 0xE649: 0x6F6C, //CJK UNIFIED IDEOGRAPH - 0xE64A: 0x6F82, //CJK UNIFIED IDEOGRAPH - 0xE64B: 0x6F55, //CJK UNIFIED IDEOGRAPH - 0xE64C: 0x6F72, //CJK UNIFIED IDEOGRAPH - 0xE64D: 0x6F52, //CJK UNIFIED IDEOGRAPH - 0xE64E: 0x6F50, //CJK UNIFIED IDEOGRAPH - 0xE64F: 0x6F57, //CJK UNIFIED IDEOGRAPH - 0xE650: 0x6F94, //CJK UNIFIED IDEOGRAPH - 0xE651: 0x6F93, //CJK UNIFIED IDEOGRAPH - 0xE652: 0x6F5D, //CJK UNIFIED IDEOGRAPH - 0xE653: 0x6F00, //CJK UNIFIED IDEOGRAPH - 0xE654: 0x6F61, //CJK UNIFIED IDEOGRAPH - 0xE655: 0x6F6B, //CJK UNIFIED IDEOGRAPH - 0xE656: 0x6F7D, //CJK UNIFIED IDEOGRAPH - 0xE657: 0x6F67, //CJK UNIFIED IDEOGRAPH - 0xE658: 0x6F90, //CJK UNIFIED IDEOGRAPH - 0xE659: 0x6F53, //CJK UNIFIED IDEOGRAPH - 0xE65A: 0x6F8B, //CJK UNIFIED IDEOGRAPH - 0xE65B: 0x6F69, //CJK UNIFIED IDEOGRAPH - 0xE65C: 0x6F7F, //CJK UNIFIED IDEOGRAPH - 0xE65D: 0x6F95, //CJK UNIFIED IDEOGRAPH - 0xE65E: 0x6F63, //CJK UNIFIED IDEOGRAPH - 0xE65F: 0x6F77, //CJK UNIFIED IDEOGRAPH - 0xE660: 0x6F6A, //CJK UNIFIED IDEOGRAPH - 0xE661: 0x6F7B, //CJK UNIFIED IDEOGRAPH - 0xE662: 0x71B2, //CJK UNIFIED IDEOGRAPH - 0xE663: 0x71AF, //CJK UNIFIED IDEOGRAPH - 0xE664: 0x719B, //CJK UNIFIED IDEOGRAPH - 0xE665: 0x71B0, //CJK UNIFIED IDEOGRAPH - 0xE666: 0x71A0, //CJK UNIFIED IDEOGRAPH - 0xE667: 0x719A, //CJK UNIFIED IDEOGRAPH - 0xE668: 0x71A9, //CJK UNIFIED IDEOGRAPH - 0xE669: 0x71B5, //CJK UNIFIED IDEOGRAPH - 0xE66A: 0x719D, //CJK UNIFIED IDEOGRAPH - 0xE66B: 0x71A5, //CJK UNIFIED IDEOGRAPH - 0xE66C: 0x719E, //CJK UNIFIED IDEOGRAPH - 0xE66D: 0x71A4, //CJK UNIFIED IDEOGRAPH - 0xE66E: 0x71A1, //CJK UNIFIED IDEOGRAPH - 0xE66F: 0x71AA, //CJK UNIFIED IDEOGRAPH - 0xE670: 0x719C, //CJK UNIFIED IDEOGRAPH - 0xE671: 0x71A7, //CJK UNIFIED IDEOGRAPH - 0xE672: 0x71B3, //CJK UNIFIED IDEOGRAPH - 0xE673: 0x7298, //CJK UNIFIED IDEOGRAPH - 0xE674: 0x729A, //CJK UNIFIED IDEOGRAPH - 0xE675: 0x7358, //CJK UNIFIED IDEOGRAPH - 0xE676: 0x7352, //CJK UNIFIED IDEOGRAPH - 0xE677: 0x735E, //CJK UNIFIED IDEOGRAPH - 0xE678: 0x735F, //CJK UNIFIED IDEOGRAPH - 0xE679: 0x7360, //CJK UNIFIED IDEOGRAPH - 0xE67A: 0x735D, //CJK UNIFIED IDEOGRAPH - 0xE67B: 0x735B, //CJK UNIFIED IDEOGRAPH - 0xE67C: 0x7361, //CJK UNIFIED IDEOGRAPH - 0xE67D: 0x735A, //CJK UNIFIED IDEOGRAPH - 0xE67E: 0x7359, //CJK UNIFIED IDEOGRAPH - 0xE6A1: 0x7362, //CJK UNIFIED IDEOGRAPH - 0xE6A2: 0x7487, //CJK UNIFIED IDEOGRAPH - 0xE6A3: 0x7489, //CJK UNIFIED IDEOGRAPH - 0xE6A4: 0x748A, //CJK UNIFIED IDEOGRAPH - 0xE6A5: 0x7486, //CJK UNIFIED IDEOGRAPH - 0xE6A6: 0x7481, //CJK UNIFIED IDEOGRAPH - 0xE6A7: 0x747D, //CJK UNIFIED IDEOGRAPH - 0xE6A8: 0x7485, //CJK UNIFIED IDEOGRAPH - 0xE6A9: 0x7488, //CJK UNIFIED IDEOGRAPH - 0xE6AA: 0x747C, //CJK UNIFIED IDEOGRAPH - 0xE6AB: 0x7479, //CJK UNIFIED IDEOGRAPH - 0xE6AC: 0x7508, //CJK UNIFIED IDEOGRAPH - 0xE6AD: 0x7507, //CJK UNIFIED IDEOGRAPH - 0xE6AE: 0x757E, //CJK UNIFIED IDEOGRAPH - 0xE6AF: 0x7625, //CJK UNIFIED IDEOGRAPH - 0xE6B0: 0x761E, //CJK UNIFIED IDEOGRAPH - 0xE6B1: 0x7619, //CJK UNIFIED IDEOGRAPH - 0xE6B2: 0x761D, //CJK UNIFIED IDEOGRAPH - 0xE6B3: 0x761C, //CJK UNIFIED IDEOGRAPH - 0xE6B4: 0x7623, //CJK UNIFIED IDEOGRAPH - 0xE6B5: 0x761A, //CJK UNIFIED IDEOGRAPH - 0xE6B6: 0x7628, //CJK UNIFIED IDEOGRAPH - 0xE6B7: 0x761B, //CJK UNIFIED IDEOGRAPH - 0xE6B8: 0x769C, //CJK UNIFIED IDEOGRAPH - 0xE6B9: 0x769D, //CJK UNIFIED IDEOGRAPH - 0xE6BA: 0x769E, //CJK UNIFIED IDEOGRAPH - 0xE6BB: 0x769B, //CJK UNIFIED IDEOGRAPH - 0xE6BC: 0x778D, //CJK UNIFIED IDEOGRAPH - 0xE6BD: 0x778F, //CJK UNIFIED IDEOGRAPH - 0xE6BE: 0x7789, //CJK UNIFIED IDEOGRAPH - 0xE6BF: 0x7788, //CJK UNIFIED IDEOGRAPH - 0xE6C0: 0x78CD, //CJK UNIFIED IDEOGRAPH - 0xE6C1: 0x78BB, //CJK UNIFIED IDEOGRAPH - 0xE6C2: 0x78CF, //CJK UNIFIED IDEOGRAPH - 0xE6C3: 0x78CC, //CJK UNIFIED IDEOGRAPH - 0xE6C4: 0x78D1, //CJK UNIFIED IDEOGRAPH - 0xE6C5: 0x78CE, //CJK UNIFIED IDEOGRAPH - 0xE6C6: 0x78D4, //CJK UNIFIED IDEOGRAPH - 0xE6C7: 0x78C8, //CJK UNIFIED IDEOGRAPH - 0xE6C8: 0x78C3, //CJK UNIFIED IDEOGRAPH - 0xE6C9: 0x78C4, //CJK UNIFIED IDEOGRAPH - 0xE6CA: 0x78C9, //CJK UNIFIED IDEOGRAPH - 0xE6CB: 0x799A, //CJK UNIFIED IDEOGRAPH - 0xE6CC: 0x79A1, //CJK UNIFIED IDEOGRAPH - 0xE6CD: 0x79A0, //CJK UNIFIED IDEOGRAPH - 0xE6CE: 0x799C, //CJK UNIFIED IDEOGRAPH - 0xE6CF: 0x79A2, //CJK UNIFIED IDEOGRAPH - 0xE6D0: 0x799B, //CJK UNIFIED IDEOGRAPH - 0xE6D1: 0x6B76, //CJK UNIFIED IDEOGRAPH - 0xE6D2: 0x7A39, //CJK UNIFIED IDEOGRAPH - 0xE6D3: 0x7AB2, //CJK UNIFIED IDEOGRAPH - 0xE6D4: 0x7AB4, //CJK UNIFIED IDEOGRAPH - 0xE6D5: 0x7AB3, //CJK UNIFIED IDEOGRAPH - 0xE6D6: 0x7BB7, //CJK UNIFIED IDEOGRAPH - 0xE6D7: 0x7BCB, //CJK UNIFIED IDEOGRAPH - 0xE6D8: 0x7BBE, //CJK UNIFIED IDEOGRAPH - 0xE6D9: 0x7BAC, //CJK UNIFIED IDEOGRAPH - 0xE6DA: 0x7BCE, //CJK UNIFIED IDEOGRAPH - 0xE6DB: 0x7BAF, //CJK UNIFIED IDEOGRAPH - 0xE6DC: 0x7BB9, //CJK UNIFIED IDEOGRAPH - 0xE6DD: 0x7BCA, //CJK UNIFIED IDEOGRAPH - 0xE6DE: 0x7BB5, //CJK UNIFIED IDEOGRAPH - 0xE6DF: 0x7CC5, //CJK UNIFIED IDEOGRAPH - 0xE6E0: 0x7CC8, //CJK UNIFIED IDEOGRAPH - 0xE6E1: 0x7CCC, //CJK UNIFIED IDEOGRAPH - 0xE6E2: 0x7CCB, //CJK UNIFIED IDEOGRAPH - 0xE6E3: 0x7DF7, //CJK UNIFIED IDEOGRAPH - 0xE6E4: 0x7DDB, //CJK UNIFIED IDEOGRAPH - 0xE6E5: 0x7DEA, //CJK UNIFIED IDEOGRAPH - 0xE6E6: 0x7DE7, //CJK UNIFIED IDEOGRAPH - 0xE6E7: 0x7DD7, //CJK UNIFIED IDEOGRAPH - 0xE6E8: 0x7DE1, //CJK UNIFIED IDEOGRAPH - 0xE6E9: 0x7E03, //CJK UNIFIED IDEOGRAPH - 0xE6EA: 0x7DFA, //CJK UNIFIED IDEOGRAPH - 0xE6EB: 0x7DE6, //CJK UNIFIED IDEOGRAPH - 0xE6EC: 0x7DF6, //CJK UNIFIED IDEOGRAPH - 0xE6ED: 0x7DF1, //CJK UNIFIED IDEOGRAPH - 0xE6EE: 0x7DF0, //CJK UNIFIED IDEOGRAPH - 0xE6EF: 0x7DEE, //CJK UNIFIED IDEOGRAPH - 0xE6F0: 0x7DDF, //CJK UNIFIED IDEOGRAPH - 0xE6F1: 0x7F76, //CJK UNIFIED IDEOGRAPH - 0xE6F2: 0x7FAC, //CJK UNIFIED IDEOGRAPH - 0xE6F3: 0x7FB0, //CJK UNIFIED IDEOGRAPH - 0xE6F4: 0x7FAD, //CJK UNIFIED IDEOGRAPH - 0xE6F5: 0x7FED, //CJK UNIFIED IDEOGRAPH - 0xE6F6: 0x7FEB, //CJK UNIFIED IDEOGRAPH - 0xE6F7: 0x7FEA, //CJK UNIFIED IDEOGRAPH - 0xE6F8: 0x7FEC, //CJK UNIFIED IDEOGRAPH - 0xE6F9: 0x7FE6, //CJK UNIFIED IDEOGRAPH - 0xE6FA: 0x7FE8, //CJK UNIFIED IDEOGRAPH - 0xE6FB: 0x8064, //CJK UNIFIED IDEOGRAPH - 0xE6FC: 0x8067, //CJK UNIFIED IDEOGRAPH - 0xE6FD: 0x81A3, //CJK UNIFIED IDEOGRAPH - 0xE6FE: 0x819F, //CJK UNIFIED IDEOGRAPH - 0xE740: 0x819E, //CJK UNIFIED IDEOGRAPH - 0xE741: 0x8195, //CJK UNIFIED IDEOGRAPH - 0xE742: 0x81A2, //CJK UNIFIED IDEOGRAPH - 0xE743: 0x8199, //CJK UNIFIED IDEOGRAPH - 0xE744: 0x8197, //CJK UNIFIED IDEOGRAPH - 0xE745: 0x8216, //CJK UNIFIED IDEOGRAPH - 0xE746: 0x824F, //CJK UNIFIED IDEOGRAPH - 0xE747: 0x8253, //CJK UNIFIED IDEOGRAPH - 0xE748: 0x8252, //CJK UNIFIED IDEOGRAPH - 0xE749: 0x8250, //CJK UNIFIED IDEOGRAPH - 0xE74A: 0x824E, //CJK UNIFIED IDEOGRAPH - 0xE74B: 0x8251, //CJK UNIFIED IDEOGRAPH - 0xE74C: 0x8524, //CJK UNIFIED IDEOGRAPH - 0xE74D: 0x853B, //CJK UNIFIED IDEOGRAPH - 0xE74E: 0x850F, //CJK UNIFIED IDEOGRAPH - 0xE74F: 0x8500, //CJK UNIFIED IDEOGRAPH - 0xE750: 0x8529, //CJK UNIFIED IDEOGRAPH - 0xE751: 0x850E, //CJK UNIFIED IDEOGRAPH - 0xE752: 0x8509, //CJK UNIFIED IDEOGRAPH - 0xE753: 0x850D, //CJK UNIFIED IDEOGRAPH - 0xE754: 0x851F, //CJK UNIFIED IDEOGRAPH - 0xE755: 0x850A, //CJK UNIFIED IDEOGRAPH - 0xE756: 0x8527, //CJK UNIFIED IDEOGRAPH - 0xE757: 0x851C, //CJK UNIFIED IDEOGRAPH - 0xE758: 0x84FB, //CJK UNIFIED IDEOGRAPH - 0xE759: 0x852B, //CJK UNIFIED IDEOGRAPH - 0xE75A: 0x84FA, //CJK UNIFIED IDEOGRAPH - 0xE75B: 0x8508, //CJK UNIFIED IDEOGRAPH - 0xE75C: 0x850C, //CJK UNIFIED IDEOGRAPH - 0xE75D: 0x84F4, //CJK UNIFIED IDEOGRAPH - 0xE75E: 0x852A, //CJK UNIFIED IDEOGRAPH - 0xE75F: 0x84F2, //CJK UNIFIED IDEOGRAPH - 0xE760: 0x8515, //CJK UNIFIED IDEOGRAPH - 0xE761: 0x84F7, //CJK UNIFIED IDEOGRAPH - 0xE762: 0x84EB, //CJK UNIFIED IDEOGRAPH - 0xE763: 0x84F3, //CJK UNIFIED IDEOGRAPH - 0xE764: 0x84FC, //CJK UNIFIED IDEOGRAPH - 0xE765: 0x8512, //CJK UNIFIED IDEOGRAPH - 0xE766: 0x84EA, //CJK UNIFIED IDEOGRAPH - 0xE767: 0x84E9, //CJK UNIFIED IDEOGRAPH - 0xE768: 0x8516, //CJK UNIFIED IDEOGRAPH - 0xE769: 0x84FE, //CJK UNIFIED IDEOGRAPH - 0xE76A: 0x8528, //CJK UNIFIED IDEOGRAPH - 0xE76B: 0x851D, //CJK UNIFIED IDEOGRAPH - 0xE76C: 0x852E, //CJK UNIFIED IDEOGRAPH - 0xE76D: 0x8502, //CJK UNIFIED IDEOGRAPH - 0xE76E: 0x84FD, //CJK UNIFIED IDEOGRAPH - 0xE76F: 0x851E, //CJK UNIFIED IDEOGRAPH - 0xE770: 0x84F6, //CJK UNIFIED IDEOGRAPH - 0xE771: 0x8531, //CJK UNIFIED IDEOGRAPH - 0xE772: 0x8526, //CJK UNIFIED IDEOGRAPH - 0xE773: 0x84E7, //CJK UNIFIED IDEOGRAPH - 0xE774: 0x84E8, //CJK UNIFIED IDEOGRAPH - 0xE775: 0x84F0, //CJK UNIFIED IDEOGRAPH - 0xE776: 0x84EF, //CJK UNIFIED IDEOGRAPH - 0xE777: 0x84F9, //CJK UNIFIED IDEOGRAPH - 0xE778: 0x8518, //CJK UNIFIED IDEOGRAPH - 0xE779: 0x8520, //CJK UNIFIED IDEOGRAPH - 0xE77A: 0x8530, //CJK UNIFIED IDEOGRAPH - 0xE77B: 0x850B, //CJK UNIFIED IDEOGRAPH - 0xE77C: 0x8519, //CJK UNIFIED IDEOGRAPH - 0xE77D: 0x852F, //CJK UNIFIED IDEOGRAPH - 0xE77E: 0x8662, //CJK UNIFIED IDEOGRAPH - 0xE7A1: 0x8756, //CJK UNIFIED IDEOGRAPH - 0xE7A2: 0x8763, //CJK UNIFIED IDEOGRAPH - 0xE7A3: 0x8764, //CJK UNIFIED IDEOGRAPH - 0xE7A4: 0x8777, //CJK UNIFIED IDEOGRAPH - 0xE7A5: 0x87E1, //CJK UNIFIED IDEOGRAPH - 0xE7A6: 0x8773, //CJK UNIFIED IDEOGRAPH - 0xE7A7: 0x8758, //CJK UNIFIED IDEOGRAPH - 0xE7A8: 0x8754, //CJK UNIFIED IDEOGRAPH - 0xE7A9: 0x875B, //CJK UNIFIED IDEOGRAPH - 0xE7AA: 0x8752, //CJK UNIFIED IDEOGRAPH - 0xE7AB: 0x8761, //CJK UNIFIED IDEOGRAPH - 0xE7AC: 0x875A, //CJK UNIFIED IDEOGRAPH - 0xE7AD: 0x8751, //CJK UNIFIED IDEOGRAPH - 0xE7AE: 0x875E, //CJK UNIFIED IDEOGRAPH - 0xE7AF: 0x876D, //CJK UNIFIED IDEOGRAPH - 0xE7B0: 0x876A, //CJK UNIFIED IDEOGRAPH - 0xE7B1: 0x8750, //CJK UNIFIED IDEOGRAPH - 0xE7B2: 0x874E, //CJK UNIFIED IDEOGRAPH - 0xE7B3: 0x875F, //CJK UNIFIED IDEOGRAPH - 0xE7B4: 0x875D, //CJK UNIFIED IDEOGRAPH - 0xE7B5: 0x876F, //CJK UNIFIED IDEOGRAPH - 0xE7B6: 0x876C, //CJK UNIFIED IDEOGRAPH - 0xE7B7: 0x877A, //CJK UNIFIED IDEOGRAPH - 0xE7B8: 0x876E, //CJK UNIFIED IDEOGRAPH - 0xE7B9: 0x875C, //CJK UNIFIED IDEOGRAPH - 0xE7BA: 0x8765, //CJK UNIFIED IDEOGRAPH - 0xE7BB: 0x874F, //CJK UNIFIED IDEOGRAPH - 0xE7BC: 0x877B, //CJK UNIFIED IDEOGRAPH - 0xE7BD: 0x8775, //CJK UNIFIED IDEOGRAPH - 0xE7BE: 0x8762, //CJK UNIFIED IDEOGRAPH - 0xE7BF: 0x8767, //CJK UNIFIED IDEOGRAPH - 0xE7C0: 0x8769, //CJK UNIFIED IDEOGRAPH - 0xE7C1: 0x885A, //CJK UNIFIED IDEOGRAPH - 0xE7C2: 0x8905, //CJK UNIFIED IDEOGRAPH - 0xE7C3: 0x890C, //CJK UNIFIED IDEOGRAPH - 0xE7C4: 0x8914, //CJK UNIFIED IDEOGRAPH - 0xE7C5: 0x890B, //CJK UNIFIED IDEOGRAPH - 0xE7C6: 0x8917, //CJK UNIFIED IDEOGRAPH - 0xE7C7: 0x8918, //CJK UNIFIED IDEOGRAPH - 0xE7C8: 0x8919, //CJK UNIFIED IDEOGRAPH - 0xE7C9: 0x8906, //CJK UNIFIED IDEOGRAPH - 0xE7CA: 0x8916, //CJK UNIFIED IDEOGRAPH - 0xE7CB: 0x8911, //CJK UNIFIED IDEOGRAPH - 0xE7CC: 0x890E, //CJK UNIFIED IDEOGRAPH - 0xE7CD: 0x8909, //CJK UNIFIED IDEOGRAPH - 0xE7CE: 0x89A2, //CJK UNIFIED IDEOGRAPH - 0xE7CF: 0x89A4, //CJK UNIFIED IDEOGRAPH - 0xE7D0: 0x89A3, //CJK UNIFIED IDEOGRAPH - 0xE7D1: 0x89ED, //CJK UNIFIED IDEOGRAPH - 0xE7D2: 0x89F0, //CJK UNIFIED IDEOGRAPH - 0xE7D3: 0x89EC, //CJK UNIFIED IDEOGRAPH - 0xE7D4: 0x8ACF, //CJK UNIFIED IDEOGRAPH - 0xE7D5: 0x8AC6, //CJK UNIFIED IDEOGRAPH - 0xE7D6: 0x8AB8, //CJK UNIFIED IDEOGRAPH - 0xE7D7: 0x8AD3, //CJK UNIFIED IDEOGRAPH - 0xE7D8: 0x8AD1, //CJK UNIFIED IDEOGRAPH - 0xE7D9: 0x8AD4, //CJK UNIFIED IDEOGRAPH - 0xE7DA: 0x8AD5, //CJK UNIFIED IDEOGRAPH - 0xE7DB: 0x8ABB, //CJK UNIFIED IDEOGRAPH - 0xE7DC: 0x8AD7, //CJK UNIFIED IDEOGRAPH - 0xE7DD: 0x8ABE, //CJK UNIFIED IDEOGRAPH - 0xE7DE: 0x8AC0, //CJK UNIFIED IDEOGRAPH - 0xE7DF: 0x8AC5, //CJK UNIFIED IDEOGRAPH - 0xE7E0: 0x8AD8, //CJK UNIFIED IDEOGRAPH - 0xE7E1: 0x8AC3, //CJK UNIFIED IDEOGRAPH - 0xE7E2: 0x8ABA, //CJK UNIFIED IDEOGRAPH - 0xE7E3: 0x8ABD, //CJK UNIFIED IDEOGRAPH - 0xE7E4: 0x8AD9, //CJK UNIFIED IDEOGRAPH - 0xE7E5: 0x8C3E, //CJK UNIFIED IDEOGRAPH - 0xE7E6: 0x8C4D, //CJK UNIFIED IDEOGRAPH - 0xE7E7: 0x8C8F, //CJK UNIFIED IDEOGRAPH - 0xE7E8: 0x8CE5, //CJK UNIFIED IDEOGRAPH - 0xE7E9: 0x8CDF, //CJK UNIFIED IDEOGRAPH - 0xE7EA: 0x8CD9, //CJK UNIFIED IDEOGRAPH - 0xE7EB: 0x8CE8, //CJK UNIFIED IDEOGRAPH - 0xE7EC: 0x8CDA, //CJK UNIFIED IDEOGRAPH - 0xE7ED: 0x8CDD, //CJK UNIFIED IDEOGRAPH - 0xE7EE: 0x8CE7, //CJK UNIFIED IDEOGRAPH - 0xE7EF: 0x8DA0, //CJK UNIFIED IDEOGRAPH - 0xE7F0: 0x8D9C, //CJK UNIFIED IDEOGRAPH - 0xE7F1: 0x8DA1, //CJK UNIFIED IDEOGRAPH - 0xE7F2: 0x8D9B, //CJK UNIFIED IDEOGRAPH - 0xE7F3: 0x8E20, //CJK UNIFIED IDEOGRAPH - 0xE7F4: 0x8E23, //CJK UNIFIED IDEOGRAPH - 0xE7F5: 0x8E25, //CJK UNIFIED IDEOGRAPH - 0xE7F6: 0x8E24, //CJK UNIFIED IDEOGRAPH - 0xE7F7: 0x8E2E, //CJK UNIFIED IDEOGRAPH - 0xE7F8: 0x8E15, //CJK UNIFIED IDEOGRAPH - 0xE7F9: 0x8E1B, //CJK UNIFIED IDEOGRAPH - 0xE7FA: 0x8E16, //CJK UNIFIED IDEOGRAPH - 0xE7FB: 0x8E11, //CJK UNIFIED IDEOGRAPH - 0xE7FC: 0x8E19, //CJK UNIFIED IDEOGRAPH - 0xE7FD: 0x8E26, //CJK UNIFIED IDEOGRAPH - 0xE7FE: 0x8E27, //CJK UNIFIED IDEOGRAPH - 0xE840: 0x8E14, //CJK UNIFIED IDEOGRAPH - 0xE841: 0x8E12, //CJK UNIFIED IDEOGRAPH - 0xE842: 0x8E18, //CJK UNIFIED IDEOGRAPH - 0xE843: 0x8E13, //CJK UNIFIED IDEOGRAPH - 0xE844: 0x8E1C, //CJK UNIFIED IDEOGRAPH - 0xE845: 0x8E17, //CJK UNIFIED IDEOGRAPH - 0xE846: 0x8E1A, //CJK UNIFIED IDEOGRAPH - 0xE847: 0x8F2C, //CJK UNIFIED IDEOGRAPH - 0xE848: 0x8F24, //CJK UNIFIED IDEOGRAPH - 0xE849: 0x8F18, //CJK UNIFIED IDEOGRAPH - 0xE84A: 0x8F1A, //CJK UNIFIED IDEOGRAPH - 0xE84B: 0x8F20, //CJK UNIFIED IDEOGRAPH - 0xE84C: 0x8F23, //CJK UNIFIED IDEOGRAPH - 0xE84D: 0x8F16, //CJK UNIFIED IDEOGRAPH - 0xE84E: 0x8F17, //CJK UNIFIED IDEOGRAPH - 0xE84F: 0x9073, //CJK UNIFIED IDEOGRAPH - 0xE850: 0x9070, //CJK UNIFIED IDEOGRAPH - 0xE851: 0x906F, //CJK UNIFIED IDEOGRAPH - 0xE852: 0x9067, //CJK UNIFIED IDEOGRAPH - 0xE853: 0x906B, //CJK UNIFIED IDEOGRAPH - 0xE854: 0x912F, //CJK UNIFIED IDEOGRAPH - 0xE855: 0x912B, //CJK UNIFIED IDEOGRAPH - 0xE856: 0x9129, //CJK UNIFIED IDEOGRAPH - 0xE857: 0x912A, //CJK UNIFIED IDEOGRAPH - 0xE858: 0x9132, //CJK UNIFIED IDEOGRAPH - 0xE859: 0x9126, //CJK UNIFIED IDEOGRAPH - 0xE85A: 0x912E, //CJK UNIFIED IDEOGRAPH - 0xE85B: 0x9185, //CJK UNIFIED IDEOGRAPH - 0xE85C: 0x9186, //CJK UNIFIED IDEOGRAPH - 0xE85D: 0x918A, //CJK UNIFIED IDEOGRAPH - 0xE85E: 0x9181, //CJK UNIFIED IDEOGRAPH - 0xE85F: 0x9182, //CJK UNIFIED IDEOGRAPH - 0xE860: 0x9184, //CJK UNIFIED IDEOGRAPH - 0xE861: 0x9180, //CJK UNIFIED IDEOGRAPH - 0xE862: 0x92D0, //CJK UNIFIED IDEOGRAPH - 0xE863: 0x92C3, //CJK UNIFIED IDEOGRAPH - 0xE864: 0x92C4, //CJK UNIFIED IDEOGRAPH - 0xE865: 0x92C0, //CJK UNIFIED IDEOGRAPH - 0xE866: 0x92D9, //CJK UNIFIED IDEOGRAPH - 0xE867: 0x92B6, //CJK UNIFIED IDEOGRAPH - 0xE868: 0x92CF, //CJK UNIFIED IDEOGRAPH - 0xE869: 0x92F1, //CJK UNIFIED IDEOGRAPH - 0xE86A: 0x92DF, //CJK UNIFIED IDEOGRAPH - 0xE86B: 0x92D8, //CJK UNIFIED IDEOGRAPH - 0xE86C: 0x92E9, //CJK UNIFIED IDEOGRAPH - 0xE86D: 0x92D7, //CJK UNIFIED IDEOGRAPH - 0xE86E: 0x92DD, //CJK UNIFIED IDEOGRAPH - 0xE86F: 0x92CC, //CJK UNIFIED IDEOGRAPH - 0xE870: 0x92EF, //CJK UNIFIED IDEOGRAPH - 0xE871: 0x92C2, //CJK UNIFIED IDEOGRAPH - 0xE872: 0x92E8, //CJK UNIFIED IDEOGRAPH - 0xE873: 0x92CA, //CJK UNIFIED IDEOGRAPH - 0xE874: 0x92C8, //CJK UNIFIED IDEOGRAPH - 0xE875: 0x92CE, //CJK UNIFIED IDEOGRAPH - 0xE876: 0x92E6, //CJK UNIFIED IDEOGRAPH - 0xE877: 0x92CD, //CJK UNIFIED IDEOGRAPH - 0xE878: 0x92D5, //CJK UNIFIED IDEOGRAPH - 0xE879: 0x92C9, //CJK UNIFIED IDEOGRAPH - 0xE87A: 0x92E0, //CJK UNIFIED IDEOGRAPH - 0xE87B: 0x92DE, //CJK UNIFIED IDEOGRAPH - 0xE87C: 0x92E7, //CJK UNIFIED IDEOGRAPH - 0xE87D: 0x92D1, //CJK UNIFIED IDEOGRAPH - 0xE87E: 0x92D3, //CJK UNIFIED IDEOGRAPH - 0xE8A1: 0x92B5, //CJK UNIFIED IDEOGRAPH - 0xE8A2: 0x92E1, //CJK UNIFIED IDEOGRAPH - 0xE8A3: 0x92C6, //CJK UNIFIED IDEOGRAPH - 0xE8A4: 0x92B4, //CJK UNIFIED IDEOGRAPH - 0xE8A5: 0x957C, //CJK UNIFIED IDEOGRAPH - 0xE8A6: 0x95AC, //CJK UNIFIED IDEOGRAPH - 0xE8A7: 0x95AB, //CJK UNIFIED IDEOGRAPH - 0xE8A8: 0x95AE, //CJK UNIFIED IDEOGRAPH - 0xE8A9: 0x95B0, //CJK UNIFIED IDEOGRAPH - 0xE8AA: 0x96A4, //CJK UNIFIED IDEOGRAPH - 0xE8AB: 0x96A2, //CJK UNIFIED IDEOGRAPH - 0xE8AC: 0x96D3, //CJK UNIFIED IDEOGRAPH - 0xE8AD: 0x9705, //CJK UNIFIED IDEOGRAPH - 0xE8AE: 0x9708, //CJK UNIFIED IDEOGRAPH - 0xE8AF: 0x9702, //CJK UNIFIED IDEOGRAPH - 0xE8B0: 0x975A, //CJK UNIFIED IDEOGRAPH - 0xE8B1: 0x978A, //CJK UNIFIED IDEOGRAPH - 0xE8B2: 0x978E, //CJK UNIFIED IDEOGRAPH - 0xE8B3: 0x9788, //CJK UNIFIED IDEOGRAPH - 0xE8B4: 0x97D0, //CJK UNIFIED IDEOGRAPH - 0xE8B5: 0x97CF, //CJK UNIFIED IDEOGRAPH - 0xE8B6: 0x981E, //CJK UNIFIED IDEOGRAPH - 0xE8B7: 0x981D, //CJK UNIFIED IDEOGRAPH - 0xE8B8: 0x9826, //CJK UNIFIED IDEOGRAPH - 0xE8B9: 0x9829, //CJK UNIFIED IDEOGRAPH - 0xE8BA: 0x9828, //CJK UNIFIED IDEOGRAPH - 0xE8BB: 0x9820, //CJK UNIFIED IDEOGRAPH - 0xE8BC: 0x981B, //CJK UNIFIED IDEOGRAPH - 0xE8BD: 0x9827, //CJK UNIFIED IDEOGRAPH - 0xE8BE: 0x98B2, //CJK UNIFIED IDEOGRAPH - 0xE8BF: 0x9908, //CJK UNIFIED IDEOGRAPH - 0xE8C0: 0x98FA, //CJK UNIFIED IDEOGRAPH - 0xE8C1: 0x9911, //CJK UNIFIED IDEOGRAPH - 0xE8C2: 0x9914, //CJK UNIFIED IDEOGRAPH - 0xE8C3: 0x9916, //CJK UNIFIED IDEOGRAPH - 0xE8C4: 0x9917, //CJK UNIFIED IDEOGRAPH - 0xE8C5: 0x9915, //CJK UNIFIED IDEOGRAPH - 0xE8C6: 0x99DC, //CJK UNIFIED IDEOGRAPH - 0xE8C7: 0x99CD, //CJK UNIFIED IDEOGRAPH - 0xE8C8: 0x99CF, //CJK UNIFIED IDEOGRAPH - 0xE8C9: 0x99D3, //CJK UNIFIED IDEOGRAPH - 0xE8CA: 0x99D4, //CJK UNIFIED IDEOGRAPH - 0xE8CB: 0x99CE, //CJK UNIFIED IDEOGRAPH - 0xE8CC: 0x99C9, //CJK UNIFIED IDEOGRAPH - 0xE8CD: 0x99D6, //CJK UNIFIED IDEOGRAPH - 0xE8CE: 0x99D8, //CJK UNIFIED IDEOGRAPH - 0xE8CF: 0x99CB, //CJK UNIFIED IDEOGRAPH - 0xE8D0: 0x99D7, //CJK UNIFIED IDEOGRAPH - 0xE8D1: 0x99CC, //CJK UNIFIED IDEOGRAPH - 0xE8D2: 0x9AB3, //CJK UNIFIED IDEOGRAPH - 0xE8D3: 0x9AEC, //CJK UNIFIED IDEOGRAPH - 0xE8D4: 0x9AEB, //CJK UNIFIED IDEOGRAPH - 0xE8D5: 0x9AF3, //CJK UNIFIED IDEOGRAPH - 0xE8D6: 0x9AF2, //CJK UNIFIED IDEOGRAPH - 0xE8D7: 0x9AF1, //CJK UNIFIED IDEOGRAPH - 0xE8D8: 0x9B46, //CJK UNIFIED IDEOGRAPH - 0xE8D9: 0x9B43, //CJK UNIFIED IDEOGRAPH - 0xE8DA: 0x9B67, //CJK UNIFIED IDEOGRAPH - 0xE8DB: 0x9B74, //CJK UNIFIED IDEOGRAPH - 0xE8DC: 0x9B71, //CJK UNIFIED IDEOGRAPH - 0xE8DD: 0x9B66, //CJK UNIFIED IDEOGRAPH - 0xE8DE: 0x9B76, //CJK UNIFIED IDEOGRAPH - 0xE8DF: 0x9B75, //CJK UNIFIED IDEOGRAPH - 0xE8E0: 0x9B70, //CJK UNIFIED IDEOGRAPH - 0xE8E1: 0x9B68, //CJK UNIFIED IDEOGRAPH - 0xE8E2: 0x9B64, //CJK UNIFIED IDEOGRAPH - 0xE8E3: 0x9B6C, //CJK UNIFIED IDEOGRAPH - 0xE8E4: 0x9CFC, //CJK UNIFIED IDEOGRAPH - 0xE8E5: 0x9CFA, //CJK UNIFIED IDEOGRAPH - 0xE8E6: 0x9CFD, //CJK UNIFIED IDEOGRAPH - 0xE8E7: 0x9CFF, //CJK UNIFIED IDEOGRAPH - 0xE8E8: 0x9CF7, //CJK UNIFIED IDEOGRAPH - 0xE8E9: 0x9D07, //CJK UNIFIED IDEOGRAPH - 0xE8EA: 0x9D00, //CJK UNIFIED IDEOGRAPH - 0xE8EB: 0x9CF9, //CJK UNIFIED IDEOGRAPH - 0xE8EC: 0x9CFB, //CJK UNIFIED IDEOGRAPH - 0xE8ED: 0x9D08, //CJK UNIFIED IDEOGRAPH - 0xE8EE: 0x9D05, //CJK UNIFIED IDEOGRAPH - 0xE8EF: 0x9D04, //CJK UNIFIED IDEOGRAPH - 0xE8F0: 0x9E83, //CJK UNIFIED IDEOGRAPH - 0xE8F1: 0x9ED3, //CJK UNIFIED IDEOGRAPH - 0xE8F2: 0x9F0F, //CJK UNIFIED IDEOGRAPH - 0xE8F3: 0x9F10, //CJK UNIFIED IDEOGRAPH - 0xE8F4: 0x511C, //CJK UNIFIED IDEOGRAPH - 0xE8F5: 0x5113, //CJK UNIFIED IDEOGRAPH - 0xE8F6: 0x5117, //CJK UNIFIED IDEOGRAPH - 0xE8F7: 0x511A, //CJK UNIFIED IDEOGRAPH - 0xE8F8: 0x5111, //CJK UNIFIED IDEOGRAPH - 0xE8F9: 0x51DE, //CJK UNIFIED IDEOGRAPH - 0xE8FA: 0x5334, //CJK UNIFIED IDEOGRAPH - 0xE8FB: 0x53E1, //CJK UNIFIED IDEOGRAPH - 0xE8FC: 0x5670, //CJK UNIFIED IDEOGRAPH - 0xE8FD: 0x5660, //CJK UNIFIED IDEOGRAPH - 0xE8FE: 0x566E, //CJK UNIFIED IDEOGRAPH - 0xE940: 0x5673, //CJK UNIFIED IDEOGRAPH - 0xE941: 0x5666, //CJK UNIFIED IDEOGRAPH - 0xE942: 0x5663, //CJK UNIFIED IDEOGRAPH - 0xE943: 0x566D, //CJK UNIFIED IDEOGRAPH - 0xE944: 0x5672, //CJK UNIFIED IDEOGRAPH - 0xE945: 0x565E, //CJK UNIFIED IDEOGRAPH - 0xE946: 0x5677, //CJK UNIFIED IDEOGRAPH - 0xE947: 0x571C, //CJK UNIFIED IDEOGRAPH - 0xE948: 0x571B, //CJK UNIFIED IDEOGRAPH - 0xE949: 0x58C8, //CJK UNIFIED IDEOGRAPH - 0xE94A: 0x58BD, //CJK UNIFIED IDEOGRAPH - 0xE94B: 0x58C9, //CJK UNIFIED IDEOGRAPH - 0xE94C: 0x58BF, //CJK UNIFIED IDEOGRAPH - 0xE94D: 0x58BA, //CJK UNIFIED IDEOGRAPH - 0xE94E: 0x58C2, //CJK UNIFIED IDEOGRAPH - 0xE94F: 0x58BC, //CJK UNIFIED IDEOGRAPH - 0xE950: 0x58C6, //CJK UNIFIED IDEOGRAPH - 0xE951: 0x5B17, //CJK UNIFIED IDEOGRAPH - 0xE952: 0x5B19, //CJK UNIFIED IDEOGRAPH - 0xE953: 0x5B1B, //CJK UNIFIED IDEOGRAPH - 0xE954: 0x5B21, //CJK UNIFIED IDEOGRAPH - 0xE955: 0x5B14, //CJK UNIFIED IDEOGRAPH - 0xE956: 0x5B13, //CJK UNIFIED IDEOGRAPH - 0xE957: 0x5B10, //CJK UNIFIED IDEOGRAPH - 0xE958: 0x5B16, //CJK UNIFIED IDEOGRAPH - 0xE959: 0x5B28, //CJK UNIFIED IDEOGRAPH - 0xE95A: 0x5B1A, //CJK UNIFIED IDEOGRAPH - 0xE95B: 0x5B20, //CJK UNIFIED IDEOGRAPH - 0xE95C: 0x5B1E, //CJK UNIFIED IDEOGRAPH - 0xE95D: 0x5BEF, //CJK UNIFIED IDEOGRAPH - 0xE95E: 0x5DAC, //CJK UNIFIED IDEOGRAPH - 0xE95F: 0x5DB1, //CJK UNIFIED IDEOGRAPH - 0xE960: 0x5DA9, //CJK UNIFIED IDEOGRAPH - 0xE961: 0x5DA7, //CJK UNIFIED IDEOGRAPH - 0xE962: 0x5DB5, //CJK UNIFIED IDEOGRAPH - 0xE963: 0x5DB0, //CJK UNIFIED IDEOGRAPH - 0xE964: 0x5DAE, //CJK UNIFIED IDEOGRAPH - 0xE965: 0x5DAA, //CJK UNIFIED IDEOGRAPH - 0xE966: 0x5DA8, //CJK UNIFIED IDEOGRAPH - 0xE967: 0x5DB2, //CJK UNIFIED IDEOGRAPH - 0xE968: 0x5DAD, //CJK UNIFIED IDEOGRAPH - 0xE969: 0x5DAF, //CJK UNIFIED IDEOGRAPH - 0xE96A: 0x5DB4, //CJK UNIFIED IDEOGRAPH - 0xE96B: 0x5E67, //CJK UNIFIED IDEOGRAPH - 0xE96C: 0x5E68, //CJK UNIFIED IDEOGRAPH - 0xE96D: 0x5E66, //CJK UNIFIED IDEOGRAPH - 0xE96E: 0x5E6F, //CJK UNIFIED IDEOGRAPH - 0xE96F: 0x5EE9, //CJK UNIFIED IDEOGRAPH - 0xE970: 0x5EE7, //CJK UNIFIED IDEOGRAPH - 0xE971: 0x5EE6, //CJK UNIFIED IDEOGRAPH - 0xE972: 0x5EE8, //CJK UNIFIED IDEOGRAPH - 0xE973: 0x5EE5, //CJK UNIFIED IDEOGRAPH - 0xE974: 0x5F4B, //CJK UNIFIED IDEOGRAPH - 0xE975: 0x5FBC, //CJK UNIFIED IDEOGRAPH - 0xE976: 0x619D, //CJK UNIFIED IDEOGRAPH - 0xE977: 0x61A8, //CJK UNIFIED IDEOGRAPH - 0xE978: 0x6196, //CJK UNIFIED IDEOGRAPH - 0xE979: 0x61C5, //CJK UNIFIED IDEOGRAPH - 0xE97A: 0x61B4, //CJK UNIFIED IDEOGRAPH - 0xE97B: 0x61C6, //CJK UNIFIED IDEOGRAPH - 0xE97C: 0x61C1, //CJK UNIFIED IDEOGRAPH - 0xE97D: 0x61CC, //CJK UNIFIED IDEOGRAPH - 0xE97E: 0x61BA, //CJK UNIFIED IDEOGRAPH - 0xE9A1: 0x61BF, //CJK UNIFIED IDEOGRAPH - 0xE9A2: 0x61B8, //CJK UNIFIED IDEOGRAPH - 0xE9A3: 0x618C, //CJK UNIFIED IDEOGRAPH - 0xE9A4: 0x64D7, //CJK UNIFIED IDEOGRAPH - 0xE9A5: 0x64D6, //CJK UNIFIED IDEOGRAPH - 0xE9A6: 0x64D0, //CJK UNIFIED IDEOGRAPH - 0xE9A7: 0x64CF, //CJK UNIFIED IDEOGRAPH - 0xE9A8: 0x64C9, //CJK UNIFIED IDEOGRAPH - 0xE9A9: 0x64BD, //CJK UNIFIED IDEOGRAPH - 0xE9AA: 0x6489, //CJK UNIFIED IDEOGRAPH - 0xE9AB: 0x64C3, //CJK UNIFIED IDEOGRAPH - 0xE9AC: 0x64DB, //CJK UNIFIED IDEOGRAPH - 0xE9AD: 0x64F3, //CJK UNIFIED IDEOGRAPH - 0xE9AE: 0x64D9, //CJK UNIFIED IDEOGRAPH - 0xE9AF: 0x6533, //CJK UNIFIED IDEOGRAPH - 0xE9B0: 0x657F, //CJK UNIFIED IDEOGRAPH - 0xE9B1: 0x657C, //CJK UNIFIED IDEOGRAPH - 0xE9B2: 0x65A2, //CJK UNIFIED IDEOGRAPH - 0xE9B3: 0x66C8, //CJK UNIFIED IDEOGRAPH - 0xE9B4: 0x66BE, //CJK UNIFIED IDEOGRAPH - 0xE9B5: 0x66C0, //CJK UNIFIED IDEOGRAPH - 0xE9B6: 0x66CA, //CJK UNIFIED IDEOGRAPH - 0xE9B7: 0x66CB, //CJK UNIFIED IDEOGRAPH - 0xE9B8: 0x66CF, //CJK UNIFIED IDEOGRAPH - 0xE9B9: 0x66BD, //CJK UNIFIED IDEOGRAPH - 0xE9BA: 0x66BB, //CJK UNIFIED IDEOGRAPH - 0xE9BB: 0x66BA, //CJK UNIFIED IDEOGRAPH - 0xE9BC: 0x66CC, //CJK UNIFIED IDEOGRAPH - 0xE9BD: 0x6723, //CJK UNIFIED IDEOGRAPH - 0xE9BE: 0x6A34, //CJK UNIFIED IDEOGRAPH - 0xE9BF: 0x6A66, //CJK UNIFIED IDEOGRAPH - 0xE9C0: 0x6A49, //CJK UNIFIED IDEOGRAPH - 0xE9C1: 0x6A67, //CJK UNIFIED IDEOGRAPH - 0xE9C2: 0x6A32, //CJK UNIFIED IDEOGRAPH - 0xE9C3: 0x6A68, //CJK UNIFIED IDEOGRAPH - 0xE9C4: 0x6A3E, //CJK UNIFIED IDEOGRAPH - 0xE9C5: 0x6A5D, //CJK UNIFIED IDEOGRAPH - 0xE9C6: 0x6A6D, //CJK UNIFIED IDEOGRAPH - 0xE9C7: 0x6A76, //CJK UNIFIED IDEOGRAPH - 0xE9C8: 0x6A5B, //CJK UNIFIED IDEOGRAPH - 0xE9C9: 0x6A51, //CJK UNIFIED IDEOGRAPH - 0xE9CA: 0x6A28, //CJK UNIFIED IDEOGRAPH - 0xE9CB: 0x6A5A, //CJK UNIFIED IDEOGRAPH - 0xE9CC: 0x6A3B, //CJK UNIFIED IDEOGRAPH - 0xE9CD: 0x6A3F, //CJK UNIFIED IDEOGRAPH - 0xE9CE: 0x6A41, //CJK UNIFIED IDEOGRAPH - 0xE9CF: 0x6A6A, //CJK UNIFIED IDEOGRAPH - 0xE9D0: 0x6A64, //CJK UNIFIED IDEOGRAPH - 0xE9D1: 0x6A50, //CJK UNIFIED IDEOGRAPH - 0xE9D2: 0x6A4F, //CJK UNIFIED IDEOGRAPH - 0xE9D3: 0x6A54, //CJK UNIFIED IDEOGRAPH - 0xE9D4: 0x6A6F, //CJK UNIFIED IDEOGRAPH - 0xE9D5: 0x6A69, //CJK UNIFIED IDEOGRAPH - 0xE9D6: 0x6A60, //CJK UNIFIED IDEOGRAPH - 0xE9D7: 0x6A3C, //CJK UNIFIED IDEOGRAPH - 0xE9D8: 0x6A5E, //CJK UNIFIED IDEOGRAPH - 0xE9D9: 0x6A56, //CJK UNIFIED IDEOGRAPH - 0xE9DA: 0x6A55, //CJK UNIFIED IDEOGRAPH - 0xE9DB: 0x6A4D, //CJK UNIFIED IDEOGRAPH - 0xE9DC: 0x6A4E, //CJK UNIFIED IDEOGRAPH - 0xE9DD: 0x6A46, //CJK UNIFIED IDEOGRAPH - 0xE9DE: 0x6B55, //CJK UNIFIED IDEOGRAPH - 0xE9DF: 0x6B54, //CJK UNIFIED IDEOGRAPH - 0xE9E0: 0x6B56, //CJK UNIFIED IDEOGRAPH - 0xE9E1: 0x6BA7, //CJK UNIFIED IDEOGRAPH - 0xE9E2: 0x6BAA, //CJK UNIFIED IDEOGRAPH - 0xE9E3: 0x6BAB, //CJK UNIFIED IDEOGRAPH - 0xE9E4: 0x6BC8, //CJK UNIFIED IDEOGRAPH - 0xE9E5: 0x6BC7, //CJK UNIFIED IDEOGRAPH - 0xE9E6: 0x6C04, //CJK UNIFIED IDEOGRAPH - 0xE9E7: 0x6C03, //CJK UNIFIED IDEOGRAPH - 0xE9E8: 0x6C06, //CJK UNIFIED IDEOGRAPH - 0xE9E9: 0x6FAD, //CJK UNIFIED IDEOGRAPH - 0xE9EA: 0x6FCB, //CJK UNIFIED IDEOGRAPH - 0xE9EB: 0x6FA3, //CJK UNIFIED IDEOGRAPH - 0xE9EC: 0x6FC7, //CJK UNIFIED IDEOGRAPH - 0xE9ED: 0x6FBC, //CJK UNIFIED IDEOGRAPH - 0xE9EE: 0x6FCE, //CJK UNIFIED IDEOGRAPH - 0xE9EF: 0x6FC8, //CJK UNIFIED IDEOGRAPH - 0xE9F0: 0x6F5E, //CJK UNIFIED IDEOGRAPH - 0xE9F1: 0x6FC4, //CJK UNIFIED IDEOGRAPH - 0xE9F2: 0x6FBD, //CJK UNIFIED IDEOGRAPH - 0xE9F3: 0x6F9E, //CJK UNIFIED IDEOGRAPH - 0xE9F4: 0x6FCA, //CJK UNIFIED IDEOGRAPH - 0xE9F5: 0x6FA8, //CJK UNIFIED IDEOGRAPH - 0xE9F6: 0x7004, //CJK UNIFIED IDEOGRAPH - 0xE9F7: 0x6FA5, //CJK UNIFIED IDEOGRAPH - 0xE9F8: 0x6FAE, //CJK UNIFIED IDEOGRAPH - 0xE9F9: 0x6FBA, //CJK UNIFIED IDEOGRAPH - 0xE9FA: 0x6FAC, //CJK UNIFIED IDEOGRAPH - 0xE9FB: 0x6FAA, //CJK UNIFIED IDEOGRAPH - 0xE9FC: 0x6FCF, //CJK UNIFIED IDEOGRAPH - 0xE9FD: 0x6FBF, //CJK UNIFIED IDEOGRAPH - 0xE9FE: 0x6FB8, //CJK UNIFIED IDEOGRAPH - 0xEA40: 0x6FA2, //CJK UNIFIED IDEOGRAPH - 0xEA41: 0x6FC9, //CJK UNIFIED IDEOGRAPH - 0xEA42: 0x6FAB, //CJK UNIFIED IDEOGRAPH - 0xEA43: 0x6FCD, //CJK UNIFIED IDEOGRAPH - 0xEA44: 0x6FAF, //CJK UNIFIED IDEOGRAPH - 0xEA45: 0x6FB2, //CJK UNIFIED IDEOGRAPH - 0xEA46: 0x6FB0, //CJK UNIFIED IDEOGRAPH - 0xEA47: 0x71C5, //CJK UNIFIED IDEOGRAPH - 0xEA48: 0x71C2, //CJK UNIFIED IDEOGRAPH - 0xEA49: 0x71BF, //CJK UNIFIED IDEOGRAPH - 0xEA4A: 0x71B8, //CJK UNIFIED IDEOGRAPH - 0xEA4B: 0x71D6, //CJK UNIFIED IDEOGRAPH - 0xEA4C: 0x71C0, //CJK UNIFIED IDEOGRAPH - 0xEA4D: 0x71C1, //CJK UNIFIED IDEOGRAPH - 0xEA4E: 0x71CB, //CJK UNIFIED IDEOGRAPH - 0xEA4F: 0x71D4, //CJK UNIFIED IDEOGRAPH - 0xEA50: 0x71CA, //CJK UNIFIED IDEOGRAPH - 0xEA51: 0x71C7, //CJK UNIFIED IDEOGRAPH - 0xEA52: 0x71CF, //CJK UNIFIED IDEOGRAPH - 0xEA53: 0x71BD, //CJK UNIFIED IDEOGRAPH - 0xEA54: 0x71D8, //CJK UNIFIED IDEOGRAPH - 0xEA55: 0x71BC, //CJK UNIFIED IDEOGRAPH - 0xEA56: 0x71C6, //CJK UNIFIED IDEOGRAPH - 0xEA57: 0x71DA, //CJK UNIFIED IDEOGRAPH - 0xEA58: 0x71DB, //CJK UNIFIED IDEOGRAPH - 0xEA59: 0x729D, //CJK UNIFIED IDEOGRAPH - 0xEA5A: 0x729E, //CJK UNIFIED IDEOGRAPH - 0xEA5B: 0x7369, //CJK UNIFIED IDEOGRAPH - 0xEA5C: 0x7366, //CJK UNIFIED IDEOGRAPH - 0xEA5D: 0x7367, //CJK UNIFIED IDEOGRAPH - 0xEA5E: 0x736C, //CJK UNIFIED IDEOGRAPH - 0xEA5F: 0x7365, //CJK UNIFIED IDEOGRAPH - 0xEA60: 0x736B, //CJK UNIFIED IDEOGRAPH - 0xEA61: 0x736A, //CJK UNIFIED IDEOGRAPH - 0xEA62: 0x747F, //CJK UNIFIED IDEOGRAPH - 0xEA63: 0x749A, //CJK UNIFIED IDEOGRAPH - 0xEA64: 0x74A0, //CJK UNIFIED IDEOGRAPH - 0xEA65: 0x7494, //CJK UNIFIED IDEOGRAPH - 0xEA66: 0x7492, //CJK UNIFIED IDEOGRAPH - 0xEA67: 0x7495, //CJK UNIFIED IDEOGRAPH - 0xEA68: 0x74A1, //CJK UNIFIED IDEOGRAPH - 0xEA69: 0x750B, //CJK UNIFIED IDEOGRAPH - 0xEA6A: 0x7580, //CJK UNIFIED IDEOGRAPH - 0xEA6B: 0x762F, //CJK UNIFIED IDEOGRAPH - 0xEA6C: 0x762D, //CJK UNIFIED IDEOGRAPH - 0xEA6D: 0x7631, //CJK UNIFIED IDEOGRAPH - 0xEA6E: 0x763D, //CJK UNIFIED IDEOGRAPH - 0xEA6F: 0x7633, //CJK UNIFIED IDEOGRAPH - 0xEA70: 0x763C, //CJK UNIFIED IDEOGRAPH - 0xEA71: 0x7635, //CJK UNIFIED IDEOGRAPH - 0xEA72: 0x7632, //CJK UNIFIED IDEOGRAPH - 0xEA73: 0x7630, //CJK UNIFIED IDEOGRAPH - 0xEA74: 0x76BB, //CJK UNIFIED IDEOGRAPH - 0xEA75: 0x76E6, //CJK UNIFIED IDEOGRAPH - 0xEA76: 0x779A, //CJK UNIFIED IDEOGRAPH - 0xEA77: 0x779D, //CJK UNIFIED IDEOGRAPH - 0xEA78: 0x77A1, //CJK UNIFIED IDEOGRAPH - 0xEA79: 0x779C, //CJK UNIFIED IDEOGRAPH - 0xEA7A: 0x779B, //CJK UNIFIED IDEOGRAPH - 0xEA7B: 0x77A2, //CJK UNIFIED IDEOGRAPH - 0xEA7C: 0x77A3, //CJK UNIFIED IDEOGRAPH - 0xEA7D: 0x7795, //CJK UNIFIED IDEOGRAPH - 0xEA7E: 0x7799, //CJK UNIFIED IDEOGRAPH - 0xEAA1: 0x7797, //CJK UNIFIED IDEOGRAPH - 0xEAA2: 0x78DD, //CJK UNIFIED IDEOGRAPH - 0xEAA3: 0x78E9, //CJK UNIFIED IDEOGRAPH - 0xEAA4: 0x78E5, //CJK UNIFIED IDEOGRAPH - 0xEAA5: 0x78EA, //CJK UNIFIED IDEOGRAPH - 0xEAA6: 0x78DE, //CJK UNIFIED IDEOGRAPH - 0xEAA7: 0x78E3, //CJK UNIFIED IDEOGRAPH - 0xEAA8: 0x78DB, //CJK UNIFIED IDEOGRAPH - 0xEAA9: 0x78E1, //CJK UNIFIED IDEOGRAPH - 0xEAAA: 0x78E2, //CJK UNIFIED IDEOGRAPH - 0xEAAB: 0x78ED, //CJK UNIFIED IDEOGRAPH - 0xEAAC: 0x78DF, //CJK UNIFIED IDEOGRAPH - 0xEAAD: 0x78E0, //CJK UNIFIED IDEOGRAPH - 0xEAAE: 0x79A4, //CJK UNIFIED IDEOGRAPH - 0xEAAF: 0x7A44, //CJK UNIFIED IDEOGRAPH - 0xEAB0: 0x7A48, //CJK UNIFIED IDEOGRAPH - 0xEAB1: 0x7A47, //CJK UNIFIED IDEOGRAPH - 0xEAB2: 0x7AB6, //CJK UNIFIED IDEOGRAPH - 0xEAB3: 0x7AB8, //CJK UNIFIED IDEOGRAPH - 0xEAB4: 0x7AB5, //CJK UNIFIED IDEOGRAPH - 0xEAB5: 0x7AB1, //CJK UNIFIED IDEOGRAPH - 0xEAB6: 0x7AB7, //CJK UNIFIED IDEOGRAPH - 0xEAB7: 0x7BDE, //CJK UNIFIED IDEOGRAPH - 0xEAB8: 0x7BE3, //CJK UNIFIED IDEOGRAPH - 0xEAB9: 0x7BE7, //CJK UNIFIED IDEOGRAPH - 0xEABA: 0x7BDD, //CJK UNIFIED IDEOGRAPH - 0xEABB: 0x7BD5, //CJK UNIFIED IDEOGRAPH - 0xEABC: 0x7BE5, //CJK UNIFIED IDEOGRAPH - 0xEABD: 0x7BDA, //CJK UNIFIED IDEOGRAPH - 0xEABE: 0x7BE8, //CJK UNIFIED IDEOGRAPH - 0xEABF: 0x7BF9, //CJK UNIFIED IDEOGRAPH - 0xEAC0: 0x7BD4, //CJK UNIFIED IDEOGRAPH - 0xEAC1: 0x7BEA, //CJK UNIFIED IDEOGRAPH - 0xEAC2: 0x7BE2, //CJK UNIFIED IDEOGRAPH - 0xEAC3: 0x7BDC, //CJK UNIFIED IDEOGRAPH - 0xEAC4: 0x7BEB, //CJK UNIFIED IDEOGRAPH - 0xEAC5: 0x7BD8, //CJK UNIFIED IDEOGRAPH - 0xEAC6: 0x7BDF, //CJK UNIFIED IDEOGRAPH - 0xEAC7: 0x7CD2, //CJK UNIFIED IDEOGRAPH - 0xEAC8: 0x7CD4, //CJK UNIFIED IDEOGRAPH - 0xEAC9: 0x7CD7, //CJK UNIFIED IDEOGRAPH - 0xEACA: 0x7CD0, //CJK UNIFIED IDEOGRAPH - 0xEACB: 0x7CD1, //CJK UNIFIED IDEOGRAPH - 0xEACC: 0x7E12, //CJK UNIFIED IDEOGRAPH - 0xEACD: 0x7E21, //CJK UNIFIED IDEOGRAPH - 0xEACE: 0x7E17, //CJK UNIFIED IDEOGRAPH - 0xEACF: 0x7E0C, //CJK UNIFIED IDEOGRAPH - 0xEAD0: 0x7E1F, //CJK UNIFIED IDEOGRAPH - 0xEAD1: 0x7E20, //CJK UNIFIED IDEOGRAPH - 0xEAD2: 0x7E13, //CJK UNIFIED IDEOGRAPH - 0xEAD3: 0x7E0E, //CJK UNIFIED IDEOGRAPH - 0xEAD4: 0x7E1C, //CJK UNIFIED IDEOGRAPH - 0xEAD5: 0x7E15, //CJK UNIFIED IDEOGRAPH - 0xEAD6: 0x7E1A, //CJK UNIFIED IDEOGRAPH - 0xEAD7: 0x7E22, //CJK UNIFIED IDEOGRAPH - 0xEAD8: 0x7E0B, //CJK UNIFIED IDEOGRAPH - 0xEAD9: 0x7E0F, //CJK UNIFIED IDEOGRAPH - 0xEADA: 0x7E16, //CJK UNIFIED IDEOGRAPH - 0xEADB: 0x7E0D, //CJK UNIFIED IDEOGRAPH - 0xEADC: 0x7E14, //CJK UNIFIED IDEOGRAPH - 0xEADD: 0x7E25, //CJK UNIFIED IDEOGRAPH - 0xEADE: 0x7E24, //CJK UNIFIED IDEOGRAPH - 0xEADF: 0x7F43, //CJK UNIFIED IDEOGRAPH - 0xEAE0: 0x7F7B, //CJK UNIFIED IDEOGRAPH - 0xEAE1: 0x7F7C, //CJK UNIFIED IDEOGRAPH - 0xEAE2: 0x7F7A, //CJK UNIFIED IDEOGRAPH - 0xEAE3: 0x7FB1, //CJK UNIFIED IDEOGRAPH - 0xEAE4: 0x7FEF, //CJK UNIFIED IDEOGRAPH - 0xEAE5: 0x802A, //CJK UNIFIED IDEOGRAPH - 0xEAE6: 0x8029, //CJK UNIFIED IDEOGRAPH - 0xEAE7: 0x806C, //CJK UNIFIED IDEOGRAPH - 0xEAE8: 0x81B1, //CJK UNIFIED IDEOGRAPH - 0xEAE9: 0x81A6, //CJK UNIFIED IDEOGRAPH - 0xEAEA: 0x81AE, //CJK UNIFIED IDEOGRAPH - 0xEAEB: 0x81B9, //CJK UNIFIED IDEOGRAPH - 0xEAEC: 0x81B5, //CJK UNIFIED IDEOGRAPH - 0xEAED: 0x81AB, //CJK UNIFIED IDEOGRAPH - 0xEAEE: 0x81B0, //CJK UNIFIED IDEOGRAPH - 0xEAEF: 0x81AC, //CJK UNIFIED IDEOGRAPH - 0xEAF0: 0x81B4, //CJK UNIFIED IDEOGRAPH - 0xEAF1: 0x81B2, //CJK UNIFIED IDEOGRAPH - 0xEAF2: 0x81B7, //CJK UNIFIED IDEOGRAPH - 0xEAF3: 0x81A7, //CJK UNIFIED IDEOGRAPH - 0xEAF4: 0x81F2, //CJK UNIFIED IDEOGRAPH - 0xEAF5: 0x8255, //CJK UNIFIED IDEOGRAPH - 0xEAF6: 0x8256, //CJK UNIFIED IDEOGRAPH - 0xEAF7: 0x8257, //CJK UNIFIED IDEOGRAPH - 0xEAF8: 0x8556, //CJK UNIFIED IDEOGRAPH - 0xEAF9: 0x8545, //CJK UNIFIED IDEOGRAPH - 0xEAFA: 0x856B, //CJK UNIFIED IDEOGRAPH - 0xEAFB: 0x854D, //CJK UNIFIED IDEOGRAPH - 0xEAFC: 0x8553, //CJK UNIFIED IDEOGRAPH - 0xEAFD: 0x8561, //CJK UNIFIED IDEOGRAPH - 0xEAFE: 0x8558, //CJK UNIFIED IDEOGRAPH - 0xEB40: 0x8540, //CJK UNIFIED IDEOGRAPH - 0xEB41: 0x8546, //CJK UNIFIED IDEOGRAPH - 0xEB42: 0x8564, //CJK UNIFIED IDEOGRAPH - 0xEB43: 0x8541, //CJK UNIFIED IDEOGRAPH - 0xEB44: 0x8562, //CJK UNIFIED IDEOGRAPH - 0xEB45: 0x8544, //CJK UNIFIED IDEOGRAPH - 0xEB46: 0x8551, //CJK UNIFIED IDEOGRAPH - 0xEB47: 0x8547, //CJK UNIFIED IDEOGRAPH - 0xEB48: 0x8563, //CJK UNIFIED IDEOGRAPH - 0xEB49: 0x853E, //CJK UNIFIED IDEOGRAPH - 0xEB4A: 0x855B, //CJK UNIFIED IDEOGRAPH - 0xEB4B: 0x8571, //CJK UNIFIED IDEOGRAPH - 0xEB4C: 0x854E, //CJK UNIFIED IDEOGRAPH - 0xEB4D: 0x856E, //CJK UNIFIED IDEOGRAPH - 0xEB4E: 0x8575, //CJK UNIFIED IDEOGRAPH - 0xEB4F: 0x8555, //CJK UNIFIED IDEOGRAPH - 0xEB50: 0x8567, //CJK UNIFIED IDEOGRAPH - 0xEB51: 0x8560, //CJK UNIFIED IDEOGRAPH - 0xEB52: 0x858C, //CJK UNIFIED IDEOGRAPH - 0xEB53: 0x8566, //CJK UNIFIED IDEOGRAPH - 0xEB54: 0x855D, //CJK UNIFIED IDEOGRAPH - 0xEB55: 0x8554, //CJK UNIFIED IDEOGRAPH - 0xEB56: 0x8565, //CJK UNIFIED IDEOGRAPH - 0xEB57: 0x856C, //CJK UNIFIED IDEOGRAPH - 0xEB58: 0x8663, //CJK UNIFIED IDEOGRAPH - 0xEB59: 0x8665, //CJK UNIFIED IDEOGRAPH - 0xEB5A: 0x8664, //CJK UNIFIED IDEOGRAPH - 0xEB5B: 0x879B, //CJK UNIFIED IDEOGRAPH - 0xEB5C: 0x878F, //CJK UNIFIED IDEOGRAPH - 0xEB5D: 0x8797, //CJK UNIFIED IDEOGRAPH - 0xEB5E: 0x8793, //CJK UNIFIED IDEOGRAPH - 0xEB5F: 0x8792, //CJK UNIFIED IDEOGRAPH - 0xEB60: 0x8788, //CJK UNIFIED IDEOGRAPH - 0xEB61: 0x8781, //CJK UNIFIED IDEOGRAPH - 0xEB62: 0x8796, //CJK UNIFIED IDEOGRAPH - 0xEB63: 0x8798, //CJK UNIFIED IDEOGRAPH - 0xEB64: 0x8779, //CJK UNIFIED IDEOGRAPH - 0xEB65: 0x8787, //CJK UNIFIED IDEOGRAPH - 0xEB66: 0x87A3, //CJK UNIFIED IDEOGRAPH - 0xEB67: 0x8785, //CJK UNIFIED IDEOGRAPH - 0xEB68: 0x8790, //CJK UNIFIED IDEOGRAPH - 0xEB69: 0x8791, //CJK UNIFIED IDEOGRAPH - 0xEB6A: 0x879D, //CJK UNIFIED IDEOGRAPH - 0xEB6B: 0x8784, //CJK UNIFIED IDEOGRAPH - 0xEB6C: 0x8794, //CJK UNIFIED IDEOGRAPH - 0xEB6D: 0x879C, //CJK UNIFIED IDEOGRAPH - 0xEB6E: 0x879A, //CJK UNIFIED IDEOGRAPH - 0xEB6F: 0x8789, //CJK UNIFIED IDEOGRAPH - 0xEB70: 0x891E, //CJK UNIFIED IDEOGRAPH - 0xEB71: 0x8926, //CJK UNIFIED IDEOGRAPH - 0xEB72: 0x8930, //CJK UNIFIED IDEOGRAPH - 0xEB73: 0x892D, //CJK UNIFIED IDEOGRAPH - 0xEB74: 0x892E, //CJK UNIFIED IDEOGRAPH - 0xEB75: 0x8927, //CJK UNIFIED IDEOGRAPH - 0xEB76: 0x8931, //CJK UNIFIED IDEOGRAPH - 0xEB77: 0x8922, //CJK UNIFIED IDEOGRAPH - 0xEB78: 0x8929, //CJK UNIFIED IDEOGRAPH - 0xEB79: 0x8923, //CJK UNIFIED IDEOGRAPH - 0xEB7A: 0x892F, //CJK UNIFIED IDEOGRAPH - 0xEB7B: 0x892C, //CJK UNIFIED IDEOGRAPH - 0xEB7C: 0x891F, //CJK UNIFIED IDEOGRAPH - 0xEB7D: 0x89F1, //CJK UNIFIED IDEOGRAPH - 0xEB7E: 0x8AE0, //CJK UNIFIED IDEOGRAPH - 0xEBA1: 0x8AE2, //CJK UNIFIED IDEOGRAPH - 0xEBA2: 0x8AF2, //CJK UNIFIED IDEOGRAPH - 0xEBA3: 0x8AF4, //CJK UNIFIED IDEOGRAPH - 0xEBA4: 0x8AF5, //CJK UNIFIED IDEOGRAPH - 0xEBA5: 0x8ADD, //CJK UNIFIED IDEOGRAPH - 0xEBA6: 0x8B14, //CJK UNIFIED IDEOGRAPH - 0xEBA7: 0x8AE4, //CJK UNIFIED IDEOGRAPH - 0xEBA8: 0x8ADF, //CJK UNIFIED IDEOGRAPH - 0xEBA9: 0x8AF0, //CJK UNIFIED IDEOGRAPH - 0xEBAA: 0x8AC8, //CJK UNIFIED IDEOGRAPH - 0xEBAB: 0x8ADE, //CJK UNIFIED IDEOGRAPH - 0xEBAC: 0x8AE1, //CJK UNIFIED IDEOGRAPH - 0xEBAD: 0x8AE8, //CJK UNIFIED IDEOGRAPH - 0xEBAE: 0x8AFF, //CJK UNIFIED IDEOGRAPH - 0xEBAF: 0x8AEF, //CJK UNIFIED IDEOGRAPH - 0xEBB0: 0x8AFB, //CJK UNIFIED IDEOGRAPH - 0xEBB1: 0x8C91, //CJK UNIFIED IDEOGRAPH - 0xEBB2: 0x8C92, //CJK UNIFIED IDEOGRAPH - 0xEBB3: 0x8C90, //CJK UNIFIED IDEOGRAPH - 0xEBB4: 0x8CF5, //CJK UNIFIED IDEOGRAPH - 0xEBB5: 0x8CEE, //CJK UNIFIED IDEOGRAPH - 0xEBB6: 0x8CF1, //CJK UNIFIED IDEOGRAPH - 0xEBB7: 0x8CF0, //CJK UNIFIED IDEOGRAPH - 0xEBB8: 0x8CF3, //CJK UNIFIED IDEOGRAPH - 0xEBB9: 0x8D6C, //CJK UNIFIED IDEOGRAPH - 0xEBBA: 0x8D6E, //CJK UNIFIED IDEOGRAPH - 0xEBBB: 0x8DA5, //CJK UNIFIED IDEOGRAPH - 0xEBBC: 0x8DA7, //CJK UNIFIED IDEOGRAPH - 0xEBBD: 0x8E33, //CJK UNIFIED IDEOGRAPH - 0xEBBE: 0x8E3E, //CJK UNIFIED IDEOGRAPH - 0xEBBF: 0x8E38, //CJK UNIFIED IDEOGRAPH - 0xEBC0: 0x8E40, //CJK UNIFIED IDEOGRAPH - 0xEBC1: 0x8E45, //CJK UNIFIED IDEOGRAPH - 0xEBC2: 0x8E36, //CJK UNIFIED IDEOGRAPH - 0xEBC3: 0x8E3C, //CJK UNIFIED IDEOGRAPH - 0xEBC4: 0x8E3D, //CJK UNIFIED IDEOGRAPH - 0xEBC5: 0x8E41, //CJK UNIFIED IDEOGRAPH - 0xEBC6: 0x8E30, //CJK UNIFIED IDEOGRAPH - 0xEBC7: 0x8E3F, //CJK UNIFIED IDEOGRAPH - 0xEBC8: 0x8EBD, //CJK UNIFIED IDEOGRAPH - 0xEBC9: 0x8F36, //CJK UNIFIED IDEOGRAPH - 0xEBCA: 0x8F2E, //CJK UNIFIED IDEOGRAPH - 0xEBCB: 0x8F35, //CJK UNIFIED IDEOGRAPH - 0xEBCC: 0x8F32, //CJK UNIFIED IDEOGRAPH - 0xEBCD: 0x8F39, //CJK UNIFIED IDEOGRAPH - 0xEBCE: 0x8F37, //CJK UNIFIED IDEOGRAPH - 0xEBCF: 0x8F34, //CJK UNIFIED IDEOGRAPH - 0xEBD0: 0x9076, //CJK UNIFIED IDEOGRAPH - 0xEBD1: 0x9079, //CJK UNIFIED IDEOGRAPH - 0xEBD2: 0x907B, //CJK UNIFIED IDEOGRAPH - 0xEBD3: 0x9086, //CJK UNIFIED IDEOGRAPH - 0xEBD4: 0x90FA, //CJK UNIFIED IDEOGRAPH - 0xEBD5: 0x9133, //CJK UNIFIED IDEOGRAPH - 0xEBD6: 0x9135, //CJK UNIFIED IDEOGRAPH - 0xEBD7: 0x9136, //CJK UNIFIED IDEOGRAPH - 0xEBD8: 0x9193, //CJK UNIFIED IDEOGRAPH - 0xEBD9: 0x9190, //CJK UNIFIED IDEOGRAPH - 0xEBDA: 0x9191, //CJK UNIFIED IDEOGRAPH - 0xEBDB: 0x918D, //CJK UNIFIED IDEOGRAPH - 0xEBDC: 0x918F, //CJK UNIFIED IDEOGRAPH - 0xEBDD: 0x9327, //CJK UNIFIED IDEOGRAPH - 0xEBDE: 0x931E, //CJK UNIFIED IDEOGRAPH - 0xEBDF: 0x9308, //CJK UNIFIED IDEOGRAPH - 0xEBE0: 0x931F, //CJK UNIFIED IDEOGRAPH - 0xEBE1: 0x9306, //CJK UNIFIED IDEOGRAPH - 0xEBE2: 0x930F, //CJK UNIFIED IDEOGRAPH - 0xEBE3: 0x937A, //CJK UNIFIED IDEOGRAPH - 0xEBE4: 0x9338, //CJK UNIFIED IDEOGRAPH - 0xEBE5: 0x933C, //CJK UNIFIED IDEOGRAPH - 0xEBE6: 0x931B, //CJK UNIFIED IDEOGRAPH - 0xEBE7: 0x9323, //CJK UNIFIED IDEOGRAPH - 0xEBE8: 0x9312, //CJK UNIFIED IDEOGRAPH - 0xEBE9: 0x9301, //CJK UNIFIED IDEOGRAPH - 0xEBEA: 0x9346, //CJK UNIFIED IDEOGRAPH - 0xEBEB: 0x932D, //CJK UNIFIED IDEOGRAPH - 0xEBEC: 0x930E, //CJK UNIFIED IDEOGRAPH - 0xEBED: 0x930D, //CJK UNIFIED IDEOGRAPH - 0xEBEE: 0x92CB, //CJK UNIFIED IDEOGRAPH - 0xEBEF: 0x931D, //CJK UNIFIED IDEOGRAPH - 0xEBF0: 0x92FA, //CJK UNIFIED IDEOGRAPH - 0xEBF1: 0x9325, //CJK UNIFIED IDEOGRAPH - 0xEBF2: 0x9313, //CJK UNIFIED IDEOGRAPH - 0xEBF3: 0x92F9, //CJK UNIFIED IDEOGRAPH - 0xEBF4: 0x92F7, //CJK UNIFIED IDEOGRAPH - 0xEBF5: 0x9334, //CJK UNIFIED IDEOGRAPH - 0xEBF6: 0x9302, //CJK UNIFIED IDEOGRAPH - 0xEBF7: 0x9324, //CJK UNIFIED IDEOGRAPH - 0xEBF8: 0x92FF, //CJK UNIFIED IDEOGRAPH - 0xEBF9: 0x9329, //CJK UNIFIED IDEOGRAPH - 0xEBFA: 0x9339, //CJK UNIFIED IDEOGRAPH - 0xEBFB: 0x9335, //CJK UNIFIED IDEOGRAPH - 0xEBFC: 0x932A, //CJK UNIFIED IDEOGRAPH - 0xEBFD: 0x9314, //CJK UNIFIED IDEOGRAPH - 0xEBFE: 0x930C, //CJK UNIFIED IDEOGRAPH - 0xEC40: 0x930B, //CJK UNIFIED IDEOGRAPH - 0xEC41: 0x92FE, //CJK UNIFIED IDEOGRAPH - 0xEC42: 0x9309, //CJK UNIFIED IDEOGRAPH - 0xEC43: 0x9300, //CJK UNIFIED IDEOGRAPH - 0xEC44: 0x92FB, //CJK UNIFIED IDEOGRAPH - 0xEC45: 0x9316, //CJK UNIFIED IDEOGRAPH - 0xEC46: 0x95BC, //CJK UNIFIED IDEOGRAPH - 0xEC47: 0x95CD, //CJK UNIFIED IDEOGRAPH - 0xEC48: 0x95BE, //CJK UNIFIED IDEOGRAPH - 0xEC49: 0x95B9, //CJK UNIFIED IDEOGRAPH - 0xEC4A: 0x95BA, //CJK UNIFIED IDEOGRAPH - 0xEC4B: 0x95B6, //CJK UNIFIED IDEOGRAPH - 0xEC4C: 0x95BF, //CJK UNIFIED IDEOGRAPH - 0xEC4D: 0x95B5, //CJK UNIFIED IDEOGRAPH - 0xEC4E: 0x95BD, //CJK UNIFIED IDEOGRAPH - 0xEC4F: 0x96A9, //CJK UNIFIED IDEOGRAPH - 0xEC50: 0x96D4, //CJK UNIFIED IDEOGRAPH - 0xEC51: 0x970B, //CJK UNIFIED IDEOGRAPH - 0xEC52: 0x9712, //CJK UNIFIED IDEOGRAPH - 0xEC53: 0x9710, //CJK UNIFIED IDEOGRAPH - 0xEC54: 0x9799, //CJK UNIFIED IDEOGRAPH - 0xEC55: 0x9797, //CJK UNIFIED IDEOGRAPH - 0xEC56: 0x9794, //CJK UNIFIED IDEOGRAPH - 0xEC57: 0x97F0, //CJK UNIFIED IDEOGRAPH - 0xEC58: 0x97F8, //CJK UNIFIED IDEOGRAPH - 0xEC59: 0x9835, //CJK UNIFIED IDEOGRAPH - 0xEC5A: 0x982F, //CJK UNIFIED IDEOGRAPH - 0xEC5B: 0x9832, //CJK UNIFIED IDEOGRAPH - 0xEC5C: 0x9924, //CJK UNIFIED IDEOGRAPH - 0xEC5D: 0x991F, //CJK UNIFIED IDEOGRAPH - 0xEC5E: 0x9927, //CJK UNIFIED IDEOGRAPH - 0xEC5F: 0x9929, //CJK UNIFIED IDEOGRAPH - 0xEC60: 0x999E, //CJK UNIFIED IDEOGRAPH - 0xEC61: 0x99EE, //CJK UNIFIED IDEOGRAPH - 0xEC62: 0x99EC, //CJK UNIFIED IDEOGRAPH - 0xEC63: 0x99E5, //CJK UNIFIED IDEOGRAPH - 0xEC64: 0x99E4, //CJK UNIFIED IDEOGRAPH - 0xEC65: 0x99F0, //CJK UNIFIED IDEOGRAPH - 0xEC66: 0x99E3, //CJK UNIFIED IDEOGRAPH - 0xEC67: 0x99EA, //CJK UNIFIED IDEOGRAPH - 0xEC68: 0x99E9, //CJK UNIFIED IDEOGRAPH - 0xEC69: 0x99E7, //CJK UNIFIED IDEOGRAPH - 0xEC6A: 0x9AB9, //CJK UNIFIED IDEOGRAPH - 0xEC6B: 0x9ABF, //CJK UNIFIED IDEOGRAPH - 0xEC6C: 0x9AB4, //CJK UNIFIED IDEOGRAPH - 0xEC6D: 0x9ABB, //CJK UNIFIED IDEOGRAPH - 0xEC6E: 0x9AF6, //CJK UNIFIED IDEOGRAPH - 0xEC6F: 0x9AFA, //CJK UNIFIED IDEOGRAPH - 0xEC70: 0x9AF9, //CJK UNIFIED IDEOGRAPH - 0xEC71: 0x9AF7, //CJK UNIFIED IDEOGRAPH - 0xEC72: 0x9B33, //CJK UNIFIED IDEOGRAPH - 0xEC73: 0x9B80, //CJK UNIFIED IDEOGRAPH - 0xEC74: 0x9B85, //CJK UNIFIED IDEOGRAPH - 0xEC75: 0x9B87, //CJK UNIFIED IDEOGRAPH - 0xEC76: 0x9B7C, //CJK UNIFIED IDEOGRAPH - 0xEC77: 0x9B7E, //CJK UNIFIED IDEOGRAPH - 0xEC78: 0x9B7B, //CJK UNIFIED IDEOGRAPH - 0xEC79: 0x9B82, //CJK UNIFIED IDEOGRAPH - 0xEC7A: 0x9B93, //CJK UNIFIED IDEOGRAPH - 0xEC7B: 0x9B92, //CJK UNIFIED IDEOGRAPH - 0xEC7C: 0x9B90, //CJK UNIFIED IDEOGRAPH - 0xEC7D: 0x9B7A, //CJK UNIFIED IDEOGRAPH - 0xEC7E: 0x9B95, //CJK UNIFIED IDEOGRAPH - 0xECA1: 0x9B7D, //CJK UNIFIED IDEOGRAPH - 0xECA2: 0x9B88, //CJK UNIFIED IDEOGRAPH - 0xECA3: 0x9D25, //CJK UNIFIED IDEOGRAPH - 0xECA4: 0x9D17, //CJK UNIFIED IDEOGRAPH - 0xECA5: 0x9D20, //CJK UNIFIED IDEOGRAPH - 0xECA6: 0x9D1E, //CJK UNIFIED IDEOGRAPH - 0xECA7: 0x9D14, //CJK UNIFIED IDEOGRAPH - 0xECA8: 0x9D29, //CJK UNIFIED IDEOGRAPH - 0xECA9: 0x9D1D, //CJK UNIFIED IDEOGRAPH - 0xECAA: 0x9D18, //CJK UNIFIED IDEOGRAPH - 0xECAB: 0x9D22, //CJK UNIFIED IDEOGRAPH - 0xECAC: 0x9D10, //CJK UNIFIED IDEOGRAPH - 0xECAD: 0x9D19, //CJK UNIFIED IDEOGRAPH - 0xECAE: 0x9D1F, //CJK UNIFIED IDEOGRAPH - 0xECAF: 0x9E88, //CJK UNIFIED IDEOGRAPH - 0xECB0: 0x9E86, //CJK UNIFIED IDEOGRAPH - 0xECB1: 0x9E87, //CJK UNIFIED IDEOGRAPH - 0xECB2: 0x9EAE, //CJK UNIFIED IDEOGRAPH - 0xECB3: 0x9EAD, //CJK UNIFIED IDEOGRAPH - 0xECB4: 0x9ED5, //CJK UNIFIED IDEOGRAPH - 0xECB5: 0x9ED6, //CJK UNIFIED IDEOGRAPH - 0xECB6: 0x9EFA, //CJK UNIFIED IDEOGRAPH - 0xECB7: 0x9F12, //CJK UNIFIED IDEOGRAPH - 0xECB8: 0x9F3D, //CJK UNIFIED IDEOGRAPH - 0xECB9: 0x5126, //CJK UNIFIED IDEOGRAPH - 0xECBA: 0x5125, //CJK UNIFIED IDEOGRAPH - 0xECBB: 0x5122, //CJK UNIFIED IDEOGRAPH - 0xECBC: 0x5124, //CJK UNIFIED IDEOGRAPH - 0xECBD: 0x5120, //CJK UNIFIED IDEOGRAPH - 0xECBE: 0x5129, //CJK UNIFIED IDEOGRAPH - 0xECBF: 0x52F4, //CJK UNIFIED IDEOGRAPH - 0xECC0: 0x5693, //CJK UNIFIED IDEOGRAPH - 0xECC1: 0x568C, //CJK UNIFIED IDEOGRAPH - 0xECC2: 0x568D, //CJK UNIFIED IDEOGRAPH - 0xECC3: 0x5686, //CJK UNIFIED IDEOGRAPH - 0xECC4: 0x5684, //CJK UNIFIED IDEOGRAPH - 0xECC5: 0x5683, //CJK UNIFIED IDEOGRAPH - 0xECC6: 0x567E, //CJK UNIFIED IDEOGRAPH - 0xECC7: 0x5682, //CJK UNIFIED IDEOGRAPH - 0xECC8: 0x567F, //CJK UNIFIED IDEOGRAPH - 0xECC9: 0x5681, //CJK UNIFIED IDEOGRAPH - 0xECCA: 0x58D6, //CJK UNIFIED IDEOGRAPH - 0xECCB: 0x58D4, //CJK UNIFIED IDEOGRAPH - 0xECCC: 0x58CF, //CJK UNIFIED IDEOGRAPH - 0xECCD: 0x58D2, //CJK UNIFIED IDEOGRAPH - 0xECCE: 0x5B2D, //CJK UNIFIED IDEOGRAPH - 0xECCF: 0x5B25, //CJK UNIFIED IDEOGRAPH - 0xECD0: 0x5B32, //CJK UNIFIED IDEOGRAPH - 0xECD1: 0x5B23, //CJK UNIFIED IDEOGRAPH - 0xECD2: 0x5B2C, //CJK UNIFIED IDEOGRAPH - 0xECD3: 0x5B27, //CJK UNIFIED IDEOGRAPH - 0xECD4: 0x5B26, //CJK UNIFIED IDEOGRAPH - 0xECD5: 0x5B2F, //CJK UNIFIED IDEOGRAPH - 0xECD6: 0x5B2E, //CJK UNIFIED IDEOGRAPH - 0xECD7: 0x5B7B, //CJK UNIFIED IDEOGRAPH - 0xECD8: 0x5BF1, //CJK UNIFIED IDEOGRAPH - 0xECD9: 0x5BF2, //CJK UNIFIED IDEOGRAPH - 0xECDA: 0x5DB7, //CJK UNIFIED IDEOGRAPH - 0xECDB: 0x5E6C, //CJK UNIFIED IDEOGRAPH - 0xECDC: 0x5E6A, //CJK UNIFIED IDEOGRAPH - 0xECDD: 0x5FBE, //CJK UNIFIED IDEOGRAPH - 0xECDE: 0x5FBB, //CJK UNIFIED IDEOGRAPH - 0xECDF: 0x61C3, //CJK UNIFIED IDEOGRAPH - 0xECE0: 0x61B5, //CJK UNIFIED IDEOGRAPH - 0xECE1: 0x61BC, //CJK UNIFIED IDEOGRAPH - 0xECE2: 0x61E7, //CJK UNIFIED IDEOGRAPH - 0xECE3: 0x61E0, //CJK UNIFIED IDEOGRAPH - 0xECE4: 0x61E5, //CJK UNIFIED IDEOGRAPH - 0xECE5: 0x61E4, //CJK UNIFIED IDEOGRAPH - 0xECE6: 0x61E8, //CJK UNIFIED IDEOGRAPH - 0xECE7: 0x61DE, //CJK UNIFIED IDEOGRAPH - 0xECE8: 0x64EF, //CJK UNIFIED IDEOGRAPH - 0xECE9: 0x64E9, //CJK UNIFIED IDEOGRAPH - 0xECEA: 0x64E3, //CJK UNIFIED IDEOGRAPH - 0xECEB: 0x64EB, //CJK UNIFIED IDEOGRAPH - 0xECEC: 0x64E4, //CJK UNIFIED IDEOGRAPH - 0xECED: 0x64E8, //CJK UNIFIED IDEOGRAPH - 0xECEE: 0x6581, //CJK UNIFIED IDEOGRAPH - 0xECEF: 0x6580, //CJK UNIFIED IDEOGRAPH - 0xECF0: 0x65B6, //CJK UNIFIED IDEOGRAPH - 0xECF1: 0x65DA, //CJK UNIFIED IDEOGRAPH - 0xECF2: 0x66D2, //CJK UNIFIED IDEOGRAPH - 0xECF3: 0x6A8D, //CJK UNIFIED IDEOGRAPH - 0xECF4: 0x6A96, //CJK UNIFIED IDEOGRAPH - 0xECF5: 0x6A81, //CJK UNIFIED IDEOGRAPH - 0xECF6: 0x6AA5, //CJK UNIFIED IDEOGRAPH - 0xECF7: 0x6A89, //CJK UNIFIED IDEOGRAPH - 0xECF8: 0x6A9F, //CJK UNIFIED IDEOGRAPH - 0xECF9: 0x6A9B, //CJK UNIFIED IDEOGRAPH - 0xECFA: 0x6AA1, //CJK UNIFIED IDEOGRAPH - 0xECFB: 0x6A9E, //CJK UNIFIED IDEOGRAPH - 0xECFC: 0x6A87, //CJK UNIFIED IDEOGRAPH - 0xECFD: 0x6A93, //CJK UNIFIED IDEOGRAPH - 0xECFE: 0x6A8E, //CJK UNIFIED IDEOGRAPH - 0xED40: 0x6A95, //CJK UNIFIED IDEOGRAPH - 0xED41: 0x6A83, //CJK UNIFIED IDEOGRAPH - 0xED42: 0x6AA8, //CJK UNIFIED IDEOGRAPH - 0xED43: 0x6AA4, //CJK UNIFIED IDEOGRAPH - 0xED44: 0x6A91, //CJK UNIFIED IDEOGRAPH - 0xED45: 0x6A7F, //CJK UNIFIED IDEOGRAPH - 0xED46: 0x6AA6, //CJK UNIFIED IDEOGRAPH - 0xED47: 0x6A9A, //CJK UNIFIED IDEOGRAPH - 0xED48: 0x6A85, //CJK UNIFIED IDEOGRAPH - 0xED49: 0x6A8C, //CJK UNIFIED IDEOGRAPH - 0xED4A: 0x6A92, //CJK UNIFIED IDEOGRAPH - 0xED4B: 0x6B5B, //CJK UNIFIED IDEOGRAPH - 0xED4C: 0x6BAD, //CJK UNIFIED IDEOGRAPH - 0xED4D: 0x6C09, //CJK UNIFIED IDEOGRAPH - 0xED4E: 0x6FCC, //CJK UNIFIED IDEOGRAPH - 0xED4F: 0x6FA9, //CJK UNIFIED IDEOGRAPH - 0xED50: 0x6FF4, //CJK UNIFIED IDEOGRAPH - 0xED51: 0x6FD4, //CJK UNIFIED IDEOGRAPH - 0xED52: 0x6FE3, //CJK UNIFIED IDEOGRAPH - 0xED53: 0x6FDC, //CJK UNIFIED IDEOGRAPH - 0xED54: 0x6FED, //CJK UNIFIED IDEOGRAPH - 0xED55: 0x6FE7, //CJK UNIFIED IDEOGRAPH - 0xED56: 0x6FE6, //CJK UNIFIED IDEOGRAPH - 0xED57: 0x6FDE, //CJK UNIFIED IDEOGRAPH - 0xED58: 0x6FF2, //CJK UNIFIED IDEOGRAPH - 0xED59: 0x6FDD, //CJK UNIFIED IDEOGRAPH - 0xED5A: 0x6FE2, //CJK UNIFIED IDEOGRAPH - 0xED5B: 0x6FE8, //CJK UNIFIED IDEOGRAPH - 0xED5C: 0x71E1, //CJK UNIFIED IDEOGRAPH - 0xED5D: 0x71F1, //CJK UNIFIED IDEOGRAPH - 0xED5E: 0x71E8, //CJK UNIFIED IDEOGRAPH - 0xED5F: 0x71F2, //CJK UNIFIED IDEOGRAPH - 0xED60: 0x71E4, //CJK UNIFIED IDEOGRAPH - 0xED61: 0x71F0, //CJK UNIFIED IDEOGRAPH - 0xED62: 0x71E2, //CJK UNIFIED IDEOGRAPH - 0xED63: 0x7373, //CJK UNIFIED IDEOGRAPH - 0xED64: 0x736E, //CJK UNIFIED IDEOGRAPH - 0xED65: 0x736F, //CJK UNIFIED IDEOGRAPH - 0xED66: 0x7497, //CJK UNIFIED IDEOGRAPH - 0xED67: 0x74B2, //CJK UNIFIED IDEOGRAPH - 0xED68: 0x74AB, //CJK UNIFIED IDEOGRAPH - 0xED69: 0x7490, //CJK UNIFIED IDEOGRAPH - 0xED6A: 0x74AA, //CJK UNIFIED IDEOGRAPH - 0xED6B: 0x74AD, //CJK UNIFIED IDEOGRAPH - 0xED6C: 0x74B1, //CJK UNIFIED IDEOGRAPH - 0xED6D: 0x74A5, //CJK UNIFIED IDEOGRAPH - 0xED6E: 0x74AF, //CJK UNIFIED IDEOGRAPH - 0xED6F: 0x7510, //CJK UNIFIED IDEOGRAPH - 0xED70: 0x7511, //CJK UNIFIED IDEOGRAPH - 0xED71: 0x7512, //CJK UNIFIED IDEOGRAPH - 0xED72: 0x750F, //CJK UNIFIED IDEOGRAPH - 0xED73: 0x7584, //CJK UNIFIED IDEOGRAPH - 0xED74: 0x7643, //CJK UNIFIED IDEOGRAPH - 0xED75: 0x7648, //CJK UNIFIED IDEOGRAPH - 0xED76: 0x7649, //CJK UNIFIED IDEOGRAPH - 0xED77: 0x7647, //CJK UNIFIED IDEOGRAPH - 0xED78: 0x76A4, //CJK UNIFIED IDEOGRAPH - 0xED79: 0x76E9, //CJK UNIFIED IDEOGRAPH - 0xED7A: 0x77B5, //CJK UNIFIED IDEOGRAPH - 0xED7B: 0x77AB, //CJK UNIFIED IDEOGRAPH - 0xED7C: 0x77B2, //CJK UNIFIED IDEOGRAPH - 0xED7D: 0x77B7, //CJK UNIFIED IDEOGRAPH - 0xED7E: 0x77B6, //CJK UNIFIED IDEOGRAPH - 0xEDA1: 0x77B4, //CJK UNIFIED IDEOGRAPH - 0xEDA2: 0x77B1, //CJK UNIFIED IDEOGRAPH - 0xEDA3: 0x77A8, //CJK UNIFIED IDEOGRAPH - 0xEDA4: 0x77F0, //CJK UNIFIED IDEOGRAPH - 0xEDA5: 0x78F3, //CJK UNIFIED IDEOGRAPH - 0xEDA6: 0x78FD, //CJK UNIFIED IDEOGRAPH - 0xEDA7: 0x7902, //CJK UNIFIED IDEOGRAPH - 0xEDA8: 0x78FB, //CJK UNIFIED IDEOGRAPH - 0xEDA9: 0x78FC, //CJK UNIFIED IDEOGRAPH - 0xEDAA: 0x78F2, //CJK UNIFIED IDEOGRAPH - 0xEDAB: 0x7905, //CJK UNIFIED IDEOGRAPH - 0xEDAC: 0x78F9, //CJK UNIFIED IDEOGRAPH - 0xEDAD: 0x78FE, //CJK UNIFIED IDEOGRAPH - 0xEDAE: 0x7904, //CJK UNIFIED IDEOGRAPH - 0xEDAF: 0x79AB, //CJK UNIFIED IDEOGRAPH - 0xEDB0: 0x79A8, //CJK UNIFIED IDEOGRAPH - 0xEDB1: 0x7A5C, //CJK UNIFIED IDEOGRAPH - 0xEDB2: 0x7A5B, //CJK UNIFIED IDEOGRAPH - 0xEDB3: 0x7A56, //CJK UNIFIED IDEOGRAPH - 0xEDB4: 0x7A58, //CJK UNIFIED IDEOGRAPH - 0xEDB5: 0x7A54, //CJK UNIFIED IDEOGRAPH - 0xEDB6: 0x7A5A, //CJK UNIFIED IDEOGRAPH - 0xEDB7: 0x7ABE, //CJK UNIFIED IDEOGRAPH - 0xEDB8: 0x7AC0, //CJK UNIFIED IDEOGRAPH - 0xEDB9: 0x7AC1, //CJK UNIFIED IDEOGRAPH - 0xEDBA: 0x7C05, //CJK UNIFIED IDEOGRAPH - 0xEDBB: 0x7C0F, //CJK UNIFIED IDEOGRAPH - 0xEDBC: 0x7BF2, //CJK UNIFIED IDEOGRAPH - 0xEDBD: 0x7C00, //CJK UNIFIED IDEOGRAPH - 0xEDBE: 0x7BFF, //CJK UNIFIED IDEOGRAPH - 0xEDBF: 0x7BFB, //CJK UNIFIED IDEOGRAPH - 0xEDC0: 0x7C0E, //CJK UNIFIED IDEOGRAPH - 0xEDC1: 0x7BF4, //CJK UNIFIED IDEOGRAPH - 0xEDC2: 0x7C0B, //CJK UNIFIED IDEOGRAPH - 0xEDC3: 0x7BF3, //CJK UNIFIED IDEOGRAPH - 0xEDC4: 0x7C02, //CJK UNIFIED IDEOGRAPH - 0xEDC5: 0x7C09, //CJK UNIFIED IDEOGRAPH - 0xEDC6: 0x7C03, //CJK UNIFIED IDEOGRAPH - 0xEDC7: 0x7C01, //CJK UNIFIED IDEOGRAPH - 0xEDC8: 0x7BF8, //CJK UNIFIED IDEOGRAPH - 0xEDC9: 0x7BFD, //CJK UNIFIED IDEOGRAPH - 0xEDCA: 0x7C06, //CJK UNIFIED IDEOGRAPH - 0xEDCB: 0x7BF0, //CJK UNIFIED IDEOGRAPH - 0xEDCC: 0x7BF1, //CJK UNIFIED IDEOGRAPH - 0xEDCD: 0x7C10, //CJK UNIFIED IDEOGRAPH - 0xEDCE: 0x7C0A, //CJK UNIFIED IDEOGRAPH - 0xEDCF: 0x7CE8, //CJK UNIFIED IDEOGRAPH - 0xEDD0: 0x7E2D, //CJK UNIFIED IDEOGRAPH - 0xEDD1: 0x7E3C, //CJK UNIFIED IDEOGRAPH - 0xEDD2: 0x7E42, //CJK UNIFIED IDEOGRAPH - 0xEDD3: 0x7E33, //CJK UNIFIED IDEOGRAPH - 0xEDD4: 0x9848, //CJK UNIFIED IDEOGRAPH - 0xEDD5: 0x7E38, //CJK UNIFIED IDEOGRAPH - 0xEDD6: 0x7E2A, //CJK UNIFIED IDEOGRAPH - 0xEDD7: 0x7E49, //CJK UNIFIED IDEOGRAPH - 0xEDD8: 0x7E40, //CJK UNIFIED IDEOGRAPH - 0xEDD9: 0x7E47, //CJK UNIFIED IDEOGRAPH - 0xEDDA: 0x7E29, //CJK UNIFIED IDEOGRAPH - 0xEDDB: 0x7E4C, //CJK UNIFIED IDEOGRAPH - 0xEDDC: 0x7E30, //CJK UNIFIED IDEOGRAPH - 0xEDDD: 0x7E3B, //CJK UNIFIED IDEOGRAPH - 0xEDDE: 0x7E36, //CJK UNIFIED IDEOGRAPH - 0xEDDF: 0x7E44, //CJK UNIFIED IDEOGRAPH - 0xEDE0: 0x7E3A, //CJK UNIFIED IDEOGRAPH - 0xEDE1: 0x7F45, //CJK UNIFIED IDEOGRAPH - 0xEDE2: 0x7F7F, //CJK UNIFIED IDEOGRAPH - 0xEDE3: 0x7F7E, //CJK UNIFIED IDEOGRAPH - 0xEDE4: 0x7F7D, //CJK UNIFIED IDEOGRAPH - 0xEDE5: 0x7FF4, //CJK UNIFIED IDEOGRAPH - 0xEDE6: 0x7FF2, //CJK UNIFIED IDEOGRAPH - 0xEDE7: 0x802C, //CJK UNIFIED IDEOGRAPH - 0xEDE8: 0x81BB, //CJK UNIFIED IDEOGRAPH - 0xEDE9: 0x81C4, //CJK UNIFIED IDEOGRAPH - 0xEDEA: 0x81CC, //CJK UNIFIED IDEOGRAPH - 0xEDEB: 0x81CA, //CJK UNIFIED IDEOGRAPH - 0xEDEC: 0x81C5, //CJK UNIFIED IDEOGRAPH - 0xEDED: 0x81C7, //CJK UNIFIED IDEOGRAPH - 0xEDEE: 0x81BC, //CJK UNIFIED IDEOGRAPH - 0xEDEF: 0x81E9, //CJK UNIFIED IDEOGRAPH - 0xEDF0: 0x825B, //CJK UNIFIED IDEOGRAPH - 0xEDF1: 0x825A, //CJK UNIFIED IDEOGRAPH - 0xEDF2: 0x825C, //CJK UNIFIED IDEOGRAPH - 0xEDF3: 0x8583, //CJK UNIFIED IDEOGRAPH - 0xEDF4: 0x8580, //CJK UNIFIED IDEOGRAPH - 0xEDF5: 0x858F, //CJK UNIFIED IDEOGRAPH - 0xEDF6: 0x85A7, //CJK UNIFIED IDEOGRAPH - 0xEDF7: 0x8595, //CJK UNIFIED IDEOGRAPH - 0xEDF8: 0x85A0, //CJK UNIFIED IDEOGRAPH - 0xEDF9: 0x858B, //CJK UNIFIED IDEOGRAPH - 0xEDFA: 0x85A3, //CJK UNIFIED IDEOGRAPH - 0xEDFB: 0x857B, //CJK UNIFIED IDEOGRAPH - 0xEDFC: 0x85A4, //CJK UNIFIED IDEOGRAPH - 0xEDFD: 0x859A, //CJK UNIFIED IDEOGRAPH - 0xEDFE: 0x859E, //CJK UNIFIED IDEOGRAPH - 0xEE40: 0x8577, //CJK UNIFIED IDEOGRAPH - 0xEE41: 0x857C, //CJK UNIFIED IDEOGRAPH - 0xEE42: 0x8589, //CJK UNIFIED IDEOGRAPH - 0xEE43: 0x85A1, //CJK UNIFIED IDEOGRAPH - 0xEE44: 0x857A, //CJK UNIFIED IDEOGRAPH - 0xEE45: 0x8578, //CJK UNIFIED IDEOGRAPH - 0xEE46: 0x8557, //CJK UNIFIED IDEOGRAPH - 0xEE47: 0x858E, //CJK UNIFIED IDEOGRAPH - 0xEE48: 0x8596, //CJK UNIFIED IDEOGRAPH - 0xEE49: 0x8586, //CJK UNIFIED IDEOGRAPH - 0xEE4A: 0x858D, //CJK UNIFIED IDEOGRAPH - 0xEE4B: 0x8599, //CJK UNIFIED IDEOGRAPH - 0xEE4C: 0x859D, //CJK UNIFIED IDEOGRAPH - 0xEE4D: 0x8581, //CJK UNIFIED IDEOGRAPH - 0xEE4E: 0x85A2, //CJK UNIFIED IDEOGRAPH - 0xEE4F: 0x8582, //CJK UNIFIED IDEOGRAPH - 0xEE50: 0x8588, //CJK UNIFIED IDEOGRAPH - 0xEE51: 0x8585, //CJK UNIFIED IDEOGRAPH - 0xEE52: 0x8579, //CJK UNIFIED IDEOGRAPH - 0xEE53: 0x8576, //CJK UNIFIED IDEOGRAPH - 0xEE54: 0x8598, //CJK UNIFIED IDEOGRAPH - 0xEE55: 0x8590, //CJK UNIFIED IDEOGRAPH - 0xEE56: 0x859F, //CJK UNIFIED IDEOGRAPH - 0xEE57: 0x8668, //CJK UNIFIED IDEOGRAPH - 0xEE58: 0x87BE, //CJK UNIFIED IDEOGRAPH - 0xEE59: 0x87AA, //CJK UNIFIED IDEOGRAPH - 0xEE5A: 0x87AD, //CJK UNIFIED IDEOGRAPH - 0xEE5B: 0x87C5, //CJK UNIFIED IDEOGRAPH - 0xEE5C: 0x87B0, //CJK UNIFIED IDEOGRAPH - 0xEE5D: 0x87AC, //CJK UNIFIED IDEOGRAPH - 0xEE5E: 0x87B9, //CJK UNIFIED IDEOGRAPH - 0xEE5F: 0x87B5, //CJK UNIFIED IDEOGRAPH - 0xEE60: 0x87BC, //CJK UNIFIED IDEOGRAPH - 0xEE61: 0x87AE, //CJK UNIFIED IDEOGRAPH - 0xEE62: 0x87C9, //CJK UNIFIED IDEOGRAPH - 0xEE63: 0x87C3, //CJK UNIFIED IDEOGRAPH - 0xEE64: 0x87C2, //CJK UNIFIED IDEOGRAPH - 0xEE65: 0x87CC, //CJK UNIFIED IDEOGRAPH - 0xEE66: 0x87B7, //CJK UNIFIED IDEOGRAPH - 0xEE67: 0x87AF, //CJK UNIFIED IDEOGRAPH - 0xEE68: 0x87C4, //CJK UNIFIED IDEOGRAPH - 0xEE69: 0x87CA, //CJK UNIFIED IDEOGRAPH - 0xEE6A: 0x87B4, //CJK UNIFIED IDEOGRAPH - 0xEE6B: 0x87B6, //CJK UNIFIED IDEOGRAPH - 0xEE6C: 0x87BF, //CJK UNIFIED IDEOGRAPH - 0xEE6D: 0x87B8, //CJK UNIFIED IDEOGRAPH - 0xEE6E: 0x87BD, //CJK UNIFIED IDEOGRAPH - 0xEE6F: 0x87DE, //CJK UNIFIED IDEOGRAPH - 0xEE70: 0x87B2, //CJK UNIFIED IDEOGRAPH - 0xEE71: 0x8935, //CJK UNIFIED IDEOGRAPH - 0xEE72: 0x8933, //CJK UNIFIED IDEOGRAPH - 0xEE73: 0x893C, //CJK UNIFIED IDEOGRAPH - 0xEE74: 0x893E, //CJK UNIFIED IDEOGRAPH - 0xEE75: 0x8941, //CJK UNIFIED IDEOGRAPH - 0xEE76: 0x8952, //CJK UNIFIED IDEOGRAPH - 0xEE77: 0x8937, //CJK UNIFIED IDEOGRAPH - 0xEE78: 0x8942, //CJK UNIFIED IDEOGRAPH - 0xEE79: 0x89AD, //CJK UNIFIED IDEOGRAPH - 0xEE7A: 0x89AF, //CJK UNIFIED IDEOGRAPH - 0xEE7B: 0x89AE, //CJK UNIFIED IDEOGRAPH - 0xEE7C: 0x89F2, //CJK UNIFIED IDEOGRAPH - 0xEE7D: 0x89F3, //CJK UNIFIED IDEOGRAPH - 0xEE7E: 0x8B1E, //CJK UNIFIED IDEOGRAPH - 0xEEA1: 0x8B18, //CJK UNIFIED IDEOGRAPH - 0xEEA2: 0x8B16, //CJK UNIFIED IDEOGRAPH - 0xEEA3: 0x8B11, //CJK UNIFIED IDEOGRAPH - 0xEEA4: 0x8B05, //CJK UNIFIED IDEOGRAPH - 0xEEA5: 0x8B0B, //CJK UNIFIED IDEOGRAPH - 0xEEA6: 0x8B22, //CJK UNIFIED IDEOGRAPH - 0xEEA7: 0x8B0F, //CJK UNIFIED IDEOGRAPH - 0xEEA8: 0x8B12, //CJK UNIFIED IDEOGRAPH - 0xEEA9: 0x8B15, //CJK UNIFIED IDEOGRAPH - 0xEEAA: 0x8B07, //CJK UNIFIED IDEOGRAPH - 0xEEAB: 0x8B0D, //CJK UNIFIED IDEOGRAPH - 0xEEAC: 0x8B08, //CJK UNIFIED IDEOGRAPH - 0xEEAD: 0x8B06, //CJK UNIFIED IDEOGRAPH - 0xEEAE: 0x8B1C, //CJK UNIFIED IDEOGRAPH - 0xEEAF: 0x8B13, //CJK UNIFIED IDEOGRAPH - 0xEEB0: 0x8B1A, //CJK UNIFIED IDEOGRAPH - 0xEEB1: 0x8C4F, //CJK UNIFIED IDEOGRAPH - 0xEEB2: 0x8C70, //CJK UNIFIED IDEOGRAPH - 0xEEB3: 0x8C72, //CJK UNIFIED IDEOGRAPH - 0xEEB4: 0x8C71, //CJK UNIFIED IDEOGRAPH - 0xEEB5: 0x8C6F, //CJK UNIFIED IDEOGRAPH - 0xEEB6: 0x8C95, //CJK UNIFIED IDEOGRAPH - 0xEEB7: 0x8C94, //CJK UNIFIED IDEOGRAPH - 0xEEB8: 0x8CF9, //CJK UNIFIED IDEOGRAPH - 0xEEB9: 0x8D6F, //CJK UNIFIED IDEOGRAPH - 0xEEBA: 0x8E4E, //CJK UNIFIED IDEOGRAPH - 0xEEBB: 0x8E4D, //CJK UNIFIED IDEOGRAPH - 0xEEBC: 0x8E53, //CJK UNIFIED IDEOGRAPH - 0xEEBD: 0x8E50, //CJK UNIFIED IDEOGRAPH - 0xEEBE: 0x8E4C, //CJK UNIFIED IDEOGRAPH - 0xEEBF: 0x8E47, //CJK UNIFIED IDEOGRAPH - 0xEEC0: 0x8F43, //CJK UNIFIED IDEOGRAPH - 0xEEC1: 0x8F40, //CJK UNIFIED IDEOGRAPH - 0xEEC2: 0x9085, //CJK UNIFIED IDEOGRAPH - 0xEEC3: 0x907E, //CJK UNIFIED IDEOGRAPH - 0xEEC4: 0x9138, //CJK UNIFIED IDEOGRAPH - 0xEEC5: 0x919A, //CJK UNIFIED IDEOGRAPH - 0xEEC6: 0x91A2, //CJK UNIFIED IDEOGRAPH - 0xEEC7: 0x919B, //CJK UNIFIED IDEOGRAPH - 0xEEC8: 0x9199, //CJK UNIFIED IDEOGRAPH - 0xEEC9: 0x919F, //CJK UNIFIED IDEOGRAPH - 0xEECA: 0x91A1, //CJK UNIFIED IDEOGRAPH - 0xEECB: 0x919D, //CJK UNIFIED IDEOGRAPH - 0xEECC: 0x91A0, //CJK UNIFIED IDEOGRAPH - 0xEECD: 0x93A1, //CJK UNIFIED IDEOGRAPH - 0xEECE: 0x9383, //CJK UNIFIED IDEOGRAPH - 0xEECF: 0x93AF, //CJK UNIFIED IDEOGRAPH - 0xEED0: 0x9364, //CJK UNIFIED IDEOGRAPH - 0xEED1: 0x9356, //CJK UNIFIED IDEOGRAPH - 0xEED2: 0x9347, //CJK UNIFIED IDEOGRAPH - 0xEED3: 0x937C, //CJK UNIFIED IDEOGRAPH - 0xEED4: 0x9358, //CJK UNIFIED IDEOGRAPH - 0xEED5: 0x935C, //CJK UNIFIED IDEOGRAPH - 0xEED6: 0x9376, //CJK UNIFIED IDEOGRAPH - 0xEED7: 0x9349, //CJK UNIFIED IDEOGRAPH - 0xEED8: 0x9350, //CJK UNIFIED IDEOGRAPH - 0xEED9: 0x9351, //CJK UNIFIED IDEOGRAPH - 0xEEDA: 0x9360, //CJK UNIFIED IDEOGRAPH - 0xEEDB: 0x936D, //CJK UNIFIED IDEOGRAPH - 0xEEDC: 0x938F, //CJK UNIFIED IDEOGRAPH - 0xEEDD: 0x934C, //CJK UNIFIED IDEOGRAPH - 0xEEDE: 0x936A, //CJK UNIFIED IDEOGRAPH - 0xEEDF: 0x9379, //CJK UNIFIED IDEOGRAPH - 0xEEE0: 0x9357, //CJK UNIFIED IDEOGRAPH - 0xEEE1: 0x9355, //CJK UNIFIED IDEOGRAPH - 0xEEE2: 0x9352, //CJK UNIFIED IDEOGRAPH - 0xEEE3: 0x934F, //CJK UNIFIED IDEOGRAPH - 0xEEE4: 0x9371, //CJK UNIFIED IDEOGRAPH - 0xEEE5: 0x9377, //CJK UNIFIED IDEOGRAPH - 0xEEE6: 0x937B, //CJK UNIFIED IDEOGRAPH - 0xEEE7: 0x9361, //CJK UNIFIED IDEOGRAPH - 0xEEE8: 0x935E, //CJK UNIFIED IDEOGRAPH - 0xEEE9: 0x9363, //CJK UNIFIED IDEOGRAPH - 0xEEEA: 0x9367, //CJK UNIFIED IDEOGRAPH - 0xEEEB: 0x9380, //CJK UNIFIED IDEOGRAPH - 0xEEEC: 0x934E, //CJK UNIFIED IDEOGRAPH - 0xEEED: 0x9359, //CJK UNIFIED IDEOGRAPH - 0xEEEE: 0x95C7, //CJK UNIFIED IDEOGRAPH - 0xEEEF: 0x95C0, //CJK UNIFIED IDEOGRAPH - 0xEEF0: 0x95C9, //CJK UNIFIED IDEOGRAPH - 0xEEF1: 0x95C3, //CJK UNIFIED IDEOGRAPH - 0xEEF2: 0x95C5, //CJK UNIFIED IDEOGRAPH - 0xEEF3: 0x95B7, //CJK UNIFIED IDEOGRAPH - 0xEEF4: 0x96AE, //CJK UNIFIED IDEOGRAPH - 0xEEF5: 0x96B0, //CJK UNIFIED IDEOGRAPH - 0xEEF6: 0x96AC, //CJK UNIFIED IDEOGRAPH - 0xEEF7: 0x9720, //CJK UNIFIED IDEOGRAPH - 0xEEF8: 0x971F, //CJK UNIFIED IDEOGRAPH - 0xEEF9: 0x9718, //CJK UNIFIED IDEOGRAPH - 0xEEFA: 0x971D, //CJK UNIFIED IDEOGRAPH - 0xEEFB: 0x9719, //CJK UNIFIED IDEOGRAPH - 0xEEFC: 0x979A, //CJK UNIFIED IDEOGRAPH - 0xEEFD: 0x97A1, //CJK UNIFIED IDEOGRAPH - 0xEEFE: 0x979C, //CJK UNIFIED IDEOGRAPH - 0xEF40: 0x979E, //CJK UNIFIED IDEOGRAPH - 0xEF41: 0x979D, //CJK UNIFIED IDEOGRAPH - 0xEF42: 0x97D5, //CJK UNIFIED IDEOGRAPH - 0xEF43: 0x97D4, //CJK UNIFIED IDEOGRAPH - 0xEF44: 0x97F1, //CJK UNIFIED IDEOGRAPH - 0xEF45: 0x9841, //CJK UNIFIED IDEOGRAPH - 0xEF46: 0x9844, //CJK UNIFIED IDEOGRAPH - 0xEF47: 0x984A, //CJK UNIFIED IDEOGRAPH - 0xEF48: 0x9849, //CJK UNIFIED IDEOGRAPH - 0xEF49: 0x9845, //CJK UNIFIED IDEOGRAPH - 0xEF4A: 0x9843, //CJK UNIFIED IDEOGRAPH - 0xEF4B: 0x9925, //CJK UNIFIED IDEOGRAPH - 0xEF4C: 0x992B, //CJK UNIFIED IDEOGRAPH - 0xEF4D: 0x992C, //CJK UNIFIED IDEOGRAPH - 0xEF4E: 0x992A, //CJK UNIFIED IDEOGRAPH - 0xEF4F: 0x9933, //CJK UNIFIED IDEOGRAPH - 0xEF50: 0x9932, //CJK UNIFIED IDEOGRAPH - 0xEF51: 0x992F, //CJK UNIFIED IDEOGRAPH - 0xEF52: 0x992D, //CJK UNIFIED IDEOGRAPH - 0xEF53: 0x9931, //CJK UNIFIED IDEOGRAPH - 0xEF54: 0x9930, //CJK UNIFIED IDEOGRAPH - 0xEF55: 0x9998, //CJK UNIFIED IDEOGRAPH - 0xEF56: 0x99A3, //CJK UNIFIED IDEOGRAPH - 0xEF57: 0x99A1, //CJK UNIFIED IDEOGRAPH - 0xEF58: 0x9A02, //CJK UNIFIED IDEOGRAPH - 0xEF59: 0x99FA, //CJK UNIFIED IDEOGRAPH - 0xEF5A: 0x99F4, //CJK UNIFIED IDEOGRAPH - 0xEF5B: 0x99F7, //CJK UNIFIED IDEOGRAPH - 0xEF5C: 0x99F9, //CJK UNIFIED IDEOGRAPH - 0xEF5D: 0x99F8, //CJK UNIFIED IDEOGRAPH - 0xEF5E: 0x99F6, //CJK UNIFIED IDEOGRAPH - 0xEF5F: 0x99FB, //CJK UNIFIED IDEOGRAPH - 0xEF60: 0x99FD, //CJK UNIFIED IDEOGRAPH - 0xEF61: 0x99FE, //CJK UNIFIED IDEOGRAPH - 0xEF62: 0x99FC, //CJK UNIFIED IDEOGRAPH - 0xEF63: 0x9A03, //CJK UNIFIED IDEOGRAPH - 0xEF64: 0x9ABE, //CJK UNIFIED IDEOGRAPH - 0xEF65: 0x9AFE, //CJK UNIFIED IDEOGRAPH - 0xEF66: 0x9AFD, //CJK UNIFIED IDEOGRAPH - 0xEF67: 0x9B01, //CJK UNIFIED IDEOGRAPH - 0xEF68: 0x9AFC, //CJK UNIFIED IDEOGRAPH - 0xEF69: 0x9B48, //CJK UNIFIED IDEOGRAPH - 0xEF6A: 0x9B9A, //CJK UNIFIED IDEOGRAPH - 0xEF6B: 0x9BA8, //CJK UNIFIED IDEOGRAPH - 0xEF6C: 0x9B9E, //CJK UNIFIED IDEOGRAPH - 0xEF6D: 0x9B9B, //CJK UNIFIED IDEOGRAPH - 0xEF6E: 0x9BA6, //CJK UNIFIED IDEOGRAPH - 0xEF6F: 0x9BA1, //CJK UNIFIED IDEOGRAPH - 0xEF70: 0x9BA5, //CJK UNIFIED IDEOGRAPH - 0xEF71: 0x9BA4, //CJK UNIFIED IDEOGRAPH - 0xEF72: 0x9B86, //CJK UNIFIED IDEOGRAPH - 0xEF73: 0x9BA2, //CJK UNIFIED IDEOGRAPH - 0xEF74: 0x9BA0, //CJK UNIFIED IDEOGRAPH - 0xEF75: 0x9BAF, //CJK UNIFIED IDEOGRAPH - 0xEF76: 0x9D33, //CJK UNIFIED IDEOGRAPH - 0xEF77: 0x9D41, //CJK UNIFIED IDEOGRAPH - 0xEF78: 0x9D67, //CJK UNIFIED IDEOGRAPH - 0xEF79: 0x9D36, //CJK UNIFIED IDEOGRAPH - 0xEF7A: 0x9D2E, //CJK UNIFIED IDEOGRAPH - 0xEF7B: 0x9D2F, //CJK UNIFIED IDEOGRAPH - 0xEF7C: 0x9D31, //CJK UNIFIED IDEOGRAPH - 0xEF7D: 0x9D38, //CJK UNIFIED IDEOGRAPH - 0xEF7E: 0x9D30, //CJK UNIFIED IDEOGRAPH - 0xEFA1: 0x9D45, //CJK UNIFIED IDEOGRAPH - 0xEFA2: 0x9D42, //CJK UNIFIED IDEOGRAPH - 0xEFA3: 0x9D43, //CJK UNIFIED IDEOGRAPH - 0xEFA4: 0x9D3E, //CJK UNIFIED IDEOGRAPH - 0xEFA5: 0x9D37, //CJK UNIFIED IDEOGRAPH - 0xEFA6: 0x9D40, //CJK UNIFIED IDEOGRAPH - 0xEFA7: 0x9D3D, //CJK UNIFIED IDEOGRAPH - 0xEFA8: 0x7FF5, //CJK UNIFIED IDEOGRAPH - 0xEFA9: 0x9D2D, //CJK UNIFIED IDEOGRAPH - 0xEFAA: 0x9E8A, //CJK UNIFIED IDEOGRAPH - 0xEFAB: 0x9E89, //CJK UNIFIED IDEOGRAPH - 0xEFAC: 0x9E8D, //CJK UNIFIED IDEOGRAPH - 0xEFAD: 0x9EB0, //CJK UNIFIED IDEOGRAPH - 0xEFAE: 0x9EC8, //CJK UNIFIED IDEOGRAPH - 0xEFAF: 0x9EDA, //CJK UNIFIED IDEOGRAPH - 0xEFB0: 0x9EFB, //CJK UNIFIED IDEOGRAPH - 0xEFB1: 0x9EFF, //CJK UNIFIED IDEOGRAPH - 0xEFB2: 0x9F24, //CJK UNIFIED IDEOGRAPH - 0xEFB3: 0x9F23, //CJK UNIFIED IDEOGRAPH - 0xEFB4: 0x9F22, //CJK UNIFIED IDEOGRAPH - 0xEFB5: 0x9F54, //CJK UNIFIED IDEOGRAPH - 0xEFB6: 0x9FA0, //CJK UNIFIED IDEOGRAPH - 0xEFB7: 0x5131, //CJK UNIFIED IDEOGRAPH - 0xEFB8: 0x512D, //CJK UNIFIED IDEOGRAPH - 0xEFB9: 0x512E, //CJK UNIFIED IDEOGRAPH - 0xEFBA: 0x5698, //CJK UNIFIED IDEOGRAPH - 0xEFBB: 0x569C, //CJK UNIFIED IDEOGRAPH - 0xEFBC: 0x5697, //CJK UNIFIED IDEOGRAPH - 0xEFBD: 0x569A, //CJK UNIFIED IDEOGRAPH - 0xEFBE: 0x569D, //CJK UNIFIED IDEOGRAPH - 0xEFBF: 0x5699, //CJK UNIFIED IDEOGRAPH - 0xEFC0: 0x5970, //CJK UNIFIED IDEOGRAPH - 0xEFC1: 0x5B3C, //CJK UNIFIED IDEOGRAPH - 0xEFC2: 0x5C69, //CJK UNIFIED IDEOGRAPH - 0xEFC3: 0x5C6A, //CJK UNIFIED IDEOGRAPH - 0xEFC4: 0x5DC0, //CJK UNIFIED IDEOGRAPH - 0xEFC5: 0x5E6D, //CJK UNIFIED IDEOGRAPH - 0xEFC6: 0x5E6E, //CJK UNIFIED IDEOGRAPH - 0xEFC7: 0x61D8, //CJK UNIFIED IDEOGRAPH - 0xEFC8: 0x61DF, //CJK UNIFIED IDEOGRAPH - 0xEFC9: 0x61ED, //CJK UNIFIED IDEOGRAPH - 0xEFCA: 0x61EE, //CJK UNIFIED IDEOGRAPH - 0xEFCB: 0x61F1, //CJK UNIFIED IDEOGRAPH - 0xEFCC: 0x61EA, //CJK UNIFIED IDEOGRAPH - 0xEFCD: 0x61F0, //CJK UNIFIED IDEOGRAPH - 0xEFCE: 0x61EB, //CJK UNIFIED IDEOGRAPH - 0xEFCF: 0x61D6, //CJK UNIFIED IDEOGRAPH - 0xEFD0: 0x61E9, //CJK UNIFIED IDEOGRAPH - 0xEFD1: 0x64FF, //CJK UNIFIED IDEOGRAPH - 0xEFD2: 0x6504, //CJK UNIFIED IDEOGRAPH - 0xEFD3: 0x64FD, //CJK UNIFIED IDEOGRAPH - 0xEFD4: 0x64F8, //CJK UNIFIED IDEOGRAPH - 0xEFD5: 0x6501, //CJK UNIFIED IDEOGRAPH - 0xEFD6: 0x6503, //CJK UNIFIED IDEOGRAPH - 0xEFD7: 0x64FC, //CJK UNIFIED IDEOGRAPH - 0xEFD8: 0x6594, //CJK UNIFIED IDEOGRAPH - 0xEFD9: 0x65DB, //CJK UNIFIED IDEOGRAPH - 0xEFDA: 0x66DA, //CJK UNIFIED IDEOGRAPH - 0xEFDB: 0x66DB, //CJK UNIFIED IDEOGRAPH - 0xEFDC: 0x66D8, //CJK UNIFIED IDEOGRAPH - 0xEFDD: 0x6AC5, //CJK UNIFIED IDEOGRAPH - 0xEFDE: 0x6AB9, //CJK UNIFIED IDEOGRAPH - 0xEFDF: 0x6ABD, //CJK UNIFIED IDEOGRAPH - 0xEFE0: 0x6AE1, //CJK UNIFIED IDEOGRAPH - 0xEFE1: 0x6AC6, //CJK UNIFIED IDEOGRAPH - 0xEFE2: 0x6ABA, //CJK UNIFIED IDEOGRAPH - 0xEFE3: 0x6AB6, //CJK UNIFIED IDEOGRAPH - 0xEFE4: 0x6AB7, //CJK UNIFIED IDEOGRAPH - 0xEFE5: 0x6AC7, //CJK UNIFIED IDEOGRAPH - 0xEFE6: 0x6AB4, //CJK UNIFIED IDEOGRAPH - 0xEFE7: 0x6AAD, //CJK UNIFIED IDEOGRAPH - 0xEFE8: 0x6B5E, //CJK UNIFIED IDEOGRAPH - 0xEFE9: 0x6BC9, //CJK UNIFIED IDEOGRAPH - 0xEFEA: 0x6C0B, //CJK UNIFIED IDEOGRAPH - 0xEFEB: 0x7007, //CJK UNIFIED IDEOGRAPH - 0xEFEC: 0x700C, //CJK UNIFIED IDEOGRAPH - 0xEFED: 0x700D, //CJK UNIFIED IDEOGRAPH - 0xEFEE: 0x7001, //CJK UNIFIED IDEOGRAPH - 0xEFEF: 0x7005, //CJK UNIFIED IDEOGRAPH - 0xEFF0: 0x7014, //CJK UNIFIED IDEOGRAPH - 0xEFF1: 0x700E, //CJK UNIFIED IDEOGRAPH - 0xEFF2: 0x6FFF, //CJK UNIFIED IDEOGRAPH - 0xEFF3: 0x7000, //CJK UNIFIED IDEOGRAPH - 0xEFF4: 0x6FFB, //CJK UNIFIED IDEOGRAPH - 0xEFF5: 0x7026, //CJK UNIFIED IDEOGRAPH - 0xEFF6: 0x6FFC, //CJK UNIFIED IDEOGRAPH - 0xEFF7: 0x6FF7, //CJK UNIFIED IDEOGRAPH - 0xEFF8: 0x700A, //CJK UNIFIED IDEOGRAPH - 0xEFF9: 0x7201, //CJK UNIFIED IDEOGRAPH - 0xEFFA: 0x71FF, //CJK UNIFIED IDEOGRAPH - 0xEFFB: 0x71F9, //CJK UNIFIED IDEOGRAPH - 0xEFFC: 0x7203, //CJK UNIFIED IDEOGRAPH - 0xEFFD: 0x71FD, //CJK UNIFIED IDEOGRAPH - 0xEFFE: 0x7376, //CJK UNIFIED IDEOGRAPH - 0xF040: 0x74B8, //CJK UNIFIED IDEOGRAPH - 0xF041: 0x74C0, //CJK UNIFIED IDEOGRAPH - 0xF042: 0x74B5, //CJK UNIFIED IDEOGRAPH - 0xF043: 0x74C1, //CJK UNIFIED IDEOGRAPH - 0xF044: 0x74BE, //CJK UNIFIED IDEOGRAPH - 0xF045: 0x74B6, //CJK UNIFIED IDEOGRAPH - 0xF046: 0x74BB, //CJK UNIFIED IDEOGRAPH - 0xF047: 0x74C2, //CJK UNIFIED IDEOGRAPH - 0xF048: 0x7514, //CJK UNIFIED IDEOGRAPH - 0xF049: 0x7513, //CJK UNIFIED IDEOGRAPH - 0xF04A: 0x765C, //CJK UNIFIED IDEOGRAPH - 0xF04B: 0x7664, //CJK UNIFIED IDEOGRAPH - 0xF04C: 0x7659, //CJK UNIFIED IDEOGRAPH - 0xF04D: 0x7650, //CJK UNIFIED IDEOGRAPH - 0xF04E: 0x7653, //CJK UNIFIED IDEOGRAPH - 0xF04F: 0x7657, //CJK UNIFIED IDEOGRAPH - 0xF050: 0x765A, //CJK UNIFIED IDEOGRAPH - 0xF051: 0x76A6, //CJK UNIFIED IDEOGRAPH - 0xF052: 0x76BD, //CJK UNIFIED IDEOGRAPH - 0xF053: 0x76EC, //CJK UNIFIED IDEOGRAPH - 0xF054: 0x77C2, //CJK UNIFIED IDEOGRAPH - 0xF055: 0x77BA, //CJK UNIFIED IDEOGRAPH - 0xF056: 0x78FF, //CJK UNIFIED IDEOGRAPH - 0xF057: 0x790C, //CJK UNIFIED IDEOGRAPH - 0xF058: 0x7913, //CJK UNIFIED IDEOGRAPH - 0xF059: 0x7914, //CJK UNIFIED IDEOGRAPH - 0xF05A: 0x7909, //CJK UNIFIED IDEOGRAPH - 0xF05B: 0x7910, //CJK UNIFIED IDEOGRAPH - 0xF05C: 0x7912, //CJK UNIFIED IDEOGRAPH - 0xF05D: 0x7911, //CJK UNIFIED IDEOGRAPH - 0xF05E: 0x79AD, //CJK UNIFIED IDEOGRAPH - 0xF05F: 0x79AC, //CJK UNIFIED IDEOGRAPH - 0xF060: 0x7A5F, //CJK UNIFIED IDEOGRAPH - 0xF061: 0x7C1C, //CJK UNIFIED IDEOGRAPH - 0xF062: 0x7C29, //CJK UNIFIED IDEOGRAPH - 0xF063: 0x7C19, //CJK UNIFIED IDEOGRAPH - 0xF064: 0x7C20, //CJK UNIFIED IDEOGRAPH - 0xF065: 0x7C1F, //CJK UNIFIED IDEOGRAPH - 0xF066: 0x7C2D, //CJK UNIFIED IDEOGRAPH - 0xF067: 0x7C1D, //CJK UNIFIED IDEOGRAPH - 0xF068: 0x7C26, //CJK UNIFIED IDEOGRAPH - 0xF069: 0x7C28, //CJK UNIFIED IDEOGRAPH - 0xF06A: 0x7C22, //CJK UNIFIED IDEOGRAPH - 0xF06B: 0x7C25, //CJK UNIFIED IDEOGRAPH - 0xF06C: 0x7C30, //CJK UNIFIED IDEOGRAPH - 0xF06D: 0x7E5C, //CJK UNIFIED IDEOGRAPH - 0xF06E: 0x7E50, //CJK UNIFIED IDEOGRAPH - 0xF06F: 0x7E56, //CJK UNIFIED IDEOGRAPH - 0xF070: 0x7E63, //CJK UNIFIED IDEOGRAPH - 0xF071: 0x7E58, //CJK UNIFIED IDEOGRAPH - 0xF072: 0x7E62, //CJK UNIFIED IDEOGRAPH - 0xF073: 0x7E5F, //CJK UNIFIED IDEOGRAPH - 0xF074: 0x7E51, //CJK UNIFIED IDEOGRAPH - 0xF075: 0x7E60, //CJK UNIFIED IDEOGRAPH - 0xF076: 0x7E57, //CJK UNIFIED IDEOGRAPH - 0xF077: 0x7E53, //CJK UNIFIED IDEOGRAPH - 0xF078: 0x7FB5, //CJK UNIFIED IDEOGRAPH - 0xF079: 0x7FB3, //CJK UNIFIED IDEOGRAPH - 0xF07A: 0x7FF7, //CJK UNIFIED IDEOGRAPH - 0xF07B: 0x7FF8, //CJK UNIFIED IDEOGRAPH - 0xF07C: 0x8075, //CJK UNIFIED IDEOGRAPH - 0xF07D: 0x81D1, //CJK UNIFIED IDEOGRAPH - 0xF07E: 0x81D2, //CJK UNIFIED IDEOGRAPH - 0xF0A1: 0x81D0, //CJK UNIFIED IDEOGRAPH - 0xF0A2: 0x825F, //CJK UNIFIED IDEOGRAPH - 0xF0A3: 0x825E, //CJK UNIFIED IDEOGRAPH - 0xF0A4: 0x85B4, //CJK UNIFIED IDEOGRAPH - 0xF0A5: 0x85C6, //CJK UNIFIED IDEOGRAPH - 0xF0A6: 0x85C0, //CJK UNIFIED IDEOGRAPH - 0xF0A7: 0x85C3, //CJK UNIFIED IDEOGRAPH - 0xF0A8: 0x85C2, //CJK UNIFIED IDEOGRAPH - 0xF0A9: 0x85B3, //CJK UNIFIED IDEOGRAPH - 0xF0AA: 0x85B5, //CJK UNIFIED IDEOGRAPH - 0xF0AB: 0x85BD, //CJK UNIFIED IDEOGRAPH - 0xF0AC: 0x85C7, //CJK UNIFIED IDEOGRAPH - 0xF0AD: 0x85C4, //CJK UNIFIED IDEOGRAPH - 0xF0AE: 0x85BF, //CJK UNIFIED IDEOGRAPH - 0xF0AF: 0x85CB, //CJK UNIFIED IDEOGRAPH - 0xF0B0: 0x85CE, //CJK UNIFIED IDEOGRAPH - 0xF0B1: 0x85C8, //CJK UNIFIED IDEOGRAPH - 0xF0B2: 0x85C5, //CJK UNIFIED IDEOGRAPH - 0xF0B3: 0x85B1, //CJK UNIFIED IDEOGRAPH - 0xF0B4: 0x85B6, //CJK UNIFIED IDEOGRAPH - 0xF0B5: 0x85D2, //CJK UNIFIED IDEOGRAPH - 0xF0B6: 0x8624, //CJK UNIFIED IDEOGRAPH - 0xF0B7: 0x85B8, //CJK UNIFIED IDEOGRAPH - 0xF0B8: 0x85B7, //CJK UNIFIED IDEOGRAPH - 0xF0B9: 0x85BE, //CJK UNIFIED IDEOGRAPH - 0xF0BA: 0x8669, //CJK UNIFIED IDEOGRAPH - 0xF0BB: 0x87E7, //CJK UNIFIED IDEOGRAPH - 0xF0BC: 0x87E6, //CJK UNIFIED IDEOGRAPH - 0xF0BD: 0x87E2, //CJK UNIFIED IDEOGRAPH - 0xF0BE: 0x87DB, //CJK UNIFIED IDEOGRAPH - 0xF0BF: 0x87EB, //CJK UNIFIED IDEOGRAPH - 0xF0C0: 0x87EA, //CJK UNIFIED IDEOGRAPH - 0xF0C1: 0x87E5, //CJK UNIFIED IDEOGRAPH - 0xF0C2: 0x87DF, //CJK UNIFIED IDEOGRAPH - 0xF0C3: 0x87F3, //CJK UNIFIED IDEOGRAPH - 0xF0C4: 0x87E4, //CJK UNIFIED IDEOGRAPH - 0xF0C5: 0x87D4, //CJK UNIFIED IDEOGRAPH - 0xF0C6: 0x87DC, //CJK UNIFIED IDEOGRAPH - 0xF0C7: 0x87D3, //CJK UNIFIED IDEOGRAPH - 0xF0C8: 0x87ED, //CJK UNIFIED IDEOGRAPH - 0xF0C9: 0x87D8, //CJK UNIFIED IDEOGRAPH - 0xF0CA: 0x87E3, //CJK UNIFIED IDEOGRAPH - 0xF0CB: 0x87A4, //CJK UNIFIED IDEOGRAPH - 0xF0CC: 0x87D7, //CJK UNIFIED IDEOGRAPH - 0xF0CD: 0x87D9, //CJK UNIFIED IDEOGRAPH - 0xF0CE: 0x8801, //CJK UNIFIED IDEOGRAPH - 0xF0CF: 0x87F4, //CJK UNIFIED IDEOGRAPH - 0xF0D0: 0x87E8, //CJK UNIFIED IDEOGRAPH - 0xF0D1: 0x87DD, //CJK UNIFIED IDEOGRAPH - 0xF0D2: 0x8953, //CJK UNIFIED IDEOGRAPH - 0xF0D3: 0x894B, //CJK UNIFIED IDEOGRAPH - 0xF0D4: 0x894F, //CJK UNIFIED IDEOGRAPH - 0xF0D5: 0x894C, //CJK UNIFIED IDEOGRAPH - 0xF0D6: 0x8946, //CJK UNIFIED IDEOGRAPH - 0xF0D7: 0x8950, //CJK UNIFIED IDEOGRAPH - 0xF0D8: 0x8951, //CJK UNIFIED IDEOGRAPH - 0xF0D9: 0x8949, //CJK UNIFIED IDEOGRAPH - 0xF0DA: 0x8B2A, //CJK UNIFIED IDEOGRAPH - 0xF0DB: 0x8B27, //CJK UNIFIED IDEOGRAPH - 0xF0DC: 0x8B23, //CJK UNIFIED IDEOGRAPH - 0xF0DD: 0x8B33, //CJK UNIFIED IDEOGRAPH - 0xF0DE: 0x8B30, //CJK UNIFIED IDEOGRAPH - 0xF0DF: 0x8B35, //CJK UNIFIED IDEOGRAPH - 0xF0E0: 0x8B47, //CJK UNIFIED IDEOGRAPH - 0xF0E1: 0x8B2F, //CJK UNIFIED IDEOGRAPH - 0xF0E2: 0x8B3C, //CJK UNIFIED IDEOGRAPH - 0xF0E3: 0x8B3E, //CJK UNIFIED IDEOGRAPH - 0xF0E4: 0x8B31, //CJK UNIFIED IDEOGRAPH - 0xF0E5: 0x8B25, //CJK UNIFIED IDEOGRAPH - 0xF0E6: 0x8B37, //CJK UNIFIED IDEOGRAPH - 0xF0E7: 0x8B26, //CJK UNIFIED IDEOGRAPH - 0xF0E8: 0x8B36, //CJK UNIFIED IDEOGRAPH - 0xF0E9: 0x8B2E, //CJK UNIFIED IDEOGRAPH - 0xF0EA: 0x8B24, //CJK UNIFIED IDEOGRAPH - 0xF0EB: 0x8B3B, //CJK UNIFIED IDEOGRAPH - 0xF0EC: 0x8B3D, //CJK UNIFIED IDEOGRAPH - 0xF0ED: 0x8B3A, //CJK UNIFIED IDEOGRAPH - 0xF0EE: 0x8C42, //CJK UNIFIED IDEOGRAPH - 0xF0EF: 0x8C75, //CJK UNIFIED IDEOGRAPH - 0xF0F0: 0x8C99, //CJK UNIFIED IDEOGRAPH - 0xF0F1: 0x8C98, //CJK UNIFIED IDEOGRAPH - 0xF0F2: 0x8C97, //CJK UNIFIED IDEOGRAPH - 0xF0F3: 0x8CFE, //CJK UNIFIED IDEOGRAPH - 0xF0F4: 0x8D04, //CJK UNIFIED IDEOGRAPH - 0xF0F5: 0x8D02, //CJK UNIFIED IDEOGRAPH - 0xF0F6: 0x8D00, //CJK UNIFIED IDEOGRAPH - 0xF0F7: 0x8E5C, //CJK UNIFIED IDEOGRAPH - 0xF0F8: 0x8E62, //CJK UNIFIED IDEOGRAPH - 0xF0F9: 0x8E60, //CJK UNIFIED IDEOGRAPH - 0xF0FA: 0x8E57, //CJK UNIFIED IDEOGRAPH - 0xF0FB: 0x8E56, //CJK UNIFIED IDEOGRAPH - 0xF0FC: 0x8E5E, //CJK UNIFIED IDEOGRAPH - 0xF0FD: 0x8E65, //CJK UNIFIED IDEOGRAPH - 0xF0FE: 0x8E67, //CJK UNIFIED IDEOGRAPH - 0xF140: 0x8E5B, //CJK UNIFIED IDEOGRAPH - 0xF141: 0x8E5A, //CJK UNIFIED IDEOGRAPH - 0xF142: 0x8E61, //CJK UNIFIED IDEOGRAPH - 0xF143: 0x8E5D, //CJK UNIFIED IDEOGRAPH - 0xF144: 0x8E69, //CJK UNIFIED IDEOGRAPH - 0xF145: 0x8E54, //CJK UNIFIED IDEOGRAPH - 0xF146: 0x8F46, //CJK UNIFIED IDEOGRAPH - 0xF147: 0x8F47, //CJK UNIFIED IDEOGRAPH - 0xF148: 0x8F48, //CJK UNIFIED IDEOGRAPH - 0xF149: 0x8F4B, //CJK UNIFIED IDEOGRAPH - 0xF14A: 0x9128, //CJK UNIFIED IDEOGRAPH - 0xF14B: 0x913A, //CJK UNIFIED IDEOGRAPH - 0xF14C: 0x913B, //CJK UNIFIED IDEOGRAPH - 0xF14D: 0x913E, //CJK UNIFIED IDEOGRAPH - 0xF14E: 0x91A8, //CJK UNIFIED IDEOGRAPH - 0xF14F: 0x91A5, //CJK UNIFIED IDEOGRAPH - 0xF150: 0x91A7, //CJK UNIFIED IDEOGRAPH - 0xF151: 0x91AF, //CJK UNIFIED IDEOGRAPH - 0xF152: 0x91AA, //CJK UNIFIED IDEOGRAPH - 0xF153: 0x93B5, //CJK UNIFIED IDEOGRAPH - 0xF154: 0x938C, //CJK UNIFIED IDEOGRAPH - 0xF155: 0x9392, //CJK UNIFIED IDEOGRAPH - 0xF156: 0x93B7, //CJK UNIFIED IDEOGRAPH - 0xF157: 0x939B, //CJK UNIFIED IDEOGRAPH - 0xF158: 0x939D, //CJK UNIFIED IDEOGRAPH - 0xF159: 0x9389, //CJK UNIFIED IDEOGRAPH - 0xF15A: 0x93A7, //CJK UNIFIED IDEOGRAPH - 0xF15B: 0x938E, //CJK UNIFIED IDEOGRAPH - 0xF15C: 0x93AA, //CJK UNIFIED IDEOGRAPH - 0xF15D: 0x939E, //CJK UNIFIED IDEOGRAPH - 0xF15E: 0x93A6, //CJK UNIFIED IDEOGRAPH - 0xF15F: 0x9395, //CJK UNIFIED IDEOGRAPH - 0xF160: 0x9388, //CJK UNIFIED IDEOGRAPH - 0xF161: 0x9399, //CJK UNIFIED IDEOGRAPH - 0xF162: 0x939F, //CJK UNIFIED IDEOGRAPH - 0xF163: 0x938D, //CJK UNIFIED IDEOGRAPH - 0xF164: 0x93B1, //CJK UNIFIED IDEOGRAPH - 0xF165: 0x9391, //CJK UNIFIED IDEOGRAPH - 0xF166: 0x93B2, //CJK UNIFIED IDEOGRAPH - 0xF167: 0x93A4, //CJK UNIFIED IDEOGRAPH - 0xF168: 0x93A8, //CJK UNIFIED IDEOGRAPH - 0xF169: 0x93B4, //CJK UNIFIED IDEOGRAPH - 0xF16A: 0x93A3, //CJK UNIFIED IDEOGRAPH - 0xF16B: 0x93A5, //CJK UNIFIED IDEOGRAPH - 0xF16C: 0x95D2, //CJK UNIFIED IDEOGRAPH - 0xF16D: 0x95D3, //CJK UNIFIED IDEOGRAPH - 0xF16E: 0x95D1, //CJK UNIFIED IDEOGRAPH - 0xF16F: 0x96B3, //CJK UNIFIED IDEOGRAPH - 0xF170: 0x96D7, //CJK UNIFIED IDEOGRAPH - 0xF171: 0x96DA, //CJK UNIFIED IDEOGRAPH - 0xF172: 0x5DC2, //CJK UNIFIED IDEOGRAPH - 0xF173: 0x96DF, //CJK UNIFIED IDEOGRAPH - 0xF174: 0x96D8, //CJK UNIFIED IDEOGRAPH - 0xF175: 0x96DD, //CJK UNIFIED IDEOGRAPH - 0xF176: 0x9723, //CJK UNIFIED IDEOGRAPH - 0xF177: 0x9722, //CJK UNIFIED IDEOGRAPH - 0xF178: 0x9725, //CJK UNIFIED IDEOGRAPH - 0xF179: 0x97AC, //CJK UNIFIED IDEOGRAPH - 0xF17A: 0x97AE, //CJK UNIFIED IDEOGRAPH - 0xF17B: 0x97A8, //CJK UNIFIED IDEOGRAPH - 0xF17C: 0x97AB, //CJK UNIFIED IDEOGRAPH - 0xF17D: 0x97A4, //CJK UNIFIED IDEOGRAPH - 0xF17E: 0x97AA, //CJK UNIFIED IDEOGRAPH - 0xF1A1: 0x97A2, //CJK UNIFIED IDEOGRAPH - 0xF1A2: 0x97A5, //CJK UNIFIED IDEOGRAPH - 0xF1A3: 0x97D7, //CJK UNIFIED IDEOGRAPH - 0xF1A4: 0x97D9, //CJK UNIFIED IDEOGRAPH - 0xF1A5: 0x97D6, //CJK UNIFIED IDEOGRAPH - 0xF1A6: 0x97D8, //CJK UNIFIED IDEOGRAPH - 0xF1A7: 0x97FA, //CJK UNIFIED IDEOGRAPH - 0xF1A8: 0x9850, //CJK UNIFIED IDEOGRAPH - 0xF1A9: 0x9851, //CJK UNIFIED IDEOGRAPH - 0xF1AA: 0x9852, //CJK UNIFIED IDEOGRAPH - 0xF1AB: 0x98B8, //CJK UNIFIED IDEOGRAPH - 0xF1AC: 0x9941, //CJK UNIFIED IDEOGRAPH - 0xF1AD: 0x993C, //CJK UNIFIED IDEOGRAPH - 0xF1AE: 0x993A, //CJK UNIFIED IDEOGRAPH - 0xF1AF: 0x9A0F, //CJK UNIFIED IDEOGRAPH - 0xF1B0: 0x9A0B, //CJK UNIFIED IDEOGRAPH - 0xF1B1: 0x9A09, //CJK UNIFIED IDEOGRAPH - 0xF1B2: 0x9A0D, //CJK UNIFIED IDEOGRAPH - 0xF1B3: 0x9A04, //CJK UNIFIED IDEOGRAPH - 0xF1B4: 0x9A11, //CJK UNIFIED IDEOGRAPH - 0xF1B5: 0x9A0A, //CJK UNIFIED IDEOGRAPH - 0xF1B6: 0x9A05, //CJK UNIFIED IDEOGRAPH - 0xF1B7: 0x9A07, //CJK UNIFIED IDEOGRAPH - 0xF1B8: 0x9A06, //CJK UNIFIED IDEOGRAPH - 0xF1B9: 0x9AC0, //CJK UNIFIED IDEOGRAPH - 0xF1BA: 0x9ADC, //CJK UNIFIED IDEOGRAPH - 0xF1BB: 0x9B08, //CJK UNIFIED IDEOGRAPH - 0xF1BC: 0x9B04, //CJK UNIFIED IDEOGRAPH - 0xF1BD: 0x9B05, //CJK UNIFIED IDEOGRAPH - 0xF1BE: 0x9B29, //CJK UNIFIED IDEOGRAPH - 0xF1BF: 0x9B35, //CJK UNIFIED IDEOGRAPH - 0xF1C0: 0x9B4A, //CJK UNIFIED IDEOGRAPH - 0xF1C1: 0x9B4C, //CJK UNIFIED IDEOGRAPH - 0xF1C2: 0x9B4B, //CJK UNIFIED IDEOGRAPH - 0xF1C3: 0x9BC7, //CJK UNIFIED IDEOGRAPH - 0xF1C4: 0x9BC6, //CJK UNIFIED IDEOGRAPH - 0xF1C5: 0x9BC3, //CJK UNIFIED IDEOGRAPH - 0xF1C6: 0x9BBF, //CJK UNIFIED IDEOGRAPH - 0xF1C7: 0x9BC1, //CJK UNIFIED IDEOGRAPH - 0xF1C8: 0x9BB5, //CJK UNIFIED IDEOGRAPH - 0xF1C9: 0x9BB8, //CJK UNIFIED IDEOGRAPH - 0xF1CA: 0x9BD3, //CJK UNIFIED IDEOGRAPH - 0xF1CB: 0x9BB6, //CJK UNIFIED IDEOGRAPH - 0xF1CC: 0x9BC4, //CJK UNIFIED IDEOGRAPH - 0xF1CD: 0x9BB9, //CJK UNIFIED IDEOGRAPH - 0xF1CE: 0x9BBD, //CJK UNIFIED IDEOGRAPH - 0xF1CF: 0x9D5C, //CJK UNIFIED IDEOGRAPH - 0xF1D0: 0x9D53, //CJK UNIFIED IDEOGRAPH - 0xF1D1: 0x9D4F, //CJK UNIFIED IDEOGRAPH - 0xF1D2: 0x9D4A, //CJK UNIFIED IDEOGRAPH - 0xF1D3: 0x9D5B, //CJK UNIFIED IDEOGRAPH - 0xF1D4: 0x9D4B, //CJK UNIFIED IDEOGRAPH - 0xF1D5: 0x9D59, //CJK UNIFIED IDEOGRAPH - 0xF1D6: 0x9D56, //CJK UNIFIED IDEOGRAPH - 0xF1D7: 0x9D4C, //CJK UNIFIED IDEOGRAPH - 0xF1D8: 0x9D57, //CJK UNIFIED IDEOGRAPH - 0xF1D9: 0x9D52, //CJK UNIFIED IDEOGRAPH - 0xF1DA: 0x9D54, //CJK UNIFIED IDEOGRAPH - 0xF1DB: 0x9D5F, //CJK UNIFIED IDEOGRAPH - 0xF1DC: 0x9D58, //CJK UNIFIED IDEOGRAPH - 0xF1DD: 0x9D5A, //CJK UNIFIED IDEOGRAPH - 0xF1DE: 0x9E8E, //CJK UNIFIED IDEOGRAPH - 0xF1DF: 0x9E8C, //CJK UNIFIED IDEOGRAPH - 0xF1E0: 0x9EDF, //CJK UNIFIED IDEOGRAPH - 0xF1E1: 0x9F01, //CJK UNIFIED IDEOGRAPH - 0xF1E2: 0x9F00, //CJK UNIFIED IDEOGRAPH - 0xF1E3: 0x9F16, //CJK UNIFIED IDEOGRAPH - 0xF1E4: 0x9F25, //CJK UNIFIED IDEOGRAPH - 0xF1E5: 0x9F2B, //CJK UNIFIED IDEOGRAPH - 0xF1E6: 0x9F2A, //CJK UNIFIED IDEOGRAPH - 0xF1E7: 0x9F29, //CJK UNIFIED IDEOGRAPH - 0xF1E8: 0x9F28, //CJK UNIFIED IDEOGRAPH - 0xF1E9: 0x9F4C, //CJK UNIFIED IDEOGRAPH - 0xF1EA: 0x9F55, //CJK UNIFIED IDEOGRAPH - 0xF1EB: 0x5134, //CJK UNIFIED IDEOGRAPH - 0xF1EC: 0x5135, //CJK UNIFIED IDEOGRAPH - 0xF1ED: 0x5296, //CJK UNIFIED IDEOGRAPH - 0xF1EE: 0x52F7, //CJK UNIFIED IDEOGRAPH - 0xF1EF: 0x53B4, //CJK UNIFIED IDEOGRAPH - 0xF1F0: 0x56AB, //CJK UNIFIED IDEOGRAPH - 0xF1F1: 0x56AD, //CJK UNIFIED IDEOGRAPH - 0xF1F2: 0x56A6, //CJK UNIFIED IDEOGRAPH - 0xF1F3: 0x56A7, //CJK UNIFIED IDEOGRAPH - 0xF1F4: 0x56AA, //CJK UNIFIED IDEOGRAPH - 0xF1F5: 0x56AC, //CJK UNIFIED IDEOGRAPH - 0xF1F6: 0x58DA, //CJK UNIFIED IDEOGRAPH - 0xF1F7: 0x58DD, //CJK UNIFIED IDEOGRAPH - 0xF1F8: 0x58DB, //CJK UNIFIED IDEOGRAPH - 0xF1F9: 0x5912, //CJK UNIFIED IDEOGRAPH - 0xF1FA: 0x5B3D, //CJK UNIFIED IDEOGRAPH - 0xF1FB: 0x5B3E, //CJK UNIFIED IDEOGRAPH - 0xF1FC: 0x5B3F, //CJK UNIFIED IDEOGRAPH - 0xF1FD: 0x5DC3, //CJK UNIFIED IDEOGRAPH - 0xF1FE: 0x5E70, //CJK UNIFIED IDEOGRAPH - 0xF240: 0x5FBF, //CJK UNIFIED IDEOGRAPH - 0xF241: 0x61FB, //CJK UNIFIED IDEOGRAPH - 0xF242: 0x6507, //CJK UNIFIED IDEOGRAPH - 0xF243: 0x6510, //CJK UNIFIED IDEOGRAPH - 0xF244: 0x650D, //CJK UNIFIED IDEOGRAPH - 0xF245: 0x6509, //CJK UNIFIED IDEOGRAPH - 0xF246: 0x650C, //CJK UNIFIED IDEOGRAPH - 0xF247: 0x650E, //CJK UNIFIED IDEOGRAPH - 0xF248: 0x6584, //CJK UNIFIED IDEOGRAPH - 0xF249: 0x65DE, //CJK UNIFIED IDEOGRAPH - 0xF24A: 0x65DD, //CJK UNIFIED IDEOGRAPH - 0xF24B: 0x66DE, //CJK UNIFIED IDEOGRAPH - 0xF24C: 0x6AE7, //CJK UNIFIED IDEOGRAPH - 0xF24D: 0x6AE0, //CJK UNIFIED IDEOGRAPH - 0xF24E: 0x6ACC, //CJK UNIFIED IDEOGRAPH - 0xF24F: 0x6AD1, //CJK UNIFIED IDEOGRAPH - 0xF250: 0x6AD9, //CJK UNIFIED IDEOGRAPH - 0xF251: 0x6ACB, //CJK UNIFIED IDEOGRAPH - 0xF252: 0x6ADF, //CJK UNIFIED IDEOGRAPH - 0xF253: 0x6ADC, //CJK UNIFIED IDEOGRAPH - 0xF254: 0x6AD0, //CJK UNIFIED IDEOGRAPH - 0xF255: 0x6AEB, //CJK UNIFIED IDEOGRAPH - 0xF256: 0x6ACF, //CJK UNIFIED IDEOGRAPH - 0xF257: 0x6ACD, //CJK UNIFIED IDEOGRAPH - 0xF258: 0x6ADE, //CJK UNIFIED IDEOGRAPH - 0xF259: 0x6B60, //CJK UNIFIED IDEOGRAPH - 0xF25A: 0x6BB0, //CJK UNIFIED IDEOGRAPH - 0xF25B: 0x6C0C, //CJK UNIFIED IDEOGRAPH - 0xF25C: 0x7019, //CJK UNIFIED IDEOGRAPH - 0xF25D: 0x7027, //CJK UNIFIED IDEOGRAPH - 0xF25E: 0x7020, //CJK UNIFIED IDEOGRAPH - 0xF25F: 0x7016, //CJK UNIFIED IDEOGRAPH - 0xF260: 0x702B, //CJK UNIFIED IDEOGRAPH - 0xF261: 0x7021, //CJK UNIFIED IDEOGRAPH - 0xF262: 0x7022, //CJK UNIFIED IDEOGRAPH - 0xF263: 0x7023, //CJK UNIFIED IDEOGRAPH - 0xF264: 0x7029, //CJK UNIFIED IDEOGRAPH - 0xF265: 0x7017, //CJK UNIFIED IDEOGRAPH - 0xF266: 0x7024, //CJK UNIFIED IDEOGRAPH - 0xF267: 0x701C, //CJK UNIFIED IDEOGRAPH - 0xF268: 0x702A, //CJK UNIFIED IDEOGRAPH - 0xF269: 0x720C, //CJK UNIFIED IDEOGRAPH - 0xF26A: 0x720A, //CJK UNIFIED IDEOGRAPH - 0xF26B: 0x7207, //CJK UNIFIED IDEOGRAPH - 0xF26C: 0x7202, //CJK UNIFIED IDEOGRAPH - 0xF26D: 0x7205, //CJK UNIFIED IDEOGRAPH - 0xF26E: 0x72A5, //CJK UNIFIED IDEOGRAPH - 0xF26F: 0x72A6, //CJK UNIFIED IDEOGRAPH - 0xF270: 0x72A4, //CJK UNIFIED IDEOGRAPH - 0xF271: 0x72A3, //CJK UNIFIED IDEOGRAPH - 0xF272: 0x72A1, //CJK UNIFIED IDEOGRAPH - 0xF273: 0x74CB, //CJK UNIFIED IDEOGRAPH - 0xF274: 0x74C5, //CJK UNIFIED IDEOGRAPH - 0xF275: 0x74B7, //CJK UNIFIED IDEOGRAPH - 0xF276: 0x74C3, //CJK UNIFIED IDEOGRAPH - 0xF277: 0x7516, //CJK UNIFIED IDEOGRAPH - 0xF278: 0x7660, //CJK UNIFIED IDEOGRAPH - 0xF279: 0x77C9, //CJK UNIFIED IDEOGRAPH - 0xF27A: 0x77CA, //CJK UNIFIED IDEOGRAPH - 0xF27B: 0x77C4, //CJK UNIFIED IDEOGRAPH - 0xF27C: 0x77F1, //CJK UNIFIED IDEOGRAPH - 0xF27D: 0x791D, //CJK UNIFIED IDEOGRAPH - 0xF27E: 0x791B, //CJK UNIFIED IDEOGRAPH - 0xF2A1: 0x7921, //CJK UNIFIED IDEOGRAPH - 0xF2A2: 0x791C, //CJK UNIFIED IDEOGRAPH - 0xF2A3: 0x7917, //CJK UNIFIED IDEOGRAPH - 0xF2A4: 0x791E, //CJK UNIFIED IDEOGRAPH - 0xF2A5: 0x79B0, //CJK UNIFIED IDEOGRAPH - 0xF2A6: 0x7A67, //CJK UNIFIED IDEOGRAPH - 0xF2A7: 0x7A68, //CJK UNIFIED IDEOGRAPH - 0xF2A8: 0x7C33, //CJK UNIFIED IDEOGRAPH - 0xF2A9: 0x7C3C, //CJK UNIFIED IDEOGRAPH - 0xF2AA: 0x7C39, //CJK UNIFIED IDEOGRAPH - 0xF2AB: 0x7C2C, //CJK UNIFIED IDEOGRAPH - 0xF2AC: 0x7C3B, //CJK UNIFIED IDEOGRAPH - 0xF2AD: 0x7CEC, //CJK UNIFIED IDEOGRAPH - 0xF2AE: 0x7CEA, //CJK UNIFIED IDEOGRAPH - 0xF2AF: 0x7E76, //CJK UNIFIED IDEOGRAPH - 0xF2B0: 0x7E75, //CJK UNIFIED IDEOGRAPH - 0xF2B1: 0x7E78, //CJK UNIFIED IDEOGRAPH - 0xF2B2: 0x7E70, //CJK UNIFIED IDEOGRAPH - 0xF2B3: 0x7E77, //CJK UNIFIED IDEOGRAPH - 0xF2B4: 0x7E6F, //CJK UNIFIED IDEOGRAPH - 0xF2B5: 0x7E7A, //CJK UNIFIED IDEOGRAPH - 0xF2B6: 0x7E72, //CJK UNIFIED IDEOGRAPH - 0xF2B7: 0x7E74, //CJK UNIFIED IDEOGRAPH - 0xF2B8: 0x7E68, //CJK UNIFIED IDEOGRAPH - 0xF2B9: 0x7F4B, //CJK UNIFIED IDEOGRAPH - 0xF2BA: 0x7F4A, //CJK UNIFIED IDEOGRAPH - 0xF2BB: 0x7F83, //CJK UNIFIED IDEOGRAPH - 0xF2BC: 0x7F86, //CJK UNIFIED IDEOGRAPH - 0xF2BD: 0x7FB7, //CJK UNIFIED IDEOGRAPH - 0xF2BE: 0x7FFD, //CJK UNIFIED IDEOGRAPH - 0xF2BF: 0x7FFE, //CJK UNIFIED IDEOGRAPH - 0xF2C0: 0x8078, //CJK UNIFIED IDEOGRAPH - 0xF2C1: 0x81D7, //CJK UNIFIED IDEOGRAPH - 0xF2C2: 0x81D5, //CJK UNIFIED IDEOGRAPH - 0xF2C3: 0x8264, //CJK UNIFIED IDEOGRAPH - 0xF2C4: 0x8261, //CJK UNIFIED IDEOGRAPH - 0xF2C5: 0x8263, //CJK UNIFIED IDEOGRAPH - 0xF2C6: 0x85EB, //CJK UNIFIED IDEOGRAPH - 0xF2C7: 0x85F1, //CJK UNIFIED IDEOGRAPH - 0xF2C8: 0x85ED, //CJK UNIFIED IDEOGRAPH - 0xF2C9: 0x85D9, //CJK UNIFIED IDEOGRAPH - 0xF2CA: 0x85E1, //CJK UNIFIED IDEOGRAPH - 0xF2CB: 0x85E8, //CJK UNIFIED IDEOGRAPH - 0xF2CC: 0x85DA, //CJK UNIFIED IDEOGRAPH - 0xF2CD: 0x85D7, //CJK UNIFIED IDEOGRAPH - 0xF2CE: 0x85EC, //CJK UNIFIED IDEOGRAPH - 0xF2CF: 0x85F2, //CJK UNIFIED IDEOGRAPH - 0xF2D0: 0x85F8, //CJK UNIFIED IDEOGRAPH - 0xF2D1: 0x85D8, //CJK UNIFIED IDEOGRAPH - 0xF2D2: 0x85DF, //CJK UNIFIED IDEOGRAPH - 0xF2D3: 0x85E3, //CJK UNIFIED IDEOGRAPH - 0xF2D4: 0x85DC, //CJK UNIFIED IDEOGRAPH - 0xF2D5: 0x85D1, //CJK UNIFIED IDEOGRAPH - 0xF2D6: 0x85F0, //CJK UNIFIED IDEOGRAPH - 0xF2D7: 0x85E6, //CJK UNIFIED IDEOGRAPH - 0xF2D8: 0x85EF, //CJK UNIFIED IDEOGRAPH - 0xF2D9: 0x85DE, //CJK UNIFIED IDEOGRAPH - 0xF2DA: 0x85E2, //CJK UNIFIED IDEOGRAPH - 0xF2DB: 0x8800, //CJK UNIFIED IDEOGRAPH - 0xF2DC: 0x87FA, //CJK UNIFIED IDEOGRAPH - 0xF2DD: 0x8803, //CJK UNIFIED IDEOGRAPH - 0xF2DE: 0x87F6, //CJK UNIFIED IDEOGRAPH - 0xF2DF: 0x87F7, //CJK UNIFIED IDEOGRAPH - 0xF2E0: 0x8809, //CJK UNIFIED IDEOGRAPH - 0xF2E1: 0x880C, //CJK UNIFIED IDEOGRAPH - 0xF2E2: 0x880B, //CJK UNIFIED IDEOGRAPH - 0xF2E3: 0x8806, //CJK UNIFIED IDEOGRAPH - 0xF2E4: 0x87FC, //CJK UNIFIED IDEOGRAPH - 0xF2E5: 0x8808, //CJK UNIFIED IDEOGRAPH - 0xF2E6: 0x87FF, //CJK UNIFIED IDEOGRAPH - 0xF2E7: 0x880A, //CJK UNIFIED IDEOGRAPH - 0xF2E8: 0x8802, //CJK UNIFIED IDEOGRAPH - 0xF2E9: 0x8962, //CJK UNIFIED IDEOGRAPH - 0xF2EA: 0x895A, //CJK UNIFIED IDEOGRAPH - 0xF2EB: 0x895B, //CJK UNIFIED IDEOGRAPH - 0xF2EC: 0x8957, //CJK UNIFIED IDEOGRAPH - 0xF2ED: 0x8961, //CJK UNIFIED IDEOGRAPH - 0xF2EE: 0x895C, //CJK UNIFIED IDEOGRAPH - 0xF2EF: 0x8958, //CJK UNIFIED IDEOGRAPH - 0xF2F0: 0x895D, //CJK UNIFIED IDEOGRAPH - 0xF2F1: 0x8959, //CJK UNIFIED IDEOGRAPH - 0xF2F2: 0x8988, //CJK UNIFIED IDEOGRAPH - 0xF2F3: 0x89B7, //CJK UNIFIED IDEOGRAPH - 0xF2F4: 0x89B6, //CJK UNIFIED IDEOGRAPH - 0xF2F5: 0x89F6, //CJK UNIFIED IDEOGRAPH - 0xF2F6: 0x8B50, //CJK UNIFIED IDEOGRAPH - 0xF2F7: 0x8B48, //CJK UNIFIED IDEOGRAPH - 0xF2F8: 0x8B4A, //CJK UNIFIED IDEOGRAPH - 0xF2F9: 0x8B40, //CJK UNIFIED IDEOGRAPH - 0xF2FA: 0x8B53, //CJK UNIFIED IDEOGRAPH - 0xF2FB: 0x8B56, //CJK UNIFIED IDEOGRAPH - 0xF2FC: 0x8B54, //CJK UNIFIED IDEOGRAPH - 0xF2FD: 0x8B4B, //CJK UNIFIED IDEOGRAPH - 0xF2FE: 0x8B55, //CJK UNIFIED IDEOGRAPH - 0xF340: 0x8B51, //CJK UNIFIED IDEOGRAPH - 0xF341: 0x8B42, //CJK UNIFIED IDEOGRAPH - 0xF342: 0x8B52, //CJK UNIFIED IDEOGRAPH - 0xF343: 0x8B57, //CJK UNIFIED IDEOGRAPH - 0xF344: 0x8C43, //CJK UNIFIED IDEOGRAPH - 0xF345: 0x8C77, //CJK UNIFIED IDEOGRAPH - 0xF346: 0x8C76, //CJK UNIFIED IDEOGRAPH - 0xF347: 0x8C9A, //CJK UNIFIED IDEOGRAPH - 0xF348: 0x8D06, //CJK UNIFIED IDEOGRAPH - 0xF349: 0x8D07, //CJK UNIFIED IDEOGRAPH - 0xF34A: 0x8D09, //CJK UNIFIED IDEOGRAPH - 0xF34B: 0x8DAC, //CJK UNIFIED IDEOGRAPH - 0xF34C: 0x8DAA, //CJK UNIFIED IDEOGRAPH - 0xF34D: 0x8DAD, //CJK UNIFIED IDEOGRAPH - 0xF34E: 0x8DAB, //CJK UNIFIED IDEOGRAPH - 0xF34F: 0x8E6D, //CJK UNIFIED IDEOGRAPH - 0xF350: 0x8E78, //CJK UNIFIED IDEOGRAPH - 0xF351: 0x8E73, //CJK UNIFIED IDEOGRAPH - 0xF352: 0x8E6A, //CJK UNIFIED IDEOGRAPH - 0xF353: 0x8E6F, //CJK UNIFIED IDEOGRAPH - 0xF354: 0x8E7B, //CJK UNIFIED IDEOGRAPH - 0xF355: 0x8EC2, //CJK UNIFIED IDEOGRAPH - 0xF356: 0x8F52, //CJK UNIFIED IDEOGRAPH - 0xF357: 0x8F51, //CJK UNIFIED IDEOGRAPH - 0xF358: 0x8F4F, //CJK UNIFIED IDEOGRAPH - 0xF359: 0x8F50, //CJK UNIFIED IDEOGRAPH - 0xF35A: 0x8F53, //CJK UNIFIED IDEOGRAPH - 0xF35B: 0x8FB4, //CJK UNIFIED IDEOGRAPH - 0xF35C: 0x9140, //CJK UNIFIED IDEOGRAPH - 0xF35D: 0x913F, //CJK UNIFIED IDEOGRAPH - 0xF35E: 0x91B0, //CJK UNIFIED IDEOGRAPH - 0xF35F: 0x91AD, //CJK UNIFIED IDEOGRAPH - 0xF360: 0x93DE, //CJK UNIFIED IDEOGRAPH - 0xF361: 0x93C7, //CJK UNIFIED IDEOGRAPH - 0xF362: 0x93CF, //CJK UNIFIED IDEOGRAPH - 0xF363: 0x93C2, //CJK UNIFIED IDEOGRAPH - 0xF364: 0x93DA, //CJK UNIFIED IDEOGRAPH - 0xF365: 0x93D0, //CJK UNIFIED IDEOGRAPH - 0xF366: 0x93F9, //CJK UNIFIED IDEOGRAPH - 0xF367: 0x93EC, //CJK UNIFIED IDEOGRAPH - 0xF368: 0x93CC, //CJK UNIFIED IDEOGRAPH - 0xF369: 0x93D9, //CJK UNIFIED IDEOGRAPH - 0xF36A: 0x93A9, //CJK UNIFIED IDEOGRAPH - 0xF36B: 0x93E6, //CJK UNIFIED IDEOGRAPH - 0xF36C: 0x93CA, //CJK UNIFIED IDEOGRAPH - 0xF36D: 0x93D4, //CJK UNIFIED IDEOGRAPH - 0xF36E: 0x93EE, //CJK UNIFIED IDEOGRAPH - 0xF36F: 0x93E3, //CJK UNIFIED IDEOGRAPH - 0xF370: 0x93D5, //CJK UNIFIED IDEOGRAPH - 0xF371: 0x93C4, //CJK UNIFIED IDEOGRAPH - 0xF372: 0x93CE, //CJK UNIFIED IDEOGRAPH - 0xF373: 0x93C0, //CJK UNIFIED IDEOGRAPH - 0xF374: 0x93D2, //CJK UNIFIED IDEOGRAPH - 0xF375: 0x93E7, //CJK UNIFIED IDEOGRAPH - 0xF376: 0x957D, //CJK UNIFIED IDEOGRAPH - 0xF377: 0x95DA, //CJK UNIFIED IDEOGRAPH - 0xF378: 0x95DB, //CJK UNIFIED IDEOGRAPH - 0xF379: 0x96E1, //CJK UNIFIED IDEOGRAPH - 0xF37A: 0x9729, //CJK UNIFIED IDEOGRAPH - 0xF37B: 0x972B, //CJK UNIFIED IDEOGRAPH - 0xF37C: 0x972C, //CJK UNIFIED IDEOGRAPH - 0xF37D: 0x9728, //CJK UNIFIED IDEOGRAPH - 0xF37E: 0x9726, //CJK UNIFIED IDEOGRAPH - 0xF3A1: 0x97B3, //CJK UNIFIED IDEOGRAPH - 0xF3A2: 0x97B7, //CJK UNIFIED IDEOGRAPH - 0xF3A3: 0x97B6, //CJK UNIFIED IDEOGRAPH - 0xF3A4: 0x97DD, //CJK UNIFIED IDEOGRAPH - 0xF3A5: 0x97DE, //CJK UNIFIED IDEOGRAPH - 0xF3A6: 0x97DF, //CJK UNIFIED IDEOGRAPH - 0xF3A7: 0x985C, //CJK UNIFIED IDEOGRAPH - 0xF3A8: 0x9859, //CJK UNIFIED IDEOGRAPH - 0xF3A9: 0x985D, //CJK UNIFIED IDEOGRAPH - 0xF3AA: 0x9857, //CJK UNIFIED IDEOGRAPH - 0xF3AB: 0x98BF, //CJK UNIFIED IDEOGRAPH - 0xF3AC: 0x98BD, //CJK UNIFIED IDEOGRAPH - 0xF3AD: 0x98BB, //CJK UNIFIED IDEOGRAPH - 0xF3AE: 0x98BE, //CJK UNIFIED IDEOGRAPH - 0xF3AF: 0x9948, //CJK UNIFIED IDEOGRAPH - 0xF3B0: 0x9947, //CJK UNIFIED IDEOGRAPH - 0xF3B1: 0x9943, //CJK UNIFIED IDEOGRAPH - 0xF3B2: 0x99A6, //CJK UNIFIED IDEOGRAPH - 0xF3B3: 0x99A7, //CJK UNIFIED IDEOGRAPH - 0xF3B4: 0x9A1A, //CJK UNIFIED IDEOGRAPH - 0xF3B5: 0x9A15, //CJK UNIFIED IDEOGRAPH - 0xF3B6: 0x9A25, //CJK UNIFIED IDEOGRAPH - 0xF3B7: 0x9A1D, //CJK UNIFIED IDEOGRAPH - 0xF3B8: 0x9A24, //CJK UNIFIED IDEOGRAPH - 0xF3B9: 0x9A1B, //CJK UNIFIED IDEOGRAPH - 0xF3BA: 0x9A22, //CJK UNIFIED IDEOGRAPH - 0xF3BB: 0x9A20, //CJK UNIFIED IDEOGRAPH - 0xF3BC: 0x9A27, //CJK UNIFIED IDEOGRAPH - 0xF3BD: 0x9A23, //CJK UNIFIED IDEOGRAPH - 0xF3BE: 0x9A1E, //CJK UNIFIED IDEOGRAPH - 0xF3BF: 0x9A1C, //CJK UNIFIED IDEOGRAPH - 0xF3C0: 0x9A14, //CJK UNIFIED IDEOGRAPH - 0xF3C1: 0x9AC2, //CJK UNIFIED IDEOGRAPH - 0xF3C2: 0x9B0B, //CJK UNIFIED IDEOGRAPH - 0xF3C3: 0x9B0A, //CJK UNIFIED IDEOGRAPH - 0xF3C4: 0x9B0E, //CJK UNIFIED IDEOGRAPH - 0xF3C5: 0x9B0C, //CJK UNIFIED IDEOGRAPH - 0xF3C6: 0x9B37, //CJK UNIFIED IDEOGRAPH - 0xF3C7: 0x9BEA, //CJK UNIFIED IDEOGRAPH - 0xF3C8: 0x9BEB, //CJK UNIFIED IDEOGRAPH - 0xF3C9: 0x9BE0, //CJK UNIFIED IDEOGRAPH - 0xF3CA: 0x9BDE, //CJK UNIFIED IDEOGRAPH - 0xF3CB: 0x9BE4, //CJK UNIFIED IDEOGRAPH - 0xF3CC: 0x9BE6, //CJK UNIFIED IDEOGRAPH - 0xF3CD: 0x9BE2, //CJK UNIFIED IDEOGRAPH - 0xF3CE: 0x9BF0, //CJK UNIFIED IDEOGRAPH - 0xF3CF: 0x9BD4, //CJK UNIFIED IDEOGRAPH - 0xF3D0: 0x9BD7, //CJK UNIFIED IDEOGRAPH - 0xF3D1: 0x9BEC, //CJK UNIFIED IDEOGRAPH - 0xF3D2: 0x9BDC, //CJK UNIFIED IDEOGRAPH - 0xF3D3: 0x9BD9, //CJK UNIFIED IDEOGRAPH - 0xF3D4: 0x9BE5, //CJK UNIFIED IDEOGRAPH - 0xF3D5: 0x9BD5, //CJK UNIFIED IDEOGRAPH - 0xF3D6: 0x9BE1, //CJK UNIFIED IDEOGRAPH - 0xF3D7: 0x9BDA, //CJK UNIFIED IDEOGRAPH - 0xF3D8: 0x9D77, //CJK UNIFIED IDEOGRAPH - 0xF3D9: 0x9D81, //CJK UNIFIED IDEOGRAPH - 0xF3DA: 0x9D8A, //CJK UNIFIED IDEOGRAPH - 0xF3DB: 0x9D84, //CJK UNIFIED IDEOGRAPH - 0xF3DC: 0x9D88, //CJK UNIFIED IDEOGRAPH - 0xF3DD: 0x9D71, //CJK UNIFIED IDEOGRAPH - 0xF3DE: 0x9D80, //CJK UNIFIED IDEOGRAPH - 0xF3DF: 0x9D78, //CJK UNIFIED IDEOGRAPH - 0xF3E0: 0x9D86, //CJK UNIFIED IDEOGRAPH - 0xF3E1: 0x9D8B, //CJK UNIFIED IDEOGRAPH - 0xF3E2: 0x9D8C, //CJK UNIFIED IDEOGRAPH - 0xF3E3: 0x9D7D, //CJK UNIFIED IDEOGRAPH - 0xF3E4: 0x9D6B, //CJK UNIFIED IDEOGRAPH - 0xF3E5: 0x9D74, //CJK UNIFIED IDEOGRAPH - 0xF3E6: 0x9D75, //CJK UNIFIED IDEOGRAPH - 0xF3E7: 0x9D70, //CJK UNIFIED IDEOGRAPH - 0xF3E8: 0x9D69, //CJK UNIFIED IDEOGRAPH - 0xF3E9: 0x9D85, //CJK UNIFIED IDEOGRAPH - 0xF3EA: 0x9D73, //CJK UNIFIED IDEOGRAPH - 0xF3EB: 0x9D7B, //CJK UNIFIED IDEOGRAPH - 0xF3EC: 0x9D82, //CJK UNIFIED IDEOGRAPH - 0xF3ED: 0x9D6F, //CJK UNIFIED IDEOGRAPH - 0xF3EE: 0x9D79, //CJK UNIFIED IDEOGRAPH - 0xF3EF: 0x9D7F, //CJK UNIFIED IDEOGRAPH - 0xF3F0: 0x9D87, //CJK UNIFIED IDEOGRAPH - 0xF3F1: 0x9D68, //CJK UNIFIED IDEOGRAPH - 0xF3F2: 0x9E94, //CJK UNIFIED IDEOGRAPH - 0xF3F3: 0x9E91, //CJK UNIFIED IDEOGRAPH - 0xF3F4: 0x9EC0, //CJK UNIFIED IDEOGRAPH - 0xF3F5: 0x9EFC, //CJK UNIFIED IDEOGRAPH - 0xF3F6: 0x9F2D, //CJK UNIFIED IDEOGRAPH - 0xF3F7: 0x9F40, //CJK UNIFIED IDEOGRAPH - 0xF3F8: 0x9F41, //CJK UNIFIED IDEOGRAPH - 0xF3F9: 0x9F4D, //CJK UNIFIED IDEOGRAPH - 0xF3FA: 0x9F56, //CJK UNIFIED IDEOGRAPH - 0xF3FB: 0x9F57, //CJK UNIFIED IDEOGRAPH - 0xF3FC: 0x9F58, //CJK UNIFIED IDEOGRAPH - 0xF3FD: 0x5337, //CJK UNIFIED IDEOGRAPH - 0xF3FE: 0x56B2, //CJK UNIFIED IDEOGRAPH - 0xF440: 0x56B5, //CJK UNIFIED IDEOGRAPH - 0xF441: 0x56B3, //CJK UNIFIED IDEOGRAPH - 0xF442: 0x58E3, //CJK UNIFIED IDEOGRAPH - 0xF443: 0x5B45, //CJK UNIFIED IDEOGRAPH - 0xF444: 0x5DC6, //CJK UNIFIED IDEOGRAPH - 0xF445: 0x5DC7, //CJK UNIFIED IDEOGRAPH - 0xF446: 0x5EEE, //CJK UNIFIED IDEOGRAPH - 0xF447: 0x5EEF, //CJK UNIFIED IDEOGRAPH - 0xF448: 0x5FC0, //CJK UNIFIED IDEOGRAPH - 0xF449: 0x5FC1, //CJK UNIFIED IDEOGRAPH - 0xF44A: 0x61F9, //CJK UNIFIED IDEOGRAPH - 0xF44B: 0x6517, //CJK UNIFIED IDEOGRAPH - 0xF44C: 0x6516, //CJK UNIFIED IDEOGRAPH - 0xF44D: 0x6515, //CJK UNIFIED IDEOGRAPH - 0xF44E: 0x6513, //CJK UNIFIED IDEOGRAPH - 0xF44F: 0x65DF, //CJK UNIFIED IDEOGRAPH - 0xF450: 0x66E8, //CJK UNIFIED IDEOGRAPH - 0xF451: 0x66E3, //CJK UNIFIED IDEOGRAPH - 0xF452: 0x66E4, //CJK UNIFIED IDEOGRAPH - 0xF453: 0x6AF3, //CJK UNIFIED IDEOGRAPH - 0xF454: 0x6AF0, //CJK UNIFIED IDEOGRAPH - 0xF455: 0x6AEA, //CJK UNIFIED IDEOGRAPH - 0xF456: 0x6AE8, //CJK UNIFIED IDEOGRAPH - 0xF457: 0x6AF9, //CJK UNIFIED IDEOGRAPH - 0xF458: 0x6AF1, //CJK UNIFIED IDEOGRAPH - 0xF459: 0x6AEE, //CJK UNIFIED IDEOGRAPH - 0xF45A: 0x6AEF, //CJK UNIFIED IDEOGRAPH - 0xF45B: 0x703C, //CJK UNIFIED IDEOGRAPH - 0xF45C: 0x7035, //CJK UNIFIED IDEOGRAPH - 0xF45D: 0x702F, //CJK UNIFIED IDEOGRAPH - 0xF45E: 0x7037, //CJK UNIFIED IDEOGRAPH - 0xF45F: 0x7034, //CJK UNIFIED IDEOGRAPH - 0xF460: 0x7031, //CJK UNIFIED IDEOGRAPH - 0xF461: 0x7042, //CJK UNIFIED IDEOGRAPH - 0xF462: 0x7038, //CJK UNIFIED IDEOGRAPH - 0xF463: 0x703F, //CJK UNIFIED IDEOGRAPH - 0xF464: 0x703A, //CJK UNIFIED IDEOGRAPH - 0xF465: 0x7039, //CJK UNIFIED IDEOGRAPH - 0xF466: 0x7040, //CJK UNIFIED IDEOGRAPH - 0xF467: 0x703B, //CJK UNIFIED IDEOGRAPH - 0xF468: 0x7033, //CJK UNIFIED IDEOGRAPH - 0xF469: 0x7041, //CJK UNIFIED IDEOGRAPH - 0xF46A: 0x7213, //CJK UNIFIED IDEOGRAPH - 0xF46B: 0x7214, //CJK UNIFIED IDEOGRAPH - 0xF46C: 0x72A8, //CJK UNIFIED IDEOGRAPH - 0xF46D: 0x737D, //CJK UNIFIED IDEOGRAPH - 0xF46E: 0x737C, //CJK UNIFIED IDEOGRAPH - 0xF46F: 0x74BA, //CJK UNIFIED IDEOGRAPH - 0xF470: 0x76AB, //CJK UNIFIED IDEOGRAPH - 0xF471: 0x76AA, //CJK UNIFIED IDEOGRAPH - 0xF472: 0x76BE, //CJK UNIFIED IDEOGRAPH - 0xF473: 0x76ED, //CJK UNIFIED IDEOGRAPH - 0xF474: 0x77CC, //CJK UNIFIED IDEOGRAPH - 0xF475: 0x77CE, //CJK UNIFIED IDEOGRAPH - 0xF476: 0x77CF, //CJK UNIFIED IDEOGRAPH - 0xF477: 0x77CD, //CJK UNIFIED IDEOGRAPH - 0xF478: 0x77F2, //CJK UNIFIED IDEOGRAPH - 0xF479: 0x7925, //CJK UNIFIED IDEOGRAPH - 0xF47A: 0x7923, //CJK UNIFIED IDEOGRAPH - 0xF47B: 0x7927, //CJK UNIFIED IDEOGRAPH - 0xF47C: 0x7928, //CJK UNIFIED IDEOGRAPH - 0xF47D: 0x7924, //CJK UNIFIED IDEOGRAPH - 0xF47E: 0x7929, //CJK UNIFIED IDEOGRAPH - 0xF4A1: 0x79B2, //CJK UNIFIED IDEOGRAPH - 0xF4A2: 0x7A6E, //CJK UNIFIED IDEOGRAPH - 0xF4A3: 0x7A6C, //CJK UNIFIED IDEOGRAPH - 0xF4A4: 0x7A6D, //CJK UNIFIED IDEOGRAPH - 0xF4A5: 0x7AF7, //CJK UNIFIED IDEOGRAPH - 0xF4A6: 0x7C49, //CJK UNIFIED IDEOGRAPH - 0xF4A7: 0x7C48, //CJK UNIFIED IDEOGRAPH - 0xF4A8: 0x7C4A, //CJK UNIFIED IDEOGRAPH - 0xF4A9: 0x7C47, //CJK UNIFIED IDEOGRAPH - 0xF4AA: 0x7C45, //CJK UNIFIED IDEOGRAPH - 0xF4AB: 0x7CEE, //CJK UNIFIED IDEOGRAPH - 0xF4AC: 0x7E7B, //CJK UNIFIED IDEOGRAPH - 0xF4AD: 0x7E7E, //CJK UNIFIED IDEOGRAPH - 0xF4AE: 0x7E81, //CJK UNIFIED IDEOGRAPH - 0xF4AF: 0x7E80, //CJK UNIFIED IDEOGRAPH - 0xF4B0: 0x7FBA, //CJK UNIFIED IDEOGRAPH - 0xF4B1: 0x7FFF, //CJK UNIFIED IDEOGRAPH - 0xF4B2: 0x8079, //CJK UNIFIED IDEOGRAPH - 0xF4B3: 0x81DB, //CJK UNIFIED IDEOGRAPH - 0xF4B4: 0x81D9, //CJK UNIFIED IDEOGRAPH - 0xF4B5: 0x820B, //CJK UNIFIED IDEOGRAPH - 0xF4B6: 0x8268, //CJK UNIFIED IDEOGRAPH - 0xF4B7: 0x8269, //CJK UNIFIED IDEOGRAPH - 0xF4B8: 0x8622, //CJK UNIFIED IDEOGRAPH - 0xF4B9: 0x85FF, //CJK UNIFIED IDEOGRAPH - 0xF4BA: 0x8601, //CJK UNIFIED IDEOGRAPH - 0xF4BB: 0x85FE, //CJK UNIFIED IDEOGRAPH - 0xF4BC: 0x861B, //CJK UNIFIED IDEOGRAPH - 0xF4BD: 0x8600, //CJK UNIFIED IDEOGRAPH - 0xF4BE: 0x85F6, //CJK UNIFIED IDEOGRAPH - 0xF4BF: 0x8604, //CJK UNIFIED IDEOGRAPH - 0xF4C0: 0x8609, //CJK UNIFIED IDEOGRAPH - 0xF4C1: 0x8605, //CJK UNIFIED IDEOGRAPH - 0xF4C2: 0x860C, //CJK UNIFIED IDEOGRAPH - 0xF4C3: 0x85FD, //CJK UNIFIED IDEOGRAPH - 0xF4C4: 0x8819, //CJK UNIFIED IDEOGRAPH - 0xF4C5: 0x8810, //CJK UNIFIED IDEOGRAPH - 0xF4C6: 0x8811, //CJK UNIFIED IDEOGRAPH - 0xF4C7: 0x8817, //CJK UNIFIED IDEOGRAPH - 0xF4C8: 0x8813, //CJK UNIFIED IDEOGRAPH - 0xF4C9: 0x8816, //CJK UNIFIED IDEOGRAPH - 0xF4CA: 0x8963, //CJK UNIFIED IDEOGRAPH - 0xF4CB: 0x8966, //CJK UNIFIED IDEOGRAPH - 0xF4CC: 0x89B9, //CJK UNIFIED IDEOGRAPH - 0xF4CD: 0x89F7, //CJK UNIFIED IDEOGRAPH - 0xF4CE: 0x8B60, //CJK UNIFIED IDEOGRAPH - 0xF4CF: 0x8B6A, //CJK UNIFIED IDEOGRAPH - 0xF4D0: 0x8B5D, //CJK UNIFIED IDEOGRAPH - 0xF4D1: 0x8B68, //CJK UNIFIED IDEOGRAPH - 0xF4D2: 0x8B63, //CJK UNIFIED IDEOGRAPH - 0xF4D3: 0x8B65, //CJK UNIFIED IDEOGRAPH - 0xF4D4: 0x8B67, //CJK UNIFIED IDEOGRAPH - 0xF4D5: 0x8B6D, //CJK UNIFIED IDEOGRAPH - 0xF4D6: 0x8DAE, //CJK UNIFIED IDEOGRAPH - 0xF4D7: 0x8E86, //CJK UNIFIED IDEOGRAPH - 0xF4D8: 0x8E88, //CJK UNIFIED IDEOGRAPH - 0xF4D9: 0x8E84, //CJK UNIFIED IDEOGRAPH - 0xF4DA: 0x8F59, //CJK UNIFIED IDEOGRAPH - 0xF4DB: 0x8F56, //CJK UNIFIED IDEOGRAPH - 0xF4DC: 0x8F57, //CJK UNIFIED IDEOGRAPH - 0xF4DD: 0x8F55, //CJK UNIFIED IDEOGRAPH - 0xF4DE: 0x8F58, //CJK UNIFIED IDEOGRAPH - 0xF4DF: 0x8F5A, //CJK UNIFIED IDEOGRAPH - 0xF4E0: 0x908D, //CJK UNIFIED IDEOGRAPH - 0xF4E1: 0x9143, //CJK UNIFIED IDEOGRAPH - 0xF4E2: 0x9141, //CJK UNIFIED IDEOGRAPH - 0xF4E3: 0x91B7, //CJK UNIFIED IDEOGRAPH - 0xF4E4: 0x91B5, //CJK UNIFIED IDEOGRAPH - 0xF4E5: 0x91B2, //CJK UNIFIED IDEOGRAPH - 0xF4E6: 0x91B3, //CJK UNIFIED IDEOGRAPH - 0xF4E7: 0x940B, //CJK UNIFIED IDEOGRAPH - 0xF4E8: 0x9413, //CJK UNIFIED IDEOGRAPH - 0xF4E9: 0x93FB, //CJK UNIFIED IDEOGRAPH - 0xF4EA: 0x9420, //CJK UNIFIED IDEOGRAPH - 0xF4EB: 0x940F, //CJK UNIFIED IDEOGRAPH - 0xF4EC: 0x9414, //CJK UNIFIED IDEOGRAPH - 0xF4ED: 0x93FE, //CJK UNIFIED IDEOGRAPH - 0xF4EE: 0x9415, //CJK UNIFIED IDEOGRAPH - 0xF4EF: 0x9410, //CJK UNIFIED IDEOGRAPH - 0xF4F0: 0x9428, //CJK UNIFIED IDEOGRAPH - 0xF4F1: 0x9419, //CJK UNIFIED IDEOGRAPH - 0xF4F2: 0x940D, //CJK UNIFIED IDEOGRAPH - 0xF4F3: 0x93F5, //CJK UNIFIED IDEOGRAPH - 0xF4F4: 0x9400, //CJK UNIFIED IDEOGRAPH - 0xF4F5: 0x93F7, //CJK UNIFIED IDEOGRAPH - 0xF4F6: 0x9407, //CJK UNIFIED IDEOGRAPH - 0xF4F7: 0x940E, //CJK UNIFIED IDEOGRAPH - 0xF4F8: 0x9416, //CJK UNIFIED IDEOGRAPH - 0xF4F9: 0x9412, //CJK UNIFIED IDEOGRAPH - 0xF4FA: 0x93FA, //CJK UNIFIED IDEOGRAPH - 0xF4FB: 0x9409, //CJK UNIFIED IDEOGRAPH - 0xF4FC: 0x93F8, //CJK UNIFIED IDEOGRAPH - 0xF4FD: 0x940A, //CJK UNIFIED IDEOGRAPH - 0xF4FE: 0x93FF, //CJK UNIFIED IDEOGRAPH - 0xF540: 0x93FC, //CJK UNIFIED IDEOGRAPH - 0xF541: 0x940C, //CJK UNIFIED IDEOGRAPH - 0xF542: 0x93F6, //CJK UNIFIED IDEOGRAPH - 0xF543: 0x9411, //CJK UNIFIED IDEOGRAPH - 0xF544: 0x9406, //CJK UNIFIED IDEOGRAPH - 0xF545: 0x95DE, //CJK UNIFIED IDEOGRAPH - 0xF546: 0x95E0, //CJK UNIFIED IDEOGRAPH - 0xF547: 0x95DF, //CJK UNIFIED IDEOGRAPH - 0xF548: 0x972E, //CJK UNIFIED IDEOGRAPH - 0xF549: 0x972F, //CJK UNIFIED IDEOGRAPH - 0xF54A: 0x97B9, //CJK UNIFIED IDEOGRAPH - 0xF54B: 0x97BB, //CJK UNIFIED IDEOGRAPH - 0xF54C: 0x97FD, //CJK UNIFIED IDEOGRAPH - 0xF54D: 0x97FE, //CJK UNIFIED IDEOGRAPH - 0xF54E: 0x9860, //CJK UNIFIED IDEOGRAPH - 0xF54F: 0x9862, //CJK UNIFIED IDEOGRAPH - 0xF550: 0x9863, //CJK UNIFIED IDEOGRAPH - 0xF551: 0x985F, //CJK UNIFIED IDEOGRAPH - 0xF552: 0x98C1, //CJK UNIFIED IDEOGRAPH - 0xF553: 0x98C2, //CJK UNIFIED IDEOGRAPH - 0xF554: 0x9950, //CJK UNIFIED IDEOGRAPH - 0xF555: 0x994E, //CJK UNIFIED IDEOGRAPH - 0xF556: 0x9959, //CJK UNIFIED IDEOGRAPH - 0xF557: 0x994C, //CJK UNIFIED IDEOGRAPH - 0xF558: 0x994B, //CJK UNIFIED IDEOGRAPH - 0xF559: 0x9953, //CJK UNIFIED IDEOGRAPH - 0xF55A: 0x9A32, //CJK UNIFIED IDEOGRAPH - 0xF55B: 0x9A34, //CJK UNIFIED IDEOGRAPH - 0xF55C: 0x9A31, //CJK UNIFIED IDEOGRAPH - 0xF55D: 0x9A2C, //CJK UNIFIED IDEOGRAPH - 0xF55E: 0x9A2A, //CJK UNIFIED IDEOGRAPH - 0xF55F: 0x9A36, //CJK UNIFIED IDEOGRAPH - 0xF560: 0x9A29, //CJK UNIFIED IDEOGRAPH - 0xF561: 0x9A2E, //CJK UNIFIED IDEOGRAPH - 0xF562: 0x9A38, //CJK UNIFIED IDEOGRAPH - 0xF563: 0x9A2D, //CJK UNIFIED IDEOGRAPH - 0xF564: 0x9AC7, //CJK UNIFIED IDEOGRAPH - 0xF565: 0x9ACA, //CJK UNIFIED IDEOGRAPH - 0xF566: 0x9AC6, //CJK UNIFIED IDEOGRAPH - 0xF567: 0x9B10, //CJK UNIFIED IDEOGRAPH - 0xF568: 0x9B12, //CJK UNIFIED IDEOGRAPH - 0xF569: 0x9B11, //CJK UNIFIED IDEOGRAPH - 0xF56A: 0x9C0B, //CJK UNIFIED IDEOGRAPH - 0xF56B: 0x9C08, //CJK UNIFIED IDEOGRAPH - 0xF56C: 0x9BF7, //CJK UNIFIED IDEOGRAPH - 0xF56D: 0x9C05, //CJK UNIFIED IDEOGRAPH - 0xF56E: 0x9C12, //CJK UNIFIED IDEOGRAPH - 0xF56F: 0x9BF8, //CJK UNIFIED IDEOGRAPH - 0xF570: 0x9C40, //CJK UNIFIED IDEOGRAPH - 0xF571: 0x9C07, //CJK UNIFIED IDEOGRAPH - 0xF572: 0x9C0E, //CJK UNIFIED IDEOGRAPH - 0xF573: 0x9C06, //CJK UNIFIED IDEOGRAPH - 0xF574: 0x9C17, //CJK UNIFIED IDEOGRAPH - 0xF575: 0x9C14, //CJK UNIFIED IDEOGRAPH - 0xF576: 0x9C09, //CJK UNIFIED IDEOGRAPH - 0xF577: 0x9D9F, //CJK UNIFIED IDEOGRAPH - 0xF578: 0x9D99, //CJK UNIFIED IDEOGRAPH - 0xF579: 0x9DA4, //CJK UNIFIED IDEOGRAPH - 0xF57A: 0x9D9D, //CJK UNIFIED IDEOGRAPH - 0xF57B: 0x9D92, //CJK UNIFIED IDEOGRAPH - 0xF57C: 0x9D98, //CJK UNIFIED IDEOGRAPH - 0xF57D: 0x9D90, //CJK UNIFIED IDEOGRAPH - 0xF57E: 0x9D9B, //CJK UNIFIED IDEOGRAPH - 0xF5A1: 0x9DA0, //CJK UNIFIED IDEOGRAPH - 0xF5A2: 0x9D94, //CJK UNIFIED IDEOGRAPH - 0xF5A3: 0x9D9C, //CJK UNIFIED IDEOGRAPH - 0xF5A4: 0x9DAA, //CJK UNIFIED IDEOGRAPH - 0xF5A5: 0x9D97, //CJK UNIFIED IDEOGRAPH - 0xF5A6: 0x9DA1, //CJK UNIFIED IDEOGRAPH - 0xF5A7: 0x9D9A, //CJK UNIFIED IDEOGRAPH - 0xF5A8: 0x9DA2, //CJK UNIFIED IDEOGRAPH - 0xF5A9: 0x9DA8, //CJK UNIFIED IDEOGRAPH - 0xF5AA: 0x9D9E, //CJK UNIFIED IDEOGRAPH - 0xF5AB: 0x9DA3, //CJK UNIFIED IDEOGRAPH - 0xF5AC: 0x9DBF, //CJK UNIFIED IDEOGRAPH - 0xF5AD: 0x9DA9, //CJK UNIFIED IDEOGRAPH - 0xF5AE: 0x9D96, //CJK UNIFIED IDEOGRAPH - 0xF5AF: 0x9DA6, //CJK UNIFIED IDEOGRAPH - 0xF5B0: 0x9DA7, //CJK UNIFIED IDEOGRAPH - 0xF5B1: 0x9E99, //CJK UNIFIED IDEOGRAPH - 0xF5B2: 0x9E9B, //CJK UNIFIED IDEOGRAPH - 0xF5B3: 0x9E9A, //CJK UNIFIED IDEOGRAPH - 0xF5B4: 0x9EE5, //CJK UNIFIED IDEOGRAPH - 0xF5B5: 0x9EE4, //CJK UNIFIED IDEOGRAPH - 0xF5B6: 0x9EE7, //CJK UNIFIED IDEOGRAPH - 0xF5B7: 0x9EE6, //CJK UNIFIED IDEOGRAPH - 0xF5B8: 0x9F30, //CJK UNIFIED IDEOGRAPH - 0xF5B9: 0x9F2E, //CJK UNIFIED IDEOGRAPH - 0xF5BA: 0x9F5B, //CJK UNIFIED IDEOGRAPH - 0xF5BB: 0x9F60, //CJK UNIFIED IDEOGRAPH - 0xF5BC: 0x9F5E, //CJK UNIFIED IDEOGRAPH - 0xF5BD: 0x9F5D, //CJK UNIFIED IDEOGRAPH - 0xF5BE: 0x9F59, //CJK UNIFIED IDEOGRAPH - 0xF5BF: 0x9F91, //CJK UNIFIED IDEOGRAPH - 0xF5C0: 0x513A, //CJK UNIFIED IDEOGRAPH - 0xF5C1: 0x5139, //CJK UNIFIED IDEOGRAPH - 0xF5C2: 0x5298, //CJK UNIFIED IDEOGRAPH - 0xF5C3: 0x5297, //CJK UNIFIED IDEOGRAPH - 0xF5C4: 0x56C3, //CJK UNIFIED IDEOGRAPH - 0xF5C5: 0x56BD, //CJK UNIFIED IDEOGRAPH - 0xF5C6: 0x56BE, //CJK UNIFIED IDEOGRAPH - 0xF5C7: 0x5B48, //CJK UNIFIED IDEOGRAPH - 0xF5C8: 0x5B47, //CJK UNIFIED IDEOGRAPH - 0xF5C9: 0x5DCB, //CJK UNIFIED IDEOGRAPH - 0xF5CA: 0x5DCF, //CJK UNIFIED IDEOGRAPH - 0xF5CB: 0x5EF1, //CJK UNIFIED IDEOGRAPH - 0xF5CC: 0x61FD, //CJK UNIFIED IDEOGRAPH - 0xF5CD: 0x651B, //CJK UNIFIED IDEOGRAPH - 0xF5CE: 0x6B02, //CJK UNIFIED IDEOGRAPH - 0xF5CF: 0x6AFC, //CJK UNIFIED IDEOGRAPH - 0xF5D0: 0x6B03, //CJK UNIFIED IDEOGRAPH - 0xF5D1: 0x6AF8, //CJK UNIFIED IDEOGRAPH - 0xF5D2: 0x6B00, //CJK UNIFIED IDEOGRAPH - 0xF5D3: 0x7043, //CJK UNIFIED IDEOGRAPH - 0xF5D4: 0x7044, //CJK UNIFIED IDEOGRAPH - 0xF5D5: 0x704A, //CJK UNIFIED IDEOGRAPH - 0xF5D6: 0x7048, //CJK UNIFIED IDEOGRAPH - 0xF5D7: 0x7049, //CJK UNIFIED IDEOGRAPH - 0xF5D8: 0x7045, //CJK UNIFIED IDEOGRAPH - 0xF5D9: 0x7046, //CJK UNIFIED IDEOGRAPH - 0xF5DA: 0x721D, //CJK UNIFIED IDEOGRAPH - 0xF5DB: 0x721A, //CJK UNIFIED IDEOGRAPH - 0xF5DC: 0x7219, //CJK UNIFIED IDEOGRAPH - 0xF5DD: 0x737E, //CJK UNIFIED IDEOGRAPH - 0xF5DE: 0x7517, //CJK UNIFIED IDEOGRAPH - 0xF5DF: 0x766A, //CJK UNIFIED IDEOGRAPH - 0xF5E0: 0x77D0, //CJK UNIFIED IDEOGRAPH - 0xF5E1: 0x792D, //CJK UNIFIED IDEOGRAPH - 0xF5E2: 0x7931, //CJK UNIFIED IDEOGRAPH - 0xF5E3: 0x792F, //CJK UNIFIED IDEOGRAPH - 0xF5E4: 0x7C54, //CJK UNIFIED IDEOGRAPH - 0xF5E5: 0x7C53, //CJK UNIFIED IDEOGRAPH - 0xF5E6: 0x7CF2, //CJK UNIFIED IDEOGRAPH - 0xF5E7: 0x7E8A, //CJK UNIFIED IDEOGRAPH - 0xF5E8: 0x7E87, //CJK UNIFIED IDEOGRAPH - 0xF5E9: 0x7E88, //CJK UNIFIED IDEOGRAPH - 0xF5EA: 0x7E8B, //CJK UNIFIED IDEOGRAPH - 0xF5EB: 0x7E86, //CJK UNIFIED IDEOGRAPH - 0xF5EC: 0x7E8D, //CJK UNIFIED IDEOGRAPH - 0xF5ED: 0x7F4D, //CJK UNIFIED IDEOGRAPH - 0xF5EE: 0x7FBB, //CJK UNIFIED IDEOGRAPH - 0xF5EF: 0x8030, //CJK UNIFIED IDEOGRAPH - 0xF5F0: 0x81DD, //CJK UNIFIED IDEOGRAPH - 0xF5F1: 0x8618, //CJK UNIFIED IDEOGRAPH - 0xF5F2: 0x862A, //CJK UNIFIED IDEOGRAPH - 0xF5F3: 0x8626, //CJK UNIFIED IDEOGRAPH - 0xF5F4: 0x861F, //CJK UNIFIED IDEOGRAPH - 0xF5F5: 0x8623, //CJK UNIFIED IDEOGRAPH - 0xF5F6: 0x861C, //CJK UNIFIED IDEOGRAPH - 0xF5F7: 0x8619, //CJK UNIFIED IDEOGRAPH - 0xF5F8: 0x8627, //CJK UNIFIED IDEOGRAPH - 0xF5F9: 0x862E, //CJK UNIFIED IDEOGRAPH - 0xF5FA: 0x8621, //CJK UNIFIED IDEOGRAPH - 0xF5FB: 0x8620, //CJK UNIFIED IDEOGRAPH - 0xF5FC: 0x8629, //CJK UNIFIED IDEOGRAPH - 0xF5FD: 0x861E, //CJK UNIFIED IDEOGRAPH - 0xF5FE: 0x8625, //CJK UNIFIED IDEOGRAPH - 0xF640: 0x8829, //CJK UNIFIED IDEOGRAPH - 0xF641: 0x881D, //CJK UNIFIED IDEOGRAPH - 0xF642: 0x881B, //CJK UNIFIED IDEOGRAPH - 0xF643: 0x8820, //CJK UNIFIED IDEOGRAPH - 0xF644: 0x8824, //CJK UNIFIED IDEOGRAPH - 0xF645: 0x881C, //CJK UNIFIED IDEOGRAPH - 0xF646: 0x882B, //CJK UNIFIED IDEOGRAPH - 0xF647: 0x884A, //CJK UNIFIED IDEOGRAPH - 0xF648: 0x896D, //CJK UNIFIED IDEOGRAPH - 0xF649: 0x8969, //CJK UNIFIED IDEOGRAPH - 0xF64A: 0x896E, //CJK UNIFIED IDEOGRAPH - 0xF64B: 0x896B, //CJK UNIFIED IDEOGRAPH - 0xF64C: 0x89FA, //CJK UNIFIED IDEOGRAPH - 0xF64D: 0x8B79, //CJK UNIFIED IDEOGRAPH - 0xF64E: 0x8B78, //CJK UNIFIED IDEOGRAPH - 0xF64F: 0x8B45, //CJK UNIFIED IDEOGRAPH - 0xF650: 0x8B7A, //CJK UNIFIED IDEOGRAPH - 0xF651: 0x8B7B, //CJK UNIFIED IDEOGRAPH - 0xF652: 0x8D10, //CJK UNIFIED IDEOGRAPH - 0xF653: 0x8D14, //CJK UNIFIED IDEOGRAPH - 0xF654: 0x8DAF, //CJK UNIFIED IDEOGRAPH - 0xF655: 0x8E8E, //CJK UNIFIED IDEOGRAPH - 0xF656: 0x8E8C, //CJK UNIFIED IDEOGRAPH - 0xF657: 0x8F5E, //CJK UNIFIED IDEOGRAPH - 0xF658: 0x8F5B, //CJK UNIFIED IDEOGRAPH - 0xF659: 0x8F5D, //CJK UNIFIED IDEOGRAPH - 0xF65A: 0x9146, //CJK UNIFIED IDEOGRAPH - 0xF65B: 0x9144, //CJK UNIFIED IDEOGRAPH - 0xF65C: 0x9145, //CJK UNIFIED IDEOGRAPH - 0xF65D: 0x91B9, //CJK UNIFIED IDEOGRAPH - 0xF65E: 0x943F, //CJK UNIFIED IDEOGRAPH - 0xF65F: 0x943B, //CJK UNIFIED IDEOGRAPH - 0xF660: 0x9436, //CJK UNIFIED IDEOGRAPH - 0xF661: 0x9429, //CJK UNIFIED IDEOGRAPH - 0xF662: 0x943D, //CJK UNIFIED IDEOGRAPH - 0xF663: 0x943C, //CJK UNIFIED IDEOGRAPH - 0xF664: 0x9430, //CJK UNIFIED IDEOGRAPH - 0xF665: 0x9439, //CJK UNIFIED IDEOGRAPH - 0xF666: 0x942A, //CJK UNIFIED IDEOGRAPH - 0xF667: 0x9437, //CJK UNIFIED IDEOGRAPH - 0xF668: 0x942C, //CJK UNIFIED IDEOGRAPH - 0xF669: 0x9440, //CJK UNIFIED IDEOGRAPH - 0xF66A: 0x9431, //CJK UNIFIED IDEOGRAPH - 0xF66B: 0x95E5, //CJK UNIFIED IDEOGRAPH - 0xF66C: 0x95E4, //CJK UNIFIED IDEOGRAPH - 0xF66D: 0x95E3, //CJK UNIFIED IDEOGRAPH - 0xF66E: 0x9735, //CJK UNIFIED IDEOGRAPH - 0xF66F: 0x973A, //CJK UNIFIED IDEOGRAPH - 0xF670: 0x97BF, //CJK UNIFIED IDEOGRAPH - 0xF671: 0x97E1, //CJK UNIFIED IDEOGRAPH - 0xF672: 0x9864, //CJK UNIFIED IDEOGRAPH - 0xF673: 0x98C9, //CJK UNIFIED IDEOGRAPH - 0xF674: 0x98C6, //CJK UNIFIED IDEOGRAPH - 0xF675: 0x98C0, //CJK UNIFIED IDEOGRAPH - 0xF676: 0x9958, //CJK UNIFIED IDEOGRAPH - 0xF677: 0x9956, //CJK UNIFIED IDEOGRAPH - 0xF678: 0x9A39, //CJK UNIFIED IDEOGRAPH - 0xF679: 0x9A3D, //CJK UNIFIED IDEOGRAPH - 0xF67A: 0x9A46, //CJK UNIFIED IDEOGRAPH - 0xF67B: 0x9A44, //CJK UNIFIED IDEOGRAPH - 0xF67C: 0x9A42, //CJK UNIFIED IDEOGRAPH - 0xF67D: 0x9A41, //CJK UNIFIED IDEOGRAPH - 0xF67E: 0x9A3A, //CJK UNIFIED IDEOGRAPH - 0xF6A1: 0x9A3F, //CJK UNIFIED IDEOGRAPH - 0xF6A2: 0x9ACD, //CJK UNIFIED IDEOGRAPH - 0xF6A3: 0x9B15, //CJK UNIFIED IDEOGRAPH - 0xF6A4: 0x9B17, //CJK UNIFIED IDEOGRAPH - 0xF6A5: 0x9B18, //CJK UNIFIED IDEOGRAPH - 0xF6A6: 0x9B16, //CJK UNIFIED IDEOGRAPH - 0xF6A7: 0x9B3A, //CJK UNIFIED IDEOGRAPH - 0xF6A8: 0x9B52, //CJK UNIFIED IDEOGRAPH - 0xF6A9: 0x9C2B, //CJK UNIFIED IDEOGRAPH - 0xF6AA: 0x9C1D, //CJK UNIFIED IDEOGRAPH - 0xF6AB: 0x9C1C, //CJK UNIFIED IDEOGRAPH - 0xF6AC: 0x9C2C, //CJK UNIFIED IDEOGRAPH - 0xF6AD: 0x9C23, //CJK UNIFIED IDEOGRAPH - 0xF6AE: 0x9C28, //CJK UNIFIED IDEOGRAPH - 0xF6AF: 0x9C29, //CJK UNIFIED IDEOGRAPH - 0xF6B0: 0x9C24, //CJK UNIFIED IDEOGRAPH - 0xF6B1: 0x9C21, //CJK UNIFIED IDEOGRAPH - 0xF6B2: 0x9DB7, //CJK UNIFIED IDEOGRAPH - 0xF6B3: 0x9DB6, //CJK UNIFIED IDEOGRAPH - 0xF6B4: 0x9DBC, //CJK UNIFIED IDEOGRAPH - 0xF6B5: 0x9DC1, //CJK UNIFIED IDEOGRAPH - 0xF6B6: 0x9DC7, //CJK UNIFIED IDEOGRAPH - 0xF6B7: 0x9DCA, //CJK UNIFIED IDEOGRAPH - 0xF6B8: 0x9DCF, //CJK UNIFIED IDEOGRAPH - 0xF6B9: 0x9DBE, //CJK UNIFIED IDEOGRAPH - 0xF6BA: 0x9DC5, //CJK UNIFIED IDEOGRAPH - 0xF6BB: 0x9DC3, //CJK UNIFIED IDEOGRAPH - 0xF6BC: 0x9DBB, //CJK UNIFIED IDEOGRAPH - 0xF6BD: 0x9DB5, //CJK UNIFIED IDEOGRAPH - 0xF6BE: 0x9DCE, //CJK UNIFIED IDEOGRAPH - 0xF6BF: 0x9DB9, //CJK UNIFIED IDEOGRAPH - 0xF6C0: 0x9DBA, //CJK UNIFIED IDEOGRAPH - 0xF6C1: 0x9DAC, //CJK UNIFIED IDEOGRAPH - 0xF6C2: 0x9DC8, //CJK UNIFIED IDEOGRAPH - 0xF6C3: 0x9DB1, //CJK UNIFIED IDEOGRAPH - 0xF6C4: 0x9DAD, //CJK UNIFIED IDEOGRAPH - 0xF6C5: 0x9DCC, //CJK UNIFIED IDEOGRAPH - 0xF6C6: 0x9DB3, //CJK UNIFIED IDEOGRAPH - 0xF6C7: 0x9DCD, //CJK UNIFIED IDEOGRAPH - 0xF6C8: 0x9DB2, //CJK UNIFIED IDEOGRAPH - 0xF6C9: 0x9E7A, //CJK UNIFIED IDEOGRAPH - 0xF6CA: 0x9E9C, //CJK UNIFIED IDEOGRAPH - 0xF6CB: 0x9EEB, //CJK UNIFIED IDEOGRAPH - 0xF6CC: 0x9EEE, //CJK UNIFIED IDEOGRAPH - 0xF6CD: 0x9EED, //CJK UNIFIED IDEOGRAPH - 0xF6CE: 0x9F1B, //CJK UNIFIED IDEOGRAPH - 0xF6CF: 0x9F18, //CJK UNIFIED IDEOGRAPH - 0xF6D0: 0x9F1A, //CJK UNIFIED IDEOGRAPH - 0xF6D1: 0x9F31, //CJK UNIFIED IDEOGRAPH - 0xF6D2: 0x9F4E, //CJK UNIFIED IDEOGRAPH - 0xF6D3: 0x9F65, //CJK UNIFIED IDEOGRAPH - 0xF6D4: 0x9F64, //CJK UNIFIED IDEOGRAPH - 0xF6D5: 0x9F92, //CJK UNIFIED IDEOGRAPH - 0xF6D6: 0x4EB9, //CJK UNIFIED IDEOGRAPH - 0xF6D7: 0x56C6, //CJK UNIFIED IDEOGRAPH - 0xF6D8: 0x56C5, //CJK UNIFIED IDEOGRAPH - 0xF6D9: 0x56CB, //CJK UNIFIED IDEOGRAPH - 0xF6DA: 0x5971, //CJK UNIFIED IDEOGRAPH - 0xF6DB: 0x5B4B, //CJK UNIFIED IDEOGRAPH - 0xF6DC: 0x5B4C, //CJK UNIFIED IDEOGRAPH - 0xF6DD: 0x5DD5, //CJK UNIFIED IDEOGRAPH - 0xF6DE: 0x5DD1, //CJK UNIFIED IDEOGRAPH - 0xF6DF: 0x5EF2, //CJK UNIFIED IDEOGRAPH - 0xF6E0: 0x6521, //CJK UNIFIED IDEOGRAPH - 0xF6E1: 0x6520, //CJK UNIFIED IDEOGRAPH - 0xF6E2: 0x6526, //CJK UNIFIED IDEOGRAPH - 0xF6E3: 0x6522, //CJK UNIFIED IDEOGRAPH - 0xF6E4: 0x6B0B, //CJK UNIFIED IDEOGRAPH - 0xF6E5: 0x6B08, //CJK UNIFIED IDEOGRAPH - 0xF6E6: 0x6B09, //CJK UNIFIED IDEOGRAPH - 0xF6E7: 0x6C0D, //CJK UNIFIED IDEOGRAPH - 0xF6E8: 0x7055, //CJK UNIFIED IDEOGRAPH - 0xF6E9: 0x7056, //CJK UNIFIED IDEOGRAPH - 0xF6EA: 0x7057, //CJK UNIFIED IDEOGRAPH - 0xF6EB: 0x7052, //CJK UNIFIED IDEOGRAPH - 0xF6EC: 0x721E, //CJK UNIFIED IDEOGRAPH - 0xF6ED: 0x721F, //CJK UNIFIED IDEOGRAPH - 0xF6EE: 0x72A9, //CJK UNIFIED IDEOGRAPH - 0xF6EF: 0x737F, //CJK UNIFIED IDEOGRAPH - 0xF6F0: 0x74D8, //CJK UNIFIED IDEOGRAPH - 0xF6F1: 0x74D5, //CJK UNIFIED IDEOGRAPH - 0xF6F2: 0x74D9, //CJK UNIFIED IDEOGRAPH - 0xF6F3: 0x74D7, //CJK UNIFIED IDEOGRAPH - 0xF6F4: 0x766D, //CJK UNIFIED IDEOGRAPH - 0xF6F5: 0x76AD, //CJK UNIFIED IDEOGRAPH - 0xF6F6: 0x7935, //CJK UNIFIED IDEOGRAPH - 0xF6F7: 0x79B4, //CJK UNIFIED IDEOGRAPH - 0xF6F8: 0x7A70, //CJK UNIFIED IDEOGRAPH - 0xF6F9: 0x7A71, //CJK UNIFIED IDEOGRAPH - 0xF6FA: 0x7C57, //CJK UNIFIED IDEOGRAPH - 0xF6FB: 0x7C5C, //CJK UNIFIED IDEOGRAPH - 0xF6FC: 0x7C59, //CJK UNIFIED IDEOGRAPH - 0xF6FD: 0x7C5B, //CJK UNIFIED IDEOGRAPH - 0xF6FE: 0x7C5A, //CJK UNIFIED IDEOGRAPH - 0xF740: 0x7CF4, //CJK UNIFIED IDEOGRAPH - 0xF741: 0x7CF1, //CJK UNIFIED IDEOGRAPH - 0xF742: 0x7E91, //CJK UNIFIED IDEOGRAPH - 0xF743: 0x7F4F, //CJK UNIFIED IDEOGRAPH - 0xF744: 0x7F87, //CJK UNIFIED IDEOGRAPH - 0xF745: 0x81DE, //CJK UNIFIED IDEOGRAPH - 0xF746: 0x826B, //CJK UNIFIED IDEOGRAPH - 0xF747: 0x8634, //CJK UNIFIED IDEOGRAPH - 0xF748: 0x8635, //CJK UNIFIED IDEOGRAPH - 0xF749: 0x8633, //CJK UNIFIED IDEOGRAPH - 0xF74A: 0x862C, //CJK UNIFIED IDEOGRAPH - 0xF74B: 0x8632, //CJK UNIFIED IDEOGRAPH - 0xF74C: 0x8636, //CJK UNIFIED IDEOGRAPH - 0xF74D: 0x882C, //CJK UNIFIED IDEOGRAPH - 0xF74E: 0x8828, //CJK UNIFIED IDEOGRAPH - 0xF74F: 0x8826, //CJK UNIFIED IDEOGRAPH - 0xF750: 0x882A, //CJK UNIFIED IDEOGRAPH - 0xF751: 0x8825, //CJK UNIFIED IDEOGRAPH - 0xF752: 0x8971, //CJK UNIFIED IDEOGRAPH - 0xF753: 0x89BF, //CJK UNIFIED IDEOGRAPH - 0xF754: 0x89BE, //CJK UNIFIED IDEOGRAPH - 0xF755: 0x89FB, //CJK UNIFIED IDEOGRAPH - 0xF756: 0x8B7E, //CJK UNIFIED IDEOGRAPH - 0xF757: 0x8B84, //CJK UNIFIED IDEOGRAPH - 0xF758: 0x8B82, //CJK UNIFIED IDEOGRAPH - 0xF759: 0x8B86, //CJK UNIFIED IDEOGRAPH - 0xF75A: 0x8B85, //CJK UNIFIED IDEOGRAPH - 0xF75B: 0x8B7F, //CJK UNIFIED IDEOGRAPH - 0xF75C: 0x8D15, //CJK UNIFIED IDEOGRAPH - 0xF75D: 0x8E95, //CJK UNIFIED IDEOGRAPH - 0xF75E: 0x8E94, //CJK UNIFIED IDEOGRAPH - 0xF75F: 0x8E9A, //CJK UNIFIED IDEOGRAPH - 0xF760: 0x8E92, //CJK UNIFIED IDEOGRAPH - 0xF761: 0x8E90, //CJK UNIFIED IDEOGRAPH - 0xF762: 0x8E96, //CJK UNIFIED IDEOGRAPH - 0xF763: 0x8E97, //CJK UNIFIED IDEOGRAPH - 0xF764: 0x8F60, //CJK UNIFIED IDEOGRAPH - 0xF765: 0x8F62, //CJK UNIFIED IDEOGRAPH - 0xF766: 0x9147, //CJK UNIFIED IDEOGRAPH - 0xF767: 0x944C, //CJK UNIFIED IDEOGRAPH - 0xF768: 0x9450, //CJK UNIFIED IDEOGRAPH - 0xF769: 0x944A, //CJK UNIFIED IDEOGRAPH - 0xF76A: 0x944B, //CJK UNIFIED IDEOGRAPH - 0xF76B: 0x944F, //CJK UNIFIED IDEOGRAPH - 0xF76C: 0x9447, //CJK UNIFIED IDEOGRAPH - 0xF76D: 0x9445, //CJK UNIFIED IDEOGRAPH - 0xF76E: 0x9448, //CJK UNIFIED IDEOGRAPH - 0xF76F: 0x9449, //CJK UNIFIED IDEOGRAPH - 0xF770: 0x9446, //CJK UNIFIED IDEOGRAPH - 0xF771: 0x973F, //CJK UNIFIED IDEOGRAPH - 0xF772: 0x97E3, //CJK UNIFIED IDEOGRAPH - 0xF773: 0x986A, //CJK UNIFIED IDEOGRAPH - 0xF774: 0x9869, //CJK UNIFIED IDEOGRAPH - 0xF775: 0x98CB, //CJK UNIFIED IDEOGRAPH - 0xF776: 0x9954, //CJK UNIFIED IDEOGRAPH - 0xF777: 0x995B, //CJK UNIFIED IDEOGRAPH - 0xF778: 0x9A4E, //CJK UNIFIED IDEOGRAPH - 0xF779: 0x9A53, //CJK UNIFIED IDEOGRAPH - 0xF77A: 0x9A54, //CJK UNIFIED IDEOGRAPH - 0xF77B: 0x9A4C, //CJK UNIFIED IDEOGRAPH - 0xF77C: 0x9A4F, //CJK UNIFIED IDEOGRAPH - 0xF77D: 0x9A48, //CJK UNIFIED IDEOGRAPH - 0xF77E: 0x9A4A, //CJK UNIFIED IDEOGRAPH - 0xF7A1: 0x9A49, //CJK UNIFIED IDEOGRAPH - 0xF7A2: 0x9A52, //CJK UNIFIED IDEOGRAPH - 0xF7A3: 0x9A50, //CJK UNIFIED IDEOGRAPH - 0xF7A4: 0x9AD0, //CJK UNIFIED IDEOGRAPH - 0xF7A5: 0x9B19, //CJK UNIFIED IDEOGRAPH - 0xF7A6: 0x9B2B, //CJK UNIFIED IDEOGRAPH - 0xF7A7: 0x9B3B, //CJK UNIFIED IDEOGRAPH - 0xF7A8: 0x9B56, //CJK UNIFIED IDEOGRAPH - 0xF7A9: 0x9B55, //CJK UNIFIED IDEOGRAPH - 0xF7AA: 0x9C46, //CJK UNIFIED IDEOGRAPH - 0xF7AB: 0x9C48, //CJK UNIFIED IDEOGRAPH - 0xF7AC: 0x9C3F, //CJK UNIFIED IDEOGRAPH - 0xF7AD: 0x9C44, //CJK UNIFIED IDEOGRAPH - 0xF7AE: 0x9C39, //CJK UNIFIED IDEOGRAPH - 0xF7AF: 0x9C33, //CJK UNIFIED IDEOGRAPH - 0xF7B0: 0x9C41, //CJK UNIFIED IDEOGRAPH - 0xF7B1: 0x9C3C, //CJK UNIFIED IDEOGRAPH - 0xF7B2: 0x9C37, //CJK UNIFIED IDEOGRAPH - 0xF7B3: 0x9C34, //CJK UNIFIED IDEOGRAPH - 0xF7B4: 0x9C32, //CJK UNIFIED IDEOGRAPH - 0xF7B5: 0x9C3D, //CJK UNIFIED IDEOGRAPH - 0xF7B6: 0x9C36, //CJK UNIFIED IDEOGRAPH - 0xF7B7: 0x9DDB, //CJK UNIFIED IDEOGRAPH - 0xF7B8: 0x9DD2, //CJK UNIFIED IDEOGRAPH - 0xF7B9: 0x9DDE, //CJK UNIFIED IDEOGRAPH - 0xF7BA: 0x9DDA, //CJK UNIFIED IDEOGRAPH - 0xF7BB: 0x9DCB, //CJK UNIFIED IDEOGRAPH - 0xF7BC: 0x9DD0, //CJK UNIFIED IDEOGRAPH - 0xF7BD: 0x9DDC, //CJK UNIFIED IDEOGRAPH - 0xF7BE: 0x9DD1, //CJK UNIFIED IDEOGRAPH - 0xF7BF: 0x9DDF, //CJK UNIFIED IDEOGRAPH - 0xF7C0: 0x9DE9, //CJK UNIFIED IDEOGRAPH - 0xF7C1: 0x9DD9, //CJK UNIFIED IDEOGRAPH - 0xF7C2: 0x9DD8, //CJK UNIFIED IDEOGRAPH - 0xF7C3: 0x9DD6, //CJK UNIFIED IDEOGRAPH - 0xF7C4: 0x9DF5, //CJK UNIFIED IDEOGRAPH - 0xF7C5: 0x9DD5, //CJK UNIFIED IDEOGRAPH - 0xF7C6: 0x9DDD, //CJK UNIFIED IDEOGRAPH - 0xF7C7: 0x9EB6, //CJK UNIFIED IDEOGRAPH - 0xF7C8: 0x9EF0, //CJK UNIFIED IDEOGRAPH - 0xF7C9: 0x9F35, //CJK UNIFIED IDEOGRAPH - 0xF7CA: 0x9F33, //CJK UNIFIED IDEOGRAPH - 0xF7CB: 0x9F32, //CJK UNIFIED IDEOGRAPH - 0xF7CC: 0x9F42, //CJK UNIFIED IDEOGRAPH - 0xF7CD: 0x9F6B, //CJK UNIFIED IDEOGRAPH - 0xF7CE: 0x9F95, //CJK UNIFIED IDEOGRAPH - 0xF7CF: 0x9FA2, //CJK UNIFIED IDEOGRAPH - 0xF7D0: 0x513D, //CJK UNIFIED IDEOGRAPH - 0xF7D1: 0x5299, //CJK UNIFIED IDEOGRAPH - 0xF7D2: 0x58E8, //CJK UNIFIED IDEOGRAPH - 0xF7D3: 0x58E7, //CJK UNIFIED IDEOGRAPH - 0xF7D4: 0x5972, //CJK UNIFIED IDEOGRAPH - 0xF7D5: 0x5B4D, //CJK UNIFIED IDEOGRAPH - 0xF7D6: 0x5DD8, //CJK UNIFIED IDEOGRAPH - 0xF7D7: 0x882F, //CJK UNIFIED IDEOGRAPH - 0xF7D8: 0x5F4F, //CJK UNIFIED IDEOGRAPH - 0xF7D9: 0x6201, //CJK UNIFIED IDEOGRAPH - 0xF7DA: 0x6203, //CJK UNIFIED IDEOGRAPH - 0xF7DB: 0x6204, //CJK UNIFIED IDEOGRAPH - 0xF7DC: 0x6529, //CJK UNIFIED IDEOGRAPH - 0xF7DD: 0x6525, //CJK UNIFIED IDEOGRAPH - 0xF7DE: 0x6596, //CJK UNIFIED IDEOGRAPH - 0xF7DF: 0x66EB, //CJK UNIFIED IDEOGRAPH - 0xF7E0: 0x6B11, //CJK UNIFIED IDEOGRAPH - 0xF7E1: 0x6B12, //CJK UNIFIED IDEOGRAPH - 0xF7E2: 0x6B0F, //CJK UNIFIED IDEOGRAPH - 0xF7E3: 0x6BCA, //CJK UNIFIED IDEOGRAPH - 0xF7E4: 0x705B, //CJK UNIFIED IDEOGRAPH - 0xF7E5: 0x705A, //CJK UNIFIED IDEOGRAPH - 0xF7E6: 0x7222, //CJK UNIFIED IDEOGRAPH - 0xF7E7: 0x7382, //CJK UNIFIED IDEOGRAPH - 0xF7E8: 0x7381, //CJK UNIFIED IDEOGRAPH - 0xF7E9: 0x7383, //CJK UNIFIED IDEOGRAPH - 0xF7EA: 0x7670, //CJK UNIFIED IDEOGRAPH - 0xF7EB: 0x77D4, //CJK UNIFIED IDEOGRAPH - 0xF7EC: 0x7C67, //CJK UNIFIED IDEOGRAPH - 0xF7ED: 0x7C66, //CJK UNIFIED IDEOGRAPH - 0xF7EE: 0x7E95, //CJK UNIFIED IDEOGRAPH - 0xF7EF: 0x826C, //CJK UNIFIED IDEOGRAPH - 0xF7F0: 0x863A, //CJK UNIFIED IDEOGRAPH - 0xF7F1: 0x8640, //CJK UNIFIED IDEOGRAPH - 0xF7F2: 0x8639, //CJK UNIFIED IDEOGRAPH - 0xF7F3: 0x863C, //CJK UNIFIED IDEOGRAPH - 0xF7F4: 0x8631, //CJK UNIFIED IDEOGRAPH - 0xF7F5: 0x863B, //CJK UNIFIED IDEOGRAPH - 0xF7F6: 0x863E, //CJK UNIFIED IDEOGRAPH - 0xF7F7: 0x8830, //CJK UNIFIED IDEOGRAPH - 0xF7F8: 0x8832, //CJK UNIFIED IDEOGRAPH - 0xF7F9: 0x882E, //CJK UNIFIED IDEOGRAPH - 0xF7FA: 0x8833, //CJK UNIFIED IDEOGRAPH - 0xF7FB: 0x8976, //CJK UNIFIED IDEOGRAPH - 0xF7FC: 0x8974, //CJK UNIFIED IDEOGRAPH - 0xF7FD: 0x8973, //CJK UNIFIED IDEOGRAPH - 0xF7FE: 0x89FE, //CJK UNIFIED IDEOGRAPH - 0xF840: 0x8B8C, //CJK UNIFIED IDEOGRAPH - 0xF841: 0x8B8E, //CJK UNIFIED IDEOGRAPH - 0xF842: 0x8B8B, //CJK UNIFIED IDEOGRAPH - 0xF843: 0x8B88, //CJK UNIFIED IDEOGRAPH - 0xF844: 0x8C45, //CJK UNIFIED IDEOGRAPH - 0xF845: 0x8D19, //CJK UNIFIED IDEOGRAPH - 0xF846: 0x8E98, //CJK UNIFIED IDEOGRAPH - 0xF847: 0x8F64, //CJK UNIFIED IDEOGRAPH - 0xF848: 0x8F63, //CJK UNIFIED IDEOGRAPH - 0xF849: 0x91BC, //CJK UNIFIED IDEOGRAPH - 0xF84A: 0x9462, //CJK UNIFIED IDEOGRAPH - 0xF84B: 0x9455, //CJK UNIFIED IDEOGRAPH - 0xF84C: 0x945D, //CJK UNIFIED IDEOGRAPH - 0xF84D: 0x9457, //CJK UNIFIED IDEOGRAPH - 0xF84E: 0x945E, //CJK UNIFIED IDEOGRAPH - 0xF84F: 0x97C4, //CJK UNIFIED IDEOGRAPH - 0xF850: 0x97C5, //CJK UNIFIED IDEOGRAPH - 0xF851: 0x9800, //CJK UNIFIED IDEOGRAPH - 0xF852: 0x9A56, //CJK UNIFIED IDEOGRAPH - 0xF853: 0x9A59, //CJK UNIFIED IDEOGRAPH - 0xF854: 0x9B1E, //CJK UNIFIED IDEOGRAPH - 0xF855: 0x9B1F, //CJK UNIFIED IDEOGRAPH - 0xF856: 0x9B20, //CJK UNIFIED IDEOGRAPH - 0xF857: 0x9C52, //CJK UNIFIED IDEOGRAPH - 0xF858: 0x9C58, //CJK UNIFIED IDEOGRAPH - 0xF859: 0x9C50, //CJK UNIFIED IDEOGRAPH - 0xF85A: 0x9C4A, //CJK UNIFIED IDEOGRAPH - 0xF85B: 0x9C4D, //CJK UNIFIED IDEOGRAPH - 0xF85C: 0x9C4B, //CJK UNIFIED IDEOGRAPH - 0xF85D: 0x9C55, //CJK UNIFIED IDEOGRAPH - 0xF85E: 0x9C59, //CJK UNIFIED IDEOGRAPH - 0xF85F: 0x9C4C, //CJK UNIFIED IDEOGRAPH - 0xF860: 0x9C4E, //CJK UNIFIED IDEOGRAPH - 0xF861: 0x9DFB, //CJK UNIFIED IDEOGRAPH - 0xF862: 0x9DF7, //CJK UNIFIED IDEOGRAPH - 0xF863: 0x9DEF, //CJK UNIFIED IDEOGRAPH - 0xF864: 0x9DE3, //CJK UNIFIED IDEOGRAPH - 0xF865: 0x9DEB, //CJK UNIFIED IDEOGRAPH - 0xF866: 0x9DF8, //CJK UNIFIED IDEOGRAPH - 0xF867: 0x9DE4, //CJK UNIFIED IDEOGRAPH - 0xF868: 0x9DF6, //CJK UNIFIED IDEOGRAPH - 0xF869: 0x9DE1, //CJK UNIFIED IDEOGRAPH - 0xF86A: 0x9DEE, //CJK UNIFIED IDEOGRAPH - 0xF86B: 0x9DE6, //CJK UNIFIED IDEOGRAPH - 0xF86C: 0x9DF2, //CJK UNIFIED IDEOGRAPH - 0xF86D: 0x9DF0, //CJK UNIFIED IDEOGRAPH - 0xF86E: 0x9DE2, //CJK UNIFIED IDEOGRAPH - 0xF86F: 0x9DEC, //CJK UNIFIED IDEOGRAPH - 0xF870: 0x9DF4, //CJK UNIFIED IDEOGRAPH - 0xF871: 0x9DF3, //CJK UNIFIED IDEOGRAPH - 0xF872: 0x9DE8, //CJK UNIFIED IDEOGRAPH - 0xF873: 0x9DED, //CJK UNIFIED IDEOGRAPH - 0xF874: 0x9EC2, //CJK UNIFIED IDEOGRAPH - 0xF875: 0x9ED0, //CJK UNIFIED IDEOGRAPH - 0xF876: 0x9EF2, //CJK UNIFIED IDEOGRAPH - 0xF877: 0x9EF3, //CJK UNIFIED IDEOGRAPH - 0xF878: 0x9F06, //CJK UNIFIED IDEOGRAPH - 0xF879: 0x9F1C, //CJK UNIFIED IDEOGRAPH - 0xF87A: 0x9F38, //CJK UNIFIED IDEOGRAPH - 0xF87B: 0x9F37, //CJK UNIFIED IDEOGRAPH - 0xF87C: 0x9F36, //CJK UNIFIED IDEOGRAPH - 0xF87D: 0x9F43, //CJK UNIFIED IDEOGRAPH - 0xF87E: 0x9F4F, //CJK UNIFIED IDEOGRAPH - 0xF8A1: 0x9F71, //CJK UNIFIED IDEOGRAPH - 0xF8A2: 0x9F70, //CJK UNIFIED IDEOGRAPH - 0xF8A3: 0x9F6E, //CJK UNIFIED IDEOGRAPH - 0xF8A4: 0x9F6F, //CJK UNIFIED IDEOGRAPH - 0xF8A5: 0x56D3, //CJK UNIFIED IDEOGRAPH - 0xF8A6: 0x56CD, //CJK UNIFIED IDEOGRAPH - 0xF8A7: 0x5B4E, //CJK UNIFIED IDEOGRAPH - 0xF8A8: 0x5C6D, //CJK UNIFIED IDEOGRAPH - 0xF8A9: 0x652D, //CJK UNIFIED IDEOGRAPH - 0xF8AA: 0x66ED, //CJK UNIFIED IDEOGRAPH - 0xF8AB: 0x66EE, //CJK UNIFIED IDEOGRAPH - 0xF8AC: 0x6B13, //CJK UNIFIED IDEOGRAPH - 0xF8AD: 0x705F, //CJK UNIFIED IDEOGRAPH - 0xF8AE: 0x7061, //CJK UNIFIED IDEOGRAPH - 0xF8AF: 0x705D, //CJK UNIFIED IDEOGRAPH - 0xF8B0: 0x7060, //CJK UNIFIED IDEOGRAPH - 0xF8B1: 0x7223, //CJK UNIFIED IDEOGRAPH - 0xF8B2: 0x74DB, //CJK UNIFIED IDEOGRAPH - 0xF8B3: 0x74E5, //CJK UNIFIED IDEOGRAPH - 0xF8B4: 0x77D5, //CJK UNIFIED IDEOGRAPH - 0xF8B5: 0x7938, //CJK UNIFIED IDEOGRAPH - 0xF8B6: 0x79B7, //CJK UNIFIED IDEOGRAPH - 0xF8B7: 0x79B6, //CJK UNIFIED IDEOGRAPH - 0xF8B8: 0x7C6A, //CJK UNIFIED IDEOGRAPH - 0xF8B9: 0x7E97, //CJK UNIFIED IDEOGRAPH - 0xF8BA: 0x7F89, //CJK UNIFIED IDEOGRAPH - 0xF8BB: 0x826D, //CJK UNIFIED IDEOGRAPH - 0xF8BC: 0x8643, //CJK UNIFIED IDEOGRAPH - 0xF8BD: 0x8838, //CJK UNIFIED IDEOGRAPH - 0xF8BE: 0x8837, //CJK UNIFIED IDEOGRAPH - 0xF8BF: 0x8835, //CJK UNIFIED IDEOGRAPH - 0xF8C0: 0x884B, //CJK UNIFIED IDEOGRAPH - 0xF8C1: 0x8B94, //CJK UNIFIED IDEOGRAPH - 0xF8C2: 0x8B95, //CJK UNIFIED IDEOGRAPH - 0xF8C3: 0x8E9E, //CJK UNIFIED IDEOGRAPH - 0xF8C4: 0x8E9F, //CJK UNIFIED IDEOGRAPH - 0xF8C5: 0x8EA0, //CJK UNIFIED IDEOGRAPH - 0xF8C6: 0x8E9D, //CJK UNIFIED IDEOGRAPH - 0xF8C7: 0x91BE, //CJK UNIFIED IDEOGRAPH - 0xF8C8: 0x91BD, //CJK UNIFIED IDEOGRAPH - 0xF8C9: 0x91C2, //CJK UNIFIED IDEOGRAPH - 0xF8CA: 0x946B, //CJK UNIFIED IDEOGRAPH - 0xF8CB: 0x9468, //CJK UNIFIED IDEOGRAPH - 0xF8CC: 0x9469, //CJK UNIFIED IDEOGRAPH - 0xF8CD: 0x96E5, //CJK UNIFIED IDEOGRAPH - 0xF8CE: 0x9746, //CJK UNIFIED IDEOGRAPH - 0xF8CF: 0x9743, //CJK UNIFIED IDEOGRAPH - 0xF8D0: 0x9747, //CJK UNIFIED IDEOGRAPH - 0xF8D1: 0x97C7, //CJK UNIFIED IDEOGRAPH - 0xF8D2: 0x97E5, //CJK UNIFIED IDEOGRAPH - 0xF8D3: 0x9A5E, //CJK UNIFIED IDEOGRAPH - 0xF8D4: 0x9AD5, //CJK UNIFIED IDEOGRAPH - 0xF8D5: 0x9B59, //CJK UNIFIED IDEOGRAPH - 0xF8D6: 0x9C63, //CJK UNIFIED IDEOGRAPH - 0xF8D7: 0x9C67, //CJK UNIFIED IDEOGRAPH - 0xF8D8: 0x9C66, //CJK UNIFIED IDEOGRAPH - 0xF8D9: 0x9C62, //CJK UNIFIED IDEOGRAPH - 0xF8DA: 0x9C5E, //CJK UNIFIED IDEOGRAPH - 0xF8DB: 0x9C60, //CJK UNIFIED IDEOGRAPH - 0xF8DC: 0x9E02, //CJK UNIFIED IDEOGRAPH - 0xF8DD: 0x9DFE, //CJK UNIFIED IDEOGRAPH - 0xF8DE: 0x9E07, //CJK UNIFIED IDEOGRAPH - 0xF8DF: 0x9E03, //CJK UNIFIED IDEOGRAPH - 0xF8E0: 0x9E06, //CJK UNIFIED IDEOGRAPH - 0xF8E1: 0x9E05, //CJK UNIFIED IDEOGRAPH - 0xF8E2: 0x9E00, //CJK UNIFIED IDEOGRAPH - 0xF8E3: 0x9E01, //CJK UNIFIED IDEOGRAPH - 0xF8E4: 0x9E09, //CJK UNIFIED IDEOGRAPH - 0xF8E5: 0x9DFF, //CJK UNIFIED IDEOGRAPH - 0xF8E6: 0x9DFD, //CJK UNIFIED IDEOGRAPH - 0xF8E7: 0x9E04, //CJK UNIFIED IDEOGRAPH - 0xF8E8: 0x9EA0, //CJK UNIFIED IDEOGRAPH - 0xF8E9: 0x9F1E, //CJK UNIFIED IDEOGRAPH - 0xF8EA: 0x9F46, //CJK UNIFIED IDEOGRAPH - 0xF8EB: 0x9F74, //CJK UNIFIED IDEOGRAPH - 0xF8EC: 0x9F75, //CJK UNIFIED IDEOGRAPH - 0xF8ED: 0x9F76, //CJK UNIFIED IDEOGRAPH - 0xF8EE: 0x56D4, //CJK UNIFIED IDEOGRAPH - 0xF8EF: 0x652E, //CJK UNIFIED IDEOGRAPH - 0xF8F0: 0x65B8, //CJK UNIFIED IDEOGRAPH - 0xF8F1: 0x6B18, //CJK UNIFIED IDEOGRAPH - 0xF8F2: 0x6B19, //CJK UNIFIED IDEOGRAPH - 0xF8F3: 0x6B17, //CJK UNIFIED IDEOGRAPH - 0xF8F4: 0x6B1A, //CJK UNIFIED IDEOGRAPH - 0xF8F5: 0x7062, //CJK UNIFIED IDEOGRAPH - 0xF8F6: 0x7226, //CJK UNIFIED IDEOGRAPH - 0xF8F7: 0x72AA, //CJK UNIFIED IDEOGRAPH - 0xF8F8: 0x77D8, //CJK UNIFIED IDEOGRAPH - 0xF8F9: 0x77D9, //CJK UNIFIED IDEOGRAPH - 0xF8FA: 0x7939, //CJK UNIFIED IDEOGRAPH - 0xF8FB: 0x7C69, //CJK UNIFIED IDEOGRAPH - 0xF8FC: 0x7C6B, //CJK UNIFIED IDEOGRAPH - 0xF8FD: 0x7CF6, //CJK UNIFIED IDEOGRAPH - 0xF8FE: 0x7E9A, //CJK UNIFIED IDEOGRAPH - 0xF940: 0x7E98, //CJK UNIFIED IDEOGRAPH - 0xF941: 0x7E9B, //CJK UNIFIED IDEOGRAPH - 0xF942: 0x7E99, //CJK UNIFIED IDEOGRAPH - 0xF943: 0x81E0, //CJK UNIFIED IDEOGRAPH - 0xF944: 0x81E1, //CJK UNIFIED IDEOGRAPH - 0xF945: 0x8646, //CJK UNIFIED IDEOGRAPH - 0xF946: 0x8647, //CJK UNIFIED IDEOGRAPH - 0xF947: 0x8648, //CJK UNIFIED IDEOGRAPH - 0xF948: 0x8979, //CJK UNIFIED IDEOGRAPH - 0xF949: 0x897A, //CJK UNIFIED IDEOGRAPH - 0xF94A: 0x897C, //CJK UNIFIED IDEOGRAPH - 0xF94B: 0x897B, //CJK UNIFIED IDEOGRAPH - 0xF94C: 0x89FF, //CJK UNIFIED IDEOGRAPH - 0xF94D: 0x8B98, //CJK UNIFIED IDEOGRAPH - 0xF94E: 0x8B99, //CJK UNIFIED IDEOGRAPH - 0xF94F: 0x8EA5, //CJK UNIFIED IDEOGRAPH - 0xF950: 0x8EA4, //CJK UNIFIED IDEOGRAPH - 0xF951: 0x8EA3, //CJK UNIFIED IDEOGRAPH - 0xF952: 0x946E, //CJK UNIFIED IDEOGRAPH - 0xF953: 0x946D, //CJK UNIFIED IDEOGRAPH - 0xF954: 0x946F, //CJK UNIFIED IDEOGRAPH - 0xF955: 0x9471, //CJK UNIFIED IDEOGRAPH - 0xF956: 0x9473, //CJK UNIFIED IDEOGRAPH - 0xF957: 0x9749, //CJK UNIFIED IDEOGRAPH - 0xF958: 0x9872, //CJK UNIFIED IDEOGRAPH - 0xF959: 0x995F, //CJK UNIFIED IDEOGRAPH - 0xF95A: 0x9C68, //CJK UNIFIED IDEOGRAPH - 0xF95B: 0x9C6E, //CJK UNIFIED IDEOGRAPH - 0xF95C: 0x9C6D, //CJK UNIFIED IDEOGRAPH - 0xF95D: 0x9E0B, //CJK UNIFIED IDEOGRAPH - 0xF95E: 0x9E0D, //CJK UNIFIED IDEOGRAPH - 0xF95F: 0x9E10, //CJK UNIFIED IDEOGRAPH - 0xF960: 0x9E0F, //CJK UNIFIED IDEOGRAPH - 0xF961: 0x9E12, //CJK UNIFIED IDEOGRAPH - 0xF962: 0x9E11, //CJK UNIFIED IDEOGRAPH - 0xF963: 0x9EA1, //CJK UNIFIED IDEOGRAPH - 0xF964: 0x9EF5, //CJK UNIFIED IDEOGRAPH - 0xF965: 0x9F09, //CJK UNIFIED IDEOGRAPH - 0xF966: 0x9F47, //CJK UNIFIED IDEOGRAPH - 0xF967: 0x9F78, //CJK UNIFIED IDEOGRAPH - 0xF968: 0x9F7B, //CJK UNIFIED IDEOGRAPH - 0xF969: 0x9F7A, //CJK UNIFIED IDEOGRAPH - 0xF96A: 0x9F79, //CJK UNIFIED IDEOGRAPH - 0xF96B: 0x571E, //CJK UNIFIED IDEOGRAPH - 0xF96C: 0x7066, //CJK UNIFIED IDEOGRAPH - 0xF96D: 0x7C6F, //CJK UNIFIED IDEOGRAPH - 0xF96E: 0x883C, //CJK UNIFIED IDEOGRAPH - 0xF96F: 0x8DB2, //CJK UNIFIED IDEOGRAPH - 0xF970: 0x8EA6, //CJK UNIFIED IDEOGRAPH - 0xF971: 0x91C3, //CJK UNIFIED IDEOGRAPH - 0xF972: 0x9474, //CJK UNIFIED IDEOGRAPH - 0xF973: 0x9478, //CJK UNIFIED IDEOGRAPH - 0xF974: 0x9476, //CJK UNIFIED IDEOGRAPH - 0xF975: 0x9475, //CJK UNIFIED IDEOGRAPH - 0xF976: 0x9A60, //CJK UNIFIED IDEOGRAPH - 0xF977: 0x9C74, //CJK UNIFIED IDEOGRAPH - 0xF978: 0x9C73, //CJK UNIFIED IDEOGRAPH - 0xF979: 0x9C71, //CJK UNIFIED IDEOGRAPH - 0xF97A: 0x9C75, //CJK UNIFIED IDEOGRAPH - 0xF97B: 0x9E14, //CJK UNIFIED IDEOGRAPH - 0xF97C: 0x9E13, //CJK UNIFIED IDEOGRAPH - 0xF97D: 0x9EF6, //CJK UNIFIED IDEOGRAPH - 0xF97E: 0x9F0A, //CJK UNIFIED IDEOGRAPH - 0xF9A1: 0x9FA4, //CJK UNIFIED IDEOGRAPH - 0xF9A2: 0x7068, //CJK UNIFIED IDEOGRAPH - 0xF9A3: 0x7065, //CJK UNIFIED IDEOGRAPH - 0xF9A4: 0x7CF7, //CJK UNIFIED IDEOGRAPH - 0xF9A5: 0x866A, //CJK UNIFIED IDEOGRAPH - 0xF9A6: 0x883E, //CJK UNIFIED IDEOGRAPH - 0xF9A7: 0x883D, //CJK UNIFIED IDEOGRAPH - 0xF9A8: 0x883F, //CJK UNIFIED IDEOGRAPH - 0xF9A9: 0x8B9E, //CJK UNIFIED IDEOGRAPH - 0xF9AA: 0x8C9C, //CJK UNIFIED IDEOGRAPH - 0xF9AB: 0x8EA9, //CJK UNIFIED IDEOGRAPH - 0xF9AC: 0x8EC9, //CJK UNIFIED IDEOGRAPH - 0xF9AD: 0x974B, //CJK UNIFIED IDEOGRAPH - 0xF9AE: 0x9873, //CJK UNIFIED IDEOGRAPH - 0xF9AF: 0x9874, //CJK UNIFIED IDEOGRAPH - 0xF9B0: 0x98CC, //CJK UNIFIED IDEOGRAPH - 0xF9B1: 0x9961, //CJK UNIFIED IDEOGRAPH - 0xF9B2: 0x99AB, //CJK UNIFIED IDEOGRAPH - 0xF9B3: 0x9A64, //CJK UNIFIED IDEOGRAPH - 0xF9B4: 0x9A66, //CJK UNIFIED IDEOGRAPH - 0xF9B5: 0x9A67, //CJK UNIFIED IDEOGRAPH - 0xF9B6: 0x9B24, //CJK UNIFIED IDEOGRAPH - 0xF9B7: 0x9E15, //CJK UNIFIED IDEOGRAPH - 0xF9B8: 0x9E17, //CJK UNIFIED IDEOGRAPH - 0xF9B9: 0x9F48, //CJK UNIFIED IDEOGRAPH - 0xF9BA: 0x6207, //CJK UNIFIED IDEOGRAPH - 0xF9BB: 0x6B1E, //CJK UNIFIED IDEOGRAPH - 0xF9BC: 0x7227, //CJK UNIFIED IDEOGRAPH - 0xF9BD: 0x864C, //CJK UNIFIED IDEOGRAPH - 0xF9BE: 0x8EA8, //CJK UNIFIED IDEOGRAPH - 0xF9BF: 0x9482, //CJK UNIFIED IDEOGRAPH - 0xF9C0: 0x9480, //CJK UNIFIED IDEOGRAPH - 0xF9C1: 0x9481, //CJK UNIFIED IDEOGRAPH - 0xF9C2: 0x9A69, //CJK UNIFIED IDEOGRAPH - 0xF9C3: 0x9A68, //CJK UNIFIED IDEOGRAPH - 0xF9C4: 0x9B2E, //CJK UNIFIED IDEOGRAPH - 0xF9C5: 0x9E19, //CJK UNIFIED IDEOGRAPH - 0xF9C6: 0x7229, //CJK UNIFIED IDEOGRAPH - 0xF9C7: 0x864B, //CJK UNIFIED IDEOGRAPH - 0xF9C8: 0x8B9F, //CJK UNIFIED IDEOGRAPH - 0xF9C9: 0x9483, //CJK UNIFIED IDEOGRAPH - 0xF9CA: 0x9C79, //CJK UNIFIED IDEOGRAPH - 0xF9CB: 0x9EB7, //CJK UNIFIED IDEOGRAPH - 0xF9CC: 0x7675, //CJK UNIFIED IDEOGRAPH - 0xF9CD: 0x9A6B, //CJK UNIFIED IDEOGRAPH - 0xF9CE: 0x9C7A, //CJK UNIFIED IDEOGRAPH - 0xF9CF: 0x9E1D, //CJK UNIFIED IDEOGRAPH - 0xF9D0: 0x7069, //CJK UNIFIED IDEOGRAPH - 0xF9D1: 0x706A, //CJK UNIFIED IDEOGRAPH - 0xF9D2: 0x9EA4, //CJK UNIFIED IDEOGRAPH - 0xF9D3: 0x9F7E, //CJK UNIFIED IDEOGRAPH - 0xF9D4: 0x9F49, //CJK UNIFIED IDEOGRAPH - 0xF9D5: 0x9F98, //CJK UNIFIED IDEOGRAPH - 0xF9D6: 0x7881, //CJK UNIFIED IDEOGRAPH - 0xF9D7: 0x92B9, //CJK UNIFIED IDEOGRAPH - 0xF9D8: 0x88CF, //CJK UNIFIED IDEOGRAPH - 0xF9D9: 0x58BB, //CJK UNIFIED IDEOGRAPH - 0xF9DA: 0x6052, //CJK UNIFIED IDEOGRAPH - 0xF9DB: 0x7CA7, //CJK UNIFIED IDEOGRAPH - 0xF9DC: 0x5AFA, //CJK UNIFIED IDEOGRAPH - 0xF9DD: 0x2554, //BOX DRAWINGS DOUBLE DOWN AND RIGHT - 0xF9DE: 0x2566, //BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - 0xF9DF: 0x2557, //BOX DRAWINGS DOUBLE DOWN AND LEFT - 0xF9E0: 0x2560, //BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - 0xF9E1: 0x256C, //BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - 0xF9E2: 0x2563, //BOX DRAWINGS DOUBLE VERTICAL AND LEFT - 0xF9E3: 0x255A, //BOX DRAWINGS DOUBLE UP AND RIGHT - 0xF9E4: 0x2569, //BOX DRAWINGS DOUBLE UP AND HORIZONTAL - 0xF9E5: 0x255D, //BOX DRAWINGS DOUBLE UP AND LEFT - 0xF9E6: 0x2552, //BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - 0xF9E7: 0x2564, //BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - 0xF9E8: 0x2555, //BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - 0xF9E9: 0x255E, //BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - 0xF9EA: 0x256A, //BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - 0xF9EB: 0x2561, //BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - 0xF9EC: 0x2558, //BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - 0xF9ED: 0x2567, //BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - 0xF9EE: 0x255B, //BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - 0xF9EF: 0x2553, //BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - 0xF9F0: 0x2565, //BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - 0xF9F1: 0x2556, //BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - 0xF9F2: 0x255F, //BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - 0xF9F3: 0x256B, //BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - 0xF9F4: 0x2562, //BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - 0xF9F5: 0x2559, //BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - 0xF9F6: 0x2568, //BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - 0xF9F7: 0x255C, //BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - 0xF9F8: 0x2551, //BOX DRAWINGS DOUBLE VERTICAL - 0xF9F9: 0x2550, //BOX DRAWINGS DOUBLE HORIZONTAL - 0xF9FA: 0x256D, //BOX DRAWINGS LIGHT ARC DOWN AND RIGHT - 0xF9FB: 0x256E, //BOX DRAWINGS LIGHT ARC DOWN AND LEFT - 0xF9FC: 0x2570, //BOX DRAWINGS LIGHT ARC UP AND RIGHT - 0xF9FD: 0x256F, //BOX DRAWINGS LIGHT ARC UP AND LEFT - 0xF9FE: 0x2593, //DARK SHADE - }, -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/decimal.go b/vendor/github.com/denisenkom/go-mssqldb/decimal.go deleted file mode 100644 index 76f3a6b5b..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/decimal.go +++ /dev/null @@ -1,115 +0,0 @@ -package mssql - -import ( - "encoding/binary" - "errors" - "math" - "math/big" -) - -// http://msdn.microsoft.com/en-us/library/ee780893.aspx -type Decimal struct { - integer [4]uint32 - positive bool - prec uint8 - scale uint8 -} - -var scaletblflt64 [39]float64 - -func (d Decimal) ToFloat64() float64 { - val := float64(0) - for i := 3; i >= 0; i-- { - val *= 0x100000000 - val += float64(d.integer[i]) - } - if !d.positive { - val = -val - } - if d.scale != 0 { - val /= scaletblflt64[d.scale] - } - return val -} - -func Float64ToDecimal(f float64) (Decimal, error) { - var dec Decimal - if math.IsNaN(f) { - return dec, errors.New("NaN") - } - if math.IsInf(f, 0) { - return dec, errors.New("Infinity can't be converted to decimal") - } - dec.positive = f >= 0 - if !dec.positive { - f = math.Abs(f) - } - if f > 3.402823669209385e+38 { - return dec, errors.New("Float value is out of range") - } - dec.prec = 20 - var integer float64 - for dec.scale = 0; dec.scale <= 20; dec.scale++ { - integer = f * scaletblflt64[dec.scale] - _, frac := math.Modf(integer) - if frac == 0 { - break - } - } - for i := 0; i < 4; i++ { - mod := math.Mod(integer, 0x100000000) - integer -= mod - integer /= 0x100000000 - dec.integer[i] = uint32(mod) - } - return dec, nil -} - -func init() { - var acc float64 = 1 - for i := 0; i <= 38; i++ { - scaletblflt64[i] = acc - acc *= 10 - } -} - -func (d Decimal) Bytes() []byte { - bytes := make([]byte, 16) - binary.BigEndian.PutUint32(bytes[0:4], d.integer[3]) - binary.BigEndian.PutUint32(bytes[4:8], d.integer[2]) - binary.BigEndian.PutUint32(bytes[8:12], d.integer[1]) - binary.BigEndian.PutUint32(bytes[12:16], d.integer[0]) - var x big.Int - x.SetBytes(bytes) - if !d.positive { - x.Neg(&x) - } - return scaleBytes(x.String(), d.scale) -} - -func scaleBytes(s string, scale uint8) []byte { - z := make([]byte, 0, len(s)+1) - if s[0] == '-' || s[0] == '+' { - z = append(z, byte(s[0])) - s = s[1:] - } - pos := len(s) - int(scale) - if pos <= 0 { - z = append(z, byte('0')) - } else if pos > 0 { - z = append(z, []byte(s[:pos])...) - } - if scale > 0 { - z = append(z, byte('.')) - for pos < 0 { - z = append(z, byte('0')) - pos++ - } - z = append(z, []byte(s[pos:])...) - } - return z -} - -func (d Decimal) String() string { - return string(d.Bytes()) -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/doc.go b/vendor/github.com/denisenkom/go-mssqldb/doc.go deleted file mode 100644 index a3c217083..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/doc.go +++ /dev/null @@ -1,12 +0,0 @@ -// package mssql implements the TDS protocol used to connect to MS SQL Server (sqlserver) -// database servers. -// -// This package registers two drivers: -// sqlserver: uses native "@" parameter placeholder names and does no pre-processing. -// mssql: expects identifiers to be prefixed with ":" and pre-processes queries. -// -// If the ordinal position is used for query parameters, identifiers will be named -// "@p1", "@p2", ... "@pN". -// -// Please refer to the REAME for the format of the DSN. -package mssql diff --git a/vendor/github.com/denisenkom/go-mssqldb/error.go b/vendor/github.com/denisenkom/go-mssqldb/error.go deleted file mode 100644 index 2e5baceec..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/error.go +++ /dev/null @@ -1,73 +0,0 @@ -package mssql - -import ( - "fmt" -) - -// Error represents an SQL Server error. This -// type includes methods for reading the contents -// of the struct, which allows calling programs -// to check for specific error conditions without -// having to import this package directly. -type Error struct { - Number int32 - State uint8 - Class uint8 - Message string - ServerName string - ProcName string - LineNo int32 -} - -func (e Error) Error() string { - return "mssql: " + e.Message -} - -// SQLErrorNumber returns the SQL Server error number. -func (e Error) SQLErrorNumber() int32 { - return e.Number -} - -func (e Error) SQLErrorState() uint8 { - return e.State -} - -func (e Error) SQLErrorClass() uint8 { - return e.Class -} - -func (e Error) SQLErrorMessage() string { - return e.Message -} - -func (e Error) SQLErrorServerName() string { - return e.ServerName -} - -func (e Error) SQLErrorProcName() string { - return e.ProcName -} - -func (e Error) SQLErrorLineNo() int32 { - return e.LineNo -} - -type StreamError struct { - Message string -} - -func (e StreamError) Error() string { - return e.Message -} - -func streamErrorf(format string, v ...interface{}) StreamError { - return StreamError{"Invalid TDS stream: " + fmt.Sprintf(format, v...)} -} - -func badStreamPanic(err error) { - panic(err) -} - -func badStreamPanicf(format string, v ...interface{}) { - panic(streamErrorf(format, v...)) -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/log.go b/vendor/github.com/denisenkom/go-mssqldb/log.go deleted file mode 100644 index 9b8c551e8..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/log.go +++ /dev/null @@ -1,30 +0,0 @@ -package mssql - -import ( - "log" -) - -type Logger interface { - Printf(format string, v ...interface{}) - Println(v ...interface{}) -} - -type optionalLogger struct { - logger Logger -} - -func (o optionalLogger) Printf(format string, v ...interface{}) { - if o.logger != nil { - o.logger.Printf(format, v...) - } else { - log.Printf(format, v...) - } -} - -func (o optionalLogger) Println(v ...interface{}) { - if o.logger != nil { - o.logger.Println(v...) - } else { - log.Println(v...) - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/mssql.go b/vendor/github.com/denisenkom/go-mssqldb/mssql.go deleted file mode 100644 index b997cd686..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/mssql.go +++ /dev/null @@ -1,609 +0,0 @@ -package mssql - -import ( - "database/sql" - "database/sql/driver" - "encoding/binary" - "errors" - "fmt" - "io" - "math" - "net" - "reflect" - "strings" - "time" - "golang.org/x/net/context" // use the "x/net/context" for backwards compatibility. -) - -var driverInstance = &MssqlDriver{processQueryText: true} -var driverInstanceNoProcess = &MssqlDriver{processQueryText: false} - -func init() { - sql.Register("mssql", driverInstance) - sql.Register("sqlserver", driverInstanceNoProcess) -} - -// Abstract the dialer for testing and for non-TCP based connections. -type dialer interface { - Dial(addr string) (net.Conn, error) -} - -var createDialer func(p *connectParams) dialer - -type tcpDialer struct { - nd *net.Dialer -} - -func (d tcpDialer) Dial(addr string) (net.Conn, error) { - return d.nd.Dial("tcp", addr) -} - -type MssqlDriver struct { - log optionalLogger - - processQueryText bool -} - -func SetLogger(logger Logger) { - driverInstance.SetLogger(logger) - driverInstanceNoProcess.SetLogger(logger) -} - -func (d *MssqlDriver) SetLogger(logger Logger) { - d.log = optionalLogger{logger} -} - -type MssqlConn struct { - sess *tdsSession - transactionCtx context.Context - - processQueryText bool -} - -func (c *MssqlConn) simpleProcessResp(ctx context.Context) error { - tokchan := make(chan tokenStruct, 5) - go processResponse(ctx, c.sess, tokchan) - for tok := range tokchan { - switch token := tok.(type) { - case doneStruct: - if token.isError() { - return token.getError() - } - case error: - return token - } - } - return nil -} - -func (c *MssqlConn) Commit() error { - if err := c.sendCommitRequest(); err != nil { - return err - } - return c.simpleProcessResp(c.transactionCtx) -} - -func (c *MssqlConn) sendCommitRequest() error { - headers := []headerStruct{ - {hdrtype: dataStmHdrTransDescr, - data: transDescrHdr{c.sess.tranid, 1}.pack()}, - } - if err := sendCommitXact(c.sess.buf, headers, "", 0, 0, ""); err != nil { - if c.sess.logFlags&logErrors != 0 { - c.sess.log.Printf("Failed to send CommitXact with %v", err) - } - return driver.ErrBadConn - } - return nil -} - -func (c *MssqlConn) Rollback() error { - if err := c.sendRollbackRequest(); err != nil { - return err - } - return c.simpleProcessResp(c.transactionCtx) -} - -func (c *MssqlConn) sendRollbackRequest() error { - headers := []headerStruct{ - {hdrtype: dataStmHdrTransDescr, - data: transDescrHdr{c.sess.tranid, 1}.pack()}, - } - if err := sendRollbackXact(c.sess.buf, headers, "", 0, 0, ""); err != nil { - if c.sess.logFlags&logErrors != 0 { - c.sess.log.Printf("Failed to send RollbackXact with %v", err) - } - return driver.ErrBadConn - } - return nil -} - -func (c *MssqlConn) Begin() (driver.Tx, error) { - return c.begin(context.Background(), isolationUseCurrent) -} - -func (c *MssqlConn) begin(ctx context.Context, tdsIsolation isoLevel) (driver.Tx, error) { - err := c.sendBeginRequest(ctx, tdsIsolation) - if err != nil { - return nil, err - } - return c.processBeginResponse(ctx) -} - -func (c *MssqlConn) sendBeginRequest(ctx context.Context, tdsIsolation isoLevel) error { - c.transactionCtx = ctx - headers := []headerStruct{ - {hdrtype: dataStmHdrTransDescr, - data: transDescrHdr{0, 1}.pack()}, - } - if err := sendBeginXact(c.sess.buf, headers, tdsIsolation, ""); err != nil { - if c.sess.logFlags&logErrors != 0 { - c.sess.log.Printf("Failed to send BeginXact with %v", err) - } - return driver.ErrBadConn - } - return nil -} - -func (c *MssqlConn) processBeginResponse(ctx context.Context) (driver.Tx, error) { - if err := c.simpleProcessResp(ctx); err != nil { - return nil, err - } - // successful BEGINXACT request will return sess.tranid - // for started transaction - return c, nil -} - -func (d *MssqlDriver) Open(dsn string) (driver.Conn, error) { - return d.open(dsn) -} - -func (d *MssqlDriver) open(dsn string) (*MssqlConn, error) { - params, err := parseConnectParams(dsn) - if err != nil { - return nil, err - } - - sess, err := connect(d.log, params) - if err != nil { - // main server failed, try fail-over partner - if params.failOverPartner == "" { - return nil, err - } - - params.host = params.failOverPartner - if params.failOverPort != 0 { - params.port = params.failOverPort - } - - sess, err = connect(d.log, params) - if err != nil { - // fail-over partner also failed, now fail - return nil, err - } - } - - conn := &MssqlConn{sess, context.Background(), d.processQueryText} - conn.sess.log = d.log - return conn, nil -} - -func (c *MssqlConn) Close() error { - return c.sess.buf.transport.Close() -} - -type MssqlStmt struct { - c *MssqlConn - query string - paramCount int - notifSub *queryNotifSub -} - -type queryNotifSub struct { - msgText string - options string - timeout uint32 -} - -func (c *MssqlConn) Prepare(query string) (driver.Stmt, error) { - return c.prepareContext(context.Background(), query) -} - -func (c *MssqlConn) prepareContext(ctx context.Context, query string) (*MssqlStmt, error) { - paramCount := -1 - if c.processQueryText { - query, paramCount = parseParams(query) - } - return &MssqlStmt{c, query, paramCount, nil}, nil -} - -func (s *MssqlStmt) Close() error { - return nil -} - -func (s *MssqlStmt) SetQueryNotification(id, options string, timeout time.Duration) { - to := uint32(timeout / time.Second) - if to < 1 { - to = 1 - } - s.notifSub = &queryNotifSub{id, options, to} -} - -func (s *MssqlStmt) NumInput() int { - return s.paramCount -} - -func (s *MssqlStmt) sendQuery(args []namedValue) (err error) { - headers := []headerStruct{ - {hdrtype: dataStmHdrTransDescr, - data: transDescrHdr{s.c.sess.tranid, 1}.pack()}, - } - - if s.notifSub != nil { - headers = append(headers, headerStruct{hdrtype: dataStmHdrQueryNotif, - data: queryNotifHdr{s.notifSub.msgText, s.notifSub.options, s.notifSub.timeout}.pack()}) - } - - // no need to check number of parameters here, it is checked by database/sql - if s.c.sess.logFlags&logSQL != 0 { - s.c.sess.log.Println(s.query) - } - if s.c.sess.logFlags&logParams != 0 && len(args) > 0 { - for i := 0; i < len(args); i++ { - s.c.sess.log.Printf("\t@p%d\t%v\n", i+1, args[i]) - } - - } - if len(args) == 0 { - if err = sendSqlBatch72(s.c.sess.buf, s.query, headers); err != nil { - if s.c.sess.logFlags&logErrors != 0 { - s.c.sess.log.Printf("Failed to send SqlBatch with %v", err) - } - return driver.ErrBadConn - } - } else { - params := make([]Param, len(args)+2) - decls := make([]string, len(args)) - params[0] = makeStrParam(s.query) - for i, val := range args { - params[i+2], err = s.makeParam(val.Value) - if err != nil { - return - } - var name string - if len(val.Name) > 0 { - name = "@" + val.Name - } else { - name = fmt.Sprintf("@p%d", val.Ordinal) - } - params[i+2].Name = name - decls[i] = fmt.Sprintf("%s %s", name, makeDecl(params[i+2].ti)) - } - params[1] = makeStrParam(strings.Join(decls, ",")) - if err = sendRpc(s.c.sess.buf, headers, Sp_ExecuteSql, 0, params); err != nil { - if s.c.sess.logFlags&logErrors != 0 { - s.c.sess.log.Printf("Failed to send Rpc with %v", err) - } - return driver.ErrBadConn - } - } - return -} - -type namedValue struct { - Name string - Ordinal int - Value driver.Value -} - -func convertOldArgs(args []driver.Value) []namedValue { - list := make([]namedValue, len(args)) - for i, v := range args { - list[i] = namedValue{ - Ordinal: i + 1, - Value: v, - } - } - return list -} - -func (s *MssqlStmt) Query(args []driver.Value) (driver.Rows, error) { - return s.queryContext(context.Background(), convertOldArgs(args)) -} - -func (s *MssqlStmt) queryContext(ctx context.Context, args []namedValue) (driver.Rows, error) { - if err := s.sendQuery(args); err != nil { - return nil, err - } - return s.processQueryResponse(ctx) -} - -func (s *MssqlStmt) processQueryResponse(ctx context.Context) (res driver.Rows, err error) { - tokchan := make(chan tokenStruct, 5) - ctx, cancel := context.WithCancel(ctx) - go processResponse(ctx, s.c.sess, tokchan) - // process metadata - var cols []columnStruct -loop: - for tok := range tokchan { - switch token := tok.(type) { - // by ignoring DONE token we effectively - // skip empty result-sets - // this improves results in queryes like that: - // set nocount on; select 1 - // see TestIgnoreEmptyResults test - //case doneStruct: - //break loop - case []columnStruct: - cols = token - break loop - case doneStruct: - if token.isError() { - return nil, token.getError() - } - case error: - return nil, token - } - } - res = &MssqlRows{sess: s.c.sess, tokchan: tokchan, cols: cols, cancel: cancel} - return -} - -func (s *MssqlStmt) Exec(args []driver.Value) (driver.Result, error) { - return s.exec(context.Background(), convertOldArgs(args)) -} - -func (s *MssqlStmt) exec(ctx context.Context, args []namedValue) (driver.Result, error) { - if err := s.sendQuery(args); err != nil { - return nil, err - } - return s.processExec(ctx) -} - -func (s *MssqlStmt) processExec(ctx context.Context) (res driver.Result, err error) { - tokchan := make(chan tokenStruct, 5) - go processResponse(ctx, s.c.sess, tokchan) - var rowCount int64 - for token := range tokchan { - switch token := token.(type) { - case doneInProcStruct: - if token.Status&doneCount != 0 { - rowCount += int64(token.RowCount) - } - case doneStruct: - if token.Status&doneCount != 0 { - rowCount += int64(token.RowCount) - } - if token.isError() { - return nil, token.getError() - } - case error: - return nil, token - } - } - return &MssqlResult{s.c, rowCount}, nil -} - -type MssqlRows struct { - sess *tdsSession - cols []columnStruct - tokchan chan tokenStruct - - nextCols []columnStruct - - cancel func() -} - -func (rc *MssqlRows) Close() error { - rc.cancel() - for _ = range rc.tokchan { - } - rc.tokchan = nil - return nil -} - -func (rc *MssqlRows) Columns() (res []string) { - res = make([]string, len(rc.cols)) - for i, col := range rc.cols { - res[i] = col.ColName - } - return -} - -func (rc *MssqlRows) Next(dest []driver.Value) error { - if rc.nextCols != nil { - return io.EOF - } - for tok := range rc.tokchan { - switch tokdata := tok.(type) { - case []columnStruct: - rc.nextCols = tokdata - return io.EOF - case []interface{}: - for i := range dest { - dest[i] = tokdata[i] - } - return nil - case doneStruct: - if tokdata.isError() { - return tokdata.getError() - } - case error: - return tokdata - } - } - return io.EOF -} - -func (rc *MssqlRows) HasNextResultSet() bool { - return rc.nextCols != nil -} - -func (rc *MssqlRows) NextResultSet() error { - rc.cols = rc.nextCols - rc.nextCols = nil - if rc.cols == nil { - return io.EOF - } - return nil -} - -// It should return -// the value type that can be used to scan types into. For example, the database -// column type "bigint" this should return "reflect.TypeOf(int64(0))". -func (r *MssqlRows) ColumnTypeScanType(index int) reflect.Type { - return makeGoLangScanType(r.cols[index].ti) -} - -// RowsColumnTypeDatabaseTypeName may be implemented by Rows. It should return the -// database system type name without the length. Type names should be uppercase. -// Examples of returned types: "VARCHAR", "NVARCHAR", "VARCHAR2", "CHAR", "TEXT", -// "DECIMAL", "SMALLINT", "INT", "BIGINT", "BOOL", "[]BIGINT", "JSONB", "XML", -// "TIMESTAMP". -func (r *MssqlRows) ColumnTypeDatabaseTypeName(index int) string { - return makeGoLangTypeName(r.cols[index].ti) -} - -// RowsColumnTypeLength may be implemented by Rows. It should return the length -// of the column type if the column is a variable length type. If the column is -// not a variable length type ok should return false. -// If length is not limited other than system limits, it should return math.MaxInt64. -// The following are examples of returned values for various types: -// TEXT (math.MaxInt64, true) -// varchar(10) (10, true) -// nvarchar(10) (10, true) -// decimal (0, false) -// int (0, false) -// bytea(30) (30, true) -func (r *MssqlRows) ColumnTypeLength(index int) (int64, bool) { - return makeGoLangTypeLength(r.cols[index].ti) -} - -// It should return -// the precision and scale for decimal types. If not applicable, ok should be false. -// The following are examples of returned values for various types: -// decimal(38, 4) (38, 4, true) -// int (0, 0, false) -// decimal (math.MaxInt64, math.MaxInt64, true) -func (r *MssqlRows) ColumnTypePrecisionScale(index int) (int64, int64, bool) { - return makeGoLangTypePrecisionScale(r.cols[index].ti) -} - -// The nullable value should -// be true if it is known the column may be null, or false if the column is known -// to be not nullable. -// If the column nullability is unknown, ok should be false. -func (r *MssqlRows) ColumnTypeNullable(index int) (nullable, ok bool) { - nullable = r.cols[index].Flags&colFlagNullable != 0 - ok = true - return -} - -func makeStrParam(val string) (res Param) { - res.ti.TypeId = typeNVarChar - res.buffer = str2ucs2(val) - res.ti.Size = len(res.buffer) - return -} - -func (s *MssqlStmt) makeParam(val driver.Value) (res Param, err error) { - if val == nil { - res.ti.TypeId = typeNVarChar - res.buffer = nil - res.ti.Size = 2 - return - } - switch val := val.(type) { - case int64: - res.ti.TypeId = typeIntN - res.buffer = make([]byte, 8) - res.ti.Size = 8 - binary.LittleEndian.PutUint64(res.buffer, uint64(val)) - case float64: - res.ti.TypeId = typeFltN - res.ti.Size = 8 - res.buffer = make([]byte, 8) - binary.LittleEndian.PutUint64(res.buffer, math.Float64bits(val)) - case []byte: - res.ti.TypeId = typeBigVarBin - res.ti.Size = len(val) - res.buffer = val - case string: - res = makeStrParam(val) - case bool: - res.ti.TypeId = typeBitN - res.ti.Size = 1 - res.buffer = make([]byte, 1) - if val { - res.buffer[0] = 1 - } - case time.Time: - if s.c.sess.loginAck.TDSVersion >= verTDS73 { - res.ti.TypeId = typeDateTimeOffsetN - res.ti.Scale = 7 - res.ti.Size = 10 - buf := make([]byte, 10) - res.buffer = buf - days, ns := dateTime2(val) - ns /= 100 - buf[0] = byte(ns) - buf[1] = byte(ns >> 8) - buf[2] = byte(ns >> 16) - buf[3] = byte(ns >> 24) - buf[4] = byte(ns >> 32) - buf[5] = byte(days) - buf[6] = byte(days >> 8) - buf[7] = byte(days >> 16) - _, offset := val.Zone() - offset /= 60 - buf[8] = byte(offset) - buf[9] = byte(offset >> 8) - } else { - res.ti.TypeId = typeDateTimeN - res.ti.Size = 8 - res.buffer = make([]byte, 8) - ref := time.Date(1900, 1, 1, 0, 0, 0, 0, time.UTC) - dur := val.Sub(ref) - days := dur / (24 * time.Hour) - tm := (300 * (dur % (24 * time.Hour))) / time.Second - binary.LittleEndian.PutUint32(res.buffer[0:4], uint32(days)) - binary.LittleEndian.PutUint32(res.buffer[4:8], uint32(tm)) - } - default: - err = fmt.Errorf("mssql: unknown type for %T", val) - return - } - return -} - -type MssqlResult struct { - c *MssqlConn - rowsAffected int64 -} - -func (r *MssqlResult) RowsAffected() (int64, error) { - return r.rowsAffected, nil -} - -func (r *MssqlResult) LastInsertId() (int64, error) { - s, err := r.c.Prepare("select cast(@@identity as bigint)") - if err != nil { - return 0, err - } - defer s.Close() - rows, err := s.Query(nil) - if err != nil { - return 0, err - } - defer rows.Close() - dest := make([]driver.Value, 1) - err = rows.Next(dest) - if err != nil { - return 0, err - } - if dest[0] == nil { - return -1, errors.New("There is no generated identity value") - } - lastInsertId := dest[0].(int64) - return lastInsertId, nil -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/mssql_go1.3.go b/vendor/github.com/denisenkom/go-mssqldb/mssql_go1.3.go deleted file mode 100644 index 4270f15ab..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/mssql_go1.3.go +++ /dev/null @@ -1,13 +0,0 @@ -// +build go1.3 - -package mssql - -import ( - "net" -) - -func init() { - createDialer = func(p *connectParams) dialer { - return tcpDialer{&net.Dialer{Timeout: p.dial_timeout, KeepAlive: p.keepAlive}} - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/mssql_go1.3pre.go b/vendor/github.com/denisenkom/go-mssqldb/mssql_go1.3pre.go deleted file mode 100644 index fa29aff60..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/mssql_go1.3pre.go +++ /dev/null @@ -1,13 +0,0 @@ -// +build !go1.3 - -package mssql - -import ( - "net" -) - -func init() { - createDialer = func(p *connectParams) dialer { - return tcpDialer{&net.Dialer{Timeout: p.dial_timeout}} - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/mssql_go18.go b/vendor/github.com/denisenkom/go-mssqldb/mssql_go18.go deleted file mode 100644 index d7daa897f..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/mssql_go18.go +++ /dev/null @@ -1,71 +0,0 @@ -// +build go1.8 - -package mssql - -import ( - "context" - "database/sql" - "database/sql/driver" - "errors" -) - -var _ driver.Pinger = &MssqlConn{} - -// Ping is used to check if the remote server is avaiable and satisfies the Pinger interface. -func (c *MssqlConn) Ping(ctx context.Context) error { - stmt := &MssqlStmt{c, `select 1;`, 0, nil} - _, err := stmt.ExecContext(ctx, nil) - return err -} - -var _ driver.ConnBeginTx = &MssqlConn{} - -// BeginTx satisfies ConnBeginTx. -func (c *MssqlConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) { - if opts.ReadOnly { - return nil, errors.New("Read-only transactions are not supported") - } - - var tdsIsolation isoLevel - switch sql.IsolationLevel(opts.Isolation) { - case sql.LevelDefault: - tdsIsolation = isolationUseCurrent - case sql.LevelReadUncommitted: - tdsIsolation = isolationReadUncommited - case sql.LevelReadCommitted: - tdsIsolation = isolationReadCommited - case sql.LevelWriteCommitted: - return nil, errors.New("LevelWriteCommitted isolation level is not supported") - case sql.LevelRepeatableRead: - tdsIsolation = isolationRepeatableRead - case sql.LevelSnapshot: - tdsIsolation = isolationSnapshot - case sql.LevelSerializable: - tdsIsolation = isolationSerializable - case sql.LevelLinearizable: - return nil, errors.New("LevelLinearizable isolation level is not supported") - default: - return nil, errors.New("Isolation level is not supported or unknown") - } - return c.begin(ctx, tdsIsolation) -} - -func (c *MssqlConn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) { - return c.prepareContext(ctx, query) -} - -func (s *MssqlStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) { - list := make([]namedValue, len(args)) - for i, nv := range args { - list[i] = namedValue(nv) - } - return s.queryContext(ctx, list) -} - -func (s *MssqlStmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) { - list := make([]namedValue, len(args)) - for i, nv := range args { - list[i] = namedValue(nv) - } - return s.exec(ctx, list) -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/net.go b/vendor/github.com/denisenkom/go-mssqldb/net.go deleted file mode 100644 index 8c3c8ef8b..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/net.go +++ /dev/null @@ -1,99 +0,0 @@ -package mssql - -import ( - "fmt" - "net" - "time" -) - -type timeoutConn struct { - c net.Conn - timeout time.Duration - buf *tdsBuffer - packetPending bool - continueRead bool -} - -func NewTimeoutConn(conn net.Conn, timeout time.Duration) *timeoutConn { - return &timeoutConn{ - c: conn, - timeout: timeout, - } -} - -func (c *timeoutConn) Read(b []byte) (n int, err error) { - if c.buf != nil { - if c.packetPending { - c.packetPending = false - err = c.buf.FinishPacket() - if err != nil { - err = fmt.Errorf("Cannot send handshake packet: %s", err.Error()) - return - } - c.continueRead = false - } - if !c.continueRead { - var packet packetType - packet, err = c.buf.BeginRead() - if err != nil { - err = fmt.Errorf("Cannot read handshake packet: %s", err.Error()) - return - } - if packet != packPrelogin { - err = fmt.Errorf("unexpected packet %d, expecting prelogin", packet) - return - } - c.continueRead = true - } - n, err = c.buf.Read(b) - return - } - err = c.c.SetDeadline(time.Now().Add(c.timeout)) - if err != nil { - return - } - return c.c.Read(b) -} - -func (c *timeoutConn) Write(b []byte) (n int, err error) { - if c.buf != nil { - if !c.packetPending { - c.buf.BeginPacket(packPrelogin) - c.packetPending = true - } - n, err = c.buf.Write(b) - if err != nil { - return - } - return - } - err = c.c.SetDeadline(time.Now().Add(c.timeout)) - if err != nil { - return - } - return c.c.Write(b) -} - -func (c timeoutConn) Close() error { - return c.c.Close() -} - -func (c timeoutConn) LocalAddr() net.Addr { - return c.c.LocalAddr() -} - -func (c timeoutConn) RemoteAddr() net.Addr { - return c.c.RemoteAddr() -} - -func (c timeoutConn) SetDeadline(t time.Time) error { - panic("Not implemented") -} - -func (c timeoutConn) SetReadDeadline(t time.Time) error { - panic("Not implemented") -} - -func (c timeoutConn) SetWriteDeadline(t time.Time) error { - panic("Not implemented") -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/ntlm.go b/vendor/github.com/denisenkom/go-mssqldb/ntlm.go deleted file mode 100644 index f853435c6..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/ntlm.go +++ /dev/null @@ -1,283 +0,0 @@ -// +build !windows - -package mssql - -import ( - "crypto/des" - "crypto/md5" - "crypto/rand" - "encoding/binary" - "errors" - "strings" - "unicode/utf16" - - "golang.org/x/crypto/md4" -) - -const ( - NEGOTIATE_MESSAGE = 1 - CHALLENGE_MESSAGE = 2 - AUTHENTICATE_MESSAGE = 3 -) - -const ( - NEGOTIATE_UNICODE = 0x00000001 - NEGOTIATE_OEM = 0x00000002 - NEGOTIATE_TARGET = 0x00000004 - NEGOTIATE_SIGN = 0x00000010 - NEGOTIATE_SEAL = 0x00000020 - NEGOTIATE_DATAGRAM = 0x00000040 - NEGOTIATE_LMKEY = 0x00000080 - NEGOTIATE_NTLM = 0x00000200 - NEGOTIATE_ANONYMOUS = 0x00000800 - NEGOTIATE_OEM_DOMAIN_SUPPLIED = 0x00001000 - NEGOTIATE_OEM_WORKSTATION_SUPPLIED = 0x00002000 - NEGOTIATE_ALWAYS_SIGN = 0x00008000 - NEGOTIATE_TARGET_TYPE_DOMAIN = 0x00010000 - NEGOTIATE_TARGET_TYPE_SERVER = 0x00020000 - NEGOTIATE_EXTENDED_SESSIONSECURITY = 0x00080000 - NEGOTIATE_IDENTIFY = 0x00100000 - REQUEST_NON_NT_SESSION_KEY = 0x00400000 - NEGOTIATE_TARGET_INFO = 0x00800000 - NEGOTIATE_VERSION = 0x02000000 - NEGOTIATE_128 = 0x20000000 - NEGOTIATE_KEY_EXCH = 0x40000000 - NEGOTIATE_56 = 0x80000000 -) - -const NEGOTIATE_FLAGS = NEGOTIATE_UNICODE | - NEGOTIATE_NTLM | - NEGOTIATE_OEM_DOMAIN_SUPPLIED | - NEGOTIATE_OEM_WORKSTATION_SUPPLIED | - NEGOTIATE_ALWAYS_SIGN | - NEGOTIATE_EXTENDED_SESSIONSECURITY - -type NTLMAuth struct { - Domain string - UserName string - Password string - Workstation string -} - -func getAuth(user, password, service, workstation string) (Auth, bool) { - if !strings.ContainsRune(user, '\\') { - return nil, false - } - domain_user := strings.SplitN(user, "\\", 2) - return &NTLMAuth{ - Domain: domain_user[0], - UserName: domain_user[1], - Password: password, - Workstation: workstation, - }, true -} - -func utf16le(val string) []byte { - var v []byte - for _, r := range val { - if utf16.IsSurrogate(r) { - r1, r2 := utf16.EncodeRune(r) - v = append(v, byte(r1), byte(r1>>8)) - v = append(v, byte(r2), byte(r2>>8)) - } else { - v = append(v, byte(r), byte(r>>8)) - } - } - return v -} - -func (auth *NTLMAuth) InitialBytes() ([]byte, error) { - domain_len := len(auth.Domain) - workstation_len := len(auth.Workstation) - msg := make([]byte, 40+domain_len+workstation_len) - copy(msg, []byte("NTLMSSP\x00")) - binary.LittleEndian.PutUint32(msg[8:], NEGOTIATE_MESSAGE) - binary.LittleEndian.PutUint32(msg[12:], NEGOTIATE_FLAGS) - // Domain Name Fields - binary.LittleEndian.PutUint16(msg[16:], uint16(domain_len)) - binary.LittleEndian.PutUint16(msg[18:], uint16(domain_len)) - binary.LittleEndian.PutUint32(msg[20:], 40) - // Workstation Fields - binary.LittleEndian.PutUint16(msg[24:], uint16(workstation_len)) - binary.LittleEndian.PutUint16(msg[26:], uint16(workstation_len)) - binary.LittleEndian.PutUint32(msg[28:], uint32(40+domain_len)) - // Version - binary.LittleEndian.PutUint32(msg[32:], 0) - binary.LittleEndian.PutUint32(msg[36:], 0) - // Payload - copy(msg[40:], auth.Domain) - copy(msg[40+domain_len:], auth.Workstation) - return msg, nil -} - -var errorNTLM = errors.New("NTLM protocol error") - -func createDesKey(bytes, material []byte) { - material[0] = bytes[0] - material[1] = (byte)(bytes[0]<<7 | (bytes[1]&0xff)>>1) - material[2] = (byte)(bytes[1]<<6 | (bytes[2]&0xff)>>2) - material[3] = (byte)(bytes[2]<<5 | (bytes[3]&0xff)>>3) - material[4] = (byte)(bytes[3]<<4 | (bytes[4]&0xff)>>4) - material[5] = (byte)(bytes[4]<<3 | (bytes[5]&0xff)>>5) - material[6] = (byte)(bytes[5]<<2 | (bytes[6]&0xff)>>6) - material[7] = (byte)(bytes[6] << 1) -} - -func oddParity(bytes []byte) { - for i := 0; i < len(bytes); i++ { - b := bytes[i] - needsParity := (((b >> 7) ^ (b >> 6) ^ (b >> 5) ^ (b >> 4) ^ (b >> 3) ^ (b >> 2) ^ (b >> 1)) & 0x01) == 0 - if needsParity { - bytes[i] = bytes[i] | byte(0x01) - } else { - bytes[i] = bytes[i] & byte(0xfe) - } - } -} - -func encryptDes(key []byte, cleartext []byte, ciphertext []byte) { - var desKey [8]byte - createDesKey(key, desKey[:]) - cipher, err := des.NewCipher(desKey[:]) - if err != nil { - panic(err) - } - cipher.Encrypt(ciphertext, cleartext) -} - -func response(challenge [8]byte, hash [21]byte) (ret [24]byte) { - encryptDes(hash[:7], challenge[:], ret[:8]) - encryptDes(hash[7:14], challenge[:], ret[8:16]) - encryptDes(hash[14:], challenge[:], ret[16:]) - return -} - -func lmHash(password string) (hash [21]byte) { - var lmpass [14]byte - copy(lmpass[:14], []byte(strings.ToUpper(password))) - magic := []byte("KGS!@#$%") - encryptDes(lmpass[:7], magic, hash[:8]) - encryptDes(lmpass[7:], magic, hash[8:]) - return -} - -func lmResponse(challenge [8]byte, password string) [24]byte { - hash := lmHash(password) - return response(challenge, hash) -} - -func ntlmHash(password string) (hash [21]byte) { - h := md4.New() - h.Write(utf16le(password)) - h.Sum(hash[:0]) - return -} - -func ntResponse(challenge [8]byte, password string) [24]byte { - hash := ntlmHash(password) - return response(challenge, hash) -} - -func clientChallenge() (nonce [8]byte) { - _, err := rand.Read(nonce[:]) - if err != nil { - panic(err) - } - return -} - -func ntlmSessionResponse(clientNonce [8]byte, serverChallenge [8]byte, password string) [24]byte { - var sessionHash [16]byte - h := md5.New() - h.Write(serverChallenge[:]) - h.Write(clientNonce[:]) - h.Sum(sessionHash[:0]) - var hash [8]byte - copy(hash[:], sessionHash[:8]) - passwordHash := ntlmHash(password) - return response(hash, passwordHash) -} - -func (auth *NTLMAuth) NextBytes(bytes []byte) ([]byte, error) { - if string(bytes[0:8]) != "NTLMSSP\x00" { - return nil, errorNTLM - } - if binary.LittleEndian.Uint32(bytes[8:12]) != CHALLENGE_MESSAGE { - return nil, errorNTLM - } - flags := binary.LittleEndian.Uint32(bytes[20:24]) - var challenge [8]byte - copy(challenge[:], bytes[24:32]) - - var lm, nt []byte - if (flags & NEGOTIATE_EXTENDED_SESSIONSECURITY) != 0 { - nonce := clientChallenge() - var lm_bytes [24]byte - copy(lm_bytes[:8], nonce[:]) - lm = lm_bytes[:] - nt_bytes := ntlmSessionResponse(nonce, challenge, auth.Password) - nt = nt_bytes[:] - } else { - lm_bytes := lmResponse(challenge, auth.Password) - lm = lm_bytes[:] - nt_bytes := ntResponse(challenge, auth.Password) - nt = nt_bytes[:] - } - lm_len := len(lm) - nt_len := len(nt) - - domain16 := utf16le(auth.Domain) - domain_len := len(domain16) - user16 := utf16le(auth.UserName) - user_len := len(user16) - workstation16 := utf16le(auth.Workstation) - workstation_len := len(workstation16) - - msg := make([]byte, 88+lm_len+nt_len+domain_len+user_len+workstation_len) - copy(msg, []byte("NTLMSSP\x00")) - binary.LittleEndian.PutUint32(msg[8:], AUTHENTICATE_MESSAGE) - // Lm Challenge Response Fields - binary.LittleEndian.PutUint16(msg[12:], uint16(lm_len)) - binary.LittleEndian.PutUint16(msg[14:], uint16(lm_len)) - binary.LittleEndian.PutUint32(msg[16:], 88) - // Nt Challenge Response Fields - binary.LittleEndian.PutUint16(msg[20:], uint16(nt_len)) - binary.LittleEndian.PutUint16(msg[22:], uint16(nt_len)) - binary.LittleEndian.PutUint32(msg[24:], uint32(88+lm_len)) - // Domain Name Fields - binary.LittleEndian.PutUint16(msg[28:], uint16(domain_len)) - binary.LittleEndian.PutUint16(msg[30:], uint16(domain_len)) - binary.LittleEndian.PutUint32(msg[32:], uint32(88+lm_len+nt_len)) - // User Name Fields - binary.LittleEndian.PutUint16(msg[36:], uint16(user_len)) - binary.LittleEndian.PutUint16(msg[38:], uint16(user_len)) - binary.LittleEndian.PutUint32(msg[40:], uint32(88+lm_len+nt_len+domain_len)) - // Workstation Fields - binary.LittleEndian.PutUint16(msg[44:], uint16(workstation_len)) - binary.LittleEndian.PutUint16(msg[46:], uint16(workstation_len)) - binary.LittleEndian.PutUint32(msg[48:], uint32(88+lm_len+nt_len+domain_len+user_len)) - // Encrypted Random Session Key Fields - binary.LittleEndian.PutUint16(msg[52:], 0) - binary.LittleEndian.PutUint16(msg[54:], 0) - binary.LittleEndian.PutUint32(msg[56:], uint32(88+lm_len+nt_len+domain_len+user_len+workstation_len)) - // Negotiate Flags - binary.LittleEndian.PutUint32(msg[60:], flags) - // Version - binary.LittleEndian.PutUint32(msg[64:], 0) - binary.LittleEndian.PutUint32(msg[68:], 0) - // MIC - binary.LittleEndian.PutUint32(msg[72:], 0) - binary.LittleEndian.PutUint32(msg[76:], 0) - binary.LittleEndian.PutUint32(msg[88:], 0) - binary.LittleEndian.PutUint32(msg[84:], 0) - // Payload - copy(msg[88:], lm) - copy(msg[88+lm_len:], nt) - copy(msg[88+lm_len+nt_len:], domain16) - copy(msg[88+lm_len+nt_len+domain_len:], user16) - copy(msg[88+lm_len+nt_len+domain_len+user_len:], workstation16) - return msg, nil -} - -func (auth *NTLMAuth) Free() { -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/parser.go b/vendor/github.com/denisenkom/go-mssqldb/parser.go deleted file mode 100644 index 4eb0d00c3..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/parser.go +++ /dev/null @@ -1,257 +0,0 @@ -package mssql - -import ( - "bytes" - "io" - "strconv" -) - -type parser struct { - r *bytes.Reader - w bytes.Buffer - paramCount int - paramMax int - - // using map as a set - namedParams map [string]bool -} - -func (p *parser) next() (rune, bool) { - ch, _, err := p.r.ReadRune() - if err != nil { - if err != io.EOF { - panic(err) - } - return 0, false - } - return ch, true -} - -func (p *parser) unread() { - err := p.r.UnreadRune() - if err != nil { - panic(err) - } -} - -func (p *parser) write(ch rune) { - p.w.WriteRune(ch) -} - -type stateFunc func(*parser) stateFunc - -func parseParams(query string) (string, int) { - p := &parser{ - r: bytes.NewReader([]byte(query)), - namedParams: map [string]bool{}, - } - state := parseNormal - for state != nil { - state = state(p) - } - return p.w.String(), p.paramMax + len(p.namedParams) -} - -func parseNormal(p *parser) stateFunc { - for { - ch, ok := p.next() - if !ok { - return nil - } - if ch == '?' { - return parseOrdinalParameter - } else if ch == '$' || ch == ':' { - ch2, ok := p.next() - if !ok { - p.write(ch) - return nil - } - p.unread() - if ch2 >= '0' && ch2 <= '9' { - return parseOrdinalParameter - } else if 'a' <= ch2 && ch2 <= 'z' || 'A' <= ch2 && ch2 <= 'Z' { - return parseNamedParameter - } - } - p.write(ch) - switch ch { - case '\'': - return parseQuote - case '"': - return parseDoubleQuote - case '[': - return parseBracket - case '-': - return parseLineComment - case '/': - return parseComment - } - } -} - -func parseOrdinalParameter(p *parser) stateFunc { - var paramN int - var ok bool - for { - var ch rune - ch, ok = p.next() - if ok && ch >= '0' && ch <= '9' { - paramN = paramN*10 + int(ch-'0') - } else { - break - } - } - if ok { - p.unread() - } - if paramN == 0 { - p.paramCount++ - paramN = p.paramCount - } - if paramN > p.paramMax { - p.paramMax = paramN - } - p.w.WriteString("@p") - p.w.WriteString(strconv.Itoa(paramN)) - if !ok { - return nil - } - return parseNormal -} - -func parseNamedParameter(p *parser) stateFunc { - var paramName string - var ok bool - for { - var ch rune - ch, ok = p.next() - if ok && (ch >= '0' && ch <= '9' || 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z') { - paramName = paramName + string(ch) - } else { - break - } - } - if ok { - p.unread() - } - p.namedParams[paramName] = true - p.w.WriteString("@") - p.w.WriteString(paramName) - if !ok { - return nil - } - return parseNormal -} - -func parseQuote(p *parser) stateFunc { - for { - ch, ok := p.next() - if !ok { - return nil - } - p.write(ch) - if ch == '\'' { - return parseNormal - } - } -} - -func parseDoubleQuote(p *parser) stateFunc { - for { - ch, ok := p.next() - if !ok { - return nil - } - p.write(ch) - if ch == '"' { - return parseNormal - } - } -} - -func parseBracket(p *parser) stateFunc { - for { - ch, ok := p.next() - if !ok { - return nil - } - p.write(ch) - if ch == ']' { - ch, ok = p.next() - if !ok { - return nil - } - if ch != ']' { - p.unread() - return parseNormal - } - p.write(ch) - } - } -} - -func parseLineComment(p *parser) stateFunc { - ch, ok := p.next() - if !ok { - return nil - } - if ch != '-' { - p.unread() - return parseNormal - } - p.write(ch) - for { - ch, ok = p.next() - if !ok { - return nil - } - p.write(ch) - if ch == '\n' { - return parseNormal - } - } -} - -func parseComment(p *parser) stateFunc { - var nested int - ch, ok := p.next() - if !ok { - return nil - } - if ch != '*' { - p.unread() - return parseNormal - } - p.write(ch) - for { - ch, ok = p.next() - if !ok { - return nil - } - p.write(ch) - for ch == '*' { - ch, ok = p.next() - if !ok { - return nil - } - p.write(ch) - if ch == '/' { - if nested == 0 { - return parseNormal - } else { - nested-- - } - } - } - for ch == '/' { - ch, ok = p.next() - if !ok { - return nil - } - p.write(ch) - if ch == '*' { - nested++ - } - } - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/rpc.go b/vendor/github.com/denisenkom/go-mssqldb/rpc.go deleted file mode 100644 index 00b9b1e21..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/rpc.go +++ /dev/null @@ -1,100 +0,0 @@ -package mssql - -import ( - "encoding/binary" -) - -type ProcId struct { - id uint16 - name string -} - -// parameter flags -const ( - fByRevValue = 1 - fDefaultValue = 2 -) - -type Param struct { - Name string - Flags uint8 - ti typeInfo - buffer []byte -} - -func MakeProcId(name string) (res ProcId) { - res.name = name - if len(name) == 0 { - panic("Proc name shouln't be empty") - } - if len(name) >= 0xffff { - panic("Invalid length of procedure name, should be less than 0xffff") - } - return res -} - -const ( - fWithRecomp = 1 - fNoMetaData = 2 - fReuseMetaData = 4 -) - -var ( - Sp_Cursor = ProcId{1, ""} - Sp_CursorOpen = ProcId{2, ""} - Sp_CursorPrepare = ProcId{3, ""} - Sp_CursorExecute = ProcId{4, ""} - Sp_CursorPrepExec = ProcId{5, ""} - Sp_CursorUnprepare = ProcId{6, ""} - Sp_CursorFetch = ProcId{7, ""} - Sp_CursorOption = ProcId{8, ""} - Sp_CursorClose = ProcId{9, ""} - Sp_ExecuteSql = ProcId{10, ""} - Sp_Prepare = ProcId{11, ""} - Sp_PrepExec = ProcId{13, ""} - Sp_PrepExecRpc = ProcId{14, ""} - Sp_Unprepare = ProcId{15, ""} -) - -// http://msdn.microsoft.com/en-us/library/dd357576.aspx -func sendRpc(buf *tdsBuffer, headers []headerStruct, proc ProcId, flags uint16, params []Param) (err error) { - buf.BeginPacket(packRPCRequest) - writeAllHeaders(buf, headers) - if len(proc.name) == 0 { - var idswitch uint16 = 0xffff - err = binary.Write(buf, binary.LittleEndian, &idswitch) - if err != nil { - return - } - err = binary.Write(buf, binary.LittleEndian, &proc.id) - if err != nil { - return - } - } else { - err = writeUsVarChar(buf, proc.name) - if err != nil { - return - } - } - err = binary.Write(buf, binary.LittleEndian, &flags) - if err != nil { - return - } - for _, param := range params { - if err = writeBVarChar(buf, param.Name); err != nil { - return - } - if err = binary.Write(buf, binary.LittleEndian, param.Flags); err != nil { - return - } - err = writeTypeInfo(buf, ¶m.ti) - if err != nil { - return - } - err = param.ti.Writer(buf, param.ti, param.buffer) - if err != nil { - return - } - } - return buf.FinishPacket() -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/sspi_windows.go b/vendor/github.com/denisenkom/go-mssqldb/sspi_windows.go deleted file mode 100644 index a6e95051c..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/sspi_windows.go +++ /dev/null @@ -1,266 +0,0 @@ -package mssql - -import ( - "fmt" - "strings" - "syscall" - "unsafe" -) - -var ( - secur32_dll = syscall.NewLazyDLL("secur32.dll") - initSecurityInterface = secur32_dll.NewProc("InitSecurityInterfaceW") - sec_fn *SecurityFunctionTable -) - -func init() { - ptr, _, _ := initSecurityInterface.Call() - sec_fn = (*SecurityFunctionTable)(unsafe.Pointer(ptr)) -} - -const ( - SEC_E_OK = 0 - SECPKG_CRED_OUTBOUND = 2 - SEC_WINNT_AUTH_IDENTITY_UNICODE = 2 - ISC_REQ_DELEGATE = 0x00000001 - ISC_REQ_REPLAY_DETECT = 0x00000004 - ISC_REQ_SEQUENCE_DETECT = 0x00000008 - ISC_REQ_CONFIDENTIALITY = 0x00000010 - ISC_REQ_CONNECTION = 0x00000800 - SECURITY_NETWORK_DREP = 0 - SEC_I_CONTINUE_NEEDED = 0x00090312 - SEC_I_COMPLETE_NEEDED = 0x00090313 - SEC_I_COMPLETE_AND_CONTINUE = 0x00090314 - SECBUFFER_VERSION = 0 - SECBUFFER_TOKEN = 2 - NTLMBUF_LEN = 12000 -) - -const ISC_REQ = ISC_REQ_CONFIDENTIALITY | - ISC_REQ_REPLAY_DETECT | - ISC_REQ_SEQUENCE_DETECT | - ISC_REQ_CONNECTION | - ISC_REQ_DELEGATE - -type SecurityFunctionTable struct { - dwVersion uint32 - EnumerateSecurityPackages uintptr - QueryCredentialsAttributes uintptr - AcquireCredentialsHandle uintptr - FreeCredentialsHandle uintptr - Reserved2 uintptr - InitializeSecurityContext uintptr - AcceptSecurityContext uintptr - CompleteAuthToken uintptr - DeleteSecurityContext uintptr - ApplyControlToken uintptr - QueryContextAttributes uintptr - ImpersonateSecurityContext uintptr - RevertSecurityContext uintptr - MakeSignature uintptr - VerifySignature uintptr - FreeContextBuffer uintptr - QuerySecurityPackageInfo uintptr - Reserved3 uintptr - Reserved4 uintptr - Reserved5 uintptr - Reserved6 uintptr - Reserved7 uintptr - Reserved8 uintptr - QuerySecurityContextToken uintptr - EncryptMessage uintptr - DecryptMessage uintptr -} - -type SEC_WINNT_AUTH_IDENTITY struct { - User *uint16 - UserLength uint32 - Domain *uint16 - DomainLength uint32 - Password *uint16 - PasswordLength uint32 - Flags uint32 -} - -type TimeStamp struct { - LowPart uint32 - HighPart int32 -} - -type SecHandle struct { - dwLower uintptr - dwUpper uintptr -} - -type SecBuffer struct { - cbBuffer uint32 - BufferType uint32 - pvBuffer *byte -} - -type SecBufferDesc struct { - ulVersion uint32 - cBuffers uint32 - pBuffers *SecBuffer -} - -type SSPIAuth struct { - Domain string - UserName string - Password string - Service string - cred SecHandle - ctxt SecHandle -} - -func getAuth(user, password, service, workstation string) (Auth, bool) { - if user == "" { - return &SSPIAuth{Service: service}, true - } - if !strings.ContainsRune(user, '\\') { - return nil, false - } - domain_user := strings.SplitN(user, "\\", 2) - return &SSPIAuth{ - Domain: domain_user[0], - UserName: domain_user[1], - Password: password, - Service: service, - }, true -} - -func (auth *SSPIAuth) InitialBytes() ([]byte, error) { - var identity *SEC_WINNT_AUTH_IDENTITY - if auth.UserName != "" { - identity = &SEC_WINNT_AUTH_IDENTITY{ - Flags: SEC_WINNT_AUTH_IDENTITY_UNICODE, - Password: syscall.StringToUTF16Ptr(auth.Password), - PasswordLength: uint32(len(auth.Password)), - Domain: syscall.StringToUTF16Ptr(auth.Domain), - DomainLength: uint32(len(auth.Domain)), - User: syscall.StringToUTF16Ptr(auth.UserName), - UserLength: uint32(len(auth.UserName)), - } - } - var ts TimeStamp - sec_ok, _, _ := syscall.Syscall9(sec_fn.AcquireCredentialsHandle, - 9, - 0, - uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("Negotiate"))), - SECPKG_CRED_OUTBOUND, - 0, - uintptr(unsafe.Pointer(identity)), - 0, - 0, - uintptr(unsafe.Pointer(&auth.cred)), - uintptr(unsafe.Pointer(&ts))) - if sec_ok != SEC_E_OK { - return nil, fmt.Errorf("AcquireCredentialsHandle failed %x", sec_ok) - } - - var buf SecBuffer - var desc SecBufferDesc - desc.ulVersion = SECBUFFER_VERSION - desc.cBuffers = 1 - desc.pBuffers = &buf - - outbuf := make([]byte, NTLMBUF_LEN) - buf.cbBuffer = NTLMBUF_LEN - buf.BufferType = SECBUFFER_TOKEN - buf.pvBuffer = &outbuf[0] - - var attrs uint32 - sec_ok, _, _ = syscall.Syscall12(sec_fn.InitializeSecurityContext, - 12, - uintptr(unsafe.Pointer(&auth.cred)), - 0, - uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(auth.Service))), - ISC_REQ, - 0, - SECURITY_NETWORK_DREP, - 0, - 0, - uintptr(unsafe.Pointer(&auth.ctxt)), - uintptr(unsafe.Pointer(&desc)), - uintptr(unsafe.Pointer(&attrs)), - uintptr(unsafe.Pointer(&ts))) - if sec_ok == SEC_I_COMPLETE_AND_CONTINUE || - sec_ok == SEC_I_COMPLETE_NEEDED { - syscall.Syscall6(sec_fn.CompleteAuthToken, - 2, - uintptr(unsafe.Pointer(&auth.ctxt)), - uintptr(unsafe.Pointer(&desc)), - 0, 0, 0, 0) - } else if sec_ok != SEC_E_OK && - sec_ok != SEC_I_CONTINUE_NEEDED { - syscall.Syscall6(sec_fn.FreeCredentialsHandle, - 1, - uintptr(unsafe.Pointer(&auth.cred)), - 0, 0, 0, 0, 0) - return nil, fmt.Errorf("InitialBytes InitializeSecurityContext failed %x", sec_ok) - } - return outbuf[:buf.cbBuffer], nil -} - -func (auth *SSPIAuth) NextBytes(bytes []byte) ([]byte, error) { - var in_buf, out_buf SecBuffer - var in_desc, out_desc SecBufferDesc - - in_desc.ulVersion = SECBUFFER_VERSION - in_desc.cBuffers = 1 - in_desc.pBuffers = &in_buf - - out_desc.ulVersion = SECBUFFER_VERSION - out_desc.cBuffers = 1 - out_desc.pBuffers = &out_buf - - in_buf.BufferType = SECBUFFER_TOKEN - in_buf.pvBuffer = &bytes[0] - in_buf.cbBuffer = uint32(len(bytes)) - - outbuf := make([]byte, NTLMBUF_LEN) - out_buf.BufferType = SECBUFFER_TOKEN - out_buf.pvBuffer = &outbuf[0] - out_buf.cbBuffer = NTLMBUF_LEN - - var attrs uint32 - var ts TimeStamp - sec_ok, _, _ := syscall.Syscall12(sec_fn.InitializeSecurityContext, - 12, - uintptr(unsafe.Pointer(&auth.cred)), - uintptr(unsafe.Pointer(&auth.ctxt)), - uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(auth.Service))), - ISC_REQ, - 0, - SECURITY_NETWORK_DREP, - uintptr(unsafe.Pointer(&in_desc)), - 0, - uintptr(unsafe.Pointer(&auth.ctxt)), - uintptr(unsafe.Pointer(&out_desc)), - uintptr(unsafe.Pointer(&attrs)), - uintptr(unsafe.Pointer(&ts))) - if sec_ok == SEC_I_COMPLETE_AND_CONTINUE || - sec_ok == SEC_I_COMPLETE_NEEDED { - syscall.Syscall6(sec_fn.CompleteAuthToken, - 2, - uintptr(unsafe.Pointer(&auth.ctxt)), - uintptr(unsafe.Pointer(&out_desc)), - 0, 0, 0, 0) - } else if sec_ok != SEC_E_OK && - sec_ok != SEC_I_CONTINUE_NEEDED { - return nil, fmt.Errorf("NextBytes InitializeSecurityContext failed %x", sec_ok) - } - - return outbuf[:out_buf.cbBuffer], nil -} - -func (auth *SSPIAuth) Free() { - syscall.Syscall6(sec_fn.DeleteSecurityContext, - 1, - uintptr(unsafe.Pointer(&auth.ctxt)), - 0, 0, 0, 0, 0) - syscall.Syscall6(sec_fn.FreeCredentialsHandle, - 1, - uintptr(unsafe.Pointer(&auth.cred)), - 0, 0, 0, 0, 0) -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/tds.go b/vendor/github.com/denisenkom/go-mssqldb/tds.go deleted file mode 100644 index e5c3ef6c7..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/tds.go +++ /dev/null @@ -1,1325 +0,0 @@ -package mssql - -import ( - "crypto/tls" - "crypto/x509" - "encoding/binary" - "errors" - "fmt" - "io" - "io/ioutil" - "net" - "net/url" - "os" - "sort" - "strconv" - "strings" - "time" - "unicode" - "unicode/utf16" - "unicode/utf8" - "golang.org/x/net/context" // use the "x/net/context" for backwards compatibility. -) - -func parseInstances(msg []byte) map[string]map[string]string { - results := map[string]map[string]string{} - if len(msg) > 3 && msg[0] == 5 { - out_s := string(msg[3:]) - tokens := strings.Split(out_s, ";") - instdict := map[string]string{} - got_name := false - var name string - for _, token := range tokens { - if got_name { - instdict[name] = token - got_name = false - } else { - name = token - if len(name) == 0 { - if len(instdict) == 0 { - break - } - results[strings.ToUpper(instdict["InstanceName"])] = instdict - instdict = map[string]string{} - continue - } - got_name = true - } - } - } - return results -} - -func getInstances(address string) (map[string]map[string]string, error) { - conn, err := net.DialTimeout("udp", address+":1434", 5*time.Second) - if err != nil { - return nil, err - } - defer conn.Close() - conn.SetDeadline(time.Now().Add(5 * time.Second)) - _, err = conn.Write([]byte{3}) - if err != nil { - return nil, err - } - var resp = make([]byte, 16*1024-1) - read, err := conn.Read(resp) - if err != nil { - return nil, err - } - return parseInstances(resp[:read]), nil -} - -// tds versions -const ( - verTDS70 = 0x70000000 - verTDS71 = 0x71000000 - verTDS71rev1 = 0x71000001 - verTDS72 = 0x72090002 - verTDS73A = 0x730A0003 - verTDS73 = verTDS73A - verTDS73B = 0x730B0003 - verTDS74 = 0x74000004 -) - -// packet types -// https://msdn.microsoft.com/en-us/library/dd304214.aspx -const ( - packSQLBatch packetType = 1 - packRPCRequest = 3 - packReply = 4 - - // 2.2.1.7 Attention: https://msdn.microsoft.com/en-us/library/dd341449.aspx - // 4.19.2 Out-of-Band Attention Signal: https://msdn.microsoft.com/en-us/library/dd305167.aspx - packAttention = 6 - - packBulkLoadBCP = 7 - packTransMgrReq = 14 - packNormal = 15 - packLogin7 = 16 - packSSPIMessage = 17 - packPrelogin = 18 -) - -// prelogin fields -// http://msdn.microsoft.com/en-us/library/dd357559.aspx -const ( - preloginVERSION = 0 - preloginENCRYPTION = 1 - preloginINSTOPT = 2 - preloginTHREADID = 3 - preloginMARS = 4 - preloginTRACEID = 5 - preloginTERMINATOR = 0xff -) - -const ( - encryptOff = 0 // Encryption is available but off. - encryptOn = 1 // Encryption is available and on. - encryptNotSup = 2 // Encryption is not available. - encryptReq = 3 // Encryption is required. -) - -type tdsSession struct { - buf *tdsBuffer - loginAck loginAckStruct - database string - partner string - columns []columnStruct - tranid uint64 - logFlags uint64 - log optionalLogger - routedServer string - routedPort uint16 -} - -const ( - logErrors = 1 - logMessages = 2 - logRows = 4 - logSQL = 8 - logParams = 16 - logTransaction = 32 - logDebug = 64 -) - -type columnStruct struct { - UserType uint32 - Flags uint16 - ColName string - ti typeInfo -} - -type KeySlice []uint8 - -func (p KeySlice) Len() int { return len(p) } -func (p KeySlice) Less(i, j int) bool { return p[i] < p[j] } -func (p KeySlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -// http://msdn.microsoft.com/en-us/library/dd357559.aspx -func writePrelogin(w *tdsBuffer, fields map[uint8][]byte) error { - var err error - - w.BeginPacket(packPrelogin) - offset := uint16(5*len(fields) + 1) - keys := make(KeySlice, 0, len(fields)) - for k, _ := range fields { - keys = append(keys, k) - } - sort.Sort(keys) - // writing header - for _, k := range keys { - err = w.WriteByte(k) - if err != nil { - return err - } - err = binary.Write(w, binary.BigEndian, offset) - if err != nil { - return err - } - v := fields[k] - size := uint16(len(v)) - err = binary.Write(w, binary.BigEndian, size) - if err != nil { - return err - } - offset += size - } - err = w.WriteByte(preloginTERMINATOR) - if err != nil { - return err - } - // writing values - for _, k := range keys { - v := fields[k] - written, err := w.Write(v) - if err != nil { - return err - } - if written != len(v) { - return errors.New("Write method didn't write the whole value") - } - } - return w.FinishPacket() -} - -func readPrelogin(r *tdsBuffer) (map[uint8][]byte, error) { - packet_type, err := r.BeginRead() - if err != nil { - return nil, err - } - struct_buf, err := ioutil.ReadAll(r) - if err != nil { - return nil, err - } - if packet_type != 4 { - return nil, errors.New("Invalid respones, expected packet type 4, PRELOGIN RESPONSE") - } - offset := 0 - results := map[uint8][]byte{} - for true { - rec_type := struct_buf[offset] - if rec_type == preloginTERMINATOR { - break - } - - rec_offset := binary.BigEndian.Uint16(struct_buf[offset+1:]) - rec_len := binary.BigEndian.Uint16(struct_buf[offset+3:]) - value := struct_buf[rec_offset : rec_offset+rec_len] - results[rec_type] = value - offset += 5 - } - return results, nil -} - -// OptionFlags2 -// http://msdn.microsoft.com/en-us/library/dd304019.aspx -const ( - fLanguageFatal = 1 - fODBC = 2 - fTransBoundary = 4 - fCacheConnect = 8 - fIntSecurity = 0x80 -) - -// TypeFlags -const ( - // 4 bits for fSQLType - // 1 bit for fOLEDB - fReadOnlyIntent = 32 -) - -type login struct { - TDSVersion uint32 - PacketSize uint32 - ClientProgVer uint32 - ClientPID uint32 - ConnectionID uint32 - OptionFlags1 uint8 - OptionFlags2 uint8 - TypeFlags uint8 - OptionFlags3 uint8 - ClientTimeZone int32 - ClientLCID uint32 - HostName string - UserName string - Password string - AppName string - ServerName string - CtlIntName string - Language string - Database string - ClientID [6]byte - SSPI []byte - AtchDBFile string - ChangePassword string -} - -type loginHeader struct { - Length uint32 - TDSVersion uint32 - PacketSize uint32 - ClientProgVer uint32 - ClientPID uint32 - ConnectionID uint32 - OptionFlags1 uint8 - OptionFlags2 uint8 - TypeFlags uint8 - OptionFlags3 uint8 - ClientTimeZone int32 - ClientLCID uint32 - HostNameOffset uint16 - HostNameLength uint16 - UserNameOffset uint16 - UserNameLength uint16 - PasswordOffset uint16 - PasswordLength uint16 - AppNameOffset uint16 - AppNameLength uint16 - ServerNameOffset uint16 - ServerNameLength uint16 - ExtensionOffset uint16 - ExtensionLenght uint16 - CtlIntNameOffset uint16 - CtlIntNameLength uint16 - LanguageOffset uint16 - LanguageLength uint16 - DatabaseOffset uint16 - DatabaseLength uint16 - ClientID [6]byte - SSPIOffset uint16 - SSPILength uint16 - AtchDBFileOffset uint16 - AtchDBFileLength uint16 - ChangePasswordOffset uint16 - ChangePasswordLength uint16 - SSPILongLength uint32 -} - -// convert Go string to UTF-16 encoded []byte (littleEndian) -// done manually rather than using bytes and binary packages -// for performance reasons -func str2ucs2(s string) []byte { - res := utf16.Encode([]rune(s)) - ucs2 := make([]byte, 2*len(res)) - for i := 0; i < len(res); i++ { - ucs2[2*i] = byte(res[i]) - ucs2[2*i+1] = byte(res[i] >> 8) - } - return ucs2 -} - -func ucs22str(s []byte) (string, error) { - if len(s)%2 != 0 { - return "", fmt.Errorf("Illegal UCS2 string length: %d", len(s)) - } - buf := make([]uint16, len(s)/2) - for i := 0; i < len(s); i += 2 { - buf[i/2] = binary.LittleEndian.Uint16(s[i:]) - } - return string(utf16.Decode(buf)), nil -} - -func manglePassword(password string) []byte { - var ucs2password []byte = str2ucs2(password) - for i, ch := range ucs2password { - ucs2password[i] = ((ch<<4)&0xff | (ch >> 4)) ^ 0xA5 - } - return ucs2password -} - -// http://msdn.microsoft.com/en-us/library/dd304019.aspx -func sendLogin(w *tdsBuffer, login login) error { - w.BeginPacket(packLogin7) - hostname := str2ucs2(login.HostName) - username := str2ucs2(login.UserName) - password := manglePassword(login.Password) - appname := str2ucs2(login.AppName) - servername := str2ucs2(login.ServerName) - ctlintname := str2ucs2(login.CtlIntName) - language := str2ucs2(login.Language) - database := str2ucs2(login.Database) - atchdbfile := str2ucs2(login.AtchDBFile) - changepassword := str2ucs2(login.ChangePassword) - hdr := loginHeader{ - TDSVersion: login.TDSVersion, - PacketSize: login.PacketSize, - ClientProgVer: login.ClientProgVer, - ClientPID: login.ClientPID, - ConnectionID: login.ConnectionID, - OptionFlags1: login.OptionFlags1, - OptionFlags2: login.OptionFlags2, - TypeFlags: login.TypeFlags, - OptionFlags3: login.OptionFlags3, - ClientTimeZone: login.ClientTimeZone, - ClientLCID: login.ClientLCID, - HostNameLength: uint16(utf8.RuneCountInString(login.HostName)), - UserNameLength: uint16(utf8.RuneCountInString(login.UserName)), - PasswordLength: uint16(utf8.RuneCountInString(login.Password)), - AppNameLength: uint16(utf8.RuneCountInString(login.AppName)), - ServerNameLength: uint16(utf8.RuneCountInString(login.ServerName)), - CtlIntNameLength: uint16(utf8.RuneCountInString(login.CtlIntName)), - LanguageLength: uint16(utf8.RuneCountInString(login.Language)), - DatabaseLength: uint16(utf8.RuneCountInString(login.Database)), - ClientID: login.ClientID, - SSPILength: uint16(len(login.SSPI)), - AtchDBFileLength: uint16(utf8.RuneCountInString(login.AtchDBFile)), - ChangePasswordLength: uint16(utf8.RuneCountInString(login.ChangePassword)), - } - offset := uint16(binary.Size(hdr)) - hdr.HostNameOffset = offset - offset += uint16(len(hostname)) - hdr.UserNameOffset = offset - offset += uint16(len(username)) - hdr.PasswordOffset = offset - offset += uint16(len(password)) - hdr.AppNameOffset = offset - offset += uint16(len(appname)) - hdr.ServerNameOffset = offset - offset += uint16(len(servername)) - hdr.CtlIntNameOffset = offset - offset += uint16(len(ctlintname)) - hdr.LanguageOffset = offset - offset += uint16(len(language)) - hdr.DatabaseOffset = offset - offset += uint16(len(database)) - hdr.SSPIOffset = offset - offset += uint16(len(login.SSPI)) - hdr.AtchDBFileOffset = offset - offset += uint16(len(atchdbfile)) - hdr.ChangePasswordOffset = offset - offset += uint16(len(changepassword)) - hdr.Length = uint32(offset) - var err error - err = binary.Write(w, binary.LittleEndian, &hdr) - if err != nil { - return err - } - _, err = w.Write(hostname) - if err != nil { - return err - } - _, err = w.Write(username) - if err != nil { - return err - } - _, err = w.Write(password) - if err != nil { - return err - } - _, err = w.Write(appname) - if err != nil { - return err - } - _, err = w.Write(servername) - if err != nil { - return err - } - _, err = w.Write(ctlintname) - if err != nil { - return err - } - _, err = w.Write(language) - if err != nil { - return err - } - _, err = w.Write(database) - if err != nil { - return err - } - _, err = w.Write(login.SSPI) - if err != nil { - return err - } - _, err = w.Write(atchdbfile) - if err != nil { - return err - } - _, err = w.Write(changepassword) - if err != nil { - return err - } - return w.FinishPacket() -} - -func readUcs2(r io.Reader, numchars int) (res string, err error) { - buf := make([]byte, numchars*2) - _, err = io.ReadFull(r, buf) - if err != nil { - return "", err - } - return ucs22str(buf) -} - -func readUsVarChar(r io.Reader) (res string, err error) { - var numchars uint16 - err = binary.Read(r, binary.LittleEndian, &numchars) - if err != nil { - return "", err - } - return readUcs2(r, int(numchars)) -} - -func writeUsVarChar(w io.Writer, s string) (err error) { - buf := str2ucs2(s) - var numchars int = len(buf) / 2 - if numchars > 0xffff { - panic("invalid size for US_VARCHAR") - } - err = binary.Write(w, binary.LittleEndian, uint16(numchars)) - if err != nil { - return - } - _, err = w.Write(buf) - return -} - -func readBVarChar(r io.Reader) (res string, err error) { - var numchars uint8 - err = binary.Read(r, binary.LittleEndian, &numchars) - if err != nil { - return "", err - } - return readUcs2(r, int(numchars)) -} - -func writeBVarChar(w io.Writer, s string) (err error) { - buf := str2ucs2(s) - var numchars int = len(buf) / 2 - if numchars > 0xff { - panic("invalid size for B_VARCHAR") - } - err = binary.Write(w, binary.LittleEndian, uint8(numchars)) - if err != nil { - return - } - _, err = w.Write(buf) - return -} - -func readBVarByte(r io.Reader) (res []byte, err error) { - var length uint8 - err = binary.Read(r, binary.LittleEndian, &length) - if err != nil { - return - } - res = make([]byte, length) - _, err = io.ReadFull(r, res) - return -} - -func readUshort(r io.Reader) (res uint16, err error) { - err = binary.Read(r, binary.LittleEndian, &res) - return -} - -func readByte(r io.Reader) (res byte, err error) { - var b [1]byte - _, err = r.Read(b[:]) - res = b[0] - return -} - -// Packet Data Stream Headers -// http://msdn.microsoft.com/en-us/library/dd304953.aspx -type headerStruct struct { - hdrtype uint16 - data []byte -} - -const ( - dataStmHdrQueryNotif = 1 // query notifications - dataStmHdrTransDescr = 2 // MARS transaction descriptor (required) - dataStmHdrTraceActivity = 3 -) - -// Query Notifications Header -// http://msdn.microsoft.com/en-us/library/dd304949.aspx -type queryNotifHdr struct { - notifyId string - ssbDeployment string - notifyTimeout uint32 -} - -func (hdr queryNotifHdr) pack() (res []byte) { - notifyId := str2ucs2(hdr.notifyId) - ssbDeployment := str2ucs2(hdr.ssbDeployment) - - res = make([]byte, 2+len(notifyId)+2+len(ssbDeployment)+4) - b := res - - binary.LittleEndian.PutUint16(b, uint16(len(notifyId))) - b = b[2:] - copy(b, notifyId) - b = b[len(notifyId):] - - binary.LittleEndian.PutUint16(b, uint16(len(ssbDeployment))) - b = b[2:] - copy(b, ssbDeployment) - b = b[len(ssbDeployment):] - - binary.LittleEndian.PutUint32(b, hdr.notifyTimeout) - - return res -} - -// MARS Transaction Descriptor Header -// http://msdn.microsoft.com/en-us/library/dd340515.aspx -type transDescrHdr struct { - transDescr uint64 // transaction descriptor returned from ENVCHANGE - outstandingReqCnt uint32 // outstanding request count -} - -func (hdr transDescrHdr) pack() (res []byte) { - res = make([]byte, 8+4) - binary.LittleEndian.PutUint64(res, hdr.transDescr) - binary.LittleEndian.PutUint32(res[8:], hdr.outstandingReqCnt) - return res -} - -func writeAllHeaders(w io.Writer, headers []headerStruct) (err error) { - // calculatint total length - var totallen uint32 = 4 - for _, hdr := range headers { - totallen += 4 + 2 + uint32(len(hdr.data)) - } - // writing - err = binary.Write(w, binary.LittleEndian, totallen) - if err != nil { - return err - } - for _, hdr := range headers { - var headerlen uint32 = 4 + 2 + uint32(len(hdr.data)) - err = binary.Write(w, binary.LittleEndian, headerlen) - if err != nil { - return err - } - err = binary.Write(w, binary.LittleEndian, hdr.hdrtype) - if err != nil { - return err - } - _, err = w.Write(hdr.data) - if err != nil { - return err - } - } - return nil -} - -func sendSqlBatch72(buf *tdsBuffer, - sqltext string, - headers []headerStruct) (err error) { - buf.BeginPacket(packSQLBatch) - - if err = writeAllHeaders(buf, headers); err != nil { - return - } - - _, err = buf.Write(str2ucs2(sqltext)) - if err != nil { - return - } - return buf.FinishPacket() -} - -// 2.2.1.7 Attention: https://msdn.microsoft.com/en-us/library/dd341449.aspx -// 4.19.2 Out-of-Band Attention Signal: https://msdn.microsoft.com/en-us/library/dd305167.aspx -func sendAttention(buf *tdsBuffer) error { - buf.BeginPacket(packAttention) - return buf.FinishPacket() -} - -type connectParams struct { - logFlags uint64 - port uint64 - host string - instance string - database string - user string - password string - dial_timeout time.Duration - conn_timeout time.Duration - keepAlive time.Duration - encrypt bool - disableEncryption bool - trustServerCertificate bool - certificate string - hostInCertificate string - serverSPN string - workstation string - appname string - typeFlags uint8 - failOverPartner string - failOverPort uint64 -} - -func splitConnectionString(dsn string) (res map[string]string) { - res = map[string]string{} - parts := strings.Split(dsn, ";") - for _, part := range parts { - if len(part) == 0 { - continue - } - lst := strings.SplitN(part, "=", 2) - name := strings.TrimSpace(strings.ToLower(lst[0])) - if len(name) == 0 { - continue - } - var value string = "" - if len(lst) > 1 { - value = strings.TrimSpace(lst[1]) - } - res[name] = value - } - return res -} - -// Splits a URL in the ODBC format -func splitConnectionStringOdbc(dsn string) (map[string]string, error) { - res := map[string]string{} - - type parserState int - const ( - // Before the start of a key - parserStateBeforeKey parserState = iota - - // Inside a key - parserStateKey - - // Beginning of a value. May be bare or braced - parserStateBeginValue - - // Inside a bare value - parserStateBareValue - - // Inside a braced value - parserStateBracedValue - - // A closing brace inside a braced value. - // May be the end of the value or an escaped closing brace, depending on the next character - parserStateBracedValueClosingBrace - - // After a value. Next character should be a semi-colon or whitespace. - parserStateEndValue - ) - - var state = parserStateBeforeKey - - var key string - var value string - - for i, c := range dsn { - switch state { - case parserStateBeforeKey: - switch { - case c == '=': - return res, fmt.Errorf("Unexpected character = at index %d. Expected start of key or semi-colon or whitespace.", i) - case !unicode.IsSpace(c) && c != ';': - state = parserStateKey - key += string(c) - } - - case parserStateKey: - switch c { - case '=': - key = normalizeOdbcKey(key) - if len(key) == 0 { - return res, fmt.Errorf("Unexpected end of key at index %d.", i) - } - - state = parserStateBeginValue - - case ';': - // Key without value - key = normalizeOdbcKey(key) - if len(key) == 0 { - return res, fmt.Errorf("Unexpected end of key at index %d.", i) - } - - res[key] = value - key = "" - value = "" - state = parserStateBeforeKey - - default: - key += string(c) - } - - case parserStateBeginValue: - switch { - case c == '{': - state = parserStateBracedValue - case c == ';': - // Empty value - res[key] = value - key = "" - state = parserStateBeforeKey - case unicode.IsSpace(c): - // Ignore whitespace - default: - state = parserStateBareValue - value += string(c) - } - - case parserStateBareValue: - if c == ';' { - res[key] = strings.TrimRightFunc(value, unicode.IsSpace) - key = "" - value = "" - state = parserStateBeforeKey - } else { - value += string(c) - } - - case parserStateBracedValue: - if c == '}' { - state = parserStateBracedValueClosingBrace - } else { - value += string(c) - } - - case parserStateBracedValueClosingBrace: - if c == '}' { - // Escaped closing brace - value += string(c) - state = parserStateBracedValue - continue - } - - // End of braced value - res[key] = value - key = "" - value = "" - - // This character is the first character past the end, - // so it needs to be parsed like the parserStateEndValue state. - state = parserStateEndValue - switch { - case c == ';': - state = parserStateBeforeKey - case unicode.IsSpace(c): - // Ignore whitespace - default: - return res, fmt.Errorf("Unexpected character %c at index %d. Expected semi-colon or whitespace.", c, i) - } - - case parserStateEndValue: - switch { - case c == ';': - state = parserStateBeforeKey - case unicode.IsSpace(c): - // Ignore whitespace - default: - return res, fmt.Errorf("Unexpected character %c at index %d. Expected semi-colon or whitespace.", c, i) - } - } - } - - switch state { - case parserStateBeforeKey: // Okay - case parserStateKey: // Unfinished key. Treat as key without value. - key = normalizeOdbcKey(key) - if len(key) == 0 { - return res, fmt.Errorf("Unexpected end of key at index %d.", len(dsn)) - } - res[key] = value - case parserStateBeginValue: // Empty value - res[key] = value - case parserStateBareValue: - res[key] = strings.TrimRightFunc(value, unicode.IsSpace) - case parserStateBracedValue: - return res, fmt.Errorf("Unexpected end of braced value at index %d.", len(dsn)) - case parserStateBracedValueClosingBrace: // End of braced value - res[key] = value - case parserStateEndValue: // Okay - } - - return res, nil -} - -// Normalizes the given string as an ODBC-format key -func normalizeOdbcKey(s string) string { - return strings.ToLower(strings.TrimRightFunc(s, unicode.IsSpace)) -} - -// Splits a URL of the form sqlserver://username:password@host/instance?param1=value¶m2=value -func splitConnectionStringURL(dsn string) (map[string]string, error) { - res := map[string]string{} - - u, err := url.Parse(dsn) - if err != nil { - return res, err - } - - if u.Scheme != "sqlserver" { - return res, fmt.Errorf("scheme %s is not recognized", u.Scheme) - } - - if u.User != nil { - res["user id"] = u.User.Username() - p, exists := u.User.Password() - if exists { - res["password"] = p - } - } - - host, port, err := net.SplitHostPort(u.Host) - if err != nil { - host = u.Host - } - - if len(u.Path) > 0 { - res["server"] = host + "\\" + u.Path[1:] - } else { - res["server"] = host - } - - if len(port) > 0 { - res["port"] = port - } - - query := u.Query() - for k, v := range query { - if len(v) > 1 { - return res, fmt.Errorf("key %s provided more than once", k) - } - res[k] = v[0] - } - - return res, nil -} - -func parseConnectParams(dsn string) (connectParams, error) { - var p connectParams - - var params map[string]string - if strings.HasPrefix(dsn, "odbc:") { - parameters, err := splitConnectionStringOdbc(dsn[len("odbc:"):]) - if err != nil { - return p, err - } - params = parameters - } else if strings.HasPrefix(dsn, "sqlserver://") { - parameters, err := splitConnectionStringURL(dsn) - if err != nil { - return p, err - } - params = parameters - } else { - params = splitConnectionString(dsn) - } - - strlog, ok := params["log"] - if ok { - var err error - p.logFlags, err = strconv.ParseUint(strlog, 10, 0) - if err != nil { - return p, fmt.Errorf("Invalid log parameter '%s': %s", strlog, err.Error()) - } - } - server := params["server"] - parts := strings.SplitN(server, "\\", 2) - p.host = parts[0] - if p.host == "." || strings.ToUpper(p.host) == "(LOCAL)" || p.host == "" { - p.host = "localhost" - } - if len(parts) > 1 { - p.instance = parts[1] - } - p.database = params["database"] - p.user = params["user id"] - p.password = params["password"] - - p.port = 1433 - strport, ok := params["port"] - if ok { - var err error - p.port, err = strconv.ParseUint(strport, 0, 16) - if err != nil { - f := "Invalid tcp port '%v': %v" - return p, fmt.Errorf(f, strport, err.Error()) - } - } - - // https://msdn.microsoft.com/en-us/library/dd341108.aspx - p.dial_timeout = 15 * time.Second - p.conn_timeout = 30 * time.Second - strconntimeout, ok := params["connection timeout"] - if ok { - timeout, err := strconv.ParseUint(strconntimeout, 0, 16) - if err != nil { - f := "Invalid connection timeout '%v': %v" - return p, fmt.Errorf(f, strconntimeout, err.Error()) - } - p.conn_timeout = time.Duration(timeout) * time.Second - } - strdialtimeout, ok := params["dial timeout"] - if ok { - timeout, err := strconv.ParseUint(strdialtimeout, 0, 16) - if err != nil { - f := "Invalid dial timeout '%v': %v" - return p, fmt.Errorf(f, strdialtimeout, err.Error()) - } - p.dial_timeout = time.Duration(timeout) * time.Second - } - - // default keep alive should be 30 seconds according to spec: - // https://msdn.microsoft.com/en-us/library/dd341108.aspx - p.keepAlive = 30 * time.Second - - keepAlive, ok := params["keepalive"] - if ok { - timeout, err := strconv.ParseUint(keepAlive, 0, 16) - if err != nil { - f := "Invalid keepAlive value '%s': %s" - return p, fmt.Errorf(f, keepAlive, err.Error()) - } - p.keepAlive = time.Duration(timeout) * time.Second - } - encrypt, ok := params["encrypt"] - if ok { - if strings.ToUpper(encrypt) == "DISABLE" { - p.disableEncryption = true - } else { - var err error - p.encrypt, err = strconv.ParseBool(encrypt) - if err != nil { - f := "Invalid encrypt '%s': %s" - return p, fmt.Errorf(f, encrypt, err.Error()) - } - } - } else { - p.trustServerCertificate = true - } - trust, ok := params["trustservercertificate"] - if ok { - var err error - p.trustServerCertificate, err = strconv.ParseBool(trust) - if err != nil { - f := "Invalid trust server certificate '%s': %s" - return p, fmt.Errorf(f, trust, err.Error()) - } - } - p.certificate = params["certificate"] - p.hostInCertificate, ok = params["hostnameincertificate"] - if !ok { - p.hostInCertificate = p.host - } - - serverSPN, ok := params["serverspn"] - if ok { - p.serverSPN = serverSPN - } else { - p.serverSPN = fmt.Sprintf("MSSQLSvc/%s:%d", p.host, p.port) - } - - workstation, ok := params["workstation id"] - if ok { - p.workstation = workstation - } else { - workstation, err := os.Hostname() - if err == nil { - p.workstation = workstation - } - } - - appname, ok := params["app name"] - if !ok { - appname = "go-mssqldb" - } - p.appname = appname - - appintent, ok := params["applicationintent"] - if ok { - if appintent == "ReadOnly" { - p.typeFlags |= fReadOnlyIntent - } - } - - failOverPartner, ok := params["failoverpartner"] - if ok { - p.failOverPartner = failOverPartner - } - - failOverPort, ok := params["failoverport"] - if ok { - var err error - p.failOverPort, err = strconv.ParseUint(failOverPort, 0, 16) - if err != nil { - f := "Invalid tcp port '%v': %v" - return p, fmt.Errorf(f, failOverPort, err.Error()) - } - } - - return p, nil -} - -type Auth interface { - InitialBytes() ([]byte, error) - NextBytes([]byte) ([]byte, error) - Free() -} - -// SQL Server AlwaysOn Availability Group Listeners are bound by DNS to a -// list of IP addresses. So if there is more than one, try them all and -// use the first one that allows a connection. -func dialConnection(p connectParams) (conn net.Conn, err error) { - var ips []net.IP - ips, err = net.LookupIP(p.host) - if err != nil { - ip := net.ParseIP(p.host) - if ip == nil { - return nil, err - } - ips = []net.IP{ip} - } - if len(ips) == 1 { - d := createDialer(&p) - addr := net.JoinHostPort(ips[0].String(), strconv.Itoa(int(p.port))) - conn, err = d.Dial(addr) - - } else { - //Try Dials in parallel to avoid waiting for timeouts. - connChan := make(chan net.Conn, len(ips)) - errChan := make(chan error, len(ips)) - portStr := strconv.Itoa(int(p.port)) - for _, ip := range ips { - go func(ip net.IP) { - d := createDialer(&p) - addr := net.JoinHostPort(ip.String(), portStr) - conn, err := d.Dial(addr) - if err == nil { - connChan <- conn - } else { - errChan <- err - } - }(ip) - } - // Wait for either the *first* successful connection, or all the errors - wait_loop: - for i, _ := range ips { - select { - case conn = <-connChan: - // Got a connection to use, close any others - go func(n int) { - for i := 0; i < n; i++ { - select { - case conn := <-connChan: - conn.Close() - case <-errChan: - } - } - }(len(ips) - i - 1) - // Remove any earlier errors we may have collected - err = nil - break wait_loop - case err = <-errChan: - } - } - } - // Can't do the usual err != nil check, as it is possible to have gotten an error before a successful connection - if conn == nil { - f := "Unable to open tcp connection with host '%v:%v': %v" - return nil, fmt.Errorf(f, p.host, p.port, err.Error()) - } - - return conn, err -} - -func connect(log optionalLogger, p connectParams) (res *tdsSession, err error) { - res = nil - // if instance is specified use instance resolution service - if p.instance != "" { - p.instance = strings.ToUpper(p.instance) - instances, err := getInstances(p.host) - if err != nil { - f := "Unable to get instances from Sql Server Browser on host %v: %v" - return nil, fmt.Errorf(f, p.host, err.Error()) - } - strport, ok := instances[p.instance]["tcp"] - if !ok { - f := "No instance matching '%v' returned from host '%v'" - return nil, fmt.Errorf(f, p.instance, p.host) - } - p.port, err = strconv.ParseUint(strport, 0, 16) - if err != nil { - f := "Invalid tcp port returned from Sql Server Browser '%v': %v" - return nil, fmt.Errorf(f, strport, err.Error()) - } - } - -initiate_connection: - conn, err := dialConnection(p) - if err != nil { - return nil, err - } - - toconn := NewTimeoutConn(conn, p.conn_timeout) - - outbuf := newTdsBuffer(4096, toconn) - sess := tdsSession{ - buf: outbuf, - log: log, - logFlags: p.logFlags, - } - - instance_buf := []byte(p.instance) - instance_buf = append(instance_buf, 0) // zero terminate instance name - var encrypt byte - if p.disableEncryption { - encrypt = encryptNotSup - } else if p.encrypt { - encrypt = encryptOn - } else { - encrypt = encryptOff - } - fields := map[uint8][]byte{ - preloginVERSION: {0, 0, 0, 0, 0, 0}, - preloginENCRYPTION: {encrypt}, - preloginINSTOPT: instance_buf, - preloginTHREADID: {0, 0, 0, 0}, - preloginMARS: {0}, // MARS disabled - } - - err = writePrelogin(outbuf, fields) - if err != nil { - return nil, err - } - - fields, err = readPrelogin(outbuf) - if err != nil { - return nil, err - } - - encryptBytes, ok := fields[preloginENCRYPTION] - if !ok { - return nil, fmt.Errorf("Encrypt negotiation failed") - } - encrypt = encryptBytes[0] - if p.encrypt && (encrypt == encryptNotSup || encrypt == encryptOff) { - return nil, fmt.Errorf("Server does not support encryption") - } - - if encrypt != encryptNotSup { - var config tls.Config - if p.certificate != "" { - pem, err := ioutil.ReadFile(p.certificate) - if err != nil { - f := "Cannot read certificate '%s': %s" - return nil, fmt.Errorf(f, p.certificate, err.Error()) - } - certs := x509.NewCertPool() - certs.AppendCertsFromPEM(pem) - config.RootCAs = certs - } - if p.trustServerCertificate { - config.InsecureSkipVerify = true - } - config.ServerName = p.hostInCertificate - outbuf.transport = conn - toconn.buf = outbuf - tlsConn := tls.Client(toconn, &config) - err = tlsConn.Handshake() - toconn.buf = nil - outbuf.transport = tlsConn - if err != nil { - f := "TLS Handshake failed: %s" - return nil, fmt.Errorf(f, err.Error()) - } - if encrypt == encryptOff { - outbuf.afterFirst = func() { - outbuf.transport = toconn - } - } - } - - login := login{ - TDSVersion: verTDS74, - PacketSize: outbuf.PackageSize(), - Database: p.database, - OptionFlags2: fODBC, // to get unlimited TEXTSIZE - HostName: p.workstation, - ServerName: p.host, - AppName: p.appname, - TypeFlags: p.typeFlags, - } - auth, auth_ok := getAuth(p.user, p.password, p.serverSPN, p.workstation) - if auth_ok { - login.SSPI, err = auth.InitialBytes() - if err != nil { - return nil, err - } - login.OptionFlags2 |= fIntSecurity - defer auth.Free() - } else { - login.UserName = p.user - login.Password = p.password - } - err = sendLogin(outbuf, login) - if err != nil { - return nil, err - } - - // processing login response - var sspi_msg []byte -continue_login: - tokchan := make(chan tokenStruct, 5) - go processResponse(context.Background(), &sess, tokchan) - success := false - for tok := range tokchan { - switch token := tok.(type) { - case sspiMsg: - sspi_msg, err = auth.NextBytes(token) - if err != nil { - return nil, err - } - case loginAckStruct: - success = true - sess.loginAck = token - case error: - return nil, fmt.Errorf("Login error: %s", token.Error()) - } - } - if sspi_msg != nil { - outbuf.BeginPacket(packSSPIMessage) - _, err = outbuf.Write(sspi_msg) - if err != nil { - return nil, err - } - err = outbuf.FinishPacket() - if err != nil { - return nil, err - } - sspi_msg = nil - goto continue_login - } - if !success { - return nil, fmt.Errorf("Login failed") - } - if sess.routedServer != "" { - toconn.Close() - p.host = sess.routedServer - p.port = uint64(sess.routedPort) - goto initiate_connection - } - return &sess, nil -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/token.go b/vendor/github.com/denisenkom/go-mssqldb/token.go deleted file mode 100644 index 6b84f94d7..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/token.go +++ /dev/null @@ -1,754 +0,0 @@ -package mssql - -import ( - "encoding/binary" - "errors" - "io" - "net" - "strconv" - "strings" - - "golang.org/x/net/context" -) - -//go:generate stringer -type token - -type token byte - -// token ids -const ( - tokenReturnStatus token = 121 // 0x79 - tokenColMetadata token = 129 // 0x81 - tokenOrder token = 169 // 0xA9 - tokenError token = 170 // 0xAA - tokenInfo token = 171 // 0xAB - tokenLoginAck token = 173 // 0xad - tokenRow token = 209 // 0xd1 - tokenNbcRow token = 210 // 0xd2 - tokenEnvChange token = 227 // 0xE3 - tokenSSPI token = 237 // 0xED - tokenDone token = 253 // 0xFD - tokenDoneProc token = 254 - tokenDoneInProc token = 255 -) - -// done flags -// https://msdn.microsoft.com/en-us/library/dd340421.aspx -const ( - doneFinal = 0 - doneMore = 1 - doneError = 2 - doneInxact = 4 - doneCount = 0x10 - doneAttn = 0x20 - doneSrvError = 0x100 -) - -// ENVCHANGE types -// http://msdn.microsoft.com/en-us/library/dd303449.aspx -const ( - envTypDatabase = 1 - envTypLanguage = 2 - envTypCharset = 3 - envTypPacketSize = 4 - envSortId = 5 - envSortFlags = 6 - envSqlCollation = 7 - envTypBeginTran = 8 - envTypCommitTran = 9 - envTypRollbackTran = 10 - envEnlistDTC = 11 - envDefectTran = 12 - envDatabaseMirrorPartner = 13 - envPromoteTran = 15 - envTranMgrAddr = 16 - envTranEnded = 17 - envResetConnAck = 18 - envStartedInstanceName = 19 - envRouting = 20 -) - -// COLMETADATA flags -// https://msdn.microsoft.com/en-us/library/dd357363.aspx -const ( - colFlagNullable = 1 - // TODO implement more flags -) - -// interface for all tokens -type tokenStruct interface{} - -type orderStruct struct { - ColIds []uint16 -} - -type doneStruct struct { - Status uint16 - CurCmd uint16 - RowCount uint64 - errors []Error -} - -func (d doneStruct) isError() bool { - return d.Status&doneError != 0 || len(d.errors) > 0 -} - -func (d doneStruct) getError() Error { - if len(d.errors) > 0 { - return d.errors[len(d.errors)-1] - } else { - return Error{Message: "Request failed but didn't provide reason"} - } -} - -type doneInProcStruct doneStruct - -var doneFlags2str = map[uint16]string{ - doneFinal: "final", - doneMore: "more", - doneError: "error", - doneInxact: "inxact", - doneCount: "count", - doneAttn: "attn", - doneSrvError: "srverror", -} - -func doneFlags2Str(flags uint16) string { - strs := make([]string, 0, len(doneFlags2str)) - for flag, tag := range doneFlags2str { - if flags&flag != 0 { - strs = append(strs, tag) - } - } - return strings.Join(strs, "|") -} - -// ENVCHANGE stream -// http://msdn.microsoft.com/en-us/library/dd303449.aspx -func processEnvChg(sess *tdsSession) { - size := sess.buf.uint16() - r := &io.LimitedReader{R: sess.buf, N: int64(size)} - for { - var err error - var envtype uint8 - err = binary.Read(r, binary.LittleEndian, &envtype) - if err == io.EOF { - return - } - if err != nil { - badStreamPanic(err) - } - switch envtype { - case envTypDatabase: - sess.database, err = readBVarChar(r) - if err != nil { - badStreamPanic(err) - } - _, err = readBVarChar(r) - if err != nil { - badStreamPanic(err) - } - case envTypLanguage: - //currently ignored - // old value - _, err = readBVarChar(r) - if err != nil { - badStreamPanic(err) - } - // new value - _, err = readBVarChar(r) - if err != nil { - badStreamPanic(err) - } - case envTypCharset: - //currently ignored - // old value - _, err = readBVarChar(r) - if err != nil { - badStreamPanic(err) - } - // new value - _, err = readBVarChar(r) - if err != nil { - badStreamPanic(err) - } - case envTypPacketSize: - packetsize, err := readBVarChar(r) - if err != nil { - badStreamPanic(err) - } - _, err = readBVarChar(r) - if err != nil { - badStreamPanic(err) - } - packetsizei, err := strconv.Atoi(packetsize) - if err != nil { - badStreamPanicf("Invalid Packet size value returned from server (%s): %s", packetsize, err.Error()) - } - sess.buf.ResizeBuffer(packetsizei) - case envSortId: - // currently ignored - // old value, should be 0 - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - // new value - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - case envSortFlags: - // currently ignored - // old value, should be 0 - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - // new value - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - case envSqlCollation: - // currently ignored - // old value - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - // new value - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - case envTypBeginTran: - tranid, err := readBVarByte(r) - if len(tranid) != 8 { - badStreamPanicf("invalid size of transaction identifier: %d", len(tranid)) - } - sess.tranid = binary.LittleEndian.Uint64(tranid) - if err != nil { - badStreamPanic(err) - } - if sess.logFlags&logTransaction != 0 { - sess.log.Printf("BEGIN TRANSACTION %x\n", sess.tranid) - } - _, err = readBVarByte(r) - if err != nil { - badStreamPanic(err) - } - case envTypCommitTran, envTypRollbackTran: - _, err = readBVarByte(r) - if err != nil { - badStreamPanic(err) - } - _, err = readBVarByte(r) - if err != nil { - badStreamPanic(err) - } - if sess.logFlags&logTransaction != 0 { - if envtype == envTypCommitTran { - sess.log.Printf("COMMIT TRANSACTION %x\n", sess.tranid) - } else { - sess.log.Printf("ROLLBACK TRANSACTION %x\n", sess.tranid) - } - } - sess.tranid = 0 - case envEnlistDTC: - // currently ignored - // old value - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - // new value, should be 0 - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - case envDefectTran: - // currently ignored - // old value, should be 0 - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - // new value - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - case envDatabaseMirrorPartner: - sess.partner, err = readBVarChar(r) - if err != nil { - badStreamPanic(err) - } - _, err = readBVarChar(r) - if err != nil { - badStreamPanic(err) - } - case envPromoteTran: - // currently ignored - // old value, should be 0 - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - // dtc token - // spec says it should be L_VARBYTE, so this code might be wrong - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - case envTranMgrAddr: - // currently ignored - // old value, should be 0 - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - // XACT_MANAGER_ADDRESS = B_VARBYTE - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - case envTranEnded: - // currently ignored - // old value, B_VARBYTE - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - // should be 0 - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - case envResetConnAck: - // currently ignored - // old value, should be 0 - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - // should be 0 - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - case envStartedInstanceName: - // currently ignored - // old value, should be 0 - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - // instance name - if _, err = readBVarChar(r); err != nil { - badStreamPanic(err) - } - case envRouting: - // RoutingData message is: - // ValueLength USHORT - // Protocol (TCP = 0) BYTE - // ProtocolProperty (new port) USHORT - // AlternateServer US_VARCHAR - _, err := readUshort(r) - if err != nil { - badStreamPanic(err) - } - protocol, err := readByte(r) - if err != nil || protocol != 0 { - badStreamPanic(err) - } - newPort, err := readUshort(r) - if err != nil { - badStreamPanic(err) - } - newServer, err := readUsVarChar(r) - if err != nil { - badStreamPanic(err) - } - // consume the OLDVALUE = %x00 %x00 - _, err = readUshort(r) - if err != nil { - badStreamPanic(err) - } - sess.routedServer = newServer - sess.routedPort = newPort - default: - // ignore rest of records because we don't know how to skip those - sess.log.Printf("WARN: Unknown ENVCHANGE record detected with type id = %d\n", envtype) - break - } - - } -} - -type returnStatus int32 - -// http://msdn.microsoft.com/en-us/library/dd358180.aspx -func parseReturnStatus(r *tdsBuffer) returnStatus { - return returnStatus(r.int32()) -} - -func parseOrder(r *tdsBuffer) (res orderStruct) { - len := int(r.uint16()) - res.ColIds = make([]uint16, len/2) - for i := 0; i < len/2; i++ { - res.ColIds[i] = r.uint16() - } - return res -} - -// https://msdn.microsoft.com/en-us/library/dd340421.aspx -func parseDone(r *tdsBuffer) (res doneStruct) { - res.Status = r.uint16() - res.CurCmd = r.uint16() - res.RowCount = r.uint64() - return res -} - -// https://msdn.microsoft.com/en-us/library/dd340553.aspx -func parseDoneInProc(r *tdsBuffer) (res doneInProcStruct) { - res.Status = r.uint16() - res.CurCmd = r.uint16() - res.RowCount = r.uint64() - return res -} - -type sspiMsg []byte - -func parseSSPIMsg(r *tdsBuffer) sspiMsg { - size := r.uint16() - buf := make([]byte, size) - r.ReadFull(buf) - return sspiMsg(buf) -} - -type loginAckStruct struct { - Interface uint8 - TDSVersion uint32 - ProgName string - ProgVer uint32 -} - -func parseLoginAck(r *tdsBuffer) loginAckStruct { - size := r.uint16() - buf := make([]byte, size) - r.ReadFull(buf) - var res loginAckStruct - res.Interface = buf[0] - res.TDSVersion = binary.BigEndian.Uint32(buf[1:]) - prognamelen := buf[1+4] - var err error - if res.ProgName, err = ucs22str(buf[1+4+1 : 1+4+1+prognamelen*2]); err != nil { - badStreamPanic(err) - } - res.ProgVer = binary.BigEndian.Uint32(buf[size-4:]) - return res -} - -// http://msdn.microsoft.com/en-us/library/dd357363.aspx -func parseColMetadata72(r *tdsBuffer) (columns []columnStruct) { - count := r.uint16() - if count == 0xffff { - // no metadata is sent - return nil - } - columns = make([]columnStruct, count) - for i := range columns { - column := &columns[i] - column.UserType = r.uint32() - column.Flags = r.uint16() - - // parsing TYPE_INFO structure - column.ti = readTypeInfo(r) - column.ColName = r.BVarChar() - } - return columns -} - -// http://msdn.microsoft.com/en-us/library/dd357254.aspx -func parseRow(r *tdsBuffer, columns []columnStruct, row []interface{}) { - for i, column := range columns { - row[i] = column.ti.Reader(&column.ti, r) - } -} - -// http://msdn.microsoft.com/en-us/library/dd304783.aspx -func parseNbcRow(r *tdsBuffer, columns []columnStruct, row []interface{}) { - bitlen := (len(columns) + 7) / 8 - pres := make([]byte, bitlen) - r.ReadFull(pres) - for i, col := range columns { - if pres[i/8]&(1<<(uint(i)%8)) != 0 { - row[i] = nil - continue - } - row[i] = col.ti.Reader(&col.ti, r) - } -} - -// http://msdn.microsoft.com/en-us/library/dd304156.aspx -func parseError72(r *tdsBuffer) (res Error) { - length := r.uint16() - _ = length // ignore length - res.Number = r.int32() - res.State = r.byte() - res.Class = r.byte() - res.Message = r.UsVarChar() - res.ServerName = r.BVarChar() - res.ProcName = r.BVarChar() - res.LineNo = r.int32() - return -} - -// http://msdn.microsoft.com/en-us/library/dd304156.aspx -func parseInfo(r *tdsBuffer) (res Error) { - length := r.uint16() - _ = length // ignore length - res.Number = r.int32() - res.State = r.byte() - res.Class = r.byte() - res.Message = r.UsVarChar() - res.ServerName = r.BVarChar() - res.ProcName = r.BVarChar() - res.LineNo = r.int32() - return -} - -func processSingleResponse(sess *tdsSession, ch chan tokenStruct) { - defer func() { - if err := recover(); err != nil { - if sess.logFlags&logErrors != 0 { - sess.log.Printf("ERROR: Intercepted panic %v", err) - } - ch <- err - } - close(ch) - }() - - packet_type, err := sess.buf.BeginRead() - if err != nil { - if sess.logFlags&logErrors != 0 { - sess.log.Printf("ERROR: BeginRead failed %v", err) - } - ch <- err - return - } - if packet_type != packReply { - badStreamPanicf("invalid response packet type, expected REPLY, actual: %d", packet_type) - } - var columns []columnStruct - errs := make([]Error, 0, 5) - for { - token := token(sess.buf.byte()) - if sess.logFlags&logDebug != 0 { - sess.log.Printf("got token %v", token) - } - switch token { - case tokenSSPI: - ch <- parseSSPIMsg(sess.buf) - return - case tokenReturnStatus: - returnStatus := parseReturnStatus(sess.buf) - ch <- returnStatus - case tokenLoginAck: - loginAck := parseLoginAck(sess.buf) - ch <- loginAck - case tokenOrder: - order := parseOrder(sess.buf) - ch <- order - case tokenDoneInProc: - done := parseDoneInProc(sess.buf) - if sess.logFlags&logRows != 0 && done.Status&doneCount != 0 { - sess.log.Printf("(%d row(s) affected)\n", done.RowCount) - } - ch <- done - case tokenDone, tokenDoneProc: - done := parseDone(sess.buf) - done.errors = errs - if sess.logFlags&logDebug != 0 { - sess.log.Printf("got DONE or DONEPROC status=%d", done.Status) - } - if done.Status&doneSrvError != 0 { - ch <- errors.New("SQL Server had internal error") - return - } - if sess.logFlags&logRows != 0 && done.Status&doneCount != 0 { - sess.log.Printf("(%d row(s) affected)\n", done.RowCount) - } - ch <- done - if done.Status&doneMore == 0 { - return - } - case tokenColMetadata: - columns = parseColMetadata72(sess.buf) - ch <- columns - case tokenRow: - row := make([]interface{}, len(columns)) - parseRow(sess.buf, columns, row) - ch <- row - case tokenNbcRow: - row := make([]interface{}, len(columns)) - parseNbcRow(sess.buf, columns, row) - ch <- row - case tokenEnvChange: - processEnvChg(sess) - case tokenError: - err := parseError72(sess.buf) - if sess.logFlags&logDebug != 0 { - sess.log.Printf("got ERROR %d %s", err.Number, err.Message) - } - errs = append(errs, err) - if sess.logFlags&logErrors != 0 { - sess.log.Println(err.Message) - } - case tokenInfo: - info := parseInfo(sess.buf) - if sess.logFlags&logDebug != 0 { - sess.log.Printf("got INFO %d %s", info.Number, info.Message) - } - if sess.logFlags&logMessages != 0 { - sess.log.Println(info.Message) - } - default: - badStreamPanicf("Unknown token type: %d", token) - } - } -} - -type parseRespIter byte - -const ( - parseRespIterContinue parseRespIter = iota // Continue parsing current token. - parseRespIterNext // Fetch the next token. - parseRespIterDone // Done with parsing the response. -) - -type parseRespState byte - -const ( - parseRespStateNormal parseRespState = iota // Normal response state. - parseRespStateCancel // Query is canceled, wait for server to confirm. - parseRespStateClosing // Waiting for tokens to come through. -) - -type parseResp struct { - sess *tdsSession - ctxDone <-chan struct{} - state parseRespState - cancelError error -} - -func (ts *parseResp) sendAttention(ch chan tokenStruct) parseRespIter { - if err := sendAttention(ts.sess.buf); err != nil { - ts.dlogf("failed to send attention signal %v", err) - ch <- err - return parseRespIterDone - } - ts.state = parseRespStateCancel - return parseRespIterContinue -} - -func (ts *parseResp) dlog(msg string) { - if ts.sess.logFlags&logDebug != 0 { - ts.sess.log.Println(msg) - } -} -func (ts *parseResp) dlogf(f string, v ...interface{}) { - if ts.sess.logFlags&logDebug != 0 { - ts.sess.log.Printf(f, v...) - } -} - -func (ts *parseResp) iter(ctx context.Context, ch chan tokenStruct, tokChan chan tokenStruct) parseRespIter { - switch ts.state { - default: - panic("unknown state") - case parseRespStateNormal: - select { - case tok, ok := <-tokChan: - if !ok { - ts.dlog("response finished") - return parseRespIterDone - } - if err, ok := tok.(net.Error); ok && err.Timeout() { - ts.cancelError = err - ts.dlog("got timeout error, sending attention signal to server") - return ts.sendAttention(ch) - } - // Pass the token along. - ch <- tok - return parseRespIterContinue - - case <-ts.ctxDone: - ts.ctxDone = nil - ts.dlog("got cancel message, sending attention signal to server") - return ts.sendAttention(ch) - } - case parseRespStateCancel: // Read all responses until a DONE or error is received.Auth - select { - case tok, ok := <-tokChan: - if !ok { - ts.dlog("response finished but waiting for attention ack") - return parseRespIterNext - } - switch tok := tok.(type) { - default: - // Ignore all other tokens while waiting. - // The TDS spec says other tokens may arrive after an attention - // signal is sent. Ignore these tokens and continue looking for - // a DONE with attention confirm mark. - case doneStruct: - if tok.Status&doneAttn != 0 { - ts.dlog("got cancellation confirmation from server") - if ts.cancelError != nil { - ch <- ts.cancelError - ts.cancelError = nil - } else { - ch <- ctx.Err() - } - return parseRespIterDone - } - - // If an error happens during cancel, pass it along and just stop. - // We are uncertain to receive more tokens. - case error: - ch <- tok - ts.state = parseRespStateClosing - } - return parseRespIterContinue - case <-ts.ctxDone: - ts.ctxDone = nil - ts.state = parseRespStateClosing - return parseRespIterContinue - } - case parseRespStateClosing: // Wait for current token chan to close. - if _, ok := <-tokChan; !ok { - ts.dlog("response finished") - return parseRespIterDone - } - return parseRespIterContinue - } -} - -func processResponse(ctx context.Context, sess *tdsSession, ch chan tokenStruct) { - ts := &parseResp{ - sess: sess, - ctxDone: ctx.Done(), - } - defer func() { - // Ensure any remaining error is piped through - // or the query may look like it executed when it actually failed. - if ts.cancelError != nil { - ch <- ts.cancelError - ts.cancelError = nil - } - close(ch) - }() - - // Loop over multiple responses. - for { - ts.dlog("initiating resonse reading") - - tokChan := make(chan tokenStruct) - go processSingleResponse(sess, tokChan) - - // Loop over multiple tokens in response. - tokensLoop: - for { - switch ts.iter(ctx, ch, tokChan) { - case parseRespIterContinue: - // Nothing, continue to next token. - case parseRespIterNext: - break tokensLoop - case parseRespIterDone: - return - } - } - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/token_string.go b/vendor/github.com/denisenkom/go-mssqldb/token_string.go deleted file mode 100644 index c075b23be..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/token_string.go +++ /dev/null @@ -1,53 +0,0 @@ -// Code generated by "stringer -type token"; DO NOT EDIT - -package mssql - -import "fmt" - -const ( - _token_name_0 = "tokenReturnStatus" - _token_name_1 = "tokenColMetadata" - _token_name_2 = "tokenOrdertokenErrortokenInfo" - _token_name_3 = "tokenLoginAck" - _token_name_4 = "tokenRowtokenNbcRow" - _token_name_5 = "tokenEnvChange" - _token_name_6 = "tokenSSPI" - _token_name_7 = "tokenDonetokenDoneProctokenDoneInProc" -) - -var ( - _token_index_0 = [...]uint8{0, 17} - _token_index_1 = [...]uint8{0, 16} - _token_index_2 = [...]uint8{0, 10, 20, 29} - _token_index_3 = [...]uint8{0, 13} - _token_index_4 = [...]uint8{0, 8, 19} - _token_index_5 = [...]uint8{0, 14} - _token_index_6 = [...]uint8{0, 9} - _token_index_7 = [...]uint8{0, 9, 22, 37} -) - -func (i token) String() string { - switch { - case i == 121: - return _token_name_0 - case i == 129: - return _token_name_1 - case 169 <= i && i <= 171: - i -= 169 - return _token_name_2[_token_index_2[i]:_token_index_2[i+1]] - case i == 173: - return _token_name_3 - case 209 <= i && i <= 210: - i -= 209 - return _token_name_4[_token_index_4[i]:_token_index_4[i+1]] - case i == 227: - return _token_name_5 - case i == 237: - return _token_name_6 - case 253 <= i && i <= 255: - i -= 253 - return _token_name_7[_token_index_7[i]:_token_index_7[i+1]] - default: - return fmt.Sprintf("token(%d)", i) - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/tran.go b/vendor/github.com/denisenkom/go-mssqldb/tran.go deleted file mode 100644 index 75e7a2ae6..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/tran.go +++ /dev/null @@ -1,111 +0,0 @@ -package mssql - -// Transaction Manager requests -// http://msdn.microsoft.com/en-us/library/dd339887.aspx - -import ( - "encoding/binary" -) - -const ( - tmGetDtcAddr = 0 - tmPropagateXact = 1 - tmBeginXact = 5 - tmPromoteXact = 6 - tmCommitXact = 7 - tmRollbackXact = 8 - tmSaveXact = 9 -) - -type isoLevel uint8 - -const ( - isolationUseCurrent isoLevel = 0 - isolationReadUncommited = 1 - isolationReadCommited = 2 - isolationRepeatableRead = 3 - isolationSerializable = 4 - isolationSnapshot = 5 -) - -func sendBeginXact(buf *tdsBuffer, headers []headerStruct, isolation isoLevel, - name string) (err error) { - buf.BeginPacket(packTransMgrReq) - writeAllHeaders(buf, headers) - var rqtype uint16 = tmBeginXact - err = binary.Write(buf, binary.LittleEndian, &rqtype) - if err != nil { - return - } - err = binary.Write(buf, binary.LittleEndian, &isolation) - if err != nil { - return - } - err = writeBVarChar(buf, name) - if err != nil { - return - } - return buf.FinishPacket() -} - -const ( - fBeginXact = 1 -) - -func sendCommitXact(buf *tdsBuffer, headers []headerStruct, name string, flags uint8, isolation uint8, newname string) error { - buf.BeginPacket(packTransMgrReq) - writeAllHeaders(buf, headers) - var rqtype uint16 = tmCommitXact - err := binary.Write(buf, binary.LittleEndian, &rqtype) - if err != nil { - return err - } - err = writeBVarChar(buf, name) - if err != nil { - return err - } - err = binary.Write(buf, binary.LittleEndian, &flags) - if err != nil { - return err - } - if flags&fBeginXact != 0 { - err = binary.Write(buf, binary.LittleEndian, &isolation) - if err != nil { - return err - } - err = writeBVarChar(buf, name) - if err != nil { - return err - } - } - return buf.FinishPacket() -} - -func sendRollbackXact(buf *tdsBuffer, headers []headerStruct, name string, flags uint8, isolation uint8, newname string) error { - buf.BeginPacket(packTransMgrReq) - writeAllHeaders(buf, headers) - var rqtype uint16 = tmRollbackXact - err := binary.Write(buf, binary.LittleEndian, &rqtype) - if err != nil { - return err - } - err = writeBVarChar(buf, name) - if err != nil { - return err - } - err = binary.Write(buf, binary.LittleEndian, &flags) - if err != nil { - return err - } - if flags&fBeginXact != 0 { - err = binary.Write(buf, binary.LittleEndian, &isolation) - if err != nil { - return err - } - err = writeBVarChar(buf, name) - if err != nil { - return err - } - } - return buf.FinishPacket() -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/types.go b/vendor/github.com/denisenkom/go-mssqldb/types.go deleted file mode 100644 index 065af68cf..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/types.go +++ /dev/null @@ -1,1261 +0,0 @@ -package mssql - -import ( - "bytes" - "encoding/binary" - "fmt" - "io" - "math" - "strconv" - "time" - "reflect" -) - -// fixed-length data types -// http://msdn.microsoft.com/en-us/library/dd341171.aspx -const ( - typeNull = 0x1f - typeInt1 = 0x30 - typeBit = 0x32 - typeInt2 = 0x34 - typeInt4 = 0x38 - typeDateTim4 = 0x3a - typeFlt4 = 0x3b - typeMoney = 0x3c - typeDateTime = 0x3d - typeFlt8 = 0x3e - typeMoney4 = 0x7a - typeInt8 = 0x7f -) - -// variable-length data types -// http://msdn.microsoft.com/en-us/library/dd358341.aspx -const ( - // byte len types - typeGuid = 0x24 - typeIntN = 0x26 - typeDecimal = 0x37 // legacy - typeNumeric = 0x3f // legacy - typeBitN = 0x68 - typeDecimalN = 0x6a - typeNumericN = 0x6c - typeFltN = 0x6d - typeMoneyN = 0x6e - typeDateTimeN = 0x6f - typeDateN = 0x28 - typeTimeN = 0x29 - typeDateTime2N = 0x2a - typeDateTimeOffsetN = 0x2b - typeChar = 0x2f // legacy - typeVarChar = 0x27 // legacy - typeBinary = 0x2d // legacy - typeVarBinary = 0x25 // legacy - - // short length types - typeBigVarBin = 0xa5 - typeBigVarChar = 0xa7 - typeBigBinary = 0xad - typeBigChar = 0xaf - typeNVarChar = 0xe7 - typeNChar = 0xef - typeXml = 0xf1 - typeUdt = 0xf0 - - // long length types - typeText = 0x23 - typeImage = 0x22 - typeNText = 0x63 - typeVariant = 0x62 -) - -// TYPE_INFO rule -// http://msdn.microsoft.com/en-us/library/dd358284.aspx -type typeInfo struct { - TypeId uint8 - Size int - Scale uint8 - Prec uint8 - Buffer []byte - Collation collation - Reader func(ti *typeInfo, r *tdsBuffer) (res interface{}) - Writer func(w io.Writer, ti typeInfo, buf []byte) (err error) -} - -func readTypeInfo(r *tdsBuffer) (res typeInfo) { - res.TypeId = r.byte() - switch res.TypeId { - case typeNull, typeInt1, typeBit, typeInt2, typeInt4, typeDateTim4, - typeFlt4, typeMoney, typeDateTime, typeFlt8, typeMoney4, typeInt8: - // those are fixed length types - switch res.TypeId { - case typeNull: - res.Size = 0 - case typeInt1, typeBit: - res.Size = 1 - case typeInt2: - res.Size = 2 - case typeInt4, typeDateTim4, typeFlt4, typeMoney4: - res.Size = 4 - case typeMoney, typeDateTime, typeFlt8, typeInt8: - res.Size = 8 - } - res.Reader = readFixedType - res.Buffer = make([]byte, res.Size) - default: // all others are VARLENTYPE - readVarLen(&res, r) - } - return -} - -func writeTypeInfo(w io.Writer, ti *typeInfo) (err error) { - err = binary.Write(w, binary.LittleEndian, ti.TypeId) - if err != nil { - return - } - switch ti.TypeId { - case typeNull, typeInt1, typeBit, typeInt2, typeInt4, typeDateTim4, - typeFlt4, typeMoney, typeDateTime, typeFlt8, typeMoney4, typeInt8: - // those are fixed length types - default: // all others are VARLENTYPE - err = writeVarLen(w, ti) - if err != nil { - return - } - } - return -} - -func writeVarLen(w io.Writer, ti *typeInfo) (err error) { - switch ti.TypeId { - case typeDateN: - - case typeTimeN, typeDateTime2N, typeDateTimeOffsetN: - if err = binary.Write(w, binary.LittleEndian, ti.Scale); err != nil { - return - } - ti.Writer = writeByteLenType - case typeIntN, typeDecimal, typeNumeric, - typeBitN, typeDecimalN, typeNumericN, typeFltN, - typeMoneyN, typeDateTimeN, typeChar, - typeVarChar, typeBinary, typeVarBinary: - - // byle len types - if ti.Size > 0xff { - panic("Invalid size for BYLELEN_TYPE") - } - if err = binary.Write(w, binary.LittleEndian, uint8(ti.Size)); err != nil { - return - } - switch ti.TypeId { - case typeDecimal, typeNumeric, typeDecimalN, typeNumericN: - err = binary.Write(w, binary.LittleEndian, ti.Prec) - if err != nil { - return - } - err = binary.Write(w, binary.LittleEndian, ti.Scale) - if err != nil { - return - } - } - ti.Writer = writeByteLenType - case typeGuid: - if !(ti.Size == 0x10 || ti.Size == 0x00) { - panic("Invalid size for BYLELEN_TYPE") - } - if err = binary.Write(w, binary.LittleEndian, uint8(ti.Size)); err != nil { - return - } - ti.Writer = writeByteLenType - case typeBigVarBin, typeBigVarChar, typeBigBinary, typeBigChar, - typeNVarChar, typeNChar, typeXml, typeUdt: - // short len types - if ti.Size > 8000 || ti.Size == 0 { - if err = binary.Write(w, binary.LittleEndian, uint16(0xffff)); err != nil { - return - } - ti.Writer = writePLPType - } else { - if err = binary.Write(w, binary.LittleEndian, uint16(ti.Size)); err != nil { - return - } - ti.Writer = writeShortLenType - } - switch ti.TypeId { - case typeBigVarChar, typeBigChar, typeNVarChar, typeNChar: - if err = writeCollation(w, ti.Collation); err != nil { - return - } - case typeXml: - var schemapresent uint8 = 0 - if err = binary.Write(w, binary.LittleEndian, schemapresent); err != nil { - return - } - } - case typeText, typeImage, typeNText, typeVariant: - // LONGLEN_TYPE - panic("LONGLEN_TYPE not implemented") - default: - panic("Invalid type") - } - return -} - -// http://msdn.microsoft.com/en-us/library/ee780895.aspx -func decodeDateTim4(buf []byte) time.Time { - days := binary.LittleEndian.Uint16(buf) - mins := binary.LittleEndian.Uint16(buf[2:]) - return time.Date(1900, 1, 1+int(days), - 0, int(mins), 0, 0, time.UTC) -} - -func decodeDateTime(buf []byte) time.Time { - days := int32(binary.LittleEndian.Uint32(buf)) - tm := binary.LittleEndian.Uint32(buf[4:]) - ns := int(math.Trunc(float64(tm%300)/0.3+0.5)) * 1000000 - secs := int(tm / 300) - return time.Date(1900, 1, 1+int(days), - 0, 0, secs, ns, time.UTC) -} - -func readFixedType(ti *typeInfo, r *tdsBuffer) (interface{}) { - r.ReadFull(ti.Buffer) - buf := ti.Buffer - switch ti.TypeId { - case typeNull: - return nil - case typeInt1: - return int64(buf[0]) - case typeBit: - return buf[0] != 0 - case typeInt2: - return int64(int16(binary.LittleEndian.Uint16(buf))) - case typeInt4: - return int64(int32(binary.LittleEndian.Uint32(buf))) - case typeDateTim4: - return decodeDateTim4(buf) - case typeFlt4: - return math.Float32frombits(binary.LittleEndian.Uint32(buf)) - case typeMoney4: - return decodeMoney4(buf) - case typeMoney: - return decodeMoney(buf) - case typeDateTime: - return decodeDateTime(buf) - case typeFlt8: - return math.Float64frombits(binary.LittleEndian.Uint64(buf)) - case typeInt8: - return int64(binary.LittleEndian.Uint64(buf)) - default: - badStreamPanicf("Invalid typeid") - } - panic("shoulnd't get here") -} - -func readByteLenType(ti *typeInfo, r *tdsBuffer) (interface{}) { - size := r.byte() - if size == 0 { - return nil - } - r.ReadFull(ti.Buffer[:size]) - buf := ti.Buffer[:size] - switch ti.TypeId { - case typeDateN: - if len(buf) != 3 { - badStreamPanicf("Invalid size for DATENTYPE") - } - return decodeDate(buf) - case typeTimeN: - return decodeTime(ti.Scale, buf) - case typeDateTime2N: - return decodeDateTime2(ti.Scale, buf) - case typeDateTimeOffsetN: - return decodeDateTimeOffset(ti.Scale, buf) - case typeGuid: - return decodeGuid(buf) - case typeIntN: - switch len(buf) { - case 1: - return int64(buf[0]) - case 2: - return int64(int16((binary.LittleEndian.Uint16(buf)))) - case 4: - return int64(int32(binary.LittleEndian.Uint32(buf))) - case 8: - return int64(binary.LittleEndian.Uint64(buf)) - default: - badStreamPanicf("Invalid size for INTNTYPE") - } - case typeDecimal, typeNumeric, typeDecimalN, typeNumericN: - return decodeDecimal(ti.Prec, ti.Scale, buf) - case typeBitN: - if len(buf) != 1 { - badStreamPanicf("Invalid size for BITNTYPE") - } - return buf[0] != 0 - case typeFltN: - switch len(buf) { - case 4: - return float64(math.Float32frombits(binary.LittleEndian.Uint32(buf))) - case 8: - return math.Float64frombits(binary.LittleEndian.Uint64(buf)) - default: - badStreamPanicf("Invalid size for FLTNTYPE") - } - case typeMoneyN: - switch len(buf) { - case 4: - return decodeMoney4(buf) - case 8: - return decodeMoney(buf) - default: - badStreamPanicf("Invalid size for MONEYNTYPE") - } - case typeDateTimeN: - switch len(buf) { - case 4: - return decodeDateTim4(buf) - case 8: - return decodeDateTime(buf) - default: - badStreamPanicf("Invalid size for DATETIMENTYPE") - } - case typeChar, typeVarChar: - return decodeChar(ti.Collation, buf) - case typeBinary, typeVarBinary: - // a copy, because the backing array for ti.Buffer is reused - // and can be overwritten by the next row while this row waits - // in a buffered chan - cpy := make([]byte, len(buf)) - copy(cpy, buf) - return cpy - default: - badStreamPanicf("Invalid typeid") - } - panic("shoulnd't get here") -} - -func writeByteLenType(w io.Writer, ti typeInfo, buf []byte) (err error) { - if ti.Size > 0xff { - panic("Invalid size for BYTELEN_TYPE") - } - err = binary.Write(w, binary.LittleEndian, uint8(ti.Size)) - if err != nil { - return - } - _, err = w.Write(buf) - return -} - -func readShortLenType(ti *typeInfo, r *tdsBuffer) (interface{}) { - size := r.uint16() - if size == 0xffff { - return nil - } - r.ReadFull(ti.Buffer[:size]) - buf := ti.Buffer[:size] - switch ti.TypeId { - case typeBigVarChar, typeBigChar: - return decodeChar(ti.Collation, buf) - case typeBigVarBin, typeBigBinary: - // a copy, because the backing array for ti.Buffer is reused - // and can be overwritten by the next row while this row waits - // in a buffered chan - cpy := make([]byte, len(buf)) - copy(cpy, buf) - return cpy - case typeNVarChar, typeNChar: - return decodeNChar(buf) - case typeUdt: - return decodeUdt(*ti, buf) - default: - badStreamPanicf("Invalid typeid") - } - panic("shoulnd't get here") -} - -func writeShortLenType(w io.Writer, ti typeInfo, buf []byte) (err error) { - if buf == nil { - err = binary.Write(w, binary.LittleEndian, uint16(0xffff)) - return - } - if ti.Size > 0xfffe { - panic("Invalid size for USHORTLEN_TYPE") - } - err = binary.Write(w, binary.LittleEndian, uint16(ti.Size)) - if err != nil { - return - } - _, err = w.Write(buf) - return -} - -func readLongLenType(ti *typeInfo, r *tdsBuffer) (interface{}) { - // information about this format can be found here: - // http://msdn.microsoft.com/en-us/library/dd304783.aspx - // and here: - // http://msdn.microsoft.com/en-us/library/dd357254.aspx - textptrsize := int(r.byte()) - if textptrsize == 0 { - return nil - } - textptr := make([]byte, textptrsize) - r.ReadFull(textptr) - timestamp := r.uint64() - _ = timestamp // ignore timestamp - size := r.int32() - if size == -1 { - return nil - } - buf := make([]byte, size) - r.ReadFull(buf) - switch ti.TypeId { - case typeText: - return decodeChar(ti.Collation, buf) - case typeImage: - return buf - case typeNText: - return decodeNChar(buf) - default: - badStreamPanicf("Invalid typeid") - } - panic("shoulnd't get here") -} - -// reads variant value -// http://msdn.microsoft.com/en-us/library/dd303302.aspx -func readVariantType(ti *typeInfo, r *tdsBuffer) (interface{}) { - size := r.int32() - if size == 0 { - return nil - } - vartype := r.byte() - propbytes := int32(r.byte()) - switch vartype { - case typeGuid: - buf := make([]byte, size-2-propbytes) - r.ReadFull(buf) - return buf - case typeBit: - return r.byte() != 0 - case typeInt1: - return int64(r.byte()) - case typeInt2: - return int64(int16(r.uint16())) - case typeInt4: - return int64(r.int32()) - case typeInt8: - return int64(r.uint64()) - case typeDateTime: - buf := make([]byte, size-2-propbytes) - r.ReadFull(buf) - return decodeDateTime(buf) - case typeDateTim4: - buf := make([]byte, size-2-propbytes) - r.ReadFull(buf) - return decodeDateTim4(buf) - case typeFlt4: - return float64(math.Float32frombits(r.uint32())) - case typeFlt8: - return math.Float64frombits(r.uint64()) - case typeMoney4: - buf := make([]byte, size-2-propbytes) - r.ReadFull(buf) - return decodeMoney4(buf) - case typeMoney: - buf := make([]byte, size-2-propbytes) - r.ReadFull(buf) - return decodeMoney(buf) - case typeDateN: - buf := make([]byte, size-2-propbytes) - r.ReadFull(buf) - return decodeDate(buf) - case typeTimeN: - scale := r.byte() - buf := make([]byte, size-2-propbytes) - r.ReadFull(buf) - return decodeTime(scale, buf) - case typeDateTime2N: - scale := r.byte() - buf := make([]byte, size-2-propbytes) - r.ReadFull(buf) - return decodeDateTime2(scale, buf) - case typeDateTimeOffsetN: - scale := r.byte() - buf := make([]byte, size-2-propbytes) - r.ReadFull(buf) - return decodeDateTimeOffset(scale, buf) - case typeBigVarBin, typeBigBinary: - r.uint16() // max length, ignoring - buf := make([]byte, size-2-propbytes) - r.ReadFull(buf) - return buf - case typeDecimalN, typeNumericN: - prec := r.byte() - scale := r.byte() - buf := make([]byte, size-2-propbytes) - r.ReadFull(buf) - return decodeDecimal(prec, scale, buf) - case typeBigVarChar, typeBigChar: - col := readCollation(r) - r.uint16() // max length, ignoring - buf := make([]byte, size-2-propbytes) - r.ReadFull(buf) - return decodeChar(col, buf) - case typeNVarChar, typeNChar: - _ = readCollation(r) - r.uint16() // max length, ignoring - buf := make([]byte, size-2-propbytes) - r.ReadFull(buf) - return decodeNChar(buf) - default: - badStreamPanicf("Invalid variant typeid") - } - panic("shoulnd't get here") -} - -// partially length prefixed stream -// http://msdn.microsoft.com/en-us/library/dd340469.aspx -func readPLPType(ti *typeInfo, r *tdsBuffer) (interface{}) { - size := r.uint64() - var buf *bytes.Buffer - switch size { - case 0xffffffffffffffff: - // null - return nil - case 0xfffffffffffffffe: - // size unknown - buf = bytes.NewBuffer(make([]byte, 0, 1000)) - default: - buf = bytes.NewBuffer(make([]byte, 0, size)) - } - for true { - chunksize := r.uint32() - if chunksize == 0 { - break - } - if _, err := io.CopyN(buf, r, int64(chunksize)); err != nil { - badStreamPanicf("Reading PLP type failed: %s", err.Error()) - } - } - switch ti.TypeId { - case typeXml: - return decodeXml(*ti, buf.Bytes()) - case typeBigVarChar, typeBigChar, typeText: - return decodeChar(ti.Collation, buf.Bytes()) - case typeBigVarBin, typeBigBinary, typeImage: - return buf.Bytes() - case typeNVarChar, typeNChar, typeNText: - return decodeNChar(buf.Bytes()) - case typeUdt: - return decodeUdt(*ti, buf.Bytes()) - } - panic("shoulnd't get here") -} - -func writePLPType(w io.Writer, ti typeInfo, buf []byte) (err error) { - if err = binary.Write(w, binary.LittleEndian, uint64(len(buf))); err != nil { - return - } - for { - chunksize := uint32(len(buf)) - if err = binary.Write(w, binary.LittleEndian, chunksize); err != nil { - return - } - if chunksize == 0 { - return - } - if _, err = w.Write(buf[:chunksize]); err != nil { - return - } - buf = buf[chunksize:] - } -} - -func readVarLen(ti *typeInfo, r *tdsBuffer) { - switch ti.TypeId { - case typeDateN: - ti.Size = 3 - ti.Reader = readByteLenType - ti.Buffer = make([]byte, ti.Size) - case typeTimeN, typeDateTime2N, typeDateTimeOffsetN: - ti.Scale = r.byte() - switch ti.Scale { - case 0, 1, 2: - ti.Size = 3 - case 3, 4: - ti.Size = 4 - case 5, 6, 7: - ti.Size = 5 - default: - badStreamPanicf("Invalid scale for TIME/DATETIME2/DATETIMEOFFSET type") - } - switch ti.TypeId { - case typeDateTime2N: - ti.Size += 3 - case typeDateTimeOffsetN: - ti.Size += 5 - } - ti.Reader = readByteLenType - ti.Buffer = make([]byte, ti.Size) - case typeGuid, typeIntN, typeDecimal, typeNumeric, - typeBitN, typeDecimalN, typeNumericN, typeFltN, - typeMoneyN, typeDateTimeN, typeChar, - typeVarChar, typeBinary, typeVarBinary: - // byle len types - ti.Size = int(r.byte()) - ti.Buffer = make([]byte, ti.Size) - switch ti.TypeId { - case typeDecimal, typeNumeric, typeDecimalN, typeNumericN: - ti.Prec = r.byte() - ti.Scale = r.byte() - } - ti.Reader = readByteLenType - case typeXml: - schemapresent := r.byte() - if schemapresent != 0 { - // just ignore this for now - // dbname - r.BVarChar() - // owning schema - r.BVarChar() - // xml schema collection - r.UsVarChar() - } - ti.Reader = readPLPType - case typeBigVarBin, typeBigVarChar, typeBigBinary, typeBigChar, - typeNVarChar, typeNChar, typeUdt: - // short len types - ti.Size = int(r.uint16()) - switch ti.TypeId { - case typeBigVarChar, typeBigChar, typeNVarChar, typeNChar: - ti.Collation = readCollation(r) - } - if ti.Size == 0xffff { - ti.Reader = readPLPType - } else { - ti.Buffer = make([]byte, ti.Size) - ti.Reader = readShortLenType - } - case typeText, typeImage, typeNText, typeVariant: - // LONGLEN_TYPE - ti.Size = int(r.int32()) - switch ti.TypeId { - case typeText, typeNText: - ti.Collation = readCollation(r) - // ignore tablenames - numparts := int(r.byte()) - for i := 0; i < numparts; i++ { - r.UsVarChar() - } - ti.Reader = readLongLenType - case typeImage: - // ignore tablenames - numparts := int(r.byte()) - for i := 0; i < numparts; i++ { - r.UsVarChar() - } - ti.Reader = readLongLenType - case typeVariant: - ti.Reader = readVariantType - } - default: - badStreamPanicf("Invalid type %d", ti.TypeId) - } - return -} - -func decodeMoney(buf []byte) []byte { - money := int64(uint64(buf[4]) | - uint64(buf[5])<<8 | - uint64(buf[6])<<16 | - uint64(buf[7])<<24 | - uint64(buf[0])<<32 | - uint64(buf[1])<<40 | - uint64(buf[2])<<48 | - uint64(buf[3])<<56) - return scaleBytes(strconv.FormatInt(money, 10), 4) -} - -func decodeMoney4(buf []byte) []byte { - money := int32(binary.LittleEndian.Uint32(buf[0:4])) - return scaleBytes(strconv.FormatInt(int64(money), 10), 4) -} - -func decodeGuid(buf []byte) []byte { - res := make([]byte, 16) - copy(res, buf) - return res -} - -func decodeDecimal(prec uint8, scale uint8, buf []byte) []byte { - var sign uint8 - sign = buf[0] - dec := Decimal{ - positive: sign != 0, - prec: prec, - scale: scale, - } - buf = buf[1:] - l := len(buf) / 4 - for i := 0; i < l; i++ { - dec.integer[i] = binary.LittleEndian.Uint32(buf[0:4]) - buf = buf[4:] - } - return dec.Bytes() -} - -// http://msdn.microsoft.com/en-us/library/ee780895.aspx -func decodeDateInt(buf []byte) (days int) { - days = int(buf[0]) + int(buf[1])*256 + int(buf[2])*256*256 - return -} - -func decodeDate(buf []byte) time.Time { - return time.Date(1, 1, 1+decodeDateInt(buf), 0, 0, 0, 0, time.UTC) -} - -func decodeTimeInt(scale uint8, buf []byte) (sec int, ns int) { - var acc uint64 = 0 - for i := len(buf) - 1; i >= 0; i-- { - acc <<= 8 - acc |= uint64(buf[i]) - } - for i := 0; i < 7-int(scale); i++ { - acc *= 10 - } - nsbig := acc * 100 - sec = int(nsbig / 1000000000) - ns = int(nsbig % 1000000000) - return -} - -func decodeTime(scale uint8, buf []byte) time.Time { - sec, ns := decodeTimeInt(scale, buf) - return time.Date(1, 1, 1, 0, 0, sec, ns, time.UTC) -} - -func decodeDateTime2(scale uint8, buf []byte) time.Time { - timesize := len(buf) - 3 - sec, ns := decodeTimeInt(scale, buf[:timesize]) - days := decodeDateInt(buf[timesize:]) - return time.Date(1, 1, 1+days, 0, 0, sec, ns, time.UTC) -} - -func decodeDateTimeOffset(scale uint8, buf []byte) time.Time { - timesize := len(buf) - 3 - 2 - sec, ns := decodeTimeInt(scale, buf[:timesize]) - buf = buf[timesize:] - days := decodeDateInt(buf[:3]) - buf = buf[3:] - offset := int(int16(binary.LittleEndian.Uint16(buf))) // in mins - return time.Date(1, 1, 1+days, 0, 0, sec+offset*60, ns, - time.FixedZone("", offset*60)) -} - -func divFloor(x int64, y int64) int64 { - q := x / y - r := x % y - if r != 0 && ((r < 0) != (y < 0)) { - q-- - } - return q -} - -func dateTime2(t time.Time) (days int32, ns int64) { - // number of days since Jan 1 1970 UTC - days64 := divFloor(t.Unix(), 24*60*60) - // number of days since Jan 1 1 UTC - days = int32(days64) + 1969*365 + 1969/4 - 1969/100 + 1969/400 - // number of seconds within day - secs := t.Unix() - days64*24*60*60 - // number of nanoseconds within day - ns = secs*1e9 + int64(t.Nanosecond()) - return -} - -func decodeChar(col collation, buf []byte) string { - return charset2utf8(col, buf) -} - -func decodeUcs2(buf []byte) string { - res, err := ucs22str(buf) - if err != nil { - badStreamPanicf("Invalid UCS2 encoding: %s", err.Error()) - } - return res -} - -func decodeNChar(buf []byte) string { - return decodeUcs2(buf) -} - -func decodeXml(ti typeInfo, buf []byte) string { - return decodeUcs2(buf) -} - -func decodeUdt(ti typeInfo, buf []byte) int { - panic("Not implemented") -} - -// makes go/sql type instance as described below -// It should return -// the value type that can be used to scan types into. For example, the database -// column type "bigint" this should return "reflect.TypeOf(int64(0))". -func makeGoLangScanType(ti typeInfo) reflect.Type { - switch ti.TypeId { - case typeInt4: - return reflect.TypeOf(int64(0)) - case typeInt8: - return reflect.TypeOf(int64(0)) - case typeFlt4: - return reflect.TypeOf(float64(0)) - case typeIntN: - switch ti.Size { - case 1: - return reflect.TypeOf(int64(0)) - case 2: - return reflect.TypeOf(int64(0)) - case 4: - return reflect.TypeOf(int64(0)) - case 8: - return reflect.TypeOf(int64(0)) - default: - panic("invalid size of INTNTYPE") - } - case typeFlt8: - return reflect.TypeOf(float64(0)) - case typeFltN: - switch ti.Size { - case 4: - return reflect.TypeOf(float64(0)) - case 8: - return reflect.TypeOf(float64(0)) - default: - panic("invalid size of FLNNTYPE") - } - case typeBigVarBin: - return reflect.TypeOf([]byte{}) - case typeVarChar: - return reflect.TypeOf("") - case typeNVarChar: - return reflect.TypeOf("") - case typeBit, typeBitN: - return reflect.TypeOf(true) - case typeDecimalN, typeNumericN: - return reflect.TypeOf([]byte{}) - case typeMoneyN: - switch ti.Size { - case 4: - return reflect.TypeOf([]byte{}) - case 8: - return reflect.TypeOf([]byte{}) - default: - panic("invalid size of MONEYN") - } - case typeDateTimeN: - switch ti.Size { - case 4: - return reflect.TypeOf(time.Time{}) - case 8: - return reflect.TypeOf(time.Time{}) - default: - panic("invalid size of DATETIMEN") - } - case typeDateTime2N: - return reflect.TypeOf(time.Time{}) - case typeDateN: - return reflect.TypeOf(time.Time{}) - case typeTimeN: - return reflect.TypeOf(time.Time{}) - case typeDateTimeOffsetN: - return reflect.TypeOf(time.Time{}) - case typeBigVarChar: - return reflect.TypeOf("") - case typeBigChar: - return reflect.TypeOf("") - case typeNChar: - return reflect.TypeOf("") - case typeGuid: - return reflect.TypeOf([]byte{}) - case typeXml: - return reflect.TypeOf("") - case typeText: - return reflect.TypeOf("") - case typeNText: - return reflect.TypeOf("") - case typeImage: - return reflect.TypeOf([]byte{}) - case typeVariant: - return reflect.TypeOf(nil) - default: - panic(fmt.Sprintf("not implemented makeDecl for type %d", ti.TypeId)) - } -} - -func makeDecl(ti typeInfo) string { - switch ti.TypeId { - case typeInt8: - return "bigint" - case typeFlt4: - return "real" - case typeIntN: - switch ti.Size { - case 1: - return "tinyint" - case 2: - return "smallint" - case 4: - return "int" - case 8: - return "bigint" - default: - panic("invalid size of INTNTYPE") - } - case typeFlt8: - return "float" - case typeFltN: - switch ti.Size { - case 4: - return "real" - case 8: - return "float" - default: - panic("invalid size of FLNNTYPE") - } - case typeBigVarBin: - if ti.Size > 8000 || ti.Size == 0 { - return "varbinary(max)" - } else { - return fmt.Sprintf("varbinary(%d)", ti.Size) - } - case typeNVarChar: - if ti.Size > 8000 || ti.Size == 0 { - return "nvarchar(max)" - } else { - return fmt.Sprintf("nvarchar(%d)", ti.Size/2) - } - case typeBit, typeBitN: - return "bit" - case typeDateTimeN: - return "datetime" - case typeDateTimeOffsetN: - return fmt.Sprintf("datetimeoffset(%d)", ti.Scale) - default: - panic(fmt.Sprintf("not implemented makeDecl for type %d", ti.TypeId)) - } -} - -// makes go/sql type name as described below -// RowsColumnTypeDatabaseTypeName may be implemented by Rows. It should return the -// database system type name without the length. Type names should be uppercase. -// Examples of returned types: "VARCHAR", "NVARCHAR", "VARCHAR2", "CHAR", "TEXT", -// "DECIMAL", "SMALLINT", "INT", "BIGINT", "BOOL", "[]BIGINT", "JSONB", "XML", -// "TIMESTAMP". -func makeGoLangTypeName(ti typeInfo) string { - switch ti.TypeId { - case typeInt4: - return "INT" - case typeInt8: - return "BIGINT" - case typeFlt4: - return "REAL" - case typeIntN: - switch ti.Size { - case 1: - return "TINYINT" - case 2: - return "SMALLINT" - case 4: - return "INT" - case 8: - return "BIGINT" - default: - panic("invalid size of INTNTYPE") - } - case typeFlt8: - return "FLOAT" - case typeFltN: - switch ti.Size { - case 4: - return "REAL" - case 8: - return "FLOAT" - default: - panic("invalid size of FLNNTYPE") - } - case typeBigVarBin: - return "VARBINARY" - case typeVarChar: - return "VARCHAR" - case typeNVarChar: - return "NVARCHAR" - case typeBit, typeBitN: - return "BIT" - case typeDecimalN, typeNumericN: - return "DECIMAL" - case typeMoneyN: - switch ti.Size { - case 4: - return "SMALLMONEY" - case 8: - return "MONEY" - default: - panic("invalid size of MONEYN") - } - case typeDateTimeN: - switch ti.Size { - case 4: - return "SMALLDATETIME" - case 8: - return "DATETIME" - default: - panic("invalid size of DATETIMEN") - } - case typeDateTime2N: - return "DATETIME2" - case typeDateN: - return "DATE" - case typeTimeN: - return "TIME" - case typeDateTimeOffsetN: - return "DATETIMEOFFSET" - case typeBigVarChar: - return "VARCHAR" - case typeBigChar: - return "CHAR" - case typeNChar: - return "NCHAR" - case typeGuid: - return "UNIQUEIDENTIFIER" - case typeXml: - return "XML" - case typeText: - return "TEXT" - case typeNText: - return "NTEXT" - case typeImage: - return "IMAGE" - case typeVariant: - return "SQL_VARIANT" - default: - panic(fmt.Sprintf("not implemented makeDecl for type %d", ti.TypeId)) - } -} - -// makes go/sql type length as described below -// It should return the length -// of the column type if the column is a variable length type. If the column is -// not a variable length type ok should return false. -// If length is not limited other than system limits, it should return math.MaxInt64. -// The following are examples of returned values for various types: -// TEXT (math.MaxInt64, true) -// varchar(10) (10, true) -// nvarchar(10) (10, true) -// decimal (0, false) -// int (0, false) -// bytea(30) (30, true) -func makeGoLangTypeLength(ti typeInfo) (int64, bool) { - switch ti.TypeId { - case typeInt4: - return 0, false - case typeInt8: - return 0, false - case typeFlt4: - return 0, false - case typeIntN: - switch ti.Size { - case 1: - return 0, false - case 2: - return 0, false - case 4: - return 0, false - case 8: - return 0, false - default: - panic("invalid size of INTNTYPE") - } - case typeFlt8: - return 0, false - case typeFltN: - switch ti.Size { - case 4: - return 0, false - case 8: - return 0, false - default: - panic("invalid size of FLNNTYPE") - } - case typeBit, typeBitN: - return 0, false - case typeDecimalN, typeNumericN: - return 0, false - case typeMoneyN: - switch ti.Size { - case 4: - return 0, false - case 8: - return 0, false - default: - panic("invalid size of MONEYN") - } - case typeDateTimeN: - switch ti.Size { - case 4: - return 0, false - case 8: - return 0, false - default: - panic("invalid size of DATETIMEN") - } - case typeDateTime2N: - return 0, false - case typeDateN: - return 0, false - case typeTimeN: - return 0, false - case typeDateTimeOffsetN: - return 0, false - case typeBigVarBin: - if ti.Size == 0xffff { - return 2147483645, true - } else { - return int64(ti.Size), true - } - case typeVarChar: - return int64(ti.Size), true - case typeBigVarChar: - if ti.Size == 0xffff { - return 2147483645, true - } else { - return int64(ti.Size), true - } - case typeBigChar: - return int64(ti.Size), true - case typeNVarChar: - if ti.Size == 0xffff { - return 2147483645 / 2, true - } else { - return int64(ti.Size) / 2, true - } - case typeNChar: - return int64(ti.Size) / 2, true - case typeGuid: - return 0, false - case typeXml: - return 1073741822, true - case typeText: - return 2147483647, true - case typeNText: - return 1073741823, true - case typeImage: - return 2147483647, true - case typeVariant: - return 0, false - default: - panic(fmt.Sprintf("not implemented makeDecl for type %d", ti.TypeId)) - } -} - -// makes go/sql type precision and scale as described below -// It should return the length -// of the column type if the column is a variable length type. If the column is -// not a variable length type ok should return false. -// If length is not limited other than system limits, it should return math.MaxInt64. -// The following are examples of returned values for various types: -// TEXT (math.MaxInt64, true) -// varchar(10) (10, true) -// nvarchar(10) (10, true) -// decimal (0, false) -// int (0, false) -// bytea(30) (30, true) -func makeGoLangTypePrecisionScale(ti typeInfo) (int64, int64, bool) { - switch ti.TypeId { - case typeInt4: - return 0, 0, false - case typeInt8: - return 0, 0, false - case typeFlt4: - return 0, 0, false - case typeIntN: - switch ti.Size { - case 1: - return 0, 0, false - case 2: - return 0, 0, false - case 4: - return 0, 0, false - case 8: - return 0, 0, false - default: - panic("invalid size of INTNTYPE") - } - case typeFlt8: - return 0, 0, false - case typeFltN: - switch ti.Size { - case 4: - return 0, 0, false - case 8: - return 0, 0, false - default: - panic("invalid size of FLNNTYPE") - } - case typeBit, typeBitN: - return 0, 0, false - case typeDecimalN, typeNumericN: - return int64(ti.Prec), int64(ti.Scale), true - case typeMoneyN: - switch ti.Size { - case 4: - return 0, 0, false - case 8: - return 0, 0, false - default: - panic("invalid size of MONEYN") - } - case typeDateTimeN: - switch ti.Size { - case 4: - return 0, 0, false - case 8: - return 0, 0, false - default: - panic("invalid size of DATETIMEN") - } - case typeDateTime2N: - return 0, 0, false - case typeDateN: - return 0, 0, false - case typeTimeN: - return 0, 0, false - case typeDateTimeOffsetN: - return 0, 0, false - case typeBigVarBin: - return 0, 0, false - case typeVarChar: - return 0, 0, false - case typeBigVarChar: - return 0, 0, false - case typeBigChar: - return 0, 0, false - case typeNVarChar: - return 0, 0, false - case typeNChar: - return 0, 0, false - case typeGuid: - return 0, 0, false - case typeXml: - return 0, 0, false - case typeText: - return 0, 0, false - case typeNText: - return 0, 0, false - case typeImage: - return 0, 0, false - case typeVariant: - return 0, 0, false - default: - panic(fmt.Sprintf("not implemented makeDecl for type %d", ti.TypeId)) - } -} diff --git a/vendor/github.com/denisenkom/go-mssqldb/uniqueidentifier.go b/vendor/github.com/denisenkom/go-mssqldb/uniqueidentifier.go deleted file mode 100644 index c8ef3149b..000000000 --- a/vendor/github.com/denisenkom/go-mssqldb/uniqueidentifier.go +++ /dev/null @@ -1,74 +0,0 @@ -package mssql - -import ( - "database/sql/driver" - "encoding/hex" - "errors" - "fmt" -) - -type UniqueIdentifier [16]byte - -func (u *UniqueIdentifier) Scan(v interface{}) error { - reverse := func(b []byte) { - for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 { - b[i], b[j] = b[j], b[i] - } - } - - switch vt := v.(type) { - case []byte: - if len(vt) != 16 { - return errors.New("mssql: invalid UniqueIdentifier length") - } - - var raw UniqueIdentifier - - copy(raw[:], vt) - - reverse(raw[0:4]) - reverse(raw[4:6]) - reverse(raw[6:8]) - *u = raw - - return nil - case string: - if len(vt) != 36 { - return errors.New("mssql: invalid UniqueIdentifier string length") - } - - b := []byte(vt) - for i, c := range b { - switch c { - case '-': - b = append(b[:i], b[i+1:]...) - } - } - - _, err := hex.Decode(u[:], []byte(b)) - return err - default: - return fmt.Errorf("mssql: cannot convert %T to UniqueIdentifier", v) - } -} - -func (u UniqueIdentifier) Value() (driver.Value, error) { - reverse := func(b []byte) { - for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 { - b[i], b[j] = b[j], b[i] - } - } - - raw := make([]byte, len(u)) - copy(raw, u[:]) - - reverse(raw[0:4]) - reverse(raw[4:6]) - reverse(raw[6:8]) - - return raw, nil -} - -func (u UniqueIdentifier) String() string { - return fmt.Sprintf("%X-%X-%X-%X-%X", u[0:4], u[4:6], u[6:8], u[8:10], u[10:]) -} diff --git a/vendor/github.com/fatih/color/LICENSE.md b/vendor/github.com/fatih/color/LICENSE.md deleted file mode 100644 index 25fdaf639..000000000 --- a/vendor/github.com/fatih/color/LICENSE.md +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 Fatih Arslan - -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/fatih/color/README.md b/vendor/github.com/fatih/color/README.md deleted file mode 100644 index 25abbca3f..000000000 --- a/vendor/github.com/fatih/color/README.md +++ /dev/null @@ -1,175 +0,0 @@ -# Color [![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](http://godoc.org/github.com/fatih/color) [![Build Status](http://img.shields.io/travis/fatih/color.svg?style=flat-square)](https://travis-ci.org/fatih/color) - - - -Color lets you use colorized outputs in terms of [ANSI Escape -Codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors) in Go (Golang). It -has support for Windows too! The API can be used in several ways, pick one that -suits you. - - - -![Color](http://i.imgur.com/c1JI0lA.png) - - -## Install - -```bash -go get github.com/fatih/color -``` - -## Examples - -### Standard colors - -```go -// Print with default helper functions -color.Cyan("Prints text in cyan.") - -// A newline will be appended automatically -color.Blue("Prints %s in blue.", "text") - -// These are using the default foreground colors -color.Red("We have red") -color.Magenta("And many others ..") - -``` - -### Mix and reuse colors - -```go -// Create a new color object -c := color.New(color.FgCyan).Add(color.Underline) -c.Println("Prints cyan text with an underline.") - -// Or just add them to New() -d := color.New(color.FgCyan, color.Bold) -d.Printf("This prints bold cyan %s\n", "too!.") - -// Mix up foreground and background colors, create new mixes! -red := color.New(color.FgRed) - -boldRed := red.Add(color.Bold) -boldRed.Println("This will print text in bold red.") - -whiteBackground := red.Add(color.BgWhite) -whiteBackground.Println("Red text with white background.") -``` - -### Use your own output (io.Writer) - -```go -// Use your own io.Writer output -color.New(color.FgBlue).Fprintln(myWriter, "blue color!") - -blue := color.New(color.FgBlue) -blue.Fprint(writer, "This will print text in blue.") -``` - -### Custom print functions (PrintFunc) - -```go -// Create a custom print function for convenience -red := color.New(color.FgRed).PrintfFunc() -red("Warning") -red("Error: %s", err) - -// Mix up multiple attributes -notice := color.New(color.Bold, color.FgGreen).PrintlnFunc() -notice("Don't forget this...") -``` - -### Custom fprint functions (FprintFunc) - -```go -blue := color.New(FgBlue).FprintfFunc() -blue(myWriter, "important notice: %s", stars) - -// Mix up with multiple attributes -success := color.New(color.Bold, color.FgGreen).FprintlnFunc() -success(myWriter, "Don't forget this...") -``` - -### Insert into noncolor strings (SprintFunc) - -```go -// Create SprintXxx functions to mix strings with other non-colorized strings: -yellow := color.New(color.FgYellow).SprintFunc() -red := color.New(color.FgRed).SprintFunc() -fmt.Printf("This is a %s and this is %s.\n", yellow("warning"), red("error")) - -info := color.New(color.FgWhite, color.BgGreen).SprintFunc() -fmt.Printf("This %s rocks!\n", info("package")) - -// Use helper functions -fmt.Println("This", color.RedString("warning"), "should be not neglected.") -fmt.Printf("%v %v\n", color.GreenString("Info:"), "an important message.") - -// Windows supported too! Just don't forget to change the output to color.Output -fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS")) -``` - -### Plug into existing code - -```go -// Use handy standard colors -color.Set(color.FgYellow) - -fmt.Println("Existing text will now be in yellow") -fmt.Printf("This one %s\n", "too") - -color.Unset() // Don't forget to unset - -// You can mix up parameters -color.Set(color.FgMagenta, color.Bold) -defer color.Unset() // Use it in your function - -fmt.Println("All text will now be bold magenta.") -``` - -### Disable color - -There might be a case where you want to disable color output (for example to -pipe the standard output of your app to somewhere else). `Color` has support to -disable colors both globally and for single color definition. For example -suppose you have a CLI app and a `--no-color` bool flag. You can easily disable -the color output with: - -```go - -var flagNoColor = flag.Bool("no-color", false, "Disable color output") - -if *flagNoColor { - color.NoColor = true // disables colorized output -} -``` - -It also has support for single color definitions (local). You can -disable/enable color output on the fly: - -```go -c := color.New(color.FgCyan) -c.Println("Prints cyan text") - -c.DisableColor() -c.Println("This is printed without any color") - -c.EnableColor() -c.Println("This prints again cyan...") -``` - -## Todo - -* Save/Return previous values -* Evaluate fmt.Formatter interface - - -## Credits - - * [Fatih Arslan](https://github.com/fatih) - * Windows support via @mattn: [colorable](https://github.com/mattn/go-colorable) - -## License - -The MIT License (MIT) - see [`LICENSE.md`](https://github.com/fatih/color/blob/master/LICENSE.md) for more details - diff --git a/vendor/github.com/fatih/color/color.go b/vendor/github.com/fatih/color/color.go deleted file mode 100644 index dba8f211e..000000000 --- a/vendor/github.com/fatih/color/color.go +++ /dev/null @@ -1,510 +0,0 @@ -package color - -import ( - "fmt" - "io" - "os" - "strconv" - "strings" - "sync" - - "github.com/mattn/go-colorable" - "github.com/mattn/go-isatty" -) - -var ( - // NoColor defines if the output is colorized or not. It's dynamically set to - // false or true based on the stdout's file descriptor referring to a terminal - // or not. This is a global option and affects all colors. For more control - // over each color block use the methods DisableColor() individually. - NoColor = !isatty.IsTerminal(os.Stdout.Fd()) || os.Getenv("TERM") == "dumb" - - // Output defines the standard output of the print functions. By default - // os.Stdout is used. - Output = colorable.NewColorableStdout() - - // colorsCache is used to reduce the count of created Color objects and - // allows to reuse already created objects with required Attribute. - colorsCache = make(map[Attribute]*Color) - colorsCacheMu sync.Mutex // protects colorsCache -) - -// Color defines a custom color object which is defined by SGR parameters. -type Color struct { - params []Attribute - noColor *bool -} - -// Attribute defines a single SGR Code -type Attribute int - -const escape = "\x1b" - -// Base attributes -const ( - Reset Attribute = iota - Bold - Faint - Italic - Underline - BlinkSlow - BlinkRapid - ReverseVideo - Concealed - CrossedOut -) - -// Foreground text colors -const ( - FgBlack Attribute = iota + 30 - FgRed - FgGreen - FgYellow - FgBlue - FgMagenta - FgCyan - FgWhite -) - -// Foreground Hi-Intensity text colors -const ( - FgHiBlack Attribute = iota + 90 - FgHiRed - FgHiGreen - FgHiYellow - FgHiBlue - FgHiMagenta - FgHiCyan - FgHiWhite -) - -// Background text colors -const ( - BgBlack Attribute = iota + 40 - BgRed - BgGreen - BgYellow - BgBlue - BgMagenta - BgCyan - BgWhite -) - -// Background Hi-Intensity text colors -const ( - BgHiBlack Attribute = iota + 100 - BgHiRed - BgHiGreen - BgHiYellow - BgHiBlue - BgHiMagenta - BgHiCyan - BgHiWhite -) - -// New returns a newly created color object. -func New(value ...Attribute) *Color { - c := &Color{params: make([]Attribute, 0)} - c.Add(value...) - return c -} - -// Set sets the given parameters immediately. It will change the color of -// output with the given SGR parameters until color.Unset() is called. -func Set(p ...Attribute) *Color { - c := New(p...) - c.Set() - return c -} - -// Unset resets all escape attributes and clears the output. Usually should -// be called after Set(). -func Unset() { - if NoColor { - return - } - - fmt.Fprintf(Output, "%s[%dm", escape, Reset) -} - -// Set sets the SGR sequence. -func (c *Color) Set() *Color { - if c.isNoColorSet() { - return c - } - - fmt.Fprintf(Output, c.format()) - return c -} - -func (c *Color) unset() { - if c.isNoColorSet() { - return - } - - Unset() -} - -func (c *Color) setWriter(w io.Writer) *Color { - if c.isNoColorSet() { - return c - } - - fmt.Fprintf(w, c.format()) - return c -} - -func (c *Color) unsetWriter(w io.Writer) { - if c.isNoColorSet() { - return - } - - if NoColor { - return - } - - fmt.Fprintf(w, "%s[%dm", escape, Reset) -} - -// Add is used to chain SGR parameters. Use as many as parameters to combine -// and create custom color objects. Example: Add(color.FgRed, color.Underline). -func (c *Color) Add(value ...Attribute) *Color { - c.params = append(c.params, value...) - return c -} - -func (c *Color) prepend(value Attribute) { - c.params = append(c.params, 0) - copy(c.params[1:], c.params[0:]) - c.params[0] = value -} - -// Fprint formats using the default formats for its operands and writes to w. -// Spaces are added between operands when neither is a string. -// It returns the number of bytes written and any write error encountered. -// On Windows, users should wrap w with colorable.NewColorable() if w is of -// type *os.File. -func (c *Color) Fprint(w io.Writer, a ...interface{}) (n int, err error) { - c.setWriter(w) - defer c.unsetWriter(w) - - return fmt.Fprint(w, a...) -} - -// Print formats using the default formats for its operands and writes to -// standard output. Spaces are added between operands when neither is a -// string. It returns the number of bytes written and any write error -// encountered. This is the standard fmt.Print() method wrapped with the given -// color. -func (c *Color) Print(a ...interface{}) (n int, err error) { - c.Set() - defer c.unset() - - return fmt.Fprint(Output, a...) -} - -// Fprintf formats according to a format specifier and writes to w. -// It returns the number of bytes written and any write error encountered. -// On Windows, users should wrap w with colorable.NewColorable() if w is of -// type *os.File. -func (c *Color) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) { - c.setWriter(w) - defer c.unsetWriter(w) - - return fmt.Fprintf(w, format, a...) -} - -// Printf formats according to a format specifier and writes to standard output. -// It returns the number of bytes written and any write error encountered. -// This is the standard fmt.Printf() method wrapped with the given color. -func (c *Color) Printf(format string, a ...interface{}) (n int, err error) { - c.Set() - defer c.unset() - - return fmt.Fprintf(Output, format, a...) -} - -// Fprintln formats using the default formats for its operands and writes to w. -// Spaces are always added between operands and a newline is appended. -// On Windows, users should wrap w with colorable.NewColorable() if w is of -// type *os.File. -func (c *Color) Fprintln(w io.Writer, a ...interface{}) (n int, err error) { - c.setWriter(w) - defer c.unsetWriter(w) - - return fmt.Fprintln(w, a...) -} - -// Println formats using the default formats for its operands and writes to -// standard output. Spaces are always added between operands and a newline is -// appended. It returns the number of bytes written and any write error -// encountered. This is the standard fmt.Print() method wrapped with the given -// color. -func (c *Color) Println(a ...interface{}) (n int, err error) { - c.Set() - defer c.unset() - - return fmt.Fprintln(Output, a...) -} - -// FprintFunc returns a new function that prints the passed arguments as -// colorized with color.Fprint(). -func (c *Color) FprintFunc() func(w io.Writer, a ...interface{}) { - return func(w io.Writer, a ...interface{}) { - c.Fprint(w, a...) - } -} - -// PrintFunc returns a new function that prints the passed arguments as -// colorized with color.Print(). -func (c *Color) PrintFunc() func(a ...interface{}) { - return func(a ...interface{}) { - c.Print(a...) - } -} - -// FprintfFunc returns a new function that prints the passed arguments as -// colorized with color.Fprintf(). -func (c *Color) FprintfFunc() func(w io.Writer, format string, a ...interface{}) { - return func(w io.Writer, format string, a ...interface{}) { - c.Fprintf(w, format, a...) - } -} - -// PrintfFunc returns a new function that prints the passed arguments as -// colorized with color.Printf(). -func (c *Color) PrintfFunc() func(format string, a ...interface{}) { - return func(format string, a ...interface{}) { - c.Printf(format, a...) - } -} - -// FprintlnFunc returns a new function that prints the passed arguments as -// colorized with color.Fprintln(). -func (c *Color) FprintlnFunc() func(w io.Writer, a ...interface{}) { - return func(w io.Writer, a ...interface{}) { - c.Fprintln(w, a...) - } -} - -// PrintlnFunc returns a new function that prints the passed arguments as -// colorized with color.Println(). -func (c *Color) PrintlnFunc() func(a ...interface{}) { - return func(a ...interface{}) { - c.Println(a...) - } -} - -// SprintFunc returns a new function that returns colorized strings for the -// given arguments with fmt.Sprint(). Useful to put into or mix into other -// string. Windows users should use this in conjunction with color.Output, example: -// -// put := New(FgYellow).SprintFunc() -// fmt.Fprintf(color.Output, "This is a %s", put("warning")) -func (c *Color) SprintFunc() func(a ...interface{}) string { - return func(a ...interface{}) string { - return c.wrap(fmt.Sprint(a...)) - } -} - -// SprintfFunc returns a new function that returns colorized strings for the -// given arguments with fmt.Sprintf(). Useful to put into or mix into other -// string. Windows users should use this in conjunction with color.Output. -func (c *Color) SprintfFunc() func(format string, a ...interface{}) string { - return func(format string, a ...interface{}) string { - return c.wrap(fmt.Sprintf(format, a...)) - } -} - -// SprintlnFunc returns a new function that returns colorized strings for the -// given arguments with fmt.Sprintln(). Useful to put into or mix into other -// string. Windows users should use this in conjunction with color.Output. -func (c *Color) SprintlnFunc() func(a ...interface{}) string { - return func(a ...interface{}) string { - return c.wrap(fmt.Sprintln(a...)) - } -} - -// sequence returns a formated SGR sequence to be plugged into a "\x1b[...m" -// an example output might be: "1;36" -> bold cyan -func (c *Color) sequence() string { - format := make([]string, len(c.params)) - for i, v := range c.params { - format[i] = strconv.Itoa(int(v)) - } - - return strings.Join(format, ";") -} - -// wrap wraps the s string with the colors attributes. The string is ready to -// be printed. -func (c *Color) wrap(s string) string { - if c.isNoColorSet() { - return s - } - - return c.format() + s + c.unformat() -} - -func (c *Color) format() string { - return fmt.Sprintf("%s[%sm", escape, c.sequence()) -} - -func (c *Color) unformat() string { - return fmt.Sprintf("%s[%dm", escape, Reset) -} - -// DisableColor disables the color output. Useful to not change any existing -// code and still being able to output. Can be used for flags like -// "--no-color". To enable back use EnableColor() method. -func (c *Color) DisableColor() { - c.noColor = boolPtr(true) -} - -// EnableColor enables the color output. Use it in conjunction with -// DisableColor(). Otherwise this method has no side effects. -func (c *Color) EnableColor() { - c.noColor = boolPtr(false) -} - -func (c *Color) isNoColorSet() bool { - // check first if we have user setted action - if c.noColor != nil { - return *c.noColor - } - - // if not return the global option, which is disabled by default - return NoColor -} - -// Equals returns a boolean value indicating whether two colors are equal. -func (c *Color) Equals(c2 *Color) bool { - if len(c.params) != len(c2.params) { - return false - } - - for _, attr := range c.params { - if !c2.attrExists(attr) { - return false - } - } - - return true -} - -func (c *Color) attrExists(a Attribute) bool { - for _, attr := range c.params { - if attr == a { - return true - } - } - - return false -} - -func boolPtr(v bool) *bool { - return &v -} - -func getCachedColor(p Attribute) *Color { - colorsCacheMu.Lock() - defer colorsCacheMu.Unlock() - - c, ok := colorsCache[p] - if !ok { - c = New(p) - colorsCache[p] = c - } - - return c -} - -func colorPrint(format string, p Attribute, a ...interface{}) { - c := getCachedColor(p) - - if !strings.HasSuffix(format, "\n") { - format += "\n" - } - - if len(a) == 0 { - c.Print(format) - } else { - c.Printf(format, a...) - } -} - -func colorString(format string, p Attribute, a ...interface{}) string { - c := getCachedColor(p) - - if len(a) == 0 { - return c.SprintFunc()(format) - } - - return c.SprintfFunc()(format, a...) -} - -// Black is an convenient helper function to print with black foreground. A -// newline is appended to format by default. -func Black(format string, a ...interface{}) { colorPrint(format, FgBlack, a...) } - -// Red is an convenient helper function to print with red foreground. A -// newline is appended to format by default. -func Red(format string, a ...interface{}) { colorPrint(format, FgRed, a...) } - -// Green is an convenient helper function to print with green foreground. A -// newline is appended to format by default. -func Green(format string, a ...interface{}) { colorPrint(format, FgGreen, a...) } - -// Yellow is an convenient helper function to print with yellow foreground. -// A newline is appended to format by default. -func Yellow(format string, a ...interface{}) { colorPrint(format, FgYellow, a...) } - -// Blue is an convenient helper function to print with blue foreground. A -// newline is appended to format by default. -func Blue(format string, a ...interface{}) { colorPrint(format, FgBlue, a...) } - -// Magenta is an convenient helper function to print with magenta foreground. -// A newline is appended to format by default. -func Magenta(format string, a ...interface{}) { colorPrint(format, FgMagenta, a...) } - -// Cyan is an convenient helper function to print with cyan foreground. A -// newline is appended to format by default. -func Cyan(format string, a ...interface{}) { colorPrint(format, FgCyan, a...) } - -// White is an convenient helper function to print with white foreground. A -// newline is appended to format by default. -func White(format string, a ...interface{}) { colorPrint(format, FgWhite, a...) } - -// BlackString is an convenient helper function to return a string with black -// foreground. -func BlackString(format string, a ...interface{}) string { return colorString(format, FgBlack, a...) } - -// RedString is an convenient helper function to return a string with red -// foreground. -func RedString(format string, a ...interface{}) string { return colorString(format, FgRed, a...) } - -// GreenString is an convenient helper function to return a string with green -// foreground. -func GreenString(format string, a ...interface{}) string { return colorString(format, FgGreen, a...) } - -// YellowString is an convenient helper function to return a string with yellow -// foreground. -func YellowString(format string, a ...interface{}) string { return colorString(format, FgYellow, a...) } - -// BlueString is an convenient helper function to return a string with blue -// foreground. -func BlueString(format string, a ...interface{}) string { return colorString(format, FgBlue, a...) } - -// MagentaString is an convenient helper function to return a string with magenta -// foreground. -func MagentaString(format string, a ...interface{}) string { - return colorString(format, FgMagenta, a...) -} - -// CyanString is an convenient helper function to return a string with cyan -// foreground. -func CyanString(format string, a ...interface{}) string { return colorString(format, FgCyan, a...) } - -// WhiteString is an convenient helper function to return a string with white -// foreground. -func WhiteString(format string, a ...interface{}) string { return colorString(format, FgWhite, a...) } diff --git a/vendor/github.com/fatih/color/doc.go b/vendor/github.com/fatih/color/doc.go deleted file mode 100644 index 1e57812d7..000000000 --- a/vendor/github.com/fatih/color/doc.go +++ /dev/null @@ -1,128 +0,0 @@ -/* -Package color is an ANSI color package to output colorized or SGR defined -output to the standard output. The API can be used in several way, pick one -that suits you. - -Use simple and default helper functions with predefined foreground colors: - - color.Cyan("Prints text in cyan.") - - // a newline will be appended automatically - color.Blue("Prints %s in blue.", "text") - - // More default foreground colors.. - color.Red("We have red") - color.Yellow("Yellow color too!") - color.Magenta("And many others ..") - -However there are times where custom color mixes are required. Below are some -examples to create custom color objects and use the print functions of each -separate color object. - - // Create a new color object - c := color.New(color.FgCyan).Add(color.Underline) - c.Println("Prints cyan text with an underline.") - - // Or just add them to New() - d := color.New(color.FgCyan, color.Bold) - d.Printf("This prints bold cyan %s\n", "too!.") - - - // Mix up foreground and background colors, create new mixes! - red := color.New(color.FgRed) - - boldRed := red.Add(color.Bold) - boldRed.Println("This will print text in bold red.") - - whiteBackground := red.Add(color.BgWhite) - whiteBackground.Println("Red text with White background.") - - // Use your own io.Writer output - color.New(color.FgBlue).Fprintln(myWriter, "blue color!") - - blue := color.New(color.FgBlue) - blue.Fprint(myWriter, "This will print text in blue.") - -You can create PrintXxx functions to simplify even more: - - // Create a custom print function for convenient - red := color.New(color.FgRed).PrintfFunc() - red("warning") - red("error: %s", err) - - // Mix up multiple attributes - notice := color.New(color.Bold, color.FgGreen).PrintlnFunc() - notice("don't forget this...") - -You can also FprintXxx functions to pass your own io.Writer: - - blue := color.New(FgBlue).FprintfFunc() - blue(myWriter, "important notice: %s", stars) - - // Mix up with multiple attributes - success := color.New(color.Bold, color.FgGreen).FprintlnFunc() - success(myWriter, don't forget this...") - - -Or create SprintXxx functions to mix strings with other non-colorized strings: - - yellow := New(FgYellow).SprintFunc() - red := New(FgRed).SprintFunc() - - fmt.Printf("this is a %s and this is %s.\n", yellow("warning"), red("error")) - - info := New(FgWhite, BgGreen).SprintFunc() - fmt.Printf("this %s rocks!\n", info("package")) - -Windows support is enabled by default. All Print functions works as intended. -However only for color.SprintXXX functions, user should use fmt.FprintXXX and -set the output to color.Output: - - fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS")) - - info := New(FgWhite, BgGreen).SprintFunc() - fmt.Fprintf(color.Output, "this %s rocks!\n", info("package")) - -Using with existing code is possible. Just use the Set() method to set the -standard output to the given parameters. That way a rewrite of an existing -code is not required. - - // Use handy standard colors. - color.Set(color.FgYellow) - - fmt.Println("Existing text will be now in Yellow") - fmt.Printf("This one %s\n", "too") - - color.Unset() // don't forget to unset - - // You can mix up parameters - color.Set(color.FgMagenta, color.Bold) - defer color.Unset() // use it in your function - - fmt.Println("All text will be now bold magenta.") - -There might be a case where you want to disable color output (for example to -pipe the standard output of your app to somewhere else). `Color` has support to -disable colors both globally and for single color definition. For example -suppose you have a CLI app and a `--no-color` bool flag. You can easily disable -the color output with: - - var flagNoColor = flag.Bool("no-color", false, "Disable color output") - - if *flagNoColor { - color.NoColor = true // disables colorized output - } - -It also has support for single color definitions (local). You can -disable/enable color output on the fly: - - c := color.New(color.FgCyan) - c.Println("Prints cyan text") - - c.DisableColor() - c.Println("This is printed without any color") - - c.EnableColor() - c.Println("This prints again cyan...") -*/ -package color diff --git a/vendor/github.com/go-macaron/binding/LICENSE b/vendor/github.com/go-macaron/binding/LICENSE deleted file mode 100644 index 8405e89a0..000000000 --- a/vendor/github.com/go-macaron/binding/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -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: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -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 -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. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/binding/README.md b/vendor/github.com/go-macaron/binding/README.md deleted file mode 100644 index aeaa57193..000000000 --- a/vendor/github.com/go-macaron/binding/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# binding [![Build Status](https://travis-ci.org/go-macaron/binding.svg?branch=master)](https://travis-ci.org/go-macaron/binding) [![Sourcegraph](https://sourcegraph.com/github.com/go-macaron/binding/-/badge.svg)](https://sourcegraph.com/github.com/go-macaron/binding?badge) - -Middleware binding provides request data binding and validation for [Macaron](https://github.com/go-macaron/macaron). - -### Installation - - go get github.com/go-macaron/binding - -## Getting Help - -- [API Reference](https://gowalker.org/github.com/go-macaron/binding) -- [Documentation](http://go-macaron.com/docs/middlewares/binding) - -## Credits - -This package is a modified version of [martini-contrib/binding](https://github.com/martini-contrib/binding). - -## License - -This project is under the Apache License, Version 2.0. See the [LICENSE](LICENSE) file for the full license text. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/binding/binding.go b/vendor/github.com/go-macaron/binding/binding.go deleted file mode 100644 index 5d178b7e1..000000000 --- a/vendor/github.com/go-macaron/binding/binding.go +++ /dev/null @@ -1,761 +0,0 @@ -// Copyright 2014 Martini Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -// Package binding is a middleware that provides request data binding and validation for Macaron. -package binding - -import ( - "encoding/json" - "fmt" - "io" - "mime/multipart" - "net/http" - "net/url" - "reflect" - "regexp" - "strconv" - "strings" - "unicode/utf8" - - "github.com/Unknwon/com" - "gopkg.in/macaron.v1" -) - -const _VERSION = "0.6.0" - -func Version() string { - return _VERSION -} - -func bind(ctx *macaron.Context, obj interface{}, ifacePtr ...interface{}) { - contentType := ctx.Req.Header.Get("Content-Type") - if ctx.Req.Method == "POST" || ctx.Req.Method == "PUT" || len(contentType) > 0 { - switch { - case strings.Contains(contentType, "form-urlencoded"): - ctx.Invoke(Form(obj, ifacePtr...)) - case strings.Contains(contentType, "multipart/form-data"): - ctx.Invoke(MultipartForm(obj, ifacePtr...)) - case strings.Contains(contentType, "json"): - ctx.Invoke(Json(obj, ifacePtr...)) - default: - var errors Errors - if contentType == "" { - errors.Add([]string{}, ERR_CONTENT_TYPE, "Empty Content-Type") - } else { - errors.Add([]string{}, ERR_CONTENT_TYPE, "Unsupported Content-Type") - } - ctx.Map(errors) - ctx.Map(obj) // Map a fake struct so handler won't panic. - } - } else { - ctx.Invoke(Form(obj, ifacePtr...)) - } -} - -const ( - _JSON_CONTENT_TYPE = "application/json; charset=utf-8" - STATUS_UNPROCESSABLE_ENTITY = 422 -) - -// errorHandler simply counts the number of errors in the -// context and, if more than 0, writes a response with an -// error code and a JSON payload describing the errors. -// The response will have a JSON content-type. -// Middleware remaining on the stack will not even see the request -// if, by this point, there are any errors. -// This is a "default" handler, of sorts, and you are -// welcome to use your own instead. The Bind middleware -// invokes this automatically for convenience. -func errorHandler(errs Errors, rw http.ResponseWriter) { - if len(errs) > 0 { - rw.Header().Set("Content-Type", _JSON_CONTENT_TYPE) - if errs.Has(ERR_DESERIALIZATION) { - rw.WriteHeader(http.StatusBadRequest) - } else if errs.Has(ERR_CONTENT_TYPE) { - rw.WriteHeader(http.StatusUnsupportedMediaType) - } else { - rw.WriteHeader(STATUS_UNPROCESSABLE_ENTITY) - } - errOutput, _ := json.Marshal(errs) - rw.Write(errOutput) - return - } -} - -// Bind wraps up the functionality of the Form and Json middleware -// according to the Content-Type and verb of the request. -// A Content-Type is required for POST and PUT requests. -// Bind invokes the ErrorHandler middleware to bail out if errors -// occurred. If you want to perform your own error handling, use -// Form or Json middleware directly. An interface pointer can -// be added as a second argument in order to map the struct to -// a specific interface. -func Bind(obj interface{}, ifacePtr ...interface{}) macaron.Handler { - return func(ctx *macaron.Context) { - bind(ctx, obj, ifacePtr...) - if handler, ok := obj.(ErrorHandler); ok { - ctx.Invoke(handler.Error) - } else { - ctx.Invoke(errorHandler) - } - } -} - -// BindIgnErr will do the exactly same thing as Bind but without any -// error handling, which user has freedom to deal with them. -// This allows user take advantages of validation. -func BindIgnErr(obj interface{}, ifacePtr ...interface{}) macaron.Handler { - return func(ctx *macaron.Context) { - bind(ctx, obj, ifacePtr...) - } -} - -// Form is middleware to deserialize form-urlencoded data from the request. -// It gets data from the form-urlencoded body, if present, or from the -// query string. It uses the http.Request.ParseForm() method -// to perform deserialization, then reflection is used to map each field -// into the struct with the proper type. Structs with primitive slice types -// (bool, float, int, string) can support deserialization of repeated form -// keys, for example: key=val1&key=val2&key=val3 -// An interface pointer can be added as a second argument in order -// to map the struct to a specific interface. -func Form(formStruct interface{}, ifacePtr ...interface{}) macaron.Handler { - return func(ctx *macaron.Context) { - var errors Errors - - ensureNotPointer(formStruct) - formStruct := reflect.New(reflect.TypeOf(formStruct)) - parseErr := ctx.Req.ParseForm() - - // Format validation of the request body or the URL would add considerable overhead, - // and ParseForm does not complain when URL encoding is off. - // Because an empty request body or url can also mean absence of all needed values, - // it is not in all cases a bad request, so let's return 422. - if parseErr != nil { - errors.Add([]string{}, ERR_DESERIALIZATION, parseErr.Error()) - } - errors = mapForm(formStruct, ctx.Req.Form, nil, errors) - validateAndMap(formStruct, ctx, errors, ifacePtr...) - } -} - -// Maximum amount of memory to use when parsing a multipart form. -// Set this to whatever value you prefer; default is 10 MB. -var MaxMemory = int64(1024 * 1024 * 10) - -// MultipartForm works much like Form, except it can parse multipart forms -// and handle file uploads. Like the other deserialization middleware handlers, -// you can pass in an interface to make the interface available for injection -// into other handlers later. -func MultipartForm(formStruct interface{}, ifacePtr ...interface{}) macaron.Handler { - return func(ctx *macaron.Context) { - var errors Errors - ensureNotPointer(formStruct) - formStruct := reflect.New(reflect.TypeOf(formStruct)) - // This if check is necessary due to https://github.com/martini-contrib/csrf/issues/6 - if ctx.Req.MultipartForm == nil { - // Workaround for multipart forms returning nil instead of an error - // when content is not multipart; see https://code.google.com/p/go/issues/detail?id=6334 - if multipartReader, err := ctx.Req.MultipartReader(); err != nil { - errors.Add([]string{}, ERR_DESERIALIZATION, err.Error()) - } else { - form, parseErr := multipartReader.ReadForm(MaxMemory) - if parseErr != nil { - errors.Add([]string{}, ERR_DESERIALIZATION, parseErr.Error()) - } - - if ctx.Req.Form == nil { - ctx.Req.ParseForm() - } - for k, v := range form.Value { - ctx.Req.Form[k] = append(ctx.Req.Form[k], v...) - } - - ctx.Req.MultipartForm = form - } - } - errors = mapForm(formStruct, ctx.Req.MultipartForm.Value, ctx.Req.MultipartForm.File, errors) - validateAndMap(formStruct, ctx, errors, ifacePtr...) - } -} - -// Json is middleware to deserialize a JSON payload from the request -// into the struct that is passed in. The resulting struct is then -// validated, but no error handling is actually performed here. -// An interface pointer can be added as a second argument in order -// to map the struct to a specific interface. -func Json(jsonStruct interface{}, ifacePtr ...interface{}) macaron.Handler { - return func(ctx *macaron.Context) { - var errors Errors - ensureNotPointer(jsonStruct) - jsonStruct := reflect.New(reflect.TypeOf(jsonStruct)) - if ctx.Req.Request.Body != nil { - defer ctx.Req.Request.Body.Close() - err := json.NewDecoder(ctx.Req.Request.Body).Decode(jsonStruct.Interface()) - if err != nil && err != io.EOF { - errors.Add([]string{}, ERR_DESERIALIZATION, err.Error()) - } - } - validateAndMap(jsonStruct, ctx, errors, ifacePtr...) - } -} - -// RawValidate is same as Validate but does not require a HTTP context, -// and can be used independently just for validation. -// This function does not support Validator interface. -func RawValidate(obj interface{}) Errors { - var errs Errors - v := reflect.ValueOf(obj) - k := v.Kind() - if k == reflect.Interface || k == reflect.Ptr { - v = v.Elem() - k = v.Kind() - } - if k == reflect.Slice || k == reflect.Array { - for i := 0; i < v.Len(); i++ { - e := v.Index(i).Interface() - errs = validateStruct(errs, e) - } - } else { - errs = validateStruct(errs, obj) - } - return errs -} - -// Validate is middleware to enforce required fields. If the struct -// passed in implements Validator, then the user-defined Validate method -// is executed, and its errors are mapped to the context. This middleware -// performs no error handling: it merely detects errors and maps them. -func Validate(obj interface{}) macaron.Handler { - return func(ctx *macaron.Context) { - var errs Errors - v := reflect.ValueOf(obj) - k := v.Kind() - if k == reflect.Interface || k == reflect.Ptr { - v = v.Elem() - k = v.Kind() - } - if k == reflect.Slice || k == reflect.Array { - for i := 0; i < v.Len(); i++ { - e := v.Index(i).Interface() - errs = validateStruct(errs, e) - if validator, ok := e.(Validator); ok { - errs = validator.Validate(ctx, errs) - } - } - } else { - errs = validateStruct(errs, obj) - if validator, ok := obj.(Validator); ok { - errs = validator.Validate(ctx, errs) - } - } - ctx.Map(errs) - } -} - -var ( - AlphaDashPattern = regexp.MustCompile("[^\\d\\w-_]") - AlphaDashDotPattern = regexp.MustCompile("[^\\d\\w-_\\.]") - EmailPattern = regexp.MustCompile("[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[a-zA-Z0-9](?:[\\w-]*[\\w])?") -) - -// Copied from github.com/asaskevich/govalidator. -const _MAX_URL_RUNE_COUNT = 2083 -const _MIN_URL_RUNE_COUNT = 3 - -var ( - urlSchemaRx = `((ftp|tcp|udp|wss?|https?):\/\/)` - urlUsernameRx = `(\S+(:\S*)?@)` - urlIPRx = `([1-9]\d?|1\d\d|2[01]\d|22[0-3])(\.(1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.([0-9]\d?|1\d\d|2[0-4]\d|25[0-4]))` - ipRx = `(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))` - urlSubdomainRx = `((www\.)|([a-zA-Z0-9]([-\.][-\._a-zA-Z0-9]+)*))` - urlPortRx = `(:(\d{1,5}))` - urlPathRx = `((\/|\?|#)[^\s]*)` - URLPattern = regexp.MustCompile(`^` + urlSchemaRx + `?` + urlUsernameRx + `?` + `((` + urlIPRx + `|(\[` + ipRx + `\])|(([a-zA-Z0-9]([a-zA-Z0-9-_]+)?[a-zA-Z0-9]([-\.][a-zA-Z0-9]+)*)|(` + urlSubdomainRx + `?))?(([a-zA-Z\x{00a1}-\x{ffff}0-9]+-?-?)*[a-zA-Z\x{00a1}-\x{ffff}0-9]+)(?:\.([a-zA-Z\x{00a1}-\x{ffff}]{1,}))?))\.?` + urlPortRx + `?` + urlPathRx + `?$`) -) - -// IsURL check if the string is an URL. -func isURL(str string) bool { - if str == "" || utf8.RuneCountInString(str) >= _MAX_URL_RUNE_COUNT || len(str) <= _MIN_URL_RUNE_COUNT || strings.HasPrefix(str, ".") { - return false - } - u, err := url.Parse(str) - if err != nil { - return false - } - if strings.HasPrefix(u.Host, ".") { - return false - } - if u.Host == "" && (u.Path != "" && !strings.Contains(u.Path, ".")) { - return false - } - return URLPattern.MatchString(str) - -} - -type ( - // Rule represents a validation rule. - Rule struct { - // IsMatch checks if rule matches. - IsMatch func(string) bool - // IsValid applies validation rule to condition. - IsValid func(Errors, string, interface{}) (bool, Errors) - } - - // ParamRule does same thing as Rule but passes rule itself to IsValid method. - ParamRule struct { - // IsMatch checks if rule matches. - IsMatch func(string) bool - // IsValid applies validation rule to condition. - IsValid func(Errors, string, string, interface{}) (bool, Errors) - } - - // RuleMapper and ParamRuleMapper represent validation rule mappers, - // it allwos users to add custom validation rules. - RuleMapper []*Rule - ParamRuleMapper []*ParamRule -) - -var ruleMapper RuleMapper -var paramRuleMapper ParamRuleMapper - -// AddRule adds new validation rule. -func AddRule(r *Rule) { - ruleMapper = append(ruleMapper, r) -} - -// AddParamRule adds new validation rule. -func AddParamRule(r *ParamRule) { - paramRuleMapper = append(paramRuleMapper, r) -} - -func in(fieldValue interface{}, arr string) bool { - val := fmt.Sprintf("%v", fieldValue) - vals := strings.Split(arr, ",") - isIn := false - for _, v := range vals { - if v == val { - isIn = true - break - } - } - return isIn -} - -func parseFormName(raw, actual string) string { - if len(actual) > 0 { - return actual - } - return nameMapper(raw) -} - -// Performs required field checking on a struct -func validateStruct(errors Errors, obj interface{}) Errors { - typ := reflect.TypeOf(obj) - val := reflect.ValueOf(obj) - - if typ.Kind() == reflect.Ptr { - typ = typ.Elem() - val = val.Elem() - } - - for i := 0; i < typ.NumField(); i++ { - field := typ.Field(i) - - // Allow ignored fields in the struct - if field.Tag.Get("form") == "-" || !val.Field(i).CanInterface() { - continue - } - - fieldVal := val.Field(i) - fieldValue := fieldVal.Interface() - zero := reflect.Zero(field.Type).Interface() - - // Validate nested and embedded structs (if pointer, only do so if not nil) - if field.Type.Kind() == reflect.Struct || - (field.Type.Kind() == reflect.Ptr && !reflect.DeepEqual(zero, fieldValue) && - field.Type.Elem().Kind() == reflect.Struct) { - errors = validateStruct(errors, fieldValue) - } - errors = validateField(errors, zero, field, fieldVal, fieldValue) - } - return errors -} - -func validateField(errors Errors, zero interface{}, field reflect.StructField, fieldVal reflect.Value, fieldValue interface{}) Errors { - if fieldVal.Kind() == reflect.Slice { - for i := 0; i < fieldVal.Len(); i++ { - sliceVal := fieldVal.Index(i) - if sliceVal.Kind() == reflect.Ptr { - sliceVal = sliceVal.Elem() - } - - sliceValue := sliceVal.Interface() - zero := reflect.Zero(sliceVal.Type()).Interface() - if sliceVal.Kind() == reflect.Struct || - (sliceVal.Kind() == reflect.Ptr && !reflect.DeepEqual(zero, sliceValue) && - sliceVal.Elem().Kind() == reflect.Struct) { - errors = validateStruct(errors, sliceValue) - } - /* Apply validation rules to each item in a slice. ISSUE #3 - else { - errors = validateField(errors, zero, field, sliceVal, sliceValue) - }*/ - } - } - -VALIDATE_RULES: - for _, rule := range strings.Split(field.Tag.Get("binding"), ";") { - if len(rule) == 0 { - continue - } - - switch { - case rule == "OmitEmpty": - if reflect.DeepEqual(zero, fieldValue) { - break VALIDATE_RULES - } - case rule == "Required": - v := reflect.ValueOf(fieldValue) - if v.Kind() == reflect.Slice { - if v.Len() == 0 { - errors.Add([]string{field.Name}, ERR_REQUIRED, "Required") - break VALIDATE_RULES - } - - continue - } - - if reflect.DeepEqual(zero, fieldValue) { - errors.Add([]string{field.Name}, ERR_REQUIRED, "Required") - break VALIDATE_RULES - } - case rule == "AlphaDash": - if AlphaDashPattern.MatchString(fmt.Sprintf("%v", fieldValue)) { - errors.Add([]string{field.Name}, ERR_ALPHA_DASH, "AlphaDash") - break VALIDATE_RULES - } - case rule == "AlphaDashDot": - if AlphaDashDotPattern.MatchString(fmt.Sprintf("%v", fieldValue)) { - errors.Add([]string{field.Name}, ERR_ALPHA_DASH_DOT, "AlphaDashDot") - break VALIDATE_RULES - } - case strings.HasPrefix(rule, "Size("): - size, _ := strconv.Atoi(rule[5 : len(rule)-1]) - if str, ok := fieldValue.(string); ok && utf8.RuneCountInString(str) != size { - errors.Add([]string{field.Name}, ERR_SIZE, "Size") - break VALIDATE_RULES - } - v := reflect.ValueOf(fieldValue) - if v.Kind() == reflect.Slice && v.Len() != size { - errors.Add([]string{field.Name}, ERR_SIZE, "Size") - break VALIDATE_RULES - } - case strings.HasPrefix(rule, "MinSize("): - min, _ := strconv.Atoi(rule[8 : len(rule)-1]) - if str, ok := fieldValue.(string); ok && utf8.RuneCountInString(str) < min { - errors.Add([]string{field.Name}, ERR_MIN_SIZE, "MinSize") - break VALIDATE_RULES - } - v := reflect.ValueOf(fieldValue) - if v.Kind() == reflect.Slice && v.Len() < min { - errors.Add([]string{field.Name}, ERR_MIN_SIZE, "MinSize") - break VALIDATE_RULES - } - case strings.HasPrefix(rule, "MaxSize("): - max, _ := strconv.Atoi(rule[8 : len(rule)-1]) - if str, ok := fieldValue.(string); ok && utf8.RuneCountInString(str) > max { - errors.Add([]string{field.Name}, ERR_MAX_SIZE, "MaxSize") - break VALIDATE_RULES - } - v := reflect.ValueOf(fieldValue) - if v.Kind() == reflect.Slice && v.Len() > max { - errors.Add([]string{field.Name}, ERR_MAX_SIZE, "MaxSize") - break VALIDATE_RULES - } - case strings.HasPrefix(rule, "Range("): - nums := strings.Split(rule[6:len(rule)-1], ",") - if len(nums) != 2 { - break VALIDATE_RULES - } - val := com.StrTo(fmt.Sprintf("%v", fieldValue)).MustInt() - if val < com.StrTo(nums[0]).MustInt() || val > com.StrTo(nums[1]).MustInt() { - errors.Add([]string{field.Name}, ERR_RANGE, "Range") - break VALIDATE_RULES - } - case rule == "Email": - if !EmailPattern.MatchString(fmt.Sprintf("%v", fieldValue)) { - errors.Add([]string{field.Name}, ERR_EMAIL, "Email") - break VALIDATE_RULES - } - case rule == "Url": - str := fmt.Sprintf("%v", fieldValue) - if len(str) == 0 { - continue - } else if !isURL(str) { - errors.Add([]string{field.Name}, ERR_URL, "Url") - break VALIDATE_RULES - } - case strings.HasPrefix(rule, "In("): - if !in(fieldValue, rule[3:len(rule)-1]) { - errors.Add([]string{field.Name}, ERR_IN, "In") - break VALIDATE_RULES - } - case strings.HasPrefix(rule, "NotIn("): - if in(fieldValue, rule[6:len(rule)-1]) { - errors.Add([]string{field.Name}, ERR_NOT_INT, "NotIn") - break VALIDATE_RULES - } - case strings.HasPrefix(rule, "Include("): - if !strings.Contains(fmt.Sprintf("%v", fieldValue), rule[8:len(rule)-1]) { - errors.Add([]string{field.Name}, ERR_INCLUDE, "Include") - break VALIDATE_RULES - } - case strings.HasPrefix(rule, "Exclude("): - if strings.Contains(fmt.Sprintf("%v", fieldValue), rule[8:len(rule)-1]) { - errors.Add([]string{field.Name}, ERR_EXCLUDE, "Exclude") - break VALIDATE_RULES - } - case strings.HasPrefix(rule, "Default("): - if reflect.DeepEqual(zero, fieldValue) { - if fieldVal.CanAddr() { - errors = setWithProperType(field.Type.Kind(), rule[8:len(rule)-1], fieldVal, field.Tag.Get("form"), errors) - } else { - errors.Add([]string{field.Name}, ERR_EXCLUDE, "Default") - break VALIDATE_RULES - } - } - default: - // Apply custom validation rules - var isValid bool - for i := range ruleMapper { - if ruleMapper[i].IsMatch(rule) { - isValid, errors = ruleMapper[i].IsValid(errors, field.Name, fieldValue) - if !isValid { - break VALIDATE_RULES - } - } - } - for i := range paramRuleMapper { - if paramRuleMapper[i].IsMatch(rule) { - isValid, errors = paramRuleMapper[i].IsValid(errors, rule, field.Name, fieldValue) - if !isValid { - break VALIDATE_RULES - } - } - } - } - } - return errors -} - -// NameMapper represents a form tag name mapper. -type NameMapper func(string) string - -var ( - nameMapper = func(field string) string { - newstr := make([]rune, 0, len(field)) - for i, chr := range field { - if isUpper := 'A' <= chr && chr <= 'Z'; isUpper { - if i > 0 { - newstr = append(newstr, '_') - } - chr -= ('A' - 'a') - } - newstr = append(newstr, chr) - } - return string(newstr) - } -) - -// SetNameMapper sets name mapper. -func SetNameMapper(nm NameMapper) { - nameMapper = nm -} - -// Takes values from the form data and puts them into a struct -func mapForm(formStruct reflect.Value, form map[string][]string, - formfile map[string][]*multipart.FileHeader, errors Errors) Errors { - - if formStruct.Kind() == reflect.Ptr { - formStruct = formStruct.Elem() - } - typ := formStruct.Type() - - for i := 0; i < typ.NumField(); i++ { - typeField := typ.Field(i) - structField := formStruct.Field(i) - - if typeField.Type.Kind() == reflect.Ptr && typeField.Anonymous { - structField.Set(reflect.New(typeField.Type.Elem())) - errors = mapForm(structField.Elem(), form, formfile, errors) - if reflect.DeepEqual(structField.Elem().Interface(), reflect.Zero(structField.Elem().Type()).Interface()) { - structField.Set(reflect.Zero(structField.Type())) - } - } else if typeField.Type.Kind() == reflect.Struct { - errors = mapForm(structField, form, formfile, errors) - } - - inputFieldName := parseFormName(typeField.Name, typeField.Tag.Get("form")) - if len(inputFieldName) == 0 || !structField.CanSet() { - continue - } - - inputValue, exists := form[inputFieldName] - if exists { - numElems := len(inputValue) - if structField.Kind() == reflect.Slice && numElems > 0 { - sliceOf := structField.Type().Elem().Kind() - slice := reflect.MakeSlice(structField.Type(), numElems, numElems) - for i := 0; i < numElems; i++ { - errors = setWithProperType(sliceOf, inputValue[i], slice.Index(i), inputFieldName, errors) - } - formStruct.Field(i).Set(slice) - } else { - errors = setWithProperType(typeField.Type.Kind(), inputValue[0], structField, inputFieldName, errors) - } - continue - } - - inputFile, exists := formfile[inputFieldName] - if !exists { - continue - } - fhType := reflect.TypeOf((*multipart.FileHeader)(nil)) - numElems := len(inputFile) - if structField.Kind() == reflect.Slice && numElems > 0 && structField.Type().Elem() == fhType { - slice := reflect.MakeSlice(structField.Type(), numElems, numElems) - for i := 0; i < numElems; i++ { - slice.Index(i).Set(reflect.ValueOf(inputFile[i])) - } - structField.Set(slice) - } else if structField.Type() == fhType { - structField.Set(reflect.ValueOf(inputFile[0])) - } - } - return errors -} - -// This sets the value in a struct of an indeterminate type to the -// matching value from the request (via Form middleware) in the -// same type, so that not all deserialized values have to be strings. -// Supported types are string, int, float, and bool. -func setWithProperType(valueKind reflect.Kind, val string, structField reflect.Value, nameInTag string, errors Errors) Errors { - switch valueKind { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - if val == "" { - val = "0" - } - intVal, err := strconv.ParseInt(val, 10, 64) - if err != nil { - errors.Add([]string{nameInTag}, ERR_INTERGER_TYPE, "Value could not be parsed as integer") - } else { - structField.SetInt(intVal) - } - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - if val == "" { - val = "0" - } - uintVal, err := strconv.ParseUint(val, 10, 64) - if err != nil { - errors.Add([]string{nameInTag}, ERR_INTERGER_TYPE, "Value could not be parsed as unsigned integer") - } else { - structField.SetUint(uintVal) - } - case reflect.Bool: - if val == "on" { - structField.SetBool(true) - break - } - - if val == "" { - val = "false" - } - boolVal, err := strconv.ParseBool(val) - if err != nil { - errors.Add([]string{nameInTag}, ERR_BOOLEAN_TYPE, "Value could not be parsed as boolean") - } else if boolVal { - structField.SetBool(true) - } - case reflect.Float32: - if val == "" { - val = "0.0" - } - floatVal, err := strconv.ParseFloat(val, 32) - if err != nil { - errors.Add([]string{nameInTag}, ERR_FLOAT_TYPE, "Value could not be parsed as 32-bit float") - } else { - structField.SetFloat(floatVal) - } - case reflect.Float64: - if val == "" { - val = "0.0" - } - floatVal, err := strconv.ParseFloat(val, 64) - if err != nil { - errors.Add([]string{nameInTag}, ERR_FLOAT_TYPE, "Value could not be parsed as 64-bit float") - } else { - structField.SetFloat(floatVal) - } - case reflect.String: - structField.SetString(val) - } - return errors -} - -// Don't pass in pointers to bind to. Can lead to bugs. -func ensureNotPointer(obj interface{}) { - if reflect.TypeOf(obj).Kind() == reflect.Ptr { - panic("Pointers are not accepted as binding models") - } -} - -// Performs validation and combines errors from validation -// with errors from deserialization, then maps both the -// resulting struct and the errors to the context. -func validateAndMap(obj reflect.Value, ctx *macaron.Context, errors Errors, ifacePtr ...interface{}) { - ctx.Invoke(Validate(obj.Interface())) - errors = append(errors, getErrors(ctx)...) - ctx.Map(errors) - ctx.Map(obj.Elem().Interface()) - if len(ifacePtr) > 0 { - ctx.MapTo(obj.Elem().Interface(), ifacePtr[0]) - } -} - -// getErrors simply gets the errors from the context (it's kind of a chore) -func getErrors(ctx *macaron.Context) Errors { - return ctx.GetVal(reflect.TypeOf(Errors{})).Interface().(Errors) -} - -type ( - // ErrorHandler is the interface that has custom error handling process. - ErrorHandler interface { - // Error handles validation errors with custom process. - Error(*macaron.Context, Errors) - } - - // Validator is the interface that handles some rudimentary - // request validation logic so your application doesn't have to. - Validator interface { - // Validate validates that the request is OK. It is recommended - // that validation be limited to checking values for syntax and - // semantics, enough to know that you can make sense of the request - // in your application. For example, you might verify that a credit - // card number matches a valid pattern, but you probably wouldn't - // perform an actual credit card authorization here. - Validate(*macaron.Context, Errors) Errors - } -) diff --git a/vendor/github.com/go-macaron/binding/errors.go b/vendor/github.com/go-macaron/binding/errors.go deleted file mode 100644 index 8cbe44a9d..000000000 --- a/vendor/github.com/go-macaron/binding/errors.go +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2014 Martini Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package binding - -const ( - // Type mismatch errors. - ERR_CONTENT_TYPE = "ContentTypeError" - ERR_DESERIALIZATION = "DeserializationError" - ERR_INTERGER_TYPE = "IntegerTypeError" - ERR_BOOLEAN_TYPE = "BooleanTypeError" - ERR_FLOAT_TYPE = "FloatTypeError" - - // Validation errors. - ERR_REQUIRED = "RequiredError" - ERR_ALPHA_DASH = "AlphaDashError" - ERR_ALPHA_DASH_DOT = "AlphaDashDotError" - ERR_SIZE = "SizeError" - ERR_MIN_SIZE = "MinSizeError" - ERR_MAX_SIZE = "MaxSizeError" - ERR_RANGE = "RangeError" - ERR_EMAIL = "EmailError" - ERR_URL = "UrlError" - ERR_IN = "InError" - ERR_NOT_INT = "NotInError" - ERR_INCLUDE = "IncludeError" - ERR_EXCLUDE = "ExcludeError" - ERR_DEFAULT = "DefaultError" -) - -type ( - // Errors may be generated during deserialization, binding, - // or validation. This type is mapped to the context so you - // can inject it into your own handlers and use it in your - // application if you want all your errors to look the same. - Errors []Error - - Error struct { - // An error supports zero or more field names, because an - // error can morph three ways: (1) it can indicate something - // wrong with the request as a whole, (2) it can point to a - // specific problem with a particular input field, or (3) it - // can span multiple related input fields. - FieldNames []string `json:"fieldNames,omitempty"` - - // The classification is like an error code, convenient to - // use when processing or categorizing an error programmatically. - // It may also be called the "kind" of error. - Classification string `json:"classification,omitempty"` - - // Message should be human-readable and detailed enough to - // pinpoint and resolve the problem, but it should be brief. For - // example, a payload of 100 objects in a JSON array might have - // an error in the 41st object. The message should help the - // end user find and fix the error with their request. - Message string `json:"message,omitempty"` - } -) - -// Add adds an error associated with the fields indicated -// by fieldNames, with the given classification and message. -func (e *Errors) Add(fieldNames []string, classification, message string) { - *e = append(*e, Error{ - FieldNames: fieldNames, - Classification: classification, - Message: message, - }) -} - -// Len returns the number of errors. -func (e *Errors) Len() int { - return len(*e) -} - -// Has determines whether an Errors slice has an Error with -// a given classification in it; it does not search on messages -// or field names. -func (e *Errors) Has(class string) bool { - for _, err := range *e { - if err.Kind() == class { - return true - } - } - return false -} - -/* -// WithClass gets a copy of errors that are classified by the -// the given classification. -func (e *Errors) WithClass(classification string) Errors { - var errs Errors - for _, err := range *e { - if err.Kind() == classification { - errs = append(errs, err) - } - } - return errs -} - -// ForField gets a copy of errors that are associated with the -// field by the given name. -func (e *Errors) ForField(name string) Errors { - var errs Errors - for _, err := range *e { - for _, fieldName := range err.Fields() { - if fieldName == name { - errs = append(errs, err) - break - } - } - } - return errs -} - -// Get gets errors of a particular class for the specified -// field name. -func (e *Errors) Get(class, fieldName string) Errors { - var errs Errors - for _, err := range *e { - if err.Kind() == class { - for _, nameOfField := range err.Fields() { - if nameOfField == fieldName { - errs = append(errs, err) - break - } - } - } - } - return errs -} -*/ - -// Fields returns the list of field names this error is -// associated with. -func (e Error) Fields() []string { - return e.FieldNames -} - -// Kind returns this error's classification. -func (e Error) Kind() string { - return e.Classification -} - -// Error returns this error's message. -func (e Error) Error() string { - return e.Message -} diff --git a/vendor/github.com/go-macaron/cache/LICENSE b/vendor/github.com/go-macaron/cache/LICENSE deleted file mode 100644 index 8405e89a0..000000000 --- a/vendor/github.com/go-macaron/cache/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -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: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -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 -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. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/cache/README.md b/vendor/github.com/go-macaron/cache/README.md deleted file mode 100644 index d27aa93b6..000000000 --- a/vendor/github.com/go-macaron/cache/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# cache [![Build Status](https://travis-ci.org/go-macaron/cache.svg?branch=master)](https://travis-ci.org/go-macaron/cache) [![](http://gocover.io/_badge/github.com/go-macaron/cache)](http://gocover.io/github.com/go-macaron/cache) - -Middleware cache provides cache management for [Macaron](https://github.com/go-macaron/macaron). It can use many cache adapters, including memory, file, Redis, Memcache, PostgreSQL, MySQL, Ledis and Nodb. - -### Installation - - go get github.com/go-macaron/cache - -## Getting Help - -- [API Reference](https://gowalker.org/github.com/go-macaron/cache) -- [Documentation](http://go-macaron.com/docs/middlewares/cache) - -## Credits - -This package is a modified version of [beego/cache](https://github.com/astaxie/beego/tree/master/cache). - -## License - -This project is under the Apache License, Version 2.0. See the [LICENSE](LICENSE) file for the full license text. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/cache/cache.go b/vendor/github.com/go-macaron/cache/cache.go deleted file mode 100644 index 7742a3245..000000000 --- a/vendor/github.com/go-macaron/cache/cache.go +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2013 Beego Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -// Package cache is a middleware that provides the cache management of Macaron. -package cache - -import ( - "fmt" - - "gopkg.in/macaron.v1" -) - -const _VERSION = "0.3.0" - -func Version() string { - return _VERSION -} - -// Cache is the interface that operates the cache data. -type Cache interface { - // Put puts value into cache with key and expire time. - Put(key string, val interface{}, timeout int64) error - // Get gets cached value by given key. - Get(key string) interface{} - // Delete deletes cached value by given key. - Delete(key string) error - // Incr increases cached int-type value by given key as a counter. - Incr(key string) error - // Decr decreases cached int-type value by given key as a counter. - Decr(key string) error - // IsExist returns true if cached value exists. - IsExist(key string) bool - // Flush deletes all cached data. - Flush() error - // StartAndGC starts GC routine based on config string settings. - StartAndGC(opt Options) error -} - -// Options represents a struct for specifying configuration options for the cache middleware. -type Options struct { - // Name of adapter. Default is "memory". - Adapter string - // Adapter configuration, it's corresponding to adapter. - AdapterConfig string - // GC interval time in seconds. Default is 60. - Interval int - // Occupy entire database. Default is false. - OccupyMode bool - // Configuration section name. Default is "cache". - Section string -} - -func prepareOptions(options []Options) Options { - var opt Options - if len(options) > 0 { - opt = options[0] - } - if len(opt.Section) == 0 { - opt.Section = "cache" - } - sec := macaron.Config().Section(opt.Section) - - if len(opt.Adapter) == 0 { - opt.Adapter = sec.Key("ADAPTER").MustString("memory") - } - if opt.Interval == 0 { - opt.Interval = sec.Key("INTERVAL").MustInt(60) - } - if len(opt.AdapterConfig) == 0 { - opt.AdapterConfig = sec.Key("ADAPTER_CONFIG").MustString("data/caches") - } - - return opt -} - -// NewCacher creates and returns a new cacher by given adapter name and configuration. -// It panics when given adapter isn't registered and starts GC automatically. -func NewCacher(name string, opt Options) (Cache, error) { - adapter, ok := adapters[name] - if !ok { - return nil, fmt.Errorf("cache: unknown adapter '%s'(forgot to import?)", name) - } - return adapter, adapter.StartAndGC(opt) -} - -// Cacher is a middleware that maps a cache.Cache service into the Macaron handler chain. -// An single variadic cache.Options struct can be optionally provided to configure. -func Cacher(options ...Options) macaron.Handler { - opt := prepareOptions(options) - cache, err := NewCacher(opt.Adapter, opt) - if err != nil { - panic(err) - } - return func(ctx *macaron.Context) { - ctx.Map(cache) - } -} - -var adapters = make(map[string]Cache) - -// Register registers a adapter. -func Register(name string, adapter Cache) { - if adapter == nil { - panic("cache: cannot register adapter with nil value") - } - if _, dup := adapters[name]; dup { - panic(fmt.Errorf("cache: cannot register adapter '%s' twice", name)) - } - adapters[name] = adapter -} diff --git a/vendor/github.com/go-macaron/cache/file.go b/vendor/github.com/go-macaron/cache/file.go deleted file mode 100644 index d9a33dcf9..000000000 --- a/vendor/github.com/go-macaron/cache/file.go +++ /dev/null @@ -1,208 +0,0 @@ -// Copyright 2013 Beego Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package cache - -import ( - "crypto/md5" - "encoding/hex" - "fmt" - "io/ioutil" - "log" - "os" - "path/filepath" - "sync" - "time" - - "github.com/Unknwon/com" - "gopkg.in/macaron.v1" -) - -// Item represents a cache item. -type Item struct { - Val interface{} - Created int64 - Expire int64 -} - -func (item *Item) hasExpired() bool { - return item.Expire > 0 && - (time.Now().Unix()-item.Created) >= item.Expire -} - -// FileCacher represents a file cache adapter implementation. -type FileCacher struct { - lock sync.Mutex - rootPath string - interval int // GC interval. -} - -// NewFileCacher creates and returns a new file cacher. -func NewFileCacher() *FileCacher { - return &FileCacher{} -} - -func (c *FileCacher) filepath(key string) string { - m := md5.Sum([]byte(key)) - hash := hex.EncodeToString(m[:]) - return filepath.Join(c.rootPath, string(hash[0]), string(hash[1]), hash) -} - -// Put puts value into cache with key and expire time. -// If expired is 0, it will not be deleted by GC. -func (c *FileCacher) Put(key string, val interface{}, expire int64) error { - filename := c.filepath(key) - item := &Item{val, time.Now().Unix(), expire} - data, err := EncodeGob(item) - if err != nil { - return err - } - - os.MkdirAll(filepath.Dir(filename), os.ModePerm) - return ioutil.WriteFile(filename, data, os.ModePerm) -} - -func (c *FileCacher) read(key string) (*Item, error) { - filename := c.filepath(key) - - data, err := ioutil.ReadFile(filename) - if err != nil { - return nil, err - } - - item := new(Item) - return item, DecodeGob(data, item) -} - -// Get gets cached value by given key. -func (c *FileCacher) Get(key string) interface{} { - item, err := c.read(key) - if err != nil { - return nil - } - - if item.hasExpired() { - os.Remove(c.filepath(key)) - return nil - } - return item.Val -} - -// Delete deletes cached value by given key. -func (c *FileCacher) Delete(key string) error { - return os.Remove(c.filepath(key)) -} - -// Incr increases cached int-type value by given key as a counter. -func (c *FileCacher) Incr(key string) error { - item, err := c.read(key) - if err != nil { - return err - } - - item.Val, err = Incr(item.Val) - if err != nil { - return err - } - - return c.Put(key, item.Val, item.Expire) -} - -// Decrease cached int value. -func (c *FileCacher) Decr(key string) error { - item, err := c.read(key) - if err != nil { - return err - } - - item.Val, err = Decr(item.Val) - if err != nil { - return err - } - - return c.Put(key, item.Val, item.Expire) -} - -// IsExist returns true if cached value exists. -func (c *FileCacher) IsExist(key string) bool { - return com.IsExist(c.filepath(key)) -} - -// Flush deletes all cached data. -func (c *FileCacher) Flush() error { - return os.RemoveAll(c.rootPath) -} - -func (c *FileCacher) startGC() { - c.lock.Lock() - defer c.lock.Unlock() - - if c.interval < 1 { - return - } - - if err := filepath.Walk(c.rootPath, func(path string, fi os.FileInfo, err error) error { - if err != nil { - return fmt.Errorf("Walk: %v", err) - } - - if fi.IsDir() { - return nil - } - - data, err := ioutil.ReadFile(path) - if err != nil && !os.IsNotExist(err) { - fmt.Errorf("ReadFile: %v", err) - } - - item := new(Item) - if err = DecodeGob(data, item); err != nil { - return err - } - if item.hasExpired() { - if err = os.Remove(path); err != nil && !os.IsNotExist(err) { - return fmt.Errorf("Remove: %v", err) - } - } - return nil - }); err != nil { - log.Printf("error garbage collecting cache files: %v", err) - } - - time.AfterFunc(time.Duration(c.interval)*time.Second, func() { c.startGC() }) -} - -// StartAndGC starts GC routine based on config string settings. -func (c *FileCacher) StartAndGC(opt Options) error { - c.lock.Lock() - c.rootPath = opt.AdapterConfig - c.interval = opt.Interval - - if !filepath.IsAbs(c.rootPath) { - c.rootPath = filepath.Join(macaron.Root, c.rootPath) - } - c.lock.Unlock() - - if err := os.MkdirAll(c.rootPath, os.ModePerm); err != nil { - return err - } - - go c.startGC() - return nil -} - -func init() { - Register("file", NewFileCacher()) -} diff --git a/vendor/github.com/go-macaron/cache/memcache/memcache.go b/vendor/github.com/go-macaron/cache/memcache/memcache.go deleted file mode 100644 index f8a99097f..000000000 --- a/vendor/github.com/go-macaron/cache/memcache/memcache.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2013 Beego Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package cache - -import ( - "strings" - - "github.com/Unknwon/com" - "github.com/bradfitz/gomemcache/memcache" - - "github.com/go-macaron/cache" -) - -// MemcacheCacher represents a memcache cache adapter implementation. -type MemcacheCacher struct { - c *memcache.Client -} - -func NewItem(key string, data []byte, expire int32) *memcache.Item { - return &memcache.Item{ - Key: key, - Value: data, - Expiration: expire, - } -} - -// Put puts value into cache with key and expire time. -// If expired is 0, it lives forever. -func (c *MemcacheCacher) Put(key string, val interface{}, expire int64) error { - return c.c.Set(NewItem(key, []byte(com.ToStr(val)), int32(expire))) -} - -// Get gets cached value by given key. -func (c *MemcacheCacher) Get(key string) interface{} { - item, err := c.c.Get(key) - if err != nil { - return nil - } - return string(item.Value) -} - -// Delete deletes cached value by given key. -func (c *MemcacheCacher) Delete(key string) error { - return c.c.Delete(key) -} - -// Incr increases cached int-type value by given key as a counter. -func (c *MemcacheCacher) Incr(key string) error { - _, err := c.c.Increment(key, 1) - return err -} - -// Decr decreases cached int-type value by given key as a counter. -func (c *MemcacheCacher) Decr(key string) error { - _, err := c.c.Decrement(key, 1) - return err -} - -// IsExist returns true if cached value exists. -func (c *MemcacheCacher) IsExist(key string) bool { - _, err := c.c.Get(key) - return err == nil -} - -// Flush deletes all cached data. -func (c *MemcacheCacher) Flush() error { - return c.c.FlushAll() -} - -// StartAndGC starts GC routine based on config string settings. -// AdapterConfig: 127.0.0.1:9090;127.0.0.1:9091 -func (c *MemcacheCacher) StartAndGC(opt cache.Options) error { - c.c = memcache.New(strings.Split(opt.AdapterConfig, ";")...) - return nil -} - -func init() { - cache.Register("memcache", &MemcacheCacher{}) -} diff --git a/vendor/github.com/go-macaron/cache/memcache/memcache.goconvey b/vendor/github.com/go-macaron/cache/memcache/memcache.goconvey deleted file mode 100644 index 8485e986e..000000000 --- a/vendor/github.com/go-macaron/cache/memcache/memcache.goconvey +++ /dev/null @@ -1 +0,0 @@ -ignore \ No newline at end of file diff --git a/vendor/github.com/go-macaron/cache/memory.go b/vendor/github.com/go-macaron/cache/memory.go deleted file mode 100644 index 2d5a8fac4..000000000 --- a/vendor/github.com/go-macaron/cache/memory.go +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2013 Beego Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package cache - -import ( - "errors" - "sync" - "time" -) - -// MemoryItem represents a memory cache item. -type MemoryItem struct { - val interface{} - created int64 - expire int64 -} - -func (item *MemoryItem) hasExpired() bool { - return item.expire > 0 && - (time.Now().Unix()-item.created) >= item.expire -} - -// MemoryCacher represents a memory cache adapter implementation. -type MemoryCacher struct { - lock sync.RWMutex - items map[string]*MemoryItem - interval int // GC interval. -} - -// NewMemoryCacher creates and returns a new memory cacher. -func NewMemoryCacher() *MemoryCacher { - return &MemoryCacher{items: make(map[string]*MemoryItem)} -} - -// Put puts value into cache with key and expire time. -// If expired is 0, it will be deleted by next GC operation. -func (c *MemoryCacher) Put(key string, val interface{}, expire int64) error { - c.lock.Lock() - defer c.lock.Unlock() - - c.items[key] = &MemoryItem{ - val: val, - created: time.Now().Unix(), - expire: expire, - } - return nil -} - -// Get gets cached value by given key. -func (c *MemoryCacher) Get(key string) interface{} { - c.lock.RLock() - defer c.lock.RUnlock() - - item, ok := c.items[key] - if !ok { - return nil - } - if item.hasExpired() { - go c.Delete(key) - return nil - } - return item.val -} - -// Delete deletes cached value by given key. -func (c *MemoryCacher) Delete(key string) error { - c.lock.Lock() - defer c.lock.Unlock() - - delete(c.items, key) - return nil -} - -// Incr increases cached int-type value by given key as a counter. -func (c *MemoryCacher) Incr(key string) (err error) { - c.lock.RLock() - defer c.lock.RUnlock() - - item, ok := c.items[key] - if !ok { - return errors.New("key not exist") - } - item.val, err = Incr(item.val) - return err -} - -// Decr decreases cached int-type value by given key as a counter. -func (c *MemoryCacher) Decr(key string) (err error) { - c.lock.RLock() - defer c.lock.RUnlock() - - item, ok := c.items[key] - if !ok { - return errors.New("key not exist") - } - - item.val, err = Decr(item.val) - return err -} - -// IsExist returns true if cached value exists. -func (c *MemoryCacher) IsExist(key string) bool { - c.lock.RLock() - defer c.lock.RUnlock() - - _, ok := c.items[key] - return ok -} - -// Flush deletes all cached data. -func (c *MemoryCacher) Flush() error { - c.lock.Lock() - defer c.lock.Unlock() - - c.items = make(map[string]*MemoryItem) - return nil -} - -func (c *MemoryCacher) checkRawExpiration(key string) { - item, ok := c.items[key] - if !ok { - return - } - - if item.hasExpired() { - delete(c.items, key) - } -} - -func (c *MemoryCacher) checkExpiration(key string) { - c.lock.Lock() - defer c.lock.Unlock() - - c.checkRawExpiration(key) -} - -func (c *MemoryCacher) startGC() { - c.lock.Lock() - defer c.lock.Unlock() - - if c.interval < 1 { - return - } - - if c.items != nil { - for key, _ := range c.items { - c.checkRawExpiration(key) - } - } - - time.AfterFunc(time.Duration(c.interval)*time.Second, func() { c.startGC() }) -} - -// StartAndGC starts GC routine based on config string settings. -func (c *MemoryCacher) StartAndGC(opt Options) error { - c.lock.Lock() - c.interval = opt.Interval - c.lock.Unlock() - - go c.startGC() - return nil -} - -func init() { - Register("memory", NewMemoryCacher()) -} diff --git a/vendor/github.com/go-macaron/cache/redis/redis.go b/vendor/github.com/go-macaron/cache/redis/redis.go deleted file mode 100644 index 5b59fbd29..000000000 --- a/vendor/github.com/go-macaron/cache/redis/redis.go +++ /dev/null @@ -1,178 +0,0 @@ -// Copyright 2013 Beego Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package cache - -import ( - "fmt" - "strings" - "time" - - "github.com/Unknwon/com" - "gopkg.in/ini.v1" - "gopkg.in/redis.v2" - - "github.com/go-macaron/cache" -) - -// RedisCacher represents a redis cache adapter implementation. -type RedisCacher struct { - c *redis.Client - prefix string - hsetName string - occupyMode bool -} - -// Put puts value into cache with key and expire time. -// If expired is 0, it lives forever. -func (c *RedisCacher) Put(key string, val interface{}, expire int64) error { - key = c.prefix + key - if expire == 0 { - if err := c.c.Set(key, com.ToStr(val)).Err(); err != nil { - return err - } - } else { - dur, err := time.ParseDuration(com.ToStr(expire) + "s") - if err != nil { - return err - } - if err = c.c.SetEx(key, dur, com.ToStr(val)).Err(); err != nil { - return err - } - } - - if c.occupyMode { - return nil - } - return c.c.HSet(c.hsetName, key, "0").Err() -} - -// Get gets cached value by given key. -func (c *RedisCacher) Get(key string) interface{} { - val, err := c.c.Get(c.prefix + key).Result() - if err != nil { - return nil - } - return val -} - -// Delete deletes cached value by given key. -func (c *RedisCacher) Delete(key string) error { - key = c.prefix + key - if err := c.c.Del(key).Err(); err != nil { - return err - } - - if c.occupyMode { - return nil - } - return c.c.HDel(c.hsetName, key).Err() -} - -// Incr increases cached int-type value by given key as a counter. -func (c *RedisCacher) Incr(key string) error { - if !c.IsExist(key) { - return fmt.Errorf("key '%s' not exist", key) - } - return c.c.Incr(c.prefix + key).Err() -} - -// Decr decreases cached int-type value by given key as a counter. -func (c *RedisCacher) Decr(key string) error { - if !c.IsExist(key) { - return fmt.Errorf("key '%s' not exist", key) - } - return c.c.Decr(c.prefix + key).Err() -} - -// IsExist returns true if cached value exists. -func (c *RedisCacher) IsExist(key string) bool { - if c.c.Exists(c.prefix + key).Val() { - return true - } - - if !c.occupyMode { - c.c.HDel(c.hsetName, c.prefix+key) - } - return false -} - -// Flush deletes all cached data. -func (c *RedisCacher) Flush() error { - if c.occupyMode { - return c.c.FlushDb().Err() - } - - keys, err := c.c.HKeys(c.hsetName).Result() - if err != nil { - return err - } - if err = c.c.Del(keys...).Err(); err != nil { - return err - } - return c.c.Del(c.hsetName).Err() -} - -// StartAndGC starts GC routine based on config string settings. -// AdapterConfig: network=tcp,addr=:6379,password=macaron,db=0,pool_size=100,idle_timeout=180,hset_name=MacaronCache,prefix=cache: -func (c *RedisCacher) StartAndGC(opts cache.Options) error { - c.hsetName = "MacaronCache" - c.occupyMode = opts.OccupyMode - - cfg, err := ini.Load([]byte(strings.Replace(opts.AdapterConfig, ",", "\n", -1))) - if err != nil { - return err - } - - opt := &redis.Options{ - Network: "tcp", - } - for k, v := range cfg.Section("").KeysHash() { - switch k { - case "network": - opt.Network = v - case "addr": - opt.Addr = v - case "password": - opt.Password = v - case "db": - opt.DB = com.StrTo(v).MustInt64() - case "pool_size": - opt.PoolSize = com.StrTo(v).MustInt() - case "idle_timeout": - opt.IdleTimeout, err = time.ParseDuration(v + "s") - if err != nil { - return fmt.Errorf("error parsing idle timeout: %v", err) - } - case "hset_name": - c.hsetName = v - case "prefix": - c.prefix = v - default: - return fmt.Errorf("session/redis: unsupported option '%s'", k) - } - } - - c.c = redis.NewClient(opt) - if err = c.c.Ping().Err(); err != nil { - return err - } - - return nil -} - -func init() { - cache.Register("redis", &RedisCacher{}) -} diff --git a/vendor/github.com/go-macaron/cache/redis/redis.goconvey b/vendor/github.com/go-macaron/cache/redis/redis.goconvey deleted file mode 100644 index 8485e986e..000000000 --- a/vendor/github.com/go-macaron/cache/redis/redis.goconvey +++ /dev/null @@ -1 +0,0 @@ -ignore \ No newline at end of file diff --git a/vendor/github.com/go-macaron/cache/utils.go b/vendor/github.com/go-macaron/cache/utils.go deleted file mode 100644 index 734fb6f40..000000000 --- a/vendor/github.com/go-macaron/cache/utils.go +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package cache - -import ( - "bytes" - "encoding/gob" - "errors" -) - -func EncodeGob(item *Item) ([]byte, error) { - buf := bytes.NewBuffer(nil) - err := gob.NewEncoder(buf).Encode(item) - return buf.Bytes(), err -} - -func DecodeGob(data []byte, out *Item) error { - buf := bytes.NewBuffer(data) - return gob.NewDecoder(buf).Decode(&out) -} - -func Incr(val interface{}) (interface{}, error) { - switch val.(type) { - case int: - val = val.(int) + 1 - case int32: - val = val.(int32) + 1 - case int64: - val = val.(int64) + 1 - case uint: - val = val.(uint) + 1 - case uint32: - val = val.(uint32) + 1 - case uint64: - val = val.(uint64) + 1 - default: - return val, errors.New("item value is not int-type") - } - return val, nil -} - -func Decr(val interface{}) (interface{}, error) { - switch val.(type) { - case int: - val = val.(int) - 1 - case int32: - val = val.(int32) - 1 - case int64: - val = val.(int64) - 1 - case uint: - if val.(uint) > 0 { - val = val.(uint) - 1 - } else { - return val, errors.New("item value is less than 0") - } - case uint32: - if val.(uint32) > 0 { - val = val.(uint32) - 1 - } else { - return val, errors.New("item value is less than 0") - } - case uint64: - if val.(uint64) > 0 { - val = val.(uint64) - 1 - } else { - return val, errors.New("item value is less than 0") - } - default: - return val, errors.New("item value is not int-type") - } - return val, nil -} diff --git a/vendor/github.com/go-macaron/captcha/LICENSE b/vendor/github.com/go-macaron/captcha/LICENSE deleted file mode 100644 index 8405e89a0..000000000 --- a/vendor/github.com/go-macaron/captcha/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -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: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -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 -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. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/captcha/README.md b/vendor/github.com/go-macaron/captcha/README.md deleted file mode 100644 index 5eab6f3fe..000000000 --- a/vendor/github.com/go-macaron/captcha/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# captcha [![Build Status](https://travis-ci.org/go-macaron/captcha.svg?branch=master)](https://travis-ci.org/go-macaron/captcha) - -Middleware captcha provides captcha service for [Macaron](https://github.com/go-macaron/macaron). - -### Installation - - go get github.com/go-macaron/captcha - -## Getting Help - -- [API Reference](https://gowalker.org/github.com/go-macaron/captcha) -- [Documentation](http://go-macaron.com/docs/middlewares/captcha) - -## License - -This project is under the Apache License, Version 2.0. See the [LICENSE](LICENSE) file for the full license text. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/captcha/captcha.go b/vendor/github.com/go-macaron/captcha/captcha.go deleted file mode 100644 index 687c67a9a..000000000 --- a/vendor/github.com/go-macaron/captcha/captcha.go +++ /dev/null @@ -1,241 +0,0 @@ -// Copyright 2013 Beego Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -// Package captcha a middleware that provides captcha service for Macaron. -package captcha - -import ( - "fmt" - "html/template" - "path" - "strings" - - "github.com/Unknwon/com" - "github.com/go-macaron/cache" - "gopkg.in/macaron.v1" -) - -const _VERSION = "0.1.0" - -func Version() string { - return _VERSION -} - -var ( - defaultChars = []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} -) - -// Captcha represents a captcha service. -type Captcha struct { - store cache.Cache - SubURL string - URLPrefix string - FieldIdName string - FieldCaptchaName string - StdWidth int - StdHeight int - ChallengeNums int - Expiration int64 - CachePrefix string -} - -// generate key string -func (c *Captcha) key(id string) string { - return c.CachePrefix + id -} - -// generate rand chars with default chars -func (c *Captcha) genRandChars() string { - return string(com.RandomCreateBytes(c.ChallengeNums, defaultChars...)) -} - -// tempalte func for output html -func (c *Captcha) CreateHtml() template.HTML { - value, err := c.CreateCaptcha() - if err != nil { - panic(fmt.Errorf("fail to create captcha: %v", err)) - } - return template.HTML(fmt.Sprintf(` - - - `, c.FieldIdName, value, c.SubURL, c.URLPrefix, value, c.SubURL, c.URLPrefix, value)) -} - -// create a new captcha id -func (c *Captcha) CreateCaptcha() (string, error) { - id := string(com.RandomCreateBytes(15)) - if err := c.store.Put(c.key(id), c.genRandChars(), c.Expiration); err != nil { - return "", err - } - return id, nil -} - -// verify from a request -func (c *Captcha) VerifyReq(req macaron.Request) bool { - req.ParseForm() - return c.Verify(req.Form.Get(c.FieldIdName), req.Form.Get(c.FieldCaptchaName)) -} - -// direct verify id and challenge string -func (c *Captcha) Verify(id string, challenge string) bool { - if len(challenge) == 0 || len(id) == 0 { - return false - } - - var chars string - - key := c.key(id) - - if v, ok := c.store.Get(key).(string); ok { - chars = v - } else { - return false - } - - defer c.store.Delete(key) - - if len(chars) != len(challenge) { - return false - } - - // verify challenge - for i, c := range []byte(chars) { - if c != challenge[i]-48 { - return false - } - } - - return true -} - -type Options struct { - // Suburl path. Default is empty. - SubURL string - // URL prefix of getting captcha pictures. Default is "/captcha/". - URLPrefix string - // Hidden input element ID. Default is "captcha_id". - FieldIdName string - // User input value element name in request form. Default is "captcha". - FieldCaptchaName string - // Challenge number. Default is 6. - ChallengeNums int - // Captcha image width. Default is 240. - Width int - // Captcha image height. Default is 80. - Height int - // Captcha expiration time in seconds. Default is 600. - Expiration int64 - // Cache key prefix captcha characters. Default is "captcha_". - CachePrefix string -} - -func prepareOptions(options []Options) Options { - var opt Options - if len(options) > 0 { - opt = options[0] - } - - opt.SubURL = strings.TrimSuffix(opt.SubURL, "/") - - // Defaults. - if len(opt.URLPrefix) == 0 { - opt.URLPrefix = "/captcha/" - } else if opt.URLPrefix[len(opt.URLPrefix)-1] != '/' { - opt.URLPrefix += "/" - } - if len(opt.FieldIdName) == 0 { - opt.FieldIdName = "captcha_id" - } - if len(opt.FieldCaptchaName) == 0 { - opt.FieldCaptchaName = "captcha" - } - if opt.ChallengeNums == 0 { - opt.ChallengeNums = 6 - } - if opt.Width == 0 { - opt.Width = stdWidth - } - if opt.Height == 0 { - opt.Height = stdHeight - } - if opt.Expiration == 0 { - opt.Expiration = 600 - } - if len(opt.CachePrefix) == 0 { - opt.CachePrefix = "captcha_" - } - - return opt -} - -// NewCaptcha initializes and returns a captcha with given options. -func NewCaptcha(opt Options) *Captcha { - return &Captcha{ - SubURL: opt.SubURL, - URLPrefix: opt.URLPrefix, - FieldIdName: opt.FieldIdName, - FieldCaptchaName: opt.FieldCaptchaName, - StdWidth: opt.Width, - StdHeight: opt.Height, - ChallengeNums: opt.ChallengeNums, - Expiration: opt.Expiration, - CachePrefix: opt.CachePrefix, - } -} - -// Captchaer is a middleware that maps a captcha.Captcha service into the Macaron handler chain. -// An single variadic captcha.Options struct can be optionally provided to configure. -// This should be register after cache.Cacher. -func Captchaer(options ...Options) macaron.Handler { - return func(ctx *macaron.Context, cache cache.Cache) { - cpt := NewCaptcha(prepareOptions(options)) - cpt.store = cache - - if strings.HasPrefix(ctx.Req.URL.Path, cpt.URLPrefix) { - var chars string - id := path.Base(ctx.Req.URL.Path) - if i := strings.Index(id, "."); i > -1 { - id = id[:i] - } - key := cpt.key(id) - - // Reload captcha. - if len(ctx.Query("reload")) > 0 { - chars = cpt.genRandChars() - if err := cpt.store.Put(key, chars, cpt.Expiration); err != nil { - ctx.Status(500) - ctx.Write([]byte("captcha reload error")) - panic(fmt.Errorf("reload captcha: %v", err)) - } - } else { - if v, ok := cpt.store.Get(key).(string); ok { - chars = v - } else { - ctx.Status(404) - ctx.Write([]byte("captcha not found")) - return - } - } - - if _, err := NewImage([]byte(chars), cpt.StdWidth, cpt.StdHeight).WriteTo(ctx.Resp); err != nil { - panic(fmt.Errorf("write captcha: %v", err)) - } - return - } - - ctx.Data["Captcha"] = cpt - ctx.Map(cpt) - } -} diff --git a/vendor/github.com/go-macaron/captcha/image.go b/vendor/github.com/go-macaron/captcha/image.go deleted file mode 100644 index 0bd5cb536..000000000 --- a/vendor/github.com/go-macaron/captcha/image.go +++ /dev/null @@ -1,498 +0,0 @@ -// Copyright 2013 Beego Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package captcha - -import ( - "bytes" - "image" - "image/color" - "image/png" - "io" - "math" -) - -const ( - fontWidth = 11 - fontHeight = 18 - blackChar = 1 - - // Standard width and height of a captcha image. - stdWidth = 240 - stdHeight = 80 - - // Maximum absolute skew factor of a single digit. - maxSkew = 0.7 - // Number of background circles. - circleCount = 20 -) - -var font = [][]byte{ - { // 0 - 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, - 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, - 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, - 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, - 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, - }, - { // 1 - 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - }, - { // 2 - 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, - 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - }, - { // 3 - 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, - 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, - }, - { // 4 - 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, - 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, - 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, - 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, - 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - }, - { // 5 - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, - }, - { // 6 - 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, - 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, - 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, - 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, - 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, - }, - { // 7 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, - }, - { // 8 - 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, - 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, - 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, - 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, - 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, - }, - { // 9 - 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, - 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, - 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, - 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, - 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, - 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - }, -} - -type Image struct { - *image.Paletted - numWidth int - numHeight int - dotSize int -} - -var prng = &siprng{} - -// randIntn returns a pseudorandom non-negative int in range [0, n). -func randIntn(n int) int { - return prng.Intn(n) -} - -// randInt returns a pseudorandom int in range [from, to]. -func randInt(from, to int) int { - return prng.Intn(to+1-from) + from -} - -// randFloat returns a pseudorandom float64 in range [from, to]. -func randFloat(from, to float64) float64 { - return (to-from)*prng.Float64() + from -} - -func randomPalette() color.Palette { - p := make([]color.Color, circleCount+1) - // Transparent color. - p[0] = color.RGBA{0xFF, 0xFF, 0xFF, 0x00} - // Primary color. - prim := color.RGBA{ - uint8(randIntn(129)), - uint8(randIntn(129)), - uint8(randIntn(129)), - 0xFF, - } - p[1] = prim - // Circle colors. - for i := 2; i <= circleCount; i++ { - p[i] = randomBrightness(prim, 255) - } - return p -} - -// NewImage returns a new captcha image of the given width and height with the -// given digits, where each digit must be in range 0-9. -func NewImage(digits []byte, width, height int) *Image { - m := new(Image) - m.Paletted = image.NewPaletted(image.Rect(0, 0, width, height), randomPalette()) - m.calculateSizes(width, height, len(digits)) - // Randomly position captcha inside the image. - maxx := width - (m.numWidth+m.dotSize)*len(digits) - m.dotSize - maxy := height - m.numHeight - m.dotSize*2 - var border int - if width > height { - border = height / 5 - } else { - border = width / 5 - } - x := randInt(border, maxx-border) - y := randInt(border, maxy-border) - // Draw digits. - for _, n := range digits { - m.drawDigit(font[n], x, y) - x += m.numWidth + m.dotSize - } - // Draw strike-through line. - m.strikeThrough() - // Apply wave distortion. - m.distort(randFloat(5, 10), randFloat(100, 200)) - // Fill image with random circles. - m.fillWithCircles(circleCount, m.dotSize) - return m -} - -// encodedPNG encodes an image to PNG and returns -// the result as a byte slice. -func (m *Image) encodedPNG() []byte { - var buf bytes.Buffer - if err := png.Encode(&buf, m.Paletted); err != nil { - panic(err.Error()) - } - return buf.Bytes() -} - -// WriteTo writes captcha image in PNG format into the given writer. -func (m *Image) WriteTo(w io.Writer) (int64, error) { - n, err := w.Write(m.encodedPNG()) - return int64(n), err -} - -func (m *Image) calculateSizes(width, height, ncount int) { - // Goal: fit all digits inside the image. - var border int - if width > height { - border = height / 4 - } else { - border = width / 4 - } - // Convert everything to floats for calculations. - w := float64(width - border*2) - h := float64(height - border*2) - // fw takes into account 1-dot spacing between digits. - fw := float64(fontWidth + 1) - fh := float64(fontHeight) - nc := float64(ncount) - // Calculate the width of a single digit taking into account only the - // width of the image. - nw := w / nc - // Calculate the height of a digit from this width. - nh := nw * fh / fw - // Digit too high? - if nh > h { - // Fit digits based on height. - nh = h - nw = fw / fh * nh - } - // Calculate dot size. - m.dotSize = int(nh / fh) - // Save everything, making the actual width smaller by 1 dot to account - // for spacing between digits. - m.numWidth = int(nw) - m.dotSize - m.numHeight = int(nh) -} - -func (m *Image) drawHorizLine(fromX, toX, y int, colorIdx uint8) { - for x := fromX; x <= toX; x++ { - m.SetColorIndex(x, y, colorIdx) - } -} - -func (m *Image) drawCircle(x, y, radius int, colorIdx uint8) { - f := 1 - radius - dfx := 1 - dfy := -2 * radius - xo := 0 - yo := radius - - m.SetColorIndex(x, y+radius, colorIdx) - m.SetColorIndex(x, y-radius, colorIdx) - m.drawHorizLine(x-radius, x+radius, y, colorIdx) - - for xo < yo { - if f >= 0 { - yo-- - dfy += 2 - f += dfy - } - xo++ - dfx += 2 - f += dfx - m.drawHorizLine(x-xo, x+xo, y+yo, colorIdx) - m.drawHorizLine(x-xo, x+xo, y-yo, colorIdx) - m.drawHorizLine(x-yo, x+yo, y+xo, colorIdx) - m.drawHorizLine(x-yo, x+yo, y-xo, colorIdx) - } -} - -func (m *Image) fillWithCircles(n, maxradius int) { - maxx := m.Bounds().Max.X - maxy := m.Bounds().Max.Y - for i := 0; i < n; i++ { - colorIdx := uint8(randInt(1, circleCount-1)) - r := randInt(1, maxradius) - m.drawCircle(randInt(r, maxx-r), randInt(r, maxy-r), r, colorIdx) - } -} - -func (m *Image) strikeThrough() { - maxx := m.Bounds().Max.X - maxy := m.Bounds().Max.Y - y := randInt(maxy/3, maxy-maxy/3) - amplitude := randFloat(5, 20) - period := randFloat(80, 180) - dx := 2.0 * math.Pi / period - for x := 0; x < maxx; x++ { - xo := amplitude * math.Cos(float64(y)*dx) - yo := amplitude * math.Sin(float64(x)*dx) - for yn := 0; yn < m.dotSize; yn++ { - r := randInt(0, m.dotSize) - m.drawCircle(x+int(xo), y+int(yo)+(yn*m.dotSize), r/2, 1) - } - } -} - -func (m *Image) drawDigit(digit []byte, x, y int) { - skf := randFloat(-maxSkew, maxSkew) - xs := float64(x) - r := m.dotSize / 2 - y += randInt(-r, r) - for yo := 0; yo < fontHeight; yo++ { - for xo := 0; xo < fontWidth; xo++ { - if digit[yo*fontWidth+xo] != blackChar { - continue - } - m.drawCircle(x+xo*m.dotSize, y+yo*m.dotSize, r, 1) - } - xs += skf - x = int(xs) - } -} - -func (m *Image) distort(amplude float64, period float64) { - w := m.Bounds().Max.X - h := m.Bounds().Max.Y - - oldm := m.Paletted - newm := image.NewPaletted(image.Rect(0, 0, w, h), oldm.Palette) - - dx := 2.0 * math.Pi / period - for x := 0; x < w; x++ { - for y := 0; y < h; y++ { - xo := amplude * math.Sin(float64(y)*dx) - yo := amplude * math.Cos(float64(x)*dx) - newm.SetColorIndex(x, y, oldm.ColorIndexAt(x+int(xo), y+int(yo))) - } - } - m.Paletted = newm -} - -func randomBrightness(c color.RGBA, max uint8) color.RGBA { - minc := min3(c.R, c.G, c.B) - maxc := max3(c.R, c.G, c.B) - if maxc > max { - return c - } - n := randIntn(int(max-maxc)) - int(minc) - return color.RGBA{ - uint8(int(c.R) + n), - uint8(int(c.G) + n), - uint8(int(c.B) + n), - uint8(c.A), - } -} - -func min3(x, y, z uint8) (m uint8) { - m = x - if y < m { - m = y - } - if z < m { - m = z - } - return -} - -func max3(x, y, z uint8) (m uint8) { - m = x - if y > m { - m = y - } - if z > m { - m = z - } - return -} diff --git a/vendor/github.com/go-macaron/captcha/siprng.go b/vendor/github.com/go-macaron/captcha/siprng.go deleted file mode 100644 index 53a06d684..000000000 --- a/vendor/github.com/go-macaron/captcha/siprng.go +++ /dev/null @@ -1,277 +0,0 @@ -// Copyright 2013 Beego Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package captcha - -import ( - "crypto/rand" - "encoding/binary" - "io" - "sync" -) - -// siprng is PRNG based on SipHash-2-4. -type siprng struct { - mu sync.Mutex - k0, k1, ctr uint64 -} - -// siphash implements SipHash-2-4, accepting a uint64 as a message. -func siphash(k0, k1, m uint64) uint64 { - // Initialization. - v0 := k0 ^ 0x736f6d6570736575 - v1 := k1 ^ 0x646f72616e646f6d - v2 := k0 ^ 0x6c7967656e657261 - v3 := k1 ^ 0x7465646279746573 - t := uint64(8) << 56 - - // Compression. - v3 ^= m - - // Round 1. - v0 += v1 - v1 = v1<<13 | v1>>(64-13) - v1 ^= v0 - v0 = v0<<32 | v0>>(64-32) - - v2 += v3 - v3 = v3<<16 | v3>>(64-16) - v3 ^= v2 - - v0 += v3 - v3 = v3<<21 | v3>>(64-21) - v3 ^= v0 - - v2 += v1 - v1 = v1<<17 | v1>>(64-17) - v1 ^= v2 - v2 = v2<<32 | v2>>(64-32) - - // Round 2. - v0 += v1 - v1 = v1<<13 | v1>>(64-13) - v1 ^= v0 - v0 = v0<<32 | v0>>(64-32) - - v2 += v3 - v3 = v3<<16 | v3>>(64-16) - v3 ^= v2 - - v0 += v3 - v3 = v3<<21 | v3>>(64-21) - v3 ^= v0 - - v2 += v1 - v1 = v1<<17 | v1>>(64-17) - v1 ^= v2 - v2 = v2<<32 | v2>>(64-32) - - v0 ^= m - - // Compress last block. - v3 ^= t - - // Round 1. - v0 += v1 - v1 = v1<<13 | v1>>(64-13) - v1 ^= v0 - v0 = v0<<32 | v0>>(64-32) - - v2 += v3 - v3 = v3<<16 | v3>>(64-16) - v3 ^= v2 - - v0 += v3 - v3 = v3<<21 | v3>>(64-21) - v3 ^= v0 - - v2 += v1 - v1 = v1<<17 | v1>>(64-17) - v1 ^= v2 - v2 = v2<<32 | v2>>(64-32) - - // Round 2. - v0 += v1 - v1 = v1<<13 | v1>>(64-13) - v1 ^= v0 - v0 = v0<<32 | v0>>(64-32) - - v2 += v3 - v3 = v3<<16 | v3>>(64-16) - v3 ^= v2 - - v0 += v3 - v3 = v3<<21 | v3>>(64-21) - v3 ^= v0 - - v2 += v1 - v1 = v1<<17 | v1>>(64-17) - v1 ^= v2 - v2 = v2<<32 | v2>>(64-32) - - v0 ^= t - - // Finalization. - v2 ^= 0xff - - // Round 1. - v0 += v1 - v1 = v1<<13 | v1>>(64-13) - v1 ^= v0 - v0 = v0<<32 | v0>>(64-32) - - v2 += v3 - v3 = v3<<16 | v3>>(64-16) - v3 ^= v2 - - v0 += v3 - v3 = v3<<21 | v3>>(64-21) - v3 ^= v0 - - v2 += v1 - v1 = v1<<17 | v1>>(64-17) - v1 ^= v2 - v2 = v2<<32 | v2>>(64-32) - - // Round 2. - v0 += v1 - v1 = v1<<13 | v1>>(64-13) - v1 ^= v0 - v0 = v0<<32 | v0>>(64-32) - - v2 += v3 - v3 = v3<<16 | v3>>(64-16) - v3 ^= v2 - - v0 += v3 - v3 = v3<<21 | v3>>(64-21) - v3 ^= v0 - - v2 += v1 - v1 = v1<<17 | v1>>(64-17) - v1 ^= v2 - v2 = v2<<32 | v2>>(64-32) - - // Round 3. - v0 += v1 - v1 = v1<<13 | v1>>(64-13) - v1 ^= v0 - v0 = v0<<32 | v0>>(64-32) - - v2 += v3 - v3 = v3<<16 | v3>>(64-16) - v3 ^= v2 - - v0 += v3 - v3 = v3<<21 | v3>>(64-21) - v3 ^= v0 - - v2 += v1 - v1 = v1<<17 | v1>>(64-17) - v1 ^= v2 - v2 = v2<<32 | v2>>(64-32) - - // Round 4. - v0 += v1 - v1 = v1<<13 | v1>>(64-13) - v1 ^= v0 - v0 = v0<<32 | v0>>(64-32) - - v2 += v3 - v3 = v3<<16 | v3>>(64-16) - v3 ^= v2 - - v0 += v3 - v3 = v3<<21 | v3>>(64-21) - v3 ^= v0 - - v2 += v1 - v1 = v1<<17 | v1>>(64-17) - v1 ^= v2 - v2 = v2<<32 | v2>>(64-32) - - return v0 ^ v1 ^ v2 ^ v3 -} - -// rekey sets a new PRNG key, which is read from crypto/rand. -func (p *siprng) rekey() { - var k [16]byte - if _, err := io.ReadFull(rand.Reader, k[:]); err != nil { - panic(err.Error()) - } - p.k0 = binary.LittleEndian.Uint64(k[0:8]) - p.k1 = binary.LittleEndian.Uint64(k[8:16]) - p.ctr = 1 -} - -// Uint64 returns a new pseudorandom uint64. -// It rekeys PRNG on the first call and every 64 MB of generated data. -func (p *siprng) Uint64() uint64 { - p.mu.Lock() - if p.ctr == 0 || p.ctr > 8*1024*1024 { - p.rekey() - } - v := siphash(p.k0, p.k1, p.ctr) - p.ctr++ - p.mu.Unlock() - return v -} - -func (p *siprng) Int63() int64 { - return int64(p.Uint64() & 0x7fffffffffffffff) -} - -func (p *siprng) Uint32() uint32 { - return uint32(p.Uint64()) -} - -func (p *siprng) Int31() int32 { - return int32(p.Uint32() & 0x7fffffff) -} - -func (p *siprng) Intn(n int) int { - if n <= 0 { - panic("invalid argument to Intn") - } - if n <= 1<<31-1 { - return int(p.Int31n(int32(n))) - } - return int(p.Int63n(int64(n))) -} - -func (p *siprng) Int63n(n int64) int64 { - if n <= 0 { - panic("invalid argument to Int63n") - } - max := int64((1 << 63) - 1 - (1<<63)%uint64(n)) - v := p.Int63() - for v > max { - v = p.Int63() - } - return v % n -} - -func (p *siprng) Int31n(n int32) int32 { - if n <= 0 { - panic("invalid argument to Int31n") - } - max := int32((1 << 31) - 1 - (1<<31)%uint32(n)) - v := p.Int31() - for v > max { - v = p.Int31() - } - return v % n -} - -func (p *siprng) Float64() float64 { return float64(p.Int63()) / (1 << 63) } diff --git a/vendor/github.com/go-macaron/csrf/LICENSE b/vendor/github.com/go-macaron/csrf/LICENSE deleted file mode 100644 index 8405e89a0..000000000 --- a/vendor/github.com/go-macaron/csrf/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -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: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -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 -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. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/csrf/README.md b/vendor/github.com/go-macaron/csrf/README.md deleted file mode 100644 index ff3e10a01..000000000 --- a/vendor/github.com/go-macaron/csrf/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# csrf [![Build Status](https://travis-ci.org/go-macaron/csrf.svg?branch=master)](https://travis-ci.org/go-macaron/csrf) [![](http://gocover.io/_badge/github.com/go-macaron/csrf)](http://gocover.io/github.com/go-macaron/csrf) - -Middleware csrf generates and validates CSRF tokens for [Macaron](https://github.com/go-macaron/macaron). - -[API Reference](https://gowalker.org/github.com/go-macaron/csrf) - -### Installation - - go get github.com/go-macaron/csrf - -## Getting Help - -- [API Reference](https://gowalker.org/github.com/go-macaron/csrf) -- [Documentation](http://go-macaron.com/docs/middlewares/csrf) - -## License - -This project is under the Apache License, Version 2.0. See the [LICENSE](LICENSE) file for the full license text. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/csrf/csrf.go b/vendor/github.com/go-macaron/csrf/csrf.go deleted file mode 100644 index affc95abf..000000000 --- a/vendor/github.com/go-macaron/csrf/csrf.go +++ /dev/null @@ -1,251 +0,0 @@ -// Copyright 2013 Martini Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -// Package csrf is a middleware that generates and validates CSRF tokens for Macaron. -package csrf - -import ( - "net/http" - "time" - - "github.com/Unknwon/com" - "github.com/go-macaron/session" - "gopkg.in/macaron.v1" -) - -const _VERSION = "0.1.0" - -func Version() string { - return _VERSION -} - -// CSRF represents a CSRF service and is used to get the current token and validate a suspect token. -type CSRF interface { - // Return HTTP header to search for token. - GetHeaderName() string - // Return form value to search for token. - GetFormName() string - // Return cookie name to search for token. - GetCookieName() string - // Return cookie path - GetCookiePath() string - // Return the token. - GetToken() string - // Validate by token. - ValidToken(t string) bool - // Error replies to the request with a custom function when ValidToken fails. - Error(w http.ResponseWriter) -} - -type csrf struct { - // Header name value for setting and getting csrf token. - Header string - // Form name value for setting and getting csrf token. - Form string - // Cookie name value for setting and getting csrf token. - Cookie string - //Cookie path - CookiePath string - // Token generated to pass via header, cookie, or hidden form value. - Token string - // This value must be unique per user. - ID string - // Secret used along with the unique id above to generate the Token. - Secret string - // ErrorFunc is the custom function that replies to the request when ValidToken fails. - ErrorFunc func(w http.ResponseWriter) -} - -// GetHeaderName returns the name of the HTTP header for csrf token. -func (c *csrf) GetHeaderName() string { - return c.Header -} - -// GetFormName returns the name of the form value for csrf token. -func (c *csrf) GetFormName() string { - return c.Form -} - -// GetCookieName returns the name of the cookie for csrf token. -func (c *csrf) GetCookieName() string { - return c.Cookie -} - -// GetCookiePath returns the path of the cookie for csrf token. -func (c *csrf) GetCookiePath() string { - return c.CookiePath -} - -// GetToken returns the current token. This is typically used -// to populate a hidden form in an HTML template. -func (c *csrf) GetToken() string { - return c.Token -} - -// ValidToken validates the passed token against the existing Secret and ID. -func (c *csrf) ValidToken(t string) bool { - return ValidToken(t, c.Secret, c.ID, "POST") -} - -// Error replies to the request when ValidToken fails. -func (c *csrf) Error(w http.ResponseWriter) { - c.ErrorFunc(w) -} - -// Options maintains options to manage behavior of Generate. -type Options struct { - // The global secret value used to generate Tokens. - Secret string - // HTTP header used to set and get token. - Header string - // Form value used to set and get token. - Form string - // Cookie value used to set and get token. - Cookie string - // Cookie path. - CookiePath string - // Key used for getting the unique ID per user. - SessionKey string - // oldSeesionKey saves old value corresponding to SessionKey. - oldSeesionKey string - // If true, send token via X-CSRFToken header. - SetHeader bool - // If true, send token via _csrf cookie. - SetCookie bool - // Set the Secure flag to true on the cookie. - Secure bool - // Disallow Origin appear in request header. - Origin bool - // The function called when Validate fails. - ErrorFunc func(w http.ResponseWriter) -} - -func prepareOptions(options []Options) Options { - var opt Options - if len(options) > 0 { - opt = options[0] - } - - // Defaults. - if len(opt.Secret) == 0 { - opt.Secret = string(com.RandomCreateBytes(10)) - } - if len(opt.Header) == 0 { - opt.Header = "X-CSRFToken" - } - if len(opt.Form) == 0 { - opt.Form = "_csrf" - } - if len(opt.Cookie) == 0 { - opt.Cookie = "_csrf" - } - if len(opt.CookiePath) == 0 { - opt.CookiePath = "/" - } - if len(opt.SessionKey) == 0 { - opt.SessionKey = "uid" - } - opt.oldSeesionKey = "_old_" + opt.SessionKey - if opt.ErrorFunc == nil { - opt.ErrorFunc = func(w http.ResponseWriter) { - http.Error(w, "Invalid csrf token.", http.StatusBadRequest) - } - } - - return opt -} - -// Generate maps CSRF to each request. If this request is a Get request, it will generate a new token. -// Additionally, depending on options set, generated tokens will be sent via Header and/or Cookie. -func Generate(options ...Options) macaron.Handler { - opt := prepareOptions(options) - return func(ctx *macaron.Context, sess session.Store) { - x := &csrf{ - Secret: opt.Secret, - Header: opt.Header, - Form: opt.Form, - Cookie: opt.Cookie, - CookiePath: opt.CookiePath, - ErrorFunc: opt.ErrorFunc, - } - ctx.MapTo(x, (*CSRF)(nil)) - - if opt.Origin && len(ctx.Req.Header.Get("Origin")) > 0 { - return - } - - x.ID = "0" - uid := sess.Get(opt.SessionKey) - if uid != nil { - x.ID = com.ToStr(uid) - } - - needsNew := false - oldUid := sess.Get(opt.oldSeesionKey) - if oldUid == nil || oldUid.(string) != x.ID { - needsNew = true - sess.Set(opt.oldSeesionKey, x.ID) - } else { - // If cookie present, map existing token, else generate a new one. - if val := ctx.GetCookie(opt.Cookie); len(val) > 0 { - // FIXME: test coverage. - x.Token = val - } else { - needsNew = true - } - } - - if needsNew { - // FIXME: actionId. - x.Token = GenerateToken(x.Secret, x.ID, "POST") - if opt.SetCookie { - ctx.SetCookie(opt.Cookie, x.Token, 0, opt.CookiePath, "", false, true, time.Now().AddDate(0, 0, 1)) - } - } - - if opt.SetHeader { - ctx.Resp.Header().Add(opt.Header, x.Token) - } - } -} - -// Csrfer maps CSRF to each request. If this request is a Get request, it will generate a new token. -// Additionally, depending on options set, generated tokens will be sent via Header and/or Cookie. -func Csrfer(options ...Options) macaron.Handler { - return Generate(options...) -} - -// Validate should be used as a per route middleware. It attempts to get a token from a "X-CSRFToken" -// HTTP header and then a "_csrf" form value. If one of these is found, the token will be validated -// using ValidToken. If this validation fails, custom Error is sent in the reply. -// If neither a header or form value is found, http.StatusBadRequest is sent. -func Validate(ctx *macaron.Context, x CSRF) { - if token := ctx.Req.Header.Get(x.GetHeaderName()); len(token) > 0 { - if !x.ValidToken(token) { - ctx.SetCookie(x.GetCookieName(), "", -1, x.GetCookiePath()) - x.Error(ctx.Resp) - } - return - } - if token := ctx.Req.FormValue(x.GetFormName()); len(token) > 0 { - if !x.ValidToken(token) { - ctx.SetCookie(x.GetCookieName(), "", -1, x.GetCookiePath()) - x.Error(ctx.Resp) - } - return - } - - http.Error(ctx.Resp, "Bad Request: no CSRF token present", http.StatusBadRequest) -} diff --git a/vendor/github.com/go-macaron/csrf/xsrf.go b/vendor/github.com/go-macaron/csrf/xsrf.go deleted file mode 100644 index 81ed5d0fc..000000000 --- a/vendor/github.com/go-macaron/csrf/xsrf.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package csrf - -import ( - "bytes" - "crypto/hmac" - "crypto/sha1" - "crypto/subtle" - "encoding/base64" - "fmt" - "strconv" - "strings" - "time" -) - -// The duration that XSRF tokens are valid. -// It is exported so clients may set cookie timeouts that match generated tokens. -const TIMEOUT = 24 * time.Hour - -// clean sanitizes a string for inclusion in a token by replacing all ":"s. -func clean(s string) string { - return strings.Replace(s, ":", "_", -1) -} - -// GenerateToken returns a URL-safe secure XSRF token that expires in 24 hours. -// -// key is a secret key for your application. -// userID is a unique identifier for the user. -// actionID is the action the user is taking (e.g. POSTing to a particular path). -func GenerateToken(key, userID, actionID string) string { - return generateTokenAtTime(key, userID, actionID, time.Now()) -} - -// generateTokenAtTime is like Generate, but returns a token that expires 24 hours from now. -func generateTokenAtTime(key, userID, actionID string, now time.Time) string { - h := hmac.New(sha1.New, []byte(key)) - fmt.Fprintf(h, "%s:%s:%d", clean(userID), clean(actionID), now.UnixNano()) - tok := fmt.Sprintf("%s:%d", h.Sum(nil), now.UnixNano()) - return base64.URLEncoding.EncodeToString([]byte(tok)) -} - -// Valid returns true if token is a valid, unexpired token returned by Generate. -func ValidToken(token, key, userID, actionID string) bool { - return validTokenAtTime(token, key, userID, actionID, time.Now()) -} - -// validTokenAtTime is like Valid, but it uses now to check if the token is expired. -func validTokenAtTime(token, key, userID, actionID string, now time.Time) bool { - // Decode the token. - data, err := base64.URLEncoding.DecodeString(token) - if err != nil { - return false - } - - // Extract the issue time of the token. - sep := bytes.LastIndex(data, []byte{':'}) - if sep < 0 { - return false - } - nanos, err := strconv.ParseInt(string(data[sep+1:]), 10, 64) - if err != nil { - return false - } - issueTime := time.Unix(0, nanos) - - // Check that the token is not expired. - if now.Sub(issueTime) >= TIMEOUT { - return false - } - - // Check that the token is not from the future. - // Allow 1 minute grace period in case the token is being verified on a - // machine whose clock is behind the machine that issued the token. - if issueTime.After(now.Add(1 * time.Minute)) { - return false - } - - expected := generateTokenAtTime(key, userID, actionID, issueTime) - - // Check that the token matches the expected value. - // Use constant time comparison to avoid timing attacks. - return subtle.ConstantTimeCompare([]byte(token), []byte(expected)) == 1 -} diff --git a/vendor/github.com/go-macaron/gzip/LICENSE b/vendor/github.com/go-macaron/gzip/LICENSE deleted file mode 100644 index 37ec93a14..000000000 --- a/vendor/github.com/go-macaron/gzip/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -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: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -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 -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-macaron/gzip/README.md b/vendor/github.com/go-macaron/gzip/README.md deleted file mode 100644 index 0c438a720..000000000 --- a/vendor/github.com/go-macaron/gzip/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# gzip [![Build Status](https://travis-ci.org/go-macaron/gzip.svg?branch=master)](https://travis-ci.org/go-macaron/gzip) [![](http://gocover.io/_badge/github.com/go-macaron/gzip)](http://gocover.io/github.com/go-macaron/gzip) - -Middleware gzip provides compress to responses for [Macaron](https://github.com/go-macaron/macaron). - -### Installation - - go get github.com/go-macaron/gzip - -## Getting Help - -- [API Reference](https://gowalker.org/github.com/go-macaron/gzip) -- [Documentation](http://go-macaron.com/docs/middlewares/gzip) - -## Credits - -This package is a modified version of [martini-contrib/gzip](https://github.com/martini-contrib/gzip). - -## License - -This project is under the Apache License, Version 2.0. See the [LICENSE](LICENSE) file for the full license text. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/gzip/gzip.go b/vendor/github.com/go-macaron/gzip/gzip.go deleted file mode 100644 index 296c0e38b..000000000 --- a/vendor/github.com/go-macaron/gzip/gzip.go +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2013 Martini Authors -// Copyright 2015 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package gzip - -import ( - "bufio" - "fmt" - "net" - "net/http" - "strings" - - "github.com/klauspost/compress/gzip" - "gopkg.in/macaron.v1" -) - -const ( - _HEADER_ACCEPT_ENCODING = "Accept-Encoding" - _HEADER_CONTENT_ENCODING = "Content-Encoding" - _HEADER_CONTENT_LENGTH = "Content-Length" - _HEADER_CONTENT_TYPE = "Content-Type" - _HEADER_VARY = "Vary" -) - -// Options represents a struct for specifying configuration options for the GZip middleware. -type Options struct { - // Compression level. Can be DefaultCompression(-1), ConstantCompression(-2) - // or any integer value between BestSpeed(1) and BestCompression(9) inclusive. - CompressionLevel int -} - -func isCompressionLevelValid(level int) bool { - return level == gzip.DefaultCompression || - level == gzip.ConstantCompression || - (level >= gzip.BestSpeed && level <= gzip.BestCompression) -} - -func prepareOptions(options []Options) Options { - var opt Options - if len(options) > 0 { - opt = options[0] - } - - if !isCompressionLevelValid(opt.CompressionLevel) { - // For web content, level 4 seems to be a sweet spot. - opt.CompressionLevel = 4 - } - return opt -} - -// Gziper returns a Handler that adds gzip compression to all requests. -// Make sure to include the Gzip middleware above other middleware -// that alter the response body (like the render middleware). -func Gziper(options ...Options) macaron.Handler { - opt := prepareOptions(options) - - return func(ctx *macaron.Context) { - if !strings.Contains(ctx.Req.Header.Get(_HEADER_ACCEPT_ENCODING), "gzip") { - return - } - - headers := ctx.Resp.Header() - headers.Set(_HEADER_CONTENT_ENCODING, "gzip") - headers.Set(_HEADER_VARY, _HEADER_ACCEPT_ENCODING) - - // We've made sure compression level is valid in prepareGzipOptions, - // no need to check same error again. - gz, err := gzip.NewWriterLevel(ctx.Resp, opt.CompressionLevel) - if err != nil { - panic(err.Error()) - } - defer gz.Close() - - gzw := gzipResponseWriter{gz, ctx.Resp} - ctx.Resp = gzw - ctx.MapTo(gzw, (*http.ResponseWriter)(nil)) - - // Check if render middleware has been registered, - // if yes, we need to modify ResponseWriter for it as well. - if _, ok := ctx.Render.(*macaron.DummyRender); !ok { - ctx.Render.SetResponseWriter(gzw) - } - - ctx.Next() - - // delete content length after we know we have been written to - gzw.Header().Del("Content-Length") - } -} - -type gzipResponseWriter struct { - w *gzip.Writer - macaron.ResponseWriter -} - -func (grw gzipResponseWriter) Write(p []byte) (int, error) { - if len(grw.Header().Get(_HEADER_CONTENT_TYPE)) == 0 { - grw.Header().Set(_HEADER_CONTENT_TYPE, http.DetectContentType(p)) - } - return grw.w.Write(p) -} - -func (grw gzipResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { - hijacker, ok := grw.ResponseWriter.(http.Hijacker) - if !ok { - return nil, nil, fmt.Errorf("the ResponseWriter doesn't support the Hijacker interface") - } - return hijacker.Hijack() -} diff --git a/vendor/github.com/go-macaron/i18n/LICENSE b/vendor/github.com/go-macaron/i18n/LICENSE deleted file mode 100644 index 8405e89a0..000000000 --- a/vendor/github.com/go-macaron/i18n/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -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: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -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 -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. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/i18n/README.md b/vendor/github.com/go-macaron/i18n/README.md deleted file mode 100644 index 737c0b995..000000000 --- a/vendor/github.com/go-macaron/i18n/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# i18n [![Build Status](https://travis-ci.org/go-macaron/i18n.svg?branch=master)](https://travis-ci.org/go-macaron/i18n) [![](http://gocover.io/_badge/github.com/go-macaron/i18n)](http://gocover.io/github.com/go-macaron/i18n) - -Middleware i18n provides app Internationalization and Localization for [Macaron](https://github.com/go-macaron/macaron). - -### Installation - - go get github.com/go-macaron/i18n - -## Getting Help - -- [API Reference](https://gowalker.org/github.com/go-macaron/i18n) -- [Documentation](http://go-macaron.com/docs/middlewares/i18n) - -## License - -This project is under the Apache License, Version 2.0. See the [LICENSE](LICENSE) file for the full license text. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/i18n/i18n.go b/vendor/github.com/go-macaron/i18n/i18n.go deleted file mode 100644 index 3b5b1b834..000000000 --- a/vendor/github.com/go-macaron/i18n/i18n.go +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -// Package i18n is a middleware that provides app Internationalization and Localization of Macaron. -package i18n - -import ( - "fmt" - "path" - "strings" - - "github.com/Unknwon/com" - "github.com/Unknwon/i18n" - "golang.org/x/text/language" - "gopkg.in/macaron.v1" -) - -const _VERSION = "0.3.0" - -func Version() string { - return _VERSION -} - -// initLocales initializes language type list and Accept-Language header matcher. -func initLocales(opt Options) language.Matcher { - tags := make([]language.Tag, len(opt.Langs)) - for i, lang := range opt.Langs { - tags[i] = language.Raw.Make(lang) - fname := fmt.Sprintf(opt.Format, lang) - // Append custom locale file. - custom := []interface{}{} - customPath := path.Join(opt.CustomDirectory, fname) - if com.IsFile(customPath) { - custom = append(custom, customPath) - } - - var locale interface{} - if data, ok := opt.Files[fname]; ok { - locale = data - } else { - locale = path.Join(opt.Directory, fname) - } - - err := i18n.SetMessageWithDesc(lang, opt.Names[i], locale, custom...) - if err != nil && err != i18n.ErrLangAlreadyExist { - panic(fmt.Errorf("fail to set message file(%s): %v", lang, err)) - } - } - return language.NewMatcher(tags) -} - -// A Locale describles the information of localization. -type Locale struct { - i18n.Locale -} - -// Language returns language current locale represents. -func (l Locale) Language() string { - return l.Lang -} - -// Options represents a struct for specifying configuration options for the i18n middleware. -type Options struct { - // Suburl of path. Default is empty. - SubURL string - // Directory to load locale files. Default is "conf/locale" - Directory string - // File stores actual data of locale files. Used for in-memory purpose. - Files map[string][]byte - // Custom directory to overload locale files. Default is "custom/conf/locale" - CustomDirectory string - // Langauges that will be supported, order is meaningful. - Langs []string - // Human friendly names corresponding to Langs list. - Names []string - // Default language locale, leave empty to remain unset. - DefaultLang string - // Locale file naming style. Default is "locale_%s.ini". - Format string - // Name of language parameter name in URL. Default is "lang". - Parameter string - // Redirect when user uses get parameter to specify language. - Redirect bool - // Name that maps into template variable. Default is "i18n". - TmplName string - // Configuration section name. Default is "i18n". - Section string -} - -func prepareOptions(options []Options) Options { - var opt Options - if len(options) > 0 { - opt = options[0] - } - - if len(opt.Section) == 0 { - opt.Section = "i18n" - } - sec := macaron.Config().Section(opt.Section) - - opt.SubURL = strings.TrimSuffix(opt.SubURL, "/") - - if len(opt.Langs) == 0 { - opt.Langs = sec.Key("LANGS").Strings(",") - } - if len(opt.Names) == 0 { - opt.Names = sec.Key("NAMES").Strings(",") - } - if len(opt.Langs) == 0 { - panic("no language is specified") - } else if len(opt.Langs) != len(opt.Names) { - panic("length of langs is not same as length of names") - } - i18n.SetDefaultLang(opt.DefaultLang) - - if len(opt.Directory) == 0 { - opt.Directory = sec.Key("DIRECTORY").MustString("conf/locale") - } - if len(opt.CustomDirectory) == 0 { - opt.CustomDirectory = sec.Key("CUSTOM_DIRECTORY").MustString("custom/conf/locale") - } - if len(opt.Format) == 0 { - opt.Format = sec.Key("FORMAT").MustString("locale_%s.ini") - } - if len(opt.Parameter) == 0 { - opt.Parameter = sec.Key("PARAMETER").MustString("lang") - } - if !opt.Redirect { - opt.Redirect = sec.Key("REDIRECT").MustBool() - } - if len(opt.TmplName) == 0 { - opt.TmplName = sec.Key("TMPL_NAME").MustString("i18n") - } - - return opt -} - -type LangType struct { - Lang, Name string -} - -// I18n is a middleware provides localization layer for your application. -// Paramenter langs must be in the form of "en-US", "zh-CN", etc. -// Otherwise it may not recognize browser input. -func I18n(options ...Options) macaron.Handler { - opt := prepareOptions(options) - m := initLocales(opt) - return func(ctx *macaron.Context) { - isNeedRedir := false - hasCookie := false - - // 1. Check URL arguments. - lang := ctx.Query(opt.Parameter) - - // 2. Get language information from cookies. - if len(lang) == 0 { - lang = ctx.GetCookie("lang") - hasCookie = true - } else { - isNeedRedir = true - } - - // Check again in case someone modify by purpose. - if !i18n.IsExist(lang) { - lang = "" - isNeedRedir = false - hasCookie = false - } - - // 3. Get language information from 'Accept-Language'. - // The first element in the list is chosen to be the default language automatically. - if len(lang) == 0 { - tags, _, _ := language.ParseAcceptLanguage(ctx.Req.Header.Get("Accept-Language")) - tag, _, _ := m.Match(tags...) - lang = tag.String() - isNeedRedir = false - } - - curLang := LangType{ - Lang: lang, - } - - // Save language information in cookies. - if !hasCookie { - ctx.SetCookie("lang", curLang.Lang, 1<<31-1, "/"+strings.TrimPrefix(opt.SubURL, "/")) - } - - restLangs := make([]LangType, 0, i18n.Count()-1) - langs := i18n.ListLangs() - names := i18n.ListLangDescs() - for i, v := range langs { - if lang != v { - restLangs = append(restLangs, LangType{v, names[i]}) - } else { - curLang.Name = names[i] - } - } - - // Set language properties. - locale := Locale{i18n.Locale{lang}} - ctx.Map(locale) - ctx.Locale = locale - ctx.Data[opt.TmplName] = locale - ctx.Data["Tr"] = i18n.Tr - ctx.Data["Lang"] = locale.Lang - ctx.Data["LangName"] = curLang.Name - ctx.Data["AllLangs"] = append([]LangType{curLang}, restLangs...) - ctx.Data["RestLangs"] = restLangs - - if opt.Redirect && isNeedRedir { - ctx.Redirect(opt.SubURL + ctx.Req.RequestURI[:strings.Index(ctx.Req.RequestURI, "?")]) - } - } -} diff --git a/vendor/github.com/go-macaron/inject/LICENSE b/vendor/github.com/go-macaron/inject/LICENSE deleted file mode 100644 index 37ec93a14..000000000 --- a/vendor/github.com/go-macaron/inject/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -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: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -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 -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-macaron/inject/README.md b/vendor/github.com/go-macaron/inject/README.md deleted file mode 100644 index c65c76955..000000000 --- a/vendor/github.com/go-macaron/inject/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# inject [![Build Status](https://travis-ci.org/go-macaron/inject.svg?branch=master)](https://travis-ci.org/go-macaron/inject) [![](http://gocover.io/_badge/github.com/go-macaron/inject)](http://gocover.io/github.com/go-macaron/inject) - -Package inject provides utilities for mapping and injecting dependencies in various ways. - -**This a modified version of [codegangsta/inject](https://github.com/codegangsta/inject) for special purpose of Macaron** - -**Please use the original version if you need dependency injection feature** - -## License - -This project is under the Apache License, Version 2.0. See the [LICENSE](LICENSE) file for the full license text. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/inject/inject.go b/vendor/github.com/go-macaron/inject/inject.go deleted file mode 100644 index 1c1f98eaa..000000000 --- a/vendor/github.com/go-macaron/inject/inject.go +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright 2013 Jeremy Saenz -// Copyright 2015 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -// Package inject provides utilities for mapping and injecting dependencies in various ways. -package inject - -import ( - "fmt" - "reflect" -) - -// Injector represents an interface for mapping and injecting dependencies into structs -// and function arguments. -type Injector interface { - Applicator - Invoker - TypeMapper - // SetParent sets the parent of the injector. If the injector cannot find a - // dependency in its Type map it will check its parent before returning an - // error. - SetParent(Injector) -} - -// Applicator represents an interface for mapping dependencies to a struct. -type Applicator interface { - // Maps dependencies in the Type map to each field in the struct - // that is tagged with 'inject'. Returns an error if the injection - // fails. - Apply(interface{}) error -} - -// Invoker represents an interface for calling functions via reflection. -type Invoker interface { - // Invoke attempts to call the interface{} provided as a function, - // providing dependencies for function arguments based on Type. Returns - // a slice of reflect.Value representing the returned values of the function. - // Returns an error if the injection fails. - Invoke(interface{}) ([]reflect.Value, error) -} - -// FastInvoker represents an interface in order to avoid the calling function via reflection. -// -// example: -// type handlerFuncHandler func(http.ResponseWriter, *http.Request) error -// func (f handlerFuncHandler)Invoke([]interface{}) ([]reflect.Value, error){ -// ret := f(p[0].(http.ResponseWriter), p[1].(*http.Request)) -// return []reflect.Value{reflect.ValueOf(ret)}, nil -// } -// -// type funcHandler func(int, string) -// func (f funcHandler)Invoke([]interface{}) ([]reflect.Value, error){ -// f(p[0].(int), p[1].(string)) -// return nil, nil -// } -type FastInvoker interface { - // Invoke attempts to call the ordinary functions. If f is a function - // with the appropriate signature, f.Invoke([]interface{}) is a Call that calls f. - // Returns a slice of reflect.Value representing the returned values of the function. - // Returns an error if the injection fails. - Invoke([]interface{}) ([]reflect.Value, error) -} - -// IsFastInvoker check interface is FastInvoker -func IsFastInvoker(h interface{}) bool { - _, ok := h.(FastInvoker) - return ok -} - -// TypeMapper represents an interface for mapping interface{} values based on type. -type TypeMapper interface { - // Maps the interface{} value based on its immediate type from reflect.TypeOf. - Map(interface{}) TypeMapper - // Maps the interface{} value based on the pointer of an Interface provided. - // This is really only useful for mapping a value as an interface, as interfaces - // cannot at this time be referenced directly without a pointer. - MapTo(interface{}, interface{}) TypeMapper - // Provides a possibility to directly insert a mapping based on type and value. - // This makes it possible to directly map type arguments not possible to instantiate - // with reflect like unidirectional channels. - Set(reflect.Type, reflect.Value) TypeMapper - // Returns the Value that is mapped to the current type. Returns a zeroed Value if - // the Type has not been mapped. - GetVal(reflect.Type) reflect.Value -} - -type injector struct { - values map[reflect.Type]reflect.Value - parent Injector -} - -// InterfaceOf dereferences a pointer to an Interface type. -// It panics if value is not an pointer to an interface. -func InterfaceOf(value interface{}) reflect.Type { - t := reflect.TypeOf(value) - - for t.Kind() == reflect.Ptr { - t = t.Elem() - } - - if t.Kind() != reflect.Interface { - panic("Called inject.InterfaceOf with a value that is not a pointer to an interface. (*MyInterface)(nil)") - } - - return t -} - -// New returns a new Injector. -func New() Injector { - return &injector{ - values: make(map[reflect.Type]reflect.Value), - } -} - -// Invoke attempts to call the interface{} provided as a function, -// providing dependencies for function arguments based on Type. -// Returns a slice of reflect.Value representing the returned values of the function. -// Returns an error if the injection fails. -// It panics if f is not a function -func (inj *injector) Invoke(f interface{}) ([]reflect.Value, error) { - t := reflect.TypeOf(f) - switch v := f.(type) { - case FastInvoker: - return inj.fastInvoke(v, t, t.NumIn()) - default: - return inj.callInvoke(f, t, t.NumIn()) - } -} - -func (inj *injector) fastInvoke(f FastInvoker, t reflect.Type, numIn int) ([]reflect.Value, error) { - var in []interface{} - if numIn > 0 { - in = make([]interface{}, numIn) // Panic if t is not kind of Func - var argType reflect.Type - var val reflect.Value - for i := 0; i < numIn; i++ { - argType = t.In(i) - val = inj.GetVal(argType) - if !val.IsValid() { - return nil, fmt.Errorf("Value not found for type %v", argType) - } - - in[i] = val.Interface() - } - } - return f.Invoke(in) -} - -// callInvoke reflect.Value.Call -func (inj *injector) callInvoke(f interface{}, t reflect.Type, numIn int) ([]reflect.Value, error) { - var in []reflect.Value - if numIn > 0 { - in = make([]reflect.Value, numIn) - var argType reflect.Type - var val reflect.Value - for i := 0; i < numIn; i++ { - argType = t.In(i) - val = inj.GetVal(argType) - if !val.IsValid() { - return nil, fmt.Errorf("Value not found for type %v", argType) - } - - in[i] = val - } - } - return reflect.ValueOf(f).Call(in), nil -} - -// Maps dependencies in the Type map to each field in the struct -// that is tagged with 'inject'. -// Returns an error if the injection fails. -func (inj *injector) Apply(val interface{}) error { - v := reflect.ValueOf(val) - - for v.Kind() == reflect.Ptr { - v = v.Elem() - } - - if v.Kind() != reflect.Struct { - return nil // Should not panic here ? - } - - t := v.Type() - - for i := 0; i < v.NumField(); i++ { - f := v.Field(i) - structField := t.Field(i) - if f.CanSet() && (structField.Tag == "inject" || structField.Tag.Get("inject") != "") { - ft := f.Type() - v := inj.GetVal(ft) - if !v.IsValid() { - return fmt.Errorf("Value not found for type %v", ft) - } - - f.Set(v) - } - - } - - return nil -} - -// Maps the concrete value of val to its dynamic type using reflect.TypeOf, -// It returns the TypeMapper registered in. -func (i *injector) Map(val interface{}) TypeMapper { - i.values[reflect.TypeOf(val)] = reflect.ValueOf(val) - return i -} - -func (i *injector) MapTo(val interface{}, ifacePtr interface{}) TypeMapper { - i.values[InterfaceOf(ifacePtr)] = reflect.ValueOf(val) - return i -} - -// Maps the given reflect.Type to the given reflect.Value and returns -// the Typemapper the mapping has been registered in. -func (i *injector) Set(typ reflect.Type, val reflect.Value) TypeMapper { - i.values[typ] = val - return i -} - -func (i *injector) GetVal(t reflect.Type) reflect.Value { - val := i.values[t] - - if val.IsValid() { - return val - } - - // no concrete types found, try to find implementors - // if t is an interface - if t.Kind() == reflect.Interface { - for k, v := range i.values { - if k.Implements(t) { - val = v - break - } - } - } - - // Still no type found, try to look it up on the parent - if !val.IsValid() && i.parent != nil { - val = i.parent.GetVal(t) - } - - return val - -} - -func (i *injector) SetParent(parent Injector) { - i.parent = parent -} diff --git a/vendor/github.com/go-macaron/session/LICENSE b/vendor/github.com/go-macaron/session/LICENSE deleted file mode 100644 index 8405e89a0..000000000 --- a/vendor/github.com/go-macaron/session/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -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: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -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 -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. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/session/README.md b/vendor/github.com/go-macaron/session/README.md deleted file mode 100644 index fe4f4ba1b..000000000 --- a/vendor/github.com/go-macaron/session/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# session [![Build Status](https://travis-ci.org/go-macaron/session.svg?branch=master)](https://travis-ci.org/go-macaron/session) - -Middleware session provides session management for [Macaron](https://github.com/go-macaron/macaron). It can use many session providers, including memory, file, Redis, Memcache, PostgreSQL, MySQL, Couchbase, Ledis and Nodb. - -### Installation - -The minimum requirement of Go is 1.6 (*1.7 if using Redis, 1.8 if using MySQL*). - - go get github.com/go-macaron/session - -## Getting Help - -- [API Reference](https://gowalker.org/github.com/go-macaron/session) -- [Documentation](https://go-macaron.com/docs/middlewares/session) - -## Credits - -This package is a modified version of [beego/session](https://github.com/astaxie/beego/tree/master/session). - -## License - -This project is under the Apache License, Version 2.0. See the [LICENSE](LICENSE) file for the full license text. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/session/file.go b/vendor/github.com/go-macaron/session/file.go deleted file mode 100644 index 64b47f2b0..000000000 --- a/vendor/github.com/go-macaron/session/file.go +++ /dev/null @@ -1,266 +0,0 @@ -// Copyright 2013 Beego Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package session - -import ( - "fmt" - "io/ioutil" - "log" - "os" - "path" - "path/filepath" - "sync" - "time" - - "github.com/Unknwon/com" -) - -// FileStore represents a file session store implementation. -type FileStore struct { - p *FileProvider - sid string - lock sync.RWMutex - data map[interface{}]interface{} -} - -// NewFileStore creates and returns a file session store. -func NewFileStore(p *FileProvider, sid string, kv map[interface{}]interface{}) *FileStore { - return &FileStore{ - p: p, - sid: sid, - data: kv, - } -} - -// Set sets value to given key in session. -func (s *FileStore) Set(key, val interface{}) error { - s.lock.Lock() - defer s.lock.Unlock() - - s.data[key] = val - return nil -} - -// Get gets value by given key in session. -func (s *FileStore) Get(key interface{}) interface{} { - s.lock.RLock() - defer s.lock.RUnlock() - - return s.data[key] -} - -// Delete delete a key from session. -func (s *FileStore) Delete(key interface{}) error { - s.lock.Lock() - defer s.lock.Unlock() - - delete(s.data, key) - return nil -} - -// ID returns current session ID. -func (s *FileStore) ID() string { - return s.sid -} - -// Release releases resource and save data to provider. -func (s *FileStore) Release() error { - s.p.lock.Lock() - defer s.p.lock.Unlock() - - // Skip encoding if the data is empty - if len(s.data) == 0 { - return nil - } - - data, err := EncodeGob(s.data) - if err != nil { - return err - } - - return ioutil.WriteFile(s.p.filepath(s.sid), data, 0600) -} - -// Flush deletes all session data. -func (s *FileStore) Flush() error { - s.lock.Lock() - defer s.lock.Unlock() - - s.data = make(map[interface{}]interface{}) - return nil -} - -// FileProvider represents a file session provider implementation. -type FileProvider struct { - lock sync.RWMutex - maxlifetime int64 - rootPath string -} - -// Init initializes file session provider with given root path. -func (p *FileProvider) Init(maxlifetime int64, rootPath string) error { - p.lock.Lock() - p.maxlifetime = maxlifetime - p.rootPath = rootPath - p.lock.Unlock() - return nil -} - -func (p *FileProvider) filepath(sid string) string { - return path.Join(p.rootPath, string(sid[0]), string(sid[1]), sid) -} - -// Read returns raw session store by session ID. -func (p *FileProvider) Read(sid string) (_ RawStore, err error) { - filename := p.filepath(sid) - if err = os.MkdirAll(path.Dir(filename), 0700); err != nil { - return nil, err - } - p.lock.RLock() - defer p.lock.RUnlock() - - var f *os.File - if com.IsFile(filename) { - f, err = os.OpenFile(filename, os.O_RDONLY, 0600) - } else { - f, err = os.Create(filename) - } - if err != nil { - return nil, err - } - defer f.Close() - - if err = os.Chtimes(filename, time.Now(), time.Now()); err != nil { - return nil, err - } - - var kv map[interface{}]interface{} - data, err := ioutil.ReadAll(f) - if err != nil { - return nil, err - } - if len(data) == 0 { - kv = make(map[interface{}]interface{}) - } else { - kv, err = DecodeGob(data) - if err != nil { - return nil, err - } - } - return NewFileStore(p, sid, kv), nil -} - -// Exist returns true if session with given ID exists. -func (p *FileProvider) Exist(sid string) bool { - p.lock.RLock() - defer p.lock.RUnlock() - return com.IsFile(p.filepath(sid)) -} - -// Destory deletes a session by session ID. -func (p *FileProvider) Destory(sid string) error { - p.lock.Lock() - defer p.lock.Unlock() - return os.Remove(p.filepath(sid)) -} - -func (p *FileProvider) regenerate(oldsid, sid string) (err error) { - p.lock.Lock() - defer p.lock.Unlock() - - filename := p.filepath(sid) - if com.IsExist(filename) { - return fmt.Errorf("new sid '%s' already exists", sid) - } - - oldname := p.filepath(oldsid) - if !com.IsFile(oldname) { - data, err := EncodeGob(make(map[interface{}]interface{})) - if err != nil { - return err - } - if err = os.MkdirAll(path.Dir(oldname), 0700); err != nil { - return err - } - if err = ioutil.WriteFile(oldname, data, 0600); err != nil { - return err - } - } - - if err = os.MkdirAll(path.Dir(filename), 0700); err != nil { - return err - } - if err = os.Rename(oldname, filename); err != nil { - return err - } - return nil -} - -// Regenerate regenerates a session store from old session ID to new one. -func (p *FileProvider) Regenerate(oldsid, sid string) (_ RawStore, err error) { - if err := p.regenerate(oldsid, sid); err != nil { - return nil, err - } - - return p.Read(sid) -} - -// Count counts and returns number of sessions. -func (p *FileProvider) Count() int { - count := 0 - if err := filepath.Walk(p.rootPath, func(path string, fi os.FileInfo, err error) error { - if err != nil { - return err - } - - if !fi.IsDir() { - count++ - } - return nil - }); err != nil { - log.Printf("error counting session files: %v", err) - return 0 - } - return count -} - -// GC calls GC to clean expired sessions. -func (p *FileProvider) GC() { - p.lock.RLock() - defer p.lock.RUnlock() - - if !com.IsExist(p.rootPath) { - return - } - - if err := filepath.Walk(p.rootPath, func(path string, fi os.FileInfo, err error) error { - if err != nil { - return err - } - - if !fi.IsDir() && - (fi.ModTime().Unix()+p.maxlifetime) < time.Now().Unix() { - return os.Remove(path) - } - return nil - }); err != nil { - log.Printf("error garbage collecting session files: %v", err) - } -} - -func init() { - Register("file", &FileProvider{}) -} diff --git a/vendor/github.com/go-macaron/session/memory.go b/vendor/github.com/go-macaron/session/memory.go deleted file mode 100644 index 4ad929352..000000000 --- a/vendor/github.com/go-macaron/session/memory.go +++ /dev/null @@ -1,217 +0,0 @@ -// Copyright 2013 Beego Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package session - -import ( - "container/list" - "fmt" - "sync" - "time" -) - -// MemStore represents a in-memory session store implementation. -type MemStore struct { - sid string - lock sync.RWMutex - data map[interface{}]interface{} - lastAccess time.Time -} - -// NewMemStore creates and returns a memory session store. -func NewMemStore(sid string) *MemStore { - return &MemStore{ - sid: sid, - data: make(map[interface{}]interface{}), - lastAccess: time.Now(), - } -} - -// Set sets value to given key in session. -func (s *MemStore) Set(key, val interface{}) error { - s.lock.Lock() - defer s.lock.Unlock() - - s.data[key] = val - return nil -} - -// Get gets value by given key in session. -func (s *MemStore) Get(key interface{}) interface{} { - s.lock.RLock() - defer s.lock.RUnlock() - - return s.data[key] -} - -// Delete deletes a key from session. -func (s *MemStore) Delete(key interface{}) error { - s.lock.Lock() - defer s.lock.Unlock() - - delete(s.data, key) - return nil -} - -// ID returns current session ID. -func (s *MemStore) ID() string { - return s.sid -} - -// Release releases resource and save data to provider. -func (_ *MemStore) Release() error { - return nil -} - -// Flush deletes all session data. -func (s *MemStore) Flush() error { - s.lock.Lock() - defer s.lock.Unlock() - - s.data = make(map[interface{}]interface{}) - return nil -} - -// MemProvider represents a in-memory session provider implementation. -type MemProvider struct { - lock sync.RWMutex - maxLifetime int64 - data map[string]*list.Element - // A priority list whose lastAccess newer gets higer priority. - list *list.List -} - -// Init initializes memory session provider. -func (p *MemProvider) Init(maxLifetime int64, _ string) error { - p.lock.Lock() - p.maxLifetime = maxLifetime - p.lock.Unlock() - return nil -} - -// update expands time of session store by given ID. -func (p *MemProvider) update(sid string) error { - p.lock.Lock() - defer p.lock.Unlock() - - if e, ok := p.data[sid]; ok { - e.Value.(*MemStore).lastAccess = time.Now() - p.list.MoveToFront(e) - return nil - } - return nil -} - -// Read returns raw session store by session ID. -func (p *MemProvider) Read(sid string) (_ RawStore, err error) { - p.lock.RLock() - e, ok := p.data[sid] - p.lock.RUnlock() - - if ok { - if err = p.update(sid); err != nil { - return nil, err - } - return e.Value.(*MemStore), nil - } - - // Create a new session. - p.lock.Lock() - defer p.lock.Unlock() - - s := NewMemStore(sid) - p.data[sid] = p.list.PushBack(s) - return s, nil -} - -// Exist returns true if session with given ID exists. -func (p *MemProvider) Exist(sid string) bool { - p.lock.RLock() - defer p.lock.RUnlock() - - _, ok := p.data[sid] - return ok -} - -// Destory deletes a session by session ID. -func (p *MemProvider) Destory(sid string) error { - p.lock.Lock() - defer p.lock.Unlock() - - e, ok := p.data[sid] - if !ok { - return nil - } - - p.list.Remove(e) - delete(p.data, sid) - return nil -} - -// Regenerate regenerates a session store from old session ID to new one. -func (p *MemProvider) Regenerate(oldsid, sid string) (RawStore, error) { - if p.Exist(sid) { - return nil, fmt.Errorf("new sid '%s' already exists", sid) - } - - s, err := p.Read(oldsid) - if err != nil { - return nil, err - } - - if err = p.Destory(oldsid); err != nil { - return nil, err - } - - s.(*MemStore).sid = sid - - p.lock.Lock() - defer p.lock.Unlock() - p.data[sid] = p.list.PushBack(s) - return s, nil -} - -// Count counts and returns number of sessions. -func (p *MemProvider) Count() int { - return p.list.Len() -} - -// GC calls GC to clean expired sessions. -func (p *MemProvider) GC() { - p.lock.RLock() - for { - // No session in the list. - e := p.list.Back() - if e == nil { - break - } - - if (e.Value.(*MemStore).lastAccess.Unix() + p.maxLifetime) < time.Now().Unix() { - p.lock.RUnlock() - p.lock.Lock() - p.list.Remove(e) - delete(p.data, e.Value.(*MemStore).sid) - p.lock.Unlock() - p.lock.RLock() - } else { - break - } - } - p.lock.RUnlock() -} - -func init() { - Register("memory", &MemProvider{list: list.New(), data: make(map[string]*list.Element)}) -} diff --git a/vendor/github.com/go-macaron/session/redis/redis.go b/vendor/github.com/go-macaron/session/redis/redis.go deleted file mode 100644 index 6fe10736b..000000000 --- a/vendor/github.com/go-macaron/session/redis/redis.go +++ /dev/null @@ -1,240 +0,0 @@ -// Copyright 2013 Beego Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package session - -import ( - "fmt" - "strings" - "sync" - "time" - - "github.com/Unknwon/com" - "gopkg.in/ini.v1" - "gopkg.in/redis.v2" - - "github.com/go-macaron/session" -) - -// RedisStore represents a redis session store implementation. -type RedisStore struct { - c *redis.Client - prefix, sid string - duration time.Duration - lock sync.RWMutex - data map[interface{}]interface{} -} - -// NewRedisStore creates and returns a redis session store. -func NewRedisStore(c *redis.Client, prefix, sid string, dur time.Duration, kv map[interface{}]interface{}) *RedisStore { - return &RedisStore{ - c: c, - prefix: prefix, - sid: sid, - duration: dur, - data: kv, - } -} - -// Set sets value to given key in session. -func (s *RedisStore) Set(key, val interface{}) error { - s.lock.Lock() - defer s.lock.Unlock() - - s.data[key] = val - return nil -} - -// Get gets value by given key in session. -func (s *RedisStore) Get(key interface{}) interface{} { - s.lock.RLock() - defer s.lock.RUnlock() - - return s.data[key] -} - -// Delete delete a key from session. -func (s *RedisStore) Delete(key interface{}) error { - s.lock.Lock() - defer s.lock.Unlock() - - delete(s.data, key) - return nil -} - -// ID returns current session ID. -func (s *RedisStore) ID() string { - return s.sid -} - -// Release releases resource and save data to provider. -func (s *RedisStore) Release() error { - // Skip encoding if the data is empty - if len(s.data) == 0 { - return nil - } - - data, err := session.EncodeGob(s.data) - if err != nil { - return err - } - - return s.c.SetEx(s.prefix+s.sid, s.duration, string(data)).Err() -} - -// Flush deletes all session data. -func (s *RedisStore) Flush() error { - s.lock.Lock() - defer s.lock.Unlock() - - s.data = make(map[interface{}]interface{}) - return nil -} - -// RedisProvider represents a redis session provider implementation. -type RedisProvider struct { - c *redis.Client - duration time.Duration - prefix string -} - -// Init initializes redis session provider. -// configs: network=tcp,addr=:6379,password=macaron,db=0,pool_size=100,idle_timeout=180,prefix=session; -func (p *RedisProvider) Init(maxlifetime int64, configs string) (err error) { - p.duration, err = time.ParseDuration(fmt.Sprintf("%ds", maxlifetime)) - if err != nil { - return err - } - - cfg, err := ini.Load([]byte(strings.Replace(configs, ",", "\n", -1))) - if err != nil { - return err - } - - opt := &redis.Options{ - Network: "tcp", - } - for k, v := range cfg.Section("").KeysHash() { - switch k { - case "network": - opt.Network = v - case "addr": - opt.Addr = v - case "password": - opt.Password = v - case "db": - opt.DB = com.StrTo(v).MustInt64() - case "pool_size": - opt.PoolSize = com.StrTo(v).MustInt() - case "idle_timeout": - opt.IdleTimeout, err = time.ParseDuration(v + "s") - if err != nil { - return fmt.Errorf("error parsing idle timeout: %v", err) - } - case "prefix": - p.prefix = v - default: - return fmt.Errorf("session/redis: unsupported option '%s'", k) - } - } - - p.c = redis.NewClient(opt) - return p.c.Ping().Err() -} - -// Read returns raw session store by session ID. -func (p *RedisProvider) Read(sid string) (session.RawStore, error) { - psid := p.prefix + sid - if !p.Exist(sid) { - if err := p.c.Set(psid, "").Err(); err != nil { - return nil, err - } - } - - var kv map[interface{}]interface{} - kvs, err := p.c.Get(psid).Result() - if err != nil { - return nil, err - } - if len(kvs) == 0 { - kv = make(map[interface{}]interface{}) - } else { - kv, err = session.DecodeGob([]byte(kvs)) - if err != nil { - return nil, err - } - } - - return NewRedisStore(p.c, p.prefix, sid, p.duration, kv), nil -} - -// Exist returns true if session with given ID exists. -func (p *RedisProvider) Exist(sid string) bool { - has, err := p.c.Exists(p.prefix + sid).Result() - return err == nil && has -} - -// Destory deletes a session by session ID. -func (p *RedisProvider) Destory(sid string) error { - return p.c.Del(p.prefix + sid).Err() -} - -// Regenerate regenerates a session store from old session ID to new one. -func (p *RedisProvider) Regenerate(oldsid, sid string) (_ session.RawStore, err error) { - poldsid := p.prefix + oldsid - psid := p.prefix + sid - - if p.Exist(sid) { - return nil, fmt.Errorf("new sid '%s' already exists", sid) - } else if !p.Exist(oldsid) { - // Make a fake old session. - if err = p.c.SetEx(poldsid, p.duration, "").Err(); err != nil { - return nil, err - } - } - - if err = p.c.Rename(poldsid, psid).Err(); err != nil { - return nil, err - } - - var kv map[interface{}]interface{} - kvs, err := p.c.Get(psid).Result() - if err != nil { - return nil, err - } - - if len(kvs) == 0 { - kv = make(map[interface{}]interface{}) - } else { - kv, err = session.DecodeGob([]byte(kvs)) - if err != nil { - return nil, err - } - } - - return NewRedisStore(p.c, p.prefix, sid, p.duration, kv), nil -} - -// Count counts and returns number of sessions. -func (p *RedisProvider) Count() int { - return int(p.c.DbSize().Val()) -} - -// GC calls GC to clean expired sessions. -func (_ *RedisProvider) GC() {} - -func init() { - session.Register("redis", &RedisProvider{}) -} diff --git a/vendor/github.com/go-macaron/session/redis/redis.goconvey b/vendor/github.com/go-macaron/session/redis/redis.goconvey deleted file mode 100644 index 8485e986e..000000000 --- a/vendor/github.com/go-macaron/session/redis/redis.goconvey +++ /dev/null @@ -1 +0,0 @@ -ignore \ No newline at end of file diff --git a/vendor/github.com/go-macaron/session/session.go b/vendor/github.com/go-macaron/session/session.go deleted file mode 100644 index 343556077..000000000 --- a/vendor/github.com/go-macaron/session/session.go +++ /dev/null @@ -1,440 +0,0 @@ -// Copyright 2013 Beego Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -// Package session a middleware that provides the session management of Macaron. -package session - -import ( - "encoding/hex" - "errors" - "fmt" - "net/http" - "net/url" - "time" - - "gopkg.in/macaron.v1" -) - -const _VERSION = "0.6.0" - -func Version() string { - return _VERSION -} - -// RawStore is the interface that operates the session data. -type RawStore interface { - // Set sets value to given key in session. - Set(interface{}, interface{}) error - // Get gets value by given key in session. - Get(interface{}) interface{} - // Delete deletes a key from session. - Delete(interface{}) error - // ID returns current session ID. - ID() string - // Release releases session resource and save data to provider. - Release() error - // Flush deletes all session data. - Flush() error -} - -// Store is the interface that contains all data for one session process with specific ID. -type Store interface { - RawStore - // Read returns raw session store by session ID. - Read(string) (RawStore, error) - // Destory deletes a session. - Destory(*macaron.Context) error - // RegenerateId regenerates a session store from old session ID to new one. - RegenerateId(*macaron.Context) (RawStore, error) - // Count counts and returns number of sessions. - Count() int - // GC calls GC to clean expired sessions. - GC() -} - -type store struct { - RawStore - *Manager -} - -var _ Store = &store{} - -// Options represents a struct for specifying configuration options for the session middleware. -type Options struct { - // Name of provider. Default is "memory". - Provider string - // Provider configuration, it's corresponding to provider. - ProviderConfig string - // Cookie name to save session ID. Default is "MacaronSession". - CookieName string - // Cookie path to store. Default is "/". - CookiePath string - // GC interval time in seconds. Default is 3600. - Gclifetime int64 - // Max life time in seconds. Default is whatever GC interval time is. - Maxlifetime int64 - // Use HTTPS only. Default is false. - Secure bool - // Cookie life time. Default is 0. - CookieLifeTime int - // Cookie domain name. Default is empty. - Domain string - // Session ID length. Default is 16. - IDLength int - // Configuration section name. Default is "session". - Section string - // Ignore release for websocket. Default is false. - IgnoreReleaseForWebSocket bool -} - -func prepareOptions(options []Options) Options { - var opt Options - if len(options) > 0 { - opt = options[0] - } - if len(opt.Section) == 0 { - opt.Section = "session" - } - sec := macaron.Config().Section(opt.Section) - - if len(opt.Provider) == 0 { - opt.Provider = sec.Key("PROVIDER").MustString("memory") - } - if len(opt.ProviderConfig) == 0 { - opt.ProviderConfig = sec.Key("PROVIDER_CONFIG").MustString("data/sessions") - } - if len(opt.CookieName) == 0 { - opt.CookieName = sec.Key("COOKIE_NAME").MustString("MacaronSession") - } - if len(opt.CookiePath) == 0 { - opt.CookiePath = sec.Key("COOKIE_PATH").MustString("/") - } - if opt.Gclifetime == 0 { - opt.Gclifetime = sec.Key("GC_INTERVAL_TIME").MustInt64(3600) - } - if opt.Maxlifetime == 0 { - opt.Maxlifetime = sec.Key("MAX_LIFE_TIME").MustInt64(opt.Gclifetime) - } - if !opt.Secure { - opt.Secure = sec.Key("SECURE").MustBool() - } - if opt.CookieLifeTime == 0 { - opt.CookieLifeTime = sec.Key("COOKIE_LIFE_TIME").MustInt() - } - if len(opt.Domain) == 0 { - opt.Domain = sec.Key("DOMAIN").String() - } - if opt.IDLength == 0 { - opt.IDLength = sec.Key("ID_LENGTH").MustInt(16) - } - if !opt.IgnoreReleaseForWebSocket { - opt.IgnoreReleaseForWebSocket = sec.Key("IGNORE_RELEASE_FOR_WEBSOCKET").MustBool() - } - - return opt -} - -// Sessioner is a middleware that maps a session.SessionStore service into the Macaron handler chain. -// An single variadic session.Options struct can be optionally provided to configure. -func Sessioner(options ...Options) macaron.Handler { - opt := prepareOptions(options) - manager, err := NewManager(opt.Provider, opt) - if err != nil { - panic(err) - } - go manager.startGC() - - return func(ctx *macaron.Context) { - sess, err := manager.Start(ctx) - if err != nil { - panic("session(start): " + err.Error()) - } - - // Get flash. - vals, _ := url.ParseQuery(ctx.GetCookie("macaron_flash")) - if len(vals) > 0 { - f := &Flash{Values: vals} - f.ErrorMsg = f.Get("error") - f.SuccessMsg = f.Get("success") - f.InfoMsg = f.Get("info") - f.WarningMsg = f.Get("warning") - ctx.Data["Flash"] = f - ctx.SetCookie("macaron_flash", "", -1, opt.CookiePath) - } - - f := &Flash{ctx, url.Values{}, "", "", "", ""} - ctx.Resp.Before(func(macaron.ResponseWriter) { - if flash := f.Encode(); len(flash) > 0 { - ctx.SetCookie("macaron_flash", flash, 0, opt.CookiePath) - } - }) - - ctx.Map(f) - s := store{ - RawStore: sess, - Manager: manager, - } - - ctx.MapTo(s, (*Store)(nil)) - - ctx.Next() - - if manager.opt.IgnoreReleaseForWebSocket && ctx.Req.Header.Get("Upgrade") == "websocket" { - return - } - - if err = sess.Release(); err != nil { - panic("session(release): " + err.Error()) - } - } -} - -// Provider is the interface that provides session manipulations. -type Provider interface { - // Init initializes session provider. - Init(gclifetime int64, config string) error - // Read returns raw session store by session ID. - Read(sid string) (RawStore, error) - // Exist returns true if session with given ID exists. - Exist(sid string) bool - // Destory deletes a session by session ID. - Destory(sid string) error - // Regenerate regenerates a session store from old session ID to new one. - Regenerate(oldsid, sid string) (RawStore, error) - // Count counts and returns number of sessions. - Count() int - // GC calls GC to clean expired sessions. - GC() -} - -var providers = make(map[string]Provider) - -// Register registers a provider. -func Register(name string, provider Provider) { - if provider == nil { - panic("session: cannot register provider with nil value") - } - if _, dup := providers[name]; dup { - panic(fmt.Errorf("session: cannot register provider '%s' twice", name)) - } - providers[name] = provider -} - -// _____ -// / \ _____ ____ _____ ____ ___________ -// / \ / \\__ \ / \\__ \ / ___\_/ __ \_ __ \ -// / Y \/ __ \| | \/ __ \_/ /_/ > ___/| | \/ -// \____|__ (____ /___| (____ /\___ / \___ >__| -// \/ \/ \/ \//_____/ \/ - -// Manager represents a struct that contains session provider and its configuration. -type Manager struct { - provider Provider - opt Options -} - -// NewManager creates and returns a new session manager by given provider name and configuration. -// It panics when given provider isn't registered. -func NewManager(name string, opt Options) (*Manager, error) { - p, ok := providers[name] - if !ok { - return nil, fmt.Errorf("session: unknown provider '%s'(forgotten import?)", name) - } - return &Manager{p, opt}, p.Init(opt.Maxlifetime, opt.ProviderConfig) -} - -// sessionID generates a new session ID with rand string, unix nano time, remote addr by hash function. -func (m *Manager) sessionID() string { - return hex.EncodeToString(generateRandomKey(m.opt.IDLength / 2)) -} - -// validSessionID tests whether a provided session ID is a valid session ID. -func (m *Manager) validSessionID(sid string) (bool, error) { - if len(sid) != m.opt.IDLength { - return false, errors.New("invalid 'sid': " + sid) - } - - for i := range sid { - switch { - case '0' <= sid[i] && sid[i] <= '9': - case 'a' <= sid[i] && sid[i] <= 'f': - default: - return false, errors.New("invalid 'sid': " + sid) - } - } - return true, nil -} - -// Start starts a session by generating new one -// or retrieve existence one by reading session ID from HTTP request if it's valid. -func (m *Manager) Start(ctx *macaron.Context) (RawStore, error) { - sid := ctx.GetCookie(m.opt.CookieName) - valid, _ := m.validSessionID(sid) - if len(sid) > 0 && valid && m.provider.Exist(sid) { - return m.provider.Read(sid) - } - - sid = m.sessionID() - sess, err := m.provider.Read(sid) - if err != nil { - return nil, err - } - - cookie := &http.Cookie{ - Name: m.opt.CookieName, - Value: sid, - Path: m.opt.CookiePath, - HttpOnly: true, - Secure: m.opt.Secure, - Domain: m.opt.Domain, - } - if m.opt.CookieLifeTime >= 0 { - cookie.MaxAge = m.opt.CookieLifeTime - } - http.SetCookie(ctx.Resp, cookie) - ctx.Req.AddCookie(cookie) - return sess, nil -} - -// Read returns raw session store by session ID. -func (m *Manager) Read(sid string) (RawStore, error) { - // Ensure we're trying to read a valid session ID - if _, err := m.validSessionID(sid); err != nil { - return nil, err - } - - return m.provider.Read(sid) -} - -// Destory deletes a session by given ID. -func (m *Manager) Destory(ctx *macaron.Context) error { - sid := ctx.GetCookie(m.opt.CookieName) - if len(sid) == 0 { - return nil - } - - if _, err := m.validSessionID(sid); err != nil { - return err - } - - if err := m.provider.Destory(sid); err != nil { - return err - } - cookie := &http.Cookie{ - Name: m.opt.CookieName, - Path: m.opt.CookiePath, - HttpOnly: true, - Expires: time.Now(), - MaxAge: -1, - } - http.SetCookie(ctx.Resp, cookie) - return nil -} - -// RegenerateId regenerates a session store from old session ID to new one. -func (m *Manager) RegenerateId(ctx *macaron.Context) (sess RawStore, err error) { - sid := m.sessionID() - oldsid := ctx.GetCookie(m.opt.CookieName) - _, err = m.validSessionID(oldsid) - if err != nil { - return nil, err - } - sess, err = m.provider.Regenerate(oldsid, sid) - if err != nil { - return nil, err - } - cookie := &http.Cookie{ - Name: m.opt.CookieName, - Value: sid, - Path: m.opt.CookiePath, - HttpOnly: true, - Secure: m.opt.Secure, - Domain: m.opt.Domain, - } - if m.opt.CookieLifeTime >= 0 { - cookie.MaxAge = m.opt.CookieLifeTime - } - http.SetCookie(ctx.Resp, cookie) - ctx.Req.AddCookie(cookie) - return sess, nil -} - -// Count counts and returns number of sessions. -func (m *Manager) Count() int { - return m.provider.Count() -} - -// GC starts GC job in a certain period. -func (m *Manager) GC() { - m.provider.GC() -} - -// startGC starts GC job in a certain period. -func (m *Manager) startGC() { - m.GC() - time.AfterFunc(time.Duration(m.opt.Gclifetime)*time.Second, func() { m.startGC() }) -} - -// SetSecure indicates whether to set cookie with HTTPS or not. -func (m *Manager) SetSecure(secure bool) { - m.opt.Secure = secure -} - -// ___________.____ _____ _________ ___ ___ -// \_ _____/| | / _ \ / _____// | \ -// | __) | | / /_\ \ \_____ \/ ~ \ -// | \ | |___/ | \/ \ Y / -// \___ / |_______ \____|__ /_______ /\___|_ / -// \/ \/ \/ \/ \/ - -type Flash struct { - ctx *macaron.Context - url.Values - ErrorMsg, WarningMsg, InfoMsg, SuccessMsg string -} - -func (f *Flash) set(name, msg string, current ...bool) { - isShow := false - if (len(current) == 0 && macaron.FlashNow) || - (len(current) > 0 && current[0]) { - isShow = true - } - - if isShow { - f.ctx.Data["Flash"] = f - } else { - f.Set(name, msg) - } -} - -func (f *Flash) Error(msg string, current ...bool) { - f.ErrorMsg = msg - f.set("error", msg, current...) -} - -func (f *Flash) Warning(msg string, current ...bool) { - f.WarningMsg = msg - f.set("warning", msg, current...) -} - -func (f *Flash) Info(msg string, current ...bool) { - f.InfoMsg = msg - f.set("info", msg, current...) -} - -func (f *Flash) Success(msg string, current ...bool) { - f.SuccessMsg = msg - f.set("success", msg, current...) -} diff --git a/vendor/github.com/go-macaron/session/utils.go b/vendor/github.com/go-macaron/session/utils.go deleted file mode 100644 index 90ca38064..000000000 --- a/vendor/github.com/go-macaron/session/utils.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2013 Beego Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package session - -import ( - "bytes" - "crypto/rand" - "encoding/gob" - "io" - - "github.com/Unknwon/com" -) - -func init() { - gob.Register([]interface{}{}) - gob.Register(map[int]interface{}{}) - gob.Register(map[string]interface{}{}) - gob.Register(map[interface{}]interface{}{}) - gob.Register(map[string]string{}) - gob.Register(map[int]string{}) - gob.Register(map[int]int{}) - gob.Register(map[int]int64{}) -} - -func EncodeGob(obj map[interface{}]interface{}) ([]byte, error) { - for _, v := range obj { - gob.Register(v) - } - buf := bytes.NewBuffer(nil) - err := gob.NewEncoder(buf).Encode(obj) - return buf.Bytes(), err -} - -func DecodeGob(encoded []byte) (out map[interface{}]interface{}, err error) { - buf := bytes.NewBuffer(encoded) - err = gob.NewDecoder(buf).Decode(&out) - return out, err -} - -// NOTE: A local copy in case of underlying package change -var alphanum = []byte("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") - -// generateRandomKey creates a random key with the given strength. -func generateRandomKey(strength int) []byte { - k := make([]byte, strength) - if n, err := io.ReadFull(rand.Reader, k); n != strength || err != nil { - return com.RandomCreateBytes(strength, alphanum...) - } - return k -} diff --git a/vendor/github.com/go-macaron/toolbox/LICENSE b/vendor/github.com/go-macaron/toolbox/LICENSE deleted file mode 100644 index 8405e89a0..000000000 --- a/vendor/github.com/go-macaron/toolbox/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -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: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -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 -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. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/toolbox/README.md b/vendor/github.com/go-macaron/toolbox/README.md deleted file mode 100644 index 2142cc55e..000000000 --- a/vendor/github.com/go-macaron/toolbox/README.md +++ /dev/null @@ -1,110 +0,0 @@ -toolbox -======= - -Middleware toolbox provides health chcek, pprof, profile and statistic services for [Macaron](https://github.com/go-macaron/macaron). - -[API Reference](https://gowalker.org/github.com/go-macaron/toolbox) - -### Installation - - go get github.com/go-macaron/toolbox - -## Usage - -```go -// main.go -import ( - "gopkg.in/macaron.v1" - "github.com/go-macaron/toolbox" -) - -func main() { - m := macaron.Classic() - m.Use(toolbox.Toolboxer(m)) - m.Run() -} -``` - -Open your browser and visit `http://localhost:4000/debug` to see the effects. - -## Options - -`toolbox.Toolboxer` comes with a variety of configuration options: - -```go -type dummyChecker struct { -} - -func (dc *dummyChecker) Desc() string { - return "Dummy checker" -} - -func (dc *dummyChecker) Check() error { - return nil -} - -// ... -m.Use(toolbox.Toolboxer(m, toolbox.Options{ - URLPrefix: "/debug", // URL prefix for toolbox dashboard. - HealthCheckURL: "/healthcheck", // URL for health check request. - HealthCheckers: []HealthChecker{ - new(dummyChecker), - }, // Health checkers. - HealthCheckFuncs: []*toolbox.HealthCheckFuncDesc{ - &toolbox.HealthCheckFuncDesc{ - Desc: "Database connection", - Func: func() error { return "OK" }, - }, - }, // Health check functions. - PprofURLPrefix: "/debug/pprof/", // URL prefix of pprof. - ProfileURLPrefix: "/debug/profile/", // URL prefix of profile. - ProfilePath: "profile", // Path store profile files. -})) -// ... -``` - -## Route Statistic - -Toolbox also comes with a route call statistic functionality: - -```go -import ( - "os" - "time" - //... - "github.com/go-macaron/toolbox" -) - -func main() { - //... - m.Get("/", func(t toolbox.Toolbox) { - start := time.Now() - - // Other operations. - - t.AddStatistics("GET", "/", time.Since(start)) - }) - - m.Get("/dump", func(t toolbox.Toolbox) { - t.GetMap(os.Stdout) - }) -} -``` - -Output take from test: - -``` -+---------------------------------------------------+------------+------------------+------------------+------------------+------------------+------------------+ -| Request URL | Method | Times | Total Used(s) | Max Used(μs) | Min Used(μs) | Avg Used(μs) | -+---------------------------------------------------+------------+------------------+------------------+------------------+------------------+------------------+ -| /api/user | POST | 2 | 0.000122 | 120.000000 | 2.000000 | 61.000000 | -| /api/user | GET | 1 | 0.000013 | 13.000000 | 13.000000 | 13.000000 | -| /api/user | DELETE | 1 | 0.000001 | 1.400000 | 1.400000 | 1.400000 | -| /api/admin | POST | 1 | 0.000014 | 14.000000 | 14.000000 | 14.000000 | -| /api/user/unknwon | POST | 1 | 0.000012 | 12.000000 | 12.000000 | 12.000000 | -+---------------------------------------------------+------------+------------------+------------------+------------------+------------------+------------------+ -``` - -## License - -This project is under Apache v2 License. See the [LICENSE](LICENSE) file for the full license text. \ No newline at end of file diff --git a/vendor/github.com/go-macaron/toolbox/healthcheck.go b/vendor/github.com/go-macaron/toolbox/healthcheck.go deleted file mode 100644 index 25b5bdfe2..000000000 --- a/vendor/github.com/go-macaron/toolbox/healthcheck.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2013 Beego Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package toolbox - -import ( - "bytes" -) - -// HealthChecker represents a health check instance. -type HealthChecker interface { - Desc() string - Check() error -} - -// HealthCheckFunc represents a callable function for health check. -type HealthCheckFunc func() error - -// HealthCheckFunc represents a callable function for health check with description. -type HealthCheckFuncDesc struct { - Desc string - Func HealthCheckFunc -} - -type healthCheck struct { - desc string - HealthChecker - check HealthCheckFunc // Not nil if add job as a function. -} - -// AddHealthCheck adds new health check job. -func (t *toolbox) AddHealthCheck(hc HealthChecker) { - t.healthCheckJobs = append(t.healthCheckJobs, &healthCheck{ - HealthChecker: hc, - }) -} - -// AddHealthCheckFunc adds a function as a new health check job. -func (t *toolbox) AddHealthCheckFunc(desc string, fn HealthCheckFunc) { - t.healthCheckJobs = append(t.healthCheckJobs, &healthCheck{ - desc: desc, - check: fn, - }) -} - -func (t *toolbox) handleHealthCheck() string { - if len(t.healthCheckJobs) == 0 { - return "no health check jobs" - } - - var buf bytes.Buffer - var err error - for _, job := range t.healthCheckJobs { - buf.WriteString("* ") - if job.check != nil { - buf.WriteString(job.desc) - err = job.check() - } else { - buf.WriteString(job.Desc()) - err = job.Check() - } - buf.WriteString(": ") - if err == nil { - buf.WriteString("OK") - } else { - buf.WriteString(err.Error()) - } - buf.WriteString("\n") - } - return buf.String() -} diff --git a/vendor/github.com/go-macaron/toolbox/profile.go b/vendor/github.com/go-macaron/toolbox/profile.go deleted file mode 100644 index 1eb2cdfe5..000000000 --- a/vendor/github.com/go-macaron/toolbox/profile.go +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2013 Beego Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package toolbox - -import ( - "bytes" - "errors" - "fmt" - "io" - "os" - "path" - "runtime" - "runtime/debug" - "runtime/pprof" - "time" - - "github.com/Unknwon/com" - "gopkg.in/macaron.v1" -) - -var ( - profilePath string - pid int - startTime = time.Now() - inCPUProfile bool -) - -// StartCPUProfile starts CPU profile monitor. -func StartCPUProfile() error { - if inCPUProfile { - return errors.New("CPU profile has alreday been started!") - } - inCPUProfile = true - - os.MkdirAll(profilePath, os.ModePerm) - f, err := os.Create(path.Join(profilePath, "cpu-"+com.ToStr(pid)+".pprof")) - if err != nil { - panic("fail to record CPU profile: " + err.Error()) - } - pprof.StartCPUProfile(f) - return nil -} - -// StopCPUProfile stops CPU profile monitor. -func StopCPUProfile() error { - if !inCPUProfile { - return errors.New("CPU profile hasn't been started!") - } - pprof.StopCPUProfile() - inCPUProfile = false - return nil -} - -func init() { - pid = os.Getpid() -} - -// DumpMemProf dumps memory profile in pprof. -func DumpMemProf(w io.Writer) { - pprof.WriteHeapProfile(w) -} - -func dumpMemProf() { - os.MkdirAll(profilePath, os.ModePerm) - f, err := os.Create(path.Join(profilePath, "mem-"+com.ToStr(pid)+".memprof")) - if err != nil { - panic("fail to record memory profile: " + err.Error()) - } - runtime.GC() - DumpMemProf(f) - f.Close() -} - -func avg(items []time.Duration) time.Duration { - var sum time.Duration - for _, item := range items { - sum += item - } - return time.Duration(int64(sum) / int64(len(items))) -} - -func dumpGC(memStats *runtime.MemStats, gcstats *debug.GCStats, w io.Writer) { - - if gcstats.NumGC > 0 { - lastPause := gcstats.Pause[0] - elapsed := time.Now().Sub(startTime) - overhead := float64(gcstats.PauseTotal) / float64(elapsed) * 100 - allocatedRate := float64(memStats.TotalAlloc) / elapsed.Seconds() - - fmt.Fprintf(w, "NumGC:%d Pause:%s Pause(Avg):%s Overhead:%3.2f%% Alloc:%s Sys:%s Alloc(Rate):%s/s Histogram:%s %s %s \n", - gcstats.NumGC, - com.ToStr(lastPause), - com.ToStr(avg(gcstats.Pause)), - overhead, - com.HumaneFileSize(memStats.Alloc), - com.HumaneFileSize(memStats.Sys), - com.HumaneFileSize(uint64(allocatedRate)), - com.ToStr(gcstats.PauseQuantiles[94]), - com.ToStr(gcstats.PauseQuantiles[98]), - com.ToStr(gcstats.PauseQuantiles[99])) - } else { - // while GC has disabled - elapsed := time.Now().Sub(startTime) - allocatedRate := float64(memStats.TotalAlloc) / elapsed.Seconds() - - fmt.Fprintf(w, "Alloc:%s Sys:%s Alloc(Rate):%s/s\n", - com.HumaneFileSize(memStats.Alloc), - com.HumaneFileSize(memStats.Sys), - com.HumaneFileSize(uint64(allocatedRate))) - } -} - -// DumpGCSummary dumps GC information to io.Writer -func DumpGCSummary(w io.Writer) { - memStats := &runtime.MemStats{} - runtime.ReadMemStats(memStats) - gcstats := &debug.GCStats{PauseQuantiles: make([]time.Duration, 100)} - debug.ReadGCStats(gcstats) - - dumpGC(memStats, gcstats, w) -} - -func handleProfile(ctx *macaron.Context) string { - switch ctx.Query("op") { - case "startcpu": - if err := StartCPUProfile(); err != nil { - return err.Error() - } - case "stopcpu": - if err := StopCPUProfile(); err != nil { - return err.Error() - } - case "mem": - dumpMemProf() - case "gc": - var buf bytes.Buffer - DumpGCSummary(&buf) - return string(buf.Bytes()) - default: - return fmt.Sprintf(`

Available operations:

-
    -
  1. Start CPU profile
  2. -
  3. Stop CPU profile
  4. -
  5. Dump memory profile
  6. -
  7. Dump GC summary
  8. -
`, opt.ProfileURLPrefix) - } - ctx.Redirect(opt.ProfileURLPrefix) - return "" -} diff --git a/vendor/github.com/go-macaron/toolbox/statistic.go b/vendor/github.com/go-macaron/toolbox/statistic.go deleted file mode 100644 index 47e6ab23e..000000000 --- a/vendor/github.com/go-macaron/toolbox/statistic.go +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2013 Beego Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package toolbox - -import ( - "encoding/json" - "fmt" - "io" - "strings" - "sync" - "time" -) - -// Statistics struct -type Statistics struct { - RequestUrl string - RequestNum int64 - MinTime time.Duration - MaxTime time.Duration - TotalTime time.Duration -} - -// UrlMap contains several statistics struct to log different data -type UrlMap struct { - lock sync.RWMutex - LengthLimit int // limit the urlmap's length if it's equal to 0 there's no limit - urlmap map[string]map[string]*Statistics -} - -// add statistics task. -// it needs request method, request url and statistics time duration -func (m *UrlMap) AddStatistics(requestMethod, requestUrl string, requesttime time.Duration) { - m.lock.Lock() - defer m.lock.Unlock() - - if method, ok := m.urlmap[requestUrl]; ok { - if s, ok := method[requestMethod]; ok { - s.RequestNum += 1 - if s.MaxTime < requesttime { - s.MaxTime = requesttime - } - if s.MinTime > requesttime { - s.MinTime = requesttime - } - s.TotalTime += requesttime - } else { - nb := &Statistics{ - RequestUrl: requestUrl, - RequestNum: 1, - MinTime: requesttime, - MaxTime: requesttime, - TotalTime: requesttime, - } - m.urlmap[requestUrl][requestMethod] = nb - } - - } else { - if m.LengthLimit > 0 && m.LengthLimit <= len(m.urlmap) { - return - } - methodmap := make(map[string]*Statistics) - nb := &Statistics{ - RequestUrl: requestUrl, - RequestNum: 1, - MinTime: requesttime, - MaxTime: requesttime, - TotalTime: requesttime, - } - methodmap[requestMethod] = nb - m.urlmap[requestUrl] = methodmap - } -} - -// put url statistics result in io.Writer -func (m *UrlMap) GetMap(w io.Writer) { - m.lock.RLock() - defer m.lock.RUnlock() - - sep := fmt.Sprintf("+%s+%s+%s+%s+%s+%s+%s+\n", strings.Repeat("-", 51), strings.Repeat("-", 12), - strings.Repeat("-", 18), strings.Repeat("-", 18), strings.Repeat("-", 18), strings.Repeat("-", 18), strings.Repeat("-", 18)) - fmt.Fprintf(w, sep) - fmt.Fprintf(w, "| % -50s| % -10s | % -16s | % -16s | % -16s | % -16s | % -16s |\n", "Request URL", "Method", "Times", "Total Used(s)", "Max Used(μs)", "Min Used(μs)", "Avg Used(μs)") - fmt.Fprintf(w, sep) - - for k, v := range m.urlmap { - for kk, vv := range v { - fmt.Fprintf(w, "| % -50s| % -10s | % 16d | % 16f | % 16.6f | % 16.6f | % 16.6f |\n", k, - kk, vv.RequestNum, vv.TotalTime.Seconds(), float64(vv.MaxTime.Nanoseconds())/1000, - float64(vv.MinTime.Nanoseconds())/1000, float64(time.Duration(int64(vv.TotalTime)/vv.RequestNum).Nanoseconds())/1000, - ) - } - } - fmt.Fprintf(w, sep) -} - -type URLMapInfo struct { - URL string `json:"url"` - Method string `json:"method"` - Times int64 `json:"times"` - TotalUsed float64 `json:"total_used"` - MaxUsed float64 `json:"max_used"` - MinUsed float64 `json:"min_used"` - AvgUsed float64 `json:"avg_used"` -} - -func (m *UrlMap) JSON(w io.Writer) { - infos := make([]*URLMapInfo, 0, len(m.urlmap)) - for k, v := range m.urlmap { - for kk, vv := range v { - infos = append(infos, &URLMapInfo{ - URL: k, - Method: kk, - Times: vv.RequestNum, - TotalUsed: vv.TotalTime.Seconds(), - MaxUsed: float64(vv.MaxTime.Nanoseconds()) / 1000, - MinUsed: float64(vv.MinTime.Nanoseconds()) / 1000, - AvgUsed: float64(time.Duration(int64(vv.TotalTime)/vv.RequestNum).Nanoseconds()) / 1000, - }) - } - } - - if err := json.NewEncoder(w).Encode(infos); err != nil { - panic("URLMap.JSON: " + err.Error()) - } -} diff --git a/vendor/github.com/go-macaron/toolbox/toolbox.go b/vendor/github.com/go-macaron/toolbox/toolbox.go deleted file mode 100644 index 46783c447..000000000 --- a/vendor/github.com/go-macaron/toolbox/toolbox.go +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -// Package toolbox is a middleware that provides health check, pprof, profile and statistic services for Macaron. -package toolbox - -import ( - "fmt" - "io" - "net/http" - "net/http/pprof" - "path" - "time" - - "gopkg.in/macaron.v1" -) - -const _VERSION = "0.1.3" - -func Version() string { - return _VERSION -} - -// Toolbox represents a tool box service for Macaron instance. -type Toolbox interface { - AddHealthCheck(HealthChecker) - AddHealthCheckFunc(string, HealthCheckFunc) - AddStatistics(string, string, time.Duration) - GetMap(io.Writer) - JSON(io.Writer) -} - -type toolbox struct { - *UrlMap - healthCheckJobs []*healthCheck -} - -// Options represents a struct for specifying configuration options for the Toolbox middleware. -type Options struct { - // URL prefix for toolbox dashboard. Default is "/debug". - URLPrefix string - // URL for health check request. Default is "/healthcheck". - HealthCheckURL string - // Health checkers. - HealthCheckers []HealthChecker - // Health check functions. - HealthCheckFuncs []*HealthCheckFuncDesc - // URL for URL map json. Default is "/urlmap.json". - URLMapPrefix string - // URL prefix of pprof. Default is "/debug/pprof/". - PprofURLPrefix string - // URL prefix of profile. Default is "/debug/profile/". - ProfileURLPrefix string - // Path store profile files. Default is "profile". - ProfilePath string -} - -var opt Options - -func prepareOptions(options []Options) { - if len(options) > 0 { - opt = options[0] - } - - // Defaults. - if len(opt.URLPrefix) == 0 { - opt.URLPrefix = "/debug" - } - if len(opt.HealthCheckURL) == 0 { - opt.HealthCheckURL = "/healthcheck" - } - if len(opt.URLMapPrefix) == 0 { - opt.URLMapPrefix = "/urlmap.json" - } - if len(opt.PprofURLPrefix) == 0 { - opt.PprofURLPrefix = "/debug/pprof/" - } else if opt.PprofURLPrefix[len(opt.PprofURLPrefix)-1] != '/' { - opt.PprofURLPrefix += "/" - } - if len(opt.ProfileURLPrefix) == 0 { - opt.ProfileURLPrefix = "/debug/profile/" - } else if opt.ProfileURLPrefix[len(opt.ProfileURLPrefix)-1] != '/' { - opt.ProfileURLPrefix += "/" - } - if len(opt.ProfilePath) == 0 { - opt.ProfilePath = path.Join(macaron.Root, "profile") - } -} - -func dashboard(ctx *macaron.Context) string { - return fmt.Sprintf(`

Toolbox Index:

-
    -
  1. Pprof Information
  2. -
  3. Profile Operations
  4. -
`, opt.PprofURLPrefix, opt.ProfileURLPrefix) -} - -var _ Toolbox = &toolbox{} - -// Toolboxer is a middleware provides health check, pprof, profile and statistic services for your application. -func Toolboxer(m *macaron.Macaron, options ...Options) macaron.Handler { - prepareOptions(options) - t := &toolbox{ - healthCheckJobs: make([]*healthCheck, 0, len(opt.HealthCheckers)+len(opt.HealthCheckFuncs)), - } - - // Dashboard. - m.Get(opt.URLPrefix, dashboard) - - // Health check. - for _, hc := range opt.HealthCheckers { - t.AddHealthCheck(hc) - } - for _, fd := range opt.HealthCheckFuncs { - t.AddHealthCheckFunc(fd.Desc, fd.Func) - } - m.Route(opt.HealthCheckURL, "HEAD,GET", t.handleHealthCheck) - - // URL map. - m.Get(opt.URLMapPrefix, func(rw http.ResponseWriter) { - t.JSON(rw) - }) - - // Pprof. - m.Any(path.Join(opt.PprofURLPrefix, "cmdline"), pprof.Cmdline) - m.Any(path.Join(opt.PprofURLPrefix, "profile"), pprof.Profile) - m.Any(path.Join(opt.PprofURLPrefix, "symbol"), pprof.Symbol) - m.Any(opt.PprofURLPrefix, pprof.Index) - m.Any(path.Join(opt.PprofURLPrefix, "*"), pprof.Index) - - // Profile. - profilePath = opt.ProfilePath - m.Get(opt.ProfileURLPrefix, handleProfile) - - // Routes statistic. - t.UrlMap = &UrlMap{ - urlmap: make(map[string]map[string]*Statistics), - } - - return func(ctx *macaron.Context) { - ctx.MapTo(t, (*Toolbox)(nil)) - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/AUTHORS b/vendor/github.com/go-sql-driver/mysql/AUTHORS deleted file mode 100644 index 5ce4f7eca..000000000 --- a/vendor/github.com/go-sql-driver/mysql/AUTHORS +++ /dev/null @@ -1,94 +0,0 @@ -# This is the official list of Go-MySQL-Driver authors for copyright purposes. - -# If you are submitting a patch, please add your name or the name of the -# organization which holds the copyright to this list in alphabetical order. - -# Names should be added to this file as -# Name -# The email address is not required for organizations. -# Please keep the list sorted. - - -# Individual Persons - -Aaron Hopkins -Achille Roussel -Alexey Palazhchenko -Andrew Reid -Arne Hormann -Asta Xie -Bulat Gaifullin -Carlos Nieto -Chris Moos -Craig Wilson -Daniel Montoya -Daniel Nichter -Daniël van Eeden -Dave Protasowski -DisposaBoy -Egor Smolyakov -Evan Shaw -Frederick Mayle -Gustavo Kristic -Hajime Nakagami -Hanno Braun -Henri Yandell -Hirotaka Yamamoto -ICHINOSE Shogo -Ilia Cimpoes -INADA Naoki -Jacek Szwec -James Harr -Jeff Hodges -Jeffrey Charles -Jian Zhen -Joshua Prunier -Julien Lefevre -Julien Schmidt -Justin Li -Justin Nuß -Kamil Dziedzic -Kevin Malachowski -Kieron Woodhouse -Lennart Rudolph -Leonardo YongUk Kim -Linh Tran Tuan -Lion Yang -Luca Looz -Lucas Liu -Luke Scott -Maciej Zimnoch -Michael Woolnough -Nicola Peduzzi -Olivier Mengué -oscarzhao -Paul Bonser -Peter Schultz -Rebecca Chin -Reed Allman -Richard Wilkes -Robert Russell -Runrioter Wung -Shuode Li -Soroush Pour -Stan Putrya -Stanley Gunawan -Steven Hartland -Thomas Wodarek -Tom Jenkinson -Xiangyu Hu -Xiaobing Jiang -Xiuming Chen -Zhenye Xie - -# Organizations - -Barracuda Networks, Inc. -Counting Ltd. -Google Inc. -InfoSum Ltd. -Keybase Inc. -Percona LLC -Pivotal Inc. -Stripe Inc. -Multiplay Ltd. diff --git a/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md b/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md deleted file mode 100644 index 2d87d74c9..000000000 --- a/vendor/github.com/go-sql-driver/mysql/CHANGELOG.md +++ /dev/null @@ -1,167 +0,0 @@ -## Version 1.4 (2018-06-03) - -Changes: - - - Documentation fixes (#530, #535, #567) - - Refactoring (#575, #579, #580, #581, #603, #615, #704) - - Cache column names (#444) - - Sort the DSN parameters in DSNs generated from a config (#637) - - Allow native password authentication by default (#644) - - Use the default port if it is missing in the DSN (#668) - - Removed the `strict` mode (#676) - - Do not query `max_allowed_packet` by default (#680) - - Dropped support Go 1.6 and lower (#696) - - Updated `ConvertValue()` to match the database/sql/driver implementation (#760) - - Document the usage of `0000-00-00T00:00:00` as the time.Time zero value (#783) - - Improved the compatibility of the authentication system (#807) - -New Features: - - - Multi-Results support (#537) - - `rejectReadOnly` DSN option (#604) - - `context.Context` support (#608, #612, #627, #761) - - Transaction isolation level support (#619, #744) - - Read-Only transactions support (#618, #634) - - `NewConfig` function which initializes a config with default values (#679) - - Implemented the `ColumnType` interfaces (#667, #724) - - Support for custom string types in `ConvertValue` (#623) - - Implemented `NamedValueChecker`, improving support for uint64 with high bit set (#690, #709, #710) - - `caching_sha2_password` authentication plugin support (#794, #800, #801, #802) - - Implemented `driver.SessionResetter` (#779) - - `sha256_password` authentication plugin support (#808) - -Bugfixes: - - - Use the DSN hostname as TLS default ServerName if `tls=true` (#564, #718) - - Fixed LOAD LOCAL DATA INFILE for empty files (#590) - - Removed columns definition cache since it sometimes cached invalid data (#592) - - Don't mutate registered TLS configs (#600) - - Make RegisterTLSConfig concurrency-safe (#613) - - Handle missing auth data in the handshake packet correctly (#646) - - Do not retry queries when data was written to avoid data corruption (#302, #736) - - Cache the connection pointer for error handling before invalidating it (#678) - - Fixed imports for appengine/cloudsql (#700) - - Fix sending STMT_LONG_DATA for 0 byte data (#734) - - Set correct capacity for []bytes read from length-encoded strings (#766) - - Make RegisterDial concurrency-safe (#773) - - -## Version 1.3 (2016-12-01) - -Changes: - - - Go 1.1 is no longer supported - - Use decimals fields in MySQL to format time types (#249) - - Buffer optimizations (#269) - - TLS ServerName defaults to the host (#283) - - Refactoring (#400, #410, #437) - - Adjusted documentation for second generation CloudSQL (#485) - - Documented DSN system var quoting rules (#502) - - Made statement.Close() calls idempotent to avoid errors in Go 1.6+ (#512) - -New Features: - - - Enable microsecond resolution on TIME, DATETIME and TIMESTAMP (#249) - - Support for returning table alias on Columns() (#289, #359, #382) - - Placeholder interpolation, can be actived with the DSN parameter `interpolateParams=true` (#309, #318, #490) - - Support for uint64 parameters with high bit set (#332, #345) - - Cleartext authentication plugin support (#327) - - Exported ParseDSN function and the Config struct (#403, #419, #429) - - Read / Write timeouts (#401) - - Support for JSON field type (#414) - - Support for multi-statements and multi-results (#411, #431) - - DSN parameter to set the driver-side max_allowed_packet value manually (#489) - - Native password authentication plugin support (#494, #524) - -Bugfixes: - - - Fixed handling of queries without columns and rows (#255) - - Fixed a panic when SetKeepAlive() failed (#298) - - Handle ERR packets while reading rows (#321) - - Fixed reading NULL length-encoded integers in MySQL 5.6+ (#349) - - Fixed absolute paths support in LOAD LOCAL DATA INFILE (#356) - - Actually zero out bytes in handshake response (#378) - - Fixed race condition in registering LOAD DATA INFILE handler (#383) - - Fixed tests with MySQL 5.7.9+ (#380) - - QueryUnescape TLS config names (#397) - - Fixed "broken pipe" error by writing to closed socket (#390) - - Fixed LOAD LOCAL DATA INFILE buffering (#424) - - Fixed parsing of floats into float64 when placeholders are used (#434) - - Fixed DSN tests with Go 1.7+ (#459) - - Handle ERR packets while waiting for EOF (#473) - - Invalidate connection on error while discarding additional results (#513) - - Allow terminating packets of length 0 (#516) - - -## Version 1.2 (2014-06-03) - -Changes: - - - We switched back to a "rolling release". `go get` installs the current master branch again - - Version v1 of the driver will not be maintained anymore. Go 1.0 is no longer supported by this driver - - Exported errors to allow easy checking from application code - - Enabled TCP Keepalives on TCP connections - - Optimized INFILE handling (better buffer size calculation, lazy init, ...) - - The DSN parser also checks for a missing separating slash - - Faster binary date / datetime to string formatting - - Also exported the MySQLWarning type - - mysqlConn.Close returns the first error encountered instead of ignoring all errors - - writePacket() automatically writes the packet size to the header - - readPacket() uses an iterative approach instead of the recursive approach to merge splitted packets - -New Features: - - - `RegisterDial` allows the usage of a custom dial function to establish the network connection - - Setting the connection collation is possible with the `collation` DSN parameter. This parameter should be preferred over the `charset` parameter - - Logging of critical errors is configurable with `SetLogger` - - Google CloudSQL support - -Bugfixes: - - - Allow more than 32 parameters in prepared statements - - Various old_password fixes - - Fixed TestConcurrent test to pass Go's race detection - - Fixed appendLengthEncodedInteger for large numbers - - Renamed readLengthEnodedString to readLengthEncodedString and skipLengthEnodedString to skipLengthEncodedString (fixed typo) - - -## Version 1.1 (2013-11-02) - -Changes: - - - Go-MySQL-Driver now requires Go 1.1 - - Connections now use the collation `utf8_general_ci` by default. Adding `&charset=UTF8` to the DSN should not be necessary anymore - - Made closing rows and connections error tolerant. This allows for example deferring rows.Close() without checking for errors - - `[]byte(nil)` is now treated as a NULL value. Before, it was treated like an empty string / `[]byte("")` - - DSN parameter values must now be url.QueryEscape'ed. This allows text values to contain special characters, such as '&'. - - Use the IO buffer also for writing. This results in zero allocations (by the driver) for most queries - - Optimized the buffer for reading - - stmt.Query now caches column metadata - - New Logo - - Changed the copyright header to include all contributors - - Improved the LOAD INFILE documentation - - The driver struct is now exported to make the driver directly accessible - - Refactored the driver tests - - Added more benchmarks and moved all to a separate file - - Other small refactoring - -New Features: - - - Added *old_passwords* support: Required in some cases, but must be enabled by adding `allowOldPasswords=true` to the DSN since it is insecure - - Added a `clientFoundRows` parameter: Return the number of matching rows instead of the number of rows changed on UPDATEs - - Added TLS/SSL support: Use a TLS/SSL encrypted connection to the server. Custom TLS configs can be registered and used - -Bugfixes: - - - Fixed MySQL 4.1 support: MySQL 4.1 sends packets with lengths which differ from the specification - - Convert to DB timezone when inserting `time.Time` - - Splitted packets (more than 16MB) are now merged correctly - - Fixed false positive `io.EOF` errors when the data was fully read - - Avoid panics on reuse of closed connections - - Fixed empty string producing false nil values - - Fixed sign byte for positive TIME fields - - -## Version 1.0 (2013-05-14) - -Initial Release diff --git a/vendor/github.com/go-sql-driver/mysql/CONTRIBUTING.md b/vendor/github.com/go-sql-driver/mysql/CONTRIBUTING.md deleted file mode 100644 index 8fe16bcb4..000000000 --- a/vendor/github.com/go-sql-driver/mysql/CONTRIBUTING.md +++ /dev/null @@ -1,23 +0,0 @@ -# Contributing Guidelines - -## Reporting Issues - -Before creating a new Issue, please check first if a similar Issue [already exists](https://github.com/go-sql-driver/mysql/issues?state=open) or was [recently closed](https://github.com/go-sql-driver/mysql/issues?direction=desc&page=1&sort=updated&state=closed). - -## Contributing Code - -By contributing to this project, you share your code under the Mozilla Public License 2, as specified in the LICENSE file. -Don't forget to add yourself to the AUTHORS file. - -### Code Review - -Everyone is invited to review and comment on pull requests. -If it looks fine to you, comment with "LGTM" (Looks good to me). - -If changes are required, notice the reviewers with "PTAL" (Please take another look) after committing the fixes. - -Before merging the Pull Request, at least one [team member](https://github.com/go-sql-driver?tab=members) must have commented with "LGTM". - -## Development Ideas - -If you are looking for ideas for code contributions, please check our [Development Ideas](https://github.com/go-sql-driver/mysql/wiki/Development-Ideas) Wiki page. diff --git a/vendor/github.com/go-sql-driver/mysql/LICENSE b/vendor/github.com/go-sql-driver/mysql/LICENSE deleted file mode 100644 index 14e2f777f..000000000 --- a/vendor/github.com/go-sql-driver/mysql/LICENSE +++ /dev/null @@ -1,373 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - 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/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/vendor/github.com/go-sql-driver/mysql/README.md b/vendor/github.com/go-sql-driver/mysql/README.md deleted file mode 100644 index 341d9194c..000000000 --- a/vendor/github.com/go-sql-driver/mysql/README.md +++ /dev/null @@ -1,490 +0,0 @@ -# Go-MySQL-Driver - -A MySQL-Driver for Go's [database/sql](https://golang.org/pkg/database/sql/) package - -![Go-MySQL-Driver logo](https://raw.github.com/wiki/go-sql-driver/mysql/gomysql_m.png "Golang Gopher holding the MySQL Dolphin") - ---------------------------------------- - * [Features](#features) - * [Requirements](#requirements) - * [Installation](#installation) - * [Usage](#usage) - * [DSN (Data Source Name)](#dsn-data-source-name) - * [Password](#password) - * [Protocol](#protocol) - * [Address](#address) - * [Parameters](#parameters) - * [Examples](#examples) - * [Connection pool and timeouts](#connection-pool-and-timeouts) - * [context.Context Support](#contextcontext-support) - * [ColumnType Support](#columntype-support) - * [LOAD DATA LOCAL INFILE support](#load-data-local-infile-support) - * [time.Time support](#timetime-support) - * [Unicode support](#unicode-support) - * [Testing / Development](#testing--development) - * [License](#license) - ---------------------------------------- - -## Features - * Lightweight and [fast](https://github.com/go-sql-driver/sql-benchmark "golang MySQL-Driver performance") - * Native Go implementation. No C-bindings, just pure Go - * Connections over TCP/IPv4, TCP/IPv6, Unix domain sockets or [custom protocols](https://godoc.org/github.com/go-sql-driver/mysql#DialFunc) - * Automatic handling of broken connections - * Automatic Connection Pooling *(by database/sql package)* - * Supports queries larger than 16MB - * Full [`sql.RawBytes`](https://golang.org/pkg/database/sql/#RawBytes) support. - * Intelligent `LONG DATA` handling in prepared statements - * Secure `LOAD DATA LOCAL INFILE` support with file Whitelisting and `io.Reader` support - * Optional `time.Time` parsing - * Optional placeholder interpolation - -## Requirements - * Go 1.8 or higher. We aim to support the 3 latest versions of Go. - * MySQL (4.1+), MariaDB, Percona Server, Google CloudSQL or Sphinx (2.2.3+) - ---------------------------------------- - -## Installation -Simple install the package to your [$GOPATH](https://github.com/golang/go/wiki/GOPATH "GOPATH") with the [go tool](https://golang.org/cmd/go/ "go command") from shell: -```bash -$ go get -u github.com/go-sql-driver/mysql -``` -Make sure [Git is installed](https://git-scm.com/downloads) on your machine and in your system's `PATH`. - -## Usage -_Go MySQL Driver_ is an implementation of Go's `database/sql/driver` interface. You only need to import the driver and can use the full [`database/sql`](https://golang.org/pkg/database/sql/) API then. - -Use `mysql` as `driverName` and a valid [DSN](#dsn-data-source-name) as `dataSourceName`: -```go -import "database/sql" -import _ "github.com/go-sql-driver/mysql" - -db, err := sql.Open("mysql", "user:password@/dbname") -``` - -[Examples are available in our Wiki](https://github.com/go-sql-driver/mysql/wiki/Examples "Go-MySQL-Driver Examples"). - - -### DSN (Data Source Name) - -The Data Source Name has a common format, like e.g. [PEAR DB](http://pear.php.net/manual/en/package.database.db.intro-dsn.php) uses it, but without type-prefix (optional parts marked by squared brackets): -``` -[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶mN=valueN] -``` - -A DSN in its fullest form: -``` -username:password@protocol(address)/dbname?param=value -``` - -Except for the databasename, all values are optional. So the minimal DSN is: -``` -/dbname -``` - -If you do not want to preselect a database, leave `dbname` empty: -``` -/ -``` -This has the same effect as an empty DSN string: -``` - -``` - -Alternatively, [Config.FormatDSN](https://godoc.org/github.com/go-sql-driver/mysql#Config.FormatDSN) can be used to create a DSN string by filling a struct. - -#### Password -Passwords can consist of any character. Escaping is **not** necessary. - -#### Protocol -See [net.Dial](https://golang.org/pkg/net/#Dial) for more information which networks are available. -In general you should use an Unix domain socket if available and TCP otherwise for best performance. - -#### Address -For TCP and UDP networks, addresses have the form `host[:port]`. -If `port` is omitted, the default port will be used. -If `host` is a literal IPv6 address, it must be enclosed in square brackets. -The functions [net.JoinHostPort](https://golang.org/pkg/net/#JoinHostPort) and [net.SplitHostPort](https://golang.org/pkg/net/#SplitHostPort) manipulate addresses in this form. - -For Unix domain sockets the address is the absolute path to the MySQL-Server-socket, e.g. `/var/run/mysqld/mysqld.sock` or `/tmp/mysql.sock`. - -#### Parameters -*Parameters are case-sensitive!* - -Notice that any of `true`, `TRUE`, `True` or `1` is accepted to stand for a true boolean value. Not surprisingly, false can be specified as any of: `false`, `FALSE`, `False` or `0`. - -##### `allowAllFiles` - -``` -Type: bool -Valid Values: true, false -Default: false -``` - -`allowAllFiles=true` disables the file Whitelist for `LOAD DATA LOCAL INFILE` and allows *all* files. -[*Might be insecure!*](http://dev.mysql.com/doc/refman/5.7/en/load-data-local.html) - -##### `allowCleartextPasswords` - -``` -Type: bool -Valid Values: true, false -Default: false -``` - -`allowCleartextPasswords=true` allows using the [cleartext client side plugin](http://dev.mysql.com/doc/en/cleartext-authentication-plugin.html) if required by an account, such as one defined with the [PAM authentication plugin](http://dev.mysql.com/doc/en/pam-authentication-plugin.html). Sending passwords in clear text may be a security problem in some configurations. To avoid problems if there is any possibility that the password would be intercepted, clients should connect to MySQL Server using a method that protects the password. Possibilities include [TLS / SSL](#tls), IPsec, or a private network. - -##### `allowNativePasswords` - -``` -Type: bool -Valid Values: true, false -Default: true -``` -`allowNativePasswords=false` disallows the usage of MySQL native password method. - -##### `allowOldPasswords` - -``` -Type: bool -Valid Values: true, false -Default: false -``` -`allowOldPasswords=true` allows the usage of the insecure old password method. This should be avoided, but is necessary in some cases. See also [the old_passwords wiki page](https://github.com/go-sql-driver/mysql/wiki/old_passwords). - -##### `charset` - -``` -Type: string -Valid Values: -Default: none -``` - -Sets the charset used for client-server interaction (`"SET NAMES "`). If multiple charsets are set (separated by a comma), the following charset is used if setting the charset failes. This enables for example support for `utf8mb4` ([introduced in MySQL 5.5.3](http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html)) with fallback to `utf8` for older servers (`charset=utf8mb4,utf8`). - -Usage of the `charset` parameter is discouraged because it issues additional queries to the server. -Unless you need the fallback behavior, please use `collation` instead. - -##### `collation` - -``` -Type: string -Valid Values: -Default: utf8_general_ci -``` - -Sets the collation used for client-server interaction on connection. In contrast to `charset`, `collation` does not issue additional queries. If the specified collation is unavailable on the target server, the connection will fail. - -A list of valid charsets for a server is retrievable with `SHOW COLLATION`. - -##### `clientFoundRows` - -``` -Type: bool -Valid Values: true, false -Default: false -``` - -`clientFoundRows=true` causes an UPDATE to return the number of matching rows instead of the number of rows changed. - -##### `columnsWithAlias` - -``` -Type: bool -Valid Values: true, false -Default: false -``` - -When `columnsWithAlias` is true, calls to `sql.Rows.Columns()` will return the table alias and the column name separated by a dot. For example: - -``` -SELECT u.id FROM users as u -``` - -will return `u.id` instead of just `id` if `columnsWithAlias=true`. - -##### `interpolateParams` - -``` -Type: bool -Valid Values: true, false -Default: false -``` - -If `interpolateParams` is true, placeholders (`?`) in calls to `db.Query()` and `db.Exec()` are interpolated into a single query string with given parameters. This reduces the number of roundtrips, since the driver has to prepare a statement, execute it with given parameters and close the statement again with `interpolateParams=false`. - -*This can not be used together with the multibyte encodings BIG5, CP932, GB2312, GBK or SJIS. These are blacklisted as they may [introduce a SQL injection vulnerability](http://stackoverflow.com/a/12118602/3430118)!* - -##### `loc` - -``` -Type: string -Valid Values: -Default: UTC -``` - -Sets the location for time.Time values (when using `parseTime=true`). *"Local"* sets the system's location. See [time.LoadLocation](https://golang.org/pkg/time/#LoadLocation) for details. - -Note that this sets the location for time.Time values but does not change MySQL's [time_zone setting](https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html). For that see the [time_zone system variable](#system-variables), which can also be set as a DSN parameter. - -Please keep in mind, that param values must be [url.QueryEscape](https://golang.org/pkg/net/url/#QueryEscape)'ed. Alternatively you can manually replace the `/` with `%2F`. For example `US/Pacific` would be `loc=US%2FPacific`. - -##### `maxAllowedPacket` -``` -Type: decimal number -Default: 4194304 -``` - -Max packet size allowed in bytes. The default value is 4 MiB and should be adjusted to match the server settings. `maxAllowedPacket=0` can be used to automatically fetch the `max_allowed_packet` variable from server *on every connection*. - -##### `multiStatements` - -``` -Type: bool -Valid Values: true, false -Default: false -``` - -Allow multiple statements in one query. While this allows batch queries, it also greatly increases the risk of SQL injections. Only the result of the first query is returned, all other results are silently discarded. - -When `multiStatements` is used, `?` parameters must only be used in the first statement. - -##### `parseTime` - -``` -Type: bool -Valid Values: true, false -Default: false -``` - -`parseTime=true` changes the output type of `DATE` and `DATETIME` values to `time.Time` instead of `[]byte` / `string` -The date or datetime like `0000-00-00 00:00:00` is converted into zero value of `time.Time`. - - -##### `readTimeout` - -``` -Type: duration -Default: 0 -``` - -I/O read timeout. The value must be a decimal number with a unit suffix (*"ms"*, *"s"*, *"m"*, *"h"*), such as *"30s"*, *"0.5m"* or *"1m30s"*. - -##### `rejectReadOnly` - -``` -Type: bool -Valid Values: true, false -Default: false -``` - - -`rejectReadOnly=true` causes the driver to reject read-only connections. This -is for a possible race condition during an automatic failover, where the mysql -client gets connected to a read-only replica after the failover. - -Note that this should be a fairly rare case, as an automatic failover normally -happens when the primary is down, and the race condition shouldn't happen -unless it comes back up online as soon as the failover is kicked off. On the -other hand, when this happens, a MySQL application can get stuck on a -read-only connection until restarted. It is however fairly easy to reproduce, -for example, using a manual failover on AWS Aurora's MySQL-compatible cluster. - -If you are not relying on read-only transactions to reject writes that aren't -supposed to happen, setting this on some MySQL providers (such as AWS Aurora) -is safer for failovers. - -Note that ERROR 1290 can be returned for a `read-only` server and this option will -cause a retry for that error. However the same error number is used for some -other cases. You should ensure your application will never cause an ERROR 1290 -except for `read-only` mode when enabling this option. - - -##### `serverPubKey` - -``` -Type: string -Valid Values: -Default: none -``` - -Server public keys can be registered with [`mysql.RegisterServerPubKey`](https://godoc.org/github.com/go-sql-driver/mysql#RegisterServerPubKey), which can then be used by the assigned name in the DSN. -Public keys are used to transmit encrypted data, e.g. for authentication. -If the server's public key is known, it should be set manually to avoid expensive and potentially insecure transmissions of the public key from the server to the client each time it is required. - - -##### `timeout` - -``` -Type: duration -Default: OS default -``` - -Timeout for establishing connections, aka dial timeout. The value must be a decimal number with a unit suffix (*"ms"*, *"s"*, *"m"*, *"h"*), such as *"30s"*, *"0.5m"* or *"1m30s"*. - - -##### `tls` - -``` -Type: bool / string -Valid Values: true, false, skip-verify, preferred, -Default: false -``` - -`tls=true` enables TLS / SSL encrypted connection to the server. Use `skip-verify` if you want to use a self-signed or invalid certificate (server side) or use `preferred` to use TLS only when advertised by the server. This is similar to `skip-verify`, but additionally allows a fallback to a connection which is not encrypted. Neither `skip-verify` nor `preferred` add any reliable security. You can use a custom TLS config after registering it with [`mysql.RegisterTLSConfig`](https://godoc.org/github.com/go-sql-driver/mysql#RegisterTLSConfig). - - -##### `writeTimeout` - -``` -Type: duration -Default: 0 -``` - -I/O write timeout. The value must be a decimal number with a unit suffix (*"ms"*, *"s"*, *"m"*, *"h"*), such as *"30s"*, *"0.5m"* or *"1m30s"*. - - -##### System Variables - -Any other parameters are interpreted as system variables: - * `=`: `SET =` - * `=`: `SET =` - * `=%27%27`: `SET =''` - -Rules: -* The values for string variables must be quoted with `'`. -* The values must also be [url.QueryEscape](http://golang.org/pkg/net/url/#QueryEscape)'ed! - (which implies values of string variables must be wrapped with `%27`). - -Examples: - * `autocommit=1`: `SET autocommit=1` - * [`time_zone=%27Europe%2FParis%27`](https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html): `SET time_zone='Europe/Paris'` - * [`tx_isolation=%27REPEATABLE-READ%27`](https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_tx_isolation): `SET tx_isolation='REPEATABLE-READ'` - - -#### Examples -``` -user@unix(/path/to/socket)/dbname -``` - -``` -root:pw@unix(/tmp/mysql.sock)/myDatabase?loc=Local -``` - -``` -user:password@tcp(localhost:5555)/dbname?tls=skip-verify&autocommit=true -``` - -Treat warnings as errors by setting the system variable [`sql_mode`](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html): -``` -user:password@/dbname?sql_mode=TRADITIONAL -``` - -TCP via IPv6: -``` -user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname?timeout=90s&collation=utf8mb4_unicode_ci -``` - -TCP on a remote host, e.g. Amazon RDS: -``` -id:password@tcp(your-amazonaws-uri.com:3306)/dbname -``` - -Google Cloud SQL on App Engine (First Generation MySQL Server): -``` -user@cloudsql(project-id:instance-name)/dbname -``` - -Google Cloud SQL on App Engine (Second Generation MySQL Server): -``` -user@cloudsql(project-id:regionname:instance-name)/dbname -``` - -TCP using default port (3306) on localhost: -``` -user:password@tcp/dbname?charset=utf8mb4,utf8&sys_var=esc%40ped -``` - -Use the default protocol (tcp) and host (localhost:3306): -``` -user:password@/dbname -``` - -No Database preselected: -``` -user:password@/ -``` - - -### Connection pool and timeouts -The connection pool is managed by Go's database/sql package. For details on how to configure the size of the pool and how long connections stay in the pool see `*DB.SetMaxOpenConns`, `*DB.SetMaxIdleConns`, and `*DB.SetConnMaxLifetime` in the [database/sql documentation](https://golang.org/pkg/database/sql/). The read, write, and dial timeouts for each individual connection are configured with the DSN parameters [`readTimeout`](#readtimeout), [`writeTimeout`](#writetimeout), and [`timeout`](#timeout), respectively. - -## `ColumnType` Support -This driver supports the [`ColumnType` interface](https://golang.org/pkg/database/sql/#ColumnType) introduced in Go 1.8, with the exception of [`ColumnType.Length()`](https://golang.org/pkg/database/sql/#ColumnType.Length), which is currently not supported. - -## `context.Context` Support -Go 1.8 added `database/sql` support for `context.Context`. This driver supports query timeouts and cancellation via contexts. -See [context support in the database/sql package](https://golang.org/doc/go1.8#database_sql) for more details. - - -### `LOAD DATA LOCAL INFILE` support -For this feature you need direct access to the package. Therefore you must change the import path (no `_`): -```go -import "github.com/go-sql-driver/mysql" -``` - -Files must be whitelisted by registering them with `mysql.RegisterLocalFile(filepath)` (recommended) or the Whitelist check must be deactivated by using the DSN parameter `allowAllFiles=true` ([*Might be insecure!*](http://dev.mysql.com/doc/refman/5.7/en/load-data-local.html)). - -To use a `io.Reader` a handler function must be registered with `mysql.RegisterReaderHandler(name, handler)` which returns a `io.Reader` or `io.ReadCloser`. The Reader is available with the filepath `Reader::` then. Choose different names for different handlers and `DeregisterReaderHandler` when you don't need it anymore. - -See the [godoc of Go-MySQL-Driver](https://godoc.org/github.com/go-sql-driver/mysql "golang mysql driver documentation") for details. - - -### `time.Time` support -The default internal output type of MySQL `DATE` and `DATETIME` values is `[]byte` which allows you to scan the value into a `[]byte`, `string` or `sql.RawBytes` variable in your program. - -However, many want to scan MySQL `DATE` and `DATETIME` values into `time.Time` variables, which is the logical opposite in Go to `DATE` and `DATETIME` in MySQL. You can do that by changing the internal output type from `[]byte` to `time.Time` with the DSN parameter `parseTime=true`. You can set the default [`time.Time` location](https://golang.org/pkg/time/#Location) with the `loc` DSN parameter. - -**Caution:** As of Go 1.1, this makes `time.Time` the only variable type you can scan `DATE` and `DATETIME` values into. This breaks for example [`sql.RawBytes` support](https://github.com/go-sql-driver/mysql/wiki/Examples#rawbytes). - -Alternatively you can use the [`NullTime`](https://godoc.org/github.com/go-sql-driver/mysql#NullTime) type as the scan destination, which works with both `time.Time` and `string` / `[]byte`. - - -### Unicode support -Since version 1.1 Go-MySQL-Driver automatically uses the collation `utf8_general_ci` by default. - -Other collations / charsets can be set using the [`collation`](#collation) DSN parameter. - -Version 1.0 of the driver recommended adding `&charset=utf8` (alias for `SET NAMES utf8`) to the DSN to enable proper UTF-8 support. This is not necessary anymore. The [`collation`](#collation) parameter should be preferred to set another collation / charset than the default. - -See http://dev.mysql.com/doc/refman/5.7/en/charset-unicode.html for more details on MySQL's Unicode support. - -## Testing / Development -To run the driver tests you may need to adjust the configuration. See the [Testing Wiki-Page](https://github.com/go-sql-driver/mysql/wiki/Testing "Testing") for details. - -Go-MySQL-Driver is not feature-complete yet. Your help is very appreciated. -If you want to contribute, you can work on an [open issue](https://github.com/go-sql-driver/mysql/issues?state=open) or review a [pull request](https://github.com/go-sql-driver/mysql/pulls). - -See the [Contribution Guidelines](https://github.com/go-sql-driver/mysql/blob/master/CONTRIBUTING.md) for details. - ---------------------------------------- - -## License -Go-MySQL-Driver is licensed under the [Mozilla Public License Version 2.0](https://raw.github.com/go-sql-driver/mysql/master/LICENSE) - -Mozilla summarizes the license scope as follows: -> MPL: The copyleft applies to any files containing MPLed code. - - -That means: - * You can **use** the **unchanged** source code both in private and commercially. - * When distributing, you **must publish** the source code of any **changed files** licensed under the MPL 2.0 under a) the MPL 2.0 itself or b) a compatible license (e.g. GPL 3.0 or Apache License 2.0). - * You **needn't publish** the source code of your library as long as the files licensed under the MPL 2.0 are **unchanged**. - -Please read the [MPL 2.0 FAQ](https://www.mozilla.org/en-US/MPL/2.0/FAQ/) if you have further questions regarding the license. - -You can read the full terms here: [LICENSE](https://raw.github.com/go-sql-driver/mysql/master/LICENSE). - -![Go Gopher and MySQL Dolphin](https://raw.github.com/wiki/go-sql-driver/mysql/go-mysql-driver_m.jpg "Golang Gopher transporting the MySQL Dolphin in a wheelbarrow") - diff --git a/vendor/github.com/go-sql-driver/mysql/appengine.go b/vendor/github.com/go-sql-driver/mysql/appengine.go deleted file mode 100644 index be41f2ee6..000000000 --- a/vendor/github.com/go-sql-driver/mysql/appengine.go +++ /dev/null @@ -1,19 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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/. - -// +build appengine - -package mysql - -import ( - "google.golang.org/appengine/cloudsql" -) - -func init() { - RegisterDial("cloudsql", cloudsql.Dial) -} diff --git a/vendor/github.com/go-sql-driver/mysql/auth.go b/vendor/github.com/go-sql-driver/mysql/auth.go deleted file mode 100644 index fec7040d4..000000000 --- a/vendor/github.com/go-sql-driver/mysql/auth.go +++ /dev/null @@ -1,422 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2018 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -import ( - "crypto/rand" - "crypto/rsa" - "crypto/sha1" - "crypto/sha256" - "crypto/x509" - "encoding/pem" - "sync" -) - -// server pub keys registry -var ( - serverPubKeyLock sync.RWMutex - serverPubKeyRegistry map[string]*rsa.PublicKey -) - -// RegisterServerPubKey registers a server RSA public key which can be used to -// send data in a secure manner to the server without receiving the public key -// in a potentially insecure way from the server first. -// Registered keys can afterwards be used adding serverPubKey= to the DSN. -// -// Note: The provided rsa.PublicKey instance is exclusively owned by the driver -// after registering it and may not be modified. -// -// data, err := ioutil.ReadFile("mykey.pem") -// if err != nil { -// log.Fatal(err) -// } -// -// block, _ := pem.Decode(data) -// if block == nil || block.Type != "PUBLIC KEY" { -// log.Fatal("failed to decode PEM block containing public key") -// } -// -// pub, err := x509.ParsePKIXPublicKey(block.Bytes) -// if err != nil { -// log.Fatal(err) -// } -// -// if rsaPubKey, ok := pub.(*rsa.PublicKey); ok { -// mysql.RegisterServerPubKey("mykey", rsaPubKey) -// } else { -// log.Fatal("not a RSA public key") -// } -// -func RegisterServerPubKey(name string, pubKey *rsa.PublicKey) { - serverPubKeyLock.Lock() - if serverPubKeyRegistry == nil { - serverPubKeyRegistry = make(map[string]*rsa.PublicKey) - } - - serverPubKeyRegistry[name] = pubKey - serverPubKeyLock.Unlock() -} - -// DeregisterServerPubKey removes the public key registered with the given name. -func DeregisterServerPubKey(name string) { - serverPubKeyLock.Lock() - if serverPubKeyRegistry != nil { - delete(serverPubKeyRegistry, name) - } - serverPubKeyLock.Unlock() -} - -func getServerPubKey(name string) (pubKey *rsa.PublicKey) { - serverPubKeyLock.RLock() - if v, ok := serverPubKeyRegistry[name]; ok { - pubKey = v - } - serverPubKeyLock.RUnlock() - return -} - -// Hash password using pre 4.1 (old password) method -// https://github.com/atcurtis/mariadb/blob/master/mysys/my_rnd.c -type myRnd struct { - seed1, seed2 uint32 -} - -const myRndMaxVal = 0x3FFFFFFF - -// Pseudo random number generator -func newMyRnd(seed1, seed2 uint32) *myRnd { - return &myRnd{ - seed1: seed1 % myRndMaxVal, - seed2: seed2 % myRndMaxVal, - } -} - -// Tested to be equivalent to MariaDB's floating point variant -// http://play.golang.org/p/QHvhd4qved -// http://play.golang.org/p/RG0q4ElWDx -func (r *myRnd) NextByte() byte { - r.seed1 = (r.seed1*3 + r.seed2) % myRndMaxVal - r.seed2 = (r.seed1 + r.seed2 + 33) % myRndMaxVal - - return byte(uint64(r.seed1) * 31 / myRndMaxVal) -} - -// Generate binary hash from byte string using insecure pre 4.1 method -func pwHash(password []byte) (result [2]uint32) { - var add uint32 = 7 - var tmp uint32 - - result[0] = 1345345333 - result[1] = 0x12345671 - - for _, c := range password { - // skip spaces and tabs in password - if c == ' ' || c == '\t' { - continue - } - - tmp = uint32(c) - result[0] ^= (((result[0] & 63) + add) * tmp) + (result[0] << 8) - result[1] += (result[1] << 8) ^ result[0] - add += tmp - } - - // Remove sign bit (1<<31)-1) - result[0] &= 0x7FFFFFFF - result[1] &= 0x7FFFFFFF - - return -} - -// Hash password using insecure pre 4.1 method -func scrambleOldPassword(scramble []byte, password string) []byte { - if len(password) == 0 { - return nil - } - - scramble = scramble[:8] - - hashPw := pwHash([]byte(password)) - hashSc := pwHash(scramble) - - r := newMyRnd(hashPw[0]^hashSc[0], hashPw[1]^hashSc[1]) - - var out [8]byte - for i := range out { - out[i] = r.NextByte() + 64 - } - - mask := r.NextByte() - for i := range out { - out[i] ^= mask - } - - return out[:] -} - -// Hash password using 4.1+ method (SHA1) -func scramblePassword(scramble []byte, password string) []byte { - if len(password) == 0 { - return nil - } - - // stage1Hash = SHA1(password) - crypt := sha1.New() - crypt.Write([]byte(password)) - stage1 := crypt.Sum(nil) - - // scrambleHash = SHA1(scramble + SHA1(stage1Hash)) - // inner Hash - crypt.Reset() - crypt.Write(stage1) - hash := crypt.Sum(nil) - - // outer Hash - crypt.Reset() - crypt.Write(scramble) - crypt.Write(hash) - scramble = crypt.Sum(nil) - - // token = scrambleHash XOR stage1Hash - for i := range scramble { - scramble[i] ^= stage1[i] - } - return scramble -} - -// Hash password using MySQL 8+ method (SHA256) -func scrambleSHA256Password(scramble []byte, password string) []byte { - if len(password) == 0 { - return nil - } - - // XOR(SHA256(password), SHA256(SHA256(SHA256(password)), scramble)) - - crypt := sha256.New() - crypt.Write([]byte(password)) - message1 := crypt.Sum(nil) - - crypt.Reset() - crypt.Write(message1) - message1Hash := crypt.Sum(nil) - - crypt.Reset() - crypt.Write(message1Hash) - crypt.Write(scramble) - message2 := crypt.Sum(nil) - - for i := range message1 { - message1[i] ^= message2[i] - } - - return message1 -} - -func encryptPassword(password string, seed []byte, pub *rsa.PublicKey) ([]byte, error) { - plain := make([]byte, len(password)+1) - copy(plain, password) - for i := range plain { - j := i % len(seed) - plain[i] ^= seed[j] - } - sha1 := sha1.New() - return rsa.EncryptOAEP(sha1, rand.Reader, pub, plain, nil) -} - -func (mc *mysqlConn) sendEncryptedPassword(seed []byte, pub *rsa.PublicKey) error { - enc, err := encryptPassword(mc.cfg.Passwd, seed, pub) - if err != nil { - return err - } - return mc.writeAuthSwitchPacket(enc) -} - -func (mc *mysqlConn) auth(authData []byte, plugin string) ([]byte, error) { - switch plugin { - case "caching_sha2_password": - authResp := scrambleSHA256Password(authData, mc.cfg.Passwd) - return authResp, nil - - case "mysql_old_password": - if !mc.cfg.AllowOldPasswords { - return nil, ErrOldPassword - } - // Note: there are edge cases where this should work but doesn't; - // this is currently "wontfix": - // https://github.com/go-sql-driver/mysql/issues/184 - authResp := append(scrambleOldPassword(authData[:8], mc.cfg.Passwd), 0) - return authResp, nil - - case "mysql_clear_password": - if !mc.cfg.AllowCleartextPasswords { - return nil, ErrCleartextPassword - } - // http://dev.mysql.com/doc/refman/5.7/en/cleartext-authentication-plugin.html - // http://dev.mysql.com/doc/refman/5.7/en/pam-authentication-plugin.html - return append([]byte(mc.cfg.Passwd), 0), nil - - case "mysql_native_password": - if !mc.cfg.AllowNativePasswords { - return nil, ErrNativePassword - } - // https://dev.mysql.com/doc/internals/en/secure-password-authentication.html - // Native password authentication only need and will need 20-byte challenge. - authResp := scramblePassword(authData[:20], mc.cfg.Passwd) - return authResp, nil - - case "sha256_password": - if len(mc.cfg.Passwd) == 0 { - return []byte{0}, nil - } - if mc.cfg.tls != nil || mc.cfg.Net == "unix" { - // write cleartext auth packet - return append([]byte(mc.cfg.Passwd), 0), nil - } - - pubKey := mc.cfg.pubKey - if pubKey == nil { - // request public key from server - return []byte{1}, nil - } - - // encrypted password - enc, err := encryptPassword(mc.cfg.Passwd, authData, pubKey) - return enc, err - - default: - errLog.Print("unknown auth plugin:", plugin) - return nil, ErrUnknownPlugin - } -} - -func (mc *mysqlConn) handleAuthResult(oldAuthData []byte, plugin string) error { - // Read Result Packet - authData, newPlugin, err := mc.readAuthResult() - if err != nil { - return err - } - - // handle auth plugin switch, if requested - if newPlugin != "" { - // If CLIENT_PLUGIN_AUTH capability is not supported, no new cipher is - // sent and we have to keep using the cipher sent in the init packet. - if authData == nil { - authData = oldAuthData - } else { - // copy data from read buffer to owned slice - copy(oldAuthData, authData) - } - - plugin = newPlugin - - authResp, err := mc.auth(authData, plugin) - if err != nil { - return err - } - if err = mc.writeAuthSwitchPacket(authResp); err != nil { - return err - } - - // Read Result Packet - authData, newPlugin, err = mc.readAuthResult() - if err != nil { - return err - } - - // Do not allow to change the auth plugin more than once - if newPlugin != "" { - return ErrMalformPkt - } - } - - switch plugin { - - // https://insidemysql.com/preparing-your-community-connector-for-mysql-8-part-2-sha256/ - case "caching_sha2_password": - switch len(authData) { - case 0: - return nil // auth successful - case 1: - switch authData[0] { - case cachingSha2PasswordFastAuthSuccess: - if err = mc.readResultOK(); err == nil { - return nil // auth successful - } - - case cachingSha2PasswordPerformFullAuthentication: - if mc.cfg.tls != nil || mc.cfg.Net == "unix" { - // write cleartext auth packet - err = mc.writeAuthSwitchPacket(append([]byte(mc.cfg.Passwd), 0)) - if err != nil { - return err - } - } else { - pubKey := mc.cfg.pubKey - if pubKey == nil { - // request public key from server - data, err := mc.buf.takeSmallBuffer(4 + 1) - if err != nil { - return err - } - data[4] = cachingSha2PasswordRequestPublicKey - mc.writePacket(data) - - // parse public key - if data, err = mc.readPacket(); err != nil { - return err - } - - block, _ := pem.Decode(data[1:]) - pkix, err := x509.ParsePKIXPublicKey(block.Bytes) - if err != nil { - return err - } - pubKey = pkix.(*rsa.PublicKey) - } - - // send encrypted password - err = mc.sendEncryptedPassword(oldAuthData, pubKey) - if err != nil { - return err - } - } - return mc.readResultOK() - - default: - return ErrMalformPkt - } - default: - return ErrMalformPkt - } - - case "sha256_password": - switch len(authData) { - case 0: - return nil // auth successful - default: - block, _ := pem.Decode(authData) - pub, err := x509.ParsePKIXPublicKey(block.Bytes) - if err != nil { - return err - } - - // send encrypted password - err = mc.sendEncryptedPassword(oldAuthData, pub.(*rsa.PublicKey)) - if err != nil { - return err - } - return mc.readResultOK() - } - - default: - return nil // auth successful - } - - return err -} diff --git a/vendor/github.com/go-sql-driver/mysql/buffer.go b/vendor/github.com/go-sql-driver/mysql/buffer.go deleted file mode 100644 index 19486bd6f..000000000 --- a/vendor/github.com/go-sql-driver/mysql/buffer.go +++ /dev/null @@ -1,160 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -import ( - "io" - "net" - "time" -) - -const defaultBufSize = 4096 - -// A buffer which is used for both reading and writing. -// This is possible since communication on each connection is synchronous. -// In other words, we can't write and read simultaneously on the same connection. -// The buffer is similar to bufio.Reader / Writer but zero-copy-ish -// Also highly optimized for this particular use case. -type buffer struct { - buf []byte // buf is a byte buffer who's length and capacity are equal. - nc net.Conn - idx int - length int - timeout time.Duration -} - -// newBuffer allocates and returns a new buffer. -func newBuffer(nc net.Conn) buffer { - return buffer{ - buf: make([]byte, defaultBufSize), - nc: nc, - } -} - -// fill reads into the buffer until at least _need_ bytes are in it -func (b *buffer) fill(need int) error { - n := b.length - - // move existing data to the beginning - if n > 0 && b.idx > 0 { - copy(b.buf[0:n], b.buf[b.idx:]) - } - - // grow buffer if necessary - // TODO: let the buffer shrink again at some point - // Maybe keep the org buf slice and swap back? - if need > len(b.buf) { - // Round up to the next multiple of the default size - newBuf := make([]byte, ((need/defaultBufSize)+1)*defaultBufSize) - copy(newBuf, b.buf) - b.buf = newBuf - } - - b.idx = 0 - - for { - if b.timeout > 0 { - if err := b.nc.SetReadDeadline(time.Now().Add(b.timeout)); err != nil { - return err - } - } - - nn, err := b.nc.Read(b.buf[n:]) - n += nn - - switch err { - case nil: - if n < need { - continue - } - b.length = n - return nil - - case io.EOF: - if n >= need { - b.length = n - return nil - } - return io.ErrUnexpectedEOF - - default: - return err - } - } -} - -// returns next N bytes from buffer. -// The returned slice is only guaranteed to be valid until the next read -func (b *buffer) readNext(need int) ([]byte, error) { - if b.length < need { - // refill - if err := b.fill(need); err != nil { - return nil, err - } - } - - offset := b.idx - b.idx += need - b.length -= need - return b.buf[offset:b.idx], nil -} - -// takeBuffer returns a buffer with the requested size. -// If possible, a slice from the existing buffer is returned. -// Otherwise a bigger buffer is made. -// Only one buffer (total) can be used at a time. -func (b *buffer) takeBuffer(length int) ([]byte, error) { - if b.length > 0 { - return nil, ErrBusyBuffer - } - - // test (cheap) general case first - if length <= cap(b.buf) { - return b.buf[:length], nil - } - - if length < maxPacketSize { - b.buf = make([]byte, length) - return b.buf, nil - } - - // buffer is larger than we want to store. - return make([]byte, length), nil -} - -// takeSmallBuffer is shortcut which can be used if length is -// known to be smaller than defaultBufSize. -// Only one buffer (total) can be used at a time. -func (b *buffer) takeSmallBuffer(length int) ([]byte, error) { - if b.length > 0 { - return nil, ErrBusyBuffer - } - return b.buf[:length], nil -} - -// takeCompleteBuffer returns the complete existing buffer. -// This can be used if the necessary buffer size is unknown. -// cap and len of the returned buffer will be equal. -// Only one buffer (total) can be used at a time. -func (b *buffer) takeCompleteBuffer() ([]byte, error) { - if b.length > 0 { - return nil, ErrBusyBuffer - } - return b.buf, nil -} - -// store stores buf, an updated buffer, if its suitable to do so. -func (b *buffer) store(buf []byte) error { - if b.length > 0 { - return ErrBusyBuffer - } else if cap(buf) <= maxPacketSize && cap(buf) > cap(b.buf) { - b.buf = buf[:cap(buf)] - } - return nil -} diff --git a/vendor/github.com/go-sql-driver/mysql/collations.go b/vendor/github.com/go-sql-driver/mysql/collations.go deleted file mode 100644 index 136c9e4d1..000000000 --- a/vendor/github.com/go-sql-driver/mysql/collations.go +++ /dev/null @@ -1,251 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2014 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -const defaultCollation = "utf8_general_ci" -const binaryCollation = "binary" - -// A list of available collations mapped to the internal ID. -// To update this map use the following MySQL query: -// SELECT COLLATION_NAME, ID FROM information_schema.COLLATIONS -var collations = map[string]byte{ - "big5_chinese_ci": 1, - "latin2_czech_cs": 2, - "dec8_swedish_ci": 3, - "cp850_general_ci": 4, - "latin1_german1_ci": 5, - "hp8_english_ci": 6, - "koi8r_general_ci": 7, - "latin1_swedish_ci": 8, - "latin2_general_ci": 9, - "swe7_swedish_ci": 10, - "ascii_general_ci": 11, - "ujis_japanese_ci": 12, - "sjis_japanese_ci": 13, - "cp1251_bulgarian_ci": 14, - "latin1_danish_ci": 15, - "hebrew_general_ci": 16, - "tis620_thai_ci": 18, - "euckr_korean_ci": 19, - "latin7_estonian_cs": 20, - "latin2_hungarian_ci": 21, - "koi8u_general_ci": 22, - "cp1251_ukrainian_ci": 23, - "gb2312_chinese_ci": 24, - "greek_general_ci": 25, - "cp1250_general_ci": 26, - "latin2_croatian_ci": 27, - "gbk_chinese_ci": 28, - "cp1257_lithuanian_ci": 29, - "latin5_turkish_ci": 30, - "latin1_german2_ci": 31, - "armscii8_general_ci": 32, - "utf8_general_ci": 33, - "cp1250_czech_cs": 34, - "ucs2_general_ci": 35, - "cp866_general_ci": 36, - "keybcs2_general_ci": 37, - "macce_general_ci": 38, - "macroman_general_ci": 39, - "cp852_general_ci": 40, - "latin7_general_ci": 41, - "latin7_general_cs": 42, - "macce_bin": 43, - "cp1250_croatian_ci": 44, - "utf8mb4_general_ci": 45, - "utf8mb4_bin": 46, - "latin1_bin": 47, - "latin1_general_ci": 48, - "latin1_general_cs": 49, - "cp1251_bin": 50, - "cp1251_general_ci": 51, - "cp1251_general_cs": 52, - "macroman_bin": 53, - "utf16_general_ci": 54, - "utf16_bin": 55, - "utf16le_general_ci": 56, - "cp1256_general_ci": 57, - "cp1257_bin": 58, - "cp1257_general_ci": 59, - "utf32_general_ci": 60, - "utf32_bin": 61, - "utf16le_bin": 62, - "binary": 63, - "armscii8_bin": 64, - "ascii_bin": 65, - "cp1250_bin": 66, - "cp1256_bin": 67, - "cp866_bin": 68, - "dec8_bin": 69, - "greek_bin": 70, - "hebrew_bin": 71, - "hp8_bin": 72, - "keybcs2_bin": 73, - "koi8r_bin": 74, - "koi8u_bin": 75, - "latin2_bin": 77, - "latin5_bin": 78, - "latin7_bin": 79, - "cp850_bin": 80, - "cp852_bin": 81, - "swe7_bin": 82, - "utf8_bin": 83, - "big5_bin": 84, - "euckr_bin": 85, - "gb2312_bin": 86, - "gbk_bin": 87, - "sjis_bin": 88, - "tis620_bin": 89, - "ucs2_bin": 90, - "ujis_bin": 91, - "geostd8_general_ci": 92, - "geostd8_bin": 93, - "latin1_spanish_ci": 94, - "cp932_japanese_ci": 95, - "cp932_bin": 96, - "eucjpms_japanese_ci": 97, - "eucjpms_bin": 98, - "cp1250_polish_ci": 99, - "utf16_unicode_ci": 101, - "utf16_icelandic_ci": 102, - "utf16_latvian_ci": 103, - "utf16_romanian_ci": 104, - "utf16_slovenian_ci": 105, - "utf16_polish_ci": 106, - "utf16_estonian_ci": 107, - "utf16_spanish_ci": 108, - "utf16_swedish_ci": 109, - "utf16_turkish_ci": 110, - "utf16_czech_ci": 111, - "utf16_danish_ci": 112, - "utf16_lithuanian_ci": 113, - "utf16_slovak_ci": 114, - "utf16_spanish2_ci": 115, - "utf16_roman_ci": 116, - "utf16_persian_ci": 117, - "utf16_esperanto_ci": 118, - "utf16_hungarian_ci": 119, - "utf16_sinhala_ci": 120, - "utf16_german2_ci": 121, - "utf16_croatian_ci": 122, - "utf16_unicode_520_ci": 123, - "utf16_vietnamese_ci": 124, - "ucs2_unicode_ci": 128, - "ucs2_icelandic_ci": 129, - "ucs2_latvian_ci": 130, - "ucs2_romanian_ci": 131, - "ucs2_slovenian_ci": 132, - "ucs2_polish_ci": 133, - "ucs2_estonian_ci": 134, - "ucs2_spanish_ci": 135, - "ucs2_swedish_ci": 136, - "ucs2_turkish_ci": 137, - "ucs2_czech_ci": 138, - "ucs2_danish_ci": 139, - "ucs2_lithuanian_ci": 140, - "ucs2_slovak_ci": 141, - "ucs2_spanish2_ci": 142, - "ucs2_roman_ci": 143, - "ucs2_persian_ci": 144, - "ucs2_esperanto_ci": 145, - "ucs2_hungarian_ci": 146, - "ucs2_sinhala_ci": 147, - "ucs2_german2_ci": 148, - "ucs2_croatian_ci": 149, - "ucs2_unicode_520_ci": 150, - "ucs2_vietnamese_ci": 151, - "ucs2_general_mysql500_ci": 159, - "utf32_unicode_ci": 160, - "utf32_icelandic_ci": 161, - "utf32_latvian_ci": 162, - "utf32_romanian_ci": 163, - "utf32_slovenian_ci": 164, - "utf32_polish_ci": 165, - "utf32_estonian_ci": 166, - "utf32_spanish_ci": 167, - "utf32_swedish_ci": 168, - "utf32_turkish_ci": 169, - "utf32_czech_ci": 170, - "utf32_danish_ci": 171, - "utf32_lithuanian_ci": 172, - "utf32_slovak_ci": 173, - "utf32_spanish2_ci": 174, - "utf32_roman_ci": 175, - "utf32_persian_ci": 176, - "utf32_esperanto_ci": 177, - "utf32_hungarian_ci": 178, - "utf32_sinhala_ci": 179, - "utf32_german2_ci": 180, - "utf32_croatian_ci": 181, - "utf32_unicode_520_ci": 182, - "utf32_vietnamese_ci": 183, - "utf8_unicode_ci": 192, - "utf8_icelandic_ci": 193, - "utf8_latvian_ci": 194, - "utf8_romanian_ci": 195, - "utf8_slovenian_ci": 196, - "utf8_polish_ci": 197, - "utf8_estonian_ci": 198, - "utf8_spanish_ci": 199, - "utf8_swedish_ci": 200, - "utf8_turkish_ci": 201, - "utf8_czech_ci": 202, - "utf8_danish_ci": 203, - "utf8_lithuanian_ci": 204, - "utf8_slovak_ci": 205, - "utf8_spanish2_ci": 206, - "utf8_roman_ci": 207, - "utf8_persian_ci": 208, - "utf8_esperanto_ci": 209, - "utf8_hungarian_ci": 210, - "utf8_sinhala_ci": 211, - "utf8_german2_ci": 212, - "utf8_croatian_ci": 213, - "utf8_unicode_520_ci": 214, - "utf8_vietnamese_ci": 215, - "utf8_general_mysql500_ci": 223, - "utf8mb4_unicode_ci": 224, - "utf8mb4_icelandic_ci": 225, - "utf8mb4_latvian_ci": 226, - "utf8mb4_romanian_ci": 227, - "utf8mb4_slovenian_ci": 228, - "utf8mb4_polish_ci": 229, - "utf8mb4_estonian_ci": 230, - "utf8mb4_spanish_ci": 231, - "utf8mb4_swedish_ci": 232, - "utf8mb4_turkish_ci": 233, - "utf8mb4_czech_ci": 234, - "utf8mb4_danish_ci": 235, - "utf8mb4_lithuanian_ci": 236, - "utf8mb4_slovak_ci": 237, - "utf8mb4_spanish2_ci": 238, - "utf8mb4_roman_ci": 239, - "utf8mb4_persian_ci": 240, - "utf8mb4_esperanto_ci": 241, - "utf8mb4_hungarian_ci": 242, - "utf8mb4_sinhala_ci": 243, - "utf8mb4_german2_ci": 244, - "utf8mb4_croatian_ci": 245, - "utf8mb4_unicode_520_ci": 246, - "utf8mb4_vietnamese_ci": 247, -} - -// A blacklist of collations which is unsafe to interpolate parameters. -// These multibyte encodings may contains 0x5c (`\`) in their trailing bytes. -var unsafeCollations = map[string]bool{ - "big5_chinese_ci": true, - "sjis_japanese_ci": true, - "gbk_chinese_ci": true, - "big5_bin": true, - "gb2312_bin": true, - "gbk_bin": true, - "sjis_bin": true, - "cp932_japanese_ci": true, - "cp932_bin": true, -} diff --git a/vendor/github.com/go-sql-driver/mysql/connection.go b/vendor/github.com/go-sql-driver/mysql/connection.go deleted file mode 100644 index fc4ec7597..000000000 --- a/vendor/github.com/go-sql-driver/mysql/connection.go +++ /dev/null @@ -1,643 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -import ( - "context" - "database/sql" - "database/sql/driver" - "io" - "net" - "strconv" - "strings" - "time" -) - -type mysqlConn struct { - buf buffer - netConn net.Conn - affectedRows uint64 - insertId uint64 - cfg *Config - maxAllowedPacket int - maxWriteSize int - writeTimeout time.Duration - flags clientFlag - status statusFlag - sequence uint8 - parseTime bool - - // for context support (Go 1.8+) - watching bool - watcher chan<- context.Context - closech chan struct{} - finished chan<- struct{} - canceled atomicError // set non-nil if conn is canceled - closed atomicBool // set when conn is closed, before closech is closed -} - -// Handles parameters set in DSN after the connection is established -func (mc *mysqlConn) handleParams() (err error) { - for param, val := range mc.cfg.Params { - switch param { - // Charset - case "charset": - charsets := strings.Split(val, ",") - for i := range charsets { - // ignore errors here - a charset may not exist - err = mc.exec("SET NAMES " + charsets[i]) - if err == nil { - break - } - } - if err != nil { - return - } - - // System Vars - default: - err = mc.exec("SET " + param + "=" + val + "") - if err != nil { - return - } - } - } - - return -} - -func (mc *mysqlConn) markBadConn(err error) error { - if mc == nil { - return err - } - if err != errBadConnNoWrite { - return err - } - return driver.ErrBadConn -} - -func (mc *mysqlConn) Begin() (driver.Tx, error) { - return mc.begin(false) -} - -func (mc *mysqlConn) begin(readOnly bool) (driver.Tx, error) { - if mc.closed.IsSet() { - errLog.Print(ErrInvalidConn) - return nil, driver.ErrBadConn - } - var q string - if readOnly { - q = "START TRANSACTION READ ONLY" - } else { - q = "START TRANSACTION" - } - err := mc.exec(q) - if err == nil { - return &mysqlTx{mc}, err - } - return nil, mc.markBadConn(err) -} - -func (mc *mysqlConn) Close() (err error) { - // Makes Close idempotent - if !mc.closed.IsSet() { - err = mc.writeCommandPacket(comQuit) - } - - mc.cleanup() - - return -} - -// Closes the network connection and unsets internal variables. Do not call this -// function after successfully authentication, call Close instead. This function -// is called before auth or on auth failure because MySQL will have already -// closed the network connection. -func (mc *mysqlConn) cleanup() { - if !mc.closed.TrySet(true) { - return - } - - // Makes cleanup idempotent - close(mc.closech) - if mc.netConn == nil { - return - } - if err := mc.netConn.Close(); err != nil { - errLog.Print(err) - } -} - -func (mc *mysqlConn) error() error { - if mc.closed.IsSet() { - if err := mc.canceled.Value(); err != nil { - return err - } - return ErrInvalidConn - } - return nil -} - -func (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) { - if mc.closed.IsSet() { - errLog.Print(ErrInvalidConn) - return nil, driver.ErrBadConn - } - // Send command - err := mc.writeCommandPacketStr(comStmtPrepare, query) - if err != nil { - return nil, mc.markBadConn(err) - } - - stmt := &mysqlStmt{ - mc: mc, - } - - // Read Result - columnCount, err := stmt.readPrepareResultPacket() - if err == nil { - if stmt.paramCount > 0 { - if err = mc.readUntilEOF(); err != nil { - return nil, err - } - } - - if columnCount > 0 { - err = mc.readUntilEOF() - } - } - - return stmt, err -} - -func (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (string, error) { - // Number of ? should be same to len(args) - if strings.Count(query, "?") != len(args) { - return "", driver.ErrSkip - } - - buf, err := mc.buf.takeCompleteBuffer() - if err != nil { - // can not take the buffer. Something must be wrong with the connection - errLog.Print(err) - return "", ErrInvalidConn - } - buf = buf[:0] - argPos := 0 - - for i := 0; i < len(query); i++ { - q := strings.IndexByte(query[i:], '?') - if q == -1 { - buf = append(buf, query[i:]...) - break - } - buf = append(buf, query[i:i+q]...) - i += q - - arg := args[argPos] - argPos++ - - if arg == nil { - buf = append(buf, "NULL"...) - continue - } - - switch v := arg.(type) { - case int64: - buf = strconv.AppendInt(buf, v, 10) - case float64: - buf = strconv.AppendFloat(buf, v, 'g', -1, 64) - case bool: - if v { - buf = append(buf, '1') - } else { - buf = append(buf, '0') - } - case time.Time: - if v.IsZero() { - buf = append(buf, "'0000-00-00'"...) - } else { - v := v.In(mc.cfg.Loc) - v = v.Add(time.Nanosecond * 500) // To round under microsecond - year := v.Year() - year100 := year / 100 - year1 := year % 100 - month := v.Month() - day := v.Day() - hour := v.Hour() - minute := v.Minute() - second := v.Second() - micro := v.Nanosecond() / 1000 - - buf = append(buf, []byte{ - '\'', - digits10[year100], digits01[year100], - digits10[year1], digits01[year1], - '-', - digits10[month], digits01[month], - '-', - digits10[day], digits01[day], - ' ', - digits10[hour], digits01[hour], - ':', - digits10[minute], digits01[minute], - ':', - digits10[second], digits01[second], - }...) - - if micro != 0 { - micro10000 := micro / 10000 - micro100 := micro / 100 % 100 - micro1 := micro % 100 - buf = append(buf, []byte{ - '.', - digits10[micro10000], digits01[micro10000], - digits10[micro100], digits01[micro100], - digits10[micro1], digits01[micro1], - }...) - } - buf = append(buf, '\'') - } - case []byte: - if v == nil { - buf = append(buf, "NULL"...) - } else { - buf = append(buf, "_binary'"...) - if mc.status&statusNoBackslashEscapes == 0 { - buf = escapeBytesBackslash(buf, v) - } else { - buf = escapeBytesQuotes(buf, v) - } - buf = append(buf, '\'') - } - case string: - buf = append(buf, '\'') - if mc.status&statusNoBackslashEscapes == 0 { - buf = escapeStringBackslash(buf, v) - } else { - buf = escapeStringQuotes(buf, v) - } - buf = append(buf, '\'') - default: - return "", driver.ErrSkip - } - - if len(buf)+4 > mc.maxAllowedPacket { - return "", driver.ErrSkip - } - } - if argPos != len(args) { - return "", driver.ErrSkip - } - return string(buf), nil -} - -func (mc *mysqlConn) Exec(query string, args []driver.Value) (driver.Result, error) { - if mc.closed.IsSet() { - errLog.Print(ErrInvalidConn) - return nil, driver.ErrBadConn - } - if len(args) != 0 { - if !mc.cfg.InterpolateParams { - return nil, driver.ErrSkip - } - // try to interpolate the parameters to save extra roundtrips for preparing and closing a statement - prepared, err := mc.interpolateParams(query, args) - if err != nil { - return nil, err - } - query = prepared - } - mc.affectedRows = 0 - mc.insertId = 0 - - err := mc.exec(query) - if err == nil { - return &mysqlResult{ - affectedRows: int64(mc.affectedRows), - insertId: int64(mc.insertId), - }, err - } - return nil, mc.markBadConn(err) -} - -// Internal function to execute commands -func (mc *mysqlConn) exec(query string) error { - // Send command - if err := mc.writeCommandPacketStr(comQuery, query); err != nil { - return mc.markBadConn(err) - } - - // Read Result - resLen, err := mc.readResultSetHeaderPacket() - if err != nil { - return err - } - - if resLen > 0 { - // columns - if err := mc.readUntilEOF(); err != nil { - return err - } - - // rows - if err := mc.readUntilEOF(); err != nil { - return err - } - } - - return mc.discardResults() -} - -func (mc *mysqlConn) Query(query string, args []driver.Value) (driver.Rows, error) { - return mc.query(query, args) -} - -func (mc *mysqlConn) query(query string, args []driver.Value) (*textRows, error) { - if mc.closed.IsSet() { - errLog.Print(ErrInvalidConn) - return nil, driver.ErrBadConn - } - if len(args) != 0 { - if !mc.cfg.InterpolateParams { - return nil, driver.ErrSkip - } - // try client-side prepare to reduce roundtrip - prepared, err := mc.interpolateParams(query, args) - if err != nil { - return nil, err - } - query = prepared - } - // Send command - err := mc.writeCommandPacketStr(comQuery, query) - if err == nil { - // Read Result - var resLen int - resLen, err = mc.readResultSetHeaderPacket() - if err == nil { - rows := new(textRows) - rows.mc = mc - - if resLen == 0 { - rows.rs.done = true - - switch err := rows.NextResultSet(); err { - case nil, io.EOF: - return rows, nil - default: - return nil, err - } - } - - // Columns - rows.rs.columns, err = mc.readColumns(resLen) - return rows, err - } - } - return nil, mc.markBadConn(err) -} - -// Gets the value of the given MySQL System Variable -// The returned byte slice is only valid until the next read -func (mc *mysqlConn) getSystemVar(name string) ([]byte, error) { - // Send command - if err := mc.writeCommandPacketStr(comQuery, "SELECT @@"+name); err != nil { - return nil, err - } - - // Read Result - resLen, err := mc.readResultSetHeaderPacket() - if err == nil { - rows := new(textRows) - rows.mc = mc - rows.rs.columns = []mysqlField{{fieldType: fieldTypeVarChar}} - - if resLen > 0 { - // Columns - if err := mc.readUntilEOF(); err != nil { - return nil, err - } - } - - dest := make([]driver.Value, resLen) - if err = rows.readRow(dest); err == nil { - return dest[0].([]byte), mc.readUntilEOF() - } - } - return nil, err -} - -// finish is called when the query has canceled. -func (mc *mysqlConn) cancel(err error) { - mc.canceled.Set(err) - mc.cleanup() -} - -// finish is called when the query has succeeded. -func (mc *mysqlConn) finish() { - if !mc.watching || mc.finished == nil { - return - } - select { - case mc.finished <- struct{}{}: - mc.watching = false - case <-mc.closech: - } -} - -// Ping implements driver.Pinger interface -func (mc *mysqlConn) Ping(ctx context.Context) (err error) { - if mc.closed.IsSet() { - errLog.Print(ErrInvalidConn) - return driver.ErrBadConn - } - - if err = mc.watchCancel(ctx); err != nil { - return - } - defer mc.finish() - - if err = mc.writeCommandPacket(comPing); err != nil { - return mc.markBadConn(err) - } - - return mc.readResultOK() -} - -// BeginTx implements driver.ConnBeginTx interface -func (mc *mysqlConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) { - if err := mc.watchCancel(ctx); err != nil { - return nil, err - } - defer mc.finish() - - if sql.IsolationLevel(opts.Isolation) != sql.LevelDefault { - level, err := mapIsolationLevel(opts.Isolation) - if err != nil { - return nil, err - } - err = mc.exec("SET TRANSACTION ISOLATION LEVEL " + level) - if err != nil { - return nil, err - } - } - - return mc.begin(opts.ReadOnly) -} - -func (mc *mysqlConn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) { - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - - if err := mc.watchCancel(ctx); err != nil { - return nil, err - } - - rows, err := mc.query(query, dargs) - if err != nil { - mc.finish() - return nil, err - } - rows.finish = mc.finish - return rows, err -} - -func (mc *mysqlConn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) { - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - - if err := mc.watchCancel(ctx); err != nil { - return nil, err - } - defer mc.finish() - - return mc.Exec(query, dargs) -} - -func (mc *mysqlConn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) { - if err := mc.watchCancel(ctx); err != nil { - return nil, err - } - - stmt, err := mc.Prepare(query) - mc.finish() - if err != nil { - return nil, err - } - - select { - default: - case <-ctx.Done(): - stmt.Close() - return nil, ctx.Err() - } - return stmt, nil -} - -func (stmt *mysqlStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) { - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - - if err := stmt.mc.watchCancel(ctx); err != nil { - return nil, err - } - - rows, err := stmt.query(dargs) - if err != nil { - stmt.mc.finish() - return nil, err - } - rows.finish = stmt.mc.finish - return rows, err -} - -func (stmt *mysqlStmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) { - dargs, err := namedValueToValue(args) - if err != nil { - return nil, err - } - - if err := stmt.mc.watchCancel(ctx); err != nil { - return nil, err - } - defer stmt.mc.finish() - - return stmt.Exec(dargs) -} - -func (mc *mysqlConn) watchCancel(ctx context.Context) error { - if mc.watching { - // Reach here if canceled, - // so the connection is already invalid - mc.cleanup() - return nil - } - // When ctx is already cancelled, don't watch it. - if err := ctx.Err(); err != nil { - return err - } - // When ctx is not cancellable, don't watch it. - if ctx.Done() == nil { - return nil - } - // When watcher is not alive, can't watch it. - if mc.watcher == nil { - return nil - } - - mc.watching = true - mc.watcher <- ctx - return nil -} - -func (mc *mysqlConn) startWatcher() { - watcher := make(chan context.Context, 1) - mc.watcher = watcher - finished := make(chan struct{}) - mc.finished = finished - go func() { - for { - var ctx context.Context - select { - case ctx = <-watcher: - case <-mc.closech: - return - } - - select { - case <-ctx.Done(): - mc.cancel(ctx.Err()) - case <-finished: - case <-mc.closech: - return - } - } - }() -} - -func (mc *mysqlConn) CheckNamedValue(nv *driver.NamedValue) (err error) { - nv.Value, err = converter{}.ConvertValue(nv.Value) - return -} - -// ResetSession implements driver.SessionResetter. -// (From Go 1.10) -func (mc *mysqlConn) ResetSession(ctx context.Context) error { - if mc.closed.IsSet() { - return driver.ErrBadConn - } - return nil -} diff --git a/vendor/github.com/go-sql-driver/mysql/const.go b/vendor/github.com/go-sql-driver/mysql/const.go deleted file mode 100644 index b1e6b85ef..000000000 --- a/vendor/github.com/go-sql-driver/mysql/const.go +++ /dev/null @@ -1,174 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -const ( - defaultAuthPlugin = "mysql_native_password" - defaultMaxAllowedPacket = 4 << 20 // 4 MiB - minProtocolVersion = 10 - maxPacketSize = 1<<24 - 1 - timeFormat = "2006-01-02 15:04:05.999999" -) - -// MySQL constants documentation: -// http://dev.mysql.com/doc/internals/en/client-server-protocol.html - -const ( - iOK byte = 0x00 - iAuthMoreData byte = 0x01 - iLocalInFile byte = 0xfb - iEOF byte = 0xfe - iERR byte = 0xff -) - -// https://dev.mysql.com/doc/internals/en/capability-flags.html#packet-Protocol::CapabilityFlags -type clientFlag uint32 - -const ( - clientLongPassword clientFlag = 1 << iota - clientFoundRows - clientLongFlag - clientConnectWithDB - clientNoSchema - clientCompress - clientODBC - clientLocalFiles - clientIgnoreSpace - clientProtocol41 - clientInteractive - clientSSL - clientIgnoreSIGPIPE - clientTransactions - clientReserved - clientSecureConn - clientMultiStatements - clientMultiResults - clientPSMultiResults - clientPluginAuth - clientConnectAttrs - clientPluginAuthLenEncClientData - clientCanHandleExpiredPasswords - clientSessionTrack - clientDeprecateEOF -) - -const ( - comQuit byte = iota + 1 - comInitDB - comQuery - comFieldList - comCreateDB - comDropDB - comRefresh - comShutdown - comStatistics - comProcessInfo - comConnect - comProcessKill - comDebug - comPing - comTime - comDelayedInsert - comChangeUser - comBinlogDump - comTableDump - comConnectOut - comRegisterSlave - comStmtPrepare - comStmtExecute - comStmtSendLongData - comStmtClose - comStmtReset - comSetOption - comStmtFetch -) - -// https://dev.mysql.com/doc/internals/en/com-query-response.html#packet-Protocol::ColumnType -type fieldType byte - -const ( - fieldTypeDecimal fieldType = iota - fieldTypeTiny - fieldTypeShort - fieldTypeLong - fieldTypeFloat - fieldTypeDouble - fieldTypeNULL - fieldTypeTimestamp - fieldTypeLongLong - fieldTypeInt24 - fieldTypeDate - fieldTypeTime - fieldTypeDateTime - fieldTypeYear - fieldTypeNewDate - fieldTypeVarChar - fieldTypeBit -) -const ( - fieldTypeJSON fieldType = iota + 0xf5 - fieldTypeNewDecimal - fieldTypeEnum - fieldTypeSet - fieldTypeTinyBLOB - fieldTypeMediumBLOB - fieldTypeLongBLOB - fieldTypeBLOB - fieldTypeVarString - fieldTypeString - fieldTypeGeometry -) - -type fieldFlag uint16 - -const ( - flagNotNULL fieldFlag = 1 << iota - flagPriKey - flagUniqueKey - flagMultipleKey - flagBLOB - flagUnsigned - flagZeroFill - flagBinary - flagEnum - flagAutoIncrement - flagTimestamp - flagSet - flagUnknown1 - flagUnknown2 - flagUnknown3 - flagUnknown4 -) - -// http://dev.mysql.com/doc/internals/en/status-flags.html -type statusFlag uint16 - -const ( - statusInTrans statusFlag = 1 << iota - statusInAutocommit - statusReserved // Not in documentation - statusMoreResultsExists - statusNoGoodIndexUsed - statusNoIndexUsed - statusCursorExists - statusLastRowSent - statusDbDropped - statusNoBackslashEscapes - statusMetadataChanged - statusQueryWasSlow - statusPsOutParams - statusInTransReadonly - statusSessionStateChanged -) - -const ( - cachingSha2PasswordRequestPublicKey = 2 - cachingSha2PasswordFastAuthSuccess = 3 - cachingSha2PasswordPerformFullAuthentication = 4 -) diff --git a/vendor/github.com/go-sql-driver/mysql/driver.go b/vendor/github.com/go-sql-driver/mysql/driver.go deleted file mode 100644 index 9f4967087..000000000 --- a/vendor/github.com/go-sql-driver/mysql/driver.go +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql provides a MySQL driver for Go's database/sql package. -// -// The driver should be used via the database/sql package: -// -// import "database/sql" -// import _ "github.com/go-sql-driver/mysql" -// -// db, err := sql.Open("mysql", "user:password@/dbname") -// -// See https://github.com/go-sql-driver/mysql#usage for details -package mysql - -import ( - "database/sql" - "database/sql/driver" - "net" - "sync" -) - -// MySQLDriver is exported to make the driver directly accessible. -// In general the driver is used via the database/sql package. -type MySQLDriver struct{} - -// DialFunc is a function which can be used to establish the network connection. -// Custom dial functions must be registered with RegisterDial -type DialFunc func(addr string) (net.Conn, error) - -var ( - dialsLock sync.RWMutex - dials map[string]DialFunc -) - -// RegisterDial registers a custom dial function. It can then be used by the -// network address mynet(addr), where mynet is the registered new network. -// addr is passed as a parameter to the dial function. -func RegisterDial(net string, dial DialFunc) { - dialsLock.Lock() - defer dialsLock.Unlock() - if dials == nil { - dials = make(map[string]DialFunc) - } - dials[net] = dial -} - -// Open new Connection. -// See https://github.com/go-sql-driver/mysql#dsn-data-source-name for how -// the DSN string is formatted -func (d MySQLDriver) Open(dsn string) (driver.Conn, error) { - var err error - - // New mysqlConn - mc := &mysqlConn{ - maxAllowedPacket: maxPacketSize, - maxWriteSize: maxPacketSize - 1, - closech: make(chan struct{}), - } - mc.cfg, err = ParseDSN(dsn) - if err != nil { - return nil, err - } - mc.parseTime = mc.cfg.ParseTime - - // Connect to Server - dialsLock.RLock() - dial, ok := dials[mc.cfg.Net] - dialsLock.RUnlock() - if ok { - mc.netConn, err = dial(mc.cfg.Addr) - } else { - nd := net.Dialer{Timeout: mc.cfg.Timeout} - mc.netConn, err = nd.Dial(mc.cfg.Net, mc.cfg.Addr) - } - if err != nil { - if nerr, ok := err.(net.Error); ok && nerr.Temporary() { - errLog.Print("net.Error from Dial()': ", nerr.Error()) - return nil, driver.ErrBadConn - } - return nil, err - } - - // Enable TCP Keepalives on TCP connections - if tc, ok := mc.netConn.(*net.TCPConn); ok { - if err := tc.SetKeepAlive(true); err != nil { - // Don't send COM_QUIT before handshake. - mc.netConn.Close() - mc.netConn = nil - return nil, err - } - } - - // Call startWatcher for context support (From Go 1.8) - mc.startWatcher() - - mc.buf = newBuffer(mc.netConn) - - // Set I/O timeouts - mc.buf.timeout = mc.cfg.ReadTimeout - mc.writeTimeout = mc.cfg.WriteTimeout - - // Reading Handshake Initialization Packet - authData, plugin, err := mc.readHandshakePacket() - if err != nil { - mc.cleanup() - return nil, err - } - if plugin == "" { - plugin = defaultAuthPlugin - } - - // Send Client Authentication Packet - authResp, err := mc.auth(authData, plugin) - if err != nil { - // try the default auth plugin, if using the requested plugin failed - errLog.Print("could not use requested auth plugin '"+plugin+"': ", err.Error()) - plugin = defaultAuthPlugin - authResp, err = mc.auth(authData, plugin) - if err != nil { - mc.cleanup() - return nil, err - } - } - if err = mc.writeHandshakeResponsePacket(authResp, plugin); err != nil { - mc.cleanup() - return nil, err - } - - // Handle response to auth packet, switch methods if possible - if err = mc.handleAuthResult(authData, plugin); err != nil { - // Authentication failed and MySQL has already closed the connection - // (https://dev.mysql.com/doc/internals/en/authentication-fails.html). - // Do not send COM_QUIT, just cleanup and return the error. - mc.cleanup() - return nil, err - } - - if mc.cfg.MaxAllowedPacket > 0 { - mc.maxAllowedPacket = mc.cfg.MaxAllowedPacket - } else { - // Get max allowed packet size - maxap, err := mc.getSystemVar("max_allowed_packet") - if err != nil { - mc.Close() - return nil, err - } - mc.maxAllowedPacket = stringToInt(maxap) - 1 - } - if mc.maxAllowedPacket < maxPacketSize { - mc.maxWriteSize = mc.maxAllowedPacket - } - - // Handle DSN Params - err = mc.handleParams() - if err != nil { - mc.Close() - return nil, err - } - - return mc, nil -} - -func init() { - sql.Register("mysql", &MySQLDriver{}) -} diff --git a/vendor/github.com/go-sql-driver/mysql/dsn.go b/vendor/github.com/go-sql-driver/mysql/dsn.go deleted file mode 100644 index b9134722e..000000000 --- a/vendor/github.com/go-sql-driver/mysql/dsn.go +++ /dev/null @@ -1,611 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2016 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -import ( - "bytes" - "crypto/rsa" - "crypto/tls" - "errors" - "fmt" - "net" - "net/url" - "sort" - "strconv" - "strings" - "time" -) - -var ( - errInvalidDSNUnescaped = errors.New("invalid DSN: did you forget to escape a param value?") - errInvalidDSNAddr = errors.New("invalid DSN: network address not terminated (missing closing brace)") - errInvalidDSNNoSlash = errors.New("invalid DSN: missing the slash separating the database name") - errInvalidDSNUnsafeCollation = errors.New("invalid DSN: interpolateParams can not be used with unsafe collations") -) - -// Config is a configuration parsed from a DSN string. -// If a new Config is created instead of being parsed from a DSN string, -// the NewConfig function should be used, which sets default values. -type Config struct { - User string // Username - Passwd string // Password (requires User) - Net string // Network type - Addr string // Network address (requires Net) - DBName string // Database name - Params map[string]string // Connection parameters - Collation string // Connection collation - Loc *time.Location // Location for time.Time values - MaxAllowedPacket int // Max packet size allowed - ServerPubKey string // Server public key name - pubKey *rsa.PublicKey // Server public key - TLSConfig string // TLS configuration name - tls *tls.Config // TLS configuration - Timeout time.Duration // Dial timeout - ReadTimeout time.Duration // I/O read timeout - WriteTimeout time.Duration // I/O write timeout - - AllowAllFiles bool // Allow all files to be used with LOAD DATA LOCAL INFILE - AllowCleartextPasswords bool // Allows the cleartext client side plugin - AllowNativePasswords bool // Allows the native password authentication method - AllowOldPasswords bool // Allows the old insecure password method - ClientFoundRows bool // Return number of matching rows instead of rows changed - ColumnsWithAlias bool // Prepend table alias to column names - InterpolateParams bool // Interpolate placeholders into query string - MultiStatements bool // Allow multiple statements in one query - ParseTime bool // Parse time values to time.Time - RejectReadOnly bool // Reject read-only connections -} - -// NewConfig creates a new Config and sets default values. -func NewConfig() *Config { - return &Config{ - Collation: defaultCollation, - Loc: time.UTC, - MaxAllowedPacket: defaultMaxAllowedPacket, - AllowNativePasswords: true, - } -} - -func (cfg *Config) normalize() error { - if cfg.InterpolateParams && unsafeCollations[cfg.Collation] { - return errInvalidDSNUnsafeCollation - } - - // Set default network if empty - if cfg.Net == "" { - cfg.Net = "tcp" - } - - // Set default address if empty - if cfg.Addr == "" { - switch cfg.Net { - case "tcp": - cfg.Addr = "127.0.0.1:3306" - case "unix": - cfg.Addr = "/tmp/mysql.sock" - default: - return errors.New("default addr for network '" + cfg.Net + "' unknown") - } - - } else if cfg.Net == "tcp" { - cfg.Addr = ensureHavePort(cfg.Addr) - } - - if cfg.tls != nil { - if cfg.tls.ServerName == "" && !cfg.tls.InsecureSkipVerify { - host, _, err := net.SplitHostPort(cfg.Addr) - if err == nil { - cfg.tls.ServerName = host - } - } - } - - return nil -} - -// FormatDSN formats the given Config into a DSN string which can be passed to -// the driver. -func (cfg *Config) FormatDSN() string { - var buf bytes.Buffer - - // [username[:password]@] - if len(cfg.User) > 0 { - buf.WriteString(cfg.User) - if len(cfg.Passwd) > 0 { - buf.WriteByte(':') - buf.WriteString(cfg.Passwd) - } - buf.WriteByte('@') - } - - // [protocol[(address)]] - if len(cfg.Net) > 0 { - buf.WriteString(cfg.Net) - if len(cfg.Addr) > 0 { - buf.WriteByte('(') - buf.WriteString(cfg.Addr) - buf.WriteByte(')') - } - } - - // /dbname - buf.WriteByte('/') - buf.WriteString(cfg.DBName) - - // [?param1=value1&...¶mN=valueN] - hasParam := false - - if cfg.AllowAllFiles { - hasParam = true - buf.WriteString("?allowAllFiles=true") - } - - if cfg.AllowCleartextPasswords { - if hasParam { - buf.WriteString("&allowCleartextPasswords=true") - } else { - hasParam = true - buf.WriteString("?allowCleartextPasswords=true") - } - } - - if !cfg.AllowNativePasswords { - if hasParam { - buf.WriteString("&allowNativePasswords=false") - } else { - hasParam = true - buf.WriteString("?allowNativePasswords=false") - } - } - - if cfg.AllowOldPasswords { - if hasParam { - buf.WriteString("&allowOldPasswords=true") - } else { - hasParam = true - buf.WriteString("?allowOldPasswords=true") - } - } - - if cfg.ClientFoundRows { - if hasParam { - buf.WriteString("&clientFoundRows=true") - } else { - hasParam = true - buf.WriteString("?clientFoundRows=true") - } - } - - if col := cfg.Collation; col != defaultCollation && len(col) > 0 { - if hasParam { - buf.WriteString("&collation=") - } else { - hasParam = true - buf.WriteString("?collation=") - } - buf.WriteString(col) - } - - if cfg.ColumnsWithAlias { - if hasParam { - buf.WriteString("&columnsWithAlias=true") - } else { - hasParam = true - buf.WriteString("?columnsWithAlias=true") - } - } - - if cfg.InterpolateParams { - if hasParam { - buf.WriteString("&interpolateParams=true") - } else { - hasParam = true - buf.WriteString("?interpolateParams=true") - } - } - - if cfg.Loc != time.UTC && cfg.Loc != nil { - if hasParam { - buf.WriteString("&loc=") - } else { - hasParam = true - buf.WriteString("?loc=") - } - buf.WriteString(url.QueryEscape(cfg.Loc.String())) - } - - if cfg.MultiStatements { - if hasParam { - buf.WriteString("&multiStatements=true") - } else { - hasParam = true - buf.WriteString("?multiStatements=true") - } - } - - if cfg.ParseTime { - if hasParam { - buf.WriteString("&parseTime=true") - } else { - hasParam = true - buf.WriteString("?parseTime=true") - } - } - - if cfg.ReadTimeout > 0 { - if hasParam { - buf.WriteString("&readTimeout=") - } else { - hasParam = true - buf.WriteString("?readTimeout=") - } - buf.WriteString(cfg.ReadTimeout.String()) - } - - if cfg.RejectReadOnly { - if hasParam { - buf.WriteString("&rejectReadOnly=true") - } else { - hasParam = true - buf.WriteString("?rejectReadOnly=true") - } - } - - if len(cfg.ServerPubKey) > 0 { - if hasParam { - buf.WriteString("&serverPubKey=") - } else { - hasParam = true - buf.WriteString("?serverPubKey=") - } - buf.WriteString(url.QueryEscape(cfg.ServerPubKey)) - } - - if cfg.Timeout > 0 { - if hasParam { - buf.WriteString("&timeout=") - } else { - hasParam = true - buf.WriteString("?timeout=") - } - buf.WriteString(cfg.Timeout.String()) - } - - if len(cfg.TLSConfig) > 0 { - if hasParam { - buf.WriteString("&tls=") - } else { - hasParam = true - buf.WriteString("?tls=") - } - buf.WriteString(url.QueryEscape(cfg.TLSConfig)) - } - - if cfg.WriteTimeout > 0 { - if hasParam { - buf.WriteString("&writeTimeout=") - } else { - hasParam = true - buf.WriteString("?writeTimeout=") - } - buf.WriteString(cfg.WriteTimeout.String()) - } - - if cfg.MaxAllowedPacket != defaultMaxAllowedPacket { - if hasParam { - buf.WriteString("&maxAllowedPacket=") - } else { - hasParam = true - buf.WriteString("?maxAllowedPacket=") - } - buf.WriteString(strconv.Itoa(cfg.MaxAllowedPacket)) - - } - - // other params - if cfg.Params != nil { - var params []string - for param := range cfg.Params { - params = append(params, param) - } - sort.Strings(params) - for _, param := range params { - if hasParam { - buf.WriteByte('&') - } else { - hasParam = true - buf.WriteByte('?') - } - - buf.WriteString(param) - buf.WriteByte('=') - buf.WriteString(url.QueryEscape(cfg.Params[param])) - } - } - - return buf.String() -} - -// ParseDSN parses the DSN string to a Config -func ParseDSN(dsn string) (cfg *Config, err error) { - // New config with some default values - cfg = NewConfig() - - // [user[:password]@][net[(addr)]]/dbname[?param1=value1¶mN=valueN] - // Find the last '/' (since the password or the net addr might contain a '/') - foundSlash := false - for i := len(dsn) - 1; i >= 0; i-- { - if dsn[i] == '/' { - foundSlash = true - var j, k int - - // left part is empty if i <= 0 - if i > 0 { - // [username[:password]@][protocol[(address)]] - // Find the last '@' in dsn[:i] - for j = i; j >= 0; j-- { - if dsn[j] == '@' { - // username[:password] - // Find the first ':' in dsn[:j] - for k = 0; k < j; k++ { - if dsn[k] == ':' { - cfg.Passwd = dsn[k+1 : j] - break - } - } - cfg.User = dsn[:k] - - break - } - } - - // [protocol[(address)]] - // Find the first '(' in dsn[j+1:i] - for k = j + 1; k < i; k++ { - if dsn[k] == '(' { - // dsn[i-1] must be == ')' if an address is specified - if dsn[i-1] != ')' { - if strings.ContainsRune(dsn[k+1:i], ')') { - return nil, errInvalidDSNUnescaped - } - return nil, errInvalidDSNAddr - } - cfg.Addr = dsn[k+1 : i-1] - break - } - } - cfg.Net = dsn[j+1 : k] - } - - // dbname[?param1=value1&...¶mN=valueN] - // Find the first '?' in dsn[i+1:] - for j = i + 1; j < len(dsn); j++ { - if dsn[j] == '?' { - if err = parseDSNParams(cfg, dsn[j+1:]); err != nil { - return - } - break - } - } - cfg.DBName = dsn[i+1 : j] - - break - } - } - - if !foundSlash && len(dsn) > 0 { - return nil, errInvalidDSNNoSlash - } - - if err = cfg.normalize(); err != nil { - return nil, err - } - return -} - -// parseDSNParams parses the DSN "query string" -// Values must be url.QueryEscape'ed -func parseDSNParams(cfg *Config, params string) (err error) { - for _, v := range strings.Split(params, "&") { - param := strings.SplitN(v, "=", 2) - if len(param) != 2 { - continue - } - - // cfg params - switch value := param[1]; param[0] { - // Disable INFILE whitelist / enable all files - case "allowAllFiles": - var isBool bool - cfg.AllowAllFiles, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Use cleartext authentication mode (MySQL 5.5.10+) - case "allowCleartextPasswords": - var isBool bool - cfg.AllowCleartextPasswords, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Use native password authentication - case "allowNativePasswords": - var isBool bool - cfg.AllowNativePasswords, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Use old authentication mode (pre MySQL 4.1) - case "allowOldPasswords": - var isBool bool - cfg.AllowOldPasswords, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Switch "rowsAffected" mode - case "clientFoundRows": - var isBool bool - cfg.ClientFoundRows, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Collation - case "collation": - cfg.Collation = value - break - - case "columnsWithAlias": - var isBool bool - cfg.ColumnsWithAlias, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Compression - case "compress": - return errors.New("compression not implemented yet") - - // Enable client side placeholder substitution - case "interpolateParams": - var isBool bool - cfg.InterpolateParams, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Time Location - case "loc": - if value, err = url.QueryUnescape(value); err != nil { - return - } - cfg.Loc, err = time.LoadLocation(value) - if err != nil { - return - } - - // multiple statements in one query - case "multiStatements": - var isBool bool - cfg.MultiStatements, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // time.Time parsing - case "parseTime": - var isBool bool - cfg.ParseTime, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // I/O read Timeout - case "readTimeout": - cfg.ReadTimeout, err = time.ParseDuration(value) - if err != nil { - return - } - - // Reject read-only connections - case "rejectReadOnly": - var isBool bool - cfg.RejectReadOnly, isBool = readBool(value) - if !isBool { - return errors.New("invalid bool value: " + value) - } - - // Server public key - case "serverPubKey": - name, err := url.QueryUnescape(value) - if err != nil { - return fmt.Errorf("invalid value for server pub key name: %v", err) - } - - if pubKey := getServerPubKey(name); pubKey != nil { - cfg.ServerPubKey = name - cfg.pubKey = pubKey - } else { - return errors.New("invalid value / unknown server pub key name: " + name) - } - - // Strict mode - case "strict": - panic("strict mode has been removed. See https://github.com/go-sql-driver/mysql/wiki/strict-mode") - - // Dial Timeout - case "timeout": - cfg.Timeout, err = time.ParseDuration(value) - if err != nil { - return - } - - // TLS-Encryption - case "tls": - boolValue, isBool := readBool(value) - if isBool { - if boolValue { - cfg.TLSConfig = "true" - cfg.tls = &tls.Config{} - } else { - cfg.TLSConfig = "false" - } - } else if vl := strings.ToLower(value); vl == "skip-verify" || vl == "preferred" { - cfg.TLSConfig = vl - cfg.tls = &tls.Config{InsecureSkipVerify: true} - } else { - name, err := url.QueryUnescape(value) - if err != nil { - return fmt.Errorf("invalid value for TLS config name: %v", err) - } - - if tlsConfig := getTLSConfigClone(name); tlsConfig != nil { - cfg.TLSConfig = name - cfg.tls = tlsConfig - } else { - return errors.New("invalid value / unknown config name: " + name) - } - } - - // I/O write Timeout - case "writeTimeout": - cfg.WriteTimeout, err = time.ParseDuration(value) - if err != nil { - return - } - case "maxAllowedPacket": - cfg.MaxAllowedPacket, err = strconv.Atoi(value) - if err != nil { - return - } - default: - // lazy init - if cfg.Params == nil { - cfg.Params = make(map[string]string) - } - - if cfg.Params[param[0]], err = url.QueryUnescape(value); err != nil { - return - } - } - } - - return -} - -func ensureHavePort(addr string) string { - if _, _, err := net.SplitHostPort(addr); err != nil { - return net.JoinHostPort(addr, "3306") - } - return addr -} diff --git a/vendor/github.com/go-sql-driver/mysql/errors.go b/vendor/github.com/go-sql-driver/mysql/errors.go deleted file mode 100644 index 760782ff2..000000000 --- a/vendor/github.com/go-sql-driver/mysql/errors.go +++ /dev/null @@ -1,65 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -import ( - "errors" - "fmt" - "log" - "os" -) - -// Various errors the driver might return. Can change between driver versions. -var ( - ErrInvalidConn = errors.New("invalid connection") - ErrMalformPkt = errors.New("malformed packet") - ErrNoTLS = errors.New("TLS requested but server does not support TLS") - ErrCleartextPassword = errors.New("this user requires clear text authentication. If you still want to use it, please add 'allowCleartextPasswords=1' to your DSN") - ErrNativePassword = errors.New("this user requires mysql native password authentication.") - ErrOldPassword = errors.New("this user requires old password authentication. If you still want to use it, please add 'allowOldPasswords=1' to your DSN. See also https://github.com/go-sql-driver/mysql/wiki/old_passwords") - ErrUnknownPlugin = errors.New("this authentication plugin is not supported") - ErrOldProtocol = errors.New("MySQL server does not support required protocol 41+") - ErrPktSync = errors.New("commands out of sync. You can't run this command now") - ErrPktSyncMul = errors.New("commands out of sync. Did you run multiple statements at once?") - ErrPktTooLarge = errors.New("packet for query is too large. Try adjusting the 'max_allowed_packet' variable on the server") - ErrBusyBuffer = errors.New("busy buffer") - - // errBadConnNoWrite is used for connection errors where nothing was sent to the database yet. - // If this happens first in a function starting a database interaction, it should be replaced by driver.ErrBadConn - // to trigger a resend. - // See https://github.com/go-sql-driver/mysql/pull/302 - errBadConnNoWrite = errors.New("bad connection") -) - -var errLog = Logger(log.New(os.Stderr, "[mysql] ", log.Ldate|log.Ltime|log.Lshortfile)) - -// Logger is used to log critical error messages. -type Logger interface { - Print(v ...interface{}) -} - -// SetLogger is used to set the logger for critical errors. -// The initial logger is os.Stderr. -func SetLogger(logger Logger) error { - if logger == nil { - return errors.New("logger is nil") - } - errLog = logger - return nil -} - -// MySQLError is an error type which represents a single MySQL error -type MySQLError struct { - Number uint16 - Message string -} - -func (me *MySQLError) Error() string { - return fmt.Sprintf("Error %d: %s", me.Number, me.Message) -} diff --git a/vendor/github.com/go-sql-driver/mysql/fields.go b/vendor/github.com/go-sql-driver/mysql/fields.go deleted file mode 100644 index e1e2ece4b..000000000 --- a/vendor/github.com/go-sql-driver/mysql/fields.go +++ /dev/null @@ -1,194 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2017 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -import ( - "database/sql" - "reflect" -) - -func (mf *mysqlField) typeDatabaseName() string { - switch mf.fieldType { - case fieldTypeBit: - return "BIT" - case fieldTypeBLOB: - if mf.charSet != collations[binaryCollation] { - return "TEXT" - } - return "BLOB" - case fieldTypeDate: - return "DATE" - case fieldTypeDateTime: - return "DATETIME" - case fieldTypeDecimal: - return "DECIMAL" - case fieldTypeDouble: - return "DOUBLE" - case fieldTypeEnum: - return "ENUM" - case fieldTypeFloat: - return "FLOAT" - case fieldTypeGeometry: - return "GEOMETRY" - case fieldTypeInt24: - return "MEDIUMINT" - case fieldTypeJSON: - return "JSON" - case fieldTypeLong: - return "INT" - case fieldTypeLongBLOB: - if mf.charSet != collations[binaryCollation] { - return "LONGTEXT" - } - return "LONGBLOB" - case fieldTypeLongLong: - return "BIGINT" - case fieldTypeMediumBLOB: - if mf.charSet != collations[binaryCollation] { - return "MEDIUMTEXT" - } - return "MEDIUMBLOB" - case fieldTypeNewDate: - return "DATE" - case fieldTypeNewDecimal: - return "DECIMAL" - case fieldTypeNULL: - return "NULL" - case fieldTypeSet: - return "SET" - case fieldTypeShort: - return "SMALLINT" - case fieldTypeString: - if mf.charSet == collations[binaryCollation] { - return "BINARY" - } - return "CHAR" - case fieldTypeTime: - return "TIME" - case fieldTypeTimestamp: - return "TIMESTAMP" - case fieldTypeTiny: - return "TINYINT" - case fieldTypeTinyBLOB: - if mf.charSet != collations[binaryCollation] { - return "TINYTEXT" - } - return "TINYBLOB" - case fieldTypeVarChar: - if mf.charSet == collations[binaryCollation] { - return "VARBINARY" - } - return "VARCHAR" - case fieldTypeVarString: - if mf.charSet == collations[binaryCollation] { - return "VARBINARY" - } - return "VARCHAR" - case fieldTypeYear: - return "YEAR" - default: - return "" - } -} - -var ( - scanTypeFloat32 = reflect.TypeOf(float32(0)) - scanTypeFloat64 = reflect.TypeOf(float64(0)) - scanTypeInt8 = reflect.TypeOf(int8(0)) - scanTypeInt16 = reflect.TypeOf(int16(0)) - scanTypeInt32 = reflect.TypeOf(int32(0)) - scanTypeInt64 = reflect.TypeOf(int64(0)) - scanTypeNullFloat = reflect.TypeOf(sql.NullFloat64{}) - scanTypeNullInt = reflect.TypeOf(sql.NullInt64{}) - scanTypeNullTime = reflect.TypeOf(NullTime{}) - scanTypeUint8 = reflect.TypeOf(uint8(0)) - scanTypeUint16 = reflect.TypeOf(uint16(0)) - scanTypeUint32 = reflect.TypeOf(uint32(0)) - scanTypeUint64 = reflect.TypeOf(uint64(0)) - scanTypeRawBytes = reflect.TypeOf(sql.RawBytes{}) - scanTypeUnknown = reflect.TypeOf(new(interface{})) -) - -type mysqlField struct { - tableName string - name string - length uint32 - flags fieldFlag - fieldType fieldType - decimals byte - charSet uint8 -} - -func (mf *mysqlField) scanType() reflect.Type { - switch mf.fieldType { - case fieldTypeTiny: - if mf.flags&flagNotNULL != 0 { - if mf.flags&flagUnsigned != 0 { - return scanTypeUint8 - } - return scanTypeInt8 - } - return scanTypeNullInt - - case fieldTypeShort, fieldTypeYear: - if mf.flags&flagNotNULL != 0 { - if mf.flags&flagUnsigned != 0 { - return scanTypeUint16 - } - return scanTypeInt16 - } - return scanTypeNullInt - - case fieldTypeInt24, fieldTypeLong: - if mf.flags&flagNotNULL != 0 { - if mf.flags&flagUnsigned != 0 { - return scanTypeUint32 - } - return scanTypeInt32 - } - return scanTypeNullInt - - case fieldTypeLongLong: - if mf.flags&flagNotNULL != 0 { - if mf.flags&flagUnsigned != 0 { - return scanTypeUint64 - } - return scanTypeInt64 - } - return scanTypeNullInt - - case fieldTypeFloat: - if mf.flags&flagNotNULL != 0 { - return scanTypeFloat32 - } - return scanTypeNullFloat - - case fieldTypeDouble: - if mf.flags&flagNotNULL != 0 { - return scanTypeFloat64 - } - return scanTypeNullFloat - - case fieldTypeDecimal, fieldTypeNewDecimal, fieldTypeVarChar, - fieldTypeBit, fieldTypeEnum, fieldTypeSet, fieldTypeTinyBLOB, - fieldTypeMediumBLOB, fieldTypeLongBLOB, fieldTypeBLOB, - fieldTypeVarString, fieldTypeString, fieldTypeGeometry, fieldTypeJSON, - fieldTypeTime: - return scanTypeRawBytes - - case fieldTypeDate, fieldTypeNewDate, - fieldTypeTimestamp, fieldTypeDateTime: - // NullTime is always returned for more consistent behavior as it can - // handle both cases of parseTime regardless if the field is nullable. - return scanTypeNullTime - - default: - return scanTypeUnknown - } -} diff --git a/vendor/github.com/go-sql-driver/mysql/infile.go b/vendor/github.com/go-sql-driver/mysql/infile.go deleted file mode 100644 index 273cb0ba5..000000000 --- a/vendor/github.com/go-sql-driver/mysql/infile.go +++ /dev/null @@ -1,182 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -import ( - "fmt" - "io" - "os" - "strings" - "sync" -) - -var ( - fileRegister map[string]bool - fileRegisterLock sync.RWMutex - readerRegister map[string]func() io.Reader - readerRegisterLock sync.RWMutex -) - -// RegisterLocalFile adds the given file to the file whitelist, -// so that it can be used by "LOAD DATA LOCAL INFILE ". -// Alternatively you can allow the use of all local files with -// the DSN parameter 'allowAllFiles=true' -// -// filePath := "/home/gopher/data.csv" -// mysql.RegisterLocalFile(filePath) -// err := db.Exec("LOAD DATA LOCAL INFILE '" + filePath + "' INTO TABLE foo") -// if err != nil { -// ... -// -func RegisterLocalFile(filePath string) { - fileRegisterLock.Lock() - // lazy map init - if fileRegister == nil { - fileRegister = make(map[string]bool) - } - - fileRegister[strings.Trim(filePath, `"`)] = true - fileRegisterLock.Unlock() -} - -// DeregisterLocalFile removes the given filepath from the whitelist. -func DeregisterLocalFile(filePath string) { - fileRegisterLock.Lock() - delete(fileRegister, strings.Trim(filePath, `"`)) - fileRegisterLock.Unlock() -} - -// RegisterReaderHandler registers a handler function which is used -// to receive a io.Reader. -// The Reader can be used by "LOAD DATA LOCAL INFILE Reader::". -// If the handler returns a io.ReadCloser Close() is called when the -// request is finished. -// -// mysql.RegisterReaderHandler("data", func() io.Reader { -// var csvReader io.Reader // Some Reader that returns CSV data -// ... // Open Reader here -// return csvReader -// }) -// err := db.Exec("LOAD DATA LOCAL INFILE 'Reader::data' INTO TABLE foo") -// if err != nil { -// ... -// -func RegisterReaderHandler(name string, handler func() io.Reader) { - readerRegisterLock.Lock() - // lazy map init - if readerRegister == nil { - readerRegister = make(map[string]func() io.Reader) - } - - readerRegister[name] = handler - readerRegisterLock.Unlock() -} - -// DeregisterReaderHandler removes the ReaderHandler function with -// the given name from the registry. -func DeregisterReaderHandler(name string) { - readerRegisterLock.Lock() - delete(readerRegister, name) - readerRegisterLock.Unlock() -} - -func deferredClose(err *error, closer io.Closer) { - closeErr := closer.Close() - if *err == nil { - *err = closeErr - } -} - -func (mc *mysqlConn) handleInFileRequest(name string) (err error) { - var rdr io.Reader - var data []byte - packetSize := 16 * 1024 // 16KB is small enough for disk readahead and large enough for TCP - if mc.maxWriteSize < packetSize { - packetSize = mc.maxWriteSize - } - - if idx := strings.Index(name, "Reader::"); idx == 0 || (idx > 0 && name[idx-1] == '/') { // io.Reader - // The server might return an an absolute path. See issue #355. - name = name[idx+8:] - - readerRegisterLock.RLock() - handler, inMap := readerRegister[name] - readerRegisterLock.RUnlock() - - if inMap { - rdr = handler() - if rdr != nil { - if cl, ok := rdr.(io.Closer); ok { - defer deferredClose(&err, cl) - } - } else { - err = fmt.Errorf("Reader '%s' is ", name) - } - } else { - err = fmt.Errorf("Reader '%s' is not registered", name) - } - } else { // File - name = strings.Trim(name, `"`) - fileRegisterLock.RLock() - fr := fileRegister[name] - fileRegisterLock.RUnlock() - if mc.cfg.AllowAllFiles || fr { - var file *os.File - var fi os.FileInfo - - if file, err = os.Open(name); err == nil { - defer deferredClose(&err, file) - - // get file size - if fi, err = file.Stat(); err == nil { - rdr = file - if fileSize := int(fi.Size()); fileSize < packetSize { - packetSize = fileSize - } - } - } - } else { - err = fmt.Errorf("local file '%s' is not registered", name) - } - } - - // send content packets - // if packetSize == 0, the Reader contains no data - if err == nil && packetSize > 0 { - data := make([]byte, 4+packetSize) - var n int - for err == nil { - n, err = rdr.Read(data[4:]) - if n > 0 { - if ioErr := mc.writePacket(data[:4+n]); ioErr != nil { - return ioErr - } - } - } - if err == io.EOF { - err = nil - } - } - - // send empty packet (termination) - if data == nil { - data = make([]byte, 4) - } - if ioErr := mc.writePacket(data[:4]); ioErr != nil { - return ioErr - } - - // read OK packet - if err == nil { - return mc.readResultOK() - } - - mc.readPacket() - return err -} diff --git a/vendor/github.com/go-sql-driver/mysql/packets.go b/vendor/github.com/go-sql-driver/mysql/packets.go deleted file mode 100644 index 5e0853767..000000000 --- a/vendor/github.com/go-sql-driver/mysql/packets.go +++ /dev/null @@ -1,1296 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -import ( - "bytes" - "crypto/tls" - "database/sql/driver" - "encoding/binary" - "errors" - "fmt" - "io" - "math" - "time" -) - -// Packets documentation: -// http://dev.mysql.com/doc/internals/en/client-server-protocol.html - -// Read packet to buffer 'data' -func (mc *mysqlConn) readPacket() ([]byte, error) { - var prevData []byte - for { - // read packet header - data, err := mc.buf.readNext(4) - if err != nil { - if cerr := mc.canceled.Value(); cerr != nil { - return nil, cerr - } - errLog.Print(err) - mc.Close() - return nil, ErrInvalidConn - } - - // packet length [24 bit] - pktLen := int(uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16) - - // check packet sync [8 bit] - if data[3] != mc.sequence { - if data[3] > mc.sequence { - return nil, ErrPktSyncMul - } - return nil, ErrPktSync - } - mc.sequence++ - - // packets with length 0 terminate a previous packet which is a - // multiple of (2^24)-1 bytes long - if pktLen == 0 { - // there was no previous packet - if prevData == nil { - errLog.Print(ErrMalformPkt) - mc.Close() - return nil, ErrInvalidConn - } - - return prevData, nil - } - - // read packet body [pktLen bytes] - data, err = mc.buf.readNext(pktLen) - if err != nil { - if cerr := mc.canceled.Value(); cerr != nil { - return nil, cerr - } - errLog.Print(err) - mc.Close() - return nil, ErrInvalidConn - } - - // return data if this was the last packet - if pktLen < maxPacketSize { - // zero allocations for non-split packets - if prevData == nil { - return data, nil - } - - return append(prevData, data...), nil - } - - prevData = append(prevData, data...) - } -} - -// Write packet buffer 'data' -func (mc *mysqlConn) writePacket(data []byte) error { - pktLen := len(data) - 4 - - if pktLen > mc.maxAllowedPacket { - return ErrPktTooLarge - } - - for { - var size int - if pktLen >= maxPacketSize { - data[0] = 0xff - data[1] = 0xff - data[2] = 0xff - size = maxPacketSize - } else { - data[0] = byte(pktLen) - data[1] = byte(pktLen >> 8) - data[2] = byte(pktLen >> 16) - size = pktLen - } - data[3] = mc.sequence - - // Write packet - if mc.writeTimeout > 0 { - if err := mc.netConn.SetWriteDeadline(time.Now().Add(mc.writeTimeout)); err != nil { - return err - } - } - - n, err := mc.netConn.Write(data[:4+size]) - if err == nil && n == 4+size { - mc.sequence++ - if size != maxPacketSize { - return nil - } - pktLen -= size - data = data[size:] - continue - } - - // Handle error - if err == nil { // n != len(data) - mc.cleanup() - errLog.Print(ErrMalformPkt) - } else { - if cerr := mc.canceled.Value(); cerr != nil { - return cerr - } - if n == 0 && pktLen == len(data)-4 { - // only for the first loop iteration when nothing was written yet - return errBadConnNoWrite - } - mc.cleanup() - errLog.Print(err) - } - return ErrInvalidConn - } -} - -/****************************************************************************** -* Initialization Process * -******************************************************************************/ - -// Handshake Initialization Packet -// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::Handshake -func (mc *mysqlConn) readHandshakePacket() (data []byte, plugin string, err error) { - data, err = mc.readPacket() - if err != nil { - // for init we can rewrite this to ErrBadConn for sql.Driver to retry, since - // in connection initialization we don't risk retrying non-idempotent actions. - if err == ErrInvalidConn { - return nil, "", driver.ErrBadConn - } - return - } - - if data[0] == iERR { - return nil, "", mc.handleErrorPacket(data) - } - - // protocol version [1 byte] - if data[0] < minProtocolVersion { - return nil, "", fmt.Errorf( - "unsupported protocol version %d. Version %d or higher is required", - data[0], - minProtocolVersion, - ) - } - - // server version [null terminated string] - // connection id [4 bytes] - pos := 1 + bytes.IndexByte(data[1:], 0x00) + 1 + 4 - - // first part of the password cipher [8 bytes] - authData := data[pos : pos+8] - - // (filler) always 0x00 [1 byte] - pos += 8 + 1 - - // capability flags (lower 2 bytes) [2 bytes] - mc.flags = clientFlag(binary.LittleEndian.Uint16(data[pos : pos+2])) - if mc.flags&clientProtocol41 == 0 { - return nil, "", ErrOldProtocol - } - if mc.flags&clientSSL == 0 && mc.cfg.tls != nil { - if mc.cfg.TLSConfig == "preferred" { - mc.cfg.tls = nil - } else { - return nil, "", ErrNoTLS - } - } - pos += 2 - - if len(data) > pos { - // character set [1 byte] - // status flags [2 bytes] - // capability flags (upper 2 bytes) [2 bytes] - // length of auth-plugin-data [1 byte] - // reserved (all [00]) [10 bytes] - pos += 1 + 2 + 2 + 1 + 10 - - // second part of the password cipher [mininum 13 bytes], - // where len=MAX(13, length of auth-plugin-data - 8) - // - // The web documentation is ambiguous about the length. However, - // according to mysql-5.7/sql/auth/sql_authentication.cc line 538, - // the 13th byte is "\0 byte, terminating the second part of - // a scramble". So the second part of the password cipher is - // a NULL terminated string that's at least 13 bytes with the - // last byte being NULL. - // - // The official Python library uses the fixed length 12 - // which seems to work but technically could have a hidden bug. - authData = append(authData, data[pos:pos+12]...) - pos += 13 - - // EOF if version (>= 5.5.7 and < 5.5.10) or (>= 5.6.0 and < 5.6.2) - // \NUL otherwise - if end := bytes.IndexByte(data[pos:], 0x00); end != -1 { - plugin = string(data[pos : pos+end]) - } else { - plugin = string(data[pos:]) - } - - // make a memory safe copy of the cipher slice - var b [20]byte - copy(b[:], authData) - return b[:], plugin, nil - } - - // make a memory safe copy of the cipher slice - var b [8]byte - copy(b[:], authData) - return b[:], plugin, nil -} - -// Client Authentication Packet -// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::HandshakeResponse -func (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string) error { - // Adjust client flags based on server support - clientFlags := clientProtocol41 | - clientSecureConn | - clientLongPassword | - clientTransactions | - clientLocalFiles | - clientPluginAuth | - clientMultiResults | - mc.flags&clientLongFlag - - if mc.cfg.ClientFoundRows { - clientFlags |= clientFoundRows - } - - // To enable TLS / SSL - if mc.cfg.tls != nil { - clientFlags |= clientSSL - } - - if mc.cfg.MultiStatements { - clientFlags |= clientMultiStatements - } - - // encode length of the auth plugin data - var authRespLEIBuf [9]byte - authRespLen := len(authResp) - authRespLEI := appendLengthEncodedInteger(authRespLEIBuf[:0], uint64(authRespLen)) - if len(authRespLEI) > 1 { - // if the length can not be written in 1 byte, it must be written as a - // length encoded integer - clientFlags |= clientPluginAuthLenEncClientData - } - - pktLen := 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 + len(authRespLEI) + len(authResp) + 21 + 1 - - // To specify a db name - if n := len(mc.cfg.DBName); n > 0 { - clientFlags |= clientConnectWithDB - pktLen += n + 1 - } - - // Calculate packet length and get buffer with that size - data, err := mc.buf.takeSmallBuffer(pktLen + 4) - if err != nil { - // cannot take the buffer. Something must be wrong with the connection - errLog.Print(err) - return errBadConnNoWrite - } - - // ClientFlags [32 bit] - data[4] = byte(clientFlags) - data[5] = byte(clientFlags >> 8) - data[6] = byte(clientFlags >> 16) - data[7] = byte(clientFlags >> 24) - - // MaxPacketSize [32 bit] (none) - data[8] = 0x00 - data[9] = 0x00 - data[10] = 0x00 - data[11] = 0x00 - - // Charset [1 byte] - var found bool - data[12], found = collations[mc.cfg.Collation] - if !found { - // Note possibility for false negatives: - // could be triggered although the collation is valid if the - // collations map does not contain entries the server supports. - return errors.New("unknown collation") - } - - // SSL Connection Request Packet - // http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::SSLRequest - if mc.cfg.tls != nil { - // Send TLS / SSL request packet - if err := mc.writePacket(data[:(4+4+1+23)+4]); err != nil { - return err - } - - // Switch to TLS - tlsConn := tls.Client(mc.netConn, mc.cfg.tls) - if err := tlsConn.Handshake(); err != nil { - return err - } - mc.netConn = tlsConn - mc.buf.nc = tlsConn - } - - // Filler [23 bytes] (all 0x00) - pos := 13 - for ; pos < 13+23; pos++ { - data[pos] = 0 - } - - // User [null terminated string] - if len(mc.cfg.User) > 0 { - pos += copy(data[pos:], mc.cfg.User) - } - data[pos] = 0x00 - pos++ - - // Auth Data [length encoded integer] - pos += copy(data[pos:], authRespLEI) - pos += copy(data[pos:], authResp) - - // Databasename [null terminated string] - if len(mc.cfg.DBName) > 0 { - pos += copy(data[pos:], mc.cfg.DBName) - data[pos] = 0x00 - pos++ - } - - pos += copy(data[pos:], plugin) - data[pos] = 0x00 - pos++ - - // Send Auth packet - return mc.writePacket(data[:pos]) -} - -// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse -func (mc *mysqlConn) writeAuthSwitchPacket(authData []byte) error { - pktLen := 4 + len(authData) - data, err := mc.buf.takeSmallBuffer(pktLen) - if err != nil { - // cannot take the buffer. Something must be wrong with the connection - errLog.Print(err) - return errBadConnNoWrite - } - - // Add the auth data [EOF] - copy(data[4:], authData) - return mc.writePacket(data) -} - -/****************************************************************************** -* Command Packets * -******************************************************************************/ - -func (mc *mysqlConn) writeCommandPacket(command byte) error { - // Reset Packet Sequence - mc.sequence = 0 - - data, err := mc.buf.takeSmallBuffer(4 + 1) - if err != nil { - // cannot take the buffer. Something must be wrong with the connection - errLog.Print(err) - return errBadConnNoWrite - } - - // Add command byte - data[4] = command - - // Send CMD packet - return mc.writePacket(data) -} - -func (mc *mysqlConn) writeCommandPacketStr(command byte, arg string) error { - // Reset Packet Sequence - mc.sequence = 0 - - pktLen := 1 + len(arg) - data, err := mc.buf.takeBuffer(pktLen + 4) - if err != nil { - // cannot take the buffer. Something must be wrong with the connection - errLog.Print(err) - return errBadConnNoWrite - } - - // Add command byte - data[4] = command - - // Add arg - copy(data[5:], arg) - - // Send CMD packet - return mc.writePacket(data) -} - -func (mc *mysqlConn) writeCommandPacketUint32(command byte, arg uint32) error { - // Reset Packet Sequence - mc.sequence = 0 - - data, err := mc.buf.takeSmallBuffer(4 + 1 + 4) - if err != nil { - // cannot take the buffer. Something must be wrong with the connection - errLog.Print(err) - return errBadConnNoWrite - } - - // Add command byte - data[4] = command - - // Add arg [32 bit] - data[5] = byte(arg) - data[6] = byte(arg >> 8) - data[7] = byte(arg >> 16) - data[8] = byte(arg >> 24) - - // Send CMD packet - return mc.writePacket(data) -} - -/****************************************************************************** -* Result Packets * -******************************************************************************/ - -func (mc *mysqlConn) readAuthResult() ([]byte, string, error) { - data, err := mc.readPacket() - if err != nil { - return nil, "", err - } - - // packet indicator - switch data[0] { - - case iOK: - return nil, "", mc.handleOkPacket(data) - - case iAuthMoreData: - return data[1:], "", err - - case iEOF: - if len(data) == 1 { - // https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::OldAuthSwitchRequest - return nil, "mysql_old_password", nil - } - pluginEndIndex := bytes.IndexByte(data, 0x00) - if pluginEndIndex < 0 { - return nil, "", ErrMalformPkt - } - plugin := string(data[1:pluginEndIndex]) - authData := data[pluginEndIndex+1:] - return authData, plugin, nil - - default: // Error otherwise - return nil, "", mc.handleErrorPacket(data) - } -} - -// Returns error if Packet is not an 'Result OK'-Packet -func (mc *mysqlConn) readResultOK() error { - data, err := mc.readPacket() - if err != nil { - return err - } - - if data[0] == iOK { - return mc.handleOkPacket(data) - } - return mc.handleErrorPacket(data) -} - -// Result Set Header Packet -// http://dev.mysql.com/doc/internals/en/com-query-response.html#packet-ProtocolText::Resultset -func (mc *mysqlConn) readResultSetHeaderPacket() (int, error) { - data, err := mc.readPacket() - if err == nil { - switch data[0] { - - case iOK: - return 0, mc.handleOkPacket(data) - - case iERR: - return 0, mc.handleErrorPacket(data) - - case iLocalInFile: - return 0, mc.handleInFileRequest(string(data[1:])) - } - - // column count - num, _, n := readLengthEncodedInteger(data) - if n-len(data) == 0 { - return int(num), nil - } - - return 0, ErrMalformPkt - } - return 0, err -} - -// Error Packet -// http://dev.mysql.com/doc/internals/en/generic-response-packets.html#packet-ERR_Packet -func (mc *mysqlConn) handleErrorPacket(data []byte) error { - if data[0] != iERR { - return ErrMalformPkt - } - - // 0xff [1 byte] - - // Error Number [16 bit uint] - errno := binary.LittleEndian.Uint16(data[1:3]) - - // 1792: ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION - // 1290: ER_OPTION_PREVENTS_STATEMENT (returned by Aurora during failover) - if (errno == 1792 || errno == 1290) && mc.cfg.RejectReadOnly { - // Oops; we are connected to a read-only connection, and won't be able - // to issue any write statements. Since RejectReadOnly is configured, - // we throw away this connection hoping this one would have write - // permission. This is specifically for a possible race condition - // during failover (e.g. on AWS Aurora). See README.md for more. - // - // We explicitly close the connection before returning - // driver.ErrBadConn to ensure that `database/sql` purges this - // connection and initiates a new one for next statement next time. - mc.Close() - return driver.ErrBadConn - } - - pos := 3 - - // SQL State [optional: # + 5bytes string] - if data[3] == 0x23 { - //sqlstate := string(data[4 : 4+5]) - pos = 9 - } - - // Error Message [string] - return &MySQLError{ - Number: errno, - Message: string(data[pos:]), - } -} - -func readStatus(b []byte) statusFlag { - return statusFlag(b[0]) | statusFlag(b[1])<<8 -} - -// Ok Packet -// http://dev.mysql.com/doc/internals/en/generic-response-packets.html#packet-OK_Packet -func (mc *mysqlConn) handleOkPacket(data []byte) error { - var n, m int - - // 0x00 [1 byte] - - // Affected rows [Length Coded Binary] - mc.affectedRows, _, n = readLengthEncodedInteger(data[1:]) - - // Insert id [Length Coded Binary] - mc.insertId, _, m = readLengthEncodedInteger(data[1+n:]) - - // server_status [2 bytes] - mc.status = readStatus(data[1+n+m : 1+n+m+2]) - if mc.status&statusMoreResultsExists != 0 { - return nil - } - - // warning count [2 bytes] - - return nil -} - -// Read Packets as Field Packets until EOF-Packet or an Error appears -// http://dev.mysql.com/doc/internals/en/com-query-response.html#packet-Protocol::ColumnDefinition41 -func (mc *mysqlConn) readColumns(count int) ([]mysqlField, error) { - columns := make([]mysqlField, count) - - for i := 0; ; i++ { - data, err := mc.readPacket() - if err != nil { - return nil, err - } - - // EOF Packet - if data[0] == iEOF && (len(data) == 5 || len(data) == 1) { - if i == count { - return columns, nil - } - return nil, fmt.Errorf("column count mismatch n:%d len:%d", count, len(columns)) - } - - // Catalog - pos, err := skipLengthEncodedString(data) - if err != nil { - return nil, err - } - - // Database [len coded string] - n, err := skipLengthEncodedString(data[pos:]) - if err != nil { - return nil, err - } - pos += n - - // Table [len coded string] - if mc.cfg.ColumnsWithAlias { - tableName, _, n, err := readLengthEncodedString(data[pos:]) - if err != nil { - return nil, err - } - pos += n - columns[i].tableName = string(tableName) - } else { - n, err = skipLengthEncodedString(data[pos:]) - if err != nil { - return nil, err - } - pos += n - } - - // Original table [len coded string] - n, err = skipLengthEncodedString(data[pos:]) - if err != nil { - return nil, err - } - pos += n - - // Name [len coded string] - name, _, n, err := readLengthEncodedString(data[pos:]) - if err != nil { - return nil, err - } - columns[i].name = string(name) - pos += n - - // Original name [len coded string] - n, err = skipLengthEncodedString(data[pos:]) - if err != nil { - return nil, err - } - pos += n - - // Filler [uint8] - pos++ - - // Charset [charset, collation uint8] - columns[i].charSet = data[pos] - pos += 2 - - // Length [uint32] - columns[i].length = binary.LittleEndian.Uint32(data[pos : pos+4]) - pos += 4 - - // Field type [uint8] - columns[i].fieldType = fieldType(data[pos]) - pos++ - - // Flags [uint16] - columns[i].flags = fieldFlag(binary.LittleEndian.Uint16(data[pos : pos+2])) - pos += 2 - - // Decimals [uint8] - columns[i].decimals = data[pos] - //pos++ - - // Default value [len coded binary] - //if pos < len(data) { - // defaultVal, _, err = bytesToLengthCodedBinary(data[pos:]) - //} - } -} - -// Read Packets as Field Packets until EOF-Packet or an Error appears -// http://dev.mysql.com/doc/internals/en/com-query-response.html#packet-ProtocolText::ResultsetRow -func (rows *textRows) readRow(dest []driver.Value) error { - mc := rows.mc - - if rows.rs.done { - return io.EOF - } - - data, err := mc.readPacket() - if err != nil { - return err - } - - // EOF Packet - if data[0] == iEOF && len(data) == 5 { - // server_status [2 bytes] - rows.mc.status = readStatus(data[3:]) - rows.rs.done = true - if !rows.HasNextResultSet() { - rows.mc = nil - } - return io.EOF - } - if data[0] == iERR { - rows.mc = nil - return mc.handleErrorPacket(data) - } - - // RowSet Packet - var n int - var isNull bool - pos := 0 - - for i := range dest { - // Read bytes and convert to string - dest[i], isNull, n, err = readLengthEncodedString(data[pos:]) - pos += n - if err == nil { - if !isNull { - if !mc.parseTime { - continue - } else { - switch rows.rs.columns[i].fieldType { - case fieldTypeTimestamp, fieldTypeDateTime, - fieldTypeDate, fieldTypeNewDate: - dest[i], err = parseDateTime( - string(dest[i].([]byte)), - mc.cfg.Loc, - ) - if err == nil { - continue - } - default: - continue - } - } - - } else { - dest[i] = nil - continue - } - } - return err // err != nil - } - - return nil -} - -// Reads Packets until EOF-Packet or an Error appears. Returns count of Packets read -func (mc *mysqlConn) readUntilEOF() error { - for { - data, err := mc.readPacket() - if err != nil { - return err - } - - switch data[0] { - case iERR: - return mc.handleErrorPacket(data) - case iEOF: - if len(data) == 5 { - mc.status = readStatus(data[3:]) - } - return nil - } - } -} - -/****************************************************************************** -* Prepared Statements * -******************************************************************************/ - -// Prepare Result Packets -// http://dev.mysql.com/doc/internals/en/com-stmt-prepare-response.html -func (stmt *mysqlStmt) readPrepareResultPacket() (uint16, error) { - data, err := stmt.mc.readPacket() - if err == nil { - // packet indicator [1 byte] - if data[0] != iOK { - return 0, stmt.mc.handleErrorPacket(data) - } - - // statement id [4 bytes] - stmt.id = binary.LittleEndian.Uint32(data[1:5]) - - // Column count [16 bit uint] - columnCount := binary.LittleEndian.Uint16(data[5:7]) - - // Param count [16 bit uint] - stmt.paramCount = int(binary.LittleEndian.Uint16(data[7:9])) - - // Reserved [8 bit] - - // Warning count [16 bit uint] - - return columnCount, nil - } - return 0, err -} - -// http://dev.mysql.com/doc/internals/en/com-stmt-send-long-data.html -func (stmt *mysqlStmt) writeCommandLongData(paramID int, arg []byte) error { - maxLen := stmt.mc.maxAllowedPacket - 1 - pktLen := maxLen - - // After the header (bytes 0-3) follows before the data: - // 1 byte command - // 4 bytes stmtID - // 2 bytes paramID - const dataOffset = 1 + 4 + 2 - - // Cannot use the write buffer since - // a) the buffer is too small - // b) it is in use - data := make([]byte, 4+1+4+2+len(arg)) - - copy(data[4+dataOffset:], arg) - - for argLen := len(arg); argLen > 0; argLen -= pktLen - dataOffset { - if dataOffset+argLen < maxLen { - pktLen = dataOffset + argLen - } - - stmt.mc.sequence = 0 - // Add command byte [1 byte] - data[4] = comStmtSendLongData - - // Add stmtID [32 bit] - data[5] = byte(stmt.id) - data[6] = byte(stmt.id >> 8) - data[7] = byte(stmt.id >> 16) - data[8] = byte(stmt.id >> 24) - - // Add paramID [16 bit] - data[9] = byte(paramID) - data[10] = byte(paramID >> 8) - - // Send CMD packet - err := stmt.mc.writePacket(data[:4+pktLen]) - if err == nil { - data = data[pktLen-dataOffset:] - continue - } - return err - - } - - // Reset Packet Sequence - stmt.mc.sequence = 0 - return nil -} - -// Execute Prepared Statement -// http://dev.mysql.com/doc/internals/en/com-stmt-execute.html -func (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error { - if len(args) != stmt.paramCount { - return fmt.Errorf( - "argument count mismatch (got: %d; has: %d)", - len(args), - stmt.paramCount, - ) - } - - const minPktLen = 4 + 1 + 4 + 1 + 4 - mc := stmt.mc - - // Determine threshold dynamically to avoid packet size shortage. - longDataSize := mc.maxAllowedPacket / (stmt.paramCount + 1) - if longDataSize < 64 { - longDataSize = 64 - } - - // Reset packet-sequence - mc.sequence = 0 - - var data []byte - var err error - - if len(args) == 0 { - data, err = mc.buf.takeBuffer(minPktLen) - } else { - data, err = mc.buf.takeCompleteBuffer() - // In this case the len(data) == cap(data) which is used to optimise the flow below. - } - if err != nil { - // cannot take the buffer. Something must be wrong with the connection - errLog.Print(err) - return errBadConnNoWrite - } - - // command [1 byte] - data[4] = comStmtExecute - - // statement_id [4 bytes] - data[5] = byte(stmt.id) - data[6] = byte(stmt.id >> 8) - data[7] = byte(stmt.id >> 16) - data[8] = byte(stmt.id >> 24) - - // flags (0: CURSOR_TYPE_NO_CURSOR) [1 byte] - data[9] = 0x00 - - // iteration_count (uint32(1)) [4 bytes] - data[10] = 0x01 - data[11] = 0x00 - data[12] = 0x00 - data[13] = 0x00 - - if len(args) > 0 { - pos := minPktLen - - var nullMask []byte - if maskLen, typesLen := (len(args)+7)/8, 1+2*len(args); pos+maskLen+typesLen >= cap(data) { - // buffer has to be extended but we don't know by how much so - // we depend on append after all data with known sizes fit. - // We stop at that because we deal with a lot of columns here - // which makes the required allocation size hard to guess. - tmp := make([]byte, pos+maskLen+typesLen) - copy(tmp[:pos], data[:pos]) - data = tmp - nullMask = data[pos : pos+maskLen] - // No need to clean nullMask as make ensures that. - pos += maskLen - } else { - nullMask = data[pos : pos+maskLen] - for i := range nullMask { - nullMask[i] = 0 - } - pos += maskLen - } - - // newParameterBoundFlag 1 [1 byte] - data[pos] = 0x01 - pos++ - - // type of each parameter [len(args)*2 bytes] - paramTypes := data[pos:] - pos += len(args) * 2 - - // value of each parameter [n bytes] - paramValues := data[pos:pos] - valuesCap := cap(paramValues) - - for i, arg := range args { - // build NULL-bitmap - if arg == nil { - nullMask[i/8] |= 1 << (uint(i) & 7) - paramTypes[i+i] = byte(fieldTypeNULL) - paramTypes[i+i+1] = 0x00 - continue - } - - // cache types and values - switch v := arg.(type) { - case int64: - paramTypes[i+i] = byte(fieldTypeLongLong) - paramTypes[i+i+1] = 0x00 - - if cap(paramValues)-len(paramValues)-8 >= 0 { - paramValues = paramValues[:len(paramValues)+8] - binary.LittleEndian.PutUint64( - paramValues[len(paramValues)-8:], - uint64(v), - ) - } else { - paramValues = append(paramValues, - uint64ToBytes(uint64(v))..., - ) - } - - case float64: - paramTypes[i+i] = byte(fieldTypeDouble) - paramTypes[i+i+1] = 0x00 - - if cap(paramValues)-len(paramValues)-8 >= 0 { - paramValues = paramValues[:len(paramValues)+8] - binary.LittleEndian.PutUint64( - paramValues[len(paramValues)-8:], - math.Float64bits(v), - ) - } else { - paramValues = append(paramValues, - uint64ToBytes(math.Float64bits(v))..., - ) - } - - case bool: - paramTypes[i+i] = byte(fieldTypeTiny) - paramTypes[i+i+1] = 0x00 - - if v { - paramValues = append(paramValues, 0x01) - } else { - paramValues = append(paramValues, 0x00) - } - - case []byte: - // Common case (non-nil value) first - if v != nil { - paramTypes[i+i] = byte(fieldTypeString) - paramTypes[i+i+1] = 0x00 - - if len(v) < longDataSize { - paramValues = appendLengthEncodedInteger(paramValues, - uint64(len(v)), - ) - paramValues = append(paramValues, v...) - } else { - if err := stmt.writeCommandLongData(i, v); err != nil { - return err - } - } - continue - } - - // Handle []byte(nil) as a NULL value - nullMask[i/8] |= 1 << (uint(i) & 7) - paramTypes[i+i] = byte(fieldTypeNULL) - paramTypes[i+i+1] = 0x00 - - case string: - paramTypes[i+i] = byte(fieldTypeString) - paramTypes[i+i+1] = 0x00 - - if len(v) < longDataSize { - paramValues = appendLengthEncodedInteger(paramValues, - uint64(len(v)), - ) - paramValues = append(paramValues, v...) - } else { - if err := stmt.writeCommandLongData(i, []byte(v)); err != nil { - return err - } - } - - case time.Time: - paramTypes[i+i] = byte(fieldTypeString) - paramTypes[i+i+1] = 0x00 - - var a [64]byte - var b = a[:0] - - if v.IsZero() { - b = append(b, "0000-00-00"...) - } else { - b = v.In(mc.cfg.Loc).AppendFormat(b, timeFormat) - } - - paramValues = appendLengthEncodedInteger(paramValues, - uint64(len(b)), - ) - paramValues = append(paramValues, b...) - - default: - return fmt.Errorf("cannot convert type: %T", arg) - } - } - - // Check if param values exceeded the available buffer - // In that case we must build the data packet with the new values buffer - if valuesCap != cap(paramValues) { - data = append(data[:pos], paramValues...) - if err = mc.buf.store(data); err != nil { - errLog.Print(err) - return errBadConnNoWrite - } - } - - pos += len(paramValues) - data = data[:pos] - } - - return mc.writePacket(data) -} - -func (mc *mysqlConn) discardResults() error { - for mc.status&statusMoreResultsExists != 0 { - resLen, err := mc.readResultSetHeaderPacket() - if err != nil { - return err - } - if resLen > 0 { - // columns - if err := mc.readUntilEOF(); err != nil { - return err - } - // rows - if err := mc.readUntilEOF(); err != nil { - return err - } - } - } - return nil -} - -// http://dev.mysql.com/doc/internals/en/binary-protocol-resultset-row.html -func (rows *binaryRows) readRow(dest []driver.Value) error { - data, err := rows.mc.readPacket() - if err != nil { - return err - } - - // packet indicator [1 byte] - if data[0] != iOK { - // EOF Packet - if data[0] == iEOF && len(data) == 5 { - rows.mc.status = readStatus(data[3:]) - rows.rs.done = true - if !rows.HasNextResultSet() { - rows.mc = nil - } - return io.EOF - } - mc := rows.mc - rows.mc = nil - - // Error otherwise - return mc.handleErrorPacket(data) - } - - // NULL-bitmap, [(column-count + 7 + 2) / 8 bytes] - pos := 1 + (len(dest)+7+2)>>3 - nullMask := data[1:pos] - - for i := range dest { - // Field is NULL - // (byte >> bit-pos) % 2 == 1 - if ((nullMask[(i+2)>>3] >> uint((i+2)&7)) & 1) == 1 { - dest[i] = nil - continue - } - - // Convert to byte-coded string - switch rows.rs.columns[i].fieldType { - case fieldTypeNULL: - dest[i] = nil - continue - - // Numeric Types - case fieldTypeTiny: - if rows.rs.columns[i].flags&flagUnsigned != 0 { - dest[i] = int64(data[pos]) - } else { - dest[i] = int64(int8(data[pos])) - } - pos++ - continue - - case fieldTypeShort, fieldTypeYear: - if rows.rs.columns[i].flags&flagUnsigned != 0 { - dest[i] = int64(binary.LittleEndian.Uint16(data[pos : pos+2])) - } else { - dest[i] = int64(int16(binary.LittleEndian.Uint16(data[pos : pos+2]))) - } - pos += 2 - continue - - case fieldTypeInt24, fieldTypeLong: - if rows.rs.columns[i].flags&flagUnsigned != 0 { - dest[i] = int64(binary.LittleEndian.Uint32(data[pos : pos+4])) - } else { - dest[i] = int64(int32(binary.LittleEndian.Uint32(data[pos : pos+4]))) - } - pos += 4 - continue - - case fieldTypeLongLong: - if rows.rs.columns[i].flags&flagUnsigned != 0 { - val := binary.LittleEndian.Uint64(data[pos : pos+8]) - if val > math.MaxInt64 { - dest[i] = uint64ToString(val) - } else { - dest[i] = int64(val) - } - } else { - dest[i] = int64(binary.LittleEndian.Uint64(data[pos : pos+8])) - } - pos += 8 - continue - - case fieldTypeFloat: - dest[i] = math.Float32frombits(binary.LittleEndian.Uint32(data[pos : pos+4])) - pos += 4 - continue - - case fieldTypeDouble: - dest[i] = math.Float64frombits(binary.LittleEndian.Uint64(data[pos : pos+8])) - pos += 8 - continue - - // Length coded Binary Strings - case fieldTypeDecimal, fieldTypeNewDecimal, fieldTypeVarChar, - fieldTypeBit, fieldTypeEnum, fieldTypeSet, fieldTypeTinyBLOB, - fieldTypeMediumBLOB, fieldTypeLongBLOB, fieldTypeBLOB, - fieldTypeVarString, fieldTypeString, fieldTypeGeometry, fieldTypeJSON: - var isNull bool - var n int - dest[i], isNull, n, err = readLengthEncodedString(data[pos:]) - pos += n - if err == nil { - if !isNull { - continue - } else { - dest[i] = nil - continue - } - } - return err - - case - fieldTypeDate, fieldTypeNewDate, // Date YYYY-MM-DD - fieldTypeTime, // Time [-][H]HH:MM:SS[.fractal] - fieldTypeTimestamp, fieldTypeDateTime: // Timestamp YYYY-MM-DD HH:MM:SS[.fractal] - - num, isNull, n := readLengthEncodedInteger(data[pos:]) - pos += n - - switch { - case isNull: - dest[i] = nil - continue - case rows.rs.columns[i].fieldType == fieldTypeTime: - // database/sql does not support an equivalent to TIME, return a string - var dstlen uint8 - switch decimals := rows.rs.columns[i].decimals; decimals { - case 0x00, 0x1f: - dstlen = 8 - case 1, 2, 3, 4, 5, 6: - dstlen = 8 + 1 + decimals - default: - return fmt.Errorf( - "protocol error, illegal decimals value %d", - rows.rs.columns[i].decimals, - ) - } - dest[i], err = formatBinaryTime(data[pos:pos+int(num)], dstlen) - case rows.mc.parseTime: - dest[i], err = parseBinaryDateTime(num, data[pos:], rows.mc.cfg.Loc) - default: - var dstlen uint8 - if rows.rs.columns[i].fieldType == fieldTypeDate { - dstlen = 10 - } else { - switch decimals := rows.rs.columns[i].decimals; decimals { - case 0x00, 0x1f: - dstlen = 19 - case 1, 2, 3, 4, 5, 6: - dstlen = 19 + 1 + decimals - default: - return fmt.Errorf( - "protocol error, illegal decimals value %d", - rows.rs.columns[i].decimals, - ) - } - } - dest[i], err = formatBinaryDateTime(data[pos:pos+int(num)], dstlen) - } - - if err == nil { - pos += int(num) - continue - } else { - return err - } - - // Please report if this happens! - default: - return fmt.Errorf("unknown field type %d", rows.rs.columns[i].fieldType) - } - } - - return nil -} diff --git a/vendor/github.com/go-sql-driver/mysql/result.go b/vendor/github.com/go-sql-driver/mysql/result.go deleted file mode 100644 index c6438d034..000000000 --- a/vendor/github.com/go-sql-driver/mysql/result.go +++ /dev/null @@ -1,22 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -type mysqlResult struct { - affectedRows int64 - insertId int64 -} - -func (res *mysqlResult) LastInsertId() (int64, error) { - return res.insertId, nil -} - -func (res *mysqlResult) RowsAffected() (int64, error) { - return res.affectedRows, nil -} diff --git a/vendor/github.com/go-sql-driver/mysql/rows.go b/vendor/github.com/go-sql-driver/mysql/rows.go deleted file mode 100644 index d3b1e2822..000000000 --- a/vendor/github.com/go-sql-driver/mysql/rows.go +++ /dev/null @@ -1,216 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -import ( - "database/sql/driver" - "io" - "math" - "reflect" -) - -type resultSet struct { - columns []mysqlField - columnNames []string - done bool -} - -type mysqlRows struct { - mc *mysqlConn - rs resultSet - finish func() -} - -type binaryRows struct { - mysqlRows -} - -type textRows struct { - mysqlRows -} - -func (rows *mysqlRows) Columns() []string { - if rows.rs.columnNames != nil { - return rows.rs.columnNames - } - - columns := make([]string, len(rows.rs.columns)) - if rows.mc != nil && rows.mc.cfg.ColumnsWithAlias { - for i := range columns { - if tableName := rows.rs.columns[i].tableName; len(tableName) > 0 { - columns[i] = tableName + "." + rows.rs.columns[i].name - } else { - columns[i] = rows.rs.columns[i].name - } - } - } else { - for i := range columns { - columns[i] = rows.rs.columns[i].name - } - } - - rows.rs.columnNames = columns - return columns -} - -func (rows *mysqlRows) ColumnTypeDatabaseTypeName(i int) string { - return rows.rs.columns[i].typeDatabaseName() -} - -// func (rows *mysqlRows) ColumnTypeLength(i int) (length int64, ok bool) { -// return int64(rows.rs.columns[i].length), true -// } - -func (rows *mysqlRows) ColumnTypeNullable(i int) (nullable, ok bool) { - return rows.rs.columns[i].flags&flagNotNULL == 0, true -} - -func (rows *mysqlRows) ColumnTypePrecisionScale(i int) (int64, int64, bool) { - column := rows.rs.columns[i] - decimals := int64(column.decimals) - - switch column.fieldType { - case fieldTypeDecimal, fieldTypeNewDecimal: - if decimals > 0 { - return int64(column.length) - 2, decimals, true - } - return int64(column.length) - 1, decimals, true - case fieldTypeTimestamp, fieldTypeDateTime, fieldTypeTime: - return decimals, decimals, true - case fieldTypeFloat, fieldTypeDouble: - if decimals == 0x1f { - return math.MaxInt64, math.MaxInt64, true - } - return math.MaxInt64, decimals, true - } - - return 0, 0, false -} - -func (rows *mysqlRows) ColumnTypeScanType(i int) reflect.Type { - return rows.rs.columns[i].scanType() -} - -func (rows *mysqlRows) Close() (err error) { - if f := rows.finish; f != nil { - f() - rows.finish = nil - } - - mc := rows.mc - if mc == nil { - return nil - } - if err := mc.error(); err != nil { - return err - } - - // Remove unread packets from stream - if !rows.rs.done { - err = mc.readUntilEOF() - } - if err == nil { - if err = mc.discardResults(); err != nil { - return err - } - } - - rows.mc = nil - return err -} - -func (rows *mysqlRows) HasNextResultSet() (b bool) { - if rows.mc == nil { - return false - } - return rows.mc.status&statusMoreResultsExists != 0 -} - -func (rows *mysqlRows) nextResultSet() (int, error) { - if rows.mc == nil { - return 0, io.EOF - } - if err := rows.mc.error(); err != nil { - return 0, err - } - - // Remove unread packets from stream - if !rows.rs.done { - if err := rows.mc.readUntilEOF(); err != nil { - return 0, err - } - rows.rs.done = true - } - - if !rows.HasNextResultSet() { - rows.mc = nil - return 0, io.EOF - } - rows.rs = resultSet{} - return rows.mc.readResultSetHeaderPacket() -} - -func (rows *mysqlRows) nextNotEmptyResultSet() (int, error) { - for { - resLen, err := rows.nextResultSet() - if err != nil { - return 0, err - } - - if resLen > 0 { - return resLen, nil - } - - rows.rs.done = true - } -} - -func (rows *binaryRows) NextResultSet() error { - resLen, err := rows.nextNotEmptyResultSet() - if err != nil { - return err - } - - rows.rs.columns, err = rows.mc.readColumns(resLen) - return err -} - -func (rows *binaryRows) Next(dest []driver.Value) error { - if mc := rows.mc; mc != nil { - if err := mc.error(); err != nil { - return err - } - - // Fetch next row from stream - return rows.readRow(dest) - } - return io.EOF -} - -func (rows *textRows) NextResultSet() (err error) { - resLen, err := rows.nextNotEmptyResultSet() - if err != nil { - return err - } - - rows.rs.columns, err = rows.mc.readColumns(resLen) - return err -} - -func (rows *textRows) Next(dest []driver.Value) error { - if mc := rows.mc; mc != nil { - if err := mc.error(); err != nil { - return err - } - - // Fetch next row from stream - return rows.readRow(dest) - } - return io.EOF -} diff --git a/vendor/github.com/go-sql-driver/mysql/statement.go b/vendor/github.com/go-sql-driver/mysql/statement.go deleted file mode 100644 index ce7fe4cd0..000000000 --- a/vendor/github.com/go-sql-driver/mysql/statement.go +++ /dev/null @@ -1,211 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -import ( - "database/sql/driver" - "fmt" - "io" - "reflect" - "strconv" -) - -type mysqlStmt struct { - mc *mysqlConn - id uint32 - paramCount int -} - -func (stmt *mysqlStmt) Close() error { - if stmt.mc == nil || stmt.mc.closed.IsSet() { - // driver.Stmt.Close can be called more than once, thus this function - // has to be idempotent. - // See also Issue #450 and golang/go#16019. - //errLog.Print(ErrInvalidConn) - return driver.ErrBadConn - } - - err := stmt.mc.writeCommandPacketUint32(comStmtClose, stmt.id) - stmt.mc = nil - return err -} - -func (stmt *mysqlStmt) NumInput() int { - return stmt.paramCount -} - -func (stmt *mysqlStmt) ColumnConverter(idx int) driver.ValueConverter { - return converter{} -} - -func (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) { - if stmt.mc.closed.IsSet() { - errLog.Print(ErrInvalidConn) - return nil, driver.ErrBadConn - } - // Send command - err := stmt.writeExecutePacket(args) - if err != nil { - return nil, stmt.mc.markBadConn(err) - } - - mc := stmt.mc - - mc.affectedRows = 0 - mc.insertId = 0 - - // Read Result - resLen, err := mc.readResultSetHeaderPacket() - if err != nil { - return nil, err - } - - if resLen > 0 { - // Columns - if err = mc.readUntilEOF(); err != nil { - return nil, err - } - - // Rows - if err := mc.readUntilEOF(); err != nil { - return nil, err - } - } - - if err := mc.discardResults(); err != nil { - return nil, err - } - - return &mysqlResult{ - affectedRows: int64(mc.affectedRows), - insertId: int64(mc.insertId), - }, nil -} - -func (stmt *mysqlStmt) Query(args []driver.Value) (driver.Rows, error) { - return stmt.query(args) -} - -func (stmt *mysqlStmt) query(args []driver.Value) (*binaryRows, error) { - if stmt.mc.closed.IsSet() { - errLog.Print(ErrInvalidConn) - return nil, driver.ErrBadConn - } - // Send command - err := stmt.writeExecutePacket(args) - if err != nil { - return nil, stmt.mc.markBadConn(err) - } - - mc := stmt.mc - - // Read Result - resLen, err := mc.readResultSetHeaderPacket() - if err != nil { - return nil, err - } - - rows := new(binaryRows) - - if resLen > 0 { - rows.mc = mc - rows.rs.columns, err = mc.readColumns(resLen) - } else { - rows.rs.done = true - - switch err := rows.NextResultSet(); err { - case nil, io.EOF: - return rows, nil - default: - return nil, err - } - } - - return rows, err -} - -type converter struct{} - -// ConvertValue mirrors the reference/default converter in database/sql/driver -// with _one_ exception. We support uint64 with their high bit and the default -// implementation does not. This function should be kept in sync with -// database/sql/driver defaultConverter.ConvertValue() except for that -// deliberate difference. -func (c converter) ConvertValue(v interface{}) (driver.Value, error) { - if driver.IsValue(v) { - return v, nil - } - - if vr, ok := v.(driver.Valuer); ok { - sv, err := callValuerValue(vr) - if err != nil { - return nil, err - } - if !driver.IsValue(sv) { - return nil, fmt.Errorf("non-Value type %T returned from Value", sv) - } - return sv, nil - } - - rv := reflect.ValueOf(v) - switch rv.Kind() { - case reflect.Ptr: - // indirect pointers - if rv.IsNil() { - return nil, nil - } else { - return c.ConvertValue(rv.Elem().Interface()) - } - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return rv.Int(), nil - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32: - return int64(rv.Uint()), nil - case reflect.Uint64: - u64 := rv.Uint() - if u64 >= 1<<63 { - return strconv.FormatUint(u64, 10), nil - } - return int64(u64), nil - case reflect.Float32, reflect.Float64: - return rv.Float(), nil - case reflect.Bool: - return rv.Bool(), nil - case reflect.Slice: - ek := rv.Type().Elem().Kind() - if ek == reflect.Uint8 { - return rv.Bytes(), nil - } - return nil, fmt.Errorf("unsupported type %T, a slice of %s", v, ek) - case reflect.String: - return rv.String(), nil - } - return nil, fmt.Errorf("unsupported type %T, a %s", v, rv.Kind()) -} - -var valuerReflectType = reflect.TypeOf((*driver.Valuer)(nil)).Elem() - -// callValuerValue returns vr.Value(), with one exception: -// If vr.Value is an auto-generated method on a pointer type and the -// pointer is nil, it would panic at runtime in the panicwrap -// method. Treat it like nil instead. -// -// This is so people can implement driver.Value on value types and -// still use nil pointers to those types to mean nil/NULL, just like -// string/*string. -// -// This is an exact copy of the same-named unexported function from the -// database/sql package. -func callValuerValue(vr driver.Valuer) (v driver.Value, err error) { - if rv := reflect.ValueOf(vr); rv.Kind() == reflect.Ptr && - rv.IsNil() && - rv.Type().Elem().Implements(valuerReflectType) { - return nil, nil - } - return vr.Value() -} diff --git a/vendor/github.com/go-sql-driver/mysql/transaction.go b/vendor/github.com/go-sql-driver/mysql/transaction.go deleted file mode 100644 index 417d72793..000000000 --- a/vendor/github.com/go-sql-driver/mysql/transaction.go +++ /dev/null @@ -1,31 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -type mysqlTx struct { - mc *mysqlConn -} - -func (tx *mysqlTx) Commit() (err error) { - if tx.mc == nil || tx.mc.closed.IsSet() { - return ErrInvalidConn - } - err = tx.mc.exec("COMMIT") - tx.mc = nil - return -} - -func (tx *mysqlTx) Rollback() (err error) { - if tx.mc == nil || tx.mc.closed.IsSet() { - return ErrInvalidConn - } - err = tx.mc.exec("ROLLBACK") - tx.mc = nil - return -} diff --git a/vendor/github.com/go-sql-driver/mysql/utils.go b/vendor/github.com/go-sql-driver/mysql/utils.go deleted file mode 100644 index cb3650bb9..000000000 --- a/vendor/github.com/go-sql-driver/mysql/utils.go +++ /dev/null @@ -1,755 +0,0 @@ -// Go MySQL Driver - A MySQL-Driver for Go's database/sql package -// -// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved. -// -// 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 mysql - -import ( - "crypto/tls" - "database/sql" - "database/sql/driver" - "encoding/binary" - "errors" - "fmt" - "io" - "strconv" - "strings" - "sync" - "sync/atomic" - "time" -) - -// Registry for custom tls.Configs -var ( - tlsConfigLock sync.RWMutex - tlsConfigRegistry map[string]*tls.Config -) - -// RegisterTLSConfig registers a custom tls.Config to be used with sql.Open. -// Use the key as a value in the DSN where tls=value. -// -// Note: The provided tls.Config is exclusively owned by the driver after -// registering it. -// -// rootCertPool := x509.NewCertPool() -// pem, err := ioutil.ReadFile("/path/ca-cert.pem") -// if err != nil { -// log.Fatal(err) -// } -// if ok := rootCertPool.AppendCertsFromPEM(pem); !ok { -// log.Fatal("Failed to append PEM.") -// } -// clientCert := make([]tls.Certificate, 0, 1) -// certs, err := tls.LoadX509KeyPair("/path/client-cert.pem", "/path/client-key.pem") -// if err != nil { -// log.Fatal(err) -// } -// clientCert = append(clientCert, certs) -// mysql.RegisterTLSConfig("custom", &tls.Config{ -// RootCAs: rootCertPool, -// Certificates: clientCert, -// }) -// db, err := sql.Open("mysql", "user@tcp(localhost:3306)/test?tls=custom") -// -func RegisterTLSConfig(key string, config *tls.Config) error { - if _, isBool := readBool(key); isBool || strings.ToLower(key) == "skip-verify" { - return fmt.Errorf("key '%s' is reserved", key) - } - - tlsConfigLock.Lock() - if tlsConfigRegistry == nil { - tlsConfigRegistry = make(map[string]*tls.Config) - } - - tlsConfigRegistry[key] = config - tlsConfigLock.Unlock() - return nil -} - -// DeregisterTLSConfig removes the tls.Config associated with key. -func DeregisterTLSConfig(key string) { - tlsConfigLock.Lock() - if tlsConfigRegistry != nil { - delete(tlsConfigRegistry, key) - } - tlsConfigLock.Unlock() -} - -func getTLSConfigClone(key string) (config *tls.Config) { - tlsConfigLock.RLock() - if v, ok := tlsConfigRegistry[key]; ok { - config = v.Clone() - } - tlsConfigLock.RUnlock() - return -} - -// Returns the bool value of the input. -// The 2nd return value indicates if the input was a valid bool value -func readBool(input string) (value bool, valid bool) { - switch input { - case "1", "true", "TRUE", "True": - return true, true - case "0", "false", "FALSE", "False": - return false, true - } - - // Not a valid bool value - return -} - -/****************************************************************************** -* Time related utils * -******************************************************************************/ - -// NullTime represents a time.Time that may be NULL. -// NullTime implements the Scanner interface so -// it can be used as a scan destination: -// -// var nt NullTime -// err := db.QueryRow("SELECT time FROM foo WHERE id=?", id).Scan(&nt) -// ... -// if nt.Valid { -// // use nt.Time -// } else { -// // NULL value -// } -// -// This NullTime implementation is not driver-specific -type NullTime struct { - Time time.Time - Valid bool // Valid is true if Time is not NULL -} - -// Scan implements the Scanner interface. -// The value type must be time.Time or string / []byte (formatted time-string), -// otherwise Scan fails. -func (nt *NullTime) Scan(value interface{}) (err error) { - if value == nil { - nt.Time, nt.Valid = time.Time{}, false - return - } - - switch v := value.(type) { - case time.Time: - nt.Time, nt.Valid = v, true - return - case []byte: - nt.Time, err = parseDateTime(string(v), time.UTC) - nt.Valid = (err == nil) - return - case string: - nt.Time, err = parseDateTime(v, time.UTC) - nt.Valid = (err == nil) - return - } - - nt.Valid = false - return fmt.Errorf("Can't convert %T to time.Time", value) -} - -// Value implements the driver Valuer interface. -func (nt NullTime) Value() (driver.Value, error) { - if !nt.Valid { - return nil, nil - } - return nt.Time, nil -} - -func parseDateTime(str string, loc *time.Location) (t time.Time, err error) { - base := "0000-00-00 00:00:00.0000000" - switch len(str) { - case 10, 19, 21, 22, 23, 24, 25, 26: // up to "YYYY-MM-DD HH:MM:SS.MMMMMM" - if str == base[:len(str)] { - return - } - t, err = time.Parse(timeFormat[:len(str)], str) - default: - err = fmt.Errorf("invalid time string: %s", str) - return - } - - // Adjust location - if err == nil && loc != time.UTC { - y, mo, d := t.Date() - h, mi, s := t.Clock() - t, err = time.Date(y, mo, d, h, mi, s, t.Nanosecond(), loc), nil - } - - return -} - -func parseBinaryDateTime(num uint64, data []byte, loc *time.Location) (driver.Value, error) { - switch num { - case 0: - return time.Time{}, nil - case 4: - return time.Date( - int(binary.LittleEndian.Uint16(data[:2])), // year - time.Month(data[2]), // month - int(data[3]), // day - 0, 0, 0, 0, - loc, - ), nil - case 7: - return time.Date( - int(binary.LittleEndian.Uint16(data[:2])), // year - time.Month(data[2]), // month - int(data[3]), // day - int(data[4]), // hour - int(data[5]), // minutes - int(data[6]), // seconds - 0, - loc, - ), nil - case 11: - return time.Date( - int(binary.LittleEndian.Uint16(data[:2])), // year - time.Month(data[2]), // month - int(data[3]), // day - int(data[4]), // hour - int(data[5]), // minutes - int(data[6]), // seconds - int(binary.LittleEndian.Uint32(data[7:11]))*1000, // nanoseconds - loc, - ), nil - } - return nil, fmt.Errorf("invalid DATETIME packet length %d", num) -} - -// zeroDateTime is used in formatBinaryDateTime to avoid an allocation -// if the DATE or DATETIME has the zero value. -// It must never be changed. -// The current behavior depends on database/sql copying the result. -var zeroDateTime = []byte("0000-00-00 00:00:00.000000") - -const digits01 = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" -const digits10 = "0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999" - -func appendMicrosecs(dst, src []byte, decimals int) []byte { - if decimals <= 0 { - return dst - } - if len(src) == 0 { - return append(dst, ".000000"[:decimals+1]...) - } - - microsecs := binary.LittleEndian.Uint32(src[:4]) - p1 := byte(microsecs / 10000) - microsecs -= 10000 * uint32(p1) - p2 := byte(microsecs / 100) - microsecs -= 100 * uint32(p2) - p3 := byte(microsecs) - - switch decimals { - default: - return append(dst, '.', - digits10[p1], digits01[p1], - digits10[p2], digits01[p2], - digits10[p3], digits01[p3], - ) - case 1: - return append(dst, '.', - digits10[p1], - ) - case 2: - return append(dst, '.', - digits10[p1], digits01[p1], - ) - case 3: - return append(dst, '.', - digits10[p1], digits01[p1], - digits10[p2], - ) - case 4: - return append(dst, '.', - digits10[p1], digits01[p1], - digits10[p2], digits01[p2], - ) - case 5: - return append(dst, '.', - digits10[p1], digits01[p1], - digits10[p2], digits01[p2], - digits10[p3], - ) - } -} - -func formatBinaryDateTime(src []byte, length uint8) (driver.Value, error) { - // length expects the deterministic length of the zero value, - // negative time and 100+ hours are automatically added if needed - if len(src) == 0 { - return zeroDateTime[:length], nil - } - var dst []byte // return value - var p1, p2, p3 byte // current digit pair - - switch length { - case 10, 19, 21, 22, 23, 24, 25, 26: - default: - t := "DATE" - if length > 10 { - t += "TIME" - } - return nil, fmt.Errorf("illegal %s length %d", t, length) - } - switch len(src) { - case 4, 7, 11: - default: - t := "DATE" - if length > 10 { - t += "TIME" - } - return nil, fmt.Errorf("illegal %s packet length %d", t, len(src)) - } - dst = make([]byte, 0, length) - // start with the date - year := binary.LittleEndian.Uint16(src[:2]) - pt := year / 100 - p1 = byte(year - 100*uint16(pt)) - p2, p3 = src[2], src[3] - dst = append(dst, - digits10[pt], digits01[pt], - digits10[p1], digits01[p1], '-', - digits10[p2], digits01[p2], '-', - digits10[p3], digits01[p3], - ) - if length == 10 { - return dst, nil - } - if len(src) == 4 { - return append(dst, zeroDateTime[10:length]...), nil - } - dst = append(dst, ' ') - p1 = src[4] // hour - src = src[5:] - - // p1 is 2-digit hour, src is after hour - p2, p3 = src[0], src[1] - dst = append(dst, - digits10[p1], digits01[p1], ':', - digits10[p2], digits01[p2], ':', - digits10[p3], digits01[p3], - ) - return appendMicrosecs(dst, src[2:], int(length)-20), nil -} - -func formatBinaryTime(src []byte, length uint8) (driver.Value, error) { - // length expects the deterministic length of the zero value, - // negative time and 100+ hours are automatically added if needed - if len(src) == 0 { - return zeroDateTime[11 : 11+length], nil - } - var dst []byte // return value - - switch length { - case - 8, // time (can be up to 10 when negative and 100+ hours) - 10, 11, 12, 13, 14, 15: // time with fractional seconds - default: - return nil, fmt.Errorf("illegal TIME length %d", length) - } - switch len(src) { - case 8, 12: - default: - return nil, fmt.Errorf("invalid TIME packet length %d", len(src)) - } - // +2 to enable negative time and 100+ hours - dst = make([]byte, 0, length+2) - if src[0] == 1 { - dst = append(dst, '-') - } - days := binary.LittleEndian.Uint32(src[1:5]) - hours := int64(days)*24 + int64(src[5]) - - if hours >= 100 { - dst = strconv.AppendInt(dst, hours, 10) - } else { - dst = append(dst, digits10[hours], digits01[hours]) - } - - min, sec := src[6], src[7] - dst = append(dst, ':', - digits10[min], digits01[min], ':', - digits10[sec], digits01[sec], - ) - return appendMicrosecs(dst, src[8:], int(length)-9), nil -} - -/****************************************************************************** -* Convert from and to bytes * -******************************************************************************/ - -func uint64ToBytes(n uint64) []byte { - return []byte{ - byte(n), - byte(n >> 8), - byte(n >> 16), - byte(n >> 24), - byte(n >> 32), - byte(n >> 40), - byte(n >> 48), - byte(n >> 56), - } -} - -func uint64ToString(n uint64) []byte { - var a [20]byte - i := 20 - - // U+0030 = 0 - // ... - // U+0039 = 9 - - var q uint64 - for n >= 10 { - i-- - q = n / 10 - a[i] = uint8(n-q*10) + 0x30 - n = q - } - - i-- - a[i] = uint8(n) + 0x30 - - return a[i:] -} - -// treats string value as unsigned integer representation -func stringToInt(b []byte) int { - val := 0 - for i := range b { - val *= 10 - val += int(b[i] - 0x30) - } - return val -} - -// returns the string read as a bytes slice, wheter the value is NULL, -// the number of bytes read and an error, in case the string is longer than -// the input slice -func readLengthEncodedString(b []byte) ([]byte, bool, int, error) { - // Get length - num, isNull, n := readLengthEncodedInteger(b) - if num < 1 { - return b[n:n], isNull, n, nil - } - - n += int(num) - - // Check data length - if len(b) >= n { - return b[n-int(num) : n : n], false, n, nil - } - return nil, false, n, io.EOF -} - -// returns the number of bytes skipped and an error, in case the string is -// longer than the input slice -func skipLengthEncodedString(b []byte) (int, error) { - // Get length - num, _, n := readLengthEncodedInteger(b) - if num < 1 { - return n, nil - } - - n += int(num) - - // Check data length - if len(b) >= n { - return n, nil - } - return n, io.EOF -} - -// returns the number read, whether the value is NULL and the number of bytes read -func readLengthEncodedInteger(b []byte) (uint64, bool, int) { - // See issue #349 - if len(b) == 0 { - return 0, true, 1 - } - - switch b[0] { - // 251: NULL - case 0xfb: - return 0, true, 1 - - // 252: value of following 2 - case 0xfc: - return uint64(b[1]) | uint64(b[2])<<8, false, 3 - - // 253: value of following 3 - case 0xfd: - return uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16, false, 4 - - // 254: value of following 8 - case 0xfe: - return uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16 | - uint64(b[4])<<24 | uint64(b[5])<<32 | uint64(b[6])<<40 | - uint64(b[7])<<48 | uint64(b[8])<<56, - false, 9 - } - - // 0-250: value of first byte - return uint64(b[0]), false, 1 -} - -// encodes a uint64 value and appends it to the given bytes slice -func appendLengthEncodedInteger(b []byte, n uint64) []byte { - switch { - case n <= 250: - return append(b, byte(n)) - - case n <= 0xffff: - return append(b, 0xfc, byte(n), byte(n>>8)) - - case n <= 0xffffff: - return append(b, 0xfd, byte(n), byte(n>>8), byte(n>>16)) - } - return append(b, 0xfe, byte(n), byte(n>>8), byte(n>>16), byte(n>>24), - byte(n>>32), byte(n>>40), byte(n>>48), byte(n>>56)) -} - -// reserveBuffer checks cap(buf) and expand buffer to len(buf) + appendSize. -// If cap(buf) is not enough, reallocate new buffer. -func reserveBuffer(buf []byte, appendSize int) []byte { - newSize := len(buf) + appendSize - if cap(buf) < newSize { - // Grow buffer exponentially - newBuf := make([]byte, len(buf)*2+appendSize) - copy(newBuf, buf) - buf = newBuf - } - return buf[:newSize] -} - -// escapeBytesBackslash escapes []byte with backslashes (\) -// This escapes the contents of a string (provided as []byte) by adding backslashes before special -// characters, and turning others into specific escape sequences, such as -// turning newlines into \n and null bytes into \0. -// https://github.com/mysql/mysql-server/blob/mysql-5.7.5/mysys/charset.c#L823-L932 -func escapeBytesBackslash(buf, v []byte) []byte { - pos := len(buf) - buf = reserveBuffer(buf, len(v)*2) - - for _, c := range v { - switch c { - case '\x00': - buf[pos] = '\\' - buf[pos+1] = '0' - pos += 2 - case '\n': - buf[pos] = '\\' - buf[pos+1] = 'n' - pos += 2 - case '\r': - buf[pos] = '\\' - buf[pos+1] = 'r' - pos += 2 - case '\x1a': - buf[pos] = '\\' - buf[pos+1] = 'Z' - pos += 2 - case '\'': - buf[pos] = '\\' - buf[pos+1] = '\'' - pos += 2 - case '"': - buf[pos] = '\\' - buf[pos+1] = '"' - pos += 2 - case '\\': - buf[pos] = '\\' - buf[pos+1] = '\\' - pos += 2 - default: - buf[pos] = c - pos++ - } - } - - return buf[:pos] -} - -// escapeStringBackslash is similar to escapeBytesBackslash but for string. -func escapeStringBackslash(buf []byte, v string) []byte { - pos := len(buf) - buf = reserveBuffer(buf, len(v)*2) - - for i := 0; i < len(v); i++ { - c := v[i] - switch c { - case '\x00': - buf[pos] = '\\' - buf[pos+1] = '0' - pos += 2 - case '\n': - buf[pos] = '\\' - buf[pos+1] = 'n' - pos += 2 - case '\r': - buf[pos] = '\\' - buf[pos+1] = 'r' - pos += 2 - case '\x1a': - buf[pos] = '\\' - buf[pos+1] = 'Z' - pos += 2 - case '\'': - buf[pos] = '\\' - buf[pos+1] = '\'' - pos += 2 - case '"': - buf[pos] = '\\' - buf[pos+1] = '"' - pos += 2 - case '\\': - buf[pos] = '\\' - buf[pos+1] = '\\' - pos += 2 - default: - buf[pos] = c - pos++ - } - } - - return buf[:pos] -} - -// escapeBytesQuotes escapes apostrophes in []byte by doubling them up. -// This escapes the contents of a string by doubling up any apostrophes that -// it contains. This is used when the NO_BACKSLASH_ESCAPES SQL_MODE is in -// effect on the server. -// https://github.com/mysql/mysql-server/blob/mysql-5.7.5/mysys/charset.c#L963-L1038 -func escapeBytesQuotes(buf, v []byte) []byte { - pos := len(buf) - buf = reserveBuffer(buf, len(v)*2) - - for _, c := range v { - if c == '\'' { - buf[pos] = '\'' - buf[pos+1] = '\'' - pos += 2 - } else { - buf[pos] = c - pos++ - } - } - - return buf[:pos] -} - -// escapeStringQuotes is similar to escapeBytesQuotes but for string. -func escapeStringQuotes(buf []byte, v string) []byte { - pos := len(buf) - buf = reserveBuffer(buf, len(v)*2) - - for i := 0; i < len(v); i++ { - c := v[i] - if c == '\'' { - buf[pos] = '\'' - buf[pos+1] = '\'' - pos += 2 - } else { - buf[pos] = c - pos++ - } - } - - return buf[:pos] -} - -/****************************************************************************** -* Sync utils * -******************************************************************************/ - -// noCopy may be embedded into structs which must not be copied -// after the first use. -// -// See https://github.com/golang/go/issues/8005#issuecomment-190753527 -// for details. -type noCopy struct{} - -// Lock is a no-op used by -copylocks checker from `go vet`. -func (*noCopy) Lock() {} - -// atomicBool is a wrapper around uint32 for usage as a boolean value with -// atomic access. -type atomicBool struct { - _noCopy noCopy - value uint32 -} - -// IsSet returns wether the current boolean value is true -func (ab *atomicBool) IsSet() bool { - return atomic.LoadUint32(&ab.value) > 0 -} - -// Set sets the value of the bool regardless of the previous value -func (ab *atomicBool) Set(value bool) { - if value { - atomic.StoreUint32(&ab.value, 1) - } else { - atomic.StoreUint32(&ab.value, 0) - } -} - -// TrySet sets the value of the bool and returns wether the value changed -func (ab *atomicBool) TrySet(value bool) bool { - if value { - return atomic.SwapUint32(&ab.value, 1) == 0 - } - return atomic.SwapUint32(&ab.value, 0) > 0 -} - -// atomicError is a wrapper for atomically accessed error values -type atomicError struct { - _noCopy noCopy - value atomic.Value -} - -// Set sets the error value regardless of the previous value. -// The value must not be nil -func (ae *atomicError) Set(value error) { - ae.value.Store(value) -} - -// Value returns the current error value -func (ae *atomicError) Value() error { - if v := ae.value.Load(); v != nil { - // this will panic if the value doesn't implement the error interface - return v.(error) - } - return nil -} - -func namedValueToValue(named []driver.NamedValue) ([]driver.Value, error) { - dargs := make([]driver.Value, len(named)) - for n, param := range named { - if len(param.Name) > 0 { - // TODO: support the use of Named Parameters #561 - return nil, errors.New("mysql: driver does not support the use of Named Parameters") - } - dargs[n] = param.Value - } - return dargs, nil -} - -func mapIsolationLevel(level driver.IsolationLevel) (string, error) { - switch sql.IsolationLevel(level) { - case sql.LevelRepeatableRead: - return "REPEATABLE READ", nil - case sql.LevelReadCommitted: - return "READ COMMITTED", nil - case sql.LevelReadUncommitted: - return "READ UNCOMMITTED", nil - case sql.LevelSerializable: - return "SERIALIZABLE", nil - default: - return "", fmt.Errorf("mysql: unsupported isolation level: %v", level) - } -} diff --git a/vendor/github.com/go-xorm/builder/LICENSE b/vendor/github.com/go-xorm/builder/LICENSE deleted file mode 100644 index 614d5e282..000000000 --- a/vendor/github.com/go-xorm/builder/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2016 The Xorm 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 the {organization} 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/go-xorm/builder/README.md b/vendor/github.com/go-xorm/builder/README.md deleted file mode 100644 index e3993e783..000000000 --- a/vendor/github.com/go-xorm/builder/README.md +++ /dev/null @@ -1,176 +0,0 @@ -# SQL builder - -[![CircleCI](https://circleci.com/gh/go-xorm/builder/tree/master.svg?style=svg)](https://circleci.com/gh/go-xorm/builder/tree/master) [![codecov](https://codecov.io/gh/go-xorm/builder/branch/master/graph/badge.svg)](https://codecov.io/gh/go-xorm/builder) -[![](https://goreportcard.com/badge/github.com/go-xorm/builder)](https://goreportcard.com/report/github.com/go-xorm/builder) - -Package builder is a lightweight and fast SQL builder for Go and XORM. - -Make sure you have installed Go 1.1+ and then: - - go get github.com/go-xorm/builder - -# Insert - -```Go -sql, args, err := Insert(Eq{"c": 1, "d": 2}).Into("table1").ToSQL() -``` - -# Select - -```Go -sql, args, err := Select("c, d").From("table1").Where(Eq{"a": 1}).ToSQL() - -sql, args, err = Select("c, d").From("table1").LeftJoin("table2", Eq{"table1.id": 1}.And(Lt{"table2.id": 3})). - RightJoin("table3", "table2.id = table3.tid").Where(Eq{"a": 1}).ToSQL() -``` - -# Update - -```Go -sql, args, err := Update(Eq{"a": 2}).From("table1").Where(Eq{"a": 1}).ToSQL() -``` - -# Delete - -```Go -sql, args, err := Delete(Eq{"a": 1}).From("table1").ToSQL() -``` - -# Conditions - -* `Eq` is a redefine of a map, you can give one or more conditions to `Eq` - -```Go -import . "github.com/go-xorm/builder" - -sql, args, _ := ToSQL(Eq{"a":1}) -// a=? [1] -sql, args, _ := ToSQL(Eq{"b":"c"}.And(Eq{"c": 0})) -// b=? AND c=? ["c", 0] -sql, args, _ := ToSQL(Eq{"b":"c", "c":0}) -// b=? AND c=? ["c", 0] -sql, args, _ := ToSQL(Eq{"b":"c"}.Or(Eq{"b":"d"})) -// b=? OR b=? ["c", "d"] -sql, args, _ := ToSQL(Eq{"b": []string{"c", "d"}}) -// b IN (?,?) ["c", "d"] -sql, args, _ := ToSQL(Eq{"b": 1, "c":[]int{2, 3}}) -// b=? AND c IN (?,?) [1, 2, 3] -``` - -* `Neq` is the same to `Eq` - -```Go -import . "github.com/go-xorm/builder" - -sql, args, _ := ToSQL(Neq{"a":1}) -// a<>? [1] -sql, args, _ := ToSQL(Neq{"b":"c"}.And(Neq{"c": 0})) -// b<>? AND c<>? ["c", 0] -sql, args, _ := ToSQL(Neq{"b":"c", "c":0}) -// b<>? AND c<>? ["c", 0] -sql, args, _ := ToSQL(Neq{"b":"c"}.Or(Neq{"b":"d"})) -// b<>? OR b<>? ["c", "d"] -sql, args, _ := ToSQL(Neq{"b": []string{"c", "d"}}) -// b NOT IN (?,?) ["c", "d"] -sql, args, _ := ToSQL(Neq{"b": 1, "c":[]int{2, 3}}) -// b<>? AND c NOT IN (?,?) [1, 2, 3] -``` - -* `Gt`, `Gte`, `Lt`, `Lte` - -```Go -import . "github.com/go-xorm/builder" - -sql, args, _ := ToSQL(Gt{"a", 1}.And(Gte{"b", 2})) -// a>? AND b>=? [1, 2] -sql, args, _ := ToSQL(Lt{"a", 1}.Or(Lte{"b", 2})) -// a? [1, %c%, 2] -``` - -* `Or(conds ...Cond)`, Or can connect one or more conditions via Or - -```Go -import . "github.com/go-xorm/builder" - -sql, args, _ := ToSQL(Or(Eq{"a":1}, Like{"b", "c"}, Neq{"d", 2})) -// a=? OR b LIKE ? OR d<>? [1, %c%, 2] -sql, args, _ := ToSQL(Or(Eq{"a":1}, And(Like{"b", "c"}, Neq{"d", 2}))) -// a=? OR (b LIKE ? AND d<>?) [1, %c%, 2] -``` - -* `Between` - -```Go -import . "github.com/go-xorm/builder" - -sql, args, _ := ToSQL(Between{"a", 1, 2}) -// a BETWEEN 1 AND 2 -``` - -* Define yourself conditions - -Since `Cond` is an interface. - -```Go -type Cond interface { - WriteTo(Writer) error - And(...Cond) Cond - Or(...Cond) Cond - IsValid() bool -} -``` - -You can define yourself conditions and compose with other `Cond`. \ No newline at end of file diff --git a/vendor/github.com/go-xorm/builder/builder.go b/vendor/github.com/go-xorm/builder/builder.go deleted file mode 100644 index 1253b9887..000000000 --- a/vendor/github.com/go-xorm/builder/builder.go +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -type optype byte - -const ( - condType optype = iota // only conditions - selectType // select - insertType // insert - updateType // update - deleteType // delete -) - -type join struct { - joinType string - joinTable string - joinCond Cond -} - -// Builder describes a SQL statement -type Builder struct { - optype - tableName string - cond Cond - selects []string - joins []join - inserts Eq - updates []Eq -} - -// Select creates a select Builder -func Select(cols ...string) *Builder { - builder := &Builder{cond: NewCond()} - return builder.Select(cols...) -} - -// Insert creates an insert Builder -func Insert(eq Eq) *Builder { - builder := &Builder{cond: NewCond()} - return builder.Insert(eq) -} - -// Update creates an update Builder -func Update(updates ...Eq) *Builder { - builder := &Builder{cond: NewCond()} - return builder.Update(updates...) -} - -// Delete creates a delete Builder -func Delete(conds ...Cond) *Builder { - builder := &Builder{cond: NewCond()} - return builder.Delete(conds...) -} - -// Where sets where SQL -func (b *Builder) Where(cond Cond) *Builder { - b.cond = b.cond.And(cond) - return b -} - -// From sets the table name -func (b *Builder) From(tableName string) *Builder { - b.tableName = tableName - return b -} - -// Into sets insert table name -func (b *Builder) Into(tableName string) *Builder { - b.tableName = tableName - return b -} - -// Join sets join table and contions -func (b *Builder) Join(joinType, joinTable string, joinCond interface{}) *Builder { - switch joinCond.(type) { - case Cond: - b.joins = append(b.joins, join{joinType, joinTable, joinCond.(Cond)}) - case string: - b.joins = append(b.joins, join{joinType, joinTable, Expr(joinCond.(string))}) - } - - return b -} - -// InnerJoin sets inner join -func (b *Builder) InnerJoin(joinTable string, joinCond interface{}) *Builder { - return b.Join("INNER", joinTable, joinCond) -} - -// LeftJoin sets left join SQL -func (b *Builder) LeftJoin(joinTable string, joinCond interface{}) *Builder { - return b.Join("LEFT", joinTable, joinCond) -} - -// RightJoin sets right join SQL -func (b *Builder) RightJoin(joinTable string, joinCond interface{}) *Builder { - return b.Join("RIGHT", joinTable, joinCond) -} - -// CrossJoin sets cross join SQL -func (b *Builder) CrossJoin(joinTable string, joinCond interface{}) *Builder { - return b.Join("CROSS", joinTable, joinCond) -} - -// FullJoin sets full join SQL -func (b *Builder) FullJoin(joinTable string, joinCond interface{}) *Builder { - return b.Join("FULL", joinTable, joinCond) -} - -// Select sets select SQL -func (b *Builder) Select(cols ...string) *Builder { - b.selects = cols - b.optype = selectType - return b -} - -// And sets AND condition -func (b *Builder) And(cond Cond) *Builder { - b.cond = And(b.cond, cond) - return b -} - -// Or sets OR condition -func (b *Builder) Or(cond Cond) *Builder { - b.cond = Or(b.cond, cond) - return b -} - -// Insert sets insert SQL -func (b *Builder) Insert(eq Eq) *Builder { - b.inserts = eq - b.optype = insertType - return b -} - -// Update sets update SQL -func (b *Builder) Update(updates ...Eq) *Builder { - b.updates = updates - b.optype = updateType - return b -} - -// Delete sets delete SQL -func (b *Builder) Delete(conds ...Cond) *Builder { - b.cond = b.cond.And(conds...) - b.optype = deleteType - return b -} - -// WriteTo implements Writer interface -func (b *Builder) WriteTo(w Writer) error { - switch b.optype { - case condType: - return b.cond.WriteTo(w) - case selectType: - return b.selectWriteTo(w) - case insertType: - return b.insertWriteTo(w) - case updateType: - return b.updateWriteTo(w) - case deleteType: - return b.deleteWriteTo(w) - } - - return ErrNotSupportType -} - -// ToSQL convert a builder to SQL and args -func (b *Builder) ToSQL() (string, []interface{}, error) { - w := NewWriter() - if err := b.WriteTo(w); err != nil { - return "", nil, err - } - - return w.writer.String(), w.args, nil -} - -// ToSQL convert a builder or condtions to SQL and args -func ToSQL(cond interface{}) (string, []interface{}, error) { - switch cond.(type) { - case Cond: - return condToSQL(cond.(Cond)) - case *Builder: - return cond.(*Builder).ToSQL() - } - return "", nil, ErrNotSupportType -} diff --git a/vendor/github.com/go-xorm/builder/builder_delete.go b/vendor/github.com/go-xorm/builder/builder_delete.go deleted file mode 100644 index 743f1a4a9..000000000 --- a/vendor/github.com/go-xorm/builder/builder_delete.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import ( - "errors" - "fmt" -) - -func (b *Builder) deleteWriteTo(w Writer) error { - if len(b.tableName) <= 0 { - return errors.New("no table indicated") - } - - if _, err := fmt.Fprintf(w, "DELETE FROM %s WHERE ", b.tableName); err != nil { - return err - } - - return b.cond.WriteTo(w) -} diff --git a/vendor/github.com/go-xorm/builder/builder_insert.go b/vendor/github.com/go-xorm/builder/builder_insert.go deleted file mode 100644 index 9b213ec73..000000000 --- a/vendor/github.com/go-xorm/builder/builder_insert.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import ( - "bytes" - "errors" - "fmt" -) - -func (b *Builder) insertWriteTo(w Writer) error { - if len(b.tableName) <= 0 { - return errors.New("no table indicated") - } - if len(b.inserts) <= 0 { - return errors.New("no column to be insert") - } - - if _, err := fmt.Fprintf(w, "INSERT INTO %s (", b.tableName); err != nil { - return err - } - - var args = make([]interface{}, 0) - var bs []byte - var valBuffer = bytes.NewBuffer(bs) - var i = 0 - - for _, col := range b.inserts.sortedKeys() { - value := b.inserts[col] - fmt.Fprint(w, col) - if e, ok := value.(expr); ok { - fmt.Fprint(valBuffer, e.sql) - args = append(args, e.args...) - } else { - fmt.Fprint(valBuffer, "?") - args = append(args, value) - } - - if i != len(b.inserts)-1 { - if _, err := fmt.Fprint(w, ","); err != nil { - return err - } - if _, err := fmt.Fprint(valBuffer, ","); err != nil { - return err - } - } - i = i + 1 - } - - if _, err := fmt.Fprint(w, ") Values ("); err != nil { - return err - } - - if _, err := w.Write(valBuffer.Bytes()); err != nil { - return err - } - if _, err := fmt.Fprint(w, ")"); err != nil { - return err - } - - w.Append(args...) - - return nil -} diff --git a/vendor/github.com/go-xorm/builder/builder_select.go b/vendor/github.com/go-xorm/builder/builder_select.go deleted file mode 100644 index 3a3967ccc..000000000 --- a/vendor/github.com/go-xorm/builder/builder_select.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import ( - "errors" - "fmt" -) - -func (b *Builder) selectWriteTo(w Writer) error { - if len(b.tableName) <= 0 { - return errors.New("no table indicated") - } - - if _, err := fmt.Fprint(w, "SELECT "); err != nil { - return err - } - if len(b.selects) > 0 { - for i, s := range b.selects { - if _, err := fmt.Fprint(w, s); err != nil { - return err - } - if i != len(b.selects)-1 { - if _, err := fmt.Fprint(w, ","); err != nil { - return err - } - } - } - } else { - if _, err := fmt.Fprint(w, "*"); err != nil { - return err - } - } - - if _, err := fmt.Fprintf(w, " FROM %s", b.tableName); err != nil { - return err - } - - for _, v := range b.joins { - fmt.Fprintf(w, " %s JOIN %s ON ", v.joinType, v.joinTable) - if err := v.joinCond.WriteTo(w); err != nil { - return err - } - } - - if !b.cond.IsValid() { - return nil - } - - if _, err := fmt.Fprint(w, " WHERE "); err != nil { - return err - } - - return b.cond.WriteTo(w) -} diff --git a/vendor/github.com/go-xorm/builder/builder_update.go b/vendor/github.com/go-xorm/builder/builder_update.go deleted file mode 100644 index 182af830f..000000000 --- a/vendor/github.com/go-xorm/builder/builder_update.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import ( - "errors" - "fmt" -) - -func (b *Builder) updateWriteTo(w Writer) error { - if len(b.tableName) <= 0 { - return errors.New("no table indicated") - } - if len(b.updates) <= 0 { - return errors.New("no column to be update") - } - - if _, err := fmt.Fprintf(w, "UPDATE %s SET ", b.tableName); err != nil { - return err - } - - for i, s := range b.updates { - if err := s.opWriteTo(",", w); err != nil { - return err - } - - if i != len(b.updates)-1 { - if _, err := fmt.Fprint(w, ","); err != nil { - return err - } - } - } - - if _, err := fmt.Fprint(w, " WHERE "); err != nil { - return err - } - - return b.cond.WriteTo(w) -} diff --git a/vendor/github.com/go-xorm/builder/circle.yml b/vendor/github.com/go-xorm/builder/circle.yml deleted file mode 100644 index afb7bf244..000000000 --- a/vendor/github.com/go-xorm/builder/circle.yml +++ /dev/null @@ -1,14 +0,0 @@ -dependencies: - override: - # './...' is a relative pattern which means all subdirectories - - go get -t -d -v ./... - - go build -v - - go get -u github.com/golang/lint/golint - -test: - override: - # './...' is a relative pattern which means all subdirectories - - golint ./... - - go test -v -race -coverprofile=coverage.txt -covermode=atomic - post: - - bash <(curl -s https://codecov.io/bash) \ No newline at end of file diff --git a/vendor/github.com/go-xorm/builder/cond.go b/vendor/github.com/go-xorm/builder/cond.go deleted file mode 100644 index 77dd139bf..000000000 --- a/vendor/github.com/go-xorm/builder/cond.go +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import ( - "bytes" - "io" -) - -// Writer defines the interface -type Writer interface { - io.Writer - Append(...interface{}) -} - -var _ Writer = NewWriter() - -// BytesWriter implments Writer and save SQL in bytes.Buffer -type BytesWriter struct { - writer *bytes.Buffer - buffer []byte - args []interface{} -} - -// NewWriter creates a new string writer -func NewWriter() *BytesWriter { - w := &BytesWriter{} - w.writer = bytes.NewBuffer(w.buffer) - return w -} - -// Write writes data to Writer -func (s *BytesWriter) Write(buf []byte) (int, error) { - return s.writer.Write(buf) -} - -// Append appends args to Writer -func (s *BytesWriter) Append(args ...interface{}) { - s.args = append(s.args, args...) -} - -// Cond defines an interface -type Cond interface { - WriteTo(Writer) error - And(...Cond) Cond - Or(...Cond) Cond - IsValid() bool -} - -type condEmpty struct{} - -var _ Cond = condEmpty{} - -// NewCond creates an empty condition -func NewCond() Cond { - return condEmpty{} -} - -func (condEmpty) WriteTo(w Writer) error { - return nil -} - -func (condEmpty) And(conds ...Cond) Cond { - return And(conds...) -} - -func (condEmpty) Or(conds ...Cond) Cond { - return Or(conds...) -} - -func (condEmpty) IsValid() bool { - return false -} - -func condToSQL(cond Cond) (string, []interface{}, error) { - if cond == nil || !cond.IsValid() { - return "", nil, nil - } - - w := NewWriter() - if err := cond.WriteTo(w); err != nil { - return "", nil, err - } - return w.writer.String(), w.args, nil -} diff --git a/vendor/github.com/go-xorm/builder/cond_and.go b/vendor/github.com/go-xorm/builder/cond_and.go deleted file mode 100644 index e30bd186c..000000000 --- a/vendor/github.com/go-xorm/builder/cond_and.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import "fmt" - -type condAnd []Cond - -var _ Cond = condAnd{} - -// And generates AND conditions -func And(conds ...Cond) Cond { - var result = make(condAnd, 0, len(conds)) - for _, cond := range conds { - if cond == nil || !cond.IsValid() { - continue - } - result = append(result, cond) - } - return result -} - -func (and condAnd) WriteTo(w Writer) error { - for i, cond := range and { - _, isOr := cond.(condOr) - _, isExpr := cond.(expr) - wrap := isOr || isExpr - if wrap { - fmt.Fprint(w, "(") - } - - err := cond.WriteTo(w) - if err != nil { - return err - } - - if wrap { - fmt.Fprint(w, ")") - } - - if i != len(and)-1 { - fmt.Fprint(w, " AND ") - } - } - - return nil -} - -func (and condAnd) And(conds ...Cond) Cond { - return And(and, And(conds...)) -} - -func (and condAnd) Or(conds ...Cond) Cond { - return Or(and, Or(conds...)) -} - -func (and condAnd) IsValid() bool { - return len(and) > 0 -} diff --git a/vendor/github.com/go-xorm/builder/cond_between.go b/vendor/github.com/go-xorm/builder/cond_between.go deleted file mode 100644 index f2b29ed15..000000000 --- a/vendor/github.com/go-xorm/builder/cond_between.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import "fmt" - -// Between implmentes between condition -type Between struct { - Col string - LessVal interface{} - MoreVal interface{} -} - -var _ Cond = Between{} - -// WriteTo write data to Writer -func (between Between) WriteTo(w Writer) error { - if _, err := fmt.Fprintf(w, "%s BETWEEN ? AND ?", between.Col); err != nil { - return err - } - w.Append(between.LessVal, between.MoreVal) - return nil -} - -// And implments And with other conditions -func (between Between) And(conds ...Cond) Cond { - return And(between, And(conds...)) -} - -// Or implments Or with other conditions -func (between Between) Or(conds ...Cond) Cond { - return Or(between, Or(conds...)) -} - -// IsValid tests if the condition is valid -func (between Between) IsValid() bool { - return len(between.Col) > 0 -} diff --git a/vendor/github.com/go-xorm/builder/cond_compare.go b/vendor/github.com/go-xorm/builder/cond_compare.go deleted file mode 100644 index 1c293719c..000000000 --- a/vendor/github.com/go-xorm/builder/cond_compare.go +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import "fmt" - -// WriteMap writes conditions' SQL to Writer, op could be =, <>, >, <, <=, >= and etc. -func WriteMap(w Writer, data map[string]interface{}, op string) error { - var args = make([]interface{}, 0, len(data)) - var i = 0 - keys := make([]string, 0, len(data)) - for k := range data { - keys = append(keys, k) - } - - for _, k := range keys { - v := data[k] - switch v.(type) { - case expr: - if _, err := fmt.Fprintf(w, "%s%s(", k, op); err != nil { - return err - } - - if err := v.(expr).WriteTo(w); err != nil { - return err - } - - if _, err := fmt.Fprintf(w, ")"); err != nil { - return err - } - case *Builder: - if _, err := fmt.Fprintf(w, "%s%s(", k, op); err != nil { - return err - } - - if err := v.(*Builder).WriteTo(w); err != nil { - return err - } - - if _, err := fmt.Fprintf(w, ")"); err != nil { - return err - } - default: - if _, err := fmt.Fprintf(w, "%s%s?", k, op); err != nil { - return err - } - args = append(args, v) - } - if i != len(data)-1 { - if _, err := fmt.Fprint(w, " AND "); err != nil { - return err - } - } - i = i + 1 - } - w.Append(args...) - return nil -} - -// Lt defines < condition -type Lt map[string]interface{} - -var _ Cond = Lt{} - -// WriteTo write SQL to Writer -func (lt Lt) WriteTo(w Writer) error { - return WriteMap(w, lt, "<") -} - -// And implements And with other conditions -func (lt Lt) And(conds ...Cond) Cond { - return condAnd{lt, And(conds...)} -} - -// Or implements Or with other conditions -func (lt Lt) Or(conds ...Cond) Cond { - return condOr{lt, Or(conds...)} -} - -// IsValid tests if this Eq is valid -func (lt Lt) IsValid() bool { - return len(lt) > 0 -} - -// Lte defines <= condition -type Lte map[string]interface{} - -var _ Cond = Lte{} - -// WriteTo write SQL to Writer -func (lte Lte) WriteTo(w Writer) error { - return WriteMap(w, lte, "<=") -} - -// And implements And with other conditions -func (lte Lte) And(conds ...Cond) Cond { - return And(lte, And(conds...)) -} - -// Or implements Or with other conditions -func (lte Lte) Or(conds ...Cond) Cond { - return Or(lte, Or(conds...)) -} - -// IsValid tests if this Eq is valid -func (lte Lte) IsValid() bool { - return len(lte) > 0 -} - -// Gt defines > condition -type Gt map[string]interface{} - -var _ Cond = Gt{} - -// WriteTo write SQL to Writer -func (gt Gt) WriteTo(w Writer) error { - return WriteMap(w, gt, ">") -} - -// And implements And with other conditions -func (gt Gt) And(conds ...Cond) Cond { - return And(gt, And(conds...)) -} - -// Or implements Or with other conditions -func (gt Gt) Or(conds ...Cond) Cond { - return Or(gt, Or(conds...)) -} - -// IsValid tests if this Eq is valid -func (gt Gt) IsValid() bool { - return len(gt) > 0 -} - -// Gte defines >= condition -type Gte map[string]interface{} - -var _ Cond = Gte{} - -// WriteTo write SQL to Writer -func (gte Gte) WriteTo(w Writer) error { - return WriteMap(w, gte, ">=") -} - -// And implements And with other conditions -func (gte Gte) And(conds ...Cond) Cond { - return And(gte, And(conds...)) -} - -// Or implements Or with other conditions -func (gte Gte) Or(conds ...Cond) Cond { - return Or(gte, Or(conds...)) -} - -// IsValid tests if this Eq is valid -func (gte Gte) IsValid() bool { - return len(gte) > 0 -} diff --git a/vendor/github.com/go-xorm/builder/cond_eq.go b/vendor/github.com/go-xorm/builder/cond_eq.go deleted file mode 100644 index 79d795e6d..000000000 --- a/vendor/github.com/go-xorm/builder/cond_eq.go +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import ( - "fmt" - "sort" -) - -// Incr implements a type used by Eq -type Incr int - -// Decr implements a type used by Eq -type Decr int - -// Eq defines equals conditions -type Eq map[string]interface{} - -var _ Cond = Eq{} - -func (eq Eq) opWriteTo(op string, w Writer) error { - var i = 0 - for _, k := range eq.sortedKeys() { - v := eq[k] - switch v.(type) { - case []int, []int64, []string, []int32, []int16, []int8, []uint, []uint64, []uint32, []uint16, []interface{}: - if err := In(k, v).WriteTo(w); err != nil { - return err - } - case expr: - if _, err := fmt.Fprintf(w, "%s=(", k); err != nil { - return err - } - - if err := v.(expr).WriteTo(w); err != nil { - return err - } - - if _, err := fmt.Fprintf(w, ")"); err != nil { - return err - } - case *Builder: - if _, err := fmt.Fprintf(w, "%s=(", k); err != nil { - return err - } - - if err := v.(*Builder).WriteTo(w); err != nil { - return err - } - - if _, err := fmt.Fprintf(w, ")"); err != nil { - return err - } - case Incr: - if _, err := fmt.Fprintf(w, "%s=%s+?", k, k); err != nil { - return err - } - w.Append(int(v.(Incr))) - case Decr: - if _, err := fmt.Fprintf(w, "%s=%s-?", k, k); err != nil { - return err - } - w.Append(int(v.(Decr))) - default: - if _, err := fmt.Fprintf(w, "%s=?", k); err != nil { - return err - } - w.Append(v) - } - if i != len(eq)-1 { - if _, err := fmt.Fprint(w, op); err != nil { - return err - } - } - i = i + 1 - } - return nil -} - -// WriteTo writes SQL to Writer -func (eq Eq) WriteTo(w Writer) error { - return eq.opWriteTo(" AND ", w) -} - -// And implements And with other conditions -func (eq Eq) And(conds ...Cond) Cond { - return And(eq, And(conds...)) -} - -// Or implements Or with other conditions -func (eq Eq) Or(conds ...Cond) Cond { - return Or(eq, Or(conds...)) -} - -// IsValid tests if this Eq is valid -func (eq Eq) IsValid() bool { - return len(eq) > 0 -} - -// sortedKeys returns all keys of this Eq sorted with sort.Strings. -// It is used internally for consistent ordering when generating -// SQL, see https://github.com/go-xorm/builder/issues/10 -func (eq Eq) sortedKeys() []string { - keys := make([]string, 0, len(eq)) - for key := range eq { - keys = append(keys, key) - } - sort.Strings(keys) - return keys -} diff --git a/vendor/github.com/go-xorm/builder/cond_expr.go b/vendor/github.com/go-xorm/builder/cond_expr.go deleted file mode 100644 index e5ed572b1..000000000 --- a/vendor/github.com/go-xorm/builder/cond_expr.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import "fmt" - -type expr struct { - sql string - args []interface{} -} - -var _ Cond = expr{} - -// Expr generate customerize SQL -func Expr(sql string, args ...interface{}) Cond { - return expr{sql, args} -} - -func (expr expr) WriteTo(w Writer) error { - if _, err := fmt.Fprint(w, expr.sql); err != nil { - return err - } - w.Append(expr.args...) - return nil -} - -func (expr expr) And(conds ...Cond) Cond { - return And(expr, And(conds...)) -} - -func (expr expr) Or(conds ...Cond) Cond { - return Or(expr, Or(conds...)) -} - -func (expr expr) IsValid() bool { - return len(expr.sql) > 0 -} diff --git a/vendor/github.com/go-xorm/builder/cond_in.go b/vendor/github.com/go-xorm/builder/cond_in.go deleted file mode 100644 index f6366d35c..000000000 --- a/vendor/github.com/go-xorm/builder/cond_in.go +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import ( - "fmt" - "reflect" - "strings" -) - -type condIn struct { - col string - vals []interface{} -} - -var _ Cond = condIn{} - -// In generates IN condition -func In(col string, values ...interface{}) Cond { - return condIn{col, values} -} - -func (condIn condIn) handleBlank(w Writer) error { - _, err := fmt.Fprint(w, "0=1") - return err -} - -func (condIn condIn) WriteTo(w Writer) error { - if len(condIn.vals) <= 0 { - return condIn.handleBlank(w) - } - - switch condIn.vals[0].(type) { - case []int8: - vals := condIn.vals[0].([]int8) - if len(vals) <= 0 { - return condIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []int16: - vals := condIn.vals[0].([]int16) - if len(vals) <= 0 { - return condIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []int: - vals := condIn.vals[0].([]int) - if len(vals) <= 0 { - return condIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []int32: - vals := condIn.vals[0].([]int32) - if len(vals) <= 0 { - return condIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []int64: - vals := condIn.vals[0].([]int64) - if len(vals) <= 0 { - return condIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []uint8: - vals := condIn.vals[0].([]uint8) - if len(vals) <= 0 { - return condIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []uint16: - vals := condIn.vals[0].([]uint16) - if len(vals) <= 0 { - return condIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []uint: - vals := condIn.vals[0].([]uint) - if len(vals) <= 0 { - return condIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []uint32: - vals := condIn.vals[0].([]uint32) - if len(vals) <= 0 { - return condIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []uint64: - vals := condIn.vals[0].([]uint64) - if len(vals) <= 0 { - return condIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []string: - vals := condIn.vals[0].([]string) - if len(vals) <= 0 { - return condIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []interface{}: - vals := condIn.vals[0].([]interface{}) - if len(vals) <= 0 { - return condIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - w.Append(vals...) - case expr: - val := condIn.vals[0].(expr) - if _, err := fmt.Fprintf(w, "%s IN (", condIn.col); err != nil { - return err - } - if err := val.WriteTo(w); err != nil { - return err - } - if _, err := fmt.Fprintf(w, ")"); err != nil { - return err - } - case *Builder: - bd := condIn.vals[0].(*Builder) - if _, err := fmt.Fprintf(w, "%s IN (", condIn.col); err != nil { - return err - } - if err := bd.WriteTo(w); err != nil { - return err - } - if _, err := fmt.Fprintf(w, ")"); err != nil { - return err - } - default: - v := reflect.ValueOf(condIn.vals[0]) - if v.Kind() == reflect.Slice { - l := v.Len() - if l == 0 { - return condIn.handleBlank(w) - } - - questionMark := strings.Repeat("?,", l) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - - for i := 0; i < l; i++ { - w.Append(v.Index(i).Interface()) - } - } else { - questionMark := strings.Repeat("?,", len(condIn.vals)) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - w.Append(condIn.vals...) - } - } - return nil -} - -func (condIn condIn) And(conds ...Cond) Cond { - return And(condIn, And(conds...)) -} - -func (condIn condIn) Or(conds ...Cond) Cond { - return Or(condIn, Or(conds...)) -} - -func (condIn condIn) IsValid() bool { - return len(condIn.col) > 0 && len(condIn.vals) > 0 -} diff --git a/vendor/github.com/go-xorm/builder/cond_like.go b/vendor/github.com/go-xorm/builder/cond_like.go deleted file mode 100644 index e34202f8b..000000000 --- a/vendor/github.com/go-xorm/builder/cond_like.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import "fmt" - -// Like defines like condition -type Like [2]string - -var _ Cond = Like{"", ""} - -// WriteTo write SQL to Writer -func (like Like) WriteTo(w Writer) error { - if _, err := fmt.Fprintf(w, "%s LIKE ?", like[0]); err != nil { - return err - } - // FIXME: if use other regular express, this will be failed. but for compatible, keep this - if like[1][0] == '%' || like[1][len(like[1])-1] == '%' { - w.Append(like[1]) - } else { - w.Append("%" + like[1] + "%") - } - return nil -} - -// And implements And with other conditions -func (like Like) And(conds ...Cond) Cond { - return And(like, And(conds...)) -} - -// Or implements Or with other conditions -func (like Like) Or(conds ...Cond) Cond { - return Or(like, Or(conds...)) -} - -// IsValid tests if this condition is valid -func (like Like) IsValid() bool { - return len(like[0]) > 0 && len(like[1]) > 0 -} diff --git a/vendor/github.com/go-xorm/builder/cond_neq.go b/vendor/github.com/go-xorm/builder/cond_neq.go deleted file mode 100644 index 3a8f3136d..000000000 --- a/vendor/github.com/go-xorm/builder/cond_neq.go +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import ( - "fmt" - "sort" -) - -// Neq defines not equal conditions -type Neq map[string]interface{} - -var _ Cond = Neq{} - -// WriteTo writes SQL to Writer -func (neq Neq) WriteTo(w Writer) error { - var args = make([]interface{}, 0, len(neq)) - var i = 0 - for _, k := range neq.sortedKeys() { - v := neq[k] - switch v.(type) { - case []int, []int64, []string, []int32, []int16, []int8: - if err := NotIn(k, v).WriteTo(w); err != nil { - return err - } - case expr: - if _, err := fmt.Fprintf(w, "%s<>(", k); err != nil { - return err - } - - if err := v.(expr).WriteTo(w); err != nil { - return err - } - - if _, err := fmt.Fprintf(w, ")"); err != nil { - return err - } - case *Builder: - if _, err := fmt.Fprintf(w, "%s<>(", k); err != nil { - return err - } - - if err := v.(*Builder).WriteTo(w); err != nil { - return err - } - - if _, err := fmt.Fprintf(w, ")"); err != nil { - return err - } - default: - if _, err := fmt.Fprintf(w, "%s<>?", k); err != nil { - return err - } - args = append(args, v) - } - if i != len(neq)-1 { - if _, err := fmt.Fprint(w, " AND "); err != nil { - return err - } - } - i = i + 1 - } - w.Append(args...) - return nil -} - -// And implements And with other conditions -func (neq Neq) And(conds ...Cond) Cond { - return And(neq, And(conds...)) -} - -// Or implements Or with other conditions -func (neq Neq) Or(conds ...Cond) Cond { - return Or(neq, Or(conds...)) -} - -// IsValid tests if this condition is valid -func (neq Neq) IsValid() bool { - return len(neq) > 0 -} - -// sortedKeys returns all keys of this Neq sorted with sort.Strings. -// It is used internally for consistent ordering when generating -// SQL, see https://github.com/go-xorm/builder/issues/10 -func (neq Neq) sortedKeys() []string { - keys := make([]string, 0, len(neq)) - for key := range neq { - keys = append(keys, key) - } - sort.Strings(keys) - return keys -} diff --git a/vendor/github.com/go-xorm/builder/cond_not.go b/vendor/github.com/go-xorm/builder/cond_not.go deleted file mode 100644 index 667dfe729..000000000 --- a/vendor/github.com/go-xorm/builder/cond_not.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import "fmt" - -// Not defines NOT condition -type Not [1]Cond - -var _ Cond = Not{} - -// WriteTo writes SQL to Writer -func (not Not) WriteTo(w Writer) error { - if _, err := fmt.Fprint(w, "NOT "); err != nil { - return err - } - switch not[0].(type) { - case condAnd, condOr: - if _, err := fmt.Fprint(w, "("); err != nil { - return err - } - case Eq: - if len(not[0].(Eq)) > 1 { - if _, err := fmt.Fprint(w, "("); err != nil { - return err - } - } - case Neq: - if len(not[0].(Neq)) > 1 { - if _, err := fmt.Fprint(w, "("); err != nil { - return err - } - } - } - - if err := not[0].WriteTo(w); err != nil { - return err - } - - switch not[0].(type) { - case condAnd, condOr: - if _, err := fmt.Fprint(w, ")"); err != nil { - return err - } - case Eq: - if len(not[0].(Eq)) > 1 { - if _, err := fmt.Fprint(w, ")"); err != nil { - return err - } - } - case Neq: - if len(not[0].(Neq)) > 1 { - if _, err := fmt.Fprint(w, ")"); err != nil { - return err - } - } - } - - return nil -} - -// And implements And with other conditions -func (not Not) And(conds ...Cond) Cond { - return And(not, And(conds...)) -} - -// Or implements Or with other conditions -func (not Not) Or(conds ...Cond) Cond { - return Or(not, Or(conds...)) -} - -// IsValid tests if this condition is valid -func (not Not) IsValid() bool { - return not[0] != nil && not[0].IsValid() -} diff --git a/vendor/github.com/go-xorm/builder/cond_notin.go b/vendor/github.com/go-xorm/builder/cond_notin.go deleted file mode 100644 index dc3ac49a3..000000000 --- a/vendor/github.com/go-xorm/builder/cond_notin.go +++ /dev/null @@ -1,234 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import ( - "fmt" - "reflect" - "strings" -) - -type condNotIn condIn - -var _ Cond = condNotIn{} - -// NotIn generate NOT IN condition -func NotIn(col string, values ...interface{}) Cond { - return condNotIn{col, values} -} - -func (condNotIn condNotIn) handleBlank(w Writer) error { - _, err := fmt.Fprint(w, "0=0") - return err -} - -func (condNotIn condNotIn) WriteTo(w Writer) error { - if len(condNotIn.vals) <= 0 { - return condNotIn.handleBlank(w) - } - - switch condNotIn.vals[0].(type) { - case []int8: - vals := condNotIn.vals[0].([]int8) - if len(vals) <= 0 { - return condNotIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s NOT IN (%s)", condNotIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []int16: - vals := condNotIn.vals[0].([]int16) - if len(vals) <= 0 { - return condNotIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s NOT IN (%s)", condNotIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []int: - vals := condNotIn.vals[0].([]int) - if len(vals) <= 0 { - return condNotIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s NOT IN (%s)", condNotIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []int32: - vals := condNotIn.vals[0].([]int32) - if len(vals) <= 0 { - return condNotIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s NOT IN (%s)", condNotIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []int64: - vals := condNotIn.vals[0].([]int64) - if len(vals) <= 0 { - return condNotIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s NOT IN (%s)", condNotIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []uint8: - vals := condNotIn.vals[0].([]uint8) - if len(vals) <= 0 { - return condNotIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s NOT IN (%s)", condNotIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []uint16: - vals := condNotIn.vals[0].([]uint16) - if len(vals) <= 0 { - return condNotIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s NOT IN (%s)", condNotIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []uint: - vals := condNotIn.vals[0].([]uint) - if len(vals) <= 0 { - return condNotIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s NOT IN (%s)", condNotIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []uint32: - vals := condNotIn.vals[0].([]uint32) - if len(vals) <= 0 { - return condNotIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s NOT IN (%s)", condNotIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []uint64: - vals := condNotIn.vals[0].([]uint64) - if len(vals) <= 0 { - return condNotIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s NOT IN (%s)", condNotIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []string: - vals := condNotIn.vals[0].([]string) - if len(vals) <= 0 { - return condNotIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s NOT IN (%s)", condNotIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - for _, val := range vals { - w.Append(val) - } - case []interface{}: - vals := condNotIn.vals[0].([]interface{}) - if len(vals) <= 0 { - return condNotIn.handleBlank(w) - } - questionMark := strings.Repeat("?,", len(vals)) - if _, err := fmt.Fprintf(w, "%s NOT IN (%s)", condNotIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - w.Append(vals...) - case expr: - val := condNotIn.vals[0].(expr) - if _, err := fmt.Fprintf(w, "%s NOT IN (", condNotIn.col); err != nil { - return err - } - if err := val.WriteTo(w); err != nil { - return err - } - if _, err := fmt.Fprintf(w, ")"); err != nil { - return err - } - case *Builder: - val := condNotIn.vals[0].(*Builder) - if _, err := fmt.Fprintf(w, "%s NOT IN (", condNotIn.col); err != nil { - return err - } - if err := val.WriteTo(w); err != nil { - return err - } - if _, err := fmt.Fprintf(w, ")"); err != nil { - return err - } - default: - v := reflect.ValueOf(condNotIn.vals[0]) - if v.Kind() == reflect.Slice { - l := v.Len() - if l == 0 { - return condNotIn.handleBlank(w) - } - - questionMark := strings.Repeat("?,", l) - if _, err := fmt.Fprintf(w, "%s NOT IN (%s)", condNotIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - - for i := 0; i < l; i++ { - w.Append(v.Index(i).Interface()) - } - } else { - questionMark := strings.Repeat("?,", len(condNotIn.vals)) - if _, err := fmt.Fprintf(w, "%s NOT IN (%s)", condNotIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err - } - w.Append(condNotIn.vals...) - } - } - return nil -} - -func (condNotIn condNotIn) And(conds ...Cond) Cond { - return And(condNotIn, And(conds...)) -} - -func (condNotIn condNotIn) Or(conds ...Cond) Cond { - return Or(condNotIn, Or(conds...)) -} - -func (condNotIn condNotIn) IsValid() bool { - return len(condNotIn.col) > 0 && len(condNotIn.vals) > 0 -} diff --git a/vendor/github.com/go-xorm/builder/cond_null.go b/vendor/github.com/go-xorm/builder/cond_null.go deleted file mode 100644 index bf2aaf851..000000000 --- a/vendor/github.com/go-xorm/builder/cond_null.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import "fmt" - -// IsNull defines IS NULL condition -type IsNull [1]string - -var _ Cond = IsNull{""} - -// WriteTo write SQL to Writer -func (isNull IsNull) WriteTo(w Writer) error { - _, err := fmt.Fprintf(w, "%s IS NULL", isNull[0]) - return err -} - -// And implements And with other conditions -func (isNull IsNull) And(conds ...Cond) Cond { - return And(isNull, And(conds...)) -} - -// Or implements Or with other conditions -func (isNull IsNull) Or(conds ...Cond) Cond { - return Or(isNull, Or(conds...)) -} - -// IsValid tests if this condition is valid -func (isNull IsNull) IsValid() bool { - return len(isNull[0]) > 0 -} - -// NotNull defines NOT NULL condition -type NotNull [1]string - -var _ Cond = NotNull{""} - -// WriteTo write SQL to Writer -func (notNull NotNull) WriteTo(w Writer) error { - _, err := fmt.Fprintf(w, "%s IS NOT NULL", notNull[0]) - return err -} - -// And implements And with other conditions -func (notNull NotNull) And(conds ...Cond) Cond { - return And(notNull, And(conds...)) -} - -// Or implements Or with other conditions -func (notNull NotNull) Or(conds ...Cond) Cond { - return Or(notNull, Or(conds...)) -} - -// IsValid tests if this condition is valid -func (notNull NotNull) IsValid() bool { - return len(notNull[0]) > 0 -} diff --git a/vendor/github.com/go-xorm/builder/cond_or.go b/vendor/github.com/go-xorm/builder/cond_or.go deleted file mode 100644 index 35c3da025..000000000 --- a/vendor/github.com/go-xorm/builder/cond_or.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import "fmt" - -type condOr []Cond - -var _ Cond = condOr{} - -// Or sets OR conditions -func Or(conds ...Cond) Cond { - var result = make(condOr, 0, len(conds)) - for _, cond := range conds { - if cond == nil || !cond.IsValid() { - continue - } - result = append(result, cond) - } - return result -} - -// WriteTo implments Cond -func (o condOr) WriteTo(w Writer) error { - for i, cond := range o { - var needQuote bool - switch cond.(type) { - case condAnd: - needQuote = true - case Eq: - needQuote = (len(cond.(Eq)) > 1) - } - - if needQuote { - fmt.Fprint(w, "(") - } - - err := cond.WriteTo(w) - if err != nil { - return err - } - - if needQuote { - fmt.Fprint(w, ")") - } - - if i != len(o)-1 { - fmt.Fprint(w, " OR ") - } - } - - return nil -} - -func (o condOr) And(conds ...Cond) Cond { - return And(o, And(conds...)) -} - -func (o condOr) Or(conds ...Cond) Cond { - return Or(o, Or(conds...)) -} - -func (o condOr) IsValid() bool { - return len(o) > 0 -} diff --git a/vendor/github.com/go-xorm/builder/doc.go b/vendor/github.com/go-xorm/builder/doc.go deleted file mode 100644 index 162b150f1..000000000 --- a/vendor/github.com/go-xorm/builder/doc.go +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2016 The XORM Authors. All rights reserved. -// Use of this source code is governed by a BSD -// license that can be found in the LICENSE file. - -/* - -Package builder is a simple and powerful sql builder for Go. - -Make sure you have installed Go 1.1+ and then: - - go get github.com/go-xorm/builder - -WARNNING: Currently, only query conditions are supported. Below is the supported conditions. - -1. Eq is a redefine of a map, you can give one or more conditions to Eq - - import . "github.com/go-xorm/builder" - - sql, args, _ := ToSQL(Eq{"a":1}) - // a=? [1] - sql, args, _ := ToSQL(Eq{"b":"c"}.And(Eq{"c": 0})) - // b=? AND c=? ["c", 0] - sql, args, _ := ToSQL(Eq{"b":"c", "c":0}) - // b=? AND c=? ["c", 0] - sql, args, _ := ToSQL(Eq{"b":"c"}.Or(Eq{"b":"d"})) - // b=? OR b=? ["c", "d"] - sql, args, _ := ToSQL(Eq{"b": []string{"c", "d"}}) - // b IN (?,?) ["c", "d"] - sql, args, _ := ToSQL(Eq{"b": 1, "c":[]int{2, 3}}) - // b=? AND c IN (?,?) [1, 2, 3] - -2. Neq is the same to Eq - - import . "github.com/go-xorm/builder" - - sql, args, _ := ToSQL(Neq{"a":1}) - // a<>? [1] - sql, args, _ := ToSQL(Neq{"b":"c"}.And(Neq{"c": 0})) - // b<>? AND c<>? ["c", 0] - sql, args, _ := ToSQL(Neq{"b":"c", "c":0}) - // b<>? AND c<>? ["c", 0] - sql, args, _ := ToSQL(Neq{"b":"c"}.Or(Neq{"b":"d"})) - // b<>? OR b<>? ["c", "d"] - sql, args, _ := ToSQL(Neq{"b": []string{"c", "d"}}) - // b NOT IN (?,?) ["c", "d"] - sql, args, _ := ToSQL(Neq{"b": 1, "c":[]int{2, 3}}) - // b<>? AND c NOT IN (?,?) [1, 2, 3] - -3. Gt, Gte, Lt, Lte - - import . "github.com/go-xorm/builder" - - sql, args, _ := ToSQL(Gt{"a", 1}.And(Gte{"b", 2})) - // a>? AND b>=? [1, 2] - sql, args, _ := ToSQL(Lt{"a", 1}.Or(Lte{"b", 2})) - // a? [1, %c%, 2] - -9. Or(conds ...Cond), Or can connect one or more conditions via Or - - import . "github.com/go-xorm/builder" - - sql, args, _ := ToSQL(Or(Eq{"a":1}, Like{"b", "c"}, Neq{"d", 2})) - // a=? OR b LIKE ? OR d<>? [1, %c%, 2] - sql, args, _ := ToSQL(Or(Eq{"a":1}, And(Like{"b", "c"}, Neq{"d", 2}))) - // a=? OR (b LIKE ? AND d<>?) [1, %c%, 2] - -10. Between - - import . "github.com/go-xorm/builder" - - sql, args, _ := ToSQL(Between("a", 1, 2)) - // a BETWEEN 1 AND 2 - -11. define yourself conditions -Since Cond is a interface, you can define yourself conditions and compare with them -*/ -package builder diff --git a/vendor/github.com/go-xorm/builder/error.go b/vendor/github.com/go-xorm/builder/error.go deleted file mode 100644 index d7ac51ea1..000000000 --- a/vendor/github.com/go-xorm/builder/error.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2016 The Xorm 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 builder - -import "errors" - -var ( - // ErrNotSupportType not supported SQL type error - ErrNotSupportType = errors.New("not supported SQL type") - // ErrNoNotInConditions no NOT IN params error - ErrNoNotInConditions = errors.New("No NOT IN conditions") - // ErrNoInConditions no IN params error - ErrNoInConditions = errors.New("No IN conditions") -) diff --git a/vendor/github.com/go-xorm/builder/go.mod b/vendor/github.com/go-xorm/builder/go.mod deleted file mode 100644 index ef1a659ad..000000000 --- a/vendor/github.com/go-xorm/builder/go.mod +++ /dev/null @@ -1 +0,0 @@ -module "github.com/go-xorm/builder" diff --git a/vendor/github.com/go-xorm/core/LICENSE b/vendor/github.com/go-xorm/core/LICENSE deleted file mode 100644 index 113079780..000000000 --- a/vendor/github.com/go-xorm/core/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2013 - 2015 Lunny Xiao -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 {organization} 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/go-xorm/core/README.md b/vendor/github.com/go-xorm/core/README.md deleted file mode 100644 index 09b72c74b..000000000 --- a/vendor/github.com/go-xorm/core/README.md +++ /dev/null @@ -1,116 +0,0 @@ -Core is a lightweight wrapper of sql.DB. - -[![CircleCI](https://circleci.com/gh/go-xorm/core/tree/master.svg?style=svg)](https://circleci.com/gh/go-xorm/core/tree/master) - -# Open -```Go -db, _ := core.Open(db, connstr) -``` - -# SetMapper -```Go -db.SetMapper(SameMapper()) -``` - -## Scan usage - -### Scan -```Go -rows, _ := db.Query() -for rows.Next() { - rows.Scan() -} -``` - -### ScanMap -```Go -rows, _ := db.Query() -for rows.Next() { - rows.ScanMap() -``` - -### ScanSlice - -You can use `[]string`, `[][]byte`, `[]interface{}`, `[]*string`, `[]sql.NullString` to ScanSclice. Notice, slice's length should be equal or less than select columns. - -```Go -rows, _ := db.Query() -cols, _ := rows.Columns() -for rows.Next() { - var s = make([]string, len(cols)) - rows.ScanSlice(&s) -} -``` - -```Go -rows, _ := db.Query() -cols, _ := rows.Columns() -for rows.Next() { - var s = make([]*string, len(cols)) - rows.ScanSlice(&s) -} -``` - -### ScanStruct -```Go -rows, _ := db.Query() -for rows.Next() { - rows.ScanStructByName() - rows.ScanStructByIndex() -} -``` - -## Query usage -```Go -rows, err := db.Query("select * from table where name = ?", name) - -user = User{ - Name:"lunny", -} -rows, err := db.QueryStruct("select * from table where name = ?Name", - &user) - -var user = map[string]interface{}{ - "name": "lunny", -} -rows, err = db.QueryMap("select * from table where name = ?name", - &user) -``` - -## QueryRow usage -```Go -row := db.QueryRow("select * from table where name = ?", name) - -user = User{ - Name:"lunny", -} -row := db.QueryRowStruct("select * from table where name = ?Name", - &user) - -var user = map[string]interface{}{ - "name": "lunny", -} -row = db.QueryRowMap("select * from table where name = ?name", - &user) -``` - -## Exec usage -```Go -db.Exec("insert into user (`name`, title, age, alias, nick_name,created) values (?,?,?,?,?,?)", name, title, age, alias...) - -user = User{ - Name:"lunny", - Title:"test", - Age: 18, -} -result, err = db.ExecStruct("insert into user (`name`, title, age, alias, nick_name,created) values (?Name,?Title,?Age,?Alias,?NickName,?Created)", - &user) - -var user = map[string]interface{}{ - "Name": "lunny", - "Title": "test", - "Age": 18, -} -result, err = db.ExecMap("insert into user (`name`, title, age, alias, nick_name,created) values (?Name,?Title,?Age,?Alias,?NickName,?Created)", - &user) -``` \ No newline at end of file diff --git a/vendor/github.com/go-xorm/core/benchmark.sh b/vendor/github.com/go-xorm/core/benchmark.sh deleted file mode 100755 index eab9e57e9..000000000 --- a/vendor/github.com/go-xorm/core/benchmark.sh +++ /dev/null @@ -1 +0,0 @@ -go test -v -bench=. -run=XXX diff --git a/vendor/github.com/go-xorm/core/cache.go b/vendor/github.com/go-xorm/core/cache.go deleted file mode 100644 index 8f9531da9..000000000 --- a/vendor/github.com/go-xorm/core/cache.go +++ /dev/null @@ -1,87 +0,0 @@ -package core - -import ( - "bytes" - "encoding/gob" - "errors" - "fmt" - "strings" - "time" -) - -const ( - // default cache expired time - CacheExpired = 60 * time.Minute - // not use now - CacheMaxMemory = 256 - // evey ten minutes to clear all expired nodes - CacheGcInterval = 10 * time.Minute - // each time when gc to removed max nodes - CacheGcMaxRemoved = 20 -) - -var ( - ErrCacheMiss = errors.New("xorm/cache: key not found.") - ErrNotStored = errors.New("xorm/cache: not stored.") -) - -// CacheStore is a interface to store cache -type CacheStore interface { - // key is primary key or composite primary key - // value is struct's pointer - // key format : -p--... - Put(key string, value interface{}) error - Get(key string) (interface{}, error) - Del(key string) error -} - -// Cacher is an interface to provide cache -// id format : u--... -type Cacher interface { - GetIds(tableName, sql string) interface{} - GetBean(tableName string, id string) interface{} - PutIds(tableName, sql string, ids interface{}) - PutBean(tableName string, id string, obj interface{}) - DelIds(tableName, sql string) - DelBean(tableName string, id string) - ClearIds(tableName string) - ClearBeans(tableName string) -} - -func encodeIds(ids []PK) (string, error) { - buf := new(bytes.Buffer) - enc := gob.NewEncoder(buf) - err := enc.Encode(ids) - - return buf.String(), err -} - -func decodeIds(s string) ([]PK, error) { - pks := make([]PK, 0) - - dec := gob.NewDecoder(strings.NewReader(s)) - err := dec.Decode(&pks) - - return pks, err -} - -func GetCacheSql(m Cacher, tableName, sql string, args interface{}) ([]PK, error) { - bytes := m.GetIds(tableName, GenSqlKey(sql, args)) - if bytes == nil { - return nil, errors.New("Not Exist") - } - return decodeIds(bytes.(string)) -} - -func PutCacheSql(m Cacher, ids []PK, tableName, sql string, args interface{}) error { - bytes, err := encodeIds(ids) - if err != nil { - return err - } - m.PutIds(tableName, GenSqlKey(sql, args), bytes) - return nil -} - -func GenSqlKey(sql string, args interface{}) string { - return fmt.Sprintf("%v-%v", sql, args) -} diff --git a/vendor/github.com/go-xorm/core/circle.yml b/vendor/github.com/go-xorm/core/circle.yml deleted file mode 100644 index e6a05be27..000000000 --- a/vendor/github.com/go-xorm/core/circle.yml +++ /dev/null @@ -1,15 +0,0 @@ -dependencies: - override: - # './...' is a relative pattern which means all subdirectories - - go get -t -d -v ./... - - go build -v - -database: - override: - - mysql -u root -e "CREATE DATABASE core_test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci" - -test: - override: - # './...' is a relative pattern which means all subdirectories - - go test -v -race - - go test -v -race --dbtype=sqlite3 diff --git a/vendor/github.com/go-xorm/core/column.go b/vendor/github.com/go-xorm/core/column.go deleted file mode 100644 index 20912b713..000000000 --- a/vendor/github.com/go-xorm/core/column.go +++ /dev/null @@ -1,159 +0,0 @@ -package core - -import ( - "fmt" - "reflect" - "strings" - "time" -) - -const ( - TWOSIDES = iota + 1 - ONLYTODB - ONLYFROMDB -) - -// Column defines database column -type Column struct { - Name string - TableName string - FieldName string - SQLType SQLType - IsJSON bool - Length int - Length2 int - Nullable bool - Default string - Indexes map[string]int - IsPrimaryKey bool - IsAutoIncrement bool - MapType int - IsCreated bool - IsUpdated bool - IsDeleted bool - IsCascade bool - IsVersion bool - DefaultIsEmpty bool - EnumOptions map[string]int - SetOptions map[string]int - DisableTimeZone bool - TimeZone *time.Location // column specified time zone - Comment string -} - -func NewColumn(name, fieldName string, sqlType SQLType, len1, len2 int, nullable bool) *Column { - return &Column{ - Name: name, - TableName: "", - FieldName: fieldName, - SQLType: sqlType, - Length: len1, - Length2: len2, - Nullable: nullable, - Default: "", - Indexes: make(map[string]int), - IsPrimaryKey: false, - IsAutoIncrement: false, - MapType: TWOSIDES, - IsCreated: false, - IsUpdated: false, - IsDeleted: false, - IsCascade: false, - IsVersion: false, - DefaultIsEmpty: false, - EnumOptions: make(map[string]int), - Comment: "", - } -} - -// generate column description string according dialect -func (col *Column) String(d Dialect) string { - sql := d.QuoteStr() + col.Name + d.QuoteStr() + " " - - sql += d.SqlType(col) + " " - - if col.IsPrimaryKey { - sql += "PRIMARY KEY " - if col.IsAutoIncrement { - sql += d.AutoIncrStr() + " " - } - } - - if col.Default != "" { - sql += "DEFAULT " + col.Default + " " - } - - if d.ShowCreateNull() { - if col.Nullable { - sql += "NULL " - } else { - sql += "NOT NULL " - } - } - - return sql -} - -func (col *Column) StringNoPk(d Dialect) string { - sql := d.QuoteStr() + col.Name + d.QuoteStr() + " " - - sql += d.SqlType(col) + " " - - if col.Default != "" { - sql += "DEFAULT " + col.Default + " " - } - - if d.ShowCreateNull() { - if col.Nullable { - sql += "NULL " - } else { - sql += "NOT NULL " - } - } - - return sql -} - -// return col's filed of struct's value -func (col *Column) ValueOf(bean interface{}) (*reflect.Value, error) { - dataStruct := reflect.Indirect(reflect.ValueOf(bean)) - return col.ValueOfV(&dataStruct) -} - -func (col *Column) ValueOfV(dataStruct *reflect.Value) (*reflect.Value, error) { - var fieldValue reflect.Value - fieldPath := strings.Split(col.FieldName, ".") - - if dataStruct.Type().Kind() == reflect.Map { - keyValue := reflect.ValueOf(fieldPath[len(fieldPath)-1]) - fieldValue = dataStruct.MapIndex(keyValue) - return &fieldValue, nil - } else if dataStruct.Type().Kind() == reflect.Interface { - structValue := reflect.ValueOf(dataStruct.Interface()) - dataStruct = &structValue - } - - level := len(fieldPath) - fieldValue = dataStruct.FieldByName(fieldPath[0]) - for i := 0; i < level-1; i++ { - if !fieldValue.IsValid() { - break - } - if fieldValue.Kind() == reflect.Struct { - fieldValue = fieldValue.FieldByName(fieldPath[i+1]) - } else if fieldValue.Kind() == reflect.Ptr { - if fieldValue.IsNil() { - fieldValue.Set(reflect.New(fieldValue.Type().Elem())) - } - fieldValue = fieldValue.Elem().FieldByName(fieldPath[i+1]) - } else { - return nil, fmt.Errorf("field %v is not valid", col.FieldName) - } - } - - if !fieldValue.IsValid() { - return nil, fmt.Errorf("field %v is not valid", col.FieldName) - } - - return &fieldValue, nil -} diff --git a/vendor/github.com/go-xorm/core/converstion.go b/vendor/github.com/go-xorm/core/converstion.go deleted file mode 100644 index 18522fbee..000000000 --- a/vendor/github.com/go-xorm/core/converstion.go +++ /dev/null @@ -1,8 +0,0 @@ -package core - -// Conversion is an interface. A type implements Conversion will according -// the custom method to fill into database and retrieve from database. -type Conversion interface { - FromDB([]byte) error - ToDB() ([]byte, error) -} diff --git a/vendor/github.com/go-xorm/core/db.go b/vendor/github.com/go-xorm/core/db.go deleted file mode 100644 index 9969fa431..000000000 --- a/vendor/github.com/go-xorm/core/db.go +++ /dev/null @@ -1,401 +0,0 @@ -package core - -import ( - "database/sql" - "database/sql/driver" - "errors" - "fmt" - "reflect" - "regexp" - "sync" -) - -var ( - DefaultCacheSize = 200 -) - -func MapToSlice(query string, mp interface{}) (string, []interface{}, error) { - vv := reflect.ValueOf(mp) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map { - return "", []interface{}{}, ErrNoMapPointer - } - - args := make([]interface{}, 0, len(vv.Elem().MapKeys())) - var err error - query = re.ReplaceAllStringFunc(query, func(src string) string { - v := vv.Elem().MapIndex(reflect.ValueOf(src[1:])) - if !v.IsValid() { - err = fmt.Errorf("map key %s is missing", src[1:]) - } else { - args = append(args, v.Interface()) - } - return "?" - }) - - return query, args, err -} - -func StructToSlice(query string, st interface{}) (string, []interface{}, error) { - vv := reflect.ValueOf(st) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Struct { - return "", []interface{}{}, ErrNoStructPointer - } - - args := make([]interface{}, 0) - var err error - query = re.ReplaceAllStringFunc(query, func(src string) string { - fv := vv.Elem().FieldByName(src[1:]).Interface() - if v, ok := fv.(driver.Valuer); ok { - var value driver.Value - value, err = v.Value() - if err != nil { - return "?" - } - args = append(args, value) - } else { - args = append(args, fv) - } - return "?" - }) - if err != nil { - return "", []interface{}{}, err - } - return query, args, nil -} - -type cacheStruct struct { - value reflect.Value - idx int -} - -type DB struct { - *sql.DB - Mapper IMapper - reflectCache map[reflect.Type]*cacheStruct - reflectCacheMutex sync.RWMutex -} - -func Open(driverName, dataSourceName string) (*DB, error) { - db, err := sql.Open(driverName, dataSourceName) - if err != nil { - return nil, err - } - return &DB{ - DB: db, - Mapper: NewCacheMapper(&SnakeMapper{}), - reflectCache: make(map[reflect.Type]*cacheStruct), - }, nil -} - -func FromDB(db *sql.DB) *DB { - return &DB{ - DB: db, - Mapper: NewCacheMapper(&SnakeMapper{}), - reflectCache: make(map[reflect.Type]*cacheStruct), - } -} - -func (db *DB) reflectNew(typ reflect.Type) reflect.Value { - db.reflectCacheMutex.Lock() - defer db.reflectCacheMutex.Unlock() - cs, ok := db.reflectCache[typ] - if !ok || cs.idx+1 > DefaultCacheSize-1 { - cs = &cacheStruct{reflect.MakeSlice(reflect.SliceOf(typ), DefaultCacheSize, DefaultCacheSize), 0} - db.reflectCache[typ] = cs - } else { - cs.idx = cs.idx + 1 - } - return cs.value.Index(cs.idx).Addr() -} - -func (db *DB) Query(query string, args ...interface{}) (*Rows, error) { - rows, err := db.DB.Query(query, args...) - if err != nil { - if rows != nil { - rows.Close() - } - return nil, err - } - return &Rows{rows, db}, nil -} - -func (db *DB) QueryMap(query string, mp interface{}) (*Rows, error) { - query, args, err := MapToSlice(query, mp) - if err != nil { - return nil, err - } - return db.Query(query, args...) -} - -func (db *DB) QueryStruct(query string, st interface{}) (*Rows, error) { - query, args, err := StructToSlice(query, st) - if err != nil { - return nil, err - } - return db.Query(query, args...) -} - -func (db *DB) QueryRow(query string, args ...interface{}) *Row { - rows, err := db.Query(query, args...) - if err != nil { - return &Row{nil, err} - } - return &Row{rows, nil} -} - -func (db *DB) QueryRowMap(query string, mp interface{}) *Row { - query, args, err := MapToSlice(query, mp) - if err != nil { - return &Row{nil, err} - } - return db.QueryRow(query, args...) -} - -func (db *DB) QueryRowStruct(query string, st interface{}) *Row { - query, args, err := StructToSlice(query, st) - if err != nil { - return &Row{nil, err} - } - return db.QueryRow(query, args...) -} - -type Stmt struct { - *sql.Stmt - db *DB - names map[string]int -} - -func (db *DB) Prepare(query string) (*Stmt, error) { - names := make(map[string]int) - var i int - query = re.ReplaceAllStringFunc(query, func(src string) string { - names[src[1:]] = i - i += 1 - return "?" - }) - - stmt, err := db.DB.Prepare(query) - if err != nil { - return nil, err - } - return &Stmt{stmt, db, names}, nil -} - -func (s *Stmt) ExecMap(mp interface{}) (sql.Result, error) { - vv := reflect.ValueOf(mp) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map { - return nil, errors.New("mp should be a map's pointer") - } - - args := make([]interface{}, len(s.names)) - for k, i := range s.names { - args[i] = vv.Elem().MapIndex(reflect.ValueOf(k)).Interface() - } - return s.Stmt.Exec(args...) -} - -func (s *Stmt) ExecStruct(st interface{}) (sql.Result, error) { - vv := reflect.ValueOf(st) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Struct { - return nil, errors.New("mp should be a map's pointer") - } - - args := make([]interface{}, len(s.names)) - for k, i := range s.names { - args[i] = vv.Elem().FieldByName(k).Interface() - } - return s.Stmt.Exec(args...) -} - -func (s *Stmt) Query(args ...interface{}) (*Rows, error) { - rows, err := s.Stmt.Query(args...) - if err != nil { - return nil, err - } - return &Rows{rows, s.db}, nil -} - -func (s *Stmt) QueryMap(mp interface{}) (*Rows, error) { - vv := reflect.ValueOf(mp) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map { - return nil, errors.New("mp should be a map's pointer") - } - - args := make([]interface{}, len(s.names)) - for k, i := range s.names { - args[i] = vv.Elem().MapIndex(reflect.ValueOf(k)).Interface() - } - - return s.Query(args...) -} - -func (s *Stmt) QueryStruct(st interface{}) (*Rows, error) { - vv := reflect.ValueOf(st) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Struct { - return nil, errors.New("mp should be a map's pointer") - } - - args := make([]interface{}, len(s.names)) - for k, i := range s.names { - args[i] = vv.Elem().FieldByName(k).Interface() - } - - return s.Query(args...) -} - -func (s *Stmt) QueryRow(args ...interface{}) *Row { - rows, err := s.Query(args...) - return &Row{rows, err} -} - -func (s *Stmt) QueryRowMap(mp interface{}) *Row { - vv := reflect.ValueOf(mp) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map { - return &Row{nil, errors.New("mp should be a map's pointer")} - } - - args := make([]interface{}, len(s.names)) - for k, i := range s.names { - args[i] = vv.Elem().MapIndex(reflect.ValueOf(k)).Interface() - } - - return s.QueryRow(args...) -} - -func (s *Stmt) QueryRowStruct(st interface{}) *Row { - vv := reflect.ValueOf(st) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Struct { - return &Row{nil, errors.New("st should be a struct's pointer")} - } - - args := make([]interface{}, len(s.names)) - for k, i := range s.names { - args[i] = vv.Elem().FieldByName(k).Interface() - } - - return s.QueryRow(args...) -} - -var ( - re = regexp.MustCompile(`[?](\w+)`) -) - -// insert into (name) values (?) -// insert into (name) values (?name) -func (db *DB) ExecMap(query string, mp interface{}) (sql.Result, error) { - query, args, err := MapToSlice(query, mp) - if err != nil { - return nil, err - } - return db.DB.Exec(query, args...) -} - -func (db *DB) ExecStruct(query string, st interface{}) (sql.Result, error) { - query, args, err := StructToSlice(query, st) - if err != nil { - return nil, err - } - return db.DB.Exec(query, args...) -} - -type EmptyScanner struct { -} - -func (EmptyScanner) Scan(src interface{}) error { - return nil -} - -type Tx struct { - *sql.Tx - db *DB -} - -func (db *DB) Begin() (*Tx, error) { - tx, err := db.DB.Begin() - if err != nil { - return nil, err - } - return &Tx{tx, db}, nil -} - -func (tx *Tx) Prepare(query string) (*Stmt, error) { - names := make(map[string]int) - var i int - query = re.ReplaceAllStringFunc(query, func(src string) string { - names[src[1:]] = i - i += 1 - return "?" - }) - - stmt, err := tx.Tx.Prepare(query) - if err != nil { - return nil, err - } - return &Stmt{stmt, tx.db, names}, nil -} - -func (tx *Tx) Stmt(stmt *Stmt) *Stmt { - // TODO: - return stmt -} - -func (tx *Tx) ExecMap(query string, mp interface{}) (sql.Result, error) { - query, args, err := MapToSlice(query, mp) - if err != nil { - return nil, err - } - return tx.Tx.Exec(query, args...) -} - -func (tx *Tx) ExecStruct(query string, st interface{}) (sql.Result, error) { - query, args, err := StructToSlice(query, st) - if err != nil { - return nil, err - } - return tx.Tx.Exec(query, args...) -} - -func (tx *Tx) Query(query string, args ...interface{}) (*Rows, error) { - rows, err := tx.Tx.Query(query, args...) - if err != nil { - return nil, err - } - return &Rows{rows, tx.db}, nil -} - -func (tx *Tx) QueryMap(query string, mp interface{}) (*Rows, error) { - query, args, err := MapToSlice(query, mp) - if err != nil { - return nil, err - } - return tx.Query(query, args...) -} - -func (tx *Tx) QueryStruct(query string, st interface{}) (*Rows, error) { - query, args, err := StructToSlice(query, st) - if err != nil { - return nil, err - } - return tx.Query(query, args...) -} - -func (tx *Tx) QueryRow(query string, args ...interface{}) *Row { - rows, err := tx.Query(query, args...) - return &Row{rows, err} -} - -func (tx *Tx) QueryRowMap(query string, mp interface{}) *Row { - query, args, err := MapToSlice(query, mp) - if err != nil { - return &Row{nil, err} - } - return tx.QueryRow(query, args...) -} - -func (tx *Tx) QueryRowStruct(query string, st interface{}) *Row { - query, args, err := StructToSlice(query, st) - if err != nil { - return &Row{nil, err} - } - return tx.QueryRow(query, args...) -} diff --git a/vendor/github.com/go-xorm/core/dialect.go b/vendor/github.com/go-xorm/core/dialect.go deleted file mode 100644 index c288a0847..000000000 --- a/vendor/github.com/go-xorm/core/dialect.go +++ /dev/null @@ -1,315 +0,0 @@ -package core - -import ( - "fmt" - "strings" - "time" -) - -type DbType string - -type Uri struct { - DbType DbType - Proto string - Host string - Port string - DbName string - User string - Passwd string - Charset string - Laddr string - Raddr string - Timeout time.Duration - Schema string -} - -// a dialect is a driver's wrapper -type Dialect interface { - SetLogger(logger ILogger) - Init(*DB, *Uri, string, string) error - URI() *Uri - DB() *DB - DBType() DbType - SqlType(*Column) string - FormatBytes(b []byte) string - - DriverName() string - DataSourceName() string - - QuoteStr() string - IsReserved(string) bool - Quote(string) string - AndStr() string - OrStr() string - EqStr() string - RollBackStr() string - AutoIncrStr() string - - SupportInsertMany() bool - SupportEngine() bool - SupportCharset() bool - SupportDropIfExists() bool - IndexOnTable() bool - ShowCreateNull() bool - - IndexCheckSql(tableName, idxName string) (string, []interface{}) - TableCheckSql(tableName string) (string, []interface{}) - - IsColumnExist(tableName string, colName string) (bool, error) - - CreateTableSql(table *Table, tableName, storeEngine, charset string) string - DropTableSql(tableName string) string - CreateIndexSql(tableName string, index *Index) string - DropIndexSql(tableName string, index *Index) string - - ModifyColumnSql(tableName string, col *Column) string - - ForUpdateSql(query string) string - - //CreateTableIfNotExists(table *Table, tableName, storeEngine, charset string) error - //MustDropTable(tableName string) error - - GetColumns(tableName string) ([]string, map[string]*Column, error) - GetTables() ([]*Table, error) - GetIndexes(tableName string) (map[string]*Index, error) - - Filters() []Filter - SetParams(params map[string]string) -} - -func OpenDialect(dialect Dialect) (*DB, error) { - return Open(dialect.DriverName(), dialect.DataSourceName()) -} - -type Base struct { - db *DB - dialect Dialect - driverName string - dataSourceName string - logger ILogger - *Uri -} - -func (b *Base) DB() *DB { - return b.db -} - -func (b *Base) SetLogger(logger ILogger) { - b.logger = logger -} - -func (b *Base) Init(db *DB, dialect Dialect, uri *Uri, drivername, dataSourceName string) error { - b.db, b.dialect, b.Uri = db, dialect, uri - b.driverName, b.dataSourceName = drivername, dataSourceName - return nil -} - -func (b *Base) URI() *Uri { - return b.Uri -} - -func (b *Base) DBType() DbType { - return b.Uri.DbType -} - -func (b *Base) FormatBytes(bs []byte) string { - return fmt.Sprintf("0x%x", bs) -} - -func (b *Base) DriverName() string { - return b.driverName -} - -func (b *Base) ShowCreateNull() bool { - return true -} - -func (b *Base) DataSourceName() string { - return b.dataSourceName -} - -func (b *Base) AndStr() string { - return "AND" -} - -func (b *Base) OrStr() string { - return "OR" -} - -func (b *Base) EqStr() string { - return "=" -} - -func (db *Base) RollBackStr() string { - return "ROLL BACK" -} - -func (db *Base) SupportDropIfExists() bool { - return true -} - -func (db *Base) DropTableSql(tableName string) string { - quote := db.dialect.Quote - return fmt.Sprintf("DROP TABLE IF EXISTS %s", quote(tableName)) -} - -func (db *Base) HasRecords(query string, args ...interface{}) (bool, error) { - db.LogSQL(query, args) - rows, err := db.DB().Query(query, args...) - if err != nil { - return false, err - } - defer rows.Close() - - if rows.Next() { - return true, nil - } - return false, nil -} - -func (db *Base) IsColumnExist(tableName, colName string) (bool, error) { - query := "SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ? AND `COLUMN_NAME` = ?" - query = strings.Replace(query, "`", db.dialect.QuoteStr(), -1) - return db.HasRecords(query, db.DbName, tableName, colName) -} - -/* -func (db *Base) CreateTableIfNotExists(table *Table, tableName, storeEngine, charset string) error { - sql, args := db.dialect.TableCheckSql(tableName) - rows, err := db.DB().Query(sql, args...) - if db.Logger != nil { - db.Logger.Info("[sql]", sql, args) - } - if err != nil { - return err - } - defer rows.Close() - - if rows.Next() { - return nil - } - - sql = db.dialect.CreateTableSql(table, tableName, storeEngine, charset) - _, err = db.DB().Exec(sql) - if db.Logger != nil { - db.Logger.Info("[sql]", sql) - } - return err -}*/ - -func (db *Base) CreateIndexSql(tableName string, index *Index) string { - quote := db.dialect.Quote - var unique string - var idxName string - if index.Type == UniqueType { - unique = " UNIQUE" - } - idxName = index.XName(tableName) - return fmt.Sprintf("CREATE%s INDEX %v ON %v (%v)", unique, - quote(idxName), quote(tableName), - quote(strings.Join(index.Cols, quote(",")))) -} - -func (db *Base) DropIndexSql(tableName string, index *Index) string { - quote := db.dialect.Quote - var name string - if index.IsRegular { - name = index.XName(tableName) - } else { - name = index.Name - } - return fmt.Sprintf("DROP INDEX %v ON %s", quote(name), quote(tableName)) -} - -func (db *Base) ModifyColumnSql(tableName string, col *Column) string { - return fmt.Sprintf("alter table %s MODIFY COLUMN %s", tableName, col.StringNoPk(db.dialect)) -} - -func (b *Base) CreateTableSql(table *Table, tableName, storeEngine, charset string) string { - var sql string - sql = "CREATE TABLE IF NOT EXISTS " - if tableName == "" { - tableName = table.Name - } - - sql += b.dialect.Quote(tableName) - sql += " (" - - if len(table.ColumnsSeq()) > 0 { - pkList := table.PrimaryKeys - - for _, colName := range table.ColumnsSeq() { - col := table.GetColumn(colName) - if col.IsPrimaryKey && len(pkList) == 1 { - sql += col.String(b.dialect) - } else { - sql += col.StringNoPk(b.dialect) - } - sql = strings.TrimSpace(sql) - if b.DriverName() == MYSQL && len(col.Comment) > 0 { - sql += " COMMENT '" + col.Comment + "'" - } - sql += ", " - } - - if len(pkList) > 1 { - sql += "PRIMARY KEY ( " - sql += b.dialect.Quote(strings.Join(pkList, b.dialect.Quote(","))) - sql += " ), " - } - - sql = sql[:len(sql)-2] - } - sql += ")" - - if b.dialect.SupportEngine() && storeEngine != "" { - sql += " ENGINE=" + storeEngine - } - if b.dialect.SupportCharset() { - if len(charset) == 0 { - charset = b.dialect.URI().Charset - } - if len(charset) > 0 { - sql += " DEFAULT CHARSET " + charset - } - } - - return sql -} - -func (b *Base) ForUpdateSql(query string) string { - return query + " FOR UPDATE" -} - -func (b *Base) LogSQL(sql string, args []interface{}) { - if b.logger != nil && b.logger.IsShowSQL() { - if len(args) > 0 { - b.logger.Infof("[SQL] %v %v", sql, args) - } else { - b.logger.Infof("[SQL] %v", sql) - } - } -} - -func (b *Base) SetParams(params map[string]string) { -} - -var ( - dialects = map[string]func() Dialect{} -) - -// RegisterDialect register database dialect -func RegisterDialect(dbName DbType, dialectFunc func() Dialect) { - if dialectFunc == nil { - panic("core: Register dialect is nil") - } - dialects[strings.ToLower(string(dbName))] = dialectFunc // !nashtsai! allow override dialect -} - -// QueryDialect query if registed database dialect -func QueryDialect(dbName DbType) Dialect { - if d, ok := dialects[strings.ToLower(string(dbName))]; ok { - return d() - } - return nil -} diff --git a/vendor/github.com/go-xorm/core/driver.go b/vendor/github.com/go-xorm/core/driver.go deleted file mode 100644 index 0f1020b40..000000000 --- a/vendor/github.com/go-xorm/core/driver.go +++ /dev/null @@ -1,27 +0,0 @@ -package core - -type Driver interface { - Parse(string, string) (*Uri, error) -} - -var ( - drivers = map[string]Driver{} -) - -func RegisterDriver(driverName string, driver Driver) { - if driver == nil { - panic("core: Register driver is nil") - } - if _, dup := drivers[driverName]; dup { - panic("core: Register called twice for driver " + driverName) - } - drivers[driverName] = driver -} - -func QueryDriver(driverName string) Driver { - return drivers[driverName] -} - -func RegisteredDriverSize() int { - return len(drivers) -} diff --git a/vendor/github.com/go-xorm/core/error.go b/vendor/github.com/go-xorm/core/error.go deleted file mode 100644 index 640e6036e..000000000 --- a/vendor/github.com/go-xorm/core/error.go +++ /dev/null @@ -1,8 +0,0 @@ -package core - -import "errors" - -var ( - ErrNoMapPointer = errors.New("mp should be a map's pointer") - ErrNoStructPointer = errors.New("mp should be a struct's pointer") -) diff --git a/vendor/github.com/go-xorm/core/filter.go b/vendor/github.com/go-xorm/core/filter.go deleted file mode 100644 index 35b0ece67..000000000 --- a/vendor/github.com/go-xorm/core/filter.go +++ /dev/null @@ -1,64 +0,0 @@ -package core - -import ( - "fmt" - "strings" -) - -// Filter is an interface to filter SQL -type Filter interface { - Do(sql string, dialect Dialect, table *Table) string -} - -// QuoteFilter filter SQL replace ` to database's own quote character -type QuoteFilter struct { -} - -func (s *QuoteFilter) Do(sql string, dialect Dialect, table *Table) string { - return strings.Replace(sql, "`", dialect.QuoteStr(), -1) -} - -// IdFilter filter SQL replace (id) to primary key column name -type IdFilter struct { -} - -type Quoter struct { - dialect Dialect -} - -func NewQuoter(dialect Dialect) *Quoter { - return &Quoter{dialect} -} - -func (q *Quoter) Quote(content string) string { - return q.dialect.QuoteStr() + content + q.dialect.QuoteStr() -} - -func (i *IdFilter) Do(sql string, dialect Dialect, table *Table) string { - quoter := NewQuoter(dialect) - if table != nil && len(table.PrimaryKeys) == 1 { - sql = strings.Replace(sql, " `(id)` ", " "+quoter.Quote(table.PrimaryKeys[0])+" ", -1) - sql = strings.Replace(sql, " "+quoter.Quote("(id)")+" ", " "+quoter.Quote(table.PrimaryKeys[0])+" ", -1) - return strings.Replace(sql, " (id) ", " "+quoter.Quote(table.PrimaryKeys[0])+" ", -1) - } - return sql -} - -// SeqFilter filter SQL replace ?, ? ... to $1, $2 ... -type SeqFilter struct { - Prefix string - Start int -} - -func (s *SeqFilter) Do(sql string, dialect Dialect, table *Table) string { - segs := strings.Split(sql, "?") - size := len(segs) - res := "" - for i, c := range segs { - if i < size-1 { - res += c + fmt.Sprintf("%s%v", s.Prefix, i+s.Start) - } - } - res += segs[size-1] - return res -} diff --git a/vendor/github.com/go-xorm/core/go.mod b/vendor/github.com/go-xorm/core/go.mod deleted file mode 100644 index 70c86bcbc..000000000 --- a/vendor/github.com/go-xorm/core/go.mod +++ /dev/null @@ -1 +0,0 @@ -module "github.com/go-xorm/core" diff --git a/vendor/github.com/go-xorm/core/ilogger.go b/vendor/github.com/go-xorm/core/ilogger.go deleted file mode 100644 index c8d784960..000000000 --- a/vendor/github.com/go-xorm/core/ilogger.go +++ /dev/null @@ -1,31 +0,0 @@ -package core - -type LogLevel int - -const ( - // !nashtsai! following level also match syslog.Priority value - LOG_DEBUG LogLevel = iota - LOG_INFO - LOG_WARNING - LOG_ERR - LOG_OFF - LOG_UNKNOWN -) - -// logger interface -type ILogger interface { - Debug(v ...interface{}) - Debugf(format string, v ...interface{}) - Error(v ...interface{}) - Errorf(format string, v ...interface{}) - Info(v ...interface{}) - Infof(format string, v ...interface{}) - Warn(v ...interface{}) - Warnf(format string, v ...interface{}) - - Level() LogLevel - SetLevel(l LogLevel) - - ShowSQL(show ...bool) - IsShowSQL() bool -} diff --git a/vendor/github.com/go-xorm/core/index.go b/vendor/github.com/go-xorm/core/index.go deleted file mode 100644 index 9aa1b7ac9..000000000 --- a/vendor/github.com/go-xorm/core/index.go +++ /dev/null @@ -1,63 +0,0 @@ -package core - -import ( - "fmt" - "sort" - "strings" -) - -const ( - IndexType = iota + 1 - UniqueType -) - -// database index -type Index struct { - IsRegular bool - Name string - Type int - Cols []string -} - -func (index *Index) XName(tableName string) string { - if !strings.HasPrefix(index.Name, "UQE_") && - !strings.HasPrefix(index.Name, "IDX_") { - tableName = strings.Replace(tableName, `"`, "", -1) - tableName = strings.Replace(tableName, `.`, "_", -1) - if index.Type == UniqueType { - return fmt.Sprintf("UQE_%v_%v", tableName, index.Name) - } - return fmt.Sprintf("IDX_%v_%v", tableName, index.Name) - } - return index.Name -} - -// add columns which will be composite index -func (index *Index) AddColumn(cols ...string) { - for _, col := range cols { - index.Cols = append(index.Cols, col) - } -} - -func (index *Index) Equal(dst *Index) bool { - if index.Type != dst.Type { - return false - } - if len(index.Cols) != len(dst.Cols) { - return false - } - sort.StringSlice(index.Cols).Sort() - sort.StringSlice(dst.Cols).Sort() - - for i := 0; i < len(index.Cols); i++ { - if index.Cols[i] != dst.Cols[i] { - return false - } - } - return true -} - -// new an index -func NewIndex(name string, indexType int) *Index { - return &Index{true, name, indexType, make([]string, 0)} -} diff --git a/vendor/github.com/go-xorm/core/mapper.go b/vendor/github.com/go-xorm/core/mapper.go deleted file mode 100644 index bb72a1566..000000000 --- a/vendor/github.com/go-xorm/core/mapper.go +++ /dev/null @@ -1,254 +0,0 @@ -package core - -import ( - "strings" - "sync" -) - -// name translation between struct, fields names and table, column names -type IMapper interface { - Obj2Table(string) string - Table2Obj(string) string -} - -type CacheMapper struct { - oriMapper IMapper - obj2tableCache map[string]string - obj2tableMutex sync.RWMutex - table2objCache map[string]string - table2objMutex sync.RWMutex -} - -func NewCacheMapper(mapper IMapper) *CacheMapper { - return &CacheMapper{oriMapper: mapper, obj2tableCache: make(map[string]string), - table2objCache: make(map[string]string), - } -} - -func (m *CacheMapper) Obj2Table(o string) string { - m.obj2tableMutex.RLock() - t, ok := m.obj2tableCache[o] - m.obj2tableMutex.RUnlock() - if ok { - return t - } - - t = m.oriMapper.Obj2Table(o) - m.obj2tableMutex.Lock() - m.obj2tableCache[o] = t - m.obj2tableMutex.Unlock() - return t -} - -func (m *CacheMapper) Table2Obj(t string) string { - m.table2objMutex.RLock() - o, ok := m.table2objCache[t] - m.table2objMutex.RUnlock() - if ok { - return o - } - - o = m.oriMapper.Table2Obj(t) - m.table2objMutex.Lock() - m.table2objCache[t] = o - m.table2objMutex.Unlock() - return o -} - -// SameMapper implements IMapper and provides same name between struct and -// database table -type SameMapper struct { -} - -func (m SameMapper) Obj2Table(o string) string { - return o -} - -func (m SameMapper) Table2Obj(t string) string { - return t -} - -// SnakeMapper implements IMapper and provides name transaltion between -// struct and database table -type SnakeMapper struct { -} - -func snakeCasedName(name string) string { - newstr := make([]rune, 0) - for idx, chr := range name { - if isUpper := 'A' <= chr && chr <= 'Z'; isUpper { - if idx > 0 { - newstr = append(newstr, '_') - } - chr -= ('A' - 'a') - } - newstr = append(newstr, chr) - } - - return string(newstr) -} - -func (mapper SnakeMapper) Obj2Table(name string) string { - return snakeCasedName(name) -} - -func titleCasedName(name string) string { - newstr := make([]rune, 0) - upNextChar := true - - name = strings.ToLower(name) - - for _, chr := range name { - switch { - case upNextChar: - upNextChar = false - if 'a' <= chr && chr <= 'z' { - chr -= ('a' - 'A') - } - case chr == '_': - upNextChar = true - continue - } - - newstr = append(newstr, chr) - } - - return string(newstr) -} - -func (mapper SnakeMapper) Table2Obj(name string) string { - return titleCasedName(name) -} - -// GonicMapper implements IMapper. It will consider initialisms when mapping names. -// E.g. id -> ID, user -> User and to table names: UserID -> user_id, MyUID -> my_uid -type GonicMapper map[string]bool - -func isASCIIUpper(r rune) bool { - return 'A' <= r && r <= 'Z' -} - -func toASCIIUpper(r rune) rune { - if 'a' <= r && r <= 'z' { - r -= ('a' - 'A') - } - return r -} - -func gonicCasedName(name string) string { - newstr := make([]rune, 0, len(name)+3) - for idx, chr := range name { - if isASCIIUpper(chr) && idx > 0 { - if !isASCIIUpper(newstr[len(newstr)-1]) { - newstr = append(newstr, '_') - } - } - - if !isASCIIUpper(chr) && idx > 1 { - l := len(newstr) - if isASCIIUpper(newstr[l-1]) && isASCIIUpper(newstr[l-2]) { - newstr = append(newstr, newstr[l-1]) - newstr[l-1] = '_' - } - } - - newstr = append(newstr, chr) - } - return strings.ToLower(string(newstr)) -} - -func (mapper GonicMapper) Obj2Table(name string) string { - return gonicCasedName(name) -} - -func (mapper GonicMapper) Table2Obj(name string) string { - newstr := make([]rune, 0) - - name = strings.ToLower(name) - parts := strings.Split(name, "_") - - for _, p := range parts { - _, isInitialism := mapper[strings.ToUpper(p)] - for i, r := range p { - if i == 0 || isInitialism { - r = toASCIIUpper(r) - } - newstr = append(newstr, r) - } - } - - return string(newstr) -} - -// A GonicMapper that contains a list of common initialisms taken from golang/lint -var LintGonicMapper = GonicMapper{ - "API": true, - "ASCII": true, - "CPU": true, - "CSS": true, - "DNS": true, - "EOF": true, - "GUID": true, - "HTML": true, - "HTTP": true, - "HTTPS": true, - "ID": true, - "IP": true, - "JSON": true, - "LHS": true, - "QPS": true, - "RAM": true, - "RHS": true, - "RPC": true, - "SLA": true, - "SMTP": true, - "SSH": true, - "TLS": true, - "TTL": true, - "UI": true, - "UID": true, - "UUID": true, - "URI": true, - "URL": true, - "UTF8": true, - "VM": true, - "XML": true, - "XSRF": true, - "XSS": true, -} - -// provide prefix table name support -type PrefixMapper struct { - Mapper IMapper - Prefix string -} - -func (mapper PrefixMapper) Obj2Table(name string) string { - return mapper.Prefix + mapper.Mapper.Obj2Table(name) -} - -func (mapper PrefixMapper) Table2Obj(name string) string { - return mapper.Mapper.Table2Obj(name[len(mapper.Prefix):]) -} - -func NewPrefixMapper(mapper IMapper, prefix string) PrefixMapper { - return PrefixMapper{mapper, prefix} -} - -// provide suffix table name support -type SuffixMapper struct { - Mapper IMapper - Suffix string -} - -func (mapper SuffixMapper) Obj2Table(name string) string { - return mapper.Mapper.Obj2Table(name) + mapper.Suffix -} - -func (mapper SuffixMapper) Table2Obj(name string) string { - return mapper.Mapper.Table2Obj(name[:len(name)-len(mapper.Suffix)]) -} - -func NewSuffixMapper(mapper IMapper, suffix string) SuffixMapper { - return SuffixMapper{mapper, suffix} -} diff --git a/vendor/github.com/go-xorm/core/pk.go b/vendor/github.com/go-xorm/core/pk.go deleted file mode 100644 index 1810dd944..000000000 --- a/vendor/github.com/go-xorm/core/pk.go +++ /dev/null @@ -1,26 +0,0 @@ -package core - -import ( - "bytes" - "encoding/gob" -) - -type PK []interface{} - -func NewPK(pks ...interface{}) *PK { - p := PK(pks) - return &p -} - -func (p *PK) ToString() (string, error) { - buf := new(bytes.Buffer) - enc := gob.NewEncoder(buf) - err := enc.Encode(*p) - return buf.String(), err -} - -func (p *PK) FromString(content string) error { - dec := gob.NewDecoder(bytes.NewBufferString(content)) - err := dec.Decode(p) - return err -} diff --git a/vendor/github.com/go-xorm/core/rows.go b/vendor/github.com/go-xorm/core/rows.go deleted file mode 100644 index 580de4f9c..000000000 --- a/vendor/github.com/go-xorm/core/rows.go +++ /dev/null @@ -1,334 +0,0 @@ -package core - -import ( - "database/sql" - "errors" - "reflect" - "sync" -) - -type Rows struct { - *sql.Rows - db *DB -} - -func (rs *Rows) ToMapString() ([]map[string]string, error) { - cols, err := rs.Columns() - if err != nil { - return nil, err - } - - var results = make([]map[string]string, 0, 10) - for rs.Next() { - var record = make(map[string]string, len(cols)) - err = rs.ScanMap(&record) - if err != nil { - return nil, err - } - results = append(results, record) - } - return results, nil -} - -// scan data to a struct's pointer according field index -func (rs *Rows) ScanStructByIndex(dest ...interface{}) error { - if len(dest) == 0 { - return errors.New("at least one struct") - } - - vvvs := make([]reflect.Value, len(dest)) - for i, s := range dest { - vv := reflect.ValueOf(s) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Struct { - return errors.New("dest should be a struct's pointer") - } - - vvvs[i] = vv.Elem() - } - - cols, err := rs.Columns() - if err != nil { - return err - } - newDest := make([]interface{}, len(cols)) - - var i = 0 - for _, vvv := range vvvs { - for j := 0; j < vvv.NumField(); j++ { - newDest[i] = vvv.Field(j).Addr().Interface() - i = i + 1 - } - } - - return rs.Rows.Scan(newDest...) -} - -var ( - fieldCache = make(map[reflect.Type]map[string]int) - fieldCacheMutex sync.RWMutex -) - -func fieldByName(v reflect.Value, name string) reflect.Value { - t := v.Type() - fieldCacheMutex.RLock() - cache, ok := fieldCache[t] - fieldCacheMutex.RUnlock() - if !ok { - cache = make(map[string]int) - for i := 0; i < v.NumField(); i++ { - cache[t.Field(i).Name] = i - } - fieldCacheMutex.Lock() - fieldCache[t] = cache - fieldCacheMutex.Unlock() - } - - if i, ok := cache[name]; ok { - return v.Field(i) - } - - return reflect.Zero(t) -} - -// scan data to a struct's pointer according field name -func (rs *Rows) ScanStructByName(dest interface{}) error { - vv := reflect.ValueOf(dest) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Struct { - return errors.New("dest should be a struct's pointer") - } - - cols, err := rs.Columns() - if err != nil { - return err - } - - newDest := make([]interface{}, len(cols)) - var v EmptyScanner - for j, name := range cols { - f := fieldByName(vv.Elem(), rs.db.Mapper.Table2Obj(name)) - if f.IsValid() { - newDest[j] = f.Addr().Interface() - } else { - newDest[j] = &v - } - } - - return rs.Rows.Scan(newDest...) -} - -// scan data to a slice's pointer, slice's length should equal to columns' number -func (rs *Rows) ScanSlice(dest interface{}) error { - vv := reflect.ValueOf(dest) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Slice { - return errors.New("dest should be a slice's pointer") - } - - vvv := vv.Elem() - cols, err := rs.Columns() - if err != nil { - return err - } - - newDest := make([]interface{}, len(cols)) - - for j := 0; j < len(cols); j++ { - if j >= vvv.Len() { - newDest[j] = reflect.New(vvv.Type().Elem()).Interface() - } else { - newDest[j] = vvv.Index(j).Addr().Interface() - } - } - - err = rs.Rows.Scan(newDest...) - if err != nil { - return err - } - - srcLen := vvv.Len() - for i := srcLen; i < len(cols); i++ { - vvv = reflect.Append(vvv, reflect.ValueOf(newDest[i]).Elem()) - } - return nil -} - -// scan data to a map's pointer -func (rs *Rows) ScanMap(dest interface{}) error { - vv := reflect.ValueOf(dest) - if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map { - return errors.New("dest should be a map's pointer") - } - - cols, err := rs.Columns() - if err != nil { - return err - } - - newDest := make([]interface{}, len(cols)) - vvv := vv.Elem() - - for i, _ := range cols { - newDest[i] = rs.db.reflectNew(vvv.Type().Elem()).Interface() - } - - err = rs.Rows.Scan(newDest...) - if err != nil { - return err - } - - for i, name := range cols { - vname := reflect.ValueOf(name) - vvv.SetMapIndex(vname, reflect.ValueOf(newDest[i]).Elem()) - } - - return nil -} - -type Row struct { - rows *Rows - // One of these two will be non-nil: - err error // deferred error for easy chaining -} - -// ErrorRow return an error row -func ErrorRow(err error) *Row { - return &Row{ - err: err, - } -} - -// NewRow from rows -func NewRow(rows *Rows, err error) *Row { - return &Row{rows, err} -} - -func (row *Row) Columns() ([]string, error) { - if row.err != nil { - return nil, row.err - } - return row.rows.Columns() -} - -func (row *Row) Scan(dest ...interface{}) error { - if row.err != nil { - return row.err - } - defer row.rows.Close() - - for _, dp := range dest { - if _, ok := dp.(*sql.RawBytes); ok { - return errors.New("sql: RawBytes isn't allowed on Row.Scan") - } - } - - if !row.rows.Next() { - if err := row.rows.Err(); err != nil { - return err - } - return sql.ErrNoRows - } - err := row.rows.Scan(dest...) - if err != nil { - return err - } - // Make sure the query can be processed to completion with no errors. - return row.rows.Close() -} - -func (row *Row) ScanStructByName(dest interface{}) error { - if row.err != nil { - return row.err - } - defer row.rows.Close() - - if !row.rows.Next() { - if err := row.rows.Err(); err != nil { - return err - } - return sql.ErrNoRows - } - err := row.rows.ScanStructByName(dest) - if err != nil { - return err - } - // Make sure the query can be processed to completion with no errors. - return row.rows.Close() -} - -func (row *Row) ScanStructByIndex(dest interface{}) error { - if row.err != nil { - return row.err - } - defer row.rows.Close() - - if !row.rows.Next() { - if err := row.rows.Err(); err != nil { - return err - } - return sql.ErrNoRows - } - err := row.rows.ScanStructByIndex(dest) - if err != nil { - return err - } - // Make sure the query can be processed to completion with no errors. - return row.rows.Close() -} - -// scan data to a slice's pointer, slice's length should equal to columns' number -func (row *Row) ScanSlice(dest interface{}) error { - if row.err != nil { - return row.err - } - defer row.rows.Close() - - if !row.rows.Next() { - if err := row.rows.Err(); err != nil { - return err - } - return sql.ErrNoRows - } - err := row.rows.ScanSlice(dest) - if err != nil { - return err - } - - // Make sure the query can be processed to completion with no errors. - return row.rows.Close() -} - -// scan data to a map's pointer -func (row *Row) ScanMap(dest interface{}) error { - if row.err != nil { - return row.err - } - defer row.rows.Close() - - if !row.rows.Next() { - if err := row.rows.Err(); err != nil { - return err - } - return sql.ErrNoRows - } - err := row.rows.ScanMap(dest) - if err != nil { - return err - } - - // Make sure the query can be processed to completion with no errors. - return row.rows.Close() -} - -func (row *Row) ToMapString() (map[string]string, error) { - cols, err := row.Columns() - if err != nil { - return nil, err - } - - var record = make(map[string]string, len(cols)) - err = row.ScanMap(&record) - if err != nil { - return nil, err - } - - return record, nil -} diff --git a/vendor/github.com/go-xorm/core/scan.go b/vendor/github.com/go-xorm/core/scan.go deleted file mode 100644 index b7c159b27..000000000 --- a/vendor/github.com/go-xorm/core/scan.go +++ /dev/null @@ -1,55 +0,0 @@ -package core - -import ( - "database/sql/driver" - "fmt" - "time" -) - -type NullTime time.Time - -var ( - _ driver.Valuer = NullTime{} -) - -func (ns *NullTime) Scan(value interface{}) error { - if value == nil { - return nil - } - return convertTime(ns, value) -} - -// Value implements the driver Valuer interface. -func (ns NullTime) Value() (driver.Value, error) { - if (time.Time)(ns).IsZero() { - return nil, nil - } - return (time.Time)(ns).Format("2006-01-02 15:04:05"), nil -} - -func convertTime(dest *NullTime, src interface{}) error { - // Common cases, without reflect. - switch s := src.(type) { - case string: - t, err := time.Parse("2006-01-02 15:04:05", s) - if err != nil { - return err - } - *dest = NullTime(t) - return nil - case []uint8: - t, err := time.Parse("2006-01-02 15:04:05", string(s)) - if err != nil { - return err - } - *dest = NullTime(t) - return nil - case time.Time: - *dest = NullTime(s) - return nil - case nil: - default: - return fmt.Errorf("unsupported driver -> Scan pair: %T -> %T", src, dest) - } - return nil -} diff --git a/vendor/github.com/go-xorm/core/table.go b/vendor/github.com/go-xorm/core/table.go deleted file mode 100644 index b5d079404..000000000 --- a/vendor/github.com/go-xorm/core/table.go +++ /dev/null @@ -1,150 +0,0 @@ -package core - -import ( - "reflect" - "strings" -) - -// database table -type Table struct { - Name string - Type reflect.Type - columnsSeq []string - columnsMap map[string][]*Column - columns []*Column - Indexes map[string]*Index - PrimaryKeys []string - AutoIncrement string - Created map[string]bool - Updated string - Deleted string - Version string - Cacher Cacher - StoreEngine string - Charset string - Comment string -} - -func (table *Table) Columns() []*Column { - return table.columns -} - -func (table *Table) ColumnsSeq() []string { - return table.columnsSeq -} - -func NewEmptyTable() *Table { - return NewTable("", nil) -} - -func NewTable(name string, t reflect.Type) *Table { - return &Table{Name: name, Type: t, - columnsSeq: make([]string, 0), - columns: make([]*Column, 0), - columnsMap: make(map[string][]*Column), - Indexes: make(map[string]*Index), - Created: make(map[string]bool), - PrimaryKeys: make([]string, 0), - } -} - -func (table *Table) columnsByName(name string) []*Column { - n := len(name) - - for k := range table.columnsMap { - if len(k) != n { - continue - } - if strings.EqualFold(k, name) { - return table.columnsMap[k] - } - } - return nil -} - -func (table *Table) GetColumn(name string) *Column { - - cols := table.columnsByName(name) - - if cols != nil { - return cols[0] - } - - return nil -} - -func (table *Table) GetColumnIdx(name string, idx int) *Column { - cols := table.columnsByName(name) - - if cols != nil && idx < len(cols) { - return cols[idx] - } - - return nil -} - -// if has primary key, return column -func (table *Table) PKColumns() []*Column { - columns := make([]*Column, len(table.PrimaryKeys)) - for i, name := range table.PrimaryKeys { - columns[i] = table.GetColumn(name) - } - return columns -} - -func (table *Table) ColumnType(name string) reflect.Type { - t, _ := table.Type.FieldByName(name) - return t.Type -} - -func (table *Table) AutoIncrColumn() *Column { - return table.GetColumn(table.AutoIncrement) -} - -func (table *Table) VersionColumn() *Column { - return table.GetColumn(table.Version) -} - -func (table *Table) UpdatedColumn() *Column { - return table.GetColumn(table.Updated) -} - -func (table *Table) DeletedColumn() *Column { - return table.GetColumn(table.Deleted) -} - -// add a column to table -func (table *Table) AddColumn(col *Column) { - table.columnsSeq = append(table.columnsSeq, col.Name) - table.columns = append(table.columns, col) - colName := strings.ToLower(col.Name) - if c, ok := table.columnsMap[colName]; ok { - table.columnsMap[colName] = append(c, col) - } else { - table.columnsMap[colName] = []*Column{col} - } - - if col.IsPrimaryKey { - table.PrimaryKeys = append(table.PrimaryKeys, col.Name) - } - if col.IsAutoIncrement { - table.AutoIncrement = col.Name - } - if col.IsCreated { - table.Created[col.Name] = true - } - if col.IsUpdated { - table.Updated = col.Name - } - if col.IsDeleted { - table.Deleted = col.Name - } - if col.IsVersion { - table.Version = col.Name - } -} - -// add an index or an unique to table -func (table *Table) AddIndex(index *Index) { - table.Indexes[index.Name] = index -} diff --git a/vendor/github.com/go-xorm/core/type.go b/vendor/github.com/go-xorm/core/type.go deleted file mode 100644 index 5cbf93057..000000000 --- a/vendor/github.com/go-xorm/core/type.go +++ /dev/null @@ -1,311 +0,0 @@ -package core - -import ( - "reflect" - "sort" - "strings" - "time" -) - -const ( - POSTGRES = "postgres" - SQLITE = "sqlite3" - MYSQL = "mysql" - MSSQL = "mssql" - ORACLE = "oracle" -) - -// xorm SQL types -type SQLType struct { - Name string - DefaultLength int - DefaultLength2 int -} - -const ( - UNKNOW_TYPE = iota - TEXT_TYPE - BLOB_TYPE - TIME_TYPE - NUMERIC_TYPE -) - -func (s *SQLType) IsType(st int) bool { - if t, ok := SqlTypes[s.Name]; ok && t == st { - return true - } - return false -} - -func (s *SQLType) IsText() bool { - return s.IsType(TEXT_TYPE) -} - -func (s *SQLType) IsBlob() bool { - return s.IsType(BLOB_TYPE) -} - -func (s *SQLType) IsTime() bool { - return s.IsType(TIME_TYPE) -} - -func (s *SQLType) IsNumeric() bool { - return s.IsType(NUMERIC_TYPE) -} - -func (s *SQLType) IsJson() bool { - return s.Name == Json || s.Name == Jsonb -} - -var ( - Bit = "BIT" - TinyInt = "TINYINT" - SmallInt = "SMALLINT" - MediumInt = "MEDIUMINT" - Int = "INT" - Integer = "INTEGER" - BigInt = "BIGINT" - - Enum = "ENUM" - Set = "SET" - - Char = "CHAR" - Varchar = "VARCHAR" - NVarchar = "NVARCHAR" - TinyText = "TINYTEXT" - Text = "TEXT" - NText = "NTEXT" - Clob = "CLOB" - MediumText = "MEDIUMTEXT" - LongText = "LONGTEXT" - Uuid = "UUID" - UniqueIdentifier = "UNIQUEIDENTIFIER" - SysName = "SYSNAME" - - Date = "DATE" - DateTime = "DATETIME" - Time = "TIME" - TimeStamp = "TIMESTAMP" - TimeStampz = "TIMESTAMPZ" - - Decimal = "DECIMAL" - Numeric = "NUMERIC" - - Real = "REAL" - Float = "FLOAT" - Double = "DOUBLE" - - Binary = "BINARY" - VarBinary = "VARBINARY" - TinyBlob = "TINYBLOB" - Blob = "BLOB" - MediumBlob = "MEDIUMBLOB" - LongBlob = "LONGBLOB" - Bytea = "BYTEA" - - Bool = "BOOL" - Boolean = "BOOLEAN" - - Serial = "SERIAL" - BigSerial = "BIGSERIAL" - - Json = "JSON" - Jsonb = "JSONB" - - SqlTypes = map[string]int{ - Bit: NUMERIC_TYPE, - TinyInt: NUMERIC_TYPE, - SmallInt: NUMERIC_TYPE, - MediumInt: NUMERIC_TYPE, - Int: NUMERIC_TYPE, - Integer: NUMERIC_TYPE, - BigInt: NUMERIC_TYPE, - - Enum: TEXT_TYPE, - Set: TEXT_TYPE, - Json: TEXT_TYPE, - Jsonb: TEXT_TYPE, - - Char: TEXT_TYPE, - Varchar: TEXT_TYPE, - NVarchar: TEXT_TYPE, - TinyText: TEXT_TYPE, - Text: TEXT_TYPE, - NText: TEXT_TYPE, - MediumText: TEXT_TYPE, - LongText: TEXT_TYPE, - Uuid: TEXT_TYPE, - Clob: TEXT_TYPE, - SysName: TEXT_TYPE, - - Date: TIME_TYPE, - DateTime: TIME_TYPE, - Time: TIME_TYPE, - TimeStamp: TIME_TYPE, - TimeStampz: TIME_TYPE, - - Decimal: NUMERIC_TYPE, - Numeric: NUMERIC_TYPE, - Real: NUMERIC_TYPE, - Float: NUMERIC_TYPE, - Double: NUMERIC_TYPE, - - Binary: BLOB_TYPE, - VarBinary: BLOB_TYPE, - - TinyBlob: BLOB_TYPE, - Blob: BLOB_TYPE, - MediumBlob: BLOB_TYPE, - LongBlob: BLOB_TYPE, - Bytea: BLOB_TYPE, - UniqueIdentifier: BLOB_TYPE, - - Bool: NUMERIC_TYPE, - - Serial: NUMERIC_TYPE, - BigSerial: NUMERIC_TYPE, - } - - intTypes = sort.StringSlice{"*int", "*int16", "*int32", "*int8"} - uintTypes = sort.StringSlice{"*uint", "*uint16", "*uint32", "*uint8"} -) - -// !nashtsai! treat following var as interal const values, these are used for reflect.TypeOf comparison -var ( - c_EMPTY_STRING string - c_BOOL_DEFAULT bool - c_BYTE_DEFAULT byte - c_COMPLEX64_DEFAULT complex64 - c_COMPLEX128_DEFAULT complex128 - c_FLOAT32_DEFAULT float32 - c_FLOAT64_DEFAULT float64 - c_INT64_DEFAULT int64 - c_UINT64_DEFAULT uint64 - c_INT32_DEFAULT int32 - c_UINT32_DEFAULT uint32 - c_INT16_DEFAULT int16 - c_UINT16_DEFAULT uint16 - c_INT8_DEFAULT int8 - c_UINT8_DEFAULT uint8 - c_INT_DEFAULT int - c_UINT_DEFAULT uint - c_TIME_DEFAULT time.Time -) - -var ( - IntType = reflect.TypeOf(c_INT_DEFAULT) - Int8Type = reflect.TypeOf(c_INT8_DEFAULT) - Int16Type = reflect.TypeOf(c_INT16_DEFAULT) - Int32Type = reflect.TypeOf(c_INT32_DEFAULT) - Int64Type = reflect.TypeOf(c_INT64_DEFAULT) - - UintType = reflect.TypeOf(c_UINT_DEFAULT) - Uint8Type = reflect.TypeOf(c_UINT8_DEFAULT) - Uint16Type = reflect.TypeOf(c_UINT16_DEFAULT) - Uint32Type = reflect.TypeOf(c_UINT32_DEFAULT) - Uint64Type = reflect.TypeOf(c_UINT64_DEFAULT) - - Float32Type = reflect.TypeOf(c_FLOAT32_DEFAULT) - Float64Type = reflect.TypeOf(c_FLOAT64_DEFAULT) - - Complex64Type = reflect.TypeOf(c_COMPLEX64_DEFAULT) - Complex128Type = reflect.TypeOf(c_COMPLEX128_DEFAULT) - - StringType = reflect.TypeOf(c_EMPTY_STRING) - BoolType = reflect.TypeOf(c_BOOL_DEFAULT) - ByteType = reflect.TypeOf(c_BYTE_DEFAULT) - BytesType = reflect.SliceOf(ByteType) - - TimeType = reflect.TypeOf(c_TIME_DEFAULT) -) - -var ( - PtrIntType = reflect.PtrTo(IntType) - PtrInt8Type = reflect.PtrTo(Int8Type) - PtrInt16Type = reflect.PtrTo(Int16Type) - PtrInt32Type = reflect.PtrTo(Int32Type) - PtrInt64Type = reflect.PtrTo(Int64Type) - - PtrUintType = reflect.PtrTo(UintType) - PtrUint8Type = reflect.PtrTo(Uint8Type) - PtrUint16Type = reflect.PtrTo(Uint16Type) - PtrUint32Type = reflect.PtrTo(Uint32Type) - PtrUint64Type = reflect.PtrTo(Uint64Type) - - PtrFloat32Type = reflect.PtrTo(Float32Type) - PtrFloat64Type = reflect.PtrTo(Float64Type) - - PtrComplex64Type = reflect.PtrTo(Complex64Type) - PtrComplex128Type = reflect.PtrTo(Complex128Type) - - PtrStringType = reflect.PtrTo(StringType) - PtrBoolType = reflect.PtrTo(BoolType) - PtrByteType = reflect.PtrTo(ByteType) - - PtrTimeType = reflect.PtrTo(TimeType) -) - -// Type2SQLType generate SQLType acorrding Go's type -func Type2SQLType(t reflect.Type) (st SQLType) { - switch k := t.Kind(); k { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32: - st = SQLType{Int, 0, 0} - case reflect.Int64, reflect.Uint64: - st = SQLType{BigInt, 0, 0} - case reflect.Float32: - st = SQLType{Float, 0, 0} - case reflect.Float64: - st = SQLType{Double, 0, 0} - case reflect.Complex64, reflect.Complex128: - st = SQLType{Varchar, 64, 0} - case reflect.Array, reflect.Slice, reflect.Map: - if t.Elem() == reflect.TypeOf(c_BYTE_DEFAULT) { - st = SQLType{Blob, 0, 0} - } else { - st = SQLType{Text, 0, 0} - } - case reflect.Bool: - st = SQLType{Bool, 0, 0} - case reflect.String: - st = SQLType{Varchar, 255, 0} - case reflect.Struct: - if t.ConvertibleTo(TimeType) { - st = SQLType{DateTime, 0, 0} - } else { - // TODO need to handle association struct - st = SQLType{Text, 0, 0} - } - case reflect.Ptr: - st = Type2SQLType(t.Elem()) - default: - st = SQLType{Text, 0, 0} - } - return -} - -// default sql type change to go types -func SQLType2Type(st SQLType) reflect.Type { - name := strings.ToUpper(st.Name) - switch name { - case Bit, TinyInt, SmallInt, MediumInt, Int, Integer, Serial: - return reflect.TypeOf(1) - case BigInt, BigSerial: - return reflect.TypeOf(int64(1)) - case Float, Real: - return reflect.TypeOf(float32(1)) - case Double: - return reflect.TypeOf(float64(1)) - case Char, Varchar, NVarchar, TinyText, Text, NText, MediumText, LongText, Enum, Set, Uuid, Clob, SysName: - return reflect.TypeOf("") - case TinyBlob, Blob, LongBlob, Bytea, Binary, MediumBlob, VarBinary, UniqueIdentifier: - return reflect.TypeOf([]byte{}) - case Bool: - return reflect.TypeOf(true) - case DateTime, Date, Time, TimeStamp, TimeStampz: - return reflect.TypeOf(c_TIME_DEFAULT) - case Decimal, Numeric: - return reflect.TypeOf("") - default: - return reflect.TypeOf("") - } -} diff --git a/vendor/github.com/go-xorm/xorm/CONTRIBUTING.md b/vendor/github.com/go-xorm/xorm/CONTRIBUTING.md deleted file mode 100644 index 37f4bc5fa..000000000 --- a/vendor/github.com/go-xorm/xorm/CONTRIBUTING.md +++ /dev/null @@ -1,46 +0,0 @@ -## Contributing to xorm - -`xorm` has a backlog of [pull requests](https://help.github.com/articles/using-pull-requests), but contributions are still very -much welcome. You can help with patch review, submitting bug reports, -or adding new functionality. There is no formal style guide, but -please conform to the style of existing code and general Go formatting -conventions when submitting patches. - -* [fork a repo](https://help.github.com/articles/fork-a-repo) -* [creating a pull request ](https://help.github.com/articles/creating-a-pull-request) - -### Language - -Since `xorm` is a world-wide open source project, please describe your issues or code changes in English as soon as possible. - -### Sign your codes with comments -``` -// !! your comments - -e.g., - -// !lunny! this is comments made by lunny -``` - -### Patch review - -Help review existing open [pull requests](https://help.github.com/articles/using-pull-requests) by commenting on the code or -proposed functionality. - -### Bug reports - -We appreciate any bug reports, but especially ones with self-contained -(doesn't depend on code outside of xorm), minimal (can't be simplified -further) test cases. It's especially helpful if you can submit a pull -request with just the failing test case(you can find some example test file like [session_get_test.go](https://github.com/go-xorm/xorm/blob/master/session_get_test.go)). - -If you implements a new database interface, you maybe need to add a test_.sh file. -For example, [mysql_test.go](https://github.com/go-xorm/xorm/blob/master/test_mysql.sh) - -### New functionality - -There are a number of pending patches for new functionality, so -additional feature patches will take a while to merge. Still, patches -are generally reviewed based on usefulness and complexity in addition -to time-in-queue, so if you have a knockout idea, take a shot. Feel -free to open an issue discussion your proposed patch beforehand. diff --git a/vendor/github.com/go-xorm/xorm/LICENSE b/vendor/github.com/go-xorm/xorm/LICENSE deleted file mode 100644 index 84d2ae538..000000000 --- a/vendor/github.com/go-xorm/xorm/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2013 - 2015 The Xorm 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 the {organization} 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/go-xorm/xorm/README.md b/vendor/github.com/go-xorm/xorm/README.md deleted file mode 100644 index 2443e4ef1..000000000 --- a/vendor/github.com/go-xorm/xorm/README.md +++ /dev/null @@ -1,444 +0,0 @@ -# xorm - -[中文](https://github.com/go-xorm/xorm/blob/master/README_CN.md) - -Xorm is a simple and powerful ORM for Go. - -[![CircleCI](https://circleci.com/gh/go-xorm/xorm.svg?style=shield)](https://circleci.com/gh/go-xorm/xorm) [![codecov](https://codecov.io/gh/go-xorm/xorm/branch/master/graph/badge.svg)](https://codecov.io/gh/go-xorm/xorm) -[![](https://goreportcard.com/badge/github.com/go-xorm/xorm)](https://goreportcard.com/report/github.com/go-xorm/xorm) -[![Join the chat at https://img.shields.io/discord/323460943201959939.svg](https://img.shields.io/discord/323460943201959939.svg)](https://discord.gg/HuR2CF3) - -## Features - -* Struct <-> Table Mapping Support - -* Chainable APIs - -* Transaction Support - -* Both ORM and raw SQL operation Support - -* Sync database schema Support - -* Query Cache speed up - -* Database Reverse support, See [Xorm Tool README](https://github.com/go-xorm/cmd/blob/master/README.md) - -* Simple cascade loading support - -* Optimistic Locking support - -* SQL Builder support via [github.com/go-xorm/builder](https://github.com/go-xorm/builder) - -* Automatical Read/Write seperatelly - -* Postgres schema support - -## Drivers Support - -Drivers for Go's sql package which currently support database/sql includes: - -* Mysql: [github.com/go-sql-driver/mysql](https://github.com/go-sql-driver/mysql) - -* MyMysql: [github.com/ziutek/mymysql/godrv](https://github.com/ziutek/mymysql/tree/master/godrv) - -* Postgres: [github.com/lib/pq](https://github.com/lib/pq) - -* Tidb: [github.com/pingcap/tidb](https://github.com/pingcap/tidb) - -* SQLite: [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) - -* MsSql: [github.com/denisenkom/go-mssqldb](https://github.com/denisenkom/go-mssqldb) - -* Oracle: [github.com/mattn/go-oci8](https://github.com/mattn/go-oci8) (experiment) - -## Installation - - go get github.com/go-xorm/xorm - -## Documents - -* [Manual](http://xorm.io/docs) - -* [GoDoc](http://godoc.org/github.com/go-xorm/xorm) - -## Quick Start - -* Create Engine - -```Go -engine, err := xorm.NewEngine(driverName, dataSourceName) -``` - -* Define a struct and Sync2 table struct to database - -```Go -type User struct { - Id int64 - Name string - Salt string - Age int - Passwd string `xorm:"varchar(200)"` - Created time.Time `xorm:"created"` - Updated time.Time `xorm:"updated"` -} - -err := engine.Sync2(new(User)) -``` - -* Create Engine Group - -```Go -dataSourceNameSlice := []string{masterDataSourceName, slave1DataSourceName, slave2DataSourceName} -engineGroup, err := xorm.NewEngineGroup(driverName, dataSourceNameSlice) -``` - -```Go -masterEngine, err := xorm.NewEngine(driverName, masterDataSourceName) -slave1Engine, err := xorm.NewEngine(driverName, slave1DataSourceName) -slave2Engine, err := xorm.NewEngine(driverName, slave2DataSourceName) -engineGroup, err := xorm.NewEngineGroup(masterEngine, []*Engine{slave1Engine, slave2Engine}) -``` - -Then all place where `engine` you can just use `engineGroup`. - -* `Query` runs a SQL string, the returned results is `[]map[string][]byte`, `QueryString` returns `[]map[string]string`, `QueryInterface` returns `[]map[string]interface{}`. - -```Go -results, err := engine.Query("select * from user") -results, err := engine.Where("a = 1").Query() - -results, err := engine.QueryString("select * from user") -results, err := engine.Where("a = 1").QueryString() - -results, err := engine.QueryInterface("select * from user") -results, err := engine.Where("a = 1").QueryInterface() -``` - -* `Exec` runs a SQL string, it returns `affected` and `error` - -```Go -affected, err := engine.Exec("update user set age = ? where name = ?", age, name) -``` - -* `Insert` one or multiple records to database - -```Go -affected, err := engine.Insert(&user) -// INSERT INTO struct () values () - -affected, err := engine.Insert(&user1, &user2) -// INSERT INTO struct1 () values () -// INSERT INTO struct2 () values () - -affected, err := engine.Insert(&users) -// INSERT INTO struct () values (),(),() - -affected, err := engine.Insert(&user1, &users) -// INSERT INTO struct1 () values () -// INSERT INTO struct2 () values (),(),() -``` - -* `Get` query one record from database - -```Go -has, err := engine.Get(&user) -// SELECT * FROM user LIMIT 1 - -has, err := engine.Where("name = ?", name).Desc("id").Get(&user) -// SELECT * FROM user WHERE name = ? ORDER BY id DESC LIMIT 1 - -var name string -has, err := engine.Where("id = ?", id).Cols("name").Get(&name) -// SELECT name FROM user WHERE id = ? - -var id int64 -has, err := engine.Where("name = ?", name).Cols("id").Get(&id) -has, err := engine.SQL("select id from user").Get(&id) -// SELECT id FROM user WHERE name = ? - -var valuesMap = make(map[string]string) -has, err := engine.Where("id = ?", id).Get(&valuesMap) -// SELECT * FROM user WHERE id = ? - -var valuesSlice = make([]interface{}, len(cols)) -has, err := engine.Where("id = ?", id).Cols(cols...).Get(&valuesSlice) -// SELECT col1, col2, col3 FROM user WHERE id = ? -``` - -* `Exist` check if one record exist on table - -```Go -has, err := testEngine.Exist(new(RecordExist)) -// SELECT * FROM record_exist LIMIT 1 - -has, err = testEngine.Exist(&RecordExist{ - Name: "test1", - }) -// SELECT * FROM record_exist WHERE name = ? LIMIT 1 - -has, err = testEngine.Where("name = ?", "test1").Exist(&RecordExist{}) -// SELECT * FROM record_exist WHERE name = ? LIMIT 1 - -has, err = testEngine.SQL("select * from record_exist where name = ?", "test1").Exist() -// select * from record_exist where name = ? - -has, err = testEngine.Table("record_exist").Exist() -// SELECT * FROM record_exist LIMIT 1 - -has, err = testEngine.Table("record_exist").Where("name = ?", "test1").Exist() -// SELECT * FROM record_exist WHERE name = ? LIMIT 1 -``` - -* `Find` query multiple records from database, also you can use join and extends - -```Go -var users []User -err := engine.Where("name = ?", name).And("age > 10").Limit(10, 0).Find(&users) -// SELECT * FROM user WHERE name = ? AND age > 10 limit 10 offset 0 - -type Detail struct { - Id int64 - UserId int64 `xorm:"index"` -} - -type UserDetail struct { - User `xorm:"extends"` - Detail `xorm:"extends"` -} - -var users []UserDetail -err := engine.Table("user").Select("user.*, detail.*"). - Join("INNER", "detail", "detail.user_id = user.id"). - Where("user.name = ?", name).Limit(10, 0). - Find(&users) -// SELECT user.*, detail.* FROM user INNER JOIN detail WHERE user.name = ? limit 10 offset 0 -``` - -* `Iterate` and `Rows` query multiple records and record by record handle, there are two methods Iterate and Rows - -```Go -err := engine.Iterate(&User{Name:name}, func(idx int, bean interface{}) error { - user := bean.(*User) - return nil -}) -// SELECT * FROM user - -err := engine.BufferSize(100).Iterate(&User{Name:name}, func(idx int, bean interface{}) error { - user := bean.(*User) - return nil -}) -// SELECT * FROM user Limit 0, 100 -// SELECT * FROM user Limit 101, 100 - -rows, err := engine.Rows(&User{Name:name}) -// SELECT * FROM user -defer rows.Close() -bean := new(Struct) -for rows.Next() { - err = rows.Scan(bean) -} -``` - -* `Update` update one or more records, default will update non-empty and non-zero fields except when you use Cols, AllCols and so on. - -```Go -affected, err := engine.ID(1).Update(&user) -// UPDATE user SET ... Where id = ? - -affected, err := engine.Update(&user, &User{Name:name}) -// UPDATE user SET ... Where name = ? - -var ids = []int64{1, 2, 3} -affected, err := engine.In("id", ids).Update(&user) -// UPDATE user SET ... Where id IN (?, ?, ?) - -// force update indicated columns by Cols -affected, err := engine.ID(1).Cols("age").Update(&User{Name:name, Age: 12}) -// UPDATE user SET age = ?, updated=? Where id = ? - -// force NOT update indicated columns by Omit -affected, err := engine.ID(1).Omit("name").Update(&User{Name:name, Age: 12}) -// UPDATE user SET age = ?, updated=? Where id = ? - -affected, err := engine.ID(1).AllCols().Update(&user) -// UPDATE user SET name=?,age=?,salt=?,passwd=?,updated=? Where id = ? -``` - -* `Delete` delete one or more records, Delete MUST have condition - -```Go -affected, err := engine.Where(...).Delete(&user) -// DELETE FROM user Where ... - -affected, err := engine.ID(2).Delete(&user) -// DELETE FROM user Where id = ? -``` - -* `Count` count records - -```Go -counts, err := engine.Count(&user) -// SELECT count(*) AS total FROM user -``` - -* `Sum` sum functions - -```Go -agesFloat64, err := engine.Sum(&user, "age") -// SELECT sum(age) AS total FROM user - -agesInt64, err := engine.SumInt(&user, "age") -// SELECT sum(age) AS total FROM user - -sumFloat64Slice, err := engine.Sums(&user, "age", "score") -// SELECT sum(age), sum(score) FROM user - -sumInt64Slice, err := engine.SumsInt(&user, "age", "score") -// SELECT sum(age), sum(score) FROM user -``` - -* Query conditions builder - -```Go -err := engine.Where(builder.NotIn("a", 1, 2).And(builder.In("b", "c", "d", "e"))).Find(&users) -// SELECT id, name ... FROM user WHERE a NOT IN (?, ?) AND b IN (?, ?, ?) -``` - -* Multiple operations in one go routine, no transation here but resue session memory - -```Go -session := engine.NewSession() -defer session.Close() - -user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()} -if _, err := session.Insert(&user1); err != nil { - return err -} - -user2 := Userinfo{Username: "yyy"} -if _, err := session.Where("id = ?", 2).Update(&user2); err != nil { - return err -} - -if _, err := session.Exec("delete from userinfo where username = ?", user2.Username); err != nil { - return err -} - -return nil -``` - -* Transation should on one go routine. There is transaction and resue session memory - -```Go -session := engine.NewSession() -defer session.Close() - -// add Begin() before any action -if err := session.Begin(); err != nil { - // if returned then will rollback automatically - return err -} - -user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()} -if _, err := session.Insert(&user1); err != nil { - return err -} - -user2 := Userinfo{Username: "yyy"} -if _, err := session.Where("id = ?", 2).Update(&user2); err != nil { - return err -} - -if _, err := session.Exec("delete from userinfo where username = ?", user2.Username); err != nil { - return err -} - -// add Commit() after all actions -return session.Commit() -``` - -## Contributing - -If you want to pull request, please see [CONTRIBUTING](https://github.com/go-xorm/xorm/blob/master/CONTRIBUTING.md). And we also provide [Xorm on Google Groups](https://groups.google.com/forum/#!forum/xorm) to discuss. - -## Credits - -### 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/xorm#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/xorm#sponsor)] - -## Changelog - -* **v0.7.0** - * Some bugs fixed - -* **v0.6.6** - * Some bugs fixed - -* **v0.6.5** - * Postgres schema support - * vgo support - * Add FindAndCount - * Database special params support via NewEngineWithParams - * Some bugs fixed - -* **v0.6.4** - * Automatical Read/Write seperatelly - * Query/QueryString/QueryInterface and action with Where/And - * Get support non-struct variables - * BufferSize on Iterate - * fix some other bugs. - -[More changes ...](https://github.com/go-xorm/manual-en-US/tree/master/chapter-16) - -## Cases - -* [studygolang](http://studygolang.com/) - [github.com/studygolang/studygolang](https://github.com/studygolang/studygolang) - -* [Gitea](http://gitea.io) - [github.com/go-gitea/gitea](http://github.com/go-gitea/gitea) - -* [Gogs](http://try.gogits.org) - [github.com/gogits/gogs](http://github.com/gogits/gogs) - -* [grafana](https://grafana.com/) - [github.com/grafana/grafana](http://github.com/grafana/grafana) - -* [github.com/m3ng9i/qreader](https://github.com/m3ng9i/qreader) - -* [Wego](http://github.com/go-tango/wego) - -* [Docker.cn](https://docker.cn/) - -* [Xorm Adapter](https://github.com/casbin/xorm-adapter) for [Casbin](https://github.com/casbin/casbin) - [github.com/casbin/xorm-adapter](https://github.com/casbin/xorm-adapter) - -* [Gorevel](http://gorevel.cn/) - [github.com/goofcc/gorevel](http://github.com/goofcc/gorevel) - -* [Gowalker](http://gowalker.org) - [github.com/Unknwon/gowalker](http://github.com/Unknwon/gowalker) - -* [Gobuild.io](http://gobuild.io) - [github.com/shxsun/gobuild](http://github.com/shxsun/gobuild) - -* [Sudo China](http://sudochina.com) - [github.com/insionng/toropress](http://github.com/insionng/toropress) - -* [Godaily](http://godaily.org) - [github.com/govc/godaily](http://github.com/govc/godaily) - -* [YouGam](http://www.yougam.com/) - -* [GoCMS - github.com/zzboy/GoCMS](https://github.com/zzdboy/GoCMS) - -* [GoBBS - gobbs.domolo.com](http://gobbs.domolo.com/) - -* [go-blog](http://wangcheng.me) - [github.com/easykoo/go-blog](https://github.com/easykoo/go-blog) - -## LICENSE - -BSD License [http://creativecommons.org/licenses/BSD/](http://creativecommons.org/licenses/BSD/) \ No newline at end of file diff --git a/vendor/github.com/go-xorm/xorm/README_CN.md b/vendor/github.com/go-xorm/xorm/README_CN.md deleted file mode 100644 index c51cec05a..000000000 --- a/vendor/github.com/go-xorm/xorm/README_CN.md +++ /dev/null @@ -1,446 +0,0 @@ -# xorm - -[English](https://github.com/go-xorm/xorm/blob/master/README.md) - -xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 - -[![CircleCI](https://circleci.com/gh/go-xorm/xorm.svg?style=shield)](https://circleci.com/gh/go-xorm/xorm) [![codecov](https://codecov.io/gh/go-xorm/xorm/branch/master/graph/badge.svg)](https://codecov.io/gh/go-xorm/xorm) -[![](https://goreportcard.com/badge/github.com/go-xorm/xorm)](https://goreportcard.com/report/github.com/go-xorm/xorm) -[![Join the chat at https://img.shields.io/discord/323460943201959939.svg](https://img.shields.io/discord/323460943201959939.svg)](https://discord.gg/HuR2CF3) - -## 特性 - -* 支持Struct和数据库表之间的灵活映射,并支持自动同步 - -* 事务支持 - -* 同时支持原始SQL语句和ORM操作的混合执行 - -* 使用连写来简化调用 - -* 支持使用Id, In, Where, Limit, Join, Having, Table, Sql, Cols等函数和结构体等方式作为条件 - -* 支持级联加载Struct - -* Schema支持(仅Postgres) - -* 支持缓存 - -* 支持根据数据库自动生成xorm的结构体 - -* 支持记录版本(即乐观锁) - -* 内置SQL Builder支持 - -## 驱动支持 - -目前支持的Go数据库驱动和对应的数据库如下: - -* Mysql: [github.com/go-sql-driver/mysql](https://github.com/go-sql-driver/mysql) - -* MyMysql: [github.com/ziutek/mymysql/godrv](https://github.com/ziutek/mymysql/godrv) - -* Postgres: [github.com/lib/pq](https://github.com/lib/pq) - -* Tidb: [github.com/pingcap/tidb](https://github.com/pingcap/tidb) - -* SQLite: [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) - -* MsSql: [github.com/denisenkom/go-mssqldb](https://github.com/denisenkom/go-mssqldb) - -* MsSql: [github.com/lunny/godbc](https://github.com/lunny/godbc) - -* Oracle: [github.com/mattn/go-oci8](https://github.com/mattn/go-oci8) (试验性支持) - -## 安装 - - go get github.com/go-xorm/xorm - -## 文档 - -* [操作指南](http://xorm.io/docs) - -* [GoWalker代码文档](http://gowalker.org/github.com/go-xorm/xorm) - -* [Godoc代码文档](http://godoc.org/github.com/go-xorm/xorm) - -# 快速开始 - -* 第一步创建引擎,driverName, dataSourceName和database/sql接口相同 - -```Go -engine, err := xorm.NewEngine(driverName, dataSourceName) -``` - -* 定义一个和表同步的结构体,并且自动同步结构体到数据库 - -```Go -type User struct { - Id int64 - Name string - Salt string - Age int - Passwd string `xorm:"varchar(200)"` - Created time.Time `xorm:"created"` - Updated time.Time `xorm:"updated"` -} - -err := engine.Sync2(new(User)) -``` - -* 创建Engine组 - -```Go -dataSourceNameSlice := []string{masterDataSourceName, slave1DataSourceName, slave2DataSourceName} -engineGroup, err := xorm.NewEngineGroup(driverName, dataSourceNameSlice) -``` - -```Go -masterEngine, err := xorm.NewEngine(driverName, masterDataSourceName) -slave1Engine, err := xorm.NewEngine(driverName, slave1DataSourceName) -slave2Engine, err := xorm.NewEngine(driverName, slave2DataSourceName) -engineGroup, err := xorm.NewEngineGroup(masterEngine, []*Engine{slave1Engine, slave2Engine}) -``` - -所有使用 `engine` 都可以简单的用 `engineGroup` 来替换。 - -* `Query` 最原始的也支持SQL语句查询,返回的结果类型为 []map[string][]byte。`QueryString` 返回 []map[string]string, `QueryInterface` 返回 `[]map[string]interface{}`. - -```Go -results, err := engine.Query("select * from user") -results, err := engine.Where("a = 1").Query() - -results, err := engine.QueryString("select * from user") -results, err := engine.Where("a = 1").QueryString() - -results, err := engine.QueryInterface("select * from user") -results, err := engine.Where("a = 1").QueryInterface() -``` - -* `Exec` 执行一个SQL语句 - -```Go -affected, err := engine.Exec("update user set age = ? where name = ?", age, name) -``` - -* `Insert` 插入一条或者多条记录 - -```Go -affected, err := engine.Insert(&user) -// INSERT INTO struct () values () - -affected, err := engine.Insert(&user1, &user2) -// INSERT INTO struct1 () values () -// INSERT INTO struct2 () values () - -affected, err := engine.Insert(&users) -// INSERT INTO struct () values (),(),() - -affected, err := engine.Insert(&user1, &users) -// INSERT INTO struct1 () values () -// INSERT INTO struct2 () values (),(),() -``` - -* `Get` 查询单条记录 - -```Go -has, err := engine.Get(&user) -// SELECT * FROM user LIMIT 1 - -has, err := engine.Where("name = ?", name).Desc("id").Get(&user) -// SELECT * FROM user WHERE name = ? ORDER BY id DESC LIMIT 1 - -var name string -has, err := engine.Where("id = ?", id).Cols("name").Get(&name) -// SELECT name FROM user WHERE id = ? - -var id int64 -has, err := engine.Where("name = ?", name).Cols("id").Get(&id) -has, err := engine.SQL("select id from user").Get(&id) -// SELECT id FROM user WHERE name = ? - -var valuesMap = make(map[string]string) -has, err := engine.Where("id = ?", id).Get(&valuesMap) -// SELECT * FROM user WHERE id = ? - -var valuesSlice = make([]interface{}, len(cols)) -has, err := engine.Where("id = ?", id).Cols(cols...).Get(&valuesSlice) -// SELECT col1, col2, col3 FROM user WHERE id = ? -``` - -* `Exist` 检测记录是否存在 - -```Go -has, err := testEngine.Exist(new(RecordExist)) -// SELECT * FROM record_exist LIMIT 1 - -has, err = testEngine.Exist(&RecordExist{ - Name: "test1", - }) -// SELECT * FROM record_exist WHERE name = ? LIMIT 1 - -has, err = testEngine.Where("name = ?", "test1").Exist(&RecordExist{}) -// SELECT * FROM record_exist WHERE name = ? LIMIT 1 - -has, err = testEngine.SQL("select * from record_exist where name = ?", "test1").Exist() -// select * from record_exist where name = ? - -has, err = testEngine.Table("record_exist").Exist() -// SELECT * FROM record_exist LIMIT 1 - -has, err = testEngine.Table("record_exist").Where("name = ?", "test1").Exist() -// SELECT * FROM record_exist WHERE name = ? LIMIT 1 -``` - -* `Find` 查询多条记录,当然可以使用Join和extends来组合使用 - -```Go -var users []User -err := engine.Where("name = ?", name).And("age > 10").Limit(10, 0).Find(&users) -// SELECT * FROM user WHERE name = ? AND age > 10 limit 10 offset 0 - -type Detail struct { - Id int64 - UserId int64 `xorm:"index"` -} - -type UserDetail struct { - User `xorm:"extends"` - Detail `xorm:"extends"` -} - -var users []UserDetail -err := engine.Table("user").Select("user.*, detail.*") - Join("INNER", "detail", "detail.user_id = user.id"). - Where("user.name = ?", name).Limit(10, 0). - Find(&users) -// SELECT user.*, detail.* FROM user INNER JOIN detail WHERE user.name = ? limit 10 offset 0 -``` - -* `Iterate` 和 `Rows` 根据条件遍历数据库,可以有两种方式: Iterate and Rows - -```Go -err := engine.Iterate(&User{Name:name}, func(idx int, bean interface{}) error { - user := bean.(*User) - return nil -}) -// SELECT * FROM user - -err := engine.BufferSize(100).Iterate(&User{Name:name}, func(idx int, bean interface{}) error { - user := bean.(*User) - return nil -}) -// SELECT * FROM user Limit 0, 100 -// SELECT * FROM user Limit 101, 100 - -rows, err := engine.Rows(&User{Name:name}) -// SELECT * FROM user -defer rows.Close() -bean := new(Struct) -for rows.Next() { - err = rows.Scan(bean) -} -``` - -* `Update` 更新数据,除非使用Cols,AllCols函数指明,默认只更新非空和非0的字段 - -```Go -affected, err := engine.ID(1).Update(&user) -// UPDATE user SET ... Where id = ? - -affected, err := engine.Update(&user, &User{Name:name}) -// UPDATE user SET ... Where name = ? - -var ids = []int64{1, 2, 3} -affected, err := engine.In(ids).Update(&user) -// UPDATE user SET ... Where id IN (?, ?, ?) - -// force update indicated columns by Cols -affected, err := engine.ID(1).Cols("age").Update(&User{Name:name, Age: 12}) -// UPDATE user SET age = ?, updated=? Where id = ? - -// force NOT update indicated columns by Omit -affected, err := engine.ID(1).Omit("name").Update(&User{Name:name, Age: 12}) -// UPDATE user SET age = ?, updated=? Where id = ? - -affected, err := engine.ID(1).AllCols().Update(&user) -// UPDATE user SET name=?,age=?,salt=?,passwd=?,updated=? Where id = ? -``` - -* `Delete` 删除记录,需要注意,删除必须至少有一个条件,否则会报错。要清空数据库可以用EmptyTable - -```Go -affected, err := engine.Where(...).Delete(&user) -// DELETE FROM user Where ... - -affected, err := engine.ID(2).Delete(&user) -// DELETE FROM user Where id = ? -``` - -* `Count` 获取记录条数 - -```Go -counts, err := engine.Count(&user) -// SELECT count(*) AS total FROM user -``` - -* `Sum` 求和函数 - -```Go -agesFloat64, err := engine.Sum(&user, "age") -// SELECT sum(age) AS total FROM user - -agesInt64, err := engine.SumInt(&user, "age") -// SELECT sum(age) AS total FROM user - -sumFloat64Slice, err := engine.Sums(&user, "age", "score") -// SELECT sum(age), sum(score) FROM user - -sumInt64Slice, err := engine.SumsInt(&user, "age", "score") -// SELECT sum(age), sum(score) FROM user -``` - -* 条件编辑器 - -```Go -err := engine.Where(builder.NotIn("a", 1, 2).And(builder.In("b", "c", "d", "e"))).Find(&users) -// SELECT id, name ... FROM user WHERE a NOT IN (?, ?) AND b IN (?, ?, ?) -``` - -* 在一个Go程中多次操作数据库,但没有事务 - -```Go -session := engine.NewSession() -defer session.Close() - -user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()} -if _, err := session.Insert(&user1); err != nil { - return err -} - -user2 := Userinfo{Username: "yyy"} -if _, err := session.Where("id = ?", 2).Update(&user2); err != nil { - return err -} - -if _, err := session.Exec("delete from userinfo where username = ?", user2.Username); err != nil { - return err -} - -return nil -``` - -* 在一个Go程中有事务 - -```Go -session := engine.NewSession() -defer session.Close() - -// add Begin() before any action -if err := session.Begin(); err != nil { - // if returned then will rollback automatically - return err -} - -user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()} -if _, err := session.Insert(&user1); err != nil { - return err -} - -user2 := Userinfo{Username: "yyy"} -if _, err := session.Where("id = ?", 2).Update(&user2); err != nil { - return err -} - -if _, err := session.Exec("delete from userinfo where username = ?", user2.Username); err != nil { - return err -} - -// add Commit() after all actions -return session.Commit() -``` - -## 贡献 - -如果您也想为Xorm贡献您的力量,请查看 [CONTRIBUTING](https://github.com/go-xorm/xorm/blob/master/CONTRIBUTING.md)。您也可以加入QQ群 280360085 技术帮助和讨论。 - -## Credits - -### Contributors - -感谢所有的贡献者. [[Contribute](CONTRIBUTING.md)]. - - -### Backers - -感谢我们所有的 backers! 🙏 [[成为 backer](https://opencollective.com/xorm#backer)] - - - -### Sponsors - -成为 sponsor 来支持 xorm。您的 logo 将会被显示并被链接到您的网站。 [[成为 sponsor](https://opencollective.com/xorm#sponsor)] - -# 案例 - -* [Go语言中文网](http://studygolang.com/) - [github.com/studygolang/studygolang](https://github.com/studygolang/studygolang) - -* [Gitea](http://gitea.io) - [github.com/go-gitea/gitea](http://github.com/go-gitea/gitea) - -* [Gogs](http://try.gogits.org) - [github.com/gogits/gogs](http://github.com/gogits/gogs) - -* [grafana](https://grafana.com/) - [github.com/grafana/grafana](http://github.com/grafana/grafana) - -* [github.com/m3ng9i/qreader](https://github.com/m3ng9i/qreader) - -* [Wego](http://github.com/go-tango/wego) - -* [Docker.cn](https://docker.cn/) - -* [Xorm Adapter](https://github.com/casbin/xorm-adapter) for [Casbin](https://github.com/casbin/casbin) - [github.com/casbin/xorm-adapter](https://github.com/casbin/xorm-adapter) - -* [Gowalker](http://gowalker.org) - [github.com/Unknwon/gowalker](http://github.com/Unknwon/gowalker) - -* [Gobuild.io](http://gobuild.io) - [github.com/shxsun/gobuild](http://github.com/shxsun/gobuild) - -* [Sudo China](http://sudochina.com) - [github.com/insionng/toropress](http://github.com/insionng/toropress) - -* [Godaily](http://godaily.org) - [github.com/govc/godaily](http://github.com/govc/godaily) - -* [YouGam](http://www.yougam.com/) - -* [GoCMS - github.com/zzboy/GoCMS](https://github.com/zzdboy/GoCMS) - -* [GoBBS - gobbs.domolo.com](http://gobbs.domolo.com/) - -* [go-blog](http://wangcheng.me) - [github.com/easykoo/go-blog](https://github.com/easykoo/go-blog) - - -## 更新日志 - -* **v0.7.0** - * 修正部分Bug - -* **v0.6.6** - * 修正部分Bug - -* **v0.6.5** - * 通过 engine.SetSchema 来支持 schema,当前仅支持Postgres - * vgo 支持 - * 新增 `FindAndCount` 函数 - * 通过 `NewEngineWithParams` 支持数据库特别参数 - * 修正部分Bug - -* **v0.6.4** - * 自动读写分离支持 - * Query/QueryString/QueryInterface 支持与 Where/And 合用 - * `Get` 支持获取非结构体变量 - * `Iterate` 支持 `BufferSize` - * 修正部分Bug - -[更多更新日志...](https://github.com/go-xorm/manual-zh-CN/tree/master/chapter-16) - -## LICENSE - -BSD License -[http://creativecommons.org/licenses/BSD/](http://creativecommons.org/licenses/BSD/) diff --git a/vendor/github.com/go-xorm/xorm/cache_lru.go b/vendor/github.com/go-xorm/xorm/cache_lru.go deleted file mode 100644 index c9672cebe..000000000 --- a/vendor/github.com/go-xorm/xorm/cache_lru.go +++ /dev/null @@ -1,284 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "container/list" - "fmt" - "sync" - "time" - - "github.com/go-xorm/core" -) - -// LRUCacher implments cache object facilities -type LRUCacher struct { - idList *list.List - sqlList *list.List - idIndex map[string]map[string]*list.Element - sqlIndex map[string]map[string]*list.Element - store core.CacheStore - mutex sync.Mutex - MaxElementSize int - Expired time.Duration - GcInterval time.Duration -} - -// NewLRUCacher creates a cacher -func NewLRUCacher(store core.CacheStore, maxElementSize int) *LRUCacher { - return NewLRUCacher2(store, 3600*time.Second, maxElementSize) -} - -// NewLRUCacher2 creates a cache include different params -func NewLRUCacher2(store core.CacheStore, expired time.Duration, maxElementSize int) *LRUCacher { - cacher := &LRUCacher{store: store, idList: list.New(), - sqlList: list.New(), Expired: expired, - GcInterval: core.CacheGcInterval, MaxElementSize: maxElementSize, - sqlIndex: make(map[string]map[string]*list.Element), - idIndex: make(map[string]map[string]*list.Element), - } - cacher.RunGC() - return cacher -} - -// RunGC run once every m.GcInterval -func (m *LRUCacher) RunGC() { - time.AfterFunc(m.GcInterval, func() { - m.RunGC() - m.GC() - }) -} - -// GC check ids lit and sql list to remove all element expired -func (m *LRUCacher) GC() { - m.mutex.Lock() - defer m.mutex.Unlock() - var removedNum int - for e := m.idList.Front(); e != nil; { - if removedNum <= core.CacheGcMaxRemoved && - time.Now().Sub(e.Value.(*idNode).lastVisit) > m.Expired { - removedNum++ - next := e.Next() - node := e.Value.(*idNode) - m.delBean(node.tbName, node.id) - e = next - } else { - break - } - } - - removedNum = 0 - for e := m.sqlList.Front(); e != nil; { - if removedNum <= core.CacheGcMaxRemoved && - time.Now().Sub(e.Value.(*sqlNode).lastVisit) > m.Expired { - removedNum++ - next := e.Next() - node := e.Value.(*sqlNode) - m.delIds(node.tbName, node.sql) - e = next - } else { - break - } - } -} - -// GetIds returns all bean's ids according to sql and parameter from cache -func (m *LRUCacher) GetIds(tableName, sql string) interface{} { - m.mutex.Lock() - defer m.mutex.Unlock() - if _, ok := m.sqlIndex[tableName]; !ok { - m.sqlIndex[tableName] = make(map[string]*list.Element) - } - if v, err := m.store.Get(sql); err == nil { - if el, ok := m.sqlIndex[tableName][sql]; !ok { - el = m.sqlList.PushBack(newSQLNode(tableName, sql)) - m.sqlIndex[tableName][sql] = el - } else { - lastTime := el.Value.(*sqlNode).lastVisit - // if expired, remove the node and return nil - if time.Now().Sub(lastTime) > m.Expired { - m.delIds(tableName, sql) - return nil - } - m.sqlList.MoveToBack(el) - el.Value.(*sqlNode).lastVisit = time.Now() - } - return v - } - - m.delIds(tableName, sql) - return nil -} - -// GetBean returns bean according tableName and id from cache -func (m *LRUCacher) GetBean(tableName string, id string) interface{} { - m.mutex.Lock() - defer m.mutex.Unlock() - if _, ok := m.idIndex[tableName]; !ok { - m.idIndex[tableName] = make(map[string]*list.Element) - } - tid := genID(tableName, id) - if v, err := m.store.Get(tid); err == nil { - if el, ok := m.idIndex[tableName][id]; ok { - lastTime := el.Value.(*idNode).lastVisit - // if expired, remove the node and return nil - if time.Now().Sub(lastTime) > m.Expired { - m.delBean(tableName, id) - return nil - } - m.idList.MoveToBack(el) - el.Value.(*idNode).lastVisit = time.Now() - } else { - el = m.idList.PushBack(newIDNode(tableName, id)) - m.idIndex[tableName][id] = el - } - return v - } - - // store bean is not exist, then remove memory's index - m.delBean(tableName, id) - return nil -} - -// clearIds clears all sql-ids mapping on table tableName from cache -func (m *LRUCacher) clearIds(tableName string) { - if tis, ok := m.sqlIndex[tableName]; ok { - for sql, v := range tis { - m.sqlList.Remove(v) - m.store.Del(sql) - } - } - m.sqlIndex[tableName] = make(map[string]*list.Element) -} - -// ClearIds clears all sql-ids mapping on table tableName from cache -func (m *LRUCacher) ClearIds(tableName string) { - m.mutex.Lock() - m.clearIds(tableName) - m.mutex.Unlock() -} - -func (m *LRUCacher) clearBeans(tableName string) { - if tis, ok := m.idIndex[tableName]; ok { - for id, v := range tis { - m.idList.Remove(v) - tid := genID(tableName, id) - m.store.Del(tid) - } - } - m.idIndex[tableName] = make(map[string]*list.Element) -} - -// ClearBeans clears all beans in some table -func (m *LRUCacher) ClearBeans(tableName string) { - m.mutex.Lock() - m.clearBeans(tableName) - m.mutex.Unlock() -} - -// PutIds pus ids into table -func (m *LRUCacher) PutIds(tableName, sql string, ids interface{}) { - m.mutex.Lock() - if _, ok := m.sqlIndex[tableName]; !ok { - m.sqlIndex[tableName] = make(map[string]*list.Element) - } - if el, ok := m.sqlIndex[tableName][sql]; !ok { - el = m.sqlList.PushBack(newSQLNode(tableName, sql)) - m.sqlIndex[tableName][sql] = el - } else { - el.Value.(*sqlNode).lastVisit = time.Now() - } - m.store.Put(sql, ids) - if m.sqlList.Len() > m.MaxElementSize { - e := m.sqlList.Front() - node := e.Value.(*sqlNode) - m.delIds(node.tbName, node.sql) - } - m.mutex.Unlock() -} - -// PutBean puts beans into table -func (m *LRUCacher) PutBean(tableName string, id string, obj interface{}) { - m.mutex.Lock() - var el *list.Element - var ok bool - - if el, ok = m.idIndex[tableName][id]; !ok { - el = m.idList.PushBack(newIDNode(tableName, id)) - m.idIndex[tableName][id] = el - } else { - el.Value.(*idNode).lastVisit = time.Now() - } - - m.store.Put(genID(tableName, id), obj) - if m.idList.Len() > m.MaxElementSize { - e := m.idList.Front() - node := e.Value.(*idNode) - m.delBean(node.tbName, node.id) - } - m.mutex.Unlock() -} - -func (m *LRUCacher) delIds(tableName, sql string) { - if _, ok := m.sqlIndex[tableName]; ok { - if el, ok := m.sqlIndex[tableName][sql]; ok { - delete(m.sqlIndex[tableName], sql) - m.sqlList.Remove(el) - } - } - m.store.Del(sql) -} - -// DelIds deletes ids -func (m *LRUCacher) DelIds(tableName, sql string) { - m.mutex.Lock() - m.delIds(tableName, sql) - m.mutex.Unlock() -} - -func (m *LRUCacher) delBean(tableName string, id string) { - tid := genID(tableName, id) - if el, ok := m.idIndex[tableName][id]; ok { - delete(m.idIndex[tableName], id) - m.idList.Remove(el) - m.clearIds(tableName) - } - m.store.Del(tid) -} - -// DelBean deletes beans in some table -func (m *LRUCacher) DelBean(tableName string, id string) { - m.mutex.Lock() - m.delBean(tableName, id) - m.mutex.Unlock() -} - -type idNode struct { - tbName string - id string - lastVisit time.Time -} - -type sqlNode struct { - tbName string - sql string - lastVisit time.Time -} - -func genSQLKey(sql string, args interface{}) string { - return fmt.Sprintf("%v-%v", sql, args) -} - -func genID(prefix string, id string) string { - return fmt.Sprintf("%v-%v", prefix, id) -} - -func newIDNode(tbName string, id string) *idNode { - return &idNode{tbName, id, time.Now()} -} - -func newSQLNode(tbName, sql string) *sqlNode { - return &sqlNode{tbName, sql, time.Now()} -} diff --git a/vendor/github.com/go-xorm/xorm/cache_memory_store.go b/vendor/github.com/go-xorm/xorm/cache_memory_store.go deleted file mode 100644 index 36853b19e..000000000 --- a/vendor/github.com/go-xorm/xorm/cache_memory_store.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "sync" - - "github.com/go-xorm/core" -) - -var _ core.CacheStore = NewMemoryStore() - -// MemoryStore represents in-memory store -type MemoryStore struct { - store map[interface{}]interface{} - mutex sync.RWMutex -} - -// NewMemoryStore creates a new store in memory -func NewMemoryStore() *MemoryStore { - return &MemoryStore{store: make(map[interface{}]interface{})} -} - -// Put puts object into store -func (s *MemoryStore) Put(key string, value interface{}) error { - s.mutex.Lock() - defer s.mutex.Unlock() - s.store[key] = value - return nil -} - -// Get gets object from store -func (s *MemoryStore) Get(key string) (interface{}, error) { - s.mutex.RLock() - defer s.mutex.RUnlock() - if v, ok := s.store[key]; ok { - return v, nil - } - - return nil, ErrNotExist -} - -// Del deletes object -func (s *MemoryStore) Del(key string) error { - s.mutex.Lock() - defer s.mutex.Unlock() - delete(s.store, key) - return nil -} diff --git a/vendor/github.com/go-xorm/xorm/circle.yml b/vendor/github.com/go-xorm/xorm/circle.yml deleted file mode 100644 index adfd2a167..000000000 --- a/vendor/github.com/go-xorm/xorm/circle.yml +++ /dev/null @@ -1,41 +0,0 @@ -dependencies: - override: - # './...' is a relative pattern which means all subdirectories - - go get -t -d -v ./... - - go get -t -d -v github.com/go-xorm/tests - - go get -u github.com/go-xorm/core - - go get -u github.com/go-xorm/builder - - go build -v - -database: - override: - - mysql -u root -e "CREATE DATABASE xorm_test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci" - - mysql -u root -e "CREATE DATABASE xorm_test1 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci" - - mysql -u root -e "CREATE DATABASE xorm_test2 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci" - - mysql -u root -e "CREATE DATABASE xorm_test3 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci" - - createdb -p 5432 -e -U postgres xorm_test - - createdb -p 5432 -e -U postgres xorm_test1 - - createdb -p 5432 -e -U postgres xorm_test2 - - createdb -p 5432 -e -U postgres xorm_test3 - - psql xorm_test postgres -c "create schema xorm" - -test: - override: - # './...' is a relative pattern which means all subdirectories - - go get -u github.com/wadey/gocovmerge; - - go test -v -race -db="sqlite3" -conn_str="./test.db" -coverprofile=coverage1-1.txt -covermode=atomic - - go test -v -race -db="sqlite3" -conn_str="./test.db" -cache=true -coverprofile=coverage1-2.txt -covermode=atomic - - go test -v -race -db="mysql" -conn_str="root:@/xorm_test" -coverprofile=coverage2-1.txt -covermode=atomic - - go test -v -race -db="mysql" -conn_str="root:@/xorm_test" -cache=true -coverprofile=coverage2-2.txt -covermode=atomic - - go test -v -race -db="mymysql" -conn_str="xorm_test/root/" -coverprofile=coverage3-1.txt -covermode=atomic - - go test -v -race -db="mymysql" -conn_str="xorm_test/root/" -cache=true -coverprofile=coverage3-2.txt -covermode=atomic - - go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -coverprofile=coverage4-1.txt -covermode=atomic - - go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -cache=true -coverprofile=coverage4-2.txt -covermode=atomic - - go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -schema=xorm -coverprofile=coverage5-1.txt -covermode=atomic - - go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -schema=xorm -cache=true -coverprofile=coverage5-2.txt -covermode=atomic - - gocovmerge coverage1-1.txt coverage1-2.txt coverage2-1.txt coverage2-2.txt coverage3-1.txt coverage3-2.txt coverage4-1.txt coverage4-2.txt coverage5-1.txt coverage5-2.txt > coverage.txt - - cd /home/ubuntu/.go_workspace/src/github.com/go-xorm/tests && ./sqlite3.sh - - cd /home/ubuntu/.go_workspace/src/github.com/go-xorm/tests && ./mysql.sh - - cd /home/ubuntu/.go_workspace/src/github.com/go-xorm/tests && ./postgres.sh - post: - - bash <(curl -s https://codecov.io/bash) \ No newline at end of file diff --git a/vendor/github.com/go-xorm/xorm/context.go b/vendor/github.com/go-xorm/xorm/context.go deleted file mode 100644 index 074ba35a8..000000000 --- a/vendor/github.com/go-xorm/xorm/context.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2017 The Xorm Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build go1.8 - -package xorm - -import "context" - -// PingContext tests if database is alive -func (engine *Engine) PingContext(ctx context.Context) error { - session := engine.NewSession() - defer session.Close() - return session.PingContext(ctx) -} - -// PingContext test if database is ok -func (session *Session) PingContext(ctx context.Context) error { - if session.isAutoClose { - defer session.Close() - } - - session.engine.logger.Infof("PING DATABASE %v", session.engine.DriverName()) - return session.DB().PingContext(ctx) -} diff --git a/vendor/github.com/go-xorm/xorm/convert.go b/vendor/github.com/go-xorm/xorm/convert.go deleted file mode 100644 index 2316ca0b4..000000000 --- a/vendor/github.com/go-xorm/xorm/convert.go +++ /dev/null @@ -1,348 +0,0 @@ -// Copyright 2017 The Xorm 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 xorm - -import ( - "database/sql/driver" - "errors" - "fmt" - "reflect" - "strconv" - "time" -) - -var errNilPtr = errors.New("destination pointer is nil") // embedded in descriptive error - -func strconvErr(err error) error { - if ne, ok := err.(*strconv.NumError); ok { - return ne.Err - } - return err -} - -func cloneBytes(b []byte) []byte { - if b == nil { - return nil - } else { - c := make([]byte, len(b)) - copy(c, b) - return c - } -} - -func asString(src interface{}) string { - switch v := src.(type) { - case string: - return v - case []byte: - return string(v) - } - rv := reflect.ValueOf(src) - switch rv.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return strconv.FormatInt(rv.Int(), 10) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return strconv.FormatUint(rv.Uint(), 10) - case reflect.Float64: - return strconv.FormatFloat(rv.Float(), 'g', -1, 64) - case reflect.Float32: - return strconv.FormatFloat(rv.Float(), 'g', -1, 32) - case reflect.Bool: - return strconv.FormatBool(rv.Bool()) - } - return fmt.Sprintf("%v", src) -} - -func asBytes(buf []byte, rv reflect.Value) (b []byte, ok bool) { - switch rv.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return strconv.AppendInt(buf, rv.Int(), 10), true - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - return strconv.AppendUint(buf, rv.Uint(), 10), true - case reflect.Float32: - return strconv.AppendFloat(buf, rv.Float(), 'g', -1, 32), true - case reflect.Float64: - return strconv.AppendFloat(buf, rv.Float(), 'g', -1, 64), true - case reflect.Bool: - return strconv.AppendBool(buf, rv.Bool()), true - case reflect.String: - s := rv.String() - return append(buf, s...), true - } - return -} - -// convertAssign copies to dest the value in src, converting it if possible. -// An error is returned if the copy would result in loss of information. -// dest should be a pointer type. -func convertAssign(dest, src interface{}) error { - // Common cases, without reflect. - switch s := src.(type) { - case string: - switch d := dest.(type) { - case *string: - if d == nil { - return errNilPtr - } - *d = s - return nil - case *[]byte: - if d == nil { - return errNilPtr - } - *d = []byte(s) - return nil - } - case []byte: - switch d := dest.(type) { - case *string: - if d == nil { - return errNilPtr - } - *d = string(s) - return nil - case *interface{}: - if d == nil { - return errNilPtr - } - *d = cloneBytes(s) - return nil - case *[]byte: - if d == nil { - return errNilPtr - } - *d = cloneBytes(s) - return nil - } - - case time.Time: - switch d := dest.(type) { - case *string: - *d = s.Format(time.RFC3339Nano) - return nil - case *[]byte: - if d == nil { - return errNilPtr - } - *d = []byte(s.Format(time.RFC3339Nano)) - return nil - } - case nil: - switch d := dest.(type) { - case *interface{}: - if d == nil { - return errNilPtr - } - *d = nil - return nil - case *[]byte: - if d == nil { - return errNilPtr - } - *d = nil - return nil - } - } - - var sv reflect.Value - - switch d := dest.(type) { - case *string: - sv = reflect.ValueOf(src) - switch sv.Kind() { - case reflect.Bool, - reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, - reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, - reflect.Float32, reflect.Float64: - *d = asString(src) - return nil - } - case *[]byte: - sv = reflect.ValueOf(src) - if b, ok := asBytes(nil, sv); ok { - *d = b - return nil - } - case *bool: - bv, err := driver.Bool.ConvertValue(src) - if err == nil { - *d = bv.(bool) - } - return err - case *interface{}: - *d = src - return nil - } - - dpv := reflect.ValueOf(dest) - if dpv.Kind() != reflect.Ptr { - return errors.New("destination not a pointer") - } - if dpv.IsNil() { - return errNilPtr - } - - if !sv.IsValid() { - sv = reflect.ValueOf(src) - } - - dv := reflect.Indirect(dpv) - if sv.IsValid() && sv.Type().AssignableTo(dv.Type()) { - switch b := src.(type) { - case []byte: - dv.Set(reflect.ValueOf(cloneBytes(b))) - default: - dv.Set(sv) - } - return nil - } - - if dv.Kind() == sv.Kind() && sv.Type().ConvertibleTo(dv.Type()) { - dv.Set(sv.Convert(dv.Type())) - return nil - } - - switch dv.Kind() { - case reflect.Ptr: - if src == nil { - dv.Set(reflect.Zero(dv.Type())) - return nil - } - - dv.Set(reflect.New(dv.Type().Elem())) - return convertAssign(dv.Interface(), src) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - s := asString(src) - i64, err := strconv.ParseInt(s, 10, dv.Type().Bits()) - if err != nil { - err = strconvErr(err) - return fmt.Errorf("converting driver.Value type %T (%q) to a %s: %v", src, s, dv.Kind(), err) - } - dv.SetInt(i64) - return nil - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - s := asString(src) - u64, err := strconv.ParseUint(s, 10, dv.Type().Bits()) - if err != nil { - err = strconvErr(err) - return fmt.Errorf("converting driver.Value type %T (%q) to a %s: %v", src, s, dv.Kind(), err) - } - dv.SetUint(u64) - return nil - case reflect.Float32, reflect.Float64: - s := asString(src) - f64, err := strconv.ParseFloat(s, dv.Type().Bits()) - if err != nil { - err = strconvErr(err) - return fmt.Errorf("converting driver.Value type %T (%q) to a %s: %v", src, s, dv.Kind(), err) - } - dv.SetFloat(f64) - return nil - case reflect.String: - dv.SetString(asString(src)) - return nil - } - - return fmt.Errorf("unsupported Scan, storing driver.Value type %T into type %T", src, dest) -} - -func asKind(vv reflect.Value, tp reflect.Type) (interface{}, error) { - switch tp.Kind() { - case reflect.Int64: - return vv.Int(), nil - case reflect.Int: - return int(vv.Int()), nil - case reflect.Int32: - return int32(vv.Int()), nil - case reflect.Int16: - return int16(vv.Int()), nil - case reflect.Int8: - return int8(vv.Int()), nil - case reflect.Uint64: - return vv.Uint(), nil - case reflect.Uint: - return uint(vv.Uint()), nil - case reflect.Uint32: - return uint32(vv.Uint()), nil - case reflect.Uint16: - return uint16(vv.Uint()), nil - case reflect.Uint8: - return uint8(vv.Uint()), nil - case reflect.String: - return vv.String(), nil - case reflect.Slice: - if tp.Elem().Kind() == reflect.Uint8 { - v, err := strconv.ParseInt(string(vv.Interface().([]byte)), 10, 64) - if err != nil { - return nil, err - } - return v, nil - } - - } - return nil, fmt.Errorf("unsupported primary key type: %v, %v", tp, vv) -} - -func convertFloat(v interface{}) (float64, error) { - switch v.(type) { - case float32: - return float64(v.(float32)), nil - case float64: - return v.(float64), nil - case string: - i, err := strconv.ParseFloat(v.(string), 64) - if err != nil { - return 0, err - } - return i, nil - case []byte: - i, err := strconv.ParseFloat(string(v.([]byte)), 64) - if err != nil { - return 0, err - } - return i, nil - } - return 0, fmt.Errorf("unsupported type: %v", v) -} - -func convertInt(v interface{}) (int64, error) { - switch v.(type) { - case int: - return int64(v.(int)), nil - case int8: - return int64(v.(int8)), nil - case int16: - return int64(v.(int16)), nil - case int32: - return int64(v.(int32)), nil - case int64: - return v.(int64), nil - case []byte: - i, err := strconv.ParseInt(string(v.([]byte)), 10, 64) - if err != nil { - return 0, err - } - return i, nil - case string: - i, err := strconv.ParseInt(v.(string), 10, 64) - if err != nil { - return 0, err - } - return i, nil - } - return 0, fmt.Errorf("unsupported type: %v", v) -} - -func asBool(bs []byte) (bool, error) { - if len(bs) == 0 { - return false, nil - } - if bs[0] == 0x00 { - return false, nil - } else if bs[0] == 0x01 { - return true, nil - } - return strconv.ParseBool(string(bs)) -} diff --git a/vendor/github.com/go-xorm/xorm/dialect_mssql.go b/vendor/github.com/go-xorm/xorm/dialect_mssql.go deleted file mode 100644 index 6d2291dc1..000000000 --- a/vendor/github.com/go-xorm/xorm/dialect_mssql.go +++ /dev/null @@ -1,562 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "errors" - "fmt" - "strconv" - "strings" - - "github.com/go-xorm/core" -) - -var ( - mssqlReservedWords = map[string]bool{ - "ADD": true, - "EXTERNAL": true, - "PROCEDURE": true, - "ALL": true, - "FETCH": true, - "PUBLIC": true, - "ALTER": true, - "FILE": true, - "RAISERROR": true, - "AND": true, - "FILLFACTOR": true, - "READ": true, - "ANY": true, - "FOR": true, - "READTEXT": true, - "AS": true, - "FOREIGN": true, - "RECONFIGURE": true, - "ASC": true, - "FREETEXT": true, - "REFERENCES": true, - "AUTHORIZATION": true, - "FREETEXTTABLE": true, - "REPLICATION": true, - "BACKUP": true, - "FROM": true, - "RESTORE": true, - "BEGIN": true, - "FULL": true, - "RESTRICT": true, - "BETWEEN": true, - "FUNCTION": true, - "RETURN": true, - "BREAK": true, - "GOTO": true, - "REVERT": true, - "BROWSE": true, - "GRANT": true, - "REVOKE": true, - "BULK": true, - "GROUP": true, - "RIGHT": true, - "BY": true, - "HAVING": true, - "ROLLBACK": true, - "CASCADE": true, - "HOLDLOCK": true, - "ROWCOUNT": true, - "CASE": true, - "IDENTITY": true, - "ROWGUIDCOL": true, - "CHECK": true, - "IDENTITY_INSERT": true, - "RULE": true, - "CHECKPOINT": true, - "IDENTITYCOL": true, - "SAVE": true, - "CLOSE": true, - "IF": true, - "SCHEMA": true, - "CLUSTERED": true, - "IN": true, - "SECURITYAUDIT": true, - "COALESCE": true, - "INDEX": true, - "SELECT": true, - "COLLATE": true, - "INNER": true, - "SEMANTICKEYPHRASETABLE": true, - "COLUMN": true, - "INSERT": true, - "SEMANTICSIMILARITYDETAILSTABLE": true, - "COMMIT": true, - "INTERSECT": true, - "SEMANTICSIMILARITYTABLE": true, - "COMPUTE": true, - "INTO": true, - "SESSION_USER": true, - "CONSTRAINT": true, - "IS": true, - "SET": true, - "CONTAINS": true, - "JOIN": true, - "SETUSER": true, - "CONTAINSTABLE": true, - "KEY": true, - "SHUTDOWN": true, - "CONTINUE": true, - "KILL": true, - "SOME": true, - "CONVERT": true, - "LEFT": true, - "STATISTICS": true, - "CREATE": true, - "LIKE": true, - "SYSTEM_USER": true, - "CROSS": true, - "LINENO": true, - "TABLE": true, - "CURRENT": true, - "LOAD": true, - "TABLESAMPLE": true, - "CURRENT_DATE": true, - "MERGE": true, - "TEXTSIZE": true, - "CURRENT_TIME": true, - "NATIONAL": true, - "THEN": true, - "CURRENT_TIMESTAMP": true, - "NOCHECK": true, - "TO": true, - "CURRENT_USER": true, - "NONCLUSTERED": true, - "TOP": true, - "CURSOR": true, - "NOT": true, - "TRAN": true, - "DATABASE": true, - "NULL": true, - "TRANSACTION": true, - "DBCC": true, - "NULLIF": true, - "TRIGGER": true, - "DEALLOCATE": true, - "OF": true, - "TRUNCATE": true, - "DECLARE": true, - "OFF": true, - "TRY_CONVERT": true, - "DEFAULT": true, - "OFFSETS": true, - "TSEQUAL": true, - "DELETE": true, - "ON": true, - "UNION": true, - "DENY": true, - "OPEN": true, - "UNIQUE": true, - "DESC": true, - "OPENDATASOURCE": true, - "UNPIVOT": true, - "DISK": true, - "OPENQUERY": true, - "UPDATE": true, - "DISTINCT": true, - "OPENROWSET": true, - "UPDATETEXT": true, - "DISTRIBUTED": true, - "OPENXML": true, - "USE": true, - "DOUBLE": true, - "OPTION": true, - "USER": true, - "DROP": true, - "OR": true, - "VALUES": true, - "DUMP": true, - "ORDER": true, - "VARYING": true, - "ELSE": true, - "OUTER": true, - "VIEW": true, - "END": true, - "OVER": true, - "WAITFOR": true, - "ERRLVL": true, - "PERCENT": true, - "WHEN": true, - "ESCAPE": true, - "PIVOT": true, - "WHERE": true, - "EXCEPT": true, - "PLAN": true, - "WHILE": true, - "EXEC": true, - "PRECISION": true, - "WITH": true, - "EXECUTE": true, - "PRIMARY": true, - "WITHIN": true, - "EXISTS": true, - "PRINT": true, - "WRITETEXT": true, - "EXIT": true, - "PROC": true, - } -) - -type mssql struct { - core.Base -} - -func (db *mssql) Init(d *core.DB, uri *core.Uri, drivername, dataSourceName string) error { - return db.Base.Init(d, db, uri, drivername, dataSourceName) -} - -func (db *mssql) SqlType(c *core.Column) string { - var res string - switch t := c.SQLType.Name; t { - case core.Bool: - res = core.Bit - if strings.EqualFold(c.Default, "true") { - c.Default = "1" - } else { - c.Default = "0" - } - case core.Serial: - c.IsAutoIncrement = true - c.IsPrimaryKey = true - c.Nullable = false - res = core.Int - case core.BigSerial: - c.IsAutoIncrement = true - c.IsPrimaryKey = true - c.Nullable = false - res = core.BigInt - case core.Bytea, core.Blob, core.Binary, core.TinyBlob, core.MediumBlob, core.LongBlob: - res = core.VarBinary - if c.Length == 0 { - c.Length = 50 - } - case core.TimeStamp: - res = core.DateTime - case core.TimeStampz: - res = "DATETIMEOFFSET" - c.Length = 7 - case core.MediumInt: - res = core.Int - case core.Text, core.MediumText, core.TinyText, core.LongText, core.Json: - res = core.Varchar + "(MAX)" - case core.Double: - res = core.Real - case core.Uuid: - res = core.Varchar - c.Length = 40 - case core.TinyInt: - res = core.TinyInt - c.Length = 0 - default: - res = t - } - - if res == core.Int { - return core.Int - } - - hasLen1 := (c.Length > 0) - hasLen2 := (c.Length2 > 0) - - if hasLen2 { - res += "(" + strconv.Itoa(c.Length) + "," + strconv.Itoa(c.Length2) + ")" - } else if hasLen1 { - res += "(" + strconv.Itoa(c.Length) + ")" - } - return res -} - -func (db *mssql) SupportInsertMany() bool { - return true -} - -func (db *mssql) IsReserved(name string) bool { - _, ok := mssqlReservedWords[name] - return ok -} - -func (db *mssql) Quote(name string) string { - return "\"" + name + "\"" -} - -func (db *mssql) QuoteStr() string { - return "\"" -} - -func (db *mssql) SupportEngine() bool { - return false -} - -func (db *mssql) AutoIncrStr() string { - return "IDENTITY" -} - -func (db *mssql) DropTableSql(tableName string) string { - return fmt.Sprintf("IF EXISTS (SELECT * FROM sysobjects WHERE id = "+ - "object_id(N'%s') and OBJECTPROPERTY(id, N'IsUserTable') = 1) "+ - "DROP TABLE \"%s\"", tableName, tableName) -} - -func (db *mssql) SupportCharset() bool { - return false -} - -func (db *mssql) IndexOnTable() bool { - return true -} - -func (db *mssql) IndexCheckSql(tableName, idxName string) (string, []interface{}) { - args := []interface{}{idxName} - sql := "select name from sysindexes where id=object_id('" + tableName + "') and name=?" - return sql, args -} - -/*func (db *mssql) ColumnCheckSql(tableName, colName string) (string, []interface{}) { - args := []interface{}{tableName, colName} - sql := `SELECT "COLUMN_NAME" FROM "INFORMATION_SCHEMA"."COLUMNS" WHERE "TABLE_NAME" = ? AND "COLUMN_NAME" = ?` - return sql, args -}*/ - -func (db *mssql) IsColumnExist(tableName, colName string) (bool, error) { - query := `SELECT "COLUMN_NAME" FROM "INFORMATION_SCHEMA"."COLUMNS" WHERE "TABLE_NAME" = ? AND "COLUMN_NAME" = ?` - - return db.HasRecords(query, tableName, colName) -} - -func (db *mssql) TableCheckSql(tableName string) (string, []interface{}) { - args := []interface{}{} - sql := "select * from sysobjects where id = object_id(N'" + tableName + "') and OBJECTPROPERTY(id, N'IsUserTable') = 1" - return sql, args -} - -func (db *mssql) GetColumns(tableName string) ([]string, map[string]*core.Column, error) { - args := []interface{}{} - s := `select a.name as name, b.name as ctype,a.max_length,a.precision,a.scale,a.is_nullable as nullable, - replace(replace(isnull(c.text,''),'(',''),')','') as vdefault, - ISNULL(i.is_primary_key, 0) - from sys.columns a - left join sys.types b on a.user_type_id=b.user_type_id - left join sys.syscomments c on a.default_object_id=c.id - LEFT OUTER JOIN - sys.index_columns ic ON ic.object_id = a.object_id AND ic.column_id = a.column_id - LEFT OUTER JOIN - sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id - where a.object_id=object_id('` + tableName + `')` - db.LogSQL(s, args) - - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, nil, err - } - defer rows.Close() - - cols := make(map[string]*core.Column) - colSeq := make([]string, 0) - for rows.Next() { - var name, ctype, vdefault string - var maxLen, precision, scale int - var nullable, isPK bool - err = rows.Scan(&name, &ctype, &maxLen, &precision, &scale, &nullable, &vdefault, &isPK) - if err != nil { - return nil, nil, err - } - - col := new(core.Column) - col.Indexes = make(map[string]int) - col.Name = strings.Trim(name, "` ") - col.Nullable = nullable - col.Default = vdefault - col.IsPrimaryKey = isPK - ct := strings.ToUpper(ctype) - if ct == "DECIMAL" { - col.Length = precision - col.Length2 = scale - } else { - col.Length = maxLen - } - switch ct { - case "DATETIMEOFFSET": - col.SQLType = core.SQLType{Name: core.TimeStampz, DefaultLength: 0, DefaultLength2: 0} - case "NVARCHAR": - col.SQLType = core.SQLType{Name: core.NVarchar, DefaultLength: 0, DefaultLength2: 0} - case "IMAGE": - col.SQLType = core.SQLType{Name: core.VarBinary, DefaultLength: 0, DefaultLength2: 0} - default: - if _, ok := core.SqlTypes[ct]; ok { - col.SQLType = core.SQLType{Name: ct, DefaultLength: 0, DefaultLength2: 0} - } else { - return nil, nil, fmt.Errorf("Unknown colType %v for %v - %v", ct, tableName, col.Name) - } - } - - if col.SQLType.IsText() || col.SQLType.IsTime() { - if col.Default != "" { - col.Default = "'" + col.Default + "'" - } else { - if col.DefaultIsEmpty { - col.Default = "''" - } - } - } - cols[col.Name] = col - colSeq = append(colSeq, col.Name) - } - return colSeq, cols, nil -} - -func (db *mssql) GetTables() ([]*core.Table, error) { - args := []interface{}{} - s := `select name from sysobjects where xtype ='U'` - db.LogSQL(s, args) - - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, err - } - defer rows.Close() - - tables := make([]*core.Table, 0) - for rows.Next() { - table := core.NewEmptyTable() - var name string - err = rows.Scan(&name) - if err != nil { - return nil, err - } - table.Name = strings.Trim(name, "` ") - tables = append(tables, table) - } - return tables, nil -} - -func (db *mssql) GetIndexes(tableName string) (map[string]*core.Index, error) { - args := []interface{}{tableName} - s := `SELECT -IXS.NAME AS [INDEX_NAME], -C.NAME AS [COLUMN_NAME], -IXS.is_unique AS [IS_UNIQUE] -FROM SYS.INDEXES IXS -INNER JOIN SYS.INDEX_COLUMNS IXCS -ON IXS.OBJECT_ID=IXCS.OBJECT_ID AND IXS.INDEX_ID = IXCS.INDEX_ID -INNER JOIN SYS.COLUMNS C ON IXS.OBJECT_ID=C.OBJECT_ID -AND IXCS.COLUMN_ID=C.COLUMN_ID -WHERE IXS.TYPE_DESC='NONCLUSTERED' and OBJECT_NAME(IXS.OBJECT_ID) =? -` - db.LogSQL(s, args) - - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, err - } - defer rows.Close() - - indexes := make(map[string]*core.Index, 0) - for rows.Next() { - var indexType int - var indexName, colName, isUnique string - - err = rows.Scan(&indexName, &colName, &isUnique) - if err != nil { - return nil, err - } - - i, err := strconv.ParseBool(isUnique) - if err != nil { - return nil, err - } - - if i { - indexType = core.UniqueType - } else { - indexType = core.IndexType - } - - colName = strings.Trim(colName, "` ") - var isRegular bool - if strings.HasPrefix(indexName, "IDX_"+tableName) || strings.HasPrefix(indexName, "UQE_"+tableName) { - indexName = indexName[5+len(tableName):] - isRegular = true - } - - var index *core.Index - var ok bool - if index, ok = indexes[indexName]; !ok { - index = new(core.Index) - index.Type = indexType - index.Name = indexName - index.IsRegular = isRegular - indexes[indexName] = index - } - index.AddColumn(colName) - } - return indexes, nil -} - -func (db *mssql) CreateTableSql(table *core.Table, tableName, storeEngine, charset string) string { - var sql string - if tableName == "" { - tableName = table.Name - } - - sql = "IF NOT EXISTS (SELECT [name] FROM sys.tables WHERE [name] = '" + tableName + "' ) CREATE TABLE " - - sql += db.QuoteStr() + tableName + db.QuoteStr() + " (" - - pkList := table.PrimaryKeys - - for _, colName := range table.ColumnsSeq() { - col := table.GetColumn(colName) - if col.IsPrimaryKey && len(pkList) == 1 { - sql += col.String(db) - } else { - sql += col.StringNoPk(db) - } - sql = strings.TrimSpace(sql) - sql += ", " - } - - if len(pkList) > 1 { - sql += "PRIMARY KEY ( " - sql += strings.Join(pkList, ",") - sql += " ), " - } - - sql = sql[:len(sql)-2] + ")" - sql += ";" - return sql -} - -func (db *mssql) ForUpdateSql(query string) string { - return query -} - -func (db *mssql) Filters() []core.Filter { - return []core.Filter{&core.IdFilter{}, &core.QuoteFilter{}} -} - -type odbcDriver struct { -} - -func (p *odbcDriver) Parse(driverName, dataSourceName string) (*core.Uri, error) { - kv := strings.Split(dataSourceName, ";") - var dbName string - for _, c := range kv { - vv := strings.Split(strings.TrimSpace(c), "=") - if len(vv) == 2 { - switch strings.ToLower(vv[0]) { - case "database": - dbName = vv[1] - } - } - } - if dbName == "" { - return nil, errors.New("no db name provided") - } - return &core.Uri{DbName: dbName, DbType: core.MSSQL}, nil -} diff --git a/vendor/github.com/go-xorm/xorm/dialect_mysql.go b/vendor/github.com/go-xorm/xorm/dialect_mysql.go deleted file mode 100644 index f2b4ff7a7..000000000 --- a/vendor/github.com/go-xorm/xorm/dialect_mysql.go +++ /dev/null @@ -1,656 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "crypto/tls" - "errors" - "fmt" - "regexp" - "strconv" - "strings" - "time" - - "github.com/go-xorm/core" -) - -var ( - mysqlReservedWords = map[string]bool{ - "ADD": true, - "ALL": true, - "ALTER": true, - "ANALYZE": true, - "AND": true, - "AS": true, - "ASC": true, - "ASENSITIVE": true, - "BEFORE": true, - "BETWEEN": true, - "BIGINT": true, - "BINARY": true, - "BLOB": true, - "BOTH": true, - "BY": true, - "CALL": true, - "CASCADE": true, - "CASE": true, - "CHANGE": true, - "CHAR": true, - "CHARACTER": true, - "CHECK": true, - "COLLATE": true, - "COLUMN": true, - "CONDITION": true, - "CONNECTION": true, - "CONSTRAINT": true, - "CONTINUE": true, - "CONVERT": true, - "CREATE": true, - "CROSS": true, - "CURRENT_DATE": true, - "CURRENT_TIME": true, - "CURRENT_TIMESTAMP": true, - "CURRENT_USER": true, - "CURSOR": true, - "DATABASE": true, - "DATABASES": true, - "DAY_HOUR": true, - "DAY_MICROSECOND": true, - "DAY_MINUTE": true, - "DAY_SECOND": true, - "DEC": true, - "DECIMAL": true, - "DECLARE": true, - "DEFAULT": true, - "DELAYED": true, - "DELETE": true, - "DESC": true, - "DESCRIBE": true, - "DETERMINISTIC": true, - "DISTINCT": true, - "DISTINCTROW": true, - "DIV": true, - "DOUBLE": true, - "DROP": true, - "DUAL": true, - "EACH": true, - "ELSE": true, - "ELSEIF": true, - "ENCLOSED": true, - "ESCAPED": true, - "EXISTS": true, - "EXIT": true, - "EXPLAIN": true, - "FALSE": true, - "FETCH": true, - "FLOAT": true, - "FLOAT4": true, - "FLOAT8": true, - "FOR": true, - "FORCE": true, - "FOREIGN": true, - "FROM": true, - "FULLTEXT": true, - "GOTO": true, - "GRANT": true, - "GROUP": true, - "HAVING": true, - "HIGH_PRIORITY": true, - "HOUR_MICROSECOND": true, - "HOUR_MINUTE": true, - "HOUR_SECOND": true, - "IF": true, - "IGNORE": true, - "IN": true, "INDEX": true, - "INFILE": true, "INNER": true, "INOUT": true, - "INSENSITIVE": true, "INSERT": true, "INT": true, - "INT1": true, "INT2": true, "INT3": true, - "INT4": true, "INT8": true, "INTEGER": true, - "INTERVAL": true, "INTO": true, "IS": true, - "ITERATE": true, "JOIN": true, "KEY": true, - "KEYS": true, "KILL": true, "LABEL": true, - "LEADING": true, "LEAVE": true, "LEFT": true, - "LIKE": true, "LIMIT": true, "LINEAR": true, - "LINES": true, "LOAD": true, "LOCALTIME": true, - "LOCALTIMESTAMP": true, "LOCK": true, "LONG": true, - "LONGBLOB": true, "LONGTEXT": true, "LOOP": true, - "LOW_PRIORITY": true, "MATCH": true, "MEDIUMBLOB": true, - "MEDIUMINT": true, "MEDIUMTEXT": true, "MIDDLEINT": true, - "MINUTE_MICROSECOND": true, "MINUTE_SECOND": true, "MOD": true, - "MODIFIES": true, "NATURAL": true, "NOT": true, - "NO_WRITE_TO_BINLOG": true, "NULL": true, "NUMERIC": true, - "ON OPTIMIZE": true, "OPTION": true, - "OPTIONALLY": true, "OR": true, "ORDER": true, - "OUT": true, "OUTER": true, "OUTFILE": true, - "PRECISION": true, "PRIMARY": true, "PROCEDURE": true, - "PURGE": true, "RAID0": true, "RANGE": true, - "READ": true, "READS": true, "REAL": true, - "REFERENCES": true, "REGEXP": true, "RELEASE": true, - "RENAME": true, "REPEAT": true, "REPLACE": true, - "REQUIRE": true, "RESTRICT": true, "RETURN": true, - "REVOKE": true, "RIGHT": true, "RLIKE": true, - "SCHEMA": true, "SCHEMAS": true, "SECOND_MICROSECOND": true, - "SELECT": true, "SENSITIVE": true, "SEPARATOR": true, - "SET": true, "SHOW": true, "SMALLINT": true, - "SPATIAL": true, "SPECIFIC": true, "SQL": true, - "SQLEXCEPTION": true, "SQLSTATE": true, "SQLWARNING": true, - "SQL_BIG_RESULT": true, "SQL_CALC_FOUND_ROWS": true, "SQL_SMALL_RESULT": true, - "SSL": true, "STARTING": true, "STRAIGHT_JOIN": true, - "TABLE": true, "TERMINATED": true, "THEN": true, - "TINYBLOB": true, "TINYINT": true, "TINYTEXT": true, - "TO": true, "TRAILING": true, "TRIGGER": true, - "TRUE": true, "UNDO": true, "UNION": true, - "UNIQUE": true, "UNLOCK": true, "UNSIGNED": true, - "UPDATE": true, "USAGE": true, "USE": true, - "USING": true, "UTC_DATE": true, "UTC_TIME": true, - "UTC_TIMESTAMP": true, "VALUES": true, "VARBINARY": true, - "VARCHAR": true, - "VARCHARACTER": true, - "VARYING": true, - "WHEN": true, - "WHERE": true, - "WHILE": true, - "WITH": true, - "WRITE": true, - "X509": true, - "XOR": true, - "YEAR_MONTH": true, - "ZEROFILL": true, - } -) - -type mysql struct { - core.Base - net string - addr string - params map[string]string - loc *time.Location - timeout time.Duration - tls *tls.Config - allowAllFiles bool - allowOldPasswords bool - clientFoundRows bool - rowFormat string -} - -func (db *mysql) Init(d *core.DB, uri *core.Uri, drivername, dataSourceName string) error { - return db.Base.Init(d, db, uri, drivername, dataSourceName) -} - -func (db *mysql) SetParams(params map[string]string) { - rowFormat, ok := params["rowFormat"] - if ok { - var t = strings.ToUpper(rowFormat) - switch t { - case "COMPACT": - fallthrough - case "REDUNDANT": - fallthrough - case "DYNAMIC": - fallthrough - case "COMPRESSED": - db.rowFormat = t - break - default: - break - } - } -} - -func (db *mysql) SqlType(c *core.Column) string { - var res string - switch t := c.SQLType.Name; t { - case core.Bool: - res = core.TinyInt - c.Length = 1 - case core.Serial: - c.IsAutoIncrement = true - c.IsPrimaryKey = true - c.Nullable = false - res = core.Int - case core.BigSerial: - c.IsAutoIncrement = true - c.IsPrimaryKey = true - c.Nullable = false - res = core.BigInt - case core.Bytea: - res = core.Blob - case core.TimeStampz: - res = core.Char - c.Length = 64 - case core.Enum: //mysql enum - res = core.Enum - res += "(" - opts := "" - for v := range c.EnumOptions { - opts += fmt.Sprintf(",'%v'", v) - } - res += strings.TrimLeft(opts, ",") - res += ")" - case core.Set: //mysql set - res = core.Set - res += "(" - opts := "" - for v := range c.SetOptions { - opts += fmt.Sprintf(",'%v'", v) - } - res += strings.TrimLeft(opts, ",") - res += ")" - case core.NVarchar: - res = core.Varchar - case core.Uuid: - res = core.Varchar - c.Length = 40 - case core.Json: - res = core.Text - default: - res = t - } - - hasLen1 := (c.Length > 0) - hasLen2 := (c.Length2 > 0) - - if res == core.BigInt && !hasLen1 && !hasLen2 { - c.Length = 20 - hasLen1 = true - } - - if hasLen2 { - res += "(" + strconv.Itoa(c.Length) + "," + strconv.Itoa(c.Length2) + ")" - } else if hasLen1 { - res += "(" + strconv.Itoa(c.Length) + ")" - } - return res -} - -func (db *mysql) SupportInsertMany() bool { - return true -} - -func (db *mysql) IsReserved(name string) bool { - _, ok := mysqlReservedWords[name] - return ok -} - -func (db *mysql) Quote(name string) string { - return "`" + name + "`" -} - -func (db *mysql) QuoteStr() string { - return "`" -} - -func (db *mysql) SupportEngine() bool { - return true -} - -func (db *mysql) AutoIncrStr() string { - return "AUTO_INCREMENT" -} - -func (db *mysql) SupportCharset() bool { - return true -} - -func (db *mysql) IndexOnTable() bool { - return true -} - -func (db *mysql) IndexCheckSql(tableName, idxName string) (string, []interface{}) { - args := []interface{}{db.DbName, tableName, idxName} - sql := "SELECT `INDEX_NAME` FROM `INFORMATION_SCHEMA`.`STATISTICS`" - sql += " WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ? AND `INDEX_NAME`=?" - return sql, args -} - -/*func (db *mysql) ColumnCheckSql(tableName, colName string) (string, []interface{}) { - args := []interface{}{db.DbName, tableName, colName} - sql := "SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ? AND `COLUMN_NAME` = ?" - return sql, args -}*/ - -func (db *mysql) TableCheckSql(tableName string) (string, []interface{}) { - args := []interface{}{db.DbName, tableName} - sql := "SELECT `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? and `TABLE_NAME`=?" - return sql, args -} - -func (db *mysql) GetColumns(tableName string) ([]string, map[string]*core.Column, error) { - args := []interface{}{db.DbName, tableName} - s := "SELECT `COLUMN_NAME`, `IS_NULLABLE`, `COLUMN_DEFAULT`, `COLUMN_TYPE`," + - " `COLUMN_KEY`, `EXTRA`,`COLUMN_COMMENT` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ?" - db.LogSQL(s, args) - - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, nil, err - } - defer rows.Close() - - cols := make(map[string]*core.Column) - colSeq := make([]string, 0) - for rows.Next() { - col := new(core.Column) - col.Indexes = make(map[string]int) - - var columnName, isNullable, colType, colKey, extra, comment string - var colDefault *string - err = rows.Scan(&columnName, &isNullable, &colDefault, &colType, &colKey, &extra, &comment) - if err != nil { - return nil, nil, err - } - col.Name = strings.Trim(columnName, "` ") - col.Comment = comment - if "YES" == isNullable { - col.Nullable = true - } - - if colDefault != nil { - col.Default = *colDefault - if col.Default == "" { - col.DefaultIsEmpty = true - } - } - - cts := strings.Split(colType, "(") - colName := cts[0] - colType = strings.ToUpper(colName) - var len1, len2 int - if len(cts) == 2 { - idx := strings.Index(cts[1], ")") - if colType == core.Enum && cts[1][0] == '\'' { //enum - options := strings.Split(cts[1][0:idx], ",") - col.EnumOptions = make(map[string]int) - for k, v := range options { - v = strings.TrimSpace(v) - v = strings.Trim(v, "'") - col.EnumOptions[v] = k - } - } else if colType == core.Set && cts[1][0] == '\'' { - options := strings.Split(cts[1][0:idx], ",") - col.SetOptions = make(map[string]int) - for k, v := range options { - v = strings.TrimSpace(v) - v = strings.Trim(v, "'") - col.SetOptions[v] = k - } - } else { - lens := strings.Split(cts[1][0:idx], ",") - len1, err = strconv.Atoi(strings.TrimSpace(lens[0])) - if err != nil { - return nil, nil, err - } - if len(lens) == 2 { - len2, err = strconv.Atoi(lens[1]) - if err != nil { - return nil, nil, err - } - } - } - } - if colType == "FLOAT UNSIGNED" { - colType = "FLOAT" - } - col.Length = len1 - col.Length2 = len2 - if _, ok := core.SqlTypes[colType]; ok { - col.SQLType = core.SQLType{Name: colType, DefaultLength: len1, DefaultLength2: len2} - } else { - return nil, nil, fmt.Errorf("Unknown colType %v", colType) - } - - if colKey == "PRI" { - col.IsPrimaryKey = true - } - if colKey == "UNI" { - //col.is - } - - if extra == "auto_increment" { - col.IsAutoIncrement = true - } - - if col.SQLType.IsText() || col.SQLType.IsTime() { - if col.Default != "" { - col.Default = "'" + col.Default + "'" - } else { - if col.DefaultIsEmpty { - col.Default = "''" - } - } - } - cols[col.Name] = col - colSeq = append(colSeq, col.Name) - } - return colSeq, cols, nil -} - -func (db *mysql) GetTables() ([]*core.Table, error) { - args := []interface{}{db.DbName} - s := "SELECT `TABLE_NAME`, `ENGINE`, `TABLE_ROWS`, `AUTO_INCREMENT`, `TABLE_COMMENT` from " + - "`INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? AND (`ENGINE`='MyISAM' OR `ENGINE` = 'InnoDB' OR `ENGINE` = 'TokuDB')" - db.LogSQL(s, args) - - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, err - } - defer rows.Close() - - tables := make([]*core.Table, 0) - for rows.Next() { - table := core.NewEmptyTable() - var name, engine, tableRows, comment string - var autoIncr *string - err = rows.Scan(&name, &engine, &tableRows, &autoIncr, &comment) - if err != nil { - return nil, err - } - - table.Name = name - table.Comment = comment - table.StoreEngine = engine - tables = append(tables, table) - } - return tables, nil -} - -func (db *mysql) GetIndexes(tableName string) (map[string]*core.Index, error) { - args := []interface{}{db.DbName, tableName} - s := "SELECT `INDEX_NAME`, `NON_UNIQUE`, `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`STATISTICS` WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ?" - db.LogSQL(s, args) - - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, err - } - defer rows.Close() - - indexes := make(map[string]*core.Index, 0) - for rows.Next() { - var indexType int - var indexName, colName, nonUnique string - err = rows.Scan(&indexName, &nonUnique, &colName) - if err != nil { - return nil, err - } - - if indexName == "PRIMARY" { - continue - } - - if "YES" == nonUnique || nonUnique == "1" { - indexType = core.IndexType - } else { - indexType = core.UniqueType - } - - colName = strings.Trim(colName, "` ") - var isRegular bool - if strings.HasPrefix(indexName, "IDX_"+tableName) || strings.HasPrefix(indexName, "UQE_"+tableName) { - indexName = indexName[5+len(tableName):] - isRegular = true - } - - var index *core.Index - var ok bool - if index, ok = indexes[indexName]; !ok { - index = new(core.Index) - index.IsRegular = isRegular - index.Type = indexType - index.Name = indexName - indexes[indexName] = index - } - index.AddColumn(colName) - } - return indexes, nil -} - -func (db *mysql) CreateTableSql(table *core.Table, tableName, storeEngine, charset string) string { - var sql string - sql = "CREATE TABLE IF NOT EXISTS " - if tableName == "" { - tableName = table.Name - } - - sql += db.Quote(tableName) - sql += " (" - - if len(table.ColumnsSeq()) > 0 { - pkList := table.PrimaryKeys - - for _, colName := range table.ColumnsSeq() { - col := table.GetColumn(colName) - if col.IsPrimaryKey && len(pkList) == 1 { - sql += col.String(db) - } else { - sql += col.StringNoPk(db) - } - sql = strings.TrimSpace(sql) - if len(col.Comment) > 0 { - sql += " COMMENT '" + col.Comment + "'" - } - sql += ", " - } - - if len(pkList) > 1 { - sql += "PRIMARY KEY ( " - sql += db.Quote(strings.Join(pkList, db.Quote(","))) - sql += " ), " - } - - sql = sql[:len(sql)-2] - } - sql += ")" - - if storeEngine != "" { - sql += " ENGINE=" + storeEngine - } - - if len(charset) == 0 { - charset = db.URI().Charset - } else if len(charset) > 0 { - sql += " DEFAULT CHARSET " + charset - } - - if db.rowFormat != "" { - sql += " ROW_FORMAT=" + db.rowFormat - } - return sql -} - -func (db *mysql) Filters() []core.Filter { - return []core.Filter{&core.IdFilter{}} -} - -type mymysqlDriver struct { -} - -func (p *mymysqlDriver) Parse(driverName, dataSourceName string) (*core.Uri, error) { - db := &core.Uri{DbType: core.MYSQL} - - pd := strings.SplitN(dataSourceName, "*", 2) - if len(pd) == 2 { - // Parse protocol part of URI - p := strings.SplitN(pd[0], ":", 2) - if len(p) != 2 { - return nil, errors.New("Wrong protocol part of URI") - } - db.Proto = p[0] - options := strings.Split(p[1], ",") - db.Raddr = options[0] - for _, o := range options[1:] { - kv := strings.SplitN(o, "=", 2) - var k, v string - if len(kv) == 2 { - k, v = kv[0], kv[1] - } else { - k, v = o, "true" - } - switch k { - case "laddr": - db.Laddr = v - case "timeout": - to, err := time.ParseDuration(v) - if err != nil { - return nil, err - } - db.Timeout = to - default: - return nil, errors.New("Unknown option: " + k) - } - } - // Remove protocol part - pd = pd[1:] - } - // Parse database part of URI - dup := strings.SplitN(pd[0], "/", 3) - if len(dup) != 3 { - return nil, errors.New("Wrong database part of URI") - } - db.DbName = dup[0] - db.User = dup[1] - db.Passwd = dup[2] - - return db, nil -} - -type mysqlDriver struct { -} - -func (p *mysqlDriver) Parse(driverName, dataSourceName string) (*core.Uri, error) { - dsnPattern := regexp.MustCompile( - `^(?:(?P.*?)(?::(?P.*))?@)?` + // [user[:password]@] - `(?:(?P[^\(]*)(?:\((?P[^\)]*)\))?)?` + // [net[(addr)]] - `\/(?P.*?)` + // /dbname - `(?:\?(?P[^\?]*))?$`) // [?param1=value1¶mN=valueN] - matches := dsnPattern.FindStringSubmatch(dataSourceName) - //tlsConfigRegister := make(map[string]*tls.Config) - names := dsnPattern.SubexpNames() - - uri := &core.Uri{DbType: core.MYSQL} - - for i, match := range matches { - switch names[i] { - case "dbname": - uri.DbName = match - case "params": - if len(match) > 0 { - kvs := strings.Split(match, "&") - for _, kv := range kvs { - splits := strings.Split(kv, "=") - if len(splits) == 2 { - switch splits[0] { - case "charset": - uri.Charset = splits[1] - } - } - } - } - - } - } - return uri, nil -} diff --git a/vendor/github.com/go-xorm/xorm/dialect_oracle.go b/vendor/github.com/go-xorm/xorm/dialect_oracle.go deleted file mode 100644 index ac0081b38..000000000 --- a/vendor/github.com/go-xorm/xorm/dialect_oracle.go +++ /dev/null @@ -1,906 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "errors" - "fmt" - "regexp" - "strconv" - "strings" - - "github.com/go-xorm/core" -) - -var ( - oracleReservedWords = map[string]bool{ - "ACCESS": true, - "ACCOUNT": true, - "ACTIVATE": true, - "ADD": true, - "ADMIN": true, - "ADVISE": true, - "AFTER": true, - "ALL": true, - "ALL_ROWS": true, - "ALLOCATE": true, - "ALTER": true, - "ANALYZE": true, - "AND": true, - "ANY": true, - "ARCHIVE": true, - "ARCHIVELOG": true, - "ARRAY": true, - "AS": true, - "ASC": true, - "AT": true, - "AUDIT": true, - "AUTHENTICATED": true, - "AUTHORIZATION": true, - "AUTOEXTEND": true, - "AUTOMATIC": true, - "BACKUP": true, - "BECOME": true, - "BEFORE": true, - "BEGIN": true, - "BETWEEN": true, - "BFILE": true, - "BITMAP": true, - "BLOB": true, - "BLOCK": true, - "BODY": true, - "BY": true, - "CACHE": true, - "CACHE_INSTANCES": true, - "CANCEL": true, - "CASCADE": true, - "CAST": true, - "CFILE": true, - "CHAINED": true, - "CHANGE": true, - "CHAR": true, - "CHAR_CS": true, - "CHARACTER": true, - "CHECK": true, - "CHECKPOINT": true, - "CHOOSE": true, - "CHUNK": true, - "CLEAR": true, - "CLOB": true, - "CLONE": true, - "CLOSE": true, - "CLOSE_CACHED_OPEN_CURSORS": true, - "CLUSTER": true, - "COALESCE": true, - "COLUMN": true, - "COLUMNS": true, - "COMMENT": true, - "COMMIT": true, - "COMMITTED": true, - "COMPATIBILITY": true, - "COMPILE": true, - "COMPLETE": true, - "COMPOSITE_LIMIT": true, - "COMPRESS": true, - "COMPUTE": true, - "CONNECT": true, - "CONNECT_TIME": true, - "CONSTRAINT": true, - "CONSTRAINTS": true, - "CONTENTS": true, - "CONTINUE": true, - "CONTROLFILE": true, - "CONVERT": true, - "COST": true, - "CPU_PER_CALL": true, - "CPU_PER_SESSION": true, - "CREATE": true, - "CURRENT": true, - "CURRENT_SCHEMA": true, - "CURREN_USER": true, - "CURSOR": true, - "CYCLE": true, - "DANGLING": true, - "DATABASE": true, - "DATAFILE": true, - "DATAFILES": true, - "DATAOBJNO": true, - "DATE": true, - "DBA": true, - "DBHIGH": true, - "DBLOW": true, - "DBMAC": true, - "DEALLOCATE": true, - "DEBUG": true, - "DEC": true, - "DECIMAL": true, - "DECLARE": true, - "DEFAULT": true, - "DEFERRABLE": true, - "DEFERRED": true, - "DEGREE": true, - "DELETE": true, - "DEREF": true, - "DESC": true, - "DIRECTORY": true, - "DISABLE": true, - "DISCONNECT": true, - "DISMOUNT": true, - "DISTINCT": true, - "DISTRIBUTED": true, - "DML": true, - "DOUBLE": true, - "DROP": true, - "DUMP": true, - "EACH": true, - "ELSE": true, - "ENABLE": true, - "END": true, - "ENFORCE": true, - "ENTRY": true, - "ESCAPE": true, - "EXCEPT": true, - "EXCEPTIONS": true, - "EXCHANGE": true, - "EXCLUDING": true, - "EXCLUSIVE": true, - "EXECUTE": true, - "EXISTS": true, - "EXPIRE": true, - "EXPLAIN": true, - "EXTENT": true, - "EXTENTS": true, - "EXTERNALLY": true, - "FAILED_LOGIN_ATTEMPTS": true, - "FALSE": true, - "FAST": true, - "FILE": true, - "FIRST_ROWS": true, - "FLAGGER": true, - "FLOAT": true, - "FLOB": true, - "FLUSH": true, - "FOR": true, - "FORCE": true, - "FOREIGN": true, - "FREELIST": true, - "FREELISTS": true, - "FROM": true, - "FULL": true, - "FUNCTION": true, - "GLOBAL": true, - "GLOBALLY": true, - "GLOBAL_NAME": true, - "GRANT": true, - "GROUP": true, - "GROUPS": true, - "HASH": true, - "HASHKEYS": true, - "HAVING": true, - "HEADER": true, - "HEAP": true, - "IDENTIFIED": true, - "IDGENERATORS": true, - "IDLE_TIME": true, - "IF": true, - "IMMEDIATE": true, - "IN": true, - "INCLUDING": true, - "INCREMENT": true, - "INDEX": true, - "INDEXED": true, - "INDEXES": true, - "INDICATOR": true, - "IND_PARTITION": true, - "INITIAL": true, - "INITIALLY": true, - "INITRANS": true, - "INSERT": true, - "INSTANCE": true, - "INSTANCES": true, - "INSTEAD": true, - "INT": true, - "INTEGER": true, - "INTERMEDIATE": true, - "INTERSECT": true, - "INTO": true, - "IS": true, - "ISOLATION": true, - "ISOLATION_LEVEL": true, - "KEEP": true, - "KEY": true, - "KILL": true, - "LABEL": true, - "LAYER": true, - "LESS": true, - "LEVEL": true, - "LIBRARY": true, - "LIKE": true, - "LIMIT": true, - "LINK": true, - "LIST": true, - "LOB": true, - "LOCAL": true, - "LOCK": true, - "LOCKED": true, - "LOG": true, - "LOGFILE": true, - "LOGGING": true, - "LOGICAL_READS_PER_CALL": true, - "LOGICAL_READS_PER_SESSION": true, - "LONG": true, - "MANAGE": true, - "MASTER": true, - "MAX": true, - "MAXARCHLOGS": true, - "MAXDATAFILES": true, - "MAXEXTENTS": true, - "MAXINSTANCES": true, - "MAXLOGFILES": true, - "MAXLOGHISTORY": true, - "MAXLOGMEMBERS": true, - "MAXSIZE": true, - "MAXTRANS": true, - "MAXVALUE": true, - "MIN": true, - "MEMBER": true, - "MINIMUM": true, - "MINEXTENTS": true, - "MINUS": true, - "MINVALUE": true, - "MLSLABEL": true, - "MLS_LABEL_FORMAT": true, - "MODE": true, - "MODIFY": true, - "MOUNT": true, - "MOVE": true, - "MTS_DISPATCHERS": true, - "MULTISET": true, - "NATIONAL": true, - "NCHAR": true, - "NCHAR_CS": true, - "NCLOB": true, - "NEEDED": true, - "NESTED": true, - "NETWORK": true, - "NEW": true, - "NEXT": true, - "NOARCHIVELOG": true, - "NOAUDIT": true, - "NOCACHE": true, - "NOCOMPRESS": true, - "NOCYCLE": true, - "NOFORCE": true, - "NOLOGGING": true, - "NOMAXVALUE": true, - "NOMINVALUE": true, - "NONE": true, - "NOORDER": true, - "NOOVERRIDE": true, - "NOPARALLEL": true, - "NOREVERSE": true, - "NORMAL": true, - "NOSORT": true, - "NOT": true, - "NOTHING": true, - "NOWAIT": true, - "NULL": true, - "NUMBER": true, - "NUMERIC": true, - "NVARCHAR2": true, - "OBJECT": true, - "OBJNO": true, - "OBJNO_REUSE": true, - "OF": true, - "OFF": true, - "OFFLINE": true, - "OID": true, - "OIDINDEX": true, - "OLD": true, - "ON": true, - "ONLINE": true, - "ONLY": true, - "OPCODE": true, - "OPEN": true, - "OPTIMAL": true, - "OPTIMIZER_GOAL": true, - "OPTION": true, - "OR": true, - "ORDER": true, - "ORGANIZATION": true, - "OSLABEL": true, - "OVERFLOW": true, - "OWN": true, - "PACKAGE": true, - "PARALLEL": true, - "PARTITION": true, - "PASSWORD": true, - "PASSWORD_GRACE_TIME": true, - "PASSWORD_LIFE_TIME": true, - "PASSWORD_LOCK_TIME": true, - "PASSWORD_REUSE_MAX": true, - "PASSWORD_REUSE_TIME": true, - "PASSWORD_VERIFY_FUNCTION": true, - "PCTFREE": true, - "PCTINCREASE": true, - "PCTTHRESHOLD": true, - "PCTUSED": true, - "PCTVERSION": true, - "PERCENT": true, - "PERMANENT": true, - "PLAN": true, - "PLSQL_DEBUG": true, - "POST_TRANSACTION": true, - "PRECISION": true, - "PRESERVE": true, - "PRIMARY": true, - "PRIOR": true, - "PRIVATE": true, - "PRIVATE_SGA": true, - "PRIVILEGE": true, - "PRIVILEGES": true, - "PROCEDURE": true, - "PROFILE": true, - "PUBLIC": true, - "PURGE": true, - "QUEUE": true, - "QUOTA": true, - "RANGE": true, - "RAW": true, - "RBA": true, - "READ": true, - "READUP": true, - "REAL": true, - "REBUILD": true, - "RECOVER": true, - "RECOVERABLE": true, - "RECOVERY": true, - "REF": true, - "REFERENCES": true, - "REFERENCING": true, - "REFRESH": true, - "RENAME": true, - "REPLACE": true, - "RESET": true, - "RESETLOGS": true, - "RESIZE": true, - "RESOURCE": true, - "RESTRICTED": true, - "RETURN": true, - "RETURNING": true, - "REUSE": true, - "REVERSE": true, - "REVOKE": true, - "ROLE": true, - "ROLES": true, - "ROLLBACK": true, - "ROW": true, - "ROWID": true, - "ROWNUM": true, - "ROWS": true, - "RULE": true, - "SAMPLE": true, - "SAVEPOINT": true, - "SB4": true, - "SCAN_INSTANCES": true, - "SCHEMA": true, - "SCN": true, - "SCOPE": true, - "SD_ALL": true, - "SD_INHIBIT": true, - "SD_SHOW": true, - "SEGMENT": true, - "SEG_BLOCK": true, - "SEG_FILE": true, - "SELECT": true, - "SEQUENCE": true, - "SERIALIZABLE": true, - "SESSION": true, - "SESSION_CACHED_CURSORS": true, - "SESSIONS_PER_USER": true, - "SET": true, - "SHARE": true, - "SHARED": true, - "SHARED_POOL": true, - "SHRINK": true, - "SIZE": true, - "SKIP": true, - "SKIP_UNUSABLE_INDEXES": true, - "SMALLINT": true, - "SNAPSHOT": true, - "SOME": true, - "SORT": true, - "SPECIFICATION": true, - "SPLIT": true, - "SQL_TRACE": true, - "STANDBY": true, - "START": true, - "STATEMENT_ID": true, - "STATISTICS": true, - "STOP": true, - "STORAGE": true, - "STORE": true, - "STRUCTURE": true, - "SUCCESSFUL": true, - "SWITCH": true, - "SYS_OP_ENFORCE_NOT_NULL$": true, - "SYS_OP_NTCIMG$": true, - "SYNONYM": true, - "SYSDATE": true, - "SYSDBA": true, - "SYSOPER": true, - "SYSTEM": true, - "TABLE": true, - "TABLES": true, - "TABLESPACE": true, - "TABLESPACE_NO": true, - "TABNO": true, - "TEMPORARY": true, - "THAN": true, - "THE": true, - "THEN": true, - "THREAD": true, - "TIMESTAMP": true, - "TIME": true, - "TO": true, - "TOPLEVEL": true, - "TRACE": true, - "TRACING": true, - "TRANSACTION": true, - "TRANSITIONAL": true, - "TRIGGER": true, - "TRIGGERS": true, - "TRUE": true, - "TRUNCATE": true, - "TX": true, - "TYPE": true, - "UB2": true, - "UBA": true, - "UID": true, - "UNARCHIVED": true, - "UNDO": true, - "UNION": true, - "UNIQUE": true, - "UNLIMITED": true, - "UNLOCK": true, - "UNRECOVERABLE": true, - "UNTIL": true, - "UNUSABLE": true, - "UNUSED": true, - "UPDATABLE": true, - "UPDATE": true, - "USAGE": true, - "USE": true, - "USER": true, - "USING": true, - "VALIDATE": true, - "VALIDATION": true, - "VALUE": true, - "VALUES": true, - "VARCHAR": true, - "VARCHAR2": true, - "VARYING": true, - "VIEW": true, - "WHEN": true, - "WHENEVER": true, - "WHERE": true, - "WITH": true, - "WITHOUT": true, - "WORK": true, - "WRITE": true, - "WRITEDOWN": true, - "WRITEUP": true, - "XID": true, - "YEAR": true, - "ZONE": true, - } -) - -type oracle struct { - core.Base -} - -func (db *oracle) Init(d *core.DB, uri *core.Uri, drivername, dataSourceName string) error { - return db.Base.Init(d, db, uri, drivername, dataSourceName) -} - -func (db *oracle) SqlType(c *core.Column) string { - var res string - switch t := c.SQLType.Name; t { - case core.Bit, core.TinyInt, core.SmallInt, core.MediumInt, core.Int, core.Integer, core.BigInt, core.Bool, core.Serial, core.BigSerial: - res = "NUMBER" - case core.Binary, core.VarBinary, core.Blob, core.TinyBlob, core.MediumBlob, core.LongBlob, core.Bytea: - return core.Blob - case core.Time, core.DateTime, core.TimeStamp: - res = core.TimeStamp - case core.TimeStampz: - res = "TIMESTAMP WITH TIME ZONE" - case core.Float, core.Double, core.Numeric, core.Decimal: - res = "NUMBER" - case core.Text, core.MediumText, core.LongText, core.Json: - res = "CLOB" - case core.Char, core.Varchar, core.TinyText: - res = "VARCHAR2" - default: - res = t - } - - hasLen1 := (c.Length > 0) - hasLen2 := (c.Length2 > 0) - - if hasLen2 { - res += "(" + strconv.Itoa(c.Length) + "," + strconv.Itoa(c.Length2) + ")" - } else if hasLen1 { - res += "(" + strconv.Itoa(c.Length) + ")" - } - return res -} - -func (db *oracle) AutoIncrStr() string { - return "AUTO_INCREMENT" -} - -func (db *oracle) SupportInsertMany() bool { - return true -} - -func (db *oracle) IsReserved(name string) bool { - _, ok := oracleReservedWords[name] - return ok -} - -func (db *oracle) Quote(name string) string { - return "\"" + name + "\"" -} - -func (db *oracle) QuoteStr() string { - return "\"" -} - -func (db *oracle) SupportEngine() bool { - return false -} - -func (db *oracle) SupportCharset() bool { - return false -} - -func (db *oracle) SupportDropIfExists() bool { - return false -} - -func (db *oracle) IndexOnTable() bool { - return false -} - -func (db *oracle) DropTableSql(tableName string) string { - return fmt.Sprintf("DROP TABLE `%s`", tableName) -} - -func (db *oracle) CreateTableSql(table *core.Table, tableName, storeEngine, charset string) string { - var sql string - sql = "CREATE TABLE " - if tableName == "" { - tableName = table.Name - } - - sql += db.Quote(tableName) + " (" - - pkList := table.PrimaryKeys - - for _, colName := range table.ColumnsSeq() { - col := table.GetColumn(colName) - /*if col.IsPrimaryKey && len(pkList) == 1 { - sql += col.String(b.dialect) - } else {*/ - sql += col.StringNoPk(db) - //} - sql = strings.TrimSpace(sql) - sql += ", " - } - - if len(pkList) > 0 { - sql += "PRIMARY KEY ( " - sql += db.Quote(strings.Join(pkList, db.Quote(","))) - sql += " ), " - } - - sql = sql[:len(sql)-2] + ")" - if db.SupportEngine() && storeEngine != "" { - sql += " ENGINE=" + storeEngine - } - if db.SupportCharset() { - if len(charset) == 0 { - charset = db.URI().Charset - } - if len(charset) > 0 { - sql += " DEFAULT CHARSET " + charset - } - } - return sql -} - -func (db *oracle) IndexCheckSql(tableName, idxName string) (string, []interface{}) { - args := []interface{}{tableName, idxName} - return `SELECT INDEX_NAME FROM USER_INDEXES ` + - `WHERE TABLE_NAME = :1 AND INDEX_NAME = :2`, args -} - -func (db *oracle) TableCheckSql(tableName string) (string, []interface{}) { - args := []interface{}{tableName} - return `SELECT table_name FROM user_tables WHERE table_name = :1`, args -} - -func (db *oracle) MustDropTable(tableName string) error { - sql, args := db.TableCheckSql(tableName) - db.LogSQL(sql, args) - - rows, err := db.DB().Query(sql, args...) - if err != nil { - return err - } - defer rows.Close() - - if !rows.Next() { - return nil - } - - sql = "Drop Table \"" + tableName + "\"" - db.LogSQL(sql, args) - - _, err = db.DB().Exec(sql) - return err -} - -/*func (db *oracle) ColumnCheckSql(tableName, colName string) (string, []interface{}) { - args := []interface{}{strings.ToUpper(tableName), strings.ToUpper(colName)} - return "SELECT column_name FROM USER_TAB_COLUMNS WHERE table_name = ?" + - " AND column_name = ?", args -}*/ - -func (db *oracle) IsColumnExist(tableName, colName string) (bool, error) { - args := []interface{}{tableName, colName} - query := "SELECT column_name FROM USER_TAB_COLUMNS WHERE table_name = :1" + - " AND column_name = :2" - db.LogSQL(query, args) - - rows, err := db.DB().Query(query, args...) - if err != nil { - return false, err - } - defer rows.Close() - - if rows.Next() { - return true, nil - } - return false, nil -} - -func (db *oracle) GetColumns(tableName string) ([]string, map[string]*core.Column, error) { - args := []interface{}{tableName} - s := "SELECT column_name,data_default,data_type,data_length,data_precision,data_scale," + - "nullable FROM USER_TAB_COLUMNS WHERE table_name = :1" - db.LogSQL(s, args) - - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, nil, err - } - defer rows.Close() - - cols := make(map[string]*core.Column) - colSeq := make([]string, 0) - for rows.Next() { - col := new(core.Column) - col.Indexes = make(map[string]int) - - var colName, colDefault, nullable, dataType, dataPrecision, dataScale *string - var dataLen int - - err = rows.Scan(&colName, &colDefault, &dataType, &dataLen, &dataPrecision, - &dataScale, &nullable) - if err != nil { - return nil, nil, err - } - - col.Name = strings.Trim(*colName, `" `) - if colDefault != nil { - col.Default = *colDefault - col.DefaultIsEmpty = false - } - - if *nullable == "Y" { - col.Nullable = true - } else { - col.Nullable = false - } - - var ignore bool - - var dt string - var len1, len2 int - dts := strings.Split(*dataType, "(") - dt = dts[0] - if len(dts) > 1 { - lens := strings.Split(dts[1][:len(dts[1])-1], ",") - if len(lens) > 1 { - len1, _ = strconv.Atoi(lens[0]) - len2, _ = strconv.Atoi(lens[1]) - } else { - len1, _ = strconv.Atoi(lens[0]) - } - } - - switch dt { - case "VARCHAR2": - col.SQLType = core.SQLType{Name: core.Varchar, DefaultLength: len1, DefaultLength2: len2} - case "NVARCHAR2": - col.SQLType = core.SQLType{Name: core.NVarchar, DefaultLength: len1, DefaultLength2: len2} - case "TIMESTAMP WITH TIME ZONE": - col.SQLType = core.SQLType{Name: core.TimeStampz, DefaultLength: 0, DefaultLength2: 0} - case "NUMBER": - col.SQLType = core.SQLType{Name: core.Double, DefaultLength: len1, DefaultLength2: len2} - case "LONG", "LONG RAW": - col.SQLType = core.SQLType{Name: core.Text, DefaultLength: 0, DefaultLength2: 0} - case "RAW": - col.SQLType = core.SQLType{Name: core.Binary, DefaultLength: 0, DefaultLength2: 0} - case "ROWID": - col.SQLType = core.SQLType{Name: core.Varchar, DefaultLength: 18, DefaultLength2: 0} - case "AQ$_SUBSCRIBERS": - ignore = true - default: - col.SQLType = core.SQLType{Name: strings.ToUpper(dt), DefaultLength: len1, DefaultLength2: len2} - } - - if ignore { - continue - } - - if _, ok := core.SqlTypes[col.SQLType.Name]; !ok { - return nil, nil, fmt.Errorf("Unknown colType %v %v", *dataType, col.SQLType) - } - - col.Length = dataLen - - if col.SQLType.IsText() || col.SQLType.IsTime() { - if !col.DefaultIsEmpty { - col.Default = "'" + col.Default + "'" - } - } - cols[col.Name] = col - colSeq = append(colSeq, col.Name) - } - - return colSeq, cols, nil -} - -func (db *oracle) GetTables() ([]*core.Table, error) { - args := []interface{}{} - s := "SELECT table_name FROM user_tables" - db.LogSQL(s, args) - - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, err - } - defer rows.Close() - - tables := make([]*core.Table, 0) - for rows.Next() { - table := core.NewEmptyTable() - err = rows.Scan(&table.Name) - if err != nil { - return nil, err - } - - tables = append(tables, table) - } - return tables, nil -} - -func (db *oracle) GetIndexes(tableName string) (map[string]*core.Index, error) { - args := []interface{}{tableName} - s := "SELECT t.column_name,i.uniqueness,i.index_name FROM user_ind_columns t,user_indexes i " + - "WHERE t.index_name = i.index_name and t.table_name = i.table_name and t.table_name =:1" - db.LogSQL(s, args) - - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, err - } - defer rows.Close() - - indexes := make(map[string]*core.Index, 0) - for rows.Next() { - var indexType int - var indexName, colName, uniqueness string - - err = rows.Scan(&colName, &uniqueness, &indexName) - if err != nil { - return nil, err - } - - indexName = strings.Trim(indexName, `" `) - - var isRegular bool - if strings.HasPrefix(indexName, "IDX_"+tableName) || strings.HasPrefix(indexName, "UQE_"+tableName) { - indexName = indexName[5+len(tableName):] - isRegular = true - } - - if uniqueness == "UNIQUE" { - indexType = core.UniqueType - } else { - indexType = core.IndexType - } - - var index *core.Index - var ok bool - if index, ok = indexes[indexName]; !ok { - index = new(core.Index) - index.Type = indexType - index.Name = indexName - index.IsRegular = isRegular - indexes[indexName] = index - } - index.AddColumn(colName) - } - return indexes, nil -} - -func (db *oracle) Filters() []core.Filter { - return []core.Filter{&core.QuoteFilter{}, &core.SeqFilter{Prefix: ":", Start: 1}, &core.IdFilter{}} -} - -type goracleDriver struct { -} - -func (cfg *goracleDriver) Parse(driverName, dataSourceName string) (*core.Uri, error) { - db := &core.Uri{DbType: core.ORACLE} - dsnPattern := regexp.MustCompile( - `^(?:(?P.*?)(?::(?P.*))?@)?` + // [user[:password]@] - `(?:(?P[^\(]*)(?:\((?P[^\)]*)\))?)?` + // [net[(addr)]] - `\/(?P.*?)` + // /dbname - `(?:\?(?P[^\?]*))?$`) // [?param1=value1¶mN=valueN] - matches := dsnPattern.FindStringSubmatch(dataSourceName) - //tlsConfigRegister := make(map[string]*tls.Config) - names := dsnPattern.SubexpNames() - - for i, match := range matches { - switch names[i] { - case "dbname": - db.DbName = match - } - } - if db.DbName == "" { - return nil, errors.New("dbname is empty") - } - return db, nil -} - -type oci8Driver struct { -} - -//dataSourceName=user/password@ipv4:port/dbname -//dataSourceName=user/password@[ipv6]:port/dbname -func (p *oci8Driver) Parse(driverName, dataSourceName string) (*core.Uri, error) { - db := &core.Uri{DbType: core.ORACLE} - dsnPattern := regexp.MustCompile( - `^(?P.*)\/(?P.*)@` + // user:password@ - `(?P.*)` + // ip:port - `\/(?P.*)`) // dbname - matches := dsnPattern.FindStringSubmatch(dataSourceName) - names := dsnPattern.SubexpNames() - for i, match := range matches { - switch names[i] { - case "dbname": - db.DbName = match - } - } - if db.DbName == "" { - return nil, errors.New("dbname is empty") - } - return db, nil -} diff --git a/vendor/github.com/go-xorm/xorm/dialect_postgres.go b/vendor/github.com/go-xorm/xorm/dialect_postgres.go deleted file mode 100644 index 1f74bd312..000000000 --- a/vendor/github.com/go-xorm/xorm/dialect_postgres.go +++ /dev/null @@ -1,1237 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "errors" - "fmt" - "net/url" - "strconv" - "strings" - - "github.com/go-xorm/core" -) - -// from http://www.postgresql.org/docs/current/static/sql-keywords-appendix.html -var ( - postgresReservedWords = map[string]bool{ - "A": true, - "ABORT": true, - "ABS": true, - "ABSENT": true, - "ABSOLUTE": true, - "ACCESS": true, - "ACCORDING": true, - "ACTION": true, - "ADA": true, - "ADD": true, - "ADMIN": true, - "AFTER": true, - "AGGREGATE": true, - "ALL": true, - "ALLOCATE": true, - "ALSO": true, - "ALTER": true, - "ALWAYS": true, - "ANALYSE": true, - "ANALYZE": true, - "AND": true, - "ANY": true, - "ARE": true, - "ARRAY": true, - "ARRAY_AGG": true, - "ARRAY_MAX_CARDINALITY": true, - "AS": true, - "ASC": true, - "ASENSITIVE": true, - "ASSERTION": true, - "ASSIGNMENT": true, - "ASYMMETRIC": true, - "AT": true, - "ATOMIC": true, - "ATTRIBUTE": true, - "ATTRIBUTES": true, - "AUTHORIZATION": true, - "AVG": true, - "BACKWARD": true, - "BASE64": true, - "BEFORE": true, - "BEGIN": true, - "BEGIN_FRAME": true, - "BEGIN_PARTITION": true, - "BERNOULLI": true, - "BETWEEN": true, - "BIGINT": true, - "BINARY": true, - "BIT": true, - "BIT_LENGTH": true, - "BLOB": true, - "BLOCKED": true, - "BOM": true, - "BOOLEAN": true, - "BOTH": true, - "BREADTH": true, - "BY": true, - "C": true, - "CACHE": true, - "CALL": true, - "CALLED": true, - "CARDINALITY": true, - "CASCADE": true, - "CASCADED": true, - "CASE": true, - "CAST": true, - "CATALOG": true, - "CATALOG_NAME": true, - "CEIL": true, - "CEILING": true, - "CHAIN": true, - "CHAR": true, - "CHARACTER": true, - "CHARACTERISTICS": true, - "CHARACTERS": true, - "CHARACTER_LENGTH": true, - "CHARACTER_SET_CATALOG": true, - "CHARACTER_SET_NAME": true, - "CHARACTER_SET_SCHEMA": true, - "CHAR_LENGTH": true, - "CHECK": true, - "CHECKPOINT": true, - "CLASS": true, - "CLASS_ORIGIN": true, - "CLOB": true, - "CLOSE": true, - "CLUSTER": true, - "COALESCE": true, - "COBOL": true, - "COLLATE": true, - "COLLATION": true, - "COLLATION_CATALOG": true, - "COLLATION_NAME": true, - "COLLATION_SCHEMA": true, - "COLLECT": true, - "COLUMN": true, - "COLUMNS": true, - "COLUMN_NAME": true, - "COMMAND_FUNCTION": true, - "COMMAND_FUNCTION_CODE": true, - "COMMENT": true, - "COMMENTS": true, - "COMMIT": true, - "COMMITTED": true, - "CONCURRENTLY": true, - "CONDITION": true, - "CONDITION_NUMBER": true, - "CONFIGURATION": true, - "CONNECT": true, - "CONNECTION": true, - "CONNECTION_NAME": true, - "CONSTRAINT": true, - "CONSTRAINTS": true, - "CONSTRAINT_CATALOG": true, - "CONSTRAINT_NAME": true, - "CONSTRAINT_SCHEMA": true, - "CONSTRUCTOR": true, - "CONTAINS": true, - "CONTENT": true, - "CONTINUE": true, - "CONTROL": true, - "CONVERSION": true, - "CONVERT": true, - "COPY": true, - "CORR": true, - "CORRESPONDING": true, - "COST": true, - "COUNT": true, - "COVAR_POP": true, - "COVAR_SAMP": true, - "CREATE": true, - "CROSS": true, - "CSV": true, - "CUBE": true, - "CUME_DIST": true, - "CURRENT": true, - "CURRENT_CATALOG": true, - "CURRENT_DATE": true, - "CURRENT_DEFAULT_TRANSFORM_GROUP": true, - "CURRENT_PATH": true, - "CURRENT_ROLE": true, - "CURRENT_ROW": true, - "CURRENT_SCHEMA": true, - "CURRENT_TIME": true, - "CURRENT_TIMESTAMP": true, - "CURRENT_TRANSFORM_GROUP_FOR_TYPE": true, - "CURRENT_USER": true, - "CURSOR": true, - "CURSOR_NAME": true, - "CYCLE": true, - "DATA": true, - "DATABASE": true, - "DATALINK": true, - "DATE": true, - "DATETIME_INTERVAL_CODE": true, - "DATETIME_INTERVAL_PRECISION": true, - "DAY": true, - "DB": true, - "DEALLOCATE": true, - "DEC": true, - "DECIMAL": true, - "DECLARE": true, - "DEFAULT": true, - "DEFAULTS": true, - "DEFERRABLE": true, - "DEFERRED": true, - "DEFINED": true, - "DEFINER": true, - "DEGREE": true, - "DELETE": true, - "DELIMITER": true, - "DELIMITERS": true, - "DENSE_RANK": true, - "DEPTH": true, - "DEREF": true, - "DERIVED": true, - "DESC": true, - "DESCRIBE": true, - "DESCRIPTOR": true, - "DETERMINISTIC": true, - "DIAGNOSTICS": true, - "DICTIONARY": true, - "DISABLE": true, - "DISCARD": true, - "DISCONNECT": true, - "DISPATCH": true, - "DISTINCT": true, - "DLNEWCOPY": true, - "DLPREVIOUSCOPY": true, - "DLURLCOMPLETE": true, - "DLURLCOMPLETEONLY": true, - "DLURLCOMPLETEWRITE": true, - "DLURLPATH": true, - "DLURLPATHONLY": true, - "DLURLPATHWRITE": true, - "DLURLSCHEME": true, - "DLURLSERVER": true, - "DLVALUE": true, - "DO": true, - "DOCUMENT": true, - "DOMAIN": true, - "DOUBLE": true, - "DROP": true, - "DYNAMIC": true, - "DYNAMIC_FUNCTION": true, - "DYNAMIC_FUNCTION_CODE": true, - "EACH": true, - "ELEMENT": true, - "ELSE": true, - "EMPTY": true, - "ENABLE": true, - "ENCODING": true, - "ENCRYPTED": true, - "END": true, - "END-EXEC": true, - "END_FRAME": true, - "END_PARTITION": true, - "ENFORCED": true, - "ENUM": true, - "EQUALS": true, - "ESCAPE": true, - "EVENT": true, - "EVERY": true, - "EXCEPT": true, - "EXCEPTION": true, - "EXCLUDE": true, - "EXCLUDING": true, - "EXCLUSIVE": true, - "EXEC": true, - "EXECUTE": true, - "EXISTS": true, - "EXP": true, - "EXPLAIN": true, - "EXPRESSION": true, - "EXTENSION": true, - "EXTERNAL": true, - "EXTRACT": true, - "FALSE": true, - "FAMILY": true, - "FETCH": true, - "FILE": true, - "FILTER": true, - "FINAL": true, - "FIRST": true, - "FIRST_VALUE": true, - "FLAG": true, - "FLOAT": true, - "FLOOR": true, - "FOLLOWING": true, - "FOR": true, - "FORCE": true, - "FOREIGN": true, - "FORTRAN": true, - "FORWARD": true, - "FOUND": true, - "FRAME_ROW": true, - "FREE": true, - "FREEZE": true, - "FROM": true, - "FS": true, - "FULL": true, - "FUNCTION": true, - "FUNCTIONS": true, - "FUSION": true, - "G": true, - "GENERAL": true, - "GENERATED": true, - "GET": true, - "GLOBAL": true, - "GO": true, - "GOTO": true, - "GRANT": true, - "GRANTED": true, - "GREATEST": true, - "GROUP": true, - "GROUPING": true, - "GROUPS": true, - "HANDLER": true, - "HAVING": true, - "HEADER": true, - "HEX": true, - "HIERARCHY": true, - "HOLD": true, - "HOUR": true, - "ID": true, - "IDENTITY": true, - "IF": true, - "IGNORE": true, - "ILIKE": true, - "IMMEDIATE": true, - "IMMEDIATELY": true, - "IMMUTABLE": true, - "IMPLEMENTATION": true, - "IMPLICIT": true, - "IMPORT": true, - "IN": true, - "INCLUDING": true, - "INCREMENT": true, - "INDENT": true, - "INDEX": true, - "INDEXES": true, - "INDICATOR": true, - "INHERIT": true, - "INHERITS": true, - "INITIALLY": true, - "INLINE": true, - "INNER": true, - "INOUT": true, - "INPUT": true, - "INSENSITIVE": true, - "INSERT": true, - "INSTANCE": true, - "INSTANTIABLE": true, - "INSTEAD": true, - "INT": true, - "INTEGER": true, - "INTEGRITY": true, - "INTERSECT": true, - "INTERSECTION": true, - "INTERVAL": true, - "INTO": true, - "INVOKER": true, - "IS": true, - "ISNULL": true, - "ISOLATION": true, - "JOIN": true, - "K": true, - "KEY": true, - "KEY_MEMBER": true, - "KEY_TYPE": true, - "LABEL": true, - "LAG": true, - "LANGUAGE": true, - "LARGE": true, - "LAST": true, - "LAST_VALUE": true, - "LATERAL": true, - "LC_COLLATE": true, - "LC_CTYPE": true, - "LEAD": true, - "LEADING": true, - "LEAKPROOF": true, - "LEAST": true, - "LEFT": true, - "LENGTH": true, - "LEVEL": true, - "LIBRARY": true, - "LIKE": true, - "LIKE_REGEX": true, - "LIMIT": true, - "LINK": true, - "LISTEN": true, - "LN": true, - "LOAD": true, - "LOCAL": true, - "LOCALTIME": true, - "LOCALTIMESTAMP": true, - "LOCATION": true, - "LOCATOR": true, - "LOCK": true, - "LOWER": true, - "M": true, - "MAP": true, - "MAPPING": true, - "MATCH": true, - "MATCHED": true, - "MATERIALIZED": true, - "MAX": true, - "MAXVALUE": true, - "MAX_CARDINALITY": true, - "MEMBER": true, - "MERGE": true, - "MESSAGE_LENGTH": true, - "MESSAGE_OCTET_LENGTH": true, - "MESSAGE_TEXT": true, - "METHOD": true, - "MIN": true, - "MINUTE": true, - "MINVALUE": true, - "MOD": true, - "MODE": true, - "MODIFIES": true, - "MODULE": true, - "MONTH": true, - "MORE": true, - "MOVE": true, - "MULTISET": true, - "MUMPS": true, - "NAME": true, - "NAMES": true, - "NAMESPACE": true, - "NATIONAL": true, - "NATURAL": true, - "NCHAR": true, - "NCLOB": true, - "NESTING": true, - "NEW": true, - "NEXT": true, - "NFC": true, - "NFD": true, - "NFKC": true, - "NFKD": true, - "NIL": true, - "NO": true, - "NONE": true, - "NORMALIZE": true, - "NORMALIZED": true, - "NOT": true, - "NOTHING": true, - "NOTIFY": true, - "NOTNULL": true, - "NOWAIT": true, - "NTH_VALUE": true, - "NTILE": true, - "NULL": true, - "NULLABLE": true, - "NULLIF": true, - "NULLS": true, - "NUMBER": true, - "NUMERIC": true, - "OBJECT": true, - "OCCURRENCES_REGEX": true, - "OCTETS": true, - "OCTET_LENGTH": true, - "OF": true, - "OFF": true, - "OFFSET": true, - "OIDS": true, - "OLD": true, - "ON": true, - "ONLY": true, - "OPEN": true, - "OPERATOR": true, - "OPTION": true, - "OPTIONS": true, - "OR": true, - "ORDER": true, - "ORDERING": true, - "ORDINALITY": true, - "OTHERS": true, - "OUT": true, - "OUTER": true, - "OUTPUT": true, - "OVER": true, - "OVERLAPS": true, - "OVERLAY": true, - "OVERRIDING": true, - "OWNED": true, - "OWNER": true, - "P": true, - "PAD": true, - "PARAMETER": true, - "PARAMETER_MODE": true, - "PARAMETER_NAME": true, - "PARAMETER_ORDINAL_POSITION": true, - "PARAMETER_SPECIFIC_CATALOG": true, - "PARAMETER_SPECIFIC_NAME": true, - "PARAMETER_SPECIFIC_SCHEMA": true, - "PARSER": true, - "PARTIAL": true, - "PARTITION": true, - "PASCAL": true, - "PASSING": true, - "PASSTHROUGH": true, - "PASSWORD": true, - "PATH": true, - "PERCENT": true, - "PERCENTILE_CONT": true, - "PERCENTILE_DISC": true, - "PERCENT_RANK": true, - "PERIOD": true, - "PERMISSION": true, - "PLACING": true, - "PLANS": true, - "PLI": true, - "PORTION": true, - "POSITION": true, - "POSITION_REGEX": true, - "POWER": true, - "PRECEDES": true, - "PRECEDING": true, - "PRECISION": true, - "PREPARE": true, - "PREPARED": true, - "PRESERVE": true, - "PRIMARY": true, - "PRIOR": true, - "PRIVILEGES": true, - "PROCEDURAL": true, - "PROCEDURE": true, - "PROGRAM": true, - "PUBLIC": true, - "QUOTE": true, - "RANGE": true, - "RANK": true, - "READ": true, - "READS": true, - "REAL": true, - "REASSIGN": true, - "RECHECK": true, - "RECOVERY": true, - "RECURSIVE": true, - "REF": true, - "REFERENCES": true, - "REFERENCING": true, - "REFRESH": true, - "REGR_AVGX": true, - "REGR_AVGY": true, - "REGR_COUNT": true, - "REGR_INTERCEPT": true, - "REGR_R2": true, - "REGR_SLOPE": true, - "REGR_SXX": true, - "REGR_SXY": true, - "REGR_SYY": true, - "REINDEX": true, - "RELATIVE": true, - "RELEASE": true, - "RENAME": true, - "REPEATABLE": true, - "REPLACE": true, - "REPLICA": true, - "REQUIRING": true, - "RESET": true, - "RESPECT": true, - "RESTART": true, - "RESTORE": true, - "RESTRICT": true, - "RESULT": true, - "RETURN": true, - "RETURNED_CARDINALITY": true, - "RETURNED_LENGTH": true, - "RETURNED_OCTET_LENGTH": true, - "RETURNED_SQLSTATE": true, - "RETURNING": true, - "RETURNS": true, - "REVOKE": true, - "RIGHT": true, - "ROLE": true, - "ROLLBACK": true, - "ROLLUP": true, - "ROUTINE": true, - "ROUTINE_CATALOG": true, - "ROUTINE_NAME": true, - "ROUTINE_SCHEMA": true, - "ROW": true, - "ROWS": true, - "ROW_COUNT": true, - "ROW_NUMBER": true, - "RULE": true, - "SAVEPOINT": true, - "SCALE": true, - "SCHEMA": true, - "SCHEMA_NAME": true, - "SCOPE": true, - "SCOPE_CATALOG": true, - "SCOPE_NAME": true, - "SCOPE_SCHEMA": true, - "SCROLL": true, - "SEARCH": true, - "SECOND": true, - "SECTION": true, - "SECURITY": true, - "SELECT": true, - "SELECTIVE": true, - "SELF": true, - "SENSITIVE": true, - "SEQUENCE": true, - "SEQUENCES": true, - "SERIALIZABLE": true, - "SERVER": true, - "SERVER_NAME": true, - "SESSION": true, - "SESSION_USER": true, - "SET": true, - "SETOF": true, - "SETS": true, - "SHARE": true, - "SHOW": true, - "SIMILAR": true, - "SIMPLE": true, - "SIZE": true, - "SMALLINT": true, - "SNAPSHOT": true, - "SOME": true, - "SOURCE": true, - "SPACE": true, - "SPECIFIC": true, - "SPECIFICTYPE": true, - "SPECIFIC_NAME": true, - "SQL": true, - "SQLCODE": true, - "SQLERROR": true, - "SQLEXCEPTION": true, - "SQLSTATE": true, - "SQLWARNING": true, - "SQRT": true, - "STABLE": true, - "STANDALONE": true, - "START": true, - "STATE": true, - "STATEMENT": true, - "STATIC": true, - "STATISTICS": true, - "STDDEV_POP": true, - "STDDEV_SAMP": true, - "STDIN": true, - "STDOUT": true, - "STORAGE": true, - "STRICT": true, - "STRIP": true, - "STRUCTURE": true, - "STYLE": true, - "SUBCLASS_ORIGIN": true, - "SUBMULTISET": true, - "SUBSTRING": true, - "SUBSTRING_REGEX": true, - "SUCCEEDS": true, - "SUM": true, - "SYMMETRIC": true, - "SYSID": true, - "SYSTEM": true, - "SYSTEM_TIME": true, - "SYSTEM_USER": true, - "T": true, - "TABLE": true, - "TABLES": true, - "TABLESAMPLE": true, - "TABLESPACE": true, - "TABLE_NAME": true, - "TEMP": true, - "TEMPLATE": true, - "TEMPORARY": true, - "TEXT": true, - "THEN": true, - "TIES": true, - "TIME": true, - "TIMESTAMP": true, - "TIMEZONE_HOUR": true, - "TIMEZONE_MINUTE": true, - "TO": true, - "TOKEN": true, - "TOP_LEVEL_COUNT": true, - "TRAILING": true, - "TRANSACTION": true, - "TRANSACTIONS_COMMITTED": true, - "TRANSACTIONS_ROLLED_BACK": true, - "TRANSACTION_ACTIVE": true, - "TRANSFORM": true, - "TRANSFORMS": true, - "TRANSLATE": true, - "TRANSLATE_REGEX": true, - "TRANSLATION": true, - "TREAT": true, - "TRIGGER": true, - "TRIGGER_CATALOG": true, - "TRIGGER_NAME": true, - "TRIGGER_SCHEMA": true, - "TRIM": true, - "TRIM_ARRAY": true, - "TRUE": true, - "TRUNCATE": true, - "TRUSTED": true, - "TYPE": true, - "TYPES": true, - "UESCAPE": true, - "UNBOUNDED": true, - "UNCOMMITTED": true, - "UNDER": true, - "UNENCRYPTED": true, - "UNION": true, - "UNIQUE": true, - "UNKNOWN": true, - "UNLINK": true, - "UNLISTEN": true, - "UNLOGGED": true, - "UNNAMED": true, - "UNNEST": true, - "UNTIL": true, - "UNTYPED": true, - "UPDATE": true, - "UPPER": true, - "URI": true, - "USAGE": true, - "USER": true, - "USER_DEFINED_TYPE_CATALOG": true, - "USER_DEFINED_TYPE_CODE": true, - "USER_DEFINED_TYPE_NAME": true, - "USER_DEFINED_TYPE_SCHEMA": true, - "USING": true, - "VACUUM": true, - "VALID": true, - "VALIDATE": true, - "VALIDATOR": true, - "VALUE": true, - "VALUES": true, - "VALUE_OF": true, - "VARBINARY": true, - "VARCHAR": true, - "VARIADIC": true, - "VARYING": true, - "VAR_POP": true, - "VAR_SAMP": true, - "VERBOSE": true, - "VERSION": true, - "VERSIONING": true, - "VIEW": true, - "VOLATILE": true, - "WHEN": true, - "WHENEVER": true, - "WHERE": true, - "WHITESPACE": true, - "WIDTH_BUCKET": true, - "WINDOW": true, - "WITH": true, - "WITHIN": true, - "WITHOUT": true, - "WORK": true, - "WRAPPER": true, - "WRITE": true, - "XML": true, - "XMLAGG": true, - "XMLATTRIBUTES": true, - "XMLBINARY": true, - "XMLCAST": true, - "XMLCOMMENT": true, - "XMLCONCAT": true, - "XMLDECLARATION": true, - "XMLDOCUMENT": true, - "XMLELEMENT": true, - "XMLEXISTS": true, - "XMLFOREST": true, - "XMLITERATE": true, - "XMLNAMESPACES": true, - "XMLPARSE": true, - "XMLPI": true, - "XMLQUERY": true, - "XMLROOT": true, - "XMLSCHEMA": true, - "XMLSERIALIZE": true, - "XMLTABLE": true, - "XMLTEXT": true, - "XMLVALIDATE": true, - "YEAR": true, - "YES": true, - "ZONE": true, - } - - // DefaultPostgresSchema default postgres schema - DefaultPostgresSchema = "public" -) - -const postgresPublicSchema = "public" - -type postgres struct { - core.Base -} - -func (db *postgres) Init(d *core.DB, uri *core.Uri, drivername, dataSourceName string) error { - err := db.Base.Init(d, db, uri, drivername, dataSourceName) - if err != nil { - return err - } - if db.Schema == "" { - db.Schema = DefaultPostgresSchema - } - return nil -} - -func (db *postgres) SqlType(c *core.Column) string { - var res string - switch t := c.SQLType.Name; t { - case core.TinyInt: - res = core.SmallInt - return res - case core.Bit: - res = core.Boolean - return res - case core.MediumInt, core.Int, core.Integer: - if c.IsAutoIncrement { - return core.Serial - } - return core.Integer - case core.BigInt: - if c.IsAutoIncrement { - return core.BigSerial - } - return core.BigInt - case core.Serial, core.BigSerial: - c.IsAutoIncrement = true - c.Nullable = false - res = t - case core.Binary, core.VarBinary: - return core.Bytea - case core.DateTime: - res = core.TimeStamp - case core.TimeStampz: - return "timestamp with time zone" - case core.Float: - res = core.Real - case core.TinyText, core.MediumText, core.LongText: - res = core.Text - case core.NVarchar: - res = core.Varchar - case core.Uuid: - res = core.Uuid - case core.Blob, core.TinyBlob, core.MediumBlob, core.LongBlob: - return core.Bytea - case core.Double: - return "DOUBLE PRECISION" - default: - if c.IsAutoIncrement { - return core.Serial - } - res = t - } - - hasLen1 := (c.Length > 0) - hasLen2 := (c.Length2 > 0) - - if hasLen2 { - res += "(" + strconv.Itoa(c.Length) + "," + strconv.Itoa(c.Length2) + ")" - } else if hasLen1 { - res += "(" + strconv.Itoa(c.Length) + ")" - } - return res -} - -func (db *postgres) SupportInsertMany() bool { - return true -} - -func (db *postgres) IsReserved(name string) bool { - _, ok := postgresReservedWords[name] - return ok -} - -func (db *postgres) Quote(name string) string { - name = strings.Replace(name, ".", `"."`, -1) - return "\"" + name + "\"" -} - -func (db *postgres) QuoteStr() string { - return "\"" -} - -func (db *postgres) AutoIncrStr() string { - return "" -} - -func (db *postgres) SupportEngine() bool { - return false -} - -func (db *postgres) SupportCharset() bool { - return false -} - -func (db *postgres) IndexOnTable() bool { - return false -} - -func (db *postgres) IndexCheckSql(tableName, idxName string) (string, []interface{}) { - if len(db.Schema) == 0 { - args := []interface{}{tableName, idxName} - return `SELECT indexname FROM pg_indexes WHERE tablename = ? AND indexname = ?`, args - } - - args := []interface{}{db.Schema, tableName, idxName} - return `SELECT indexname FROM pg_indexes ` + - `WHERE schemaname = ? AND tablename = ? AND indexname = ?`, args -} - -func (db *postgres) TableCheckSql(tableName string) (string, []interface{}) { - if len(db.Schema) == 0 { - args := []interface{}{tableName} - return `SELECT tablename FROM pg_tables WHERE tablename = ?`, args - } - - args := []interface{}{db.Schema, tableName} - return `SELECT tablename FROM pg_tables WHERE schemaname = ? AND tablename = ?`, args -} - -func (db *postgres) ModifyColumnSql(tableName string, col *core.Column) string { - if len(db.Schema) == 0 { - return fmt.Sprintf("alter table %s ALTER COLUMN %s TYPE %s", - tableName, col.Name, db.SqlType(col)) - } - return fmt.Sprintf("alter table %s.%s ALTER COLUMN %s TYPE %s", - db.Schema, tableName, col.Name, db.SqlType(col)) -} - -func (db *postgres) DropIndexSql(tableName string, index *core.Index) string { - quote := db.Quote - idxName := index.Name - - tableName = strings.Replace(tableName, `"`, "", -1) - tableName = strings.Replace(tableName, `.`, "_", -1) - - if !strings.HasPrefix(idxName, "UQE_") && - !strings.HasPrefix(idxName, "IDX_") { - if index.Type == core.UniqueType { - idxName = fmt.Sprintf("UQE_%v_%v", tableName, index.Name) - } else { - idxName = fmt.Sprintf("IDX_%v_%v", tableName, index.Name) - } - } - if db.Uri.Schema != "" { - idxName = db.Uri.Schema + "." + idxName - } - return fmt.Sprintf("DROP INDEX %v", quote(idxName)) -} - -func (db *postgres) IsColumnExist(tableName, colName string) (bool, error) { - args := []interface{}{db.Schema, tableName, colName} - query := "SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = $1 AND table_name = $2" + - " AND column_name = $3" - if len(db.Schema) == 0 { - args = []interface{}{tableName, colName} - query = "SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = $1" + - " AND column_name = $2" - } - db.LogSQL(query, args) - - rows, err := db.DB().Query(query, args...) - if err != nil { - return false, err - } - defer rows.Close() - - return rows.Next(), nil -} - -func (db *postgres) GetColumns(tableName string) ([]string, map[string]*core.Column, error) { - args := []interface{}{tableName} - s := `SELECT column_name, column_default, is_nullable, data_type, character_maximum_length, numeric_precision, numeric_precision_radix , - CASE WHEN p.contype = 'p' THEN true ELSE false END AS primarykey, - CASE WHEN p.contype = 'u' THEN true ELSE false END AS uniquekey -FROM pg_attribute f - JOIN pg_class c ON c.oid = f.attrelid JOIN pg_type t ON t.oid = f.atttypid - LEFT JOIN pg_attrdef d ON d.adrelid = c.oid AND d.adnum = f.attnum - LEFT JOIN pg_namespace n ON n.oid = c.relnamespace - LEFT JOIN pg_constraint p ON p.conrelid = c.oid AND f.attnum = ANY (p.conkey) - LEFT JOIN pg_class AS g ON p.confrelid = g.oid - LEFT JOIN INFORMATION_SCHEMA.COLUMNS s ON s.column_name=f.attname AND c.relname=s.table_name -WHERE c.relkind = 'r'::char AND c.relname = $1%s AND f.attnum > 0 ORDER BY f.attnum;` - - var f string - if len(db.Schema) != 0 { - args = append(args, db.Schema) - f = " AND s.table_schema = $2" - } - s = fmt.Sprintf(s, f) - - db.LogSQL(s, args) - - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, nil, err - } - defer rows.Close() - - cols := make(map[string]*core.Column) - colSeq := make([]string, 0) - - for rows.Next() { - col := new(core.Column) - col.Indexes = make(map[string]int) - - var colName, isNullable, dataType string - var maxLenStr, colDefault, numPrecision, numRadix *string - var isPK, isUnique bool - err = rows.Scan(&colName, &colDefault, &isNullable, &dataType, &maxLenStr, &numPrecision, &numRadix, &isPK, &isUnique) - if err != nil { - return nil, nil, err - } - - //fmt.Println(args, colName, isNullable, dataType, maxLenStr, colDefault, numPrecision, numRadix, isPK, isUnique) - var maxLen int - if maxLenStr != nil { - maxLen, err = strconv.Atoi(*maxLenStr) - if err != nil { - return nil, nil, err - } - } - - col.Name = strings.Trim(colName, `" `) - - if colDefault != nil || isPK { - if isPK { - col.IsPrimaryKey = true - } else { - col.Default = *colDefault - } - } - - if colDefault != nil && strings.HasPrefix(*colDefault, "nextval(") { - col.IsAutoIncrement = true - } - - col.Nullable = (isNullable == "YES") - - switch dataType { - case "character varying", "character": - col.SQLType = core.SQLType{Name: core.Varchar, DefaultLength: 0, DefaultLength2: 0} - case "timestamp without time zone": - col.SQLType = core.SQLType{Name: core.DateTime, DefaultLength: 0, DefaultLength2: 0} - case "timestamp with time zone": - col.SQLType = core.SQLType{Name: core.TimeStampz, DefaultLength: 0, DefaultLength2: 0} - case "double precision": - col.SQLType = core.SQLType{Name: core.Double, DefaultLength: 0, DefaultLength2: 0} - case "boolean": - col.SQLType = core.SQLType{Name: core.Bool, DefaultLength: 0, DefaultLength2: 0} - case "time without time zone": - col.SQLType = core.SQLType{Name: core.Time, DefaultLength: 0, DefaultLength2: 0} - case "oid": - col.SQLType = core.SQLType{Name: core.BigInt, DefaultLength: 0, DefaultLength2: 0} - default: - col.SQLType = core.SQLType{Name: strings.ToUpper(dataType), DefaultLength: 0, DefaultLength2: 0} - } - if _, ok := core.SqlTypes[col.SQLType.Name]; !ok { - return nil, nil, fmt.Errorf("Unknown colType: %v", dataType) - } - - col.Length = maxLen - - if col.SQLType.IsText() || col.SQLType.IsTime() { - if col.Default != "" { - col.Default = "'" + col.Default + "'" - } else { - if col.DefaultIsEmpty { - col.Default = "''" - } - } - } - cols[col.Name] = col - colSeq = append(colSeq, col.Name) - } - - return colSeq, cols, nil -} - -func (db *postgres) GetTables() ([]*core.Table, error) { - args := []interface{}{} - s := "SELECT tablename FROM pg_tables" - if len(db.Schema) != 0 { - args = append(args, db.Schema) - s = s + " WHERE schemaname = $1" - } - - db.LogSQL(s, args) - - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, err - } - defer rows.Close() - - tables := make([]*core.Table, 0) - for rows.Next() { - table := core.NewEmptyTable() - var name string - err = rows.Scan(&name) - if err != nil { - return nil, err - } - table.Name = name - tables = append(tables, table) - } - return tables, nil -} - -func (db *postgres) GetIndexes(tableName string) (map[string]*core.Index, error) { - args := []interface{}{tableName} - s := fmt.Sprintf("SELECT indexname, indexdef FROM pg_indexes WHERE tablename=$1") - if len(db.Schema) != 0 { - args = append(args, db.Schema) - s = s + " AND schemaname=$2" - } - db.LogSQL(s, args) - - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, err - } - defer rows.Close() - - indexes := make(map[string]*core.Index, 0) - for rows.Next() { - var indexType int - var indexName, indexdef string - var colNames []string - err = rows.Scan(&indexName, &indexdef) - if err != nil { - return nil, err - } - indexName = strings.Trim(indexName, `" `) - if strings.HasSuffix(indexName, "_pkey") { - continue - } - if strings.HasPrefix(indexdef, "CREATE UNIQUE INDEX") { - indexType = core.UniqueType - } else { - indexType = core.IndexType - } - cs := strings.Split(indexdef, "(") - colNames = strings.Split(cs[1][0:len(cs[1])-1], ",") - var isRegular bool - if strings.HasPrefix(indexName, "IDX_"+tableName) || strings.HasPrefix(indexName, "UQE_"+tableName) { - newIdxName := indexName[5+len(tableName):] - isRegular = true - if newIdxName != "" { - indexName = newIdxName - } - } - - index := &core.Index{Name: indexName, Type: indexType, Cols: make([]string, 0)} - for _, colName := range colNames { - index.Cols = append(index.Cols, strings.Trim(colName, `" `)) - } - index.IsRegular = isRegular - indexes[index.Name] = index - } - return indexes, nil -} - -func (db *postgres) Filters() []core.Filter { - return []core.Filter{&core.IdFilter{}, &core.QuoteFilter{}, &core.SeqFilter{Prefix: "$", Start: 1}} -} - -type pqDriver struct { -} - -type values map[string]string - -func (vs values) Set(k, v string) { - vs[k] = v -} - -func (vs values) Get(k string) (v string) { - return vs[k] -} - -func parseURL(connstr string) (string, error) { - u, err := url.Parse(connstr) - if err != nil { - return "", err - } - - if u.Scheme != "postgresql" && u.Scheme != "postgres" { - return "", fmt.Errorf("invalid connection protocol: %s", u.Scheme) - } - - escaper := strings.NewReplacer(` `, `\ `, `'`, `\'`, `\`, `\\`) - - if u.Path != "" { - return escaper.Replace(u.Path[1:]), nil - } - - return "", nil -} - -func parseOpts(name string, o values) error { - if len(name) == 0 { - return fmt.Errorf("invalid options: %s", name) - } - - name = strings.TrimSpace(name) - - ps := strings.Split(name, " ") - for _, p := range ps { - kv := strings.Split(p, "=") - if len(kv) < 2 { - return fmt.Errorf("invalid option: %q", p) - } - o.Set(kv[0], kv[1]) - } - - return nil -} - -func (p *pqDriver) Parse(driverName, dataSourceName string) (*core.Uri, error) { - db := &core.Uri{DbType: core.POSTGRES} - var err error - - if strings.HasPrefix(dataSourceName, "postgresql://") || strings.HasPrefix(dataSourceName, "postgres://") { - db.DbName, err = parseURL(dataSourceName) - if err != nil { - return nil, err - } - } else { - o := make(values) - err = parseOpts(dataSourceName, o) - if err != nil { - return nil, err - } - - db.DbName = o.Get("dbname") - } - - if db.DbName == "" { - return nil, errors.New("dbname is empty") - } - - return db, nil -} - -type pqDriverPgx struct { - pqDriver -} - -func (pgx *pqDriverPgx) Parse(driverName, dataSourceName string) (*core.Uri, error) { - // Remove the leading characters for driver to work - if len(dataSourceName) >= 9 && dataSourceName[0] == 0 { - dataSourceName = dataSourceName[9:] - } - return pgx.pqDriver.Parse(driverName, dataSourceName) -} diff --git a/vendor/github.com/go-xorm/xorm/dialect_sqlite3.go b/vendor/github.com/go-xorm/xorm/dialect_sqlite3.go deleted file mode 100644 index a55b1615e..000000000 --- a/vendor/github.com/go-xorm/xorm/dialect_sqlite3.go +++ /dev/null @@ -1,456 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "database/sql" - "errors" - "fmt" - "regexp" - "strings" - - "github.com/go-xorm/core" -) - -var ( - sqlite3ReservedWords = map[string]bool{ - "ABORT": true, - "ACTION": true, - "ADD": true, - "AFTER": true, - "ALL": true, - "ALTER": true, - "ANALYZE": true, - "AND": true, - "AS": true, - "ASC": true, - "ATTACH": true, - "AUTOINCREMENT": true, - "BEFORE": true, - "BEGIN": true, - "BETWEEN": true, - "BY": true, - "CASCADE": true, - "CASE": true, - "CAST": true, - "CHECK": true, - "COLLATE": true, - "COLUMN": true, - "COMMIT": true, - "CONFLICT": true, - "CONSTRAINT": true, - "CREATE": true, - "CROSS": true, - "CURRENT_DATE": true, - "CURRENT_TIME": true, - "CURRENT_TIMESTAMP": true, - "DATABASE": true, - "DEFAULT": true, - "DEFERRABLE": true, - "DEFERRED": true, - "DELETE": true, - "DESC": true, - "DETACH": true, - "DISTINCT": true, - "DROP": true, - "EACH": true, - "ELSE": true, - "END": true, - "ESCAPE": true, - "EXCEPT": true, - "EXCLUSIVE": true, - "EXISTS": true, - "EXPLAIN": true, - "FAIL": true, - "FOR": true, - "FOREIGN": true, - "FROM": true, - "FULL": true, - "GLOB": true, - "GROUP": true, - "HAVING": true, - "IF": true, - "IGNORE": true, - "IMMEDIATE": true, - "IN": true, - "INDEX": true, - "INDEXED": true, - "INITIALLY": true, - "INNER": true, - "INSERT": true, - "INSTEAD": true, - "INTERSECT": true, - "INTO": true, - "IS": true, - "ISNULL": true, - "JOIN": true, - "KEY": true, - "LEFT": true, - "LIKE": true, - "LIMIT": true, - "MATCH": true, - "NATURAL": true, - "NO": true, - "NOT": true, - "NOTNULL": true, - "NULL": true, - "OF": true, - "OFFSET": true, - "ON": true, - "OR": true, - "ORDER": true, - "OUTER": true, - "PLAN": true, - "PRAGMA": true, - "PRIMARY": true, - "QUERY": true, - "RAISE": true, - "RECURSIVE": true, - "REFERENCES": true, - "REGEXP": true, - "REINDEX": true, - "RELEASE": true, - "RENAME": true, - "REPLACE": true, - "RESTRICT": true, - "RIGHT": true, - "ROLLBACK": true, - "ROW": true, - "SAVEPOINT": true, - "SELECT": true, - "SET": true, - "TABLE": true, - "TEMP": true, - "TEMPORARY": true, - "THEN": true, - "TO": true, - "TRANSACTI": true, - "TRIGGER": true, - "UNION": true, - "UNIQUE": true, - "UPDATE": true, - "USING": true, - "VACUUM": true, - "VALUES": true, - "VIEW": true, - "VIRTUAL": true, - "WHEN": true, - "WHERE": true, - "WITH": true, - "WITHOUT": true, - } -) - -type sqlite3 struct { - core.Base -} - -func (db *sqlite3) Init(d *core.DB, uri *core.Uri, drivername, dataSourceName string) error { - return db.Base.Init(d, db, uri, drivername, dataSourceName) -} - -func (db *sqlite3) SqlType(c *core.Column) string { - switch t := c.SQLType.Name; t { - case core.Bool: - if c.Default == "true" { - c.Default = "1" - } else if c.Default == "false" { - c.Default = "0" - } - return core.Integer - case core.Date, core.DateTime, core.TimeStamp, core.Time: - return core.DateTime - case core.TimeStampz: - return core.Text - case core.Char, core.Varchar, core.NVarchar, core.TinyText, - core.Text, core.MediumText, core.LongText, core.Json: - return core.Text - case core.Bit, core.TinyInt, core.SmallInt, core.MediumInt, core.Int, core.Integer, core.BigInt: - return core.Integer - case core.Float, core.Double, core.Real: - return core.Real - case core.Decimal, core.Numeric: - return core.Numeric - case core.TinyBlob, core.Blob, core.MediumBlob, core.LongBlob, core.Bytea, core.Binary, core.VarBinary: - return core.Blob - case core.Serial, core.BigSerial: - c.IsPrimaryKey = true - c.IsAutoIncrement = true - c.Nullable = false - return core.Integer - default: - return t - } -} - -func (db *sqlite3) FormatBytes(bs []byte) string { - return fmt.Sprintf("X'%x'", bs) -} - -func (db *sqlite3) SupportInsertMany() bool { - return true -} - -func (db *sqlite3) IsReserved(name string) bool { - _, ok := sqlite3ReservedWords[name] - return ok -} - -func (db *sqlite3) Quote(name string) string { - return "`" + name + "`" -} - -func (db *sqlite3) QuoteStr() string { - return "`" -} - -func (db *sqlite3) AutoIncrStr() string { - return "AUTOINCREMENT" -} - -func (db *sqlite3) SupportEngine() bool { - return false -} - -func (db *sqlite3) SupportCharset() bool { - return false -} - -func (db *sqlite3) IndexOnTable() bool { - return false -} - -func (db *sqlite3) IndexCheckSql(tableName, idxName string) (string, []interface{}) { - args := []interface{}{idxName} - return "SELECT name FROM sqlite_master WHERE type='index' and name = ?", args -} - -func (db *sqlite3) TableCheckSql(tableName string) (string, []interface{}) { - args := []interface{}{tableName} - return "SELECT name FROM sqlite_master WHERE type='table' and name = ?", args -} - -func (db *sqlite3) DropIndexSql(tableName string, index *core.Index) string { - //var unique string - quote := db.Quote - idxName := index.Name - - if !strings.HasPrefix(idxName, "UQE_") && - !strings.HasPrefix(idxName, "IDX_") { - if index.Type == core.UniqueType { - idxName = fmt.Sprintf("UQE_%v_%v", tableName, index.Name) - } else { - idxName = fmt.Sprintf("IDX_%v_%v", tableName, index.Name) - } - } - return fmt.Sprintf("DROP INDEX %v", quote(idxName)) -} - -func (db *sqlite3) ForUpdateSql(query string) string { - return query -} - -/*func (db *sqlite3) ColumnCheckSql(tableName, colName string) (string, []interface{}) { - args := []interface{}{tableName} - sql := "SELECT name FROM sqlite_master WHERE type='table' and name = ? and ((sql like '%`" + colName + "`%') or (sql like '%[" + colName + "]%'))" - return sql, args -}*/ - -func (db *sqlite3) IsColumnExist(tableName, colName string) (bool, error) { - args := []interface{}{tableName} - query := "SELECT name FROM sqlite_master WHERE type='table' and name = ? and ((sql like '%`" + colName + "`%') or (sql like '%[" + colName + "]%'))" - db.LogSQL(query, args) - rows, err := db.DB().Query(query, args...) - if err != nil { - return false, err - } - defer rows.Close() - - if rows.Next() { - return true, nil - } - return false, nil -} - -func (db *sqlite3) GetColumns(tableName string) ([]string, map[string]*core.Column, error) { - args := []interface{}{tableName} - s := "SELECT sql FROM sqlite_master WHERE type='table' and name = ?" - db.LogSQL(s, args) - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, nil, err - } - defer rows.Close() - - var name string - for rows.Next() { - err = rows.Scan(&name) - if err != nil { - return nil, nil, err - } - break - } - - if name == "" { - return nil, nil, errors.New("no table named " + tableName) - } - - nStart := strings.Index(name, "(") - nEnd := strings.LastIndex(name, ")") - reg := regexp.MustCompile(`[^\(,\)]*(\([^\(]*\))?`) - colCreates := reg.FindAllString(name[nStart+1:nEnd], -1) - cols := make(map[string]*core.Column) - colSeq := make([]string, 0) - for _, colStr := range colCreates { - reg = regexp.MustCompile(`,\s`) - colStr = reg.ReplaceAllString(colStr, ",") - if strings.HasPrefix(strings.TrimSpace(colStr), "PRIMARY KEY") { - parts := strings.Split(strings.TrimSpace(colStr), "(") - if len(parts) == 2 { - pkCols := strings.Split(strings.TrimRight(strings.TrimSpace(parts[1]), ")"), ",") - for _, pk := range pkCols { - if col, ok := cols[strings.Trim(strings.TrimSpace(pk), "`")]; ok { - col.IsPrimaryKey = true - } - } - } - continue - } - - fields := strings.Fields(strings.TrimSpace(colStr)) - col := new(core.Column) - col.Indexes = make(map[string]int) - col.Nullable = true - col.DefaultIsEmpty = true - - for idx, field := range fields { - if idx == 0 { - col.Name = strings.Trim(strings.Trim(field, "`[] "), `"`) - continue - } else if idx == 1 { - col.SQLType = core.SQLType{Name: field, DefaultLength: 0, DefaultLength2: 0} - } - switch field { - case "PRIMARY": - col.IsPrimaryKey = true - case "AUTOINCREMENT": - col.IsAutoIncrement = true - case "NULL": - if fields[idx-1] == "NOT" { - col.Nullable = false - } else { - col.Nullable = true - } - case "DEFAULT": - col.Default = fields[idx+1] - col.DefaultIsEmpty = false - } - } - if !col.SQLType.IsNumeric() && !col.DefaultIsEmpty { - col.Default = "'" + col.Default + "'" - } - cols[col.Name] = col - colSeq = append(colSeq, col.Name) - } - return colSeq, cols, nil -} - -func (db *sqlite3) GetTables() ([]*core.Table, error) { - args := []interface{}{} - s := "SELECT name FROM sqlite_master WHERE type='table'" - db.LogSQL(s, args) - - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, err - } - defer rows.Close() - - tables := make([]*core.Table, 0) - for rows.Next() { - table := core.NewEmptyTable() - err = rows.Scan(&table.Name) - if err != nil { - return nil, err - } - if table.Name == "sqlite_sequence" { - continue - } - tables = append(tables, table) - } - return tables, nil -} - -func (db *sqlite3) GetIndexes(tableName string) (map[string]*core.Index, error) { - args := []interface{}{tableName} - s := "SELECT sql FROM sqlite_master WHERE type='index' and tbl_name = ?" - db.LogSQL(s, args) - - rows, err := db.DB().Query(s, args...) - if err != nil { - return nil, err - } - defer rows.Close() - - indexes := make(map[string]*core.Index, 0) - for rows.Next() { - var tmpSQL sql.NullString - err = rows.Scan(&tmpSQL) - if err != nil { - return nil, err - } - - if !tmpSQL.Valid { - continue - } - sql := tmpSQL.String - - index := new(core.Index) - nNStart := strings.Index(sql, "INDEX") - nNEnd := strings.Index(sql, "ON") - if nNStart == -1 || nNEnd == -1 { - continue - } - - indexName := strings.Trim(sql[nNStart+6:nNEnd], "` []") - var isRegular bool - if strings.HasPrefix(indexName, "IDX_"+tableName) || strings.HasPrefix(indexName, "UQE_"+tableName) { - index.Name = indexName[5+len(tableName):] - isRegular = true - } else { - index.Name = indexName - } - - if strings.HasPrefix(sql, "CREATE UNIQUE INDEX") { - index.Type = core.UniqueType - } else { - index.Type = core.IndexType - } - - nStart := strings.Index(sql, "(") - nEnd := strings.Index(sql, ")") - colIndexes := strings.Split(sql[nStart+1:nEnd], ",") - - index.Cols = make([]string, 0) - for _, col := range colIndexes { - index.Cols = append(index.Cols, strings.Trim(col, "` []")) - } - index.IsRegular = isRegular - indexes[index.Name] = index - } - - return indexes, nil -} - -func (db *sqlite3) Filters() []core.Filter { - return []core.Filter{&core.IdFilter{}} -} - -type sqlite3Driver struct { -} - -func (p *sqlite3Driver) Parse(driverName, dataSourceName string) (*core.Uri, error) { - return &core.Uri{DbType: core.SQLITE, DbName: dataSourceName}, nil -} diff --git a/vendor/github.com/go-xorm/xorm/doc.go b/vendor/github.com/go-xorm/xorm/doc.go deleted file mode 100644 index a687e6947..000000000 --- a/vendor/github.com/go-xorm/xorm/doc.go +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright 2013 - 2016 The XORM Authors. All rights reserved. -// Use of this source code is governed by a BSD -// license that can be found in the LICENSE file. - -/* - -Package xorm is a simple and powerful ORM for Go. - -Installation - -Make sure you have installed Go 1.6+ and then: - - go get github.com/go-xorm/xorm - -Create Engine - -Firstly, we should new an engine for a database - - engine, err := xorm.NewEngine(driverName, dataSourceName) - -Method NewEngine's parameters is the same as sql.Open. It depends -drivers' implementation. -Generally, one engine for an application is enough. You can set it as package variable. - -Raw Methods - -XORM also support raw SQL execution: - -1. query a SQL string, the returned results is []map[string][]byte - - results, err := engine.Query("select * from user") - -2. execute a SQL string, the returned results - - affected, err := engine.Exec("update user set .... where ...") - -ORM Methods - -There are 8 major ORM methods and many helpful methods to use to operate database. - -1. Insert one or multiple records to database - - affected, err := engine.Insert(&struct) - // INSERT INTO struct () values () - affected, err := engine.Insert(&struct1, &struct2) - // INSERT INTO struct1 () values () - // INSERT INTO struct2 () values () - affected, err := engine.Insert(&sliceOfStruct) - // INSERT INTO struct () values (),(),() - affected, err := engine.Insert(&struct1, &sliceOfStruct2) - // INSERT INTO struct1 () values () - // INSERT INTO struct2 () values (),(),() - -2. Query one record or one variable from database - - has, err := engine.Get(&user) - // SELECT * FROM user LIMIT 1 - - var id int64 - has, err := engine.Table("user").Where("name = ?", name).Get(&id) - // SELECT id FROM user WHERE name = ? LIMIT 1 - -3. Query multiple records from database - - var sliceOfStructs []Struct - err := engine.Find(&sliceOfStructs) - // SELECT * FROM user - - var mapOfStructs = make(map[int64]Struct) - err := engine.Find(&mapOfStructs) - // SELECT * FROM user - - var int64s []int64 - err := engine.Table("user").Cols("id").Find(&int64s) - // SELECT id FROM user - -4. Query multiple records and record by record handle, there two methods, one is Iterate, -another is Rows - - err := engine.Iterate(...) - // SELECT * FROM user - - rows, err := engine.Rows(...) - // SELECT * FROM user - defer rows.Close() - bean := new(Struct) - for rows.Next() { - err = rows.Scan(bean) - } - -5. Update one or more records - - affected, err := engine.ID(...).Update(&user) - // UPDATE user SET ... - -6. Delete one or more records, Delete MUST has condition - - affected, err := engine.Where(...).Delete(&user) - // DELETE FROM user Where ... - -7. Count records - - counts, err := engine.Count(&user) - // SELECT count(*) AS total FROM user - - counts, err := engine.SQL("select count(*) FROM user").Count() - // select count(*) FROM user - -8. Sum records - - sumFloat64, err := engine.Sum(&user, "id") - // SELECT sum(id) from user - - sumFloat64s, err := engine.Sums(&user, "id1", "id2") - // SELECT sum(id1), sum(id2) from user - - sumInt64s, err := engine.SumsInt(&user, "id1", "id2") - // SELECT sum(id1), sum(id2) from user - -Conditions - -The above 8 methods could use with condition methods chainable. -Attention: the above 8 methods should be the last chainable method. - -1. ID, In - - engine.ID(1).Get(&user) // for single primary key - // SELECT * FROM user WHERE id = 1 - engine.ID(core.PK{1, 2}).Get(&user) // for composite primary keys - // SELECT * FROM user WHERE id1 = 1 AND id2 = 2 - engine.In("id", 1, 2, 3).Find(&users) - // SELECT * FROM user WHERE id IN (1, 2, 3) - engine.In("id", []int{1, 2, 3}).Find(&users) - // SELECT * FROM user WHERE id IN (1, 2, 3) - -2. Where, And, Or - - engine.Where().And().Or().Find() - // SELECT * FROM user WHERE (.. AND ..) OR ... - -3. OrderBy, Asc, Desc - - engine.Asc().Desc().Find() - // SELECT * FROM user ORDER BY .. ASC, .. DESC - engine.OrderBy().Find() - // SELECT * FROM user ORDER BY .. - -4. Limit, Top - - engine.Limit().Find() - // SELECT * FROM user LIMIT .. OFFSET .. - engine.Top(5).Find() - // SELECT TOP 5 * FROM user // for mssql - // SELECT * FROM user LIMIT .. OFFSET 0 //for other databases - -5. SQL, let you custom SQL - - var users []User - engine.SQL("select * from user").Find(&users) - -6. Cols, Omit, Distinct - - var users []*User - engine.Cols("col1, col2").Find(&users) - // SELECT col1, col2 FROM user - engine.Cols("col1", "col2").Where().Update(user) - // UPDATE user set col1 = ?, col2 = ? Where ... - engine.Omit("col1").Find(&users) - // SELECT col2, col3 FROM user - engine.Omit("col1").Insert(&user) - // INSERT INTO table (non-col1) VALUES () - engine.Distinct("col1").Find(&users) - // SELECT DISTINCT col1 FROM user - -7. Join, GroupBy, Having - - engine.GroupBy("name").Having("name='xlw'").Find(&users) - //SELECT * FROM user GROUP BY name HAVING name='xlw' - engine.Join("LEFT", "userdetail", "user.id=userdetail.id").Find(&users) - //SELECT * FROM user LEFT JOIN userdetail ON user.id=userdetail.id - -More usage, please visit http://xorm.io/docs -*/ -package xorm diff --git a/vendor/github.com/go-xorm/xorm/engine.go b/vendor/github.com/go-xorm/xorm/engine.go deleted file mode 100644 index 08e2ace5c..000000000 --- a/vendor/github.com/go-xorm/xorm/engine.go +++ /dev/null @@ -1,1613 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "bufio" - "bytes" - "database/sql" - "encoding/gob" - "errors" - "fmt" - "io" - "os" - "reflect" - "strconv" - "strings" - "sync" - "time" - - "github.com/go-xorm/builder" - "github.com/go-xorm/core" -) - -// Engine is the major struct of xorm, it means a database manager. -// Commonly, an application only need one engine -type Engine struct { - db *core.DB - dialect core.Dialect - - ColumnMapper core.IMapper - TableMapper core.IMapper - TagIdentifier string - Tables map[reflect.Type]*core.Table - - mutex *sync.RWMutex - Cacher core.Cacher - - showSQL bool - showExecTime bool - - logger core.ILogger - TZLocation *time.Location // The timezone of the application - DatabaseTZ *time.Location // The timezone of the database - - disableGlobalCache bool - - tagHandlers map[string]tagHandler - - engineGroup *EngineGroup - - cachers map[string]core.Cacher - cacherLock sync.RWMutex -} - -func (engine *Engine) setCacher(tableName string, cacher core.Cacher) { - engine.cacherLock.Lock() - engine.cachers[tableName] = cacher - engine.cacherLock.Unlock() -} - -func (engine *Engine) SetCacher(tableName string, cacher core.Cacher) { - engine.setCacher(tableName, cacher) -} - -func (engine *Engine) getCacher(tableName string) core.Cacher { - var cacher core.Cacher - var ok bool - engine.cacherLock.RLock() - cacher, ok = engine.cachers[tableName] - engine.cacherLock.RUnlock() - if !ok && !engine.disableGlobalCache { - cacher = engine.Cacher - } - return cacher -} - -func (engine *Engine) GetCacher(tableName string) core.Cacher { - return engine.getCacher(tableName) -} - -// BufferSize sets buffer size for iterate -func (engine *Engine) BufferSize(size int) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.BufferSize(size) -} - -// CondDeleted returns the conditions whether a record is soft deleted. -func (engine *Engine) CondDeleted(colName string) builder.Cond { - if engine.dialect.DBType() == core.MSSQL { - return builder.IsNull{colName} - } - return builder.IsNull{colName}.Or(builder.Eq{colName: zeroTime1}) -} - -// ShowSQL show SQL statement or not on logger if log level is great than INFO -func (engine *Engine) ShowSQL(show ...bool) { - engine.logger.ShowSQL(show...) - if len(show) == 0 { - engine.showSQL = true - } else { - engine.showSQL = show[0] - } -} - -// ShowExecTime show SQL statement and execute time or not on logger if log level is great than INFO -func (engine *Engine) ShowExecTime(show ...bool) { - if len(show) == 0 { - engine.showExecTime = true - } else { - engine.showExecTime = show[0] - } -} - -// Logger return the logger interface -func (engine *Engine) Logger() core.ILogger { - return engine.logger -} - -// SetLogger set the new logger -func (engine *Engine) SetLogger(logger core.ILogger) { - engine.logger = logger - engine.dialect.SetLogger(logger) -} - -// SetLogLevel sets the logger level -func (engine *Engine) SetLogLevel(level core.LogLevel) { - engine.logger.SetLevel(level) -} - -// SetDisableGlobalCache disable global cache or not -func (engine *Engine) SetDisableGlobalCache(disable bool) { - if engine.disableGlobalCache != disable { - engine.disableGlobalCache = disable - } -} - -// DriverName return the current sql driver's name -func (engine *Engine) DriverName() string { - return engine.dialect.DriverName() -} - -// DataSourceName return the current connection string -func (engine *Engine) DataSourceName() string { - return engine.dialect.DataSourceName() -} - -// SetMapper set the name mapping rules -func (engine *Engine) SetMapper(mapper core.IMapper) { - engine.SetTableMapper(mapper) - engine.SetColumnMapper(mapper) -} - -// SetTableMapper set the table name mapping rule -func (engine *Engine) SetTableMapper(mapper core.IMapper) { - engine.TableMapper = mapper -} - -// SetColumnMapper set the column name mapping rule -func (engine *Engine) SetColumnMapper(mapper core.IMapper) { - engine.ColumnMapper = mapper -} - -// SupportInsertMany If engine's database support batch insert records like -// "insert into user values (name, age), (name, age)". -// When the return is ture, then engine.Insert(&users) will -// generate batch sql and exeute. -func (engine *Engine) SupportInsertMany() bool { - return engine.dialect.SupportInsertMany() -} - -// QuoteStr Engine's database use which character as quote. -// mysql, sqlite use ` and postgres use " -func (engine *Engine) QuoteStr() string { - return engine.dialect.QuoteStr() -} - -// Quote Use QuoteStr quote the string sql -func (engine *Engine) Quote(value string) string { - value = strings.TrimSpace(value) - if len(value) == 0 { - return value - } - - if string(value[0]) == engine.dialect.QuoteStr() || value[0] == '`' { - return value - } - - value = strings.Replace(value, ".", engine.dialect.QuoteStr()+"."+engine.dialect.QuoteStr(), -1) - - return engine.dialect.QuoteStr() + value + engine.dialect.QuoteStr() -} - -// QuoteTo quotes string and writes into the buffer -func (engine *Engine) QuoteTo(buf *bytes.Buffer, value string) { - if buf == nil { - return - } - - value = strings.TrimSpace(value) - if value == "" { - return - } - - if string(value[0]) == engine.dialect.QuoteStr() || value[0] == '`' { - buf.WriteString(value) - return - } - - value = strings.Replace(value, ".", engine.dialect.QuoteStr()+"."+engine.dialect.QuoteStr(), -1) - - buf.WriteString(engine.dialect.QuoteStr()) - buf.WriteString(value) - buf.WriteString(engine.dialect.QuoteStr()) -} - -func (engine *Engine) quote(sql string) string { - return engine.dialect.QuoteStr() + sql + engine.dialect.QuoteStr() -} - -// SqlType will be deprecated, please use SQLType instead -// -// Deprecated: use SQLType instead -func (engine *Engine) SqlType(c *core.Column) string { - return engine.SQLType(c) -} - -// SQLType A simple wrapper to dialect's core.SqlType method -func (engine *Engine) SQLType(c *core.Column) string { - return engine.dialect.SqlType(c) -} - -// AutoIncrStr Database's autoincrement statement -func (engine *Engine) AutoIncrStr() string { - return engine.dialect.AutoIncrStr() -} - -// SetMaxOpenConns is only available for go 1.2+ -func (engine *Engine) SetMaxOpenConns(conns int) { - engine.db.SetMaxOpenConns(conns) -} - -// SetMaxIdleConns set the max idle connections on pool, default is 2 -func (engine *Engine) SetMaxIdleConns(conns int) { - engine.db.SetMaxIdleConns(conns) -} - -// SetDefaultCacher set the default cacher. Xorm's default not enable cacher. -func (engine *Engine) SetDefaultCacher(cacher core.Cacher) { - engine.Cacher = cacher -} - -// GetDefaultCacher returns the default cacher -func (engine *Engine) GetDefaultCacher() core.Cacher { - return engine.Cacher -} - -// NoCache If you has set default cacher, and you want temporilly stop use cache, -// you can use NoCache() -func (engine *Engine) NoCache() *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.NoCache() -} - -// NoCascade If you do not want to auto cascade load object -func (engine *Engine) NoCascade() *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.NoCascade() -} - -// MapCacher Set a table use a special cacher -func (engine *Engine) MapCacher(bean interface{}, cacher core.Cacher) error { - engine.setCacher(engine.TableName(bean, true), cacher) - return nil -} - -// NewDB provides an interface to operate database directly -func (engine *Engine) NewDB() (*core.DB, error) { - return core.OpenDialect(engine.dialect) -} - -// DB return the wrapper of sql.DB -func (engine *Engine) DB() *core.DB { - return engine.db -} - -// Dialect return database dialect -func (engine *Engine) Dialect() core.Dialect { - return engine.dialect -} - -// NewSession New a session -func (engine *Engine) NewSession() *Session { - session := &Session{engine: engine} - session.Init() - return session -} - -// Close the engine -func (engine *Engine) Close() error { - return engine.db.Close() -} - -// Ping tests if database is alive -func (engine *Engine) Ping() error { - session := engine.NewSession() - defer session.Close() - return session.Ping() -} - -// logging sql -func (engine *Engine) logSQL(sqlStr string, sqlArgs ...interface{}) { - if engine.showSQL && !engine.showExecTime { - if len(sqlArgs) > 0 { - engine.logger.Infof("[SQL] %v %#v", sqlStr, sqlArgs) - } else { - engine.logger.Infof("[SQL] %v", sqlStr) - } - } -} - -// Sql provides raw sql input parameter. When you have a complex SQL statement -// and cannot use Where, Id, In and etc. Methods to describe, you can use SQL. -// -// Deprecated: use SQL instead. -func (engine *Engine) Sql(querystring string, args ...interface{}) *Session { - return engine.SQL(querystring, args...) -} - -// SQL method let's you manually write raw SQL and operate -// For example: -// -// engine.SQL("select * from user").Find(&users) -// -// This code will execute "select * from user" and set the records to users -func (engine *Engine) SQL(query interface{}, args ...interface{}) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.SQL(query, args...) -} - -// NoAutoTime Default if your struct has "created" or "updated" filed tag, the fields -// will automatically be filled with current time when Insert or Update -// invoked. Call NoAutoTime if you dont' want to fill automatically. -func (engine *Engine) NoAutoTime() *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.NoAutoTime() -} - -// NoAutoCondition disable auto generate Where condition from bean or not -func (engine *Engine) NoAutoCondition(no ...bool) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.NoAutoCondition(no...) -} - -// DBMetas Retrieve all tables, columns, indexes' informations from database. -func (engine *Engine) DBMetas() ([]*core.Table, error) { - tables, err := engine.dialect.GetTables() - if err != nil { - return nil, err - } - - for _, table := range tables { - colSeq, cols, err := engine.dialect.GetColumns(table.Name) - if err != nil { - return nil, err - } - for _, name := range colSeq { - table.AddColumn(cols[name]) - } - indexes, err := engine.dialect.GetIndexes(table.Name) - if err != nil { - return nil, err - } - table.Indexes = indexes - - for _, index := range indexes { - for _, name := range index.Cols { - if col := table.GetColumn(name); col != nil { - col.Indexes[index.Name] = index.Type - } else { - return nil, fmt.Errorf("Unknown col %s in index %v of table %v, columns %v", name, index.Name, table.Name, table.ColumnsSeq()) - } - } - } - } - return tables, nil -} - -// DumpAllToFile dump database all table structs and data to a file -func (engine *Engine) DumpAllToFile(fp string, tp ...core.DbType) error { - f, err := os.Create(fp) - if err != nil { - return err - } - defer f.Close() - return engine.DumpAll(f, tp...) -} - -// DumpAll dump database all table structs and data to w -func (engine *Engine) DumpAll(w io.Writer, tp ...core.DbType) error { - tables, err := engine.DBMetas() - if err != nil { - return err - } - return engine.DumpTables(tables, w, tp...) -} - -// DumpTablesToFile dump specified tables to SQL file. -func (engine *Engine) DumpTablesToFile(tables []*core.Table, fp string, tp ...core.DbType) error { - f, err := os.Create(fp) - if err != nil { - return err - } - defer f.Close() - return engine.DumpTables(tables, f, tp...) -} - -// DumpTables dump specify tables to io.Writer -func (engine *Engine) DumpTables(tables []*core.Table, w io.Writer, tp ...core.DbType) error { - return engine.dumpTables(tables, w, tp...) -} - -// dumpTables dump database all table structs and data to w with specify db type -func (engine *Engine) dumpTables(tables []*core.Table, w io.Writer, tp ...core.DbType) error { - var dialect core.Dialect - var distDBName string - if len(tp) == 0 { - dialect = engine.dialect - distDBName = string(engine.dialect.DBType()) - } else { - dialect = core.QueryDialect(tp[0]) - if dialect == nil { - return errors.New("Unsupported database type") - } - dialect.Init(nil, engine.dialect.URI(), "", "") - distDBName = string(tp[0]) - } - - _, err := io.WriteString(w, fmt.Sprintf("/*Generated by xorm v%s %s, from %s to %s*/\n\n", - Version, time.Now().In(engine.TZLocation).Format("2006-01-02 15:04:05"), engine.dialect.DBType(), strings.ToUpper(distDBName))) - if err != nil { - return err - } - - for i, table := range tables { - if i > 0 { - _, err = io.WriteString(w, "\n") - if err != nil { - return err - } - } - _, err = io.WriteString(w, dialect.CreateTableSql(table, "", table.StoreEngine, "")+";\n") - if err != nil { - return err - } - for _, index := range table.Indexes { - _, err = io.WriteString(w, dialect.CreateIndexSql(table.Name, index)+";\n") - if err != nil { - return err - } - } - - cols := table.ColumnsSeq() - colNames := dialect.Quote(strings.Join(cols, dialect.Quote(", "))) - - rows, err := engine.DB().Query("SELECT " + colNames + " FROM " + engine.Quote(table.Name)) - if err != nil { - return err - } - defer rows.Close() - - for rows.Next() { - dest := make([]interface{}, len(cols)) - err = rows.ScanSlice(&dest) - if err != nil { - return err - } - - _, err = io.WriteString(w, "INSERT INTO "+dialect.Quote(table.Name)+" ("+colNames+") VALUES (") - if err != nil { - return err - } - - var temp string - for i, d := range dest { - col := table.GetColumn(cols[i]) - if col == nil { - return errors.New("unknow column error") - } - - if d == nil { - temp += ", NULL" - } else if col.SQLType.IsText() || col.SQLType.IsTime() { - var v = fmt.Sprintf("%s", d) - if strings.HasSuffix(v, " +0000 UTC") { - temp += fmt.Sprintf(", '%s'", v[0:len(v)-len(" +0000 UTC")]) - } else { - temp += ", '" + strings.Replace(v, "'", "''", -1) + "'" - } - } else if col.SQLType.IsBlob() { - if reflect.TypeOf(d).Kind() == reflect.Slice { - temp += fmt.Sprintf(", %s", dialect.FormatBytes(d.([]byte))) - } else if reflect.TypeOf(d).Kind() == reflect.String { - temp += fmt.Sprintf(", '%s'", d.(string)) - } - } else if col.SQLType.IsNumeric() { - switch reflect.TypeOf(d).Kind() { - case reflect.Slice: - temp += fmt.Sprintf(", %s", string(d.([]byte))) - case reflect.Int16, reflect.Int8, reflect.Int32, reflect.Int64, reflect.Int: - if col.SQLType.Name == core.Bool { - temp += fmt.Sprintf(", %v", strconv.FormatBool(reflect.ValueOf(d).Int() > 0)) - } else { - temp += fmt.Sprintf(", %v", d) - } - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - if col.SQLType.Name == core.Bool { - temp += fmt.Sprintf(", %v", strconv.FormatBool(reflect.ValueOf(d).Uint() > 0)) - } else { - temp += fmt.Sprintf(", %v", d) - } - default: - temp += fmt.Sprintf(", %v", d) - } - } else { - s := fmt.Sprintf("%v", d) - if strings.Contains(s, ":") || strings.Contains(s, "-") { - if strings.HasSuffix(s, " +0000 UTC") { - temp += fmt.Sprintf(", '%s'", s[0:len(s)-len(" +0000 UTC")]) - } else { - temp += fmt.Sprintf(", '%s'", s) - } - } else { - temp += fmt.Sprintf(", %s", s) - } - } - } - _, err = io.WriteString(w, temp[2:]+");\n") - if err != nil { - return err - } - } - - // FIXME: Hack for postgres - if string(dialect.DBType()) == core.POSTGRES && table.AutoIncrColumn() != nil { - _, err = io.WriteString(w, "SELECT setval('table_id_seq', COALESCE((SELECT MAX("+table.AutoIncrColumn().Name+") FROM "+dialect.Quote(table.Name)+"), 1), false);\n") - if err != nil { - return err - } - } - } - return nil -} - -// Cascade use cascade or not -func (engine *Engine) Cascade(trueOrFalse ...bool) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Cascade(trueOrFalse...) -} - -// Where method provide a condition query -func (engine *Engine) Where(query interface{}, args ...interface{}) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Where(query, args...) -} - -// Id will be deprecated, please use ID instead -func (engine *Engine) Id(id interface{}) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Id(id) -} - -// ID method provoide a condition as (id) = ? -func (engine *Engine) ID(id interface{}) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.ID(id) -} - -// Before apply before Processor, affected bean is passed to closure arg -func (engine *Engine) Before(closures func(interface{})) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Before(closures) -} - -// After apply after insert Processor, affected bean is passed to closure arg -func (engine *Engine) After(closures func(interface{})) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.After(closures) -} - -// Charset set charset when create table, only support mysql now -func (engine *Engine) Charset(charset string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Charset(charset) -} - -// StoreEngine set store engine when create table, only support mysql now -func (engine *Engine) StoreEngine(storeEngine string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.StoreEngine(storeEngine) -} - -// Distinct use for distinct columns. Caution: when you are using cache, -// distinct will not be cached because cache system need id, -// but distinct will not provide id -func (engine *Engine) Distinct(columns ...string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Distinct(columns...) -} - -// Select customerize your select columns or contents -func (engine *Engine) Select(str string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Select(str) -} - -// Cols only use the parameters as select or update columns -func (engine *Engine) Cols(columns ...string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Cols(columns...) -} - -// AllCols indicates that all columns should be use -func (engine *Engine) AllCols() *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.AllCols() -} - -// MustCols specify some columns must use even if they are empty -func (engine *Engine) MustCols(columns ...string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.MustCols(columns...) -} - -// UseBool xorm automatically retrieve condition according struct, but -// if struct has bool field, it will ignore them. So use UseBool -// to tell system to do not ignore them. -// If no parameters, it will use all the bool field of struct, or -// it will use parameters's columns -func (engine *Engine) UseBool(columns ...string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.UseBool(columns...) -} - -// Omit only not use the parameters as select or update columns -func (engine *Engine) Omit(columns ...string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Omit(columns...) -} - -// Nullable set null when column is zero-value and nullable for update -func (engine *Engine) Nullable(columns ...string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Nullable(columns...) -} - -// In will generate "column IN (?, ?)" -func (engine *Engine) In(column string, args ...interface{}) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.In(column, args...) -} - -// NotIn will generate "column NOT IN (?, ?)" -func (engine *Engine) NotIn(column string, args ...interface{}) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.NotIn(column, args...) -} - -// Incr provides a update string like "column = column + ?" -func (engine *Engine) Incr(column string, arg ...interface{}) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Incr(column, arg...) -} - -// Decr provides a update string like "column = column - ?" -func (engine *Engine) Decr(column string, arg ...interface{}) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Decr(column, arg...) -} - -// SetExpr provides a update string like "column = {expression}" -func (engine *Engine) SetExpr(column string, expression string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.SetExpr(column, expression) -} - -// Table temporarily change the Get, Find, Update's table -func (engine *Engine) Table(tableNameOrBean interface{}) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Table(tableNameOrBean) -} - -// Alias set the table alias -func (engine *Engine) Alias(alias string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Alias(alias) -} - -// Limit will generate "LIMIT start, limit" -func (engine *Engine) Limit(limit int, start ...int) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Limit(limit, start...) -} - -// Desc will generate "ORDER BY column1 DESC, column2 DESC" -func (engine *Engine) Desc(colNames ...string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Desc(colNames...) -} - -// Asc will generate "ORDER BY column1,column2 Asc" -// This method can chainable use. -// -// engine.Desc("name").Asc("age").Find(&users) -// // SELECT * FROM user ORDER BY name DESC, age ASC -// -func (engine *Engine) Asc(colNames ...string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Asc(colNames...) -} - -// OrderBy will generate "ORDER BY order" -func (engine *Engine) OrderBy(order string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.OrderBy(order) -} - -// Prepare enables prepare statement -func (engine *Engine) Prepare() *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Prepare() -} - -// Join the join_operator should be one of INNER, LEFT OUTER, CROSS etc - this will be prepended to JOIN -func (engine *Engine) Join(joinOperator string, tablename interface{}, condition string, args ...interface{}) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Join(joinOperator, tablename, condition, args...) -} - -// GroupBy generate group by statement -func (engine *Engine) GroupBy(keys string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.GroupBy(keys) -} - -// Having generate having statement -func (engine *Engine) Having(conditions string) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Having(conditions) -} - -// UnMapType removes the datbase mapper of a type -func (engine *Engine) UnMapType(t reflect.Type) { - engine.mutex.Lock() - defer engine.mutex.Unlock() - delete(engine.Tables, t) -} - -func (engine *Engine) autoMapType(v reflect.Value) (*core.Table, error) { - t := v.Type() - engine.mutex.Lock() - defer engine.mutex.Unlock() - table, ok := engine.Tables[t] - if !ok { - var err error - table, err = engine.mapType(v) - if err != nil { - return nil, err - } - - engine.Tables[t] = table - if engine.Cacher != nil { - if v.CanAddr() { - engine.GobRegister(v.Addr().Interface()) - } else { - engine.GobRegister(v.Interface()) - } - } - } - return table, nil -} - -// GobRegister register one struct to gob for cache use -func (engine *Engine) GobRegister(v interface{}) *Engine { - gob.Register(v) - return engine -} - -// Table table struct -type Table struct { - *core.Table - Name string -} - -// IsValid if table is valid -func (t *Table) IsValid() bool { - return t.Table != nil && len(t.Name) > 0 -} - -// TableInfo get table info according to bean's content -func (engine *Engine) TableInfo(bean interface{}) *Table { - v := rValue(bean) - tb, err := engine.autoMapType(v) - if err != nil { - engine.logger.Error(err) - } - return &Table{tb, engine.TableName(bean)} -} - -func addIndex(indexName string, table *core.Table, col *core.Column, indexType int) { - if index, ok := table.Indexes[indexName]; ok { - index.AddColumn(col.Name) - col.Indexes[index.Name] = indexType - } else { - index := core.NewIndex(indexName, indexType) - index.AddColumn(col.Name) - table.AddIndex(index) - col.Indexes[index.Name] = indexType - } -} - -// TableName table name interface to define customerize table name -type TableName interface { - TableName() string -} - -var ( - tpTableName = reflect.TypeOf((*TableName)(nil)).Elem() -) - -func (engine *Engine) mapType(v reflect.Value) (*core.Table, error) { - t := v.Type() - table := core.NewEmptyTable() - table.Type = t - table.Name = engine.tbNameForMap(v) - - var idFieldColName string - var hasCacheTag, hasNoCacheTag bool - - for i := 0; i < t.NumField(); i++ { - tag := t.Field(i).Tag - - ormTagStr := tag.Get(engine.TagIdentifier) - var col *core.Column - fieldValue := v.Field(i) - fieldType := fieldValue.Type() - - if ormTagStr != "" { - col = &core.Column{FieldName: t.Field(i).Name, Nullable: true, IsPrimaryKey: false, - IsAutoIncrement: false, MapType: core.TWOSIDES, Indexes: make(map[string]int)} - tags := splitTag(ormTagStr) - - if len(tags) > 0 { - if tags[0] == "-" { - continue - } - - var ctx = tagContext{ - table: table, - col: col, - fieldValue: fieldValue, - indexNames: make(map[string]int), - engine: engine, - } - - if strings.ToUpper(tags[0]) == "EXTENDS" { - if err := ExtendsTagHandler(&ctx); err != nil { - return nil, err - } - continue - } - - for j, key := range tags { - if ctx.ignoreNext { - ctx.ignoreNext = false - continue - } - - k := strings.ToUpper(key) - ctx.tagName = k - ctx.params = []string{} - - pStart := strings.Index(k, "(") - if pStart == 0 { - return nil, errors.New("( could not be the first charactor") - } - if pStart > -1 { - if !strings.HasSuffix(k, ")") { - return nil, fmt.Errorf("field %s tag %s cannot match ) charactor", col.FieldName, key) - } - - ctx.tagName = k[:pStart] - ctx.params = strings.Split(key[pStart+1:len(k)-1], ",") - } - - if j > 0 { - ctx.preTag = strings.ToUpper(tags[j-1]) - } - if j < len(tags)-1 { - ctx.nextTag = tags[j+1] - } else { - ctx.nextTag = "" - } - - if h, ok := engine.tagHandlers[ctx.tagName]; ok { - if err := h(&ctx); err != nil { - return nil, err - } - } else { - if strings.HasPrefix(key, "'") && strings.HasSuffix(key, "'") { - col.Name = key[1 : len(key)-1] - } else { - col.Name = key - } - } - - if ctx.hasCacheTag { - hasCacheTag = true - } - if ctx.hasNoCacheTag { - hasNoCacheTag = true - } - } - - if col.SQLType.Name == "" { - col.SQLType = core.Type2SQLType(fieldType) - } - engine.dialect.SqlType(col) - if col.Length == 0 { - col.Length = col.SQLType.DefaultLength - } - if col.Length2 == 0 { - col.Length2 = col.SQLType.DefaultLength2 - } - if col.Name == "" { - col.Name = engine.ColumnMapper.Obj2Table(t.Field(i).Name) - } - - if ctx.isUnique { - ctx.indexNames[col.Name] = core.UniqueType - } else if ctx.isIndex { - ctx.indexNames[col.Name] = core.IndexType - } - - for indexName, indexType := range ctx.indexNames { - addIndex(indexName, table, col, indexType) - } - } - } else { - var sqlType core.SQLType - if fieldValue.CanAddr() { - if _, ok := fieldValue.Addr().Interface().(core.Conversion); ok { - sqlType = core.SQLType{Name: core.Text} - } - } - if _, ok := fieldValue.Interface().(core.Conversion); ok { - sqlType = core.SQLType{Name: core.Text} - } else { - sqlType = core.Type2SQLType(fieldType) - } - col = core.NewColumn(engine.ColumnMapper.Obj2Table(t.Field(i).Name), - t.Field(i).Name, sqlType, sqlType.DefaultLength, - sqlType.DefaultLength2, true) - - if fieldType.Kind() == reflect.Int64 && (strings.ToUpper(col.FieldName) == "ID" || strings.HasSuffix(strings.ToUpper(col.FieldName), ".ID")) { - idFieldColName = col.Name - } - } - if col.IsAutoIncrement { - col.Nullable = false - } - - table.AddColumn(col) - - } // end for - - if idFieldColName != "" && len(table.PrimaryKeys) == 0 { - col := table.GetColumn(idFieldColName) - col.IsPrimaryKey = true - col.IsAutoIncrement = true - col.Nullable = false - table.PrimaryKeys = append(table.PrimaryKeys, col.Name) - table.AutoIncrement = col.Name - } - - if hasCacheTag { - if engine.Cacher != nil { // !nash! use engine's cacher if provided - engine.logger.Info("enable cache on table:", table.Name) - engine.setCacher(table.Name, engine.Cacher) - } else { - engine.logger.Info("enable LRU cache on table:", table.Name) - engine.setCacher(table.Name, NewLRUCacher2(NewMemoryStore(), time.Hour, 10000)) - } - } - if hasNoCacheTag { - engine.logger.Info("disable cache on table:", table.Name) - engine.setCacher(table.Name, nil) - } - - return table, nil -} - -// IsTableEmpty if a table has any reocrd -func (engine *Engine) IsTableEmpty(bean interface{}) (bool, error) { - session := engine.NewSession() - defer session.Close() - return session.IsTableEmpty(bean) -} - -// IsTableExist if a table is exist -func (engine *Engine) IsTableExist(beanOrTableName interface{}) (bool, error) { - session := engine.NewSession() - defer session.Close() - return session.IsTableExist(beanOrTableName) -} - -// IdOf get id from one struct -// -// Deprecated: use IDOf instead. -func (engine *Engine) IdOf(bean interface{}) core.PK { - return engine.IDOf(bean) -} - -// IDOf get id from one struct -func (engine *Engine) IDOf(bean interface{}) core.PK { - return engine.IdOfV(reflect.ValueOf(bean)) -} - -// IdOfV get id from one value of struct -// -// Deprecated: use IDOfV instead. -func (engine *Engine) IdOfV(rv reflect.Value) core.PK { - return engine.IDOfV(rv) -} - -// IDOfV get id from one value of struct -func (engine *Engine) IDOfV(rv reflect.Value) core.PK { - pk, err := engine.idOfV(rv) - if err != nil { - engine.logger.Error(err) - return nil - } - return pk -} - -func (engine *Engine) idOfV(rv reflect.Value) (core.PK, error) { - v := reflect.Indirect(rv) - table, err := engine.autoMapType(v) - if err != nil { - return nil, err - } - - pk := make([]interface{}, len(table.PrimaryKeys)) - for i, col := range table.PKColumns() { - var err error - - fieldName := col.FieldName - for { - parts := strings.SplitN(fieldName, ".", 2) - if len(parts) == 1 { - break - } - - v = v.FieldByName(parts[0]) - if v.Kind() == reflect.Ptr { - v = v.Elem() - } - if v.Kind() != reflect.Struct { - return nil, ErrUnSupportedType - } - fieldName = parts[1] - } - - pkField := v.FieldByName(fieldName) - switch pkField.Kind() { - case reflect.String: - pk[i], err = engine.idTypeAssertion(col, pkField.String()) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - pk[i], err = engine.idTypeAssertion(col, strconv.FormatInt(pkField.Int(), 10)) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - // id of uint will be converted to int64 - pk[i], err = engine.idTypeAssertion(col, strconv.FormatUint(pkField.Uint(), 10)) - } - - if err != nil { - return nil, err - } - } - return core.PK(pk), nil -} - -func (engine *Engine) idTypeAssertion(col *core.Column, sid string) (interface{}, error) { - if col.SQLType.IsNumeric() { - n, err := strconv.ParseInt(sid, 10, 64) - if err != nil { - return nil, err - } - return n, nil - } else if col.SQLType.IsText() { - return sid, nil - } else { - return nil, errors.New("not supported") - } -} - -// CreateIndexes create indexes -func (engine *Engine) CreateIndexes(bean interface{}) error { - session := engine.NewSession() - defer session.Close() - return session.CreateIndexes(bean) -} - -// CreateUniques create uniques -func (engine *Engine) CreateUniques(bean interface{}) error { - session := engine.NewSession() - defer session.Close() - return session.CreateUniques(bean) -} - -// ClearCacheBean if enabled cache, clear the cache bean -func (engine *Engine) ClearCacheBean(bean interface{}, id string) error { - tableName := engine.TableName(bean) - cacher := engine.getCacher(tableName) - if cacher != nil { - cacher.ClearIds(tableName) - cacher.DelBean(tableName, id) - } - return nil -} - -// ClearCache if enabled cache, clear some tables' cache -func (engine *Engine) ClearCache(beans ...interface{}) error { - for _, bean := range beans { - tableName := engine.TableName(bean) - cacher := engine.getCacher(tableName) - if cacher != nil { - cacher.ClearIds(tableName) - cacher.ClearBeans(tableName) - } - } - return nil -} - -// Sync the new struct changes to database, this method will automatically add -// table, column, index, unique. but will not delete or change anything. -// If you change some field, you should change the database manually. -func (engine *Engine) Sync(beans ...interface{}) error { - session := engine.NewSession() - defer session.Close() - - for _, bean := range beans { - v := rValue(bean) - tableNameNoSchema := engine.TableName(bean) - table, err := engine.autoMapType(v) - if err != nil { - return err - } - - isExist, err := session.Table(bean).isTableExist(tableNameNoSchema) - if err != nil { - return err - } - if !isExist { - err = session.createTable(bean) - if err != nil { - return err - } - } - /*isEmpty, err := engine.IsEmptyTable(bean) - if err != nil { - return err - }*/ - var isEmpty bool - if isEmpty { - err = session.dropTable(bean) - if err != nil { - return err - } - err = session.createTable(bean) - if err != nil { - return err - } - } else { - for _, col := range table.Columns() { - isExist, err := engine.dialect.IsColumnExist(tableNameNoSchema, col.Name) - if err != nil { - return err - } - if !isExist { - if err := session.statement.setRefBean(bean); err != nil { - return err - } - err = session.addColumn(col.Name) - if err != nil { - return err - } - } - } - - for name, index := range table.Indexes { - if err := session.statement.setRefBean(bean); err != nil { - return err - } - if index.Type == core.UniqueType { - isExist, err := session.isIndexExist2(tableNameNoSchema, index.Cols, true) - if err != nil { - return err - } - if !isExist { - if err := session.statement.setRefBean(bean); err != nil { - return err - } - - err = session.addUnique(tableNameNoSchema, name) - if err != nil { - return err - } - } - } else if index.Type == core.IndexType { - isExist, err := session.isIndexExist2(tableNameNoSchema, index.Cols, false) - if err != nil { - return err - } - if !isExist { - if err := session.statement.setRefBean(bean); err != nil { - return err - } - - err = session.addIndex(tableNameNoSchema, name) - if err != nil { - return err - } - } - } else { - return errors.New("unknow index type") - } - } - } - } - return nil -} - -// Sync2 synchronize structs to database tables -func (engine *Engine) Sync2(beans ...interface{}) error { - s := engine.NewSession() - defer s.Close() - return s.Sync2(beans...) -} - -// CreateTables create tabls according bean -func (engine *Engine) CreateTables(beans ...interface{}) error { - session := engine.NewSession() - defer session.Close() - - err := session.Begin() - if err != nil { - return err - } - - for _, bean := range beans { - err = session.createTable(bean) - if err != nil { - session.Rollback() - return err - } - } - return session.Commit() -} - -// DropTables drop specify tables -func (engine *Engine) DropTables(beans ...interface{}) error { - session := engine.NewSession() - defer session.Close() - - err := session.Begin() - if err != nil { - return err - } - - for _, bean := range beans { - err = session.dropTable(bean) - if err != nil { - session.Rollback() - return err - } - } - return session.Commit() -} - -// DropIndexes drop indexes of a table -func (engine *Engine) DropIndexes(bean interface{}) error { - session := engine.NewSession() - defer session.Close() - return session.DropIndexes(bean) -} - -// Exec raw sql -func (engine *Engine) Exec(sql string, args ...interface{}) (sql.Result, error) { - session := engine.NewSession() - defer session.Close() - return session.Exec(sql, args...) -} - -// Query a raw sql and return records as []map[string][]byte -func (engine *Engine) Query(sqlorArgs ...interface{}) (resultsSlice []map[string][]byte, err error) { - session := engine.NewSession() - defer session.Close() - return session.Query(sqlorArgs...) -} - -// QueryString runs a raw sql and return records as []map[string]string -func (engine *Engine) QueryString(sqlorArgs ...interface{}) ([]map[string]string, error) { - session := engine.NewSession() - defer session.Close() - return session.QueryString(sqlorArgs...) -} - -// QueryInterface runs a raw sql and return records as []map[string]interface{} -func (engine *Engine) QueryInterface(sqlorArgs ...interface{}) ([]map[string]interface{}, error) { - session := engine.NewSession() - defer session.Close() - return session.QueryInterface(sqlorArgs...) -} - -// Insert one or more records -func (engine *Engine) Insert(beans ...interface{}) (int64, error) { - session := engine.NewSession() - defer session.Close() - return session.Insert(beans...) -} - -// InsertOne insert only one record -func (engine *Engine) InsertOne(bean interface{}) (int64, error) { - session := engine.NewSession() - defer session.Close() - return session.InsertOne(bean) -} - -// Update records, bean's non-empty fields are updated contents, -// condiBean' non-empty filds are conditions -// CAUTION: -// 1.bool will defaultly be updated content nor conditions -// You should call UseBool if you have bool to use. -// 2.float32 & float64 may be not inexact as conditions -func (engine *Engine) Update(bean interface{}, condiBeans ...interface{}) (int64, error) { - session := engine.NewSession() - defer session.Close() - return session.Update(bean, condiBeans...) -} - -// Delete records, bean's non-empty fields are conditions -func (engine *Engine) Delete(bean interface{}) (int64, error) { - session := engine.NewSession() - defer session.Close() - return session.Delete(bean) -} - -// Get retrieve one record from table, bean's non-empty fields -// are conditions -func (engine *Engine) Get(bean interface{}) (bool, error) { - session := engine.NewSession() - defer session.Close() - return session.Get(bean) -} - -// Exist returns true if the record exist otherwise return false -func (engine *Engine) Exist(bean ...interface{}) (bool, error) { - session := engine.NewSession() - defer session.Close() - return session.Exist(bean...) -} - -// Find retrieve records from table, condiBeans's non-empty fields -// are conditions. beans could be []Struct, []*Struct, map[int64]Struct -// map[int64]*Struct -func (engine *Engine) Find(beans interface{}, condiBeans ...interface{}) error { - session := engine.NewSession() - defer session.Close() - return session.Find(beans, condiBeans...) -} - -// FindAndCount find the results and also return the counts -func (engine *Engine) FindAndCount(rowsSlicePtr interface{}, condiBean ...interface{}) (int64, error) { - session := engine.NewSession() - defer session.Close() - return session.FindAndCount(rowsSlicePtr, condiBean...) -} - -// Iterate record by record handle records from table, bean's non-empty fields -// are conditions. -func (engine *Engine) Iterate(bean interface{}, fun IterFunc) error { - session := engine.NewSession() - defer session.Close() - return session.Iterate(bean, fun) -} - -// Rows return sql.Rows compatible Rows obj, as a forward Iterator object for iterating record by record, bean's non-empty fields -// are conditions. -func (engine *Engine) Rows(bean interface{}) (*Rows, error) { - session := engine.NewSession() - return session.Rows(bean) -} - -// Count counts the records. bean's non-empty fields are conditions. -func (engine *Engine) Count(bean ...interface{}) (int64, error) { - session := engine.NewSession() - defer session.Close() - return session.Count(bean...) -} - -// Sum sum the records by some column. bean's non-empty fields are conditions. -func (engine *Engine) Sum(bean interface{}, colName string) (float64, error) { - session := engine.NewSession() - defer session.Close() - return session.Sum(bean, colName) -} - -// SumInt sum the records by some column. bean's non-empty fields are conditions. -func (engine *Engine) SumInt(bean interface{}, colName string) (int64, error) { - session := engine.NewSession() - defer session.Close() - return session.SumInt(bean, colName) -} - -// Sums sum the records by some columns. bean's non-empty fields are conditions. -func (engine *Engine) Sums(bean interface{}, colNames ...string) ([]float64, error) { - session := engine.NewSession() - defer session.Close() - return session.Sums(bean, colNames...) -} - -// SumsInt like Sums but return slice of int64 instead of float64. -func (engine *Engine) SumsInt(bean interface{}, colNames ...string) ([]int64, error) { - session := engine.NewSession() - defer session.Close() - return session.SumsInt(bean, colNames...) -} - -// ImportFile SQL DDL file -func (engine *Engine) ImportFile(ddlPath string) ([]sql.Result, error) { - file, err := os.Open(ddlPath) - if err != nil { - return nil, err - } - defer file.Close() - return engine.Import(file) -} - -// Import SQL DDL from io.Reader -func (engine *Engine) Import(r io.Reader) ([]sql.Result, error) { - var results []sql.Result - var lastError error - scanner := bufio.NewScanner(r) - - semiColSpliter := func(data []byte, atEOF bool) (advance int, token []byte, err error) { - if atEOF && len(data) == 0 { - return 0, nil, nil - } - if i := bytes.IndexByte(data, ';'); i >= 0 { - return i + 1, data[0:i], nil - } - // If we're at EOF, we have a final, non-terminated line. Return it. - if atEOF { - return len(data), data, nil - } - // Request more data. - return 0, nil, nil - } - - scanner.Split(semiColSpliter) - - for scanner.Scan() { - query := strings.Trim(scanner.Text(), " \t\n\r") - if len(query) > 0 { - engine.logSQL(query) - result, err := engine.DB().Exec(query) - results = append(results, result) - if err != nil { - return nil, err - } - } - } - - return results, lastError -} - -// nowTime return current time -func (engine *Engine) nowTime(col *core.Column) (interface{}, time.Time) { - t := time.Now() - var tz = engine.DatabaseTZ - if !col.DisableTimeZone && col.TimeZone != nil { - tz = col.TimeZone - } - return engine.formatTime(col.SQLType.Name, t.In(tz)), t.In(engine.TZLocation) -} - -func (engine *Engine) formatColTime(col *core.Column, t time.Time) (v interface{}) { - if t.IsZero() { - if col.Nullable { - return nil - } - return "" - } - - if col.TimeZone != nil { - return engine.formatTime(col.SQLType.Name, t.In(col.TimeZone)) - } - return engine.formatTime(col.SQLType.Name, t.In(engine.DatabaseTZ)) -} - -// formatTime format time as column type -func (engine *Engine) formatTime(sqlTypeName string, t time.Time) (v interface{}) { - switch sqlTypeName { - case core.Time: - s := t.Format("2006-01-02 15:04:05") //time.RFC3339 - v = s[11:19] - case core.Date: - v = t.Format("2006-01-02") - case core.DateTime, core.TimeStamp: - v = t.Format("2006-01-02 15:04:05") - case core.TimeStampz: - if engine.dialect.DBType() == core.MSSQL { - v = t.Format("2006-01-02T15:04:05.9999999Z07:00") - } else { - v = t.Format(time.RFC3339Nano) - } - case core.BigInt, core.Int: - v = t.Unix() - default: - v = t - } - return -} - -// GetColumnMapper returns the column name mapper -func (engine *Engine) GetColumnMapper() core.IMapper { - return engine.ColumnMapper -} - -// GetTableMapper returns the table name mapper -func (engine *Engine) GetTableMapper() core.IMapper { - return engine.TableMapper -} - -// GetTZLocation returns time zone of the application -func (engine *Engine) GetTZLocation() *time.Location { - return engine.TZLocation -} - -// SetTZLocation sets time zone of the application -func (engine *Engine) SetTZLocation(tz *time.Location) { - engine.TZLocation = tz -} - -// GetTZDatabase returns time zone of the database -func (engine *Engine) GetTZDatabase() *time.Location { - return engine.DatabaseTZ -} - -// SetTZDatabase sets time zone of the database -func (engine *Engine) SetTZDatabase(tz *time.Location) { - engine.DatabaseTZ = tz -} - -// SetSchema sets the schema of database -func (engine *Engine) SetSchema(schema string) { - engine.dialect.URI().Schema = schema -} - -// Unscoped always disable struct tag "deleted" -func (engine *Engine) Unscoped() *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.Unscoped() -} diff --git a/vendor/github.com/go-xorm/xorm/engine_cond.go b/vendor/github.com/go-xorm/xorm/engine_cond.go deleted file mode 100644 index 4dde8662e..000000000 --- a/vendor/github.com/go-xorm/xorm/engine_cond.go +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright 2017 The Xorm 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 xorm - -import ( - "database/sql/driver" - "encoding/json" - "fmt" - "reflect" - "strings" - "time" - - "github.com/go-xorm/builder" - "github.com/go-xorm/core" -) - -func (engine *Engine) buildConds(table *core.Table, bean interface{}, - includeVersion bool, includeUpdated bool, includeNil bool, - includeAutoIncr bool, allUseBool bool, useAllCols bool, unscoped bool, - mustColumnMap map[string]bool, tableName, aliasName string, addedTableName bool) (builder.Cond, error) { - var conds []builder.Cond - for _, col := range table.Columns() { - if !includeVersion && col.IsVersion { - continue - } - if !includeUpdated && col.IsUpdated { - continue - } - if !includeAutoIncr && col.IsAutoIncrement { - continue - } - - if engine.dialect.DBType() == core.MSSQL && (col.SQLType.Name == core.Text || col.SQLType.IsBlob() || col.SQLType.Name == core.TimeStampz) { - continue - } - if col.SQLType.IsJson() { - continue - } - - var colName string - if addedTableName { - var nm = tableName - if len(aliasName) > 0 { - nm = aliasName - } - colName = engine.Quote(nm) + "." + engine.Quote(col.Name) - } else { - colName = engine.Quote(col.Name) - } - - fieldValuePtr, err := col.ValueOf(bean) - if err != nil { - if !strings.Contains(err.Error(), "is not valid") { - engine.logger.Warn(err) - } - continue - } - - if col.IsDeleted && !unscoped { // tag "deleted" is enabled - conds = append(conds, engine.CondDeleted(colName)) - } - - fieldValue := *fieldValuePtr - if fieldValue.Interface() == nil { - continue - } - - fieldType := reflect.TypeOf(fieldValue.Interface()) - requiredField := useAllCols - - if b, ok := getFlagForColumn(mustColumnMap, col); ok { - if b { - requiredField = true - } else { - continue - } - } - - if fieldType.Kind() == reflect.Ptr { - if fieldValue.IsNil() { - if includeNil { - conds = append(conds, builder.Eq{colName: nil}) - } - continue - } else if !fieldValue.IsValid() { - continue - } else { - // dereference ptr type to instance type - fieldValue = fieldValue.Elem() - fieldType = reflect.TypeOf(fieldValue.Interface()) - requiredField = true - } - } - - var val interface{} - switch fieldType.Kind() { - case reflect.Bool: - if allUseBool || requiredField { - val = fieldValue.Interface() - } else { - // if a bool in a struct, it will not be as a condition because it default is false, - // please use Where() instead - continue - } - case reflect.String: - if !requiredField && fieldValue.String() == "" { - continue - } - // for MyString, should convert to string or panic - if fieldType.String() != reflect.String.String() { - val = fieldValue.String() - } else { - val = fieldValue.Interface() - } - case reflect.Int8, reflect.Int16, reflect.Int, reflect.Int32, reflect.Int64: - if !requiredField && fieldValue.Int() == 0 { - continue - } - val = fieldValue.Interface() - case reflect.Float32, reflect.Float64: - if !requiredField && fieldValue.Float() == 0.0 { - continue - } - val = fieldValue.Interface() - case reflect.Uint8, reflect.Uint16, reflect.Uint, reflect.Uint32, reflect.Uint64: - if !requiredField && fieldValue.Uint() == 0 { - continue - } - t := int64(fieldValue.Uint()) - val = reflect.ValueOf(&t).Interface() - case reflect.Struct: - if fieldType.ConvertibleTo(core.TimeType) { - t := fieldValue.Convert(core.TimeType).Interface().(time.Time) - if !requiredField && (t.IsZero() || !fieldValue.IsValid()) { - continue - } - val = engine.formatColTime(col, t) - } else if _, ok := reflect.New(fieldType).Interface().(core.Conversion); ok { - continue - } else if valNul, ok := fieldValue.Interface().(driver.Valuer); ok { - val, _ = valNul.Value() - if val == nil { - continue - } - } else { - if col.SQLType.IsJson() { - if col.SQLType.IsText() { - bytes, err := json.Marshal(fieldValue.Interface()) - if err != nil { - engine.logger.Error(err) - continue - } - val = string(bytes) - } else if col.SQLType.IsBlob() { - var bytes []byte - var err error - bytes, err = json.Marshal(fieldValue.Interface()) - if err != nil { - engine.logger.Error(err) - continue - } - val = bytes - } - } else { - engine.autoMapType(fieldValue) - if table, ok := engine.Tables[fieldValue.Type()]; ok { - if len(table.PrimaryKeys) == 1 { - pkField := reflect.Indirect(fieldValue).FieldByName(table.PKColumns()[0].FieldName) - // fix non-int pk issues - //if pkField.Int() != 0 { - if pkField.IsValid() && !isZero(pkField.Interface()) { - val = pkField.Interface() - } else { - continue - } - } else { - //TODO: how to handler? - return nil, fmt.Errorf("not supported %v as %v", fieldValue.Interface(), table.PrimaryKeys) - } - } else { - val = fieldValue.Interface() - } - } - } - case reflect.Array: - continue - case reflect.Slice, reflect.Map: - if fieldValue == reflect.Zero(fieldType) { - continue - } - if fieldValue.IsNil() || !fieldValue.IsValid() || fieldValue.Len() == 0 { - continue - } - - if col.SQLType.IsText() { - bytes, err := json.Marshal(fieldValue.Interface()) - if err != nil { - engine.logger.Error(err) - continue - } - val = string(bytes) - } else if col.SQLType.IsBlob() { - var bytes []byte - var err error - if (fieldType.Kind() == reflect.Array || fieldType.Kind() == reflect.Slice) && - fieldType.Elem().Kind() == reflect.Uint8 { - if fieldValue.Len() > 0 { - val = fieldValue.Bytes() - } else { - continue - } - } else { - bytes, err = json.Marshal(fieldValue.Interface()) - if err != nil { - engine.logger.Error(err) - continue - } - val = bytes - } - } else { - continue - } - default: - val = fieldValue.Interface() - } - - conds = append(conds, builder.Eq{colName: val}) - } - - return builder.And(conds...), nil -} diff --git a/vendor/github.com/go-xorm/xorm/engine_group.go b/vendor/github.com/go-xorm/xorm/engine_group.go deleted file mode 100644 index 1de425f37..000000000 --- a/vendor/github.com/go-xorm/xorm/engine_group.go +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2017 The Xorm 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 xorm - -import ( - "github.com/go-xorm/core" -) - -// EngineGroup defines an engine group -type EngineGroup struct { - *Engine - slaves []*Engine - policy GroupPolicy -} - -// NewEngineGroup creates a new engine group -func NewEngineGroup(args1 interface{}, args2 interface{}, policies ...GroupPolicy) (*EngineGroup, error) { - var eg EngineGroup - if len(policies) > 0 { - eg.policy = policies[0] - } else { - eg.policy = RoundRobinPolicy() - } - - driverName, ok1 := args1.(string) - conns, ok2 := args2.([]string) - if ok1 && ok2 { - engines := make([]*Engine, len(conns)) - for i, conn := range conns { - engine, err := NewEngine(driverName, conn) - if err != nil { - return nil, err - } - engine.engineGroup = &eg - engines[i] = engine - } - - eg.Engine = engines[0] - eg.slaves = engines[1:] - return &eg, nil - } - - master, ok3 := args1.(*Engine) - slaves, ok4 := args2.([]*Engine) - if ok3 && ok4 { - master.engineGroup = &eg - for i := 0; i < len(slaves); i++ { - slaves[i].engineGroup = &eg - } - eg.Engine = master - eg.slaves = slaves - return &eg, nil - } - return nil, ErrParamsType -} - -// Close the engine -func (eg *EngineGroup) Close() error { - err := eg.Engine.Close() - if err != nil { - return err - } - - for i := 0; i < len(eg.slaves); i++ { - err := eg.slaves[i].Close() - if err != nil { - return err - } - } - return nil -} - -// Master returns the master engine -func (eg *EngineGroup) Master() *Engine { - return eg.Engine -} - -// Ping tests if database is alive -func (eg *EngineGroup) Ping() error { - if err := eg.Engine.Ping(); err != nil { - return err - } - - for _, slave := range eg.slaves { - if err := slave.Ping(); err != nil { - return err - } - } - return nil -} - -// SetColumnMapper set the column name mapping rule -func (eg *EngineGroup) SetColumnMapper(mapper core.IMapper) { - eg.Engine.ColumnMapper = mapper - for i := 0; i < len(eg.slaves); i++ { - eg.slaves[i].ColumnMapper = mapper - } -} - -// SetDefaultCacher set the default cacher -func (eg *EngineGroup) SetDefaultCacher(cacher core.Cacher) { - eg.Engine.SetDefaultCacher(cacher) - for i := 0; i < len(eg.slaves); i++ { - eg.slaves[i].SetDefaultCacher(cacher) - } -} - -// SetLogger set the new logger -func (eg *EngineGroup) SetLogger(logger core.ILogger) { - eg.Engine.SetLogger(logger) - for i := 0; i < len(eg.slaves); i++ { - eg.slaves[i].SetLogger(logger) - } -} - -// SetLogLevel sets the logger level -func (eg *EngineGroup) SetLogLevel(level core.LogLevel) { - eg.Engine.SetLogLevel(level) - for i := 0; i < len(eg.slaves); i++ { - eg.slaves[i].SetLogLevel(level) - } -} - -// SetMapper set the name mapping rules -func (eg *EngineGroup) SetMapper(mapper core.IMapper) { - eg.Engine.SetMapper(mapper) - for i := 0; i < len(eg.slaves); i++ { - eg.slaves[i].SetMapper(mapper) - } -} - -// SetMaxIdleConns set the max idle connections on pool, default is 2 -func (eg *EngineGroup) SetMaxIdleConns(conns int) { - eg.Engine.db.SetMaxIdleConns(conns) - for i := 0; i < len(eg.slaves); i++ { - eg.slaves[i].db.SetMaxIdleConns(conns) - } -} - -// SetMaxOpenConns is only available for go 1.2+ -func (eg *EngineGroup) SetMaxOpenConns(conns int) { - eg.Engine.db.SetMaxOpenConns(conns) - for i := 0; i < len(eg.slaves); i++ { - eg.slaves[i].db.SetMaxOpenConns(conns) - } -} - -// SetPolicy set the group policy -func (eg *EngineGroup) SetPolicy(policy GroupPolicy) *EngineGroup { - eg.policy = policy - return eg -} - -// SetTableMapper set the table name mapping rule -func (eg *EngineGroup) SetTableMapper(mapper core.IMapper) { - eg.Engine.TableMapper = mapper - for i := 0; i < len(eg.slaves); i++ { - eg.slaves[i].TableMapper = mapper - } -} - -// ShowExecTime show SQL statement and execute time or not on logger if log level is great than INFO -func (eg *EngineGroup) ShowExecTime(show ...bool) { - eg.Engine.ShowExecTime(show...) - for i := 0; i < len(eg.slaves); i++ { - eg.slaves[i].ShowExecTime(show...) - } -} - -// ShowSQL show SQL statement or not on logger if log level is great than INFO -func (eg *EngineGroup) ShowSQL(show ...bool) { - eg.Engine.ShowSQL(show...) - for i := 0; i < len(eg.slaves); i++ { - eg.slaves[i].ShowSQL(show...) - } -} - -// Slave returns one of the physical databases which is a slave according the policy -func (eg *EngineGroup) Slave() *Engine { - switch len(eg.slaves) { - case 0: - return eg.Engine - case 1: - return eg.slaves[0] - } - return eg.policy.Slave(eg) -} - -// Slaves returns all the slaves -func (eg *EngineGroup) Slaves() []*Engine { - return eg.slaves -} diff --git a/vendor/github.com/go-xorm/xorm/engine_group_policy.go b/vendor/github.com/go-xorm/xorm/engine_group_policy.go deleted file mode 100644 index 5b56e8995..000000000 --- a/vendor/github.com/go-xorm/xorm/engine_group_policy.go +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2017 The Xorm 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 xorm - -import ( - "math/rand" - "sync" - "time" -) - -// GroupPolicy is be used by chosing the current slave from slaves -type GroupPolicy interface { - Slave(*EngineGroup) *Engine -} - -// GroupPolicyHandler should be used when a function is a GroupPolicy -type GroupPolicyHandler func(*EngineGroup) *Engine - -// Slave implements the chosen of slaves -func (h GroupPolicyHandler) Slave(eg *EngineGroup) *Engine { - return h(eg) -} - -// RandomPolicy implmentes randomly chose the slave of slaves -func RandomPolicy() GroupPolicyHandler { - var r = rand.New(rand.NewSource(time.Now().UnixNano())) - return func(g *EngineGroup) *Engine { - return g.Slaves()[r.Intn(len(g.Slaves()))] - } -} - -// WeightRandomPolicy implmentes randomly chose the slave of slaves -func WeightRandomPolicy(weights []int) GroupPolicyHandler { - var rands = make([]int, 0, len(weights)) - for i := 0; i < len(weights); i++ { - for n := 0; n < weights[i]; n++ { - rands = append(rands, i) - } - } - var r = rand.New(rand.NewSource(time.Now().UnixNano())) - - return func(g *EngineGroup) *Engine { - var slaves = g.Slaves() - idx := rands[r.Intn(len(rands))] - if idx >= len(slaves) { - idx = len(slaves) - 1 - } - return slaves[idx] - } -} - -func RoundRobinPolicy() GroupPolicyHandler { - var pos = -1 - var lock sync.Mutex - return func(g *EngineGroup) *Engine { - var slaves = g.Slaves() - - lock.Lock() - defer lock.Unlock() - pos++ - if pos >= len(slaves) { - pos = 0 - } - - return slaves[pos] - } -} - -func WeightRoundRobinPolicy(weights []int) GroupPolicyHandler { - var rands = make([]int, 0, len(weights)) - for i := 0; i < len(weights); i++ { - for n := 0; n < weights[i]; n++ { - rands = append(rands, i) - } - } - var pos = -1 - var lock sync.Mutex - - return func(g *EngineGroup) *Engine { - var slaves = g.Slaves() - lock.Lock() - defer lock.Unlock() - pos++ - if pos >= len(rands) { - pos = 0 - } - - idx := rands[pos] - if idx >= len(slaves) { - idx = len(slaves) - 1 - } - return slaves[idx] - } -} - -// LeastConnPolicy implements GroupPolicy, every time will get the least connections slave -func LeastConnPolicy() GroupPolicyHandler { - return func(g *EngineGroup) *Engine { - var slaves = g.Slaves() - connections := 0 - idx := 0 - for i := 0; i < len(slaves); i++ { - openConnections := slaves[i].DB().Stats().OpenConnections - if i == 0 { - connections = openConnections - idx = i - } else if openConnections <= connections { - connections = openConnections - idx = i - } - } - return slaves[idx] - } -} diff --git a/vendor/github.com/go-xorm/xorm/engine_maxlife.go b/vendor/github.com/go-xorm/xorm/engine_maxlife.go deleted file mode 100644 index 22666c5f4..000000000 --- a/vendor/github.com/go-xorm/xorm/engine_maxlife.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2017 The Xorm Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build go1.6 - -package xorm - -import "time" - -// SetConnMaxLifetime sets the maximum amount of time a connection may be reused. -func (engine *Engine) SetConnMaxLifetime(d time.Duration) { - engine.db.SetConnMaxLifetime(d) -} - -// SetConnMaxLifetime sets the maximum amount of time a connection may be reused. -func (eg *EngineGroup) SetConnMaxLifetime(d time.Duration) { - eg.Engine.SetConnMaxLifetime(d) - for i := 0; i < len(eg.slaves); i++ { - eg.slaves[i].SetConnMaxLifetime(d) - } -} diff --git a/vendor/github.com/go-xorm/xorm/engine_table.go b/vendor/github.com/go-xorm/xorm/engine_table.go deleted file mode 100644 index 94871a4bc..000000000 --- a/vendor/github.com/go-xorm/xorm/engine_table.go +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2018 The Xorm 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 xorm - -import ( - "fmt" - "reflect" - "strings" - - "github.com/go-xorm/core" -) - -// TableNameWithSchema will automatically add schema prefix on table name -func (engine *Engine) tbNameWithSchema(v string) string { - // Add schema name as prefix of table name. - // Only for postgres database. - if engine.dialect.DBType() == core.POSTGRES && - engine.dialect.URI().Schema != "" && - engine.dialect.URI().Schema != postgresPublicSchema && - strings.Index(v, ".") == -1 { - return engine.dialect.URI().Schema + "." + v - } - return v -} - -// TableName returns table name with schema prefix if has -func (engine *Engine) TableName(bean interface{}, includeSchema ...bool) string { - tbName := engine.tbNameNoSchema(bean) - if len(includeSchema) > 0 && includeSchema[0] { - tbName = engine.tbNameWithSchema(tbName) - } - - return tbName -} - -// tbName get some table's table name -func (session *Session) tbNameNoSchema(table *core.Table) string { - if len(session.statement.AltTableName) > 0 { - return session.statement.AltTableName - } - - return table.Name -} - -func (engine *Engine) tbNameForMap(v reflect.Value) string { - if v.Type().Implements(tpTableName) { - return v.Interface().(TableName).TableName() - } - if v.Kind() == reflect.Ptr { - v = v.Elem() - if v.Type().Implements(tpTableName) { - return v.Interface().(TableName).TableName() - } - } - - return engine.TableMapper.Obj2Table(v.Type().Name()) -} - -func (engine *Engine) tbNameNoSchema(tablename interface{}) string { - switch tablename.(type) { - case []string: - t := tablename.([]string) - if len(t) > 1 { - return fmt.Sprintf("%v AS %v", engine.Quote(t[0]), engine.Quote(t[1])) - } else if len(t) == 1 { - return engine.Quote(t[0]) - } - case []interface{}: - t := tablename.([]interface{}) - l := len(t) - var table string - if l > 0 { - f := t[0] - switch f.(type) { - case string: - table = f.(string) - case TableName: - table = f.(TableName).TableName() - default: - v := rValue(f) - t := v.Type() - if t.Kind() == reflect.Struct { - table = engine.tbNameForMap(v) - } else { - table = engine.Quote(fmt.Sprintf("%v", f)) - } - } - } - if l > 1 { - return fmt.Sprintf("%v AS %v", engine.Quote(table), - engine.Quote(fmt.Sprintf("%v", t[1]))) - } else if l == 1 { - return engine.Quote(table) - } - case TableName: - return tablename.(TableName).TableName() - case string: - return tablename.(string) - case reflect.Value: - v := tablename.(reflect.Value) - return engine.tbNameForMap(v) - default: - v := rValue(tablename) - t := v.Type() - if t.Kind() == reflect.Struct { - return engine.tbNameForMap(v) - } - return engine.Quote(fmt.Sprintf("%v", tablename)) - } - return "" -} diff --git a/vendor/github.com/go-xorm/xorm/error.go b/vendor/github.com/go-xorm/xorm/error.go deleted file mode 100644 index a223fc4a8..000000000 --- a/vendor/github.com/go-xorm/xorm/error.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "errors" - "fmt" -) - -var ( - // ErrParamsType params error - ErrParamsType = errors.New("Params type error") - // ErrTableNotFound table not found error - ErrTableNotFound = errors.New("Table not found") - // ErrUnSupportedType unsupported error - ErrUnSupportedType = errors.New("Unsupported type error") - // ErrNotExist record does not exist error - ErrNotExist = errors.New("Record does not exist") - // ErrCacheFailed cache failed error - ErrCacheFailed = errors.New("Cache failed") - // ErrNeedDeletedCond delete needs less one condition error - ErrNeedDeletedCond = errors.New("Delete action needs at least one condition") - // ErrNotImplemented not implemented - ErrNotImplemented = errors.New("Not implemented") - // ErrConditionType condition type unsupported - ErrConditionType = errors.New("Unsupported condition type") -) - -// ErrFieldIsNotExist columns does not exist -type ErrFieldIsNotExist struct { - FieldName string - TableName string -} - -func (e ErrFieldIsNotExist) Error() string { - return fmt.Sprintf("field %s is not valid on table %s", e.FieldName, e.TableName) -} - -// ErrFieldIsNotValid is not valid -type ErrFieldIsNotValid struct { - FieldName string - TableName string -} - -func (e ErrFieldIsNotValid) Error() string { - return fmt.Sprintf("field %s is not valid on table %s", e.FieldName, e.TableName) -} diff --git a/vendor/github.com/go-xorm/xorm/gen_reserved.sh b/vendor/github.com/go-xorm/xorm/gen_reserved.sh deleted file mode 100755 index 434a1bfcb..000000000 --- a/vendor/github.com/go-xorm/xorm/gen_reserved.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -if [ -f $1 ];then - cat $1| awk '{printf("\""$1"\":true,\n")}' -else - echo "argument $1 if not a file!" -fi diff --git a/vendor/github.com/go-xorm/xorm/go.mod b/vendor/github.com/go-xorm/xorm/go.mod deleted file mode 100644 index 4510e93c2..000000000 --- a/vendor/github.com/go-xorm/xorm/go.mod +++ /dev/null @@ -1,6 +0,0 @@ -module "github.com/go-xorm/xorm" - -require ( - "github.com/go-xorm/builder" v0.0.0-20180322150003-a9b7ffcca3f0 - "github.com/go-xorm/core" v0.0.0-20180322150003-0177c08cee88 -) diff --git a/vendor/github.com/go-xorm/xorm/helpers.go b/vendor/github.com/go-xorm/xorm/helpers.go deleted file mode 100644 index f1705782e..000000000 --- a/vendor/github.com/go-xorm/xorm/helpers.go +++ /dev/null @@ -1,311 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "errors" - "fmt" - "reflect" - "sort" - "strconv" - "strings" - - "github.com/go-xorm/core" -) - -// str2PK convert string value to primary key value according to tp -func str2PKValue(s string, tp reflect.Type) (reflect.Value, error) { - var err error - var result interface{} - var defReturn = reflect.Zero(tp) - - switch tp.Kind() { - case reflect.Int: - result, err = strconv.Atoi(s) - if err != nil { - return defReturn, fmt.Errorf("convert %s as int: %s", s, err.Error()) - } - case reflect.Int8: - x, err := strconv.Atoi(s) - if err != nil { - return defReturn, fmt.Errorf("convert %s as int8: %s", s, err.Error()) - } - result = int8(x) - case reflect.Int16: - x, err := strconv.Atoi(s) - if err != nil { - return defReturn, fmt.Errorf("convert %s as int16: %s", s, err.Error()) - } - result = int16(x) - case reflect.Int32: - x, err := strconv.Atoi(s) - if err != nil { - return defReturn, fmt.Errorf("convert %s as int32: %s", s, err.Error()) - } - result = int32(x) - case reflect.Int64: - result, err = strconv.ParseInt(s, 10, 64) - if err != nil { - return defReturn, fmt.Errorf("convert %s as int64: %s", s, err.Error()) - } - case reflect.Uint: - x, err := strconv.ParseUint(s, 10, 64) - if err != nil { - return defReturn, fmt.Errorf("convert %s as uint: %s", s, err.Error()) - } - result = uint(x) - case reflect.Uint8: - x, err := strconv.ParseUint(s, 10, 64) - if err != nil { - return defReturn, fmt.Errorf("convert %s as uint8: %s", s, err.Error()) - } - result = uint8(x) - case reflect.Uint16: - x, err := strconv.ParseUint(s, 10, 64) - if err != nil { - return defReturn, fmt.Errorf("convert %s as uint16: %s", s, err.Error()) - } - result = uint16(x) - case reflect.Uint32: - x, err := strconv.ParseUint(s, 10, 64) - if err != nil { - return defReturn, fmt.Errorf("convert %s as uint32: %s", s, err.Error()) - } - result = uint32(x) - case reflect.Uint64: - result, err = strconv.ParseUint(s, 10, 64) - if err != nil { - return defReturn, fmt.Errorf("convert %s as uint64: %s", s, err.Error()) - } - case reflect.String: - result = s - default: - return defReturn, errors.New("unsupported convert type") - } - return reflect.ValueOf(result).Convert(tp), nil -} - -func str2PK(s string, tp reflect.Type) (interface{}, error) { - v, err := str2PKValue(s, tp) - if err != nil { - return nil, err - } - return v.Interface(), nil -} - -func splitTag(tag string) (tags []string) { - tag = strings.TrimSpace(tag) - var hasQuote = false - var lastIdx = 0 - for i, t := range tag { - if t == '\'' { - hasQuote = !hasQuote - } else if t == ' ' { - if lastIdx < i && !hasQuote { - tags = append(tags, strings.TrimSpace(tag[lastIdx:i])) - lastIdx = i + 1 - } - } - } - if lastIdx < len(tag) { - tags = append(tags, strings.TrimSpace(tag[lastIdx:])) - } - return -} - -type zeroable interface { - IsZero() bool -} - -func isZero(k interface{}) bool { - switch k.(type) { - case int: - return k.(int) == 0 - case int8: - return k.(int8) == 0 - case int16: - return k.(int16) == 0 - case int32: - return k.(int32) == 0 - case int64: - return k.(int64) == 0 - case uint: - return k.(uint) == 0 - case uint8: - return k.(uint8) == 0 - case uint16: - return k.(uint16) == 0 - case uint32: - return k.(uint32) == 0 - case uint64: - return k.(uint64) == 0 - case float32: - return k.(float32) == 0 - case float64: - return k.(float64) == 0 - case bool: - return k.(bool) == false - case string: - return k.(string) == "" - case zeroable: - return k.(zeroable).IsZero() - } - return false -} - -func isStructZero(v reflect.Value) bool { - if !v.IsValid() { - return true - } - - for i := 0; i < v.NumField(); i++ { - field := v.Field(i) - switch field.Kind() { - case reflect.Ptr: - field = field.Elem() - fallthrough - case reflect.Struct: - if !isStructZero(field) { - return false - } - default: - if field.CanInterface() && !isZero(field.Interface()) { - return false - } - } - } - return true -} - -func isArrayValueZero(v reflect.Value) bool { - if !v.IsValid() || v.Len() == 0 { - return true - } - - for i := 0; i < v.Len(); i++ { - if !isZero(v.Index(i).Interface()) { - return false - } - } - - return true -} - -func int64ToIntValue(id int64, tp reflect.Type) reflect.Value { - var v interface{} - kind := tp.Kind() - - if kind == reflect.Ptr { - kind = tp.Elem().Kind() - } - - switch kind { - case reflect.Int16: - temp := int16(id) - v = &temp - case reflect.Int32: - temp := int32(id) - v = &temp - case reflect.Int: - temp := int(id) - v = &temp - case reflect.Int64: - temp := id - v = &temp - case reflect.Uint16: - temp := uint16(id) - v = &temp - case reflect.Uint32: - temp := uint32(id) - v = &temp - case reflect.Uint64: - temp := uint64(id) - v = &temp - case reflect.Uint: - temp := uint(id) - v = &temp - } - - if tp.Kind() == reflect.Ptr { - return reflect.ValueOf(v).Convert(tp) - } - return reflect.ValueOf(v).Elem().Convert(tp) -} - -func int64ToInt(id int64, tp reflect.Type) interface{} { - return int64ToIntValue(id, tp).Interface() -} - -func isPKZero(pk core.PK) bool { - for _, k := range pk { - if isZero(k) { - return true - } - } - return false -} - -func indexNoCase(s, sep string) int { - return strings.Index(strings.ToLower(s), strings.ToLower(sep)) -} - -func splitNoCase(s, sep string) []string { - idx := indexNoCase(s, sep) - if idx < 0 { - return []string{s} - } - return strings.Split(s, s[idx:idx+len(sep)]) -} - -func splitNNoCase(s, sep string, n int) []string { - idx := indexNoCase(s, sep) - if idx < 0 { - return []string{s} - } - return strings.SplitN(s, s[idx:idx+len(sep)], n) -} - -func makeArray(elem string, count int) []string { - res := make([]string, count) - for i := 0; i < count; i++ { - res[i] = elem - } - return res -} - -func rValue(bean interface{}) reflect.Value { - return reflect.Indirect(reflect.ValueOf(bean)) -} - -func rType(bean interface{}) reflect.Type { - sliceValue := reflect.Indirect(reflect.ValueOf(bean)) - //return reflect.TypeOf(sliceValue.Interface()) - return sliceValue.Type() -} - -func structName(v reflect.Type) string { - for v.Kind() == reflect.Ptr { - v = v.Elem() - } - return v.Name() -} - -func sliceEq(left, right []string) bool { - if len(left) != len(right) { - return false - } - sort.Sort(sort.StringSlice(left)) - sort.Sort(sort.StringSlice(right)) - for i := 0; i < len(left); i++ { - if left[i] != right[i] { - return false - } - } - return true -} - -func indexName(tableName, idxName string) string { - return fmt.Sprintf("IDX_%v_%v", tableName, idxName) -} diff --git a/vendor/github.com/go-xorm/xorm/helpler_time.go b/vendor/github.com/go-xorm/xorm/helpler_time.go deleted file mode 100644 index f4013e27e..000000000 --- a/vendor/github.com/go-xorm/xorm/helpler_time.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2017 The Xorm 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 xorm - -import "time" - -const ( - zeroTime0 = "0000-00-00 00:00:00" - zeroTime1 = "0001-01-01 00:00:00" -) - -func formatTime(t time.Time) string { - return t.Format("2006-01-02 15:04:05") -} - -func isTimeZero(t time.Time) bool { - return t.IsZero() || formatTime(t) == zeroTime0 || - formatTime(t) == zeroTime1 -} diff --git a/vendor/github.com/go-xorm/xorm/interface.go b/vendor/github.com/go-xorm/xorm/interface.go deleted file mode 100644 index 0bc12ba00..000000000 --- a/vendor/github.com/go-xorm/xorm/interface.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2017 The Xorm 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 xorm - -import ( - "database/sql" - "reflect" - "time" - - "github.com/go-xorm/core" -) - -// Interface defines the interface which Engine, EngineGroup and Session will implementate. -type Interface interface { - AllCols() *Session - Alias(alias string) *Session - Asc(colNames ...string) *Session - BufferSize(size int) *Session - Cols(columns ...string) *Session - Count(...interface{}) (int64, error) - CreateIndexes(bean interface{}) error - CreateUniques(bean interface{}) error - Decr(column string, arg ...interface{}) *Session - Desc(...string) *Session - Delete(interface{}) (int64, error) - Distinct(columns ...string) *Session - DropIndexes(bean interface{}) error - Exec(string, ...interface{}) (sql.Result, error) - Exist(bean ...interface{}) (bool, error) - Find(interface{}, ...interface{}) error - FindAndCount(interface{}, ...interface{}) (int64, error) - Get(interface{}) (bool, error) - GroupBy(keys string) *Session - ID(interface{}) *Session - In(string, ...interface{}) *Session - Incr(column string, arg ...interface{}) *Session - Insert(...interface{}) (int64, error) - InsertOne(interface{}) (int64, error) - IsTableEmpty(bean interface{}) (bool, error) - IsTableExist(beanOrTableName interface{}) (bool, error) - Iterate(interface{}, IterFunc) error - Limit(int, ...int) *Session - MustCols(columns ...string) *Session - NoAutoCondition(...bool) *Session - NotIn(string, ...interface{}) *Session - Join(joinOperator string, tablename interface{}, condition string, args ...interface{}) *Session - Omit(columns ...string) *Session - OrderBy(order string) *Session - Ping() error - Query(sqlOrAgrs ...interface{}) (resultsSlice []map[string][]byte, err error) - QueryInterface(sqlorArgs ...interface{}) ([]map[string]interface{}, error) - QueryString(sqlorArgs ...interface{}) ([]map[string]string, error) - Rows(bean interface{}) (*Rows, error) - SetExpr(string, string) *Session - SQL(interface{}, ...interface{}) *Session - Sum(bean interface{}, colName string) (float64, error) - SumInt(bean interface{}, colName string) (int64, error) - Sums(bean interface{}, colNames ...string) ([]float64, error) - SumsInt(bean interface{}, colNames ...string) ([]int64, error) - Table(tableNameOrBean interface{}) *Session - Unscoped() *Session - Update(bean interface{}, condiBeans ...interface{}) (int64, error) - UseBool(...string) *Session - Where(interface{}, ...interface{}) *Session -} - -// EngineInterface defines the interface which Engine, EngineGroup will implementate. -type EngineInterface interface { - Interface - - Before(func(interface{})) *Session - Charset(charset string) *Session - CreateTables(...interface{}) error - DBMetas() ([]*core.Table, error) - Dialect() core.Dialect - DropTables(...interface{}) error - DumpAllToFile(fp string, tp ...core.DbType) error - GetCacher(string) core.Cacher - GetColumnMapper() core.IMapper - GetDefaultCacher() core.Cacher - GetTableMapper() core.IMapper - GetTZDatabase() *time.Location - GetTZLocation() *time.Location - NewSession() *Session - NoAutoTime() *Session - Quote(string) string - SetCacher(string, core.Cacher) - SetDefaultCacher(core.Cacher) - SetLogLevel(core.LogLevel) - SetMapper(core.IMapper) - SetSchema(string) - SetTZDatabase(tz *time.Location) - SetTZLocation(tz *time.Location) - ShowSQL(show ...bool) - Sync(...interface{}) error - Sync2(...interface{}) error - StoreEngine(storeEngine string) *Session - TableInfo(bean interface{}) *Table - TableName(interface{}, ...bool) string - UnMapType(reflect.Type) -} - -var ( - _ Interface = &Session{} - _ EngineInterface = &Engine{} - _ EngineInterface = &EngineGroup{} -) diff --git a/vendor/github.com/go-xorm/xorm/logger.go b/vendor/github.com/go-xorm/xorm/logger.go deleted file mode 100644 index 727d030a4..000000000 --- a/vendor/github.com/go-xorm/xorm/logger.go +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "fmt" - "io" - "log" - - "github.com/go-xorm/core" -) - -// default log options -const ( - DEFAULT_LOG_PREFIX = "[xorm]" - DEFAULT_LOG_FLAG = log.Ldate | log.Lmicroseconds - DEFAULT_LOG_LEVEL = core.LOG_DEBUG -) - -var _ core.ILogger = DiscardLogger{} - -// DiscardLogger don't log implementation for core.ILogger -type DiscardLogger struct{} - -// Debug empty implementation -func (DiscardLogger) Debug(v ...interface{}) {} - -// Debugf empty implementation -func (DiscardLogger) Debugf(format string, v ...interface{}) {} - -// Error empty implementation -func (DiscardLogger) Error(v ...interface{}) {} - -// Errorf empty implementation -func (DiscardLogger) Errorf(format string, v ...interface{}) {} - -// Info empty implementation -func (DiscardLogger) Info(v ...interface{}) {} - -// Infof empty implementation -func (DiscardLogger) Infof(format string, v ...interface{}) {} - -// Warn empty implementation -func (DiscardLogger) Warn(v ...interface{}) {} - -// Warnf empty implementation -func (DiscardLogger) Warnf(format string, v ...interface{}) {} - -// Level empty implementation -func (DiscardLogger) Level() core.LogLevel { - return core.LOG_UNKNOWN -} - -// SetLevel empty implementation -func (DiscardLogger) SetLevel(l core.LogLevel) {} - -// ShowSQL empty implementation -func (DiscardLogger) ShowSQL(show ...bool) {} - -// IsShowSQL empty implementation -func (DiscardLogger) IsShowSQL() bool { - return false -} - -// SimpleLogger is the default implment of core.ILogger -type SimpleLogger struct { - DEBUG *log.Logger - ERR *log.Logger - INFO *log.Logger - WARN *log.Logger - level core.LogLevel - showSQL bool -} - -var _ core.ILogger = &SimpleLogger{} - -// NewSimpleLogger use a special io.Writer as logger output -func NewSimpleLogger(out io.Writer) *SimpleLogger { - return NewSimpleLogger2(out, DEFAULT_LOG_PREFIX, DEFAULT_LOG_FLAG) -} - -// NewSimpleLogger2 let you customrize your logger prefix and flag -func NewSimpleLogger2(out io.Writer, prefix string, flag int) *SimpleLogger { - return NewSimpleLogger3(out, prefix, flag, DEFAULT_LOG_LEVEL) -} - -// NewSimpleLogger3 let you customrize your logger prefix and flag and logLevel -func NewSimpleLogger3(out io.Writer, prefix string, flag int, l core.LogLevel) *SimpleLogger { - return &SimpleLogger{ - DEBUG: log.New(out, fmt.Sprintf("%s [debug] ", prefix), flag), - ERR: log.New(out, fmt.Sprintf("%s [error] ", prefix), flag), - INFO: log.New(out, fmt.Sprintf("%s [info] ", prefix), flag), - WARN: log.New(out, fmt.Sprintf("%s [warn] ", prefix), flag), - level: l, - } -} - -// Error implement core.ILogger -func (s *SimpleLogger) Error(v ...interface{}) { - if s.level <= core.LOG_ERR { - s.ERR.Output(2, fmt.Sprint(v...)) - } - return -} - -// Errorf implement core.ILogger -func (s *SimpleLogger) Errorf(format string, v ...interface{}) { - if s.level <= core.LOG_ERR { - s.ERR.Output(2, fmt.Sprintf(format, v...)) - } - return -} - -// Debug implement core.ILogger -func (s *SimpleLogger) Debug(v ...interface{}) { - if s.level <= core.LOG_DEBUG { - s.DEBUG.Output(2, fmt.Sprint(v...)) - } - return -} - -// Debugf implement core.ILogger -func (s *SimpleLogger) Debugf(format string, v ...interface{}) { - if s.level <= core.LOG_DEBUG { - s.DEBUG.Output(2, fmt.Sprintf(format, v...)) - } - return -} - -// Info implement core.ILogger -func (s *SimpleLogger) Info(v ...interface{}) { - if s.level <= core.LOG_INFO { - s.INFO.Output(2, fmt.Sprint(v...)) - } - return -} - -// Infof implement core.ILogger -func (s *SimpleLogger) Infof(format string, v ...interface{}) { - if s.level <= core.LOG_INFO { - s.INFO.Output(2, fmt.Sprintf(format, v...)) - } - return -} - -// Warn implement core.ILogger -func (s *SimpleLogger) Warn(v ...interface{}) { - if s.level <= core.LOG_WARNING { - s.WARN.Output(2, fmt.Sprint(v...)) - } - return -} - -// Warnf implement core.ILogger -func (s *SimpleLogger) Warnf(format string, v ...interface{}) { - if s.level <= core.LOG_WARNING { - s.WARN.Output(2, fmt.Sprintf(format, v...)) - } - return -} - -// Level implement core.ILogger -func (s *SimpleLogger) Level() core.LogLevel { - return s.level -} - -// SetLevel implement core.ILogger -func (s *SimpleLogger) SetLevel(l core.LogLevel) { - s.level = l - return -} - -// ShowSQL implement core.ILogger -func (s *SimpleLogger) ShowSQL(show ...bool) { - if len(show) == 0 { - s.showSQL = true - return - } - s.showSQL = show[0] -} - -// IsShowSQL implement core.ILogger -func (s *SimpleLogger) IsShowSQL() bool { - return s.showSQL -} diff --git a/vendor/github.com/go-xorm/xorm/pg_reserved.txt b/vendor/github.com/go-xorm/xorm/pg_reserved.txt deleted file mode 100644 index 720ed377b..000000000 --- a/vendor/github.com/go-xorm/xorm/pg_reserved.txt +++ /dev/null @@ -1,746 +0,0 @@ -A non-reserved non-reserved -ABORT non-reserved -ABS reserved reserved -ABSENT non-reserved non-reserved -ABSOLUTE non-reserved non-reserved non-reserved reserved -ACCESS non-reserved -ACCORDING non-reserved non-reserved -ACTION non-reserved non-reserved non-reserved reserved -ADA non-reserved non-reserved non-reserved -ADD non-reserved non-reserved non-reserved reserved -ADMIN non-reserved non-reserved non-reserved -AFTER non-reserved non-reserved non-reserved -AGGREGATE non-reserved -ALL reserved reserved reserved reserved -ALLOCATE reserved reserved reserved -ALSO non-reserved -ALTER non-reserved reserved reserved reserved -ALWAYS non-reserved non-reserved non-reserved -ANALYSE reserved -ANALYZE reserved -AND reserved reserved reserved reserved -ANY reserved reserved reserved reserved -ARE reserved reserved reserved -ARRAY reserved reserved reserved -ARRAY_AGG reserved reserved -ARRAY_MAX_CARDINALITY reserved -AS reserved reserved reserved reserved -ASC reserved non-reserved non-reserved reserved -ASENSITIVE reserved reserved -ASSERTION non-reserved non-reserved non-reserved reserved -ASSIGNMENT non-reserved non-reserved non-reserved -ASYMMETRIC reserved reserved reserved -AT non-reserved reserved reserved reserved -ATOMIC reserved reserved -ATTRIBUTE non-reserved non-reserved non-reserved -ATTRIBUTES non-reserved non-reserved -AUTHORIZATION reserved (can be function or type) reserved reserved reserved -AVG reserved reserved reserved -BACKWARD non-reserved -BASE64 non-reserved non-reserved -BEFORE non-reserved non-reserved non-reserved -BEGIN non-reserved reserved reserved reserved -BEGIN_FRAME reserved -BEGIN_PARTITION reserved -BERNOULLI non-reserved non-reserved -BETWEEN non-reserved (cannot be function or type) reserved reserved reserved -BIGINT non-reserved (cannot be function or type) reserved reserved -BINARY reserved (can be function or type) reserved reserved -BIT non-reserved (cannot be function or type) reserved -BIT_LENGTH reserved -BLOB reserved reserved -BLOCKED non-reserved non-reserved -BOM non-reserved non-reserved -BOOLEAN non-reserved (cannot be function or type) reserved reserved -BOTH reserved reserved reserved reserved -BREADTH non-reserved non-reserved -BY non-reserved reserved reserved reserved -C non-reserved non-reserved non-reserved -CACHE non-reserved -CALL reserved reserved -CALLED non-reserved reserved reserved -CARDINALITY reserved reserved -CASCADE non-reserved non-reserved non-reserved reserved -CASCADED non-reserved reserved reserved reserved -CASE reserved reserved reserved reserved -CAST reserved reserved reserved reserved -CATALOG non-reserved non-reserved non-reserved reserved -CATALOG_NAME non-reserved non-reserved non-reserved -CEIL reserved reserved -CEILING reserved reserved -CHAIN non-reserved non-reserved non-reserved -CHAR non-reserved (cannot be function or type) reserved reserved reserved -CHARACTER non-reserved (cannot be function or type) reserved reserved reserved -CHARACTERISTICS non-reserved non-reserved non-reserved -CHARACTERS non-reserved non-reserved -CHARACTER_LENGTH reserved reserved reserved -CHARACTER_SET_CATALOG non-reserved non-reserved non-reserved -CHARACTER_SET_NAME non-reserved non-reserved non-reserved -CHARACTER_SET_SCHEMA non-reserved non-reserved non-reserved -CHAR_LENGTH reserved reserved reserved -CHECK reserved reserved reserved reserved -CHECKPOINT non-reserved -CLASS non-reserved -CLASS_ORIGIN non-reserved non-reserved non-reserved -CLOB reserved reserved -CLOSE non-reserved reserved reserved reserved -CLUSTER non-reserved -COALESCE non-reserved (cannot be function or type) reserved reserved reserved -COBOL non-reserved non-reserved non-reserved -COLLATE reserved reserved reserved reserved -COLLATION reserved (can be function or type) non-reserved non-reserved reserved -COLLATION_CATALOG non-reserved non-reserved non-reserved -COLLATION_NAME non-reserved non-reserved non-reserved -COLLATION_SCHEMA non-reserved non-reserved non-reserved -COLLECT reserved reserved -COLUMN reserved reserved reserved reserved -COLUMNS non-reserved non-reserved -COLUMN_NAME non-reserved non-reserved non-reserved -COMMAND_FUNCTION non-reserved non-reserved non-reserved -COMMAND_FUNCTION_CODE non-reserved non-reserved -COMMENT non-reserved -COMMENTS non-reserved -COMMIT non-reserved reserved reserved reserved -COMMITTED non-reserved non-reserved non-reserved non-reserved -CONCURRENTLY reserved (can be function or type) -CONDITION reserved reserved -CONDITION_NUMBER non-reserved non-reserved non-reserved -CONFIGURATION non-reserved -CONNECT reserved reserved reserved -CONNECTION non-reserved non-reserved non-reserved reserved -CONNECTION_NAME non-reserved non-reserved non-reserved -CONSTRAINT reserved reserved reserved reserved -CONSTRAINTS non-reserved non-reserved non-reserved reserved -CONSTRAINT_CATALOG non-reserved non-reserved non-reserved -CONSTRAINT_NAME non-reserved non-reserved non-reserved -CONSTRAINT_SCHEMA non-reserved non-reserved non-reserved -CONSTRUCTOR non-reserved non-reserved -CONTAINS reserved non-reserved -CONTENT non-reserved non-reserved non-reserved -CONTINUE non-reserved non-reserved non-reserved reserved -CONTROL non-reserved non-reserved -CONVERSION non-reserved -CONVERT reserved reserved reserved -COPY non-reserved -CORR reserved reserved -CORRESPONDING reserved reserved reserved -COST non-reserved -COUNT reserved reserved reserved -COVAR_POP reserved reserved -COVAR_SAMP reserved reserved -CREATE reserved reserved reserved reserved -CROSS reserved (can be function or type) reserved reserved reserved -CSV non-reserved -CUBE reserved reserved -CUME_DIST reserved reserved -CURRENT non-reserved reserved reserved reserved -CURRENT_CATALOG reserved reserved reserved -CURRENT_DATE reserved reserved reserved reserved -CURRENT_DEFAULT_TRANSFORM_GROUP reserved reserved -CURRENT_PATH reserved reserved -CURRENT_ROLE reserved reserved reserved -CURRENT_ROW reserved -CURRENT_SCHEMA reserved (can be function or type) reserved reserved -CURRENT_TIME reserved reserved reserved reserved -CURRENT_TIMESTAMP reserved reserved reserved reserved -CURRENT_TRANSFORM_GROUP_FOR_TYPE reserved reserved -CURRENT_USER reserved reserved reserved reserved -CURSOR non-reserved reserved reserved reserved -CURSOR_NAME non-reserved non-reserved non-reserved -CYCLE non-reserved reserved reserved -DATA non-reserved non-reserved non-reserved non-reserved -DATABASE non-reserved -DATALINK reserved reserved -DATE reserved reserved reserved -DATETIME_INTERVAL_CODE non-reserved non-reserved non-reserved -DATETIME_INTERVAL_PRECISION non-reserved non-reserved non-reserved -DAY non-reserved reserved reserved reserved -DB non-reserved non-reserved -DEALLOCATE non-reserved reserved reserved reserved -DEC non-reserved (cannot be function or type) reserved reserved reserved -DECIMAL non-reserved (cannot be function or type) reserved reserved reserved -DECLARE non-reserved reserved reserved reserved -DEFAULT reserved reserved reserved reserved -DEFAULTS non-reserved non-reserved non-reserved -DEFERRABLE reserved non-reserved non-reserved reserved -DEFERRED non-reserved non-reserved non-reserved reserved -DEFINED non-reserved non-reserved -DEFINER non-reserved non-reserved non-reserved -DEGREE non-reserved non-reserved -DELETE non-reserved reserved reserved reserved -DELIMITER non-reserved -DELIMITERS non-reserved -DENSE_RANK reserved reserved -DEPTH non-reserved non-reserved -DEREF reserved reserved -DERIVED non-reserved non-reserved -DESC reserved non-reserved non-reserved reserved -DESCRIBE reserved reserved reserved -DESCRIPTOR non-reserved non-reserved reserved -DETERMINISTIC reserved reserved -DIAGNOSTICS non-reserved non-reserved reserved -DICTIONARY non-reserved -DISABLE non-reserved -DISCARD non-reserved -DISCONNECT reserved reserved reserved -DISPATCH non-reserved non-reserved -DISTINCT reserved reserved reserved reserved -DLNEWCOPY reserved reserved -DLPREVIOUSCOPY reserved reserved -DLURLCOMPLETE reserved reserved -DLURLCOMPLETEONLY reserved reserved -DLURLCOMPLETEWRITE reserved reserved -DLURLPATH reserved reserved -DLURLPATHONLY reserved reserved -DLURLPATHWRITE reserved reserved -DLURLSCHEME reserved reserved -DLURLSERVER reserved reserved -DLVALUE reserved reserved -DO reserved -DOCUMENT non-reserved non-reserved non-reserved -DOMAIN non-reserved non-reserved non-reserved reserved -DOUBLE non-reserved reserved reserved reserved -DROP non-reserved reserved reserved reserved -DYNAMIC reserved reserved -DYNAMIC_FUNCTION non-reserved non-reserved non-reserved -DYNAMIC_FUNCTION_CODE non-reserved non-reserved -EACH non-reserved reserved reserved -ELEMENT reserved reserved -ELSE reserved reserved reserved reserved -EMPTY non-reserved non-reserved -ENABLE non-reserved -ENCODING non-reserved non-reserved non-reserved -ENCRYPTED non-reserved -END reserved reserved reserved reserved -END-EXEC reserved reserved reserved -END_FRAME reserved -END_PARTITION reserved -ENFORCED non-reserved -ENUM non-reserved -EQUALS reserved non-reserved -ESCAPE non-reserved reserved reserved reserved -EVENT non-reserved -EVERY reserved reserved -EXCEPT reserved reserved reserved reserved -EXCEPTION reserved -EXCLUDE non-reserved non-reserved non-reserved -EXCLUDING non-reserved non-reserved non-reserved -EXCLUSIVE non-reserved -EXEC reserved reserved reserved -EXECUTE non-reserved reserved reserved reserved -EXISTS non-reserved (cannot be function or type) reserved reserved reserved -EXP reserved reserved -EXPLAIN non-reserved -EXPRESSION non-reserved -EXTENSION non-reserved -EXTERNAL non-reserved reserved reserved reserved -EXTRACT non-reserved (cannot be function or type) reserved reserved reserved -FALSE reserved reserved reserved reserved -FAMILY non-reserved -FETCH reserved reserved reserved reserved -FILE non-reserved non-reserved -FILTER reserved reserved -FINAL non-reserved non-reserved -FIRST non-reserved non-reserved non-reserved reserved -FIRST_VALUE reserved reserved -FLAG non-reserved non-reserved -FLOAT non-reserved (cannot be function or type) reserved reserved reserved -FLOOR reserved reserved -FOLLOWING non-reserved non-reserved non-reserved -FOR reserved reserved reserved reserved -FORCE non-reserved -FOREIGN reserved reserved reserved reserved -FORTRAN non-reserved non-reserved non-reserved -FORWARD non-reserved -FOUND non-reserved non-reserved reserved -FRAME_ROW reserved -FREE reserved reserved -FREEZE reserved (can be function or type) -FROM reserved reserved reserved reserved -FS non-reserved non-reserved -FULL reserved (can be function or type) reserved reserved reserved -FUNCTION non-reserved reserved reserved -FUNCTIONS non-reserved -FUSION reserved reserved -G non-reserved non-reserved -GENERAL non-reserved non-reserved -GENERATED non-reserved non-reserved -GET reserved reserved reserved -GLOBAL non-reserved reserved reserved reserved -GO non-reserved non-reserved reserved -GOTO non-reserved non-reserved reserved -GRANT reserved reserved reserved reserved -GRANTED non-reserved non-reserved non-reserved -GREATEST non-reserved (cannot be function or type) -GROUP reserved reserved reserved reserved -GROUPING reserved reserved -GROUPS reserved -HANDLER non-reserved -HAVING reserved reserved reserved reserved -HEADER non-reserved -HEX non-reserved non-reserved -HIERARCHY non-reserved non-reserved -HOLD non-reserved reserved reserved -HOUR non-reserved reserved reserved reserved -ID non-reserved non-reserved -IDENTITY non-reserved reserved reserved reserved -IF non-reserved -IGNORE non-reserved non-reserved -ILIKE reserved (can be function or type) -IMMEDIATE non-reserved non-reserved non-reserved reserved -IMMEDIATELY non-reserved -IMMUTABLE non-reserved -IMPLEMENTATION non-reserved non-reserved -IMPLICIT non-reserved -IMPORT reserved reserved -IN reserved reserved reserved reserved -INCLUDING non-reserved non-reserved non-reserved -INCREMENT non-reserved non-reserved non-reserved -INDENT non-reserved non-reserved -INDEX non-reserved -INDEXES non-reserved -INDICATOR reserved reserved reserved -INHERIT non-reserved -INHERITS non-reserved -INITIALLY reserved non-reserved non-reserved reserved -INLINE non-reserved -INNER reserved (can be function or type) reserved reserved reserved -INOUT non-reserved (cannot be function or type) reserved reserved -INPUT non-reserved non-reserved non-reserved reserved -INSENSITIVE non-reserved reserved reserved reserved -INSERT non-reserved reserved reserved reserved -INSTANCE non-reserved non-reserved -INSTANTIABLE non-reserved non-reserved -INSTEAD non-reserved non-reserved non-reserved -INT non-reserved (cannot be function or type) reserved reserved reserved -INTEGER non-reserved (cannot be function or type) reserved reserved reserved -INTEGRITY non-reserved non-reserved -INTERSECT reserved reserved reserved reserved -INTERSECTION reserved reserved -INTERVAL non-reserved (cannot be function or type) reserved reserved reserved -INTO reserved reserved reserved reserved -INVOKER non-reserved non-reserved non-reserved -IS reserved (can be function or type) reserved reserved reserved -ISNULL reserved (can be function or type) -ISOLATION non-reserved non-reserved non-reserved reserved -JOIN reserved (can be function or type) reserved reserved reserved -K non-reserved non-reserved -KEY non-reserved non-reserved non-reserved reserved -KEY_MEMBER non-reserved non-reserved -KEY_TYPE non-reserved non-reserved -LABEL non-reserved -LAG reserved reserved -LANGUAGE non-reserved reserved reserved reserved -LARGE non-reserved reserved reserved -LAST non-reserved non-reserved non-reserved reserved -LAST_VALUE reserved reserved -LATERAL reserved reserved reserved -LC_COLLATE non-reserved -LC_CTYPE non-reserved -LEAD reserved reserved -LEADING reserved reserved reserved reserved -LEAKPROOF non-reserved -LEAST non-reserved (cannot be function or type) -LEFT reserved (can be function or type) reserved reserved reserved -LENGTH non-reserved non-reserved non-reserved -LEVEL non-reserved non-reserved non-reserved reserved -LIBRARY non-reserved non-reserved -LIKE reserved (can be function or type) reserved reserved reserved -LIKE_REGEX reserved reserved -LIMIT reserved non-reserved non-reserved -LINK non-reserved non-reserved -LISTEN non-reserved -LN reserved reserved -LOAD non-reserved -LOCAL non-reserved reserved reserved reserved -LOCALTIME reserved reserved reserved -LOCALTIMESTAMP reserved reserved reserved -LOCATION non-reserved non-reserved non-reserved -LOCATOR non-reserved non-reserved -LOCK non-reserved -LOWER reserved reserved reserved -M non-reserved non-reserved -MAP non-reserved non-reserved -MAPPING non-reserved non-reserved non-reserved -MATCH non-reserved reserved reserved reserved -MATCHED non-reserved non-reserved -MATERIALIZED non-reserved -MAX reserved reserved reserved -MAXVALUE non-reserved non-reserved non-reserved -MAX_CARDINALITY reserved -MEMBER reserved reserved -MERGE reserved reserved -MESSAGE_LENGTH non-reserved non-reserved non-reserved -MESSAGE_OCTET_LENGTH non-reserved non-reserved non-reserved -MESSAGE_TEXT non-reserved non-reserved non-reserved -METHOD reserved reserved -MIN reserved reserved reserved -MINUTE non-reserved reserved reserved reserved -MINVALUE non-reserved non-reserved non-reserved -MOD reserved reserved -MODE non-reserved -MODIFIES reserved reserved -MODULE reserved reserved reserved -MONTH non-reserved reserved reserved reserved -MORE non-reserved non-reserved non-reserved -MOVE non-reserved -MULTISET reserved reserved -MUMPS non-reserved non-reserved non-reserved -NAME non-reserved non-reserved non-reserved non-reserved -NAMES non-reserved non-reserved non-reserved reserved -NAMESPACE non-reserved non-reserved -NATIONAL non-reserved (cannot be function or type) reserved reserved reserved -NATURAL reserved (can be function or type) reserved reserved reserved -NCHAR non-reserved (cannot be function or type) reserved reserved reserved -NCLOB reserved reserved -NESTING non-reserved non-reserved -NEW reserved reserved -NEXT non-reserved non-reserved non-reserved reserved -NFC non-reserved non-reserved -NFD non-reserved non-reserved -NFKC non-reserved non-reserved -NFKD non-reserved non-reserved -NIL non-reserved non-reserved -NO non-reserved reserved reserved reserved -NONE non-reserved (cannot be function or type) reserved reserved -NORMALIZE reserved reserved -NORMALIZED non-reserved non-reserved -NOT reserved reserved reserved reserved -NOTHING non-reserved -NOTIFY non-reserved -NOTNULL reserved (can be function or type) -NOWAIT non-reserved -NTH_VALUE reserved reserved -NTILE reserved reserved -NULL reserved reserved reserved reserved -NULLABLE non-reserved non-reserved non-reserved -NULLIF non-reserved (cannot be function or type) reserved reserved reserved -NULLS non-reserved non-reserved non-reserved -NUMBER non-reserved non-reserved non-reserved -NUMERIC non-reserved (cannot be function or type) reserved reserved reserved -OBJECT non-reserved non-reserved non-reserved -OCCURRENCES_REGEX reserved reserved -OCTETS non-reserved non-reserved -OCTET_LENGTH reserved reserved reserved -OF non-reserved reserved reserved reserved -OFF non-reserved non-reserved non-reserved -OFFSET reserved reserved reserved -OIDS non-reserved -OLD reserved reserved -ON reserved reserved reserved reserved -ONLY reserved reserved reserved reserved -OPEN reserved reserved reserved -OPERATOR non-reserved -OPTION non-reserved non-reserved non-reserved reserved -OPTIONS non-reserved non-reserved non-reserved -OR reserved reserved reserved reserved -ORDER reserved reserved reserved reserved -ORDERING non-reserved non-reserved -ORDINALITY non-reserved non-reserved -OTHERS non-reserved non-reserved -OUT non-reserved (cannot be function or type) reserved reserved -OUTER reserved (can be function or type) reserved reserved reserved -OUTPUT non-reserved non-reserved reserved -OVER reserved (can be function or type) reserved reserved -OVERLAPS reserved (can be function or type) reserved reserved reserved -OVERLAY non-reserved (cannot be function or type) reserved reserved -OVERRIDING non-reserved non-reserved -OWNED non-reserved -OWNER non-reserved -P non-reserved non-reserved -PAD non-reserved non-reserved reserved -PARAMETER reserved reserved -PARAMETER_MODE non-reserved non-reserved -PARAMETER_NAME non-reserved non-reserved -PARAMETER_ORDINAL_POSITION non-reserved non-reserved -PARAMETER_SPECIFIC_CATALOG non-reserved non-reserved -PARAMETER_SPECIFIC_NAME non-reserved non-reserved -PARAMETER_SPECIFIC_SCHEMA non-reserved non-reserved -PARSER non-reserved -PARTIAL non-reserved non-reserved non-reserved reserved -PARTITION non-reserved reserved reserved -PASCAL non-reserved non-reserved non-reserved -PASSING non-reserved non-reserved non-reserved -PASSTHROUGH non-reserved non-reserved -PASSWORD non-reserved -PATH non-reserved non-reserved -PERCENT reserved -PERCENTILE_CONT reserved reserved -PERCENTILE_DISC reserved reserved -PERCENT_RANK reserved reserved -PERIOD reserved -PERMISSION non-reserved non-reserved -PLACING reserved non-reserved non-reserved -PLANS non-reserved -PLI non-reserved non-reserved non-reserved -PORTION reserved -POSITION non-reserved (cannot be function or type) reserved reserved reserved -POSITION_REGEX reserved reserved -POWER reserved reserved -PRECEDES reserved -PRECEDING non-reserved non-reserved non-reserved -PRECISION non-reserved (cannot be function or type) reserved reserved reserved -PREPARE non-reserved reserved reserved reserved -PREPARED non-reserved -PRESERVE non-reserved non-reserved non-reserved reserved -PRIMARY reserved reserved reserved reserved -PRIOR non-reserved non-reserved non-reserved reserved -PRIVILEGES non-reserved non-reserved non-reserved reserved -PROCEDURAL non-reserved -PROCEDURE non-reserved reserved reserved reserved -PROGRAM non-reserved -PUBLIC non-reserved non-reserved reserved -QUOTE non-reserved -RANGE non-reserved reserved reserved -RANK reserved reserved -READ non-reserved non-reserved non-reserved reserved -READS reserved reserved -REAL non-reserved (cannot be function or type) reserved reserved reserved -REASSIGN non-reserved -RECHECK non-reserved -RECOVERY non-reserved non-reserved -RECURSIVE non-reserved reserved reserved -REF non-reserved reserved reserved -REFERENCES reserved reserved reserved reserved -REFERENCING reserved reserved -REFRESH non-reserved -REGR_AVGX reserved reserved -REGR_AVGY reserved reserved -REGR_COUNT reserved reserved -REGR_INTERCEPT reserved reserved -REGR_R2 reserved reserved -REGR_SLOPE reserved reserved -REGR_SXX reserved reserved -REGR_SXY reserved reserved -REGR_SYY reserved reserved -REINDEX non-reserved -RELATIVE non-reserved non-reserved non-reserved reserved -RELEASE non-reserved reserved reserved -RENAME non-reserved -REPEATABLE non-reserved non-reserved non-reserved non-reserved -REPLACE non-reserved -REPLICA non-reserved -REQUIRING non-reserved non-reserved -RESET non-reserved -RESPECT non-reserved non-reserved -RESTART non-reserved non-reserved non-reserved -RESTORE non-reserved non-reserved -RESTRICT non-reserved non-reserved non-reserved reserved -RESULT reserved reserved -RETURN reserved reserved -RETURNED_CARDINALITY non-reserved non-reserved -RETURNED_LENGTH non-reserved non-reserved non-reserved -RETURNED_OCTET_LENGTH non-reserved non-reserved non-reserved -RETURNED_SQLSTATE non-reserved non-reserved non-reserved -RETURNING reserved non-reserved non-reserved -RETURNS non-reserved reserved reserved -REVOKE non-reserved reserved reserved reserved -RIGHT reserved (can be function or type) reserved reserved reserved -ROLE non-reserved non-reserved non-reserved -ROLLBACK non-reserved reserved reserved reserved -ROLLUP reserved reserved -ROUTINE non-reserved non-reserved -ROUTINE_CATALOG non-reserved non-reserved -ROUTINE_NAME non-reserved non-reserved -ROUTINE_SCHEMA non-reserved non-reserved -ROW non-reserved (cannot be function or type) reserved reserved -ROWS non-reserved reserved reserved reserved -ROW_COUNT non-reserved non-reserved non-reserved -ROW_NUMBER reserved reserved -RULE non-reserved -SAVEPOINT non-reserved reserved reserved -SCALE non-reserved non-reserved non-reserved -SCHEMA non-reserved non-reserved non-reserved reserved -SCHEMA_NAME non-reserved non-reserved non-reserved -SCOPE reserved reserved -SCOPE_CATALOG non-reserved non-reserved -SCOPE_NAME non-reserved non-reserved -SCOPE_SCHEMA non-reserved non-reserved -SCROLL non-reserved reserved reserved reserved -SEARCH non-reserved reserved reserved -SECOND non-reserved reserved reserved reserved -SECTION non-reserved non-reserved reserved -SECURITY non-reserved non-reserved non-reserved -SELECT reserved reserved reserved reserved -SELECTIVE non-reserved non-reserved -SELF non-reserved non-reserved -SENSITIVE reserved reserved -SEQUENCE non-reserved non-reserved non-reserved -SEQUENCES non-reserved -SERIALIZABLE non-reserved non-reserved non-reserved non-reserved -SERVER non-reserved non-reserved non-reserved -SERVER_NAME non-reserved non-reserved non-reserved -SESSION non-reserved non-reserved non-reserved reserved -SESSION_USER reserved reserved reserved reserved -SET non-reserved reserved reserved reserved -SETOF non-reserved (cannot be function or type) -SETS non-reserved non-reserved -SHARE non-reserved -SHOW non-reserved -SIMILAR reserved (can be function or type) reserved reserved -SIMPLE non-reserved non-reserved non-reserved -SIZE non-reserved non-reserved reserved -SMALLINT non-reserved (cannot be function or type) reserved reserved reserved -SNAPSHOT non-reserved -SOME reserved reserved reserved reserved -SOURCE non-reserved non-reserved -SPACE non-reserved non-reserved reserved -SPECIFIC reserved reserved -SPECIFICTYPE reserved reserved -SPECIFIC_NAME non-reserved non-reserved -SQL reserved reserved reserved -SQLCODE reserved -SQLERROR reserved -SQLEXCEPTION reserved reserved -SQLSTATE reserved reserved reserved -SQLWARNING reserved reserved -SQRT reserved reserved -STABLE non-reserved -STANDALONE non-reserved non-reserved non-reserved -START non-reserved reserved reserved -STATE non-reserved non-reserved -STATEMENT non-reserved non-reserved non-reserved -STATIC reserved reserved -STATISTICS non-reserved -STDDEV_POP reserved reserved -STDDEV_SAMP reserved reserved -STDIN non-reserved -STDOUT non-reserved -STORAGE non-reserved -STRICT non-reserved -STRIP non-reserved non-reserved non-reserved -STRUCTURE non-reserved non-reserved -STYLE non-reserved non-reserved -SUBCLASS_ORIGIN non-reserved non-reserved non-reserved -SUBMULTISET reserved reserved -SUBSTRING non-reserved (cannot be function or type) reserved reserved reserved -SUBSTRING_REGEX reserved reserved -SUCCEEDS reserved -SUM reserved reserved reserved -SYMMETRIC reserved reserved reserved -SYSID non-reserved -SYSTEM non-reserved reserved reserved -SYSTEM_TIME reserved -SYSTEM_USER reserved reserved reserved -T non-reserved non-reserved -TABLE reserved reserved reserved reserved -TABLES non-reserved -TABLESAMPLE reserved reserved -TABLESPACE non-reserved -TABLE_NAME non-reserved non-reserved non-reserved -TEMP non-reserved -TEMPLATE non-reserved -TEMPORARY non-reserved non-reserved non-reserved reserved -TEXT non-reserved -THEN reserved reserved reserved reserved -TIES non-reserved non-reserved -TIME non-reserved (cannot be function or type) reserved reserved reserved -TIMESTAMP non-reserved (cannot be function or type) reserved reserved reserved -TIMEZONE_HOUR reserved reserved reserved -TIMEZONE_MINUTE reserved reserved reserved -TO reserved reserved reserved reserved -TOKEN non-reserved non-reserved -TOP_LEVEL_COUNT non-reserved non-reserved -TRAILING reserved reserved reserved reserved -TRANSACTION non-reserved non-reserved non-reserved reserved -TRANSACTIONS_COMMITTED non-reserved non-reserved -TRANSACTIONS_ROLLED_BACK non-reserved non-reserved -TRANSACTION_ACTIVE non-reserved non-reserved -TRANSFORM non-reserved non-reserved -TRANSFORMS non-reserved non-reserved -TRANSLATE reserved reserved reserved -TRANSLATE_REGEX reserved reserved -TRANSLATION reserved reserved reserved -TREAT non-reserved (cannot be function or type) reserved reserved -TRIGGER non-reserved reserved reserved -TRIGGER_CATALOG non-reserved non-reserved -TRIGGER_NAME non-reserved non-reserved -TRIGGER_SCHEMA non-reserved non-reserved -TRIM non-reserved (cannot be function or type) reserved reserved reserved -TRIM_ARRAY reserved reserved -TRUE reserved reserved reserved reserved -TRUNCATE non-reserved reserved reserved -TRUSTED non-reserved -TYPE non-reserved non-reserved non-reserved non-reserved -TYPES non-reserved -UESCAPE reserved reserved -UNBOUNDED non-reserved non-reserved non-reserved -UNCOMMITTED non-reserved non-reserved non-reserved non-reserved -UNDER non-reserved non-reserved -UNENCRYPTED non-reserved -UNION reserved reserved reserved reserved -UNIQUE reserved reserved reserved reserved -UNKNOWN non-reserved reserved reserved reserved -UNLINK non-reserved non-reserved -UNLISTEN non-reserved -UNLOGGED non-reserved -UNNAMED non-reserved non-reserved non-reserved -UNNEST reserved reserved -UNTIL non-reserved -UNTYPED non-reserved non-reserved -UPDATE non-reserved reserved reserved reserved -UPPER reserved reserved reserved -URI non-reserved non-reserved -USAGE non-reserved non-reserved reserved -USER reserved reserved reserved reserved -USER_DEFINED_TYPE_CATALOG non-reserved non-reserved -USER_DEFINED_TYPE_CODE non-reserved non-reserved -USER_DEFINED_TYPE_NAME non-reserved non-reserved -USER_DEFINED_TYPE_SCHEMA non-reserved non-reserved -USING reserved reserved reserved reserved -VACUUM non-reserved -VALID non-reserved non-reserved non-reserved -VALIDATE non-reserved -VALIDATOR non-reserved -VALUE non-reserved reserved reserved reserved -VALUES non-reserved (cannot be function or type) reserved reserved reserved -VALUE_OF reserved -VARBINARY reserved reserved -VARCHAR non-reserved (cannot be function or type) reserved reserved reserved -VARIADIC reserved -VARYING non-reserved reserved reserved reserved -VAR_POP reserved reserved -VAR_SAMP reserved reserved -VERBOSE reserved (can be function or type) -VERSION non-reserved non-reserved non-reserved -VERSIONING reserved -VIEW non-reserved non-reserved non-reserved reserved -VOLATILE non-reserved -WHEN reserved reserved reserved reserved -WHENEVER reserved reserved reserved -WHERE reserved reserved reserved reserved -WHITESPACE non-reserved non-reserved non-reserved -WIDTH_BUCKET reserved reserved -WINDOW reserved reserved reserved -WITH reserved reserved reserved reserved -WITHIN reserved reserved -WITHOUT non-reserved reserved reserved -WORK non-reserved non-reserved non-reserved reserved -WRAPPER non-reserved non-reserved non-reserved -WRITE non-reserved non-reserved non-reserved reserved -XML non-reserved reserved reserved -XMLAGG reserved reserved -XMLATTRIBUTES non-reserved (cannot be function or type) reserved reserved -XMLBINARY reserved reserved -XMLCAST reserved reserved -XMLCOMMENT reserved reserved -XMLCONCAT non-reserved (cannot be function or type) reserved reserved -XMLDECLARATION non-reserved non-reserved -XMLDOCUMENT reserved reserved -XMLELEMENT non-reserved (cannot be function or type) reserved reserved -XMLEXISTS non-reserved (cannot be function or type) reserved reserved -XMLFOREST non-reserved (cannot be function or type) reserved reserved -XMLITERATE reserved reserved -XMLNAMESPACES reserved reserved -XMLPARSE non-reserved (cannot be function or type) reserved reserved -XMLPI non-reserved (cannot be function or type) reserved reserved -XMLQUERY reserved reserved -XMLROOT non-reserved (cannot be function or type) -XMLSCHEMA non-reserved non-reserved -XMLSERIALIZE non-reserved (cannot be function or type) reserved reserved -XMLTABLE reserved reserved -XMLTEXT reserved reserved -XMLVALIDATE reserved reserved -YEAR non-reserved reserved reserved reserved -YES non-reserved non-reserved non-reserved -ZONE non-reserved non-reserved non-reserved reserved \ No newline at end of file diff --git a/vendor/github.com/go-xorm/xorm/processors.go b/vendor/github.com/go-xorm/xorm/processors.go deleted file mode 100644 index dcd9c6ac0..000000000 --- a/vendor/github.com/go-xorm/xorm/processors.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -// BeforeInsertProcessor executed before an object is initially persisted to the database -type BeforeInsertProcessor interface { - BeforeInsert() -} - -// BeforeUpdateProcessor executed before an object is updated -type BeforeUpdateProcessor interface { - BeforeUpdate() -} - -// BeforeDeleteProcessor executed before an object is deleted -type BeforeDeleteProcessor interface { - BeforeDelete() -} - -// BeforeSetProcessor executed before data set to the struct fields -type BeforeSetProcessor interface { - BeforeSet(string, Cell) -} - -// AfterSetProcessor executed after data set to the struct fields -type AfterSetProcessor interface { - AfterSet(string, Cell) -} - -// AfterInsertProcessor executed after an object is persisted to the database -type AfterInsertProcessor interface { - AfterInsert() -} - -// AfterUpdateProcessor executed after an object has been updated -type AfterUpdateProcessor interface { - AfterUpdate() -} - -// AfterDeleteProcessor executed after an object has been deleted -type AfterDeleteProcessor interface { - AfterDelete() -} - -// AfterLoadProcessor executed after an ojbect has been loaded from database -type AfterLoadProcessor interface { - AfterLoad() -} - -// AfterLoadSessionProcessor executed after an ojbect has been loaded from database with session parameter -type AfterLoadSessionProcessor interface { - AfterLoad(*Session) -} - -type executedProcessorFunc func(*Session, interface{}) error - -type executedProcessor struct { - fun executedProcessorFunc - session *Session - bean interface{} -} - -func (executor *executedProcessor) execute() error { - return executor.fun(executor.session, executor.bean) -} - -func (session *Session) executeProcessors() error { - processors := session.afterProcessors - session.afterProcessors = make([]executedProcessor, 0) - for _, processor := range processors { - if err := processor.execute(); err != nil { - return err - } - } - return nil -} diff --git a/vendor/github.com/go-xorm/xorm/rows.go b/vendor/github.com/go-xorm/xorm/rows.go deleted file mode 100644 index 54ec7f37a..000000000 --- a/vendor/github.com/go-xorm/xorm/rows.go +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "database/sql" - "fmt" - "reflect" - - "github.com/go-xorm/core" -) - -// Rows rows wrapper a rows to -type Rows struct { - NoTypeCheck bool - - session *Session - rows *core.Rows - fields []string - beanType reflect.Type - lastError error -} - -func newRows(session *Session, bean interface{}) (*Rows, error) { - rows := new(Rows) - rows.session = session - rows.beanType = reflect.Indirect(reflect.ValueOf(bean)).Type() - - var sqlStr string - var args []interface{} - var err error - - if err = rows.session.statement.setRefBean(bean); err != nil { - return nil, err - } - - if len(session.statement.TableName()) <= 0 { - return nil, ErrTableNotFound - } - - if rows.session.statement.RawSQL == "" { - sqlStr, args, err = rows.session.statement.genGetSQL(bean) - if err != nil { - return nil, err - } - } else { - sqlStr = rows.session.statement.RawSQL - args = rows.session.statement.RawParams - } - - rows.rows, err = rows.session.queryRows(sqlStr, args...) - if err != nil { - rows.lastError = err - rows.Close() - return nil, err - } - - rows.fields, err = rows.rows.Columns() - if err != nil { - rows.lastError = err - rows.Close() - return nil, err - } - - return rows, nil -} - -// Next move cursor to next record, return false if end has reached -func (rows *Rows) Next() bool { - if rows.lastError == nil && rows.rows != nil { - hasNext := rows.rows.Next() - if !hasNext { - rows.lastError = sql.ErrNoRows - } - return hasNext - } - return false -} - -// Err returns the error, if any, that was encountered during iteration. Err may be called after an explicit or implicit Close. -func (rows *Rows) Err() error { - return rows.lastError -} - -// Scan row record to bean properties -func (rows *Rows) Scan(bean interface{}) error { - if rows.lastError != nil { - return rows.lastError - } - - if !rows.NoTypeCheck && reflect.Indirect(reflect.ValueOf(bean)).Type() != rows.beanType { - return fmt.Errorf("scan arg is incompatible type to [%v]", rows.beanType) - } - - if err := rows.session.statement.setRefBean(bean); err != nil { - return err - } - - scanResults, err := rows.session.row2Slice(rows.rows, rows.fields, bean) - if err != nil { - return err - } - - dataStruct := rValue(bean) - _, err = rows.session.slice2Bean(scanResults, rows.fields, bean, &dataStruct, rows.session.statement.RefTable) - if err != nil { - return err - } - - return rows.session.executeProcessors() -} - -// Close session if session.IsAutoClose is true, and claimed any opened resources -func (rows *Rows) Close() error { - if rows.session.isAutoClose { - defer rows.session.Close() - } - - if rows.lastError == nil { - if rows.rows != nil { - rows.lastError = rows.rows.Close() - if rows.lastError != nil { - return rows.lastError - } - } - } else { - if rows.rows != nil { - defer rows.rows.Close() - } - } - return rows.lastError -} diff --git a/vendor/github.com/go-xorm/xorm/session.go b/vendor/github.com/go-xorm/xorm/session.go deleted file mode 100644 index 3775eb011..000000000 --- a/vendor/github.com/go-xorm/xorm/session.go +++ /dev/null @@ -1,841 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "database/sql" - "encoding/json" - "errors" - "fmt" - "hash/crc32" - "reflect" - "strings" - "time" - - "github.com/go-xorm/core" -) - -// Session keep a pointer to sql.DB and provides all execution of all -// kind of database operations. -type Session struct { - db *core.DB - engine *Engine - tx *core.Tx - statement Statement - isAutoCommit bool - isCommitedOrRollbacked bool - isAutoClose bool - - // Automatically reset the statement after operations that execute a SQL - // query such as Count(), Find(), Get(), ... - autoResetStatement bool - - // !nashtsai! storing these beans due to yet committed tx - afterInsertBeans map[interface{}]*[]func(interface{}) - afterUpdateBeans map[interface{}]*[]func(interface{}) - afterDeleteBeans map[interface{}]*[]func(interface{}) - // -- - - beforeClosures []func(interface{}) - afterClosures []func(interface{}) - - afterProcessors []executedProcessor - - prepareStmt bool - stmtCache map[uint32]*core.Stmt //key: hash.Hash32 of (queryStr, len(queryStr)) - - // !evalphobia! stored the last executed query on this session - //beforeSQLExec func(string, ...interface{}) - lastSQL string - lastSQLArgs []interface{} - - err error -} - -// Clone copy all the session's content and return a new session -func (session *Session) Clone() *Session { - var sess = *session - return &sess -} - -// Init reset the session as the init status. -func (session *Session) Init() { - session.statement.Init() - session.statement.Engine = session.engine - session.isAutoCommit = true - session.isCommitedOrRollbacked = false - session.isAutoClose = false - session.autoResetStatement = true - session.prepareStmt = false - - // !nashtsai! is lazy init better? - session.afterInsertBeans = make(map[interface{}]*[]func(interface{}), 0) - session.afterUpdateBeans = make(map[interface{}]*[]func(interface{}), 0) - session.afterDeleteBeans = make(map[interface{}]*[]func(interface{}), 0) - session.beforeClosures = make([]func(interface{}), 0) - session.afterClosures = make([]func(interface{}), 0) - session.stmtCache = make(map[uint32]*core.Stmt) - - session.afterProcessors = make([]executedProcessor, 0) - - session.lastSQL = "" - session.lastSQLArgs = []interface{}{} -} - -// Close release the connection from pool -func (session *Session) Close() { - for _, v := range session.stmtCache { - v.Close() - } - - if session.db != nil { - // When Close be called, if session is a transaction and do not call - // Commit or Rollback, then call Rollback. - if session.tx != nil && !session.isCommitedOrRollbacked { - session.Rollback() - } - session.tx = nil - session.stmtCache = nil - session.db = nil - } -} - -// IsClosed returns if session is closed -func (session *Session) IsClosed() bool { - return session.db == nil -} - -func (session *Session) resetStatement() { - if session.autoResetStatement { - session.statement.Init() - } -} - -// Prepare set a flag to session that should be prepare statement before execute query -func (session *Session) Prepare() *Session { - session.prepareStmt = true - return session -} - -// Before Apply before Processor, affected bean is passed to closure arg -func (session *Session) Before(closures func(interface{})) *Session { - if closures != nil { - session.beforeClosures = append(session.beforeClosures, closures) - } - return session -} - -// After Apply after Processor, affected bean is passed to closure arg -func (session *Session) After(closures func(interface{})) *Session { - if closures != nil { - session.afterClosures = append(session.afterClosures, closures) - } - return session -} - -// Table can input a string or pointer to struct for special a table to operate. -func (session *Session) Table(tableNameOrBean interface{}) *Session { - session.statement.Table(tableNameOrBean) - return session -} - -// Alias set the table alias -func (session *Session) Alias(alias string) *Session { - session.statement.Alias(alias) - return session -} - -// NoCascade indicate that no cascade load child object -func (session *Session) NoCascade() *Session { - session.statement.UseCascade = false - return session -} - -// ForUpdate Set Read/Write locking for UPDATE -func (session *Session) ForUpdate() *Session { - session.statement.IsForUpdate = true - return session -} - -// NoAutoCondition disable generate SQL condition from beans -func (session *Session) NoAutoCondition(no ...bool) *Session { - session.statement.NoAutoCondition(no...) - return session -} - -// Limit provide limit and offset query condition -func (session *Session) Limit(limit int, start ...int) *Session { - session.statement.Limit(limit, start...) - return session -} - -// OrderBy provide order by query condition, the input parameter is the content -// after order by on a sql statement. -func (session *Session) OrderBy(order string) *Session { - session.statement.OrderBy(order) - return session -} - -// Desc provide desc order by query condition, the input parameters are columns. -func (session *Session) Desc(colNames ...string) *Session { - session.statement.Desc(colNames...) - return session -} - -// Asc provide asc order by query condition, the input parameters are columns. -func (session *Session) Asc(colNames ...string) *Session { - session.statement.Asc(colNames...) - return session -} - -// StoreEngine is only avialble mysql dialect currently -func (session *Session) StoreEngine(storeEngine string) *Session { - session.statement.StoreEngine = storeEngine - return session -} - -// Charset is only avialble mysql dialect currently -func (session *Session) Charset(charset string) *Session { - session.statement.Charset = charset - return session -} - -// Cascade indicates if loading sub Struct -func (session *Session) Cascade(trueOrFalse ...bool) *Session { - if len(trueOrFalse) >= 1 { - session.statement.UseCascade = trueOrFalse[0] - } - return session -} - -// NoCache ask this session do not retrieve data from cache system and -// get data from database directly. -func (session *Session) NoCache() *Session { - session.statement.UseCache = false - return session -} - -// Join join_operator should be one of INNER, LEFT OUTER, CROSS etc - this will be prepended to JOIN -func (session *Session) Join(joinOperator string, tablename interface{}, condition string, args ...interface{}) *Session { - session.statement.Join(joinOperator, tablename, condition, args...) - return session -} - -// GroupBy Generate Group By statement -func (session *Session) GroupBy(keys string) *Session { - session.statement.GroupBy(keys) - return session -} - -// Having Generate Having statement -func (session *Session) Having(conditions string) *Session { - session.statement.Having(conditions) - return session -} - -// DB db return the wrapper of sql.DB -func (session *Session) DB() *core.DB { - if session.db == nil { - session.db = session.engine.db - session.stmtCache = make(map[uint32]*core.Stmt, 0) - } - return session.db -} - -func cleanupProcessorsClosures(slices *[]func(interface{})) { - if len(*slices) > 0 { - *slices = make([]func(interface{}), 0) - } -} - -func (session *Session) canCache() bool { - if session.statement.RefTable == nil || - session.statement.JoinStr != "" || - session.statement.RawSQL != "" || - !session.statement.UseCache || - session.statement.IsForUpdate || - session.tx != nil || - len(session.statement.selectStr) > 0 { - return false - } - return true -} - -func (session *Session) doPrepare(db *core.DB, sqlStr string) (stmt *core.Stmt, err error) { - crc := crc32.ChecksumIEEE([]byte(sqlStr)) - // TODO try hash(sqlStr+len(sqlStr)) - var has bool - stmt, has = session.stmtCache[crc] - if !has { - stmt, err = db.Prepare(sqlStr) - if err != nil { - return nil, err - } - session.stmtCache[crc] = stmt - } - return -} - -func (session *Session) getField(dataStruct *reflect.Value, key string, table *core.Table, idx int) (*reflect.Value, error) { - var col *core.Column - if col = table.GetColumnIdx(key, idx); col == nil { - return nil, ErrFieldIsNotExist{key, table.Name} - } - - fieldValue, err := col.ValueOfV(dataStruct) - if err != nil { - return nil, err - } - - if !fieldValue.IsValid() || !fieldValue.CanSet() { - return nil, ErrFieldIsNotValid{key, table.Name} - } - - return fieldValue, nil -} - -// Cell cell is a result of one column field -type Cell *interface{} - -func (session *Session) rows2Beans(rows *core.Rows, fields []string, - table *core.Table, newElemFunc func([]string) reflect.Value, - sliceValueSetFunc func(*reflect.Value, core.PK) error) error { - for rows.Next() { - var newValue = newElemFunc(fields) - bean := newValue.Interface() - dataStruct := newValue.Elem() - - // handle beforeClosures - scanResults, err := session.row2Slice(rows, fields, bean) - if err != nil { - return err - } - pk, err := session.slice2Bean(scanResults, fields, bean, &dataStruct, table) - if err != nil { - return err - } - session.afterProcessors = append(session.afterProcessors, executedProcessor{ - fun: func(*Session, interface{}) error { - return sliceValueSetFunc(&newValue, pk) - }, - session: session, - bean: bean, - }) - } - return nil -} - -func (session *Session) row2Slice(rows *core.Rows, fields []string, bean interface{}) ([]interface{}, error) { - for _, closure := range session.beforeClosures { - closure(bean) - } - - scanResults := make([]interface{}, len(fields)) - for i := 0; i < len(fields); i++ { - var cell interface{} - scanResults[i] = &cell - } - if err := rows.Scan(scanResults...); err != nil { - return nil, err - } - - if b, hasBeforeSet := bean.(BeforeSetProcessor); hasBeforeSet { - for ii, key := range fields { - b.BeforeSet(key, Cell(scanResults[ii].(*interface{}))) - } - } - return scanResults, nil -} - -func (session *Session) slice2Bean(scanResults []interface{}, fields []string, bean interface{}, dataStruct *reflect.Value, table *core.Table) (core.PK, error) { - defer func() { - if b, hasAfterSet := bean.(AfterSetProcessor); hasAfterSet { - for ii, key := range fields { - b.AfterSet(key, Cell(scanResults[ii].(*interface{}))) - } - } - }() - - // handle afterClosures - for _, closure := range session.afterClosures { - session.afterProcessors = append(session.afterProcessors, executedProcessor{ - fun: func(sess *Session, bean interface{}) error { - closure(bean) - return nil - }, - session: session, - bean: bean, - }) - } - - if a, has := bean.(AfterLoadProcessor); has { - session.afterProcessors = append(session.afterProcessors, executedProcessor{ - fun: func(sess *Session, bean interface{}) error { - a.AfterLoad() - return nil - }, - session: session, - bean: bean, - }) - } - - if a, has := bean.(AfterLoadSessionProcessor); has { - session.afterProcessors = append(session.afterProcessors, executedProcessor{ - fun: func(sess *Session, bean interface{}) error { - a.AfterLoad(sess) - return nil - }, - session: session, - bean: bean, - }) - } - - var tempMap = make(map[string]int) - var pk core.PK - for ii, key := range fields { - var idx int - var ok bool - var lKey = strings.ToLower(key) - if idx, ok = tempMap[lKey]; !ok { - idx = 0 - } else { - idx = idx + 1 - } - tempMap[lKey] = idx - - fieldValue, err := session.getField(dataStruct, key, table, idx) - if err != nil { - if !strings.Contains(err.Error(), "is not valid") { - session.engine.logger.Warn(err) - } - continue - } - if fieldValue == nil { - continue - } - rawValue := reflect.Indirect(reflect.ValueOf(scanResults[ii])) - - // if row is null then ignore - if rawValue.Interface() == nil { - continue - } - - if fieldValue.CanAddr() { - if structConvert, ok := fieldValue.Addr().Interface().(core.Conversion); ok { - if data, err := value2Bytes(&rawValue); err == nil { - if err := structConvert.FromDB(data); err != nil { - return nil, err - } - } else { - return nil, err - } - continue - } - } - - if _, ok := fieldValue.Interface().(core.Conversion); ok { - if data, err := value2Bytes(&rawValue); err == nil { - if fieldValue.Kind() == reflect.Ptr && fieldValue.IsNil() { - fieldValue.Set(reflect.New(fieldValue.Type().Elem())) - } - fieldValue.Interface().(core.Conversion).FromDB(data) - } else { - return nil, err - } - continue - } - - rawValueType := reflect.TypeOf(rawValue.Interface()) - vv := reflect.ValueOf(rawValue.Interface()) - col := table.GetColumnIdx(key, idx) - if col.IsPrimaryKey { - pk = append(pk, rawValue.Interface()) - } - fieldType := fieldValue.Type() - hasAssigned := false - - if col.SQLType.IsJson() { - var bs []byte - if rawValueType.Kind() == reflect.String { - bs = []byte(vv.String()) - } else if rawValueType.ConvertibleTo(core.BytesType) { - bs = vv.Bytes() - } else { - return nil, fmt.Errorf("unsupported database data type: %s %v", key, rawValueType.Kind()) - } - - hasAssigned = true - - if len(bs) > 0 { - if fieldType.Kind() == reflect.String { - fieldValue.SetString(string(bs)) - continue - } - if fieldValue.CanAddr() { - err := json.Unmarshal(bs, fieldValue.Addr().Interface()) - if err != nil { - return nil, err - } - } else { - x := reflect.New(fieldType) - err := json.Unmarshal(bs, x.Interface()) - if err != nil { - return nil, err - } - fieldValue.Set(x.Elem()) - } - } - - continue - } - - switch fieldType.Kind() { - case reflect.Complex64, reflect.Complex128: - // TODO: reimplement this - var bs []byte - if rawValueType.Kind() == reflect.String { - bs = []byte(vv.String()) - } else if rawValueType.ConvertibleTo(core.BytesType) { - bs = vv.Bytes() - } - - hasAssigned = true - if len(bs) > 0 { - if fieldValue.CanAddr() { - err := json.Unmarshal(bs, fieldValue.Addr().Interface()) - if err != nil { - return nil, err - } - } else { - x := reflect.New(fieldType) - err := json.Unmarshal(bs, x.Interface()) - if err != nil { - return nil, err - } - fieldValue.Set(x.Elem()) - } - } - case reflect.Slice, reflect.Array: - switch rawValueType.Kind() { - case reflect.Slice, reflect.Array: - switch rawValueType.Elem().Kind() { - case reflect.Uint8: - if fieldType.Elem().Kind() == reflect.Uint8 { - hasAssigned = true - if col.SQLType.IsText() { - x := reflect.New(fieldType) - err := json.Unmarshal(vv.Bytes(), x.Interface()) - if err != nil { - return nil, err - } - fieldValue.Set(x.Elem()) - } else { - if fieldValue.Len() > 0 { - for i := 0; i < fieldValue.Len(); i++ { - if i < vv.Len() { - fieldValue.Index(i).Set(vv.Index(i)) - } - } - } else { - for i := 0; i < vv.Len(); i++ { - fieldValue.Set(reflect.Append(*fieldValue, vv.Index(i))) - } - } - } - } - } - } - case reflect.String: - if rawValueType.Kind() == reflect.String { - hasAssigned = true - fieldValue.SetString(vv.String()) - } - case reflect.Bool: - if rawValueType.Kind() == reflect.Bool { - hasAssigned = true - fieldValue.SetBool(vv.Bool()) - } - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - switch rawValueType.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - hasAssigned = true - fieldValue.SetInt(vv.Int()) - } - case reflect.Float32, reflect.Float64: - switch rawValueType.Kind() { - case reflect.Float32, reflect.Float64: - hasAssigned = true - fieldValue.SetFloat(vv.Float()) - } - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - switch rawValueType.Kind() { - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - hasAssigned = true - fieldValue.SetUint(vv.Uint()) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - hasAssigned = true - fieldValue.SetUint(uint64(vv.Int())) - } - case reflect.Struct: - if fieldType.ConvertibleTo(core.TimeType) { - dbTZ := session.engine.DatabaseTZ - if col.TimeZone != nil { - dbTZ = col.TimeZone - } - - if rawValueType == core.TimeType { - hasAssigned = true - - t := vv.Convert(core.TimeType).Interface().(time.Time) - - z, _ := t.Zone() - // set new location if database don't save timezone or give an incorrect timezone - if len(z) == 0 || t.Year() == 0 || t.Location().String() != dbTZ.String() { // !nashtsai! HACK tmp work around for lib/pq doesn't properly time with location - session.engine.logger.Debugf("empty zone key[%v] : %v | zone: %v | location: %+v\n", key, t, z, *t.Location()) - t = time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), - t.Minute(), t.Second(), t.Nanosecond(), dbTZ) - } - - t = t.In(session.engine.TZLocation) - fieldValue.Set(reflect.ValueOf(t).Convert(fieldType)) - } else if rawValueType == core.IntType || rawValueType == core.Int64Type || - rawValueType == core.Int32Type { - hasAssigned = true - - t := time.Unix(vv.Int(), 0).In(session.engine.TZLocation) - fieldValue.Set(reflect.ValueOf(t).Convert(fieldType)) - } else { - if d, ok := vv.Interface().([]uint8); ok { - hasAssigned = true - t, err := session.byte2Time(col, d) - if err != nil { - session.engine.logger.Error("byte2Time error:", err.Error()) - hasAssigned = false - } else { - fieldValue.Set(reflect.ValueOf(t).Convert(fieldType)) - } - } else if d, ok := vv.Interface().(string); ok { - hasAssigned = true - t, err := session.str2Time(col, d) - if err != nil { - session.engine.logger.Error("byte2Time error:", err.Error()) - hasAssigned = false - } else { - fieldValue.Set(reflect.ValueOf(t).Convert(fieldType)) - } - } else { - return nil, fmt.Errorf("rawValueType is %v, value is %v", rawValueType, vv.Interface()) - } - } - } else if nulVal, ok := fieldValue.Addr().Interface().(sql.Scanner); ok { - // !! 增加支持sql.Scanner接口的结构,如sql.NullString - hasAssigned = true - if err := nulVal.Scan(vv.Interface()); err != nil { - session.engine.logger.Error("sql.Sanner error:", err.Error()) - hasAssigned = false - } - } else if col.SQLType.IsJson() { - if rawValueType.Kind() == reflect.String { - hasAssigned = true - x := reflect.New(fieldType) - if len([]byte(vv.String())) > 0 { - err := json.Unmarshal([]byte(vv.String()), x.Interface()) - if err != nil { - return nil, err - } - fieldValue.Set(x.Elem()) - } - } else if rawValueType.Kind() == reflect.Slice { - hasAssigned = true - x := reflect.New(fieldType) - if len(vv.Bytes()) > 0 { - err := json.Unmarshal(vv.Bytes(), x.Interface()) - if err != nil { - return nil, err - } - fieldValue.Set(x.Elem()) - } - } - } else if session.statement.UseCascade { - table, err := session.engine.autoMapType(*fieldValue) - if err != nil { - return nil, err - } - - hasAssigned = true - if len(table.PrimaryKeys) != 1 { - return nil, errors.New("unsupported non or composited primary key cascade") - } - var pk = make(core.PK, len(table.PrimaryKeys)) - pk[0], err = asKind(vv, rawValueType) - if err != nil { - return nil, err - } - - if !isPKZero(pk) { - // !nashtsai! TODO for hasOne relationship, it's preferred to use join query for eager fetch - // however, also need to consider adding a 'lazy' attribute to xorm tag which allow hasOne - // property to be fetched lazily - structInter := reflect.New(fieldValue.Type()) - has, err := session.ID(pk).NoCascade().get(structInter.Interface()) - if err != nil { - return nil, err - } - if has { - fieldValue.Set(structInter.Elem()) - } else { - return nil, errors.New("cascade obj is not exist") - } - } - } - case reflect.Ptr: - // !nashtsai! TODO merge duplicated codes above - switch fieldType { - // following types case matching ptr's native type, therefore assign ptr directly - case core.PtrStringType: - if rawValueType.Kind() == reflect.String { - x := vv.String() - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrBoolType: - if rawValueType.Kind() == reflect.Bool { - x := vv.Bool() - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrTimeType: - if rawValueType == core.PtrTimeType { - hasAssigned = true - var x = rawValue.Interface().(time.Time) - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrFloat64Type: - if rawValueType.Kind() == reflect.Float64 { - x := vv.Float() - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrUint64Type: - if rawValueType.Kind() == reflect.Int64 { - var x = uint64(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrInt64Type: - if rawValueType.Kind() == reflect.Int64 { - x := vv.Int() - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrFloat32Type: - if rawValueType.Kind() == reflect.Float64 { - var x = float32(vv.Float()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrIntType: - if rawValueType.Kind() == reflect.Int64 { - var x = int(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrInt32Type: - if rawValueType.Kind() == reflect.Int64 { - var x = int32(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrInt8Type: - if rawValueType.Kind() == reflect.Int64 { - var x = int8(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrInt16Type: - if rawValueType.Kind() == reflect.Int64 { - var x = int16(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrUintType: - if rawValueType.Kind() == reflect.Int64 { - var x = uint(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.PtrUint32Type: - if rawValueType.Kind() == reflect.Int64 { - var x = uint32(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.Uint8Type: - if rawValueType.Kind() == reflect.Int64 { - var x = uint8(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.Uint16Type: - if rawValueType.Kind() == reflect.Int64 { - var x = uint16(vv.Int()) - hasAssigned = true - fieldValue.Set(reflect.ValueOf(&x)) - } - case core.Complex64Type: - var x complex64 - if len([]byte(vv.String())) > 0 { - err := json.Unmarshal([]byte(vv.String()), &x) - if err != nil { - return nil, err - } - fieldValue.Set(reflect.ValueOf(&x)) - } - hasAssigned = true - case core.Complex128Type: - var x complex128 - if len([]byte(vv.String())) > 0 { - err := json.Unmarshal([]byte(vv.String()), &x) - if err != nil { - return nil, err - } - fieldValue.Set(reflect.ValueOf(&x)) - } - hasAssigned = true - } // switch fieldType - } // switch fieldType.Kind() - - // !nashtsai! for value can't be assigned directly fallback to convert to []byte then back to value - if !hasAssigned { - data, err := value2Bytes(&rawValue) - if err != nil { - return nil, err - } - - if err = session.bytes2Value(col, fieldValue, data); err != nil { - return nil, err - } - } - } - return pk, nil -} - -// saveLastSQL stores executed query information -func (session *Session) saveLastSQL(sql string, args ...interface{}) { - session.lastSQL = sql - session.lastSQLArgs = args - session.engine.logSQL(sql, args...) -} - -// LastSQL returns last query information -func (session *Session) LastSQL() (string, []interface{}) { - return session.lastSQL, session.lastSQLArgs -} - -// Unscoped always disable struct tag "deleted" -func (session *Session) Unscoped() *Session { - session.statement.Unscoped() - return session -} diff --git a/vendor/github.com/go-xorm/xorm/session_cols.go b/vendor/github.com/go-xorm/xorm/session_cols.go deleted file mode 100644 index 47d109c6c..000000000 --- a/vendor/github.com/go-xorm/xorm/session_cols.go +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright 2017 The Xorm 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 xorm - -import ( - "reflect" - "strings" - "time" - - "github.com/go-xorm/core" -) - -type incrParam struct { - colName string - arg interface{} -} - -type decrParam struct { - colName string - arg interface{} -} - -type exprParam struct { - colName string - expr string -} - -type columnMap []string - -func (m columnMap) contain(colName string) bool { - if len(m) == 0 { - return false - } - - n := len(colName) - for _, mk := range m { - if len(mk) != n { - continue - } - if strings.EqualFold(mk, colName) { - return true - } - } - - return false -} - -func (m *columnMap) add(colName string) bool { - if m.contain(colName) { - return false - } - *m = append(*m, colName) - return true -} - -func setColumnInt(bean interface{}, col *core.Column, t int64) { - v, err := col.ValueOf(bean) - if err != nil { - return - } - if v.CanSet() { - switch v.Type().Kind() { - case reflect.Int, reflect.Int64, reflect.Int32: - v.SetInt(t) - case reflect.Uint, reflect.Uint64, reflect.Uint32: - v.SetUint(uint64(t)) - } - } -} - -func setColumnTime(bean interface{}, col *core.Column, t time.Time) { - v, err := col.ValueOf(bean) - if err != nil { - return - } - if v.CanSet() { - switch v.Type().Kind() { - case reflect.Struct: - v.Set(reflect.ValueOf(t).Convert(v.Type())) - case reflect.Int, reflect.Int64, reflect.Int32: - v.SetInt(t.Unix()) - case reflect.Uint, reflect.Uint64, reflect.Uint32: - v.SetUint(uint64(t.Unix())) - } - } -} - -func getFlagForColumn(m map[string]bool, col *core.Column) (val bool, has bool) { - if len(m) == 0 { - return false, false - } - - n := len(col.Name) - - for mk := range m { - if len(mk) != n { - continue - } - if strings.EqualFold(mk, col.Name) { - return m[mk], true - } - } - - return false, false -} - -func col2NewCols(columns ...string) []string { - newColumns := make([]string, 0, len(columns)) - for _, col := range columns { - col = strings.Replace(col, "`", "", -1) - col = strings.Replace(col, `"`, "", -1) - ccols := strings.Split(col, ",") - for _, c := range ccols { - newColumns = append(newColumns, strings.TrimSpace(c)) - } - } - return newColumns -} - -// Incr provides a query string like "count = count + 1" -func (session *Session) Incr(column string, arg ...interface{}) *Session { - session.statement.Incr(column, arg...) - return session -} - -// Decr provides a query string like "count = count - 1" -func (session *Session) Decr(column string, arg ...interface{}) *Session { - session.statement.Decr(column, arg...) - return session -} - -// SetExpr provides a query string like "column = {expression}" -func (session *Session) SetExpr(column string, expression string) *Session { - session.statement.SetExpr(column, expression) - return session -} - -// Select provides some columns to special -func (session *Session) Select(str string) *Session { - session.statement.Select(str) - return session -} - -// Cols provides some columns to special -func (session *Session) Cols(columns ...string) *Session { - session.statement.Cols(columns...) - return session -} - -// AllCols ask all columns -func (session *Session) AllCols() *Session { - session.statement.AllCols() - return session -} - -// MustCols specify some columns must use even if they are empty -func (session *Session) MustCols(columns ...string) *Session { - session.statement.MustCols(columns...) - return session -} - -// UseBool automatically retrieve condition according struct, but -// if struct has bool field, it will ignore them. So use UseBool -// to tell system to do not ignore them. -// If no parameters, it will use all the bool field of struct, or -// it will use parameters's columns -func (session *Session) UseBool(columns ...string) *Session { - session.statement.UseBool(columns...) - return session -} - -// Distinct use for distinct columns. Caution: when you are using cache, -// distinct will not be cached because cache system need id, -// but distinct will not provide id -func (session *Session) Distinct(columns ...string) *Session { - session.statement.Distinct(columns...) - return session -} - -// Omit Only not use the parameters as select or update columns -func (session *Session) Omit(columns ...string) *Session { - session.statement.Omit(columns...) - return session -} - -// Nullable Set null when column is zero-value and nullable for update -func (session *Session) Nullable(columns ...string) *Session { - session.statement.Nullable(columns...) - return session -} - -// NoAutoTime means do not automatically give created field and updated field -// the current time on the current session temporarily -func (session *Session) NoAutoTime() *Session { - session.statement.UseAutoTime = false - return session -} diff --git a/vendor/github.com/go-xorm/xorm/session_cond.go b/vendor/github.com/go-xorm/xorm/session_cond.go deleted file mode 100644 index e1d528f2d..000000000 --- a/vendor/github.com/go-xorm/xorm/session_cond.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2017 The Xorm 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 xorm - -import "github.com/go-xorm/builder" - -// Sql provides raw sql input parameter. When you have a complex SQL statement -// and cannot use Where, Id, In and etc. Methods to describe, you can use SQL. -// -// Deprecated: use SQL instead. -func (session *Session) Sql(query string, args ...interface{}) *Session { - return session.SQL(query, args...) -} - -// SQL provides raw sql input parameter. When you have a complex SQL statement -// and cannot use Where, Id, In and etc. Methods to describe, you can use SQL. -func (session *Session) SQL(query interface{}, args ...interface{}) *Session { - session.statement.SQL(query, args...) - return session -} - -// Where provides custom query condition. -func (session *Session) Where(query interface{}, args ...interface{}) *Session { - session.statement.Where(query, args...) - return session -} - -// And provides custom query condition. -func (session *Session) And(query interface{}, args ...interface{}) *Session { - session.statement.And(query, args...) - return session -} - -// Or provides custom query condition. -func (session *Session) Or(query interface{}, args ...interface{}) *Session { - session.statement.Or(query, args...) - return session -} - -// Id provides converting id as a query condition -// -// Deprecated: use ID instead -func (session *Session) Id(id interface{}) *Session { - return session.ID(id) -} - -// ID provides converting id as a query condition -func (session *Session) ID(id interface{}) *Session { - session.statement.ID(id) - return session -} - -// In provides a query string like "id in (1, 2, 3)" -func (session *Session) In(column string, args ...interface{}) *Session { - session.statement.In(column, args...) - return session -} - -// NotIn provides a query string like "id in (1, 2, 3)" -func (session *Session) NotIn(column string, args ...interface{}) *Session { - session.statement.NotIn(column, args...) - return session -} - -// Conds returns session query conditions except auto bean conditions -func (session *Session) Conds() builder.Cond { - return session.statement.cond -} diff --git a/vendor/github.com/go-xorm/xorm/session_convert.go b/vendor/github.com/go-xorm/xorm/session_convert.go deleted file mode 100644 index 1f9d8aa1b..000000000 --- a/vendor/github.com/go-xorm/xorm/session_convert.go +++ /dev/null @@ -1,662 +0,0 @@ -// Copyright 2017 The Xorm 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 xorm - -import ( - "database/sql" - "database/sql/driver" - "encoding/json" - "errors" - "fmt" - "reflect" - "strconv" - "strings" - "time" - - "github.com/go-xorm/core" -) - -func (session *Session) str2Time(col *core.Column, data string) (outTime time.Time, outErr error) { - sdata := strings.TrimSpace(data) - var x time.Time - var err error - - var parseLoc = session.engine.DatabaseTZ - if col.TimeZone != nil { - parseLoc = col.TimeZone - } - - if sdata == zeroTime0 || sdata == zeroTime1 { - } else if !strings.ContainsAny(sdata, "- :") { // !nashtsai! has only found that mymysql driver is using this for time type column - // time stamp - sd, err := strconv.ParseInt(sdata, 10, 64) - if err == nil { - x = time.Unix(sd, 0) - //session.engine.logger.Debugf("time(0) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) - } else { - //session.engine.logger.Debugf("time(0) err key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) - } - } else if len(sdata) > 19 && strings.Contains(sdata, "-") { - x, err = time.ParseInLocation(time.RFC3339Nano, sdata, parseLoc) - session.engine.logger.Debugf("time(1) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) - if err != nil { - x, err = time.ParseInLocation("2006-01-02 15:04:05.999999999", sdata, parseLoc) - //session.engine.logger.Debugf("time(2) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) - } - if err != nil { - x, err = time.ParseInLocation("2006-01-02 15:04:05.9999999 Z07:00", sdata, parseLoc) - //session.engine.logger.Debugf("time(3) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) - } - } else if len(sdata) == 19 && strings.Contains(sdata, "-") { - x, err = time.ParseInLocation("2006-01-02 15:04:05", sdata, parseLoc) - //session.engine.logger.Debugf("time(4) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) - } else if len(sdata) == 10 && sdata[4] == '-' && sdata[7] == '-' { - x, err = time.ParseInLocation("2006-01-02", sdata, parseLoc) - //session.engine.logger.Debugf("time(5) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) - } else if col.SQLType.Name == core.Time { - if strings.Contains(sdata, " ") { - ssd := strings.Split(sdata, " ") - sdata = ssd[1] - } - - sdata = strings.TrimSpace(sdata) - if session.engine.dialect.DBType() == core.MYSQL && len(sdata) > 8 { - sdata = sdata[len(sdata)-8:] - } - - st := fmt.Sprintf("2006-01-02 %v", sdata) - x, err = time.ParseInLocation("2006-01-02 15:04:05", st, parseLoc) - //session.engine.logger.Debugf("time(6) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) - } else { - outErr = fmt.Errorf("unsupported time format %v", sdata) - return - } - if err != nil { - outErr = fmt.Errorf("unsupported time format %v: %v", sdata, err) - return - } - outTime = x.In(session.engine.TZLocation) - return -} - -func (session *Session) byte2Time(col *core.Column, data []byte) (outTime time.Time, outErr error) { - return session.str2Time(col, string(data)) -} - -// convert a db data([]byte) to a field value -func (session *Session) bytes2Value(col *core.Column, fieldValue *reflect.Value, data []byte) error { - if structConvert, ok := fieldValue.Addr().Interface().(core.Conversion); ok { - return structConvert.FromDB(data) - } - - if structConvert, ok := fieldValue.Interface().(core.Conversion); ok { - return structConvert.FromDB(data) - } - - var v interface{} - key := col.Name - fieldType := fieldValue.Type() - - switch fieldType.Kind() { - case reflect.Complex64, reflect.Complex128: - x := reflect.New(fieldType) - if len(data) > 0 { - err := json.Unmarshal(data, x.Interface()) - if err != nil { - session.engine.logger.Error(err) - return err - } - fieldValue.Set(x.Elem()) - } - case reflect.Slice, reflect.Array, reflect.Map: - v = data - t := fieldType.Elem() - k := t.Kind() - if col.SQLType.IsText() { - x := reflect.New(fieldType) - if len(data) > 0 { - err := json.Unmarshal(data, x.Interface()) - if err != nil { - session.engine.logger.Error(err) - return err - } - fieldValue.Set(x.Elem()) - } - } else if col.SQLType.IsBlob() { - if k == reflect.Uint8 { - fieldValue.Set(reflect.ValueOf(v)) - } else { - x := reflect.New(fieldType) - if len(data) > 0 { - err := json.Unmarshal(data, x.Interface()) - if err != nil { - session.engine.logger.Error(err) - return err - } - fieldValue.Set(x.Elem()) - } - } - } else { - return ErrUnSupportedType - } - case reflect.String: - fieldValue.SetString(string(data)) - case reflect.Bool: - v, err := asBool(data) - if err != nil { - return fmt.Errorf("arg %v as bool: %s", key, err.Error()) - } - fieldValue.Set(reflect.ValueOf(v)) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - sdata := string(data) - var x int64 - var err error - // for mysql, when use bit, it returned \x01 - if col.SQLType.Name == core.Bit && - session.engine.dialect.DBType() == core.MYSQL { // !nashtsai! TODO dialect needs to provide conversion interface API - if len(data) == 1 { - x = int64(data[0]) - } else { - x = 0 - } - } else if strings.HasPrefix(sdata, "0x") { - x, err = strconv.ParseInt(sdata, 16, 64) - } else if strings.HasPrefix(sdata, "0") { - x, err = strconv.ParseInt(sdata, 8, 64) - } else if strings.EqualFold(sdata, "true") { - x = 1 - } else if strings.EqualFold(sdata, "false") { - x = 0 - } else { - x, err = strconv.ParseInt(sdata, 10, 64) - } - if err != nil { - return fmt.Errorf("arg %v as int: %s", key, err.Error()) - } - fieldValue.SetInt(x) - case reflect.Float32, reflect.Float64: - x, err := strconv.ParseFloat(string(data), 64) - if err != nil { - return fmt.Errorf("arg %v as float64: %s", key, err.Error()) - } - fieldValue.SetFloat(x) - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - x, err := strconv.ParseUint(string(data), 10, 64) - if err != nil { - return fmt.Errorf("arg %v as int: %s", key, err.Error()) - } - fieldValue.SetUint(x) - //Currently only support Time type - case reflect.Struct: - // !! 增加支持sql.Scanner接口的结构,如sql.NullString - if nulVal, ok := fieldValue.Addr().Interface().(sql.Scanner); ok { - if err := nulVal.Scan(data); err != nil { - return fmt.Errorf("sql.Scan(%v) failed: %s ", data, err.Error()) - } - } else { - if fieldType.ConvertibleTo(core.TimeType) { - x, err := session.byte2Time(col, data) - if err != nil { - return err - } - v = x - fieldValue.Set(reflect.ValueOf(v).Convert(fieldType)) - } else if session.statement.UseCascade { - table, err := session.engine.autoMapType(*fieldValue) - if err != nil { - return err - } - - // TODO: current only support 1 primary key - if len(table.PrimaryKeys) > 1 { - return errors.New("unsupported composited primary key cascade") - } - - var pk = make(core.PK, len(table.PrimaryKeys)) - rawValueType := table.ColumnType(table.PKColumns()[0].FieldName) - pk[0], err = str2PK(string(data), rawValueType) - if err != nil { - return err - } - - if !isPKZero(pk) { - // !nashtsai! TODO for hasOne relationship, it's preferred to use join query for eager fetch - // however, also need to consider adding a 'lazy' attribute to xorm tag which allow hasOne - // property to be fetched lazily - structInter := reflect.New(fieldValue.Type()) - has, err := session.ID(pk).NoCascade().get(structInter.Interface()) - if err != nil { - return err - } - if has { - v = structInter.Elem().Interface() - fieldValue.Set(reflect.ValueOf(v)) - } else { - return errors.New("cascade obj is not exist") - } - } - } - } - case reflect.Ptr: - // !nashtsai! TODO merge duplicated codes above - //typeStr := fieldType.String() - switch fieldType.Elem().Kind() { - // case "*string": - case core.StringType.Kind(): - x := string(data) - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - // case "*bool": - case core.BoolType.Kind(): - d := string(data) - v, err := strconv.ParseBool(d) - if err != nil { - return fmt.Errorf("arg %v as bool: %s", key, err.Error()) - } - fieldValue.Set(reflect.ValueOf(&v).Convert(fieldType)) - // case "*complex64": - case core.Complex64Type.Kind(): - var x complex64 - if len(data) > 0 { - err := json.Unmarshal(data, &x) - if err != nil { - session.engine.logger.Error(err) - return err - } - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - } - // case "*complex128": - case core.Complex128Type.Kind(): - var x complex128 - if len(data) > 0 { - err := json.Unmarshal(data, &x) - if err != nil { - session.engine.logger.Error(err) - return err - } - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - } - // case "*float64": - case core.Float64Type.Kind(): - x, err := strconv.ParseFloat(string(data), 64) - if err != nil { - return fmt.Errorf("arg %v as float64: %s", key, err.Error()) - } - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - // case "*float32": - case core.Float32Type.Kind(): - var x float32 - x1, err := strconv.ParseFloat(string(data), 32) - if err != nil { - return fmt.Errorf("arg %v as float32: %s", key, err.Error()) - } - x = float32(x1) - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - // case "*uint64": - case core.Uint64Type.Kind(): - var x uint64 - x, err := strconv.ParseUint(string(data), 10, 64) - if err != nil { - return fmt.Errorf("arg %v as int: %s", key, err.Error()) - } - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - // case "*uint": - case core.UintType.Kind(): - var x uint - x1, err := strconv.ParseUint(string(data), 10, 64) - if err != nil { - return fmt.Errorf("arg %v as int: %s", key, err.Error()) - } - x = uint(x1) - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - // case "*uint32": - case core.Uint32Type.Kind(): - var x uint32 - x1, err := strconv.ParseUint(string(data), 10, 64) - if err != nil { - return fmt.Errorf("arg %v as int: %s", key, err.Error()) - } - x = uint32(x1) - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - // case "*uint8": - case core.Uint8Type.Kind(): - var x uint8 - x1, err := strconv.ParseUint(string(data), 10, 64) - if err != nil { - return fmt.Errorf("arg %v as int: %s", key, err.Error()) - } - x = uint8(x1) - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - // case "*uint16": - case core.Uint16Type.Kind(): - var x uint16 - x1, err := strconv.ParseUint(string(data), 10, 64) - if err != nil { - return fmt.Errorf("arg %v as int: %s", key, err.Error()) - } - x = uint16(x1) - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - // case "*int64": - case core.Int64Type.Kind(): - sdata := string(data) - var x int64 - var err error - // for mysql, when use bit, it returned \x01 - if col.SQLType.Name == core.Bit && - strings.Contains(session.engine.DriverName(), "mysql") { - if len(data) == 1 { - x = int64(data[0]) - } else { - x = 0 - } - } else if strings.HasPrefix(sdata, "0x") { - x, err = strconv.ParseInt(sdata, 16, 64) - } else if strings.HasPrefix(sdata, "0") { - x, err = strconv.ParseInt(sdata, 8, 64) - } else { - x, err = strconv.ParseInt(sdata, 10, 64) - } - if err != nil { - return fmt.Errorf("arg %v as int: %s", key, err.Error()) - } - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - // case "*int": - case core.IntType.Kind(): - sdata := string(data) - var x int - var x1 int64 - var err error - // for mysql, when use bit, it returned \x01 - if col.SQLType.Name == core.Bit && - strings.Contains(session.engine.DriverName(), "mysql") { - if len(data) == 1 { - x = int(data[0]) - } else { - x = 0 - } - } else if strings.HasPrefix(sdata, "0x") { - x1, err = strconv.ParseInt(sdata, 16, 64) - x = int(x1) - } else if strings.HasPrefix(sdata, "0") { - x1, err = strconv.ParseInt(sdata, 8, 64) - x = int(x1) - } else { - x1, err = strconv.ParseInt(sdata, 10, 64) - x = int(x1) - } - if err != nil { - return fmt.Errorf("arg %v as int: %s", key, err.Error()) - } - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - // case "*int32": - case core.Int32Type.Kind(): - sdata := string(data) - var x int32 - var x1 int64 - var err error - // for mysql, when use bit, it returned \x01 - if col.SQLType.Name == core.Bit && - session.engine.dialect.DBType() == core.MYSQL { - if len(data) == 1 { - x = int32(data[0]) - } else { - x = 0 - } - } else if strings.HasPrefix(sdata, "0x") { - x1, err = strconv.ParseInt(sdata, 16, 64) - x = int32(x1) - } else if strings.HasPrefix(sdata, "0") { - x1, err = strconv.ParseInt(sdata, 8, 64) - x = int32(x1) - } else { - x1, err = strconv.ParseInt(sdata, 10, 64) - x = int32(x1) - } - if err != nil { - return fmt.Errorf("arg %v as int: %s", key, err.Error()) - } - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - // case "*int8": - case core.Int8Type.Kind(): - sdata := string(data) - var x int8 - var x1 int64 - var err error - // for mysql, when use bit, it returned \x01 - if col.SQLType.Name == core.Bit && - strings.Contains(session.engine.DriverName(), "mysql") { - if len(data) == 1 { - x = int8(data[0]) - } else { - x = 0 - } - } else if strings.HasPrefix(sdata, "0x") { - x1, err = strconv.ParseInt(sdata, 16, 64) - x = int8(x1) - } else if strings.HasPrefix(sdata, "0") { - x1, err = strconv.ParseInt(sdata, 8, 64) - x = int8(x1) - } else { - x1, err = strconv.ParseInt(sdata, 10, 64) - x = int8(x1) - } - if err != nil { - return fmt.Errorf("arg %v as int: %s", key, err.Error()) - } - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - // case "*int16": - case core.Int16Type.Kind(): - sdata := string(data) - var x int16 - var x1 int64 - var err error - // for mysql, when use bit, it returned \x01 - if col.SQLType.Name == core.Bit && - strings.Contains(session.engine.DriverName(), "mysql") { - if len(data) == 1 { - x = int16(data[0]) - } else { - x = 0 - } - } else if strings.HasPrefix(sdata, "0x") { - x1, err = strconv.ParseInt(sdata, 16, 64) - x = int16(x1) - } else if strings.HasPrefix(sdata, "0") { - x1, err = strconv.ParseInt(sdata, 8, 64) - x = int16(x1) - } else { - x1, err = strconv.ParseInt(sdata, 10, 64) - x = int16(x1) - } - if err != nil { - return fmt.Errorf("arg %v as int: %s", key, err.Error()) - } - fieldValue.Set(reflect.ValueOf(&x).Convert(fieldType)) - // case "*SomeStruct": - case reflect.Struct: - switch fieldType { - // case "*.time.Time": - case core.PtrTimeType: - x, err := session.byte2Time(col, data) - if err != nil { - return err - } - v = x - fieldValue.Set(reflect.ValueOf(&x)) - default: - if session.statement.UseCascade { - structInter := reflect.New(fieldType.Elem()) - table, err := session.engine.autoMapType(structInter.Elem()) - if err != nil { - return err - } - - if len(table.PrimaryKeys) > 1 { - return errors.New("unsupported composited primary key cascade") - } - - var pk = make(core.PK, len(table.PrimaryKeys)) - rawValueType := table.ColumnType(table.PKColumns()[0].FieldName) - pk[0], err = str2PK(string(data), rawValueType) - if err != nil { - return err - } - - if !isPKZero(pk) { - // !nashtsai! TODO for hasOne relationship, it's preferred to use join query for eager fetch - // however, also need to consider adding a 'lazy' attribute to xorm tag which allow hasOne - // property to be fetched lazily - has, err := session.ID(pk).NoCascade().get(structInter.Interface()) - if err != nil { - return err - } - if has { - v = structInter.Interface() - fieldValue.Set(reflect.ValueOf(v)) - } else { - return errors.New("cascade obj is not exist") - } - } - } else { - return fmt.Errorf("unsupported struct type in Scan: %s", fieldValue.Type().String()) - } - } - default: - return fmt.Errorf("unsupported type in Scan: %s", fieldValue.Type().String()) - } - default: - return fmt.Errorf("unsupported type in Scan: %s", fieldValue.Type().String()) - } - - return nil -} - -// convert a field value of a struct to interface for put into db -func (session *Session) value2Interface(col *core.Column, fieldValue reflect.Value) (interface{}, error) { - if fieldValue.CanAddr() { - if fieldConvert, ok := fieldValue.Addr().Interface().(core.Conversion); ok { - data, err := fieldConvert.ToDB() - if err != nil { - return 0, err - } - if col.SQLType.IsBlob() { - return data, nil - } - return string(data), nil - } - } - - if fieldConvert, ok := fieldValue.Interface().(core.Conversion); ok { - data, err := fieldConvert.ToDB() - if err != nil { - return 0, err - } - if col.SQLType.IsBlob() { - return data, nil - } - return string(data), nil - } - - fieldType := fieldValue.Type() - k := fieldType.Kind() - if k == reflect.Ptr { - if fieldValue.IsNil() { - return nil, nil - } else if !fieldValue.IsValid() { - session.engine.logger.Warn("the field[", col.FieldName, "] is invalid") - return nil, nil - } else { - // !nashtsai! deference pointer type to instance type - fieldValue = fieldValue.Elem() - fieldType = fieldValue.Type() - k = fieldType.Kind() - } - } - - switch k { - case reflect.Bool: - return fieldValue.Bool(), nil - case reflect.String: - return fieldValue.String(), nil - case reflect.Struct: - if fieldType.ConvertibleTo(core.TimeType) { - t := fieldValue.Convert(core.TimeType).Interface().(time.Time) - tf := session.engine.formatColTime(col, t) - return tf, nil - } - - if !col.SQLType.IsJson() { - // !! 增加支持driver.Valuer接口的结构,如sql.NullString - if v, ok := fieldValue.Interface().(driver.Valuer); ok { - return v.Value() - } - - fieldTable, err := session.engine.autoMapType(fieldValue) - if err != nil { - return nil, err - } - if len(fieldTable.PrimaryKeys) == 1 { - pkField := reflect.Indirect(fieldValue).FieldByName(fieldTable.PKColumns()[0].FieldName) - return pkField.Interface(), nil - } - return 0, fmt.Errorf("no primary key for col %v", col.Name) - } - - if col.SQLType.IsText() { - bytes, err := json.Marshal(fieldValue.Interface()) - if err != nil { - session.engine.logger.Error(err) - return 0, err - } - return string(bytes), nil - } else if col.SQLType.IsBlob() { - bytes, err := json.Marshal(fieldValue.Interface()) - if err != nil { - session.engine.logger.Error(err) - return 0, err - } - return bytes, nil - } - return nil, fmt.Errorf("Unsupported type %v", fieldValue.Type()) - case reflect.Complex64, reflect.Complex128: - bytes, err := json.Marshal(fieldValue.Interface()) - if err != nil { - session.engine.logger.Error(err) - return 0, err - } - return string(bytes), nil - case reflect.Array, reflect.Slice, reflect.Map: - if !fieldValue.IsValid() { - return fieldValue.Interface(), nil - } - - if col.SQLType.IsText() { - bytes, err := json.Marshal(fieldValue.Interface()) - if err != nil { - session.engine.logger.Error(err) - return 0, err - } - return string(bytes), nil - } else if col.SQLType.IsBlob() { - var bytes []byte - var err error - if (k == reflect.Array || k == reflect.Slice) && - (fieldValue.Type().Elem().Kind() == reflect.Uint8) { - bytes = fieldValue.Bytes() - } else { - bytes, err = json.Marshal(fieldValue.Interface()) - if err != nil { - session.engine.logger.Error(err) - return 0, err - } - } - return bytes, nil - } - return nil, ErrUnSupportedType - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - return int64(fieldValue.Uint()), nil - default: - return fieldValue.Interface(), nil - } -} diff --git a/vendor/github.com/go-xorm/xorm/session_delete.go b/vendor/github.com/go-xorm/xorm/session_delete.go deleted file mode 100644 index d9cf3ea93..000000000 --- a/vendor/github.com/go-xorm/xorm/session_delete.go +++ /dev/null @@ -1,240 +0,0 @@ -// Copyright 2016 The Xorm 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 xorm - -import ( - "errors" - "fmt" - "strconv" - - "github.com/go-xorm/core" -) - -func (session *Session) cacheDelete(table *core.Table, tableName, sqlStr string, args ...interface{}) error { - if table == nil || - session.tx != nil { - return ErrCacheFailed - } - - for _, filter := range session.engine.dialect.Filters() { - sqlStr = filter.Do(sqlStr, session.engine.dialect, table) - } - - newsql := session.statement.convertIDSQL(sqlStr) - if newsql == "" { - return ErrCacheFailed - } - - cacher := session.engine.getCacher(tableName) - pkColumns := table.PKColumns() - ids, err := core.GetCacheSql(cacher, tableName, newsql, args) - if err != nil { - resultsSlice, err := session.queryBytes(newsql, args...) - if err != nil { - return err - } - ids = make([]core.PK, 0) - if len(resultsSlice) > 0 { - for _, data := range resultsSlice { - var id int64 - var pk core.PK = make([]interface{}, 0) - for _, col := range pkColumns { - if v, ok := data[col.Name]; !ok { - return errors.New("no id") - } else if col.SQLType.IsText() { - pk = append(pk, string(v)) - } else if col.SQLType.IsNumeric() { - id, err = strconv.ParseInt(string(v), 10, 64) - if err != nil { - return err - } - pk = append(pk, id) - } else { - return errors.New("not supported primary key type") - } - } - ids = append(ids, pk) - } - } - } - - for _, id := range ids { - session.engine.logger.Debug("[cacheDelete] delete cache obj:", tableName, id) - sid, err := id.ToString() - if err != nil { - return err - } - cacher.DelBean(tableName, sid) - } - session.engine.logger.Debug("[cacheDelete] clear cache table:", tableName) - cacher.ClearIds(tableName) - return nil -} - -// Delete records, bean's non-empty fields are conditions -func (session *Session) Delete(bean interface{}) (int64, error) { - if session.isAutoClose { - defer session.Close() - } - - if err := session.statement.setRefBean(bean); err != nil { - return 0, err - } - - // handle before delete processors - for _, closure := range session.beforeClosures { - closure(bean) - } - cleanupProcessorsClosures(&session.beforeClosures) - - if processor, ok := interface{}(bean).(BeforeDeleteProcessor); ok { - processor.BeforeDelete() - } - - condSQL, condArgs, err := session.statement.genConds(bean) - if err != nil { - return 0, err - } - if len(condSQL) == 0 && session.statement.LimitN == 0 { - return 0, ErrNeedDeletedCond - } - - var tableNameNoQuote = session.statement.TableName() - var tableName = session.engine.Quote(tableNameNoQuote) - var table = session.statement.RefTable - var deleteSQL string - if len(condSQL) > 0 { - deleteSQL = fmt.Sprintf("DELETE FROM %v WHERE %v", tableName, condSQL) - } else { - deleteSQL = fmt.Sprintf("DELETE FROM %v", tableName) - } - - var orderSQL string - if len(session.statement.OrderStr) > 0 { - orderSQL += fmt.Sprintf(" ORDER BY %s", session.statement.OrderStr) - } - if session.statement.LimitN > 0 { - orderSQL += fmt.Sprintf(" LIMIT %d", session.statement.LimitN) - } - - if len(orderSQL) > 0 { - switch session.engine.dialect.DBType() { - case core.POSTGRES: - inSQL := fmt.Sprintf("ctid IN (SELECT ctid FROM %s%s)", tableName, orderSQL) - if len(condSQL) > 0 { - deleteSQL += " AND " + inSQL - } else { - deleteSQL += " WHERE " + inSQL - } - case core.SQLITE: - inSQL := fmt.Sprintf("rowid IN (SELECT rowid FROM %s%s)", tableName, orderSQL) - if len(condSQL) > 0 { - deleteSQL += " AND " + inSQL - } else { - deleteSQL += " WHERE " + inSQL - } - // TODO: how to handle delete limit on mssql? - case core.MSSQL: - return 0, ErrNotImplemented - default: - deleteSQL += orderSQL - } - } - - var realSQL string - argsForCache := make([]interface{}, 0, len(condArgs)*2) - if session.statement.unscoped || table.DeletedColumn() == nil { // tag "deleted" is disabled - realSQL = deleteSQL - copy(argsForCache, condArgs) - argsForCache = append(condArgs, argsForCache...) - } else { - // !oinume! sqlStrForCache and argsForCache is needed to behave as executing "DELETE FROM ..." for cache. - copy(argsForCache, condArgs) - argsForCache = append(condArgs, argsForCache...) - - deletedColumn := table.DeletedColumn() - realSQL = fmt.Sprintf("UPDATE %v SET %v = ? WHERE %v", - session.engine.Quote(session.statement.TableName()), - session.engine.Quote(deletedColumn.Name), - condSQL) - - if len(orderSQL) > 0 { - switch session.engine.dialect.DBType() { - case core.POSTGRES: - inSQL := fmt.Sprintf("ctid IN (SELECT ctid FROM %s%s)", tableName, orderSQL) - if len(condSQL) > 0 { - realSQL += " AND " + inSQL - } else { - realSQL += " WHERE " + inSQL - } - case core.SQLITE: - inSQL := fmt.Sprintf("rowid IN (SELECT rowid FROM %s%s)", tableName, orderSQL) - if len(condSQL) > 0 { - realSQL += " AND " + inSQL - } else { - realSQL += " WHERE " + inSQL - } - // TODO: how to handle delete limit on mssql? - case core.MSSQL: - return 0, ErrNotImplemented - default: - realSQL += orderSQL - } - } - - // !oinume! Insert nowTime to the head of session.statement.Params - condArgs = append(condArgs, "") - paramsLen := len(condArgs) - copy(condArgs[1:paramsLen], condArgs[0:paramsLen-1]) - - val, t := session.engine.nowTime(deletedColumn) - condArgs[0] = val - - var colName = deletedColumn.Name - session.afterClosures = append(session.afterClosures, func(bean interface{}) { - col := table.GetColumn(colName) - setColumnTime(bean, col, t) - }) - } - - if cacher := session.engine.getCacher(tableName); cacher != nil && session.statement.UseCache { - session.cacheDelete(table, tableNameNoQuote, deleteSQL, argsForCache...) - } - - session.statement.RefTable = table - res, err := session.exec(realSQL, condArgs...) - if err != nil { - return 0, err - } - - // handle after delete processors - if session.isAutoCommit { - for _, closure := range session.afterClosures { - closure(bean) - } - if processor, ok := interface{}(bean).(AfterDeleteProcessor); ok { - processor.AfterDelete() - } - } else { - lenAfterClosures := len(session.afterClosures) - if lenAfterClosures > 0 { - if value, has := session.afterDeleteBeans[bean]; has && value != nil { - *value = append(*value, session.afterClosures...) - } else { - afterClosures := make([]func(interface{}), lenAfterClosures) - copy(afterClosures, session.afterClosures) - session.afterDeleteBeans[bean] = &afterClosures - } - } else { - if _, ok := interface{}(bean).(AfterDeleteProcessor); ok { - session.afterDeleteBeans[bean] = nil - } - } - } - cleanupProcessorsClosures(&session.afterClosures) - // -- - - return res.RowsAffected() -} diff --git a/vendor/github.com/go-xorm/xorm/session_exist.go b/vendor/github.com/go-xorm/xorm/session_exist.go deleted file mode 100644 index 74a660e85..000000000 --- a/vendor/github.com/go-xorm/xorm/session_exist.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2017 The Xorm 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 xorm - -import ( - "errors" - "fmt" - "reflect" - - "github.com/go-xorm/builder" - "github.com/go-xorm/core" -) - -// Exist returns true if the record exist otherwise return false -func (session *Session) Exist(bean ...interface{}) (bool, error) { - if session.isAutoClose { - defer session.Close() - } - - var sqlStr string - var args []interface{} - var err error - - if session.statement.RawSQL == "" { - if len(bean) == 0 { - tableName := session.statement.TableName() - if len(tableName) <= 0 { - return false, ErrTableNotFound - } - - if session.statement.cond.IsValid() { - condSQL, condArgs, err := builder.ToSQL(session.statement.cond) - if err != nil { - return false, err - } - - if session.engine.dialect.DBType() == core.MSSQL { - sqlStr = fmt.Sprintf("SELECT top 1 * FROM %s WHERE %s", tableName, condSQL) - } else { - sqlStr = fmt.Sprintf("SELECT * FROM %s WHERE %s LIMIT 1", tableName, condSQL) - } - args = condArgs - } else { - if session.engine.dialect.DBType() == core.MSSQL { - sqlStr = fmt.Sprintf("SELECT top 1 * FROM %s", tableName) - } else { - sqlStr = fmt.Sprintf("SELECT * FROM %s LIMIT 1", tableName) - } - args = []interface{}{} - } - } else { - beanValue := reflect.ValueOf(bean[0]) - if beanValue.Kind() != reflect.Ptr { - return false, errors.New("needs a pointer") - } - - if beanValue.Elem().Kind() == reflect.Struct { - if err := session.statement.setRefBean(bean[0]); err != nil { - return false, err - } - } - - if len(session.statement.TableName()) <= 0 { - return false, ErrTableNotFound - } - session.statement.Limit(1) - sqlStr, args, err = session.statement.genGetSQL(bean[0]) - if err != nil { - return false, err - } - } - } else { - sqlStr = session.statement.RawSQL - args = session.statement.RawParams - } - - rows, err := session.queryRows(sqlStr, args...) - if err != nil { - return false, err - } - defer rows.Close() - - return rows.Next(), nil -} diff --git a/vendor/github.com/go-xorm/xorm/session_find.go b/vendor/github.com/go-xorm/xorm/session_find.go deleted file mode 100644 index 46bbf26c9..000000000 --- a/vendor/github.com/go-xorm/xorm/session_find.go +++ /dev/null @@ -1,499 +0,0 @@ -// Copyright 2016 The Xorm 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 xorm - -import ( - "errors" - "fmt" - "reflect" - "strings" - - "github.com/go-xorm/builder" - "github.com/go-xorm/core" -) - -const ( - tpStruct = iota - tpNonStruct -) - -// Find retrieve records from table, condiBeans's non-empty fields -// are conditions. beans could be []Struct, []*Struct, map[int64]Struct -// map[int64]*Struct -func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{}) error { - if session.isAutoClose { - defer session.Close() - } - return session.find(rowsSlicePtr, condiBean...) -} - -// FindAndCount find the results and also return the counts -func (session *Session) FindAndCount(rowsSlicePtr interface{}, condiBean ...interface{}) (int64, error) { - if session.isAutoClose { - defer session.Close() - } - - session.autoResetStatement = false - err := session.find(rowsSlicePtr, condiBean...) - if err != nil { - return 0, err - } - - sliceValue := reflect.Indirect(reflect.ValueOf(rowsSlicePtr)) - if sliceValue.Kind() != reflect.Slice && sliceValue.Kind() != reflect.Map { - return 0, errors.New("needs a pointer to a slice or a map") - } - - sliceElementType := sliceValue.Type().Elem() - if sliceElementType.Kind() == reflect.Ptr { - sliceElementType = sliceElementType.Elem() - } - session.autoResetStatement = true - - if session.statement.selectStr != "" { - session.statement.selectStr = "" - } - if session.statement.OrderStr != "" { - session.statement.OrderStr = "" - } - - return session.Count(reflect.New(sliceElementType).Interface()) -} - -func (session *Session) find(rowsSlicePtr interface{}, condiBean ...interface{}) error { - sliceValue := reflect.Indirect(reflect.ValueOf(rowsSlicePtr)) - if sliceValue.Kind() != reflect.Slice && sliceValue.Kind() != reflect.Map { - return errors.New("needs a pointer to a slice or a map") - } - - sliceElementType := sliceValue.Type().Elem() - - var tp = tpStruct - if session.statement.RefTable == nil { - if sliceElementType.Kind() == reflect.Ptr { - if sliceElementType.Elem().Kind() == reflect.Struct { - pv := reflect.New(sliceElementType.Elem()) - if err := session.statement.setRefValue(pv); err != nil { - return err - } - } else { - tp = tpNonStruct - } - } else if sliceElementType.Kind() == reflect.Struct { - pv := reflect.New(sliceElementType) - if err := session.statement.setRefValue(pv); err != nil { - return err - } - } else { - tp = tpNonStruct - } - } - - var table = session.statement.RefTable - - var addedTableName = (len(session.statement.JoinStr) > 0) - var autoCond builder.Cond - if tp == tpStruct { - if !session.statement.noAutoCondition && len(condiBean) > 0 { - var err error - autoCond, err = session.statement.buildConds(table, condiBean[0], true, true, false, true, addedTableName) - if err != nil { - return err - } - } else { - // !oinume! Add " IS NULL" to WHERE whatever condiBean is given. - // See https://github.com/go-xorm/xorm/issues/179 - if col := table.DeletedColumn(); col != nil && !session.statement.unscoped { // tag "deleted" is enabled - var colName = session.engine.Quote(col.Name) - if addedTableName { - var nm = session.statement.TableName() - if len(session.statement.TableAlias) > 0 { - nm = session.statement.TableAlias - } - colName = session.engine.Quote(nm) + "." + colName - } - - autoCond = session.engine.CondDeleted(colName) - } - } - } - - var sqlStr string - var args []interface{} - var err error - if session.statement.RawSQL == "" { - if len(session.statement.TableName()) <= 0 { - return ErrTableNotFound - } - - var columnStr = session.statement.ColumnStr - if len(session.statement.selectStr) > 0 { - columnStr = session.statement.selectStr - } else { - if session.statement.JoinStr == "" { - if columnStr == "" { - if session.statement.GroupByStr != "" { - columnStr = session.statement.Engine.Quote(strings.Replace(session.statement.GroupByStr, ",", session.engine.Quote(","), -1)) - } else { - columnStr = session.statement.genColumnStr() - } - } - } else { - if columnStr == "" { - if session.statement.GroupByStr != "" { - columnStr = session.statement.Engine.Quote(strings.Replace(session.statement.GroupByStr, ",", session.engine.Quote(","), -1)) - } else { - columnStr = "*" - } - } - } - if columnStr == "" { - columnStr = "*" - } - } - - session.statement.cond = session.statement.cond.And(autoCond) - condSQL, condArgs, err := builder.ToSQL(session.statement.cond) - if err != nil { - return err - } - - args = append(session.statement.joinArgs, condArgs...) - sqlStr, err = session.statement.genSelectSQL(columnStr, condSQL, true, true) - if err != nil { - return err - } - // for mssql and use limit - qs := strings.Count(sqlStr, "?") - if len(args)*2 == qs { - args = append(args, args...) - } - } else { - sqlStr = session.statement.RawSQL - args = session.statement.RawParams - } - - if session.canCache() { - if cacher := session.engine.getCacher(table.Name); cacher != nil && - !session.statement.IsDistinct && - !session.statement.unscoped { - err = session.cacheFind(sliceElementType, sqlStr, rowsSlicePtr, args...) - if err != ErrCacheFailed { - return err - } - err = nil // !nashtsai! reset err to nil for ErrCacheFailed - session.engine.logger.Warn("Cache Find Failed") - } - } - - return session.noCacheFind(table, sliceValue, sqlStr, args...) -} - -func (session *Session) noCacheFind(table *core.Table, containerValue reflect.Value, sqlStr string, args ...interface{}) error { - rows, err := session.queryRows(sqlStr, args...) - if err != nil { - return err - } - defer rows.Close() - - fields, err := rows.Columns() - if err != nil { - return err - } - - var newElemFunc func(fields []string) reflect.Value - elemType := containerValue.Type().Elem() - var isPointer bool - if elemType.Kind() == reflect.Ptr { - isPointer = true - elemType = elemType.Elem() - } - if elemType.Kind() == reflect.Ptr { - return errors.New("pointer to pointer is not supported") - } - - newElemFunc = func(fields []string) reflect.Value { - switch elemType.Kind() { - case reflect.Slice: - slice := reflect.MakeSlice(elemType, len(fields), len(fields)) - x := reflect.New(slice.Type()) - x.Elem().Set(slice) - return x - case reflect.Map: - mp := reflect.MakeMap(elemType) - x := reflect.New(mp.Type()) - x.Elem().Set(mp) - return x - } - return reflect.New(elemType) - } - - var containerValueSetFunc func(*reflect.Value, core.PK) error - - if containerValue.Kind() == reflect.Slice { - containerValueSetFunc = func(newValue *reflect.Value, pk core.PK) error { - if isPointer { - containerValue.Set(reflect.Append(containerValue, newValue.Elem().Addr())) - } else { - containerValue.Set(reflect.Append(containerValue, newValue.Elem())) - } - return nil - } - } else { - keyType := containerValue.Type().Key() - if len(table.PrimaryKeys) == 0 { - return errors.New("don't support multiple primary key's map has non-slice key type") - } - if len(table.PrimaryKeys) > 1 && keyType.Kind() != reflect.Slice { - return errors.New("don't support multiple primary key's map has non-slice key type") - } - - containerValueSetFunc = func(newValue *reflect.Value, pk core.PK) error { - keyValue := reflect.New(keyType) - err := convertPKToValue(table, keyValue.Interface(), pk) - if err != nil { - return err - } - if isPointer { - containerValue.SetMapIndex(keyValue.Elem(), newValue.Elem().Addr()) - } else { - containerValue.SetMapIndex(keyValue.Elem(), newValue.Elem()) - } - return nil - } - } - - if elemType.Kind() == reflect.Struct { - var newValue = newElemFunc(fields) - dataStruct := rValue(newValue.Interface()) - tb, err := session.engine.autoMapType(dataStruct) - if err != nil { - return err - } - err = session.rows2Beans(rows, fields, tb, newElemFunc, containerValueSetFunc) - rows.Close() - if err != nil { - return err - } - return session.executeProcessors() - } - - for rows.Next() { - var newValue = newElemFunc(fields) - bean := newValue.Interface() - - switch elemType.Kind() { - case reflect.Slice: - err = rows.ScanSlice(bean) - case reflect.Map: - err = rows.ScanMap(bean) - default: - err = rows.Scan(bean) - } - - if err != nil { - return err - } - - if err := containerValueSetFunc(&newValue, nil); err != nil { - return err - } - } - return nil -} - -func convertPKToValue(table *core.Table, dst interface{}, pk core.PK) error { - cols := table.PKColumns() - if len(cols) == 1 { - return convertAssign(dst, pk[0]) - } - - dst = pk - return nil -} - -func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsSlicePtr interface{}, args ...interface{}) (err error) { - if !session.canCache() || - indexNoCase(sqlStr, "having") != -1 || - indexNoCase(sqlStr, "group by") != -1 { - return ErrCacheFailed - } - - tableName := session.statement.TableName() - cacher := session.engine.getCacher(tableName) - if cacher == nil { - return nil - } - - for _, filter := range session.engine.dialect.Filters() { - sqlStr = filter.Do(sqlStr, session.engine.dialect, session.statement.RefTable) - } - - newsql := session.statement.convertIDSQL(sqlStr) - if newsql == "" { - return ErrCacheFailed - } - - table := session.statement.RefTable - ids, err := core.GetCacheSql(cacher, tableName, newsql, args) - if err != nil { - rows, err := session.queryRows(newsql, args...) - if err != nil { - return err - } - defer rows.Close() - - var i int - ids = make([]core.PK, 0) - for rows.Next() { - i++ - if i > 500 { - session.engine.logger.Debug("[cacheFind] ids length > 500, no cache") - return ErrCacheFailed - } - var res = make([]string, len(table.PrimaryKeys)) - err = rows.ScanSlice(&res) - if err != nil { - return err - } - var pk core.PK = make([]interface{}, len(table.PrimaryKeys)) - for i, col := range table.PKColumns() { - pk[i], err = session.engine.idTypeAssertion(col, res[i]) - if err != nil { - return err - } - } - - ids = append(ids, pk) - } - - session.engine.logger.Debug("[cacheFind] cache sql:", ids, tableName, sqlStr, newsql, args) - err = core.PutCacheSql(cacher, ids, tableName, newsql, args) - if err != nil { - return err - } - } else { - session.engine.logger.Debug("[cacheFind] cache hit sql:", tableName, sqlStr, newsql, args) - } - - sliceValue := reflect.Indirect(reflect.ValueOf(rowsSlicePtr)) - - ididxes := make(map[string]int) - var ides []core.PK - var temps = make([]interface{}, len(ids)) - - for idx, id := range ids { - sid, err := id.ToString() - if err != nil { - return err - } - bean := cacher.GetBean(tableName, sid) - if bean == nil || reflect.ValueOf(bean).Elem().Type() != t { - ides = append(ides, id) - ididxes[sid] = idx - } else { - session.engine.logger.Debug("[cacheFind] cache hit bean:", tableName, id, bean) - - pk := session.engine.IdOf(bean) - xid, err := pk.ToString() - if err != nil { - return err - } - - if sid != xid { - session.engine.logger.Error("[cacheFind] error cache", xid, sid, bean) - return ErrCacheFailed - } - temps[idx] = bean - } - } - - if len(ides) > 0 { - slices := reflect.New(reflect.SliceOf(t)) - beans := slices.Interface() - - if len(table.PrimaryKeys) == 1 { - ff := make([]interface{}, 0, len(ides)) - for _, ie := range ides { - ff = append(ff, ie[0]) - } - - session.In("`"+table.PrimaryKeys[0]+"`", ff...) - } else { - for _, ie := range ides { - cond := builder.NewCond() - for i, name := range table.PrimaryKeys { - cond = cond.And(builder.Eq{"`" + name + "`": ie[i]}) - } - session.Or(cond) - } - } - - err = session.NoCache().Table(tableName).find(beans) - if err != nil { - return err - } - - vs := reflect.Indirect(reflect.ValueOf(beans)) - for i := 0; i < vs.Len(); i++ { - rv := vs.Index(i) - if rv.Kind() != reflect.Ptr { - rv = rv.Addr() - } - id, err := session.engine.idOfV(rv) - if err != nil { - return err - } - sid, err := id.ToString() - if err != nil { - return err - } - - bean := rv.Interface() - temps[ididxes[sid]] = bean - session.engine.logger.Debug("[cacheFind] cache bean:", tableName, id, bean, temps) - cacher.PutBean(tableName, sid, bean) - } - } - - for j := 0; j < len(temps); j++ { - bean := temps[j] - if bean == nil { - session.engine.logger.Warn("[cacheFind] cache no hit:", tableName, ids[j], temps) - // return errors.New("cache error") // !nashtsai! no need to return error, but continue instead - continue - } - if sliceValue.Kind() == reflect.Slice { - if t.Kind() == reflect.Ptr { - sliceValue.Set(reflect.Append(sliceValue, reflect.ValueOf(bean))) - } else { - sliceValue.Set(reflect.Append(sliceValue, reflect.Indirect(reflect.ValueOf(bean)))) - } - } else if sliceValue.Kind() == reflect.Map { - var key = ids[j] - keyType := sliceValue.Type().Key() - var ikey interface{} - if len(key) == 1 { - ikey, err = str2PK(fmt.Sprintf("%v", key[0]), keyType) - if err != nil { - return err - } - } else { - if keyType.Kind() != reflect.Slice { - return errors.New("table have multiple primary keys, key is not core.PK or slice") - } - ikey = key - } - - if t.Kind() == reflect.Ptr { - sliceValue.SetMapIndex(reflect.ValueOf(ikey), reflect.ValueOf(bean)) - } else { - sliceValue.SetMapIndex(reflect.ValueOf(ikey), reflect.Indirect(reflect.ValueOf(bean))) - } - } - } - - return nil -} diff --git a/vendor/github.com/go-xorm/xorm/session_get.go b/vendor/github.com/go-xorm/xorm/session_get.go deleted file mode 100644 index 3b2c9493c..000000000 --- a/vendor/github.com/go-xorm/xorm/session_get.go +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright 2016 The Xorm 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 xorm - -import ( - "database/sql" - "errors" - "reflect" - "strconv" - - "github.com/go-xorm/core" -) - -// Get retrieve one record from database, bean's non-empty fields -// will be as conditions -func (session *Session) Get(bean interface{}) (bool, error) { - if session.isAutoClose { - defer session.Close() - } - return session.get(bean) -} - -func (session *Session) get(bean interface{}) (bool, error) { - beanValue := reflect.ValueOf(bean) - if beanValue.Kind() != reflect.Ptr { - return false, errors.New("needs a pointer to a value") - } else if beanValue.Elem().Kind() == reflect.Ptr { - return false, errors.New("a pointer to a pointer is not allowed") - } - - if beanValue.Elem().Kind() == reflect.Struct { - if err := session.statement.setRefBean(bean); err != nil { - return false, err - } - } - - var sqlStr string - var args []interface{} - var err error - - if session.statement.RawSQL == "" { - if len(session.statement.TableName()) <= 0 { - return false, ErrTableNotFound - } - session.statement.Limit(1) - sqlStr, args, err = session.statement.genGetSQL(bean) - if err != nil { - return false, err - } - } else { - sqlStr = session.statement.RawSQL - args = session.statement.RawParams - } - - table := session.statement.RefTable - - if session.canCache() && beanValue.Elem().Kind() == reflect.Struct { - if cacher := session.engine.getCacher(table.Name); cacher != nil && - !session.statement.unscoped { - has, err := session.cacheGet(bean, sqlStr, args...) - if err != ErrCacheFailed { - return has, err - } - } - } - - return session.nocacheGet(beanValue.Elem().Kind(), table, bean, sqlStr, args...) -} - -func (session *Session) nocacheGet(beanKind reflect.Kind, table *core.Table, bean interface{}, sqlStr string, args ...interface{}) (bool, error) { - rows, err := session.queryRows(sqlStr, args...) - if err != nil { - return false, err - } - defer rows.Close() - - if !rows.Next() { - return false, nil - } - - switch bean.(type) { - case sql.NullInt64, sql.NullBool, sql.NullFloat64, sql.NullString: - return true, rows.Scan(&bean) - case *sql.NullInt64, *sql.NullBool, *sql.NullFloat64, *sql.NullString: - return true, rows.Scan(bean) - } - - switch beanKind { - case reflect.Struct: - fields, err := rows.Columns() - if err != nil { - // WARN: Alougth rows return true, but get fields failed - return true, err - } - - scanResults, err := session.row2Slice(rows, fields, bean) - if err != nil { - return false, err - } - // close it before covert data - rows.Close() - - dataStruct := rValue(bean) - _, err = session.slice2Bean(scanResults, fields, bean, &dataStruct, table) - if err != nil { - return true, err - } - - return true, session.executeProcessors() - case reflect.Slice: - err = rows.ScanSlice(bean) - case reflect.Map: - err = rows.ScanMap(bean) - default: - err = rows.Scan(bean) - } - - return true, err -} - -func (session *Session) cacheGet(bean interface{}, sqlStr string, args ...interface{}) (has bool, err error) { - // if has no reftable, then don't use cache currently - if !session.canCache() { - return false, ErrCacheFailed - } - - for _, filter := range session.engine.dialect.Filters() { - sqlStr = filter.Do(sqlStr, session.engine.dialect, session.statement.RefTable) - } - newsql := session.statement.convertIDSQL(sqlStr) - if newsql == "" { - return false, ErrCacheFailed - } - - tableName := session.statement.TableName() - cacher := session.engine.getCacher(tableName) - - session.engine.logger.Debug("[cacheGet] find sql:", newsql, args) - table := session.statement.RefTable - ids, err := core.GetCacheSql(cacher, tableName, newsql, args) - if err != nil { - var res = make([]string, len(table.PrimaryKeys)) - rows, err := session.NoCache().queryRows(newsql, args...) - if err != nil { - return false, err - } - defer rows.Close() - - if rows.Next() { - err = rows.ScanSlice(&res) - if err != nil { - return false, err - } - } else { - return false, ErrCacheFailed - } - - var pk core.PK = make([]interface{}, len(table.PrimaryKeys)) - for i, col := range table.PKColumns() { - if col.SQLType.IsText() { - pk[i] = res[i] - } else if col.SQLType.IsNumeric() { - n, err := strconv.ParseInt(res[i], 10, 64) - if err != nil { - return false, err - } - pk[i] = n - } else { - return false, errors.New("unsupported") - } - } - - ids = []core.PK{pk} - session.engine.logger.Debug("[cacheGet] cache ids:", newsql, ids) - err = core.PutCacheSql(cacher, ids, tableName, newsql, args) - if err != nil { - return false, err - } - } else { - session.engine.logger.Debug("[cacheGet] cache hit sql:", newsql, ids) - } - - if len(ids) > 0 { - structValue := reflect.Indirect(reflect.ValueOf(bean)) - id := ids[0] - session.engine.logger.Debug("[cacheGet] get bean:", tableName, id) - sid, err := id.ToString() - if err != nil { - return false, err - } - cacheBean := cacher.GetBean(tableName, sid) - if cacheBean == nil { - cacheBean = bean - has, err = session.nocacheGet(reflect.Struct, table, cacheBean, sqlStr, args...) - if err != nil || !has { - return has, err - } - - session.engine.logger.Debug("[cacheGet] cache bean:", tableName, id, cacheBean) - cacher.PutBean(tableName, sid, cacheBean) - } else { - session.engine.logger.Debug("[cacheGet] cache hit bean:", tableName, id, cacheBean) - has = true - } - structValue.Set(reflect.Indirect(reflect.ValueOf(cacheBean))) - - return has, nil - } - return false, nil -} diff --git a/vendor/github.com/go-xorm/xorm/session_insert.go b/vendor/github.com/go-xorm/xorm/session_insert.go deleted file mode 100644 index c1182fe64..000000000 --- a/vendor/github.com/go-xorm/xorm/session_insert.go +++ /dev/null @@ -1,626 +0,0 @@ -// Copyright 2016 The Xorm 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 xorm - -import ( - "errors" - "fmt" - "reflect" - "strconv" - "strings" - - "github.com/go-xorm/core" -) - -// Insert insert one or more beans -func (session *Session) Insert(beans ...interface{}) (int64, error) { - var affected int64 - var err error - - if session.isAutoClose { - defer session.Close() - } - - for _, bean := range beans { - sliceValue := reflect.Indirect(reflect.ValueOf(bean)) - if sliceValue.Kind() == reflect.Slice { - size := sliceValue.Len() - if size > 0 { - if session.engine.SupportInsertMany() { - cnt, err := session.innerInsertMulti(bean) - if err != nil { - return affected, err - } - affected += cnt - } else { - for i := 0; i < size; i++ { - cnt, err := session.innerInsert(sliceValue.Index(i).Interface()) - if err != nil { - return affected, err - } - affected += cnt - } - } - } - } else { - cnt, err := session.innerInsert(bean) - if err != nil { - return affected, err - } - affected += cnt - } - } - - return affected, err -} - -func (session *Session) innerInsertMulti(rowsSlicePtr interface{}) (int64, error) { - sliceValue := reflect.Indirect(reflect.ValueOf(rowsSlicePtr)) - if sliceValue.Kind() != reflect.Slice { - return 0, errors.New("needs a pointer to a slice") - } - - if sliceValue.Len() <= 0 { - return 0, errors.New("could not insert a empty slice") - } - - if err := session.statement.setRefBean(sliceValue.Index(0).Interface()); err != nil { - return 0, err - } - - tableName := session.statement.TableName() - if len(tableName) <= 0 { - return 0, ErrTableNotFound - } - - table := session.statement.RefTable - size := sliceValue.Len() - - var colNames []string - var colMultiPlaces []string - var args []interface{} - var cols []*core.Column - - for i := 0; i < size; i++ { - v := sliceValue.Index(i) - vv := reflect.Indirect(v) - elemValue := v.Interface() - var colPlaces []string - - // handle BeforeInsertProcessor - // !nashtsai! does user expect it's same slice to passed closure when using Before()/After() when insert multi?? - for _, closure := range session.beforeClosures { - closure(elemValue) - } - - if processor, ok := interface{}(elemValue).(BeforeInsertProcessor); ok { - processor.BeforeInsert() - } - // -- - - if i == 0 { - for _, col := range table.Columns() { - ptrFieldValue, err := col.ValueOfV(&vv) - if err != nil { - return 0, err - } - fieldValue := *ptrFieldValue - if col.IsAutoIncrement && isZero(fieldValue.Interface()) { - continue - } - if col.MapType == core.ONLYFROMDB { - continue - } - if col.IsDeleted { - continue - } - if session.statement.omitColumnMap.contain(col.Name) { - continue - } - if len(session.statement.columnMap) > 0 && !session.statement.columnMap.contain(col.Name) { - continue - } - if (col.IsCreated || col.IsUpdated) && session.statement.UseAutoTime { - val, t := session.engine.nowTime(col) - args = append(args, val) - - var colName = col.Name - session.afterClosures = append(session.afterClosures, func(bean interface{}) { - col := table.GetColumn(colName) - setColumnTime(bean, col, t) - }) - } else if col.IsVersion && session.statement.checkVersion { - args = append(args, 1) - var colName = col.Name - session.afterClosures = append(session.afterClosures, func(bean interface{}) { - col := table.GetColumn(colName) - setColumnInt(bean, col, 1) - }) - } else { - arg, err := session.value2Interface(col, fieldValue) - if err != nil { - return 0, err - } - args = append(args, arg) - } - - colNames = append(colNames, col.Name) - cols = append(cols, col) - colPlaces = append(colPlaces, "?") - } - } else { - for _, col := range cols { - ptrFieldValue, err := col.ValueOfV(&vv) - if err != nil { - return 0, err - } - fieldValue := *ptrFieldValue - - if col.IsAutoIncrement && isZero(fieldValue.Interface()) { - continue - } - if col.MapType == core.ONLYFROMDB { - continue - } - if col.IsDeleted { - continue - } - if session.statement.omitColumnMap.contain(col.Name) { - continue - } - if len(session.statement.columnMap) > 0 && !session.statement.columnMap.contain(col.Name) { - continue - } - if (col.IsCreated || col.IsUpdated) && session.statement.UseAutoTime { - val, t := session.engine.nowTime(col) - args = append(args, val) - - var colName = col.Name - session.afterClosures = append(session.afterClosures, func(bean interface{}) { - col := table.GetColumn(colName) - setColumnTime(bean, col, t) - }) - } else if col.IsVersion && session.statement.checkVersion { - args = append(args, 1) - var colName = col.Name - session.afterClosures = append(session.afterClosures, func(bean interface{}) { - col := table.GetColumn(colName) - setColumnInt(bean, col, 1) - }) - } else { - arg, err := session.value2Interface(col, fieldValue) - if err != nil { - return 0, err - } - args = append(args, arg) - } - - colPlaces = append(colPlaces, "?") - } - } - colMultiPlaces = append(colMultiPlaces, strings.Join(colPlaces, ", ")) - } - cleanupProcessorsClosures(&session.beforeClosures) - - var sql = "INSERT INTO %s (%v%v%v) VALUES (%v)" - var statement string - if session.engine.dialect.DBType() == core.ORACLE { - sql = "INSERT ALL INTO %s (%v%v%v) VALUES (%v) SELECT 1 FROM DUAL" - temp := fmt.Sprintf(") INTO %s (%v%v%v) VALUES (", - session.engine.Quote(tableName), - session.engine.QuoteStr(), - strings.Join(colNames, session.engine.QuoteStr()+", "+session.engine.QuoteStr()), - session.engine.QuoteStr()) - statement = fmt.Sprintf(sql, - session.engine.Quote(tableName), - session.engine.QuoteStr(), - strings.Join(colNames, session.engine.QuoteStr()+", "+session.engine.QuoteStr()), - session.engine.QuoteStr(), - strings.Join(colMultiPlaces, temp)) - } else { - statement = fmt.Sprintf(sql, - session.engine.Quote(tableName), - session.engine.QuoteStr(), - strings.Join(colNames, session.engine.QuoteStr()+", "+session.engine.QuoteStr()), - session.engine.QuoteStr(), - strings.Join(colMultiPlaces, "),(")) - } - res, err := session.exec(statement, args...) - if err != nil { - return 0, err - } - - session.cacheInsert(tableName) - - lenAfterClosures := len(session.afterClosures) - for i := 0; i < size; i++ { - elemValue := reflect.Indirect(sliceValue.Index(i)).Addr().Interface() - - // handle AfterInsertProcessor - if session.isAutoCommit { - // !nashtsai! does user expect it's same slice to passed closure when using Before()/After() when insert multi?? - for _, closure := range session.afterClosures { - closure(elemValue) - } - if processor, ok := interface{}(elemValue).(AfterInsertProcessor); ok { - processor.AfterInsert() - } - } else { - if lenAfterClosures > 0 { - if value, has := session.afterInsertBeans[elemValue]; has && value != nil { - *value = append(*value, session.afterClosures...) - } else { - afterClosures := make([]func(interface{}), lenAfterClosures) - copy(afterClosures, session.afterClosures) - session.afterInsertBeans[elemValue] = &afterClosures - } - } else { - if _, ok := interface{}(elemValue).(AfterInsertProcessor); ok { - session.afterInsertBeans[elemValue] = nil - } - } - } - } - - cleanupProcessorsClosures(&session.afterClosures) - return res.RowsAffected() -} - -// InsertMulti insert multiple records -func (session *Session) InsertMulti(rowsSlicePtr interface{}) (int64, error) { - if session.isAutoClose { - defer session.Close() - } - - sliceValue := reflect.Indirect(reflect.ValueOf(rowsSlicePtr)) - if sliceValue.Kind() != reflect.Slice { - return 0, ErrParamsType - - } - - if sliceValue.Len() <= 0 { - return 0, nil - } - - return session.innerInsertMulti(rowsSlicePtr) -} - -func (session *Session) innerInsert(bean interface{}) (int64, error) { - if err := session.statement.setRefBean(bean); err != nil { - return 0, err - } - if len(session.statement.TableName()) <= 0 { - return 0, ErrTableNotFound - } - - table := session.statement.RefTable - - // handle BeforeInsertProcessor - for _, closure := range session.beforeClosures { - closure(bean) - } - cleanupProcessorsClosures(&session.beforeClosures) // cleanup after used - - if processor, ok := interface{}(bean).(BeforeInsertProcessor); ok { - processor.BeforeInsert() - } - - colNames, args, err := session.genInsertColumns(bean) - if err != nil { - return 0, err - } - // insert expr columns, override if exists - exprColumns := session.statement.getExpr() - exprColVals := make([]string, 0, len(exprColumns)) - for _, v := range exprColumns { - // remove the expr columns - for i, colName := range colNames { - if colName == v.colName { - colNames = append(colNames[:i], colNames[i+1:]...) - args = append(args[:i], args[i+1:]...) - } - } - - // append expr column to the end - colNames = append(colNames, v.colName) - exprColVals = append(exprColVals, v.expr) - } - - colPlaces := strings.Repeat("?, ", len(colNames)-len(exprColumns)) - if len(exprColVals) > 0 { - colPlaces = colPlaces + strings.Join(exprColVals, ", ") - } else { - if len(colPlaces) > 0 { - colPlaces = colPlaces[0 : len(colPlaces)-2] - } - } - - var sqlStr string - var tableName = session.statement.TableName() - if len(colPlaces) > 0 { - sqlStr = fmt.Sprintf("INSERT INTO %s (%v%v%v) VALUES (%v)", - session.engine.Quote(tableName), - session.engine.QuoteStr(), - strings.Join(colNames, session.engine.Quote(", ")), - session.engine.QuoteStr(), - colPlaces) - } else { - if session.engine.dialect.DBType() == core.MYSQL { - sqlStr = fmt.Sprintf("INSERT INTO %s VALUES ()", session.engine.Quote(tableName)) - } else { - sqlStr = fmt.Sprintf("INSERT INTO %s DEFAULT VALUES", session.engine.Quote(tableName)) - } - } - - handleAfterInsertProcessorFunc := func(bean interface{}) { - if session.isAutoCommit { - for _, closure := range session.afterClosures { - closure(bean) - } - if processor, ok := interface{}(bean).(AfterInsertProcessor); ok { - processor.AfterInsert() - } - } else { - lenAfterClosures := len(session.afterClosures) - if lenAfterClosures > 0 { - if value, has := session.afterInsertBeans[bean]; has && value != nil { - *value = append(*value, session.afterClosures...) - } else { - afterClosures := make([]func(interface{}), lenAfterClosures) - copy(afterClosures, session.afterClosures) - session.afterInsertBeans[bean] = &afterClosures - } - - } else { - if _, ok := interface{}(bean).(AfterInsertProcessor); ok { - session.afterInsertBeans[bean] = nil - } - } - } - cleanupProcessorsClosures(&session.afterClosures) // cleanup after used - } - - // for postgres, many of them didn't implement lastInsertId, so we should - // implemented it ourself. - if session.engine.dialect.DBType() == core.ORACLE && len(table.AutoIncrement) > 0 { - res, err := session.queryBytes("select seq_atable.currval from dual", args...) - if err != nil { - return 0, err - } - - defer handleAfterInsertProcessorFunc(bean) - - session.cacheInsert(tableName) - - if table.Version != "" && session.statement.checkVersion { - verValue, err := table.VersionColumn().ValueOf(bean) - if err != nil { - session.engine.logger.Error(err) - } else if verValue.IsValid() && verValue.CanSet() { - verValue.SetInt(1) - } - } - - if len(res) < 1 { - return 0, errors.New("insert no error but not returned id") - } - - idByte := res[0][table.AutoIncrement] - id, err := strconv.ParseInt(string(idByte), 10, 64) - if err != nil || id <= 0 { - return 1, err - } - - aiValue, err := table.AutoIncrColumn().ValueOf(bean) - if err != nil { - session.engine.logger.Error(err) - } - - if aiValue == nil || !aiValue.IsValid() || !aiValue.CanSet() { - return 1, nil - } - - aiValue.Set(int64ToIntValue(id, aiValue.Type())) - - return 1, nil - } else if session.engine.dialect.DBType() == core.POSTGRES && len(table.AutoIncrement) > 0 { - //assert table.AutoIncrement != "" - sqlStr = sqlStr + " RETURNING " + session.engine.Quote(table.AutoIncrement) - res, err := session.queryBytes(sqlStr, args...) - - if err != nil { - return 0, err - } - defer handleAfterInsertProcessorFunc(bean) - - session.cacheInsert(tableName) - - if table.Version != "" && session.statement.checkVersion { - verValue, err := table.VersionColumn().ValueOf(bean) - if err != nil { - session.engine.logger.Error(err) - } else if verValue.IsValid() && verValue.CanSet() { - verValue.SetInt(1) - } - } - - if len(res) < 1 { - return 0, errors.New("insert no error but not returned id") - } - - idByte := res[0][table.AutoIncrement] - id, err := strconv.ParseInt(string(idByte), 10, 64) - if err != nil || id <= 0 { - return 1, err - } - - aiValue, err := table.AutoIncrColumn().ValueOf(bean) - if err != nil { - session.engine.logger.Error(err) - } - - if aiValue == nil || !aiValue.IsValid() || !aiValue.CanSet() { - return 1, nil - } - - aiValue.Set(int64ToIntValue(id, aiValue.Type())) - - return 1, nil - } else { - res, err := session.exec(sqlStr, args...) - if err != nil { - return 0, err - } - - defer handleAfterInsertProcessorFunc(bean) - - session.cacheInsert(tableName) - - if table.Version != "" && session.statement.checkVersion { - verValue, err := table.VersionColumn().ValueOf(bean) - if err != nil { - session.engine.logger.Error(err) - } else if verValue.IsValid() && verValue.CanSet() { - verValue.SetInt(1) - } - } - - if table.AutoIncrement == "" { - return res.RowsAffected() - } - - var id int64 - id, err = res.LastInsertId() - if err != nil || id <= 0 { - return res.RowsAffected() - } - - aiValue, err := table.AutoIncrColumn().ValueOf(bean) - if err != nil { - session.engine.logger.Error(err) - } - - if aiValue == nil || !aiValue.IsValid() || !aiValue.CanSet() { - return res.RowsAffected() - } - - aiValue.Set(int64ToIntValue(id, aiValue.Type())) - - return res.RowsAffected() - } -} - -// InsertOne insert only one struct into database as a record. -// The in parameter bean must a struct or a point to struct. The return -// parameter is inserted and error -func (session *Session) InsertOne(bean interface{}) (int64, error) { - if session.isAutoClose { - defer session.Close() - } - - return session.innerInsert(bean) -} - -func (session *Session) cacheInsert(table string) error { - if !session.statement.UseCache { - return nil - } - cacher := session.engine.getCacher(table) - if cacher == nil { - return nil - } - session.engine.logger.Debug("[cache] clear sql:", table) - cacher.ClearIds(table) - return nil -} - -// genInsertColumns generates insert needed columns -func (session *Session) genInsertColumns(bean interface{}) ([]string, []interface{}, error) { - table := session.statement.RefTable - colNames := make([]string, 0, len(table.ColumnsSeq())) - args := make([]interface{}, 0, len(table.ColumnsSeq())) - - for _, col := range table.Columns() { - if col.MapType == core.ONLYFROMDB { - continue - } - - if col.IsDeleted { - continue - } - - if session.statement.omitColumnMap.contain(col.Name) { - continue - } - - if len(session.statement.columnMap) > 0 && !session.statement.columnMap.contain(col.Name) { - continue - } - - if _, ok := session.statement.incrColumns[col.Name]; ok { - continue - } else if _, ok := session.statement.decrColumns[col.Name]; ok { - continue - } - - fieldValuePtr, err := col.ValueOf(bean) - if err != nil { - return nil, nil, err - } - fieldValue := *fieldValuePtr - - if col.IsAutoIncrement { - switch fieldValue.Type().Kind() { - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int, reflect.Int64: - if fieldValue.Int() == 0 { - continue - } - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint, reflect.Uint64: - if fieldValue.Uint() == 0 { - continue - } - case reflect.String: - if len(fieldValue.String()) == 0 { - continue - } - case reflect.Ptr: - if fieldValue.Pointer() == 0 { - continue - } - } - } - - // !evalphobia! set fieldValue as nil when column is nullable and zero-value - if _, ok := getFlagForColumn(session.statement.nullableMap, col); ok { - if col.Nullable && isZero(fieldValue.Interface()) { - var nilValue *int - fieldValue = reflect.ValueOf(nilValue) - } - } - - if (col.IsCreated || col.IsUpdated) && session.statement.UseAutoTime /*&& isZero(fieldValue.Interface())*/ { - // if time is non-empty, then set to auto time - val, t := session.engine.nowTime(col) - args = append(args, val) - - var colName = col.Name - session.afterClosures = append(session.afterClosures, func(bean interface{}) { - col := table.GetColumn(colName) - setColumnTime(bean, col, t) - }) - } else if col.IsVersion && session.statement.checkVersion { - args = append(args, 1) - } else { - arg, err := session.value2Interface(col, fieldValue) - if err != nil { - return colNames, args, err - } - args = append(args, arg) - } - - colNames = append(colNames, col.Name) - } - return colNames, args, nil -} diff --git a/vendor/github.com/go-xorm/xorm/session_iterate.go b/vendor/github.com/go-xorm/xorm/session_iterate.go deleted file mode 100644 index 071fce499..000000000 --- a/vendor/github.com/go-xorm/xorm/session_iterate.go +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2016 The Xorm 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 xorm - -import "reflect" - -// IterFunc only use by Iterate -type IterFunc func(idx int, bean interface{}) error - -// Rows return sql.Rows compatible Rows obj, as a forward Iterator object for iterating record by record, bean's non-empty fields -// are conditions. -func (session *Session) Rows(bean interface{}) (*Rows, error) { - return newRows(session, bean) -} - -// Iterate record by record handle records from table, condiBeans's non-empty fields -// are conditions. beans could be []Struct, []*Struct, map[int64]Struct -// map[int64]*Struct -func (session *Session) Iterate(bean interface{}, fun IterFunc) error { - if session.isAutoClose { - defer session.Close() - } - - if session.statement.bufferSize > 0 { - return session.bufferIterate(bean, fun) - } - - rows, err := session.Rows(bean) - if err != nil { - return err - } - defer rows.Close() - - i := 0 - for rows.Next() { - b := reflect.New(rows.beanType).Interface() - err = rows.Scan(b) - if err != nil { - return err - } - err = fun(i, b) - if err != nil { - return err - } - i++ - } - return err -} - -// BufferSize sets the buffersize for iterate -func (session *Session) BufferSize(size int) *Session { - session.statement.bufferSize = size - return session -} - -func (session *Session) bufferIterate(bean interface{}, fun IterFunc) error { - if session.isAutoClose { - defer session.Close() - } - - var bufferSize = session.statement.bufferSize - var limit = session.statement.LimitN - if limit > 0 && bufferSize > limit { - bufferSize = limit - } - var start = session.statement.Start - v := rValue(bean) - sliceType := reflect.SliceOf(v.Type()) - var idx = 0 - for { - slice := reflect.New(sliceType) - if err := session.Limit(bufferSize, start).find(slice.Interface(), bean); err != nil { - return err - } - - for i := 0; i < slice.Elem().Len(); i++ { - if err := fun(idx, slice.Elem().Index(i).Addr().Interface()); err != nil { - return err - } - idx++ - } - - start = start + slice.Elem().Len() - if limit > 0 && idx+bufferSize > limit { - bufferSize = limit - idx - } - - if bufferSize <= 0 || slice.Elem().Len() < bufferSize || idx == limit { - break - } - } - - return nil -} diff --git a/vendor/github.com/go-xorm/xorm/session_query.go b/vendor/github.com/go-xorm/xorm/session_query.go deleted file mode 100644 index 5c9aeb391..000000000 --- a/vendor/github.com/go-xorm/xorm/session_query.go +++ /dev/null @@ -1,266 +0,0 @@ -// Copyright 2017 The Xorm 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 xorm - -import ( - "fmt" - "reflect" - "strconv" - "strings" - "time" - - "github.com/go-xorm/builder" - "github.com/go-xorm/core" -) - -func (session *Session) genQuerySQL(sqlorArgs ...interface{}) (string, []interface{}, error) { - if len(sqlorArgs) > 0 { - switch sqlorArgs[0].(type) { - case string: - return sqlorArgs[0].(string), sqlorArgs[1:], nil - case *builder.Builder: - return sqlorArgs[0].(*builder.Builder).ToSQL() - case builder.Builder: - bd := sqlorArgs[0].(builder.Builder) - return bd.ToSQL() - default: - return "", nil, ErrUnSupportedType - } - } - - if session.statement.RawSQL != "" { - return session.statement.RawSQL, session.statement.RawParams, nil - } - - if len(session.statement.TableName()) <= 0 { - return "", nil, ErrTableNotFound - } - - var columnStr = session.statement.ColumnStr - if len(session.statement.selectStr) > 0 { - columnStr = session.statement.selectStr - } else { - if session.statement.JoinStr == "" { - if columnStr == "" { - if session.statement.GroupByStr != "" { - columnStr = session.statement.Engine.Quote(strings.Replace(session.statement.GroupByStr, ",", session.engine.Quote(","), -1)) - } else { - columnStr = session.statement.genColumnStr() - } - } - } else { - if columnStr == "" { - if session.statement.GroupByStr != "" { - columnStr = session.statement.Engine.Quote(strings.Replace(session.statement.GroupByStr, ",", session.engine.Quote(","), -1)) - } else { - columnStr = "*" - } - } - } - if columnStr == "" { - columnStr = "*" - } - } - - if err := session.statement.processIDParam(); err != nil { - return "", nil, err - } - - condSQL, condArgs, err := builder.ToSQL(session.statement.cond) - if err != nil { - return "", nil, err - } - - args := append(session.statement.joinArgs, condArgs...) - sqlStr, err := session.statement.genSelectSQL(columnStr, condSQL, true, true) - if err != nil { - return "", nil, err - } - // for mssql and use limit - qs := strings.Count(sqlStr, "?") - if len(args)*2 == qs { - args = append(args, args...) - } - - return sqlStr, args, nil -} - -// Query runs a raw sql and return records as []map[string][]byte -func (session *Session) Query(sqlorArgs ...interface{}) ([]map[string][]byte, error) { - if session.isAutoClose { - defer session.Close() - } - - sqlStr, args, err := session.genQuerySQL(sqlorArgs...) - if err != nil { - return nil, err - } - - return session.queryBytes(sqlStr, args...) -} - -func value2String(rawValue *reflect.Value) (str string, err error) { - aa := reflect.TypeOf((*rawValue).Interface()) - vv := reflect.ValueOf((*rawValue).Interface()) - switch aa.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - str = strconv.FormatInt(vv.Int(), 10) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - str = strconv.FormatUint(vv.Uint(), 10) - case reflect.Float32, reflect.Float64: - str = strconv.FormatFloat(vv.Float(), 'f', -1, 64) - case reflect.String: - str = vv.String() - case reflect.Array, reflect.Slice: - switch aa.Elem().Kind() { - case reflect.Uint8: - data := rawValue.Interface().([]byte) - str = string(data) - if str == "\x00" { - str = "0" - } - default: - err = fmt.Errorf("Unsupported struct type %v", vv.Type().Name()) - } - // time type - case reflect.Struct: - if aa.ConvertibleTo(core.TimeType) { - str = vv.Convert(core.TimeType).Interface().(time.Time).Format(time.RFC3339Nano) - } else { - err = fmt.Errorf("Unsupported struct type %v", vv.Type().Name()) - } - case reflect.Bool: - str = strconv.FormatBool(vv.Bool()) - case reflect.Complex128, reflect.Complex64: - str = fmt.Sprintf("%v", vv.Complex()) - /* TODO: unsupported types below - case reflect.Map: - case reflect.Ptr: - case reflect.Uintptr: - case reflect.UnsafePointer: - case reflect.Chan, reflect.Func, reflect.Interface: - */ - default: - err = fmt.Errorf("Unsupported struct type %v", vv.Type().Name()) - } - return -} - -func row2mapStr(rows *core.Rows, fields []string) (resultsMap map[string]string, err error) { - result := make(map[string]string) - scanResultContainers := make([]interface{}, len(fields)) - for i := 0; i < len(fields); i++ { - var scanResultContainer interface{} - scanResultContainers[i] = &scanResultContainer - } - if err := rows.Scan(scanResultContainers...); err != nil { - return nil, err - } - - for ii, key := range fields { - rawValue := reflect.Indirect(reflect.ValueOf(scanResultContainers[ii])) - // if row is null then as empty string - if rawValue.Interface() == nil { - result[key] = "" - continue - } - - if data, err := value2String(&rawValue); err == nil { - result[key] = data - } else { - return nil, err - } - } - return result, nil -} - -func rows2Strings(rows *core.Rows) (resultsSlice []map[string]string, err error) { - fields, err := rows.Columns() - if err != nil { - return nil, err - } - for rows.Next() { - result, err := row2mapStr(rows, fields) - if err != nil { - return nil, err - } - resultsSlice = append(resultsSlice, result) - } - - return resultsSlice, nil -} - -// QueryString runs a raw sql and return records as []map[string]string -func (session *Session) QueryString(sqlorArgs ...interface{}) ([]map[string]string, error) { - if session.isAutoClose { - defer session.Close() - } - - sqlStr, args, err := session.genQuerySQL(sqlorArgs...) - if err != nil { - return nil, err - } - - rows, err := session.queryRows(sqlStr, args...) - if err != nil { - return nil, err - } - defer rows.Close() - - return rows2Strings(rows) -} - -func row2mapInterface(rows *core.Rows, fields []string) (resultsMap map[string]interface{}, err error) { - resultsMap = make(map[string]interface{}, len(fields)) - scanResultContainers := make([]interface{}, len(fields)) - for i := 0; i < len(fields); i++ { - var scanResultContainer interface{} - scanResultContainers[i] = &scanResultContainer - } - if err := rows.Scan(scanResultContainers...); err != nil { - return nil, err - } - - for ii, key := range fields { - resultsMap[key] = reflect.Indirect(reflect.ValueOf(scanResultContainers[ii])).Interface() - } - return -} - -func rows2Interfaces(rows *core.Rows) (resultsSlice []map[string]interface{}, err error) { - fields, err := rows.Columns() - if err != nil { - return nil, err - } - for rows.Next() { - result, err := row2mapInterface(rows, fields) - if err != nil { - return nil, err - } - resultsSlice = append(resultsSlice, result) - } - - return resultsSlice, nil -} - -// QueryInterface runs a raw sql and return records as []map[string]interface{} -func (session *Session) QueryInterface(sqlorArgs ...interface{}) ([]map[string]interface{}, error) { - if session.isAutoClose { - defer session.Close() - } - - sqlStr, args, err := session.genQuerySQL(sqlorArgs...) - if err != nil { - return nil, err - } - - rows, err := session.queryRows(sqlStr, args...) - if err != nil { - return nil, err - } - defer rows.Close() - - return rows2Interfaces(rows) -} diff --git a/vendor/github.com/go-xorm/xorm/session_raw.go b/vendor/github.com/go-xorm/xorm/session_raw.go deleted file mode 100644 index 69bf9b3c6..000000000 --- a/vendor/github.com/go-xorm/xorm/session_raw.go +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2016 The Xorm 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 xorm - -import ( - "database/sql" - "reflect" - "time" - - "github.com/go-xorm/core" -) - -func (session *Session) queryPreprocess(sqlStr *string, paramStr ...interface{}) { - for _, filter := range session.engine.dialect.Filters() { - *sqlStr = filter.Do(*sqlStr, session.engine.dialect, session.statement.RefTable) - } - - session.lastSQL = *sqlStr - session.lastSQLArgs = paramStr -} - -func (session *Session) queryRows(sqlStr string, args ...interface{}) (*core.Rows, error) { - defer session.resetStatement() - - session.queryPreprocess(&sqlStr, args...) - - if session.engine.showSQL { - if session.engine.showExecTime { - b4ExecTime := time.Now() - defer func() { - execDuration := time.Since(b4ExecTime) - if len(args) > 0 { - session.engine.logger.Infof("[SQL] %s %#v - took: %v", sqlStr, args, execDuration) - } else { - session.engine.logger.Infof("[SQL] %s - took: %v", sqlStr, execDuration) - } - }() - } else { - if len(args) > 0 { - session.engine.logger.Infof("[SQL] %v %#v", sqlStr, args) - } else { - session.engine.logger.Infof("[SQL] %v", sqlStr) - } - } - } - - if session.isAutoCommit { - var db *core.DB - if session.engine.engineGroup != nil { - db = session.engine.engineGroup.Slave().DB() - } else { - db = session.DB() - } - - if session.prepareStmt { - // don't clear stmt since session will cache them - stmt, err := session.doPrepare(db, sqlStr) - if err != nil { - return nil, err - } - - rows, err := stmt.Query(args...) - if err != nil { - return nil, err - } - return rows, nil - } - - rows, err := db.Query(sqlStr, args...) - if err != nil { - return nil, err - } - return rows, nil - } - - rows, err := session.tx.Query(sqlStr, args...) - if err != nil { - return nil, err - } - return rows, nil -} - -func (session *Session) queryRow(sqlStr string, args ...interface{}) *core.Row { - return core.NewRow(session.queryRows(sqlStr, args...)) -} - -func value2Bytes(rawValue *reflect.Value) ([]byte, error) { - str, err := value2String(rawValue) - if err != nil { - return nil, err - } - return []byte(str), nil -} - -func row2map(rows *core.Rows, fields []string) (resultsMap map[string][]byte, err error) { - result := make(map[string][]byte) - scanResultContainers := make([]interface{}, len(fields)) - for i := 0; i < len(fields); i++ { - var scanResultContainer interface{} - scanResultContainers[i] = &scanResultContainer - } - if err := rows.Scan(scanResultContainers...); err != nil { - return nil, err - } - - for ii, key := range fields { - rawValue := reflect.Indirect(reflect.ValueOf(scanResultContainers[ii])) - //if row is null then ignore - if rawValue.Interface() == nil { - result[key] = []byte{} - continue - } - - if data, err := value2Bytes(&rawValue); err == nil { - result[key] = data - } else { - return nil, err // !nashtsai! REVIEW, should return err or just error log? - } - } - return result, nil -} - -func rows2maps(rows *core.Rows) (resultsSlice []map[string][]byte, err error) { - fields, err := rows.Columns() - if err != nil { - return nil, err - } - for rows.Next() { - result, err := row2map(rows, fields) - if err != nil { - return nil, err - } - resultsSlice = append(resultsSlice, result) - } - - return resultsSlice, nil -} - -func (session *Session) queryBytes(sqlStr string, args ...interface{}) ([]map[string][]byte, error) { - rows, err := session.queryRows(sqlStr, args...) - if err != nil { - return nil, err - } - defer rows.Close() - - return rows2maps(rows) -} - -func (session *Session) exec(sqlStr string, args ...interface{}) (sql.Result, error) { - defer session.resetStatement() - - session.queryPreprocess(&sqlStr, args...) - - if session.engine.showSQL { - if session.engine.showExecTime { - b4ExecTime := time.Now() - defer func() { - execDuration := time.Since(b4ExecTime) - if len(args) > 0 { - session.engine.logger.Infof("[SQL] %s %#v - took: %v", sqlStr, args, execDuration) - } else { - session.engine.logger.Infof("[SQL] %s - took: %v", sqlStr, execDuration) - } - }() - } else { - if len(args) > 0 { - session.engine.logger.Infof("[SQL] %v %#v", sqlStr, args) - } else { - session.engine.logger.Infof("[SQL] %v", sqlStr) - } - } - } - - if !session.isAutoCommit { - return session.tx.Exec(sqlStr, args...) - } - - if session.prepareStmt { - stmt, err := session.doPrepare(session.DB(), sqlStr) - if err != nil { - return nil, err - } - - res, err := stmt.Exec(args...) - if err != nil { - return nil, err - } - return res, nil - } - - return session.DB().Exec(sqlStr, args...) -} - -// Exec raw sql -func (session *Session) Exec(sqlStr string, args ...interface{}) (sql.Result, error) { - if session.isAutoClose { - defer session.Close() - } - - return session.exec(sqlStr, args...) -} diff --git a/vendor/github.com/go-xorm/xorm/session_schema.go b/vendor/github.com/go-xorm/xorm/session_schema.go deleted file mode 100644 index 369ec72a4..000000000 --- a/vendor/github.com/go-xorm/xorm/session_schema.go +++ /dev/null @@ -1,421 +0,0 @@ -// Copyright 2016 The Xorm 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 xorm - -import ( - "database/sql" - "fmt" - "strings" - - "github.com/go-xorm/core" -) - -// Ping test if database is ok -func (session *Session) Ping() error { - if session.isAutoClose { - defer session.Close() - } - - session.engine.logger.Infof("PING DATABASE %v", session.engine.DriverName()) - return session.DB().Ping() -} - -// CreateTable create a table according a bean -func (session *Session) CreateTable(bean interface{}) error { - if session.isAutoClose { - defer session.Close() - } - - return session.createTable(bean) -} - -func (session *Session) createTable(bean interface{}) error { - if err := session.statement.setRefBean(bean); err != nil { - return err - } - - sqlStr := session.statement.genCreateTableSQL() - _, err := session.exec(sqlStr) - return err -} - -// CreateIndexes create indexes -func (session *Session) CreateIndexes(bean interface{}) error { - if session.isAutoClose { - defer session.Close() - } - - return session.createIndexes(bean) -} - -func (session *Session) createIndexes(bean interface{}) error { - if err := session.statement.setRefBean(bean); err != nil { - return err - } - - sqls := session.statement.genIndexSQL() - for _, sqlStr := range sqls { - _, err := session.exec(sqlStr) - if err != nil { - return err - } - } - return nil -} - -// CreateUniques create uniques -func (session *Session) CreateUniques(bean interface{}) error { - if session.isAutoClose { - defer session.Close() - } - return session.createUniques(bean) -} - -func (session *Session) createUniques(bean interface{}) error { - if err := session.statement.setRefBean(bean); err != nil { - return err - } - - sqls := session.statement.genUniqueSQL() - for _, sqlStr := range sqls { - _, err := session.exec(sqlStr) - if err != nil { - return err - } - } - return nil -} - -// DropIndexes drop indexes -func (session *Session) DropIndexes(bean interface{}) error { - if session.isAutoClose { - defer session.Close() - } - - return session.dropIndexes(bean) -} - -func (session *Session) dropIndexes(bean interface{}) error { - if err := session.statement.setRefBean(bean); err != nil { - return err - } - - sqls := session.statement.genDelIndexSQL() - for _, sqlStr := range sqls { - _, err := session.exec(sqlStr) - if err != nil { - return err - } - } - return nil -} - -// DropTable drop table will drop table if exist, if drop failed, it will return error -func (session *Session) DropTable(beanOrTableName interface{}) error { - if session.isAutoClose { - defer session.Close() - } - - return session.dropTable(beanOrTableName) -} - -func (session *Session) dropTable(beanOrTableName interface{}) error { - tableName := session.engine.TableName(beanOrTableName) - var needDrop = true - if !session.engine.dialect.SupportDropIfExists() { - sqlStr, args := session.engine.dialect.TableCheckSql(tableName) - results, err := session.queryBytes(sqlStr, args...) - if err != nil { - return err - } - needDrop = len(results) > 0 - } - - if needDrop { - sqlStr := session.engine.Dialect().DropTableSql(session.engine.TableName(tableName, true)) - _, err := session.exec(sqlStr) - return err - } - return nil -} - -// IsTableExist if a table is exist -func (session *Session) IsTableExist(beanOrTableName interface{}) (bool, error) { - if session.isAutoClose { - defer session.Close() - } - - tableName := session.engine.TableName(beanOrTableName) - - return session.isTableExist(tableName) -} - -func (session *Session) isTableExist(tableName string) (bool, error) { - sqlStr, args := session.engine.dialect.TableCheckSql(tableName) - results, err := session.queryBytes(sqlStr, args...) - return len(results) > 0, err -} - -// IsTableEmpty if table have any records -func (session *Session) IsTableEmpty(bean interface{}) (bool, error) { - if session.isAutoClose { - defer session.Close() - } - return session.isTableEmpty(session.engine.TableName(bean)) -} - -func (session *Session) isTableEmpty(tableName string) (bool, error) { - var total int64 - sqlStr := fmt.Sprintf("select count(*) from %s", session.engine.Quote(session.engine.TableName(tableName, true))) - err := session.queryRow(sqlStr).Scan(&total) - if err != nil { - if err == sql.ErrNoRows { - err = nil - } - return true, err - } - - return total == 0, nil -} - -// find if index is exist according cols -func (session *Session) isIndexExist2(tableName string, cols []string, unique bool) (bool, error) { - indexes, err := session.engine.dialect.GetIndexes(tableName) - if err != nil { - return false, err - } - - for _, index := range indexes { - if sliceEq(index.Cols, cols) { - if unique { - return index.Type == core.UniqueType, nil - } - return index.Type == core.IndexType, nil - } - } - return false, nil -} - -func (session *Session) addColumn(colName string) error { - col := session.statement.RefTable.GetColumn(colName) - sql, args := session.statement.genAddColumnStr(col) - _, err := session.exec(sql, args...) - return err -} - -func (session *Session) addIndex(tableName, idxName string) error { - index := session.statement.RefTable.Indexes[idxName] - sqlStr := session.engine.dialect.CreateIndexSql(tableName, index) - _, err := session.exec(sqlStr) - return err -} - -func (session *Session) addUnique(tableName, uqeName string) error { - index := session.statement.RefTable.Indexes[uqeName] - sqlStr := session.engine.dialect.CreateIndexSql(tableName, index) - _, err := session.exec(sqlStr) - return err -} - -// Sync2 synchronize structs to database tables -func (session *Session) Sync2(beans ...interface{}) error { - engine := session.engine - - if session.isAutoClose { - session.isAutoClose = false - defer session.Close() - } - - tables, err := engine.DBMetas() - if err != nil { - return err - } - - session.autoResetStatement = false - defer func() { - session.autoResetStatement = true - session.resetStatement() - }() - - var structTables []*core.Table - - for _, bean := range beans { - v := rValue(bean) - table, err := engine.mapType(v) - if err != nil { - return err - } - structTables = append(structTables, table) - tbName := engine.TableName(bean) - tbNameWithSchema := engine.TableName(tbName, true) - - var oriTable *core.Table - for _, tb := range tables { - if strings.EqualFold(tb.Name, tbName) { - oriTable = tb - break - } - } - - if oriTable == nil { - err = session.StoreEngine(session.statement.StoreEngine).createTable(bean) - if err != nil { - return err - } - - err = session.createUniques(bean) - if err != nil { - return err - } - - err = session.createIndexes(bean) - if err != nil { - return err - } - } else { - for _, col := range table.Columns() { - var oriCol *core.Column - for _, col2 := range oriTable.Columns() { - if strings.EqualFold(col.Name, col2.Name) { - oriCol = col2 - break - } - } - - if oriCol != nil { - expectedType := engine.dialect.SqlType(col) - curType := engine.dialect.SqlType(oriCol) - if expectedType != curType { - if expectedType == core.Text && - strings.HasPrefix(curType, core.Varchar) { - // currently only support mysql & postgres - if engine.dialect.DBType() == core.MYSQL || - engine.dialect.DBType() == core.POSTGRES { - engine.logger.Infof("Table %s column %s change type from %s to %s\n", - tbNameWithSchema, col.Name, curType, expectedType) - _, err = session.exec(engine.dialect.ModifyColumnSql(tbNameWithSchema, col)) - } else { - engine.logger.Warnf("Table %s column %s db type is %s, struct type is %s\n", - tbNameWithSchema, col.Name, curType, expectedType) - } - } else if strings.HasPrefix(curType, core.Varchar) && strings.HasPrefix(expectedType, core.Varchar) { - if engine.dialect.DBType() == core.MYSQL { - if oriCol.Length < col.Length { - engine.logger.Infof("Table %s column %s change type from varchar(%d) to varchar(%d)\n", - tbNameWithSchema, col.Name, oriCol.Length, col.Length) - _, err = session.exec(engine.dialect.ModifyColumnSql(tbNameWithSchema, col)) - } - } - } else { - if !(strings.HasPrefix(curType, expectedType) && curType[len(expectedType)] == '(') { - engine.logger.Warnf("Table %s column %s db type is %s, struct type is %s", - tbNameWithSchema, col.Name, curType, expectedType) - } - } - } else if expectedType == core.Varchar { - if engine.dialect.DBType() == core.MYSQL { - if oriCol.Length < col.Length { - engine.logger.Infof("Table %s column %s change type from varchar(%d) to varchar(%d)\n", - tbNameWithSchema, col.Name, oriCol.Length, col.Length) - _, err = session.exec(engine.dialect.ModifyColumnSql(tbNameWithSchema, col)) - } - } - } - if col.Default != oriCol.Default { - engine.logger.Warnf("Table %s Column %s db default is %s, struct default is %s", - tbName, col.Name, oriCol.Default, col.Default) - } - if col.Nullable != oriCol.Nullable { - engine.logger.Warnf("Table %s Column %s db nullable is %v, struct nullable is %v", - tbName, col.Name, oriCol.Nullable, col.Nullable) - } - } else { - session.statement.RefTable = table - session.statement.tableName = tbNameWithSchema - err = session.addColumn(col.Name) - } - if err != nil { - return err - } - } - - var foundIndexNames = make(map[string]bool) - var addedNames = make(map[string]*core.Index) - - for name, index := range table.Indexes { - var oriIndex *core.Index - for name2, index2 := range oriTable.Indexes { - if index.Equal(index2) { - oriIndex = index2 - foundIndexNames[name2] = true - break - } - } - - if oriIndex != nil { - if oriIndex.Type != index.Type { - sql := engine.dialect.DropIndexSql(tbNameWithSchema, oriIndex) - _, err = session.exec(sql) - if err != nil { - return err - } - oriIndex = nil - } - } - - if oriIndex == nil { - addedNames[name] = index - } - } - - for name2, index2 := range oriTable.Indexes { - if _, ok := foundIndexNames[name2]; !ok { - sql := engine.dialect.DropIndexSql(tbNameWithSchema, index2) - _, err = session.exec(sql) - if err != nil { - return err - } - } - } - - for name, index := range addedNames { - if index.Type == core.UniqueType { - session.statement.RefTable = table - session.statement.tableName = tbNameWithSchema - err = session.addUnique(tbNameWithSchema, name) - } else if index.Type == core.IndexType { - session.statement.RefTable = table - session.statement.tableName = tbNameWithSchema - err = session.addIndex(tbNameWithSchema, name) - } - if err != nil { - return err - } - } - } - } - - for _, table := range tables { - var oriTable *core.Table - for _, structTable := range structTables { - if strings.EqualFold(table.Name, session.tbNameNoSchema(structTable)) { - oriTable = structTable - break - } - } - - if oriTable == nil { - //engine.LogWarnf("Table %s has no struct to mapping it", table.Name) - continue - } - - for _, colName := range table.ColumnsSeq() { - if oriTable.GetColumn(colName) == nil { - engine.logger.Warnf("Table %s has column %s but struct has not related field", engine.TableName(table.Name, true), colName) - } - } - } - return nil -} diff --git a/vendor/github.com/go-xorm/xorm/session_stats.go b/vendor/github.com/go-xorm/xorm/session_stats.go deleted file mode 100644 index c2cac8306..000000000 --- a/vendor/github.com/go-xorm/xorm/session_stats.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2016 The Xorm 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 xorm - -import ( - "database/sql" - "errors" - "reflect" -) - -// Count counts the records. bean's non-empty fields -// are conditions. -func (session *Session) Count(bean ...interface{}) (int64, error) { - if session.isAutoClose { - defer session.Close() - } - - var sqlStr string - var args []interface{} - var err error - if session.statement.RawSQL == "" { - sqlStr, args, err = session.statement.genCountSQL(bean...) - if err != nil { - return 0, err - } - } else { - sqlStr = session.statement.RawSQL - args = session.statement.RawParams - } - - var total int64 - err = session.queryRow(sqlStr, args...).Scan(&total) - if err == sql.ErrNoRows || err == nil { - return total, nil - } - - return 0, err -} - -// sum call sum some column. bean's non-empty fields are conditions. -func (session *Session) sum(res interface{}, bean interface{}, columnNames ...string) error { - if session.isAutoClose { - defer session.Close() - } - - v := reflect.ValueOf(res) - if v.Kind() != reflect.Ptr { - return errors.New("need a pointer to a variable") - } - - var isSlice = v.Elem().Kind() == reflect.Slice - var sqlStr string - var args []interface{} - var err error - if len(session.statement.RawSQL) == 0 { - sqlStr, args, err = session.statement.genSumSQL(bean, columnNames...) - if err != nil { - return err - } - } else { - sqlStr = session.statement.RawSQL - args = session.statement.RawParams - } - - if isSlice { - err = session.queryRow(sqlStr, args...).ScanSlice(res) - } else { - err = session.queryRow(sqlStr, args...).Scan(res) - } - if err == sql.ErrNoRows || err == nil { - return nil - } - return err -} - -// Sum call sum some column. bean's non-empty fields are conditions. -func (session *Session) Sum(bean interface{}, columnName string) (res float64, err error) { - return res, session.sum(&res, bean, columnName) -} - -// SumInt call sum some column. bean's non-empty fields are conditions. -func (session *Session) SumInt(bean interface{}, columnName string) (res int64, err error) { - return res, session.sum(&res, bean, columnName) -} - -// Sums call sum some columns. bean's non-empty fields are conditions. -func (session *Session) Sums(bean interface{}, columnNames ...string) ([]float64, error) { - var res = make([]float64, len(columnNames), len(columnNames)) - return res, session.sum(&res, bean, columnNames...) -} - -// SumsInt sum specify columns and return as []int64 instead of []float64 -func (session *Session) SumsInt(bean interface{}, columnNames ...string) ([]int64, error) { - var res = make([]int64, len(columnNames), len(columnNames)) - return res, session.sum(&res, bean, columnNames...) -} diff --git a/vendor/github.com/go-xorm/xorm/session_tx.go b/vendor/github.com/go-xorm/xorm/session_tx.go deleted file mode 100644 index 84d2f7f9d..000000000 --- a/vendor/github.com/go-xorm/xorm/session_tx.go +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2016 The Xorm 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 xorm - -// Begin a transaction -func (session *Session) Begin() error { - if session.isAutoCommit { - tx, err := session.DB().Begin() - if err != nil { - return err - } - session.isAutoCommit = false - session.isCommitedOrRollbacked = false - session.tx = tx - session.saveLastSQL("BEGIN TRANSACTION") - } - return nil -} - -// Rollback When using transaction, you can rollback if any error -func (session *Session) Rollback() error { - if !session.isAutoCommit && !session.isCommitedOrRollbacked { - session.saveLastSQL(session.engine.dialect.RollBackStr()) - session.isCommitedOrRollbacked = true - return session.tx.Rollback() - } - return nil -} - -// Commit When using transaction, Commit will commit all operations. -func (session *Session) Commit() error { - if !session.isAutoCommit && !session.isCommitedOrRollbacked { - session.saveLastSQL("COMMIT") - session.isCommitedOrRollbacked = true - var err error - if err = session.tx.Commit(); err == nil { - // handle processors after tx committed - closureCallFunc := func(closuresPtr *[]func(interface{}), bean interface{}) { - if closuresPtr != nil { - for _, closure := range *closuresPtr { - closure(bean) - } - } - } - - for bean, closuresPtr := range session.afterInsertBeans { - closureCallFunc(closuresPtr, bean) - - if processor, ok := interface{}(bean).(AfterInsertProcessor); ok { - processor.AfterInsert() - } - } - for bean, closuresPtr := range session.afterUpdateBeans { - closureCallFunc(closuresPtr, bean) - - if processor, ok := interface{}(bean).(AfterUpdateProcessor); ok { - processor.AfterUpdate() - } - } - for bean, closuresPtr := range session.afterDeleteBeans { - closureCallFunc(closuresPtr, bean) - - if processor, ok := interface{}(bean).(AfterDeleteProcessor); ok { - processor.AfterDelete() - } - } - cleanUpFunc := func(slices *map[interface{}]*[]func(interface{})) { - if len(*slices) > 0 { - *slices = make(map[interface{}]*[]func(interface{}), 0) - } - } - cleanUpFunc(&session.afterInsertBeans) - cleanUpFunc(&session.afterUpdateBeans) - cleanUpFunc(&session.afterDeleteBeans) - } - return err - } - return nil -} diff --git a/vendor/github.com/go-xorm/xorm/session_update.go b/vendor/github.com/go-xorm/xorm/session_update.go deleted file mode 100644 index 84c7e7fec..000000000 --- a/vendor/github.com/go-xorm/xorm/session_update.go +++ /dev/null @@ -1,491 +0,0 @@ -// Copyright 2016 The Xorm 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 xorm - -import ( - "errors" - "fmt" - "reflect" - "strconv" - "strings" - - "github.com/go-xorm/builder" - "github.com/go-xorm/core" -) - -func (session *Session) cacheUpdate(table *core.Table, tableName, sqlStr string, args ...interface{}) error { - if table == nil || - session.tx != nil { - return ErrCacheFailed - } - - oldhead, newsql := session.statement.convertUpdateSQL(sqlStr) - if newsql == "" { - return ErrCacheFailed - } - for _, filter := range session.engine.dialect.Filters() { - newsql = filter.Do(newsql, session.engine.dialect, table) - } - session.engine.logger.Debug("[cacheUpdate] new sql", oldhead, newsql) - - var nStart int - if len(args) > 0 { - if strings.Index(sqlStr, "?") > -1 { - nStart = strings.Count(oldhead, "?") - } else { - // only for pq, TODO: if any other databse? - nStart = strings.Count(oldhead, "$") - } - } - - cacher := session.engine.getCacher(tableName) - session.engine.logger.Debug("[cacheUpdate] get cache sql", newsql, args[nStart:]) - ids, err := core.GetCacheSql(cacher, tableName, newsql, args[nStart:]) - if err != nil { - rows, err := session.NoCache().queryRows(newsql, args[nStart:]...) - if err != nil { - return err - } - defer rows.Close() - - ids = make([]core.PK, 0) - for rows.Next() { - var res = make([]string, len(table.PrimaryKeys)) - err = rows.ScanSlice(&res) - if err != nil { - return err - } - var pk core.PK = make([]interface{}, len(table.PrimaryKeys)) - for i, col := range table.PKColumns() { - if col.SQLType.IsNumeric() { - n, err := strconv.ParseInt(res[i], 10, 64) - if err != nil { - return err - } - pk[i] = n - } else if col.SQLType.IsText() { - pk[i] = res[i] - } else { - return errors.New("not supported") - } - } - - ids = append(ids, pk) - } - session.engine.logger.Debug("[cacheUpdate] find updated id", ids) - } /*else { - session.engine.LogDebug("[xorm:cacheUpdate] del cached sql:", tableName, newsql, args) - cacher.DelIds(tableName, genSqlKey(newsql, args)) - }*/ - - for _, id := range ids { - sid, err := id.ToString() - if err != nil { - return err - } - if bean := cacher.GetBean(tableName, sid); bean != nil { - sqls := splitNNoCase(sqlStr, "where", 2) - if len(sqls) == 0 || len(sqls) > 2 { - return ErrCacheFailed - } - - sqls = splitNNoCase(sqls[0], "set", 2) - if len(sqls) != 2 { - return ErrCacheFailed - } - kvs := strings.Split(strings.TrimSpace(sqls[1]), ",") - for idx, kv := range kvs { - sps := strings.SplitN(kv, "=", 2) - sps2 := strings.Split(sps[0], ".") - colName := sps2[len(sps2)-1] - if strings.Contains(colName, "`") { - colName = strings.TrimSpace(strings.Replace(colName, "`", "", -1)) - } else if strings.Contains(colName, session.engine.QuoteStr()) { - colName = strings.TrimSpace(strings.Replace(colName, session.engine.QuoteStr(), "", -1)) - } else { - session.engine.logger.Debug("[cacheUpdate] cannot find column", tableName, colName) - return ErrCacheFailed - } - - if col := table.GetColumn(colName); col != nil { - fieldValue, err := col.ValueOf(bean) - if err != nil { - session.engine.logger.Error(err) - } else { - session.engine.logger.Debug("[cacheUpdate] set bean field", bean, colName, fieldValue.Interface()) - if col.IsVersion && session.statement.checkVersion { - fieldValue.SetInt(fieldValue.Int() + 1) - } else { - fieldValue.Set(reflect.ValueOf(args[idx])) - } - } - } else { - session.engine.logger.Errorf("[cacheUpdate] ERROR: column %v is not table %v's", - colName, table.Name) - } - } - - session.engine.logger.Debug("[cacheUpdate] update cache", tableName, id, bean) - cacher.PutBean(tableName, sid, bean) - } - } - session.engine.logger.Debug("[cacheUpdate] clear cached table sql:", tableName) - cacher.ClearIds(tableName) - return nil -} - -// Update records, bean's non-empty fields are updated contents, -// condiBean' non-empty filds are conditions -// CAUTION: -// 1.bool will defaultly be updated content nor conditions -// You should call UseBool if you have bool to use. -// 2.float32 & float64 may be not inexact as conditions -func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int64, error) { - if session.isAutoClose { - defer session.Close() - } - - v := rValue(bean) - t := v.Type() - - var colNames []string - var args []interface{} - - // handle before update processors - for _, closure := range session.beforeClosures { - closure(bean) - } - cleanupProcessorsClosures(&session.beforeClosures) // cleanup after used - if processor, ok := interface{}(bean).(BeforeUpdateProcessor); ok { - processor.BeforeUpdate() - } - // -- - - var err error - var isMap = t.Kind() == reflect.Map - var isStruct = t.Kind() == reflect.Struct - if isStruct { - if err := session.statement.setRefBean(bean); err != nil { - return 0, err - } - - if len(session.statement.TableName()) <= 0 { - return 0, ErrTableNotFound - } - - if session.statement.ColumnStr == "" { - colNames, args = session.statement.buildUpdates(bean, false, false, - false, false, true) - } else { - colNames, args, err = session.genUpdateColumns(bean) - if err != nil { - return 0, err - } - } - } else if isMap { - colNames = make([]string, 0) - args = make([]interface{}, 0) - bValue := reflect.Indirect(reflect.ValueOf(bean)) - - for _, v := range bValue.MapKeys() { - colNames = append(colNames, session.engine.Quote(v.String())+" = ?") - args = append(args, bValue.MapIndex(v).Interface()) - } - } else { - return 0, ErrParamsType - } - - table := session.statement.RefTable - - if session.statement.UseAutoTime && table != nil && table.Updated != "" { - if !session.statement.columnMap.contain(table.Updated) && - !session.statement.omitColumnMap.contain(table.Updated) { - colNames = append(colNames, session.engine.Quote(table.Updated)+" = ?") - col := table.UpdatedColumn() - val, t := session.engine.nowTime(col) - args = append(args, val) - - var colName = col.Name - if isStruct { - session.afterClosures = append(session.afterClosures, func(bean interface{}) { - col := table.GetColumn(colName) - setColumnTime(bean, col, t) - }) - } - } - } - - //for update action to like "column = column + ?" - incColumns := session.statement.getInc() - for _, v := range incColumns { - colNames = append(colNames, session.engine.Quote(v.colName)+" = "+session.engine.Quote(v.colName)+" + ?") - args = append(args, v.arg) - } - //for update action to like "column = column - ?" - decColumns := session.statement.getDec() - for _, v := range decColumns { - colNames = append(colNames, session.engine.Quote(v.colName)+" = "+session.engine.Quote(v.colName)+" - ?") - args = append(args, v.arg) - } - //for update action to like "column = expression" - exprColumns := session.statement.getExpr() - for _, v := range exprColumns { - colNames = append(colNames, session.engine.Quote(v.colName)+" = "+v.expr) - } - - if err = session.statement.processIDParam(); err != nil { - return 0, err - } - - var autoCond builder.Cond - if !session.statement.noAutoCondition && len(condiBean) > 0 { - if c, ok := condiBean[0].(map[string]interface{}); ok { - autoCond = builder.Eq(c) - } else { - ct := reflect.TypeOf(condiBean[0]) - k := ct.Kind() - if k == reflect.Ptr { - k = ct.Elem().Kind() - } - if k == reflect.Struct { - var err error - autoCond, err = session.statement.buildConds(session.statement.RefTable, condiBean[0], true, true, false, true, false) - if err != nil { - return 0, err - } - } else { - return 0, ErrConditionType - } - } - } - - st := &session.statement - - var sqlStr string - var condArgs []interface{} - var condSQL string - cond := session.statement.cond.And(autoCond) - - var doIncVer = (table != nil && table.Version != "" && session.statement.checkVersion) - var verValue *reflect.Value - if doIncVer { - verValue, err = table.VersionColumn().ValueOf(bean) - if err != nil { - return 0, err - } - - cond = cond.And(builder.Eq{session.engine.Quote(table.Version): verValue.Interface()}) - colNames = append(colNames, session.engine.Quote(table.Version)+" = "+session.engine.Quote(table.Version)+" + 1") - } - - condSQL, condArgs, err = builder.ToSQL(cond) - if err != nil { - return 0, err - } - - if len(condSQL) > 0 { - condSQL = "WHERE " + condSQL - } - - if st.OrderStr != "" { - condSQL = condSQL + fmt.Sprintf(" ORDER BY %v", st.OrderStr) - } - - var tableName = session.statement.TableName() - // TODO: Oracle support needed - var top string - if st.LimitN > 0 { - if st.Engine.dialect.DBType() == core.MYSQL { - condSQL = condSQL + fmt.Sprintf(" LIMIT %d", st.LimitN) - } else if st.Engine.dialect.DBType() == core.SQLITE { - tempCondSQL := condSQL + fmt.Sprintf(" LIMIT %d", st.LimitN) - cond = cond.And(builder.Expr(fmt.Sprintf("rowid IN (SELECT rowid FROM %v %v)", - session.engine.Quote(tableName), tempCondSQL), condArgs...)) - condSQL, condArgs, err = builder.ToSQL(cond) - if err != nil { - return 0, err - } - if len(condSQL) > 0 { - condSQL = "WHERE " + condSQL - } - } else if st.Engine.dialect.DBType() == core.POSTGRES { - tempCondSQL := condSQL + fmt.Sprintf(" LIMIT %d", st.LimitN) - cond = cond.And(builder.Expr(fmt.Sprintf("CTID IN (SELECT CTID FROM %v %v)", - session.engine.Quote(tableName), tempCondSQL), condArgs...)) - condSQL, condArgs, err = builder.ToSQL(cond) - if err != nil { - return 0, err - } - - if len(condSQL) > 0 { - condSQL = "WHERE " + condSQL - } - } else if st.Engine.dialect.DBType() == core.MSSQL { - if st.OrderStr != "" && st.Engine.dialect.DBType() == core.MSSQL && - table != nil && len(table.PrimaryKeys) == 1 { - cond = builder.Expr(fmt.Sprintf("%s IN (SELECT TOP (%d) %s FROM %v%v)", - table.PrimaryKeys[0], st.LimitN, table.PrimaryKeys[0], - session.engine.Quote(tableName), condSQL), condArgs...) - - condSQL, condArgs, err = builder.ToSQL(cond) - if err != nil { - return 0, err - } - if len(condSQL) > 0 { - condSQL = "WHERE " + condSQL - } - } else { - top = fmt.Sprintf("TOP (%d) ", st.LimitN) - } - } - } - - if len(colNames) <= 0 { - return 0, errors.New("No content found to be updated") - } - - sqlStr = fmt.Sprintf("UPDATE %v%v SET %v %v", - top, - session.engine.Quote(tableName), - strings.Join(colNames, ", "), - condSQL) - - res, err := session.exec(sqlStr, append(args, condArgs...)...) - if err != nil { - return 0, err - } else if doIncVer { - if verValue != nil && verValue.IsValid() && verValue.CanSet() { - verValue.SetInt(verValue.Int() + 1) - } - } - - if cacher := session.engine.getCacher(tableName); cacher != nil && session.statement.UseCache { - //session.cacheUpdate(table, tableName, sqlStr, args...) - session.engine.logger.Debug("[cacheUpdate] clear table ", tableName) - cacher.ClearIds(tableName) - cacher.ClearBeans(tableName) - } - - // handle after update processors - if session.isAutoCommit { - for _, closure := range session.afterClosures { - closure(bean) - } - if processor, ok := interface{}(bean).(AfterUpdateProcessor); ok { - session.engine.logger.Debug("[event]", tableName, " has after update processor") - processor.AfterUpdate() - } - } else { - lenAfterClosures := len(session.afterClosures) - if lenAfterClosures > 0 { - if value, has := session.afterUpdateBeans[bean]; has && value != nil { - *value = append(*value, session.afterClosures...) - } else { - afterClosures := make([]func(interface{}), lenAfterClosures) - copy(afterClosures, session.afterClosures) - // FIXME: if bean is a map type, it will panic because map cannot be as map key - session.afterUpdateBeans[bean] = &afterClosures - } - - } else { - if _, ok := interface{}(bean).(AfterUpdateProcessor); ok { - session.afterUpdateBeans[bean] = nil - } - } - } - cleanupProcessorsClosures(&session.afterClosures) // cleanup after used - // -- - - return res.RowsAffected() -} - -func (session *Session) genUpdateColumns(bean interface{}) ([]string, []interface{}, error) { - table := session.statement.RefTable - colNames := make([]string, 0, len(table.ColumnsSeq())) - args := make([]interface{}, 0, len(table.ColumnsSeq())) - - for _, col := range table.Columns() { - if !col.IsVersion && !col.IsCreated && !col.IsUpdated { - if session.statement.omitColumnMap.contain(col.Name) { - continue - } - } - if col.MapType == core.ONLYFROMDB { - continue - } - - fieldValuePtr, err := col.ValueOf(bean) - if err != nil { - return nil, nil, err - } - fieldValue := *fieldValuePtr - - if col.IsAutoIncrement { - switch fieldValue.Type().Kind() { - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int, reflect.Int64: - if fieldValue.Int() == 0 { - continue - } - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint, reflect.Uint64: - if fieldValue.Uint() == 0 { - continue - } - case reflect.String: - if len(fieldValue.String()) == 0 { - continue - } - case reflect.Ptr: - if fieldValue.Pointer() == 0 { - continue - } - } - } - - if col.IsDeleted || col.IsCreated { - continue - } - - if len(session.statement.columnMap) > 0 { - if !session.statement.columnMap.contain(col.Name) { - continue - } else if _, ok := session.statement.incrColumns[col.Name]; ok { - continue - } else if _, ok := session.statement.decrColumns[col.Name]; ok { - continue - } - } - - // !evalphobia! set fieldValue as nil when column is nullable and zero-value - if _, ok := getFlagForColumn(session.statement.nullableMap, col); ok { - if col.Nullable && isZero(fieldValue.Interface()) { - var nilValue *int - fieldValue = reflect.ValueOf(nilValue) - } - } - - if col.IsUpdated && session.statement.UseAutoTime /*&& isZero(fieldValue.Interface())*/ { - // if time is non-empty, then set to auto time - val, t := session.engine.nowTime(col) - args = append(args, val) - - var colName = col.Name - session.afterClosures = append(session.afterClosures, func(bean interface{}) { - col := table.GetColumn(colName) - setColumnTime(bean, col, t) - }) - } else if col.IsVersion && session.statement.checkVersion { - args = append(args, 1) - } else { - arg, err := session.value2Interface(col, fieldValue) - if err != nil { - return colNames, args, err - } - args = append(args, arg) - } - - colNames = append(colNames, session.engine.Quote(col.Name)+" = ?") - } - return colNames, args, nil -} diff --git a/vendor/github.com/go-xorm/xorm/statement.go b/vendor/github.com/go-xorm/xorm/statement.go deleted file mode 100644 index c67d8c01c..000000000 --- a/vendor/github.com/go-xorm/xorm/statement.go +++ /dev/null @@ -1,1240 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "bytes" - "database/sql/driver" - "encoding/json" - "errors" - "fmt" - "reflect" - "strings" - "time" - - "github.com/go-xorm/builder" - "github.com/go-xorm/core" -) - -// Statement save all the sql info for executing SQL -type Statement struct { - RefTable *core.Table - Engine *Engine - Start int - LimitN int - idParam *core.PK - OrderStr string - JoinStr string - joinArgs []interface{} - GroupByStr string - HavingStr string - ColumnStr string - selectStr string - useAllCols bool - OmitStr string - AltTableName string - tableName string - RawSQL string - RawParams []interface{} - UseCascade bool - UseAutoJoin bool - StoreEngine string - Charset string - UseCache bool - UseAutoTime bool - noAutoCondition bool - IsDistinct bool - IsForUpdate bool - TableAlias string - allUseBool bool - checkVersion bool - unscoped bool - columnMap columnMap - omitColumnMap columnMap - mustColumnMap map[string]bool - nullableMap map[string]bool - incrColumns map[string]incrParam - decrColumns map[string]decrParam - exprColumns map[string]exprParam - cond builder.Cond - bufferSize int -} - -// Init reset all the statement's fields -func (statement *Statement) Init() { - statement.RefTable = nil - statement.Start = 0 - statement.LimitN = 0 - statement.OrderStr = "" - statement.UseCascade = true - statement.JoinStr = "" - statement.joinArgs = make([]interface{}, 0) - statement.GroupByStr = "" - statement.HavingStr = "" - statement.ColumnStr = "" - statement.OmitStr = "" - statement.columnMap = columnMap{} - statement.omitColumnMap = columnMap{} - statement.AltTableName = "" - statement.tableName = "" - statement.idParam = nil - statement.RawSQL = "" - statement.RawParams = make([]interface{}, 0) - statement.UseCache = true - statement.UseAutoTime = true - statement.noAutoCondition = false - statement.IsDistinct = false - statement.IsForUpdate = false - statement.TableAlias = "" - statement.selectStr = "" - statement.allUseBool = false - statement.useAllCols = false - statement.mustColumnMap = make(map[string]bool) - statement.nullableMap = make(map[string]bool) - statement.checkVersion = true - statement.unscoped = false - statement.incrColumns = make(map[string]incrParam) - statement.decrColumns = make(map[string]decrParam) - statement.exprColumns = make(map[string]exprParam) - statement.cond = builder.NewCond() - statement.bufferSize = 0 -} - -// NoAutoCondition if you do not want convert bean's field as query condition, then use this function -func (statement *Statement) NoAutoCondition(no ...bool) *Statement { - statement.noAutoCondition = true - if len(no) > 0 { - statement.noAutoCondition = no[0] - } - return statement -} - -// Alias set the table alias -func (statement *Statement) Alias(alias string) *Statement { - statement.TableAlias = alias - return statement -} - -// SQL adds raw sql statement -func (statement *Statement) SQL(query interface{}, args ...interface{}) *Statement { - switch query.(type) { - case (*builder.Builder): - var err error - statement.RawSQL, statement.RawParams, err = query.(*builder.Builder).ToSQL() - if err != nil { - statement.Engine.logger.Error(err) - } - case string: - statement.RawSQL = query.(string) - statement.RawParams = args - default: - statement.Engine.logger.Error("unsupported sql type") - } - - return statement -} - -// Where add Where statement -func (statement *Statement) Where(query interface{}, args ...interface{}) *Statement { - return statement.And(query, args...) -} - -// And add Where & and statement -func (statement *Statement) And(query interface{}, args ...interface{}) *Statement { - switch query.(type) { - case string: - cond := builder.Expr(query.(string), args...) - statement.cond = statement.cond.And(cond) - case map[string]interface{}: - cond := builder.Eq(query.(map[string]interface{})) - statement.cond = statement.cond.And(cond) - case builder.Cond: - cond := query.(builder.Cond) - statement.cond = statement.cond.And(cond) - for _, v := range args { - if vv, ok := v.(builder.Cond); ok { - statement.cond = statement.cond.And(vv) - } - } - default: - // TODO: not support condition type - } - - return statement -} - -// Or add Where & Or statement -func (statement *Statement) Or(query interface{}, args ...interface{}) *Statement { - switch query.(type) { - case string: - cond := builder.Expr(query.(string), args...) - statement.cond = statement.cond.Or(cond) - case map[string]interface{}: - cond := builder.Eq(query.(map[string]interface{})) - statement.cond = statement.cond.Or(cond) - case builder.Cond: - cond := query.(builder.Cond) - statement.cond = statement.cond.Or(cond) - for _, v := range args { - if vv, ok := v.(builder.Cond); ok { - statement.cond = statement.cond.Or(vv) - } - } - default: - // TODO: not support condition type - } - return statement -} - -// In generate "Where column IN (?) " statement -func (statement *Statement) In(column string, args ...interface{}) *Statement { - in := builder.In(statement.Engine.Quote(column), args...) - statement.cond = statement.cond.And(in) - return statement -} - -// NotIn generate "Where column NOT IN (?) " statement -func (statement *Statement) NotIn(column string, args ...interface{}) *Statement { - notIn := builder.NotIn(statement.Engine.Quote(column), args...) - statement.cond = statement.cond.And(notIn) - return statement -} - -func (statement *Statement) setRefValue(v reflect.Value) error { - var err error - statement.RefTable, err = statement.Engine.autoMapType(reflect.Indirect(v)) - if err != nil { - return err - } - statement.tableName = statement.Engine.TableName(v, true) - return nil -} - -func (statement *Statement) setRefBean(bean interface{}) error { - var err error - statement.RefTable, err = statement.Engine.autoMapType(rValue(bean)) - if err != nil { - return err - } - statement.tableName = statement.Engine.TableName(bean, true) - return nil -} - -// Auto generating update columnes and values according a struct -func (statement *Statement) buildUpdates(bean interface{}, - includeVersion, includeUpdated, includeNil, - includeAutoIncr, update bool) ([]string, []interface{}) { - engine := statement.Engine - table := statement.RefTable - allUseBool := statement.allUseBool - useAllCols := statement.useAllCols - mustColumnMap := statement.mustColumnMap - nullableMap := statement.nullableMap - columnMap := statement.columnMap - omitColumnMap := statement.omitColumnMap - unscoped := statement.unscoped - - var colNames = make([]string, 0) - var args = make([]interface{}, 0) - for _, col := range table.Columns() { - if !includeVersion && col.IsVersion { - continue - } - if col.IsCreated { - continue - } - if !includeUpdated && col.IsUpdated { - continue - } - if !includeAutoIncr && col.IsAutoIncrement { - continue - } - if col.IsDeleted && !unscoped { - continue - } - if omitColumnMap.contain(col.Name) { - continue - } - if len(columnMap) > 0 && !columnMap.contain(col.Name) { - continue - } - - fieldValuePtr, err := col.ValueOf(bean) - if err != nil { - engine.logger.Error(err) - continue - } - - fieldValue := *fieldValuePtr - fieldType := reflect.TypeOf(fieldValue.Interface()) - if fieldType == nil { - continue - } - - requiredField := useAllCols - includeNil := useAllCols - - if b, ok := getFlagForColumn(mustColumnMap, col); ok { - if b { - requiredField = true - } else { - continue - } - } - - // !evalphobia! set fieldValue as nil when column is nullable and zero-value - if b, ok := getFlagForColumn(nullableMap, col); ok { - if b && col.Nullable && isZero(fieldValue.Interface()) { - var nilValue *int - fieldValue = reflect.ValueOf(nilValue) - fieldType = reflect.TypeOf(fieldValue.Interface()) - includeNil = true - } - } - - var val interface{} - - if fieldValue.CanAddr() { - if structConvert, ok := fieldValue.Addr().Interface().(core.Conversion); ok { - data, err := structConvert.ToDB() - if err != nil { - engine.logger.Error(err) - } else { - val = data - } - goto APPEND - } - } - - if structConvert, ok := fieldValue.Interface().(core.Conversion); ok { - data, err := structConvert.ToDB() - if err != nil { - engine.logger.Error(err) - } else { - val = data - } - goto APPEND - } - - if fieldType.Kind() == reflect.Ptr { - if fieldValue.IsNil() { - if includeNil { - args = append(args, nil) - colNames = append(colNames, fmt.Sprintf("%v=?", engine.Quote(col.Name))) - } - continue - } else if !fieldValue.IsValid() { - continue - } else { - // dereference ptr type to instance type - fieldValue = fieldValue.Elem() - fieldType = reflect.TypeOf(fieldValue.Interface()) - requiredField = true - } - } - - switch fieldType.Kind() { - case reflect.Bool: - if allUseBool || requiredField { - val = fieldValue.Interface() - } else { - // if a bool in a struct, it will not be as a condition because it default is false, - // please use Where() instead - continue - } - case reflect.String: - if !requiredField && fieldValue.String() == "" { - continue - } - // for MyString, should convert to string or panic - if fieldType.String() != reflect.String.String() { - val = fieldValue.String() - } else { - val = fieldValue.Interface() - } - case reflect.Int8, reflect.Int16, reflect.Int, reflect.Int32, reflect.Int64: - if !requiredField && fieldValue.Int() == 0 { - continue - } - val = fieldValue.Interface() - case reflect.Float32, reflect.Float64: - if !requiredField && fieldValue.Float() == 0.0 { - continue - } - val = fieldValue.Interface() - case reflect.Uint8, reflect.Uint16, reflect.Uint, reflect.Uint32, reflect.Uint64: - if !requiredField && fieldValue.Uint() == 0 { - continue - } - t := int64(fieldValue.Uint()) - val = reflect.ValueOf(&t).Interface() - case reflect.Struct: - if fieldType.ConvertibleTo(core.TimeType) { - t := fieldValue.Convert(core.TimeType).Interface().(time.Time) - if !requiredField && (t.IsZero() || !fieldValue.IsValid()) { - continue - } - val = engine.formatColTime(col, t) - } else if nulType, ok := fieldValue.Interface().(driver.Valuer); ok { - val, _ = nulType.Value() - } else { - if !col.SQLType.IsJson() { - engine.autoMapType(fieldValue) - if table, ok := engine.Tables[fieldValue.Type()]; ok { - if len(table.PrimaryKeys) == 1 { - pkField := reflect.Indirect(fieldValue).FieldByName(table.PKColumns()[0].FieldName) - // fix non-int pk issues - if pkField.IsValid() && (!requiredField && !isZero(pkField.Interface())) { - val = pkField.Interface() - } else { - continue - } - } else { - //TODO: how to handler? - panic("not supported") - } - } else { - val = fieldValue.Interface() - } - } else { - // Blank struct could not be as update data - if requiredField || !isStructZero(fieldValue) { - bytes, err := json.Marshal(fieldValue.Interface()) - if err != nil { - panic(fmt.Sprintf("mashal %v failed", fieldValue.Interface())) - } - if col.SQLType.IsText() { - val = string(bytes) - } else if col.SQLType.IsBlob() { - val = bytes - } - } else { - continue - } - } - } - case reflect.Array, reflect.Slice, reflect.Map: - if !requiredField { - if fieldValue == reflect.Zero(fieldType) { - continue - } - if fieldType.Kind() == reflect.Array { - if isArrayValueZero(fieldValue) { - continue - } - } else if fieldValue.IsNil() || !fieldValue.IsValid() || fieldValue.Len() == 0 { - continue - } - } - - if col.SQLType.IsText() { - bytes, err := json.Marshal(fieldValue.Interface()) - if err != nil { - engine.logger.Error(err) - continue - } - val = string(bytes) - } else if col.SQLType.IsBlob() { - var bytes []byte - var err error - if fieldType.Kind() == reflect.Slice && - fieldType.Elem().Kind() == reflect.Uint8 { - if fieldValue.Len() > 0 { - val = fieldValue.Bytes() - } else { - continue - } - } else if fieldType.Kind() == reflect.Array && - fieldType.Elem().Kind() == reflect.Uint8 { - val = fieldValue.Slice(0, 0).Interface() - } else { - bytes, err = json.Marshal(fieldValue.Interface()) - if err != nil { - engine.logger.Error(err) - continue - } - val = bytes - } - } else { - continue - } - default: - val = fieldValue.Interface() - } - - APPEND: - args = append(args, val) - if col.IsPrimaryKey && engine.dialect.DBType() == "ql" { - continue - } - colNames = append(colNames, fmt.Sprintf("%v = ?", engine.Quote(col.Name))) - } - - return colNames, args -} - -func (statement *Statement) needTableName() bool { - return len(statement.JoinStr) > 0 -} - -func (statement *Statement) colName(col *core.Column, tableName string) string { - if statement.needTableName() { - var nm = tableName - if len(statement.TableAlias) > 0 { - nm = statement.TableAlias - } - return statement.Engine.Quote(nm) + "." + statement.Engine.Quote(col.Name) - } - return statement.Engine.Quote(col.Name) -} - -// TableName return current tableName -func (statement *Statement) TableName() string { - if statement.AltTableName != "" { - return statement.AltTableName - } - - return statement.tableName -} - -// ID generate "where id = ? " statement or for composite key "where key1 = ? and key2 = ?" -func (statement *Statement) ID(id interface{}) *Statement { - idValue := reflect.ValueOf(id) - idType := reflect.TypeOf(idValue.Interface()) - - switch idType { - case ptrPkType: - if pkPtr, ok := (id).(*core.PK); ok { - statement.idParam = pkPtr - return statement - } - case pkType: - if pk, ok := (id).(core.PK); ok { - statement.idParam = &pk - return statement - } - } - - switch idType.Kind() { - case reflect.String: - statement.idParam = &core.PK{idValue.Convert(reflect.TypeOf("")).Interface()} - return statement - } - - statement.idParam = &core.PK{id} - return statement -} - -// Incr Generate "Update ... Set column = column + arg" statement -func (statement *Statement) Incr(column string, arg ...interface{}) *Statement { - k := strings.ToLower(column) - if len(arg) > 0 { - statement.incrColumns[k] = incrParam{column, arg[0]} - } else { - statement.incrColumns[k] = incrParam{column, 1} - } - return statement -} - -// Decr Generate "Update ... Set column = column - arg" statement -func (statement *Statement) Decr(column string, arg ...interface{}) *Statement { - k := strings.ToLower(column) - if len(arg) > 0 { - statement.decrColumns[k] = decrParam{column, arg[0]} - } else { - statement.decrColumns[k] = decrParam{column, 1} - } - return statement -} - -// SetExpr Generate "Update ... Set column = {expression}" statement -func (statement *Statement) SetExpr(column string, expression string) *Statement { - k := strings.ToLower(column) - statement.exprColumns[k] = exprParam{column, expression} - return statement -} - -// Generate "Update ... Set column = column + arg" statement -func (statement *Statement) getInc() map[string]incrParam { - return statement.incrColumns -} - -// Generate "Update ... Set column = column - arg" statement -func (statement *Statement) getDec() map[string]decrParam { - return statement.decrColumns -} - -// Generate "Update ... Set column = {expression}" statement -func (statement *Statement) getExpr() map[string]exprParam { - return statement.exprColumns -} - -func (statement *Statement) col2NewColsWithQuote(columns ...string) []string { - newColumns := make([]string, 0) - for _, col := range columns { - col = strings.Replace(col, "`", "", -1) - col = strings.Replace(col, statement.Engine.QuoteStr(), "", -1) - ccols := strings.Split(col, ",") - for _, c := range ccols { - fields := strings.Split(strings.TrimSpace(c), ".") - if len(fields) == 1 { - newColumns = append(newColumns, statement.Engine.quote(fields[0])) - } else if len(fields) == 2 { - newColumns = append(newColumns, statement.Engine.quote(fields[0])+"."+ - statement.Engine.quote(fields[1])) - } else { - panic(errors.New("unwanted colnames")) - } - } - } - return newColumns -} - -func (statement *Statement) colmap2NewColsWithQuote() []string { - newColumns := make([]string, len(statement.columnMap), len(statement.columnMap)) - copy(newColumns, statement.columnMap) - for i := 0; i < len(statement.columnMap); i++ { - newColumns[i] = statement.Engine.Quote(newColumns[i]) - } - return newColumns -} - -// Distinct generates "DISTINCT col1, col2 " statement -func (statement *Statement) Distinct(columns ...string) *Statement { - statement.IsDistinct = true - statement.Cols(columns...) - return statement -} - -// ForUpdate generates "SELECT ... FOR UPDATE" statement -func (statement *Statement) ForUpdate() *Statement { - statement.IsForUpdate = true - return statement -} - -// Select replace select -func (statement *Statement) Select(str string) *Statement { - statement.selectStr = str - return statement -} - -// Cols generate "col1, col2" statement -func (statement *Statement) Cols(columns ...string) *Statement { - cols := col2NewCols(columns...) - for _, nc := range cols { - statement.columnMap.add(nc) - } - - newColumns := statement.colmap2NewColsWithQuote() - - statement.ColumnStr = strings.Join(newColumns, ", ") - statement.ColumnStr = strings.Replace(statement.ColumnStr, statement.Engine.quote("*"), "*", -1) - return statement -} - -// AllCols update use only: update all columns -func (statement *Statement) AllCols() *Statement { - statement.useAllCols = true - return statement -} - -// MustCols update use only: must update columns -func (statement *Statement) MustCols(columns ...string) *Statement { - newColumns := col2NewCols(columns...) - for _, nc := range newColumns { - statement.mustColumnMap[strings.ToLower(nc)] = true - } - return statement -} - -// UseBool indicates that use bool fields as update contents and query contiditions -func (statement *Statement) UseBool(columns ...string) *Statement { - if len(columns) > 0 { - statement.MustCols(columns...) - } else { - statement.allUseBool = true - } - return statement -} - -// Omit do not use the columns -func (statement *Statement) Omit(columns ...string) { - newColumns := col2NewCols(columns...) - for _, nc := range newColumns { - statement.omitColumnMap = append(statement.omitColumnMap, nc) - } - statement.OmitStr = statement.Engine.Quote(strings.Join(newColumns, statement.Engine.Quote(", "))) -} - -// Nullable Update use only: update columns to null when value is nullable and zero-value -func (statement *Statement) Nullable(columns ...string) { - newColumns := col2NewCols(columns...) - for _, nc := range newColumns { - statement.nullableMap[strings.ToLower(nc)] = true - } -} - -// Top generate LIMIT limit statement -func (statement *Statement) Top(limit int) *Statement { - statement.Limit(limit) - return statement -} - -// Limit generate LIMIT start, limit statement -func (statement *Statement) Limit(limit int, start ...int) *Statement { - statement.LimitN = limit - if len(start) > 0 { - statement.Start = start[0] - } - return statement -} - -// OrderBy generate "Order By order" statement -func (statement *Statement) OrderBy(order string) *Statement { - if len(statement.OrderStr) > 0 { - statement.OrderStr += ", " - } - statement.OrderStr += order - return statement -} - -// Desc generate `ORDER BY xx DESC` -func (statement *Statement) Desc(colNames ...string) *Statement { - var buf bytes.Buffer - fmt.Fprintf(&buf, statement.OrderStr) - if len(statement.OrderStr) > 0 { - fmt.Fprint(&buf, ", ") - } - newColNames := statement.col2NewColsWithQuote(colNames...) - fmt.Fprintf(&buf, "%v DESC", strings.Join(newColNames, " DESC, ")) - statement.OrderStr = buf.String() - return statement -} - -// Asc provide asc order by query condition, the input parameters are columns. -func (statement *Statement) Asc(colNames ...string) *Statement { - var buf bytes.Buffer - fmt.Fprintf(&buf, statement.OrderStr) - if len(statement.OrderStr) > 0 { - fmt.Fprint(&buf, ", ") - } - newColNames := statement.col2NewColsWithQuote(colNames...) - fmt.Fprintf(&buf, "%v ASC", strings.Join(newColNames, " ASC, ")) - statement.OrderStr = buf.String() - return statement -} - -// Table tempororily set table name, the parameter could be a string or a pointer of struct -func (statement *Statement) Table(tableNameOrBean interface{}) *Statement { - v := rValue(tableNameOrBean) - t := v.Type() - if t.Kind() == reflect.Struct { - var err error - statement.RefTable, err = statement.Engine.autoMapType(v) - if err != nil { - statement.Engine.logger.Error(err) - return statement - } - } - - statement.AltTableName = statement.Engine.TableName(tableNameOrBean, true) - return statement -} - -// Join The joinOP should be one of INNER, LEFT OUTER, CROSS etc - this will be prepended to JOIN -func (statement *Statement) Join(joinOP string, tablename interface{}, condition string, args ...interface{}) *Statement { - var buf bytes.Buffer - if len(statement.JoinStr) > 0 { - fmt.Fprintf(&buf, "%v %v JOIN ", statement.JoinStr, joinOP) - } else { - fmt.Fprintf(&buf, "%v JOIN ", joinOP) - } - - tbName := statement.Engine.TableName(tablename, true) - - fmt.Fprintf(&buf, "%s ON %v", tbName, condition) - statement.JoinStr = buf.String() - statement.joinArgs = append(statement.joinArgs, args...) - return statement -} - -// GroupBy generate "Group By keys" statement -func (statement *Statement) GroupBy(keys string) *Statement { - statement.GroupByStr = keys - return statement -} - -// Having generate "Having conditions" statement -func (statement *Statement) Having(conditions string) *Statement { - statement.HavingStr = fmt.Sprintf("HAVING %v", conditions) - return statement -} - -// Unscoped always disable struct tag "deleted" -func (statement *Statement) Unscoped() *Statement { - statement.unscoped = true - return statement -} - -func (statement *Statement) genColumnStr() string { - var buf bytes.Buffer - if statement.RefTable == nil { - return "" - } - - columns := statement.RefTable.Columns() - - for _, col := range columns { - if statement.omitColumnMap.contain(col.Name) { - continue - } - - if len(statement.columnMap) > 0 && !statement.columnMap.contain(col.Name) { - continue - } - - if col.MapType == core.ONLYTODB { - continue - } - - if buf.Len() != 0 { - buf.WriteString(", ") - } - - if statement.JoinStr != "" { - if statement.TableAlias != "" { - buf.WriteString(statement.TableAlias) - } else { - buf.WriteString(statement.TableName()) - } - - buf.WriteString(".") - } - - statement.Engine.QuoteTo(&buf, col.Name) - } - - return buf.String() -} - -func (statement *Statement) genCreateTableSQL() string { - return statement.Engine.dialect.CreateTableSql(statement.RefTable, statement.TableName(), - statement.StoreEngine, statement.Charset) -} - -func (statement *Statement) genIndexSQL() []string { - var sqls []string - tbName := statement.TableName() - for _, index := range statement.RefTable.Indexes { - if index.Type == core.IndexType { - sql := statement.Engine.dialect.CreateIndexSql(tbName, index) - /*idxTBName := strings.Replace(tbName, ".", "_", -1) - idxTBName = strings.Replace(idxTBName, `"`, "", -1) - sql := fmt.Sprintf("CREATE INDEX %v ON %v (%v);", quote(indexName(idxTBName, idxName)), - quote(tbName), quote(strings.Join(index.Cols, quote(","))))*/ - sqls = append(sqls, sql) - } - } - return sqls -} - -func uniqueName(tableName, uqeName string) string { - return fmt.Sprintf("UQE_%v_%v", tableName, uqeName) -} - -func (statement *Statement) genUniqueSQL() []string { - var sqls []string - tbName := statement.TableName() - for _, index := range statement.RefTable.Indexes { - if index.Type == core.UniqueType { - sql := statement.Engine.dialect.CreateIndexSql(tbName, index) - sqls = append(sqls, sql) - } - } - return sqls -} - -func (statement *Statement) genDelIndexSQL() []string { - var sqls []string - tbName := statement.TableName() - idxPrefixName := strings.Replace(tbName, `"`, "", -1) - idxPrefixName = strings.Replace(idxPrefixName, `.`, "_", -1) - for idxName, index := range statement.RefTable.Indexes { - var rIdxName string - if index.Type == core.UniqueType { - rIdxName = uniqueName(idxPrefixName, idxName) - } else if index.Type == core.IndexType { - rIdxName = indexName(idxPrefixName, idxName) - } - sql := fmt.Sprintf("DROP INDEX %v", statement.Engine.Quote(statement.Engine.TableName(rIdxName, true))) - if statement.Engine.dialect.IndexOnTable() { - sql += fmt.Sprintf(" ON %v", statement.Engine.Quote(tbName)) - } - sqls = append(sqls, sql) - } - return sqls -} - -func (statement *Statement) genAddColumnStr(col *core.Column) (string, []interface{}) { - quote := statement.Engine.Quote - sql := fmt.Sprintf("ALTER TABLE %v ADD %v", quote(statement.TableName()), - col.String(statement.Engine.dialect)) - if statement.Engine.dialect.DBType() == core.MYSQL && len(col.Comment) > 0 { - sql += " COMMENT '" + col.Comment + "'" - } - sql += ";" - return sql, []interface{}{} -} - -func (statement *Statement) buildConds(table *core.Table, bean interface{}, includeVersion bool, includeUpdated bool, includeNil bool, includeAutoIncr bool, addedTableName bool) (builder.Cond, error) { - return statement.Engine.buildConds(table, bean, includeVersion, includeUpdated, includeNil, includeAutoIncr, statement.allUseBool, statement.useAllCols, - statement.unscoped, statement.mustColumnMap, statement.TableName(), statement.TableAlias, addedTableName) -} - -func (statement *Statement) mergeConds(bean interface{}) error { - if !statement.noAutoCondition { - var addedTableName = (len(statement.JoinStr) > 0) - autoCond, err := statement.buildConds(statement.RefTable, bean, true, true, false, true, addedTableName) - if err != nil { - return err - } - statement.cond = statement.cond.And(autoCond) - } - - if err := statement.processIDParam(); err != nil { - return err - } - return nil -} - -func (statement *Statement) genConds(bean interface{}) (string, []interface{}, error) { - if err := statement.mergeConds(bean); err != nil { - return "", nil, err - } - - return builder.ToSQL(statement.cond) -} - -func (statement *Statement) genGetSQL(bean interface{}) (string, []interface{}, error) { - v := rValue(bean) - isStruct := v.Kind() == reflect.Struct - if isStruct { - statement.setRefBean(bean) - } - - var columnStr = statement.ColumnStr - if len(statement.selectStr) > 0 { - columnStr = statement.selectStr - } else { - // TODO: always generate column names, not use * even if join - if len(statement.JoinStr) == 0 { - if len(columnStr) == 0 { - if len(statement.GroupByStr) > 0 { - columnStr = statement.Engine.Quote(strings.Replace(statement.GroupByStr, ",", statement.Engine.Quote(","), -1)) - } else { - columnStr = statement.genColumnStr() - } - } - } else { - if len(columnStr) == 0 { - if len(statement.GroupByStr) > 0 { - columnStr = statement.Engine.Quote(strings.Replace(statement.GroupByStr, ",", statement.Engine.Quote(","), -1)) - } - } - } - } - - if len(columnStr) == 0 { - columnStr = "*" - } - - if isStruct { - if err := statement.mergeConds(bean); err != nil { - return "", nil, err - } - } else { - if err := statement.processIDParam(); err != nil { - return "", nil, err - } - } - condSQL, condArgs, err := builder.ToSQL(statement.cond) - if err != nil { - return "", nil, err - } - - sqlStr, err := statement.genSelectSQL(columnStr, condSQL, true, true) - if err != nil { - return "", nil, err - } - - return sqlStr, append(statement.joinArgs, condArgs...), nil -} - -func (statement *Statement) genCountSQL(beans ...interface{}) (string, []interface{}, error) { - var condSQL string - var condArgs []interface{} - var err error - if len(beans) > 0 { - statement.setRefBean(beans[0]) - condSQL, condArgs, err = statement.genConds(beans[0]) - } else { - condSQL, condArgs, err = builder.ToSQL(statement.cond) - } - if err != nil { - return "", nil, err - } - - var selectSQL = statement.selectStr - if len(selectSQL) <= 0 { - if statement.IsDistinct { - selectSQL = fmt.Sprintf("count(DISTINCT %s)", statement.ColumnStr) - } else { - selectSQL = "count(*)" - } - } - sqlStr, err := statement.genSelectSQL(selectSQL, condSQL, false, false) - if err != nil { - return "", nil, err - } - - return sqlStr, append(statement.joinArgs, condArgs...), nil -} - -func (statement *Statement) genSumSQL(bean interface{}, columns ...string) (string, []interface{}, error) { - statement.setRefBean(bean) - - var sumStrs = make([]string, 0, len(columns)) - for _, colName := range columns { - if !strings.Contains(colName, " ") && !strings.Contains(colName, "(") { - colName = statement.Engine.Quote(colName) - } - sumStrs = append(sumStrs, fmt.Sprintf("COALESCE(sum(%s),0)", colName)) - } - sumSelect := strings.Join(sumStrs, ", ") - - condSQL, condArgs, err := statement.genConds(bean) - if err != nil { - return "", nil, err - } - - sqlStr, err := statement.genSelectSQL(sumSelect, condSQL, true, true) - if err != nil { - return "", nil, err - } - - return sqlStr, append(statement.joinArgs, condArgs...), nil -} - -func (statement *Statement) genSelectSQL(columnStr, condSQL string, needLimit, needOrderBy bool) (a string, err error) { - var distinct string - if statement.IsDistinct && !strings.HasPrefix(columnStr, "count") { - distinct = "DISTINCT " - } - - var dialect = statement.Engine.Dialect() - var quote = statement.Engine.Quote - var top string - var mssqlCondi string - - var buf bytes.Buffer - if len(condSQL) > 0 { - fmt.Fprintf(&buf, " WHERE %v", condSQL) - } - var whereStr = buf.String() - var fromStr = " FROM " - - if dialect.DBType() == core.MSSQL && strings.Contains(statement.TableName(), "..") { - fromStr += statement.TableName() - } else { - fromStr += quote(statement.TableName()) - } - - if statement.TableAlias != "" { - if dialect.DBType() == core.ORACLE { - fromStr += " " + quote(statement.TableAlias) - } else { - fromStr += " AS " + quote(statement.TableAlias) - } - } - if statement.JoinStr != "" { - fromStr = fmt.Sprintf("%v %v", fromStr, statement.JoinStr) - } - - if dialect.DBType() == core.MSSQL { - if statement.LimitN > 0 { - top = fmt.Sprintf(" TOP %d ", statement.LimitN) - } - if statement.Start > 0 { - var column string - if len(statement.RefTable.PKColumns()) == 0 { - for _, index := range statement.RefTable.Indexes { - if len(index.Cols) == 1 { - column = index.Cols[0] - break - } - } - if len(column) == 0 { - column = statement.RefTable.ColumnsSeq()[0] - } - } else { - column = statement.RefTable.PKColumns()[0].Name - } - if statement.needTableName() { - if len(statement.TableAlias) > 0 { - column = statement.TableAlias + "." + column - } else { - column = statement.TableName() + "." + column - } - } - - var orderStr string - if needOrderBy && len(statement.OrderStr) > 0 { - orderStr = " ORDER BY " + statement.OrderStr - } - - var groupStr string - if len(statement.GroupByStr) > 0 { - groupStr = " GROUP BY " + statement.GroupByStr - } - mssqlCondi = fmt.Sprintf("(%s NOT IN (SELECT TOP %d %s%s%s%s%s))", - column, statement.Start, column, fromStr, whereStr, orderStr, groupStr) - } - } - - // !nashtsai! REVIEW Sprintf is considered slowest mean of string concatnation, better to work with builder pattern - a = fmt.Sprintf("SELECT %v%v%v%v%v", distinct, top, columnStr, fromStr, whereStr) - if len(mssqlCondi) > 0 { - if len(whereStr) > 0 { - a += " AND " + mssqlCondi - } else { - a += " WHERE " + mssqlCondi - } - } - - if statement.GroupByStr != "" { - a = fmt.Sprintf("%v GROUP BY %v", a, statement.GroupByStr) - } - if statement.HavingStr != "" { - a = fmt.Sprintf("%v %v", a, statement.HavingStr) - } - if needOrderBy && statement.OrderStr != "" { - a = fmt.Sprintf("%v ORDER BY %v", a, statement.OrderStr) - } - if needLimit { - if dialect.DBType() != core.MSSQL && dialect.DBType() != core.ORACLE { - if statement.Start > 0 { - a = fmt.Sprintf("%v LIMIT %v OFFSET %v", a, statement.LimitN, statement.Start) - } else if statement.LimitN > 0 { - a = fmt.Sprintf("%v LIMIT %v", a, statement.LimitN) - } - } else if dialect.DBType() == core.ORACLE { - if statement.Start != 0 || statement.LimitN != 0 { - a = fmt.Sprintf("SELECT %v FROM (SELECT %v,ROWNUM RN FROM (%v) at WHERE ROWNUM <= %d) aat WHERE RN > %d", columnStr, columnStr, a, statement.Start+statement.LimitN, statement.Start) - } - } - } - if statement.IsForUpdate { - a = dialect.ForUpdateSql(a) - } - - return -} - -func (statement *Statement) processIDParam() error { - if statement.idParam == nil || statement.RefTable == nil { - return nil - } - - if len(statement.RefTable.PrimaryKeys) != len(*statement.idParam) { - return fmt.Errorf("ID condition is error, expect %d primarykeys, there are %d", - len(statement.RefTable.PrimaryKeys), - len(*statement.idParam), - ) - } - - for i, col := range statement.RefTable.PKColumns() { - var colName = statement.colName(col, statement.TableName()) - statement.cond = statement.cond.And(builder.Eq{colName: (*(statement.idParam))[i]}) - } - return nil -} - -func (statement *Statement) joinColumns(cols []*core.Column, includeTableName bool) string { - var colnames = make([]string, len(cols)) - for i, col := range cols { - if includeTableName { - colnames[i] = statement.Engine.Quote(statement.TableName()) + - "." + statement.Engine.Quote(col.Name) - } else { - colnames[i] = statement.Engine.Quote(col.Name) - } - } - return strings.Join(colnames, ", ") -} - -func (statement *Statement) convertIDSQL(sqlStr string) string { - if statement.RefTable != nil { - cols := statement.RefTable.PKColumns() - if len(cols) == 0 { - return "" - } - - colstrs := statement.joinColumns(cols, false) - sqls := splitNNoCase(sqlStr, " from ", 2) - if len(sqls) != 2 { - return "" - } - - var top string - if statement.LimitN > 0 && statement.Engine.dialect.DBType() == core.MSSQL { - top = fmt.Sprintf("TOP %d ", statement.LimitN) - } - - newsql := fmt.Sprintf("SELECT %s%s FROM %v", top, colstrs, sqls[1]) - return newsql - } - return "" -} - -func (statement *Statement) convertUpdateSQL(sqlStr string) (string, string) { - if statement.RefTable == nil || len(statement.RefTable.PrimaryKeys) != 1 { - return "", "" - } - - colstrs := statement.joinColumns(statement.RefTable.PKColumns(), true) - sqls := splitNNoCase(sqlStr, "where", 2) - if len(sqls) != 2 { - if len(sqls) == 1 { - return sqls[0], fmt.Sprintf("SELECT %v FROM %v", - colstrs, statement.Engine.Quote(statement.TableName())) - } - return "", "" - } - - var whereStr = sqls[1] - - //TODO: for postgres only, if any other database? - var paraStr string - if statement.Engine.dialect.DBType() == core.POSTGRES { - paraStr = "$" - } else if statement.Engine.dialect.DBType() == core.MSSQL { - paraStr = ":" - } - - if paraStr != "" { - if strings.Contains(sqls[1], paraStr) { - dollers := strings.Split(sqls[1], paraStr) - whereStr = dollers[0] - for i, c := range dollers[1:] { - ccs := strings.SplitN(c, " ", 2) - whereStr += fmt.Sprintf(paraStr+"%v %v", i+1, ccs[1]) - } - } - } - - return sqls[0], fmt.Sprintf("SELECT %v FROM %v WHERE %v", - colstrs, statement.Engine.Quote(statement.TableName()), - whereStr) -} diff --git a/vendor/github.com/go-xorm/xorm/syslogger.go b/vendor/github.com/go-xorm/xorm/syslogger.go deleted file mode 100644 index 8840635d4..000000000 --- a/vendor/github.com/go-xorm/xorm/syslogger.go +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2015 The Xorm Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !windows,!nacl,!plan9 - -package xorm - -import ( - "fmt" - "log/syslog" - - "github.com/go-xorm/core" -) - -var _ core.ILogger = &SyslogLogger{} - -// SyslogLogger will be depricated -type SyslogLogger struct { - w *syslog.Writer - showSQL bool -} - -// NewSyslogLogger implements core.ILogger -func NewSyslogLogger(w *syslog.Writer) *SyslogLogger { - return &SyslogLogger{w: w} -} - -// Debug log content as Debug -func (s *SyslogLogger) Debug(v ...interface{}) { - s.w.Debug(fmt.Sprint(v...)) -} - -// Debugf log content as Debug and format -func (s *SyslogLogger) Debugf(format string, v ...interface{}) { - s.w.Debug(fmt.Sprintf(format, v...)) -} - -// Error log content as Error -func (s *SyslogLogger) Error(v ...interface{}) { - s.w.Err(fmt.Sprint(v...)) -} - -// Errorf log content as Errorf and format -func (s *SyslogLogger) Errorf(format string, v ...interface{}) { - s.w.Err(fmt.Sprintf(format, v...)) -} - -// Info log content as Info -func (s *SyslogLogger) Info(v ...interface{}) { - s.w.Info(fmt.Sprint(v...)) -} - -// Infof log content as Infof and format -func (s *SyslogLogger) Infof(format string, v ...interface{}) { - s.w.Info(fmt.Sprintf(format, v...)) -} - -// Warn log content as Warn -func (s *SyslogLogger) Warn(v ...interface{}) { - s.w.Warning(fmt.Sprint(v...)) -} - -// Warnf log content as Warnf and format -func (s *SyslogLogger) Warnf(format string, v ...interface{}) { - s.w.Warning(fmt.Sprintf(format, v...)) -} - -// Level shows log level -func (s *SyslogLogger) Level() core.LogLevel { - return core.LOG_UNKNOWN -} - -// SetLevel always return error, as current log/syslog package doesn't allow to set priority level after syslog.Writer created -func (s *SyslogLogger) SetLevel(l core.LogLevel) {} - -// ShowSQL set if logging SQL -func (s *SyslogLogger) ShowSQL(show ...bool) { - if len(show) == 0 { - s.showSQL = true - return - } - s.showSQL = show[0] -} - -// IsShowSQL if logging SQL -func (s *SyslogLogger) IsShowSQL() bool { - return s.showSQL -} diff --git a/vendor/github.com/go-xorm/xorm/tag.go b/vendor/github.com/go-xorm/xorm/tag.go deleted file mode 100644 index e1c821fb5..000000000 --- a/vendor/github.com/go-xorm/xorm/tag.go +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright 2017 The Xorm 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 xorm - -import ( - "fmt" - "reflect" - "strconv" - "strings" - "time" - - "github.com/go-xorm/core" -) - -type tagContext struct { - tagName string - params []string - preTag, nextTag string - table *core.Table - col *core.Column - fieldValue reflect.Value - isIndex bool - isUnique bool - indexNames map[string]int - engine *Engine - hasCacheTag bool - hasNoCacheTag bool - ignoreNext bool -} - -// tagHandler describes tag handler for XORM -type tagHandler func(ctx *tagContext) error - -var ( - // defaultTagHandlers enumerates all the default tag handler - defaultTagHandlers = map[string]tagHandler{ - "<-": OnlyFromDBTagHandler, - "->": OnlyToDBTagHandler, - "PK": PKTagHandler, - "NULL": NULLTagHandler, - "NOT": IgnoreTagHandler, - "AUTOINCR": AutoIncrTagHandler, - "DEFAULT": DefaultTagHandler, - "CREATED": CreatedTagHandler, - "UPDATED": UpdatedTagHandler, - "DELETED": DeletedTagHandler, - "VERSION": VersionTagHandler, - "UTC": UTCTagHandler, - "LOCAL": LocalTagHandler, - "NOTNULL": NotNullTagHandler, - "INDEX": IndexTagHandler, - "UNIQUE": UniqueTagHandler, - "CACHE": CacheTagHandler, - "NOCACHE": NoCacheTagHandler, - "COMMENT": CommentTagHandler, - } -) - -func init() { - for k := range core.SqlTypes { - defaultTagHandlers[k] = SQLTypeTagHandler - } -} - -// IgnoreTagHandler describes ignored tag handler -func IgnoreTagHandler(ctx *tagContext) error { - return nil -} - -// OnlyFromDBTagHandler describes mapping direction tag handler -func OnlyFromDBTagHandler(ctx *tagContext) error { - ctx.col.MapType = core.ONLYFROMDB - return nil -} - -// OnlyToDBTagHandler describes mapping direction tag handler -func OnlyToDBTagHandler(ctx *tagContext) error { - ctx.col.MapType = core.ONLYTODB - return nil -} - -// PKTagHandler decribes primary key tag handler -func PKTagHandler(ctx *tagContext) error { - ctx.col.IsPrimaryKey = true - ctx.col.Nullable = false - return nil -} - -// NULLTagHandler describes null tag handler -func NULLTagHandler(ctx *tagContext) error { - ctx.col.Nullable = (strings.ToUpper(ctx.preTag) != "NOT") - return nil -} - -// NotNullTagHandler describes notnull tag handler -func NotNullTagHandler(ctx *tagContext) error { - ctx.col.Nullable = false - return nil -} - -// AutoIncrTagHandler describes autoincr tag handler -func AutoIncrTagHandler(ctx *tagContext) error { - ctx.col.IsAutoIncrement = true - /* - if len(ctx.params) > 0 { - autoStartInt, err := strconv.Atoi(ctx.params[0]) - if err != nil { - return err - } - ctx.col.AutoIncrStart = autoStartInt - } else { - ctx.col.AutoIncrStart = 1 - } - */ - return nil -} - -// DefaultTagHandler describes default tag handler -func DefaultTagHandler(ctx *tagContext) error { - if len(ctx.params) > 0 { - ctx.col.Default = ctx.params[0] - } else { - ctx.col.Default = ctx.nextTag - ctx.ignoreNext = true - } - return nil -} - -// CreatedTagHandler describes created tag handler -func CreatedTagHandler(ctx *tagContext) error { - ctx.col.IsCreated = true - return nil -} - -// VersionTagHandler describes version tag handler -func VersionTagHandler(ctx *tagContext) error { - ctx.col.IsVersion = true - ctx.col.Default = "1" - return nil -} - -// UTCTagHandler describes utc tag handler -func UTCTagHandler(ctx *tagContext) error { - ctx.col.TimeZone = time.UTC - return nil -} - -// LocalTagHandler describes local tag handler -func LocalTagHandler(ctx *tagContext) error { - if len(ctx.params) == 0 { - ctx.col.TimeZone = time.Local - } else { - var err error - ctx.col.TimeZone, err = time.LoadLocation(ctx.params[0]) - if err != nil { - return err - } - } - return nil -} - -// UpdatedTagHandler describes updated tag handler -func UpdatedTagHandler(ctx *tagContext) error { - ctx.col.IsUpdated = true - return nil -} - -// DeletedTagHandler describes deleted tag handler -func DeletedTagHandler(ctx *tagContext) error { - ctx.col.IsDeleted = true - return nil -} - -// IndexTagHandler describes index tag handler -func IndexTagHandler(ctx *tagContext) error { - if len(ctx.params) > 0 { - ctx.indexNames[ctx.params[0]] = core.IndexType - } else { - ctx.isIndex = true - } - return nil -} - -// UniqueTagHandler describes unique tag handler -func UniqueTagHandler(ctx *tagContext) error { - if len(ctx.params) > 0 { - ctx.indexNames[ctx.params[0]] = core.UniqueType - } else { - ctx.isUnique = true - } - return nil -} - -// CommentTagHandler add comment to column -func CommentTagHandler(ctx *tagContext) error { - if len(ctx.params) > 0 { - ctx.col.Comment = strings.Trim(ctx.params[0], "' ") - } - return nil -} - -// SQLTypeTagHandler describes SQL Type tag handler -func SQLTypeTagHandler(ctx *tagContext) error { - ctx.col.SQLType = core.SQLType{Name: ctx.tagName} - if len(ctx.params) > 0 { - if ctx.tagName == core.Enum { - ctx.col.EnumOptions = make(map[string]int) - for k, v := range ctx.params { - v = strings.TrimSpace(v) - v = strings.Trim(v, "'") - ctx.col.EnumOptions[v] = k - } - } else if ctx.tagName == core.Set { - ctx.col.SetOptions = make(map[string]int) - for k, v := range ctx.params { - v = strings.TrimSpace(v) - v = strings.Trim(v, "'") - ctx.col.SetOptions[v] = k - } - } else { - var err error - if len(ctx.params) == 2 { - ctx.col.Length, err = strconv.Atoi(ctx.params[0]) - if err != nil { - return err - } - ctx.col.Length2, err = strconv.Atoi(ctx.params[1]) - if err != nil { - return err - } - } else if len(ctx.params) == 1 { - ctx.col.Length, err = strconv.Atoi(ctx.params[0]) - if err != nil { - return err - } - } - } - } - return nil -} - -// ExtendsTagHandler describes extends tag handler -func ExtendsTagHandler(ctx *tagContext) error { - var fieldValue = ctx.fieldValue - switch fieldValue.Kind() { - case reflect.Ptr: - f := fieldValue.Type().Elem() - if f.Kind() == reflect.Struct { - fieldPtr := fieldValue - fieldValue = fieldValue.Elem() - if !fieldValue.IsValid() || fieldPtr.IsNil() { - fieldValue = reflect.New(f).Elem() - } - } - fallthrough - case reflect.Struct: - parentTable, err := ctx.engine.mapType(fieldValue) - if err != nil { - return err - } - for _, col := range parentTable.Columns() { - col.FieldName = fmt.Sprintf("%v.%v", ctx.col.FieldName, col.FieldName) - ctx.table.AddColumn(col) - for indexName, indexType := range col.Indexes { - addIndex(indexName, ctx.table, col, indexType) - } - } - default: - //TODO: warning - } - return nil -} - -// CacheTagHandler describes cache tag handler -func CacheTagHandler(ctx *tagContext) error { - if !ctx.hasCacheTag { - ctx.hasCacheTag = true - } - return nil -} - -// NoCacheTagHandler describes nocache tag handler -func NoCacheTagHandler(ctx *tagContext) error { - if !ctx.hasNoCacheTag { - ctx.hasNoCacheTag = true - } - return nil -} diff --git a/vendor/github.com/go-xorm/xorm/test_mssql.sh b/vendor/github.com/go-xorm/xorm/test_mssql.sh deleted file mode 100755 index 6f9cf7295..000000000 --- a/vendor/github.com/go-xorm/xorm/test_mssql.sh +++ /dev/null @@ -1 +0,0 @@ -go test -db=mssql -conn_str="server=192.168.1.58;user id=sa;password=123456;database=xorm_test" \ No newline at end of file diff --git a/vendor/github.com/go-xorm/xorm/test_mssql_cache.sh b/vendor/github.com/go-xorm/xorm/test_mssql_cache.sh deleted file mode 100755 index 76efd6ca0..000000000 --- a/vendor/github.com/go-xorm/xorm/test_mssql_cache.sh +++ /dev/null @@ -1 +0,0 @@ -go test -db=mssql -conn_str="server=192.168.1.58;user id=sa;password=123456;database=xorm_test" -cache=true \ No newline at end of file diff --git a/vendor/github.com/go-xorm/xorm/test_mymysql.sh b/vendor/github.com/go-xorm/xorm/test_mymysql.sh deleted file mode 100755 index f7780d14f..000000000 --- a/vendor/github.com/go-xorm/xorm/test_mymysql.sh +++ /dev/null @@ -1 +0,0 @@ -go test -db=mymysql -conn_str="xorm_test/root/" \ No newline at end of file diff --git a/vendor/github.com/go-xorm/xorm/test_mymysql_cache.sh b/vendor/github.com/go-xorm/xorm/test_mymysql_cache.sh deleted file mode 100755 index 0100286d6..000000000 --- a/vendor/github.com/go-xorm/xorm/test_mymysql_cache.sh +++ /dev/null @@ -1 +0,0 @@ -go test -db=mymysql -conn_str="xorm_test/root/" -cache=true \ No newline at end of file diff --git a/vendor/github.com/go-xorm/xorm/test_mysql.sh b/vendor/github.com/go-xorm/xorm/test_mysql.sh deleted file mode 100755 index 650e4ee17..000000000 --- a/vendor/github.com/go-xorm/xorm/test_mysql.sh +++ /dev/null @@ -1 +0,0 @@ -go test -db=mysql -conn_str="root:@/xorm_test" \ No newline at end of file diff --git a/vendor/github.com/go-xorm/xorm/test_mysql_cache.sh b/vendor/github.com/go-xorm/xorm/test_mysql_cache.sh deleted file mode 100755 index c542e7359..000000000 --- a/vendor/github.com/go-xorm/xorm/test_mysql_cache.sh +++ /dev/null @@ -1 +0,0 @@ -go test -db=mysql -conn_str="root:@/xorm_test" -cache=true \ No newline at end of file diff --git a/vendor/github.com/go-xorm/xorm/test_postgres.sh b/vendor/github.com/go-xorm/xorm/test_postgres.sh deleted file mode 100755 index dc1152e0a..000000000 --- a/vendor/github.com/go-xorm/xorm/test_postgres.sh +++ /dev/null @@ -1 +0,0 @@ -go test -db=postgres -conn_str="dbname=xorm_test sslmode=disable" \ No newline at end of file diff --git a/vendor/github.com/go-xorm/xorm/test_postgres_cache.sh b/vendor/github.com/go-xorm/xorm/test_postgres_cache.sh deleted file mode 100755 index 462fc948c..000000000 --- a/vendor/github.com/go-xorm/xorm/test_postgres_cache.sh +++ /dev/null @@ -1 +0,0 @@ -go test -db=postgres -conn_str="dbname=xorm_test sslmode=disable" -cache=true \ No newline at end of file diff --git a/vendor/github.com/go-xorm/xorm/test_sqlite.sh b/vendor/github.com/go-xorm/xorm/test_sqlite.sh deleted file mode 100755 index 6352b5cb5..000000000 --- a/vendor/github.com/go-xorm/xorm/test_sqlite.sh +++ /dev/null @@ -1 +0,0 @@ -go test -db=sqlite3 -conn_str="./test.db?cache=shared&mode=rwc" \ No newline at end of file diff --git a/vendor/github.com/go-xorm/xorm/test_sqlite_cache.sh b/vendor/github.com/go-xorm/xorm/test_sqlite_cache.sh deleted file mode 100755 index 75a054c3f..000000000 --- a/vendor/github.com/go-xorm/xorm/test_sqlite_cache.sh +++ /dev/null @@ -1 +0,0 @@ -go test -db=sqlite3 -conn_str="./test.db?cache=shared&mode=rwc" -cache=true \ No newline at end of file diff --git a/vendor/github.com/go-xorm/xorm/types.go b/vendor/github.com/go-xorm/xorm/types.go deleted file mode 100644 index 99d761c27..000000000 --- a/vendor/github.com/go-xorm/xorm/types.go +++ /dev/null @@ -1,12 +0,0 @@ -package xorm - -import ( - "reflect" - - "github.com/go-xorm/core" -) - -var ( - ptrPkType = reflect.TypeOf(&core.PK{}) - pkType = reflect.TypeOf(core.PK{}) -) diff --git a/vendor/github.com/go-xorm/xorm/xorm.go b/vendor/github.com/go-xorm/xorm/xorm.go deleted file mode 100644 index 141c4897d..000000000 --- a/vendor/github.com/go-xorm/xorm/xorm.go +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2015 The Xorm 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 xorm - -import ( - "fmt" - "os" - "reflect" - "runtime" - "sync" - "time" - - "github.com/go-xorm/core" -) - -const ( - // Version show the xorm's version - Version string = "0.7.0.0504" -) - -func regDrvsNDialects() bool { - providedDrvsNDialects := map[string]struct { - dbType core.DbType - getDriver func() core.Driver - getDialect func() core.Dialect - }{ - "mssql": {"mssql", func() core.Driver { return &odbcDriver{} }, func() core.Dialect { return &mssql{} }}, - "odbc": {"mssql", func() core.Driver { return &odbcDriver{} }, func() core.Dialect { return &mssql{} }}, // !nashtsai! TODO change this when supporting MS Access - "mysql": {"mysql", func() core.Driver { return &mysqlDriver{} }, func() core.Dialect { return &mysql{} }}, - "mymysql": {"mysql", func() core.Driver { return &mymysqlDriver{} }, func() core.Dialect { return &mysql{} }}, - "postgres": {"postgres", func() core.Driver { return &pqDriver{} }, func() core.Dialect { return &postgres{} }}, - "pgx": {"postgres", func() core.Driver { return &pqDriverPgx{} }, func() core.Dialect { return &postgres{} }}, - "sqlite3": {"sqlite3", func() core.Driver { return &sqlite3Driver{} }, func() core.Dialect { return &sqlite3{} }}, - "oci8": {"oracle", func() core.Driver { return &oci8Driver{} }, func() core.Dialect { return &oracle{} }}, - "goracle": {"oracle", func() core.Driver { return &goracleDriver{} }, func() core.Dialect { return &oracle{} }}, - } - - for driverName, v := range providedDrvsNDialects { - if driver := core.QueryDriver(driverName); driver == nil { - core.RegisterDriver(driverName, v.getDriver()) - core.RegisterDialect(v.dbType, v.getDialect) - } - } - return true -} - -func close(engine *Engine) { - engine.Close() -} - -func init() { - regDrvsNDialects() -} - -// NewEngine new a db manager according to the parameter. Currently support four -// drivers -func NewEngine(driverName string, dataSourceName string) (*Engine, error) { - driver := core.QueryDriver(driverName) - if driver == nil { - return nil, fmt.Errorf("Unsupported driver name: %v", driverName) - } - - uri, err := driver.Parse(driverName, dataSourceName) - if err != nil { - return nil, err - } - - dialect := core.QueryDialect(uri.DbType) - if dialect == nil { - return nil, fmt.Errorf("Unsupported dialect type: %v", uri.DbType) - } - - db, err := core.Open(driverName, dataSourceName) - if err != nil { - return nil, err - } - - err = dialect.Init(db, uri, driverName, dataSourceName) - if err != nil { - return nil, err - } - - engine := &Engine{ - db: db, - dialect: dialect, - Tables: make(map[reflect.Type]*core.Table), - mutex: &sync.RWMutex{}, - TagIdentifier: "xorm", - TZLocation: time.Local, - tagHandlers: defaultTagHandlers, - cachers: make(map[string]core.Cacher), - } - - if uri.DbType == core.SQLITE { - engine.DatabaseTZ = time.UTC - } else { - engine.DatabaseTZ = time.Local - } - - logger := NewSimpleLogger(os.Stdout) - logger.SetLevel(core.LOG_INFO) - engine.SetLogger(logger) - engine.SetMapper(core.NewCacheMapper(new(core.SnakeMapper))) - - runtime.SetFinalizer(engine, close) - - return engine, nil -} - -// NewEngineWithParams new a db manager with params. The params will be passed to dialect. -func NewEngineWithParams(driverName string, dataSourceName string, params map[string]string) (*Engine, error) { - engine, err := NewEngine(driverName, dataSourceName) - engine.dialect.SetParams(params) - return engine, err -} - -// Clone clone an engine -func (engine *Engine) Clone() (*Engine, error) { - return NewEngine(engine.DriverName(), engine.DataSourceName()) -} diff --git a/vendor/github.com/gogs/chardet/2022.go b/vendor/github.com/gogs/chardet/2022.go deleted file mode 100644 index e667225e5..000000000 --- a/vendor/github.com/gogs/chardet/2022.go +++ /dev/null @@ -1,102 +0,0 @@ -package chardet - -import ( - "bytes" -) - -type recognizer2022 struct { - charset string - escapes [][]byte -} - -func (r *recognizer2022) Match(input *recognizerInput) (output recognizerOutput) { - return recognizerOutput{ - Charset: r.charset, - Confidence: r.matchConfidence(input.input), - } -} - -func (r *recognizer2022) matchConfidence(input []byte) int { - var hits, misses, shifts int -input: - for i := 0; i < len(input); i++ { - c := input[i] - if c == 0x1B { - for _, esc := range r.escapes { - if bytes.HasPrefix(input[i+1:], esc) { - hits++ - i += len(esc) - continue input - } - } - misses++ - } else if c == 0x0E || c == 0x0F { - shifts++ - } - } - if hits == 0 { - return 0 - } - quality := (100*hits - 100*misses) / (hits + misses) - if hits+shifts < 5 { - quality -= (5 - (hits + shifts)) * 10 - } - if quality < 0 { - quality = 0 - } - return quality -} - -var escapeSequences_2022JP = [][]byte{ - {0x24, 0x28, 0x43}, // KS X 1001:1992 - {0x24, 0x28, 0x44}, // JIS X 212-1990 - {0x24, 0x40}, // JIS C 6226-1978 - {0x24, 0x41}, // GB 2312-80 - {0x24, 0x42}, // JIS X 208-1983 - {0x26, 0x40}, // JIS X 208 1990, 1997 - {0x28, 0x42}, // ASCII - {0x28, 0x48}, // JIS-Roman - {0x28, 0x49}, // Half-width katakana - {0x28, 0x4a}, // JIS-Roman - {0x2e, 0x41}, // ISO 8859-1 - {0x2e, 0x46}, // ISO 8859-7 -} - -var escapeSequences_2022KR = [][]byte{ - {0x24, 0x29, 0x43}, -} - -var escapeSequences_2022CN = [][]byte{ - {0x24, 0x29, 0x41}, // GB 2312-80 - {0x24, 0x29, 0x47}, // CNS 11643-1992 Plane 1 - {0x24, 0x2A, 0x48}, // CNS 11643-1992 Plane 2 - {0x24, 0x29, 0x45}, // ISO-IR-165 - {0x24, 0x2B, 0x49}, // CNS 11643-1992 Plane 3 - {0x24, 0x2B, 0x4A}, // CNS 11643-1992 Plane 4 - {0x24, 0x2B, 0x4B}, // CNS 11643-1992 Plane 5 - {0x24, 0x2B, 0x4C}, // CNS 11643-1992 Plane 6 - {0x24, 0x2B, 0x4D}, // CNS 11643-1992 Plane 7 - {0x4e}, // SS2 - {0x4f}, // SS3 -} - -func newRecognizer_2022JP() *recognizer2022 { - return &recognizer2022{ - "ISO-2022-JP", - escapeSequences_2022JP, - } -} - -func newRecognizer_2022KR() *recognizer2022 { - return &recognizer2022{ - "ISO-2022-KR", - escapeSequences_2022KR, - } -} - -func newRecognizer_2022CN() *recognizer2022 { - return &recognizer2022{ - "ISO-2022-CN", - escapeSequences_2022CN, - } -} diff --git a/vendor/github.com/gogs/chardet/AUTHORS b/vendor/github.com/gogs/chardet/AUTHORS deleted file mode 100644 index 842d0216d..000000000 --- a/vendor/github.com/gogs/chardet/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Sheng Yu (yusheng dot sjtu at gmail dot com) diff --git a/vendor/github.com/gogs/chardet/LICENSE b/vendor/github.com/gogs/chardet/LICENSE deleted file mode 100644 index 35ee796b9..000000000 --- a/vendor/github.com/gogs/chardet/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 chardet Authors - -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. - -Partial of the Software is derived from ICU project. See icu-license.html for -license of the derivative portions. diff --git a/vendor/github.com/gogs/chardet/README.md b/vendor/github.com/gogs/chardet/README.md deleted file mode 100644 index bbde23fb7..000000000 --- a/vendor/github.com/gogs/chardet/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# chardet - -chardet is library to automatically detect -[charset](http://en.wikipedia.org/wiki/Character_encoding) of texts for [Go -programming language](http://golang.org/). It's based on the algorithm and data -in [ICU](http://icu-project.org/)'s implementation. - -The project was created by [saintfish](http://github.com/saintfish/chardet). In January 2015 it was forked by the gogits project in order to incorporate bugfixes and new features. - -## Documentation and Usage - -See [pkgdoc](http://godoc.org/github.com/gogits/chardet) diff --git a/vendor/github.com/gogs/chardet/detector.go b/vendor/github.com/gogs/chardet/detector.go deleted file mode 100644 index e11c222e4..000000000 --- a/vendor/github.com/gogs/chardet/detector.go +++ /dev/null @@ -1,136 +0,0 @@ -// Package chardet ports character set detection from ICU. -package chardet - -import ( - "errors" - "sort" -) - -// Result contains all the information that charset detector gives. -type Result struct { - // IANA name of the detected charset. - Charset string - // IANA name of the detected language. It may be empty for some charsets. - Language string - // Confidence of the Result. Scale from 1 to 100. The bigger, the more confident. - Confidence int -} - -// Detector implements charset detection. -type Detector struct { - recognizers []recognizer - stripTag bool -} - -// List of charset recognizers -var recognizers = []recognizer{ - newRecognizer_utf8(), - newRecognizer_utf16be(), - newRecognizer_utf16le(), - newRecognizer_utf32be(), - newRecognizer_utf32le(), - newRecognizer_8859_1_en(), - newRecognizer_8859_1_da(), - newRecognizer_8859_1_de(), - newRecognizer_8859_1_es(), - newRecognizer_8859_1_fr(), - newRecognizer_8859_1_it(), - newRecognizer_8859_1_nl(), - newRecognizer_8859_1_no(), - newRecognizer_8859_1_pt(), - newRecognizer_8859_1_sv(), - newRecognizer_8859_2_cs(), - newRecognizer_8859_2_hu(), - newRecognizer_8859_2_pl(), - newRecognizer_8859_2_ro(), - newRecognizer_8859_5_ru(), - newRecognizer_8859_6_ar(), - newRecognizer_8859_7_el(), - newRecognizer_8859_8_I_he(), - newRecognizer_8859_8_he(), - newRecognizer_windows_1251(), - newRecognizer_windows_1256(), - newRecognizer_KOI8_R(), - newRecognizer_8859_9_tr(), - - newRecognizer_sjis(), - newRecognizer_gb_18030(), - newRecognizer_euc_jp(), - newRecognizer_euc_kr(), - newRecognizer_big5(), - - newRecognizer_2022JP(), - newRecognizer_2022KR(), - newRecognizer_2022CN(), - - newRecognizer_IBM424_he_rtl(), - newRecognizer_IBM424_he_ltr(), - newRecognizer_IBM420_ar_rtl(), - newRecognizer_IBM420_ar_ltr(), -} - -// NewTextDetector creates a Detector for plain text. -func NewTextDetector() *Detector { - return &Detector{recognizers, false} -} - -// NewHtmlDetector creates a Detector for Html. -func NewHtmlDetector() *Detector { - return &Detector{recognizers, true} -} - -var ( - NotDetectedError = errors.New("Charset not detected.") -) - -// DetectBest returns the Result with highest Confidence. -func (d *Detector) DetectBest(b []byte) (r *Result, err error) { - var all []Result - if all, err = d.DetectAll(b); err == nil { - r = &all[0] - } - return -} - -// DetectAll returns all Results which have non-zero Confidence. The Results are sorted by Confidence in descending order. -func (d *Detector) DetectAll(b []byte) ([]Result, error) { - input := newRecognizerInput(b, d.stripTag) - outputChan := make(chan recognizerOutput) - for _, r := range d.recognizers { - go matchHelper(r, input, outputChan) - } - outputs := make([]recognizerOutput, 0, len(d.recognizers)) - for i := 0; i < len(d.recognizers); i++ { - o := <-outputChan - if o.Confidence > 0 { - outputs = append(outputs, o) - } - } - if len(outputs) == 0 { - return nil, NotDetectedError - } - - sort.Sort(recognizerOutputs(outputs)) - dedupOutputs := make([]Result, 0, len(outputs)) - foundCharsets := make(map[string]struct{}, len(outputs)) - for _, o := range outputs { - if _, found := foundCharsets[o.Charset]; !found { - dedupOutputs = append(dedupOutputs, Result(o)) - foundCharsets[o.Charset] = struct{}{} - } - } - if len(dedupOutputs) == 0 { - return nil, NotDetectedError - } - return dedupOutputs, nil -} - -func matchHelper(r recognizer, input *recognizerInput, outputChan chan<- recognizerOutput) { - outputChan <- r.Match(input) -} - -type recognizerOutputs []recognizerOutput - -func (r recognizerOutputs) Len() int { return len(r) } -func (r recognizerOutputs) Less(i, j int) bool { return r[i].Confidence > r[j].Confidence } -func (r recognizerOutputs) Swap(i, j int) { r[i], r[j] = r[j], r[i] } diff --git a/vendor/github.com/gogs/chardet/icu-license.html b/vendor/github.com/gogs/chardet/icu-license.html deleted file mode 100644 index d078d0575..000000000 --- a/vendor/github.com/gogs/chardet/icu-license.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - -ICU License - ICU 1.8.1 and later - - - -

ICU License - ICU 1.8.1 and later

- -

COPYRIGHT AND PERMISSION NOTICE

- -

-Copyright (c) 1995-2012 International Business Machines Corporation and others -

-

-All rights reserved. -

-

-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, and/or sell -copies of the Software, and to permit persons -to whom the Software is furnished to do so, provided that the above -copyright notice(s) and this permission notice appear in all copies -of the Software and that both the above copyright notice(s) and this -permission notice appear in supporting documentation. -

-

-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 OF THIRD PARTY RIGHTS. IN NO EVENT SHALL -THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, -OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE -USE OR PERFORMANCE OF THIS SOFTWARE. -

-

-Except as contained in this notice, the name of a copyright holder shall not be -used in advertising or otherwise to promote the sale, use or other dealings in -this Software without prior written authorization of the copyright holder. -

- -
-

-All trademarks and registered trademarks mentioned herein are the property of their respective owners. -

- - diff --git a/vendor/github.com/gogs/chardet/multi_byte.go b/vendor/github.com/gogs/chardet/multi_byte.go deleted file mode 100644 index b5cdf3d6d..000000000 --- a/vendor/github.com/gogs/chardet/multi_byte.go +++ /dev/null @@ -1,345 +0,0 @@ -package chardet - -import ( - "errors" - "math" -) - -type recognizerMultiByte struct { - charset string - language string - decoder charDecoder - commonChars []uint16 -} - -type charDecoder interface { - DecodeOneChar([]byte) (c uint16, remain []byte, err error) -} - -func (r *recognizerMultiByte) Match(input *recognizerInput) (output recognizerOutput) { - return recognizerOutput{ - Charset: r.charset, - Language: r.language, - Confidence: r.matchConfidence(input), - } -} - -func (r *recognizerMultiByte) matchConfidence(input *recognizerInput) int { - raw := input.raw - var c uint16 - var err error - var totalCharCount, badCharCount, singleByteCharCount, doubleByteCharCount, commonCharCount int - for c, raw, err = r.decoder.DecodeOneChar(raw); len(raw) > 0; c, raw, err = r.decoder.DecodeOneChar(raw) { - totalCharCount++ - if err != nil { - badCharCount++ - } else if c <= 0xFF { - singleByteCharCount++ - } else { - doubleByteCharCount++ - if r.commonChars != nil && binarySearch(r.commonChars, c) { - commonCharCount++ - } - } - if badCharCount >= 2 && badCharCount*5 >= doubleByteCharCount { - return 0 - } - } - - if doubleByteCharCount <= 10 && badCharCount == 0 { - if doubleByteCharCount == 0 && totalCharCount < 10 { - return 0 - } else { - return 10 - } - } - - if doubleByteCharCount < 20*badCharCount { - return 0 - } - if r.commonChars == nil { - confidence := 30 + doubleByteCharCount - 20*badCharCount - if confidence > 100 { - confidence = 100 - } - return confidence - } - maxVal := math.Log(float64(doubleByteCharCount) / 4) - scaleFactor := 90 / maxVal - confidence := int(math.Log(float64(commonCharCount)+1)*scaleFactor + 10) - if confidence > 100 { - confidence = 100 - } - if confidence < 0 { - confidence = 0 - } - return confidence -} - -func binarySearch(l []uint16, c uint16) bool { - start := 0 - end := len(l) - 1 - for start <= end { - mid := (start + end) / 2 - if c == l[mid] { - return true - } else if c < l[mid] { - end = mid - 1 - } else { - start = mid + 1 - } - } - return false -} - -var eobError = errors.New("End of input buffer") -var badCharError = errors.New("Decode a bad char") - -type charDecoder_sjis struct { -} - -func (charDecoder_sjis) DecodeOneChar(input []byte) (c uint16, remain []byte, err error) { - if len(input) == 0 { - return 0, nil, eobError - } - first := input[0] - c = uint16(first) - remain = input[1:] - if first <= 0x7F || (first > 0xA0 && first <= 0xDF) { - return - } - if len(remain) == 0 { - return c, remain, badCharError - } - second := remain[0] - remain = remain[1:] - c = c<<8 | uint16(second) - if (second >= 0x40 && second <= 0x7F) || (second >= 0x80 && second <= 0xFE) { - } else { - err = badCharError - } - return -} - -var commonChars_sjis = []uint16{ - 0x8140, 0x8141, 0x8142, 0x8145, 0x815b, 0x8169, 0x816a, 0x8175, 0x8176, 0x82a0, - 0x82a2, 0x82a4, 0x82a9, 0x82aa, 0x82ab, 0x82ad, 0x82af, 0x82b1, 0x82b3, 0x82b5, - 0x82b7, 0x82bd, 0x82be, 0x82c1, 0x82c4, 0x82c5, 0x82c6, 0x82c8, 0x82c9, 0x82cc, - 0x82cd, 0x82dc, 0x82e0, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82f0, 0x82f1, 0x8341, - 0x8343, 0x834e, 0x834f, 0x8358, 0x835e, 0x8362, 0x8367, 0x8375, 0x8376, 0x8389, - 0x838a, 0x838b, 0x838d, 0x8393, 0x8e96, 0x93fa, 0x95aa, -} - -func newRecognizer_sjis() *recognizerMultiByte { - return &recognizerMultiByte{ - "Shift_JIS", - "ja", - charDecoder_sjis{}, - commonChars_sjis, - } -} - -type charDecoder_euc struct { -} - -func (charDecoder_euc) DecodeOneChar(input []byte) (c uint16, remain []byte, err error) { - if len(input) == 0 { - return 0, nil, eobError - } - first := input[0] - remain = input[1:] - c = uint16(first) - if first <= 0x8D { - return uint16(first), remain, nil - } - if len(remain) == 0 { - return 0, nil, eobError - } - second := remain[0] - remain = remain[1:] - c = c<<8 | uint16(second) - if first >= 0xA1 && first <= 0xFE { - if second < 0xA1 { - err = badCharError - } - return - } - if first == 0x8E { - if second < 0xA1 { - err = badCharError - } - return - } - if first == 0x8F { - if len(remain) == 0 { - return 0, nil, eobError - } - third := remain[0] - remain = remain[1:] - c = c<<0 | uint16(third) - if third < 0xa1 { - err = badCharError - } - } - return -} - -var commonChars_euc_jp = []uint16{ - 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a6, 0xa1bc, 0xa1ca, 0xa1cb, 0xa1d6, 0xa1d7, 0xa4a2, - 0xa4a4, 0xa4a6, 0xa4a8, 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4af, 0xa4b1, 0xa4b3, - 0xa4b5, 0xa4b7, 0xa4b9, 0xa4bb, 0xa4bd, 0xa4bf, 0xa4c0, 0xa4c1, 0xa4c3, 0xa4c4, - 0xa4c6, 0xa4c7, 0xa4c8, 0xa4c9, 0xa4ca, 0xa4cb, 0xa4ce, 0xa4cf, 0xa4d0, 0xa4de, - 0xa4df, 0xa4e1, 0xa4e2, 0xa4e4, 0xa4e8, 0xa4e9, 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ef, - 0xa4f2, 0xa4f3, 0xa5a2, 0xa5a3, 0xa5a4, 0xa5a6, 0xa5a7, 0xa5aa, 0xa5ad, 0xa5af, - 0xa5b0, 0xa5b3, 0xa5b5, 0xa5b7, 0xa5b8, 0xa5b9, 0xa5bf, 0xa5c3, 0xa5c6, 0xa5c7, - 0xa5c8, 0xa5c9, 0xa5cb, 0xa5d0, 0xa5d5, 0xa5d6, 0xa5d7, 0xa5de, 0xa5e0, 0xa5e1, - 0xa5e5, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5f3, 0xb8a9, 0xb9d4, 0xbaee, - 0xbbc8, 0xbef0, 0xbfb7, 0xc4ea, 0xc6fc, 0xc7bd, 0xcab8, 0xcaf3, 0xcbdc, 0xcdd1, -} - -var commonChars_euc_kr = []uint16{ - 0xb0a1, 0xb0b3, 0xb0c5, 0xb0cd, 0xb0d4, 0xb0e6, 0xb0ed, 0xb0f8, 0xb0fa, 0xb0fc, - 0xb1b8, 0xb1b9, 0xb1c7, 0xb1d7, 0xb1e2, 0xb3aa, 0xb3bb, 0xb4c2, 0xb4cf, 0xb4d9, - 0xb4eb, 0xb5a5, 0xb5b5, 0xb5bf, 0xb5c7, 0xb5e9, 0xb6f3, 0xb7af, 0xb7c2, 0xb7ce, - 0xb8a6, 0xb8ae, 0xb8b6, 0xb8b8, 0xb8bb, 0xb8e9, 0xb9ab, 0xb9ae, 0xb9cc, 0xb9ce, - 0xb9fd, 0xbab8, 0xbace, 0xbad0, 0xbaf1, 0xbbe7, 0xbbf3, 0xbbfd, 0xbcad, 0xbcba, - 0xbcd2, 0xbcf6, 0xbdba, 0xbdc0, 0xbdc3, 0xbdc5, 0xbec6, 0xbec8, 0xbedf, 0xbeee, - 0xbef8, 0xbefa, 0xbfa1, 0xbfa9, 0xbfc0, 0xbfe4, 0xbfeb, 0xbfec, 0xbff8, 0xc0a7, - 0xc0af, 0xc0b8, 0xc0ba, 0xc0bb, 0xc0bd, 0xc0c7, 0xc0cc, 0xc0ce, 0xc0cf, 0xc0d6, - 0xc0da, 0xc0e5, 0xc0fb, 0xc0fc, 0xc1a4, 0xc1a6, 0xc1b6, 0xc1d6, 0xc1df, 0xc1f6, - 0xc1f8, 0xc4a1, 0xc5cd, 0xc6ae, 0xc7cf, 0xc7d1, 0xc7d2, 0xc7d8, 0xc7e5, 0xc8ad, -} - -func newRecognizer_euc_jp() *recognizerMultiByte { - return &recognizerMultiByte{ - "EUC-JP", - "ja", - charDecoder_euc{}, - commonChars_euc_jp, - } -} - -func newRecognizer_euc_kr() *recognizerMultiByte { - return &recognizerMultiByte{ - "EUC-KR", - "ko", - charDecoder_euc{}, - commonChars_euc_kr, - } -} - -type charDecoder_big5 struct { -} - -func (charDecoder_big5) DecodeOneChar(input []byte) (c uint16, remain []byte, err error) { - if len(input) == 0 { - return 0, nil, eobError - } - first := input[0] - remain = input[1:] - c = uint16(first) - if first <= 0x7F || first == 0xFF { - return - } - if len(remain) == 0 { - return c, nil, eobError - } - second := remain[0] - remain = remain[1:] - c = c<<8 | uint16(second) - if second < 0x40 || second == 0x7F || second == 0xFF { - err = badCharError - } - return -} - -var commonChars_big5 = []uint16{ - 0xa140, 0xa141, 0xa142, 0xa143, 0xa147, 0xa149, 0xa175, 0xa176, 0xa440, 0xa446, - 0xa447, 0xa448, 0xa451, 0xa454, 0xa457, 0xa464, 0xa46a, 0xa46c, 0xa477, 0xa4a3, - 0xa4a4, 0xa4a7, 0xa4c1, 0xa4ce, 0xa4d1, 0xa4df, 0xa4e8, 0xa4fd, 0xa540, 0xa548, - 0xa558, 0xa569, 0xa5cd, 0xa5e7, 0xa657, 0xa661, 0xa662, 0xa668, 0xa670, 0xa6a8, - 0xa6b3, 0xa6b9, 0xa6d3, 0xa6db, 0xa6e6, 0xa6f2, 0xa740, 0xa751, 0xa759, 0xa7da, - 0xa8a3, 0xa8a5, 0xa8ad, 0xa8d1, 0xa8d3, 0xa8e4, 0xa8fc, 0xa9c0, 0xa9d2, 0xa9f3, - 0xaa6b, 0xaaba, 0xaabe, 0xaacc, 0xaafc, 0xac47, 0xac4f, 0xacb0, 0xacd2, 0xad59, - 0xaec9, 0xafe0, 0xb0ea, 0xb16f, 0xb2b3, 0xb2c4, 0xb36f, 0xb44c, 0xb44e, 0xb54c, - 0xb5a5, 0xb5bd, 0xb5d0, 0xb5d8, 0xb671, 0xb7ed, 0xb867, 0xb944, 0xbad8, 0xbb44, - 0xbba1, 0xbdd1, 0xc2c4, 0xc3b9, 0xc440, 0xc45f, -} - -func newRecognizer_big5() *recognizerMultiByte { - return &recognizerMultiByte{ - "Big5", - "zh", - charDecoder_big5{}, - commonChars_big5, - } -} - -type charDecoder_gb_18030 struct { -} - -func (charDecoder_gb_18030) DecodeOneChar(input []byte) (c uint16, remain []byte, err error) { - if len(input) == 0 { - return 0, nil, eobError - } - first := input[0] - remain = input[1:] - c = uint16(first) - if first <= 0x80 { - return - } - if len(remain) == 0 { - return 0, nil, eobError - } - second := remain[0] - remain = remain[1:] - c = c<<8 | uint16(second) - if first >= 0x81 && first <= 0xFE { - if (second >= 0x40 && second <= 0x7E) || (second >= 0x80 && second <= 0xFE) { - return - } - - if second >= 0x30 && second <= 0x39 { - if len(remain) == 0 { - return 0, nil, eobError - } - third := remain[0] - remain = remain[1:] - if third >= 0x81 && third <= 0xFE { - if len(remain) == 0 { - return 0, nil, eobError - } - fourth := remain[0] - remain = remain[1:] - if fourth >= 0x30 && fourth <= 0x39 { - c = c<<16 | uint16(third)<<8 | uint16(fourth) - return - } - } - } - err = badCharError - } - return -} - -var commonChars_gb_18030 = []uint16{ - 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a4, 0xa1b0, 0xa1b1, 0xa1f1, 0xa1f3, 0xa3a1, 0xa3ac, - 0xa3ba, 0xb1a8, 0xb1b8, 0xb1be, 0xb2bb, 0xb3c9, 0xb3f6, 0xb4f3, 0xb5bd, 0xb5c4, - 0xb5e3, 0xb6af, 0xb6d4, 0xb6e0, 0xb7a2, 0xb7a8, 0xb7bd, 0xb7d6, 0xb7dd, 0xb8b4, - 0xb8df, 0xb8f6, 0xb9ab, 0xb9c9, 0xb9d8, 0xb9fa, 0xb9fd, 0xbacd, 0xbba7, 0xbbd6, - 0xbbe1, 0xbbfa, 0xbcbc, 0xbcdb, 0xbcfe, 0xbdcc, 0xbecd, 0xbedd, 0xbfb4, 0xbfc6, - 0xbfc9, 0xc0b4, 0xc0ed, 0xc1cb, 0xc2db, 0xc3c7, 0xc4dc, 0xc4ea, 0xc5cc, 0xc6f7, - 0xc7f8, 0xc8ab, 0xc8cb, 0xc8d5, 0xc8e7, 0xc9cf, 0xc9fa, 0xcab1, 0xcab5, 0xcac7, - 0xcad0, 0xcad6, 0xcaf5, 0xcafd, 0xccec, 0xcdf8, 0xceaa, 0xcec4, 0xced2, 0xcee5, - 0xcfb5, 0xcfc2, 0xcfd6, 0xd0c2, 0xd0c5, 0xd0d0, 0xd0d4, 0xd1a7, 0xd2aa, 0xd2b2, - 0xd2b5, 0xd2bb, 0xd2d4, 0xd3c3, 0xd3d0, 0xd3fd, 0xd4c2, 0xd4da, 0xd5e2, 0xd6d0, -} - -func newRecognizer_gb_18030() *recognizerMultiByte { - return &recognizerMultiByte{ - "GB18030", - "zh", - charDecoder_gb_18030{}, - commonChars_gb_18030, - } -} diff --git a/vendor/github.com/gogs/chardet/recognizer.go b/vendor/github.com/gogs/chardet/recognizer.go deleted file mode 100644 index 1bf8461c3..000000000 --- a/vendor/github.com/gogs/chardet/recognizer.go +++ /dev/null @@ -1,83 +0,0 @@ -package chardet - -type recognizer interface { - Match(*recognizerInput) recognizerOutput -} - -type recognizerOutput Result - -type recognizerInput struct { - raw []byte - input []byte - tagStripped bool - byteStats []int - hasC1Bytes bool -} - -func newRecognizerInput(raw []byte, stripTag bool) *recognizerInput { - input, stripped := mayStripInput(raw, stripTag) - byteStats := computeByteStats(input) - return &recognizerInput{ - raw: raw, - input: input, - tagStripped: stripped, - byteStats: byteStats, - hasC1Bytes: computeHasC1Bytes(byteStats), - } -} - -func mayStripInput(raw []byte, stripTag bool) (out []byte, stripped bool) { - const inputBufferSize = 8192 - out = make([]byte, 0, inputBufferSize) - var badTags, openTags int32 - var inMarkup bool = false - stripped = false - if stripTag { - stripped = true - for _, c := range raw { - if c == '<' { - if inMarkup { - badTags += 1 - } - inMarkup = true - openTags += 1 - } - if !inMarkup { - out = append(out, c) - if len(out) >= inputBufferSize { - break - } - } - if c == '>' { - inMarkup = false - } - } - } - if openTags < 5 || openTags/5 < badTags || (len(out) < 100 && len(raw) > 600) { - limit := len(raw) - if limit > inputBufferSize { - limit = inputBufferSize - } - out = make([]byte, limit) - copy(out, raw[:limit]) - stripped = false - } - return -} - -func computeByteStats(input []byte) []int { - r := make([]int, 256) - for _, c := range input { - r[c] += 1 - } - return r -} - -func computeHasC1Bytes(byteStats []int) bool { - for _, count := range byteStats[0x80 : 0x9F+1] { - if count > 0 { - return true - } - } - return false -} diff --git a/vendor/github.com/gogs/chardet/single_byte.go b/vendor/github.com/gogs/chardet/single_byte.go deleted file mode 100644 index a7ce39bc2..000000000 --- a/vendor/github.com/gogs/chardet/single_byte.go +++ /dev/null @@ -1,882 +0,0 @@ -package chardet - -// Recognizer for single byte charset family -type recognizerSingleByte struct { - charset string - hasC1ByteCharset string - language string - charMap *[256]byte - ngram *[64]uint32 -} - -func (r *recognizerSingleByte) Match(input *recognizerInput) recognizerOutput { - var charset string = r.charset - if input.hasC1Bytes && len(r.hasC1ByteCharset) > 0 { - charset = r.hasC1ByteCharset - } - return recognizerOutput{ - Charset: charset, - Language: r.language, - Confidence: r.parseNgram(input.input), - } -} - -type ngramState struct { - ngram uint32 - ignoreSpace bool - ngramCount, ngramHit uint32 - table *[64]uint32 -} - -func newNgramState(table *[64]uint32) *ngramState { - return &ngramState{ - ngram: 0, - ignoreSpace: false, - ngramCount: 0, - ngramHit: 0, - table: table, - } -} - -func (s *ngramState) AddByte(b byte) { - const ngramMask = 0xFFFFFF - if !(b == 0x20 && s.ignoreSpace) { - s.ngram = ((s.ngram << 8) | uint32(b)) & ngramMask - s.ignoreSpace = (s.ngram == 0x20) - s.ngramCount++ - if s.lookup() { - s.ngramHit++ - } - } - s.ignoreSpace = (b == 0x20) -} - -func (s *ngramState) HitRate() float32 { - if s.ngramCount == 0 { - return 0 - } - return float32(s.ngramHit) / float32(s.ngramCount) -} - -func (s *ngramState) lookup() bool { - var index int - if s.table[index+32] <= s.ngram { - index += 32 - } - if s.table[index+16] <= s.ngram { - index += 16 - } - if s.table[index+8] <= s.ngram { - index += 8 - } - if s.table[index+4] <= s.ngram { - index += 4 - } - if s.table[index+2] <= s.ngram { - index += 2 - } - if s.table[index+1] <= s.ngram { - index += 1 - } - if s.table[index] > s.ngram { - index -= 1 - } - if index < 0 || s.table[index] != s.ngram { - return false - } - return true -} - -func (r *recognizerSingleByte) parseNgram(input []byte) int { - state := newNgramState(r.ngram) - for _, inChar := range input { - c := r.charMap[inChar] - if c != 0 { - state.AddByte(c) - } - } - state.AddByte(0x20) - rate := state.HitRate() - if rate > 0.33 { - return 98 - } - return int(rate * 300) -} - -var charMap_8859_1 = [256]byte{ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, - 0x20, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, -} - -var ngrams_8859_1_en = [64]uint32{ - 0x206120, 0x20616E, 0x206265, 0x20636F, 0x20666F, 0x206861, 0x206865, 0x20696E, 0x206D61, 0x206F66, 0x207072, 0x207265, 0x207361, 0x207374, 0x207468, 0x20746F, - 0x207768, 0x616964, 0x616C20, 0x616E20, 0x616E64, 0x617320, 0x617420, 0x617465, 0x617469, 0x642061, 0x642074, 0x652061, 0x652073, 0x652074, 0x656420, 0x656E74, - 0x657220, 0x657320, 0x666F72, 0x686174, 0x686520, 0x686572, 0x696420, 0x696E20, 0x696E67, 0x696F6E, 0x697320, 0x6E2061, 0x6E2074, 0x6E6420, 0x6E6720, 0x6E7420, - 0x6F6620, 0x6F6E20, 0x6F7220, 0x726520, 0x727320, 0x732061, 0x732074, 0x736169, 0x737420, 0x742074, 0x746572, 0x746861, 0x746865, 0x74696F, 0x746F20, 0x747320, -} - -var ngrams_8859_1_da = [64]uint32{ - 0x206166, 0x206174, 0x206465, 0x20656E, 0x206572, 0x20666F, 0x206861, 0x206920, 0x206D65, 0x206F67, 0x2070E5, 0x207369, 0x207374, 0x207469, 0x207669, 0x616620, - 0x616E20, 0x616E64, 0x617220, 0x617420, 0x646520, 0x64656E, 0x646572, 0x646574, 0x652073, 0x656420, 0x656465, 0x656E20, 0x656E64, 0x657220, 0x657265, 0x657320, - 0x657420, 0x666F72, 0x676520, 0x67656E, 0x676572, 0x696765, 0x696C20, 0x696E67, 0x6B6520, 0x6B6B65, 0x6C6572, 0x6C6967, 0x6C6C65, 0x6D6564, 0x6E6465, 0x6E6520, - 0x6E6720, 0x6E6765, 0x6F6720, 0x6F6D20, 0x6F7220, 0x70E520, 0x722064, 0x722065, 0x722073, 0x726520, 0x737465, 0x742073, 0x746520, 0x746572, 0x74696C, 0x766572, -} - -var ngrams_8859_1_de = [64]uint32{ - 0x20616E, 0x206175, 0x206265, 0x206461, 0x206465, 0x206469, 0x206569, 0x206765, 0x206861, 0x20696E, 0x206D69, 0x207363, 0x207365, 0x20756E, 0x207665, 0x20766F, - 0x207765, 0x207A75, 0x626572, 0x636820, 0x636865, 0x636874, 0x646173, 0x64656E, 0x646572, 0x646965, 0x652064, 0x652073, 0x65696E, 0x656974, 0x656E20, 0x657220, - 0x657320, 0x67656E, 0x68656E, 0x687420, 0x696368, 0x696520, 0x696E20, 0x696E65, 0x697420, 0x6C6963, 0x6C6C65, 0x6E2061, 0x6E2064, 0x6E2073, 0x6E6420, 0x6E6465, - 0x6E6520, 0x6E6720, 0x6E6765, 0x6E7465, 0x722064, 0x726465, 0x726569, 0x736368, 0x737465, 0x742064, 0x746520, 0x74656E, 0x746572, 0x756E64, 0x756E67, 0x766572, -} - -var ngrams_8859_1_es = [64]uint32{ - 0x206120, 0x206361, 0x20636F, 0x206465, 0x20656C, 0x20656E, 0x206573, 0x20696E, 0x206C61, 0x206C6F, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207265, 0x207365, - 0x20756E, 0x207920, 0x612063, 0x612064, 0x612065, 0x61206C, 0x612070, 0x616369, 0x61646F, 0x616C20, 0x617220, 0x617320, 0x6369F3, 0x636F6E, 0x646520, 0x64656C, - 0x646F20, 0x652064, 0x652065, 0x65206C, 0x656C20, 0x656E20, 0x656E74, 0x657320, 0x657374, 0x69656E, 0x69F36E, 0x6C6120, 0x6C6F73, 0x6E2065, 0x6E7465, 0x6F2064, - 0x6F2065, 0x6F6E20, 0x6F7220, 0x6F7320, 0x706172, 0x717565, 0x726120, 0x726573, 0x732064, 0x732065, 0x732070, 0x736520, 0x746520, 0x746F20, 0x756520, 0xF36E20, -} - -var ngrams_8859_1_fr = [64]uint32{ - 0x206175, 0x20636F, 0x206461, 0x206465, 0x206475, 0x20656E, 0x206574, 0x206C61, 0x206C65, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207365, 0x20736F, 0x20756E, - 0x20E020, 0x616E74, 0x617469, 0x636520, 0x636F6E, 0x646520, 0x646573, 0x647520, 0x652061, 0x652063, 0x652064, 0x652065, 0x65206C, 0x652070, 0x652073, 0x656E20, - 0x656E74, 0x657220, 0x657320, 0x657420, 0x657572, 0x696F6E, 0x697320, 0x697420, 0x6C6120, 0x6C6520, 0x6C6573, 0x6D656E, 0x6E2064, 0x6E6520, 0x6E7320, 0x6E7420, - 0x6F6E20, 0x6F6E74, 0x6F7572, 0x717565, 0x72206C, 0x726520, 0x732061, 0x732064, 0x732065, 0x73206C, 0x732070, 0x742064, 0x746520, 0x74696F, 0x756520, 0x757220, -} - -var ngrams_8859_1_it = [64]uint32{ - 0x20616C, 0x206368, 0x20636F, 0x206465, 0x206469, 0x206520, 0x20696C, 0x20696E, 0x206C61, 0x207065, 0x207072, 0x20756E, 0x612063, 0x612064, 0x612070, 0x612073, - 0x61746F, 0x636865, 0x636F6E, 0x64656C, 0x646920, 0x652061, 0x652063, 0x652064, 0x652069, 0x65206C, 0x652070, 0x652073, 0x656C20, 0x656C6C, 0x656E74, 0x657220, - 0x686520, 0x692061, 0x692063, 0x692064, 0x692073, 0x696120, 0x696C20, 0x696E20, 0x696F6E, 0x6C6120, 0x6C6520, 0x6C6920, 0x6C6C61, 0x6E6520, 0x6E6920, 0x6E6F20, - 0x6E7465, 0x6F2061, 0x6F2064, 0x6F2069, 0x6F2073, 0x6F6E20, 0x6F6E65, 0x706572, 0x726120, 0x726520, 0x736920, 0x746120, 0x746520, 0x746920, 0x746F20, 0x7A696F, -} - -var ngrams_8859_1_nl = [64]uint32{ - 0x20616C, 0x206265, 0x206461, 0x206465, 0x206469, 0x206565, 0x20656E, 0x206765, 0x206865, 0x20696E, 0x206D61, 0x206D65, 0x206F70, 0x207465, 0x207661, 0x207665, - 0x20766F, 0x207765, 0x207A69, 0x61616E, 0x616172, 0x616E20, 0x616E64, 0x617220, 0x617420, 0x636874, 0x646520, 0x64656E, 0x646572, 0x652062, 0x652076, 0x65656E, - 0x656572, 0x656E20, 0x657220, 0x657273, 0x657420, 0x67656E, 0x686574, 0x696520, 0x696E20, 0x696E67, 0x697320, 0x6E2062, 0x6E2064, 0x6E2065, 0x6E2068, 0x6E206F, - 0x6E2076, 0x6E6465, 0x6E6720, 0x6F6E64, 0x6F6F72, 0x6F7020, 0x6F7220, 0x736368, 0x737465, 0x742064, 0x746520, 0x74656E, 0x746572, 0x76616E, 0x766572, 0x766F6F, -} - -var ngrams_8859_1_no = [64]uint32{ - 0x206174, 0x206176, 0x206465, 0x20656E, 0x206572, 0x20666F, 0x206861, 0x206920, 0x206D65, 0x206F67, 0x2070E5, 0x207365, 0x20736B, 0x20736F, 0x207374, 0x207469, - 0x207669, 0x20E520, 0x616E64, 0x617220, 0x617420, 0x646520, 0x64656E, 0x646574, 0x652073, 0x656420, 0x656E20, 0x656E65, 0x657220, 0x657265, 0x657420, 0x657474, - 0x666F72, 0x67656E, 0x696B6B, 0x696C20, 0x696E67, 0x6B6520, 0x6B6B65, 0x6C6520, 0x6C6C65, 0x6D6564, 0x6D656E, 0x6E2073, 0x6E6520, 0x6E6720, 0x6E6765, 0x6E6E65, - 0x6F6720, 0x6F6D20, 0x6F7220, 0x70E520, 0x722073, 0x726520, 0x736F6D, 0x737465, 0x742073, 0x746520, 0x74656E, 0x746572, 0x74696C, 0x747420, 0x747465, 0x766572, -} - -var ngrams_8859_1_pt = [64]uint32{ - 0x206120, 0x20636F, 0x206461, 0x206465, 0x20646F, 0x206520, 0x206573, 0x206D61, 0x206E6F, 0x206F20, 0x207061, 0x20706F, 0x207072, 0x207175, 0x207265, 0x207365, - 0x20756D, 0x612061, 0x612063, 0x612064, 0x612070, 0x616465, 0x61646F, 0x616C20, 0x617220, 0x617261, 0x617320, 0x636F6D, 0x636F6E, 0x646120, 0x646520, 0x646F20, - 0x646F73, 0x652061, 0x652064, 0x656D20, 0x656E74, 0x657320, 0x657374, 0x696120, 0x696361, 0x6D656E, 0x6E7465, 0x6E746F, 0x6F2061, 0x6F2063, 0x6F2064, 0x6F2065, - 0x6F2070, 0x6F7320, 0x706172, 0x717565, 0x726120, 0x726573, 0x732061, 0x732064, 0x732065, 0x732070, 0x737461, 0x746520, 0x746F20, 0x756520, 0xE36F20, 0xE7E36F, -} - -var ngrams_8859_1_sv = [64]uint32{ - 0x206174, 0x206176, 0x206465, 0x20656E, 0x2066F6, 0x206861, 0x206920, 0x20696E, 0x206B6F, 0x206D65, 0x206F63, 0x2070E5, 0x20736B, 0x20736F, 0x207374, 0x207469, - 0x207661, 0x207669, 0x20E472, 0x616465, 0x616E20, 0x616E64, 0x617220, 0x617474, 0x636820, 0x646520, 0x64656E, 0x646572, 0x646574, 0x656420, 0x656E20, 0x657220, - 0x657420, 0x66F672, 0x67656E, 0x696C6C, 0x696E67, 0x6B6120, 0x6C6C20, 0x6D6564, 0x6E2073, 0x6E6120, 0x6E6465, 0x6E6720, 0x6E6765, 0x6E696E, 0x6F6368, 0x6F6D20, - 0x6F6E20, 0x70E520, 0x722061, 0x722073, 0x726120, 0x736B61, 0x736F6D, 0x742073, 0x746120, 0x746520, 0x746572, 0x74696C, 0x747420, 0x766172, 0xE47220, 0xF67220, -} - -func newRecognizer_8859_1(language string, ngram *[64]uint32) *recognizerSingleByte { - return &recognizerSingleByte{ - charset: "ISO-8859-1", - hasC1ByteCharset: "windows-1252", - language: language, - charMap: &charMap_8859_1, - ngram: ngram, - } -} - -func newRecognizer_8859_1_en() *recognizerSingleByte { - return newRecognizer_8859_1("en", &ngrams_8859_1_en) -} -func newRecognizer_8859_1_da() *recognizerSingleByte { - return newRecognizer_8859_1("da", &ngrams_8859_1_da) -} -func newRecognizer_8859_1_de() *recognizerSingleByte { - return newRecognizer_8859_1("de", &ngrams_8859_1_de) -} -func newRecognizer_8859_1_es() *recognizerSingleByte { - return newRecognizer_8859_1("es", &ngrams_8859_1_es) -} -func newRecognizer_8859_1_fr() *recognizerSingleByte { - return newRecognizer_8859_1("fr", &ngrams_8859_1_fr) -} -func newRecognizer_8859_1_it() *recognizerSingleByte { - return newRecognizer_8859_1("it", &ngrams_8859_1_it) -} -func newRecognizer_8859_1_nl() *recognizerSingleByte { - return newRecognizer_8859_1("nl", &ngrams_8859_1_nl) -} -func newRecognizer_8859_1_no() *recognizerSingleByte { - return newRecognizer_8859_1("no", &ngrams_8859_1_no) -} -func newRecognizer_8859_1_pt() *recognizerSingleByte { - return newRecognizer_8859_1("pt", &ngrams_8859_1_pt) -} -func newRecognizer_8859_1_sv() *recognizerSingleByte { - return newRecognizer_8859_1("sv", &ngrams_8859_1_sv) -} - -var charMap_8859_2 = [256]byte{ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0xB1, 0x20, 0xB3, 0x20, 0xB5, 0xB6, 0x20, - 0x20, 0xB9, 0xBA, 0xBB, 0xBC, 0x20, 0xBE, 0xBF, - 0x20, 0xB1, 0x20, 0xB3, 0x20, 0xB5, 0xB6, 0xB7, - 0x20, 0xB9, 0xBA, 0xBB, 0xBC, 0x20, 0xBE, 0xBF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x20, -} - -var ngrams_8859_2_cs = [64]uint32{ - 0x206120, 0x206279, 0x20646F, 0x206A65, 0x206E61, 0x206E65, 0x206F20, 0x206F64, 0x20706F, 0x207072, 0x2070F8, 0x20726F, 0x207365, 0x20736F, 0x207374, 0x20746F, - 0x207620, 0x207679, 0x207A61, 0x612070, 0x636520, 0x636820, 0x652070, 0x652073, 0x652076, 0x656D20, 0x656EED, 0x686F20, 0x686F64, 0x697374, 0x6A6520, 0x6B7465, - 0x6C6520, 0x6C6920, 0x6E6120, 0x6EE920, 0x6EEC20, 0x6EED20, 0x6F2070, 0x6F646E, 0x6F6A69, 0x6F7374, 0x6F7520, 0x6F7661, 0x706F64, 0x706F6A, 0x70726F, 0x70F865, - 0x736520, 0x736F75, 0x737461, 0x737469, 0x73746E, 0x746572, 0x746EED, 0x746F20, 0x752070, 0xBE6520, 0xE16EED, 0xE9686F, 0xED2070, 0xED2073, 0xED6D20, 0xF86564, -} - -var ngrams_8859_2_hu = [64]uint32{ - 0x206120, 0x20617A, 0x206265, 0x206567, 0x20656C, 0x206665, 0x206861, 0x20686F, 0x206973, 0x206B65, 0x206B69, 0x206BF6, 0x206C65, 0x206D61, 0x206D65, 0x206D69, - 0x206E65, 0x20737A, 0x207465, 0x20E973, 0x612061, 0x61206B, 0x61206D, 0x612073, 0x616B20, 0x616E20, 0x617A20, 0x62616E, 0x62656E, 0x656779, 0x656B20, 0x656C20, - 0x656C65, 0x656D20, 0x656E20, 0x657265, 0x657420, 0x657465, 0x657474, 0x677920, 0x686F67, 0x696E74, 0x697320, 0x6B2061, 0x6BF67A, 0x6D6567, 0x6D696E, 0x6E2061, - 0x6E616B, 0x6E656B, 0x6E656D, 0x6E7420, 0x6F6779, 0x732061, 0x737A65, 0x737A74, 0x737AE1, 0x73E967, 0x742061, 0x747420, 0x74E173, 0x7A6572, 0xE16E20, 0xE97320, -} - -var ngrams_8859_2_pl = [64]uint32{ - 0x20637A, 0x20646F, 0x206920, 0x206A65, 0x206B6F, 0x206D61, 0x206D69, 0x206E61, 0x206E69, 0x206F64, 0x20706F, 0x207072, 0x207369, 0x207720, 0x207769, 0x207779, - 0x207A20, 0x207A61, 0x612070, 0x612077, 0x616E69, 0x636820, 0x637A65, 0x637A79, 0x646F20, 0x647A69, 0x652070, 0x652073, 0x652077, 0x65207A, 0x65676F, 0x656A20, - 0x656D20, 0x656E69, 0x676F20, 0x696120, 0x696520, 0x69656A, 0x6B6120, 0x6B6920, 0x6B6965, 0x6D6965, 0x6E6120, 0x6E6961, 0x6E6965, 0x6F2070, 0x6F7761, 0x6F7769, - 0x706F6C, 0x707261, 0x70726F, 0x70727A, 0x727A65, 0x727A79, 0x7369EA, 0x736B69, 0x737461, 0x776965, 0x796368, 0x796D20, 0x7A6520, 0x7A6965, 0x7A7920, 0xF37720, -} - -var ngrams_8859_2_ro = [64]uint32{ - 0x206120, 0x206163, 0x206361, 0x206365, 0x20636F, 0x206375, 0x206465, 0x206469, 0x206C61, 0x206D61, 0x207065, 0x207072, 0x207365, 0x2073E3, 0x20756E, 0x20BA69, - 0x20EE6E, 0x612063, 0x612064, 0x617265, 0x617420, 0x617465, 0x617520, 0x636172, 0x636F6E, 0x637520, 0x63E320, 0x646520, 0x652061, 0x652063, 0x652064, 0x652070, - 0x652073, 0x656120, 0x656920, 0x656C65, 0x656E74, 0x657374, 0x692061, 0x692063, 0x692064, 0x692070, 0x696520, 0x696920, 0x696E20, 0x6C6120, 0x6C6520, 0x6C6F72, - 0x6C7569, 0x6E6520, 0x6E7472, 0x6F7220, 0x70656E, 0x726520, 0x726561, 0x727520, 0x73E320, 0x746520, 0x747275, 0x74E320, 0x756920, 0x756C20, 0xBA6920, 0xEE6E20, -} - -func newRecognizer_8859_2(language string, ngram *[64]uint32) *recognizerSingleByte { - return &recognizerSingleByte{ - charset: "ISO-8859-2", - hasC1ByteCharset: "windows-1250", - language: language, - charMap: &charMap_8859_2, - ngram: ngram, - } -} - -func newRecognizer_8859_2_cs() *recognizerSingleByte { - return newRecognizer_8859_2("cs", &ngrams_8859_2_cs) -} -func newRecognizer_8859_2_hu() *recognizerSingleByte { - return newRecognizer_8859_2("hu", &ngrams_8859_2_hu) -} -func newRecognizer_8859_2_pl() *recognizerSingleByte { - return newRecognizer_8859_2("pl", &ngrams_8859_2_pl) -} -func newRecognizer_8859_2_ro() *recognizerSingleByte { - return newRecognizer_8859_2("ro", &ngrams_8859_2_ro) -} - -var charMap_8859_5 = [256]byte{ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x20, 0xFE, 0xFF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0x20, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x20, 0xFE, 0xFF, -} - -var ngrams_8859_5_ru = [64]uint32{ - 0x20D220, 0x20D2DE, 0x20D4DE, 0x20D7D0, 0x20D820, 0x20DAD0, 0x20DADE, 0x20DDD0, 0x20DDD5, 0x20DED1, 0x20DFDE, 0x20DFE0, 0x20E0D0, 0x20E1DE, 0x20E1E2, 0x20E2DE, - 0x20E7E2, 0x20EDE2, 0xD0DDD8, 0xD0E2EC, 0xD3DE20, 0xD5DBEC, 0xD5DDD8, 0xD5E1E2, 0xD5E220, 0xD820DF, 0xD8D520, 0xD8D820, 0xD8EF20, 0xDBD5DD, 0xDBD820, 0xDBECDD, - 0xDDD020, 0xDDD520, 0xDDD8D5, 0xDDD8EF, 0xDDDE20, 0xDDDED2, 0xDE20D2, 0xDE20DF, 0xDE20E1, 0xDED220, 0xDED2D0, 0xDED3DE, 0xDED920, 0xDEDBEC, 0xDEDC20, 0xDEE1E2, - 0xDFDEDB, 0xDFE0D5, 0xDFE0D8, 0xDFE0DE, 0xE0D0D2, 0xE0D5D4, 0xE1E2D0, 0xE1E2D2, 0xE1E2D8, 0xE1EF20, 0xE2D5DB, 0xE2DE20, 0xE2DEE0, 0xE2EC20, 0xE7E2DE, 0xEBE520, -} - -func newRecognizer_8859_5(language string, ngram *[64]uint32) *recognizerSingleByte { - return &recognizerSingleByte{ - charset: "ISO-8859-5", - language: language, - charMap: &charMap_8859_5, - ngram: ngram, - } -} - -func newRecognizer_8859_5_ru() *recognizerSingleByte { - return newRecognizer_8859_5("ru", &ngrams_8859_5_ru) -} - -var charMap_8859_6 = [256]byte{ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -} - -var ngrams_8859_6_ar = [64]uint32{ - 0x20C7E4, 0x20C7E6, 0x20C8C7, 0x20D9E4, 0x20E1EA, 0x20E4E4, 0x20E5E6, 0x20E8C7, 0xC720C7, 0xC7C120, 0xC7CA20, 0xC7D120, 0xC7E420, 0xC7E4C3, 0xC7E4C7, 0xC7E4C8, - 0xC7E4CA, 0xC7E4CC, 0xC7E4CD, 0xC7E4CF, 0xC7E4D3, 0xC7E4D9, 0xC7E4E2, 0xC7E4E5, 0xC7E4E8, 0xC7E4EA, 0xC7E520, 0xC7E620, 0xC7E6CA, 0xC820C7, 0xC920C7, 0xC920E1, - 0xC920E4, 0xC920E5, 0xC920E8, 0xCA20C7, 0xCF20C7, 0xCFC920, 0xD120C7, 0xD1C920, 0xD320C7, 0xD920C7, 0xD9E4E9, 0xE1EA20, 0xE420C7, 0xE4C920, 0xE4E920, 0xE4EA20, - 0xE520C7, 0xE5C720, 0xE5C920, 0xE5E620, 0xE620C7, 0xE720C7, 0xE7C720, 0xE8C7E4, 0xE8E620, 0xE920C7, 0xEA20C7, 0xEA20E5, 0xEA20E8, 0xEAC920, 0xEAD120, 0xEAE620, -} - -func newRecognizer_8859_6(language string, ngram *[64]uint32) *recognizerSingleByte { - return &recognizerSingleByte{ - charset: "ISO-8859-6", - language: language, - charMap: &charMap_8859_6, - ngram: ngram, - } -} - -func newRecognizer_8859_6_ar() *recognizerSingleByte { - return newRecognizer_8859_6("ar", &ngrams_8859_6_ar) -} - -var charMap_8859_7 = [256]byte{ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0xA1, 0xA2, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xDC, 0x20, - 0xDD, 0xDE, 0xDF, 0x20, 0xFC, 0x20, 0xFD, 0xFE, - 0xC0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0x20, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0x20, -} - -var ngrams_8859_7_el = [64]uint32{ - 0x20E1ED, 0x20E1F0, 0x20E3E9, 0x20E4E9, 0x20E5F0, 0x20E720, 0x20EAE1, 0x20ECE5, 0x20EDE1, 0x20EF20, 0x20F0E1, 0x20F0EF, 0x20F0F1, 0x20F3F4, 0x20F3F5, 0x20F4E7, - 0x20F4EF, 0xDFE120, 0xE120E1, 0xE120F4, 0xE1E920, 0xE1ED20, 0xE1F0FC, 0xE1F220, 0xE3E9E1, 0xE5E920, 0xE5F220, 0xE720F4, 0xE7ED20, 0xE7F220, 0xE920F4, 0xE9E120, - 0xE9EADE, 0xE9F220, 0xEAE1E9, 0xEAE1F4, 0xECE520, 0xED20E1, 0xED20E5, 0xED20F0, 0xEDE120, 0xEFF220, 0xEFF520, 0xF0EFF5, 0xF0F1EF, 0xF0FC20, 0xF220E1, 0xF220E5, - 0xF220EA, 0xF220F0, 0xF220F4, 0xF3E520, 0xF3E720, 0xF3F4EF, 0xF4E120, 0xF4E1E9, 0xF4E7ED, 0xF4E7F2, 0xF4E9EA, 0xF4EF20, 0xF4EFF5, 0xF4F9ED, 0xF9ED20, 0xFEED20, -} - -func newRecognizer_8859_7(language string, ngram *[64]uint32) *recognizerSingleByte { - return &recognizerSingleByte{ - charset: "ISO-8859-7", - hasC1ByteCharset: "windows-1253", - language: language, - charMap: &charMap_8859_7, - ngram: ngram, - } -} - -func newRecognizer_8859_7_el() *recognizerSingleByte { - return newRecognizer_8859_7("el", &ngrams_8859_7_el) -} - -var charMap_8859_8 = [256]byte{ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0x20, 0x20, 0x20, 0x20, 0x20, -} - -var ngrams_8859_8_I_he = [64]uint32{ - 0x20E0E5, 0x20E0E7, 0x20E0E9, 0x20E0FA, 0x20E1E9, 0x20E1EE, 0x20E4E0, 0x20E4E5, 0x20E4E9, 0x20E4EE, 0x20E4F2, 0x20E4F9, 0x20E4FA, 0x20ECE0, 0x20ECE4, 0x20EEE0, - 0x20F2EC, 0x20F9EC, 0xE0FA20, 0xE420E0, 0xE420E1, 0xE420E4, 0xE420EC, 0xE420EE, 0xE420F9, 0xE4E5E0, 0xE5E020, 0xE5ED20, 0xE5EF20, 0xE5F820, 0xE5FA20, 0xE920E4, - 0xE9E420, 0xE9E5FA, 0xE9E9ED, 0xE9ED20, 0xE9EF20, 0xE9F820, 0xE9FA20, 0xEC20E0, 0xEC20E4, 0xECE020, 0xECE420, 0xED20E0, 0xED20E1, 0xED20E4, 0xED20EC, 0xED20EE, - 0xED20F9, 0xEEE420, 0xEF20E4, 0xF0E420, 0xF0E920, 0xF0E9ED, 0xF2EC20, 0xF820E4, 0xF8E9ED, 0xF9EC20, 0xFA20E0, 0xFA20E1, 0xFA20E4, 0xFA20EC, 0xFA20EE, 0xFA20F9, -} - -var ngrams_8859_8_he = [64]uint32{ - 0x20E0E5, 0x20E0EC, 0x20E4E9, 0x20E4EC, 0x20E4EE, 0x20E4F0, 0x20E9F0, 0x20ECF2, 0x20ECF9, 0x20EDE5, 0x20EDE9, 0x20EFE5, 0x20EFE9, 0x20F8E5, 0x20F8E9, 0x20FAE0, - 0x20FAE5, 0x20FAE9, 0xE020E4, 0xE020EC, 0xE020ED, 0xE020FA, 0xE0E420, 0xE0E5E4, 0xE0EC20, 0xE0EE20, 0xE120E4, 0xE120ED, 0xE120FA, 0xE420E4, 0xE420E9, 0xE420EC, - 0xE420ED, 0xE420EF, 0xE420F8, 0xE420FA, 0xE4EC20, 0xE5E020, 0xE5E420, 0xE7E020, 0xE9E020, 0xE9E120, 0xE9E420, 0xEC20E4, 0xEC20ED, 0xEC20FA, 0xECF220, 0xECF920, - 0xEDE9E9, 0xEDE9F0, 0xEDE9F8, 0xEE20E4, 0xEE20ED, 0xEE20FA, 0xEEE120, 0xEEE420, 0xF2E420, 0xF920E4, 0xF920ED, 0xF920FA, 0xF9E420, 0xFAE020, 0xFAE420, 0xFAE5E9, -} - -func newRecognizer_8859_8(language string, ngram *[64]uint32) *recognizerSingleByte { - return &recognizerSingleByte{ - charset: "ISO-8859-8", - hasC1ByteCharset: "windows-1255", - language: language, - charMap: &charMap_8859_8, - ngram: ngram, - } -} - -func newRecognizer_8859_8_I_he() *recognizerSingleByte { - r := newRecognizer_8859_8("he", &ngrams_8859_8_I_he) - r.charset = "ISO-8859-8-I" - return r -} - -func newRecognizer_8859_8_he() *recognizerSingleByte { - return newRecognizer_8859_8("he", &ngrams_8859_8_he) -} - -var charMap_8859_9 = [256]byte{ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, - 0x20, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0x69, 0xFE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0x20, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, -} - -var ngrams_8859_9_tr = [64]uint32{ - 0x206261, 0x206269, 0x206275, 0x206461, 0x206465, 0x206765, 0x206861, 0x20696C, 0x206B61, 0x206B6F, 0x206D61, 0x206F6C, 0x207361, 0x207461, 0x207665, 0x207961, - 0x612062, 0x616B20, 0x616C61, 0x616D61, 0x616E20, 0x616EFD, 0x617220, 0x617261, 0x6172FD, 0x6173FD, 0x617961, 0x626972, 0x646120, 0x646520, 0x646920, 0x652062, - 0x65206B, 0x656469, 0x656E20, 0x657220, 0x657269, 0x657369, 0x696C65, 0x696E20, 0x696E69, 0x697220, 0x6C616E, 0x6C6172, 0x6C6520, 0x6C6572, 0x6E2061, 0x6E2062, - 0x6E206B, 0x6E6461, 0x6E6465, 0x6E6520, 0x6E6920, 0x6E696E, 0x6EFD20, 0x72696E, 0x72FD6E, 0x766520, 0x796120, 0x796F72, 0xFD6E20, 0xFD6E64, 0xFD6EFD, 0xFDF0FD, -} - -func newRecognizer_8859_9(language string, ngram *[64]uint32) *recognizerSingleByte { - return &recognizerSingleByte{ - charset: "ISO-8859-9", - hasC1ByteCharset: "windows-1254", - language: language, - charMap: &charMap_8859_9, - ngram: ngram, - } -} - -func newRecognizer_8859_9_tr() *recognizerSingleByte { - return newRecognizer_8859_9("tr", &ngrams_8859_9_tr) -} - -var charMap_windows_1256 = [256]byte{ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x81, 0x20, 0x83, 0x20, 0x20, 0x20, 0x20, - 0x88, 0x20, 0x8A, 0x20, 0x9C, 0x8D, 0x8E, 0x8F, - 0x90, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x98, 0x20, 0x9A, 0x20, 0x9C, 0x20, 0x20, 0x9F, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0xAA, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0x20, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0x20, 0x20, 0x20, 0x20, 0xF4, 0x20, 0x20, 0x20, - 0x20, 0xF9, 0x20, 0xFB, 0xFC, 0x20, 0x20, 0xFF, -} - -var ngrams_windows_1256 = [64]uint32{ - 0x20C7E1, 0x20C7E4, 0x20C8C7, 0x20DAE1, 0x20DDED, 0x20E1E1, 0x20E3E4, 0x20E6C7, 0xC720C7, 0xC7C120, 0xC7CA20, 0xC7D120, 0xC7E120, 0xC7E1C3, 0xC7E1C7, 0xC7E1C8, - 0xC7E1CA, 0xC7E1CC, 0xC7E1CD, 0xC7E1CF, 0xC7E1D3, 0xC7E1DA, 0xC7E1DE, 0xC7E1E3, 0xC7E1E6, 0xC7E1ED, 0xC7E320, 0xC7E420, 0xC7E4CA, 0xC820C7, 0xC920C7, 0xC920DD, - 0xC920E1, 0xC920E3, 0xC920E6, 0xCA20C7, 0xCF20C7, 0xCFC920, 0xD120C7, 0xD1C920, 0xD320C7, 0xDA20C7, 0xDAE1EC, 0xDDED20, 0xE120C7, 0xE1C920, 0xE1EC20, 0xE1ED20, - 0xE320C7, 0xE3C720, 0xE3C920, 0xE3E420, 0xE420C7, 0xE520C7, 0xE5C720, 0xE6C7E1, 0xE6E420, 0xEC20C7, 0xED20C7, 0xED20E3, 0xED20E6, 0xEDC920, 0xEDD120, 0xEDE420, -} - -func newRecognizer_windows_1256() *recognizerSingleByte { - return &recognizerSingleByte{ - charset: "windows-1256", - language: "ar", - charMap: &charMap_windows_1256, - ngram: &ngrams_windows_1256, - } -} - -var charMap_windows_1251 = [256]byte{ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x90, 0x83, 0x20, 0x83, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x9A, 0x20, 0x9C, 0x9D, 0x9E, 0x9F, - 0x90, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x9A, 0x20, 0x9C, 0x9D, 0x9E, 0x9F, - 0x20, 0xA2, 0xA2, 0xBC, 0x20, 0xB4, 0x20, 0x20, - 0xB8, 0x20, 0xBA, 0x20, 0x20, 0x20, 0x20, 0xBF, - 0x20, 0x20, 0xB3, 0xB3, 0xB4, 0xB5, 0x20, 0x20, - 0xB8, 0x20, 0xBA, 0x20, 0xBC, 0xBE, 0xBE, 0xBF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, -} - -var ngrams_windows_1251 = [64]uint32{ - 0x20E220, 0x20E2EE, 0x20E4EE, 0x20E7E0, 0x20E820, 0x20EAE0, 0x20EAEE, 0x20EDE0, 0x20EDE5, 0x20EEE1, 0x20EFEE, 0x20EFF0, 0x20F0E0, 0x20F1EE, 0x20F1F2, 0x20F2EE, - 0x20F7F2, 0x20FDF2, 0xE0EDE8, 0xE0F2FC, 0xE3EE20, 0xE5EBFC, 0xE5EDE8, 0xE5F1F2, 0xE5F220, 0xE820EF, 0xE8E520, 0xE8E820, 0xE8FF20, 0xEBE5ED, 0xEBE820, 0xEBFCED, - 0xEDE020, 0xEDE520, 0xEDE8E5, 0xEDE8FF, 0xEDEE20, 0xEDEEE2, 0xEE20E2, 0xEE20EF, 0xEE20F1, 0xEEE220, 0xEEE2E0, 0xEEE3EE, 0xEEE920, 0xEEEBFC, 0xEEEC20, 0xEEF1F2, - 0xEFEEEB, 0xEFF0E5, 0xEFF0E8, 0xEFF0EE, 0xF0E0E2, 0xF0E5E4, 0xF1F2E0, 0xF1F2E2, 0xF1F2E8, 0xF1FF20, 0xF2E5EB, 0xF2EE20, 0xF2EEF0, 0xF2FC20, 0xF7F2EE, 0xFBF520, -} - -func newRecognizer_windows_1251() *recognizerSingleByte { - return &recognizerSingleByte{ - charset: "windows-1251", - language: "ar", - charMap: &charMap_windows_1251, - ngram: &ngrams_windows_1251, - } -} - -var charMap_KOI8_R = [256]byte{ - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0xA3, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0xA3, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, -} - -var ngrams_KOI8_R = [64]uint32{ - 0x20C4CF, 0x20C920, 0x20CBC1, 0x20CBCF, 0x20CEC1, 0x20CEC5, 0x20CFC2, 0x20D0CF, 0x20D0D2, 0x20D2C1, 0x20D3CF, 0x20D3D4, 0x20D4CF, 0x20D720, 0x20D7CF, 0x20DAC1, - 0x20DCD4, 0x20DED4, 0xC1CEC9, 0xC1D4D8, 0xC5CCD8, 0xC5CEC9, 0xC5D3D4, 0xC5D420, 0xC7CF20, 0xC920D0, 0xC9C520, 0xC9C920, 0xC9D120, 0xCCC5CE, 0xCCC920, 0xCCD8CE, - 0xCEC120, 0xCEC520, 0xCEC9C5, 0xCEC9D1, 0xCECF20, 0xCECFD7, 0xCF20D0, 0xCF20D3, 0xCF20D7, 0xCFC7CF, 0xCFCA20, 0xCFCCD8, 0xCFCD20, 0xCFD3D4, 0xCFD720, 0xCFD7C1, - 0xD0CFCC, 0xD0D2C5, 0xD0D2C9, 0xD0D2CF, 0xD2C1D7, 0xD2C5C4, 0xD3D120, 0xD3D4C1, 0xD3D4C9, 0xD3D4D7, 0xD4C5CC, 0xD4CF20, 0xD4CFD2, 0xD4D820, 0xD9C820, 0xDED4CF, -} - -func newRecognizer_KOI8_R() *recognizerSingleByte { - return &recognizerSingleByte{ - charset: "KOI8-R", - language: "ru", - charMap: &charMap_KOI8_R, - ngram: &ngrams_KOI8_R, - } -} - -var charMap_IBM424_he = [256]byte{ - /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F */ - /* 0- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 1- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 2- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 3- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 4- */ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 5- */ 0x40, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 6- */ 0x40, 0x40, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 7- */ 0x40, 0x71, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x40, 0x40, - /* 8- */ 0x40, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 9- */ 0x40, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* A- */ 0xA0, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* B- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* C- */ 0x40, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* D- */ 0x40, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* E- */ 0x40, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* F- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, -} - -var ngrams_IBM424_he_rtl = [64]uint32{ - 0x404146, 0x404148, 0x404151, 0x404171, 0x404251, 0x404256, 0x404541, 0x404546, 0x404551, 0x404556, 0x404562, 0x404569, 0x404571, 0x405441, 0x405445, 0x405641, - 0x406254, 0x406954, 0x417140, 0x454041, 0x454042, 0x454045, 0x454054, 0x454056, 0x454069, 0x454641, 0x464140, 0x465540, 0x465740, 0x466840, 0x467140, 0x514045, - 0x514540, 0x514671, 0x515155, 0x515540, 0x515740, 0x516840, 0x517140, 0x544041, 0x544045, 0x544140, 0x544540, 0x554041, 0x554042, 0x554045, 0x554054, 0x554056, - 0x554069, 0x564540, 0x574045, 0x584540, 0x585140, 0x585155, 0x625440, 0x684045, 0x685155, 0x695440, 0x714041, 0x714042, 0x714045, 0x714054, 0x714056, 0x714069, -} - -var ngrams_IBM424_he_ltr = [64]uint32{ - 0x404146, 0x404154, 0x404551, 0x404554, 0x404556, 0x404558, 0x405158, 0x405462, 0x405469, 0x405546, 0x405551, 0x405746, 0x405751, 0x406846, 0x406851, 0x407141, - 0x407146, 0x407151, 0x414045, 0x414054, 0x414055, 0x414071, 0x414540, 0x414645, 0x415440, 0x415640, 0x424045, 0x424055, 0x424071, 0x454045, 0x454051, 0x454054, - 0x454055, 0x454057, 0x454068, 0x454071, 0x455440, 0x464140, 0x464540, 0x484140, 0x514140, 0x514240, 0x514540, 0x544045, 0x544055, 0x544071, 0x546240, 0x546940, - 0x555151, 0x555158, 0x555168, 0x564045, 0x564055, 0x564071, 0x564240, 0x564540, 0x624540, 0x694045, 0x694055, 0x694071, 0x694540, 0x714140, 0x714540, 0x714651, -} - -func newRecognizer_IBM424_he(charset string, ngram *[64]uint32) *recognizerSingleByte { - return &recognizerSingleByte{ - charset: charset, - language: "he", - charMap: &charMap_IBM424_he, - ngram: ngram, - } -} - -func newRecognizer_IBM424_he_rtl() *recognizerSingleByte { - return newRecognizer_IBM424_he("IBM424_rtl", &ngrams_IBM424_he_rtl) -} - -func newRecognizer_IBM424_he_ltr() *recognizerSingleByte { - return newRecognizer_IBM424_he("IBM424_ltr", &ngrams_IBM424_he_ltr) -} - -var charMap_IBM420_ar = [256]byte{ - /* -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F */ - /* 0- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 1- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 2- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 3- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 4- */ 0x40, 0x40, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 5- */ 0x40, 0x51, 0x52, 0x40, 0x40, 0x55, 0x56, 0x57, 0x58, 0x59, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 6- */ 0x40, 0x40, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 7- */ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - /* 8- */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, - /* 9- */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, - /* A- */ 0xA0, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, - /* B- */ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0x40, 0x40, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, - /* C- */ 0x40, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x40, 0xCB, 0x40, 0xCD, 0x40, 0xCF, - /* D- */ 0x40, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - /* E- */ 0x40, 0x40, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xEA, 0xEB, 0x40, 0xED, 0xEE, 0xEF, - /* F- */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xFB, 0xFC, 0xFD, 0xFE, 0x40, -} - -var ngrams_IBM420_ar_rtl = [64]uint32{ - 0x4056B1, 0x4056BD, 0x405856, 0x409AB1, 0x40ABDC, 0x40B1B1, 0x40BBBD, 0x40CF56, 0x564056, 0x564640, 0x566340, 0x567540, 0x56B140, 0x56B149, 0x56B156, 0x56B158, - 0x56B163, 0x56B167, 0x56B169, 0x56B173, 0x56B178, 0x56B19A, 0x56B1AD, 0x56B1BB, 0x56B1CF, 0x56B1DC, 0x56BB40, 0x56BD40, 0x56BD63, 0x584056, 0x624056, 0x6240AB, - 0x6240B1, 0x6240BB, 0x6240CF, 0x634056, 0x734056, 0x736240, 0x754056, 0x756240, 0x784056, 0x9A4056, 0x9AB1DA, 0xABDC40, 0xB14056, 0xB16240, 0xB1DA40, 0xB1DC40, - 0xBB4056, 0xBB5640, 0xBB6240, 0xBBBD40, 0xBD4056, 0xBF4056, 0xBF5640, 0xCF56B1, 0xCFBD40, 0xDA4056, 0xDC4056, 0xDC40BB, 0xDC40CF, 0xDC6240, 0xDC7540, 0xDCBD40, -} - -var ngrams_IBM420_ar_ltr = [64]uint32{ - 0x404656, 0x4056BB, 0x4056BF, 0x406273, 0x406275, 0x4062B1, 0x4062BB, 0x4062DC, 0x406356, 0x407556, 0x4075DC, 0x40B156, 0x40BB56, 0x40BD56, 0x40BDBB, 0x40BDCF, - 0x40BDDC, 0x40DAB1, 0x40DCAB, 0x40DCB1, 0x49B156, 0x564056, 0x564058, 0x564062, 0x564063, 0x564073, 0x564075, 0x564078, 0x56409A, 0x5640B1, 0x5640BB, 0x5640BD, - 0x5640BF, 0x5640DA, 0x5640DC, 0x565840, 0x56B156, 0x56CF40, 0x58B156, 0x63B156, 0x63BD56, 0x67B156, 0x69B156, 0x73B156, 0x78B156, 0x9AB156, 0xAB4062, 0xADB156, - 0xB14062, 0xB15640, 0xB156CF, 0xB19A40, 0xB1B140, 0xBB4062, 0xBB40DC, 0xBBB156, 0xBD5640, 0xBDBB40, 0xCF4062, 0xCF40DC, 0xCFB156, 0xDAB19A, 0xDCAB40, 0xDCB156, -} - -func newRecognizer_IBM420_ar(charset string, ngram *[64]uint32) *recognizerSingleByte { - return &recognizerSingleByte{ - charset: charset, - language: "ar", - charMap: &charMap_IBM420_ar, - ngram: ngram, - } -} - -func newRecognizer_IBM420_ar_rtl() *recognizerSingleByte { - return newRecognizer_IBM420_ar("IBM420_rtl", &ngrams_IBM420_ar_rtl) -} - -func newRecognizer_IBM420_ar_ltr() *recognizerSingleByte { - return newRecognizer_IBM420_ar("IBM420_ltr", &ngrams_IBM420_ar_ltr) -} diff --git a/vendor/github.com/gogs/chardet/unicode.go b/vendor/github.com/gogs/chardet/unicode.go deleted file mode 100644 index 6f9fa9e67..000000000 --- a/vendor/github.com/gogs/chardet/unicode.go +++ /dev/null @@ -1,103 +0,0 @@ -package chardet - -import ( - "bytes" -) - -var ( - utf16beBom = []byte{0xFE, 0xFF} - utf16leBom = []byte{0xFF, 0xFE} - utf32beBom = []byte{0x00, 0x00, 0xFE, 0xFF} - utf32leBom = []byte{0xFF, 0xFE, 0x00, 0x00} -) - -type recognizerUtf16be struct { -} - -func newRecognizer_utf16be() *recognizerUtf16be { - return &recognizerUtf16be{} -} - -func (*recognizerUtf16be) Match(input *recognizerInput) (output recognizerOutput) { - output = recognizerOutput{ - Charset: "UTF-16BE", - } - if bytes.HasPrefix(input.raw, utf16beBom) { - output.Confidence = 100 - } - return -} - -type recognizerUtf16le struct { -} - -func newRecognizer_utf16le() *recognizerUtf16le { - return &recognizerUtf16le{} -} - -func (*recognizerUtf16le) Match(input *recognizerInput) (output recognizerOutput) { - output = recognizerOutput{ - Charset: "UTF-16LE", - } - if bytes.HasPrefix(input.raw, utf16leBom) && !bytes.HasPrefix(input.raw, utf32leBom) { - output.Confidence = 100 - } - return -} - -type recognizerUtf32 struct { - name string - bom []byte - decodeChar func(input []byte) uint32 -} - -func decodeUtf32be(input []byte) uint32 { - return uint32(input[0])<<24 | uint32(input[1])<<16 | uint32(input[2])<<8 | uint32(input[3]) -} - -func decodeUtf32le(input []byte) uint32 { - return uint32(input[3])<<24 | uint32(input[2])<<16 | uint32(input[1])<<8 | uint32(input[0]) -} - -func newRecognizer_utf32be() *recognizerUtf32 { - return &recognizerUtf32{ - "UTF-32BE", - utf32beBom, - decodeUtf32be, - } -} - -func newRecognizer_utf32le() *recognizerUtf32 { - return &recognizerUtf32{ - "UTF-32LE", - utf32leBom, - decodeUtf32le, - } -} - -func (r *recognizerUtf32) Match(input *recognizerInput) (output recognizerOutput) { - output = recognizerOutput{ - Charset: r.name, - } - hasBom := bytes.HasPrefix(input.raw, r.bom) - var numValid, numInvalid uint32 - for b := input.raw; len(b) >= 4; b = b[4:] { - if c := r.decodeChar(b); c >= 0x10FFFF || (c >= 0xD800 && c <= 0xDFFF) { - numInvalid++ - } else { - numValid++ - } - } - if hasBom && numInvalid == 0 { - output.Confidence = 100 - } else if hasBom && numValid > numInvalid*10 { - output.Confidence = 80 - } else if numValid > 3 && numInvalid == 0 { - output.Confidence = 100 - } else if numValid > 0 && numInvalid == 0 { - output.Confidence = 80 - } else if numValid > numInvalid*10 { - output.Confidence = 25 - } - return -} diff --git a/vendor/github.com/gogs/chardet/utf8.go b/vendor/github.com/gogs/chardet/utf8.go deleted file mode 100644 index ae036ad9b..000000000 --- a/vendor/github.com/gogs/chardet/utf8.go +++ /dev/null @@ -1,71 +0,0 @@ -package chardet - -import ( - "bytes" -) - -var utf8Bom = []byte{0xEF, 0xBB, 0xBF} - -type recognizerUtf8 struct { -} - -func newRecognizer_utf8() *recognizerUtf8 { - return &recognizerUtf8{} -} - -func (*recognizerUtf8) Match(input *recognizerInput) (output recognizerOutput) { - output = recognizerOutput{ - Charset: "UTF-8", - } - hasBom := bytes.HasPrefix(input.raw, utf8Bom) - inputLen := len(input.raw) - var numValid, numInvalid uint32 - var trailBytes uint8 - for i := 0; i < inputLen; i++ { - c := input.raw[i] - if c&0x80 == 0 { - continue - } - if c&0xE0 == 0xC0 { - trailBytes = 1 - } else if c&0xF0 == 0xE0 { - trailBytes = 2 - } else if c&0xF8 == 0xF0 { - trailBytes = 3 - } else { - numInvalid++ - if numInvalid > 5 { - break - } - trailBytes = 0 - } - - for i++; i < inputLen; i++ { - c = input.raw[i] - if c&0xC0 != 0x80 { - numInvalid++ - break - } - if trailBytes--; trailBytes == 0 { - numValid++ - break - } - } - } - - if hasBom && numInvalid == 0 { - output.Confidence = 100 - } else if hasBom && numValid > numInvalid*10 { - output.Confidence = 80 - } else if numValid > 3 && numInvalid == 0 { - output.Confidence = 100 - } else if numValid > 0 && numInvalid == 0 { - output.Confidence = 80 - } else if numValid == 0 && numInvalid == 0 { - // Plain ASCII - output.Confidence = 10 - } else if numValid > numInvalid*10 { - output.Confidence = 25 - } - return -} diff --git a/vendor/github.com/gogs/cron/LICENSE b/vendor/github.com/gogs/cron/LICENSE deleted file mode 100644 index 3a0f627ff..000000000 --- a/vendor/github.com/gogs/cron/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (C) 2012 Rob Figueiredo -All Rights Reserved. - -MIT LICENSE - -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/gogs/cron/README.md b/vendor/github.com/gogs/cron/README.md deleted file mode 100644 index 157ed082d..000000000 --- a/vendor/github.com/gogs/cron/README.md +++ /dev/null @@ -1,2 +0,0 @@ -[![GoDoc](http://godoc.org/github.com/robfig/cron?status.png)](http://godoc.org/github.com/robfig/cron) -[![Build Status](https://travis-ci.org/robfig/cron.svg?branch=master)](https://travis-ci.org/robfig/cron) diff --git a/vendor/github.com/gogs/cron/constantdelay.go b/vendor/github.com/gogs/cron/constantdelay.go deleted file mode 100644 index cd6e7b1be..000000000 --- a/vendor/github.com/gogs/cron/constantdelay.go +++ /dev/null @@ -1,27 +0,0 @@ -package cron - -import "time" - -// ConstantDelaySchedule represents a simple recurring duty cycle, e.g. "Every 5 minutes". -// It does not support jobs more frequent than once a second. -type ConstantDelaySchedule struct { - Delay time.Duration -} - -// Every returns a crontab Schedule that activates once every duration. -// Delays of less than a second are not supported (will round up to 1 second). -// Any fields less than a Second are truncated. -func Every(duration time.Duration) ConstantDelaySchedule { - if duration < time.Second { - duration = time.Second - } - return ConstantDelaySchedule{ - Delay: duration - time.Duration(duration.Nanoseconds())%time.Second, - } -} - -// Next returns the next time this should be run. -// This rounds so that the next activation time will be on the second. -func (schedule ConstantDelaySchedule) Next(t time.Time) time.Time { - return t.Add(schedule.Delay - time.Duration(t.Nanosecond())*time.Nanosecond) -} diff --git a/vendor/github.com/gogs/cron/cron.go b/vendor/github.com/gogs/cron/cron.go deleted file mode 100644 index ed6ad21c1..000000000 --- a/vendor/github.com/gogs/cron/cron.go +++ /dev/null @@ -1,243 +0,0 @@ -// This library implements a cron spec parser and runner. See the README for -// more details. -package cron - -import ( - "log" - "runtime" - "sort" - "time" -) - -// Cron keeps track of any number of entries, invoking the associated func as -// specified by the schedule. It may be started, stopped, and the entries may -// be inspected while running. -type Cron struct { - entries []*Entry - stop chan struct{} - add chan *Entry - snapshot chan []*Entry - running bool - ErrorLog *log.Logger -} - -// Job is an interface for submitted cron jobs. -type Job interface { - Run() -} - -// The Schedule describes a job's duty cycle. -type Schedule interface { - // Return the next activation time, later than the given time. - // Next is invoked initially, and then each time the job is run. - Next(time.Time) time.Time -} - -// Entry consists of a schedule and the func to execute on that schedule. -type Entry struct { - Description string - Spec string - - // The schedule on which this job should be run. - Schedule Schedule - - // The next time the job will run. This is the zero time if Cron has not been - // started or this entry's schedule is unsatisfiable - Next time.Time - - // The last time this job was run. This is the zero time if the job has never - // been run. - Prev time.Time - - // The Job to run. - Job Job - - ExecTimes int // Execute times count. -} - -// byTime is a wrapper for sorting the entry array by time -// (with zero time at the end). -type byTime []*Entry - -func (s byTime) Len() int { return len(s) } -func (s byTime) Swap(i, j int) { s[i], s[j] = s[j], s[i] } -func (s byTime) Less(i, j int) bool { - // Two zero times should return false. - // Otherwise, zero is "greater" than any other time. - // (To sort it at the end of the list.) - if s[i].Next.IsZero() { - return false - } - if s[j].Next.IsZero() { - return true - } - return s[i].Next.Before(s[j].Next) -} - -// New returns a new Cron job runner. -func New() *Cron { - return &Cron{ - entries: nil, - add: make(chan *Entry), - stop: make(chan struct{}), - snapshot: make(chan []*Entry), - running: false, - ErrorLog: nil, - } -} - -// A wrapper that turns a func() into a cron.Job -type FuncJob func() - -func (f FuncJob) Run() { f() } - -// AddFunc adds a func to the Cron to be run on the given schedule. -func (c *Cron) AddFunc(desc, spec string, cmd func()) (*Entry, error) { - return c.AddJob(desc, spec, FuncJob(cmd)) -} - -// AddJob adds a Job to the Cron to be run on the given schedule. -func (c *Cron) AddJob(desc, spec string, cmd Job) (*Entry, error) { - schedule, err := Parse(spec) - if err != nil { - return nil, err - } - return c.Schedule(desc, spec, schedule, cmd), nil -} - -// Schedule adds a Job to the Cron to be run on the given schedule. -func (c *Cron) Schedule(desc, spec string, schedule Schedule, cmd Job) *Entry { - entry := &Entry{ - Description: desc, - Spec: spec, - Schedule: schedule, - Job: cmd, - } - if c.running { - c.add <- entry - } else { - c.entries = append(c.entries, entry) - } - return entry -} - -// Entries returns a snapshot of the cron entries. -func (c *Cron) Entries() []*Entry { - if c.running { - c.snapshot <- nil - x := <-c.snapshot - return x - } - return c.entrySnapshot() -} - -// Start the cron scheduler in its own go-routine, or no-op if already started. -func (c *Cron) Start() { - if c.running { - return - } - c.running = true - go c.run() -} - -func (c *Cron) runWithRecovery(j Job) { - defer func() { - if r := recover(); r != nil { - const size = 64 << 10 - buf := make([]byte, size) - buf = buf[:runtime.Stack(buf, false)] - c.logf("cron: panic running job: %v\n%s", r, buf) - } - }() - j.Run() -} - -// Run the scheduler.. this is private just due to the need to synchronize -// access to the 'running' state variable. -func (c *Cron) run() { - // Figure out the next activation times for each entry. - now := time.Now().Local() - for _, entry := range c.entries { - entry.Next = entry.Schedule.Next(now) - } - - for { - // Determine the next entry to run. - sort.Sort(byTime(c.entries)) - - var effective time.Time - if len(c.entries) == 0 || c.entries[0].Next.IsZero() { - // If there are no entries yet, just sleep - it still handles new entries - // and stop requests. - effective = now.AddDate(10, 0, 0) - } else { - effective = c.entries[0].Next - } - - timer := time.NewTimer(effective.Sub(now)) - select { - case now = <-timer.C: - // Run every entry whose next time was this effective time. - for _, e := range c.entries { - if e.Next != effective { - break - } - go c.runWithRecovery(e.Job) - e.ExecTimes++ - e.Prev = e.Next - e.Next = e.Schedule.Next(now) - } - continue - - case newEntry := <-c.add: - c.entries = append(c.entries, newEntry) - newEntry.Next = newEntry.Schedule.Next(time.Now().Local()) - - case <-c.snapshot: - c.snapshot <- c.entrySnapshot() - - case <-c.stop: - timer.Stop() - return - } - - // 'now' should be updated after newEntry and snapshot cases. - now = time.Now().Local() - timer.Stop() - } -} - -// Logs an error to stderr or to the configured error log -func (c *Cron) logf(format string, args ...interface{}) { - if c.ErrorLog != nil { - c.ErrorLog.Printf(format, args...) - } else { - log.Printf(format, args...) - } -} - -// Stop stops the cron scheduler if it is running; otherwise it does nothing. -func (c *Cron) Stop() { - if !c.running { - return - } - c.stop <- struct{}{} - c.running = false -} - -// entrySnapshot returns a copy of the current cron entry list. -func (c *Cron) entrySnapshot() []*Entry { - entries := []*Entry{} - for _, e := range c.entries { - entries = append(entries, &Entry{ - Description: e.Description, - Spec: e.Spec, - Schedule: e.Schedule, - Next: e.Next, - Prev: e.Prev, - Job: e.Job, - ExecTimes: e.ExecTimes, - }) - } - return entries -} diff --git a/vendor/github.com/gogs/cron/doc.go b/vendor/github.com/gogs/cron/doc.go deleted file mode 100644 index dbdf50127..000000000 --- a/vendor/github.com/gogs/cron/doc.go +++ /dev/null @@ -1,129 +0,0 @@ -/* -Package cron implements a cron spec parser and job runner. - -Usage - -Callers may register Funcs to be invoked on a given schedule. Cron will run -them in their own goroutines. - - c := cron.New() - c.AddFunc("0 30 * * * *", func() { fmt.Println("Every hour on the half hour") }) - c.AddFunc("@hourly", func() { fmt.Println("Every hour") }) - c.AddFunc("@every 1h30m", func() { fmt.Println("Every hour thirty") }) - c.Start() - .. - // Funcs are invoked in their own goroutine, asynchronously. - ... - // Funcs may also be added to a running Cron - c.AddFunc("@daily", func() { fmt.Println("Every day") }) - .. - // Inspect the cron job entries' next and previous run times. - inspect(c.Entries()) - .. - c.Stop() // Stop the scheduler (does not stop any jobs already running). - -CRON Expression Format - -A cron expression represents a set of times, using 6 space-separated fields. - - Field name | Mandatory? | Allowed values | Allowed special characters - ---------- | ---------- | -------------- | -------------------------- - Seconds | Yes | 0-59 | * / , - - Minutes | Yes | 0-59 | * / , - - Hours | Yes | 0-23 | * / , - - Day of month | Yes | 1-31 | * / , - ? - Month | Yes | 1-12 or JAN-DEC | * / , - - Day of week | Yes | 0-6 or SUN-SAT | * / , - ? - -Note: Month and Day-of-week field values are case insensitive. "SUN", "Sun", -and "sun" are equally accepted. - -Special Characters - -Asterisk ( * ) - -The asterisk indicates that the cron expression will match for all values of the -field; e.g., using an asterisk in the 5th field (month) would indicate every -month. - -Slash ( / ) - -Slashes are used to describe increments of ranges. For example 3-59/15 in the -1st field (minutes) would indicate the 3rd minute of the hour and every 15 -minutes thereafter. The form "*\/..." is equivalent to the form "first-last/...", -that is, an increment over the largest possible range of the field. The form -"N/..." is accepted as meaning "N-MAX/...", that is, starting at N, use the -increment until the end of that specific range. It does not wrap around. - -Comma ( , ) - -Commas are used to separate items of a list. For example, using "MON,WED,FRI" in -the 5th field (day of week) would mean Mondays, Wednesdays and Fridays. - -Hyphen ( - ) - -Hyphens are used to define ranges. For example, 9-17 would indicate every -hour between 9am and 5pm inclusive. - -Question mark ( ? ) - -Question mark may be used instead of '*' for leaving either day-of-month or -day-of-week blank. - -Predefined schedules - -You may use one of several pre-defined schedules in place of a cron expression. - - Entry | Description | Equivalent To - ----- | ----------- | ------------- - @yearly (or @annually) | Run once a year, midnight, Jan. 1st | 0 0 0 1 1 * - @monthly | Run once a month, midnight, first of month | 0 0 0 1 * * - @weekly | Run once a week, midnight on Sunday | 0 0 0 * * 0 - @daily (or @midnight) | Run once a day, midnight | 0 0 0 * * * - @hourly | Run once an hour, beginning of hour | 0 0 * * * * - -Intervals - -You may also schedule a job to execute at fixed intervals. This is supported by -formatting the cron spec like this: - - @every - -where "duration" is a string accepted by time.ParseDuration -(http://golang.org/pkg/time/#ParseDuration). - -For example, "@every 1h30m10s" would indicate a schedule that activates every -1 hour, 30 minutes, 10 seconds. - -Note: The interval does not take the job runtime into account. For example, -if a job takes 3 minutes to run, and it is scheduled to run every 5 minutes, -it will have only 2 minutes of idle time between each run. - -Time zones - -All interpretation and scheduling is done in the machine's local time zone (as -provided by the Go time package (http://www.golang.org/pkg/time). - -Be aware that jobs scheduled during daylight-savings leap-ahead transitions will -not be run! - -Thread safety - -Since the Cron service runs concurrently with the calling code, some amount of -care must be taken to ensure proper synchronization. - -All cron methods are designed to be correctly synchronized as long as the caller -ensures that invocations have a clear happens-before ordering between them. - -Implementation - -Cron entries are stored in an array, sorted by their next activation time. Cron -sleeps until the next job is due to be run. - -Upon waking: - - it runs each entry that is active on that second - - it calculates the next run times for the jobs that were run - - it re-sorts the array of entries by next activation time. - - it goes to sleep until the soonest job. -*/ -package cron diff --git a/vendor/github.com/gogs/cron/parser.go b/vendor/github.com/gogs/cron/parser.go deleted file mode 100644 index fd217c92d..000000000 --- a/vendor/github.com/gogs/cron/parser.go +++ /dev/null @@ -1,234 +0,0 @@ -package cron - -import ( - "fmt" - "log" - "math" - "strconv" - "strings" - "time" -) - -// Parse returns a new crontab schedule representing the given spec. -// It returns a descriptive error if the spec is not valid. -// -// It accepts -// - Full crontab specs, e.g. "* * * * * ?" -// - Descriptors, e.g. "@midnight", "@every 1h30m" -func Parse(spec string) (_ Schedule, err error) { - // Convert panics into errors - defer func() { - if recovered := recover(); recovered != nil { - err = fmt.Errorf("%v", recovered) - } - }() - - if spec[0] == '@' { - return parseDescriptor(spec), nil - } - - // Split on whitespace. We require 5 or 6 fields. - // (second) (minute) (hour) (day of month) (month) (day of week, optional) - fields := strings.Fields(spec) - if len(fields) != 5 && len(fields) != 6 { - log.Panicf("Expected 5 or 6 fields, found %d: %s", len(fields), spec) - } - - // If a sixth field is not provided (DayOfWeek), then it is equivalent to star. - if len(fields) == 5 { - fields = append(fields, "*") - } - - schedule := &SpecSchedule{ - Second: getField(fields[0], seconds), - Minute: getField(fields[1], minutes), - Hour: getField(fields[2], hours), - Dom: getField(fields[3], dom), - Month: getField(fields[4], months), - Dow: getField(fields[5], dow), - } - - return schedule, nil -} - -// getField returns an Int with the bits set representing all of the times that -// the field represents. A "field" is a comma-separated list of "ranges". -func getField(field string, r bounds) uint64 { - // list = range {"," range} - var bits uint64 - ranges := strings.FieldsFunc(field, func(r rune) bool { return r == ',' }) - for _, expr := range ranges { - bits |= getRange(expr, r) - } - return bits -} - -// getRange returns the bits indicated by the given expression: -// number | number "-" number [ "/" number ] -func getRange(expr string, r bounds) uint64 { - - var ( - start, end, step uint - rangeAndStep = strings.Split(expr, "/") - lowAndHigh = strings.Split(rangeAndStep[0], "-") - singleDigit = len(lowAndHigh) == 1 - ) - - var extra_star uint64 - if lowAndHigh[0] == "*" || lowAndHigh[0] == "?" { - start = r.min - end = r.max - extra_star = starBit - } else { - start = parseIntOrName(lowAndHigh[0], r.names) - switch len(lowAndHigh) { - case 1: - end = start - case 2: - end = parseIntOrName(lowAndHigh[1], r.names) - default: - log.Panicf("Too many hyphens: %s", expr) - } - } - - switch len(rangeAndStep) { - case 1: - step = 1 - case 2: - step = mustParseInt(rangeAndStep[1]) - - // Special handling: "N/step" means "N-max/step". - if singleDigit { - end = r.max - } - default: - log.Panicf("Too many slashes: %s", expr) - } - - if start < r.min { - log.Panicf("Beginning of range (%d) below minimum (%d): %s", start, r.min, expr) - } - if end > r.max { - log.Panicf("End of range (%d) above maximum (%d): %s", end, r.max, expr) - } - if start > end { - log.Panicf("Beginning of range (%d) beyond end of range (%d): %s", start, end, expr) - } - if step == 0 { - log.Panicf("Step of range should be a positive number: %s", expr) - } - - return getBits(start, end, step) | extra_star -} - -// parseIntOrName returns the (possibly-named) integer contained in expr. -func parseIntOrName(expr string, names map[string]uint) uint { - if names != nil { - if namedInt, ok := names[strings.ToLower(expr)]; ok { - return namedInt - } - } - return mustParseInt(expr) -} - -// mustParseInt parses the given expression as an int or panics. -func mustParseInt(expr string) uint { - num, err := strconv.Atoi(expr) - if err != nil { - log.Panicf("Failed to parse int from %s: %s", expr, err) - } - if num < 0 { - log.Panicf("Negative number (%d) not allowed: %s", num, expr) - } - - return uint(num) -} - -// getBits sets all bits in the range [min, max], modulo the given step size. -func getBits(min, max, step uint) uint64 { - var bits uint64 - - // If step is 1, use shifts. - if step == 1 { - return ^(math.MaxUint64 << (max + 1)) & (math.MaxUint64 << min) - } - - // Else, use a simple loop. - for i := min; i <= max; i += step { - bits |= 1 << i - } - return bits -} - -// all returns all bits within the given bounds. (plus the star bit) -func all(r bounds) uint64 { - return getBits(r.min, r.max, 1) | starBit -} - -// parseDescriptor returns a pre-defined schedule for the expression, or panics -// if none matches. -func parseDescriptor(spec string) Schedule { - switch spec { - case "@yearly", "@annually": - return &SpecSchedule{ - Second: 1 << seconds.min, - Minute: 1 << minutes.min, - Hour: 1 << hours.min, - Dom: 1 << dom.min, - Month: 1 << months.min, - Dow: all(dow), - } - - case "@monthly": - return &SpecSchedule{ - Second: 1 << seconds.min, - Minute: 1 << minutes.min, - Hour: 1 << hours.min, - Dom: 1 << dom.min, - Month: all(months), - Dow: all(dow), - } - - case "@weekly": - return &SpecSchedule{ - Second: 1 << seconds.min, - Minute: 1 << minutes.min, - Hour: 1 << hours.min, - Dom: all(dom), - Month: all(months), - Dow: 1 << dow.min, - } - - case "@daily", "@midnight": - return &SpecSchedule{ - Second: 1 << seconds.min, - Minute: 1 << minutes.min, - Hour: 1 << hours.min, - Dom: all(dom), - Month: all(months), - Dow: all(dow), - } - - case "@hourly": - return &SpecSchedule{ - Second: 1 << seconds.min, - Minute: 1 << minutes.min, - Hour: all(hours), - Dom: all(dom), - Month: all(months), - Dow: all(dow), - } - } - - const every = "@every " - if strings.HasPrefix(spec, every) { - duration, err := time.ParseDuration(spec[len(every):]) - if err != nil { - log.Panicf("Failed to parse duration %s: %s", spec, err) - } - return Every(duration) - } - - log.Panicf("Unrecognized descriptor: %s", spec) - return nil -} diff --git a/vendor/github.com/gogs/cron/spec.go b/vendor/github.com/gogs/cron/spec.go deleted file mode 100644 index 2b5412695..000000000 --- a/vendor/github.com/gogs/cron/spec.go +++ /dev/null @@ -1,159 +0,0 @@ -package cron - -import "time" - -// SpecSchedule specifies a duty cycle (to the second granularity), based on a -// traditional crontab specification. It is computed initially and stored as bit sets. -type SpecSchedule struct { - Second, Minute, Hour, Dom, Month, Dow uint64 -} - -// bounds provides a range of acceptable values (plus a map of name to value). -type bounds struct { - min, max uint - names map[string]uint -} - -// The bounds for each field. -var ( - seconds = bounds{0, 59, nil} - minutes = bounds{0, 59, nil} - hours = bounds{0, 23, nil} - dom = bounds{1, 31, nil} - months = bounds{1, 12, map[string]uint{ - "jan": 1, - "feb": 2, - "mar": 3, - "apr": 4, - "may": 5, - "jun": 6, - "jul": 7, - "aug": 8, - "sep": 9, - "oct": 10, - "nov": 11, - "dec": 12, - }} - dow = bounds{0, 6, map[string]uint{ - "sun": 0, - "mon": 1, - "tue": 2, - "wed": 3, - "thu": 4, - "fri": 5, - "sat": 6, - }} -) - -const ( - // Set the top bit if a star was included in the expression. - starBit = 1 << 63 -) - -// Next returns the next time this schedule is activated, greater than the given -// time. If no time can be found to satisfy the schedule, return the zero time. -func (s *SpecSchedule) Next(t time.Time) time.Time { - // General approach: - // For Month, Day, Hour, Minute, Second: - // Check if the time value matches. If yes, continue to the next field. - // If the field doesn't match the schedule, then increment the field until it matches. - // While incrementing the field, a wrap-around brings it back to the beginning - // of the field list (since it is necessary to re-verify previous field - // values) - - // Start at the earliest possible time (the upcoming second). - t = t.Add(1*time.Second - time.Duration(t.Nanosecond())*time.Nanosecond) - - // This flag indicates whether a field has been incremented. - added := false - - // If no time is found within five years, return zero. - yearLimit := t.Year() + 5 - -WRAP: - if t.Year() > yearLimit { - return time.Time{} - } - - // Find the first applicable month. - // If it's this month, then do nothing. - for 1< 0 - dowMatch bool = 1< 0 - ) - - if s.Dom&starBit > 0 || s.Dow&starBit > 0 { - return domMatch && dowMatch - } - return domMatch || dowMatch -} diff --git a/vendor/github.com/gogs/git-module/LICENSE b/vendor/github.com/gogs/git-module/LICENSE deleted file mode 100644 index 176d8dfe0..000000000 --- a/vendor/github.com/gogs/git-module/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015 All Gogs Contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/vendor/github.com/gogs/git-module/README.md b/vendor/github.com/gogs/git-module/README.md deleted file mode 100644 index f9569ceb3..000000000 --- a/vendor/github.com/gogs/git-module/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Git Module [![Build Status](https://travis-ci.org/gogits/git-module.svg?branch=master)](https://travis-ci.org/gogits/git-module) - -Package git-module is a Go module for Git access through shell commands. - -## Limitations - -- Go version must be at least **1.4**. -- Git version must be no less than **1.7.1**, and greater than or equal to **1.8.3** is recommended. -- For Windows users, try use as new a version as possible. - -## License - -This project is under the MIT License. See the [LICENSE](LICENSE) file for the full license text. diff --git a/vendor/github.com/gogs/git-module/blob.go b/vendor/github.com/gogs/git-module/blob.go deleted file mode 100644 index 7731226d4..000000000 --- a/vendor/github.com/gogs/git-module/blob.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "bytes" - "io" -) - -// Blob represents a Git object. -type Blob struct { - repo *Repository - *TreeEntry -} - -// Data gets content of blob all at once and wrap it as io.Reader. -// This can be very slow and memory consuming for huge content. -func (b *Blob) Data() (io.Reader, error) { - stdout := new(bytes.Buffer) - stderr := new(bytes.Buffer) - - // Preallocate memory to save ~50% memory usage on big files. - stdout.Grow(int(b.Size() + 2048)) - - if err := b.DataPipeline(stdout, stderr); err != nil { - return nil, concatenateError(err, stderr.String()) - } - return stdout, nil -} - -func (b *Blob) DataPipeline(stdout, stderr io.Writer) error { - return NewCommand("show", b.ID.String()).RunInDirPipeline(b.repo.Path, stdout, stderr) -} diff --git a/vendor/github.com/gogs/git-module/command.go b/vendor/github.com/gogs/git-module/command.go deleted file mode 100644 index 80caea086..000000000 --- a/vendor/github.com/gogs/git-module/command.go +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "bytes" - "fmt" - "io" - "os" - "os/exec" - "strings" - "time" -) - -// Command represents a command with its subcommands or arguments. -type Command struct { - name string - args []string - envs []string -} - -func (c *Command) String() string { - if len(c.args) == 0 { - return c.name - } - return fmt.Sprintf("%s %s", c.name, strings.Join(c.args, " ")) -} - -// NewCommand creates and returns a new Git Command based on given command and arguments. -func NewCommand(args ...string) *Command { - return &Command{ - name: "git", - args: args, - } -} - -// AddArguments adds new argument(s) to the command. -func (c *Command) AddArguments(args ...string) *Command { - c.args = append(c.args, args...) - return c -} - -// AddEnvs adds new environment variables to the command. -func (c *Command) AddEnvs(envs ...string) *Command { - c.envs = append(c.envs, envs...) - return c -} - -const DEFAULT_TIMEOUT = 60 * time.Second - -// RunInDirTimeoutPipeline executes the command in given directory with given timeout, -// it pipes stdout and stderr to given io.Writer. -func (c *Command) RunInDirTimeoutPipeline(timeout time.Duration, dir string, stdout, stderr io.Writer) error { - if timeout == -1 { - timeout = DEFAULT_TIMEOUT - } - - if len(dir) == 0 { - log(c.String()) - } else { - log("%s: %v", dir, c) - } - - cmd := exec.Command(c.name, c.args...) - if c.envs != nil { - cmd.Env = append(os.Environ(), c.envs...) - } - cmd.Dir = dir - cmd.Stdout = stdout - cmd.Stderr = stderr - if err := cmd.Start(); err != nil { - return err - } - - done := make(chan error) - go func() { - done <- cmd.Wait() - }() - - var err error - select { - case <-time.After(timeout): - if cmd.Process != nil && cmd.ProcessState != nil && !cmd.ProcessState.Exited() { - if err := cmd.Process.Kill(); err != nil { - return fmt.Errorf("fail to kill process: %v", err) - } - } - - <-done - return ErrExecTimeout{timeout} - case err = <-done: - } - - return err -} - -// RunInDirTimeout executes the command in given directory with given timeout, -// and returns stdout in []byte and error (combined with stderr). -func (c *Command) RunInDirTimeout(timeout time.Duration, dir string) ([]byte, error) { - stdout := new(bytes.Buffer) - stderr := new(bytes.Buffer) - if err := c.RunInDirTimeoutPipeline(timeout, dir, stdout, stderr); err != nil { - return nil, concatenateError(err, stderr.String()) - } - - if stdout.Len() > 0 { - log("stdout:\n%s", stdout.Bytes()[:1024]) - } - return stdout.Bytes(), nil -} - -// RunInDirPipeline executes the command in given directory, -// it pipes stdout and stderr to given io.Writer. -func (c *Command) RunInDirPipeline(dir string, stdout, stderr io.Writer) error { - return c.RunInDirTimeoutPipeline(-1, dir, stdout, stderr) -} - -// RunInDir executes the command in given directory -// and returns stdout in []byte and error (combined with stderr). -func (c *Command) RunInDirBytes(dir string) ([]byte, error) { - return c.RunInDirTimeout(-1, dir) -} - -// RunInDir executes the command in given directory -// and returns stdout in string and error (combined with stderr). -func (c *Command) RunInDir(dir string) (string, error) { - stdout, err := c.RunInDirTimeout(-1, dir) - if err != nil { - return "", err - } - return string(stdout), nil -} - -// RunTimeout executes the command in defualt working directory with given timeout, -// and returns stdout in string and error (combined with stderr). -func (c *Command) RunTimeout(timeout time.Duration) (string, error) { - stdout, err := c.RunInDirTimeout(timeout, "") - if err != nil { - return "", err - } - return string(stdout), nil -} - -// Run executes the command in defualt working directory -// and returns stdout in string and error (combined with stderr). -func (c *Command) Run() (string, error) { - return c.RunTimeout(-1) -} diff --git a/vendor/github.com/gogs/git-module/commit.go b/vendor/github.com/gogs/git-module/commit.go deleted file mode 100644 index a0bed8b53..000000000 --- a/vendor/github.com/gogs/git-module/commit.go +++ /dev/null @@ -1,321 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "bufio" - "bytes" - "container/list" - "fmt" - "io" - "net/http" - "strconv" - "strings" - - "github.com/mcuadros/go-version" -) - -// Commit represents a git commit. -type Commit struct { - Tree - ID sha1 // The ID of this commit object - Author *Signature - Committer *Signature - CommitMessage string - - parents []sha1 // SHA1 strings - submoduleCache *objectCache -} - -// Message returns the commit message. Same as retrieving CommitMessage directly. -func (c *Commit) Message() string { - return c.CommitMessage -} - -// Summary returns first line of commit message. -func (c *Commit) Summary() string { - return strings.Split(c.CommitMessage, "\n")[0] -} - -// ParentID returns oid of n-th parent (0-based index). -// It returns nil if no such parent exists. -func (c *Commit) ParentID(n int) (sha1, error) { - if n >= len(c.parents) { - return sha1{}, ErrNotExist{"", ""} - } - return c.parents[n], nil -} - -// Parent returns n-th parent (0-based index) of the commit. -func (c *Commit) Parent(n int) (*Commit, error) { - id, err := c.ParentID(n) - if err != nil { - return nil, err - } - parent, err := c.repo.getCommit(id) - if err != nil { - return nil, err - } - return parent, nil -} - -// ParentCount returns number of parents of the commit. -// 0 if this is the root commit, otherwise 1,2, etc. -func (c *Commit) ParentCount() int { - return len(c.parents) -} - -func isImageFile(data []byte) (string, bool) { - contentType := http.DetectContentType(data) - if strings.Index(contentType, "image/") != -1 { - return contentType, true - } - return contentType, false -} - -func (c *Commit) IsImageFile(name string) bool { - blob, err := c.GetBlobByPath(name) - if err != nil { - return false - } - - dataRc, err := blob.Data() - if err != nil { - return false - } - buf := make([]byte, 1024) - n, _ := dataRc.Read(buf) - buf = buf[:n] - _, isImage := isImageFile(buf) - return isImage -} - -// GetCommitByPath return the commit of relative path object. -func (c *Commit) GetCommitByPath(relpath string) (*Commit, error) { - return c.repo.getCommitByPathWithID(c.ID, relpath) -} - -// AddAllChanges marks local changes to be ready for commit. -func AddChanges(repoPath string, all bool, files ...string) error { - cmd := NewCommand("add") - if all { - cmd.AddArguments("--all") - } - _, err := cmd.AddArguments(files...).RunInDir(repoPath) - return err -} - -type CommitChangesOptions struct { - Committer *Signature - Author *Signature - Message string -} - -// CommitChanges commits local changes with given committer, author and message. -// If author is nil, it will be the same as committer. -func CommitChanges(repoPath string, opts CommitChangesOptions) error { - cmd := NewCommand() - if opts.Committer != nil { - cmd.AddEnvs("GIT_COMMITTER_NAME="+opts.Committer.Name, "GIT_COMMITTER_EMAIL="+opts.Committer.Email) - } - cmd.AddArguments("commit") - - if opts.Author == nil { - opts.Author = opts.Committer - } - if opts.Author != nil { - cmd.AddArguments(fmt.Sprintf("--author='%s <%s>'", opts.Author.Name, opts.Author.Email)) - } - cmd.AddArguments("-m", opts.Message) - - _, err := cmd.RunInDir(repoPath) - // No stderr but exit status 1 means nothing to commit. - if err != nil && err.Error() == "exit status 1" { - return nil - } - return err -} - -func commitsCount(repoPath, revision, relpath string) (int64, error) { - var cmd *Command - isFallback := false - if version.Compare(gitVersion, "1.8.0", "<") { - isFallback = true - cmd = NewCommand("log", "--pretty=format:''") - } else { - cmd = NewCommand("rev-list", "--count") - } - cmd.AddArguments(revision) - if len(relpath) > 0 { - cmd.AddArguments("--", relpath) - } - - stdout, err := cmd.RunInDir(repoPath) - if err != nil { - return 0, err - } - - if isFallback { - return int64(strings.Count(stdout, "\n")) + 1, nil - } - return strconv.ParseInt(strings.TrimSpace(stdout), 10, 64) -} - -func (c *Commit) CommitsCount() (int64, error) { - return CommitsCount(c.repo.Path, c.ID.String()) -} - -func (c *Commit) CommitsByRangeSize(page, size int) (*list.List, error) { - return c.repo.CommitsByRangeSize(c.ID.String(), page, size) -} - -func (c *Commit) CommitsByRange(page int) (*list.List, error) { - return c.repo.CommitsByRange(c.ID.String(), page) -} - -func (c *Commit) CommitsBefore() (*list.List, error) { - return c.repo.getCommitsBefore(c.ID) -} - -func (c *Commit) CommitsBeforeLimit(num int) (*list.List, error) { - return c.repo.getCommitsBeforeLimit(c.ID, num) -} - -func (c *Commit) CommitsBeforeUntil(commitID string) (*list.List, error) { - endCommit, err := c.repo.GetCommit(commitID) - if err != nil { - return nil, err - } - return c.repo.CommitsBetween(c, endCommit) -} - -func (c *Commit) SearchCommits(keyword string) (*list.List, error) { - return c.repo.searchCommits(c.ID, keyword) -} - -func (c *Commit) GetFilesChangedSinceCommit(pastCommit string) ([]string, error) { - return c.repo.getFilesChanged(pastCommit, c.ID.String()) -} - -func (c *Commit) GetSubModules() (*objectCache, error) { - if c.submoduleCache != nil { - return c.submoduleCache, nil - } - - entry, err := c.GetTreeEntryByPath(".gitmodules") - if err != nil { - return nil, err - } - rd, err := entry.Blob().Data() - if err != nil { - return nil, err - } - - scanner := bufio.NewScanner(rd) - c.submoduleCache = newObjectCache() - var ismodule bool - var path string - for scanner.Scan() { - if strings.HasPrefix(scanner.Text(), "[submodule") { - ismodule = true - continue - } - if ismodule { - fields := strings.Split(scanner.Text(), "=") - k := strings.TrimSpace(fields[0]) - if k == "path" { - path = strings.TrimSpace(fields[1]) - } else if k == "url" { - c.submoduleCache.Set(path, &SubModule{path, strings.TrimSpace(fields[1])}) - ismodule = false - } - } - } - - return c.submoduleCache, nil -} - -func (c *Commit) GetSubModule(entryname string) (*SubModule, error) { - modules, err := c.GetSubModules() - if err != nil { - return nil, err - } - - module, has := modules.Get(entryname) - if has { - return module.(*SubModule), nil - } - return nil, nil -} - -// CommitFileStatus represents status of files in a commit. -type CommitFileStatus struct { - Added []string - Removed []string - Modified []string -} - -func NewCommitFileStatus() *CommitFileStatus { - return &CommitFileStatus{ - []string{}, []string{}, []string{}, - } -} - -// GetCommitFileStatus returns file status of commit in given repository. -func GetCommitFileStatus(repoPath, commitID string) (*CommitFileStatus, error) { - stdout, w := io.Pipe() - done := make(chan struct{}) - fileStatus := NewCommitFileStatus() - go func() { - scanner := bufio.NewScanner(stdout) - for scanner.Scan() { - fields := strings.Fields(scanner.Text()) - if len(fields) < 2 { - continue - } - - switch fields[0][0] { - case 'A': - fileStatus.Added = append(fileStatus.Added, fields[1]) - case 'D': - fileStatus.Removed = append(fileStatus.Removed, fields[1]) - case 'M': - fileStatus.Modified = append(fileStatus.Modified, fields[1]) - } - } - done <- struct{}{} - }() - - stderr := new(bytes.Buffer) - err := NewCommand("show", "--name-status", "--pretty=format:''", commitID).RunInDirPipeline(repoPath, w, stderr) - w.Close() // Close writer to exit parsing goroutine - if err != nil { - return nil, concatenateError(err, stderr.String()) - } - - <-done - return fileStatus, nil -} - -// FileStatus returns file status of commit. -func (c *Commit) FileStatus() (*CommitFileStatus, error) { - return GetCommitFileStatus(c.repo.Path, c.ID.String()) -} - -// GetFullCommitID returns full length (40) of commit ID by given short SHA in a repository. -func GetFullCommitID(repoPath, shortID string) (string, error) { - if len(shortID) >= 40 { - return shortID, nil - } - - commitID, err := NewCommand("rev-parse", shortID).RunInDir(repoPath) - if err != nil { - if strings.Contains(err.Error(), "exit status 128") { - return "", ErrNotExist{shortID, ""} - } - return "", err - } - return strings.TrimSpace(commitID), nil -} diff --git a/vendor/github.com/gogs/git-module/commit_archive.go b/vendor/github.com/gogs/git-module/commit_archive.go deleted file mode 100644 index 1066ba69c..000000000 --- a/vendor/github.com/gogs/git-module/commit_archive.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "fmt" - "path/filepath" - "strings" -) - -type ArchiveType int - -const ( - ZIP ArchiveType = iota + 1 - TARGZ -) - -func (c *Commit) CreateArchive(target string, archiveType ArchiveType) error { - var format string - switch archiveType { - case ZIP: - format = "zip" - case TARGZ: - format = "tar.gz" - default: - return fmt.Errorf("unknown format: %v", archiveType) - } - - _, err := NewCommand("archive", "--prefix="+filepath.Base(strings.TrimSuffix(c.repo.Path, ".git"))+"/", "--format="+format, "-o", target, c.ID.String()).RunInDir(c.repo.Path) - return err -} diff --git a/vendor/github.com/gogs/git-module/error.go b/vendor/github.com/gogs/git-module/error.go deleted file mode 100644 index 2fefaa1e4..000000000 --- a/vendor/github.com/gogs/git-module/error.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "fmt" - "time" -) - -type ErrExecTimeout struct { - Duration time.Duration -} - -func IsErrExecTimeout(err error) bool { - _, ok := err.(ErrExecTimeout) - return ok -} - -func (err ErrExecTimeout) Error() string { - return fmt.Sprintf("execution is timeout [duration: %v]", err.Duration) -} - -type ErrNotExist struct { - ID string - RelPath string -} - -func IsErrNotExist(err error) bool { - _, ok := err.(ErrNotExist) - return ok -} - -func (err ErrNotExist) Error() string { - return fmt.Sprintf("object does not exist [id: %s, rel_path: %s]", err.ID, err.RelPath) -} - -type ErrUnsupportedVersion struct { - Required string -} - -func IsErrUnsupportedVersion(err error) bool { - _, ok := err.(ErrUnsupportedVersion) - return ok -} - -func (err ErrUnsupportedVersion) Error() string { - return fmt.Sprintf("Operation requires higher version [required: %s]", err.Required) -} - -type ErrNoMergeBase struct{} - -func IsErrNoMergeBase(err error) bool { - _, ok := err.(ErrNoMergeBase) - return ok -} - -func (err ErrNoMergeBase) Error() string { - return "no merge based found" -} diff --git a/vendor/github.com/gogs/git-module/git.go b/vendor/github.com/gogs/git-module/git.go deleted file mode 100644 index 0133a530f..000000000 --- a/vendor/github.com/gogs/git-module/git.go +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "fmt" - "strings" - "time" -) - -const _VERSION = "0.7.1" - -func Version() string { - return _VERSION -} - -var ( - // Debug enables verbose logging on everything. - // This should be false in case Gogs starts in SSH mode. - Debug = false - Prefix = "[git-module] " -) - -func log(format string, args ...interface{}) { - if !Debug { - return - } - - fmt.Print(Prefix) - if len(args) == 0 { - fmt.Println(format) - } else { - fmt.Printf(format+"\n", args...) - } -} - -var gitVersion string - -// Version returns current Git version from shell. -func BinVersion() (string, error) { - if len(gitVersion) > 0 { - return gitVersion, nil - } - - stdout, err := NewCommand("version").Run() - if err != nil { - return "", err - } - - fields := strings.Fields(stdout) - if len(fields) < 3 { - return "", fmt.Errorf("not enough output: %s", stdout) - } - - // Handle special case on Windows. - i := strings.Index(fields[2], "windows") - if i >= 1 { - gitVersion = fields[2][:i-1] - return gitVersion, nil - } - - gitVersion = fields[2] - return gitVersion, nil -} - -func init() { - BinVersion() -} - -// Fsck verifies the connectivity and validity of the objects in the database -func Fsck(repoPath string, timeout time.Duration, args ...string) error { - // Make sure timeout makes sense. - if timeout <= 0 { - timeout = -1 - } - _, err := NewCommand("fsck").AddArguments(args...).RunInDirTimeout(timeout, repoPath) - return err -} diff --git a/vendor/github.com/gogs/git-module/hook.go b/vendor/github.com/gogs/git-module/hook.go deleted file mode 100644 index a0d0b16ba..000000000 --- a/vendor/github.com/gogs/git-module/hook.go +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "errors" - "io/ioutil" - "os" - "path" - "strings" -) - -var ( - // Direcotry of hook and sample files. Can be changed to "custom_hooks" for very purpose. - HookDir = "hooks" - HookSampleDir = HookDir - // HookNames is a list of Git server hooks' name that are supported. - HookNames = []string{ - "pre-receive", - "update", - "post-receive", - } -) - -var ( - ErrNotValidHook = errors.New("not a valid Git hook") -) - -// IsValidHookName returns true if given name is a valid Git hook. -func IsValidHookName(name string) bool { - for _, hn := range HookNames { - if hn == name { - return true - } - } - return false -} - -// Hook represents a Git hook. -type Hook struct { - name string - IsActive bool // Indicates whether repository has this hook. - Content string // Content of hook if it's active. - Sample string // Sample content from Git. - path string // Hook file path. -} - -// GetHook returns a Git hook by given name and repository. -func GetHook(repoPath, name string) (*Hook, error) { - if !IsValidHookName(name) { - return nil, ErrNotValidHook - } - h := &Hook{ - name: name, - path: path.Join(repoPath, HookDir, name), - } - if isFile(h.path) { - data, err := ioutil.ReadFile(h.path) - if err != nil { - return nil, err - } - h.IsActive = true - h.Content = string(data) - return h, nil - } - - // Check sample file - samplePath := path.Join(repoPath, HookSampleDir, h.name) + ".sample" - if isFile(samplePath) { - data, err := ioutil.ReadFile(samplePath) - if err != nil { - return nil, err - } - h.Sample = string(data) - } - return h, nil -} - -func (h *Hook) Name() string { - return h.name -} - -// Update updates content hook file. -func (h *Hook) Update() error { - if len(strings.TrimSpace(h.Content)) == 0 { - if isExist(h.path) { - return os.Remove(h.path) - } - return nil - } - os.MkdirAll(path.Dir(h.path), os.ModePerm) - return ioutil.WriteFile(h.path, []byte(strings.Replace(h.Content, "\r", "", -1)), os.ModePerm) -} - -// ListHooks returns a list of Git hooks of given repository. -func ListHooks(repoPath string) (_ []*Hook, err error) { - if !isDir(path.Join(repoPath, "hooks")) { - return nil, errors.New("hooks path does not exist") - } - - hooks := make([]*Hook, len(HookNames)) - for i, name := range HookNames { - hooks[i], err = GetHook(repoPath, name) - if err != nil { - return nil, err - } - } - return hooks, nil -} diff --git a/vendor/github.com/gogs/git-module/repo.go b/vendor/github.com/gogs/git-module/repo.go deleted file mode 100644 index 1fd339dd8..000000000 --- a/vendor/github.com/gogs/git-module/repo.go +++ /dev/null @@ -1,285 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "bytes" - "container/list" - "errors" - "os" - "path" - "path/filepath" - "strings" - "time" - - "github.com/Unknwon/com" -) - -// Repository represents a Git repository. -type Repository struct { - Path string - - commitCache *objectCache - tagCache *objectCache -} - -const _PRETTY_LOG_FORMAT = `--pretty=format:%H` - -func (repo *Repository) parsePrettyFormatLogToList(logs []byte) (*list.List, error) { - l := list.New() - if len(logs) == 0 { - return l, nil - } - - parts := bytes.Split(logs, []byte{'\n'}) - - for _, commitId := range parts { - commit, err := repo.GetCommit(string(commitId)) - if err != nil { - return nil, err - } - l.PushBack(commit) - } - - return l, nil -} - -type NetworkOptions struct { - URL string - Timeout time.Duration -} - -// IsRepoURLAccessible checks if given repository URL is accessible. -func IsRepoURLAccessible(opts NetworkOptions) bool { - cmd := NewCommand("ls-remote", "-q", "-h", opts.URL, "HEAD") - if opts.Timeout <= 0 { - opts.Timeout = -1 - } - _, err := cmd.RunTimeout(opts.Timeout) - if err != nil { - return false - } - return true -} - -// InitRepository initializes a new Git repository. -func InitRepository(repoPath string, bare bool) error { - os.MkdirAll(repoPath, os.ModePerm) - - cmd := NewCommand("init") - if bare { - cmd.AddArguments("--bare") - } - _, err := cmd.RunInDir(repoPath) - return err -} - -// OpenRepository opens the repository at the given path. -func OpenRepository(repoPath string) (*Repository, error) { - repoPath, err := filepath.Abs(repoPath) - if err != nil { - return nil, err - } else if !isDir(repoPath) { - return nil, errors.New("no such file or directory") - } - - return &Repository{ - Path: repoPath, - commitCache: newObjectCache(), - tagCache: newObjectCache(), - }, nil -} - -type CloneRepoOptions struct { - Mirror bool - Bare bool - Quiet bool - Branch string - Timeout time.Duration -} - -// Clone clones original repository to target path. -func Clone(from, to string, opts CloneRepoOptions) (err error) { - toDir := path.Dir(to) - if err = os.MkdirAll(toDir, os.ModePerm); err != nil { - return err - } - - cmd := NewCommand("clone") - if opts.Mirror { - cmd.AddArguments("--mirror") - } - if opts.Bare { - cmd.AddArguments("--bare") - } - if opts.Quiet { - cmd.AddArguments("--quiet") - } - if len(opts.Branch) > 0 { - cmd.AddArguments("-b", opts.Branch) - } - cmd.AddArguments(from, to) - - if opts.Timeout <= 0 { - opts.Timeout = -1 - } - _, err = cmd.RunTimeout(opts.Timeout) - return err -} - -type FetchRemoteOptions struct { - Prune bool - Timeout time.Duration -} - -// Fetch fetches changes from remotes without merging. -func Fetch(repoPath string, opts FetchRemoteOptions) error { - cmd := NewCommand("fetch") - if opts.Prune { - cmd.AddArguments("--prune") - } - - if opts.Timeout <= 0 { - opts.Timeout = -1 - } - _, err := cmd.RunInDirTimeout(opts.Timeout, repoPath) - return err -} - -type PullRemoteOptions struct { - All bool - Rebase bool - Remote string - Branch string - Timeout time.Duration -} - -// Pull pulls changes from remotes. -func Pull(repoPath string, opts PullRemoteOptions) error { - cmd := NewCommand("pull") - if opts.Rebase { - cmd.AddArguments("--rebase") - } - if opts.All { - cmd.AddArguments("--all") - } else { - cmd.AddArguments(opts.Remote) - cmd.AddArguments(opts.Branch) - } - - if opts.Timeout <= 0 { - opts.Timeout = -1 - } - _, err := cmd.RunInDirTimeout(opts.Timeout, repoPath) - return err -} - -// PushWithEnvs pushs local commits to given remote branch with given environment variables. -func PushWithEnvs(repoPath, remote, branch string, envs []string) error { - _, err := NewCommand("push", remote, branch).AddEnvs(envs...).RunInDir(repoPath) - return err -} - -// Push pushs local commits to given remote branch. -func Push(repoPath, remote, branch string) error { - return PushWithEnvs(repoPath, remote, branch, nil) -} - -type CheckoutOptions struct { - Branch string - OldBranch string - Timeout time.Duration -} - -// Checkout checkouts a branch -func Checkout(repoPath string, opts CheckoutOptions) error { - cmd := NewCommand("checkout") - if len(opts.OldBranch) > 0 { - cmd.AddArguments("-b") - } - - cmd.AddArguments(opts.Branch) - - if len(opts.OldBranch) > 0 { - cmd.AddArguments(opts.OldBranch) - } - if opts.Timeout <= 0 { - opts.Timeout = -1 - } - _, err := cmd.RunInDirTimeout(opts.Timeout, repoPath) - return err -} - -// ResetHEAD resets HEAD to given revision or head of branch. -func ResetHEAD(repoPath string, hard bool, revision string) error { - cmd := NewCommand("reset") - if hard { - cmd.AddArguments("--hard") - } - _, err := cmd.AddArguments(revision).RunInDir(repoPath) - return err -} - -// MoveFile moves a file to another file or directory. -func MoveFile(repoPath, oldTreeName, newTreeName string) error { - _, err := NewCommand("mv").AddArguments(oldTreeName, newTreeName).RunInDir(repoPath) - return err -} - -// CountObject represents disk usage report of Git repository. -type CountObject struct { - Count int64 - Size int64 - InPack int64 - Packs int64 - SizePack int64 - PrunePackable int64 - Garbage int64 - SizeGarbage int64 -} - -const ( - _STAT_COUNT = "count: " - _STAT_SIZE = "size: " - _STAT_IN_PACK = "in-pack: " - _STAT_PACKS = "packs: " - _STAT_SIZE_PACK = "size-pack: " - _STAT_PRUNE_PACKABLE = "prune-packable: " - _STAT_GARBAGE = "garbage: " - _STAT_SIZE_GARBAGE = "size-garbage: " -) - -// GetRepoSize returns disk usage report of repository in given path. -func GetRepoSize(repoPath string) (*CountObject, error) { - cmd := NewCommand("count-objects", "-v") - stdout, err := cmd.RunInDir(repoPath) - if err != nil { - return nil, err - } - - countObject := new(CountObject) - for _, line := range strings.Split(stdout, "\n") { - switch { - case strings.HasPrefix(line, _STAT_COUNT): - countObject.Count = com.StrTo(line[7:]).MustInt64() - case strings.HasPrefix(line, _STAT_SIZE): - countObject.Size = com.StrTo(line[6:]).MustInt64() * 1024 - case strings.HasPrefix(line, _STAT_IN_PACK): - countObject.InPack = com.StrTo(line[9:]).MustInt64() - case strings.HasPrefix(line, _STAT_PACKS): - countObject.Packs = com.StrTo(line[7:]).MustInt64() - case strings.HasPrefix(line, _STAT_SIZE_PACK): - countObject.SizePack = com.StrTo(line[11:]).MustInt64() * 1024 - case strings.HasPrefix(line, _STAT_PRUNE_PACKABLE): - countObject.PrunePackable = com.StrTo(line[16:]).MustInt64() - case strings.HasPrefix(line, _STAT_GARBAGE): - countObject.Garbage = com.StrTo(line[9:]).MustInt64() - case strings.HasPrefix(line, _STAT_SIZE_GARBAGE): - countObject.SizeGarbage = com.StrTo(line[14:]).MustInt64() * 1024 - } - } - - return countObject, nil -} diff --git a/vendor/github.com/gogs/git-module/repo_branch.go b/vendor/github.com/gogs/git-module/repo_branch.go deleted file mode 100644 index de3f6ca17..000000000 --- a/vendor/github.com/gogs/git-module/repo_branch.go +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "fmt" - "strings" - - "github.com/mcuadros/go-version" -) - -const BRANCH_PREFIX = "refs/heads/" - -// IsReferenceExist returns true if given reference exists in the repository. -func IsReferenceExist(repoPath, name string) bool { - _, err := NewCommand("show-ref", "--verify", name).RunInDir(repoPath) - return err == nil -} - -// IsBranchExist returns true if given branch exists in the repository. -func IsBranchExist(repoPath, name string) bool { - return IsReferenceExist(repoPath, BRANCH_PREFIX+name) -} - -func (repo *Repository) IsBranchExist(name string) bool { - return IsBranchExist(repo.Path, name) -} - -// Branch represents a Git branch. -type Branch struct { - Name string - Path string -} - -// GetHEADBranch returns corresponding branch of HEAD. -func (repo *Repository) GetHEADBranch() (*Branch, error) { - stdout, err := NewCommand("symbolic-ref", "HEAD").RunInDir(repo.Path) - if err != nil { - return nil, err - } - stdout = strings.TrimSpace(stdout) - - if !strings.HasPrefix(stdout, BRANCH_PREFIX) { - return nil, fmt.Errorf("invalid HEAD branch: %v", stdout) - } - - return &Branch{ - Name: stdout[len(BRANCH_PREFIX):], - Path: stdout, - }, nil -} - -// SetDefaultBranch sets default branch of repository. -func (repo *Repository) SetDefaultBranch(name string) error { - if version.Compare(gitVersion, "1.7.10", "<") { - return ErrUnsupportedVersion{"1.7.10"} - } - - _, err := NewCommand("symbolic-ref", "HEAD", BRANCH_PREFIX+name).RunInDir(repo.Path) - return err -} - -// GetBranches returns all branches of the repository. -func (repo *Repository) GetBranches() ([]string, error) { - stdout, err := NewCommand("show-ref", "--heads").RunInDir(repo.Path) - if err != nil { - return nil, err - } - - infos := strings.Split(stdout, "\n") - branches := make([]string, len(infos)-1) - for i, info := range infos[:len(infos)-1] { - fields := strings.Fields(info) - if len(fields) != 2 { - continue // NOTE: I should believe git will not give me wrong string. - } - branches[i] = strings.TrimPrefix(fields[1], BRANCH_PREFIX) - } - return branches, nil -} - -// Option(s) for delete branch -type DeleteBranchOptions struct { - Force bool -} - -// DeleteBranch deletes a branch from given repository path. -func DeleteBranch(repoPath, name string, opts DeleteBranchOptions) error { - cmd := NewCommand("branch") - - if opts.Force { - cmd.AddArguments("-D") - } else { - cmd.AddArguments("-d") - } - - cmd.AddArguments(name) - _, err := cmd.RunInDir(repoPath) - - return err -} - -// DeleteBranch deletes a branch from repository. -func (repo *Repository) DeleteBranch(name string, opts DeleteBranchOptions) error { - return DeleteBranch(repo.Path, name, opts) -} - -// AddRemote adds a new remote to repository. -func (repo *Repository) AddRemote(name, url string, fetch bool) error { - cmd := NewCommand("remote", "add") - if fetch { - cmd.AddArguments("-f") - } - cmd.AddArguments(name, url) - - _, err := cmd.RunInDir(repo.Path) - return err -} - -// RemoveRemote removes a remote from repository. -func (repo *Repository) RemoveRemote(name string) error { - _, err := NewCommand("remote", "remove", name).RunInDir(repo.Path) - return err -} diff --git a/vendor/github.com/gogs/git-module/repo_commit.go b/vendor/github.com/gogs/git-module/repo_commit.go deleted file mode 100644 index 2a55f338e..000000000 --- a/vendor/github.com/gogs/git-module/repo_commit.go +++ /dev/null @@ -1,408 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "bytes" - "container/list" - "fmt" - "strconv" - "strings" - "time" - - "github.com/mcuadros/go-version" -) - -const REMOTE_PREFIX = "refs/remotes/" - -// getRefCommitID returns the last commit ID string of given reference (branch or tag). -func (repo *Repository) getRefCommitID(name string) (string, error) { - stdout, err := NewCommand("show-ref", "--verify", name).RunInDir(repo.Path) - if err != nil { - if strings.Contains(err.Error(), "not a valid ref") { - return "", ErrNotExist{name, ""} - } - return "", err - } - return strings.Split(stdout, " ")[0], nil -} - -// GetBranchCommitID returns last commit ID string of given branch. -func (repo *Repository) GetBranchCommitID(name string) (string, error) { - return repo.getRefCommitID(BRANCH_PREFIX + name) -} - -// GetTagCommitID returns last commit ID string of given tag. -func (repo *Repository) GetTagCommitID(name string) (string, error) { - return repo.getRefCommitID(TAG_PREFIX + name) -} - -// GetRemoteBranchCommitID returns last commit ID string of given remote branch. -func (repo *Repository) GetRemoteBranchCommitID(name string) (string, error) { - return repo.getRefCommitID(REMOTE_PREFIX + name) -} - -// parseCommitData parses commit information from the (uncompressed) raw -// data from the commit object. -// \n\n separate headers from message -func parseCommitData(data []byte) (*Commit, error) { - commit := new(Commit) - commit.parents = make([]sha1, 0, 1) - // we now have the contents of the commit object. Let's investigate... - nextline := 0 -l: - for { - eol := bytes.IndexByte(data[nextline:], '\n') - switch { - case eol > 0: - line := data[nextline : nextline+eol] - spacepos := bytes.IndexByte(line, ' ') - reftype := line[:spacepos] - switch string(reftype) { - case "tree", "object": - id, err := NewIDFromString(string(line[spacepos+1:])) - if err != nil { - return nil, err - } - commit.Tree.ID = id - case "parent": - // A commit can have one or more parents - oid, err := NewIDFromString(string(line[spacepos+1:])) - if err != nil { - return nil, err - } - commit.parents = append(commit.parents, oid) - case "author", "tagger": - sig, err := newSignatureFromCommitline(line[spacepos+1:]) - if err != nil { - return nil, err - } - commit.Author = sig - case "committer": - sig, err := newSignatureFromCommitline(line[spacepos+1:]) - if err != nil { - return nil, err - } - commit.Committer = sig - } - nextline += eol + 1 - case eol == 0: - commit.CommitMessage = string(data[nextline+1:]) - break l - default: - break l - } - } - return commit, nil -} - -func (repo *Repository) getCommit(id sha1) (*Commit, error) { - c, ok := repo.commitCache.Get(id.String()) - if ok { - log("Hit cache: %s", id) - return c.(*Commit), nil - } - - data, err := NewCommand("cat-file", "commit", id.String()).RunInDirBytes(repo.Path) - if err != nil { - if strings.Contains(err.Error(), "exit status 128") { - return nil, ErrNotExist{id.String(), ""} - } - return nil, err - } - - commit, err := parseCommitData(data) - if err != nil { - return nil, err - } - commit.repo = repo - commit.ID = id - - repo.commitCache.Set(id.String(), commit) - return commit, nil -} - -// GetCommit returns commit object of by ID string. -func (repo *Repository) GetCommit(commitID string) (*Commit, error) { - var err error - commitID, err = GetFullCommitID(repo.Path, commitID) - if err != nil { - return nil, err - } - id, err := NewIDFromString(commitID) - if err != nil { - return nil, err - } - - return repo.getCommit(id) -} - -// GetBranchCommit returns the last commit of given branch. -func (repo *Repository) GetBranchCommit(name string) (*Commit, error) { - commitID, err := repo.GetBranchCommitID(name) - if err != nil { - return nil, err - } - return repo.GetCommit(commitID) -} - -// GetTagCommit returns the commit of given tag. -func (repo *Repository) GetTagCommit(name string) (*Commit, error) { - commitID, err := repo.GetTagCommitID(name) - if err != nil { - return nil, err - } - return repo.GetCommit(commitID) -} - -// GetRemoteBranchCommit returns the last commit of given remote branch. -func (repo *Repository) GetRemoteBranchCommit(name string) (*Commit, error) { - commitID, err := repo.GetRemoteBranchCommitID(name) - if err != nil { - return nil, err - } - return repo.GetCommit(commitID) -} - -func (repo *Repository) getCommitByPathWithID(id sha1, relpath string) (*Commit, error) { - // File name starts with ':' must be escaped. - if relpath[0] == ':' { - relpath = `\` + relpath - } - - stdout, err := NewCommand("log", "-1", _PRETTY_LOG_FORMAT, id.String(), "--", relpath).RunInDir(repo.Path) - if err != nil { - return nil, err - } - - id, err = NewIDFromString(stdout) - if err != nil { - return nil, err - } - - return repo.getCommit(id) -} - -// GetCommitByPath returns the last commit of relative path. -func (repo *Repository) GetCommitByPath(relpath string) (*Commit, error) { - stdout, err := NewCommand("log", "-1", _PRETTY_LOG_FORMAT, "--", relpath).RunInDirBytes(repo.Path) - if err != nil { - return nil, err - } - - commits, err := repo.parsePrettyFormatLogToList(stdout) - if err != nil { - return nil, err - } - return commits.Front().Value.(*Commit), nil -} - -func (repo *Repository) CommitsByRangeSize(revision string, page, size int) (*list.List, error) { - stdout, err := NewCommand("log", revision, "--skip="+strconv.Itoa((page-1)*size), - "--max-count="+strconv.Itoa(size), _PRETTY_LOG_FORMAT).RunInDirBytes(repo.Path) - if err != nil { - return nil, err - } - return repo.parsePrettyFormatLogToList(stdout) -} - -var DefaultCommitsPageSize = 30 - -func (repo *Repository) CommitsByRange(revision string, page int) (*list.List, error) { - return repo.CommitsByRangeSize(revision, page, DefaultCommitsPageSize) -} - -func (repo *Repository) searchCommits(id sha1, keyword string) (*list.List, error) { - stdout, err := NewCommand("log", id.String(), "-100", "-i", "--grep="+keyword, _PRETTY_LOG_FORMAT).RunInDirBytes(repo.Path) - if err != nil { - return nil, err - } - return repo.parsePrettyFormatLogToList(stdout) -} - -func (repo *Repository) getFilesChanged(id1 string, id2 string) ([]string, error) { - stdout, err := NewCommand("diff", "--name-only", id1, id2).RunInDirBytes(repo.Path) - if err != nil { - return nil, err - } - return strings.Split(string(stdout), "\n"), nil -} - -func (repo *Repository) FileCommitsCount(revision, file string) (int64, error) { - return commitsCount(repo.Path, revision, file) -} - -func (repo *Repository) CommitsByFileAndRangeSize(revision, file string, page, size int) (*list.List, error) { - stdout, err := NewCommand("log", revision, "--skip="+strconv.Itoa((page-1)*size), - "--max-count="+strconv.Itoa(size), _PRETTY_LOG_FORMAT, "--", file).RunInDirBytes(repo.Path) - if err != nil { - return nil, err - } - return repo.parsePrettyFormatLogToList(stdout) -} - -func (repo *Repository) CommitsByFileAndRange(revision, file string, page int) (*list.List, error) { - return repo.CommitsByFileAndRangeSize(revision, file, page, DefaultCommitsPageSize) -} - -func (repo *Repository) FilesCountBetween(startCommitID, endCommitID string) (int, error) { - stdout, err := NewCommand("diff", "--name-only", startCommitID+"..."+endCommitID).RunInDir(repo.Path) - if err != nil { - return 0, err - } - return len(strings.Split(stdout, "\n")) - 1, nil -} - -// CommitsBetween returns a list that contains commits between [last, before). -func (repo *Repository) CommitsBetween(last *Commit, before *Commit) (*list.List, error) { - if version.Compare(gitVersion, "1.8.0", ">=") { - stdout, err := NewCommand("rev-list", before.ID.String()+"..."+last.ID.String()).RunInDirBytes(repo.Path) - if err != nil { - return nil, err - } - return repo.parsePrettyFormatLogToList(bytes.TrimSpace(stdout)) - } - - // Fallback to stupid solution, which iterates all commits of the repository - // if before is not an ancestor of last. - l := list.New() - if last == nil || last.ParentCount() == 0 { - return l, nil - } - - var err error - cur := last - for { - if cur.ID.Equal(before.ID) { - break - } - l.PushBack(cur) - if cur.ParentCount() == 0 { - break - } - cur, err = cur.Parent(0) - if err != nil { - return nil, err - } - } - return l, nil -} - -func (repo *Repository) CommitsBetweenIDs(last, before string) (*list.List, error) { - lastCommit, err := repo.GetCommit(last) - if err != nil { - return nil, err - } - beforeCommit, err := repo.GetCommit(before) - if err != nil { - return nil, err - } - return repo.CommitsBetween(lastCommit, beforeCommit) -} - -func (repo *Repository) CommitsCountBetween(start, end string) (int64, error) { - return commitsCount(repo.Path, start+"..."+end, "") -} - -// The limit is depth, not total number of returned commits. -func (repo *Repository) commitsBefore(l *list.List, parent *list.Element, id sha1, current, limit int) error { - // Reach the limit - if limit > 0 && current > limit { - return nil - } - - commit, err := repo.getCommit(id) - if err != nil { - return fmt.Errorf("getCommit: %v", err) - } - - var e *list.Element - if parent == nil { - e = l.PushBack(commit) - } else { - var in = parent - for { - if in == nil { - break - } else if in.Value.(*Commit).ID.Equal(commit.ID) { - return nil - } else if in.Next() == nil { - break - } - - if in.Value.(*Commit).Committer.When.Equal(commit.Committer.When) { - break - } - - if in.Value.(*Commit).Committer.When.After(commit.Committer.When) && - in.Next().Value.(*Commit).Committer.When.Before(commit.Committer.When) { - break - } - - in = in.Next() - } - - e = l.InsertAfter(commit, in) - } - - pr := parent - if commit.ParentCount() > 1 { - pr = e - } - - for i := 0; i < commit.ParentCount(); i++ { - id, err := commit.ParentID(i) - if err != nil { - return err - } - err = repo.commitsBefore(l, pr, id, current+1, limit) - if err != nil { - return err - } - } - - return nil -} - -func (repo *Repository) getCommitsBefore(id sha1) (*list.List, error) { - l := list.New() - return l, repo.commitsBefore(l, nil, id, 1, 0) -} - -func (repo *Repository) getCommitsBeforeLimit(id sha1, num int) (*list.List, error) { - l := list.New() - return l, repo.commitsBefore(l, nil, id, 1, num) -} - -// CommitsAfterDate returns a list of commits which committed after given date. -// The format of date should be in RFC3339. -func (repo *Repository) CommitsAfterDate(date string) (*list.List, error) { - stdout, err := NewCommand("log", _PRETTY_LOG_FORMAT, "--since="+date).RunInDirBytes(repo.Path) - if err != nil { - return nil, err - } - - return repo.parsePrettyFormatLogToList(stdout) -} - -// CommitsCount returns number of total commits of until given revision. -func CommitsCount(repoPath, revision string) (int64, error) { - return commitsCount(repoPath, revision, "") -} - -// GetLatestCommitDate returns the date of latest commit of repository. -// If branch is empty, it returns the latest commit across all branches. -func GetLatestCommitDate(repoPath, branch string) (time.Time, error) { - cmd := NewCommand("for-each-ref", "--count=1", "--sort=-committerdate", "--format=%(committerdate:iso8601)") - if len(branch) > 0 { - cmd.AddArguments("refs/heads/" + branch) - } - stdout, err := cmd.RunInDir(repoPath) - if err != nil { - return time.Time{}, err - } - - return time.Parse("2006-01-02 15:04:05 -0700", strings.TrimSpace(stdout)) -} diff --git a/vendor/github.com/gogs/git-module/repo_diff.go b/vendor/github.com/gogs/git-module/repo_diff.go deleted file mode 100644 index 258a166ff..000000000 --- a/vendor/github.com/gogs/git-module/repo_diff.go +++ /dev/null @@ -1,400 +0,0 @@ -// Copyright 2017 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "bufio" - "bytes" - "fmt" - "io" - "io/ioutil" - "strconv" - "strings" - "time" -) - -// DiffLineType represents the type of a line in diff. -type DiffLineType uint8 - -const ( - DIFF_LINE_PLAIN DiffLineType = iota + 1 - DIFF_LINE_ADD - DIFF_LINE_DEL - DIFF_LINE_SECTION -) - -// DiffFileType represents the file status in diff. -type DiffFileType uint8 - -const ( - DIFF_FILE_ADD DiffFileType = iota + 1 - DIFF_FILE_CHANGE - DIFF_FILE_DEL - DIFF_FILE_RENAME -) - -// DiffLine represents a line in diff. -type DiffLine struct { - LeftIdx int - RightIdx int - Type DiffLineType - Content string -} - -func (d *DiffLine) GetType() int { - return int(d.Type) -} - -// DiffSection represents a section in diff. -type DiffSection struct { - Name string - Lines []*DiffLine -} - -// Line returns a specific line by type (add or del) and file line number from a section. -func (diffSection *DiffSection) Line(lineType DiffLineType, idx int) *DiffLine { - var ( - difference = 0 - addCount = 0 - delCount = 0 - matchDiffLine *DiffLine - ) - -LOOP: - for _, diffLine := range diffSection.Lines { - switch diffLine.Type { - case DIFF_LINE_ADD: - addCount++ - case DIFF_LINE_DEL: - delCount++ - default: - if matchDiffLine != nil { - break LOOP - } - difference = diffLine.RightIdx - diffLine.LeftIdx - addCount = 0 - delCount = 0 - } - - switch lineType { - case DIFF_LINE_DEL: - if diffLine.RightIdx == 0 && diffLine.LeftIdx == idx-difference { - matchDiffLine = diffLine - } - case DIFF_LINE_ADD: - if diffLine.LeftIdx == 0 && diffLine.RightIdx == idx+difference { - matchDiffLine = diffLine - } - } - } - - if addCount == delCount { - return matchDiffLine - } - return nil -} - -// DiffFile represents a file in diff. -type DiffFile struct { - Name string - OldName string - Index string // 40-byte SHA, Changed/New: new SHA; Deleted: old SHA - Addition, Deletion int - Type DiffFileType - IsCreated bool - IsDeleted bool - IsBin bool - IsRenamed bool - IsSubmodule bool - Sections []*DiffSection - IsIncomplete bool -} - -func (diffFile *DiffFile) GetType() int { - return int(diffFile.Type) -} - -func (diffFile *DiffFile) NumSections() int { - return len(diffFile.Sections) -} - -// Diff contains all information of a specific diff output. -type Diff struct { - TotalAddition, TotalDeletion int - Files []*DiffFile - IsIncomplete bool -} - -func (diff *Diff) NumFiles() int { - return len(diff.Files) -} - -const _DIFF_HEAD = "diff --git " - -// ParsePatch takes a reader and parses everything it receives in diff format. -func ParsePatch(done chan<- error, maxLines, maxLineCharacteres, maxFiles int, reader io.Reader) *Diff { - var ( - diff = &Diff{Files: make([]*DiffFile, 0)} - - curFile *DiffFile - curSection = &DiffSection{ - Lines: make([]*DiffLine, 0, 10), - } - - leftLine, rightLine int - lineCount int - curFileLinesCount int - ) - input := bufio.NewReader(reader) - isEOF := false - for !isEOF { - // TODO: would input.ReadBytes be more memory-efficient? - line, err := input.ReadString('\n') - if err != nil { - if err == io.EOF { - isEOF = true - } else { - done <- fmt.Errorf("ReadString: %v", err) - return nil - } - } - - if len(line) > 0 && line[len(line)-1] == '\n' { - // Remove line break. - line = line[:len(line)-1] - } - - if strings.HasPrefix(line, "+++ ") || strings.HasPrefix(line, "--- ") || len(line) == 0 { - continue - } - - curFileLinesCount++ - lineCount++ - - // Diff data too large, we only show the first about maxlines lines - if curFileLinesCount >= maxLines || len(line) >= maxLineCharacteres { - curFile.IsIncomplete = true - } - - switch { - case line[0] == ' ': - diffLine := &DiffLine{Type: DIFF_LINE_PLAIN, Content: line, LeftIdx: leftLine, RightIdx: rightLine} - leftLine++ - rightLine++ - curSection.Lines = append(curSection.Lines, diffLine) - continue - case line[0] == '@': - curSection = &DiffSection{} - curFile.Sections = append(curFile.Sections, curSection) - ss := strings.Split(line, "@@") - diffLine := &DiffLine{Type: DIFF_LINE_SECTION, Content: line} - curSection.Lines = append(curSection.Lines, diffLine) - - // Parse line number. - ranges := strings.Split(ss[1][1:], " ") - leftLine, _ = strconv.Atoi(strings.Split(ranges[0], ",")[0][1:]) - if len(ranges) > 1 { - rightLine, _ = strconv.Atoi(strings.Split(ranges[1], ",")[0]) - } else { - rightLine = leftLine - } - continue - case line[0] == '+': - curFile.Addition++ - diff.TotalAddition++ - diffLine := &DiffLine{Type: DIFF_LINE_ADD, Content: line, RightIdx: rightLine} - rightLine++ - curSection.Lines = append(curSection.Lines, diffLine) - continue - case line[0] == '-': - curFile.Deletion++ - diff.TotalDeletion++ - diffLine := &DiffLine{Type: DIFF_LINE_DEL, Content: line, LeftIdx: leftLine} - if leftLine > 0 { - leftLine++ - } - curSection.Lines = append(curSection.Lines, diffLine) - case strings.HasPrefix(line, "Binary"): - curFile.IsBin = true - continue - } - - // Get new file. - if strings.HasPrefix(line, _DIFF_HEAD) { - middle := -1 - - // Note: In case file name is surrounded by double quotes (it happens only in git-shell). - // e.g. diff --git "a/xxx" "b/xxx" - hasQuote := line[len(_DIFF_HEAD)] == '"' - if hasQuote { - middle = strings.Index(line, ` "b/`) - } else { - middle = strings.Index(line, " b/") - } - - beg := len(_DIFF_HEAD) - a := line[beg+2 : middle] - b := line[middle+3:] - if hasQuote { - a = string(UnescapeChars([]byte(a[1 : len(a)-1]))) - b = string(UnescapeChars([]byte(b[1 : len(b)-1]))) - } - - curFile = &DiffFile{ - Name: a, - Type: DIFF_FILE_CHANGE, - Sections: make([]*DiffSection, 0, 10), - } - diff.Files = append(diff.Files, curFile) - if len(diff.Files) >= maxFiles { - diff.IsIncomplete = true - io.Copy(ioutil.Discard, reader) - break - } - curFileLinesCount = 0 - - // Check file diff type and submodule. - CHECK_TYPE: - for { - line, err := input.ReadString('\n') - if err != nil { - if err == io.EOF { - isEOF = true - } else { - done <- fmt.Errorf("ReadString: %v", err) - return nil - } - } - - switch { - case strings.HasPrefix(line, "new file"): - curFile.Type = DIFF_FILE_ADD - curFile.IsCreated = true - curFile.IsSubmodule = strings.HasSuffix(line, " 160000\n") - case strings.HasPrefix(line, "deleted"): - curFile.Type = DIFF_FILE_DEL - curFile.IsDeleted = true - curFile.IsSubmodule = strings.HasSuffix(line, " 160000\n") - case strings.HasPrefix(line, "index"): - if curFile.IsDeleted { - curFile.Index = line[6:46] - } else if len(line) >= 88 { - curFile.Index = line[49:88] - } else { - curFile.Index = curFile.Name - } - break CHECK_TYPE - case strings.HasPrefix(line, "similarity index 100%"): - curFile.Type = DIFF_FILE_RENAME - curFile.IsRenamed = true - curFile.OldName = curFile.Name - curFile.Name = b - curFile.Index = b - break CHECK_TYPE - case strings.HasPrefix(line, "old mode"): - break CHECK_TYPE - } - } - } - } - - done <- nil - return diff -} - -// GetDiffRange returns a parsed diff object between given commits. -func GetDiffRange(repoPath, beforeCommitID, afterCommitID string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) { - repo, err := OpenRepository(repoPath) - if err != nil { - return nil, err - } - - commit, err := repo.GetCommit(afterCommitID) - if err != nil { - return nil, err - } - - cmd := NewCommand() - if len(beforeCommitID) == 0 { - // First commit of repository - if commit.ParentCount() == 0 { - cmd.AddArguments("show", "--full-index", afterCommitID) - } else { - c, _ := commit.Parent(0) - cmd.AddArguments("diff", "--full-index", "-M", c.ID.String(), afterCommitID) - } - } else { - cmd.AddArguments("diff", "--full-index", "-M", beforeCommitID, afterCommitID) - } - - stdout, w := io.Pipe() - done := make(chan error) - var diff *Diff - go func() { - diff = ParsePatch(done, maxLines, maxLineCharacteres, maxFiles, stdout) - }() - - stderr := new(bytes.Buffer) - err = cmd.RunInDirTimeoutPipeline(2*time.Minute, repoPath, w, stderr) - w.Close() // Close writer to exit parsing goroutine - if err != nil { - return nil, concatenateError(err, stderr.String()) - } - - return diff, <-done -} - -// RawDiffType represents the type of raw diff format. -type RawDiffType string - -const ( - RAW_DIFF_NORMAL RawDiffType = "diff" - RAW_DIFF_PATCH RawDiffType = "patch" -) - -// GetRawDiff dumps diff results of repository in given commit ID to io.Writer. -func GetRawDiff(repoPath, commitID string, diffType RawDiffType, writer io.Writer) error { - repo, err := OpenRepository(repoPath) - if err != nil { - return fmt.Errorf("OpenRepository: %v", err) - } - - commit, err := repo.GetCommit(commitID) - if err != nil { - return err - } - - cmd := NewCommand() - switch diffType { - case RAW_DIFF_NORMAL: - if commit.ParentCount() == 0 { - cmd.AddArguments("show", commitID) - } else { - c, _ := commit.Parent(0) - cmd.AddArguments("diff", "-M", c.ID.String(), commitID) - } - case RAW_DIFF_PATCH: - if commit.ParentCount() == 0 { - cmd.AddArguments("format-patch", "--no-signature", "--stdout", "--root", commitID) - } else { - c, _ := commit.Parent(0) - query := fmt.Sprintf("%s...%s", commitID, c.ID.String()) - cmd.AddArguments("format-patch", "--no-signature", "--stdout", query) - } - default: - return fmt.Errorf("invalid diffType: %s", diffType) - } - - stderr := new(bytes.Buffer) - if err = cmd.RunInDirPipeline(repoPath, writer, stderr); err != nil { - return concatenateError(err, stderr.String()) - } - return nil -} - -// GetDiffCommit returns a parsed diff object of given commit. -func GetDiffCommit(repoPath, commitID string, maxLines, maxLineCharacteres, maxFiles int) (*Diff, error) { - return GetDiffRange(repoPath, "", commitID, maxLines, maxLineCharacteres, maxFiles) -} diff --git a/vendor/github.com/gogs/git-module/repo_hook.go b/vendor/github.com/gogs/git-module/repo_hook.go deleted file mode 100644 index 7b49647e3..000000000 --- a/vendor/github.com/gogs/git-module/repo_hook.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -func (repo *Repository) GetHook(name string) (*Hook, error) { - return GetHook(repo.Path, name) -} - -func (repo *Repository) Hooks() ([]*Hook, error) { - return ListHooks(repo.Path) -} diff --git a/vendor/github.com/gogs/git-module/repo_object.go b/vendor/github.com/gogs/git-module/repo_object.go deleted file mode 100644 index 416ee4591..000000000 --- a/vendor/github.com/gogs/git-module/repo_object.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -type ObjectType string - -const ( - OBJECT_COMMIT ObjectType = "commit" - OBJECT_TREE ObjectType = "tree" - OBJECT_BLOB ObjectType = "blob" - OBJECT_TAG ObjectType = "tag" -) diff --git a/vendor/github.com/gogs/git-module/repo_pull.go b/vendor/github.com/gogs/git-module/repo_pull.go deleted file mode 100644 index 22ccb269c..000000000 --- a/vendor/github.com/gogs/git-module/repo_pull.go +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "container/list" - "fmt" - "strconv" - "strings" - "time" -) - -// PullRequestInfo represents needed information for a pull request. -type PullRequestInfo struct { - MergeBase string - Commits *list.List - NumFiles int -} - -// GetMergeBase checks and returns merge base of two branches. -func (repo *Repository) GetMergeBase(base, head string) (string, error) { - stdout, err := NewCommand("merge-base", base, head).RunInDir(repo.Path) - if err != nil { - if strings.Contains(err.Error(), "exit status 1") { - return "", ErrNoMergeBase{} - } - return "", err - } - return strings.TrimSpace(stdout), nil -} - -// GetPullRequestInfo generates and returns pull request information -// between base and head branches of repositories. -func (repo *Repository) GetPullRequestInfo(basePath, baseBranch, headBranch string) (_ *PullRequestInfo, err error) { - var remoteBranch string - - // We don't need a temporary remote for same repository. - if repo.Path != basePath { - // Add a temporary remote - tmpRemote := strconv.FormatInt(time.Now().UnixNano(), 10) - if err = repo.AddRemote(tmpRemote, basePath, true); err != nil { - return nil, fmt.Errorf("AddRemote: %v", err) - } - defer repo.RemoveRemote(tmpRemote) - - remoteBranch = "remotes/" + tmpRemote + "/" + baseBranch - } else { - remoteBranch = baseBranch - } - - prInfo := new(PullRequestInfo) - prInfo.MergeBase, err = repo.GetMergeBase(remoteBranch, headBranch) - if err != nil { - return nil, err - } - - logs, err := NewCommand("log", prInfo.MergeBase+"..."+headBranch, _PRETTY_LOG_FORMAT).RunInDirBytes(repo.Path) - if err != nil { - return nil, err - } - prInfo.Commits, err = repo.parsePrettyFormatLogToList(logs) - if err != nil { - return nil, fmt.Errorf("parsePrettyFormatLogToList: %v", err) - } - - // Count number of changed files. - stdout, err := NewCommand("diff", "--name-only", remoteBranch+"..."+headBranch).RunInDir(repo.Path) - if err != nil { - return nil, err - } - prInfo.NumFiles = len(strings.Split(stdout, "\n")) - 1 - - return prInfo, nil -} - -// GetPatch generates and returns patch data between given revisions. -func (repo *Repository) GetPatch(base, head string) ([]byte, error) { - return NewCommand("diff", "-p", "--binary", base, head).RunInDirBytes(repo.Path) -} diff --git a/vendor/github.com/gogs/git-module/repo_tag.go b/vendor/github.com/gogs/git-module/repo_tag.go deleted file mode 100644 index 2bc8986e0..000000000 --- a/vendor/github.com/gogs/git-module/repo_tag.go +++ /dev/null @@ -1,209 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "fmt" - "strings" - - "github.com/mcuadros/go-version" -) - -const TAG_PREFIX = "refs/tags/" - -// IsTagExist returns true if given tag exists in the repository. -func IsTagExist(repoPath, name string) bool { - return IsReferenceExist(repoPath, TAG_PREFIX+name) -} - -func (repo *Repository) IsTagExist(name string) bool { - return IsTagExist(repo.Path, name) -} - -func (repo *Repository) CreateTag(name, revision string) error { - _, err := NewCommand("tag", name, revision).RunInDir(repo.Path) - return err -} - -func (repo *Repository) getTag(id sha1) (*Tag, error) { - t, ok := repo.tagCache.Get(id.String()) - if ok { - log("Hit cache: %s", id) - return t.(*Tag), nil - } - - // Get tag type - tp, err := NewCommand("cat-file", "-t", id.String()).RunInDir(repo.Path) - if err != nil { - return nil, err - } - tp = strings.TrimSpace(tp) - - // Tag is a commit. - if ObjectType(tp) == OBJECT_COMMIT { - tag := &Tag{ - ID: id, - Object: id, - Type: string(OBJECT_COMMIT), - repo: repo, - } - - repo.tagCache.Set(id.String(), tag) - return tag, nil - } - - // Tag with message. - data, err := NewCommand("cat-file", "-p", id.String()).RunInDirBytes(repo.Path) - if err != nil { - return nil, err - } - - tag, err := parseTagData(data) - if err != nil { - return nil, err - } - - tag.ID = id - tag.repo = repo - - repo.tagCache.Set(id.String(), tag) - return tag, nil -} - -// GetTag returns a Git tag by given name. -func (repo *Repository) GetTag(name string) (*Tag, error) { - stdout, err := NewCommand("show-ref", "--tags", name).RunInDir(repo.Path) - if err != nil { - return nil, err - } - - id, err := NewIDFromString(strings.Split(stdout, " ")[0]) - if err != nil { - return nil, err - } - - tag, err := repo.getTag(id) - if err != nil { - return nil, err - } - tag.Name = name - return tag, nil -} - -// GetTags returns all tags of the repository. -func (repo *Repository) GetTags() ([]string, error) { - cmd := NewCommand("tag", "-l") - if version.Compare(gitVersion, "2.4.9", ">=") { - cmd.AddArguments("--sort=-creatordate") - } - - stdout, err := cmd.RunInDir(repo.Path) - if err != nil { - return nil, err - } - - tags := strings.Split(stdout, "\n") - tags = tags[:len(tags)-1] - - if version.Compare(gitVersion, "2.4.9", "<") { - version.Sort(tags) - - // Reverse order - for i := 0; i < len(tags)/2; i++ { - j := len(tags) - i - 1 - tags[i], tags[j] = tags[j], tags[i] - } - } - - return tags, nil -} - -type TagsResult struct { - // Indicates whether results include the latest tag. - HasLatest bool - // If results do not include the latest tag, a indicator 'after' to go back. - PreviousAfter string - // Indicates whether results include the oldest tag. - ReachEnd bool - // List of returned tags. - Tags []string -} - -// GetTagsAfter returns list of tags 'after' (exlusive) given tag. -func (repo *Repository) GetTagsAfter(after string, limit int) (*TagsResult, error) { - allTags, err := repo.GetTags() - if err != nil { - return nil, fmt.Errorf("GetTags: %v", err) - } - - if limit < 0 { - limit = 0 - } - - numAllTags := len(allTags) - if len(after) == 0 && limit == 0 { - return &TagsResult{ - HasLatest: true, - ReachEnd: true, - Tags: allTags, - }, nil - } else if len(after) == 0 && limit > 0 { - endIdx := limit - if limit >= numAllTags { - endIdx = numAllTags - } - return &TagsResult{ - HasLatest: true, - ReachEnd: limit >= numAllTags, - Tags: allTags[:endIdx], - }, nil - } - - previousAfter := "" - hasMatch := false - tags := make([]string, 0, len(allTags)) - for i := range allTags { - if hasMatch { - tags = allTags[i:] - break - } - if allTags[i] == after { - hasMatch = true - if limit > 0 && i-limit >= 0 { - previousAfter = allTags[i-limit] - } - continue - } - } - - if !hasMatch { - tags = allTags - } - - // If all tags after match is equal to the limit, it reaches the oldest tag as well. - if limit == 0 || len(tags) <= limit { - return &TagsResult{ - HasLatest: !hasMatch, - PreviousAfter: previousAfter, - ReachEnd: true, - Tags: tags, - }, nil - } - return &TagsResult{ - HasLatest: !hasMatch, - PreviousAfter: previousAfter, - Tags: tags[:limit], - }, nil -} - -// DeleteTag deletes a tag from the repository -func (repo *Repository) DeleteTag(name string) error { - cmd := NewCommand("tag", "-d") - - cmd.AddArguments(name) - _, err := cmd.RunInDir(repo.Path) - - return err -} diff --git a/vendor/github.com/gogs/git-module/repo_tree.go b/vendor/github.com/gogs/git-module/repo_tree.go deleted file mode 100644 index baebb2510..000000000 --- a/vendor/github.com/gogs/git-module/repo_tree.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -func (repo *Repository) getTree(id sha1) (*Tree, error) { - treePath := filepathFromSHA1(repo.Path, id.String()) - if isFile(treePath) { - _, err := NewCommand("ls-tree", id.String()).RunInDir(repo.Path) - if err != nil { - return nil, ErrNotExist{id.String(), ""} - } - } - - return NewTree(repo, id), nil -} - -// Find the tree object in the repository. -func (repo *Repository) GetTree(idStr string) (*Tree, error) { - id, err := NewIDFromString(idStr) - if err != nil { - return nil, err - } - return repo.getTree(id) -} diff --git a/vendor/github.com/gogs/git-module/sha1.go b/vendor/github.com/gogs/git-module/sha1.go deleted file mode 100644 index 7744275d8..000000000 --- a/vendor/github.com/gogs/git-module/sha1.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "encoding/hex" - "fmt" - "strings" -) - -const EMPTY_SHA = "0000000000000000000000000000000000000000" - -type sha1 [20]byte - -// Equal returns true if s has the same sha1 as caller. -// Support 40-length-string, []byte, sha1. -func (id sha1) Equal(s2 interface{}) bool { - switch v := s2.(type) { - case string: - if len(v) != 40 { - return false - } - return v == id.String() - case []byte: - if len(v) != 20 { - return false - } - for i, v := range v { - if id[i] != v { - return false - } - } - case sha1: - for i, v := range v { - if id[i] != v { - return false - } - } - default: - return false - } - return true -} - -// String returns string (hex) representation of the Oid. -func (s sha1) String() string { - result := make([]byte, 0, 40) - hexvalues := []byte("0123456789abcdef") - for i := 0; i < 20; i++ { - result = append(result, hexvalues[s[i]>>4]) - result = append(result, hexvalues[s[i]&0xf]) - } - return string(result) -} - -// MustID always creates a new sha1 from a [20]byte array with no validation of input. -func MustID(b []byte) sha1 { - var id sha1 - for i := 0; i < 20; i++ { - id[i] = b[i] - } - return id -} - -// NewID creates a new sha1 from a [20]byte array. -func NewID(b []byte) (sha1, error) { - if len(b) != 20 { - return sha1{}, fmt.Errorf("Length must be 20: %v", b) - } - return MustID(b), nil -} - -// MustIDFromString always creates a new sha from a ID with no validation of input. -func MustIDFromString(s string) sha1 { - b, _ := hex.DecodeString(s) - return MustID(b) -} - -// NewIDFromString creates a new sha1 from a ID string of length 40. -func NewIDFromString(s string) (sha1, error) { - var id sha1 - s = strings.TrimSpace(s) - if len(s) != 40 { - return id, fmt.Errorf("Length must be 40: %s", s) - } - b, err := hex.DecodeString(s) - if err != nil { - return id, err - } - return NewID(b) -} diff --git a/vendor/github.com/gogs/git-module/signature.go b/vendor/github.com/gogs/git-module/signature.go deleted file mode 100644 index 95eb1bbe0..000000000 --- a/vendor/github.com/gogs/git-module/signature.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "bytes" - "strconv" - "time" -) - -// Signature represents the Author or Committer information. -type Signature struct { - Email string - Name string - When time.Time -} - -// Helper to get a signature from the commit line, which looks like these: -// author Patrick Gundlach 1378823654 +0200 -// author Patrick Gundlach Thu, 07 Apr 2005 22:13:13 +0200 -// but without the "author " at the beginning (this method should) -// be used for author and committer. -// -// FIXME: include timezone for timestamp! -func newSignatureFromCommitline(line []byte) (_ *Signature, err error) { - sig := new(Signature) - emailStart := bytes.IndexByte(line, '<') - sig.Name = string(line[:emailStart-1]) - emailEnd := bytes.IndexByte(line, '>') - sig.Email = string(line[emailStart+1 : emailEnd]) - - // Check date format. - firstChar := line[emailEnd+2] - if firstChar >= 48 && firstChar <= 57 { - timestop := bytes.IndexByte(line[emailEnd+2:], ' ') - timestring := string(line[emailEnd+2 : emailEnd+2+timestop]) - seconds, _ := strconv.ParseInt(timestring, 10, 64) - sig.When = time.Unix(seconds, 0) - } else { - sig.When, err = time.Parse("Mon Jan _2 15:04:05 2006 -0700", string(line[emailEnd+2:])) - if err != nil { - return nil, err - } - } - return sig, nil -} diff --git a/vendor/github.com/gogs/git-module/submodule.go b/vendor/github.com/gogs/git-module/submodule.go deleted file mode 100644 index 577733005..000000000 --- a/vendor/github.com/gogs/git-module/submodule.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import "strings" - -type SubModule struct { - Name string - URL string -} - -// SubModuleFile represents a file with submodule type. -type SubModuleFile struct { - *Commit - - refURL string - refID string -} - -func NewSubModuleFile(c *Commit, refURL, refID string) *SubModuleFile { - return &SubModuleFile{ - Commit: c, - refURL: refURL, - refID: refID, - } -} - -// RefURL guesses and returns reference URL. -func (sf *SubModuleFile) RefURL(urlPrefix string, parentPath string) string { - if sf.refURL == "" { - return "" - } - - url := strings.TrimSuffix(sf.refURL, ".git") - - // git://xxx/user/repo - if strings.HasPrefix(url, "git://") { - return "http://" + strings.TrimPrefix(url, "git://") - } - - // http[s]://xxx/user/repo - if strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://") { - return url - } - - // Relative url prefix check (according to git submodule documentation) - if strings.HasPrefix(url, "./") || strings.HasPrefix(url, "../") { - // ...construct and return correct submodule url here... - idx := strings.Index(parentPath, "/src/") - if idx == -1 { - return url - } - return strings.TrimSuffix(urlPrefix, "/") + parentPath[:idx] + "/" + url - } - - // sysuser@xxx:user/repo - i := strings.Index(url, "@") - j := strings.LastIndex(url, ":") - - // Only process when i < j because git+ssh://git@git.forwardbias.in/npploader.git - if i > -1 && j > -1 && i < j { - // fix problem with reverse proxy works only with local server - if strings.Contains(urlPrefix, url[i+1:j]) { - return urlPrefix + url[j+1:] - } else { - return "http://" + url[i+1:j] + "/" + url[j+1:] - } - } - - return url -} - -// RefID returns reference ID. -func (sf *SubModuleFile) RefID() string { - return sf.refID -} diff --git a/vendor/github.com/gogs/git-module/tag.go b/vendor/github.com/gogs/git-module/tag.go deleted file mode 100644 index f4bf77925..000000000 --- a/vendor/github.com/gogs/git-module/tag.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import "bytes" - -// Tag represents a Git tag. -type Tag struct { - Name string - ID sha1 - repo *Repository - Object sha1 // The id of this commit object - Type string - Tagger *Signature - Message string -} - -func (tag *Tag) Commit() (*Commit, error) { - return tag.repo.getCommit(tag.Object) -} - -// Parse commit information from the (uncompressed) raw -// data from the commit object. -// \n\n separate headers from message -func parseTagData(data []byte) (*Tag, error) { - tag := new(Tag) - // we now have the contents of the commit object. Let's investigate... - nextline := 0 -l: - for { - eol := bytes.IndexByte(data[nextline:], '\n') - switch { - case eol > 0: - line := data[nextline : nextline+eol] - spacepos := bytes.IndexByte(line, ' ') - reftype := line[:spacepos] - switch string(reftype) { - case "object": - id, err := NewIDFromString(string(line[spacepos+1:])) - if err != nil { - return nil, err - } - tag.Object = id - case "type": - // A commit can have one or more parents - tag.Type = string(line[spacepos+1:]) - case "tagger": - sig, err := newSignatureFromCommitline(line[spacepos+1:]) - if err != nil { - return nil, err - } - tag.Tagger = sig - } - nextline += eol + 1 - case eol == 0: - tag.Message = string(data[nextline+1:]) - break l - default: - break l - } - } - return tag, nil -} diff --git a/vendor/github.com/gogs/git-module/tree.go b/vendor/github.com/gogs/git-module/tree.go deleted file mode 100644 index 789d4c9bf..000000000 --- a/vendor/github.com/gogs/git-module/tree.go +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "bytes" - "fmt" - "strings" -) - -// Tree represents a flat directory listing. -type Tree struct { - ID sha1 - repo *Repository - - // parent tree - ptree *Tree - - entries Entries - entriesParsed bool -} - -func NewTree(repo *Repository, id sha1) *Tree { - return &Tree{ - ID: id, - repo: repo, - } -} - -// Predefine []byte variables to avoid runtime allocations. -var ( - escapedSlash = []byte(`\\`) - regularSlash = []byte(`\`) - escapedTab = []byte(`\t`) - regularTab = []byte("\t") -) - -// UnescapeChars reverses escaped characters. -func UnescapeChars(in []byte) []byte { - // LEGACY [Go 1.7]: use more expressive bytes.ContainsAny - if bytes.IndexAny(in, "\\\t") == -1 { - return in - } - - out := bytes.Replace(in, escapedSlash, regularSlash, -1) - out = bytes.Replace(out, escapedTab, regularTab, -1) - return out -} - -// parseTreeData parses tree information from the (uncompressed) raw -// data from the tree object. -func parseTreeData(tree *Tree, data []byte) ([]*TreeEntry, error) { - entries := make([]*TreeEntry, 0, 10) - l := len(data) - pos := 0 - for pos < l { - entry := new(TreeEntry) - entry.ptree = tree - step := 6 - switch string(data[pos : pos+step]) { - case "100644", "100664": - entry.mode = ENTRY_MODE_BLOB - entry.Type = OBJECT_BLOB - case "100755": - entry.mode = ENTRY_MODE_EXEC - entry.Type = OBJECT_BLOB - case "120000": - entry.mode = ENTRY_MODE_SYMLINK - entry.Type = OBJECT_BLOB - case "160000": - entry.mode = ENTRY_MODE_COMMIT - entry.Type = OBJECT_COMMIT - - step = 8 - case "040000": - entry.mode = ENTRY_MODE_TREE - entry.Type = OBJECT_TREE - default: - return nil, fmt.Errorf("unknown type: %v", string(data[pos:pos+step])) - } - pos += step + 6 // Skip string type of entry type. - - step = 40 - id, err := NewIDFromString(string(data[pos : pos+step])) - if err != nil { - return nil, err - } - entry.ID = id - pos += step + 1 // Skip half of sha1. - - step = bytes.IndexByte(data[pos:], '\n') - - // In case entry name is surrounded by double quotes(it happens only in git-shell). - if data[pos] == '"' { - entry.name = string(UnescapeChars(data[pos+1 : pos+step-1])) - } else { - entry.name = string(data[pos : pos+step]) - } - - pos += step + 1 - entries = append(entries, entry) - } - return entries, nil -} - -func (t *Tree) SubTree(rpath string) (*Tree, error) { - if len(rpath) == 0 { - return t, nil - } - - paths := strings.Split(rpath, "/") - var ( - err error - g = t - p = t - te *TreeEntry - ) - for _, name := range paths { - te, err = p.GetTreeEntryByPath(name) - if err != nil { - return nil, err - } - - g, err = t.repo.getTree(te.ID) - if err != nil { - return nil, err - } - g.ptree = p - p = g - } - return g, nil -} - -// ListEntries returns all entries of current tree. -func (t *Tree) ListEntries() (Entries, error) { - if t.entriesParsed { - return t.entries, nil - } - t.entriesParsed = true - - stdout, err := NewCommand("ls-tree", t.ID.String()).RunInDirBytes(t.repo.Path) - if err != nil { - return nil, err - } - t.entries, err = parseTreeData(t, stdout) - return t.entries, err -} diff --git a/vendor/github.com/gogs/git-module/tree_blob.go b/vendor/github.com/gogs/git-module/tree_blob.go deleted file mode 100644 index e2e701521..000000000 --- a/vendor/github.com/gogs/git-module/tree_blob.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "path" - "strings" -) - -func (t *Tree) GetTreeEntryByPath(relpath string) (*TreeEntry, error) { - if len(relpath) == 0 { - return &TreeEntry{ - ID: t.ID, - Type: OBJECT_TREE, - mode: ENTRY_MODE_TREE, - }, nil - } - - relpath = path.Clean(relpath) - parts := strings.Split(relpath, "/") - var err error - tree := t - for i, name := range parts { - if i == len(parts)-1 { - entries, err := tree.ListEntries() - if err != nil { - return nil, err - } - for _, v := range entries { - if v.name == name { - return v, nil - } - } - } else { - tree, err = tree.SubTree(name) - if err != nil { - return nil, err - } - } - } - return nil, ErrNotExist{"", relpath} -} - -func (t *Tree) GetBlobByPath(relpath string) (*Blob, error) { - entry, err := t.GetTreeEntryByPath(relpath) - if err != nil { - return nil, err - } - - if !entry.IsDir() { - return entry.Blob(), nil - } - - return nil, ErrNotExist{"", relpath} -} diff --git a/vendor/github.com/gogs/git-module/tree_entry.go b/vendor/github.com/gogs/git-module/tree_entry.go deleted file mode 100644 index 545740353..000000000 --- a/vendor/github.com/gogs/git-module/tree_entry.go +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "fmt" - "path" - "path/filepath" - "runtime" - "sort" - "strconv" - "strings" -) - -type EntryMode int - -// There are only a few file modes in Git. They look like unix file modes, but they can only be -// one of these. -const ( - ENTRY_MODE_BLOB EntryMode = 0100644 - ENTRY_MODE_EXEC EntryMode = 0100755 - ENTRY_MODE_SYMLINK EntryMode = 0120000 - ENTRY_MODE_COMMIT EntryMode = 0160000 - ENTRY_MODE_TREE EntryMode = 0040000 -) - -type TreeEntry struct { - ID sha1 - Type ObjectType - - mode EntryMode - name string - - ptree *Tree - - commited bool - - size int64 - sized bool -} - -func (te *TreeEntry) Name() string { - return te.name -} - -func (te *TreeEntry) Size() int64 { - if te.IsDir() { - return 0 - } else if te.sized { - return te.size - } - - stdout, err := NewCommand("cat-file", "-s", te.ID.String()).RunInDir(te.ptree.repo.Path) - if err != nil { - return 0 - } - - te.sized = true - te.size, _ = strconv.ParseInt(strings.TrimSpace(stdout), 10, 64) - return te.size -} - -func (te *TreeEntry) IsSubModule() bool { - return te.mode == ENTRY_MODE_COMMIT -} - -func (te *TreeEntry) IsDir() bool { - return te.mode == ENTRY_MODE_TREE -} - -func (te *TreeEntry) IsLink() bool { - return te.mode == ENTRY_MODE_SYMLINK -} - -func (te *TreeEntry) Blob() *Blob { - return &Blob{ - repo: te.ptree.repo, - TreeEntry: te, - } -} - -type Entries []*TreeEntry - -var sorter = []func(t1, t2 *TreeEntry) bool{ - func(t1, t2 *TreeEntry) bool { - return (t1.IsDir() || t1.IsSubModule()) && !t2.IsDir() && !t2.IsSubModule() - }, - func(t1, t2 *TreeEntry) bool { - return t1.name < t2.name - }, -} - -func (tes Entries) Len() int { return len(tes) } -func (tes Entries) Swap(i, j int) { tes[i], tes[j] = tes[j], tes[i] } -func (tes Entries) Less(i, j int) bool { - t1, t2 := tes[i], tes[j] - var k int - for k = 0; k < len(sorter)-1; k++ { - sort := sorter[k] - switch { - case sort(t1, t2): - return true - case sort(t2, t1): - return false - } - } - return sorter[k](t1, t2) -} - -func (tes Entries) Sort() { - sort.Sort(tes) -} - -var defaultConcurrency = runtime.NumCPU() - -type commitInfo struct { - entryName string - infos []interface{} - err error -} - -// GetCommitsInfo takes advantages of concurrency to speed up getting information -// of all commits that are corresponding to these entries. This method will automatically -// choose the right number of goroutine (concurrency) to use related of the host CPU. -func (tes Entries) GetCommitsInfo(commit *Commit, treePath string) ([][]interface{}, error) { - return tes.GetCommitsInfoWithCustomConcurrency(commit, treePath, 0) -} - -// GetCommitsInfoWithCustomConcurrency takes advantages of concurrency to speed up getting information -// of all commits that are corresponding to these entries. If the given maxConcurrency is negative or -// equal to zero: the right number of goroutine (concurrency) to use will be choosen related of the -// host CPU. -func (tes Entries) GetCommitsInfoWithCustomConcurrency(commit *Commit, treePath string, maxConcurrency int) ([][]interface{}, error) { - if len(tes) == 0 { - return nil, nil - } - - if maxConcurrency <= 0 { - maxConcurrency = defaultConcurrency - } - - // Length of taskChan determines how many goroutines (subprocesses) can run at the same time. - // The length of revChan should be same as taskChan so goroutines whoever finished job can - // exit as early as possible, only store data inside channel. - taskChan := make(chan bool, maxConcurrency) - revChan := make(chan commitInfo, maxConcurrency) - doneChan := make(chan error) - - // Receive loop will exit when it collects same number of data pieces as tree entries. - // It notifies doneChan before exits or notify early with possible error. - infoMap := make(map[string][]interface{}, len(tes)) - go func() { - i := 0 - for info := range revChan { - if info.err != nil { - doneChan <- info.err - return - } - - infoMap[info.entryName] = info.infos - i++ - if i == len(tes) { - break - } - } - doneChan <- nil - }() - - for i := range tes { - // When taskChan is idle (or has empty slots), put operation will not block. - // However when taskChan is full, code will block and wait any running goroutines to finish. - taskChan <- true - - if tes[i].Type != OBJECT_COMMIT { - go func(i int) { - cinfo := commitInfo{entryName: tes[i].Name()} - c, err := commit.GetCommitByPath(filepath.Join(treePath, tes[i].Name())) - if err != nil { - cinfo.err = fmt.Errorf("GetCommitByPath (%s/%s): %v", treePath, tes[i].Name(), err) - } else { - cinfo.infos = []interface{}{tes[i], c} - } - revChan <- cinfo - <-taskChan // Clear one slot from taskChan to allow new goroutines to start. - }(i) - continue - } - - // Handle submodule - go func(i int) { - cinfo := commitInfo{entryName: tes[i].Name()} - sm, err := commit.GetSubModule(path.Join(treePath, tes[i].Name())) - if err != nil && !IsErrNotExist(err) { - cinfo.err = fmt.Errorf("GetSubModule (%s/%s): %v", treePath, tes[i].Name(), err) - revChan <- cinfo - return - } - - smURL := "" - if sm != nil { - smURL = sm.URL - } - - c, err := commit.GetCommitByPath(filepath.Join(treePath, tes[i].Name())) - if err != nil { - cinfo.err = fmt.Errorf("GetCommitByPath (%s/%s): %v", treePath, tes[i].Name(), err) - } else { - cinfo.infos = []interface{}{tes[i], NewSubModuleFile(c, smURL, tes[i].ID.String())} - } - revChan <- cinfo - <-taskChan - }(i) - } - - if err := <-doneChan; err != nil { - return nil, err - } - - commitsInfo := make([][]interface{}, len(tes)) - for i := 0; i < len(tes); i++ { - commitsInfo[i] = infoMap[tes[i].Name()] - } - return commitsInfo, nil -} diff --git a/vendor/github.com/gogs/git-module/utils.go b/vendor/github.com/gogs/git-module/utils.go deleted file mode 100644 index da8c58170..000000000 --- a/vendor/github.com/gogs/git-module/utils.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package git - -import ( - "fmt" - "os" - "path/filepath" - "strings" - "sync" -) - -// objectCache provides thread-safe cache opeations. -type objectCache struct { - lock sync.RWMutex - cache map[string]interface{} -} - -func newObjectCache() *objectCache { - return &objectCache{ - cache: make(map[string]interface{}, 10), - } -} - -func (oc *objectCache) Set(id string, obj interface{}) { - oc.lock.Lock() - defer oc.lock.Unlock() - - oc.cache[id] = obj -} - -func (oc *objectCache) Get(id string) (interface{}, bool) { - oc.lock.RLock() - defer oc.lock.RUnlock() - - obj, has := oc.cache[id] - return obj, has -} - -// isDir returns true if given path is a directory, -// or returns false when it's a file or does not exist. -func isDir(dir string) bool { - f, e := os.Stat(dir) - if e != nil { - return false - } - return f.IsDir() -} - -// isFile returns true if given path is a file, -// or returns false when it's a directory or does not exist. -func isFile(filePath string) bool { - f, e := os.Stat(filePath) - if e != nil { - return false - } - return !f.IsDir() -} - -// isExist checks whether a file or directory exists. -// It returns false when the file or directory does not exist. -func isExist(path string) bool { - _, err := os.Stat(path) - return err == nil || os.IsExist(err) -} - -func concatenateError(err error, stderr string) error { - if len(stderr) == 0 { - return err - } - return fmt.Errorf("%v - %s", err, stderr) -} - -// If the object is stored in its own file (i.e not in a pack file), -// this function returns the full path to the object file. -// It does not test if the file exists. -func filepathFromSHA1(rootdir, sha1 string) string { - return filepath.Join(rootdir, "objects", sha1[:2], sha1[2:]) -} - -func RefEndName(refStr string) string { - if strings.HasPrefix(refStr, BRANCH_PREFIX) { - return refStr[len(BRANCH_PREFIX):] - } - - if strings.HasPrefix(refStr, TAG_PREFIX) { - return refStr[len(TAG_PREFIX):] - } - - return refStr -} diff --git a/vendor/github.com/gogs/go-gogs-client/LICENSE b/vendor/github.com/gogs/go-gogs-client/LICENSE deleted file mode 100644 index 18b264d60..000000000 --- a/vendor/github.com/gogs/go-gogs-client/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Go Git Service - -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/gogs/go-gogs-client/README.md b/vendor/github.com/gogs/go-gogs-client/README.md deleted file mode 100644 index ae33bc06f..000000000 --- a/vendor/github.com/gogs/go-gogs-client/README.md +++ /dev/null @@ -1,8 +0,0 @@ -Gogs API client in Go -===================== - -This package is still in experiment, see [Wiki](https://github.com/gogits/go-gogs-client/wiki) for documentation. - -## License - -This project is under the MIT License. See the [LICENSE](https://github.com/gogits/gogs/blob/master/LICENSE) file for the full license text. \ No newline at end of file diff --git a/vendor/github.com/gogs/go-gogs-client/admin_org.go b/vendor/github.com/gogs/go-gogs-client/admin_org.go deleted file mode 100644 index be140625a..000000000 --- a/vendor/github.com/gogs/go-gogs-client/admin_org.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" - "fmt" -) - -func (c *Client) AdminCreateOrg(user string, opt CreateOrgOption) (*Organization, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - org := new(Organization) - return org, c.getParsedResponse("POST", fmt.Sprintf("/admin/users/%s/orgs", user), - jsonHeader, bytes.NewReader(body), org) -} diff --git a/vendor/github.com/gogs/go-gogs-client/admin_repo.go b/vendor/github.com/gogs/go-gogs-client/admin_repo.go deleted file mode 100644 index 50ba2be47..000000000 --- a/vendor/github.com/gogs/go-gogs-client/admin_repo.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" - "fmt" -) - -func (c *Client) AdminCreateRepo(user string, opt CreateRepoOption) (*Repository, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - repo := new(Repository) - return repo, c.getParsedResponse("POST", fmt.Sprintf("/admin/users/%s/repos", user), - jsonHeader, bytes.NewReader(body), repo) -} diff --git a/vendor/github.com/gogs/go-gogs-client/admin_user.go b/vendor/github.com/gogs/go-gogs-client/admin_user.go deleted file mode 100644 index 459031d71..000000000 --- a/vendor/github.com/gogs/go-gogs-client/admin_user.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" - "fmt" -) - -type CreateUserOption struct { - SourceID int64 `json:"source_id"` - LoginName string `json:"login_name"` - Username string `json:"username" binding:"Required;AlphaDashDot;MaxSize(35)"` - FullName string `json:"full_name" binding:"MaxSize(100)"` - Email string `json:"email" binding:"Required;Email;MaxSize(254)"` - Password string `json:"password" binding:"MaxSize(255)"` - SendNotify bool `json:"send_notify"` -} - -func (c *Client) AdminCreateUser(opt CreateUserOption) (*User, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - user := new(User) - return user, c.getParsedResponse("POST", "/admin/users", jsonHeader, bytes.NewReader(body), user) -} - -type EditUserOption struct { - SourceID int64 `json:"source_id"` - LoginName string `json:"login_name"` - FullName string `json:"full_name" binding:"MaxSize(100)"` - Email string `json:"email" binding:"Required;Email;MaxSize(254)"` - Password string `json:"password" binding:"MaxSize(255)"` - Website string `json:"website" binding:"MaxSize(50)"` - Location string `json:"location" binding:"MaxSize(50)"` - Active *bool `json:"active"` - Admin *bool `json:"admin"` - AllowGitHook *bool `json:"allow_git_hook"` - AllowImportLocal *bool `json:"allow_import_local"` - MaxRepoCreation *int `json:"max_repo_creation"` -} - -func (c *Client) AdminEditUser(user string, opt EditUserOption) error { - body, err := json.Marshal(&opt) - if err != nil { - return err - } - _, err = c.getResponse("PATCH", fmt.Sprintf("/admin/users/%s", user), jsonHeader, bytes.NewReader(body)) - return err -} - -func (c *Client) AdminDeleteUser(user string) error { - _, err := c.getResponse("DELETE", fmt.Sprintf("/admin/users/%s", user), nil, nil) - return err -} - -func (c *Client) AdminCreateUserPublicKey(user string, opt CreateKeyOption) (*PublicKey, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - key := new(PublicKey) - return key, c.getParsedResponse("POST", fmt.Sprintf("/admin/users/%s/keys", user), jsonHeader, bytes.NewReader(body), key) -} diff --git a/vendor/github.com/gogs/go-gogs-client/gogs.go b/vendor/github.com/gogs/go-gogs-client/gogs.go deleted file mode 100644 index 83ab8d71c..000000000 --- a/vendor/github.com/gogs/go-gogs-client/gogs.go +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "encoding/json" - "errors" - "io" - "io/ioutil" - "net/http" - "strings" -) - -func Version() string { - return "0.13.0" -} - -// Client represents a Gogs API client. -type Client struct { - url string - accessToken string - client *http.Client -} - -// NewClient initializes and returns an API client. -func NewClient(url, token string) *Client { - return &Client{ - url: strings.TrimSuffix(url, "/"), - accessToken: token, - client: &http.Client{}, - } -} - -// SetHTTPClient replaces default http.Client with user given one. -func (c *Client) SetHTTPClient(client *http.Client) { - c.client = client -} - -func (c *Client) doRequest(method, path string, header http.Header, body io.Reader) (*http.Response, error) { - req, err := http.NewRequest(method, c.url+"/api/v1"+path, body) - if err != nil { - return nil, err - } - req.Header.Set("Authorization", "token "+c.accessToken) - for k, v := range header { - req.Header[k] = v - } - - return c.client.Do(req) -} - -func (c *Client) getResponse(method, path string, header http.Header, body io.Reader) ([]byte, error) { - resp, err := c.doRequest(method, path, header, body) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - data, err := ioutil.ReadAll(resp.Body) - if err != nil { - return nil, err - } - - switch resp.StatusCode { - case 403: - return nil, errors.New("403 Forbidden") - case 404: - return nil, errors.New("404 Not Found") - } - - if resp.StatusCode/100 != 2 { - errMap := make(map[string]interface{}) - if err = json.Unmarshal(data, &errMap); err != nil { - return nil, err - } - return nil, errors.New(errMap["message"].(string)) - } - - return data, nil -} - -func (c *Client) getParsedResponse(method, path string, header http.Header, body io.Reader, obj interface{}) error { - data, err := c.getResponse(method, path, header, body) - if err != nil { - return err - } - return json.Unmarshal(data, obj) -} diff --git a/vendor/github.com/gogs/go-gogs-client/issue.go b/vendor/github.com/gogs/go-gogs-client/issue.go deleted file mode 100644 index aa2f0d8ee..000000000 --- a/vendor/github.com/gogs/go-gogs-client/issue.go +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2016 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" - "fmt" - "time" -) - -type StateType string - -const ( - STATE_OPEN StateType = "open" - STATE_CLOSED StateType = "closed" -) - -type PullRequestMeta struct { - HasMerged bool `json:"merged"` - Merged *time.Time `json:"merged_at"` -} - -type Issue struct { - ID int64 `json:"id"` - Index int64 `json:"number"` - Poster *User `json:"user"` - Title string `json:"title"` - Body string `json:"body"` - Labels []*Label `json:"labels"` - Milestone *Milestone `json:"milestone"` - Assignee *User `json:"assignee"` - State StateType `json:"state"` - Comments int `json:"comments"` - Created time.Time `json:"created_at"` - Updated time.Time `json:"updated_at"` - - PullRequest *PullRequestMeta `json:"pull_request"` -} - -type ListIssueOption struct { - Page int - State string -} - -func (c *Client) ListIssues(opt ListIssueOption) ([]*Issue, error) { - issues := make([]*Issue, 0, 10) - return issues, c.getParsedResponse("GET", fmt.Sprintf("/issues?page=%d", opt.Page), nil, nil, &issues) -} - -func (c *Client) ListUserIssues(opt ListIssueOption) ([]*Issue, error) { - issues := make([]*Issue, 0, 10) - return issues, c.getParsedResponse("GET", fmt.Sprintf("/user/issues?page=%d", opt.Page), nil, nil, &issues) -} - -func (c *Client) ListRepoIssues(owner, repo string, opt ListIssueOption) ([]*Issue, error) { - issues := make([]*Issue, 0, 10) - return issues, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/issues?page=%d", owner, repo, opt.Page), nil, nil, &issues) -} - -func (c *Client) GetIssue(owner, repo string, index int64) (*Issue, error) { - issue := new(Issue) - return issue, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/issues/%d", owner, repo, index), nil, nil, issue) -} - -type CreateIssueOption struct { - Title string `json:"title" binding:"Required"` - Body string `json:"body"` - Assignee string `json:"assignee"` - Milestone int64 `json:"milestone"` - Labels []int64 `json:"labels"` - Closed bool `json:"closed"` -} - -func (c *Client) CreateIssue(owner, repo string, opt CreateIssueOption) (*Issue, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - issue := new(Issue) - return issue, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/issues", owner, repo), - jsonHeader, bytes.NewReader(body), issue) -} - -type EditIssueOption struct { - Title string `json:"title"` - Body *string `json:"body"` - Assignee *string `json:"assignee"` - Milestone *int64 `json:"milestone"` - State *string `json:"state"` -} - -func (c *Client) EditIssue(owner, repo string, index int64, opt EditIssueOption) (*Issue, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - issue := new(Issue) - return issue, c.getParsedResponse("PATCH", fmt.Sprintf("/repos/%s/%s/issues/%d", owner, repo, index), - jsonHeader, bytes.NewReader(body), issue) -} diff --git a/vendor/github.com/gogs/go-gogs-client/issue_comment.go b/vendor/github.com/gogs/go-gogs-client/issue_comment.go deleted file mode 100644 index 246af0d93..000000000 --- a/vendor/github.com/gogs/go-gogs-client/issue_comment.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2016 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" - "fmt" - "time" -) - -// Comment represents a comment in commit and issue page. -type Comment struct { - ID int64 `json:"id"` - HTMLURL string `json:"html_url"` - Poster *User `json:"user"` - Body string `json:"body"` - Created time.Time `json:"created_at"` - Updated time.Time `json:"updated_at"` -} - -// ListIssueComments list comments on an issue. -func (c *Client) ListIssueComments(owner, repo string, index int64) ([]*Comment, error) { - comments := make([]*Comment, 0, 10) - return comments, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/issues/%d/comments", owner, repo, index), nil, nil, &comments) -} - -// ListRepoIssueComments list comments for a given repo. -func (c *Client) ListRepoIssueComments(owner, repo string) ([]*Comment, error) { - comments := make([]*Comment, 0, 10) - return comments, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/issues/comments", owner, repo), nil, nil, &comments) -} - -// CreateIssueCommentOption is option when creating an issue comment. -type CreateIssueCommentOption struct { - Body string `json:"body" binding:"Required"` -} - -// CreateIssueComment create comment on an issue. -func (c *Client) CreateIssueComment(owner, repo string, index int64, opt CreateIssueCommentOption) (*Comment, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - comment := new(Comment) - return comment, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/issues/%d/comments", owner, repo, index), jsonHeader, bytes.NewReader(body), comment) -} - -// EditIssueCommentOption is option when editing an issue comment. -type EditIssueCommentOption struct { - Body string `json:"body" binding:"Required"` -} - -// EditIssueComment edits an issue comment. -func (c *Client) EditIssueComment(owner, repo string, index, commentID int64, opt EditIssueCommentOption) (*Comment, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - comment := new(Comment) - return comment, c.getParsedResponse("PATCH", fmt.Sprintf("/repos/%s/%s/issues/%d/comments/%d", owner, repo, index, commentID), jsonHeader, bytes.NewReader(body), comment) -} - -// DeleteIssueComment deletes an issue comment. -func (c *Client) DeleteIssueComment(owner, repo string, index, commentID int64) error { - _, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/comments/%d", owner, repo, index, commentID), nil, nil) - return err -} diff --git a/vendor/github.com/gogs/go-gogs-client/issue_label.go b/vendor/github.com/gogs/go-gogs-client/issue_label.go deleted file mode 100644 index b8ff3009b..000000000 --- a/vendor/github.com/gogs/go-gogs-client/issue_label.go +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2016 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" - "fmt" -) - -type Label struct { - ID int64 `json:"id"` - Name string `json:"name"` - Color string `json:"color"` - URL string `json:"url"` -} - -func (c *Client) ListRepoLabels(owner, repo string) ([]*Label, error) { - labels := make([]*Label, 0, 10) - return labels, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/labels", owner, repo), nil, nil, &labels) -} - -func (c *Client) GetRepoLabel(owner, repo string, id int64) (*Label, error) { - label := new(Label) - return label, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/labels/%d", owner, repo, id), nil, nil, label) -} - -type CreateLabelOption struct { - Name string `json:"name" binding:"Required"` - Color string `json:"color" binding:"Required;Size(7)"` -} - -func (c *Client) CreateLabel(owner, repo string, opt CreateLabelOption) (*Label, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - label := new(Label) - return label, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/labels", owner, repo), - jsonHeader, bytes.NewReader(body), label) -} - -type EditLabelOption struct { - Name *string `json:"name"` - Color *string `json:"color"` -} - -func (c *Client) EditLabel(owner, repo string, id int64, opt EditLabelOption) (*Label, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - label := new(Label) - return label, c.getParsedResponse("PATCH", fmt.Sprintf("/repos/%s/%s/labels/%d", owner, repo, id), jsonHeader, bytes.NewReader(body), label) -} - -func (c *Client) DeleteLabel(owner, repo string, id int64) error { - _, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/labels/%d", owner, repo, id), nil, nil) - return err -} - -type IssueLabelsOption struct { - Labels []int64 `json:"labels"` -} - -func (c *Client) GetIssueLabels(owner, repo string, index int64) ([]*Label, error) { - labels := make([]*Label, 0, 5) - return labels, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/issues/%d/labels", owner, repo, index), nil, nil, &labels) -} - -func (c *Client) AddIssueLabels(owner, repo string, index int64, opt IssueLabelsOption) ([]*Label, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - labels := make([]*Label, 0) - return labels, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/issues/%d/labels", owner, repo, index), jsonHeader, bytes.NewReader(body), &labels) -} - -func (c *Client) ReplaceIssueLabels(owner, repo string, index int64, opt IssueLabelsOption) ([]*Label, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - labels := make([]*Label, 0) - return labels, c.getParsedResponse("PUT", fmt.Sprintf("/repos/%s/%s/issues/%d/labels", owner, repo, index), jsonHeader, bytes.NewReader(body), &labels) -} - -func (c *Client) DeleteIssueLabel(owner, repo string, index, label int64) error { - _, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/labels/%d", owner, repo, index, label), nil, nil) - return err -} - -func (c *Client) ClearIssueLabels(owner, repo string, index int64) error { - _, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/labels", owner, repo, index), nil, nil) - return err -} diff --git a/vendor/github.com/gogs/go-gogs-client/issue_milestone.go b/vendor/github.com/gogs/go-gogs-client/issue_milestone.go deleted file mode 100644 index ad27a15ef..000000000 --- a/vendor/github.com/gogs/go-gogs-client/issue_milestone.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2016 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" - "fmt" - "time" -) - -type Milestone struct { - ID int64 `json:"id"` - Title string `json:"title"` - Description string `json:"description"` - State StateType `json:"state"` - OpenIssues int `json:"open_issues"` - ClosedIssues int `json:"closed_issues"` - Closed *time.Time `json:"closed_at"` - Deadline *time.Time `json:"due_on"` -} - -func (c *Client) ListRepoMilestones(owner, repo string) ([]*Milestone, error) { - milestones := make([]*Milestone, 0, 10) - return milestones, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/milestones", owner, repo), nil, nil, &milestones) -} - -func (c *Client) GetMilestone(owner, repo string, id int64) (*Milestone, error) { - milestone := new(Milestone) - return milestone, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/milestones/%d", owner, repo, id), nil, nil, milestone) -} - -type CreateMilestoneOption struct { - Title string `json:"title"` - Description string `json:"description"` - Deadline *time.Time `json:"due_on"` -} - -func (c *Client) CreateMilestone(owner, repo string, opt CreateMilestoneOption) (*Milestone, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - milestone := new(Milestone) - return milestone, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/milestones", owner, repo), jsonHeader, bytes.NewReader(body), milestone) -} - -type EditMilestoneOption struct { - Title string `json:"title"` - Description *string `json:"description"` - State *string `json:"state"` - Deadline *time.Time `json:"due_on"` -} - -func (c *Client) EditMilestone(owner, repo string, id int64, opt EditMilestoneOption) (*Milestone, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - milestone := new(Milestone) - return milestone, c.getParsedResponse("PATCH", fmt.Sprintf("/repos/%s/%s/milestones/%d", owner, repo, id), jsonHeader, bytes.NewReader(body), milestone) -} - -func (c *Client) DeleteMilestone(owner, repo string, id int64) error { - _, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/milestones/%d", owner, repo, id), nil, nil) - return err -} diff --git a/vendor/github.com/gogs/go-gogs-client/media_types.go b/vendor/github.com/gogs/go-gogs-client/media_types.go deleted file mode 100644 index 884a8a740..000000000 --- a/vendor/github.com/gogs/go-gogs-client/media_types.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2018 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -const ( - MediaApplicationSHA = "application/vnd.gogs.sha" -) diff --git a/vendor/github.com/gogs/go-gogs-client/miscellaneous.go b/vendor/github.com/gogs/go-gogs-client/miscellaneous.go deleted file mode 100644 index fcf362ceb..000000000 --- a/vendor/github.com/gogs/go-gogs-client/miscellaneous.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -type MarkdownOption struct { - Text string - Mode string - Context string -} diff --git a/vendor/github.com/gogs/go-gogs-client/org.go b/vendor/github.com/gogs/go-gogs-client/org.go deleted file mode 100644 index 10d22b50c..000000000 --- a/vendor/github.com/gogs/go-gogs-client/org.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" - "fmt" -) - -type Organization struct { - ID int64 `json:"id"` - UserName string `json:"username"` - FullName string `json:"full_name"` - AvatarUrl string `json:"avatar_url"` - Description string `json:"description"` - Website string `json:"website"` - Location string `json:"location"` -} - -func (c *Client) ListMyOrgs() ([]*Organization, error) { - orgs := make([]*Organization, 0, 5) - return orgs, c.getParsedResponse("GET", "/user/orgs", nil, nil, &orgs) -} - -func (c *Client) ListUserOrgs(user string) ([]*Organization, error) { - orgs := make([]*Organization, 0, 5) - return orgs, c.getParsedResponse("GET", fmt.Sprintf("/users/%s/orgs", user), nil, nil, &orgs) -} - -func (c *Client) GetOrg(orgname string) (*Organization, error) { - org := new(Organization) - return org, c.getParsedResponse("GET", fmt.Sprintf("/orgs/%s", orgname), nil, nil, org) -} - -type CreateOrgOption struct { - UserName string `json:"username" binding:"Required"` - FullName string `json:"full_name"` - Description string `json:"description"` - Website string `json:"website"` - Location string `json:"location"` -} - -type EditOrgOption struct { - FullName string `json:"full_name"` - Description string `json:"description"` - Website string `json:"website"` - Location string `json:"location"` -} - -func (c *Client) CreateOrg(opt CreateOrgOption) (*Organization, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - org := new(Organization) - return org, c.getParsedResponse("POST", "/user/orgs", jsonHeader, bytes.NewReader(body), org) -} - -func (c *Client) EditOrg(orgname string, opt EditOrgOption) error { - body, err := json.Marshal(&opt) - if err != nil { - return err - } - _, err = c.getResponse("PATCH", fmt.Sprintf("/orgs/%s", orgname), jsonHeader, bytes.NewReader(body)) - return err -} diff --git a/vendor/github.com/gogs/go-gogs-client/org_member.go b/vendor/github.com/gogs/go-gogs-client/org_member.go deleted file mode 100644 index d9cdadabd..000000000 --- a/vendor/github.com/gogs/go-gogs-client/org_member.go +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2016 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" - "fmt" -) - -type AddOrgMembershipOption struct { - Role string `json:"role" binding:"Required"` -} - -func (c *Client) AddOrgMembership(org, user string, opt AddOrgMembershipOption) error { - body, err := json.Marshal(&opt) - if err != nil { - return err - } - _, err = c.getResponse("PUT", fmt.Sprintf("/orgs/%s/membership/%s", org, user), jsonHeader, bytes.NewReader(body)) - return err -} diff --git a/vendor/github.com/gogs/go-gogs-client/org_team.go b/vendor/github.com/gogs/go-gogs-client/org_team.go deleted file mode 100644 index 89f09e3f7..000000000 --- a/vendor/github.com/gogs/go-gogs-client/org_team.go +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2016 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -type Team struct { - ID int64 `json:"id"` - Name string `json:"name"` - Description string `json:"description"` - Permission string `json:"permission"` -} - -type CreateTeamOption struct { - Name string `json:"name" binding:"Required;AlphaDashDot;MaxSize(30)"` - Description string `json:"description" binding:"MaxSize(255)"` - Permission string `json:"permission"` -} diff --git a/vendor/github.com/gogs/go-gogs-client/pull.go b/vendor/github.com/gogs/go-gogs-client/pull.go deleted file mode 100644 index be93b269d..000000000 --- a/vendor/github.com/gogs/go-gogs-client/pull.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2016 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "time" -) - -// PullRequest represents a pull reqesut API object. -type PullRequest struct { - // Copied from issue.go - ID int64 `json:"id"` - Index int64 `json:"number"` - Poster *User `json:"user"` - Title string `json:"title"` - Body string `json:"body"` - Labels []*Label `json:"labels"` - Milestone *Milestone `json:"milestone"` - Assignee *User `json:"assignee"` - State StateType `json:"state"` - Comments int `json:"comments"` - - HeadBranch string `json:"head_branch"` - HeadRepo *Repository `json:"head_repo"` - BaseBranch string `json:"base_branch"` - BaseRepo *Repository `json:"base_repo"` - - HTMLURL string `json:"html_url"` - - Mergeable *bool `json:"mergeable"` - HasMerged bool `json:"merged"` - Merged *time.Time `json:"merged_at"` - MergedCommitID *string `json:"merge_commit_sha"` - MergedBy *User `json:"merged_by"` -} diff --git a/vendor/github.com/gogs/go-gogs-client/release.go b/vendor/github.com/gogs/go-gogs-client/release.go deleted file mode 100644 index 69c7f3b9b..000000000 --- a/vendor/github.com/gogs/go-gogs-client/release.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2017 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "time" -) - -// Release represents a release API object. -type Release struct { - ID int64 `json:"id"` - TagName string `json:"tag_name"` - TargetCommitish string `json:"target_commitish"` - Name string `json:"name"` - Body string `json:"body"` - Draft bool `json:"draft"` - Prerelease bool `json:"prerelease"` - Author *User `json:"author"` - Created time.Time `json:"created_at"` -} diff --git a/vendor/github.com/gogs/go-gogs-client/repo.go b/vendor/github.com/gogs/go-gogs-client/repo.go deleted file mode 100644 index ddcea9989..000000000 --- a/vendor/github.com/gogs/go-gogs-client/repo.go +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" - "fmt" - "time" -) - -// Permission represents a API permission. -type Permission struct { - Admin bool `json:"admin"` - Push bool `json:"push"` - Pull bool `json:"pull"` -} - -// Repository represents a API repository. -type Repository struct { - ID int64 `json:"id"` - Owner *User `json:"owner"` - Name string `json:"name"` - FullName string `json:"full_name"` - Description string `json:"description"` - Private bool `json:"private"` - Fork bool `json:"fork"` - Parent *Repository `json:"parent"` - Empty bool `json:"empty"` - Mirror bool `json:"mirror"` - Size int64 `json:"size"` - HTMLURL string `json:"html_url"` - SSHURL string `json:"ssh_url"` - CloneURL string `json:"clone_url"` - Website string `json:"website"` - Stars int `json:"stars_count"` - Forks int `json:"forks_count"` - Watchers int `json:"watchers_count"` - OpenIssues int `json:"open_issues_count"` - DefaultBranch string `json:"default_branch"` - Created time.Time `json:"created_at"` - Updated time.Time `json:"updated_at"` - Permissions *Permission `json:"permissions,omitempty"` -} - -// ListMyRepos lists all repositories for the authenticated user that has access to. -func (c *Client) ListMyRepos() ([]*Repository, error) { - repos := make([]*Repository, 0, 10) - return repos, c.getParsedResponse("GET", "/user/repos", nil, nil, &repos) -} - -func (c *Client) ListUserRepos(user string) ([]*Repository, error) { - repos := make([]*Repository, 0, 10) - return repos, c.getParsedResponse("GET", fmt.Sprintf("/users/%s/repos", user), nil, nil, &repos) -} - -func (c *Client) ListOrgRepos(org string) ([]*Repository, error) { - repos := make([]*Repository, 0, 10) - return repos, c.getParsedResponse("GET", fmt.Sprintf("/orgs/%s/repos", org), nil, nil, &repos) -} - -type CreateRepoOption struct { - Name string `json:"name" binding:"Required;AlphaDashDot;MaxSize(100)"` - Description string `json:"description" binding:"MaxSize(255)"` - Private bool `json:"private"` - AutoInit bool `json:"auto_init"` - Gitignores string `json:"gitignores"` - License string `json:"license"` - Readme string `json:"readme"` -} - -// CreateRepo creates a repository for authenticated user. -func (c *Client) CreateRepo(opt CreateRepoOption) (*Repository, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - repo := new(Repository) - return repo, c.getParsedResponse("POST", "/user/repos", jsonHeader, bytes.NewReader(body), repo) -} - -// CreateOrgRepo creates an organization repository for authenticated user. -func (c *Client) CreateOrgRepo(org string, opt CreateRepoOption) (*Repository, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - repo := new(Repository) - return repo, c.getParsedResponse("POST", fmt.Sprintf("/org/%s/repos", org), jsonHeader, bytes.NewReader(body), repo) -} - -// GetRepo returns information of a repository of given owner. -func (c *Client) GetRepo(owner, reponame string) (*Repository, error) { - repo := new(Repository) - return repo, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s", owner, reponame), nil, nil, repo) -} - -// DeleteRepo deletes a repository of user or organization. -func (c *Client) DeleteRepo(owner, repo string) error { - _, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s", owner, repo), nil, nil) - return err -} - -type MigrateRepoOption struct { - CloneAddr string `json:"clone_addr" binding:"Required"` - AuthUsername string `json:"auth_username"` - AuthPassword string `json:"auth_password"` - UID int `json:"uid" binding:"Required"` - RepoName string `json:"repo_name" binding:"Required"` - Mirror bool `json:"mirror"` - Private bool `json:"private"` - Description string `json:"description"` -} - -// MigrateRepo migrates a repository from other Git hosting sources for the -// authenticated user. -// -// To migrate a repository for a organization, the authenticated user must be a -// owner of the specified organization. -func (c *Client) MigrateRepo(opt MigrateRepoOption) (*Repository, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - repo := new(Repository) - return repo, c.getParsedResponse("POST", "/repos/migrate", jsonHeader, bytes.NewReader(body), repo) -} - -type EditIssueTrackerOption struct { - EnableIssues *bool `json:"enable_issues"` - EnableExternalTracker *bool `json:"enable_external_tracker"` - ExternalTrackerURL *string `json:"external_tracker_url"` - TrackerURLFormat *string `json:"tracker_url_format"` - TrackerIssueStyle *string `json:"tracker_issue_style"` -} - -// EditIssueTracker updates issue tracker options of the repository. -func (c *Client) EditIssueTracker(owner, repo string, opt EditIssueTrackerOption) error { - body, err := json.Marshal(&opt) - if err != nil { - return err - } - _, err = c.getResponse("PATCH", fmt.Sprintf("/repos/%s/%s/issue-tracker", owner, repo), jsonHeader, bytes.NewReader(body)) - return err -} diff --git a/vendor/github.com/gogs/go-gogs-client/repo_branch.go b/vendor/github.com/gogs/go-gogs-client/repo_branch.go deleted file mode 100644 index 1e5811212..000000000 --- a/vendor/github.com/gogs/go-gogs-client/repo_branch.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2016 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "fmt" -) - -// Branch represents a repository branch. -type Branch struct { - Name string `json:"name"` - Commit *PayloadCommit `json:"commit"` -} - -func (c *Client) ListRepoBranches(user, repo string) ([]*Branch, error) { - branches := make([]*Branch, 0, 10) - return branches, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/branches", user, repo), nil, nil, &branches) -} - -func (c *Client) GetRepoBranch(user, repo, branch string) (*Branch, error) { - b := new(Branch) - return b, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/branches/%s", user, repo, branch), nil, nil, &b) -} diff --git a/vendor/github.com/gogs/go-gogs-client/repo_collaborator.go b/vendor/github.com/gogs/go-gogs-client/repo_collaborator.go deleted file mode 100644 index 6030850e6..000000000 --- a/vendor/github.com/gogs/go-gogs-client/repo_collaborator.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2016 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" - "fmt" -) - -type Collaborator struct { - *User - Permissions Permission `json:"permissions"` -} - -type AddCollaboratorOption struct { - Permission *string `json:"permission"` -} - -func (c *Client) ListCollaborator(user, repo string) ([]*Collaborator, error) { - collabs := make([]*Collaborator, 0, 10) - return collabs, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/collaborators", user, repo), nil, nil, &collabs) -} - -func (c *Client) AddCollaborator(user, repo, collaborator string, opt AddCollaboratorOption) error { - body, err := json.Marshal(&opt) - if err != nil { - return err - } - _, err = c.getResponse("PUT", fmt.Sprintf("/repos/%s/%s/collaborators/%s", user, repo, collaborator), jsonHeader, bytes.NewReader(body)) - return err -} - -func (c *Client) DeleteCollaborator(user, repo, collaborator string) error { - _, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/collaborators/%s", user, repo, collaborator), nil, nil) - return err -} - -func (c *Client) IsCollaborator(user, repo, collaborator string) error { - _, err := c.getResponse("GET", fmt.Sprintf("/repos/%s/%s/collaborators/%s", user, repo, collaborator), nil, nil) - return err -} diff --git a/vendor/github.com/gogs/go-gogs-client/repo_commit.go b/vendor/github.com/gogs/go-gogs-client/repo_commit.go deleted file mode 100644 index b415962a2..000000000 --- a/vendor/github.com/gogs/go-gogs-client/repo_commit.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2018 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "fmt" - "net/http" -) - -// CommitMeta contains meta information of a commit in terms of API. -type CommitMeta struct { - URL string `json:"url"` - SHA string `json:"sha"` -} - -// CommitUser contains information of a user in the context of a commit. -type CommitUser struct { - Name string `json:"name"` - Email string `json:"email"` - Date string `json:"date"` -} - -// RepoCommit contains information of a commit in the context of a repository. -type RepoCommit struct { - URL string `json:"url"` - Author *CommitUser `json:"author"` - Committer *CommitUser `json:"committer"` - Message string `json:"message"` - Tree *CommitMeta `json:"tree"` -} - -// Commit contains information generated from a Git commit. -type Commit struct { - *CommitMeta - HTMLURL string `json:"html_url"` - RepoCommit *RepoCommit `json:"commit"` - Author *User `json:"author"` - Committer *User `json:"committer"` - Parents []*CommitMeta `json:"parents"` -} - -func (c *Client) GetSingleCommit(user, repo, commitID string) (*Commit, error) { - commit := new(Commit) - return commit, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/commits/%s", user, repo, commitID), nil, nil, &commit) -} - -func (c *Client) GetReferenceSHA(user, repo, ref string) (string, error) { - data, err := c.getResponse("GET", fmt.Sprintf("/repos/%s/%s/commits/%s", user, repo, ref), - http.Header{"Accept": []string{MediaApplicationSHA}}, nil) - return string(data), err -} diff --git a/vendor/github.com/gogs/go-gogs-client/repo_file.go b/vendor/github.com/gogs/go-gogs-client/repo_file.go deleted file mode 100644 index d766fb6d8..000000000 --- a/vendor/github.com/gogs/go-gogs-client/repo_file.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "fmt" -) - -// GetFile downloads a file of repository, ref can be branch/tag/commit. -// e.g.: ref -> master, tree -> macaron.go(no leading slash) -func (c *Client) GetFile(user, repo, ref, tree string) ([]byte, error) { - return c.getResponse("GET", fmt.Sprintf("/repos/%s/%s/raw/%s/%s", user, repo, ref, tree), nil, nil) -} - -// GetArchive downloads the full contents of a repository. Ref can be a branch/tag/commit. -func (c *Client) GetArchive(user, repo, ref, format string) ([]byte, error) { - if format != ".zip" && format != ".tar.gz" { - return nil, fmt.Errorf("invalid format: %s (must be .zip or .tar.gz)", format) - } - return c.getResponse("GET", fmt.Sprintf("/repos/%s/%s/archive/%s%s", user, repo, ref, format), nil, nil) -} diff --git a/vendor/github.com/gogs/go-gogs-client/repo_hook.go b/vendor/github.com/gogs/go-gogs-client/repo_hook.go deleted file mode 100644 index 7f8789152..000000000 --- a/vendor/github.com/gogs/go-gogs-client/repo_hook.go +++ /dev/null @@ -1,345 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "strings" - "time" -) - -var ( - ErrInvalidReceiveHook = errors.New("Invalid JSON payload received over webhook") -) - -type Hook struct { - ID int64 `json:"id"` - Type string `json:"type"` - URL string `json:"-"` - Config map[string]string `json:"config"` - Events []string `json:"events"` - Active bool `json:"active"` - Updated time.Time `json:"updated_at"` - Created time.Time `json:"created_at"` -} - -func (c *Client) ListRepoHooks(user, repo string) ([]*Hook, error) { - hooks := make([]*Hook, 0, 10) - return hooks, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/hooks", user, repo), nil, nil, &hooks) -} - -type CreateHookOption struct { - Type string `json:"type" binding:"Required"` - Config map[string]string `json:"config" binding:"Required"` - Events []string `json:"events"` - Active bool `json:"active"` -} - -func (c *Client) CreateRepoHook(user, repo string, opt CreateHookOption) (*Hook, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - h := new(Hook) - return h, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/hooks", user, repo), jsonHeader, bytes.NewReader(body), h) -} - -type EditHookOption struct { - Config map[string]string `json:"config"` - Events []string `json:"events"` - Active *bool `json:"active"` -} - -func (c *Client) EditRepoHook(user, repo string, id int64, opt EditHookOption) error { - body, err := json.Marshal(&opt) - if err != nil { - return err - } - _, err = c.getResponse("PATCH", fmt.Sprintf("/repos/%s/%s/hooks/%d", user, repo, id), jsonHeader, bytes.NewReader(body)) - return err -} - -func (c *Client) DeleteRepoHook(user, repo string, id int64) error { - _, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/hooks/%d", user, repo, id), nil, nil) - return err -} - -type Payloader interface { - JSONPayload() ([]byte, error) -} - -type PayloadUser struct { - Name string `json:"name"` - Email string `json:"email"` - UserName string `json:"username"` -} - -// FIXME: consider use same format as API when commits API are added. -type PayloadCommit struct { - ID string `json:"id"` - Message string `json:"message"` - URL string `json:"url"` - Author *PayloadUser `json:"author"` - Committer *PayloadUser `json:"committer"` - - Added []string `json:"added"` - Removed []string `json:"removed"` - Modified []string `json:"modified"` - - Timestamp time.Time `json:"timestamp"` -} - -var ( - _ Payloader = &CreatePayload{} - _ Payloader = &DeletePayload{} - _ Payloader = &ForkPayload{} - _ Payloader = &PushPayload{} - _ Payloader = &IssuesPayload{} - _ Payloader = &IssueCommentPayload{} - _ Payloader = &PullRequestPayload{} -) - -// _________ __ -// \_ ___ \_______ ____ _____ _/ |_ ____ -// / \ \/\_ __ \_/ __ \\__ \\ __\/ __ \ -// \ \____| | \/\ ___/ / __ \| | \ ___/ -// \______ /|__| \___ >____ /__| \___ > -// \/ \/ \/ \/ - -type CreatePayload struct { - Ref string `json:"ref"` - RefType string `json:"ref_type"` - Sha string `json:"sha"` - DefaultBranch string `json:"default_branch"` - Repo *Repository `json:"repository"` - Sender *User `json:"sender"` -} - -func (p *CreatePayload) JSONPayload() ([]byte, error) { - return json.MarshalIndent(p, "", " ") -} - -// ParseCreateHook parses create event hook content. -func ParseCreateHook(raw []byte) (*CreatePayload, error) { - hook := new(CreatePayload) - if err := json.Unmarshal(raw, hook); err != nil { - return nil, err - } - - // it is possible the JSON was parsed, however, - // was not from Gogs (maybe was from Bitbucket) - // So we'll check to be sure certain key fields - // were populated - switch { - case hook.Repo == nil: - return nil, ErrInvalidReceiveHook - case len(hook.Ref) == 0: - return nil, ErrInvalidReceiveHook - } - return hook, nil -} - -// ________ .__ __ -// \______ \ ____ | | _____/ |_ ____ -// | | \_/ __ \| | _/ __ \ __\/ __ \ -// | ` \ ___/| |_\ ___/| | \ ___/ -// /_______ /\___ >____/\___ >__| \___ > -// \/ \/ \/ \/ - -type PusherType string - -const ( - PUSHER_TYPE_USER PusherType = "user" -) - -type DeletePayload struct { - Ref string `json:"ref"` - RefType string `json:"ref_type"` - PusherType PusherType `json:"pusher_type"` - Repo *Repository `json:"repository"` - Sender *User `json:"sender"` -} - -func (p *DeletePayload) JSONPayload() ([]byte, error) { - return json.MarshalIndent(p, "", " ") -} - -// ___________ __ -// \_ _____/__________| | __ -// | __)/ _ \_ __ \ |/ / -// | \( <_> ) | \/ < -// \___ / \____/|__| |__|_ \ -// \/ \/ - -type ForkPayload struct { - Forkee *Repository `json:"forkee"` - Repo *Repository `json:"repository"` - Sender *User `json:"sender"` -} - -func (p *ForkPayload) JSONPayload() ([]byte, error) { - return json.MarshalIndent(p, "", " ") -} - -// __________ .__ -// \______ \__ __ _____| |__ -// | ___/ | \/ ___/ | \ -// | | | | /\___ \| Y \ -// |____| |____//____ >___| / -// \/ \/ - -// PushPayload represents a payload information of push event. -type PushPayload struct { - Ref string `json:"ref"` - Before string `json:"before"` - After string `json:"after"` - CompareURL string `json:"compare_url"` - Commits []*PayloadCommit `json:"commits"` - Repo *Repository `json:"repository"` - Pusher *User `json:"pusher"` - Sender *User `json:"sender"` -} - -func (p *PushPayload) JSONPayload() ([]byte, error) { - return json.MarshalIndent(p, "", " ") -} - -// ParsePushHook parses push event hook content. -func ParsePushHook(raw []byte) (*PushPayload, error) { - hook := new(PushPayload) - if err := json.Unmarshal(raw, hook); err != nil { - return nil, err - } - - switch { - case hook.Repo == nil: - return nil, ErrInvalidReceiveHook - case len(hook.Ref) == 0: - return nil, ErrInvalidReceiveHook - } - return hook, nil -} - -// Branch returns branch name from a payload -func (p *PushPayload) Branch() string { - return strings.Replace(p.Ref, "refs/heads/", "", -1) -} - -// .___ -// | | ______ ________ __ ____ -// | |/ ___// ___/ | \_/ __ \ -// | |\___ \ \___ \| | /\ ___/ -// |___/____ >____ >____/ \___ > -// \/ \/ \/ - -type HookIssueAction string - -const ( - HOOK_ISSUE_OPENED HookIssueAction = "opened" - HOOK_ISSUE_CLOSED HookIssueAction = "closed" - HOOK_ISSUE_REOPENED HookIssueAction = "reopened" - HOOK_ISSUE_EDITED HookIssueAction = "edited" - HOOK_ISSUE_ASSIGNED HookIssueAction = "assigned" - HOOK_ISSUE_UNASSIGNED HookIssueAction = "unassigned" - HOOK_ISSUE_LABEL_UPDATED HookIssueAction = "label_updated" - HOOK_ISSUE_LABEL_CLEARED HookIssueAction = "label_cleared" - HOOK_ISSUE_MILESTONED HookIssueAction = "milestoned" - HOOK_ISSUE_DEMILESTONED HookIssueAction = "demilestoned" - HOOK_ISSUE_SYNCHRONIZED HookIssueAction = "synchronized" -) - -type ChangesFromPayload struct { - From string `json:"from"` -} - -type ChangesPayload struct { - Title *ChangesFromPayload `json:"title,omitempty"` - Body *ChangesFromPayload `json:"body,omitempty"` -} - -// IssuesPayload represents a payload information of issues event. -type IssuesPayload struct { - Action HookIssueAction `json:"action"` - Index int64 `json:"number"` - Issue *Issue `json:"issue"` - Changes *ChangesPayload `json:"changes,omitempty"` - Repository *Repository `json:"repository"` - Sender *User `json:"sender"` -} - -func (p *IssuesPayload) JSONPayload() ([]byte, error) { - return json.MarshalIndent(p, "", " ") -} - -type HookIssueCommentAction string - -const ( - HOOK_ISSUE_COMMENT_CREATED HookIssueCommentAction = "created" - HOOK_ISSUE_COMMENT_EDITED HookIssueCommentAction = "edited" - HOOK_ISSUE_COMMENT_DELETED HookIssueCommentAction = "deleted" -) - -// IssueCommentPayload represents a payload information of issue comment event. -type IssueCommentPayload struct { - Action HookIssueCommentAction `json:"action"` - Issue *Issue `json:"issue"` - Comment *Comment `json:"comment"` - Changes *ChangesPayload `json:"changes,omitempty"` - Repository *Repository `json:"repository"` - Sender *User `json:"sender"` -} - -func (p *IssueCommentPayload) JSONPayload() ([]byte, error) { - return json.MarshalIndent(p, "", " ") -} - -// __________ .__ .__ __________ __ -// \______ \__ __| | | | \______ \ ____ ________ __ ____ _______/ |_ -// | ___/ | \ | | | | _// __ \/ ____/ | \_/ __ \ / ___/\ __\ -// | | | | / |_| |__ | | \ ___< <_| | | /\ ___/ \___ \ | | -// |____| |____/|____/____/ |____|_ /\___ >__ |____/ \___ >____ > |__| -// \/ \/ |__| \/ \/ - -// PullRequestPayload represents a payload information of pull request event. -type PullRequestPayload struct { - Action HookIssueAction `json:"action"` - Index int64 `json:"number"` - PullRequest *PullRequest `json:"pull_request"` - Changes *ChangesPayload `json:"changes,omitempty"` - Repository *Repository `json:"repository"` - Sender *User `json:"sender"` -} - -func (p *PullRequestPayload) JSONPayload() ([]byte, error) { - return json.MarshalIndent(p, "", " ") -} - -// __________ .__ -// \______ \ ____ | | ____ _____ ______ ____ -// | _// __ \| | _/ __ \\__ \ / ___// __ \ -// | | \ ___/| |_\ ___/ / __ \_\___ \\ ___/ -// |____|_ /\___ >____/\___ >____ /____ >\___ > -// \/ \/ \/ \/ \/ \/ - -type HookReleaseAction string - -const ( - HOOK_RELEASE_PUBLISHED HookReleaseAction = "published" -) - -// ReleasePayload represents a payload information of release event. -type ReleasePayload struct { - Action HookReleaseAction `json:"action"` - Release *Release `json:"release"` - Repository *Repository `json:"repository"` - Sender *User `json:"sender"` -} - -func (p *ReleasePayload) JSONPayload() ([]byte, error) { - return json.MarshalIndent(p, "", " ") -} diff --git a/vendor/github.com/gogs/go-gogs-client/repo_key.go b/vendor/github.com/gogs/go-gogs-client/repo_key.go deleted file mode 100644 index 2201602c1..000000000 --- a/vendor/github.com/gogs/go-gogs-client/repo_key.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" - "fmt" - "time" -) - -type DeployKey struct { - ID int64 `json:"id"` - Key string `json:"key"` - URL string `json:"url"` - Title string `json:"title"` - Created time.Time `json:"created_at"` - ReadOnly bool `json:"read_only"` -} - -func (c *Client) ListDeployKeys(user, repo string) ([]*DeployKey, error) { - keys := make([]*DeployKey, 0, 10) - return keys, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/keys", user, repo), nil, nil, &keys) -} - -func (c *Client) GetDeployKey(user, repo string, keyID int64) (*DeployKey, error) { - key := new(DeployKey) - return key, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/keys/%d", user, repo, keyID), nil, nil, &key) -} - -type CreateKeyOption struct { - Title string `json:"title" binding:"Required"` - Key string `json:"key" binding:"Required"` -} - -func (c *Client) CreateDeployKey(user, repo string, opt CreateKeyOption) (*DeployKey, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - key := new(DeployKey) - return key, c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/keys", user, repo), jsonHeader, bytes.NewReader(body), key) -} - -func (c *Client) DeleteDeployKey(owner, repo string, keyID int64) error { - _, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/keys/%d", owner, repo, keyID), nil, nil) - return err -} diff --git a/vendor/github.com/gogs/go-gogs-client/user.go b/vendor/github.com/gogs/go-gogs-client/user.go deleted file mode 100644 index bbe0ca9fd..000000000 --- a/vendor/github.com/gogs/go-gogs-client/user.go +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "fmt" -) - -// User represents a API user. -type User struct { - ID int64 `json:"id"` - UserName string `json:"username"` // LEGACY [Gogs 1.0]: remove field(s) for backward compatibility - Login string `json:"login"` - FullName string `json:"full_name"` - Email string `json:"email"` - AvatarUrl string `json:"avatar_url"` -} - -func (c *Client) GetUserInfo(user string) (*User, error) { - u := new(User) - err := c.getParsedResponse("GET", fmt.Sprintf("/users/%s", user), nil, nil, u) - return u, err -} diff --git a/vendor/github.com/gogs/go-gogs-client/user_app.go b/vendor/github.com/gogs/go-gogs-client/user_app.go deleted file mode 100644 index 965ed6ebf..000000000 --- a/vendor/github.com/gogs/go-gogs-client/user_app.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/base64" - "encoding/json" - "fmt" - "net/http" -) - -func BasicAuthEncode(user, pass string) string { - return base64.StdEncoding.EncodeToString([]byte(user + ":" + pass)) -} - -// AccessToken represents a API access token. -type AccessToken struct { - Name string `json:"name"` - Sha1 string `json:"sha1"` -} - -func (c *Client) ListAccessTokens(user, pass string) ([]*AccessToken, error) { - tokens := make([]*AccessToken, 0, 10) - return tokens, c.getParsedResponse("GET", fmt.Sprintf("/users/%s/tokens", user), - http.Header{"Authorization": []string{"Basic " + BasicAuthEncode(user, pass)}}, nil, &tokens) -} - -type CreateAccessTokenOption struct { - Name string `json:"name" binding:"Required"` -} - -func (c *Client) CreateAccessToken(user, pass string, opt CreateAccessTokenOption) (*AccessToken, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - t := new(AccessToken) - return t, c.getParsedResponse("POST", fmt.Sprintf("/users/%s/tokens", user), - http.Header{ - "content-type": []string{"application/json"}, - "Authorization": []string{"Basic " + BasicAuthEncode(user, pass)}}, - bytes.NewReader(body), t) -} diff --git a/vendor/github.com/gogs/go-gogs-client/user_email.go b/vendor/github.com/gogs/go-gogs-client/user_email.go deleted file mode 100644 index 02dd40231..000000000 --- a/vendor/github.com/gogs/go-gogs-client/user_email.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" -) - -type Email struct { - Email string `json:"email"` - Verified bool `json:"verified"` - Primary bool `json:"primary"` -} - -func (c *Client) ListEmails() ([]*Email, error) { - emails := make([]*Email, 0, 3) - return emails, c.getParsedResponse("GET", "/user/emails", nil, nil, &emails) -} - -type CreateEmailOption struct { - Emails []string `json:"emails"` -} - -func (c *Client) AddEmail(opt CreateEmailOption) ([]*Email, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - emails := make([]*Email, 0, 3) - return emails, c.getParsedResponse("POST", "/user/emails", jsonHeader, bytes.NewReader(body), emails) -} - -func (c *Client) DeleteEmail(opt CreateEmailOption) error { - body, err := json.Marshal(&opt) - if err != nil { - return err - } - _, err = c.getResponse("DELETE", "/user/emails", jsonHeader, bytes.NewReader(body)) - return err -} diff --git a/vendor/github.com/gogs/go-gogs-client/user_follow.go b/vendor/github.com/gogs/go-gogs-client/user_follow.go deleted file mode 100644 index 5ba20cc08..000000000 --- a/vendor/github.com/gogs/go-gogs-client/user_follow.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import "fmt" - -func (c *Client) ListMyFollowers(page int) ([]*User, error) { - users := make([]*User, 0, 10) - return users, c.getParsedResponse("GET", fmt.Sprintf("/user/followers?page=%d", page), nil, nil, &users) -} - -func (c *Client) ListFollowers(user string, page int) ([]*User, error) { - users := make([]*User, 0, 10) - return users, c.getParsedResponse("GET", fmt.Sprintf("/users/%s/followers?page=%d", user, page), nil, nil, &users) -} - -func (c *Client) ListMyFollowing(page int) ([]*User, error) { - users := make([]*User, 0, 10) - return users, c.getParsedResponse("GET", fmt.Sprintf("/user/following?page=%d", page), nil, nil, &users) -} - -func (c *Client) ListFollowing(user string, page int) ([]*User, error) { - users := make([]*User, 0, 10) - return users, c.getParsedResponse("GET", fmt.Sprintf("/users/%s/following?page=%d", user, page), nil, nil, &users) -} - -func (c *Client) IsFollowing(target string) bool { - _, err := c.getResponse("GET", fmt.Sprintf("/user/following/%s", target), nil, nil) - return err == nil -} - -func (c *Client) IsUserFollowing(user, target string) bool { - _, err := c.getResponse("GET", fmt.Sprintf("/users/%s/following/%s", user, target), nil, nil) - return err == nil -} - -func (c *Client) Follow(target string) error { - _, err := c.getResponse("PUT", fmt.Sprintf("/user/following/%s", target), jsonHeader, nil) - return err -} - -func (c *Client) Unfollow(target string) error { - _, err := c.getResponse("DELETE", fmt.Sprintf("/user/following/%s", target), nil, nil) - return err -} diff --git a/vendor/github.com/gogs/go-gogs-client/user_key.go b/vendor/github.com/gogs/go-gogs-client/user_key.go deleted file mode 100644 index c0278e0e9..000000000 --- a/vendor/github.com/gogs/go-gogs-client/user_key.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "bytes" - "encoding/json" - "fmt" - "time" -) - -type PublicKey struct { - ID int64 `json:"id"` - Key string `json:"key"` - URL string `json:"url,omitempty"` - Title string `json:"title,omitempty"` - Created time.Time `json:"created_at,omitempty"` -} - -func (c *Client) ListPublicKeys(user string) ([]*PublicKey, error) { - keys := make([]*PublicKey, 0, 10) - return keys, c.getParsedResponse("GET", fmt.Sprintf("/users/%s/keys", user), nil, nil, &keys) -} - -func (c *Client) ListMyPublicKeys() ([]*PublicKey, error) { - keys := make([]*PublicKey, 0, 10) - return keys, c.getParsedResponse("GET", "/user/keys", nil, nil, &keys) -} - -func (c *Client) GetPublicKey(keyID int64) (*PublicKey, error) { - key := new(PublicKey) - return key, c.getParsedResponse("GET", fmt.Sprintf("/user/keys/%d", keyID), nil, nil, &key) -} - -func (c *Client) CreatePublicKey(opt CreateKeyOption) (*PublicKey, error) { - body, err := json.Marshal(&opt) - if err != nil { - return nil, err - } - key := new(PublicKey) - return key, c.getParsedResponse("POST", "/user/keys", jsonHeader, bytes.NewReader(body), key) -} - -func (c *Client) DeletePublicKey(keyID int64) error { - _, err := c.getResponse("DELETE", fmt.Sprintf("/user/keys/%d", keyID), nil, nil) - return err -} diff --git a/vendor/github.com/gogs/go-gogs-client/utils.go b/vendor/github.com/gogs/go-gogs-client/utils.go deleted file mode 100644 index a4d673e0f..000000000 --- a/vendor/github.com/gogs/go-gogs-client/utils.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2015 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package gogs - -import ( - "net/http" -) - -var jsonHeader = http.Header{"content-type": []string{"application/json"}} - -func Bool(v bool) *bool { - return &v -} - -func String(v string) *string { - return &v -} - -func Int64(v int64) *int64 { - return &v -} diff --git a/vendor/github.com/gogs/go-libravatar/LICENSE b/vendor/github.com/gogs/go-libravatar/LICENSE deleted file mode 100644 index 8c89d4e34..000000000 --- a/vendor/github.com/gogs/go-libravatar/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2016 Sandro Santilli - -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/gogs/go-libravatar/Makefile b/vendor/github.com/gogs/go-libravatar/Makefile deleted file mode 100644 index 2a70ddc72..000000000 --- a/vendor/github.com/gogs/go-libravatar/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -PACKAGES ?= $(shell go list ./...) - -.PHONY: check -check: lint - go test - -.PHONY: lint -lint: - @which golint > /dev/null; if [ $$? -ne 0 ]; then \ - go get -u github.com/golang/lint/golint; \ - fi - @for PKG in $(PACKAGES); do golint -set_exit_status $$PKG || exit 1; done; diff --git a/vendor/github.com/gogs/go-libravatar/README.md b/vendor/github.com/gogs/go-libravatar/README.md deleted file mode 100644 index c9d72c437..000000000 --- a/vendor/github.com/gogs/go-libravatar/README.md +++ /dev/null @@ -1,28 +0,0 @@ -Simple [golang](https://www.golang.org) library for serving -[federated avatars](https://www.libravatar.org) - -[![trunk](https://goreportcard.com/badge/strk.kbt.io/projects/go/libravatar)] -(https://goreportcard.com/report/strk.kbt.io/projects/go/libravatar) - -# Use - -```sh -go get strk.kbt.io/projects/go/libravatar -cd $GOPATH/src/strk.kbt.io/projects/go/libravatar -go doc -``` - -# Contribute - -A clone of the code repository would be downloaded by `go get`. -You can send patches or pull requests to strk@kbt.io. - -If you need a place to publish your contribution branches, -you could start from a fork of the gitlab mirror: -https://gitlab.com/strk/go-libravatar - -# Contacts - - * Project homepage: http://strk.kbt.io/projects/go/libravatar - * Maintainer: Sandro Santilli - diff --git a/vendor/github.com/gogs/go-libravatar/libravatar.go b/vendor/github.com/gogs/go-libravatar/libravatar.go deleted file mode 100644 index 5088d02cf..000000000 --- a/vendor/github.com/gogs/go-libravatar/libravatar.go +++ /dev/null @@ -1,300 +0,0 @@ -// Copyright 2016 by Sandro Santilli -// Use of this source code is governed by a MIT -// license that can be found in the LICENSE file. - -// Implements support for federated avatars lookup. -// See https://wiki.libravatar.org/api/ - -package libravatar - -import ( - "crypto/md5" - "crypto/sha256" - "fmt" - "math/rand" - "net" - "net/mail" - "net/url" - "strings" - "time" -) - -// Default images (to be used as defaultURL) -const ( - // Do not load any image if none is associated with the email - // hash, instead return an HTTP 404 (File Not Found) response - HTTP404 = "404" - // (mystery-man) a simple, cartoon-style silhouetted outline of - // a person (does not vary by email hash) - MysteryMan = "mm" - // a geometric pattern based on an email hash - IdentIcon = "identicon" - // a generated 'monster' with different colors, faces, etc - MonsterID = "monsterid" - // generated faces with differing features and backgrounds - Wavatar = "wavatar" - // awesome generated, 8-bit arcade-style pixelated faces - Retro = "retro" -) - -var ( - // DefaultLibravatar is a default Libravatar object, - // enabling object-less function calls - DefaultLibravatar = New() -) - -/* This should be moved in its own file */ -type cacheKey struct { - service string - domain string -} - -type cacheValue struct { - target string - checkedAt time.Time -} - -// Libravatar is an opaque structure holding service configuration -type Libravatar struct { - defURL string // default url - picSize int // picture size - fallbackHost string // default fallback URL - secureFallbackHost string // default fallback URL for secure connections - useHTTPS bool - nameCache map[cacheKey]cacheValue - nameCacheDuration time.Duration - minSize uint // smallest image dimension allowed - maxSize uint // largest image dimension allowed - size uint // what dimension should be used - serviceBase string // SRV record to be queried for federation - secureServiceBase string // SRV record to be queried for federation with secure servers -} - -// New instanciates a new Libravatar object (handle) -func New() *Libravatar { - // According to https://wiki.libravatar.org/running_your_own/ - // the time-to-live (cache expiry) should be set to at least 1 day. - return &Libravatar{ - fallbackHost: `cdn.libravatar.org`, - secureFallbackHost: `seccdn.libravatar.org`, - minSize: 1, - maxSize: 512, - size: 0, // unset, defaults to 80 - serviceBase: `avatars`, - secureServiceBase: `avatars-sec`, - nameCache: make(map[cacheKey]cacheValue), - nameCacheDuration: 24 * time.Hour, - } -} - -// SetFallbackHost sets the hostname for fallbacks in case no avatar -// service is defined for a domain -func (v *Libravatar) SetFallbackHost(host string) { - v.fallbackHost = host -} - -// SetSecureFallbackHost sets the hostname for fallbacks in case no -// avatar service is defined for a domain, when requiring secure domains -func (v *Libravatar) SetSecureFallbackHost(host string) { - v.secureFallbackHost = host -} - -// SetUseHTTPS sets flag requesting use of https for fetching avatars -func (v *Libravatar) SetUseHTTPS(use bool) { - v.useHTTPS = use -} - -// SetAvatarSize sets avatars image dimension (0 for default) -func (v *Libravatar) SetAvatarSize(size uint) { - v.size = size -} - -// generate hash, either with email address or OpenID -func (v *Libravatar) genHash(email *mail.Address, openid *url.URL) string { - if email != nil { - email.Address = strings.ToLower(strings.TrimSpace(email.Address)) - sum := md5.Sum([]byte(email.Address)) - return fmt.Sprintf("%x", sum) - } else if openid != nil { - openid.Scheme = strings.ToLower(openid.Scheme) - openid.Host = strings.ToLower(openid.Host) - sum := sha256.Sum256([]byte(openid.String())) - return fmt.Sprintf("%x", sum) - } - // panic, because this should not be reachable - panic("Neither Email or OpenID set") -} - -// Gets domain out of email or openid (for openid to be parsed, email has to be nil) -func (v *Libravatar) getDomain(email *mail.Address, openid *url.URL) string { - if email != nil { - u, err := url.Parse("//" + email.Address) - if err != nil { - if v.useHTTPS && v.secureFallbackHost != "" { - return v.secureFallbackHost - } - return v.fallbackHost - } - return u.Host - } else if openid != nil { - return openid.Host - } - // panic, because this should not be reachable - panic("Neither Email or OpenID set") -} - -// Processes email or openid (for openid to be processed, email has to be nil) -func (v *Libravatar) process(email *mail.Address, openid *url.URL) (string, error) { - URL, err := v.baseURL(email, openid) - if err != nil { - return "", err - } - res := fmt.Sprintf("%s/avatar/%s", URL, v.genHash(email, openid)) - - values := make(url.Values) - if v.defURL != "" { - values.Add("d", v.defURL) - } - if v.size > 0 { - values.Add("s", fmt.Sprintf("%d", v.size)) - } - - if len(values) > 0 { - return fmt.Sprintf("%s?%s", res, values.Encode()), nil - } - return res, nil -} - -// Finds or defaults a URL for Federation (for openid to be used, email has to be nil) -func (v *Libravatar) baseURL(email *mail.Address, openid *url.URL) (string, error) { - var service, protocol, domain string - - if v.useHTTPS { - protocol = "https://" - service = v.secureServiceBase - domain = v.secureFallbackHost - - } else { - protocol = "http://" - service = v.serviceBase - domain = v.fallbackHost - } - - host := v.getDomain(email, openid) - key := cacheKey{service, host} - now := time.Now() - val, found := v.nameCache[key] - if found && now.Sub(val.checkedAt) <= v.nameCacheDuration { - return protocol + val.target, nil - } - - _, addrs, err := net.LookupSRV(service, "tcp", host) - if err != nil && err.(*net.DNSError).IsTimeout { - return "", err - } - - if len(addrs) == 1 { - // select only record, if only one is available - domain = strings.TrimSuffix(addrs[0].Target, ".") - } else if len(addrs) > 1 { - // Select first record according to RFC2782 weight - // ordering algorithm (page 3) - - type record struct { - srv *net.SRV - weight uint16 - } - - var ( - totalWeight uint16 - records []record - topPriority = addrs[0].Priority - topRecord *net.SRV - ) - - for _, rr := range addrs { - if rr.Priority > topPriority { - continue - } else if rr.Priority < topPriority { - // won't happen, because net sorts - // by priority, but just in case - totalWeight = 0 - records = nil - topPriority = rr.Priority - } - - totalWeight += rr.Weight - - if rr.Weight > 0 { - records = append(records, record{rr, totalWeight}) - } else if rr.Weight == 0 { - records = append([]record{record{srv: rr, weight: totalWeight}}, records...) - } - } - - if len(records) == 1 { - topRecord = records[0].srv - } else { - randnum := uint16(rand.Intn(int(totalWeight))) - - for _, rr := range records { - if rr.weight >= randnum { - topRecord = rr.srv - break - } - } - } - - domain = fmt.Sprintf("%s:%d", topRecord.Target, topRecord.Port) - } - - v.nameCache[key] = cacheValue{checkedAt: now, target: domain} - return protocol + domain, nil -} - -// FromEmail returns the url of the avatar for the given email -func (v *Libravatar) FromEmail(email string) (string, error) { - addr, err := mail.ParseAddress(email) - if err != nil { - return "", err - } - - link, err := v.process(addr, nil) - if err != nil { - return "", err - } - - return link, nil -} - -// FromEmail is the object-less call to DefaultLibravatar for an email adders -func FromEmail(email string) (string, error) { - return DefaultLibravatar.FromEmail(email) -} - -// FromURL returns the url of the avatar for the given url (typically -// for OpenID) -func (v *Libravatar) FromURL(openid string) (string, error) { - ourl, err := url.Parse(openid) - if err != nil { - return "", err - } - - if !ourl.IsAbs() { - return "", fmt.Errorf("Is not an absolute URL") - } else if ourl.Scheme != "http" && ourl.Scheme != "https" { - return "", fmt.Errorf("Invalid protocol: %s", ourl.Scheme) - } - - link, err := v.process(nil, ourl) - if err != nil { - return "", err - } - - return link, nil -} - -// FromURL is the object-less call to DefaultLibravatar for a URL -func FromURL(openid string) (string, error) { - return DefaultLibravatar.FromURL(openid) -} diff --git a/vendor/github.com/gogs/minwinsvc/LICENSE b/vendor/github.com/gogs/minwinsvc/LICENSE deleted file mode 100644 index fce91b4e1..000000000 --- a/vendor/github.com/gogs/minwinsvc/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2015 Daniel Theophanes - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. diff --git a/vendor/github.com/gogs/minwinsvc/README.md b/vendor/github.com/gogs/minwinsvc/README.md deleted file mode 100644 index 260dceeac..000000000 --- a/vendor/github.com/gogs/minwinsvc/README.md +++ /dev/null @@ -1,18 +0,0 @@ -### Minimal windows service stub - -Programs designed to run from most *nix style operating systems -can import this package to enable running programs as services without modifying -them. - -``` -import _ "github.com/kardianos/minwinsvc" -``` - -If you need more control over the exit behavior, set -``` -minwinsvc.SetOnExit(func() { - // Do something. - // Within 10 seconds call: - os.Exit(0) -}) -``` diff --git a/vendor/github.com/gogs/minwinsvc/minwinsvc.go b/vendor/github.com/gogs/minwinsvc/minwinsvc.go deleted file mode 100644 index 057ba7f95..000000000 --- a/vendor/github.com/gogs/minwinsvc/minwinsvc.go +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2015 Daniel Theophanes. -// Use of this source code is governed by a zlib-style -// license that can be found in the LICENSE file.package service - -// Minimal non-invasive windows only service stub. -// -// Import to allow running as a windows service. -// import _ "github.com/kardianos/minwinsvc" -// This will detect if running as a windows service -// and install required callbacks for windows. -package minwinsvc - -// SetOnExit sets the function to be called when the windows service -// requests an exit. If this is not called, or if it is called where -// f == nil, then it defaults to calling "os.Exit(0)". -func SetOnExit(f func()) { - setOnExit(f) -} diff --git a/vendor/github.com/gogs/minwinsvc/svc_other.go b/vendor/github.com/gogs/minwinsvc/svc_other.go deleted file mode 100644 index 197d30021..000000000 --- a/vendor/github.com/gogs/minwinsvc/svc_other.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2015 Daniel Theophanes. -// Use of this source code is governed by a zlib-style -// license that can be found in the LICENSE file.package service - -//+build !windows - -package minwinsvc - -func setOnExit(f func()) { - // Nothing. -} diff --git a/vendor/github.com/gogs/minwinsvc/svc_windows.go b/vendor/github.com/gogs/minwinsvc/svc_windows.go deleted file mode 100644 index e79755fa0..000000000 --- a/vendor/github.com/gogs/minwinsvc/svc_windows.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2015 Daniel Theophanes. -// Use of this source code is governed by a zlib-style -// license that can be found in the LICENSE file.package service - -//+build windows - -package minwinsvc - -import ( - "os" - "sync" - - "golang.org/x/sys/windows/svc" -) - -var ( - onExit func() - guard sync.Mutex -) - -func init() { - interactive, err := svc.IsAnInteractiveSession() - if err != nil { - panic(err) - } - // While run as Windows service, it is not an interactive session, - // but we don't want hook execute to be treated as service, e.g. gogs.exe hook pre-receive. - if interactive || len(os.Getenv("SSH_ORIGINAL_COMMAND")) > 0 { - return - } - go func() { - _ = svc.Run("", runner{}) - - guard.Lock() - f := onExit - guard.Unlock() - - // Don't hold this lock in user code. - if f != nil { - f() - } - // Make sure we exit. - os.Exit(0) - }() -} - -func setOnExit(f func()) { - guard.Lock() - onExit = f - guard.Unlock() -} - -type runner struct{} - -func (runner) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (bool, uint32) { - const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown - changes <- svc.Status{State: svc.StartPending} - - changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted} - for { - c := <-r - switch c.Cmd { - case svc.Interrogate: - changes <- c.CurrentStatus - case svc.Stop, svc.Shutdown: - changes <- svc.Status{State: svc.StopPending} - return false, 0 - } - } - - return false, 0 -} diff --git a/vendor/github.com/golang/protobuf/LICENSE b/vendor/github.com/golang/protobuf/LICENSE deleted file mode 100644 index 0f646931a..000000000 --- a/vendor/github.com/golang/protobuf/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Copyright 2010 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/golang/protobuf/proto/clone.go b/vendor/github.com/golang/protobuf/proto/clone.go deleted file mode 100644 index 3cd3249f7..000000000 --- a/vendor/github.com/golang/protobuf/proto/clone.go +++ /dev/null @@ -1,253 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2011 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -// Protocol buffer deep copy and merge. -// TODO: RawMessage. - -package proto - -import ( - "fmt" - "log" - "reflect" - "strings" -) - -// Clone returns a deep copy of a protocol buffer. -func Clone(src Message) Message { - in := reflect.ValueOf(src) - if in.IsNil() { - return src - } - out := reflect.New(in.Type().Elem()) - dst := out.Interface().(Message) - Merge(dst, src) - return dst -} - -// Merger is the interface representing objects that can merge messages of the same type. -type Merger interface { - // Merge merges src into this message. - // Required and optional fields that are set in src will be set to that value in dst. - // Elements of repeated fields will be appended. - // - // Merge may panic if called with a different argument type than the receiver. - Merge(src Message) -} - -// generatedMerger is the custom merge method that generated protos will have. -// We must add this method since a generate Merge method will conflict with -// many existing protos that have a Merge data field already defined. -type generatedMerger interface { - XXX_Merge(src Message) -} - -// Merge merges src into dst. -// Required and optional fields that are set in src will be set to that value in dst. -// Elements of repeated fields will be appended. -// Merge panics if src and dst are not the same type, or if dst is nil. -func Merge(dst, src Message) { - if m, ok := dst.(Merger); ok { - m.Merge(src) - return - } - - in := reflect.ValueOf(src) - out := reflect.ValueOf(dst) - if out.IsNil() { - panic("proto: nil destination") - } - if in.Type() != out.Type() { - panic(fmt.Sprintf("proto.Merge(%T, %T) type mismatch", dst, src)) - } - if in.IsNil() { - return // Merge from nil src is a noop - } - if m, ok := dst.(generatedMerger); ok { - m.XXX_Merge(src) - return - } - mergeStruct(out.Elem(), in.Elem()) -} - -func mergeStruct(out, in reflect.Value) { - sprop := GetProperties(in.Type()) - for i := 0; i < in.NumField(); i++ { - f := in.Type().Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i]) - } - - if emIn, err := extendable(in.Addr().Interface()); err == nil { - emOut, _ := extendable(out.Addr().Interface()) - mIn, muIn := emIn.extensionsRead() - if mIn != nil { - mOut := emOut.extensionsWrite() - muIn.Lock() - mergeExtension(mOut, mIn) - muIn.Unlock() - } - } - - uf := in.FieldByName("XXX_unrecognized") - if !uf.IsValid() { - return - } - uin := uf.Bytes() - if len(uin) > 0 { - out.FieldByName("XXX_unrecognized").SetBytes(append([]byte(nil), uin...)) - } -} - -// mergeAny performs a merge between two values of the same type. -// viaPtr indicates whether the values were indirected through a pointer (implying proto2). -// prop is set if this is a struct field (it may be nil). -func mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) { - if in.Type() == protoMessageType { - if !in.IsNil() { - if out.IsNil() { - out.Set(reflect.ValueOf(Clone(in.Interface().(Message)))) - } else { - Merge(out.Interface().(Message), in.Interface().(Message)) - } - } - return - } - switch in.Kind() { - case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, - reflect.String, reflect.Uint32, reflect.Uint64: - if !viaPtr && isProto3Zero(in) { - return - } - out.Set(in) - case reflect.Interface: - // Probably a oneof field; copy non-nil values. - if in.IsNil() { - return - } - // Allocate destination if it is not set, or set to a different type. - // Otherwise we will merge as normal. - if out.IsNil() || out.Elem().Type() != in.Elem().Type() { - out.Set(reflect.New(in.Elem().Elem().Type())) // interface -> *T -> T -> new(T) - } - mergeAny(out.Elem(), in.Elem(), false, nil) - case reflect.Map: - if in.Len() == 0 { - return - } - if out.IsNil() { - out.Set(reflect.MakeMap(in.Type())) - } - // For maps with value types of *T or []byte we need to deep copy each value. - elemKind := in.Type().Elem().Kind() - for _, key := range in.MapKeys() { - var val reflect.Value - switch elemKind { - case reflect.Ptr: - val = reflect.New(in.Type().Elem().Elem()) - mergeAny(val, in.MapIndex(key), false, nil) - case reflect.Slice: - val = in.MapIndex(key) - val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) - default: - val = in.MapIndex(key) - } - out.SetMapIndex(key, val) - } - case reflect.Ptr: - if in.IsNil() { - return - } - if out.IsNil() { - out.Set(reflect.New(in.Elem().Type())) - } - mergeAny(out.Elem(), in.Elem(), true, nil) - case reflect.Slice: - if in.IsNil() { - return - } - if in.Type().Elem().Kind() == reflect.Uint8 { - // []byte is a scalar bytes field, not a repeated field. - - // Edge case: if this is in a proto3 message, a zero length - // bytes field is considered the zero value, and should not - // be merged. - if prop != nil && prop.proto3 && in.Len() == 0 { - return - } - - // Make a deep copy. - // Append to []byte{} instead of []byte(nil) so that we never end up - // with a nil result. - out.SetBytes(append([]byte{}, in.Bytes()...)) - return - } - n := in.Len() - if out.IsNil() { - out.Set(reflect.MakeSlice(in.Type(), 0, n)) - } - switch in.Type().Elem().Kind() { - case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, - reflect.String, reflect.Uint32, reflect.Uint64: - out.Set(reflect.AppendSlice(out, in)) - default: - for i := 0; i < n; i++ { - x := reflect.Indirect(reflect.New(in.Type().Elem())) - mergeAny(x, in.Index(i), false, nil) - out.Set(reflect.Append(out, x)) - } - } - case reflect.Struct: - mergeStruct(out, in) - default: - // unknown type, so not a protocol buffer - log.Printf("proto: don't know how to copy %v", in) - } -} - -func mergeExtension(out, in map[int32]Extension) { - for extNum, eIn := range in { - eOut := Extension{desc: eIn.desc} - if eIn.value != nil { - v := reflect.New(reflect.TypeOf(eIn.value)).Elem() - mergeAny(v, reflect.ValueOf(eIn.value), false, nil) - eOut.value = v.Interface() - } - if eIn.enc != nil { - eOut.enc = make([]byte, len(eIn.enc)) - copy(eOut.enc, eIn.enc) - } - - out[extNum] = eOut - } -} diff --git a/vendor/github.com/golang/protobuf/proto/decode.go b/vendor/github.com/golang/protobuf/proto/decode.go deleted file mode 100644 index 63b0f08be..000000000 --- a/vendor/github.com/golang/protobuf/proto/decode.go +++ /dev/null @@ -1,427 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -package proto - -/* - * Routines for decoding protocol buffer data to construct in-memory representations. - */ - -import ( - "errors" - "fmt" - "io" -) - -// errOverflow is returned when an integer is too large to be represented. -var errOverflow = errors.New("proto: integer overflow") - -// ErrInternalBadWireType is returned by generated code when an incorrect -// wire type is encountered. It does not get returned to user code. -var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof") - -// DecodeVarint reads a varint-encoded integer from the slice. -// It returns the integer and the number of bytes consumed, or -// zero if there is not enough. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -func DecodeVarint(buf []byte) (x uint64, n int) { - for shift := uint(0); shift < 64; shift += 7 { - if n >= len(buf) { - return 0, 0 - } - b := uint64(buf[n]) - n++ - x |= (b & 0x7F) << shift - if (b & 0x80) == 0 { - return x, n - } - } - - // The number is too large to represent in a 64-bit value. - return 0, 0 -} - -func (p *Buffer) decodeVarintSlow() (x uint64, err error) { - i := p.index - l := len(p.buf) - - for shift := uint(0); shift < 64; shift += 7 { - if i >= l { - err = io.ErrUnexpectedEOF - return - } - b := p.buf[i] - i++ - x |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - p.index = i - return - } - } - - // The number is too large to represent in a 64-bit value. - err = errOverflow - return -} - -// DecodeVarint reads a varint-encoded integer from the Buffer. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -func (p *Buffer) DecodeVarint() (x uint64, err error) { - i := p.index - buf := p.buf - - if i >= len(buf) { - return 0, io.ErrUnexpectedEOF - } else if buf[i] < 0x80 { - p.index++ - return uint64(buf[i]), nil - } else if len(buf)-i < 10 { - return p.decodeVarintSlow() - } - - var b uint64 - // we already checked the first byte - x = uint64(buf[i]) - 0x80 - i++ - - b = uint64(buf[i]) - i++ - x += b << 7 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 7 - - b = uint64(buf[i]) - i++ - x += b << 14 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 14 - - b = uint64(buf[i]) - i++ - x += b << 21 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 21 - - b = uint64(buf[i]) - i++ - x += b << 28 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 28 - - b = uint64(buf[i]) - i++ - x += b << 35 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 35 - - b = uint64(buf[i]) - i++ - x += b << 42 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 42 - - b = uint64(buf[i]) - i++ - x += b << 49 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 49 - - b = uint64(buf[i]) - i++ - x += b << 56 - if b&0x80 == 0 { - goto done - } - x -= 0x80 << 56 - - b = uint64(buf[i]) - i++ - x += b << 63 - if b&0x80 == 0 { - goto done - } - - return 0, errOverflow - -done: - p.index = i - return x, nil -} - -// DecodeFixed64 reads a 64-bit integer from the Buffer. -// This is the format for the -// fixed64, sfixed64, and double protocol buffer types. -func (p *Buffer) DecodeFixed64() (x uint64, err error) { - // x, err already 0 - i := p.index + 8 - if i < 0 || i > len(p.buf) { - err = io.ErrUnexpectedEOF - return - } - p.index = i - - x = uint64(p.buf[i-8]) - x |= uint64(p.buf[i-7]) << 8 - x |= uint64(p.buf[i-6]) << 16 - x |= uint64(p.buf[i-5]) << 24 - x |= uint64(p.buf[i-4]) << 32 - x |= uint64(p.buf[i-3]) << 40 - x |= uint64(p.buf[i-2]) << 48 - x |= uint64(p.buf[i-1]) << 56 - return -} - -// DecodeFixed32 reads a 32-bit integer from the Buffer. -// This is the format for the -// fixed32, sfixed32, and float protocol buffer types. -func (p *Buffer) DecodeFixed32() (x uint64, err error) { - // x, err already 0 - i := p.index + 4 - if i < 0 || i > len(p.buf) { - err = io.ErrUnexpectedEOF - return - } - p.index = i - - x = uint64(p.buf[i-4]) - x |= uint64(p.buf[i-3]) << 8 - x |= uint64(p.buf[i-2]) << 16 - x |= uint64(p.buf[i-1]) << 24 - return -} - -// DecodeZigzag64 reads a zigzag-encoded 64-bit integer -// from the Buffer. -// This is the format used for the sint64 protocol buffer type. -func (p *Buffer) DecodeZigzag64() (x uint64, err error) { - x, err = p.DecodeVarint() - if err != nil { - return - } - x = (x >> 1) ^ uint64((int64(x&1)<<63)>>63) - return -} - -// DecodeZigzag32 reads a zigzag-encoded 32-bit integer -// from the Buffer. -// This is the format used for the sint32 protocol buffer type. -func (p *Buffer) DecodeZigzag32() (x uint64, err error) { - x, err = p.DecodeVarint() - if err != nil { - return - } - x = uint64((uint32(x) >> 1) ^ uint32((int32(x&1)<<31)>>31)) - return -} - -// DecodeRawBytes reads a count-delimited byte buffer from the Buffer. -// This is the format used for the bytes protocol buffer -// type and for embedded messages. -func (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) { - n, err := p.DecodeVarint() - if err != nil { - return nil, err - } - - nb := int(n) - if nb < 0 { - return nil, fmt.Errorf("proto: bad byte length %d", nb) - } - end := p.index + nb - if end < p.index || end > len(p.buf) { - return nil, io.ErrUnexpectedEOF - } - - if !alloc { - // todo: check if can get more uses of alloc=false - buf = p.buf[p.index:end] - p.index += nb - return - } - - buf = make([]byte, nb) - copy(buf, p.buf[p.index:]) - p.index += nb - return -} - -// DecodeStringBytes reads an encoded string from the Buffer. -// This is the format used for the proto2 string type. -func (p *Buffer) DecodeStringBytes() (s string, err error) { - buf, err := p.DecodeRawBytes(false) - if err != nil { - return - } - return string(buf), nil -} - -// Unmarshaler is the interface representing objects that can -// unmarshal themselves. The argument points to data that may be -// overwritten, so implementations should not keep references to the -// buffer. -// Unmarshal implementations should not clear the receiver. -// Any unmarshaled data should be merged into the receiver. -// Callers of Unmarshal that do not want to retain existing data -// should Reset the receiver before calling Unmarshal. -type Unmarshaler interface { - Unmarshal([]byte) error -} - -// newUnmarshaler is the interface representing objects that can -// unmarshal themselves. The semantics are identical to Unmarshaler. -// -// This exists to support protoc-gen-go generated messages. -// The proto package will stop type-asserting to this interface in the future. -// -// DO NOT DEPEND ON THIS. -type newUnmarshaler interface { - XXX_Unmarshal([]byte) error -} - -// Unmarshal parses the protocol buffer representation in buf and places the -// decoded result in pb. If the struct underlying pb does not match -// the data in buf, the results can be unpredictable. -// -// Unmarshal resets pb before starting to unmarshal, so any -// existing data in pb is always removed. Use UnmarshalMerge -// to preserve and append to existing data. -func Unmarshal(buf []byte, pb Message) error { - pb.Reset() - if u, ok := pb.(newUnmarshaler); ok { - return u.XXX_Unmarshal(buf) - } - if u, ok := pb.(Unmarshaler); ok { - return u.Unmarshal(buf) - } - return NewBuffer(buf).Unmarshal(pb) -} - -// UnmarshalMerge parses the protocol buffer representation in buf and -// writes the decoded result to pb. If the struct underlying pb does not match -// the data in buf, the results can be unpredictable. -// -// UnmarshalMerge merges into existing data in pb. -// Most code should use Unmarshal instead. -func UnmarshalMerge(buf []byte, pb Message) error { - if u, ok := pb.(newUnmarshaler); ok { - return u.XXX_Unmarshal(buf) - } - if u, ok := pb.(Unmarshaler); ok { - // NOTE: The history of proto have unfortunately been inconsistent - // whether Unmarshaler should or should not implicitly clear itself. - // Some implementations do, most do not. - // Thus, calling this here may or may not do what people want. - // - // See https://github.com/golang/protobuf/issues/424 - return u.Unmarshal(buf) - } - return NewBuffer(buf).Unmarshal(pb) -} - -// DecodeMessage reads a count-delimited message from the Buffer. -func (p *Buffer) DecodeMessage(pb Message) error { - enc, err := p.DecodeRawBytes(false) - if err != nil { - return err - } - return NewBuffer(enc).Unmarshal(pb) -} - -// DecodeGroup reads a tag-delimited group from the Buffer. -// StartGroup tag is already consumed. This function consumes -// EndGroup tag. -func (p *Buffer) DecodeGroup(pb Message) error { - b := p.buf[p.index:] - x, y := findEndGroup(b) - if x < 0 { - return io.ErrUnexpectedEOF - } - err := Unmarshal(b[:x], pb) - p.index += y - return err -} - -// Unmarshal parses the protocol buffer representation in the -// Buffer and places the decoded result in pb. If the struct -// underlying pb does not match the data in the buffer, the results can be -// unpredictable. -// -// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal. -func (p *Buffer) Unmarshal(pb Message) error { - // If the object can unmarshal itself, let it. - if u, ok := pb.(newUnmarshaler); ok { - err := u.XXX_Unmarshal(p.buf[p.index:]) - p.index = len(p.buf) - return err - } - if u, ok := pb.(Unmarshaler); ok { - // NOTE: The history of proto have unfortunately been inconsistent - // whether Unmarshaler should or should not implicitly clear itself. - // Some implementations do, most do not. - // Thus, calling this here may or may not do what people want. - // - // See https://github.com/golang/protobuf/issues/424 - err := u.Unmarshal(p.buf[p.index:]) - p.index = len(p.buf) - return err - } - - // Slow workaround for messages that aren't Unmarshalers. - // This includes some hand-coded .pb.go files and - // bootstrap protos. - // TODO: fix all of those and then add Unmarshal to - // the Message interface. Then: - // The cast above and code below can be deleted. - // The old unmarshaler can be deleted. - // Clients can call Unmarshal directly (can already do that, actually). - var info InternalMessageInfo - err := info.Unmarshal(pb, p.buf[p.index:]) - p.index = len(p.buf) - return err -} diff --git a/vendor/github.com/golang/protobuf/proto/deprecated.go b/vendor/github.com/golang/protobuf/proto/deprecated.go deleted file mode 100644 index 69de0ea0e..000000000 --- a/vendor/github.com/golang/protobuf/proto/deprecated.go +++ /dev/null @@ -1,38 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2018 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -package proto - -// Deprecated: do not use. -type Stats struct{ Emalloc, Dmalloc, Encode, Decode, Chit, Cmiss, Size uint64 } - -// Deprecated: do not use. -func GetStats() Stats { return Stats{} } diff --git a/vendor/github.com/golang/protobuf/proto/discard.go b/vendor/github.com/golang/protobuf/proto/discard.go deleted file mode 100644 index dea2617ce..000000000 --- a/vendor/github.com/golang/protobuf/proto/discard.go +++ /dev/null @@ -1,350 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2017 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -package proto - -import ( - "fmt" - "reflect" - "strings" - "sync" - "sync/atomic" -) - -type generatedDiscarder interface { - XXX_DiscardUnknown() -} - -// DiscardUnknown recursively discards all unknown fields from this message -// and all embedded messages. -// -// When unmarshaling a message with unrecognized fields, the tags and values -// of such fields are preserved in the Message. This allows a later call to -// marshal to be able to produce a message that continues to have those -// unrecognized fields. To avoid this, DiscardUnknown is used to -// explicitly clear the unknown fields after unmarshaling. -// -// For proto2 messages, the unknown fields of message extensions are only -// discarded from messages that have been accessed via GetExtension. -func DiscardUnknown(m Message) { - if m, ok := m.(generatedDiscarder); ok { - m.XXX_DiscardUnknown() - return - } - // TODO: Dynamically populate a InternalMessageInfo for legacy messages, - // but the master branch has no implementation for InternalMessageInfo, - // so it would be more work to replicate that approach. - discardLegacy(m) -} - -// DiscardUnknown recursively discards all unknown fields. -func (a *InternalMessageInfo) DiscardUnknown(m Message) { - di := atomicLoadDiscardInfo(&a.discard) - if di == nil { - di = getDiscardInfo(reflect.TypeOf(m).Elem()) - atomicStoreDiscardInfo(&a.discard, di) - } - di.discard(toPointer(&m)) -} - -type discardInfo struct { - typ reflect.Type - - initialized int32 // 0: only typ is valid, 1: everything is valid - lock sync.Mutex - - fields []discardFieldInfo - unrecognized field -} - -type discardFieldInfo struct { - field field // Offset of field, guaranteed to be valid - discard func(src pointer) -} - -var ( - discardInfoMap = map[reflect.Type]*discardInfo{} - discardInfoLock sync.Mutex -) - -func getDiscardInfo(t reflect.Type) *discardInfo { - discardInfoLock.Lock() - defer discardInfoLock.Unlock() - di := discardInfoMap[t] - if di == nil { - di = &discardInfo{typ: t} - discardInfoMap[t] = di - } - return di -} - -func (di *discardInfo) discard(src pointer) { - if src.isNil() { - return // Nothing to do. - } - - if atomic.LoadInt32(&di.initialized) == 0 { - di.computeDiscardInfo() - } - - for _, fi := range di.fields { - sfp := src.offset(fi.field) - fi.discard(sfp) - } - - // For proto2 messages, only discard unknown fields in message extensions - // that have been accessed via GetExtension. - if em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil { - // Ignore lock since DiscardUnknown is not concurrency safe. - emm, _ := em.extensionsRead() - for _, mx := range emm { - if m, ok := mx.value.(Message); ok { - DiscardUnknown(m) - } - } - } - - if di.unrecognized.IsValid() { - *src.offset(di.unrecognized).toBytes() = nil - } -} - -func (di *discardInfo) computeDiscardInfo() { - di.lock.Lock() - defer di.lock.Unlock() - if di.initialized != 0 { - return - } - t := di.typ - n := t.NumField() - - for i := 0; i < n; i++ { - f := t.Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - - dfi := discardFieldInfo{field: toField(&f)} - tf := f.Type - - // Unwrap tf to get its most basic type. - var isPointer, isSlice bool - if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { - isSlice = true - tf = tf.Elem() - } - if tf.Kind() == reflect.Ptr { - isPointer = true - tf = tf.Elem() - } - if isPointer && isSlice && tf.Kind() != reflect.Struct { - panic(fmt.Sprintf("%v.%s cannot be a slice of pointers to primitive types", t, f.Name)) - } - - switch tf.Kind() { - case reflect.Struct: - switch { - case !isPointer: - panic(fmt.Sprintf("%v.%s cannot be a direct struct value", t, f.Name)) - case isSlice: // E.g., []*pb.T - di := getDiscardInfo(tf) - dfi.discard = func(src pointer) { - sps := src.getPointerSlice() - for _, sp := range sps { - if !sp.isNil() { - di.discard(sp) - } - } - } - default: // E.g., *pb.T - di := getDiscardInfo(tf) - dfi.discard = func(src pointer) { - sp := src.getPointer() - if !sp.isNil() { - di.discard(sp) - } - } - } - case reflect.Map: - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%v.%s cannot be a pointer to a map or a slice of map values", t, f.Name)) - default: // E.g., map[K]V - if tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T) - dfi.discard = func(src pointer) { - sm := src.asPointerTo(tf).Elem() - if sm.Len() == 0 { - return - } - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - DiscardUnknown(val.Interface().(Message)) - } - } - } else { - dfi.discard = func(pointer) {} // Noop - } - } - case reflect.Interface: - // Must be oneof field. - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%v.%s cannot be a pointer to a interface or a slice of interface values", t, f.Name)) - default: // E.g., interface{} - // TODO: Make this faster? - dfi.discard = func(src pointer) { - su := src.asPointerTo(tf).Elem() - if !su.IsNil() { - sv := su.Elem().Elem().Field(0) - if sv.Kind() == reflect.Ptr && sv.IsNil() { - return - } - switch sv.Type().Kind() { - case reflect.Ptr: // Proto struct (e.g., *T) - DiscardUnknown(sv.Interface().(Message)) - } - } - } - } - default: - continue - } - di.fields = append(di.fields, dfi) - } - - di.unrecognized = invalidField - if f, ok := t.FieldByName("XXX_unrecognized"); ok { - if f.Type != reflect.TypeOf([]byte{}) { - panic("expected XXX_unrecognized to be of type []byte") - } - di.unrecognized = toField(&f) - } - - atomic.StoreInt32(&di.initialized, 1) -} - -func discardLegacy(m Message) { - v := reflect.ValueOf(m) - if v.Kind() != reflect.Ptr || v.IsNil() { - return - } - v = v.Elem() - if v.Kind() != reflect.Struct { - return - } - t := v.Type() - - for i := 0; i < v.NumField(); i++ { - f := t.Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - vf := v.Field(i) - tf := f.Type - - // Unwrap tf to get its most basic type. - var isPointer, isSlice bool - if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { - isSlice = true - tf = tf.Elem() - } - if tf.Kind() == reflect.Ptr { - isPointer = true - tf = tf.Elem() - } - if isPointer && isSlice && tf.Kind() != reflect.Struct { - panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name)) - } - - switch tf.Kind() { - case reflect.Struct: - switch { - case !isPointer: - panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name)) - case isSlice: // E.g., []*pb.T - for j := 0; j < vf.Len(); j++ { - discardLegacy(vf.Index(j).Interface().(Message)) - } - default: // E.g., *pb.T - discardLegacy(vf.Interface().(Message)) - } - case reflect.Map: - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name)) - default: // E.g., map[K]V - tv := vf.Type().Elem() - if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T) - for _, key := range vf.MapKeys() { - val := vf.MapIndex(key) - discardLegacy(val.Interface().(Message)) - } - } - } - case reflect.Interface: - // Must be oneof field. - switch { - case isPointer || isSlice: - panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name)) - default: // E.g., test_proto.isCommunique_Union interface - if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" { - vf = vf.Elem() // E.g., *test_proto.Communique_Msg - if !vf.IsNil() { - vf = vf.Elem() // E.g., test_proto.Communique_Msg - vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value - if vf.Kind() == reflect.Ptr { - discardLegacy(vf.Interface().(Message)) - } - } - } - } - } - } - - if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() { - if vf.Type() != reflect.TypeOf([]byte{}) { - panic("expected XXX_unrecognized to be of type []byte") - } - vf.Set(reflect.ValueOf([]byte(nil))) - } - - // For proto2 messages, only discard unknown fields in message extensions - // that have been accessed via GetExtension. - if em, err := extendable(m); err == nil { - // Ignore lock since discardLegacy is not concurrency safe. - emm, _ := em.extensionsRead() - for _, mx := range emm { - if m, ok := mx.value.(Message); ok { - discardLegacy(m) - } - } - } -} diff --git a/vendor/github.com/golang/protobuf/proto/encode.go b/vendor/github.com/golang/protobuf/proto/encode.go deleted file mode 100644 index 3abfed2cf..000000000 --- a/vendor/github.com/golang/protobuf/proto/encode.go +++ /dev/null @@ -1,203 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -package proto - -/* - * Routines for encoding data into the wire format for protocol buffers. - */ - -import ( - "errors" - "reflect" -) - -var ( - // errRepeatedHasNil is the error returned if Marshal is called with - // a struct with a repeated field containing a nil element. - errRepeatedHasNil = errors.New("proto: repeated field has nil element") - - // errOneofHasNil is the error returned if Marshal is called with - // a struct with a oneof field containing a nil element. - errOneofHasNil = errors.New("proto: oneof field has nil value") - - // ErrNil is the error returned if Marshal is called with nil. - ErrNil = errors.New("proto: Marshal called with nil") - - // ErrTooLarge is the error returned if Marshal is called with a - // message that encodes to >2GB. - ErrTooLarge = errors.New("proto: message encodes to over 2 GB") -) - -// The fundamental encoders that put bytes on the wire. -// Those that take integer types all accept uint64 and are -// therefore of type valueEncoder. - -const maxVarintBytes = 10 // maximum length of a varint - -// EncodeVarint returns the varint encoding of x. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -// Not used by the package itself, but helpful to clients -// wishing to use the same encoding. -func EncodeVarint(x uint64) []byte { - var buf [maxVarintBytes]byte - var n int - for n = 0; x > 127; n++ { - buf[n] = 0x80 | uint8(x&0x7F) - x >>= 7 - } - buf[n] = uint8(x) - n++ - return buf[0:n] -} - -// EncodeVarint writes a varint-encoded integer to the Buffer. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -func (p *Buffer) EncodeVarint(x uint64) error { - for x >= 1<<7 { - p.buf = append(p.buf, uint8(x&0x7f|0x80)) - x >>= 7 - } - p.buf = append(p.buf, uint8(x)) - return nil -} - -// SizeVarint returns the varint encoding size of an integer. -func SizeVarint(x uint64) int { - switch { - case x < 1<<7: - return 1 - case x < 1<<14: - return 2 - case x < 1<<21: - return 3 - case x < 1<<28: - return 4 - case x < 1<<35: - return 5 - case x < 1<<42: - return 6 - case x < 1<<49: - return 7 - case x < 1<<56: - return 8 - case x < 1<<63: - return 9 - } - return 10 -} - -// EncodeFixed64 writes a 64-bit integer to the Buffer. -// This is the format for the -// fixed64, sfixed64, and double protocol buffer types. -func (p *Buffer) EncodeFixed64(x uint64) error { - p.buf = append(p.buf, - uint8(x), - uint8(x>>8), - uint8(x>>16), - uint8(x>>24), - uint8(x>>32), - uint8(x>>40), - uint8(x>>48), - uint8(x>>56)) - return nil -} - -// EncodeFixed32 writes a 32-bit integer to the Buffer. -// This is the format for the -// fixed32, sfixed32, and float protocol buffer types. -func (p *Buffer) EncodeFixed32(x uint64) error { - p.buf = append(p.buf, - uint8(x), - uint8(x>>8), - uint8(x>>16), - uint8(x>>24)) - return nil -} - -// EncodeZigzag64 writes a zigzag-encoded 64-bit integer -// to the Buffer. -// This is the format used for the sint64 protocol buffer type. -func (p *Buffer) EncodeZigzag64(x uint64) error { - // use signed number to get arithmetic right shift. - return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} - -// EncodeZigzag32 writes a zigzag-encoded 32-bit integer -// to the Buffer. -// This is the format used for the sint32 protocol buffer type. -func (p *Buffer) EncodeZigzag32(x uint64) error { - // use signed number to get arithmetic right shift. - return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31)))) -} - -// EncodeRawBytes writes a count-delimited byte buffer to the Buffer. -// This is the format used for the bytes protocol buffer -// type and for embedded messages. -func (p *Buffer) EncodeRawBytes(b []byte) error { - p.EncodeVarint(uint64(len(b))) - p.buf = append(p.buf, b...) - return nil -} - -// EncodeStringBytes writes an encoded string to the Buffer. -// This is the format used for the proto2 string type. -func (p *Buffer) EncodeStringBytes(s string) error { - p.EncodeVarint(uint64(len(s))) - p.buf = append(p.buf, s...) - return nil -} - -// Marshaler is the interface representing objects that can marshal themselves. -type Marshaler interface { - Marshal() ([]byte, error) -} - -// EncodeMessage writes the protocol buffer to the Buffer, -// prefixed by a varint-encoded length. -func (p *Buffer) EncodeMessage(pb Message) error { - siz := Size(pb) - p.EncodeVarint(uint64(siz)) - return p.Marshal(pb) -} - -// All protocol buffer fields are nillable, but be careful. -func isNil(v reflect.Value) bool { - switch v.Kind() { - case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: - return v.IsNil() - } - return false -} diff --git a/vendor/github.com/golang/protobuf/proto/equal.go b/vendor/github.com/golang/protobuf/proto/equal.go deleted file mode 100644 index d4db5a1c1..000000000 --- a/vendor/github.com/golang/protobuf/proto/equal.go +++ /dev/null @@ -1,300 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2011 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -// Protocol buffer comparison. - -package proto - -import ( - "bytes" - "log" - "reflect" - "strings" -) - -/* -Equal returns true iff protocol buffers a and b are equal. -The arguments must both be pointers to protocol buffer structs. - -Equality is defined in this way: - - Two messages are equal iff they are the same type, - corresponding fields are equal, unknown field sets - are equal, and extensions sets are equal. - - Two set scalar fields are equal iff their values are equal. - If the fields are of a floating-point type, remember that - NaN != x for all x, including NaN. If the message is defined - in a proto3 .proto file, fields are not "set"; specifically, - zero length proto3 "bytes" fields are equal (nil == {}). - - Two repeated fields are equal iff their lengths are the same, - and their corresponding elements are equal. Note a "bytes" field, - although represented by []byte, is not a repeated field and the - rule for the scalar fields described above applies. - - Two unset fields are equal. - - Two unknown field sets are equal if their current - encoded state is equal. - - Two extension sets are equal iff they have corresponding - elements that are pairwise equal. - - Two map fields are equal iff their lengths are the same, - and they contain the same set of elements. Zero-length map - fields are equal. - - Every other combination of things are not equal. - -The return value is undefined if a and b are not protocol buffers. -*/ -func Equal(a, b Message) bool { - if a == nil || b == nil { - return a == b - } - v1, v2 := reflect.ValueOf(a), reflect.ValueOf(b) - if v1.Type() != v2.Type() { - return false - } - if v1.Kind() == reflect.Ptr { - if v1.IsNil() { - return v2.IsNil() - } - if v2.IsNil() { - return false - } - v1, v2 = v1.Elem(), v2.Elem() - } - if v1.Kind() != reflect.Struct { - return false - } - return equalStruct(v1, v2) -} - -// v1 and v2 are known to have the same type. -func equalStruct(v1, v2 reflect.Value) bool { - sprop := GetProperties(v1.Type()) - for i := 0; i < v1.NumField(); i++ { - f := v1.Type().Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - f1, f2 := v1.Field(i), v2.Field(i) - if f.Type.Kind() == reflect.Ptr { - if n1, n2 := f1.IsNil(), f2.IsNil(); n1 && n2 { - // both unset - continue - } else if n1 != n2 { - // set/unset mismatch - return false - } - f1, f2 = f1.Elem(), f2.Elem() - } - if !equalAny(f1, f2, sprop.Prop[i]) { - return false - } - } - - if em1 := v1.FieldByName("XXX_InternalExtensions"); em1.IsValid() { - em2 := v2.FieldByName("XXX_InternalExtensions") - if !equalExtensions(v1.Type(), em1.Interface().(XXX_InternalExtensions), em2.Interface().(XXX_InternalExtensions)) { - return false - } - } - - if em1 := v1.FieldByName("XXX_extensions"); em1.IsValid() { - em2 := v2.FieldByName("XXX_extensions") - if !equalExtMap(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) { - return false - } - } - - uf := v1.FieldByName("XXX_unrecognized") - if !uf.IsValid() { - return true - } - - u1 := uf.Bytes() - u2 := v2.FieldByName("XXX_unrecognized").Bytes() - return bytes.Equal(u1, u2) -} - -// v1 and v2 are known to have the same type. -// prop may be nil. -func equalAny(v1, v2 reflect.Value, prop *Properties) bool { - if v1.Type() == protoMessageType { - m1, _ := v1.Interface().(Message) - m2, _ := v2.Interface().(Message) - return Equal(m1, m2) - } - switch v1.Kind() { - case reflect.Bool: - return v1.Bool() == v2.Bool() - case reflect.Float32, reflect.Float64: - return v1.Float() == v2.Float() - case reflect.Int32, reflect.Int64: - return v1.Int() == v2.Int() - case reflect.Interface: - // Probably a oneof field; compare the inner values. - n1, n2 := v1.IsNil(), v2.IsNil() - if n1 || n2 { - return n1 == n2 - } - e1, e2 := v1.Elem(), v2.Elem() - if e1.Type() != e2.Type() { - return false - } - return equalAny(e1, e2, nil) - case reflect.Map: - if v1.Len() != v2.Len() { - return false - } - for _, key := range v1.MapKeys() { - val2 := v2.MapIndex(key) - if !val2.IsValid() { - // This key was not found in the second map. - return false - } - if !equalAny(v1.MapIndex(key), val2, nil) { - return false - } - } - return true - case reflect.Ptr: - // Maps may have nil values in them, so check for nil. - if v1.IsNil() && v2.IsNil() { - return true - } - if v1.IsNil() != v2.IsNil() { - return false - } - return equalAny(v1.Elem(), v2.Elem(), prop) - case reflect.Slice: - if v1.Type().Elem().Kind() == reflect.Uint8 { - // short circuit: []byte - - // Edge case: if this is in a proto3 message, a zero length - // bytes field is considered the zero value. - if prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 { - return true - } - if v1.IsNil() != v2.IsNil() { - return false - } - return bytes.Equal(v1.Interface().([]byte), v2.Interface().([]byte)) - } - - if v1.Len() != v2.Len() { - return false - } - for i := 0; i < v1.Len(); i++ { - if !equalAny(v1.Index(i), v2.Index(i), prop) { - return false - } - } - return true - case reflect.String: - return v1.Interface().(string) == v2.Interface().(string) - case reflect.Struct: - return equalStruct(v1, v2) - case reflect.Uint32, reflect.Uint64: - return v1.Uint() == v2.Uint() - } - - // unknown type, so not a protocol buffer - log.Printf("proto: don't know how to compare %v", v1) - return false -} - -// base is the struct type that the extensions are based on. -// x1 and x2 are InternalExtensions. -func equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) bool { - em1, _ := x1.extensionsRead() - em2, _ := x2.extensionsRead() - return equalExtMap(base, em1, em2) -} - -func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool { - if len(em1) != len(em2) { - return false - } - - for extNum, e1 := range em1 { - e2, ok := em2[extNum] - if !ok { - return false - } - - m1, m2 := e1.value, e2.value - - if m1 == nil && m2 == nil { - // Both have only encoded form. - if bytes.Equal(e1.enc, e2.enc) { - continue - } - // The bytes are different, but the extensions might still be - // equal. We need to decode them to compare. - } - - if m1 != nil && m2 != nil { - // Both are unencoded. - if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { - return false - } - continue - } - - // At least one is encoded. To do a semantically correct comparison - // we need to unmarshal them first. - var desc *ExtensionDesc - if m := extensionMaps[base]; m != nil { - desc = m[extNum] - } - if desc == nil { - // If both have only encoded form and the bytes are the same, - // it is handled above. We get here when the bytes are different. - // We don't know how to decode it, so just compare them as byte - // slices. - log.Printf("proto: don't know how to compare extension %d of %v", extNum, base) - return false - } - var err error - if m1 == nil { - m1, err = decodeExtension(e1.enc, desc) - } - if m2 == nil && err == nil { - m2, err = decodeExtension(e2.enc, desc) - } - if err != nil { - // The encoded form is invalid. - log.Printf("proto: badly encoded extension %d of %v: %v", extNum, base, err) - return false - } - if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { - return false - } - } - - return true -} diff --git a/vendor/github.com/golang/protobuf/proto/extensions.go b/vendor/github.com/golang/protobuf/proto/extensions.go deleted file mode 100644 index dacdd22d2..000000000 --- a/vendor/github.com/golang/protobuf/proto/extensions.go +++ /dev/null @@ -1,543 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -package proto - -/* - * Types and routines for supporting protocol buffer extensions. - */ - -import ( - "errors" - "fmt" - "io" - "reflect" - "strconv" - "sync" -) - -// ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message. -var ErrMissingExtension = errors.New("proto: missing extension") - -// ExtensionRange represents a range of message extensions for a protocol buffer. -// Used in code generated by the protocol compiler. -type ExtensionRange struct { - Start, End int32 // both inclusive -} - -// extendableProto is an interface implemented by any protocol buffer generated by the current -// proto compiler that may be extended. -type extendableProto interface { - Message - ExtensionRangeArray() []ExtensionRange - extensionsWrite() map[int32]Extension - extensionsRead() (map[int32]Extension, sync.Locker) -} - -// extendableProtoV1 is an interface implemented by a protocol buffer generated by the previous -// version of the proto compiler that may be extended. -type extendableProtoV1 interface { - Message - ExtensionRangeArray() []ExtensionRange - ExtensionMap() map[int32]Extension -} - -// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto. -type extensionAdapter struct { - extendableProtoV1 -} - -func (e extensionAdapter) extensionsWrite() map[int32]Extension { - return e.ExtensionMap() -} - -func (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) { - return e.ExtensionMap(), notLocker{} -} - -// notLocker is a sync.Locker whose Lock and Unlock methods are nops. -type notLocker struct{} - -func (n notLocker) Lock() {} -func (n notLocker) Unlock() {} - -// extendable returns the extendableProto interface for the given generated proto message. -// If the proto message has the old extension format, it returns a wrapper that implements -// the extendableProto interface. -func extendable(p interface{}) (extendableProto, error) { - switch p := p.(type) { - case extendableProto: - if isNilPtr(p) { - return nil, fmt.Errorf("proto: nil %T is not extendable", p) - } - return p, nil - case extendableProtoV1: - if isNilPtr(p) { - return nil, fmt.Errorf("proto: nil %T is not extendable", p) - } - return extensionAdapter{p}, nil - } - // Don't allocate a specific error containing %T: - // this is the hot path for Clone and MarshalText. - return nil, errNotExtendable -} - -var errNotExtendable = errors.New("proto: not an extendable proto.Message") - -func isNilPtr(x interface{}) bool { - v := reflect.ValueOf(x) - return v.Kind() == reflect.Ptr && v.IsNil() -} - -// XXX_InternalExtensions is an internal representation of proto extensions. -// -// Each generated message struct type embeds an anonymous XXX_InternalExtensions field, -// thus gaining the unexported 'extensions' method, which can be called only from the proto package. -// -// The methods of XXX_InternalExtensions are not concurrency safe in general, -// but calls to logically read-only methods such as has and get may be executed concurrently. -type XXX_InternalExtensions struct { - // The struct must be indirect so that if a user inadvertently copies a - // generated message and its embedded XXX_InternalExtensions, they - // avoid the mayhem of a copied mutex. - // - // The mutex serializes all logically read-only operations to p.extensionMap. - // It is up to the client to ensure that write operations to p.extensionMap are - // mutually exclusive with other accesses. - p *struct { - mu sync.Mutex - extensionMap map[int32]Extension - } -} - -// extensionsWrite returns the extension map, creating it on first use. -func (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension { - if e.p == nil { - e.p = new(struct { - mu sync.Mutex - extensionMap map[int32]Extension - }) - e.p.extensionMap = make(map[int32]Extension) - } - return e.p.extensionMap -} - -// extensionsRead returns the extensions map for read-only use. It may be nil. -// The caller must hold the returned mutex's lock when accessing Elements within the map. -func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) { - if e.p == nil { - return nil, nil - } - return e.p.extensionMap, &e.p.mu -} - -// ExtensionDesc represents an extension specification. -// Used in generated code from the protocol compiler. -type ExtensionDesc struct { - ExtendedType Message // nil pointer to the type that is being extended - ExtensionType interface{} // nil pointer to the extension type - Field int32 // field number - Name string // fully-qualified name of extension, for text formatting - Tag string // protobuf tag style - Filename string // name of the file in which the extension is defined -} - -func (ed *ExtensionDesc) repeated() bool { - t := reflect.TypeOf(ed.ExtensionType) - return t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 -} - -// Extension represents an extension in a message. -type Extension struct { - // When an extension is stored in a message using SetExtension - // only desc and value are set. When the message is marshaled - // enc will be set to the encoded form of the message. - // - // When a message is unmarshaled and contains extensions, each - // extension will have only enc set. When such an extension is - // accessed using GetExtension (or GetExtensions) desc and value - // will be set. - desc *ExtensionDesc - value interface{} - enc []byte -} - -// SetRawExtension is for testing only. -func SetRawExtension(base Message, id int32, b []byte) { - epb, err := extendable(base) - if err != nil { - return - } - extmap := epb.extensionsWrite() - extmap[id] = Extension{enc: b} -} - -// isExtensionField returns true iff the given field number is in an extension range. -func isExtensionField(pb extendableProto, field int32) bool { - for _, er := range pb.ExtensionRangeArray() { - if er.Start <= field && field <= er.End { - return true - } - } - return false -} - -// checkExtensionTypes checks that the given extension is valid for pb. -func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error { - var pbi interface{} = pb - // Check the extended type. - if ea, ok := pbi.(extensionAdapter); ok { - pbi = ea.extendableProtoV1 - } - if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b { - return fmt.Errorf("proto: bad extended type; %v does not extend %v", b, a) - } - // Check the range. - if !isExtensionField(pb, extension.Field) { - return errors.New("proto: bad extension number; not in declared ranges") - } - return nil -} - -// extPropKey is sufficient to uniquely identify an extension. -type extPropKey struct { - base reflect.Type - field int32 -} - -var extProp = struct { - sync.RWMutex - m map[extPropKey]*Properties -}{ - m: make(map[extPropKey]*Properties), -} - -func extensionProperties(ed *ExtensionDesc) *Properties { - key := extPropKey{base: reflect.TypeOf(ed.ExtendedType), field: ed.Field} - - extProp.RLock() - if prop, ok := extProp.m[key]; ok { - extProp.RUnlock() - return prop - } - extProp.RUnlock() - - extProp.Lock() - defer extProp.Unlock() - // Check again. - if prop, ok := extProp.m[key]; ok { - return prop - } - - prop := new(Properties) - prop.Init(reflect.TypeOf(ed.ExtensionType), "unknown_name", ed.Tag, nil) - extProp.m[key] = prop - return prop -} - -// HasExtension returns whether the given extension is present in pb. -func HasExtension(pb Message, extension *ExtensionDesc) bool { - // TODO: Check types, field numbers, etc.? - epb, err := extendable(pb) - if err != nil { - return false - } - extmap, mu := epb.extensionsRead() - if extmap == nil { - return false - } - mu.Lock() - _, ok := extmap[extension.Field] - mu.Unlock() - return ok -} - -// ClearExtension removes the given extension from pb. -func ClearExtension(pb Message, extension *ExtensionDesc) { - epb, err := extendable(pb) - if err != nil { - return - } - // TODO: Check types, field numbers, etc.? - extmap := epb.extensionsWrite() - delete(extmap, extension.Field) -} - -// GetExtension retrieves a proto2 extended field from pb. -// -// If the descriptor is type complete (i.e., ExtensionDesc.ExtensionType is non-nil), -// then GetExtension parses the encoded field and returns a Go value of the specified type. -// If the field is not present, then the default value is returned (if one is specified), -// otherwise ErrMissingExtension is reported. -// -// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil), -// then GetExtension returns the raw encoded bytes of the field extension. -func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) { - epb, err := extendable(pb) - if err != nil { - return nil, err - } - - if extension.ExtendedType != nil { - // can only check type if this is a complete descriptor - if err := checkExtensionTypes(epb, extension); err != nil { - return nil, err - } - } - - emap, mu := epb.extensionsRead() - if emap == nil { - return defaultExtensionValue(extension) - } - mu.Lock() - defer mu.Unlock() - e, ok := emap[extension.Field] - if !ok { - // defaultExtensionValue returns the default value or - // ErrMissingExtension if there is no default. - return defaultExtensionValue(extension) - } - - if e.value != nil { - // Already decoded. Check the descriptor, though. - if e.desc != extension { - // This shouldn't happen. If it does, it means that - // GetExtension was called twice with two different - // descriptors with the same field number. - return nil, errors.New("proto: descriptor conflict") - } - return e.value, nil - } - - if extension.ExtensionType == nil { - // incomplete descriptor - return e.enc, nil - } - - v, err := decodeExtension(e.enc, extension) - if err != nil { - return nil, err - } - - // Remember the decoded version and drop the encoded version. - // That way it is safe to mutate what we return. - e.value = v - e.desc = extension - e.enc = nil - emap[extension.Field] = e - return e.value, nil -} - -// defaultExtensionValue returns the default value for extension. -// If no default for an extension is defined ErrMissingExtension is returned. -func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) { - if extension.ExtensionType == nil { - // incomplete descriptor, so no default - return nil, ErrMissingExtension - } - - t := reflect.TypeOf(extension.ExtensionType) - props := extensionProperties(extension) - - sf, _, err := fieldDefault(t, props) - if err != nil { - return nil, err - } - - if sf == nil || sf.value == nil { - // There is no default value. - return nil, ErrMissingExtension - } - - if t.Kind() != reflect.Ptr { - // We do not need to return a Ptr, we can directly return sf.value. - return sf.value, nil - } - - // We need to return an interface{} that is a pointer to sf.value. - value := reflect.New(t).Elem() - value.Set(reflect.New(value.Type().Elem())) - if sf.kind == reflect.Int32 { - // We may have an int32 or an enum, but the underlying data is int32. - // Since we can't set an int32 into a non int32 reflect.value directly - // set it as a int32. - value.Elem().SetInt(int64(sf.value.(int32))) - } else { - value.Elem().Set(reflect.ValueOf(sf.value)) - } - return value.Interface(), nil -} - -// decodeExtension decodes an extension encoded in b. -func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { - t := reflect.TypeOf(extension.ExtensionType) - unmarshal := typeUnmarshaler(t, extension.Tag) - - // t is a pointer to a struct, pointer to basic type or a slice. - // Allocate space to store the pointer/slice. - value := reflect.New(t).Elem() - - var err error - for { - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - wire := int(x) & 7 - - b, err = unmarshal(b, valToPointer(value.Addr()), wire) - if err != nil { - return nil, err - } - - if len(b) == 0 { - break - } - } - return value.Interface(), nil -} - -// GetExtensions returns a slice of the extensions present in pb that are also listed in es. -// The returned slice has the same length as es; missing extensions will appear as nil elements. -func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) { - epb, err := extendable(pb) - if err != nil { - return nil, err - } - extensions = make([]interface{}, len(es)) - for i, e := range es { - extensions[i], err = GetExtension(epb, e) - if err == ErrMissingExtension { - err = nil - } - if err != nil { - return - } - } - return -} - -// ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order. -// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing -// just the Field field, which defines the extension's field number. -func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) { - epb, err := extendable(pb) - if err != nil { - return nil, err - } - registeredExtensions := RegisteredExtensions(pb) - - emap, mu := epb.extensionsRead() - if emap == nil { - return nil, nil - } - mu.Lock() - defer mu.Unlock() - extensions := make([]*ExtensionDesc, 0, len(emap)) - for extid, e := range emap { - desc := e.desc - if desc == nil { - desc = registeredExtensions[extid] - if desc == nil { - desc = &ExtensionDesc{Field: extid} - } - } - - extensions = append(extensions, desc) - } - return extensions, nil -} - -// SetExtension sets the specified extension of pb to the specified value. -func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error { - epb, err := extendable(pb) - if err != nil { - return err - } - if err := checkExtensionTypes(epb, extension); err != nil { - return err - } - typ := reflect.TypeOf(extension.ExtensionType) - if typ != reflect.TypeOf(value) { - return fmt.Errorf("proto: bad extension value type. got: %T, want: %T", value, extension.ExtensionType) - } - // nil extension values need to be caught early, because the - // encoder can't distinguish an ErrNil due to a nil extension - // from an ErrNil due to a missing field. Extensions are - // always optional, so the encoder would just swallow the error - // and drop all the extensions from the encoded message. - if reflect.ValueOf(value).IsNil() { - return fmt.Errorf("proto: SetExtension called with nil value of type %T", value) - } - - extmap := epb.extensionsWrite() - extmap[extension.Field] = Extension{desc: extension, value: value} - return nil -} - -// ClearAllExtensions clears all extensions from pb. -func ClearAllExtensions(pb Message) { - epb, err := extendable(pb) - if err != nil { - return - } - m := epb.extensionsWrite() - for k := range m { - delete(m, k) - } -} - -// A global registry of extensions. -// The generated code will register the generated descriptors by calling RegisterExtension. - -var extensionMaps = make(map[reflect.Type]map[int32]*ExtensionDesc) - -// RegisterExtension is called from the generated code. -func RegisterExtension(desc *ExtensionDesc) { - st := reflect.TypeOf(desc.ExtendedType).Elem() - m := extensionMaps[st] - if m == nil { - m = make(map[int32]*ExtensionDesc) - extensionMaps[st] = m - } - if _, ok := m[desc.Field]; ok { - panic("proto: duplicate extension registered: " + st.String() + " " + strconv.Itoa(int(desc.Field))) - } - m[desc.Field] = desc -} - -// RegisteredExtensions returns a map of the registered extensions of a -// protocol buffer struct, indexed by the extension number. -// The argument pb should be a nil pointer to the struct type. -func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc { - return extensionMaps[reflect.TypeOf(pb).Elem()] -} diff --git a/vendor/github.com/golang/protobuf/proto/lib.go b/vendor/github.com/golang/protobuf/proto/lib.go deleted file mode 100644 index c076dbdb9..000000000 --- a/vendor/github.com/golang/protobuf/proto/lib.go +++ /dev/null @@ -1,959 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -/* -Package proto converts data structures to and from the wire format of -protocol buffers. It works in concert with the Go source code generated -for .proto files by the protocol compiler. - -A summary of the properties of the protocol buffer interface -for a protocol buffer variable v: - - - Names are turned from camel_case to CamelCase for export. - - There are no methods on v to set fields; just treat - them as structure fields. - - There are getters that return a field's value if set, - and return the field's default value if unset. - The getters work even if the receiver is a nil message. - - The zero value for a struct is its correct initialization state. - All desired fields must be set before marshaling. - - A Reset() method will restore a protobuf struct to its zero state. - - Non-repeated fields are pointers to the values; nil means unset. - That is, optional or required field int32 f becomes F *int32. - - Repeated fields are slices. - - Helper functions are available to aid the setting of fields. - msg.Foo = proto.String("hello") // set field - - Constants are defined to hold the default values of all fields that - have them. They have the form Default_StructName_FieldName. - Because the getter methods handle defaulted values, - direct use of these constants should be rare. - - Enums are given type names and maps from names to values. - Enum values are prefixed by the enclosing message's name, or by the - enum's type name if it is a top-level enum. Enum types have a String - method, and a Enum method to assist in message construction. - - Nested messages, groups and enums have type names prefixed with the name of - the surrounding message type. - - Extensions are given descriptor names that start with E_, - followed by an underscore-delimited list of the nested messages - that contain it (if any) followed by the CamelCased name of the - extension field itself. HasExtension, ClearExtension, GetExtension - and SetExtension are functions for manipulating extensions. - - Oneof field sets are given a single field in their message, - with distinguished wrapper types for each possible field value. - - Marshal and Unmarshal are functions to encode and decode the wire format. - -When the .proto file specifies `syntax="proto3"`, there are some differences: - - - Non-repeated fields of non-message type are values instead of pointers. - - Enum types do not get an Enum method. - -The simplest way to describe this is to see an example. -Given file test.proto, containing - - package example; - - enum FOO { X = 17; } - - message Test { - required string label = 1; - optional int32 type = 2 [default=77]; - repeated int64 reps = 3; - optional group OptionalGroup = 4 { - required string RequiredField = 5; - } - oneof union { - int32 number = 6; - string name = 7; - } - } - -The resulting file, test.pb.go, is: - - package example - - import proto "github.com/golang/protobuf/proto" - import math "math" - - type FOO int32 - const ( - FOO_X FOO = 17 - ) - var FOO_name = map[int32]string{ - 17: "X", - } - var FOO_value = map[string]int32{ - "X": 17, - } - - func (x FOO) Enum() *FOO { - p := new(FOO) - *p = x - return p - } - func (x FOO) String() string { - return proto.EnumName(FOO_name, int32(x)) - } - func (x *FOO) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(FOO_value, data) - if err != nil { - return err - } - *x = FOO(value) - return nil - } - - type Test struct { - Label *string `protobuf:"bytes,1,req,name=label" json:"label,omitempty"` - Type *int32 `protobuf:"varint,2,opt,name=type,def=77" json:"type,omitempty"` - Reps []int64 `protobuf:"varint,3,rep,name=reps" json:"reps,omitempty"` - Optionalgroup *Test_OptionalGroup `protobuf:"group,4,opt,name=OptionalGroup" json:"optionalgroup,omitempty"` - // Types that are valid to be assigned to Union: - // *Test_Number - // *Test_Name - Union isTest_Union `protobuf_oneof:"union"` - XXX_unrecognized []byte `json:"-"` - } - func (m *Test) Reset() { *m = Test{} } - func (m *Test) String() string { return proto.CompactTextString(m) } - func (*Test) ProtoMessage() {} - - type isTest_Union interface { - isTest_Union() - } - - type Test_Number struct { - Number int32 `protobuf:"varint,6,opt,name=number"` - } - type Test_Name struct { - Name string `protobuf:"bytes,7,opt,name=name"` - } - - func (*Test_Number) isTest_Union() {} - func (*Test_Name) isTest_Union() {} - - func (m *Test) GetUnion() isTest_Union { - if m != nil { - return m.Union - } - return nil - } - const Default_Test_Type int32 = 77 - - func (m *Test) GetLabel() string { - if m != nil && m.Label != nil { - return *m.Label - } - return "" - } - - func (m *Test) GetType() int32 { - if m != nil && m.Type != nil { - return *m.Type - } - return Default_Test_Type - } - - func (m *Test) GetOptionalgroup() *Test_OptionalGroup { - if m != nil { - return m.Optionalgroup - } - return nil - } - - type Test_OptionalGroup struct { - RequiredField *string `protobuf:"bytes,5,req" json:"RequiredField,omitempty"` - } - func (m *Test_OptionalGroup) Reset() { *m = Test_OptionalGroup{} } - func (m *Test_OptionalGroup) String() string { return proto.CompactTextString(m) } - - func (m *Test_OptionalGroup) GetRequiredField() string { - if m != nil && m.RequiredField != nil { - return *m.RequiredField - } - return "" - } - - func (m *Test) GetNumber() int32 { - if x, ok := m.GetUnion().(*Test_Number); ok { - return x.Number - } - return 0 - } - - func (m *Test) GetName() string { - if x, ok := m.GetUnion().(*Test_Name); ok { - return x.Name - } - return "" - } - - func init() { - proto.RegisterEnum("example.FOO", FOO_name, FOO_value) - } - -To create and play with a Test object: - - package main - - import ( - "log" - - "github.com/golang/protobuf/proto" - pb "./example.pb" - ) - - func main() { - test := &pb.Test{ - Label: proto.String("hello"), - Type: proto.Int32(17), - Reps: []int64{1, 2, 3}, - Optionalgroup: &pb.Test_OptionalGroup{ - RequiredField: proto.String("good bye"), - }, - Union: &pb.Test_Name{"fred"}, - } - data, err := proto.Marshal(test) - if err != nil { - log.Fatal("marshaling error: ", err) - } - newTest := &pb.Test{} - err = proto.Unmarshal(data, newTest) - if err != nil { - log.Fatal("unmarshaling error: ", err) - } - // Now test and newTest contain the same data. - if test.GetLabel() != newTest.GetLabel() { - log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel()) - } - // Use a type switch to determine which oneof was set. - switch u := test.Union.(type) { - case *pb.Test_Number: // u.Number contains the number. - case *pb.Test_Name: // u.Name contains the string. - } - // etc. - } -*/ -package proto - -import ( - "encoding/json" - "fmt" - "log" - "reflect" - "sort" - "strconv" - "sync" -) - -// RequiredNotSetError is an error type returned by either Marshal or Unmarshal. -// Marshal reports this when a required field is not initialized. -// Unmarshal reports this when a required field is missing from the wire data. -type RequiredNotSetError struct{ field string } - -func (e *RequiredNotSetError) Error() string { - if e.field == "" { - return fmt.Sprintf("proto: required field not set") - } - return fmt.Sprintf("proto: required field %q not set", e.field) -} -func (e *RequiredNotSetError) RequiredNotSet() bool { - return true -} - -type invalidUTF8Error struct{ field string } - -func (e *invalidUTF8Error) Error() string { - if e.field == "" { - return "proto: invalid UTF-8 detected" - } - return fmt.Sprintf("proto: field %q contains invalid UTF-8", e.field) -} -func (e *invalidUTF8Error) InvalidUTF8() bool { - return true -} - -// errInvalidUTF8 is a sentinel error to identify fields with invalid UTF-8. -// This error should not be exposed to the external API as such errors should -// be recreated with the field information. -var errInvalidUTF8 = &invalidUTF8Error{} - -// isNonFatal reports whether the error is either a RequiredNotSet error -// or a InvalidUTF8 error. -func isNonFatal(err error) bool { - if re, ok := err.(interface{ RequiredNotSet() bool }); ok && re.RequiredNotSet() { - return true - } - if re, ok := err.(interface{ InvalidUTF8() bool }); ok && re.InvalidUTF8() { - return true - } - return false -} - -type nonFatal struct{ E error } - -// Merge merges err into nf and reports whether it was successful. -// Otherwise it returns false for any fatal non-nil errors. -func (nf *nonFatal) Merge(err error) (ok bool) { - if err == nil { - return true // not an error - } - if !isNonFatal(err) { - return false // fatal error - } - if nf.E == nil { - nf.E = err // store first instance of non-fatal error - } - return true -} - -// Message is implemented by generated protocol buffer messages. -type Message interface { - Reset() - String() string - ProtoMessage() -} - -// A Buffer is a buffer manager for marshaling and unmarshaling -// protocol buffers. It may be reused between invocations to -// reduce memory usage. It is not necessary to use a Buffer; -// the global functions Marshal and Unmarshal create a -// temporary Buffer and are fine for most applications. -type Buffer struct { - buf []byte // encode/decode byte stream - index int // read point - - deterministic bool -} - -// NewBuffer allocates a new Buffer and initializes its internal data to -// the contents of the argument slice. -func NewBuffer(e []byte) *Buffer { - return &Buffer{buf: e} -} - -// Reset resets the Buffer, ready for marshaling a new protocol buffer. -func (p *Buffer) Reset() { - p.buf = p.buf[0:0] // for reading/writing - p.index = 0 // for reading -} - -// SetBuf replaces the internal buffer with the slice, -// ready for unmarshaling the contents of the slice. -func (p *Buffer) SetBuf(s []byte) { - p.buf = s - p.index = 0 -} - -// Bytes returns the contents of the Buffer. -func (p *Buffer) Bytes() []byte { return p.buf } - -// SetDeterministic sets whether to use deterministic serialization. -// -// Deterministic serialization guarantees that for a given binary, equal -// messages will always be serialized to the same bytes. This implies: -// -// - Repeated serialization of a message will return the same bytes. -// - Different processes of the same binary (which may be executing on -// different machines) will serialize equal messages to the same bytes. -// -// Note that the deterministic serialization is NOT canonical across -// languages. It is not guaranteed to remain stable over time. It is unstable -// across different builds with schema changes due to unknown fields. -// Users who need canonical serialization (e.g., persistent storage in a -// canonical form, fingerprinting, etc.) should define their own -// canonicalization specification and implement their own serializer rather -// than relying on this API. -// -// If deterministic serialization is requested, map entries will be sorted -// by keys in lexographical order. This is an implementation detail and -// subject to change. -func (p *Buffer) SetDeterministic(deterministic bool) { - p.deterministic = deterministic -} - -/* - * Helper routines for simplifying the creation of optional fields of basic type. - */ - -// Bool is a helper routine that allocates a new bool value -// to store v and returns a pointer to it. -func Bool(v bool) *bool { - return &v -} - -// Int32 is a helper routine that allocates a new int32 value -// to store v and returns a pointer to it. -func Int32(v int32) *int32 { - return &v -} - -// Int is a helper routine that allocates a new int32 value -// to store v and returns a pointer to it, but unlike Int32 -// its argument value is an int. -func Int(v int) *int32 { - p := new(int32) - *p = int32(v) - return p -} - -// Int64 is a helper routine that allocates a new int64 value -// to store v and returns a pointer to it. -func Int64(v int64) *int64 { - return &v -} - -// Float32 is a helper routine that allocates a new float32 value -// to store v and returns a pointer to it. -func Float32(v float32) *float32 { - return &v -} - -// Float64 is a helper routine that allocates a new float64 value -// to store v and returns a pointer to it. -func Float64(v float64) *float64 { - return &v -} - -// Uint32 is a helper routine that allocates a new uint32 value -// to store v and returns a pointer to it. -func Uint32(v uint32) *uint32 { - return &v -} - -// Uint64 is a helper routine that allocates a new uint64 value -// to store v and returns a pointer to it. -func Uint64(v uint64) *uint64 { - return &v -} - -// String is a helper routine that allocates a new string value -// to store v and returns a pointer to it. -func String(v string) *string { - return &v -} - -// EnumName is a helper function to simplify printing protocol buffer enums -// by name. Given an enum map and a value, it returns a useful string. -func EnumName(m map[int32]string, v int32) string { - s, ok := m[v] - if ok { - return s - } - return strconv.Itoa(int(v)) -} - -// UnmarshalJSONEnum is a helper function to simplify recovering enum int values -// from their JSON-encoded representation. Given a map from the enum's symbolic -// names to its int values, and a byte buffer containing the JSON-encoded -// value, it returns an int32 that can be cast to the enum type by the caller. -// -// The function can deal with both JSON representations, numeric and symbolic. -func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) { - if data[0] == '"' { - // New style: enums are strings. - var repr string - if err := json.Unmarshal(data, &repr); err != nil { - return -1, err - } - val, ok := m[repr] - if !ok { - return 0, fmt.Errorf("unrecognized enum %s value %q", enumName, repr) - } - return val, nil - } - // Old style: enums are ints. - var val int32 - if err := json.Unmarshal(data, &val); err != nil { - return 0, fmt.Errorf("cannot unmarshal %#q into enum %s", data, enumName) - } - return val, nil -} - -// DebugPrint dumps the encoded data in b in a debugging format with a header -// including the string s. Used in testing but made available for general debugging. -func (p *Buffer) DebugPrint(s string, b []byte) { - var u uint64 - - obuf := p.buf - index := p.index - p.buf = b - p.index = 0 - depth := 0 - - fmt.Printf("\n--- %s ---\n", s) - -out: - for { - for i := 0; i < depth; i++ { - fmt.Print(" ") - } - - index := p.index - if index == len(p.buf) { - break - } - - op, err := p.DecodeVarint() - if err != nil { - fmt.Printf("%3d: fetching op err %v\n", index, err) - break out - } - tag := op >> 3 - wire := op & 7 - - switch wire { - default: - fmt.Printf("%3d: t=%3d unknown wire=%d\n", - index, tag, wire) - break out - - case WireBytes: - var r []byte - - r, err = p.DecodeRawBytes(false) - if err != nil { - break out - } - fmt.Printf("%3d: t=%3d bytes [%d]", index, tag, len(r)) - if len(r) <= 6 { - for i := 0; i < len(r); i++ { - fmt.Printf(" %.2x", r[i]) - } - } else { - for i := 0; i < 3; i++ { - fmt.Printf(" %.2x", r[i]) - } - fmt.Printf(" ..") - for i := len(r) - 3; i < len(r); i++ { - fmt.Printf(" %.2x", r[i]) - } - } - fmt.Printf("\n") - - case WireFixed32: - u, err = p.DecodeFixed32() - if err != nil { - fmt.Printf("%3d: t=%3d fix32 err %v\n", index, tag, err) - break out - } - fmt.Printf("%3d: t=%3d fix32 %d\n", index, tag, u) - - case WireFixed64: - u, err = p.DecodeFixed64() - if err != nil { - fmt.Printf("%3d: t=%3d fix64 err %v\n", index, tag, err) - break out - } - fmt.Printf("%3d: t=%3d fix64 %d\n", index, tag, u) - - case WireVarint: - u, err = p.DecodeVarint() - if err != nil { - fmt.Printf("%3d: t=%3d varint err %v\n", index, tag, err) - break out - } - fmt.Printf("%3d: t=%3d varint %d\n", index, tag, u) - - case WireStartGroup: - fmt.Printf("%3d: t=%3d start\n", index, tag) - depth++ - - case WireEndGroup: - depth-- - fmt.Printf("%3d: t=%3d end\n", index, tag) - } - } - - if depth != 0 { - fmt.Printf("%3d: start-end not balanced %d\n", p.index, depth) - } - fmt.Printf("\n") - - p.buf = obuf - p.index = index -} - -// SetDefaults sets unset protocol buffer fields to their default values. -// It only modifies fields that are both unset and have defined defaults. -// It recursively sets default values in any non-nil sub-messages. -func SetDefaults(pb Message) { - setDefaults(reflect.ValueOf(pb), true, false) -} - -// v is a pointer to a struct. -func setDefaults(v reflect.Value, recur, zeros bool) { - v = v.Elem() - - defaultMu.RLock() - dm, ok := defaults[v.Type()] - defaultMu.RUnlock() - if !ok { - dm = buildDefaultMessage(v.Type()) - defaultMu.Lock() - defaults[v.Type()] = dm - defaultMu.Unlock() - } - - for _, sf := range dm.scalars { - f := v.Field(sf.index) - if !f.IsNil() { - // field already set - continue - } - dv := sf.value - if dv == nil && !zeros { - // no explicit default, and don't want to set zeros - continue - } - fptr := f.Addr().Interface() // **T - // TODO: Consider batching the allocations we do here. - switch sf.kind { - case reflect.Bool: - b := new(bool) - if dv != nil { - *b = dv.(bool) - } - *(fptr.(**bool)) = b - case reflect.Float32: - f := new(float32) - if dv != nil { - *f = dv.(float32) - } - *(fptr.(**float32)) = f - case reflect.Float64: - f := new(float64) - if dv != nil { - *f = dv.(float64) - } - *(fptr.(**float64)) = f - case reflect.Int32: - // might be an enum - if ft := f.Type(); ft != int32PtrType { - // enum - f.Set(reflect.New(ft.Elem())) - if dv != nil { - f.Elem().SetInt(int64(dv.(int32))) - } - } else { - // int32 field - i := new(int32) - if dv != nil { - *i = dv.(int32) - } - *(fptr.(**int32)) = i - } - case reflect.Int64: - i := new(int64) - if dv != nil { - *i = dv.(int64) - } - *(fptr.(**int64)) = i - case reflect.String: - s := new(string) - if dv != nil { - *s = dv.(string) - } - *(fptr.(**string)) = s - case reflect.Uint8: - // exceptional case: []byte - var b []byte - if dv != nil { - db := dv.([]byte) - b = make([]byte, len(db)) - copy(b, db) - } else { - b = []byte{} - } - *(fptr.(*[]byte)) = b - case reflect.Uint32: - u := new(uint32) - if dv != nil { - *u = dv.(uint32) - } - *(fptr.(**uint32)) = u - case reflect.Uint64: - u := new(uint64) - if dv != nil { - *u = dv.(uint64) - } - *(fptr.(**uint64)) = u - default: - log.Printf("proto: can't set default for field %v (sf.kind=%v)", f, sf.kind) - } - } - - for _, ni := range dm.nested { - f := v.Field(ni) - // f is *T or []*T or map[T]*T - switch f.Kind() { - case reflect.Ptr: - if f.IsNil() { - continue - } - setDefaults(f, recur, zeros) - - case reflect.Slice: - for i := 0; i < f.Len(); i++ { - e := f.Index(i) - if e.IsNil() { - continue - } - setDefaults(e, recur, zeros) - } - - case reflect.Map: - for _, k := range f.MapKeys() { - e := f.MapIndex(k) - if e.IsNil() { - continue - } - setDefaults(e, recur, zeros) - } - } - } -} - -var ( - // defaults maps a protocol buffer struct type to a slice of the fields, - // with its scalar fields set to their proto-declared non-zero default values. - defaultMu sync.RWMutex - defaults = make(map[reflect.Type]defaultMessage) - - int32PtrType = reflect.TypeOf((*int32)(nil)) -) - -// defaultMessage represents information about the default values of a message. -type defaultMessage struct { - scalars []scalarField - nested []int // struct field index of nested messages -} - -type scalarField struct { - index int // struct field index - kind reflect.Kind // element type (the T in *T or []T) - value interface{} // the proto-declared default value, or nil -} - -// t is a struct type. -func buildDefaultMessage(t reflect.Type) (dm defaultMessage) { - sprop := GetProperties(t) - for _, prop := range sprop.Prop { - fi, ok := sprop.decoderTags.get(prop.Tag) - if !ok { - // XXX_unrecognized - continue - } - ft := t.Field(fi).Type - - sf, nested, err := fieldDefault(ft, prop) - switch { - case err != nil: - log.Print(err) - case nested: - dm.nested = append(dm.nested, fi) - case sf != nil: - sf.index = fi - dm.scalars = append(dm.scalars, *sf) - } - } - - return dm -} - -// fieldDefault returns the scalarField for field type ft. -// sf will be nil if the field can not have a default. -// nestedMessage will be true if this is a nested message. -// Note that sf.index is not set on return. -func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMessage bool, err error) { - var canHaveDefault bool - switch ft.Kind() { - case reflect.Ptr: - if ft.Elem().Kind() == reflect.Struct { - nestedMessage = true - } else { - canHaveDefault = true // proto2 scalar field - } - - case reflect.Slice: - switch ft.Elem().Kind() { - case reflect.Ptr: - nestedMessage = true // repeated message - case reflect.Uint8: - canHaveDefault = true // bytes field - } - - case reflect.Map: - if ft.Elem().Kind() == reflect.Ptr { - nestedMessage = true // map with message values - } - } - - if !canHaveDefault { - if nestedMessage { - return nil, true, nil - } - return nil, false, nil - } - - // We now know that ft is a pointer or slice. - sf = &scalarField{kind: ft.Elem().Kind()} - - // scalar fields without defaults - if !prop.HasDefault { - return sf, false, nil - } - - // a scalar field: either *T or []byte - switch ft.Elem().Kind() { - case reflect.Bool: - x, err := strconv.ParseBool(prop.Default) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default bool %q: %v", prop.Default, err) - } - sf.value = x - case reflect.Float32: - x, err := strconv.ParseFloat(prop.Default, 32) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default float32 %q: %v", prop.Default, err) - } - sf.value = float32(x) - case reflect.Float64: - x, err := strconv.ParseFloat(prop.Default, 64) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default float64 %q: %v", prop.Default, err) - } - sf.value = x - case reflect.Int32: - x, err := strconv.ParseInt(prop.Default, 10, 32) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default int32 %q: %v", prop.Default, err) - } - sf.value = int32(x) - case reflect.Int64: - x, err := strconv.ParseInt(prop.Default, 10, 64) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default int64 %q: %v", prop.Default, err) - } - sf.value = x - case reflect.String: - sf.value = prop.Default - case reflect.Uint8: - // []byte (not *uint8) - sf.value = []byte(prop.Default) - case reflect.Uint32: - x, err := strconv.ParseUint(prop.Default, 10, 32) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default uint32 %q: %v", prop.Default, err) - } - sf.value = uint32(x) - case reflect.Uint64: - x, err := strconv.ParseUint(prop.Default, 10, 64) - if err != nil { - return nil, false, fmt.Errorf("proto: bad default uint64 %q: %v", prop.Default, err) - } - sf.value = x - default: - return nil, false, fmt.Errorf("proto: unhandled def kind %v", ft.Elem().Kind()) - } - - return sf, false, nil -} - -// mapKeys returns a sort.Interface to be used for sorting the map keys. -// Map fields may have key types of non-float scalars, strings and enums. -func mapKeys(vs []reflect.Value) sort.Interface { - s := mapKeySorter{vs: vs} - - // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps. - if len(vs) == 0 { - return s - } - switch vs[0].Kind() { - case reflect.Int32, reflect.Int64: - s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() } - case reflect.Uint32, reflect.Uint64: - s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() } - case reflect.Bool: - s.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true - case reflect.String: - s.less = func(a, b reflect.Value) bool { return a.String() < b.String() } - default: - panic(fmt.Sprintf("unsupported map key type: %v", vs[0].Kind())) - } - - return s -} - -type mapKeySorter struct { - vs []reflect.Value - less func(a, b reflect.Value) bool -} - -func (s mapKeySorter) Len() int { return len(s.vs) } -func (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.vs[i] } -func (s mapKeySorter) Less(i, j int) bool { - return s.less(s.vs[i], s.vs[j]) -} - -// isProto3Zero reports whether v is a zero proto3 value. -func isProto3Zero(v reflect.Value) bool { - switch v.Kind() { - case reflect.Bool: - return !v.Bool() - case reflect.Int32, reflect.Int64: - return v.Int() == 0 - case reflect.Uint32, reflect.Uint64: - return v.Uint() == 0 - case reflect.Float32, reflect.Float64: - return v.Float() == 0 - case reflect.String: - return v.String() == "" - } - return false -} - -// ProtoPackageIsVersion2 is referenced from generated protocol buffer files -// to assert that that code is compatible with this version of the proto package. -const ProtoPackageIsVersion2 = true - -// ProtoPackageIsVersion1 is referenced from generated protocol buffer files -// to assert that that code is compatible with this version of the proto package. -const ProtoPackageIsVersion1 = true - -// InternalMessageInfo is a type used internally by generated .pb.go files. -// This type is not intended to be used by non-generated code. -// This type is not subject to any compatibility guarantee. -type InternalMessageInfo struct { - marshal *marshalInfo - unmarshal *unmarshalInfo - merge *mergeInfo - discard *discardInfo -} diff --git a/vendor/github.com/golang/protobuf/proto/message_set.go b/vendor/github.com/golang/protobuf/proto/message_set.go deleted file mode 100644 index 3b6ca41d5..000000000 --- a/vendor/github.com/golang/protobuf/proto/message_set.go +++ /dev/null @@ -1,314 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -package proto - -/* - * Support for message sets. - */ - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "reflect" - "sort" - "sync" -) - -// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID. -// A message type ID is required for storing a protocol buffer in a message set. -var errNoMessageTypeID = errors.New("proto does not have a message type ID") - -// The first two types (_MessageSet_Item and messageSet) -// model what the protocol compiler produces for the following protocol message: -// message MessageSet { -// repeated group Item = 1 { -// required int32 type_id = 2; -// required string message = 3; -// }; -// } -// That is the MessageSet wire format. We can't use a proto to generate these -// because that would introduce a circular dependency between it and this package. - -type _MessageSet_Item struct { - TypeId *int32 `protobuf:"varint,2,req,name=type_id"` - Message []byte `protobuf:"bytes,3,req,name=message"` -} - -type messageSet struct { - Item []*_MessageSet_Item `protobuf:"group,1,rep"` - XXX_unrecognized []byte - // TODO: caching? -} - -// Make sure messageSet is a Message. -var _ Message = (*messageSet)(nil) - -// messageTypeIder is an interface satisfied by a protocol buffer type -// that may be stored in a MessageSet. -type messageTypeIder interface { - MessageTypeId() int32 -} - -func (ms *messageSet) find(pb Message) *_MessageSet_Item { - mti, ok := pb.(messageTypeIder) - if !ok { - return nil - } - id := mti.MessageTypeId() - for _, item := range ms.Item { - if *item.TypeId == id { - return item - } - } - return nil -} - -func (ms *messageSet) Has(pb Message) bool { - return ms.find(pb) != nil -} - -func (ms *messageSet) Unmarshal(pb Message) error { - if item := ms.find(pb); item != nil { - return Unmarshal(item.Message, pb) - } - if _, ok := pb.(messageTypeIder); !ok { - return errNoMessageTypeID - } - return nil // TODO: return error instead? -} - -func (ms *messageSet) Marshal(pb Message) error { - msg, err := Marshal(pb) - if err != nil { - return err - } - if item := ms.find(pb); item != nil { - // reuse existing item - item.Message = msg - return nil - } - - mti, ok := pb.(messageTypeIder) - if !ok { - return errNoMessageTypeID - } - - mtid := mti.MessageTypeId() - ms.Item = append(ms.Item, &_MessageSet_Item{ - TypeId: &mtid, - Message: msg, - }) - return nil -} - -func (ms *messageSet) Reset() { *ms = messageSet{} } -func (ms *messageSet) String() string { return CompactTextString(ms) } -func (*messageSet) ProtoMessage() {} - -// Support for the message_set_wire_format message option. - -func skipVarint(buf []byte) []byte { - i := 0 - for ; buf[i]&0x80 != 0; i++ { - } - return buf[i+1:] -} - -// MarshalMessageSet encodes the extension map represented by m in the message set wire format. -// It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSet(exts interface{}) ([]byte, error) { - return marshalMessageSet(exts, false) -} - -// marshaMessageSet implements above function, with the opt to turn on / off deterministic during Marshal. -func marshalMessageSet(exts interface{}, deterministic bool) ([]byte, error) { - switch exts := exts.(type) { - case *XXX_InternalExtensions: - var u marshalInfo - siz := u.sizeMessageSet(exts) - b := make([]byte, 0, siz) - return u.appendMessageSet(b, exts, deterministic) - - case map[int32]Extension: - // This is an old-style extension map. - // Wrap it in a new-style XXX_InternalExtensions. - ie := XXX_InternalExtensions{ - p: &struct { - mu sync.Mutex - extensionMap map[int32]Extension - }{ - extensionMap: exts, - }, - } - - var u marshalInfo - siz := u.sizeMessageSet(&ie) - b := make([]byte, 0, siz) - return u.appendMessageSet(b, &ie, deterministic) - - default: - return nil, errors.New("proto: not an extension map") - } -} - -// UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format. -// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSet(buf []byte, exts interface{}) error { - var m map[int32]Extension - switch exts := exts.(type) { - case *XXX_InternalExtensions: - m = exts.extensionsWrite() - case map[int32]Extension: - m = exts - default: - return errors.New("proto: not an extension map") - } - - ms := new(messageSet) - if err := Unmarshal(buf, ms); err != nil { - return err - } - for _, item := range ms.Item { - id := *item.TypeId - msg := item.Message - - // Restore wire type and field number varint, plus length varint. - // Be careful to preserve duplicate items. - b := EncodeVarint(uint64(id)<<3 | WireBytes) - if ext, ok := m[id]; ok { - // Existing data; rip off the tag and length varint - // so we join the new data correctly. - // We can assume that ext.enc is set because we are unmarshaling. - o := ext.enc[len(b):] // skip wire type and field number - _, n := DecodeVarint(o) // calculate length of length varint - o = o[n:] // skip length varint - msg = append(o, msg...) // join old data and new data - } - b = append(b, EncodeVarint(uint64(len(msg)))...) - b = append(b, msg...) - - m[id] = Extension{enc: b} - } - return nil -} - -// MarshalMessageSetJSON encodes the extension map represented by m in JSON format. -// It is called by generated MarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSetJSON(exts interface{}) ([]byte, error) { - var m map[int32]Extension - switch exts := exts.(type) { - case *XXX_InternalExtensions: - var mu sync.Locker - m, mu = exts.extensionsRead() - if m != nil { - // Keep the extensions map locked until we're done marshaling to prevent - // races between marshaling and unmarshaling the lazily-{en,de}coded - // values. - mu.Lock() - defer mu.Unlock() - } - case map[int32]Extension: - m = exts - default: - return nil, errors.New("proto: not an extension map") - } - var b bytes.Buffer - b.WriteByte('{') - - // Process the map in key order for deterministic output. - ids := make([]int32, 0, len(m)) - for id := range m { - ids = append(ids, id) - } - sort.Sort(int32Slice(ids)) // int32Slice defined in text.go - - for i, id := range ids { - ext := m[id] - msd, ok := messageSetMap[id] - if !ok { - // Unknown type; we can't render it, so skip it. - continue - } - - if i > 0 && b.Len() > 1 { - b.WriteByte(',') - } - - fmt.Fprintf(&b, `"[%s]":`, msd.name) - - x := ext.value - if x == nil { - x = reflect.New(msd.t.Elem()).Interface() - if err := Unmarshal(ext.enc, x.(Message)); err != nil { - return nil, err - } - } - d, err := json.Marshal(x) - if err != nil { - return nil, err - } - b.Write(d) - } - b.WriteByte('}') - return b.Bytes(), nil -} - -// UnmarshalMessageSetJSON decodes the extension map encoded in buf in JSON format. -// It is called by generated UnmarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error { - // Common-case fast path. - if len(buf) == 0 || bytes.Equal(buf, []byte("{}")) { - return nil - } - - // This is fairly tricky, and it's not clear that it is needed. - return errors.New("TODO: UnmarshalMessageSetJSON not yet implemented") -} - -// A global registry of types that can be used in a MessageSet. - -var messageSetMap = make(map[int32]messageSetDesc) - -type messageSetDesc struct { - t reflect.Type // pointer to struct - name string -} - -// RegisterMessageSetType is called from the generated code. -func RegisterMessageSetType(m Message, fieldNum int32, name string) { - messageSetMap[fieldNum] = messageSetDesc{ - t: reflect.TypeOf(m), - name: name, - } -} diff --git a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go deleted file mode 100644 index b6cad9083..000000000 --- a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go +++ /dev/null @@ -1,357 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2012 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -// +build purego appengine js - -// This file contains an implementation of proto field accesses using package reflect. -// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can -// be used on App Engine. - -package proto - -import ( - "reflect" - "sync" -) - -const unsafeAllowed = false - -// A field identifies a field in a struct, accessible from a pointer. -// In this implementation, a field is identified by the sequence of field indices -// passed to reflect's FieldByIndex. -type field []int - -// toField returns a field equivalent to the given reflect field. -func toField(f *reflect.StructField) field { - return f.Index -} - -// invalidField is an invalid field identifier. -var invalidField = field(nil) - -// zeroField is a noop when calling pointer.offset. -var zeroField = field([]int{}) - -// IsValid reports whether the field identifier is valid. -func (f field) IsValid() bool { return f != nil } - -// The pointer type is for the table-driven decoder. -// The implementation here uses a reflect.Value of pointer type to -// create a generic pointer. In pointer_unsafe.go we use unsafe -// instead of reflect to implement the same (but faster) interface. -type pointer struct { - v reflect.Value -} - -// toPointer converts an interface of pointer type to a pointer -// that points to the same target. -func toPointer(i *Message) pointer { - return pointer{v: reflect.ValueOf(*i)} -} - -// toAddrPointer converts an interface to a pointer that points to -// the interface data. -func toAddrPointer(i *interface{}, isptr bool) pointer { - v := reflect.ValueOf(*i) - u := reflect.New(v.Type()) - u.Elem().Set(v) - return pointer{v: u} -} - -// valToPointer converts v to a pointer. v must be of pointer type. -func valToPointer(v reflect.Value) pointer { - return pointer{v: v} -} - -// offset converts from a pointer to a structure to a pointer to -// one of its fields. -func (p pointer) offset(f field) pointer { - return pointer{v: p.v.Elem().FieldByIndex(f).Addr()} -} - -func (p pointer) isNil() bool { - return p.v.IsNil() -} - -// grow updates the slice s in place to make it one element longer. -// s must be addressable. -// Returns the (addressable) new element. -func grow(s reflect.Value) reflect.Value { - n, m := s.Len(), s.Cap() - if n < m { - s.SetLen(n + 1) - } else { - s.Set(reflect.Append(s, reflect.Zero(s.Type().Elem()))) - } - return s.Index(n) -} - -func (p pointer) toInt64() *int64 { - return p.v.Interface().(*int64) -} -func (p pointer) toInt64Ptr() **int64 { - return p.v.Interface().(**int64) -} -func (p pointer) toInt64Slice() *[]int64 { - return p.v.Interface().(*[]int64) -} - -var int32ptr = reflect.TypeOf((*int32)(nil)) - -func (p pointer) toInt32() *int32 { - return p.v.Convert(int32ptr).Interface().(*int32) -} - -// The toInt32Ptr/Slice methods don't work because of enums. -// Instead, we must use set/get methods for the int32ptr/slice case. -/* - func (p pointer) toInt32Ptr() **int32 { - return p.v.Interface().(**int32) -} - func (p pointer) toInt32Slice() *[]int32 { - return p.v.Interface().(*[]int32) -} -*/ -func (p pointer) getInt32Ptr() *int32 { - if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { - // raw int32 type - return p.v.Elem().Interface().(*int32) - } - // an enum - return p.v.Elem().Convert(int32PtrType).Interface().(*int32) -} -func (p pointer) setInt32Ptr(v int32) { - // Allocate value in a *int32. Possibly convert that to a *enum. - // Then assign it to a **int32 or **enum. - // Note: we can convert *int32 to *enum, but we can't convert - // **int32 to **enum! - p.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem())) -} - -// getInt32Slice copies []int32 from p as a new slice. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) getInt32Slice() []int32 { - if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { - // raw int32 type - return p.v.Elem().Interface().([]int32) - } - // an enum - // Allocate a []int32, then assign []enum's values into it. - // Note: we can't convert []enum to []int32. - slice := p.v.Elem() - s := make([]int32, slice.Len()) - for i := 0; i < slice.Len(); i++ { - s[i] = int32(slice.Index(i).Int()) - } - return s -} - -// setInt32Slice copies []int32 into p as a new slice. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) setInt32Slice(v []int32) { - if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { - // raw int32 type - p.v.Elem().Set(reflect.ValueOf(v)) - return - } - // an enum - // Allocate a []enum, then assign []int32's values into it. - // Note: we can't convert []enum to []int32. - slice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v)) - for i, x := range v { - slice.Index(i).SetInt(int64(x)) - } - p.v.Elem().Set(slice) -} -func (p pointer) appendInt32Slice(v int32) { - grow(p.v.Elem()).SetInt(int64(v)) -} - -func (p pointer) toUint64() *uint64 { - return p.v.Interface().(*uint64) -} -func (p pointer) toUint64Ptr() **uint64 { - return p.v.Interface().(**uint64) -} -func (p pointer) toUint64Slice() *[]uint64 { - return p.v.Interface().(*[]uint64) -} -func (p pointer) toUint32() *uint32 { - return p.v.Interface().(*uint32) -} -func (p pointer) toUint32Ptr() **uint32 { - return p.v.Interface().(**uint32) -} -func (p pointer) toUint32Slice() *[]uint32 { - return p.v.Interface().(*[]uint32) -} -func (p pointer) toBool() *bool { - return p.v.Interface().(*bool) -} -func (p pointer) toBoolPtr() **bool { - return p.v.Interface().(**bool) -} -func (p pointer) toBoolSlice() *[]bool { - return p.v.Interface().(*[]bool) -} -func (p pointer) toFloat64() *float64 { - return p.v.Interface().(*float64) -} -func (p pointer) toFloat64Ptr() **float64 { - return p.v.Interface().(**float64) -} -func (p pointer) toFloat64Slice() *[]float64 { - return p.v.Interface().(*[]float64) -} -func (p pointer) toFloat32() *float32 { - return p.v.Interface().(*float32) -} -func (p pointer) toFloat32Ptr() **float32 { - return p.v.Interface().(**float32) -} -func (p pointer) toFloat32Slice() *[]float32 { - return p.v.Interface().(*[]float32) -} -func (p pointer) toString() *string { - return p.v.Interface().(*string) -} -func (p pointer) toStringPtr() **string { - return p.v.Interface().(**string) -} -func (p pointer) toStringSlice() *[]string { - return p.v.Interface().(*[]string) -} -func (p pointer) toBytes() *[]byte { - return p.v.Interface().(*[]byte) -} -func (p pointer) toBytesSlice() *[][]byte { - return p.v.Interface().(*[][]byte) -} -func (p pointer) toExtensions() *XXX_InternalExtensions { - return p.v.Interface().(*XXX_InternalExtensions) -} -func (p pointer) toOldExtensions() *map[int32]Extension { - return p.v.Interface().(*map[int32]Extension) -} -func (p pointer) getPointer() pointer { - return pointer{v: p.v.Elem()} -} -func (p pointer) setPointer(q pointer) { - p.v.Elem().Set(q.v) -} -func (p pointer) appendPointer(q pointer) { - grow(p.v.Elem()).Set(q.v) -} - -// getPointerSlice copies []*T from p as a new []pointer. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) getPointerSlice() []pointer { - if p.v.IsNil() { - return nil - } - n := p.v.Elem().Len() - s := make([]pointer, n) - for i := 0; i < n; i++ { - s[i] = pointer{v: p.v.Elem().Index(i)} - } - return s -} - -// setPointerSlice copies []pointer into p as a new []*T. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) setPointerSlice(v []pointer) { - if v == nil { - p.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem()) - return - } - s := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v)) - for _, p := range v { - s = reflect.Append(s, p.v) - } - p.v.Elem().Set(s) -} - -// getInterfacePointer returns a pointer that points to the -// interface data of the interface pointed by p. -func (p pointer) getInterfacePointer() pointer { - if p.v.Elem().IsNil() { - return pointer{v: p.v.Elem()} - } - return pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct -} - -func (p pointer) asPointerTo(t reflect.Type) reflect.Value { - // TODO: check that p.v.Type().Elem() == t? - return p.v -} - -func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p -} -func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v -} -func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p -} -func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v -} -func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p -} -func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v -} -func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { - atomicLock.Lock() - defer atomicLock.Unlock() - return *p -} -func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { - atomicLock.Lock() - defer atomicLock.Unlock() - *p = v -} - -var atomicLock sync.Mutex diff --git a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go deleted file mode 100644 index d55a335d9..000000000 --- a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go +++ /dev/null @@ -1,308 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2012 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -// +build !purego,!appengine,!js - -// This file contains the implementation of the proto field accesses using package unsafe. - -package proto - -import ( - "reflect" - "sync/atomic" - "unsafe" -) - -const unsafeAllowed = true - -// A field identifies a field in a struct, accessible from a pointer. -// In this implementation, a field is identified by its byte offset from the start of the struct. -type field uintptr - -// toField returns a field equivalent to the given reflect field. -func toField(f *reflect.StructField) field { - return field(f.Offset) -} - -// invalidField is an invalid field identifier. -const invalidField = ^field(0) - -// zeroField is a noop when calling pointer.offset. -const zeroField = field(0) - -// IsValid reports whether the field identifier is valid. -func (f field) IsValid() bool { - return f != invalidField -} - -// The pointer type below is for the new table-driven encoder/decoder. -// The implementation here uses unsafe.Pointer to create a generic pointer. -// In pointer_reflect.go we use reflect instead of unsafe to implement -// the same (but slower) interface. -type pointer struct { - p unsafe.Pointer -} - -// size of pointer -var ptrSize = unsafe.Sizeof(uintptr(0)) - -// toPointer converts an interface of pointer type to a pointer -// that points to the same target. -func toPointer(i *Message) pointer { - // Super-tricky - read pointer out of data word of interface value. - // Saves ~25ns over the equivalent: - // return valToPointer(reflect.ValueOf(*i)) - return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} -} - -// toAddrPointer converts an interface to a pointer that points to -// the interface data. -func toAddrPointer(i *interface{}, isptr bool) pointer { - // Super-tricky - read or get the address of data word of interface value. - if isptr { - // The interface is of pointer type, thus it is a direct interface. - // The data word is the pointer data itself. We take its address. - return pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)} - } - // The interface is not of pointer type. The data word is the pointer - // to the data. - return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} -} - -// valToPointer converts v to a pointer. v must be of pointer type. -func valToPointer(v reflect.Value) pointer { - return pointer{p: unsafe.Pointer(v.Pointer())} -} - -// offset converts from a pointer to a structure to a pointer to -// one of its fields. -func (p pointer) offset(f field) pointer { - // For safety, we should panic if !f.IsValid, however calling panic causes - // this to no longer be inlineable, which is a serious performance cost. - /* - if !f.IsValid() { - panic("invalid field") - } - */ - return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))} -} - -func (p pointer) isNil() bool { - return p.p == nil -} - -func (p pointer) toInt64() *int64 { - return (*int64)(p.p) -} -func (p pointer) toInt64Ptr() **int64 { - return (**int64)(p.p) -} -func (p pointer) toInt64Slice() *[]int64 { - return (*[]int64)(p.p) -} -func (p pointer) toInt32() *int32 { - return (*int32)(p.p) -} - -// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist. -/* - func (p pointer) toInt32Ptr() **int32 { - return (**int32)(p.p) - } - func (p pointer) toInt32Slice() *[]int32 { - return (*[]int32)(p.p) - } -*/ -func (p pointer) getInt32Ptr() *int32 { - return *(**int32)(p.p) -} -func (p pointer) setInt32Ptr(v int32) { - *(**int32)(p.p) = &v -} - -// getInt32Slice loads a []int32 from p. -// The value returned is aliased with the original slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) getInt32Slice() []int32 { - return *(*[]int32)(p.p) -} - -// setInt32Slice stores a []int32 to p. -// The value set is aliased with the input slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) setInt32Slice(v []int32) { - *(*[]int32)(p.p) = v -} - -// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead? -func (p pointer) appendInt32Slice(v int32) { - s := (*[]int32)(p.p) - *s = append(*s, v) -} - -func (p pointer) toUint64() *uint64 { - return (*uint64)(p.p) -} -func (p pointer) toUint64Ptr() **uint64 { - return (**uint64)(p.p) -} -func (p pointer) toUint64Slice() *[]uint64 { - return (*[]uint64)(p.p) -} -func (p pointer) toUint32() *uint32 { - return (*uint32)(p.p) -} -func (p pointer) toUint32Ptr() **uint32 { - return (**uint32)(p.p) -} -func (p pointer) toUint32Slice() *[]uint32 { - return (*[]uint32)(p.p) -} -func (p pointer) toBool() *bool { - return (*bool)(p.p) -} -func (p pointer) toBoolPtr() **bool { - return (**bool)(p.p) -} -func (p pointer) toBoolSlice() *[]bool { - return (*[]bool)(p.p) -} -func (p pointer) toFloat64() *float64 { - return (*float64)(p.p) -} -func (p pointer) toFloat64Ptr() **float64 { - return (**float64)(p.p) -} -func (p pointer) toFloat64Slice() *[]float64 { - return (*[]float64)(p.p) -} -func (p pointer) toFloat32() *float32 { - return (*float32)(p.p) -} -func (p pointer) toFloat32Ptr() **float32 { - return (**float32)(p.p) -} -func (p pointer) toFloat32Slice() *[]float32 { - return (*[]float32)(p.p) -} -func (p pointer) toString() *string { - return (*string)(p.p) -} -func (p pointer) toStringPtr() **string { - return (**string)(p.p) -} -func (p pointer) toStringSlice() *[]string { - return (*[]string)(p.p) -} -func (p pointer) toBytes() *[]byte { - return (*[]byte)(p.p) -} -func (p pointer) toBytesSlice() *[][]byte { - return (*[][]byte)(p.p) -} -func (p pointer) toExtensions() *XXX_InternalExtensions { - return (*XXX_InternalExtensions)(p.p) -} -func (p pointer) toOldExtensions() *map[int32]Extension { - return (*map[int32]Extension)(p.p) -} - -// getPointerSlice loads []*T from p as a []pointer. -// The value returned is aliased with the original slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) getPointerSlice() []pointer { - // Super-tricky - p should point to a []*T where T is a - // message type. We load it as []pointer. - return *(*[]pointer)(p.p) -} - -// setPointerSlice stores []pointer into p as a []*T. -// The value set is aliased with the input slice. -// This behavior differs from the implementation in pointer_reflect.go. -func (p pointer) setPointerSlice(v []pointer) { - // Super-tricky - p should point to a []*T where T is a - // message type. We store it as []pointer. - *(*[]pointer)(p.p) = v -} - -// getPointer loads the pointer at p and returns it. -func (p pointer) getPointer() pointer { - return pointer{p: *(*unsafe.Pointer)(p.p)} -} - -// setPointer stores the pointer q at p. -func (p pointer) setPointer(q pointer) { - *(*unsafe.Pointer)(p.p) = q.p -} - -// append q to the slice pointed to by p. -func (p pointer) appendPointer(q pointer) { - s := (*[]unsafe.Pointer)(p.p) - *s = append(*s, q.p) -} - -// getInterfacePointer returns a pointer that points to the -// interface data of the interface pointed by p. -func (p pointer) getInterfacePointer() pointer { - // Super-tricky - read pointer out of data word of interface value. - return pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]} -} - -// asPointerTo returns a reflect.Value that is a pointer to an -// object of type t stored at p. -func (p pointer) asPointerTo(t reflect.Type) reflect.Value { - return reflect.NewAt(t, p.p) -} - -func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { - return (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) -} -func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) -} -func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { - return (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) -} -func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) -} -func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { - return (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) -} -func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) -} -func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { - return (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) -} -func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { - atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) -} diff --git a/vendor/github.com/golang/protobuf/proto/properties.go b/vendor/github.com/golang/protobuf/proto/properties.go deleted file mode 100644 index dce098e6e..000000000 --- a/vendor/github.com/golang/protobuf/proto/properties.go +++ /dev/null @@ -1,535 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -package proto - -/* - * Routines for encoding data into the wire format for protocol buffers. - */ - -import ( - "fmt" - "log" - "os" - "reflect" - "sort" - "strconv" - "strings" - "sync" -) - -const debug bool = false - -// Constants that identify the encoding of a value on the wire. -const ( - WireVarint = 0 - WireFixed64 = 1 - WireBytes = 2 - WireStartGroup = 3 - WireEndGroup = 4 - WireFixed32 = 5 -) - -// tagMap is an optimization over map[int]int for typical protocol buffer -// use-cases. Encoded protocol buffers are often in tag order with small tag -// numbers. -type tagMap struct { - fastTags []int - slowTags map[int]int -} - -// tagMapFastLimit is the upper bound on the tag number that will be stored in -// the tagMap slice rather than its map. -const tagMapFastLimit = 1024 - -func (p *tagMap) get(t int) (int, bool) { - if t > 0 && t < tagMapFastLimit { - if t >= len(p.fastTags) { - return 0, false - } - fi := p.fastTags[t] - return fi, fi >= 0 - } - fi, ok := p.slowTags[t] - return fi, ok -} - -func (p *tagMap) put(t int, fi int) { - if t > 0 && t < tagMapFastLimit { - for len(p.fastTags) < t+1 { - p.fastTags = append(p.fastTags, -1) - } - p.fastTags[t] = fi - return - } - if p.slowTags == nil { - p.slowTags = make(map[int]int) - } - p.slowTags[t] = fi -} - -// StructProperties represents properties for all the fields of a struct. -// decoderTags and decoderOrigNames should only be used by the decoder. -type StructProperties struct { - Prop []*Properties // properties for each field - reqCount int // required count - decoderTags tagMap // map from proto tag to struct field number - decoderOrigNames map[string]int // map from original name to struct field number - order []int // list of struct field numbers in tag order - - // OneofTypes contains information about the oneof fields in this message. - // It is keyed by the original name of a field. - OneofTypes map[string]*OneofProperties -} - -// OneofProperties represents information about a specific field in a oneof. -type OneofProperties struct { - Type reflect.Type // pointer to generated struct type for this oneof field - Field int // struct field number of the containing oneof in the message - Prop *Properties -} - -// Implement the sorting interface so we can sort the fields in tag order, as recommended by the spec. -// See encode.go, (*Buffer).enc_struct. - -func (sp *StructProperties) Len() int { return len(sp.order) } -func (sp *StructProperties) Less(i, j int) bool { - return sp.Prop[sp.order[i]].Tag < sp.Prop[sp.order[j]].Tag -} -func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order[j], sp.order[i] } - -// Properties represents the protocol-specific behavior of a single struct field. -type Properties struct { - Name string // name of the field, for error messages - OrigName string // original name before protocol compiler (always set) - JSONName string // name to use for JSON; determined by protoc - Wire string - WireType int - Tag int - Required bool - Optional bool - Repeated bool - Packed bool // relevant for repeated primitives only - Enum string // set for enum types only - proto3 bool // whether this is known to be a proto3 field - oneof bool // whether this is a oneof field - - Default string // default value - HasDefault bool // whether an explicit default was provided - - stype reflect.Type // set for struct types only - sprop *StructProperties // set for struct types only - - mtype reflect.Type // set for map types only - MapKeyProp *Properties // set for map types only - MapValProp *Properties // set for map types only -} - -// String formats the properties in the protobuf struct field tag style. -func (p *Properties) String() string { - s := p.Wire - s += "," - s += strconv.Itoa(p.Tag) - if p.Required { - s += ",req" - } - if p.Optional { - s += ",opt" - } - if p.Repeated { - s += ",rep" - } - if p.Packed { - s += ",packed" - } - s += ",name=" + p.OrigName - if p.JSONName != p.OrigName { - s += ",json=" + p.JSONName - } - if p.proto3 { - s += ",proto3" - } - if p.oneof { - s += ",oneof" - } - if len(p.Enum) > 0 { - s += ",enum=" + p.Enum - } - if p.HasDefault { - s += ",def=" + p.Default - } - return s -} - -// Parse populates p by parsing a string in the protobuf struct field tag style. -func (p *Properties) Parse(s string) { - // "bytes,49,opt,name=foo,def=hello!" - fields := strings.Split(s, ",") // breaks def=, but handled below. - if len(fields) < 2 { - fmt.Fprintf(os.Stderr, "proto: tag has too few fields: %q\n", s) - return - } - - p.Wire = fields[0] - switch p.Wire { - case "varint": - p.WireType = WireVarint - case "fixed32": - p.WireType = WireFixed32 - case "fixed64": - p.WireType = WireFixed64 - case "zigzag32": - p.WireType = WireVarint - case "zigzag64": - p.WireType = WireVarint - case "bytes", "group": - p.WireType = WireBytes - // no numeric converter for non-numeric types - default: - fmt.Fprintf(os.Stderr, "proto: tag has unknown wire type: %q\n", s) - return - } - - var err error - p.Tag, err = strconv.Atoi(fields[1]) - if err != nil { - return - } - -outer: - for i := 2; i < len(fields); i++ { - f := fields[i] - switch { - case f == "req": - p.Required = true - case f == "opt": - p.Optional = true - case f == "rep": - p.Repeated = true - case f == "packed": - p.Packed = true - case strings.HasPrefix(f, "name="): - p.OrigName = f[5:] - case strings.HasPrefix(f, "json="): - p.JSONName = f[5:] - case strings.HasPrefix(f, "enum="): - p.Enum = f[5:] - case f == "proto3": - p.proto3 = true - case f == "oneof": - p.oneof = true - case strings.HasPrefix(f, "def="): - p.HasDefault = true - p.Default = f[4:] // rest of string - if i+1 < len(fields) { - // Commas aren't escaped, and def is always last. - p.Default += "," + strings.Join(fields[i+1:], ",") - break outer - } - } - } -} - -var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem() - -// setFieldProps initializes the field properties for submessages and maps. -func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) { - switch t1 := typ; t1.Kind() { - case reflect.Ptr: - if t1.Elem().Kind() == reflect.Struct { - p.stype = t1.Elem() - } - - case reflect.Slice: - if t2 := t1.Elem(); t2.Kind() == reflect.Ptr && t2.Elem().Kind() == reflect.Struct { - p.stype = t2.Elem() - } - - case reflect.Map: - p.mtype = t1 - p.MapKeyProp = &Properties{} - p.MapKeyProp.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp) - p.MapValProp = &Properties{} - vtype := p.mtype.Elem() - if vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice { - // The value type is not a message (*T) or bytes ([]byte), - // so we need encoders for the pointer to this type. - vtype = reflect.PtrTo(vtype) - } - p.MapValProp.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp) - } - - if p.stype != nil { - if lockGetProp { - p.sprop = GetProperties(p.stype) - } else { - p.sprop = getPropertiesLocked(p.stype) - } - } -} - -var ( - marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem() -) - -// Init populates the properties from a protocol buffer struct tag. -func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) { - p.init(typ, name, tag, f, true) -} - -func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructField, lockGetProp bool) { - // "bytes,49,opt,def=hello!" - p.Name = name - p.OrigName = name - if tag == "" { - return - } - p.Parse(tag) - p.setFieldProps(typ, f, lockGetProp) -} - -var ( - propertiesMu sync.RWMutex - propertiesMap = make(map[reflect.Type]*StructProperties) -) - -// GetProperties returns the list of properties for the type represented by t. -// t must represent a generated struct type of a protocol message. -func GetProperties(t reflect.Type) *StructProperties { - if t.Kind() != reflect.Struct { - panic("proto: type must have kind struct") - } - - // Most calls to GetProperties in a long-running program will be - // retrieving details for types we have seen before. - propertiesMu.RLock() - sprop, ok := propertiesMap[t] - propertiesMu.RUnlock() - if ok { - return sprop - } - - propertiesMu.Lock() - sprop = getPropertiesLocked(t) - propertiesMu.Unlock() - return sprop -} - -// getPropertiesLocked requires that propertiesMu is held. -func getPropertiesLocked(t reflect.Type) *StructProperties { - if prop, ok := propertiesMap[t]; ok { - return prop - } - - prop := new(StructProperties) - // in case of recursive protos, fill this in now. - propertiesMap[t] = prop - - // build properties - prop.Prop = make([]*Properties, t.NumField()) - prop.order = make([]int, t.NumField()) - - for i := 0; i < t.NumField(); i++ { - f := t.Field(i) - p := new(Properties) - name := f.Name - p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false) - - oneof := f.Tag.Get("protobuf_oneof") // special case - if oneof != "" { - // Oneof fields don't use the traditional protobuf tag. - p.OrigName = oneof - } - prop.Prop[i] = p - prop.order[i] = i - if debug { - print(i, " ", f.Name, " ", t.String(), " ") - if p.Tag > 0 { - print(p.String()) - } - print("\n") - } - } - - // Re-order prop.order. - sort.Sort(prop) - - type oneofMessage interface { - XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) - } - if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { - var oots []interface{} - _, _, _, oots = om.XXX_OneofFuncs() - - // Interpret oneof metadata. - prop.OneofTypes = make(map[string]*OneofProperties) - for _, oot := range oots { - oop := &OneofProperties{ - Type: reflect.ValueOf(oot).Type(), // *T - Prop: new(Properties), - } - sft := oop.Type.Elem().Field(0) - oop.Prop.Name = sft.Name - oop.Prop.Parse(sft.Tag.Get("protobuf")) - // There will be exactly one interface field that - // this new value is assignable to. - for i := 0; i < t.NumField(); i++ { - f := t.Field(i) - if f.Type.Kind() != reflect.Interface { - continue - } - if !oop.Type.AssignableTo(f.Type) { - continue - } - oop.Field = i - break - } - prop.OneofTypes[oop.Prop.OrigName] = oop - } - } - - // build required counts - // build tags - reqCount := 0 - prop.decoderOrigNames = make(map[string]int) - for i, p := range prop.Prop { - if strings.HasPrefix(p.Name, "XXX_") { - // Internal fields should not appear in tags/origNames maps. - // They are handled specially when encoding and decoding. - continue - } - if p.Required { - reqCount++ - } - prop.decoderTags.put(p.Tag, i) - prop.decoderOrigNames[p.OrigName] = i - } - prop.reqCount = reqCount - - return prop -} - -// A global registry of enum types. -// The generated code will register the generated maps by calling RegisterEnum. - -var enumValueMaps = make(map[string]map[string]int32) - -// RegisterEnum is called from the generated code to install the enum descriptor -// maps into the global table to aid parsing text format protocol buffers. -func RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[string]int32) { - if _, ok := enumValueMaps[typeName]; ok { - panic("proto: duplicate enum registered: " + typeName) - } - enumValueMaps[typeName] = valueMap -} - -// EnumValueMap returns the mapping from names to integers of the -// enum type enumType, or a nil if not found. -func EnumValueMap(enumType string) map[string]int32 { - return enumValueMaps[enumType] -} - -// A registry of all linked message types. -// The string is a fully-qualified proto name ("pkg.Message"). -var ( - protoTypedNils = make(map[string]Message) // a map from proto names to typed nil pointers - protoMapTypes = make(map[string]reflect.Type) // a map from proto names to map types - revProtoTypes = make(map[reflect.Type]string) -) - -// RegisterType is called from generated code and maps from the fully qualified -// proto name to the type (pointer to struct) of the protocol buffer. -func RegisterType(x Message, name string) { - if _, ok := protoTypedNils[name]; ok { - // TODO: Some day, make this a panic. - log.Printf("proto: duplicate proto type registered: %s", name) - return - } - t := reflect.TypeOf(x) - if v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 { - // Generated code always calls RegisterType with nil x. - // This check is just for extra safety. - protoTypedNils[name] = x - } else { - protoTypedNils[name] = reflect.Zero(t).Interface().(Message) - } - revProtoTypes[t] = name -} - -// RegisterMapType is called from generated code and maps from the fully qualified -// proto name to the native map type of the proto map definition. -func RegisterMapType(x interface{}, name string) { - if reflect.TypeOf(x).Kind() != reflect.Map { - panic(fmt.Sprintf("RegisterMapType(%T, %q); want map", x, name)) - } - if _, ok := protoMapTypes[name]; ok { - log.Printf("proto: duplicate proto type registered: %s", name) - return - } - t := reflect.TypeOf(x) - protoMapTypes[name] = t - revProtoTypes[t] = name -} - -// MessageName returns the fully-qualified proto name for the given message type. -func MessageName(x Message) string { - type xname interface { - XXX_MessageName() string - } - if m, ok := x.(xname); ok { - return m.XXX_MessageName() - } - return revProtoTypes[reflect.TypeOf(x)] -} - -// MessageType returns the message type (pointer to struct) for a named message. -// The type is not guaranteed to implement proto.Message if the name refers to a -// map entry. -func MessageType(name string) reflect.Type { - if t, ok := protoTypedNils[name]; ok { - return reflect.TypeOf(t) - } - return protoMapTypes[name] -} - -// A registry of all linked proto files. -var ( - protoFiles = make(map[string][]byte) // file name => fileDescriptor -) - -// RegisterFile is called from generated code and maps from the -// full file name of a .proto file to its compressed FileDescriptorProto. -func RegisterFile(filename string, fileDescriptor []byte) { - protoFiles[filename] = fileDescriptor -} - -// FileDescriptor returns the compressed FileDescriptorProto for a .proto file. -func FileDescriptor(filename string) []byte { return protoFiles[filename] } diff --git a/vendor/github.com/golang/protobuf/proto/table_marshal.go b/vendor/github.com/golang/protobuf/proto/table_marshal.go deleted file mode 100644 index f3a2d16a4..000000000 --- a/vendor/github.com/golang/protobuf/proto/table_marshal.go +++ /dev/null @@ -1,2767 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -package proto - -import ( - "errors" - "fmt" - "math" - "reflect" - "sort" - "strconv" - "strings" - "sync" - "sync/atomic" - "unicode/utf8" -) - -// a sizer takes a pointer to a field and the size of its tag, computes the size of -// the encoded data. -type sizer func(pointer, int) int - -// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format), -// marshals the field to the end of the slice, returns the slice and error (if any). -type marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) - -// marshalInfo is the information used for marshaling a message. -type marshalInfo struct { - typ reflect.Type - fields []*marshalFieldInfo - unrecognized field // offset of XXX_unrecognized - extensions field // offset of XXX_InternalExtensions - v1extensions field // offset of XXX_extensions - sizecache field // offset of XXX_sizecache - initialized int32 // 0 -- only typ is set, 1 -- fully initialized - messageset bool // uses message set wire format - hasmarshaler bool // has custom marshaler - sync.RWMutex // protect extElems map, also for initialization - extElems map[int32]*marshalElemInfo // info of extension elements -} - -// marshalFieldInfo is the information used for marshaling a field of a message. -type marshalFieldInfo struct { - field field - wiretag uint64 // tag in wire format - tagsize int // size of tag in wire format - sizer sizer - marshaler marshaler - isPointer bool - required bool // field is required - name string // name of the field, for error reporting - oneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements -} - -// marshalElemInfo is the information used for marshaling an extension or oneof element. -type marshalElemInfo struct { - wiretag uint64 // tag in wire format - tagsize int // size of tag in wire format - sizer sizer - marshaler marshaler - isptr bool // elem is pointer typed, thus interface of this type is a direct interface (extension only) -} - -var ( - marshalInfoMap = map[reflect.Type]*marshalInfo{} - marshalInfoLock sync.Mutex -) - -// getMarshalInfo returns the information to marshal a given type of message. -// The info it returns may not necessarily initialized. -// t is the type of the message (NOT the pointer to it). -func getMarshalInfo(t reflect.Type) *marshalInfo { - marshalInfoLock.Lock() - u, ok := marshalInfoMap[t] - if !ok { - u = &marshalInfo{typ: t} - marshalInfoMap[t] = u - } - marshalInfoLock.Unlock() - return u -} - -// Size is the entry point from generated code, -// and should be ONLY called by generated code. -// It computes the size of encoded data of msg. -// a is a pointer to a place to store cached marshal info. -func (a *InternalMessageInfo) Size(msg Message) int { - u := getMessageMarshalInfo(msg, a) - ptr := toPointer(&msg) - if ptr.isNil() { - // We get here if msg is a typed nil ((*SomeMessage)(nil)), - // so it satisfies the interface, and msg == nil wouldn't - // catch it. We don't want crash in this case. - return 0 - } - return u.size(ptr) -} - -// Marshal is the entry point from generated code, -// and should be ONLY called by generated code. -// It marshals msg to the end of b. -// a is a pointer to a place to store cached marshal info. -func (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) { - u := getMessageMarshalInfo(msg, a) - ptr := toPointer(&msg) - if ptr.isNil() { - // We get here if msg is a typed nil ((*SomeMessage)(nil)), - // so it satisfies the interface, and msg == nil wouldn't - // catch it. We don't want crash in this case. - return b, ErrNil - } - return u.marshal(b, ptr, deterministic) -} - -func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo { - // u := a.marshal, but atomically. - // We use an atomic here to ensure memory consistency. - u := atomicLoadMarshalInfo(&a.marshal) - if u == nil { - // Get marshal information from type of message. - t := reflect.ValueOf(msg).Type() - if t.Kind() != reflect.Ptr { - panic(fmt.Sprintf("cannot handle non-pointer message type %v", t)) - } - u = getMarshalInfo(t.Elem()) - // Store it in the cache for later users. - // a.marshal = u, but atomically. - atomicStoreMarshalInfo(&a.marshal, u) - } - return u -} - -// size is the main function to compute the size of the encoded data of a message. -// ptr is the pointer to the message. -func (u *marshalInfo) size(ptr pointer) int { - if atomic.LoadInt32(&u.initialized) == 0 { - u.computeMarshalInfo() - } - - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - if u.hasmarshaler { - m := ptr.asPointerTo(u.typ).Interface().(Marshaler) - b, _ := m.Marshal() - return len(b) - } - - n := 0 - for _, f := range u.fields { - if f.isPointer && ptr.offset(f.field).getPointer().isNil() { - // nil pointer always marshals to nothing - continue - } - n += f.sizer(ptr.offset(f.field), f.tagsize) - } - if u.extensions.IsValid() { - e := ptr.offset(u.extensions).toExtensions() - if u.messageset { - n += u.sizeMessageSet(e) - } else { - n += u.sizeExtensions(e) - } - } - if u.v1extensions.IsValid() { - m := *ptr.offset(u.v1extensions).toOldExtensions() - n += u.sizeV1Extensions(m) - } - if u.unrecognized.IsValid() { - s := *ptr.offset(u.unrecognized).toBytes() - n += len(s) - } - // cache the result for use in marshal - if u.sizecache.IsValid() { - atomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n)) - } - return n -} - -// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated), -// fall back to compute the size. -func (u *marshalInfo) cachedsize(ptr pointer) int { - if u.sizecache.IsValid() { - return int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32())) - } - return u.size(ptr) -} - -// marshal is the main function to marshal a message. It takes a byte slice and appends -// the encoded data to the end of the slice, returns the slice and error (if any). -// ptr is the pointer to the message. -// If deterministic is true, map is marshaled in deterministic order. -func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) { - if atomic.LoadInt32(&u.initialized) == 0 { - u.computeMarshalInfo() - } - - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - if u.hasmarshaler { - m := ptr.asPointerTo(u.typ).Interface().(Marshaler) - b1, err := m.Marshal() - b = append(b, b1...) - return b, err - } - - var err, errLater error - // The old marshaler encodes extensions at beginning. - if u.extensions.IsValid() { - e := ptr.offset(u.extensions).toExtensions() - if u.messageset { - b, err = u.appendMessageSet(b, e, deterministic) - } else { - b, err = u.appendExtensions(b, e, deterministic) - } - if err != nil { - return b, err - } - } - if u.v1extensions.IsValid() { - m := *ptr.offset(u.v1extensions).toOldExtensions() - b, err = u.appendV1Extensions(b, m, deterministic) - if err != nil { - return b, err - } - } - for _, f := range u.fields { - if f.required { - if ptr.offset(f.field).getPointer().isNil() { - // Required field is not set. - // We record the error but keep going, to give a complete marshaling. - if errLater == nil { - errLater = &RequiredNotSetError{f.name} - } - continue - } - } - if f.isPointer && ptr.offset(f.field).getPointer().isNil() { - // nil pointer always marshals to nothing - continue - } - b, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic) - if err != nil { - if err1, ok := err.(*RequiredNotSetError); ok { - // Required field in submessage is not set. - // We record the error but keep going, to give a complete marshaling. - if errLater == nil { - errLater = &RequiredNotSetError{f.name + "." + err1.field} - } - continue - } - if err == errRepeatedHasNil { - err = errors.New("proto: repeated field " + f.name + " has nil element") - } - if err == errInvalidUTF8 { - if errLater == nil { - fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name - errLater = &invalidUTF8Error{fullName} - } - continue - } - return b, err - } - } - if u.unrecognized.IsValid() { - s := *ptr.offset(u.unrecognized).toBytes() - b = append(b, s...) - } - return b, errLater -} - -// computeMarshalInfo initializes the marshal info. -func (u *marshalInfo) computeMarshalInfo() { - u.Lock() - defer u.Unlock() - if u.initialized != 0 { // non-atomic read is ok as it is protected by the lock - return - } - - t := u.typ - u.unrecognized = invalidField - u.extensions = invalidField - u.v1extensions = invalidField - u.sizecache = invalidField - - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - if reflect.PtrTo(t).Implements(marshalerType) { - u.hasmarshaler = true - atomic.StoreInt32(&u.initialized, 1) - return - } - - // get oneof implementers - var oneofImplementers []interface{} - if m, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { - _, _, _, oneofImplementers = m.XXX_OneofFuncs() - } - - n := t.NumField() - - // deal with XXX fields first - for i := 0; i < t.NumField(); i++ { - f := t.Field(i) - if !strings.HasPrefix(f.Name, "XXX_") { - continue - } - switch f.Name { - case "XXX_sizecache": - u.sizecache = toField(&f) - case "XXX_unrecognized": - u.unrecognized = toField(&f) - case "XXX_InternalExtensions": - u.extensions = toField(&f) - u.messageset = f.Tag.Get("protobuf_messageset") == "1" - case "XXX_extensions": - u.v1extensions = toField(&f) - case "XXX_NoUnkeyedLiteral": - // nothing to do - default: - panic("unknown XXX field: " + f.Name) - } - n-- - } - - // normal fields - fields := make([]marshalFieldInfo, n) // batch allocation - u.fields = make([]*marshalFieldInfo, 0, n) - for i, j := 0, 0; i < t.NumField(); i++ { - f := t.Field(i) - - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - field := &fields[j] - j++ - field.name = f.Name - u.fields = append(u.fields, field) - if f.Tag.Get("protobuf_oneof") != "" { - field.computeOneofFieldInfo(&f, oneofImplementers) - continue - } - if f.Tag.Get("protobuf") == "" { - // field has no tag (not in generated message), ignore it - u.fields = u.fields[:len(u.fields)-1] - j-- - continue - } - field.computeMarshalFieldInfo(&f) - } - - // fields are marshaled in tag order on the wire. - sort.Sort(byTag(u.fields)) - - atomic.StoreInt32(&u.initialized, 1) -} - -// helper for sorting fields by tag -type byTag []*marshalFieldInfo - -func (a byTag) Len() int { return len(a) } -func (a byTag) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag } - -// getExtElemInfo returns the information to marshal an extension element. -// The info it returns is initialized. -func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo { - // get from cache first - u.RLock() - e, ok := u.extElems[desc.Field] - u.RUnlock() - if ok { - return e - } - - t := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct - tags := strings.Split(desc.Tag, ",") - tag, err := strconv.Atoi(tags[1]) - if err != nil { - panic("tag is not an integer") - } - wt := wiretype(tags[0]) - sizer, marshaler := typeMarshaler(t, tags, false, false) - e = &marshalElemInfo{ - wiretag: uint64(tag)<<3 | wt, - tagsize: SizeVarint(uint64(tag) << 3), - sizer: sizer, - marshaler: marshaler, - isptr: t.Kind() == reflect.Ptr, - } - - // update cache - u.Lock() - if u.extElems == nil { - u.extElems = make(map[int32]*marshalElemInfo) - } - u.extElems[desc.Field] = e - u.Unlock() - return e -} - -// computeMarshalFieldInfo fills up the information to marshal a field. -func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) { - // parse protobuf tag of the field. - // tag has format of "bytes,49,opt,name=foo,def=hello!" - tags := strings.Split(f.Tag.Get("protobuf"), ",") - if tags[0] == "" { - return - } - tag, err := strconv.Atoi(tags[1]) - if err != nil { - panic("tag is not an integer") - } - wt := wiretype(tags[0]) - if tags[2] == "req" { - fi.required = true - } - fi.setTag(f, tag, wt) - fi.setMarshaler(f, tags) -} - -func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) { - fi.field = toField(f) - fi.wiretag = math.MaxInt32 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire. - fi.isPointer = true - fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f) - fi.oneofElems = make(map[reflect.Type]*marshalElemInfo) - - ityp := f.Type // interface type - for _, o := range oneofImplementers { - t := reflect.TypeOf(o) - if !t.Implements(ityp) { - continue - } - sf := t.Elem().Field(0) // oneof implementer is a struct with a single field - tags := strings.Split(sf.Tag.Get("protobuf"), ",") - tag, err := strconv.Atoi(tags[1]) - if err != nil { - panic("tag is not an integer") - } - wt := wiretype(tags[0]) - sizer, marshaler := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value - fi.oneofElems[t.Elem()] = &marshalElemInfo{ - wiretag: uint64(tag)<<3 | wt, - tagsize: SizeVarint(uint64(tag) << 3), - sizer: sizer, - marshaler: marshaler, - } - } -} - -type oneofMessage interface { - XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) -} - -// wiretype returns the wire encoding of the type. -func wiretype(encoding string) uint64 { - switch encoding { - case "fixed32": - return WireFixed32 - case "fixed64": - return WireFixed64 - case "varint", "zigzag32", "zigzag64": - return WireVarint - case "bytes": - return WireBytes - case "group": - return WireStartGroup - } - panic("unknown wire type " + encoding) -} - -// setTag fills up the tag (in wire format) and its size in the info of a field. -func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) { - fi.field = toField(f) - fi.wiretag = uint64(tag)<<3 | wt - fi.tagsize = SizeVarint(uint64(tag) << 3) -} - -// setMarshaler fills up the sizer and marshaler in the info of a field. -func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) { - switch f.Type.Kind() { - case reflect.Map: - // map field - fi.isPointer = true - fi.sizer, fi.marshaler = makeMapMarshaler(f) - return - case reflect.Ptr, reflect.Slice: - fi.isPointer = true - } - fi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false) -} - -// typeMarshaler returns the sizer and marshaler of a given field. -// t is the type of the field. -// tags is the generated "protobuf" tag of the field. -// If nozero is true, zero value is not marshaled to the wire. -// If oneof is true, it is a oneof field. -func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) { - encoding := tags[0] - - pointer := false - slice := false - if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { - slice = true - t = t.Elem() - } - if t.Kind() == reflect.Ptr { - pointer = true - t = t.Elem() - } - - packed := false - proto3 := false - validateUTF8 := true - for i := 2; i < len(tags); i++ { - if tags[i] == "packed" { - packed = true - } - if tags[i] == "proto3" { - proto3 = true - } - } - validateUTF8 = validateUTF8 && proto3 - - switch t.Kind() { - case reflect.Bool: - if pointer { - return sizeBoolPtr, appendBoolPtr - } - if slice { - if packed { - return sizeBoolPackedSlice, appendBoolPackedSlice - } - return sizeBoolSlice, appendBoolSlice - } - if nozero { - return sizeBoolValueNoZero, appendBoolValueNoZero - } - return sizeBoolValue, appendBoolValue - case reflect.Uint32: - switch encoding { - case "fixed32": - if pointer { - return sizeFixed32Ptr, appendFixed32Ptr - } - if slice { - if packed { - return sizeFixed32PackedSlice, appendFixed32PackedSlice - } - return sizeFixed32Slice, appendFixed32Slice - } - if nozero { - return sizeFixed32ValueNoZero, appendFixed32ValueNoZero - } - return sizeFixed32Value, appendFixed32Value - case "varint": - if pointer { - return sizeVarint32Ptr, appendVarint32Ptr - } - if slice { - if packed { - return sizeVarint32PackedSlice, appendVarint32PackedSlice - } - return sizeVarint32Slice, appendVarint32Slice - } - if nozero { - return sizeVarint32ValueNoZero, appendVarint32ValueNoZero - } - return sizeVarint32Value, appendVarint32Value - } - case reflect.Int32: - switch encoding { - case "fixed32": - if pointer { - return sizeFixedS32Ptr, appendFixedS32Ptr - } - if slice { - if packed { - return sizeFixedS32PackedSlice, appendFixedS32PackedSlice - } - return sizeFixedS32Slice, appendFixedS32Slice - } - if nozero { - return sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero - } - return sizeFixedS32Value, appendFixedS32Value - case "varint": - if pointer { - return sizeVarintS32Ptr, appendVarintS32Ptr - } - if slice { - if packed { - return sizeVarintS32PackedSlice, appendVarintS32PackedSlice - } - return sizeVarintS32Slice, appendVarintS32Slice - } - if nozero { - return sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero - } - return sizeVarintS32Value, appendVarintS32Value - case "zigzag32": - if pointer { - return sizeZigzag32Ptr, appendZigzag32Ptr - } - if slice { - if packed { - return sizeZigzag32PackedSlice, appendZigzag32PackedSlice - } - return sizeZigzag32Slice, appendZigzag32Slice - } - if nozero { - return sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero - } - return sizeZigzag32Value, appendZigzag32Value - } - case reflect.Uint64: - switch encoding { - case "fixed64": - if pointer { - return sizeFixed64Ptr, appendFixed64Ptr - } - if slice { - if packed { - return sizeFixed64PackedSlice, appendFixed64PackedSlice - } - return sizeFixed64Slice, appendFixed64Slice - } - if nozero { - return sizeFixed64ValueNoZero, appendFixed64ValueNoZero - } - return sizeFixed64Value, appendFixed64Value - case "varint": - if pointer { - return sizeVarint64Ptr, appendVarint64Ptr - } - if slice { - if packed { - return sizeVarint64PackedSlice, appendVarint64PackedSlice - } - return sizeVarint64Slice, appendVarint64Slice - } - if nozero { - return sizeVarint64ValueNoZero, appendVarint64ValueNoZero - } - return sizeVarint64Value, appendVarint64Value - } - case reflect.Int64: - switch encoding { - case "fixed64": - if pointer { - return sizeFixedS64Ptr, appendFixedS64Ptr - } - if slice { - if packed { - return sizeFixedS64PackedSlice, appendFixedS64PackedSlice - } - return sizeFixedS64Slice, appendFixedS64Slice - } - if nozero { - return sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero - } - return sizeFixedS64Value, appendFixedS64Value - case "varint": - if pointer { - return sizeVarintS64Ptr, appendVarintS64Ptr - } - if slice { - if packed { - return sizeVarintS64PackedSlice, appendVarintS64PackedSlice - } - return sizeVarintS64Slice, appendVarintS64Slice - } - if nozero { - return sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero - } - return sizeVarintS64Value, appendVarintS64Value - case "zigzag64": - if pointer { - return sizeZigzag64Ptr, appendZigzag64Ptr - } - if slice { - if packed { - return sizeZigzag64PackedSlice, appendZigzag64PackedSlice - } - return sizeZigzag64Slice, appendZigzag64Slice - } - if nozero { - return sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero - } - return sizeZigzag64Value, appendZigzag64Value - } - case reflect.Float32: - if pointer { - return sizeFloat32Ptr, appendFloat32Ptr - } - if slice { - if packed { - return sizeFloat32PackedSlice, appendFloat32PackedSlice - } - return sizeFloat32Slice, appendFloat32Slice - } - if nozero { - return sizeFloat32ValueNoZero, appendFloat32ValueNoZero - } - return sizeFloat32Value, appendFloat32Value - case reflect.Float64: - if pointer { - return sizeFloat64Ptr, appendFloat64Ptr - } - if slice { - if packed { - return sizeFloat64PackedSlice, appendFloat64PackedSlice - } - return sizeFloat64Slice, appendFloat64Slice - } - if nozero { - return sizeFloat64ValueNoZero, appendFloat64ValueNoZero - } - return sizeFloat64Value, appendFloat64Value - case reflect.String: - if validateUTF8 { - if pointer { - return sizeStringPtr, appendUTF8StringPtr - } - if slice { - return sizeStringSlice, appendUTF8StringSlice - } - if nozero { - return sizeStringValueNoZero, appendUTF8StringValueNoZero - } - return sizeStringValue, appendUTF8StringValue - } - if pointer { - return sizeStringPtr, appendStringPtr - } - if slice { - return sizeStringSlice, appendStringSlice - } - if nozero { - return sizeStringValueNoZero, appendStringValueNoZero - } - return sizeStringValue, appendStringValue - case reflect.Slice: - if slice { - return sizeBytesSlice, appendBytesSlice - } - if oneof { - // Oneof bytes field may also have "proto3" tag. - // We want to marshal it as a oneof field. Do this - // check before the proto3 check. - return sizeBytesOneof, appendBytesOneof - } - if proto3 { - return sizeBytes3, appendBytes3 - } - return sizeBytes, appendBytes - case reflect.Struct: - switch encoding { - case "group": - if slice { - return makeGroupSliceMarshaler(getMarshalInfo(t)) - } - return makeGroupMarshaler(getMarshalInfo(t)) - case "bytes": - if slice { - return makeMessageSliceMarshaler(getMarshalInfo(t)) - } - return makeMessageMarshaler(getMarshalInfo(t)) - } - } - panic(fmt.Sprintf("unknown or mismatched type: type: %v, wire type: %v", t, encoding)) -} - -// Below are functions to size/marshal a specific type of a field. -// They are stored in the field's info, and called by function pointers. -// They have type sizer or marshaler. - -func sizeFixed32Value(_ pointer, tagsize int) int { - return 4 + tagsize -} -func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint32() - if v == 0 { - return 0 - } - return 4 + tagsize -} -func sizeFixed32Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint32Ptr() - if p == nil { - return 0 - } - return 4 + tagsize -} -func sizeFixed32Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - return (4 + tagsize) * len(s) -} -func sizeFixed32PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return 0 - } - return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize -} -func sizeFixedS32Value(_ pointer, tagsize int) int { - return 4 + tagsize -} -func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - if v == 0 { - return 0 - } - return 4 + tagsize -} -func sizeFixedS32Ptr(ptr pointer, tagsize int) int { - p := ptr.getInt32Ptr() - if p == nil { - return 0 - } - return 4 + tagsize -} -func sizeFixedS32Slice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - return (4 + tagsize) * len(s) -} -func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - if len(s) == 0 { - return 0 - } - return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize -} -func sizeFloat32Value(_ pointer, tagsize int) int { - return 4 + tagsize -} -func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int { - v := math.Float32bits(*ptr.toFloat32()) - if v == 0 { - return 0 - } - return 4 + tagsize -} -func sizeFloat32Ptr(ptr pointer, tagsize int) int { - p := *ptr.toFloat32Ptr() - if p == nil { - return 0 - } - return 4 + tagsize -} -func sizeFloat32Slice(ptr pointer, tagsize int) int { - s := *ptr.toFloat32Slice() - return (4 + tagsize) * len(s) -} -func sizeFloat32PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toFloat32Slice() - if len(s) == 0 { - return 0 - } - return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize -} -func sizeFixed64Value(_ pointer, tagsize int) int { - return 8 + tagsize -} -func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint64() - if v == 0 { - return 0 - } - return 8 + tagsize -} -func sizeFixed64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint64Ptr() - if p == nil { - return 0 - } - return 8 + tagsize -} -func sizeFixed64Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - return (8 + tagsize) * len(s) -} -func sizeFixed64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return 0 - } - return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize -} -func sizeFixedS64Value(_ pointer, tagsize int) int { - return 8 + tagsize -} -func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - if v == 0 { - return 0 - } - return 8 + tagsize -} -func sizeFixedS64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toInt64Ptr() - if p == nil { - return 0 - } - return 8 + tagsize -} -func sizeFixedS64Slice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - return (8 + tagsize) * len(s) -} -func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return 0 - } - return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize -} -func sizeFloat64Value(_ pointer, tagsize int) int { - return 8 + tagsize -} -func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int { - v := math.Float64bits(*ptr.toFloat64()) - if v == 0 { - return 0 - } - return 8 + tagsize -} -func sizeFloat64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toFloat64Ptr() - if p == nil { - return 0 - } - return 8 + tagsize -} -func sizeFloat64Slice(ptr pointer, tagsize int) int { - s := *ptr.toFloat64Slice() - return (8 + tagsize) * len(s) -} -func sizeFloat64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toFloat64Slice() - if len(s) == 0 { - return 0 - } - return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize -} -func sizeVarint32Value(ptr pointer, tagsize int) int { - v := *ptr.toUint32() - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint32() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarint32Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint32Ptr() - if p == nil { - return 0 - } - return SizeVarint(uint64(*p)) + tagsize -} -func sizeVarint32Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) + tagsize - } - return n -} -func sizeVarint32PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeVarintS32Value(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS32Ptr(ptr pointer, tagsize int) int { - p := ptr.getInt32Ptr() - if p == nil { - return 0 - } - return SizeVarint(uint64(*p)) + tagsize -} -func sizeVarintS32Slice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) + tagsize - } - return n -} -func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeVarint64Value(ptr pointer, tagsize int) int { - v := *ptr.toUint64() - return SizeVarint(v) + tagsize -} -func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toUint64() - if v == 0 { - return 0 - } - return SizeVarint(v) + tagsize -} -func sizeVarint64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toUint64Ptr() - if p == nil { - return 0 - } - return SizeVarint(*p) + tagsize -} -func sizeVarint64Slice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - n := 0 - for _, v := range s { - n += SizeVarint(v) + tagsize - } - return n -} -func sizeVarint64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(v) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeVarintS64Value(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v)) + tagsize -} -func sizeVarintS64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toInt64Ptr() - if p == nil { - return 0 - } - return SizeVarint(uint64(*p)) + tagsize -} -func sizeVarintS64Slice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) + tagsize - } - return n -} -func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeZigzag32Value(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize -} -func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt32() - if v == 0 { - return 0 - } - return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize -} -func sizeZigzag32Ptr(ptr pointer, tagsize int) int { - p := ptr.getInt32Ptr() - if p == nil { - return 0 - } - v := *p - return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize -} -func sizeZigzag32Slice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize - } - return n -} -func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int { - s := ptr.getInt32Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeZigzag64Value(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize -} -func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toInt64() - if v == 0 { - return 0 - } - return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize -} -func sizeZigzag64Ptr(ptr pointer, tagsize int) int { - p := *ptr.toInt64Ptr() - if p == nil { - return 0 - } - v := *p - return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize -} -func sizeZigzag64Slice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize - } - return n -} -func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return 0 - } - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) - } - return n + SizeVarint(uint64(n)) + tagsize -} -func sizeBoolValue(_ pointer, tagsize int) int { - return 1 + tagsize -} -func sizeBoolValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toBool() - if !v { - return 0 - } - return 1 + tagsize -} -func sizeBoolPtr(ptr pointer, tagsize int) int { - p := *ptr.toBoolPtr() - if p == nil { - return 0 - } - return 1 + tagsize -} -func sizeBoolSlice(ptr pointer, tagsize int) int { - s := *ptr.toBoolSlice() - return (1 + tagsize) * len(s) -} -func sizeBoolPackedSlice(ptr pointer, tagsize int) int { - s := *ptr.toBoolSlice() - if len(s) == 0 { - return 0 - } - return len(s) + SizeVarint(uint64(len(s))) + tagsize -} -func sizeStringValue(ptr pointer, tagsize int) int { - v := *ptr.toString() - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeStringValueNoZero(ptr pointer, tagsize int) int { - v := *ptr.toString() - if v == "" { - return 0 - } - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeStringPtr(ptr pointer, tagsize int) int { - p := *ptr.toStringPtr() - if p == nil { - return 0 - } - v := *p - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeStringSlice(ptr pointer, tagsize int) int { - s := *ptr.toStringSlice() - n := 0 - for _, v := range s { - n += len(v) + SizeVarint(uint64(len(v))) + tagsize - } - return n -} -func sizeBytes(ptr pointer, tagsize int) int { - v := *ptr.toBytes() - if v == nil { - return 0 - } - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeBytes3(ptr pointer, tagsize int) int { - v := *ptr.toBytes() - if len(v) == 0 { - return 0 - } - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeBytesOneof(ptr pointer, tagsize int) int { - v := *ptr.toBytes() - return len(v) + SizeVarint(uint64(len(v))) + tagsize -} -func sizeBytesSlice(ptr pointer, tagsize int) int { - s := *ptr.toBytesSlice() - n := 0 - for _, v := range s { - n += len(v) + SizeVarint(uint64(len(v))) + tagsize - } - return n -} - -// appendFixed32 appends an encoded fixed32 to b. -func appendFixed32(b []byte, v uint32) []byte { - b = append(b, - byte(v), - byte(v>>8), - byte(v>>16), - byte(v>>24)) - return b -} - -// appendFixed64 appends an encoded fixed64 to b. -func appendFixed64(b []byte, v uint64) []byte { - b = append(b, - byte(v), - byte(v>>8), - byte(v>>16), - byte(v>>24), - byte(v>>32), - byte(v>>40), - byte(v>>48), - byte(v>>56)) - return b -} - -// appendVarint appends an encoded varint to b. -func appendVarint(b []byte, v uint64) []byte { - // TODO: make 1-byte (maybe 2-byte) case inline-able, once we - // have non-leaf inliner. - switch { - case v < 1<<7: - b = append(b, byte(v)) - case v < 1<<14: - b = append(b, - byte(v&0x7f|0x80), - byte(v>>7)) - case v < 1<<21: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte(v>>14)) - case v < 1<<28: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte(v>>21)) - case v < 1<<35: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte(v>>28)) - case v < 1<<42: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte(v>>35)) - case v < 1<<49: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte(v>>42)) - case v < 1<<56: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte((v>>42)&0x7f|0x80), - byte(v>>49)) - case v < 1<<63: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte((v>>42)&0x7f|0x80), - byte((v>>49)&0x7f|0x80), - byte(v>>56)) - default: - b = append(b, - byte(v&0x7f|0x80), - byte((v>>7)&0x7f|0x80), - byte((v>>14)&0x7f|0x80), - byte((v>>21)&0x7f|0x80), - byte((v>>28)&0x7f|0x80), - byte((v>>35)&0x7f|0x80), - byte((v>>42)&0x7f|0x80), - byte((v>>49)&0x7f|0x80), - byte((v>>56)&0x7f|0x80), - 1) - } - return b -} - -func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, *p) - return b, nil -} -func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - } - return b, nil -} -func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(4*len(s))) - for _, v := range s { - b = appendFixed32(b, v) - } - return b, nil -} -func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(v)) - return b, nil -} -func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(v)) - return b, nil -} -func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := ptr.getInt32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(*p)) - return b, nil -} -func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed32(b, uint32(v)) - } - return b, nil -} -func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(4*len(s))) - for _, v := range s { - b = appendFixed32(b, uint32(v)) - } - return b, nil -} -func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float32bits(*ptr.toFloat32()) - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float32bits(*ptr.toFloat32()) - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, v) - return b, nil -} -func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toFloat32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed32(b, math.Float32bits(*p)) - return b, nil -} -func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed32(b, math.Float32bits(v)) - } - return b, nil -} -func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(4*len(s))) - for _, v := range s { - b = appendFixed32(b, math.Float32bits(v)) - } - return b, nil -} -func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, *p) - return b, nil -} -func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - } - return b, nil -} -func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(8*len(s))) - for _, v := range s { - b = appendFixed64(b, v) - } - return b, nil -} -func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(v)) - return b, nil -} -func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(v)) - return b, nil -} -func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toInt64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(*p)) - return b, nil -} -func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed64(b, uint64(v)) - } - return b, nil -} -func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(8*len(s))) - for _, v := range s { - b = appendFixed64(b, uint64(v)) - } - return b, nil -} -func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float64bits(*ptr.toFloat64()) - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := math.Float64bits(*ptr.toFloat64()) - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, v) - return b, nil -} -func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toFloat64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendFixed64(b, math.Float64bits(*p)) - return b, nil -} -func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendFixed64(b, math.Float64bits(v)) - } - return b, nil -} -func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toFloat64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(8*len(s))) - for _, v := range s { - b = appendFixed64(b, math.Float64bits(v)) - } - return b, nil -} -func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(*p)) - return b, nil -} -func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := ptr.getInt32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(*p)) - return b, nil -} -func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - b = appendVarint(b, wiretag) - b = appendVarint(b, v) - return b, nil -} -func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toUint64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, v) - return b, nil -} -func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toUint64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, *p) - return b, nil -} -func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, v) - } - return b, nil -} -func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toUint64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(v) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, v) - } - return b, nil -} -func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - return b, nil -} -func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toInt64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(*p)) - return b, nil -} -func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v)) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v)) - } - return b, nil -} -func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - return b, nil -} -func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt32() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - return b, nil -} -func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := ptr.getInt32Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - v := *p - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - return b, nil -} -func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - } - return b, nil -} -func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := ptr.getInt32Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) - } - return b, nil -} -func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - return b, nil -} -func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toInt64() - if v == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - return b, nil -} -func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toInt64Ptr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - v := *p - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - return b, nil -} -func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - } - return b, nil -} -func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toInt64Slice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - // compute size - n := 0 - for _, v := range s { - n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) - } - b = appendVarint(b, uint64(n)) - for _, v := range s { - b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) - } - return b, nil -} -func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBool() - b = appendVarint(b, wiretag) - if v { - b = append(b, 1) - } else { - b = append(b, 0) - } - return b, nil -} -func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBool() - if !v { - return b, nil - } - b = appendVarint(b, wiretag) - b = append(b, 1) - return b, nil -} - -func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toBoolPtr() - if p == nil { - return b, nil - } - b = appendVarint(b, wiretag) - if *p { - b = append(b, 1) - } else { - b = append(b, 0) - } - return b, nil -} -func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toBoolSlice() - for _, v := range s { - b = appendVarint(b, wiretag) - if v { - b = append(b, 1) - } else { - b = append(b, 0) - } - } - return b, nil -} -func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toBoolSlice() - if len(s) == 0 { - return b, nil - } - b = appendVarint(b, wiretag&^7|WireBytes) - b = appendVarint(b, uint64(len(s))) - for _, v := range s { - if v { - b = append(b, 1) - } else { - b = append(b, 0) - } - } - return b, nil -} -func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toString() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toString() - if v == "" { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - p := *ptr.toStringPtr() - if p == nil { - return b, nil - } - v := *p - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toStringSlice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - } - return b, nil -} -func appendUTF8StringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - var invalidUTF8 bool - v := *ptr.toString() - if !utf8.ValidString(v) { - invalidUTF8 = true - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - if invalidUTF8 { - return b, errInvalidUTF8 - } - return b, nil -} -func appendUTF8StringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - var invalidUTF8 bool - v := *ptr.toString() - if v == "" { - return b, nil - } - if !utf8.ValidString(v) { - invalidUTF8 = true - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - if invalidUTF8 { - return b, errInvalidUTF8 - } - return b, nil -} -func appendUTF8StringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - var invalidUTF8 bool - p := *ptr.toStringPtr() - if p == nil { - return b, nil - } - v := *p - if !utf8.ValidString(v) { - invalidUTF8 = true - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - if invalidUTF8 { - return b, errInvalidUTF8 - } - return b, nil -} -func appendUTF8StringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - var invalidUTF8 bool - s := *ptr.toStringSlice() - for _, v := range s { - if !utf8.ValidString(v) { - invalidUTF8 = true - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - } - if invalidUTF8 { - return b, errInvalidUTF8 - } - return b, nil -} -func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBytes() - if v == nil { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBytes() - if len(v) == 0 { - return b, nil - } - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - v := *ptr.toBytes() - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - return b, nil -} -func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { - s := *ptr.toBytesSlice() - for _, v := range s { - b = appendVarint(b, wiretag) - b = appendVarint(b, uint64(len(v))) - b = append(b, v...) - } - return b, nil -} - -// makeGroupMarshaler returns the sizer and marshaler for a group. -// u is the marshal info of the underlying message. -func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - p := ptr.getPointer() - if p.isNil() { - return 0 - } - return u.size(p) + 2*tagsize - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - p := ptr.getPointer() - if p.isNil() { - return b, nil - } - var err error - b = appendVarint(b, wiretag) // start group - b, err = u.marshal(b, p, deterministic) - b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group - return b, err - } -} - -// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice. -// u is the marshal info of the underlying message. -func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - s := ptr.getPointerSlice() - n := 0 - for _, v := range s { - if v.isNil() { - continue - } - n += u.size(v) + 2*tagsize - } - return n - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - s := ptr.getPointerSlice() - var err error - var nerr nonFatal - for _, v := range s { - if v.isNil() { - return b, errRepeatedHasNil - } - b = appendVarint(b, wiretag) // start group - b, err = u.marshal(b, v, deterministic) - b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group - if !nerr.Merge(err) { - if err == ErrNil { - err = errRepeatedHasNil - } - return b, err - } - } - return b, nerr.E - } -} - -// makeMessageMarshaler returns the sizer and marshaler for a message field. -// u is the marshal info of the message. -func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - p := ptr.getPointer() - if p.isNil() { - return 0 - } - siz := u.size(p) - return siz + SizeVarint(uint64(siz)) + tagsize - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - p := ptr.getPointer() - if p.isNil() { - return b, nil - } - b = appendVarint(b, wiretag) - siz := u.cachedsize(p) - b = appendVarint(b, uint64(siz)) - return u.marshal(b, p, deterministic) - } -} - -// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice. -// u is the marshal info of the message. -func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) { - return func(ptr pointer, tagsize int) int { - s := ptr.getPointerSlice() - n := 0 - for _, v := range s { - if v.isNil() { - continue - } - siz := u.size(v) - n += siz + SizeVarint(uint64(siz)) + tagsize - } - return n - }, - func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { - s := ptr.getPointerSlice() - var err error - var nerr nonFatal - for _, v := range s { - if v.isNil() { - return b, errRepeatedHasNil - } - b = appendVarint(b, wiretag) - siz := u.cachedsize(v) - b = appendVarint(b, uint64(siz)) - b, err = u.marshal(b, v, deterministic) - - if !nerr.Merge(err) { - if err == ErrNil { - err = errRepeatedHasNil - } - return b, err - } - } - return b, nerr.E - } -} - -// makeMapMarshaler returns the sizer and marshaler for a map field. -// f is the pointer to the reflect data structure of the field. -func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) { - // figure out key and value type - t := f.Type - keyType := t.Key() - valType := t.Elem() - keyTags := strings.Split(f.Tag.Get("protobuf_key"), ",") - valTags := strings.Split(f.Tag.Get("protobuf_val"), ",") - keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map - valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map - keyWireTag := 1<<3 | wiretype(keyTags[0]) - valWireTag := 2<<3 | wiretype(valTags[0]) - - // We create an interface to get the addresses of the map key and value. - // If value is pointer-typed, the interface is a direct interface, the - // idata itself is the value. Otherwise, the idata is the pointer to the - // value. - // Key cannot be pointer-typed. - valIsPtr := valType.Kind() == reflect.Ptr - - // If value is a message with nested maps, calling - // valSizer in marshal may be quadratic. We should use - // cached version in marshal (but not in size). - // If value is not message type, we don't have size cache, - // but it cannot be nested either. Just use valSizer. - valCachedSizer := valSizer - if valIsPtr && valType.Elem().Kind() == reflect.Struct { - u := getMarshalInfo(valType.Elem()) - valCachedSizer = func(ptr pointer, tagsize int) int { - // Same as message sizer, but use cache. - p := ptr.getPointer() - if p.isNil() { - return 0 - } - siz := u.cachedsize(p) - return siz + SizeVarint(uint64(siz)) + tagsize - } - } - return func(ptr pointer, tagsize int) int { - m := ptr.asPointerTo(t).Elem() // the map - n := 0 - for _, k := range m.MapKeys() { - ki := k.Interface() - vi := m.MapIndex(k).Interface() - kaddr := toAddrPointer(&ki, false) // pointer to key - vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value - siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) - n += siz + SizeVarint(uint64(siz)) + tagsize - } - return n - }, - func(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) { - m := ptr.asPointerTo(t).Elem() // the map - var err error - keys := m.MapKeys() - if len(keys) > 1 && deterministic { - sort.Sort(mapKeys(keys)) - } - - var nerr nonFatal - for _, k := range keys { - ki := k.Interface() - vi := m.MapIndex(k).Interface() - kaddr := toAddrPointer(&ki, false) // pointer to key - vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value - b = appendVarint(b, tag) - siz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) - b = appendVarint(b, uint64(siz)) - b, err = keyMarshaler(b, kaddr, keyWireTag, deterministic) - if !nerr.Merge(err) { - return b, err - } - b, err = valMarshaler(b, vaddr, valWireTag, deterministic) - if err != ErrNil && !nerr.Merge(err) { // allow nil value in map - return b, err - } - } - return b, nerr.E - } -} - -// makeOneOfMarshaler returns the sizer and marshaler for a oneof field. -// fi is the marshal info of the field. -// f is the pointer to the reflect data structure of the field. -func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) { - // Oneof field is an interface. We need to get the actual data type on the fly. - t := f.Type - return func(ptr pointer, _ int) int { - p := ptr.getInterfacePointer() - if p.isNil() { - return 0 - } - v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct - telem := v.Type() - e := fi.oneofElems[telem] - return e.sizer(p, e.tagsize) - }, - func(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) { - p := ptr.getInterfacePointer() - if p.isNil() { - return b, nil - } - v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct - telem := v.Type() - if telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() { - return b, errOneofHasNil - } - e := fi.oneofElems[telem] - return e.marshaler(b, p, e.wiretag, deterministic) - } -} - -// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field. -func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int { - m, mu := ext.extensionsRead() - if m == nil { - return 0 - } - mu.Lock() - - n := 0 - for _, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - n += len(e.enc) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - n += ei.sizer(p, ei.tagsize) - } - mu.Unlock() - return n -} - -// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b. -func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { - m, mu := ext.extensionsRead() - if m == nil { - return b, nil - } - mu.Lock() - defer mu.Unlock() - - var err error - var nerr nonFatal - - // Fast-path for common cases: zero or one extensions. - // Don't bother sorting the keys. - if len(m) <= 1 { - for _, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - b = append(b, e.enc...) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, ei.wiretag, deterministic) - if !nerr.Merge(err) { - return b, err - } - } - return b, nerr.E - } - - // Sort the keys to provide a deterministic encoding. - // Not sure this is required, but the old code does it. - keys := make([]int, 0, len(m)) - for k := range m { - keys = append(keys, int(k)) - } - sort.Ints(keys) - - for _, k := range keys { - e := m[int32(k)] - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - b = append(b, e.enc...) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, ei.wiretag, deterministic) - if !nerr.Merge(err) { - return b, err - } - } - return b, nerr.E -} - -// message set format is: -// message MessageSet { -// repeated group Item = 1 { -// required int32 type_id = 2; -// required string message = 3; -// }; -// } - -// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field -// in message set format (above). -func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int { - m, mu := ext.extensionsRead() - if m == nil { - return 0 - } - mu.Lock() - - n := 0 - for id, e := range m { - n += 2 // start group, end group. tag = 1 (size=1) - n += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1) - - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint - siz := len(msgWithLen) - n += siz + 1 // message, tag = 3 (size=1) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - n += ei.sizer(p, 1) // message, tag = 3 (size=1) - } - mu.Unlock() - return n -} - -// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above) -// to the end of byte slice b. -func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { - m, mu := ext.extensionsRead() - if m == nil { - return b, nil - } - mu.Lock() - defer mu.Unlock() - - var err error - var nerr nonFatal - - // Fast-path for common cases: zero or one extensions. - // Don't bother sorting the keys. - if len(m) <= 1 { - for id, e := range m { - b = append(b, 1<<3|WireStartGroup) - b = append(b, 2<<3|WireVarint) - b = appendVarint(b, uint64(id)) - - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint - b = append(b, 3<<3|WireBytes) - b = append(b, msgWithLen...) - b = append(b, 1<<3|WireEndGroup) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) - if !nerr.Merge(err) { - return b, err - } - b = append(b, 1<<3|WireEndGroup) - } - return b, nerr.E - } - - // Sort the keys to provide a deterministic encoding. - keys := make([]int, 0, len(m)) - for k := range m { - keys = append(keys, int(k)) - } - sort.Ints(keys) - - for _, id := range keys { - e := m[int32(id)] - b = append(b, 1<<3|WireStartGroup) - b = append(b, 2<<3|WireVarint) - b = appendVarint(b, uint64(id)) - - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint - b = append(b, 3<<3|WireBytes) - b = append(b, msgWithLen...) - b = append(b, 1<<3|WireEndGroup) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) - b = append(b, 1<<3|WireEndGroup) - if !nerr.Merge(err) { - return b, err - } - } - return b, nerr.E -} - -// sizeV1Extensions computes the size of encoded data for a V1-API extension field. -func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int { - if m == nil { - return 0 - } - - n := 0 - for _, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - n += len(e.enc) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - n += ei.sizer(p, ei.tagsize) - } - return n -} - -// appendV1Extensions marshals a V1-API extension field to the end of byte slice b. -func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) { - if m == nil { - return b, nil - } - - // Sort the keys to provide a deterministic encoding. - keys := make([]int, 0, len(m)) - for k := range m { - keys = append(keys, int(k)) - } - sort.Ints(keys) - - var err error - var nerr nonFatal - for _, k := range keys { - e := m[int32(k)] - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - b = append(b, e.enc...) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - ei := u.getExtElemInfo(e.desc) - v := e.value - p := toAddrPointer(&v, ei.isptr) - b, err = ei.marshaler(b, p, ei.wiretag, deterministic) - if !nerr.Merge(err) { - return b, err - } - } - return b, nerr.E -} - -// newMarshaler is the interface representing objects that can marshal themselves. -// -// This exists to support protoc-gen-go generated messages. -// The proto package will stop type-asserting to this interface in the future. -// -// DO NOT DEPEND ON THIS. -type newMarshaler interface { - XXX_Size() int - XXX_Marshal(b []byte, deterministic bool) ([]byte, error) -} - -// Size returns the encoded size of a protocol buffer message. -// This is the main entry point. -func Size(pb Message) int { - if m, ok := pb.(newMarshaler); ok { - return m.XXX_Size() - } - if m, ok := pb.(Marshaler); ok { - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - b, _ := m.Marshal() - return len(b) - } - // in case somehow we didn't generate the wrapper - if pb == nil { - return 0 - } - var info InternalMessageInfo - return info.Size(pb) -} - -// Marshal takes a protocol buffer message -// and encodes it into the wire format, returning the data. -// This is the main entry point. -func Marshal(pb Message) ([]byte, error) { - if m, ok := pb.(newMarshaler); ok { - siz := m.XXX_Size() - b := make([]byte, 0, siz) - return m.XXX_Marshal(b, false) - } - if m, ok := pb.(Marshaler); ok { - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - return m.Marshal() - } - // in case somehow we didn't generate the wrapper - if pb == nil { - return nil, ErrNil - } - var info InternalMessageInfo - siz := info.Size(pb) - b := make([]byte, 0, siz) - return info.Marshal(b, pb, false) -} - -// Marshal takes a protocol buffer message -// and encodes it into the wire format, writing the result to the -// Buffer. -// This is an alternative entry point. It is not necessary to use -// a Buffer for most applications. -func (p *Buffer) Marshal(pb Message) error { - var err error - if m, ok := pb.(newMarshaler); ok { - siz := m.XXX_Size() - p.grow(siz) // make sure buf has enough capacity - p.buf, err = m.XXX_Marshal(p.buf, p.deterministic) - return err - } - if m, ok := pb.(Marshaler); ok { - // If the message can marshal itself, let it do it, for compatibility. - // NOTE: This is not efficient. - b, err := m.Marshal() - p.buf = append(p.buf, b...) - return err - } - // in case somehow we didn't generate the wrapper - if pb == nil { - return ErrNil - } - var info InternalMessageInfo - siz := info.Size(pb) - p.grow(siz) // make sure buf has enough capacity - p.buf, err = info.Marshal(p.buf, pb, p.deterministic) - return err -} - -// grow grows the buffer's capacity, if necessary, to guarantee space for -// another n bytes. After grow(n), at least n bytes can be written to the -// buffer without another allocation. -func (p *Buffer) grow(n int) { - need := len(p.buf) + n - if need <= cap(p.buf) { - return - } - newCap := len(p.buf) * 2 - if newCap < need { - newCap = need - } - p.buf = append(make([]byte, 0, newCap), p.buf...) -} diff --git a/vendor/github.com/golang/protobuf/proto/table_merge.go b/vendor/github.com/golang/protobuf/proto/table_merge.go deleted file mode 100644 index 5525def6a..000000000 --- a/vendor/github.com/golang/protobuf/proto/table_merge.go +++ /dev/null @@ -1,654 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -package proto - -import ( - "fmt" - "reflect" - "strings" - "sync" - "sync/atomic" -) - -// Merge merges the src message into dst. -// This assumes that dst and src of the same type and are non-nil. -func (a *InternalMessageInfo) Merge(dst, src Message) { - mi := atomicLoadMergeInfo(&a.merge) - if mi == nil { - mi = getMergeInfo(reflect.TypeOf(dst).Elem()) - atomicStoreMergeInfo(&a.merge, mi) - } - mi.merge(toPointer(&dst), toPointer(&src)) -} - -type mergeInfo struct { - typ reflect.Type - - initialized int32 // 0: only typ is valid, 1: everything is valid - lock sync.Mutex - - fields []mergeFieldInfo - unrecognized field // Offset of XXX_unrecognized -} - -type mergeFieldInfo struct { - field field // Offset of field, guaranteed to be valid - - // isPointer reports whether the value in the field is a pointer. - // This is true for the following situations: - // * Pointer to struct - // * Pointer to basic type (proto2 only) - // * Slice (first value in slice header is a pointer) - // * String (first value in string header is a pointer) - isPointer bool - - // basicWidth reports the width of the field assuming that it is directly - // embedded in the struct (as is the case for basic types in proto3). - // The possible values are: - // 0: invalid - // 1: bool - // 4: int32, uint32, float32 - // 8: int64, uint64, float64 - basicWidth int - - // Where dst and src are pointers to the types being merged. - merge func(dst, src pointer) -} - -var ( - mergeInfoMap = map[reflect.Type]*mergeInfo{} - mergeInfoLock sync.Mutex -) - -func getMergeInfo(t reflect.Type) *mergeInfo { - mergeInfoLock.Lock() - defer mergeInfoLock.Unlock() - mi := mergeInfoMap[t] - if mi == nil { - mi = &mergeInfo{typ: t} - mergeInfoMap[t] = mi - } - return mi -} - -// merge merges src into dst assuming they are both of type *mi.typ. -func (mi *mergeInfo) merge(dst, src pointer) { - if dst.isNil() { - panic("proto: nil destination") - } - if src.isNil() { - return // Nothing to do. - } - - if atomic.LoadInt32(&mi.initialized) == 0 { - mi.computeMergeInfo() - } - - for _, fi := range mi.fields { - sfp := src.offset(fi.field) - - // As an optimization, we can avoid the merge function call cost - // if we know for sure that the source will have no effect - // by checking if it is the zero value. - if unsafeAllowed { - if fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string - continue - } - if fi.basicWidth > 0 { - switch { - case fi.basicWidth == 1 && !*sfp.toBool(): - continue - case fi.basicWidth == 4 && *sfp.toUint32() == 0: - continue - case fi.basicWidth == 8 && *sfp.toUint64() == 0: - continue - } - } - } - - dfp := dst.offset(fi.field) - fi.merge(dfp, sfp) - } - - // TODO: Make this faster? - out := dst.asPointerTo(mi.typ).Elem() - in := src.asPointerTo(mi.typ).Elem() - if emIn, err := extendable(in.Addr().Interface()); err == nil { - emOut, _ := extendable(out.Addr().Interface()) - mIn, muIn := emIn.extensionsRead() - if mIn != nil { - mOut := emOut.extensionsWrite() - muIn.Lock() - mergeExtension(mOut, mIn) - muIn.Unlock() - } - } - - if mi.unrecognized.IsValid() { - if b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 { - *dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...) - } - } -} - -func (mi *mergeInfo) computeMergeInfo() { - mi.lock.Lock() - defer mi.lock.Unlock() - if mi.initialized != 0 { - return - } - t := mi.typ - n := t.NumField() - - props := GetProperties(t) - for i := 0; i < n; i++ { - f := t.Field(i) - if strings.HasPrefix(f.Name, "XXX_") { - continue - } - - mfi := mergeFieldInfo{field: toField(&f)} - tf := f.Type - - // As an optimization, we can avoid the merge function call cost - // if we know for sure that the source will have no effect - // by checking if it is the zero value. - if unsafeAllowed { - switch tf.Kind() { - case reflect.Ptr, reflect.Slice, reflect.String: - // As a special case, we assume slices and strings are pointers - // since we know that the first field in the SliceSlice or - // StringHeader is a data pointer. - mfi.isPointer = true - case reflect.Bool: - mfi.basicWidth = 1 - case reflect.Int32, reflect.Uint32, reflect.Float32: - mfi.basicWidth = 4 - case reflect.Int64, reflect.Uint64, reflect.Float64: - mfi.basicWidth = 8 - } - } - - // Unwrap tf to get at its most basic type. - var isPointer, isSlice bool - if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { - isSlice = true - tf = tf.Elem() - } - if tf.Kind() == reflect.Ptr { - isPointer = true - tf = tf.Elem() - } - if isPointer && isSlice && tf.Kind() != reflect.Struct { - panic("both pointer and slice for basic type in " + tf.Name()) - } - - switch tf.Kind() { - case reflect.Int32: - switch { - case isSlice: // E.g., []int32 - mfi.merge = func(dst, src pointer) { - // NOTE: toInt32Slice is not defined (see pointer_reflect.go). - /* - sfsp := src.toInt32Slice() - if *sfsp != nil { - dfsp := dst.toInt32Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []int64{} - } - } - */ - sfs := src.getInt32Slice() - if sfs != nil { - dfs := dst.getInt32Slice() - dfs = append(dfs, sfs...) - if dfs == nil { - dfs = []int32{} - } - dst.setInt32Slice(dfs) - } - } - case isPointer: // E.g., *int32 - mfi.merge = func(dst, src pointer) { - // NOTE: toInt32Ptr is not defined (see pointer_reflect.go). - /* - sfpp := src.toInt32Ptr() - if *sfpp != nil { - dfpp := dst.toInt32Ptr() - if *dfpp == nil { - *dfpp = Int32(**sfpp) - } else { - **dfpp = **sfpp - } - } - */ - sfp := src.getInt32Ptr() - if sfp != nil { - dfp := dst.getInt32Ptr() - if dfp == nil { - dst.setInt32Ptr(*sfp) - } else { - *dfp = *sfp - } - } - } - default: // E.g., int32 - mfi.merge = func(dst, src pointer) { - if v := *src.toInt32(); v != 0 { - *dst.toInt32() = v - } - } - } - case reflect.Int64: - switch { - case isSlice: // E.g., []int64 - mfi.merge = func(dst, src pointer) { - sfsp := src.toInt64Slice() - if *sfsp != nil { - dfsp := dst.toInt64Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []int64{} - } - } - } - case isPointer: // E.g., *int64 - mfi.merge = func(dst, src pointer) { - sfpp := src.toInt64Ptr() - if *sfpp != nil { - dfpp := dst.toInt64Ptr() - if *dfpp == nil { - *dfpp = Int64(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., int64 - mfi.merge = func(dst, src pointer) { - if v := *src.toInt64(); v != 0 { - *dst.toInt64() = v - } - } - } - case reflect.Uint32: - switch { - case isSlice: // E.g., []uint32 - mfi.merge = func(dst, src pointer) { - sfsp := src.toUint32Slice() - if *sfsp != nil { - dfsp := dst.toUint32Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []uint32{} - } - } - } - case isPointer: // E.g., *uint32 - mfi.merge = func(dst, src pointer) { - sfpp := src.toUint32Ptr() - if *sfpp != nil { - dfpp := dst.toUint32Ptr() - if *dfpp == nil { - *dfpp = Uint32(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., uint32 - mfi.merge = func(dst, src pointer) { - if v := *src.toUint32(); v != 0 { - *dst.toUint32() = v - } - } - } - case reflect.Uint64: - switch { - case isSlice: // E.g., []uint64 - mfi.merge = func(dst, src pointer) { - sfsp := src.toUint64Slice() - if *sfsp != nil { - dfsp := dst.toUint64Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []uint64{} - } - } - } - case isPointer: // E.g., *uint64 - mfi.merge = func(dst, src pointer) { - sfpp := src.toUint64Ptr() - if *sfpp != nil { - dfpp := dst.toUint64Ptr() - if *dfpp == nil { - *dfpp = Uint64(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., uint64 - mfi.merge = func(dst, src pointer) { - if v := *src.toUint64(); v != 0 { - *dst.toUint64() = v - } - } - } - case reflect.Float32: - switch { - case isSlice: // E.g., []float32 - mfi.merge = func(dst, src pointer) { - sfsp := src.toFloat32Slice() - if *sfsp != nil { - dfsp := dst.toFloat32Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []float32{} - } - } - } - case isPointer: // E.g., *float32 - mfi.merge = func(dst, src pointer) { - sfpp := src.toFloat32Ptr() - if *sfpp != nil { - dfpp := dst.toFloat32Ptr() - if *dfpp == nil { - *dfpp = Float32(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., float32 - mfi.merge = func(dst, src pointer) { - if v := *src.toFloat32(); v != 0 { - *dst.toFloat32() = v - } - } - } - case reflect.Float64: - switch { - case isSlice: // E.g., []float64 - mfi.merge = func(dst, src pointer) { - sfsp := src.toFloat64Slice() - if *sfsp != nil { - dfsp := dst.toFloat64Slice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []float64{} - } - } - } - case isPointer: // E.g., *float64 - mfi.merge = func(dst, src pointer) { - sfpp := src.toFloat64Ptr() - if *sfpp != nil { - dfpp := dst.toFloat64Ptr() - if *dfpp == nil { - *dfpp = Float64(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., float64 - mfi.merge = func(dst, src pointer) { - if v := *src.toFloat64(); v != 0 { - *dst.toFloat64() = v - } - } - } - case reflect.Bool: - switch { - case isSlice: // E.g., []bool - mfi.merge = func(dst, src pointer) { - sfsp := src.toBoolSlice() - if *sfsp != nil { - dfsp := dst.toBoolSlice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []bool{} - } - } - } - case isPointer: // E.g., *bool - mfi.merge = func(dst, src pointer) { - sfpp := src.toBoolPtr() - if *sfpp != nil { - dfpp := dst.toBoolPtr() - if *dfpp == nil { - *dfpp = Bool(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., bool - mfi.merge = func(dst, src pointer) { - if v := *src.toBool(); v { - *dst.toBool() = v - } - } - } - case reflect.String: - switch { - case isSlice: // E.g., []string - mfi.merge = func(dst, src pointer) { - sfsp := src.toStringSlice() - if *sfsp != nil { - dfsp := dst.toStringSlice() - *dfsp = append(*dfsp, *sfsp...) - if *dfsp == nil { - *dfsp = []string{} - } - } - } - case isPointer: // E.g., *string - mfi.merge = func(dst, src pointer) { - sfpp := src.toStringPtr() - if *sfpp != nil { - dfpp := dst.toStringPtr() - if *dfpp == nil { - *dfpp = String(**sfpp) - } else { - **dfpp = **sfpp - } - } - } - default: // E.g., string - mfi.merge = func(dst, src pointer) { - if v := *src.toString(); v != "" { - *dst.toString() = v - } - } - } - case reflect.Slice: - isProto3 := props.Prop[i].proto3 - switch { - case isPointer: - panic("bad pointer in byte slice case in " + tf.Name()) - case tf.Elem().Kind() != reflect.Uint8: - panic("bad element kind in byte slice case in " + tf.Name()) - case isSlice: // E.g., [][]byte - mfi.merge = func(dst, src pointer) { - sbsp := src.toBytesSlice() - if *sbsp != nil { - dbsp := dst.toBytesSlice() - for _, sb := range *sbsp { - if sb == nil { - *dbsp = append(*dbsp, nil) - } else { - *dbsp = append(*dbsp, append([]byte{}, sb...)) - } - } - if *dbsp == nil { - *dbsp = [][]byte{} - } - } - } - default: // E.g., []byte - mfi.merge = func(dst, src pointer) { - sbp := src.toBytes() - if *sbp != nil { - dbp := dst.toBytes() - if !isProto3 || len(*sbp) > 0 { - *dbp = append([]byte{}, *sbp...) - } - } - } - } - case reflect.Struct: - switch { - case !isPointer: - panic(fmt.Sprintf("message field %s without pointer", tf)) - case isSlice: // E.g., []*pb.T - mi := getMergeInfo(tf) - mfi.merge = func(dst, src pointer) { - sps := src.getPointerSlice() - if sps != nil { - dps := dst.getPointerSlice() - for _, sp := range sps { - var dp pointer - if !sp.isNil() { - dp = valToPointer(reflect.New(tf)) - mi.merge(dp, sp) - } - dps = append(dps, dp) - } - if dps == nil { - dps = []pointer{} - } - dst.setPointerSlice(dps) - } - } - default: // E.g., *pb.T - mi := getMergeInfo(tf) - mfi.merge = func(dst, src pointer) { - sp := src.getPointer() - if !sp.isNil() { - dp := dst.getPointer() - if dp.isNil() { - dp = valToPointer(reflect.New(tf)) - dst.setPointer(dp) - } - mi.merge(dp, sp) - } - } - } - case reflect.Map: - switch { - case isPointer || isSlice: - panic("bad pointer or slice in map case in " + tf.Name()) - default: // E.g., map[K]V - mfi.merge = func(dst, src pointer) { - sm := src.asPointerTo(tf).Elem() - if sm.Len() == 0 { - return - } - dm := dst.asPointerTo(tf).Elem() - if dm.IsNil() { - dm.Set(reflect.MakeMap(tf)) - } - - switch tf.Elem().Kind() { - case reflect.Ptr: // Proto struct (e.g., *T) - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - val = reflect.ValueOf(Clone(val.Interface().(Message))) - dm.SetMapIndex(key, val) - } - case reflect.Slice: // E.g. Bytes type (e.g., []byte) - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) - dm.SetMapIndex(key, val) - } - default: // Basic type (e.g., string) - for _, key := range sm.MapKeys() { - val := sm.MapIndex(key) - dm.SetMapIndex(key, val) - } - } - } - } - case reflect.Interface: - // Must be oneof field. - switch { - case isPointer || isSlice: - panic("bad pointer or slice in interface case in " + tf.Name()) - default: // E.g., interface{} - // TODO: Make this faster? - mfi.merge = func(dst, src pointer) { - su := src.asPointerTo(tf).Elem() - if !su.IsNil() { - du := dst.asPointerTo(tf).Elem() - typ := su.Elem().Type() - if du.IsNil() || du.Elem().Type() != typ { - du.Set(reflect.New(typ.Elem())) // Initialize interface if empty - } - sv := su.Elem().Elem().Field(0) - if sv.Kind() == reflect.Ptr && sv.IsNil() { - return - } - dv := du.Elem().Elem().Field(0) - if dv.Kind() == reflect.Ptr && dv.IsNil() { - dv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty - } - switch sv.Type().Kind() { - case reflect.Ptr: // Proto struct (e.g., *T) - Merge(dv.Interface().(Message), sv.Interface().(Message)) - case reflect.Slice: // E.g. Bytes type (e.g., []byte) - dv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...))) - default: // Basic type (e.g., string) - dv.Set(sv) - } - } - } - } - default: - panic(fmt.Sprintf("merger not found for type:%s", tf)) - } - mi.fields = append(mi.fields, mfi) - } - - mi.unrecognized = invalidField - if f, ok := t.FieldByName("XXX_unrecognized"); ok { - if f.Type != reflect.TypeOf([]byte{}) { - panic("expected XXX_unrecognized to be of type []byte") - } - mi.unrecognized = toField(&f) - } - - atomic.StoreInt32(&mi.initialized, 1) -} diff --git a/vendor/github.com/golang/protobuf/proto/table_unmarshal.go b/vendor/github.com/golang/protobuf/proto/table_unmarshal.go deleted file mode 100644 index fd4afec8d..000000000 --- a/vendor/github.com/golang/protobuf/proto/table_unmarshal.go +++ /dev/null @@ -1,2051 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2016 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -package proto - -import ( - "errors" - "fmt" - "io" - "math" - "reflect" - "strconv" - "strings" - "sync" - "sync/atomic" - "unicode/utf8" -) - -// Unmarshal is the entry point from the generated .pb.go files. -// This function is not intended to be used by non-generated code. -// This function is not subject to any compatibility guarantee. -// msg contains a pointer to a protocol buffer struct. -// b is the data to be unmarshaled into the protocol buffer. -// a is a pointer to a place to store cached unmarshal information. -func (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error { - // Load the unmarshal information for this message type. - // The atomic load ensures memory consistency. - u := atomicLoadUnmarshalInfo(&a.unmarshal) - if u == nil { - // Slow path: find unmarshal info for msg, update a with it. - u = getUnmarshalInfo(reflect.TypeOf(msg).Elem()) - atomicStoreUnmarshalInfo(&a.unmarshal, u) - } - // Then do the unmarshaling. - err := u.unmarshal(toPointer(&msg), b) - return err -} - -type unmarshalInfo struct { - typ reflect.Type // type of the protobuf struct - - // 0 = only typ field is initialized - // 1 = completely initialized - initialized int32 - lock sync.Mutex // prevents double initialization - dense []unmarshalFieldInfo // fields indexed by tag # - sparse map[uint64]unmarshalFieldInfo // fields indexed by tag # - reqFields []string // names of required fields - reqMask uint64 // 1< 0 { - // Read tag and wire type. - // Special case 1 and 2 byte varints. - var x uint64 - if b[0] < 128 { - x = uint64(b[0]) - b = b[1:] - } else if len(b) >= 2 && b[1] < 128 { - x = uint64(b[0]&0x7f) + uint64(b[1])<<7 - b = b[2:] - } else { - var n int - x, n = decodeVarint(b) - if n == 0 { - return io.ErrUnexpectedEOF - } - b = b[n:] - } - tag := x >> 3 - wire := int(x) & 7 - - // Dispatch on the tag to one of the unmarshal* functions below. - var f unmarshalFieldInfo - if tag < uint64(len(u.dense)) { - f = u.dense[tag] - } else { - f = u.sparse[tag] - } - if fn := f.unmarshal; fn != nil { - var err error - b, err = fn(b, m.offset(f.field), wire) - if err == nil { - reqMask |= f.reqMask - continue - } - if r, ok := err.(*RequiredNotSetError); ok { - // Remember this error, but keep parsing. We need to produce - // a full parse even if a required field is missing. - if errLater == nil { - errLater = r - } - reqMask |= f.reqMask - continue - } - if err != errInternalBadWireType { - if err == errInvalidUTF8 { - if errLater == nil { - fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name - errLater = &invalidUTF8Error{fullName} - } - continue - } - return err - } - // Fragments with bad wire type are treated as unknown fields. - } - - // Unknown tag. - if !u.unrecognized.IsValid() { - // Don't keep unrecognized data; just skip it. - var err error - b, err = skipField(b, wire) - if err != nil { - return err - } - continue - } - // Keep unrecognized data around. - // maybe in extensions, maybe in the unrecognized field. - z := m.offset(u.unrecognized).toBytes() - var emap map[int32]Extension - var e Extension - for _, r := range u.extensionRanges { - if uint64(r.Start) <= tag && tag <= uint64(r.End) { - if u.extensions.IsValid() { - mp := m.offset(u.extensions).toExtensions() - emap = mp.extensionsWrite() - e = emap[int32(tag)] - z = &e.enc - break - } - if u.oldExtensions.IsValid() { - p := m.offset(u.oldExtensions).toOldExtensions() - emap = *p - if emap == nil { - emap = map[int32]Extension{} - *p = emap - } - e = emap[int32(tag)] - z = &e.enc - break - } - panic("no extensions field available") - } - } - - // Use wire type to skip data. - var err error - b0 := b - b, err = skipField(b, wire) - if err != nil { - return err - } - *z = encodeVarint(*z, tag<<3|uint64(wire)) - *z = append(*z, b0[:len(b0)-len(b)]...) - - if emap != nil { - emap[int32(tag)] = e - } - } - if reqMask != u.reqMask && errLater == nil { - // A required field of this message is missing. - for _, n := range u.reqFields { - if reqMask&1 == 0 { - errLater = &RequiredNotSetError{n} - } - reqMask >>= 1 - } - } - return errLater -} - -// computeUnmarshalInfo fills in u with information for use -// in unmarshaling protocol buffers of type u.typ. -func (u *unmarshalInfo) computeUnmarshalInfo() { - u.lock.Lock() - defer u.lock.Unlock() - if u.initialized != 0 { - return - } - t := u.typ - n := t.NumField() - - // Set up the "not found" value for the unrecognized byte buffer. - // This is the default for proto3. - u.unrecognized = invalidField - u.extensions = invalidField - u.oldExtensions = invalidField - - // List of the generated type and offset for each oneof field. - type oneofField struct { - ityp reflect.Type // interface type of oneof field - field field // offset in containing message - } - var oneofFields []oneofField - - for i := 0; i < n; i++ { - f := t.Field(i) - if f.Name == "XXX_unrecognized" { - // The byte slice used to hold unrecognized input is special. - if f.Type != reflect.TypeOf(([]byte)(nil)) { - panic("bad type for XXX_unrecognized field: " + f.Type.Name()) - } - u.unrecognized = toField(&f) - continue - } - if f.Name == "XXX_InternalExtensions" { - // Ditto here. - if f.Type != reflect.TypeOf(XXX_InternalExtensions{}) { - panic("bad type for XXX_InternalExtensions field: " + f.Type.Name()) - } - u.extensions = toField(&f) - if f.Tag.Get("protobuf_messageset") == "1" { - u.isMessageSet = true - } - continue - } - if f.Name == "XXX_extensions" { - // An older form of the extensions field. - if f.Type != reflect.TypeOf((map[int32]Extension)(nil)) { - panic("bad type for XXX_extensions field: " + f.Type.Name()) - } - u.oldExtensions = toField(&f) - continue - } - if f.Name == "XXX_NoUnkeyedLiteral" || f.Name == "XXX_sizecache" { - continue - } - - oneof := f.Tag.Get("protobuf_oneof") - if oneof != "" { - oneofFields = append(oneofFields, oneofField{f.Type, toField(&f)}) - // The rest of oneof processing happens below. - continue - } - - tags := f.Tag.Get("protobuf") - tagArray := strings.Split(tags, ",") - if len(tagArray) < 2 { - panic("protobuf tag not enough fields in " + t.Name() + "." + f.Name + ": " + tags) - } - tag, err := strconv.Atoi(tagArray[1]) - if err != nil { - panic("protobuf tag field not an integer: " + tagArray[1]) - } - - name := "" - for _, tag := range tagArray[3:] { - if strings.HasPrefix(tag, "name=") { - name = tag[5:] - } - } - - // Extract unmarshaling function from the field (its type and tags). - unmarshal := fieldUnmarshaler(&f) - - // Required field? - var reqMask uint64 - if tagArray[2] == "req" { - bit := len(u.reqFields) - u.reqFields = append(u.reqFields, name) - reqMask = uint64(1) << uint(bit) - // TODO: if we have more than 64 required fields, we end up - // not verifying that all required fields are present. - // Fix this, perhaps using a count of required fields? - } - - // Store the info in the correct slot in the message. - u.setTag(tag, toField(&f), unmarshal, reqMask, name) - } - - // Find any types associated with oneof fields. - // TODO: XXX_OneofFuncs returns more info than we need. Get rid of some of it? - fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("XXX_OneofFuncs") - if fn.IsValid() { - res := fn.Call(nil)[3] // last return value from XXX_OneofFuncs: []interface{} - for i := res.Len() - 1; i >= 0; i-- { - v := res.Index(i) // interface{} - tptr := reflect.ValueOf(v.Interface()).Type() // *Msg_X - typ := tptr.Elem() // Msg_X - - f := typ.Field(0) // oneof implementers have one field - baseUnmarshal := fieldUnmarshaler(&f) - tags := strings.Split(f.Tag.Get("protobuf"), ",") - fieldNum, err := strconv.Atoi(tags[1]) - if err != nil { - panic("protobuf tag field not an integer: " + tags[1]) - } - var name string - for _, tag := range tags { - if strings.HasPrefix(tag, "name=") { - name = strings.TrimPrefix(tag, "name=") - break - } - } - - // Find the oneof field that this struct implements. - // Might take O(n^2) to process all of the oneofs, but who cares. - for _, of := range oneofFields { - if tptr.Implements(of.ityp) { - // We have found the corresponding interface for this struct. - // That lets us know where this struct should be stored - // when we encounter it during unmarshaling. - unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal) - u.setTag(fieldNum, of.field, unmarshal, 0, name) - } - } - } - } - - // Get extension ranges, if any. - fn = reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray") - if fn.IsValid() { - if !u.extensions.IsValid() && !u.oldExtensions.IsValid() { - panic("a message with extensions, but no extensions field in " + t.Name()) - } - u.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange) - } - - // Explicitly disallow tag 0. This will ensure we flag an error - // when decoding a buffer of all zeros. Without this code, we - // would decode and skip an all-zero buffer of even length. - // [0 0] is [tag=0/wiretype=varint varint-encoded-0]. - u.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) { - return nil, fmt.Errorf("proto: %s: illegal tag 0 (wire type %d)", t, w) - }, 0, "") - - // Set mask for required field check. - u.reqMask = uint64(1)<= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here? - for len(u.dense) <= tag { - u.dense = append(u.dense, unmarshalFieldInfo{}) - } - u.dense[tag] = i - return - } - if u.sparse == nil { - u.sparse = map[uint64]unmarshalFieldInfo{} - } - u.sparse[uint64(tag)] = i -} - -// fieldUnmarshaler returns an unmarshaler for the given field. -func fieldUnmarshaler(f *reflect.StructField) unmarshaler { - if f.Type.Kind() == reflect.Map { - return makeUnmarshalMap(f) - } - return typeUnmarshaler(f.Type, f.Tag.Get("protobuf")) -} - -// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair. -func typeUnmarshaler(t reflect.Type, tags string) unmarshaler { - tagArray := strings.Split(tags, ",") - encoding := tagArray[0] - name := "unknown" - proto3 := false - validateUTF8 := true - for _, tag := range tagArray[3:] { - if strings.HasPrefix(tag, "name=") { - name = tag[5:] - } - if tag == "proto3" { - proto3 = true - } - } - validateUTF8 = validateUTF8 && proto3 - - // Figure out packaging (pointer, slice, or both) - slice := false - pointer := false - if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { - slice = true - t = t.Elem() - } - if t.Kind() == reflect.Ptr { - pointer = true - t = t.Elem() - } - - // We'll never have both pointer and slice for basic types. - if pointer && slice && t.Kind() != reflect.Struct { - panic("both pointer and slice for basic type in " + t.Name()) - } - - switch t.Kind() { - case reflect.Bool: - if pointer { - return unmarshalBoolPtr - } - if slice { - return unmarshalBoolSlice - } - return unmarshalBoolValue - case reflect.Int32: - switch encoding { - case "fixed32": - if pointer { - return unmarshalFixedS32Ptr - } - if slice { - return unmarshalFixedS32Slice - } - return unmarshalFixedS32Value - case "varint": - // this could be int32 or enum - if pointer { - return unmarshalInt32Ptr - } - if slice { - return unmarshalInt32Slice - } - return unmarshalInt32Value - case "zigzag32": - if pointer { - return unmarshalSint32Ptr - } - if slice { - return unmarshalSint32Slice - } - return unmarshalSint32Value - } - case reflect.Int64: - switch encoding { - case "fixed64": - if pointer { - return unmarshalFixedS64Ptr - } - if slice { - return unmarshalFixedS64Slice - } - return unmarshalFixedS64Value - case "varint": - if pointer { - return unmarshalInt64Ptr - } - if slice { - return unmarshalInt64Slice - } - return unmarshalInt64Value - case "zigzag64": - if pointer { - return unmarshalSint64Ptr - } - if slice { - return unmarshalSint64Slice - } - return unmarshalSint64Value - } - case reflect.Uint32: - switch encoding { - case "fixed32": - if pointer { - return unmarshalFixed32Ptr - } - if slice { - return unmarshalFixed32Slice - } - return unmarshalFixed32Value - case "varint": - if pointer { - return unmarshalUint32Ptr - } - if slice { - return unmarshalUint32Slice - } - return unmarshalUint32Value - } - case reflect.Uint64: - switch encoding { - case "fixed64": - if pointer { - return unmarshalFixed64Ptr - } - if slice { - return unmarshalFixed64Slice - } - return unmarshalFixed64Value - case "varint": - if pointer { - return unmarshalUint64Ptr - } - if slice { - return unmarshalUint64Slice - } - return unmarshalUint64Value - } - case reflect.Float32: - if pointer { - return unmarshalFloat32Ptr - } - if slice { - return unmarshalFloat32Slice - } - return unmarshalFloat32Value - case reflect.Float64: - if pointer { - return unmarshalFloat64Ptr - } - if slice { - return unmarshalFloat64Slice - } - return unmarshalFloat64Value - case reflect.Map: - panic("map type in typeUnmarshaler in " + t.Name()) - case reflect.Slice: - if pointer { - panic("bad pointer in slice case in " + t.Name()) - } - if slice { - return unmarshalBytesSlice - } - return unmarshalBytesValue - case reflect.String: - if validateUTF8 { - if pointer { - return unmarshalUTF8StringPtr - } - if slice { - return unmarshalUTF8StringSlice - } - return unmarshalUTF8StringValue - } - if pointer { - return unmarshalStringPtr - } - if slice { - return unmarshalStringSlice - } - return unmarshalStringValue - case reflect.Struct: - // message or group field - if !pointer { - panic(fmt.Sprintf("message/group field %s:%s without pointer", t, encoding)) - } - switch encoding { - case "bytes": - if slice { - return makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name) - } - return makeUnmarshalMessagePtr(getUnmarshalInfo(t), name) - case "group": - if slice { - return makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name) - } - return makeUnmarshalGroupPtr(getUnmarshalInfo(t), name) - } - } - panic(fmt.Sprintf("unmarshaler not found type:%s encoding:%s", t, encoding)) -} - -// Below are all the unmarshalers for individual fields of various types. - -func unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - *f.toInt64() = v - return b, nil -} - -func unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - *f.toInt64Ptr() = &v - return b, nil -} - -func unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - s := f.toInt64Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x) - s := f.toInt64Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - *f.toInt64() = v - return b, nil -} - -func unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - *f.toInt64Ptr() = &v - return b, nil -} - -func unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - s := f.toInt64Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int64(x>>1) ^ int64(x)<<63>>63 - s := f.toInt64Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - *f.toUint64() = v - return b, nil -} - -func unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - *f.toUint64Ptr() = &v - return b, nil -} - -func unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - s := f.toUint64Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint64(x) - s := f.toUint64Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - *f.toInt32() = v - return b, nil -} - -func unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - f.setInt32Ptr(v) - return b, nil -} - -func unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - f.appendInt32Slice(v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x) - f.appendInt32Slice(v) - return b, nil -} - -func unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - *f.toInt32() = v - return b, nil -} - -func unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - f.setInt32Ptr(v) - return b, nil -} - -func unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - f.appendInt32Slice(v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := int32(x>>1) ^ int32(x)<<31>>31 - f.appendInt32Slice(v) - return b, nil -} - -func unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - *f.toUint32() = v - return b, nil -} - -func unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - *f.toUint32Ptr() = &v - return b, nil -} - -func unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - s := f.toUint32Slice() - *s = append(*s, v) - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - v := uint32(x) - s := f.toUint32Slice() - *s = append(*s, v) - return b, nil -} - -func unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - *f.toUint64() = v - return b[8:], nil -} - -func unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - *f.toUint64Ptr() = &v - return b[8:], nil -} - -func unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - s := f.toUint64Slice() - *s = append(*s, v) - b = b[8:] - } - return res, nil - } - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 - s := f.toUint64Slice() - *s = append(*s, v) - return b[8:], nil -} - -func unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - *f.toInt64() = v - return b[8:], nil -} - -func unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - *f.toInt64Ptr() = &v - return b[8:], nil -} - -func unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - s := f.toInt64Slice() - *s = append(*s, v) - b = b[8:] - } - return res, nil - } - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 - s := f.toInt64Slice() - *s = append(*s, v) - return b[8:], nil -} - -func unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - *f.toUint32() = v - return b[4:], nil -} - -func unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - *f.toUint32Ptr() = &v - return b[4:], nil -} - -func unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - s := f.toUint32Slice() - *s = append(*s, v) - b = b[4:] - } - return res, nil - } - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 - s := f.toUint32Slice() - *s = append(*s, v) - return b[4:], nil -} - -func unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - *f.toInt32() = v - return b[4:], nil -} - -func unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - f.setInt32Ptr(v) - return b[4:], nil -} - -func unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - f.appendInt32Slice(v) - b = b[4:] - } - return res, nil - } - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 - f.appendInt32Slice(v) - return b[4:], nil -} - -func unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - // Note: any length varint is allowed, even though any sane - // encoder will use one byte. - // See https://github.com/golang/protobuf/issues/76 - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - // TODO: check if x>1? Tests seem to indicate no. - v := x != 0 - *f.toBool() = v - return b[n:], nil -} - -func unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - v := x != 0 - *f.toBoolPtr() = &v - return b[n:], nil -} - -func unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - x, n = decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - v := x != 0 - s := f.toBoolSlice() - *s = append(*s, v) - b = b[n:] - } - return res, nil - } - if w != WireVarint { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - v := x != 0 - s := f.toBoolSlice() - *s = append(*s, v) - return b[n:], nil -} - -func unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - *f.toFloat64() = v - return b[8:], nil -} - -func unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - *f.toFloat64Ptr() = &v - return b[8:], nil -} - -func unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - s := f.toFloat64Slice() - *s = append(*s, v) - b = b[8:] - } - return res, nil - } - if w != WireFixed64 { - return b, errInternalBadWireType - } - if len(b) < 8 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) - s := f.toFloat64Slice() - *s = append(*s, v) - return b[8:], nil -} - -func unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - *f.toFloat32() = v - return b[4:], nil -} - -func unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - *f.toFloat32Ptr() = &v - return b[4:], nil -} - -func unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) { - if w == WireBytes { // packed - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - res := b[x:] - b = b[:x] - for len(b) > 0 { - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - s := f.toFloat32Slice() - *s = append(*s, v) - b = b[4:] - } - return res, nil - } - if w != WireFixed32 { - return b, errInternalBadWireType - } - if len(b) < 4 { - return nil, io.ErrUnexpectedEOF - } - v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) - s := f.toFloat32Slice() - *s = append(*s, v) - return b[4:], nil -} - -func unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - *f.toString() = v - return b[x:], nil -} - -func unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - *f.toStringPtr() = &v - return b[x:], nil -} - -func unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - s := f.toStringSlice() - *s = append(*s, v) - return b[x:], nil -} - -func unmarshalUTF8StringValue(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - *f.toString() = v - if !utf8.ValidString(v) { - return b[x:], errInvalidUTF8 - } - return b[x:], nil -} - -func unmarshalUTF8StringPtr(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - *f.toStringPtr() = &v - if !utf8.ValidString(v) { - return b[x:], errInvalidUTF8 - } - return b[x:], nil -} - -func unmarshalUTF8StringSlice(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := string(b[:x]) - s := f.toStringSlice() - *s = append(*s, v) - if !utf8.ValidString(v) { - return b[x:], errInvalidUTF8 - } - return b[x:], nil -} - -var emptyBuf [0]byte - -func unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - // The use of append here is a trick which avoids the zeroing - // that would be required if we used a make/copy pair. - // We append to emptyBuf instead of nil because we want - // a non-nil result even when the length is 0. - v := append(emptyBuf[:], b[:x]...) - *f.toBytes() = v - return b[x:], nil -} - -func unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := append(emptyBuf[:], b[:x]...) - s := f.toBytesSlice() - *s = append(*s, v) - return b[x:], nil -} - -func makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - // First read the message field to see if something is there. - // The semantics of multiple submessages are weird. Instead of - // the last one winning (as it is for all other fields), multiple - // submessages are merged. - v := f.getPointer() - if v.isNil() { - v = valToPointer(reflect.New(sub.typ)) - f.setPointer(v) - } - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - return b[x:], err - } -} - -func makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireBytes { - return b, errInternalBadWireType - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - v := valToPointer(reflect.New(sub.typ)) - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - f.appendPointer(v) - return b[x:], err - } -} - -func makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireStartGroup { - return b, errInternalBadWireType - } - x, y := findEndGroup(b) - if x < 0 { - return nil, io.ErrUnexpectedEOF - } - v := f.getPointer() - if v.isNil() { - v = valToPointer(reflect.New(sub.typ)) - f.setPointer(v) - } - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - return b[y:], err - } -} - -func makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler { - return func(b []byte, f pointer, w int) ([]byte, error) { - if w != WireStartGroup { - return b, errInternalBadWireType - } - x, y := findEndGroup(b) - if x < 0 { - return nil, io.ErrUnexpectedEOF - } - v := valToPointer(reflect.New(sub.typ)) - err := sub.unmarshal(v, b[:x]) - if err != nil { - if r, ok := err.(*RequiredNotSetError); ok { - r.field = name + "." + r.field - } else { - return nil, err - } - } - f.appendPointer(v) - return b[y:], err - } -} - -func makeUnmarshalMap(f *reflect.StructField) unmarshaler { - t := f.Type - kt := t.Key() - vt := t.Elem() - unmarshalKey := typeUnmarshaler(kt, f.Tag.Get("protobuf_key")) - unmarshalVal := typeUnmarshaler(vt, f.Tag.Get("protobuf_val")) - return func(b []byte, f pointer, w int) ([]byte, error) { - // The map entry is a submessage. Figure out how big it is. - if w != WireBytes { - return nil, fmt.Errorf("proto: bad wiretype for map field: got %d want %d", w, WireBytes) - } - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - b = b[n:] - if x > uint64(len(b)) { - return nil, io.ErrUnexpectedEOF - } - r := b[x:] // unused data to return - b = b[:x] // data for map entry - - // Note: we could use #keys * #values ~= 200 functions - // to do map decoding without reflection. Probably not worth it. - // Maps will be somewhat slow. Oh well. - - // Read key and value from data. - var nerr nonFatal - k := reflect.New(kt) - v := reflect.New(vt) - for len(b) > 0 { - x, n := decodeVarint(b) - if n == 0 { - return nil, io.ErrUnexpectedEOF - } - wire := int(x) & 7 - b = b[n:] - - var err error - switch x >> 3 { - case 1: - b, err = unmarshalKey(b, valToPointer(k), wire) - case 2: - b, err = unmarshalVal(b, valToPointer(v), wire) - default: - err = errInternalBadWireType // skip unknown tag - } - - if nerr.Merge(err) { - continue - } - if err != errInternalBadWireType { - return nil, err - } - - // Skip past unknown fields. - b, err = skipField(b, wire) - if err != nil { - return nil, err - } - } - - // Get map, allocate if needed. - m := f.asPointerTo(t).Elem() // an addressable map[K]T - if m.IsNil() { - m.Set(reflect.MakeMap(t)) - } - - // Insert into map. - m.SetMapIndex(k.Elem(), v.Elem()) - - return r, nerr.E - } -} - -// makeUnmarshalOneof makes an unmarshaler for oneof fields. -// for: -// message Msg { -// oneof F { -// int64 X = 1; -// float64 Y = 2; -// } -// } -// typ is the type of the concrete entry for a oneof case (e.g. Msg_X). -// ityp is the interface type of the oneof field (e.g. isMsg_F). -// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64). -// Note that this function will be called once for each case in the oneof. -func makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler { - sf := typ.Field(0) - field0 := toField(&sf) - return func(b []byte, f pointer, w int) ([]byte, error) { - // Allocate holder for value. - v := reflect.New(typ) - - // Unmarshal data into holder. - // We unmarshal into the first field of the holder object. - var err error - var nerr nonFatal - b, err = unmarshal(b, valToPointer(v).offset(field0), w) - if !nerr.Merge(err) { - return nil, err - } - - // Write pointer to holder into target field. - f.asPointerTo(ityp).Elem().Set(v) - - return b, nerr.E - } -} - -// Error used by decode internally. -var errInternalBadWireType = errors.New("proto: internal error: bad wiretype") - -// skipField skips past a field of type wire and returns the remaining bytes. -func skipField(b []byte, wire int) ([]byte, error) { - switch wire { - case WireVarint: - _, k := decodeVarint(b) - if k == 0 { - return b, io.ErrUnexpectedEOF - } - b = b[k:] - case WireFixed32: - if len(b) < 4 { - return b, io.ErrUnexpectedEOF - } - b = b[4:] - case WireFixed64: - if len(b) < 8 { - return b, io.ErrUnexpectedEOF - } - b = b[8:] - case WireBytes: - m, k := decodeVarint(b) - if k == 0 || uint64(len(b)-k) < m { - return b, io.ErrUnexpectedEOF - } - b = b[uint64(k)+m:] - case WireStartGroup: - _, i := findEndGroup(b) - if i == -1 { - return b, io.ErrUnexpectedEOF - } - b = b[i:] - default: - return b, fmt.Errorf("proto: can't skip unknown wire type %d", wire) - } - return b, nil -} - -// findEndGroup finds the index of the next EndGroup tag. -// Groups may be nested, so the "next" EndGroup tag is the first -// unpaired EndGroup. -// findEndGroup returns the indexes of the start and end of the EndGroup tag. -// Returns (-1,-1) if it can't find one. -func findEndGroup(b []byte) (int, int) { - depth := 1 - i := 0 - for { - x, n := decodeVarint(b[i:]) - if n == 0 { - return -1, -1 - } - j := i - i += n - switch x & 7 { - case WireVarint: - _, k := decodeVarint(b[i:]) - if k == 0 { - return -1, -1 - } - i += k - case WireFixed32: - if len(b)-4 < i { - return -1, -1 - } - i += 4 - case WireFixed64: - if len(b)-8 < i { - return -1, -1 - } - i += 8 - case WireBytes: - m, k := decodeVarint(b[i:]) - if k == 0 { - return -1, -1 - } - i += k - if uint64(len(b)-i) < m { - return -1, -1 - } - i += int(m) - case WireStartGroup: - depth++ - case WireEndGroup: - depth-- - if depth == 0 { - return j, i - } - default: - return -1, -1 - } - } -} - -// encodeVarint appends a varint-encoded integer to b and returns the result. -func encodeVarint(b []byte, x uint64) []byte { - for x >= 1<<7 { - b = append(b, byte(x&0x7f|0x80)) - x >>= 7 - } - return append(b, byte(x)) -} - -// decodeVarint reads a varint-encoded integer from b. -// Returns the decoded integer and the number of bytes read. -// If there is an error, it returns 0,0. -func decodeVarint(b []byte) (uint64, int) { - var x, y uint64 - if len(b) == 0 { - goto bad - } - x = uint64(b[0]) - if x < 0x80 { - return x, 1 - } - x -= 0x80 - - if len(b) <= 1 { - goto bad - } - y = uint64(b[1]) - x += y << 7 - if y < 0x80 { - return x, 2 - } - x -= 0x80 << 7 - - if len(b) <= 2 { - goto bad - } - y = uint64(b[2]) - x += y << 14 - if y < 0x80 { - return x, 3 - } - x -= 0x80 << 14 - - if len(b) <= 3 { - goto bad - } - y = uint64(b[3]) - x += y << 21 - if y < 0x80 { - return x, 4 - } - x -= 0x80 << 21 - - if len(b) <= 4 { - goto bad - } - y = uint64(b[4]) - x += y << 28 - if y < 0x80 { - return x, 5 - } - x -= 0x80 << 28 - - if len(b) <= 5 { - goto bad - } - y = uint64(b[5]) - x += y << 35 - if y < 0x80 { - return x, 6 - } - x -= 0x80 << 35 - - if len(b) <= 6 { - goto bad - } - y = uint64(b[6]) - x += y << 42 - if y < 0x80 { - return x, 7 - } - x -= 0x80 << 42 - - if len(b) <= 7 { - goto bad - } - y = uint64(b[7]) - x += y << 49 - if y < 0x80 { - return x, 8 - } - x -= 0x80 << 49 - - if len(b) <= 8 { - goto bad - } - y = uint64(b[8]) - x += y << 56 - if y < 0x80 { - return x, 9 - } - x -= 0x80 << 56 - - if len(b) <= 9 { - goto bad - } - y = uint64(b[9]) - x += y << 63 - if y < 2 { - return x, 10 - } - -bad: - return 0, 0 -} diff --git a/vendor/github.com/golang/protobuf/proto/text.go b/vendor/github.com/golang/protobuf/proto/text.go deleted file mode 100644 index 1aaee725b..000000000 --- a/vendor/github.com/golang/protobuf/proto/text.go +++ /dev/null @@ -1,843 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -package proto - -// Functions for writing the text protocol buffer format. - -import ( - "bufio" - "bytes" - "encoding" - "errors" - "fmt" - "io" - "log" - "math" - "reflect" - "sort" - "strings" -) - -var ( - newline = []byte("\n") - spaces = []byte(" ") - endBraceNewline = []byte("}\n") - backslashN = []byte{'\\', 'n'} - backslashR = []byte{'\\', 'r'} - backslashT = []byte{'\\', 't'} - backslashDQ = []byte{'\\', '"'} - backslashBS = []byte{'\\', '\\'} - posInf = []byte("inf") - negInf = []byte("-inf") - nan = []byte("nan") -) - -type writer interface { - io.Writer - WriteByte(byte) error -} - -// textWriter is an io.Writer that tracks its indentation level. -type textWriter struct { - ind int - complete bool // if the current position is a complete line - compact bool // whether to write out as a one-liner - w writer -} - -func (w *textWriter) WriteString(s string) (n int, err error) { - if !strings.Contains(s, "\n") { - if !w.compact && w.complete { - w.writeIndent() - } - w.complete = false - return io.WriteString(w.w, s) - } - // WriteString is typically called without newlines, so this - // codepath and its copy are rare. We copy to avoid - // duplicating all of Write's logic here. - return w.Write([]byte(s)) -} - -func (w *textWriter) Write(p []byte) (n int, err error) { - newlines := bytes.Count(p, newline) - if newlines == 0 { - if !w.compact && w.complete { - w.writeIndent() - } - n, err = w.w.Write(p) - w.complete = false - return n, err - } - - frags := bytes.SplitN(p, newline, newlines+1) - if w.compact { - for i, frag := range frags { - if i > 0 { - if err := w.w.WriteByte(' '); err != nil { - return n, err - } - n++ - } - nn, err := w.w.Write(frag) - n += nn - if err != nil { - return n, err - } - } - return n, nil - } - - for i, frag := range frags { - if w.complete { - w.writeIndent() - } - nn, err := w.w.Write(frag) - n += nn - if err != nil { - return n, err - } - if i+1 < len(frags) { - if err := w.w.WriteByte('\n'); err != nil { - return n, err - } - n++ - } - } - w.complete = len(frags[len(frags)-1]) == 0 - return n, nil -} - -func (w *textWriter) WriteByte(c byte) error { - if w.compact && c == '\n' { - c = ' ' - } - if !w.compact && w.complete { - w.writeIndent() - } - err := w.w.WriteByte(c) - w.complete = c == '\n' - return err -} - -func (w *textWriter) indent() { w.ind++ } - -func (w *textWriter) unindent() { - if w.ind == 0 { - log.Print("proto: textWriter unindented too far") - return - } - w.ind-- -} - -func writeName(w *textWriter, props *Properties) error { - if _, err := w.WriteString(props.OrigName); err != nil { - return err - } - if props.Wire != "group" { - return w.WriteByte(':') - } - return nil -} - -func requiresQuotes(u string) bool { - // When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted. - for _, ch := range u { - switch { - case ch == '.' || ch == '/' || ch == '_': - continue - case '0' <= ch && ch <= '9': - continue - case 'A' <= ch && ch <= 'Z': - continue - case 'a' <= ch && ch <= 'z': - continue - default: - return true - } - } - return false -} - -// isAny reports whether sv is a google.protobuf.Any message -func isAny(sv reflect.Value) bool { - type wkt interface { - XXX_WellKnownType() string - } - t, ok := sv.Addr().Interface().(wkt) - return ok && t.XXX_WellKnownType() == "Any" -} - -// writeProto3Any writes an expanded google.protobuf.Any message. -// -// It returns (false, nil) if sv value can't be unmarshaled (e.g. because -// required messages are not linked in). -// -// It returns (true, error) when sv was written in expanded format or an error -// was encountered. -func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) { - turl := sv.FieldByName("TypeUrl") - val := sv.FieldByName("Value") - if !turl.IsValid() || !val.IsValid() { - return true, errors.New("proto: invalid google.protobuf.Any message") - } - - b, ok := val.Interface().([]byte) - if !ok { - return true, errors.New("proto: invalid google.protobuf.Any message") - } - - parts := strings.Split(turl.String(), "/") - mt := MessageType(parts[len(parts)-1]) - if mt == nil { - return false, nil - } - m := reflect.New(mt.Elem()) - if err := Unmarshal(b, m.Interface().(Message)); err != nil { - return false, nil - } - w.Write([]byte("[")) - u := turl.String() - if requiresQuotes(u) { - writeString(w, u) - } else { - w.Write([]byte(u)) - } - if w.compact { - w.Write([]byte("]:<")) - } else { - w.Write([]byte("]: <\n")) - w.ind++ - } - if err := tm.writeStruct(w, m.Elem()); err != nil { - return true, err - } - if w.compact { - w.Write([]byte("> ")) - } else { - w.ind-- - w.Write([]byte(">\n")) - } - return true, nil -} - -func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { - if tm.ExpandAny && isAny(sv) { - if canExpand, err := tm.writeProto3Any(w, sv); canExpand { - return err - } - } - st := sv.Type() - sprops := GetProperties(st) - for i := 0; i < sv.NumField(); i++ { - fv := sv.Field(i) - props := sprops.Prop[i] - name := st.Field(i).Name - - if name == "XXX_NoUnkeyedLiteral" { - continue - } - - if strings.HasPrefix(name, "XXX_") { - // There are two XXX_ fields: - // XXX_unrecognized []byte - // XXX_extensions map[int32]proto.Extension - // The first is handled here; - // the second is handled at the bottom of this function. - if name == "XXX_unrecognized" && !fv.IsNil() { - if err := writeUnknownStruct(w, fv.Interface().([]byte)); err != nil { - return err - } - } - continue - } - if fv.Kind() == reflect.Ptr && fv.IsNil() { - // Field not filled in. This could be an optional field or - // a required field that wasn't filled in. Either way, there - // isn't anything we can show for it. - continue - } - if fv.Kind() == reflect.Slice && fv.IsNil() { - // Repeated field that is empty, or a bytes field that is unused. - continue - } - - if props.Repeated && fv.Kind() == reflect.Slice { - // Repeated field. - for j := 0; j < fv.Len(); j++ { - if err := writeName(w, props); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - v := fv.Index(j) - if v.Kind() == reflect.Ptr && v.IsNil() { - // A nil message in a repeated field is not valid, - // but we can handle that more gracefully than panicking. - if _, err := w.Write([]byte("\n")); err != nil { - return err - } - continue - } - if err := tm.writeAny(w, v, props); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - } - continue - } - if fv.Kind() == reflect.Map { - // Map fields are rendered as a repeated struct with key/value fields. - keys := fv.MapKeys() - sort.Sort(mapKeys(keys)) - for _, key := range keys { - val := fv.MapIndex(key) - if err := writeName(w, props); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - // open struct - if err := w.WriteByte('<'); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte('\n'); err != nil { - return err - } - } - w.indent() - // key - if _, err := w.WriteString("key:"); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - if err := tm.writeAny(w, key, props.MapKeyProp); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - // nil values aren't legal, but we can avoid panicking because of them. - if val.Kind() != reflect.Ptr || !val.IsNil() { - // value - if _, err := w.WriteString("value:"); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - if err := tm.writeAny(w, val, props.MapValProp); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - } - // close struct - w.unindent() - if err := w.WriteByte('>'); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - } - continue - } - if props.proto3 && fv.Kind() == reflect.Slice && fv.Len() == 0 { - // empty bytes field - continue - } - if fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice { - // proto3 non-repeated scalar field; skip if zero value - if isProto3Zero(fv) { - continue - } - } - - if fv.Kind() == reflect.Interface { - // Check if it is a oneof. - if st.Field(i).Tag.Get("protobuf_oneof") != "" { - // fv is nil, or holds a pointer to generated struct. - // That generated struct has exactly one field, - // which has a protobuf struct tag. - if fv.IsNil() { - continue - } - inner := fv.Elem().Elem() // interface -> *T -> T - tag := inner.Type().Field(0).Tag.Get("protobuf") - props = new(Properties) // Overwrite the outer props var, but not its pointee. - props.Parse(tag) - // Write the value in the oneof, not the oneof itself. - fv = inner.Field(0) - - // Special case to cope with malformed messages gracefully: - // If the value in the oneof is a nil pointer, don't panic - // in writeAny. - if fv.Kind() == reflect.Ptr && fv.IsNil() { - // Use errors.New so writeAny won't render quotes. - msg := errors.New("/* nil */") - fv = reflect.ValueOf(&msg).Elem() - } - } - } - - if err := writeName(w, props); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - - // Enums have a String method, so writeAny will work fine. - if err := tm.writeAny(w, fv, props); err != nil { - return err - } - - if err := w.WriteByte('\n'); err != nil { - return err - } - } - - // Extensions (the XXX_extensions field). - pv := sv.Addr() - if _, err := extendable(pv.Interface()); err == nil { - if err := tm.writeExtensions(w, pv); err != nil { - return err - } - } - - return nil -} - -// writeAny writes an arbitrary field. -func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error { - v = reflect.Indirect(v) - - // Floats have special cases. - if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 { - x := v.Float() - var b []byte - switch { - case math.IsInf(x, 1): - b = posInf - case math.IsInf(x, -1): - b = negInf - case math.IsNaN(x): - b = nan - } - if b != nil { - _, err := w.Write(b) - return err - } - // Other values are handled below. - } - - // We don't attempt to serialise every possible value type; only those - // that can occur in protocol buffers. - switch v.Kind() { - case reflect.Slice: - // Should only be a []byte; repeated fields are handled in writeStruct. - if err := writeString(w, string(v.Bytes())); err != nil { - return err - } - case reflect.String: - if err := writeString(w, v.String()); err != nil { - return err - } - case reflect.Struct: - // Required/optional group/message. - var bra, ket byte = '<', '>' - if props != nil && props.Wire == "group" { - bra, ket = '{', '}' - } - if err := w.WriteByte(bra); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte('\n'); err != nil { - return err - } - } - w.indent() - if v.CanAddr() { - // Calling v.Interface on a struct causes the reflect package to - // copy the entire struct. This is racy with the new Marshaler - // since we atomically update the XXX_sizecache. - // - // Thus, we retrieve a pointer to the struct if possible to avoid - // a race since v.Interface on the pointer doesn't copy the struct. - // - // If v is not addressable, then we are not worried about a race - // since it implies that the binary Marshaler cannot possibly be - // mutating this value. - v = v.Addr() - } - if etm, ok := v.Interface().(encoding.TextMarshaler); ok { - text, err := etm.MarshalText() - if err != nil { - return err - } - if _, err = w.Write(text); err != nil { - return err - } - } else { - if v.Kind() == reflect.Ptr { - v = v.Elem() - } - if err := tm.writeStruct(w, v); err != nil { - return err - } - } - w.unindent() - if err := w.WriteByte(ket); err != nil { - return err - } - default: - _, err := fmt.Fprint(w, v.Interface()) - return err - } - return nil -} - -// equivalent to C's isprint. -func isprint(c byte) bool { - return c >= 0x20 && c < 0x7f -} - -// writeString writes a string in the protocol buffer text format. -// It is similar to strconv.Quote except we don't use Go escape sequences, -// we treat the string as a byte sequence, and we use octal escapes. -// These differences are to maintain interoperability with the other -// languages' implementations of the text format. -func writeString(w *textWriter, s string) error { - // use WriteByte here to get any needed indent - if err := w.WriteByte('"'); err != nil { - return err - } - // Loop over the bytes, not the runes. - for i := 0; i < len(s); i++ { - var err error - // Divergence from C++: we don't escape apostrophes. - // There's no need to escape them, and the C++ parser - // copes with a naked apostrophe. - switch c := s[i]; c { - case '\n': - _, err = w.w.Write(backslashN) - case '\r': - _, err = w.w.Write(backslashR) - case '\t': - _, err = w.w.Write(backslashT) - case '"': - _, err = w.w.Write(backslashDQ) - case '\\': - _, err = w.w.Write(backslashBS) - default: - if isprint(c) { - err = w.w.WriteByte(c) - } else { - _, err = fmt.Fprintf(w.w, "\\%03o", c) - } - } - if err != nil { - return err - } - } - return w.WriteByte('"') -} - -func writeUnknownStruct(w *textWriter, data []byte) (err error) { - if !w.compact { - if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil { - return err - } - } - b := NewBuffer(data) - for b.index < len(b.buf) { - x, err := b.DecodeVarint() - if err != nil { - _, err := fmt.Fprintf(w, "/* %v */\n", err) - return err - } - wire, tag := x&7, x>>3 - if wire == WireEndGroup { - w.unindent() - if _, err := w.Write(endBraceNewline); err != nil { - return err - } - continue - } - if _, err := fmt.Fprint(w, tag); err != nil { - return err - } - if wire != WireStartGroup { - if err := w.WriteByte(':'); err != nil { - return err - } - } - if !w.compact || wire == WireStartGroup { - if err := w.WriteByte(' '); err != nil { - return err - } - } - switch wire { - case WireBytes: - buf, e := b.DecodeRawBytes(false) - if e == nil { - _, err = fmt.Fprintf(w, "%q", buf) - } else { - _, err = fmt.Fprintf(w, "/* %v */", e) - } - case WireFixed32: - x, err = b.DecodeFixed32() - err = writeUnknownInt(w, x, err) - case WireFixed64: - x, err = b.DecodeFixed64() - err = writeUnknownInt(w, x, err) - case WireStartGroup: - err = w.WriteByte('{') - w.indent() - case WireVarint: - x, err = b.DecodeVarint() - err = writeUnknownInt(w, x, err) - default: - _, err = fmt.Fprintf(w, "/* unknown wire type %d */", wire) - } - if err != nil { - return err - } - if err = w.WriteByte('\n'); err != nil { - return err - } - } - return nil -} - -func writeUnknownInt(w *textWriter, x uint64, err error) error { - if err == nil { - _, err = fmt.Fprint(w, x) - } else { - _, err = fmt.Fprintf(w, "/* %v */", err) - } - return err -} - -type int32Slice []int32 - -func (s int32Slice) Len() int { return len(s) } -func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] } -func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } - -// writeExtensions writes all the extensions in pv. -// pv is assumed to be a pointer to a protocol message struct that is extendable. -func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error { - emap := extensionMaps[pv.Type().Elem()] - ep, _ := extendable(pv.Interface()) - - // Order the extensions by ID. - // This isn't strictly necessary, but it will give us - // canonical output, which will also make testing easier. - m, mu := ep.extensionsRead() - if m == nil { - return nil - } - mu.Lock() - ids := make([]int32, 0, len(m)) - for id := range m { - ids = append(ids, id) - } - sort.Sort(int32Slice(ids)) - mu.Unlock() - - for _, extNum := range ids { - ext := m[extNum] - var desc *ExtensionDesc - if emap != nil { - desc = emap[extNum] - } - if desc == nil { - // Unknown extension. - if err := writeUnknownStruct(w, ext.enc); err != nil { - return err - } - continue - } - - pb, err := GetExtension(ep, desc) - if err != nil { - return fmt.Errorf("failed getting extension: %v", err) - } - - // Repeated extensions will appear as a slice. - if !desc.repeated() { - if err := tm.writeExtension(w, desc.Name, pb); err != nil { - return err - } - } else { - v := reflect.ValueOf(pb) - for i := 0; i < v.Len(); i++ { - if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil { - return err - } - } - } - } - return nil -} - -func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error { - if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte(' '); err != nil { - return err - } - } - if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil { - return err - } - if err := w.WriteByte('\n'); err != nil { - return err - } - return nil -} - -func (w *textWriter) writeIndent() { - if !w.complete { - return - } - remain := w.ind * 2 - for remain > 0 { - n := remain - if n > len(spaces) { - n = len(spaces) - } - w.w.Write(spaces[:n]) - remain -= n - } - w.complete = false -} - -// TextMarshaler is a configurable text format marshaler. -type TextMarshaler struct { - Compact bool // use compact text format (one line). - ExpandAny bool // expand google.protobuf.Any messages of known types -} - -// Marshal writes a given protocol buffer in text format. -// The only errors returned are from w. -func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error { - val := reflect.ValueOf(pb) - if pb == nil || val.IsNil() { - w.Write([]byte("")) - return nil - } - var bw *bufio.Writer - ww, ok := w.(writer) - if !ok { - bw = bufio.NewWriter(w) - ww = bw - } - aw := &textWriter{ - w: ww, - complete: true, - compact: tm.Compact, - } - - if etm, ok := pb.(encoding.TextMarshaler); ok { - text, err := etm.MarshalText() - if err != nil { - return err - } - if _, err = aw.Write(text); err != nil { - return err - } - if bw != nil { - return bw.Flush() - } - return nil - } - // Dereference the received pointer so we don't have outer < and >. - v := reflect.Indirect(val) - if err := tm.writeStruct(aw, v); err != nil { - return err - } - if bw != nil { - return bw.Flush() - } - return nil -} - -// Text is the same as Marshal, but returns the string directly. -func (tm *TextMarshaler) Text(pb Message) string { - var buf bytes.Buffer - tm.Marshal(&buf, pb) - return buf.String() -} - -var ( - defaultTextMarshaler = TextMarshaler{} - compactTextMarshaler = TextMarshaler{Compact: true} -) - -// TODO: consider removing some of the Marshal functions below. - -// MarshalText writes a given protocol buffer in text format. -// The only errors returned are from w. -func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) } - -// MarshalTextString is the same as MarshalText, but returns the string directly. -func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) } - -// CompactText writes a given protocol buffer in compact text format (one line). -func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) } - -// CompactTextString is the same as CompactText, but returns the string directly. -func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) } diff --git a/vendor/github.com/golang/protobuf/proto/text_parser.go b/vendor/github.com/golang/protobuf/proto/text_parser.go deleted file mode 100644 index bb55a3af2..000000000 --- a/vendor/github.com/golang/protobuf/proto/text_parser.go +++ /dev/null @@ -1,880 +0,0 @@ -// Go support for Protocol Buffers - Google's data interchange format -// -// Copyright 2010 The Go Authors. All rights reserved. -// https://github.com/golang/protobuf -// -// 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. - -package proto - -// Functions for parsing the Text protocol buffer format. -// TODO: message sets. - -import ( - "encoding" - "errors" - "fmt" - "reflect" - "strconv" - "strings" - "unicode/utf8" -) - -// Error string emitted when deserializing Any and fields are already set -const anyRepeatedlyUnpacked = "Any message unpacked multiple times, or %q already set" - -type ParseError struct { - Message string - Line int // 1-based line number - Offset int // 0-based byte offset from start of input -} - -func (p *ParseError) Error() string { - if p.Line == 1 { - // show offset only for first line - return fmt.Sprintf("line 1.%d: %v", p.Offset, p.Message) - } - return fmt.Sprintf("line %d: %v", p.Line, p.Message) -} - -type token struct { - value string - err *ParseError - line int // line number - offset int // byte number from start of input, not start of line - unquoted string // the unquoted version of value, if it was a quoted string -} - -func (t *token) String() string { - if t.err == nil { - return fmt.Sprintf("%q (line=%d, offset=%d)", t.value, t.line, t.offset) - } - return fmt.Sprintf("parse error: %v", t.err) -} - -type textParser struct { - s string // remaining input - done bool // whether the parsing is finished (success or error) - backed bool // whether back() was called - offset, line int - cur token -} - -func newTextParser(s string) *textParser { - p := new(textParser) - p.s = s - p.line = 1 - p.cur.line = 1 - return p -} - -func (p *textParser) errorf(format string, a ...interface{}) *ParseError { - pe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset} - p.cur.err = pe - p.done = true - return pe -} - -// Numbers and identifiers are matched by [-+._A-Za-z0-9] -func isIdentOrNumberChar(c byte) bool { - switch { - case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z': - return true - case '0' <= c && c <= '9': - return true - } - switch c { - case '-', '+', '.', '_': - return true - } - return false -} - -func isWhitespace(c byte) bool { - switch c { - case ' ', '\t', '\n', '\r': - return true - } - return false -} - -func isQuote(c byte) bool { - switch c { - case '"', '\'': - return true - } - return false -} - -func (p *textParser) skipWhitespace() { - i := 0 - for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') { - if p.s[i] == '#' { - // comment; skip to end of line or input - for i < len(p.s) && p.s[i] != '\n' { - i++ - } - if i == len(p.s) { - break - } - } - if p.s[i] == '\n' { - p.line++ - } - i++ - } - p.offset += i - p.s = p.s[i:len(p.s)] - if len(p.s) == 0 { - p.done = true - } -} - -func (p *textParser) advance() { - // Skip whitespace - p.skipWhitespace() - if p.done { - return - } - - // Start of non-whitespace - p.cur.err = nil - p.cur.offset, p.cur.line = p.offset, p.line - p.cur.unquoted = "" - switch p.s[0] { - case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/': - // Single symbol - p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)] - case '"', '\'': - // Quoted string - i := 1 - for i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\n' { - if p.s[i] == '\\' && i+1 < len(p.s) { - // skip escaped char - i++ - } - i++ - } - if i >= len(p.s) || p.s[i] != p.s[0] { - p.errorf("unmatched quote") - return - } - unq, err := unquoteC(p.s[1:i], rune(p.s[0])) - if err != nil { - p.errorf("invalid quoted string %s: %v", p.s[0:i+1], err) - return - } - p.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)] - p.cur.unquoted = unq - default: - i := 0 - for i < len(p.s) && isIdentOrNumberChar(p.s[i]) { - i++ - } - if i == 0 { - p.errorf("unexpected byte %#x", p.s[0]) - return - } - p.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)] - } - p.offset += len(p.cur.value) -} - -var ( - errBadUTF8 = errors.New("proto: bad UTF-8") -) - -func unquoteC(s string, quote rune) (string, error) { - // This is based on C++'s tokenizer.cc. - // Despite its name, this is *not* parsing C syntax. - // For instance, "\0" is an invalid quoted string. - - // Avoid allocation in trivial cases. - simple := true - for _, r := range s { - if r == '\\' || r == quote { - simple = false - break - } - } - if simple { - return s, nil - } - - buf := make([]byte, 0, 3*len(s)/2) - for len(s) > 0 { - r, n := utf8.DecodeRuneInString(s) - if r == utf8.RuneError && n == 1 { - return "", errBadUTF8 - } - s = s[n:] - if r != '\\' { - if r < utf8.RuneSelf { - buf = append(buf, byte(r)) - } else { - buf = append(buf, string(r)...) - } - continue - } - - ch, tail, err := unescape(s) - if err != nil { - return "", err - } - buf = append(buf, ch...) - s = tail - } - return string(buf), nil -} - -func unescape(s string) (ch string, tail string, err error) { - r, n := utf8.DecodeRuneInString(s) - if r == utf8.RuneError && n == 1 { - return "", "", errBadUTF8 - } - s = s[n:] - switch r { - case 'a': - return "\a", s, nil - case 'b': - return "\b", s, nil - case 'f': - return "\f", s, nil - case 'n': - return "\n", s, nil - case 'r': - return "\r", s, nil - case 't': - return "\t", s, nil - case 'v': - return "\v", s, nil - case '?': - return "?", s, nil // trigraph workaround - case '\'', '"', '\\': - return string(r), s, nil - case '0', '1', '2', '3', '4', '5', '6', '7': - if len(s) < 2 { - return "", "", fmt.Errorf(`\%c requires 2 following digits`, r) - } - ss := string(r) + s[:2] - s = s[2:] - i, err := strconv.ParseUint(ss, 8, 8) - if err != nil { - return "", "", fmt.Errorf(`\%s contains non-octal digits`, ss) - } - return string([]byte{byte(i)}), s, nil - case 'x', 'X', 'u', 'U': - var n int - switch r { - case 'x', 'X': - n = 2 - case 'u': - n = 4 - case 'U': - n = 8 - } - if len(s) < n { - return "", "", fmt.Errorf(`\%c requires %d following digits`, r, n) - } - ss := s[:n] - s = s[n:] - i, err := strconv.ParseUint(ss, 16, 64) - if err != nil { - return "", "", fmt.Errorf(`\%c%s contains non-hexadecimal digits`, r, ss) - } - if r == 'x' || r == 'X' { - return string([]byte{byte(i)}), s, nil - } - if i > utf8.MaxRune { - return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss) - } - return string(i), s, nil - } - return "", "", fmt.Errorf(`unknown escape \%c`, r) -} - -// Back off the parser by one token. Can only be done between calls to next(). -// It makes the next advance() a no-op. -func (p *textParser) back() { p.backed = true } - -// Advances the parser and returns the new current token. -func (p *textParser) next() *token { - if p.backed || p.done { - p.backed = false - return &p.cur - } - p.advance() - if p.done { - p.cur.value = "" - } else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) { - // Look for multiple quoted strings separated by whitespace, - // and concatenate them. - cat := p.cur - for { - p.skipWhitespace() - if p.done || !isQuote(p.s[0]) { - break - } - p.advance() - if p.cur.err != nil { - return &p.cur - } - cat.value += " " + p.cur.value - cat.unquoted += p.cur.unquoted - } - p.done = false // parser may have seen EOF, but we want to return cat - p.cur = cat - } - return &p.cur -} - -func (p *textParser) consumeToken(s string) error { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value != s { - p.back() - return p.errorf("expected %q, found %q", s, tok.value) - } - return nil -} - -// Return a RequiredNotSetError indicating which required field was not set. -func (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSetError { - st := sv.Type() - sprops := GetProperties(st) - for i := 0; i < st.NumField(); i++ { - if !isNil(sv.Field(i)) { - continue - } - - props := sprops.Prop[i] - if props.Required { - return &RequiredNotSetError{fmt.Sprintf("%v.%v", st, props.OrigName)} - } - } - return &RequiredNotSetError{fmt.Sprintf("%v.", st)} // should not happen -} - -// Returns the index in the struct for the named field, as well as the parsed tag properties. -func structFieldByName(sprops *StructProperties, name string) (int, *Properties, bool) { - i, ok := sprops.decoderOrigNames[name] - if ok { - return i, sprops.Prop[i], true - } - return -1, nil, false -} - -// Consume a ':' from the input stream (if the next token is a colon), -// returning an error if a colon is needed but not present. -func (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseError { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value != ":" { - // Colon is optional when the field is a group or message. - needColon := true - switch props.Wire { - case "group": - needColon = false - case "bytes": - // A "bytes" field is either a message, a string, or a repeated field; - // those three become *T, *string and []T respectively, so we can check for - // this field being a pointer to a non-string. - if typ.Kind() == reflect.Ptr { - // *T or *string - if typ.Elem().Kind() == reflect.String { - break - } - } else if typ.Kind() == reflect.Slice { - // []T or []*T - if typ.Elem().Kind() != reflect.Ptr { - break - } - } else if typ.Kind() == reflect.String { - // The proto3 exception is for a string field, - // which requires a colon. - break - } - needColon = false - } - if needColon { - return p.errorf("expected ':', found %q", tok.value) - } - p.back() - } - return nil -} - -func (p *textParser) readStruct(sv reflect.Value, terminator string) error { - st := sv.Type() - sprops := GetProperties(st) - reqCount := sprops.reqCount - var reqFieldErr error - fieldSet := make(map[string]bool) - // A struct is a sequence of "name: value", terminated by one of - // '>' or '}', or the end of the input. A name may also be - // "[extension]" or "[type/url]". - // - // The whole struct can also be an expanded Any message, like: - // [type/url] < ... struct contents ... > - for { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value == terminator { - break - } - if tok.value == "[" { - // Looks like an extension or an Any. - // - // TODO: Check whether we need to handle - // namespace rooted names (e.g. ".something.Foo"). - extName, err := p.consumeExtName() - if err != nil { - return err - } - - if s := strings.LastIndex(extName, "/"); s >= 0 { - // If it contains a slash, it's an Any type URL. - messageName := extName[s+1:] - mt := MessageType(messageName) - if mt == nil { - return p.errorf("unrecognized message %q in google.protobuf.Any", messageName) - } - tok = p.next() - if tok.err != nil { - return tok.err - } - // consume an optional colon - if tok.value == ":" { - tok = p.next() - if tok.err != nil { - return tok.err - } - } - var terminator string - switch tok.value { - case "<": - terminator = ">" - case "{": - terminator = "}" - default: - return p.errorf("expected '{' or '<', found %q", tok.value) - } - v := reflect.New(mt.Elem()) - if pe := p.readStruct(v.Elem(), terminator); pe != nil { - return pe - } - b, err := Marshal(v.Interface().(Message)) - if err != nil { - return p.errorf("failed to marshal message of type %q: %v", messageName, err) - } - if fieldSet["type_url"] { - return p.errorf(anyRepeatedlyUnpacked, "type_url") - } - if fieldSet["value"] { - return p.errorf(anyRepeatedlyUnpacked, "value") - } - sv.FieldByName("TypeUrl").SetString(extName) - sv.FieldByName("Value").SetBytes(b) - fieldSet["type_url"] = true - fieldSet["value"] = true - continue - } - - var desc *ExtensionDesc - // This could be faster, but it's functional. - // TODO: Do something smarter than a linear scan. - for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) { - if d.Name == extName { - desc = d - break - } - } - if desc == nil { - return p.errorf("unrecognized extension %q", extName) - } - - props := &Properties{} - props.Parse(desc.Tag) - - typ := reflect.TypeOf(desc.ExtensionType) - if err := p.checkForColon(props, typ); err != nil { - return err - } - - rep := desc.repeated() - - // Read the extension structure, and set it in - // the value we're constructing. - var ext reflect.Value - if !rep { - ext = reflect.New(typ).Elem() - } else { - ext = reflect.New(typ.Elem()).Elem() - } - if err := p.readAny(ext, props); err != nil { - if _, ok := err.(*RequiredNotSetError); !ok { - return err - } - reqFieldErr = err - } - ep := sv.Addr().Interface().(Message) - if !rep { - SetExtension(ep, desc, ext.Interface()) - } else { - old, err := GetExtension(ep, desc) - var sl reflect.Value - if err == nil { - sl = reflect.ValueOf(old) // existing slice - } else { - sl = reflect.MakeSlice(typ, 0, 1) - } - sl = reflect.Append(sl, ext) - SetExtension(ep, desc, sl.Interface()) - } - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - continue - } - - // This is a normal, non-extension field. - name := tok.value - var dst reflect.Value - fi, props, ok := structFieldByName(sprops, name) - if ok { - dst = sv.Field(fi) - } else if oop, ok := sprops.OneofTypes[name]; ok { - // It is a oneof. - props = oop.Prop - nv := reflect.New(oop.Type.Elem()) - dst = nv.Elem().Field(0) - field := sv.Field(oop.Field) - if !field.IsNil() { - return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name) - } - field.Set(nv) - } - if !dst.IsValid() { - return p.errorf("unknown field name %q in %v", name, st) - } - - if dst.Kind() == reflect.Map { - // Consume any colon. - if err := p.checkForColon(props, dst.Type()); err != nil { - return err - } - - // Construct the map if it doesn't already exist. - if dst.IsNil() { - dst.Set(reflect.MakeMap(dst.Type())) - } - key := reflect.New(dst.Type().Key()).Elem() - val := reflect.New(dst.Type().Elem()).Elem() - - // The map entry should be this sequence of tokens: - // < key : KEY value : VALUE > - // However, implementations may omit key or value, and technically - // we should support them in any order. See b/28924776 for a time - // this went wrong. - - tok := p.next() - var terminator string - switch tok.value { - case "<": - terminator = ">" - case "{": - terminator = "}" - default: - return p.errorf("expected '{' or '<', found %q", tok.value) - } - for { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value == terminator { - break - } - switch tok.value { - case "key": - if err := p.consumeToken(":"); err != nil { - return err - } - if err := p.readAny(key, props.MapKeyProp); err != nil { - return err - } - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - case "value": - if err := p.checkForColon(props.MapValProp, dst.Type().Elem()); err != nil { - return err - } - if err := p.readAny(val, props.MapValProp); err != nil { - return err - } - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - default: - p.back() - return p.errorf(`expected "key", "value", or %q, found %q`, terminator, tok.value) - } - } - - dst.SetMapIndex(key, val) - continue - } - - // Check that it's not already set if it's not a repeated field. - if !props.Repeated && fieldSet[name] { - return p.errorf("non-repeated field %q was repeated", name) - } - - if err := p.checkForColon(props, dst.Type()); err != nil { - return err - } - - // Parse into the field. - fieldSet[name] = true - if err := p.readAny(dst, props); err != nil { - if _, ok := err.(*RequiredNotSetError); !ok { - return err - } - reqFieldErr = err - } - if props.Required { - reqCount-- - } - - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - - } - - if reqCount > 0 { - return p.missingRequiredFieldError(sv) - } - return reqFieldErr -} - -// consumeExtName consumes extension name or expanded Any type URL and the -// following ']'. It returns the name or URL consumed. -func (p *textParser) consumeExtName() (string, error) { - tok := p.next() - if tok.err != nil { - return "", tok.err - } - - // If extension name or type url is quoted, it's a single token. - if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] { - name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0])) - if err != nil { - return "", err - } - return name, p.consumeToken("]") - } - - // Consume everything up to "]" - var parts []string - for tok.value != "]" { - parts = append(parts, tok.value) - tok = p.next() - if tok.err != nil { - return "", p.errorf("unrecognized type_url or extension name: %s", tok.err) - } - if p.done && tok.value != "]" { - return "", p.errorf("unclosed type_url or extension name") - } - } - return strings.Join(parts, ""), nil -} - -// consumeOptionalSeparator consumes an optional semicolon or comma. -// It is used in readStruct to provide backward compatibility. -func (p *textParser) consumeOptionalSeparator() error { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value != ";" && tok.value != "," { - p.back() - } - return nil -} - -func (p *textParser) readAny(v reflect.Value, props *Properties) error { - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value == "" { - return p.errorf("unexpected EOF") - } - - switch fv := v; fv.Kind() { - case reflect.Slice: - at := v.Type() - if at.Elem().Kind() == reflect.Uint8 { - // Special case for []byte - if tok.value[0] != '"' && tok.value[0] != '\'' { - // Deliberately written out here, as the error after - // this switch statement would write "invalid []byte: ...", - // which is not as user-friendly. - return p.errorf("invalid string: %v", tok.value) - } - bytes := []byte(tok.unquoted) - fv.Set(reflect.ValueOf(bytes)) - return nil - } - // Repeated field. - if tok.value == "[" { - // Repeated field with list notation, like [1,2,3]. - for { - fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) - err := p.readAny(fv.Index(fv.Len()-1), props) - if err != nil { - return err - } - tok := p.next() - if tok.err != nil { - return tok.err - } - if tok.value == "]" { - break - } - if tok.value != "," { - return p.errorf("Expected ']' or ',' found %q", tok.value) - } - } - return nil - } - // One value of the repeated field. - p.back() - fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) - return p.readAny(fv.Index(fv.Len()-1), props) - case reflect.Bool: - // true/1/t/True or false/f/0/False. - switch tok.value { - case "true", "1", "t", "True": - fv.SetBool(true) - return nil - case "false", "0", "f", "False": - fv.SetBool(false) - return nil - } - case reflect.Float32, reflect.Float64: - v := tok.value - // Ignore 'f' for compatibility with output generated by C++, but don't - // remove 'f' when the value is "-inf" or "inf". - if strings.HasSuffix(v, "f") && tok.value != "-inf" && tok.value != "inf" { - v = v[:len(v)-1] - } - if f, err := strconv.ParseFloat(v, fv.Type().Bits()); err == nil { - fv.SetFloat(f) - return nil - } - case reflect.Int32: - if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil { - fv.SetInt(x) - return nil - } - - if len(props.Enum) == 0 { - break - } - m, ok := enumValueMaps[props.Enum] - if !ok { - break - } - x, ok := m[tok.value] - if !ok { - break - } - fv.SetInt(int64(x)) - return nil - case reflect.Int64: - if x, err := strconv.ParseInt(tok.value, 0, 64); err == nil { - fv.SetInt(x) - return nil - } - - case reflect.Ptr: - // A basic field (indirected through pointer), or a repeated message/group - p.back() - fv.Set(reflect.New(fv.Type().Elem())) - return p.readAny(fv.Elem(), props) - case reflect.String: - if tok.value[0] == '"' || tok.value[0] == '\'' { - fv.SetString(tok.unquoted) - return nil - } - case reflect.Struct: - var terminator string - switch tok.value { - case "{": - terminator = "}" - case "<": - terminator = ">" - default: - return p.errorf("expected '{' or '<', found %q", tok.value) - } - // TODO: Handle nested messages which implement encoding.TextUnmarshaler. - return p.readStruct(fv, terminator) - case reflect.Uint32: - if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { - fv.SetUint(uint64(x)) - return nil - } - case reflect.Uint64: - if x, err := strconv.ParseUint(tok.value, 0, 64); err == nil { - fv.SetUint(x) - return nil - } - } - return p.errorf("invalid %v: %v", v.Type(), tok.value) -} - -// UnmarshalText reads a protocol buffer in Text format. UnmarshalText resets pb -// before starting to unmarshal, so any existing data in pb is always removed. -// If a required field is not set and no other error occurs, -// UnmarshalText returns *RequiredNotSetError. -func UnmarshalText(s string, pb Message) error { - if um, ok := pb.(encoding.TextUnmarshaler); ok { - return um.UnmarshalText([]byte(s)) - } - pb.Reset() - v := reflect.ValueOf(pb) - return newTextParser(s).readStruct(v.Elem(), "") -} diff --git a/vendor/github.com/google/go-github/LICENSE b/vendor/github.com/google/go-github/LICENSE deleted file mode 100644 index 28b6486f0..000000000 --- a/vendor/github.com/google/go-github/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2013 The go-github 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/google/go-github/github/activity.go b/vendor/github.com/google/go-github/github/activity.go deleted file mode 100644 index d6c992c7f..000000000 --- a/vendor/github.com/google/go-github/github/activity.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import "context" - -// ActivityService handles communication with the activity related -// methods of the GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/activity/ -type ActivityService service - -// FeedLink represents a link to a related resource. -type FeedLink struct { - HRef *string `json:"href,omitempty"` - Type *string `json:"type,omitempty"` -} - -// Feeds represents timeline resources in Atom format. -type Feeds struct { - TimelineURL *string `json:"timeline_url,omitempty"` - UserURL *string `json:"user_url,omitempty"` - CurrentUserPublicURL *string `json:"current_user_public_url,omitempty"` - CurrentUserURL *string `json:"current_user_url,omitempty"` - CurrentUserActorURL *string `json:"current_user_actor_url,omitempty"` - CurrentUserOrganizationURL *string `json:"current_user_organization_url,omitempty"` - CurrentUserOrganizationURLs []string `json:"current_user_organization_urls,omitempty"` - Links *struct { - Timeline *FeedLink `json:"timeline,omitempty"` - User *FeedLink `json:"user,omitempty"` - CurrentUserPublic *FeedLink `json:"current_user_public,omitempty"` - CurrentUser *FeedLink `json:"current_user,omitempty"` - CurrentUserActor *FeedLink `json:"current_user_actor,omitempty"` - CurrentUserOrganization *FeedLink `json:"current_user_organization,omitempty"` - CurrentUserOrganizations []FeedLink `json:"current_user_organizations,omitempty"` - } `json:"_links,omitempty"` -} - -// ListFeeds lists all the feeds available to the authenticated user. -// -// GitHub provides several timeline resources in Atom format: -// Timeline: The GitHub global public timeline -// User: The public timeline for any user, using URI template -// Current user public: The public timeline for the authenticated user -// Current user: The private timeline for the authenticated user -// Current user actor: The private timeline for activity created by the -// authenticated user -// Current user organizations: The private timeline for the organizations -// the authenticated user is a member of. -// -// Note: Private feeds are only returned when authenticating via Basic Auth -// since current feed URIs use the older, non revocable auth tokens. -func (s *ActivityService) ListFeeds(ctx context.Context) (*Feeds, *Response, error) { - req, err := s.client.NewRequest("GET", "feeds", nil) - if err != nil { - return nil, nil, err - } - - f := &Feeds{} - resp, err := s.client.Do(ctx, req, f) - if err != nil { - return nil, resp, err - } - - return f, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/activity_events.go b/vendor/github.com/google/go-github/github/activity_events.go deleted file mode 100644 index f337fcd2b..000000000 --- a/vendor/github.com/google/go-github/github/activity_events.go +++ /dev/null @@ -1,324 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "encoding/json" - "fmt" - "time" -) - -// Event represents a GitHub event. -type Event struct { - Type *string `json:"type,omitempty"` - Public *bool `json:"public,omitempty"` - RawPayload *json.RawMessage `json:"payload,omitempty"` - Repo *Repository `json:"repo,omitempty"` - Actor *User `json:"actor,omitempty"` - Org *Organization `json:"org,omitempty"` - CreatedAt *time.Time `json:"created_at,omitempty"` - ID *string `json:"id,omitempty"` -} - -func (e Event) String() string { - return Stringify(e) -} - -// ParsePayload parses the event payload. For recognized event types, -// a value of the corresponding struct type will be returned. -func (e *Event) ParsePayload() (payload interface{}, err error) { - switch *e.Type { - case "CommitCommentEvent": - payload = &CommitCommentEvent{} - case "CreateEvent": - payload = &CreateEvent{} - case "DeleteEvent": - payload = &DeleteEvent{} - case "DeploymentEvent": - payload = &DeploymentEvent{} - case "DeploymentStatusEvent": - payload = &DeploymentStatusEvent{} - case "ForkEvent": - payload = &ForkEvent{} - case "GollumEvent": - payload = &GollumEvent{} - case "InstallationEvent": - payload = &InstallationEvent{} - case "InstallationRepositoriesEvent": - payload = &InstallationRepositoriesEvent{} - case "IssueCommentEvent": - payload = &IssueCommentEvent{} - case "IssuesEvent": - payload = &IssuesEvent{} - case "LabelEvent": - payload = &LabelEvent{} - case "MarketplacePurchaseEvent": - payload = &MarketplacePurchaseEvent{} - case "MemberEvent": - payload = &MemberEvent{} - case "MembershipEvent": - payload = &MembershipEvent{} - case "MilestoneEvent": - payload = &MilestoneEvent{} - case "OrganizationEvent": - payload = &OrganizationEvent{} - case "OrgBlockEvent": - payload = &OrgBlockEvent{} - case "PageBuildEvent": - payload = &PageBuildEvent{} - case "PingEvent": - payload = &PingEvent{} - case "ProjectEvent": - payload = &ProjectEvent{} - case "ProjectCardEvent": - payload = &ProjectCardEvent{} - case "ProjectColumnEvent": - payload = &ProjectColumnEvent{} - case "PublicEvent": - payload = &PublicEvent{} - case "PullRequestEvent": - payload = &PullRequestEvent{} - case "PullRequestReviewEvent": - payload = &PullRequestReviewEvent{} - case "PullRequestReviewCommentEvent": - payload = &PullRequestReviewCommentEvent{} - case "PushEvent": - payload = &PushEvent{} - case "ReleaseEvent": - payload = &ReleaseEvent{} - case "RepositoryEvent": - payload = &RepositoryEvent{} - case "StatusEvent": - payload = &StatusEvent{} - case "TeamEvent": - payload = &TeamEvent{} - case "TeamAddEvent": - payload = &TeamAddEvent{} - case "WatchEvent": - payload = &WatchEvent{} - } - err = json.Unmarshal(*e.RawPayload, &payload) - return payload, err -} - -// Payload returns the parsed event payload. For recognized event types, -// a value of the corresponding struct type will be returned. -// -// Deprecated: Use ParsePayload instead, which returns an error -// rather than panics if JSON unmarshaling raw payload fails. -func (e *Event) Payload() (payload interface{}) { - var err error - payload, err = e.ParsePayload() - if err != nil { - panic(err) - } - return payload -} - -// ListEvents drinks from the firehose of all public events across GitHub. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/#list-public-events -func (s *ActivityService) ListEvents(ctx context.Context, opt *ListOptions) ([]*Event, *Response, error) { - u, err := addOptions("events", opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var events []*Event - resp, err := s.client.Do(ctx, req, &events) - if err != nil { - return nil, resp, err - } - - return events, resp, nil -} - -// ListRepositoryEvents lists events for a repository. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/#list-repository-events -func (s *ActivityService) ListRepositoryEvents(ctx context.Context, owner, repo string, opt *ListOptions) ([]*Event, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/events", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var events []*Event - resp, err := s.client.Do(ctx, req, &events) - if err != nil { - return nil, resp, err - } - - return events, resp, nil -} - -// ListIssueEventsForRepository lists issue events for a repository. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/#list-issue-events-for-a-repository -func (s *ActivityService) ListIssueEventsForRepository(ctx context.Context, owner, repo string, opt *ListOptions) ([]*IssueEvent, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/events", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var events []*IssueEvent - resp, err := s.client.Do(ctx, req, &events) - if err != nil { - return nil, resp, err - } - - return events, resp, nil -} - -// ListEventsForRepoNetwork lists public events for a network of repositories. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/#list-public-events-for-a-network-of-repositories -func (s *ActivityService) ListEventsForRepoNetwork(ctx context.Context, owner, repo string, opt *ListOptions) ([]*Event, *Response, error) { - u := fmt.Sprintf("networks/%v/%v/events", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var events []*Event - resp, err := s.client.Do(ctx, req, &events) - if err != nil { - return nil, resp, err - } - - return events, resp, nil -} - -// ListEventsForOrganization lists public events for an organization. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/#list-public-events-for-an-organization -func (s *ActivityService) ListEventsForOrganization(ctx context.Context, org string, opt *ListOptions) ([]*Event, *Response, error) { - u := fmt.Sprintf("orgs/%v/events", org) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var events []*Event - resp, err := s.client.Do(ctx, req, &events) - if err != nil { - return nil, resp, err - } - - return events, resp, nil -} - -// ListEventsPerformedByUser lists the events performed by a user. If publicOnly is -// true, only public events will be returned. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/#list-events-performed-by-a-user -func (s *ActivityService) ListEventsPerformedByUser(ctx context.Context, user string, publicOnly bool, opt *ListOptions) ([]*Event, *Response, error) { - var u string - if publicOnly { - u = fmt.Sprintf("users/%v/events/public", user) - } else { - u = fmt.Sprintf("users/%v/events", user) - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var events []*Event - resp, err := s.client.Do(ctx, req, &events) - if err != nil { - return nil, resp, err - } - - return events, resp, nil -} - -// ListEventsReceivedByUser lists the events received by a user. If publicOnly is -// true, only public events will be returned. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/#list-events-that-a-user-has-received -func (s *ActivityService) ListEventsReceivedByUser(ctx context.Context, user string, publicOnly bool, opt *ListOptions) ([]*Event, *Response, error) { - var u string - if publicOnly { - u = fmt.Sprintf("users/%v/received_events/public", user) - } else { - u = fmt.Sprintf("users/%v/received_events", user) - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var events []*Event - resp, err := s.client.Do(ctx, req, &events) - if err != nil { - return nil, resp, err - } - - return events, resp, nil -} - -// ListUserEventsForOrganization provides the user’s organization dashboard. You -// must be authenticated as the user to view this. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/#list-events-for-an-organization -func (s *ActivityService) ListUserEventsForOrganization(ctx context.Context, org, user string, opt *ListOptions) ([]*Event, *Response, error) { - u := fmt.Sprintf("users/%v/events/orgs/%v", user, org) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var events []*Event - resp, err := s.client.Do(ctx, req, &events) - if err != nil { - return nil, resp, err - } - - return events, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/activity_notifications.go b/vendor/github.com/google/go-github/github/activity_notifications.go deleted file mode 100644 index 45c8b2aec..000000000 --- a/vendor/github.com/google/go-github/github/activity_notifications.go +++ /dev/null @@ -1,223 +0,0 @@ -// Copyright 2014 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// Notification identifies a GitHub notification for a user. -type Notification struct { - ID *string `json:"id,omitempty"` - Repository *Repository `json:"repository,omitempty"` - Subject *NotificationSubject `json:"subject,omitempty"` - - // Reason identifies the event that triggered the notification. - // - // GitHub API docs: https://developer.github.com/v3/activity/notifications/#notification-reasons - Reason *string `json:"reason,omitempty"` - - Unread *bool `json:"unread,omitempty"` - UpdatedAt *time.Time `json:"updated_at,omitempty"` - LastReadAt *time.Time `json:"last_read_at,omitempty"` - URL *string `json:"url,omitempty"` -} - -// NotificationSubject identifies the subject of a notification. -type NotificationSubject struct { - Title *string `json:"title,omitempty"` - URL *string `json:"url,omitempty"` - LatestCommentURL *string `json:"latest_comment_url,omitempty"` - Type *string `json:"type,omitempty"` -} - -// NotificationListOptions specifies the optional parameters to the -// ActivityService.ListNotifications method. -type NotificationListOptions struct { - All bool `url:"all,omitempty"` - Participating bool `url:"participating,omitempty"` - Since time.Time `url:"since,omitempty"` - Before time.Time `url:"before,omitempty"` - - ListOptions -} - -// ListNotifications lists all notifications for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/activity/notifications/#list-your-notifications -func (s *ActivityService) ListNotifications(ctx context.Context, opt *NotificationListOptions) ([]*Notification, *Response, error) { - u := fmt.Sprintf("notifications") - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var notifications []*Notification - resp, err := s.client.Do(ctx, req, ¬ifications) - if err != nil { - return nil, resp, err - } - - return notifications, resp, nil -} - -// ListRepositoryNotifications lists all notifications in a given repository -// for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/activity/notifications/#list-your-notifications-in-a-repository -func (s *ActivityService) ListRepositoryNotifications(ctx context.Context, owner, repo string, opt *NotificationListOptions) ([]*Notification, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/notifications", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var notifications []*Notification - resp, err := s.client.Do(ctx, req, ¬ifications) - if err != nil { - return nil, resp, err - } - - return notifications, resp, nil -} - -type markReadOptions struct { - LastReadAt time.Time `json:"last_read_at,omitempty"` -} - -// MarkNotificationsRead marks all notifications up to lastRead as read. -// -// GitHub API docs: https://developer.github.com/v3/activity/notifications/#mark-as-read -func (s *ActivityService) MarkNotificationsRead(ctx context.Context, lastRead time.Time) (*Response, error) { - opts := &markReadOptions{ - LastReadAt: lastRead, - } - req, err := s.client.NewRequest("PUT", "notifications", opts) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// MarkRepositoryNotificationsRead marks all notifications up to lastRead in -// the specified repository as read. -// -// GitHub API docs: https://developer.github.com/v3/activity/notifications/#mark-notifications-as-read-in-a-repository -func (s *ActivityService) MarkRepositoryNotificationsRead(ctx context.Context, owner, repo string, lastRead time.Time) (*Response, error) { - opts := &markReadOptions{ - LastReadAt: lastRead, - } - u := fmt.Sprintf("repos/%v/%v/notifications", owner, repo) - req, err := s.client.NewRequest("PUT", u, opts) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// GetThread gets the specified notification thread. -// -// GitHub API docs: https://developer.github.com/v3/activity/notifications/#view-a-single-thread -func (s *ActivityService) GetThread(ctx context.Context, id string) (*Notification, *Response, error) { - u := fmt.Sprintf("notifications/threads/%v", id) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - notification := new(Notification) - resp, err := s.client.Do(ctx, req, notification) - if err != nil { - return nil, resp, err - } - - return notification, resp, nil -} - -// MarkThreadRead marks the specified thread as read. -// -// GitHub API docs: https://developer.github.com/v3/activity/notifications/#mark-a-thread-as-read -func (s *ActivityService) MarkThreadRead(ctx context.Context, id string) (*Response, error) { - u := fmt.Sprintf("notifications/threads/%v", id) - - req, err := s.client.NewRequest("PATCH", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// GetThreadSubscription checks to see if the authenticated user is subscribed -// to a thread. -// -// GitHub API docs: https://developer.github.com/v3/activity/notifications/#get-a-thread-subscription -func (s *ActivityService) GetThreadSubscription(ctx context.Context, id string) (*Subscription, *Response, error) { - u := fmt.Sprintf("notifications/threads/%v/subscription", id) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - sub := new(Subscription) - resp, err := s.client.Do(ctx, req, sub) - if err != nil { - return nil, resp, err - } - - return sub, resp, nil -} - -// SetThreadSubscription sets the subscription for the specified thread for the -// authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/activity/notifications/#set-a-thread-subscription -func (s *ActivityService) SetThreadSubscription(ctx context.Context, id string, subscription *Subscription) (*Subscription, *Response, error) { - u := fmt.Sprintf("notifications/threads/%v/subscription", id) - - req, err := s.client.NewRequest("PUT", u, subscription) - if err != nil { - return nil, nil, err - } - - sub := new(Subscription) - resp, err := s.client.Do(ctx, req, sub) - if err != nil { - return nil, resp, err - } - - return sub, resp, nil -} - -// DeleteThreadSubscription deletes the subscription for the specified thread -// for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/activity/notifications/#delete-a-thread-subscription -func (s *ActivityService) DeleteThreadSubscription(ctx context.Context, id string) (*Response, error) { - u := fmt.Sprintf("notifications/threads/%v/subscription", id) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/activity_star.go b/vendor/github.com/google/go-github/github/activity_star.go deleted file mode 100644 index d5b067127..000000000 --- a/vendor/github.com/google/go-github/github/activity_star.go +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" -) - -// StarredRepository is returned by ListStarred. -type StarredRepository struct { - StarredAt *Timestamp `json:"starred_at,omitempty"` - Repository *Repository `json:"repo,omitempty"` -} - -// Stargazer represents a user that has starred a repository. -type Stargazer struct { - StarredAt *Timestamp `json:"starred_at,omitempty"` - User *User `json:"user,omitempty"` -} - -// ListStargazers lists people who have starred the specified repo. -// -// GitHub API docs: https://developer.github.com/v3/activity/starring/#list-stargazers -func (s *ActivityService) ListStargazers(ctx context.Context, owner, repo string, opt *ListOptions) ([]*Stargazer, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/stargazers", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeStarringPreview) - - var stargazers []*Stargazer - resp, err := s.client.Do(ctx, req, &stargazers) - if err != nil { - return nil, resp, err - } - - return stargazers, resp, nil -} - -// ActivityListStarredOptions specifies the optional parameters to the -// ActivityService.ListStarred method. -type ActivityListStarredOptions struct { - // How to sort the repository list. Possible values are: created, updated, - // pushed, full_name. Default is "full_name". - Sort string `url:"sort,omitempty"` - - // Direction in which to sort repositories. Possible values are: asc, desc. - // Default is "asc" when sort is "full_name", otherwise default is "desc". - Direction string `url:"direction,omitempty"` - - ListOptions -} - -// ListStarred lists all the repos starred by a user. Passing the empty string -// will list the starred repositories for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/activity/starring/#list-repositories-being-starred -func (s *ActivityService) ListStarred(ctx context.Context, user string, opt *ActivityListStarredOptions) ([]*StarredRepository, *Response, error) { - var u string - if user != "" { - u = fmt.Sprintf("users/%v/starred", user) - } else { - u = "user/starred" - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeStarringPreview) - - var repos []*StarredRepository - resp, err := s.client.Do(ctx, req, &repos) - if err != nil { - return nil, resp, err - } - - return repos, resp, nil -} - -// IsStarred checks if a repository is starred by authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/activity/starring/#check-if-you-are-starring-a-repository -func (s *ActivityService) IsStarred(ctx context.Context, owner, repo string) (bool, *Response, error) { - u := fmt.Sprintf("user/starred/%v/%v", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return false, nil, err - } - resp, err := s.client.Do(ctx, req, nil) - starred, err := parseBoolResponse(err) - return starred, resp, err -} - -// Star a repository as the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/activity/starring/#star-a-repository -func (s *ActivityService) Star(ctx context.Context, owner, repo string) (*Response, error) { - u := fmt.Sprintf("user/starred/%v/%v", owner, repo) - req, err := s.client.NewRequest("PUT", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} - -// Unstar a repository as the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/activity/starring/#unstar-a-repository -func (s *ActivityService) Unstar(ctx context.Context, owner, repo string) (*Response, error) { - u := fmt.Sprintf("user/starred/%v/%v", owner, repo) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/activity_watching.go b/vendor/github.com/google/go-github/github/activity_watching.go deleted file mode 100644 index c749ca86e..000000000 --- a/vendor/github.com/google/go-github/github/activity_watching.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2014 The go-github 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 github - -import ( - "context" - "fmt" -) - -// Subscription identifies a repository or thread subscription. -type Subscription struct { - Subscribed *bool `json:"subscribed,omitempty"` - Ignored *bool `json:"ignored,omitempty"` - Reason *string `json:"reason,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - URL *string `json:"url,omitempty"` - - // only populated for repository subscriptions - RepositoryURL *string `json:"repository_url,omitempty"` - - // only populated for thread subscriptions - ThreadURL *string `json:"thread_url,omitempty"` -} - -// ListWatchers lists watchers of a particular repo. -// -// GitHub API docs: https://developer.github.com/v3/activity/watching/#list-watchers -func (s *ActivityService) ListWatchers(ctx context.Context, owner, repo string, opt *ListOptions) ([]*User, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/subscribers", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var watchers []*User - resp, err := s.client.Do(ctx, req, &watchers) - if err != nil { - return nil, resp, err - } - - return watchers, resp, nil -} - -// ListWatched lists the repositories the specified user is watching. Passing -// the empty string will fetch watched repos for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/activity/watching/#list-repositories-being-watched -func (s *ActivityService) ListWatched(ctx context.Context, user string, opt *ListOptions) ([]*Repository, *Response, error) { - var u string - if user != "" { - u = fmt.Sprintf("users/%v/subscriptions", user) - } else { - u = "user/subscriptions" - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var watched []*Repository - resp, err := s.client.Do(ctx, req, &watched) - if err != nil { - return nil, resp, err - } - - return watched, resp, nil -} - -// GetRepositorySubscription returns the subscription for the specified -// repository for the authenticated user. If the authenticated user is not -// watching the repository, a nil Subscription is returned. -// -// GitHub API docs: https://developer.github.com/v3/activity/watching/#get-a-repository-subscription -func (s *ActivityService) GetRepositorySubscription(ctx context.Context, owner, repo string) (*Subscription, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/subscription", owner, repo) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - sub := new(Subscription) - resp, err := s.client.Do(ctx, req, sub) - if err != nil { - // if it's just a 404, don't return that as an error - _, err = parseBoolResponse(err) - return nil, resp, err - } - - return sub, resp, nil -} - -// SetRepositorySubscription sets the subscription for the specified repository -// for the authenticated user. -// -// To watch a repository, set subscription.Subscribed to true. -// To ignore notifications made within a repository, set subscription.Ignored to true. -// To stop watching a repository, use DeleteRepositorySubscription. -// -// GitHub API docs: https://developer.github.com/v3/activity/watching/#set-a-repository-subscription -func (s *ActivityService) SetRepositorySubscription(ctx context.Context, owner, repo string, subscription *Subscription) (*Subscription, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/subscription", owner, repo) - - req, err := s.client.NewRequest("PUT", u, subscription) - if err != nil { - return nil, nil, err - } - - sub := new(Subscription) - resp, err := s.client.Do(ctx, req, sub) - if err != nil { - return nil, resp, err - } - - return sub, resp, nil -} - -// DeleteRepositorySubscription deletes the subscription for the specified -// repository for the authenticated user. -// -// This is used to stop watching a repository. To control whether or not to -// receive notifications from a repository, use SetRepositorySubscription. -// -// GitHub API docs: https://developer.github.com/v3/activity/watching/#delete-a-repository-subscription -func (s *ActivityService) DeleteRepositorySubscription(ctx context.Context, owner, repo string) (*Response, error) { - u := fmt.Sprintf("repos/%s/%s/subscription", owner, repo) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/admin.go b/vendor/github.com/google/go-github/github/admin.go deleted file mode 100644 index 2d96733a1..000000000 --- a/vendor/github.com/google/go-github/github/admin.go +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2016 The go-github 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 github - -import ( - "context" - "fmt" -) - -// AdminService handles communication with the admin related methods of the -// GitHub API. These API routes are normally only accessible for GitHub -// Enterprise installations. -// -// GitHub API docs: https://developer.github.com/v3/enterprise/ -type AdminService service - -// TeamLDAPMapping represents the mapping between a GitHub team and an LDAP group. -type TeamLDAPMapping struct { - ID *int64 `json:"id,omitempty"` - LDAPDN *string `json:"ldap_dn,omitempty"` - URL *string `json:"url,omitempty"` - Name *string `json:"name,omitempty"` - Slug *string `json:"slug,omitempty"` - Description *string `json:"description,omitempty"` - Privacy *string `json:"privacy,omitempty"` - Permission *string `json:"permission,omitempty"` - - MembersURL *string `json:"members_url,omitempty"` - RepositoriesURL *string `json:"repositories_url,omitempty"` -} - -func (m TeamLDAPMapping) String() string { - return Stringify(m) -} - -// UserLDAPMapping represents the mapping between a GitHub user and an LDAP user. -type UserLDAPMapping struct { - ID *int64 `json:"id,omitempty"` - LDAPDN *string `json:"ldap_dn,omitempty"` - Login *string `json:"login,omitempty"` - AvatarURL *string `json:"avatar_url,omitempty"` - GravatarID *string `json:"gravatar_id,omitempty"` - Type *string `json:"type,omitempty"` - SiteAdmin *bool `json:"site_admin,omitempty"` - - URL *string `json:"url,omitempty"` - EventsURL *string `json:"events_url,omitempty"` - FollowingURL *string `json:"following_url,omitempty"` - FollowersURL *string `json:"followers_url,omitempty"` - GistsURL *string `json:"gists_url,omitempty"` - OrganizationsURL *string `json:"organizations_url,omitempty"` - ReceivedEventsURL *string `json:"received_events_url,omitempty"` - ReposURL *string `json:"repos_url,omitempty"` - StarredURL *string `json:"starred_url,omitempty"` - SubscriptionsURL *string `json:"subscriptions_url,omitempty"` -} - -func (m UserLDAPMapping) String() string { - return Stringify(m) -} - -// UpdateUserLDAPMapping updates the mapping between a GitHub user and an LDAP user. -// -// GitHub API docs: https://developer.github.com/v3/enterprise/ldap/#update-ldap-mapping-for-a-user -func (s *AdminService) UpdateUserLDAPMapping(ctx context.Context, user string, mapping *UserLDAPMapping) (*UserLDAPMapping, *Response, error) { - u := fmt.Sprintf("admin/ldap/users/%v/mapping", user) - req, err := s.client.NewRequest("PATCH", u, mapping) - if err != nil { - return nil, nil, err - } - - m := new(UserLDAPMapping) - resp, err := s.client.Do(ctx, req, m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// UpdateTeamLDAPMapping updates the mapping between a GitHub team and an LDAP group. -// -// GitHub API docs: https://developer.github.com/v3/enterprise/ldap/#update-ldap-mapping-for-a-team -func (s *AdminService) UpdateTeamLDAPMapping(ctx context.Context, team int64, mapping *TeamLDAPMapping) (*TeamLDAPMapping, *Response, error) { - u := fmt.Sprintf("admin/ldap/teams/%v/mapping", team) - req, err := s.client.NewRequest("PATCH", u, mapping) - if err != nil { - return nil, nil, err - } - - m := new(TeamLDAPMapping) - resp, err := s.client.Do(ctx, req, m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/admin_stats.go b/vendor/github.com/google/go-github/github/admin_stats.go deleted file mode 100644 index b5645f8c1..000000000 --- a/vendor/github.com/google/go-github/github/admin_stats.go +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright 2017 The go-github 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 github - -import ( - "context" - "fmt" -) - -// AdminStats represents a variety of stats of a Github Enterprise -// installation. -type AdminStats struct { - Issues *IssueStats `json:"issues,omitempty"` - Hooks *HookStats `json:"hooks,omitempty"` - Milestones *MilestoneStats `json:"milestones,omitempty"` - Orgs *OrgStats `json:"orgs,omitempty"` - Comments *CommentStats `json:"comments,omitempty"` - Pages *PageStats `json:"pages,omitempty"` - Users *UserStats `json:"users,omitempty"` - Gists *GistStats `json:"gists,omitempty"` - Pulls *PullStats `json:"pulls,omitempty"` - Repos *RepoStats `json:"repos,omitempty"` -} - -func (s AdminStats) String() string { - return Stringify(s) -} - -// IssueStats represents the number of total, open and closed issues. -type IssueStats struct { - TotalIssues *int `json:"total_issues,omitempty"` - OpenIssues *int `json:"open_issues,omitempty"` - ClosedIssues *int `json:"closed_issues,omitempty"` -} - -func (s IssueStats) String() string { - return Stringify(s) -} - -// HookStats represents the number of total, active and inactive hooks. -type HookStats struct { - TotalHooks *int `json:"total_hooks,omitempty"` - ActiveHooks *int `json:"active_hooks,omitempty"` - InactiveHooks *int `json:"inactive_hooks,omitempty"` -} - -func (s HookStats) String() string { - return Stringify(s) -} - -// MilestoneStats represents the number of total, open and close milestones. -type MilestoneStats struct { - TotalMilestones *int `json:"total_milestones,omitempty"` - OpenMilestones *int `json:"open_milestones,omitempty"` - ClosedMilestones *int `json:"closed_milestones,omitempty"` -} - -func (s MilestoneStats) String() string { - return Stringify(s) -} - -// OrgStats represents the number of total, disabled organizations and the team -// and team member count. -type OrgStats struct { - TotalOrgs *int `json:"total_orgs,omitempty"` - DisabledOrgs *int `json:"disabled_orgs,omitempty"` - TotalTeams *int `json:"total_teams,omitempty"` - TotalTeamMembers *int `json:"total_team_members,omitempty"` -} - -func (s OrgStats) String() string { - return Stringify(s) -} - -// CommentStats represents the number of total comments on commits, gists, issues -// and pull requests. -type CommentStats struct { - TotalCommitComments *int `json:"total_commit_comments,omitempty"` - TotalGistComments *int `json:"total_gist_comments,omitempty"` - TotalIssueComments *int `json:"total_issue_comments,omitempty"` - TotalPullRequestComments *int `json:"total_pull_request_comments,omitempty"` -} - -func (s CommentStats) String() string { - return Stringify(s) -} - -// PageStats represents the total number of github pages. -type PageStats struct { - TotalPages *int `json:"total_pages,omitempty"` -} - -func (s PageStats) String() string { - return Stringify(s) -} - -// UserStats represents the number of total, admin and suspended users. -type UserStats struct { - TotalUsers *int `json:"total_users,omitempty"` - AdminUsers *int `json:"admin_users,omitempty"` - SuspendedUsers *int `json:"suspended_users,omitempty"` -} - -func (s UserStats) String() string { - return Stringify(s) -} - -// GistStats represents the number of total, private and public gists. -type GistStats struct { - TotalGists *int `json:"total_gists,omitempty"` - PrivateGists *int `json:"private_gists,omitempty"` - PublicGists *int `json:"public_gists,omitempty"` -} - -func (s GistStats) String() string { - return Stringify(s) -} - -// PullStats represents the number of total, merged, mergable and unmergeable -// pull-requests. -type PullStats struct { - TotalPulls *int `json:"total_pulls,omitempty"` - MergedPulls *int `json:"merged_pulls,omitempty"` - MergablePulls *int `json:"mergeable_pulls,omitempty"` - UnmergablePulls *int `json:"unmergeable_pulls,omitempty"` -} - -func (s PullStats) String() string { - return Stringify(s) -} - -// RepoStats represents the number of total, root, fork, organization repositories -// together with the total number of pushes and wikis. -type RepoStats struct { - TotalRepos *int `json:"total_repos,omitempty"` - RootRepos *int `json:"root_repos,omitempty"` - ForkRepos *int `json:"fork_repos,omitempty"` - OrgRepos *int `json:"org_repos,omitempty"` - TotalPushes *int `json:"total_pushes,omitempty"` - TotalWikis *int `json:"total_wikis,omitempty"` -} - -func (s RepoStats) String() string { - return Stringify(s) -} - -// GetAdminStats returns a variety of metrics about a Github Enterprise -// installation. -// -// Please note that this is only available to site administrators, -// otherwise it will error with a 404 not found (instead of 401 or 403). -// -// GitHub API docs: https://developer.github.com/v3/enterprise-admin/admin_stats/ -func (s *AdminService) GetAdminStats(ctx context.Context) (*AdminStats, *Response, error) { - u := fmt.Sprintf("enterprise/stats/all") - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - m := new(AdminStats) - resp, err := s.client.Do(ctx, req, m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/apps.go b/vendor/github.com/google/go-github/github/apps.go deleted file mode 100644 index c1f7f1389..000000000 --- a/vendor/github.com/google/go-github/github/apps.go +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright 2016 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// AppsService provides access to the installation related functions -// in the GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/apps/ -type AppsService service - -// App represents a GitHub App. -type App struct { - ID *int64 `json:"id,omitempty"` - Owner *User `json:"owner,omitempty"` - Name *string `json:"name,omitempty"` - Description *string `json:"description,omitempty"` - ExternalURL *string `json:"external_url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - CreatedAt *time.Time `json:"created_at,omitempty"` - UpdatedAt *time.Time `json:"updated_at,omitempty"` -} - -// InstallationToken represents an installation token. -type InstallationToken struct { - Token *string `json:"token,omitempty"` - ExpiresAt *time.Time `json:"expires_at,omitempty"` -} - -// InstallationPermissions lists the permissions for metadata, contents, issues and single file for an installation. -type InstallationPermissions struct { - Metadata *string `json:"metadata,omitempty"` - Contents *string `json:"contents,omitempty"` - Issues *string `json:"issues,omitempty"` - SingleFile *string `json:"single_file,omitempty"` -} - -// Installation represents a GitHub Apps installation. -type Installation struct { - ID *int64 `json:"id,omitempty"` - AppID *int64 `json:"app_id,omitempty"` - TargetID *int64 `json:"target_id,omitempty"` - Account *User `json:"account,omitempty"` - AccessTokensURL *string `json:"access_tokens_url,omitempty"` - RepositoriesURL *string `json:"repositories_url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - TargetType *string `json:"target_type,omitempty"` - SingleFileName *string `json:"single_file_name,omitempty"` - RepositorySelection *string `json:"repository_selection,omitempty"` - Events []string `json:"events,omitempty"` - Permissions *InstallationPermissions `json:"permissions,omitempty"` -} - -func (i Installation) String() string { - return Stringify(i) -} - -// Get a single GitHub App. Passing the empty string will get -// the authenticated GitHub App. -// -// Note: appSlug is just the URL-friendly name of your GitHub App. -// You can find this on the settings page for your GitHub App -// (e.g., https://github.com/settings/apps/:app_slug). -// -// GitHub API docs: https://developer.github.com/v3/apps/#get-a-single-github-app -func (s *AppsService) Get(ctx context.Context, appSlug string) (*App, *Response, error) { - var u string - if appSlug != "" { - u = fmt.Sprintf("apps/%v", appSlug) - } else { - u = "app" - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeIntegrationPreview) - - app := new(App) - resp, err := s.client.Do(ctx, req, app) - if err != nil { - return nil, resp, err - } - - return app, resp, nil -} - -// ListInstallations lists the installations that the current GitHub App has. -// -// GitHub API docs: https://developer.github.com/v3/apps/#find-installations -func (s *AppsService) ListInstallations(ctx context.Context, opt *ListOptions) ([]*Installation, *Response, error) { - u, err := addOptions("app/installations", opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeIntegrationPreview) - - var i []*Installation - resp, err := s.client.Do(ctx, req, &i) - if err != nil { - return nil, resp, err - } - - return i, resp, nil -} - -// GetInstallation returns the specified installation. -// -// GitHub API docs: https://developer.github.com/v3/apps/#get-a-single-installation -func (s *AppsService) GetInstallation(ctx context.Context, id int64) (*Installation, *Response, error) { - u := fmt.Sprintf("app/installations/%v", id) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeIntegrationPreview) - - i := new(Installation) - resp, err := s.client.Do(ctx, req, i) - if err != nil { - return nil, resp, err - } - - return i, resp, nil -} - -// ListUserInstallations lists installations that are accessible to the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/apps/#list-installations-for-user -func (s *AppsService) ListUserInstallations(ctx context.Context, opt *ListOptions) ([]*Installation, *Response, error) { - u, err := addOptions("user/installations", opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeIntegrationPreview) - - var i struct { - Installations []*Installation `json:"installations"` - } - resp, err := s.client.Do(ctx, req, &i) - if err != nil { - return nil, resp, err - } - - return i.Installations, resp, nil -} - -// CreateInstallationToken creates a new installation token. -// -// GitHub API docs: https://developer.github.com/v3/apps/#create-a-new-installation-token -func (s *AppsService) CreateInstallationToken(ctx context.Context, id int64) (*InstallationToken, *Response, error) { - u := fmt.Sprintf("installations/%v/access_tokens", id) - - req, err := s.client.NewRequest("POST", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeIntegrationPreview) - - t := new(InstallationToken) - resp, err := s.client.Do(ctx, req, t) - if err != nil { - return nil, resp, err - } - - return t, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/apps_installation.go b/vendor/github.com/google/go-github/github/apps_installation.go deleted file mode 100644 index ccfecb8d8..000000000 --- a/vendor/github.com/google/go-github/github/apps_installation.go +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2016 The go-github 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 github - -import ( - "context" - "fmt" -) - -// ListRepos lists the repositories that are accessible to the authenticated installation. -// -// GitHub API docs: https://developer.github.com/v3/apps/installations/#list-repositories -func (s *AppsService) ListRepos(ctx context.Context, opt *ListOptions) ([]*Repository, *Response, error) { - u, err := addOptions("installation/repositories", opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeIntegrationPreview) - - var r struct { - Repositories []*Repository `json:"repositories"` - } - resp, err := s.client.Do(ctx, req, &r) - if err != nil { - return nil, resp, err - } - - return r.Repositories, resp, nil -} - -// ListUserRepos lists repositories that are accessible -// to the authenticated user for an installation. -// -// GitHub API docs: https://developer.github.com/v3/apps/installations/#list-repositories-accessible-to-the-user-for-an-installation -func (s *AppsService) ListUserRepos(ctx context.Context, id int64, opt *ListOptions) ([]*Repository, *Response, error) { - u := fmt.Sprintf("user/installations/%v/repositories", id) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeIntegrationPreview) - - var r struct { - Repositories []*Repository `json:"repositories"` - } - resp, err := s.client.Do(ctx, req, &r) - if err != nil { - return nil, resp, err - } - - return r.Repositories, resp, nil -} - -// AddRepository adds a single repository to an installation. -// -// GitHub API docs: https://developer.github.com/v3/apps/installations/#add-repository-to-installation -func (s *AppsService) AddRepository(ctx context.Context, instID, repoID int64) (*Repository, *Response, error) { - u := fmt.Sprintf("apps/installations/%v/repositories/%v", instID, repoID) - req, err := s.client.NewRequest("PUT", u, nil) - if err != nil { - return nil, nil, err - } - - r := new(Repository) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, nil -} - -// RemoveRepository removes a single repository from an installation. -// -// GitHub docs: https://developer.github.com/v3/apps/installations/#remove-repository-from-installation -func (s *AppsService) RemoveRepository(ctx context.Context, instID, repoID int64) (*Response, error) { - u := fmt.Sprintf("apps/installations/%v/repositories/%v", instID, repoID) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/apps_marketplace.go b/vendor/github.com/google/go-github/github/apps_marketplace.go deleted file mode 100644 index 089cdbf7e..000000000 --- a/vendor/github.com/google/go-github/github/apps_marketplace.go +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2017 The go-github 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 github - -import ( - "context" - "fmt" -) - -// MarketplaceService handles communication with the marketplace related -// methods of the GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/apps/marketplace/ -type MarketplaceService struct { - client *Client - // Stubbed controls whether endpoints that return stubbed data are used - // instead of production endpoints. Stubbed data is fake data that's useful - // for testing your GitHub Apps. Stubbed data is hard-coded and will not - // change based on actual subscriptions. - // - // GitHub API docs: https://developer.github.com/v3/apps/marketplace/ - Stubbed bool -} - -// MarketplacePlan represents a GitHub Apps Marketplace Listing Plan. -type MarketplacePlan struct { - URL *string `json:"url,omitempty"` - AccountsURL *string `json:"accounts_url,omitempty"` - ID *int64 `json:"id,omitempty"` - Name *string `json:"name,omitempty"` - Description *string `json:"description,omitempty"` - MonthlyPriceInCents *int `json:"monthly_price_in_cents,omitempty"` - YearlyPriceInCents *int `json:"yearly_price_in_cents,omitempty"` - PriceModel *string `json:"price_model,omitempty"` - UnitName *string `json:"unit_name,omitempty"` - Bullets *[]string `json:"bullets,omitempty"` -} - -// MarketplacePurchase represents a GitHub Apps Marketplace Purchase. -type MarketplacePurchase struct { - BillingCycle *string `json:"billing_cycle,omitempty"` - NextBillingDate *string `json:"next_billing_date,omitempty"` - UnitCount *int `json:"unit_count,omitempty"` - Plan *MarketplacePlan `json:"plan,omitempty"` - Account *MarketplacePlanAccount `json:"account,omitempty"` -} - -// MarketplacePlanAccount represents a GitHub Account (user or organization) on a specific plan. -type MarketplacePlanAccount struct { - URL *string `json:"url,omitempty"` - Type *string `json:"type,omitempty"` - ID *int64 `json:"id,omitempty"` - Login *string `json:"login,omitempty"` - Email *string `json:"email,omitempty"` - OrganizationBillingEmail *string `json:"organization_billing_email,omitempty"` - MarketplacePurchase *MarketplacePurchase `json:"marketplace_purchase,omitempty"` -} - -// ListPlans lists all plans for your Marketplace listing. -// -// GitHub API docs: https://developer.github.com/v3/apps/marketplace/#list-all-plans-for-your-marketplace-listing -func (s *MarketplaceService) ListPlans(ctx context.Context, opt *ListOptions) ([]*MarketplacePlan, *Response, error) { - uri := s.marketplaceURI("plans") - u, err := addOptions(uri, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeMarketplacePreview) - - var plans []*MarketplacePlan - resp, err := s.client.Do(ctx, req, &plans) - if err != nil { - return nil, resp, err - } - - return plans, resp, nil -} - -// ListPlanAccountsForPlan lists all GitHub accounts (user or organization) on a specific plan. -// -// GitHub API docs: https://developer.github.com/v3/apps/marketplace/#list-all-github-accounts-user-or-organization-on-a-specific-plan -func (s *MarketplaceService) ListPlanAccountsForPlan(ctx context.Context, planID int64, opt *ListOptions) ([]*MarketplacePlanAccount, *Response, error) { - uri := s.marketplaceURI(fmt.Sprintf("plans/%v/accounts", planID)) - u, err := addOptions(uri, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeMarketplacePreview) - - var accounts []*MarketplacePlanAccount - resp, err := s.client.Do(ctx, req, &accounts) - if err != nil { - return nil, resp, err - } - - return accounts, resp, nil -} - -// ListPlanAccountsForAccount lists all GitHub accounts (user or organization) associated with an account. -// -// GitHub API docs: https://developer.github.com/v3/apps/marketplace/#check-if-a-github-account-is-associated-with-any-marketplace-listing -func (s *MarketplaceService) ListPlanAccountsForAccount(ctx context.Context, accountID int64, opt *ListOptions) ([]*MarketplacePlanAccount, *Response, error) { - uri := s.marketplaceURI(fmt.Sprintf("accounts/%v", accountID)) - u, err := addOptions(uri, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeMarketplacePreview) - - var accounts []*MarketplacePlanAccount - resp, err := s.client.Do(ctx, req, &accounts) - if err != nil { - return nil, resp, err - } - - return accounts, resp, nil -} - -// ListMarketplacePurchasesForUser lists all GitHub marketplace purchases made by a user. -// -// GitHub API docs: https://developer.github.com/v3/apps/marketplace/#get-a-users-marketplace-purchases -func (s *MarketplaceService) ListMarketplacePurchasesForUser(ctx context.Context, opt *ListOptions) ([]*MarketplacePurchase, *Response, error) { - uri := "user/marketplace_purchases" - if s.Stubbed { - uri = "user/marketplace_purchases/stubbed" - } - - u, err := addOptions(uri, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeMarketplacePreview) - - var purchases []*MarketplacePurchase - resp, err := s.client.Do(ctx, req, &purchases) - if err != nil { - return nil, resp, err - } - - return purchases, resp, nil -} - -func (s *MarketplaceService) marketplaceURI(endpoint string) string { - url := "marketplace_listing" - if s.Stubbed { - url = "marketplace_listing/stubbed" - } - return url + "/" + endpoint -} diff --git a/vendor/github.com/google/go-github/github/authorizations.go b/vendor/github.com/google/go-github/github/authorizations.go deleted file mode 100644 index 190205b02..000000000 --- a/vendor/github.com/google/go-github/github/authorizations.go +++ /dev/null @@ -1,435 +0,0 @@ -// Copyright 2015 The go-github 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 github - -import ( - "context" - "fmt" -) - -// Scope models a GitHub authorization scope. -// -// GitHub API docs: https://developer.github.com/v3/oauth/#scopes -type Scope string - -// This is the set of scopes for GitHub API V3 -const ( - ScopeNone Scope = "(no scope)" // REVISIT: is this actually returned, or just a documentation artifact? - ScopeUser Scope = "user" - ScopeUserEmail Scope = "user:email" - ScopeUserFollow Scope = "user:follow" - ScopePublicRepo Scope = "public_repo" - ScopeRepo Scope = "repo" - ScopeRepoDeployment Scope = "repo_deployment" - ScopeRepoStatus Scope = "repo:status" - ScopeDeleteRepo Scope = "delete_repo" - ScopeNotifications Scope = "notifications" - ScopeGist Scope = "gist" - ScopeReadRepoHook Scope = "read:repo_hook" - ScopeWriteRepoHook Scope = "write:repo_hook" - ScopeAdminRepoHook Scope = "admin:repo_hook" - ScopeAdminOrgHook Scope = "admin:org_hook" - ScopeReadOrg Scope = "read:org" - ScopeWriteOrg Scope = "write:org" - ScopeAdminOrg Scope = "admin:org" - ScopeReadPublicKey Scope = "read:public_key" - ScopeWritePublicKey Scope = "write:public_key" - ScopeAdminPublicKey Scope = "admin:public_key" - ScopeReadGPGKey Scope = "read:gpg_key" - ScopeWriteGPGKey Scope = "write:gpg_key" - ScopeAdminGPGKey Scope = "admin:gpg_key" -) - -// AuthorizationsService handles communication with the authorization related -// methods of the GitHub API. -// -// This service requires HTTP Basic Authentication; it cannot be accessed using -// an OAuth token. -// -// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/ -type AuthorizationsService service - -// Authorization represents an individual GitHub authorization. -type Authorization struct { - ID *int64 `json:"id,omitempty"` - URL *string `json:"url,omitempty"` - Scopes []Scope `json:"scopes,omitempty"` - Token *string `json:"token,omitempty"` - TokenLastEight *string `json:"token_last_eight,omitempty"` - HashedToken *string `json:"hashed_token,omitempty"` - App *AuthorizationApp `json:"app,omitempty"` - Note *string `json:"note,omitempty"` - NoteURL *string `json:"note_url,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - Fingerprint *string `json:"fingerprint,omitempty"` - - // User is only populated by the Check and Reset methods. - User *User `json:"user,omitempty"` -} - -func (a Authorization) String() string { - return Stringify(a) -} - -// AuthorizationApp represents an individual GitHub app (in the context of authorization). -type AuthorizationApp struct { - URL *string `json:"url,omitempty"` - Name *string `json:"name,omitempty"` - ClientID *string `json:"client_id,omitempty"` -} - -func (a AuthorizationApp) String() string { - return Stringify(a) -} - -// Grant represents an OAuth application that has been granted access to an account. -type Grant struct { - ID *int64 `json:"id,omitempty"` - URL *string `json:"url,omitempty"` - App *AuthorizationApp `json:"app,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - Scopes []string `json:"scopes,omitempty"` -} - -func (g Grant) String() string { - return Stringify(g) -} - -// AuthorizationRequest represents a request to create an authorization. -type AuthorizationRequest struct { - Scopes []Scope `json:"scopes,omitempty"` - Note *string `json:"note,omitempty"` - NoteURL *string `json:"note_url,omitempty"` - ClientID *string `json:"client_id,omitempty"` - ClientSecret *string `json:"client_secret,omitempty"` - Fingerprint *string `json:"fingerprint,omitempty"` -} - -func (a AuthorizationRequest) String() string { - return Stringify(a) -} - -// AuthorizationUpdateRequest represents a request to update an authorization. -// -// Note that for any one update, you must only provide one of the "scopes" -// fields. That is, you may provide only one of "Scopes", or "AddScopes", or -// "RemoveScopes". -// -// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#update-an-existing-authorization -type AuthorizationUpdateRequest struct { - Scopes []string `json:"scopes,omitempty"` - AddScopes []string `json:"add_scopes,omitempty"` - RemoveScopes []string `json:"remove_scopes,omitempty"` - Note *string `json:"note,omitempty"` - NoteURL *string `json:"note_url,omitempty"` - Fingerprint *string `json:"fingerprint,omitempty"` -} - -func (a AuthorizationUpdateRequest) String() string { - return Stringify(a) -} - -// List the authorizations for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#list-your-authorizations -func (s *AuthorizationsService) List(ctx context.Context, opt *ListOptions) ([]*Authorization, *Response, error) { - u := "authorizations" - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var auths []*Authorization - resp, err := s.client.Do(ctx, req, &auths) - if err != nil { - return nil, resp, err - } - return auths, resp, nil -} - -// Get a single authorization. -// -// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#get-a-single-authorization -func (s *AuthorizationsService) Get(ctx context.Context, id int64) (*Authorization, *Response, error) { - u := fmt.Sprintf("authorizations/%d", id) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - a := new(Authorization) - resp, err := s.client.Do(ctx, req, a) - if err != nil { - return nil, resp, err - } - return a, resp, nil -} - -// Create a new authorization for the specified OAuth application. -// -// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization -func (s *AuthorizationsService) Create(ctx context.Context, auth *AuthorizationRequest) (*Authorization, *Response, error) { - u := "authorizations" - - req, err := s.client.NewRequest("POST", u, auth) - if err != nil { - return nil, nil, err - } - - a := new(Authorization) - resp, err := s.client.Do(ctx, req, a) - if err != nil { - return nil, resp, err - } - return a, resp, nil -} - -// GetOrCreateForApp creates a new authorization for the specified OAuth -// application, only if an authorization for that application doesn’t already -// exist for the user. -// -// If a new token is created, the HTTP status code will be "201 Created", and -// the returned Authorization.Token field will be populated. If an existing -// token is returned, the status code will be "200 OK" and the -// Authorization.Token field will be empty. -// -// clientID is the OAuth Client ID with which to create the token. -// -// GitHub API docs: -// https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app -// https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app-and-fingerprint -func (s *AuthorizationsService) GetOrCreateForApp(ctx context.Context, clientID string, auth *AuthorizationRequest) (*Authorization, *Response, error) { - var u string - if auth.Fingerprint == nil || *auth.Fingerprint == "" { - u = fmt.Sprintf("authorizations/clients/%v", clientID) - } else { - u = fmt.Sprintf("authorizations/clients/%v/%v", clientID, *auth.Fingerprint) - } - - req, err := s.client.NewRequest("PUT", u, auth) - if err != nil { - return nil, nil, err - } - - a := new(Authorization) - resp, err := s.client.Do(ctx, req, a) - if err != nil { - return nil, resp, err - } - - return a, resp, nil -} - -// Edit a single authorization. -// -// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#update-an-existing-authorization -func (s *AuthorizationsService) Edit(ctx context.Context, id int64, auth *AuthorizationUpdateRequest) (*Authorization, *Response, error) { - u := fmt.Sprintf("authorizations/%d", id) - - req, err := s.client.NewRequest("PATCH", u, auth) - if err != nil { - return nil, nil, err - } - - a := new(Authorization) - resp, err := s.client.Do(ctx, req, a) - if err != nil { - return nil, resp, err - } - - return a, resp, nil -} - -// Delete a single authorization. -// -// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#delete-an-authorization -func (s *AuthorizationsService) Delete(ctx context.Context, id int64) (*Response, error) { - u := fmt.Sprintf("authorizations/%d", id) - - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// Check if an OAuth token is valid for a specific app. -// -// Note that this operation requires the use of BasicAuth, but where the -// username is the OAuth application clientID, and the password is its -// clientSecret. Invalid tokens will return a 404 Not Found. -// -// The returned Authorization.User field will be populated. -// -// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#check-an-authorization -func (s *AuthorizationsService) Check(ctx context.Context, clientID string, token string) (*Authorization, *Response, error) { - u := fmt.Sprintf("applications/%v/tokens/%v", clientID, token) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - a := new(Authorization) - resp, err := s.client.Do(ctx, req, a) - if err != nil { - return nil, resp, err - } - - return a, resp, nil -} - -// Reset is used to reset a valid OAuth token without end user involvement. -// Applications must save the "token" property in the response, because changes -// take effect immediately. -// -// Note that this operation requires the use of BasicAuth, but where the -// username is the OAuth application clientID, and the password is its -// clientSecret. Invalid tokens will return a 404 Not Found. -// -// The returned Authorization.User field will be populated. -// -// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#reset-an-authorization -func (s *AuthorizationsService) Reset(ctx context.Context, clientID string, token string) (*Authorization, *Response, error) { - u := fmt.Sprintf("applications/%v/tokens/%v", clientID, token) - - req, err := s.client.NewRequest("POST", u, nil) - if err != nil { - return nil, nil, err - } - - a := new(Authorization) - resp, err := s.client.Do(ctx, req, a) - if err != nil { - return nil, resp, err - } - - return a, resp, nil -} - -// Revoke an authorization for an application. -// -// Note that this operation requires the use of BasicAuth, but where the -// username is the OAuth application clientID, and the password is its -// clientSecret. Invalid tokens will return a 404 Not Found. -// -// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#revoke-an-authorization-for-an-application -func (s *AuthorizationsService) Revoke(ctx context.Context, clientID string, token string) (*Response, error) { - u := fmt.Sprintf("applications/%v/tokens/%v", clientID, token) - - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// ListGrants lists the set of OAuth applications that have been granted -// access to a user's account. This will return one entry for each application -// that has been granted access to the account, regardless of the number of -// tokens an application has generated for the user. -// -// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#list-your-grants -func (s *AuthorizationsService) ListGrants(ctx context.Context, opt *ListOptions) ([]*Grant, *Response, error) { - u, err := addOptions("applications/grants", opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - grants := []*Grant{} - resp, err := s.client.Do(ctx, req, &grants) - if err != nil { - return nil, resp, err - } - - return grants, resp, nil -} - -// GetGrant gets a single OAuth application grant. -// -// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#get-a-single-grant -func (s *AuthorizationsService) GetGrant(ctx context.Context, id int64) (*Grant, *Response, error) { - u := fmt.Sprintf("applications/grants/%d", id) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - grant := new(Grant) - resp, err := s.client.Do(ctx, req, grant) - if err != nil { - return nil, resp, err - } - - return grant, resp, nil -} - -// DeleteGrant deletes an OAuth application grant. Deleting an application's -// grant will also delete all OAuth tokens associated with the application for -// the user. -// -// GitHub API docs: https://developer.github.com/v3/oauth_authorizations/#delete-a-grant -func (s *AuthorizationsService) DeleteGrant(ctx context.Context, id int64) (*Response, error) { - u := fmt.Sprintf("applications/grants/%d", id) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// CreateImpersonation creates an impersonation OAuth token. -// -// This requires admin permissions. With the returned Authorization.Token -// you can e.g. create or delete a user's public SSH key. NOTE: creating a -// new token automatically revokes an existing one. -// -// GitHub API docs: https://developer.github.com/enterprise/2.5/v3/users/administration/#create-an-impersonation-oauth-token -func (s *AuthorizationsService) CreateImpersonation(ctx context.Context, username string, authReq *AuthorizationRequest) (*Authorization, *Response, error) { - u := fmt.Sprintf("admin/users/%v/authorizations", username) - req, err := s.client.NewRequest("POST", u, authReq) - if err != nil { - return nil, nil, err - } - - a := new(Authorization) - resp, err := s.client.Do(ctx, req, a) - if err != nil { - return nil, resp, err - } - return a, resp, nil -} - -// DeleteImpersonation deletes an impersonation OAuth token. -// -// NOTE: there can be only one at a time. -// -// GitHub API docs: https://developer.github.com/enterprise/2.5/v3/users/administration/#delete-an-impersonation-oauth-token -func (s *AuthorizationsService) DeleteImpersonation(ctx context.Context, username string) (*Response, error) { - u := fmt.Sprintf("admin/users/%v/authorizations", username) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/doc.go b/vendor/github.com/google/go-github/github/doc.go deleted file mode 100644 index 96445d264..000000000 --- a/vendor/github.com/google/go-github/github/doc.go +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright 2013 The go-github 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 github provides a client for using the GitHub API. - -Usage: - - import "github.com/google/go-github/github" - -Construct a new GitHub client, then use the various services on the client to -access different parts of the GitHub API. For example: - - client := github.NewClient(nil) - - // list all organizations for user "willnorris" - orgs, _, err := client.Organizations.List(ctx, "willnorris", nil) - -Some API methods have optional parameters that can be passed. For example: - - client := github.NewClient(nil) - - // list public repositories for org "github" - opt := &github.RepositoryListByOrgOptions{Type: "public"} - repos, _, err := client.Repositories.ListByOrg(ctx, "github", opt) - -The services of a client divide the API into logical chunks and correspond to -the structure of the GitHub API documentation at -https://developer.github.com/v3/. - -NOTE: Using the https://godoc.org/context package, one can easily -pass cancelation signals and deadlines to various services of the client for -handling a request. In case there is no context available, then context.Background() -can be used as a starting point. - -For more sample code snippets, head over to the https://github.com/google/go-github/tree/master/example directory. - -Authentication - -The go-github library does not directly handle authentication. Instead, when -creating a new client, pass an http.Client that can handle authentication for -you. The easiest and recommended way to do this is using the golang.org/x/oauth2 -library, but you can always use any other library that provides an http.Client. -If you have an OAuth2 access token (for example, a personal API token), you can -use it with the oauth2 library using: - - import "golang.org/x/oauth2" - - func main() { - ctx := context.Background() - ts := oauth2.StaticTokenSource( - &oauth2.Token{AccessToken: "... your access token ..."}, - ) - tc := oauth2.NewClient(ctx, ts) - - client := github.NewClient(tc) - - // list all repositories for the authenticated user - repos, _, err := client.Repositories.List(ctx, "", nil) - } - -Note that when using an authenticated Client, all calls made by the client will -include the specified OAuth token. Therefore, authenticated clients should -almost never be shared between different users. - -See the oauth2 docs for complete instructions on using that library. - -For API methods that require HTTP Basic Authentication, use the -BasicAuthTransport. - -GitHub Apps authentication can be provided by the -https://github.com/bradleyfalzon/ghinstallation package. - - import "github.com/bradleyfalzon/ghinstallation" - - func main() { - // Wrap the shared transport for use with the integration ID 1 authenticating with installation ID 99. - itr, err := ghinstallation.NewKeyFromFile(http.DefaultTransport, 1, 99, "2016-10-19.private-key.pem") - if err != nil { - // Handle error. - } - - // Use installation transport with client - client := github.NewClient(&http.Client{Transport: itr}) - - // Use client... - } - -Rate Limiting - -GitHub imposes a rate limit on all API clients. Unauthenticated clients are -limited to 60 requests per hour, while authenticated clients can make up to -5,000 requests per hour. The Search API has a custom rate limit. Unauthenticated -clients are limited to 10 requests per minute, while authenticated clients -can make up to 30 requests per minute. To receive the higher rate limit when -making calls that are not issued on behalf of a user, -use UnauthenticatedRateLimitedTransport. - -The returned Response.Rate value contains the rate limit information -from the most recent API call. If a recent enough response isn't -available, you can use RateLimits to fetch the most up-to-date rate -limit data for the client. - -To detect an API rate limit error, you can check if its type is *github.RateLimitError: - - repos, _, err := client.Repositories.List(ctx, "", nil) - if _, ok := err.(*github.RateLimitError); ok { - log.Println("hit rate limit") - } - -Learn more about GitHub rate limiting at -https://developer.github.com/v3/#rate-limiting. - -Accepted Status - -Some endpoints may return a 202 Accepted status code, meaning that the -information required is not yet ready and was scheduled to be gathered on -the GitHub side. Methods known to behave like this are documented specifying -this behavior. - -To detect this condition of error, you can check if its type is -*github.AcceptedError: - - stats, _, err := client.Repositories.ListContributorsStats(ctx, org, repo) - if _, ok := err.(*github.AcceptedError); ok { - log.Println("scheduled on GitHub side") - } - -Conditional Requests - -The GitHub API has good support for conditional requests which will help -prevent you from burning through your rate limit, as well as help speed up your -application. go-github does not handle conditional requests directly, but is -instead designed to work with a caching http.Transport. We recommend using -https://github.com/gregjones/httpcache for that. - -Learn more about GitHub conditional requests at -https://developer.github.com/v3/#conditional-requests. - -Creating and Updating Resources - -All structs for GitHub resources use pointer values for all non-repeated fields. -This allows distinguishing between unset fields and those set to a zero-value. -Helper functions have been provided to easily create these pointers for string, -bool, and int values. For example: - - // create a new private repository named "foo" - repo := &github.Repository{ - Name: github.String("foo"), - Private: github.Bool(true), - } - client.Repositories.Create(ctx, "", repo) - -Users who have worked with protocol buffers should find this pattern familiar. - -Pagination - -All requests for resource collections (repos, pull requests, issues, etc.) -support pagination. Pagination options are described in the -github.ListOptions struct and passed to the list methods directly or as an -embedded type of a more specific list options struct (for example -github.PullRequestListOptions). Pages information is available via the -github.Response struct. - - client := github.NewClient(nil) - - opt := &github.RepositoryListByOrgOptions{ - ListOptions: github.ListOptions{PerPage: 10}, - } - // get all pages of results - var allRepos []*github.Repository - for { - repos, resp, err := client.Repositories.ListByOrg(ctx, "github", opt) - if err != nil { - return err - } - allRepos = append(allRepos, repos...) - if resp.NextPage == 0 { - break - } - opt.Page = resp.NextPage - } - -*/ -package github diff --git a/vendor/github.com/google/go-github/github/event_types.go b/vendor/github.com/google/go-github/github/event_types.go deleted file mode 100644 index 17c2b1023..000000000 --- a/vendor/github.com/google/go-github/github/event_types.go +++ /dev/null @@ -1,752 +0,0 @@ -// Copyright 2016 The go-github AUTHORS. All rights reserved. -// -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// These event types are shared between the Events API and used as Webhook payloads. - -package github - -// CommitCommentEvent is triggered when a commit comment is created. -// The Webhook event name is "commit_comment". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#commitcommentevent -type CommitCommentEvent struct { - Comment *RepositoryComment `json:"comment,omitempty"` - - // The following fields are only populated by Webhook events. - Action *string `json:"action,omitempty"` - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// CreateEvent represents a created repository, branch, or tag. -// The Webhook event name is "create". -// -// Note: webhooks will not receive this event for created repositories. -// Additionally, webhooks will not receive this event for tags if more -// than three tags are pushed at once. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#createevent -type CreateEvent struct { - Ref *string `json:"ref,omitempty"` - // RefType is the object that was created. Possible values are: "repository", "branch", "tag". - RefType *string `json:"ref_type,omitempty"` - MasterBranch *string `json:"master_branch,omitempty"` - Description *string `json:"description,omitempty"` - - // The following fields are only populated by Webhook events. - PusherType *string `json:"pusher_type,omitempty"` - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// DeleteEvent represents a deleted branch or tag. -// The Webhook event name is "delete". -// -// Note: webhooks will not receive this event for tags if more than three tags -// are deleted at once. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#deleteevent -type DeleteEvent struct { - Ref *string `json:"ref,omitempty"` - // RefType is the object that was deleted. Possible values are: "branch", "tag". - RefType *string `json:"ref_type,omitempty"` - - // The following fields are only populated by Webhook events. - PusherType *string `json:"pusher_type,omitempty"` - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// DeploymentEvent represents a deployment. -// The Webhook event name is "deployment". -// -// Events of this type are not visible in timelines, they are only used to trigger hooks. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#deploymentevent -type DeploymentEvent struct { - Deployment *Deployment `json:"deployment,omitempty"` - Repo *Repository `json:"repository,omitempty"` - - // The following fields are only populated by Webhook events. - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// DeploymentStatusEvent represents a deployment status. -// The Webhook event name is "deployment_status". -// -// Events of this type are not visible in timelines, they are only used to trigger hooks. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#deploymentstatusevent -type DeploymentStatusEvent struct { - Deployment *Deployment `json:"deployment,omitempty"` - DeploymentStatus *DeploymentStatus `json:"deployment_status,omitempty"` - Repo *Repository `json:"repository,omitempty"` - - // The following fields are only populated by Webhook events. - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// ForkEvent is triggered when a user forks a repository. -// The Webhook event name is "fork". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#forkevent -type ForkEvent struct { - // Forkee is the created repository. - Forkee *Repository `json:"forkee,omitempty"` - - // The following fields are only populated by Webhook events. - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// Page represents a single Wiki page. -type Page struct { - PageName *string `json:"page_name,omitempty"` - Title *string `json:"title,omitempty"` - Summary *string `json:"summary,omitempty"` - Action *string `json:"action,omitempty"` - SHA *string `json:"sha,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` -} - -// GollumEvent is triggered when a Wiki page is created or updated. -// The Webhook event name is "gollum". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#gollumevent -type GollumEvent struct { - Pages []*Page `json:"pages,omitempty"` - - // The following fields are only populated by Webhook events. - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// EditChange represents the changes when an issue, pull request, or comment has -// been edited. -type EditChange struct { - Title *struct { - From *string `json:"from,omitempty"` - } `json:"title,omitempty"` - Body *struct { - From *string `json:"from,omitempty"` - } `json:"body,omitempty"` -} - -// ProjectChange represents the changes when a project has been edited. -type ProjectChange struct { - Name *struct { - From *string `json:"from,omitempty"` - } `json:"name,omitempty"` - Body *struct { - From *string `json:"from,omitempty"` - } `json:"body,omitempty"` -} - -// ProjectCardChange represents the changes when a project card has been edited. -type ProjectCardChange struct { - Note *struct { - From *string `json:"from,omitempty"` - } `json:"note,omitempty"` -} - -// ProjectColumnChange represents the changes when a project column has been edited. -type ProjectColumnChange struct { - Name *struct { - From *string `json:"from,omitempty"` - } `json:"name,omitempty"` -} - -// TeamChange represents the changes when a team has been edited. -type TeamChange struct { - Description *struct { - From *string `json:"from,omitempty"` - } `json:"description,omitempty"` - Name *struct { - From *string `json:"from,omitempty"` - } `json:"name,omitempty"` - Privacy *struct { - From *string `json:"from,omitempty"` - } `json:"privacy,omitempty"` - Repository *struct { - Permissions *struct { - From *struct { - Admin *bool `json:"admin,omitempty"` - Pull *bool `json:"pull,omitempty"` - Push *bool `json:"push,omitempty"` - } `json:"from,omitempty"` - } `json:"permissions,omitempty"` - } `json:"repository,omitempty"` -} - -// InstallationEvent is triggered when a GitHub App has been installed or uninstalled. -// The Webhook event name is "installation". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#installationevent -type InstallationEvent struct { - // The action that was performed. Can be either "created" or "deleted". - Action *string `json:"action,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// InstallationRepositoriesEvent is triggered when a repository is added or -// removed from an installation. The Webhook event name is "installation_repositories". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#installationrepositoriesevent -type InstallationRepositoriesEvent struct { - // The action that was performed. Can be either "added" or "removed". - Action *string `json:"action,omitempty"` - RepositoriesAdded []*Repository `json:"repositories_added,omitempty"` - RepositoriesRemoved []*Repository `json:"repositories_removed,omitempty"` - RepositorySelection *string `json:"repository_selection,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// IssueCommentEvent is triggered when an issue comment is created on an issue -// or pull request. -// The Webhook event name is "issue_comment". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#issuecommentevent -type IssueCommentEvent struct { - // Action is the action that was performed on the comment. - // Possible values are: "created", "edited", "deleted". - Action *string `json:"action,omitempty"` - Issue *Issue `json:"issue,omitempty"` - Comment *IssueComment `json:"comment,omitempty"` - - // The following fields are only populated by Webhook events. - Changes *EditChange `json:"changes,omitempty"` - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// IssuesEvent is triggered when an issue is assigned, unassigned, labeled, -// unlabeled, opened, closed, or reopened. -// The Webhook event name is "issues". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#issuesevent -type IssuesEvent struct { - // Action is the action that was performed. Possible values are: "assigned", - // "unassigned", "labeled", "unlabeled", "opened", "closed", "reopened", "edited". - Action *string `json:"action,omitempty"` - Issue *Issue `json:"issue,omitempty"` - Assignee *User `json:"assignee,omitempty"` - Label *Label `json:"label,omitempty"` - - // The following fields are only populated by Webhook events. - Changes *EditChange `json:"changes,omitempty"` - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// LabelEvent is triggered when a repository's label is created, edited, or deleted. -// The Webhook event name is "label" -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#labelevent -type LabelEvent struct { - // Action is the action that was performed. Possible values are: - // "created", "edited", "deleted" - Action *string `json:"action,omitempty"` - Label *Label `json:"label,omitempty"` - - // The following fields are only populated by Webhook events. - Changes *EditChange `json:"changes,omitempty"` - Repo *Repository `json:"repository,omitempty"` - Org *Organization `json:"organization,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// MarketplacePurchaseEvent is triggered when a user purchases, cancels, or changes -// their GitHub Marketplace plan. -// Webhook event name "marketplace_purchase". -// -// Github API docs: https://developer.github.com/v3/activity/events/types/#marketplacepurchaseevent -type MarketplacePurchaseEvent struct { - // Action is the action that was performed. Possible values are: - // "purchased", "cancelled", "changed". - Action *string `json:"action,omitempty"` - - // The following fields are only populated by Webhook events. - EffectiveDate *Timestamp `json:"effective_date,omitempty"` - MarketplacePurchase *MarketplacePurchase `json:"marketplace_purchase,omitempty"` - PreviousMarketplacePurchase *MarketplacePurchase `json:"previous_marketplace_purchase,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// MemberEvent is triggered when a user is added as a collaborator to a repository. -// The Webhook event name is "member". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#memberevent -type MemberEvent struct { - // Action is the action that was performed. Possible value is: "added". - Action *string `json:"action,omitempty"` - Member *User `json:"member,omitempty"` - - // The following fields are only populated by Webhook events. - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// MembershipEvent is triggered when a user is added or removed from a team. -// The Webhook event name is "membership". -// -// Events of this type are not visible in timelines, they are only used to -// trigger organization webhooks. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#membershipevent -type MembershipEvent struct { - // Action is the action that was performed. Possible values are: "added", "removed". - Action *string `json:"action,omitempty"` - // Scope is the scope of the membership. Possible value is: "team". - Scope *string `json:"scope,omitempty"` - Member *User `json:"member,omitempty"` - Team *Team `json:"team,omitempty"` - - // The following fields are only populated by Webhook events. - Org *Organization `json:"organization,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// MilestoneEvent is triggered when a milestone is created, closed, opened, edited, or deleted. -// The Webhook event name is "milestone". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#milestoneevent -type MilestoneEvent struct { - // Action is the action that was performed. Possible values are: - // "created", "closed", "opened", "edited", "deleted" - Action *string `json:"action,omitempty"` - Milestone *Milestone `json:"milestone,omitempty"` - - // The following fields are only populated by Webhook events. - Changes *EditChange `json:"changes,omitempty"` - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Org *Organization `json:"organization,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// OrganizationEvent is triggered when a user is added, removed, or invited to an organization. -// Events of this type are not visible in timelines. These events are only used to trigger organization hooks. -// Webhook event name is "organization". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#organizationevent -type OrganizationEvent struct { - // Action is the action that was performed. - // Can be one of "member_added", "member_removed", or "member_invited". - Action *string `json:"action,omitempty"` - - // Invitaion is the invitation for the user or email if the action is "member_invited". - Invitation *Invitation `json:"invitation,omitempty"` - - // Membership is the membership between the user and the organization. - // Not present when the action is "member_invited". - Membership *Membership `json:"membership,omitempty"` - - Organization *Organization `json:"organization,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// OrgBlockEvent is triggered when an organization blocks or unblocks a user. -// The Webhook event name is "org_block". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#orgblockevent -type OrgBlockEvent struct { - // Action is the action that was performed. - // Can be "blocked" or "unblocked". - Action *string `json:"action,omitempty"` - BlockedUser *User `json:"blocked_user,omitempty"` - Organization *Organization `json:"organization,omitempty"` - Sender *User `json:"sender,omitempty"` - - // The following fields are only populated by Webhook events. - Installation *Installation `json:"installation,omitempty"` -} - -// PageBuildEvent represents an attempted build of a GitHub Pages site, whether -// successful or not. -// The Webhook event name is "page_build". -// -// This event is triggered on push to a GitHub Pages enabled branch (gh-pages -// for project pages, master for user and organization pages). -// -// Events of this type are not visible in timelines, they are only used to trigger hooks. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pagebuildevent -type PageBuildEvent struct { - Build *PagesBuild `json:"build,omitempty"` - - // The following fields are only populated by Webhook events. - ID *int64 `json:"id,omitempty"` - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// PingEvent is triggered when a Webhook is added to GitHub. -// -// GitHub API docs: https://developer.github.com/webhooks/#ping-event -type PingEvent struct { - // Random string of GitHub zen. - Zen *string `json:"zen,omitempty"` - // The ID of the webhook that triggered the ping. - HookID *int64 `json:"hook_id,omitempty"` - // The webhook configuration. - Hook *Hook `json:"hook,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// ProjectEvent is triggered when project is created, modified or deleted. -// The webhook event name is "project". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#projectevent -type ProjectEvent struct { - Action *string `json:"action,omitempty"` - Changes *ProjectChange `json:"changes,omitempty"` - Project *Project `json:"project,omitempty"` - - // The following fields are only populated by Webhook events. - Repo *Repository `json:"repository,omitempty"` - Org *Organization `json:"organization,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// ProjectCardEvent is triggered when a project card is created, updated, moved, converted to an issue, or deleted. -// The webhook event name is "project_card". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#projectcardevent -type ProjectCardEvent struct { - Action *string `json:"action,omitempty"` - Changes *ProjectCardChange `json:"changes,omitempty"` - AfterID *int64 `json:"after_id,omitempty"` - ProjectCard *ProjectCard `json:"project_card,omitempty"` - - // The following fields are only populated by Webhook events. - Repo *Repository `json:"repository,omitempty"` - Org *Organization `json:"organization,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// ProjectColumnEvent is triggered when a project column is created, updated, moved, or deleted. -// The webhook event name is "project_column". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#projectcolumnevent -type ProjectColumnEvent struct { - Action *string `json:"action,omitempty"` - Changes *ProjectColumnChange `json:"changes,omitempty"` - AfterID *int64 `json:"after_id,omitempty"` - ProjectColumn *ProjectColumn `json:"project_column,omitempty"` - - // The following fields are only populated by Webhook events. - Repo *Repository `json:"repository,omitempty"` - Org *Organization `json:"organization,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// PublicEvent is triggered when a private repository is open sourced. -// According to GitHub: "Without a doubt: the best GitHub event." -// The Webhook event name is "public". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#publicevent -type PublicEvent struct { - // The following fields are only populated by Webhook events. - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// PullRequestEvent is triggered when a pull request is assigned, unassigned, -// labeled, unlabeled, opened, closed, reopened, or synchronized. -// The Webhook event name is "pull_request". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pullrequestevent -type PullRequestEvent struct { - // Action is the action that was performed. Possible values are: - // "assigned", "unassigned", "review_requested", "review_request_removed", "labeled", "unlabeled", - // "opened", "closed", "reopened", "synchronize", "edited". - // If the action is "closed" and the merged key is false, - // the pull request was closed with unmerged commits. If the action is "closed" - // and the merged key is true, the pull request was merged. - Action *string `json:"action,omitempty"` - Number *int `json:"number,omitempty"` - PullRequest *PullRequest `json:"pull_request,omitempty"` - - // The following fields are only populated by Webhook events. - Changes *EditChange `json:"changes,omitempty"` - // RequestedReviewer is populated in "review_requested", "review_request_removed" event deliveries. - // A request affecting multiple reviewers at once is split into multiple - // such event deliveries, each with a single, different RequestedReviewer. - RequestedReviewer *User `json:"requested_reviewer,omitempty"` - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` - Label *Label `json:"label,omitempty"` // Populated in "labeled" event deliveries. -} - -// PullRequestReviewEvent is triggered when a review is submitted on a pull -// request. -// The Webhook event name is "pull_request_review". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pullrequestreviewevent -type PullRequestReviewEvent struct { - // Action is always "submitted". - Action *string `json:"action,omitempty"` - Review *PullRequestReview `json:"review,omitempty"` - PullRequest *PullRequest `json:"pull_request,omitempty"` - - // The following fields are only populated by Webhook events. - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` - - // The following field is only present when the webhook is triggered on - // a repository belonging to an organization. - Organization *Organization `json:"organization,omitempty"` -} - -// PullRequestReviewCommentEvent is triggered when a comment is created on a -// portion of the unified diff of a pull request. -// The Webhook event name is "pull_request_review_comment". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pullrequestreviewcommentevent -type PullRequestReviewCommentEvent struct { - // Action is the action that was performed on the comment. - // Possible values are: "created", "edited", "deleted". - Action *string `json:"action,omitempty"` - PullRequest *PullRequest `json:"pull_request,omitempty"` - Comment *PullRequestComment `json:"comment,omitempty"` - - // The following fields are only populated by Webhook events. - Changes *EditChange `json:"changes,omitempty"` - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// PushEvent represents a git push to a GitHub repository. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#pushevent -type PushEvent struct { - PushID *int64 `json:"push_id,omitempty"` - Head *string `json:"head,omitempty"` - Ref *string `json:"ref,omitempty"` - Size *int `json:"size,omitempty"` - Commits []PushEventCommit `json:"commits,omitempty"` - Before *string `json:"before,omitempty"` - DistinctSize *int `json:"distinct_size,omitempty"` - - // The following fields are only populated by Webhook events. - After *string `json:"after,omitempty"` - Created *bool `json:"created,omitempty"` - Deleted *bool `json:"deleted,omitempty"` - Forced *bool `json:"forced,omitempty"` - BaseRef *string `json:"base_ref,omitempty"` - Compare *string `json:"compare,omitempty"` - Repo *PushEventRepository `json:"repository,omitempty"` - HeadCommit *PushEventCommit `json:"head_commit,omitempty"` - Pusher *User `json:"pusher,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -func (p PushEvent) String() string { - return Stringify(p) -} - -// PushEventCommit represents a git commit in a GitHub PushEvent. -type PushEventCommit struct { - Message *string `json:"message,omitempty"` - Author *CommitAuthor `json:"author,omitempty"` - URL *string `json:"url,omitempty"` - Distinct *bool `json:"distinct,omitempty"` - - // The following fields are only populated by Events API. - SHA *string `json:"sha,omitempty"` - - // The following fields are only populated by Webhook events. - ID *string `json:"id,omitempty"` - TreeID *string `json:"tree_id,omitempty"` - Timestamp *Timestamp `json:"timestamp,omitempty"` - Committer *CommitAuthor `json:"committer,omitempty"` - Added []string `json:"added,omitempty"` - Removed []string `json:"removed,omitempty"` - Modified []string `json:"modified,omitempty"` -} - -func (p PushEventCommit) String() string { - return Stringify(p) -} - -// PushEventRepository represents the repo object in a PushEvent payload. -type PushEventRepository struct { - ID *int64 `json:"id,omitempty"` - Name *string `json:"name,omitempty"` - FullName *string `json:"full_name,omitempty"` - Owner *PushEventRepoOwner `json:"owner,omitempty"` - Private *bool `json:"private,omitempty"` - Description *string `json:"description,omitempty"` - Fork *bool `json:"fork,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - PushedAt *Timestamp `json:"pushed_at,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - Homepage *string `json:"homepage,omitempty"` - Size *int `json:"size,omitempty"` - StargazersCount *int `json:"stargazers_count,omitempty"` - WatchersCount *int `json:"watchers_count,omitempty"` - Language *string `json:"language,omitempty"` - HasIssues *bool `json:"has_issues,omitempty"` - HasDownloads *bool `json:"has_downloads,omitempty"` - HasWiki *bool `json:"has_wiki,omitempty"` - HasPages *bool `json:"has_pages,omitempty"` - ForksCount *int `json:"forks_count,omitempty"` - OpenIssuesCount *int `json:"open_issues_count,omitempty"` - DefaultBranch *string `json:"default_branch,omitempty"` - MasterBranch *string `json:"master_branch,omitempty"` - Organization *string `json:"organization,omitempty"` - URL *string `json:"url,omitempty"` - ArchiveURL *string `json:"archive_url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - StatusesURL *string `json:"statuses_url,omitempty"` - GitURL *string `json:"git_url,omitempty"` - SSHURL *string `json:"ssh_url,omitempty"` - CloneURL *string `json:"clone_url,omitempty"` - SVNURL *string `json:"svn_url,omitempty"` -} - -// PushEventRepoOwner is a basic representation of user/org in a PushEvent payload. -type PushEventRepoOwner struct { - Name *string `json:"name,omitempty"` - Email *string `json:"email,omitempty"` -} - -// ReleaseEvent is triggered when a release is published. -// The Webhook event name is "release". -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#releaseevent -type ReleaseEvent struct { - // Action is the action that was performed. Possible value is: "published". - Action *string `json:"action,omitempty"` - Release *RepositoryRelease `json:"release,omitempty"` - - // The following fields are only populated by Webhook events. - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// RepositoryEvent is triggered when a repository is created. -// The Webhook event name is "repository". -// -// Events of this type are not visible in timelines, they are only used to -// trigger organization webhooks. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#repositoryevent -type RepositoryEvent struct { - // Action is the action that was performed. Possible values are: "created", "deleted", - // "publicized", "privatized". - Action *string `json:"action,omitempty"` - Repo *Repository `json:"repository,omitempty"` - - // The following fields are only populated by Webhook events. - Org *Organization `json:"organization,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// StatusEvent is triggered when the status of a Git commit changes. -// The Webhook event name is "status". -// -// Events of this type are not visible in timelines, they are only used to -// trigger hooks. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#statusevent -type StatusEvent struct { - SHA *string `json:"sha,omitempty"` - // State is the new state. Possible values are: "pending", "success", "failure", "error". - State *string `json:"state,omitempty"` - Description *string `json:"description,omitempty"` - TargetURL *string `json:"target_url,omitempty"` - Branches []*Branch `json:"branches,omitempty"` - - // The following fields are only populated by Webhook events. - ID *int64 `json:"id,omitempty"` - Name *string `json:"name,omitempty"` - Context *string `json:"context,omitempty"` - Commit *RepositoryCommit `json:"commit,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// TeamEvent is triggered when an organization's team is created, modified or deleted. -// The Webhook event name is "team". -// -// Events of this type are not visible in timelines. These events are only used -// to trigger hooks. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#teamevent -type TeamEvent struct { - Action *string `json:"action,omitempty"` - Team *Team `json:"team,omitempty"` - Changes *TeamChange `json:"changes,omitempty"` - Repo *Repository `json:"repository,omitempty"` - - // The following fields are only populated by Webhook events. - Org *Organization `json:"organization,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// TeamAddEvent is triggered when a repository is added to a team. -// The Webhook event name is "team_add". -// -// Events of this type are not visible in timelines. These events are only used -// to trigger hooks. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#teamaddevent -type TeamAddEvent struct { - Team *Team `json:"team,omitempty"` - Repo *Repository `json:"repository,omitempty"` - - // The following fields are only populated by Webhook events. - Org *Organization `json:"organization,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} - -// WatchEvent is related to starring a repository, not watching. See this API -// blog post for an explanation: https://developer.github.com/changes/2012-09-05-watcher-api/ -// -// The event’s actor is the user who starred a repository, and the event’s -// repository is the repository that was starred. -// -// GitHub API docs: https://developer.github.com/v3/activity/events/types/#watchevent -type WatchEvent struct { - // Action is the action that was performed. Possible value is: "started". - Action *string `json:"action,omitempty"` - - // The following fields are only populated by Webhook events. - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` - Installation *Installation `json:"installation,omitempty"` -} diff --git a/vendor/github.com/google/go-github/github/gen-accessors.go b/vendor/github.com/google/go-github/github/gen-accessors.go deleted file mode 100644 index fe92206fc..000000000 --- a/vendor/github.com/google/go-github/github/gen-accessors.go +++ /dev/null @@ -1,332 +0,0 @@ -// Copyright 2017 The go-github AUTHORS. All rights reserved. -// -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build ignore - -// gen-accessors generates accessor methods for structs with pointer fields. -// -// It is meant to be used by the go-github authors in conjunction with the -// go generate tool before sending a commit to GitHub. -package main - -import ( - "bytes" - "flag" - "fmt" - "go/ast" - "go/format" - "go/parser" - "go/token" - "io/ioutil" - "log" - "os" - "sort" - "strings" - "text/template" -) - -const ( - fileSuffix = "-accessors.go" -) - -var ( - verbose = flag.Bool("v", false, "Print verbose log messages") - - sourceTmpl = template.Must(template.New("source").Parse(source)) - - // blacklistStructMethod lists "struct.method" combos to skip. - blacklistStructMethod = map[string]bool{ - "RepositoryContent.GetContent": true, - "Client.GetBaseURL": true, - "Client.GetUploadURL": true, - "ErrorResponse.GetResponse": true, - "RateLimitError.GetResponse": true, - "AbuseRateLimitError.GetResponse": true, - } - // blacklistStruct lists structs to skip. - blacklistStruct = map[string]bool{ - "Client": true, - } -) - -func logf(fmt string, args ...interface{}) { - if *verbose { - log.Printf(fmt, args...) - } -} - -func main() { - flag.Parse() - fset := token.NewFileSet() - - pkgs, err := parser.ParseDir(fset, ".", sourceFilter, 0) - if err != nil { - log.Fatal(err) - return - } - - for pkgName, pkg := range pkgs { - t := &templateData{ - filename: pkgName + fileSuffix, - Year: 2017, - Package: pkgName, - Imports: map[string]string{}, - } - for filename, f := range pkg.Files { - logf("Processing %v...", filename) - if err := t.processAST(f); err != nil { - log.Fatal(err) - } - } - if err := t.dump(); err != nil { - log.Fatal(err) - } - } - logf("Done.") -} - -func (t *templateData) processAST(f *ast.File) error { - for _, decl := range f.Decls { - gd, ok := decl.(*ast.GenDecl) - if !ok { - continue - } - for _, spec := range gd.Specs { - ts, ok := spec.(*ast.TypeSpec) - if !ok { - continue - } - // Skip unexported identifiers. - if !ts.Name.IsExported() { - logf("Struct %v is unexported; skipping.", ts.Name) - continue - } - // Check if the struct is blacklisted. - if blacklistStruct[ts.Name.Name] { - logf("Struct %v is blacklisted; skipping.", ts.Name) - continue - } - st, ok := ts.Type.(*ast.StructType) - if !ok { - continue - } - for _, field := range st.Fields.List { - se, ok := field.Type.(*ast.StarExpr) - if len(field.Names) == 0 || !ok { - continue - } - - fieldName := field.Names[0] - // Skip unexported identifiers. - if !fieldName.IsExported() { - logf("Field %v is unexported; skipping.", fieldName) - continue - } - // Check if "struct.method" is blacklisted. - if key := fmt.Sprintf("%v.Get%v", ts.Name, fieldName); blacklistStructMethod[key] { - logf("Method %v is blacklisted; skipping.", key) - continue - } - - switch x := se.X.(type) { - case *ast.ArrayType: - t.addArrayType(x, ts.Name.String(), fieldName.String()) - case *ast.Ident: - t.addIdent(x, ts.Name.String(), fieldName.String()) - case *ast.MapType: - t.addMapType(x, ts.Name.String(), fieldName.String()) - case *ast.SelectorExpr: - t.addSelectorExpr(x, ts.Name.String(), fieldName.String()) - default: - logf("processAST: type %q, field %q, unknown %T: %+v", ts.Name, fieldName, x, x) - } - } - } - } - return nil -} - -func sourceFilter(fi os.FileInfo) bool { - return !strings.HasSuffix(fi.Name(), "_test.go") && !strings.HasSuffix(fi.Name(), fileSuffix) -} - -func (t *templateData) dump() error { - if len(t.Getters) == 0 { - logf("No getters for %v; skipping.", t.filename) - return nil - } - - // Sort getters by ReceiverType.FieldName. - sort.Sort(byName(t.Getters)) - - var buf bytes.Buffer - if err := sourceTmpl.Execute(&buf, t); err != nil { - return err - } - clean, err := format.Source(buf.Bytes()) - if err != nil { - return err - } - - logf("Writing %v...", t.filename) - return ioutil.WriteFile(t.filename, clean, 0644) -} - -func newGetter(receiverType, fieldName, fieldType, zeroValue string, namedStruct bool) *getter { - return &getter{ - sortVal: strings.ToLower(receiverType) + "." + strings.ToLower(fieldName), - ReceiverVar: strings.ToLower(receiverType[:1]), - ReceiverType: receiverType, - FieldName: fieldName, - FieldType: fieldType, - ZeroValue: zeroValue, - NamedStruct: namedStruct, - } -} - -func (t *templateData) addArrayType(x *ast.ArrayType, receiverType, fieldName string) { - var eltType string - switch elt := x.Elt.(type) { - case *ast.Ident: - eltType = elt.String() - default: - logf("addArrayType: type %q, field %q: unknown elt type: %T %+v; skipping.", receiverType, fieldName, elt, elt) - return - } - - t.Getters = append(t.Getters, newGetter(receiverType, fieldName, "[]"+eltType, "nil", false)) -} - -func (t *templateData) addIdent(x *ast.Ident, receiverType, fieldName string) { - var zeroValue string - var namedStruct = false - switch x.String() { - case "int", "int64": - zeroValue = "0" - case "string": - zeroValue = `""` - case "bool": - zeroValue = "false" - case "Timestamp": - zeroValue = "Timestamp{}" - default: - zeroValue = "nil" - namedStruct = true - } - - t.Getters = append(t.Getters, newGetter(receiverType, fieldName, x.String(), zeroValue, namedStruct)) -} - -func (t *templateData) addMapType(x *ast.MapType, receiverType, fieldName string) { - var keyType string - switch key := x.Key.(type) { - case *ast.Ident: - keyType = key.String() - default: - logf("addMapType: type %q, field %q: unknown key type: %T %+v; skipping.", receiverType, fieldName, key, key) - return - } - - var valueType string - switch value := x.Value.(type) { - case *ast.Ident: - valueType = value.String() - default: - logf("addMapType: type %q, field %q: unknown value type: %T %+v; skipping.", receiverType, fieldName, value, value) - return - } - - fieldType := fmt.Sprintf("map[%v]%v", keyType, valueType) - zeroValue := fmt.Sprintf("map[%v]%v{}", keyType, valueType) - t.Getters = append(t.Getters, newGetter(receiverType, fieldName, fieldType, zeroValue, false)) -} - -func (t *templateData) addSelectorExpr(x *ast.SelectorExpr, receiverType, fieldName string) { - if strings.ToLower(fieldName[:1]) == fieldName[:1] { // Non-exported field. - return - } - - var xX string - if xx, ok := x.X.(*ast.Ident); ok { - xX = xx.String() - } - - switch xX { - case "time", "json": - if xX == "json" { - t.Imports["encoding/json"] = "encoding/json" - } else { - t.Imports[xX] = xX - } - fieldType := fmt.Sprintf("%v.%v", xX, x.Sel.Name) - zeroValue := fmt.Sprintf("%v.%v{}", xX, x.Sel.Name) - if xX == "time" && x.Sel.Name == "Duration" { - zeroValue = "0" - } - t.Getters = append(t.Getters, newGetter(receiverType, fieldName, fieldType, zeroValue, false)) - default: - logf("addSelectorExpr: xX %q, type %q, field %q: unknown x=%+v; skipping.", xX, receiverType, fieldName, x) - } -} - -type templateData struct { - filename string - Year int - Package string - Imports map[string]string - Getters []*getter -} - -type getter struct { - sortVal string // Lower-case version of "ReceiverType.FieldName". - ReceiverVar string // The one-letter variable name to match the ReceiverType. - ReceiverType string - FieldName string - FieldType string - ZeroValue string - NamedStruct bool // Getter for named struct. -} - -type byName []*getter - -func (b byName) Len() int { return len(b) } -func (b byName) Less(i, j int) bool { return b[i].sortVal < b[j].sortVal } -func (b byName) Swap(i, j int) { b[i], b[j] = b[j], b[i] } - -const source = `// Copyright {{.Year}} The go-github AUTHORS. All rights reserved. -// -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Code generated by gen-accessors; DO NOT EDIT. - -package {{.Package}} -{{with .Imports}} -import ( - {{- range . -}} - "{{.}}" - {{end -}} -) -{{end}} -{{range .Getters}} -{{if .NamedStruct}} -// Get{{.FieldName}} returns the {{.FieldName}} field. -func ({{.ReceiverVar}} *{{.ReceiverType}}) Get{{.FieldName}}() *{{.FieldType}} { - if {{.ReceiverVar}} == nil { - return {{.ZeroValue}} - } - return {{.ReceiverVar}}.{{.FieldName}} -} -{{else}} -// Get{{.FieldName}} returns the {{.FieldName}} field if it's non-nil, zero value otherwise. -func ({{.ReceiverVar}} *{{.ReceiverType}}) Get{{.FieldName}}() {{.FieldType}} { - if {{.ReceiverVar}} == nil || {{.ReceiverVar}}.{{.FieldName}} == nil { - return {{.ZeroValue}} - } - return *{{.ReceiverVar}}.{{.FieldName}} -} -{{end}} -{{end}} -` diff --git a/vendor/github.com/google/go-github/github/gists.go b/vendor/github.com/google/go-github/github/gists.go deleted file mode 100644 index 9108b6424..000000000 --- a/vendor/github.com/google/go-github/github/gists.go +++ /dev/null @@ -1,388 +0,0 @@ -// Copyright 2013 The go-github AUTHORS. All rights reserved. -// -// Use of this source code is governed by BSD-style -// license that can be found in the LICENSE file. - -package github - -import ( - "context" - "fmt" - "time" -) - -// GistsService handles communication with the Gist related -// methods of the GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/gists/ -type GistsService service - -// Gist represents a GitHub's gist. -type Gist struct { - ID *string `json:"id,omitempty"` - Description *string `json:"description,omitempty"` - Public *bool `json:"public,omitempty"` - Owner *User `json:"owner,omitempty"` - Files map[GistFilename]GistFile `json:"files,omitempty"` - Comments *int `json:"comments,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - GitPullURL *string `json:"git_pull_url,omitempty"` - GitPushURL *string `json:"git_push_url,omitempty"` - CreatedAt *time.Time `json:"created_at,omitempty"` - UpdatedAt *time.Time `json:"updated_at,omitempty"` - NodeID *string `json:"node_id,omitempty"` -} - -func (g Gist) String() string { - return Stringify(g) -} - -// GistFilename represents filename on a gist. -type GistFilename string - -// GistFile represents a file on a gist. -type GistFile struct { - Size *int `json:"size,omitempty"` - Filename *string `json:"filename,omitempty"` - Language *string `json:"language,omitempty"` - Type *string `json:"type,omitempty"` - RawURL *string `json:"raw_url,omitempty"` - Content *string `json:"content,omitempty"` -} - -func (g GistFile) String() string { - return Stringify(g) -} - -// GistCommit represents a commit on a gist. -type GistCommit struct { - URL *string `json:"url,omitempty"` - Version *string `json:"version,omitempty"` - User *User `json:"user,omitempty"` - ChangeStatus *CommitStats `json:"change_status,omitempty"` - CommittedAt *Timestamp `json:"committed_at,omitempty"` - NodeID *string `json:"node_id,omitempty"` -} - -func (gc GistCommit) String() string { - return Stringify(gc) -} - -// GistFork represents a fork of a gist. -type GistFork struct { - URL *string `json:"url,omitempty"` - User *User `json:"user,omitempty"` - ID *string `json:"id,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - NodeID *string `json:"node_id,omitempty"` -} - -func (gf GistFork) String() string { - return Stringify(gf) -} - -// GistListOptions specifies the optional parameters to the -// GistsService.List, GistsService.ListAll, and GistsService.ListStarred methods. -type GistListOptions struct { - // Since filters Gists by time. - Since time.Time `url:"since,omitempty"` - - ListOptions -} - -// List gists for a user. Passing the empty string will list -// all public gists if called anonymously. However, if the call -// is authenticated, it will returns all gists for the authenticated -// user. -// -// GitHub API docs: https://developer.github.com/v3/gists/#list-gists -func (s *GistsService) List(ctx context.Context, user string, opt *GistListOptions) ([]*Gist, *Response, error) { - var u string - if user != "" { - u = fmt.Sprintf("users/%v/gists", user) - } else { - u = "gists" - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - var gists []*Gist - resp, err := s.client.Do(ctx, req, &gists) - if err != nil { - return nil, resp, err - } - - return gists, resp, nil -} - -// ListAll lists all public gists. -// -// GitHub API docs: https://developer.github.com/v3/gists/#list-gists -func (s *GistsService) ListAll(ctx context.Context, opt *GistListOptions) ([]*Gist, *Response, error) { - u, err := addOptions("gists/public", opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - var gists []*Gist - resp, err := s.client.Do(ctx, req, &gists) - if err != nil { - return nil, resp, err - } - - return gists, resp, nil -} - -// ListStarred lists starred gists of authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/gists/#list-gists -func (s *GistsService) ListStarred(ctx context.Context, opt *GistListOptions) ([]*Gist, *Response, error) { - u, err := addOptions("gists/starred", opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - var gists []*Gist - resp, err := s.client.Do(ctx, req, &gists) - if err != nil { - return nil, resp, err - } - - return gists, resp, nil -} - -// Get a single gist. -// -// GitHub API docs: https://developer.github.com/v3/gists/#get-a-single-gist -func (s *GistsService) Get(ctx context.Context, id string) (*Gist, *Response, error) { - u := fmt.Sprintf("gists/%v", id) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - gist := new(Gist) - resp, err := s.client.Do(ctx, req, gist) - if err != nil { - return nil, resp, err - } - - return gist, resp, nil -} - -// GetRevision gets a specific revision of a gist. -// -// GitHub API docs: https://developer.github.com/v3/gists/#get-a-specific-revision-of-a-gist -func (s *GistsService) GetRevision(ctx context.Context, id, sha string) (*Gist, *Response, error) { - u := fmt.Sprintf("gists/%v/%v", id, sha) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - gist := new(Gist) - resp, err := s.client.Do(ctx, req, gist) - if err != nil { - return nil, resp, err - } - - return gist, resp, nil -} - -// Create a gist for authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/gists/#create-a-gist -func (s *GistsService) Create(ctx context.Context, gist *Gist) (*Gist, *Response, error) { - u := "gists" - req, err := s.client.NewRequest("POST", u, gist) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - g := new(Gist) - resp, err := s.client.Do(ctx, req, g) - if err != nil { - return nil, resp, err - } - - return g, resp, nil -} - -// Edit a gist. -// -// GitHub API docs: https://developer.github.com/v3/gists/#edit-a-gist -func (s *GistsService) Edit(ctx context.Context, id string, gist *Gist) (*Gist, *Response, error) { - u := fmt.Sprintf("gists/%v", id) - req, err := s.client.NewRequest("PATCH", u, gist) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - g := new(Gist) - resp, err := s.client.Do(ctx, req, g) - if err != nil { - return nil, resp, err - } - - return g, resp, nil -} - -// ListCommits lists commits of a gist. -// -// GitHub API docs: https://developer.github.com/v3/gists/#list-gist-commits -func (s *GistsService) ListCommits(ctx context.Context, id string, opt *ListOptions) ([]*GistCommit, *Response, error) { - u := fmt.Sprintf("gists/%v/commits", id) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - var gistCommits []*GistCommit - resp, err := s.client.Do(ctx, req, &gistCommits) - if err != nil { - return nil, resp, err - } - - return gistCommits, resp, nil -} - -// Delete a gist. -// -// GitHub API docs: https://developer.github.com/v3/gists/#delete-a-gist -func (s *GistsService) Delete(ctx context.Context, id string) (*Response, error) { - u := fmt.Sprintf("gists/%v", id) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} - -// Star a gist on behalf of authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/gists/#star-a-gist -func (s *GistsService) Star(ctx context.Context, id string) (*Response, error) { - u := fmt.Sprintf("gists/%v/star", id) - req, err := s.client.NewRequest("PUT", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} - -// Unstar a gist on a behalf of authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/gists/#unstar-a-gist -func (s *GistsService) Unstar(ctx context.Context, id string) (*Response, error) { - u := fmt.Sprintf("gists/%v/star", id) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} - -// IsStarred checks if a gist is starred by authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/gists/#check-if-a-gist-is-starred -func (s *GistsService) IsStarred(ctx context.Context, id string) (bool, *Response, error) { - u := fmt.Sprintf("gists/%v/star", id) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return false, nil, err - } - resp, err := s.client.Do(ctx, req, nil) - starred, err := parseBoolResponse(err) - return starred, resp, err -} - -// Fork a gist. -// -// GitHub API docs: https://developer.github.com/v3/gists/#fork-a-gist -func (s *GistsService) Fork(ctx context.Context, id string) (*Gist, *Response, error) { - u := fmt.Sprintf("gists/%v/forks", id) - req, err := s.client.NewRequest("POST", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - g := new(Gist) - resp, err := s.client.Do(ctx, req, g) - if err != nil { - return nil, resp, err - } - - return g, resp, nil -} - -// ListForks lists forks of a gist. -// -// GitHub API docs: https://developer.github.com/v3/gists/#list-gist-forks -func (s *GistsService) ListForks(ctx context.Context, id string) ([]*GistFork, *Response, error) { - u := fmt.Sprintf("gists/%v/forks", id) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - var gistForks []*GistFork - resp, err := s.client.Do(ctx, req, &gistForks) - if err != nil { - return nil, resp, err - } - - return gistForks, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/gists_comments.go b/vendor/github.com/google/go-github/github/gists_comments.go deleted file mode 100644 index d5322e3d8..000000000 --- a/vendor/github.com/google/go-github/github/gists_comments.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// GistComment represents a Gist comment. -type GistComment struct { - ID *int64 `json:"id,omitempty"` - URL *string `json:"url,omitempty"` - Body *string `json:"body,omitempty"` - User *User `json:"user,omitempty"` - CreatedAt *time.Time `json:"created_at,omitempty"` -} - -func (g GistComment) String() string { - return Stringify(g) -} - -// ListComments lists all comments for a gist. -// -// GitHub API docs: https://developer.github.com/v3/gists/comments/#list-comments-on-a-gist -func (s *GistsService) ListComments(ctx context.Context, gistID string, opt *ListOptions) ([]*GistComment, *Response, error) { - u := fmt.Sprintf("gists/%v/comments", gistID) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var comments []*GistComment - resp, err := s.client.Do(ctx, req, &comments) - if err != nil { - return nil, resp, err - } - - return comments, resp, nil -} - -// GetComment retrieves a single comment from a gist. -// -// GitHub API docs: https://developer.github.com/v3/gists/comments/#get-a-single-comment -func (s *GistsService) GetComment(ctx context.Context, gistID string, commentID int64) (*GistComment, *Response, error) { - u := fmt.Sprintf("gists/%v/comments/%v", gistID, commentID) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - c := new(GistComment) - resp, err := s.client.Do(ctx, req, c) - if err != nil { - return nil, resp, err - } - - return c, resp, nil -} - -// CreateComment creates a comment for a gist. -// -// GitHub API docs: https://developer.github.com/v3/gists/comments/#create-a-comment -func (s *GistsService) CreateComment(ctx context.Context, gistID string, comment *GistComment) (*GistComment, *Response, error) { - u := fmt.Sprintf("gists/%v/comments", gistID) - req, err := s.client.NewRequest("POST", u, comment) - if err != nil { - return nil, nil, err - } - - c := new(GistComment) - resp, err := s.client.Do(ctx, req, c) - if err != nil { - return nil, resp, err - } - - return c, resp, nil -} - -// EditComment edits an existing gist comment. -// -// GitHub API docs: https://developer.github.com/v3/gists/comments/#edit-a-comment -func (s *GistsService) EditComment(ctx context.Context, gistID string, commentID int64, comment *GistComment) (*GistComment, *Response, error) { - u := fmt.Sprintf("gists/%v/comments/%v", gistID, commentID) - req, err := s.client.NewRequest("PATCH", u, comment) - if err != nil { - return nil, nil, err - } - - c := new(GistComment) - resp, err := s.client.Do(ctx, req, c) - if err != nil { - return nil, resp, err - } - - return c, resp, nil -} - -// DeleteComment deletes a gist comment. -// -// GitHub API docs: https://developer.github.com/v3/gists/comments/#delete-a-comment -func (s *GistsService) DeleteComment(ctx context.Context, gistID string, commentID int64) (*Response, error) { - u := fmt.Sprintf("gists/%v/comments/%v", gistID, commentID) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/git.go b/vendor/github.com/google/go-github/github/git.go deleted file mode 100644 index 1ce47437b..000000000 --- a/vendor/github.com/google/go-github/github/git.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2013 The go-github 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 github - -// GitService handles communication with the git data related -// methods of the GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/git/ -type GitService service diff --git a/vendor/github.com/google/go-github/github/git_blobs.go b/vendor/github.com/google/go-github/github/git_blobs.go deleted file mode 100644 index 5290c5538..000000000 --- a/vendor/github.com/google/go-github/github/git_blobs.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "bytes" - "context" - "fmt" -) - -// Blob represents a blob object. -type Blob struct { - Content *string `json:"content,omitempty"` - Encoding *string `json:"encoding,omitempty"` - SHA *string `json:"sha,omitempty"` - Size *int `json:"size,omitempty"` - URL *string `json:"url,omitempty"` - NodeID *string `json:"node_id,omitempty"` -} - -// GetBlob fetches a blob from a repo given a SHA. -// -// GitHub API docs: https://developer.github.com/v3/git/blobs/#get-a-blob -func (s *GitService) GetBlob(ctx context.Context, owner string, repo string, sha string) (*Blob, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/git/blobs/%v", owner, repo, sha) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - blob := new(Blob) - resp, err := s.client.Do(ctx, req, blob) - return blob, resp, err -} - -// GetBlobRaw fetches a blob's contents from a repo. -// Unlike GetBlob, it returns the raw bytes rather than the base64-encoded data. -// -// GitHub API docs: https://developer.github.com/v3/git/blobs/#get-a-blob -func (s *GitService) GetBlobRaw(ctx context.Context, owner, repo, sha string) ([]byte, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/git/blobs/%v", owner, repo, sha) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - req.Header.Set("Accept", "application/vnd.github.v3.raw") - - var buf bytes.Buffer - resp, err := s.client.Do(ctx, req, &buf) - return buf.Bytes(), resp, err -} - -// CreateBlob creates a blob object. -// -// GitHub API docs: https://developer.github.com/v3/git/blobs/#create-a-blob -func (s *GitService) CreateBlob(ctx context.Context, owner string, repo string, blob *Blob) (*Blob, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/git/blobs", owner, repo) - req, err := s.client.NewRequest("POST", u, blob) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - t := new(Blob) - resp, err := s.client.Do(ctx, req, t) - return t, resp, err -} diff --git a/vendor/github.com/google/go-github/github/git_commits.go b/vendor/github.com/google/go-github/github/git_commits.go deleted file mode 100644 index 29882569c..000000000 --- a/vendor/github.com/google/go-github/github/git_commits.go +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" - "strings" - "time" -) - -// SignatureVerification represents GPG signature verification. -type SignatureVerification struct { - Verified *bool `json:"verified,omitempty"` - Reason *string `json:"reason,omitempty"` - Signature *string `json:"signature,omitempty"` - Payload *string `json:"payload,omitempty"` -} - -// Commit represents a GitHub commit. -type Commit struct { - SHA *string `json:"sha,omitempty"` - Author *CommitAuthor `json:"author,omitempty"` - Committer *CommitAuthor `json:"committer,omitempty"` - Message *string `json:"message,omitempty"` - Tree *Tree `json:"tree,omitempty"` - Parents []Commit `json:"parents,omitempty"` - Stats *CommitStats `json:"stats,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - URL *string `json:"url,omitempty"` - Verification *SignatureVerification `json:"verification,omitempty"` - NodeID *string `json:"node_id,omitempty"` - - // CommentCount is the number of GitHub comments on the commit. This - // is only populated for requests that fetch GitHub data like - // Pulls.ListCommits, Repositories.ListCommits, etc. - CommentCount *int `json:"comment_count,omitempty"` -} - -func (c Commit) String() string { - return Stringify(c) -} - -// CommitAuthor represents the author or committer of a commit. The commit -// author may not correspond to a GitHub User. -type CommitAuthor struct { - Date *time.Time `json:"date,omitempty"` - Name *string `json:"name,omitempty"` - Email *string `json:"email,omitempty"` - - // The following fields are only populated by Webhook events. - Login *string `json:"username,omitempty"` // Renamed for go-github consistency. -} - -func (c CommitAuthor) String() string { - return Stringify(c) -} - -// GetCommit fetchs the Commit object for a given SHA. -// -// GitHub API docs: https://developer.github.com/v3/git/commits/#get-a-commit -func (s *GitService) GetCommit(ctx context.Context, owner string, repo string, sha string) (*Commit, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/git/commits/%v", owner, repo, sha) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeGitSigningPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - c := new(Commit) - resp, err := s.client.Do(ctx, req, c) - if err != nil { - return nil, resp, err - } - - return c, resp, nil -} - -// createCommit represents the body of a CreateCommit request. -type createCommit struct { - Author *CommitAuthor `json:"author,omitempty"` - Committer *CommitAuthor `json:"committer,omitempty"` - Message *string `json:"message,omitempty"` - Tree *string `json:"tree,omitempty"` - Parents []string `json:"parents,omitempty"` -} - -// CreateCommit creates a new commit in a repository. -// commit must not be nil. -// -// The commit.Committer is optional and will be filled with the commit.Author -// data if omitted. If the commit.Author is omitted, it will be filled in with -// the authenticated user’s information and the current date. -// -// GitHub API docs: https://developer.github.com/v3/git/commits/#create-a-commit -func (s *GitService) CreateCommit(ctx context.Context, owner string, repo string, commit *Commit) (*Commit, *Response, error) { - if commit == nil { - return nil, nil, fmt.Errorf("commit must be provided") - } - - u := fmt.Sprintf("repos/%v/%v/git/commits", owner, repo) - - parents := make([]string, len(commit.Parents)) - for i, parent := range commit.Parents { - parents[i] = *parent.SHA - } - - body := &createCommit{ - Author: commit.Author, - Committer: commit.Committer, - Message: commit.Message, - Parents: parents, - } - if commit.Tree != nil { - body.Tree = commit.Tree.SHA - } - - req, err := s.client.NewRequest("POST", u, body) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - c := new(Commit) - resp, err := s.client.Do(ctx, req, c) - if err != nil { - return nil, resp, err - } - - return c, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/git_refs.go b/vendor/github.com/google/go-github/github/git_refs.go deleted file mode 100644 index 0947d866a..000000000 --- a/vendor/github.com/google/go-github/github/git_refs.go +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "strings" -) - -// Reference represents a GitHub reference. -type Reference struct { - Ref *string `json:"ref"` - URL *string `json:"url"` - Object *GitObject `json:"object"` - NodeID *string `json:"node_id,omitempty"` -} - -func (r Reference) String() string { - return Stringify(r) -} - -// GitObject represents a Git object. -type GitObject struct { - Type *string `json:"type"` - SHA *string `json:"sha"` - URL *string `json:"url"` -} - -func (o GitObject) String() string { - return Stringify(o) -} - -// createRefRequest represents the payload for creating a reference. -type createRefRequest struct { - Ref *string `json:"ref"` - SHA *string `json:"sha"` -} - -// updateRefRequest represents the payload for updating a reference. -type updateRefRequest struct { - SHA *string `json:"sha"` - Force *bool `json:"force"` -} - -// GetRef fetches a single Reference object for a given Git ref. -// If there is no exact match, GetRef will return an error. -// -// Note: The GitHub API can return multiple matches. -// If you wish to use this functionality please use the GetRefs() method. -// -// GitHub API docs: https://developer.github.com/v3/git/refs/#get-a-reference -func (s *GitService) GetRef(ctx context.Context, owner string, repo string, ref string) (*Reference, *Response, error) { - ref = strings.TrimPrefix(ref, "refs/") - u := fmt.Sprintf("repos/%v/%v/git/refs/%v", owner, repo, ref) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - r := new(Reference) - resp, err := s.client.Do(ctx, req, r) - if _, ok := err.(*json.UnmarshalTypeError); ok { - // Multiple refs, means there wasn't an exact match. - return nil, resp, errors.New("no exact match found for this ref") - } else if err != nil { - return nil, resp, err - } - - return r, resp, nil -} - -// GetRefs fetches a slice of Reference objects for a given Git ref. -// If there is an exact match, only that ref is returned. -// If there is no exact match, GitHub returns all refs that start with ref. -// If returned error is nil, there will be at least 1 ref returned. -// For example: -// -// "heads/featureA" -> ["refs/heads/featureA"] // Exact match, single ref is returned. -// "heads/feature" -> ["refs/heads/featureA", "refs/heads/featureB"] // All refs that start with ref. -// "heads/notexist" -> [] // Returns an error. -// -// GitHub API docs: https://developer.github.com/v3/git/refs/#get-a-reference -func (s *GitService) GetRefs(ctx context.Context, owner string, repo string, ref string) ([]*Reference, *Response, error) { - ref = strings.TrimPrefix(ref, "refs/") - u := fmt.Sprintf("repos/%v/%v/git/refs/%v", owner, repo, ref) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - var rawJSON json.RawMessage - resp, err := s.client.Do(ctx, req, &rawJSON) - if err != nil { - return nil, resp, err - } - - // Prioritize the most common case: a single returned ref. - r := new(Reference) - singleUnmarshalError := json.Unmarshal(rawJSON, r) - if singleUnmarshalError == nil { - return []*Reference{r}, resp, nil - } - - // Attempt to unmarshal multiple refs. - var rs []*Reference - multipleUnmarshalError := json.Unmarshal(rawJSON, &rs) - if multipleUnmarshalError == nil { - if len(rs) == 0 { - return nil, resp, fmt.Errorf("unexpected response from GitHub API: an array of refs with length 0") - } - return rs, resp, nil - } - - return nil, resp, fmt.Errorf("unmarshalling failed for both single and multiple refs: %s and %s", singleUnmarshalError, multipleUnmarshalError) -} - -// ReferenceListOptions specifies optional parameters to the -// GitService.ListRefs method. -type ReferenceListOptions struct { - Type string `url:"-"` - - ListOptions -} - -// ListRefs lists all refs in a repository. -// -// GitHub API docs: https://developer.github.com/v3/git/refs/#get-all-references -func (s *GitService) ListRefs(ctx context.Context, owner, repo string, opt *ReferenceListOptions) ([]*Reference, *Response, error) { - var u string - if opt != nil && opt.Type != "" { - u = fmt.Sprintf("repos/%v/%v/git/refs/%v", owner, repo, opt.Type) - } else { - u = fmt.Sprintf("repos/%v/%v/git/refs", owner, repo) - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - var rs []*Reference - resp, err := s.client.Do(ctx, req, &rs) - if err != nil { - return nil, resp, err - } - - return rs, resp, nil -} - -// CreateRef creates a new ref in a repository. -// -// GitHub API docs: https://developer.github.com/v3/git/refs/#create-a-reference -func (s *GitService) CreateRef(ctx context.Context, owner string, repo string, ref *Reference) (*Reference, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/git/refs", owner, repo) - req, err := s.client.NewRequest("POST", u, &createRefRequest{ - // back-compat with previous behavior that didn't require 'refs/' prefix - Ref: String("refs/" + strings.TrimPrefix(*ref.Ref, "refs/")), - SHA: ref.Object.SHA, - }) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - r := new(Reference) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, nil -} - -// UpdateRef updates an existing ref in a repository. -// -// GitHub API docs: https://developer.github.com/v3/git/refs/#update-a-reference -func (s *GitService) UpdateRef(ctx context.Context, owner string, repo string, ref *Reference, force bool) (*Reference, *Response, error) { - refPath := strings.TrimPrefix(*ref.Ref, "refs/") - u := fmt.Sprintf("repos/%v/%v/git/refs/%v", owner, repo, refPath) - req, err := s.client.NewRequest("PATCH", u, &updateRefRequest{ - SHA: ref.Object.SHA, - Force: &force, - }) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - r := new(Reference) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, nil -} - -// DeleteRef deletes a ref from a repository. -// -// GitHub API docs: https://developer.github.com/v3/git/refs/#delete-a-reference -func (s *GitService) DeleteRef(ctx context.Context, owner string, repo string, ref string) (*Response, error) { - ref = strings.TrimPrefix(ref, "refs/") - u := fmt.Sprintf("repos/%v/%v/git/refs/%v", owner, repo, ref) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/git_tags.go b/vendor/github.com/google/go-github/github/git_tags.go deleted file mode 100644 index f3822ffac..000000000 --- a/vendor/github.com/google/go-github/github/git_tags.go +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" - "strings" -) - -// Tag represents a tag object. -type Tag struct { - Tag *string `json:"tag,omitempty"` - SHA *string `json:"sha,omitempty"` - URL *string `json:"url,omitempty"` - Message *string `json:"message,omitempty"` - Tagger *CommitAuthor `json:"tagger,omitempty"` - Object *GitObject `json:"object,omitempty"` - Verification *SignatureVerification `json:"verification,omitempty"` - NodeID *string `json:"node_id,omitempty"` -} - -// createTagRequest represents the body of a CreateTag request. This is mostly -// identical to Tag with the exception that the object SHA and Type are -// top-level fields, rather than being nested inside a JSON object. -type createTagRequest struct { - Tag *string `json:"tag,omitempty"` - Message *string `json:"message,omitempty"` - Object *string `json:"object,omitempty"` - Type *string `json:"type,omitempty"` - Tagger *CommitAuthor `json:"tagger,omitempty"` -} - -// GetTag fetchs a tag from a repo given a SHA. -// -// GitHub API docs: https://developer.github.com/v3/git/tags/#get-a-tag -func (s *GitService) GetTag(ctx context.Context, owner string, repo string, sha string) (*Tag, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/git/tags/%v", owner, repo, sha) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeGitSigningPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - tag := new(Tag) - resp, err := s.client.Do(ctx, req, tag) - return tag, resp, err -} - -// CreateTag creates a tag object. -// -// GitHub API docs: https://developer.github.com/v3/git/tags/#create-a-tag-object -func (s *GitService) CreateTag(ctx context.Context, owner string, repo string, tag *Tag) (*Tag, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/git/tags", owner, repo) - - // convert Tag into a createTagRequest - tagRequest := &createTagRequest{ - Tag: tag.Tag, - Message: tag.Message, - Tagger: tag.Tagger, - } - if tag.Object != nil { - tagRequest.Object = tag.Object.SHA - tagRequest.Type = tag.Object.Type - } - - req, err := s.client.NewRequest("POST", u, tagRequest) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - t := new(Tag) - resp, err := s.client.Do(ctx, req, t) - return t, resp, err -} diff --git a/vendor/github.com/google/go-github/github/git_trees.go b/vendor/github.com/google/go-github/github/git_trees.go deleted file mode 100644 index 4d6809a88..000000000 --- a/vendor/github.com/google/go-github/github/git_trees.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" -) - -// Tree represents a GitHub tree. -type Tree struct { - SHA *string `json:"sha,omitempty"` - Entries []TreeEntry `json:"tree,omitempty"` -} - -func (t Tree) String() string { - return Stringify(t) -} - -// TreeEntry represents the contents of a tree structure. TreeEntry can -// represent either a blob, a commit (in the case of a submodule), or another -// tree. -type TreeEntry struct { - SHA *string `json:"sha,omitempty"` - Path *string `json:"path,omitempty"` - Mode *string `json:"mode,omitempty"` - Type *string `json:"type,omitempty"` - Size *int `json:"size,omitempty"` - Content *string `json:"content,omitempty"` - URL *string `json:"url,omitempty"` -} - -func (t TreeEntry) String() string { - return Stringify(t) -} - -// GetTree fetches the Tree object for a given sha hash from a repository. -// -// GitHub API docs: https://developer.github.com/v3/git/trees/#get-a-tree -func (s *GitService) GetTree(ctx context.Context, owner string, repo string, sha string, recursive bool) (*Tree, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/git/trees/%v", owner, repo, sha) - if recursive { - u += "?recursive=1" - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - t := new(Tree) - resp, err := s.client.Do(ctx, req, t) - if err != nil { - return nil, resp, err - } - - return t, resp, nil -} - -// createTree represents the body of a CreateTree request. -type createTree struct { - BaseTree string `json:"base_tree,omitempty"` - Entries []TreeEntry `json:"tree"` -} - -// CreateTree creates a new tree in a repository. If both a tree and a nested -// path modifying that tree are specified, it will overwrite the contents of -// that tree with the new path contents and write a new tree out. -// -// GitHub API docs: https://developer.github.com/v3/git/trees/#create-a-tree -func (s *GitService) CreateTree(ctx context.Context, owner string, repo string, baseTree string, entries []TreeEntry) (*Tree, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/git/trees", owner, repo) - - body := &createTree{ - BaseTree: baseTree, - Entries: entries, - } - req, err := s.client.NewRequest("POST", u, body) - if err != nil { - return nil, nil, err - } - - t := new(Tree) - resp, err := s.client.Do(ctx, req, t) - if err != nil { - return nil, resp, err - } - - return t, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/github-accessors.go b/vendor/github.com/google/go-github/github/github-accessors.go deleted file mode 100644 index d9939c204..000000000 --- a/vendor/github.com/google/go-github/github/github-accessors.go +++ /dev/null @@ -1,10989 +0,0 @@ -// Copyright 2017 The go-github AUTHORS. All rights reserved. -// -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Code generated by gen-accessors; DO NOT EDIT. - -package github - -import ( - "encoding/json" - "time" -) - -// GetRetryAfter returns the RetryAfter field if it's non-nil, zero value otherwise. -func (a *AbuseRateLimitError) GetRetryAfter() time.Duration { - if a == nil || a.RetryAfter == nil { - return 0 - } - return *a.RetryAfter -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (a *AdminEnforcement) GetURL() string { - if a == nil || a.URL == nil { - return "" - } - return *a.URL -} - -// GetComments returns the Comments field. -func (a *AdminStats) GetComments() *CommentStats { - if a == nil { - return nil - } - return a.Comments -} - -// GetGists returns the Gists field. -func (a *AdminStats) GetGists() *GistStats { - if a == nil { - return nil - } - return a.Gists -} - -// GetHooks returns the Hooks field. -func (a *AdminStats) GetHooks() *HookStats { - if a == nil { - return nil - } - return a.Hooks -} - -// GetIssues returns the Issues field. -func (a *AdminStats) GetIssues() *IssueStats { - if a == nil { - return nil - } - return a.Issues -} - -// GetMilestones returns the Milestones field. -func (a *AdminStats) GetMilestones() *MilestoneStats { - if a == nil { - return nil - } - return a.Milestones -} - -// GetOrgs returns the Orgs field. -func (a *AdminStats) GetOrgs() *OrgStats { - if a == nil { - return nil - } - return a.Orgs -} - -// GetPages returns the Pages field. -func (a *AdminStats) GetPages() *PageStats { - if a == nil { - return nil - } - return a.Pages -} - -// GetPulls returns the Pulls field. -func (a *AdminStats) GetPulls() *PullStats { - if a == nil { - return nil - } - return a.Pulls -} - -// GetRepos returns the Repos field. -func (a *AdminStats) GetRepos() *RepoStats { - if a == nil { - return nil - } - return a.Repos -} - -// GetUsers returns the Users field. -func (a *AdminStats) GetUsers() *UserStats { - if a == nil { - return nil - } - return a.Users -} - -// GetVerifiablePasswordAuthentication returns the VerifiablePasswordAuthentication field if it's non-nil, zero value otherwise. -func (a *APIMeta) GetVerifiablePasswordAuthentication() bool { - if a == nil || a.VerifiablePasswordAuthentication == nil { - return false - } - return *a.VerifiablePasswordAuthentication -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (a *App) GetCreatedAt() time.Time { - if a == nil || a.CreatedAt == nil { - return time.Time{} - } - return *a.CreatedAt -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (a *App) GetDescription() string { - if a == nil || a.Description == nil { - return "" - } - return *a.Description -} - -// GetExternalURL returns the ExternalURL field if it's non-nil, zero value otherwise. -func (a *App) GetExternalURL() string { - if a == nil || a.ExternalURL == nil { - return "" - } - return *a.ExternalURL -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (a *App) GetHTMLURL() string { - if a == nil || a.HTMLURL == nil { - return "" - } - return *a.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (a *App) GetID() int64 { - if a == nil || a.ID == nil { - return 0 - } - return *a.ID -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (a *App) GetName() string { - if a == nil || a.Name == nil { - return "" - } - return *a.Name -} - -// GetOwner returns the Owner field. -func (a *App) GetOwner() *User { - if a == nil { - return nil - } - return a.Owner -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (a *App) GetUpdatedAt() time.Time { - if a == nil || a.UpdatedAt == nil { - return time.Time{} - } - return *a.UpdatedAt -} - -// GetApp returns the App field. -func (a *Authorization) GetApp() *AuthorizationApp { - if a == nil { - return nil - } - return a.App -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (a *Authorization) GetCreatedAt() Timestamp { - if a == nil || a.CreatedAt == nil { - return Timestamp{} - } - return *a.CreatedAt -} - -// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise. -func (a *Authorization) GetFingerprint() string { - if a == nil || a.Fingerprint == nil { - return "" - } - return *a.Fingerprint -} - -// GetHashedToken returns the HashedToken field if it's non-nil, zero value otherwise. -func (a *Authorization) GetHashedToken() string { - if a == nil || a.HashedToken == nil { - return "" - } - return *a.HashedToken -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (a *Authorization) GetID() int64 { - if a == nil || a.ID == nil { - return 0 - } - return *a.ID -} - -// GetNote returns the Note field if it's non-nil, zero value otherwise. -func (a *Authorization) GetNote() string { - if a == nil || a.Note == nil { - return "" - } - return *a.Note -} - -// GetNoteURL returns the NoteURL field if it's non-nil, zero value otherwise. -func (a *Authorization) GetNoteURL() string { - if a == nil || a.NoteURL == nil { - return "" - } - return *a.NoteURL -} - -// GetToken returns the Token field if it's non-nil, zero value otherwise. -func (a *Authorization) GetToken() string { - if a == nil || a.Token == nil { - return "" - } - return *a.Token -} - -// GetTokenLastEight returns the TokenLastEight field if it's non-nil, zero value otherwise. -func (a *Authorization) GetTokenLastEight() string { - if a == nil || a.TokenLastEight == nil { - return "" - } - return *a.TokenLastEight -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (a *Authorization) GetUpdatedAt() Timestamp { - if a == nil || a.UpdatedAt == nil { - return Timestamp{} - } - return *a.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (a *Authorization) GetURL() string { - if a == nil || a.URL == nil { - return "" - } - return *a.URL -} - -// GetUser returns the User field. -func (a *Authorization) GetUser() *User { - if a == nil { - return nil - } - return a.User -} - -// GetClientID returns the ClientID field if it's non-nil, zero value otherwise. -func (a *AuthorizationApp) GetClientID() string { - if a == nil || a.ClientID == nil { - return "" - } - return *a.ClientID -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (a *AuthorizationApp) GetName() string { - if a == nil || a.Name == nil { - return "" - } - return *a.Name -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (a *AuthorizationApp) GetURL() string { - if a == nil || a.URL == nil { - return "" - } - return *a.URL -} - -// GetClientID returns the ClientID field if it's non-nil, zero value otherwise. -func (a *AuthorizationRequest) GetClientID() string { - if a == nil || a.ClientID == nil { - return "" - } - return *a.ClientID -} - -// GetClientSecret returns the ClientSecret field if it's non-nil, zero value otherwise. -func (a *AuthorizationRequest) GetClientSecret() string { - if a == nil || a.ClientSecret == nil { - return "" - } - return *a.ClientSecret -} - -// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise. -func (a *AuthorizationRequest) GetFingerprint() string { - if a == nil || a.Fingerprint == nil { - return "" - } - return *a.Fingerprint -} - -// GetNote returns the Note field if it's non-nil, zero value otherwise. -func (a *AuthorizationRequest) GetNote() string { - if a == nil || a.Note == nil { - return "" - } - return *a.Note -} - -// GetNoteURL returns the NoteURL field if it's non-nil, zero value otherwise. -func (a *AuthorizationRequest) GetNoteURL() string { - if a == nil || a.NoteURL == nil { - return "" - } - return *a.NoteURL -} - -// GetFingerprint returns the Fingerprint field if it's non-nil, zero value otherwise. -func (a *AuthorizationUpdateRequest) GetFingerprint() string { - if a == nil || a.Fingerprint == nil { - return "" - } - return *a.Fingerprint -} - -// GetNote returns the Note field if it's non-nil, zero value otherwise. -func (a *AuthorizationUpdateRequest) GetNote() string { - if a == nil || a.Note == nil { - return "" - } - return *a.Note -} - -// GetNoteURL returns the NoteURL field if it's non-nil, zero value otherwise. -func (a *AuthorizationUpdateRequest) GetNoteURL() string { - if a == nil || a.NoteURL == nil { - return "" - } - return *a.NoteURL -} - -// GetContent returns the Content field if it's non-nil, zero value otherwise. -func (b *Blob) GetContent() string { - if b == nil || b.Content == nil { - return "" - } - return *b.Content -} - -// GetEncoding returns the Encoding field if it's non-nil, zero value otherwise. -func (b *Blob) GetEncoding() string { - if b == nil || b.Encoding == nil { - return "" - } - return *b.Encoding -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (b *Blob) GetNodeID() string { - if b == nil || b.NodeID == nil { - return "" - } - return *b.NodeID -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (b *Blob) GetSHA() string { - if b == nil || b.SHA == nil { - return "" - } - return *b.SHA -} - -// GetSize returns the Size field if it's non-nil, zero value otherwise. -func (b *Blob) GetSize() int { - if b == nil || b.Size == nil { - return 0 - } - return *b.Size -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (b *Blob) GetURL() string { - if b == nil || b.URL == nil { - return "" - } - return *b.URL -} - -// GetCommit returns the Commit field. -func (b *Branch) GetCommit() *RepositoryCommit { - if b == nil { - return nil - } - return b.Commit -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (b *Branch) GetName() string { - if b == nil || b.Name == nil { - return "" - } - return *b.Name -} - -// GetProtected returns the Protected field if it's non-nil, zero value otherwise. -func (b *Branch) GetProtected() bool { - if b == nil || b.Protected == nil { - return false - } - return *b.Protected -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (c *CodeOfConduct) GetBody() string { - if c == nil || c.Body == nil { - return "" - } - return *c.Body -} - -// GetKey returns the Key field if it's non-nil, zero value otherwise. -func (c *CodeOfConduct) GetKey() string { - if c == nil || c.Key == nil { - return "" - } - return *c.Key -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (c *CodeOfConduct) GetName() string { - if c == nil || c.Name == nil { - return "" - } - return *c.Name -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (c *CodeOfConduct) GetURL() string { - if c == nil || c.URL == nil { - return "" - } - return *c.URL -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (c *CodeResult) GetHTMLURL() string { - if c == nil || c.HTMLURL == nil { - return "" - } - return *c.HTMLURL -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (c *CodeResult) GetName() string { - if c == nil || c.Name == nil { - return "" - } - return *c.Name -} - -// GetPath returns the Path field if it's non-nil, zero value otherwise. -func (c *CodeResult) GetPath() string { - if c == nil || c.Path == nil { - return "" - } - return *c.Path -} - -// GetRepository returns the Repository field. -func (c *CodeResult) GetRepository() *Repository { - if c == nil { - return nil - } - return c.Repository -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (c *CodeResult) GetSHA() string { - if c == nil || c.SHA == nil { - return "" - } - return *c.SHA -} - -// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise. -func (c *CodeSearchResult) GetIncompleteResults() bool { - if c == nil || c.IncompleteResults == nil { - return false - } - return *c.IncompleteResults -} - -// GetTotal returns the Total field if it's non-nil, zero value otherwise. -func (c *CodeSearchResult) GetTotal() int { - if c == nil || c.Total == nil { - return 0 - } - return *c.Total -} - -// GetCommitURL returns the CommitURL field if it's non-nil, zero value otherwise. -func (c *CombinedStatus) GetCommitURL() string { - if c == nil || c.CommitURL == nil { - return "" - } - return *c.CommitURL -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (c *CombinedStatus) GetName() string { - if c == nil || c.Name == nil { - return "" - } - return *c.Name -} - -// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise. -func (c *CombinedStatus) GetRepositoryURL() string { - if c == nil || c.RepositoryURL == nil { - return "" - } - return *c.RepositoryURL -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (c *CombinedStatus) GetSHA() string { - if c == nil || c.SHA == nil { - return "" - } - return *c.SHA -} - -// GetState returns the State field if it's non-nil, zero value otherwise. -func (c *CombinedStatus) GetState() string { - if c == nil || c.State == nil { - return "" - } - return *c.State -} - -// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise. -func (c *CombinedStatus) GetTotalCount() int { - if c == nil || c.TotalCount == nil { - return 0 - } - return *c.TotalCount -} - -// GetTotalCommitComments returns the TotalCommitComments field if it's non-nil, zero value otherwise. -func (c *CommentStats) GetTotalCommitComments() int { - if c == nil || c.TotalCommitComments == nil { - return 0 - } - return *c.TotalCommitComments -} - -// GetTotalGistComments returns the TotalGistComments field if it's non-nil, zero value otherwise. -func (c *CommentStats) GetTotalGistComments() int { - if c == nil || c.TotalGistComments == nil { - return 0 - } - return *c.TotalGistComments -} - -// GetTotalIssueComments returns the TotalIssueComments field if it's non-nil, zero value otherwise. -func (c *CommentStats) GetTotalIssueComments() int { - if c == nil || c.TotalIssueComments == nil { - return 0 - } - return *c.TotalIssueComments -} - -// GetTotalPullRequestComments returns the TotalPullRequestComments field if it's non-nil, zero value otherwise. -func (c *CommentStats) GetTotalPullRequestComments() int { - if c == nil || c.TotalPullRequestComments == nil { - return 0 - } - return *c.TotalPullRequestComments -} - -// GetAuthor returns the Author field. -func (c *Commit) GetAuthor() *CommitAuthor { - if c == nil { - return nil - } - return c.Author -} - -// GetCommentCount returns the CommentCount field if it's non-nil, zero value otherwise. -func (c *Commit) GetCommentCount() int { - if c == nil || c.CommentCount == nil { - return 0 - } - return *c.CommentCount -} - -// GetCommitter returns the Committer field. -func (c *Commit) GetCommitter() *CommitAuthor { - if c == nil { - return nil - } - return c.Committer -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (c *Commit) GetHTMLURL() string { - if c == nil || c.HTMLURL == nil { - return "" - } - return *c.HTMLURL -} - -// GetMessage returns the Message field if it's non-nil, zero value otherwise. -func (c *Commit) GetMessage() string { - if c == nil || c.Message == nil { - return "" - } - return *c.Message -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (c *Commit) GetNodeID() string { - if c == nil || c.NodeID == nil { - return "" - } - return *c.NodeID -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (c *Commit) GetSHA() string { - if c == nil || c.SHA == nil { - return "" - } - return *c.SHA -} - -// GetStats returns the Stats field. -func (c *Commit) GetStats() *CommitStats { - if c == nil { - return nil - } - return c.Stats -} - -// GetTree returns the Tree field. -func (c *Commit) GetTree() *Tree { - if c == nil { - return nil - } - return c.Tree -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (c *Commit) GetURL() string { - if c == nil || c.URL == nil { - return "" - } - return *c.URL -} - -// GetVerification returns the Verification field. -func (c *Commit) GetVerification() *SignatureVerification { - if c == nil { - return nil - } - return c.Verification -} - -// GetDate returns the Date field if it's non-nil, zero value otherwise. -func (c *CommitAuthor) GetDate() time.Time { - if c == nil || c.Date == nil { - return time.Time{} - } - return *c.Date -} - -// GetEmail returns the Email field if it's non-nil, zero value otherwise. -func (c *CommitAuthor) GetEmail() string { - if c == nil || c.Email == nil { - return "" - } - return *c.Email -} - -// GetLogin returns the Login field if it's non-nil, zero value otherwise. -func (c *CommitAuthor) GetLogin() string { - if c == nil || c.Login == nil { - return "" - } - return *c.Login -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (c *CommitAuthor) GetName() string { - if c == nil || c.Name == nil { - return "" - } - return *c.Name -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (c *CommitCommentEvent) GetAction() string { - if c == nil || c.Action == nil { - return "" - } - return *c.Action -} - -// GetComment returns the Comment field. -func (c *CommitCommentEvent) GetComment() *RepositoryComment { - if c == nil { - return nil - } - return c.Comment -} - -// GetInstallation returns the Installation field. -func (c *CommitCommentEvent) GetInstallation() *Installation { - if c == nil { - return nil - } - return c.Installation -} - -// GetRepo returns the Repo field. -func (c *CommitCommentEvent) GetRepo() *Repository { - if c == nil { - return nil - } - return c.Repo -} - -// GetSender returns the Sender field. -func (c *CommitCommentEvent) GetSender() *User { - if c == nil { - return nil - } - return c.Sender -} - -// GetAdditions returns the Additions field if it's non-nil, zero value otherwise. -func (c *CommitFile) GetAdditions() int { - if c == nil || c.Additions == nil { - return 0 - } - return *c.Additions -} - -// GetBlobURL returns the BlobURL field if it's non-nil, zero value otherwise. -func (c *CommitFile) GetBlobURL() string { - if c == nil || c.BlobURL == nil { - return "" - } - return *c.BlobURL -} - -// GetChanges returns the Changes field if it's non-nil, zero value otherwise. -func (c *CommitFile) GetChanges() int { - if c == nil || c.Changes == nil { - return 0 - } - return *c.Changes -} - -// GetContentsURL returns the ContentsURL field if it's non-nil, zero value otherwise. -func (c *CommitFile) GetContentsURL() string { - if c == nil || c.ContentsURL == nil { - return "" - } - return *c.ContentsURL -} - -// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise. -func (c *CommitFile) GetDeletions() int { - if c == nil || c.Deletions == nil { - return 0 - } - return *c.Deletions -} - -// GetFilename returns the Filename field if it's non-nil, zero value otherwise. -func (c *CommitFile) GetFilename() string { - if c == nil || c.Filename == nil { - return "" - } - return *c.Filename -} - -// GetPatch returns the Patch field if it's non-nil, zero value otherwise. -func (c *CommitFile) GetPatch() string { - if c == nil || c.Patch == nil { - return "" - } - return *c.Patch -} - -// GetRawURL returns the RawURL field if it's non-nil, zero value otherwise. -func (c *CommitFile) GetRawURL() string { - if c == nil || c.RawURL == nil { - return "" - } - return *c.RawURL -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (c *CommitFile) GetSHA() string { - if c == nil || c.SHA == nil { - return "" - } - return *c.SHA -} - -// GetStatus returns the Status field if it's non-nil, zero value otherwise. -func (c *CommitFile) GetStatus() string { - if c == nil || c.Status == nil { - return "" - } - return *c.Status -} - -// GetAuthor returns the Author field. -func (c *CommitResult) GetAuthor() *User { - if c == nil { - return nil - } - return c.Author -} - -// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise. -func (c *CommitResult) GetCommentsURL() string { - if c == nil || c.CommentsURL == nil { - return "" - } - return *c.CommentsURL -} - -// GetCommit returns the Commit field. -func (c *CommitResult) GetCommit() *Commit { - if c == nil { - return nil - } - return c.Commit -} - -// GetCommitter returns the Committer field. -func (c *CommitResult) GetCommitter() *User { - if c == nil { - return nil - } - return c.Committer -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (c *CommitResult) GetHTMLURL() string { - if c == nil || c.HTMLURL == nil { - return "" - } - return *c.HTMLURL -} - -// GetRepository returns the Repository field. -func (c *CommitResult) GetRepository() *Repository { - if c == nil { - return nil - } - return c.Repository -} - -// GetScore returns the Score field. -func (c *CommitResult) GetScore() *float64 { - if c == nil { - return nil - } - return c.Score -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (c *CommitResult) GetSHA() string { - if c == nil || c.SHA == nil { - return "" - } - return *c.SHA -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (c *CommitResult) GetURL() string { - if c == nil || c.URL == nil { - return "" - } - return *c.URL -} - -// GetAheadBy returns the AheadBy field if it's non-nil, zero value otherwise. -func (c *CommitsComparison) GetAheadBy() int { - if c == nil || c.AheadBy == nil { - return 0 - } - return *c.AheadBy -} - -// GetBaseCommit returns the BaseCommit field. -func (c *CommitsComparison) GetBaseCommit() *RepositoryCommit { - if c == nil { - return nil - } - return c.BaseCommit -} - -// GetBehindBy returns the BehindBy field if it's non-nil, zero value otherwise. -func (c *CommitsComparison) GetBehindBy() int { - if c == nil || c.BehindBy == nil { - return 0 - } - return *c.BehindBy -} - -// GetDiffURL returns the DiffURL field if it's non-nil, zero value otherwise. -func (c *CommitsComparison) GetDiffURL() string { - if c == nil || c.DiffURL == nil { - return "" - } - return *c.DiffURL -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (c *CommitsComparison) GetHTMLURL() string { - if c == nil || c.HTMLURL == nil { - return "" - } - return *c.HTMLURL -} - -// GetMergeBaseCommit returns the MergeBaseCommit field. -func (c *CommitsComparison) GetMergeBaseCommit() *RepositoryCommit { - if c == nil { - return nil - } - return c.MergeBaseCommit -} - -// GetPatchURL returns the PatchURL field if it's non-nil, zero value otherwise. -func (c *CommitsComparison) GetPatchURL() string { - if c == nil || c.PatchURL == nil { - return "" - } - return *c.PatchURL -} - -// GetPermalinkURL returns the PermalinkURL field if it's non-nil, zero value otherwise. -func (c *CommitsComparison) GetPermalinkURL() string { - if c == nil || c.PermalinkURL == nil { - return "" - } - return *c.PermalinkURL -} - -// GetStatus returns the Status field if it's non-nil, zero value otherwise. -func (c *CommitsComparison) GetStatus() string { - if c == nil || c.Status == nil { - return "" - } - return *c.Status -} - -// GetTotalCommits returns the TotalCommits field if it's non-nil, zero value otherwise. -func (c *CommitsComparison) GetTotalCommits() int { - if c == nil || c.TotalCommits == nil { - return 0 - } - return *c.TotalCommits -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (c *CommitsComparison) GetURL() string { - if c == nil || c.URL == nil { - return "" - } - return *c.URL -} - -// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise. -func (c *CommitsSearchResult) GetIncompleteResults() bool { - if c == nil || c.IncompleteResults == nil { - return false - } - return *c.IncompleteResults -} - -// GetTotal returns the Total field if it's non-nil, zero value otherwise. -func (c *CommitsSearchResult) GetTotal() int { - if c == nil || c.Total == nil { - return 0 - } - return *c.Total -} - -// GetAdditions returns the Additions field if it's non-nil, zero value otherwise. -func (c *CommitStats) GetAdditions() int { - if c == nil || c.Additions == nil { - return 0 - } - return *c.Additions -} - -// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise. -func (c *CommitStats) GetDeletions() int { - if c == nil || c.Deletions == nil { - return 0 - } - return *c.Deletions -} - -// GetTotal returns the Total field if it's non-nil, zero value otherwise. -func (c *CommitStats) GetTotal() int { - if c == nil || c.Total == nil { - return 0 - } - return *c.Total -} - -// GetCodeOfConduct returns the CodeOfConduct field. -func (c *CommunityHealthFiles) GetCodeOfConduct() *Metric { - if c == nil { - return nil - } - return c.CodeOfConduct -} - -// GetContributing returns the Contributing field. -func (c *CommunityHealthFiles) GetContributing() *Metric { - if c == nil { - return nil - } - return c.Contributing -} - -// GetLicense returns the License field. -func (c *CommunityHealthFiles) GetLicense() *Metric { - if c == nil { - return nil - } - return c.License -} - -// GetReadme returns the Readme field. -func (c *CommunityHealthFiles) GetReadme() *Metric { - if c == nil { - return nil - } - return c.Readme -} - -// GetFiles returns the Files field. -func (c *CommunityHealthMetrics) GetFiles() *CommunityHealthFiles { - if c == nil { - return nil - } - return c.Files -} - -// GetHealthPercentage returns the HealthPercentage field if it's non-nil, zero value otherwise. -func (c *CommunityHealthMetrics) GetHealthPercentage() int { - if c == nil || c.HealthPercentage == nil { - return 0 - } - return *c.HealthPercentage -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (c *CommunityHealthMetrics) GetUpdatedAt() time.Time { - if c == nil || c.UpdatedAt == nil { - return time.Time{} - } - return *c.UpdatedAt -} - -// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise. -func (c *Contributor) GetAvatarURL() string { - if c == nil || c.AvatarURL == nil { - return "" - } - return *c.AvatarURL -} - -// GetContributions returns the Contributions field if it's non-nil, zero value otherwise. -func (c *Contributor) GetContributions() int { - if c == nil || c.Contributions == nil { - return 0 - } - return *c.Contributions -} - -// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise. -func (c *Contributor) GetEventsURL() string { - if c == nil || c.EventsURL == nil { - return "" - } - return *c.EventsURL -} - -// GetFollowersURL returns the FollowersURL field if it's non-nil, zero value otherwise. -func (c *Contributor) GetFollowersURL() string { - if c == nil || c.FollowersURL == nil { - return "" - } - return *c.FollowersURL -} - -// GetFollowingURL returns the FollowingURL field if it's non-nil, zero value otherwise. -func (c *Contributor) GetFollowingURL() string { - if c == nil || c.FollowingURL == nil { - return "" - } - return *c.FollowingURL -} - -// GetGistsURL returns the GistsURL field if it's non-nil, zero value otherwise. -func (c *Contributor) GetGistsURL() string { - if c == nil || c.GistsURL == nil { - return "" - } - return *c.GistsURL -} - -// GetGravatarID returns the GravatarID field if it's non-nil, zero value otherwise. -func (c *Contributor) GetGravatarID() string { - if c == nil || c.GravatarID == nil { - return "" - } - return *c.GravatarID -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (c *Contributor) GetHTMLURL() string { - if c == nil || c.HTMLURL == nil { - return "" - } - return *c.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (c *Contributor) GetID() int64 { - if c == nil || c.ID == nil { - return 0 - } - return *c.ID -} - -// GetLogin returns the Login field if it's non-nil, zero value otherwise. -func (c *Contributor) GetLogin() string { - if c == nil || c.Login == nil { - return "" - } - return *c.Login -} - -// GetOrganizationsURL returns the OrganizationsURL field if it's non-nil, zero value otherwise. -func (c *Contributor) GetOrganizationsURL() string { - if c == nil || c.OrganizationsURL == nil { - return "" - } - return *c.OrganizationsURL -} - -// GetReceivedEventsURL returns the ReceivedEventsURL field if it's non-nil, zero value otherwise. -func (c *Contributor) GetReceivedEventsURL() string { - if c == nil || c.ReceivedEventsURL == nil { - return "" - } - return *c.ReceivedEventsURL -} - -// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise. -func (c *Contributor) GetReposURL() string { - if c == nil || c.ReposURL == nil { - return "" - } - return *c.ReposURL -} - -// GetSiteAdmin returns the SiteAdmin field if it's non-nil, zero value otherwise. -func (c *Contributor) GetSiteAdmin() bool { - if c == nil || c.SiteAdmin == nil { - return false - } - return *c.SiteAdmin -} - -// GetStarredURL returns the StarredURL field if it's non-nil, zero value otherwise. -func (c *Contributor) GetStarredURL() string { - if c == nil || c.StarredURL == nil { - return "" - } - return *c.StarredURL -} - -// GetSubscriptionsURL returns the SubscriptionsURL field if it's non-nil, zero value otherwise. -func (c *Contributor) GetSubscriptionsURL() string { - if c == nil || c.SubscriptionsURL == nil { - return "" - } - return *c.SubscriptionsURL -} - -// GetType returns the Type field if it's non-nil, zero value otherwise. -func (c *Contributor) GetType() string { - if c == nil || c.Type == nil { - return "" - } - return *c.Type -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (c *Contributor) GetURL() string { - if c == nil || c.URL == nil { - return "" - } - return *c.URL -} - -// GetAuthor returns the Author field. -func (c *ContributorStats) GetAuthor() *Contributor { - if c == nil { - return nil - } - return c.Author -} - -// GetTotal returns the Total field if it's non-nil, zero value otherwise. -func (c *ContributorStats) GetTotal() int { - if c == nil || c.Total == nil { - return 0 - } - return *c.Total -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (c *CreateEvent) GetDescription() string { - if c == nil || c.Description == nil { - return "" - } - return *c.Description -} - -// GetInstallation returns the Installation field. -func (c *CreateEvent) GetInstallation() *Installation { - if c == nil { - return nil - } - return c.Installation -} - -// GetMasterBranch returns the MasterBranch field if it's non-nil, zero value otherwise. -func (c *CreateEvent) GetMasterBranch() string { - if c == nil || c.MasterBranch == nil { - return "" - } - return *c.MasterBranch -} - -// GetPusherType returns the PusherType field if it's non-nil, zero value otherwise. -func (c *CreateEvent) GetPusherType() string { - if c == nil || c.PusherType == nil { - return "" - } - return *c.PusherType -} - -// GetRef returns the Ref field if it's non-nil, zero value otherwise. -func (c *CreateEvent) GetRef() string { - if c == nil || c.Ref == nil { - return "" - } - return *c.Ref -} - -// GetRefType returns the RefType field if it's non-nil, zero value otherwise. -func (c *CreateEvent) GetRefType() string { - if c == nil || c.RefType == nil { - return "" - } - return *c.RefType -} - -// GetRepo returns the Repo field. -func (c *CreateEvent) GetRepo() *Repository { - if c == nil { - return nil - } - return c.Repo -} - -// GetSender returns the Sender field. -func (c *CreateEvent) GetSender() *User { - if c == nil { - return nil - } - return c.Sender -} - -// GetEmail returns the Email field if it's non-nil, zero value otherwise. -func (c *CreateOrgInvitationOptions) GetEmail() string { - if c == nil || c.Email == nil { - return "" - } - return *c.Email -} - -// GetInviteeID returns the InviteeID field if it's non-nil, zero value otherwise. -func (c *CreateOrgInvitationOptions) GetInviteeID() int64 { - if c == nil || c.InviteeID == nil { - return 0 - } - return *c.InviteeID -} - -// GetRole returns the Role field if it's non-nil, zero value otherwise. -func (c *CreateOrgInvitationOptions) GetRole() string { - if c == nil || c.Role == nil { - return "" - } - return *c.Role -} - -// GetInstallation returns the Installation field. -func (d *DeleteEvent) GetInstallation() *Installation { - if d == nil { - return nil - } - return d.Installation -} - -// GetPusherType returns the PusherType field if it's non-nil, zero value otherwise. -func (d *DeleteEvent) GetPusherType() string { - if d == nil || d.PusherType == nil { - return "" - } - return *d.PusherType -} - -// GetRef returns the Ref field if it's non-nil, zero value otherwise. -func (d *DeleteEvent) GetRef() string { - if d == nil || d.Ref == nil { - return "" - } - return *d.Ref -} - -// GetRefType returns the RefType field if it's non-nil, zero value otherwise. -func (d *DeleteEvent) GetRefType() string { - if d == nil || d.RefType == nil { - return "" - } - return *d.RefType -} - -// GetRepo returns the Repo field. -func (d *DeleteEvent) GetRepo() *Repository { - if d == nil { - return nil - } - return d.Repo -} - -// GetSender returns the Sender field. -func (d *DeleteEvent) GetSender() *User { - if d == nil { - return nil - } - return d.Sender -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (d *Deployment) GetCreatedAt() Timestamp { - if d == nil || d.CreatedAt == nil { - return Timestamp{} - } - return *d.CreatedAt -} - -// GetCreator returns the Creator field. -func (d *Deployment) GetCreator() *User { - if d == nil { - return nil - } - return d.Creator -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (d *Deployment) GetDescription() string { - if d == nil || d.Description == nil { - return "" - } - return *d.Description -} - -// GetEnvironment returns the Environment field if it's non-nil, zero value otherwise. -func (d *Deployment) GetEnvironment() string { - if d == nil || d.Environment == nil { - return "" - } - return *d.Environment -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (d *Deployment) GetID() int64 { - if d == nil || d.ID == nil { - return 0 - } - return *d.ID -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (d *Deployment) GetNodeID() string { - if d == nil || d.NodeID == nil { - return "" - } - return *d.NodeID -} - -// GetRef returns the Ref field if it's non-nil, zero value otherwise. -func (d *Deployment) GetRef() string { - if d == nil || d.Ref == nil { - return "" - } - return *d.Ref -} - -// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise. -func (d *Deployment) GetRepositoryURL() string { - if d == nil || d.RepositoryURL == nil { - return "" - } - return *d.RepositoryURL -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (d *Deployment) GetSHA() string { - if d == nil || d.SHA == nil { - return "" - } - return *d.SHA -} - -// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise. -func (d *Deployment) GetStatusesURL() string { - if d == nil || d.StatusesURL == nil { - return "" - } - return *d.StatusesURL -} - -// GetTask returns the Task field if it's non-nil, zero value otherwise. -func (d *Deployment) GetTask() string { - if d == nil || d.Task == nil { - return "" - } - return *d.Task -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (d *Deployment) GetUpdatedAt() Timestamp { - if d == nil || d.UpdatedAt == nil { - return Timestamp{} - } - return *d.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (d *Deployment) GetURL() string { - if d == nil || d.URL == nil { - return "" - } - return *d.URL -} - -// GetDeployment returns the Deployment field. -func (d *DeploymentEvent) GetDeployment() *Deployment { - if d == nil { - return nil - } - return d.Deployment -} - -// GetInstallation returns the Installation field. -func (d *DeploymentEvent) GetInstallation() *Installation { - if d == nil { - return nil - } - return d.Installation -} - -// GetRepo returns the Repo field. -func (d *DeploymentEvent) GetRepo() *Repository { - if d == nil { - return nil - } - return d.Repo -} - -// GetSender returns the Sender field. -func (d *DeploymentEvent) GetSender() *User { - if d == nil { - return nil - } - return d.Sender -} - -// GetAutoMerge returns the AutoMerge field if it's non-nil, zero value otherwise. -func (d *DeploymentRequest) GetAutoMerge() bool { - if d == nil || d.AutoMerge == nil { - return false - } - return *d.AutoMerge -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (d *DeploymentRequest) GetDescription() string { - if d == nil || d.Description == nil { - return "" - } - return *d.Description -} - -// GetEnvironment returns the Environment field if it's non-nil, zero value otherwise. -func (d *DeploymentRequest) GetEnvironment() string { - if d == nil || d.Environment == nil { - return "" - } - return *d.Environment -} - -// GetPayload returns the Payload field if it's non-nil, zero value otherwise. -func (d *DeploymentRequest) GetPayload() string { - if d == nil || d.Payload == nil { - return "" - } - return *d.Payload -} - -// GetProductionEnvironment returns the ProductionEnvironment field if it's non-nil, zero value otherwise. -func (d *DeploymentRequest) GetProductionEnvironment() bool { - if d == nil || d.ProductionEnvironment == nil { - return false - } - return *d.ProductionEnvironment -} - -// GetRef returns the Ref field if it's non-nil, zero value otherwise. -func (d *DeploymentRequest) GetRef() string { - if d == nil || d.Ref == nil { - return "" - } - return *d.Ref -} - -// GetRequiredContexts returns the RequiredContexts field if it's non-nil, zero value otherwise. -func (d *DeploymentRequest) GetRequiredContexts() []string { - if d == nil || d.RequiredContexts == nil { - return nil - } - return *d.RequiredContexts -} - -// GetTask returns the Task field if it's non-nil, zero value otherwise. -func (d *DeploymentRequest) GetTask() string { - if d == nil || d.Task == nil { - return "" - } - return *d.Task -} - -// GetTransientEnvironment returns the TransientEnvironment field if it's non-nil, zero value otherwise. -func (d *DeploymentRequest) GetTransientEnvironment() bool { - if d == nil || d.TransientEnvironment == nil { - return false - } - return *d.TransientEnvironment -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (d *DeploymentStatus) GetCreatedAt() Timestamp { - if d == nil || d.CreatedAt == nil { - return Timestamp{} - } - return *d.CreatedAt -} - -// GetCreator returns the Creator field. -func (d *DeploymentStatus) GetCreator() *User { - if d == nil { - return nil - } - return d.Creator -} - -// GetDeploymentURL returns the DeploymentURL field if it's non-nil, zero value otherwise. -func (d *DeploymentStatus) GetDeploymentURL() string { - if d == nil || d.DeploymentURL == nil { - return "" - } - return *d.DeploymentURL -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (d *DeploymentStatus) GetDescription() string { - if d == nil || d.Description == nil { - return "" - } - return *d.Description -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (d *DeploymentStatus) GetID() int64 { - if d == nil || d.ID == nil { - return 0 - } - return *d.ID -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (d *DeploymentStatus) GetNodeID() string { - if d == nil || d.NodeID == nil { - return "" - } - return *d.NodeID -} - -// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise. -func (d *DeploymentStatus) GetRepositoryURL() string { - if d == nil || d.RepositoryURL == nil { - return "" - } - return *d.RepositoryURL -} - -// GetState returns the State field if it's non-nil, zero value otherwise. -func (d *DeploymentStatus) GetState() string { - if d == nil || d.State == nil { - return "" - } - return *d.State -} - -// GetTargetURL returns the TargetURL field if it's non-nil, zero value otherwise. -func (d *DeploymentStatus) GetTargetURL() string { - if d == nil || d.TargetURL == nil { - return "" - } - return *d.TargetURL -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (d *DeploymentStatus) GetUpdatedAt() Timestamp { - if d == nil || d.UpdatedAt == nil { - return Timestamp{} - } - return *d.UpdatedAt -} - -// GetDeployment returns the Deployment field. -func (d *DeploymentStatusEvent) GetDeployment() *Deployment { - if d == nil { - return nil - } - return d.Deployment -} - -// GetDeploymentStatus returns the DeploymentStatus field. -func (d *DeploymentStatusEvent) GetDeploymentStatus() *DeploymentStatus { - if d == nil { - return nil - } - return d.DeploymentStatus -} - -// GetInstallation returns the Installation field. -func (d *DeploymentStatusEvent) GetInstallation() *Installation { - if d == nil { - return nil - } - return d.Installation -} - -// GetRepo returns the Repo field. -func (d *DeploymentStatusEvent) GetRepo() *Repository { - if d == nil { - return nil - } - return d.Repo -} - -// GetSender returns the Sender field. -func (d *DeploymentStatusEvent) GetSender() *User { - if d == nil { - return nil - } - return d.Sender -} - -// GetAutoInactive returns the AutoInactive field if it's non-nil, zero value otherwise. -func (d *DeploymentStatusRequest) GetAutoInactive() bool { - if d == nil || d.AutoInactive == nil { - return false - } - return *d.AutoInactive -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (d *DeploymentStatusRequest) GetDescription() string { - if d == nil || d.Description == nil { - return "" - } - return *d.Description -} - -// GetEnvironmentURL returns the EnvironmentURL field if it's non-nil, zero value otherwise. -func (d *DeploymentStatusRequest) GetEnvironmentURL() string { - if d == nil || d.EnvironmentURL == nil { - return "" - } - return *d.EnvironmentURL -} - -// GetLogURL returns the LogURL field if it's non-nil, zero value otherwise. -func (d *DeploymentStatusRequest) GetLogURL() string { - if d == nil || d.LogURL == nil { - return "" - } - return *d.LogURL -} - -// GetState returns the State field if it's non-nil, zero value otherwise. -func (d *DeploymentStatusRequest) GetState() string { - if d == nil || d.State == nil { - return "" - } - return *d.State -} - -// GetAuthor returns the Author field. -func (d *DiscussionComment) GetAuthor() *User { - if d == nil { - return nil - } - return d.Author -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (d *DiscussionComment) GetBody() string { - if d == nil || d.Body == nil { - return "" - } - return *d.Body -} - -// GetBodyHTML returns the BodyHTML field if it's non-nil, zero value otherwise. -func (d *DiscussionComment) GetBodyHTML() string { - if d == nil || d.BodyHTML == nil { - return "" - } - return *d.BodyHTML -} - -// GetBodyVersion returns the BodyVersion field if it's non-nil, zero value otherwise. -func (d *DiscussionComment) GetBodyVersion() string { - if d == nil || d.BodyVersion == nil { - return "" - } - return *d.BodyVersion -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (d *DiscussionComment) GetCreatedAt() Timestamp { - if d == nil || d.CreatedAt == nil { - return Timestamp{} - } - return *d.CreatedAt -} - -// GetDiscussionURL returns the DiscussionURL field if it's non-nil, zero value otherwise. -func (d *DiscussionComment) GetDiscussionURL() string { - if d == nil || d.DiscussionURL == nil { - return "" - } - return *d.DiscussionURL -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (d *DiscussionComment) GetHTMLURL() string { - if d == nil || d.HTMLURL == nil { - return "" - } - return *d.HTMLURL -} - -// GetLastEditedAt returns the LastEditedAt field if it's non-nil, zero value otherwise. -func (d *DiscussionComment) GetLastEditedAt() Timestamp { - if d == nil || d.LastEditedAt == nil { - return Timestamp{} - } - return *d.LastEditedAt -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (d *DiscussionComment) GetNodeID() string { - if d == nil || d.NodeID == nil { - return "" - } - return *d.NodeID -} - -// GetNumber returns the Number field if it's non-nil, zero value otherwise. -func (d *DiscussionComment) GetNumber() int64 { - if d == nil || d.Number == nil { - return 0 - } - return *d.Number -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (d *DiscussionComment) GetUpdatedAt() Timestamp { - if d == nil || d.UpdatedAt == nil { - return Timestamp{} - } - return *d.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (d *DiscussionComment) GetURL() string { - if d == nil || d.URL == nil { - return "" - } - return *d.URL -} - -// GetTeams returns the Teams field if it's non-nil, zero value otherwise. -func (d *DismissalRestrictionsRequest) GetTeams() []string { - if d == nil || d.Teams == nil { - return nil - } - return *d.Teams -} - -// GetUsers returns the Users field if it's non-nil, zero value otherwise. -func (d *DismissalRestrictionsRequest) GetUsers() []string { - if d == nil || d.Users == nil { - return nil - } - return *d.Users -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (d *DraftReviewComment) GetBody() string { - if d == nil || d.Body == nil { - return "" - } - return *d.Body -} - -// GetPath returns the Path field if it's non-nil, zero value otherwise. -func (d *DraftReviewComment) GetPath() string { - if d == nil || d.Path == nil { - return "" - } - return *d.Path -} - -// GetPosition returns the Position field if it's non-nil, zero value otherwise. -func (d *DraftReviewComment) GetPosition() int { - if d == nil || d.Position == nil { - return 0 - } - return *d.Position -} - -// GetActor returns the Actor field. -func (e *Event) GetActor() *User { - if e == nil { - return nil - } - return e.Actor -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (e *Event) GetCreatedAt() time.Time { - if e == nil || e.CreatedAt == nil { - return time.Time{} - } - return *e.CreatedAt -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (e *Event) GetID() string { - if e == nil || e.ID == nil { - return "" - } - return *e.ID -} - -// GetOrg returns the Org field. -func (e *Event) GetOrg() *Organization { - if e == nil { - return nil - } - return e.Org -} - -// GetPublic returns the Public field if it's non-nil, zero value otherwise. -func (e *Event) GetPublic() bool { - if e == nil || e.Public == nil { - return false - } - return *e.Public -} - -// GetRawPayload returns the RawPayload field if it's non-nil, zero value otherwise. -func (e *Event) GetRawPayload() json.RawMessage { - if e == nil || e.RawPayload == nil { - return json.RawMessage{} - } - return *e.RawPayload -} - -// GetRepo returns the Repo field. -func (e *Event) GetRepo() *Repository { - if e == nil { - return nil - } - return e.Repo -} - -// GetType returns the Type field if it's non-nil, zero value otherwise. -func (e *Event) GetType() string { - if e == nil || e.Type == nil { - return "" - } - return *e.Type -} - -// GetHRef returns the HRef field if it's non-nil, zero value otherwise. -func (f *FeedLink) GetHRef() string { - if f == nil || f.HRef == nil { - return "" - } - return *f.HRef -} - -// GetType returns the Type field if it's non-nil, zero value otherwise. -func (f *FeedLink) GetType() string { - if f == nil || f.Type == nil { - return "" - } - return *f.Type -} - -// GetCurrentUserActorURL returns the CurrentUserActorURL field if it's non-nil, zero value otherwise. -func (f *Feeds) GetCurrentUserActorURL() string { - if f == nil || f.CurrentUserActorURL == nil { - return "" - } - return *f.CurrentUserActorURL -} - -// GetCurrentUserOrganizationURL returns the CurrentUserOrganizationURL field if it's non-nil, zero value otherwise. -func (f *Feeds) GetCurrentUserOrganizationURL() string { - if f == nil || f.CurrentUserOrganizationURL == nil { - return "" - } - return *f.CurrentUserOrganizationURL -} - -// GetCurrentUserPublicURL returns the CurrentUserPublicURL field if it's non-nil, zero value otherwise. -func (f *Feeds) GetCurrentUserPublicURL() string { - if f == nil || f.CurrentUserPublicURL == nil { - return "" - } - return *f.CurrentUserPublicURL -} - -// GetCurrentUserURL returns the CurrentUserURL field if it's non-nil, zero value otherwise. -func (f *Feeds) GetCurrentUserURL() string { - if f == nil || f.CurrentUserURL == nil { - return "" - } - return *f.CurrentUserURL -} - -// GetTimelineURL returns the TimelineURL field if it's non-nil, zero value otherwise. -func (f *Feeds) GetTimelineURL() string { - if f == nil || f.TimelineURL == nil { - return "" - } - return *f.TimelineURL -} - -// GetUserURL returns the UserURL field if it's non-nil, zero value otherwise. -func (f *Feeds) GetUserURL() string { - if f == nil || f.UserURL == nil { - return "" - } - return *f.UserURL -} - -// GetForkee returns the Forkee field. -func (f *ForkEvent) GetForkee() *Repository { - if f == nil { - return nil - } - return f.Forkee -} - -// GetInstallation returns the Installation field. -func (f *ForkEvent) GetInstallation() *Installation { - if f == nil { - return nil - } - return f.Installation -} - -// GetRepo returns the Repo field. -func (f *ForkEvent) GetRepo() *Repository { - if f == nil { - return nil - } - return f.Repo -} - -// GetSender returns the Sender field. -func (f *ForkEvent) GetSender() *User { - if f == nil { - return nil - } - return f.Sender -} - -// GetComments returns the Comments field if it's non-nil, zero value otherwise. -func (g *Gist) GetComments() int { - if g == nil || g.Comments == nil { - return 0 - } - return *g.Comments -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (g *Gist) GetCreatedAt() time.Time { - if g == nil || g.CreatedAt == nil { - return time.Time{} - } - return *g.CreatedAt -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (g *Gist) GetDescription() string { - if g == nil || g.Description == nil { - return "" - } - return *g.Description -} - -// GetGitPullURL returns the GitPullURL field if it's non-nil, zero value otherwise. -func (g *Gist) GetGitPullURL() string { - if g == nil || g.GitPullURL == nil { - return "" - } - return *g.GitPullURL -} - -// GetGitPushURL returns the GitPushURL field if it's non-nil, zero value otherwise. -func (g *Gist) GetGitPushURL() string { - if g == nil || g.GitPushURL == nil { - return "" - } - return *g.GitPushURL -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (g *Gist) GetHTMLURL() string { - if g == nil || g.HTMLURL == nil { - return "" - } - return *g.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (g *Gist) GetID() string { - if g == nil || g.ID == nil { - return "" - } - return *g.ID -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (g *Gist) GetNodeID() string { - if g == nil || g.NodeID == nil { - return "" - } - return *g.NodeID -} - -// GetOwner returns the Owner field. -func (g *Gist) GetOwner() *User { - if g == nil { - return nil - } - return g.Owner -} - -// GetPublic returns the Public field if it's non-nil, zero value otherwise. -func (g *Gist) GetPublic() bool { - if g == nil || g.Public == nil { - return false - } - return *g.Public -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (g *Gist) GetUpdatedAt() time.Time { - if g == nil || g.UpdatedAt == nil { - return time.Time{} - } - return *g.UpdatedAt -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (g *GistComment) GetBody() string { - if g == nil || g.Body == nil { - return "" - } - return *g.Body -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (g *GistComment) GetCreatedAt() time.Time { - if g == nil || g.CreatedAt == nil { - return time.Time{} - } - return *g.CreatedAt -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (g *GistComment) GetID() int64 { - if g == nil || g.ID == nil { - return 0 - } - return *g.ID -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (g *GistComment) GetURL() string { - if g == nil || g.URL == nil { - return "" - } - return *g.URL -} - -// GetUser returns the User field. -func (g *GistComment) GetUser() *User { - if g == nil { - return nil - } - return g.User -} - -// GetChangeStatus returns the ChangeStatus field. -func (g *GistCommit) GetChangeStatus() *CommitStats { - if g == nil { - return nil - } - return g.ChangeStatus -} - -// GetCommittedAt returns the CommittedAt field if it's non-nil, zero value otherwise. -func (g *GistCommit) GetCommittedAt() Timestamp { - if g == nil || g.CommittedAt == nil { - return Timestamp{} - } - return *g.CommittedAt -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (g *GistCommit) GetNodeID() string { - if g == nil || g.NodeID == nil { - return "" - } - return *g.NodeID -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (g *GistCommit) GetURL() string { - if g == nil || g.URL == nil { - return "" - } - return *g.URL -} - -// GetUser returns the User field. -func (g *GistCommit) GetUser() *User { - if g == nil { - return nil - } - return g.User -} - -// GetVersion returns the Version field if it's non-nil, zero value otherwise. -func (g *GistCommit) GetVersion() string { - if g == nil || g.Version == nil { - return "" - } - return *g.Version -} - -// GetContent returns the Content field if it's non-nil, zero value otherwise. -func (g *GistFile) GetContent() string { - if g == nil || g.Content == nil { - return "" - } - return *g.Content -} - -// GetFilename returns the Filename field if it's non-nil, zero value otherwise. -func (g *GistFile) GetFilename() string { - if g == nil || g.Filename == nil { - return "" - } - return *g.Filename -} - -// GetLanguage returns the Language field if it's non-nil, zero value otherwise. -func (g *GistFile) GetLanguage() string { - if g == nil || g.Language == nil { - return "" - } - return *g.Language -} - -// GetRawURL returns the RawURL field if it's non-nil, zero value otherwise. -func (g *GistFile) GetRawURL() string { - if g == nil || g.RawURL == nil { - return "" - } - return *g.RawURL -} - -// GetSize returns the Size field if it's non-nil, zero value otherwise. -func (g *GistFile) GetSize() int { - if g == nil || g.Size == nil { - return 0 - } - return *g.Size -} - -// GetType returns the Type field if it's non-nil, zero value otherwise. -func (g *GistFile) GetType() string { - if g == nil || g.Type == nil { - return "" - } - return *g.Type -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (g *GistFork) GetCreatedAt() Timestamp { - if g == nil || g.CreatedAt == nil { - return Timestamp{} - } - return *g.CreatedAt -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (g *GistFork) GetID() string { - if g == nil || g.ID == nil { - return "" - } - return *g.ID -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (g *GistFork) GetNodeID() string { - if g == nil || g.NodeID == nil { - return "" - } - return *g.NodeID -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (g *GistFork) GetUpdatedAt() Timestamp { - if g == nil || g.UpdatedAt == nil { - return Timestamp{} - } - return *g.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (g *GistFork) GetURL() string { - if g == nil || g.URL == nil { - return "" - } - return *g.URL -} - -// GetUser returns the User field. -func (g *GistFork) GetUser() *User { - if g == nil { - return nil - } - return g.User -} - -// GetPrivateGists returns the PrivateGists field if it's non-nil, zero value otherwise. -func (g *GistStats) GetPrivateGists() int { - if g == nil || g.PrivateGists == nil { - return 0 - } - return *g.PrivateGists -} - -// GetPublicGists returns the PublicGists field if it's non-nil, zero value otherwise. -func (g *GistStats) GetPublicGists() int { - if g == nil || g.PublicGists == nil { - return 0 - } - return *g.PublicGists -} - -// GetTotalGists returns the TotalGists field if it's non-nil, zero value otherwise. -func (g *GistStats) GetTotalGists() int { - if g == nil || g.TotalGists == nil { - return 0 - } - return *g.TotalGists -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (g *Gitignore) GetName() string { - if g == nil || g.Name == nil { - return "" - } - return *g.Name -} - -// GetSource returns the Source field if it's non-nil, zero value otherwise. -func (g *Gitignore) GetSource() string { - if g == nil || g.Source == nil { - return "" - } - return *g.Source -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (g *GitObject) GetSHA() string { - if g == nil || g.SHA == nil { - return "" - } - return *g.SHA -} - -// GetType returns the Type field if it's non-nil, zero value otherwise. -func (g *GitObject) GetType() string { - if g == nil || g.Type == nil { - return "" - } - return *g.Type -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (g *GitObject) GetURL() string { - if g == nil || g.URL == nil { - return "" - } - return *g.URL -} - -// GetInstallation returns the Installation field. -func (g *GollumEvent) GetInstallation() *Installation { - if g == nil { - return nil - } - return g.Installation -} - -// GetRepo returns the Repo field. -func (g *GollumEvent) GetRepo() *Repository { - if g == nil { - return nil - } - return g.Repo -} - -// GetSender returns the Sender field. -func (g *GollumEvent) GetSender() *User { - if g == nil { - return nil - } - return g.Sender -} - -// GetEmail returns the Email field if it's non-nil, zero value otherwise. -func (g *GPGEmail) GetEmail() string { - if g == nil || g.Email == nil { - return "" - } - return *g.Email -} - -// GetVerified returns the Verified field if it's non-nil, zero value otherwise. -func (g *GPGEmail) GetVerified() bool { - if g == nil || g.Verified == nil { - return false - } - return *g.Verified -} - -// GetCanCertify returns the CanCertify field if it's non-nil, zero value otherwise. -func (g *GPGKey) GetCanCertify() bool { - if g == nil || g.CanCertify == nil { - return false - } - return *g.CanCertify -} - -// GetCanEncryptComms returns the CanEncryptComms field if it's non-nil, zero value otherwise. -func (g *GPGKey) GetCanEncryptComms() bool { - if g == nil || g.CanEncryptComms == nil { - return false - } - return *g.CanEncryptComms -} - -// GetCanEncryptStorage returns the CanEncryptStorage field if it's non-nil, zero value otherwise. -func (g *GPGKey) GetCanEncryptStorage() bool { - if g == nil || g.CanEncryptStorage == nil { - return false - } - return *g.CanEncryptStorage -} - -// GetCanSign returns the CanSign field if it's non-nil, zero value otherwise. -func (g *GPGKey) GetCanSign() bool { - if g == nil || g.CanSign == nil { - return false - } - return *g.CanSign -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (g *GPGKey) GetCreatedAt() time.Time { - if g == nil || g.CreatedAt == nil { - return time.Time{} - } - return *g.CreatedAt -} - -// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise. -func (g *GPGKey) GetExpiresAt() time.Time { - if g == nil || g.ExpiresAt == nil { - return time.Time{} - } - return *g.ExpiresAt -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (g *GPGKey) GetID() int64 { - if g == nil || g.ID == nil { - return 0 - } - return *g.ID -} - -// GetKeyID returns the KeyID field if it's non-nil, zero value otherwise. -func (g *GPGKey) GetKeyID() string { - if g == nil || g.KeyID == nil { - return "" - } - return *g.KeyID -} - -// GetPrimaryKeyID returns the PrimaryKeyID field if it's non-nil, zero value otherwise. -func (g *GPGKey) GetPrimaryKeyID() int64 { - if g == nil || g.PrimaryKeyID == nil { - return 0 - } - return *g.PrimaryKeyID -} - -// GetPublicKey returns the PublicKey field if it's non-nil, zero value otherwise. -func (g *GPGKey) GetPublicKey() string { - if g == nil || g.PublicKey == nil { - return "" - } - return *g.PublicKey -} - -// GetApp returns the App field. -func (g *Grant) GetApp() *AuthorizationApp { - if g == nil { - return nil - } - return g.App -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (g *Grant) GetCreatedAt() Timestamp { - if g == nil || g.CreatedAt == nil { - return Timestamp{} - } - return *g.CreatedAt -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (g *Grant) GetID() int64 { - if g == nil || g.ID == nil { - return 0 - } - return *g.ID -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (g *Grant) GetUpdatedAt() Timestamp { - if g == nil || g.UpdatedAt == nil { - return Timestamp{} - } - return *g.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (g *Grant) GetURL() string { - if g == nil || g.URL == nil { - return "" - } - return *g.URL -} - -// GetActive returns the Active field if it's non-nil, zero value otherwise. -func (h *Hook) GetActive() bool { - if h == nil || h.Active == nil { - return false - } - return *h.Active -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (h *Hook) GetCreatedAt() time.Time { - if h == nil || h.CreatedAt == nil { - return time.Time{} - } - return *h.CreatedAt -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (h *Hook) GetID() int64 { - if h == nil || h.ID == nil { - return 0 - } - return *h.ID -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (h *Hook) GetName() string { - if h == nil || h.Name == nil { - return "" - } - return *h.Name -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (h *Hook) GetUpdatedAt() time.Time { - if h == nil || h.UpdatedAt == nil { - return time.Time{} - } - return *h.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (h *Hook) GetURL() string { - if h == nil || h.URL == nil { - return "" - } - return *h.URL -} - -// GetActiveHooks returns the ActiveHooks field if it's non-nil, zero value otherwise. -func (h *HookStats) GetActiveHooks() int { - if h == nil || h.ActiveHooks == nil { - return 0 - } - return *h.ActiveHooks -} - -// GetInactiveHooks returns the InactiveHooks field if it's non-nil, zero value otherwise. -func (h *HookStats) GetInactiveHooks() int { - if h == nil || h.InactiveHooks == nil { - return 0 - } - return *h.InactiveHooks -} - -// GetTotalHooks returns the TotalHooks field if it's non-nil, zero value otherwise. -func (h *HookStats) GetTotalHooks() int { - if h == nil || h.TotalHooks == nil { - return 0 - } - return *h.TotalHooks -} - -// GetAuthorsCount returns the AuthorsCount field if it's non-nil, zero value otherwise. -func (i *Import) GetAuthorsCount() int { - if i == nil || i.AuthorsCount == nil { - return 0 - } - return *i.AuthorsCount -} - -// GetAuthorsURL returns the AuthorsURL field if it's non-nil, zero value otherwise. -func (i *Import) GetAuthorsURL() string { - if i == nil || i.AuthorsURL == nil { - return "" - } - return *i.AuthorsURL -} - -// GetCommitCount returns the CommitCount field if it's non-nil, zero value otherwise. -func (i *Import) GetCommitCount() int { - if i == nil || i.CommitCount == nil { - return 0 - } - return *i.CommitCount -} - -// GetFailedStep returns the FailedStep field if it's non-nil, zero value otherwise. -func (i *Import) GetFailedStep() string { - if i == nil || i.FailedStep == nil { - return "" - } - return *i.FailedStep -} - -// GetHasLargeFiles returns the HasLargeFiles field if it's non-nil, zero value otherwise. -func (i *Import) GetHasLargeFiles() bool { - if i == nil || i.HasLargeFiles == nil { - return false - } - return *i.HasLargeFiles -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (i *Import) GetHTMLURL() string { - if i == nil || i.HTMLURL == nil { - return "" - } - return *i.HTMLURL -} - -// GetHumanName returns the HumanName field if it's non-nil, zero value otherwise. -func (i *Import) GetHumanName() string { - if i == nil || i.HumanName == nil { - return "" - } - return *i.HumanName -} - -// GetLargeFilesCount returns the LargeFilesCount field if it's non-nil, zero value otherwise. -func (i *Import) GetLargeFilesCount() int { - if i == nil || i.LargeFilesCount == nil { - return 0 - } - return *i.LargeFilesCount -} - -// GetLargeFilesSize returns the LargeFilesSize field if it's non-nil, zero value otherwise. -func (i *Import) GetLargeFilesSize() int { - if i == nil || i.LargeFilesSize == nil { - return 0 - } - return *i.LargeFilesSize -} - -// GetMessage returns the Message field if it's non-nil, zero value otherwise. -func (i *Import) GetMessage() string { - if i == nil || i.Message == nil { - return "" - } - return *i.Message -} - -// GetPercent returns the Percent field if it's non-nil, zero value otherwise. -func (i *Import) GetPercent() int { - if i == nil || i.Percent == nil { - return 0 - } - return *i.Percent -} - -// GetPushPercent returns the PushPercent field if it's non-nil, zero value otherwise. -func (i *Import) GetPushPercent() int { - if i == nil || i.PushPercent == nil { - return 0 - } - return *i.PushPercent -} - -// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise. -func (i *Import) GetRepositoryURL() string { - if i == nil || i.RepositoryURL == nil { - return "" - } - return *i.RepositoryURL -} - -// GetStatus returns the Status field if it's non-nil, zero value otherwise. -func (i *Import) GetStatus() string { - if i == nil || i.Status == nil { - return "" - } - return *i.Status -} - -// GetStatusText returns the StatusText field if it's non-nil, zero value otherwise. -func (i *Import) GetStatusText() string { - if i == nil || i.StatusText == nil { - return "" - } - return *i.StatusText -} - -// GetTFVCProject returns the TFVCProject field if it's non-nil, zero value otherwise. -func (i *Import) GetTFVCProject() string { - if i == nil || i.TFVCProject == nil { - return "" - } - return *i.TFVCProject -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (i *Import) GetURL() string { - if i == nil || i.URL == nil { - return "" - } - return *i.URL -} - -// GetUseLFS returns the UseLFS field if it's non-nil, zero value otherwise. -func (i *Import) GetUseLFS() string { - if i == nil || i.UseLFS == nil { - return "" - } - return *i.UseLFS -} - -// GetVCS returns the VCS field if it's non-nil, zero value otherwise. -func (i *Import) GetVCS() string { - if i == nil || i.VCS == nil { - return "" - } - return *i.VCS -} - -// GetVCSPassword returns the VCSPassword field if it's non-nil, zero value otherwise. -func (i *Import) GetVCSPassword() string { - if i == nil || i.VCSPassword == nil { - return "" - } - return *i.VCSPassword -} - -// GetVCSURL returns the VCSURL field if it's non-nil, zero value otherwise. -func (i *Import) GetVCSURL() string { - if i == nil || i.VCSURL == nil { - return "" - } - return *i.VCSURL -} - -// GetVCSUsername returns the VCSUsername field if it's non-nil, zero value otherwise. -func (i *Import) GetVCSUsername() string { - if i == nil || i.VCSUsername == nil { - return "" - } - return *i.VCSUsername -} - -// GetAccessTokensURL returns the AccessTokensURL field if it's non-nil, zero value otherwise. -func (i *Installation) GetAccessTokensURL() string { - if i == nil || i.AccessTokensURL == nil { - return "" - } - return *i.AccessTokensURL -} - -// GetAccount returns the Account field. -func (i *Installation) GetAccount() *User { - if i == nil { - return nil - } - return i.Account -} - -// GetAppID returns the AppID field if it's non-nil, zero value otherwise. -func (i *Installation) GetAppID() int64 { - if i == nil || i.AppID == nil { - return 0 - } - return *i.AppID -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (i *Installation) GetHTMLURL() string { - if i == nil || i.HTMLURL == nil { - return "" - } - return *i.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (i *Installation) GetID() int64 { - if i == nil || i.ID == nil { - return 0 - } - return *i.ID -} - -// GetPermissions returns the Permissions field. -func (i *Installation) GetPermissions() *InstallationPermissions { - if i == nil { - return nil - } - return i.Permissions -} - -// GetRepositoriesURL returns the RepositoriesURL field if it's non-nil, zero value otherwise. -func (i *Installation) GetRepositoriesURL() string { - if i == nil || i.RepositoriesURL == nil { - return "" - } - return *i.RepositoriesURL -} - -// GetRepositorySelection returns the RepositorySelection field if it's non-nil, zero value otherwise. -func (i *Installation) GetRepositorySelection() string { - if i == nil || i.RepositorySelection == nil { - return "" - } - return *i.RepositorySelection -} - -// GetSingleFileName returns the SingleFileName field if it's non-nil, zero value otherwise. -func (i *Installation) GetSingleFileName() string { - if i == nil || i.SingleFileName == nil { - return "" - } - return *i.SingleFileName -} - -// GetTargetID returns the TargetID field if it's non-nil, zero value otherwise. -func (i *Installation) GetTargetID() int64 { - if i == nil || i.TargetID == nil { - return 0 - } - return *i.TargetID -} - -// GetTargetType returns the TargetType field if it's non-nil, zero value otherwise. -func (i *Installation) GetTargetType() string { - if i == nil || i.TargetType == nil { - return "" - } - return *i.TargetType -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (i *InstallationEvent) GetAction() string { - if i == nil || i.Action == nil { - return "" - } - return *i.Action -} - -// GetInstallation returns the Installation field. -func (i *InstallationEvent) GetInstallation() *Installation { - if i == nil { - return nil - } - return i.Installation -} - -// GetSender returns the Sender field. -func (i *InstallationEvent) GetSender() *User { - if i == nil { - return nil - } - return i.Sender -} - -// GetContents returns the Contents field if it's non-nil, zero value otherwise. -func (i *InstallationPermissions) GetContents() string { - if i == nil || i.Contents == nil { - return "" - } - return *i.Contents -} - -// GetIssues returns the Issues field if it's non-nil, zero value otherwise. -func (i *InstallationPermissions) GetIssues() string { - if i == nil || i.Issues == nil { - return "" - } - return *i.Issues -} - -// GetMetadata returns the Metadata field if it's non-nil, zero value otherwise. -func (i *InstallationPermissions) GetMetadata() string { - if i == nil || i.Metadata == nil { - return "" - } - return *i.Metadata -} - -// GetSingleFile returns the SingleFile field if it's non-nil, zero value otherwise. -func (i *InstallationPermissions) GetSingleFile() string { - if i == nil || i.SingleFile == nil { - return "" - } - return *i.SingleFile -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (i *InstallationRepositoriesEvent) GetAction() string { - if i == nil || i.Action == nil { - return "" - } - return *i.Action -} - -// GetInstallation returns the Installation field. -func (i *InstallationRepositoriesEvent) GetInstallation() *Installation { - if i == nil { - return nil - } - return i.Installation -} - -// GetRepositorySelection returns the RepositorySelection field if it's non-nil, zero value otherwise. -func (i *InstallationRepositoriesEvent) GetRepositorySelection() string { - if i == nil || i.RepositorySelection == nil { - return "" - } - return *i.RepositorySelection -} - -// GetSender returns the Sender field. -func (i *InstallationRepositoriesEvent) GetSender() *User { - if i == nil { - return nil - } - return i.Sender -} - -// GetExpiresAt returns the ExpiresAt field if it's non-nil, zero value otherwise. -func (i *InstallationToken) GetExpiresAt() time.Time { - if i == nil || i.ExpiresAt == nil { - return time.Time{} - } - return *i.ExpiresAt -} - -// GetToken returns the Token field if it's non-nil, zero value otherwise. -func (i *InstallationToken) GetToken() string { - if i == nil || i.Token == nil { - return "" - } - return *i.Token -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (i *Invitation) GetCreatedAt() time.Time { - if i == nil || i.CreatedAt == nil { - return time.Time{} - } - return *i.CreatedAt -} - -// GetEmail returns the Email field if it's non-nil, zero value otherwise. -func (i *Invitation) GetEmail() string { - if i == nil || i.Email == nil { - return "" - } - return *i.Email -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (i *Invitation) GetID() int64 { - if i == nil || i.ID == nil { - return 0 - } - return *i.ID -} - -// GetInvitationTeamURL returns the InvitationTeamURL field if it's non-nil, zero value otherwise. -func (i *Invitation) GetInvitationTeamURL() string { - if i == nil || i.InvitationTeamURL == nil { - return "" - } - return *i.InvitationTeamURL -} - -// GetInviter returns the Inviter field. -func (i *Invitation) GetInviter() *User { - if i == nil { - return nil - } - return i.Inviter -} - -// GetLogin returns the Login field if it's non-nil, zero value otherwise. -func (i *Invitation) GetLogin() string { - if i == nil || i.Login == nil { - return "" - } - return *i.Login -} - -// GetRole returns the Role field if it's non-nil, zero value otherwise. -func (i *Invitation) GetRole() string { - if i == nil || i.Role == nil { - return "" - } - return *i.Role -} - -// GetTeamCount returns the TeamCount field if it's non-nil, zero value otherwise. -func (i *Invitation) GetTeamCount() int { - if i == nil || i.TeamCount == nil { - return 0 - } - return *i.TeamCount -} - -// GetAssignee returns the Assignee field. -func (i *Issue) GetAssignee() *User { - if i == nil { - return nil - } - return i.Assignee -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (i *Issue) GetBody() string { - if i == nil || i.Body == nil { - return "" - } - return *i.Body -} - -// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise. -func (i *Issue) GetClosedAt() time.Time { - if i == nil || i.ClosedAt == nil { - return time.Time{} - } - return *i.ClosedAt -} - -// GetClosedBy returns the ClosedBy field. -func (i *Issue) GetClosedBy() *User { - if i == nil { - return nil - } - return i.ClosedBy -} - -// GetComments returns the Comments field if it's non-nil, zero value otherwise. -func (i *Issue) GetComments() int { - if i == nil || i.Comments == nil { - return 0 - } - return *i.Comments -} - -// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise. -func (i *Issue) GetCommentsURL() string { - if i == nil || i.CommentsURL == nil { - return "" - } - return *i.CommentsURL -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (i *Issue) GetCreatedAt() time.Time { - if i == nil || i.CreatedAt == nil { - return time.Time{} - } - return *i.CreatedAt -} - -// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise. -func (i *Issue) GetEventsURL() string { - if i == nil || i.EventsURL == nil { - return "" - } - return *i.EventsURL -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (i *Issue) GetHTMLURL() string { - if i == nil || i.HTMLURL == nil { - return "" - } - return *i.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (i *Issue) GetID() int64 { - if i == nil || i.ID == nil { - return 0 - } - return *i.ID -} - -// GetLabelsURL returns the LabelsURL field if it's non-nil, zero value otherwise. -func (i *Issue) GetLabelsURL() string { - if i == nil || i.LabelsURL == nil { - return "" - } - return *i.LabelsURL -} - -// GetLocked returns the Locked field if it's non-nil, zero value otherwise. -func (i *Issue) GetLocked() bool { - if i == nil || i.Locked == nil { - return false - } - return *i.Locked -} - -// GetMilestone returns the Milestone field. -func (i *Issue) GetMilestone() *Milestone { - if i == nil { - return nil - } - return i.Milestone -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (i *Issue) GetNodeID() string { - if i == nil || i.NodeID == nil { - return "" - } - return *i.NodeID -} - -// GetNumber returns the Number field if it's non-nil, zero value otherwise. -func (i *Issue) GetNumber() int { - if i == nil || i.Number == nil { - return 0 - } - return *i.Number -} - -// GetPullRequestLinks returns the PullRequestLinks field. -func (i *Issue) GetPullRequestLinks() *PullRequestLinks { - if i == nil { - return nil - } - return i.PullRequestLinks -} - -// GetReactions returns the Reactions field. -func (i *Issue) GetReactions() *Reactions { - if i == nil { - return nil - } - return i.Reactions -} - -// GetRepository returns the Repository field. -func (i *Issue) GetRepository() *Repository { - if i == nil { - return nil - } - return i.Repository -} - -// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise. -func (i *Issue) GetRepositoryURL() string { - if i == nil || i.RepositoryURL == nil { - return "" - } - return *i.RepositoryURL -} - -// GetState returns the State field if it's non-nil, zero value otherwise. -func (i *Issue) GetState() string { - if i == nil || i.State == nil { - return "" - } - return *i.State -} - -// GetTitle returns the Title field if it's non-nil, zero value otherwise. -func (i *Issue) GetTitle() string { - if i == nil || i.Title == nil { - return "" - } - return *i.Title -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (i *Issue) GetUpdatedAt() time.Time { - if i == nil || i.UpdatedAt == nil { - return time.Time{} - } - return *i.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (i *Issue) GetURL() string { - if i == nil || i.URL == nil { - return "" - } - return *i.URL -} - -// GetUser returns the User field. -func (i *Issue) GetUser() *User { - if i == nil { - return nil - } - return i.User -} - -// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise. -func (i *IssueComment) GetAuthorAssociation() string { - if i == nil || i.AuthorAssociation == nil { - return "" - } - return *i.AuthorAssociation -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (i *IssueComment) GetBody() string { - if i == nil || i.Body == nil { - return "" - } - return *i.Body -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (i *IssueComment) GetCreatedAt() time.Time { - if i == nil || i.CreatedAt == nil { - return time.Time{} - } - return *i.CreatedAt -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (i *IssueComment) GetHTMLURL() string { - if i == nil || i.HTMLURL == nil { - return "" - } - return *i.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (i *IssueComment) GetID() int64 { - if i == nil || i.ID == nil { - return 0 - } - return *i.ID -} - -// GetIssueURL returns the IssueURL field if it's non-nil, zero value otherwise. -func (i *IssueComment) GetIssueURL() string { - if i == nil || i.IssueURL == nil { - return "" - } - return *i.IssueURL -} - -// GetReactions returns the Reactions field. -func (i *IssueComment) GetReactions() *Reactions { - if i == nil { - return nil - } - return i.Reactions -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (i *IssueComment) GetUpdatedAt() time.Time { - if i == nil || i.UpdatedAt == nil { - return time.Time{} - } - return *i.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (i *IssueComment) GetURL() string { - if i == nil || i.URL == nil { - return "" - } - return *i.URL -} - -// GetUser returns the User field. -func (i *IssueComment) GetUser() *User { - if i == nil { - return nil - } - return i.User -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (i *IssueCommentEvent) GetAction() string { - if i == nil || i.Action == nil { - return "" - } - return *i.Action -} - -// GetChanges returns the Changes field. -func (i *IssueCommentEvent) GetChanges() *EditChange { - if i == nil { - return nil - } - return i.Changes -} - -// GetComment returns the Comment field. -func (i *IssueCommentEvent) GetComment() *IssueComment { - if i == nil { - return nil - } - return i.Comment -} - -// GetInstallation returns the Installation field. -func (i *IssueCommentEvent) GetInstallation() *Installation { - if i == nil { - return nil - } - return i.Installation -} - -// GetIssue returns the Issue field. -func (i *IssueCommentEvent) GetIssue() *Issue { - if i == nil { - return nil - } - return i.Issue -} - -// GetRepo returns the Repo field. -func (i *IssueCommentEvent) GetRepo() *Repository { - if i == nil { - return nil - } - return i.Repo -} - -// GetSender returns the Sender field. -func (i *IssueCommentEvent) GetSender() *User { - if i == nil { - return nil - } - return i.Sender -} - -// GetActor returns the Actor field. -func (i *IssueEvent) GetActor() *User { - if i == nil { - return nil - } - return i.Actor -} - -// GetAssignee returns the Assignee field. -func (i *IssueEvent) GetAssignee() *User { - if i == nil { - return nil - } - return i.Assignee -} - -// GetAssigner returns the Assigner field. -func (i *IssueEvent) GetAssigner() *User { - if i == nil { - return nil - } - return i.Assigner -} - -// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise. -func (i *IssueEvent) GetCommitID() string { - if i == nil || i.CommitID == nil { - return "" - } - return *i.CommitID -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (i *IssueEvent) GetCreatedAt() time.Time { - if i == nil || i.CreatedAt == nil { - return time.Time{} - } - return *i.CreatedAt -} - -// GetEvent returns the Event field if it's non-nil, zero value otherwise. -func (i *IssueEvent) GetEvent() string { - if i == nil || i.Event == nil { - return "" - } - return *i.Event -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (i *IssueEvent) GetID() int64 { - if i == nil || i.ID == nil { - return 0 - } - return *i.ID -} - -// GetIssue returns the Issue field. -func (i *IssueEvent) GetIssue() *Issue { - if i == nil { - return nil - } - return i.Issue -} - -// GetLabel returns the Label field. -func (i *IssueEvent) GetLabel() *Label { - if i == nil { - return nil - } - return i.Label -} - -// GetMilestone returns the Milestone field. -func (i *IssueEvent) GetMilestone() *Milestone { - if i == nil { - return nil - } - return i.Milestone -} - -// GetRename returns the Rename field. -func (i *IssueEvent) GetRename() *Rename { - if i == nil { - return nil - } - return i.Rename -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (i *IssueEvent) GetURL() string { - if i == nil || i.URL == nil { - return "" - } - return *i.URL -} - -// GetAssignee returns the Assignee field if it's non-nil, zero value otherwise. -func (i *IssueRequest) GetAssignee() string { - if i == nil || i.Assignee == nil { - return "" - } - return *i.Assignee -} - -// GetAssignees returns the Assignees field if it's non-nil, zero value otherwise. -func (i *IssueRequest) GetAssignees() []string { - if i == nil || i.Assignees == nil { - return nil - } - return *i.Assignees -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (i *IssueRequest) GetBody() string { - if i == nil || i.Body == nil { - return "" - } - return *i.Body -} - -// GetLabels returns the Labels field if it's non-nil, zero value otherwise. -func (i *IssueRequest) GetLabels() []string { - if i == nil || i.Labels == nil { - return nil - } - return *i.Labels -} - -// GetMilestone returns the Milestone field if it's non-nil, zero value otherwise. -func (i *IssueRequest) GetMilestone() int { - if i == nil || i.Milestone == nil { - return 0 - } - return *i.Milestone -} - -// GetState returns the State field if it's non-nil, zero value otherwise. -func (i *IssueRequest) GetState() string { - if i == nil || i.State == nil { - return "" - } - return *i.State -} - -// GetTitle returns the Title field if it's non-nil, zero value otherwise. -func (i *IssueRequest) GetTitle() string { - if i == nil || i.Title == nil { - return "" - } - return *i.Title -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (i *IssuesEvent) GetAction() string { - if i == nil || i.Action == nil { - return "" - } - return *i.Action -} - -// GetAssignee returns the Assignee field. -func (i *IssuesEvent) GetAssignee() *User { - if i == nil { - return nil - } - return i.Assignee -} - -// GetChanges returns the Changes field. -func (i *IssuesEvent) GetChanges() *EditChange { - if i == nil { - return nil - } - return i.Changes -} - -// GetInstallation returns the Installation field. -func (i *IssuesEvent) GetInstallation() *Installation { - if i == nil { - return nil - } - return i.Installation -} - -// GetIssue returns the Issue field. -func (i *IssuesEvent) GetIssue() *Issue { - if i == nil { - return nil - } - return i.Issue -} - -// GetLabel returns the Label field. -func (i *IssuesEvent) GetLabel() *Label { - if i == nil { - return nil - } - return i.Label -} - -// GetRepo returns the Repo field. -func (i *IssuesEvent) GetRepo() *Repository { - if i == nil { - return nil - } - return i.Repo -} - -// GetSender returns the Sender field. -func (i *IssuesEvent) GetSender() *User { - if i == nil { - return nil - } - return i.Sender -} - -// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise. -func (i *IssuesSearchResult) GetIncompleteResults() bool { - if i == nil || i.IncompleteResults == nil { - return false - } - return *i.IncompleteResults -} - -// GetTotal returns the Total field if it's non-nil, zero value otherwise. -func (i *IssuesSearchResult) GetTotal() int { - if i == nil || i.Total == nil { - return 0 - } - return *i.Total -} - -// GetClosedIssues returns the ClosedIssues field if it's non-nil, zero value otherwise. -func (i *IssueStats) GetClosedIssues() int { - if i == nil || i.ClosedIssues == nil { - return 0 - } - return *i.ClosedIssues -} - -// GetOpenIssues returns the OpenIssues field if it's non-nil, zero value otherwise. -func (i *IssueStats) GetOpenIssues() int { - if i == nil || i.OpenIssues == nil { - return 0 - } - return *i.OpenIssues -} - -// GetTotalIssues returns the TotalIssues field if it's non-nil, zero value otherwise. -func (i *IssueStats) GetTotalIssues() int { - if i == nil || i.TotalIssues == nil { - return 0 - } - return *i.TotalIssues -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (k *Key) GetID() int64 { - if k == nil || k.ID == nil { - return 0 - } - return *k.ID -} - -// GetKey returns the Key field if it's non-nil, zero value otherwise. -func (k *Key) GetKey() string { - if k == nil || k.Key == nil { - return "" - } - return *k.Key -} - -// GetReadOnly returns the ReadOnly field if it's non-nil, zero value otherwise. -func (k *Key) GetReadOnly() bool { - if k == nil || k.ReadOnly == nil { - return false - } - return *k.ReadOnly -} - -// GetTitle returns the Title field if it's non-nil, zero value otherwise. -func (k *Key) GetTitle() string { - if k == nil || k.Title == nil { - return "" - } - return *k.Title -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (k *Key) GetURL() string { - if k == nil || k.URL == nil { - return "" - } - return *k.URL -} - -// GetColor returns the Color field if it's non-nil, zero value otherwise. -func (l *Label) GetColor() string { - if l == nil || l.Color == nil { - return "" - } - return *l.Color -} - -// GetDefault returns the Default field if it's non-nil, zero value otherwise. -func (l *Label) GetDefault() bool { - if l == nil || l.Default == nil { - return false - } - return *l.Default -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (l *Label) GetDescription() string { - if l == nil || l.Description == nil { - return "" - } - return *l.Description -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (l *Label) GetID() int64 { - if l == nil || l.ID == nil { - return 0 - } - return *l.ID -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (l *Label) GetName() string { - if l == nil || l.Name == nil { - return "" - } - return *l.Name -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (l *Label) GetNodeID() string { - if l == nil || l.NodeID == nil { - return "" - } - return *l.NodeID -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (l *Label) GetURL() string { - if l == nil || l.URL == nil { - return "" - } - return *l.URL -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (l *LabelEvent) GetAction() string { - if l == nil || l.Action == nil { - return "" - } - return *l.Action -} - -// GetChanges returns the Changes field. -func (l *LabelEvent) GetChanges() *EditChange { - if l == nil { - return nil - } - return l.Changes -} - -// GetInstallation returns the Installation field. -func (l *LabelEvent) GetInstallation() *Installation { - if l == nil { - return nil - } - return l.Installation -} - -// GetLabel returns the Label field. -func (l *LabelEvent) GetLabel() *Label { - if l == nil { - return nil - } - return l.Label -} - -// GetOrg returns the Org field. -func (l *LabelEvent) GetOrg() *Organization { - if l == nil { - return nil - } - return l.Org -} - -// GetRepo returns the Repo field. -func (l *LabelEvent) GetRepo() *Repository { - if l == nil { - return nil - } - return l.Repo -} - -// GetColor returns the Color field if it's non-nil, zero value otherwise. -func (l *LabelResult) GetColor() string { - if l == nil || l.Color == nil { - return "" - } - return *l.Color -} - -// GetDefault returns the Default field if it's non-nil, zero value otherwise. -func (l *LabelResult) GetDefault() bool { - if l == nil || l.Default == nil { - return false - } - return *l.Default -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (l *LabelResult) GetDescription() string { - if l == nil || l.Description == nil { - return "" - } - return *l.Description -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (l *LabelResult) GetID() int64 { - if l == nil || l.ID == nil { - return 0 - } - return *l.ID -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (l *LabelResult) GetName() string { - if l == nil || l.Name == nil { - return "" - } - return *l.Name -} - -// GetScore returns the Score field. -func (l *LabelResult) GetScore() *float64 { - if l == nil { - return nil - } - return l.Score -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (l *LabelResult) GetURL() string { - if l == nil || l.URL == nil { - return "" - } - return *l.URL -} - -// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise. -func (l *LabelsSearchResult) GetIncompleteResults() bool { - if l == nil || l.IncompleteResults == nil { - return false - } - return *l.IncompleteResults -} - -// GetTotal returns the Total field if it's non-nil, zero value otherwise. -func (l *LabelsSearchResult) GetTotal() int { - if l == nil || l.Total == nil { - return 0 - } - return *l.Total -} - -// GetOID returns the OID field if it's non-nil, zero value otherwise. -func (l *LargeFile) GetOID() string { - if l == nil || l.OID == nil { - return "" - } - return *l.OID -} - -// GetPath returns the Path field if it's non-nil, zero value otherwise. -func (l *LargeFile) GetPath() string { - if l == nil || l.Path == nil { - return "" - } - return *l.Path -} - -// GetRefName returns the RefName field if it's non-nil, zero value otherwise. -func (l *LargeFile) GetRefName() string { - if l == nil || l.RefName == nil { - return "" - } - return *l.RefName -} - -// GetSize returns the Size field if it's non-nil, zero value otherwise. -func (l *LargeFile) GetSize() int { - if l == nil || l.Size == nil { - return 0 - } - return *l.Size -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (l *License) GetBody() string { - if l == nil || l.Body == nil { - return "" - } - return *l.Body -} - -// GetConditions returns the Conditions field if it's non-nil, zero value otherwise. -func (l *License) GetConditions() []string { - if l == nil || l.Conditions == nil { - return nil - } - return *l.Conditions -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (l *License) GetDescription() string { - if l == nil || l.Description == nil { - return "" - } - return *l.Description -} - -// GetFeatured returns the Featured field if it's non-nil, zero value otherwise. -func (l *License) GetFeatured() bool { - if l == nil || l.Featured == nil { - return false - } - return *l.Featured -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (l *License) GetHTMLURL() string { - if l == nil || l.HTMLURL == nil { - return "" - } - return *l.HTMLURL -} - -// GetImplementation returns the Implementation field if it's non-nil, zero value otherwise. -func (l *License) GetImplementation() string { - if l == nil || l.Implementation == nil { - return "" - } - return *l.Implementation -} - -// GetKey returns the Key field if it's non-nil, zero value otherwise. -func (l *License) GetKey() string { - if l == nil || l.Key == nil { - return "" - } - return *l.Key -} - -// GetLimitations returns the Limitations field if it's non-nil, zero value otherwise. -func (l *License) GetLimitations() []string { - if l == nil || l.Limitations == nil { - return nil - } - return *l.Limitations -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (l *License) GetName() string { - if l == nil || l.Name == nil { - return "" - } - return *l.Name -} - -// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise. -func (l *License) GetPermissions() []string { - if l == nil || l.Permissions == nil { - return nil - } - return *l.Permissions -} - -// GetSPDXID returns the SPDXID field if it's non-nil, zero value otherwise. -func (l *License) GetSPDXID() string { - if l == nil || l.SPDXID == nil { - return "" - } - return *l.SPDXID -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (l *License) GetURL() string { - if l == nil || l.URL == nil { - return "" - } - return *l.URL -} - -// GetAccountsURL returns the AccountsURL field if it's non-nil, zero value otherwise. -func (m *MarketplacePlan) GetAccountsURL() string { - if m == nil || m.AccountsURL == nil { - return "" - } - return *m.AccountsURL -} - -// GetBullets returns the Bullets field if it's non-nil, zero value otherwise. -func (m *MarketplacePlan) GetBullets() []string { - if m == nil || m.Bullets == nil { - return nil - } - return *m.Bullets -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (m *MarketplacePlan) GetDescription() string { - if m == nil || m.Description == nil { - return "" - } - return *m.Description -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (m *MarketplacePlan) GetID() int64 { - if m == nil || m.ID == nil { - return 0 - } - return *m.ID -} - -// GetMonthlyPriceInCents returns the MonthlyPriceInCents field if it's non-nil, zero value otherwise. -func (m *MarketplacePlan) GetMonthlyPriceInCents() int { - if m == nil || m.MonthlyPriceInCents == nil { - return 0 - } - return *m.MonthlyPriceInCents -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (m *MarketplacePlan) GetName() string { - if m == nil || m.Name == nil { - return "" - } - return *m.Name -} - -// GetPriceModel returns the PriceModel field if it's non-nil, zero value otherwise. -func (m *MarketplacePlan) GetPriceModel() string { - if m == nil || m.PriceModel == nil { - return "" - } - return *m.PriceModel -} - -// GetUnitName returns the UnitName field if it's non-nil, zero value otherwise. -func (m *MarketplacePlan) GetUnitName() string { - if m == nil || m.UnitName == nil { - return "" - } - return *m.UnitName -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (m *MarketplacePlan) GetURL() string { - if m == nil || m.URL == nil { - return "" - } - return *m.URL -} - -// GetYearlyPriceInCents returns the YearlyPriceInCents field if it's non-nil, zero value otherwise. -func (m *MarketplacePlan) GetYearlyPriceInCents() int { - if m == nil || m.YearlyPriceInCents == nil { - return 0 - } - return *m.YearlyPriceInCents -} - -// GetEmail returns the Email field if it's non-nil, zero value otherwise. -func (m *MarketplacePlanAccount) GetEmail() string { - if m == nil || m.Email == nil { - return "" - } - return *m.Email -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (m *MarketplacePlanAccount) GetID() int64 { - if m == nil || m.ID == nil { - return 0 - } - return *m.ID -} - -// GetLogin returns the Login field if it's non-nil, zero value otherwise. -func (m *MarketplacePlanAccount) GetLogin() string { - if m == nil || m.Login == nil { - return "" - } - return *m.Login -} - -// GetMarketplacePurchase returns the MarketplacePurchase field. -func (m *MarketplacePlanAccount) GetMarketplacePurchase() *MarketplacePurchase { - if m == nil { - return nil - } - return m.MarketplacePurchase -} - -// GetOrganizationBillingEmail returns the OrganizationBillingEmail field if it's non-nil, zero value otherwise. -func (m *MarketplacePlanAccount) GetOrganizationBillingEmail() string { - if m == nil || m.OrganizationBillingEmail == nil { - return "" - } - return *m.OrganizationBillingEmail -} - -// GetType returns the Type field if it's non-nil, zero value otherwise. -func (m *MarketplacePlanAccount) GetType() string { - if m == nil || m.Type == nil { - return "" - } - return *m.Type -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (m *MarketplacePlanAccount) GetURL() string { - if m == nil || m.URL == nil { - return "" - } - return *m.URL -} - -// GetAccount returns the Account field. -func (m *MarketplacePurchase) GetAccount() *MarketplacePlanAccount { - if m == nil { - return nil - } - return m.Account -} - -// GetBillingCycle returns the BillingCycle field if it's non-nil, zero value otherwise. -func (m *MarketplacePurchase) GetBillingCycle() string { - if m == nil || m.BillingCycle == nil { - return "" - } - return *m.BillingCycle -} - -// GetNextBillingDate returns the NextBillingDate field if it's non-nil, zero value otherwise. -func (m *MarketplacePurchase) GetNextBillingDate() string { - if m == nil || m.NextBillingDate == nil { - return "" - } - return *m.NextBillingDate -} - -// GetPlan returns the Plan field. -func (m *MarketplacePurchase) GetPlan() *MarketplacePlan { - if m == nil { - return nil - } - return m.Plan -} - -// GetUnitCount returns the UnitCount field if it's non-nil, zero value otherwise. -func (m *MarketplacePurchase) GetUnitCount() int { - if m == nil || m.UnitCount == nil { - return 0 - } - return *m.UnitCount -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (m *MarketplacePurchaseEvent) GetAction() string { - if m == nil || m.Action == nil { - return "" - } - return *m.Action -} - -// GetEffectiveDate returns the EffectiveDate field if it's non-nil, zero value otherwise. -func (m *MarketplacePurchaseEvent) GetEffectiveDate() Timestamp { - if m == nil || m.EffectiveDate == nil { - return Timestamp{} - } - return *m.EffectiveDate -} - -// GetInstallation returns the Installation field. -func (m *MarketplacePurchaseEvent) GetInstallation() *Installation { - if m == nil { - return nil - } - return m.Installation -} - -// GetMarketplacePurchase returns the MarketplacePurchase field. -func (m *MarketplacePurchaseEvent) GetMarketplacePurchase() *MarketplacePurchase { - if m == nil { - return nil - } - return m.MarketplacePurchase -} - -// GetPreviousMarketplacePurchase returns the PreviousMarketplacePurchase field. -func (m *MarketplacePurchaseEvent) GetPreviousMarketplacePurchase() *MarketplacePurchase { - if m == nil { - return nil - } - return m.PreviousMarketplacePurchase -} - -// GetSender returns the Sender field. -func (m *MarketplacePurchaseEvent) GetSender() *User { - if m == nil { - return nil - } - return m.Sender -} - -// GetText returns the Text field if it's non-nil, zero value otherwise. -func (m *Match) GetText() string { - if m == nil || m.Text == nil { - return "" - } - return *m.Text -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (m *MemberEvent) GetAction() string { - if m == nil || m.Action == nil { - return "" - } - return *m.Action -} - -// GetInstallation returns the Installation field. -func (m *MemberEvent) GetInstallation() *Installation { - if m == nil { - return nil - } - return m.Installation -} - -// GetMember returns the Member field. -func (m *MemberEvent) GetMember() *User { - if m == nil { - return nil - } - return m.Member -} - -// GetRepo returns the Repo field. -func (m *MemberEvent) GetRepo() *Repository { - if m == nil { - return nil - } - return m.Repo -} - -// GetSender returns the Sender field. -func (m *MemberEvent) GetSender() *User { - if m == nil { - return nil - } - return m.Sender -} - -// GetOrganization returns the Organization field. -func (m *Membership) GetOrganization() *Organization { - if m == nil { - return nil - } - return m.Organization -} - -// GetOrganizationURL returns the OrganizationURL field if it's non-nil, zero value otherwise. -func (m *Membership) GetOrganizationURL() string { - if m == nil || m.OrganizationURL == nil { - return "" - } - return *m.OrganizationURL -} - -// GetRole returns the Role field if it's non-nil, zero value otherwise. -func (m *Membership) GetRole() string { - if m == nil || m.Role == nil { - return "" - } - return *m.Role -} - -// GetState returns the State field if it's non-nil, zero value otherwise. -func (m *Membership) GetState() string { - if m == nil || m.State == nil { - return "" - } - return *m.State -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (m *Membership) GetURL() string { - if m == nil || m.URL == nil { - return "" - } - return *m.URL -} - -// GetUser returns the User field. -func (m *Membership) GetUser() *User { - if m == nil { - return nil - } - return m.User -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (m *MembershipEvent) GetAction() string { - if m == nil || m.Action == nil { - return "" - } - return *m.Action -} - -// GetInstallation returns the Installation field. -func (m *MembershipEvent) GetInstallation() *Installation { - if m == nil { - return nil - } - return m.Installation -} - -// GetMember returns the Member field. -func (m *MembershipEvent) GetMember() *User { - if m == nil { - return nil - } - return m.Member -} - -// GetOrg returns the Org field. -func (m *MembershipEvent) GetOrg() *Organization { - if m == nil { - return nil - } - return m.Org -} - -// GetScope returns the Scope field if it's non-nil, zero value otherwise. -func (m *MembershipEvent) GetScope() string { - if m == nil || m.Scope == nil { - return "" - } - return *m.Scope -} - -// GetSender returns the Sender field. -func (m *MembershipEvent) GetSender() *User { - if m == nil { - return nil - } - return m.Sender -} - -// GetTeam returns the Team field. -func (m *MembershipEvent) GetTeam() *Team { - if m == nil { - return nil - } - return m.Team -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (m *Metric) GetHTMLURL() string { - if m == nil || m.HTMLURL == nil { - return "" - } - return *m.HTMLURL -} - -// GetKey returns the Key field if it's non-nil, zero value otherwise. -func (m *Metric) GetKey() string { - if m == nil || m.Key == nil { - return "" - } - return *m.Key -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (m *Metric) GetName() string { - if m == nil || m.Name == nil { - return "" - } - return *m.Name -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (m *Metric) GetURL() string { - if m == nil || m.URL == nil { - return "" - } - return *m.URL -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (m *Migration) GetCreatedAt() string { - if m == nil || m.CreatedAt == nil { - return "" - } - return *m.CreatedAt -} - -// GetExcludeAttachments returns the ExcludeAttachments field if it's non-nil, zero value otherwise. -func (m *Migration) GetExcludeAttachments() bool { - if m == nil || m.ExcludeAttachments == nil { - return false - } - return *m.ExcludeAttachments -} - -// GetGUID returns the GUID field if it's non-nil, zero value otherwise. -func (m *Migration) GetGUID() string { - if m == nil || m.GUID == nil { - return "" - } - return *m.GUID -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (m *Migration) GetID() int64 { - if m == nil || m.ID == nil { - return 0 - } - return *m.ID -} - -// GetLockRepositories returns the LockRepositories field if it's non-nil, zero value otherwise. -func (m *Migration) GetLockRepositories() bool { - if m == nil || m.LockRepositories == nil { - return false - } - return *m.LockRepositories -} - -// GetState returns the State field if it's non-nil, zero value otherwise. -func (m *Migration) GetState() string { - if m == nil || m.State == nil { - return "" - } - return *m.State -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (m *Migration) GetUpdatedAt() string { - if m == nil || m.UpdatedAt == nil { - return "" - } - return *m.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (m *Migration) GetURL() string { - if m == nil || m.URL == nil { - return "" - } - return *m.URL -} - -// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise. -func (m *Milestone) GetClosedAt() time.Time { - if m == nil || m.ClosedAt == nil { - return time.Time{} - } - return *m.ClosedAt -} - -// GetClosedIssues returns the ClosedIssues field if it's non-nil, zero value otherwise. -func (m *Milestone) GetClosedIssues() int { - if m == nil || m.ClosedIssues == nil { - return 0 - } - return *m.ClosedIssues -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (m *Milestone) GetCreatedAt() time.Time { - if m == nil || m.CreatedAt == nil { - return time.Time{} - } - return *m.CreatedAt -} - -// GetCreator returns the Creator field. -func (m *Milestone) GetCreator() *User { - if m == nil { - return nil - } - return m.Creator -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (m *Milestone) GetDescription() string { - if m == nil || m.Description == nil { - return "" - } - return *m.Description -} - -// GetDueOn returns the DueOn field if it's non-nil, zero value otherwise. -func (m *Milestone) GetDueOn() time.Time { - if m == nil || m.DueOn == nil { - return time.Time{} - } - return *m.DueOn -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (m *Milestone) GetHTMLURL() string { - if m == nil || m.HTMLURL == nil { - return "" - } - return *m.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (m *Milestone) GetID() int64 { - if m == nil || m.ID == nil { - return 0 - } - return *m.ID -} - -// GetLabelsURL returns the LabelsURL field if it's non-nil, zero value otherwise. -func (m *Milestone) GetLabelsURL() string { - if m == nil || m.LabelsURL == nil { - return "" - } - return *m.LabelsURL -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (m *Milestone) GetNodeID() string { - if m == nil || m.NodeID == nil { - return "" - } - return *m.NodeID -} - -// GetNumber returns the Number field if it's non-nil, zero value otherwise. -func (m *Milestone) GetNumber() int { - if m == nil || m.Number == nil { - return 0 - } - return *m.Number -} - -// GetOpenIssues returns the OpenIssues field if it's non-nil, zero value otherwise. -func (m *Milestone) GetOpenIssues() int { - if m == nil || m.OpenIssues == nil { - return 0 - } - return *m.OpenIssues -} - -// GetState returns the State field if it's non-nil, zero value otherwise. -func (m *Milestone) GetState() string { - if m == nil || m.State == nil { - return "" - } - return *m.State -} - -// GetTitle returns the Title field if it's non-nil, zero value otherwise. -func (m *Milestone) GetTitle() string { - if m == nil || m.Title == nil { - return "" - } - return *m.Title -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (m *Milestone) GetUpdatedAt() time.Time { - if m == nil || m.UpdatedAt == nil { - return time.Time{} - } - return *m.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (m *Milestone) GetURL() string { - if m == nil || m.URL == nil { - return "" - } - return *m.URL -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (m *MilestoneEvent) GetAction() string { - if m == nil || m.Action == nil { - return "" - } - return *m.Action -} - -// GetChanges returns the Changes field. -func (m *MilestoneEvent) GetChanges() *EditChange { - if m == nil { - return nil - } - return m.Changes -} - -// GetInstallation returns the Installation field. -func (m *MilestoneEvent) GetInstallation() *Installation { - if m == nil { - return nil - } - return m.Installation -} - -// GetMilestone returns the Milestone field. -func (m *MilestoneEvent) GetMilestone() *Milestone { - if m == nil { - return nil - } - return m.Milestone -} - -// GetOrg returns the Org field. -func (m *MilestoneEvent) GetOrg() *Organization { - if m == nil { - return nil - } - return m.Org -} - -// GetRepo returns the Repo field. -func (m *MilestoneEvent) GetRepo() *Repository { - if m == nil { - return nil - } - return m.Repo -} - -// GetSender returns the Sender field. -func (m *MilestoneEvent) GetSender() *User { - if m == nil { - return nil - } - return m.Sender -} - -// GetClosedMilestones returns the ClosedMilestones field if it's non-nil, zero value otherwise. -func (m *MilestoneStats) GetClosedMilestones() int { - if m == nil || m.ClosedMilestones == nil { - return 0 - } - return *m.ClosedMilestones -} - -// GetOpenMilestones returns the OpenMilestones field if it's non-nil, zero value otherwise. -func (m *MilestoneStats) GetOpenMilestones() int { - if m == nil || m.OpenMilestones == nil { - return 0 - } - return *m.OpenMilestones -} - -// GetTotalMilestones returns the TotalMilestones field if it's non-nil, zero value otherwise. -func (m *MilestoneStats) GetTotalMilestones() int { - if m == nil || m.TotalMilestones == nil { - return 0 - } - return *m.TotalMilestones -} - -// GetBase returns the Base field if it's non-nil, zero value otherwise. -func (n *NewPullRequest) GetBase() string { - if n == nil || n.Base == nil { - return "" - } - return *n.Base -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (n *NewPullRequest) GetBody() string { - if n == nil || n.Body == nil { - return "" - } - return *n.Body -} - -// GetHead returns the Head field if it's non-nil, zero value otherwise. -func (n *NewPullRequest) GetHead() string { - if n == nil || n.Head == nil { - return "" - } - return *n.Head -} - -// GetIssue returns the Issue field if it's non-nil, zero value otherwise. -func (n *NewPullRequest) GetIssue() int { - if n == nil || n.Issue == nil { - return 0 - } - return *n.Issue -} - -// GetMaintainerCanModify returns the MaintainerCanModify field if it's non-nil, zero value otherwise. -func (n *NewPullRequest) GetMaintainerCanModify() bool { - if n == nil || n.MaintainerCanModify == nil { - return false - } - return *n.MaintainerCanModify -} - -// GetTitle returns the Title field if it's non-nil, zero value otherwise. -func (n *NewPullRequest) GetTitle() string { - if n == nil || n.Title == nil { - return "" - } - return *n.Title -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (n *NewTeam) GetDescription() string { - if n == nil || n.Description == nil { - return "" - } - return *n.Description -} - -// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise. -func (n *NewTeam) GetLDAPDN() string { - if n == nil || n.LDAPDN == nil { - return "" - } - return *n.LDAPDN -} - -// GetParentTeamID returns the ParentTeamID field if it's non-nil, zero value otherwise. -func (n *NewTeam) GetParentTeamID() int64 { - if n == nil || n.ParentTeamID == nil { - return 0 - } - return *n.ParentTeamID -} - -// GetPermission returns the Permission field if it's non-nil, zero value otherwise. -func (n *NewTeam) GetPermission() string { - if n == nil || n.Permission == nil { - return "" - } - return *n.Permission -} - -// GetPrivacy returns the Privacy field if it's non-nil, zero value otherwise. -func (n *NewTeam) GetPrivacy() string { - if n == nil || n.Privacy == nil { - return "" - } - return *n.Privacy -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (n *Notification) GetID() string { - if n == nil || n.ID == nil { - return "" - } - return *n.ID -} - -// GetLastReadAt returns the LastReadAt field if it's non-nil, zero value otherwise. -func (n *Notification) GetLastReadAt() time.Time { - if n == nil || n.LastReadAt == nil { - return time.Time{} - } - return *n.LastReadAt -} - -// GetReason returns the Reason field if it's non-nil, zero value otherwise. -func (n *Notification) GetReason() string { - if n == nil || n.Reason == nil { - return "" - } - return *n.Reason -} - -// GetRepository returns the Repository field. -func (n *Notification) GetRepository() *Repository { - if n == nil { - return nil - } - return n.Repository -} - -// GetSubject returns the Subject field. -func (n *Notification) GetSubject() *NotificationSubject { - if n == nil { - return nil - } - return n.Subject -} - -// GetUnread returns the Unread field if it's non-nil, zero value otherwise. -func (n *Notification) GetUnread() bool { - if n == nil || n.Unread == nil { - return false - } - return *n.Unread -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (n *Notification) GetUpdatedAt() time.Time { - if n == nil || n.UpdatedAt == nil { - return time.Time{} - } - return *n.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (n *Notification) GetURL() string { - if n == nil || n.URL == nil { - return "" - } - return *n.URL -} - -// GetLatestCommentURL returns the LatestCommentURL field if it's non-nil, zero value otherwise. -func (n *NotificationSubject) GetLatestCommentURL() string { - if n == nil || n.LatestCommentURL == nil { - return "" - } - return *n.LatestCommentURL -} - -// GetTitle returns the Title field if it's non-nil, zero value otherwise. -func (n *NotificationSubject) GetTitle() string { - if n == nil || n.Title == nil { - return "" - } - return *n.Title -} - -// GetType returns the Type field if it's non-nil, zero value otherwise. -func (n *NotificationSubject) GetType() string { - if n == nil || n.Type == nil { - return "" - } - return *n.Type -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (n *NotificationSubject) GetURL() string { - if n == nil || n.URL == nil { - return "" - } - return *n.URL -} - -// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise. -func (o *Organization) GetAvatarURL() string { - if o == nil || o.AvatarURL == nil { - return "" - } - return *o.AvatarURL -} - -// GetBillingEmail returns the BillingEmail field if it's non-nil, zero value otherwise. -func (o *Organization) GetBillingEmail() string { - if o == nil || o.BillingEmail == nil { - return "" - } - return *o.BillingEmail -} - -// GetBlog returns the Blog field if it's non-nil, zero value otherwise. -func (o *Organization) GetBlog() string { - if o == nil || o.Blog == nil { - return "" - } - return *o.Blog -} - -// GetCollaborators returns the Collaborators field if it's non-nil, zero value otherwise. -func (o *Organization) GetCollaborators() int { - if o == nil || o.Collaborators == nil { - return 0 - } - return *o.Collaborators -} - -// GetCompany returns the Company field if it's non-nil, zero value otherwise. -func (o *Organization) GetCompany() string { - if o == nil || o.Company == nil { - return "" - } - return *o.Company -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (o *Organization) GetCreatedAt() time.Time { - if o == nil || o.CreatedAt == nil { - return time.Time{} - } - return *o.CreatedAt -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (o *Organization) GetDescription() string { - if o == nil || o.Description == nil { - return "" - } - return *o.Description -} - -// GetDiskUsage returns the DiskUsage field if it's non-nil, zero value otherwise. -func (o *Organization) GetDiskUsage() int { - if o == nil || o.DiskUsage == nil { - return 0 - } - return *o.DiskUsage -} - -// GetEmail returns the Email field if it's non-nil, zero value otherwise. -func (o *Organization) GetEmail() string { - if o == nil || o.Email == nil { - return "" - } - return *o.Email -} - -// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise. -func (o *Organization) GetEventsURL() string { - if o == nil || o.EventsURL == nil { - return "" - } - return *o.EventsURL -} - -// GetFollowers returns the Followers field if it's non-nil, zero value otherwise. -func (o *Organization) GetFollowers() int { - if o == nil || o.Followers == nil { - return 0 - } - return *o.Followers -} - -// GetFollowing returns the Following field if it's non-nil, zero value otherwise. -func (o *Organization) GetFollowing() int { - if o == nil || o.Following == nil { - return 0 - } - return *o.Following -} - -// GetHooksURL returns the HooksURL field if it's non-nil, zero value otherwise. -func (o *Organization) GetHooksURL() string { - if o == nil || o.HooksURL == nil { - return "" - } - return *o.HooksURL -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (o *Organization) GetHTMLURL() string { - if o == nil || o.HTMLURL == nil { - return "" - } - return *o.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (o *Organization) GetID() int64 { - if o == nil || o.ID == nil { - return 0 - } - return *o.ID -} - -// GetIssuesURL returns the IssuesURL field if it's non-nil, zero value otherwise. -func (o *Organization) GetIssuesURL() string { - if o == nil || o.IssuesURL == nil { - return "" - } - return *o.IssuesURL -} - -// GetLocation returns the Location field if it's non-nil, zero value otherwise. -func (o *Organization) GetLocation() string { - if o == nil || o.Location == nil { - return "" - } - return *o.Location -} - -// GetLogin returns the Login field if it's non-nil, zero value otherwise. -func (o *Organization) GetLogin() string { - if o == nil || o.Login == nil { - return "" - } - return *o.Login -} - -// GetMembersURL returns the MembersURL field if it's non-nil, zero value otherwise. -func (o *Organization) GetMembersURL() string { - if o == nil || o.MembersURL == nil { - return "" - } - return *o.MembersURL -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (o *Organization) GetName() string { - if o == nil || o.Name == nil { - return "" - } - return *o.Name -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (o *Organization) GetNodeID() string { - if o == nil || o.NodeID == nil { - return "" - } - return *o.NodeID -} - -// GetOwnedPrivateRepos returns the OwnedPrivateRepos field if it's non-nil, zero value otherwise. -func (o *Organization) GetOwnedPrivateRepos() int { - if o == nil || o.OwnedPrivateRepos == nil { - return 0 - } - return *o.OwnedPrivateRepos -} - -// GetPlan returns the Plan field. -func (o *Organization) GetPlan() *Plan { - if o == nil { - return nil - } - return o.Plan -} - -// GetPrivateGists returns the PrivateGists field if it's non-nil, zero value otherwise. -func (o *Organization) GetPrivateGists() int { - if o == nil || o.PrivateGists == nil { - return 0 - } - return *o.PrivateGists -} - -// GetPublicGists returns the PublicGists field if it's non-nil, zero value otherwise. -func (o *Organization) GetPublicGists() int { - if o == nil || o.PublicGists == nil { - return 0 - } - return *o.PublicGists -} - -// GetPublicMembersURL returns the PublicMembersURL field if it's non-nil, zero value otherwise. -func (o *Organization) GetPublicMembersURL() string { - if o == nil || o.PublicMembersURL == nil { - return "" - } - return *o.PublicMembersURL -} - -// GetPublicRepos returns the PublicRepos field if it's non-nil, zero value otherwise. -func (o *Organization) GetPublicRepos() int { - if o == nil || o.PublicRepos == nil { - return 0 - } - return *o.PublicRepos -} - -// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise. -func (o *Organization) GetReposURL() string { - if o == nil || o.ReposURL == nil { - return "" - } - return *o.ReposURL -} - -// GetTotalPrivateRepos returns the TotalPrivateRepos field if it's non-nil, zero value otherwise. -func (o *Organization) GetTotalPrivateRepos() int { - if o == nil || o.TotalPrivateRepos == nil { - return 0 - } - return *o.TotalPrivateRepos -} - -// GetType returns the Type field if it's non-nil, zero value otherwise. -func (o *Organization) GetType() string { - if o == nil || o.Type == nil { - return "" - } - return *o.Type -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (o *Organization) GetUpdatedAt() time.Time { - if o == nil || o.UpdatedAt == nil { - return time.Time{} - } - return *o.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (o *Organization) GetURL() string { - if o == nil || o.URL == nil { - return "" - } - return *o.URL -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (o *OrganizationEvent) GetAction() string { - if o == nil || o.Action == nil { - return "" - } - return *o.Action -} - -// GetInstallation returns the Installation field. -func (o *OrganizationEvent) GetInstallation() *Installation { - if o == nil { - return nil - } - return o.Installation -} - -// GetInvitation returns the Invitation field. -func (o *OrganizationEvent) GetInvitation() *Invitation { - if o == nil { - return nil - } - return o.Invitation -} - -// GetMembership returns the Membership field. -func (o *OrganizationEvent) GetMembership() *Membership { - if o == nil { - return nil - } - return o.Membership -} - -// GetOrganization returns the Organization field. -func (o *OrganizationEvent) GetOrganization() *Organization { - if o == nil { - return nil - } - return o.Organization -} - -// GetSender returns the Sender field. -func (o *OrganizationEvent) GetSender() *User { - if o == nil { - return nil - } - return o.Sender -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (o *OrgBlockEvent) GetAction() string { - if o == nil || o.Action == nil { - return "" - } - return *o.Action -} - -// GetBlockedUser returns the BlockedUser field. -func (o *OrgBlockEvent) GetBlockedUser() *User { - if o == nil { - return nil - } - return o.BlockedUser -} - -// GetInstallation returns the Installation field. -func (o *OrgBlockEvent) GetInstallation() *Installation { - if o == nil { - return nil - } - return o.Installation -} - -// GetOrganization returns the Organization field. -func (o *OrgBlockEvent) GetOrganization() *Organization { - if o == nil { - return nil - } - return o.Organization -} - -// GetSender returns the Sender field. -func (o *OrgBlockEvent) GetSender() *User { - if o == nil { - return nil - } - return o.Sender -} - -// GetDisabledOrgs returns the DisabledOrgs field if it's non-nil, zero value otherwise. -func (o *OrgStats) GetDisabledOrgs() int { - if o == nil || o.DisabledOrgs == nil { - return 0 - } - return *o.DisabledOrgs -} - -// GetTotalOrgs returns the TotalOrgs field if it's non-nil, zero value otherwise. -func (o *OrgStats) GetTotalOrgs() int { - if o == nil || o.TotalOrgs == nil { - return 0 - } - return *o.TotalOrgs -} - -// GetTotalTeamMembers returns the TotalTeamMembers field if it's non-nil, zero value otherwise. -func (o *OrgStats) GetTotalTeamMembers() int { - if o == nil || o.TotalTeamMembers == nil { - return 0 - } - return *o.TotalTeamMembers -} - -// GetTotalTeams returns the TotalTeams field if it's non-nil, zero value otherwise. -func (o *OrgStats) GetTotalTeams() int { - if o == nil || o.TotalTeams == nil { - return 0 - } - return *o.TotalTeams -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (p *Page) GetAction() string { - if p == nil || p.Action == nil { - return "" - } - return *p.Action -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (p *Page) GetHTMLURL() string { - if p == nil || p.HTMLURL == nil { - return "" - } - return *p.HTMLURL -} - -// GetPageName returns the PageName field if it's non-nil, zero value otherwise. -func (p *Page) GetPageName() string { - if p == nil || p.PageName == nil { - return "" - } - return *p.PageName -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (p *Page) GetSHA() string { - if p == nil || p.SHA == nil { - return "" - } - return *p.SHA -} - -// GetSummary returns the Summary field if it's non-nil, zero value otherwise. -func (p *Page) GetSummary() string { - if p == nil || p.Summary == nil { - return "" - } - return *p.Summary -} - -// GetTitle returns the Title field if it's non-nil, zero value otherwise. -func (p *Page) GetTitle() string { - if p == nil || p.Title == nil { - return "" - } - return *p.Title -} - -// GetBuild returns the Build field. -func (p *PageBuildEvent) GetBuild() *PagesBuild { - if p == nil { - return nil - } - return p.Build -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (p *PageBuildEvent) GetID() int64 { - if p == nil || p.ID == nil { - return 0 - } - return *p.ID -} - -// GetInstallation returns the Installation field. -func (p *PageBuildEvent) GetInstallation() *Installation { - if p == nil { - return nil - } - return p.Installation -} - -// GetRepo returns the Repo field. -func (p *PageBuildEvent) GetRepo() *Repository { - if p == nil { - return nil - } - return p.Repo -} - -// GetSender returns the Sender field. -func (p *PageBuildEvent) GetSender() *User { - if p == nil { - return nil - } - return p.Sender -} - -// GetCNAME returns the CNAME field if it's non-nil, zero value otherwise. -func (p *Pages) GetCNAME() string { - if p == nil || p.CNAME == nil { - return "" - } - return *p.CNAME -} - -// GetCustom404 returns the Custom404 field if it's non-nil, zero value otherwise. -func (p *Pages) GetCustom404() bool { - if p == nil || p.Custom404 == nil { - return false - } - return *p.Custom404 -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (p *Pages) GetHTMLURL() string { - if p == nil || p.HTMLURL == nil { - return "" - } - return *p.HTMLURL -} - -// GetStatus returns the Status field if it's non-nil, zero value otherwise. -func (p *Pages) GetStatus() string { - if p == nil || p.Status == nil { - return "" - } - return *p.Status -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (p *Pages) GetURL() string { - if p == nil || p.URL == nil { - return "" - } - return *p.URL -} - -// GetCommit returns the Commit field if it's non-nil, zero value otherwise. -func (p *PagesBuild) GetCommit() string { - if p == nil || p.Commit == nil { - return "" - } - return *p.Commit -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (p *PagesBuild) GetCreatedAt() Timestamp { - if p == nil || p.CreatedAt == nil { - return Timestamp{} - } - return *p.CreatedAt -} - -// GetDuration returns the Duration field if it's non-nil, zero value otherwise. -func (p *PagesBuild) GetDuration() int { - if p == nil || p.Duration == nil { - return 0 - } - return *p.Duration -} - -// GetError returns the Error field. -func (p *PagesBuild) GetError() *PagesError { - if p == nil { - return nil - } - return p.Error -} - -// GetPusher returns the Pusher field. -func (p *PagesBuild) GetPusher() *User { - if p == nil { - return nil - } - return p.Pusher -} - -// GetStatus returns the Status field if it's non-nil, zero value otherwise. -func (p *PagesBuild) GetStatus() string { - if p == nil || p.Status == nil { - return "" - } - return *p.Status -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (p *PagesBuild) GetUpdatedAt() Timestamp { - if p == nil || p.UpdatedAt == nil { - return Timestamp{} - } - return *p.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (p *PagesBuild) GetURL() string { - if p == nil || p.URL == nil { - return "" - } - return *p.URL -} - -// GetMessage returns the Message field if it's non-nil, zero value otherwise. -func (p *PagesError) GetMessage() string { - if p == nil || p.Message == nil { - return "" - } - return *p.Message -} - -// GetTotalPages returns the TotalPages field if it's non-nil, zero value otherwise. -func (p *PageStats) GetTotalPages() int { - if p == nil || p.TotalPages == nil { - return 0 - } - return *p.TotalPages -} - -// GetHook returns the Hook field. -func (p *PingEvent) GetHook() *Hook { - if p == nil { - return nil - } - return p.Hook -} - -// GetHookID returns the HookID field if it's non-nil, zero value otherwise. -func (p *PingEvent) GetHookID() int64 { - if p == nil || p.HookID == nil { - return 0 - } - return *p.HookID -} - -// GetInstallation returns the Installation field. -func (p *PingEvent) GetInstallation() *Installation { - if p == nil { - return nil - } - return p.Installation -} - -// GetZen returns the Zen field if it's non-nil, zero value otherwise. -func (p *PingEvent) GetZen() string { - if p == nil || p.Zen == nil { - return "" - } - return *p.Zen -} - -// GetCollaborators returns the Collaborators field if it's non-nil, zero value otherwise. -func (p *Plan) GetCollaborators() int { - if p == nil || p.Collaborators == nil { - return 0 - } - return *p.Collaborators -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (p *Plan) GetName() string { - if p == nil || p.Name == nil { - return "" - } - return *p.Name -} - -// GetPrivateRepos returns the PrivateRepos field if it's non-nil, zero value otherwise. -func (p *Plan) GetPrivateRepos() int { - if p == nil || p.PrivateRepos == nil { - return 0 - } - return *p.PrivateRepos -} - -// GetSpace returns the Space field if it's non-nil, zero value otherwise. -func (p *Plan) GetSpace() int { - if p == nil || p.Space == nil { - return 0 - } - return *p.Space -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (p *Project) GetBody() string { - if p == nil || p.Body == nil { - return "" - } - return *p.Body -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (p *Project) GetCreatedAt() Timestamp { - if p == nil || p.CreatedAt == nil { - return Timestamp{} - } - return *p.CreatedAt -} - -// GetCreator returns the Creator field. -func (p *Project) GetCreator() *User { - if p == nil { - return nil - } - return p.Creator -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (p *Project) GetID() int64 { - if p == nil || p.ID == nil { - return 0 - } - return *p.ID -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (p *Project) GetName() string { - if p == nil || p.Name == nil { - return "" - } - return *p.Name -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (p *Project) GetNodeID() string { - if p == nil || p.NodeID == nil { - return "" - } - return *p.NodeID -} - -// GetNumber returns the Number field if it's non-nil, zero value otherwise. -func (p *Project) GetNumber() int { - if p == nil || p.Number == nil { - return 0 - } - return *p.Number -} - -// GetOwnerURL returns the OwnerURL field if it's non-nil, zero value otherwise. -func (p *Project) GetOwnerURL() string { - if p == nil || p.OwnerURL == nil { - return "" - } - return *p.OwnerURL -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (p *Project) GetUpdatedAt() Timestamp { - if p == nil || p.UpdatedAt == nil { - return Timestamp{} - } - return *p.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (p *Project) GetURL() string { - if p == nil || p.URL == nil { - return "" - } - return *p.URL -} - -// GetColumnID returns the ColumnID field if it's non-nil, zero value otherwise. -func (p *ProjectCard) GetColumnID() int64 { - if p == nil || p.ColumnID == nil { - return 0 - } - return *p.ColumnID -} - -// GetColumnURL returns the ColumnURL field if it's non-nil, zero value otherwise. -func (p *ProjectCard) GetColumnURL() string { - if p == nil || p.ColumnURL == nil { - return "" - } - return *p.ColumnURL -} - -// GetContentURL returns the ContentURL field if it's non-nil, zero value otherwise. -func (p *ProjectCard) GetContentURL() string { - if p == nil || p.ContentURL == nil { - return "" - } - return *p.ContentURL -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (p *ProjectCard) GetCreatedAt() Timestamp { - if p == nil || p.CreatedAt == nil { - return Timestamp{} - } - return *p.CreatedAt -} - -// GetCreator returns the Creator field. -func (p *ProjectCard) GetCreator() *User { - if p == nil { - return nil - } - return p.Creator -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (p *ProjectCard) GetID() int64 { - if p == nil || p.ID == nil { - return 0 - } - return *p.ID -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (p *ProjectCard) GetNodeID() string { - if p == nil || p.NodeID == nil { - return "" - } - return *p.NodeID -} - -// GetNote returns the Note field if it's non-nil, zero value otherwise. -func (p *ProjectCard) GetNote() string { - if p == nil || p.Note == nil { - return "" - } - return *p.Note -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (p *ProjectCard) GetUpdatedAt() Timestamp { - if p == nil || p.UpdatedAt == nil { - return Timestamp{} - } - return *p.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (p *ProjectCard) GetURL() string { - if p == nil || p.URL == nil { - return "" - } - return *p.URL -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (p *ProjectCardEvent) GetAction() string { - if p == nil || p.Action == nil { - return "" - } - return *p.Action -} - -// GetAfterID returns the AfterID field if it's non-nil, zero value otherwise. -func (p *ProjectCardEvent) GetAfterID() int64 { - if p == nil || p.AfterID == nil { - return 0 - } - return *p.AfterID -} - -// GetChanges returns the Changes field. -func (p *ProjectCardEvent) GetChanges() *ProjectCardChange { - if p == nil { - return nil - } - return p.Changes -} - -// GetInstallation returns the Installation field. -func (p *ProjectCardEvent) GetInstallation() *Installation { - if p == nil { - return nil - } - return p.Installation -} - -// GetOrg returns the Org field. -func (p *ProjectCardEvent) GetOrg() *Organization { - if p == nil { - return nil - } - return p.Org -} - -// GetProjectCard returns the ProjectCard field. -func (p *ProjectCardEvent) GetProjectCard() *ProjectCard { - if p == nil { - return nil - } - return p.ProjectCard -} - -// GetRepo returns the Repo field. -func (p *ProjectCardEvent) GetRepo() *Repository { - if p == nil { - return nil - } - return p.Repo -} - -// GetSender returns the Sender field. -func (p *ProjectCardEvent) GetSender() *User { - if p == nil { - return nil - } - return p.Sender -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (p *ProjectColumn) GetCreatedAt() Timestamp { - if p == nil || p.CreatedAt == nil { - return Timestamp{} - } - return *p.CreatedAt -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (p *ProjectColumn) GetID() int64 { - if p == nil || p.ID == nil { - return 0 - } - return *p.ID -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (p *ProjectColumn) GetName() string { - if p == nil || p.Name == nil { - return "" - } - return *p.Name -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (p *ProjectColumn) GetNodeID() string { - if p == nil || p.NodeID == nil { - return "" - } - return *p.NodeID -} - -// GetProjectURL returns the ProjectURL field if it's non-nil, zero value otherwise. -func (p *ProjectColumn) GetProjectURL() string { - if p == nil || p.ProjectURL == nil { - return "" - } - return *p.ProjectURL -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (p *ProjectColumn) GetUpdatedAt() Timestamp { - if p == nil || p.UpdatedAt == nil { - return Timestamp{} - } - return *p.UpdatedAt -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (p *ProjectColumnEvent) GetAction() string { - if p == nil || p.Action == nil { - return "" - } - return *p.Action -} - -// GetAfterID returns the AfterID field if it's non-nil, zero value otherwise. -func (p *ProjectColumnEvent) GetAfterID() int64 { - if p == nil || p.AfterID == nil { - return 0 - } - return *p.AfterID -} - -// GetChanges returns the Changes field. -func (p *ProjectColumnEvent) GetChanges() *ProjectColumnChange { - if p == nil { - return nil - } - return p.Changes -} - -// GetInstallation returns the Installation field. -func (p *ProjectColumnEvent) GetInstallation() *Installation { - if p == nil { - return nil - } - return p.Installation -} - -// GetOrg returns the Org field. -func (p *ProjectColumnEvent) GetOrg() *Organization { - if p == nil { - return nil - } - return p.Org -} - -// GetProjectColumn returns the ProjectColumn field. -func (p *ProjectColumnEvent) GetProjectColumn() *ProjectColumn { - if p == nil { - return nil - } - return p.ProjectColumn -} - -// GetRepo returns the Repo field. -func (p *ProjectColumnEvent) GetRepo() *Repository { - if p == nil { - return nil - } - return p.Repo -} - -// GetSender returns the Sender field. -func (p *ProjectColumnEvent) GetSender() *User { - if p == nil { - return nil - } - return p.Sender -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (p *ProjectEvent) GetAction() string { - if p == nil || p.Action == nil { - return "" - } - return *p.Action -} - -// GetChanges returns the Changes field. -func (p *ProjectEvent) GetChanges() *ProjectChange { - if p == nil { - return nil - } - return p.Changes -} - -// GetInstallation returns the Installation field. -func (p *ProjectEvent) GetInstallation() *Installation { - if p == nil { - return nil - } - return p.Installation -} - -// GetOrg returns the Org field. -func (p *ProjectEvent) GetOrg() *Organization { - if p == nil { - return nil - } - return p.Org -} - -// GetProject returns the Project field. -func (p *ProjectEvent) GetProject() *Project { - if p == nil { - return nil - } - return p.Project -} - -// GetRepo returns the Repo field. -func (p *ProjectEvent) GetRepo() *Repository { - if p == nil { - return nil - } - return p.Repo -} - -// GetSender returns the Sender field. -func (p *ProjectEvent) GetSender() *User { - if p == nil { - return nil - } - return p.Sender -} - -// GetEnforceAdmins returns the EnforceAdmins field. -func (p *Protection) GetEnforceAdmins() *AdminEnforcement { - if p == nil { - return nil - } - return p.EnforceAdmins -} - -// GetRequiredPullRequestReviews returns the RequiredPullRequestReviews field. -func (p *Protection) GetRequiredPullRequestReviews() *PullRequestReviewsEnforcement { - if p == nil { - return nil - } - return p.RequiredPullRequestReviews -} - -// GetRequiredStatusChecks returns the RequiredStatusChecks field. -func (p *Protection) GetRequiredStatusChecks() *RequiredStatusChecks { - if p == nil { - return nil - } - return p.RequiredStatusChecks -} - -// GetRestrictions returns the Restrictions field. -func (p *Protection) GetRestrictions() *BranchRestrictions { - if p == nil { - return nil - } - return p.Restrictions -} - -// GetRequiredPullRequestReviews returns the RequiredPullRequestReviews field. -func (p *ProtectionRequest) GetRequiredPullRequestReviews() *PullRequestReviewsEnforcementRequest { - if p == nil { - return nil - } - return p.RequiredPullRequestReviews -} - -// GetRequiredStatusChecks returns the RequiredStatusChecks field. -func (p *ProtectionRequest) GetRequiredStatusChecks() *RequiredStatusChecks { - if p == nil { - return nil - } - return p.RequiredStatusChecks -} - -// GetRestrictions returns the Restrictions field. -func (p *ProtectionRequest) GetRestrictions() *BranchRestrictionsRequest { - if p == nil { - return nil - } - return p.Restrictions -} - -// GetInstallation returns the Installation field. -func (p *PublicEvent) GetInstallation() *Installation { - if p == nil { - return nil - } - return p.Installation -} - -// GetRepo returns the Repo field. -func (p *PublicEvent) GetRepo() *Repository { - if p == nil { - return nil - } - return p.Repo -} - -// GetSender returns the Sender field. -func (p *PublicEvent) GetSender() *User { - if p == nil { - return nil - } - return p.Sender -} - -// GetAdditions returns the Additions field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetAdditions() int { - if p == nil || p.Additions == nil { - return 0 - } - return *p.Additions -} - -// GetAssignee returns the Assignee field. -func (p *PullRequest) GetAssignee() *User { - if p == nil { - return nil - } - return p.Assignee -} - -// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetAuthorAssociation() string { - if p == nil || p.AuthorAssociation == nil { - return "" - } - return *p.AuthorAssociation -} - -// GetBase returns the Base field. -func (p *PullRequest) GetBase() *PullRequestBranch { - if p == nil { - return nil - } - return p.Base -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetBody() string { - if p == nil || p.Body == nil { - return "" - } - return *p.Body -} - -// GetChangedFiles returns the ChangedFiles field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetChangedFiles() int { - if p == nil || p.ChangedFiles == nil { - return 0 - } - return *p.ChangedFiles -} - -// GetClosedAt returns the ClosedAt field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetClosedAt() time.Time { - if p == nil || p.ClosedAt == nil { - return time.Time{} - } - return *p.ClosedAt -} - -// GetComments returns the Comments field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetComments() int { - if p == nil || p.Comments == nil { - return 0 - } - return *p.Comments -} - -// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetCommentsURL() string { - if p == nil || p.CommentsURL == nil { - return "" - } - return *p.CommentsURL -} - -// GetCommits returns the Commits field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetCommits() int { - if p == nil || p.Commits == nil { - return 0 - } - return *p.Commits -} - -// GetCommitsURL returns the CommitsURL field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetCommitsURL() string { - if p == nil || p.CommitsURL == nil { - return "" - } - return *p.CommitsURL -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetCreatedAt() time.Time { - if p == nil || p.CreatedAt == nil { - return time.Time{} - } - return *p.CreatedAt -} - -// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetDeletions() int { - if p == nil || p.Deletions == nil { - return 0 - } - return *p.Deletions -} - -// GetDiffURL returns the DiffURL field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetDiffURL() string { - if p == nil || p.DiffURL == nil { - return "" - } - return *p.DiffURL -} - -// GetHead returns the Head field. -func (p *PullRequest) GetHead() *PullRequestBranch { - if p == nil { - return nil - } - return p.Head -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetHTMLURL() string { - if p == nil || p.HTMLURL == nil { - return "" - } - return *p.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetID() int64 { - if p == nil || p.ID == nil { - return 0 - } - return *p.ID -} - -// GetIssueURL returns the IssueURL field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetIssueURL() string { - if p == nil || p.IssueURL == nil { - return "" - } - return *p.IssueURL -} - -// GetMaintainerCanModify returns the MaintainerCanModify field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetMaintainerCanModify() bool { - if p == nil || p.MaintainerCanModify == nil { - return false - } - return *p.MaintainerCanModify -} - -// GetMergeable returns the Mergeable field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetMergeable() bool { - if p == nil || p.Mergeable == nil { - return false - } - return *p.Mergeable -} - -// GetMergeableState returns the MergeableState field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetMergeableState() string { - if p == nil || p.MergeableState == nil { - return "" - } - return *p.MergeableState -} - -// GetMergeCommitSHA returns the MergeCommitSHA field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetMergeCommitSHA() string { - if p == nil || p.MergeCommitSHA == nil { - return "" - } - return *p.MergeCommitSHA -} - -// GetMerged returns the Merged field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetMerged() bool { - if p == nil || p.Merged == nil { - return false - } - return *p.Merged -} - -// GetMergedAt returns the MergedAt field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetMergedAt() time.Time { - if p == nil || p.MergedAt == nil { - return time.Time{} - } - return *p.MergedAt -} - -// GetMergedBy returns the MergedBy field. -func (p *PullRequest) GetMergedBy() *User { - if p == nil { - return nil - } - return p.MergedBy -} - -// GetMilestone returns the Milestone field. -func (p *PullRequest) GetMilestone() *Milestone { - if p == nil { - return nil - } - return p.Milestone -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetNodeID() string { - if p == nil || p.NodeID == nil { - return "" - } - return *p.NodeID -} - -// GetNumber returns the Number field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetNumber() int { - if p == nil || p.Number == nil { - return 0 - } - return *p.Number -} - -// GetPatchURL returns the PatchURL field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetPatchURL() string { - if p == nil || p.PatchURL == nil { - return "" - } - return *p.PatchURL -} - -// GetReviewCommentsURL returns the ReviewCommentsURL field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetReviewCommentsURL() string { - if p == nil || p.ReviewCommentsURL == nil { - return "" - } - return *p.ReviewCommentsURL -} - -// GetReviewCommentURL returns the ReviewCommentURL field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetReviewCommentURL() string { - if p == nil || p.ReviewCommentURL == nil { - return "" - } - return *p.ReviewCommentURL -} - -// GetState returns the State field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetState() string { - if p == nil || p.State == nil { - return "" - } - return *p.State -} - -// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetStatusesURL() string { - if p == nil || p.StatusesURL == nil { - return "" - } - return *p.StatusesURL -} - -// GetTitle returns the Title field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetTitle() string { - if p == nil || p.Title == nil { - return "" - } - return *p.Title -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetUpdatedAt() time.Time { - if p == nil || p.UpdatedAt == nil { - return time.Time{} - } - return *p.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (p *PullRequest) GetURL() string { - if p == nil || p.URL == nil { - return "" - } - return *p.URL -} - -// GetUser returns the User field. -func (p *PullRequest) GetUser() *User { - if p == nil { - return nil - } - return p.User -} - -// GetLabel returns the Label field if it's non-nil, zero value otherwise. -func (p *PullRequestBranch) GetLabel() string { - if p == nil || p.Label == nil { - return "" - } - return *p.Label -} - -// GetRef returns the Ref field if it's non-nil, zero value otherwise. -func (p *PullRequestBranch) GetRef() string { - if p == nil || p.Ref == nil { - return "" - } - return *p.Ref -} - -// GetRepo returns the Repo field. -func (p *PullRequestBranch) GetRepo() *Repository { - if p == nil { - return nil - } - return p.Repo -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (p *PullRequestBranch) GetSHA() string { - if p == nil || p.SHA == nil { - return "" - } - return *p.SHA -} - -// GetUser returns the User field. -func (p *PullRequestBranch) GetUser() *User { - if p == nil { - return nil - } - return p.User -} - -// GetAuthorAssociation returns the AuthorAssociation field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetAuthorAssociation() string { - if p == nil || p.AuthorAssociation == nil { - return "" - } - return *p.AuthorAssociation -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetBody() string { - if p == nil || p.Body == nil { - return "" - } - return *p.Body -} - -// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetCommitID() string { - if p == nil || p.CommitID == nil { - return "" - } - return *p.CommitID -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetCreatedAt() time.Time { - if p == nil || p.CreatedAt == nil { - return time.Time{} - } - return *p.CreatedAt -} - -// GetDiffHunk returns the DiffHunk field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetDiffHunk() string { - if p == nil || p.DiffHunk == nil { - return "" - } - return *p.DiffHunk -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetHTMLURL() string { - if p == nil || p.HTMLURL == nil { - return "" - } - return *p.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetID() int64 { - if p == nil || p.ID == nil { - return 0 - } - return *p.ID -} - -// GetInReplyTo returns the InReplyTo field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetInReplyTo() int64 { - if p == nil || p.InReplyTo == nil { - return 0 - } - return *p.InReplyTo -} - -// GetOriginalCommitID returns the OriginalCommitID field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetOriginalCommitID() string { - if p == nil || p.OriginalCommitID == nil { - return "" - } - return *p.OriginalCommitID -} - -// GetOriginalPosition returns the OriginalPosition field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetOriginalPosition() int { - if p == nil || p.OriginalPosition == nil { - return 0 - } - return *p.OriginalPosition -} - -// GetPath returns the Path field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetPath() string { - if p == nil || p.Path == nil { - return "" - } - return *p.Path -} - -// GetPosition returns the Position field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetPosition() int { - if p == nil || p.Position == nil { - return 0 - } - return *p.Position -} - -// GetPullRequestReviewID returns the PullRequestReviewID field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetPullRequestReviewID() int64 { - if p == nil || p.PullRequestReviewID == nil { - return 0 - } - return *p.PullRequestReviewID -} - -// GetPullRequestURL returns the PullRequestURL field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetPullRequestURL() string { - if p == nil || p.PullRequestURL == nil { - return "" - } - return *p.PullRequestURL -} - -// GetReactions returns the Reactions field. -func (p *PullRequestComment) GetReactions() *Reactions { - if p == nil { - return nil - } - return p.Reactions -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetUpdatedAt() time.Time { - if p == nil || p.UpdatedAt == nil { - return time.Time{} - } - return *p.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (p *PullRequestComment) GetURL() string { - if p == nil || p.URL == nil { - return "" - } - return *p.URL -} - -// GetUser returns the User field. -func (p *PullRequestComment) GetUser() *User { - if p == nil { - return nil - } - return p.User -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (p *PullRequestEvent) GetAction() string { - if p == nil || p.Action == nil { - return "" - } - return *p.Action -} - -// GetChanges returns the Changes field. -func (p *PullRequestEvent) GetChanges() *EditChange { - if p == nil { - return nil - } - return p.Changes -} - -// GetInstallation returns the Installation field. -func (p *PullRequestEvent) GetInstallation() *Installation { - if p == nil { - return nil - } - return p.Installation -} - -// GetLabel returns the Label field. -func (p *PullRequestEvent) GetLabel() *Label { - if p == nil { - return nil - } - return p.Label -} - -// GetNumber returns the Number field if it's non-nil, zero value otherwise. -func (p *PullRequestEvent) GetNumber() int { - if p == nil || p.Number == nil { - return 0 - } - return *p.Number -} - -// GetPullRequest returns the PullRequest field. -func (p *PullRequestEvent) GetPullRequest() *PullRequest { - if p == nil { - return nil - } - return p.PullRequest -} - -// GetRepo returns the Repo field. -func (p *PullRequestEvent) GetRepo() *Repository { - if p == nil { - return nil - } - return p.Repo -} - -// GetRequestedReviewer returns the RequestedReviewer field. -func (p *PullRequestEvent) GetRequestedReviewer() *User { - if p == nil { - return nil - } - return p.RequestedReviewer -} - -// GetSender returns the Sender field. -func (p *PullRequestEvent) GetSender() *User { - if p == nil { - return nil - } - return p.Sender -} - -// GetDiffURL returns the DiffURL field if it's non-nil, zero value otherwise. -func (p *PullRequestLinks) GetDiffURL() string { - if p == nil || p.DiffURL == nil { - return "" - } - return *p.DiffURL -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (p *PullRequestLinks) GetHTMLURL() string { - if p == nil || p.HTMLURL == nil { - return "" - } - return *p.HTMLURL -} - -// GetPatchURL returns the PatchURL field if it's non-nil, zero value otherwise. -func (p *PullRequestLinks) GetPatchURL() string { - if p == nil || p.PatchURL == nil { - return "" - } - return *p.PatchURL -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (p *PullRequestLinks) GetURL() string { - if p == nil || p.URL == nil { - return "" - } - return *p.URL -} - -// GetMerged returns the Merged field if it's non-nil, zero value otherwise. -func (p *PullRequestMergeResult) GetMerged() bool { - if p == nil || p.Merged == nil { - return false - } - return *p.Merged -} - -// GetMessage returns the Message field if it's non-nil, zero value otherwise. -func (p *PullRequestMergeResult) GetMessage() string { - if p == nil || p.Message == nil { - return "" - } - return *p.Message -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (p *PullRequestMergeResult) GetSHA() string { - if p == nil || p.SHA == nil { - return "" - } - return *p.SHA -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (p *PullRequestReview) GetBody() string { - if p == nil || p.Body == nil { - return "" - } - return *p.Body -} - -// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise. -func (p *PullRequestReview) GetCommitID() string { - if p == nil || p.CommitID == nil { - return "" - } - return *p.CommitID -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (p *PullRequestReview) GetHTMLURL() string { - if p == nil || p.HTMLURL == nil { - return "" - } - return *p.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (p *PullRequestReview) GetID() int64 { - if p == nil || p.ID == nil { - return 0 - } - return *p.ID -} - -// GetPullRequestURL returns the PullRequestURL field if it's non-nil, zero value otherwise. -func (p *PullRequestReview) GetPullRequestURL() string { - if p == nil || p.PullRequestURL == nil { - return "" - } - return *p.PullRequestURL -} - -// GetState returns the State field if it's non-nil, zero value otherwise. -func (p *PullRequestReview) GetState() string { - if p == nil || p.State == nil { - return "" - } - return *p.State -} - -// GetSubmittedAt returns the SubmittedAt field if it's non-nil, zero value otherwise. -func (p *PullRequestReview) GetSubmittedAt() time.Time { - if p == nil || p.SubmittedAt == nil { - return time.Time{} - } - return *p.SubmittedAt -} - -// GetUser returns the User field. -func (p *PullRequestReview) GetUser() *User { - if p == nil { - return nil - } - return p.User -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (p *PullRequestReviewCommentEvent) GetAction() string { - if p == nil || p.Action == nil { - return "" - } - return *p.Action -} - -// GetChanges returns the Changes field. -func (p *PullRequestReviewCommentEvent) GetChanges() *EditChange { - if p == nil { - return nil - } - return p.Changes -} - -// GetComment returns the Comment field. -func (p *PullRequestReviewCommentEvent) GetComment() *PullRequestComment { - if p == nil { - return nil - } - return p.Comment -} - -// GetInstallation returns the Installation field. -func (p *PullRequestReviewCommentEvent) GetInstallation() *Installation { - if p == nil { - return nil - } - return p.Installation -} - -// GetPullRequest returns the PullRequest field. -func (p *PullRequestReviewCommentEvent) GetPullRequest() *PullRequest { - if p == nil { - return nil - } - return p.PullRequest -} - -// GetRepo returns the Repo field. -func (p *PullRequestReviewCommentEvent) GetRepo() *Repository { - if p == nil { - return nil - } - return p.Repo -} - -// GetSender returns the Sender field. -func (p *PullRequestReviewCommentEvent) GetSender() *User { - if p == nil { - return nil - } - return p.Sender -} - -// GetMessage returns the Message field if it's non-nil, zero value otherwise. -func (p *PullRequestReviewDismissalRequest) GetMessage() string { - if p == nil || p.Message == nil { - return "" - } - return *p.Message -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (p *PullRequestReviewEvent) GetAction() string { - if p == nil || p.Action == nil { - return "" - } - return *p.Action -} - -// GetInstallation returns the Installation field. -func (p *PullRequestReviewEvent) GetInstallation() *Installation { - if p == nil { - return nil - } - return p.Installation -} - -// GetOrganization returns the Organization field. -func (p *PullRequestReviewEvent) GetOrganization() *Organization { - if p == nil { - return nil - } - return p.Organization -} - -// GetPullRequest returns the PullRequest field. -func (p *PullRequestReviewEvent) GetPullRequest() *PullRequest { - if p == nil { - return nil - } - return p.PullRequest -} - -// GetRepo returns the Repo field. -func (p *PullRequestReviewEvent) GetRepo() *Repository { - if p == nil { - return nil - } - return p.Repo -} - -// GetReview returns the Review field. -func (p *PullRequestReviewEvent) GetReview() *PullRequestReview { - if p == nil { - return nil - } - return p.Review -} - -// GetSender returns the Sender field. -func (p *PullRequestReviewEvent) GetSender() *User { - if p == nil { - return nil - } - return p.Sender -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (p *PullRequestReviewRequest) GetBody() string { - if p == nil || p.Body == nil { - return "" - } - return *p.Body -} - -// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise. -func (p *PullRequestReviewRequest) GetCommitID() string { - if p == nil || p.CommitID == nil { - return "" - } - return *p.CommitID -} - -// GetEvent returns the Event field if it's non-nil, zero value otherwise. -func (p *PullRequestReviewRequest) GetEvent() string { - if p == nil || p.Event == nil { - return "" - } - return *p.Event -} - -// GetDismissalRestrictionsRequest returns the DismissalRestrictionsRequest field. -func (p *PullRequestReviewsEnforcementRequest) GetDismissalRestrictionsRequest() *DismissalRestrictionsRequest { - if p == nil { - return nil - } - return p.DismissalRestrictionsRequest -} - -// GetDismissalRestrictionsRequest returns the DismissalRestrictionsRequest field. -func (p *PullRequestReviewsEnforcementUpdate) GetDismissalRestrictionsRequest() *DismissalRestrictionsRequest { - if p == nil { - return nil - } - return p.DismissalRestrictionsRequest -} - -// GetDismissStaleReviews returns the DismissStaleReviews field if it's non-nil, zero value otherwise. -func (p *PullRequestReviewsEnforcementUpdate) GetDismissStaleReviews() bool { - if p == nil || p.DismissStaleReviews == nil { - return false - } - return *p.DismissStaleReviews -} - -// GetMergablePulls returns the MergablePulls field if it's non-nil, zero value otherwise. -func (p *PullStats) GetMergablePulls() int { - if p == nil || p.MergablePulls == nil { - return 0 - } - return *p.MergablePulls -} - -// GetMergedPulls returns the MergedPulls field if it's non-nil, zero value otherwise. -func (p *PullStats) GetMergedPulls() int { - if p == nil || p.MergedPulls == nil { - return 0 - } - return *p.MergedPulls -} - -// GetTotalPulls returns the TotalPulls field if it's non-nil, zero value otherwise. -func (p *PullStats) GetTotalPulls() int { - if p == nil || p.TotalPulls == nil { - return 0 - } - return *p.TotalPulls -} - -// GetUnmergablePulls returns the UnmergablePulls field if it's non-nil, zero value otherwise. -func (p *PullStats) GetUnmergablePulls() int { - if p == nil || p.UnmergablePulls == nil { - return 0 - } - return *p.UnmergablePulls -} - -// GetCommits returns the Commits field if it's non-nil, zero value otherwise. -func (p *PunchCard) GetCommits() int { - if p == nil || p.Commits == nil { - return 0 - } - return *p.Commits -} - -// GetDay returns the Day field if it's non-nil, zero value otherwise. -func (p *PunchCard) GetDay() int { - if p == nil || p.Day == nil { - return 0 - } - return *p.Day -} - -// GetHour returns the Hour field if it's non-nil, zero value otherwise. -func (p *PunchCard) GetHour() int { - if p == nil || p.Hour == nil { - return 0 - } - return *p.Hour -} - -// GetAfter returns the After field if it's non-nil, zero value otherwise. -func (p *PushEvent) GetAfter() string { - if p == nil || p.After == nil { - return "" - } - return *p.After -} - -// GetBaseRef returns the BaseRef field if it's non-nil, zero value otherwise. -func (p *PushEvent) GetBaseRef() string { - if p == nil || p.BaseRef == nil { - return "" - } - return *p.BaseRef -} - -// GetBefore returns the Before field if it's non-nil, zero value otherwise. -func (p *PushEvent) GetBefore() string { - if p == nil || p.Before == nil { - return "" - } - return *p.Before -} - -// GetCompare returns the Compare field if it's non-nil, zero value otherwise. -func (p *PushEvent) GetCompare() string { - if p == nil || p.Compare == nil { - return "" - } - return *p.Compare -} - -// GetCreated returns the Created field if it's non-nil, zero value otherwise. -func (p *PushEvent) GetCreated() bool { - if p == nil || p.Created == nil { - return false - } - return *p.Created -} - -// GetDeleted returns the Deleted field if it's non-nil, zero value otherwise. -func (p *PushEvent) GetDeleted() bool { - if p == nil || p.Deleted == nil { - return false - } - return *p.Deleted -} - -// GetDistinctSize returns the DistinctSize field if it's non-nil, zero value otherwise. -func (p *PushEvent) GetDistinctSize() int { - if p == nil || p.DistinctSize == nil { - return 0 - } - return *p.DistinctSize -} - -// GetForced returns the Forced field if it's non-nil, zero value otherwise. -func (p *PushEvent) GetForced() bool { - if p == nil || p.Forced == nil { - return false - } - return *p.Forced -} - -// GetHead returns the Head field if it's non-nil, zero value otherwise. -func (p *PushEvent) GetHead() string { - if p == nil || p.Head == nil { - return "" - } - return *p.Head -} - -// GetHeadCommit returns the HeadCommit field. -func (p *PushEvent) GetHeadCommit() *PushEventCommit { - if p == nil { - return nil - } - return p.HeadCommit -} - -// GetInstallation returns the Installation field. -func (p *PushEvent) GetInstallation() *Installation { - if p == nil { - return nil - } - return p.Installation -} - -// GetPusher returns the Pusher field. -func (p *PushEvent) GetPusher() *User { - if p == nil { - return nil - } - return p.Pusher -} - -// GetPushID returns the PushID field if it's non-nil, zero value otherwise. -func (p *PushEvent) GetPushID() int64 { - if p == nil || p.PushID == nil { - return 0 - } - return *p.PushID -} - -// GetRef returns the Ref field if it's non-nil, zero value otherwise. -func (p *PushEvent) GetRef() string { - if p == nil || p.Ref == nil { - return "" - } - return *p.Ref -} - -// GetRepo returns the Repo field. -func (p *PushEvent) GetRepo() *PushEventRepository { - if p == nil { - return nil - } - return p.Repo -} - -// GetSender returns the Sender field. -func (p *PushEvent) GetSender() *User { - if p == nil { - return nil - } - return p.Sender -} - -// GetSize returns the Size field if it's non-nil, zero value otherwise. -func (p *PushEvent) GetSize() int { - if p == nil || p.Size == nil { - return 0 - } - return *p.Size -} - -// GetAuthor returns the Author field. -func (p *PushEventCommit) GetAuthor() *CommitAuthor { - if p == nil { - return nil - } - return p.Author -} - -// GetCommitter returns the Committer field. -func (p *PushEventCommit) GetCommitter() *CommitAuthor { - if p == nil { - return nil - } - return p.Committer -} - -// GetDistinct returns the Distinct field if it's non-nil, zero value otherwise. -func (p *PushEventCommit) GetDistinct() bool { - if p == nil || p.Distinct == nil { - return false - } - return *p.Distinct -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (p *PushEventCommit) GetID() string { - if p == nil || p.ID == nil { - return "" - } - return *p.ID -} - -// GetMessage returns the Message field if it's non-nil, zero value otherwise. -func (p *PushEventCommit) GetMessage() string { - if p == nil || p.Message == nil { - return "" - } - return *p.Message -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (p *PushEventCommit) GetSHA() string { - if p == nil || p.SHA == nil { - return "" - } - return *p.SHA -} - -// GetTimestamp returns the Timestamp field if it's non-nil, zero value otherwise. -func (p *PushEventCommit) GetTimestamp() Timestamp { - if p == nil || p.Timestamp == nil { - return Timestamp{} - } - return *p.Timestamp -} - -// GetTreeID returns the TreeID field if it's non-nil, zero value otherwise. -func (p *PushEventCommit) GetTreeID() string { - if p == nil || p.TreeID == nil { - return "" - } - return *p.TreeID -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (p *PushEventCommit) GetURL() string { - if p == nil || p.URL == nil { - return "" - } - return *p.URL -} - -// GetEmail returns the Email field if it's non-nil, zero value otherwise. -func (p *PushEventRepoOwner) GetEmail() string { - if p == nil || p.Email == nil { - return "" - } - return *p.Email -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (p *PushEventRepoOwner) GetName() string { - if p == nil || p.Name == nil { - return "" - } - return *p.Name -} - -// GetArchiveURL returns the ArchiveURL field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetArchiveURL() string { - if p == nil || p.ArchiveURL == nil { - return "" - } - return *p.ArchiveURL -} - -// GetCloneURL returns the CloneURL field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetCloneURL() string { - if p == nil || p.CloneURL == nil { - return "" - } - return *p.CloneURL -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetCreatedAt() Timestamp { - if p == nil || p.CreatedAt == nil { - return Timestamp{} - } - return *p.CreatedAt -} - -// GetDefaultBranch returns the DefaultBranch field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetDefaultBranch() string { - if p == nil || p.DefaultBranch == nil { - return "" - } - return *p.DefaultBranch -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetDescription() string { - if p == nil || p.Description == nil { - return "" - } - return *p.Description -} - -// GetFork returns the Fork field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetFork() bool { - if p == nil || p.Fork == nil { - return false - } - return *p.Fork -} - -// GetForksCount returns the ForksCount field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetForksCount() int { - if p == nil || p.ForksCount == nil { - return 0 - } - return *p.ForksCount -} - -// GetFullName returns the FullName field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetFullName() string { - if p == nil || p.FullName == nil { - return "" - } - return *p.FullName -} - -// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetGitURL() string { - if p == nil || p.GitURL == nil { - return "" - } - return *p.GitURL -} - -// GetHasDownloads returns the HasDownloads field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetHasDownloads() bool { - if p == nil || p.HasDownloads == nil { - return false - } - return *p.HasDownloads -} - -// GetHasIssues returns the HasIssues field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetHasIssues() bool { - if p == nil || p.HasIssues == nil { - return false - } - return *p.HasIssues -} - -// GetHasPages returns the HasPages field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetHasPages() bool { - if p == nil || p.HasPages == nil { - return false - } - return *p.HasPages -} - -// GetHasWiki returns the HasWiki field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetHasWiki() bool { - if p == nil || p.HasWiki == nil { - return false - } - return *p.HasWiki -} - -// GetHomepage returns the Homepage field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetHomepage() string { - if p == nil || p.Homepage == nil { - return "" - } - return *p.Homepage -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetHTMLURL() string { - if p == nil || p.HTMLURL == nil { - return "" - } - return *p.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetID() int64 { - if p == nil || p.ID == nil { - return 0 - } - return *p.ID -} - -// GetLanguage returns the Language field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetLanguage() string { - if p == nil || p.Language == nil { - return "" - } - return *p.Language -} - -// GetMasterBranch returns the MasterBranch field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetMasterBranch() string { - if p == nil || p.MasterBranch == nil { - return "" - } - return *p.MasterBranch -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetName() string { - if p == nil || p.Name == nil { - return "" - } - return *p.Name -} - -// GetOpenIssuesCount returns the OpenIssuesCount field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetOpenIssuesCount() int { - if p == nil || p.OpenIssuesCount == nil { - return 0 - } - return *p.OpenIssuesCount -} - -// GetOrganization returns the Organization field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetOrganization() string { - if p == nil || p.Organization == nil { - return "" - } - return *p.Organization -} - -// GetOwner returns the Owner field. -func (p *PushEventRepository) GetOwner() *PushEventRepoOwner { - if p == nil { - return nil - } - return p.Owner -} - -// GetPrivate returns the Private field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetPrivate() bool { - if p == nil || p.Private == nil { - return false - } - return *p.Private -} - -// GetPushedAt returns the PushedAt field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetPushedAt() Timestamp { - if p == nil || p.PushedAt == nil { - return Timestamp{} - } - return *p.PushedAt -} - -// GetSize returns the Size field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetSize() int { - if p == nil || p.Size == nil { - return 0 - } - return *p.Size -} - -// GetSSHURL returns the SSHURL field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetSSHURL() string { - if p == nil || p.SSHURL == nil { - return "" - } - return *p.SSHURL -} - -// GetStargazersCount returns the StargazersCount field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetStargazersCount() int { - if p == nil || p.StargazersCount == nil { - return 0 - } - return *p.StargazersCount -} - -// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetStatusesURL() string { - if p == nil || p.StatusesURL == nil { - return "" - } - return *p.StatusesURL -} - -// GetSVNURL returns the SVNURL field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetSVNURL() string { - if p == nil || p.SVNURL == nil { - return "" - } - return *p.SVNURL -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetUpdatedAt() Timestamp { - if p == nil || p.UpdatedAt == nil { - return Timestamp{} - } - return *p.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetURL() string { - if p == nil || p.URL == nil { - return "" - } - return *p.URL -} - -// GetWatchersCount returns the WatchersCount field if it's non-nil, zero value otherwise. -func (p *PushEventRepository) GetWatchersCount() int { - if p == nil || p.WatchersCount == nil { - return 0 - } - return *p.WatchersCount -} - -// GetCore returns the Core field. -func (r *RateLimits) GetCore() *Rate { - if r == nil { - return nil - } - return r.Core -} - -// GetSearch returns the Search field. -func (r *RateLimits) GetSearch() *Rate { - if r == nil { - return nil - } - return r.Search -} - -// GetContent returns the Content field if it's non-nil, zero value otherwise. -func (r *Reaction) GetContent() string { - if r == nil || r.Content == nil { - return "" - } - return *r.Content -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (r *Reaction) GetID() int64 { - if r == nil || r.ID == nil { - return 0 - } - return *r.ID -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (r *Reaction) GetNodeID() string { - if r == nil || r.NodeID == nil { - return "" - } - return *r.NodeID -} - -// GetUser returns the User field. -func (r *Reaction) GetUser() *User { - if r == nil { - return nil - } - return r.User -} - -// GetConfused returns the Confused field if it's non-nil, zero value otherwise. -func (r *Reactions) GetConfused() int { - if r == nil || r.Confused == nil { - return 0 - } - return *r.Confused -} - -// GetHeart returns the Heart field if it's non-nil, zero value otherwise. -func (r *Reactions) GetHeart() int { - if r == nil || r.Heart == nil { - return 0 - } - return *r.Heart -} - -// GetHooray returns the Hooray field if it's non-nil, zero value otherwise. -func (r *Reactions) GetHooray() int { - if r == nil || r.Hooray == nil { - return 0 - } - return *r.Hooray -} - -// GetLaugh returns the Laugh field if it's non-nil, zero value otherwise. -func (r *Reactions) GetLaugh() int { - if r == nil || r.Laugh == nil { - return 0 - } - return *r.Laugh -} - -// GetMinusOne returns the MinusOne field if it's non-nil, zero value otherwise. -func (r *Reactions) GetMinusOne() int { - if r == nil || r.MinusOne == nil { - return 0 - } - return *r.MinusOne -} - -// GetPlusOne returns the PlusOne field if it's non-nil, zero value otherwise. -func (r *Reactions) GetPlusOne() int { - if r == nil || r.PlusOne == nil { - return 0 - } - return *r.PlusOne -} - -// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise. -func (r *Reactions) GetTotalCount() int { - if r == nil || r.TotalCount == nil { - return 0 - } - return *r.TotalCount -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (r *Reactions) GetURL() string { - if r == nil || r.URL == nil { - return "" - } - return *r.URL -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (r *Reference) GetNodeID() string { - if r == nil || r.NodeID == nil { - return "" - } - return *r.NodeID -} - -// GetObject returns the Object field. -func (r *Reference) GetObject() *GitObject { - if r == nil { - return nil - } - return r.Object -} - -// GetRef returns the Ref field if it's non-nil, zero value otherwise. -func (r *Reference) GetRef() string { - if r == nil || r.Ref == nil { - return "" - } - return *r.Ref -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (r *Reference) GetURL() string { - if r == nil || r.URL == nil { - return "" - } - return *r.URL -} - -// GetBrowserDownloadURL returns the BrowserDownloadURL field if it's non-nil, zero value otherwise. -func (r *ReleaseAsset) GetBrowserDownloadURL() string { - if r == nil || r.BrowserDownloadURL == nil { - return "" - } - return *r.BrowserDownloadURL -} - -// GetContentType returns the ContentType field if it's non-nil, zero value otherwise. -func (r *ReleaseAsset) GetContentType() string { - if r == nil || r.ContentType == nil { - return "" - } - return *r.ContentType -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (r *ReleaseAsset) GetCreatedAt() Timestamp { - if r == nil || r.CreatedAt == nil { - return Timestamp{} - } - return *r.CreatedAt -} - -// GetDownloadCount returns the DownloadCount field if it's non-nil, zero value otherwise. -func (r *ReleaseAsset) GetDownloadCount() int { - if r == nil || r.DownloadCount == nil { - return 0 - } - return *r.DownloadCount -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (r *ReleaseAsset) GetID() int64 { - if r == nil || r.ID == nil { - return 0 - } - return *r.ID -} - -// GetLabel returns the Label field if it's non-nil, zero value otherwise. -func (r *ReleaseAsset) GetLabel() string { - if r == nil || r.Label == nil { - return "" - } - return *r.Label -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (r *ReleaseAsset) GetName() string { - if r == nil || r.Name == nil { - return "" - } - return *r.Name -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (r *ReleaseAsset) GetNodeID() string { - if r == nil || r.NodeID == nil { - return "" - } - return *r.NodeID -} - -// GetSize returns the Size field if it's non-nil, zero value otherwise. -func (r *ReleaseAsset) GetSize() int { - if r == nil || r.Size == nil { - return 0 - } - return *r.Size -} - -// GetState returns the State field if it's non-nil, zero value otherwise. -func (r *ReleaseAsset) GetState() string { - if r == nil || r.State == nil { - return "" - } - return *r.State -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (r *ReleaseAsset) GetUpdatedAt() Timestamp { - if r == nil || r.UpdatedAt == nil { - return Timestamp{} - } - return *r.UpdatedAt -} - -// GetUploader returns the Uploader field. -func (r *ReleaseAsset) GetUploader() *User { - if r == nil { - return nil - } - return r.Uploader -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (r *ReleaseAsset) GetURL() string { - if r == nil || r.URL == nil { - return "" - } - return *r.URL -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (r *ReleaseEvent) GetAction() string { - if r == nil || r.Action == nil { - return "" - } - return *r.Action -} - -// GetInstallation returns the Installation field. -func (r *ReleaseEvent) GetInstallation() *Installation { - if r == nil { - return nil - } - return r.Installation -} - -// GetRelease returns the Release field. -func (r *ReleaseEvent) GetRelease() *RepositoryRelease { - if r == nil { - return nil - } - return r.Release -} - -// GetRepo returns the Repo field. -func (r *ReleaseEvent) GetRepo() *Repository { - if r == nil { - return nil - } - return r.Repo -} - -// GetSender returns the Sender field. -func (r *ReleaseEvent) GetSender() *User { - if r == nil { - return nil - } - return r.Sender -} - -// GetFrom returns the From field if it's non-nil, zero value otherwise. -func (r *Rename) GetFrom() string { - if r == nil || r.From == nil { - return "" - } - return *r.From -} - -// GetTo returns the To field if it's non-nil, zero value otherwise. -func (r *Rename) GetTo() string { - if r == nil || r.To == nil { - return "" - } - return *r.To -} - -// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise. -func (r *RepositoriesSearchResult) GetIncompleteResults() bool { - if r == nil || r.IncompleteResults == nil { - return false - } - return *r.IncompleteResults -} - -// GetTotal returns the Total field if it's non-nil, zero value otherwise. -func (r *RepositoriesSearchResult) GetTotal() int { - if r == nil || r.Total == nil { - return 0 - } - return *r.Total -} - -// GetAllowMergeCommit returns the AllowMergeCommit field if it's non-nil, zero value otherwise. -func (r *Repository) GetAllowMergeCommit() bool { - if r == nil || r.AllowMergeCommit == nil { - return false - } - return *r.AllowMergeCommit -} - -// GetAllowRebaseMerge returns the AllowRebaseMerge field if it's non-nil, zero value otherwise. -func (r *Repository) GetAllowRebaseMerge() bool { - if r == nil || r.AllowRebaseMerge == nil { - return false - } - return *r.AllowRebaseMerge -} - -// GetAllowSquashMerge returns the AllowSquashMerge field if it's non-nil, zero value otherwise. -func (r *Repository) GetAllowSquashMerge() bool { - if r == nil || r.AllowSquashMerge == nil { - return false - } - return *r.AllowSquashMerge -} - -// GetArchived returns the Archived field if it's non-nil, zero value otherwise. -func (r *Repository) GetArchived() bool { - if r == nil || r.Archived == nil { - return false - } - return *r.Archived -} - -// GetArchiveURL returns the ArchiveURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetArchiveURL() string { - if r == nil || r.ArchiveURL == nil { - return "" - } - return *r.ArchiveURL -} - -// GetAssigneesURL returns the AssigneesURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetAssigneesURL() string { - if r == nil || r.AssigneesURL == nil { - return "" - } - return *r.AssigneesURL -} - -// GetAutoInit returns the AutoInit field if it's non-nil, zero value otherwise. -func (r *Repository) GetAutoInit() bool { - if r == nil || r.AutoInit == nil { - return false - } - return *r.AutoInit -} - -// GetBlobsURL returns the BlobsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetBlobsURL() string { - if r == nil || r.BlobsURL == nil { - return "" - } - return *r.BlobsURL -} - -// GetBranchesURL returns the BranchesURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetBranchesURL() string { - if r == nil || r.BranchesURL == nil { - return "" - } - return *r.BranchesURL -} - -// GetCloneURL returns the CloneURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetCloneURL() string { - if r == nil || r.CloneURL == nil { - return "" - } - return *r.CloneURL -} - -// GetCodeOfConduct returns the CodeOfConduct field. -func (r *Repository) GetCodeOfConduct() *CodeOfConduct { - if r == nil { - return nil - } - return r.CodeOfConduct -} - -// GetCollaboratorsURL returns the CollaboratorsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetCollaboratorsURL() string { - if r == nil || r.CollaboratorsURL == nil { - return "" - } - return *r.CollaboratorsURL -} - -// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetCommentsURL() string { - if r == nil || r.CommentsURL == nil { - return "" - } - return *r.CommentsURL -} - -// GetCommitsURL returns the CommitsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetCommitsURL() string { - if r == nil || r.CommitsURL == nil { - return "" - } - return *r.CommitsURL -} - -// GetCompareURL returns the CompareURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetCompareURL() string { - if r == nil || r.CompareURL == nil { - return "" - } - return *r.CompareURL -} - -// GetContentsURL returns the ContentsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetContentsURL() string { - if r == nil || r.ContentsURL == nil { - return "" - } - return *r.ContentsURL -} - -// GetContributorsURL returns the ContributorsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetContributorsURL() string { - if r == nil || r.ContributorsURL == nil { - return "" - } - return *r.ContributorsURL -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (r *Repository) GetCreatedAt() Timestamp { - if r == nil || r.CreatedAt == nil { - return Timestamp{} - } - return *r.CreatedAt -} - -// GetDefaultBranch returns the DefaultBranch field if it's non-nil, zero value otherwise. -func (r *Repository) GetDefaultBranch() string { - if r == nil || r.DefaultBranch == nil { - return "" - } - return *r.DefaultBranch -} - -// GetDeploymentsURL returns the DeploymentsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetDeploymentsURL() string { - if r == nil || r.DeploymentsURL == nil { - return "" - } - return *r.DeploymentsURL -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (r *Repository) GetDescription() string { - if r == nil || r.Description == nil { - return "" - } - return *r.Description -} - -// GetDownloadsURL returns the DownloadsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetDownloadsURL() string { - if r == nil || r.DownloadsURL == nil { - return "" - } - return *r.DownloadsURL -} - -// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetEventsURL() string { - if r == nil || r.EventsURL == nil { - return "" - } - return *r.EventsURL -} - -// GetFork returns the Fork field if it's non-nil, zero value otherwise. -func (r *Repository) GetFork() bool { - if r == nil || r.Fork == nil { - return false - } - return *r.Fork -} - -// GetForksCount returns the ForksCount field if it's non-nil, zero value otherwise. -func (r *Repository) GetForksCount() int { - if r == nil || r.ForksCount == nil { - return 0 - } - return *r.ForksCount -} - -// GetForksURL returns the ForksURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetForksURL() string { - if r == nil || r.ForksURL == nil { - return "" - } - return *r.ForksURL -} - -// GetFullName returns the FullName field if it's non-nil, zero value otherwise. -func (r *Repository) GetFullName() string { - if r == nil || r.FullName == nil { - return "" - } - return *r.FullName -} - -// GetGitCommitsURL returns the GitCommitsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetGitCommitsURL() string { - if r == nil || r.GitCommitsURL == nil { - return "" - } - return *r.GitCommitsURL -} - -// GetGitignoreTemplate returns the GitignoreTemplate field if it's non-nil, zero value otherwise. -func (r *Repository) GetGitignoreTemplate() string { - if r == nil || r.GitignoreTemplate == nil { - return "" - } - return *r.GitignoreTemplate -} - -// GetGitRefsURL returns the GitRefsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetGitRefsURL() string { - if r == nil || r.GitRefsURL == nil { - return "" - } - return *r.GitRefsURL -} - -// GetGitTagsURL returns the GitTagsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetGitTagsURL() string { - if r == nil || r.GitTagsURL == nil { - return "" - } - return *r.GitTagsURL -} - -// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetGitURL() string { - if r == nil || r.GitURL == nil { - return "" - } - return *r.GitURL -} - -// GetHasDownloads returns the HasDownloads field if it's non-nil, zero value otherwise. -func (r *Repository) GetHasDownloads() bool { - if r == nil || r.HasDownloads == nil { - return false - } - return *r.HasDownloads -} - -// GetHasIssues returns the HasIssues field if it's non-nil, zero value otherwise. -func (r *Repository) GetHasIssues() bool { - if r == nil || r.HasIssues == nil { - return false - } - return *r.HasIssues -} - -// GetHasPages returns the HasPages field if it's non-nil, zero value otherwise. -func (r *Repository) GetHasPages() bool { - if r == nil || r.HasPages == nil { - return false - } - return *r.HasPages -} - -// GetHasProjects returns the HasProjects field if it's non-nil, zero value otherwise. -func (r *Repository) GetHasProjects() bool { - if r == nil || r.HasProjects == nil { - return false - } - return *r.HasProjects -} - -// GetHasWiki returns the HasWiki field if it's non-nil, zero value otherwise. -func (r *Repository) GetHasWiki() bool { - if r == nil || r.HasWiki == nil { - return false - } - return *r.HasWiki -} - -// GetHomepage returns the Homepage field if it's non-nil, zero value otherwise. -func (r *Repository) GetHomepage() string { - if r == nil || r.Homepage == nil { - return "" - } - return *r.Homepage -} - -// GetHooksURL returns the HooksURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetHooksURL() string { - if r == nil || r.HooksURL == nil { - return "" - } - return *r.HooksURL -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetHTMLURL() string { - if r == nil || r.HTMLURL == nil { - return "" - } - return *r.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (r *Repository) GetID() int64 { - if r == nil || r.ID == nil { - return 0 - } - return *r.ID -} - -// GetIssueCommentURL returns the IssueCommentURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetIssueCommentURL() string { - if r == nil || r.IssueCommentURL == nil { - return "" - } - return *r.IssueCommentURL -} - -// GetIssueEventsURL returns the IssueEventsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetIssueEventsURL() string { - if r == nil || r.IssueEventsURL == nil { - return "" - } - return *r.IssueEventsURL -} - -// GetIssuesURL returns the IssuesURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetIssuesURL() string { - if r == nil || r.IssuesURL == nil { - return "" - } - return *r.IssuesURL -} - -// GetKeysURL returns the KeysURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetKeysURL() string { - if r == nil || r.KeysURL == nil { - return "" - } - return *r.KeysURL -} - -// GetLabelsURL returns the LabelsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetLabelsURL() string { - if r == nil || r.LabelsURL == nil { - return "" - } - return *r.LabelsURL -} - -// GetLanguage returns the Language field if it's non-nil, zero value otherwise. -func (r *Repository) GetLanguage() string { - if r == nil || r.Language == nil { - return "" - } - return *r.Language -} - -// GetLanguagesURL returns the LanguagesURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetLanguagesURL() string { - if r == nil || r.LanguagesURL == nil { - return "" - } - return *r.LanguagesURL -} - -// GetLicense returns the License field. -func (r *Repository) GetLicense() *License { - if r == nil { - return nil - } - return r.License -} - -// GetLicenseTemplate returns the LicenseTemplate field if it's non-nil, zero value otherwise. -func (r *Repository) GetLicenseTemplate() string { - if r == nil || r.LicenseTemplate == nil { - return "" - } - return *r.LicenseTemplate -} - -// GetMasterBranch returns the MasterBranch field if it's non-nil, zero value otherwise. -func (r *Repository) GetMasterBranch() string { - if r == nil || r.MasterBranch == nil { - return "" - } - return *r.MasterBranch -} - -// GetMergesURL returns the MergesURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetMergesURL() string { - if r == nil || r.MergesURL == nil { - return "" - } - return *r.MergesURL -} - -// GetMilestonesURL returns the MilestonesURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetMilestonesURL() string { - if r == nil || r.MilestonesURL == nil { - return "" - } - return *r.MilestonesURL -} - -// GetMirrorURL returns the MirrorURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetMirrorURL() string { - if r == nil || r.MirrorURL == nil { - return "" - } - return *r.MirrorURL -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (r *Repository) GetName() string { - if r == nil || r.Name == nil { - return "" - } - return *r.Name -} - -// GetNetworkCount returns the NetworkCount field if it's non-nil, zero value otherwise. -func (r *Repository) GetNetworkCount() int { - if r == nil || r.NetworkCount == nil { - return 0 - } - return *r.NetworkCount -} - -// GetNotificationsURL returns the NotificationsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetNotificationsURL() string { - if r == nil || r.NotificationsURL == nil { - return "" - } - return *r.NotificationsURL -} - -// GetOpenIssuesCount returns the OpenIssuesCount field if it's non-nil, zero value otherwise. -func (r *Repository) GetOpenIssuesCount() int { - if r == nil || r.OpenIssuesCount == nil { - return 0 - } - return *r.OpenIssuesCount -} - -// GetOrganization returns the Organization field. -func (r *Repository) GetOrganization() *Organization { - if r == nil { - return nil - } - return r.Organization -} - -// GetOwner returns the Owner field. -func (r *Repository) GetOwner() *User { - if r == nil { - return nil - } - return r.Owner -} - -// GetParent returns the Parent field. -func (r *Repository) GetParent() *Repository { - if r == nil { - return nil - } - return r.Parent -} - -// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise. -func (r *Repository) GetPermissions() map[string]bool { - if r == nil || r.Permissions == nil { - return map[string]bool{} - } - return *r.Permissions -} - -// GetPrivate returns the Private field if it's non-nil, zero value otherwise. -func (r *Repository) GetPrivate() bool { - if r == nil || r.Private == nil { - return false - } - return *r.Private -} - -// GetPullsURL returns the PullsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetPullsURL() string { - if r == nil || r.PullsURL == nil { - return "" - } - return *r.PullsURL -} - -// GetPushedAt returns the PushedAt field if it's non-nil, zero value otherwise. -func (r *Repository) GetPushedAt() Timestamp { - if r == nil || r.PushedAt == nil { - return Timestamp{} - } - return *r.PushedAt -} - -// GetReleasesURL returns the ReleasesURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetReleasesURL() string { - if r == nil || r.ReleasesURL == nil { - return "" - } - return *r.ReleasesURL -} - -// GetSize returns the Size field if it's non-nil, zero value otherwise. -func (r *Repository) GetSize() int { - if r == nil || r.Size == nil { - return 0 - } - return *r.Size -} - -// GetSource returns the Source field. -func (r *Repository) GetSource() *Repository { - if r == nil { - return nil - } - return r.Source -} - -// GetSSHURL returns the SSHURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetSSHURL() string { - if r == nil || r.SSHURL == nil { - return "" - } - return *r.SSHURL -} - -// GetStargazersCount returns the StargazersCount field if it's non-nil, zero value otherwise. -func (r *Repository) GetStargazersCount() int { - if r == nil || r.StargazersCount == nil { - return 0 - } - return *r.StargazersCount -} - -// GetStargazersURL returns the StargazersURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetStargazersURL() string { - if r == nil || r.StargazersURL == nil { - return "" - } - return *r.StargazersURL -} - -// GetStatusesURL returns the StatusesURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetStatusesURL() string { - if r == nil || r.StatusesURL == nil { - return "" - } - return *r.StatusesURL -} - -// GetSubscribersCount returns the SubscribersCount field if it's non-nil, zero value otherwise. -func (r *Repository) GetSubscribersCount() int { - if r == nil || r.SubscribersCount == nil { - return 0 - } - return *r.SubscribersCount -} - -// GetSubscribersURL returns the SubscribersURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetSubscribersURL() string { - if r == nil || r.SubscribersURL == nil { - return "" - } - return *r.SubscribersURL -} - -// GetSubscriptionURL returns the SubscriptionURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetSubscriptionURL() string { - if r == nil || r.SubscriptionURL == nil { - return "" - } - return *r.SubscriptionURL -} - -// GetSVNURL returns the SVNURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetSVNURL() string { - if r == nil || r.SVNURL == nil { - return "" - } - return *r.SVNURL -} - -// GetTagsURL returns the TagsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetTagsURL() string { - if r == nil || r.TagsURL == nil { - return "" - } - return *r.TagsURL -} - -// GetTeamID returns the TeamID field if it's non-nil, zero value otherwise. -func (r *Repository) GetTeamID() int64 { - if r == nil || r.TeamID == nil { - return 0 - } - return *r.TeamID -} - -// GetTeamsURL returns the TeamsURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetTeamsURL() string { - if r == nil || r.TeamsURL == nil { - return "" - } - return *r.TeamsURL -} - -// GetTreesURL returns the TreesURL field if it's non-nil, zero value otherwise. -func (r *Repository) GetTreesURL() string { - if r == nil || r.TreesURL == nil { - return "" - } - return *r.TreesURL -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (r *Repository) GetUpdatedAt() Timestamp { - if r == nil || r.UpdatedAt == nil { - return Timestamp{} - } - return *r.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (r *Repository) GetURL() string { - if r == nil || r.URL == nil { - return "" - } - return *r.URL -} - -// GetWatchersCount returns the WatchersCount field if it's non-nil, zero value otherwise. -func (r *Repository) GetWatchersCount() int { - if r == nil || r.WatchersCount == nil { - return 0 - } - return *r.WatchersCount -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (r *RepositoryComment) GetBody() string { - if r == nil || r.Body == nil { - return "" - } - return *r.Body -} - -// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise. -func (r *RepositoryComment) GetCommitID() string { - if r == nil || r.CommitID == nil { - return "" - } - return *r.CommitID -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (r *RepositoryComment) GetCreatedAt() time.Time { - if r == nil || r.CreatedAt == nil { - return time.Time{} - } - return *r.CreatedAt -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (r *RepositoryComment) GetHTMLURL() string { - if r == nil || r.HTMLURL == nil { - return "" - } - return *r.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (r *RepositoryComment) GetID() int64 { - if r == nil || r.ID == nil { - return 0 - } - return *r.ID -} - -// GetPath returns the Path field if it's non-nil, zero value otherwise. -func (r *RepositoryComment) GetPath() string { - if r == nil || r.Path == nil { - return "" - } - return *r.Path -} - -// GetPosition returns the Position field if it's non-nil, zero value otherwise. -func (r *RepositoryComment) GetPosition() int { - if r == nil || r.Position == nil { - return 0 - } - return *r.Position -} - -// GetReactions returns the Reactions field. -func (r *RepositoryComment) GetReactions() *Reactions { - if r == nil { - return nil - } - return r.Reactions -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (r *RepositoryComment) GetUpdatedAt() time.Time { - if r == nil || r.UpdatedAt == nil { - return time.Time{} - } - return *r.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (r *RepositoryComment) GetURL() string { - if r == nil || r.URL == nil { - return "" - } - return *r.URL -} - -// GetUser returns the User field. -func (r *RepositoryComment) GetUser() *User { - if r == nil { - return nil - } - return r.User -} - -// GetAuthor returns the Author field. -func (r *RepositoryCommit) GetAuthor() *User { - if r == nil { - return nil - } - return r.Author -} - -// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise. -func (r *RepositoryCommit) GetCommentsURL() string { - if r == nil || r.CommentsURL == nil { - return "" - } - return *r.CommentsURL -} - -// GetCommit returns the Commit field. -func (r *RepositoryCommit) GetCommit() *Commit { - if r == nil { - return nil - } - return r.Commit -} - -// GetCommitter returns the Committer field. -func (r *RepositoryCommit) GetCommitter() *User { - if r == nil { - return nil - } - return r.Committer -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (r *RepositoryCommit) GetHTMLURL() string { - if r == nil || r.HTMLURL == nil { - return "" - } - return *r.HTMLURL -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (r *RepositoryCommit) GetSHA() string { - if r == nil || r.SHA == nil { - return "" - } - return *r.SHA -} - -// GetStats returns the Stats field. -func (r *RepositoryCommit) GetStats() *CommitStats { - if r == nil { - return nil - } - return r.Stats -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (r *RepositoryCommit) GetURL() string { - if r == nil || r.URL == nil { - return "" - } - return *r.URL -} - -// GetDownloadURL returns the DownloadURL field if it's non-nil, zero value otherwise. -func (r *RepositoryContent) GetDownloadURL() string { - if r == nil || r.DownloadURL == nil { - return "" - } - return *r.DownloadURL -} - -// GetEncoding returns the Encoding field if it's non-nil, zero value otherwise. -func (r *RepositoryContent) GetEncoding() string { - if r == nil || r.Encoding == nil { - return "" - } - return *r.Encoding -} - -// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise. -func (r *RepositoryContent) GetGitURL() string { - if r == nil || r.GitURL == nil { - return "" - } - return *r.GitURL -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (r *RepositoryContent) GetHTMLURL() string { - if r == nil || r.HTMLURL == nil { - return "" - } - return *r.HTMLURL -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (r *RepositoryContent) GetName() string { - if r == nil || r.Name == nil { - return "" - } - return *r.Name -} - -// GetPath returns the Path field if it's non-nil, zero value otherwise. -func (r *RepositoryContent) GetPath() string { - if r == nil || r.Path == nil { - return "" - } - return *r.Path -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (r *RepositoryContent) GetSHA() string { - if r == nil || r.SHA == nil { - return "" - } - return *r.SHA -} - -// GetSize returns the Size field if it's non-nil, zero value otherwise. -func (r *RepositoryContent) GetSize() int { - if r == nil || r.Size == nil { - return 0 - } - return *r.Size -} - -// GetType returns the Type field if it's non-nil, zero value otherwise. -func (r *RepositoryContent) GetType() string { - if r == nil || r.Type == nil { - return "" - } - return *r.Type -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (r *RepositoryContent) GetURL() string { - if r == nil || r.URL == nil { - return "" - } - return *r.URL -} - -// GetAuthor returns the Author field. -func (r *RepositoryContentFileOptions) GetAuthor() *CommitAuthor { - if r == nil { - return nil - } - return r.Author -} - -// GetBranch returns the Branch field if it's non-nil, zero value otherwise. -func (r *RepositoryContentFileOptions) GetBranch() string { - if r == nil || r.Branch == nil { - return "" - } - return *r.Branch -} - -// GetCommitter returns the Committer field. -func (r *RepositoryContentFileOptions) GetCommitter() *CommitAuthor { - if r == nil { - return nil - } - return r.Committer -} - -// GetMessage returns the Message field if it's non-nil, zero value otherwise. -func (r *RepositoryContentFileOptions) GetMessage() string { - if r == nil || r.Message == nil { - return "" - } - return *r.Message -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (r *RepositoryContentFileOptions) GetSHA() string { - if r == nil || r.SHA == nil { - return "" - } - return *r.SHA -} - -// GetContent returns the Content field. -func (r *RepositoryContentResponse) GetContent() *RepositoryContent { - if r == nil { - return nil - } - return r.Content -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (r *RepositoryEvent) GetAction() string { - if r == nil || r.Action == nil { - return "" - } - return *r.Action -} - -// GetInstallation returns the Installation field. -func (r *RepositoryEvent) GetInstallation() *Installation { - if r == nil { - return nil - } - return r.Installation -} - -// GetOrg returns the Org field. -func (r *RepositoryEvent) GetOrg() *Organization { - if r == nil { - return nil - } - return r.Org -} - -// GetRepo returns the Repo field. -func (r *RepositoryEvent) GetRepo() *Repository { - if r == nil { - return nil - } - return r.Repo -} - -// GetSender returns the Sender field. -func (r *RepositoryEvent) GetSender() *User { - if r == nil { - return nil - } - return r.Sender -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (r *RepositoryInvitation) GetCreatedAt() Timestamp { - if r == nil || r.CreatedAt == nil { - return Timestamp{} - } - return *r.CreatedAt -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (r *RepositoryInvitation) GetHTMLURL() string { - if r == nil || r.HTMLURL == nil { - return "" - } - return *r.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (r *RepositoryInvitation) GetID() int64 { - if r == nil || r.ID == nil { - return 0 - } - return *r.ID -} - -// GetInvitee returns the Invitee field. -func (r *RepositoryInvitation) GetInvitee() *User { - if r == nil { - return nil - } - return r.Invitee -} - -// GetInviter returns the Inviter field. -func (r *RepositoryInvitation) GetInviter() *User { - if r == nil { - return nil - } - return r.Inviter -} - -// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise. -func (r *RepositoryInvitation) GetPermissions() string { - if r == nil || r.Permissions == nil { - return "" - } - return *r.Permissions -} - -// GetRepo returns the Repo field. -func (r *RepositoryInvitation) GetRepo() *Repository { - if r == nil { - return nil - } - return r.Repo -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (r *RepositoryInvitation) GetURL() string { - if r == nil || r.URL == nil { - return "" - } - return *r.URL -} - -// GetContent returns the Content field if it's non-nil, zero value otherwise. -func (r *RepositoryLicense) GetContent() string { - if r == nil || r.Content == nil { - return "" - } - return *r.Content -} - -// GetDownloadURL returns the DownloadURL field if it's non-nil, zero value otherwise. -func (r *RepositoryLicense) GetDownloadURL() string { - if r == nil || r.DownloadURL == nil { - return "" - } - return *r.DownloadURL -} - -// GetEncoding returns the Encoding field if it's non-nil, zero value otherwise. -func (r *RepositoryLicense) GetEncoding() string { - if r == nil || r.Encoding == nil { - return "" - } - return *r.Encoding -} - -// GetGitURL returns the GitURL field if it's non-nil, zero value otherwise. -func (r *RepositoryLicense) GetGitURL() string { - if r == nil || r.GitURL == nil { - return "" - } - return *r.GitURL -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (r *RepositoryLicense) GetHTMLURL() string { - if r == nil || r.HTMLURL == nil { - return "" - } - return *r.HTMLURL -} - -// GetLicense returns the License field. -func (r *RepositoryLicense) GetLicense() *License { - if r == nil { - return nil - } - return r.License -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (r *RepositoryLicense) GetName() string { - if r == nil || r.Name == nil { - return "" - } - return *r.Name -} - -// GetPath returns the Path field if it's non-nil, zero value otherwise. -func (r *RepositoryLicense) GetPath() string { - if r == nil || r.Path == nil { - return "" - } - return *r.Path -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (r *RepositoryLicense) GetSHA() string { - if r == nil || r.SHA == nil { - return "" - } - return *r.SHA -} - -// GetSize returns the Size field if it's non-nil, zero value otherwise. -func (r *RepositoryLicense) GetSize() int { - if r == nil || r.Size == nil { - return 0 - } - return *r.Size -} - -// GetType returns the Type field if it's non-nil, zero value otherwise. -func (r *RepositoryLicense) GetType() string { - if r == nil || r.Type == nil { - return "" - } - return *r.Type -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (r *RepositoryLicense) GetURL() string { - if r == nil || r.URL == nil { - return "" - } - return *r.URL -} - -// GetBase returns the Base field if it's non-nil, zero value otherwise. -func (r *RepositoryMergeRequest) GetBase() string { - if r == nil || r.Base == nil { - return "" - } - return *r.Base -} - -// GetCommitMessage returns the CommitMessage field if it's non-nil, zero value otherwise. -func (r *RepositoryMergeRequest) GetCommitMessage() string { - if r == nil || r.CommitMessage == nil { - return "" - } - return *r.CommitMessage -} - -// GetHead returns the Head field if it's non-nil, zero value otherwise. -func (r *RepositoryMergeRequest) GetHead() string { - if r == nil || r.Head == nil { - return "" - } - return *r.Head -} - -// GetPermission returns the Permission field if it's non-nil, zero value otherwise. -func (r *RepositoryPermissionLevel) GetPermission() string { - if r == nil || r.Permission == nil { - return "" - } - return *r.Permission -} - -// GetUser returns the User field. -func (r *RepositoryPermissionLevel) GetUser() *User { - if r == nil { - return nil - } - return r.User -} - -// GetAssetsURL returns the AssetsURL field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetAssetsURL() string { - if r == nil || r.AssetsURL == nil { - return "" - } - return *r.AssetsURL -} - -// GetAuthor returns the Author field. -func (r *RepositoryRelease) GetAuthor() *User { - if r == nil { - return nil - } - return r.Author -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetBody() string { - if r == nil || r.Body == nil { - return "" - } - return *r.Body -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetCreatedAt() Timestamp { - if r == nil || r.CreatedAt == nil { - return Timestamp{} - } - return *r.CreatedAt -} - -// GetDraft returns the Draft field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetDraft() bool { - if r == nil || r.Draft == nil { - return false - } - return *r.Draft -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetHTMLURL() string { - if r == nil || r.HTMLURL == nil { - return "" - } - return *r.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetID() int64 { - if r == nil || r.ID == nil { - return 0 - } - return *r.ID -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetName() string { - if r == nil || r.Name == nil { - return "" - } - return *r.Name -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetNodeID() string { - if r == nil || r.NodeID == nil { - return "" - } - return *r.NodeID -} - -// GetPrerelease returns the Prerelease field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetPrerelease() bool { - if r == nil || r.Prerelease == nil { - return false - } - return *r.Prerelease -} - -// GetPublishedAt returns the PublishedAt field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetPublishedAt() Timestamp { - if r == nil || r.PublishedAt == nil { - return Timestamp{} - } - return *r.PublishedAt -} - -// GetTagName returns the TagName field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetTagName() string { - if r == nil || r.TagName == nil { - return "" - } - return *r.TagName -} - -// GetTarballURL returns the TarballURL field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetTarballURL() string { - if r == nil || r.TarballURL == nil { - return "" - } - return *r.TarballURL -} - -// GetTargetCommitish returns the TargetCommitish field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetTargetCommitish() string { - if r == nil || r.TargetCommitish == nil { - return "" - } - return *r.TargetCommitish -} - -// GetUploadURL returns the UploadURL field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetUploadURL() string { - if r == nil || r.UploadURL == nil { - return "" - } - return *r.UploadURL -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetURL() string { - if r == nil || r.URL == nil { - return "" - } - return *r.URL -} - -// GetZipballURL returns the ZipballURL field if it's non-nil, zero value otherwise. -func (r *RepositoryRelease) GetZipballURL() string { - if r == nil || r.ZipballURL == nil { - return "" - } - return *r.ZipballURL -} - -// GetCommit returns the Commit field. -func (r *RepositoryTag) GetCommit() *Commit { - if r == nil { - return nil - } - return r.Commit -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (r *RepositoryTag) GetName() string { - if r == nil || r.Name == nil { - return "" - } - return *r.Name -} - -// GetTarballURL returns the TarballURL field if it's non-nil, zero value otherwise. -func (r *RepositoryTag) GetTarballURL() string { - if r == nil || r.TarballURL == nil { - return "" - } - return *r.TarballURL -} - -// GetZipballURL returns the ZipballURL field if it's non-nil, zero value otherwise. -func (r *RepositoryTag) GetZipballURL() string { - if r == nil || r.ZipballURL == nil { - return "" - } - return *r.ZipballURL -} - -// GetForkRepos returns the ForkRepos field if it's non-nil, zero value otherwise. -func (r *RepoStats) GetForkRepos() int { - if r == nil || r.ForkRepos == nil { - return 0 - } - return *r.ForkRepos -} - -// GetOrgRepos returns the OrgRepos field if it's non-nil, zero value otherwise. -func (r *RepoStats) GetOrgRepos() int { - if r == nil || r.OrgRepos == nil { - return 0 - } - return *r.OrgRepos -} - -// GetRootRepos returns the RootRepos field if it's non-nil, zero value otherwise. -func (r *RepoStats) GetRootRepos() int { - if r == nil || r.RootRepos == nil { - return 0 - } - return *r.RootRepos -} - -// GetTotalPushes returns the TotalPushes field if it's non-nil, zero value otherwise. -func (r *RepoStats) GetTotalPushes() int { - if r == nil || r.TotalPushes == nil { - return 0 - } - return *r.TotalPushes -} - -// GetTotalRepos returns the TotalRepos field if it's non-nil, zero value otherwise. -func (r *RepoStats) GetTotalRepos() int { - if r == nil || r.TotalRepos == nil { - return 0 - } - return *r.TotalRepos -} - -// GetTotalWikis returns the TotalWikis field if it's non-nil, zero value otherwise. -func (r *RepoStats) GetTotalWikis() int { - if r == nil || r.TotalWikis == nil { - return 0 - } - return *r.TotalWikis -} - -// GetContext returns the Context field if it's non-nil, zero value otherwise. -func (r *RepoStatus) GetContext() string { - if r == nil || r.Context == nil { - return "" - } - return *r.Context -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (r *RepoStatus) GetCreatedAt() time.Time { - if r == nil || r.CreatedAt == nil { - return time.Time{} - } - return *r.CreatedAt -} - -// GetCreator returns the Creator field. -func (r *RepoStatus) GetCreator() *User { - if r == nil { - return nil - } - return r.Creator -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (r *RepoStatus) GetDescription() string { - if r == nil || r.Description == nil { - return "" - } - return *r.Description -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (r *RepoStatus) GetID() int64 { - if r == nil || r.ID == nil { - return 0 - } - return *r.ID -} - -// GetState returns the State field if it's non-nil, zero value otherwise. -func (r *RepoStatus) GetState() string { - if r == nil || r.State == nil { - return "" - } - return *r.State -} - -// GetTargetURL returns the TargetURL field if it's non-nil, zero value otherwise. -func (r *RepoStatus) GetTargetURL() string { - if r == nil || r.TargetURL == nil { - return "" - } - return *r.TargetURL -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (r *RepoStatus) GetUpdatedAt() time.Time { - if r == nil || r.UpdatedAt == nil { - return time.Time{} - } - return *r.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (r *RepoStatus) GetURL() string { - if r == nil || r.URL == nil { - return "" - } - return *r.URL -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (s *ServiceHook) GetName() string { - if s == nil || s.Name == nil { - return "" - } - return *s.Name -} - -// GetPayload returns the Payload field if it's non-nil, zero value otherwise. -func (s *SignatureVerification) GetPayload() string { - if s == nil || s.Payload == nil { - return "" - } - return *s.Payload -} - -// GetReason returns the Reason field if it's non-nil, zero value otherwise. -func (s *SignatureVerification) GetReason() string { - if s == nil || s.Reason == nil { - return "" - } - return *s.Reason -} - -// GetSignature returns the Signature field if it's non-nil, zero value otherwise. -func (s *SignatureVerification) GetSignature() string { - if s == nil || s.Signature == nil { - return "" - } - return *s.Signature -} - -// GetVerified returns the Verified field if it's non-nil, zero value otherwise. -func (s *SignatureVerification) GetVerified() bool { - if s == nil || s.Verified == nil { - return false - } - return *s.Verified -} - -// GetActor returns the Actor field. -func (s *Source) GetActor() *User { - if s == nil { - return nil - } - return s.Actor -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (s *Source) GetID() int64 { - if s == nil || s.ID == nil { - return 0 - } - return *s.ID -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (s *Source) GetURL() string { - if s == nil || s.URL == nil { - return "" - } - return *s.URL -} - -// GetEmail returns the Email field if it's non-nil, zero value otherwise. -func (s *SourceImportAuthor) GetEmail() string { - if s == nil || s.Email == nil { - return "" - } - return *s.Email -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (s *SourceImportAuthor) GetID() int64 { - if s == nil || s.ID == nil { - return 0 - } - return *s.ID -} - -// GetImportURL returns the ImportURL field if it's non-nil, zero value otherwise. -func (s *SourceImportAuthor) GetImportURL() string { - if s == nil || s.ImportURL == nil { - return "" - } - return *s.ImportURL -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (s *SourceImportAuthor) GetName() string { - if s == nil || s.Name == nil { - return "" - } - return *s.Name -} - -// GetRemoteID returns the RemoteID field if it's non-nil, zero value otherwise. -func (s *SourceImportAuthor) GetRemoteID() string { - if s == nil || s.RemoteID == nil { - return "" - } - return *s.RemoteID -} - -// GetRemoteName returns the RemoteName field if it's non-nil, zero value otherwise. -func (s *SourceImportAuthor) GetRemoteName() string { - if s == nil || s.RemoteName == nil { - return "" - } - return *s.RemoteName -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (s *SourceImportAuthor) GetURL() string { - if s == nil || s.URL == nil { - return "" - } - return *s.URL -} - -// GetStarredAt returns the StarredAt field if it's non-nil, zero value otherwise. -func (s *Stargazer) GetStarredAt() Timestamp { - if s == nil || s.StarredAt == nil { - return Timestamp{} - } - return *s.StarredAt -} - -// GetUser returns the User field. -func (s *Stargazer) GetUser() *User { - if s == nil { - return nil - } - return s.User -} - -// GetRepository returns the Repository field. -func (s *StarredRepository) GetRepository() *Repository { - if s == nil { - return nil - } - return s.Repository -} - -// GetStarredAt returns the StarredAt field if it's non-nil, zero value otherwise. -func (s *StarredRepository) GetStarredAt() Timestamp { - if s == nil || s.StarredAt == nil { - return Timestamp{} - } - return *s.StarredAt -} - -// GetCommit returns the Commit field. -func (s *StatusEvent) GetCommit() *RepositoryCommit { - if s == nil { - return nil - } - return s.Commit -} - -// GetContext returns the Context field if it's non-nil, zero value otherwise. -func (s *StatusEvent) GetContext() string { - if s == nil || s.Context == nil { - return "" - } - return *s.Context -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (s *StatusEvent) GetCreatedAt() Timestamp { - if s == nil || s.CreatedAt == nil { - return Timestamp{} - } - return *s.CreatedAt -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (s *StatusEvent) GetDescription() string { - if s == nil || s.Description == nil { - return "" - } - return *s.Description -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (s *StatusEvent) GetID() int64 { - if s == nil || s.ID == nil { - return 0 - } - return *s.ID -} - -// GetInstallation returns the Installation field. -func (s *StatusEvent) GetInstallation() *Installation { - if s == nil { - return nil - } - return s.Installation -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (s *StatusEvent) GetName() string { - if s == nil || s.Name == nil { - return "" - } - return *s.Name -} - -// GetRepo returns the Repo field. -func (s *StatusEvent) GetRepo() *Repository { - if s == nil { - return nil - } - return s.Repo -} - -// GetSender returns the Sender field. -func (s *StatusEvent) GetSender() *User { - if s == nil { - return nil - } - return s.Sender -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (s *StatusEvent) GetSHA() string { - if s == nil || s.SHA == nil { - return "" - } - return *s.SHA -} - -// GetState returns the State field if it's non-nil, zero value otherwise. -func (s *StatusEvent) GetState() string { - if s == nil || s.State == nil { - return "" - } - return *s.State -} - -// GetTargetURL returns the TargetURL field if it's non-nil, zero value otherwise. -func (s *StatusEvent) GetTargetURL() string { - if s == nil || s.TargetURL == nil { - return "" - } - return *s.TargetURL -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (s *StatusEvent) GetUpdatedAt() Timestamp { - if s == nil || s.UpdatedAt == nil { - return Timestamp{} - } - return *s.UpdatedAt -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (s *Subscription) GetCreatedAt() Timestamp { - if s == nil || s.CreatedAt == nil { - return Timestamp{} - } - return *s.CreatedAt -} - -// GetIgnored returns the Ignored field if it's non-nil, zero value otherwise. -func (s *Subscription) GetIgnored() bool { - if s == nil || s.Ignored == nil { - return false - } - return *s.Ignored -} - -// GetReason returns the Reason field if it's non-nil, zero value otherwise. -func (s *Subscription) GetReason() string { - if s == nil || s.Reason == nil { - return "" - } - return *s.Reason -} - -// GetRepositoryURL returns the RepositoryURL field if it's non-nil, zero value otherwise. -func (s *Subscription) GetRepositoryURL() string { - if s == nil || s.RepositoryURL == nil { - return "" - } - return *s.RepositoryURL -} - -// GetSubscribed returns the Subscribed field if it's non-nil, zero value otherwise. -func (s *Subscription) GetSubscribed() bool { - if s == nil || s.Subscribed == nil { - return false - } - return *s.Subscribed -} - -// GetThreadURL returns the ThreadURL field if it's non-nil, zero value otherwise. -func (s *Subscription) GetThreadURL() string { - if s == nil || s.ThreadURL == nil { - return "" - } - return *s.ThreadURL -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (s *Subscription) GetURL() string { - if s == nil || s.URL == nil { - return "" - } - return *s.URL -} - -// GetMessage returns the Message field if it's non-nil, zero value otherwise. -func (t *Tag) GetMessage() string { - if t == nil || t.Message == nil { - return "" - } - return *t.Message -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (t *Tag) GetNodeID() string { - if t == nil || t.NodeID == nil { - return "" - } - return *t.NodeID -} - -// GetObject returns the Object field. -func (t *Tag) GetObject() *GitObject { - if t == nil { - return nil - } - return t.Object -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (t *Tag) GetSHA() string { - if t == nil || t.SHA == nil { - return "" - } - return *t.SHA -} - -// GetTag returns the Tag field if it's non-nil, zero value otherwise. -func (t *Tag) GetTag() string { - if t == nil || t.Tag == nil { - return "" - } - return *t.Tag -} - -// GetTagger returns the Tagger field. -func (t *Tag) GetTagger() *CommitAuthor { - if t == nil { - return nil - } - return t.Tagger -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (t *Tag) GetURL() string { - if t == nil || t.URL == nil { - return "" - } - return *t.URL -} - -// GetVerification returns the Verification field. -func (t *Tag) GetVerification() *SignatureVerification { - if t == nil { - return nil - } - return t.Verification -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (t *Team) GetDescription() string { - if t == nil || t.Description == nil { - return "" - } - return *t.Description -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (t *Team) GetID() int64 { - if t == nil || t.ID == nil { - return 0 - } - return *t.ID -} - -// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise. -func (t *Team) GetLDAPDN() string { - if t == nil || t.LDAPDN == nil { - return "" - } - return *t.LDAPDN -} - -// GetMembersCount returns the MembersCount field if it's non-nil, zero value otherwise. -func (t *Team) GetMembersCount() int { - if t == nil || t.MembersCount == nil { - return 0 - } - return *t.MembersCount -} - -// GetMembersURL returns the MembersURL field if it's non-nil, zero value otherwise. -func (t *Team) GetMembersURL() string { - if t == nil || t.MembersURL == nil { - return "" - } - return *t.MembersURL -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (t *Team) GetName() string { - if t == nil || t.Name == nil { - return "" - } - return *t.Name -} - -// GetOrganization returns the Organization field. -func (t *Team) GetOrganization() *Organization { - if t == nil { - return nil - } - return t.Organization -} - -// GetParent returns the Parent field. -func (t *Team) GetParent() *Team { - if t == nil { - return nil - } - return t.Parent -} - -// GetPermission returns the Permission field if it's non-nil, zero value otherwise. -func (t *Team) GetPermission() string { - if t == nil || t.Permission == nil { - return "" - } - return *t.Permission -} - -// GetPrivacy returns the Privacy field if it's non-nil, zero value otherwise. -func (t *Team) GetPrivacy() string { - if t == nil || t.Privacy == nil { - return "" - } - return *t.Privacy -} - -// GetReposCount returns the ReposCount field if it's non-nil, zero value otherwise. -func (t *Team) GetReposCount() int { - if t == nil || t.ReposCount == nil { - return 0 - } - return *t.ReposCount -} - -// GetRepositoriesURL returns the RepositoriesURL field if it's non-nil, zero value otherwise. -func (t *Team) GetRepositoriesURL() string { - if t == nil || t.RepositoriesURL == nil { - return "" - } - return *t.RepositoriesURL -} - -// GetSlug returns the Slug field if it's non-nil, zero value otherwise. -func (t *Team) GetSlug() string { - if t == nil || t.Slug == nil { - return "" - } - return *t.Slug -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (t *Team) GetURL() string { - if t == nil || t.URL == nil { - return "" - } - return *t.URL -} - -// GetInstallation returns the Installation field. -func (t *TeamAddEvent) GetInstallation() *Installation { - if t == nil { - return nil - } - return t.Installation -} - -// GetOrg returns the Org field. -func (t *TeamAddEvent) GetOrg() *Organization { - if t == nil { - return nil - } - return t.Org -} - -// GetRepo returns the Repo field. -func (t *TeamAddEvent) GetRepo() *Repository { - if t == nil { - return nil - } - return t.Repo -} - -// GetSender returns the Sender field. -func (t *TeamAddEvent) GetSender() *User { - if t == nil { - return nil - } - return t.Sender -} - -// GetTeam returns the Team field. -func (t *TeamAddEvent) GetTeam() *Team { - if t == nil { - return nil - } - return t.Team -} - -// GetAuthor returns the Author field. -func (t *TeamDiscussion) GetAuthor() *User { - if t == nil { - return nil - } - return t.Author -} - -// GetBody returns the Body field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetBody() string { - if t == nil || t.Body == nil { - return "" - } - return *t.Body -} - -// GetBodyHTML returns the BodyHTML field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetBodyHTML() string { - if t == nil || t.BodyHTML == nil { - return "" - } - return *t.BodyHTML -} - -// GetBodyVersion returns the BodyVersion field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetBodyVersion() string { - if t == nil || t.BodyVersion == nil { - return "" - } - return *t.BodyVersion -} - -// GetCommentsCount returns the CommentsCount field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetCommentsCount() int64 { - if t == nil || t.CommentsCount == nil { - return 0 - } - return *t.CommentsCount -} - -// GetCommentsURL returns the CommentsURL field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetCommentsURL() string { - if t == nil || t.CommentsURL == nil { - return "" - } - return *t.CommentsURL -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetCreatedAt() Timestamp { - if t == nil || t.CreatedAt == nil { - return Timestamp{} - } - return *t.CreatedAt -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetHTMLURL() string { - if t == nil || t.HTMLURL == nil { - return "" - } - return *t.HTMLURL -} - -// GetLastEditedAt returns the LastEditedAt field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetLastEditedAt() Timestamp { - if t == nil || t.LastEditedAt == nil { - return Timestamp{} - } - return *t.LastEditedAt -} - -// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetNodeID() string { - if t == nil || t.NodeID == nil { - return "" - } - return *t.NodeID -} - -// GetNumber returns the Number field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetNumber() int64 { - if t == nil || t.Number == nil { - return 0 - } - return *t.Number -} - -// GetPinned returns the Pinned field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetPinned() bool { - if t == nil || t.Pinned == nil { - return false - } - return *t.Pinned -} - -// GetPrivate returns the Private field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetPrivate() bool { - if t == nil || t.Private == nil { - return false - } - return *t.Private -} - -// GetTeamURL returns the TeamURL field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetTeamURL() string { - if t == nil || t.TeamURL == nil { - return "" - } - return *t.TeamURL -} - -// GetTitle returns the Title field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetTitle() string { - if t == nil || t.Title == nil { - return "" - } - return *t.Title -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetUpdatedAt() Timestamp { - if t == nil || t.UpdatedAt == nil { - return Timestamp{} - } - return *t.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (t *TeamDiscussion) GetURL() string { - if t == nil || t.URL == nil { - return "" - } - return *t.URL -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (t *TeamEvent) GetAction() string { - if t == nil || t.Action == nil { - return "" - } - return *t.Action -} - -// GetChanges returns the Changes field. -func (t *TeamEvent) GetChanges() *TeamChange { - if t == nil { - return nil - } - return t.Changes -} - -// GetInstallation returns the Installation field. -func (t *TeamEvent) GetInstallation() *Installation { - if t == nil { - return nil - } - return t.Installation -} - -// GetOrg returns the Org field. -func (t *TeamEvent) GetOrg() *Organization { - if t == nil { - return nil - } - return t.Org -} - -// GetRepo returns the Repo field. -func (t *TeamEvent) GetRepo() *Repository { - if t == nil { - return nil - } - return t.Repo -} - -// GetSender returns the Sender field. -func (t *TeamEvent) GetSender() *User { - if t == nil { - return nil - } - return t.Sender -} - -// GetTeam returns the Team field. -func (t *TeamEvent) GetTeam() *Team { - if t == nil { - return nil - } - return t.Team -} - -// GetDescription returns the Description field if it's non-nil, zero value otherwise. -func (t *TeamLDAPMapping) GetDescription() string { - if t == nil || t.Description == nil { - return "" - } - return *t.Description -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (t *TeamLDAPMapping) GetID() int64 { - if t == nil || t.ID == nil { - return 0 - } - return *t.ID -} - -// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise. -func (t *TeamLDAPMapping) GetLDAPDN() string { - if t == nil || t.LDAPDN == nil { - return "" - } - return *t.LDAPDN -} - -// GetMembersURL returns the MembersURL field if it's non-nil, zero value otherwise. -func (t *TeamLDAPMapping) GetMembersURL() string { - if t == nil || t.MembersURL == nil { - return "" - } - return *t.MembersURL -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (t *TeamLDAPMapping) GetName() string { - if t == nil || t.Name == nil { - return "" - } - return *t.Name -} - -// GetPermission returns the Permission field if it's non-nil, zero value otherwise. -func (t *TeamLDAPMapping) GetPermission() string { - if t == nil || t.Permission == nil { - return "" - } - return *t.Permission -} - -// GetPrivacy returns the Privacy field if it's non-nil, zero value otherwise. -func (t *TeamLDAPMapping) GetPrivacy() string { - if t == nil || t.Privacy == nil { - return "" - } - return *t.Privacy -} - -// GetRepositoriesURL returns the RepositoriesURL field if it's non-nil, zero value otherwise. -func (t *TeamLDAPMapping) GetRepositoriesURL() string { - if t == nil || t.RepositoriesURL == nil { - return "" - } - return *t.RepositoriesURL -} - -// GetSlug returns the Slug field if it's non-nil, zero value otherwise. -func (t *TeamLDAPMapping) GetSlug() string { - if t == nil || t.Slug == nil { - return "" - } - return *t.Slug -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (t *TeamLDAPMapping) GetURL() string { - if t == nil || t.URL == nil { - return "" - } - return *t.URL -} - -// GetFragment returns the Fragment field if it's non-nil, zero value otherwise. -func (t *TextMatch) GetFragment() string { - if t == nil || t.Fragment == nil { - return "" - } - return *t.Fragment -} - -// GetObjectType returns the ObjectType field if it's non-nil, zero value otherwise. -func (t *TextMatch) GetObjectType() string { - if t == nil || t.ObjectType == nil { - return "" - } - return *t.ObjectType -} - -// GetObjectURL returns the ObjectURL field if it's non-nil, zero value otherwise. -func (t *TextMatch) GetObjectURL() string { - if t == nil || t.ObjectURL == nil { - return "" - } - return *t.ObjectURL -} - -// GetProperty returns the Property field if it's non-nil, zero value otherwise. -func (t *TextMatch) GetProperty() string { - if t == nil || t.Property == nil { - return "" - } - return *t.Property -} - -// GetActor returns the Actor field. -func (t *Timeline) GetActor() *User { - if t == nil { - return nil - } - return t.Actor -} - -// GetAssignee returns the Assignee field. -func (t *Timeline) GetAssignee() *User { - if t == nil { - return nil - } - return t.Assignee -} - -// GetCommitID returns the CommitID field if it's non-nil, zero value otherwise. -func (t *Timeline) GetCommitID() string { - if t == nil || t.CommitID == nil { - return "" - } - return *t.CommitID -} - -// GetCommitURL returns the CommitURL field if it's non-nil, zero value otherwise. -func (t *Timeline) GetCommitURL() string { - if t == nil || t.CommitURL == nil { - return "" - } - return *t.CommitURL -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (t *Timeline) GetCreatedAt() time.Time { - if t == nil || t.CreatedAt == nil { - return time.Time{} - } - return *t.CreatedAt -} - -// GetEvent returns the Event field if it's non-nil, zero value otherwise. -func (t *Timeline) GetEvent() string { - if t == nil || t.Event == nil { - return "" - } - return *t.Event -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (t *Timeline) GetID() int64 { - if t == nil || t.ID == nil { - return 0 - } - return *t.ID -} - -// GetLabel returns the Label field. -func (t *Timeline) GetLabel() *Label { - if t == nil { - return nil - } - return t.Label -} - -// GetMilestone returns the Milestone field. -func (t *Timeline) GetMilestone() *Milestone { - if t == nil { - return nil - } - return t.Milestone -} - -// GetRename returns the Rename field. -func (t *Timeline) GetRename() *Rename { - if t == nil { - return nil - } - return t.Rename -} - -// GetSource returns the Source field. -func (t *Timeline) GetSource() *Source { - if t == nil { - return nil - } - return t.Source -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (t *Timeline) GetURL() string { - if t == nil || t.URL == nil { - return "" - } - return *t.URL -} - -// GetCount returns the Count field if it's non-nil, zero value otherwise. -func (t *TrafficClones) GetCount() int { - if t == nil || t.Count == nil { - return 0 - } - return *t.Count -} - -// GetUniques returns the Uniques field if it's non-nil, zero value otherwise. -func (t *TrafficClones) GetUniques() int { - if t == nil || t.Uniques == nil { - return 0 - } - return *t.Uniques -} - -// GetCount returns the Count field if it's non-nil, zero value otherwise. -func (t *TrafficData) GetCount() int { - if t == nil || t.Count == nil { - return 0 - } - return *t.Count -} - -// GetTimestamp returns the Timestamp field if it's non-nil, zero value otherwise. -func (t *TrafficData) GetTimestamp() Timestamp { - if t == nil || t.Timestamp == nil { - return Timestamp{} - } - return *t.Timestamp -} - -// GetUniques returns the Uniques field if it's non-nil, zero value otherwise. -func (t *TrafficData) GetUniques() int { - if t == nil || t.Uniques == nil { - return 0 - } - return *t.Uniques -} - -// GetCount returns the Count field if it's non-nil, zero value otherwise. -func (t *TrafficPath) GetCount() int { - if t == nil || t.Count == nil { - return 0 - } - return *t.Count -} - -// GetPath returns the Path field if it's non-nil, zero value otherwise. -func (t *TrafficPath) GetPath() string { - if t == nil || t.Path == nil { - return "" - } - return *t.Path -} - -// GetTitle returns the Title field if it's non-nil, zero value otherwise. -func (t *TrafficPath) GetTitle() string { - if t == nil || t.Title == nil { - return "" - } - return *t.Title -} - -// GetUniques returns the Uniques field if it's non-nil, zero value otherwise. -func (t *TrafficPath) GetUniques() int { - if t == nil || t.Uniques == nil { - return 0 - } - return *t.Uniques -} - -// GetCount returns the Count field if it's non-nil, zero value otherwise. -func (t *TrafficReferrer) GetCount() int { - if t == nil || t.Count == nil { - return 0 - } - return *t.Count -} - -// GetReferrer returns the Referrer field if it's non-nil, zero value otherwise. -func (t *TrafficReferrer) GetReferrer() string { - if t == nil || t.Referrer == nil { - return "" - } - return *t.Referrer -} - -// GetUniques returns the Uniques field if it's non-nil, zero value otherwise. -func (t *TrafficReferrer) GetUniques() int { - if t == nil || t.Uniques == nil { - return 0 - } - return *t.Uniques -} - -// GetCount returns the Count field if it's non-nil, zero value otherwise. -func (t *TrafficViews) GetCount() int { - if t == nil || t.Count == nil { - return 0 - } - return *t.Count -} - -// GetUniques returns the Uniques field if it's non-nil, zero value otherwise. -func (t *TrafficViews) GetUniques() int { - if t == nil || t.Uniques == nil { - return 0 - } - return *t.Uniques -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (t *Tree) GetSHA() string { - if t == nil || t.SHA == nil { - return "" - } - return *t.SHA -} - -// GetContent returns the Content field if it's non-nil, zero value otherwise. -func (t *TreeEntry) GetContent() string { - if t == nil || t.Content == nil { - return "" - } - return *t.Content -} - -// GetMode returns the Mode field if it's non-nil, zero value otherwise. -func (t *TreeEntry) GetMode() string { - if t == nil || t.Mode == nil { - return "" - } - return *t.Mode -} - -// GetPath returns the Path field if it's non-nil, zero value otherwise. -func (t *TreeEntry) GetPath() string { - if t == nil || t.Path == nil { - return "" - } - return *t.Path -} - -// GetSHA returns the SHA field if it's non-nil, zero value otherwise. -func (t *TreeEntry) GetSHA() string { - if t == nil || t.SHA == nil { - return "" - } - return *t.SHA -} - -// GetSize returns the Size field if it's non-nil, zero value otherwise. -func (t *TreeEntry) GetSize() int { - if t == nil || t.Size == nil { - return 0 - } - return *t.Size -} - -// GetType returns the Type field if it's non-nil, zero value otherwise. -func (t *TreeEntry) GetType() string { - if t == nil || t.Type == nil { - return "" - } - return *t.Type -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (t *TreeEntry) GetURL() string { - if t == nil || t.URL == nil { - return "" - } - return *t.URL -} - -// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise. -func (u *User) GetAvatarURL() string { - if u == nil || u.AvatarURL == nil { - return "" - } - return *u.AvatarURL -} - -// GetBio returns the Bio field if it's non-nil, zero value otherwise. -func (u *User) GetBio() string { - if u == nil || u.Bio == nil { - return "" - } - return *u.Bio -} - -// GetBlog returns the Blog field if it's non-nil, zero value otherwise. -func (u *User) GetBlog() string { - if u == nil || u.Blog == nil { - return "" - } - return *u.Blog -} - -// GetCollaborators returns the Collaborators field if it's non-nil, zero value otherwise. -func (u *User) GetCollaborators() int { - if u == nil || u.Collaborators == nil { - return 0 - } - return *u.Collaborators -} - -// GetCompany returns the Company field if it's non-nil, zero value otherwise. -func (u *User) GetCompany() string { - if u == nil || u.Company == nil { - return "" - } - return *u.Company -} - -// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise. -func (u *User) GetCreatedAt() Timestamp { - if u == nil || u.CreatedAt == nil { - return Timestamp{} - } - return *u.CreatedAt -} - -// GetDiskUsage returns the DiskUsage field if it's non-nil, zero value otherwise. -func (u *User) GetDiskUsage() int { - if u == nil || u.DiskUsage == nil { - return 0 - } - return *u.DiskUsage -} - -// GetEmail returns the Email field if it's non-nil, zero value otherwise. -func (u *User) GetEmail() string { - if u == nil || u.Email == nil { - return "" - } - return *u.Email -} - -// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise. -func (u *User) GetEventsURL() string { - if u == nil || u.EventsURL == nil { - return "" - } - return *u.EventsURL -} - -// GetFollowers returns the Followers field if it's non-nil, zero value otherwise. -func (u *User) GetFollowers() int { - if u == nil || u.Followers == nil { - return 0 - } - return *u.Followers -} - -// GetFollowersURL returns the FollowersURL field if it's non-nil, zero value otherwise. -func (u *User) GetFollowersURL() string { - if u == nil || u.FollowersURL == nil { - return "" - } - return *u.FollowersURL -} - -// GetFollowing returns the Following field if it's non-nil, zero value otherwise. -func (u *User) GetFollowing() int { - if u == nil || u.Following == nil { - return 0 - } - return *u.Following -} - -// GetFollowingURL returns the FollowingURL field if it's non-nil, zero value otherwise. -func (u *User) GetFollowingURL() string { - if u == nil || u.FollowingURL == nil { - return "" - } - return *u.FollowingURL -} - -// GetGistsURL returns the GistsURL field if it's non-nil, zero value otherwise. -func (u *User) GetGistsURL() string { - if u == nil || u.GistsURL == nil { - return "" - } - return *u.GistsURL -} - -// GetGravatarID returns the GravatarID field if it's non-nil, zero value otherwise. -func (u *User) GetGravatarID() string { - if u == nil || u.GravatarID == nil { - return "" - } - return *u.GravatarID -} - -// GetHireable returns the Hireable field if it's non-nil, zero value otherwise. -func (u *User) GetHireable() bool { - if u == nil || u.Hireable == nil { - return false - } - return *u.Hireable -} - -// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise. -func (u *User) GetHTMLURL() string { - if u == nil || u.HTMLURL == nil { - return "" - } - return *u.HTMLURL -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (u *User) GetID() int64 { - if u == nil || u.ID == nil { - return 0 - } - return *u.ID -} - -// GetLocation returns the Location field if it's non-nil, zero value otherwise. -func (u *User) GetLocation() string { - if u == nil || u.Location == nil { - return "" - } - return *u.Location -} - -// GetLogin returns the Login field if it's non-nil, zero value otherwise. -func (u *User) GetLogin() string { - if u == nil || u.Login == nil { - return "" - } - return *u.Login -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (u *User) GetName() string { - if u == nil || u.Name == nil { - return "" - } - return *u.Name -} - -// GetOrganizationsURL returns the OrganizationsURL field if it's non-nil, zero value otherwise. -func (u *User) GetOrganizationsURL() string { - if u == nil || u.OrganizationsURL == nil { - return "" - } - return *u.OrganizationsURL -} - -// GetOwnedPrivateRepos returns the OwnedPrivateRepos field if it's non-nil, zero value otherwise. -func (u *User) GetOwnedPrivateRepos() int { - if u == nil || u.OwnedPrivateRepos == nil { - return 0 - } - return *u.OwnedPrivateRepos -} - -// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise. -func (u *User) GetPermissions() map[string]bool { - if u == nil || u.Permissions == nil { - return map[string]bool{} - } - return *u.Permissions -} - -// GetPlan returns the Plan field. -func (u *User) GetPlan() *Plan { - if u == nil { - return nil - } - return u.Plan -} - -// GetPrivateGists returns the PrivateGists field if it's non-nil, zero value otherwise. -func (u *User) GetPrivateGists() int { - if u == nil || u.PrivateGists == nil { - return 0 - } - return *u.PrivateGists -} - -// GetPublicGists returns the PublicGists field if it's non-nil, zero value otherwise. -func (u *User) GetPublicGists() int { - if u == nil || u.PublicGists == nil { - return 0 - } - return *u.PublicGists -} - -// GetPublicRepos returns the PublicRepos field if it's non-nil, zero value otherwise. -func (u *User) GetPublicRepos() int { - if u == nil || u.PublicRepos == nil { - return 0 - } - return *u.PublicRepos -} - -// GetReceivedEventsURL returns the ReceivedEventsURL field if it's non-nil, zero value otherwise. -func (u *User) GetReceivedEventsURL() string { - if u == nil || u.ReceivedEventsURL == nil { - return "" - } - return *u.ReceivedEventsURL -} - -// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise. -func (u *User) GetReposURL() string { - if u == nil || u.ReposURL == nil { - return "" - } - return *u.ReposURL -} - -// GetSiteAdmin returns the SiteAdmin field if it's non-nil, zero value otherwise. -func (u *User) GetSiteAdmin() bool { - if u == nil || u.SiteAdmin == nil { - return false - } - return *u.SiteAdmin -} - -// GetStarredURL returns the StarredURL field if it's non-nil, zero value otherwise. -func (u *User) GetStarredURL() string { - if u == nil || u.StarredURL == nil { - return "" - } - return *u.StarredURL -} - -// GetSubscriptionsURL returns the SubscriptionsURL field if it's non-nil, zero value otherwise. -func (u *User) GetSubscriptionsURL() string { - if u == nil || u.SubscriptionsURL == nil { - return "" - } - return *u.SubscriptionsURL -} - -// GetSuspendedAt returns the SuspendedAt field if it's non-nil, zero value otherwise. -func (u *User) GetSuspendedAt() Timestamp { - if u == nil || u.SuspendedAt == nil { - return Timestamp{} - } - return *u.SuspendedAt -} - -// GetTotalPrivateRepos returns the TotalPrivateRepos field if it's non-nil, zero value otherwise. -func (u *User) GetTotalPrivateRepos() int { - if u == nil || u.TotalPrivateRepos == nil { - return 0 - } - return *u.TotalPrivateRepos -} - -// GetType returns the Type field if it's non-nil, zero value otherwise. -func (u *User) GetType() string { - if u == nil || u.Type == nil { - return "" - } - return *u.Type -} - -// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise. -func (u *User) GetUpdatedAt() Timestamp { - if u == nil || u.UpdatedAt == nil { - return Timestamp{} - } - return *u.UpdatedAt -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (u *User) GetURL() string { - if u == nil || u.URL == nil { - return "" - } - return *u.URL -} - -// GetEmail returns the Email field if it's non-nil, zero value otherwise. -func (u *UserEmail) GetEmail() string { - if u == nil || u.Email == nil { - return "" - } - return *u.Email -} - -// GetPrimary returns the Primary field if it's non-nil, zero value otherwise. -func (u *UserEmail) GetPrimary() bool { - if u == nil || u.Primary == nil { - return false - } - return *u.Primary -} - -// GetVerified returns the Verified field if it's non-nil, zero value otherwise. -func (u *UserEmail) GetVerified() bool { - if u == nil || u.Verified == nil { - return false - } - return *u.Verified -} - -// GetAvatarURL returns the AvatarURL field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetAvatarURL() string { - if u == nil || u.AvatarURL == nil { - return "" - } - return *u.AvatarURL -} - -// GetEventsURL returns the EventsURL field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetEventsURL() string { - if u == nil || u.EventsURL == nil { - return "" - } - return *u.EventsURL -} - -// GetFollowersURL returns the FollowersURL field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetFollowersURL() string { - if u == nil || u.FollowersURL == nil { - return "" - } - return *u.FollowersURL -} - -// GetFollowingURL returns the FollowingURL field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetFollowingURL() string { - if u == nil || u.FollowingURL == nil { - return "" - } - return *u.FollowingURL -} - -// GetGistsURL returns the GistsURL field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetGistsURL() string { - if u == nil || u.GistsURL == nil { - return "" - } - return *u.GistsURL -} - -// GetGravatarID returns the GravatarID field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetGravatarID() string { - if u == nil || u.GravatarID == nil { - return "" - } - return *u.GravatarID -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetID() int64 { - if u == nil || u.ID == nil { - return 0 - } - return *u.ID -} - -// GetLDAPDN returns the LDAPDN field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetLDAPDN() string { - if u == nil || u.LDAPDN == nil { - return "" - } - return *u.LDAPDN -} - -// GetLogin returns the Login field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetLogin() string { - if u == nil || u.Login == nil { - return "" - } - return *u.Login -} - -// GetOrganizationsURL returns the OrganizationsURL field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetOrganizationsURL() string { - if u == nil || u.OrganizationsURL == nil { - return "" - } - return *u.OrganizationsURL -} - -// GetReceivedEventsURL returns the ReceivedEventsURL field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetReceivedEventsURL() string { - if u == nil || u.ReceivedEventsURL == nil { - return "" - } - return *u.ReceivedEventsURL -} - -// GetReposURL returns the ReposURL field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetReposURL() string { - if u == nil || u.ReposURL == nil { - return "" - } - return *u.ReposURL -} - -// GetSiteAdmin returns the SiteAdmin field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetSiteAdmin() bool { - if u == nil || u.SiteAdmin == nil { - return false - } - return *u.SiteAdmin -} - -// GetStarredURL returns the StarredURL field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetStarredURL() string { - if u == nil || u.StarredURL == nil { - return "" - } - return *u.StarredURL -} - -// GetSubscriptionsURL returns the SubscriptionsURL field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetSubscriptionsURL() string { - if u == nil || u.SubscriptionsURL == nil { - return "" - } - return *u.SubscriptionsURL -} - -// GetType returns the Type field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetType() string { - if u == nil || u.Type == nil { - return "" - } - return *u.Type -} - -// GetURL returns the URL field if it's non-nil, zero value otherwise. -func (u *UserLDAPMapping) GetURL() string { - if u == nil || u.URL == nil { - return "" - } - return *u.URL -} - -// GetIncompleteResults returns the IncompleteResults field if it's non-nil, zero value otherwise. -func (u *UsersSearchResult) GetIncompleteResults() bool { - if u == nil || u.IncompleteResults == nil { - return false - } - return *u.IncompleteResults -} - -// GetTotal returns the Total field if it's non-nil, zero value otherwise. -func (u *UsersSearchResult) GetTotal() int { - if u == nil || u.Total == nil { - return 0 - } - return *u.Total -} - -// GetAdminUsers returns the AdminUsers field if it's non-nil, zero value otherwise. -func (u *UserStats) GetAdminUsers() int { - if u == nil || u.AdminUsers == nil { - return 0 - } - return *u.AdminUsers -} - -// GetSuspendedUsers returns the SuspendedUsers field if it's non-nil, zero value otherwise. -func (u *UserStats) GetSuspendedUsers() int { - if u == nil || u.SuspendedUsers == nil { - return 0 - } - return *u.SuspendedUsers -} - -// GetTotalUsers returns the TotalUsers field if it's non-nil, zero value otherwise. -func (u *UserStats) GetTotalUsers() int { - if u == nil || u.TotalUsers == nil { - return 0 - } - return *u.TotalUsers -} - -// GetAction returns the Action field if it's non-nil, zero value otherwise. -func (w *WatchEvent) GetAction() string { - if w == nil || w.Action == nil { - return "" - } - return *w.Action -} - -// GetInstallation returns the Installation field. -func (w *WatchEvent) GetInstallation() *Installation { - if w == nil { - return nil - } - return w.Installation -} - -// GetRepo returns the Repo field. -func (w *WatchEvent) GetRepo() *Repository { - if w == nil { - return nil - } - return w.Repo -} - -// GetSender returns the Sender field. -func (w *WatchEvent) GetSender() *User { - if w == nil { - return nil - } - return w.Sender -} - -// GetEmail returns the Email field if it's non-nil, zero value otherwise. -func (w *WebHookAuthor) GetEmail() string { - if w == nil || w.Email == nil { - return "" - } - return *w.Email -} - -// GetName returns the Name field if it's non-nil, zero value otherwise. -func (w *WebHookAuthor) GetName() string { - if w == nil || w.Name == nil { - return "" - } - return *w.Name -} - -// GetUsername returns the Username field if it's non-nil, zero value otherwise. -func (w *WebHookAuthor) GetUsername() string { - if w == nil || w.Username == nil { - return "" - } - return *w.Username -} - -// GetAuthor returns the Author field. -func (w *WebHookCommit) GetAuthor() *WebHookAuthor { - if w == nil { - return nil - } - return w.Author -} - -// GetCommitter returns the Committer field. -func (w *WebHookCommit) GetCommitter() *WebHookAuthor { - if w == nil { - return nil - } - return w.Committer -} - -// GetDistinct returns the Distinct field if it's non-nil, zero value otherwise. -func (w *WebHookCommit) GetDistinct() bool { - if w == nil || w.Distinct == nil { - return false - } - return *w.Distinct -} - -// GetID returns the ID field if it's non-nil, zero value otherwise. -func (w *WebHookCommit) GetID() string { - if w == nil || w.ID == nil { - return "" - } - return *w.ID -} - -// GetMessage returns the Message field if it's non-nil, zero value otherwise. -func (w *WebHookCommit) GetMessage() string { - if w == nil || w.Message == nil { - return "" - } - return *w.Message -} - -// GetTimestamp returns the Timestamp field if it's non-nil, zero value otherwise. -func (w *WebHookCommit) GetTimestamp() time.Time { - if w == nil || w.Timestamp == nil { - return time.Time{} - } - return *w.Timestamp -} - -// GetAfter returns the After field if it's non-nil, zero value otherwise. -func (w *WebHookPayload) GetAfter() string { - if w == nil || w.After == nil { - return "" - } - return *w.After -} - -// GetBefore returns the Before field if it's non-nil, zero value otherwise. -func (w *WebHookPayload) GetBefore() string { - if w == nil || w.Before == nil { - return "" - } - return *w.Before -} - -// GetCompare returns the Compare field if it's non-nil, zero value otherwise. -func (w *WebHookPayload) GetCompare() string { - if w == nil || w.Compare == nil { - return "" - } - return *w.Compare -} - -// GetCreated returns the Created field if it's non-nil, zero value otherwise. -func (w *WebHookPayload) GetCreated() bool { - if w == nil || w.Created == nil { - return false - } - return *w.Created -} - -// GetDeleted returns the Deleted field if it's non-nil, zero value otherwise. -func (w *WebHookPayload) GetDeleted() bool { - if w == nil || w.Deleted == nil { - return false - } - return *w.Deleted -} - -// GetForced returns the Forced field if it's non-nil, zero value otherwise. -func (w *WebHookPayload) GetForced() bool { - if w == nil || w.Forced == nil { - return false - } - return *w.Forced -} - -// GetHeadCommit returns the HeadCommit field. -func (w *WebHookPayload) GetHeadCommit() *WebHookCommit { - if w == nil { - return nil - } - return w.HeadCommit -} - -// GetPusher returns the Pusher field. -func (w *WebHookPayload) GetPusher() *User { - if w == nil { - return nil - } - return w.Pusher -} - -// GetRef returns the Ref field if it's non-nil, zero value otherwise. -func (w *WebHookPayload) GetRef() string { - if w == nil || w.Ref == nil { - return "" - } - return *w.Ref -} - -// GetRepo returns the Repo field. -func (w *WebHookPayload) GetRepo() *Repository { - if w == nil { - return nil - } - return w.Repo -} - -// GetSender returns the Sender field. -func (w *WebHookPayload) GetSender() *User { - if w == nil { - return nil - } - return w.Sender -} - -// GetTotal returns the Total field if it's non-nil, zero value otherwise. -func (w *WeeklyCommitActivity) GetTotal() int { - if w == nil || w.Total == nil { - return 0 - } - return *w.Total -} - -// GetWeek returns the Week field if it's non-nil, zero value otherwise. -func (w *WeeklyCommitActivity) GetWeek() Timestamp { - if w == nil || w.Week == nil { - return Timestamp{} - } - return *w.Week -} - -// GetAdditions returns the Additions field if it's non-nil, zero value otherwise. -func (w *WeeklyStats) GetAdditions() int { - if w == nil || w.Additions == nil { - return 0 - } - return *w.Additions -} - -// GetCommits returns the Commits field if it's non-nil, zero value otherwise. -func (w *WeeklyStats) GetCommits() int { - if w == nil || w.Commits == nil { - return 0 - } - return *w.Commits -} - -// GetDeletions returns the Deletions field if it's non-nil, zero value otherwise. -func (w *WeeklyStats) GetDeletions() int { - if w == nil || w.Deletions == nil { - return 0 - } - return *w.Deletions -} - -// GetWeek returns the Week field if it's non-nil, zero value otherwise. -func (w *WeeklyStats) GetWeek() Timestamp { - if w == nil || w.Week == nil { - return Timestamp{} - } - return *w.Week -} diff --git a/vendor/github.com/google/go-github/github/github.go b/vendor/github.com/google/go-github/github/github.go deleted file mode 100644 index a0c78aaed..000000000 --- a/vendor/github.com/google/go-github/github/github.go +++ /dev/null @@ -1,989 +0,0 @@ -// Copyright 2013 The go-github 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 go run gen-accessors.go - -package github - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "fmt" - "io" - "io/ioutil" - "net/http" - "net/url" - "reflect" - "strconv" - "strings" - "sync" - "time" - - "github.com/google/go-querystring/query" -) - -const ( - defaultBaseURL = "https://api.github.com/" - uploadBaseURL = "https://uploads.github.com/" - userAgent = "go-github" - - headerRateLimit = "X-RateLimit-Limit" - headerRateRemaining = "X-RateLimit-Remaining" - headerRateReset = "X-RateLimit-Reset" - headerOTP = "X-GitHub-OTP" - - mediaTypeV3 = "application/vnd.github.v3+json" - defaultMediaType = "application/octet-stream" - mediaTypeV3SHA = "application/vnd.github.v3.sha" - mediaTypeV3Diff = "application/vnd.github.v3.diff" - mediaTypeV3Patch = "application/vnd.github.v3.patch" - mediaTypeOrgPermissionRepo = "application/vnd.github.v3.repository+json" - - // Media Type values to access preview APIs - - // https://developer.github.com/changes/2015-03-09-licenses-api/ - mediaTypeLicensesPreview = "application/vnd.github.drax-preview+json" - - // https://developer.github.com/changes/2014-12-09-new-attributes-for-stars-api/ - mediaTypeStarringPreview = "application/vnd.github.v3.star+json" - - // https://developer.github.com/changes/2015-11-11-protected-branches-api/ - mediaTypeProtectedBranchesPreview = "application/vnd.github.loki-preview+json" - - // https://help.github.com/enterprise/2.4/admin/guides/migrations/exporting-the-github-com-organization-s-repositories/ - mediaTypeMigrationsPreview = "application/vnd.github.wyandotte-preview+json" - - // https://developer.github.com/changes/2016-04-06-deployment-and-deployment-status-enhancements/ - mediaTypeDeploymentStatusPreview = "application/vnd.github.ant-man-preview+json" - - // https://developer.github.com/changes/2016-02-19-source-import-preview-api/ - mediaTypeImportPreview = "application/vnd.github.barred-rock-preview" - - // https://developer.github.com/changes/2016-05-12-reactions-api-preview/ - mediaTypeReactionsPreview = "application/vnd.github.squirrel-girl-preview" - - // https://developer.github.com/changes/2016-04-04-git-signing-api-preview/ - mediaTypeGitSigningPreview = "application/vnd.github.cryptographer-preview+json" - - // https://developer.github.com/changes/2016-05-23-timeline-preview-api/ - mediaTypeTimelinePreview = "application/vnd.github.mockingbird-preview+json" - - // https://developer.github.com/changes/2016-06-14-repository-invitations/ - mediaTypeRepositoryInvitationsPreview = "application/vnd.github.swamp-thing-preview+json" - - // https://developer.github.com/changes/2016-07-06-github-pages-preiew-api/ - mediaTypePagesPreview = "application/vnd.github.mister-fantastic-preview+json" - - // https://developer.github.com/changes/2016-09-14-projects-api/ - mediaTypeProjectsPreview = "application/vnd.github.inertia-preview+json" - - // https://developer.github.com/changes/2016-09-14-Integrations-Early-Access/ - mediaTypeIntegrationPreview = "application/vnd.github.machine-man-preview+json" - - // https://developer.github.com/changes/2017-01-05-commit-search-api/ - mediaTypeCommitSearchPreview = "application/vnd.github.cloak-preview+json" - - // https://developer.github.com/changes/2017-02-28-user-blocking-apis-and-webhook/ - mediaTypeBlockUsersPreview = "application/vnd.github.giant-sentry-fist-preview+json" - - // https://developer.github.com/changes/2017-02-09-community-health/ - mediaTypeRepositoryCommunityHealthMetricsPreview = "application/vnd.github.black-panther-preview+json" - - // https://developer.github.com/changes/2017-05-23-coc-api/ - mediaTypeCodesOfConductPreview = "application/vnd.github.scarlet-witch-preview+json" - - // https://developer.github.com/changes/2017-07-17-update-topics-on-repositories/ - mediaTypeTopicsPreview = "application/vnd.github.mercy-preview+json" - - // https://developer.github.com/v3/apps/marketplace/ - mediaTypeMarketplacePreview = "application/vnd.github.valkyrie-preview+json" - - // https://developer.github.com/changes/2017-08-30-preview-nested-teams/ - mediaTypeNestedTeamsPreview = "application/vnd.github.hellcat-preview+json" - - // https://developer.github.com/changes/2017-11-09-repository-transfer-api-preview/ - mediaTypeRepositoryTransferPreview = "application/vnd.github.nightshade-preview+json" - - // https://developer.github.com/changes/2017-12-19-graphql-node-id/ - mediaTypeGraphQLNodeIDPreview = "application/vnd.github.jean-grey-preview+json" - - // https://developer.github.com/changes/2018-01-25-organization-invitation-api-preview/ - mediaTypeOrganizationInvitationPreview = "application/vnd.github.dazzler-preview+json" - - // https://developer.github.com/changes/2018-02-22-label-description-search-preview/ - mediaTypeLabelDescriptionSearchPreview = "application/vnd.github.symmetra-preview+json" - - // https://developer.github.com/changes/2018-02-07-team-discussions-api/ - mediaTypeTeamDiscussionsPreview = "application/vnd.github.echo-preview+json" -) - -// A Client manages communication with the GitHub API. -type Client struct { - clientMu sync.Mutex // clientMu protects the client during calls that modify the CheckRedirect func. - client *http.Client // HTTP client used to communicate with the API. - - // Base URL for API requests. Defaults to the public GitHub API, but can be - // set to a domain endpoint to use with GitHub Enterprise. BaseURL should - // always be specified with a trailing slash. - BaseURL *url.URL - - // Base URL for uploading files. - UploadURL *url.URL - - // User agent used when communicating with the GitHub API. - UserAgent string - - rateMu sync.Mutex - rateLimits [categories]Rate // Rate limits for the client as determined by the most recent API calls. - - common service // Reuse a single struct instead of allocating one for each service on the heap. - - // Services used for talking to different parts of the GitHub API. - Activity *ActivityService - Admin *AdminService - Apps *AppsService - Authorizations *AuthorizationsService - Gists *GistsService - Git *GitService - Gitignores *GitignoresService - Issues *IssuesService - Licenses *LicensesService - Marketplace *MarketplaceService - Migrations *MigrationService - Organizations *OrganizationsService - Projects *ProjectsService - PullRequests *PullRequestsService - Reactions *ReactionsService - Repositories *RepositoriesService - Search *SearchService - Teams *TeamsService - Users *UsersService -} - -type service struct { - client *Client -} - -// ListOptions specifies the optional parameters to various List methods that -// support pagination. -type ListOptions struct { - // For paginated result sets, page of results to retrieve. - Page int `url:"page,omitempty"` - - // For paginated result sets, the number of results to include per page. - PerPage int `url:"per_page,omitempty"` -} - -// UploadOptions specifies the parameters to methods that support uploads. -type UploadOptions struct { - Name string `url:"name,omitempty"` -} - -// RawType represents type of raw format of a request instead of JSON. -type RawType uint8 - -const ( - // Diff format. - Diff RawType = 1 + iota - // Patch format. - Patch -) - -// RawOptions specifies parameters when user wants to get raw format of -// a response instead of JSON. -type RawOptions struct { - Type RawType -} - -// addOptions adds the parameters in opt as URL query parameters to s. opt -// must be a struct whose fields may contain "url" tags. -func addOptions(s string, opt interface{}) (string, error) { - v := reflect.ValueOf(opt) - if v.Kind() == reflect.Ptr && v.IsNil() { - return s, nil - } - - u, err := url.Parse(s) - if err != nil { - return s, err - } - - qs, err := query.Values(opt) - if err != nil { - return s, err - } - - u.RawQuery = qs.Encode() - return u.String(), nil -} - -// NewClient returns a new GitHub API client. If a nil httpClient is -// provided, http.DefaultClient will be used. To use API methods which require -// authentication, provide an http.Client that will perform the authentication -// for you (such as that provided by the golang.org/x/oauth2 library). -func NewClient(httpClient *http.Client) *Client { - if httpClient == nil { - httpClient = http.DefaultClient - } - baseURL, _ := url.Parse(defaultBaseURL) - uploadURL, _ := url.Parse(uploadBaseURL) - - c := &Client{client: httpClient, BaseURL: baseURL, UserAgent: userAgent, UploadURL: uploadURL} - c.common.client = c - c.Activity = (*ActivityService)(&c.common) - c.Admin = (*AdminService)(&c.common) - c.Apps = (*AppsService)(&c.common) - c.Authorizations = (*AuthorizationsService)(&c.common) - c.Gists = (*GistsService)(&c.common) - c.Git = (*GitService)(&c.common) - c.Gitignores = (*GitignoresService)(&c.common) - c.Issues = (*IssuesService)(&c.common) - c.Licenses = (*LicensesService)(&c.common) - c.Marketplace = &MarketplaceService{client: c} - c.Migrations = (*MigrationService)(&c.common) - c.Organizations = (*OrganizationsService)(&c.common) - c.Projects = (*ProjectsService)(&c.common) - c.PullRequests = (*PullRequestsService)(&c.common) - c.Reactions = (*ReactionsService)(&c.common) - c.Repositories = (*RepositoriesService)(&c.common) - c.Search = (*SearchService)(&c.common) - c.Teams = (*TeamsService)(&c.common) - c.Users = (*UsersService)(&c.common) - return c -} - -// NewEnterpriseClient returns a new GitHub API client with provided -// base URL and upload URL (often the same URL). -// If either URL does not have a trailing slash, one is added automatically. -// If a nil httpClient is provided, http.DefaultClient will be used. -// -// Note that NewEnterpriseClient is a convenience helper only; -// its behavior is equivalent to using NewClient, followed by setting -// the BaseURL and UploadURL fields. -func NewEnterpriseClient(baseURL, uploadURL string, httpClient *http.Client) (*Client, error) { - baseEndpoint, err := url.Parse(baseURL) - if err != nil { - return nil, err - } - if !strings.HasSuffix(baseEndpoint.Path, "/") { - baseEndpoint.Path += "/" - } - - uploadEndpoint, err := url.Parse(uploadURL) - if err != nil { - return nil, err - } - if !strings.HasSuffix(uploadEndpoint.Path, "/") { - uploadEndpoint.Path += "/" - } - - c := NewClient(httpClient) - c.BaseURL = baseEndpoint - c.UploadURL = uploadEndpoint - return c, nil -} - -// NewRequest creates an API request. A relative URL can be provided in urlStr, -// in which case it is resolved relative to the BaseURL of the Client. -// Relative URLs should always be specified without a preceding slash. If -// specified, the value pointed to by body is JSON encoded and included as the -// request body. -func (c *Client) NewRequest(method, urlStr string, body interface{}) (*http.Request, error) { - if !strings.HasSuffix(c.BaseURL.Path, "/") { - return nil, fmt.Errorf("BaseURL must have a trailing slash, but %q does not", c.BaseURL) - } - u, err := c.BaseURL.Parse(urlStr) - if err != nil { - return nil, err - } - - var buf io.ReadWriter - if body != nil { - buf = new(bytes.Buffer) - enc := json.NewEncoder(buf) - enc.SetEscapeHTML(false) - err := enc.Encode(body) - if err != nil { - return nil, err - } - } - - req, err := http.NewRequest(method, u.String(), buf) - if err != nil { - return nil, err - } - - if body != nil { - req.Header.Set("Content-Type", "application/json") - } - req.Header.Set("Accept", mediaTypeV3) - if c.UserAgent != "" { - req.Header.Set("User-Agent", c.UserAgent) - } - return req, nil -} - -// NewUploadRequest creates an upload request. A relative URL can be provided in -// urlStr, in which case it is resolved relative to the UploadURL of the Client. -// Relative URLs should always be specified without a preceding slash. -func (c *Client) NewUploadRequest(urlStr string, reader io.Reader, size int64, mediaType string) (*http.Request, error) { - if !strings.HasSuffix(c.UploadURL.Path, "/") { - return nil, fmt.Errorf("UploadURL must have a trailing slash, but %q does not", c.UploadURL) - } - u, err := c.UploadURL.Parse(urlStr) - if err != nil { - return nil, err - } - - req, err := http.NewRequest("POST", u.String(), reader) - if err != nil { - return nil, err - } - req.ContentLength = size - - if mediaType == "" { - mediaType = defaultMediaType - } - req.Header.Set("Content-Type", mediaType) - req.Header.Set("Accept", mediaTypeV3) - req.Header.Set("User-Agent", c.UserAgent) - return req, nil -} - -// Response is a GitHub API response. This wraps the standard http.Response -// returned from GitHub and provides convenient access to things like -// pagination links. -type Response struct { - *http.Response - - // These fields provide the page values for paginating through a set of - // results. Any or all of these may be set to the zero value for - // responses that are not part of a paginated set, or for which there - // are no additional pages. - - NextPage int - PrevPage int - FirstPage int - LastPage int - - Rate -} - -// newResponse creates a new Response for the provided http.Response. -// r must not be nil. -func newResponse(r *http.Response) *Response { - response := &Response{Response: r} - response.populatePageValues() - response.Rate = parseRate(r) - return response -} - -// populatePageValues parses the HTTP Link response headers and populates the -// various pagination link values in the Response. -func (r *Response) populatePageValues() { - if links, ok := r.Response.Header["Link"]; ok && len(links) > 0 { - for _, link := range strings.Split(links[0], ",") { - segments := strings.Split(strings.TrimSpace(link), ";") - - // link must at least have href and rel - if len(segments) < 2 { - continue - } - - // ensure href is properly formatted - if !strings.HasPrefix(segments[0], "<") || !strings.HasSuffix(segments[0], ">") { - continue - } - - // try to pull out page parameter - url, err := url.Parse(segments[0][1 : len(segments[0])-1]) - if err != nil { - continue - } - page := url.Query().Get("page") - if page == "" { - continue - } - - for _, segment := range segments[1:] { - switch strings.TrimSpace(segment) { - case `rel="next"`: - r.NextPage, _ = strconv.Atoi(page) - case `rel="prev"`: - r.PrevPage, _ = strconv.Atoi(page) - case `rel="first"`: - r.FirstPage, _ = strconv.Atoi(page) - case `rel="last"`: - r.LastPage, _ = strconv.Atoi(page) - } - - } - } - } -} - -// parseRate parses the rate related headers. -func parseRate(r *http.Response) Rate { - var rate Rate - if limit := r.Header.Get(headerRateLimit); limit != "" { - rate.Limit, _ = strconv.Atoi(limit) - } - if remaining := r.Header.Get(headerRateRemaining); remaining != "" { - rate.Remaining, _ = strconv.Atoi(remaining) - } - if reset := r.Header.Get(headerRateReset); reset != "" { - if v, _ := strconv.ParseInt(reset, 10, 64); v != 0 { - rate.Reset = Timestamp{time.Unix(v, 0)} - } - } - return rate -} - -// Do sends an API request and returns the API response. The API response is -// JSON decoded and stored in the value pointed to by v, or returned as an -// error if an API error has occurred. If v implements the io.Writer -// interface, the raw response body will be written to v, without attempting to -// first decode it. If rate limit is exceeded and reset time is in the future, -// Do returns *RateLimitError immediately without making a network API call. -// -// The provided ctx must be non-nil. If it is canceled or times out, -// ctx.Err() will be returned. -func (c *Client) Do(ctx context.Context, req *http.Request, v interface{}) (*Response, error) { - req = withContext(ctx, req) - - rateLimitCategory := category(req.URL.Path) - - // If we've hit rate limit, don't make further requests before Reset time. - if err := c.checkRateLimitBeforeDo(req, rateLimitCategory); err != nil { - return &Response{ - Response: err.Response, - Rate: err.Rate, - }, err - } - - resp, err := c.client.Do(req) - if err != nil { - // If we got an error, and the context has been canceled, - // the context's error is probably more useful. - select { - case <-ctx.Done(): - return nil, ctx.Err() - default: - } - - // If the error type is *url.Error, sanitize its URL before returning. - if e, ok := err.(*url.Error); ok { - if url, err := url.Parse(e.URL); err == nil { - e.URL = sanitizeURL(url).String() - return nil, e - } - } - - return nil, err - } - defer resp.Body.Close() - - response := newResponse(resp) - - c.rateMu.Lock() - c.rateLimits[rateLimitCategory] = response.Rate - c.rateMu.Unlock() - - err = CheckResponse(resp) - if err != nil { - // Even though there was an error, we still return the response - // in case the caller wants to inspect it further. - // However, if the error is AcceptedError, decode it below before - // returning from this function and closing the response body. - if _, ok := err.(*AcceptedError); !ok { - return response, err - } - } - - if v != nil { - if w, ok := v.(io.Writer); ok { - io.Copy(w, resp.Body) - } else { - decErr := json.NewDecoder(resp.Body).Decode(v) - if decErr == io.EOF { - decErr = nil // ignore EOF errors caused by empty response body - } - if decErr != nil { - err = decErr - } - } - } - - return response, err -} - -// checkRateLimitBeforeDo does not make any network calls, but uses existing knowledge from -// current client state in order to quickly check if *RateLimitError can be immediately returned -// from Client.Do, and if so, returns it so that Client.Do can skip making a network API call unnecessarily. -// Otherwise it returns nil, and Client.Do should proceed normally. -func (c *Client) checkRateLimitBeforeDo(req *http.Request, rateLimitCategory rateLimitCategory) *RateLimitError { - c.rateMu.Lock() - rate := c.rateLimits[rateLimitCategory] - c.rateMu.Unlock() - if !rate.Reset.Time.IsZero() && rate.Remaining == 0 && time.Now().Before(rate.Reset.Time) { - // Create a fake response. - resp := &http.Response{ - Status: http.StatusText(http.StatusForbidden), - StatusCode: http.StatusForbidden, - Request: req, - Header: make(http.Header), - Body: ioutil.NopCloser(strings.NewReader("")), - } - return &RateLimitError{ - Rate: rate, - Response: resp, - Message: fmt.Sprintf("API rate limit of %v still exceeded until %v, not making remote request.", rate.Limit, rate.Reset.Time), - } - } - - return nil -} - -/* -An ErrorResponse reports one or more errors caused by an API request. - -GitHub API docs: https://developer.github.com/v3/#client-errors -*/ -type ErrorResponse struct { - Response *http.Response // HTTP response that caused this error - Message string `json:"message"` // error message - Errors []Error `json:"errors"` // more detail on individual errors - // Block is only populated on certain types of errors such as code 451. - // See https://developer.github.com/changes/2016-03-17-the-451-status-code-is-now-supported/ - // for more information. - Block *struct { - Reason string `json:"reason,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - } `json:"block,omitempty"` - // Most errors will also include a documentation_url field pointing - // to some content that might help you resolve the error, see - // https://developer.github.com/v3/#client-errors - DocumentationURL string `json:"documentation_url,omitempty"` -} - -func (r *ErrorResponse) Error() string { - return fmt.Sprintf("%v %v: %d %v %+v", - r.Response.Request.Method, sanitizeURL(r.Response.Request.URL), - r.Response.StatusCode, r.Message, r.Errors) -} - -// TwoFactorAuthError occurs when using HTTP Basic Authentication for a user -// that has two-factor authentication enabled. The request can be reattempted -// by providing a one-time password in the request. -type TwoFactorAuthError ErrorResponse - -func (r *TwoFactorAuthError) Error() string { return (*ErrorResponse)(r).Error() } - -// RateLimitError occurs when GitHub returns 403 Forbidden response with a rate limit -// remaining value of 0, and error message starts with "API rate limit exceeded for ". -type RateLimitError struct { - Rate Rate // Rate specifies last known rate limit for the client - Response *http.Response // HTTP response that caused this error - Message string `json:"message"` // error message -} - -func (r *RateLimitError) Error() string { - return fmt.Sprintf("%v %v: %d %v %v", - r.Response.Request.Method, sanitizeURL(r.Response.Request.URL), - r.Response.StatusCode, r.Message, formatRateReset(r.Rate.Reset.Time.Sub(time.Now()))) -} - -// AcceptedError occurs when GitHub returns 202 Accepted response with an -// empty body, which means a job was scheduled on the GitHub side to process -// the information needed and cache it. -// Technically, 202 Accepted is not a real error, it's just used to -// indicate that results are not ready yet, but should be available soon. -// The request can be repeated after some time. -type AcceptedError struct{} - -func (*AcceptedError) Error() string { - return "job scheduled on GitHub side; try again later" -} - -// AbuseRateLimitError occurs when GitHub returns 403 Forbidden response with the -// "documentation_url" field value equal to "https://developer.github.com/v3/#abuse-rate-limits". -type AbuseRateLimitError struct { - Response *http.Response // HTTP response that caused this error - Message string `json:"message"` // error message - - // RetryAfter is provided with some abuse rate limit errors. If present, - // it is the amount of time that the client should wait before retrying. - // Otherwise, the client should try again later (after an unspecified amount of time). - RetryAfter *time.Duration -} - -func (r *AbuseRateLimitError) Error() string { - return fmt.Sprintf("%v %v: %d %v", - r.Response.Request.Method, sanitizeURL(r.Response.Request.URL), - r.Response.StatusCode, r.Message) -} - -// sanitizeURL redacts the client_secret parameter from the URL which may be -// exposed to the user. -func sanitizeURL(uri *url.URL) *url.URL { - if uri == nil { - return nil - } - params := uri.Query() - if len(params.Get("client_secret")) > 0 { - params.Set("client_secret", "REDACTED") - uri.RawQuery = params.Encode() - } - return uri -} - -/* -An Error reports more details on an individual error in an ErrorResponse. -These are the possible validation error codes: - - missing: - resource does not exist - missing_field: - a required field on a resource has not been set - invalid: - the formatting of a field is invalid - already_exists: - another resource has the same valid as this field - custom: - some resources return this (e.g. github.User.CreateKey()), additional - information is set in the Message field of the Error - -GitHub API docs: https://developer.github.com/v3/#client-errors -*/ -type Error struct { - Resource string `json:"resource"` // resource on which the error occurred - Field string `json:"field"` // field on which the error occurred - Code string `json:"code"` // validation error code - Message string `json:"message"` // Message describing the error. Errors with Code == "custom" will always have this set. -} - -func (e *Error) Error() string { - return fmt.Sprintf("%v error caused by %v field on %v resource", - e.Code, e.Field, e.Resource) -} - -// CheckResponse checks the API response for errors, and returns them if -// present. A response is considered an error if it has a status code outside -// the 200 range or equal to 202 Accepted. -// API error responses are expected to have either no response -// body, or a JSON response body that maps to ErrorResponse. Any other -// response body will be silently ignored. -// -// The error type will be *RateLimitError for rate limit exceeded errors, -// *AcceptedError for 202 Accepted status codes, -// and *TwoFactorAuthError for two-factor authentication errors. -func CheckResponse(r *http.Response) error { - if r.StatusCode == http.StatusAccepted { - return &AcceptedError{} - } - if c := r.StatusCode; 200 <= c && c <= 299 { - return nil - } - errorResponse := &ErrorResponse{Response: r} - data, err := ioutil.ReadAll(r.Body) - if err == nil && data != nil { - json.Unmarshal(data, errorResponse) - } - switch { - case r.StatusCode == http.StatusUnauthorized && strings.HasPrefix(r.Header.Get(headerOTP), "required"): - return (*TwoFactorAuthError)(errorResponse) - case r.StatusCode == http.StatusForbidden && r.Header.Get(headerRateRemaining) == "0" && strings.HasPrefix(errorResponse.Message, "API rate limit exceeded for "): - return &RateLimitError{ - Rate: parseRate(r), - Response: errorResponse.Response, - Message: errorResponse.Message, - } - case r.StatusCode == http.StatusForbidden && strings.HasSuffix(errorResponse.DocumentationURL, "/v3/#abuse-rate-limits"): - abuseRateLimitError := &AbuseRateLimitError{ - Response: errorResponse.Response, - Message: errorResponse.Message, - } - if v := r.Header["Retry-After"]; len(v) > 0 { - // According to GitHub support, the "Retry-After" header value will be - // an integer which represents the number of seconds that one should - // wait before resuming making requests. - retryAfterSeconds, _ := strconv.ParseInt(v[0], 10, 64) // Error handling is noop. - retryAfter := time.Duration(retryAfterSeconds) * time.Second - abuseRateLimitError.RetryAfter = &retryAfter - } - return abuseRateLimitError - default: - return errorResponse - } -} - -// parseBoolResponse determines the boolean result from a GitHub API response. -// Several GitHub API methods return boolean responses indicated by the HTTP -// status code in the response (true indicated by a 204, false indicated by a -// 404). This helper function will determine that result and hide the 404 -// error if present. Any other error will be returned through as-is. -func parseBoolResponse(err error) (bool, error) { - if err == nil { - return true, nil - } - - if err, ok := err.(*ErrorResponse); ok && err.Response.StatusCode == http.StatusNotFound { - // Simply false. In this one case, we do not pass the error through. - return false, nil - } - - // some other real error occurred - return false, err -} - -// Rate represents the rate limit for the current client. -type Rate struct { - // The number of requests per hour the client is currently limited to. - Limit int `json:"limit"` - - // The number of remaining requests the client can make this hour. - Remaining int `json:"remaining"` - - // The time at which the current rate limit will reset. - Reset Timestamp `json:"reset"` -} - -func (r Rate) String() string { - return Stringify(r) -} - -// RateLimits represents the rate limits for the current client. -type RateLimits struct { - // The rate limit for non-search API requests. Unauthenticated - // requests are limited to 60 per hour. Authenticated requests are - // limited to 5,000 per hour. - // - // GitHub API docs: https://developer.github.com/v3/#rate-limiting - Core *Rate `json:"core"` - - // The rate limit for search API requests. Unauthenticated requests - // are limited to 10 requests per minutes. Authenticated requests are - // limited to 30 per minute. - // - // GitHub API docs: https://developer.github.com/v3/search/#rate-limit - Search *Rate `json:"search"` -} - -func (r RateLimits) String() string { - return Stringify(r) -} - -type rateLimitCategory uint8 - -const ( - coreCategory rateLimitCategory = iota - searchCategory - - categories // An array of this length will be able to contain all rate limit categories. -) - -// category returns the rate limit category of the endpoint, determined by Request.URL.Path. -func category(path string) rateLimitCategory { - switch { - default: - return coreCategory - case strings.HasPrefix(path, "/search/"): - return searchCategory - } -} - -// RateLimits returns the rate limits for the current client. -func (c *Client) RateLimits(ctx context.Context) (*RateLimits, *Response, error) { - req, err := c.NewRequest("GET", "rate_limit", nil) - if err != nil { - return nil, nil, err - } - - response := new(struct { - Resources *RateLimits `json:"resources"` - }) - resp, err := c.Do(ctx, req, response) - if err != nil { - return nil, nil, err - } - - if response.Resources != nil { - c.rateMu.Lock() - if response.Resources.Core != nil { - c.rateLimits[coreCategory] = *response.Resources.Core - } - if response.Resources.Search != nil { - c.rateLimits[searchCategory] = *response.Resources.Search - } - c.rateMu.Unlock() - } - - return response.Resources, resp, nil -} - -/* -UnauthenticatedRateLimitedTransport allows you to make unauthenticated calls -that need to use a higher rate limit associated with your OAuth application. - - t := &github.UnauthenticatedRateLimitedTransport{ - ClientID: "your app's client ID", - ClientSecret: "your app's client secret", - } - client := github.NewClient(t.Client()) - -This will append the querystring params client_id=xxx&client_secret=yyy to all -requests. - -See https://developer.github.com/v3/#unauthenticated-rate-limited-requests for -more information. -*/ -type UnauthenticatedRateLimitedTransport struct { - // ClientID is the GitHub OAuth client ID of the current application, which - // can be found by selecting its entry in the list at - // https://github.com/settings/applications. - ClientID string - - // ClientSecret is the GitHub OAuth client secret of the current - // application. - ClientSecret string - - // Transport is the underlying HTTP transport to use when making requests. - // It will default to http.DefaultTransport if nil. - Transport http.RoundTripper -} - -// RoundTrip implements the RoundTripper interface. -func (t *UnauthenticatedRateLimitedTransport) RoundTrip(req *http.Request) (*http.Response, error) { - if t.ClientID == "" { - return nil, errors.New("t.ClientID is empty") - } - if t.ClientSecret == "" { - return nil, errors.New("t.ClientSecret is empty") - } - - // To set extra querystring params, we must make a copy of the Request so - // that we don't modify the Request we were given. This is required by the - // specification of http.RoundTripper. - // - // Since we are going to modify only req.URL here, we only need a deep copy - // of req.URL. - req2 := new(http.Request) - *req2 = *req - req2.URL = new(url.URL) - *req2.URL = *req.URL - - q := req2.URL.Query() - q.Set("client_id", t.ClientID) - q.Set("client_secret", t.ClientSecret) - req2.URL.RawQuery = q.Encode() - - // Make the HTTP request. - return t.transport().RoundTrip(req2) -} - -// Client returns an *http.Client that makes requests which are subject to the -// rate limit of your OAuth application. -func (t *UnauthenticatedRateLimitedTransport) Client() *http.Client { - return &http.Client{Transport: t} -} - -func (t *UnauthenticatedRateLimitedTransport) transport() http.RoundTripper { - if t.Transport != nil { - return t.Transport - } - return http.DefaultTransport -} - -// BasicAuthTransport is an http.RoundTripper that authenticates all requests -// using HTTP Basic Authentication with the provided username and password. It -// additionally supports users who have two-factor authentication enabled on -// their GitHub account. -type BasicAuthTransport struct { - Username string // GitHub username - Password string // GitHub password - OTP string // one-time password for users with two-factor auth enabled - - // Transport is the underlying HTTP transport to use when making requests. - // It will default to http.DefaultTransport if nil. - Transport http.RoundTripper -} - -// RoundTrip implements the RoundTripper interface. -func (t *BasicAuthTransport) RoundTrip(req *http.Request) (*http.Response, error) { - // To set extra headers, we must make a copy of the Request so - // that we don't modify the Request we were given. This is required by the - // specification of http.RoundTripper. - // - // Since we are going to modify only req.Header here, we only need a deep copy - // of req.Header. - req2 := new(http.Request) - *req2 = *req - req2.Header = make(http.Header, len(req.Header)) - for k, s := range req.Header { - req2.Header[k] = append([]string(nil), s...) - } - - req2.SetBasicAuth(t.Username, t.Password) - if t.OTP != "" { - req2.Header.Set(headerOTP, t.OTP) - } - return t.transport().RoundTrip(req2) -} - -// Client returns an *http.Client that makes requests that are authenticated -// using HTTP Basic Authentication. -func (t *BasicAuthTransport) Client() *http.Client { - return &http.Client{Transport: t} -} - -func (t *BasicAuthTransport) transport() http.RoundTripper { - if t.Transport != nil { - return t.Transport - } - return http.DefaultTransport -} - -// formatRateReset formats d to look like "[rate reset in 2s]" or -// "[rate reset in 87m02s]" for the positive durations. And like "[rate limit was reset 87m02s ago]" -// for the negative cases. -func formatRateReset(d time.Duration) string { - isNegative := d < 0 - if isNegative { - d *= -1 - } - secondsTotal := int(0.5 + d.Seconds()) - minutes := secondsTotal / 60 - seconds := secondsTotal - minutes*60 - - var timeString string - if minutes > 0 { - timeString = fmt.Sprintf("%dm%02ds", minutes, seconds) - } else { - timeString = fmt.Sprintf("%ds", seconds) - } - - if isNegative { - return fmt.Sprintf("[rate limit was reset %v ago]", timeString) - } - return fmt.Sprintf("[rate reset in %v]", timeString) -} - -// Bool is a helper routine that allocates a new bool value -// to store v and returns a pointer to it. -func Bool(v bool) *bool { return &v } - -// Int is a helper routine that allocates a new int value -// to store v and returns a pointer to it. -func Int(v int) *int { return &v } - -// Int64 is a helper routine that allocates a new int64 value -// to store v and returns a pointer to it. -func Int64(v int64) *int64 { return &v } - -// String is a helper routine that allocates a new string value -// to store v and returns a pointer to it. -func String(v string) *string { return &v } diff --git a/vendor/github.com/google/go-github/github/gitignore.go b/vendor/github.com/google/go-github/github/gitignore.go deleted file mode 100644 index 2f691bc32..000000000 --- a/vendor/github.com/google/go-github/github/gitignore.go +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" -) - -// GitignoresService provides access to the gitignore related functions in the -// GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/gitignore/ -type GitignoresService service - -// Gitignore represents a .gitignore file as returned by the GitHub API. -type Gitignore struct { - Name *string `json:"name,omitempty"` - Source *string `json:"source,omitempty"` -} - -func (g Gitignore) String() string { - return Stringify(g) -} - -// List all available Gitignore templates. -// -// GitHub API docs: https://developer.github.com/v3/gitignore/#listing-available-templates -func (s GitignoresService) List(ctx context.Context) ([]string, *Response, error) { - req, err := s.client.NewRequest("GET", "gitignore/templates", nil) - if err != nil { - return nil, nil, err - } - - var availableTemplates []string - resp, err := s.client.Do(ctx, req, &availableTemplates) - if err != nil { - return nil, resp, err - } - - return availableTemplates, resp, nil -} - -// Get a Gitignore by name. -// -// GitHub API docs: https://developer.github.com/v3/gitignore/#get-a-single-template -func (s GitignoresService) Get(ctx context.Context, name string) (*Gitignore, *Response, error) { - u := fmt.Sprintf("gitignore/templates/%v", name) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - gitignore := new(Gitignore) - resp, err := s.client.Do(ctx, req, gitignore) - if err != nil { - return nil, resp, err - } - - return gitignore, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/issues.go b/vendor/github.com/google/go-github/github/issues.go deleted file mode 100644 index ded07f0aa..000000000 --- a/vendor/github.com/google/go-github/github/issues.go +++ /dev/null @@ -1,332 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" - "strings" - "time" -) - -// IssuesService handles communication with the issue related -// methods of the GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/issues/ -type IssuesService service - -// Issue represents a GitHub issue on a repository. -// -// Note: As far as the GitHub API is concerned, every pull request is an issue, -// but not every issue is a pull request. Some endpoints, events, and webhooks -// may also return pull requests via this struct. If PullRequestLinks is nil, -// this is an issue, and if PullRequestLinks is not nil, this is a pull request. -// The IsPullRequest helper method can be used to check that. -type Issue struct { - ID *int64 `json:"id,omitempty"` - Number *int `json:"number,omitempty"` - State *string `json:"state,omitempty"` - Locked *bool `json:"locked,omitempty"` - Title *string `json:"title,omitempty"` - Body *string `json:"body,omitempty"` - User *User `json:"user,omitempty"` - Labels []Label `json:"labels,omitempty"` - Assignee *User `json:"assignee,omitempty"` - Comments *int `json:"comments,omitempty"` - ClosedAt *time.Time `json:"closed_at,omitempty"` - CreatedAt *time.Time `json:"created_at,omitempty"` - UpdatedAt *time.Time `json:"updated_at,omitempty"` - ClosedBy *User `json:"closed_by,omitempty"` - URL *string `json:"url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - CommentsURL *string `json:"comments_url,omitempty"` - EventsURL *string `json:"events_url,omitempty"` - LabelsURL *string `json:"labels_url,omitempty"` - RepositoryURL *string `json:"repository_url,omitempty"` - Milestone *Milestone `json:"milestone,omitempty"` - PullRequestLinks *PullRequestLinks `json:"pull_request,omitempty"` - Repository *Repository `json:"repository,omitempty"` - Reactions *Reactions `json:"reactions,omitempty"` - Assignees []*User `json:"assignees,omitempty"` - NodeID *string `json:"node_id,omitempty"` - - // TextMatches is only populated from search results that request text matches - // See: search.go and https://developer.github.com/v3/search/#text-match-metadata - TextMatches []TextMatch `json:"text_matches,omitempty"` -} - -func (i Issue) String() string { - return Stringify(i) -} - -// IsPullRequest reports whether the issue is also a pull request. It uses the -// method recommended by GitHub's API documentation, which is to check whether -// PullRequestLinks is non-nil. -func (i Issue) IsPullRequest() bool { - return i.PullRequestLinks != nil -} - -// IssueRequest represents a request to create/edit an issue. -// It is separate from Issue above because otherwise Labels -// and Assignee fail to serialize to the correct JSON. -type IssueRequest struct { - Title *string `json:"title,omitempty"` - Body *string `json:"body,omitempty"` - Labels *[]string `json:"labels,omitempty"` - Assignee *string `json:"assignee,omitempty"` - State *string `json:"state,omitempty"` - Milestone *int `json:"milestone,omitempty"` - Assignees *[]string `json:"assignees,omitempty"` -} - -// IssueListOptions specifies the optional parameters to the IssuesService.List -// and IssuesService.ListByOrg methods. -type IssueListOptions struct { - // Filter specifies which issues to list. Possible values are: assigned, - // created, mentioned, subscribed, all. Default is "assigned". - Filter string `url:"filter,omitempty"` - - // State filters issues based on their state. Possible values are: open, - // closed, all. Default is "open". - State string `url:"state,omitempty"` - - // Labels filters issues based on their label. - Labels []string `url:"labels,comma,omitempty"` - - // Sort specifies how to sort issues. Possible values are: created, updated, - // and comments. Default value is "created". - Sort string `url:"sort,omitempty"` - - // Direction in which to sort issues. Possible values are: asc, desc. - // Default is "desc". - Direction string `url:"direction,omitempty"` - - // Since filters issues by time. - Since time.Time `url:"since,omitempty"` - - ListOptions -} - -// PullRequestLinks object is added to the Issue object when it's an issue included -// in the IssueCommentEvent webhook payload, if the webhook is fired by a comment on a PR. -type PullRequestLinks struct { - URL *string `json:"url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - DiffURL *string `json:"diff_url,omitempty"` - PatchURL *string `json:"patch_url,omitempty"` -} - -// List the issues for the authenticated user. If all is true, list issues -// across all the user's visible repositories including owned, member, and -// organization repositories; if false, list only owned and member -// repositories. -// -// GitHub API docs: https://developer.github.com/v3/issues/#list-issues -func (s *IssuesService) List(ctx context.Context, all bool, opt *IssueListOptions) ([]*Issue, *Response, error) { - var u string - if all { - u = "issues" - } else { - u = "user/issues" - } - return s.listIssues(ctx, u, opt) -} - -// ListByOrg fetches the issues in the specified organization for the -// authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/issues/#list-issues -func (s *IssuesService) ListByOrg(ctx context.Context, org string, opt *IssueListOptions) ([]*Issue, *Response, error) { - u := fmt.Sprintf("orgs/%v/issues", org) - return s.listIssues(ctx, u, opt) -} - -func (s *IssuesService) listIssues(ctx context.Context, u string, opt *IssueListOptions) ([]*Issue, *Response, error) { - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var issues []*Issue - resp, err := s.client.Do(ctx, req, &issues) - if err != nil { - return nil, resp, err - } - - return issues, resp, nil -} - -// IssueListByRepoOptions specifies the optional parameters to the -// IssuesService.ListByRepo method. -type IssueListByRepoOptions struct { - // Milestone limits issues for the specified milestone. Possible values are - // a milestone number, "none" for issues with no milestone, "*" for issues - // with any milestone. - Milestone string `url:"milestone,omitempty"` - - // State filters issues based on their state. Possible values are: open, - // closed, all. Default is "open". - State string `url:"state,omitempty"` - - // Assignee filters issues based on their assignee. Possible values are a - // user name, "none" for issues that are not assigned, "*" for issues with - // any assigned user. - Assignee string `url:"assignee,omitempty"` - - // Creator filters issues based on their creator. - Creator string `url:"creator,omitempty"` - - // Mentioned filters issues to those mentioned a specific user. - Mentioned string `url:"mentioned,omitempty"` - - // Labels filters issues based on their label. - Labels []string `url:"labels,omitempty,comma"` - - // Sort specifies how to sort issues. Possible values are: created, updated, - // and comments. Default value is "created". - Sort string `url:"sort,omitempty"` - - // Direction in which to sort issues. Possible values are: asc, desc. - // Default is "desc". - Direction string `url:"direction,omitempty"` - - // Since filters issues by time. - Since time.Time `url:"since,omitempty"` - - ListOptions -} - -// ListByRepo lists the issues for the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/issues/#list-issues-for-a-repository -func (s *IssuesService) ListByRepo(ctx context.Context, owner string, repo string, opt *IssueListByRepoOptions) ([]*Issue, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var issues []*Issue - resp, err := s.client.Do(ctx, req, &issues) - if err != nil { - return nil, resp, err - } - - return issues, resp, nil -} - -// Get a single issue. -// -// GitHub API docs: https://developer.github.com/v3/issues/#get-a-single-issue -func (s *IssuesService) Get(ctx context.Context, owner string, repo string, number int) (*Issue, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/%d", owner, repo, number) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - issue := new(Issue) - resp, err := s.client.Do(ctx, req, issue) - if err != nil { - return nil, resp, err - } - - return issue, resp, nil -} - -// Create a new issue on the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/issues/#create-an-issue -func (s *IssuesService) Create(ctx context.Context, owner string, repo string, issue *IssueRequest) (*Issue, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues", owner, repo) - req, err := s.client.NewRequest("POST", u, issue) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - i := new(Issue) - resp, err := s.client.Do(ctx, req, i) - if err != nil { - return nil, resp, err - } - - return i, resp, nil -} - -// Edit an issue. -// -// GitHub API docs: https://developer.github.com/v3/issues/#edit-an-issue -func (s *IssuesService) Edit(ctx context.Context, owner string, repo string, number int, issue *IssueRequest) (*Issue, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/%d", owner, repo, number) - req, err := s.client.NewRequest("PATCH", u, issue) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - i := new(Issue) - resp, err := s.client.Do(ctx, req, i) - if err != nil { - return nil, resp, err - } - - return i, resp, nil -} - -// Lock an issue's conversation. -// -// GitHub API docs: https://developer.github.com/v3/issues/#lock-an-issue -func (s *IssuesService) Lock(ctx context.Context, owner string, repo string, number int) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/%d/lock", owner, repo, number) - req, err := s.client.NewRequest("PUT", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// Unlock an issue's conversation. -// -// GitHub API docs: https://developer.github.com/v3/issues/#unlock-an-issue -func (s *IssuesService) Unlock(ctx context.Context, owner string, repo string, number int) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/%d/lock", owner, repo, number) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/issues_assignees.go b/vendor/github.com/google/go-github/github/issues_assignees.go deleted file mode 100644 index 9cb366f50..000000000 --- a/vendor/github.com/google/go-github/github/issues_assignees.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" -) - -// ListAssignees fetches all available assignees (owners and collaborators) to -// which issues may be assigned. -// -// GitHub API docs: https://developer.github.com/v3/issues/assignees/#list-assignees -func (s *IssuesService) ListAssignees(ctx context.Context, owner, repo string, opt *ListOptions) ([]*User, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/assignees", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - var assignees []*User - resp, err := s.client.Do(ctx, req, &assignees) - if err != nil { - return nil, resp, err - } - - return assignees, resp, nil -} - -// IsAssignee checks if a user is an assignee for the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/issues/assignees/#check-assignee -func (s *IssuesService) IsAssignee(ctx context.Context, owner, repo, user string) (bool, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/assignees/%v", owner, repo, user) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return false, nil, err - } - resp, err := s.client.Do(ctx, req, nil) - assignee, err := parseBoolResponse(err) - return assignee, resp, err -} - -// AddAssignees adds the provided GitHub users as assignees to the issue. -// -// GitHub API docs: https://developer.github.com/v3/issues/assignees/#add-assignees-to-an-issue -func (s *IssuesService) AddAssignees(ctx context.Context, owner, repo string, number int, assignees []string) (*Issue, *Response, error) { - users := &struct { - Assignees []string `json:"assignees,omitempty"` - }{Assignees: assignees} - u := fmt.Sprintf("repos/%v/%v/issues/%v/assignees", owner, repo, number) - req, err := s.client.NewRequest("POST", u, users) - if err != nil { - return nil, nil, err - } - - issue := &Issue{} - resp, err := s.client.Do(ctx, req, issue) - return issue, resp, err -} - -// RemoveAssignees removes the provided GitHub users as assignees from the issue. -// -// GitHub API docs: https://developer.github.com/v3/issues/assignees/#remove-assignees-from-an-issue -func (s *IssuesService) RemoveAssignees(ctx context.Context, owner, repo string, number int, assignees []string) (*Issue, *Response, error) { - users := &struct { - Assignees []string `json:"assignees,omitempty"` - }{Assignees: assignees} - u := fmt.Sprintf("repos/%v/%v/issues/%v/assignees", owner, repo, number) - req, err := s.client.NewRequest("DELETE", u, users) - if err != nil { - return nil, nil, err - } - - issue := &Issue{} - resp, err := s.client.Do(ctx, req, issue) - return issue, resp, err -} diff --git a/vendor/github.com/google/go-github/github/issues_comments.go b/vendor/github.com/google/go-github/github/issues_comments.go deleted file mode 100644 index e6f6f2190..000000000 --- a/vendor/github.com/google/go-github/github/issues_comments.go +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// IssueComment represents a comment left on an issue. -type IssueComment struct { - ID *int64 `json:"id,omitempty"` - Body *string `json:"body,omitempty"` - User *User `json:"user,omitempty"` - Reactions *Reactions `json:"reactions,omitempty"` - CreatedAt *time.Time `json:"created_at,omitempty"` - UpdatedAt *time.Time `json:"updated_at,omitempty"` - // AuthorAssociation is the comment author's relationship to the issue's repository. - // Possible values are "COLLABORATOR", "CONTRIBUTOR", "FIRST_TIMER", "FIRST_TIME_CONTRIBUTOR", "MEMBER", "OWNER", or "NONE". - AuthorAssociation *string `json:"author_association,omitempty"` - URL *string `json:"url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - IssueURL *string `json:"issue_url,omitempty"` -} - -func (i IssueComment) String() string { - return Stringify(i) -} - -// IssueListCommentsOptions specifies the optional parameters to the -// IssuesService.ListComments method. -type IssueListCommentsOptions struct { - // Sort specifies how to sort comments. Possible values are: created, updated. - Sort string `url:"sort,omitempty"` - - // Direction in which to sort comments. Possible values are: asc, desc. - Direction string `url:"direction,omitempty"` - - // Since filters comments by time. - Since time.Time `url:"since,omitempty"` - - ListOptions -} - -// ListComments lists all comments on the specified issue. Specifying an issue -// number of 0 will return all comments on all issues for the repository. -// -// GitHub API docs: https://developer.github.com/v3/issues/comments/#list-comments-on-an-issue -func (s *IssuesService) ListComments(ctx context.Context, owner string, repo string, number int, opt *IssueListCommentsOptions) ([]*IssueComment, *Response, error) { - var u string - if number == 0 { - u = fmt.Sprintf("repos/%v/%v/issues/comments", owner, repo) - } else { - u = fmt.Sprintf("repos/%v/%v/issues/%d/comments", owner, repo, number) - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeReactionsPreview) - - var comments []*IssueComment - resp, err := s.client.Do(ctx, req, &comments) - if err != nil { - return nil, resp, err - } - - return comments, resp, nil -} - -// GetComment fetches the specified issue comment. -// -// GitHub API docs: https://developer.github.com/v3/issues/comments/#get-a-single-comment -func (s *IssuesService) GetComment(ctx context.Context, owner string, repo string, commentID int64) (*IssueComment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/comments/%d", owner, repo, commentID) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeReactionsPreview) - - comment := new(IssueComment) - resp, err := s.client.Do(ctx, req, comment) - if err != nil { - return nil, resp, err - } - - return comment, resp, nil -} - -// CreateComment creates a new comment on the specified issue. -// -// GitHub API docs: https://developer.github.com/v3/issues/comments/#create-a-comment -func (s *IssuesService) CreateComment(ctx context.Context, owner string, repo string, number int, comment *IssueComment) (*IssueComment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/%d/comments", owner, repo, number) - req, err := s.client.NewRequest("POST", u, comment) - if err != nil { - return nil, nil, err - } - c := new(IssueComment) - resp, err := s.client.Do(ctx, req, c) - if err != nil { - return nil, resp, err - } - - return c, resp, nil -} - -// EditComment updates an issue comment. -// A non-nil comment.Body must be provided. Other comment fields should be left nil. -// -// GitHub API docs: https://developer.github.com/v3/issues/comments/#edit-a-comment -func (s *IssuesService) EditComment(ctx context.Context, owner string, repo string, commentID int64, comment *IssueComment) (*IssueComment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/comments/%d", owner, repo, commentID) - req, err := s.client.NewRequest("PATCH", u, comment) - if err != nil { - return nil, nil, err - } - c := new(IssueComment) - resp, err := s.client.Do(ctx, req, c) - if err != nil { - return nil, resp, err - } - - return c, resp, nil -} - -// DeleteComment deletes an issue comment. -// -// GitHub API docs: https://developer.github.com/v3/issues/comments/#delete-a-comment -func (s *IssuesService) DeleteComment(ctx context.Context, owner string, repo string, commentID int64) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/comments/%d", owner, repo, commentID) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/issues_events.go b/vendor/github.com/google/go-github/github/issues_events.go deleted file mode 100644 index 55e6d431b..000000000 --- a/vendor/github.com/google/go-github/github/issues_events.go +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2014 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// IssueEvent represents an event that occurred around an Issue or Pull Request. -type IssueEvent struct { - ID *int64 `json:"id,omitempty"` - URL *string `json:"url,omitempty"` - - // The User that generated this event. - Actor *User `json:"actor,omitempty"` - - // Event identifies the actual type of Event that occurred. Possible - // values are: - // - // closed - // The Actor closed the issue. - // If the issue was closed by commit message, CommitID holds the SHA1 hash of the commit. - // - // merged - // The Actor merged into master a branch containing a commit mentioning the issue. - // CommitID holds the SHA1 of the merge commit. - // - // referenced - // The Actor committed to master a commit mentioning the issue in its commit message. - // CommitID holds the SHA1 of the commit. - // - // reopened, locked, unlocked - // The Actor did that to the issue. - // - // renamed - // The Actor changed the issue title from Rename.From to Rename.To. - // - // mentioned - // Someone unspecified @mentioned the Actor [sic] in an issue comment body. - // - // assigned, unassigned - // The Assigner assigned the issue to or removed the assignment from the Assignee. - // - // labeled, unlabeled - // The Actor added or removed the Label from the issue. - // - // milestoned, demilestoned - // The Actor added or removed the issue from the Milestone. - // - // subscribed, unsubscribed - // The Actor subscribed to or unsubscribed from notifications for an issue. - // - // head_ref_deleted, head_ref_restored - // The pull request’s branch was deleted or restored. - // - Event *string `json:"event,omitempty"` - - CreatedAt *time.Time `json:"created_at,omitempty"` - Issue *Issue `json:"issue,omitempty"` - - // Only present on certain events; see above. - Assignee *User `json:"assignee,omitempty"` - Assigner *User `json:"assigner,omitempty"` - CommitID *string `json:"commit_id,omitempty"` - Milestone *Milestone `json:"milestone,omitempty"` - Label *Label `json:"label,omitempty"` - Rename *Rename `json:"rename,omitempty"` -} - -// ListIssueEvents lists events for the specified issue. -// -// GitHub API docs: https://developer.github.com/v3/issues/events/#list-events-for-an-issue -func (s *IssuesService) ListIssueEvents(ctx context.Context, owner, repo string, number int, opt *ListOptions) ([]*IssueEvent, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/%v/events", owner, repo, number) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var events []*IssueEvent - resp, err := s.client.Do(ctx, req, &events) - if err != nil { - return nil, resp, err - } - - return events, resp, nil -} - -// ListRepositoryEvents lists events for the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/issues/events/#list-events-for-a-repository -func (s *IssuesService) ListRepositoryEvents(ctx context.Context, owner, repo string, opt *ListOptions) ([]*IssueEvent, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/events", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var events []*IssueEvent - resp, err := s.client.Do(ctx, req, &events) - if err != nil { - return nil, resp, err - } - - return events, resp, nil -} - -// GetEvent returns the specified issue event. -// -// GitHub API docs: https://developer.github.com/v3/issues/events/#get-a-single-event -func (s *IssuesService) GetEvent(ctx context.Context, owner, repo string, id int64) (*IssueEvent, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/events/%v", owner, repo, id) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - event := new(IssueEvent) - resp, err := s.client.Do(ctx, req, event) - if err != nil { - return nil, resp, err - } - - return event, resp, nil -} - -// Rename contains details for 'renamed' events. -type Rename struct { - From *string `json:"from,omitempty"` - To *string `json:"to,omitempty"` -} - -func (r Rename) String() string { - return Stringify(r) -} diff --git a/vendor/github.com/google/go-github/github/issues_labels.go b/vendor/github.com/google/go-github/github/issues_labels.go deleted file mode 100644 index 4328997bb..000000000 --- a/vendor/github.com/google/go-github/github/issues_labels.go +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" - "strings" -) - -// Label represents a GitHub label on an Issue -type Label struct { - ID *int64 `json:"id,omitempty"` - URL *string `json:"url,omitempty"` - Name *string `json:"name,omitempty"` - Color *string `json:"color,omitempty"` - Description *string `json:"description,omitempty"` - Default *bool `json:"default,omitempty"` - NodeID *string `json:"node_id,omitempty"` -} - -func (l Label) String() string { - return Stringify(l) -} - -// ListLabels lists all labels for a repository. -// -// GitHub API docs: https://developer.github.com/v3/issues/labels/#list-all-labels-for-this-repository -func (s *IssuesService) ListLabels(ctx context.Context, owner string, repo string, opt *ListOptions) ([]*Label, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/labels", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var labels []*Label - resp, err := s.client.Do(ctx, req, &labels) - if err != nil { - return nil, resp, err - } - - return labels, resp, nil -} - -// GetLabel gets a single label. -// -// GitHub API docs: https://developer.github.com/v3/issues/labels/#get-a-single-label -func (s *IssuesService) GetLabel(ctx context.Context, owner string, repo string, name string) (*Label, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - label := new(Label) - resp, err := s.client.Do(ctx, req, label) - if err != nil { - return nil, resp, err - } - - return label, resp, nil -} - -// CreateLabel creates a new label on the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/issues/labels/#create-a-label -func (s *IssuesService) CreateLabel(ctx context.Context, owner string, repo string, label *Label) (*Label, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/labels", owner, repo) - req, err := s.client.NewRequest("POST", u, label) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - l := new(Label) - resp, err := s.client.Do(ctx, req, l) - if err != nil { - return nil, resp, err - } - - return l, resp, nil -} - -// EditLabel edits a label. -// -// GitHub API docs: https://developer.github.com/v3/issues/labels/#update-a-label -func (s *IssuesService) EditLabel(ctx context.Context, owner string, repo string, name string, label *Label) (*Label, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name) - req, err := s.client.NewRequest("PATCH", u, label) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - l := new(Label) - resp, err := s.client.Do(ctx, req, l) - if err != nil { - return nil, resp, err - } - - return l, resp, nil -} - -// DeleteLabel deletes a label. -// -// GitHub API docs: https://developer.github.com/v3/issues/labels/#delete-a-label -func (s *IssuesService) DeleteLabel(ctx context.Context, owner string, repo string, name string) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/labels/%v", owner, repo, name) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} - -// ListLabelsByIssue lists all labels for an issue. -// -// GitHub API docs: https://developer.github.com/v3/issues/labels/#list-labels-on-an-issue -func (s *IssuesService) ListLabelsByIssue(ctx context.Context, owner string, repo string, number int, opt *ListOptions) ([]*Label, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var labels []*Label - resp, err := s.client.Do(ctx, req, &labels) - if err != nil { - return nil, resp, err - } - - return labels, resp, nil -} - -// AddLabelsToIssue adds labels to an issue. -// -// GitHub API docs: https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue -func (s *IssuesService) AddLabelsToIssue(ctx context.Context, owner string, repo string, number int, labels []string) ([]*Label, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number) - req, err := s.client.NewRequest("POST", u, labels) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var l []*Label - resp, err := s.client.Do(ctx, req, &l) - if err != nil { - return nil, resp, err - } - - return l, resp, nil -} - -// RemoveLabelForIssue removes a label for an issue. -// -// GitHub API docs: https://developer.github.com/v3/issues/labels/#remove-a-label-from-an-issue -func (s *IssuesService) RemoveLabelForIssue(ctx context.Context, owner string, repo string, number int, label string) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/%d/labels/%v", owner, repo, number, label) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview) - - return s.client.Do(ctx, req, nil) -} - -// ReplaceLabelsForIssue replaces all labels for an issue. -// -// GitHub API docs: https://developer.github.com/v3/issues/labels/#replace-all-labels-for-an-issue -func (s *IssuesService) ReplaceLabelsForIssue(ctx context.Context, owner string, repo string, number int, labels []string) ([]*Label, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number) - req, err := s.client.NewRequest("PUT", u, labels) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var l []*Label - resp, err := s.client.Do(ctx, req, &l) - if err != nil { - return nil, resp, err - } - - return l, resp, nil -} - -// RemoveLabelsForIssue removes all labels for an issue. -// -// GitHub API docs: https://developer.github.com/v3/issues/labels/#remove-all-labels-from-an-issue -func (s *IssuesService) RemoveLabelsForIssue(ctx context.Context, owner string, repo string, number int) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/%d/labels", owner, repo, number) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview) - - return s.client.Do(ctx, req, nil) -} - -// ListLabelsForMilestone lists labels for every issue in a milestone. -// -// GitHub API docs: https://developer.github.com/v3/issues/labels/#get-labels-for-every-issue-in-a-milestone -func (s *IssuesService) ListLabelsForMilestone(ctx context.Context, owner string, repo string, number int, opt *ListOptions) ([]*Label, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/milestones/%d/labels", owner, repo, number) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var labels []*Label - resp, err := s.client.Do(ctx, req, &labels) - if err != nil { - return nil, resp, err - } - - return labels, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/issues_milestones.go b/vendor/github.com/google/go-github/github/issues_milestones.go deleted file mode 100644 index 6af1cc03c..000000000 --- a/vendor/github.com/google/go-github/github/issues_milestones.go +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright 2014 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// Milestone represents a GitHub repository milestone. -type Milestone struct { - URL *string `json:"url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - LabelsURL *string `json:"labels_url,omitempty"` - ID *int64 `json:"id,omitempty"` - Number *int `json:"number,omitempty"` - State *string `json:"state,omitempty"` - Title *string `json:"title,omitempty"` - Description *string `json:"description,omitempty"` - Creator *User `json:"creator,omitempty"` - OpenIssues *int `json:"open_issues,omitempty"` - ClosedIssues *int `json:"closed_issues,omitempty"` - CreatedAt *time.Time `json:"created_at,omitempty"` - UpdatedAt *time.Time `json:"updated_at,omitempty"` - ClosedAt *time.Time `json:"closed_at,omitempty"` - DueOn *time.Time `json:"due_on,omitempty"` - NodeID *string `json:"node_id,omitempty"` -} - -func (m Milestone) String() string { - return Stringify(m) -} - -// MilestoneListOptions specifies the optional parameters to the -// IssuesService.ListMilestones method. -type MilestoneListOptions struct { - // State filters milestones based on their state. Possible values are: - // open, closed, all. Default is "open". - State string `url:"state,omitempty"` - - // Sort specifies how to sort milestones. Possible values are: due_on, completeness. - // Default value is "due_on". - Sort string `url:"sort,omitempty"` - - // Direction in which to sort milestones. Possible values are: asc, desc. - // Default is "asc". - Direction string `url:"direction,omitempty"` - - ListOptions -} - -// ListMilestones lists all milestones for a repository. -// -// GitHub API docs: https://developer.github.com/v3/issues/milestones/#list-milestones-for-a-repository -func (s *IssuesService) ListMilestones(ctx context.Context, owner string, repo string, opt *MilestoneListOptions) ([]*Milestone, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/milestones", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - var milestones []*Milestone - resp, err := s.client.Do(ctx, req, &milestones) - if err != nil { - return nil, resp, err - } - - return milestones, resp, nil -} - -// GetMilestone gets a single milestone. -// -// GitHub API docs: https://developer.github.com/v3/issues/milestones/#get-a-single-milestone -func (s *IssuesService) GetMilestone(ctx context.Context, owner string, repo string, number int) (*Milestone, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/milestones/%d", owner, repo, number) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - milestone := new(Milestone) - resp, err := s.client.Do(ctx, req, milestone) - if err != nil { - return nil, resp, err - } - - return milestone, resp, nil -} - -// CreateMilestone creates a new milestone on the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/issues/milestones/#create-a-milestone -func (s *IssuesService) CreateMilestone(ctx context.Context, owner string, repo string, milestone *Milestone) (*Milestone, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/milestones", owner, repo) - req, err := s.client.NewRequest("POST", u, milestone) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - m := new(Milestone) - resp, err := s.client.Do(ctx, req, m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// EditMilestone edits a milestone. -// -// GitHub API docs: https://developer.github.com/v3/issues/milestones/#update-a-milestone -func (s *IssuesService) EditMilestone(ctx context.Context, owner string, repo string, number int, milestone *Milestone) (*Milestone, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/milestones/%d", owner, repo, number) - req, err := s.client.NewRequest("PATCH", u, milestone) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - m := new(Milestone) - resp, err := s.client.Do(ctx, req, m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// DeleteMilestone deletes a milestone. -// -// GitHub API docs: https://developer.github.com/v3/issues/milestones/#delete-a-milestone -func (s *IssuesService) DeleteMilestone(ctx context.Context, owner string, repo string, number int) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/milestones/%d", owner, repo, number) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/issues_timeline.go b/vendor/github.com/google/go-github/github/issues_timeline.go deleted file mode 100644 index 9cfda8320..000000000 --- a/vendor/github.com/google/go-github/github/issues_timeline.go +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2016 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// Timeline represents an event that occurred around an Issue or Pull Request. -// -// It is similar to an IssueEvent but may contain more information. -// GitHub API docs: https://developer.github.com/v3/issues/timeline/ -type Timeline struct { - ID *int64 `json:"id,omitempty"` - URL *string `json:"url,omitempty"` - CommitURL *string `json:"commit_url,omitempty"` - - // The User object that generated the event. - Actor *User `json:"actor,omitempty"` - - // Event identifies the actual type of Event that occurred. Possible values - // are: - // - // assigned - // The issue was assigned to the assignee. - // - // closed - // The issue was closed by the actor. When the commit_id is present, it - // identifies the commit that closed the issue using "closes / fixes #NN" - // syntax. - // - // commented - // A comment was added to the issue. - // - // committed - // A commit was added to the pull request's 'HEAD' branch. Only provided - // for pull requests. - // - // cross-referenced - // The issue was referenced from another issue. The 'source' attribute - // contains the 'id', 'actor', and 'url' of the reference's source. - // - // demilestoned - // The issue was removed from a milestone. - // - // head_ref_deleted - // The pull request's branch was deleted. - // - // head_ref_restored - // The pull request's branch was restored. - // - // labeled - // A label was added to the issue. - // - // locked - // The issue was locked by the actor. - // - // mentioned - // The actor was @mentioned in an issue body. - // - // merged - // The issue was merged by the actor. The 'commit_id' attribute is the - // SHA1 of the HEAD commit that was merged. - // - // milestoned - // The issue was added to a milestone. - // - // referenced - // The issue was referenced from a commit message. The 'commit_id' - // attribute is the commit SHA1 of where that happened. - // - // renamed - // The issue title was changed. - // - // reopened - // The issue was reopened by the actor. - // - // subscribed - // The actor subscribed to receive notifications for an issue. - // - // unassigned - // The assignee was unassigned from the issue. - // - // unlabeled - // A label was removed from the issue. - // - // unlocked - // The issue was unlocked by the actor. - // - // unsubscribed - // The actor unsubscribed to stop receiving notifications for an issue. - // - Event *string `json:"event,omitempty"` - - // The string SHA of a commit that referenced this Issue or Pull Request. - CommitID *string `json:"commit_id,omitempty"` - // The timestamp indicating when the event occurred. - CreatedAt *time.Time `json:"created_at,omitempty"` - // The Label object including `name` and `color` attributes. Only provided for - // 'labeled' and 'unlabeled' events. - Label *Label `json:"label,omitempty"` - // The User object which was assigned to (or unassigned from) this Issue or - // Pull Request. Only provided for 'assigned' and 'unassigned' events. - Assignee *User `json:"assignee,omitempty"` - // The Milestone object including a 'title' attribute. - // Only provided for 'milestoned' and 'demilestoned' events. - Milestone *Milestone `json:"milestone,omitempty"` - // The 'id', 'actor', and 'url' for the source of a reference from another issue. - // Only provided for 'cross-referenced' events. - Source *Source `json:"source,omitempty"` - // An object containing rename details including 'from' and 'to' attributes. - // Only provided for 'renamed' events. - Rename *Rename `json:"rename,omitempty"` -} - -// Source represents a reference's source. -type Source struct { - ID *int64 `json:"id,omitempty"` - URL *string `json:"url,omitempty"` - Actor *User `json:"actor,omitempty"` -} - -// ListIssueTimeline lists events for the specified issue. -// -// GitHub API docs: https://developer.github.com/v3/issues/timeline/#list-events-for-an-issue -func (s *IssuesService) ListIssueTimeline(ctx context.Context, owner, repo string, number int, opt *ListOptions) ([]*Timeline, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/%v/timeline", owner, repo, number) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeTimelinePreview) - - var events []*Timeline - resp, err := s.client.Do(ctx, req, &events) - return events, resp, err -} diff --git a/vendor/github.com/google/go-github/github/licenses.go b/vendor/github.com/google/go-github/github/licenses.go deleted file mode 100644 index e9cd1777a..000000000 --- a/vendor/github.com/google/go-github/github/licenses.go +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" -) - -// LicensesService handles communication with the license related -// methods of the GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/licenses/ -type LicensesService service - -// RepositoryLicense represents the license for a repository. -type RepositoryLicense struct { - Name *string `json:"name,omitempty"` - Path *string `json:"path,omitempty"` - - SHA *string `json:"sha,omitempty"` - Size *int `json:"size,omitempty"` - URL *string `json:"url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - GitURL *string `json:"git_url,omitempty"` - DownloadURL *string `json:"download_url,omitempty"` - Type *string `json:"type,omitempty"` - Content *string `json:"content,omitempty"` - Encoding *string `json:"encoding,omitempty"` - License *License `json:"license,omitempty"` -} - -func (l RepositoryLicense) String() string { - return Stringify(l) -} - -// License represents an open source license. -type License struct { - Key *string `json:"key,omitempty"` - Name *string `json:"name,omitempty"` - URL *string `json:"url,omitempty"` - - SPDXID *string `json:"spdx_id,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - Featured *bool `json:"featured,omitempty"` - Description *string `json:"description,omitempty"` - Implementation *string `json:"implementation,omitempty"` - Permissions *[]string `json:"permissions,omitempty"` - Conditions *[]string `json:"conditions,omitempty"` - Limitations *[]string `json:"limitations,omitempty"` - Body *string `json:"body,omitempty"` -} - -func (l License) String() string { - return Stringify(l) -} - -// List popular open source licenses. -// -// GitHub API docs: https://developer.github.com/v3/licenses/#list-all-licenses -func (s *LicensesService) List(ctx context.Context) ([]*License, *Response, error) { - req, err := s.client.NewRequest("GET", "licenses", nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeLicensesPreview) - - var licenses []*License - resp, err := s.client.Do(ctx, req, &licenses) - if err != nil { - return nil, resp, err - } - - return licenses, resp, nil -} - -// Get extended metadata for one license. -// -// GitHub API docs: https://developer.github.com/v3/licenses/#get-an-individual-license -func (s *LicensesService) Get(ctx context.Context, licenseName string) (*License, *Response, error) { - u := fmt.Sprintf("licenses/%s", licenseName) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeLicensesPreview) - - license := new(License) - resp, err := s.client.Do(ctx, req, license) - if err != nil { - return nil, resp, err - } - - return license, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/messages.go b/vendor/github.com/google/go-github/github/messages.go deleted file mode 100644 index 2396fd431..000000000 --- a/vendor/github.com/google/go-github/github/messages.go +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright 2016 The go-github 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 file provides functions for validating payloads from GitHub Webhooks. -// GitHub API docs: https://developer.github.com/webhooks/securing/#validating-payloads-from-github - -package github - -import ( - "crypto/hmac" - "crypto/sha1" - "crypto/sha256" - "crypto/sha512" - "encoding/hex" - "encoding/json" - "errors" - "fmt" - "hash" - "io/ioutil" - "net/http" - "net/url" - "strings" -) - -const ( - // sha1Prefix is the prefix used by GitHub before the HMAC hexdigest. - sha1Prefix = "sha1" - // sha256Prefix and sha512Prefix are provided for future compatibility. - sha256Prefix = "sha256" - sha512Prefix = "sha512" - // signatureHeader is the GitHub header key used to pass the HMAC hexdigest. - signatureHeader = "X-Hub-Signature" - // eventTypeHeader is the GitHub header key used to pass the event type. - eventTypeHeader = "X-Github-Event" - // deliveryIDHeader is the GitHub header key used to pass the unique ID for the webhook event. - deliveryIDHeader = "X-Github-Delivery" -) - -var ( - // eventTypeMapping maps webhooks types to their corresponding go-github struct types. - eventTypeMapping = map[string]string{ - "commit_comment": "CommitCommentEvent", - "create": "CreateEvent", - "delete": "DeleteEvent", - "deployment": "DeploymentEvent", - "deployment_status": "DeploymentStatusEvent", - "fork": "ForkEvent", - "gollum": "GollumEvent", - "installation": "InstallationEvent", - "installation_repositories": "InstallationRepositoriesEvent", - "issue_comment": "IssueCommentEvent", - "issues": "IssuesEvent", - "label": "LabelEvent", - "marketplace_purchase": "MarketplacePurchaseEvent", - "member": "MemberEvent", - "membership": "MembershipEvent", - "milestone": "MilestoneEvent", - "organization": "OrganizationEvent", - "org_block": "OrgBlockEvent", - "page_build": "PageBuildEvent", - "ping": "PingEvent", - "project": "ProjectEvent", - "project_card": "ProjectCardEvent", - "project_column": "ProjectColumnEvent", - "public": "PublicEvent", - "pull_request_review": "PullRequestReviewEvent", - "pull_request_review_comment": "PullRequestReviewCommentEvent", - "pull_request": "PullRequestEvent", - "push": "PushEvent", - "repository": "RepositoryEvent", - "release": "ReleaseEvent", - "status": "StatusEvent", - "team": "TeamEvent", - "team_add": "TeamAddEvent", - "watch": "WatchEvent", - } -) - -// genMAC generates the HMAC signature for a message provided the secret key -// and hashFunc. -func genMAC(message, key []byte, hashFunc func() hash.Hash) []byte { - mac := hmac.New(hashFunc, key) - mac.Write(message) - return mac.Sum(nil) -} - -// checkMAC reports whether messageMAC is a valid HMAC tag for message. -func checkMAC(message, messageMAC, key []byte, hashFunc func() hash.Hash) bool { - expectedMAC := genMAC(message, key, hashFunc) - return hmac.Equal(messageMAC, expectedMAC) -} - -// messageMAC returns the hex-decoded HMAC tag from the signature and its -// corresponding hash function. -func messageMAC(signature string) ([]byte, func() hash.Hash, error) { - if signature == "" { - return nil, nil, errors.New("missing signature") - } - sigParts := strings.SplitN(signature, "=", 2) - if len(sigParts) != 2 { - return nil, nil, fmt.Errorf("error parsing signature %q", signature) - } - - var hashFunc func() hash.Hash - switch sigParts[0] { - case sha1Prefix: - hashFunc = sha1.New - case sha256Prefix: - hashFunc = sha256.New - case sha512Prefix: - hashFunc = sha512.New - default: - return nil, nil, fmt.Errorf("unknown hash type prefix: %q", sigParts[0]) - } - - buf, err := hex.DecodeString(sigParts[1]) - if err != nil { - return nil, nil, fmt.Errorf("error decoding signature %q: %v", signature, err) - } - return buf, hashFunc, nil -} - -// ValidatePayload validates an incoming GitHub Webhook event request -// and returns the (JSON) payload. -// The Content-Type header of the payload can be "application/json" or "application/x-www-form-urlencoded". -// If the Content-Type is neither then an error is returned. -// secretKey is the GitHub Webhook secret message. -// -// Example usage: -// -// func (s *GitHubEventMonitor) ServeHTTP(w http.ResponseWriter, r *http.Request) { -// payload, err := github.ValidatePayload(r, s.webhookSecretKey) -// if err != nil { ... } -// // Process payload... -// } -// -func ValidatePayload(r *http.Request, secretKey []byte) (payload []byte, err error) { - var body []byte // Raw body that GitHub uses to calculate the signature. - - switch ct := r.Header.Get("Content-Type"); ct { - case "application/json": - var err error - if body, err = ioutil.ReadAll(r.Body); err != nil { - return nil, err - } - - // If the content type is application/json, - // the JSON payload is just the original body. - payload = body - - case "application/x-www-form-urlencoded": - // payloadFormParam is the name of the form parameter that the JSON payload - // will be in if a webhook has its content type set to application/x-www-form-urlencoded. - const payloadFormParam = "payload" - - var err error - if body, err = ioutil.ReadAll(r.Body); err != nil { - return nil, err - } - - // If the content type is application/x-www-form-urlencoded, - // the JSON payload will be under the "payload" form param. - form, err := url.ParseQuery(string(body)) - if err != nil { - return nil, err - } - payload = []byte(form.Get(payloadFormParam)) - - default: - return nil, fmt.Errorf("Webhook request has unsupported Content-Type %q", ct) - } - - sig := r.Header.Get(signatureHeader) - if err := validateSignature(sig, body, secretKey); err != nil { - return nil, err - } - return payload, nil -} - -// validateSignature validates the signature for the given payload. -// signature is the GitHub hash signature delivered in the X-Hub-Signature header. -// payload is the JSON payload sent by GitHub Webhooks. -// secretKey is the GitHub Webhook secret message. -// -// GitHub API docs: https://developer.github.com/webhooks/securing/#validating-payloads-from-github -func validateSignature(signature string, payload, secretKey []byte) error { - messageMAC, hashFunc, err := messageMAC(signature) - if err != nil { - return err - } - if !checkMAC(payload, messageMAC, secretKey, hashFunc) { - return errors.New("payload signature check failed") - } - return nil -} - -// WebHookType returns the event type of webhook request r. -// -// GitHub API docs: https://developer.github.com/v3/repos/hooks/#webhook-headers -func WebHookType(r *http.Request) string { - return r.Header.Get(eventTypeHeader) -} - -// DeliveryID returns the unique delivery ID of webhook request r. -// -// GitHub API docs: https://developer.github.com/v3/repos/hooks/#webhook-headers -func DeliveryID(r *http.Request) string { - return r.Header.Get(deliveryIDHeader) -} - -// ParseWebHook parses the event payload. For recognized event types, a -// value of the corresponding struct type will be returned (as returned -// by Event.ParsePayload()). An error will be returned for unrecognized event -// types. -// -// Example usage: -// -// func (s *GitHubEventMonitor) ServeHTTP(w http.ResponseWriter, r *http.Request) { -// payload, err := github.ValidatePayload(r, s.webhookSecretKey) -// if err != nil { ... } -// event, err := github.ParseWebHook(github.WebHookType(r), payload) -// if err != nil { ... } -// switch event := event.(type) { -// case *github.CommitCommentEvent: -// processCommitCommentEvent(event) -// case *github.CreateEvent: -// processCreateEvent(event) -// ... -// } -// } -// -func ParseWebHook(messageType string, payload []byte) (interface{}, error) { - eventType, ok := eventTypeMapping[messageType] - if !ok { - return nil, fmt.Errorf("unknown X-Github-Event in message: %v", messageType) - } - - event := Event{ - Type: &eventType, - RawPayload: (*json.RawMessage)(&payload), - } - return event.ParsePayload() -} diff --git a/vendor/github.com/google/go-github/github/migrations.go b/vendor/github.com/google/go-github/github/migrations.go deleted file mode 100644 index 90cc1fae8..000000000 --- a/vendor/github.com/google/go-github/github/migrations.go +++ /dev/null @@ -1,224 +0,0 @@ -// Copyright 2016 The go-github 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 github - -import ( - "context" - "errors" - "fmt" - "net/http" - "strings" -) - -// MigrationService provides access to the migration related functions -// in the GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/migration/ -type MigrationService service - -// Migration represents a GitHub migration (archival). -type Migration struct { - ID *int64 `json:"id,omitempty"` - GUID *string `json:"guid,omitempty"` - // State is the current state of a migration. - // Possible values are: - // "pending" which means the migration hasn't started yet, - // "exporting" which means the migration is in progress, - // "exported" which means the migration finished successfully, or - // "failed" which means the migration failed. - State *string `json:"state,omitempty"` - // LockRepositories indicates whether repositories are locked (to prevent - // manipulation) while migrating data. - LockRepositories *bool `json:"lock_repositories,omitempty"` - // ExcludeAttachments indicates whether attachments should be excluded from - // the migration (to reduce migration archive file size). - ExcludeAttachments *bool `json:"exclude_attachments,omitempty"` - URL *string `json:"url,omitempty"` - CreatedAt *string `json:"created_at,omitempty"` - UpdatedAt *string `json:"updated_at,omitempty"` - Repositories []*Repository `json:"repositories,omitempty"` -} - -func (m Migration) String() string { - return Stringify(m) -} - -// MigrationOptions specifies the optional parameters to Migration methods. -type MigrationOptions struct { - // LockRepositories indicates whether repositories should be locked (to prevent - // manipulation) while migrating data. - LockRepositories bool - - // ExcludeAttachments indicates whether attachments should be excluded from - // the migration (to reduce migration archive file size). - ExcludeAttachments bool -} - -// startMigration represents the body of a StartMigration request. -type startMigration struct { - // Repositories is a slice of repository names to migrate. - Repositories []string `json:"repositories,omitempty"` - - // LockRepositories indicates whether repositories should be locked (to prevent - // manipulation) while migrating data. - LockRepositories *bool `json:"lock_repositories,omitempty"` - - // ExcludeAttachments indicates whether attachments should be excluded from - // the migration (to reduce migration archive file size). - ExcludeAttachments *bool `json:"exclude_attachments,omitempty"` -} - -// StartMigration starts the generation of a migration archive. -// repos is a slice of repository names to migrate. -// -// GitHub API docs: https://developer.github.com/v3/migration/migrations/#start-a-migration -func (s *MigrationService) StartMigration(ctx context.Context, org string, repos []string, opt *MigrationOptions) (*Migration, *Response, error) { - u := fmt.Sprintf("orgs/%v/migrations", org) - - body := &startMigration{Repositories: repos} - if opt != nil { - body.LockRepositories = Bool(opt.LockRepositories) - body.ExcludeAttachments = Bool(opt.ExcludeAttachments) - } - - req, err := s.client.NewRequest("POST", u, body) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeMigrationsPreview) - - m := &Migration{} - resp, err := s.client.Do(ctx, req, m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// ListMigrations lists the most recent migrations. -// -// GitHub API docs: https://developer.github.com/v3/migration/migrations/#get-a-list-of-migrations -func (s *MigrationService) ListMigrations(ctx context.Context, org string) ([]*Migration, *Response, error) { - u := fmt.Sprintf("orgs/%v/migrations", org) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeMigrationsPreview) - - var m []*Migration - resp, err := s.client.Do(ctx, req, &m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// MigrationStatus gets the status of a specific migration archive. -// id is the migration ID. -// -// GitHub API docs: https://developer.github.com/v3/migration/migrations/#get-the-status-of-a-migration -func (s *MigrationService) MigrationStatus(ctx context.Context, org string, id int64) (*Migration, *Response, error) { - u := fmt.Sprintf("orgs/%v/migrations/%v", org, id) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeMigrationsPreview) - - m := &Migration{} - resp, err := s.client.Do(ctx, req, m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// MigrationArchiveURL fetches a migration archive URL. -// id is the migration ID. -// -// GitHub API docs: https://developer.github.com/v3/migration/migrations/#download-a-migration-archive -func (s *MigrationService) MigrationArchiveURL(ctx context.Context, org string, id int64) (url string, err error) { - u := fmt.Sprintf("orgs/%v/migrations/%v/archive", org, id) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return "", err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeMigrationsPreview) - - s.client.clientMu.Lock() - defer s.client.clientMu.Unlock() - - // Disable the redirect mechanism because AWS fails if the GitHub auth token is provided. - var loc string - saveRedirect := s.client.client.CheckRedirect - s.client.client.CheckRedirect = func(req *http.Request, via []*http.Request) error { - loc = req.URL.String() - return errors.New("disable redirect") - } - defer func() { s.client.client.CheckRedirect = saveRedirect }() - - _, err = s.client.Do(ctx, req, nil) // expect error from disable redirect - if err == nil { - return "", errors.New("expected redirect, none provided") - } - if !strings.Contains(err.Error(), "disable redirect") { - return "", err - } - return loc, nil -} - -// DeleteMigration deletes a previous migration archive. -// id is the migration ID. -// -// GitHub API docs: https://developer.github.com/v3/migration/migrations/#delete-a-migration-archive -func (s *MigrationService) DeleteMigration(ctx context.Context, org string, id int64) (*Response, error) { - u := fmt.Sprintf("orgs/%v/migrations/%v/archive", org, id) - - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeMigrationsPreview) - - return s.client.Do(ctx, req, nil) -} - -// UnlockRepo unlocks a repository that was locked for migration. -// id is the migration ID. -// You should unlock each migrated repository and delete them when the migration -// is complete and you no longer need the source data. -// -// GitHub API docs: https://developer.github.com/v3/migration/migrations/#unlock-a-repository -func (s *MigrationService) UnlockRepo(ctx context.Context, org string, id int64, repo string) (*Response, error) { - u := fmt.Sprintf("orgs/%v/migrations/%v/repos/%v/lock", org, id, repo) - - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeMigrationsPreview) - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/migrations_source_import.go b/vendor/github.com/google/go-github/github/migrations_source_import.go deleted file mode 100644 index fd45e7800..000000000 --- a/vendor/github.com/google/go-github/github/migrations_source_import.go +++ /dev/null @@ -1,329 +0,0 @@ -// Copyright 2016 The go-github 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 github - -import ( - "context" - "fmt" -) - -// Import represents a repository import request. -type Import struct { - // The URL of the originating repository. - VCSURL *string `json:"vcs_url,omitempty"` - // The originating VCS type. Can be one of 'subversion', 'git', - // 'mercurial', or 'tfvc'. Without this parameter, the import job will - // take additional time to detect the VCS type before beginning the - // import. This detection step will be reflected in the response. - VCS *string `json:"vcs,omitempty"` - // VCSUsername and VCSPassword are only used for StartImport calls that - // are importing a password-protected repository. - VCSUsername *string `json:"vcs_username,omitempty"` - VCSPassword *string `json:"vcs_password,omitempty"` - // For a tfvc import, the name of the project that is being imported. - TFVCProject *string `json:"tfvc_project,omitempty"` - - // LFS related fields that may be preset in the Import Progress response - - // Describes whether the import has been opted in or out of using Git - // LFS. The value can be 'opt_in', 'opt_out', or 'undecided' if no - // action has been taken. - UseLFS *string `json:"use_lfs,omitempty"` - // Describes whether files larger than 100MB were found during the - // importing step. - HasLargeFiles *bool `json:"has_large_files,omitempty"` - // The total size in gigabytes of files larger than 100MB found in the - // originating repository. - LargeFilesSize *int `json:"large_files_size,omitempty"` - // The total number of files larger than 100MB found in the originating - // repository. To see a list of these files, call LargeFiles. - LargeFilesCount *int `json:"large_files_count,omitempty"` - - // Identifies the current status of an import. An import that does not - // have errors will progress through these steps: - // - // detecting - the "detection" step of the import is in progress - // because the request did not include a VCS parameter. The - // import is identifying the type of source control present at - // the URL. - // importing - the "raw" step of the import is in progress. This is - // where commit data is fetched from the original repository. - // The import progress response will include CommitCount (the - // total number of raw commits that will be imported) and - // Percent (0 - 100, the current progress through the import). - // mapping - the "rewrite" step of the import is in progress. This - // is where SVN branches are converted to Git branches, and - // where author updates are applied. The import progress - // response does not include progress information. - // pushing - the "push" step of the import is in progress. This is - // where the importer updates the repository on GitHub. The - // import progress response will include PushPercent, which is - // the percent value reported by git push when it is "Writing - // objects". - // complete - the import is complete, and the repository is ready - // on GitHub. - // - // If there are problems, you will see one of these in the status field: - // - // auth_failed - the import requires authentication in order to - // connect to the original repository. Make an UpdateImport - // request, and include VCSUsername and VCSPassword. - // error - the import encountered an error. The import progress - // response will include the FailedStep and an error message. - // Contact GitHub support for more information. - // detection_needs_auth - the importer requires authentication for - // the originating repository to continue detection. Make an - // UpdatImport request, and include VCSUsername and - // VCSPassword. - // detection_found_nothing - the importer didn't recognize any - // source control at the URL. - // detection_found_multiple - the importer found several projects - // or repositories at the provided URL. When this is the case, - // the Import Progress response will also include a - // ProjectChoices field with the possible project choices as - // values. Make an UpdateImport request, and include VCS and - // (if applicable) TFVCProject. - Status *string `json:"status,omitempty"` - CommitCount *int `json:"commit_count,omitempty"` - StatusText *string `json:"status_text,omitempty"` - AuthorsCount *int `json:"authors_count,omitempty"` - Percent *int `json:"percent,omitempty"` - PushPercent *int `json:"push_percent,omitempty"` - URL *string `json:"url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - AuthorsURL *string `json:"authors_url,omitempty"` - RepositoryURL *string `json:"repository_url,omitempty"` - Message *string `json:"message,omitempty"` - FailedStep *string `json:"failed_step,omitempty"` - - // Human readable display name, provided when the Import appears as - // part of ProjectChoices. - HumanName *string `json:"human_name,omitempty"` - - // When the importer finds several projects or repositories at the - // provided URLs, this will identify the available choices. Call - // UpdateImport with the selected Import value. - ProjectChoices []Import `json:"project_choices,omitempty"` -} - -func (i Import) String() string { - return Stringify(i) -} - -// SourceImportAuthor identifies an author imported from a source repository. -// -// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#get-commit-authors -type SourceImportAuthor struct { - ID *int64 `json:"id,omitempty"` - RemoteID *string `json:"remote_id,omitempty"` - RemoteName *string `json:"remote_name,omitempty"` - Email *string `json:"email,omitempty"` - Name *string `json:"name,omitempty"` - URL *string `json:"url,omitempty"` - ImportURL *string `json:"import_url,omitempty"` -} - -func (a SourceImportAuthor) String() string { - return Stringify(a) -} - -// LargeFile identifies a file larger than 100MB found during a repository import. -// -// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#get-large-files -type LargeFile struct { - RefName *string `json:"ref_name,omitempty"` - Path *string `json:"path,omitempty"` - OID *string `json:"oid,omitempty"` - Size *int `json:"size,omitempty"` -} - -func (f LargeFile) String() string { - return Stringify(f) -} - -// StartImport initiates a repository import. -// -// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#start-an-import -func (s *MigrationService) StartImport(ctx context.Context, owner, repo string, in *Import) (*Import, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/import", owner, repo) - req, err := s.client.NewRequest("PUT", u, in) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeImportPreview) - - out := new(Import) - resp, err := s.client.Do(ctx, req, out) - if err != nil { - return nil, resp, err - } - - return out, resp, nil -} - -// ImportProgress queries for the status and progress of an ongoing repository import. -// -// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#get-import-progress -func (s *MigrationService) ImportProgress(ctx context.Context, owner, repo string) (*Import, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/import", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeImportPreview) - - out := new(Import) - resp, err := s.client.Do(ctx, req, out) - if err != nil { - return nil, resp, err - } - - return out, resp, nil -} - -// UpdateImport initiates a repository import. -// -// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#update-existing-import -func (s *MigrationService) UpdateImport(ctx context.Context, owner, repo string, in *Import) (*Import, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/import", owner, repo) - req, err := s.client.NewRequest("PATCH", u, in) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeImportPreview) - - out := new(Import) - resp, err := s.client.Do(ctx, req, out) - if err != nil { - return nil, resp, err - } - - return out, resp, nil -} - -// CommitAuthors gets the authors mapped from the original repository. -// -// Each type of source control system represents authors in a different way. -// For example, a Git commit author has a display name and an email address, -// but a Subversion commit author just has a username. The GitHub Importer will -// make the author information valid, but the author might not be correct. For -// example, it will change the bare Subversion username "hubot" into something -// like "hubot ". -// -// This method and MapCommitAuthor allow you to provide correct Git author -// information. -// -// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#get-commit-authors -func (s *MigrationService) CommitAuthors(ctx context.Context, owner, repo string) ([]*SourceImportAuthor, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/import/authors", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeImportPreview) - - var authors []*SourceImportAuthor - resp, err := s.client.Do(ctx, req, &authors) - if err != nil { - return nil, resp, err - } - - return authors, resp, nil -} - -// MapCommitAuthor updates an author's identity for the import. Your -// application can continue updating authors any time before you push new -// commits to the repository. -// -// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#map-a-commit-author -func (s *MigrationService) MapCommitAuthor(ctx context.Context, owner, repo string, id int64, author *SourceImportAuthor) (*SourceImportAuthor, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/import/authors/%v", owner, repo, id) - req, err := s.client.NewRequest("PATCH", u, author) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeImportPreview) - - out := new(SourceImportAuthor) - resp, err := s.client.Do(ctx, req, out) - if err != nil { - return nil, resp, err - } - - return out, resp, nil -} - -// SetLFSPreference sets whether imported repositories should use Git LFS for -// files larger than 100MB. Only the UseLFS field on the provided Import is -// used. -// -// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#set-git-lfs-preference -func (s *MigrationService) SetLFSPreference(ctx context.Context, owner, repo string, in *Import) (*Import, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/import/lfs", owner, repo) - req, err := s.client.NewRequest("PATCH", u, in) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeImportPreview) - - out := new(Import) - resp, err := s.client.Do(ctx, req, out) - if err != nil { - return nil, resp, err - } - - return out, resp, nil -} - -// LargeFiles lists files larger than 100MB found during the import. -// -// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#get-large-files -func (s *MigrationService) LargeFiles(ctx context.Context, owner, repo string) ([]*LargeFile, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/import/large_files", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeImportPreview) - - var files []*LargeFile - resp, err := s.client.Do(ctx, req, &files) - if err != nil { - return nil, resp, err - } - - return files, resp, nil -} - -// CancelImport stops an import for a repository. -// -// GitHub API docs: https://developer.github.com/v3/migration/source_imports/#cancel-an-import -func (s *MigrationService) CancelImport(ctx context.Context, owner, repo string) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/import", owner, repo) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeImportPreview) - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/misc.go b/vendor/github.com/google/go-github/github/misc.go deleted file mode 100644 index e9b0ea22a..000000000 --- a/vendor/github.com/google/go-github/github/misc.go +++ /dev/null @@ -1,257 +0,0 @@ -// Copyright 2014 The go-github 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 github - -import ( - "bytes" - "context" - "fmt" - "net/url" -) - -// MarkdownOptions specifies optional parameters to the Markdown method. -type MarkdownOptions struct { - // Mode identifies the rendering mode. Possible values are: - // markdown - render a document as plain Markdown, just like - // README files are rendered. - // - // gfm - to render a document as user-content, e.g. like user - // comments or issues are rendered. In GFM mode, hard line breaks are - // always taken into account, and issue and user mentions are linked - // accordingly. - // - // Default is "markdown". - Mode string - - // Context identifies the repository context. Only taken into account - // when rendering as "gfm". - Context string -} - -type markdownRequest struct { - Text *string `json:"text,omitempty"` - Mode *string `json:"mode,omitempty"` - Context *string `json:"context,omitempty"` -} - -// Markdown renders an arbitrary Markdown document. -// -// GitHub API docs: https://developer.github.com/v3/markdown/ -func (c *Client) Markdown(ctx context.Context, text string, opt *MarkdownOptions) (string, *Response, error) { - request := &markdownRequest{Text: String(text)} - if opt != nil { - if opt.Mode != "" { - request.Mode = String(opt.Mode) - } - if opt.Context != "" { - request.Context = String(opt.Context) - } - } - - req, err := c.NewRequest("POST", "markdown", request) - if err != nil { - return "", nil, err - } - - buf := new(bytes.Buffer) - resp, err := c.Do(ctx, req, buf) - if err != nil { - return "", resp, err - } - - return buf.String(), resp, nil -} - -// ListEmojis returns the emojis available to use on GitHub. -// -// GitHub API docs: https://developer.github.com/v3/emojis/ -func (c *Client) ListEmojis(ctx context.Context) (map[string]string, *Response, error) { - req, err := c.NewRequest("GET", "emojis", nil) - if err != nil { - return nil, nil, err - } - - var emoji map[string]string - resp, err := c.Do(ctx, req, &emoji) - if err != nil { - return nil, resp, err - } - - return emoji, resp, nil -} - -// CodeOfConduct represents a code of conduct. -type CodeOfConduct struct { - Name *string `json:"name,omitempty"` - Key *string `json:"key,omitempty"` - URL *string `json:"url,omitempty"` - Body *string `json:"body,omitempty"` -} - -func (c *CodeOfConduct) String() string { - return Stringify(c) -} - -// ListCodesOfConduct returns all codes of conduct. -// -// GitHub API docs: https://developer.github.com/v3/codes_of_conduct/#list-all-codes-of-conduct -func (c *Client) ListCodesOfConduct(ctx context.Context) ([]*CodeOfConduct, *Response, error) { - req, err := c.NewRequest("GET", "codes_of_conduct", nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeCodesOfConductPreview) - - var cs []*CodeOfConduct - resp, err := c.Do(ctx, req, &cs) - if err != nil { - return nil, resp, err - } - - return cs, resp, nil -} - -// GetCodeOfConduct returns an individual code of conduct. -// -// https://developer.github.com/v3/codes_of_conduct/#get-an-individual-code-of-conduct -func (c *Client) GetCodeOfConduct(ctx context.Context, key string) (*CodeOfConduct, *Response, error) { - u := fmt.Sprintf("codes_of_conduct/%s", key) - req, err := c.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeCodesOfConductPreview) - - coc := new(CodeOfConduct) - resp, err := c.Do(ctx, req, coc) - if err != nil { - return nil, resp, err - } - - return coc, resp, nil -} - -// APIMeta represents metadata about the GitHub API. -type APIMeta struct { - // An Array of IP addresses in CIDR format specifying the addresses - // that incoming service hooks will originate from on GitHub.com. - Hooks []string `json:"hooks,omitempty"` - - // An Array of IP addresses in CIDR format specifying the Git servers - // for GitHub.com. - Git []string `json:"git,omitempty"` - - // Whether authentication with username and password is supported. - // (GitHub Enterprise instances using CAS or OAuth for authentication - // will return false. Features like Basic Authentication with a - // username and password, sudo mode, and two-factor authentication are - // not supported on these servers.) - VerifiablePasswordAuthentication *bool `json:"verifiable_password_authentication,omitempty"` - - // An array of IP addresses in CIDR format specifying the addresses - // which serve GitHub Pages websites. - Pages []string `json:"pages,omitempty"` - - // An Array of IP addresses specifying the addresses that source imports - // will originate from on GitHub.com. - Importer []string `json:"importer,omitempty"` -} - -// APIMeta returns information about GitHub.com, the service. Or, if you access -// this endpoint on your organization’s GitHub Enterprise installation, this -// endpoint provides information about that installation. -// -// GitHub API docs: https://developer.github.com/v3/meta/ -func (c *Client) APIMeta(ctx context.Context) (*APIMeta, *Response, error) { - req, err := c.NewRequest("GET", "meta", nil) - if err != nil { - return nil, nil, err - } - - meta := new(APIMeta) - resp, err := c.Do(ctx, req, meta) - if err != nil { - return nil, resp, err - } - - return meta, resp, nil -} - -// Octocat returns an ASCII art octocat with the specified message in a speech -// bubble. If message is empty, a random zen phrase is used. -func (c *Client) Octocat(ctx context.Context, message string) (string, *Response, error) { - u := "octocat" - if message != "" { - u = fmt.Sprintf("%s?s=%s", u, url.QueryEscape(message)) - } - - req, err := c.NewRequest("GET", u, nil) - if err != nil { - return "", nil, err - } - - buf := new(bytes.Buffer) - resp, err := c.Do(ctx, req, buf) - if err != nil { - return "", resp, err - } - - return buf.String(), resp, nil -} - -// Zen returns a random line from The Zen of GitHub. -// -// see also: http://warpspire.com/posts/taste/ -func (c *Client) Zen(ctx context.Context) (string, *Response, error) { - req, err := c.NewRequest("GET", "zen", nil) - if err != nil { - return "", nil, err - } - - buf := new(bytes.Buffer) - resp, err := c.Do(ctx, req, buf) - if err != nil { - return "", resp, err - } - - return buf.String(), resp, nil -} - -// ServiceHook represents a hook that has configuration settings, a list of -// available events, and default events. -type ServiceHook struct { - Name *string `json:"name,omitempty"` - Events []string `json:"events,omitempty"` - SupportedEvents []string `json:"supported_events,omitempty"` - Schema [][]string `json:"schema,omitempty"` -} - -func (s *ServiceHook) String() string { - return Stringify(s) -} - -// ListServiceHooks lists all of the available service hooks. -// -// GitHub API docs: https://developer.github.com/webhooks/#services -func (c *Client) ListServiceHooks(ctx context.Context) ([]*ServiceHook, *Response, error) { - u := "hooks" - req, err := c.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var hooks []*ServiceHook - resp, err := c.Do(ctx, req, &hooks) - if err != nil { - return nil, resp, err - } - - return hooks, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/orgs.go b/vendor/github.com/google/go-github/github/orgs.go deleted file mode 100644 index 783205358..000000000 --- a/vendor/github.com/google/go-github/github/orgs.go +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// OrganizationsService provides access to the organization related functions -// in the GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/orgs/ -type OrganizationsService service - -// Organization represents a GitHub organization account. -type Organization struct { - Login *string `json:"login,omitempty"` - ID *int64 `json:"id,omitempty"` - AvatarURL *string `json:"avatar_url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - Name *string `json:"name,omitempty"` - Company *string `json:"company,omitempty"` - Blog *string `json:"blog,omitempty"` - Location *string `json:"location,omitempty"` - Email *string `json:"email,omitempty"` - Description *string `json:"description,omitempty"` - PublicRepos *int `json:"public_repos,omitempty"` - PublicGists *int `json:"public_gists,omitempty"` - Followers *int `json:"followers,omitempty"` - Following *int `json:"following,omitempty"` - CreatedAt *time.Time `json:"created_at,omitempty"` - UpdatedAt *time.Time `json:"updated_at,omitempty"` - TotalPrivateRepos *int `json:"total_private_repos,omitempty"` - OwnedPrivateRepos *int `json:"owned_private_repos,omitempty"` - PrivateGists *int `json:"private_gists,omitempty"` - DiskUsage *int `json:"disk_usage,omitempty"` - Collaborators *int `json:"collaborators,omitempty"` - BillingEmail *string `json:"billing_email,omitempty"` - Type *string `json:"type,omitempty"` - Plan *Plan `json:"plan,omitempty"` - NodeID *string `json:"node_id,omitempty"` - - // API URLs - URL *string `json:"url,omitempty"` - EventsURL *string `json:"events_url,omitempty"` - HooksURL *string `json:"hooks_url,omitempty"` - IssuesURL *string `json:"issues_url,omitempty"` - MembersURL *string `json:"members_url,omitempty"` - PublicMembersURL *string `json:"public_members_url,omitempty"` - ReposURL *string `json:"repos_url,omitempty"` -} - -func (o Organization) String() string { - return Stringify(o) -} - -// Plan represents the payment plan for an account. See plans at https://github.com/plans. -type Plan struct { - Name *string `json:"name,omitempty"` - Space *int `json:"space,omitempty"` - Collaborators *int `json:"collaborators,omitempty"` - PrivateRepos *int `json:"private_repos,omitempty"` -} - -func (p Plan) String() string { - return Stringify(p) -} - -// OrganizationsListOptions specifies the optional parameters to the -// OrganizationsService.ListAll method. -type OrganizationsListOptions struct { - // Since filters Organizations by ID. - Since int64 `url:"since,omitempty"` - - // Note: Pagination is powered exclusively by the Since parameter, - // ListOptions.Page has no effect. - // ListOptions.PerPage controls an undocumented GitHub API parameter. - ListOptions -} - -// ListAll lists all organizations, in the order that they were created on GitHub. -// -// Note: Pagination is powered exclusively by the since parameter. To continue -// listing the next set of organizations, use the ID of the last-returned organization -// as the opts.Since parameter for the next call. -// -// GitHub API docs: https://developer.github.com/v3/orgs/#list-all-organizations -func (s *OrganizationsService) ListAll(ctx context.Context, opt *OrganizationsListOptions) ([]*Organization, *Response, error) { - u, err := addOptions("organizations", opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - orgs := []*Organization{} - resp, err := s.client.Do(ctx, req, &orgs) - if err != nil { - return nil, resp, err - } - return orgs, resp, nil -} - -// List the organizations for a user. Passing the empty string will list -// organizations for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/orgs/#list-user-organizations -func (s *OrganizationsService) List(ctx context.Context, user string, opt *ListOptions) ([]*Organization, *Response, error) { - var u string - if user != "" { - u = fmt.Sprintf("users/%v/orgs", user) - } else { - u = "user/orgs" - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - var orgs []*Organization - resp, err := s.client.Do(ctx, req, &orgs) - if err != nil { - return nil, resp, err - } - - return orgs, resp, nil -} - -// Get fetches an organization by name. -// -// GitHub API docs: https://developer.github.com/v3/orgs/#get-an-organization -func (s *OrganizationsService) Get(ctx context.Context, org string) (*Organization, *Response, error) { - u := fmt.Sprintf("orgs/%v", org) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - organization := new(Organization) - resp, err := s.client.Do(ctx, req, organization) - if err != nil { - return nil, resp, err - } - - return organization, resp, nil -} - -// GetByID fetches an organization. -// -// Note: GetByID uses the undocumented GitHub API endpoint /organizations/:id. -func (s *OrganizationsService) GetByID(ctx context.Context, id int64) (*Organization, *Response, error) { - u := fmt.Sprintf("organizations/%d", id) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - organization := new(Organization) - resp, err := s.client.Do(ctx, req, organization) - if err != nil { - return nil, resp, err - } - - return organization, resp, nil -} - -// Edit an organization. -// -// GitHub API docs: https://developer.github.com/v3/orgs/#edit-an-organization -func (s *OrganizationsService) Edit(ctx context.Context, name string, org *Organization) (*Organization, *Response, error) { - u := fmt.Sprintf("orgs/%v", name) - req, err := s.client.NewRequest("PATCH", u, org) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - o := new(Organization) - resp, err := s.client.Do(ctx, req, o) - if err != nil { - return nil, resp, err - } - - return o, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/orgs_hooks.go b/vendor/github.com/google/go-github/github/orgs_hooks.go deleted file mode 100644 index ab1d02da7..000000000 --- a/vendor/github.com/google/go-github/github/orgs_hooks.go +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2015 The go-github 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 github - -import ( - "context" - "fmt" -) - -// ListHooks lists all Hooks for the specified organization. -// -// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#list-hooks -func (s *OrganizationsService) ListHooks(ctx context.Context, org string, opt *ListOptions) ([]*Hook, *Response, error) { - u := fmt.Sprintf("orgs/%v/hooks", org) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var hooks []*Hook - resp, err := s.client.Do(ctx, req, &hooks) - if err != nil { - return nil, resp, err - } - - return hooks, resp, nil -} - -// GetHook returns a single specified Hook. -// -// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#get-single-hook -func (s *OrganizationsService) GetHook(ctx context.Context, org string, id int64) (*Hook, *Response, error) { - u := fmt.Sprintf("orgs/%v/hooks/%d", org, id) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - hook := new(Hook) - resp, err := s.client.Do(ctx, req, hook) - return hook, resp, err -} - -// CreateHook creates a Hook for the specified org. -// Name and Config are required fields. -// -// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#create-a-hook -func (s *OrganizationsService) CreateHook(ctx context.Context, org string, hook *Hook) (*Hook, *Response, error) { - u := fmt.Sprintf("orgs/%v/hooks", org) - req, err := s.client.NewRequest("POST", u, hook) - if err != nil { - return nil, nil, err - } - - h := new(Hook) - resp, err := s.client.Do(ctx, req, h) - if err != nil { - return nil, resp, err - } - - return h, resp, nil -} - -// EditHook updates a specified Hook. -// -// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#edit-a-hook -func (s *OrganizationsService) EditHook(ctx context.Context, org string, id int64, hook *Hook) (*Hook, *Response, error) { - u := fmt.Sprintf("orgs/%v/hooks/%d", org, id) - req, err := s.client.NewRequest("PATCH", u, hook) - if err != nil { - return nil, nil, err - } - h := new(Hook) - resp, err := s.client.Do(ctx, req, h) - return h, resp, err -} - -// PingHook triggers a 'ping' event to be sent to the Hook. -// -// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#ping-a-hook -func (s *OrganizationsService) PingHook(ctx context.Context, org string, id int64) (*Response, error) { - u := fmt.Sprintf("orgs/%v/hooks/%d/pings", org, id) - req, err := s.client.NewRequest("POST", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} - -// DeleteHook deletes a specified Hook. -// -// GitHub API docs: https://developer.github.com/v3/orgs/hooks/#delete-a-hook -func (s *OrganizationsService) DeleteHook(ctx context.Context, org string, id int64) (*Response, error) { - u := fmt.Sprintf("orgs/%v/hooks/%d", org, id) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/orgs_members.go b/vendor/github.com/google/go-github/github/orgs_members.go deleted file mode 100644 index 98e138e7e..000000000 --- a/vendor/github.com/google/go-github/github/orgs_members.go +++ /dev/null @@ -1,370 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" -) - -// Membership represents the status of a user's membership in an organization or team. -type Membership struct { - URL *string `json:"url,omitempty"` - - // State is the user's status within the organization or team. - // Possible values are: "active", "pending" - State *string `json:"state,omitempty"` - - // Role identifies the user's role within the organization or team. - // Possible values for organization membership: - // member - non-owner organization member - // admin - organization owner - // - // Possible values for team membership are: - // member - a normal member of the team - // maintainer - a team maintainer. Able to add/remove other team - // members, promote other team members to team - // maintainer, and edit the team’s name and description - Role *string `json:"role,omitempty"` - - // For organization membership, the API URL of the organization. - OrganizationURL *string `json:"organization_url,omitempty"` - - // For organization membership, the organization the membership is for. - Organization *Organization `json:"organization,omitempty"` - - // For organization membership, the user the membership is for. - User *User `json:"user,omitempty"` -} - -func (m Membership) String() string { - return Stringify(m) -} - -// ListMembersOptions specifies optional parameters to the -// OrganizationsService.ListMembers method. -type ListMembersOptions struct { - // If true (or if the authenticated user is not an owner of the - // organization), list only publicly visible members. - PublicOnly bool `url:"-"` - - // Filter members returned in the list. Possible values are: - // 2fa_disabled, all. Default is "all". - Filter string `url:"filter,omitempty"` - - // Role filters members returned by their role in the organization. - // Possible values are: - // all - all members of the organization, regardless of role - // admin - organization owners - // member - non-organization members - // - // Default is "all". - Role string `url:"role,omitempty"` - - ListOptions -} - -// ListMembers lists the members for an organization. If the authenticated -// user is an owner of the organization, this will return both concealed and -// public members, otherwise it will only return public members. -// -// GitHub API docs: https://developer.github.com/v3/orgs/members/#members-list -func (s *OrganizationsService) ListMembers(ctx context.Context, org string, opt *ListMembersOptions) ([]*User, *Response, error) { - var u string - if opt != nil && opt.PublicOnly { - u = fmt.Sprintf("orgs/%v/public_members", org) - } else { - u = fmt.Sprintf("orgs/%v/members", org) - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var members []*User - resp, err := s.client.Do(ctx, req, &members) - if err != nil { - return nil, resp, err - } - - return members, resp, nil -} - -// IsMember checks if a user is a member of an organization. -// -// GitHub API docs: https://developer.github.com/v3/orgs/members/#check-membership -func (s *OrganizationsService) IsMember(ctx context.Context, org, user string) (bool, *Response, error) { - u := fmt.Sprintf("orgs/%v/members/%v", org, user) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return false, nil, err - } - - resp, err := s.client.Do(ctx, req, nil) - member, err := parseBoolResponse(err) - return member, resp, err -} - -// IsPublicMember checks if a user is a public member of an organization. -// -// GitHub API docs: https://developer.github.com/v3/orgs/members/#check-public-membership -func (s *OrganizationsService) IsPublicMember(ctx context.Context, org, user string) (bool, *Response, error) { - u := fmt.Sprintf("orgs/%v/public_members/%v", org, user) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return false, nil, err - } - - resp, err := s.client.Do(ctx, req, nil) - member, err := parseBoolResponse(err) - return member, resp, err -} - -// RemoveMember removes a user from all teams of an organization. -// -// GitHub API docs: https://developer.github.com/v3/orgs/members/#remove-a-member -func (s *OrganizationsService) RemoveMember(ctx context.Context, org, user string) (*Response, error) { - u := fmt.Sprintf("orgs/%v/members/%v", org, user) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// PublicizeMembership publicizes a user's membership in an organization. (A -// user cannot publicize the membership for another user.) -// -// GitHub API docs: https://developer.github.com/v3/orgs/members/#publicize-a-users-membership -func (s *OrganizationsService) PublicizeMembership(ctx context.Context, org, user string) (*Response, error) { - u := fmt.Sprintf("orgs/%v/public_members/%v", org, user) - req, err := s.client.NewRequest("PUT", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// ConcealMembership conceals a user's membership in an organization. -// -// GitHub API docs: https://developer.github.com/v3/orgs/members/#conceal-a-users-membership -func (s *OrganizationsService) ConcealMembership(ctx context.Context, org, user string) (*Response, error) { - u := fmt.Sprintf("orgs/%v/public_members/%v", org, user) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// ListOrgMembershipsOptions specifies optional parameters to the -// OrganizationsService.ListOrgMemberships method. -type ListOrgMembershipsOptions struct { - // Filter memberships to include only those with the specified state. - // Possible values are: "active", "pending". - State string `url:"state,omitempty"` - - ListOptions -} - -// ListOrgMemberships lists the organization memberships for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/orgs/members/#list-your-organization-memberships -func (s *OrganizationsService) ListOrgMemberships(ctx context.Context, opt *ListOrgMembershipsOptions) ([]*Membership, *Response, error) { - u := "user/memberships/orgs" - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var memberships []*Membership - resp, err := s.client.Do(ctx, req, &memberships) - if err != nil { - return nil, resp, err - } - - return memberships, resp, nil -} - -// GetOrgMembership gets the membership for a user in a specified organization. -// Passing an empty string for user will get the membership for the -// authenticated user. -// -// GitHub API docs: -// https://developer.github.com/v3/orgs/members/#get-organization-membership -// https://developer.github.com/v3/orgs/members/#get-your-organization-membership -func (s *OrganizationsService) GetOrgMembership(ctx context.Context, user, org string) (*Membership, *Response, error) { - var u string - if user != "" { - u = fmt.Sprintf("orgs/%v/memberships/%v", org, user) - } else { - u = fmt.Sprintf("user/memberships/orgs/%v", org) - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - membership := new(Membership) - resp, err := s.client.Do(ctx, req, membership) - if err != nil { - return nil, resp, err - } - - return membership, resp, nil -} - -// EditOrgMembership edits the membership for user in specified organization. -// Passing an empty string for user will edit the membership for the -// authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/orgs/members/#add-or-update-organization-membership -// GitHub API docs: https://developer.github.com/v3/orgs/members/#edit-your-organization-membership -func (s *OrganizationsService) EditOrgMembership(ctx context.Context, user, org string, membership *Membership) (*Membership, *Response, error) { - var u, method string - if user != "" { - u = fmt.Sprintf("orgs/%v/memberships/%v", org, user) - method = "PUT" - } else { - u = fmt.Sprintf("user/memberships/orgs/%v", org) - method = "PATCH" - } - - req, err := s.client.NewRequest(method, u, membership) - if err != nil { - return nil, nil, err - } - - m := new(Membership) - resp, err := s.client.Do(ctx, req, m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// RemoveOrgMembership removes user from the specified organization. If the -// user has been invited to the organization, this will cancel their invitation. -// -// GitHub API docs: https://developer.github.com/v3/orgs/members/#remove-organization-membership -func (s *OrganizationsService) RemoveOrgMembership(ctx context.Context, user, org string) (*Response, error) { - u := fmt.Sprintf("orgs/%v/memberships/%v", org, user) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// ListPendingOrgInvitations returns a list of pending invitations. -// -// GitHub API docs: https://developer.github.com/v3/orgs/members/#list-pending-organization-invitations -func (s *OrganizationsService) ListPendingOrgInvitations(ctx context.Context, org string, opt *ListOptions) ([]*Invitation, *Response, error) { - u := fmt.Sprintf("orgs/%v/invitations", org) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var pendingInvitations []*Invitation - resp, err := s.client.Do(ctx, req, &pendingInvitations) - if err != nil { - return nil, resp, err - } - return pendingInvitations, resp, nil -} - -// CreateOrgInvitationOptions specifies the parameters to the OrganizationService.Invite -// method. -type CreateOrgInvitationOptions struct { - // GitHub user ID for the person you are inviting. Not required if you provide Email. - InviteeID *int64 `json:"invitee_id,omitempty"` - // Email address of the person you are inviting, which can be an existing GitHub user. - // Not required if you provide InviteeID - Email *string `json:"email,omitempty"` - // Specify role for new member. Can be one of: - // * admin - Organization owners with full administrative rights to the - // organization and complete access to all repositories and teams. - // * direct_member - Non-owner organization members with ability to see - // other members and join teams by invitation. - // * billing_manager - Non-owner organization members with ability to - // manage the billing settings of your organization. - // Default is "direct_member". - Role *string `json:"role"` - TeamID []int64 `json:"team_ids"` -} - -// CreateOrgInvitation invites people to an organization by using their GitHub user ID or their email address. -// In order to create invitations in an organization, -// the authenticated user must be an organization owner. -// -// https://developer.github.com/v3/orgs/members/#create-organization-invitation -func (s *OrganizationsService) CreateOrgInvitation(ctx context.Context, org string, opt *CreateOrgInvitationOptions) (*Invitation, *Response, error) { - u := fmt.Sprintf("orgs/%v/invitations", org) - - req, err := s.client.NewRequest("POST", u, opt) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeOrganizationInvitationPreview) - - var invitation *Invitation - resp, err := s.client.Do(ctx, req, &invitation) - if err != nil { - return nil, resp, err - } - return invitation, resp, nil -} - -// ListOrgInvitationTeams lists all teams associated with an invitation. In order to see invitations in an organization, -// the authenticated user must be an organization owner. -// -// GitHub API docs: https://developer.github.com/v3/orgs/members/#list-organization-invitation-teams -func (s *OrganizationsService) ListOrgInvitationTeams(ctx context.Context, org, invitationID string, opt *ListOptions) ([]*Team, *Response, error) { - u := fmt.Sprintf("orgs/%v/invitations/%v/teams", org, invitationID) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeOrganizationInvitationPreview) - - var orgInvitationTeams []*Team - resp, err := s.client.Do(ctx, req, &orgInvitationTeams) - if err != nil { - return nil, resp, err - } - return orgInvitationTeams, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/orgs_outside_collaborators.go b/vendor/github.com/google/go-github/github/orgs_outside_collaborators.go deleted file mode 100644 index 85ffd05f6..000000000 --- a/vendor/github.com/google/go-github/github/orgs_outside_collaborators.go +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2017 The go-github 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 github - -import ( - "context" - "fmt" -) - -// ListOutsideCollaboratorsOptions specifies optional parameters to the -// OrganizationsService.ListOutsideCollaborators method. -type ListOutsideCollaboratorsOptions struct { - // Filter outside collaborators returned in the list. Possible values are: - // 2fa_disabled, all. Default is "all". - Filter string `url:"filter,omitempty"` - - ListOptions -} - -// ListOutsideCollaborators lists outside collaborators of organization's repositories. -// This will only work if the authenticated -// user is an owner of the organization. -// -// Warning: The API may change without advance notice during the preview period. -// Preview features are not supported for production use. -// -// GitHub API docs: https://developer.github.com/v3/orgs/outside_collaborators/#list-outside-collaborators -func (s *OrganizationsService) ListOutsideCollaborators(ctx context.Context, org string, opt *ListOutsideCollaboratorsOptions) ([]*User, *Response, error) { - u := fmt.Sprintf("orgs/%v/outside_collaborators", org) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var members []*User - resp, err := s.client.Do(ctx, req, &members) - if err != nil { - return nil, resp, err - } - - return members, resp, nil -} - -// RemoveOutsideCollaborator removes a user from the list of outside collaborators; -// consequently, removing them from all the organization's repositories. -// -// GitHub API docs: https://developer.github.com/v3/orgs/outside_collaborators/#remove-outside-collaborator -func (s *OrganizationsService) RemoveOutsideCollaborator(ctx context.Context, org string, user string) (*Response, error) { - u := fmt.Sprintf("orgs/%v/outside_collaborators/%v", org, user) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// ConvertMemberToOutsideCollaborator reduces the permission level of a member of the -// organization to that of an outside collaborator. Therefore, they will only -// have access to the repositories that their current team membership allows. -// Responses for converting a non-member or the last owner to an outside collaborator -// are listed in GitHub API docs. -// -// GitHub API docs: https://developer.github.com/v3/orgs/outside_collaborators/#convert-member-to-outside-collaborator -func (s *OrganizationsService) ConvertMemberToOutsideCollaborator(ctx context.Context, org string, user string) (*Response, error) { - u := fmt.Sprintf("orgs/%v/outside_collaborators/%v", org, user) - req, err := s.client.NewRequest("PUT", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/orgs_projects.go b/vendor/github.com/google/go-github/github/orgs_projects.go deleted file mode 100644 index e57cba978..000000000 --- a/vendor/github.com/google/go-github/github/orgs_projects.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2017 The go-github 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 github - -import ( - "context" - "fmt" -) - -// ListProjects lists the projects for an organization. -// -// GitHub API docs: https://developer.github.com/v3/projects/#list-organization-projects -func (s *OrganizationsService) ListProjects(ctx context.Context, org string, opt *ProjectListOptions) ([]*Project, *Response, error) { - u := fmt.Sprintf("orgs/%v/projects", org) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeProjectsPreview) - - var projects []*Project - resp, err := s.client.Do(ctx, req, &projects) - if err != nil { - return nil, resp, err - } - - return projects, resp, nil -} - -// CreateProject creates a GitHub Project for the specified organization. -// -// GitHub API docs: https://developer.github.com/v3/projects/#create-an-organization-project -func (s *OrganizationsService) CreateProject(ctx context.Context, org string, opt *ProjectOptions) (*Project, *Response, error) { - u := fmt.Sprintf("orgs/%v/projects", org) - req, err := s.client.NewRequest("POST", u, opt) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeProjectsPreview) - - project := &Project{} - resp, err := s.client.Do(ctx, req, project) - if err != nil { - return nil, resp, err - } - - return project, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/orgs_teams.go b/vendor/github.com/google/go-github/github/orgs_teams.go deleted file mode 100644 index b3cc9f07d..000000000 --- a/vendor/github.com/google/go-github/github/orgs_teams.go +++ /dev/null @@ -1,514 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" - "strings" - "time" -) - -// Team represents a team within a GitHub organization. Teams are used to -// manage access to an organization's repositories. -type Team struct { - ID *int64 `json:"id,omitempty"` - Name *string `json:"name,omitempty"` - Description *string `json:"description,omitempty"` - URL *string `json:"url,omitempty"` - Slug *string `json:"slug,omitempty"` - - // Permission specifies the default permission for repositories owned by the team. - Permission *string `json:"permission,omitempty"` - - // Privacy identifies the level of privacy this team should have. - // Possible values are: - // secret - only visible to organization owners and members of this team - // closed - visible to all members of this organization - // Default is "secret". - Privacy *string `json:"privacy,omitempty"` - - MembersCount *int `json:"members_count,omitempty"` - ReposCount *int `json:"repos_count,omitempty"` - Organization *Organization `json:"organization,omitempty"` - MembersURL *string `json:"members_url,omitempty"` - RepositoriesURL *string `json:"repositories_url,omitempty"` - Parent *Team `json:"parent,omitempty"` - - // LDAPDN is only available in GitHub Enterprise and when the team - // membership is synchronized with LDAP. - LDAPDN *string `json:"ldap_dn,omitempty"` -} - -func (t Team) String() string { - return Stringify(t) -} - -// Invitation represents a team member's invitation status. -type Invitation struct { - ID *int64 `json:"id,omitempty"` - Login *string `json:"login,omitempty"` - Email *string `json:"email,omitempty"` - // Role can be one of the values - 'direct_member', 'admin', 'billing_manager', 'hiring_manager', or 'reinstate'. - Role *string `json:"role,omitempty"` - CreatedAt *time.Time `json:"created_at,omitempty"` - Inviter *User `json:"inviter,omitempty"` - TeamCount *int `json:"team_count,omitempty"` - InvitationTeamURL *string `json:"invitation_team_url,omitempty"` -} - -func (i Invitation) String() string { - return Stringify(i) -} - -// ListTeams lists all of the teams for an organization. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-teams -func (s *OrganizationsService) ListTeams(ctx context.Context, org string, opt *ListOptions) ([]*Team, *Response, error) { - u := fmt.Sprintf("orgs/%v/teams", org) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeNestedTeamsPreview) - - var teams []*Team - resp, err := s.client.Do(ctx, req, &teams) - if err != nil { - return nil, resp, err - } - - return teams, resp, nil -} - -// GetTeam fetches a team by ID. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#get-team -func (s *OrganizationsService) GetTeam(ctx context.Context, team int64) (*Team, *Response, error) { - u := fmt.Sprintf("teams/%v", team) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeNestedTeamsPreview) - - t := new(Team) - resp, err := s.client.Do(ctx, req, t) - if err != nil { - return nil, resp, err - } - - return t, resp, nil -} - -// NewTeam represents a team to be created or modified. -type NewTeam struct { - Name string `json:"name"` // Name of the team. (Required.) - Description *string `json:"description,omitempty"` - Maintainers []string `json:"maintainers,omitempty"` - RepoNames []string `json:"repo_names,omitempty"` - ParentTeamID *int64 `json:"parent_team_id,omitempty"` - - // Deprecated: Permission is deprecated when creating or editing a team in an org - // using the new GitHub permission model. It no longer identifies the - // permission a team has on its repos, but only specifies the default - // permission a repo is initially added with. Avoid confusion by - // specifying a permission value when calling AddTeamRepo. - Permission *string `json:"permission,omitempty"` - - // Privacy identifies the level of privacy this team should have. - // Possible values are: - // secret - only visible to organization owners and members of this team - // closed - visible to all members of this organization - // Default is "secret". - Privacy *string `json:"privacy,omitempty"` - - // LDAPDN may be used in GitHub Enterprise when the team membership - // is synchronized with LDAP. - LDAPDN *string `json:"ldap_dn,omitempty"` -} - -func (s NewTeam) String() string { - return Stringify(s) -} - -// CreateTeam creates a new team within an organization. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#create-team -func (s *OrganizationsService) CreateTeam(ctx context.Context, org string, team *NewTeam) (*Team, *Response, error) { - u := fmt.Sprintf("orgs/%v/teams", org) - req, err := s.client.NewRequest("POST", u, team) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeNestedTeamsPreview) - - t := new(Team) - resp, err := s.client.Do(ctx, req, t) - if err != nil { - return nil, resp, err - } - - return t, resp, nil -} - -// EditTeam edits a team. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#edit-team -func (s *OrganizationsService) EditTeam(ctx context.Context, id int64, team *NewTeam) (*Team, *Response, error) { - u := fmt.Sprintf("teams/%v", id) - req, err := s.client.NewRequest("PATCH", u, team) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeNestedTeamsPreview) - - t := new(Team) - resp, err := s.client.Do(ctx, req, t) - if err != nil { - return nil, resp, err - } - - return t, resp, nil -} - -// DeleteTeam deletes a team. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#delete-team -func (s *OrganizationsService) DeleteTeam(ctx context.Context, team int64) (*Response, error) { - u := fmt.Sprintf("teams/%v", team) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - req.Header.Set("Accept", mediaTypeNestedTeamsPreview) - - return s.client.Do(ctx, req, nil) -} - -// OrganizationListTeamMembersOptions specifies the optional parameters to the -// OrganizationsService.ListTeamMembers method. -type OrganizationListTeamMembersOptions struct { - // Role filters members returned by their role in the team. Possible - // values are "all", "member", "maintainer". Default is "all". - Role string `url:"role,omitempty"` - - ListOptions -} - -// ListChildTeams lists child teams for a team. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-child-teams -func (s *OrganizationsService) ListChildTeams(ctx context.Context, teamID int64, opt *ListOptions) ([]*Team, *Response, error) { - u := fmt.Sprintf("teams/%v/teams", teamID) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - req.Header.Set("Accept", mediaTypeNestedTeamsPreview) - - var teams []*Team - resp, err := s.client.Do(ctx, req, &teams) - if err != nil { - return nil, resp, err - } - - return teams, resp, nil -} - -// ListTeamMembers lists all of the users who are members of the specified -// team. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-team-members -func (s *OrganizationsService) ListTeamMembers(ctx context.Context, team int64, opt *OrganizationListTeamMembersOptions) ([]*User, *Response, error) { - u := fmt.Sprintf("teams/%v/members", team) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - req.Header.Set("Accept", mediaTypeNestedTeamsPreview) - - var members []*User - resp, err := s.client.Do(ctx, req, &members) - if err != nil { - return nil, resp, err - } - - return members, resp, nil -} - -// IsTeamMember checks if a user is a member of the specified team. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#get-team-member -// -// Deprecated: This API has been marked as deprecated in the Github API docs, -// OrganizationsService.GetTeamMembership method should be used instead. -func (s *OrganizationsService) IsTeamMember(ctx context.Context, team int64, user string) (bool, *Response, error) { - u := fmt.Sprintf("teams/%v/members/%v", team, user) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return false, nil, err - } - - resp, err := s.client.Do(ctx, req, nil) - member, err := parseBoolResponse(err) - return member, resp, err -} - -// ListTeamRepos lists the repositories that the specified team has access to. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-team-repos -func (s *OrganizationsService) ListTeamRepos(ctx context.Context, team int64, opt *ListOptions) ([]*Repository, *Response, error) { - u := fmt.Sprintf("teams/%v/repos", team) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when topics API fully launches. - headers := []string{mediaTypeTopicsPreview, mediaTypeNestedTeamsPreview} - req.Header.Set("Accept", strings.Join(headers, ", ")) - - var repos []*Repository - resp, err := s.client.Do(ctx, req, &repos) - if err != nil { - return nil, resp, err - } - - return repos, resp, nil -} - -// IsTeamRepo checks if a team manages the specified repository. If the -// repository is managed by team, a Repository is returned which includes the -// permissions team has for that repo. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#check-if-a-team-manages-a-repository -func (s *OrganizationsService) IsTeamRepo(ctx context.Context, team int64, owner string, repo string) (*Repository, *Response, error) { - u := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - headers := []string{mediaTypeOrgPermissionRepo, mediaTypeNestedTeamsPreview} - req.Header.Set("Accept", strings.Join(headers, ", ")) - - repository := new(Repository) - resp, err := s.client.Do(ctx, req, repository) - if err != nil { - return nil, resp, err - } - - return repository, resp, nil -} - -// OrganizationAddTeamRepoOptions specifies the optional parameters to the -// OrganizationsService.AddTeamRepo method. -type OrganizationAddTeamRepoOptions struct { - // Permission specifies the permission to grant the team on this repository. - // Possible values are: - // pull - team members can pull, but not push to or administer this repository - // push - team members can pull and push, but not administer this repository - // admin - team members can pull, push and administer this repository - // - // If not specified, the team's permission attribute will be used. - Permission string `json:"permission,omitempty"` -} - -// AddTeamRepo adds a repository to be managed by the specified team. The -// specified repository must be owned by the organization to which the team -// belongs, or a direct fork of a repository owned by the organization. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#add-team-repo -func (s *OrganizationsService) AddTeamRepo(ctx context.Context, team int64, owner string, repo string, opt *OrganizationAddTeamRepoOptions) (*Response, error) { - u := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo) - req, err := s.client.NewRequest("PUT", u, opt) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// RemoveTeamRepo removes a repository from being managed by the specified -// team. Note that this does not delete the repository, it just removes it -// from the team. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#remove-team-repo -func (s *OrganizationsService) RemoveTeamRepo(ctx context.Context, team int64, owner string, repo string) (*Response, error) { - u := fmt.Sprintf("teams/%v/repos/%v/%v", team, owner, repo) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// ListUserTeams lists a user's teams -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-user-teams -func (s *OrganizationsService) ListUserTeams(ctx context.Context, opt *ListOptions) ([]*Team, *Response, error) { - u := "user/teams" - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeNestedTeamsPreview) - - var teams []*Team - resp, err := s.client.Do(ctx, req, &teams) - if err != nil { - return nil, resp, err - } - - return teams, resp, nil -} - -// GetTeamMembership returns the membership status for a user in a team. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#get-team-membership -func (s *OrganizationsService) GetTeamMembership(ctx context.Context, team int64, user string) (*Membership, *Response, error) { - u := fmt.Sprintf("teams/%v/memberships/%v", team, user) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - req.Header.Set("Accept", mediaTypeNestedTeamsPreview) - - t := new(Membership) - resp, err := s.client.Do(ctx, req, t) - if err != nil { - return nil, resp, err - } - - return t, resp, nil -} - -// OrganizationAddTeamMembershipOptions does stuff specifies the optional -// parameters to the OrganizationsService.AddTeamMembership method. -type OrganizationAddTeamMembershipOptions struct { - // Role specifies the role the user should have in the team. Possible - // values are: - // member - a normal member of the team - // maintainer - a team maintainer. Able to add/remove other team - // members, promote other team members to team - // maintainer, and edit the team’s name and description - // - // Default value is "member". - Role string `json:"role,omitempty"` -} - -// AddTeamMembership adds or invites a user to a team. -// -// In order to add a membership between a user and a team, the authenticated -// user must have 'admin' permissions to the team or be an owner of the -// organization that the team is associated with. -// -// If the user is already a part of the team's organization (meaning they're on -// at least one other team in the organization), this endpoint will add the -// user to the team. -// -// If the user is completely unaffiliated with the team's organization (meaning -// they're on none of the organization's teams), this endpoint will send an -// invitation to the user via email. This newly-created membership will be in -// the "pending" state until the user accepts the invitation, at which point -// the membership will transition to the "active" state and the user will be -// added as a member of the team. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#add-team-membership -func (s *OrganizationsService) AddTeamMembership(ctx context.Context, team int64, user string, opt *OrganizationAddTeamMembershipOptions) (*Membership, *Response, error) { - u := fmt.Sprintf("teams/%v/memberships/%v", team, user) - req, err := s.client.NewRequest("PUT", u, opt) - if err != nil { - return nil, nil, err - } - - t := new(Membership) - resp, err := s.client.Do(ctx, req, t) - if err != nil { - return nil, resp, err - } - - return t, resp, nil -} - -// RemoveTeamMembership removes a user from a team. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#remove-team-membership -func (s *OrganizationsService) RemoveTeamMembership(ctx context.Context, team int64, user string) (*Response, error) { - u := fmt.Sprintf("teams/%v/memberships/%v", team, user) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// ListPendingTeamInvitations get pending invitaion list in team. -// Warning: The API may change without advance notice during the preview period. -// Preview features are not supported for production use. -// -// GitHub API docs: https://developer.github.com/v3/orgs/teams/#list-pending-team-invitations -func (s *OrganizationsService) ListPendingTeamInvitations(ctx context.Context, team int64, opt *ListOptions) ([]*Invitation, *Response, error) { - u := fmt.Sprintf("teams/%v/invitations", team) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var pendingInvitations []*Invitation - resp, err := s.client.Do(ctx, req, &pendingInvitations) - if err != nil { - return nil, resp, err - } - - return pendingInvitations, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/orgs_users_blocking.go b/vendor/github.com/google/go-github/github/orgs_users_blocking.go deleted file mode 100644 index b1aecf445..000000000 --- a/vendor/github.com/google/go-github/github/orgs_users_blocking.go +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2017 The go-github 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 github - -import ( - "context" - "fmt" -) - -// ListBlockedUsers lists all the users blocked by an organization. -// -// GitHub API docs: https://developer.github.com/v3/orgs/blocking/#list-blocked-users -func (s *OrganizationsService) ListBlockedUsers(ctx context.Context, org string, opt *ListOptions) ([]*User, *Response, error) { - u := fmt.Sprintf("orgs/%v/blocks", org) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeBlockUsersPreview) - - var blockedUsers []*User - resp, err := s.client.Do(ctx, req, &blockedUsers) - if err != nil { - return nil, resp, err - } - - return blockedUsers, resp, nil -} - -// IsBlocked reports whether specified user is blocked from an organization. -// -// GitHub API docs: https://developer.github.com/v3/orgs/blocking/#check-whether-a-user-is-blocked-from-an-organization -func (s *OrganizationsService) IsBlocked(ctx context.Context, org string, user string) (bool, *Response, error) { - u := fmt.Sprintf("orgs/%v/blocks/%v", org, user) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return false, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeBlockUsersPreview) - - resp, err := s.client.Do(ctx, req, nil) - isBlocked, err := parseBoolResponse(err) - return isBlocked, resp, err -} - -// BlockUser blocks specified user from an organization. -// -// GitHub API docs: https://developer.github.com/v3/orgs/blocking/#block-a-user -func (s *OrganizationsService) BlockUser(ctx context.Context, org string, user string) (*Response, error) { - u := fmt.Sprintf("orgs/%v/blocks/%v", org, user) - - req, err := s.client.NewRequest("PUT", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeBlockUsersPreview) - - return s.client.Do(ctx, req, nil) -} - -// UnblockUser unblocks specified user from an organization. -// -// GitHub API docs: https://developer.github.com/v3/orgs/blocking/#unblock-a-user -func (s *OrganizationsService) UnblockUser(ctx context.Context, org string, user string) (*Response, error) { - u := fmt.Sprintf("orgs/%v/blocks/%v", org, user) - - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeBlockUsersPreview) - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/projects.go b/vendor/github.com/google/go-github/github/projects.go deleted file mode 100644 index 409ed4a24..000000000 --- a/vendor/github.com/google/go-github/github/projects.go +++ /dev/null @@ -1,445 +0,0 @@ -// Copyright 2016 The go-github 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 github - -import ( - "context" - "fmt" - "strings" -) - -// ProjectsService provides access to the projects functions in the -// GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/projects/ -type ProjectsService service - -// Project represents a GitHub Project. -type Project struct { - ID *int64 `json:"id,omitempty"` - URL *string `json:"url,omitempty"` - OwnerURL *string `json:"owner_url,omitempty"` - Name *string `json:"name,omitempty"` - Body *string `json:"body,omitempty"` - Number *int `json:"number,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - NodeID *string `json:"node_id,omitempty"` - - // The User object that generated the project. - Creator *User `json:"creator,omitempty"` -} - -func (p Project) String() string { - return Stringify(p) -} - -// GetProject gets a GitHub Project for a repo. -// -// GitHub API docs: https://developer.github.com/v3/projects/#get-a-project -func (s *ProjectsService) GetProject(ctx context.Context, id int64) (*Project, *Response, error) { - u := fmt.Sprintf("projects/%v", id) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - project := &Project{} - resp, err := s.client.Do(ctx, req, project) - if err != nil { - return nil, resp, err - } - - return project, resp, nil -} - -// ProjectOptions specifies the parameters to the -// RepositoriesService.CreateProject and -// ProjectsService.UpdateProject methods. -type ProjectOptions struct { - // The name of the project. (Required for creation; optional for update.) - Name string `json:"name,omitempty"` - // The body of the project. (Optional.) - Body string `json:"body,omitempty"` - - // The following field(s) are only applicable for update. - // They should be left with zero values for creation. - - // State of the project. Either "open" or "closed". (Optional.) - State string `json:"state,omitempty"` -} - -// UpdateProject updates a repository project. -// -// GitHub API docs: https://developer.github.com/v3/projects/#update-a-project -func (s *ProjectsService) UpdateProject(ctx context.Context, id int64, opt *ProjectOptions) (*Project, *Response, error) { - u := fmt.Sprintf("projects/%v", id) - req, err := s.client.NewRequest("PATCH", u, opt) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - project := &Project{} - resp, err := s.client.Do(ctx, req, project) - if err != nil { - return nil, resp, err - } - - return project, resp, nil -} - -// DeleteProject deletes a GitHub Project from a repository. -// -// GitHub API docs: https://developer.github.com/v3/projects/#delete-a-project -func (s *ProjectsService) DeleteProject(ctx context.Context, id int64) (*Response, error) { - u := fmt.Sprintf("projects/%v", id) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeProjectsPreview) - - return s.client.Do(ctx, req, nil) -} - -// ProjectColumn represents a column of a GitHub Project. -// -// GitHub API docs: https://developer.github.com/v3/repos/projects/ -type ProjectColumn struct { - ID *int64 `json:"id,omitempty"` - Name *string `json:"name,omitempty"` - ProjectURL *string `json:"project_url,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - NodeID *string `json:"node_id,omitempty"` -} - -// ListProjectColumns lists the columns of a GitHub Project for a repo. -// -// GitHub API docs: https://developer.github.com/v3/projects/columns/#list-project-columns -func (s *ProjectsService) ListProjectColumns(ctx context.Context, projectID int64, opt *ListOptions) ([]*ProjectColumn, *Response, error) { - u := fmt.Sprintf("projects/%v/columns", projectID) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - columns := []*ProjectColumn{} - resp, err := s.client.Do(ctx, req, &columns) - if err != nil { - return nil, resp, err - } - - return columns, resp, nil -} - -// GetProjectColumn gets a column of a GitHub Project for a repo. -// -// GitHub API docs: https://developer.github.com/v3/projects/columns/#get-a-project-column -func (s *ProjectsService) GetProjectColumn(ctx context.Context, id int64) (*ProjectColumn, *Response, error) { - u := fmt.Sprintf("projects/columns/%v", id) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - column := &ProjectColumn{} - resp, err := s.client.Do(ctx, req, column) - if err != nil { - return nil, resp, err - } - - return column, resp, nil -} - -// ProjectColumnOptions specifies the parameters to the -// ProjectsService.CreateProjectColumn and -// ProjectsService.UpdateProjectColumn methods. -type ProjectColumnOptions struct { - // The name of the project column. (Required for creation and update.) - Name string `json:"name"` -} - -// CreateProjectColumn creates a column for the specified (by number) project. -// -// GitHub API docs: https://developer.github.com/v3/projects/columns/#create-a-project-column -func (s *ProjectsService) CreateProjectColumn(ctx context.Context, projectID int64, opt *ProjectColumnOptions) (*ProjectColumn, *Response, error) { - u := fmt.Sprintf("projects/%v/columns", projectID) - req, err := s.client.NewRequest("POST", u, opt) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - column := &ProjectColumn{} - resp, err := s.client.Do(ctx, req, column) - if err != nil { - return nil, resp, err - } - - return column, resp, nil -} - -// UpdateProjectColumn updates a column of a GitHub Project. -// -// GitHub API docs: https://developer.github.com/v3/projects/columns/#update-a-project-column -func (s *ProjectsService) UpdateProjectColumn(ctx context.Context, columnID int64, opt *ProjectColumnOptions) (*ProjectColumn, *Response, error) { - u := fmt.Sprintf("projects/columns/%v", columnID) - req, err := s.client.NewRequest("PATCH", u, opt) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - column := &ProjectColumn{} - resp, err := s.client.Do(ctx, req, column) - if err != nil { - return nil, resp, err - } - - return column, resp, nil -} - -// DeleteProjectColumn deletes a column from a GitHub Project. -// -// GitHub API docs: https://developer.github.com/v3/projects/columns/#delete-a-project-column -func (s *ProjectsService) DeleteProjectColumn(ctx context.Context, columnID int64) (*Response, error) { - u := fmt.Sprintf("projects/columns/%v", columnID) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeProjectsPreview) - - return s.client.Do(ctx, req, nil) -} - -// ProjectColumnMoveOptions specifies the parameters to the -// ProjectsService.MoveProjectColumn method. -type ProjectColumnMoveOptions struct { - // Position can be one of "first", "last", or "after:", where - // is the ID of a column in the same project. (Required.) - Position string `json:"position"` -} - -// MoveProjectColumn moves a column within a GitHub Project. -// -// GitHub API docs: https://developer.github.com/v3/projects/columns/#move-a-project-column -func (s *ProjectsService) MoveProjectColumn(ctx context.Context, columnID int64, opt *ProjectColumnMoveOptions) (*Response, error) { - u := fmt.Sprintf("projects/columns/%v/moves", columnID) - req, err := s.client.NewRequest("POST", u, opt) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeProjectsPreview) - - return s.client.Do(ctx, req, nil) -} - -// ProjectCard represents a card in a column of a GitHub Project. -// -// GitHub API docs: https://developer.github.com/v3/projects/cards/#get-a-project-card -type ProjectCard struct { - URL *string `json:"url,omitempty"` - ColumnURL *string `json:"column_url,omitempty"` - ContentURL *string `json:"content_url,omitempty"` - ID *int64 `json:"id,omitempty"` - Note *string `json:"note,omitempty"` - Creator *User `json:"creator,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - NodeID *string `json:"node_id,omitempty"` - - // The following fields are only populated by Webhook events. - ColumnID *int64 `json:"column_id,omitempty"` -} - -// ListProjectCards lists the cards in a column of a GitHub Project. -// -// GitHub API docs: https://developer.github.com/v3/projects/cards/#list-project-cards -func (s *ProjectsService) ListProjectCards(ctx context.Context, columnID int64, opt *ListOptions) ([]*ProjectCard, *Response, error) { - u := fmt.Sprintf("projects/columns/%v/cards", columnID) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - cards := []*ProjectCard{} - resp, err := s.client.Do(ctx, req, &cards) - if err != nil { - return nil, resp, err - } - - return cards, resp, nil -} - -// GetProjectCard gets a card in a column of a GitHub Project. -// -// GitHub API docs: https://developer.github.com/v3/projects/cards/#get-a-project-card -func (s *ProjectsService) GetProjectCard(ctx context.Context, columnID int64) (*ProjectCard, *Response, error) { - u := fmt.Sprintf("projects/columns/cards/%v", columnID) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - card := &ProjectCard{} - resp, err := s.client.Do(ctx, req, card) - if err != nil { - return nil, resp, err - } - - return card, resp, nil -} - -// ProjectCardOptions specifies the parameters to the -// ProjectsService.CreateProjectCard and -// ProjectsService.UpdateProjectCard methods. -type ProjectCardOptions struct { - // The note of the card. Note and ContentID are mutually exclusive. - Note string `json:"note,omitempty"` - // The ID (not Number) of the Issue to associate with this card. - // Note and ContentID are mutually exclusive. - ContentID int64 `json:"content_id,omitempty"` - // The type of content to associate with this card. Possible values are: "Issue". - ContentType string `json:"content_type,omitempty"` -} - -// CreateProjectCard creates a card in the specified column of a GitHub Project. -// -// GitHub API docs: https://developer.github.com/v3/projects/cards/#create-a-project-card -func (s *ProjectsService) CreateProjectCard(ctx context.Context, columnID int64, opt *ProjectCardOptions) (*ProjectCard, *Response, error) { - u := fmt.Sprintf("projects/columns/%v/cards", columnID) - req, err := s.client.NewRequest("POST", u, opt) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - card := &ProjectCard{} - resp, err := s.client.Do(ctx, req, card) - if err != nil { - return nil, resp, err - } - - return card, resp, nil -} - -// UpdateProjectCard updates a card of a GitHub Project. -// -// GitHub API docs: https://developer.github.com/v3/projects/cards/#update-a-project-card -func (s *ProjectsService) UpdateProjectCard(ctx context.Context, cardID int64, opt *ProjectCardOptions) (*ProjectCard, *Response, error) { - u := fmt.Sprintf("projects/columns/cards/%v", cardID) - req, err := s.client.NewRequest("PATCH", u, opt) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - card := &ProjectCard{} - resp, err := s.client.Do(ctx, req, card) - if err != nil { - return nil, resp, err - } - - return card, resp, nil -} - -// DeleteProjectCard deletes a card from a GitHub Project. -// -// GitHub API docs: https://developer.github.com/v3/projects/cards/#delete-a-project-card -func (s *ProjectsService) DeleteProjectCard(ctx context.Context, cardID int64) (*Response, error) { - u := fmt.Sprintf("projects/columns/cards/%v", cardID) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeProjectsPreview) - - return s.client.Do(ctx, req, nil) -} - -// ProjectCardMoveOptions specifies the parameters to the -// ProjectsService.MoveProjectCard method. -type ProjectCardMoveOptions struct { - // Position can be one of "top", "bottom", or "after:", where - // is the ID of a card in the same project. - Position string `json:"position"` - // ColumnID is the ID of a column in the same project. Note that ColumnID - // is required when using Position "after:" when that card is in - // another column; otherwise it is optional. - ColumnID int64 `json:"column_id,omitempty"` -} - -// MoveProjectCard moves a card within a GitHub Project. -// -// GitHub API docs: https://developer.github.com/v3/projects/cards/#move-a-project-card -func (s *ProjectsService) MoveProjectCard(ctx context.Context, cardID int64, opt *ProjectCardMoveOptions) (*Response, error) { - u := fmt.Sprintf("projects/columns/cards/%v/moves", cardID) - req, err := s.client.NewRequest("POST", u, opt) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeProjectsPreview) - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/pulls.go b/vendor/github.com/google/go-github/github/pulls.go deleted file mode 100644 index 1f344690b..000000000 --- a/vendor/github.com/google/go-github/github/pulls.go +++ /dev/null @@ -1,380 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "bytes" - "context" - "fmt" - "strings" - "time" -) - -// PullRequestsService handles communication with the pull request related -// methods of the GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/pulls/ -type PullRequestsService service - -// PullRequest represents a GitHub pull request on a repository. -type PullRequest struct { - ID *int64 `json:"id,omitempty"` - Number *int `json:"number,omitempty"` - State *string `json:"state,omitempty"` - Title *string `json:"title,omitempty"` - Body *string `json:"body,omitempty"` - CreatedAt *time.Time `json:"created_at,omitempty"` - UpdatedAt *time.Time `json:"updated_at,omitempty"` - ClosedAt *time.Time `json:"closed_at,omitempty"` - MergedAt *time.Time `json:"merged_at,omitempty"` - Labels []*Label `json:"labels,omitempty"` - User *User `json:"user,omitempty"` - Merged *bool `json:"merged,omitempty"` - Mergeable *bool `json:"mergeable,omitempty"` - MergeableState *string `json:"mergeable_state,omitempty"` - MergedBy *User `json:"merged_by,omitempty"` - MergeCommitSHA *string `json:"merge_commit_sha,omitempty"` - Comments *int `json:"comments,omitempty"` - Commits *int `json:"commits,omitempty"` - Additions *int `json:"additions,omitempty"` - Deletions *int `json:"deletions,omitempty"` - ChangedFiles *int `json:"changed_files,omitempty"` - URL *string `json:"url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - IssueURL *string `json:"issue_url,omitempty"` - StatusesURL *string `json:"statuses_url,omitempty"` - DiffURL *string `json:"diff_url,omitempty"` - PatchURL *string `json:"patch_url,omitempty"` - CommitsURL *string `json:"commits_url,omitempty"` - CommentsURL *string `json:"comments_url,omitempty"` - ReviewCommentsURL *string `json:"review_comments_url,omitempty"` - ReviewCommentURL *string `json:"review_comment_url,omitempty"` - Assignee *User `json:"assignee,omitempty"` - Assignees []*User `json:"assignees,omitempty"` - Milestone *Milestone `json:"milestone,omitempty"` - MaintainerCanModify *bool `json:"maintainer_can_modify,omitempty"` - AuthorAssociation *string `json:"author_association,omitempty"` - NodeID *string `json:"node_id,omitempty"` - RequestedReviewers []*User `json:"requested_reviewers,omitempty"` - - Head *PullRequestBranch `json:"head,omitempty"` - Base *PullRequestBranch `json:"base,omitempty"` -} - -func (p PullRequest) String() string { - return Stringify(p) -} - -// PullRequestBranch represents a base or head branch in a GitHub pull request. -type PullRequestBranch struct { - Label *string `json:"label,omitempty"` - Ref *string `json:"ref,omitempty"` - SHA *string `json:"sha,omitempty"` - Repo *Repository `json:"repo,omitempty"` - User *User `json:"user,omitempty"` -} - -// PullRequestListOptions specifies the optional parameters to the -// PullRequestsService.List method. -type PullRequestListOptions struct { - // State filters pull requests based on their state. Possible values are: - // open, closed. Default is "open". - State string `url:"state,omitempty"` - - // Head filters pull requests by head user and branch name in the format of: - // "user:ref-name". - Head string `url:"head,omitempty"` - - // Base filters pull requests by base branch name. - Base string `url:"base,omitempty"` - - // Sort specifies how to sort pull requests. Possible values are: created, - // updated, popularity, long-running. Default is "created". - Sort string `url:"sort,omitempty"` - - // Direction in which to sort pull requests. Possible values are: asc, desc. - // If Sort is "created" or not specified, Default is "desc", otherwise Default - // is "asc" - Direction string `url:"direction,omitempty"` - - ListOptions -} - -// List the pull requests for the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/pulls/#list-pull-requests -func (s *PullRequestsService) List(ctx context.Context, owner string, repo string, opt *PullRequestListOptions) ([]*PullRequest, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var pulls []*PullRequest - resp, err := s.client.Do(ctx, req, &pulls) - if err != nil { - return nil, resp, err - } - - return pulls, resp, nil -} - -// Get a single pull request. -// -// GitHub API docs: https://developer.github.com/v3/pulls/#get-a-single-pull-request -func (s *PullRequestsService) Get(ctx context.Context, owner string, repo string, number int) (*PullRequest, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d", owner, repo, number) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - pull := new(PullRequest) - resp, err := s.client.Do(ctx, req, pull) - if err != nil { - return nil, resp, err - } - - return pull, resp, nil -} - -// GetRaw gets a single pull request in raw (diff or patch) format. -func (s *PullRequestsService) GetRaw(ctx context.Context, owner string, repo string, number int, opt RawOptions) (string, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d", owner, repo, number) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return "", nil, err - } - - switch opt.Type { - case Diff: - req.Header.Set("Accept", mediaTypeV3Diff) - case Patch: - req.Header.Set("Accept", mediaTypeV3Patch) - default: - return "", nil, fmt.Errorf("unsupported raw type %d", opt.Type) - } - - var buf bytes.Buffer - resp, err := s.client.Do(ctx, req, &buf) - if err != nil { - return "", resp, err - } - - return buf.String(), resp, nil -} - -// NewPullRequest represents a new pull request to be created. -type NewPullRequest struct { - Title *string `json:"title,omitempty"` - Head *string `json:"head,omitempty"` - Base *string `json:"base,omitempty"` - Body *string `json:"body,omitempty"` - Issue *int `json:"issue,omitempty"` - MaintainerCanModify *bool `json:"maintainer_can_modify,omitempty"` -} - -// Create a new pull request on the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/pulls/#create-a-pull-request -func (s *PullRequestsService) Create(ctx context.Context, owner string, repo string, pull *NewPullRequest) (*PullRequest, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls", owner, repo) - req, err := s.client.NewRequest("POST", u, pull) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - p := new(PullRequest) - resp, err := s.client.Do(ctx, req, p) - if err != nil { - return nil, resp, err - } - - return p, resp, nil -} - -type pullRequestUpdate struct { - Title *string `json:"title,omitempty"` - Body *string `json:"body,omitempty"` - State *string `json:"state,omitempty"` - Base *string `json:"base,omitempty"` - MaintainerCanModify *bool `json:"maintainer_can_modify,omitempty"` -} - -// Edit a pull request. -// pull must not be nil. -// -// The following fields are editable: Title, Body, State, Base.Ref and MaintainerCanModify. -// Base.Ref updates the base branch of the pull request. -// -// GitHub API docs: https://developer.github.com/v3/pulls/#update-a-pull-request -func (s *PullRequestsService) Edit(ctx context.Context, owner string, repo string, number int, pull *PullRequest) (*PullRequest, *Response, error) { - if pull == nil { - return nil, nil, fmt.Errorf("pull must be provided") - } - - u := fmt.Sprintf("repos/%v/%v/pulls/%d", owner, repo, number) - - update := &pullRequestUpdate{ - Title: pull.Title, - Body: pull.Body, - State: pull.State, - MaintainerCanModify: pull.MaintainerCanModify, - } - if pull.Base != nil { - update.Base = pull.Base.Ref - } - - req, err := s.client.NewRequest("PATCH", u, update) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - acceptHeaders := []string{mediaTypeGraphQLNodeIDPreview, mediaTypeLabelDescriptionSearchPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - p := new(PullRequest) - resp, err := s.client.Do(ctx, req, p) - if err != nil { - return nil, resp, err - } - - return p, resp, nil -} - -// ListCommits lists the commits in a pull request. -// -// GitHub API docs: https://developer.github.com/v3/pulls/#list-commits-on-a-pull-request -func (s *PullRequestsService) ListCommits(ctx context.Context, owner string, repo string, number int, opt *ListOptions) ([]*RepositoryCommit, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d/commits", owner, repo, number) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGitSigningPreview) - - var commits []*RepositoryCommit - resp, err := s.client.Do(ctx, req, &commits) - if err != nil { - return nil, resp, err - } - - return commits, resp, nil -} - -// ListFiles lists the files in a pull request. -// -// GitHub API docs: https://developer.github.com/v3/pulls/#list-pull-requests-files -func (s *PullRequestsService) ListFiles(ctx context.Context, owner string, repo string, number int, opt *ListOptions) ([]*CommitFile, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d/files", owner, repo, number) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var commitFiles []*CommitFile - resp, err := s.client.Do(ctx, req, &commitFiles) - if err != nil { - return nil, resp, err - } - - return commitFiles, resp, nil -} - -// IsMerged checks if a pull request has been merged. -// -// GitHub API docs: https://developer.github.com/v3/pulls/#get-if-a-pull-request-has-been-merged -func (s *PullRequestsService) IsMerged(ctx context.Context, owner string, repo string, number int) (bool, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d/merge", owner, repo, number) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return false, nil, err - } - - resp, err := s.client.Do(ctx, req, nil) - merged, err := parseBoolResponse(err) - return merged, resp, err -} - -// PullRequestMergeResult represents the result of merging a pull request. -type PullRequestMergeResult struct { - SHA *string `json:"sha,omitempty"` - Merged *bool `json:"merged,omitempty"` - Message *string `json:"message,omitempty"` -} - -// PullRequestOptions lets you define how a pull request will be merged. -type PullRequestOptions struct { - CommitTitle string // Extra detail to append to automatic commit message. (Optional.) - SHA string // SHA that pull request head must match to allow merge. (Optional.) - - // The merge method to use. Possible values include: "merge", "squash", and "rebase" with the default being merge. (Optional.) - MergeMethod string -} - -type pullRequestMergeRequest struct { - CommitMessage string `json:"commit_message"` - CommitTitle string `json:"commit_title,omitempty"` - MergeMethod string `json:"merge_method,omitempty"` - SHA string `json:"sha,omitempty"` -} - -// Merge a pull request (Merge Button™). -// commitMessage is the title for the automatic commit message. -// -// GitHub API docs: https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-buttontrade -func (s *PullRequestsService) Merge(ctx context.Context, owner string, repo string, number int, commitMessage string, options *PullRequestOptions) (*PullRequestMergeResult, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d/merge", owner, repo, number) - - pullRequestBody := &pullRequestMergeRequest{CommitMessage: commitMessage} - if options != nil { - pullRequestBody.CommitTitle = options.CommitTitle - pullRequestBody.MergeMethod = options.MergeMethod - pullRequestBody.SHA = options.SHA - } - req, err := s.client.NewRequest("PUT", u, pullRequestBody) - if err != nil { - return nil, nil, err - } - - mergeResult := new(PullRequestMergeResult) - resp, err := s.client.Do(ctx, req, mergeResult) - if err != nil { - return nil, resp, err - } - - return mergeResult, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/pulls_comments.go b/vendor/github.com/google/go-github/github/pulls_comments.go deleted file mode 100644 index a7f8ac30c..000000000 --- a/vendor/github.com/google/go-github/github/pulls_comments.go +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// PullRequestComment represents a comment left on a pull request. -type PullRequestComment struct { - ID *int64 `json:"id,omitempty"` - InReplyTo *int64 `json:"in_reply_to,omitempty"` - Body *string `json:"body,omitempty"` - Path *string `json:"path,omitempty"` - DiffHunk *string `json:"diff_hunk,omitempty"` - PullRequestReviewID *int64 `json:"pull_request_review_id,omitempty"` - Position *int `json:"position,omitempty"` - OriginalPosition *int `json:"original_position,omitempty"` - CommitID *string `json:"commit_id,omitempty"` - OriginalCommitID *string `json:"original_commit_id,omitempty"` - User *User `json:"user,omitempty"` - Reactions *Reactions `json:"reactions,omitempty"` - CreatedAt *time.Time `json:"created_at,omitempty"` - UpdatedAt *time.Time `json:"updated_at,omitempty"` - // AuthorAssociation is the comment author's relationship to the pull request's repository. - // Possible values are "COLLABORATOR", "CONTRIBUTOR", "FIRST_TIMER", "FIRST_TIME_CONTRIBUTOR", "MEMBER", "OWNER", or "NONE". - AuthorAssociation *string `json:"author_association,omitempty"` - URL *string `json:"url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - PullRequestURL *string `json:"pull_request_url,omitempty"` -} - -func (p PullRequestComment) String() string { - return Stringify(p) -} - -// PullRequestListCommentsOptions specifies the optional parameters to the -// PullRequestsService.ListComments method. -type PullRequestListCommentsOptions struct { - // Sort specifies how to sort comments. Possible values are: created, updated. - Sort string `url:"sort,omitempty"` - - // Direction in which to sort comments. Possible values are: asc, desc. - Direction string `url:"direction,omitempty"` - - // Since filters comments by time. - Since time.Time `url:"since,omitempty"` - - ListOptions -} - -// ListComments lists all comments on the specified pull request. Specifying a -// pull request number of 0 will return all comments on all pull requests for -// the repository. -// -// GitHub API docs: https://developer.github.com/v3/pulls/comments/#list-comments-on-a-pull-request -func (s *PullRequestsService) ListComments(ctx context.Context, owner string, repo string, number int, opt *PullRequestListCommentsOptions) ([]*PullRequestComment, *Response, error) { - var u string - if number == 0 { - u = fmt.Sprintf("repos/%v/%v/pulls/comments", owner, repo) - } else { - u = fmt.Sprintf("repos/%v/%v/pulls/%d/comments", owner, repo, number) - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeReactionsPreview) - - var comments []*PullRequestComment - resp, err := s.client.Do(ctx, req, &comments) - if err != nil { - return nil, resp, err - } - - return comments, resp, nil -} - -// GetComment fetches the specified pull request comment. -// -// GitHub API docs: https://developer.github.com/v3/pulls/comments/#get-a-single-comment -func (s *PullRequestsService) GetComment(ctx context.Context, owner string, repo string, commentID int64) (*PullRequestComment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/comments/%d", owner, repo, commentID) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeReactionsPreview) - - comment := new(PullRequestComment) - resp, err := s.client.Do(ctx, req, comment) - if err != nil { - return nil, resp, err - } - - return comment, resp, nil -} - -// CreateComment creates a new comment on the specified pull request. -// -// GitHub API docs: https://developer.github.com/v3/pulls/comments/#create-a-comment -func (s *PullRequestsService) CreateComment(ctx context.Context, owner string, repo string, number int, comment *PullRequestComment) (*PullRequestComment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d/comments", owner, repo, number) - req, err := s.client.NewRequest("POST", u, comment) - if err != nil { - return nil, nil, err - } - - c := new(PullRequestComment) - resp, err := s.client.Do(ctx, req, c) - if err != nil { - return nil, resp, err - } - - return c, resp, nil -} - -// EditComment updates a pull request comment. -// A non-nil comment.Body must be provided. Other comment fields should be left nil. -// -// GitHub API docs: https://developer.github.com/v3/pulls/comments/#edit-a-comment -func (s *PullRequestsService) EditComment(ctx context.Context, owner string, repo string, commentID int64, comment *PullRequestComment) (*PullRequestComment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/comments/%d", owner, repo, commentID) - req, err := s.client.NewRequest("PATCH", u, comment) - if err != nil { - return nil, nil, err - } - - c := new(PullRequestComment) - resp, err := s.client.Do(ctx, req, c) - if err != nil { - return nil, resp, err - } - - return c, resp, nil -} - -// DeleteComment deletes a pull request comment. -// -// GitHub API docs: https://developer.github.com/v3/pulls/comments/#delete-a-comment -func (s *PullRequestsService) DeleteComment(ctx context.Context, owner string, repo string, commentID int64) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/comments/%d", owner, repo, commentID) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/pulls_reviewers.go b/vendor/github.com/google/go-github/github/pulls_reviewers.go deleted file mode 100644 index a1d785315..000000000 --- a/vendor/github.com/google/go-github/github/pulls_reviewers.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2017 The go-github 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 github - -import ( - "context" - "fmt" -) - -// ReviewersRequest specifies users and teams for a pull request review request. -type ReviewersRequest struct { - Reviewers []string `json:"reviewers,omitempty"` - TeamReviewers []string `json:"team_reviewers,omitempty"` -} - -// Reviewers represents reviewers of a pull request. -type Reviewers struct { - Users []*User `json:"users,omitempty"` - Teams []*Team `json:"teams,omitempty"` -} - -// RequestReviewers creates a review request for the provided reviewers for the specified pull request. -// -// GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#create-a-review-request -func (s *PullRequestsService) RequestReviewers(ctx context.Context, owner, repo string, number int, reviewers ReviewersRequest) (*PullRequest, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, number) - req, err := s.client.NewRequest("POST", u, &reviewers) - if err != nil { - return nil, nil, err - } - - r := new(PullRequest) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, nil -} - -// ListReviewers lists reviewers whose reviews have been requested on the specified pull request. -// -// GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#list-review-requests -func (s *PullRequestsService) ListReviewers(ctx context.Context, owner, repo string, number int, opt *ListOptions) (*Reviewers, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d/requested_reviewers", owner, repo, number) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - reviewers := new(Reviewers) - resp, err := s.client.Do(ctx, req, reviewers) - if err != nil { - return nil, resp, err - } - - return reviewers, resp, nil -} - -// RemoveReviewers removes the review request for the provided reviewers for the specified pull request. -// -// GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#delete-a-review-request -func (s *PullRequestsService) RemoveReviewers(ctx context.Context, owner, repo string, number int, reviewers ReviewersRequest) (*Response, error) { - u := fmt.Sprintf("repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, number) - req, err := s.client.NewRequest("DELETE", u, &reviewers) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/pulls_reviews.go b/vendor/github.com/google/go-github/github/pulls_reviews.go deleted file mode 100644 index 57d3c635e..000000000 --- a/vendor/github.com/google/go-github/github/pulls_reviews.go +++ /dev/null @@ -1,236 +0,0 @@ -// Copyright 2016 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// PullRequestReview represents a review of a pull request. -type PullRequestReview struct { - ID *int64 `json:"id,omitempty"` - User *User `json:"user,omitempty"` - Body *string `json:"body,omitempty"` - SubmittedAt *time.Time `json:"submitted_at,omitempty"` - CommitID *string `json:"commit_id,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - PullRequestURL *string `json:"pull_request_url,omitempty"` - State *string `json:"state,omitempty"` -} - -func (p PullRequestReview) String() string { - return Stringify(p) -} - -// DraftReviewComment represents a comment part of the review. -type DraftReviewComment struct { - Path *string `json:"path,omitempty"` - Position *int `json:"position,omitempty"` - Body *string `json:"body,omitempty"` -} - -func (c DraftReviewComment) String() string { - return Stringify(c) -} - -// PullRequestReviewRequest represents a request to create a review. -type PullRequestReviewRequest struct { - CommitID *string `json:"commit_id,omitempty"` - Body *string `json:"body,omitempty"` - Event *string `json:"event,omitempty"` - Comments []*DraftReviewComment `json:"comments,omitempty"` -} - -func (r PullRequestReviewRequest) String() string { - return Stringify(r) -} - -// PullRequestReviewDismissalRequest represents a request to dismiss a review. -type PullRequestReviewDismissalRequest struct { - Message *string `json:"message,omitempty"` -} - -func (r PullRequestReviewDismissalRequest) String() string { - return Stringify(r) -} - -// ListReviews lists all reviews on the specified pull request. -// -// TODO: Follow up with GitHub support about an issue with this method's -// returned error format and remove this comment once it's fixed. -// Read more about it here - https://github.com/google/go-github/issues/540 -// -// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request -func (s *PullRequestsService) ListReviews(ctx context.Context, owner, repo string, number int, opt *ListOptions) ([]*PullRequestReview, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews", owner, repo, number) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var reviews []*PullRequestReview - resp, err := s.client.Do(ctx, req, &reviews) - if err != nil { - return nil, resp, err - } - - return reviews, resp, nil -} - -// GetReview fetches the specified pull request review. -// -// TODO: Follow up with GitHub support about an issue with this method's -// returned error format and remove this comment once it's fixed. -// Read more about it here - https://github.com/google/go-github/issues/540 -// -// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#get-a-single-review -func (s *PullRequestsService) GetReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - review := new(PullRequestReview) - resp, err := s.client.Do(ctx, req, review) - if err != nil { - return nil, resp, err - } - - return review, resp, nil -} - -// DeletePendingReview deletes the specified pull request pending review. -// -// TODO: Follow up with GitHub support about an issue with this method's -// returned error format and remove this comment once it's fixed. -// Read more about it here - https://github.com/google/go-github/issues/540 -// -// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#delete-a-pending-review -func (s *PullRequestsService) DeletePendingReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID) - - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, nil, err - } - - review := new(PullRequestReview) - resp, err := s.client.Do(ctx, req, review) - if err != nil { - return nil, resp, err - } - - return review, resp, nil -} - -// ListReviewComments lists all the comments for the specified review. -// -// TODO: Follow up with GitHub support about an issue with this method's -// returned error format and remove this comment once it's fixed. -// Read more about it here - https://github.com/google/go-github/issues/540 -// -// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#get-comments-for-a-single-review -func (s *PullRequestsService) ListReviewComments(ctx context.Context, owner, repo string, number int, reviewID int64, opt *ListOptions) ([]*PullRequestComment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/comments", owner, repo, number, reviewID) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var comments []*PullRequestComment - resp, err := s.client.Do(ctx, req, &comments) - if err != nil { - return nil, resp, err - } - - return comments, resp, nil -} - -// CreateReview creates a new review on the specified pull request. -// -// TODO: Follow up with GitHub support about an issue with this method's -// returned error format and remove this comment once it's fixed. -// Read more about it here - https://github.com/google/go-github/issues/540 -// -// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#create-a-pull-request-review -func (s *PullRequestsService) CreateReview(ctx context.Context, owner, repo string, number int, review *PullRequestReviewRequest) (*PullRequestReview, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews", owner, repo, number) - - req, err := s.client.NewRequest("POST", u, review) - if err != nil { - return nil, nil, err - } - - r := new(PullRequestReview) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, nil -} - -// SubmitReview submits a specified review on the specified pull request. -// -// TODO: Follow up with GitHub support about an issue with this method's -// returned error format and remove this comment once it's fixed. -// Read more about it here - https://github.com/google/go-github/issues/540 -// -// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#submit-a-pull-request-review -func (s *PullRequestsService) SubmitReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewRequest) (*PullRequestReview, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/events", owner, repo, number, reviewID) - - req, err := s.client.NewRequest("POST", u, review) - if err != nil { - return nil, nil, err - } - - r := new(PullRequestReview) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, nil -} - -// DismissReview dismisses a specified review on the specified pull request. -// -// TODO: Follow up with GitHub support about an issue with this method's -// returned error format and remove this comment once it's fixed. -// Read more about it here - https://github.com/google/go-github/issues/540 -// -// GitHub API docs: https://developer.github.com/v3/pulls/reviews/#dismiss-a-pull-request-review -func (s *PullRequestsService) DismissReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewDismissalRequest) (*PullRequestReview, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/dismissals", owner, repo, number, reviewID) - - req, err := s.client.NewRequest("PUT", u, review) - if err != nil { - return nil, nil, err - } - - r := new(PullRequestReview) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/reactions.go b/vendor/github.com/google/go-github/github/reactions.go deleted file mode 100644 index 19b533f39..000000000 --- a/vendor/github.com/google/go-github/github/reactions.go +++ /dev/null @@ -1,283 +0,0 @@ -// Copyright 2016 The go-github 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 github - -import ( - "context" - "fmt" - "strings" -) - -// ReactionsService provides access to the reactions-related functions in the -// GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/reactions/ -type ReactionsService service - -// Reaction represents a GitHub reaction. -type Reaction struct { - // ID is the Reaction ID. - ID *int64 `json:"id,omitempty"` - User *User `json:"user,omitempty"` - NodeID *string `json:"node_id,omitempty"` - // Content is the type of reaction. - // Possible values are: - // "+1", "-1", "laugh", "confused", "heart", "hooray". - Content *string `json:"content,omitempty"` -} - -// Reactions represents a summary of GitHub reactions. -type Reactions struct { - TotalCount *int `json:"total_count,omitempty"` - PlusOne *int `json:"+1,omitempty"` - MinusOne *int `json:"-1,omitempty"` - Laugh *int `json:"laugh,omitempty"` - Confused *int `json:"confused,omitempty"` - Heart *int `json:"heart,omitempty"` - Hooray *int `json:"hooray,omitempty"` - URL *string `json:"url,omitempty"` -} - -func (r Reaction) String() string { - return Stringify(r) -} - -// ListCommentReactions lists the reactions for a commit comment. -// -// GitHub API docs: https://developer.github.com/v3/reactions/#list-reactions-for-a-commit-comment -func (s *ReactionsService) ListCommentReactions(ctx context.Context, owner, repo string, id int64, opt *ListOptions) ([]*Reaction, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/comments/%v/reactions", owner, repo, id) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var m []*Reaction - resp, err := s.client.Do(ctx, req, &m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// CreateCommentReaction creates a reaction for a commit comment. -// Note that if you have already created a reaction of type content, the -// previously created reaction will be returned with Status: 200 OK. -// -// GitHub API docs: https://developer.github.com/v3/reactions/#create-reaction-for-a-commit-comment -func (s ReactionsService) CreateCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/comments/%v/reactions", owner, repo, id) - - body := &Reaction{Content: String(content)} - req, err := s.client.NewRequest("POST", u, body) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - m := &Reaction{} - resp, err := s.client.Do(ctx, req, m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// ListIssueReactions lists the reactions for an issue. -// -// GitHub API docs: https://developer.github.com/v3/reactions/#list-reactions-for-an-issue -func (s *ReactionsService) ListIssueReactions(ctx context.Context, owner, repo string, number int, opt *ListOptions) ([]*Reaction, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/%v/reactions", owner, repo, number) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var m []*Reaction - resp, err := s.client.Do(ctx, req, &m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// CreateIssueReaction creates a reaction for an issue. -// Note that if you have already created a reaction of type content, the -// previously created reaction will be returned with Status: 200 OK. -// -// GitHub API docs: https://developer.github.com/v3/reactions/#create-reaction-for-an-issue -func (s ReactionsService) CreateIssueReaction(ctx context.Context, owner, repo string, number int, content string) (*Reaction, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/%v/reactions", owner, repo, number) - - body := &Reaction{Content: String(content)} - req, err := s.client.NewRequest("POST", u, body) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - m := &Reaction{} - resp, err := s.client.Do(ctx, req, m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// ListIssueCommentReactions lists the reactions for an issue comment. -// -// GitHub API docs: https://developer.github.com/v3/reactions/#list-reactions-for-an-issue-comment -func (s *ReactionsService) ListIssueCommentReactions(ctx context.Context, owner, repo string, id int64, opt *ListOptions) ([]*Reaction, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/comments/%v/reactions", owner, repo, id) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var m []*Reaction - resp, err := s.client.Do(ctx, req, &m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// CreateIssueCommentReaction creates a reaction for an issue comment. -// Note that if you have already created a reaction of type content, the -// previously created reaction will be returned with Status: 200 OK. -// -// GitHub API docs: https://developer.github.com/v3/reactions/#create-reaction-for-an-issue-comment -func (s ReactionsService) CreateIssueCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/issues/comments/%v/reactions", owner, repo, id) - - body := &Reaction{Content: String(content)} - req, err := s.client.NewRequest("POST", u, body) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - m := &Reaction{} - resp, err := s.client.Do(ctx, req, m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// ListPullRequestCommentReactions lists the reactions for a pull request review comment. -// -// GitHub API docs: https://developer.github.com/v3/reactions/#list-reactions-for-an-issue-comment -func (s *ReactionsService) ListPullRequestCommentReactions(ctx context.Context, owner, repo string, id int64, opt *ListOptions) ([]*Reaction, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/comments/%v/reactions", owner, repo, id) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var m []*Reaction - resp, err := s.client.Do(ctx, req, &m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// CreatePullRequestCommentReaction creates a reaction for a pull request review comment. -// Note that if you have already created a reaction of type content, the -// previously created reaction will be returned with Status: 200 OK. -// -// GitHub API docs: https://developer.github.com/v3/reactions/#create-reaction-for-an-issue-comment -func (s ReactionsService) CreatePullRequestCommentReaction(ctx context.Context, owner, repo string, id int64, content string) (*Reaction, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pulls/comments/%v/reactions", owner, repo, id) - - body := &Reaction{Content: String(content)} - req, err := s.client.NewRequest("POST", u, body) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeReactionsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - m := &Reaction{} - resp, err := s.client.Do(ctx, req, m) - if err != nil { - return nil, resp, err - } - - return m, resp, nil -} - -// DeleteReaction deletes a reaction. -// -// GitHub API docs: https://developer.github.com/v3/reaction/reactions/#delete-a-reaction-archive -func (s *ReactionsService) DeleteReaction(ctx context.Context, id int64) (*Response, error) { - u := fmt.Sprintf("reactions/%v", id) - - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeReactionsPreview) - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/repos.go b/vendor/github.com/google/go-github/github/repos.go deleted file mode 100644 index aa9b6acee..000000000 --- a/vendor/github.com/google/go-github/github/repos.go +++ /dev/null @@ -1,1051 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" - "strings" -) - -// RepositoriesService handles communication with the repository related -// methods of the GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/repos/ -type RepositoriesService service - -// Repository represents a GitHub repository. -type Repository struct { - ID *int64 `json:"id,omitempty"` - Owner *User `json:"owner,omitempty"` - Name *string `json:"name,omitempty"` - FullName *string `json:"full_name,omitempty"` - Description *string `json:"description,omitempty"` - Homepage *string `json:"homepage,omitempty"` - CodeOfConduct *CodeOfConduct `json:"code_of_conduct,omitempty"` - DefaultBranch *string `json:"default_branch,omitempty"` - MasterBranch *string `json:"master_branch,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - PushedAt *Timestamp `json:"pushed_at,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - CloneURL *string `json:"clone_url,omitempty"` - GitURL *string `json:"git_url,omitempty"` - MirrorURL *string `json:"mirror_url,omitempty"` - SSHURL *string `json:"ssh_url,omitempty"` - SVNURL *string `json:"svn_url,omitempty"` - Language *string `json:"language,omitempty"` - Fork *bool `json:"fork,omitempty"` - ForksCount *int `json:"forks_count,omitempty"` - NetworkCount *int `json:"network_count,omitempty"` - OpenIssuesCount *int `json:"open_issues_count,omitempty"` - StargazersCount *int `json:"stargazers_count,omitempty"` - SubscribersCount *int `json:"subscribers_count,omitempty"` - WatchersCount *int `json:"watchers_count,omitempty"` - Size *int `json:"size,omitempty"` - AutoInit *bool `json:"auto_init,omitempty"` - Parent *Repository `json:"parent,omitempty"` - Source *Repository `json:"source,omitempty"` - Organization *Organization `json:"organization,omitempty"` - Permissions *map[string]bool `json:"permissions,omitempty"` - AllowRebaseMerge *bool `json:"allow_rebase_merge,omitempty"` - AllowSquashMerge *bool `json:"allow_squash_merge,omitempty"` - AllowMergeCommit *bool `json:"allow_merge_commit,omitempty"` - Topics []string `json:"topics,omitempty"` - - // Only provided when using RepositoriesService.Get while in preview - License *License `json:"license,omitempty"` - - // Additional mutable fields when creating and editing a repository - Private *bool `json:"private,omitempty"` - HasIssues *bool `json:"has_issues,omitempty"` - HasWiki *bool `json:"has_wiki,omitempty"` - HasPages *bool `json:"has_pages,omitempty"` - HasProjects *bool `json:"has_projects,omitempty"` - HasDownloads *bool `json:"has_downloads,omitempty"` - LicenseTemplate *string `json:"license_template,omitempty"` - GitignoreTemplate *string `json:"gitignore_template,omitempty"` - Archived *bool `json:"archived,omitempty"` - - // Creating an organization repository. Required for non-owners. - TeamID *int64 `json:"team_id,omitempty"` - - // API URLs - URL *string `json:"url,omitempty"` - ArchiveURL *string `json:"archive_url,omitempty"` - AssigneesURL *string `json:"assignees_url,omitempty"` - BlobsURL *string `json:"blobs_url,omitempty"` - BranchesURL *string `json:"branches_url,omitempty"` - CollaboratorsURL *string `json:"collaborators_url,omitempty"` - CommentsURL *string `json:"comments_url,omitempty"` - CommitsURL *string `json:"commits_url,omitempty"` - CompareURL *string `json:"compare_url,omitempty"` - ContentsURL *string `json:"contents_url,omitempty"` - ContributorsURL *string `json:"contributors_url,omitempty"` - DeploymentsURL *string `json:"deployments_url,omitempty"` - DownloadsURL *string `json:"downloads_url,omitempty"` - EventsURL *string `json:"events_url,omitempty"` - ForksURL *string `json:"forks_url,omitempty"` - GitCommitsURL *string `json:"git_commits_url,omitempty"` - GitRefsURL *string `json:"git_refs_url,omitempty"` - GitTagsURL *string `json:"git_tags_url,omitempty"` - HooksURL *string `json:"hooks_url,omitempty"` - IssueCommentURL *string `json:"issue_comment_url,omitempty"` - IssueEventsURL *string `json:"issue_events_url,omitempty"` - IssuesURL *string `json:"issues_url,omitempty"` - KeysURL *string `json:"keys_url,omitempty"` - LabelsURL *string `json:"labels_url,omitempty"` - LanguagesURL *string `json:"languages_url,omitempty"` - MergesURL *string `json:"merges_url,omitempty"` - MilestonesURL *string `json:"milestones_url,omitempty"` - NotificationsURL *string `json:"notifications_url,omitempty"` - PullsURL *string `json:"pulls_url,omitempty"` - ReleasesURL *string `json:"releases_url,omitempty"` - StargazersURL *string `json:"stargazers_url,omitempty"` - StatusesURL *string `json:"statuses_url,omitempty"` - SubscribersURL *string `json:"subscribers_url,omitempty"` - SubscriptionURL *string `json:"subscription_url,omitempty"` - TagsURL *string `json:"tags_url,omitempty"` - TreesURL *string `json:"trees_url,omitempty"` - TeamsURL *string `json:"teams_url,omitempty"` - - // TextMatches is only populated from search results that request text matches - // See: search.go and https://developer.github.com/v3/search/#text-match-metadata - TextMatches []TextMatch `json:"text_matches,omitempty"` -} - -func (r Repository) String() string { - return Stringify(r) -} - -// RepositoryListOptions specifies the optional parameters to the -// RepositoriesService.List method. -type RepositoryListOptions struct { - // Visibility of repositories to list. Can be one of all, public, or private. - // Default: all - Visibility string `url:"visibility,omitempty"` - - // List repos of given affiliation[s]. - // Comma-separated list of values. Can include: - // * owner: Repositories that are owned by the authenticated user. - // * collaborator: Repositories that the user has been added to as a - // collaborator. - // * organization_member: Repositories that the user has access to through - // being a member of an organization. This includes every repository on - // every team that the user is on. - // Default: owner,collaborator,organization_member - Affiliation string `url:"affiliation,omitempty"` - - // Type of repositories to list. - // Can be one of all, owner, public, private, member. Default: all - // Will cause a 422 error if used in the same request as visibility or - // affiliation. - Type string `url:"type,omitempty"` - - // How to sort the repository list. Can be one of created, updated, pushed, - // full_name. Default: full_name - Sort string `url:"sort,omitempty"` - - // Direction in which to sort repositories. Can be one of asc or desc. - // Default: when using full_name: asc; otherwise desc - Direction string `url:"direction,omitempty"` - - ListOptions -} - -// List the repositories for a user. Passing the empty string will list -// repositories for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/repos/#list-user-repositories -func (s *RepositoriesService) List(ctx context.Context, user string, opt *RepositoryListOptions) ([]*Repository, *Response, error) { - var u string - if user != "" { - u = fmt.Sprintf("users/%v/repos", user) - } else { - u = "user/repos" - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeLicensesPreview, mediaTypeCodesOfConductPreview, mediaTypeTopicsPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var repos []*Repository - resp, err := s.client.Do(ctx, req, &repos) - if err != nil { - return nil, resp, err - } - - return repos, resp, nil -} - -// RepositoryListByOrgOptions specifies the optional parameters to the -// RepositoriesService.ListByOrg method. -type RepositoryListByOrgOptions struct { - // Type of repositories to list. Possible values are: all, public, private, - // forks, sources, member. Default is "all". - Type string `url:"type,omitempty"` - - ListOptions -} - -// ListByOrg lists the repositories for an organization. -// -// GitHub API docs: https://developer.github.com/v3/repos/#list-organization-repositories -func (s *RepositoriesService) ListByOrg(ctx context.Context, org string, opt *RepositoryListByOrgOptions) ([]*Repository, *Response, error) { - u := fmt.Sprintf("orgs/%v/repos", org) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeLicensesPreview, mediaTypeCodesOfConductPreview, mediaTypeTopicsPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var repos []*Repository - resp, err := s.client.Do(ctx, req, &repos) - if err != nil { - return nil, resp, err - } - - return repos, resp, nil -} - -// RepositoryListAllOptions specifies the optional parameters to the -// RepositoriesService.ListAll method. -type RepositoryListAllOptions struct { - // ID of the last repository seen - Since int64 `url:"since,omitempty"` -} - -// ListAll lists all GitHub repositories in the order that they were created. -// -// GitHub API docs: https://developer.github.com/v3/repos/#list-all-public-repositories -func (s *RepositoriesService) ListAll(ctx context.Context, opt *RepositoryListAllOptions) ([]*Repository, *Response, error) { - u, err := addOptions("repositories", opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var repos []*Repository - resp, err := s.client.Do(ctx, req, &repos) - if err != nil { - return nil, resp, err - } - - return repos, resp, nil -} - -// Create a new repository. If an organization is specified, the new -// repository will be created under that org. If the empty string is -// specified, it will be created for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/repos/#create -func (s *RepositoriesService) Create(ctx context.Context, org string, repo *Repository) (*Repository, *Response, error) { - var u string - if org != "" { - u = fmt.Sprintf("orgs/%v/repos", org) - } else { - u = "user/repos" - } - - req, err := s.client.NewRequest("POST", u, repo) - if err != nil { - return nil, nil, err - } - - r := new(Repository) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, nil -} - -// Get fetches a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/#get -func (s *RepositoriesService) Get(ctx context.Context, owner, repo string) (*Repository, *Response, error) { - u := fmt.Sprintf("repos/%v/%v", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when the license support fully launches - // https://developer.github.com/v3/licenses/#get-a-repositorys-license - acceptHeaders := []string{mediaTypeLicensesPreview, mediaTypeCodesOfConductPreview, mediaTypeTopicsPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - repository := new(Repository) - resp, err := s.client.Do(ctx, req, repository) - if err != nil { - return nil, resp, err - } - - return repository, resp, nil -} - -// GetCodeOfConduct gets the contents of a repository's code of conduct. -// -// GitHub API docs: https://developer.github.com/v3/codes_of_conduct/#get-the-contents-of-a-repositorys-code-of-conduct -func (s *RepositoriesService) GetCodeOfConduct(ctx context.Context, owner, repo string) (*CodeOfConduct, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/community/code_of_conduct", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeCodesOfConductPreview) - - coc := new(CodeOfConduct) - resp, err := s.client.Do(ctx, req, coc) - if err != nil { - return nil, resp, err - } - - return coc, resp, nil -} - -// GetByID fetches a repository. -// -// Note: GetByID uses the undocumented GitHub API endpoint /repositories/:id. -func (s *RepositoriesService) GetByID(ctx context.Context, id int64) (*Repository, *Response, error) { - u := fmt.Sprintf("repositories/%d", id) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when the license support fully launches - // https://developer.github.com/v3/licenses/#get-a-repositorys-license - req.Header.Set("Accept", mediaTypeLicensesPreview) - - repository := new(Repository) - resp, err := s.client.Do(ctx, req, repository) - if err != nil { - return nil, resp, err - } - - return repository, resp, nil -} - -// Edit updates a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/#edit -func (s *RepositoriesService) Edit(ctx context.Context, owner, repo string, repository *Repository) (*Repository, *Response, error) { - u := fmt.Sprintf("repos/%v/%v", owner, repo) - req, err := s.client.NewRequest("PATCH", u, repository) - if err != nil { - return nil, nil, err - } - - r := new(Repository) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, nil -} - -// Delete a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/#delete-a-repository -func (s *RepositoriesService) Delete(ctx context.Context, owner, repo string) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v", owner, repo) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// Contributor represents a repository contributor -type Contributor struct { - Login *string `json:"login,omitempty"` - ID *int64 `json:"id,omitempty"` - AvatarURL *string `json:"avatar_url,omitempty"` - GravatarID *string `json:"gravatar_id,omitempty"` - URL *string `json:"url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - FollowersURL *string `json:"followers_url,omitempty"` - FollowingURL *string `json:"following_url,omitempty"` - GistsURL *string `json:"gists_url,omitempty"` - StarredURL *string `json:"starred_url,omitempty"` - SubscriptionsURL *string `json:"subscriptions_url,omitempty"` - OrganizationsURL *string `json:"organizations_url,omitempty"` - ReposURL *string `json:"repos_url,omitempty"` - EventsURL *string `json:"events_url,omitempty"` - ReceivedEventsURL *string `json:"received_events_url,omitempty"` - Type *string `json:"type,omitempty"` - SiteAdmin *bool `json:"site_admin,omitempty"` - Contributions *int `json:"contributions,omitempty"` -} - -// ListContributorsOptions specifies the optional parameters to the -// RepositoriesService.ListContributors method. -type ListContributorsOptions struct { - // Include anonymous contributors in results or not - Anon string `url:"anon,omitempty"` - - ListOptions -} - -// ListContributors lists contributors for a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/#list-contributors -func (s *RepositoriesService) ListContributors(ctx context.Context, owner string, repository string, opt *ListContributorsOptions) ([]*Contributor, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/contributors", owner, repository) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var contributor []*Contributor - resp, err := s.client.Do(ctx, req, &contributor) - if err != nil { - return nil, nil, err - } - - return contributor, resp, nil -} - -// ListLanguages lists languages for the specified repository. The returned map -// specifies the languages and the number of bytes of code written in that -// language. For example: -// -// { -// "C": 78769, -// "Python": 7769 -// } -// -// GitHub API docs: https://developer.github.com/v3/repos/#list-languages -func (s *RepositoriesService) ListLanguages(ctx context.Context, owner string, repo string) (map[string]int, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/languages", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - languages := make(map[string]int) - resp, err := s.client.Do(ctx, req, &languages) - if err != nil { - return nil, resp, err - } - - return languages, resp, nil -} - -// ListTeams lists the teams for the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/#list-teams -func (s *RepositoriesService) ListTeams(ctx context.Context, owner string, repo string, opt *ListOptions) ([]*Team, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/teams", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - req.Header.Set("Accept", mediaTypeNestedTeamsPreview) - - var teams []*Team - resp, err := s.client.Do(ctx, req, &teams) - if err != nil { - return nil, resp, err - } - - return teams, resp, nil -} - -// RepositoryTag represents a repository tag. -type RepositoryTag struct { - Name *string `json:"name,omitempty"` - Commit *Commit `json:"commit,omitempty"` - ZipballURL *string `json:"zipball_url,omitempty"` - TarballURL *string `json:"tarball_url,omitempty"` -} - -// ListTags lists tags for the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/#list-tags -func (s *RepositoriesService) ListTags(ctx context.Context, owner string, repo string, opt *ListOptions) ([]*RepositoryTag, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/tags", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var tags []*RepositoryTag - resp, err := s.client.Do(ctx, req, &tags) - if err != nil { - return nil, resp, err - } - - return tags, resp, nil -} - -// Branch represents a repository branch -type Branch struct { - Name *string `json:"name,omitempty"` - Commit *RepositoryCommit `json:"commit,omitempty"` - Protected *bool `json:"protected,omitempty"` -} - -// Protection represents a repository branch's protection. -type Protection struct { - RequiredStatusChecks *RequiredStatusChecks `json:"required_status_checks"` - RequiredPullRequestReviews *PullRequestReviewsEnforcement `json:"required_pull_request_reviews"` - EnforceAdmins *AdminEnforcement `json:"enforce_admins"` - Restrictions *BranchRestrictions `json:"restrictions"` -} - -// ProtectionRequest represents a request to create/edit a branch's protection. -type ProtectionRequest struct { - RequiredStatusChecks *RequiredStatusChecks `json:"required_status_checks"` - RequiredPullRequestReviews *PullRequestReviewsEnforcementRequest `json:"required_pull_request_reviews"` - EnforceAdmins bool `json:"enforce_admins"` - Restrictions *BranchRestrictionsRequest `json:"restrictions"` -} - -// RequiredStatusChecks represents the protection status of a individual branch. -type RequiredStatusChecks struct { - // Require branches to be up to date before merging. (Required.) - Strict bool `json:"strict"` - // The list of status checks to require in order to merge into this - // branch. (Required; use []string{} instead of nil for empty list.) - Contexts []string `json:"contexts"` -} - -// PullRequestReviewsEnforcement represents the pull request reviews enforcement of a protected branch. -type PullRequestReviewsEnforcement struct { - // Specifies which users and teams can dismiss pull request reviews. - DismissalRestrictions DismissalRestrictions `json:"dismissal_restrictions"` - // Specifies if approved reviews are dismissed automatically, when a new commit is pushed. - DismissStaleReviews bool `json:"dismiss_stale_reviews"` - // RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner. - RequireCodeOwnerReviews bool `json:"require_code_owner_reviews"` -} - -// PullRequestReviewsEnforcementRequest represents request to set the pull request review -// enforcement of a protected branch. It is separate from PullRequestReviewsEnforcement above -// because the request structure is different from the response structure. -type PullRequestReviewsEnforcementRequest struct { - // Specifies which users and teams should be allowed to dismiss pull request reviews. - // User and team dismissal restrictions are only available for - // organization-owned repositories. Must be nil for personal repositories. - DismissalRestrictionsRequest *DismissalRestrictionsRequest `json:"dismissal_restrictions,omitempty"` - // Specifies if approved reviews can be dismissed automatically, when a new commit is pushed. (Required) - DismissStaleReviews bool `json:"dismiss_stale_reviews"` - // RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner. - RequireCodeOwnerReviews bool `json:"require_code_owner_reviews"` -} - -// PullRequestReviewsEnforcementUpdate represents request to patch the pull request review -// enforcement of a protected branch. It is separate from PullRequestReviewsEnforcementRequest above -// because the patch request does not require all fields to be initialized. -type PullRequestReviewsEnforcementUpdate struct { - // Specifies which users and teams can dismiss pull request reviews. Can be omitted. - DismissalRestrictionsRequest *DismissalRestrictionsRequest `json:"dismissal_restrictions,omitempty"` - // Specifies if approved reviews can be dismissed automatically, when a new commit is pushed. Can be omitted. - DismissStaleReviews *bool `json:"dismiss_stale_reviews,omitempty"` - // RequireCodeOwnerReviews specifies if an approved review is required in pull requests including files with a designated code owner. - RequireCodeOwnerReviews bool `json:"require_code_owner_reviews,omitempty"` -} - -// AdminEnforcement represents the configuration to enforce required status checks for repository administrators. -type AdminEnforcement struct { - URL *string `json:"url,omitempty"` - Enabled bool `json:"enabled"` -} - -// BranchRestrictions represents the restriction that only certain users or -// teams may push to a branch. -type BranchRestrictions struct { - // The list of user logins with push access. - Users []*User `json:"users"` - // The list of team slugs with push access. - Teams []*Team `json:"teams"` -} - -// BranchRestrictionsRequest represents the request to create/edit the -// restriction that only certain users or teams may push to a branch. It is -// separate from BranchRestrictions above because the request structure is -// different from the response structure. -type BranchRestrictionsRequest struct { - // The list of user logins with push access. (Required; use []string{} instead of nil for empty list.) - Users []string `json:"users"` - // The list of team slugs with push access. (Required; use []string{} instead of nil for empty list.) - Teams []string `json:"teams"` -} - -// DismissalRestrictions specifies which users and teams can dismiss pull request reviews. -type DismissalRestrictions struct { - // The list of users who can dimiss pull request reviews. - Users []*User `json:"users"` - // The list of teams which can dismiss pull request reviews. - Teams []*Team `json:"teams"` -} - -// DismissalRestrictionsRequest represents the request to create/edit the -// restriction to allows only specific users or teams to dimiss pull request reviews. It is -// separate from DismissalRestrictions above because the request structure is -// different from the response structure. -// Note: Both Users and Teams must be nil, or both must be non-nil. -type DismissalRestrictionsRequest struct { - // The list of user logins who can dismiss pull request reviews. (Required; use nil to disable dismissal_restrictions or &[]string{} otherwise.) - Users *[]string `json:"users,omitempty"` - // The list of team slugs which can dismiss pull request reviews. (Required; use nil to disable dismissal_restrictions or &[]string{} otherwise.) - Teams *[]string `json:"teams,omitempty"` -} - -// ListBranches lists branches for the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/#list-branches -func (s *RepositoriesService) ListBranches(ctx context.Context, owner string, repo string, opt *ListOptions) ([]*Branch, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/branches", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) - - var branches []*Branch - resp, err := s.client.Do(ctx, req, &branches) - if err != nil { - return nil, resp, err - } - - return branches, resp, nil -} - -// GetBranch gets the specified branch for a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/#get-branch -func (s *RepositoriesService) GetBranch(ctx context.Context, owner, repo, branch string) (*Branch, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/branches/%v", owner, repo, branch) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) - - b := new(Branch) - resp, err := s.client.Do(ctx, req, b) - if err != nil { - return nil, resp, err - } - - return b, resp, nil -} - -// GetBranchProtection gets the protection of a given branch. -// -// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-branch-protection -func (s *RepositoriesService) GetBranchProtection(ctx context.Context, owner, repo, branch string) (*Protection, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/branches/%v/protection", owner, repo, branch) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) - - p := new(Protection) - resp, err := s.client.Do(ctx, req, p) - if err != nil { - return nil, resp, err - } - - return p, resp, nil -} - -// GetRequiredStatusChecks gets the required status checks for a given protected branch. -// -// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-required-status-checks-of-protected-branch -func (s *RepositoriesService) GetRequiredStatusChecks(ctx context.Context, owner, repo, branch string) (*RequiredStatusChecks, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_status_checks", owner, repo, branch) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) - - p := new(RequiredStatusChecks) - resp, err := s.client.Do(ctx, req, p) - if err != nil { - return nil, resp, err - } - - return p, resp, nil -} - -// ListRequiredStatusChecksContexts lists the required status checks contexts for a given protected branch. -// -// GitHub API docs: https://developer.github.com/v3/repos/branches/#list-required-status-checks-contexts-of-protected-branch -func (s *RepositoriesService) ListRequiredStatusChecksContexts(ctx context.Context, owner, repo, branch string) (contexts []string, resp *Response, err error) { - u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_status_checks/contexts", owner, repo, branch) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) - - resp, err = s.client.Do(ctx, req, &contexts) - if err != nil { - return nil, resp, err - } - - return contexts, resp, nil -} - -// UpdateBranchProtection updates the protection of a given branch. -// -// GitHub API docs: https://developer.github.com/v3/repos/branches/#update-branch-protection -func (s *RepositoriesService) UpdateBranchProtection(ctx context.Context, owner, repo, branch string, preq *ProtectionRequest) (*Protection, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/branches/%v/protection", owner, repo, branch) - req, err := s.client.NewRequest("PUT", u, preq) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) - - p := new(Protection) - resp, err := s.client.Do(ctx, req, p) - if err != nil { - return nil, resp, err - } - - return p, resp, nil -} - -// RemoveBranchProtection removes the protection of a given branch. -// -// GitHub API docs: https://developer.github.com/v3/repos/branches/#remove-branch-protection -func (s *RepositoriesService) RemoveBranchProtection(ctx context.Context, owner, repo, branch string) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/branches/%v/protection", owner, repo, branch) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) - - return s.client.Do(ctx, req, nil) -} - -// License gets the contents of a repository's license if one is detected. -// -// GitHub API docs: https://developer.github.com/v3/licenses/#get-the-contents-of-a-repositorys-license -func (s *RepositoriesService) License(ctx context.Context, owner, repo string) (*RepositoryLicense, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/license", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - r := &RepositoryLicense{} - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, nil -} - -// GetPullRequestReviewEnforcement gets pull request review enforcement of a protected branch. -// -// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-pull-request-review-enforcement-of-protected-branch -func (s *RepositoriesService) GetPullRequestReviewEnforcement(ctx context.Context, owner, repo, branch string) (*PullRequestReviewsEnforcement, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) - - r := new(PullRequestReviewsEnforcement) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, nil -} - -// UpdatePullRequestReviewEnforcement patches pull request review enforcement of a protected branch. -// It requires admin access and branch protection to be enabled. -// -// GitHub API docs: https://developer.github.com/v3/repos/branches/#update-pull-request-review-enforcement-of-protected-branch -func (s *RepositoriesService) UpdatePullRequestReviewEnforcement(ctx context.Context, owner, repo, branch string, patch *PullRequestReviewsEnforcementUpdate) (*PullRequestReviewsEnforcement, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch) - req, err := s.client.NewRequest("PATCH", u, patch) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) - - r := new(PullRequestReviewsEnforcement) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, err -} - -// DisableDismissalRestrictions disables dismissal restrictions of a protected branch. -// It requires admin access and branch protection to be enabled. -// -// GitHub API docs: https://developer.github.com/v3/repos/branches/#update-pull-request-review-enforcement-of-protected-branch -func (s *RepositoriesService) DisableDismissalRestrictions(ctx context.Context, owner, repo, branch string) (*PullRequestReviewsEnforcement, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch) - - data := struct { - R []interface{} `json:"dismissal_restrictions"` - }{[]interface{}{}} - - req, err := s.client.NewRequest("PATCH", u, data) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) - - r := new(PullRequestReviewsEnforcement) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, err -} - -// RemovePullRequestReviewEnforcement removes pull request enforcement of a protected branch. -// -// GitHub API docs: https://developer.github.com/v3/repos/branches/#remove-pull-request-review-enforcement-of-protected-branch -func (s *RepositoriesService) RemovePullRequestReviewEnforcement(ctx context.Context, owner, repo, branch string) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/required_pull_request_reviews", owner, repo, branch) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) - - return s.client.Do(ctx, req, nil) -} - -// GetAdminEnforcement gets admin enforcement information of a protected branch. -// -// GitHub API docs: https://developer.github.com/v3/repos/branches/#get-admin-enforcement-of-protected-branch -func (s *RepositoriesService) GetAdminEnforcement(ctx context.Context, owner, repo, branch string) (*AdminEnforcement, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/enforce_admins", owner, repo, branch) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) - - r := new(AdminEnforcement) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, nil -} - -// AddAdminEnforcement adds admin enforcement to a protected branch. -// It requires admin access and branch protection to be enabled. -// -// GitHub API docs: https://developer.github.com/v3/repos/branches/#add-admin-enforcement-of-protected-branch -func (s *RepositoriesService) AddAdminEnforcement(ctx context.Context, owner, repo, branch string) (*AdminEnforcement, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/enforce_admins", owner, repo, branch) - req, err := s.client.NewRequest("POST", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) - - r := new(AdminEnforcement) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, err -} - -// RemoveAdminEnforcement removes admin enforcement from a protected branch. -// -// GitHub API docs: https://developer.github.com/v3/repos/branches/#remove-admin-enforcement-of-protected-branch -func (s *RepositoriesService) RemoveAdminEnforcement(ctx context.Context, owner, repo, branch string) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/branches/%v/protection/enforce_admins", owner, repo, branch) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches - req.Header.Set("Accept", mediaTypeProtectedBranchesPreview) - - return s.client.Do(ctx, req, nil) -} - -// repositoryTopics represents a collection of repository topics. -type repositoryTopics struct { - Names []string `json:"names"` -} - -// ListAllTopics lists topics for a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/#list-all-topics-for-a-repository -func (s *RepositoriesService) ListAllTopics(ctx context.Context, owner, repo string) ([]string, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/topics", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeTopicsPreview) - - topics := new(repositoryTopics) - resp, err := s.client.Do(ctx, req, topics) - if err != nil { - return nil, resp, err - } - - return topics.Names, resp, nil -} - -// ReplaceAllTopics replaces topics for a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/#replace-all-topics-for-a-repository -func (s *RepositoriesService) ReplaceAllTopics(ctx context.Context, owner, repo string, topics []string) ([]string, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/topics", owner, repo) - t := &repositoryTopics{ - Names: topics, - } - if t.Names == nil { - t.Names = []string{} - } - req, err := s.client.NewRequest("PUT", u, t) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeTopicsPreview) - - t = new(repositoryTopics) - resp, err := s.client.Do(ctx, req, t) - if err != nil { - return nil, resp, err - } - - return t.Names, resp, nil -} - -// TransferRequest represents a request to transfer a repository. -type TransferRequest struct { - NewOwner string `json:"new_owner"` - TeamID []int64 `json:"team_id,omitempty"` -} - -// Transfer transfers a repository from one account or organization to another. -// -// This method might return an *AcceptedError and a status code of -// 202. This is because this is the status that GitHub returns to signify that -// it has now scheduled the transfer of the repository in a background task. -// A follow up request, after a delay of a second or so, should result -// in a successful request. -// -// GitHub API docs: https://developer.github.com/v3/repos/#transfer-a-repository -func (s *RepositoriesService) Transfer(ctx context.Context, owner, repo string, transfer TransferRequest) (*Repository, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/transfer", owner, repo) - - req, err := s.client.NewRequest("POST", u, &transfer) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeRepositoryTransferPreview) - - r := new(Repository) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - - return r, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/repos_collaborators.go b/vendor/github.com/google/go-github/github/repos_collaborators.go deleted file mode 100644 index 61ee9d39c..000000000 --- a/vendor/github.com/google/go-github/github/repos_collaborators.go +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" -) - -// ListCollaboratorsOptions specifies the optional parameters to the -// RepositoriesService.ListCollaborators method. -type ListCollaboratorsOptions struct { - // Affiliation specifies how collaborators should be filtered by their affiliation. - // Possible values are: - // outside - All outside collaborators of an organization-owned repository - // direct - All collaborators with permissions to an organization-owned repository, - // regardless of organization membership status - // all - All collaborators the authenticated user can see - // - // Default value is "all". - Affiliation string `url:"affiliation,omitempty"` - - ListOptions -} - -// ListCollaborators lists the GitHub users that have access to the repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#list-collaborators -func (s *RepositoriesService) ListCollaborators(ctx context.Context, owner, repo string, opt *ListCollaboratorsOptions) ([]*User, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/collaborators", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - req.Header.Set("Accept", mediaTypeNestedTeamsPreview) - - var users []*User - resp, err := s.client.Do(ctx, req, &users) - if err != nil { - return nil, resp, err - } - - return users, resp, nil -} - -// IsCollaborator checks whether the specified GitHub user has collaborator -// access to the given repo. -// Note: This will return false if the user is not a collaborator OR the user -// is not a GitHub user. -// -// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#get -func (s *RepositoriesService) IsCollaborator(ctx context.Context, owner, repo, user string) (bool, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/collaborators/%v", owner, repo, user) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return false, nil, err - } - - resp, err := s.client.Do(ctx, req, nil) - isCollab, err := parseBoolResponse(err) - return isCollab, resp, err -} - -// RepositoryPermissionLevel represents the permission level an organization -// member has for a given repository. -type RepositoryPermissionLevel struct { - // Possible values: "admin", "write", "read", "none" - Permission *string `json:"permission,omitempty"` - - User *User `json:"user,omitempty"` -} - -// GetPermissionLevel retrieves the specific permission level a collaborator has for a given repository. -// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level -func (s *RepositoriesService) GetPermissionLevel(ctx context.Context, owner, repo, user string) (*RepositoryPermissionLevel, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/collaborators/%v/permission", owner, repo, user) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - rpl := new(RepositoryPermissionLevel) - resp, err := s.client.Do(ctx, req, rpl) - if err != nil { - return nil, resp, err - } - return rpl, resp, nil -} - -// RepositoryAddCollaboratorOptions specifies the optional parameters to the -// RepositoriesService.AddCollaborator method. -type RepositoryAddCollaboratorOptions struct { - // Permission specifies the permission to grant the user on this repository. - // Possible values are: - // pull - team members can pull, but not push to or administer this repository - // push - team members can pull and push, but not administer this repository - // admin - team members can pull, push and administer this repository - // - // Default value is "push". This option is only valid for organization-owned repositories. - Permission string `json:"permission,omitempty"` -} - -// AddCollaborator sends an invitation to the specified GitHub user -// to become a collaborator to the given repo. -// -// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#add-user-as-a-collaborator -func (s *RepositoriesService) AddCollaborator(ctx context.Context, owner, repo, user string, opt *RepositoryAddCollaboratorOptions) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/collaborators/%v", owner, repo, user) - req, err := s.client.NewRequest("PUT", u, opt) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeRepositoryInvitationsPreview) - - return s.client.Do(ctx, req, nil) -} - -// RemoveCollaborator removes the specified GitHub user as collaborator from the given repo. -// Note: Does not return error if a valid user that is not a collaborator is removed. -// -// GitHub API docs: https://developer.github.com/v3/repos/collaborators/#remove-collaborator -func (s *RepositoriesService) RemoveCollaborator(ctx context.Context, owner, repo, user string) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/collaborators/%v", owner, repo, user) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/repos_comments.go b/vendor/github.com/google/go-github/github/repos_comments.go deleted file mode 100644 index fa2377d40..000000000 --- a/vendor/github.com/google/go-github/github/repos_comments.go +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// RepositoryComment represents a comment for a commit, file, or line in a repository. -type RepositoryComment struct { - HTMLURL *string `json:"html_url,omitempty"` - URL *string `json:"url,omitempty"` - ID *int64 `json:"id,omitempty"` - CommitID *string `json:"commit_id,omitempty"` - User *User `json:"user,omitempty"` - Reactions *Reactions `json:"reactions,omitempty"` - CreatedAt *time.Time `json:"created_at,omitempty"` - UpdatedAt *time.Time `json:"updated_at,omitempty"` - - // User-mutable fields - Body *string `json:"body"` - // User-initialized fields - Path *string `json:"path,omitempty"` - Position *int `json:"position,omitempty"` -} - -func (r RepositoryComment) String() string { - return Stringify(r) -} - -// ListComments lists all the comments for the repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/comments/#list-commit-comments-for-a-repository -func (s *RepositoriesService) ListComments(ctx context.Context, owner, repo string, opt *ListOptions) ([]*RepositoryComment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/comments", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeReactionsPreview) - - var comments []*RepositoryComment - resp, err := s.client.Do(ctx, req, &comments) - if err != nil { - return nil, resp, err - } - - return comments, resp, nil -} - -// ListCommitComments lists all the comments for a given commit SHA. -// -// GitHub API docs: https://developer.github.com/v3/repos/comments/#list-comments-for-a-single-commit -func (s *RepositoriesService) ListCommitComments(ctx context.Context, owner, repo, sha string, opt *ListOptions) ([]*RepositoryComment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/commits/%v/comments", owner, repo, sha) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeReactionsPreview) - - var comments []*RepositoryComment - resp, err := s.client.Do(ctx, req, &comments) - if err != nil { - return nil, resp, err - } - - return comments, resp, nil -} - -// CreateComment creates a comment for the given commit. -// Note: GitHub allows for comments to be created for non-existing files and positions. -// -// GitHub API docs: https://developer.github.com/v3/repos/comments/#create-a-commit-comment -func (s *RepositoriesService) CreateComment(ctx context.Context, owner, repo, sha string, comment *RepositoryComment) (*RepositoryComment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/commits/%v/comments", owner, repo, sha) - req, err := s.client.NewRequest("POST", u, comment) - if err != nil { - return nil, nil, err - } - - c := new(RepositoryComment) - resp, err := s.client.Do(ctx, req, c) - if err != nil { - return nil, resp, err - } - - return c, resp, nil -} - -// GetComment gets a single comment from a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/comments/#get-a-single-commit-comment -func (s *RepositoriesService) GetComment(ctx context.Context, owner, repo string, id int64) (*RepositoryComment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/comments/%v", owner, repo, id) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeReactionsPreview) - - c := new(RepositoryComment) - resp, err := s.client.Do(ctx, req, c) - if err != nil { - return nil, resp, err - } - - return c, resp, nil -} - -// UpdateComment updates the body of a single comment. -// -// GitHub API docs: https://developer.github.com/v3/repos/comments/#update-a-commit-comment -func (s *RepositoriesService) UpdateComment(ctx context.Context, owner, repo string, id int64, comment *RepositoryComment) (*RepositoryComment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/comments/%v", owner, repo, id) - req, err := s.client.NewRequest("PATCH", u, comment) - if err != nil { - return nil, nil, err - } - - c := new(RepositoryComment) - resp, err := s.client.Do(ctx, req, c) - if err != nil { - return nil, resp, err - } - - return c, resp, nil -} - -// DeleteComment deletes a single comment from a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/comments/#delete-a-commit-comment -func (s *RepositoriesService) DeleteComment(ctx context.Context, owner, repo string, id int64) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/comments/%v", owner, repo, id) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/repos_commits.go b/vendor/github.com/google/go-github/github/repos_commits.go deleted file mode 100644 index 048473734..000000000 --- a/vendor/github.com/google/go-github/github/repos_commits.go +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "bytes" - "context" - "fmt" - "time" -) - -// RepositoryCommit represents a commit in a repo. -// Note that it's wrapping a Commit, so author/committer information is in two places, -// but contain different details about them: in RepositoryCommit "github details", in Commit - "git details". -type RepositoryCommit struct { - SHA *string `json:"sha,omitempty"` - Commit *Commit `json:"commit,omitempty"` - Author *User `json:"author,omitempty"` - Committer *User `json:"committer,omitempty"` - Parents []Commit `json:"parents,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - URL *string `json:"url,omitempty"` - CommentsURL *string `json:"comments_url,omitempty"` - - // Details about how many changes were made in this commit. Only filled in during GetCommit! - Stats *CommitStats `json:"stats,omitempty"` - // Details about which files, and how this commit touched. Only filled in during GetCommit! - Files []CommitFile `json:"files,omitempty"` -} - -func (r RepositoryCommit) String() string { - return Stringify(r) -} - -// CommitStats represents the number of additions / deletions from a file in a given RepositoryCommit or GistCommit. -type CommitStats struct { - Additions *int `json:"additions,omitempty"` - Deletions *int `json:"deletions,omitempty"` - Total *int `json:"total,omitempty"` -} - -func (c CommitStats) String() string { - return Stringify(c) -} - -// CommitFile represents a file modified in a commit. -type CommitFile struct { - SHA *string `json:"sha,omitempty"` - Filename *string `json:"filename,omitempty"` - Additions *int `json:"additions,omitempty"` - Deletions *int `json:"deletions,omitempty"` - Changes *int `json:"changes,omitempty"` - Status *string `json:"status,omitempty"` - Patch *string `json:"patch,omitempty"` - BlobURL *string `json:"blob_url,omitempty"` - RawURL *string `json:"raw_url,omitempty"` - ContentsURL *string `json:"contents_url,omitempty"` -} - -func (c CommitFile) String() string { - return Stringify(c) -} - -// CommitsComparison is the result of comparing two commits. -// See CompareCommits() for details. -type CommitsComparison struct { - BaseCommit *RepositoryCommit `json:"base_commit,omitempty"` - MergeBaseCommit *RepositoryCommit `json:"merge_base_commit,omitempty"` - - // Head can be 'behind' or 'ahead' - Status *string `json:"status,omitempty"` - AheadBy *int `json:"ahead_by,omitempty"` - BehindBy *int `json:"behind_by,omitempty"` - TotalCommits *int `json:"total_commits,omitempty"` - - Commits []RepositoryCommit `json:"commits,omitempty"` - - Files []CommitFile `json:"files,omitempty"` - - HTMLURL *string `json:"html_url,omitempty"` - PermalinkURL *string `json:"permalink_url,omitempty"` - DiffURL *string `json:"diff_url,omitempty"` - PatchURL *string `json:"patch_url,omitempty"` - URL *string `json:"url,omitempty"` // API URL. -} - -func (c CommitsComparison) String() string { - return Stringify(c) -} - -// CommitsListOptions specifies the optional parameters to the -// RepositoriesService.ListCommits method. -type CommitsListOptions struct { - // SHA or branch to start listing Commits from. - SHA string `url:"sha,omitempty"` - - // Path that should be touched by the returned Commits. - Path string `url:"path,omitempty"` - - // Author of by which to filter Commits. - Author string `url:"author,omitempty"` - - // Since when should Commits be included in the response. - Since time.Time `url:"since,omitempty"` - - // Until when should Commits be included in the response. - Until time.Time `url:"until,omitempty"` - - ListOptions -} - -// ListCommits lists the commits of a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/commits/#list -func (s *RepositoriesService) ListCommits(ctx context.Context, owner, repo string, opt *CommitsListOptions) ([]*RepositoryCommit, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/commits", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGitSigningPreview) - - var commits []*RepositoryCommit - resp, err := s.client.Do(ctx, req, &commits) - if err != nil { - return nil, resp, err - } - - return commits, resp, nil -} - -// GetCommit fetches the specified commit, including all details about it. -// -// GitHub API docs: https://developer.github.com/v3/repos/commits/#get-a-single-commit -// See also: https://developer.github.com/v3/git/commits/#get-a-single-commit provides the same functionality -func (s *RepositoriesService) GetCommit(ctx context.Context, owner, repo, sha string) (*RepositoryCommit, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/commits/%v", owner, repo, sha) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGitSigningPreview) - - commit := new(RepositoryCommit) - resp, err := s.client.Do(ctx, req, commit) - if err != nil { - return nil, resp, err - } - - return commit, resp, nil -} - -// GetCommitRaw fetches the specified commit in raw (diff or patch) format. -func (s *RepositoriesService) GetCommitRaw(ctx context.Context, owner string, repo string, sha string, opt RawOptions) (string, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/commits/%v", owner, repo, sha) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return "", nil, err - } - - switch opt.Type { - case Diff: - req.Header.Set("Accept", mediaTypeV3Diff) - case Patch: - req.Header.Set("Accept", mediaTypeV3Patch) - default: - return "", nil, fmt.Errorf("unsupported raw type %d", opt.Type) - } - - var buf bytes.Buffer - resp, err := s.client.Do(ctx, req, &buf) - if err != nil { - return "", resp, err - } - - return buf.String(), resp, nil -} - -// GetCommitSHA1 gets the SHA-1 of a commit reference. If a last-known SHA1 is -// supplied and no new commits have occurred, a 304 Unmodified response is returned. -// -// GitHub API docs: https://developer.github.com/v3/repos/commits/#get-the-sha-1-of-a-commit-reference -func (s *RepositoriesService) GetCommitSHA1(ctx context.Context, owner, repo, ref, lastSHA string) (string, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/commits/%v", owner, repo, ref) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return "", nil, err - } - if lastSHA != "" { - req.Header.Set("If-None-Match", `"`+lastSHA+`"`) - } - - req.Header.Set("Accept", mediaTypeV3SHA) - - var buf bytes.Buffer - resp, err := s.client.Do(ctx, req, &buf) - if err != nil { - return "", resp, err - } - - return buf.String(), resp, nil -} - -// CompareCommits compares a range of commits with each other. -// todo: support media formats - https://github.com/google/go-github/issues/6 -// -// GitHub API docs: https://developer.github.com/v3/repos/commits/index.html#compare-two-commits -func (s *RepositoriesService) CompareCommits(ctx context.Context, owner, repo string, base, head string) (*CommitsComparison, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/compare/%v...%v", owner, repo, base, head) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - comp := new(CommitsComparison) - resp, err := s.client.Do(ctx, req, comp) - if err != nil { - return nil, resp, err - } - - return comp, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/repos_community_health.go b/vendor/github.com/google/go-github/github/repos_community_health.go deleted file mode 100644 index b5c75d6f5..000000000 --- a/vendor/github.com/google/go-github/github/repos_community_health.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2017 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// Metric represents the different fields for one file in community health files. -type Metric struct { - Name *string `json:"name"` - Key *string `json:"key"` - URL *string `json:"url"` - HTMLURL *string `json:"html_url"` -} - -// CommunityHealthFiles represents the different files in the community health metrics response. -type CommunityHealthFiles struct { - CodeOfConduct *Metric `json:"code_of_conduct"` - Contributing *Metric `json:"contributing"` - License *Metric `json:"license"` - Readme *Metric `json:"readme"` -} - -// CommunityHealthMetrics represents a response containing the community metrics of a repository. -type CommunityHealthMetrics struct { - HealthPercentage *int `json:"health_percentage"` - Files *CommunityHealthFiles `json:"files"` - UpdatedAt *time.Time `json:"updated_at"` -} - -// GetCommunityHealthMetrics retrieves all the community health metrics for a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/community/#retrieve-community-health-metrics -func (s *RepositoriesService) GetCommunityHealthMetrics(ctx context.Context, owner, repo string) (*CommunityHealthMetrics, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/community/profile", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeRepositoryCommunityHealthMetricsPreview) - - metrics := &CommunityHealthMetrics{} - resp, err := s.client.Do(ctx, req, metrics) - if err != nil { - return nil, resp, err - } - - return metrics, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/repos_contents.go b/vendor/github.com/google/go-github/github/repos_contents.go deleted file mode 100644 index ffb56b90d..000000000 --- a/vendor/github.com/google/go-github/github/repos_contents.go +++ /dev/null @@ -1,266 +0,0 @@ -// Copyright 2013 The go-github AUTHORS. All rights reserved. -// -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Repository contents API methods. -// GitHub API docs: https://developer.github.com/v3/repos/contents/ - -package github - -import ( - "context" - "encoding/base64" - "encoding/json" - "fmt" - "io" - "net/http" - "net/url" - "path" -) - -// RepositoryContent represents a file or directory in a github repository. -type RepositoryContent struct { - Type *string `json:"type,omitempty"` - Encoding *string `json:"encoding,omitempty"` - Size *int `json:"size,omitempty"` - Name *string `json:"name,omitempty"` - Path *string `json:"path,omitempty"` - // Content contains the actual file content, which may be encoded. - // Callers should call GetContent which will decode the content if - // necessary. - Content *string `json:"content,omitempty"` - SHA *string `json:"sha,omitempty"` - URL *string `json:"url,omitempty"` - GitURL *string `json:"git_url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - DownloadURL *string `json:"download_url,omitempty"` -} - -// RepositoryContentResponse holds the parsed response from CreateFile, UpdateFile, and DeleteFile. -type RepositoryContentResponse struct { - Content *RepositoryContent `json:"content,omitempty"` - Commit `json:"commit,omitempty"` -} - -// RepositoryContentFileOptions specifies optional parameters for CreateFile, UpdateFile, and DeleteFile. -type RepositoryContentFileOptions struct { - Message *string `json:"message,omitempty"` - Content []byte `json:"content,omitempty"` // unencoded - SHA *string `json:"sha,omitempty"` - Branch *string `json:"branch,omitempty"` - Author *CommitAuthor `json:"author,omitempty"` - Committer *CommitAuthor `json:"committer,omitempty"` -} - -// RepositoryContentGetOptions represents an optional ref parameter, which can be a SHA, -// branch, or tag -type RepositoryContentGetOptions struct { - Ref string `url:"ref,omitempty"` -} - -// String converts RepositoryContent to a string. It's primarily for testing. -func (r RepositoryContent) String() string { - return Stringify(r) -} - -// GetContent returns the content of r, decoding it if necessary. -func (r *RepositoryContent) GetContent() (string, error) { - var encoding string - if r.Encoding != nil { - encoding = *r.Encoding - } - - switch encoding { - case "base64": - c, err := base64.StdEncoding.DecodeString(*r.Content) - return string(c), err - case "": - if r.Content == nil { - return "", nil - } - return *r.Content, nil - default: - return "", fmt.Errorf("unsupported content encoding: %v", encoding) - } -} - -// GetReadme gets the Readme file for the repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/contents/#get-the-readme -func (s *RepositoriesService) GetReadme(ctx context.Context, owner, repo string, opt *RepositoryContentGetOptions) (*RepositoryContent, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/readme", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - readme := new(RepositoryContent) - resp, err := s.client.Do(ctx, req, readme) - if err != nil { - return nil, resp, err - } - return readme, resp, nil -} - -// DownloadContents returns an io.ReadCloser that reads the contents of the -// specified file. This function will work with files of any size, as opposed -// to GetContents which is limited to 1 Mb files. It is the caller's -// responsibility to close the ReadCloser. -func (s *RepositoriesService) DownloadContents(ctx context.Context, owner, repo, filepath string, opt *RepositoryContentGetOptions) (io.ReadCloser, error) { - dir := path.Dir(filepath) - filename := path.Base(filepath) - _, dirContents, _, err := s.GetContents(ctx, owner, repo, dir, opt) - if err != nil { - return nil, err - } - for _, contents := range dirContents { - if *contents.Name == filename { - if contents.DownloadURL == nil || *contents.DownloadURL == "" { - return nil, fmt.Errorf("No download link found for %s", filepath) - } - resp, err := s.client.client.Get(*contents.DownloadURL) - if err != nil { - return nil, err - } - return resp.Body, nil - } - } - return nil, fmt.Errorf("No file named %s found in %s", filename, dir) -} - -// GetContents can return either the metadata and content of a single file -// (when path references a file) or the metadata of all the files and/or -// subdirectories of a directory (when path references a directory). To make it -// easy to distinguish between both result types and to mimic the API as much -// as possible, both result types will be returned but only one will contain a -// value and the other will be nil. -// -// GitHub API docs: https://developer.github.com/v3/repos/contents/#get-contents -func (s *RepositoriesService) GetContents(ctx context.Context, owner, repo, path string, opt *RepositoryContentGetOptions) (fileContent *RepositoryContent, directoryContent []*RepositoryContent, resp *Response, err error) { - escapedPath := (&url.URL{Path: path}).String() - u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, escapedPath) - u, err = addOptions(u, opt) - if err != nil { - return nil, nil, nil, err - } - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, nil, err - } - var rawJSON json.RawMessage - resp, err = s.client.Do(ctx, req, &rawJSON) - if err != nil { - return nil, nil, resp, err - } - fileUnmarshalError := json.Unmarshal(rawJSON, &fileContent) - if fileUnmarshalError == nil { - return fileContent, nil, resp, nil - } - directoryUnmarshalError := json.Unmarshal(rawJSON, &directoryContent) - if directoryUnmarshalError == nil { - return nil, directoryContent, resp, nil - } - return nil, nil, resp, fmt.Errorf("unmarshalling failed for both file and directory content: %s and %s", fileUnmarshalError, directoryUnmarshalError) -} - -// CreateFile creates a new file in a repository at the given path and returns -// the commit and file metadata. -// -// GitHub API docs: https://developer.github.com/v3/repos/contents/#create-a-file -func (s *RepositoriesService) CreateFile(ctx context.Context, owner, repo, path string, opt *RepositoryContentFileOptions) (*RepositoryContentResponse, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, path) - req, err := s.client.NewRequest("PUT", u, opt) - if err != nil { - return nil, nil, err - } - createResponse := new(RepositoryContentResponse) - resp, err := s.client.Do(ctx, req, createResponse) - if err != nil { - return nil, resp, err - } - return createResponse, resp, nil -} - -// UpdateFile updates a file in a repository at the given path and returns the -// commit and file metadata. Requires the blob SHA of the file being updated. -// -// GitHub API docs: https://developer.github.com/v3/repos/contents/#update-a-file -func (s *RepositoriesService) UpdateFile(ctx context.Context, owner, repo, path string, opt *RepositoryContentFileOptions) (*RepositoryContentResponse, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, path) - req, err := s.client.NewRequest("PUT", u, opt) - if err != nil { - return nil, nil, err - } - updateResponse := new(RepositoryContentResponse) - resp, err := s.client.Do(ctx, req, updateResponse) - if err != nil { - return nil, resp, err - } - return updateResponse, resp, nil -} - -// DeleteFile deletes a file from a repository and returns the commit. -// Requires the blob SHA of the file to be deleted. -// -// GitHub API docs: https://developer.github.com/v3/repos/contents/#delete-a-file -func (s *RepositoriesService) DeleteFile(ctx context.Context, owner, repo, path string, opt *RepositoryContentFileOptions) (*RepositoryContentResponse, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/contents/%s", owner, repo, path) - req, err := s.client.NewRequest("DELETE", u, opt) - if err != nil { - return nil, nil, err - } - deleteResponse := new(RepositoryContentResponse) - resp, err := s.client.Do(ctx, req, deleteResponse) - if err != nil { - return nil, resp, err - } - return deleteResponse, resp, nil -} - -// archiveFormat is used to define the archive type when calling GetArchiveLink. -type archiveFormat string - -const ( - // Tarball specifies an archive in gzipped tar format. - Tarball archiveFormat = "tarball" - - // Zipball specifies an archive in zip format. - Zipball archiveFormat = "zipball" -) - -// GetArchiveLink returns an URL to download a tarball or zipball archive for a -// repository. The archiveFormat can be specified by either the github.Tarball -// or github.Zipball constant. -// -// GitHub API docs: https://developer.github.com/v3/repos/contents/#get-archive-link -func (s *RepositoriesService) GetArchiveLink(ctx context.Context, owner, repo string, archiveformat archiveFormat, opt *RepositoryContentGetOptions) (*url.URL, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/%s", owner, repo, archiveformat) - if opt != nil && opt.Ref != "" { - u += fmt.Sprintf("/%s", opt.Ref) - } - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - var resp *http.Response - // Use http.DefaultTransport if no custom Transport is configured - req = withContext(ctx, req) - if s.client.client.Transport == nil { - resp, err = http.DefaultTransport.RoundTrip(req) - } else { - resp, err = s.client.client.Transport.RoundTrip(req) - } - if err != nil { - return nil, nil, err - } - resp.Body.Close() - if resp.StatusCode != http.StatusFound { - return nil, newResponse(resp), fmt.Errorf("unexpected status code: %s", resp.Status) - } - parsedURL, err := url.Parse(resp.Header.Get("Location")) - return parsedURL, newResponse(resp), err -} diff --git a/vendor/github.com/google/go-github/github/repos_deployments.go b/vendor/github.com/google/go-github/github/repos_deployments.go deleted file mode 100644 index 1300f05ee..000000000 --- a/vendor/github.com/google/go-github/github/repos_deployments.go +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2014 The go-github 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 github - -import ( - "context" - "encoding/json" - "fmt" - "strings" -) - -// Deployment represents a deployment in a repo -type Deployment struct { - URL *string `json:"url,omitempty"` - ID *int64 `json:"id,omitempty"` - SHA *string `json:"sha,omitempty"` - Ref *string `json:"ref,omitempty"` - Task *string `json:"task,omitempty"` - Payload json.RawMessage `json:"payload,omitempty"` - Environment *string `json:"environment,omitempty"` - Description *string `json:"description,omitempty"` - Creator *User `json:"creator,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - StatusesURL *string `json:"statuses_url,omitempty"` - RepositoryURL *string `json:"repository_url,omitempty"` - NodeID *string `json:"node_id,omitempty"` -} - -// DeploymentRequest represents a deployment request -type DeploymentRequest struct { - Ref *string `json:"ref,omitempty"` - Task *string `json:"task,omitempty"` - AutoMerge *bool `json:"auto_merge,omitempty"` - RequiredContexts *[]string `json:"required_contexts,omitempty"` - Payload *string `json:"payload,omitempty"` - Environment *string `json:"environment,omitempty"` - Description *string `json:"description,omitempty"` - TransientEnvironment *bool `json:"transient_environment,omitempty"` - ProductionEnvironment *bool `json:"production_environment,omitempty"` -} - -// DeploymentsListOptions specifies the optional parameters to the -// RepositoriesService.ListDeployments method. -type DeploymentsListOptions struct { - // SHA of the Deployment. - SHA string `url:"sha,omitempty"` - - // List deployments for a given ref. - Ref string `url:"ref,omitempty"` - - // List deployments for a given task. - Task string `url:"task,omitempty"` - - // List deployments for a given environment. - Environment string `url:"environment,omitempty"` - - ListOptions -} - -// ListDeployments lists the deployments of a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/deployments/#list-deployments -func (s *RepositoriesService) ListDeployments(ctx context.Context, owner, repo string, opt *DeploymentsListOptions) ([]*Deployment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/deployments", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - var deployments []*Deployment - resp, err := s.client.Do(ctx, req, &deployments) - if err != nil { - return nil, resp, err - } - - return deployments, resp, nil -} - -// GetDeployment returns a single deployment of a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/deployments/#get-a-single-deployment -func (s *RepositoriesService) GetDeployment(ctx context.Context, owner, repo string, deploymentID int64) (*Deployment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/deployments/%v", owner, repo, deploymentID) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - deployment := new(Deployment) - resp, err := s.client.Do(ctx, req, deployment) - if err != nil { - return nil, resp, err - } - - return deployment, resp, nil -} - -// CreateDeployment creates a new deployment for a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/deployments/#create-a-deployment -func (s *RepositoriesService) CreateDeployment(ctx context.Context, owner, repo string, request *DeploymentRequest) (*Deployment, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/deployments", owner, repo) - - req, err := s.client.NewRequest("POST", u, request) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - d := new(Deployment) - resp, err := s.client.Do(ctx, req, d) - if err != nil { - return nil, resp, err - } - - return d, resp, nil -} - -// DeploymentStatus represents the status of a -// particular deployment. -type DeploymentStatus struct { - ID *int64 `json:"id,omitempty"` - // State is the deployment state. - // Possible values are: "pending", "success", "failure", "error", "inactive". - State *string `json:"state,omitempty"` - Creator *User `json:"creator,omitempty"` - Description *string `json:"description,omitempty"` - TargetURL *string `json:"target_url,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - DeploymentURL *string `json:"deployment_url,omitempty"` - RepositoryURL *string `json:"repository_url,omitempty"` - NodeID *string `json:"node_id,omitempty"` -} - -// DeploymentStatusRequest represents a deployment request -type DeploymentStatusRequest struct { - State *string `json:"state,omitempty"` - LogURL *string `json:"log_url,omitempty"` - Description *string `json:"description,omitempty"` - EnvironmentURL *string `json:"environment_url,omitempty"` - AutoInactive *bool `json:"auto_inactive,omitempty"` -} - -// ListDeploymentStatuses lists the statuses of a given deployment of a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/deployments/#list-deployment-statuses -func (s *RepositoriesService) ListDeploymentStatuses(ctx context.Context, owner, repo string, deployment int64, opt *ListOptions) ([]*DeploymentStatus, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/deployments/%v/statuses", owner, repo, deployment) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - var statuses []*DeploymentStatus - resp, err := s.client.Do(ctx, req, &statuses) - if err != nil { - return nil, resp, err - } - - return statuses, resp, nil -} - -// GetDeploymentStatus returns a single deployment status of a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/deployments/#get-a-single-deployment-status -func (s *RepositoriesService) GetDeploymentStatus(ctx context.Context, owner, repo string, deploymentID, deploymentStatusID int64) (*DeploymentStatus, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/deployments/%v/statuses/%v", owner, repo, deploymentID, deploymentStatusID) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - d := new(DeploymentStatus) - resp, err := s.client.Do(ctx, req, d) - if err != nil { - return nil, resp, err - } - - return d, resp, nil -} - -// CreateDeploymentStatus creates a new status for a deployment. -// -// GitHub API docs: https://developer.github.com/v3/repos/deployments/#create-a-deployment-status -func (s *RepositoriesService) CreateDeploymentStatus(ctx context.Context, owner, repo string, deployment int64, request *DeploymentStatusRequest) (*DeploymentStatus, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/deployments/%v/statuses", owner, repo, deployment) - - req, err := s.client.NewRequest("POST", u, request) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeDeploymentStatusPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - d := new(DeploymentStatus) - resp, err := s.client.Do(ctx, req, d) - if err != nil { - return nil, resp, err - } - - return d, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/repos_forks.go b/vendor/github.com/google/go-github/github/repos_forks.go deleted file mode 100644 index d0bff5447..000000000 --- a/vendor/github.com/google/go-github/github/repos_forks.go +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" -) - -// RepositoryListForksOptions specifies the optional parameters to the -// RepositoriesService.ListForks method. -type RepositoryListForksOptions struct { - // How to sort the forks list. Possible values are: newest, oldest, - // watchers. Default is "newest". - Sort string `url:"sort,omitempty"` - - ListOptions -} - -// ListForks lists the forks of the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/forks/#list-forks -func (s *RepositoriesService) ListForks(ctx context.Context, owner, repo string, opt *RepositoryListForksOptions) ([]*Repository, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/forks", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when topics API fully launches. - req.Header.Set("Accept", mediaTypeTopicsPreview) - - var repos []*Repository - resp, err := s.client.Do(ctx, req, &repos) - if err != nil { - return nil, resp, err - } - - return repos, resp, nil -} - -// RepositoryCreateForkOptions specifies the optional parameters to the -// RepositoriesService.CreateFork method. -type RepositoryCreateForkOptions struct { - // The organization to fork the repository into. - Organization string `url:"organization,omitempty"` -} - -// CreateFork creates a fork of the specified repository. -// -// This method might return an *AcceptedError and a status code of -// 202. This is because this is the status that GitHub returns to signify that -// it is now computing creating the fork in a background task. In this event, -// the Repository value will be returned, which includes the details about the pending fork. -// A follow up request, after a delay of a second or so, should result -// in a successful request. -// -// GitHub API docs: https://developer.github.com/v3/repos/forks/#create-a-fork -func (s *RepositoriesService) CreateFork(ctx context.Context, owner, repo string, opt *RepositoryCreateForkOptions) (*Repository, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/forks", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("POST", u, nil) - if err != nil { - return nil, nil, err - } - - fork := new(Repository) - resp, err := s.client.Do(ctx, req, fork) - if _, ok := err.(*AcceptedError); ok { - return fork, resp, err - } - if err != nil { - return nil, resp, err - } - - return fork, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/repos_hooks.go b/vendor/github.com/google/go-github/github/repos_hooks.go deleted file mode 100644 index f7ab3a13d..000000000 --- a/vendor/github.com/google/go-github/github/repos_hooks.go +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// WebHookPayload represents the data that is received from GitHub when a push -// event hook is triggered. The format of these payloads pre-date most of the -// GitHub v3 API, so there are lots of minor incompatibilities with the types -// defined in the rest of the API. Therefore, several types are duplicated -// here to account for these differences. -// -// GitHub API docs: https://help.github.com/articles/post-receive-hooks -type WebHookPayload struct { - After *string `json:"after,omitempty"` - Before *string `json:"before,omitempty"` - Commits []WebHookCommit `json:"commits,omitempty"` - Compare *string `json:"compare,omitempty"` - Created *bool `json:"created,omitempty"` - Deleted *bool `json:"deleted,omitempty"` - Forced *bool `json:"forced,omitempty"` - HeadCommit *WebHookCommit `json:"head_commit,omitempty"` - Pusher *User `json:"pusher,omitempty"` - Ref *string `json:"ref,omitempty"` - Repo *Repository `json:"repository,omitempty"` - Sender *User `json:"sender,omitempty"` -} - -func (w WebHookPayload) String() string { - return Stringify(w) -} - -// WebHookCommit represents the commit variant we receive from GitHub in a -// WebHookPayload. -type WebHookCommit struct { - Added []string `json:"added,omitempty"` - Author *WebHookAuthor `json:"author,omitempty"` - Committer *WebHookAuthor `json:"committer,omitempty"` - Distinct *bool `json:"distinct,omitempty"` - ID *string `json:"id,omitempty"` - Message *string `json:"message,omitempty"` - Modified []string `json:"modified,omitempty"` - Removed []string `json:"removed,omitempty"` - Timestamp *time.Time `json:"timestamp,omitempty"` -} - -func (w WebHookCommit) String() string { - return Stringify(w) -} - -// WebHookAuthor represents the author or committer of a commit, as specified -// in a WebHookCommit. The commit author may not correspond to a GitHub User. -type WebHookAuthor struct { - Email *string `json:"email,omitempty"` - Name *string `json:"name,omitempty"` - Username *string `json:"username,omitempty"` -} - -func (w WebHookAuthor) String() string { - return Stringify(w) -} - -// Hook represents a GitHub (web and service) hook for a repository. -type Hook struct { - CreatedAt *time.Time `json:"created_at,omitempty"` - UpdatedAt *time.Time `json:"updated_at,omitempty"` - Name *string `json:"name,omitempty"` - URL *string `json:"url,omitempty"` - Events []string `json:"events,omitempty"` - Active *bool `json:"active,omitempty"` - Config map[string]interface{} `json:"config,omitempty"` - ID *int64 `json:"id,omitempty"` -} - -func (h Hook) String() string { - return Stringify(h) -} - -// CreateHook creates a Hook for the specified repository. -// Name and Config are required fields. -// -// GitHub API docs: https://developer.github.com/v3/repos/hooks/#create-a-hook -func (s *RepositoriesService) CreateHook(ctx context.Context, owner, repo string, hook *Hook) (*Hook, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/hooks", owner, repo) - req, err := s.client.NewRequest("POST", u, hook) - if err != nil { - return nil, nil, err - } - - h := new(Hook) - resp, err := s.client.Do(ctx, req, h) - if err != nil { - return nil, resp, err - } - - return h, resp, nil -} - -// ListHooks lists all Hooks for the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/hooks/#list -func (s *RepositoriesService) ListHooks(ctx context.Context, owner, repo string, opt *ListOptions) ([]*Hook, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/hooks", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var hooks []*Hook - resp, err := s.client.Do(ctx, req, &hooks) - if err != nil { - return nil, resp, err - } - - return hooks, resp, nil -} - -// GetHook returns a single specified Hook. -// -// GitHub API docs: https://developer.github.com/v3/repos/hooks/#get-single-hook -func (s *RepositoriesService) GetHook(ctx context.Context, owner, repo string, id int64) (*Hook, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - hook := new(Hook) - resp, err := s.client.Do(ctx, req, hook) - return hook, resp, err -} - -// EditHook updates a specified Hook. -// -// GitHub API docs: https://developer.github.com/v3/repos/hooks/#edit-a-hook -func (s *RepositoriesService) EditHook(ctx context.Context, owner, repo string, id int64, hook *Hook) (*Hook, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id) - req, err := s.client.NewRequest("PATCH", u, hook) - if err != nil { - return nil, nil, err - } - h := new(Hook) - resp, err := s.client.Do(ctx, req, h) - return h, resp, err -} - -// DeleteHook deletes a specified Hook. -// -// GitHub API docs: https://developer.github.com/v3/repos/hooks/#delete-a-hook -func (s *RepositoriesService) DeleteHook(ctx context.Context, owner, repo string, id int64) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/hooks/%d", owner, repo, id) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} - -// PingHook triggers a 'ping' event to be sent to the Hook. -// -// GitHub API docs: https://developer.github.com/v3/repos/hooks/#ping-a-hook -func (s *RepositoriesService) PingHook(ctx context.Context, owner, repo string, id int64) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/hooks/%d/pings", owner, repo, id) - req, err := s.client.NewRequest("POST", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} - -// TestHook triggers a test Hook by github. -// -// GitHub API docs: https://developer.github.com/v3/repos/hooks/#test-a-push-hook -func (s *RepositoriesService) TestHook(ctx context.Context, owner, repo string, id int64) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/hooks/%d/tests", owner, repo, id) - req, err := s.client.NewRequest("POST", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/repos_invitations.go b/vendor/github.com/google/go-github/github/repos_invitations.go deleted file mode 100644 index 34bf3830f..000000000 --- a/vendor/github.com/google/go-github/github/repos_invitations.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2016 The go-github 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 github - -import ( - "context" - "fmt" -) - -// RepositoryInvitation represents an invitation to collaborate on a repo. -type RepositoryInvitation struct { - ID *int64 `json:"id,omitempty"` - Repo *Repository `json:"repository,omitempty"` - Invitee *User `json:"invitee,omitempty"` - Inviter *User `json:"inviter,omitempty"` - - // Permissions represents the permissions that the associated user will have - // on the repository. Possible values are: "read", "write", "admin". - Permissions *string `json:"permissions,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - URL *string `json:"url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` -} - -// ListInvitations lists all currently-open repository invitations. -// -// GitHub API docs: https://developer.github.com/v3/repos/invitations/#list-invitations-for-a-repository -func (s *RepositoriesService) ListInvitations(ctx context.Context, owner, repo string, opt *ListOptions) ([]*RepositoryInvitation, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/invitations", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeRepositoryInvitationsPreview) - - invites := []*RepositoryInvitation{} - resp, err := s.client.Do(ctx, req, &invites) - if err != nil { - return nil, resp, err - } - - return invites, resp, nil -} - -// DeleteInvitation deletes a repository invitation. -// -// GitHub API docs: https://developer.github.com/v3/repos/invitations/#delete-a-repository-invitation -func (s *RepositoriesService) DeleteInvitation(ctx context.Context, owner, repo string, invitationID int64) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/invitations/%v", owner, repo, invitationID) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeRepositoryInvitationsPreview) - - return s.client.Do(ctx, req, nil) -} - -// UpdateInvitation updates the permissions associated with a repository -// invitation. -// -// permissions represents the permissions that the associated user will have -// on the repository. Possible values are: "read", "write", "admin". -// -// GitHub API docs: https://developer.github.com/v3/repos/invitations/#update-a-repository-invitation -func (s *RepositoriesService) UpdateInvitation(ctx context.Context, owner, repo string, invitationID int64, permissions string) (*RepositoryInvitation, *Response, error) { - opts := &struct { - Permissions string `json:"permissions"` - }{Permissions: permissions} - u := fmt.Sprintf("repos/%v/%v/invitations/%v", owner, repo, invitationID) - req, err := s.client.NewRequest("PATCH", u, opts) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeRepositoryInvitationsPreview) - - invite := &RepositoryInvitation{} - resp, err := s.client.Do(ctx, req, invite) - if err != nil { - return nil, resp, err - } - - return invite, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/repos_keys.go b/vendor/github.com/google/go-github/github/repos_keys.go deleted file mode 100644 index b484f8444..000000000 --- a/vendor/github.com/google/go-github/github/repos_keys.go +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" -) - -// The Key type is defined in users_keys.go - -// ListKeys lists the deploy keys for a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/keys/#list -func (s *RepositoriesService) ListKeys(ctx context.Context, owner string, repo string, opt *ListOptions) ([]*Key, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/keys", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var keys []*Key - resp, err := s.client.Do(ctx, req, &keys) - if err != nil { - return nil, resp, err - } - - return keys, resp, nil -} - -// GetKey fetches a single deploy key. -// -// GitHub API docs: https://developer.github.com/v3/repos/keys/#get -func (s *RepositoriesService) GetKey(ctx context.Context, owner string, repo string, id int64) (*Key, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/keys/%v", owner, repo, id) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - key := new(Key) - resp, err := s.client.Do(ctx, req, key) - if err != nil { - return nil, resp, err - } - - return key, resp, nil -} - -// CreateKey adds a deploy key for a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/keys/#create -func (s *RepositoriesService) CreateKey(ctx context.Context, owner string, repo string, key *Key) (*Key, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/keys", owner, repo) - - req, err := s.client.NewRequest("POST", u, key) - if err != nil { - return nil, nil, err - } - - k := new(Key) - resp, err := s.client.Do(ctx, req, k) - if err != nil { - return nil, resp, err - } - - return k, resp, nil -} - -// EditKey edits a deploy key. -// -// GitHub API docs: https://developer.github.com/v3/repos/keys/#edit -func (s *RepositoriesService) EditKey(ctx context.Context, owner string, repo string, id int64, key *Key) (*Key, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/keys/%v", owner, repo, id) - - req, err := s.client.NewRequest("PATCH", u, key) - if err != nil { - return nil, nil, err - } - - k := new(Key) - resp, err := s.client.Do(ctx, req, k) - if err != nil { - return nil, resp, err - } - - return k, resp, nil -} - -// DeleteKey deletes a deploy key. -// -// GitHub API docs: https://developer.github.com/v3/repos/keys/#delete -func (s *RepositoriesService) DeleteKey(ctx context.Context, owner string, repo string, id int64) (*Response, error) { - u := fmt.Sprintf("repos/%v/%v/keys/%v", owner, repo, id) - - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/repos_merging.go b/vendor/github.com/google/go-github/github/repos_merging.go deleted file mode 100644 index 04383c1ae..000000000 --- a/vendor/github.com/google/go-github/github/repos_merging.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2014 The go-github 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 github - -import ( - "context" - "fmt" -) - -// RepositoryMergeRequest represents a request to merge a branch in a -// repository. -type RepositoryMergeRequest struct { - Base *string `json:"base,omitempty"` - Head *string `json:"head,omitempty"` - CommitMessage *string `json:"commit_message,omitempty"` -} - -// Merge a branch in the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/merging/#perform-a-merge -func (s *RepositoriesService) Merge(ctx context.Context, owner, repo string, request *RepositoryMergeRequest) (*RepositoryCommit, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/merges", owner, repo) - req, err := s.client.NewRequest("POST", u, request) - if err != nil { - return nil, nil, err - } - - commit := new(RepositoryCommit) - resp, err := s.client.Do(ctx, req, commit) - if err != nil { - return nil, resp, err - } - - return commit, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/repos_pages.go b/vendor/github.com/google/go-github/github/repos_pages.go deleted file mode 100644 index 94a95f2b8..000000000 --- a/vendor/github.com/google/go-github/github/repos_pages.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2014 The go-github 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 github - -import ( - "context" - "fmt" -) - -// Pages represents a GitHub Pages site configuration. -type Pages struct { - URL *string `json:"url,omitempty"` - Status *string `json:"status,omitempty"` - CNAME *string `json:"cname,omitempty"` - Custom404 *bool `json:"custom_404,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` -} - -// PagesError represents a build error for a GitHub Pages site. -type PagesError struct { - Message *string `json:"message,omitempty"` -} - -// PagesBuild represents the build information for a GitHub Pages site. -type PagesBuild struct { - URL *string `json:"url,omitempty"` - Status *string `json:"status,omitempty"` - Error *PagesError `json:"error,omitempty"` - Pusher *User `json:"pusher,omitempty"` - Commit *string `json:"commit,omitempty"` - Duration *int `json:"duration,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` -} - -// GetPagesInfo fetches information about a GitHub Pages site. -// -// GitHub API docs: https://developer.github.com/v3/repos/pages/#get-information-about-a-pages-site -func (s *RepositoriesService) GetPagesInfo(ctx context.Context, owner, repo string) (*Pages, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pages", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypePagesPreview) - - site := new(Pages) - resp, err := s.client.Do(ctx, req, site) - if err != nil { - return nil, resp, err - } - - return site, resp, nil -} - -// ListPagesBuilds lists the builds for a GitHub Pages site. -// -// GitHub API docs: https://developer.github.com/v3/repos/pages/#list-pages-builds -func (s *RepositoriesService) ListPagesBuilds(ctx context.Context, owner, repo string, opt *ListOptions) ([]*PagesBuild, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pages/builds", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var pages []*PagesBuild - resp, err := s.client.Do(ctx, req, &pages) - if err != nil { - return nil, resp, err - } - - return pages, resp, nil -} - -// GetLatestPagesBuild fetches the latest build information for a GitHub pages site. -// -// GitHub API docs: https://developer.github.com/v3/repos/pages/#list-latest-pages-build -func (s *RepositoriesService) GetLatestPagesBuild(ctx context.Context, owner, repo string) (*PagesBuild, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pages/builds/latest", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - build := new(PagesBuild) - resp, err := s.client.Do(ctx, req, build) - if err != nil { - return nil, resp, err - } - - return build, resp, nil -} - -// GetPageBuild fetches the specific build information for a GitHub pages site. -// -// GitHub API docs: https://developer.github.com/v3/repos/pages/#list-a-specific-pages-build -func (s *RepositoriesService) GetPageBuild(ctx context.Context, owner, repo string, id int64) (*PagesBuild, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pages/builds/%v", owner, repo, id) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - build := new(PagesBuild) - resp, err := s.client.Do(ctx, req, build) - if err != nil { - return nil, resp, err - } - - return build, resp, nil -} - -// RequestPageBuild requests a build of a GitHub Pages site without needing to push new commit. -// -// GitHub API docs: https://developer.github.com/v3/repos/pages/#request-a-page-build -func (s *RepositoriesService) RequestPageBuild(ctx context.Context, owner, repo string) (*PagesBuild, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/pages/builds", owner, repo) - req, err := s.client.NewRequest("POST", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypePagesPreview) - - build := new(PagesBuild) - resp, err := s.client.Do(ctx, req, build) - if err != nil { - return nil, resp, err - } - - return build, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/repos_projects.go b/vendor/github.com/google/go-github/github/repos_projects.go deleted file mode 100644 index 97a045f6d..000000000 --- a/vendor/github.com/google/go-github/github/repos_projects.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2017 The go-github 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 github - -import ( - "context" - "fmt" - "strings" -) - -// ProjectListOptions specifies the optional parameters to the -// OrganizationsService.ListProjects and RepositoriesService.ListProjects methods. -type ProjectListOptions struct { - // Indicates the state of the projects to return. Can be either open, closed, or all. Default: open - State string `url:"state,omitempty"` - - ListOptions -} - -// ListProjects lists the projects for a repo. -// -// GitHub API docs: https://developer.github.com/v3/projects/#list-repository-projects -func (s *RepositoriesService) ListProjects(ctx context.Context, owner, repo string, opt *ProjectListOptions) ([]*Project, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/projects", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - var projects []*Project - resp, err := s.client.Do(ctx, req, &projects) - if err != nil { - return nil, resp, err - } - - return projects, resp, nil -} - -// CreateProject creates a GitHub Project for the specified repository. -// -// GitHub API docs: https://developer.github.com/v3/projects/#create-a-repository-project -func (s *RepositoriesService) CreateProject(ctx context.Context, owner, repo string, opt *ProjectOptions) (*Project, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/projects", owner, repo) - req, err := s.client.NewRequest("POST", u, opt) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept headers when APIs fully launch. - acceptHeaders := []string{mediaTypeProjectsPreview, mediaTypeGraphQLNodeIDPreview} - req.Header.Set("Accept", strings.Join(acceptHeaders, ", ")) - - project := &Project{} - resp, err := s.client.Do(ctx, req, project) - if err != nil { - return nil, resp, err - } - - return project, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/repos_releases.go b/vendor/github.com/google/go-github/github/repos_releases.go deleted file mode 100644 index d5dfc702f..000000000 --- a/vendor/github.com/google/go-github/github/repos_releases.go +++ /dev/null @@ -1,353 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "errors" - "fmt" - "io" - "mime" - "net/http" - "os" - "path/filepath" - "strings" -) - -// RepositoryRelease represents a GitHub release in a repository. -type RepositoryRelease struct { - ID *int64 `json:"id,omitempty"` - TagName *string `json:"tag_name,omitempty"` - TargetCommitish *string `json:"target_commitish,omitempty"` - Name *string `json:"name,omitempty"` - Body *string `json:"body,omitempty"` - Draft *bool `json:"draft,omitempty"` - Prerelease *bool `json:"prerelease,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - PublishedAt *Timestamp `json:"published_at,omitempty"` - URL *string `json:"url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - AssetsURL *string `json:"assets_url,omitempty"` - Assets []ReleaseAsset `json:"assets,omitempty"` - UploadURL *string `json:"upload_url,omitempty"` - ZipballURL *string `json:"zipball_url,omitempty"` - TarballURL *string `json:"tarball_url,omitempty"` - Author *User `json:"author,omitempty"` - NodeID *string `json:"node_id,omitempty"` -} - -func (r RepositoryRelease) String() string { - return Stringify(r) -} - -// ReleaseAsset represents a GitHub release asset in a repository. -type ReleaseAsset struct { - ID *int64 `json:"id,omitempty"` - URL *string `json:"url,omitempty"` - Name *string `json:"name,omitempty"` - Label *string `json:"label,omitempty"` - State *string `json:"state,omitempty"` - ContentType *string `json:"content_type,omitempty"` - Size *int `json:"size,omitempty"` - DownloadCount *int `json:"download_count,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - BrowserDownloadURL *string `json:"browser_download_url,omitempty"` - Uploader *User `json:"uploader,omitempty"` - NodeID *string `json:"node_id,omitempty"` -} - -func (r ReleaseAsset) String() string { - return Stringify(r) -} - -// ListReleases lists the releases for a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/releases/#list-releases-for-a-repository -func (s *RepositoriesService) ListReleases(ctx context.Context, owner, repo string, opt *ListOptions) ([]*RepositoryRelease, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/releases", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - var releases []*RepositoryRelease - resp, err := s.client.Do(ctx, req, &releases) - if err != nil { - return nil, resp, err - } - return releases, resp, nil -} - -// GetRelease fetches a single release. -// -// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-a-single-release -func (s *RepositoriesService) GetRelease(ctx context.Context, owner, repo string, id int64) (*RepositoryRelease, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/releases/%d", owner, repo, id) - return s.getSingleRelease(ctx, u) -} - -// GetLatestRelease fetches the latest published release for the repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-the-latest-release -func (s *RepositoriesService) GetLatestRelease(ctx context.Context, owner, repo string) (*RepositoryRelease, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/releases/latest", owner, repo) - return s.getSingleRelease(ctx, u) -} - -// GetReleaseByTag fetches a release with the specified tag. -// -// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-a-release-by-tag-name -func (s *RepositoriesService) GetReleaseByTag(ctx context.Context, owner, repo, tag string) (*RepositoryRelease, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/releases/tags/%s", owner, repo, tag) - return s.getSingleRelease(ctx, u) -} - -func (s *RepositoriesService) getSingleRelease(ctx context.Context, url string) (*RepositoryRelease, *Response, error) { - req, err := s.client.NewRequest("GET", url, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - release := new(RepositoryRelease) - resp, err := s.client.Do(ctx, req, release) - if err != nil { - return nil, resp, err - } - return release, resp, nil -} - -// CreateRelease adds a new release for a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/releases/#create-a-release -func (s *RepositoriesService) CreateRelease(ctx context.Context, owner, repo string, release *RepositoryRelease) (*RepositoryRelease, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/releases", owner, repo) - - req, err := s.client.NewRequest("POST", u, release) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - r := new(RepositoryRelease) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - return r, resp, nil -} - -// EditRelease edits a repository release. -// -// GitHub API docs: https://developer.github.com/v3/repos/releases/#edit-a-release -func (s *RepositoriesService) EditRelease(ctx context.Context, owner, repo string, id int64, release *RepositoryRelease) (*RepositoryRelease, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/releases/%d", owner, repo, id) - - req, err := s.client.NewRequest("PATCH", u, release) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - r := new(RepositoryRelease) - resp, err := s.client.Do(ctx, req, r) - if err != nil { - return nil, resp, err - } - return r, resp, nil -} - -// DeleteRelease delete a single release from a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/releases/#delete-a-release -func (s *RepositoriesService) DeleteRelease(ctx context.Context, owner, repo string, id int64) (*Response, error) { - u := fmt.Sprintf("repos/%s/%s/releases/%d", owner, repo, id) - - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} - -// ListReleaseAssets lists the release's assets. -// -// GitHub API docs: https://developer.github.com/v3/repos/releases/#list-assets-for-a-release -func (s *RepositoriesService) ListReleaseAssets(ctx context.Context, owner, repo string, id int64, opt *ListOptions) ([]*ReleaseAsset, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/releases/%d/assets", owner, repo, id) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - var assets []*ReleaseAsset - resp, err := s.client.Do(ctx, req, &assets) - if err != nil { - return nil, resp, err - } - return assets, resp, nil -} - -// GetReleaseAsset fetches a single release asset. -// -// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-a-single-release-asset -func (s *RepositoriesService) GetReleaseAsset(ctx context.Context, owner, repo string, id int64) (*ReleaseAsset, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - asset := new(ReleaseAsset) - resp, err := s.client.Do(ctx, req, asset) - if err != nil { - return nil, resp, err - } - return asset, resp, nil -} - -// DownloadReleaseAsset downloads a release asset or returns a redirect URL. -// -// DownloadReleaseAsset returns an io.ReadCloser that reads the contents of the -// specified release asset. It is the caller's responsibility to close the ReadCloser. -// If a redirect is returned, the redirect URL will be returned as a string instead -// of the io.ReadCloser. Exactly one of rc and redirectURL will be zero. -// -// GitHub API docs: https://developer.github.com/v3/repos/releases/#get-a-single-release-asset -func (s *RepositoriesService) DownloadReleaseAsset(ctx context.Context, owner, repo string, id int64) (rc io.ReadCloser, redirectURL string, err error) { - u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, "", err - } - req.Header.Set("Accept", defaultMediaType) - - s.client.clientMu.Lock() - defer s.client.clientMu.Unlock() - - var loc string - saveRedirect := s.client.client.CheckRedirect - s.client.client.CheckRedirect = func(req *http.Request, via []*http.Request) error { - loc = req.URL.String() - return errors.New("disable redirect") - } - defer func() { s.client.client.CheckRedirect = saveRedirect }() - - req = withContext(ctx, req) - resp, err := s.client.client.Do(req) - if err != nil { - if !strings.Contains(err.Error(), "disable redirect") { - return nil, "", err - } - return nil, loc, nil // Intentionally return no error with valid redirect URL. - } - - if err := CheckResponse(resp); err != nil { - resp.Body.Close() - return nil, "", err - } - - return resp.Body, "", nil -} - -// EditReleaseAsset edits a repository release asset. -// -// GitHub API docs: https://developer.github.com/v3/repos/releases/#edit-a-release-asset -func (s *RepositoriesService) EditReleaseAsset(ctx context.Context, owner, repo string, id int64, release *ReleaseAsset) (*ReleaseAsset, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id) - - req, err := s.client.NewRequest("PATCH", u, release) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - asset := new(ReleaseAsset) - resp, err := s.client.Do(ctx, req, asset) - if err != nil { - return nil, resp, err - } - return asset, resp, nil -} - -// DeleteReleaseAsset delete a single release asset from a repository. -// -// GitHub API docs: https://developer.github.com/v3/repos/releases/#delete-a-release-asset -func (s *RepositoriesService) DeleteReleaseAsset(ctx context.Context, owner, repo string, id int64) (*Response, error) { - u := fmt.Sprintf("repos/%s/%s/releases/assets/%d", owner, repo, id) - - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - return s.client.Do(ctx, req, nil) -} - -// UploadReleaseAsset creates an asset by uploading a file into a release repository. -// To upload assets that cannot be represented by an os.File, call NewUploadRequest directly. -// -// GitHub API docs: https://developer.github.com/v3/repos/releases/#upload-a-release-asset -func (s *RepositoriesService) UploadReleaseAsset(ctx context.Context, owner, repo string, id int64, opt *UploadOptions, file *os.File) (*ReleaseAsset, *Response, error) { - u := fmt.Sprintf("repos/%s/%s/releases/%d/assets", owner, repo, id) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - stat, err := file.Stat() - if err != nil { - return nil, nil, err - } - if stat.IsDir() { - return nil, nil, errors.New("the asset to upload can't be a directory") - } - - mediaType := mime.TypeByExtension(filepath.Ext(file.Name())) - req, err := s.client.NewUploadRequest(u, file, stat.Size(), mediaType) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGraphQLNodeIDPreview) - - asset := new(ReleaseAsset) - resp, err := s.client.Do(ctx, req, asset) - if err != nil { - return nil, resp, err - } - return asset, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/repos_stats.go b/vendor/github.com/google/go-github/github/repos_stats.go deleted file mode 100644 index bb355aead..000000000 --- a/vendor/github.com/google/go-github/github/repos_stats.go +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2014 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// ContributorStats represents a contributor to a repository and their -// weekly contributions to a given repo. -type ContributorStats struct { - Author *Contributor `json:"author,omitempty"` - Total *int `json:"total,omitempty"` - Weeks []WeeklyStats `json:"weeks,omitempty"` -} - -func (c ContributorStats) String() string { - return Stringify(c) -} - -// WeeklyStats represents the number of additions, deletions and commits -// a Contributor made in a given week. -type WeeklyStats struct { - Week *Timestamp `json:"w,omitempty"` - Additions *int `json:"a,omitempty"` - Deletions *int `json:"d,omitempty"` - Commits *int `json:"c,omitempty"` -} - -func (w WeeklyStats) String() string { - return Stringify(w) -} - -// ListContributorsStats gets a repo's contributor list with additions, -// deletions and commit counts. -// -// If this is the first time these statistics are requested for the given -// repository, this method will return an *AcceptedError and a status code of -// 202. This is because this is the status that GitHub returns to signify that -// it is now computing the requested statistics. A follow up request, after a -// delay of a second or so, should result in a successful request. -// -// GitHub API docs: https://developer.github.com/v3/repos/statistics/#contributors -func (s *RepositoriesService) ListContributorsStats(ctx context.Context, owner, repo string) ([]*ContributorStats, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/stats/contributors", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var contributorStats []*ContributorStats - resp, err := s.client.Do(ctx, req, &contributorStats) - if err != nil { - return nil, resp, err - } - - return contributorStats, resp, nil -} - -// WeeklyCommitActivity represents the weekly commit activity for a repository. -// The days array is a group of commits per day, starting on Sunday. -type WeeklyCommitActivity struct { - Days []int `json:"days,omitempty"` - Total *int `json:"total,omitempty"` - Week *Timestamp `json:"week,omitempty"` -} - -func (w WeeklyCommitActivity) String() string { - return Stringify(w) -} - -// ListCommitActivity returns the last year of commit activity -// grouped by week. The days array is a group of commits per day, -// starting on Sunday. -// -// If this is the first time these statistics are requested for the given -// repository, this method will return an *AcceptedError and a status code of -// 202. This is because this is the status that GitHub returns to signify that -// it is now computing the requested statistics. A follow up request, after a -// delay of a second or so, should result in a successful request. -// -// GitHub API docs: https://developer.github.com/v3/repos/statistics/#commit-activity -func (s *RepositoriesService) ListCommitActivity(ctx context.Context, owner, repo string) ([]*WeeklyCommitActivity, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/stats/commit_activity", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var weeklyCommitActivity []*WeeklyCommitActivity - resp, err := s.client.Do(ctx, req, &weeklyCommitActivity) - if err != nil { - return nil, resp, err - } - - return weeklyCommitActivity, resp, nil -} - -// ListCodeFrequency returns a weekly aggregate of the number of additions and -// deletions pushed to a repository. Returned WeeklyStats will contain -// additions and deletions, but not total commits. -// -// If this is the first time these statistics are requested for the given -// repository, this method will return an *AcceptedError and a status code of -// 202. This is because this is the status that GitHub returns to signify that -// it is now computing the requested statistics. A follow up request, after a -// delay of a second or so, should result in a successful request. -// -// GitHub API docs: https://developer.github.com/v3/repos/statistics/#code-frequency -func (s *RepositoriesService) ListCodeFrequency(ctx context.Context, owner, repo string) ([]*WeeklyStats, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/stats/code_frequency", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var weeks [][]int - resp, err := s.client.Do(ctx, req, &weeks) - - // convert int slices into WeeklyStats - var stats []*WeeklyStats - for _, week := range weeks { - if len(week) != 3 { - continue - } - stat := &WeeklyStats{ - Week: &Timestamp{time.Unix(int64(week[0]), 0)}, - Additions: Int(week[1]), - Deletions: Int(week[2]), - } - stats = append(stats, stat) - } - - return stats, resp, err -} - -// RepositoryParticipation is the number of commits by everyone -// who has contributed to the repository (including the owner) -// as well as the number of commits by the owner themself. -type RepositoryParticipation struct { - All []int `json:"all,omitempty"` - Owner []int `json:"owner,omitempty"` -} - -func (r RepositoryParticipation) String() string { - return Stringify(r) -} - -// ListParticipation returns the total commit counts for the 'owner' -// and total commit counts in 'all'. 'all' is everyone combined, -// including the 'owner' in the last 52 weeks. If you’d like to get -// the commit counts for non-owners, you can subtract 'all' from 'owner'. -// -// The array order is oldest week (index 0) to most recent week. -// -// If this is the first time these statistics are requested for the given -// repository, this method will return an *AcceptedError and a status code of -// 202. This is because this is the status that GitHub returns to signify that -// it is now computing the requested statistics. A follow up request, after a -// delay of a second or so, should result in a successful request. -// -// GitHub API docs: https://developer.github.com/v3/repos/statistics/#participation -func (s *RepositoriesService) ListParticipation(ctx context.Context, owner, repo string) (*RepositoryParticipation, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/stats/participation", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - participation := new(RepositoryParticipation) - resp, err := s.client.Do(ctx, req, participation) - if err != nil { - return nil, resp, err - } - - return participation, resp, nil -} - -// PunchCard represents the number of commits made during a given hour of a -// day of the week. -type PunchCard struct { - Day *int // Day of the week (0-6: =Sunday - Saturday). - Hour *int // Hour of day (0-23). - Commits *int // Number of commits. -} - -// ListPunchCard returns the number of commits per hour in each day. -// -// If this is the first time these statistics are requested for the given -// repository, this method will return an *AcceptedError and a status code of -// 202. This is because this is the status that GitHub returns to signify that -// it is now computing the requested statistics. A follow up request, after a -// delay of a second or so, should result in a successful request. -// -// GitHub API docs: https://developer.github.com/v3/repos/statistics/#punch-card -func (s *RepositoriesService) ListPunchCard(ctx context.Context, owner, repo string) ([]*PunchCard, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/stats/punch_card", owner, repo) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var results [][]int - resp, err := s.client.Do(ctx, req, &results) - - // convert int slices into Punchcards - var cards []*PunchCard - for _, result := range results { - if len(result) != 3 { - continue - } - card := &PunchCard{ - Day: Int(result[0]), - Hour: Int(result[1]), - Commits: Int(result[2]), - } - cards = append(cards, card) - } - - return cards, resp, err -} diff --git a/vendor/github.com/google/go-github/github/repos_statuses.go b/vendor/github.com/google/go-github/github/repos_statuses.go deleted file mode 100644 index f94fdc858..000000000 --- a/vendor/github.com/google/go-github/github/repos_statuses.go +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// RepoStatus represents the status of a repository at a particular reference. -type RepoStatus struct { - ID *int64 `json:"id,omitempty"` - URL *string `json:"url,omitempty"` - - // State is the current state of the repository. Possible values are: - // pending, success, error, or failure. - State *string `json:"state,omitempty"` - - // TargetURL is the URL of the page representing this status. It will be - // linked from the GitHub UI to allow users to see the source of the status. - TargetURL *string `json:"target_url,omitempty"` - - // Description is a short high level summary of the status. - Description *string `json:"description,omitempty"` - - // A string label to differentiate this status from the statuses of other systems. - Context *string `json:"context,omitempty"` - - Creator *User `json:"creator,omitempty"` - CreatedAt *time.Time `json:"created_at,omitempty"` - UpdatedAt *time.Time `json:"updated_at,omitempty"` -} - -func (r RepoStatus) String() string { - return Stringify(r) -} - -// ListStatuses lists the statuses of a repository at the specified -// reference. ref can be a SHA, a branch name, or a tag name. -// -// GitHub API docs: https://developer.github.com/v3/repos/statuses/#list-statuses-for-a-specific-ref -func (s *RepositoriesService) ListStatuses(ctx context.Context, owner, repo, ref string, opt *ListOptions) ([]*RepoStatus, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/commits/%v/statuses", owner, repo, ref) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var statuses []*RepoStatus - resp, err := s.client.Do(ctx, req, &statuses) - if err != nil { - return nil, resp, err - } - - return statuses, resp, nil -} - -// CreateStatus creates a new status for a repository at the specified -// reference. Ref can be a SHA, a branch name, or a tag name. -// -// GitHub API docs: https://developer.github.com/v3/repos/statuses/#create-a-status -func (s *RepositoriesService) CreateStatus(ctx context.Context, owner, repo, ref string, status *RepoStatus) (*RepoStatus, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/statuses/%v", owner, repo, ref) - req, err := s.client.NewRequest("POST", u, status) - if err != nil { - return nil, nil, err - } - - repoStatus := new(RepoStatus) - resp, err := s.client.Do(ctx, req, repoStatus) - if err != nil { - return nil, resp, err - } - - return repoStatus, resp, nil -} - -// CombinedStatus represents the combined status of a repository at a particular reference. -type CombinedStatus struct { - // State is the combined state of the repository. Possible values are: - // failure, pending, or success. - State *string `json:"state,omitempty"` - - Name *string `json:"name,omitempty"` - SHA *string `json:"sha,omitempty"` - TotalCount *int `json:"total_count,omitempty"` - Statuses []RepoStatus `json:"statuses,omitempty"` - - CommitURL *string `json:"commit_url,omitempty"` - RepositoryURL *string `json:"repository_url,omitempty"` -} - -func (s CombinedStatus) String() string { - return Stringify(s) -} - -// GetCombinedStatus returns the combined status of a repository at the specified -// reference. ref can be a SHA, a branch name, or a tag name. -// -// GitHub API docs: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref -func (s *RepositoriesService) GetCombinedStatus(ctx context.Context, owner, repo, ref string, opt *ListOptions) (*CombinedStatus, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/commits/%v/status", owner, repo, ref) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - status := new(CombinedStatus) - resp, err := s.client.Do(ctx, req, status) - if err != nil { - return nil, resp, err - } - - return status, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/repos_traffic.go b/vendor/github.com/google/go-github/github/repos_traffic.go deleted file mode 100644 index fb1c97648..000000000 --- a/vendor/github.com/google/go-github/github/repos_traffic.go +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2016 The go-github 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 github - -import ( - "context" - "fmt" -) - -// TrafficReferrer represent information about traffic from a referrer . -type TrafficReferrer struct { - Referrer *string `json:"referrer,omitempty"` - Count *int `json:"count,omitempty"` - Uniques *int `json:"uniques,omitempty"` -} - -// TrafficPath represent information about the traffic on a path of the repo. -type TrafficPath struct { - Path *string `json:"path,omitempty"` - Title *string `json:"title,omitempty"` - Count *int `json:"count,omitempty"` - Uniques *int `json:"uniques,omitempty"` -} - -// TrafficData represent information about a specific timestamp in views or clones list. -type TrafficData struct { - Timestamp *Timestamp `json:"timestamp,omitempty"` - Count *int `json:"count,omitempty"` - Uniques *int `json:"uniques,omitempty"` -} - -// TrafficViews represent information about the number of views in the last 14 days. -type TrafficViews struct { - Views []*TrafficData `json:"views,omitempty"` - Count *int `json:"count,omitempty"` - Uniques *int `json:"uniques,omitempty"` -} - -// TrafficClones represent information about the number of clones in the last 14 days. -type TrafficClones struct { - Clones []*TrafficData `json:"clones,omitempty"` - Count *int `json:"count,omitempty"` - Uniques *int `json:"uniques,omitempty"` -} - -// TrafficBreakdownOptions specifies the parameters to methods that support breakdown per day or week. -// Can be one of: day, week. Default: day. -type TrafficBreakdownOptions struct { - Per string `url:"per,omitempty"` -} - -// ListTrafficReferrers list the top 10 referrers over the last 14 days. -// -// GitHub API docs: https://developer.github.com/v3/repos/traffic/#list-referrers -func (s *RepositoriesService) ListTrafficReferrers(ctx context.Context, owner, repo string) ([]*TrafficReferrer, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/traffic/popular/referrers", owner, repo) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var trafficReferrers []*TrafficReferrer - resp, err := s.client.Do(ctx, req, &trafficReferrers) - if err != nil { - return nil, resp, err - } - - return trafficReferrers, resp, nil -} - -// ListTrafficPaths list the top 10 popular content over the last 14 days. -// -// GitHub API docs: https://developer.github.com/v3/repos/traffic/#list-paths -func (s *RepositoriesService) ListTrafficPaths(ctx context.Context, owner, repo string) ([]*TrafficPath, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/traffic/popular/paths", owner, repo) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var paths []*TrafficPath - resp, err := s.client.Do(ctx, req, &paths) - if err != nil { - return nil, resp, err - } - - return paths, resp, nil -} - -// ListTrafficViews get total number of views for the last 14 days and breaks it down either per day or week. -// -// GitHub API docs: https://developer.github.com/v3/repos/traffic/#views -func (s *RepositoriesService) ListTrafficViews(ctx context.Context, owner, repo string, opt *TrafficBreakdownOptions) (*TrafficViews, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/traffic/views", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - trafficViews := new(TrafficViews) - resp, err := s.client.Do(ctx, req, &trafficViews) - if err != nil { - return nil, resp, err - } - - return trafficViews, resp, nil -} - -// ListTrafficClones get total number of clones for the last 14 days and breaks it down either per day or week for the last 14 days. -// -// GitHub API docs: https://developer.github.com/v3/repos/traffic/#views -func (s *RepositoriesService) ListTrafficClones(ctx context.Context, owner, repo string, opt *TrafficBreakdownOptions) (*TrafficClones, *Response, error) { - u := fmt.Sprintf("repos/%v/%v/traffic/clones", owner, repo) - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - trafficClones := new(TrafficClones) - resp, err := s.client.Do(ctx, req, &trafficClones) - if err != nil { - return nil, resp, err - } - - return trafficClones, resp, nil -} diff --git a/vendor/github.com/google/go-github/github/search.go b/vendor/github.com/google/go-github/github/search.go deleted file mode 100644 index 6e0000df8..000000000 --- a/vendor/github.com/google/go-github/github/search.go +++ /dev/null @@ -1,255 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" - "strconv" - - qs "github.com/google/go-querystring/query" -) - -// SearchService provides access to the search related functions -// in the GitHub API. -// -// Each method takes a query string defining the search keywords and any search qualifiers. -// For example, when searching issues, the query "gopher is:issue language:go" will search -// for issues containing the word "gopher" in Go repositories. The method call -// opts := &github.SearchOptions{Sort: "created", Order: "asc"} -// cl.Search.Issues(ctx, "gopher is:issue language:go", opts) -// will search for such issues, sorting by creation date in ascending order -// (i.e., oldest first). -// -// GitHub API docs: https://developer.github.com/v3/search/ -type SearchService service - -// SearchOptions specifies optional parameters to the SearchService methods. -type SearchOptions struct { - // How to sort the search results. Possible values are: - // - for repositories: stars, fork, updated - // - for commits: author-date, committer-date - // - for code: indexed - // - for issues: comments, created, updated - // - for users: followers, repositories, joined - // - // Default is to sort by best match. - Sort string `url:"sort,omitempty"` - - // Sort order if sort parameter is provided. Possible values are: asc, - // desc. Default is desc. - Order string `url:"order,omitempty"` - - // Whether to retrieve text match metadata with a query - TextMatch bool `url:"-"` - - ListOptions -} - -// Common search parameters. -type searchParameters struct { - Query string - RepositoryID *int64 // Sent if non-nil. -} - -// RepositoriesSearchResult represents the result of a repositories search. -type RepositoriesSearchResult struct { - Total *int `json:"total_count,omitempty"` - IncompleteResults *bool `json:"incomplete_results,omitempty"` - Repositories []Repository `json:"items,omitempty"` -} - -// Repositories searches repositories via various criteria. -// -// GitHub API docs: https://developer.github.com/v3/search/#search-repositories -func (s *SearchService) Repositories(ctx context.Context, query string, opt *SearchOptions) (*RepositoriesSearchResult, *Response, error) { - result := new(RepositoriesSearchResult) - resp, err := s.search(ctx, "repositories", &searchParameters{Query: query}, opt, result) - return result, resp, err -} - -// CommitsSearchResult represents the result of a commits search. -type CommitsSearchResult struct { - Total *int `json:"total_count,omitempty"` - IncompleteResults *bool `json:"incomplete_results,omitempty"` - Commits []*CommitResult `json:"items,omitempty"` -} - -// CommitResult represents a commit object as returned in commit search endpoint response. -type CommitResult struct { - SHA *string `json:"sha,omitempty"` - Commit *Commit `json:"commit,omitempty"` - Author *User `json:"author,omitempty"` - Committer *User `json:"committer,omitempty"` - Parents []*Commit `json:"parents,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - URL *string `json:"url,omitempty"` - CommentsURL *string `json:"comments_url,omitempty"` - - Repository *Repository `json:"repository,omitempty"` - Score *float64 `json:"score,omitempty"` -} - -// Commits searches commits via various criteria. -// -// GitHub API docs: https://developer.github.com/v3/search/#search-commits -func (s *SearchService) Commits(ctx context.Context, query string, opt *SearchOptions) (*CommitsSearchResult, *Response, error) { - result := new(CommitsSearchResult) - resp, err := s.search(ctx, "commits", &searchParameters{Query: query}, opt, result) - return result, resp, err -} - -// IssuesSearchResult represents the result of an issues search. -type IssuesSearchResult struct { - Total *int `json:"total_count,omitempty"` - IncompleteResults *bool `json:"incomplete_results,omitempty"` - Issues []Issue `json:"items,omitempty"` -} - -// Issues searches issues via various criteria. -// -// GitHub API docs: https://developer.github.com/v3/search/#search-issues -func (s *SearchService) Issues(ctx context.Context, query string, opt *SearchOptions) (*IssuesSearchResult, *Response, error) { - result := new(IssuesSearchResult) - resp, err := s.search(ctx, "issues", &searchParameters{Query: query}, opt, result) - return result, resp, err -} - -// UsersSearchResult represents the result of a users search. -type UsersSearchResult struct { - Total *int `json:"total_count,omitempty"` - IncompleteResults *bool `json:"incomplete_results,omitempty"` - Users []User `json:"items,omitempty"` -} - -// Users searches users via various criteria. -// -// GitHub API docs: https://developer.github.com/v3/search/#search-users -func (s *SearchService) Users(ctx context.Context, query string, opt *SearchOptions) (*UsersSearchResult, *Response, error) { - result := new(UsersSearchResult) - resp, err := s.search(ctx, "users", &searchParameters{Query: query}, opt, result) - return result, resp, err -} - -// Match represents a single text match. -type Match struct { - Text *string `json:"text,omitempty"` - Indices []int `json:"indices,omitempty"` -} - -// TextMatch represents a text match for a SearchResult -type TextMatch struct { - ObjectURL *string `json:"object_url,omitempty"` - ObjectType *string `json:"object_type,omitempty"` - Property *string `json:"property,omitempty"` - Fragment *string `json:"fragment,omitempty"` - Matches []Match `json:"matches,omitempty"` -} - -func (tm TextMatch) String() string { - return Stringify(tm) -} - -// CodeSearchResult represents the result of a code search. -type CodeSearchResult struct { - Total *int `json:"total_count,omitempty"` - IncompleteResults *bool `json:"incomplete_results,omitempty"` - CodeResults []CodeResult `json:"items,omitempty"` -} - -// CodeResult represents a single search result. -type CodeResult struct { - Name *string `json:"name,omitempty"` - Path *string `json:"path,omitempty"` - SHA *string `json:"sha,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - Repository *Repository `json:"repository,omitempty"` - TextMatches []TextMatch `json:"text_matches,omitempty"` -} - -func (c CodeResult) String() string { - return Stringify(c) -} - -// Code searches code via various criteria. -// -// GitHub API docs: https://developer.github.com/v3/search/#search-code -func (s *SearchService) Code(ctx context.Context, query string, opt *SearchOptions) (*CodeSearchResult, *Response, error) { - result := new(CodeSearchResult) - resp, err := s.search(ctx, "code", &searchParameters{Query: query}, opt, result) - return result, resp, err -} - -// LabelsSearchResult represents the result of a code search. -type LabelsSearchResult struct { - Total *int `json:"total_count,omitempty"` - IncompleteResults *bool `json:"incomplete_results,omitempty"` - Labels []*LabelResult `json:"items,omitempty"` -} - -// LabelResult represents a single search result. -type LabelResult struct { - ID *int64 `json:"id,omitempty"` - URL *string `json:"url,omitempty"` - Name *string `json:"name,omitempty"` - Color *string `json:"color,omitempty"` - Default *bool `json:"default,omitempty"` - Description *string `json:"description,omitempty"` - Score *float64 `json:"score,omitempty"` -} - -func (l LabelResult) String() string { - return Stringify(l) -} - -// Labels searches labels in the repository with ID repoID via various criteria. -// -// GitHub API docs: https://developer.github.com/v3/search/#search-labels -func (s *SearchService) Labels(ctx context.Context, repoID int64, query string, opt *SearchOptions) (*LabelsSearchResult, *Response, error) { - result := new(LabelsSearchResult) - resp, err := s.search(ctx, "labels", &searchParameters{RepositoryID: &repoID, Query: query}, opt, result) - return result, resp, err -} - -// Helper function that executes search queries against different -// GitHub search types (repositories, commits, code, issues, users, labels) -func (s *SearchService) search(ctx context.Context, searchType string, parameters *searchParameters, opt *SearchOptions, result interface{}) (*Response, error) { - params, err := qs.Values(opt) - if err != nil { - return nil, err - } - params.Set("q", parameters.Query) - if parameters.RepositoryID != nil { - params.Set("repository_id", strconv.FormatInt(*parameters.RepositoryID, 10)) - } - u := fmt.Sprintf("search/%s?%s", searchType, params.Encode()) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, err - } - - switch { - case searchType == "commits": - // Accept header for search commits preview endpoint - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeCommitSearchPreview) - case searchType == "repositories": - // Accept header for search repositories based on topics preview endpoint - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeTopicsPreview) - case searchType == "labels": - // Accept header for search labels based on label description preview endpoint. - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview) - case opt != nil && opt.TextMatch: - // Accept header defaults to "application/vnd.github.v3+json" - // We change it here to fetch back text-match metadata - req.Header.Set("Accept", "application/vnd.github.v3.text-match+json") - } - - return s.client.Do(ctx, req, result) -} diff --git a/vendor/github.com/google/go-github/github/strings.go b/vendor/github.com/google/go-github/github/strings.go deleted file mode 100644 index 431e1cc6c..000000000 --- a/vendor/github.com/google/go-github/github/strings.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "bytes" - "fmt" - "io" - - "reflect" -) - -var timestampType = reflect.TypeOf(Timestamp{}) - -// Stringify attempts to create a reasonable string representation of types in -// the GitHub library. It does things like resolve pointers to their values -// and omits struct fields with nil values. -func Stringify(message interface{}) string { - var buf bytes.Buffer - v := reflect.ValueOf(message) - stringifyValue(&buf, v) - return buf.String() -} - -// stringifyValue was heavily inspired by the goprotobuf library. - -func stringifyValue(w io.Writer, val reflect.Value) { - if val.Kind() == reflect.Ptr && val.IsNil() { - w.Write([]byte("")) - return - } - - v := reflect.Indirect(val) - - switch v.Kind() { - case reflect.String: - fmt.Fprintf(w, `"%s"`, v) - case reflect.Slice: - w.Write([]byte{'['}) - for i := 0; i < v.Len(); i++ { - if i > 0 { - w.Write([]byte{' '}) - } - - stringifyValue(w, v.Index(i)) - } - - w.Write([]byte{']'}) - return - case reflect.Struct: - if v.Type().Name() != "" { - w.Write([]byte(v.Type().String())) - } - - // special handling of Timestamp values - if v.Type() == timestampType { - fmt.Fprintf(w, "{%s}", v.Interface()) - return - } - - w.Write([]byte{'{'}) - - var sep bool - for i := 0; i < v.NumField(); i++ { - fv := v.Field(i) - if fv.Kind() == reflect.Ptr && fv.IsNil() { - continue - } - if fv.Kind() == reflect.Slice && fv.IsNil() { - continue - } - - if sep { - w.Write([]byte(", ")) - } else { - sep = true - } - - w.Write([]byte(v.Type().Field(i).Name)) - w.Write([]byte{':'}) - stringifyValue(w, fv) - } - - w.Write([]byte{'}'}) - default: - if v.CanInterface() { - fmt.Fprint(w, v.Interface()) - } - } -} diff --git a/vendor/github.com/google/go-github/github/teams.go b/vendor/github.com/google/go-github/github/teams.go deleted file mode 100644 index 1021d538f..000000000 --- a/vendor/github.com/google/go-github/github/teams.go +++ /dev/null @@ -1,7 +0,0 @@ -package github - -// TeamsService provides access to the team-related functions -// in the GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/teams/ -type TeamsService service diff --git a/vendor/github.com/google/go-github/github/teams_discussion_comments.go b/vendor/github.com/google/go-github/github/teams_discussion_comments.go deleted file mode 100644 index 26d0e8c50..000000000 --- a/vendor/github.com/google/go-github/github/teams_discussion_comments.go +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2018 The go-github 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 github - -import ( - "context" - "fmt" -) - -// DiscussionComment represents a GitHub dicussion in a team. -type DiscussionComment struct { - Author *User `json:"author,omitempty"` - Body *string `json:"body,omitempty"` - BodyHTML *string `json:"body_html,omitempty"` - BodyVersion *string `json:"body_version,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - LastEditedAt *Timestamp `json:"last_edited_at,omitempty"` - DiscussionURL *string `json:"discussion_url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - NodeID *string `json:"node_id,omitempty"` - Number *int64 `json:"number,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - URL *string `json:"url,omitempty"` -} - -func (c DiscussionComment) String() string { - return Stringify(c) -} - -// DiscussionCommentListOptions specifies optional parameters to the -// TeamServices.ListComments method. -type DiscussionCommentListOptions struct { - // Sorts the discussion comments by the date they were created. - // Accepted values are asc and desc. Default is desc. - Direction string `url:"direction,omitempty"` -} - -// ListComments lists all comments on a team discussion. -// Authenticated user must grant read:discussion scope. -// -// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#list-comments -func (s *TeamsService) ListComments(ctx context.Context, teamID int64, discussionNumber int, options *DiscussionCommentListOptions) ([]*DiscussionComment, *Response, error) { - u := fmt.Sprintf("teams/%v/discussions/%v/comments", teamID, discussionNumber) - u, err := addOptions(u, options) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) - - var comments []*DiscussionComment - resp, err := s.client.Do(ctx, req, &comments) - if err != nil { - return nil, resp, err - } - - return comments, resp, nil -} - -// GetComment gets a specific comment on a team discussion. -// Authenticated user must grant read:discussion scope. -// -// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#get-a-single-comment -func (s *TeamsService) GetComment(ctx context.Context, teamID int64, discussionNumber, commentNumber int) (*DiscussionComment, *Response, error) { - u := fmt.Sprintf("teams/%v/discussions/%v/comments/%v", teamID, discussionNumber, commentNumber) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) - - discussionComment := &DiscussionComment{} - resp, err := s.client.Do(ctx, req, discussionComment) - if err != nil { - return nil, resp, err - } - - return discussionComment, resp, nil -} - -// CreateComment creates a new discussion post on a team discussion. -// Authenticated user must grant write:discussion scope. -// -// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#create-a-comment -func (s *TeamsService) CreateComment(ctx context.Context, teamID int64, discsusionNumber int, comment DiscussionComment) (*DiscussionComment, *Response, error) { - u := fmt.Sprintf("teams/%v/discussions/%v/comments", teamID, discsusionNumber) - req, err := s.client.NewRequest("POST", u, comment) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) - - discussionComment := &DiscussionComment{} - resp, err := s.client.Do(ctx, req, discussionComment) - if err != nil { - return nil, resp, err - } - - return discussionComment, resp, nil -} - -// EditComment edits the body text of a discussion comment. -// Authenticated user must grant write:discussion scope. -// User is allowed to edit body of a comment only. -// -// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#edit-a-comment -func (s *TeamsService) EditComment(ctx context.Context, teamID int64, discussionNumber, commentNumber int, comment DiscussionComment) (*DiscussionComment, *Response, error) { - u := fmt.Sprintf("teams/%v/discussions/%v/comments/%v", teamID, discussionNumber, commentNumber) - req, err := s.client.NewRequest("PATCH", u, comment) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) - - discussionComment := &DiscussionComment{} - resp, err := s.client.Do(ctx, req, discussionComment) - if err != nil { - return nil, resp, err - } - - return discussionComment, resp, nil -} - -// DeleteComment deletes a comment on a team discussion. -// Authenticated user must grant write:discussion scope. -// -// GitHub API docs: https://developer.github.com/v3/teams/discussion_comments/#delete-a-comment -func (s *TeamsService) DeleteComment(ctx context.Context, teamID int64, discussionNumber, commentNumber int) (*Response, error) { - u := fmt.Sprintf("teams/%v/discussions/%v/comments/%v", teamID, discussionNumber, commentNumber) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/teams_discussions.go b/vendor/github.com/google/go-github/github/teams_discussions.go deleted file mode 100644 index fc9b25a58..000000000 --- a/vendor/github.com/google/go-github/github/teams_discussions.go +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2018 The go-github 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 github - -import ( - "context" - "fmt" -) - -// TeamDiscussion represents a GitHub dicussion in a team. -type TeamDiscussion struct { - Author *User `json:"author,omitempty"` - Body *string `json:"body,omitempty"` - BodyHTML *string `json:"body_html,omitempty"` - BodyVersion *string `json:"body_version,omitempty"` - CommentsCount *int64 `json:"comments_count,omitempty"` - CommentsURL *string `json:"comments_url,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - LastEditedAt *Timestamp `json:"last_edited_at,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - NodeID *string `json:"node_id,omitempty"` - Number *int64 `json:"number,omitempty"` - Pinned *bool `json:"pinned,omitempty"` - Private *bool `json:"private,omitempty"` - TeamURL *string `json:"team_url,omitempty"` - Title *string `json:"title,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - URL *string `json:"url,omitempty"` -} - -func (d TeamDiscussion) String() string { - return Stringify(d) -} - -// DiscussionListOptions specifies optional parameters to the -// TeamServices.ListDiscussions method. -type DiscussionListOptions struct { - // Sorts the discussion by the date they were created. - // Accepted values are asc and desc. Default is desc. - Direction string `url:"direction,omitempty"` -} - -// ListDiscussions lists all discussions on team's page. -// Authenticated user must grant read:discussion scope. -// -// GitHub API docs: https://developer.github.com/v3/teams/discussions/#list-discussions -func (s *TeamsService) ListDiscussions(ctx context.Context, teamID int64, options *DiscussionListOptions) ([]*TeamDiscussion, *Response, error) { - u := fmt.Sprintf("teams/%v/discussions", teamID) - u, err := addOptions(u, options) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) - - var teamDiscussions []*TeamDiscussion - resp, err := s.client.Do(ctx, req, &teamDiscussions) - if err != nil { - return nil, resp, err - } - - return teamDiscussions, resp, nil -} - -// GetDiscussion gets a specific discussion on a team's page. -// Authenticated user must grant read:discussion scope. -// -// GitHub API docs: https://developer.github.com/v3/teams/discussions/#get-a-single-discussion -func (s *TeamsService) GetDiscussion(ctx context.Context, teamID int64, discussionNumber int) (*TeamDiscussion, *Response, error) { - u := fmt.Sprintf("teams/%v/discussions/%v", teamID, discussionNumber) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) - - teamDiscussion := &TeamDiscussion{} - resp, err := s.client.Do(ctx, req, teamDiscussion) - if err != nil { - return nil, resp, err - } - - return teamDiscussion, resp, nil -} - -// CreateDiscussion creates a new discussion post on a team's page. -// Authenticated user must grant write:discussion scope. -// -// GitHub API docs: https://developer.github.com/v3/teams/discussions/#create-a-discussion -func (s *TeamsService) CreateDiscussion(ctx context.Context, teamID int64, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) { - u := fmt.Sprintf("teams/%v/discussions", teamID) - req, err := s.client.NewRequest("POST", u, discussion) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) - - teamDiscussion := &TeamDiscussion{} - resp, err := s.client.Do(ctx, req, teamDiscussion) - if err != nil { - return nil, resp, err - } - - return teamDiscussion, resp, nil -} - -// EditDiscussion edits the title and body text of a discussion post. -// Authenticated user must grant write:discussion scope. -// User is allowed to change Title and Body of a discussion only. -// -// GitHub API docs: https://developer.github.com/v3/teams/discussions/#edit-a-discussion -func (s *TeamsService) EditDiscussion(ctx context.Context, teamID int64, discussionNumber int, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) { - u := fmt.Sprintf("teams/%v/discussions/%v", teamID, discussionNumber) - req, err := s.client.NewRequest("PATCH", u, discussion) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) - - teamDiscussion := &TeamDiscussion{} - resp, err := s.client.Do(ctx, req, teamDiscussion) - if err != nil { - return nil, resp, err - } - - return teamDiscussion, resp, nil -} - -// DeleteDiscussion deletes a discussion from team's page. -// Authenticated user must grant write:discussion scope. -// -// GitHub API docs: https://developer.github.com/v3/teams/discussions/#delete-a-discussion -func (s *TeamsService) DeleteDiscussion(ctx context.Context, teamID int64, discussionNumber int) (*Response, error) { - u := fmt.Sprintf("teams/%v/discussions/%v", teamID, discussionNumber) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeTeamDiscussionsPreview) - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/timestamp.go b/vendor/github.com/google/go-github/github/timestamp.go deleted file mode 100644 index a1c1554a3..000000000 --- a/vendor/github.com/google/go-github/github/timestamp.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "strconv" - "time" -) - -// Timestamp represents a time that can be unmarshalled from a JSON string -// formatted as either an RFC3339 or Unix timestamp. This is necessary for some -// fields since the GitHub API is inconsistent in how it represents times. All -// exported methods of time.Time can be called on Timestamp. -type Timestamp struct { - time.Time -} - -func (t Timestamp) String() string { - return t.Time.String() -} - -// UnmarshalJSON implements the json.Unmarshaler interface. -// Time is expected in RFC3339 or Unix format. -func (t *Timestamp) UnmarshalJSON(data []byte) (err error) { - str := string(data) - i, err := strconv.ParseInt(str, 10, 64) - if err == nil { - (*t).Time = time.Unix(i, 0) - } else { - (*t).Time, err = time.Parse(`"`+time.RFC3339+`"`, str) - } - return -} - -// Equal reports whether t and u are equal based on time.Equal -func (t Timestamp) Equal(u Timestamp) bool { - return t.Time.Equal(u.Time) -} diff --git a/vendor/github.com/google/go-github/github/users.go b/vendor/github.com/google/go-github/github/users.go deleted file mode 100644 index 8c4efe1d9..000000000 --- a/vendor/github.com/google/go-github/github/users.go +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" -) - -// UsersService handles communication with the user related -// methods of the GitHub API. -// -// GitHub API docs: https://developer.github.com/v3/users/ -type UsersService service - -// User represents a GitHub user. -type User struct { - Login *string `json:"login,omitempty"` - ID *int64 `json:"id,omitempty"` - AvatarURL *string `json:"avatar_url,omitempty"` - HTMLURL *string `json:"html_url,omitempty"` - GravatarID *string `json:"gravatar_id,omitempty"` - Name *string `json:"name,omitempty"` - Company *string `json:"company,omitempty"` - Blog *string `json:"blog,omitempty"` - Location *string `json:"location,omitempty"` - Email *string `json:"email,omitempty"` - Hireable *bool `json:"hireable,omitempty"` - Bio *string `json:"bio,omitempty"` - PublicRepos *int `json:"public_repos,omitempty"` - PublicGists *int `json:"public_gists,omitempty"` - Followers *int `json:"followers,omitempty"` - Following *int `json:"following,omitempty"` - CreatedAt *Timestamp `json:"created_at,omitempty"` - UpdatedAt *Timestamp `json:"updated_at,omitempty"` - SuspendedAt *Timestamp `json:"suspended_at,omitempty"` - Type *string `json:"type,omitempty"` - SiteAdmin *bool `json:"site_admin,omitempty"` - TotalPrivateRepos *int `json:"total_private_repos,omitempty"` - OwnedPrivateRepos *int `json:"owned_private_repos,omitempty"` - PrivateGists *int `json:"private_gists,omitempty"` - DiskUsage *int `json:"disk_usage,omitempty"` - Collaborators *int `json:"collaborators,omitempty"` - Plan *Plan `json:"plan,omitempty"` - - // API URLs - URL *string `json:"url,omitempty"` - EventsURL *string `json:"events_url,omitempty"` - FollowingURL *string `json:"following_url,omitempty"` - FollowersURL *string `json:"followers_url,omitempty"` - GistsURL *string `json:"gists_url,omitempty"` - OrganizationsURL *string `json:"organizations_url,omitempty"` - ReceivedEventsURL *string `json:"received_events_url,omitempty"` - ReposURL *string `json:"repos_url,omitempty"` - StarredURL *string `json:"starred_url,omitempty"` - SubscriptionsURL *string `json:"subscriptions_url,omitempty"` - - // TextMatches is only populated from search results that request text matches - // See: search.go and https://developer.github.com/v3/search/#text-match-metadata - TextMatches []TextMatch `json:"text_matches,omitempty"` - - // Permissions identifies the permissions that a user has on a given - // repository. This is only populated when calling Repositories.ListCollaborators. - Permissions *map[string]bool `json:"permissions,omitempty"` -} - -func (u User) String() string { - return Stringify(u) -} - -// Get fetches a user. Passing the empty string will fetch the authenticated -// user. -// -// GitHub API docs: https://developer.github.com/v3/users/#get-a-single-user -func (s *UsersService) Get(ctx context.Context, user string) (*User, *Response, error) { - var u string - if user != "" { - u = fmt.Sprintf("users/%v", user) - } else { - u = "user" - } - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - uResp := new(User) - resp, err := s.client.Do(ctx, req, uResp) - if err != nil { - return nil, resp, err - } - - return uResp, resp, nil -} - -// GetByID fetches a user. -// -// Note: GetByID uses the undocumented GitHub API endpoint /user/:id. -func (s *UsersService) GetByID(ctx context.Context, id int64) (*User, *Response, error) { - u := fmt.Sprintf("user/%d", id) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - user := new(User) - resp, err := s.client.Do(ctx, req, user) - if err != nil { - return nil, resp, err - } - - return user, resp, nil -} - -// Edit the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/users/#update-the-authenticated-user -func (s *UsersService) Edit(ctx context.Context, user *User) (*User, *Response, error) { - u := "user" - req, err := s.client.NewRequest("PATCH", u, user) - if err != nil { - return nil, nil, err - } - - uResp := new(User) - resp, err := s.client.Do(ctx, req, uResp) - if err != nil { - return nil, resp, err - } - - return uResp, resp, nil -} - -// UserListOptions specifies optional parameters to the UsersService.ListAll -// method. -type UserListOptions struct { - // ID of the last user seen - Since int64 `url:"since,omitempty"` - - // Note: Pagination is powered exclusively by the Since parameter, - // ListOptions.Page has no effect. - // ListOptions.PerPage controls an undocumented GitHub API parameter. - ListOptions -} - -// ListAll lists all GitHub users. -// -// To paginate through all users, populate 'Since' with the ID of the last user. -// -// GitHub API docs: https://developer.github.com/v3/users/#get-all-users -func (s *UsersService) ListAll(ctx context.Context, opt *UserListOptions) ([]*User, *Response, error) { - u, err := addOptions("users", opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var users []*User - resp, err := s.client.Do(ctx, req, &users) - if err != nil { - return nil, resp, err - } - - return users, resp, nil -} - -// ListInvitations lists all currently-open repository invitations for the -// authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/repos/invitations/#list-a-users-repository-invitations -func (s *UsersService) ListInvitations(ctx context.Context, opt *ListOptions) ([]*RepositoryInvitation, *Response, error) { - u, err := addOptions("user/repository_invitations", opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeRepositoryInvitationsPreview) - - invites := []*RepositoryInvitation{} - resp, err := s.client.Do(ctx, req, &invites) - if err != nil { - return nil, resp, err - } - - return invites, resp, nil -} - -// AcceptInvitation accepts the currently-open repository invitation for the -// authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/repos/invitations/#accept-a-repository-invitation -func (s *UsersService) AcceptInvitation(ctx context.Context, invitationID int64) (*Response, error) { - u := fmt.Sprintf("user/repository_invitations/%v", invitationID) - req, err := s.client.NewRequest("PATCH", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeRepositoryInvitationsPreview) - - return s.client.Do(ctx, req, nil) -} - -// DeclineInvitation declines the currently-open repository invitation for the -// authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/repos/invitations/#decline-a-repository-invitation -func (s *UsersService) DeclineInvitation(ctx context.Context, invitationID int64) (*Response, error) { - u := fmt.Sprintf("user/repository_invitations/%v", invitationID) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeRepositoryInvitationsPreview) - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/users_administration.go b/vendor/github.com/google/go-github/github/users_administration.go deleted file mode 100644 index e042398d8..000000000 --- a/vendor/github.com/google/go-github/github/users_administration.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2014 The go-github 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 github - -import ( - "context" - "fmt" -) - -// PromoteSiteAdmin promotes a user to a site administrator of a GitHub Enterprise instance. -// -// GitHub API docs: https://developer.github.com/v3/users/administration/#promote-an-ordinary-user-to-a-site-administrator -func (s *UsersService) PromoteSiteAdmin(ctx context.Context, user string) (*Response, error) { - u := fmt.Sprintf("users/%v/site_admin", user) - - req, err := s.client.NewRequest("PUT", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// DemoteSiteAdmin demotes a user from site administrator of a GitHub Enterprise instance. -// -// GitHub API docs: https://developer.github.com/v3/users/administration/#demote-a-site-administrator-to-an-ordinary-user -func (s *UsersService) DemoteSiteAdmin(ctx context.Context, user string) (*Response, error) { - u := fmt.Sprintf("users/%v/site_admin", user) - - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// Suspend a user on a GitHub Enterprise instance. -// -// GitHub API docs: https://developer.github.com/v3/users/administration/#suspend-a-user -func (s *UsersService) Suspend(ctx context.Context, user string) (*Response, error) { - u := fmt.Sprintf("users/%v/suspended", user) - - req, err := s.client.NewRequest("PUT", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// Unsuspend a user on a GitHub Enterprise instance. -// -// GitHub API docs: https://developer.github.com/v3/users/administration/#unsuspend-a-user -func (s *UsersService) Unsuspend(ctx context.Context, user string) (*Response, error) { - u := fmt.Sprintf("users/%v/suspended", user) - - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/users_blocking.go b/vendor/github.com/google/go-github/github/users_blocking.go deleted file mode 100644 index 39e45601c..000000000 --- a/vendor/github.com/google/go-github/github/users_blocking.go +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2017 The go-github 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 github - -import ( - "context" - "fmt" -) - -// ListBlockedUsers lists all the blocked users by the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/users/blocking/#list-blocked-users -func (s *UsersService) ListBlockedUsers(ctx context.Context, opt *ListOptions) ([]*User, *Response, error) { - u := "user/blocks" - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeBlockUsersPreview) - - var blockedUsers []*User - resp, err := s.client.Do(ctx, req, &blockedUsers) - if err != nil { - return nil, resp, err - } - - return blockedUsers, resp, nil -} - -// IsBlocked reports whether specified user is blocked by the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/users/blocking/#check-whether-youve-blocked-a-user -func (s *UsersService) IsBlocked(ctx context.Context, user string) (bool, *Response, error) { - u := fmt.Sprintf("user/blocks/%v", user) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return false, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeBlockUsersPreview) - - resp, err := s.client.Do(ctx, req, nil) - isBlocked, err := parseBoolResponse(err) - return isBlocked, resp, err -} - -// BlockUser blocks specified user for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/users/blocking/#block-a-user -func (s *UsersService) BlockUser(ctx context.Context, user string) (*Response, error) { - u := fmt.Sprintf("user/blocks/%v", user) - - req, err := s.client.NewRequest("PUT", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeBlockUsersPreview) - - return s.client.Do(ctx, req, nil) -} - -// UnblockUser unblocks specified user for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/users/blocking/#unblock-a-user -func (s *UsersService) UnblockUser(ctx context.Context, user string) (*Response, error) { - u := fmt.Sprintf("user/blocks/%v", user) - - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeBlockUsersPreview) - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/users_emails.go b/vendor/github.com/google/go-github/github/users_emails.go deleted file mode 100644 index 0bbd4627e..000000000 --- a/vendor/github.com/google/go-github/github/users_emails.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import "context" - -// UserEmail represents user's email address -type UserEmail struct { - Email *string `json:"email,omitempty"` - Primary *bool `json:"primary,omitempty"` - Verified *bool `json:"verified,omitempty"` -} - -// ListEmails lists all email addresses for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/users/emails/#list-email-addresses-for-a-user -func (s *UsersService) ListEmails(ctx context.Context, opt *ListOptions) ([]*UserEmail, *Response, error) { - u := "user/emails" - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var emails []*UserEmail - resp, err := s.client.Do(ctx, req, &emails) - if err != nil { - return nil, resp, err - } - - return emails, resp, nil -} - -// AddEmails adds email addresses of the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/users/emails/#add-email-addresses -func (s *UsersService) AddEmails(ctx context.Context, emails []string) ([]*UserEmail, *Response, error) { - u := "user/emails" - req, err := s.client.NewRequest("POST", u, emails) - if err != nil { - return nil, nil, err - } - - var e []*UserEmail - resp, err := s.client.Do(ctx, req, &e) - if err != nil { - return nil, resp, err - } - - return e, resp, nil -} - -// DeleteEmails deletes email addresses from authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/users/emails/#delete-email-addresses -func (s *UsersService) DeleteEmails(ctx context.Context, emails []string) (*Response, error) { - u := "user/emails" - req, err := s.client.NewRequest("DELETE", u, emails) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/users_followers.go b/vendor/github.com/google/go-github/github/users_followers.go deleted file mode 100644 index c2224096a..000000000 --- a/vendor/github.com/google/go-github/github/users_followers.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" -) - -// ListFollowers lists the followers for a user. Passing the empty string will -// fetch followers for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/users/followers/#list-followers-of-a-user -func (s *UsersService) ListFollowers(ctx context.Context, user string, opt *ListOptions) ([]*User, *Response, error) { - var u string - if user != "" { - u = fmt.Sprintf("users/%v/followers", user) - } else { - u = "user/followers" - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var users []*User - resp, err := s.client.Do(ctx, req, &users) - if err != nil { - return nil, resp, err - } - - return users, resp, nil -} - -// ListFollowing lists the people that a user is following. Passing the empty -// string will list people the authenticated user is following. -// -// GitHub API docs: https://developer.github.com/v3/users/followers/#list-users-followed-by-another-user -func (s *UsersService) ListFollowing(ctx context.Context, user string, opt *ListOptions) ([]*User, *Response, error) { - var u string - if user != "" { - u = fmt.Sprintf("users/%v/following", user) - } else { - u = "user/following" - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var users []*User - resp, err := s.client.Do(ctx, req, &users) - if err != nil { - return nil, resp, err - } - - return users, resp, nil -} - -// IsFollowing checks if "user" is following "target". Passing the empty -// string for "user" will check if the authenticated user is following "target". -// -// GitHub API docs: https://developer.github.com/v3/users/followers/#check-if-you-are-following-a-user -func (s *UsersService) IsFollowing(ctx context.Context, user, target string) (bool, *Response, error) { - var u string - if user != "" { - u = fmt.Sprintf("users/%v/following/%v", user, target) - } else { - u = fmt.Sprintf("user/following/%v", target) - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return false, nil, err - } - - resp, err := s.client.Do(ctx, req, nil) - following, err := parseBoolResponse(err) - return following, resp, err -} - -// Follow will cause the authenticated user to follow the specified user. -// -// GitHub API docs: https://developer.github.com/v3/users/followers/#follow-a-user -func (s *UsersService) Follow(ctx context.Context, user string) (*Response, error) { - u := fmt.Sprintf("user/following/%v", user) - req, err := s.client.NewRequest("PUT", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} - -// Unfollow will cause the authenticated user to unfollow the specified user. -// -// GitHub API docs: https://developer.github.com/v3/users/followers/#unfollow-a-user -func (s *UsersService) Unfollow(ctx context.Context, user string) (*Response, error) { - u := fmt.Sprintf("user/following/%v", user) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/users_gpg_keys.go b/vendor/github.com/google/go-github/github/users_gpg_keys.go deleted file mode 100644 index d8bbc5201..000000000 --- a/vendor/github.com/google/go-github/github/users_gpg_keys.go +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2016 The go-github 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 github - -import ( - "context" - "fmt" - "time" -) - -// GPGKey represents a GitHub user's public GPG key used to verify GPG signed commits and tags. -// -// https://developer.github.com/changes/2016-04-04-git-signing-api-preview/ -type GPGKey struct { - ID *int64 `json:"id,omitempty"` - PrimaryKeyID *int64 `json:"primary_key_id,omitempty"` - KeyID *string `json:"key_id,omitempty"` - PublicKey *string `json:"public_key,omitempty"` - Emails []GPGEmail `json:"emails,omitempty"` - Subkeys []GPGKey `json:"subkeys,omitempty"` - CanSign *bool `json:"can_sign,omitempty"` - CanEncryptComms *bool `json:"can_encrypt_comms,omitempty"` - CanEncryptStorage *bool `json:"can_encrypt_storage,omitempty"` - CanCertify *bool `json:"can_certify,omitempty"` - CreatedAt *time.Time `json:"created_at,omitempty"` - ExpiresAt *time.Time `json:"expires_at,omitempty"` -} - -// String stringifies a GPGKey. -func (k GPGKey) String() string { - return Stringify(k) -} - -// GPGEmail represents an email address associated to a GPG key. -type GPGEmail struct { - Email *string `json:"email,omitempty"` - Verified *bool `json:"verified,omitempty"` -} - -// ListGPGKeys lists the public GPG keys for a user. Passing the empty -// string will fetch keys for the authenticated user. It requires authentication -// via Basic Auth or via OAuth with at least read:gpg_key scope. -// -// GitHub API docs: https://developer.github.com/v3/users/gpg_keys/#list-gpg-keys-for-a-user -func (s *UsersService) ListGPGKeys(ctx context.Context, user string, opt *ListOptions) ([]*GPGKey, *Response, error) { - var u string - if user != "" { - u = fmt.Sprintf("users/%v/gpg_keys", user) - } else { - u = "user/gpg_keys" - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGitSigningPreview) - - var keys []*GPGKey - resp, err := s.client.Do(ctx, req, &keys) - if err != nil { - return nil, resp, err - } - - return keys, resp, nil -} - -// GetGPGKey gets extended details for a single GPG key. It requires authentication -// via Basic Auth or via OAuth with at least read:gpg_key scope. -// -// GitHub API docs: https://developer.github.com/v3/users/gpg_keys/#get-a-single-gpg-key -func (s *UsersService) GetGPGKey(ctx context.Context, id int64) (*GPGKey, *Response, error) { - u := fmt.Sprintf("user/gpg_keys/%v", id) - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGitSigningPreview) - - key := &GPGKey{} - resp, err := s.client.Do(ctx, req, key) - if err != nil { - return nil, resp, err - } - - return key, resp, nil -} - -// CreateGPGKey creates a GPG key. It requires authenticatation via Basic Auth -// or OAuth with at least write:gpg_key scope. -// -// GitHub API docs: https://developer.github.com/v3/users/gpg_keys/#create-a-gpg-key -func (s *UsersService) CreateGPGKey(ctx context.Context, armoredPublicKey string) (*GPGKey, *Response, error) { - gpgKey := &struct { - ArmoredPublicKey string `json:"armored_public_key"` - }{ArmoredPublicKey: armoredPublicKey} - req, err := s.client.NewRequest("POST", "user/gpg_keys", gpgKey) - if err != nil { - return nil, nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGitSigningPreview) - - key := &GPGKey{} - resp, err := s.client.Do(ctx, req, key) - if err != nil { - return nil, resp, err - } - - return key, resp, nil -} - -// DeleteGPGKey deletes a GPG key. It requires authentication via Basic Auth or -// via OAuth with at least admin:gpg_key scope. -// -// GitHub API docs: https://developer.github.com/v3/users/gpg_keys/#delete-a-gpg-key -func (s *UsersService) DeleteGPGKey(ctx context.Context, id int64) (*Response, error) { - u := fmt.Sprintf("user/gpg_keys/%v", id) - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - // TODO: remove custom Accept header when this API fully launches. - req.Header.Set("Accept", mediaTypeGitSigningPreview) - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/users_keys.go b/vendor/github.com/google/go-github/github/users_keys.go deleted file mode 100644 index ddc832a1e..000000000 --- a/vendor/github.com/google/go-github/github/users_keys.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2013 The go-github 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 github - -import ( - "context" - "fmt" -) - -// Key represents a public SSH key used to authenticate a user or deploy script. -type Key struct { - ID *int64 `json:"id,omitempty"` - Key *string `json:"key,omitempty"` - URL *string `json:"url,omitempty"` - Title *string `json:"title,omitempty"` - ReadOnly *bool `json:"read_only,omitempty"` -} - -func (k Key) String() string { - return Stringify(k) -} - -// ListKeys lists the verified public keys for a user. Passing the empty -// string will fetch keys for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/users/keys/#list-public-keys-for-a-user -func (s *UsersService) ListKeys(ctx context.Context, user string, opt *ListOptions) ([]*Key, *Response, error) { - var u string - if user != "" { - u = fmt.Sprintf("users/%v/keys", user) - } else { - u = "user/keys" - } - u, err := addOptions(u, opt) - if err != nil { - return nil, nil, err - } - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - var keys []*Key - resp, err := s.client.Do(ctx, req, &keys) - if err != nil { - return nil, resp, err - } - - return keys, resp, nil -} - -// GetKey fetches a single public key. -// -// GitHub API docs: https://developer.github.com/v3/users/keys/#get-a-single-public-key -func (s *UsersService) GetKey(ctx context.Context, id int64) (*Key, *Response, error) { - u := fmt.Sprintf("user/keys/%v", id) - - req, err := s.client.NewRequest("GET", u, nil) - if err != nil { - return nil, nil, err - } - - key := new(Key) - resp, err := s.client.Do(ctx, req, key) - if err != nil { - return nil, resp, err - } - - return key, resp, nil -} - -// CreateKey adds a public key for the authenticated user. -// -// GitHub API docs: https://developer.github.com/v3/users/keys/#create-a-public-key -func (s *UsersService) CreateKey(ctx context.Context, key *Key) (*Key, *Response, error) { - u := "user/keys" - - req, err := s.client.NewRequest("POST", u, key) - if err != nil { - return nil, nil, err - } - - k := new(Key) - resp, err := s.client.Do(ctx, req, k) - if err != nil { - return nil, resp, err - } - - return k, resp, nil -} - -// DeleteKey deletes a public key. -// -// GitHub API docs: https://developer.github.com/v3/users/keys/#delete-a-public-key -func (s *UsersService) DeleteKey(ctx context.Context, id int64) (*Response, error) { - u := fmt.Sprintf("user/keys/%v", id) - - req, err := s.client.NewRequest("DELETE", u, nil) - if err != nil { - return nil, err - } - - return s.client.Do(ctx, req, nil) -} diff --git a/vendor/github.com/google/go-github/github/with_appengine.go b/vendor/github.com/google/go-github/github/with_appengine.go deleted file mode 100644 index 59ce26b2e..000000000 --- a/vendor/github.com/google/go-github/github/with_appengine.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2017 The go-github AUTHORS. All rights reserved. -// -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build appengine - -// This file provides glue for making github work on App Engine. - -package github - -import ( - "context" - "net/http" -) - -func withContext(ctx context.Context, req *http.Request) *http.Request { - // No-op because App Engine adds context to a request differently. - return req -} diff --git a/vendor/github.com/google/go-github/github/without_appengine.go b/vendor/github.com/google/go-github/github/without_appengine.go deleted file mode 100644 index 6f8fdac56..000000000 --- a/vendor/github.com/google/go-github/github/without_appengine.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2017 The go-github AUTHORS. All rights reserved. -// -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !appengine - -// This file provides glue for making github work without App Engine. - -package github - -import ( - "context" - "net/http" -) - -func withContext(ctx context.Context, req *http.Request) *http.Request { - return req.WithContext(ctx) -} diff --git a/vendor/github.com/google/go-querystring/LICENSE b/vendor/github.com/google/go-querystring/LICENSE deleted file mode 100644 index ae121a1e4..000000000 --- a/vendor/github.com/google/go-querystring/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2013 Google. 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/google/go-querystring/query/encode.go b/vendor/github.com/google/go-querystring/query/encode.go deleted file mode 100644 index 37080b19b..000000000 --- a/vendor/github.com/google/go-querystring/query/encode.go +++ /dev/null @@ -1,320 +0,0 @@ -// 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 query implements encoding of structs into URL query parameters. -// -// As a simple example: -// -// type Options struct { -// Query string `url:"q"` -// ShowAll bool `url:"all"` -// Page int `url:"page"` -// } -// -// opt := Options{ "foo", true, 2 } -// v, _ := query.Values(opt) -// fmt.Print(v.Encode()) // will output: "q=foo&all=true&page=2" -// -// The exact mapping between Go values and url.Values is described in the -// documentation for the Values() function. -package query - -import ( - "bytes" - "fmt" - "net/url" - "reflect" - "strconv" - "strings" - "time" -) - -var timeType = reflect.TypeOf(time.Time{}) - -var encoderType = reflect.TypeOf(new(Encoder)).Elem() - -// Encoder is an interface implemented by any type that wishes to encode -// itself into URL values in a non-standard way. -type Encoder interface { - EncodeValues(key string, v *url.Values) error -} - -// Values returns the url.Values encoding of v. -// -// Values expects to be passed a struct, and traverses it recursively using the -// following encoding rules. -// -// Each exported struct field is encoded as a URL parameter unless -// -// - the field's tag is "-", or -// - the field is empty and its tag specifies the "omitempty" option -// -// The empty values are false, 0, any nil pointer or interface value, any array -// slice, map, or string of length zero, and any time.Time that returns true -// for IsZero(). -// -// The URL parameter name defaults to the struct field name but can be -// specified in the struct field's tag value. The "url" key in the struct -// field's tag value is the key name, followed by an optional comma and -// options. For example: -// -// // Field is ignored by this package. -// Field int `url:"-"` -// -// // Field appears as URL parameter "myName". -// Field int `url:"myName"` -// -// // Field appears as URL parameter "myName" and the field is omitted if -// // its value is empty -// Field int `url:"myName,omitempty"` -// -// // Field appears as URL parameter "Field" (the default), but the field -// // is skipped if empty. Note the leading comma. -// Field int `url:",omitempty"` -// -// For encoding individual field values, the following type-dependent rules -// apply: -// -// Boolean values default to encoding as the strings "true" or "false". -// Including the "int" option signals that the field should be encoded as the -// strings "1" or "0". -// -// time.Time values default to encoding as RFC3339 timestamps. Including the -// "unix" option signals that the field should be encoded as a Unix time (see -// time.Unix()) -// -// Slice and Array values default to encoding as multiple URL values of the -// same name. Including the "comma" option signals that the field should be -// encoded as a single comma-delimited value. Including the "space" option -// similarly encodes the value as a single space-delimited string. Including -// the "semicolon" option will encode the value as a semicolon-delimited string. -// Including the "brackets" option signals that the multiple URL values should -// have "[]" appended to the value name. "numbered" will append a number to -// the end of each incidence of the value name, example: -// name0=value0&name1=value1, etc. -// -// Anonymous struct fields are usually encoded as if their inner exported -// fields were fields in the outer struct, subject to the standard Go -// visibility rules. An anonymous struct field with a name given in its URL -// tag is treated as having that name, rather than being anonymous. -// -// Non-nil pointer values are encoded as the value pointed to. -// -// Nested structs are encoded including parent fields in value names for -// scoping. e.g: -// -// "user[name]=acme&user[addr][postcode]=1234&user[addr][city]=SFO" -// -// All other values are encoded using their default string representation. -// -// Multiple fields that encode to the same URL parameter name will be included -// as multiple URL values of the same name. -func Values(v interface{}) (url.Values, error) { - values := make(url.Values) - val := reflect.ValueOf(v) - for val.Kind() == reflect.Ptr { - if val.IsNil() { - return values, nil - } - val = val.Elem() - } - - if v == nil { - return values, nil - } - - if val.Kind() != reflect.Struct { - return nil, fmt.Errorf("query: Values() expects struct input. Got %v", val.Kind()) - } - - err := reflectValue(values, val, "") - return values, err -} - -// reflectValue populates the values parameter from the struct fields in val. -// Embedded structs are followed recursively (using the rules defined in the -// Values function documentation) breadth-first. -func reflectValue(values url.Values, val reflect.Value, scope string) error { - var embedded []reflect.Value - - typ := val.Type() - for i := 0; i < typ.NumField(); i++ { - sf := typ.Field(i) - if sf.PkgPath != "" && !sf.Anonymous { // unexported - continue - } - - sv := val.Field(i) - tag := sf.Tag.Get("url") - if tag == "-" { - continue - } - name, opts := parseTag(tag) - if name == "" { - if sf.Anonymous && sv.Kind() == reflect.Struct { - // save embedded struct for later processing - embedded = append(embedded, sv) - continue - } - - name = sf.Name - } - - if scope != "" { - name = scope + "[" + name + "]" - } - - if opts.Contains("omitempty") && isEmptyValue(sv) { - continue - } - - if sv.Type().Implements(encoderType) { - if !reflect.Indirect(sv).IsValid() { - sv = reflect.New(sv.Type().Elem()) - } - - m := sv.Interface().(Encoder) - if err := m.EncodeValues(name, &values); err != nil { - return err - } - continue - } - - if sv.Kind() == reflect.Slice || sv.Kind() == reflect.Array { - var del byte - if opts.Contains("comma") { - del = ',' - } else if opts.Contains("space") { - del = ' ' - } else if opts.Contains("semicolon") { - del = ';' - } else if opts.Contains("brackets") { - name = name + "[]" - } - - if del != 0 { - s := new(bytes.Buffer) - first := true - for i := 0; i < sv.Len(); i++ { - if first { - first = false - } else { - s.WriteByte(del) - } - s.WriteString(valueString(sv.Index(i), opts)) - } - values.Add(name, s.String()) - } else { - for i := 0; i < sv.Len(); i++ { - k := name - if opts.Contains("numbered") { - k = fmt.Sprintf("%s%d", name, i) - } - values.Add(k, valueString(sv.Index(i), opts)) - } - } - continue - } - - for sv.Kind() == reflect.Ptr { - if sv.IsNil() { - break - } - sv = sv.Elem() - } - - if sv.Type() == timeType { - values.Add(name, valueString(sv, opts)) - continue - } - - if sv.Kind() == reflect.Struct { - reflectValue(values, sv, name) - continue - } - - values.Add(name, valueString(sv, opts)) - } - - for _, f := range embedded { - if err := reflectValue(values, f, scope); err != nil { - return err - } - } - - return nil -} - -// valueString returns the string representation of a value. -func valueString(v reflect.Value, opts tagOptions) string { - for v.Kind() == reflect.Ptr { - if v.IsNil() { - return "" - } - v = v.Elem() - } - - if v.Kind() == reflect.Bool && opts.Contains("int") { - if v.Bool() { - return "1" - } - return "0" - } - - if v.Type() == timeType { - t := v.Interface().(time.Time) - if opts.Contains("unix") { - return strconv.FormatInt(t.Unix(), 10) - } - return t.Format(time.RFC3339) - } - - return fmt.Sprint(v.Interface()) -} - -// isEmptyValue checks if a value should be considered empty for the purposes -// of omitting fields with the "omitempty" option. -func isEmptyValue(v reflect.Value) bool { - switch v.Kind() { - case reflect.Array, reflect.Map, reflect.Slice, 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.Ptr: - return v.IsNil() - } - - if v.Type() == timeType { - return v.Interface().(time.Time).IsZero() - } - - return false -} - -// tagOptions is the string following a comma in a struct field's "url" tag, or -// the empty string. It does not include the leading comma. -type tagOptions []string - -// parseTag splits a struct field's url tag into its name and comma-separated -// options. -func parseTag(tag string) (string, tagOptions) { - s := strings.Split(tag, ",") - return s[0], s[1:] -} - -// Contains checks whether the tagOptions contains the specified option. -func (o tagOptions) Contains(option string) bool { - for _, s := range o { - if s == option { - return true - } - } - return false -} diff --git a/vendor/github.com/issue9/identicon/LICENSE b/vendor/github.com/issue9/identicon/LICENSE deleted file mode 100644 index e92d1181e..000000000 --- a/vendor/github.com/issue9/identicon/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 caixw - -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/issue9/identicon/README.md b/vendor/github.com/issue9/identicon/README.md deleted file mode 100644 index a68c73bc4..000000000 --- a/vendor/github.com/issue9/identicon/README.md +++ /dev/null @@ -1,40 +0,0 @@ -identicon [![Build Status](https://travis-ci.org/issue9/identicon.svg?branch=master)](https://travis-ci.org/issue9/identicon) -====== - -根据用户的IP、邮箱名等任意数据为用户产生漂亮的随机头像。 - -![screenhost.1](https://raw.github.com/issue9/identicon/master/screenshot/1.png) -![screenhost.4](https://raw.github.com/issue9/identicon/master/screenshot/4.png) -![screenhost.5](https://raw.github.com/issue9/identicon/master/screenshot/5.png) -![screenhost.6](https://raw.github.com/issue9/identicon/master/screenshot/6.png) -![screenhost.7](https://raw.github.com/issue9/identicon/master/screenshot/7.png) - -```go -// 根据用户访问的IP,为其生成一张头像 -img, _ := identicon.Make(128, color.NRGBA{},color.NRGBA{}, []byte("192.168.1.1")) -fi, _ := os.Create("/tmp/u1.png") -png.Encode(fi, img) -fi.Close() - -// 或者 -ii, _ := identicon.New(128, color.NRGBA{}, color.NRGBA{}, color.NRGBA{}, color.NRGBA{}) -img := ii.Make([]byte("192.168.1.1")) -img = ii.Make([]byte("192.168.1.2")) -``` - -### 安装 - -```shell -go get github.com/issue9/identicon -``` - - -### 文档 - -[![Go Walker](http://gowalker.org/api/v1/badge)](http://gowalker.org/github.com/issue9/identicon) -[![GoDoc](https://godoc.org/github.com/issue9/identicon?status.svg)](https://godoc.org/github.com/issue9/identicon) - - -### 版权 - -本项目采用[MIT](http://opensource.org/licenses/MIT)开源授权许可证,完整的授权说明可在[LICENSE](LICENSE)文件中找到。 diff --git a/vendor/github.com/issue9/identicon/block.go b/vendor/github.com/issue9/identicon/block.go deleted file mode 100644 index cbeff67e6..000000000 --- a/vendor/github.com/issue9/identicon/block.go +++ /dev/null @@ -1,438 +0,0 @@ -// Copyright 2015 by caixw, All rights reserved -// Use of this source code is governed by a MIT -// license that can be found in the LICENSE file. - -package identicon - -import ( - "image" - "sync" -) - -var pool = sync.Pool{ - New: func() interface{} { return make([]float64, 0, 10) }, -} - -var ( - // 可以出现在中间的方块,一般为了美观,都是对称图像。 - centerBlocks = []blockFunc{b0, b1, b2, b3} - - // 所有方块 - blocks = []blockFunc{b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16} -) - -// 所有block函数的类型 -type blockFunc func(img *image.Paletted, x, y, size float64, angle int) - -// 将多边形points旋转angle个角度,然后输出到img上,起点为x,y坐标 -func drawBlock(img *image.Paletted, x, y, size float64, angle int, points []float64) { - if angle > 0 { // 0角度不需要转换 - // 中心坐标与x,y的距离,方便下面指定中心坐标(x+m,y+m), - // 0.5的偏移值不能少,否则坐靠右,非正中央 - m := size/2 - 0.5 - rotate(points, x+m, y+m, angle) - } - - for i := x; i < x+size; i++ { - for j := y; j < y+size; j++ { - if pointInPolygon(i, j, points) { - img.SetColorIndex(int(i), int(j), 1) - } - } - } -} - -// 全空白 -// -// -------- -// | | -// | | -// | | -// -------- -func b0(img *image.Paletted, x, y, size float64, angle int) { -} - -// 全填充正方形 -// -// -------- -// |######| -// |######| -// |######| -// -------- -func b1(img *image.Paletted, x, y, size float64, angle int) { - isize := int(size) - ix := int(x) - iy := int(y) - for i := ix + 1; i < ix+isize; i++ { - for j := iy + 1; j < iy+isize; j++ { - img.SetColorIndex(i, j, 1) - } - } -} - -// 中间小方块 -// ---------- -// | | -// | #### | -// | #### | -// | | -// ---------- -func b2(img *image.Paletted, x, y, size float64, angle int) { - l := size / 4 - x = x + l - y = y + l - - for i := x; i < x+2*l; i++ { - for j := y; j < y+2*l; j++ { - img.SetColorIndex(int(i), int(j), 1) - } - } -} - -// 菱形 -// -// --------- -// | # | -// | ### | -// | ##### | -// |#######| -// | ##### | -// | ### | -// | # | -// --------- -func b3(img *image.Paletted, x, y, size float64, angle int) { - m := size / 2 - points := pool.Get().([]float64)[:0] - - drawBlock(img, x, y, size, 0, append(points, - x+m, y, - x+size, y+m, - x+m, y+size, - x, y+m, - x+m, y, - )) - - pool.Put(points) -} - -// b4 -// -// ------- -// |#####| -// |#### | -// |### | -// |## | -// |# | -// |------ -func b4(img *image.Paletted, x, y, size float64, angle int) { - points := pool.Get().([]float64)[:0] - drawBlock(img, x, y, size, angle, append(points, - x, y, - x+size, y, - x, y+size, - x, y, - )) - - pool.Put(points) -} - -// b5 -// -// --------- -// | # | -// | ### | -// | ##### | -// |#######| -func b5(img *image.Paletted, x, y, size float64, angle int) { - points := pool.Get().([]float64)[:0] - m := size / 2 - drawBlock(img, x, y, size, angle, append(points, - x+m, y, - x+size, - y+size, - x, y+size, - x+m, y, - )) - - pool.Put(points) -} - -// b6 矩形 -// -// -------- -// |### | -// |### | -// |### | -// -------- -func b6(img *image.Paletted, x, y, size float64, angle int) { - points := pool.Get().([]float64)[:0] - m := size / 2 - drawBlock(img, x, y, size, angle, append(points, - x, y, - x+m, y, - x+m, y+size, - x, y+size, - x, y, - )) - - pool.Put(points) -} - -// b7 斜放的锥形 -// -// --------- -// | # | -// | ## | -// | #####| -// | ####| -// |-------- -func b7(img *image.Paletted, x, y, size float64, angle int) { - points := pool.Get().([]float64)[:0] - m := size / 2 - drawBlock(img, x, y, size, angle, append(points, - x, y, - x+size, y+m, - x+size, y+size, - x+m, y+size, - x, y, - )) - - pool.Put(points) -} - -// b8 三个堆叠的三角形 -// -// ----------- -// | # | -// | ### | -// | ##### | -// | # # | -// | ### ### | -// |#########| -// ----------- -func b8(img *image.Paletted, x, y, size float64, angle int) { - points := pool.Get().([]float64)[:0] - m := size / 2 - mm := m / 2 - - // 顶部三角形 - drawBlock(img, x, y, size, angle, append(points, - x+m, y, - x+3*mm, y+m, - x+mm, y+m, - x+m, y, - )) - - // 底下左边 - drawBlock(img, x, y, size, angle, append(points[:0], - x+mm, y+m, - x+m, y+size, - x, y+size, - x+mm, y+m, - )) - - // 底下右边 - drawBlock(img, x, y, size, angle, append(points[:0], - x+3*mm, y+m, - x+size, y+size, - x+m, y+size, - x+3*mm, y+m, - )) - - pool.Put(points) -} - -// b9 斜靠的三角形 -// -// --------- -// |# | -// | #### | -// | #####| -// | #### | -// | # | -// --------- -func b9(img *image.Paletted, x, y, size float64, angle int) { - points := pool.Get().([]float64)[:0] - m := size / 2 - drawBlock(img, x, y, size, angle, append(points, - x, y, - x+size, y+m, - x+m, y+size, - x, y, - )) - - pool.Put(points) -} - -// b10 -// -// ---------- -// | ####| -// | ### | -// | ## | -// | # | -// |#### | -// |### | -// |## | -// |# | -// ---------- -func b10(img *image.Paletted, x, y, size float64, angle int) { - points := pool.Get().([]float64)[:0] - m := size / 2 - drawBlock(img, x, y, size, angle, append(points, - x+m, y, - x+size, y, - x+m, y+m, - x+m, y, - )) - - drawBlock(img, x, y, size, angle, append(points[:0], - x, y+m, - x+m, y+m, - x, y+size, - x, y+m, - )) - - pool.Put(points) -} - -// b11 左上角1/4大小的方块 -// -// ---------- -// |#### | -// |#### | -// |#### | -// | | -// | | -// ---------- -func b11(img *image.Paletted, x, y, size float64, angle int) { - points := pool.Get().([]float64)[:0] - m := size / 2 - drawBlock(img, x, y, size, angle, append(points, - x, y, - x+m, y, - x+m, y+m, - x, y+m, - x, y, - )) - - pool.Put(points) -} - -// b12 -// -// ----------- -// | | -// | | -// |#########| -// | ##### | -// | # | -// ----------- -func b12(img *image.Paletted, x, y, size float64, angle int) { - points := pool.Get().([]float64)[:0] - m := size / 2 - drawBlock(img, x, y, size, angle, append(points, - x, y+m, - x+size, y+m, - x+m, y+size, - x, y+m, - )) - - pool.Put(points) -} - -// b13 -// -// ----------- -// | | -// | | -// | # | -// | ##### | -// |#########| -// ----------- -func b13(img *image.Paletted, x, y, size float64, angle int) { - points := pool.Get().([]float64)[:0] - m := size / 2 - drawBlock(img, x, y, size, angle, append(points, - x+m, y+m, - x+size, y+size, - x, y+size, - x+m, y+m, - )) - - pool.Put(points) -} - -// b14 -// -// --------- -// | # | -// | ### | -// |#### | -// | | -// | | -// --------- -func b14(img *image.Paletted, x, y, size float64, angle int) { - points := pool.Get().([]float64)[:0] - m := size / 2 - drawBlock(img, x, y, size, angle, append(points, - x+m, y, - x+m, y+m, - x, y+m, - x+m, y, - )) - - pool.Put(points) -} - -// b15 -// -// ---------- -// |##### | -// |### | -// |# | -// | | -// | | -// ---------- -func b15(img *image.Paletted, x, y, size float64, angle int) { - points := pool.Get().([]float64)[:0] - m := size / 2 - drawBlock(img, x, y, size, angle, append(points, - x, y, - x+m, y, - x, y+m, - x, y, - )) - - pool.Put(points) -} - -// b16 -// -// --------- -// | # | -// | ##### | -// |#######| -// | # | -// | ##### | -// |#######| -// --------- -func b16(img *image.Paletted, x, y, size float64, angle int) { - points := pool.Get().([]float64)[:0] - m := size / 2 - drawBlock(img, x, y, size, angle, append(points, - x+m, y, - x+size, y+m, - x, y+m, - x+m, y, - )) - - drawBlock(img, x, y, size, angle, append(points[:0], - x+m, y+m, - x+size, y+size, - x, y+size, - x+m, y+m, - )) - - pool.Put(points) -} diff --git a/vendor/github.com/issue9/identicon/doc.go b/vendor/github.com/issue9/identicon/doc.go deleted file mode 100644 index adaf30a94..000000000 --- a/vendor/github.com/issue9/identicon/doc.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2015 by caixw, All rights reserved. -// Use of this source code is governed by a MIT -// license that can be found in the LICENSE file. - -// 一个基于hash值生成随机图像的包。 -// -// 关于identicon并没有统一的标准,一般用于在用户注册时, -// 取用户的邮箱或是访问IP等数据(也可以是其它任何数据), -// 进行hash运算,之后根据hash数据,产生一张图像, -// 这样即可以为用户产生一张独特的头像,又不会泄漏用户的隐藏。 -// -// 在identicon中,把图像分成以下九个部分: -// ------------- -// | 1 | 2 | 3 | -// ------------- -// | 4 | 5 | 6 | -// ------------- -// | 7 | 8 | 9 | -// ------------- -// 其中1、3、9、7为不同角度(依次增加90度)的同一张图片, -// 2、6、8、4也是如此,这样可以保持图像是对称的,比较美观。 -// 5则单独使用一张图片。 -// -// // 根据用户访问的IP,为其生成一张头像 -// img, _ := identicon.Make(128, color.NRGBA{},color.NRGBA{}, []byte("192.168.1.1")) -// fi, _ := os.Create("/tmp/u1.png") -// png.Encode(fi, img) -// fi.Close() -// -// // 或者 -// ii, _ := identicon.New(128, color.NRGBA{}, color.NRGBA{}, color.NRGBA{}) -// img := ii.Make([]byte("192.168.1.1")) -// img = ii.Make([]byte("192.168.1.2")) -// -// NOTE: go test 会在当前目录的testdata文件夹下产生大量的随机图片。 -// 要运行测试,必须保证该文件夹是存在的,且有相应的写入权限。 -package identicon diff --git a/vendor/github.com/issue9/identicon/identicon.go b/vendor/github.com/issue9/identicon/identicon.go deleted file mode 100644 index c0b1db3b0..000000000 --- a/vendor/github.com/issue9/identicon/identicon.go +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2015 by caixw, All rights reserved. -// Use of this source code is governed by a MIT -// license that can be found in the LICENSE file. - -package identicon - -import ( - "crypto/md5" - "fmt" - "image" - "image/color" -) - -const ( - minSize = 16 // 图片的最小尺寸 - maxForeColors = 32 // 在New()函数中可以指定的最大颜色数量 -) - -// Identicon 用于产生统一尺寸的头像。 -// 可以根据用户提供的数据,经过一定的算法,自动产生相应的图案和颜色。 -type Identicon struct { - foreColors []color.Color - backColor color.Color - size int - rect image.Rectangle -} - -// 声明一个Identicon实例。 -// size表示整个头像的大小。 -// back表示前景色。 -// fore表示所有可能的前景色,会为每个图像随机挑选一个作为其前景色。 -// NOTE:前景色不要与背景色太相近。 -func New(size int, back color.Color, fore ...color.Color) (*Identicon, error) { - if len(fore) == 0 || len(fore) > maxForeColors { - return nil, fmt.Errorf("前景色数量必须介于[1]~[%v]之间,当前为[%v]", maxForeColors, len(fore)) - } - - if size < minSize { - return nil, fmt.Errorf("参数size的值(%v)不能小于%v", size, minSize) - } - - return &Identicon{ - foreColors: fore, - backColor: back, - size: size, - - // 画布坐标从0开始,其长度应该是size-1 - rect: image.Rect(0, 0, size, size), - }, nil -} - -// 根据data数据产生一张唯一性的头像图片。 -func (i *Identicon) Make(data []byte) image.Image { - h := md5.New() - h.Write(data) - sum := h.Sum(nil) - - // 第一个方块 - index := int(sum[0]+sum[1]+sum[2]+sum[3]) % len(blocks) - b1 := blocks[index] - - // 第二个方块 - index = int(sum[4]+sum[5]+sum[6]+sum[7]) % len(blocks) - b2 := blocks[index] - - // 中间方块 - index = int(sum[8]+sum[9]+sum[10]+sum[11]) % len(centerBlocks) - c := centerBlocks[index] - - // 旋转角度 - angle := int(sum[12]+sum[13]+sum[14]) % 4 - - // 根据最后一个字段,获取前景颜色 - index = int(sum[15]) % len(i.foreColors) - - p := image.NewPaletted(i.rect, []color.Color{i.backColor, i.foreColors[index]}) - drawBlocks(p, i.size, c, b1, b2, angle) - return p -} - -// 根据data数据产生一张唯一性的头像图片。 -// size 头像的大小。 -// back, fore头像的背景和前景色。 -func Make(size int, back, fore color.Color, data []byte) (image.Image, error) { - if size < minSize { - return nil, fmt.Errorf("参数size的值(%v)不能小于%v", size, minSize) - } - - h := md5.New() - h.Write(data) - sum := h.Sum(nil) - - // 第一个方块 - index := int(sum[0]+sum[1]+sum[2]+sum[3]) % len(blocks) - b1 := blocks[index] - - // 第二个方块 - index = int(sum[4]+sum[5]+sum[6]+sum[7]) % len(blocks) - b2 := blocks[index] - - // 中间方块 - index = int(sum[8]+sum[9]+sum[10]+sum[11]) % len(centerBlocks) - c := centerBlocks[index] - - // 旋转角度 - angle := int(sum[12]+sum[13]+sum[14]+sum[15]) % 4 - - // 画布坐标从0开始,其长度应该是size-1 - p := image.NewPaletted(image.Rect(0, 0, size, size), []color.Color{back, fore}) - drawBlocks(p, size, c, b1, b2, angle) - return p, nil -} - -// 将九个方格都填上内容。 -// p为画板。 -// c为中间方格的填充函数。 -// b1,b2为边上8格的填充函数。 -// angle为b1,b2的起始旋转角度。 -func drawBlocks(p *image.Paletted, size int, c, b1, b2 blockFunc, angle int) { - // 每个格子的长宽。先转换成float,再计算! - blockSize := float64(size) / 3 - twoBlockSize := 2 * blockSize - - incr := func() { // 增加angle的值,但不会大于3 - angle++ - if angle > 3 { - angle = 0 - } - } - - c(p, blockSize, blockSize, blockSize, 0) - - b1(p, 0, 0, blockSize, angle) - b2(p, blockSize, 0, blockSize, angle) - - incr() - b1(p, twoBlockSize, 0, blockSize, angle) - b2(p, twoBlockSize, blockSize, blockSize, angle) - - incr() - b1(p, twoBlockSize, twoBlockSize, blockSize, angle) - b2(p, blockSize, twoBlockSize, blockSize, angle) - - incr() - b1(p, 0, twoBlockSize, blockSize, angle) - b2(p, 0, blockSize, blockSize, angle) -} diff --git a/vendor/github.com/issue9/identicon/polygon.go b/vendor/github.com/issue9/identicon/polygon.go deleted file mode 100644 index 06759c31a..000000000 --- a/vendor/github.com/issue9/identicon/polygon.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2015 by caixw, All rights reserved. -// Use of this source code is governed by a MIT -// license that can be found in the LICENSE file. - -package identicon - -var ( - // 4个元素分别表示cos(0),cos(90),cos(180),cos(270) - cos = []float64{1, 0, -1, 0} - - // 4个元素分别表示sin(0),sin(90),sin(180),sin(270) - sin = []float64{0, 1, 0, -1} -) - -// 将points中的所有点,以x,y为原点旋转angle个角度。 -// angle取值只能是[0,1,2,3],分别表示[0,90,180,270] -func rotate(points []float64, x, y float64, angle int) { - if angle < 0 || angle > 3 { - panic("rotate:参数angle必须0,1,2,3三值之一") - } - - for i := 0; i < len(points); i += 2 { - px := points[i] - x - py := points[i+1] - y - points[i] = px*cos[angle] - py*sin[angle] + x - points[i+1] = px*sin[angle] + py*cos[angle] + y - } -} - -// 判断某个点是否在多边形之内,不包含构成多边形的线和点 -// x,y 需要判断的点坐标 -// points 组成多边形的所顶点,每两个元素表示一点顶点,其中最后一个顶点必须与第一个顶点相同。 -func pointInPolygon(x float64, y float64, points []float64) bool { - if len(points) < 8 { // 只有2个以上的点,才能组成闭合多边形 - return false - } - - // 大致算法如下: - // 把整个平面以给定的测试点为原点分两部分: - // - y>0,包含(x>0 && y==0) - // - y<0,包含(x<0 && y==0) - // 依次扫描每一个点,当该点与前一个点处于不同部分时(即一个在y>0区,一个在y<0区), - // 则判断从前一点到当前点是顺时针还是逆时针(以给定的测试点为原点),如果是顺时针r++,否则r--。 - // 结果为:2==abs(r)。 - - r := 0 - x1, y1 := points[0], points[1] - prev := (y1 > y) || ((x1 > x) && (y1 == y)) - for i := 2; i < len(points); i += 2 { - x2, y2 := points[i], points[i+1] - curr := (y2 > y) || ((x2 > x) && (y2 == y)) - - if curr == prev { - x1, y1 = x2, y2 - continue - } - - mul := (x1-x)*(y2-y) - (x2-x)*(y1-y) - if mul > 0 { - r++ - } else if mul < 0 { - r-- - } - x1, y1 = x2, y2 - prev = curr - } - - return r == 2 || r == -2 -} diff --git a/vendor/github.com/jaytaylor/html2text/LICENSE b/vendor/github.com/jaytaylor/html2text/LICENSE deleted file mode 100644 index 24dc4abec..000000000 --- a/vendor/github.com/jaytaylor/html2text/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Jay Taylor - -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/jaytaylor/html2text/README.md b/vendor/github.com/jaytaylor/html2text/README.md deleted file mode 100644 index 6e67dbcc6..000000000 --- a/vendor/github.com/jaytaylor/html2text/README.md +++ /dev/null @@ -1,112 +0,0 @@ -# html2text - -[![Documentation](https://godoc.org/github.com/jaytaylor/html2text?status.svg)](https://godoc.org/github.com/jaytaylor/html2text) -[![Build Status](https://travis-ci.org/jaytaylor/html2text.svg?branch=master)](https://travis-ci.org/jaytaylor/html2text) -[![Report Card](https://goreportcard.com/badge/github.com/jaytaylor/html2text)](https://goreportcard.com/report/github.com/jaytaylor/html2text) - -### Converts HTML into text - - -## Introduction - -html2text is a simple golang package for rendering HTML into plaintext. - -There are still lots of improvements to be had, but FWIW this has worked fine for my [basic] HTML-2-text needs. - -It requires go 1.x or newer ;) - - -## Download the package - -```bash -go get github.com/jaytaylor/html2text -``` - -## Example usage - -```go -package main - -import ( - "fmt" - - "github.com/jaytaylor/html2text" -) - -func main() { - inputHtml := ` - - - My Mega Service - - - - - - - -

Welcome to your new account on my service!

- -

- Here is some more information: - -

-

- - - ` - - text, err := html2text.FromString(inputHtml) - if err != nil { - panic(err) - } - fmt.Println(text) -} -``` - -Output: -``` -Mega Service ( http://mymegaservice.com/ ) - -****************************************** -Welcome to your new account on my service! -****************************************** - -Here is some more information: - -* Link 1: Example.com ( https://example.com ) -* Link 2: Example2.com ( https://example2.com ) -* Something else -``` - - -## Unit-tests - -Running the unit-tests is straightforward and standard: - -```bash -go test -``` - - -# License - -Permissive MIT license. - - -## Contact - -You are more than welcome to open issues and send pull requests if you find a bug or want a new feature. - -If you appreciate this library please feel free to drop me a line and tell me! It's always nice to hear from people who have benefitted from my work. - -Email: jay at (my github username).com - -Twitter: [@jtaylor](https://twitter.com/jtaylor) - diff --git a/vendor/github.com/jaytaylor/html2text/html2text.go b/vendor/github.com/jaytaylor/html2text/html2text.go deleted file mode 100644 index 66454cfca..000000000 --- a/vendor/github.com/jaytaylor/html2text/html2text.go +++ /dev/null @@ -1,300 +0,0 @@ -package html2text - -import ( - "bytes" - "io" - "regexp" - "strings" - "unicode" - - "golang.org/x/net/html" - "golang.org/x/net/html/atom" -) - -var ( - spacingRe = regexp.MustCompile(`[ \r\n\t]+`) - newlineRe = regexp.MustCompile(`\n\n+`) -) - -type textifyTraverseCtx struct { - Buf bytes.Buffer - - prefix string - blockquoteLevel int - lineLength int - endsWithSpace bool - endsWithNewline bool - justClosedDiv bool -} - -func (ctx *textifyTraverseCtx) traverse(node *html.Node) error { - switch node.Type { - - default: - return ctx.traverseChildren(node) - - case html.TextNode: - data := strings.Trim(spacingRe.ReplaceAllString(node.Data, " "), " ") - return ctx.emit(data) - - case html.ElementNode: - - ctx.justClosedDiv = false - switch node.DataAtom { - case atom.Br: - return ctx.emit("\n") - - case atom.H1, atom.H2, atom.H3: - subCtx := textifyTraverseCtx{} - if err := subCtx.traverseChildren(node); err != nil { - return err - } - - str := subCtx.Buf.String() - dividerLen := 0 - for _, line := range strings.Split(str, "\n") { - if lineLen := len([]rune(line)); lineLen-1 > dividerLen { - dividerLen = lineLen - 1 - } - } - divider := "" - if node.DataAtom == atom.H1 { - divider = strings.Repeat("*", dividerLen) - } else { - divider = strings.Repeat("-", dividerLen) - } - - if node.DataAtom == atom.H3 { - return ctx.emit("\n\n" + str + "\n" + divider + "\n\n") - } - return ctx.emit("\n\n" + divider + "\n" + str + "\n" + divider + "\n\n") - - case atom.Blockquote: - ctx.blockquoteLevel++ - ctx.prefix = strings.Repeat(">", ctx.blockquoteLevel) + " " - if err := ctx.emit("\n"); err != nil { - return err - } - if ctx.blockquoteLevel == 1 { - if err := ctx.emit("\n"); err != nil { - return err - } - } - if err := ctx.traverseChildren(node); err != nil { - return err - } - ctx.blockquoteLevel-- - ctx.prefix = strings.Repeat(">", ctx.blockquoteLevel) - if ctx.blockquoteLevel > 0 { - ctx.prefix += " " - } - return ctx.emit("\n\n") - - case atom.Div: - if ctx.lineLength > 0 { - if err := ctx.emit("\n"); err != nil { - return err - } - } - if err := ctx.traverseChildren(node); err != nil { - return err - } - var err error - if ctx.justClosedDiv == false { - err = ctx.emit("\n") - } - ctx.justClosedDiv = true - return err - - case atom.Li: - if err := ctx.emit("* "); err != nil { - return err - } - - if err := ctx.traverseChildren(node); err != nil { - return err - } - - return ctx.emit("\n") - - case atom.B, atom.Strong: - subCtx := textifyTraverseCtx{} - subCtx.endsWithSpace = true - if err := subCtx.traverseChildren(node); err != nil { - return err - } - str := subCtx.Buf.String() - return ctx.emit("*" + str + "*") - - case atom.A: - // If image is the only child, take its alt text as the link text - if img := node.FirstChild; img != nil && node.LastChild == img && img.DataAtom == atom.Img { - if altText := getAttrVal(img, "alt"); altText != "" { - ctx.emit(altText) - } - } else if err := ctx.traverseChildren(node); err != nil { - return err - } - - hrefLink := "" - if attrVal := getAttrVal(node, "href"); attrVal != "" { - attrVal = ctx.normalizeHrefLink(attrVal) - if attrVal != "" { - hrefLink = "( " + attrVal + " )" - } - } - - return ctx.emit(hrefLink) - - case atom.P, atom.Ul, atom.Table: - if err := ctx.emit("\n\n"); err != nil { - return err - } - - if err := ctx.traverseChildren(node); err != nil { - return err - } - - return ctx.emit("\n\n") - - case atom.Tr: - if err := ctx.traverseChildren(node); err != nil { - return err - } - - return ctx.emit("\n") - - case atom.Style, atom.Script, atom.Head: - // Ignore the subtree - return nil - - default: - return ctx.traverseChildren(node) - } - } -} - -func (ctx *textifyTraverseCtx) traverseChildren(node *html.Node) error { - for c := node.FirstChild; c != nil; c = c.NextSibling { - if err := ctx.traverse(c); err != nil { - return err - } - } - - return nil -} - -func (ctx *textifyTraverseCtx) emit(data string) error { - if len(data) == 0 { - return nil - } - lines := ctx.breakLongLines(data) - var err error - for _, line := range lines { - runes := []rune(line) - startsWithSpace := unicode.IsSpace(runes[0]) - if !startsWithSpace && !ctx.endsWithSpace { - ctx.Buf.WriteByte(' ') - ctx.lineLength++ - } - ctx.endsWithSpace = unicode.IsSpace(runes[len(runes)-1]) - for _, c := range line { - _, err = ctx.Buf.WriteString(string(c)) - if err != nil { - return err - } - ctx.lineLength++ - if c == '\n' { - ctx.lineLength = 0 - if ctx.prefix != "" { - _, err = ctx.Buf.WriteString(ctx.prefix) - if err != nil { - return err - } - } - } - } - } - return nil -} - -func (ctx *textifyTraverseCtx) breakLongLines(data string) []string { - // only break lines when we are in blockquotes - if ctx.blockquoteLevel == 0 { - return []string{data} - } - var ret []string - runes := []rune(data) - l := len(runes) - existing := ctx.lineLength - if existing >= 74 { - ret = append(ret, "\n") - existing = 0 - } - for l+existing > 74 { - i := 74 - existing - for i >= 0 && !unicode.IsSpace(runes[i]) { - i-- - } - if i == -1 { - // no spaces, so go the other way - i = 74 - existing - for i < l && !unicode.IsSpace(runes[i]) { - i++ - } - } - ret = append(ret, string(runes[:i])+"\n") - for i < l && unicode.IsSpace(runes[i]) { - i++ - } - runes = runes[i:] - l = len(runes) - existing = 0 - } - if len(runes) > 0 { - ret = append(ret, string(runes)) - } - return ret -} - -func (ctx *textifyTraverseCtx) normalizeHrefLink(link string) string { - link = strings.TrimSpace(link) - link = strings.TrimPrefix(link, "mailto:") - return link -} - -func getAttrVal(node *html.Node, attrName string) string { - for _, attr := range node.Attr { - if attr.Key == attrName { - return attr.Val - } - } - - return "" -} - -func FromReader(reader io.Reader) (string, error) { - doc, err := html.Parse(reader) - if err != nil { - return "", err - } - - ctx := textifyTraverseCtx{ - Buf: bytes.Buffer{}, - } - if err = ctx.traverse(doc); err != nil { - return "", err - } - - text := strings.TrimSpace(newlineRe.ReplaceAllString( - strings.Replace(ctx.Buf.String(), "\n ", "\n", -1), "\n\n")) - return text, nil -} - -func FromString(input string) (string, error) { - text, err := FromReader(strings.NewReader(input)) - if err != nil { - return "", err - } - return text, nil -} diff --git a/vendor/github.com/json-iterator/go/Gopkg.lock b/vendor/github.com/json-iterator/go/Gopkg.lock deleted file mode 100644 index 338f1c68a..000000000 --- a/vendor/github.com/json-iterator/go/Gopkg.lock +++ /dev/null @@ -1,21 +0,0 @@ -# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. - - -[[projects]] - name = "github.com/modern-go/concurrent" - packages = ["."] - revision = "e0a39a4cb4216ea8db28e22a69f4ec25610d513a" - version = "1.0.0" - -[[projects]] - name = "github.com/modern-go/reflect2" - packages = ["."] - revision = "1df9eeb2bb81f327b96228865c5687bc2194af3f" - version = "1.0.0" - -[solve-meta] - analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "ac7003b5a981716353a43055ab7d4c5357403cb30a60de2dbdeb446c1544beaa" - solver-name = "gps-cdcl" - solver-version = 1 diff --git a/vendor/github.com/json-iterator/go/Gopkg.toml b/vendor/github.com/json-iterator/go/Gopkg.toml deleted file mode 100644 index 5801ffa1e..000000000 --- a/vendor/github.com/json-iterator/go/Gopkg.toml +++ /dev/null @@ -1,26 +0,0 @@ -# Gopkg.toml example -# -# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md -# for detailed Gopkg.toml documentation. -# -# required = ["github.com/user/thing/cmd/thing"] -# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] -# -# [[constraint]] -# name = "github.com/user/project" -# version = "1.0.0" -# -# [[constraint]] -# name = "github.com/user/project2" -# branch = "dev" -# source = "github.com/myfork/project2" -# -# [[override]] -# name = "github.com/x/y" -# version = "2.4.0" - -ignored = ["github.com/davecgh/go-spew*","github.com/google/gofuzz*","github.com/stretchr/testify*"] - -[[constraint]] - name = "github.com/modern-go/reflect2" - version = "1.0.0" diff --git a/vendor/github.com/json-iterator/go/LICENSE b/vendor/github.com/json-iterator/go/LICENSE deleted file mode 100644 index 2cf4f5ab2..000000000 --- a/vendor/github.com/json-iterator/go/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016 json-iterator - -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/json-iterator/go/README.md b/vendor/github.com/json-iterator/go/README.md deleted file mode 100644 index 54d5afe95..000000000 --- a/vendor/github.com/json-iterator/go/README.md +++ /dev/null @@ -1,91 +0,0 @@ -[![Sourcegraph](https://sourcegraph.com/github.com/json-iterator/go/-/badge.svg)](https://sourcegraph.com/github.com/json-iterator/go?badge) -[![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](http://godoc.org/github.com/json-iterator/go) -[![Build Status](https://travis-ci.org/json-iterator/go.svg?branch=master)](https://travis-ci.org/json-iterator/go) -[![codecov](https://codecov.io/gh/json-iterator/go/branch/master/graph/badge.svg)](https://codecov.io/gh/json-iterator/go) -[![rcard](https://goreportcard.com/badge/github.com/json-iterator/go)](https://goreportcard.com/report/github.com/json-iterator/go) -[![License](http://img.shields.io/badge/license-mit-blue.svg?style=flat-square)](https://raw.githubusercontent.com/json-iterator/go/master/LICENSE) -[![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.png)](https://gitter.im/json-iterator/Lobby) - -A high-performance 100% compatible drop-in replacement of "encoding/json" - -You can also use thrift like JSON using [thrift-iterator](https://github.com/thrift-iterator/go) - -``` -Go开发者们请加入我们,滴滴出行平台技术部 taowen@didichuxing.com -``` - -# Benchmark - -![benchmark](http://jsoniter.com/benchmarks/go-benchmark.png) - -Source code: https://github.com/json-iterator/go-benchmark/blob/master/src/github.com/json-iterator/go-benchmark/benchmark_medium_payload_test.go - -Raw Result (easyjson requires static code generation) - -| | ns/op | allocation bytes | allocation times | -| --- | --- | --- | --- | -| std decode | 35510 ns/op | 1960 B/op | 99 allocs/op | -| easyjson decode | 8499 ns/op | 160 B/op | 4 allocs/op | -| jsoniter decode | 5623 ns/op | 160 B/op | 3 allocs/op | -| std encode | 2213 ns/op | 712 B/op | 5 allocs/op | -| easyjson encode | 883 ns/op | 576 B/op | 3 allocs/op | -| jsoniter encode | 837 ns/op | 384 B/op | 4 allocs/op | - -Always benchmark with your own workload. -The result depends heavily on the data input. - -# Usage - -100% compatibility with standard lib - -Replace - -```go -import "encoding/json" -json.Marshal(&data) -``` - -with - -```go -import "github.com/json-iterator/go" - -var json = jsoniter.ConfigCompatibleWithStandardLibrary -json.Marshal(&data) -``` - -Replace - -```go -import "encoding/json" -json.Unmarshal(input, &data) -``` - -with - -```go -import "github.com/json-iterator/go" - -var json = jsoniter.ConfigCompatibleWithStandardLibrary -json.Unmarshal(input, &data) -``` - -[More documentation](http://jsoniter.com/migrate-from-go-std.html) - -# How to get - -``` -go get github.com/json-iterator/go -``` - -# Contribution Welcomed ! - -Contributors - -* [thockin](https://github.com/thockin) -* [mattn](https://github.com/mattn) -* [cch123](https://github.com/cch123) -* [Oleg Shaldybin](https://github.com/olegshaldybin) -* [Jason Toffaletti](https://github.com/toffaletti) - -Report issue or pull request, or email taowen@gmail.com, or [![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.png)](https://gitter.im/json-iterator/Lobby) diff --git a/vendor/github.com/json-iterator/go/adapter.go b/vendor/github.com/json-iterator/go/adapter.go deleted file mode 100644 index f371bfed7..000000000 --- a/vendor/github.com/json-iterator/go/adapter.go +++ /dev/null @@ -1,148 +0,0 @@ -package jsoniter - -import ( - "bytes" - "io" -) - -// RawMessage to make replace json with jsoniter -type RawMessage []byte - -// Unmarshal adapts to json/encoding Unmarshal API -// -// Unmarshal parses the JSON-encoded data and stores the result in the value pointed to by v. -// Refer to https://godoc.org/encoding/json#Unmarshal for more information -func Unmarshal(data []byte, v interface{}) error { - return ConfigDefault.Unmarshal(data, v) -} - -// UnmarshalFromString convenient method to read from string instead of []byte -func UnmarshalFromString(str string, v interface{}) error { - return ConfigDefault.UnmarshalFromString(str, v) -} - -// Get quick method to get value from deeply nested JSON structure -func Get(data []byte, path ...interface{}) Any { - return ConfigDefault.Get(data, path...) -} - -// Marshal adapts to json/encoding Marshal API -// -// Marshal returns the JSON encoding of v, adapts to json/encoding Marshal API -// Refer to https://godoc.org/encoding/json#Marshal for more information -func Marshal(v interface{}) ([]byte, error) { - return ConfigDefault.Marshal(v) -} - -// MarshalIndent same as json.MarshalIndent. Prefix is not supported. -func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) { - return ConfigDefault.MarshalIndent(v, prefix, indent) -} - -// MarshalToString convenient method to write as string instead of []byte -func MarshalToString(v interface{}) (string, error) { - return ConfigDefault.MarshalToString(v) -} - -// NewDecoder adapts to json/stream NewDecoder API. -// -// NewDecoder returns a new decoder that reads from r. -// -// Instead of a json/encoding Decoder, an Decoder is returned -// Refer to https://godoc.org/encoding/json#NewDecoder for more information -func NewDecoder(reader io.Reader) *Decoder { - return ConfigDefault.NewDecoder(reader) -} - -// Decoder reads and decodes JSON values from an input stream. -// Decoder provides identical APIs with json/stream Decoder (Token() and UseNumber() are in progress) -type Decoder struct { - iter *Iterator -} - -// Decode decode JSON into interface{} -func (adapter *Decoder) Decode(obj interface{}) error { - if adapter.iter.head == adapter.iter.tail && adapter.iter.reader != nil { - if !adapter.iter.loadMore() { - return io.EOF - } - } - adapter.iter.ReadVal(obj) - err := adapter.iter.Error - if err == io.EOF { - return nil - } - return adapter.iter.Error -} - -// More is there more? -func (adapter *Decoder) More() bool { - iter := adapter.iter - if iter.Error != nil { - return false - } - if iter.head != iter.tail { - return true - } - return iter.loadMore() -} - -// Buffered remaining buffer -func (adapter *Decoder) Buffered() io.Reader { - remaining := adapter.iter.buf[adapter.iter.head:adapter.iter.tail] - return bytes.NewReader(remaining) -} - -// UseNumber causes the Decoder to unmarshal a number into an interface{} as a -// Number instead of as a float64. -func (adapter *Decoder) UseNumber() { - cfg := adapter.iter.cfg.configBeforeFrozen - cfg.UseNumber = true - adapter.iter.cfg = cfg.frozeWithCacheReuse() -} - -// DisallowUnknownFields causes the Decoder to return an error when the destination -// is a struct and the input contains object keys which do not match any -// non-ignored, exported fields in the destination. -func (adapter *Decoder) DisallowUnknownFields() { - cfg := adapter.iter.cfg.configBeforeFrozen - cfg.DisallowUnknownFields = true - adapter.iter.cfg = cfg.frozeWithCacheReuse() -} - -// NewEncoder same as json.NewEncoder -func NewEncoder(writer io.Writer) *Encoder { - return ConfigDefault.NewEncoder(writer) -} - -// Encoder same as json.Encoder -type Encoder struct { - stream *Stream -} - -// Encode encode interface{} as JSON to io.Writer -func (adapter *Encoder) Encode(val interface{}) error { - adapter.stream.WriteVal(val) - adapter.stream.WriteRaw("\n") - adapter.stream.Flush() - return adapter.stream.Error -} - -// SetIndent set the indention. Prefix is not supported -func (adapter *Encoder) SetIndent(prefix, indent string) { - config := adapter.stream.cfg.configBeforeFrozen - config.IndentionStep = len(indent) - adapter.stream.cfg = config.frozeWithCacheReuse() -} - -// SetEscapeHTML escape html by default, set to false to disable -func (adapter *Encoder) SetEscapeHTML(escapeHTML bool) { - config := adapter.stream.cfg.configBeforeFrozen - config.EscapeHTML = escapeHTML - adapter.stream.cfg = config.frozeWithCacheReuse() -} - -// Valid reports whether data is a valid JSON encoding. -func Valid(data []byte) bool { - return ConfigDefault.Valid(data) -} diff --git a/vendor/github.com/json-iterator/go/any.go b/vendor/github.com/json-iterator/go/any.go deleted file mode 100644 index daecfed61..000000000 --- a/vendor/github.com/json-iterator/go/any.go +++ /dev/null @@ -1,321 +0,0 @@ -package jsoniter - -import ( - "errors" - "fmt" - "github.com/modern-go/reflect2" - "io" - "reflect" - "strconv" - "unsafe" -) - -// Any generic object representation. -// The lazy json implementation holds []byte and parse lazily. -type Any interface { - LastError() error - ValueType() ValueType - MustBeValid() Any - ToBool() bool - ToInt() int - ToInt32() int32 - ToInt64() int64 - ToUint() uint - ToUint32() uint32 - ToUint64() uint64 - ToFloat32() float32 - ToFloat64() float64 - ToString() string - ToVal(val interface{}) - Get(path ...interface{}) Any - Size() int - Keys() []string - GetInterface() interface{} - WriteTo(stream *Stream) -} - -type baseAny struct{} - -func (any *baseAny) Get(path ...interface{}) Any { - return &invalidAny{baseAny{}, fmt.Errorf("GetIndex %v from simple value", path)} -} - -func (any *baseAny) Size() int { - return 0 -} - -func (any *baseAny) Keys() []string { - return []string{} -} - -func (any *baseAny) ToVal(obj interface{}) { - panic("not implemented") -} - -// WrapInt32 turn int32 into Any interface -func WrapInt32(val int32) Any { - return &int32Any{baseAny{}, val} -} - -// WrapInt64 turn int64 into Any interface -func WrapInt64(val int64) Any { - return &int64Any{baseAny{}, val} -} - -// WrapUint32 turn uint32 into Any interface -func WrapUint32(val uint32) Any { - return &uint32Any{baseAny{}, val} -} - -// WrapUint64 turn uint64 into Any interface -func WrapUint64(val uint64) Any { - return &uint64Any{baseAny{}, val} -} - -// WrapFloat64 turn float64 into Any interface -func WrapFloat64(val float64) Any { - return &floatAny{baseAny{}, val} -} - -// WrapString turn string into Any interface -func WrapString(val string) Any { - return &stringAny{baseAny{}, val} -} - -// Wrap turn a go object into Any interface -func Wrap(val interface{}) Any { - if val == nil { - return &nilAny{} - } - asAny, isAny := val.(Any) - if isAny { - return asAny - } - typ := reflect2.TypeOf(val) - switch typ.Kind() { - case reflect.Slice: - return wrapArray(val) - case reflect.Struct: - return wrapStruct(val) - case reflect.Map: - return wrapMap(val) - case reflect.String: - return WrapString(val.(string)) - case reflect.Int: - if strconv.IntSize == 32 { - return WrapInt32(int32(val.(int))) - } - return WrapInt64(int64(val.(int))) - case reflect.Int8: - return WrapInt32(int32(val.(int8))) - case reflect.Int16: - return WrapInt32(int32(val.(int16))) - case reflect.Int32: - return WrapInt32(val.(int32)) - case reflect.Int64: - return WrapInt64(val.(int64)) - case reflect.Uint: - if strconv.IntSize == 32 { - return WrapUint32(uint32(val.(uint))) - } - return WrapUint64(uint64(val.(uint))) - case reflect.Uintptr: - if ptrSize == 32 { - return WrapUint32(uint32(val.(uintptr))) - } - return WrapUint64(uint64(val.(uintptr))) - case reflect.Uint8: - return WrapUint32(uint32(val.(uint8))) - case reflect.Uint16: - return WrapUint32(uint32(val.(uint16))) - case reflect.Uint32: - return WrapUint32(uint32(val.(uint32))) - case reflect.Uint64: - return WrapUint64(val.(uint64)) - case reflect.Float32: - return WrapFloat64(float64(val.(float32))) - case reflect.Float64: - return WrapFloat64(val.(float64)) - case reflect.Bool: - if val.(bool) == true { - return &trueAny{} - } - return &falseAny{} - } - return &invalidAny{baseAny{}, fmt.Errorf("unsupported type: %v", typ)} -} - -// ReadAny read next JSON element as an Any object. It is a better json.RawMessage. -func (iter *Iterator) ReadAny() Any { - return iter.readAny() -} - -func (iter *Iterator) readAny() Any { - c := iter.nextToken() - switch c { - case '"': - iter.unreadByte() - return &stringAny{baseAny{}, iter.ReadString()} - case 'n': - iter.skipThreeBytes('u', 'l', 'l') // null - return &nilAny{} - case 't': - iter.skipThreeBytes('r', 'u', 'e') // true - return &trueAny{} - case 'f': - iter.skipFourBytes('a', 'l', 's', 'e') // false - return &falseAny{} - case '{': - return iter.readObjectAny() - case '[': - return iter.readArrayAny() - case '-': - return iter.readNumberAny(false) - case 0: - return &invalidAny{baseAny{}, errors.New("input is empty")} - default: - return iter.readNumberAny(true) - } -} - -func (iter *Iterator) readNumberAny(positive bool) Any { - iter.startCapture(iter.head - 1) - iter.skipNumber() - lazyBuf := iter.stopCapture() - return &numberLazyAny{baseAny{}, iter.cfg, lazyBuf, nil} -} - -func (iter *Iterator) readObjectAny() Any { - iter.startCapture(iter.head - 1) - iter.skipObject() - lazyBuf := iter.stopCapture() - return &objectLazyAny{baseAny{}, iter.cfg, lazyBuf, nil} -} - -func (iter *Iterator) readArrayAny() Any { - iter.startCapture(iter.head - 1) - iter.skipArray() - lazyBuf := iter.stopCapture() - return &arrayLazyAny{baseAny{}, iter.cfg, lazyBuf, nil} -} - -func locateObjectField(iter *Iterator, target string) []byte { - var found []byte - iter.ReadObjectCB(func(iter *Iterator, field string) bool { - if field == target { - found = iter.SkipAndReturnBytes() - return false - } - iter.Skip() - return true - }) - return found -} - -func locateArrayElement(iter *Iterator, target int) []byte { - var found []byte - n := 0 - iter.ReadArrayCB(func(iter *Iterator) bool { - if n == target { - found = iter.SkipAndReturnBytes() - return false - } - iter.Skip() - n++ - return true - }) - return found -} - -func locatePath(iter *Iterator, path []interface{}) Any { - for i, pathKeyObj := range path { - switch pathKey := pathKeyObj.(type) { - case string: - valueBytes := locateObjectField(iter, pathKey) - if valueBytes == nil { - return newInvalidAny(path[i:]) - } - iter.ResetBytes(valueBytes) - case int: - valueBytes := locateArrayElement(iter, pathKey) - if valueBytes == nil { - return newInvalidAny(path[i:]) - } - iter.ResetBytes(valueBytes) - case int32: - if '*' == pathKey { - return iter.readAny().Get(path[i:]...) - } - return newInvalidAny(path[i:]) - default: - return newInvalidAny(path[i:]) - } - } - if iter.Error != nil && iter.Error != io.EOF { - return &invalidAny{baseAny{}, iter.Error} - } - return iter.readAny() -} - -var anyType = reflect2.TypeOfPtr((*Any)(nil)).Elem() - -func createDecoderOfAny(ctx *ctx, typ reflect2.Type) ValDecoder { - if typ == anyType { - return &directAnyCodec{} - } - if typ.Implements(anyType) { - return &anyCodec{ - valType: typ, - } - } - return nil -} - -func createEncoderOfAny(ctx *ctx, typ reflect2.Type) ValEncoder { - if typ == anyType { - return &directAnyCodec{} - } - if typ.Implements(anyType) { - return &anyCodec{ - valType: typ, - } - } - return nil -} - -type anyCodec struct { - valType reflect2.Type -} - -func (codec *anyCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { - panic("not implemented") -} - -func (codec *anyCodec) Encode(ptr unsafe.Pointer, stream *Stream) { - obj := codec.valType.UnsafeIndirect(ptr) - any := obj.(Any) - any.WriteTo(stream) -} - -func (codec *anyCodec) IsEmpty(ptr unsafe.Pointer) bool { - obj := codec.valType.UnsafeIndirect(ptr) - any := obj.(Any) - return any.Size() == 0 -} - -type directAnyCodec struct { -} - -func (codec *directAnyCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { - *(*Any)(ptr) = iter.readAny() -} - -func (codec *directAnyCodec) Encode(ptr unsafe.Pointer, stream *Stream) { - any := *(*Any)(ptr) - any.WriteTo(stream) -} - -func (codec *directAnyCodec) IsEmpty(ptr unsafe.Pointer) bool { - any := *(*Any)(ptr) - return any.Size() == 0 -} diff --git a/vendor/github.com/json-iterator/go/any_array.go b/vendor/github.com/json-iterator/go/any_array.go deleted file mode 100644 index 0449e9aa4..000000000 --- a/vendor/github.com/json-iterator/go/any_array.go +++ /dev/null @@ -1,278 +0,0 @@ -package jsoniter - -import ( - "reflect" - "unsafe" -) - -type arrayLazyAny struct { - baseAny - cfg *frozenConfig - buf []byte - err error -} - -func (any *arrayLazyAny) ValueType() ValueType { - return ArrayValue -} - -func (any *arrayLazyAny) MustBeValid() Any { - return any -} - -func (any *arrayLazyAny) LastError() error { - return any.err -} - -func (any *arrayLazyAny) ToBool() bool { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - return iter.ReadArray() -} - -func (any *arrayLazyAny) ToInt() int { - if any.ToBool() { - return 1 - } - return 0 -} - -func (any *arrayLazyAny) ToInt32() int32 { - if any.ToBool() { - return 1 - } - return 0 -} - -func (any *arrayLazyAny) ToInt64() int64 { - if any.ToBool() { - return 1 - } - return 0 -} - -func (any *arrayLazyAny) ToUint() uint { - if any.ToBool() { - return 1 - } - return 0 -} - -func (any *arrayLazyAny) ToUint32() uint32 { - if any.ToBool() { - return 1 - } - return 0 -} - -func (any *arrayLazyAny) ToUint64() uint64 { - if any.ToBool() { - return 1 - } - return 0 -} - -func (any *arrayLazyAny) ToFloat32() float32 { - if any.ToBool() { - return 1 - } - return 0 -} - -func (any *arrayLazyAny) ToFloat64() float64 { - if any.ToBool() { - return 1 - } - return 0 -} - -func (any *arrayLazyAny) ToString() string { - return *(*string)(unsafe.Pointer(&any.buf)) -} - -func (any *arrayLazyAny) ToVal(val interface{}) { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - iter.ReadVal(val) -} - -func (any *arrayLazyAny) Get(path ...interface{}) Any { - if len(path) == 0 { - return any - } - switch firstPath := path[0].(type) { - case int: - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - valueBytes := locateArrayElement(iter, firstPath) - if valueBytes == nil { - return newInvalidAny(path) - } - iter.ResetBytes(valueBytes) - return locatePath(iter, path[1:]) - case int32: - if '*' == firstPath { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - arr := make([]Any, 0) - iter.ReadArrayCB(func(iter *Iterator) bool { - found := iter.readAny().Get(path[1:]...) - if found.ValueType() != InvalidValue { - arr = append(arr, found) - } - return true - }) - return wrapArray(arr) - } - return newInvalidAny(path) - default: - return newInvalidAny(path) - } -} - -func (any *arrayLazyAny) Size() int { - size := 0 - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - iter.ReadArrayCB(func(iter *Iterator) bool { - size++ - iter.Skip() - return true - }) - return size -} - -func (any *arrayLazyAny) WriteTo(stream *Stream) { - stream.Write(any.buf) -} - -func (any *arrayLazyAny) GetInterface() interface{} { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - return iter.Read() -} - -type arrayAny struct { - baseAny - val reflect.Value -} - -func wrapArray(val interface{}) *arrayAny { - return &arrayAny{baseAny{}, reflect.ValueOf(val)} -} - -func (any *arrayAny) ValueType() ValueType { - return ArrayValue -} - -func (any *arrayAny) MustBeValid() Any { - return any -} - -func (any *arrayAny) LastError() error { - return nil -} - -func (any *arrayAny) ToBool() bool { - return any.val.Len() != 0 -} - -func (any *arrayAny) ToInt() int { - if any.val.Len() == 0 { - return 0 - } - return 1 -} - -func (any *arrayAny) ToInt32() int32 { - if any.val.Len() == 0 { - return 0 - } - return 1 -} - -func (any *arrayAny) ToInt64() int64 { - if any.val.Len() == 0 { - return 0 - } - return 1 -} - -func (any *arrayAny) ToUint() uint { - if any.val.Len() == 0 { - return 0 - } - return 1 -} - -func (any *arrayAny) ToUint32() uint32 { - if any.val.Len() == 0 { - return 0 - } - return 1 -} - -func (any *arrayAny) ToUint64() uint64 { - if any.val.Len() == 0 { - return 0 - } - return 1 -} - -func (any *arrayAny) ToFloat32() float32 { - if any.val.Len() == 0 { - return 0 - } - return 1 -} - -func (any *arrayAny) ToFloat64() float64 { - if any.val.Len() == 0 { - return 0 - } - return 1 -} - -func (any *arrayAny) ToString() string { - str, _ := MarshalToString(any.val.Interface()) - return str -} - -func (any *arrayAny) Get(path ...interface{}) Any { - if len(path) == 0 { - return any - } - switch firstPath := path[0].(type) { - case int: - if firstPath < 0 || firstPath >= any.val.Len() { - return newInvalidAny(path) - } - return Wrap(any.val.Index(firstPath).Interface()) - case int32: - if '*' == firstPath { - mappedAll := make([]Any, 0) - for i := 0; i < any.val.Len(); i++ { - mapped := Wrap(any.val.Index(i).Interface()).Get(path[1:]...) - if mapped.ValueType() != InvalidValue { - mappedAll = append(mappedAll, mapped) - } - } - return wrapArray(mappedAll) - } - return newInvalidAny(path) - default: - return newInvalidAny(path) - } -} - -func (any *arrayAny) Size() int { - return any.val.Len() -} - -func (any *arrayAny) WriteTo(stream *Stream) { - stream.WriteVal(any.val) -} - -func (any *arrayAny) GetInterface() interface{} { - return any.val.Interface() -} diff --git a/vendor/github.com/json-iterator/go/any_bool.go b/vendor/github.com/json-iterator/go/any_bool.go deleted file mode 100644 index 9452324af..000000000 --- a/vendor/github.com/json-iterator/go/any_bool.go +++ /dev/null @@ -1,137 +0,0 @@ -package jsoniter - -type trueAny struct { - baseAny -} - -func (any *trueAny) LastError() error { - return nil -} - -func (any *trueAny) ToBool() bool { - return true -} - -func (any *trueAny) ToInt() int { - return 1 -} - -func (any *trueAny) ToInt32() int32 { - return 1 -} - -func (any *trueAny) ToInt64() int64 { - return 1 -} - -func (any *trueAny) ToUint() uint { - return 1 -} - -func (any *trueAny) ToUint32() uint32 { - return 1 -} - -func (any *trueAny) ToUint64() uint64 { - return 1 -} - -func (any *trueAny) ToFloat32() float32 { - return 1 -} - -func (any *trueAny) ToFloat64() float64 { - return 1 -} - -func (any *trueAny) ToString() string { - return "true" -} - -func (any *trueAny) WriteTo(stream *Stream) { - stream.WriteTrue() -} - -func (any *trueAny) Parse() *Iterator { - return nil -} - -func (any *trueAny) GetInterface() interface{} { - return true -} - -func (any *trueAny) ValueType() ValueType { - return BoolValue -} - -func (any *trueAny) MustBeValid() Any { - return any -} - -type falseAny struct { - baseAny -} - -func (any *falseAny) LastError() error { - return nil -} - -func (any *falseAny) ToBool() bool { - return false -} - -func (any *falseAny) ToInt() int { - return 0 -} - -func (any *falseAny) ToInt32() int32 { - return 0 -} - -func (any *falseAny) ToInt64() int64 { - return 0 -} - -func (any *falseAny) ToUint() uint { - return 0 -} - -func (any *falseAny) ToUint32() uint32 { - return 0 -} - -func (any *falseAny) ToUint64() uint64 { - return 0 -} - -func (any *falseAny) ToFloat32() float32 { - return 0 -} - -func (any *falseAny) ToFloat64() float64 { - return 0 -} - -func (any *falseAny) ToString() string { - return "false" -} - -func (any *falseAny) WriteTo(stream *Stream) { - stream.WriteFalse() -} - -func (any *falseAny) Parse() *Iterator { - return nil -} - -func (any *falseAny) GetInterface() interface{} { - return false -} - -func (any *falseAny) ValueType() ValueType { - return BoolValue -} - -func (any *falseAny) MustBeValid() Any { - return any -} diff --git a/vendor/github.com/json-iterator/go/any_float.go b/vendor/github.com/json-iterator/go/any_float.go deleted file mode 100644 index 35fdb0949..000000000 --- a/vendor/github.com/json-iterator/go/any_float.go +++ /dev/null @@ -1,83 +0,0 @@ -package jsoniter - -import ( - "strconv" -) - -type floatAny struct { - baseAny - val float64 -} - -func (any *floatAny) Parse() *Iterator { - return nil -} - -func (any *floatAny) ValueType() ValueType { - return NumberValue -} - -func (any *floatAny) MustBeValid() Any { - return any -} - -func (any *floatAny) LastError() error { - return nil -} - -func (any *floatAny) ToBool() bool { - return any.ToFloat64() != 0 -} - -func (any *floatAny) ToInt() int { - return int(any.val) -} - -func (any *floatAny) ToInt32() int32 { - return int32(any.val) -} - -func (any *floatAny) ToInt64() int64 { - return int64(any.val) -} - -func (any *floatAny) ToUint() uint { - if any.val > 0 { - return uint(any.val) - } - return 0 -} - -func (any *floatAny) ToUint32() uint32 { - if any.val > 0 { - return uint32(any.val) - } - return 0 -} - -func (any *floatAny) ToUint64() uint64 { - if any.val > 0 { - return uint64(any.val) - } - return 0 -} - -func (any *floatAny) ToFloat32() float32 { - return float32(any.val) -} - -func (any *floatAny) ToFloat64() float64 { - return any.val -} - -func (any *floatAny) ToString() string { - return strconv.FormatFloat(any.val, 'E', -1, 64) -} - -func (any *floatAny) WriteTo(stream *Stream) { - stream.WriteFloat64(any.val) -} - -func (any *floatAny) GetInterface() interface{} { - return any.val -} diff --git a/vendor/github.com/json-iterator/go/any_int32.go b/vendor/github.com/json-iterator/go/any_int32.go deleted file mode 100644 index 1b56f3991..000000000 --- a/vendor/github.com/json-iterator/go/any_int32.go +++ /dev/null @@ -1,74 +0,0 @@ -package jsoniter - -import ( - "strconv" -) - -type int32Any struct { - baseAny - val int32 -} - -func (any *int32Any) LastError() error { - return nil -} - -func (any *int32Any) ValueType() ValueType { - return NumberValue -} - -func (any *int32Any) MustBeValid() Any { - return any -} - -func (any *int32Any) ToBool() bool { - return any.val != 0 -} - -func (any *int32Any) ToInt() int { - return int(any.val) -} - -func (any *int32Any) ToInt32() int32 { - return any.val -} - -func (any *int32Any) ToInt64() int64 { - return int64(any.val) -} - -func (any *int32Any) ToUint() uint { - return uint(any.val) -} - -func (any *int32Any) ToUint32() uint32 { - return uint32(any.val) -} - -func (any *int32Any) ToUint64() uint64 { - return uint64(any.val) -} - -func (any *int32Any) ToFloat32() float32 { - return float32(any.val) -} - -func (any *int32Any) ToFloat64() float64 { - return float64(any.val) -} - -func (any *int32Any) ToString() string { - return strconv.FormatInt(int64(any.val), 10) -} - -func (any *int32Any) WriteTo(stream *Stream) { - stream.WriteInt32(any.val) -} - -func (any *int32Any) Parse() *Iterator { - return nil -} - -func (any *int32Any) GetInterface() interface{} { - return any.val -} diff --git a/vendor/github.com/json-iterator/go/any_int64.go b/vendor/github.com/json-iterator/go/any_int64.go deleted file mode 100644 index c440d72b6..000000000 --- a/vendor/github.com/json-iterator/go/any_int64.go +++ /dev/null @@ -1,74 +0,0 @@ -package jsoniter - -import ( - "strconv" -) - -type int64Any struct { - baseAny - val int64 -} - -func (any *int64Any) LastError() error { - return nil -} - -func (any *int64Any) ValueType() ValueType { - return NumberValue -} - -func (any *int64Any) MustBeValid() Any { - return any -} - -func (any *int64Any) ToBool() bool { - return any.val != 0 -} - -func (any *int64Any) ToInt() int { - return int(any.val) -} - -func (any *int64Any) ToInt32() int32 { - return int32(any.val) -} - -func (any *int64Any) ToInt64() int64 { - return any.val -} - -func (any *int64Any) ToUint() uint { - return uint(any.val) -} - -func (any *int64Any) ToUint32() uint32 { - return uint32(any.val) -} - -func (any *int64Any) ToUint64() uint64 { - return uint64(any.val) -} - -func (any *int64Any) ToFloat32() float32 { - return float32(any.val) -} - -func (any *int64Any) ToFloat64() float64 { - return float64(any.val) -} - -func (any *int64Any) ToString() string { - return strconv.FormatInt(any.val, 10) -} - -func (any *int64Any) WriteTo(stream *Stream) { - stream.WriteInt64(any.val) -} - -func (any *int64Any) Parse() *Iterator { - return nil -} - -func (any *int64Any) GetInterface() interface{} { - return any.val -} diff --git a/vendor/github.com/json-iterator/go/any_invalid.go b/vendor/github.com/json-iterator/go/any_invalid.go deleted file mode 100644 index 1d859eac3..000000000 --- a/vendor/github.com/json-iterator/go/any_invalid.go +++ /dev/null @@ -1,82 +0,0 @@ -package jsoniter - -import "fmt" - -type invalidAny struct { - baseAny - err error -} - -func newInvalidAny(path []interface{}) *invalidAny { - return &invalidAny{baseAny{}, fmt.Errorf("%v not found", path)} -} - -func (any *invalidAny) LastError() error { - return any.err -} - -func (any *invalidAny) ValueType() ValueType { - return InvalidValue -} - -func (any *invalidAny) MustBeValid() Any { - panic(any.err) -} - -func (any *invalidAny) ToBool() bool { - return false -} - -func (any *invalidAny) ToInt() int { - return 0 -} - -func (any *invalidAny) ToInt32() int32 { - return 0 -} - -func (any *invalidAny) ToInt64() int64 { - return 0 -} - -func (any *invalidAny) ToUint() uint { - return 0 -} - -func (any *invalidAny) ToUint32() uint32 { - return 0 -} - -func (any *invalidAny) ToUint64() uint64 { - return 0 -} - -func (any *invalidAny) ToFloat32() float32 { - return 0 -} - -func (any *invalidAny) ToFloat64() float64 { - return 0 -} - -func (any *invalidAny) ToString() string { - return "" -} - -func (any *invalidAny) WriteTo(stream *Stream) { -} - -func (any *invalidAny) Get(path ...interface{}) Any { - if any.err == nil { - return &invalidAny{baseAny{}, fmt.Errorf("get %v from invalid", path)} - } - return &invalidAny{baseAny{}, fmt.Errorf("%v, get %v from invalid", any.err, path)} -} - -func (any *invalidAny) Parse() *Iterator { - return nil -} - -func (any *invalidAny) GetInterface() interface{} { - return nil -} diff --git a/vendor/github.com/json-iterator/go/any_nil.go b/vendor/github.com/json-iterator/go/any_nil.go deleted file mode 100644 index d04cb54c1..000000000 --- a/vendor/github.com/json-iterator/go/any_nil.go +++ /dev/null @@ -1,69 +0,0 @@ -package jsoniter - -type nilAny struct { - baseAny -} - -func (any *nilAny) LastError() error { - return nil -} - -func (any *nilAny) ValueType() ValueType { - return NilValue -} - -func (any *nilAny) MustBeValid() Any { - return any -} - -func (any *nilAny) ToBool() bool { - return false -} - -func (any *nilAny) ToInt() int { - return 0 -} - -func (any *nilAny) ToInt32() int32 { - return 0 -} - -func (any *nilAny) ToInt64() int64 { - return 0 -} - -func (any *nilAny) ToUint() uint { - return 0 -} - -func (any *nilAny) ToUint32() uint32 { - return 0 -} - -func (any *nilAny) ToUint64() uint64 { - return 0 -} - -func (any *nilAny) ToFloat32() float32 { - return 0 -} - -func (any *nilAny) ToFloat64() float64 { - return 0 -} - -func (any *nilAny) ToString() string { - return "" -} - -func (any *nilAny) WriteTo(stream *Stream) { - stream.WriteNil() -} - -func (any *nilAny) Parse() *Iterator { - return nil -} - -func (any *nilAny) GetInterface() interface{} { - return nil -} diff --git a/vendor/github.com/json-iterator/go/any_number.go b/vendor/github.com/json-iterator/go/any_number.go deleted file mode 100644 index 9d1e901a6..000000000 --- a/vendor/github.com/json-iterator/go/any_number.go +++ /dev/null @@ -1,123 +0,0 @@ -package jsoniter - -import ( - "io" - "unsafe" -) - -type numberLazyAny struct { - baseAny - cfg *frozenConfig - buf []byte - err error -} - -func (any *numberLazyAny) ValueType() ValueType { - return NumberValue -} - -func (any *numberLazyAny) MustBeValid() Any { - return any -} - -func (any *numberLazyAny) LastError() error { - return any.err -} - -func (any *numberLazyAny) ToBool() bool { - return any.ToFloat64() != 0 -} - -func (any *numberLazyAny) ToInt() int { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - val := iter.ReadInt() - if iter.Error != nil && iter.Error != io.EOF { - any.err = iter.Error - } - return val -} - -func (any *numberLazyAny) ToInt32() int32 { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - val := iter.ReadInt32() - if iter.Error != nil && iter.Error != io.EOF { - any.err = iter.Error - } - return val -} - -func (any *numberLazyAny) ToInt64() int64 { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - val := iter.ReadInt64() - if iter.Error != nil && iter.Error != io.EOF { - any.err = iter.Error - } - return val -} - -func (any *numberLazyAny) ToUint() uint { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - val := iter.ReadUint() - if iter.Error != nil && iter.Error != io.EOF { - any.err = iter.Error - } - return val -} - -func (any *numberLazyAny) ToUint32() uint32 { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - val := iter.ReadUint32() - if iter.Error != nil && iter.Error != io.EOF { - any.err = iter.Error - } - return val -} - -func (any *numberLazyAny) ToUint64() uint64 { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - val := iter.ReadUint64() - if iter.Error != nil && iter.Error != io.EOF { - any.err = iter.Error - } - return val -} - -func (any *numberLazyAny) ToFloat32() float32 { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - val := iter.ReadFloat32() - if iter.Error != nil && iter.Error != io.EOF { - any.err = iter.Error - } - return val -} - -func (any *numberLazyAny) ToFloat64() float64 { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - val := iter.ReadFloat64() - if iter.Error != nil && iter.Error != io.EOF { - any.err = iter.Error - } - return val -} - -func (any *numberLazyAny) ToString() string { - return *(*string)(unsafe.Pointer(&any.buf)) -} - -func (any *numberLazyAny) WriteTo(stream *Stream) { - stream.Write(any.buf) -} - -func (any *numberLazyAny) GetInterface() interface{} { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - return iter.Read() -} diff --git a/vendor/github.com/json-iterator/go/any_object.go b/vendor/github.com/json-iterator/go/any_object.go deleted file mode 100644 index c44ef5c98..000000000 --- a/vendor/github.com/json-iterator/go/any_object.go +++ /dev/null @@ -1,374 +0,0 @@ -package jsoniter - -import ( - "reflect" - "unsafe" -) - -type objectLazyAny struct { - baseAny - cfg *frozenConfig - buf []byte - err error -} - -func (any *objectLazyAny) ValueType() ValueType { - return ObjectValue -} - -func (any *objectLazyAny) MustBeValid() Any { - return any -} - -func (any *objectLazyAny) LastError() error { - return any.err -} - -func (any *objectLazyAny) ToBool() bool { - return true -} - -func (any *objectLazyAny) ToInt() int { - return 0 -} - -func (any *objectLazyAny) ToInt32() int32 { - return 0 -} - -func (any *objectLazyAny) ToInt64() int64 { - return 0 -} - -func (any *objectLazyAny) ToUint() uint { - return 0 -} - -func (any *objectLazyAny) ToUint32() uint32 { - return 0 -} - -func (any *objectLazyAny) ToUint64() uint64 { - return 0 -} - -func (any *objectLazyAny) ToFloat32() float32 { - return 0 -} - -func (any *objectLazyAny) ToFloat64() float64 { - return 0 -} - -func (any *objectLazyAny) ToString() string { - return *(*string)(unsafe.Pointer(&any.buf)) -} - -func (any *objectLazyAny) ToVal(obj interface{}) { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - iter.ReadVal(obj) -} - -func (any *objectLazyAny) Get(path ...interface{}) Any { - if len(path) == 0 { - return any - } - switch firstPath := path[0].(type) { - case string: - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - valueBytes := locateObjectField(iter, firstPath) - if valueBytes == nil { - return newInvalidAny(path) - } - iter.ResetBytes(valueBytes) - return locatePath(iter, path[1:]) - case int32: - if '*' == firstPath { - mappedAll := map[string]Any{} - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - iter.ReadMapCB(func(iter *Iterator, field string) bool { - mapped := locatePath(iter, path[1:]) - if mapped.ValueType() != InvalidValue { - mappedAll[field] = mapped - } - return true - }) - return wrapMap(mappedAll) - } - return newInvalidAny(path) - default: - return newInvalidAny(path) - } -} - -func (any *objectLazyAny) Keys() []string { - keys := []string{} - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - iter.ReadMapCB(func(iter *Iterator, field string) bool { - iter.Skip() - keys = append(keys, field) - return true - }) - return keys -} - -func (any *objectLazyAny) Size() int { - size := 0 - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - iter.ReadObjectCB(func(iter *Iterator, field string) bool { - iter.Skip() - size++ - return true - }) - return size -} - -func (any *objectLazyAny) WriteTo(stream *Stream) { - stream.Write(any.buf) -} - -func (any *objectLazyAny) GetInterface() interface{} { - iter := any.cfg.BorrowIterator(any.buf) - defer any.cfg.ReturnIterator(iter) - return iter.Read() -} - -type objectAny struct { - baseAny - err error - val reflect.Value -} - -func wrapStruct(val interface{}) *objectAny { - return &objectAny{baseAny{}, nil, reflect.ValueOf(val)} -} - -func (any *objectAny) ValueType() ValueType { - return ObjectValue -} - -func (any *objectAny) MustBeValid() Any { - return any -} - -func (any *objectAny) Parse() *Iterator { - return nil -} - -func (any *objectAny) LastError() error { - return any.err -} - -func (any *objectAny) ToBool() bool { - return any.val.NumField() != 0 -} - -func (any *objectAny) ToInt() int { - return 0 -} - -func (any *objectAny) ToInt32() int32 { - return 0 -} - -func (any *objectAny) ToInt64() int64 { - return 0 -} - -func (any *objectAny) ToUint() uint { - return 0 -} - -func (any *objectAny) ToUint32() uint32 { - return 0 -} - -func (any *objectAny) ToUint64() uint64 { - return 0 -} - -func (any *objectAny) ToFloat32() float32 { - return 0 -} - -func (any *objectAny) ToFloat64() float64 { - return 0 -} - -func (any *objectAny) ToString() string { - str, err := MarshalToString(any.val.Interface()) - any.err = err - return str -} - -func (any *objectAny) Get(path ...interface{}) Any { - if len(path) == 0 { - return any - } - switch firstPath := path[0].(type) { - case string: - field := any.val.FieldByName(firstPath) - if !field.IsValid() { - return newInvalidAny(path) - } - return Wrap(field.Interface()) - case int32: - if '*' == firstPath { - mappedAll := map[string]Any{} - for i := 0; i < any.val.NumField(); i++ { - field := any.val.Field(i) - if field.CanInterface() { - mapped := Wrap(field.Interface()).Get(path[1:]...) - if mapped.ValueType() != InvalidValue { - mappedAll[any.val.Type().Field(i).Name] = mapped - } - } - } - return wrapMap(mappedAll) - } - return newInvalidAny(path) - default: - return newInvalidAny(path) - } -} - -func (any *objectAny) Keys() []string { - keys := make([]string, 0, any.val.NumField()) - for i := 0; i < any.val.NumField(); i++ { - keys = append(keys, any.val.Type().Field(i).Name) - } - return keys -} - -func (any *objectAny) Size() int { - return any.val.NumField() -} - -func (any *objectAny) WriteTo(stream *Stream) { - stream.WriteVal(any.val) -} - -func (any *objectAny) GetInterface() interface{} { - return any.val.Interface() -} - -type mapAny struct { - baseAny - err error - val reflect.Value -} - -func wrapMap(val interface{}) *mapAny { - return &mapAny{baseAny{}, nil, reflect.ValueOf(val)} -} - -func (any *mapAny) ValueType() ValueType { - return ObjectValue -} - -func (any *mapAny) MustBeValid() Any { - return any -} - -func (any *mapAny) Parse() *Iterator { - return nil -} - -func (any *mapAny) LastError() error { - return any.err -} - -func (any *mapAny) ToBool() bool { - return true -} - -func (any *mapAny) ToInt() int { - return 0 -} - -func (any *mapAny) ToInt32() int32 { - return 0 -} - -func (any *mapAny) ToInt64() int64 { - return 0 -} - -func (any *mapAny) ToUint() uint { - return 0 -} - -func (any *mapAny) ToUint32() uint32 { - return 0 -} - -func (any *mapAny) ToUint64() uint64 { - return 0 -} - -func (any *mapAny) ToFloat32() float32 { - return 0 -} - -func (any *mapAny) ToFloat64() float64 { - return 0 -} - -func (any *mapAny) ToString() string { - str, err := MarshalToString(any.val.Interface()) - any.err = err - return str -} - -func (any *mapAny) Get(path ...interface{}) Any { - if len(path) == 0 { - return any - } - switch firstPath := path[0].(type) { - case int32: - if '*' == firstPath { - mappedAll := map[string]Any{} - for _, key := range any.val.MapKeys() { - keyAsStr := key.String() - element := Wrap(any.val.MapIndex(key).Interface()) - mapped := element.Get(path[1:]...) - if mapped.ValueType() != InvalidValue { - mappedAll[keyAsStr] = mapped - } - } - return wrapMap(mappedAll) - } - return newInvalidAny(path) - default: - value := any.val.MapIndex(reflect.ValueOf(firstPath)) - if !value.IsValid() { - return newInvalidAny(path) - } - return Wrap(value.Interface()) - } -} - -func (any *mapAny) Keys() []string { - keys := make([]string, 0, any.val.Len()) - for _, key := range any.val.MapKeys() { - keys = append(keys, key.String()) - } - return keys -} - -func (any *mapAny) Size() int { - return any.val.Len() -} - -func (any *mapAny) WriteTo(stream *Stream) { - stream.WriteVal(any.val) -} - -func (any *mapAny) GetInterface() interface{} { - return any.val.Interface() -} diff --git a/vendor/github.com/json-iterator/go/any_str.go b/vendor/github.com/json-iterator/go/any_str.go deleted file mode 100644 index a4b93c78c..000000000 --- a/vendor/github.com/json-iterator/go/any_str.go +++ /dev/null @@ -1,166 +0,0 @@ -package jsoniter - -import ( - "fmt" - "strconv" -) - -type stringAny struct { - baseAny - val string -} - -func (any *stringAny) Get(path ...interface{}) Any { - if len(path) == 0 { - return any - } - return &invalidAny{baseAny{}, fmt.Errorf("GetIndex %v from simple value", path)} -} - -func (any *stringAny) Parse() *Iterator { - return nil -} - -func (any *stringAny) ValueType() ValueType { - return StringValue -} - -func (any *stringAny) MustBeValid() Any { - return any -} - -func (any *stringAny) LastError() error { - return nil -} - -func (any *stringAny) ToBool() bool { - str := any.ToString() - if str == "0" { - return false - } - for _, c := range str { - switch c { - case ' ', '\n', '\r', '\t': - default: - return true - } - } - return false -} - -func (any *stringAny) ToInt() int { - return int(any.ToInt64()) - -} - -func (any *stringAny) ToInt32() int32 { - return int32(any.ToInt64()) -} - -func (any *stringAny) ToInt64() int64 { - if any.val == "" { - return 0 - } - - flag := 1 - startPos := 0 - endPos := 0 - if any.val[0] == '+' || any.val[0] == '-' { - startPos = 1 - } - - if any.val[0] == '-' { - flag = -1 - } - - for i := startPos; i < len(any.val); i++ { - if any.val[i] >= '0' && any.val[i] <= '9' { - endPos = i + 1 - } else { - break - } - } - parsed, _ := strconv.ParseInt(any.val[startPos:endPos], 10, 64) - return int64(flag) * parsed -} - -func (any *stringAny) ToUint() uint { - return uint(any.ToUint64()) -} - -func (any *stringAny) ToUint32() uint32 { - return uint32(any.ToUint64()) -} - -func (any *stringAny) ToUint64() uint64 { - if any.val == "" { - return 0 - } - - startPos := 0 - endPos := 0 - - if any.val[0] == '-' { - return 0 - } - if any.val[0] == '+' { - startPos = 1 - } - - for i := startPos; i < len(any.val); i++ { - if any.val[i] >= '0' && any.val[i] <= '9' { - endPos = i + 1 - } else { - break - } - } - parsed, _ := strconv.ParseUint(any.val[startPos:endPos], 10, 64) - return parsed -} - -func (any *stringAny) ToFloat32() float32 { - return float32(any.ToFloat64()) -} - -func (any *stringAny) ToFloat64() float64 { - if len(any.val) == 0 { - return 0 - } - - // first char invalid - if any.val[0] != '+' && any.val[0] != '-' && (any.val[0] > '9' || any.val[0] < '0') { - return 0 - } - - // extract valid num expression from string - // eg 123true => 123, -12.12xxa => -12.12 - endPos := 1 - for i := 1; i < len(any.val); i++ { - if any.val[i] == '.' || any.val[i] == 'e' || any.val[i] == 'E' || any.val[i] == '+' || any.val[i] == '-' { - endPos = i + 1 - continue - } - - // end position is the first char which is not digit - if any.val[i] >= '0' && any.val[i] <= '9' { - endPos = i + 1 - } else { - endPos = i - break - } - } - parsed, _ := strconv.ParseFloat(any.val[:endPos], 64) - return parsed -} - -func (any *stringAny) ToString() string { - return any.val -} - -func (any *stringAny) WriteTo(stream *Stream) { - stream.WriteString(any.val) -} - -func (any *stringAny) GetInterface() interface{} { - return any.val -} diff --git a/vendor/github.com/json-iterator/go/any_uint32.go b/vendor/github.com/json-iterator/go/any_uint32.go deleted file mode 100644 index 656bbd33d..000000000 --- a/vendor/github.com/json-iterator/go/any_uint32.go +++ /dev/null @@ -1,74 +0,0 @@ -package jsoniter - -import ( - "strconv" -) - -type uint32Any struct { - baseAny - val uint32 -} - -func (any *uint32Any) LastError() error { - return nil -} - -func (any *uint32Any) ValueType() ValueType { - return NumberValue -} - -func (any *uint32Any) MustBeValid() Any { - return any -} - -func (any *uint32Any) ToBool() bool { - return any.val != 0 -} - -func (any *uint32Any) ToInt() int { - return int(any.val) -} - -func (any *uint32Any) ToInt32() int32 { - return int32(any.val) -} - -func (any *uint32Any) ToInt64() int64 { - return int64(any.val) -} - -func (any *uint32Any) ToUint() uint { - return uint(any.val) -} - -func (any *uint32Any) ToUint32() uint32 { - return any.val -} - -func (any *uint32Any) ToUint64() uint64 { - return uint64(any.val) -} - -func (any *uint32Any) ToFloat32() float32 { - return float32(any.val) -} - -func (any *uint32Any) ToFloat64() float64 { - return float64(any.val) -} - -func (any *uint32Any) ToString() string { - return strconv.FormatInt(int64(any.val), 10) -} - -func (any *uint32Any) WriteTo(stream *Stream) { - stream.WriteUint32(any.val) -} - -func (any *uint32Any) Parse() *Iterator { - return nil -} - -func (any *uint32Any) GetInterface() interface{} { - return any.val -} diff --git a/vendor/github.com/json-iterator/go/any_uint64.go b/vendor/github.com/json-iterator/go/any_uint64.go deleted file mode 100644 index 7df2fce33..000000000 --- a/vendor/github.com/json-iterator/go/any_uint64.go +++ /dev/null @@ -1,74 +0,0 @@ -package jsoniter - -import ( - "strconv" -) - -type uint64Any struct { - baseAny - val uint64 -} - -func (any *uint64Any) LastError() error { - return nil -} - -func (any *uint64Any) ValueType() ValueType { - return NumberValue -} - -func (any *uint64Any) MustBeValid() Any { - return any -} - -func (any *uint64Any) ToBool() bool { - return any.val != 0 -} - -func (any *uint64Any) ToInt() int { - return int(any.val) -} - -func (any *uint64Any) ToInt32() int32 { - return int32(any.val) -} - -func (any *uint64Any) ToInt64() int64 { - return int64(any.val) -} - -func (any *uint64Any) ToUint() uint { - return uint(any.val) -} - -func (any *uint64Any) ToUint32() uint32 { - return uint32(any.val) -} - -func (any *uint64Any) ToUint64() uint64 { - return any.val -} - -func (any *uint64Any) ToFloat32() float32 { - return float32(any.val) -} - -func (any *uint64Any) ToFloat64() float64 { - return float64(any.val) -} - -func (any *uint64Any) ToString() string { - return strconv.FormatUint(any.val, 10) -} - -func (any *uint64Any) WriteTo(stream *Stream) { - stream.WriteUint64(any.val) -} - -func (any *uint64Any) Parse() *Iterator { - return nil -} - -func (any *uint64Any) GetInterface() interface{} { - return any.val -} diff --git a/vendor/github.com/json-iterator/go/build.sh b/vendor/github.com/json-iterator/go/build.sh deleted file mode 100755 index b45ef6883..000000000 --- a/vendor/github.com/json-iterator/go/build.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -set -e -set -x - -if [ ! -d /tmp/build-golang/src/github.com/json-iterator ]; then - mkdir -p /tmp/build-golang/src/github.com/json-iterator - ln -s $PWD /tmp/build-golang/src/github.com/json-iterator/go -fi -export GOPATH=/tmp/build-golang -go get -u github.com/golang/dep/cmd/dep -cd /tmp/build-golang/src/github.com/json-iterator/go -exec $GOPATH/bin/dep ensure -update diff --git a/vendor/github.com/json-iterator/go/config.go b/vendor/github.com/json-iterator/go/config.go deleted file mode 100644 index bd66947d7..000000000 --- a/vendor/github.com/json-iterator/go/config.go +++ /dev/null @@ -1,368 +0,0 @@ -package jsoniter - -import ( - "encoding/json" - "github.com/modern-go/concurrent" - "github.com/modern-go/reflect2" - "io" - "reflect" - "sync" - "unsafe" -) - -// Config customize how the API should behave. -// The API is created from Config by Froze. -type Config struct { - IndentionStep int - MarshalFloatWith6Digits bool - EscapeHTML bool - SortMapKeys bool - UseNumber bool - DisallowUnknownFields bool - TagKey string - OnlyTaggedField bool - ValidateJsonRawMessage bool - ObjectFieldMustBeSimpleString bool -} - -// API the public interface of this package. -// Primary Marshal and Unmarshal. -type API interface { - IteratorPool - StreamPool - MarshalToString(v interface{}) (string, error) - Marshal(v interface{}) ([]byte, error) - MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) - UnmarshalFromString(str string, v interface{}) error - Unmarshal(data []byte, v interface{}) error - Get(data []byte, path ...interface{}) Any - NewEncoder(writer io.Writer) *Encoder - NewDecoder(reader io.Reader) *Decoder - Valid(data []byte) bool - RegisterExtension(extension Extension) - DecoderOf(typ reflect2.Type) ValDecoder - EncoderOf(typ reflect2.Type) ValEncoder -} - -// ConfigDefault the default API -var ConfigDefault = Config{ - EscapeHTML: true, -}.Froze() - -// ConfigCompatibleWithStandardLibrary tries to be 100% compatible with standard library behavior -var ConfigCompatibleWithStandardLibrary = Config{ - EscapeHTML: true, - SortMapKeys: true, - ValidateJsonRawMessage: true, -}.Froze() - -// ConfigFastest marshals float with only 6 digits precision -var ConfigFastest = Config{ - EscapeHTML: false, - MarshalFloatWith6Digits: true, // will lose precession - ObjectFieldMustBeSimpleString: true, // do not unescape object field -}.Froze() - -type frozenConfig struct { - configBeforeFrozen Config - sortMapKeys bool - indentionStep int - objectFieldMustBeSimpleString bool - onlyTaggedField bool - disallowUnknownFields bool - decoderCache *concurrent.Map - encoderCache *concurrent.Map - extensions []Extension - streamPool *sync.Pool - iteratorPool *sync.Pool -} - -func (cfg *frozenConfig) initCache() { - cfg.decoderCache = concurrent.NewMap() - cfg.encoderCache = concurrent.NewMap() -} - -func (cfg *frozenConfig) addDecoderToCache(cacheKey uintptr, decoder ValDecoder) { - cfg.decoderCache.Store(cacheKey, decoder) -} - -func (cfg *frozenConfig) addEncoderToCache(cacheKey uintptr, encoder ValEncoder) { - cfg.encoderCache.Store(cacheKey, encoder) -} - -func (cfg *frozenConfig) getDecoderFromCache(cacheKey uintptr) ValDecoder { - decoder, found := cfg.decoderCache.Load(cacheKey) - if found { - return decoder.(ValDecoder) - } - return nil -} - -func (cfg *frozenConfig) getEncoderFromCache(cacheKey uintptr) ValEncoder { - encoder, found := cfg.encoderCache.Load(cacheKey) - if found { - return encoder.(ValEncoder) - } - return nil -} - -var cfgCache = concurrent.NewMap() - -func getFrozenConfigFromCache(cfg Config) *frozenConfig { - obj, found := cfgCache.Load(cfg) - if found { - return obj.(*frozenConfig) - } - return nil -} - -func addFrozenConfigToCache(cfg Config, frozenConfig *frozenConfig) { - cfgCache.Store(cfg, frozenConfig) -} - -// Froze forge API from config -func (cfg Config) Froze() API { - api := &frozenConfig{ - sortMapKeys: cfg.SortMapKeys, - indentionStep: cfg.IndentionStep, - objectFieldMustBeSimpleString: cfg.ObjectFieldMustBeSimpleString, - onlyTaggedField: cfg.OnlyTaggedField, - disallowUnknownFields: cfg.DisallowUnknownFields, - } - api.streamPool = &sync.Pool{ - New: func() interface{} { - return NewStream(api, nil, 512) - }, - } - api.iteratorPool = &sync.Pool{ - New: func() interface{} { - return NewIterator(api) - }, - } - api.initCache() - encoderExtension := EncoderExtension{} - decoderExtension := DecoderExtension{} - if cfg.MarshalFloatWith6Digits { - api.marshalFloatWith6Digits(encoderExtension) - } - if cfg.EscapeHTML { - api.escapeHTML(encoderExtension) - } - if cfg.UseNumber { - api.useNumber(decoderExtension) - } - if cfg.ValidateJsonRawMessage { - api.validateJsonRawMessage(encoderExtension) - } - if len(encoderExtension) > 0 { - api.extensions = append(api.extensions, encoderExtension) - } - if len(decoderExtension) > 0 { - api.extensions = append(api.extensions, decoderExtension) - } - api.configBeforeFrozen = cfg - return api -} - -func (cfg Config) frozeWithCacheReuse() *frozenConfig { - api := getFrozenConfigFromCache(cfg) - if api != nil { - return api - } - api = cfg.Froze().(*frozenConfig) - addFrozenConfigToCache(cfg, api) - return api -} - -func (cfg *frozenConfig) validateJsonRawMessage(extension EncoderExtension) { - encoder := &funcEncoder{func(ptr unsafe.Pointer, stream *Stream) { - rawMessage := *(*json.RawMessage)(ptr) - iter := cfg.BorrowIterator([]byte(rawMessage)) - iter.Read() - if iter.Error != nil { - stream.WriteRaw("null") - } else { - cfg.ReturnIterator(iter) - stream.WriteRaw(string(rawMessage)) - } - }, func(ptr unsafe.Pointer) bool { - return false - }} - extension[reflect2.TypeOfPtr((*json.RawMessage)(nil)).Elem()] = encoder - extension[reflect2.TypeOfPtr((*RawMessage)(nil)).Elem()] = encoder -} - -func (cfg *frozenConfig) useNumber(extension DecoderExtension) { - extension[reflect2.TypeOfPtr((*interface{})(nil)).Elem()] = &funcDecoder{func(ptr unsafe.Pointer, iter *Iterator) { - exitingValue := *((*interface{})(ptr)) - if exitingValue != nil && reflect.TypeOf(exitingValue).Kind() == reflect.Ptr { - iter.ReadVal(exitingValue) - return - } - if iter.WhatIsNext() == NumberValue { - *((*interface{})(ptr)) = json.Number(iter.readNumberAsString()) - } else { - *((*interface{})(ptr)) = iter.Read() - } - }} -} -func (cfg *frozenConfig) getTagKey() string { - tagKey := cfg.configBeforeFrozen.TagKey - if tagKey == "" { - return "json" - } - return tagKey -} - -func (cfg *frozenConfig) RegisterExtension(extension Extension) { - cfg.extensions = append(cfg.extensions, extension) -} - -type lossyFloat32Encoder struct { -} - -func (encoder *lossyFloat32Encoder) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteFloat32Lossy(*((*float32)(ptr))) -} - -func (encoder *lossyFloat32Encoder) IsEmpty(ptr unsafe.Pointer) bool { - return *((*float32)(ptr)) == 0 -} - -type lossyFloat64Encoder struct { -} - -func (encoder *lossyFloat64Encoder) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteFloat64Lossy(*((*float64)(ptr))) -} - -func (encoder *lossyFloat64Encoder) IsEmpty(ptr unsafe.Pointer) bool { - return *((*float64)(ptr)) == 0 -} - -// EnableLossyFloatMarshalling keeps 10**(-6) precision -// for float variables for better performance. -func (cfg *frozenConfig) marshalFloatWith6Digits(extension EncoderExtension) { - // for better performance - extension[reflect2.TypeOfPtr((*float32)(nil)).Elem()] = &lossyFloat32Encoder{} - extension[reflect2.TypeOfPtr((*float64)(nil)).Elem()] = &lossyFloat64Encoder{} -} - -type htmlEscapedStringEncoder struct { -} - -func (encoder *htmlEscapedStringEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - str := *((*string)(ptr)) - stream.WriteStringWithHTMLEscaped(str) -} - -func (encoder *htmlEscapedStringEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return *((*string)(ptr)) == "" -} - -func (cfg *frozenConfig) escapeHTML(encoderExtension EncoderExtension) { - encoderExtension[reflect2.TypeOfPtr((*string)(nil)).Elem()] = &htmlEscapedStringEncoder{} -} - -func (cfg *frozenConfig) cleanDecoders() { - typeDecoders = map[string]ValDecoder{} - fieldDecoders = map[string]ValDecoder{} - *cfg = *(cfg.configBeforeFrozen.Froze().(*frozenConfig)) -} - -func (cfg *frozenConfig) cleanEncoders() { - typeEncoders = map[string]ValEncoder{} - fieldEncoders = map[string]ValEncoder{} - *cfg = *(cfg.configBeforeFrozen.Froze().(*frozenConfig)) -} - -func (cfg *frozenConfig) MarshalToString(v interface{}) (string, error) { - stream := cfg.BorrowStream(nil) - defer cfg.ReturnStream(stream) - stream.WriteVal(v) - if stream.Error != nil { - return "", stream.Error - } - return string(stream.Buffer()), nil -} - -func (cfg *frozenConfig) Marshal(v interface{}) ([]byte, error) { - stream := cfg.BorrowStream(nil) - defer cfg.ReturnStream(stream) - stream.WriteVal(v) - if stream.Error != nil { - return nil, stream.Error - } - result := stream.Buffer() - copied := make([]byte, len(result)) - copy(copied, result) - return copied, nil -} - -func (cfg *frozenConfig) MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) { - if prefix != "" { - panic("prefix is not supported") - } - for _, r := range indent { - if r != ' ' { - panic("indent can only be space") - } - } - newCfg := cfg.configBeforeFrozen - newCfg.IndentionStep = len(indent) - return newCfg.frozeWithCacheReuse().Marshal(v) -} - -func (cfg *frozenConfig) UnmarshalFromString(str string, v interface{}) error { - data := []byte(str) - iter := cfg.BorrowIterator(data) - defer cfg.ReturnIterator(iter) - iter.ReadVal(v) - c := iter.nextToken() - if c == 0 { - if iter.Error == io.EOF { - return nil - } - return iter.Error - } - iter.ReportError("Unmarshal", "there are bytes left after unmarshal") - return iter.Error -} - -func (cfg *frozenConfig) Get(data []byte, path ...interface{}) Any { - iter := cfg.BorrowIterator(data) - defer cfg.ReturnIterator(iter) - return locatePath(iter, path) -} - -func (cfg *frozenConfig) Unmarshal(data []byte, v interface{}) error { - iter := cfg.BorrowIterator(data) - defer cfg.ReturnIterator(iter) - iter.ReadVal(v) - c := iter.nextToken() - if c == 0 { - if iter.Error == io.EOF { - return nil - } - return iter.Error - } - iter.ReportError("Unmarshal", "there are bytes left after unmarshal") - return iter.Error -} - -func (cfg *frozenConfig) NewEncoder(writer io.Writer) *Encoder { - stream := NewStream(cfg, writer, 512) - return &Encoder{stream} -} - -func (cfg *frozenConfig) NewDecoder(reader io.Reader) *Decoder { - iter := Parse(cfg, reader, 512) - return &Decoder{iter} -} - -func (cfg *frozenConfig) Valid(data []byte) bool { - iter := cfg.BorrowIterator(data) - defer cfg.ReturnIterator(iter) - iter.Skip() - return iter.Error == nil -} diff --git a/vendor/github.com/json-iterator/go/fuzzy_mode_convert_table.md b/vendor/github.com/json-iterator/go/fuzzy_mode_convert_table.md deleted file mode 100644 index 3095662b0..000000000 --- a/vendor/github.com/json-iterator/go/fuzzy_mode_convert_table.md +++ /dev/null @@ -1,7 +0,0 @@ -| json type \ dest type | bool | int | uint | float |string| -| --- | --- | --- | --- |--|--| -| number | positive => true
negative => true
zero => false| 23.2 => 23
-32.1 => -32| 12.1 => 12
-12.1 => 0|as normal|same as origin| -| string | empty string => false
string "0" => false
other strings => true | "123.32" => 123
"-123.4" => -123
"123.23xxxw" => 123
"abcde12" => 0
"-32.1" => -32| 13.2 => 13
-1.1 => 0 |12.1 => 12.1
-12.3 => -12.3
12.4xxa => 12.4
+1.1e2 =>110 |same as origin| -| bool | true => true
false => false| true => 1
false => 0 | true => 1
false => 0 |true => 1
false => 0|true => "true"
false => "false"| -| object | true | 0 | 0 |0|originnal json| -| array | empty array => false
nonempty array => true| [] => 0
[1,2] => 1 | [] => 0
[1,2] => 1 |[] => 0
[1,2] => 1|original json| \ No newline at end of file diff --git a/vendor/github.com/json-iterator/go/iter.go b/vendor/github.com/json-iterator/go/iter.go deleted file mode 100644 index 95ae54fbf..000000000 --- a/vendor/github.com/json-iterator/go/iter.go +++ /dev/null @@ -1,322 +0,0 @@ -package jsoniter - -import ( - "encoding/json" - "fmt" - "io" -) - -// ValueType the type for JSON element -type ValueType int - -const ( - // InvalidValue invalid JSON element - InvalidValue ValueType = iota - // StringValue JSON element "string" - StringValue - // NumberValue JSON element 100 or 0.10 - NumberValue - // NilValue JSON element null - NilValue - // BoolValue JSON element true or false - BoolValue - // ArrayValue JSON element [] - ArrayValue - // ObjectValue JSON element {} - ObjectValue -) - -var hexDigits []byte -var valueTypes []ValueType - -func init() { - hexDigits = make([]byte, 256) - for i := 0; i < len(hexDigits); i++ { - hexDigits[i] = 255 - } - for i := '0'; i <= '9'; i++ { - hexDigits[i] = byte(i - '0') - } - for i := 'a'; i <= 'f'; i++ { - hexDigits[i] = byte((i - 'a') + 10) - } - for i := 'A'; i <= 'F'; i++ { - hexDigits[i] = byte((i - 'A') + 10) - } - valueTypes = make([]ValueType, 256) - for i := 0; i < len(valueTypes); i++ { - valueTypes[i] = InvalidValue - } - valueTypes['"'] = StringValue - valueTypes['-'] = NumberValue - valueTypes['0'] = NumberValue - valueTypes['1'] = NumberValue - valueTypes['2'] = NumberValue - valueTypes['3'] = NumberValue - valueTypes['4'] = NumberValue - valueTypes['5'] = NumberValue - valueTypes['6'] = NumberValue - valueTypes['7'] = NumberValue - valueTypes['8'] = NumberValue - valueTypes['9'] = NumberValue - valueTypes['t'] = BoolValue - valueTypes['f'] = BoolValue - valueTypes['n'] = NilValue - valueTypes['['] = ArrayValue - valueTypes['{'] = ObjectValue -} - -// Iterator is a io.Reader like object, with JSON specific read functions. -// Error is not returned as return value, but stored as Error member on this iterator instance. -type Iterator struct { - cfg *frozenConfig - reader io.Reader - buf []byte - head int - tail int - captureStartedAt int - captured []byte - Error error - Attachment interface{} // open for customized decoder -} - -// NewIterator creates an empty Iterator instance -func NewIterator(cfg API) *Iterator { - return &Iterator{ - cfg: cfg.(*frozenConfig), - reader: nil, - buf: nil, - head: 0, - tail: 0, - } -} - -// Parse creates an Iterator instance from io.Reader -func Parse(cfg API, reader io.Reader, bufSize int) *Iterator { - return &Iterator{ - cfg: cfg.(*frozenConfig), - reader: reader, - buf: make([]byte, bufSize), - head: 0, - tail: 0, - } -} - -// ParseBytes creates an Iterator instance from byte array -func ParseBytes(cfg API, input []byte) *Iterator { - return &Iterator{ - cfg: cfg.(*frozenConfig), - reader: nil, - buf: input, - head: 0, - tail: len(input), - } -} - -// ParseString creates an Iterator instance from string -func ParseString(cfg API, input string) *Iterator { - return ParseBytes(cfg, []byte(input)) -} - -// Pool returns a pool can provide more iterator with same configuration -func (iter *Iterator) Pool() IteratorPool { - return iter.cfg -} - -// Reset reuse iterator instance by specifying another reader -func (iter *Iterator) Reset(reader io.Reader) *Iterator { - iter.reader = reader - iter.head = 0 - iter.tail = 0 - return iter -} - -// ResetBytes reuse iterator instance by specifying another byte array as input -func (iter *Iterator) ResetBytes(input []byte) *Iterator { - iter.reader = nil - iter.buf = input - iter.head = 0 - iter.tail = len(input) - return iter -} - -// WhatIsNext gets ValueType of relatively next json element -func (iter *Iterator) WhatIsNext() ValueType { - valueType := valueTypes[iter.nextToken()] - iter.unreadByte() - return valueType -} - -func (iter *Iterator) skipWhitespacesWithoutLoadMore() bool { - for i := iter.head; i < iter.tail; i++ { - c := iter.buf[i] - switch c { - case ' ', '\n', '\t', '\r': - continue - } - iter.head = i - return false - } - return true -} - -func (iter *Iterator) isObjectEnd() bool { - c := iter.nextToken() - if c == ',' { - return false - } - if c == '}' { - return true - } - iter.ReportError("isObjectEnd", "object ended prematurely, unexpected char "+string([]byte{c})) - return true -} - -func (iter *Iterator) nextToken() byte { - // a variation of skip whitespaces, returning the next non-whitespace token - for { - for i := iter.head; i < iter.tail; i++ { - c := iter.buf[i] - switch c { - case ' ', '\n', '\t', '\r': - continue - } - iter.head = i + 1 - return c - } - if !iter.loadMore() { - return 0 - } - } -} - -// ReportError record a error in iterator instance with current position. -func (iter *Iterator) ReportError(operation string, msg string) { - if iter.Error != nil { - if iter.Error != io.EOF { - return - } - } - peekStart := iter.head - 10 - if peekStart < 0 { - peekStart = 0 - } - peekEnd := iter.head + 10 - if peekEnd > iter.tail { - peekEnd = iter.tail - } - parsing := string(iter.buf[peekStart:peekEnd]) - contextStart := iter.head - 50 - if contextStart < 0 { - contextStart = 0 - } - contextEnd := iter.head + 50 - if contextEnd > iter.tail { - contextEnd = iter.tail - } - context := string(iter.buf[contextStart:contextEnd]) - iter.Error = fmt.Errorf("%s: %s, error found in #%v byte of ...|%s|..., bigger context ...|%s|...", - operation, msg, iter.head-peekStart, parsing, context) -} - -// CurrentBuffer gets current buffer as string for debugging purpose -func (iter *Iterator) CurrentBuffer() string { - peekStart := iter.head - 10 - if peekStart < 0 { - peekStart = 0 - } - return fmt.Sprintf("parsing #%v byte, around ...|%s|..., whole buffer ...|%s|...", iter.head, - string(iter.buf[peekStart:iter.head]), string(iter.buf[0:iter.tail])) -} - -func (iter *Iterator) readByte() (ret byte) { - if iter.head == iter.tail { - if iter.loadMore() { - ret = iter.buf[iter.head] - iter.head++ - return ret - } - return 0 - } - ret = iter.buf[iter.head] - iter.head++ - return ret -} - -func (iter *Iterator) loadMore() bool { - if iter.reader == nil { - if iter.Error == nil { - iter.head = iter.tail - iter.Error = io.EOF - } - return false - } - if iter.captured != nil { - iter.captured = append(iter.captured, - iter.buf[iter.captureStartedAt:iter.tail]...) - iter.captureStartedAt = 0 - } - for { - n, err := iter.reader.Read(iter.buf) - if n == 0 { - if err != nil { - if iter.Error == nil { - iter.Error = err - } - return false - } - } else { - iter.head = 0 - iter.tail = n - return true - } - } -} - -func (iter *Iterator) unreadByte() { - if iter.Error != nil { - return - } - iter.head-- - return -} - -// Read read the next JSON element as generic interface{}. -func (iter *Iterator) Read() interface{} { - valueType := iter.WhatIsNext() - switch valueType { - case StringValue: - return iter.ReadString() - case NumberValue: - if iter.cfg.configBeforeFrozen.UseNumber { - return json.Number(iter.readNumberAsString()) - } - return iter.ReadFloat64() - case NilValue: - iter.skipFourBytes('n', 'u', 'l', 'l') - return nil - case BoolValue: - return iter.ReadBool() - case ArrayValue: - arr := []interface{}{} - iter.ReadArrayCB(func(iter *Iterator) bool { - var elem interface{} - iter.ReadVal(&elem) - arr = append(arr, elem) - return true - }) - return arr - case ObjectValue: - obj := map[string]interface{}{} - iter.ReadMapCB(func(Iter *Iterator, field string) bool { - var elem interface{} - iter.ReadVal(&elem) - obj[field] = elem - return true - }) - return obj - default: - iter.ReportError("Read", fmt.Sprintf("unexpected value type: %v", valueType)) - return nil - } -} diff --git a/vendor/github.com/json-iterator/go/iter_array.go b/vendor/github.com/json-iterator/go/iter_array.go deleted file mode 100644 index 6188cb457..000000000 --- a/vendor/github.com/json-iterator/go/iter_array.go +++ /dev/null @@ -1,58 +0,0 @@ -package jsoniter - -// ReadArray read array element, tells if the array has more element to read. -func (iter *Iterator) ReadArray() (ret bool) { - c := iter.nextToken() - switch c { - case 'n': - iter.skipThreeBytes('u', 'l', 'l') - return false // null - case '[': - c = iter.nextToken() - if c != ']' { - iter.unreadByte() - return true - } - return false - case ']': - return false - case ',': - return true - default: - iter.ReportError("ReadArray", "expect [ or , or ] or n, but found "+string([]byte{c})) - return - } -} - -// ReadArrayCB read array with callback -func (iter *Iterator) ReadArrayCB(callback func(*Iterator) bool) (ret bool) { - c := iter.nextToken() - if c == '[' { - c = iter.nextToken() - if c != ']' { - iter.unreadByte() - if !callback(iter) { - return false - } - c = iter.nextToken() - for c == ',' { - if !callback(iter) { - return false - } - c = iter.nextToken() - } - if c != ']' { - iter.ReportError("ReadArrayCB", "expect ] in the end, but found "+string([]byte{c})) - return false - } - return true - } - return true - } - if c == 'n' { - iter.skipThreeBytes('u', 'l', 'l') - return true // null - } - iter.ReportError("ReadArrayCB", "expect [ or n, but found "+string([]byte{c})) - return false -} diff --git a/vendor/github.com/json-iterator/go/iter_float.go b/vendor/github.com/json-iterator/go/iter_float.go deleted file mode 100644 index 4f883c095..000000000 --- a/vendor/github.com/json-iterator/go/iter_float.go +++ /dev/null @@ -1,347 +0,0 @@ -package jsoniter - -import ( - "encoding/json" - "io" - "math/big" - "strconv" - "strings" - "unsafe" -) - -var floatDigits []int8 - -const invalidCharForNumber = int8(-1) -const endOfNumber = int8(-2) -const dotInNumber = int8(-3) - -func init() { - floatDigits = make([]int8, 256) - for i := 0; i < len(floatDigits); i++ { - floatDigits[i] = invalidCharForNumber - } - for i := int8('0'); i <= int8('9'); i++ { - floatDigits[i] = i - int8('0') - } - floatDigits[','] = endOfNumber - floatDigits[']'] = endOfNumber - floatDigits['}'] = endOfNumber - floatDigits[' '] = endOfNumber - floatDigits['\t'] = endOfNumber - floatDigits['\n'] = endOfNumber - floatDigits['.'] = dotInNumber -} - -// ReadBigFloat read big.Float -func (iter *Iterator) ReadBigFloat() (ret *big.Float) { - str := iter.readNumberAsString() - if iter.Error != nil && iter.Error != io.EOF { - return nil - } - prec := 64 - if len(str) > prec { - prec = len(str) - } - val, _, err := big.ParseFloat(str, 10, uint(prec), big.ToZero) - if err != nil { - iter.Error = err - return nil - } - return val -} - -// ReadBigInt read big.Int -func (iter *Iterator) ReadBigInt() (ret *big.Int) { - str := iter.readNumberAsString() - if iter.Error != nil && iter.Error != io.EOF { - return nil - } - ret = big.NewInt(0) - var success bool - ret, success = ret.SetString(str, 10) - if !success { - iter.ReportError("ReadBigInt", "invalid big int") - return nil - } - return ret -} - -//ReadFloat32 read float32 -func (iter *Iterator) ReadFloat32() (ret float32) { - c := iter.nextToken() - if c == '-' { - return -iter.readPositiveFloat32() - } - iter.unreadByte() - return iter.readPositiveFloat32() -} - -func (iter *Iterator) readPositiveFloat32() (ret float32) { - value := uint64(0) - c := byte(' ') - i := iter.head - // first char - if i == iter.tail { - return iter.readFloat32SlowPath() - } - c = iter.buf[i] - i++ - ind := floatDigits[c] - switch ind { - case invalidCharForNumber: - return iter.readFloat32SlowPath() - case endOfNumber: - iter.ReportError("readFloat32", "empty number") - return - case dotInNumber: - iter.ReportError("readFloat32", "leading dot is invalid") - return - case 0: - if i == iter.tail { - return iter.readFloat32SlowPath() - } - c = iter.buf[i] - switch c { - case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': - iter.ReportError("readFloat32", "leading zero is invalid") - return - } - } - value = uint64(ind) - // chars before dot -non_decimal_loop: - for ; i < iter.tail; i++ { - c = iter.buf[i] - ind := floatDigits[c] - switch ind { - case invalidCharForNumber: - return iter.readFloat32SlowPath() - case endOfNumber: - iter.head = i - return float32(value) - case dotInNumber: - break non_decimal_loop - } - if value > uint64SafeToMultiple10 { - return iter.readFloat32SlowPath() - } - value = (value << 3) + (value << 1) + uint64(ind) // value = value * 10 + ind; - } - // chars after dot - if c == '.' { - i++ - decimalPlaces := 0 - if i == iter.tail { - return iter.readFloat32SlowPath() - } - for ; i < iter.tail; i++ { - c = iter.buf[i] - ind := floatDigits[c] - switch ind { - case endOfNumber: - if decimalPlaces > 0 && decimalPlaces < len(pow10) { - iter.head = i - return float32(float64(value) / float64(pow10[decimalPlaces])) - } - // too many decimal places - return iter.readFloat32SlowPath() - case invalidCharForNumber: - fallthrough - case dotInNumber: - return iter.readFloat32SlowPath() - } - decimalPlaces++ - if value > uint64SafeToMultiple10 { - return iter.readFloat32SlowPath() - } - value = (value << 3) + (value << 1) + uint64(ind) - } - } - return iter.readFloat32SlowPath() -} - -func (iter *Iterator) readNumberAsString() (ret string) { - strBuf := [16]byte{} - str := strBuf[0:0] -load_loop: - for { - for i := iter.head; i < iter.tail; i++ { - c := iter.buf[i] - switch c { - case '+', '-', '.', 'e', 'E', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': - str = append(str, c) - continue - default: - iter.head = i - break load_loop - } - } - if !iter.loadMore() { - break - } - } - if iter.Error != nil && iter.Error != io.EOF { - return - } - if len(str) == 0 { - iter.ReportError("readNumberAsString", "invalid number") - } - return *(*string)(unsafe.Pointer(&str)) -} - -func (iter *Iterator) readFloat32SlowPath() (ret float32) { - str := iter.readNumberAsString() - if iter.Error != nil && iter.Error != io.EOF { - return - } - errMsg := validateFloat(str) - if errMsg != "" { - iter.ReportError("readFloat32SlowPath", errMsg) - return - } - val, err := strconv.ParseFloat(str, 32) - if err != nil { - iter.Error = err - return - } - return float32(val) -} - -// ReadFloat64 read float64 -func (iter *Iterator) ReadFloat64() (ret float64) { - c := iter.nextToken() - if c == '-' { - return -iter.readPositiveFloat64() - } - iter.unreadByte() - return iter.readPositiveFloat64() -} - -func (iter *Iterator) readPositiveFloat64() (ret float64) { - value := uint64(0) - c := byte(' ') - i := iter.head - // first char - if i == iter.tail { - return iter.readFloat64SlowPath() - } - c = iter.buf[i] - i++ - ind := floatDigits[c] - switch ind { - case invalidCharForNumber: - return iter.readFloat64SlowPath() - case endOfNumber: - iter.ReportError("readFloat64", "empty number") - return - case dotInNumber: - iter.ReportError("readFloat64", "leading dot is invalid") - return - case 0: - if i == iter.tail { - return iter.readFloat64SlowPath() - } - c = iter.buf[i] - switch c { - case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': - iter.ReportError("readFloat64", "leading zero is invalid") - return - } - } - value = uint64(ind) - // chars before dot -non_decimal_loop: - for ; i < iter.tail; i++ { - c = iter.buf[i] - ind := floatDigits[c] - switch ind { - case invalidCharForNumber: - return iter.readFloat64SlowPath() - case endOfNumber: - iter.head = i - return float64(value) - case dotInNumber: - break non_decimal_loop - } - if value > uint64SafeToMultiple10 { - return iter.readFloat64SlowPath() - } - value = (value << 3) + (value << 1) + uint64(ind) // value = value * 10 + ind; - } - // chars after dot - if c == '.' { - i++ - decimalPlaces := 0 - if i == iter.tail { - return iter.readFloat64SlowPath() - } - for ; i < iter.tail; i++ { - c = iter.buf[i] - ind := floatDigits[c] - switch ind { - case endOfNumber: - if decimalPlaces > 0 && decimalPlaces < len(pow10) { - iter.head = i - return float64(value) / float64(pow10[decimalPlaces]) - } - // too many decimal places - return iter.readFloat64SlowPath() - case invalidCharForNumber: - fallthrough - case dotInNumber: - return iter.readFloat64SlowPath() - } - decimalPlaces++ - if value > uint64SafeToMultiple10 { - return iter.readFloat64SlowPath() - } - value = (value << 3) + (value << 1) + uint64(ind) - } - } - return iter.readFloat64SlowPath() -} - -func (iter *Iterator) readFloat64SlowPath() (ret float64) { - str := iter.readNumberAsString() - if iter.Error != nil && iter.Error != io.EOF { - return - } - errMsg := validateFloat(str) - if errMsg != "" { - iter.ReportError("readFloat64SlowPath", errMsg) - return - } - val, err := strconv.ParseFloat(str, 64) - if err != nil { - iter.Error = err - return - } - return val -} - -func validateFloat(str string) string { - // strconv.ParseFloat is not validating `1.` or `1.e1` - if len(str) == 0 { - return "empty number" - } - if str[0] == '-' { - return "-- is not valid" - } - dotPos := strings.IndexByte(str, '.') - if dotPos != -1 { - if dotPos == len(str)-1 { - return "dot can not be last character" - } - switch str[dotPos+1] { - case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': - default: - return "missing digit after dot" - } - } - return "" -} - -// ReadNumber read json.Number -func (iter *Iterator) ReadNumber() (ret json.Number) { - return json.Number(iter.readNumberAsString()) -} diff --git a/vendor/github.com/json-iterator/go/iter_int.go b/vendor/github.com/json-iterator/go/iter_int.go deleted file mode 100644 index 214232035..000000000 --- a/vendor/github.com/json-iterator/go/iter_int.go +++ /dev/null @@ -1,345 +0,0 @@ -package jsoniter - -import ( - "math" - "strconv" -) - -var intDigits []int8 - -const uint32SafeToMultiply10 = uint32(0xffffffff)/10 - 1 -const uint64SafeToMultiple10 = uint64(0xffffffffffffffff)/10 - 1 - -func init() { - intDigits = make([]int8, 256) - for i := 0; i < len(intDigits); i++ { - intDigits[i] = invalidCharForNumber - } - for i := int8('0'); i <= int8('9'); i++ { - intDigits[i] = i - int8('0') - } -} - -// ReadUint read uint -func (iter *Iterator) ReadUint() uint { - if strconv.IntSize == 32 { - return uint(iter.ReadUint32()) - } - return uint(iter.ReadUint64()) -} - -// ReadInt read int -func (iter *Iterator) ReadInt() int { - if strconv.IntSize == 32 { - return int(iter.ReadInt32()) - } - return int(iter.ReadInt64()) -} - -// ReadInt8 read int8 -func (iter *Iterator) ReadInt8() (ret int8) { - c := iter.nextToken() - if c == '-' { - val := iter.readUint32(iter.readByte()) - if val > math.MaxInt8+1 { - iter.ReportError("ReadInt8", "overflow: "+strconv.FormatInt(int64(val), 10)) - return - } - return -int8(val) - } - val := iter.readUint32(c) - if val > math.MaxInt8 { - iter.ReportError("ReadInt8", "overflow: "+strconv.FormatInt(int64(val), 10)) - return - } - return int8(val) -} - -// ReadUint8 read uint8 -func (iter *Iterator) ReadUint8() (ret uint8) { - val := iter.readUint32(iter.nextToken()) - if val > math.MaxUint8 { - iter.ReportError("ReadUint8", "overflow: "+strconv.FormatInt(int64(val), 10)) - return - } - return uint8(val) -} - -// ReadInt16 read int16 -func (iter *Iterator) ReadInt16() (ret int16) { - c := iter.nextToken() - if c == '-' { - val := iter.readUint32(iter.readByte()) - if val > math.MaxInt16+1 { - iter.ReportError("ReadInt16", "overflow: "+strconv.FormatInt(int64(val), 10)) - return - } - return -int16(val) - } - val := iter.readUint32(c) - if val > math.MaxInt16 { - iter.ReportError("ReadInt16", "overflow: "+strconv.FormatInt(int64(val), 10)) - return - } - return int16(val) -} - -// ReadUint16 read uint16 -func (iter *Iterator) ReadUint16() (ret uint16) { - val := iter.readUint32(iter.nextToken()) - if val > math.MaxUint16 { - iter.ReportError("ReadUint16", "overflow: "+strconv.FormatInt(int64(val), 10)) - return - } - return uint16(val) -} - -// ReadInt32 read int32 -func (iter *Iterator) ReadInt32() (ret int32) { - c := iter.nextToken() - if c == '-' { - val := iter.readUint32(iter.readByte()) - if val > math.MaxInt32+1 { - iter.ReportError("ReadInt32", "overflow: "+strconv.FormatInt(int64(val), 10)) - return - } - return -int32(val) - } - val := iter.readUint32(c) - if val > math.MaxInt32 { - iter.ReportError("ReadInt32", "overflow: "+strconv.FormatInt(int64(val), 10)) - return - } - return int32(val) -} - -// ReadUint32 read uint32 -func (iter *Iterator) ReadUint32() (ret uint32) { - return iter.readUint32(iter.nextToken()) -} - -func (iter *Iterator) readUint32(c byte) (ret uint32) { - ind := intDigits[c] - if ind == 0 { - iter.assertInteger() - return 0 // single zero - } - if ind == invalidCharForNumber { - iter.ReportError("readUint32", "unexpected character: "+string([]byte{byte(ind)})) - return - } - value := uint32(ind) - if iter.tail-iter.head > 10 { - i := iter.head - ind2 := intDigits[iter.buf[i]] - if ind2 == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value - } - i++ - ind3 := intDigits[iter.buf[i]] - if ind3 == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value*10 + uint32(ind2) - } - //iter.head = i + 1 - //value = value * 100 + uint32(ind2) * 10 + uint32(ind3) - i++ - ind4 := intDigits[iter.buf[i]] - if ind4 == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value*100 + uint32(ind2)*10 + uint32(ind3) - } - i++ - ind5 := intDigits[iter.buf[i]] - if ind5 == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value*1000 + uint32(ind2)*100 + uint32(ind3)*10 + uint32(ind4) - } - i++ - ind6 := intDigits[iter.buf[i]] - if ind6 == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value*10000 + uint32(ind2)*1000 + uint32(ind3)*100 + uint32(ind4)*10 + uint32(ind5) - } - i++ - ind7 := intDigits[iter.buf[i]] - if ind7 == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value*100000 + uint32(ind2)*10000 + uint32(ind3)*1000 + uint32(ind4)*100 + uint32(ind5)*10 + uint32(ind6) - } - i++ - ind8 := intDigits[iter.buf[i]] - if ind8 == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value*1000000 + uint32(ind2)*100000 + uint32(ind3)*10000 + uint32(ind4)*1000 + uint32(ind5)*100 + uint32(ind6)*10 + uint32(ind7) - } - i++ - ind9 := intDigits[iter.buf[i]] - value = value*10000000 + uint32(ind2)*1000000 + uint32(ind3)*100000 + uint32(ind4)*10000 + uint32(ind5)*1000 + uint32(ind6)*100 + uint32(ind7)*10 + uint32(ind8) - iter.head = i - if ind9 == invalidCharForNumber { - iter.assertInteger() - return value - } - } - for { - for i := iter.head; i < iter.tail; i++ { - ind = intDigits[iter.buf[i]] - if ind == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value - } - if value > uint32SafeToMultiply10 { - value2 := (value << 3) + (value << 1) + uint32(ind) - if value2 < value { - iter.ReportError("readUint32", "overflow") - return - } - value = value2 - continue - } - value = (value << 3) + (value << 1) + uint32(ind) - } - if !iter.loadMore() { - iter.assertInteger() - return value - } - } -} - -// ReadInt64 read int64 -func (iter *Iterator) ReadInt64() (ret int64) { - c := iter.nextToken() - if c == '-' { - val := iter.readUint64(iter.readByte()) - if val > math.MaxInt64+1 { - iter.ReportError("ReadInt64", "overflow: "+strconv.FormatUint(uint64(val), 10)) - return - } - return -int64(val) - } - val := iter.readUint64(c) - if val > math.MaxInt64 { - iter.ReportError("ReadInt64", "overflow: "+strconv.FormatUint(uint64(val), 10)) - return - } - return int64(val) -} - -// ReadUint64 read uint64 -func (iter *Iterator) ReadUint64() uint64 { - return iter.readUint64(iter.nextToken()) -} - -func (iter *Iterator) readUint64(c byte) (ret uint64) { - ind := intDigits[c] - if ind == 0 { - iter.assertInteger() - return 0 // single zero - } - if ind == invalidCharForNumber { - iter.ReportError("readUint64", "unexpected character: "+string([]byte{byte(ind)})) - return - } - value := uint64(ind) - if iter.tail-iter.head > 10 { - i := iter.head - ind2 := intDigits[iter.buf[i]] - if ind2 == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value - } - i++ - ind3 := intDigits[iter.buf[i]] - if ind3 == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value*10 + uint64(ind2) - } - //iter.head = i + 1 - //value = value * 100 + uint32(ind2) * 10 + uint32(ind3) - i++ - ind4 := intDigits[iter.buf[i]] - if ind4 == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value*100 + uint64(ind2)*10 + uint64(ind3) - } - i++ - ind5 := intDigits[iter.buf[i]] - if ind5 == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value*1000 + uint64(ind2)*100 + uint64(ind3)*10 + uint64(ind4) - } - i++ - ind6 := intDigits[iter.buf[i]] - if ind6 == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value*10000 + uint64(ind2)*1000 + uint64(ind3)*100 + uint64(ind4)*10 + uint64(ind5) - } - i++ - ind7 := intDigits[iter.buf[i]] - if ind7 == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value*100000 + uint64(ind2)*10000 + uint64(ind3)*1000 + uint64(ind4)*100 + uint64(ind5)*10 + uint64(ind6) - } - i++ - ind8 := intDigits[iter.buf[i]] - if ind8 == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value*1000000 + uint64(ind2)*100000 + uint64(ind3)*10000 + uint64(ind4)*1000 + uint64(ind5)*100 + uint64(ind6)*10 + uint64(ind7) - } - i++ - ind9 := intDigits[iter.buf[i]] - value = value*10000000 + uint64(ind2)*1000000 + uint64(ind3)*100000 + uint64(ind4)*10000 + uint64(ind5)*1000 + uint64(ind6)*100 + uint64(ind7)*10 + uint64(ind8) - iter.head = i - if ind9 == invalidCharForNumber { - iter.assertInteger() - return value - } - } - for { - for i := iter.head; i < iter.tail; i++ { - ind = intDigits[iter.buf[i]] - if ind == invalidCharForNumber { - iter.head = i - iter.assertInteger() - return value - } - if value > uint64SafeToMultiple10 { - value2 := (value << 3) + (value << 1) + uint64(ind) - if value2 < value { - iter.ReportError("readUint64", "overflow") - return - } - value = value2 - continue - } - value = (value << 3) + (value << 1) + uint64(ind) - } - if !iter.loadMore() { - iter.assertInteger() - return value - } - } -} - -func (iter *Iterator) assertInteger() { - if iter.head < len(iter.buf) && iter.buf[iter.head] == '.' { - iter.ReportError("assertInteger", "can not decode float as int") - } -} diff --git a/vendor/github.com/json-iterator/go/iter_object.go b/vendor/github.com/json-iterator/go/iter_object.go deleted file mode 100644 index ebd3da895..000000000 --- a/vendor/github.com/json-iterator/go/iter_object.go +++ /dev/null @@ -1,248 +0,0 @@ -package jsoniter - -import ( - "fmt" - "unicode" -) - -// ReadObject read one field from object. -// If object ended, returns empty string. -// Otherwise, returns the field name. -func (iter *Iterator) ReadObject() (ret string) { - c := iter.nextToken() - switch c { - case 'n': - iter.skipThreeBytes('u', 'l', 'l') - return "" // null - case '{': - c = iter.nextToken() - if c == '"' { - iter.unreadByte() - field := iter.ReadString() - c = iter.nextToken() - if c != ':' { - iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c})) - } - return field - } - if c == '}' { - return "" // end of object - } - iter.ReportError("ReadObject", `expect " after {, but found `+string([]byte{c})) - return - case ',': - field := iter.ReadString() - c = iter.nextToken() - if c != ':' { - iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c})) - } - return field - case '}': - return "" // end of object - default: - iter.ReportError("ReadObject", fmt.Sprintf(`expect { or , or } or n, but found %s`, string([]byte{c}))) - return - } -} - -// CaseInsensitive -func (iter *Iterator) readFieldHash() int64 { - hash := int64(0x811c9dc5) - c := iter.nextToken() - if c != '"' { - iter.ReportError("readFieldHash", `expect ", but found `+string([]byte{c})) - return 0 - } - for { - for i := iter.head; i < iter.tail; i++ { - // require ascii string and no escape - b := iter.buf[i] - if b == '\\' { - iter.head = i - for _, b := range iter.readStringSlowPath() { - if 'A' <= b && b <= 'Z' { - b += 'a' - 'A' - } - hash ^= int64(b) - hash *= 0x1000193 - } - c = iter.nextToken() - if c != ':' { - iter.ReportError("readFieldHash", `expect :, but found `+string([]byte{c})) - return 0 - } - return hash - } - if b == '"' { - iter.head = i + 1 - c = iter.nextToken() - if c != ':' { - iter.ReportError("readFieldHash", `expect :, but found `+string([]byte{c})) - return 0 - } - return hash - } - if 'A' <= b && b <= 'Z' { - b += 'a' - 'A' - } - hash ^= int64(b) - hash *= 0x1000193 - } - if !iter.loadMore() { - iter.ReportError("readFieldHash", `incomplete field name`) - return 0 - } - } -} - -func calcHash(str string) int64 { - hash := int64(0x811c9dc5) - for _, b := range str { - hash ^= int64(unicode.ToLower(b)) - hash *= 0x1000193 - } - return int64(hash) -} - -// ReadObjectCB read object with callback, the key is ascii only and field name not copied -func (iter *Iterator) ReadObjectCB(callback func(*Iterator, string) bool) bool { - c := iter.nextToken() - var field string - if c == '{' { - c = iter.nextToken() - if c == '"' { - iter.unreadByte() - field = iter.ReadString() - c = iter.nextToken() - if c != ':' { - iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c})) - } - if !callback(iter, field) { - return false - } - c = iter.nextToken() - for c == ',' { - field = iter.ReadString() - c = iter.nextToken() - if c != ':' { - iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c})) - } - if !callback(iter, field) { - return false - } - c = iter.nextToken() - } - if c != '}' { - iter.ReportError("ReadObjectCB", `object not ended with }`) - return false - } - return true - } - if c == '}' { - return true - } - iter.ReportError("ReadObjectCB", `expect " after }, but found `+string([]byte{c})) - return false - } - if c == 'n' { - iter.skipThreeBytes('u', 'l', 'l') - return true // null - } - iter.ReportError("ReadObjectCB", `expect { or n, but found `+string([]byte{c})) - return false -} - -// ReadMapCB read map with callback, the key can be any string -func (iter *Iterator) ReadMapCB(callback func(*Iterator, string) bool) bool { - c := iter.nextToken() - if c == '{' { - c = iter.nextToken() - if c == '"' { - iter.unreadByte() - field := iter.ReadString() - if iter.nextToken() != ':' { - iter.ReportError("ReadMapCB", "expect : after object field, but found "+string([]byte{c})) - return false - } - if !callback(iter, field) { - return false - } - c = iter.nextToken() - for c == ',' { - field = iter.ReadString() - if iter.nextToken() != ':' { - iter.ReportError("ReadMapCB", "expect : after object field, but found "+string([]byte{c})) - return false - } - if !callback(iter, field) { - return false - } - c = iter.nextToken() - } - if c != '}' { - iter.ReportError("ReadMapCB", `object not ended with }`) - return false - } - return true - } - if c == '}' { - return true - } - iter.ReportError("ReadMapCB", `expect " after }, but found `+string([]byte{c})) - return false - } - if c == 'n' { - iter.skipThreeBytes('u', 'l', 'l') - return true // null - } - iter.ReportError("ReadMapCB", `expect { or n, but found `+string([]byte{c})) - return false -} - -func (iter *Iterator) readObjectStart() bool { - c := iter.nextToken() - if c == '{' { - c = iter.nextToken() - if c == '}' { - return false - } - iter.unreadByte() - return true - } else if c == 'n' { - iter.skipThreeBytes('u', 'l', 'l') - return false - } - iter.ReportError("readObjectStart", "expect { or n, but found "+string([]byte{c})) - return false -} - -func (iter *Iterator) readObjectFieldAsBytes() (ret []byte) { - str := iter.ReadStringAsSlice() - if iter.skipWhitespacesWithoutLoadMore() { - if ret == nil { - ret = make([]byte, len(str)) - copy(ret, str) - } - if !iter.loadMore() { - return - } - } - if iter.buf[iter.head] != ':' { - iter.ReportError("readObjectFieldAsBytes", "expect : after object field, but found "+string([]byte{iter.buf[iter.head]})) - return - } - iter.head++ - if iter.skipWhitespacesWithoutLoadMore() { - if ret == nil { - ret = make([]byte, len(str)) - copy(ret, str) - } - if !iter.loadMore() { - return - } - } - if ret == nil { - return str - } - return ret -} diff --git a/vendor/github.com/json-iterator/go/iter_skip.go b/vendor/github.com/json-iterator/go/iter_skip.go deleted file mode 100644 index f58beb913..000000000 --- a/vendor/github.com/json-iterator/go/iter_skip.go +++ /dev/null @@ -1,129 +0,0 @@ -package jsoniter - -import "fmt" - -// ReadNil reads a json object as nil and -// returns whether it's a nil or not -func (iter *Iterator) ReadNil() (ret bool) { - c := iter.nextToken() - if c == 'n' { - iter.skipThreeBytes('u', 'l', 'l') // null - return true - } - iter.unreadByte() - return false -} - -// ReadBool reads a json object as BoolValue -func (iter *Iterator) ReadBool() (ret bool) { - c := iter.nextToken() - if c == 't' { - iter.skipThreeBytes('r', 'u', 'e') - return true - } - if c == 'f' { - iter.skipFourBytes('a', 'l', 's', 'e') - return false - } - iter.ReportError("ReadBool", "expect t or f, but found "+string([]byte{c})) - return -} - -// SkipAndReturnBytes skip next JSON element, and return its content as []byte. -// The []byte can be kept, it is a copy of data. -func (iter *Iterator) SkipAndReturnBytes() []byte { - iter.startCapture(iter.head) - iter.Skip() - return iter.stopCapture() -} - -type captureBuffer struct { - startedAt int - captured []byte -} - -func (iter *Iterator) startCapture(captureStartedAt int) { - if iter.captured != nil { - panic("already in capture mode") - } - iter.captureStartedAt = captureStartedAt - iter.captured = make([]byte, 0, 32) -} - -func (iter *Iterator) stopCapture() []byte { - if iter.captured == nil { - panic("not in capture mode") - } - captured := iter.captured - remaining := iter.buf[iter.captureStartedAt:iter.head] - iter.captureStartedAt = -1 - iter.captured = nil - if len(captured) == 0 { - copied := make([]byte, len(remaining)) - copy(copied, remaining) - return copied - } - captured = append(captured, remaining...) - return captured -} - -// Skip skips a json object and positions to relatively the next json object -func (iter *Iterator) Skip() { - c := iter.nextToken() - switch c { - case '"': - iter.skipString() - case 'n': - iter.skipThreeBytes('u', 'l', 'l') // null - case 't': - iter.skipThreeBytes('r', 'u', 'e') // true - case 'f': - iter.skipFourBytes('a', 'l', 's', 'e') // false - case '0': - iter.unreadByte() - iter.ReadFloat32() - case '-', '1', '2', '3', '4', '5', '6', '7', '8', '9': - iter.skipNumber() - case '[': - iter.skipArray() - case '{': - iter.skipObject() - default: - iter.ReportError("Skip", fmt.Sprintf("do not know how to skip: %v", c)) - return - } -} - -func (iter *Iterator) skipFourBytes(b1, b2, b3, b4 byte) { - if iter.readByte() != b1 { - iter.ReportError("skipFourBytes", fmt.Sprintf("expect %s", string([]byte{b1, b2, b3, b4}))) - return - } - if iter.readByte() != b2 { - iter.ReportError("skipFourBytes", fmt.Sprintf("expect %s", string([]byte{b1, b2, b3, b4}))) - return - } - if iter.readByte() != b3 { - iter.ReportError("skipFourBytes", fmt.Sprintf("expect %s", string([]byte{b1, b2, b3, b4}))) - return - } - if iter.readByte() != b4 { - iter.ReportError("skipFourBytes", fmt.Sprintf("expect %s", string([]byte{b1, b2, b3, b4}))) - return - } -} - -func (iter *Iterator) skipThreeBytes(b1, b2, b3 byte) { - if iter.readByte() != b1 { - iter.ReportError("skipThreeBytes", fmt.Sprintf("expect %s", string([]byte{b1, b2, b3}))) - return - } - if iter.readByte() != b2 { - iter.ReportError("skipThreeBytes", fmt.Sprintf("expect %s", string([]byte{b1, b2, b3}))) - return - } - if iter.readByte() != b3 { - iter.ReportError("skipThreeBytes", fmt.Sprintf("expect %s", string([]byte{b1, b2, b3}))) - return - } -} diff --git a/vendor/github.com/json-iterator/go/iter_skip_sloppy.go b/vendor/github.com/json-iterator/go/iter_skip_sloppy.go deleted file mode 100644 index 8fcdc3b69..000000000 --- a/vendor/github.com/json-iterator/go/iter_skip_sloppy.go +++ /dev/null @@ -1,144 +0,0 @@ -//+build jsoniter_sloppy - -package jsoniter - -// sloppy but faster implementation, do not validate the input json - -func (iter *Iterator) skipNumber() { - for { - for i := iter.head; i < iter.tail; i++ { - c := iter.buf[i] - switch c { - case ' ', '\n', '\r', '\t', ',', '}', ']': - iter.head = i - return - } - } - if !iter.loadMore() { - return - } - } -} - -func (iter *Iterator) skipArray() { - level := 1 - for { - for i := iter.head; i < iter.tail; i++ { - switch iter.buf[i] { - case '"': // If inside string, skip it - iter.head = i + 1 - iter.skipString() - i = iter.head - 1 // it will be i++ soon - case '[': // If open symbol, increase level - level++ - case ']': // If close symbol, increase level - level-- - - // If we have returned to the original level, we're done - if level == 0 { - iter.head = i + 1 - return - } - } - } - if !iter.loadMore() { - iter.ReportError("skipObject", "incomplete array") - return - } - } -} - -func (iter *Iterator) skipObject() { - level := 1 - for { - for i := iter.head; i < iter.tail; i++ { - switch iter.buf[i] { - case '"': // If inside string, skip it - iter.head = i + 1 - iter.skipString() - i = iter.head - 1 // it will be i++ soon - case '{': // If open symbol, increase level - level++ - case '}': // If close symbol, increase level - level-- - - // If we have returned to the original level, we're done - if level == 0 { - iter.head = i + 1 - return - } - } - } - if !iter.loadMore() { - iter.ReportError("skipObject", "incomplete object") - return - } - } -} - -func (iter *Iterator) skipString() { - for { - end, escaped := iter.findStringEnd() - if end == -1 { - if !iter.loadMore() { - iter.ReportError("skipString", "incomplete string") - return - } - if escaped { - iter.head = 1 // skip the first char as last char read is \ - } - } else { - iter.head = end - return - } - } -} - -// adapted from: https://github.com/buger/jsonparser/blob/master/parser.go -// Tries to find the end of string -// Support if string contains escaped quote symbols. -func (iter *Iterator) findStringEnd() (int, bool) { - escaped := false - for i := iter.head; i < iter.tail; i++ { - c := iter.buf[i] - if c == '"' { - if !escaped { - return i + 1, false - } - j := i - 1 - for { - if j < iter.head || iter.buf[j] != '\\' { - // even number of backslashes - // either end of buffer, or " found - return i + 1, true - } - j-- - if j < iter.head || iter.buf[j] != '\\' { - // odd number of backslashes - // it is \" or \\\" - break - } - j-- - } - } else if c == '\\' { - escaped = true - } - } - j := iter.tail - 1 - for { - if j < iter.head || iter.buf[j] != '\\' { - // even number of backslashes - // either end of buffer, or " found - return -1, false // do not end with \ - } - j-- - if j < iter.head || iter.buf[j] != '\\' { - // odd number of backslashes - // it is \" or \\\" - break - } - j-- - - } - return -1, true // end with \ -} diff --git a/vendor/github.com/json-iterator/go/iter_skip_strict.go b/vendor/github.com/json-iterator/go/iter_skip_strict.go deleted file mode 100644 index f67bc2e83..000000000 --- a/vendor/github.com/json-iterator/go/iter_skip_strict.go +++ /dev/null @@ -1,89 +0,0 @@ -//+build !jsoniter_sloppy - -package jsoniter - -import "fmt" - -func (iter *Iterator) skipNumber() { - if !iter.trySkipNumber() { - iter.unreadByte() - iter.ReadFloat32() - } -} - -func (iter *Iterator) trySkipNumber() bool { - dotFound := false - for i := iter.head; i < iter.tail; i++ { - c := iter.buf[i] - switch c { - case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': - case '.': - if dotFound { - iter.ReportError("validateNumber", `more than one dot found in number`) - return true // already failed - } - if i+1 == iter.tail { - return false - } - c = iter.buf[i+1] - switch c { - case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': - default: - iter.ReportError("validateNumber", `missing digit after dot`) - return true // already failed - } - dotFound = true - default: - switch c { - case ',', ']', '}', ' ', '\t', '\n', '\r': - if iter.head == i { - return false // if - without following digits - } - iter.head = i - return true // must be valid - } - return false // may be invalid - } - } - return false -} - -func (iter *Iterator) skipString() { - if !iter.trySkipString() { - iter.unreadByte() - iter.ReadString() - } -} - -func (iter *Iterator) trySkipString() bool { - for i := iter.head; i < iter.tail; i++ { - c := iter.buf[i] - if c == '"' { - iter.head = i + 1 - return true // valid - } else if c == '\\' { - return false - } else if c < ' ' { - iter.ReportError("trySkipString", - fmt.Sprintf(`invalid control character found: %d`, c)) - return true // already failed - } - } - return false -} - -func (iter *Iterator) skipObject() { - iter.unreadByte() - iter.ReadObjectCB(func(iter *Iterator, field string) bool { - iter.Skip() - return true - }) -} - -func (iter *Iterator) skipArray() { - iter.unreadByte() - iter.ReadArrayCB(func(iter *Iterator) bool { - iter.Skip() - return true - }) -} diff --git a/vendor/github.com/json-iterator/go/iter_str.go b/vendor/github.com/json-iterator/go/iter_str.go deleted file mode 100644 index adc487ea8..000000000 --- a/vendor/github.com/json-iterator/go/iter_str.go +++ /dev/null @@ -1,215 +0,0 @@ -package jsoniter - -import ( - "fmt" - "unicode/utf16" -) - -// ReadString read string from iterator -func (iter *Iterator) ReadString() (ret string) { - c := iter.nextToken() - if c == '"' { - for i := iter.head; i < iter.tail; i++ { - c := iter.buf[i] - if c == '"' { - ret = string(iter.buf[iter.head:i]) - iter.head = i + 1 - return ret - } else if c == '\\' { - break - } else if c < ' ' { - iter.ReportError("ReadString", - fmt.Sprintf(`invalid control character found: %d`, c)) - return - } - } - return iter.readStringSlowPath() - } else if c == 'n' { - iter.skipThreeBytes('u', 'l', 'l') - return "" - } - iter.ReportError("ReadString", `expects " or n, but found `+string([]byte{c})) - return -} - -func (iter *Iterator) readStringSlowPath() (ret string) { - var str []byte - var c byte - for iter.Error == nil { - c = iter.readByte() - if c == '"' { - return string(str) - } - if c == '\\' { - c = iter.readByte() - str = iter.readEscapedChar(c, str) - } else { - str = append(str, c) - } - } - iter.ReportError("readStringSlowPath", "unexpected end of input") - return -} - -func (iter *Iterator) readEscapedChar(c byte, str []byte) []byte { - switch c { - case 'u': - r := iter.readU4() - if utf16.IsSurrogate(r) { - c = iter.readByte() - if iter.Error != nil { - return nil - } - if c != '\\' { - iter.unreadByte() - str = appendRune(str, r) - return str - } - c = iter.readByte() - if iter.Error != nil { - return nil - } - if c != 'u' { - str = appendRune(str, r) - return iter.readEscapedChar(c, str) - } - r2 := iter.readU4() - if iter.Error != nil { - return nil - } - combined := utf16.DecodeRune(r, r2) - if combined == '\uFFFD' { - str = appendRune(str, r) - str = appendRune(str, r2) - } else { - str = appendRune(str, combined) - } - } else { - str = appendRune(str, r) - } - case '"': - str = append(str, '"') - case '\\': - str = append(str, '\\') - case '/': - str = append(str, '/') - case 'b': - str = append(str, '\b') - case 'f': - str = append(str, '\f') - case 'n': - str = append(str, '\n') - case 'r': - str = append(str, '\r') - case 't': - str = append(str, '\t') - default: - iter.ReportError("readEscapedChar", - `invalid escape char after \`) - return nil - } - return str -} - -// ReadStringAsSlice read string from iterator without copying into string form. -// The []byte can not be kept, as it will change after next iterator call. -func (iter *Iterator) ReadStringAsSlice() (ret []byte) { - c := iter.nextToken() - if c == '"' { - for i := iter.head; i < iter.tail; i++ { - // require ascii string and no escape - // for: field name, base64, number - if iter.buf[i] == '"' { - // fast path: reuse the underlying buffer - ret = iter.buf[iter.head:i] - iter.head = i + 1 - return ret - } - } - readLen := iter.tail - iter.head - copied := make([]byte, readLen, readLen*2) - copy(copied, iter.buf[iter.head:iter.tail]) - iter.head = iter.tail - for iter.Error == nil { - c := iter.readByte() - if c == '"' { - return copied - } - copied = append(copied, c) - } - return copied - } - iter.ReportError("ReadStringAsSlice", `expects " or n, but found `+string([]byte{c})) - return -} - -func (iter *Iterator) readU4() (ret rune) { - for i := 0; i < 4; i++ { - c := iter.readByte() - if iter.Error != nil { - return - } - if c >= '0' && c <= '9' { - ret = ret*16 + rune(c-'0') - } else if c >= 'a' && c <= 'f' { - ret = ret*16 + rune(c-'a'+10) - } else if c >= 'A' && c <= 'F' { - ret = ret*16 + rune(c-'A'+10) - } else { - iter.ReportError("readU4", "expects 0~9 or a~f, but found "+string([]byte{c})) - return - } - } - return ret -} - -const ( - t1 = 0x00 // 0000 0000 - tx = 0x80 // 1000 0000 - t2 = 0xC0 // 1100 0000 - t3 = 0xE0 // 1110 0000 - t4 = 0xF0 // 1111 0000 - t5 = 0xF8 // 1111 1000 - - maskx = 0x3F // 0011 1111 - mask2 = 0x1F // 0001 1111 - mask3 = 0x0F // 0000 1111 - mask4 = 0x07 // 0000 0111 - - rune1Max = 1<<7 - 1 - rune2Max = 1<<11 - 1 - rune3Max = 1<<16 - 1 - - surrogateMin = 0xD800 - surrogateMax = 0xDFFF - - maxRune = '\U0010FFFF' // Maximum valid Unicode code point. - runeError = '\uFFFD' // the "error" Rune or "Unicode replacement character" -) - -func appendRune(p []byte, r rune) []byte { - // Negative values are erroneous. Making it unsigned addresses the problem. - switch i := uint32(r); { - case i <= rune1Max: - p = append(p, byte(r)) - return p - case i <= rune2Max: - p = append(p, t2|byte(r>>6)) - p = append(p, tx|byte(r)&maskx) - return p - case i > maxRune, surrogateMin <= i && i <= surrogateMax: - r = runeError - fallthrough - case i <= rune3Max: - p = append(p, t3|byte(r>>12)) - p = append(p, tx|byte(r>>6)&maskx) - p = append(p, tx|byte(r)&maskx) - return p - default: - p = append(p, t4|byte(r>>18)) - p = append(p, tx|byte(r>>12)&maskx) - p = append(p, tx|byte(r>>6)&maskx) - p = append(p, tx|byte(r)&maskx) - return p - } -} diff --git a/vendor/github.com/json-iterator/go/jsoniter.go b/vendor/github.com/json-iterator/go/jsoniter.go deleted file mode 100644 index c2934f916..000000000 --- a/vendor/github.com/json-iterator/go/jsoniter.go +++ /dev/null @@ -1,18 +0,0 @@ -// Package jsoniter implements encoding and decoding of JSON as defined in -// RFC 4627 and provides interfaces with identical syntax of standard lib encoding/json. -// Converting from encoding/json to jsoniter is no more than replacing the package with jsoniter -// and variable type declarations (if any). -// jsoniter interfaces gives 100% compatibility with code using standard lib. -// -// "JSON and Go" -// (https://golang.org/doc/articles/json_and_go.html) -// gives a description of how Marshal/Unmarshal operate -// between arbitrary or predefined json objects and bytes, -// and it applies to jsoniter.Marshal/Unmarshal as well. -// -// Besides, jsoniter.Iterator provides a different set of interfaces -// iterating given bytes/string/reader -// and yielding parsed elements one by one. -// This set of interfaces reads input as required and gives -// better performance. -package jsoniter diff --git a/vendor/github.com/json-iterator/go/pool.go b/vendor/github.com/json-iterator/go/pool.go deleted file mode 100644 index e2389b56c..000000000 --- a/vendor/github.com/json-iterator/go/pool.go +++ /dev/null @@ -1,42 +0,0 @@ -package jsoniter - -import ( - "io" -) - -// IteratorPool a thread safe pool of iterators with same configuration -type IteratorPool interface { - BorrowIterator(data []byte) *Iterator - ReturnIterator(iter *Iterator) -} - -// StreamPool a thread safe pool of streams with same configuration -type StreamPool interface { - BorrowStream(writer io.Writer) *Stream - ReturnStream(stream *Stream) -} - -func (cfg *frozenConfig) BorrowStream(writer io.Writer) *Stream { - stream := cfg.streamPool.Get().(*Stream) - stream.Reset(writer) - return stream -} - -func (cfg *frozenConfig) ReturnStream(stream *Stream) { - stream.out = nil - stream.Error = nil - stream.Attachment = nil - cfg.streamPool.Put(stream) -} - -func (cfg *frozenConfig) BorrowIterator(data []byte) *Iterator { - iter := cfg.iteratorPool.Get().(*Iterator) - iter.ResetBytes(data) - return iter -} - -func (cfg *frozenConfig) ReturnIterator(iter *Iterator) { - iter.Error = nil - iter.Attachment = nil - cfg.iteratorPool.Put(iter) -} diff --git a/vendor/github.com/json-iterator/go/reflect.go b/vendor/github.com/json-iterator/go/reflect.go deleted file mode 100644 index 5c7d3a8a0..000000000 --- a/vendor/github.com/json-iterator/go/reflect.go +++ /dev/null @@ -1,321 +0,0 @@ -package jsoniter - -import ( - "fmt" - "github.com/modern-go/reflect2" - "reflect" - "unsafe" -) - -// ValDecoder is an internal type registered to cache as needed. -// Don't confuse jsoniter.ValDecoder with json.Decoder. -// For json.Decoder's adapter, refer to jsoniter.AdapterDecoder(todo link). -// -// Reflection on type to create decoders, which is then cached -// Reflection on value is avoided as we can, as the reflect.Value itself will allocate, with following exceptions -// 1. create instance of new value, for example *int will need a int to be allocated -// 2. append to slice, if the existing cap is not enough, allocate will be done using Reflect.New -// 3. assignment to map, both key and value will be reflect.Value -// For a simple struct binding, it will be reflect.Value free and allocation free -type ValDecoder interface { - Decode(ptr unsafe.Pointer, iter *Iterator) -} - -// ValEncoder is an internal type registered to cache as needed. -// Don't confuse jsoniter.ValEncoder with json.Encoder. -// For json.Encoder's adapter, refer to jsoniter.AdapterEncoder(todo godoc link). -type ValEncoder interface { - IsEmpty(ptr unsafe.Pointer) bool - Encode(ptr unsafe.Pointer, stream *Stream) -} - -type checkIsEmpty interface { - IsEmpty(ptr unsafe.Pointer) bool -} - -type ctx struct { - *frozenConfig - prefix string - encoders map[reflect2.Type]ValEncoder - decoders map[reflect2.Type]ValDecoder -} - -func (b *ctx) append(prefix string) *ctx { - return &ctx{ - frozenConfig: b.frozenConfig, - prefix: b.prefix + " " + prefix, - encoders: b.encoders, - decoders: b.decoders, - } -} - -// ReadVal copy the underlying JSON into go interface, same as json.Unmarshal -func (iter *Iterator) ReadVal(obj interface{}) { - cacheKey := reflect2.RTypeOf(obj) - decoder := iter.cfg.getDecoderFromCache(cacheKey) - if decoder == nil { - typ := reflect2.TypeOf(obj) - if typ.Kind() != reflect.Ptr { - iter.ReportError("ReadVal", "can only unmarshal into pointer") - return - } - decoder = iter.cfg.DecoderOf(typ) - } - ptr := reflect2.PtrOf(obj) - if ptr == nil { - iter.ReportError("ReadVal", "can not read into nil pointer") - return - } - decoder.Decode(ptr, iter) -} - -// WriteVal copy the go interface into underlying JSON, same as json.Marshal -func (stream *Stream) WriteVal(val interface{}) { - if nil == val { - stream.WriteNil() - return - } - cacheKey := reflect2.RTypeOf(val) - encoder := stream.cfg.getEncoderFromCache(cacheKey) - if encoder == nil { - typ := reflect2.TypeOf(val) - encoder = stream.cfg.EncoderOf(typ) - } - encoder.Encode(reflect2.PtrOf(val), stream) -} - -func (cfg *frozenConfig) DecoderOf(typ reflect2.Type) ValDecoder { - cacheKey := typ.RType() - decoder := cfg.getDecoderFromCache(cacheKey) - if decoder != nil { - return decoder - } - ctx := &ctx{ - frozenConfig: cfg, - prefix: "", - decoders: map[reflect2.Type]ValDecoder{}, - encoders: map[reflect2.Type]ValEncoder{}, - } - ptrType := typ.(*reflect2.UnsafePtrType) - decoder = decoderOfType(ctx, ptrType.Elem()) - cfg.addDecoderToCache(cacheKey, decoder) - return decoder -} - -func decoderOfType(ctx *ctx, typ reflect2.Type) ValDecoder { - decoder := getTypeDecoderFromExtension(ctx, typ) - if decoder != nil { - return decoder - } - decoder = createDecoderOfType(ctx, typ) - for _, extension := range extensions { - decoder = extension.DecorateDecoder(typ, decoder) - } - for _, extension := range ctx.extensions { - decoder = extension.DecorateDecoder(typ, decoder) - } - return decoder -} - -func createDecoderOfType(ctx *ctx, typ reflect2.Type) ValDecoder { - decoder := ctx.decoders[typ] - if decoder != nil { - return decoder - } - placeholder := &placeholderDecoder{} - ctx.decoders[typ] = placeholder - decoder = _createDecoderOfType(ctx, typ) - placeholder.decoder = decoder - return decoder -} - -func _createDecoderOfType(ctx *ctx, typ reflect2.Type) ValDecoder { - decoder := createDecoderOfJsonRawMessage(ctx, typ) - if decoder != nil { - return decoder - } - decoder = createDecoderOfJsonNumber(ctx, typ) - if decoder != nil { - return decoder - } - decoder = createDecoderOfMarshaler(ctx, typ) - if decoder != nil { - return decoder - } - decoder = createDecoderOfAny(ctx, typ) - if decoder != nil { - return decoder - } - decoder = createDecoderOfNative(ctx, typ) - if decoder != nil { - return decoder - } - switch typ.Kind() { - case reflect.Interface: - ifaceType, isIFace := typ.(*reflect2.UnsafeIFaceType) - if isIFace { - return &ifaceDecoder{valType: ifaceType} - } - return &efaceDecoder{} - case reflect.Struct: - return decoderOfStruct(ctx, typ) - case reflect.Array: - return decoderOfArray(ctx, typ) - case reflect.Slice: - return decoderOfSlice(ctx, typ) - case reflect.Map: - return decoderOfMap(ctx, typ) - case reflect.Ptr: - return decoderOfOptional(ctx, typ) - default: - return &lazyErrorDecoder{err: fmt.Errorf("%s%s is unsupported type", ctx.prefix, typ.String())} - } -} - -func (cfg *frozenConfig) EncoderOf(typ reflect2.Type) ValEncoder { - cacheKey := typ.RType() - encoder := cfg.getEncoderFromCache(cacheKey) - if encoder != nil { - return encoder - } - ctx := &ctx{ - frozenConfig: cfg, - prefix: "", - decoders: map[reflect2.Type]ValDecoder{}, - encoders: map[reflect2.Type]ValEncoder{}, - } - encoder = encoderOfType(ctx, typ) - if typ.LikePtr() { - encoder = &onePtrEncoder{encoder} - } - cfg.addEncoderToCache(cacheKey, encoder) - return encoder -} - -type onePtrEncoder struct { - encoder ValEncoder -} - -func (encoder *onePtrEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return encoder.encoder.IsEmpty(unsafe.Pointer(&ptr)) -} - -func (encoder *onePtrEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - encoder.encoder.Encode(unsafe.Pointer(&ptr), stream) -} - -func encoderOfType(ctx *ctx, typ reflect2.Type) ValEncoder { - encoder := getTypeEncoderFromExtension(ctx, typ) - if encoder != nil { - return encoder - } - encoder = createEncoderOfType(ctx, typ) - for _, extension := range extensions { - encoder = extension.DecorateEncoder(typ, encoder) - } - for _, extension := range ctx.extensions { - encoder = extension.DecorateEncoder(typ, encoder) - } - return encoder -} - -func createEncoderOfType(ctx *ctx, typ reflect2.Type) ValEncoder { - encoder := ctx.encoders[typ] - if encoder != nil { - return encoder - } - placeholder := &placeholderEncoder{} - ctx.encoders[typ] = placeholder - encoder = _createEncoderOfType(ctx, typ) - placeholder.encoder = encoder - return encoder -} -func _createEncoderOfType(ctx *ctx, typ reflect2.Type) ValEncoder { - encoder := createEncoderOfJsonRawMessage(ctx, typ) - if encoder != nil { - return encoder - } - encoder = createEncoderOfJsonNumber(ctx, typ) - if encoder != nil { - return encoder - } - encoder = createEncoderOfMarshaler(ctx, typ) - if encoder != nil { - return encoder - } - encoder = createEncoderOfAny(ctx, typ) - if encoder != nil { - return encoder - } - encoder = createEncoderOfNative(ctx, typ) - if encoder != nil { - return encoder - } - kind := typ.Kind() - switch kind { - case reflect.Interface: - return &dynamicEncoder{typ} - case reflect.Struct: - return encoderOfStruct(ctx, typ) - case reflect.Array: - return encoderOfArray(ctx, typ) - case reflect.Slice: - return encoderOfSlice(ctx, typ) - case reflect.Map: - return encoderOfMap(ctx, typ) - case reflect.Ptr: - return encoderOfOptional(ctx, typ) - default: - return &lazyErrorEncoder{err: fmt.Errorf("%s%s is unsupported type", ctx.prefix, typ.String())} - } -} - -type lazyErrorDecoder struct { - err error -} - -func (decoder *lazyErrorDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if iter.WhatIsNext() != NilValue { - if iter.Error == nil { - iter.Error = decoder.err - } - } else { - iter.Skip() - } -} - -type lazyErrorEncoder struct { - err error -} - -func (encoder *lazyErrorEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - if ptr == nil { - stream.WriteNil() - } else if stream.Error == nil { - stream.Error = encoder.err - } -} - -func (encoder *lazyErrorEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return false -} - -type placeholderDecoder struct { - decoder ValDecoder -} - -func (decoder *placeholderDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - decoder.decoder.Decode(ptr, iter) -} - -type placeholderEncoder struct { - encoder ValEncoder -} - -func (encoder *placeholderEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - encoder.encoder.Encode(ptr, stream) -} - -func (encoder *placeholderEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return encoder.encoder.IsEmpty(ptr) -} diff --git a/vendor/github.com/json-iterator/go/reflect_array.go b/vendor/github.com/json-iterator/go/reflect_array.go deleted file mode 100644 index 13a0b7b08..000000000 --- a/vendor/github.com/json-iterator/go/reflect_array.go +++ /dev/null @@ -1,104 +0,0 @@ -package jsoniter - -import ( - "fmt" - "github.com/modern-go/reflect2" - "io" - "unsafe" -) - -func decoderOfArray(ctx *ctx, typ reflect2.Type) ValDecoder { - arrayType := typ.(*reflect2.UnsafeArrayType) - decoder := decoderOfType(ctx.append("[arrayElem]"), arrayType.Elem()) - return &arrayDecoder{arrayType, decoder} -} - -func encoderOfArray(ctx *ctx, typ reflect2.Type) ValEncoder { - arrayType := typ.(*reflect2.UnsafeArrayType) - if arrayType.Len() == 0 { - return emptyArrayEncoder{} - } - encoder := encoderOfType(ctx.append("[arrayElem]"), arrayType.Elem()) - return &arrayEncoder{arrayType, encoder} -} - -type emptyArrayEncoder struct{} - -func (encoder emptyArrayEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteEmptyArray() -} - -func (encoder emptyArrayEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return true -} - -type arrayEncoder struct { - arrayType *reflect2.UnsafeArrayType - elemEncoder ValEncoder -} - -func (encoder *arrayEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteArrayStart() - elemPtr := unsafe.Pointer(ptr) - encoder.elemEncoder.Encode(elemPtr, stream) - for i := 1; i < encoder.arrayType.Len(); i++ { - stream.WriteMore() - elemPtr = encoder.arrayType.UnsafeGetIndex(ptr, i) - encoder.elemEncoder.Encode(elemPtr, stream) - } - stream.WriteArrayEnd() - if stream.Error != nil && stream.Error != io.EOF { - stream.Error = fmt.Errorf("%v: %s", encoder.arrayType, stream.Error.Error()) - } -} - -func (encoder *arrayEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return false -} - -type arrayDecoder struct { - arrayType *reflect2.UnsafeArrayType - elemDecoder ValDecoder -} - -func (decoder *arrayDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - decoder.doDecode(ptr, iter) - if iter.Error != nil && iter.Error != io.EOF { - iter.Error = fmt.Errorf("%v: %s", decoder.arrayType, iter.Error.Error()) - } -} - -func (decoder *arrayDecoder) doDecode(ptr unsafe.Pointer, iter *Iterator) { - c := iter.nextToken() - arrayType := decoder.arrayType - if c == 'n' { - iter.skipThreeBytes('u', 'l', 'l') - return - } - if c != '[' { - iter.ReportError("decode array", "expect [ or n, but found "+string([]byte{c})) - return - } - c = iter.nextToken() - if c == ']' { - return - } - iter.unreadByte() - elemPtr := arrayType.UnsafeGetIndex(ptr, 0) - decoder.elemDecoder.Decode(elemPtr, iter) - length := 1 - for c = iter.nextToken(); c == ','; c = iter.nextToken() { - if length >= arrayType.Len() { - iter.Skip() - continue - } - idx := length - length += 1 - elemPtr = arrayType.UnsafeGetIndex(ptr, idx) - decoder.elemDecoder.Decode(elemPtr, iter) - } - if c != ']' { - iter.ReportError("decode array", "expect ], but found "+string([]byte{c})) - return - } -} diff --git a/vendor/github.com/json-iterator/go/reflect_dynamic.go b/vendor/github.com/json-iterator/go/reflect_dynamic.go deleted file mode 100644 index 8b6bc8b43..000000000 --- a/vendor/github.com/json-iterator/go/reflect_dynamic.go +++ /dev/null @@ -1,70 +0,0 @@ -package jsoniter - -import ( - "github.com/modern-go/reflect2" - "reflect" - "unsafe" -) - -type dynamicEncoder struct { - valType reflect2.Type -} - -func (encoder *dynamicEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - obj := encoder.valType.UnsafeIndirect(ptr) - stream.WriteVal(obj) -} - -func (encoder *dynamicEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return encoder.valType.UnsafeIndirect(ptr) == nil -} - -type efaceDecoder struct { -} - -func (decoder *efaceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - pObj := (*interface{})(ptr) - obj := *pObj - if obj == nil { - *pObj = iter.Read() - return - } - typ := reflect2.TypeOf(obj) - if typ.Kind() != reflect.Ptr { - *pObj = iter.Read() - return - } - ptrType := typ.(*reflect2.UnsafePtrType) - ptrElemType := ptrType.Elem() - if iter.WhatIsNext() == NilValue { - if ptrElemType.Kind() != reflect.Ptr { - iter.skipFourBytes('n', 'u', 'l', 'l') - *pObj = nil - return - } - } - if reflect2.IsNil(obj) { - obj := ptrElemType.New() - iter.ReadVal(obj) - *pObj = obj - return - } - iter.ReadVal(obj) -} - -type ifaceDecoder struct { - valType *reflect2.UnsafeIFaceType -} - -func (decoder *ifaceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if iter.ReadNil() { - decoder.valType.UnsafeSet(ptr, decoder.valType.UnsafeNew()) - return - } - obj := decoder.valType.UnsafeIndirect(ptr) - if reflect2.IsNil(obj) { - iter.ReportError("decode non empty interface", "can not unmarshal into nil") - return - } - iter.ReadVal(obj) -} diff --git a/vendor/github.com/json-iterator/go/reflect_extension.go b/vendor/github.com/json-iterator/go/reflect_extension.go deleted file mode 100644 index 917bbe84e..000000000 --- a/vendor/github.com/json-iterator/go/reflect_extension.go +++ /dev/null @@ -1,471 +0,0 @@ -package jsoniter - -import ( - "fmt" - "github.com/modern-go/reflect2" - "reflect" - "sort" - "strings" - "unicode" - "unsafe" -) - -var typeDecoders = map[string]ValDecoder{} -var fieldDecoders = map[string]ValDecoder{} -var typeEncoders = map[string]ValEncoder{} -var fieldEncoders = map[string]ValEncoder{} -var extensions = []Extension{} - -// StructDescriptor describe how should we encode/decode the struct -type StructDescriptor struct { - Type reflect2.Type - Fields []*Binding -} - -// GetField get one field from the descriptor by its name. -// Can not use map here to keep field orders. -func (structDescriptor *StructDescriptor) GetField(fieldName string) *Binding { - for _, binding := range structDescriptor.Fields { - if binding.Field.Name() == fieldName { - return binding - } - } - return nil -} - -// Binding describe how should we encode/decode the struct field -type Binding struct { - levels []int - Field reflect2.StructField - FromNames []string - ToNames []string - Encoder ValEncoder - Decoder ValDecoder -} - -// Extension the one for all SPI. Customize encoding/decoding by specifying alternate encoder/decoder. -// Can also rename fields by UpdateStructDescriptor. -type Extension interface { - UpdateStructDescriptor(structDescriptor *StructDescriptor) - CreateMapKeyDecoder(typ reflect2.Type) ValDecoder - CreateMapKeyEncoder(typ reflect2.Type) ValEncoder - CreateDecoder(typ reflect2.Type) ValDecoder - CreateEncoder(typ reflect2.Type) ValEncoder - DecorateDecoder(typ reflect2.Type, decoder ValDecoder) ValDecoder - DecorateEncoder(typ reflect2.Type, encoder ValEncoder) ValEncoder -} - -// DummyExtension embed this type get dummy implementation for all methods of Extension -type DummyExtension struct { -} - -// UpdateStructDescriptor No-op -func (extension *DummyExtension) UpdateStructDescriptor(structDescriptor *StructDescriptor) { -} - -// CreateMapKeyDecoder No-op -func (extension *DummyExtension) CreateMapKeyDecoder(typ reflect2.Type) ValDecoder { - return nil -} - -// CreateMapKeyEncoder No-op -func (extension *DummyExtension) CreateMapKeyEncoder(typ reflect2.Type) ValEncoder { - return nil -} - -// CreateDecoder No-op -func (extension *DummyExtension) CreateDecoder(typ reflect2.Type) ValDecoder { - return nil -} - -// CreateEncoder No-op -func (extension *DummyExtension) CreateEncoder(typ reflect2.Type) ValEncoder { - return nil -} - -// DecorateDecoder No-op -func (extension *DummyExtension) DecorateDecoder(typ reflect2.Type, decoder ValDecoder) ValDecoder { - return decoder -} - -// DecorateEncoder No-op -func (extension *DummyExtension) DecorateEncoder(typ reflect2.Type, encoder ValEncoder) ValEncoder { - return encoder -} - -type EncoderExtension map[reflect2.Type]ValEncoder - -// UpdateStructDescriptor No-op -func (extension EncoderExtension) UpdateStructDescriptor(structDescriptor *StructDescriptor) { -} - -// CreateDecoder No-op -func (extension EncoderExtension) CreateDecoder(typ reflect2.Type) ValDecoder { - return nil -} - -// CreateEncoder get encoder from map -func (extension EncoderExtension) CreateEncoder(typ reflect2.Type) ValEncoder { - return extension[typ] -} - -// CreateMapKeyDecoder No-op -func (extension EncoderExtension) CreateMapKeyDecoder(typ reflect2.Type) ValDecoder { - return nil -} - -// CreateMapKeyEncoder No-op -func (extension EncoderExtension) CreateMapKeyEncoder(typ reflect2.Type) ValEncoder { - return nil -} - -// DecorateDecoder No-op -func (extension EncoderExtension) DecorateDecoder(typ reflect2.Type, decoder ValDecoder) ValDecoder { - return decoder -} - -// DecorateEncoder No-op -func (extension EncoderExtension) DecorateEncoder(typ reflect2.Type, encoder ValEncoder) ValEncoder { - return encoder -} - -type DecoderExtension map[reflect2.Type]ValDecoder - -// UpdateStructDescriptor No-op -func (extension DecoderExtension) UpdateStructDescriptor(structDescriptor *StructDescriptor) { -} - -// CreateMapKeyDecoder No-op -func (extension DecoderExtension) CreateMapKeyDecoder(typ reflect2.Type) ValDecoder { - return nil -} - -// CreateMapKeyEncoder No-op -func (extension DecoderExtension) CreateMapKeyEncoder(typ reflect2.Type) ValEncoder { - return nil -} - -// CreateDecoder get decoder from map -func (extension DecoderExtension) CreateDecoder(typ reflect2.Type) ValDecoder { - return extension[typ] -} - -// CreateEncoder No-op -func (extension DecoderExtension) CreateEncoder(typ reflect2.Type) ValEncoder { - return nil -} - -// DecorateDecoder No-op -func (extension DecoderExtension) DecorateDecoder(typ reflect2.Type, decoder ValDecoder) ValDecoder { - return decoder -} - -// DecorateEncoder No-op -func (extension DecoderExtension) DecorateEncoder(typ reflect2.Type, encoder ValEncoder) ValEncoder { - return encoder -} - -type funcDecoder struct { - fun DecoderFunc -} - -func (decoder *funcDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - decoder.fun(ptr, iter) -} - -type funcEncoder struct { - fun EncoderFunc - isEmptyFunc func(ptr unsafe.Pointer) bool -} - -func (encoder *funcEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - encoder.fun(ptr, stream) -} - -func (encoder *funcEncoder) IsEmpty(ptr unsafe.Pointer) bool { - if encoder.isEmptyFunc == nil { - return false - } - return encoder.isEmptyFunc(ptr) -} - -// DecoderFunc the function form of TypeDecoder -type DecoderFunc func(ptr unsafe.Pointer, iter *Iterator) - -// EncoderFunc the function form of TypeEncoder -type EncoderFunc func(ptr unsafe.Pointer, stream *Stream) - -// RegisterTypeDecoderFunc register TypeDecoder for a type with function -func RegisterTypeDecoderFunc(typ string, fun DecoderFunc) { - typeDecoders[typ] = &funcDecoder{fun} -} - -// RegisterTypeDecoder register TypeDecoder for a typ -func RegisterTypeDecoder(typ string, decoder ValDecoder) { - typeDecoders[typ] = decoder -} - -// RegisterFieldDecoderFunc register TypeDecoder for a struct field with function -func RegisterFieldDecoderFunc(typ string, field string, fun DecoderFunc) { - RegisterFieldDecoder(typ, field, &funcDecoder{fun}) -} - -// RegisterFieldDecoder register TypeDecoder for a struct field -func RegisterFieldDecoder(typ string, field string, decoder ValDecoder) { - fieldDecoders[fmt.Sprintf("%s/%s", typ, field)] = decoder -} - -// RegisterTypeEncoderFunc register TypeEncoder for a type with encode/isEmpty function -func RegisterTypeEncoderFunc(typ string, fun EncoderFunc, isEmptyFunc func(unsafe.Pointer) bool) { - typeEncoders[typ] = &funcEncoder{fun, isEmptyFunc} -} - -// RegisterTypeEncoder register TypeEncoder for a type -func RegisterTypeEncoder(typ string, encoder ValEncoder) { - typeEncoders[typ] = encoder -} - -// RegisterFieldEncoderFunc register TypeEncoder for a struct field with encode/isEmpty function -func RegisterFieldEncoderFunc(typ string, field string, fun EncoderFunc, isEmptyFunc func(unsafe.Pointer) bool) { - RegisterFieldEncoder(typ, field, &funcEncoder{fun, isEmptyFunc}) -} - -// RegisterFieldEncoder register TypeEncoder for a struct field -func RegisterFieldEncoder(typ string, field string, encoder ValEncoder) { - fieldEncoders[fmt.Sprintf("%s/%s", typ, field)] = encoder -} - -// RegisterExtension register extension -func RegisterExtension(extension Extension) { - extensions = append(extensions, extension) -} - -func getTypeDecoderFromExtension(ctx *ctx, typ reflect2.Type) ValDecoder { - decoder := _getTypeDecoderFromExtension(ctx, typ) - if decoder != nil { - for _, extension := range extensions { - decoder = extension.DecorateDecoder(typ, decoder) - } - for _, extension := range ctx.extensions { - decoder = extension.DecorateDecoder(typ, decoder) - } - } - return decoder -} -func _getTypeDecoderFromExtension(ctx *ctx, typ reflect2.Type) ValDecoder { - for _, extension := range extensions { - decoder := extension.CreateDecoder(typ) - if decoder != nil { - return decoder - } - } - for _, extension := range ctx.extensions { - decoder := extension.CreateDecoder(typ) - if decoder != nil { - return decoder - } - } - typeName := typ.String() - decoder := typeDecoders[typeName] - if decoder != nil { - return decoder - } - if typ.Kind() == reflect.Ptr { - ptrType := typ.(*reflect2.UnsafePtrType) - decoder := typeDecoders[ptrType.Elem().String()] - if decoder != nil { - return &OptionalDecoder{ptrType.Elem(), decoder} - } - } - return nil -} - -func getTypeEncoderFromExtension(ctx *ctx, typ reflect2.Type) ValEncoder { - encoder := _getTypeEncoderFromExtension(ctx, typ) - if encoder != nil { - for _, extension := range extensions { - encoder = extension.DecorateEncoder(typ, encoder) - } - for _, extension := range ctx.extensions { - encoder = extension.DecorateEncoder(typ, encoder) - } - } - return encoder -} - -func _getTypeEncoderFromExtension(ctx *ctx, typ reflect2.Type) ValEncoder { - for _, extension := range extensions { - encoder := extension.CreateEncoder(typ) - if encoder != nil { - return encoder - } - } - for _, extension := range ctx.extensions { - encoder := extension.CreateEncoder(typ) - if encoder != nil { - return encoder - } - } - typeName := typ.String() - encoder := typeEncoders[typeName] - if encoder != nil { - return encoder - } - if typ.Kind() == reflect.Ptr { - typePtr := typ.(*reflect2.UnsafePtrType) - encoder := typeEncoders[typePtr.Elem().String()] - if encoder != nil { - return &OptionalEncoder{encoder} - } - } - return nil -} - -func describeStruct(ctx *ctx, typ reflect2.Type) *StructDescriptor { - structType := typ.(*reflect2.UnsafeStructType) - embeddedBindings := []*Binding{} - bindings := []*Binding{} - for i := 0; i < structType.NumField(); i++ { - field := structType.Field(i) - tag, hastag := field.Tag().Lookup(ctx.getTagKey()) - if ctx.onlyTaggedField && !hastag { - continue - } - tagParts := strings.Split(tag, ",") - if tag == "-" { - continue - } - if field.Anonymous() && (tag == "" || tagParts[0] == "") { - if field.Type().Kind() == reflect.Struct { - structDescriptor := describeStruct(ctx, field.Type()) - for _, binding := range structDescriptor.Fields { - binding.levels = append([]int{i}, binding.levels...) - omitempty := binding.Encoder.(*structFieldEncoder).omitempty - binding.Encoder = &structFieldEncoder{field, binding.Encoder, omitempty} - binding.Decoder = &structFieldDecoder{field, binding.Decoder} - embeddedBindings = append(embeddedBindings, binding) - } - continue - } else if field.Type().Kind() == reflect.Ptr { - ptrType := field.Type().(*reflect2.UnsafePtrType) - if ptrType.Elem().Kind() == reflect.Struct { - structDescriptor := describeStruct(ctx, ptrType.Elem()) - for _, binding := range structDescriptor.Fields { - binding.levels = append([]int{i}, binding.levels...) - omitempty := binding.Encoder.(*structFieldEncoder).omitempty - binding.Encoder = &dereferenceEncoder{binding.Encoder} - binding.Encoder = &structFieldEncoder{field, binding.Encoder, omitempty} - binding.Decoder = &dereferenceDecoder{ptrType.Elem(), binding.Decoder} - binding.Decoder = &structFieldDecoder{field, binding.Decoder} - embeddedBindings = append(embeddedBindings, binding) - } - continue - } - } - } - fieldNames := calcFieldNames(field.Name(), tagParts[0], tag) - fieldCacheKey := fmt.Sprintf("%s/%s", typ.String(), field.Name()) - decoder := fieldDecoders[fieldCacheKey] - if decoder == nil { - decoder = decoderOfType(ctx.append(field.Name()), field.Type()) - } - encoder := fieldEncoders[fieldCacheKey] - if encoder == nil { - encoder = encoderOfType(ctx.append(field.Name()), field.Type()) - } - binding := &Binding{ - Field: field, - FromNames: fieldNames, - ToNames: fieldNames, - Decoder: decoder, - Encoder: encoder, - } - binding.levels = []int{i} - bindings = append(bindings, binding) - } - return createStructDescriptor(ctx, typ, bindings, embeddedBindings) -} -func createStructDescriptor(ctx *ctx, typ reflect2.Type, bindings []*Binding, embeddedBindings []*Binding) *StructDescriptor { - structDescriptor := &StructDescriptor{ - Type: typ, - Fields: bindings, - } - for _, extension := range extensions { - extension.UpdateStructDescriptor(structDescriptor) - } - for _, extension := range ctx.extensions { - extension.UpdateStructDescriptor(structDescriptor) - } - processTags(structDescriptor, ctx.frozenConfig) - // merge normal & embedded bindings & sort with original order - allBindings := sortableBindings(append(embeddedBindings, structDescriptor.Fields...)) - sort.Sort(allBindings) - structDescriptor.Fields = allBindings - return structDescriptor -} - -type sortableBindings []*Binding - -func (bindings sortableBindings) Len() int { - return len(bindings) -} - -func (bindings sortableBindings) Less(i, j int) bool { - left := bindings[i].levels - right := bindings[j].levels - k := 0 - for { - if left[k] < right[k] { - return true - } else if left[k] > right[k] { - return false - } - k++ - } -} - -func (bindings sortableBindings) Swap(i, j int) { - bindings[i], bindings[j] = bindings[j], bindings[i] -} - -func processTags(structDescriptor *StructDescriptor, cfg *frozenConfig) { - for _, binding := range structDescriptor.Fields { - shouldOmitEmpty := false - tagParts := strings.Split(binding.Field.Tag().Get(cfg.getTagKey()), ",") - for _, tagPart := range tagParts[1:] { - if tagPart == "omitempty" { - shouldOmitEmpty = true - } else if tagPart == "string" { - if binding.Field.Type().Kind() == reflect.String { - binding.Decoder = &stringModeStringDecoder{binding.Decoder, cfg} - binding.Encoder = &stringModeStringEncoder{binding.Encoder, cfg} - } else { - binding.Decoder = &stringModeNumberDecoder{binding.Decoder} - binding.Encoder = &stringModeNumberEncoder{binding.Encoder} - } - } - } - binding.Decoder = &structFieldDecoder{binding.Field, binding.Decoder} - binding.Encoder = &structFieldEncoder{binding.Field, binding.Encoder, shouldOmitEmpty} - } -} - -func calcFieldNames(originalFieldName string, tagProvidedFieldName string, wholeTag string) []string { - // ignore? - if wholeTag == "-" { - return []string{} - } - // rename? - var fieldNames []string - if tagProvidedFieldName == "" { - fieldNames = []string{originalFieldName} - } else { - fieldNames = []string{tagProvidedFieldName} - } - // private? - isNotExported := unicode.IsLower(rune(originalFieldName[0])) - if isNotExported { - fieldNames = []string{} - } - return fieldNames -} diff --git a/vendor/github.com/json-iterator/go/reflect_json_number.go b/vendor/github.com/json-iterator/go/reflect_json_number.go deleted file mode 100644 index 98d45c1ec..000000000 --- a/vendor/github.com/json-iterator/go/reflect_json_number.go +++ /dev/null @@ -1,112 +0,0 @@ -package jsoniter - -import ( - "encoding/json" - "github.com/modern-go/reflect2" - "strconv" - "unsafe" -) - -type Number string - -// String returns the literal text of the number. -func (n Number) String() string { return string(n) } - -// Float64 returns the number as a float64. -func (n Number) Float64() (float64, error) { - return strconv.ParseFloat(string(n), 64) -} - -// Int64 returns the number as an int64. -func (n Number) Int64() (int64, error) { - return strconv.ParseInt(string(n), 10, 64) -} - -func CastJsonNumber(val interface{}) (string, bool) { - switch typedVal := val.(type) { - case json.Number: - return string(typedVal), true - case Number: - return string(typedVal), true - } - return "", false -} - -var jsonNumberType = reflect2.TypeOfPtr((*json.Number)(nil)).Elem() -var jsoniterNumberType = reflect2.TypeOfPtr((*Number)(nil)).Elem() - -func createDecoderOfJsonNumber(ctx *ctx, typ reflect2.Type) ValDecoder { - if typ.AssignableTo(jsonNumberType) { - return &jsonNumberCodec{} - } - if typ.AssignableTo(jsoniterNumberType) { - return &jsoniterNumberCodec{} - } - return nil -} - -func createEncoderOfJsonNumber(ctx *ctx, typ reflect2.Type) ValEncoder { - if typ.AssignableTo(jsonNumberType) { - return &jsonNumberCodec{} - } - if typ.AssignableTo(jsoniterNumberType) { - return &jsoniterNumberCodec{} - } - return nil -} - -type jsonNumberCodec struct { -} - -func (codec *jsonNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { - switch iter.WhatIsNext() { - case StringValue: - *((*json.Number)(ptr)) = json.Number(iter.ReadString()) - case NilValue: - iter.skipFourBytes('n', 'u', 'l', 'l') - *((*json.Number)(ptr)) = "" - default: - *((*json.Number)(ptr)) = json.Number([]byte(iter.readNumberAsString())) - } -} - -func (codec *jsonNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) { - number := *((*json.Number)(ptr)) - if len(number) == 0 { - stream.writeByte('0') - } else { - stream.WriteRaw(string(number)) - } -} - -func (codec *jsonNumberCodec) IsEmpty(ptr unsafe.Pointer) bool { - return len(*((*json.Number)(ptr))) == 0 -} - -type jsoniterNumberCodec struct { -} - -func (codec *jsoniterNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { - switch iter.WhatIsNext() { - case StringValue: - *((*Number)(ptr)) = Number(iter.ReadString()) - case NilValue: - iter.skipFourBytes('n', 'u', 'l', 'l') - *((*Number)(ptr)) = "" - default: - *((*Number)(ptr)) = Number([]byte(iter.readNumberAsString())) - } -} - -func (codec *jsoniterNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) { - number := *((*Number)(ptr)) - if len(number) == 0 { - stream.writeByte('0') - } else { - stream.WriteRaw(string(number)) - } -} - -func (codec *jsoniterNumberCodec) IsEmpty(ptr unsafe.Pointer) bool { - return len(*((*Number)(ptr))) == 0 -} diff --git a/vendor/github.com/json-iterator/go/reflect_json_raw_message.go b/vendor/github.com/json-iterator/go/reflect_json_raw_message.go deleted file mode 100644 index f2619936c..000000000 --- a/vendor/github.com/json-iterator/go/reflect_json_raw_message.go +++ /dev/null @@ -1,60 +0,0 @@ -package jsoniter - -import ( - "encoding/json" - "github.com/modern-go/reflect2" - "unsafe" -) - -var jsonRawMessageType = reflect2.TypeOfPtr((*json.RawMessage)(nil)).Elem() -var jsoniterRawMessageType = reflect2.TypeOfPtr((*RawMessage)(nil)).Elem() - -func createEncoderOfJsonRawMessage(ctx *ctx, typ reflect2.Type) ValEncoder { - if typ == jsonRawMessageType { - return &jsonRawMessageCodec{} - } - if typ == jsoniterRawMessageType { - return &jsoniterRawMessageCodec{} - } - return nil -} - -func createDecoderOfJsonRawMessage(ctx *ctx, typ reflect2.Type) ValDecoder { - if typ == jsonRawMessageType { - return &jsonRawMessageCodec{} - } - if typ == jsoniterRawMessageType { - return &jsoniterRawMessageCodec{} - } - return nil -} - -type jsonRawMessageCodec struct { -} - -func (codec *jsonRawMessageCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { - *((*json.RawMessage)(ptr)) = json.RawMessage(iter.SkipAndReturnBytes()) -} - -func (codec *jsonRawMessageCodec) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteRaw(string(*((*json.RawMessage)(ptr)))) -} - -func (codec *jsonRawMessageCodec) IsEmpty(ptr unsafe.Pointer) bool { - return len(*((*json.RawMessage)(ptr))) == 0 -} - -type jsoniterRawMessageCodec struct { -} - -func (codec *jsoniterRawMessageCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { - *((*RawMessage)(ptr)) = RawMessage(iter.SkipAndReturnBytes()) -} - -func (codec *jsoniterRawMessageCodec) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteRaw(string(*((*RawMessage)(ptr)))) -} - -func (codec *jsoniterRawMessageCodec) IsEmpty(ptr unsafe.Pointer) bool { - return len(*((*RawMessage)(ptr))) == 0 -} diff --git a/vendor/github.com/json-iterator/go/reflect_map.go b/vendor/github.com/json-iterator/go/reflect_map.go deleted file mode 100644 index 8812f0850..000000000 --- a/vendor/github.com/json-iterator/go/reflect_map.go +++ /dev/null @@ -1,318 +0,0 @@ -package jsoniter - -import ( - "fmt" - "github.com/modern-go/reflect2" - "io" - "reflect" - "sort" - "unsafe" -) - -func decoderOfMap(ctx *ctx, typ reflect2.Type) ValDecoder { - mapType := typ.(*reflect2.UnsafeMapType) - keyDecoder := decoderOfMapKey(ctx.append("[mapKey]"), mapType.Key()) - elemDecoder := decoderOfType(ctx.append("[mapElem]"), mapType.Elem()) - return &mapDecoder{ - mapType: mapType, - keyType: mapType.Key(), - elemType: mapType.Elem(), - keyDecoder: keyDecoder, - elemDecoder: elemDecoder, - } -} - -func encoderOfMap(ctx *ctx, typ reflect2.Type) ValEncoder { - mapType := typ.(*reflect2.UnsafeMapType) - if ctx.sortMapKeys { - return &sortKeysMapEncoder{ - mapType: mapType, - keyEncoder: encoderOfMapKey(ctx.append("[mapKey]"), mapType.Key()), - elemEncoder: encoderOfType(ctx.append("[mapElem]"), mapType.Elem()), - } - } - return &mapEncoder{ - mapType: mapType, - keyEncoder: encoderOfMapKey(ctx.append("[mapKey]"), mapType.Key()), - elemEncoder: encoderOfType(ctx.append("[mapElem]"), mapType.Elem()), - } -} - -func decoderOfMapKey(ctx *ctx, typ reflect2.Type) ValDecoder { - for _, extension := range ctx.extensions { - decoder := extension.CreateMapKeyDecoder(typ) - if decoder != nil { - return decoder - } - } - switch typ.Kind() { - case reflect.String: - return decoderOfType(ctx, reflect2.DefaultTypeOfKind(reflect.String)) - case reflect.Bool, - reflect.Uint8, reflect.Int8, - reflect.Uint16, reflect.Int16, - reflect.Uint32, reflect.Int32, - reflect.Uint64, reflect.Int64, - reflect.Uint, reflect.Int, - reflect.Float32, reflect.Float64, - reflect.Uintptr: - typ = reflect2.DefaultTypeOfKind(typ.Kind()) - return &numericMapKeyDecoder{decoderOfType(ctx, typ)} - default: - ptrType := reflect2.PtrTo(typ) - if ptrType.Implements(textMarshalerType) { - return &referenceDecoder{ - &textUnmarshalerDecoder{ - valType: ptrType, - }, - } - } - if typ.Implements(textMarshalerType) { - return &textUnmarshalerDecoder{ - valType: typ, - } - } - return &lazyErrorDecoder{err: fmt.Errorf("unsupported map key type: %v", typ)} - } -} - -func encoderOfMapKey(ctx *ctx, typ reflect2.Type) ValEncoder { - for _, extension := range ctx.extensions { - encoder := extension.CreateMapKeyEncoder(typ) - if encoder != nil { - return encoder - } - } - switch typ.Kind() { - case reflect.String: - return encoderOfType(ctx, reflect2.DefaultTypeOfKind(reflect.String)) - case reflect.Bool, - reflect.Uint8, reflect.Int8, - reflect.Uint16, reflect.Int16, - reflect.Uint32, reflect.Int32, - reflect.Uint64, reflect.Int64, - reflect.Uint, reflect.Int, - reflect.Float32, reflect.Float64, - reflect.Uintptr: - typ = reflect2.DefaultTypeOfKind(typ.Kind()) - return &numericMapKeyEncoder{encoderOfType(ctx, typ)} - default: - if typ == textMarshalerType { - return &directTextMarshalerEncoder{ - stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")), - } - } - if typ.Implements(textMarshalerType) { - return &textMarshalerEncoder{ - valType: typ, - stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")), - } - } - if typ.Kind() == reflect.Interface { - return &dynamicMapKeyEncoder{ctx, typ} - } - return &lazyErrorEncoder{err: fmt.Errorf("unsupported map key type: %v", typ)} - } -} - -type mapDecoder struct { - mapType *reflect2.UnsafeMapType - keyType reflect2.Type - elemType reflect2.Type - keyDecoder ValDecoder - elemDecoder ValDecoder -} - -func (decoder *mapDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - mapType := decoder.mapType - c := iter.nextToken() - if c == 'n' { - iter.skipThreeBytes('u', 'l', 'l') - *(*unsafe.Pointer)(ptr) = nil - mapType.UnsafeSet(ptr, mapType.UnsafeNew()) - return - } - if mapType.UnsafeIsNil(ptr) { - mapType.UnsafeSet(ptr, mapType.UnsafeMakeMap(0)) - } - if c != '{' { - iter.ReportError("ReadMapCB", `expect { or n, but found `+string([]byte{c})) - return - } - c = iter.nextToken() - if c == '}' { - return - } - if c != '"' { - iter.ReportError("ReadMapCB", `expect " after }, but found `+string([]byte{c})) - return - } - iter.unreadByte() - key := decoder.keyType.UnsafeNew() - decoder.keyDecoder.Decode(key, iter) - c = iter.nextToken() - if c != ':' { - iter.ReportError("ReadMapCB", "expect : after object field, but found "+string([]byte{c})) - return - } - elem := decoder.elemType.UnsafeNew() - decoder.elemDecoder.Decode(elem, iter) - decoder.mapType.UnsafeSetIndex(ptr, key, elem) - for c = iter.nextToken(); c == ','; c = iter.nextToken() { - key := decoder.keyType.UnsafeNew() - decoder.keyDecoder.Decode(key, iter) - c = iter.nextToken() - if c != ':' { - iter.ReportError("ReadMapCB", "expect : after object field, but found "+string([]byte{c})) - return - } - elem := decoder.elemType.UnsafeNew() - decoder.elemDecoder.Decode(elem, iter) - decoder.mapType.UnsafeSetIndex(ptr, key, elem) - } - if c != '}' { - iter.ReportError("ReadMapCB", `expect }, but found `+string([]byte{c})) - } -} - -type numericMapKeyDecoder struct { - decoder ValDecoder -} - -func (decoder *numericMapKeyDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - c := iter.nextToken() - if c != '"' { - iter.ReportError("ReadMapCB", `expect ", but found `+string([]byte{c})) - return - } - decoder.decoder.Decode(ptr, iter) - c = iter.nextToken() - if c != '"' { - iter.ReportError("ReadMapCB", `expect ", but found `+string([]byte{c})) - return - } -} - -type numericMapKeyEncoder struct { - encoder ValEncoder -} - -func (encoder *numericMapKeyEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.writeByte('"') - encoder.encoder.Encode(ptr, stream) - stream.writeByte('"') -} - -func (encoder *numericMapKeyEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return false -} - -type dynamicMapKeyEncoder struct { - ctx *ctx - valType reflect2.Type -} - -func (encoder *dynamicMapKeyEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - obj := encoder.valType.UnsafeIndirect(ptr) - encoderOfMapKey(encoder.ctx, reflect2.TypeOf(obj)).Encode(reflect2.PtrOf(obj), stream) -} - -func (encoder *dynamicMapKeyEncoder) IsEmpty(ptr unsafe.Pointer) bool { - obj := encoder.valType.UnsafeIndirect(ptr) - return encoderOfMapKey(encoder.ctx, reflect2.TypeOf(obj)).IsEmpty(reflect2.PtrOf(obj)) -} - -type mapEncoder struct { - mapType *reflect2.UnsafeMapType - keyEncoder ValEncoder - elemEncoder ValEncoder -} - -func (encoder *mapEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteObjectStart() - iter := encoder.mapType.UnsafeIterate(ptr) - for i := 0; iter.HasNext(); i++ { - if i != 0 { - stream.WriteMore() - } - key, elem := iter.UnsafeNext() - encoder.keyEncoder.Encode(key, stream) - if stream.indention > 0 { - stream.writeTwoBytes(byte(':'), byte(' ')) - } else { - stream.writeByte(':') - } - encoder.elemEncoder.Encode(elem, stream) - } - stream.WriteObjectEnd() -} - -func (encoder *mapEncoder) IsEmpty(ptr unsafe.Pointer) bool { - iter := encoder.mapType.UnsafeIterate(ptr) - return !iter.HasNext() -} - -type sortKeysMapEncoder struct { - mapType *reflect2.UnsafeMapType - keyEncoder ValEncoder - elemEncoder ValEncoder -} - -func (encoder *sortKeysMapEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - if *(*unsafe.Pointer)(ptr) == nil { - stream.WriteNil() - return - } - stream.WriteObjectStart() - mapIter := encoder.mapType.UnsafeIterate(ptr) - subStream := stream.cfg.BorrowStream(nil) - subIter := stream.cfg.BorrowIterator(nil) - keyValues := encodedKeyValues{} - for mapIter.HasNext() { - subStream.buf = make([]byte, 0, 64) - key, elem := mapIter.UnsafeNext() - encoder.keyEncoder.Encode(key, subStream) - if subStream.Error != nil && subStream.Error != io.EOF && stream.Error == nil { - stream.Error = subStream.Error - } - encodedKey := subStream.Buffer() - subIter.ResetBytes(encodedKey) - decodedKey := subIter.ReadString() - if stream.indention > 0 { - subStream.writeTwoBytes(byte(':'), byte(' ')) - } else { - subStream.writeByte(':') - } - encoder.elemEncoder.Encode(elem, subStream) - keyValues = append(keyValues, encodedKV{ - key: decodedKey, - keyValue: subStream.Buffer(), - }) - } - sort.Sort(keyValues) - for i, keyValue := range keyValues { - if i != 0 { - stream.WriteMore() - } - stream.Write(keyValue.keyValue) - } - stream.WriteObjectEnd() - stream.cfg.ReturnStream(subStream) - stream.cfg.ReturnIterator(subIter) -} - -func (encoder *sortKeysMapEncoder) IsEmpty(ptr unsafe.Pointer) bool { - iter := encoder.mapType.UnsafeIterate(ptr) - return !iter.HasNext() -} - -type encodedKeyValues []encodedKV - -type encodedKV struct { - key string - keyValue []byte -} - -func (sv encodedKeyValues) Len() int { return len(sv) } -func (sv encodedKeyValues) Swap(i, j int) { sv[i], sv[j] = sv[j], sv[i] } -func (sv encodedKeyValues) Less(i, j int) bool { return sv[i].key < sv[j].key } diff --git a/vendor/github.com/json-iterator/go/reflect_marshaler.go b/vendor/github.com/json-iterator/go/reflect_marshaler.go deleted file mode 100644 index 58ac959ad..000000000 --- a/vendor/github.com/json-iterator/go/reflect_marshaler.go +++ /dev/null @@ -1,218 +0,0 @@ -package jsoniter - -import ( - "encoding" - "encoding/json" - "github.com/modern-go/reflect2" - "unsafe" -) - -var marshalerType = reflect2.TypeOfPtr((*json.Marshaler)(nil)).Elem() -var unmarshalerType = reflect2.TypeOfPtr((*json.Unmarshaler)(nil)).Elem() -var textMarshalerType = reflect2.TypeOfPtr((*encoding.TextMarshaler)(nil)).Elem() -var textUnmarshalerType = reflect2.TypeOfPtr((*encoding.TextUnmarshaler)(nil)).Elem() - -func createDecoderOfMarshaler(ctx *ctx, typ reflect2.Type) ValDecoder { - ptrType := reflect2.PtrTo(typ) - if ptrType.Implements(unmarshalerType) { - return &referenceDecoder{ - &unmarshalerDecoder{ptrType}, - } - } - if ptrType.Implements(textUnmarshalerType) { - return &referenceDecoder{ - &textUnmarshalerDecoder{ptrType}, - } - } - return nil -} - -func createEncoderOfMarshaler(ctx *ctx, typ reflect2.Type) ValEncoder { - if typ == marshalerType { - checkIsEmpty := createCheckIsEmpty(ctx, typ) - var encoder ValEncoder = &directMarshalerEncoder{ - checkIsEmpty: checkIsEmpty, - } - return encoder - } - if typ.Implements(marshalerType) { - checkIsEmpty := createCheckIsEmpty(ctx, typ) - var encoder ValEncoder = &marshalerEncoder{ - valType: typ, - checkIsEmpty: checkIsEmpty, - } - return encoder - } - ptrType := reflect2.PtrTo(typ) - if ctx.prefix != "" && ptrType.Implements(marshalerType) { - checkIsEmpty := createCheckIsEmpty(ctx, ptrType) - var encoder ValEncoder = &marshalerEncoder{ - valType: ptrType, - checkIsEmpty: checkIsEmpty, - } - return &referenceEncoder{encoder} - } - if typ == textMarshalerType { - checkIsEmpty := createCheckIsEmpty(ctx, typ) - var encoder ValEncoder = &directTextMarshalerEncoder{ - checkIsEmpty: checkIsEmpty, - stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")), - } - return encoder - } - if typ.Implements(textMarshalerType) { - checkIsEmpty := createCheckIsEmpty(ctx, typ) - var encoder ValEncoder = &textMarshalerEncoder{ - valType: typ, - stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")), - checkIsEmpty: checkIsEmpty, - } - return encoder - } - // if prefix is empty, the type is the root type - if ctx.prefix != "" && ptrType.Implements(textMarshalerType) { - checkIsEmpty := createCheckIsEmpty(ctx, ptrType) - var encoder ValEncoder = &textMarshalerEncoder{ - valType: ptrType, - stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")), - checkIsEmpty: checkIsEmpty, - } - return &referenceEncoder{encoder} - } - return nil -} - -type marshalerEncoder struct { - checkIsEmpty checkIsEmpty - valType reflect2.Type -} - -func (encoder *marshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - obj := encoder.valType.UnsafeIndirect(ptr) - if encoder.valType.IsNullable() && reflect2.IsNil(obj) { - stream.WriteNil() - return - } - marshaler := obj.(json.Marshaler) - bytes, err := marshaler.MarshalJSON() - if err != nil { - stream.Error = err - } else { - stream.Write(bytes) - } -} - -func (encoder *marshalerEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return encoder.checkIsEmpty.IsEmpty(ptr) -} - -type directMarshalerEncoder struct { - checkIsEmpty checkIsEmpty -} - -func (encoder *directMarshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - marshaler := *(*json.Marshaler)(ptr) - if marshaler == nil { - stream.WriteNil() - return - } - bytes, err := marshaler.MarshalJSON() - if err != nil { - stream.Error = err - } else { - stream.Write(bytes) - } -} - -func (encoder *directMarshalerEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return encoder.checkIsEmpty.IsEmpty(ptr) -} - -type textMarshalerEncoder struct { - valType reflect2.Type - stringEncoder ValEncoder - checkIsEmpty checkIsEmpty -} - -func (encoder *textMarshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - obj := encoder.valType.UnsafeIndirect(ptr) - if encoder.valType.IsNullable() && reflect2.IsNil(obj) { - stream.WriteNil() - return - } - marshaler := (obj).(encoding.TextMarshaler) - bytes, err := marshaler.MarshalText() - if err != nil { - stream.Error = err - } else { - str := string(bytes) - encoder.stringEncoder.Encode(unsafe.Pointer(&str), stream) - } -} - -func (encoder *textMarshalerEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return encoder.checkIsEmpty.IsEmpty(ptr) -} - -type directTextMarshalerEncoder struct { - stringEncoder ValEncoder - checkIsEmpty checkIsEmpty -} - -func (encoder *directTextMarshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - marshaler := *(*encoding.TextMarshaler)(ptr) - if marshaler == nil { - stream.WriteNil() - return - } - bytes, err := marshaler.MarshalText() - if err != nil { - stream.Error = err - } else { - str := string(bytes) - encoder.stringEncoder.Encode(unsafe.Pointer(&str), stream) - } -} - -func (encoder *directTextMarshalerEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return encoder.checkIsEmpty.IsEmpty(ptr) -} - -type unmarshalerDecoder struct { - valType reflect2.Type -} - -func (decoder *unmarshalerDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - valType := decoder.valType - obj := valType.UnsafeIndirect(ptr) - unmarshaler := obj.(json.Unmarshaler) - iter.nextToken() - iter.unreadByte() // skip spaces - bytes := iter.SkipAndReturnBytes() - err := unmarshaler.UnmarshalJSON(bytes) - if err != nil { - iter.ReportError("unmarshalerDecoder", err.Error()) - } -} - -type textUnmarshalerDecoder struct { - valType reflect2.Type -} - -func (decoder *textUnmarshalerDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - valType := decoder.valType - obj := valType.UnsafeIndirect(ptr) - if reflect2.IsNil(obj) { - ptrType := valType.(*reflect2.UnsafePtrType) - elemType := ptrType.Elem() - elem := elemType.UnsafeNew() - ptrType.UnsafeSet(ptr, unsafe.Pointer(&elem)) - obj = valType.UnsafeIndirect(ptr) - } - unmarshaler := (obj).(encoding.TextUnmarshaler) - str := iter.ReadString() - err := unmarshaler.UnmarshalText([]byte(str)) - if err != nil { - iter.ReportError("textUnmarshalerDecoder", err.Error()) - } -} diff --git a/vendor/github.com/json-iterator/go/reflect_native.go b/vendor/github.com/json-iterator/go/reflect_native.go deleted file mode 100644 index 9042eb0cb..000000000 --- a/vendor/github.com/json-iterator/go/reflect_native.go +++ /dev/null @@ -1,451 +0,0 @@ -package jsoniter - -import ( - "encoding/base64" - "reflect" - "strconv" - "unsafe" - - "github.com/modern-go/reflect2" -) - -const ptrSize = 32 << uintptr(^uintptr(0)>>63) - -func createEncoderOfNative(ctx *ctx, typ reflect2.Type) ValEncoder { - if typ.Kind() == reflect.Slice && typ.(reflect2.SliceType).Elem().Kind() == reflect.Uint8 { - sliceDecoder := decoderOfSlice(ctx, typ) - return &base64Codec{sliceDecoder: sliceDecoder} - } - typeName := typ.String() - kind := typ.Kind() - switch kind { - case reflect.String: - if typeName != "string" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*string)(nil)).Elem()) - } - return &stringCodec{} - case reflect.Int: - if typeName != "int" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*int)(nil)).Elem()) - } - if strconv.IntSize == 32 { - return &int32Codec{} - } - return &int64Codec{} - case reflect.Int8: - if typeName != "int8" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*int8)(nil)).Elem()) - } - return &int8Codec{} - case reflect.Int16: - if typeName != "int16" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*int16)(nil)).Elem()) - } - return &int16Codec{} - case reflect.Int32: - if typeName != "int32" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*int32)(nil)).Elem()) - } - return &int32Codec{} - case reflect.Int64: - if typeName != "int64" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*int64)(nil)).Elem()) - } - return &int64Codec{} - case reflect.Uint: - if typeName != "uint" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*uint)(nil)).Elem()) - } - if strconv.IntSize == 32 { - return &uint32Codec{} - } - return &uint64Codec{} - case reflect.Uint8: - if typeName != "uint8" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*uint8)(nil)).Elem()) - } - return &uint8Codec{} - case reflect.Uint16: - if typeName != "uint16" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*uint16)(nil)).Elem()) - } - return &uint16Codec{} - case reflect.Uint32: - if typeName != "uint32" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*uint32)(nil)).Elem()) - } - return &uint32Codec{} - case reflect.Uintptr: - if typeName != "uintptr" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*uintptr)(nil)).Elem()) - } - if ptrSize == 32 { - return &uint32Codec{} - } - return &uint64Codec{} - case reflect.Uint64: - if typeName != "uint64" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*uint64)(nil)).Elem()) - } - return &uint64Codec{} - case reflect.Float32: - if typeName != "float32" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*float32)(nil)).Elem()) - } - return &float32Codec{} - case reflect.Float64: - if typeName != "float64" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*float64)(nil)).Elem()) - } - return &float64Codec{} - case reflect.Bool: - if typeName != "bool" { - return encoderOfType(ctx, reflect2.TypeOfPtr((*bool)(nil)).Elem()) - } - return &boolCodec{} - } - return nil -} - -func createDecoderOfNative(ctx *ctx, typ reflect2.Type) ValDecoder { - if typ.Kind() == reflect.Slice && typ.(reflect2.SliceType).Elem().Kind() == reflect.Uint8 { - sliceDecoder := decoderOfSlice(ctx, typ) - return &base64Codec{sliceDecoder: sliceDecoder} - } - typeName := typ.String() - switch typ.Kind() { - case reflect.String: - if typeName != "string" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*string)(nil)).Elem()) - } - return &stringCodec{} - case reflect.Int: - if typeName != "int" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*int)(nil)).Elem()) - } - if strconv.IntSize == 32 { - return &int32Codec{} - } - return &int64Codec{} - case reflect.Int8: - if typeName != "int8" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*int8)(nil)).Elem()) - } - return &int8Codec{} - case reflect.Int16: - if typeName != "int16" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*int16)(nil)).Elem()) - } - return &int16Codec{} - case reflect.Int32: - if typeName != "int32" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*int32)(nil)).Elem()) - } - return &int32Codec{} - case reflect.Int64: - if typeName != "int64" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*int64)(nil)).Elem()) - } - return &int64Codec{} - case reflect.Uint: - if typeName != "uint" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*uint)(nil)).Elem()) - } - if strconv.IntSize == 32 { - return &uint32Codec{} - } - return &uint64Codec{} - case reflect.Uint8: - if typeName != "uint8" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*uint8)(nil)).Elem()) - } - return &uint8Codec{} - case reflect.Uint16: - if typeName != "uint16" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*uint16)(nil)).Elem()) - } - return &uint16Codec{} - case reflect.Uint32: - if typeName != "uint32" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*uint32)(nil)).Elem()) - } - return &uint32Codec{} - case reflect.Uintptr: - if typeName != "uintptr" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*uintptr)(nil)).Elem()) - } - if ptrSize == 32 { - return &uint32Codec{} - } - return &uint64Codec{} - case reflect.Uint64: - if typeName != "uint64" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*uint64)(nil)).Elem()) - } - return &uint64Codec{} - case reflect.Float32: - if typeName != "float32" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*float32)(nil)).Elem()) - } - return &float32Codec{} - case reflect.Float64: - if typeName != "float64" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*float64)(nil)).Elem()) - } - return &float64Codec{} - case reflect.Bool: - if typeName != "bool" { - return decoderOfType(ctx, reflect2.TypeOfPtr((*bool)(nil)).Elem()) - } - return &boolCodec{} - } - return nil -} - -type stringCodec struct { -} - -func (codec *stringCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { - *((*string)(ptr)) = iter.ReadString() -} - -func (codec *stringCodec) Encode(ptr unsafe.Pointer, stream *Stream) { - str := *((*string)(ptr)) - stream.WriteString(str) -} - -func (codec *stringCodec) IsEmpty(ptr unsafe.Pointer) bool { - return *((*string)(ptr)) == "" -} - -type int8Codec struct { -} - -func (codec *int8Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.ReadNil() { - *((*int8)(ptr)) = iter.ReadInt8() - } -} - -func (codec *int8Codec) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteInt8(*((*int8)(ptr))) -} - -func (codec *int8Codec) IsEmpty(ptr unsafe.Pointer) bool { - return *((*int8)(ptr)) == 0 -} - -type int16Codec struct { -} - -func (codec *int16Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.ReadNil() { - *((*int16)(ptr)) = iter.ReadInt16() - } -} - -func (codec *int16Codec) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteInt16(*((*int16)(ptr))) -} - -func (codec *int16Codec) IsEmpty(ptr unsafe.Pointer) bool { - return *((*int16)(ptr)) == 0 -} - -type int32Codec struct { -} - -func (codec *int32Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.ReadNil() { - *((*int32)(ptr)) = iter.ReadInt32() - } -} - -func (codec *int32Codec) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteInt32(*((*int32)(ptr))) -} - -func (codec *int32Codec) IsEmpty(ptr unsafe.Pointer) bool { - return *((*int32)(ptr)) == 0 -} - -type int64Codec struct { -} - -func (codec *int64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.ReadNil() { - *((*int64)(ptr)) = iter.ReadInt64() - } -} - -func (codec *int64Codec) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteInt64(*((*int64)(ptr))) -} - -func (codec *int64Codec) IsEmpty(ptr unsafe.Pointer) bool { - return *((*int64)(ptr)) == 0 -} - -type uint8Codec struct { -} - -func (codec *uint8Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.ReadNil() { - *((*uint8)(ptr)) = iter.ReadUint8() - } -} - -func (codec *uint8Codec) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteUint8(*((*uint8)(ptr))) -} - -func (codec *uint8Codec) IsEmpty(ptr unsafe.Pointer) bool { - return *((*uint8)(ptr)) == 0 -} - -type uint16Codec struct { -} - -func (codec *uint16Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.ReadNil() { - *((*uint16)(ptr)) = iter.ReadUint16() - } -} - -func (codec *uint16Codec) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteUint16(*((*uint16)(ptr))) -} - -func (codec *uint16Codec) IsEmpty(ptr unsafe.Pointer) bool { - return *((*uint16)(ptr)) == 0 -} - -type uint32Codec struct { -} - -func (codec *uint32Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.ReadNil() { - *((*uint32)(ptr)) = iter.ReadUint32() - } -} - -func (codec *uint32Codec) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteUint32(*((*uint32)(ptr))) -} - -func (codec *uint32Codec) IsEmpty(ptr unsafe.Pointer) bool { - return *((*uint32)(ptr)) == 0 -} - -type uint64Codec struct { -} - -func (codec *uint64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.ReadNil() { - *((*uint64)(ptr)) = iter.ReadUint64() - } -} - -func (codec *uint64Codec) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteUint64(*((*uint64)(ptr))) -} - -func (codec *uint64Codec) IsEmpty(ptr unsafe.Pointer) bool { - return *((*uint64)(ptr)) == 0 -} - -type float32Codec struct { -} - -func (codec *float32Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.ReadNil() { - *((*float32)(ptr)) = iter.ReadFloat32() - } -} - -func (codec *float32Codec) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteFloat32(*((*float32)(ptr))) -} - -func (codec *float32Codec) IsEmpty(ptr unsafe.Pointer) bool { - return *((*float32)(ptr)) == 0 -} - -type float64Codec struct { -} - -func (codec *float64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.ReadNil() { - *((*float64)(ptr)) = iter.ReadFloat64() - } -} - -func (codec *float64Codec) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteFloat64(*((*float64)(ptr))) -} - -func (codec *float64Codec) IsEmpty(ptr unsafe.Pointer) bool { - return *((*float64)(ptr)) == 0 -} - -type boolCodec struct { -} - -func (codec *boolCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.ReadNil() { - *((*bool)(ptr)) = iter.ReadBool() - } -} - -func (codec *boolCodec) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteBool(*((*bool)(ptr))) -} - -func (codec *boolCodec) IsEmpty(ptr unsafe.Pointer) bool { - return !(*((*bool)(ptr))) -} - -type base64Codec struct { - sliceType *reflect2.UnsafeSliceType - sliceDecoder ValDecoder -} - -func (codec *base64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) { - if iter.ReadNil() { - codec.sliceType.UnsafeSetNil(ptr) - return - } - switch iter.WhatIsNext() { - case StringValue: - src := iter.ReadString() - dst, err := base64.StdEncoding.DecodeString(src) - if err != nil { - iter.ReportError("decode base64", err.Error()) - } else { - codec.sliceType.UnsafeSet(ptr, unsafe.Pointer(&dst)) - } - case ArrayValue: - codec.sliceDecoder.Decode(ptr, iter) - default: - iter.ReportError("base64Codec", "invalid input") - } -} - -func (codec *base64Codec) Encode(ptr unsafe.Pointer, stream *Stream) { - src := *((*[]byte)(ptr)) - if len(src) == 0 { - stream.WriteNil() - return - } - encoding := base64.StdEncoding - stream.writeByte('"') - size := encoding.EncodedLen(len(src)) - buf := make([]byte, size) - encoding.Encode(buf, src) - stream.buf = append(stream.buf, buf...) - stream.writeByte('"') -} - -func (codec *base64Codec) IsEmpty(ptr unsafe.Pointer) bool { - return len(*((*[]byte)(ptr))) == 0 -} diff --git a/vendor/github.com/json-iterator/go/reflect_optional.go b/vendor/github.com/json-iterator/go/reflect_optional.go deleted file mode 100644 index 43ec71d6d..000000000 --- a/vendor/github.com/json-iterator/go/reflect_optional.go +++ /dev/null @@ -1,133 +0,0 @@ -package jsoniter - -import ( - "github.com/modern-go/reflect2" - "reflect" - "unsafe" -) - -func decoderOfOptional(ctx *ctx, typ reflect2.Type) ValDecoder { - ptrType := typ.(*reflect2.UnsafePtrType) - elemType := ptrType.Elem() - decoder := decoderOfType(ctx, elemType) - if ctx.prefix == "" && elemType.Kind() == reflect.Ptr { - return &dereferenceDecoder{elemType, decoder} - } - return &OptionalDecoder{elemType, decoder} -} - -func encoderOfOptional(ctx *ctx, typ reflect2.Type) ValEncoder { - ptrType := typ.(*reflect2.UnsafePtrType) - elemType := ptrType.Elem() - elemEncoder := encoderOfType(ctx, elemType) - encoder := &OptionalEncoder{elemEncoder} - return encoder -} - -type OptionalDecoder struct { - ValueType reflect2.Type - ValueDecoder ValDecoder -} - -func (decoder *OptionalDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if iter.ReadNil() { - *((*unsafe.Pointer)(ptr)) = nil - } else { - if *((*unsafe.Pointer)(ptr)) == nil { - //pointer to null, we have to allocate memory to hold the value - newPtr := decoder.ValueType.UnsafeNew() - decoder.ValueDecoder.Decode(newPtr, iter) - *((*unsafe.Pointer)(ptr)) = newPtr - } else { - //reuse existing instance - decoder.ValueDecoder.Decode(*((*unsafe.Pointer)(ptr)), iter) - } - } -} - -type dereferenceDecoder struct { - // only to deference a pointer - valueType reflect2.Type - valueDecoder ValDecoder -} - -func (decoder *dereferenceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if *((*unsafe.Pointer)(ptr)) == nil { - //pointer to null, we have to allocate memory to hold the value - newPtr := decoder.valueType.UnsafeNew() - decoder.valueDecoder.Decode(newPtr, iter) - *((*unsafe.Pointer)(ptr)) = newPtr - } else { - //reuse existing instance - decoder.valueDecoder.Decode(*((*unsafe.Pointer)(ptr)), iter) - } -} - -type OptionalEncoder struct { - ValueEncoder ValEncoder -} - -func (encoder *OptionalEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - if *((*unsafe.Pointer)(ptr)) == nil { - stream.WriteNil() - } else { - encoder.ValueEncoder.Encode(*((*unsafe.Pointer)(ptr)), stream) - } -} - -func (encoder *OptionalEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return *((*unsafe.Pointer)(ptr)) == nil -} - -type dereferenceEncoder struct { - ValueEncoder ValEncoder -} - -func (encoder *dereferenceEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - if *((*unsafe.Pointer)(ptr)) == nil { - stream.WriteNil() - } else { - encoder.ValueEncoder.Encode(*((*unsafe.Pointer)(ptr)), stream) - } -} - -func (encoder *dereferenceEncoder) IsEmpty(ptr unsafe.Pointer) bool { - dePtr := *((*unsafe.Pointer)(ptr)) - if dePtr == nil { - return true - } - return encoder.ValueEncoder.IsEmpty(dePtr) -} - -func (encoder *dereferenceEncoder) IsEmbeddedPtrNil(ptr unsafe.Pointer) bool { - deReferenced := *((*unsafe.Pointer)(ptr)) - if deReferenced == nil { - return true - } - isEmbeddedPtrNil, converted := encoder.ValueEncoder.(IsEmbeddedPtrNil) - if !converted { - return false - } - fieldPtr := unsafe.Pointer(deReferenced) - return isEmbeddedPtrNil.IsEmbeddedPtrNil(fieldPtr) -} - -type referenceEncoder struct { - encoder ValEncoder -} - -func (encoder *referenceEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - encoder.encoder.Encode(unsafe.Pointer(&ptr), stream) -} - -func (encoder *referenceEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return encoder.encoder.IsEmpty(unsafe.Pointer(&ptr)) -} - -type referenceDecoder struct { - decoder ValDecoder -} - -func (decoder *referenceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - decoder.decoder.Decode(unsafe.Pointer(&ptr), iter) -} diff --git a/vendor/github.com/json-iterator/go/reflect_slice.go b/vendor/github.com/json-iterator/go/reflect_slice.go deleted file mode 100644 index 9441d79df..000000000 --- a/vendor/github.com/json-iterator/go/reflect_slice.go +++ /dev/null @@ -1,99 +0,0 @@ -package jsoniter - -import ( - "fmt" - "github.com/modern-go/reflect2" - "io" - "unsafe" -) - -func decoderOfSlice(ctx *ctx, typ reflect2.Type) ValDecoder { - sliceType := typ.(*reflect2.UnsafeSliceType) - decoder := decoderOfType(ctx.append("[sliceElem]"), sliceType.Elem()) - return &sliceDecoder{sliceType, decoder} -} - -func encoderOfSlice(ctx *ctx, typ reflect2.Type) ValEncoder { - sliceType := typ.(*reflect2.UnsafeSliceType) - encoder := encoderOfType(ctx.append("[sliceElem]"), sliceType.Elem()) - return &sliceEncoder{sliceType, encoder} -} - -type sliceEncoder struct { - sliceType *reflect2.UnsafeSliceType - elemEncoder ValEncoder -} - -func (encoder *sliceEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - if encoder.sliceType.UnsafeIsNil(ptr) { - stream.WriteNil() - return - } - length := encoder.sliceType.UnsafeLengthOf(ptr) - if length == 0 { - stream.WriteEmptyArray() - return - } - stream.WriteArrayStart() - encoder.elemEncoder.Encode(encoder.sliceType.UnsafeGetIndex(ptr, 0), stream) - for i := 1; i < length; i++ { - stream.WriteMore() - elemPtr := encoder.sliceType.UnsafeGetIndex(ptr, i) - encoder.elemEncoder.Encode(elemPtr, stream) - } - stream.WriteArrayEnd() - if stream.Error != nil && stream.Error != io.EOF { - stream.Error = fmt.Errorf("%v: %s", encoder.sliceType, stream.Error.Error()) - } -} - -func (encoder *sliceEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return encoder.sliceType.UnsafeLengthOf(ptr) == 0 -} - -type sliceDecoder struct { - sliceType *reflect2.UnsafeSliceType - elemDecoder ValDecoder -} - -func (decoder *sliceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - decoder.doDecode(ptr, iter) - if iter.Error != nil && iter.Error != io.EOF { - iter.Error = fmt.Errorf("%v: %s", decoder.sliceType, iter.Error.Error()) - } -} - -func (decoder *sliceDecoder) doDecode(ptr unsafe.Pointer, iter *Iterator) { - c := iter.nextToken() - sliceType := decoder.sliceType - if c == 'n' { - iter.skipThreeBytes('u', 'l', 'l') - sliceType.UnsafeSetNil(ptr) - return - } - if c != '[' { - iter.ReportError("decode slice", "expect [ or n, but found "+string([]byte{c})) - return - } - c = iter.nextToken() - if c == ']' { - sliceType.UnsafeSet(ptr, sliceType.UnsafeMakeSlice(0, 0)) - return - } - iter.unreadByte() - sliceType.UnsafeGrow(ptr, 1) - elemPtr := sliceType.UnsafeGetIndex(ptr, 0) - decoder.elemDecoder.Decode(elemPtr, iter) - length := 1 - for c = iter.nextToken(); c == ','; c = iter.nextToken() { - idx := length - length += 1 - sliceType.UnsafeGrow(ptr, length) - elemPtr = sliceType.UnsafeGetIndex(ptr, idx) - decoder.elemDecoder.Decode(elemPtr, iter) - } - if c != ']' { - iter.ReportError("decode slice", "expect ], but found "+string([]byte{c})) - return - } -} diff --git a/vendor/github.com/json-iterator/go/reflect_struct_decoder.go b/vendor/github.com/json-iterator/go/reflect_struct_decoder.go deleted file mode 100644 index fd7664786..000000000 --- a/vendor/github.com/json-iterator/go/reflect_struct_decoder.go +++ /dev/null @@ -1,1042 +0,0 @@ -package jsoniter - -import ( - "fmt" - "github.com/modern-go/reflect2" - "io" - "strings" - "unsafe" -) - -func decoderOfStruct(ctx *ctx, typ reflect2.Type) ValDecoder { - bindings := map[string]*Binding{} - structDescriptor := describeStruct(ctx, typ) - for _, binding := range structDescriptor.Fields { - for _, fromName := range binding.FromNames { - old := bindings[fromName] - if old == nil { - bindings[fromName] = binding - continue - } - ignoreOld, ignoreNew := resolveConflictBinding(ctx.frozenConfig, old, binding) - if ignoreOld { - delete(bindings, fromName) - } - if !ignoreNew { - bindings[fromName] = binding - } - } - } - fields := map[string]*structFieldDecoder{} - for k, binding := range bindings { - fields[k] = binding.Decoder.(*structFieldDecoder) - } - for k, binding := range bindings { - if _, found := fields[strings.ToLower(k)]; !found { - fields[strings.ToLower(k)] = binding.Decoder.(*structFieldDecoder) - } - } - return createStructDecoder(ctx, typ, fields) -} - -func createStructDecoder(ctx *ctx, typ reflect2.Type, fields map[string]*structFieldDecoder) ValDecoder { - if ctx.disallowUnknownFields { - return &generalStructDecoder{typ: typ, fields: fields, disallowUnknownFields: true} - } - knownHash := map[int64]struct{}{ - 0: {}, - } - switch len(fields) { - case 0: - return &skipObjectDecoder{typ} - case 1: - for fieldName, fieldDecoder := range fields { - fieldHash := calcHash(fieldName) - _, known := knownHash[fieldHash] - if known { - return &generalStructDecoder{typ, fields, false} - } - knownHash[fieldHash] = struct{}{} - return &oneFieldStructDecoder{typ, fieldHash, fieldDecoder} - } - case 2: - var fieldHash1 int64 - var fieldHash2 int64 - var fieldDecoder1 *structFieldDecoder - var fieldDecoder2 *structFieldDecoder - for fieldName, fieldDecoder := range fields { - fieldHash := calcHash(fieldName) - _, known := knownHash[fieldHash] - if known { - return &generalStructDecoder{typ, fields, false} - } - knownHash[fieldHash] = struct{}{} - if fieldHash1 == 0 { - fieldHash1 = fieldHash - fieldDecoder1 = fieldDecoder - } else { - fieldHash2 = fieldHash - fieldDecoder2 = fieldDecoder - } - } - return &twoFieldsStructDecoder{typ, fieldHash1, fieldDecoder1, fieldHash2, fieldDecoder2} - case 3: - var fieldName1 int64 - var fieldName2 int64 - var fieldName3 int64 - var fieldDecoder1 *structFieldDecoder - var fieldDecoder2 *structFieldDecoder - var fieldDecoder3 *structFieldDecoder - for fieldName, fieldDecoder := range fields { - fieldHash := calcHash(fieldName) - _, known := knownHash[fieldHash] - if known { - return &generalStructDecoder{typ, fields, false} - } - knownHash[fieldHash] = struct{}{} - if fieldName1 == 0 { - fieldName1 = fieldHash - fieldDecoder1 = fieldDecoder - } else if fieldName2 == 0 { - fieldName2 = fieldHash - fieldDecoder2 = fieldDecoder - } else { - fieldName3 = fieldHash - fieldDecoder3 = fieldDecoder - } - } - return &threeFieldsStructDecoder{typ, - fieldName1, fieldDecoder1, - fieldName2, fieldDecoder2, - fieldName3, fieldDecoder3} - case 4: - var fieldName1 int64 - var fieldName2 int64 - var fieldName3 int64 - var fieldName4 int64 - var fieldDecoder1 *structFieldDecoder - var fieldDecoder2 *structFieldDecoder - var fieldDecoder3 *structFieldDecoder - var fieldDecoder4 *structFieldDecoder - for fieldName, fieldDecoder := range fields { - fieldHash := calcHash(fieldName) - _, known := knownHash[fieldHash] - if known { - return &generalStructDecoder{typ, fields, false} - } - knownHash[fieldHash] = struct{}{} - if fieldName1 == 0 { - fieldName1 = fieldHash - fieldDecoder1 = fieldDecoder - } else if fieldName2 == 0 { - fieldName2 = fieldHash - fieldDecoder2 = fieldDecoder - } else if fieldName3 == 0 { - fieldName3 = fieldHash - fieldDecoder3 = fieldDecoder - } else { - fieldName4 = fieldHash - fieldDecoder4 = fieldDecoder - } - } - return &fourFieldsStructDecoder{typ, - fieldName1, fieldDecoder1, - fieldName2, fieldDecoder2, - fieldName3, fieldDecoder3, - fieldName4, fieldDecoder4} - case 5: - var fieldName1 int64 - var fieldName2 int64 - var fieldName3 int64 - var fieldName4 int64 - var fieldName5 int64 - var fieldDecoder1 *structFieldDecoder - var fieldDecoder2 *structFieldDecoder - var fieldDecoder3 *structFieldDecoder - var fieldDecoder4 *structFieldDecoder - var fieldDecoder5 *structFieldDecoder - for fieldName, fieldDecoder := range fields { - fieldHash := calcHash(fieldName) - _, known := knownHash[fieldHash] - if known { - return &generalStructDecoder{typ, fields, false} - } - knownHash[fieldHash] = struct{}{} - if fieldName1 == 0 { - fieldName1 = fieldHash - fieldDecoder1 = fieldDecoder - } else if fieldName2 == 0 { - fieldName2 = fieldHash - fieldDecoder2 = fieldDecoder - } else if fieldName3 == 0 { - fieldName3 = fieldHash - fieldDecoder3 = fieldDecoder - } else if fieldName4 == 0 { - fieldName4 = fieldHash - fieldDecoder4 = fieldDecoder - } else { - fieldName5 = fieldHash - fieldDecoder5 = fieldDecoder - } - } - return &fiveFieldsStructDecoder{typ, - fieldName1, fieldDecoder1, - fieldName2, fieldDecoder2, - fieldName3, fieldDecoder3, - fieldName4, fieldDecoder4, - fieldName5, fieldDecoder5} - case 6: - var fieldName1 int64 - var fieldName2 int64 - var fieldName3 int64 - var fieldName4 int64 - var fieldName5 int64 - var fieldName6 int64 - var fieldDecoder1 *structFieldDecoder - var fieldDecoder2 *structFieldDecoder - var fieldDecoder3 *structFieldDecoder - var fieldDecoder4 *structFieldDecoder - var fieldDecoder5 *structFieldDecoder - var fieldDecoder6 *structFieldDecoder - for fieldName, fieldDecoder := range fields { - fieldHash := calcHash(fieldName) - _, known := knownHash[fieldHash] - if known { - return &generalStructDecoder{typ, fields, false} - } - knownHash[fieldHash] = struct{}{} - if fieldName1 == 0 { - fieldName1 = fieldHash - fieldDecoder1 = fieldDecoder - } else if fieldName2 == 0 { - fieldName2 = fieldHash - fieldDecoder2 = fieldDecoder - } else if fieldName3 == 0 { - fieldName3 = fieldHash - fieldDecoder3 = fieldDecoder - } else if fieldName4 == 0 { - fieldName4 = fieldHash - fieldDecoder4 = fieldDecoder - } else if fieldName5 == 0 { - fieldName5 = fieldHash - fieldDecoder5 = fieldDecoder - } else { - fieldName6 = fieldHash - fieldDecoder6 = fieldDecoder - } - } - return &sixFieldsStructDecoder{typ, - fieldName1, fieldDecoder1, - fieldName2, fieldDecoder2, - fieldName3, fieldDecoder3, - fieldName4, fieldDecoder4, - fieldName5, fieldDecoder5, - fieldName6, fieldDecoder6} - case 7: - var fieldName1 int64 - var fieldName2 int64 - var fieldName3 int64 - var fieldName4 int64 - var fieldName5 int64 - var fieldName6 int64 - var fieldName7 int64 - var fieldDecoder1 *structFieldDecoder - var fieldDecoder2 *structFieldDecoder - var fieldDecoder3 *structFieldDecoder - var fieldDecoder4 *structFieldDecoder - var fieldDecoder5 *structFieldDecoder - var fieldDecoder6 *structFieldDecoder - var fieldDecoder7 *structFieldDecoder - for fieldName, fieldDecoder := range fields { - fieldHash := calcHash(fieldName) - _, known := knownHash[fieldHash] - if known { - return &generalStructDecoder{typ, fields, false} - } - knownHash[fieldHash] = struct{}{} - if fieldName1 == 0 { - fieldName1 = fieldHash - fieldDecoder1 = fieldDecoder - } else if fieldName2 == 0 { - fieldName2 = fieldHash - fieldDecoder2 = fieldDecoder - } else if fieldName3 == 0 { - fieldName3 = fieldHash - fieldDecoder3 = fieldDecoder - } else if fieldName4 == 0 { - fieldName4 = fieldHash - fieldDecoder4 = fieldDecoder - } else if fieldName5 == 0 { - fieldName5 = fieldHash - fieldDecoder5 = fieldDecoder - } else if fieldName6 == 0 { - fieldName6 = fieldHash - fieldDecoder6 = fieldDecoder - } else { - fieldName7 = fieldHash - fieldDecoder7 = fieldDecoder - } - } - return &sevenFieldsStructDecoder{typ, - fieldName1, fieldDecoder1, - fieldName2, fieldDecoder2, - fieldName3, fieldDecoder3, - fieldName4, fieldDecoder4, - fieldName5, fieldDecoder5, - fieldName6, fieldDecoder6, - fieldName7, fieldDecoder7} - case 8: - var fieldName1 int64 - var fieldName2 int64 - var fieldName3 int64 - var fieldName4 int64 - var fieldName5 int64 - var fieldName6 int64 - var fieldName7 int64 - var fieldName8 int64 - var fieldDecoder1 *structFieldDecoder - var fieldDecoder2 *structFieldDecoder - var fieldDecoder3 *structFieldDecoder - var fieldDecoder4 *structFieldDecoder - var fieldDecoder5 *structFieldDecoder - var fieldDecoder6 *structFieldDecoder - var fieldDecoder7 *structFieldDecoder - var fieldDecoder8 *structFieldDecoder - for fieldName, fieldDecoder := range fields { - fieldHash := calcHash(fieldName) - _, known := knownHash[fieldHash] - if known { - return &generalStructDecoder{typ, fields, false} - } - knownHash[fieldHash] = struct{}{} - if fieldName1 == 0 { - fieldName1 = fieldHash - fieldDecoder1 = fieldDecoder - } else if fieldName2 == 0 { - fieldName2 = fieldHash - fieldDecoder2 = fieldDecoder - } else if fieldName3 == 0 { - fieldName3 = fieldHash - fieldDecoder3 = fieldDecoder - } else if fieldName4 == 0 { - fieldName4 = fieldHash - fieldDecoder4 = fieldDecoder - } else if fieldName5 == 0 { - fieldName5 = fieldHash - fieldDecoder5 = fieldDecoder - } else if fieldName6 == 0 { - fieldName6 = fieldHash - fieldDecoder6 = fieldDecoder - } else if fieldName7 == 0 { - fieldName7 = fieldHash - fieldDecoder7 = fieldDecoder - } else { - fieldName8 = fieldHash - fieldDecoder8 = fieldDecoder - } - } - return &eightFieldsStructDecoder{typ, - fieldName1, fieldDecoder1, - fieldName2, fieldDecoder2, - fieldName3, fieldDecoder3, - fieldName4, fieldDecoder4, - fieldName5, fieldDecoder5, - fieldName6, fieldDecoder6, - fieldName7, fieldDecoder7, - fieldName8, fieldDecoder8} - case 9: - var fieldName1 int64 - var fieldName2 int64 - var fieldName3 int64 - var fieldName4 int64 - var fieldName5 int64 - var fieldName6 int64 - var fieldName7 int64 - var fieldName8 int64 - var fieldName9 int64 - var fieldDecoder1 *structFieldDecoder - var fieldDecoder2 *structFieldDecoder - var fieldDecoder3 *structFieldDecoder - var fieldDecoder4 *structFieldDecoder - var fieldDecoder5 *structFieldDecoder - var fieldDecoder6 *structFieldDecoder - var fieldDecoder7 *structFieldDecoder - var fieldDecoder8 *structFieldDecoder - var fieldDecoder9 *structFieldDecoder - for fieldName, fieldDecoder := range fields { - fieldHash := calcHash(fieldName) - _, known := knownHash[fieldHash] - if known { - return &generalStructDecoder{typ, fields, false} - } - knownHash[fieldHash] = struct{}{} - if fieldName1 == 0 { - fieldName1 = fieldHash - fieldDecoder1 = fieldDecoder - } else if fieldName2 == 0 { - fieldName2 = fieldHash - fieldDecoder2 = fieldDecoder - } else if fieldName3 == 0 { - fieldName3 = fieldHash - fieldDecoder3 = fieldDecoder - } else if fieldName4 == 0 { - fieldName4 = fieldHash - fieldDecoder4 = fieldDecoder - } else if fieldName5 == 0 { - fieldName5 = fieldHash - fieldDecoder5 = fieldDecoder - } else if fieldName6 == 0 { - fieldName6 = fieldHash - fieldDecoder6 = fieldDecoder - } else if fieldName7 == 0 { - fieldName7 = fieldHash - fieldDecoder7 = fieldDecoder - } else if fieldName8 == 0 { - fieldName8 = fieldHash - fieldDecoder8 = fieldDecoder - } else { - fieldName9 = fieldHash - fieldDecoder9 = fieldDecoder - } - } - return &nineFieldsStructDecoder{typ, - fieldName1, fieldDecoder1, - fieldName2, fieldDecoder2, - fieldName3, fieldDecoder3, - fieldName4, fieldDecoder4, - fieldName5, fieldDecoder5, - fieldName6, fieldDecoder6, - fieldName7, fieldDecoder7, - fieldName8, fieldDecoder8, - fieldName9, fieldDecoder9} - case 10: - var fieldName1 int64 - var fieldName2 int64 - var fieldName3 int64 - var fieldName4 int64 - var fieldName5 int64 - var fieldName6 int64 - var fieldName7 int64 - var fieldName8 int64 - var fieldName9 int64 - var fieldName10 int64 - var fieldDecoder1 *structFieldDecoder - var fieldDecoder2 *structFieldDecoder - var fieldDecoder3 *structFieldDecoder - var fieldDecoder4 *structFieldDecoder - var fieldDecoder5 *structFieldDecoder - var fieldDecoder6 *structFieldDecoder - var fieldDecoder7 *structFieldDecoder - var fieldDecoder8 *structFieldDecoder - var fieldDecoder9 *structFieldDecoder - var fieldDecoder10 *structFieldDecoder - for fieldName, fieldDecoder := range fields { - fieldHash := calcHash(fieldName) - _, known := knownHash[fieldHash] - if known { - return &generalStructDecoder{typ, fields, false} - } - knownHash[fieldHash] = struct{}{} - if fieldName1 == 0 { - fieldName1 = fieldHash - fieldDecoder1 = fieldDecoder - } else if fieldName2 == 0 { - fieldName2 = fieldHash - fieldDecoder2 = fieldDecoder - } else if fieldName3 == 0 { - fieldName3 = fieldHash - fieldDecoder3 = fieldDecoder - } else if fieldName4 == 0 { - fieldName4 = fieldHash - fieldDecoder4 = fieldDecoder - } else if fieldName5 == 0 { - fieldName5 = fieldHash - fieldDecoder5 = fieldDecoder - } else if fieldName6 == 0 { - fieldName6 = fieldHash - fieldDecoder6 = fieldDecoder - } else if fieldName7 == 0 { - fieldName7 = fieldHash - fieldDecoder7 = fieldDecoder - } else if fieldName8 == 0 { - fieldName8 = fieldHash - fieldDecoder8 = fieldDecoder - } else if fieldName9 == 0 { - fieldName9 = fieldHash - fieldDecoder9 = fieldDecoder - } else { - fieldName10 = fieldHash - fieldDecoder10 = fieldDecoder - } - } - return &tenFieldsStructDecoder{typ, - fieldName1, fieldDecoder1, - fieldName2, fieldDecoder2, - fieldName3, fieldDecoder3, - fieldName4, fieldDecoder4, - fieldName5, fieldDecoder5, - fieldName6, fieldDecoder6, - fieldName7, fieldDecoder7, - fieldName8, fieldDecoder8, - fieldName9, fieldDecoder9, - fieldName10, fieldDecoder10} - } - return &generalStructDecoder{typ, fields, false} -} - -type generalStructDecoder struct { - typ reflect2.Type - fields map[string]*structFieldDecoder - disallowUnknownFields bool -} - -func (decoder *generalStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.readObjectStart() { - return - } - var c byte - for c = ','; c == ','; c = iter.nextToken() { - decoder.decodeOneField(ptr, iter) - } - if iter.Error != nil && iter.Error != io.EOF { - iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) - } - if c != '}' { - iter.ReportError("struct Decode", `expect }, but found `+string([]byte{c})) - } -} - -func (decoder *generalStructDecoder) decodeOneField(ptr unsafe.Pointer, iter *Iterator) { - var field string - var fieldDecoder *structFieldDecoder - if iter.cfg.objectFieldMustBeSimpleString { - fieldBytes := iter.ReadStringAsSlice() - field = *(*string)(unsafe.Pointer(&fieldBytes)) - fieldDecoder = decoder.fields[field] - if fieldDecoder == nil { - fieldDecoder = decoder.fields[strings.ToLower(field)] - } - } else { - field = iter.ReadString() - fieldDecoder = decoder.fields[field] - if fieldDecoder == nil { - fieldDecoder = decoder.fields[strings.ToLower(field)] - } - } - if fieldDecoder == nil { - msg := "found unknown field: " + field - if decoder.disallowUnknownFields { - iter.ReportError("ReadObject", msg) - } - c := iter.nextToken() - if c != ':' { - iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c})) - } - iter.Skip() - return - } - c := iter.nextToken() - if c != ':' { - iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c})) - } - fieldDecoder.Decode(ptr, iter) -} - -type skipObjectDecoder struct { - typ reflect2.Type -} - -func (decoder *skipObjectDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - valueType := iter.WhatIsNext() - if valueType != ObjectValue && valueType != NilValue { - iter.ReportError("skipObjectDecoder", "expect object or null") - return - } - iter.Skip() -} - -type oneFieldStructDecoder struct { - typ reflect2.Type - fieldHash int64 - fieldDecoder *structFieldDecoder -} - -func (decoder *oneFieldStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.readObjectStart() { - return - } - for { - if iter.readFieldHash() == decoder.fieldHash { - decoder.fieldDecoder.Decode(ptr, iter) - } else { - iter.Skip() - } - if iter.isObjectEnd() { - break - } - } - if iter.Error != nil && iter.Error != io.EOF { - iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) - } -} - -type twoFieldsStructDecoder struct { - typ reflect2.Type - fieldHash1 int64 - fieldDecoder1 *structFieldDecoder - fieldHash2 int64 - fieldDecoder2 *structFieldDecoder -} - -func (decoder *twoFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.readObjectStart() { - return - } - for { - switch iter.readFieldHash() { - case decoder.fieldHash1: - decoder.fieldDecoder1.Decode(ptr, iter) - case decoder.fieldHash2: - decoder.fieldDecoder2.Decode(ptr, iter) - default: - iter.Skip() - } - if iter.isObjectEnd() { - break - } - } - if iter.Error != nil && iter.Error != io.EOF { - iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) - } -} - -type threeFieldsStructDecoder struct { - typ reflect2.Type - fieldHash1 int64 - fieldDecoder1 *structFieldDecoder - fieldHash2 int64 - fieldDecoder2 *structFieldDecoder - fieldHash3 int64 - fieldDecoder3 *structFieldDecoder -} - -func (decoder *threeFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.readObjectStart() { - return - } - for { - switch iter.readFieldHash() { - case decoder.fieldHash1: - decoder.fieldDecoder1.Decode(ptr, iter) - case decoder.fieldHash2: - decoder.fieldDecoder2.Decode(ptr, iter) - case decoder.fieldHash3: - decoder.fieldDecoder3.Decode(ptr, iter) - default: - iter.Skip() - } - if iter.isObjectEnd() { - break - } - } - if iter.Error != nil && iter.Error != io.EOF { - iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) - } -} - -type fourFieldsStructDecoder struct { - typ reflect2.Type - fieldHash1 int64 - fieldDecoder1 *structFieldDecoder - fieldHash2 int64 - fieldDecoder2 *structFieldDecoder - fieldHash3 int64 - fieldDecoder3 *structFieldDecoder - fieldHash4 int64 - fieldDecoder4 *structFieldDecoder -} - -func (decoder *fourFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.readObjectStart() { - return - } - for { - switch iter.readFieldHash() { - case decoder.fieldHash1: - decoder.fieldDecoder1.Decode(ptr, iter) - case decoder.fieldHash2: - decoder.fieldDecoder2.Decode(ptr, iter) - case decoder.fieldHash3: - decoder.fieldDecoder3.Decode(ptr, iter) - case decoder.fieldHash4: - decoder.fieldDecoder4.Decode(ptr, iter) - default: - iter.Skip() - } - if iter.isObjectEnd() { - break - } - } - if iter.Error != nil && iter.Error != io.EOF { - iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) - } -} - -type fiveFieldsStructDecoder struct { - typ reflect2.Type - fieldHash1 int64 - fieldDecoder1 *structFieldDecoder - fieldHash2 int64 - fieldDecoder2 *structFieldDecoder - fieldHash3 int64 - fieldDecoder3 *structFieldDecoder - fieldHash4 int64 - fieldDecoder4 *structFieldDecoder - fieldHash5 int64 - fieldDecoder5 *structFieldDecoder -} - -func (decoder *fiveFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.readObjectStart() { - return - } - for { - switch iter.readFieldHash() { - case decoder.fieldHash1: - decoder.fieldDecoder1.Decode(ptr, iter) - case decoder.fieldHash2: - decoder.fieldDecoder2.Decode(ptr, iter) - case decoder.fieldHash3: - decoder.fieldDecoder3.Decode(ptr, iter) - case decoder.fieldHash4: - decoder.fieldDecoder4.Decode(ptr, iter) - case decoder.fieldHash5: - decoder.fieldDecoder5.Decode(ptr, iter) - default: - iter.Skip() - } - if iter.isObjectEnd() { - break - } - } - if iter.Error != nil && iter.Error != io.EOF { - iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) - } -} - -type sixFieldsStructDecoder struct { - typ reflect2.Type - fieldHash1 int64 - fieldDecoder1 *structFieldDecoder - fieldHash2 int64 - fieldDecoder2 *structFieldDecoder - fieldHash3 int64 - fieldDecoder3 *structFieldDecoder - fieldHash4 int64 - fieldDecoder4 *structFieldDecoder - fieldHash5 int64 - fieldDecoder5 *structFieldDecoder - fieldHash6 int64 - fieldDecoder6 *structFieldDecoder -} - -func (decoder *sixFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.readObjectStart() { - return - } - for { - switch iter.readFieldHash() { - case decoder.fieldHash1: - decoder.fieldDecoder1.Decode(ptr, iter) - case decoder.fieldHash2: - decoder.fieldDecoder2.Decode(ptr, iter) - case decoder.fieldHash3: - decoder.fieldDecoder3.Decode(ptr, iter) - case decoder.fieldHash4: - decoder.fieldDecoder4.Decode(ptr, iter) - case decoder.fieldHash5: - decoder.fieldDecoder5.Decode(ptr, iter) - case decoder.fieldHash6: - decoder.fieldDecoder6.Decode(ptr, iter) - default: - iter.Skip() - } - if iter.isObjectEnd() { - break - } - } - if iter.Error != nil && iter.Error != io.EOF { - iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) - } -} - -type sevenFieldsStructDecoder struct { - typ reflect2.Type - fieldHash1 int64 - fieldDecoder1 *structFieldDecoder - fieldHash2 int64 - fieldDecoder2 *structFieldDecoder - fieldHash3 int64 - fieldDecoder3 *structFieldDecoder - fieldHash4 int64 - fieldDecoder4 *structFieldDecoder - fieldHash5 int64 - fieldDecoder5 *structFieldDecoder - fieldHash6 int64 - fieldDecoder6 *structFieldDecoder - fieldHash7 int64 - fieldDecoder7 *structFieldDecoder -} - -func (decoder *sevenFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.readObjectStart() { - return - } - for { - switch iter.readFieldHash() { - case decoder.fieldHash1: - decoder.fieldDecoder1.Decode(ptr, iter) - case decoder.fieldHash2: - decoder.fieldDecoder2.Decode(ptr, iter) - case decoder.fieldHash3: - decoder.fieldDecoder3.Decode(ptr, iter) - case decoder.fieldHash4: - decoder.fieldDecoder4.Decode(ptr, iter) - case decoder.fieldHash5: - decoder.fieldDecoder5.Decode(ptr, iter) - case decoder.fieldHash6: - decoder.fieldDecoder6.Decode(ptr, iter) - case decoder.fieldHash7: - decoder.fieldDecoder7.Decode(ptr, iter) - default: - iter.Skip() - } - if iter.isObjectEnd() { - break - } - } - if iter.Error != nil && iter.Error != io.EOF { - iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) - } -} - -type eightFieldsStructDecoder struct { - typ reflect2.Type - fieldHash1 int64 - fieldDecoder1 *structFieldDecoder - fieldHash2 int64 - fieldDecoder2 *structFieldDecoder - fieldHash3 int64 - fieldDecoder3 *structFieldDecoder - fieldHash4 int64 - fieldDecoder4 *structFieldDecoder - fieldHash5 int64 - fieldDecoder5 *structFieldDecoder - fieldHash6 int64 - fieldDecoder6 *structFieldDecoder - fieldHash7 int64 - fieldDecoder7 *structFieldDecoder - fieldHash8 int64 - fieldDecoder8 *structFieldDecoder -} - -func (decoder *eightFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.readObjectStart() { - return - } - for { - switch iter.readFieldHash() { - case decoder.fieldHash1: - decoder.fieldDecoder1.Decode(ptr, iter) - case decoder.fieldHash2: - decoder.fieldDecoder2.Decode(ptr, iter) - case decoder.fieldHash3: - decoder.fieldDecoder3.Decode(ptr, iter) - case decoder.fieldHash4: - decoder.fieldDecoder4.Decode(ptr, iter) - case decoder.fieldHash5: - decoder.fieldDecoder5.Decode(ptr, iter) - case decoder.fieldHash6: - decoder.fieldDecoder6.Decode(ptr, iter) - case decoder.fieldHash7: - decoder.fieldDecoder7.Decode(ptr, iter) - case decoder.fieldHash8: - decoder.fieldDecoder8.Decode(ptr, iter) - default: - iter.Skip() - } - if iter.isObjectEnd() { - break - } - } - if iter.Error != nil && iter.Error != io.EOF { - iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) - } -} - -type nineFieldsStructDecoder struct { - typ reflect2.Type - fieldHash1 int64 - fieldDecoder1 *structFieldDecoder - fieldHash2 int64 - fieldDecoder2 *structFieldDecoder - fieldHash3 int64 - fieldDecoder3 *structFieldDecoder - fieldHash4 int64 - fieldDecoder4 *structFieldDecoder - fieldHash5 int64 - fieldDecoder5 *structFieldDecoder - fieldHash6 int64 - fieldDecoder6 *structFieldDecoder - fieldHash7 int64 - fieldDecoder7 *structFieldDecoder - fieldHash8 int64 - fieldDecoder8 *structFieldDecoder - fieldHash9 int64 - fieldDecoder9 *structFieldDecoder -} - -func (decoder *nineFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.readObjectStart() { - return - } - for { - switch iter.readFieldHash() { - case decoder.fieldHash1: - decoder.fieldDecoder1.Decode(ptr, iter) - case decoder.fieldHash2: - decoder.fieldDecoder2.Decode(ptr, iter) - case decoder.fieldHash3: - decoder.fieldDecoder3.Decode(ptr, iter) - case decoder.fieldHash4: - decoder.fieldDecoder4.Decode(ptr, iter) - case decoder.fieldHash5: - decoder.fieldDecoder5.Decode(ptr, iter) - case decoder.fieldHash6: - decoder.fieldDecoder6.Decode(ptr, iter) - case decoder.fieldHash7: - decoder.fieldDecoder7.Decode(ptr, iter) - case decoder.fieldHash8: - decoder.fieldDecoder8.Decode(ptr, iter) - case decoder.fieldHash9: - decoder.fieldDecoder9.Decode(ptr, iter) - default: - iter.Skip() - } - if iter.isObjectEnd() { - break - } - } - if iter.Error != nil && iter.Error != io.EOF { - iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) - } -} - -type tenFieldsStructDecoder struct { - typ reflect2.Type - fieldHash1 int64 - fieldDecoder1 *structFieldDecoder - fieldHash2 int64 - fieldDecoder2 *structFieldDecoder - fieldHash3 int64 - fieldDecoder3 *structFieldDecoder - fieldHash4 int64 - fieldDecoder4 *structFieldDecoder - fieldHash5 int64 - fieldDecoder5 *structFieldDecoder - fieldHash6 int64 - fieldDecoder6 *structFieldDecoder - fieldHash7 int64 - fieldDecoder7 *structFieldDecoder - fieldHash8 int64 - fieldDecoder8 *structFieldDecoder - fieldHash9 int64 - fieldDecoder9 *structFieldDecoder - fieldHash10 int64 - fieldDecoder10 *structFieldDecoder -} - -func (decoder *tenFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - if !iter.readObjectStart() { - return - } - for { - switch iter.readFieldHash() { - case decoder.fieldHash1: - decoder.fieldDecoder1.Decode(ptr, iter) - case decoder.fieldHash2: - decoder.fieldDecoder2.Decode(ptr, iter) - case decoder.fieldHash3: - decoder.fieldDecoder3.Decode(ptr, iter) - case decoder.fieldHash4: - decoder.fieldDecoder4.Decode(ptr, iter) - case decoder.fieldHash5: - decoder.fieldDecoder5.Decode(ptr, iter) - case decoder.fieldHash6: - decoder.fieldDecoder6.Decode(ptr, iter) - case decoder.fieldHash7: - decoder.fieldDecoder7.Decode(ptr, iter) - case decoder.fieldHash8: - decoder.fieldDecoder8.Decode(ptr, iter) - case decoder.fieldHash9: - decoder.fieldDecoder9.Decode(ptr, iter) - case decoder.fieldHash10: - decoder.fieldDecoder10.Decode(ptr, iter) - default: - iter.Skip() - } - if iter.isObjectEnd() { - break - } - } - if iter.Error != nil && iter.Error != io.EOF { - iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error()) - } -} - -type structFieldDecoder struct { - field reflect2.StructField - fieldDecoder ValDecoder -} - -func (decoder *structFieldDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - fieldPtr := decoder.field.UnsafeGet(ptr) - decoder.fieldDecoder.Decode(fieldPtr, iter) - if iter.Error != nil && iter.Error != io.EOF { - iter.Error = fmt.Errorf("%s: %s", decoder.field.Name(), iter.Error.Error()) - } -} - -type stringModeStringDecoder struct { - elemDecoder ValDecoder - cfg *frozenConfig -} - -func (decoder *stringModeStringDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - decoder.elemDecoder.Decode(ptr, iter) - str := *((*string)(ptr)) - tempIter := decoder.cfg.BorrowIterator([]byte(str)) - defer decoder.cfg.ReturnIterator(tempIter) - *((*string)(ptr)) = tempIter.ReadString() -} - -type stringModeNumberDecoder struct { - elemDecoder ValDecoder -} - -func (decoder *stringModeNumberDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { - c := iter.nextToken() - if c != '"' { - iter.ReportError("stringModeNumberDecoder", `expect ", but found `+string([]byte{c})) - return - } - decoder.elemDecoder.Decode(ptr, iter) - if iter.Error != nil { - return - } - c = iter.readByte() - if c != '"' { - iter.ReportError("stringModeNumberDecoder", `expect ", but found `+string([]byte{c})) - return - } -} diff --git a/vendor/github.com/json-iterator/go/reflect_struct_encoder.go b/vendor/github.com/json-iterator/go/reflect_struct_encoder.go deleted file mode 100644 index d0759cf64..000000000 --- a/vendor/github.com/json-iterator/go/reflect_struct_encoder.go +++ /dev/null @@ -1,210 +0,0 @@ -package jsoniter - -import ( - "fmt" - "github.com/modern-go/reflect2" - "io" - "reflect" - "unsafe" -) - -func encoderOfStruct(ctx *ctx, typ reflect2.Type) ValEncoder { - type bindingTo struct { - binding *Binding - toName string - ignored bool - } - orderedBindings := []*bindingTo{} - structDescriptor := describeStruct(ctx, typ) - for _, binding := range structDescriptor.Fields { - for _, toName := range binding.ToNames { - new := &bindingTo{ - binding: binding, - toName: toName, - } - for _, old := range orderedBindings { - if old.toName != toName { - continue - } - old.ignored, new.ignored = resolveConflictBinding(ctx.frozenConfig, old.binding, new.binding) - } - orderedBindings = append(orderedBindings, new) - } - } - if len(orderedBindings) == 0 { - return &emptyStructEncoder{} - } - finalOrderedFields := []structFieldTo{} - for _, bindingTo := range orderedBindings { - if !bindingTo.ignored { - finalOrderedFields = append(finalOrderedFields, structFieldTo{ - encoder: bindingTo.binding.Encoder.(*structFieldEncoder), - toName: bindingTo.toName, - }) - } - } - return &structEncoder{typ, finalOrderedFields} -} - -func createCheckIsEmpty(ctx *ctx, typ reflect2.Type) checkIsEmpty { - encoder := createEncoderOfNative(ctx, typ) - if encoder != nil { - return encoder - } - kind := typ.Kind() - switch kind { - case reflect.Interface: - return &dynamicEncoder{typ} - case reflect.Struct: - return &structEncoder{typ: typ} - case reflect.Array: - return &arrayEncoder{} - case reflect.Slice: - return &sliceEncoder{} - case reflect.Map: - return encoderOfMap(ctx, typ) - case reflect.Ptr: - return &OptionalEncoder{} - default: - return &lazyErrorEncoder{err: fmt.Errorf("unsupported type: %v", typ)} - } -} - -func resolveConflictBinding(cfg *frozenConfig, old, new *Binding) (ignoreOld, ignoreNew bool) { - newTagged := new.Field.Tag().Get(cfg.getTagKey()) != "" - oldTagged := old.Field.Tag().Get(cfg.getTagKey()) != "" - if newTagged { - if oldTagged { - if len(old.levels) > len(new.levels) { - return true, false - } else if len(new.levels) > len(old.levels) { - return false, true - } else { - return true, true - } - } else { - return true, false - } - } else { - if oldTagged { - return true, false - } - if len(old.levels) > len(new.levels) { - return true, false - } else if len(new.levels) > len(old.levels) { - return false, true - } else { - return true, true - } - } -} - -type structFieldEncoder struct { - field reflect2.StructField - fieldEncoder ValEncoder - omitempty bool -} - -func (encoder *structFieldEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - fieldPtr := encoder.field.UnsafeGet(ptr) - encoder.fieldEncoder.Encode(fieldPtr, stream) - if stream.Error != nil && stream.Error != io.EOF { - stream.Error = fmt.Errorf("%s: %s", encoder.field.Name(), stream.Error.Error()) - } -} - -func (encoder *structFieldEncoder) IsEmpty(ptr unsafe.Pointer) bool { - fieldPtr := encoder.field.UnsafeGet(ptr) - return encoder.fieldEncoder.IsEmpty(fieldPtr) -} - -func (encoder *structFieldEncoder) IsEmbeddedPtrNil(ptr unsafe.Pointer) bool { - isEmbeddedPtrNil, converted := encoder.fieldEncoder.(IsEmbeddedPtrNil) - if !converted { - return false - } - fieldPtr := encoder.field.UnsafeGet(ptr) - return isEmbeddedPtrNil.IsEmbeddedPtrNil(fieldPtr) -} - -type IsEmbeddedPtrNil interface { - IsEmbeddedPtrNil(ptr unsafe.Pointer) bool -} - -type structEncoder struct { - typ reflect2.Type - fields []structFieldTo -} - -type structFieldTo struct { - encoder *structFieldEncoder - toName string -} - -func (encoder *structEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteObjectStart() - isNotFirst := false - for _, field := range encoder.fields { - if field.encoder.omitempty && field.encoder.IsEmpty(ptr) { - continue - } - if field.encoder.IsEmbeddedPtrNil(ptr) { - continue - } - if isNotFirst { - stream.WriteMore() - } - stream.WriteObjectField(field.toName) - field.encoder.Encode(ptr, stream) - isNotFirst = true - } - stream.WriteObjectEnd() - if stream.Error != nil && stream.Error != io.EOF { - stream.Error = fmt.Errorf("%v.%s", encoder.typ, stream.Error.Error()) - } -} - -func (encoder *structEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return false -} - -type emptyStructEncoder struct { -} - -func (encoder *emptyStructEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.WriteEmptyObject() -} - -func (encoder *emptyStructEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return false -} - -type stringModeNumberEncoder struct { - elemEncoder ValEncoder -} - -func (encoder *stringModeNumberEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - stream.writeByte('"') - encoder.elemEncoder.Encode(ptr, stream) - stream.writeByte('"') -} - -func (encoder *stringModeNumberEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return encoder.elemEncoder.IsEmpty(ptr) -} - -type stringModeStringEncoder struct { - elemEncoder ValEncoder - cfg *frozenConfig -} - -func (encoder *stringModeStringEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { - tempStream := encoder.cfg.BorrowStream(nil) - defer encoder.cfg.ReturnStream(tempStream) - encoder.elemEncoder.Encode(ptr, tempStream) - stream.WriteString(string(tempStream.Buffer())) -} - -func (encoder *stringModeStringEncoder) IsEmpty(ptr unsafe.Pointer) bool { - return encoder.elemEncoder.IsEmpty(ptr) -} diff --git a/vendor/github.com/json-iterator/go/stream.go b/vendor/github.com/json-iterator/go/stream.go deleted file mode 100644 index 17662fded..000000000 --- a/vendor/github.com/json-iterator/go/stream.go +++ /dev/null @@ -1,211 +0,0 @@ -package jsoniter - -import ( - "io" -) - -// stream is a io.Writer like object, with JSON specific write functions. -// Error is not returned as return value, but stored as Error member on this stream instance. -type Stream struct { - cfg *frozenConfig - out io.Writer - buf []byte - Error error - indention int - Attachment interface{} // open for customized encoder -} - -// NewStream create new stream instance. -// cfg can be jsoniter.ConfigDefault. -// out can be nil if write to internal buffer. -// bufSize is the initial size for the internal buffer in bytes. -func NewStream(cfg API, out io.Writer, bufSize int) *Stream { - return &Stream{ - cfg: cfg.(*frozenConfig), - out: out, - buf: make([]byte, 0, bufSize), - Error: nil, - indention: 0, - } -} - -// Pool returns a pool can provide more stream with same configuration -func (stream *Stream) Pool() StreamPool { - return stream.cfg -} - -// Reset reuse this stream instance by assign a new writer -func (stream *Stream) Reset(out io.Writer) { - stream.out = out - stream.buf = stream.buf[:0] -} - -// Available returns how many bytes are unused in the buffer. -func (stream *Stream) Available() int { - return cap(stream.buf) - len(stream.buf) -} - -// Buffered returns the number of bytes that have been written into the current buffer. -func (stream *Stream) Buffered() int { - return len(stream.buf) -} - -// Buffer if writer is nil, use this method to take the result -func (stream *Stream) Buffer() []byte { - return stream.buf -} - -// SetBuffer allows to append to the internal buffer directly -func (stream *Stream) SetBuffer(buf []byte) { - stream.buf = buf -} - -// Write writes the contents of p into the buffer. -// It returns the number of bytes written. -// If nn < len(p), it also returns an error explaining -// why the write is short. -func (stream *Stream) Write(p []byte) (nn int, err error) { - stream.buf = append(stream.buf, p...) - if stream.out != nil { - nn, err = stream.out.Write(stream.buf) - stream.buf = stream.buf[nn:] - return - } - return len(p), nil -} - -// WriteByte writes a single byte. -func (stream *Stream) writeByte(c byte) { - stream.buf = append(stream.buf, c) -} - -func (stream *Stream) writeTwoBytes(c1 byte, c2 byte) { - stream.buf = append(stream.buf, c1, c2) -} - -func (stream *Stream) writeThreeBytes(c1 byte, c2 byte, c3 byte) { - stream.buf = append(stream.buf, c1, c2, c3) -} - -func (stream *Stream) writeFourBytes(c1 byte, c2 byte, c3 byte, c4 byte) { - stream.buf = append(stream.buf, c1, c2, c3, c4) -} - -func (stream *Stream) writeFiveBytes(c1 byte, c2 byte, c3 byte, c4 byte, c5 byte) { - stream.buf = append(stream.buf, c1, c2, c3, c4, c5) -} - -// Flush writes any buffered data to the underlying io.Writer. -func (stream *Stream) Flush() error { - if stream.out == nil { - return nil - } - if stream.Error != nil { - return stream.Error - } - n, err := stream.out.Write(stream.buf) - if err != nil { - if stream.Error == nil { - stream.Error = err - } - return err - } - stream.buf = stream.buf[n:] - return nil -} - -// WriteRaw write string out without quotes, just like []byte -func (stream *Stream) WriteRaw(s string) { - stream.buf = append(stream.buf, s...) -} - -// WriteNil write null to stream -func (stream *Stream) WriteNil() { - stream.writeFourBytes('n', 'u', 'l', 'l') -} - -// WriteTrue write true to stream -func (stream *Stream) WriteTrue() { - stream.writeFourBytes('t', 'r', 'u', 'e') -} - -// WriteFalse write false to stream -func (stream *Stream) WriteFalse() { - stream.writeFiveBytes('f', 'a', 'l', 's', 'e') -} - -// WriteBool write true or false into stream -func (stream *Stream) WriteBool(val bool) { - if val { - stream.WriteTrue() - } else { - stream.WriteFalse() - } -} - -// WriteObjectStart write { with possible indention -func (stream *Stream) WriteObjectStart() { - stream.indention += stream.cfg.indentionStep - stream.writeByte('{') - stream.writeIndention(0) -} - -// WriteObjectField write "field": with possible indention -func (stream *Stream) WriteObjectField(field string) { - stream.WriteString(field) - if stream.indention > 0 { - stream.writeTwoBytes(':', ' ') - } else { - stream.writeByte(':') - } -} - -// WriteObjectEnd write } with possible indention -func (stream *Stream) WriteObjectEnd() { - stream.writeIndention(stream.cfg.indentionStep) - stream.indention -= stream.cfg.indentionStep - stream.writeByte('}') -} - -// WriteEmptyObject write {} -func (stream *Stream) WriteEmptyObject() { - stream.writeByte('{') - stream.writeByte('}') -} - -// WriteMore write , with possible indention -func (stream *Stream) WriteMore() { - stream.writeByte(',') - stream.writeIndention(0) - stream.Flush() -} - -// WriteArrayStart write [ with possible indention -func (stream *Stream) WriteArrayStart() { - stream.indention += stream.cfg.indentionStep - stream.writeByte('[') - stream.writeIndention(0) -} - -// WriteEmptyArray write [] -func (stream *Stream) WriteEmptyArray() { - stream.writeTwoBytes('[', ']') -} - -// WriteArrayEnd write ] with possible indention -func (stream *Stream) WriteArrayEnd() { - stream.writeIndention(stream.cfg.indentionStep) - stream.indention -= stream.cfg.indentionStep - stream.writeByte(']') -} - -func (stream *Stream) writeIndention(delta int) { - if stream.indention == 0 { - return - } - stream.writeByte('\n') - toWrite := stream.indention - delta - for i := 0; i < toWrite; i++ { - stream.buf = append(stream.buf, ' ') - } -} diff --git a/vendor/github.com/json-iterator/go/stream_float.go b/vendor/github.com/json-iterator/go/stream_float.go deleted file mode 100644 index f318d2c59..000000000 --- a/vendor/github.com/json-iterator/go/stream_float.go +++ /dev/null @@ -1,94 +0,0 @@ -package jsoniter - -import ( - "math" - "strconv" -) - -var pow10 []uint64 - -func init() { - pow10 = []uint64{1, 10, 100, 1000, 10000, 100000, 1000000} -} - -// WriteFloat32 write float32 to stream -func (stream *Stream) WriteFloat32(val float32) { - abs := math.Abs(float64(val)) - fmt := byte('f') - // Note: Must use float32 comparisons for underlying float32 value to get precise cutoffs right. - if abs != 0 { - if float32(abs) < 1e-6 || float32(abs) >= 1e21 { - fmt = 'e' - } - } - stream.buf = strconv.AppendFloat(stream.buf, float64(val), fmt, -1, 32) -} - -// WriteFloat32Lossy write float32 to stream with ONLY 6 digits precision although much much faster -func (stream *Stream) WriteFloat32Lossy(val float32) { - if val < 0 { - stream.writeByte('-') - val = -val - } - if val > 0x4ffffff { - stream.WriteFloat32(val) - return - } - precision := 6 - exp := uint64(1000000) // 6 - lval := uint64(float64(val)*float64(exp) + 0.5) - stream.WriteUint64(lval / exp) - fval := lval % exp - if fval == 0 { - return - } - stream.writeByte('.') - for p := precision - 1; p > 0 && fval < pow10[p]; p-- { - stream.writeByte('0') - } - stream.WriteUint64(fval) - for stream.buf[len(stream.buf)-1] == '0' { - stream.buf = stream.buf[:len(stream.buf)-1] - } -} - -// WriteFloat64 write float64 to stream -func (stream *Stream) WriteFloat64(val float64) { - abs := math.Abs(val) - fmt := byte('f') - // Note: Must use float32 comparisons for underlying float32 value to get precise cutoffs right. - if abs != 0 { - if abs < 1e-6 || abs >= 1e21 { - fmt = 'e' - } - } - stream.buf = strconv.AppendFloat(stream.buf, float64(val), fmt, -1, 64) -} - -// WriteFloat64Lossy write float64 to stream with ONLY 6 digits precision although much much faster -func (stream *Stream) WriteFloat64Lossy(val float64) { - if val < 0 { - stream.writeByte('-') - val = -val - } - if val > 0x4ffffff { - stream.WriteFloat64(val) - return - } - precision := 6 - exp := uint64(1000000) // 6 - lval := uint64(val*float64(exp) + 0.5) - stream.WriteUint64(lval / exp) - fval := lval % exp - if fval == 0 { - return - } - stream.writeByte('.') - for p := precision - 1; p > 0 && fval < pow10[p]; p-- { - stream.writeByte('0') - } - stream.WriteUint64(fval) - for stream.buf[len(stream.buf)-1] == '0' { - stream.buf = stream.buf[:len(stream.buf)-1] - } -} diff --git a/vendor/github.com/json-iterator/go/stream_int.go b/vendor/github.com/json-iterator/go/stream_int.go deleted file mode 100644 index d1059ee4c..000000000 --- a/vendor/github.com/json-iterator/go/stream_int.go +++ /dev/null @@ -1,190 +0,0 @@ -package jsoniter - -var digits []uint32 - -func init() { - digits = make([]uint32, 1000) - for i := uint32(0); i < 1000; i++ { - digits[i] = (((i / 100) + '0') << 16) + ((((i / 10) % 10) + '0') << 8) + i%10 + '0' - if i < 10 { - digits[i] += 2 << 24 - } else if i < 100 { - digits[i] += 1 << 24 - } - } -} - -func writeFirstBuf(space []byte, v uint32) []byte { - start := v >> 24 - if start == 0 { - space = append(space, byte(v>>16), byte(v>>8)) - } else if start == 1 { - space = append(space, byte(v>>8)) - } - space = append(space, byte(v)) - return space -} - -func writeBuf(buf []byte, v uint32) []byte { - return append(buf, byte(v>>16), byte(v>>8), byte(v)) -} - -// WriteUint8 write uint8 to stream -func (stream *Stream) WriteUint8(val uint8) { - stream.buf = writeFirstBuf(stream.buf, digits[val]) -} - -// WriteInt8 write int8 to stream -func (stream *Stream) WriteInt8(nval int8) { - var val uint8 - if nval < 0 { - val = uint8(-nval) - stream.buf = append(stream.buf, '-') - } else { - val = uint8(nval) - } - stream.buf = writeFirstBuf(stream.buf, digits[val]) -} - -// WriteUint16 write uint16 to stream -func (stream *Stream) WriteUint16(val uint16) { - q1 := val / 1000 - if q1 == 0 { - stream.buf = writeFirstBuf(stream.buf, digits[val]) - return - } - r1 := val - q1*1000 - stream.buf = writeFirstBuf(stream.buf, digits[q1]) - stream.buf = writeBuf(stream.buf, digits[r1]) - return -} - -// WriteInt16 write int16 to stream -func (stream *Stream) WriteInt16(nval int16) { - var val uint16 - if nval < 0 { - val = uint16(-nval) - stream.buf = append(stream.buf, '-') - } else { - val = uint16(nval) - } - stream.WriteUint16(val) -} - -// WriteUint32 write uint32 to stream -func (stream *Stream) WriteUint32(val uint32) { - q1 := val / 1000 - if q1 == 0 { - stream.buf = writeFirstBuf(stream.buf, digits[val]) - return - } - r1 := val - q1*1000 - q2 := q1 / 1000 - if q2 == 0 { - stream.buf = writeFirstBuf(stream.buf, digits[q1]) - stream.buf = writeBuf(stream.buf, digits[r1]) - return - } - r2 := q1 - q2*1000 - q3 := q2 / 1000 - if q3 == 0 { - stream.buf = writeFirstBuf(stream.buf, digits[q2]) - } else { - r3 := q2 - q3*1000 - stream.buf = append(stream.buf, byte(q3+'0')) - stream.buf = writeBuf(stream.buf, digits[r3]) - } - stream.buf = writeBuf(stream.buf, digits[r2]) - stream.buf = writeBuf(stream.buf, digits[r1]) -} - -// WriteInt32 write int32 to stream -func (stream *Stream) WriteInt32(nval int32) { - var val uint32 - if nval < 0 { - val = uint32(-nval) - stream.buf = append(stream.buf, '-') - } else { - val = uint32(nval) - } - stream.WriteUint32(val) -} - -// WriteUint64 write uint64 to stream -func (stream *Stream) WriteUint64(val uint64) { - q1 := val / 1000 - if q1 == 0 { - stream.buf = writeFirstBuf(stream.buf, digits[val]) - return - } - r1 := val - q1*1000 - q2 := q1 / 1000 - if q2 == 0 { - stream.buf = writeFirstBuf(stream.buf, digits[q1]) - stream.buf = writeBuf(stream.buf, digits[r1]) - return - } - r2 := q1 - q2*1000 - q3 := q2 / 1000 - if q3 == 0 { - stream.buf = writeFirstBuf(stream.buf, digits[q2]) - stream.buf = writeBuf(stream.buf, digits[r2]) - stream.buf = writeBuf(stream.buf, digits[r1]) - return - } - r3 := q2 - q3*1000 - q4 := q3 / 1000 - if q4 == 0 { - stream.buf = writeFirstBuf(stream.buf, digits[q3]) - stream.buf = writeBuf(stream.buf, digits[r3]) - stream.buf = writeBuf(stream.buf, digits[r2]) - stream.buf = writeBuf(stream.buf, digits[r1]) - return - } - r4 := q3 - q4*1000 - q5 := q4 / 1000 - if q5 == 0 { - stream.buf = writeFirstBuf(stream.buf, digits[q4]) - stream.buf = writeBuf(stream.buf, digits[r4]) - stream.buf = writeBuf(stream.buf, digits[r3]) - stream.buf = writeBuf(stream.buf, digits[r2]) - stream.buf = writeBuf(stream.buf, digits[r1]) - return - } - r5 := q4 - q5*1000 - q6 := q5 / 1000 - if q6 == 0 { - stream.buf = writeFirstBuf(stream.buf, digits[q5]) - } else { - stream.buf = writeFirstBuf(stream.buf, digits[q6]) - r6 := q5 - q6*1000 - stream.buf = writeBuf(stream.buf, digits[r6]) - } - stream.buf = writeBuf(stream.buf, digits[r5]) - stream.buf = writeBuf(stream.buf, digits[r4]) - stream.buf = writeBuf(stream.buf, digits[r3]) - stream.buf = writeBuf(stream.buf, digits[r2]) - stream.buf = writeBuf(stream.buf, digits[r1]) -} - -// WriteInt64 write int64 to stream -func (stream *Stream) WriteInt64(nval int64) { - var val uint64 - if nval < 0 { - val = uint64(-nval) - stream.buf = append(stream.buf, '-') - } else { - val = uint64(nval) - } - stream.WriteUint64(val) -} - -// WriteInt write int to stream -func (stream *Stream) WriteInt(val int) { - stream.WriteInt64(int64(val)) -} - -// WriteUint write uint to stream -func (stream *Stream) WriteUint(val uint) { - stream.WriteUint64(uint64(val)) -} diff --git a/vendor/github.com/json-iterator/go/stream_str.go b/vendor/github.com/json-iterator/go/stream_str.go deleted file mode 100644 index 54c2ba0b3..000000000 --- a/vendor/github.com/json-iterator/go/stream_str.go +++ /dev/null @@ -1,372 +0,0 @@ -package jsoniter - -import ( - "unicode/utf8" -) - -// htmlSafeSet holds the value true if the ASCII character with the given -// array position can be safely represented inside a JSON string, embedded -// inside of HTML tag. -func (p *Policy) addDefaultSkipElementContent() { - p.init() - - p.setOfElementsToSkipContent["frame"] = struct{}{} - p.setOfElementsToSkipContent["frameset"] = struct{}{} - p.setOfElementsToSkipContent["iframe"] = struct{}{} - p.setOfElementsToSkipContent["noembed"] = struct{}{} - p.setOfElementsToSkipContent["noframes"] = struct{}{} - p.setOfElementsToSkipContent["noscript"] = struct{}{} - p.setOfElementsToSkipContent["nostyle"] = struct{}{} - p.setOfElementsToSkipContent["object"] = struct{}{} - p.setOfElementsToSkipContent["script"] = struct{}{} - p.setOfElementsToSkipContent["style"] = struct{}{} - p.setOfElementsToSkipContent["title"] = struct{}{} -} diff --git a/vendor/github.com/microcosm-cc/bluemonday/sanitize.go b/vendor/github.com/microcosm-cc/bluemonday/sanitize.go deleted file mode 100644 index 898368581..000000000 --- a/vendor/github.com/microcosm-cc/bluemonday/sanitize.go +++ /dev/null @@ -1,535 +0,0 @@ -// Copyright (c) 2014, David Kitchen -// -// 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 organisation (Microcosm) 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. - -package bluemonday - -import ( - "bytes" - "io" - "net/url" - "strings" - - "golang.org/x/net/html" -) - -// Sanitize takes a string that contains a HTML fragment or document and applies -// the given policy whitelist. -// -// It returns a HTML string that has been sanitized by the policy or an empty -// string if an error has occurred (most likely as a consequence of extremely -// malformed input) -func (p *Policy) Sanitize(s string) string { - if strings.TrimSpace(s) == "" { - return s - } - - return p.sanitize(strings.NewReader(s)).String() -} - -// SanitizeBytes takes a []byte that contains a HTML fragment or document and applies -// the given policy whitelist. -// -// It returns a []byte containing the HTML that has been sanitized by the policy -// or an empty []byte if an error has occurred (most likely as a consequence of -// extremely malformed input) -func (p *Policy) SanitizeBytes(b []byte) []byte { - if len(bytes.TrimSpace(b)) == 0 { - return b - } - - return p.sanitize(bytes.NewReader(b)).Bytes() -} - -// SanitizeReader takes an io.Reader that contains a HTML fragment or document -// and applies the given policy whitelist. -// -// It returns a bytes.Buffer containing the HTML that has been sanitized by the -// policy. Errors during sanitization will merely return an empty result. -func (p *Policy) SanitizeReader(r io.Reader) *bytes.Buffer { - return p.sanitize(r) -} - -// Performs the actual sanitization process. -func (p *Policy) sanitize(r io.Reader) *bytes.Buffer { - - // It is possible that the developer has created the policy via: - // p := bluemonday.Policy{} - // rather than: - // p := bluemonday.NewPolicy() - // If this is the case, and if they haven't yet triggered an action that - // would initiliaze the maps, then we need to do that. - p.init() - - var ( - buff bytes.Buffer - skipElementContent bool - skippingElementsCount int64 - skipClosingTag bool - closingTagToSkipStack []string - mostRecentlyStartedToken string - ) - - tokenizer := html.NewTokenizer(r) - for { - if tokenizer.Next() == html.ErrorToken { - err := tokenizer.Err() - if err == io.EOF { - // End of input means end of processing - return &buff - } - - // Raw tokenizer error - return &bytes.Buffer{} - } - - token := tokenizer.Token() - switch token.Type { - case html.DoctypeToken: - - if p.allowDocType { - buff.WriteString(token.String()) - } - - case html.CommentToken: - - // Comments are ignored by default - - case html.StartTagToken: - - mostRecentlyStartedToken = token.Data - - aps, ok := p.elsAndAttrs[token.Data] - if !ok { - if _, ok := p.setOfElementsToSkipContent[token.Data]; ok { - skipElementContent = true - skippingElementsCount++ - } - if p.addSpaces { - buff.WriteString(" ") - } - break - } - - if len(token.Attr) != 0 { - token.Attr = p.sanitizeAttrs(token.Data, token.Attr, aps) - } - - if len(token.Attr) == 0 { - if !p.allowNoAttrs(token.Data) { - skipClosingTag = true - closingTagToSkipStack = append(closingTagToSkipStack, token.Data) - if p.addSpaces { - buff.WriteString(" ") - } - break - } - } - - if !skipElementContent { - buff.WriteString(token.String()) - } - - case html.EndTagToken: - - if skipClosingTag && closingTagToSkipStack[len(closingTagToSkipStack)-1] == token.Data { - closingTagToSkipStack = closingTagToSkipStack[:len(closingTagToSkipStack)-1] - if len(closingTagToSkipStack) == 0 { - skipClosingTag = false - } - if p.addSpaces { - buff.WriteString(" ") - } - break - } - - if _, ok := p.elsAndAttrs[token.Data]; !ok { - if _, ok := p.setOfElementsToSkipContent[token.Data]; ok { - skippingElementsCount-- - if skippingElementsCount == 0 { - skipElementContent = false - } - } - if p.addSpaces { - buff.WriteString(" ") - } - break - } - - if !skipElementContent { - buff.WriteString(token.String()) - } - - case html.SelfClosingTagToken: - - aps, ok := p.elsAndAttrs[token.Data] - if !ok { - if p.addSpaces { - buff.WriteString(" ") - } - break - } - - if len(token.Attr) != 0 { - token.Attr = p.sanitizeAttrs(token.Data, token.Attr, aps) - } - - if len(token.Attr) == 0 && !p.allowNoAttrs(token.Data) { - if p.addSpaces { - buff.WriteString(" ") - } - break - } - - if !skipElementContent { - buff.WriteString(token.String()) - } - - case html.TextToken: - - if !skipElementContent { - switch strings.ToLower(mostRecentlyStartedToken) { - case "javascript": - // not encouraged, but if a policy allows JavaScript we - // should not HTML escape it as that would break the output - buff.WriteString(token.Data) - case "style": - // not encouraged, but if a policy allows CSS styles we - // should not HTML escape it as that would break the output - buff.WriteString(token.Data) - default: - // HTML escape the text - buff.WriteString(token.String()) - } - } - - default: - // A token that didn't exist in the html package when we wrote this - return &bytes.Buffer{} - } - } -} - -// sanitizeAttrs takes a set of element attribute policies and the global -// attribute policies and applies them to the []html.Attribute returning a set -// of html.Attributes that match the policies -func (p *Policy) sanitizeAttrs( - elementName string, - attrs []html.Attribute, - aps map[string]attrPolicy, -) []html.Attribute { - - if len(attrs) == 0 { - return attrs - } - - // Builds a new attribute slice based on the whether the attribute has been - // whitelisted explicitly or globally. - cleanAttrs := []html.Attribute{} - for _, htmlAttr := range attrs { - // Is there an element specific attribute policy that applies? - if ap, ok := aps[htmlAttr.Key]; ok { - if ap.regexp != nil { - if ap.regexp.MatchString(htmlAttr.Val) { - cleanAttrs = append(cleanAttrs, htmlAttr) - continue - } - } else { - cleanAttrs = append(cleanAttrs, htmlAttr) - continue - } - } - - // Is there a global attribute policy that applies? - if ap, ok := p.globalAttrs[htmlAttr.Key]; ok { - if ap.regexp != nil { - if ap.regexp.MatchString(htmlAttr.Val) { - cleanAttrs = append(cleanAttrs, htmlAttr) - } - } else { - cleanAttrs = append(cleanAttrs, htmlAttr) - } - } - } - - if len(cleanAttrs) == 0 { - // If nothing was allowed, let's get out of here - return cleanAttrs - } - // cleanAttrs now contains the attributes that are permitted - - if linkable(elementName) { - if p.requireParseableURLs { - // Ensure URLs are parseable: - // - a.href - // - area.href - // - link.href - // - blockquote.cite - // - q.cite - // - img.src - // - script.src - tmpAttrs := []html.Attribute{} - for _, htmlAttr := range cleanAttrs { - switch elementName { - case "a", "area", "link": - if htmlAttr.Key == "href" { - if u, ok := p.validURL(htmlAttr.Val); ok { - htmlAttr.Val = u - tmpAttrs = append(tmpAttrs, htmlAttr) - } - break - } - tmpAttrs = append(tmpAttrs, htmlAttr) - case "blockquote", "q": - if htmlAttr.Key == "cite" { - if u, ok := p.validURL(htmlAttr.Val); ok { - htmlAttr.Val = u - tmpAttrs = append(tmpAttrs, htmlAttr) - } - break - } - tmpAttrs = append(tmpAttrs, htmlAttr) - case "img", "script": - if htmlAttr.Key == "src" { - if u, ok := p.validURL(htmlAttr.Val); ok { - htmlAttr.Val = u - tmpAttrs = append(tmpAttrs, htmlAttr) - } - break - } - tmpAttrs = append(tmpAttrs, htmlAttr) - default: - tmpAttrs = append(tmpAttrs, htmlAttr) - } - } - cleanAttrs = tmpAttrs - } - - if (p.requireNoFollow || - p.requireNoFollowFullyQualifiedLinks || - p.addTargetBlankToFullyQualifiedLinks) && - len(cleanAttrs) > 0 { - - // Add rel="nofollow" if a "href" exists - switch elementName { - case "a", "area", "link": - var hrefFound bool - var externalLink bool - for _, htmlAttr := range cleanAttrs { - if htmlAttr.Key == "href" { - hrefFound = true - - u, err := url.Parse(htmlAttr.Val) - if err != nil { - continue - } - if u.Host != "" { - externalLink = true - } - - continue - } - } - - if hrefFound { - var ( - noFollowFound bool - targetBlankFound bool - ) - - addNoFollow := (p.requireNoFollow || - externalLink && p.requireNoFollowFullyQualifiedLinks) - - addTargetBlank := (externalLink && - p.addTargetBlankToFullyQualifiedLinks) - - tmpAttrs := []html.Attribute{} - for _, htmlAttr := range cleanAttrs { - - var appended bool - if htmlAttr.Key == "rel" && addNoFollow { - - if strings.Contains(htmlAttr.Val, "nofollow") { - noFollowFound = true - tmpAttrs = append(tmpAttrs, htmlAttr) - appended = true - } else { - htmlAttr.Val += " nofollow" - noFollowFound = true - tmpAttrs = append(tmpAttrs, htmlAttr) - appended = true - } - } - - if elementName == "a" && htmlAttr.Key == "target" { - if htmlAttr.Val == "_blank" { - targetBlankFound = true - } - if addTargetBlank && !targetBlankFound { - htmlAttr.Val = "_blank" - targetBlankFound = true - tmpAttrs = append(tmpAttrs, htmlAttr) - appended = true - } - } - - if !appended { - tmpAttrs = append(tmpAttrs, htmlAttr) - } - } - if noFollowFound || targetBlankFound { - cleanAttrs = tmpAttrs - } - - if addNoFollow && !noFollowFound { - rel := html.Attribute{} - rel.Key = "rel" - rel.Val = "nofollow" - cleanAttrs = append(cleanAttrs, rel) - } - - if elementName == "a" && addTargetBlank && !targetBlankFound { - rel := html.Attribute{} - rel.Key = "target" - rel.Val = "_blank" - targetBlankFound = true - cleanAttrs = append(cleanAttrs, rel) - } - - if targetBlankFound { - // target="_blank" has a security risk that allows the - // opened window/tab to issue JavaScript calls against - // window.opener, which in effect allow the destination - // of the link to control the source: - // https://dev.to/ben/the-targetblank-vulnerability-by-example - // - // To mitigate this risk, we need to add a specific rel - // attribute if it is not already present. - // rel="noopener" - // - // Unfortunately this is processing the rel twice (we - // already looked at it earlier ^^) as we cannot be sure - // of the ordering of the href and rel, and whether we - // have fully satisfied that we need to do this. This - // double processing only happens *if* target="_blank" - // is true. - var noOpenerAdded bool - tmpAttrs := []html.Attribute{} - for _, htmlAttr := range cleanAttrs { - var appended bool - if htmlAttr.Key == "rel" { - if strings.Contains(htmlAttr.Val, "noopener") { - noOpenerAdded = true - tmpAttrs = append(tmpAttrs, htmlAttr) - } else { - htmlAttr.Val += " noopener" - noOpenerAdded = true - tmpAttrs = append(tmpAttrs, htmlAttr) - } - - appended = true - } - if !appended { - tmpAttrs = append(tmpAttrs, htmlAttr) - } - } - if noOpenerAdded { - cleanAttrs = tmpAttrs - } else { - // rel attr was not found, or else noopener would - // have been added already - rel := html.Attribute{} - rel.Key = "rel" - rel.Val = "noopener" - cleanAttrs = append(cleanAttrs, rel) - } - - } - } - default: - } - } - } - - return cleanAttrs -} - -func (p *Policy) allowNoAttrs(elementName string) bool { - _, ok := p.setOfElementsAllowedWithoutAttrs[elementName] - return ok -} - -func (p *Policy) validURL(rawurl string) (string, bool) { - if p.requireParseableURLs { - // URLs do not contain whitespace - if strings.Contains(rawurl, " ") || - strings.Contains(rawurl, "\t") || - strings.Contains(rawurl, "\n") { - return "", false - } - - u, err := url.Parse(rawurl) - if err != nil { - return "", false - } - - if u.Scheme != "" { - - urlPolicy, ok := p.allowURLSchemes[u.Scheme] - if !ok { - return "", false - - } - - if urlPolicy == nil || urlPolicy(u) == true { - return u.String(), true - } - - return "", false - } - - if p.allowRelativeURLs { - if u.String() != "" { - return u.String(), true - } - } - - return "", false - } - - return rawurl, true -} - -func linkable(elementName string) bool { - switch elementName { - case "a", "area", "blockquote", "img", "link", "script": - return true - default: - return false - } -} diff --git a/vendor/github.com/modern-go/concurrent/LICENSE b/vendor/github.com/modern-go/concurrent/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/vendor/github.com/modern-go/concurrent/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - 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/modern-go/concurrent/README.md b/vendor/github.com/modern-go/concurrent/README.md deleted file mode 100644 index acab3200a..000000000 --- a/vendor/github.com/modern-go/concurrent/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# concurrent - -[![Sourcegraph](https://sourcegraph.com/github.com/modern-go/concurrent/-/badge.svg)](https://sourcegraph.com/github.com/modern-go/concurrent?badge) -[![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](http://godoc.org/github.com/modern-go/concurrent) -[![Build Status](https://travis-ci.org/modern-go/concurrent.svg?branch=master)](https://travis-ci.org/modern-go/concurrent) -[![codecov](https://codecov.io/gh/modern-go/concurrent/branch/master/graph/badge.svg)](https://codecov.io/gh/modern-go/concurrent) -[![rcard](https://goreportcard.com/badge/github.com/modern-go/concurrent)](https://goreportcard.com/report/github.com/modern-go/concurrent) -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://raw.githubusercontent.com/modern-go/concurrent/master/LICENSE) - -* concurrent.Map: backport sync.Map for go below 1.9 -* concurrent.Executor: goroutine with explicit ownership and cancellable - -# concurrent.Map - -because sync.Map is only available in go 1.9, we can use concurrent.Map to make code portable - -```go -m := concurrent.NewMap() -m.Store("hello", "world") -elem, found := m.Load("hello") -// elem will be "world" -// found will be true -``` - -# concurrent.Executor - -```go -executor := concurrent.NewUnboundedExecutor() -executor.Go(func(ctx context.Context) { - everyMillisecond := time.NewTicker(time.Millisecond) - for { - select { - case <-ctx.Done(): - fmt.Println("goroutine exited") - return - case <-everyMillisecond.C: - // do something - } - } -}) -time.Sleep(time.Second) -executor.StopAndWaitForever() -fmt.Println("executor stopped") -``` - -attach goroutine to executor instance, so that we can - -* cancel it by stop the executor with Stop/StopAndWait/StopAndWaitForever -* handle panic by callback: the default behavior will no longer crash your application \ No newline at end of file diff --git a/vendor/github.com/modern-go/concurrent/executor.go b/vendor/github.com/modern-go/concurrent/executor.go deleted file mode 100644 index 623dba1ac..000000000 --- a/vendor/github.com/modern-go/concurrent/executor.go +++ /dev/null @@ -1,14 +0,0 @@ -package concurrent - -import "context" - -// Executor replace go keyword to start a new goroutine -// the goroutine should cancel itself if the context passed in has been cancelled -// the goroutine started by the executor, is owned by the executor -// we can cancel all executors owned by the executor just by stop the executor itself -// however Executor interface does not Stop method, the one starting and owning executor -// should use the concrete type of executor, instead of this interface. -type Executor interface { - // Go starts a new goroutine controlled by the context - Go(handler func(ctx context.Context)) -} diff --git a/vendor/github.com/modern-go/concurrent/go_above_19.go b/vendor/github.com/modern-go/concurrent/go_above_19.go deleted file mode 100644 index aeabf8c4f..000000000 --- a/vendor/github.com/modern-go/concurrent/go_above_19.go +++ /dev/null @@ -1,15 +0,0 @@ -//+build go1.9 - -package concurrent - -import "sync" - -// Map is a wrapper for sync.Map introduced in go1.9 -type Map struct { - sync.Map -} - -// NewMap creates a thread safe Map -func NewMap() *Map { - return &Map{} -} diff --git a/vendor/github.com/modern-go/concurrent/go_below_19.go b/vendor/github.com/modern-go/concurrent/go_below_19.go deleted file mode 100644 index b9c8df7f4..000000000 --- a/vendor/github.com/modern-go/concurrent/go_below_19.go +++ /dev/null @@ -1,33 +0,0 @@ -//+build !go1.9 - -package concurrent - -import "sync" - -// Map implements a thread safe map for go version below 1.9 using mutex -type Map struct { - lock sync.RWMutex - data map[interface{}]interface{} -} - -// NewMap creates a thread safe map -func NewMap() *Map { - return &Map{ - data: make(map[interface{}]interface{}, 32), - } -} - -// Load is same as sync.Map Load -func (m *Map) Load(key interface{}) (elem interface{}, found bool) { - m.lock.RLock() - elem, found = m.data[key] - m.lock.RUnlock() - return -} - -// Load is same as sync.Map Store -func (m *Map) Store(key interface{}, elem interface{}) { - m.lock.Lock() - m.data[key] = elem - m.lock.Unlock() -} diff --git a/vendor/github.com/modern-go/concurrent/log.go b/vendor/github.com/modern-go/concurrent/log.go deleted file mode 100644 index 9756fcc75..000000000 --- a/vendor/github.com/modern-go/concurrent/log.go +++ /dev/null @@ -1,13 +0,0 @@ -package concurrent - -import ( - "os" - "log" - "io/ioutil" -) - -// ErrorLogger is used to print out error, can be set to writer other than stderr -var ErrorLogger = log.New(os.Stderr, "", 0) - -// InfoLogger is used to print informational message, default to off -var InfoLogger = log.New(ioutil.Discard, "", 0) \ No newline at end of file diff --git a/vendor/github.com/modern-go/concurrent/test.sh b/vendor/github.com/modern-go/concurrent/test.sh deleted file mode 100755 index d1e6b2ec5..000000000 --- a/vendor/github.com/modern-go/concurrent/test.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -set -e -echo "" > coverage.txt - -for d in $(go list ./... | grep -v vendor); do - go test -coverprofile=profile.out -coverpkg=github.com/modern-go/concurrent $d - if [ -f profile.out ]; then - cat profile.out >> coverage.txt - rm profile.out - fi -done diff --git a/vendor/github.com/modern-go/concurrent/unbounded_executor.go b/vendor/github.com/modern-go/concurrent/unbounded_executor.go deleted file mode 100644 index 05a77dceb..000000000 --- a/vendor/github.com/modern-go/concurrent/unbounded_executor.go +++ /dev/null @@ -1,119 +0,0 @@ -package concurrent - -import ( - "context" - "fmt" - "runtime" - "runtime/debug" - "sync" - "time" - "reflect" -) - -// HandlePanic logs goroutine panic by default -var HandlePanic = func(recovered interface{}, funcName string) { - ErrorLogger.Println(fmt.Sprintf("%s panic: %v", funcName, recovered)) - ErrorLogger.Println(string(debug.Stack())) -} - -// UnboundedExecutor is a executor without limits on counts of alive goroutines -// it tracks the goroutine started by it, and can cancel them when shutdown -type UnboundedExecutor struct { - ctx context.Context - cancel context.CancelFunc - activeGoroutinesMutex *sync.Mutex - activeGoroutines map[string]int - HandlePanic func(recovered interface{}, funcName string) -} - -// GlobalUnboundedExecutor has the life cycle of the program itself -// any goroutine want to be shutdown before main exit can be started from this executor -// GlobalUnboundedExecutor expects the main function to call stop -// it does not magically knows the main function exits -var GlobalUnboundedExecutor = NewUnboundedExecutor() - -// NewUnboundedExecutor creates a new UnboundedExecutor, -// UnboundedExecutor can not be created by &UnboundedExecutor{} -// HandlePanic can be set with a callback to override global HandlePanic -func NewUnboundedExecutor() *UnboundedExecutor { - ctx, cancel := context.WithCancel(context.TODO()) - return &UnboundedExecutor{ - ctx: ctx, - cancel: cancel, - activeGoroutinesMutex: &sync.Mutex{}, - activeGoroutines: map[string]int{}, - } -} - -// Go starts a new goroutine and tracks its lifecycle. -// Panic will be recovered and logged automatically, except for StopSignal -func (executor *UnboundedExecutor) Go(handler func(ctx context.Context)) { - pc := reflect.ValueOf(handler).Pointer() - f := runtime.FuncForPC(pc) - funcName := f.Name() - file, line := f.FileLine(pc) - executor.activeGoroutinesMutex.Lock() - defer executor.activeGoroutinesMutex.Unlock() - startFrom := fmt.Sprintf("%s:%d", file, line) - executor.activeGoroutines[startFrom] += 1 - go func() { - defer func() { - recovered := recover() - // if you want to quit a goroutine without trigger HandlePanic - // use runtime.Goexit() to quit - if recovered != nil { - if executor.HandlePanic == nil { - HandlePanic(recovered, funcName) - } else { - executor.HandlePanic(recovered, funcName) - } - } - executor.activeGoroutinesMutex.Lock() - executor.activeGoroutines[startFrom] -= 1 - executor.activeGoroutinesMutex.Unlock() - }() - handler(executor.ctx) - }() -} - -// Stop cancel all goroutines started by this executor without wait -func (executor *UnboundedExecutor) Stop() { - executor.cancel() -} - -// StopAndWaitForever cancel all goroutines started by this executor and -// wait until all goroutines exited -func (executor *UnboundedExecutor) StopAndWaitForever() { - executor.StopAndWait(context.Background()) -} - -// StopAndWait cancel all goroutines started by this executor and wait. -// Wait can be cancelled by the context passed in. -func (executor *UnboundedExecutor) StopAndWait(ctx context.Context) { - executor.cancel() - for { - oneHundredMilliseconds := time.NewTimer(time.Millisecond * 100) - select { - case <-oneHundredMilliseconds.C: - if executor.checkNoActiveGoroutines() { - return - } - case <-ctx.Done(): - return - } - } -} - -func (executor *UnboundedExecutor) checkNoActiveGoroutines() bool { - executor.activeGoroutinesMutex.Lock() - defer executor.activeGoroutinesMutex.Unlock() - for startFrom, count := range executor.activeGoroutines { - if count > 0 { - InfoLogger.Println("UnboundedExecutor is still waiting goroutines to quit", - "startFrom", startFrom, - "count", count) - return false - } - } - return true -} diff --git a/vendor/github.com/modern-go/reflect2/Gopkg.lock b/vendor/github.com/modern-go/reflect2/Gopkg.lock deleted file mode 100644 index 2a3a69893..000000000 --- a/vendor/github.com/modern-go/reflect2/Gopkg.lock +++ /dev/null @@ -1,15 +0,0 @@ -# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. - - -[[projects]] - name = "github.com/modern-go/concurrent" - packages = ["."] - revision = "e0a39a4cb4216ea8db28e22a69f4ec25610d513a" - version = "1.0.0" - -[solve-meta] - analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "daee8a88b3498b61c5640056665b8b9eea062006f5e596bbb6a3ed9119a11ec7" - solver-name = "gps-cdcl" - solver-version = 1 diff --git a/vendor/github.com/modern-go/reflect2/Gopkg.toml b/vendor/github.com/modern-go/reflect2/Gopkg.toml deleted file mode 100644 index 3593fd041..000000000 --- a/vendor/github.com/modern-go/reflect2/Gopkg.toml +++ /dev/null @@ -1,35 +0,0 @@ -# Gopkg.toml example -# -# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html -# for detailed Gopkg.toml documentation. -# -# required = ["github.com/user/thing/cmd/thing"] -# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] -# -# [[constraint]] -# name = "github.com/user/project" -# version = "1.0.0" -# -# [[constraint]] -# name = "github.com/user/project2" -# branch = "dev" -# source = "github.com/myfork/project2" -# -# [[override]] -# name = "github.com/x/y" -# version = "2.4.0" -# -# [prune] -# non-go = false -# go-tests = true -# unused-packages = true - -ignored = ["github.com/modern-go/test","github.com/modern-go/test/must","github.com/modern-go/test/should"] - -[[constraint]] - name = "github.com/modern-go/concurrent" - version = "1.0.0" - -[prune] - go-tests = true - unused-packages = true diff --git a/vendor/github.com/modern-go/reflect2/LICENSE b/vendor/github.com/modern-go/reflect2/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/vendor/github.com/modern-go/reflect2/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - 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/modern-go/reflect2/README.md b/vendor/github.com/modern-go/reflect2/README.md deleted file mode 100644 index 6f968aab9..000000000 --- a/vendor/github.com/modern-go/reflect2/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# reflect2 - -[![Sourcegraph](https://sourcegraph.com/github.com/modern-go/reflect2/-/badge.svg)](https://sourcegraph.com/github.com/modern-go/reflect2?badge) -[![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](http://godoc.org/github.com/modern-go/reflect2) -[![Build Status](https://travis-ci.org/modern-go/reflect2.svg?branch=master)](https://travis-ci.org/modern-go/reflect2) -[![codecov](https://codecov.io/gh/modern-go/reflect2/branch/master/graph/badge.svg)](https://codecov.io/gh/modern-go/reflect2) -[![rcard](https://goreportcard.com/badge/github.com/modern-go/reflect2)](https://goreportcard.com/report/github.com/modern-go/reflect2) -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://raw.githubusercontent.com/modern-go/reflect2/master/LICENSE) - -reflect api that avoids runtime reflect.Value cost - -* reflect get/set interface{}, with type checking -* reflect get/set unsafe.Pointer, without type checking -* `reflect2.TypeByName` works like `Class.forName` found in java - -[json-iterator](https://github.com/json-iterator/go) use this package to save runtime dispatching cost. -This package is designed for low level libraries to optimize reflection performance. -General application should still use reflect standard library. - -# reflect2.TypeByName - -```go -// given package is github.com/your/awesome-package -type MyStruct struct { - // ... -} - -// will return the type -reflect2.TypeByName("awesome-package.MyStruct") -// however, if the type has not been used -// it will be eliminated by compiler, so we can not get it in runtime -``` - -# reflect2 get/set interface{} - -```go -valType := reflect2.TypeOf(1) -i := 1 -j := 10 -valType.Set(&i, &j) -// i will be 10 -``` - -to get set `type`, always use its pointer `*type` - -# reflect2 get/set unsafe.Pointer - -```go -valType := reflect2.TypeOf(1) -i := 1 -j := 10 -valType.UnsafeSet(unsafe.Pointer(&i), unsafe.Pointer(&j)) -// i will be 10 -``` - -to get set `type`, always use its pointer `*type` - -# benchmark - -Benchmark is not necessary for this package. It does nothing actually. -As it is just a thin wrapper to make go runtime public. -Both `reflect2` and `reflect` call same function -provided by `runtime` package exposed by go language. - -# unsafe safety - -Instead of casting `[]byte` to `sliceHeader` in your application using unsafe. -We can use reflect2 instead. This way, if `sliceHeader` changes in the future, -only reflect2 need to be upgraded. - -reflect2 tries its best to keep the implementation same as reflect (by testing). \ No newline at end of file diff --git a/vendor/github.com/modern-go/reflect2/go_above_17.go b/vendor/github.com/modern-go/reflect2/go_above_17.go deleted file mode 100644 index 5c1cea868..000000000 --- a/vendor/github.com/modern-go/reflect2/go_above_17.go +++ /dev/null @@ -1,8 +0,0 @@ -//+build go1.7 - -package reflect2 - -import "unsafe" - -//go:linkname resolveTypeOff reflect.resolveTypeOff -func resolveTypeOff(rtype unsafe.Pointer, off int32) unsafe.Pointer diff --git a/vendor/github.com/modern-go/reflect2/go_above_19.go b/vendor/github.com/modern-go/reflect2/go_above_19.go deleted file mode 100644 index c7e3b7801..000000000 --- a/vendor/github.com/modern-go/reflect2/go_above_19.go +++ /dev/null @@ -1,14 +0,0 @@ -//+build go1.9 - -package reflect2 - -import ( - "unsafe" -) - -//go:linkname makemap reflect.makemap -func makemap(rtype unsafe.Pointer, cap int) (m unsafe.Pointer) - -func makeMapWithSize(rtype unsafe.Pointer, cap int) unsafe.Pointer { - return makemap(rtype, cap) -} diff --git a/vendor/github.com/modern-go/reflect2/go_below_17.go b/vendor/github.com/modern-go/reflect2/go_below_17.go deleted file mode 100644 index 65a93c889..000000000 --- a/vendor/github.com/modern-go/reflect2/go_below_17.go +++ /dev/null @@ -1,9 +0,0 @@ -//+build !go1.7 - -package reflect2 - -import "unsafe" - -func resolveTypeOff(rtype unsafe.Pointer, off int32) unsafe.Pointer { - return nil -} diff --git a/vendor/github.com/modern-go/reflect2/go_below_19.go b/vendor/github.com/modern-go/reflect2/go_below_19.go deleted file mode 100644 index b050ef70c..000000000 --- a/vendor/github.com/modern-go/reflect2/go_below_19.go +++ /dev/null @@ -1,14 +0,0 @@ -//+build !go1.9 - -package reflect2 - -import ( - "unsafe" -) - -//go:linkname makemap reflect.makemap -func makemap(rtype unsafe.Pointer) (m unsafe.Pointer) - -func makeMapWithSize(rtype unsafe.Pointer, cap int) unsafe.Pointer { - return makemap(rtype) -} diff --git a/vendor/github.com/modern-go/reflect2/reflect2.go b/vendor/github.com/modern-go/reflect2/reflect2.go deleted file mode 100644 index 63b49c799..000000000 --- a/vendor/github.com/modern-go/reflect2/reflect2.go +++ /dev/null @@ -1,298 +0,0 @@ -package reflect2 - -import ( - "github.com/modern-go/concurrent" - "reflect" - "unsafe" -) - -type Type interface { - Kind() reflect.Kind - // New return pointer to data of this type - New() interface{} - // UnsafeNew return the allocated space pointed by unsafe.Pointer - UnsafeNew() unsafe.Pointer - // PackEFace cast a unsafe pointer to object represented pointer - PackEFace(ptr unsafe.Pointer) interface{} - // Indirect dereference object represented pointer to this type - Indirect(obj interface{}) interface{} - // UnsafeIndirect dereference pointer to this type - UnsafeIndirect(ptr unsafe.Pointer) interface{} - // Type1 returns reflect.Type - Type1() reflect.Type - Implements(thatType Type) bool - String() string - RType() uintptr - // interface{} of this type has pointer like behavior - LikePtr() bool - IsNullable() bool - IsNil(obj interface{}) bool - UnsafeIsNil(ptr unsafe.Pointer) bool - Set(obj interface{}, val interface{}) - UnsafeSet(ptr unsafe.Pointer, val unsafe.Pointer) - AssignableTo(anotherType Type) bool -} - -type ListType interface { - Type - Elem() Type - SetIndex(obj interface{}, index int, elem interface{}) - UnsafeSetIndex(obj unsafe.Pointer, index int, elem unsafe.Pointer) - GetIndex(obj interface{}, index int) interface{} - UnsafeGetIndex(obj unsafe.Pointer, index int) unsafe.Pointer -} - -type ArrayType interface { - ListType - Len() int -} - -type SliceType interface { - ListType - MakeSlice(length int, cap int) interface{} - UnsafeMakeSlice(length int, cap int) unsafe.Pointer - Grow(obj interface{}, newLength int) - UnsafeGrow(ptr unsafe.Pointer, newLength int) - Append(obj interface{}, elem interface{}) - UnsafeAppend(obj unsafe.Pointer, elem unsafe.Pointer) - LengthOf(obj interface{}) int - UnsafeLengthOf(ptr unsafe.Pointer) int - SetNil(obj interface{}) - UnsafeSetNil(ptr unsafe.Pointer) - Cap(obj interface{}) int - UnsafeCap(ptr unsafe.Pointer) int -} - -type StructType interface { - Type - NumField() int - Field(i int) StructField - FieldByName(name string) StructField - FieldByIndex(index []int) StructField - FieldByNameFunc(match func(string) bool) StructField -} - -type StructField interface { - Offset() uintptr - Name() string - PkgPath() string - Type() Type - Tag() reflect.StructTag - Index() []int - Anonymous() bool - Set(obj interface{}, value interface{}) - UnsafeSet(obj unsafe.Pointer, value unsafe.Pointer) - Get(obj interface{}) interface{} - UnsafeGet(obj unsafe.Pointer) unsafe.Pointer -} - -type MapType interface { - Type - Key() Type - Elem() Type - MakeMap(cap int) interface{} - UnsafeMakeMap(cap int) unsafe.Pointer - SetIndex(obj interface{}, key interface{}, elem interface{}) - UnsafeSetIndex(obj unsafe.Pointer, key unsafe.Pointer, elem unsafe.Pointer) - TryGetIndex(obj interface{}, key interface{}) (interface{}, bool) - GetIndex(obj interface{}, key interface{}) interface{} - UnsafeGetIndex(obj unsafe.Pointer, key unsafe.Pointer) unsafe.Pointer - Iterate(obj interface{}) MapIterator - UnsafeIterate(obj unsafe.Pointer) MapIterator -} - -type MapIterator interface { - HasNext() bool - Next() (key interface{}, elem interface{}) - UnsafeNext() (key unsafe.Pointer, elem unsafe.Pointer) -} - -type PtrType interface { - Type - Elem() Type -} - -type InterfaceType interface { - NumMethod() int -} - -type Config struct { - UseSafeImplementation bool -} - -type API interface { - TypeOf(obj interface{}) Type - Type2(type1 reflect.Type) Type -} - -var ConfigUnsafe = Config{UseSafeImplementation: false}.Froze() -var ConfigSafe = Config{UseSafeImplementation: true}.Froze() - -type frozenConfig struct { - useSafeImplementation bool - cache *concurrent.Map -} - -func (cfg Config) Froze() *frozenConfig { - return &frozenConfig{ - useSafeImplementation: cfg.UseSafeImplementation, - cache: concurrent.NewMap(), - } -} - -func (cfg *frozenConfig) TypeOf(obj interface{}) Type { - cacheKey := uintptr(unpackEFace(obj).rtype) - typeObj, found := cfg.cache.Load(cacheKey) - if found { - return typeObj.(Type) - } - return cfg.Type2(reflect.TypeOf(obj)) -} - -func (cfg *frozenConfig) Type2(type1 reflect.Type) Type { - if type1 == nil { - return nil - } - cacheKey := uintptr(unpackEFace(type1).data) - typeObj, found := cfg.cache.Load(cacheKey) - if found { - return typeObj.(Type) - } - type2 := cfg.wrapType(type1) - cfg.cache.Store(cacheKey, type2) - return type2 -} - -func (cfg *frozenConfig) wrapType(type1 reflect.Type) Type { - safeType := safeType{Type: type1, cfg: cfg} - switch type1.Kind() { - case reflect.Struct: - if cfg.useSafeImplementation { - return &safeStructType{safeType} - } - return newUnsafeStructType(cfg, type1) - case reflect.Array: - if cfg.useSafeImplementation { - return &safeSliceType{safeType} - } - return newUnsafeArrayType(cfg, type1) - case reflect.Slice: - if cfg.useSafeImplementation { - return &safeSliceType{safeType} - } - return newUnsafeSliceType(cfg, type1) - case reflect.Map: - if cfg.useSafeImplementation { - return &safeMapType{safeType} - } - return newUnsafeMapType(cfg, type1) - case reflect.Ptr, reflect.Chan, reflect.Func: - if cfg.useSafeImplementation { - return &safeMapType{safeType} - } - return newUnsafePtrType(cfg, type1) - case reflect.Interface: - if cfg.useSafeImplementation { - return &safeMapType{safeType} - } - if type1.NumMethod() == 0 { - return newUnsafeEFaceType(cfg, type1) - } - return newUnsafeIFaceType(cfg, type1) - default: - if cfg.useSafeImplementation { - return &safeType - } - return newUnsafeType(cfg, type1) - } -} - -func TypeOf(obj interface{}) Type { - return ConfigUnsafe.TypeOf(obj) -} - -func TypeOfPtr(obj interface{}) PtrType { - return TypeOf(obj).(PtrType) -} - -func Type2(type1 reflect.Type) Type { - if type1 == nil { - return nil - } - return ConfigUnsafe.Type2(type1) -} - -func PtrTo(typ Type) Type { - return Type2(reflect.PtrTo(typ.Type1())) -} - -func PtrOf(obj interface{}) unsafe.Pointer { - return unpackEFace(obj).data -} - -func RTypeOf(obj interface{}) uintptr { - return uintptr(unpackEFace(obj).rtype) -} - -func IsNil(obj interface{}) bool { - if obj == nil { - return true - } - return unpackEFace(obj).data == nil -} - -func IsNullable(kind reflect.Kind) bool { - switch kind { - case reflect.Ptr, reflect.Map, reflect.Chan, reflect.Func, reflect.Slice, reflect.Interface: - return true - } - return false -} - -func likePtrKind(kind reflect.Kind) bool { - switch kind { - case reflect.Ptr, reflect.Map, reflect.Chan, reflect.Func: - return true - } - return false -} - -func likePtrType(typ reflect.Type) bool { - if likePtrKind(typ.Kind()) { - return true - } - if typ.Kind() == reflect.Struct { - if typ.NumField() != 1 { - return false - } - return likePtrType(typ.Field(0).Type) - } - if typ.Kind() == reflect.Array { - if typ.Len() != 1 { - return false - } - return likePtrType(typ.Elem()) - } - return false -} - -// NoEscape hides a pointer from escape analysis. noescape is -// the identity function but escape analysis doesn't think the -// output depends on the input. noescape is inlined and currently -// compiles down to zero instructions. -// USE CAREFULLY! -//go:nosplit -func NoEscape(p unsafe.Pointer) unsafe.Pointer { - x := uintptr(p) - return unsafe.Pointer(x ^ 0) -} - -func UnsafeCastString(str string) []byte { - stringHeader := (*reflect.StringHeader)(unsafe.Pointer(&str)) - sliceHeader := &reflect.SliceHeader{ - Data: stringHeader.Data, - Cap: stringHeader.Len, - Len: stringHeader.Len, - } - return *(*[]byte)(unsafe.Pointer(sliceHeader)) -} diff --git a/vendor/github.com/modern-go/reflect2/reflect2_amd64.s b/vendor/github.com/modern-go/reflect2/reflect2_amd64.s deleted file mode 100644 index e69de29bb..000000000 diff --git a/vendor/github.com/modern-go/reflect2/reflect2_kind.go b/vendor/github.com/modern-go/reflect2/reflect2_kind.go deleted file mode 100644 index 62f299e40..000000000 --- a/vendor/github.com/modern-go/reflect2/reflect2_kind.go +++ /dev/null @@ -1,30 +0,0 @@ -package reflect2 - -import ( - "reflect" - "unsafe" -) - -// DefaultTypeOfKind return the non aliased default type for the kind -func DefaultTypeOfKind(kind reflect.Kind) Type { - return kindTypes[kind] -} - -var kindTypes = map[reflect.Kind]Type{ - reflect.Bool: TypeOf(true), - reflect.Uint8: TypeOf(uint8(0)), - reflect.Int8: TypeOf(int8(0)), - reflect.Uint16: TypeOf(uint16(0)), - reflect.Int16: TypeOf(int16(0)), - reflect.Uint32: TypeOf(uint32(0)), - reflect.Int32: TypeOf(int32(0)), - reflect.Uint64: TypeOf(uint64(0)), - reflect.Int64: TypeOf(int64(0)), - reflect.Uint: TypeOf(uint(0)), - reflect.Int: TypeOf(int(0)), - reflect.Float32: TypeOf(float32(0)), - reflect.Float64: TypeOf(float64(0)), - reflect.Uintptr: TypeOf(uintptr(0)), - reflect.String: TypeOf(""), - reflect.UnsafePointer: TypeOf(unsafe.Pointer(nil)), -} diff --git a/vendor/github.com/modern-go/reflect2/relfect2_386.s b/vendor/github.com/modern-go/reflect2/relfect2_386.s deleted file mode 100644 index e69de29bb..000000000 diff --git a/vendor/github.com/modern-go/reflect2/relfect2_amd64p32.s b/vendor/github.com/modern-go/reflect2/relfect2_amd64p32.s deleted file mode 100644 index e69de29bb..000000000 diff --git a/vendor/github.com/modern-go/reflect2/relfect2_arm.s b/vendor/github.com/modern-go/reflect2/relfect2_arm.s deleted file mode 100644 index e69de29bb..000000000 diff --git a/vendor/github.com/modern-go/reflect2/relfect2_arm64.s b/vendor/github.com/modern-go/reflect2/relfect2_arm64.s deleted file mode 100644 index e69de29bb..000000000 diff --git a/vendor/github.com/modern-go/reflect2/relfect2_mips64x.s b/vendor/github.com/modern-go/reflect2/relfect2_mips64x.s deleted file mode 100644 index e69de29bb..000000000 diff --git a/vendor/github.com/modern-go/reflect2/relfect2_mipsx.s b/vendor/github.com/modern-go/reflect2/relfect2_mipsx.s deleted file mode 100644 index e69de29bb..000000000 diff --git a/vendor/github.com/modern-go/reflect2/relfect2_ppc64x.s b/vendor/github.com/modern-go/reflect2/relfect2_ppc64x.s deleted file mode 100644 index e69de29bb..000000000 diff --git a/vendor/github.com/modern-go/reflect2/relfect2_s390x.s b/vendor/github.com/modern-go/reflect2/relfect2_s390x.s deleted file mode 100644 index e69de29bb..000000000 diff --git a/vendor/github.com/modern-go/reflect2/safe_field.go b/vendor/github.com/modern-go/reflect2/safe_field.go deleted file mode 100644 index d4ba1f4f8..000000000 --- a/vendor/github.com/modern-go/reflect2/safe_field.go +++ /dev/null @@ -1,58 +0,0 @@ -package reflect2 - -import ( - "reflect" - "unsafe" -) - -type safeField struct { - reflect.StructField -} - -func (field *safeField) Offset() uintptr { - return field.StructField.Offset -} - -func (field *safeField) Name() string { - return field.StructField.Name -} - -func (field *safeField) PkgPath() string { - return field.StructField.PkgPath -} - -func (field *safeField) Type() Type { - panic("not implemented") -} - -func (field *safeField) Tag() reflect.StructTag { - return field.StructField.Tag -} - -func (field *safeField) Index() []int { - return field.StructField.Index -} - -func (field *safeField) Anonymous() bool { - return field.StructField.Anonymous -} - -func (field *safeField) Set(obj interface{}, value interface{}) { - val := reflect.ValueOf(obj).Elem() - val.FieldByIndex(field.Index()).Set(reflect.ValueOf(value).Elem()) -} - -func (field *safeField) UnsafeSet(obj unsafe.Pointer, value unsafe.Pointer) { - panic("unsafe operation is not supported") -} - -func (field *safeField) Get(obj interface{}) interface{} { - val := reflect.ValueOf(obj).Elem().FieldByIndex(field.Index()) - ptr := reflect.New(val.Type()) - ptr.Elem().Set(val) - return ptr.Interface() -} - -func (field *safeField) UnsafeGet(obj unsafe.Pointer) unsafe.Pointer { - panic("does not support unsafe operation") -} diff --git a/vendor/github.com/modern-go/reflect2/safe_map.go b/vendor/github.com/modern-go/reflect2/safe_map.go deleted file mode 100644 index 88362205a..000000000 --- a/vendor/github.com/modern-go/reflect2/safe_map.go +++ /dev/null @@ -1,101 +0,0 @@ -package reflect2 - -import ( - "reflect" - "unsafe" -) - -type safeMapType struct { - safeType -} - -func (type2 *safeMapType) Key() Type { - return type2.safeType.cfg.Type2(type2.Type.Key()) -} - -func (type2 *safeMapType) MakeMap(cap int) interface{} { - ptr := reflect.New(type2.Type) - ptr.Elem().Set(reflect.MakeMap(type2.Type)) - return ptr.Interface() -} - -func (type2 *safeMapType) UnsafeMakeMap(cap int) unsafe.Pointer { - panic("does not support unsafe operation") -} - -func (type2 *safeMapType) SetIndex(obj interface{}, key interface{}, elem interface{}) { - keyVal := reflect.ValueOf(key) - elemVal := reflect.ValueOf(elem) - val := reflect.ValueOf(obj) - val.Elem().SetMapIndex(keyVal.Elem(), elemVal.Elem()) -} - -func (type2 *safeMapType) UnsafeSetIndex(obj unsafe.Pointer, key unsafe.Pointer, elem unsafe.Pointer) { - panic("does not support unsafe operation") -} - -func (type2 *safeMapType) TryGetIndex(obj interface{}, key interface{}) (interface{}, bool) { - keyVal := reflect.ValueOf(key) - if key == nil { - keyVal = reflect.New(type2.Type.Key()).Elem() - } - val := reflect.ValueOf(obj).MapIndex(keyVal) - if !val.IsValid() { - return nil, false - } - return val.Interface(), true -} - -func (type2 *safeMapType) GetIndex(obj interface{}, key interface{}) interface{} { - val := reflect.ValueOf(obj).Elem() - keyVal := reflect.ValueOf(key).Elem() - elemVal := val.MapIndex(keyVal) - if !elemVal.IsValid() { - ptr := reflect.New(reflect.PtrTo(val.Type().Elem())) - return ptr.Elem().Interface() - } - ptr := reflect.New(elemVal.Type()) - ptr.Elem().Set(elemVal) - return ptr.Interface() -} - -func (type2 *safeMapType) UnsafeGetIndex(obj unsafe.Pointer, key unsafe.Pointer) unsafe.Pointer { - panic("does not support unsafe operation") -} - -func (type2 *safeMapType) Iterate(obj interface{}) MapIterator { - m := reflect.ValueOf(obj).Elem() - return &safeMapIterator{ - m: m, - keys: m.MapKeys(), - } -} - -func (type2 *safeMapType) UnsafeIterate(obj unsafe.Pointer) MapIterator { - panic("does not support unsafe operation") -} - -type safeMapIterator struct { - i int - m reflect.Value - keys []reflect.Value -} - -func (iter *safeMapIterator) HasNext() bool { - return iter.i != len(iter.keys) -} - -func (iter *safeMapIterator) Next() (interface{}, interface{}) { - key := iter.keys[iter.i] - elem := iter.m.MapIndex(key) - iter.i += 1 - keyPtr := reflect.New(key.Type()) - keyPtr.Elem().Set(key) - elemPtr := reflect.New(elem.Type()) - elemPtr.Elem().Set(elem) - return keyPtr.Interface(), elemPtr.Interface() -} - -func (iter *safeMapIterator) UnsafeNext() (unsafe.Pointer, unsafe.Pointer) { - panic("does not support unsafe operation") -} diff --git a/vendor/github.com/modern-go/reflect2/safe_slice.go b/vendor/github.com/modern-go/reflect2/safe_slice.go deleted file mode 100644 index bcce6fd20..000000000 --- a/vendor/github.com/modern-go/reflect2/safe_slice.go +++ /dev/null @@ -1,92 +0,0 @@ -package reflect2 - -import ( - "reflect" - "unsafe" -) - -type safeSliceType struct { - safeType -} - -func (type2 *safeSliceType) SetIndex(obj interface{}, index int, value interface{}) { - val := reflect.ValueOf(obj).Elem() - elem := reflect.ValueOf(value).Elem() - val.Index(index).Set(elem) -} - -func (type2 *safeSliceType) UnsafeSetIndex(obj unsafe.Pointer, index int, value unsafe.Pointer) { - panic("does not support unsafe operation") -} - -func (type2 *safeSliceType) GetIndex(obj interface{}, index int) interface{} { - val := reflect.ValueOf(obj).Elem() - elem := val.Index(index) - ptr := reflect.New(elem.Type()) - ptr.Elem().Set(elem) - return ptr.Interface() -} - -func (type2 *safeSliceType) UnsafeGetIndex(obj unsafe.Pointer, index int) unsafe.Pointer { - panic("does not support unsafe operation") -} - -func (type2 *safeSliceType) MakeSlice(length int, cap int) interface{} { - val := reflect.MakeSlice(type2.Type, length, cap) - ptr := reflect.New(val.Type()) - ptr.Elem().Set(val) - return ptr.Interface() -} - -func (type2 *safeSliceType) UnsafeMakeSlice(length int, cap int) unsafe.Pointer { - panic("does not support unsafe operation") -} - -func (type2 *safeSliceType) Grow(obj interface{}, newLength int) { - oldCap := type2.Cap(obj) - oldSlice := reflect.ValueOf(obj).Elem() - delta := newLength - oldCap - deltaVals := make([]reflect.Value, delta) - newSlice := reflect.Append(oldSlice, deltaVals...) - oldSlice.Set(newSlice) -} - -func (type2 *safeSliceType) UnsafeGrow(ptr unsafe.Pointer, newLength int) { - panic("does not support unsafe operation") -} - -func (type2 *safeSliceType) Append(obj interface{}, elem interface{}) { - val := reflect.ValueOf(obj).Elem() - elemVal := reflect.ValueOf(elem).Elem() - newVal := reflect.Append(val, elemVal) - val.Set(newVal) -} - -func (type2 *safeSliceType) UnsafeAppend(obj unsafe.Pointer, elem unsafe.Pointer) { - panic("does not support unsafe operation") -} - -func (type2 *safeSliceType) SetNil(obj interface{}) { - val := reflect.ValueOf(obj).Elem() - val.Set(reflect.Zero(val.Type())) -} - -func (type2 *safeSliceType) UnsafeSetNil(ptr unsafe.Pointer) { - panic("does not support unsafe operation") -} - -func (type2 *safeSliceType) LengthOf(obj interface{}) int { - return reflect.ValueOf(obj).Elem().Len() -} - -func (type2 *safeSliceType) UnsafeLengthOf(ptr unsafe.Pointer) int { - panic("does not support unsafe operation") -} - -func (type2 *safeSliceType) Cap(obj interface{}) int { - return reflect.ValueOf(obj).Elem().Cap() -} - -func (type2 *safeSliceType) UnsafeCap(ptr unsafe.Pointer) int { - panic("does not support unsafe operation") -} diff --git a/vendor/github.com/modern-go/reflect2/safe_struct.go b/vendor/github.com/modern-go/reflect2/safe_struct.go deleted file mode 100644 index e5fb9b313..000000000 --- a/vendor/github.com/modern-go/reflect2/safe_struct.go +++ /dev/null @@ -1,29 +0,0 @@ -package reflect2 - -type safeStructType struct { - safeType -} - -func (type2 *safeStructType) FieldByName(name string) StructField { - field, found := type2.Type.FieldByName(name) - if !found { - panic("field " + name + " not found") - } - return &safeField{StructField: field} -} - -func (type2 *safeStructType) Field(i int) StructField { - return &safeField{StructField: type2.Type.Field(i)} -} - -func (type2 *safeStructType) FieldByIndex(index []int) StructField { - return &safeField{StructField: type2.Type.FieldByIndex(index)} -} - -func (type2 *safeStructType) FieldByNameFunc(match func(string) bool) StructField { - field, found := type2.Type.FieldByNameFunc(match) - if !found { - panic("field match condition not found in " + type2.Type.String()) - } - return &safeField{StructField: field} -} diff --git a/vendor/github.com/modern-go/reflect2/safe_type.go b/vendor/github.com/modern-go/reflect2/safe_type.go deleted file mode 100644 index ee4e7bb6e..000000000 --- a/vendor/github.com/modern-go/reflect2/safe_type.go +++ /dev/null @@ -1,78 +0,0 @@ -package reflect2 - -import ( - "reflect" - "unsafe" -) - -type safeType struct { - reflect.Type - cfg *frozenConfig -} - -func (type2 *safeType) New() interface{} { - return reflect.New(type2.Type).Interface() -} - -func (type2 *safeType) UnsafeNew() unsafe.Pointer { - panic("does not support unsafe operation") -} - -func (type2 *safeType) Elem() Type { - return type2.cfg.Type2(type2.Type.Elem()) -} - -func (type2 *safeType) Type1() reflect.Type { - return type2.Type -} - -func (type2 *safeType) PackEFace(ptr unsafe.Pointer) interface{} { - panic("does not support unsafe operation") -} - -func (type2 *safeType) Implements(thatType Type) bool { - return type2.Type.Implements(thatType.Type1()) -} - -func (type2 *safeType) RType() uintptr { - panic("does not support unsafe operation") -} - -func (type2 *safeType) Indirect(obj interface{}) interface{} { - return reflect.Indirect(reflect.ValueOf(obj)).Interface() -} - -func (type2 *safeType) UnsafeIndirect(ptr unsafe.Pointer) interface{} { - panic("does not support unsafe operation") -} - -func (type2 *safeType) LikePtr() bool { - panic("does not support unsafe operation") -} - -func (type2 *safeType) IsNullable() bool { - return IsNullable(type2.Kind()) -} - -func (type2 *safeType) IsNil(obj interface{}) bool { - if obj == nil { - return true - } - return reflect.ValueOf(obj).Elem().IsNil() -} - -func (type2 *safeType) UnsafeIsNil(ptr unsafe.Pointer) bool { - panic("does not support unsafe operation") -} - -func (type2 *safeType) Set(obj interface{}, val interface{}) { - reflect.ValueOf(obj).Elem().Set(reflect.ValueOf(val).Elem()) -} - -func (type2 *safeType) UnsafeSet(ptr unsafe.Pointer, val unsafe.Pointer) { - panic("does not support unsafe operation") -} - -func (type2 *safeType) AssignableTo(anotherType Type) bool { - return type2.Type1().AssignableTo(anotherType.Type1()) -} diff --git a/vendor/github.com/modern-go/reflect2/test.sh b/vendor/github.com/modern-go/reflect2/test.sh deleted file mode 100755 index fbcef7309..000000000 --- a/vendor/github.com/modern-go/reflect2/test.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -set -e -echo "" > coverage.txt - -for d in $(go list ./... | grep -v vendor); do - go test -coverprofile=profile.out -coverpkg=github.com/modern-go/reflect2 $d - if [ -f profile.out ]; then - cat profile.out >> coverage.txt - rm profile.out - fi -done diff --git a/vendor/github.com/modern-go/reflect2/type_map.go b/vendor/github.com/modern-go/reflect2/type_map.go deleted file mode 100644 index 6d489112f..000000000 --- a/vendor/github.com/modern-go/reflect2/type_map.go +++ /dev/null @@ -1,103 +0,0 @@ -package reflect2 - -import ( - "reflect" - "runtime" - "strings" - "unsafe" -) - -// typelinks1 for 1.5 ~ 1.6 -//go:linkname typelinks1 reflect.typelinks -func typelinks1() [][]unsafe.Pointer - -// typelinks2 for 1.7 ~ -//go:linkname typelinks2 reflect.typelinks -func typelinks2() (sections []unsafe.Pointer, offset [][]int32) - -var types = map[string]reflect.Type{} -var packages = map[string]map[string]reflect.Type{} - -func init() { - ver := runtime.Version() - if ver == "go1.5" || strings.HasPrefix(ver, "go1.5.") { - loadGo15Types() - } else if ver == "go1.6" || strings.HasPrefix(ver, "go1.6.") { - loadGo15Types() - } else { - loadGo17Types() - } -} - -func loadGo15Types() { - var obj interface{} = reflect.TypeOf(0) - typePtrss := typelinks1() - for _, typePtrs := range typePtrss { - for _, typePtr := range typePtrs { - (*emptyInterface)(unsafe.Pointer(&obj)).word = typePtr - typ := obj.(reflect.Type) - if typ.Kind() == reflect.Ptr && typ.Elem().Kind() == reflect.Struct { - loadedType := typ.Elem() - pkgTypes := packages[loadedType.PkgPath()] - if pkgTypes == nil { - pkgTypes = map[string]reflect.Type{} - packages[loadedType.PkgPath()] = pkgTypes - } - types[loadedType.String()] = loadedType - pkgTypes[loadedType.Name()] = loadedType - } - if typ.Kind() == reflect.Slice && typ.Elem().Kind() == reflect.Ptr && - typ.Elem().Elem().Kind() == reflect.Struct { - loadedType := typ.Elem().Elem() - pkgTypes := packages[loadedType.PkgPath()] - if pkgTypes == nil { - pkgTypes = map[string]reflect.Type{} - packages[loadedType.PkgPath()] = pkgTypes - } - types[loadedType.String()] = loadedType - pkgTypes[loadedType.Name()] = loadedType - } - } - } -} - -func loadGo17Types() { - var obj interface{} = reflect.TypeOf(0) - sections, offset := typelinks2() - for i, offs := range offset { - rodata := sections[i] - for _, off := range offs { - (*emptyInterface)(unsafe.Pointer(&obj)).word = resolveTypeOff(unsafe.Pointer(rodata), off) - typ := obj.(reflect.Type) - if typ.Kind() == reflect.Ptr && typ.Elem().Kind() == reflect.Struct { - loadedType := typ.Elem() - pkgTypes := packages[loadedType.PkgPath()] - if pkgTypes == nil { - pkgTypes = map[string]reflect.Type{} - packages[loadedType.PkgPath()] = pkgTypes - } - types[loadedType.String()] = loadedType - pkgTypes[loadedType.Name()] = loadedType - } - } - } -} - -type emptyInterface struct { - typ unsafe.Pointer - word unsafe.Pointer -} - -// TypeByName return the type by its name, just like Class.forName in java -func TypeByName(typeName string) Type { - return Type2(types[typeName]) -} - -// TypeByPackageName return the type by its package and name -func TypeByPackageName(pkgPath string, name string) Type { - pkgTypes := packages[pkgPath] - if pkgTypes == nil { - return nil - } - return Type2(pkgTypes[name]) -} diff --git a/vendor/github.com/modern-go/reflect2/unsafe_array.go b/vendor/github.com/modern-go/reflect2/unsafe_array.go deleted file mode 100644 index 76cbdba6e..000000000 --- a/vendor/github.com/modern-go/reflect2/unsafe_array.go +++ /dev/null @@ -1,65 +0,0 @@ -package reflect2 - -import ( - "reflect" - "unsafe" -) - -type UnsafeArrayType struct { - unsafeType - elemRType unsafe.Pointer - pElemRType unsafe.Pointer - elemSize uintptr - likePtr bool -} - -func newUnsafeArrayType(cfg *frozenConfig, type1 reflect.Type) *UnsafeArrayType { - return &UnsafeArrayType{ - unsafeType: *newUnsafeType(cfg, type1), - elemRType: unpackEFace(type1.Elem()).data, - pElemRType: unpackEFace(reflect.PtrTo(type1.Elem())).data, - elemSize: type1.Elem().Size(), - likePtr: likePtrType(type1), - } -} - -func (type2 *UnsafeArrayType) LikePtr() bool { - return type2.likePtr -} - -func (type2 *UnsafeArrayType) Indirect(obj interface{}) interface{} { - objEFace := unpackEFace(obj) - assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeIndirect(objEFace.data) -} - -func (type2 *UnsafeArrayType) UnsafeIndirect(ptr unsafe.Pointer) interface{} { - if type2.likePtr { - return packEFace(type2.rtype, *(*unsafe.Pointer)(ptr)) - } - return packEFace(type2.rtype, ptr) -} - -func (type2 *UnsafeArrayType) SetIndex(obj interface{}, index int, elem interface{}) { - objEFace := unpackEFace(obj) - assertType("ArrayType.SetIndex argument 1", type2.ptrRType, objEFace.rtype) - elemEFace := unpackEFace(elem) - assertType("ArrayType.SetIndex argument 3", type2.pElemRType, elemEFace.rtype) - type2.UnsafeSetIndex(objEFace.data, index, elemEFace.data) -} - -func (type2 *UnsafeArrayType) UnsafeSetIndex(obj unsafe.Pointer, index int, elem unsafe.Pointer) { - elemPtr := arrayAt(obj, index, type2.elemSize, "i < s.Len") - typedmemmove(type2.elemRType, elemPtr, elem) -} - -func (type2 *UnsafeArrayType) GetIndex(obj interface{}, index int) interface{} { - objEFace := unpackEFace(obj) - assertType("ArrayType.GetIndex argument 1", type2.ptrRType, objEFace.rtype) - elemPtr := type2.UnsafeGetIndex(objEFace.data, index) - return packEFace(type2.pElemRType, elemPtr) -} - -func (type2 *UnsafeArrayType) UnsafeGetIndex(obj unsafe.Pointer, index int) unsafe.Pointer { - return arrayAt(obj, index, type2.elemSize, "i < s.Len") -} diff --git a/vendor/github.com/modern-go/reflect2/unsafe_eface.go b/vendor/github.com/modern-go/reflect2/unsafe_eface.go deleted file mode 100644 index 805010f3a..000000000 --- a/vendor/github.com/modern-go/reflect2/unsafe_eface.go +++ /dev/null @@ -1,59 +0,0 @@ -package reflect2 - -import ( - "reflect" - "unsafe" -) - -type eface struct { - rtype unsafe.Pointer - data unsafe.Pointer -} - -func unpackEFace(obj interface{}) *eface { - return (*eface)(unsafe.Pointer(&obj)) -} - -func packEFace(rtype unsafe.Pointer, data unsafe.Pointer) interface{} { - var i interface{} - e := (*eface)(unsafe.Pointer(&i)) - e.rtype = rtype - e.data = data - return i -} - -type UnsafeEFaceType struct { - unsafeType -} - -func newUnsafeEFaceType(cfg *frozenConfig, type1 reflect.Type) *UnsafeEFaceType { - return &UnsafeEFaceType{ - unsafeType: *newUnsafeType(cfg, type1), - } -} - -func (type2 *UnsafeEFaceType) IsNil(obj interface{}) bool { - if obj == nil { - return true - } - objEFace := unpackEFace(obj) - assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeIsNil(objEFace.data) -} - -func (type2 *UnsafeEFaceType) UnsafeIsNil(ptr unsafe.Pointer) bool { - if ptr == nil { - return true - } - return unpackEFace(*(*interface{})(ptr)).data == nil -} - -func (type2 *UnsafeEFaceType) Indirect(obj interface{}) interface{} { - objEFace := unpackEFace(obj) - assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeIndirect(objEFace.data) -} - -func (type2 *UnsafeEFaceType) UnsafeIndirect(ptr unsafe.Pointer) interface{} { - return *(*interface{})(ptr) -} diff --git a/vendor/github.com/modern-go/reflect2/unsafe_field.go b/vendor/github.com/modern-go/reflect2/unsafe_field.go deleted file mode 100644 index 5eb53130a..000000000 --- a/vendor/github.com/modern-go/reflect2/unsafe_field.go +++ /dev/null @@ -1,74 +0,0 @@ -package reflect2 - -import ( - "reflect" - "unsafe" -) - -type UnsafeStructField struct { - reflect.StructField - structType *UnsafeStructType - rtype unsafe.Pointer - ptrRType unsafe.Pointer -} - -func newUnsafeStructField(structType *UnsafeStructType, structField reflect.StructField) *UnsafeStructField { - return &UnsafeStructField{ - StructField: structField, - rtype: unpackEFace(structField.Type).data, - ptrRType: unpackEFace(reflect.PtrTo(structField.Type)).data, - structType: structType, - } -} - -func (field *UnsafeStructField) Offset() uintptr { - return field.StructField.Offset -} - -func (field *UnsafeStructField) Name() string { - return field.StructField.Name -} - -func (field *UnsafeStructField) PkgPath() string { - return field.StructField.PkgPath -} - -func (field *UnsafeStructField) Type() Type { - return field.structType.cfg.Type2(field.StructField.Type) -} - -func (field *UnsafeStructField) Tag() reflect.StructTag { - return field.StructField.Tag -} - -func (field *UnsafeStructField) Index() []int { - return field.StructField.Index -} - -func (field *UnsafeStructField) Anonymous() bool { - return field.StructField.Anonymous -} - -func (field *UnsafeStructField) Set(obj interface{}, value interface{}) { - objEFace := unpackEFace(obj) - assertType("StructField.SetIndex argument 1", field.structType.ptrRType, objEFace.rtype) - valueEFace := unpackEFace(value) - assertType("StructField.SetIndex argument 2", field.ptrRType, valueEFace.rtype) - field.UnsafeSet(objEFace.data, valueEFace.data) -} - -func (field *UnsafeStructField) UnsafeSet(obj unsafe.Pointer, value unsafe.Pointer) { - fieldPtr := add(obj, field.StructField.Offset, "same as non-reflect &v.field") - typedmemmove(field.rtype, fieldPtr, value) -} - -func (field *UnsafeStructField) Get(obj interface{}) interface{} { - objEFace := unpackEFace(obj) - assertType("StructField.GetIndex argument 1", field.structType.ptrRType, objEFace.rtype) - value := field.UnsafeGet(objEFace.data) - return packEFace(field.ptrRType, value) -} - -func (field *UnsafeStructField) UnsafeGet(obj unsafe.Pointer) unsafe.Pointer { - return add(obj, field.StructField.Offset, "same as non-reflect &v.field") -} diff --git a/vendor/github.com/modern-go/reflect2/unsafe_iface.go b/vendor/github.com/modern-go/reflect2/unsafe_iface.go deleted file mode 100644 index b60195533..000000000 --- a/vendor/github.com/modern-go/reflect2/unsafe_iface.go +++ /dev/null @@ -1,64 +0,0 @@ -package reflect2 - -import ( - "reflect" - "unsafe" -) - -type iface struct { - itab *itab - data unsafe.Pointer -} - -type itab struct { - ignore unsafe.Pointer - rtype unsafe.Pointer -} - -func IFaceToEFace(ptr unsafe.Pointer) interface{} { - iface := (*iface)(ptr) - if iface.itab == nil { - return nil - } - return packEFace(iface.itab.rtype, iface.data) -} - -type UnsafeIFaceType struct { - unsafeType -} - -func newUnsafeIFaceType(cfg *frozenConfig, type1 reflect.Type) *UnsafeIFaceType { - return &UnsafeIFaceType{ - unsafeType: *newUnsafeType(cfg, type1), - } -} - -func (type2 *UnsafeIFaceType) Indirect(obj interface{}) interface{} { - objEFace := unpackEFace(obj) - assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeIndirect(objEFace.data) -} - -func (type2 *UnsafeIFaceType) UnsafeIndirect(ptr unsafe.Pointer) interface{} { - return IFaceToEFace(ptr) -} - -func (type2 *UnsafeIFaceType) IsNil(obj interface{}) bool { - if obj == nil { - return true - } - objEFace := unpackEFace(obj) - assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeIsNil(objEFace.data) -} - -func (type2 *UnsafeIFaceType) UnsafeIsNil(ptr unsafe.Pointer) bool { - if ptr == nil { - return true - } - iface := (*iface)(ptr) - if iface.itab == nil { - return true - } - return false -} diff --git a/vendor/github.com/modern-go/reflect2/unsafe_link.go b/vendor/github.com/modern-go/reflect2/unsafe_link.go deleted file mode 100644 index 57229c8db..000000000 --- a/vendor/github.com/modern-go/reflect2/unsafe_link.go +++ /dev/null @@ -1,70 +0,0 @@ -package reflect2 - -import "unsafe" - -//go:linkname unsafe_New reflect.unsafe_New -func unsafe_New(rtype unsafe.Pointer) unsafe.Pointer - -//go:linkname typedmemmove reflect.typedmemmove -func typedmemmove(rtype unsafe.Pointer, dst, src unsafe.Pointer) - -//go:linkname unsafe_NewArray reflect.unsafe_NewArray -func unsafe_NewArray(rtype unsafe.Pointer, length int) unsafe.Pointer - -// typedslicecopy copies a slice of elemType values from src to dst, -// returning the number of elements copied. -//go:linkname typedslicecopy reflect.typedslicecopy -//go:noescape -func typedslicecopy(elemType unsafe.Pointer, dst, src sliceHeader) int - -//go:linkname mapassign reflect.mapassign -//go:noescape -func mapassign(rtype unsafe.Pointer, m unsafe.Pointer, key, val unsafe.Pointer) - -//go:linkname mapaccess reflect.mapaccess -//go:noescape -func mapaccess(rtype unsafe.Pointer, m unsafe.Pointer, key unsafe.Pointer) (val unsafe.Pointer) - -// m escapes into the return value, but the caller of mapiterinit -// doesn't let the return value escape. -//go:noescape -//go:linkname mapiterinit reflect.mapiterinit -func mapiterinit(rtype unsafe.Pointer, m unsafe.Pointer) *hiter - -//go:noescape -//go:linkname mapiternext reflect.mapiternext -func mapiternext(it *hiter) - -//go:linkname ifaceE2I reflect.ifaceE2I -func ifaceE2I(rtype unsafe.Pointer, src interface{}, dst unsafe.Pointer) - -// A hash iteration structure. -// If you modify hiter, also change cmd/internal/gc/reflect.go to indicate -// the layout of this structure. -type hiter struct { - key unsafe.Pointer // Must be in first position. Write nil to indicate iteration end (see cmd/internal/gc/range.go). - value unsafe.Pointer // Must be in second position (see cmd/internal/gc/range.go). - // rest fields are ignored -} - -// add returns p+x. -// -// The whySafe string is ignored, so that the function still inlines -// as efficiently as p+x, but all call sites should use the string to -// record why the addition is safe, which is to say why the addition -// does not cause x to advance to the very end of p's allocation -// and therefore point incorrectly at the next block in memory. -func add(p unsafe.Pointer, x uintptr, whySafe string) unsafe.Pointer { - return unsafe.Pointer(uintptr(p) + x) -} - -// arrayAt returns the i-th element of p, -// an array whose elements are eltSize bytes wide. -// The array pointed at by p must have at least i+1 elements: -// it is invalid (but impossible to check here) to pass i >= len, -// because then the result will point outside the array. -// whySafe must explain why i < len. (Passing "i < len" is fine; -// the benefit is to surface this assumption at the call site.) -func arrayAt(p unsafe.Pointer, i int, eltSize uintptr, whySafe string) unsafe.Pointer { - return add(p, uintptr(i)*eltSize, "i < len") -} diff --git a/vendor/github.com/modern-go/reflect2/unsafe_map.go b/vendor/github.com/modern-go/reflect2/unsafe_map.go deleted file mode 100644 index f2e76e6bb..000000000 --- a/vendor/github.com/modern-go/reflect2/unsafe_map.go +++ /dev/null @@ -1,138 +0,0 @@ -package reflect2 - -import ( - "reflect" - "unsafe" -) - -type UnsafeMapType struct { - unsafeType - pKeyRType unsafe.Pointer - pElemRType unsafe.Pointer -} - -func newUnsafeMapType(cfg *frozenConfig, type1 reflect.Type) MapType { - return &UnsafeMapType{ - unsafeType: *newUnsafeType(cfg, type1), - pKeyRType: unpackEFace(reflect.PtrTo(type1.Key())).data, - pElemRType: unpackEFace(reflect.PtrTo(type1.Elem())).data, - } -} - -func (type2 *UnsafeMapType) IsNil(obj interface{}) bool { - if obj == nil { - return true - } - objEFace := unpackEFace(obj) - assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeIsNil(objEFace.data) -} - -func (type2 *UnsafeMapType) UnsafeIsNil(ptr unsafe.Pointer) bool { - if ptr == nil { - return true - } - return *(*unsafe.Pointer)(ptr) == nil -} - -func (type2 *UnsafeMapType) LikePtr() bool { - return true -} - -func (type2 *UnsafeMapType) Indirect(obj interface{}) interface{} { - objEFace := unpackEFace(obj) - assertType("MapType.Indirect argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeIndirect(objEFace.data) -} - -func (type2 *UnsafeMapType) UnsafeIndirect(ptr unsafe.Pointer) interface{} { - return packEFace(type2.rtype, *(*unsafe.Pointer)(ptr)) -} - -func (type2 *UnsafeMapType) Key() Type { - return type2.cfg.Type2(type2.Type.Key()) -} - -func (type2 *UnsafeMapType) MakeMap(cap int) interface{} { - return packEFace(type2.ptrRType, type2.UnsafeMakeMap(cap)) -} - -func (type2 *UnsafeMapType) UnsafeMakeMap(cap int) unsafe.Pointer { - m := makeMapWithSize(type2.rtype, cap) - return unsafe.Pointer(&m) -} - -func (type2 *UnsafeMapType) SetIndex(obj interface{}, key interface{}, elem interface{}) { - objEFace := unpackEFace(obj) - assertType("MapType.SetIndex argument 1", type2.ptrRType, objEFace.rtype) - keyEFace := unpackEFace(key) - assertType("MapType.SetIndex argument 2", type2.pKeyRType, keyEFace.rtype) - elemEFace := unpackEFace(elem) - assertType("MapType.SetIndex argument 3", type2.pElemRType, elemEFace.rtype) - type2.UnsafeSetIndex(objEFace.data, keyEFace.data, elemEFace.data) -} - -func (type2 *UnsafeMapType) UnsafeSetIndex(obj unsafe.Pointer, key unsafe.Pointer, elem unsafe.Pointer) { - mapassign(type2.rtype, *(*unsafe.Pointer)(obj), key, elem) -} - -func (type2 *UnsafeMapType) TryGetIndex(obj interface{}, key interface{}) (interface{}, bool) { - objEFace := unpackEFace(obj) - assertType("MapType.TryGetIndex argument 1", type2.ptrRType, objEFace.rtype) - keyEFace := unpackEFace(key) - assertType("MapType.TryGetIndex argument 2", type2.pKeyRType, keyEFace.rtype) - elemPtr := type2.UnsafeGetIndex(objEFace.data, keyEFace.data) - if elemPtr == nil { - return nil, false - } - return packEFace(type2.pElemRType, elemPtr), true -} - -func (type2 *UnsafeMapType) GetIndex(obj interface{}, key interface{}) interface{} { - objEFace := unpackEFace(obj) - assertType("MapType.GetIndex argument 1", type2.ptrRType, objEFace.rtype) - keyEFace := unpackEFace(key) - assertType("MapType.GetIndex argument 2", type2.pKeyRType, keyEFace.rtype) - elemPtr := type2.UnsafeGetIndex(objEFace.data, keyEFace.data) - return packEFace(type2.pElemRType, elemPtr) -} - -func (type2 *UnsafeMapType) UnsafeGetIndex(obj unsafe.Pointer, key unsafe.Pointer) unsafe.Pointer { - return mapaccess(type2.rtype, *(*unsafe.Pointer)(obj), key) -} - -func (type2 *UnsafeMapType) Iterate(obj interface{}) MapIterator { - objEFace := unpackEFace(obj) - assertType("MapType.Iterate argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeIterate(objEFace.data) -} - -func (type2 *UnsafeMapType) UnsafeIterate(obj unsafe.Pointer) MapIterator { - return &UnsafeMapIterator{ - hiter: mapiterinit(type2.rtype, *(*unsafe.Pointer)(obj)), - pKeyRType: type2.pKeyRType, - pElemRType: type2.pElemRType, - } -} - -type UnsafeMapIterator struct { - *hiter - pKeyRType unsafe.Pointer - pElemRType unsafe.Pointer -} - -func (iter *UnsafeMapIterator) HasNext() bool { - return iter.key != nil -} - -func (iter *UnsafeMapIterator) Next() (interface{}, interface{}) { - key, elem := iter.UnsafeNext() - return packEFace(iter.pKeyRType, key), packEFace(iter.pElemRType, elem) -} - -func (iter *UnsafeMapIterator) UnsafeNext() (unsafe.Pointer, unsafe.Pointer) { - key := iter.key - elem := iter.value - mapiternext(iter.hiter) - return key, elem -} diff --git a/vendor/github.com/modern-go/reflect2/unsafe_ptr.go b/vendor/github.com/modern-go/reflect2/unsafe_ptr.go deleted file mode 100644 index 8e5ec9cf4..000000000 --- a/vendor/github.com/modern-go/reflect2/unsafe_ptr.go +++ /dev/null @@ -1,46 +0,0 @@ -package reflect2 - -import ( - "reflect" - "unsafe" -) - -type UnsafePtrType struct { - unsafeType -} - -func newUnsafePtrType(cfg *frozenConfig, type1 reflect.Type) *UnsafePtrType { - return &UnsafePtrType{ - unsafeType: *newUnsafeType(cfg, type1), - } -} - -func (type2 *UnsafePtrType) IsNil(obj interface{}) bool { - if obj == nil { - return true - } - objEFace := unpackEFace(obj) - assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeIsNil(objEFace.data) -} - -func (type2 *UnsafePtrType) UnsafeIsNil(ptr unsafe.Pointer) bool { - if ptr == nil { - return true - } - return *(*unsafe.Pointer)(ptr) == nil -} - -func (type2 *UnsafePtrType) LikePtr() bool { - return true -} - -func (type2 *UnsafePtrType) Indirect(obj interface{}) interface{} { - objEFace := unpackEFace(obj) - assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeIndirect(objEFace.data) -} - -func (type2 *UnsafePtrType) UnsafeIndirect(ptr unsafe.Pointer) interface{} { - return packEFace(type2.rtype, *(*unsafe.Pointer)(ptr)) -} diff --git a/vendor/github.com/modern-go/reflect2/unsafe_slice.go b/vendor/github.com/modern-go/reflect2/unsafe_slice.go deleted file mode 100644 index 1c6d876c7..000000000 --- a/vendor/github.com/modern-go/reflect2/unsafe_slice.go +++ /dev/null @@ -1,177 +0,0 @@ -package reflect2 - -import ( - "reflect" - "unsafe" -) - -// sliceHeader is a safe version of SliceHeader used within this package. -type sliceHeader struct { - Data unsafe.Pointer - Len int - Cap int -} - -type UnsafeSliceType struct { - unsafeType - elemRType unsafe.Pointer - pElemRType unsafe.Pointer - elemSize uintptr -} - -func newUnsafeSliceType(cfg *frozenConfig, type1 reflect.Type) SliceType { - elemType := type1.Elem() - return &UnsafeSliceType{ - unsafeType: *newUnsafeType(cfg, type1), - pElemRType: unpackEFace(reflect.PtrTo(elemType)).data, - elemRType: unpackEFace(elemType).data, - elemSize: elemType.Size(), - } -} - -func (type2 *UnsafeSliceType) Set(obj interface{}, val interface{}) { - objEFace := unpackEFace(obj) - assertType("Type.Set argument 1", type2.ptrRType, objEFace.rtype) - valEFace := unpackEFace(val) - assertType("Type.Set argument 2", type2.ptrRType, valEFace.rtype) - type2.UnsafeSet(objEFace.data, valEFace.data) -} - -func (type2 *UnsafeSliceType) UnsafeSet(ptr unsafe.Pointer, val unsafe.Pointer) { - *(*sliceHeader)(ptr) = *(*sliceHeader)(val) -} - -func (type2 *UnsafeSliceType) IsNil(obj interface{}) bool { - if obj == nil { - return true - } - objEFace := unpackEFace(obj) - assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeIsNil(objEFace.data) -} - -func (type2 *UnsafeSliceType) UnsafeIsNil(ptr unsafe.Pointer) bool { - if ptr == nil { - return true - } - return (*sliceHeader)(ptr).Data == nil -} - -func (type2 *UnsafeSliceType) SetNil(obj interface{}) { - objEFace := unpackEFace(obj) - assertType("SliceType.SetNil argument 1", type2.ptrRType, objEFace.rtype) - type2.UnsafeSetNil(objEFace.data) -} - -func (type2 *UnsafeSliceType) UnsafeSetNil(ptr unsafe.Pointer) { - header := (*sliceHeader)(ptr) - header.Len = 0 - header.Cap = 0 - header.Data = nil -} - -func (type2 *UnsafeSliceType) MakeSlice(length int, cap int) interface{} { - return packEFace(type2.ptrRType, type2.UnsafeMakeSlice(length, cap)) -} - -func (type2 *UnsafeSliceType) UnsafeMakeSlice(length int, cap int) unsafe.Pointer { - header := &sliceHeader{unsafe_NewArray(type2.elemRType, cap), length, cap} - return unsafe.Pointer(header) -} - -func (type2 *UnsafeSliceType) LengthOf(obj interface{}) int { - objEFace := unpackEFace(obj) - assertType("SliceType.Len argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeLengthOf(objEFace.data) -} - -func (type2 *UnsafeSliceType) UnsafeLengthOf(obj unsafe.Pointer) int { - header := (*sliceHeader)(obj) - return header.Len -} - -func (type2 *UnsafeSliceType) SetIndex(obj interface{}, index int, elem interface{}) { - objEFace := unpackEFace(obj) - assertType("SliceType.SetIndex argument 1", type2.ptrRType, objEFace.rtype) - elemEFace := unpackEFace(elem) - assertType("SliceType.SetIndex argument 3", type2.pElemRType, elemEFace.rtype) - type2.UnsafeSetIndex(objEFace.data, index, elemEFace.data) -} - -func (type2 *UnsafeSliceType) UnsafeSetIndex(obj unsafe.Pointer, index int, elem unsafe.Pointer) { - header := (*sliceHeader)(obj) - elemPtr := arrayAt(header.Data, index, type2.elemSize, "i < s.Len") - typedmemmove(type2.elemRType, elemPtr, elem) -} - -func (type2 *UnsafeSliceType) GetIndex(obj interface{}, index int) interface{} { - objEFace := unpackEFace(obj) - assertType("SliceType.GetIndex argument 1", type2.ptrRType, objEFace.rtype) - elemPtr := type2.UnsafeGetIndex(objEFace.data, index) - return packEFace(type2.pElemRType, elemPtr) -} - -func (type2 *UnsafeSliceType) UnsafeGetIndex(obj unsafe.Pointer, index int) unsafe.Pointer { - header := (*sliceHeader)(obj) - return arrayAt(header.Data, index, type2.elemSize, "i < s.Len") -} - -func (type2 *UnsafeSliceType) Append(obj interface{}, elem interface{}) { - objEFace := unpackEFace(obj) - assertType("SliceType.Append argument 1", type2.ptrRType, objEFace.rtype) - elemEFace := unpackEFace(elem) - assertType("SliceType.Append argument 2", type2.pElemRType, elemEFace.rtype) - type2.UnsafeAppend(objEFace.data, elemEFace.data) -} - -func (type2 *UnsafeSliceType) UnsafeAppend(obj unsafe.Pointer, elem unsafe.Pointer) { - header := (*sliceHeader)(obj) - oldLen := header.Len - type2.UnsafeGrow(obj, oldLen+1) - type2.UnsafeSetIndex(obj, oldLen, elem) -} - -func (type2 *UnsafeSliceType) Cap(obj interface{}) int { - objEFace := unpackEFace(obj) - assertType("SliceType.Cap argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeCap(objEFace.data) -} - -func (type2 *UnsafeSliceType) UnsafeCap(ptr unsafe.Pointer) int { - return (*sliceHeader)(ptr).Cap -} - -func (type2 *UnsafeSliceType) Grow(obj interface{}, newLength int) { - objEFace := unpackEFace(obj) - assertType("SliceType.Grow argument 1", type2.ptrRType, objEFace.rtype) - type2.UnsafeGrow(objEFace.data, newLength) -} - -func (type2 *UnsafeSliceType) UnsafeGrow(obj unsafe.Pointer, newLength int) { - header := (*sliceHeader)(obj) - if newLength <= header.Cap { - header.Len = newLength - return - } - newCap := calcNewCap(header.Cap, newLength) - newHeader := (*sliceHeader)(type2.UnsafeMakeSlice(header.Len, newCap)) - typedslicecopy(type2.elemRType, *newHeader, *header) - header.Data = newHeader.Data - header.Cap = newHeader.Cap - header.Len = newLength -} - -func calcNewCap(cap int, expectedCap int) int { - if cap == 0 { - cap = expectedCap - } else { - for cap < expectedCap { - if cap < 1024 { - cap += cap - } else { - cap += cap / 4 - } - } - } - return cap -} diff --git a/vendor/github.com/modern-go/reflect2/unsafe_struct.go b/vendor/github.com/modern-go/reflect2/unsafe_struct.go deleted file mode 100644 index 804d91663..000000000 --- a/vendor/github.com/modern-go/reflect2/unsafe_struct.go +++ /dev/null @@ -1,59 +0,0 @@ -package reflect2 - -import ( - "reflect" - "unsafe" -) - -type UnsafeStructType struct { - unsafeType - likePtr bool -} - -func newUnsafeStructType(cfg *frozenConfig, type1 reflect.Type) *UnsafeStructType { - return &UnsafeStructType{ - unsafeType: *newUnsafeType(cfg, type1), - likePtr: likePtrType(type1), - } -} - -func (type2 *UnsafeStructType) LikePtr() bool { - return type2.likePtr -} - -func (type2 *UnsafeStructType) Indirect(obj interface{}) interface{} { - objEFace := unpackEFace(obj) - assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeIndirect(objEFace.data) -} - -func (type2 *UnsafeStructType) UnsafeIndirect(ptr unsafe.Pointer) interface{} { - if type2.likePtr { - return packEFace(type2.rtype, *(*unsafe.Pointer)(ptr)) - } - return packEFace(type2.rtype, ptr) -} - -func (type2 *UnsafeStructType) FieldByName(name string) StructField { - structField, found := type2.Type.FieldByName(name) - if !found { - return nil - } - return newUnsafeStructField(type2, structField) -} - -func (type2 *UnsafeStructType) Field(i int) StructField { - return newUnsafeStructField(type2, type2.Type.Field(i)) -} - -func (type2 *UnsafeStructType) FieldByIndex(index []int) StructField { - return newUnsafeStructField(type2, type2.Type.FieldByIndex(index)) -} - -func (type2 *UnsafeStructType) FieldByNameFunc(match func(string) bool) StructField { - structField, found := type2.Type.FieldByNameFunc(match) - if !found { - panic("field match condition not found in " + type2.Type.String()) - } - return newUnsafeStructField(type2, structField) -} diff --git a/vendor/github.com/modern-go/reflect2/unsafe_type.go b/vendor/github.com/modern-go/reflect2/unsafe_type.go deleted file mode 100644 index 13941716c..000000000 --- a/vendor/github.com/modern-go/reflect2/unsafe_type.go +++ /dev/null @@ -1,85 +0,0 @@ -package reflect2 - -import ( - "reflect" - "unsafe" -) - -type unsafeType struct { - safeType - rtype unsafe.Pointer - ptrRType unsafe.Pointer -} - -func newUnsafeType(cfg *frozenConfig, type1 reflect.Type) *unsafeType { - return &unsafeType{ - safeType: safeType{ - Type: type1, - cfg: cfg, - }, - rtype: unpackEFace(type1).data, - ptrRType: unpackEFace(reflect.PtrTo(type1)).data, - } -} - -func (type2 *unsafeType) Set(obj interface{}, val interface{}) { - objEFace := unpackEFace(obj) - assertType("Type.Set argument 1", type2.ptrRType, objEFace.rtype) - valEFace := unpackEFace(val) - assertType("Type.Set argument 2", type2.ptrRType, valEFace.rtype) - type2.UnsafeSet(objEFace.data, valEFace.data) -} - -func (type2 *unsafeType) UnsafeSet(ptr unsafe.Pointer, val unsafe.Pointer) { - typedmemmove(type2.rtype, ptr, val) -} - -func (type2 *unsafeType) IsNil(obj interface{}) bool { - objEFace := unpackEFace(obj) - assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeIsNil(objEFace.data) -} - -func (type2 *unsafeType) UnsafeIsNil(ptr unsafe.Pointer) bool { - return ptr == nil -} - -func (type2 *unsafeType) UnsafeNew() unsafe.Pointer { - return unsafe_New(type2.rtype) -} - -func (type2 *unsafeType) New() interface{} { - return packEFace(type2.ptrRType, type2.UnsafeNew()) -} - -func (type2 *unsafeType) PackEFace(ptr unsafe.Pointer) interface{} { - return packEFace(type2.ptrRType, ptr) -} - -func (type2 *unsafeType) RType() uintptr { - return uintptr(type2.rtype) -} - -func (type2 *unsafeType) Indirect(obj interface{}) interface{} { - objEFace := unpackEFace(obj) - assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype) - return type2.UnsafeIndirect(objEFace.data) -} - -func (type2 *unsafeType) UnsafeIndirect(obj unsafe.Pointer) interface{} { - return packEFace(type2.rtype, obj) -} - -func (type2 *unsafeType) LikePtr() bool { - return false -} - -func assertType(where string, expectRType unsafe.Pointer, actualRType unsafe.Pointer) { - if expectRType != actualRType { - expectType := reflect.TypeOf(0) - (*iface)(unsafe.Pointer(&expectType)).data = expectRType - actualType := reflect.TypeOf(0) - (*iface)(unsafe.Pointer(&actualType)).data = actualRType - panic(where + ": expect " + expectType.String() + ", actual " + actualType.String()) - } -} diff --git a/vendor/github.com/msteinert/pam/LICENSE b/vendor/github.com/msteinert/pam/LICENSE deleted file mode 100644 index e3adca071..000000000 --- a/vendor/github.com/msteinert/pam/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright 2011, krockot -Copyright 2015, Michael Steinert -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. - -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/msteinert/pam/README.md b/vendor/github.com/msteinert/pam/README.md deleted file mode 100644 index 66b382066..000000000 --- a/vendor/github.com/msteinert/pam/README.md +++ /dev/null @@ -1,30 +0,0 @@ -[![Build Status](https://travis-ci.org/msteinert/pam.svg?branch=master)](https://travis-ci.org/msteinert/pam) -[![GoDoc](https://godoc.org/github.com/msteinert/pam?status.svg)](http://godoc.org/github.com/msteinert/pam) -[![Coverage Status](https://coveralls.io/repos/msteinert/pam/badge.svg?branch=master)](https://coveralls.io/r/msteinert/pam?branch=master) -[![Go Report Card](http://goreportcard.com/badge/msteinert/pam)](http://goreportcard.com/report/msteinert/pam) - -# Go PAM - -This is a Go wrapper for the PAM application API. - -## Testing - -To run the full suite, the tests must be run as the root user. To setup your -system for testing, create a user named "test" with the password "secret". For -example: - -``` -$ sudo useradd test \ - -d /tmp/test \ - -p '$1$Qd8H95T5$RYSZQeoFbEB.gS19zS99A0' \ - -s /bin/false -``` - -Then execute the tests: - -``` -$ sudo GOPATH=$GOPATH $(which go) test -v -``` - -[1]: http://godoc.org/github.com/msteinert/pam -[2]: http://www.linux-pam.org/Linux-PAM-html/Linux-PAM_ADG.html diff --git a/vendor/github.com/msteinert/pam/callback.go b/vendor/github.com/msteinert/pam/callback.go deleted file mode 100644 index 672a36e86..000000000 --- a/vendor/github.com/msteinert/pam/callback.go +++ /dev/null @@ -1,39 +0,0 @@ -package pam - -import "sync" - -var cb struct { - sync.Mutex - m map[int]interface{} - c int -} - -func init() { - cb.m = make(map[int]interface{}) -} - -func cbAdd(v interface{}) int { - cb.Lock() - defer cb.Unlock() - cb.c++ - cb.m[cb.c] = v - return cb.c -} - -func cbGet(c int) interface{} { - cb.Lock() - defer cb.Unlock() - if v, ok := cb.m[c]; ok { - return v - } - panic("Callback pointer not found") -} - -func cbDelete(c int) { - cb.Lock() - defer cb.Unlock() - if _, ok := cb.m[c]; !ok { - panic("Callback pointer not found") - } - delete(cb.m, c) -} diff --git a/vendor/github.com/msteinert/pam/transaction.c b/vendor/github.com/msteinert/pam/transaction.c deleted file mode 100644 index 5cf22a5db..000000000 --- a/vendor/github.com/msteinert/pam/transaction.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "_cgo_export.h" -#include -#include - -int cb_pam_conv( - int num_msg, - const struct pam_message **msg, - struct pam_response **resp, - void *appdata_ptr) -{ - *resp = calloc(num_msg, sizeof **resp); - if (num_msg <= 0 || num_msg > PAM_MAX_NUM_MSG) { - return PAM_CONV_ERR; - } - if (!*resp) { - return PAM_BUF_ERR; - } - for (size_t i = 0; i < num_msg; ++i) { - struct cbPAMConv_return result = cbPAMConv( - msg[i]->msg_style, - (char *)msg[i]->msg, - (long)appdata_ptr); - if (result.r1 != PAM_SUCCESS) { - goto error; - } - (*resp)[i].resp = result.r0; - } - return PAM_SUCCESS; -error: - for (size_t i = 0; i < num_msg; ++i) { - if ((*resp)[i].resp) { - memset((*resp)[i].resp, 0, strlen((*resp)[i].resp)); - free((*resp)[i].resp); - } - } - memset(*resp, 0, num_msg * sizeof *resp); - free(*resp); - *resp = NULL; - return PAM_CONV_ERR; -} - -void init_pam_conv(struct pam_conv *conv, long c) -{ - conv->conv = cb_pam_conv; - conv->appdata_ptr = (void *)c; -} diff --git a/vendor/github.com/msteinert/pam/transaction.go b/vendor/github.com/msteinert/pam/transaction.go deleted file mode 100644 index cda848e07..000000000 --- a/vendor/github.com/msteinert/pam/transaction.go +++ /dev/null @@ -1,306 +0,0 @@ -// Package pam provides a wrapper for the PAM application API. -package pam - -//#include -//#include -//#cgo CFLAGS: -Wall -std=c99 -//#cgo LDFLAGS: -lpam -//void init_pam_conv(struct pam_conv *conv, long c); -import "C" - -import ( - "runtime" - "strings" - "unsafe" -) - -// Style is the type of message that the conversation handler should display. -type Style int - -// Coversation handler style types. -const ( - // PromptEchoOff indicates the conversation handler should obtain a - // string without echoing any text. - PromptEchoOff Style = C.PAM_PROMPT_ECHO_OFF - // PromptEchoOn indicates the conversation handler should obtain a - // string while echoing text. - PromptEchoOn = C.PAM_PROMPT_ECHO_ON - // ErrorMsg indicates the conversation handler should display an - // error message. - ErrorMsg = C.PAM_ERROR_MSG - // TextInfo indicates the conversation handler should display some - // text. - TextInfo = C.PAM_TEXT_INFO -) - -// ConversationHandler is an interface for objects that can be used as -// conversation callbacks during PAM authentication. -type ConversationHandler interface { - // RespondPAM receives a message style and a message string. If the - // message Style is PromptEchoOff or PromptEchoOn then the function - // should return a response string. - RespondPAM(Style, string) (string, error) -} - -// ConversationFunc is an adapter to allow the use of ordinary functions as -// conversation callbacks. -type ConversationFunc func(Style, string) (string, error) - -// RespondPAM is a conversation callback adapter. -func (f ConversationFunc) RespondPAM(s Style, msg string) (string, error) { - return f(s, msg) -} - -// cbPAMConv is a wrapper for the conversation callback function. -//export cbPAMConv -func cbPAMConv(s C.int, msg *C.char, c int) (*C.char, C.int) { - var r string - var err error - v := cbGet(c) - switch cb := v.(type) { - case ConversationHandler: - r, err = cb.RespondPAM(Style(s), C.GoString(msg)) - } - if err != nil { - return nil, C.PAM_CONV_ERR - } - return C.CString(r), C.PAM_SUCCESS -} - -// Transaction is the application's handle for a PAM transaction. -type Transaction struct { - handle *C.pam_handle_t - conv *C.struct_pam_conv - status C.int - c int -} - -// transactionFinalizer cleans up the PAM handle and deletes the callback -// function. -func transactionFinalizer(t *Transaction) { - C.pam_end(t.handle, t.status) - cbDelete(t.c) -} - -// Start initiates a new PAM transaction. Service is treated identically to -// how pam_start treats it internally. -// -// All application calls to PAM begin with Start (or StartFunc). The returned -// transaction provides an interface to the remainder of the API. -func Start(service, user string, handler ConversationHandler) (*Transaction, error) { - t := &Transaction{ - conv: &C.struct_pam_conv{}, - c: cbAdd(handler), - } - C.init_pam_conv(t.conv, C.long(t.c)) - runtime.SetFinalizer(t, transactionFinalizer) - s := C.CString(service) - defer C.free(unsafe.Pointer(s)) - var u *C.char - if len(user) != 0 { - u = C.CString(user) - defer C.free(unsafe.Pointer(u)) - } - t.status = C.pam_start(s, u, t.conv, &t.handle) - if t.status != C.PAM_SUCCESS { - return nil, t - } - return t, nil -} - -// StartFunc registers the handler func as a conversation handler. -func StartFunc(service, user string, handler func(Style, string) (string, error)) (*Transaction, error) { - return Start(service, user, ConversationFunc(handler)) -} - -func (t *Transaction) Error() string { - return C.GoString(C.pam_strerror(t.handle, C.int(t.status))) -} - -// Item is a an PAM information type. -type Item int - -// PAM Item types. -const ( - // Service is the name which identifies the PAM stack. - Service Item = C.PAM_SERVICE - // User identifies the username identity used by a service. - User = C.PAM_USER - // Tty is the terminal name. - Tty = C.PAM_TTY - // Rhost is the requesting host name. - Rhost = C.PAM_RHOST - // Authtok is the currently active authentication token. - Authtok = C.PAM_AUTHTOK - // Oldauthtok is the old authentication token. - Oldauthtok = C.PAM_OLDAUTHTOK - // Ruser is the requesting user name. - Ruser = C.PAM_RUSER - // UserPrompt is the string use to prompt for a username. - UserPrompt = C.PAM_USER_PROMPT -) - -// SetItem sets a PAM information item. -func (t *Transaction) SetItem(i Item, item string) error { - cs := unsafe.Pointer(C.CString(item)) - defer C.free(cs) - t.status = C.pam_set_item(t.handle, C.int(i), cs) - if t.status != C.PAM_SUCCESS { - return t - } - return nil -} - -// GetItem retrieves a PAM information item. -func (t *Transaction) GetItem(i Item) (string, error) { - var s unsafe.Pointer - t.status = C.pam_get_item(t.handle, C.int(i), &s) - if t.status != C.PAM_SUCCESS { - return "", t - } - return C.GoString((*C.char)(s)), nil -} - -// Flags are inputs to various PAM functions than be combined with a bitwise -// or. Refer to the official PAM documentation for which flags are accepted -// by which functions. -type Flags int - -// PAM Flag types. -const ( - // Silent indicates that no messages should be emitted. - Silent Flags = C.PAM_SILENT - // DisallowNullAuthtok indicates that authorization should fail - // if the user does not have a registered authentication token. - DisallowNullAuthtok = C.PAM_DISALLOW_NULL_AUTHTOK - // EstablishCred indicates that credentials should be established - // for the user. - EstablishCred = C.PAM_ESTABLISH_CRED - // DeleteCred inidicates that credentials should be deleted. - DeleteCred = C.PAM_DELETE_CRED - // ReinitializeCred indicates that credentials should be fully - // reinitialized. - ReinitializeCred = C.PAM_REINITIALIZE_CRED - // RefreshCred indicates that the lifetime of existing credentials - // should be extended. - RefreshCred = C.PAM_REFRESH_CRED - // ChangeExpiredAuthtok indicates that the authentication token - // should be changed if it has expired. - ChangeExpiredAuthtok = C.PAM_CHANGE_EXPIRED_AUTHTOK -) - -// Authenticate is used to authenticate the user. -// -// Valid flags: Silent, DisallowNullAuthtok -func (t *Transaction) Authenticate(f Flags) error { - t.status = C.pam_authenticate(t.handle, C.int(f)) - if t.status != C.PAM_SUCCESS { - return t - } - return nil -} - -// SetCred is used to establish, maintain and delete the credentials of a -// user. -// -// Valid flags: EstablishCred, DeleteCred, ReinitializeCred, RefreshCred -func (t *Transaction) SetCred(f Flags) error { - t.status = C.pam_setcred(t.handle, C.int(f)) - if t.status != C.PAM_SUCCESS { - return t - } - return nil -} - -// AcctMgmt is used to determine if the user's account is valid. -// -// Valid flags: Silent, DisallowNullAuthtok -func (t *Transaction) AcctMgmt(f Flags) error { - t.status = C.pam_acct_mgmt(t.handle, C.int(f)) - if t.status != C.PAM_SUCCESS { - return t - } - return nil -} - -// ChangeAuthTok is used to change the authentication token. -// -// Valid flags: Silent, ChangeExpiredAuthtok -func (t *Transaction) ChangeAuthTok(f Flags) error { - t.status = C.pam_chauthtok(t.handle, C.int(f)) - if t.status != C.PAM_SUCCESS { - return t - } - return nil -} - -// OpenSession sets up a user session for an authenticated user. -// -// Valid flags: Slient -func (t *Transaction) OpenSession(f Flags) error { - t.status = C.pam_open_session(t.handle, C.int(f)) - if t.status != C.PAM_SUCCESS { - return t - } - return nil -} - -// CloseSession closes a previously opened session. -// -// Valid flags: Silent -func (t *Transaction) CloseSession(f Flags) error { - t.status = C.pam_close_session(t.handle, C.int(f)) - if t.status != C.PAM_SUCCESS { - return t - } - return nil -} - -// PutEnv adds or changes the value of PAM environment variables. -// -// NAME=value will set a variable to a value. -// NAME= will set a variable to an empty value. -// NAME (without an "=") will delete a variable. -func (t *Transaction) PutEnv(nameval string) error { - cs := C.CString(nameval) - defer C.free(unsafe.Pointer(cs)) - t.status = C.pam_putenv(t.handle, cs) - if t.status != C.PAM_SUCCESS { - return t - } - return nil -} - -// GetEnv is used to retrieve a PAM environment variable. -func (t *Transaction) GetEnv(name string) string { - cs := C.CString(name) - defer C.free(unsafe.Pointer(cs)) - value := C.pam_getenv(t.handle, cs) - if value == nil { - return "" - } - return C.GoString(value) -} - -func next(p **C.char) **C.char { - return (**C.char)(unsafe.Pointer(uintptr(unsafe.Pointer(p)) + unsafe.Sizeof(p))) -} - -// GetEnvList returns a copy of the PAM environment as a map. -func (t *Transaction) GetEnvList() (map[string]string, error) { - env := make(map[string]string) - p := C.pam_getenvlist(t.handle) - if p == nil { - t.status = C.PAM_BUF_ERR - return nil, t - } - for q := p; *q != nil; q = next(q) { - chunks := strings.SplitN(C.GoString(*q), "=", 2) - if len(chunks) == 2 { - env[chunks[0]] = chunks[1] - } - C.free(unsafe.Pointer(*q)) - } - C.free(unsafe.Pointer(p)) - return env, nil -} diff --git a/vendor/github.com/nfnt/resize/LICENSE b/vendor/github.com/nfnt/resize/LICENSE deleted file mode 100644 index 7836cad5f..000000000 --- a/vendor/github.com/nfnt/resize/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2012, Jan Schlicht - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. diff --git a/vendor/github.com/nfnt/resize/README.md b/vendor/github.com/nfnt/resize/README.md deleted file mode 100644 index 2aefa75c9..000000000 --- a/vendor/github.com/nfnt/resize/README.md +++ /dev/null @@ -1,149 +0,0 @@ -Resize -====== - -Image resizing for the [Go programming language](http://golang.org) with common interpolation methods. - -[![Build Status](https://travis-ci.org/nfnt/resize.svg)](https://travis-ci.org/nfnt/resize) - -Installation ------------- - -```bash -$ go get github.com/nfnt/resize -``` - -It's that easy! - -Usage ------ - -This package needs at least Go 1.1. Import package with - -```go -import "github.com/nfnt/resize" -``` - -The resize package provides 2 functions: - -* `resize.Resize` creates a scaled image with new dimensions (`width`, `height`) using the interpolation function `interp`. - If either `width` or `height` is set to 0, it will be set to an aspect ratio preserving value. -* `resize.Thumbnail` downscales an image preserving its aspect ratio to the maximum dimensions (`maxWidth`, `maxHeight`). - It will return the original image if original sizes are smaller than the provided dimensions. - -```go -resize.Resize(width, height uint, img image.Image, interp resize.InterpolationFunction) image.Image -resize.Thumbnail(maxWidth, maxHeight uint, img image.Image, interp resize.InterpolationFunction) image.Image -``` - -The provided interpolation functions are (from fast to slow execution time) - -- `NearestNeighbor`: [Nearest-neighbor interpolation](http://en.wikipedia.org/wiki/Nearest-neighbor_interpolation) -- `Bilinear`: [Bilinear interpolation](http://en.wikipedia.org/wiki/Bilinear_interpolation) -- `Bicubic`: [Bicubic interpolation](http://en.wikipedia.org/wiki/Bicubic_interpolation) -- `MitchellNetravali`: [Mitchell-Netravali interpolation](http://dl.acm.org/citation.cfm?id=378514) -- `Lanczos2`: [Lanczos resampling](http://en.wikipedia.org/wiki/Lanczos_resampling) with a=2 -- `Lanczos3`: [Lanczos resampling](http://en.wikipedia.org/wiki/Lanczos_resampling) with a=3 - -Which of these methods gives the best results depends on your use case. - -Sample usage: - -```go -package main - -import ( - "github.com/nfnt/resize" - "image/jpeg" - "log" - "os" -) - -func main() { - // open "test.jpg" - file, err := os.Open("test.jpg") - if err != nil { - log.Fatal(err) - } - - // decode jpeg into image.Image - img, err := jpeg.Decode(file) - if err != nil { - log.Fatal(err) - } - file.Close() - - // resize to width 1000 using Lanczos resampling - // and preserve aspect ratio - m := resize.Resize(1000, 0, img, resize.Lanczos3) - - out, err := os.Create("test_resized.jpg") - if err != nil { - log.Fatal(err) - } - defer out.Close() - - // write new image to file - jpeg.Encode(out, m, nil) -} -``` - -Caveats -------- - -* Optimized access routines are used for `image.RGBA`, `image.NRGBA`, `image.RGBA64`, `image.NRGBA64`, `image.YCbCr`, `image.Gray`, and `image.Gray16` types. All other image types are accessed in a generic way that will result in slow processing speed. -* JPEG images are stored in `image.YCbCr`. This image format stores data in a way that will decrease processing speed. A resize may be up to 2 times slower than with `image.RGBA`. - - -Downsizing Samples -------- - -Downsizing is not as simple as it might look like. Images have to be filtered before they are scaled down, otherwise aliasing might occur. -Filtering is highly subjective: Applying too much will blur the whole image, too little will make aliasing become apparent. -Resize tries to provide sane defaults that should suffice in most cases. - -### Artificial sample - -Original image -![Rings](http://nfnt.github.com/img/rings_lg_orig.png) - - - - - - - - - - - - - - -

Nearest-Neighbor

Bilinear

Bicubic

Mitchell-Netravali

Lanczos2

Lanczos3
- -### Real-Life sample - -Original image -![Original](http://nfnt.github.com/img/IMG_3694_720.jpg) - - - - - - - - - - - - - - -

Nearest-Neighbor

Bilinear

Bicubic

Mitchell-Netravali

Lanczos2

Lanczos3
- - -License -------- - -Copyright (c) 2012 Jan Schlicht -Resize is released under a MIT style license. diff --git a/vendor/github.com/nfnt/resize/converter.go b/vendor/github.com/nfnt/resize/converter.go deleted file mode 100644 index f9c520d09..000000000 --- a/vendor/github.com/nfnt/resize/converter.go +++ /dev/null @@ -1,438 +0,0 @@ -/* -Copyright (c) 2012, Jan Schlicht - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. -*/ - -package resize - -import "image" - -// Keep value in [0,255] range. -func clampUint8(in int32) uint8 { - // casting a negative int to an uint will result in an overflown - // large uint. this behavior will be exploited here and in other functions - // to achieve a higher performance. - if uint32(in) < 256 { - return uint8(in) - } - if in > 255 { - return 255 - } - return 0 -} - -// Keep value in [0,65535] range. -func clampUint16(in int64) uint16 { - if uint64(in) < 65536 { - return uint16(in) - } - if in > 65535 { - return 65535 - } - return 0 -} - -func resizeGeneric(in image.Image, out *image.RGBA64, scale float64, coeffs []int32, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var rgba [4]int64 - var sum int64 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - coeff := coeffs[ci+i] - if coeff != 0 { - xi := start + i - switch { - case xi < 0: - xi = 0 - case xi >= maxX: - xi = maxX - } - - r, g, b, a := in.At(xi+in.Bounds().Min.X, x+in.Bounds().Min.Y).RGBA() - - rgba[0] += int64(coeff) * int64(r) - rgba[1] += int64(coeff) * int64(g) - rgba[2] += int64(coeff) * int64(b) - rgba[3] += int64(coeff) * int64(a) - sum += int64(coeff) - } - } - - offset := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*8 - - value := clampUint16(rgba[0] / sum) - out.Pix[offset+0] = uint8(value >> 8) - out.Pix[offset+1] = uint8(value) - value = clampUint16(rgba[1] / sum) - out.Pix[offset+2] = uint8(value >> 8) - out.Pix[offset+3] = uint8(value) - value = clampUint16(rgba[2] / sum) - out.Pix[offset+4] = uint8(value >> 8) - out.Pix[offset+5] = uint8(value) - value = clampUint16(rgba[3] / sum) - out.Pix[offset+6] = uint8(value >> 8) - out.Pix[offset+7] = uint8(value) - } - } -} - -func resizeRGBA(in *image.RGBA, out *image.RGBA, scale float64, coeffs []int16, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - row := in.Pix[x*in.Stride:] - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var rgba [4]int32 - var sum int32 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - coeff := coeffs[ci+i] - if coeff != 0 { - xi := start + i - switch { - case uint(xi) < uint(maxX): - xi *= 4 - case xi >= maxX: - xi = 4 * maxX - default: - xi = 0 - } - - rgba[0] += int32(coeff) * int32(row[xi+0]) - rgba[1] += int32(coeff) * int32(row[xi+1]) - rgba[2] += int32(coeff) * int32(row[xi+2]) - rgba[3] += int32(coeff) * int32(row[xi+3]) - sum += int32(coeff) - } - } - - xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*4 - - out.Pix[xo+0] = clampUint8(rgba[0] / sum) - out.Pix[xo+1] = clampUint8(rgba[1] / sum) - out.Pix[xo+2] = clampUint8(rgba[2] / sum) - out.Pix[xo+3] = clampUint8(rgba[3] / sum) - } - } -} - -func resizeNRGBA(in *image.NRGBA, out *image.RGBA, scale float64, coeffs []int16, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - row := in.Pix[x*in.Stride:] - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var rgba [4]int32 - var sum int32 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - coeff := coeffs[ci+i] - if coeff != 0 { - xi := start + i - switch { - case uint(xi) < uint(maxX): - xi *= 4 - case xi >= maxX: - xi = 4 * maxX - default: - xi = 0 - } - - // Forward alpha-premultiplication - a := int32(row[xi+3]) - r := int32(row[xi+0]) * a - r /= 0xff - g := int32(row[xi+1]) * a - g /= 0xff - b := int32(row[xi+2]) * a - b /= 0xff - - rgba[0] += int32(coeff) * r - rgba[1] += int32(coeff) * g - rgba[2] += int32(coeff) * b - rgba[3] += int32(coeff) * a - sum += int32(coeff) - } - } - - xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*4 - - out.Pix[xo+0] = clampUint8(rgba[0] / sum) - out.Pix[xo+1] = clampUint8(rgba[1] / sum) - out.Pix[xo+2] = clampUint8(rgba[2] / sum) - out.Pix[xo+3] = clampUint8(rgba[3] / sum) - } - } -} - -func resizeRGBA64(in *image.RGBA64, out *image.RGBA64, scale float64, coeffs []int32, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - row := in.Pix[x*in.Stride:] - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var rgba [4]int64 - var sum int64 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - coeff := coeffs[ci+i] - if coeff != 0 { - xi := start + i - switch { - case uint(xi) < uint(maxX): - xi *= 8 - case xi >= maxX: - xi = 8 * maxX - default: - xi = 0 - } - - rgba[0] += int64(coeff) * (int64(row[xi+0])<<8 | int64(row[xi+1])) - rgba[1] += int64(coeff) * (int64(row[xi+2])<<8 | int64(row[xi+3])) - rgba[2] += int64(coeff) * (int64(row[xi+4])<<8 | int64(row[xi+5])) - rgba[3] += int64(coeff) * (int64(row[xi+6])<<8 | int64(row[xi+7])) - sum += int64(coeff) - } - } - - xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*8 - - value := clampUint16(rgba[0] / sum) - out.Pix[xo+0] = uint8(value >> 8) - out.Pix[xo+1] = uint8(value) - value = clampUint16(rgba[1] / sum) - out.Pix[xo+2] = uint8(value >> 8) - out.Pix[xo+3] = uint8(value) - value = clampUint16(rgba[2] / sum) - out.Pix[xo+4] = uint8(value >> 8) - out.Pix[xo+5] = uint8(value) - value = clampUint16(rgba[3] / sum) - out.Pix[xo+6] = uint8(value >> 8) - out.Pix[xo+7] = uint8(value) - } - } -} - -func resizeNRGBA64(in *image.NRGBA64, out *image.RGBA64, scale float64, coeffs []int32, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - row := in.Pix[x*in.Stride:] - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var rgba [4]int64 - var sum int64 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - coeff := coeffs[ci+i] - if coeff != 0 { - xi := start + i - switch { - case uint(xi) < uint(maxX): - xi *= 8 - case xi >= maxX: - xi = 8 * maxX - default: - xi = 0 - } - - // Forward alpha-premultiplication - a := int64(uint16(row[xi+6])<<8 | uint16(row[xi+7])) - r := int64(uint16(row[xi+0])<<8|uint16(row[xi+1])) * a - r /= 0xffff - g := int64(uint16(row[xi+2])<<8|uint16(row[xi+3])) * a - g /= 0xffff - b := int64(uint16(row[xi+4])<<8|uint16(row[xi+5])) * a - b /= 0xffff - - rgba[0] += int64(coeff) * r - rgba[1] += int64(coeff) * g - rgba[2] += int64(coeff) * b - rgba[3] += int64(coeff) * a - sum += int64(coeff) - } - } - - xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*8 - - value := clampUint16(rgba[0] / sum) - out.Pix[xo+0] = uint8(value >> 8) - out.Pix[xo+1] = uint8(value) - value = clampUint16(rgba[1] / sum) - out.Pix[xo+2] = uint8(value >> 8) - out.Pix[xo+3] = uint8(value) - value = clampUint16(rgba[2] / sum) - out.Pix[xo+4] = uint8(value >> 8) - out.Pix[xo+5] = uint8(value) - value = clampUint16(rgba[3] / sum) - out.Pix[xo+6] = uint8(value >> 8) - out.Pix[xo+7] = uint8(value) - } - } -} - -func resizeGray(in *image.Gray, out *image.Gray, scale float64, coeffs []int16, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - row := in.Pix[(x-newBounds.Min.X)*in.Stride:] - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var gray int32 - var sum int32 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - coeff := coeffs[ci+i] - if coeff != 0 { - xi := start + i - switch { - case xi < 0: - xi = 0 - case xi >= maxX: - xi = maxX - } - gray += int32(coeff) * int32(row[xi]) - sum += int32(coeff) - } - } - - offset := (y-newBounds.Min.Y)*out.Stride + (x - newBounds.Min.X) - out.Pix[offset] = clampUint8(gray / sum) - } - } -} - -func resizeGray16(in *image.Gray16, out *image.Gray16, scale float64, coeffs []int32, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - row := in.Pix[x*in.Stride:] - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var gray int64 - var sum int64 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - coeff := coeffs[ci+i] - if coeff != 0 { - xi := start + i - switch { - case uint(xi) < uint(maxX): - xi *= 2 - case xi >= maxX: - xi = 2 * maxX - default: - xi = 0 - } - gray += int64(coeff) * int64(uint16(row[xi+0])<<8|uint16(row[xi+1])) - sum += int64(coeff) - } - } - - offset := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*2 - value := clampUint16(gray / sum) - out.Pix[offset+0] = uint8(value >> 8) - out.Pix[offset+1] = uint8(value) - } - } -} - -func resizeYCbCr(in *ycc, out *ycc, scale float64, coeffs []int16, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - row := in.Pix[x*in.Stride:] - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var p [3]int32 - var sum int32 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - coeff := coeffs[ci+i] - if coeff != 0 { - xi := start + i - switch { - case uint(xi) < uint(maxX): - xi *= 3 - case xi >= maxX: - xi = 3 * maxX - default: - xi = 0 - } - p[0] += int32(coeff) * int32(row[xi+0]) - p[1] += int32(coeff) * int32(row[xi+1]) - p[2] += int32(coeff) * int32(row[xi+2]) - sum += int32(coeff) - } - } - - xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*3 - out.Pix[xo+0] = clampUint8(p[0] / sum) - out.Pix[xo+1] = clampUint8(p[1] / sum) - out.Pix[xo+2] = clampUint8(p[2] / sum) - } - } -} - -func nearestYCbCr(in *ycc, out *ycc, scale float64, coeffs []bool, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - row := in.Pix[x*in.Stride:] - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var p [3]float32 - var sum float32 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - if coeffs[ci+i] { - xi := start + i - switch { - case uint(xi) < uint(maxX): - xi *= 3 - case xi >= maxX: - xi = 3 * maxX - default: - xi = 0 - } - p[0] += float32(row[xi+0]) - p[1] += float32(row[xi+1]) - p[2] += float32(row[xi+2]) - sum++ - } - } - - xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*3 - out.Pix[xo+0] = floatToUint8(p[0] / sum) - out.Pix[xo+1] = floatToUint8(p[1] / sum) - out.Pix[xo+2] = floatToUint8(p[2] / sum) - } - } -} diff --git a/vendor/github.com/nfnt/resize/filters.go b/vendor/github.com/nfnt/resize/filters.go deleted file mode 100644 index 4ce04e389..000000000 --- a/vendor/github.com/nfnt/resize/filters.go +++ /dev/null @@ -1,143 +0,0 @@ -/* -Copyright (c) 2012, Jan Schlicht - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. -*/ - -package resize - -import ( - "math" -) - -func nearest(in float64) float64 { - if in >= -0.5 && in < 0.5 { - return 1 - } - return 0 -} - -func linear(in float64) float64 { - in = math.Abs(in) - if in <= 1 { - return 1 - in - } - return 0 -} - -func cubic(in float64) float64 { - in = math.Abs(in) - if in <= 1 { - return in*in*(1.5*in-2.5) + 1.0 - } - if in <= 2 { - return in*(in*(2.5-0.5*in)-4.0) + 2.0 - } - return 0 -} - -func mitchellnetravali(in float64) float64 { - in = math.Abs(in) - if in <= 1 { - return (7.0*in*in*in - 12.0*in*in + 5.33333333333) * 0.16666666666 - } - if in <= 2 { - return (-2.33333333333*in*in*in + 12.0*in*in - 20.0*in + 10.6666666667) * 0.16666666666 - } - return 0 -} - -func sinc(x float64) float64 { - x = math.Abs(x) * math.Pi - if x >= 1.220703e-4 { - return math.Sin(x) / x - } - return 1 -} - -func lanczos2(in float64) float64 { - if in > -2 && in < 2 { - return sinc(in) * sinc(in*0.5) - } - return 0 -} - -func lanczos3(in float64) float64 { - if in > -3 && in < 3 { - return sinc(in) * sinc(in*0.3333333333333333) - } - return 0 -} - -// range [-256,256] -func createWeights8(dy, filterLength int, blur, scale float64, kernel func(float64) float64) ([]int16, []int, int) { - filterLength = filterLength * int(math.Max(math.Ceil(blur*scale), 1)) - filterFactor := math.Min(1./(blur*scale), 1) - - coeffs := make([]int16, dy*filterLength) - start := make([]int, dy) - for y := 0; y < dy; y++ { - interpX := scale*(float64(y)+0.5) - 0.5 - start[y] = int(interpX) - filterLength/2 + 1 - interpX -= float64(start[y]) - for i := 0; i < filterLength; i++ { - in := (interpX - float64(i)) * filterFactor - coeffs[y*filterLength+i] = int16(kernel(in) * 256) - } - } - - return coeffs, start, filterLength -} - -// range [-65536,65536] -func createWeights16(dy, filterLength int, blur, scale float64, kernel func(float64) float64) ([]int32, []int, int) { - filterLength = filterLength * int(math.Max(math.Ceil(blur*scale), 1)) - filterFactor := math.Min(1./(blur*scale), 1) - - coeffs := make([]int32, dy*filterLength) - start := make([]int, dy) - for y := 0; y < dy; y++ { - interpX := scale*(float64(y)+0.5) - 0.5 - start[y] = int(interpX) - filterLength/2 + 1 - interpX -= float64(start[y]) - for i := 0; i < filterLength; i++ { - in := (interpX - float64(i)) * filterFactor - coeffs[y*filterLength+i] = int32(kernel(in) * 65536) - } - } - - return coeffs, start, filterLength -} - -func createWeightsNearest(dy, filterLength int, blur, scale float64) ([]bool, []int, int) { - filterLength = filterLength * int(math.Max(math.Ceil(blur*scale), 1)) - filterFactor := math.Min(1./(blur*scale), 1) - - coeffs := make([]bool, dy*filterLength) - start := make([]int, dy) - for y := 0; y < dy; y++ { - interpX := scale*(float64(y)+0.5) - 0.5 - start[y] = int(interpX) - filterLength/2 + 1 - interpX -= float64(start[y]) - for i := 0; i < filterLength; i++ { - in := (interpX - float64(i)) * filterFactor - if in >= -0.5 && in < 0.5 { - coeffs[y*filterLength+i] = true - } else { - coeffs[y*filterLength+i] = false - } - } - } - - return coeffs, start, filterLength -} diff --git a/vendor/github.com/nfnt/resize/nearest.go b/vendor/github.com/nfnt/resize/nearest.go deleted file mode 100644 index 888039d85..000000000 --- a/vendor/github.com/nfnt/resize/nearest.go +++ /dev/null @@ -1,318 +0,0 @@ -/* -Copyright (c) 2014, Charlie Vieth - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. -*/ - -package resize - -import "image" - -func floatToUint8(x float32) uint8 { - // Nearest-neighbor values are always - // positive no need to check lower-bound. - if x > 0xfe { - return 0xff - } - return uint8(x) -} - -func floatToUint16(x float32) uint16 { - if x > 0xfffe { - return 0xffff - } - return uint16(x) -} - -func nearestGeneric(in image.Image, out *image.RGBA64, scale float64, coeffs []bool, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var rgba [4]float32 - var sum float32 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - if coeffs[ci+i] { - xi := start + i - switch { - case xi < 0: - xi = 0 - case xi >= maxX: - xi = maxX - } - r, g, b, a := in.At(xi+in.Bounds().Min.X, x+in.Bounds().Min.Y).RGBA() - rgba[0] += float32(r) - rgba[1] += float32(g) - rgba[2] += float32(b) - rgba[3] += float32(a) - sum++ - } - } - - offset := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*8 - value := floatToUint16(rgba[0] / sum) - out.Pix[offset+0] = uint8(value >> 8) - out.Pix[offset+1] = uint8(value) - value = floatToUint16(rgba[1] / sum) - out.Pix[offset+2] = uint8(value >> 8) - out.Pix[offset+3] = uint8(value) - value = floatToUint16(rgba[2] / sum) - out.Pix[offset+4] = uint8(value >> 8) - out.Pix[offset+5] = uint8(value) - value = floatToUint16(rgba[3] / sum) - out.Pix[offset+6] = uint8(value >> 8) - out.Pix[offset+7] = uint8(value) - } - } -} - -func nearestRGBA(in *image.RGBA, out *image.RGBA, scale float64, coeffs []bool, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - row := in.Pix[x*in.Stride:] - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var rgba [4]float32 - var sum float32 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - if coeffs[ci+i] { - xi := start + i - switch { - case uint(xi) < uint(maxX): - xi *= 4 - case xi >= maxX: - xi = 4 * maxX - default: - xi = 0 - } - rgba[0] += float32(row[xi+0]) - rgba[1] += float32(row[xi+1]) - rgba[2] += float32(row[xi+2]) - rgba[3] += float32(row[xi+3]) - sum++ - } - } - - xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*4 - out.Pix[xo+0] = floatToUint8(rgba[0] / sum) - out.Pix[xo+1] = floatToUint8(rgba[1] / sum) - out.Pix[xo+2] = floatToUint8(rgba[2] / sum) - out.Pix[xo+3] = floatToUint8(rgba[3] / sum) - } - } -} - -func nearestNRGBA(in *image.NRGBA, out *image.NRGBA, scale float64, coeffs []bool, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - row := in.Pix[x*in.Stride:] - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var rgba [4]float32 - var sum float32 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - if coeffs[ci+i] { - xi := start + i - switch { - case uint(xi) < uint(maxX): - xi *= 4 - case xi >= maxX: - xi = 4 * maxX - default: - xi = 0 - } - rgba[0] += float32(row[xi+0]) - rgba[1] += float32(row[xi+1]) - rgba[2] += float32(row[xi+2]) - rgba[3] += float32(row[xi+3]) - sum++ - } - } - - xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*4 - out.Pix[xo+0] = floatToUint8(rgba[0] / sum) - out.Pix[xo+1] = floatToUint8(rgba[1] / sum) - out.Pix[xo+2] = floatToUint8(rgba[2] / sum) - out.Pix[xo+3] = floatToUint8(rgba[3] / sum) - } - } -} - -func nearestRGBA64(in *image.RGBA64, out *image.RGBA64, scale float64, coeffs []bool, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - row := in.Pix[x*in.Stride:] - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var rgba [4]float32 - var sum float32 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - if coeffs[ci+i] { - xi := start + i - switch { - case uint(xi) < uint(maxX): - xi *= 8 - case xi >= maxX: - xi = 8 * maxX - default: - xi = 0 - } - rgba[0] += float32(uint16(row[xi+0])<<8 | uint16(row[xi+1])) - rgba[1] += float32(uint16(row[xi+2])<<8 | uint16(row[xi+3])) - rgba[2] += float32(uint16(row[xi+4])<<8 | uint16(row[xi+5])) - rgba[3] += float32(uint16(row[xi+6])<<8 | uint16(row[xi+7])) - sum++ - } - } - - xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*8 - value := floatToUint16(rgba[0] / sum) - out.Pix[xo+0] = uint8(value >> 8) - out.Pix[xo+1] = uint8(value) - value = floatToUint16(rgba[1] / sum) - out.Pix[xo+2] = uint8(value >> 8) - out.Pix[xo+3] = uint8(value) - value = floatToUint16(rgba[2] / sum) - out.Pix[xo+4] = uint8(value >> 8) - out.Pix[xo+5] = uint8(value) - value = floatToUint16(rgba[3] / sum) - out.Pix[xo+6] = uint8(value >> 8) - out.Pix[xo+7] = uint8(value) - } - } -} - -func nearestNRGBA64(in *image.NRGBA64, out *image.NRGBA64, scale float64, coeffs []bool, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - row := in.Pix[x*in.Stride:] - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var rgba [4]float32 - var sum float32 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - if coeffs[ci+i] { - xi := start + i - switch { - case uint(xi) < uint(maxX): - xi *= 8 - case xi >= maxX: - xi = 8 * maxX - default: - xi = 0 - } - rgba[0] += float32(uint16(row[xi+0])<<8 | uint16(row[xi+1])) - rgba[1] += float32(uint16(row[xi+2])<<8 | uint16(row[xi+3])) - rgba[2] += float32(uint16(row[xi+4])<<8 | uint16(row[xi+5])) - rgba[3] += float32(uint16(row[xi+6])<<8 | uint16(row[xi+7])) - sum++ - } - } - - xo := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*8 - value := floatToUint16(rgba[0] / sum) - out.Pix[xo+0] = uint8(value >> 8) - out.Pix[xo+1] = uint8(value) - value = floatToUint16(rgba[1] / sum) - out.Pix[xo+2] = uint8(value >> 8) - out.Pix[xo+3] = uint8(value) - value = floatToUint16(rgba[2] / sum) - out.Pix[xo+4] = uint8(value >> 8) - out.Pix[xo+5] = uint8(value) - value = floatToUint16(rgba[3] / sum) - out.Pix[xo+6] = uint8(value >> 8) - out.Pix[xo+7] = uint8(value) - } - } -} - -func nearestGray(in *image.Gray, out *image.Gray, scale float64, coeffs []bool, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - row := in.Pix[x*in.Stride:] - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var gray float32 - var sum float32 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - if coeffs[ci+i] { - xi := start + i - switch { - case xi < 0: - xi = 0 - case xi >= maxX: - xi = maxX - } - gray += float32(row[xi]) - sum++ - } - } - - offset := (y-newBounds.Min.Y)*out.Stride + (x - newBounds.Min.X) - out.Pix[offset] = floatToUint8(gray / sum) - } - } -} - -func nearestGray16(in *image.Gray16, out *image.Gray16, scale float64, coeffs []bool, offset []int, filterLength int) { - newBounds := out.Bounds() - maxX := in.Bounds().Dx() - 1 - - for x := newBounds.Min.X; x < newBounds.Max.X; x++ { - row := in.Pix[x*in.Stride:] - for y := newBounds.Min.Y; y < newBounds.Max.Y; y++ { - var gray float32 - var sum float32 - start := offset[y] - ci := y * filterLength - for i := 0; i < filterLength; i++ { - if coeffs[ci+i] { - xi := start + i - switch { - case uint(xi) < uint(maxX): - xi *= 2 - case xi >= maxX: - xi = 2 * maxX - default: - xi = 0 - } - gray += float32(uint16(row[xi+0])<<8 | uint16(row[xi+1])) - sum++ - } - } - - offset := (y-newBounds.Min.Y)*out.Stride + (x-newBounds.Min.X)*2 - value := floatToUint16(gray / sum) - out.Pix[offset+0] = uint8(value >> 8) - out.Pix[offset+1] = uint8(value) - } - } -} diff --git a/vendor/github.com/nfnt/resize/resize.go b/vendor/github.com/nfnt/resize/resize.go deleted file mode 100644 index 57bd1fcd0..000000000 --- a/vendor/github.com/nfnt/resize/resize.go +++ /dev/null @@ -1,614 +0,0 @@ -/* -Copyright (c) 2012, Jan Schlicht - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. -*/ - -// Package resize implements various image resizing methods. -// -// The package works with the Image interface described in the image package. -// Various interpolation methods are provided and multiple processors may be -// utilized in the computations. -// -// Example: -// imgResized := resize.Resize(1000, 0, imgOld, resize.MitchellNetravali) -package resize - -import ( - "image" - "runtime" - "sync" -) - -// An InterpolationFunction provides the parameters that describe an -// interpolation kernel. It returns the number of samples to take -// and the kernel function to use for sampling. -type InterpolationFunction int - -// InterpolationFunction constants -const ( - // Nearest-neighbor interpolation - NearestNeighbor InterpolationFunction = iota - // Bilinear interpolation - Bilinear - // Bicubic interpolation (with cubic hermite spline) - Bicubic - // Mitchell-Netravali interpolation - MitchellNetravali - // Lanczos interpolation (a=2) - Lanczos2 - // Lanczos interpolation (a=3) - Lanczos3 -) - -// kernal, returns an InterpolationFunctions taps and kernel. -func (i InterpolationFunction) kernel() (int, func(float64) float64) { - switch i { - case Bilinear: - return 2, linear - case Bicubic: - return 4, cubic - case MitchellNetravali: - return 4, mitchellnetravali - case Lanczos2: - return 4, lanczos2 - case Lanczos3: - return 6, lanczos3 - default: - // Default to NearestNeighbor. - return 2, nearest - } -} - -// values <1 will sharpen the image -var blur = 1.0 - -// Resize scales an image to new width and height using the interpolation function interp. -// A new image with the given dimensions will be returned. -// If one of the parameters width or height is set to 0, its size will be calculated so that -// the aspect ratio is that of the originating image. -// The resizing algorithm uses channels for parallel computation. -func Resize(width, height uint, img image.Image, interp InterpolationFunction) image.Image { - scaleX, scaleY := calcFactors(width, height, float64(img.Bounds().Dx()), float64(img.Bounds().Dy())) - if width == 0 { - width = uint(0.7 + float64(img.Bounds().Dx())/scaleX) - } - if height == 0 { - height = uint(0.7 + float64(img.Bounds().Dy())/scaleY) - } - - // Trivial case: return input image - if int(width) == img.Bounds().Dx() && int(height) == img.Bounds().Dy() { - return img - } - - if interp == NearestNeighbor { - return resizeNearest(width, height, scaleX, scaleY, img, interp) - } - - taps, kernel := interp.kernel() - cpus := runtime.GOMAXPROCS(0) - wg := sync.WaitGroup{} - - // Generic access to image.Image is slow in tight loops. - // The optimal access has to be determined from the concrete image type. - switch input := img.(type) { - case *image.RGBA: - // 8-bit precision - temp := image.NewRGBA(image.Rect(0, 0, input.Bounds().Dy(), int(width))) - result := image.NewRGBA(image.Rect(0, 0, int(width), int(height))) - - // horizontal filter, results in transposed temporary image - coeffs, offset, filterLength := createWeights8(temp.Bounds().Dy(), taps, blur, scaleX, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*image.RGBA) - go func() { - defer wg.Done() - resizeRGBA(input, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - // horizontal filter on transposed image, result is not transposed - coeffs, offset, filterLength = createWeights8(result.Bounds().Dy(), taps, blur, scaleY, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*image.RGBA) - go func() { - defer wg.Done() - resizeRGBA(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result - case *image.NRGBA: - // 8-bit precision - temp := image.NewRGBA(image.Rect(0, 0, input.Bounds().Dy(), int(width))) - result := image.NewRGBA(image.Rect(0, 0, int(width), int(height))) - - // horizontal filter, results in transposed temporary image - coeffs, offset, filterLength := createWeights8(temp.Bounds().Dy(), taps, blur, scaleX, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*image.RGBA) - go func() { - defer wg.Done() - resizeNRGBA(input, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - // horizontal filter on transposed image, result is not transposed - coeffs, offset, filterLength = createWeights8(result.Bounds().Dy(), taps, blur, scaleY, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*image.RGBA) - go func() { - defer wg.Done() - resizeRGBA(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result - - case *image.YCbCr: - // 8-bit precision - // accessing the YCbCr arrays in a tight loop is slow. - // converting the image to ycc increases performance by 2x. - temp := newYCC(image.Rect(0, 0, input.Bounds().Dy(), int(width)), input.SubsampleRatio) - result := newYCC(image.Rect(0, 0, int(width), int(height)), image.YCbCrSubsampleRatio444) - - coeffs, offset, filterLength := createWeights8(temp.Bounds().Dy(), taps, blur, scaleX, kernel) - in := imageYCbCrToYCC(input) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*ycc) - go func() { - defer wg.Done() - resizeYCbCr(in, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - coeffs, offset, filterLength = createWeights8(result.Bounds().Dy(), taps, blur, scaleY, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*ycc) - go func() { - defer wg.Done() - resizeYCbCr(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result.YCbCr() - case *image.RGBA64: - // 16-bit precision - temp := image.NewRGBA64(image.Rect(0, 0, input.Bounds().Dy(), int(width))) - result := image.NewRGBA64(image.Rect(0, 0, int(width), int(height))) - - // horizontal filter, results in transposed temporary image - coeffs, offset, filterLength := createWeights16(temp.Bounds().Dy(), taps, blur, scaleX, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*image.RGBA64) - go func() { - defer wg.Done() - resizeRGBA64(input, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - // horizontal filter on transposed image, result is not transposed - coeffs, offset, filterLength = createWeights16(result.Bounds().Dy(), taps, blur, scaleY, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*image.RGBA64) - go func() { - defer wg.Done() - resizeRGBA64(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result - case *image.NRGBA64: - // 16-bit precision - temp := image.NewRGBA64(image.Rect(0, 0, input.Bounds().Dy(), int(width))) - result := image.NewRGBA64(image.Rect(0, 0, int(width), int(height))) - - // horizontal filter, results in transposed temporary image - coeffs, offset, filterLength := createWeights16(temp.Bounds().Dy(), taps, blur, scaleX, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*image.RGBA64) - go func() { - defer wg.Done() - resizeNRGBA64(input, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - // horizontal filter on transposed image, result is not transposed - coeffs, offset, filterLength = createWeights16(result.Bounds().Dy(), taps, blur, scaleY, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*image.RGBA64) - go func() { - defer wg.Done() - resizeRGBA64(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result - case *image.Gray: - // 8-bit precision - temp := image.NewGray(image.Rect(0, 0, input.Bounds().Dy(), int(width))) - result := image.NewGray(image.Rect(0, 0, int(width), int(height))) - - // horizontal filter, results in transposed temporary image - coeffs, offset, filterLength := createWeights8(temp.Bounds().Dy(), taps, blur, scaleX, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*image.Gray) - go func() { - defer wg.Done() - resizeGray(input, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - // horizontal filter on transposed image, result is not transposed - coeffs, offset, filterLength = createWeights8(result.Bounds().Dy(), taps, blur, scaleY, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*image.Gray) - go func() { - defer wg.Done() - resizeGray(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result - case *image.Gray16: - // 16-bit precision - temp := image.NewGray16(image.Rect(0, 0, input.Bounds().Dy(), int(width))) - result := image.NewGray16(image.Rect(0, 0, int(width), int(height))) - - // horizontal filter, results in transposed temporary image - coeffs, offset, filterLength := createWeights16(temp.Bounds().Dy(), taps, blur, scaleX, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*image.Gray16) - go func() { - defer wg.Done() - resizeGray16(input, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - // horizontal filter on transposed image, result is not transposed - coeffs, offset, filterLength = createWeights16(result.Bounds().Dy(), taps, blur, scaleY, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*image.Gray16) - go func() { - defer wg.Done() - resizeGray16(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result - default: - // 16-bit precision - temp := image.NewRGBA64(image.Rect(0, 0, img.Bounds().Dy(), int(width))) - result := image.NewRGBA64(image.Rect(0, 0, int(width), int(height))) - - // horizontal filter, results in transposed temporary image - coeffs, offset, filterLength := createWeights16(temp.Bounds().Dy(), taps, blur, scaleX, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*image.RGBA64) - go func() { - defer wg.Done() - resizeGeneric(img, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - // horizontal filter on transposed image, result is not transposed - coeffs, offset, filterLength = createWeights16(result.Bounds().Dy(), taps, blur, scaleY, kernel) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*image.RGBA64) - go func() { - defer wg.Done() - resizeRGBA64(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result - } -} - -func resizeNearest(width, height uint, scaleX, scaleY float64, img image.Image, interp InterpolationFunction) image.Image { - taps, _ := interp.kernel() - cpus := runtime.GOMAXPROCS(0) - wg := sync.WaitGroup{} - - switch input := img.(type) { - case *image.RGBA: - // 8-bit precision - temp := image.NewRGBA(image.Rect(0, 0, input.Bounds().Dy(), int(width))) - result := image.NewRGBA(image.Rect(0, 0, int(width), int(height))) - - // horizontal filter, results in transposed temporary image - coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*image.RGBA) - go func() { - defer wg.Done() - nearestRGBA(input, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - // horizontal filter on transposed image, result is not transposed - coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*image.RGBA) - go func() { - defer wg.Done() - nearestRGBA(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result - case *image.NRGBA: - // 8-bit precision - temp := image.NewNRGBA(image.Rect(0, 0, input.Bounds().Dy(), int(width))) - result := image.NewNRGBA(image.Rect(0, 0, int(width), int(height))) - - // horizontal filter, results in transposed temporary image - coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*image.NRGBA) - go func() { - defer wg.Done() - nearestNRGBA(input, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - // horizontal filter on transposed image, result is not transposed - coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*image.NRGBA) - go func() { - defer wg.Done() - nearestNRGBA(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result - case *image.YCbCr: - // 8-bit precision - // accessing the YCbCr arrays in a tight loop is slow. - // converting the image to ycc increases performance by 2x. - temp := newYCC(image.Rect(0, 0, input.Bounds().Dy(), int(width)), input.SubsampleRatio) - result := newYCC(image.Rect(0, 0, int(width), int(height)), image.YCbCrSubsampleRatio444) - - coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) - in := imageYCbCrToYCC(input) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*ycc) - go func() { - defer wg.Done() - nearestYCbCr(in, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*ycc) - go func() { - defer wg.Done() - nearestYCbCr(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result.YCbCr() - case *image.RGBA64: - // 16-bit precision - temp := image.NewRGBA64(image.Rect(0, 0, input.Bounds().Dy(), int(width))) - result := image.NewRGBA64(image.Rect(0, 0, int(width), int(height))) - - // horizontal filter, results in transposed temporary image - coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*image.RGBA64) - go func() { - defer wg.Done() - nearestRGBA64(input, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - // horizontal filter on transposed image, result is not transposed - coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*image.RGBA64) - go func() { - defer wg.Done() - nearestRGBA64(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result - case *image.NRGBA64: - // 16-bit precision - temp := image.NewNRGBA64(image.Rect(0, 0, input.Bounds().Dy(), int(width))) - result := image.NewNRGBA64(image.Rect(0, 0, int(width), int(height))) - - // horizontal filter, results in transposed temporary image - coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*image.NRGBA64) - go func() { - defer wg.Done() - nearestNRGBA64(input, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - // horizontal filter on transposed image, result is not transposed - coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*image.NRGBA64) - go func() { - defer wg.Done() - nearestNRGBA64(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result - case *image.Gray: - // 8-bit precision - temp := image.NewGray(image.Rect(0, 0, input.Bounds().Dy(), int(width))) - result := image.NewGray(image.Rect(0, 0, int(width), int(height))) - - // horizontal filter, results in transposed temporary image - coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*image.Gray) - go func() { - defer wg.Done() - nearestGray(input, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - // horizontal filter on transposed image, result is not transposed - coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*image.Gray) - go func() { - defer wg.Done() - nearestGray(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result - case *image.Gray16: - // 16-bit precision - temp := image.NewGray16(image.Rect(0, 0, input.Bounds().Dy(), int(width))) - result := image.NewGray16(image.Rect(0, 0, int(width), int(height))) - - // horizontal filter, results in transposed temporary image - coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*image.Gray16) - go func() { - defer wg.Done() - nearestGray16(input, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - // horizontal filter on transposed image, result is not transposed - coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*image.Gray16) - go func() { - defer wg.Done() - nearestGray16(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result - default: - // 16-bit precision - temp := image.NewRGBA64(image.Rect(0, 0, img.Bounds().Dy(), int(width))) - result := image.NewRGBA64(image.Rect(0, 0, int(width), int(height))) - - // horizontal filter, results in transposed temporary image - coeffs, offset, filterLength := createWeightsNearest(temp.Bounds().Dy(), taps, blur, scaleX) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(temp, i, cpus).(*image.RGBA64) - go func() { - defer wg.Done() - nearestGeneric(img, slice, scaleX, coeffs, offset, filterLength) - }() - } - wg.Wait() - - // horizontal filter on transposed image, result is not transposed - coeffs, offset, filterLength = createWeightsNearest(result.Bounds().Dy(), taps, blur, scaleY) - wg.Add(cpus) - for i := 0; i < cpus; i++ { - slice := makeSlice(result, i, cpus).(*image.RGBA64) - go func() { - defer wg.Done() - nearestRGBA64(temp, slice, scaleY, coeffs, offset, filterLength) - }() - } - wg.Wait() - return result - } - -} - -// Calculates scaling factors using old and new image dimensions. -func calcFactors(width, height uint, oldWidth, oldHeight float64) (scaleX, scaleY float64) { - if width == 0 { - if height == 0 { - scaleX = 1.0 - scaleY = 1.0 - } else { - scaleY = oldHeight / float64(height) - scaleX = scaleY - } - } else { - scaleX = oldWidth / float64(width) - if height == 0 { - scaleY = scaleX - } else { - scaleY = oldHeight / float64(height) - } - } - return -} - -type imageWithSubImage interface { - image.Image - SubImage(image.Rectangle) image.Image -} - -func makeSlice(img imageWithSubImage, i, n int) image.Image { - return img.SubImage(image.Rect(img.Bounds().Min.X, img.Bounds().Min.Y+i*img.Bounds().Dy()/n, img.Bounds().Max.X, img.Bounds().Min.Y+(i+1)*img.Bounds().Dy()/n)) -} diff --git a/vendor/github.com/nfnt/resize/thumbnail.go b/vendor/github.com/nfnt/resize/thumbnail.go deleted file mode 100644 index 9efc246be..000000000 --- a/vendor/github.com/nfnt/resize/thumbnail.go +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright (c) 2012, Jan Schlicht - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. -*/ - -package resize - -import ( - "image" -) - -// Thumbnail will downscale provided image to max width and height preserving -// original aspect ratio and using the interpolation function interp. -// It will return original image, without processing it, if original sizes -// are already smaller than provided constraints. -func Thumbnail(maxWidth, maxHeight uint, img image.Image, interp InterpolationFunction) image.Image { - origBounds := img.Bounds() - origWidth := uint(origBounds.Dx()) - origHeight := uint(origBounds.Dy()) - newWidth, newHeight := origWidth, origHeight - - // Return original image if it have same or smaller size as constraints - if maxWidth >= origWidth && maxHeight >= origHeight { - return img - } - - // Preserve aspect ratio - if origWidth > maxWidth { - newHeight = uint(origHeight * maxWidth / origWidth) - if newHeight < 1 { - newHeight = 1 - } - newWidth = maxWidth - } - - if newHeight > maxHeight { - newWidth = uint(newWidth * maxHeight / newHeight) - if newWidth < 1 { - newWidth = 1 - } - newHeight = maxHeight - } - return Resize(newWidth, newHeight, img, interp) -} diff --git a/vendor/github.com/nfnt/resize/ycc.go b/vendor/github.com/nfnt/resize/ycc.go deleted file mode 100644 index 104159955..000000000 --- a/vendor/github.com/nfnt/resize/ycc.go +++ /dev/null @@ -1,227 +0,0 @@ -/* -Copyright (c) 2014, Charlie Vieth - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. -*/ - -package resize - -import ( - "image" - "image/color" -) - -// ycc is an in memory YCbCr image. The Y, Cb and Cr samples are held in a -// single slice to increase resizing performance. -type ycc struct { - // Pix holds the image's pixels, in Y, Cb, Cr order. The pixel at - // (x, y) starts at Pix[(y-Rect.Min.Y)*Stride + (x-Rect.Min.X)*3]. - Pix []uint8 - // Stride is the Pix stride (in bytes) between vertically adjacent pixels. - Stride int - // Rect is the image's bounds. - Rect image.Rectangle - // SubsampleRatio is the subsample ratio of the original YCbCr image. - SubsampleRatio image.YCbCrSubsampleRatio -} - -// PixOffset returns the index of the first element of Pix that corresponds to -// the pixel at (x, y). -func (p *ycc) PixOffset(x, y int) int { - return (y-p.Rect.Min.Y)*p.Stride + (x-p.Rect.Min.X)*3 -} - -func (p *ycc) Bounds() image.Rectangle { - return p.Rect -} - -func (p *ycc) ColorModel() color.Model { - return color.YCbCrModel -} - -func (p *ycc) At(x, y int) color.Color { - if !(image.Point{x, y}.In(p.Rect)) { - return color.YCbCr{} - } - i := p.PixOffset(x, y) - return color.YCbCr{ - p.Pix[i+0], - p.Pix[i+1], - p.Pix[i+2], - } -} - -func (p *ycc) Opaque() bool { - return true -} - -// SubImage returns an image representing the portion of the image p visible -// through r. The returned value shares pixels with the original image. -func (p *ycc) SubImage(r image.Rectangle) image.Image { - r = r.Intersect(p.Rect) - if r.Empty() { - return &ycc{SubsampleRatio: p.SubsampleRatio} - } - i := p.PixOffset(r.Min.X, r.Min.Y) - return &ycc{ - Pix: p.Pix[i:], - Stride: p.Stride, - Rect: r, - SubsampleRatio: p.SubsampleRatio, - } -} - -// newYCC returns a new ycc with the given bounds and subsample ratio. -func newYCC(r image.Rectangle, s image.YCbCrSubsampleRatio) *ycc { - w, h := r.Dx(), r.Dy() - buf := make([]uint8, 3*w*h) - return &ycc{Pix: buf, Stride: 3 * w, Rect: r, SubsampleRatio: s} -} - -// YCbCr converts ycc to a YCbCr image with the same subsample ratio -// as the YCbCr image that ycc was generated from. -func (p *ycc) YCbCr() *image.YCbCr { - ycbcr := image.NewYCbCr(p.Rect, p.SubsampleRatio) - var off int - - switch ycbcr.SubsampleRatio { - case image.YCbCrSubsampleRatio422: - for y := ycbcr.Rect.Min.Y; y < ycbcr.Rect.Max.Y; y++ { - yy := (y - ycbcr.Rect.Min.Y) * ycbcr.YStride - cy := (y - ycbcr.Rect.Min.Y) * ycbcr.CStride - for x := ycbcr.Rect.Min.X; x < ycbcr.Rect.Max.X; x++ { - xx := (x - ycbcr.Rect.Min.X) - yi := yy + xx - ci := cy + xx/2 - ycbcr.Y[yi] = p.Pix[off+0] - ycbcr.Cb[ci] = p.Pix[off+1] - ycbcr.Cr[ci] = p.Pix[off+2] - off += 3 - } - } - case image.YCbCrSubsampleRatio420: - for y := ycbcr.Rect.Min.Y; y < ycbcr.Rect.Max.Y; y++ { - yy := (y - ycbcr.Rect.Min.Y) * ycbcr.YStride - cy := (y/2 - ycbcr.Rect.Min.Y/2) * ycbcr.CStride - for x := ycbcr.Rect.Min.X; x < ycbcr.Rect.Max.X; x++ { - xx := (x - ycbcr.Rect.Min.X) - yi := yy + xx - ci := cy + xx/2 - ycbcr.Y[yi] = p.Pix[off+0] - ycbcr.Cb[ci] = p.Pix[off+1] - ycbcr.Cr[ci] = p.Pix[off+2] - off += 3 - } - } - case image.YCbCrSubsampleRatio440: - for y := ycbcr.Rect.Min.Y; y < ycbcr.Rect.Max.Y; y++ { - yy := (y - ycbcr.Rect.Min.Y) * ycbcr.YStride - cy := (y/2 - ycbcr.Rect.Min.Y/2) * ycbcr.CStride - for x := ycbcr.Rect.Min.X; x < ycbcr.Rect.Max.X; x++ { - xx := (x - ycbcr.Rect.Min.X) - yi := yy + xx - ci := cy + xx - ycbcr.Y[yi] = p.Pix[off+0] - ycbcr.Cb[ci] = p.Pix[off+1] - ycbcr.Cr[ci] = p.Pix[off+2] - off += 3 - } - } - default: - // Default to 4:4:4 subsampling. - for y := ycbcr.Rect.Min.Y; y < ycbcr.Rect.Max.Y; y++ { - yy := (y - ycbcr.Rect.Min.Y) * ycbcr.YStride - cy := (y - ycbcr.Rect.Min.Y) * ycbcr.CStride - for x := ycbcr.Rect.Min.X; x < ycbcr.Rect.Max.X; x++ { - xx := (x - ycbcr.Rect.Min.X) - yi := yy + xx - ci := cy + xx - ycbcr.Y[yi] = p.Pix[off+0] - ycbcr.Cb[ci] = p.Pix[off+1] - ycbcr.Cr[ci] = p.Pix[off+2] - off += 3 - } - } - } - return ycbcr -} - -// imageYCbCrToYCC converts a YCbCr image to a ycc image for resizing. -func imageYCbCrToYCC(in *image.YCbCr) *ycc { - w, h := in.Rect.Dx(), in.Rect.Dy() - r := image.Rect(0, 0, w, h) - buf := make([]uint8, 3*w*h) - p := ycc{Pix: buf, Stride: 3 * w, Rect: r, SubsampleRatio: in.SubsampleRatio} - var off int - - switch in.SubsampleRatio { - case image.YCbCrSubsampleRatio422: - for y := in.Rect.Min.Y; y < in.Rect.Max.Y; y++ { - yy := (y - in.Rect.Min.Y) * in.YStride - cy := (y - in.Rect.Min.Y) * in.CStride - for x := in.Rect.Min.X; x < in.Rect.Max.X; x++ { - xx := (x - in.Rect.Min.X) - yi := yy + xx - ci := cy + xx/2 - p.Pix[off+0] = in.Y[yi] - p.Pix[off+1] = in.Cb[ci] - p.Pix[off+2] = in.Cr[ci] - off += 3 - } - } - case image.YCbCrSubsampleRatio420: - for y := in.Rect.Min.Y; y < in.Rect.Max.Y; y++ { - yy := (y - in.Rect.Min.Y) * in.YStride - cy := (y/2 - in.Rect.Min.Y/2) * in.CStride - for x := in.Rect.Min.X; x < in.Rect.Max.X; x++ { - xx := (x - in.Rect.Min.X) - yi := yy + xx - ci := cy + xx/2 - p.Pix[off+0] = in.Y[yi] - p.Pix[off+1] = in.Cb[ci] - p.Pix[off+2] = in.Cr[ci] - off += 3 - } - } - case image.YCbCrSubsampleRatio440: - for y := in.Rect.Min.Y; y < in.Rect.Max.Y; y++ { - yy := (y - in.Rect.Min.Y) * in.YStride - cy := (y/2 - in.Rect.Min.Y/2) * in.CStride - for x := in.Rect.Min.X; x < in.Rect.Max.X; x++ { - xx := (x - in.Rect.Min.X) - yi := yy + xx - ci := cy + xx - p.Pix[off+0] = in.Y[yi] - p.Pix[off+1] = in.Cb[ci] - p.Pix[off+2] = in.Cr[ci] - off += 3 - } - } - default: - // Default to 4:4:4 subsampling. - for y := in.Rect.Min.Y; y < in.Rect.Max.Y; y++ { - yy := (y - in.Rect.Min.Y) * in.YStride - cy := (y - in.Rect.Min.Y) * in.CStride - for x := in.Rect.Min.X; x < in.Rect.Max.X; x++ { - xx := (x - in.Rect.Min.X) - yi := yy + xx - ci := cy + xx - p.Pix[off+0] = in.Y[yi] - p.Pix[off+1] = in.Cb[ci] - p.Pix[off+2] = in.Cr[ci] - off += 3 - } - } - } - return &p -} diff --git a/vendor/github.com/pquerna/otp/LICENSE b/vendor/github.com/pquerna/otp/LICENSE deleted file mode 100644 index d64569567..000000000 --- a/vendor/github.com/pquerna/otp/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - 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/pquerna/otp/NOTICE b/vendor/github.com/pquerna/otp/NOTICE deleted file mode 100644 index 50e2e7501..000000000 --- a/vendor/github.com/pquerna/otp/NOTICE +++ /dev/null @@ -1,5 +0,0 @@ -otp -Copyright (c) 2014, Paul Querna - -This product includes software developed by -Paul Querna (http://paul.querna.org/). diff --git a/vendor/github.com/pquerna/otp/README.md b/vendor/github.com/pquerna/otp/README.md deleted file mode 100644 index 148e8980d..000000000 --- a/vendor/github.com/pquerna/otp/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# otp: One Time Password utilities Go / Golang - -[![GoDoc](https://godoc.org/github.com/pquerna/otp?status.svg)](https://godoc.org/github.com/pquerna/otp) [![Build Status](https://travis-ci.org/pquerna/otp.svg?branch=master)](https://travis-ci.org/pquerna/otp) - -# Why One Time Passwords? - -One Time Passwords (OTPs) are an mechanism to improve security over passwords alone. When a Time-based OTP (TOTP) is stored on a user's phone, and combined with something the user knows (Password), you have an easy on-ramp to [Multi-factor authentication](http://en.wikipedia.org/wiki/Multi-factor_authentication) without adding a dependency on a SMS provider. This Password and TOTP combination is used by many popular websites including Google, Github, Facebook, Salesforce and many others. - -The `otp` library enables you to easily add TOTPs to your own application, increasing your user's security against mass-password breaches and malware. - -Because TOTP is standardized and widely deployed, there are many [mobile clients and software implementations](http://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm#Client_implementations). - -## `otp` Supports: - -* Generating QR Code images for easy user enrollment. -* Time-based One-time Password Algorithm (TOTP) (RFC 6238): Time based OTP, the most commonly used method. -* HMAC-based One-time Password Algorithm (HOTP) (RFC 4226): Counter based OTP, which TOTP is based upon. -* Generation and Validation of codes for either algorithm. - -## Implementing TOTP in your application: - -### User Enrollment - -For an example of a working enrollment work flow, [Github has documented theirs](https://help.github.com/articles/configuring-two-factor-authentication-via-a-totp-mobile-app/ -), but the basics are: - -1. Generate new TOTP Key for a User. `key,_ := totp.Generate(...)`. -1. Display the Key's Secret and QR-Code for the User. `key.Secret()` and `key.Image(...)`. -1. Test that the user can successfully use their TOTP. `totp.Validate(...)`. -1. Store TOTP Secret for the User in your backend. `key.Secret()` -1. Provide the user with "recovery codes". (See Recovery Codes bellow) - -### Code Generation - -* In either TOTP or HOTP cases, use the `GenerateCode` function and a counter or - `time.Time` struct to generate a valid code compatible with most implementations. -* For uncommon or custom settings, or to catch unlikely errors, use `GenerateCodeCustom` - in either module. - -### Validation - -1. Prompt and validate User's password as normal. -1. If the user has TOTP enabled, prompt for TOTP passcode. -1. Retrieve the User's TOTP Secret from your backend. -1. Validate the user's passcode. `totp.Validate(...)` - - -### Recovery Codes - -When a user loses access to their TOTP device, they would no longer have access to their account. Because TOTPs are often configured on mobile devices that can be lost, stolen or damaged, this is a common problem. For this reason many providers give their users "backup codes" or "recovery codes". These are a set of one time use codes that can be used instead of the TOTP. These can simply be randomly generated strings that you store in your backend. [Github's documentation provides an overview of the user experience]( -https://help.github.com/articles/downloading-your-two-factor-authentication-recovery-codes/). - - -## Improvements, bugs, adding feature, etc: - -Please [open issues in Github](https://github.com/pquerna/otp/issues) for ideas, bugs, and general thoughts. Pull requests are of course preferred :) - -## License - -`otp` is licensed under the [Apache License, Version 2.0](./LICENSE) diff --git a/vendor/github.com/pquerna/otp/doc.go b/vendor/github.com/pquerna/otp/doc.go deleted file mode 100644 index b8b4c8cc1..000000000 --- a/vendor/github.com/pquerna/otp/doc.go +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Copyright 2014 Paul Querna - * - * 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 otp implements both HOTP and TOTP based -// one time passcodes in a Google Authenticator compatible manner. -// -// When adding a TOTP for a user, you must store the "secret" value -// persistently. It is recommend to store the secret in an encrypted field in your -// datastore. Due to how TOTP works, it is not possible to store a hash -// for the secret value like you would a password. -// -// To enroll a user, you must first generate an OTP for them. Google -// Authenticator supports using a QR code as an enrollment method: -// -// import ( -// "github.com/pquerna/otp/totp" -// -// "bytes" -// "image/png" -// ) -// -// key, err := totp.Generate(totp.GenerateOpts{ -// Issuer: "Example.com", -// AccountName: "alice@example.com", -// }) -// -// // Convert TOTP key into a QR code encoded as a PNG image. -// var buf bytes.Buffer -// img, err := key.Image(200, 200) -// png.Encode(&buf, img) -// -// // display the QR code to the user. -// display(buf.Bytes()) -// -// // Now Validate that the user's successfully added the passcode. -// passcode := promptForPasscode() -// valid := totp.Validate(passcode, key.Secret()) -// -// if valid { -// // User successfully used their TOTP, save it to your backend! -// storeSecret("alice@example.com", key.Secret()) -// } -// -// Validating a TOTP passcode is very easy, just prompt the user for a passcode -// and retrieve the associated user's previously stored secret. -// import "github.com/pquerna/otp/totp" -// -// passcode := promptForPasscode() -// secret := getSecret("alice@example.com") -// -// valid := totp.Validate(passcode, secret) -// -// if valid { -// // Success! continue login process. -// } -package otp diff --git a/vendor/github.com/pquerna/otp/hotp/hotp.go b/vendor/github.com/pquerna/otp/hotp/hotp.go deleted file mode 100644 index ced7d8e28..000000000 --- a/vendor/github.com/pquerna/otp/hotp/hotp.go +++ /dev/null @@ -1,187 +0,0 @@ -/** - * Copyright 2014 Paul Querna - * - * 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 hotp - -import ( - "github.com/pquerna/otp" - - "crypto/hmac" - "crypto/rand" - "crypto/subtle" - "encoding/base32" - "encoding/binary" - "fmt" - "math" - "net/url" - "strings" -) - -const debug = false - -// Validate a HOTP passcode given a counter and secret. -// This is a shortcut for ValidateCustom, with parameters that -// are compataible with Google-Authenticator. -func Validate(passcode string, counter uint64, secret string) bool { - rv, _ := ValidateCustom( - passcode, - counter, - secret, - ValidateOpts{ - Digits: otp.DigitsSix, - Algorithm: otp.AlgorithmSHA1, - }, - ) - return rv -} - -// ValidateOpts provides options for ValidateCustom(). -type ValidateOpts struct { - // Digits as part of the input. Defaults to 6. - Digits otp.Digits - // Algorithm to use for HMAC. Defaults to SHA1. - Algorithm otp.Algorithm -} - -// GenerateCode creates a HOTP passcode given a counter and secret. -// This is a shortcut for GenerateCodeCustom, with parameters that -// are compataible with Google-Authenticator. -func GenerateCode(secret string, counter uint64) (string, error) { - return GenerateCodeCustom(secret, counter, ValidateOpts{ - Digits: otp.DigitsSix, - Algorithm: otp.AlgorithmSHA1, - }) -} - -// GenerateCodeCustom uses a counter and secret value and options struct to -// create a passcode. -func GenerateCodeCustom(secret string, counter uint64, opts ValidateOpts) (passcode string, err error) { - // As noted in issue #10 this adds support for TOTP secrets that are - // missing their padding. - if n := len(secret) % 8; n != 0 { - secret = secret + strings.Repeat("=", 8-n) - } - - secretBytes, err := base32.StdEncoding.DecodeString(secret) - if err != nil { - return "", otp.ErrValidateSecretInvalidBase32 - } - - buf := make([]byte, 8) - mac := hmac.New(opts.Algorithm.Hash, secretBytes) - binary.BigEndian.PutUint64(buf, counter) - if debug { - fmt.Printf("counter=%v\n", counter) - fmt.Printf("buf=%v\n", buf) - } - - mac.Write(buf) - sum := mac.Sum(nil) - - // "Dynamic truncation" in RFC 4226 - // http://tools.ietf.org/html/rfc4226#section-5.4 - offset := sum[len(sum)-1] & 0xf - value := int64(((int(sum[offset]) & 0x7f) << 24) | - ((int(sum[offset+1] & 0xff)) << 16) | - ((int(sum[offset+2] & 0xff)) << 8) | - (int(sum[offset+3]) & 0xff)) - - l := opts.Digits.Length() - mod := int32(value % int64(math.Pow10(l))) - - if debug { - fmt.Printf("offset=%v\n", offset) - fmt.Printf("value=%v\n", value) - fmt.Printf("mod'ed=%v\n", mod) - } - - return opts.Digits.Format(mod), nil -} - -// ValidateCustom validates an HOTP with customizable options. Most users should -// use Validate(). -func ValidateCustom(passcode string, counter uint64, secret string, opts ValidateOpts) (bool, error) { - passcode = strings.TrimSpace(passcode) - - if len(passcode) != opts.Digits.Length() { - return false, otp.ErrValidateInputInvalidLength - } - - otpstr, err := GenerateCodeCustom(secret, counter, opts) - if err != nil { - return false, err - } - - if subtle.ConstantTimeCompare([]byte(otpstr), []byte(passcode)) == 1 { - return true, nil - } - - return false, nil -} - -// GenerateOpts provides options for .Generate() -type GenerateOpts struct { - // Name of the issuing Organization/Company. - Issuer string - // Name of the User's Account (eg, email address) - AccountName string - // Size in size of the generated Secret. Defaults to 10 bytes. - SecretSize uint - // Digits to request. Defaults to 6. - Digits otp.Digits - // Algorithm to use for HMAC. Defaults to SHA1. - Algorithm otp.Algorithm -} - -// Generate creates a new HOTP Key. -func Generate(opts GenerateOpts) (*otp.Key, error) { - // url encode the Issuer/AccountName - if opts.Issuer == "" { - return nil, otp.ErrGenerateMissingIssuer - } - - if opts.AccountName == "" { - return nil, otp.ErrGenerateMissingAccountName - } - - if opts.SecretSize == 0 { - opts.SecretSize = 10 - } - - // otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example - - v := url.Values{} - secret := make([]byte, opts.SecretSize) - _, err := rand.Read(secret) - if err != nil { - return nil, err - } - - v.Set("secret", base32.StdEncoding.EncodeToString(secret)) - v.Set("issuer", opts.Issuer) - v.Set("algorithm", opts.Algorithm.String()) - v.Set("digits", opts.Digits.String()) - - u := url.URL{ - Scheme: "otpauth", - Host: "hotp", - Path: "/" + opts.Issuer + ":" + opts.AccountName, - RawQuery: v.Encode(), - } - - return otp.NewKeyFromURL(u.String()) -} diff --git a/vendor/github.com/pquerna/otp/otp.go b/vendor/github.com/pquerna/otp/otp.go deleted file mode 100644 index 0fa970927..000000000 --- a/vendor/github.com/pquerna/otp/otp.go +++ /dev/null @@ -1,200 +0,0 @@ -/** - * Copyright 2014 Paul Querna - * - * 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 otp - -import ( - "github.com/boombuler/barcode" - "github.com/boombuler/barcode/qr" - - "crypto/md5" - "crypto/sha1" - "crypto/sha256" - "crypto/sha512" - "errors" - "fmt" - "hash" - "image" - "net/url" - "strings" -) - -// Error when attempting to convert the secret from base32 to raw bytes. -var ErrValidateSecretInvalidBase32 = errors.New("Decoding of secret as base32 failed.") - -// The user provided passcode length was not expected. -var ErrValidateInputInvalidLength = errors.New("Input length unexpected") - -// When generating a Key, the Issuer must be set. -var ErrGenerateMissingIssuer = errors.New("Issuer must be set") - -// When generating a Key, the Account Name must be set. -var ErrGenerateMissingAccountName = errors.New("AccountName must be set") - -// Key represents an TOTP or HTOP key. -type Key struct { - orig string - url *url.URL -} - -// NewKeyFromURL creates a new Key from an TOTP or HOTP url. -// -// The URL format is documented here: -// https://github.com/google/google-authenticator/wiki/Key-Uri-Format -// -func NewKeyFromURL(orig string) (*Key, error) { - u, err := url.Parse(orig) - - if err != nil { - return nil, err - } - - return &Key{ - orig: orig, - url: u, - }, nil -} - -func (k *Key) String() string { - return k.orig -} - -// Image returns an QR-Code image of the specified width and height, -// suitable for use by many clients like Google-Authenricator -// to enroll a user's TOTP/HOTP key. -func (k *Key) Image(width int, height int) (image.Image, error) { - b, err := qr.Encode(k.orig, qr.M, qr.Auto) - - if err != nil { - return nil, err - } - - b, err = barcode.Scale(b, width, height) - - if err != nil { - return nil, err - } - - return b, nil -} - -// Type returns "hotp" or "totp". -func (k *Key) Type() string { - return k.url.Host -} - -// Issuer returns the name of the issuing organization. -func (k *Key) Issuer() string { - q := k.url.Query() - - issuer := q.Get("issuer") - - if issuer != "" { - return issuer - } - - p := strings.TrimPrefix(k.url.Path, "/") - i := strings.Index(p, ":") - - if i == -1 { - return "" - } - - return p[:i] -} - -// AccountName returns the name of the user's account. -func (k *Key) AccountName() string { - p := strings.TrimPrefix(k.url.Path, "/") - i := strings.Index(p, ":") - - if i == -1 { - return p - } - - return p[i+1:] -} - -// Secret returns the opaque secret for this Key. -func (k *Key) Secret() string { - q := k.url.Query() - - return q.Get("secret") -} - -// Algorithm represents the hashing function to use in the HMAC -// operation needed for OTPs. -type Algorithm int - -const ( - AlgorithmSHA1 Algorithm = iota - AlgorithmSHA256 - AlgorithmSHA512 - AlgorithmMD5 -) - -func (a Algorithm) String() string { - switch a { - case AlgorithmSHA1: - return "SHA1" - case AlgorithmSHA256: - return "SHA256" - case AlgorithmSHA512: - return "SHA512" - case AlgorithmMD5: - return "MD5" - } - panic("unreached") -} - -func (a Algorithm) Hash() hash.Hash { - switch a { - case AlgorithmSHA1: - return sha1.New() - case AlgorithmSHA256: - return sha256.New() - case AlgorithmSHA512: - return sha512.New() - case AlgorithmMD5: - return md5.New() - } - panic("unreached") -} - -// Digits represents the number of digits present in the -// user's OTP passcode. Six and Eight are the most common values. -type Digits int - -const ( - DigitsSix Digits = 6 - DigitsEight Digits = 8 -) - -// Format converts an integer into the zero-filled size for this Digits. -func (d Digits) Format(in int32) string { - f := fmt.Sprintf("%%0%dd", d) - return fmt.Sprintf(f, in) -} - -// Length returns the number of characters for this Digits. -func (d Digits) Length() int { - return int(d) -} - -func (d Digits) String() string { - return fmt.Sprintf("%d", d) -} diff --git a/vendor/github.com/pquerna/otp/totp/totp.go b/vendor/github.com/pquerna/otp/totp/totp.go deleted file mode 100644 index af5ab8296..000000000 --- a/vendor/github.com/pquerna/otp/totp/totp.go +++ /dev/null @@ -1,191 +0,0 @@ -/** - * Copyright 2014 Paul Querna - * - * 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 totp - -import ( - "github.com/pquerna/otp" - "github.com/pquerna/otp/hotp" - - "crypto/rand" - "encoding/base32" - "math" - "net/url" - "strconv" - "time" -) - -// Validate a TOTP using the current time. -// A shortcut for ValidateCustom, Validate uses a configuration -// that is compatible with Google-Authenticator and most clients. -func Validate(passcode string, secret string) bool { - rv, _ := ValidateCustom( - passcode, - secret, - time.Now().UTC(), - ValidateOpts{ - Period: 30, - Skew: 1, - Digits: otp.DigitsSix, - Algorithm: otp.AlgorithmSHA1, - }, - ) - return rv -} - -// GenerateCode creates a TOTP token using the current time. -// A shortcut for GenerateCodeCustom, GenerateCode uses a configuration -// that is compatible with Google-Authenticator and most clients. -func GenerateCode(secret string, t time.Time) (string, error) { - return GenerateCodeCustom(secret, t, ValidateOpts{ - Period: 30, - Skew: 1, - Digits: otp.DigitsSix, - Algorithm: otp.AlgorithmSHA1, - }) -} - -// ValidateOpts provides options for ValidateCustom(). -type ValidateOpts struct { - // Number of seconds a TOTP hash is valid for. Defaults to 30 seconds. - Period uint - // Periods before or after the current time to allow. Value of 1 allows up to Period - // of either side of the specified time. Defaults to 0 allowed skews. Values greater - // than 1 are likely sketchy. - Skew uint - // Digits as part of the input. Defaults to 6. - Digits otp.Digits - // Algorithm to use for HMAC. Defaults to SHA1. - Algorithm otp.Algorithm -} - -// GenerateCodeCustom takes a timepoint and produces a passcode using a -// secret and the provided opts. (Under the hood, this is making an adapted -// call to hotp.GenerateCodeCustom) -func GenerateCodeCustom(secret string, t time.Time, opts ValidateOpts) (passcode string, err error) { - if opts.Period == 0 { - opts.Period = 30 - } - counter := uint64(math.Floor(float64(t.Unix()) / float64(opts.Period))) - passcode, err = hotp.GenerateCodeCustom(secret, counter, hotp.ValidateOpts{ - Digits: opts.Digits, - Algorithm: opts.Algorithm, - }) - if err != nil { - return "", err - } - return passcode, nil -} - -// ValidateCustom validates a TOTP given a user specified time and custom options. -// Most users should use Validate() to provide an interpolatable TOTP experience. -func ValidateCustom(passcode string, secret string, t time.Time, opts ValidateOpts) (bool, error) { - if opts.Period == 0 { - opts.Period = 30 - } - - counters := []uint64{} - counter := int64(math.Floor(float64(t.Unix()) / float64(opts.Period))) - - counters = append(counters, uint64(counter)) - for i := 1; i <= int(opts.Skew); i++ { - counters = append(counters, uint64(counter+int64(i))) - counters = append(counters, uint64(counter-int64(i))) - } - - for _, counter := range counters { - rv, err := hotp.ValidateCustom(passcode, counter, secret, hotp.ValidateOpts{ - Digits: opts.Digits, - Algorithm: opts.Algorithm, - }) - - if err != nil { - return false, err - } - - if rv == true { - return true, nil - } - } - - return false, nil -} - -// GenerateOpts provides options for Generate(). The default values -// are compatible with Google-Authenticator. -type GenerateOpts struct { - // Name of the issuing Organization/Company. - Issuer string - // Name of the User's Account (eg, email address) - AccountName string - // Number of seconds a TOTP hash is valid for. Defaults to 30 seconds. - Period uint - // Size in size of the generated Secret. Defaults to 10 bytes. - SecretSize uint - // Digits to request. Defaults to 6. - Digits otp.Digits - // Algorithm to use for HMAC. Defaults to SHA1. - Algorithm otp.Algorithm -} - -// Generate a new TOTP Key. -func Generate(opts GenerateOpts) (*otp.Key, error) { - // url encode the Issuer/AccountName - if opts.Issuer == "" { - return nil, otp.ErrGenerateMissingIssuer - } - - if opts.AccountName == "" { - return nil, otp.ErrGenerateMissingAccountName - } - - if opts.Period == 0 { - opts.Period = 30 - } - - if opts.SecretSize == 0 { - opts.SecretSize = 10 - } - - if opts.Digits == 0 { - opts.Digits = otp.DigitsSix - } - - // otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example - - v := url.Values{} - secret := make([]byte, opts.SecretSize) - _, err := rand.Read(secret) - if err != nil { - return nil, err - } - - v.Set("secret", base32.StdEncoding.EncodeToString(secret)) - v.Set("issuer", opts.Issuer) - v.Set("period", strconv.FormatUint(uint64(opts.Period), 10)) - v.Set("algorithm", opts.Algorithm.String()) - v.Set("digits", opts.Digits.String()) - - u := url.URL{ - Scheme: "otpauth", - Host: "totp", - Path: "/" + opts.Issuer + ":" + opts.AccountName, - RawQuery: v.Encode(), - } - - return otp.NewKeyFromURL(u.String()) -} diff --git a/vendor/github.com/prometheus/client_golang/LICENSE b/vendor/github.com/prometheus/client_golang/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/vendor/github.com/prometheus/client_golang/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - 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/prometheus/client_golang/NOTICE b/vendor/github.com/prometheus/client_golang/NOTICE deleted file mode 100644 index dd878a30e..000000000 --- a/vendor/github.com/prometheus/client_golang/NOTICE +++ /dev/null @@ -1,23 +0,0 @@ -Prometheus instrumentation library for Go applications -Copyright 2012-2015 The Prometheus Authors - -This product includes software developed at -SoundCloud Ltd. (http://soundcloud.com/). - - -The following components are included in this product: - -perks - a fork of https://github.com/bmizerany/perks -https://github.com/beorn7/perks -Copyright 2013-2015 Blake Mizerany, Björn Rabenstein -See https://github.com/beorn7/perks/blob/master/README.md for license details. - -Go support for Protocol Buffers - Google's data interchange format -http://github.com/golang/protobuf/ -Copyright 2010 The Go Authors -See source code for license details. - -Support for streaming Protocol Buffer messages for the Go language (golang). -https://github.com/matttproud/golang_protobuf_extensions -Copyright 2013 Matt T. Proud -Licensed under the Apache License, Version 2.0 diff --git a/vendor/github.com/prometheus/client_golang/prometheus/README.md b/vendor/github.com/prometheus/client_golang/prometheus/README.md deleted file mode 100644 index 44986bff0..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/README.md +++ /dev/null @@ -1 +0,0 @@ -See [![go-doc](https://godoc.org/github.com/prometheus/client_golang/prometheus?status.svg)](https://godoc.org/github.com/prometheus/client_golang/prometheus). diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collector.go b/vendor/github.com/prometheus/client_golang/prometheus/collector.go deleted file mode 100644 index 08491bef0..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/collector.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -// Collector is the interface implemented by anything that can be used by -// Prometheus to collect metrics. A Collector has to be registered for -// collection. See Registerer.Register. -// -// The stock metrics provided by this package (Gauge, Counter, Summary, -// Histogram, Untyped) are also Collectors (which only ever collect one metric, -// namely itself). An implementer of Collector may, however, collect multiple -// metrics in a coordinated fashion and/or create metrics on the fly. Examples -// for collectors already implemented in this library are the metric vectors -// (i.e. collection of multiple instances of the same Metric but with different -// label values) like GaugeVec or SummaryVec, and the ExpvarCollector. -type Collector interface { - // Describe sends the super-set of all possible descriptors of metrics - // collected by this Collector to the provided channel and returns once - // the last descriptor has been sent. The sent descriptors fulfill the - // consistency and uniqueness requirements described in the Desc - // documentation. - // - // It is valid if one and the same Collector sends duplicate - // descriptors. Those duplicates are simply ignored. However, two - // different Collectors must not send duplicate descriptors. - // - // Sending no descriptor at all marks the Collector as “unchecked”, - // i.e. no checks will be performed at registration time, and the - // Collector may yield any Metric it sees fit in its Collect method. - // - // This method idempotently sends the same descriptors throughout the - // lifetime of the Collector. - // - // If a Collector encounters an error while executing this method, it - // must send an invalid descriptor (created with NewInvalidDesc) to - // signal the error to the registry. - Describe(chan<- *Desc) - // Collect is called by the Prometheus registry when collecting - // metrics. The implementation sends each collected metric via the - // provided channel and returns once the last metric has been sent. The - // descriptor of each sent metric is one of those returned by Describe - // (unless the Collector is unchecked, see above). Returned metrics that - // share the same descriptor must differ in their variable label - // values. - // - // This method may be called concurrently and must therefore be - // implemented in a concurrency safe way. Blocking occurs at the expense - // of total performance of rendering all registered metrics. Ideally, - // Collector implementations support concurrent readers. - Collect(chan<- Metric) -} - -// DescribeByCollect is a helper to implement the Describe method of a custom -// Collector. It collects the metrics from the provided Collector and sends -// their descriptors to the provided channel. -// -// If a Collector collects the same metrics throughout its lifetime, its -// Describe method can simply be implemented as: -// -// func (c customCollector) Describe(ch chan<- *Desc) { -// DescribeByCollect(c, ch) -// } -// -// However, this will not work if the metrics collected change dynamically over -// the lifetime of the Collector in a way that their combined set of descriptors -// changes as well. The shortcut implementation will then violate the contract -// of the Describe method. If a Collector sometimes collects no metrics at all -// (for example vectors like CounterVec, GaugeVec, etc., which only collect -// metrics after a metric with a fully specified label set has been accessed), -// it might even get registered as an unchecked Collecter (cf. the Register -// method of the Registerer interface). Hence, only use this shortcut -// implementation of Describe if you are certain to fulfill the contract. -// -// The Collector example demonstrates a use of DescribeByCollect. -func DescribeByCollect(c Collector, descs chan<- *Desc) { - metrics := make(chan Metric) - go func() { - c.Collect(metrics) - close(metrics) - }() - for m := range metrics { - descs <- m.Desc() - } -} - -// selfCollector implements Collector for a single Metric so that the Metric -// collects itself. Add it as an anonymous field to a struct that implements -// Metric, and call init with the Metric itself as an argument. -type selfCollector struct { - self Metric -} - -// init provides the selfCollector with a reference to the metric it is supposed -// to collect. It is usually called within the factory function to create a -// metric. See example. -func (c *selfCollector) init(self Metric) { - c.self = self -} - -// Describe implements Collector. -func (c *selfCollector) Describe(ch chan<- *Desc) { - ch <- c.self.Desc() -} - -// Collect implements Collector. -func (c *selfCollector) Collect(ch chan<- Metric) { - ch <- c.self -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/counter.go b/vendor/github.com/prometheus/client_golang/prometheus/counter.go deleted file mode 100644 index 765e4550c..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/counter.go +++ /dev/null @@ -1,277 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "errors" - "math" - "sync/atomic" - - dto "github.com/prometheus/client_model/go" -) - -// Counter is a Metric that represents a single numerical value that only ever -// goes up. That implies that it cannot be used to count items whose number can -// also go down, e.g. the number of currently running goroutines. Those -// "counters" are represented by Gauges. -// -// A Counter is typically used to count requests served, tasks completed, errors -// occurred, etc. -// -// To create Counter instances, use NewCounter. -type Counter interface { - Metric - Collector - - // Inc increments the counter by 1. Use Add to increment it by arbitrary - // non-negative values. - Inc() - // Add adds the given value to the counter. It panics if the value is < - // 0. - Add(float64) -} - -// CounterOpts is an alias for Opts. See there for doc comments. -type CounterOpts Opts - -// NewCounter creates a new Counter based on the provided CounterOpts. -// -// The returned implementation tracks the counter value in two separate -// variables, a float64 and a uint64. The latter is used to track calls of the -// Inc method and calls of the Add method with a value that can be represented -// as a uint64. This allows atomic increments of the counter with optimal -// performance. (It is common to have an Inc call in very hot execution paths.) -// Both internal tracking values are added up in the Write method. This has to -// be taken into account when it comes to precision and overflow behavior. -func NewCounter(opts CounterOpts) Counter { - desc := NewDesc( - BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), - opts.Help, - nil, - opts.ConstLabels, - ) - result := &counter{desc: desc, labelPairs: desc.constLabelPairs} - result.init(result) // Init self-collection. - return result -} - -type counter struct { - // valBits contains the bits of the represented float64 value, while - // valInt stores values that are exact integers. Both have to go first - // in the struct to guarantee alignment for atomic operations. - // http://golang.org/pkg/sync/atomic/#pkg-note-BUG - valBits uint64 - valInt uint64 - - selfCollector - desc *Desc - - labelPairs []*dto.LabelPair -} - -func (c *counter) Desc() *Desc { - return c.desc -} - -func (c *counter) Add(v float64) { - if v < 0 { - panic(errors.New("counter cannot decrease in value")) - } - ival := uint64(v) - if float64(ival) == v { - atomic.AddUint64(&c.valInt, ival) - return - } - - for { - oldBits := atomic.LoadUint64(&c.valBits) - newBits := math.Float64bits(math.Float64frombits(oldBits) + v) - if atomic.CompareAndSwapUint64(&c.valBits, oldBits, newBits) { - return - } - } -} - -func (c *counter) Inc() { - atomic.AddUint64(&c.valInt, 1) -} - -func (c *counter) Write(out *dto.Metric) error { - fval := math.Float64frombits(atomic.LoadUint64(&c.valBits)) - ival := atomic.LoadUint64(&c.valInt) - val := fval + float64(ival) - - return populateMetric(CounterValue, val, c.labelPairs, out) -} - -// CounterVec is a Collector that bundles a set of Counters that all share the -// same Desc, but have different values for their variable labels. This is used -// if you want to count the same thing partitioned by various dimensions -// (e.g. number of HTTP requests, partitioned by response code and -// method). Create instances with NewCounterVec. -type CounterVec struct { - *metricVec -} - -// NewCounterVec creates a new CounterVec based on the provided CounterOpts and -// partitioned by the given label names. -func NewCounterVec(opts CounterOpts, labelNames []string) *CounterVec { - desc := NewDesc( - BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), - opts.Help, - labelNames, - opts.ConstLabels, - ) - return &CounterVec{ - metricVec: newMetricVec(desc, func(lvs ...string) Metric { - if len(lvs) != len(desc.variableLabels) { - panic(errInconsistentCardinality) - } - result := &counter{desc: desc, labelPairs: makeLabelPairs(desc, lvs)} - result.init(result) // Init self-collection. - return result - }), - } -} - -// GetMetricWithLabelValues returns the Counter for the given slice of label -// values (same order as the VariableLabels in Desc). If that combination of -// label values is accessed for the first time, a new Counter is created. -// -// It is possible to call this method without using the returned Counter to only -// create the new Counter but leave it at its starting value 0. See also the -// SummaryVec example. -// -// Keeping the Counter for later use is possible (and should be considered if -// performance is critical), but keep in mind that Reset, DeleteLabelValues and -// Delete can be used to delete the Counter from the CounterVec. In that case, -// the Counter will still exist, but it will not be exported anymore, even if a -// Counter with the same label values is created later. -// -// An error is returned if the number of label values is not the same as the -// number of VariableLabels in Desc (minus any curried labels). -// -// Note that for more than one label value, this method is prone to mistakes -// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as -// an alternative to avoid that type of mistake. For higher label numbers, the -// latter has a much more readable (albeit more verbose) syntax, but it comes -// with a performance overhead (for creating and processing the Labels map). -// See also the GaugeVec example. -func (v *CounterVec) GetMetricWithLabelValues(lvs ...string) (Counter, error) { - metric, err := v.metricVec.getMetricWithLabelValues(lvs...) - if metric != nil { - return metric.(Counter), err - } - return nil, err -} - -// GetMetricWith returns the Counter for the given Labels map (the label names -// must match those of the VariableLabels in Desc). If that label map is -// accessed for the first time, a new Counter is created. Implications of -// creating a Counter without using it and keeping the Counter for later use are -// the same as for GetMetricWithLabelValues. -// -// An error is returned if the number and names of the Labels are inconsistent -// with those of the VariableLabels in Desc (minus any curried labels). -// -// This method is used for the same purpose as -// GetMetricWithLabelValues(...string). See there for pros and cons of the two -// methods. -func (v *CounterVec) GetMetricWith(labels Labels) (Counter, error) { - metric, err := v.metricVec.getMetricWith(labels) - if metric != nil { - return metric.(Counter), err - } - return nil, err -} - -// WithLabelValues works as GetMetricWithLabelValues, but panics where -// GetMetricWithLabelValues would have returned an error. Not returning an -// error allows shortcuts like -// myVec.WithLabelValues("404", "GET").Add(42) -func (v *CounterVec) WithLabelValues(lvs ...string) Counter { - c, err := v.GetMetricWithLabelValues(lvs...) - if err != nil { - panic(err) - } - return c -} - -// With works as GetMetricWith, but panics where GetMetricWithLabels would have -// returned an error. Not returning an error allows shortcuts like -// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Add(42) -func (v *CounterVec) With(labels Labels) Counter { - c, err := v.GetMetricWith(labels) - if err != nil { - panic(err) - } - return c -} - -// CurryWith returns a vector curried with the provided labels, i.e. the -// returned vector has those labels pre-set for all labeled operations performed -// on it. The cardinality of the curried vector is reduced accordingly. The -// order of the remaining labels stays the same (just with the curried labels -// taken out of the sequence – which is relevant for the -// (GetMetric)WithLabelValues methods). It is possible to curry a curried -// vector, but only with labels not yet used for currying before. -// -// The metrics contained in the CounterVec are shared between the curried and -// uncurried vectors. They are just accessed differently. Curried and uncurried -// vectors behave identically in terms of collection. Only one must be -// registered with a given registry (usually the uncurried version). The Reset -// method deletes all metrics, even if called on a curried vector. -func (v *CounterVec) CurryWith(labels Labels) (*CounterVec, error) { - vec, err := v.curryWith(labels) - if vec != nil { - return &CounterVec{vec}, err - } - return nil, err -} - -// MustCurryWith works as CurryWith but panics where CurryWith would have -// returned an error. -func (v *CounterVec) MustCurryWith(labels Labels) *CounterVec { - vec, err := v.CurryWith(labels) - if err != nil { - panic(err) - } - return vec -} - -// CounterFunc is a Counter whose value is determined at collect time by calling a -// provided function. -// -// To create CounterFunc instances, use NewCounterFunc. -type CounterFunc interface { - Metric - Collector -} - -// NewCounterFunc creates a new CounterFunc based on the provided -// CounterOpts. The value reported is determined by calling the given function -// from within the Write method. Take into account that metric collection may -// happen concurrently. If that results in concurrent calls to Write, like in -// the case where a CounterFunc is directly registered with Prometheus, the -// provided function must be concurrency-safe. The function should also honor -// the contract for a Counter (values only go up, not down), but compliance will -// not be checked. -func NewCounterFunc(opts CounterOpts, function func() float64) CounterFunc { - return newValueFunc(NewDesc( - BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), - opts.Help, - nil, - opts.ConstLabels, - ), CounterValue, function) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/desc.go b/vendor/github.com/prometheus/client_golang/prometheus/desc.go deleted file mode 100644 index e95916272..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/desc.go +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright 2016 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "errors" - "fmt" - "sort" - "strings" - - "github.com/golang/protobuf/proto" - "github.com/prometheus/common/model" - - dto "github.com/prometheus/client_model/go" -) - -// Desc is the descriptor used by every Prometheus Metric. It is essentially -// the immutable meta-data of a Metric. The normal Metric implementations -// included in this package manage their Desc under the hood. Users only have to -// deal with Desc if they use advanced features like the ExpvarCollector or -// custom Collectors and Metrics. -// -// Descriptors registered with the same registry have to fulfill certain -// consistency and uniqueness criteria if they share the same fully-qualified -// name: They must have the same help string and the same label names (aka label -// dimensions) in each, constLabels and variableLabels, but they must differ in -// the values of the constLabels. -// -// Descriptors that share the same fully-qualified names and the same label -// values of their constLabels are considered equal. -// -// Use NewDesc to create new Desc instances. -type Desc struct { - // fqName has been built from Namespace, Subsystem, and Name. - fqName string - // help provides some helpful information about this metric. - help string - // constLabelPairs contains precalculated DTO label pairs based on - // the constant labels. - constLabelPairs []*dto.LabelPair - // VariableLabels contains names of labels for which the metric - // maintains variable values. - variableLabels []string - // id is a hash of the values of the ConstLabels and fqName. This - // must be unique among all registered descriptors and can therefore be - // used as an identifier of the descriptor. - id uint64 - // dimHash is a hash of the label names (preset and variable) and the - // Help string. Each Desc with the same fqName must have the same - // dimHash. - dimHash uint64 - // err is an error that occurred during construction. It is reported on - // registration time. - err error -} - -// NewDesc allocates and initializes a new Desc. Errors are recorded in the Desc -// and will be reported on registration time. variableLabels and constLabels can -// be nil if no such labels should be set. fqName and help must not be empty. -// -// variableLabels only contain the label names. Their label values are variable -// and therefore not part of the Desc. (They are managed within the Metric.) -// -// For constLabels, the label values are constant. Therefore, they are fully -// specified in the Desc. See the Collector example for a usage pattern. -func NewDesc(fqName, help string, variableLabels []string, constLabels Labels) *Desc { - d := &Desc{ - fqName: fqName, - help: help, - variableLabels: variableLabels, - } - if help == "" { - d.err = errors.New("empty help string") - return d - } - if !model.IsValidMetricName(model.LabelValue(fqName)) { - d.err = fmt.Errorf("%q is not a valid metric name", fqName) - return d - } - // labelValues contains the label values of const labels (in order of - // their sorted label names) plus the fqName (at position 0). - labelValues := make([]string, 1, len(constLabels)+1) - labelValues[0] = fqName - labelNames := make([]string, 0, len(constLabels)+len(variableLabels)) - labelNameSet := map[string]struct{}{} - // First add only the const label names and sort them... - for labelName := range constLabels { - if !checkLabelName(labelName) { - d.err = fmt.Errorf("%q is not a valid label name", labelName) - return d - } - labelNames = append(labelNames, labelName) - labelNameSet[labelName] = struct{}{} - } - sort.Strings(labelNames) - // ... so that we can now add const label values in the order of their names. - for _, labelName := range labelNames { - labelValues = append(labelValues, constLabels[labelName]) - } - // Validate the const label values. They can't have a wrong cardinality, so - // use in len(labelValues) as expectedNumberOfValues. - if err := validateLabelValues(labelValues, len(labelValues)); err != nil { - d.err = err - return d - } - // Now add the variable label names, but prefix them with something that - // cannot be in a regular label name. That prevents matching the label - // dimension with a different mix between preset and variable labels. - for _, labelName := range variableLabels { - if !checkLabelName(labelName) { - d.err = fmt.Errorf("%q is not a valid label name", labelName) - return d - } - labelNames = append(labelNames, "$"+labelName) - labelNameSet[labelName] = struct{}{} - } - if len(labelNames) != len(labelNameSet) { - d.err = errors.New("duplicate label names") - return d - } - - vh := hashNew() - for _, val := range labelValues { - vh = hashAdd(vh, val) - vh = hashAddByte(vh, separatorByte) - } - d.id = vh - // Sort labelNames so that order doesn't matter for the hash. - sort.Strings(labelNames) - // Now hash together (in this order) the help string and the sorted - // label names. - lh := hashNew() - lh = hashAdd(lh, help) - lh = hashAddByte(lh, separatorByte) - for _, labelName := range labelNames { - lh = hashAdd(lh, labelName) - lh = hashAddByte(lh, separatorByte) - } - d.dimHash = lh - - d.constLabelPairs = make([]*dto.LabelPair, 0, len(constLabels)) - for n, v := range constLabels { - d.constLabelPairs = append(d.constLabelPairs, &dto.LabelPair{ - Name: proto.String(n), - Value: proto.String(v), - }) - } - sort.Sort(labelPairSorter(d.constLabelPairs)) - return d -} - -// NewInvalidDesc returns an invalid descriptor, i.e. a descriptor with the -// provided error set. If a collector returning such a descriptor is registered, -// registration will fail with the provided error. NewInvalidDesc can be used by -// a Collector to signal inability to describe itself. -func NewInvalidDesc(err error) *Desc { - return &Desc{ - err: err, - } -} - -func (d *Desc) String() string { - lpStrings := make([]string, 0, len(d.constLabelPairs)) - for _, lp := range d.constLabelPairs { - lpStrings = append( - lpStrings, - fmt.Sprintf("%s=%q", lp.GetName(), lp.GetValue()), - ) - } - return fmt.Sprintf( - "Desc{fqName: %q, help: %q, constLabels: {%s}, variableLabels: %v}", - d.fqName, - d.help, - strings.Join(lpStrings, ","), - d.variableLabels, - ) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/doc.go b/vendor/github.com/prometheus/client_golang/prometheus/doc.go deleted file mode 100644 index 5d9525def..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/doc.go +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package prometheus is the core instrumentation package. It provides metrics -// primitives to instrument code for monitoring. It also offers a registry for -// metrics. Sub-packages allow to expose the registered metrics via HTTP -// (package promhttp) or push them to a Pushgateway (package push). There is -// also a sub-package promauto, which provides metrics constructors with -// automatic registration. -// -// All exported functions and methods are safe to be used concurrently unless -// specified otherwise. -// -// A Basic Example -// -// As a starting point, a very basic usage example: -// -// package main -// -// import ( -// "log" -// "net/http" -// -// "github.com/prometheus/client_golang/prometheus" -// "github.com/prometheus/client_golang/prometheus/promhttp" -// ) -// -// var ( -// cpuTemp = prometheus.NewGauge(prometheus.GaugeOpts{ -// Name: "cpu_temperature_celsius", -// Help: "Current temperature of the CPU.", -// }) -// hdFailures = prometheus.NewCounterVec( -// prometheus.CounterOpts{ -// Name: "hd_errors_total", -// Help: "Number of hard-disk errors.", -// }, -// []string{"device"}, -// ) -// ) -// -// func init() { -// // Metrics have to be registered to be exposed: -// prometheus.MustRegister(cpuTemp) -// prometheus.MustRegister(hdFailures) -// } -// -// func main() { -// cpuTemp.Set(65.3) -// hdFailures.With(prometheus.Labels{"device":"/dev/sda"}).Inc() -// -// // The Handler function provides a default handler to expose metrics -// // via an HTTP server. "/metrics" is the usual endpoint for that. -// http.Handle("/metrics", promhttp.Handler()) -// log.Fatal(http.ListenAndServe(":8080", nil)) -// } -// -// -// This is a complete program that exports two metrics, a Gauge and a Counter, -// the latter with a label attached to turn it into a (one-dimensional) vector. -// -// Metrics -// -// The number of exported identifiers in this package might appear a bit -// overwhelming. However, in addition to the basic plumbing shown in the example -// above, you only need to understand the different metric types and their -// vector versions for basic usage. Furthermore, if you are not concerned with -// fine-grained control of when and how to register metrics with the registry, -// have a look at the promauto package, which will effectively allow you to -// ignore registration altogether in simple cases. -// -// Above, you have already touched the Counter and the Gauge. There are two more -// advanced metric types: the Summary and Histogram. A more thorough description -// of those four metric types can be found in the Prometheus docs: -// https://prometheus.io/docs/concepts/metric_types/ -// -// A fifth "type" of metric is Untyped. It behaves like a Gauge, but signals the -// Prometheus server not to assume anything about its type. -// -// In addition to the fundamental metric types Gauge, Counter, Summary, -// Histogram, and Untyped, a very important part of the Prometheus data model is -// the partitioning of samples along dimensions called labels, which results in -// metric vectors. The fundamental types are GaugeVec, CounterVec, SummaryVec, -// HistogramVec, and UntypedVec. -// -// While only the fundamental metric types implement the Metric interface, both -// the metrics and their vector versions implement the Collector interface. A -// Collector manages the collection of a number of Metrics, but for convenience, -// a Metric can also “collect itself”. Note that Gauge, Counter, Summary, -// Histogram, and Untyped are interfaces themselves while GaugeVec, CounterVec, -// SummaryVec, HistogramVec, and UntypedVec are not. -// -// To create instances of Metrics and their vector versions, you need a suitable -// …Opts struct, i.e. GaugeOpts, CounterOpts, SummaryOpts, HistogramOpts, or -// UntypedOpts. -// -// Custom Collectors and constant Metrics -// -// While you could create your own implementations of Metric, most likely you -// will only ever implement the Collector interface on your own. At a first -// glance, a custom Collector seems handy to bundle Metrics for common -// registration (with the prime example of the different metric vectors above, -// which bundle all the metrics of the same name but with different labels). -// -// There is a more involved use case, too: If you already have metrics -// available, created outside of the Prometheus context, you don't need the -// interface of the various Metric types. You essentially want to mirror the -// existing numbers into Prometheus Metrics during collection. An own -// implementation of the Collector interface is perfect for that. You can create -// Metric instances “on the fly” using NewConstMetric, NewConstHistogram, and -// NewConstSummary (and their respective Must… versions). That will happen in -// the Collect method. The Describe method has to return separate Desc -// instances, representative of the “throw-away” metrics to be created later. -// NewDesc comes in handy to create those Desc instances. Alternatively, you -// could return no Desc at all, which will marke the Collector “unchecked”. No -// checks are porformed at registration time, but metric consistency will still -// be ensured at scrape time, i.e. any inconsistencies will lead to scrape -// errors. Thus, with unchecked Collectors, the responsibility to not collect -// metrics that lead to inconsistencies in the total scrape result lies with the -// implementer of the Collector. While this is not a desirable state, it is -// sometimes necessary. The typical use case is a situatios where the exact -// metrics to be returned by a Collector cannot be predicted at registration -// time, but the implementer has sufficient knowledge of the whole system to -// guarantee metric consistency. -// -// The Collector example illustrates the use case. You can also look at the -// source code of the processCollector (mirroring process metrics), the -// goCollector (mirroring Go metrics), or the expvarCollector (mirroring expvar -// metrics) as examples that are used in this package itself. -// -// If you just need to call a function to get a single float value to collect as -// a metric, GaugeFunc, CounterFunc, or UntypedFunc might be interesting -// shortcuts. -// -// Advanced Uses of the Registry -// -// While MustRegister is the by far most common way of registering a Collector, -// sometimes you might want to handle the errors the registration might cause. -// As suggested by the name, MustRegister panics if an error occurs. With the -// Register function, the error is returned and can be handled. -// -// An error is returned if the registered Collector is incompatible or -// inconsistent with already registered metrics. The registry aims for -// consistency of the collected metrics according to the Prometheus data model. -// Inconsistencies are ideally detected at registration time, not at collect -// time. The former will usually be detected at start-up time of a program, -// while the latter will only happen at scrape time, possibly not even on the -// first scrape if the inconsistency only becomes relevant later. That is the -// main reason why a Collector and a Metric have to describe themselves to the -// registry. -// -// So far, everything we did operated on the so-called default registry, as it -// can be found in the global DefaultRegisterer variable. With NewRegistry, you -// can create a custom registry, or you can even implement the Registerer or -// Gatherer interfaces yourself. The methods Register and Unregister work in the -// same way on a custom registry as the global functions Register and Unregister -// on the default registry. -// -// There are a number of uses for custom registries: You can use registries with -// special properties, see NewPedanticRegistry. You can avoid global state, as -// it is imposed by the DefaultRegisterer. You can use multiple registries at -// the same time to expose different metrics in different ways. You can use -// separate registries for testing purposes. -// -// Also note that the DefaultRegisterer comes registered with a Collector for Go -// runtime metrics (via NewGoCollector) and a Collector for process metrics (via -// NewProcessCollector). With a custom registry, you are in control and decide -// yourself about the Collectors to register. -// -// HTTP Exposition -// -// The Registry implements the Gatherer interface. The caller of the Gather -// method can then expose the gathered metrics in some way. Usually, the metrics -// are served via HTTP on the /metrics endpoint. That's happening in the example -// above. The tools to expose metrics via HTTP are in the promhttp sub-package. -// (The top-level functions in the prometheus package are deprecated.) -// -// Pushing to the Pushgateway -// -// Function for pushing to the Pushgateway can be found in the push sub-package. -// -// Graphite Bridge -// -// Functions and examples to push metrics from a Gatherer to Graphite can be -// found in the graphite sub-package. -// -// Other Means of Exposition -// -// More ways of exposing metrics can easily be added by following the approaches -// of the existing implementations. -package prometheus diff --git a/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go deleted file mode 100644 index 18a99d5fa..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "encoding/json" - "expvar" -) - -type expvarCollector struct { - exports map[string]*Desc -} - -// NewExpvarCollector returns a newly allocated expvar Collector that still has -// to be registered with a Prometheus registry. -// -// An expvar Collector collects metrics from the expvar interface. It provides a -// quick way to expose numeric values that are already exported via expvar as -// Prometheus metrics. Note that the data models of expvar and Prometheus are -// fundamentally different, and that the expvar Collector is inherently slower -// than native Prometheus metrics. Thus, the expvar Collector is probably great -// for experiments and prototying, but you should seriously consider a more -// direct implementation of Prometheus metrics for monitoring production -// systems. -// -// The exports map has the following meaning: -// -// The keys in the map correspond to expvar keys, i.e. for every expvar key you -// want to export as Prometheus metric, you need an entry in the exports -// map. The descriptor mapped to each key describes how to export the expvar -// value. It defines the name and the help string of the Prometheus metric -// proxying the expvar value. The type will always be Untyped. -// -// For descriptors without variable labels, the expvar value must be a number or -// a bool. The number is then directly exported as the Prometheus sample -// value. (For a bool, 'false' translates to 0 and 'true' to 1). Expvar values -// that are not numbers or bools are silently ignored. -// -// If the descriptor has one variable label, the expvar value must be an expvar -// map. The keys in the expvar map become the various values of the one -// Prometheus label. The values in the expvar map must be numbers or bools again -// as above. -// -// For descriptors with more than one variable label, the expvar must be a -// nested expvar map, i.e. where the values of the topmost map are maps again -// etc. until a depth is reached that corresponds to the number of labels. The -// leaves of that structure must be numbers or bools as above to serve as the -// sample values. -// -// Anything that does not fit into the scheme above is silently ignored. -func NewExpvarCollector(exports map[string]*Desc) Collector { - return &expvarCollector{ - exports: exports, - } -} - -// Describe implements Collector. -func (e *expvarCollector) Describe(ch chan<- *Desc) { - for _, desc := range e.exports { - ch <- desc - } -} - -// Collect implements Collector. -func (e *expvarCollector) Collect(ch chan<- Metric) { - for name, desc := range e.exports { - var m Metric - expVar := expvar.Get(name) - if expVar == nil { - continue - } - var v interface{} - labels := make([]string, len(desc.variableLabels)) - if err := json.Unmarshal([]byte(expVar.String()), &v); err != nil { - ch <- NewInvalidMetric(desc, err) - continue - } - var processValue func(v interface{}, i int) - processValue = func(v interface{}, i int) { - if i >= len(labels) { - copiedLabels := append(make([]string, 0, len(labels)), labels...) - switch v := v.(type) { - case float64: - m = MustNewConstMetric(desc, UntypedValue, v, copiedLabels...) - case bool: - if v { - m = MustNewConstMetric(desc, UntypedValue, 1, copiedLabels...) - } else { - m = MustNewConstMetric(desc, UntypedValue, 0, copiedLabels...) - } - default: - return - } - ch <- m - return - } - vm, ok := v.(map[string]interface{}) - if !ok { - return - } - for lv, val := range vm { - labels[i] = lv - processValue(val, i+1) - } - } - processValue(v, 0) - } -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/fnv.go b/vendor/github.com/prometheus/client_golang/prometheus/fnv.go deleted file mode 100644 index 3d383a735..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/fnv.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -// Inline and byte-free variant of hash/fnv's fnv64a. - -const ( - offset64 = 14695981039346656037 - prime64 = 1099511628211 -) - -// hashNew initializies a new fnv64a hash value. -func hashNew() uint64 { - return offset64 -} - -// hashAdd adds a string to a fnv64a hash value, returning the updated hash. -func hashAdd(h uint64, s string) uint64 { - for i := 0; i < len(s); i++ { - h ^= uint64(s[i]) - h *= prime64 - } - return h -} - -// hashAddByte adds a byte to a fnv64a hash value, returning the updated hash. -func hashAddByte(h uint64, b byte) uint64 { - h ^= uint64(b) - h *= prime64 - return h -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go deleted file mode 100644 index 17c72d7eb..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go +++ /dev/null @@ -1,286 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "math" - "sync/atomic" - "time" - - dto "github.com/prometheus/client_model/go" -) - -// Gauge is a Metric that represents a single numerical value that can -// arbitrarily go up and down. -// -// A Gauge is typically used for measured values like temperatures or current -// memory usage, but also "counts" that can go up and down, like the number of -// running goroutines. -// -// To create Gauge instances, use NewGauge. -type Gauge interface { - Metric - Collector - - // Set sets the Gauge to an arbitrary value. - Set(float64) - // Inc increments the Gauge by 1. Use Add to increment it by arbitrary - // values. - Inc() - // Dec decrements the Gauge by 1. Use Sub to decrement it by arbitrary - // values. - Dec() - // Add adds the given value to the Gauge. (The value can be negative, - // resulting in a decrease of the Gauge.) - Add(float64) - // Sub subtracts the given value from the Gauge. (The value can be - // negative, resulting in an increase of the Gauge.) - Sub(float64) - - // SetToCurrentTime sets the Gauge to the current Unix time in seconds. - SetToCurrentTime() -} - -// GaugeOpts is an alias for Opts. See there for doc comments. -type GaugeOpts Opts - -// NewGauge creates a new Gauge based on the provided GaugeOpts. -// -// The returned implementation is optimized for a fast Set method. If you have a -// choice for managing the value of a Gauge via Set vs. Inc/Dec/Add/Sub, pick -// the former. For example, the Inc method of the returned Gauge is slower than -// the Inc method of a Counter returned by NewCounter. This matches the typical -// scenarios for Gauges and Counters, where the former tends to be Set-heavy and -// the latter Inc-heavy. -func NewGauge(opts GaugeOpts) Gauge { - desc := NewDesc( - BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), - opts.Help, - nil, - opts.ConstLabels, - ) - result := &gauge{desc: desc, labelPairs: desc.constLabelPairs} - result.init(result) // Init self-collection. - return result -} - -type gauge struct { - // valBits contains the bits of the represented float64 value. It has - // to go first in the struct to guarantee alignment for atomic - // operations. http://golang.org/pkg/sync/atomic/#pkg-note-BUG - valBits uint64 - - selfCollector - - desc *Desc - labelPairs []*dto.LabelPair -} - -func (g *gauge) Desc() *Desc { - return g.desc -} - -func (g *gauge) Set(val float64) { - atomic.StoreUint64(&g.valBits, math.Float64bits(val)) -} - -func (g *gauge) SetToCurrentTime() { - g.Set(float64(time.Now().UnixNano()) / 1e9) -} - -func (g *gauge) Inc() { - g.Add(1) -} - -func (g *gauge) Dec() { - g.Add(-1) -} - -func (g *gauge) Add(val float64) { - for { - oldBits := atomic.LoadUint64(&g.valBits) - newBits := math.Float64bits(math.Float64frombits(oldBits) + val) - if atomic.CompareAndSwapUint64(&g.valBits, oldBits, newBits) { - return - } - } -} - -func (g *gauge) Sub(val float64) { - g.Add(val * -1) -} - -func (g *gauge) Write(out *dto.Metric) error { - val := math.Float64frombits(atomic.LoadUint64(&g.valBits)) - return populateMetric(GaugeValue, val, g.labelPairs, out) -} - -// GaugeVec is a Collector that bundles a set of Gauges that all share the same -// Desc, but have different values for their variable labels. This is used if -// you want to count the same thing partitioned by various dimensions -// (e.g. number of operations queued, partitioned by user and operation -// type). Create instances with NewGaugeVec. -type GaugeVec struct { - *metricVec -} - -// NewGaugeVec creates a new GaugeVec based on the provided GaugeOpts and -// partitioned by the given label names. -func NewGaugeVec(opts GaugeOpts, labelNames []string) *GaugeVec { - desc := NewDesc( - BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), - opts.Help, - labelNames, - opts.ConstLabels, - ) - return &GaugeVec{ - metricVec: newMetricVec(desc, func(lvs ...string) Metric { - if len(lvs) != len(desc.variableLabels) { - panic(errInconsistentCardinality) - } - result := &gauge{desc: desc, labelPairs: makeLabelPairs(desc, lvs)} - result.init(result) // Init self-collection. - return result - }), - } -} - -// GetMetricWithLabelValues returns the Gauge for the given slice of label -// values (same order as the VariableLabels in Desc). If that combination of -// label values is accessed for the first time, a new Gauge is created. -// -// It is possible to call this method without using the returned Gauge to only -// create the new Gauge but leave it at its starting value 0. See also the -// SummaryVec example. -// -// Keeping the Gauge for later use is possible (and should be considered if -// performance is critical), but keep in mind that Reset, DeleteLabelValues and -// Delete can be used to delete the Gauge from the GaugeVec. In that case, the -// Gauge will still exist, but it will not be exported anymore, even if a -// Gauge with the same label values is created later. See also the CounterVec -// example. -// -// An error is returned if the number of label values is not the same as the -// number of VariableLabels in Desc (minus any curried labels). -// -// Note that for more than one label value, this method is prone to mistakes -// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as -// an alternative to avoid that type of mistake. For higher label numbers, the -// latter has a much more readable (albeit more verbose) syntax, but it comes -// with a performance overhead (for creating and processing the Labels map). -func (v *GaugeVec) GetMetricWithLabelValues(lvs ...string) (Gauge, error) { - metric, err := v.metricVec.getMetricWithLabelValues(lvs...) - if metric != nil { - return metric.(Gauge), err - } - return nil, err -} - -// GetMetricWith returns the Gauge for the given Labels map (the label names -// must match those of the VariableLabels in Desc). If that label map is -// accessed for the first time, a new Gauge is created. Implications of -// creating a Gauge without using it and keeping the Gauge for later use are -// the same as for GetMetricWithLabelValues. -// -// An error is returned if the number and names of the Labels are inconsistent -// with those of the VariableLabels in Desc (minus any curried labels). -// -// This method is used for the same purpose as -// GetMetricWithLabelValues(...string). See there for pros and cons of the two -// methods. -func (v *GaugeVec) GetMetricWith(labels Labels) (Gauge, error) { - metric, err := v.metricVec.getMetricWith(labels) - if metric != nil { - return metric.(Gauge), err - } - return nil, err -} - -// WithLabelValues works as GetMetricWithLabelValues, but panics where -// GetMetricWithLabelValues would have returned an error. Not returning an -// error allows shortcuts like -// myVec.WithLabelValues("404", "GET").Add(42) -func (v *GaugeVec) WithLabelValues(lvs ...string) Gauge { - g, err := v.GetMetricWithLabelValues(lvs...) - if err != nil { - panic(err) - } - return g -} - -// With works as GetMetricWith, but panics where GetMetricWithLabels would have -// returned an error. Not returning an error allows shortcuts like -// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Add(42) -func (v *GaugeVec) With(labels Labels) Gauge { - g, err := v.GetMetricWith(labels) - if err != nil { - panic(err) - } - return g -} - -// CurryWith returns a vector curried with the provided labels, i.e. the -// returned vector has those labels pre-set for all labeled operations performed -// on it. The cardinality of the curried vector is reduced accordingly. The -// order of the remaining labels stays the same (just with the curried labels -// taken out of the sequence – which is relevant for the -// (GetMetric)WithLabelValues methods). It is possible to curry a curried -// vector, but only with labels not yet used for currying before. -// -// The metrics contained in the GaugeVec are shared between the curried and -// uncurried vectors. They are just accessed differently. Curried and uncurried -// vectors behave identically in terms of collection. Only one must be -// registered with a given registry (usually the uncurried version). The Reset -// method deletes all metrics, even if called on a curried vector. -func (v *GaugeVec) CurryWith(labels Labels) (*GaugeVec, error) { - vec, err := v.curryWith(labels) - if vec != nil { - return &GaugeVec{vec}, err - } - return nil, err -} - -// MustCurryWith works as CurryWith but panics where CurryWith would have -// returned an error. -func (v *GaugeVec) MustCurryWith(labels Labels) *GaugeVec { - vec, err := v.CurryWith(labels) - if err != nil { - panic(err) - } - return vec -} - -// GaugeFunc is a Gauge whose value is determined at collect time by calling a -// provided function. -// -// To create GaugeFunc instances, use NewGaugeFunc. -type GaugeFunc interface { - Metric - Collector -} - -// NewGaugeFunc creates a new GaugeFunc based on the provided GaugeOpts. The -// value reported is determined by calling the given function from within the -// Write method. Take into account that metric collection may happen -// concurrently. If that results in concurrent calls to Write, like in the case -// where a GaugeFunc is directly registered with Prometheus, the provided -// function must be concurrency-safe. -func NewGaugeFunc(opts GaugeOpts, function func() float64) GaugeFunc { - return newValueFunc(NewDesc( - BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), - opts.Help, - nil, - opts.ConstLabels, - ), GaugeValue, function) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go deleted file mode 100644 index ba3b9333e..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go +++ /dev/null @@ -1,301 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "fmt" - "runtime" - "runtime/debug" - "time" -) - -type goCollector struct { - goroutinesDesc *Desc - threadsDesc *Desc - gcDesc *Desc - goInfoDesc *Desc - - // metrics to describe and collect - metrics memStatsMetrics -} - -// NewGoCollector returns a collector which exports metrics about the current Go -// process. This includes memory stats. To collect those, runtime.ReadMemStats -// is called. This causes a stop-the-world, which is very short with Go1.9+ -// (~25µs). However, with older Go versions, the stop-the-world duration depends -// on the heap size and can be quite significant (~1.7 ms/GiB as per -// https://go-review.googlesource.com/c/go/+/34937). -func NewGoCollector() Collector { - return &goCollector{ - goroutinesDesc: NewDesc( - "go_goroutines", - "Number of goroutines that currently exist.", - nil, nil), - threadsDesc: NewDesc( - "go_threads", - "Number of OS threads created.", - nil, nil), - gcDesc: NewDesc( - "go_gc_duration_seconds", - "A summary of the GC invocation durations.", - nil, nil), - goInfoDesc: NewDesc( - "go_info", - "Information about the Go environment.", - nil, Labels{"version": runtime.Version()}), - metrics: memStatsMetrics{ - { - desc: NewDesc( - memstatNamespace("alloc_bytes"), - "Number of bytes allocated and still in use.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.Alloc) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("alloc_bytes_total"), - "Total number of bytes allocated, even if freed.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.TotalAlloc) }, - valType: CounterValue, - }, { - desc: NewDesc( - memstatNamespace("sys_bytes"), - "Number of bytes obtained from system.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.Sys) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("lookups_total"), - "Total number of pointer lookups.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.Lookups) }, - valType: CounterValue, - }, { - desc: NewDesc( - memstatNamespace("mallocs_total"), - "Total number of mallocs.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.Mallocs) }, - valType: CounterValue, - }, { - desc: NewDesc( - memstatNamespace("frees_total"), - "Total number of frees.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.Frees) }, - valType: CounterValue, - }, { - desc: NewDesc( - memstatNamespace("heap_alloc_bytes"), - "Number of heap bytes allocated and still in use.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapAlloc) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("heap_sys_bytes"), - "Number of heap bytes obtained from system.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapSys) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("heap_idle_bytes"), - "Number of heap bytes waiting to be used.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapIdle) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("heap_inuse_bytes"), - "Number of heap bytes that are in use.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapInuse) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("heap_released_bytes"), - "Number of heap bytes released to OS.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapReleased) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("heap_objects"), - "Number of allocated objects.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapObjects) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("stack_inuse_bytes"), - "Number of bytes in use by the stack allocator.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.StackInuse) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("stack_sys_bytes"), - "Number of bytes obtained from system for stack allocator.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.StackSys) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("mspan_inuse_bytes"), - "Number of bytes in use by mspan structures.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.MSpanInuse) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("mspan_sys_bytes"), - "Number of bytes used for mspan structures obtained from system.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.MSpanSys) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("mcache_inuse_bytes"), - "Number of bytes in use by mcache structures.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.MCacheInuse) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("mcache_sys_bytes"), - "Number of bytes used for mcache structures obtained from system.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.MCacheSys) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("buck_hash_sys_bytes"), - "Number of bytes used by the profiling bucket hash table.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.BuckHashSys) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("gc_sys_bytes"), - "Number of bytes used for garbage collection system metadata.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.GCSys) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("other_sys_bytes"), - "Number of bytes used for other system allocations.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.OtherSys) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("next_gc_bytes"), - "Number of heap bytes when next garbage collection will take place.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.NextGC) }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("last_gc_time_seconds"), - "Number of seconds since 1970 of last garbage collection.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return float64(ms.LastGC) / 1e9 }, - valType: GaugeValue, - }, { - desc: NewDesc( - memstatNamespace("gc_cpu_fraction"), - "The fraction of this program's available CPU time used by the GC since the program started.", - nil, nil, - ), - eval: func(ms *runtime.MemStats) float64 { return ms.GCCPUFraction }, - valType: GaugeValue, - }, - }, - } -} - -func memstatNamespace(s string) string { - return fmt.Sprintf("go_memstats_%s", s) -} - -// Describe returns all descriptions of the collector. -func (c *goCollector) Describe(ch chan<- *Desc) { - ch <- c.goroutinesDesc - ch <- c.threadsDesc - ch <- c.gcDesc - ch <- c.goInfoDesc - for _, i := range c.metrics { - ch <- i.desc - } -} - -// Collect returns the current state of all metrics of the collector. -func (c *goCollector) Collect(ch chan<- Metric) { - ch <- MustNewConstMetric(c.goroutinesDesc, GaugeValue, float64(runtime.NumGoroutine())) - n, _ := runtime.ThreadCreateProfile(nil) - ch <- MustNewConstMetric(c.threadsDesc, GaugeValue, float64(n)) - - var stats debug.GCStats - stats.PauseQuantiles = make([]time.Duration, 5) - debug.ReadGCStats(&stats) - - quantiles := make(map[float64]float64) - for idx, pq := range stats.PauseQuantiles[1:] { - quantiles[float64(idx+1)/float64(len(stats.PauseQuantiles)-1)] = pq.Seconds() - } - quantiles[0.0] = stats.PauseQuantiles[0].Seconds() - ch <- MustNewConstSummary(c.gcDesc, uint64(stats.NumGC), stats.PauseTotal.Seconds(), quantiles) - - ch <- MustNewConstMetric(c.goInfoDesc, GaugeValue, 1) - - ms := &runtime.MemStats{} - runtime.ReadMemStats(ms) - for _, i := range c.metrics { - ch <- MustNewConstMetric(i.desc, i.valType, i.eval(ms)) - } -} - -// memStatsMetrics provide description, value, and value type for memstat metrics. -type memStatsMetrics []struct { - desc *Desc - eval func(*runtime.MemStats) float64 - valType ValueType -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go deleted file mode 100644 index a1868d294..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go +++ /dev/null @@ -1,605 +0,0 @@ -// Copyright 2015 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "fmt" - "math" - "runtime" - "sort" - "sync" - "sync/atomic" - - "github.com/golang/protobuf/proto" - - dto "github.com/prometheus/client_model/go" -) - -// A Histogram counts individual observations from an event or sample stream in -// configurable buckets. Similar to a summary, it also provides a sum of -// observations and an observation count. -// -// On the Prometheus server, quantiles can be calculated from a Histogram using -// the histogram_quantile function in the query language. -// -// Note that Histograms, in contrast to Summaries, can be aggregated with the -// Prometheus query language (see the documentation for detailed -// procedures). However, Histograms require the user to pre-define suitable -// buckets, and they are in general less accurate. The Observe method of a -// Histogram has a very low performance overhead in comparison with the Observe -// method of a Summary. -// -// To create Histogram instances, use NewHistogram. -type Histogram interface { - Metric - Collector - - // Observe adds a single observation to the histogram. - Observe(float64) -} - -// bucketLabel is used for the label that defines the upper bound of a -// bucket of a histogram ("le" -> "less or equal"). -const bucketLabel = "le" - -// DefBuckets are the default Histogram buckets. The default buckets are -// tailored to broadly measure the response time (in seconds) of a network -// service. Most likely, however, you will be required to define buckets -// customized to your use case. -var ( - DefBuckets = []float64{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10} - - errBucketLabelNotAllowed = fmt.Errorf( - "%q is not allowed as label name in histograms", bucketLabel, - ) -) - -// LinearBuckets creates 'count' buckets, each 'width' wide, where the lowest -// bucket has an upper bound of 'start'. The final +Inf bucket is not counted -// and not included in the returned slice. The returned slice is meant to be -// used for the Buckets field of HistogramOpts. -// -// The function panics if 'count' is zero or negative. -func LinearBuckets(start, width float64, count int) []float64 { - if count < 1 { - panic("LinearBuckets needs a positive count") - } - buckets := make([]float64, count) - for i := range buckets { - buckets[i] = start - start += width - } - return buckets -} - -// ExponentialBuckets creates 'count' buckets, where the lowest bucket has an -// upper bound of 'start' and each following bucket's upper bound is 'factor' -// times the previous bucket's upper bound. The final +Inf bucket is not counted -// and not included in the returned slice. The returned slice is meant to be -// used for the Buckets field of HistogramOpts. -// -// The function panics if 'count' is 0 or negative, if 'start' is 0 or negative, -// or if 'factor' is less than or equal 1. -func ExponentialBuckets(start, factor float64, count int) []float64 { - if count < 1 { - panic("ExponentialBuckets needs a positive count") - } - if start <= 0 { - panic("ExponentialBuckets needs a positive start value") - } - if factor <= 1 { - panic("ExponentialBuckets needs a factor greater than 1") - } - buckets := make([]float64, count) - for i := range buckets { - buckets[i] = start - start *= factor - } - return buckets -} - -// HistogramOpts bundles the options for creating a Histogram metric. It is -// mandatory to set Name and Help to a non-empty string. All other fields are -// optional and can safely be left at their zero value. -type HistogramOpts struct { - // Namespace, Subsystem, and Name are components of the fully-qualified - // name of the Histogram (created by joining these components with - // "_"). Only Name is mandatory, the others merely help structuring the - // name. Note that the fully-qualified name of the Histogram must be a - // valid Prometheus metric name. - Namespace string - Subsystem string - Name string - - // Help provides information about this Histogram. Mandatory! - // - // Metrics with the same fully-qualified name must have the same Help - // string. - Help string - - // ConstLabels are used to attach fixed labels to this metric. Metrics - // with the same fully-qualified name must have the same label names in - // their ConstLabels. - // - // ConstLabels are only used rarely. In particular, do not use them to - // attach the same labels to all your metrics. Those use cases are - // better covered by target labels set by the scraping Prometheus - // server, or by one specific metric (e.g. a build_info or a - // machine_role metric). See also - // https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels,-not-static-scraped-labels - ConstLabels Labels - - // Buckets defines the buckets into which observations are counted. Each - // element in the slice is the upper inclusive bound of a bucket. The - // values must be sorted in strictly increasing order. There is no need - // to add a highest bucket with +Inf bound, it will be added - // implicitly. The default value is DefBuckets. - Buckets []float64 -} - -// NewHistogram creates a new Histogram based on the provided HistogramOpts. It -// panics if the buckets in HistogramOpts are not in strictly increasing order. -func NewHistogram(opts HistogramOpts) Histogram { - return newHistogram( - NewDesc( - BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), - opts.Help, - nil, - opts.ConstLabels, - ), - opts, - ) -} - -func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogram { - if len(desc.variableLabels) != len(labelValues) { - panic(errInconsistentCardinality) - } - - for _, n := range desc.variableLabels { - if n == bucketLabel { - panic(errBucketLabelNotAllowed) - } - } - for _, lp := range desc.constLabelPairs { - if lp.GetName() == bucketLabel { - panic(errBucketLabelNotAllowed) - } - } - - if len(opts.Buckets) == 0 { - opts.Buckets = DefBuckets - } - - h := &histogram{ - desc: desc, - upperBounds: opts.Buckets, - labelPairs: makeLabelPairs(desc, labelValues), - } - for i, upperBound := range h.upperBounds { - if i < len(h.upperBounds)-1 { - if upperBound >= h.upperBounds[i+1] { - panic(fmt.Errorf( - "histogram buckets must be in increasing order: %f >= %f", - upperBound, h.upperBounds[i+1], - )) - } - } else { - if math.IsInf(upperBound, +1) { - // The +Inf bucket is implicit. Remove it here. - h.upperBounds = h.upperBounds[:i] - } - } - } - // Finally we know the final length of h.upperBounds and can make counts - // for both states: - h.counts[0].buckets = make([]uint64, len(h.upperBounds)) - h.counts[1].buckets = make([]uint64, len(h.upperBounds)) - - h.init(h) // Init self-collection. - return h -} - -type histogramCounts struct { - // sumBits contains the bits of the float64 representing the sum of all - // observations. sumBits and count have to go first in the struct to - // guarantee alignment for atomic operations. - // http://golang.org/pkg/sync/atomic/#pkg-note-BUG - sumBits uint64 - count uint64 - buckets []uint64 -} - -type histogram struct { - selfCollector - desc *Desc - writeMtx sync.Mutex // Only used in the Write method. - - upperBounds []float64 - - // Two counts, one is "hot" for lock-free observations, the other is - // "cold" for writing out a dto.Metric. - counts [2]histogramCounts - - hotIdx int // Index of currently-hot counts. Only used within Write. - - // This is a complicated one. For lock-free yet atomic observations, we - // need to save the total count of observations again, combined with the - // index of the currently-hot counts struct, so that we can perform the - // operation on both values atomically. The least significant bit - // defines the hot counts struct. The remaining 63 bits represent the - // total count of observations. This happens under the assumption that - // the 63bit count will never overflow. Rationale: An observations takes - // about 30ns. Let's assume it could happen in 10ns. Overflowing the - // counter will then take at least (2^63)*10ns, which is about 3000 - // years. - countAndHotIdx uint64 - - labelPairs []*dto.LabelPair -} - -func (h *histogram) Desc() *Desc { - return h.desc -} - -func (h *histogram) Observe(v float64) { - // TODO(beorn7): For small numbers of buckets (<30), a linear search is - // slightly faster than the binary search. If we really care, we could - // switch from one search strategy to the other depending on the number - // of buckets. - // - // Microbenchmarks (BenchmarkHistogramNoLabels): - // 11 buckets: 38.3 ns/op linear - binary 48.7 ns/op - // 100 buckets: 78.1 ns/op linear - binary 54.9 ns/op - // 300 buckets: 154 ns/op linear - binary 61.6 ns/op - i := sort.SearchFloat64s(h.upperBounds, v) - - // We increment h.countAndHotIdx by 2 so that the counter in the upper - // 63 bits gets incremented by 1. At the same time, we get the new value - // back, which we can use to find the currently-hot counts. - n := atomic.AddUint64(&h.countAndHotIdx, 2) - hotCounts := &h.counts[n%2] - - if i < len(h.upperBounds) { - atomic.AddUint64(&hotCounts.buckets[i], 1) - } - for { - oldBits := atomic.LoadUint64(&hotCounts.sumBits) - newBits := math.Float64bits(math.Float64frombits(oldBits) + v) - if atomic.CompareAndSwapUint64(&hotCounts.sumBits, oldBits, newBits) { - break - } - } - // Increment count last as we take it as a signal that the observation - // is complete. - atomic.AddUint64(&hotCounts.count, 1) -} - -func (h *histogram) Write(out *dto.Metric) error { - var ( - his = &dto.Histogram{} - buckets = make([]*dto.Bucket, len(h.upperBounds)) - hotCounts, coldCounts *histogramCounts - count uint64 - ) - - // For simplicity, we mutex the rest of this method. It is not in the - // hot path, i.e. Observe is called much more often than Write. The - // complication of making Write lock-free isn't worth it. - h.writeMtx.Lock() - defer h.writeMtx.Unlock() - - // This is a bit arcane, which is why the following spells out this if - // clause in English: - // - // If the currently-hot counts struct is #0, we atomically increment - // h.countAndHotIdx by 1 so that from now on Observe will use the counts - // struct #1. Furthermore, the atomic increment gives us the new value, - // which, in its most significant 63 bits, tells us the count of - // observations done so far up to and including currently ongoing - // observations still using the counts struct just changed from hot to - // cold. To have a normal uint64 for the count, we bitshift by 1 and - // save the result in count. We also set h.hotIdx to 1 for the next - // Write call, and we will refer to counts #1 as hotCounts and to counts - // #0 as coldCounts. - // - // If the currently-hot counts struct is #1, we do the corresponding - // things the other way round. We have to _decrement_ h.countAndHotIdx - // (which is a bit arcane in itself, as we have to express -1 with an - // unsigned int...). - if h.hotIdx == 0 { - count = atomic.AddUint64(&h.countAndHotIdx, 1) >> 1 - h.hotIdx = 1 - hotCounts = &h.counts[1] - coldCounts = &h.counts[0] - } else { - count = atomic.AddUint64(&h.countAndHotIdx, ^uint64(0)) >> 1 // Decrement. - h.hotIdx = 0 - hotCounts = &h.counts[0] - coldCounts = &h.counts[1] - } - - // Now we have to wait for the now-declared-cold counts to actually cool - // down, i.e. wait for all observations still using it to finish. That's - // the case once the count in the cold counts struct is the same as the - // one atomically retrieved from the upper 63bits of h.countAndHotIdx. - for { - if count == atomic.LoadUint64(&coldCounts.count) { - break - } - runtime.Gosched() // Let observations get work done. - } - - his.SampleCount = proto.Uint64(count) - his.SampleSum = proto.Float64(math.Float64frombits(atomic.LoadUint64(&coldCounts.sumBits))) - var cumCount uint64 - for i, upperBound := range h.upperBounds { - cumCount += atomic.LoadUint64(&coldCounts.buckets[i]) - buckets[i] = &dto.Bucket{ - CumulativeCount: proto.Uint64(cumCount), - UpperBound: proto.Float64(upperBound), - } - } - - his.Bucket = buckets - out.Histogram = his - out.Label = h.labelPairs - - // Finally add all the cold counts to the new hot counts and reset the cold counts. - atomic.AddUint64(&hotCounts.count, count) - atomic.StoreUint64(&coldCounts.count, 0) - for { - oldBits := atomic.LoadUint64(&hotCounts.sumBits) - newBits := math.Float64bits(math.Float64frombits(oldBits) + his.GetSampleSum()) - if atomic.CompareAndSwapUint64(&hotCounts.sumBits, oldBits, newBits) { - atomic.StoreUint64(&coldCounts.sumBits, 0) - break - } - } - for i := range h.upperBounds { - atomic.AddUint64(&hotCounts.buckets[i], atomic.LoadUint64(&coldCounts.buckets[i])) - atomic.StoreUint64(&coldCounts.buckets[i], 0) - } - return nil -} - -// HistogramVec is a Collector that bundles a set of Histograms that all share the -// same Desc, but have different values for their variable labels. This is used -// if you want to count the same thing partitioned by various dimensions -// (e.g. HTTP request latencies, partitioned by status code and method). Create -// instances with NewHistogramVec. -type HistogramVec struct { - *metricVec -} - -// NewHistogramVec creates a new HistogramVec based on the provided HistogramOpts and -// partitioned by the given label names. -func NewHistogramVec(opts HistogramOpts, labelNames []string) *HistogramVec { - desc := NewDesc( - BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), - opts.Help, - labelNames, - opts.ConstLabels, - ) - return &HistogramVec{ - metricVec: newMetricVec(desc, func(lvs ...string) Metric { - return newHistogram(desc, opts, lvs...) - }), - } -} - -// GetMetricWithLabelValues returns the Histogram for the given slice of label -// values (same order as the VariableLabels in Desc). If that combination of -// label values is accessed for the first time, a new Histogram is created. -// -// It is possible to call this method without using the returned Histogram to only -// create the new Histogram but leave it at its starting value, a Histogram without -// any observations. -// -// Keeping the Histogram for later use is possible (and should be considered if -// performance is critical), but keep in mind that Reset, DeleteLabelValues and -// Delete can be used to delete the Histogram from the HistogramVec. In that case, the -// Histogram will still exist, but it will not be exported anymore, even if a -// Histogram with the same label values is created later. See also the CounterVec -// example. -// -// An error is returned if the number of label values is not the same as the -// number of VariableLabels in Desc (minus any curried labels). -// -// Note that for more than one label value, this method is prone to mistakes -// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as -// an alternative to avoid that type of mistake. For higher label numbers, the -// latter has a much more readable (albeit more verbose) syntax, but it comes -// with a performance overhead (for creating and processing the Labels map). -// See also the GaugeVec example. -func (v *HistogramVec) GetMetricWithLabelValues(lvs ...string) (Observer, error) { - metric, err := v.metricVec.getMetricWithLabelValues(lvs...) - if metric != nil { - return metric.(Observer), err - } - return nil, err -} - -// GetMetricWith returns the Histogram for the given Labels map (the label names -// must match those of the VariableLabels in Desc). If that label map is -// accessed for the first time, a new Histogram is created. Implications of -// creating a Histogram without using it and keeping the Histogram for later use -// are the same as for GetMetricWithLabelValues. -// -// An error is returned if the number and names of the Labels are inconsistent -// with those of the VariableLabels in Desc (minus any curried labels). -// -// This method is used for the same purpose as -// GetMetricWithLabelValues(...string). See there for pros and cons of the two -// methods. -func (v *HistogramVec) GetMetricWith(labels Labels) (Observer, error) { - metric, err := v.metricVec.getMetricWith(labels) - if metric != nil { - return metric.(Observer), err - } - return nil, err -} - -// WithLabelValues works as GetMetricWithLabelValues, but panics where -// GetMetricWithLabelValues would have returned an error. Not returning an -// error allows shortcuts like -// myVec.WithLabelValues("404", "GET").Observe(42.21) -func (v *HistogramVec) WithLabelValues(lvs ...string) Observer { - h, err := v.GetMetricWithLabelValues(lvs...) - if err != nil { - panic(err) - } - return h -} - -// With works as GetMetricWith but panics where GetMetricWithLabels would have -// returned an error. Not returning an error allows shortcuts like -// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Observe(42.21) -func (v *HistogramVec) With(labels Labels) Observer { - h, err := v.GetMetricWith(labels) - if err != nil { - panic(err) - } - return h -} - -// CurryWith returns a vector curried with the provided labels, i.e. the -// returned vector has those labels pre-set for all labeled operations performed -// on it. The cardinality of the curried vector is reduced accordingly. The -// order of the remaining labels stays the same (just with the curried labels -// taken out of the sequence – which is relevant for the -// (GetMetric)WithLabelValues methods). It is possible to curry a curried -// vector, but only with labels not yet used for currying before. -// -// The metrics contained in the HistogramVec are shared between the curried and -// uncurried vectors. They are just accessed differently. Curried and uncurried -// vectors behave identically in terms of collection. Only one must be -// registered with a given registry (usually the uncurried version). The Reset -// method deletes all metrics, even if called on a curried vector. -func (v *HistogramVec) CurryWith(labels Labels) (ObserverVec, error) { - vec, err := v.curryWith(labels) - if vec != nil { - return &HistogramVec{vec}, err - } - return nil, err -} - -// MustCurryWith works as CurryWith but panics where CurryWith would have -// returned an error. -func (v *HistogramVec) MustCurryWith(labels Labels) ObserverVec { - vec, err := v.CurryWith(labels) - if err != nil { - panic(err) - } - return vec -} - -type constHistogram struct { - desc *Desc - count uint64 - sum float64 - buckets map[float64]uint64 - labelPairs []*dto.LabelPair -} - -func (h *constHistogram) Desc() *Desc { - return h.desc -} - -func (h *constHistogram) Write(out *dto.Metric) error { - his := &dto.Histogram{} - buckets := make([]*dto.Bucket, 0, len(h.buckets)) - - his.SampleCount = proto.Uint64(h.count) - his.SampleSum = proto.Float64(h.sum) - - for upperBound, count := range h.buckets { - buckets = append(buckets, &dto.Bucket{ - CumulativeCount: proto.Uint64(count), - UpperBound: proto.Float64(upperBound), - }) - } - - if len(buckets) > 0 { - sort.Sort(buckSort(buckets)) - } - his.Bucket = buckets - - out.Histogram = his - out.Label = h.labelPairs - - return nil -} - -// NewConstHistogram returns a metric representing a Prometheus histogram with -// fixed values for the count, sum, and bucket counts. As those parameters -// cannot be changed, the returned value does not implement the Histogram -// interface (but only the Metric interface). Users of this package will not -// have much use for it in regular operations. However, when implementing custom -// Collectors, it is useful as a throw-away metric that is generated on the fly -// to send it to Prometheus in the Collect method. -// -// buckets is a map of upper bounds to cumulative counts, excluding the +Inf -// bucket. -// -// NewConstHistogram returns an error if the length of labelValues is not -// consistent with the variable labels in Desc. -func NewConstHistogram( - desc *Desc, - count uint64, - sum float64, - buckets map[float64]uint64, - labelValues ...string, -) (Metric, error) { - if err := validateLabelValues(labelValues, len(desc.variableLabels)); err != nil { - return nil, err - } - return &constHistogram{ - desc: desc, - count: count, - sum: sum, - buckets: buckets, - labelPairs: makeLabelPairs(desc, labelValues), - }, nil -} - -// MustNewConstHistogram is a version of NewConstHistogram that panics where -// NewConstMetric would have returned an error. -func MustNewConstHistogram( - desc *Desc, - count uint64, - sum float64, - buckets map[float64]uint64, - labelValues ...string, -) Metric { - m, err := NewConstHistogram(desc, count, sum, buckets, labelValues...) - if err != nil { - panic(err) - } - return m -} - -type buckSort []*dto.Bucket - -func (s buckSort) Len() int { - return len(s) -} - -func (s buckSort) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} - -func (s buckSort) Less(i, j int) bool { - return s[i].GetUpperBound() < s[j].GetUpperBound() -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/http.go b/vendor/github.com/prometheus/client_golang/prometheus/http.go deleted file mode 100644 index 4b8e60273..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/http.go +++ /dev/null @@ -1,505 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "bufio" - "bytes" - "compress/gzip" - "fmt" - "io" - "net" - "net/http" - "strconv" - "strings" - "sync" - "time" - - "github.com/prometheus/common/expfmt" -) - -// TODO(beorn7): Remove this whole file. It is a partial mirror of -// promhttp/http.go (to avoid circular import chains) where everything HTTP -// related should live. The functions here are just for avoiding -// breakage. Everything is deprecated. - -const ( - contentTypeHeader = "Content-Type" - contentLengthHeader = "Content-Length" - contentEncodingHeader = "Content-Encoding" - acceptEncodingHeader = "Accept-Encoding" -) - -var bufPool sync.Pool - -func getBuf() *bytes.Buffer { - buf := bufPool.Get() - if buf == nil { - return &bytes.Buffer{} - } - return buf.(*bytes.Buffer) -} - -func giveBuf(buf *bytes.Buffer) { - buf.Reset() - bufPool.Put(buf) -} - -// Handler returns an HTTP handler for the DefaultGatherer. It is -// already instrumented with InstrumentHandler (using "prometheus" as handler -// name). -// -// Deprecated: Please note the issues described in the doc comment of -// InstrumentHandler. You might want to consider using promhttp.Handler instead. -func Handler() http.Handler { - return InstrumentHandler("prometheus", UninstrumentedHandler()) -} - -// UninstrumentedHandler returns an HTTP handler for the DefaultGatherer. -// -// Deprecated: Use promhttp.HandlerFor(DefaultGatherer, promhttp.HandlerOpts{}) -// instead. See there for further documentation. -func UninstrumentedHandler() http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - mfs, err := DefaultGatherer.Gather() - if err != nil { - http.Error(w, "An error has occurred during metrics collection:\n\n"+err.Error(), http.StatusInternalServerError) - return - } - - contentType := expfmt.Negotiate(req.Header) - buf := getBuf() - defer giveBuf(buf) - writer, encoding := decorateWriter(req, buf) - enc := expfmt.NewEncoder(writer, contentType) - var lastErr error - for _, mf := range mfs { - if err := enc.Encode(mf); err != nil { - lastErr = err - http.Error(w, "An error has occurred during metrics encoding:\n\n"+err.Error(), http.StatusInternalServerError) - return - } - } - if closer, ok := writer.(io.Closer); ok { - closer.Close() - } - if lastErr != nil && buf.Len() == 0 { - http.Error(w, "No metrics encoded, last error:\n\n"+lastErr.Error(), http.StatusInternalServerError) - return - } - header := w.Header() - header.Set(contentTypeHeader, string(contentType)) - header.Set(contentLengthHeader, fmt.Sprint(buf.Len())) - if encoding != "" { - header.Set(contentEncodingHeader, encoding) - } - w.Write(buf.Bytes()) - }) -} - -// decorateWriter wraps a writer to handle gzip compression if requested. It -// returns the decorated writer and the appropriate "Content-Encoding" header -// (which is empty if no compression is enabled). -func decorateWriter(request *http.Request, writer io.Writer) (io.Writer, string) { - header := request.Header.Get(acceptEncodingHeader) - parts := strings.Split(header, ",") - for _, part := range parts { - part = strings.TrimSpace(part) - if part == "gzip" || strings.HasPrefix(part, "gzip;") { - return gzip.NewWriter(writer), "gzip" - } - } - return writer, "" -} - -var instLabels = []string{"method", "code"} - -type nower interface { - Now() time.Time -} - -type nowFunc func() time.Time - -func (n nowFunc) Now() time.Time { - return n() -} - -var now nower = nowFunc(func() time.Time { - return time.Now() -}) - -// InstrumentHandler wraps the given HTTP handler for instrumentation. It -// registers four metric collectors (if not already done) and reports HTTP -// metrics to the (newly or already) registered collectors: http_requests_total -// (CounterVec), http_request_duration_microseconds (Summary), -// http_request_size_bytes (Summary), http_response_size_bytes (Summary). Each -// has a constant label named "handler" with the provided handlerName as -// value. http_requests_total is a metric vector partitioned by HTTP method -// (label name "method") and HTTP status code (label name "code"). -// -// Deprecated: InstrumentHandler has several issues. Use the tooling provided in -// package promhttp instead. The issues are the following: (1) It uses Summaries -// rather than Histograms. Summaries are not useful if aggregation across -// multiple instances is required. (2) It uses microseconds as unit, which is -// deprecated and should be replaced by seconds. (3) The size of the request is -// calculated in a separate goroutine. Since this calculator requires access to -// the request header, it creates a race with any writes to the header performed -// during request handling. httputil.ReverseProxy is a prominent example for a -// handler performing such writes. (4) It has additional issues with HTTP/2, cf. -// https://github.com/prometheus/client_golang/issues/272. -func InstrumentHandler(handlerName string, handler http.Handler) http.HandlerFunc { - return InstrumentHandlerFunc(handlerName, handler.ServeHTTP) -} - -// InstrumentHandlerFunc wraps the given function for instrumentation. It -// otherwise works in the same way as InstrumentHandler (and shares the same -// issues). -// -// Deprecated: InstrumentHandlerFunc is deprecated for the same reasons as -// InstrumentHandler is. Use the tooling provided in package promhttp instead. -func InstrumentHandlerFunc(handlerName string, handlerFunc func(http.ResponseWriter, *http.Request)) http.HandlerFunc { - return InstrumentHandlerFuncWithOpts( - SummaryOpts{ - Subsystem: "http", - ConstLabels: Labels{"handler": handlerName}, - Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}, - }, - handlerFunc, - ) -} - -// InstrumentHandlerWithOpts works like InstrumentHandler (and shares the same -// issues) but provides more flexibility (at the cost of a more complex call -// syntax). As InstrumentHandler, this function registers four metric -// collectors, but it uses the provided SummaryOpts to create them. However, the -// fields "Name" and "Help" in the SummaryOpts are ignored. "Name" is replaced -// by "requests_total", "request_duration_microseconds", "request_size_bytes", -// and "response_size_bytes", respectively. "Help" is replaced by an appropriate -// help string. The names of the variable labels of the http_requests_total -// CounterVec are "method" (get, post, etc.), and "code" (HTTP status code). -// -// If InstrumentHandlerWithOpts is called as follows, it mimics exactly the -// behavior of InstrumentHandler: -// -// prometheus.InstrumentHandlerWithOpts( -// prometheus.SummaryOpts{ -// Subsystem: "http", -// ConstLabels: prometheus.Labels{"handler": handlerName}, -// }, -// handler, -// ) -// -// Technical detail: "requests_total" is a CounterVec, not a SummaryVec, so it -// cannot use SummaryOpts. Instead, a CounterOpts struct is created internally, -// and all its fields are set to the equally named fields in the provided -// SummaryOpts. -// -// Deprecated: InstrumentHandlerWithOpts is deprecated for the same reasons as -// InstrumentHandler is. Use the tooling provided in package promhttp instead. -func InstrumentHandlerWithOpts(opts SummaryOpts, handler http.Handler) http.HandlerFunc { - return InstrumentHandlerFuncWithOpts(opts, handler.ServeHTTP) -} - -// InstrumentHandlerFuncWithOpts works like InstrumentHandlerFunc (and shares -// the same issues) but provides more flexibility (at the cost of a more complex -// call syntax). See InstrumentHandlerWithOpts for details how the provided -// SummaryOpts are used. -// -// Deprecated: InstrumentHandlerFuncWithOpts is deprecated for the same reasons -// as InstrumentHandler is. Use the tooling provided in package promhttp instead. -func InstrumentHandlerFuncWithOpts(opts SummaryOpts, handlerFunc func(http.ResponseWriter, *http.Request)) http.HandlerFunc { - reqCnt := NewCounterVec( - CounterOpts{ - Namespace: opts.Namespace, - Subsystem: opts.Subsystem, - Name: "requests_total", - Help: "Total number of HTTP requests made.", - ConstLabels: opts.ConstLabels, - }, - instLabels, - ) - if err := Register(reqCnt); err != nil { - if are, ok := err.(AlreadyRegisteredError); ok { - reqCnt = are.ExistingCollector.(*CounterVec) - } else { - panic(err) - } - } - - opts.Name = "request_duration_microseconds" - opts.Help = "The HTTP request latencies in microseconds." - reqDur := NewSummary(opts) - if err := Register(reqDur); err != nil { - if are, ok := err.(AlreadyRegisteredError); ok { - reqDur = are.ExistingCollector.(Summary) - } else { - panic(err) - } - } - - opts.Name = "request_size_bytes" - opts.Help = "The HTTP request sizes in bytes." - reqSz := NewSummary(opts) - if err := Register(reqSz); err != nil { - if are, ok := err.(AlreadyRegisteredError); ok { - reqSz = are.ExistingCollector.(Summary) - } else { - panic(err) - } - } - - opts.Name = "response_size_bytes" - opts.Help = "The HTTP response sizes in bytes." - resSz := NewSummary(opts) - if err := Register(resSz); err != nil { - if are, ok := err.(AlreadyRegisteredError); ok { - resSz = are.ExistingCollector.(Summary) - } else { - panic(err) - } - } - - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - now := time.Now() - - delegate := &responseWriterDelegator{ResponseWriter: w} - out := computeApproximateRequestSize(r) - - _, cn := w.(http.CloseNotifier) - _, fl := w.(http.Flusher) - _, hj := w.(http.Hijacker) - _, rf := w.(io.ReaderFrom) - var rw http.ResponseWriter - if cn && fl && hj && rf { - rw = &fancyResponseWriterDelegator{delegate} - } else { - rw = delegate - } - handlerFunc(rw, r) - - elapsed := float64(time.Since(now)) / float64(time.Microsecond) - - method := sanitizeMethod(r.Method) - code := sanitizeCode(delegate.status) - reqCnt.WithLabelValues(method, code).Inc() - reqDur.Observe(elapsed) - resSz.Observe(float64(delegate.written)) - reqSz.Observe(float64(<-out)) - }) -} - -func computeApproximateRequestSize(r *http.Request) <-chan int { - // Get URL length in current goroutine for avoiding a race condition. - // HandlerFunc that runs in parallel may modify the URL. - s := 0 - if r.URL != nil { - s += len(r.URL.String()) - } - - out := make(chan int, 1) - - go func() { - s += len(r.Method) - s += len(r.Proto) - for name, values := range r.Header { - s += len(name) - for _, value := range values { - s += len(value) - } - } - s += len(r.Host) - - // N.B. r.Form and r.MultipartForm are assumed to be included in r.URL. - - if r.ContentLength != -1 { - s += int(r.ContentLength) - } - out <- s - close(out) - }() - - return out -} - -type responseWriterDelegator struct { - http.ResponseWriter - - status int - written int64 - wroteHeader bool -} - -func (r *responseWriterDelegator) WriteHeader(code int) { - r.status = code - r.wroteHeader = true - r.ResponseWriter.WriteHeader(code) -} - -func (r *responseWriterDelegator) Write(b []byte) (int, error) { - if !r.wroteHeader { - r.WriteHeader(http.StatusOK) - } - n, err := r.ResponseWriter.Write(b) - r.written += int64(n) - return n, err -} - -type fancyResponseWriterDelegator struct { - *responseWriterDelegator -} - -func (f *fancyResponseWriterDelegator) CloseNotify() <-chan bool { - return f.ResponseWriter.(http.CloseNotifier).CloseNotify() -} - -func (f *fancyResponseWriterDelegator) Flush() { - f.ResponseWriter.(http.Flusher).Flush() -} - -func (f *fancyResponseWriterDelegator) Hijack() (net.Conn, *bufio.ReadWriter, error) { - return f.ResponseWriter.(http.Hijacker).Hijack() -} - -func (f *fancyResponseWriterDelegator) ReadFrom(r io.Reader) (int64, error) { - if !f.wroteHeader { - f.WriteHeader(http.StatusOK) - } - n, err := f.ResponseWriter.(io.ReaderFrom).ReadFrom(r) - f.written += n - return n, err -} - -func sanitizeMethod(m string) string { - switch m { - case "GET", "get": - return "get" - case "PUT", "put": - return "put" - case "HEAD", "head": - return "head" - case "POST", "post": - return "post" - case "DELETE", "delete": - return "delete" - case "CONNECT", "connect": - return "connect" - case "OPTIONS", "options": - return "options" - case "NOTIFY", "notify": - return "notify" - default: - return strings.ToLower(m) - } -} - -func sanitizeCode(s int) string { - switch s { - case 100: - return "100" - case 101: - return "101" - - case 200: - return "200" - case 201: - return "201" - case 202: - return "202" - case 203: - return "203" - case 204: - return "204" - case 205: - return "205" - case 206: - return "206" - - case 300: - return "300" - case 301: - return "301" - case 302: - return "302" - case 304: - return "304" - case 305: - return "305" - case 307: - return "307" - - case 400: - return "400" - case 401: - return "401" - case 402: - return "402" - case 403: - return "403" - case 404: - return "404" - case 405: - return "405" - case 406: - return "406" - case 407: - return "407" - case 408: - return "408" - case 409: - return "409" - case 410: - return "410" - case 411: - return "411" - case 412: - return "412" - case 413: - return "413" - case 414: - return "414" - case 415: - return "415" - case 416: - return "416" - case 417: - return "417" - case 418: - return "418" - - case 500: - return "500" - case 501: - return "501" - case 502: - return "502" - case 503: - return "503" - case 504: - return "504" - case 505: - return "505" - - case 428: - return "428" - case 429: - return "429" - case 431: - return "431" - case 511: - return "511" - - default: - return strconv.Itoa(s) - } -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/internal/metric.go b/vendor/github.com/prometheus/client_golang/prometheus/internal/metric.go deleted file mode 100644 index 351c26e1a..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/internal/metric.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package internal - -import ( - "sort" - - dto "github.com/prometheus/client_model/go" -) - -// metricSorter is a sortable slice of *dto.Metric. -type metricSorter []*dto.Metric - -func (s metricSorter) Len() int { - return len(s) -} - -func (s metricSorter) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} - -func (s metricSorter) Less(i, j int) bool { - if len(s[i].Label) != len(s[j].Label) { - // This should not happen. The metrics are - // inconsistent. However, we have to deal with the fact, as - // people might use custom collectors or metric family injection - // to create inconsistent metrics. So let's simply compare the - // number of labels in this case. That will still yield - // reproducible sorting. - return len(s[i].Label) < len(s[j].Label) - } - for n, lp := range s[i].Label { - vi := lp.GetValue() - vj := s[j].Label[n].GetValue() - if vi != vj { - return vi < vj - } - } - - // We should never arrive here. Multiple metrics with the same - // label set in the same scrape will lead to undefined ingestion - // behavior. However, as above, we have to provide stable sorting - // here, even for inconsistent metrics. So sort equal metrics - // by their timestamp, with missing timestamps (implying "now") - // coming last. - if s[i].TimestampMs == nil { - return false - } - if s[j].TimestampMs == nil { - return true - } - return s[i].GetTimestampMs() < s[j].GetTimestampMs() -} - -// NormalizeMetricFamilies returns a MetricFamily slice with empty -// MetricFamilies pruned and the remaining MetricFamilies sorted by name within -// the slice, with the contained Metrics sorted within each MetricFamily. -func NormalizeMetricFamilies(metricFamiliesByName map[string]*dto.MetricFamily) []*dto.MetricFamily { - for _, mf := range metricFamiliesByName { - sort.Sort(metricSorter(mf.Metric)) - } - names := make([]string, 0, len(metricFamiliesByName)) - for name, mf := range metricFamiliesByName { - if len(mf.Metric) > 0 { - names = append(names, name) - } - } - sort.Strings(names) - result := make([]*dto.MetricFamily, 0, len(names)) - for _, name := range names { - result = append(result, metricFamiliesByName[name]) - } - return result -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/labels.go b/vendor/github.com/prometheus/client_golang/prometheus/labels.go deleted file mode 100644 index e68f132ec..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/labels.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "errors" - "fmt" - "strings" - "unicode/utf8" - - "github.com/prometheus/common/model" -) - -// Labels represents a collection of label name -> value mappings. This type is -// commonly used with the With(Labels) and GetMetricWith(Labels) methods of -// metric vector Collectors, e.g.: -// myVec.With(Labels{"code": "404", "method": "GET"}).Add(42) -// -// The other use-case is the specification of constant label pairs in Opts or to -// create a Desc. -type Labels map[string]string - -// reservedLabelPrefix is a prefix which is not legal in user-supplied -// label names. -const reservedLabelPrefix = "__" - -var errInconsistentCardinality = errors.New("inconsistent label cardinality") - -func validateValuesInLabels(labels Labels, expectedNumberOfValues int) error { - if len(labels) != expectedNumberOfValues { - return errInconsistentCardinality - } - - for name, val := range labels { - if !utf8.ValidString(val) { - return fmt.Errorf("label %s: value %q is not valid UTF-8", name, val) - } - } - - return nil -} - -func validateLabelValues(vals []string, expectedNumberOfValues int) error { - if len(vals) != expectedNumberOfValues { - return errInconsistentCardinality - } - - for _, val := range vals { - if !utf8.ValidString(val) { - return fmt.Errorf("label value %q is not valid UTF-8", val) - } - } - - return nil -} - -func checkLabelName(l string) bool { - return model.LabelName(l).IsValid() && !strings.HasPrefix(l, reservedLabelPrefix) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/metric.go b/vendor/github.com/prometheus/client_golang/prometheus/metric.go deleted file mode 100644 index ae4462159..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/metric.go +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "strings" - "time" - - "github.com/golang/protobuf/proto" - - dto "github.com/prometheus/client_model/go" -) - -const separatorByte byte = 255 - -// A Metric models a single sample value with its meta data being exported to -// Prometheus. Implementations of Metric in this package are Gauge, Counter, -// Histogram, Summary, and Untyped. -type Metric interface { - // Desc returns the descriptor for the Metric. This method idempotently - // returns the same descriptor throughout the lifetime of the - // Metric. The returned descriptor is immutable by contract. A Metric - // unable to describe itself must return an invalid descriptor (created - // with NewInvalidDesc). - Desc() *Desc - // Write encodes the Metric into a "Metric" Protocol Buffer data - // transmission object. - // - // Metric implementations must observe concurrency safety as reads of - // this metric may occur at any time, and any blocking occurs at the - // expense of total performance of rendering all registered - // metrics. Ideally, Metric implementations should support concurrent - // readers. - // - // While populating dto.Metric, it is the responsibility of the - // implementation to ensure validity of the Metric protobuf (like valid - // UTF-8 strings or syntactically valid metric and label names). It is - // recommended to sort labels lexicographically. Callers of Write should - // still make sure of sorting if they depend on it. - Write(*dto.Metric) error - // TODO(beorn7): The original rationale of passing in a pre-allocated - // dto.Metric protobuf to save allocations has disappeared. The - // signature of this method should be changed to "Write() (*dto.Metric, - // error)". -} - -// Opts bundles the options for creating most Metric types. Each metric -// implementation XXX has its own XXXOpts type, but in most cases, it is just be -// an alias of this type (which might change when the requirement arises.) -// -// It is mandatory to set Name and Help to a non-empty string. All other fields -// are optional and can safely be left at their zero value. -type Opts struct { - // Namespace, Subsystem, and Name are components of the fully-qualified - // name of the Metric (created by joining these components with - // "_"). Only Name is mandatory, the others merely help structuring the - // name. Note that the fully-qualified name of the metric must be a - // valid Prometheus metric name. - Namespace string - Subsystem string - Name string - - // Help provides information about this metric. Mandatory! - // - // Metrics with the same fully-qualified name must have the same Help - // string. - Help string - - // ConstLabels are used to attach fixed labels to this metric. Metrics - // with the same fully-qualified name must have the same label names in - // their ConstLabels. - // - // ConstLabels are only used rarely. In particular, do not use them to - // attach the same labels to all your metrics. Those use cases are - // better covered by target labels set by the scraping Prometheus - // server, or by one specific metric (e.g. a build_info or a - // machine_role metric). See also - // https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels,-not-static-scraped-labels - ConstLabels Labels -} - -// BuildFQName joins the given three name components by "_". Empty name -// components are ignored. If the name parameter itself is empty, an empty -// string is returned, no matter what. Metric implementations included in this -// library use this function internally to generate the fully-qualified metric -// name from the name component in their Opts. Users of the library will only -// need this function if they implement their own Metric or instantiate a Desc -// (with NewDesc) directly. -func BuildFQName(namespace, subsystem, name string) string { - if name == "" { - return "" - } - switch { - case namespace != "" && subsystem != "": - return strings.Join([]string{namespace, subsystem, name}, "_") - case namespace != "": - return strings.Join([]string{namespace, name}, "_") - case subsystem != "": - return strings.Join([]string{subsystem, name}, "_") - } - return name -} - -// labelPairSorter implements sort.Interface. It is used to sort a slice of -// dto.LabelPair pointers. -type labelPairSorter []*dto.LabelPair - -func (s labelPairSorter) Len() int { - return len(s) -} - -func (s labelPairSorter) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} - -func (s labelPairSorter) Less(i, j int) bool { - return s[i].GetName() < s[j].GetName() -} - -type invalidMetric struct { - desc *Desc - err error -} - -// NewInvalidMetric returns a metric whose Write method always returns the -// provided error. It is useful if a Collector finds itself unable to collect -// a metric and wishes to report an error to the registry. -func NewInvalidMetric(desc *Desc, err error) Metric { - return &invalidMetric{desc, err} -} - -func (m *invalidMetric) Desc() *Desc { return m.desc } - -func (m *invalidMetric) Write(*dto.Metric) error { return m.err } - -type timestampedMetric struct { - Metric - t time.Time -} - -func (m timestampedMetric) Write(pb *dto.Metric) error { - e := m.Metric.Write(pb) - pb.TimestampMs = proto.Int64(m.t.Unix()*1000 + int64(m.t.Nanosecond()/1000000)) - return e -} - -// NewMetricWithTimestamp returns a new Metric wrapping the provided Metric in a -// way that it has an explicit timestamp set to the provided Time. This is only -// useful in rare cases as the timestamp of a Prometheus metric should usually -// be set by the Prometheus server during scraping. Exceptions include mirroring -// metrics with given timestamps from other metric -// sources. -// -// NewMetricWithTimestamp works best with MustNewConstMetric, -// MustNewConstHistogram, and MustNewConstSummary, see example. -// -// Currently, the exposition formats used by Prometheus are limited to -// millisecond resolution. Thus, the provided time will be rounded down to the -// next full millisecond value. -func NewMetricWithTimestamp(t time.Time, m Metric) Metric { - return timestampedMetric{Metric: m, t: t} -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/observer.go b/vendor/github.com/prometheus/client_golang/prometheus/observer.go deleted file mode 100644 index 5806cd09e..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/observer.go +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2017 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -// Observer is the interface that wraps the Observe method, which is used by -// Histogram and Summary to add observations. -type Observer interface { - Observe(float64) -} - -// The ObserverFunc type is an adapter to allow the use of ordinary -// functions as Observers. If f is a function with the appropriate -// signature, ObserverFunc(f) is an Observer that calls f. -// -// This adapter is usually used in connection with the Timer type, and there are -// two general use cases: -// -// The most common one is to use a Gauge as the Observer for a Timer. -// See the "Gauge" Timer example. -// -// The more advanced use case is to create a function that dynamically decides -// which Observer to use for observing the duration. See the "Complex" Timer -// example. -type ObserverFunc func(float64) - -// Observe calls f(value). It implements Observer. -func (f ObserverFunc) Observe(value float64) { - f(value) -} - -// ObserverVec is an interface implemented by `HistogramVec` and `SummaryVec`. -type ObserverVec interface { - GetMetricWith(Labels) (Observer, error) - GetMetricWithLabelValues(lvs ...string) (Observer, error) - With(Labels) Observer - WithLabelValues(...string) Observer - CurryWith(Labels) (ObserverVec, error) - MustCurryWith(Labels) ObserverVec - - Collector -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go deleted file mode 100644 index 55176d58c..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright 2015 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "errors" - "os" - - "github.com/prometheus/procfs" -) - -type processCollector struct { - collectFn func(chan<- Metric) - pidFn func() (int, error) - reportErrors bool - cpuTotal *Desc - openFDs, maxFDs *Desc - vsize, maxVsize *Desc - rss *Desc - startTime *Desc -} - -// ProcessCollectorOpts defines the behavior of a process metrics collector -// created with NewProcessCollector. -type ProcessCollectorOpts struct { - // PidFn returns the PID of the process the collector collects metrics - // for. It is called upon each collection. By default, the PID of the - // current process is used, as determined on construction time by - // calling os.Getpid(). - PidFn func() (int, error) - // If non-empty, each of the collected metrics is prefixed by the - // provided string and an underscore ("_"). - Namespace string - // If true, any error encountered during collection is reported as an - // invalid metric (see NewInvalidMetric). Otherwise, errors are ignored - // and the collected metrics will be incomplete. (Possibly, no metrics - // will be collected at all.) While that's usually not desired, it is - // appropriate for the common "mix-in" of process metrics, where process - // metrics are nice to have, but failing to collect them should not - // disrupt the collection of the remaining metrics. - ReportErrors bool -} - -// NewProcessCollector returns a collector which exports the current state of -// process metrics including CPU, memory and file descriptor usage as well as -// the process start time. The detailed behavior is defined by the provided -// ProcessCollectorOpts. The zero value of ProcessCollectorOpts creates a -// collector for the current process with an empty namespace string and no error -// reporting. -// -// Currently, the collector depends on a Linux-style proc filesystem and -// therefore only exports metrics for Linux. -// -// Note: An older version of this function had the following signature: -// -// NewProcessCollector(pid int, namespace string) Collector -// -// Most commonly, it was called as -// -// NewProcessCollector(os.Getpid(), "") -// -// The following call of the current version is equivalent to the above: -// -// NewProcessCollector(ProcessCollectorOpts{}) -func NewProcessCollector(opts ProcessCollectorOpts) Collector { - ns := "" - if len(opts.Namespace) > 0 { - ns = opts.Namespace + "_" - } - - c := &processCollector{ - reportErrors: opts.ReportErrors, - cpuTotal: NewDesc( - ns+"process_cpu_seconds_total", - "Total user and system CPU time spent in seconds.", - nil, nil, - ), - openFDs: NewDesc( - ns+"process_open_fds", - "Number of open file descriptors.", - nil, nil, - ), - maxFDs: NewDesc( - ns+"process_max_fds", - "Maximum number of open file descriptors.", - nil, nil, - ), - vsize: NewDesc( - ns+"process_virtual_memory_bytes", - "Virtual memory size in bytes.", - nil, nil, - ), - maxVsize: NewDesc( - ns+"process_virtual_memory_max_bytes", - "Maximum amount of virtual memory available in bytes.", - nil, nil, - ), - rss: NewDesc( - ns+"process_resident_memory_bytes", - "Resident memory size in bytes.", - nil, nil, - ), - startTime: NewDesc( - ns+"process_start_time_seconds", - "Start time of the process since unix epoch in seconds.", - nil, nil, - ), - } - - if opts.PidFn == nil { - pid := os.Getpid() - c.pidFn = func() (int, error) { return pid, nil } - } else { - c.pidFn = opts.PidFn - } - - // Set up process metric collection if supported by the runtime. - if _, err := procfs.NewStat(); err == nil { - c.collectFn = c.processCollect - } else { - c.collectFn = func(ch chan<- Metric) { - c.reportError(ch, nil, errors.New("process metrics not supported on this platform")) - } - } - - return c -} - -// Describe returns all descriptions of the collector. -func (c *processCollector) Describe(ch chan<- *Desc) { - ch <- c.cpuTotal - ch <- c.openFDs - ch <- c.maxFDs - ch <- c.vsize - ch <- c.maxVsize - ch <- c.rss - ch <- c.startTime -} - -// Collect returns the current state of all metrics of the collector. -func (c *processCollector) Collect(ch chan<- Metric) { - c.collectFn(ch) -} - -func (c *processCollector) processCollect(ch chan<- Metric) { - pid, err := c.pidFn() - if err != nil { - c.reportError(ch, nil, err) - return - } - - p, err := procfs.NewProc(pid) - if err != nil { - c.reportError(ch, nil, err) - return - } - - if stat, err := p.NewStat(); err == nil { - ch <- MustNewConstMetric(c.cpuTotal, CounterValue, stat.CPUTime()) - ch <- MustNewConstMetric(c.vsize, GaugeValue, float64(stat.VirtualMemory())) - ch <- MustNewConstMetric(c.rss, GaugeValue, float64(stat.ResidentMemory())) - if startTime, err := stat.StartTime(); err == nil { - ch <- MustNewConstMetric(c.startTime, GaugeValue, startTime) - } else { - c.reportError(ch, c.startTime, err) - } - } else { - c.reportError(ch, nil, err) - } - - if fds, err := p.FileDescriptorsLen(); err == nil { - ch <- MustNewConstMetric(c.openFDs, GaugeValue, float64(fds)) - } else { - c.reportError(ch, c.openFDs, err) - } - - if limits, err := p.NewLimits(); err == nil { - ch <- MustNewConstMetric(c.maxFDs, GaugeValue, float64(limits.OpenFiles)) - ch <- MustNewConstMetric(c.maxVsize, GaugeValue, float64(limits.AddressSpace)) - } else { - c.reportError(ch, nil, err) - } -} - -func (c *processCollector) reportError(ch chan<- Metric, desc *Desc, err error) { - if !c.reportErrors { - return - } - if desc == nil { - desc = NewInvalidDesc(err) - } - ch <- NewInvalidMetric(desc, err) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go deleted file mode 100644 index 67b56d37c..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright 2017 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package promhttp - -import ( - "bufio" - "io" - "net" - "net/http" -) - -const ( - closeNotifier = 1 << iota - flusher - hijacker - readerFrom - pusher -) - -type delegator interface { - http.ResponseWriter - - Status() int - Written() int64 -} - -type responseWriterDelegator struct { - http.ResponseWriter - - handler, method string - status int - written int64 - wroteHeader bool - observeWriteHeader func(int) -} - -func (r *responseWriterDelegator) Status() int { - return r.status -} - -func (r *responseWriterDelegator) Written() int64 { - return r.written -} - -func (r *responseWriterDelegator) WriteHeader(code int) { - r.status = code - r.wroteHeader = true - r.ResponseWriter.WriteHeader(code) - if r.observeWriteHeader != nil { - r.observeWriteHeader(code) - } -} - -func (r *responseWriterDelegator) Write(b []byte) (int, error) { - if !r.wroteHeader { - r.WriteHeader(http.StatusOK) - } - n, err := r.ResponseWriter.Write(b) - r.written += int64(n) - return n, err -} - -type closeNotifierDelegator struct{ *responseWriterDelegator } -type flusherDelegator struct{ *responseWriterDelegator } -type hijackerDelegator struct{ *responseWriterDelegator } -type readerFromDelegator struct{ *responseWriterDelegator } - -func (d closeNotifierDelegator) CloseNotify() <-chan bool { - return d.ResponseWriter.(http.CloseNotifier).CloseNotify() -} -func (d flusherDelegator) Flush() { - d.ResponseWriter.(http.Flusher).Flush() -} -func (d hijackerDelegator) Hijack() (net.Conn, *bufio.ReadWriter, error) { - return d.ResponseWriter.(http.Hijacker).Hijack() -} -func (d readerFromDelegator) ReadFrom(re io.Reader) (int64, error) { - if !d.wroteHeader { - d.WriteHeader(http.StatusOK) - } - n, err := d.ResponseWriter.(io.ReaderFrom).ReadFrom(re) - d.written += n - return n, err -} - -var pickDelegator = make([]func(*responseWriterDelegator) delegator, 32) - -func init() { - // TODO(beorn7): Code generation would help here. - pickDelegator[0] = func(d *responseWriterDelegator) delegator { // 0 - return d - } - pickDelegator[closeNotifier] = func(d *responseWriterDelegator) delegator { // 1 - return closeNotifierDelegator{d} - } - pickDelegator[flusher] = func(d *responseWriterDelegator) delegator { // 2 - return flusherDelegator{d} - } - pickDelegator[flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 3 - return struct { - *responseWriterDelegator - http.Flusher - http.CloseNotifier - }{d, flusherDelegator{d}, closeNotifierDelegator{d}} - } - pickDelegator[hijacker] = func(d *responseWriterDelegator) delegator { // 4 - return hijackerDelegator{d} - } - pickDelegator[hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 5 - return struct { - *responseWriterDelegator - http.Hijacker - http.CloseNotifier - }{d, hijackerDelegator{d}, closeNotifierDelegator{d}} - } - pickDelegator[hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 6 - return struct { - *responseWriterDelegator - http.Hijacker - http.Flusher - }{d, hijackerDelegator{d}, flusherDelegator{d}} - } - pickDelegator[hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 7 - return struct { - *responseWriterDelegator - http.Hijacker - http.Flusher - http.CloseNotifier - }{d, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} - } - pickDelegator[readerFrom] = func(d *responseWriterDelegator) delegator { // 8 - return readerFromDelegator{d} - } - pickDelegator[readerFrom+closeNotifier] = func(d *responseWriterDelegator) delegator { // 9 - return struct { - *responseWriterDelegator - io.ReaderFrom - http.CloseNotifier - }{d, readerFromDelegator{d}, closeNotifierDelegator{d}} - } - pickDelegator[readerFrom+flusher] = func(d *responseWriterDelegator) delegator { // 10 - return struct { - *responseWriterDelegator - io.ReaderFrom - http.Flusher - }{d, readerFromDelegator{d}, flusherDelegator{d}} - } - pickDelegator[readerFrom+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 11 - return struct { - *responseWriterDelegator - io.ReaderFrom - http.Flusher - http.CloseNotifier - }{d, readerFromDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} - } - pickDelegator[readerFrom+hijacker] = func(d *responseWriterDelegator) delegator { // 12 - return struct { - *responseWriterDelegator - io.ReaderFrom - http.Hijacker - }{d, readerFromDelegator{d}, hijackerDelegator{d}} - } - pickDelegator[readerFrom+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 13 - return struct { - *responseWriterDelegator - io.ReaderFrom - http.Hijacker - http.CloseNotifier - }{d, readerFromDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}} - } - pickDelegator[readerFrom+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 14 - return struct { - *responseWriterDelegator - io.ReaderFrom - http.Hijacker - http.Flusher - }{d, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}} - } - pickDelegator[readerFrom+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 15 - return struct { - *responseWriterDelegator - io.ReaderFrom - http.Hijacker - http.Flusher - http.CloseNotifier - }{d, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} - } -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_8.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_8.go deleted file mode 100644 index 31a706956..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_1_8.go +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright 2017 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// +build go1.8 - -package promhttp - -import ( - "io" - "net/http" -) - -type pusherDelegator struct{ *responseWriterDelegator } - -func (d pusherDelegator) Push(target string, opts *http.PushOptions) error { - return d.ResponseWriter.(http.Pusher).Push(target, opts) -} - -func init() { - pickDelegator[pusher] = func(d *responseWriterDelegator) delegator { // 16 - return pusherDelegator{d} - } - pickDelegator[pusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 17 - return struct { - *responseWriterDelegator - http.Pusher - http.CloseNotifier - }{d, pusherDelegator{d}, closeNotifierDelegator{d}} - } - pickDelegator[pusher+flusher] = func(d *responseWriterDelegator) delegator { // 18 - return struct { - *responseWriterDelegator - http.Pusher - http.Flusher - }{d, pusherDelegator{d}, flusherDelegator{d}} - } - pickDelegator[pusher+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 19 - return struct { - *responseWriterDelegator - http.Pusher - http.Flusher - http.CloseNotifier - }{d, pusherDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} - } - pickDelegator[pusher+hijacker] = func(d *responseWriterDelegator) delegator { // 20 - return struct { - *responseWriterDelegator - http.Pusher - http.Hijacker - }{d, pusherDelegator{d}, hijackerDelegator{d}} - } - pickDelegator[pusher+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 21 - return struct { - *responseWriterDelegator - http.Pusher - http.Hijacker - http.CloseNotifier - }{d, pusherDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}} - } - pickDelegator[pusher+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 22 - return struct { - *responseWriterDelegator - http.Pusher - http.Hijacker - http.Flusher - }{d, pusherDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}} - } - pickDelegator[pusher+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { //23 - return struct { - *responseWriterDelegator - http.Pusher - http.Hijacker - http.Flusher - http.CloseNotifier - }{d, pusherDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} - } - pickDelegator[pusher+readerFrom] = func(d *responseWriterDelegator) delegator { // 24 - return struct { - *responseWriterDelegator - http.Pusher - io.ReaderFrom - }{d, pusherDelegator{d}, readerFromDelegator{d}} - } - pickDelegator[pusher+readerFrom+closeNotifier] = func(d *responseWriterDelegator) delegator { // 25 - return struct { - *responseWriterDelegator - http.Pusher - io.ReaderFrom - http.CloseNotifier - }{d, pusherDelegator{d}, readerFromDelegator{d}, closeNotifierDelegator{d}} - } - pickDelegator[pusher+readerFrom+flusher] = func(d *responseWriterDelegator) delegator { // 26 - return struct { - *responseWriterDelegator - http.Pusher - io.ReaderFrom - http.Flusher - }{d, pusherDelegator{d}, readerFromDelegator{d}, flusherDelegator{d}} - } - pickDelegator[pusher+readerFrom+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 27 - return struct { - *responseWriterDelegator - http.Pusher - io.ReaderFrom - http.Flusher - http.CloseNotifier - }{d, pusherDelegator{d}, readerFromDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} - } - pickDelegator[pusher+readerFrom+hijacker] = func(d *responseWriterDelegator) delegator { // 28 - return struct { - *responseWriterDelegator - http.Pusher - io.ReaderFrom - http.Hijacker - }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}} - } - pickDelegator[pusher+readerFrom+hijacker+closeNotifier] = func(d *responseWriterDelegator) delegator { // 29 - return struct { - *responseWriterDelegator - http.Pusher - io.ReaderFrom - http.Hijacker - http.CloseNotifier - }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, closeNotifierDelegator{d}} - } - pickDelegator[pusher+readerFrom+hijacker+flusher] = func(d *responseWriterDelegator) delegator { // 30 - return struct { - *responseWriterDelegator - http.Pusher - io.ReaderFrom - http.Hijacker - http.Flusher - }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}} - } - pickDelegator[pusher+readerFrom+hijacker+flusher+closeNotifier] = func(d *responseWriterDelegator) delegator { // 31 - return struct { - *responseWriterDelegator - http.Pusher - io.ReaderFrom - http.Hijacker - http.Flusher - http.CloseNotifier - }{d, pusherDelegator{d}, readerFromDelegator{d}, hijackerDelegator{d}, flusherDelegator{d}, closeNotifierDelegator{d}} - } -} - -func newDelegator(w http.ResponseWriter, observeWriteHeaderFunc func(int)) delegator { - d := &responseWriterDelegator{ - ResponseWriter: w, - observeWriteHeader: observeWriteHeaderFunc, - } - - id := 0 - if _, ok := w.(http.CloseNotifier); ok { - id += closeNotifier - } - if _, ok := w.(http.Flusher); ok { - id += flusher - } - if _, ok := w.(http.Hijacker); ok { - id += hijacker - } - if _, ok := w.(io.ReaderFrom); ok { - id += readerFrom - } - if _, ok := w.(http.Pusher); ok { - id += pusher - } - - return pickDelegator[id](d) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_pre_1_8.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_pre_1_8.go deleted file mode 100644 index 8bb9b8b68..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator_pre_1_8.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2017 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// +build !go1.8 - -package promhttp - -import ( - "io" - "net/http" -) - -func newDelegator(w http.ResponseWriter, observeWriteHeaderFunc func(int)) delegator { - d := &responseWriterDelegator{ - ResponseWriter: w, - observeWriteHeader: observeWriteHeaderFunc, - } - - id := 0 - if _, ok := w.(http.CloseNotifier); ok { - id += closeNotifier - } - if _, ok := w.(http.Flusher); ok { - id += flusher - } - if _, ok := w.(http.Hijacker); ok { - id += hijacker - } - if _, ok := w.(io.ReaderFrom); ok { - id += readerFrom - } - - return pickDelegator[id](d) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go deleted file mode 100644 index 01357374f..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go +++ /dev/null @@ -1,311 +0,0 @@ -// Copyright 2016 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package promhttp provides tooling around HTTP servers and clients. -// -// First, the package allows the creation of http.Handler instances to expose -// Prometheus metrics via HTTP. promhttp.Handler acts on the -// prometheus.DefaultGatherer. With HandlerFor, you can create a handler for a -// custom registry or anything that implements the Gatherer interface. It also -// allows the creation of handlers that act differently on errors or allow to -// log errors. -// -// Second, the package provides tooling to instrument instances of http.Handler -// via middleware. Middleware wrappers follow the naming scheme -// InstrumentHandlerX, where X describes the intended use of the middleware. -// See each function's doc comment for specific details. -// -// Finally, the package allows for an http.RoundTripper to be instrumented via -// middleware. Middleware wrappers follow the naming scheme -// InstrumentRoundTripperX, where X describes the intended use of the -// middleware. See each function's doc comment for specific details. -package promhttp - -import ( - "bytes" - "compress/gzip" - "fmt" - "io" - "net/http" - "strings" - "sync" - "time" - - "github.com/prometheus/common/expfmt" - - "github.com/prometheus/client_golang/prometheus" -) - -const ( - contentTypeHeader = "Content-Type" - contentLengthHeader = "Content-Length" - contentEncodingHeader = "Content-Encoding" - acceptEncodingHeader = "Accept-Encoding" -) - -var bufPool sync.Pool - -func getBuf() *bytes.Buffer { - buf := bufPool.Get() - if buf == nil { - return &bytes.Buffer{} - } - return buf.(*bytes.Buffer) -} - -func giveBuf(buf *bytes.Buffer) { - buf.Reset() - bufPool.Put(buf) -} - -// Handler returns an http.Handler for the prometheus.DefaultGatherer, using -// default HandlerOpts, i.e. it reports the first error as an HTTP error, it has -// no error logging, and it applies compression if requested by the client. -// -// The returned http.Handler is already instrumented using the -// InstrumentMetricHandler function and the prometheus.DefaultRegisterer. If you -// create multiple http.Handlers by separate calls of the Handler function, the -// metrics used for instrumentation will be shared between them, providing -// global scrape counts. -// -// This function is meant to cover the bulk of basic use cases. If you are doing -// anything that requires more customization (including using a non-default -// Gatherer, different instrumentation, and non-default HandlerOpts), use the -// HandlerFor function. See there for details. -func Handler() http.Handler { - return InstrumentMetricHandler( - prometheus.DefaultRegisterer, HandlerFor(prometheus.DefaultGatherer, HandlerOpts{}), - ) -} - -// HandlerFor returns an uninstrumented http.Handler for the provided -// Gatherer. The behavior of the Handler is defined by the provided -// HandlerOpts. Thus, HandlerFor is useful to create http.Handlers for custom -// Gatherers, with non-default HandlerOpts, and/or with custom (or no) -// instrumentation. Use the InstrumentMetricHandler function to apply the same -// kind of instrumentation as it is used by the Handler function. -func HandlerFor(reg prometheus.Gatherer, opts HandlerOpts) http.Handler { - var inFlightSem chan struct{} - if opts.MaxRequestsInFlight > 0 { - inFlightSem = make(chan struct{}, opts.MaxRequestsInFlight) - } - - h := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - if inFlightSem != nil { - select { - case inFlightSem <- struct{}{}: // All good, carry on. - defer func() { <-inFlightSem }() - default: - http.Error(w, fmt.Sprintf( - "Limit of concurrent requests reached (%d), try again later.", opts.MaxRequestsInFlight, - ), http.StatusServiceUnavailable) - return - } - } - - mfs, err := reg.Gather() - if err != nil { - if opts.ErrorLog != nil { - opts.ErrorLog.Println("error gathering metrics:", err) - } - switch opts.ErrorHandling { - case PanicOnError: - panic(err) - case ContinueOnError: - if len(mfs) == 0 { - http.Error(w, "No metrics gathered, last error:\n\n"+err.Error(), http.StatusInternalServerError) - return - } - case HTTPErrorOnError: - http.Error(w, "An error has occurred during metrics gathering:\n\n"+err.Error(), http.StatusInternalServerError) - return - } - } - - contentType := expfmt.Negotiate(req.Header) - buf := getBuf() - defer giveBuf(buf) - writer, encoding := decorateWriter(req, buf, opts.DisableCompression) - enc := expfmt.NewEncoder(writer, contentType) - var lastErr error - for _, mf := range mfs { - if err := enc.Encode(mf); err != nil { - lastErr = err - if opts.ErrorLog != nil { - opts.ErrorLog.Println("error encoding metric family:", err) - } - switch opts.ErrorHandling { - case PanicOnError: - panic(err) - case ContinueOnError: - // Handled later. - case HTTPErrorOnError: - http.Error(w, "An error has occurred during metrics encoding:\n\n"+err.Error(), http.StatusInternalServerError) - return - } - } - } - if closer, ok := writer.(io.Closer); ok { - closer.Close() - } - if lastErr != nil && buf.Len() == 0 { - http.Error(w, "No metrics encoded, last error:\n\n"+lastErr.Error(), http.StatusInternalServerError) - return - } - header := w.Header() - header.Set(contentTypeHeader, string(contentType)) - header.Set(contentLengthHeader, fmt.Sprint(buf.Len())) - if encoding != "" { - header.Set(contentEncodingHeader, encoding) - } - if _, err := w.Write(buf.Bytes()); err != nil && opts.ErrorLog != nil { - opts.ErrorLog.Println("error while sending encoded metrics:", err) - } - // TODO(beorn7): Consider streaming serving of metrics. - }) - - if opts.Timeout <= 0 { - return h - } - return http.TimeoutHandler(h, opts.Timeout, fmt.Sprintf( - "Exceeded configured timeout of %v.\n", - opts.Timeout, - )) -} - -// InstrumentMetricHandler is usually used with an http.Handler returned by the -// HandlerFor function. It instruments the provided http.Handler with two -// metrics: A counter vector "promhttp_metric_handler_requests_total" to count -// scrapes partitioned by HTTP status code, and a gauge -// "promhttp_metric_handler_requests_in_flight" to track the number of -// simultaneous scrapes. This function idempotently registers collectors for -// both metrics with the provided Registerer. It panics if the registration -// fails. The provided metrics are useful to see how many scrapes hit the -// monitored target (which could be from different Prometheus servers or other -// scrapers), and how often they overlap (which would result in more than one -// scrape in flight at the same time). Note that the scrapes-in-flight gauge -// will contain the scrape by which it is exposed, while the scrape counter will -// only get incremented after the scrape is complete (as only then the status -// code is known). For tracking scrape durations, use the -// "scrape_duration_seconds" gauge created by the Prometheus server upon each -// scrape. -func InstrumentMetricHandler(reg prometheus.Registerer, handler http.Handler) http.Handler { - cnt := prometheus.NewCounterVec( - prometheus.CounterOpts{ - Name: "promhttp_metric_handler_requests_total", - Help: "Total number of scrapes by HTTP status code.", - }, - []string{"code"}, - ) - // Initialize the most likely HTTP status codes. - cnt.WithLabelValues("200") - cnt.WithLabelValues("500") - cnt.WithLabelValues("503") - if err := reg.Register(cnt); err != nil { - if are, ok := err.(prometheus.AlreadyRegisteredError); ok { - cnt = are.ExistingCollector.(*prometheus.CounterVec) - } else { - panic(err) - } - } - - gge := prometheus.NewGauge(prometheus.GaugeOpts{ - Name: "promhttp_metric_handler_requests_in_flight", - Help: "Current number of scrapes being served.", - }) - if err := reg.Register(gge); err != nil { - if are, ok := err.(prometheus.AlreadyRegisteredError); ok { - gge = are.ExistingCollector.(prometheus.Gauge) - } else { - panic(err) - } - } - - return InstrumentHandlerCounter(cnt, InstrumentHandlerInFlight(gge, handler)) -} - -// HandlerErrorHandling defines how a Handler serving metrics will handle -// errors. -type HandlerErrorHandling int - -// These constants cause handlers serving metrics to behave as described if -// errors are encountered. -const ( - // Serve an HTTP status code 500 upon the first error - // encountered. Report the error message in the body. - HTTPErrorOnError HandlerErrorHandling = iota - // Ignore errors and try to serve as many metrics as possible. However, - // if no metrics can be served, serve an HTTP status code 500 and the - // last error message in the body. Only use this in deliberate "best - // effort" metrics collection scenarios. It is recommended to at least - // log errors (by providing an ErrorLog in HandlerOpts) to not mask - // errors completely. - ContinueOnError - // Panic upon the first error encountered (useful for "crash only" apps). - PanicOnError -) - -// Logger is the minimal interface HandlerOpts needs for logging. Note that -// log.Logger from the standard library implements this interface, and it is -// easy to implement by custom loggers, if they don't do so already anyway. -type Logger interface { - Println(v ...interface{}) -} - -// HandlerOpts specifies options how to serve metrics via an http.Handler. The -// zero value of HandlerOpts is a reasonable default. -type HandlerOpts struct { - // ErrorLog specifies an optional logger for errors collecting and - // serving metrics. If nil, errors are not logged at all. - ErrorLog Logger - // ErrorHandling defines how errors are handled. Note that errors are - // logged regardless of the configured ErrorHandling provided ErrorLog - // is not nil. - ErrorHandling HandlerErrorHandling - // If DisableCompression is true, the handler will never compress the - // response, even if requested by the client. - DisableCompression bool - // The number of concurrent HTTP requests is limited to - // MaxRequestsInFlight. Additional requests are responded to with 503 - // Service Unavailable and a suitable message in the body. If - // MaxRequestsInFlight is 0 or negative, no limit is applied. - MaxRequestsInFlight int - // If handling a request takes longer than Timeout, it is responded to - // with 503 ServiceUnavailable and a suitable Message. No timeout is - // applied if Timeout is 0 or negative. Note that with the current - // implementation, reaching the timeout simply ends the HTTP requests as - // described above (and even that only if sending of the body hasn't - // started yet), while the bulk work of gathering all the metrics keeps - // running in the background (with the eventual result to be thrown - // away). Until the implementation is improved, it is recommended to - // implement a separate timeout in potentially slow Collectors. - Timeout time.Duration -} - -// decorateWriter wraps a writer to handle gzip compression if requested. It -// returns the decorated writer and the appropriate "Content-Encoding" header -// (which is empty if no compression is enabled). -func decorateWriter(request *http.Request, writer io.Writer, compressionDisabled bool) (io.Writer, string) { - if compressionDisabled { - return writer, "" - } - header := request.Header.Get(acceptEncodingHeader) - parts := strings.Split(header, ",") - for _, part := range parts { - part = strings.TrimSpace(part) - if part == "gzip" || strings.HasPrefix(part, "gzip;") { - return gzip.NewWriter(writer), "gzip" - } - } - return writer, "" -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go deleted file mode 100644 index 86fd56447..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2017 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package promhttp - -import ( - "net/http" - "time" - - "github.com/prometheus/client_golang/prometheus" -) - -// The RoundTripperFunc type is an adapter to allow the use of ordinary -// functions as RoundTrippers. If f is a function with the appropriate -// signature, RountTripperFunc(f) is a RoundTripper that calls f. -type RoundTripperFunc func(req *http.Request) (*http.Response, error) - -// RoundTrip implements the RoundTripper interface. -func (rt RoundTripperFunc) RoundTrip(r *http.Request) (*http.Response, error) { - return rt(r) -} - -// InstrumentRoundTripperInFlight is a middleware that wraps the provided -// http.RoundTripper. It sets the provided prometheus.Gauge to the number of -// requests currently handled by the wrapped http.RoundTripper. -// -// See the example for ExampleInstrumentRoundTripperDuration for example usage. -func InstrumentRoundTripperInFlight(gauge prometheus.Gauge, next http.RoundTripper) RoundTripperFunc { - return RoundTripperFunc(func(r *http.Request) (*http.Response, error) { - gauge.Inc() - defer gauge.Dec() - return next.RoundTrip(r) - }) -} - -// InstrumentRoundTripperCounter is a middleware that wraps the provided -// http.RoundTripper to observe the request result with the provided CounterVec. -// The CounterVec must have zero, one, or two non-const non-curried labels. For -// those, the only allowed label names are "code" and "method". The function -// panics otherwise. Partitioning of the CounterVec happens by HTTP status code -// and/or HTTP method if the respective instance label names are present in the -// CounterVec. For unpartitioned counting, use a CounterVec with zero labels. -// -// If the wrapped RoundTripper panics or returns a non-nil error, the Counter -// is not incremented. -// -// See the example for ExampleInstrumentRoundTripperDuration for example usage. -func InstrumentRoundTripperCounter(counter *prometheus.CounterVec, next http.RoundTripper) RoundTripperFunc { - code, method := checkLabels(counter) - - return RoundTripperFunc(func(r *http.Request) (*http.Response, error) { - resp, err := next.RoundTrip(r) - if err == nil { - counter.With(labels(code, method, r.Method, resp.StatusCode)).Inc() - } - return resp, err - }) -} - -// InstrumentRoundTripperDuration is a middleware that wraps the provided -// http.RoundTripper to observe the request duration with the provided -// ObserverVec. The ObserverVec must have zero, one, or two non-const -// non-curried labels. For those, the only allowed label names are "code" and -// "method". The function panics otherwise. The Observe method of the Observer -// in the ObserverVec is called with the request duration in -// seconds. Partitioning happens by HTTP status code and/or HTTP method if the -// respective instance label names are present in the ObserverVec. For -// unpartitioned observations, use an ObserverVec with zero labels. Note that -// partitioning of Histograms is expensive and should be used judiciously. -// -// If the wrapped RoundTripper panics or returns a non-nil error, no values are -// reported. -// -// Note that this method is only guaranteed to never observe negative durations -// if used with Go1.9+. -func InstrumentRoundTripperDuration(obs prometheus.ObserverVec, next http.RoundTripper) RoundTripperFunc { - code, method := checkLabels(obs) - - return RoundTripperFunc(func(r *http.Request) (*http.Response, error) { - start := time.Now() - resp, err := next.RoundTrip(r) - if err == nil { - obs.With(labels(code, method, r.Method, resp.StatusCode)).Observe(time.Since(start).Seconds()) - } - return resp, err - }) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client_1_8.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client_1_8.go deleted file mode 100644 index a034d1ec0..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_client_1_8.go +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2017 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// +build go1.8 - -package promhttp - -import ( - "context" - "crypto/tls" - "net/http" - "net/http/httptrace" - "time" -) - -// InstrumentTrace is used to offer flexibility in instrumenting the available -// httptrace.ClientTrace hook functions. Each function is passed a float64 -// representing the time in seconds since the start of the http request. A user -// may choose to use separately buckets Histograms, or implement custom -// instance labels on a per function basis. -type InstrumentTrace struct { - GotConn func(float64) - PutIdleConn func(float64) - GotFirstResponseByte func(float64) - Got100Continue func(float64) - DNSStart func(float64) - DNSDone func(float64) - ConnectStart func(float64) - ConnectDone func(float64) - TLSHandshakeStart func(float64) - TLSHandshakeDone func(float64) - WroteHeaders func(float64) - Wait100Continue func(float64) - WroteRequest func(float64) -} - -// InstrumentRoundTripperTrace is a middleware that wraps the provided -// RoundTripper and reports times to hook functions provided in the -// InstrumentTrace struct. Hook functions that are not present in the provided -// InstrumentTrace struct are ignored. Times reported to the hook functions are -// time since the start of the request. Only with Go1.9+, those times are -// guaranteed to never be negative. (Earlier Go versions are not using a -// monotonic clock.) Note that partitioning of Histograms is expensive and -// should be used judiciously. -// -// For hook functions that receive an error as an argument, no observations are -// made in the event of a non-nil error value. -// -// See the example for ExampleInstrumentRoundTripperDuration for example usage. -func InstrumentRoundTripperTrace(it *InstrumentTrace, next http.RoundTripper) RoundTripperFunc { - return RoundTripperFunc(func(r *http.Request) (*http.Response, error) { - start := time.Now() - - trace := &httptrace.ClientTrace{ - GotConn: func(_ httptrace.GotConnInfo) { - if it.GotConn != nil { - it.GotConn(time.Since(start).Seconds()) - } - }, - PutIdleConn: func(err error) { - if err != nil { - return - } - if it.PutIdleConn != nil { - it.PutIdleConn(time.Since(start).Seconds()) - } - }, - DNSStart: func(_ httptrace.DNSStartInfo) { - if it.DNSStart != nil { - it.DNSStart(time.Since(start).Seconds()) - } - }, - DNSDone: func(_ httptrace.DNSDoneInfo) { - if it.DNSDone != nil { - it.DNSDone(time.Since(start).Seconds()) - } - }, - ConnectStart: func(_, _ string) { - if it.ConnectStart != nil { - it.ConnectStart(time.Since(start).Seconds()) - } - }, - ConnectDone: func(_, _ string, err error) { - if err != nil { - return - } - if it.ConnectDone != nil { - it.ConnectDone(time.Since(start).Seconds()) - } - }, - GotFirstResponseByte: func() { - if it.GotFirstResponseByte != nil { - it.GotFirstResponseByte(time.Since(start).Seconds()) - } - }, - Got100Continue: func() { - if it.Got100Continue != nil { - it.Got100Continue(time.Since(start).Seconds()) - } - }, - TLSHandshakeStart: func() { - if it.TLSHandshakeStart != nil { - it.TLSHandshakeStart(time.Since(start).Seconds()) - } - }, - TLSHandshakeDone: func(_ tls.ConnectionState, err error) { - if err != nil { - return - } - if it.TLSHandshakeDone != nil { - it.TLSHandshakeDone(time.Since(start).Seconds()) - } - }, - WroteHeaders: func() { - if it.WroteHeaders != nil { - it.WroteHeaders(time.Since(start).Seconds()) - } - }, - Wait100Continue: func() { - if it.Wait100Continue != nil { - it.Wait100Continue(time.Since(start).Seconds()) - } - }, - WroteRequest: func(_ httptrace.WroteRequestInfo) { - if it.WroteRequest != nil { - it.WroteRequest(time.Since(start).Seconds()) - } - }, - } - r = r.WithContext(httptrace.WithClientTrace(context.Background(), trace)) - - return next.RoundTrip(r) - }) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go deleted file mode 100644 index 9db243805..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.go +++ /dev/null @@ -1,447 +0,0 @@ -// Copyright 2017 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package promhttp - -import ( - "errors" - "net/http" - "strconv" - "strings" - "time" - - dto "github.com/prometheus/client_model/go" - - "github.com/prometheus/client_golang/prometheus" -) - -// magicString is used for the hacky label test in checkLabels. Remove once fixed. -const magicString = "zZgWfBxLqvG8kc8IMv3POi2Bb0tZI3vAnBx+gBaFi9FyPzB/CzKUer1yufDa" - -// InstrumentHandlerInFlight is a middleware that wraps the provided -// http.Handler. It sets the provided prometheus.Gauge to the number of -// requests currently handled by the wrapped http.Handler. -// -// See the example for InstrumentHandlerDuration for example usage. -func InstrumentHandlerInFlight(g prometheus.Gauge, next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - g.Inc() - defer g.Dec() - next.ServeHTTP(w, r) - }) -} - -// InstrumentHandlerDuration is a middleware that wraps the provided -// http.Handler to observe the request duration with the provided ObserverVec. -// The ObserverVec must have zero, one, or two non-const non-curried labels. For -// those, the only allowed label names are "code" and "method". The function -// panics otherwise. The Observe method of the Observer in the ObserverVec is -// called with the request duration in seconds. Partitioning happens by HTTP -// status code and/or HTTP method if the respective instance label names are -// present in the ObserverVec. For unpartitioned observations, use an -// ObserverVec with zero labels. Note that partitioning of Histograms is -// expensive and should be used judiciously. -// -// If the wrapped Handler does not set a status code, a status code of 200 is assumed. -// -// If the wrapped Handler panics, no values are reported. -// -// Note that this method is only guaranteed to never observe negative durations -// if used with Go1.9+. -func InstrumentHandlerDuration(obs prometheus.ObserverVec, next http.Handler) http.HandlerFunc { - code, method := checkLabels(obs) - - if code { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - now := time.Now() - d := newDelegator(w, nil) - next.ServeHTTP(d, r) - - obs.With(labels(code, method, r.Method, d.Status())).Observe(time.Since(now).Seconds()) - }) - } - - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - now := time.Now() - next.ServeHTTP(w, r) - obs.With(labels(code, method, r.Method, 0)).Observe(time.Since(now).Seconds()) - }) -} - -// InstrumentHandlerCounter is a middleware that wraps the provided http.Handler -// to observe the request result with the provided CounterVec. The CounterVec -// must have zero, one, or two non-const non-curried labels. For those, the only -// allowed label names are "code" and "method". The function panics -// otherwise. Partitioning of the CounterVec happens by HTTP status code and/or -// HTTP method if the respective instance label names are present in the -// CounterVec. For unpartitioned counting, use a CounterVec with zero labels. -// -// If the wrapped Handler does not set a status code, a status code of 200 is assumed. -// -// If the wrapped Handler panics, the Counter is not incremented. -// -// See the example for InstrumentHandlerDuration for example usage. -func InstrumentHandlerCounter(counter *prometheus.CounterVec, next http.Handler) http.HandlerFunc { - code, method := checkLabels(counter) - - if code { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - d := newDelegator(w, nil) - next.ServeHTTP(d, r) - counter.With(labels(code, method, r.Method, d.Status())).Inc() - }) - } - - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - next.ServeHTTP(w, r) - counter.With(labels(code, method, r.Method, 0)).Inc() - }) -} - -// InstrumentHandlerTimeToWriteHeader is a middleware that wraps the provided -// http.Handler to observe with the provided ObserverVec the request duration -// until the response headers are written. The ObserverVec must have zero, one, -// or two non-const non-curried labels. For those, the only allowed label names -// are "code" and "method". The function panics otherwise. The Observe method of -// the Observer in the ObserverVec is called with the request duration in -// seconds. Partitioning happens by HTTP status code and/or HTTP method if the -// respective instance label names are present in the ObserverVec. For -// unpartitioned observations, use an ObserverVec with zero labels. Note that -// partitioning of Histograms is expensive and should be used judiciously. -// -// If the wrapped Handler panics before calling WriteHeader, no value is -// reported. -// -// Note that this method is only guaranteed to never observe negative durations -// if used with Go1.9+. -// -// See the example for InstrumentHandlerDuration for example usage. -func InstrumentHandlerTimeToWriteHeader(obs prometheus.ObserverVec, next http.Handler) http.HandlerFunc { - code, method := checkLabels(obs) - - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - now := time.Now() - d := newDelegator(w, func(status int) { - obs.With(labels(code, method, r.Method, status)).Observe(time.Since(now).Seconds()) - }) - next.ServeHTTP(d, r) - }) -} - -// InstrumentHandlerRequestSize is a middleware that wraps the provided -// http.Handler to observe the request size with the provided ObserverVec. The -// ObserverVec must have zero, one, or two non-const non-curried labels. For -// those, the only allowed label names are "code" and "method". The function -// panics otherwise. The Observe method of the Observer in the ObserverVec is -// called with the request size in bytes. Partitioning happens by HTTP status -// code and/or HTTP method if the respective instance label names are present in -// the ObserverVec. For unpartitioned observations, use an ObserverVec with zero -// labels. Note that partitioning of Histograms is expensive and should be used -// judiciously. -// -// If the wrapped Handler does not set a status code, a status code of 200 is assumed. -// -// If the wrapped Handler panics, no values are reported. -// -// See the example for InstrumentHandlerDuration for example usage. -func InstrumentHandlerRequestSize(obs prometheus.ObserverVec, next http.Handler) http.HandlerFunc { - code, method := checkLabels(obs) - - if code { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - d := newDelegator(w, nil) - next.ServeHTTP(d, r) - size := computeApproximateRequestSize(r) - obs.With(labels(code, method, r.Method, d.Status())).Observe(float64(size)) - }) - } - - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - next.ServeHTTP(w, r) - size := computeApproximateRequestSize(r) - obs.With(labels(code, method, r.Method, 0)).Observe(float64(size)) - }) -} - -// InstrumentHandlerResponseSize is a middleware that wraps the provided -// http.Handler to observe the response size with the provided ObserverVec. The -// ObserverVec must have zero, one, or two non-const non-curried labels. For -// those, the only allowed label names are "code" and "method". The function -// panics otherwise. The Observe method of the Observer in the ObserverVec is -// called with the response size in bytes. Partitioning happens by HTTP status -// code and/or HTTP method if the respective instance label names are present in -// the ObserverVec. For unpartitioned observations, use an ObserverVec with zero -// labels. Note that partitioning of Histograms is expensive and should be used -// judiciously. -// -// If the wrapped Handler does not set a status code, a status code of 200 is assumed. -// -// If the wrapped Handler panics, no values are reported. -// -// See the example for InstrumentHandlerDuration for example usage. -func InstrumentHandlerResponseSize(obs prometheus.ObserverVec, next http.Handler) http.Handler { - code, method := checkLabels(obs) - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - d := newDelegator(w, nil) - next.ServeHTTP(d, r) - obs.With(labels(code, method, r.Method, d.Status())).Observe(float64(d.Written())) - }) -} - -func checkLabels(c prometheus.Collector) (code bool, method bool) { - // TODO(beorn7): Remove this hacky way to check for instance labels - // once Descriptors can have their dimensionality queried. - var ( - desc *prometheus.Desc - m prometheus.Metric - pm dto.Metric - lvs []string - ) - - // Get the Desc from the Collector. - descc := make(chan *prometheus.Desc, 1) - c.Describe(descc) - - select { - case desc = <-descc: - default: - panic("no description provided by collector") - } - select { - case <-descc: - panic("more than one description provided by collector") - default: - } - - close(descc) - - // Create a ConstMetric with the Desc. Since we don't know how many - // variable labels there are, try for as long as it needs. - for err := errors.New("dummy"); err != nil; lvs = append(lvs, magicString) { - m, err = prometheus.NewConstMetric(desc, prometheus.UntypedValue, 0, lvs...) - } - - // Write out the metric into a proto message and look at the labels. - // If the value is not the magicString, it is a constLabel, which doesn't interest us. - // If the label is curried, it doesn't interest us. - // In all other cases, only "code" or "method" is allowed. - if err := m.Write(&pm); err != nil { - panic("error checking metric for labels") - } - for _, label := range pm.Label { - name, value := label.GetName(), label.GetValue() - if value != magicString || isLabelCurried(c, name) { - continue - } - switch name { - case "code": - code = true - case "method": - method = true - default: - panic("metric partitioned with non-supported labels") - } - } - return -} - -func isLabelCurried(c prometheus.Collector, label string) bool { - // This is even hackier than the label test above. - // We essentially try to curry again and see if it works. - // But for that, we need to type-convert to the two - // types we use here, ObserverVec or *CounterVec. - switch v := c.(type) { - case *prometheus.CounterVec: - if _, err := v.CurryWith(prometheus.Labels{label: "dummy"}); err == nil { - return false - } - case prometheus.ObserverVec: - if _, err := v.CurryWith(prometheus.Labels{label: "dummy"}); err == nil { - return false - } - default: - panic("unsupported metric vec type") - } - return true -} - -// emptyLabels is a one-time allocation for non-partitioned metrics to avoid -// unnecessary allocations on each request. -var emptyLabels = prometheus.Labels{} - -func labels(code, method bool, reqMethod string, status int) prometheus.Labels { - if !(code || method) { - return emptyLabels - } - labels := prometheus.Labels{} - - if code { - labels["code"] = sanitizeCode(status) - } - if method { - labels["method"] = sanitizeMethod(reqMethod) - } - - return labels -} - -func computeApproximateRequestSize(r *http.Request) int { - s := 0 - if r.URL != nil { - s += len(r.URL.String()) - } - - s += len(r.Method) - s += len(r.Proto) - for name, values := range r.Header { - s += len(name) - for _, value := range values { - s += len(value) - } - } - s += len(r.Host) - - // N.B. r.Form and r.MultipartForm are assumed to be included in r.URL. - - if r.ContentLength != -1 { - s += int(r.ContentLength) - } - return s -} - -func sanitizeMethod(m string) string { - switch m { - case "GET", "get": - return "get" - case "PUT", "put": - return "put" - case "HEAD", "head": - return "head" - case "POST", "post": - return "post" - case "DELETE", "delete": - return "delete" - case "CONNECT", "connect": - return "connect" - case "OPTIONS", "options": - return "options" - case "NOTIFY", "notify": - return "notify" - default: - return strings.ToLower(m) - } -} - -// If the wrapped http.Handler has not set a status code, i.e. the value is -// currently 0, santizeCode will return 200, for consistency with behavior in -// the stdlib. -func sanitizeCode(s int) string { - switch s { - case 100: - return "100" - case 101: - return "101" - - case 200, 0: - return "200" - case 201: - return "201" - case 202: - return "202" - case 203: - return "203" - case 204: - return "204" - case 205: - return "205" - case 206: - return "206" - - case 300: - return "300" - case 301: - return "301" - case 302: - return "302" - case 304: - return "304" - case 305: - return "305" - case 307: - return "307" - - case 400: - return "400" - case 401: - return "401" - case 402: - return "402" - case 403: - return "403" - case 404: - return "404" - case 405: - return "405" - case 406: - return "406" - case 407: - return "407" - case 408: - return "408" - case 409: - return "409" - case 410: - return "410" - case 411: - return "411" - case 412: - return "412" - case 413: - return "413" - case 414: - return "414" - case 415: - return "415" - case 416: - return "416" - case 417: - return "417" - case 418: - return "418" - - case 500: - return "500" - case 501: - return "501" - case 502: - return "502" - case 503: - return "503" - case 504: - return "504" - case 505: - return "505" - - case 428: - return "428" - case 429: - return "429" - case 431: - return "431" - case 511: - return "511" - - default: - return strconv.Itoa(s) - } -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/registry.go b/vendor/github.com/prometheus/client_golang/prometheus/registry.go deleted file mode 100644 index 2c0b90888..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/registry.go +++ /dev/null @@ -1,882 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "bytes" - "fmt" - "runtime" - "sort" - "strings" - "sync" - "unicode/utf8" - - "github.com/golang/protobuf/proto" - - dto "github.com/prometheus/client_model/go" - - "github.com/prometheus/client_golang/prometheus/internal" -) - -const ( - // Capacity for the channel to collect metrics and descriptors. - capMetricChan = 1000 - capDescChan = 10 -) - -// DefaultRegisterer and DefaultGatherer are the implementations of the -// Registerer and Gatherer interface a number of convenience functions in this -// package act on. Initially, both variables point to the same Registry, which -// has a process collector (currently on Linux only, see NewProcessCollector) -// and a Go collector (see NewGoCollector, in particular the note about -// stop-the-world implication with Go versions older than 1.9) already -// registered. This approach to keep default instances as global state mirrors -// the approach of other packages in the Go standard library. Note that there -// are caveats. Change the variables with caution and only if you understand the -// consequences. Users who want to avoid global state altogether should not use -// the convenience functions and act on custom instances instead. -var ( - defaultRegistry = NewRegistry() - DefaultRegisterer Registerer = defaultRegistry - DefaultGatherer Gatherer = defaultRegistry -) - -func init() { - MustRegister(NewProcessCollector(ProcessCollectorOpts{})) - MustRegister(NewGoCollector()) -} - -// NewRegistry creates a new vanilla Registry without any Collectors -// pre-registered. -func NewRegistry() *Registry { - return &Registry{ - collectorsByID: map[uint64]Collector{}, - descIDs: map[uint64]struct{}{}, - dimHashesByName: map[string]uint64{}, - } -} - -// NewPedanticRegistry returns a registry that checks during collection if each -// collected Metric is consistent with its reported Desc, and if the Desc has -// actually been registered with the registry. Unchecked Collectors (those whose -// Describe methed does not yield any descriptors) are excluded from the check. -// -// Usually, a Registry will be happy as long as the union of all collected -// Metrics is consistent and valid even if some metrics are not consistent with -// their own Desc or a Desc provided by their registered Collector. Well-behaved -// Collectors and Metrics will only provide consistent Descs. This Registry is -// useful to test the implementation of Collectors and Metrics. -func NewPedanticRegistry() *Registry { - r := NewRegistry() - r.pedanticChecksEnabled = true - return r -} - -// Registerer is the interface for the part of a registry in charge of -// registering and unregistering. Users of custom registries should use -// Registerer as type for registration purposes (rather than the Registry type -// directly). In that way, they are free to use custom Registerer implementation -// (e.g. for testing purposes). -type Registerer interface { - // Register registers a new Collector to be included in metrics - // collection. It returns an error if the descriptors provided by the - // Collector are invalid or if they — in combination with descriptors of - // already registered Collectors — do not fulfill the consistency and - // uniqueness criteria described in the documentation of metric.Desc. - // - // If the provided Collector is equal to a Collector already registered - // (which includes the case of re-registering the same Collector), the - // returned error is an instance of AlreadyRegisteredError, which - // contains the previously registered Collector. - // - // A Collector whose Describe method does not yield any Desc is treated - // as unchecked. Registration will always succeed. No check for - // re-registering (see previous paragraph) is performed. Thus, the - // caller is responsible for not double-registering the same unchecked - // Collector, and for providing a Collector that will not cause - // inconsistent metrics on collection. (This would lead to scrape - // errors.) - // - // It is in general not safe to register the same Collector multiple - // times concurrently. - Register(Collector) error - // MustRegister works like Register but registers any number of - // Collectors and panics upon the first registration that causes an - // error. - MustRegister(...Collector) - // Unregister unregisters the Collector that equals the Collector passed - // in as an argument. (Two Collectors are considered equal if their - // Describe method yields the same set of descriptors.) The function - // returns whether a Collector was unregistered. Note that an unchecked - // Collector cannot be unregistered (as its Describe method does not - // yield any descriptor). - // - // Note that even after unregistering, it will not be possible to - // register a new Collector that is inconsistent with the unregistered - // Collector, e.g. a Collector collecting metrics with the same name but - // a different help string. The rationale here is that the same registry - // instance must only collect consistent metrics throughout its - // lifetime. - Unregister(Collector) bool -} - -// Gatherer is the interface for the part of a registry in charge of gathering -// the collected metrics into a number of MetricFamilies. The Gatherer interface -// comes with the same general implication as described for the Registerer -// interface. -type Gatherer interface { - // Gather calls the Collect method of the registered Collectors and then - // gathers the collected metrics into a lexicographically sorted slice - // of uniquely named MetricFamily protobufs. Gather ensures that the - // returned slice is valid and self-consistent so that it can be used - // for valid exposition. As an exception to the strict consistency - // requirements described for metric.Desc, Gather will tolerate - // different sets of label names for metrics of the same metric family. - // - // Even if an error occurs, Gather attempts to gather as many metrics as - // possible. Hence, if a non-nil error is returned, the returned - // MetricFamily slice could be nil (in case of a fatal error that - // prevented any meaningful metric collection) or contain a number of - // MetricFamily protobufs, some of which might be incomplete, and some - // might be missing altogether. The returned error (which might be a - // MultiError) explains the details. Note that this is mostly useful for - // debugging purposes. If the gathered protobufs are to be used for - // exposition in actual monitoring, it is almost always better to not - // expose an incomplete result and instead disregard the returned - // MetricFamily protobufs in case the returned error is non-nil. - Gather() ([]*dto.MetricFamily, error) -} - -// Register registers the provided Collector with the DefaultRegisterer. -// -// Register is a shortcut for DefaultRegisterer.Register(c). See there for more -// details. -func Register(c Collector) error { - return DefaultRegisterer.Register(c) -} - -// MustRegister registers the provided Collectors with the DefaultRegisterer and -// panics if any error occurs. -// -// MustRegister is a shortcut for DefaultRegisterer.MustRegister(cs...). See -// there for more details. -func MustRegister(cs ...Collector) { - DefaultRegisterer.MustRegister(cs...) -} - -// Unregister removes the registration of the provided Collector from the -// DefaultRegisterer. -// -// Unregister is a shortcut for DefaultRegisterer.Unregister(c). See there for -// more details. -func Unregister(c Collector) bool { - return DefaultRegisterer.Unregister(c) -} - -// GathererFunc turns a function into a Gatherer. -type GathererFunc func() ([]*dto.MetricFamily, error) - -// Gather implements Gatherer. -func (gf GathererFunc) Gather() ([]*dto.MetricFamily, error) { - return gf() -} - -// AlreadyRegisteredError is returned by the Register method if the Collector to -// be registered has already been registered before, or a different Collector -// that collects the same metrics has been registered before. Registration fails -// in that case, but you can detect from the kind of error what has -// happened. The error contains fields for the existing Collector and the -// (rejected) new Collector that equals the existing one. This can be used to -// find out if an equal Collector has been registered before and switch over to -// using the old one, as demonstrated in the example. -type AlreadyRegisteredError struct { - ExistingCollector, NewCollector Collector -} - -func (err AlreadyRegisteredError) Error() string { - return "duplicate metrics collector registration attempted" -} - -// MultiError is a slice of errors implementing the error interface. It is used -// by a Gatherer to report multiple errors during MetricFamily gathering. -type MultiError []error - -func (errs MultiError) Error() string { - if len(errs) == 0 { - return "" - } - buf := &bytes.Buffer{} - fmt.Fprintf(buf, "%d error(s) occurred:", len(errs)) - for _, err := range errs { - fmt.Fprintf(buf, "\n* %s", err) - } - return buf.String() -} - -// Append appends the provided error if it is not nil. -func (errs *MultiError) Append(err error) { - if err != nil { - *errs = append(*errs, err) - } -} - -// MaybeUnwrap returns nil if len(errs) is 0. It returns the first and only -// contained error as error if len(errs is 1). In all other cases, it returns -// the MultiError directly. This is helpful for returning a MultiError in a way -// that only uses the MultiError if needed. -func (errs MultiError) MaybeUnwrap() error { - switch len(errs) { - case 0: - return nil - case 1: - return errs[0] - default: - return errs - } -} - -// Registry registers Prometheus collectors, collects their metrics, and gathers -// them into MetricFamilies for exposition. It implements both Registerer and -// Gatherer. The zero value is not usable. Create instances with NewRegistry or -// NewPedanticRegistry. -type Registry struct { - mtx sync.RWMutex - collectorsByID map[uint64]Collector // ID is a hash of the descIDs. - descIDs map[uint64]struct{} - dimHashesByName map[string]uint64 - uncheckedCollectors []Collector - pedanticChecksEnabled bool -} - -// Register implements Registerer. -func (r *Registry) Register(c Collector) error { - var ( - descChan = make(chan *Desc, capDescChan) - newDescIDs = map[uint64]struct{}{} - newDimHashesByName = map[string]uint64{} - collectorID uint64 // Just a sum of all desc IDs. - duplicateDescErr error - ) - go func() { - c.Describe(descChan) - close(descChan) - }() - r.mtx.Lock() - defer r.mtx.Unlock() - // Conduct various tests... - for desc := range descChan { - - // Is the descriptor valid at all? - if desc.err != nil { - return fmt.Errorf("descriptor %s is invalid: %s", desc, desc.err) - } - - // Is the descID unique? - // (In other words: Is the fqName + constLabel combination unique?) - if _, exists := r.descIDs[desc.id]; exists { - duplicateDescErr = fmt.Errorf("descriptor %s already exists with the same fully-qualified name and const label values", desc) - } - // If it is not a duplicate desc in this collector, add it to - // the collectorID. (We allow duplicate descs within the same - // collector, but their existence must be a no-op.) - if _, exists := newDescIDs[desc.id]; !exists { - newDescIDs[desc.id] = struct{}{} - collectorID += desc.id - } - - // Are all the label names and the help string consistent with - // previous descriptors of the same name? - // First check existing descriptors... - if dimHash, exists := r.dimHashesByName[desc.fqName]; exists { - if dimHash != desc.dimHash { - return fmt.Errorf("a previously registered descriptor with the same fully-qualified name as %s has different label names or a different help string", desc) - } - } else { - // ...then check the new descriptors already seen. - if dimHash, exists := newDimHashesByName[desc.fqName]; exists { - if dimHash != desc.dimHash { - return fmt.Errorf("descriptors reported by collector have inconsistent label names or help strings for the same fully-qualified name, offender is %s", desc) - } - } else { - newDimHashesByName[desc.fqName] = desc.dimHash - } - } - } - // A Collector yielding no Desc at all is considered unchecked. - if len(newDescIDs) == 0 { - r.uncheckedCollectors = append(r.uncheckedCollectors, c) - return nil - } - if existing, exists := r.collectorsByID[collectorID]; exists { - return AlreadyRegisteredError{ - ExistingCollector: existing, - NewCollector: c, - } - } - // If the collectorID is new, but at least one of the descs existed - // before, we are in trouble. - if duplicateDescErr != nil { - return duplicateDescErr - } - - // Only after all tests have passed, actually register. - r.collectorsByID[collectorID] = c - for hash := range newDescIDs { - r.descIDs[hash] = struct{}{} - } - for name, dimHash := range newDimHashesByName { - r.dimHashesByName[name] = dimHash - } - return nil -} - -// Unregister implements Registerer. -func (r *Registry) Unregister(c Collector) bool { - var ( - descChan = make(chan *Desc, capDescChan) - descIDs = map[uint64]struct{}{} - collectorID uint64 // Just a sum of the desc IDs. - ) - go func() { - c.Describe(descChan) - close(descChan) - }() - for desc := range descChan { - if _, exists := descIDs[desc.id]; !exists { - collectorID += desc.id - descIDs[desc.id] = struct{}{} - } - } - - r.mtx.RLock() - if _, exists := r.collectorsByID[collectorID]; !exists { - r.mtx.RUnlock() - return false - } - r.mtx.RUnlock() - - r.mtx.Lock() - defer r.mtx.Unlock() - - delete(r.collectorsByID, collectorID) - for id := range descIDs { - delete(r.descIDs, id) - } - // dimHashesByName is left untouched as those must be consistent - // throughout the lifetime of a program. - return true -} - -// MustRegister implements Registerer. -func (r *Registry) MustRegister(cs ...Collector) { - for _, c := range cs { - if err := r.Register(c); err != nil { - panic(err) - } - } -} - -// Gather implements Gatherer. -func (r *Registry) Gather() ([]*dto.MetricFamily, error) { - var ( - checkedMetricChan = make(chan Metric, capMetricChan) - uncheckedMetricChan = make(chan Metric, capMetricChan) - metricHashes = map[uint64]struct{}{} - wg sync.WaitGroup - errs MultiError // The collected errors to return in the end. - registeredDescIDs map[uint64]struct{} // Only used for pedantic checks - ) - - r.mtx.RLock() - goroutineBudget := len(r.collectorsByID) + len(r.uncheckedCollectors) - metricFamiliesByName := make(map[string]*dto.MetricFamily, len(r.dimHashesByName)) - checkedCollectors := make(chan Collector, len(r.collectorsByID)) - uncheckedCollectors := make(chan Collector, len(r.uncheckedCollectors)) - for _, collector := range r.collectorsByID { - checkedCollectors <- collector - } - for _, collector := range r.uncheckedCollectors { - uncheckedCollectors <- collector - } - // In case pedantic checks are enabled, we have to copy the map before - // giving up the RLock. - if r.pedanticChecksEnabled { - registeredDescIDs = make(map[uint64]struct{}, len(r.descIDs)) - for id := range r.descIDs { - registeredDescIDs[id] = struct{}{} - } - } - r.mtx.RUnlock() - - wg.Add(goroutineBudget) - - collectWorker := func() { - for { - select { - case collector := <-checkedCollectors: - collector.Collect(checkedMetricChan) - case collector := <-uncheckedCollectors: - collector.Collect(uncheckedMetricChan) - default: - return - } - wg.Done() - } - } - - // Start the first worker now to make sure at least one is running. - go collectWorker() - goroutineBudget-- - - // Close checkedMetricChan and uncheckedMetricChan once all collectors - // are collected. - go func() { - wg.Wait() - close(checkedMetricChan) - close(uncheckedMetricChan) - }() - - // Drain checkedMetricChan and uncheckedMetricChan in case of premature return. - defer func() { - if checkedMetricChan != nil { - for range checkedMetricChan { - } - } - if uncheckedMetricChan != nil { - for range uncheckedMetricChan { - } - } - }() - - // Copy the channel references so we can nil them out later to remove - // them from the select statements below. - cmc := checkedMetricChan - umc := uncheckedMetricChan - - for { - select { - case metric, ok := <-cmc: - if !ok { - cmc = nil - break - } - errs.Append(processMetric( - metric, metricFamiliesByName, - metricHashes, - registeredDescIDs, - )) - case metric, ok := <-umc: - if !ok { - umc = nil - break - } - errs.Append(processMetric( - metric, metricFamiliesByName, - metricHashes, - nil, - )) - default: - if goroutineBudget <= 0 || len(checkedCollectors)+len(uncheckedCollectors) == 0 { - // All collectors are already being worked on or - // we have already as many goroutines started as - // there are collectors. Do the same as above, - // just without the default. - select { - case metric, ok := <-cmc: - if !ok { - cmc = nil - break - } - errs.Append(processMetric( - metric, metricFamiliesByName, - metricHashes, - registeredDescIDs, - )) - case metric, ok := <-umc: - if !ok { - umc = nil - break - } - errs.Append(processMetric( - metric, metricFamiliesByName, - metricHashes, - nil, - )) - } - break - } - // Start more workers. - go collectWorker() - goroutineBudget-- - runtime.Gosched() - } - // Once both checkedMetricChan and uncheckdMetricChan are closed - // and drained, the contraption above will nil out cmc and umc, - // and then we can leave the collect loop here. - if cmc == nil && umc == nil { - break - } - } - return internal.NormalizeMetricFamilies(metricFamiliesByName), errs.MaybeUnwrap() -} - -// processMetric is an internal helper method only used by the Gather method. -func processMetric( - metric Metric, - metricFamiliesByName map[string]*dto.MetricFamily, - metricHashes map[uint64]struct{}, - registeredDescIDs map[uint64]struct{}, -) error { - desc := metric.Desc() - // Wrapped metrics collected by an unchecked Collector can have an - // invalid Desc. - if desc.err != nil { - return desc.err - } - dtoMetric := &dto.Metric{} - if err := metric.Write(dtoMetric); err != nil { - return fmt.Errorf("error collecting metric %v: %s", desc, err) - } - metricFamily, ok := metricFamiliesByName[desc.fqName] - if ok { // Existing name. - if metricFamily.GetHelp() != desc.help { - return fmt.Errorf( - "collected metric %s %s has help %q but should have %q", - desc.fqName, dtoMetric, desc.help, metricFamily.GetHelp(), - ) - } - // TODO(beorn7): Simplify switch once Desc has type. - switch metricFamily.GetType() { - case dto.MetricType_COUNTER: - if dtoMetric.Counter == nil { - return fmt.Errorf( - "collected metric %s %s should be a Counter", - desc.fqName, dtoMetric, - ) - } - case dto.MetricType_GAUGE: - if dtoMetric.Gauge == nil { - return fmt.Errorf( - "collected metric %s %s should be a Gauge", - desc.fqName, dtoMetric, - ) - } - case dto.MetricType_SUMMARY: - if dtoMetric.Summary == nil { - return fmt.Errorf( - "collected metric %s %s should be a Summary", - desc.fqName, dtoMetric, - ) - } - case dto.MetricType_UNTYPED: - if dtoMetric.Untyped == nil { - return fmt.Errorf( - "collected metric %s %s should be Untyped", - desc.fqName, dtoMetric, - ) - } - case dto.MetricType_HISTOGRAM: - if dtoMetric.Histogram == nil { - return fmt.Errorf( - "collected metric %s %s should be a Histogram", - desc.fqName, dtoMetric, - ) - } - default: - panic("encountered MetricFamily with invalid type") - } - } else { // New name. - metricFamily = &dto.MetricFamily{} - metricFamily.Name = proto.String(desc.fqName) - metricFamily.Help = proto.String(desc.help) - // TODO(beorn7): Simplify switch once Desc has type. - switch { - case dtoMetric.Gauge != nil: - metricFamily.Type = dto.MetricType_GAUGE.Enum() - case dtoMetric.Counter != nil: - metricFamily.Type = dto.MetricType_COUNTER.Enum() - case dtoMetric.Summary != nil: - metricFamily.Type = dto.MetricType_SUMMARY.Enum() - case dtoMetric.Untyped != nil: - metricFamily.Type = dto.MetricType_UNTYPED.Enum() - case dtoMetric.Histogram != nil: - metricFamily.Type = dto.MetricType_HISTOGRAM.Enum() - default: - return fmt.Errorf("empty metric collected: %s", dtoMetric) - } - if err := checkSuffixCollisions(metricFamily, metricFamiliesByName); err != nil { - return err - } - metricFamiliesByName[desc.fqName] = metricFamily - } - if err := checkMetricConsistency(metricFamily, dtoMetric, metricHashes); err != nil { - return err - } - if registeredDescIDs != nil { - // Is the desc registered at all? - if _, exist := registeredDescIDs[desc.id]; !exist { - return fmt.Errorf( - "collected metric %s %s with unregistered descriptor %s", - metricFamily.GetName(), dtoMetric, desc, - ) - } - if err := checkDescConsistency(metricFamily, dtoMetric, desc); err != nil { - return err - } - } - metricFamily.Metric = append(metricFamily.Metric, dtoMetric) - return nil -} - -// Gatherers is a slice of Gatherer instances that implements the Gatherer -// interface itself. Its Gather method calls Gather on all Gatherers in the -// slice in order and returns the merged results. Errors returned from the -// Gather calles are all returned in a flattened MultiError. Duplicate and -// inconsistent Metrics are skipped (first occurrence in slice order wins) and -// reported in the returned error. -// -// Gatherers can be used to merge the Gather results from multiple -// Registries. It also provides a way to directly inject existing MetricFamily -// protobufs into the gathering by creating a custom Gatherer with a Gather -// method that simply returns the existing MetricFamily protobufs. Note that no -// registration is involved (in contrast to Collector registration), so -// obviously registration-time checks cannot happen. Any inconsistencies between -// the gathered MetricFamilies are reported as errors by the Gather method, and -// inconsistent Metrics are dropped. Invalid parts of the MetricFamilies -// (e.g. syntactically invalid metric or label names) will go undetected. -type Gatherers []Gatherer - -// Gather implements Gatherer. -func (gs Gatherers) Gather() ([]*dto.MetricFamily, error) { - var ( - metricFamiliesByName = map[string]*dto.MetricFamily{} - metricHashes = map[uint64]struct{}{} - errs MultiError // The collected errors to return in the end. - ) - - for i, g := range gs { - mfs, err := g.Gather() - if err != nil { - if multiErr, ok := err.(MultiError); ok { - for _, err := range multiErr { - errs = append(errs, fmt.Errorf("[from Gatherer #%d] %s", i+1, err)) - } - } else { - errs = append(errs, fmt.Errorf("[from Gatherer #%d] %s", i+1, err)) - } - } - for _, mf := range mfs { - existingMF, exists := metricFamiliesByName[mf.GetName()] - if exists { - if existingMF.GetHelp() != mf.GetHelp() { - errs = append(errs, fmt.Errorf( - "gathered metric family %s has help %q but should have %q", - mf.GetName(), mf.GetHelp(), existingMF.GetHelp(), - )) - continue - } - if existingMF.GetType() != mf.GetType() { - errs = append(errs, fmt.Errorf( - "gathered metric family %s has type %s but should have %s", - mf.GetName(), mf.GetType(), existingMF.GetType(), - )) - continue - } - } else { - existingMF = &dto.MetricFamily{} - existingMF.Name = mf.Name - existingMF.Help = mf.Help - existingMF.Type = mf.Type - if err := checkSuffixCollisions(existingMF, metricFamiliesByName); err != nil { - errs = append(errs, err) - continue - } - metricFamiliesByName[mf.GetName()] = existingMF - } - for _, m := range mf.Metric { - if err := checkMetricConsistency(existingMF, m, metricHashes); err != nil { - errs = append(errs, err) - continue - } - existingMF.Metric = append(existingMF.Metric, m) - } - } - } - return internal.NormalizeMetricFamilies(metricFamiliesByName), errs.MaybeUnwrap() -} - -// checkSuffixCollisions checks for collisions with the “magic” suffixes the -// Prometheus text format and the internal metric representation of the -// Prometheus server add while flattening Summaries and Histograms. -func checkSuffixCollisions(mf *dto.MetricFamily, mfs map[string]*dto.MetricFamily) error { - var ( - newName = mf.GetName() - newType = mf.GetType() - newNameWithoutSuffix = "" - ) - switch { - case strings.HasSuffix(newName, "_count"): - newNameWithoutSuffix = newName[:len(newName)-6] - case strings.HasSuffix(newName, "_sum"): - newNameWithoutSuffix = newName[:len(newName)-4] - case strings.HasSuffix(newName, "_bucket"): - newNameWithoutSuffix = newName[:len(newName)-7] - } - if newNameWithoutSuffix != "" { - if existingMF, ok := mfs[newNameWithoutSuffix]; ok { - switch existingMF.GetType() { - case dto.MetricType_SUMMARY: - if !strings.HasSuffix(newName, "_bucket") { - return fmt.Errorf( - "collected metric named %q collides with previously collected summary named %q", - newName, newNameWithoutSuffix, - ) - } - case dto.MetricType_HISTOGRAM: - return fmt.Errorf( - "collected metric named %q collides with previously collected histogram named %q", - newName, newNameWithoutSuffix, - ) - } - } - } - if newType == dto.MetricType_SUMMARY || newType == dto.MetricType_HISTOGRAM { - if _, ok := mfs[newName+"_count"]; ok { - return fmt.Errorf( - "collected histogram or summary named %q collides with previously collected metric named %q", - newName, newName+"_count", - ) - } - if _, ok := mfs[newName+"_sum"]; ok { - return fmt.Errorf( - "collected histogram or summary named %q collides with previously collected metric named %q", - newName, newName+"_sum", - ) - } - } - if newType == dto.MetricType_HISTOGRAM { - if _, ok := mfs[newName+"_bucket"]; ok { - return fmt.Errorf( - "collected histogram named %q collides with previously collected metric named %q", - newName, newName+"_bucket", - ) - } - } - return nil -} - -// checkMetricConsistency checks if the provided Metric is consistent with the -// provided MetricFamily. It also hashes the Metric labels and the MetricFamily -// name. If the resulting hash is already in the provided metricHashes, an error -// is returned. If not, it is added to metricHashes. -func checkMetricConsistency( - metricFamily *dto.MetricFamily, - dtoMetric *dto.Metric, - metricHashes map[uint64]struct{}, -) error { - // Type consistency with metric family. - if metricFamily.GetType() == dto.MetricType_GAUGE && dtoMetric.Gauge == nil || - metricFamily.GetType() == dto.MetricType_COUNTER && dtoMetric.Counter == nil || - metricFamily.GetType() == dto.MetricType_SUMMARY && dtoMetric.Summary == nil || - metricFamily.GetType() == dto.MetricType_HISTOGRAM && dtoMetric.Histogram == nil || - metricFamily.GetType() == dto.MetricType_UNTYPED && dtoMetric.Untyped == nil { - return fmt.Errorf( - "collected metric %q { %s} is not a %s", - metricFamily.GetName(), dtoMetric, metricFamily.GetType(), - ) - } - - for _, labelPair := range dtoMetric.GetLabel() { - if !checkLabelName(labelPair.GetName()) { - return fmt.Errorf( - "collected metric %q { %s} has a label with an invalid name: %s", - metricFamily.GetName(), dtoMetric, labelPair.GetName(), - ) - } - if dtoMetric.Summary != nil && labelPair.GetName() == quantileLabel { - return fmt.Errorf( - "collected metric %q { %s} must not have an explicit %q label", - metricFamily.GetName(), dtoMetric, quantileLabel, - ) - } - if !utf8.ValidString(labelPair.GetValue()) { - return fmt.Errorf( - "collected metric %q { %s} has a label named %q whose value is not utf8: %#v", - metricFamily.GetName(), dtoMetric, labelPair.GetName(), labelPair.GetValue()) - } - } - - // Is the metric unique (i.e. no other metric with the same name and the same labels)? - h := hashNew() - h = hashAdd(h, metricFamily.GetName()) - h = hashAddByte(h, separatorByte) - // Make sure label pairs are sorted. We depend on it for the consistency - // check. - sort.Sort(labelPairSorter(dtoMetric.Label)) - for _, lp := range dtoMetric.Label { - h = hashAdd(h, lp.GetName()) - h = hashAddByte(h, separatorByte) - h = hashAdd(h, lp.GetValue()) - h = hashAddByte(h, separatorByte) - } - if _, exists := metricHashes[h]; exists { - return fmt.Errorf( - "collected metric %q { %s} was collected before with the same name and label values", - metricFamily.GetName(), dtoMetric, - ) - } - metricHashes[h] = struct{}{} - return nil -} - -func checkDescConsistency( - metricFamily *dto.MetricFamily, - dtoMetric *dto.Metric, - desc *Desc, -) error { - // Desc help consistency with metric family help. - if metricFamily.GetHelp() != desc.help { - return fmt.Errorf( - "collected metric %s %s has help %q but should have %q", - metricFamily.GetName(), dtoMetric, metricFamily.GetHelp(), desc.help, - ) - } - - // Is the desc consistent with the content of the metric? - lpsFromDesc := make([]*dto.LabelPair, 0, len(dtoMetric.Label)) - lpsFromDesc = append(lpsFromDesc, desc.constLabelPairs...) - for _, l := range desc.variableLabels { - lpsFromDesc = append(lpsFromDesc, &dto.LabelPair{ - Name: proto.String(l), - }) - } - if len(lpsFromDesc) != len(dtoMetric.Label) { - return fmt.Errorf( - "labels in collected metric %s %s are inconsistent with descriptor %s", - metricFamily.GetName(), dtoMetric, desc, - ) - } - sort.Sort(labelPairSorter(lpsFromDesc)) - for i, lpFromDesc := range lpsFromDesc { - lpFromMetric := dtoMetric.Label[i] - if lpFromDesc.GetName() != lpFromMetric.GetName() || - lpFromDesc.Value != nil && lpFromDesc.GetValue() != lpFromMetric.GetValue() { - return fmt.Errorf( - "labels in collected metric %s %s are inconsistent with descriptor %s", - metricFamily.GetName(), dtoMetric, desc, - ) - } - } - return nil -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/summary.go b/vendor/github.com/prometheus/client_golang/prometheus/summary.go deleted file mode 100644 index 38ee98c32..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/summary.go +++ /dev/null @@ -1,623 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "fmt" - "math" - "sort" - "sync" - "time" - - "github.com/beorn7/perks/quantile" - "github.com/golang/protobuf/proto" - - dto "github.com/prometheus/client_model/go" -) - -// quantileLabel is used for the label that defines the quantile in a -// summary. -const quantileLabel = "quantile" - -// A Summary captures individual observations from an event or sample stream and -// summarizes them in a manner similar to traditional summary statistics: 1. sum -// of observations, 2. observation count, 3. rank estimations. -// -// A typical use-case is the observation of request latencies. By default, a -// Summary provides the median, the 90th and the 99th percentile of the latency -// as rank estimations. However, the default behavior will change in the -// upcoming v0.10 of the library. There will be no rank estimations at all by -// default. For a sane transition, it is recommended to set the desired rank -// estimations explicitly. -// -// Note that the rank estimations cannot be aggregated in a meaningful way with -// the Prometheus query language (i.e. you cannot average or add them). If you -// need aggregatable quantiles (e.g. you want the 99th percentile latency of all -// queries served across all instances of a service), consider the Histogram -// metric type. See the Prometheus documentation for more details. -// -// To create Summary instances, use NewSummary. -type Summary interface { - Metric - Collector - - // Observe adds a single observation to the summary. - Observe(float64) -} - -// DefObjectives are the default Summary quantile values. -// -// Deprecated: DefObjectives will not be used as the default objectives in -// v0.10 of the library. The default Summary will have no quantiles then. -var ( - DefObjectives = map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001} - - errQuantileLabelNotAllowed = fmt.Errorf( - "%q is not allowed as label name in summaries", quantileLabel, - ) -) - -// Default values for SummaryOpts. -const ( - // DefMaxAge is the default duration for which observations stay - // relevant. - DefMaxAge time.Duration = 10 * time.Minute - // DefAgeBuckets is the default number of buckets used to calculate the - // age of observations. - DefAgeBuckets = 5 - // DefBufCap is the standard buffer size for collecting Summary observations. - DefBufCap = 500 -) - -// SummaryOpts bundles the options for creating a Summary metric. It is -// mandatory to set Name and Help to a non-empty string. While all other fields -// are optional and can safely be left at their zero value, it is recommended to -// explicitly set the Objectives field to the desired value as the default value -// will change in the upcoming v0.10 of the library. -type SummaryOpts struct { - // Namespace, Subsystem, and Name are components of the fully-qualified - // name of the Summary (created by joining these components with - // "_"). Only Name is mandatory, the others merely help structuring the - // name. Note that the fully-qualified name of the Summary must be a - // valid Prometheus metric name. - Namespace string - Subsystem string - Name string - - // Help provides information about this Summary. Mandatory! - // - // Metrics with the same fully-qualified name must have the same Help - // string. - Help string - - // ConstLabels are used to attach fixed labels to this metric. Metrics - // with the same fully-qualified name must have the same label names in - // their ConstLabels. - // - // Due to the way a Summary is represented in the Prometheus text format - // and how it is handled by the Prometheus server internally, “quantile” - // is an illegal label name. Construction of a Summary or SummaryVec - // will panic if this label name is used in ConstLabels. - // - // ConstLabels are only used rarely. In particular, do not use them to - // attach the same labels to all your metrics. Those use cases are - // better covered by target labels set by the scraping Prometheus - // server, or by one specific metric (e.g. a build_info or a - // machine_role metric). See also - // https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels,-not-static-scraped-labels - ConstLabels Labels - - // Objectives defines the quantile rank estimates with their respective - // absolute error. If Objectives[q] = e, then the value reported for q - // will be the φ-quantile value for some φ between q-e and q+e. The - // default value is DefObjectives. It is used if Objectives is left at - // its zero value (i.e. nil). To create a Summary without Objectives, - // set it to an empty map (i.e. map[float64]float64{}). - // - // Deprecated: Note that the current value of DefObjectives is - // deprecated. It will be replaced by an empty map in v0.10 of the - // library. Please explicitly set Objectives to the desired value. - Objectives map[float64]float64 - - // MaxAge defines the duration for which an observation stays relevant - // for the summary. Must be positive. The default value is DefMaxAge. - MaxAge time.Duration - - // AgeBuckets is the number of buckets used to exclude observations that - // are older than MaxAge from the summary. A higher number has a - // resource penalty, so only increase it if the higher resolution is - // really required. For very high observation rates, you might want to - // reduce the number of age buckets. With only one age bucket, you will - // effectively see a complete reset of the summary each time MaxAge has - // passed. The default value is DefAgeBuckets. - AgeBuckets uint32 - - // BufCap defines the default sample stream buffer size. The default - // value of DefBufCap should suffice for most uses. If there is a need - // to increase the value, a multiple of 500 is recommended (because that - // is the internal buffer size of the underlying package - // "github.com/bmizerany/perks/quantile"). - BufCap uint32 -} - -// Great fuck-up with the sliding-window decay algorithm... The Merge method of -// perk/quantile is actually not working as advertised - and it might be -// unfixable, as the underlying algorithm is apparently not capable of merging -// summaries in the first place. To avoid using Merge, we are currently adding -// observations to _each_ age bucket, i.e. the effort to add a sample is -// essentially multiplied by the number of age buckets. When rotating age -// buckets, we empty the previous head stream. On scrape time, we simply take -// the quantiles from the head stream (no merging required). Result: More effort -// on observation time, less effort on scrape time, which is exactly the -// opposite of what we try to accomplish, but at least the results are correct. -// -// The quite elegant previous contraption to merge the age buckets efficiently -// on scrape time (see code up commit 6b9530d72ea715f0ba612c0120e6e09fbf1d49d0) -// can't be used anymore. - -// NewSummary creates a new Summary based on the provided SummaryOpts. -func NewSummary(opts SummaryOpts) Summary { - return newSummary( - NewDesc( - BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), - opts.Help, - nil, - opts.ConstLabels, - ), - opts, - ) -} - -func newSummary(desc *Desc, opts SummaryOpts, labelValues ...string) Summary { - if len(desc.variableLabels) != len(labelValues) { - panic(errInconsistentCardinality) - } - - for _, n := range desc.variableLabels { - if n == quantileLabel { - panic(errQuantileLabelNotAllowed) - } - } - for _, lp := range desc.constLabelPairs { - if lp.GetName() == quantileLabel { - panic(errQuantileLabelNotAllowed) - } - } - - if opts.Objectives == nil { - opts.Objectives = DefObjectives - } - - if opts.MaxAge < 0 { - panic(fmt.Errorf("illegal max age MaxAge=%v", opts.MaxAge)) - } - if opts.MaxAge == 0 { - opts.MaxAge = DefMaxAge - } - - if opts.AgeBuckets == 0 { - opts.AgeBuckets = DefAgeBuckets - } - - if opts.BufCap == 0 { - opts.BufCap = DefBufCap - } - - s := &summary{ - desc: desc, - - objectives: opts.Objectives, - sortedObjectives: make([]float64, 0, len(opts.Objectives)), - - labelPairs: makeLabelPairs(desc, labelValues), - - hotBuf: make([]float64, 0, opts.BufCap), - coldBuf: make([]float64, 0, opts.BufCap), - streamDuration: opts.MaxAge / time.Duration(opts.AgeBuckets), - } - s.headStreamExpTime = time.Now().Add(s.streamDuration) - s.hotBufExpTime = s.headStreamExpTime - - for i := uint32(0); i < opts.AgeBuckets; i++ { - s.streams = append(s.streams, s.newStream()) - } - s.headStream = s.streams[0] - - for qu := range s.objectives { - s.sortedObjectives = append(s.sortedObjectives, qu) - } - sort.Float64s(s.sortedObjectives) - - s.init(s) // Init self-collection. - return s -} - -type summary struct { - selfCollector - - bufMtx sync.Mutex // Protects hotBuf and hotBufExpTime. - mtx sync.Mutex // Protects every other moving part. - // Lock bufMtx before mtx if both are needed. - - desc *Desc - - objectives map[float64]float64 - sortedObjectives []float64 - - labelPairs []*dto.LabelPair - - sum float64 - cnt uint64 - - hotBuf, coldBuf []float64 - - streams []*quantile.Stream - streamDuration time.Duration - headStream *quantile.Stream - headStreamIdx int - headStreamExpTime, hotBufExpTime time.Time -} - -func (s *summary) Desc() *Desc { - return s.desc -} - -func (s *summary) Observe(v float64) { - s.bufMtx.Lock() - defer s.bufMtx.Unlock() - - now := time.Now() - if now.After(s.hotBufExpTime) { - s.asyncFlush(now) - } - s.hotBuf = append(s.hotBuf, v) - if len(s.hotBuf) == cap(s.hotBuf) { - s.asyncFlush(now) - } -} - -func (s *summary) Write(out *dto.Metric) error { - sum := &dto.Summary{} - qs := make([]*dto.Quantile, 0, len(s.objectives)) - - s.bufMtx.Lock() - s.mtx.Lock() - // Swap bufs even if hotBuf is empty to set new hotBufExpTime. - s.swapBufs(time.Now()) - s.bufMtx.Unlock() - - s.flushColdBuf() - sum.SampleCount = proto.Uint64(s.cnt) - sum.SampleSum = proto.Float64(s.sum) - - for _, rank := range s.sortedObjectives { - var q float64 - if s.headStream.Count() == 0 { - q = math.NaN() - } else { - q = s.headStream.Query(rank) - } - qs = append(qs, &dto.Quantile{ - Quantile: proto.Float64(rank), - Value: proto.Float64(q), - }) - } - - s.mtx.Unlock() - - if len(qs) > 0 { - sort.Sort(quantSort(qs)) - } - sum.Quantile = qs - - out.Summary = sum - out.Label = s.labelPairs - return nil -} - -func (s *summary) newStream() *quantile.Stream { - return quantile.NewTargeted(s.objectives) -} - -// asyncFlush needs bufMtx locked. -func (s *summary) asyncFlush(now time.Time) { - s.mtx.Lock() - s.swapBufs(now) - - // Unblock the original goroutine that was responsible for the mutation - // that triggered the compaction. But hold onto the global non-buffer - // state mutex until the operation finishes. - go func() { - s.flushColdBuf() - s.mtx.Unlock() - }() -} - -// rotateStreams needs mtx AND bufMtx locked. -func (s *summary) maybeRotateStreams() { - for !s.hotBufExpTime.Equal(s.headStreamExpTime) { - s.headStream.Reset() - s.headStreamIdx++ - if s.headStreamIdx >= len(s.streams) { - s.headStreamIdx = 0 - } - s.headStream = s.streams[s.headStreamIdx] - s.headStreamExpTime = s.headStreamExpTime.Add(s.streamDuration) - } -} - -// flushColdBuf needs mtx locked. -func (s *summary) flushColdBuf() { - for _, v := range s.coldBuf { - for _, stream := range s.streams { - stream.Insert(v) - } - s.cnt++ - s.sum += v - } - s.coldBuf = s.coldBuf[0:0] - s.maybeRotateStreams() -} - -// swapBufs needs mtx AND bufMtx locked, coldBuf must be empty. -func (s *summary) swapBufs(now time.Time) { - if len(s.coldBuf) != 0 { - panic("coldBuf is not empty") - } - s.hotBuf, s.coldBuf = s.coldBuf, s.hotBuf - // hotBuf is now empty and gets new expiration set. - for now.After(s.hotBufExpTime) { - s.hotBufExpTime = s.hotBufExpTime.Add(s.streamDuration) - } -} - -type quantSort []*dto.Quantile - -func (s quantSort) Len() int { - return len(s) -} - -func (s quantSort) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} - -func (s quantSort) Less(i, j int) bool { - return s[i].GetQuantile() < s[j].GetQuantile() -} - -// SummaryVec is a Collector that bundles a set of Summaries that all share the -// same Desc, but have different values for their variable labels. This is used -// if you want to count the same thing partitioned by various dimensions -// (e.g. HTTP request latencies, partitioned by status code and method). Create -// instances with NewSummaryVec. -type SummaryVec struct { - *metricVec -} - -// NewSummaryVec creates a new SummaryVec based on the provided SummaryOpts and -// partitioned by the given label names. -// -// Due to the way a Summary is represented in the Prometheus text format and how -// it is handled by the Prometheus server internally, “quantile” is an illegal -// label name. NewSummaryVec will panic if this label name is used. -func NewSummaryVec(opts SummaryOpts, labelNames []string) *SummaryVec { - for _, ln := range labelNames { - if ln == quantileLabel { - panic(errQuantileLabelNotAllowed) - } - } - desc := NewDesc( - BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), - opts.Help, - labelNames, - opts.ConstLabels, - ) - return &SummaryVec{ - metricVec: newMetricVec(desc, func(lvs ...string) Metric { - return newSummary(desc, opts, lvs...) - }), - } -} - -// GetMetricWithLabelValues returns the Summary for the given slice of label -// values (same order as the VariableLabels in Desc). If that combination of -// label values is accessed for the first time, a new Summary is created. -// -// It is possible to call this method without using the returned Summary to only -// create the new Summary but leave it at its starting value, a Summary without -// any observations. -// -// Keeping the Summary for later use is possible (and should be considered if -// performance is critical), but keep in mind that Reset, DeleteLabelValues and -// Delete can be used to delete the Summary from the SummaryVec. In that case, -// the Summary will still exist, but it will not be exported anymore, even if a -// Summary with the same label values is created later. See also the CounterVec -// example. -// -// An error is returned if the number of label values is not the same as the -// number of VariableLabels in Desc (minus any curried labels). -// -// Note that for more than one label value, this method is prone to mistakes -// caused by an incorrect order of arguments. Consider GetMetricWith(Labels) as -// an alternative to avoid that type of mistake. For higher label numbers, the -// latter has a much more readable (albeit more verbose) syntax, but it comes -// with a performance overhead (for creating and processing the Labels map). -// See also the GaugeVec example. -func (v *SummaryVec) GetMetricWithLabelValues(lvs ...string) (Observer, error) { - metric, err := v.metricVec.getMetricWithLabelValues(lvs...) - if metric != nil { - return metric.(Observer), err - } - return nil, err -} - -// GetMetricWith returns the Summary for the given Labels map (the label names -// must match those of the VariableLabels in Desc). If that label map is -// accessed for the first time, a new Summary is created. Implications of -// creating a Summary without using it and keeping the Summary for later use are -// the same as for GetMetricWithLabelValues. -// -// An error is returned if the number and names of the Labels are inconsistent -// with those of the VariableLabels in Desc (minus any curried labels). -// -// This method is used for the same purpose as -// GetMetricWithLabelValues(...string). See there for pros and cons of the two -// methods. -func (v *SummaryVec) GetMetricWith(labels Labels) (Observer, error) { - metric, err := v.metricVec.getMetricWith(labels) - if metric != nil { - return metric.(Observer), err - } - return nil, err -} - -// WithLabelValues works as GetMetricWithLabelValues, but panics where -// GetMetricWithLabelValues would have returned an error. Not returning an -// error allows shortcuts like -// myVec.WithLabelValues("404", "GET").Observe(42.21) -func (v *SummaryVec) WithLabelValues(lvs ...string) Observer { - s, err := v.GetMetricWithLabelValues(lvs...) - if err != nil { - panic(err) - } - return s -} - -// With works as GetMetricWith, but panics where GetMetricWithLabels would have -// returned an error. Not returning an error allows shortcuts like -// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Observe(42.21) -func (v *SummaryVec) With(labels Labels) Observer { - s, err := v.GetMetricWith(labels) - if err != nil { - panic(err) - } - return s -} - -// CurryWith returns a vector curried with the provided labels, i.e. the -// returned vector has those labels pre-set for all labeled operations performed -// on it. The cardinality of the curried vector is reduced accordingly. The -// order of the remaining labels stays the same (just with the curried labels -// taken out of the sequence – which is relevant for the -// (GetMetric)WithLabelValues methods). It is possible to curry a curried -// vector, but only with labels not yet used for currying before. -// -// The metrics contained in the SummaryVec are shared between the curried and -// uncurried vectors. They are just accessed differently. Curried and uncurried -// vectors behave identically in terms of collection. Only one must be -// registered with a given registry (usually the uncurried version). The Reset -// method deletes all metrics, even if called on a curried vector. -func (v *SummaryVec) CurryWith(labels Labels) (ObserverVec, error) { - vec, err := v.curryWith(labels) - if vec != nil { - return &SummaryVec{vec}, err - } - return nil, err -} - -// MustCurryWith works as CurryWith but panics where CurryWith would have -// returned an error. -func (v *SummaryVec) MustCurryWith(labels Labels) ObserverVec { - vec, err := v.CurryWith(labels) - if err != nil { - panic(err) - } - return vec -} - -type constSummary struct { - desc *Desc - count uint64 - sum float64 - quantiles map[float64]float64 - labelPairs []*dto.LabelPair -} - -func (s *constSummary) Desc() *Desc { - return s.desc -} - -func (s *constSummary) Write(out *dto.Metric) error { - sum := &dto.Summary{} - qs := make([]*dto.Quantile, 0, len(s.quantiles)) - - sum.SampleCount = proto.Uint64(s.count) - sum.SampleSum = proto.Float64(s.sum) - - for rank, q := range s.quantiles { - qs = append(qs, &dto.Quantile{ - Quantile: proto.Float64(rank), - Value: proto.Float64(q), - }) - } - - if len(qs) > 0 { - sort.Sort(quantSort(qs)) - } - sum.Quantile = qs - - out.Summary = sum - out.Label = s.labelPairs - - return nil -} - -// NewConstSummary returns a metric representing a Prometheus summary with fixed -// values for the count, sum, and quantiles. As those parameters cannot be -// changed, the returned value does not implement the Summary interface (but -// only the Metric interface). Users of this package will not have much use for -// it in regular operations. However, when implementing custom Collectors, it is -// useful as a throw-away metric that is generated on the fly to send it to -// Prometheus in the Collect method. -// -// quantiles maps ranks to quantile values. For example, a median latency of -// 0.23s and a 99th percentile latency of 0.56s would be expressed as: -// map[float64]float64{0.5: 0.23, 0.99: 0.56} -// -// NewConstSummary returns an error if the length of labelValues is not -// consistent with the variable labels in Desc. -func NewConstSummary( - desc *Desc, - count uint64, - sum float64, - quantiles map[float64]float64, - labelValues ...string, -) (Metric, error) { - if err := validateLabelValues(labelValues, len(desc.variableLabels)); err != nil { - return nil, err - } - return &constSummary{ - desc: desc, - count: count, - sum: sum, - quantiles: quantiles, - labelPairs: makeLabelPairs(desc, labelValues), - }, nil -} - -// MustNewConstSummary is a version of NewConstSummary that panics where -// NewConstMetric would have returned an error. -func MustNewConstSummary( - desc *Desc, - count uint64, - sum float64, - quantiles map[float64]float64, - labelValues ...string, -) Metric { - m, err := NewConstSummary(desc, count, sum, quantiles, labelValues...) - if err != nil { - panic(err) - } - return m -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/timer.go b/vendor/github.com/prometheus/client_golang/prometheus/timer.go deleted file mode 100644 index b8fc5f18c..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/timer.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2016 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import "time" - -// Timer is a helper type to time functions. Use NewTimer to create new -// instances. -type Timer struct { - begin time.Time - observer Observer -} - -// NewTimer creates a new Timer. The provided Observer is used to observe a -// duration in seconds. Timer is usually used to time a function call in the -// following way: -// func TimeMe() { -// timer := NewTimer(myHistogram) -// defer timer.ObserveDuration() -// // Do actual work. -// } -func NewTimer(o Observer) *Timer { - return &Timer{ - begin: time.Now(), - observer: o, - } -} - -// ObserveDuration records the duration passed since the Timer was created with -// NewTimer. It calls the Observe method of the Observer provided during -// construction with the duration in seconds as an argument. ObserveDuration is -// usually called with a defer statement. -// -// Note that this method is only guaranteed to never observe negative durations -// if used with Go1.9+. -func (t *Timer) ObserveDuration() { - if t.observer != nil { - t.observer.Observe(time.Since(t.begin).Seconds()) - } -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/untyped.go b/vendor/github.com/prometheus/client_golang/prometheus/untyped.go deleted file mode 100644 index 0f9ce63f4..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/untyped.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -// UntypedOpts is an alias for Opts. See there for doc comments. -type UntypedOpts Opts - -// UntypedFunc works like GaugeFunc but the collected metric is of type -// "Untyped". UntypedFunc is useful to mirror an external metric of unknown -// type. -// -// To create UntypedFunc instances, use NewUntypedFunc. -type UntypedFunc interface { - Metric - Collector -} - -// NewUntypedFunc creates a new UntypedFunc based on the provided -// UntypedOpts. The value reported is determined by calling the given function -// from within the Write method. Take into account that metric collection may -// happen concurrently. If that results in concurrent calls to Write, like in -// the case where an UntypedFunc is directly registered with Prometheus, the -// provided function must be concurrency-safe. -func NewUntypedFunc(opts UntypedOpts, function func() float64) UntypedFunc { - return newValueFunc(NewDesc( - BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), - opts.Help, - nil, - opts.ConstLabels, - ), UntypedValue, function) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/value.go b/vendor/github.com/prometheus/client_golang/prometheus/value.go deleted file mode 100644 index 5e7d4b699..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/value.go +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "fmt" - "sort" - - "github.com/golang/protobuf/proto" - - dto "github.com/prometheus/client_model/go" -) - -// ValueType is an enumeration of metric types that represent a simple value. -type ValueType int - -// Possible values for the ValueType enum. -const ( - _ ValueType = iota - CounterValue - GaugeValue - UntypedValue -) - -// valueFunc is a generic metric for simple values retrieved on collect time -// from a function. It implements Metric and Collector. Its effective type is -// determined by ValueType. This is a low-level building block used by the -// library to back the implementations of CounterFunc, GaugeFunc, and -// UntypedFunc. -type valueFunc struct { - selfCollector - - desc *Desc - valType ValueType - function func() float64 - labelPairs []*dto.LabelPair -} - -// newValueFunc returns a newly allocated valueFunc with the given Desc and -// ValueType. The value reported is determined by calling the given function -// from within the Write method. Take into account that metric collection may -// happen concurrently. If that results in concurrent calls to Write, like in -// the case where a valueFunc is directly registered with Prometheus, the -// provided function must be concurrency-safe. -func newValueFunc(desc *Desc, valueType ValueType, function func() float64) *valueFunc { - result := &valueFunc{ - desc: desc, - valType: valueType, - function: function, - labelPairs: makeLabelPairs(desc, nil), - } - result.init(result) - return result -} - -func (v *valueFunc) Desc() *Desc { - return v.desc -} - -func (v *valueFunc) Write(out *dto.Metric) error { - return populateMetric(v.valType, v.function(), v.labelPairs, out) -} - -// NewConstMetric returns a metric with one fixed value that cannot be -// changed. Users of this package will not have much use for it in regular -// operations. However, when implementing custom Collectors, it is useful as a -// throw-away metric that is generated on the fly to send it to Prometheus in -// the Collect method. NewConstMetric returns an error if the length of -// labelValues is not consistent with the variable labels in Desc. -func NewConstMetric(desc *Desc, valueType ValueType, value float64, labelValues ...string) (Metric, error) { - if err := validateLabelValues(labelValues, len(desc.variableLabels)); err != nil { - return nil, err - } - return &constMetric{ - desc: desc, - valType: valueType, - val: value, - labelPairs: makeLabelPairs(desc, labelValues), - }, nil -} - -// MustNewConstMetric is a version of NewConstMetric that panics where -// NewConstMetric would have returned an error. -func MustNewConstMetric(desc *Desc, valueType ValueType, value float64, labelValues ...string) Metric { - m, err := NewConstMetric(desc, valueType, value, labelValues...) - if err != nil { - panic(err) - } - return m -} - -type constMetric struct { - desc *Desc - valType ValueType - val float64 - labelPairs []*dto.LabelPair -} - -func (m *constMetric) Desc() *Desc { - return m.desc -} - -func (m *constMetric) Write(out *dto.Metric) error { - return populateMetric(m.valType, m.val, m.labelPairs, out) -} - -func populateMetric( - t ValueType, - v float64, - labelPairs []*dto.LabelPair, - m *dto.Metric, -) error { - m.Label = labelPairs - switch t { - case CounterValue: - m.Counter = &dto.Counter{Value: proto.Float64(v)} - case GaugeValue: - m.Gauge = &dto.Gauge{Value: proto.Float64(v)} - case UntypedValue: - m.Untyped = &dto.Untyped{Value: proto.Float64(v)} - default: - return fmt.Errorf("encountered unknown type %v", t) - } - return nil -} - -func makeLabelPairs(desc *Desc, labelValues []string) []*dto.LabelPair { - totalLen := len(desc.variableLabels) + len(desc.constLabelPairs) - if totalLen == 0 { - // Super fast path. - return nil - } - if len(desc.variableLabels) == 0 { - // Moderately fast path. - return desc.constLabelPairs - } - labelPairs := make([]*dto.LabelPair, 0, totalLen) - for i, n := range desc.variableLabels { - labelPairs = append(labelPairs, &dto.LabelPair{ - Name: proto.String(n), - Value: proto.String(labelValues[i]), - }) - } - labelPairs = append(labelPairs, desc.constLabelPairs...) - sort.Sort(labelPairSorter(labelPairs)) - return labelPairs -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/vec.go b/vendor/github.com/prometheus/client_golang/prometheus/vec.go deleted file mode 100644 index 14ed9e856..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/vec.go +++ /dev/null @@ -1,472 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "fmt" - "sync" - - "github.com/prometheus/common/model" -) - -// metricVec is a Collector to bundle metrics of the same name that differ in -// their label values. metricVec is not used directly (and therefore -// unexported). It is used as a building block for implementations of vectors of -// a given metric type, like GaugeVec, CounterVec, SummaryVec, and HistogramVec. -// It also handles label currying. It uses basicMetricVec internally. -type metricVec struct { - *metricMap - - curry []curriedLabelValue - - // hashAdd and hashAddByte can be replaced for testing collision handling. - hashAdd func(h uint64, s string) uint64 - hashAddByte func(h uint64, b byte) uint64 -} - -// newMetricVec returns an initialized metricVec. -func newMetricVec(desc *Desc, newMetric func(lvs ...string) Metric) *metricVec { - return &metricVec{ - metricMap: &metricMap{ - metrics: map[uint64][]metricWithLabelValues{}, - desc: desc, - newMetric: newMetric, - }, - hashAdd: hashAdd, - hashAddByte: hashAddByte, - } -} - -// DeleteLabelValues removes the metric where the variable labels are the same -// as those passed in as labels (same order as the VariableLabels in Desc). It -// returns true if a metric was deleted. -// -// It is not an error if the number of label values is not the same as the -// number of VariableLabels in Desc. However, such inconsistent label count can -// never match an actual metric, so the method will always return false in that -// case. -// -// Note that for more than one label value, this method is prone to mistakes -// caused by an incorrect order of arguments. Consider Delete(Labels) as an -// alternative to avoid that type of mistake. For higher label numbers, the -// latter has a much more readable (albeit more verbose) syntax, but it comes -// with a performance overhead (for creating and processing the Labels map). -// See also the CounterVec example. -func (m *metricVec) DeleteLabelValues(lvs ...string) bool { - h, err := m.hashLabelValues(lvs) - if err != nil { - return false - } - - return m.metricMap.deleteByHashWithLabelValues(h, lvs, m.curry) -} - -// Delete deletes the metric where the variable labels are the same as those -// passed in as labels. It returns true if a metric was deleted. -// -// It is not an error if the number and names of the Labels are inconsistent -// with those of the VariableLabels in Desc. However, such inconsistent Labels -// can never match an actual metric, so the method will always return false in -// that case. -// -// This method is used for the same purpose as DeleteLabelValues(...string). See -// there for pros and cons of the two methods. -func (m *metricVec) Delete(labels Labels) bool { - h, err := m.hashLabels(labels) - if err != nil { - return false - } - - return m.metricMap.deleteByHashWithLabels(h, labels, m.curry) -} - -func (m *metricVec) curryWith(labels Labels) (*metricVec, error) { - var ( - newCurry []curriedLabelValue - oldCurry = m.curry - iCurry int - ) - for i, label := range m.desc.variableLabels { - val, ok := labels[label] - if iCurry < len(oldCurry) && oldCurry[iCurry].index == i { - if ok { - return nil, fmt.Errorf("label name %q is already curried", label) - } - newCurry = append(newCurry, oldCurry[iCurry]) - iCurry++ - } else { - if !ok { - continue // Label stays uncurried. - } - newCurry = append(newCurry, curriedLabelValue{i, val}) - } - } - if l := len(oldCurry) + len(labels) - len(newCurry); l > 0 { - return nil, fmt.Errorf("%d unknown label(s) found during currying", l) - } - - return &metricVec{ - metricMap: m.metricMap, - curry: newCurry, - hashAdd: m.hashAdd, - hashAddByte: m.hashAddByte, - }, nil -} - -func (m *metricVec) getMetricWithLabelValues(lvs ...string) (Metric, error) { - h, err := m.hashLabelValues(lvs) - if err != nil { - return nil, err - } - - return m.metricMap.getOrCreateMetricWithLabelValues(h, lvs, m.curry), nil -} - -func (m *metricVec) getMetricWith(labels Labels) (Metric, error) { - h, err := m.hashLabels(labels) - if err != nil { - return nil, err - } - - return m.metricMap.getOrCreateMetricWithLabels(h, labels, m.curry), nil -} - -func (m *metricVec) hashLabelValues(vals []string) (uint64, error) { - if err := validateLabelValues(vals, len(m.desc.variableLabels)-len(m.curry)); err != nil { - return 0, err - } - - var ( - h = hashNew() - curry = m.curry - iVals, iCurry int - ) - for i := 0; i < len(m.desc.variableLabels); i++ { - if iCurry < len(curry) && curry[iCurry].index == i { - h = m.hashAdd(h, curry[iCurry].value) - iCurry++ - } else { - h = m.hashAdd(h, vals[iVals]) - iVals++ - } - h = m.hashAddByte(h, model.SeparatorByte) - } - return h, nil -} - -func (m *metricVec) hashLabels(labels Labels) (uint64, error) { - if err := validateValuesInLabels(labels, len(m.desc.variableLabels)-len(m.curry)); err != nil { - return 0, err - } - - var ( - h = hashNew() - curry = m.curry - iCurry int - ) - for i, label := range m.desc.variableLabels { - val, ok := labels[label] - if iCurry < len(curry) && curry[iCurry].index == i { - if ok { - return 0, fmt.Errorf("label name %q is already curried", label) - } - h = m.hashAdd(h, curry[iCurry].value) - iCurry++ - } else { - if !ok { - return 0, fmt.Errorf("label name %q missing in label map", label) - } - h = m.hashAdd(h, val) - } - h = m.hashAddByte(h, model.SeparatorByte) - } - return h, nil -} - -// metricWithLabelValues provides the metric and its label values for -// disambiguation on hash collision. -type metricWithLabelValues struct { - values []string - metric Metric -} - -// curriedLabelValue sets the curried value for a label at the given index. -type curriedLabelValue struct { - index int - value string -} - -// metricMap is a helper for metricVec and shared between differently curried -// metricVecs. -type metricMap struct { - mtx sync.RWMutex // Protects metrics. - metrics map[uint64][]metricWithLabelValues - desc *Desc - newMetric func(labelValues ...string) Metric -} - -// Describe implements Collector. It will send exactly one Desc to the provided -// channel. -func (m *metricMap) Describe(ch chan<- *Desc) { - ch <- m.desc -} - -// Collect implements Collector. -func (m *metricMap) Collect(ch chan<- Metric) { - m.mtx.RLock() - defer m.mtx.RUnlock() - - for _, metrics := range m.metrics { - for _, metric := range metrics { - ch <- metric.metric - } - } -} - -// Reset deletes all metrics in this vector. -func (m *metricMap) Reset() { - m.mtx.Lock() - defer m.mtx.Unlock() - - for h := range m.metrics { - delete(m.metrics, h) - } -} - -// deleteByHashWithLabelValues removes the metric from the hash bucket h. If -// there are multiple matches in the bucket, use lvs to select a metric and -// remove only that metric. -func (m *metricMap) deleteByHashWithLabelValues( - h uint64, lvs []string, curry []curriedLabelValue, -) bool { - m.mtx.Lock() - defer m.mtx.Unlock() - - metrics, ok := m.metrics[h] - if !ok { - return false - } - - i := findMetricWithLabelValues(metrics, lvs, curry) - if i >= len(metrics) { - return false - } - - if len(metrics) > 1 { - m.metrics[h] = append(metrics[:i], metrics[i+1:]...) - } else { - delete(m.metrics, h) - } - return true -} - -// deleteByHashWithLabels removes the metric from the hash bucket h. If there -// are multiple matches in the bucket, use lvs to select a metric and remove -// only that metric. -func (m *metricMap) deleteByHashWithLabels( - h uint64, labels Labels, curry []curriedLabelValue, -) bool { - m.mtx.Lock() - defer m.mtx.Unlock() - - metrics, ok := m.metrics[h] - if !ok { - return false - } - i := findMetricWithLabels(m.desc, metrics, labels, curry) - if i >= len(metrics) { - return false - } - - if len(metrics) > 1 { - m.metrics[h] = append(metrics[:i], metrics[i+1:]...) - } else { - delete(m.metrics, h) - } - return true -} - -// getOrCreateMetricWithLabelValues retrieves the metric by hash and label value -// or creates it and returns the new one. -// -// This function holds the mutex. -func (m *metricMap) getOrCreateMetricWithLabelValues( - hash uint64, lvs []string, curry []curriedLabelValue, -) Metric { - m.mtx.RLock() - metric, ok := m.getMetricWithHashAndLabelValues(hash, lvs, curry) - m.mtx.RUnlock() - if ok { - return metric - } - - m.mtx.Lock() - defer m.mtx.Unlock() - metric, ok = m.getMetricWithHashAndLabelValues(hash, lvs, curry) - if !ok { - inlinedLVs := inlineLabelValues(lvs, curry) - metric = m.newMetric(inlinedLVs...) - m.metrics[hash] = append(m.metrics[hash], metricWithLabelValues{values: inlinedLVs, metric: metric}) - } - return metric -} - -// getOrCreateMetricWithLabelValues retrieves the metric by hash and label value -// or creates it and returns the new one. -// -// This function holds the mutex. -func (m *metricMap) getOrCreateMetricWithLabels( - hash uint64, labels Labels, curry []curriedLabelValue, -) Metric { - m.mtx.RLock() - metric, ok := m.getMetricWithHashAndLabels(hash, labels, curry) - m.mtx.RUnlock() - if ok { - return metric - } - - m.mtx.Lock() - defer m.mtx.Unlock() - metric, ok = m.getMetricWithHashAndLabels(hash, labels, curry) - if !ok { - lvs := extractLabelValues(m.desc, labels, curry) - metric = m.newMetric(lvs...) - m.metrics[hash] = append(m.metrics[hash], metricWithLabelValues{values: lvs, metric: metric}) - } - return metric -} - -// getMetricWithHashAndLabelValues gets a metric while handling possible -// collisions in the hash space. Must be called while holding the read mutex. -func (m *metricMap) getMetricWithHashAndLabelValues( - h uint64, lvs []string, curry []curriedLabelValue, -) (Metric, bool) { - metrics, ok := m.metrics[h] - if ok { - if i := findMetricWithLabelValues(metrics, lvs, curry); i < len(metrics) { - return metrics[i].metric, true - } - } - return nil, false -} - -// getMetricWithHashAndLabels gets a metric while handling possible collisions in -// the hash space. Must be called while holding read mutex. -func (m *metricMap) getMetricWithHashAndLabels( - h uint64, labels Labels, curry []curriedLabelValue, -) (Metric, bool) { - metrics, ok := m.metrics[h] - if ok { - if i := findMetricWithLabels(m.desc, metrics, labels, curry); i < len(metrics) { - return metrics[i].metric, true - } - } - return nil, false -} - -// findMetricWithLabelValues returns the index of the matching metric or -// len(metrics) if not found. -func findMetricWithLabelValues( - metrics []metricWithLabelValues, lvs []string, curry []curriedLabelValue, -) int { - for i, metric := range metrics { - if matchLabelValues(metric.values, lvs, curry) { - return i - } - } - return len(metrics) -} - -// findMetricWithLabels returns the index of the matching metric or len(metrics) -// if not found. -func findMetricWithLabels( - desc *Desc, metrics []metricWithLabelValues, labels Labels, curry []curriedLabelValue, -) int { - for i, metric := range metrics { - if matchLabels(desc, metric.values, labels, curry) { - return i - } - } - return len(metrics) -} - -func matchLabelValues(values []string, lvs []string, curry []curriedLabelValue) bool { - if len(values) != len(lvs)+len(curry) { - return false - } - var iLVs, iCurry int - for i, v := range values { - if iCurry < len(curry) && curry[iCurry].index == i { - if v != curry[iCurry].value { - return false - } - iCurry++ - continue - } - if v != lvs[iLVs] { - return false - } - iLVs++ - } - return true -} - -func matchLabels(desc *Desc, values []string, labels Labels, curry []curriedLabelValue) bool { - if len(values) != len(labels)+len(curry) { - return false - } - iCurry := 0 - for i, k := range desc.variableLabels { - if iCurry < len(curry) && curry[iCurry].index == i { - if values[i] != curry[iCurry].value { - return false - } - iCurry++ - continue - } - if values[i] != labels[k] { - return false - } - } - return true -} - -func extractLabelValues(desc *Desc, labels Labels, curry []curriedLabelValue) []string { - labelValues := make([]string, len(labels)+len(curry)) - iCurry := 0 - for i, k := range desc.variableLabels { - if iCurry < len(curry) && curry[iCurry].index == i { - labelValues[i] = curry[iCurry].value - iCurry++ - continue - } - labelValues[i] = labels[k] - } - return labelValues -} - -func inlineLabelValues(lvs []string, curry []curriedLabelValue) []string { - labelValues := make([]string, len(lvs)+len(curry)) - var iCurry, iLVs int - for i := range labelValues { - if iCurry < len(curry) && curry[iCurry].index == i { - labelValues[i] = curry[iCurry].value - iCurry++ - continue - } - labelValues[i] = lvs[iLVs] - iLVs++ - } - return labelValues -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/wrap.go b/vendor/github.com/prometheus/client_golang/prometheus/wrap.go deleted file mode 100644 index 49159bf3e..000000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/wrap.go +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prometheus - -import ( - "fmt" - "sort" - - "github.com/golang/protobuf/proto" - - dto "github.com/prometheus/client_model/go" -) - -// WrapRegistererWith returns a Registerer wrapping the provided -// Registerer. Collectors registered with the returned Registerer will be -// registered with the wrapped Registerer in a modified way. The modified -// Collector adds the provided Labels to all Metrics it collects (as -// ConstLabels). The Metrics collected by the unmodified Collector must not -// duplicate any of those labels. -// -// WrapRegistererWith provides a way to add fixed labels to a subset of -// Collectors. It should not be used to add fixed labels to all metrics exposed. -// -// The Collector example demonstrates a use of WrapRegistererWith. -func WrapRegistererWith(labels Labels, reg Registerer) Registerer { - return &wrappingRegisterer{ - wrappedRegisterer: reg, - labels: labels, - } -} - -// WrapRegistererWithPrefix returns a Registerer wrapping the provided -// Registerer. Collectors registered with the returned Registerer will be -// registered with the wrapped Registerer in a modified way. The modified -// Collector adds the provided prefix to the name of all Metrics it collects. -// -// WrapRegistererWithPrefix is useful to have one place to prefix all metrics of -// a sub-system. To make this work, register metrics of the sub-system with the -// wrapping Registerer returned by WrapRegistererWithPrefix. It is rarely useful -// to use the same prefix for all metrics exposed. In particular, do not prefix -// metric names that are standardized across applications, as that would break -// horizontal monitoring, for example the metrics provided by the Go collector -// (see NewGoCollector) and the process collector (see NewProcessCollector). (In -// fact, those metrics are already prefixed with “go_” or “process_”, -// respectively.) -func WrapRegistererWithPrefix(prefix string, reg Registerer) Registerer { - return &wrappingRegisterer{ - wrappedRegisterer: reg, - prefix: prefix, - } -} - -type wrappingRegisterer struct { - wrappedRegisterer Registerer - prefix string - labels Labels -} - -func (r *wrappingRegisterer) Register(c Collector) error { - return r.wrappedRegisterer.Register(&wrappingCollector{ - wrappedCollector: c, - prefix: r.prefix, - labels: r.labels, - }) -} - -func (r *wrappingRegisterer) MustRegister(cs ...Collector) { - for _, c := range cs { - if err := r.Register(c); err != nil { - panic(err) - } - } -} - -func (r *wrappingRegisterer) Unregister(c Collector) bool { - return r.wrappedRegisterer.Unregister(&wrappingCollector{ - wrappedCollector: c, - prefix: r.prefix, - labels: r.labels, - }) -} - -type wrappingCollector struct { - wrappedCollector Collector - prefix string - labels Labels -} - -func (c *wrappingCollector) Collect(ch chan<- Metric) { - wrappedCh := make(chan Metric) - go func() { - c.wrappedCollector.Collect(wrappedCh) - close(wrappedCh) - }() - for m := range wrappedCh { - ch <- &wrappingMetric{ - wrappedMetric: m, - prefix: c.prefix, - labels: c.labels, - } - } -} - -func (c *wrappingCollector) Describe(ch chan<- *Desc) { - wrappedCh := make(chan *Desc) - go func() { - c.wrappedCollector.Describe(wrappedCh) - close(wrappedCh) - }() - for desc := range wrappedCh { - ch <- wrapDesc(desc, c.prefix, c.labels) - } -} - -type wrappingMetric struct { - wrappedMetric Metric - prefix string - labels Labels -} - -func (m *wrappingMetric) Desc() *Desc { - return wrapDesc(m.wrappedMetric.Desc(), m.prefix, m.labels) -} - -func (m *wrappingMetric) Write(out *dto.Metric) error { - if err := m.wrappedMetric.Write(out); err != nil { - return err - } - if len(m.labels) == 0 { - // No wrapping labels. - return nil - } - for ln, lv := range m.labels { - out.Label = append(out.Label, &dto.LabelPair{ - Name: proto.String(ln), - Value: proto.String(lv), - }) - } - sort.Sort(labelPairSorter(out.Label)) - return nil -} - -func wrapDesc(desc *Desc, prefix string, labels Labels) *Desc { - constLabels := Labels{} - for _, lp := range desc.constLabelPairs { - constLabels[*lp.Name] = *lp.Value - } - for ln, lv := range labels { - if _, alreadyUsed := constLabels[ln]; alreadyUsed { - return &Desc{ - fqName: desc.fqName, - help: desc.help, - variableLabels: desc.variableLabels, - constLabelPairs: desc.constLabelPairs, - err: fmt.Errorf("attempted wrapping with already existing label name %q", ln), - } - } - constLabels[ln] = lv - } - // NewDesc will do remaining validations. - newDesc := NewDesc(prefix+desc.fqName, desc.help, desc.variableLabels, constLabels) - // Propagate errors if there was any. This will override any errer - // created by NewDesc above, i.e. earlier errors get precedence. - if desc.err != nil { - newDesc.err = desc.err - } - return newDesc -} diff --git a/vendor/github.com/prometheus/client_model/LICENSE b/vendor/github.com/prometheus/client_model/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/vendor/github.com/prometheus/client_model/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - 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/prometheus/client_model/NOTICE b/vendor/github.com/prometheus/client_model/NOTICE deleted file mode 100644 index 20110e410..000000000 --- a/vendor/github.com/prometheus/client_model/NOTICE +++ /dev/null @@ -1,5 +0,0 @@ -Data model artifacts for Prometheus. -Copyright 2012-2015 The Prometheus Authors - -This product includes software developed at -SoundCloud Ltd. (http://soundcloud.com/). diff --git a/vendor/github.com/prometheus/client_model/go/metrics.pb.go b/vendor/github.com/prometheus/client_model/go/metrics.pb.go deleted file mode 100644 index 9805432c2..000000000 --- a/vendor/github.com/prometheus/client_model/go/metrics.pb.go +++ /dev/null @@ -1,629 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: metrics.proto - -package io_prometheus_client // import "github.com/prometheus/client_model/go" - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -type MetricType int32 - -const ( - MetricType_COUNTER MetricType = 0 - MetricType_GAUGE MetricType = 1 - MetricType_SUMMARY MetricType = 2 - MetricType_UNTYPED MetricType = 3 - MetricType_HISTOGRAM MetricType = 4 -) - -var MetricType_name = map[int32]string{ - 0: "COUNTER", - 1: "GAUGE", - 2: "SUMMARY", - 3: "UNTYPED", - 4: "HISTOGRAM", -} -var MetricType_value = map[string]int32{ - "COUNTER": 0, - "GAUGE": 1, - "SUMMARY": 2, - "UNTYPED": 3, - "HISTOGRAM": 4, -} - -func (x MetricType) Enum() *MetricType { - p := new(MetricType) - *p = x - return p -} -func (x MetricType) String() string { - return proto.EnumName(MetricType_name, int32(x)) -} -func (x *MetricType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(MetricType_value, data, "MetricType") - if err != nil { - return err - } - *x = MetricType(value) - return nil -} -func (MetricType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{0} -} - -type LabelPair struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Value *string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *LabelPair) Reset() { *m = LabelPair{} } -func (m *LabelPair) String() string { return proto.CompactTextString(m) } -func (*LabelPair) ProtoMessage() {} -func (*LabelPair) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{0} -} -func (m *LabelPair) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_LabelPair.Unmarshal(m, b) -} -func (m *LabelPair) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_LabelPair.Marshal(b, m, deterministic) -} -func (dst *LabelPair) XXX_Merge(src proto.Message) { - xxx_messageInfo_LabelPair.Merge(dst, src) -} -func (m *LabelPair) XXX_Size() int { - return xxx_messageInfo_LabelPair.Size(m) -} -func (m *LabelPair) XXX_DiscardUnknown() { - xxx_messageInfo_LabelPair.DiscardUnknown(m) -} - -var xxx_messageInfo_LabelPair proto.InternalMessageInfo - -func (m *LabelPair) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *LabelPair) GetValue() string { - if m != nil && m.Value != nil { - return *m.Value - } - return "" -} - -type Gauge struct { - Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Gauge) Reset() { *m = Gauge{} } -func (m *Gauge) String() string { return proto.CompactTextString(m) } -func (*Gauge) ProtoMessage() {} -func (*Gauge) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{1} -} -func (m *Gauge) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Gauge.Unmarshal(m, b) -} -func (m *Gauge) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Gauge.Marshal(b, m, deterministic) -} -func (dst *Gauge) XXX_Merge(src proto.Message) { - xxx_messageInfo_Gauge.Merge(dst, src) -} -func (m *Gauge) XXX_Size() int { - return xxx_messageInfo_Gauge.Size(m) -} -func (m *Gauge) XXX_DiscardUnknown() { - xxx_messageInfo_Gauge.DiscardUnknown(m) -} - -var xxx_messageInfo_Gauge proto.InternalMessageInfo - -func (m *Gauge) GetValue() float64 { - if m != nil && m.Value != nil { - return *m.Value - } - return 0 -} - -type Counter struct { - Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Counter) Reset() { *m = Counter{} } -func (m *Counter) String() string { return proto.CompactTextString(m) } -func (*Counter) ProtoMessage() {} -func (*Counter) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{2} -} -func (m *Counter) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Counter.Unmarshal(m, b) -} -func (m *Counter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Counter.Marshal(b, m, deterministic) -} -func (dst *Counter) XXX_Merge(src proto.Message) { - xxx_messageInfo_Counter.Merge(dst, src) -} -func (m *Counter) XXX_Size() int { - return xxx_messageInfo_Counter.Size(m) -} -func (m *Counter) XXX_DiscardUnknown() { - xxx_messageInfo_Counter.DiscardUnknown(m) -} - -var xxx_messageInfo_Counter proto.InternalMessageInfo - -func (m *Counter) GetValue() float64 { - if m != nil && m.Value != nil { - return *m.Value - } - return 0 -} - -type Quantile struct { - Quantile *float64 `protobuf:"fixed64,1,opt,name=quantile" json:"quantile,omitempty"` - Value *float64 `protobuf:"fixed64,2,opt,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Quantile) Reset() { *m = Quantile{} } -func (m *Quantile) String() string { return proto.CompactTextString(m) } -func (*Quantile) ProtoMessage() {} -func (*Quantile) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{3} -} -func (m *Quantile) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Quantile.Unmarshal(m, b) -} -func (m *Quantile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Quantile.Marshal(b, m, deterministic) -} -func (dst *Quantile) XXX_Merge(src proto.Message) { - xxx_messageInfo_Quantile.Merge(dst, src) -} -func (m *Quantile) XXX_Size() int { - return xxx_messageInfo_Quantile.Size(m) -} -func (m *Quantile) XXX_DiscardUnknown() { - xxx_messageInfo_Quantile.DiscardUnknown(m) -} - -var xxx_messageInfo_Quantile proto.InternalMessageInfo - -func (m *Quantile) GetQuantile() float64 { - if m != nil && m.Quantile != nil { - return *m.Quantile - } - return 0 -} - -func (m *Quantile) GetValue() float64 { - if m != nil && m.Value != nil { - return *m.Value - } - return 0 -} - -type Summary struct { - SampleCount *uint64 `protobuf:"varint,1,opt,name=sample_count,json=sampleCount" json:"sample_count,omitempty"` - SampleSum *float64 `protobuf:"fixed64,2,opt,name=sample_sum,json=sampleSum" json:"sample_sum,omitempty"` - Quantile []*Quantile `protobuf:"bytes,3,rep,name=quantile" json:"quantile,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Summary) Reset() { *m = Summary{} } -func (m *Summary) String() string { return proto.CompactTextString(m) } -func (*Summary) ProtoMessage() {} -func (*Summary) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{4} -} -func (m *Summary) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Summary.Unmarshal(m, b) -} -func (m *Summary) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Summary.Marshal(b, m, deterministic) -} -func (dst *Summary) XXX_Merge(src proto.Message) { - xxx_messageInfo_Summary.Merge(dst, src) -} -func (m *Summary) XXX_Size() int { - return xxx_messageInfo_Summary.Size(m) -} -func (m *Summary) XXX_DiscardUnknown() { - xxx_messageInfo_Summary.DiscardUnknown(m) -} - -var xxx_messageInfo_Summary proto.InternalMessageInfo - -func (m *Summary) GetSampleCount() uint64 { - if m != nil && m.SampleCount != nil { - return *m.SampleCount - } - return 0 -} - -func (m *Summary) GetSampleSum() float64 { - if m != nil && m.SampleSum != nil { - return *m.SampleSum - } - return 0 -} - -func (m *Summary) GetQuantile() []*Quantile { - if m != nil { - return m.Quantile - } - return nil -} - -type Untyped struct { - Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Untyped) Reset() { *m = Untyped{} } -func (m *Untyped) String() string { return proto.CompactTextString(m) } -func (*Untyped) ProtoMessage() {} -func (*Untyped) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{5} -} -func (m *Untyped) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Untyped.Unmarshal(m, b) -} -func (m *Untyped) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Untyped.Marshal(b, m, deterministic) -} -func (dst *Untyped) XXX_Merge(src proto.Message) { - xxx_messageInfo_Untyped.Merge(dst, src) -} -func (m *Untyped) XXX_Size() int { - return xxx_messageInfo_Untyped.Size(m) -} -func (m *Untyped) XXX_DiscardUnknown() { - xxx_messageInfo_Untyped.DiscardUnknown(m) -} - -var xxx_messageInfo_Untyped proto.InternalMessageInfo - -func (m *Untyped) GetValue() float64 { - if m != nil && m.Value != nil { - return *m.Value - } - return 0 -} - -type Histogram struct { - SampleCount *uint64 `protobuf:"varint,1,opt,name=sample_count,json=sampleCount" json:"sample_count,omitempty"` - SampleSum *float64 `protobuf:"fixed64,2,opt,name=sample_sum,json=sampleSum" json:"sample_sum,omitempty"` - Bucket []*Bucket `protobuf:"bytes,3,rep,name=bucket" json:"bucket,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Histogram) Reset() { *m = Histogram{} } -func (m *Histogram) String() string { return proto.CompactTextString(m) } -func (*Histogram) ProtoMessage() {} -func (*Histogram) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{6} -} -func (m *Histogram) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Histogram.Unmarshal(m, b) -} -func (m *Histogram) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Histogram.Marshal(b, m, deterministic) -} -func (dst *Histogram) XXX_Merge(src proto.Message) { - xxx_messageInfo_Histogram.Merge(dst, src) -} -func (m *Histogram) XXX_Size() int { - return xxx_messageInfo_Histogram.Size(m) -} -func (m *Histogram) XXX_DiscardUnknown() { - xxx_messageInfo_Histogram.DiscardUnknown(m) -} - -var xxx_messageInfo_Histogram proto.InternalMessageInfo - -func (m *Histogram) GetSampleCount() uint64 { - if m != nil && m.SampleCount != nil { - return *m.SampleCount - } - return 0 -} - -func (m *Histogram) GetSampleSum() float64 { - if m != nil && m.SampleSum != nil { - return *m.SampleSum - } - return 0 -} - -func (m *Histogram) GetBucket() []*Bucket { - if m != nil { - return m.Bucket - } - return nil -} - -type Bucket struct { - CumulativeCount *uint64 `protobuf:"varint,1,opt,name=cumulative_count,json=cumulativeCount" json:"cumulative_count,omitempty"` - UpperBound *float64 `protobuf:"fixed64,2,opt,name=upper_bound,json=upperBound" json:"upper_bound,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Bucket) Reset() { *m = Bucket{} } -func (m *Bucket) String() string { return proto.CompactTextString(m) } -func (*Bucket) ProtoMessage() {} -func (*Bucket) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{7} -} -func (m *Bucket) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Bucket.Unmarshal(m, b) -} -func (m *Bucket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Bucket.Marshal(b, m, deterministic) -} -func (dst *Bucket) XXX_Merge(src proto.Message) { - xxx_messageInfo_Bucket.Merge(dst, src) -} -func (m *Bucket) XXX_Size() int { - return xxx_messageInfo_Bucket.Size(m) -} -func (m *Bucket) XXX_DiscardUnknown() { - xxx_messageInfo_Bucket.DiscardUnknown(m) -} - -var xxx_messageInfo_Bucket proto.InternalMessageInfo - -func (m *Bucket) GetCumulativeCount() uint64 { - if m != nil && m.CumulativeCount != nil { - return *m.CumulativeCount - } - return 0 -} - -func (m *Bucket) GetUpperBound() float64 { - if m != nil && m.UpperBound != nil { - return *m.UpperBound - } - return 0 -} - -type Metric struct { - Label []*LabelPair `protobuf:"bytes,1,rep,name=label" json:"label,omitempty"` - Gauge *Gauge `protobuf:"bytes,2,opt,name=gauge" json:"gauge,omitempty"` - Counter *Counter `protobuf:"bytes,3,opt,name=counter" json:"counter,omitempty"` - Summary *Summary `protobuf:"bytes,4,opt,name=summary" json:"summary,omitempty"` - Untyped *Untyped `protobuf:"bytes,5,opt,name=untyped" json:"untyped,omitempty"` - Histogram *Histogram `protobuf:"bytes,7,opt,name=histogram" json:"histogram,omitempty"` - TimestampMs *int64 `protobuf:"varint,6,opt,name=timestamp_ms,json=timestampMs" json:"timestamp_ms,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Metric) Reset() { *m = Metric{} } -func (m *Metric) String() string { return proto.CompactTextString(m) } -func (*Metric) ProtoMessage() {} -func (*Metric) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{8} -} -func (m *Metric) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Metric.Unmarshal(m, b) -} -func (m *Metric) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Metric.Marshal(b, m, deterministic) -} -func (dst *Metric) XXX_Merge(src proto.Message) { - xxx_messageInfo_Metric.Merge(dst, src) -} -func (m *Metric) XXX_Size() int { - return xxx_messageInfo_Metric.Size(m) -} -func (m *Metric) XXX_DiscardUnknown() { - xxx_messageInfo_Metric.DiscardUnknown(m) -} - -var xxx_messageInfo_Metric proto.InternalMessageInfo - -func (m *Metric) GetLabel() []*LabelPair { - if m != nil { - return m.Label - } - return nil -} - -func (m *Metric) GetGauge() *Gauge { - if m != nil { - return m.Gauge - } - return nil -} - -func (m *Metric) GetCounter() *Counter { - if m != nil { - return m.Counter - } - return nil -} - -func (m *Metric) GetSummary() *Summary { - if m != nil { - return m.Summary - } - return nil -} - -func (m *Metric) GetUntyped() *Untyped { - if m != nil { - return m.Untyped - } - return nil -} - -func (m *Metric) GetHistogram() *Histogram { - if m != nil { - return m.Histogram - } - return nil -} - -func (m *Metric) GetTimestampMs() int64 { - if m != nil && m.TimestampMs != nil { - return *m.TimestampMs - } - return 0 -} - -type MetricFamily struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Help *string `protobuf:"bytes,2,opt,name=help" json:"help,omitempty"` - Type *MetricType `protobuf:"varint,3,opt,name=type,enum=io.prometheus.client.MetricType" json:"type,omitempty"` - Metric []*Metric `protobuf:"bytes,4,rep,name=metric" json:"metric,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *MetricFamily) Reset() { *m = MetricFamily{} } -func (m *MetricFamily) String() string { return proto.CompactTextString(m) } -func (*MetricFamily) ProtoMessage() {} -func (*MetricFamily) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{9} -} -func (m *MetricFamily) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_MetricFamily.Unmarshal(m, b) -} -func (m *MetricFamily) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_MetricFamily.Marshal(b, m, deterministic) -} -func (dst *MetricFamily) XXX_Merge(src proto.Message) { - xxx_messageInfo_MetricFamily.Merge(dst, src) -} -func (m *MetricFamily) XXX_Size() int { - return xxx_messageInfo_MetricFamily.Size(m) -} -func (m *MetricFamily) XXX_DiscardUnknown() { - xxx_messageInfo_MetricFamily.DiscardUnknown(m) -} - -var xxx_messageInfo_MetricFamily proto.InternalMessageInfo - -func (m *MetricFamily) GetName() string { - if m != nil && m.Name != nil { - return *m.Name - } - return "" -} - -func (m *MetricFamily) GetHelp() string { - if m != nil && m.Help != nil { - return *m.Help - } - return "" -} - -func (m *MetricFamily) GetType() MetricType { - if m != nil && m.Type != nil { - return *m.Type - } - return MetricType_COUNTER -} - -func (m *MetricFamily) GetMetric() []*Metric { - if m != nil { - return m.Metric - } - return nil -} - -func init() { - proto.RegisterType((*LabelPair)(nil), "io.prometheus.client.LabelPair") - proto.RegisterType((*Gauge)(nil), "io.prometheus.client.Gauge") - proto.RegisterType((*Counter)(nil), "io.prometheus.client.Counter") - proto.RegisterType((*Quantile)(nil), "io.prometheus.client.Quantile") - proto.RegisterType((*Summary)(nil), "io.prometheus.client.Summary") - proto.RegisterType((*Untyped)(nil), "io.prometheus.client.Untyped") - proto.RegisterType((*Histogram)(nil), "io.prometheus.client.Histogram") - proto.RegisterType((*Bucket)(nil), "io.prometheus.client.Bucket") - proto.RegisterType((*Metric)(nil), "io.prometheus.client.Metric") - proto.RegisterType((*MetricFamily)(nil), "io.prometheus.client.MetricFamily") - proto.RegisterEnum("io.prometheus.client.MetricType", MetricType_name, MetricType_value) -} - -func init() { proto.RegisterFile("metrics.proto", fileDescriptor_metrics_c97c9a2b9560cb8f) } - -var fileDescriptor_metrics_c97c9a2b9560cb8f = []byte{ - // 591 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x4f, 0x4f, 0xdb, 0x4e, - 0x14, 0xfc, 0x99, 0xd8, 0x09, 0x7e, 0x86, 0x5f, 0xad, 0x15, 0x07, 0xab, 0x2d, 0x25, 0xcd, 0x89, - 0xf6, 0x10, 0x54, 0x04, 0xaa, 0x44, 0xdb, 0x03, 0x50, 0x1a, 0x2a, 0xd5, 0x40, 0x37, 0xc9, 0x81, - 0x5e, 0xac, 0x8d, 0x59, 0x25, 0x56, 0xbd, 0xb6, 0x6b, 0xef, 0x22, 0xe5, 0xdc, 0x43, 0xbf, 0x47, - 0xbf, 0x68, 0xab, 0xfd, 0xe3, 0x18, 0x24, 0xc3, 0xa9, 0xb7, 0xb7, 0xf3, 0x66, 0xde, 0x8e, 0x77, - 0xc7, 0x0b, 0x9b, 0x8c, 0xf2, 0x32, 0x89, 0xab, 0x61, 0x51, 0xe6, 0x3c, 0x47, 0x5b, 0x49, 0x2e, - 0x2b, 0x46, 0xf9, 0x82, 0x8a, 0x6a, 0x18, 0xa7, 0x09, 0xcd, 0xf8, 0xe0, 0x10, 0xdc, 0x2f, 0x64, - 0x46, 0xd3, 0x2b, 0x92, 0x94, 0x08, 0x81, 0x9d, 0x11, 0x46, 0x03, 0xab, 0x6f, 0xed, 0xba, 0x58, - 0xd5, 0x68, 0x0b, 0x9c, 0x5b, 0x92, 0x0a, 0x1a, 0xac, 0x29, 0x50, 0x2f, 0x06, 0xdb, 0xe0, 0x8c, - 0x88, 0x98, 0xdf, 0x69, 0x4b, 0x8d, 0x55, 0xb7, 0x77, 0xa0, 0x77, 0x9a, 0x8b, 0x8c, 0xd3, 0xf2, - 0x01, 0xc2, 0x7b, 0x58, 0xff, 0x2a, 0x48, 0xc6, 0x93, 0x94, 0xa2, 0xa7, 0xb0, 0xfe, 0xc3, 0xd4, - 0x86, 0xb4, 0x5a, 0xdf, 0xdf, 0x7d, 0xa5, 0xfe, 0x65, 0x41, 0x6f, 0x2c, 0x18, 0x23, 0xe5, 0x12, - 0xbd, 0x84, 0x8d, 0x8a, 0xb0, 0x22, 0xa5, 0x51, 0x2c, 0x77, 0x54, 0x13, 0x6c, 0xec, 0x69, 0x4c, - 0x99, 0x40, 0xdb, 0x00, 0x86, 0x52, 0x09, 0x66, 0x26, 0xb9, 0x1a, 0x19, 0x0b, 0x86, 0x8e, 0xee, - 0xec, 0xdf, 0xe9, 0x77, 0x76, 0xbd, 0xfd, 0x17, 0xc3, 0xb6, 0xb3, 0x1a, 0xd6, 0x8e, 0x1b, 0x7f, - 0xf2, 0x43, 0xa7, 0x19, 0x5f, 0x16, 0xf4, 0xe6, 0x81, 0x0f, 0xfd, 0x69, 0x81, 0x7b, 0x9e, 0x54, - 0x3c, 0x9f, 0x97, 0x84, 0xfd, 0x03, 0xb3, 0x07, 0xd0, 0x9d, 0x89, 0xf8, 0x3b, 0xe5, 0xc6, 0xea, - 0xf3, 0x76, 0xab, 0x27, 0x8a, 0x83, 0x0d, 0x77, 0x30, 0x81, 0xae, 0x46, 0xd0, 0x2b, 0xf0, 0x63, - 0xc1, 0x44, 0x4a, 0x78, 0x72, 0x7b, 0xdf, 0xc5, 0x93, 0x06, 0xd7, 0x4e, 0x76, 0xc0, 0x13, 0x45, - 0x41, 0xcb, 0x68, 0x96, 0x8b, 0xec, 0xc6, 0x58, 0x01, 0x05, 0x9d, 0x48, 0x64, 0xf0, 0x67, 0x0d, - 0xba, 0xa1, 0xca, 0x18, 0x3a, 0x04, 0x27, 0x95, 0x31, 0x0a, 0x2c, 0xe5, 0x6a, 0xa7, 0xdd, 0xd5, - 0x2a, 0x69, 0x58, 0xb3, 0xd1, 0x1b, 0x70, 0xe6, 0x32, 0x46, 0x6a, 0xb8, 0xb7, 0xff, 0xac, 0x5d, - 0xa6, 0x92, 0x86, 0x35, 0x13, 0xbd, 0x85, 0x5e, 0xac, 0xa3, 0x15, 0x74, 0x94, 0x68, 0xbb, 0x5d, - 0x64, 0xf2, 0x87, 0x6b, 0xb6, 0x14, 0x56, 0x3a, 0x33, 0x81, 0xfd, 0x98, 0xd0, 0x04, 0x0b, 0xd7, - 0x6c, 0x29, 0x14, 0xfa, 0x8e, 0x03, 0xe7, 0x31, 0xa1, 0x09, 0x02, 0xae, 0xd9, 0xe8, 0x03, 0xb8, - 0x8b, 0xfa, 0xea, 0x83, 0x9e, 0x92, 0x3e, 0x70, 0x30, 0xab, 0x84, 0xe0, 0x46, 0x21, 0xc3, 0xc2, - 0x13, 0x46, 0x2b, 0x4e, 0x58, 0x11, 0xb1, 0x2a, 0xe8, 0xf6, 0xad, 0xdd, 0x0e, 0xf6, 0x56, 0x58, - 0x58, 0x0d, 0x7e, 0x5b, 0xb0, 0xa1, 0x6f, 0xe0, 0x13, 0x61, 0x49, 0xba, 0x6c, 0xfd, 0x83, 0x11, - 0xd8, 0x0b, 0x9a, 0x16, 0xe6, 0x07, 0x56, 0x35, 0x3a, 0x00, 0x5b, 0x7a, 0x54, 0x47, 0xf8, 0xff, - 0x7e, 0xbf, 0xdd, 0x95, 0x9e, 0x3c, 0x59, 0x16, 0x14, 0x2b, 0xb6, 0x0c, 0x9f, 0x7e, 0x53, 0x02, - 0xfb, 0xb1, 0xf0, 0x69, 0x1d, 0x36, 0xdc, 0xd7, 0x21, 0x40, 0x33, 0x09, 0x79, 0xd0, 0x3b, 0xbd, - 0x9c, 0x5e, 0x4c, 0xce, 0xb0, 0xff, 0x1f, 0x72, 0xc1, 0x19, 0x1d, 0x4f, 0x47, 0x67, 0xbe, 0x25, - 0xf1, 0xf1, 0x34, 0x0c, 0x8f, 0xf1, 0xb5, 0xbf, 0x26, 0x17, 0xd3, 0x8b, 0xc9, 0xf5, 0xd5, 0xd9, - 0x47, 0xbf, 0x83, 0x36, 0xc1, 0x3d, 0xff, 0x3c, 0x9e, 0x5c, 0x8e, 0xf0, 0x71, 0xe8, 0xdb, 0x27, - 0x18, 0x5a, 0x5f, 0xb2, 0x6f, 0x47, 0xf3, 0x84, 0x2f, 0xc4, 0x6c, 0x18, 0xe7, 0x6c, 0xaf, 0xe9, - 0xee, 0xe9, 0x6e, 0xc4, 0xf2, 0x1b, 0x9a, 0xee, 0xcd, 0xf3, 0x77, 0x49, 0x1e, 0x35, 0xdd, 0x48, - 0x77, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x45, 0x21, 0x7f, 0x64, 0x2b, 0x05, 0x00, 0x00, -} diff --git a/vendor/github.com/prometheus/common/LICENSE b/vendor/github.com/prometheus/common/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/vendor/github.com/prometheus/common/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - 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/prometheus/common/NOTICE b/vendor/github.com/prometheus/common/NOTICE deleted file mode 100644 index 636a2c1a5..000000000 --- a/vendor/github.com/prometheus/common/NOTICE +++ /dev/null @@ -1,5 +0,0 @@ -Common libraries shared by Prometheus Go components. -Copyright 2015 The Prometheus Authors - -This product includes software developed at -SoundCloud Ltd. (http://soundcloud.com/). diff --git a/vendor/github.com/prometheus/common/expfmt/decode.go b/vendor/github.com/prometheus/common/expfmt/decode.go deleted file mode 100644 index c092723e8..000000000 --- a/vendor/github.com/prometheus/common/expfmt/decode.go +++ /dev/null @@ -1,429 +0,0 @@ -// Copyright 2015 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package expfmt - -import ( - "fmt" - "io" - "math" - "mime" - "net/http" - - dto "github.com/prometheus/client_model/go" - - "github.com/matttproud/golang_protobuf_extensions/pbutil" - "github.com/prometheus/common/model" -) - -// Decoder types decode an input stream into metric families. -type Decoder interface { - Decode(*dto.MetricFamily) error -} - -// DecodeOptions contains options used by the Decoder and in sample extraction. -type DecodeOptions struct { - // Timestamp is added to each value from the stream that has no explicit timestamp set. - Timestamp model.Time -} - -// ResponseFormat extracts the correct format from a HTTP response header. -// If no matching format can be found FormatUnknown is returned. -func ResponseFormat(h http.Header) Format { - ct := h.Get(hdrContentType) - - mediatype, params, err := mime.ParseMediaType(ct) - if err != nil { - return FmtUnknown - } - - const textType = "text/plain" - - switch mediatype { - case ProtoType: - if p, ok := params["proto"]; ok && p != ProtoProtocol { - return FmtUnknown - } - if e, ok := params["encoding"]; ok && e != "delimited" { - return FmtUnknown - } - return FmtProtoDelim - - case textType: - if v, ok := params["version"]; ok && v != TextVersion { - return FmtUnknown - } - return FmtText - } - - return FmtUnknown -} - -// NewDecoder returns a new decoder based on the given input format. -// If the input format does not imply otherwise, a text format decoder is returned. -func NewDecoder(r io.Reader, format Format) Decoder { - switch format { - case FmtProtoDelim: - return &protoDecoder{r: r} - } - return &textDecoder{r: r} -} - -// protoDecoder implements the Decoder interface for protocol buffers. -type protoDecoder struct { - r io.Reader -} - -// Decode implements the Decoder interface. -func (d *protoDecoder) Decode(v *dto.MetricFamily) error { - _, err := pbutil.ReadDelimited(d.r, v) - if err != nil { - return err - } - if !model.IsValidMetricName(model.LabelValue(v.GetName())) { - return fmt.Errorf("invalid metric name %q", v.GetName()) - } - for _, m := range v.GetMetric() { - if m == nil { - continue - } - for _, l := range m.GetLabel() { - if l == nil { - continue - } - if !model.LabelValue(l.GetValue()).IsValid() { - return fmt.Errorf("invalid label value %q", l.GetValue()) - } - if !model.LabelName(l.GetName()).IsValid() { - return fmt.Errorf("invalid label name %q", l.GetName()) - } - } - } - return nil -} - -// textDecoder implements the Decoder interface for the text protocol. -type textDecoder struct { - r io.Reader - p TextParser - fams []*dto.MetricFamily -} - -// Decode implements the Decoder interface. -func (d *textDecoder) Decode(v *dto.MetricFamily) error { - // TODO(fabxc): Wrap this as a line reader to make streaming safer. - if len(d.fams) == 0 { - // No cached metric families, read everything and parse metrics. - fams, err := d.p.TextToMetricFamilies(d.r) - if err != nil { - return err - } - if len(fams) == 0 { - return io.EOF - } - d.fams = make([]*dto.MetricFamily, 0, len(fams)) - for _, f := range fams { - d.fams = append(d.fams, f) - } - } - - *v = *d.fams[0] - d.fams = d.fams[1:] - - return nil -} - -// SampleDecoder wraps a Decoder to extract samples from the metric families -// decoded by the wrapped Decoder. -type SampleDecoder struct { - Dec Decoder - Opts *DecodeOptions - - f dto.MetricFamily -} - -// Decode calls the Decode method of the wrapped Decoder and then extracts the -// samples from the decoded MetricFamily into the provided model.Vector. -func (sd *SampleDecoder) Decode(s *model.Vector) error { - err := sd.Dec.Decode(&sd.f) - if err != nil { - return err - } - *s, err = extractSamples(&sd.f, sd.Opts) - return err -} - -// ExtractSamples builds a slice of samples from the provided metric -// families. If an error occurrs during sample extraction, it continues to -// extract from the remaining metric families. The returned error is the last -// error that has occurred. -func ExtractSamples(o *DecodeOptions, fams ...*dto.MetricFamily) (model.Vector, error) { - var ( - all model.Vector - lastErr error - ) - for _, f := range fams { - some, err := extractSamples(f, o) - if err != nil { - lastErr = err - continue - } - all = append(all, some...) - } - return all, lastErr -} - -func extractSamples(f *dto.MetricFamily, o *DecodeOptions) (model.Vector, error) { - switch f.GetType() { - case dto.MetricType_COUNTER: - return extractCounter(o, f), nil - case dto.MetricType_GAUGE: - return extractGauge(o, f), nil - case dto.MetricType_SUMMARY: - return extractSummary(o, f), nil - case dto.MetricType_UNTYPED: - return extractUntyped(o, f), nil - case dto.MetricType_HISTOGRAM: - return extractHistogram(o, f), nil - } - return nil, fmt.Errorf("expfmt.extractSamples: unknown metric family type %v", f.GetType()) -} - -func extractCounter(o *DecodeOptions, f *dto.MetricFamily) model.Vector { - samples := make(model.Vector, 0, len(f.Metric)) - - for _, m := range f.Metric { - if m.Counter == nil { - continue - } - - lset := make(model.LabelSet, len(m.Label)+1) - for _, p := range m.Label { - lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) - } - lset[model.MetricNameLabel] = model.LabelValue(f.GetName()) - - smpl := &model.Sample{ - Metric: model.Metric(lset), - Value: model.SampleValue(m.Counter.GetValue()), - } - - if m.TimestampMs != nil { - smpl.Timestamp = model.TimeFromUnixNano(*m.TimestampMs * 1000000) - } else { - smpl.Timestamp = o.Timestamp - } - - samples = append(samples, smpl) - } - - return samples -} - -func extractGauge(o *DecodeOptions, f *dto.MetricFamily) model.Vector { - samples := make(model.Vector, 0, len(f.Metric)) - - for _, m := range f.Metric { - if m.Gauge == nil { - continue - } - - lset := make(model.LabelSet, len(m.Label)+1) - for _, p := range m.Label { - lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) - } - lset[model.MetricNameLabel] = model.LabelValue(f.GetName()) - - smpl := &model.Sample{ - Metric: model.Metric(lset), - Value: model.SampleValue(m.Gauge.GetValue()), - } - - if m.TimestampMs != nil { - smpl.Timestamp = model.TimeFromUnixNano(*m.TimestampMs * 1000000) - } else { - smpl.Timestamp = o.Timestamp - } - - samples = append(samples, smpl) - } - - return samples -} - -func extractUntyped(o *DecodeOptions, f *dto.MetricFamily) model.Vector { - samples := make(model.Vector, 0, len(f.Metric)) - - for _, m := range f.Metric { - if m.Untyped == nil { - continue - } - - lset := make(model.LabelSet, len(m.Label)+1) - for _, p := range m.Label { - lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) - } - lset[model.MetricNameLabel] = model.LabelValue(f.GetName()) - - smpl := &model.Sample{ - Metric: model.Metric(lset), - Value: model.SampleValue(m.Untyped.GetValue()), - } - - if m.TimestampMs != nil { - smpl.Timestamp = model.TimeFromUnixNano(*m.TimestampMs * 1000000) - } else { - smpl.Timestamp = o.Timestamp - } - - samples = append(samples, smpl) - } - - return samples -} - -func extractSummary(o *DecodeOptions, f *dto.MetricFamily) model.Vector { - samples := make(model.Vector, 0, len(f.Metric)) - - for _, m := range f.Metric { - if m.Summary == nil { - continue - } - - timestamp := o.Timestamp - if m.TimestampMs != nil { - timestamp = model.TimeFromUnixNano(*m.TimestampMs * 1000000) - } - - for _, q := range m.Summary.Quantile { - lset := make(model.LabelSet, len(m.Label)+2) - for _, p := range m.Label { - lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) - } - // BUG(matt): Update other names to "quantile". - lset[model.LabelName(model.QuantileLabel)] = model.LabelValue(fmt.Sprint(q.GetQuantile())) - lset[model.MetricNameLabel] = model.LabelValue(f.GetName()) - - samples = append(samples, &model.Sample{ - Metric: model.Metric(lset), - Value: model.SampleValue(q.GetValue()), - Timestamp: timestamp, - }) - } - - lset := make(model.LabelSet, len(m.Label)+1) - for _, p := range m.Label { - lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) - } - lset[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_sum") - - samples = append(samples, &model.Sample{ - Metric: model.Metric(lset), - Value: model.SampleValue(m.Summary.GetSampleSum()), - Timestamp: timestamp, - }) - - lset = make(model.LabelSet, len(m.Label)+1) - for _, p := range m.Label { - lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) - } - lset[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_count") - - samples = append(samples, &model.Sample{ - Metric: model.Metric(lset), - Value: model.SampleValue(m.Summary.GetSampleCount()), - Timestamp: timestamp, - }) - } - - return samples -} - -func extractHistogram(o *DecodeOptions, f *dto.MetricFamily) model.Vector { - samples := make(model.Vector, 0, len(f.Metric)) - - for _, m := range f.Metric { - if m.Histogram == nil { - continue - } - - timestamp := o.Timestamp - if m.TimestampMs != nil { - timestamp = model.TimeFromUnixNano(*m.TimestampMs * 1000000) - } - - infSeen := false - - for _, q := range m.Histogram.Bucket { - lset := make(model.LabelSet, len(m.Label)+2) - for _, p := range m.Label { - lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) - } - lset[model.LabelName(model.BucketLabel)] = model.LabelValue(fmt.Sprint(q.GetUpperBound())) - lset[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_bucket") - - if math.IsInf(q.GetUpperBound(), +1) { - infSeen = true - } - - samples = append(samples, &model.Sample{ - Metric: model.Metric(lset), - Value: model.SampleValue(q.GetCumulativeCount()), - Timestamp: timestamp, - }) - } - - lset := make(model.LabelSet, len(m.Label)+1) - for _, p := range m.Label { - lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) - } - lset[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_sum") - - samples = append(samples, &model.Sample{ - Metric: model.Metric(lset), - Value: model.SampleValue(m.Histogram.GetSampleSum()), - Timestamp: timestamp, - }) - - lset = make(model.LabelSet, len(m.Label)+1) - for _, p := range m.Label { - lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) - } - lset[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_count") - - count := &model.Sample{ - Metric: model.Metric(lset), - Value: model.SampleValue(m.Histogram.GetSampleCount()), - Timestamp: timestamp, - } - samples = append(samples, count) - - if !infSeen { - // Append an infinity bucket sample. - lset := make(model.LabelSet, len(m.Label)+2) - for _, p := range m.Label { - lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) - } - lset[model.LabelName(model.BucketLabel)] = model.LabelValue("+Inf") - lset[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_bucket") - - samples = append(samples, &model.Sample{ - Metric: model.Metric(lset), - Value: count.Value, - Timestamp: timestamp, - }) - } - } - - return samples -} diff --git a/vendor/github.com/prometheus/common/expfmt/encode.go b/vendor/github.com/prometheus/common/expfmt/encode.go deleted file mode 100644 index 11839ed65..000000000 --- a/vendor/github.com/prometheus/common/expfmt/encode.go +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2015 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package expfmt - -import ( - "fmt" - "io" - "net/http" - - "github.com/golang/protobuf/proto" - "github.com/matttproud/golang_protobuf_extensions/pbutil" - "github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg" - - dto "github.com/prometheus/client_model/go" -) - -// Encoder types encode metric families into an underlying wire protocol. -type Encoder interface { - Encode(*dto.MetricFamily) error -} - -type encoder func(*dto.MetricFamily) error - -func (e encoder) Encode(v *dto.MetricFamily) error { - return e(v) -} - -// Negotiate returns the Content-Type based on the given Accept header. -// If no appropriate accepted type is found, FmtText is returned. -func Negotiate(h http.Header) Format { - for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) { - // Check for protocol buffer - if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol { - switch ac.Params["encoding"] { - case "delimited": - return FmtProtoDelim - case "text": - return FmtProtoText - case "compact-text": - return FmtProtoCompact - } - } - // Check for text format. - ver := ac.Params["version"] - if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") { - return FmtText - } - } - return FmtText -} - -// NewEncoder returns a new encoder based on content type negotiation. -func NewEncoder(w io.Writer, format Format) Encoder { - switch format { - case FmtProtoDelim: - return encoder(func(v *dto.MetricFamily) error { - _, err := pbutil.WriteDelimited(w, v) - return err - }) - case FmtProtoCompact: - return encoder(func(v *dto.MetricFamily) error { - _, err := fmt.Fprintln(w, v.String()) - return err - }) - case FmtProtoText: - return encoder(func(v *dto.MetricFamily) error { - _, err := fmt.Fprintln(w, proto.MarshalTextString(v)) - return err - }) - case FmtText: - return encoder(func(v *dto.MetricFamily) error { - _, err := MetricFamilyToText(w, v) - return err - }) - } - panic("expfmt.NewEncoder: unknown format") -} diff --git a/vendor/github.com/prometheus/common/expfmt/expfmt.go b/vendor/github.com/prometheus/common/expfmt/expfmt.go deleted file mode 100644 index c71bcb981..000000000 --- a/vendor/github.com/prometheus/common/expfmt/expfmt.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2015 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package expfmt contains tools for reading and writing Prometheus metrics. -package expfmt - -// Format specifies the HTTP content type of the different wire protocols. -type Format string - -// Constants to assemble the Content-Type values for the different wire protocols. -const ( - TextVersion = "0.0.4" - ProtoType = `application/vnd.google.protobuf` - ProtoProtocol = `io.prometheus.client.MetricFamily` - ProtoFmt = ProtoType + "; proto=" + ProtoProtocol + ";" - - // The Content-Type values for the different wire protocols. - FmtUnknown Format = `` - FmtText Format = `text/plain; version=` + TextVersion + `; charset=utf-8` - FmtProtoDelim Format = ProtoFmt + ` encoding=delimited` - FmtProtoText Format = ProtoFmt + ` encoding=text` - FmtProtoCompact Format = ProtoFmt + ` encoding=compact-text` -) - -const ( - hdrContentType = "Content-Type" - hdrAccept = "Accept" -) diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz.go b/vendor/github.com/prometheus/common/expfmt/fuzz.go deleted file mode 100644 index dc2eedeef..000000000 --- a/vendor/github.com/prometheus/common/expfmt/fuzz.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Build only when actually fuzzing -// +build gofuzz - -package expfmt - -import "bytes" - -// Fuzz text metric parser with with github.com/dvyukov/go-fuzz: -// -// go-fuzz-build github.com/prometheus/common/expfmt -// go-fuzz -bin expfmt-fuzz.zip -workdir fuzz -// -// Further input samples should go in the folder fuzz/corpus. -func Fuzz(in []byte) int { - parser := TextParser{} - _, err := parser.TextToMetricFamilies(bytes.NewReader(in)) - - if err != nil { - return 0 - } - - return 1 -} diff --git a/vendor/github.com/prometheus/common/expfmt/text_create.go b/vendor/github.com/prometheus/common/expfmt/text_create.go deleted file mode 100644 index f11321cd0..000000000 --- a/vendor/github.com/prometheus/common/expfmt/text_create.go +++ /dev/null @@ -1,303 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package expfmt - -import ( - "fmt" - "io" - "math" - "strings" - - dto "github.com/prometheus/client_model/go" - "github.com/prometheus/common/model" -) - -// MetricFamilyToText converts a MetricFamily proto message into text format and -// writes the resulting lines to 'out'. It returns the number of bytes written -// and any error encountered. The output will have the same order as the input, -// no further sorting is performed. Furthermore, this function assumes the input -// is already sanitized and does not perform any sanity checks. If the input -// contains duplicate metrics or invalid metric or label names, the conversion -// will result in invalid text format output. -// -// This method fulfills the type 'prometheus.encoder'. -func MetricFamilyToText(out io.Writer, in *dto.MetricFamily) (int, error) { - var written int - - // Fail-fast checks. - if len(in.Metric) == 0 { - return written, fmt.Errorf("MetricFamily has no metrics: %s", in) - } - name := in.GetName() - if name == "" { - return written, fmt.Errorf("MetricFamily has no name: %s", in) - } - - // Comments, first HELP, then TYPE. - if in.Help != nil { - n, err := fmt.Fprintf( - out, "# HELP %s %s\n", - name, escapeString(*in.Help, false), - ) - written += n - if err != nil { - return written, err - } - } - metricType := in.GetType() - n, err := fmt.Fprintf( - out, "# TYPE %s %s\n", - name, strings.ToLower(metricType.String()), - ) - written += n - if err != nil { - return written, err - } - - // Finally the samples, one line for each. - for _, metric := range in.Metric { - switch metricType { - case dto.MetricType_COUNTER: - if metric.Counter == nil { - return written, fmt.Errorf( - "expected counter in metric %s %s", name, metric, - ) - } - n, err = writeSample( - name, metric, "", "", - metric.Counter.GetValue(), - out, - ) - case dto.MetricType_GAUGE: - if metric.Gauge == nil { - return written, fmt.Errorf( - "expected gauge in metric %s %s", name, metric, - ) - } - n, err = writeSample( - name, metric, "", "", - metric.Gauge.GetValue(), - out, - ) - case dto.MetricType_UNTYPED: - if metric.Untyped == nil { - return written, fmt.Errorf( - "expected untyped in metric %s %s", name, metric, - ) - } - n, err = writeSample( - name, metric, "", "", - metric.Untyped.GetValue(), - out, - ) - case dto.MetricType_SUMMARY: - if metric.Summary == nil { - return written, fmt.Errorf( - "expected summary in metric %s %s", name, metric, - ) - } - for _, q := range metric.Summary.Quantile { - n, err = writeSample( - name, metric, - model.QuantileLabel, fmt.Sprint(q.GetQuantile()), - q.GetValue(), - out, - ) - written += n - if err != nil { - return written, err - } - } - n, err = writeSample( - name+"_sum", metric, "", "", - metric.Summary.GetSampleSum(), - out, - ) - if err != nil { - return written, err - } - written += n - n, err = writeSample( - name+"_count", metric, "", "", - float64(metric.Summary.GetSampleCount()), - out, - ) - case dto.MetricType_HISTOGRAM: - if metric.Histogram == nil { - return written, fmt.Errorf( - "expected histogram in metric %s %s", name, metric, - ) - } - infSeen := false - for _, q := range metric.Histogram.Bucket { - n, err = writeSample( - name+"_bucket", metric, - model.BucketLabel, fmt.Sprint(q.GetUpperBound()), - float64(q.GetCumulativeCount()), - out, - ) - written += n - if err != nil { - return written, err - } - if math.IsInf(q.GetUpperBound(), +1) { - infSeen = true - } - } - if !infSeen { - n, err = writeSample( - name+"_bucket", metric, - model.BucketLabel, "+Inf", - float64(metric.Histogram.GetSampleCount()), - out, - ) - if err != nil { - return written, err - } - written += n - } - n, err = writeSample( - name+"_sum", metric, "", "", - metric.Histogram.GetSampleSum(), - out, - ) - if err != nil { - return written, err - } - written += n - n, err = writeSample( - name+"_count", metric, "", "", - float64(metric.Histogram.GetSampleCount()), - out, - ) - default: - return written, fmt.Errorf( - "unexpected type in metric %s %s", name, metric, - ) - } - written += n - if err != nil { - return written, err - } - } - return written, nil -} - -// writeSample writes a single sample in text format to out, given the metric -// name, the metric proto message itself, optionally an additional label name -// and value (use empty strings if not required), and the value. The function -// returns the number of bytes written and any error encountered. -func writeSample( - name string, - metric *dto.Metric, - additionalLabelName, additionalLabelValue string, - value float64, - out io.Writer, -) (int, error) { - var written int - n, err := fmt.Fprint(out, name) - written += n - if err != nil { - return written, err - } - n, err = labelPairsToText( - metric.Label, - additionalLabelName, additionalLabelValue, - out, - ) - written += n - if err != nil { - return written, err - } - n, err = fmt.Fprintf(out, " %v", value) - written += n - if err != nil { - return written, err - } - if metric.TimestampMs != nil { - n, err = fmt.Fprintf(out, " %v", *metric.TimestampMs) - written += n - if err != nil { - return written, err - } - } - n, err = out.Write([]byte{'\n'}) - written += n - if err != nil { - return written, err - } - return written, nil -} - -// labelPairsToText converts a slice of LabelPair proto messages plus the -// explicitly given additional label pair into text formatted as required by the -// text format and writes it to 'out'. An empty slice in combination with an -// empty string 'additionalLabelName' results in nothing being -// written. Otherwise, the label pairs are written, escaped as required by the -// text format, and enclosed in '{...}'. The function returns the number of -// bytes written and any error encountered. -func labelPairsToText( - in []*dto.LabelPair, - additionalLabelName, additionalLabelValue string, - out io.Writer, -) (int, error) { - if len(in) == 0 && additionalLabelName == "" { - return 0, nil - } - var written int - separator := '{' - for _, lp := range in { - n, err := fmt.Fprintf( - out, `%c%s="%s"`, - separator, lp.GetName(), escapeString(lp.GetValue(), true), - ) - written += n - if err != nil { - return written, err - } - separator = ',' - } - if additionalLabelName != "" { - n, err := fmt.Fprintf( - out, `%c%s="%s"`, - separator, additionalLabelName, - escapeString(additionalLabelValue, true), - ) - written += n - if err != nil { - return written, err - } - } - n, err := out.Write([]byte{'}'}) - written += n - if err != nil { - return written, err - } - return written, nil -} - -var ( - escape = strings.NewReplacer("\\", `\\`, "\n", `\n`) - escapeWithDoubleQuote = strings.NewReplacer("\\", `\\`, "\n", `\n`, "\"", `\"`) -) - -// escapeString replaces '\' by '\\', new line character by '\n', and - if -// includeDoubleQuote is true - '"' by '\"'. -func escapeString(v string, includeDoubleQuote bool) string { - if includeDoubleQuote { - return escapeWithDoubleQuote.Replace(v) - } - - return escape.Replace(v) -} diff --git a/vendor/github.com/prometheus/common/expfmt/text_parse.go b/vendor/github.com/prometheus/common/expfmt/text_parse.go deleted file mode 100644 index ec3d86ba7..000000000 --- a/vendor/github.com/prometheus/common/expfmt/text_parse.go +++ /dev/null @@ -1,757 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package expfmt - -import ( - "bufio" - "bytes" - "fmt" - "io" - "math" - "strconv" - "strings" - - dto "github.com/prometheus/client_model/go" - - "github.com/golang/protobuf/proto" - "github.com/prometheus/common/model" -) - -// A stateFn is a function that represents a state in a state machine. By -// executing it, the state is progressed to the next state. The stateFn returns -// another stateFn, which represents the new state. The end state is represented -// by nil. -type stateFn func() stateFn - -// ParseError signals errors while parsing the simple and flat text-based -// exchange format. -type ParseError struct { - Line int - Msg string -} - -// Error implements the error interface. -func (e ParseError) Error() string { - return fmt.Sprintf("text format parsing error in line %d: %s", e.Line, e.Msg) -} - -// TextParser is used to parse the simple and flat text-based exchange format. Its -// zero value is ready to use. -type TextParser struct { - metricFamiliesByName map[string]*dto.MetricFamily - buf *bufio.Reader // Where the parsed input is read through. - err error // Most recent error. - lineCount int // Tracks the line count for error messages. - currentByte byte // The most recent byte read. - currentToken bytes.Buffer // Re-used each time a token has to be gathered from multiple bytes. - currentMF *dto.MetricFamily - currentMetric *dto.Metric - currentLabelPair *dto.LabelPair - - // The remaining member variables are only used for summaries/histograms. - currentLabels map[string]string // All labels including '__name__' but excluding 'quantile'/'le' - // Summary specific. - summaries map[uint64]*dto.Metric // Key is created with LabelsToSignature. - currentQuantile float64 - // Histogram specific. - histograms map[uint64]*dto.Metric // Key is created with LabelsToSignature. - currentBucket float64 - // These tell us if the currently processed line ends on '_count' or - // '_sum' respectively and belong to a summary/histogram, representing the sample - // count and sum of that summary/histogram. - currentIsSummaryCount, currentIsSummarySum bool - currentIsHistogramCount, currentIsHistogramSum bool -} - -// TextToMetricFamilies reads 'in' as the simple and flat text-based exchange -// format and creates MetricFamily proto messages. It returns the MetricFamily -// proto messages in a map where the metric names are the keys, along with any -// error encountered. -// -// If the input contains duplicate metrics (i.e. lines with the same metric name -// and exactly the same label set), the resulting MetricFamily will contain -// duplicate Metric proto messages. Similar is true for duplicate label -// names. Checks for duplicates have to be performed separately, if required. -// Also note that neither the metrics within each MetricFamily are sorted nor -// the label pairs within each Metric. Sorting is not required for the most -// frequent use of this method, which is sample ingestion in the Prometheus -// server. However, for presentation purposes, you might want to sort the -// metrics, and in some cases, you must sort the labels, e.g. for consumption by -// the metric family injection hook of the Prometheus registry. -// -// Summaries and histograms are rather special beasts. You would probably not -// use them in the simple text format anyway. This method can deal with -// summaries and histograms if they are presented in exactly the way the -// text.Create function creates them. -// -// This method must not be called concurrently. If you want to parse different -// input concurrently, instantiate a separate Parser for each goroutine. -func (p *TextParser) TextToMetricFamilies(in io.Reader) (map[string]*dto.MetricFamily, error) { - p.reset(in) - for nextState := p.startOfLine; nextState != nil; nextState = nextState() { - // Magic happens here... - } - // Get rid of empty metric families. - for k, mf := range p.metricFamiliesByName { - if len(mf.GetMetric()) == 0 { - delete(p.metricFamiliesByName, k) - } - } - // If p.err is io.EOF now, we have run into a premature end of the input - // stream. Turn this error into something nicer and more - // meaningful. (io.EOF is often used as a signal for the legitimate end - // of an input stream.) - if p.err == io.EOF { - p.parseError("unexpected end of input stream") - } - return p.metricFamiliesByName, p.err -} - -func (p *TextParser) reset(in io.Reader) { - p.metricFamiliesByName = map[string]*dto.MetricFamily{} - if p.buf == nil { - p.buf = bufio.NewReader(in) - } else { - p.buf.Reset(in) - } - p.err = nil - p.lineCount = 0 - if p.summaries == nil || len(p.summaries) > 0 { - p.summaries = map[uint64]*dto.Metric{} - } - if p.histograms == nil || len(p.histograms) > 0 { - p.histograms = map[uint64]*dto.Metric{} - } - p.currentQuantile = math.NaN() - p.currentBucket = math.NaN() -} - -// startOfLine represents the state where the next byte read from p.buf is the -// start of a line (or whitespace leading up to it). -func (p *TextParser) startOfLine() stateFn { - p.lineCount++ - if p.skipBlankTab(); p.err != nil { - // End of input reached. This is the only case where - // that is not an error but a signal that we are done. - p.err = nil - return nil - } - switch p.currentByte { - case '#': - return p.startComment - case '\n': - return p.startOfLine // Empty line, start the next one. - } - return p.readingMetricName -} - -// startComment represents the state where the next byte read from p.buf is the -// start of a comment (or whitespace leading up to it). -func (p *TextParser) startComment() stateFn { - if p.skipBlankTab(); p.err != nil { - return nil // Unexpected end of input. - } - if p.currentByte == '\n' { - return p.startOfLine - } - if p.readTokenUntilWhitespace(); p.err != nil { - return nil // Unexpected end of input. - } - // If we have hit the end of line already, there is nothing left - // to do. This is not considered a syntax error. - if p.currentByte == '\n' { - return p.startOfLine - } - keyword := p.currentToken.String() - if keyword != "HELP" && keyword != "TYPE" { - // Generic comment, ignore by fast forwarding to end of line. - for p.currentByte != '\n' { - if p.currentByte, p.err = p.buf.ReadByte(); p.err != nil { - return nil // Unexpected end of input. - } - } - return p.startOfLine - } - // There is something. Next has to be a metric name. - if p.skipBlankTab(); p.err != nil { - return nil // Unexpected end of input. - } - if p.readTokenAsMetricName(); p.err != nil { - return nil // Unexpected end of input. - } - if p.currentByte == '\n' { - // At the end of the line already. - // Again, this is not considered a syntax error. - return p.startOfLine - } - if !isBlankOrTab(p.currentByte) { - p.parseError("invalid metric name in comment") - return nil - } - p.setOrCreateCurrentMF() - if p.skipBlankTab(); p.err != nil { - return nil // Unexpected end of input. - } - if p.currentByte == '\n' { - // At the end of the line already. - // Again, this is not considered a syntax error. - return p.startOfLine - } - switch keyword { - case "HELP": - return p.readingHelp - case "TYPE": - return p.readingType - } - panic(fmt.Sprintf("code error: unexpected keyword %q", keyword)) -} - -// readingMetricName represents the state where the last byte read (now in -// p.currentByte) is the first byte of a metric name. -func (p *TextParser) readingMetricName() stateFn { - if p.readTokenAsMetricName(); p.err != nil { - return nil - } - if p.currentToken.Len() == 0 { - p.parseError("invalid metric name") - return nil - } - p.setOrCreateCurrentMF() - // Now is the time to fix the type if it hasn't happened yet. - if p.currentMF.Type == nil { - p.currentMF.Type = dto.MetricType_UNTYPED.Enum() - } - p.currentMetric = &dto.Metric{} - // Do not append the newly created currentMetric to - // currentMF.Metric right now. First wait if this is a summary, - // and the metric exists already, which we can only know after - // having read all the labels. - if p.skipBlankTabIfCurrentBlankTab(); p.err != nil { - return nil // Unexpected end of input. - } - return p.readingLabels -} - -// readingLabels represents the state where the last byte read (now in -// p.currentByte) is either the first byte of the label set (i.e. a '{'), or the -// first byte of the value (otherwise). -func (p *TextParser) readingLabels() stateFn { - // Summaries/histograms are special. We have to reset the - // currentLabels map, currentQuantile and currentBucket before starting to - // read labels. - if p.currentMF.GetType() == dto.MetricType_SUMMARY || p.currentMF.GetType() == dto.MetricType_HISTOGRAM { - p.currentLabels = map[string]string{} - p.currentLabels[string(model.MetricNameLabel)] = p.currentMF.GetName() - p.currentQuantile = math.NaN() - p.currentBucket = math.NaN() - } - if p.currentByte != '{' { - return p.readingValue - } - return p.startLabelName -} - -// startLabelName represents the state where the next byte read from p.buf is -// the start of a label name (or whitespace leading up to it). -func (p *TextParser) startLabelName() stateFn { - if p.skipBlankTab(); p.err != nil { - return nil // Unexpected end of input. - } - if p.currentByte == '}' { - if p.skipBlankTab(); p.err != nil { - return nil // Unexpected end of input. - } - return p.readingValue - } - if p.readTokenAsLabelName(); p.err != nil { - return nil // Unexpected end of input. - } - if p.currentToken.Len() == 0 { - p.parseError(fmt.Sprintf("invalid label name for metric %q", p.currentMF.GetName())) - return nil - } - p.currentLabelPair = &dto.LabelPair{Name: proto.String(p.currentToken.String())} - if p.currentLabelPair.GetName() == string(model.MetricNameLabel) { - p.parseError(fmt.Sprintf("label name %q is reserved", model.MetricNameLabel)) - return nil - } - // Special summary/histogram treatment. Don't add 'quantile' and 'le' - // labels to 'real' labels. - if !(p.currentMF.GetType() == dto.MetricType_SUMMARY && p.currentLabelPair.GetName() == model.QuantileLabel) && - !(p.currentMF.GetType() == dto.MetricType_HISTOGRAM && p.currentLabelPair.GetName() == model.BucketLabel) { - p.currentMetric.Label = append(p.currentMetric.Label, p.currentLabelPair) - } - if p.skipBlankTabIfCurrentBlankTab(); p.err != nil { - return nil // Unexpected end of input. - } - if p.currentByte != '=' { - p.parseError(fmt.Sprintf("expected '=' after label name, found %q", p.currentByte)) - return nil - } - return p.startLabelValue -} - -// startLabelValue represents the state where the next byte read from p.buf is -// the start of a (quoted) label value (or whitespace leading up to it). -func (p *TextParser) startLabelValue() stateFn { - if p.skipBlankTab(); p.err != nil { - return nil // Unexpected end of input. - } - if p.currentByte != '"' { - p.parseError(fmt.Sprintf("expected '\"' at start of label value, found %q", p.currentByte)) - return nil - } - if p.readTokenAsLabelValue(); p.err != nil { - return nil - } - if !model.LabelValue(p.currentToken.String()).IsValid() { - p.parseError(fmt.Sprintf("invalid label value %q", p.currentToken.String())) - return nil - } - p.currentLabelPair.Value = proto.String(p.currentToken.String()) - // Special treatment of summaries: - // - Quantile labels are special, will result in dto.Quantile later. - // - Other labels have to be added to currentLabels for signature calculation. - if p.currentMF.GetType() == dto.MetricType_SUMMARY { - if p.currentLabelPair.GetName() == model.QuantileLabel { - if p.currentQuantile, p.err = strconv.ParseFloat(p.currentLabelPair.GetValue(), 64); p.err != nil { - // Create a more helpful error message. - p.parseError(fmt.Sprintf("expected float as value for 'quantile' label, got %q", p.currentLabelPair.GetValue())) - return nil - } - } else { - p.currentLabels[p.currentLabelPair.GetName()] = p.currentLabelPair.GetValue() - } - } - // Similar special treatment of histograms. - if p.currentMF.GetType() == dto.MetricType_HISTOGRAM { - if p.currentLabelPair.GetName() == model.BucketLabel { - if p.currentBucket, p.err = strconv.ParseFloat(p.currentLabelPair.GetValue(), 64); p.err != nil { - // Create a more helpful error message. - p.parseError(fmt.Sprintf("expected float as value for 'le' label, got %q", p.currentLabelPair.GetValue())) - return nil - } - } else { - p.currentLabels[p.currentLabelPair.GetName()] = p.currentLabelPair.GetValue() - } - } - if p.skipBlankTab(); p.err != nil { - return nil // Unexpected end of input. - } - switch p.currentByte { - case ',': - return p.startLabelName - - case '}': - if p.skipBlankTab(); p.err != nil { - return nil // Unexpected end of input. - } - return p.readingValue - default: - p.parseError(fmt.Sprintf("unexpected end of label value %q", p.currentLabelPair.GetValue())) - return nil - } -} - -// readingValue represents the state where the last byte read (now in -// p.currentByte) is the first byte of the sample value (i.e. a float). -func (p *TextParser) readingValue() stateFn { - // When we are here, we have read all the labels, so for the - // special case of a summary/histogram, we can finally find out - // if the metric already exists. - if p.currentMF.GetType() == dto.MetricType_SUMMARY { - signature := model.LabelsToSignature(p.currentLabels) - if summary := p.summaries[signature]; summary != nil { - p.currentMetric = summary - } else { - p.summaries[signature] = p.currentMetric - p.currentMF.Metric = append(p.currentMF.Metric, p.currentMetric) - } - } else if p.currentMF.GetType() == dto.MetricType_HISTOGRAM { - signature := model.LabelsToSignature(p.currentLabels) - if histogram := p.histograms[signature]; histogram != nil { - p.currentMetric = histogram - } else { - p.histograms[signature] = p.currentMetric - p.currentMF.Metric = append(p.currentMF.Metric, p.currentMetric) - } - } else { - p.currentMF.Metric = append(p.currentMF.Metric, p.currentMetric) - } - if p.readTokenUntilWhitespace(); p.err != nil { - return nil // Unexpected end of input. - } - value, err := strconv.ParseFloat(p.currentToken.String(), 64) - if err != nil { - // Create a more helpful error message. - p.parseError(fmt.Sprintf("expected float as value, got %q", p.currentToken.String())) - return nil - } - switch p.currentMF.GetType() { - case dto.MetricType_COUNTER: - p.currentMetric.Counter = &dto.Counter{Value: proto.Float64(value)} - case dto.MetricType_GAUGE: - p.currentMetric.Gauge = &dto.Gauge{Value: proto.Float64(value)} - case dto.MetricType_UNTYPED: - p.currentMetric.Untyped = &dto.Untyped{Value: proto.Float64(value)} - case dto.MetricType_SUMMARY: - // *sigh* - if p.currentMetric.Summary == nil { - p.currentMetric.Summary = &dto.Summary{} - } - switch { - case p.currentIsSummaryCount: - p.currentMetric.Summary.SampleCount = proto.Uint64(uint64(value)) - case p.currentIsSummarySum: - p.currentMetric.Summary.SampleSum = proto.Float64(value) - case !math.IsNaN(p.currentQuantile): - p.currentMetric.Summary.Quantile = append( - p.currentMetric.Summary.Quantile, - &dto.Quantile{ - Quantile: proto.Float64(p.currentQuantile), - Value: proto.Float64(value), - }, - ) - } - case dto.MetricType_HISTOGRAM: - // *sigh* - if p.currentMetric.Histogram == nil { - p.currentMetric.Histogram = &dto.Histogram{} - } - switch { - case p.currentIsHistogramCount: - p.currentMetric.Histogram.SampleCount = proto.Uint64(uint64(value)) - case p.currentIsHistogramSum: - p.currentMetric.Histogram.SampleSum = proto.Float64(value) - case !math.IsNaN(p.currentBucket): - p.currentMetric.Histogram.Bucket = append( - p.currentMetric.Histogram.Bucket, - &dto.Bucket{ - UpperBound: proto.Float64(p.currentBucket), - CumulativeCount: proto.Uint64(uint64(value)), - }, - ) - } - default: - p.err = fmt.Errorf("unexpected type for metric name %q", p.currentMF.GetName()) - } - if p.currentByte == '\n' { - return p.startOfLine - } - return p.startTimestamp -} - -// startTimestamp represents the state where the next byte read from p.buf is -// the start of the timestamp (or whitespace leading up to it). -func (p *TextParser) startTimestamp() stateFn { - if p.skipBlankTab(); p.err != nil { - return nil // Unexpected end of input. - } - if p.readTokenUntilWhitespace(); p.err != nil { - return nil // Unexpected end of input. - } - timestamp, err := strconv.ParseInt(p.currentToken.String(), 10, 64) - if err != nil { - // Create a more helpful error message. - p.parseError(fmt.Sprintf("expected integer as timestamp, got %q", p.currentToken.String())) - return nil - } - p.currentMetric.TimestampMs = proto.Int64(timestamp) - if p.readTokenUntilNewline(false); p.err != nil { - return nil // Unexpected end of input. - } - if p.currentToken.Len() > 0 { - p.parseError(fmt.Sprintf("spurious string after timestamp: %q", p.currentToken.String())) - return nil - } - return p.startOfLine -} - -// readingHelp represents the state where the last byte read (now in -// p.currentByte) is the first byte of the docstring after 'HELP'. -func (p *TextParser) readingHelp() stateFn { - if p.currentMF.Help != nil { - p.parseError(fmt.Sprintf("second HELP line for metric name %q", p.currentMF.GetName())) - return nil - } - // Rest of line is the docstring. - if p.readTokenUntilNewline(true); p.err != nil { - return nil // Unexpected end of input. - } - p.currentMF.Help = proto.String(p.currentToken.String()) - return p.startOfLine -} - -// readingType represents the state where the last byte read (now in -// p.currentByte) is the first byte of the type hint after 'HELP'. -func (p *TextParser) readingType() stateFn { - if p.currentMF.Type != nil { - p.parseError(fmt.Sprintf("second TYPE line for metric name %q, or TYPE reported after samples", p.currentMF.GetName())) - return nil - } - // Rest of line is the type. - if p.readTokenUntilNewline(false); p.err != nil { - return nil // Unexpected end of input. - } - metricType, ok := dto.MetricType_value[strings.ToUpper(p.currentToken.String())] - if !ok { - p.parseError(fmt.Sprintf("unknown metric type %q", p.currentToken.String())) - return nil - } - p.currentMF.Type = dto.MetricType(metricType).Enum() - return p.startOfLine -} - -// parseError sets p.err to a ParseError at the current line with the given -// message. -func (p *TextParser) parseError(msg string) { - p.err = ParseError{ - Line: p.lineCount, - Msg: msg, - } -} - -// skipBlankTab reads (and discards) bytes from p.buf until it encounters a byte -// that is neither ' ' nor '\t'. That byte is left in p.currentByte. -func (p *TextParser) skipBlankTab() { - for { - if p.currentByte, p.err = p.buf.ReadByte(); p.err != nil || !isBlankOrTab(p.currentByte) { - return - } - } -} - -// skipBlankTabIfCurrentBlankTab works exactly as skipBlankTab but doesn't do -// anything if p.currentByte is neither ' ' nor '\t'. -func (p *TextParser) skipBlankTabIfCurrentBlankTab() { - if isBlankOrTab(p.currentByte) { - p.skipBlankTab() - } -} - -// readTokenUntilWhitespace copies bytes from p.buf into p.currentToken. The -// first byte considered is the byte already read (now in p.currentByte). The -// first whitespace byte encountered is still copied into p.currentByte, but not -// into p.currentToken. -func (p *TextParser) readTokenUntilWhitespace() { - p.currentToken.Reset() - for p.err == nil && !isBlankOrTab(p.currentByte) && p.currentByte != '\n' { - p.currentToken.WriteByte(p.currentByte) - p.currentByte, p.err = p.buf.ReadByte() - } -} - -// readTokenUntilNewline copies bytes from p.buf into p.currentToken. The first -// byte considered is the byte already read (now in p.currentByte). The first -// newline byte encountered is still copied into p.currentByte, but not into -// p.currentToken. If recognizeEscapeSequence is true, two escape sequences are -// recognized: '\\' translates into '\', and '\n' into a line-feed character. -// All other escape sequences are invalid and cause an error. -func (p *TextParser) readTokenUntilNewline(recognizeEscapeSequence bool) { - p.currentToken.Reset() - escaped := false - for p.err == nil { - if recognizeEscapeSequence && escaped { - switch p.currentByte { - case '\\': - p.currentToken.WriteByte(p.currentByte) - case 'n': - p.currentToken.WriteByte('\n') - default: - p.parseError(fmt.Sprintf("invalid escape sequence '\\%c'", p.currentByte)) - return - } - escaped = false - } else { - switch p.currentByte { - case '\n': - return - case '\\': - escaped = true - default: - p.currentToken.WriteByte(p.currentByte) - } - } - p.currentByte, p.err = p.buf.ReadByte() - } -} - -// readTokenAsMetricName copies a metric name from p.buf into p.currentToken. -// The first byte considered is the byte already read (now in p.currentByte). -// The first byte not part of a metric name is still copied into p.currentByte, -// but not into p.currentToken. -func (p *TextParser) readTokenAsMetricName() { - p.currentToken.Reset() - if !isValidMetricNameStart(p.currentByte) { - return - } - for { - p.currentToken.WriteByte(p.currentByte) - p.currentByte, p.err = p.buf.ReadByte() - if p.err != nil || !isValidMetricNameContinuation(p.currentByte) { - return - } - } -} - -// readTokenAsLabelName copies a label name from p.buf into p.currentToken. -// The first byte considered is the byte already read (now in p.currentByte). -// The first byte not part of a label name is still copied into p.currentByte, -// but not into p.currentToken. -func (p *TextParser) readTokenAsLabelName() { - p.currentToken.Reset() - if !isValidLabelNameStart(p.currentByte) { - return - } - for { - p.currentToken.WriteByte(p.currentByte) - p.currentByte, p.err = p.buf.ReadByte() - if p.err != nil || !isValidLabelNameContinuation(p.currentByte) { - return - } - } -} - -// readTokenAsLabelValue copies a label value from p.buf into p.currentToken. -// In contrast to the other 'readTokenAs...' functions, which start with the -// last read byte in p.currentByte, this method ignores p.currentByte and starts -// with reading a new byte from p.buf. The first byte not part of a label value -// is still copied into p.currentByte, but not into p.currentToken. -func (p *TextParser) readTokenAsLabelValue() { - p.currentToken.Reset() - escaped := false - for { - if p.currentByte, p.err = p.buf.ReadByte(); p.err != nil { - return - } - if escaped { - switch p.currentByte { - case '"', '\\': - p.currentToken.WriteByte(p.currentByte) - case 'n': - p.currentToken.WriteByte('\n') - default: - p.parseError(fmt.Sprintf("invalid escape sequence '\\%c'", p.currentByte)) - return - } - escaped = false - continue - } - switch p.currentByte { - case '"': - return - case '\n': - p.parseError(fmt.Sprintf("label value %q contains unescaped new-line", p.currentToken.String())) - return - case '\\': - escaped = true - default: - p.currentToken.WriteByte(p.currentByte) - } - } -} - -func (p *TextParser) setOrCreateCurrentMF() { - p.currentIsSummaryCount = false - p.currentIsSummarySum = false - p.currentIsHistogramCount = false - p.currentIsHistogramSum = false - name := p.currentToken.String() - if p.currentMF = p.metricFamiliesByName[name]; p.currentMF != nil { - return - } - // Try out if this is a _sum or _count for a summary/histogram. - summaryName := summaryMetricName(name) - if p.currentMF = p.metricFamiliesByName[summaryName]; p.currentMF != nil { - if p.currentMF.GetType() == dto.MetricType_SUMMARY { - if isCount(name) { - p.currentIsSummaryCount = true - } - if isSum(name) { - p.currentIsSummarySum = true - } - return - } - } - histogramName := histogramMetricName(name) - if p.currentMF = p.metricFamiliesByName[histogramName]; p.currentMF != nil { - if p.currentMF.GetType() == dto.MetricType_HISTOGRAM { - if isCount(name) { - p.currentIsHistogramCount = true - } - if isSum(name) { - p.currentIsHistogramSum = true - } - return - } - } - p.currentMF = &dto.MetricFamily{Name: proto.String(name)} - p.metricFamiliesByName[name] = p.currentMF -} - -func isValidLabelNameStart(b byte) bool { - return (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' -} - -func isValidLabelNameContinuation(b byte) bool { - return isValidLabelNameStart(b) || (b >= '0' && b <= '9') -} - -func isValidMetricNameStart(b byte) bool { - return isValidLabelNameStart(b) || b == ':' -} - -func isValidMetricNameContinuation(b byte) bool { - return isValidLabelNameContinuation(b) || b == ':' -} - -func isBlankOrTab(b byte) bool { - return b == ' ' || b == '\t' -} - -func isCount(name string) bool { - return len(name) > 6 && name[len(name)-6:] == "_count" -} - -func isSum(name string) bool { - return len(name) > 4 && name[len(name)-4:] == "_sum" -} - -func isBucket(name string) bool { - return len(name) > 7 && name[len(name)-7:] == "_bucket" -} - -func summaryMetricName(name string) string { - switch { - case isCount(name): - return name[:len(name)-6] - case isSum(name): - return name[:len(name)-4] - default: - return name - } -} - -func histogramMetricName(name string) string { - switch { - case isCount(name): - return name[:len(name)-6] - case isSum(name): - return name[:len(name)-4] - case isBucket(name): - return name[:len(name)-7] - default: - return name - } -} diff --git a/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt b/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt deleted file mode 100644 index 7723656d5..000000000 --- a/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/README.txt +++ /dev/null @@ -1,67 +0,0 @@ -PACKAGE - -package goautoneg -import "bitbucket.org/ww/goautoneg" - -HTTP Content-Type Autonegotiation. - -The functions in this package implement the behaviour specified in -http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html - -Copyright (c) 2011, Open Knowledge Foundation Ltd. -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 Open Knowledge Foundation Ltd. 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. - - -FUNCTIONS - -func Negotiate(header string, alternatives []string) (content_type string) -Negotiate the most appropriate content_type given the accept header -and a list of alternatives. - -func ParseAccept(header string) (accept []Accept) -Parse an Accept Header string returning a sorted list -of clauses - - -TYPES - -type Accept struct { - Type, SubType string - Q float32 - Params map[string]string -} -Structure to represent a clause in an HTTP Accept Header - - -SUBDIRECTORIES - - .hg diff --git a/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/autoneg.go b/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/autoneg.go deleted file mode 100644 index 648b38cb6..000000000 --- a/vendor/github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg/autoneg.go +++ /dev/null @@ -1,162 +0,0 @@ -/* -HTTP Content-Type Autonegotiation. - -The functions in this package implement the behaviour specified in -http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html - -Copyright (c) 2011, Open Knowledge Foundation Ltd. -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 Open Knowledge Foundation Ltd. 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. - - -*/ -package goautoneg - -import ( - "sort" - "strconv" - "strings" -) - -// Structure to represent a clause in an HTTP Accept Header -type Accept struct { - Type, SubType string - Q float64 - Params map[string]string -} - -// For internal use, so that we can use the sort interface -type accept_slice []Accept - -func (accept accept_slice) Len() int { - slice := []Accept(accept) - return len(slice) -} - -func (accept accept_slice) Less(i, j int) bool { - slice := []Accept(accept) - ai, aj := slice[i], slice[j] - if ai.Q > aj.Q { - return true - } - if ai.Type != "*" && aj.Type == "*" { - return true - } - if ai.SubType != "*" && aj.SubType == "*" { - return true - } - return false -} - -func (accept accept_slice) Swap(i, j int) { - slice := []Accept(accept) - slice[i], slice[j] = slice[j], slice[i] -} - -// Parse an Accept Header string returning a sorted list -// of clauses -func ParseAccept(header string) (accept []Accept) { - parts := strings.Split(header, ",") - accept = make([]Accept, 0, len(parts)) - for _, part := range parts { - part := strings.Trim(part, " ") - - a := Accept{} - a.Params = make(map[string]string) - a.Q = 1.0 - - mrp := strings.Split(part, ";") - - media_range := mrp[0] - sp := strings.Split(media_range, "/") - a.Type = strings.Trim(sp[0], " ") - - switch { - case len(sp) == 1 && a.Type == "*": - a.SubType = "*" - case len(sp) == 2: - a.SubType = strings.Trim(sp[1], " ") - default: - continue - } - - if len(mrp) == 1 { - accept = append(accept, a) - continue - } - - for _, param := range mrp[1:] { - sp := strings.SplitN(param, "=", 2) - if len(sp) != 2 { - continue - } - token := strings.Trim(sp[0], " ") - if token == "q" { - a.Q, _ = strconv.ParseFloat(sp[1], 32) - } else { - a.Params[token] = strings.Trim(sp[1], " ") - } - } - - accept = append(accept, a) - } - - slice := accept_slice(accept) - sort.Sort(slice) - - return -} - -// Negotiate the most appropriate content_type given the accept header -// and a list of alternatives. -func Negotiate(header string, alternatives []string) (content_type string) { - asp := make([][]string, 0, len(alternatives)) - for _, ctype := range alternatives { - asp = append(asp, strings.SplitN(ctype, "/", 2)) - } - for _, clause := range ParseAccept(header) { - for i, ctsp := range asp { - if clause.Type == ctsp[0] && clause.SubType == ctsp[1] { - content_type = alternatives[i] - return - } - if clause.Type == ctsp[0] && clause.SubType == "*" { - content_type = alternatives[i] - return - } - if clause.Type == "*" && clause.SubType == "*" { - content_type = alternatives[i] - return - } - } - } - return -} diff --git a/vendor/github.com/prometheus/common/model/alert.go b/vendor/github.com/prometheus/common/model/alert.go deleted file mode 100644 index 35e739c7a..000000000 --- a/vendor/github.com/prometheus/common/model/alert.go +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2013 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -import ( - "fmt" - "time" -) - -type AlertStatus string - -const ( - AlertFiring AlertStatus = "firing" - AlertResolved AlertStatus = "resolved" -) - -// Alert is a generic representation of an alert in the Prometheus eco-system. -type Alert struct { - // Label value pairs for purpose of aggregation, matching, and disposition - // dispatching. This must minimally include an "alertname" label. - Labels LabelSet `json:"labels"` - - // Extra key/value information which does not define alert identity. - Annotations LabelSet `json:"annotations"` - - // The known time range for this alert. Both ends are optional. - StartsAt time.Time `json:"startsAt,omitempty"` - EndsAt time.Time `json:"endsAt,omitempty"` - GeneratorURL string `json:"generatorURL"` -} - -// Name returns the name of the alert. It is equivalent to the "alertname" label. -func (a *Alert) Name() string { - return string(a.Labels[AlertNameLabel]) -} - -// Fingerprint returns a unique hash for the alert. It is equivalent to -// the fingerprint of the alert's label set. -func (a *Alert) Fingerprint() Fingerprint { - return a.Labels.Fingerprint() -} - -func (a *Alert) String() string { - s := fmt.Sprintf("%s[%s]", a.Name(), a.Fingerprint().String()[:7]) - if a.Resolved() { - return s + "[resolved]" - } - return s + "[active]" -} - -// Resolved returns true iff the activity interval ended in the past. -func (a *Alert) Resolved() bool { - return a.ResolvedAt(time.Now()) -} - -// ResolvedAt returns true off the activity interval ended before -// the given timestamp. -func (a *Alert) ResolvedAt(ts time.Time) bool { - if a.EndsAt.IsZero() { - return false - } - return !a.EndsAt.After(ts) -} - -// Status returns the status of the alert. -func (a *Alert) Status() AlertStatus { - if a.Resolved() { - return AlertResolved - } - return AlertFiring -} - -// Validate checks whether the alert data is inconsistent. -func (a *Alert) Validate() error { - if a.StartsAt.IsZero() { - return fmt.Errorf("start time missing") - } - if !a.EndsAt.IsZero() && a.EndsAt.Before(a.StartsAt) { - return fmt.Errorf("start time must be before end time") - } - if err := a.Labels.Validate(); err != nil { - return fmt.Errorf("invalid label set: %s", err) - } - if len(a.Labels) == 0 { - return fmt.Errorf("at least one label pair required") - } - if err := a.Annotations.Validate(); err != nil { - return fmt.Errorf("invalid annotations: %s", err) - } - return nil -} - -// Alert is a list of alerts that can be sorted in chronological order. -type Alerts []*Alert - -func (as Alerts) Len() int { return len(as) } -func (as Alerts) Swap(i, j int) { as[i], as[j] = as[j], as[i] } - -func (as Alerts) Less(i, j int) bool { - if as[i].StartsAt.Before(as[j].StartsAt) { - return true - } - if as[i].EndsAt.Before(as[j].EndsAt) { - return true - } - return as[i].Fingerprint() < as[j].Fingerprint() -} - -// HasFiring returns true iff one of the alerts is not resolved. -func (as Alerts) HasFiring() bool { - for _, a := range as { - if !a.Resolved() { - return true - } - } - return false -} - -// Status returns StatusFiring iff at least one of the alerts is firing. -func (as Alerts) Status() AlertStatus { - if as.HasFiring() { - return AlertFiring - } - return AlertResolved -} diff --git a/vendor/github.com/prometheus/common/model/fingerprinting.go b/vendor/github.com/prometheus/common/model/fingerprinting.go deleted file mode 100644 index fc4de4106..000000000 --- a/vendor/github.com/prometheus/common/model/fingerprinting.go +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2013 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -import ( - "fmt" - "strconv" -) - -// Fingerprint provides a hash-capable representation of a Metric. -// For our purposes, FNV-1A 64-bit is used. -type Fingerprint uint64 - -// FingerprintFromString transforms a string representation into a Fingerprint. -func FingerprintFromString(s string) (Fingerprint, error) { - num, err := strconv.ParseUint(s, 16, 64) - return Fingerprint(num), err -} - -// ParseFingerprint parses the input string into a fingerprint. -func ParseFingerprint(s string) (Fingerprint, error) { - num, err := strconv.ParseUint(s, 16, 64) - if err != nil { - return 0, err - } - return Fingerprint(num), nil -} - -func (f Fingerprint) String() string { - return fmt.Sprintf("%016x", uint64(f)) -} - -// Fingerprints represents a collection of Fingerprint subject to a given -// natural sorting scheme. It implements sort.Interface. -type Fingerprints []Fingerprint - -// Len implements sort.Interface. -func (f Fingerprints) Len() int { - return len(f) -} - -// Less implements sort.Interface. -func (f Fingerprints) Less(i, j int) bool { - return f[i] < f[j] -} - -// Swap implements sort.Interface. -func (f Fingerprints) Swap(i, j int) { - f[i], f[j] = f[j], f[i] -} - -// FingerprintSet is a set of Fingerprints. -type FingerprintSet map[Fingerprint]struct{} - -// Equal returns true if both sets contain the same elements (and not more). -func (s FingerprintSet) Equal(o FingerprintSet) bool { - if len(s) != len(o) { - return false - } - - for k := range s { - if _, ok := o[k]; !ok { - return false - } - } - - return true -} - -// Intersection returns the elements contained in both sets. -func (s FingerprintSet) Intersection(o FingerprintSet) FingerprintSet { - myLength, otherLength := len(s), len(o) - if myLength == 0 || otherLength == 0 { - return FingerprintSet{} - } - - subSet := s - superSet := o - - if otherLength < myLength { - subSet = o - superSet = s - } - - out := FingerprintSet{} - - for k := range subSet { - if _, ok := superSet[k]; ok { - out[k] = struct{}{} - } - } - - return out -} diff --git a/vendor/github.com/prometheus/common/model/fnv.go b/vendor/github.com/prometheus/common/model/fnv.go deleted file mode 100644 index 038fc1c90..000000000 --- a/vendor/github.com/prometheus/common/model/fnv.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2015 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -// Inline and byte-free variant of hash/fnv's fnv64a. - -const ( - offset64 = 14695981039346656037 - prime64 = 1099511628211 -) - -// hashNew initializies a new fnv64a hash value. -func hashNew() uint64 { - return offset64 -} - -// hashAdd adds a string to a fnv64a hash value, returning the updated hash. -func hashAdd(h uint64, s string) uint64 { - for i := 0; i < len(s); i++ { - h ^= uint64(s[i]) - h *= prime64 - } - return h -} - -// hashAddByte adds a byte to a fnv64a hash value, returning the updated hash. -func hashAddByte(h uint64, b byte) uint64 { - h ^= uint64(b) - h *= prime64 - return h -} diff --git a/vendor/github.com/prometheus/common/model/labels.go b/vendor/github.com/prometheus/common/model/labels.go deleted file mode 100644 index 41051a01a..000000000 --- a/vendor/github.com/prometheus/common/model/labels.go +++ /dev/null @@ -1,210 +0,0 @@ -// Copyright 2013 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -import ( - "encoding/json" - "fmt" - "regexp" - "strings" - "unicode/utf8" -) - -const ( - // AlertNameLabel is the name of the label containing the an alert's name. - AlertNameLabel = "alertname" - - // ExportedLabelPrefix is the prefix to prepend to the label names present in - // exported metrics if a label of the same name is added by the server. - ExportedLabelPrefix = "exported_" - - // MetricNameLabel is the label name indicating the metric name of a - // timeseries. - MetricNameLabel = "__name__" - - // SchemeLabel is the name of the label that holds the scheme on which to - // scrape a target. - SchemeLabel = "__scheme__" - - // AddressLabel is the name of the label that holds the address of - // a scrape target. - AddressLabel = "__address__" - - // MetricsPathLabel is the name of the label that holds the path on which to - // scrape a target. - MetricsPathLabel = "__metrics_path__" - - // ReservedLabelPrefix is a prefix which is not legal in user-supplied - // label names. - ReservedLabelPrefix = "__" - - // MetaLabelPrefix is a prefix for labels that provide meta information. - // Labels with this prefix are used for intermediate label processing and - // will not be attached to time series. - MetaLabelPrefix = "__meta_" - - // TmpLabelPrefix is a prefix for temporary labels as part of relabelling. - // Labels with this prefix are used for intermediate label processing and - // will not be attached to time series. This is reserved for use in - // Prometheus configuration files by users. - TmpLabelPrefix = "__tmp_" - - // ParamLabelPrefix is a prefix for labels that provide URL parameters - // used to scrape a target. - ParamLabelPrefix = "__param_" - - // JobLabel is the label name indicating the job from which a timeseries - // was scraped. - JobLabel = "job" - - // InstanceLabel is the label name used for the instance label. - InstanceLabel = "instance" - - // BucketLabel is used for the label that defines the upper bound of a - // bucket of a histogram ("le" -> "less or equal"). - BucketLabel = "le" - - // QuantileLabel is used for the label that defines the quantile in a - // summary. - QuantileLabel = "quantile" -) - -// LabelNameRE is a regular expression matching valid label names. Note that the -// IsValid method of LabelName performs the same check but faster than a match -// with this regular expression. -var LabelNameRE = regexp.MustCompile("^[a-zA-Z_][a-zA-Z0-9_]*$") - -// A LabelName is a key for a LabelSet or Metric. It has a value associated -// therewith. -type LabelName string - -// IsValid is true iff the label name matches the pattern of LabelNameRE. This -// method, however, does not use LabelNameRE for the check but a much faster -// hardcoded implementation. -func (ln LabelName) IsValid() bool { - if len(ln) == 0 { - return false - } - for i, b := range ln { - if !((b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' || (b >= '0' && b <= '9' && i > 0)) { - return false - } - } - return true -} - -// UnmarshalYAML implements the yaml.Unmarshaler interface. -func (ln *LabelName) UnmarshalYAML(unmarshal func(interface{}) error) error { - var s string - if err := unmarshal(&s); err != nil { - return err - } - if !LabelName(s).IsValid() { - return fmt.Errorf("%q is not a valid label name", s) - } - *ln = LabelName(s) - return nil -} - -// UnmarshalJSON implements the json.Unmarshaler interface. -func (ln *LabelName) UnmarshalJSON(b []byte) error { - var s string - if err := json.Unmarshal(b, &s); err != nil { - return err - } - if !LabelName(s).IsValid() { - return fmt.Errorf("%q is not a valid label name", s) - } - *ln = LabelName(s) - return nil -} - -// LabelNames is a sortable LabelName slice. In implements sort.Interface. -type LabelNames []LabelName - -func (l LabelNames) Len() int { - return len(l) -} - -func (l LabelNames) Less(i, j int) bool { - return l[i] < l[j] -} - -func (l LabelNames) Swap(i, j int) { - l[i], l[j] = l[j], l[i] -} - -func (l LabelNames) String() string { - labelStrings := make([]string, 0, len(l)) - for _, label := range l { - labelStrings = append(labelStrings, string(label)) - } - return strings.Join(labelStrings, ", ") -} - -// A LabelValue is an associated value for a LabelName. -type LabelValue string - -// IsValid returns true iff the string is a valid UTF8. -func (lv LabelValue) IsValid() bool { - return utf8.ValidString(string(lv)) -} - -// LabelValues is a sortable LabelValue slice. It implements sort.Interface. -type LabelValues []LabelValue - -func (l LabelValues) Len() int { - return len(l) -} - -func (l LabelValues) Less(i, j int) bool { - return string(l[i]) < string(l[j]) -} - -func (l LabelValues) Swap(i, j int) { - l[i], l[j] = l[j], l[i] -} - -// LabelPair pairs a name with a value. -type LabelPair struct { - Name LabelName - Value LabelValue -} - -// LabelPairs is a sortable slice of LabelPair pointers. It implements -// sort.Interface. -type LabelPairs []*LabelPair - -func (l LabelPairs) Len() int { - return len(l) -} - -func (l LabelPairs) Less(i, j int) bool { - switch { - case l[i].Name > l[j].Name: - return false - case l[i].Name < l[j].Name: - return true - case l[i].Value > l[j].Value: - return false - case l[i].Value < l[j].Value: - return true - default: - return false - } -} - -func (l LabelPairs) Swap(i, j int) { - l[i], l[j] = l[j], l[i] -} diff --git a/vendor/github.com/prometheus/common/model/labelset.go b/vendor/github.com/prometheus/common/model/labelset.go deleted file mode 100644 index 6eda08a73..000000000 --- a/vendor/github.com/prometheus/common/model/labelset.go +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright 2013 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -import ( - "encoding/json" - "fmt" - "sort" - "strings" -) - -// A LabelSet is a collection of LabelName and LabelValue pairs. The LabelSet -// may be fully-qualified down to the point where it may resolve to a single -// Metric in the data store or not. All operations that occur within the realm -// of a LabelSet can emit a vector of Metric entities to which the LabelSet may -// match. -type LabelSet map[LabelName]LabelValue - -// Validate checks whether all names and values in the label set -// are valid. -func (ls LabelSet) Validate() error { - for ln, lv := range ls { - if !ln.IsValid() { - return fmt.Errorf("invalid name %q", ln) - } - if !lv.IsValid() { - return fmt.Errorf("invalid value %q", lv) - } - } - return nil -} - -// Equal returns true iff both label sets have exactly the same key/value pairs. -func (ls LabelSet) Equal(o LabelSet) bool { - if len(ls) != len(o) { - return false - } - for ln, lv := range ls { - olv, ok := o[ln] - if !ok { - return false - } - if olv != lv { - return false - } - } - return true -} - -// Before compares the metrics, using the following criteria: -// -// If m has fewer labels than o, it is before o. If it has more, it is not. -// -// If the number of labels is the same, the superset of all label names is -// sorted alphanumerically. The first differing label pair found in that order -// determines the outcome: If the label does not exist at all in m, then m is -// before o, and vice versa. Otherwise the label value is compared -// alphanumerically. -// -// If m and o are equal, the method returns false. -func (ls LabelSet) Before(o LabelSet) bool { - if len(ls) < len(o) { - return true - } - if len(ls) > len(o) { - return false - } - - lns := make(LabelNames, 0, len(ls)+len(o)) - for ln := range ls { - lns = append(lns, ln) - } - for ln := range o { - lns = append(lns, ln) - } - // It's probably not worth it to de-dup lns. - sort.Sort(lns) - for _, ln := range lns { - mlv, ok := ls[ln] - if !ok { - return true - } - olv, ok := o[ln] - if !ok { - return false - } - if mlv < olv { - return true - } - if mlv > olv { - return false - } - } - return false -} - -// Clone returns a copy of the label set. -func (ls LabelSet) Clone() LabelSet { - lsn := make(LabelSet, len(ls)) - for ln, lv := range ls { - lsn[ln] = lv - } - return lsn -} - -// Merge is a helper function to non-destructively merge two label sets. -func (l LabelSet) Merge(other LabelSet) LabelSet { - result := make(LabelSet, len(l)) - - for k, v := range l { - result[k] = v - } - - for k, v := range other { - result[k] = v - } - - return result -} - -func (l LabelSet) String() string { - lstrs := make([]string, 0, len(l)) - for l, v := range l { - lstrs = append(lstrs, fmt.Sprintf("%s=%q", l, v)) - } - - sort.Strings(lstrs) - return fmt.Sprintf("{%s}", strings.Join(lstrs, ", ")) -} - -// Fingerprint returns the LabelSet's fingerprint. -func (ls LabelSet) Fingerprint() Fingerprint { - return labelSetToFingerprint(ls) -} - -// FastFingerprint returns the LabelSet's Fingerprint calculated by a faster hashing -// algorithm, which is, however, more susceptible to hash collisions. -func (ls LabelSet) FastFingerprint() Fingerprint { - return labelSetToFastFingerprint(ls) -} - -// UnmarshalJSON implements the json.Unmarshaler interface. -func (l *LabelSet) UnmarshalJSON(b []byte) error { - var m map[LabelName]LabelValue - if err := json.Unmarshal(b, &m); err != nil { - return err - } - // encoding/json only unmarshals maps of the form map[string]T. It treats - // LabelName as a string and does not call its UnmarshalJSON method. - // Thus, we have to replicate the behavior here. - for ln := range m { - if !ln.IsValid() { - return fmt.Errorf("%q is not a valid label name", ln) - } - } - *l = LabelSet(m) - return nil -} diff --git a/vendor/github.com/prometheus/common/model/metric.go b/vendor/github.com/prometheus/common/model/metric.go deleted file mode 100644 index f7250909b..000000000 --- a/vendor/github.com/prometheus/common/model/metric.go +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2013 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -import ( - "fmt" - "regexp" - "sort" - "strings" -) - -var ( - separator = []byte{0} - // MetricNameRE is a regular expression matching valid metric - // names. Note that the IsValidMetricName function performs the same - // check but faster than a match with this regular expression. - MetricNameRE = regexp.MustCompile(`^[a-zA-Z_:][a-zA-Z0-9_:]*$`) -) - -// A Metric is similar to a LabelSet, but the key difference is that a Metric is -// a singleton and refers to one and only one stream of samples. -type Metric LabelSet - -// Equal compares the metrics. -func (m Metric) Equal(o Metric) bool { - return LabelSet(m).Equal(LabelSet(o)) -} - -// Before compares the metrics' underlying label sets. -func (m Metric) Before(o Metric) bool { - return LabelSet(m).Before(LabelSet(o)) -} - -// Clone returns a copy of the Metric. -func (m Metric) Clone() Metric { - clone := make(Metric, len(m)) - for k, v := range m { - clone[k] = v - } - return clone -} - -func (m Metric) String() string { - metricName, hasName := m[MetricNameLabel] - numLabels := len(m) - 1 - if !hasName { - numLabels = len(m) - } - labelStrings := make([]string, 0, numLabels) - for label, value := range m { - if label != MetricNameLabel { - labelStrings = append(labelStrings, fmt.Sprintf("%s=%q", label, value)) - } - } - - switch numLabels { - case 0: - if hasName { - return string(metricName) - } - return "{}" - default: - sort.Strings(labelStrings) - return fmt.Sprintf("%s{%s}", metricName, strings.Join(labelStrings, ", ")) - } -} - -// Fingerprint returns a Metric's Fingerprint. -func (m Metric) Fingerprint() Fingerprint { - return LabelSet(m).Fingerprint() -} - -// FastFingerprint returns a Metric's Fingerprint calculated by a faster hashing -// algorithm, which is, however, more susceptible to hash collisions. -func (m Metric) FastFingerprint() Fingerprint { - return LabelSet(m).FastFingerprint() -} - -// IsValidMetricName returns true iff name matches the pattern of MetricNameRE. -// This function, however, does not use MetricNameRE for the check but a much -// faster hardcoded implementation. -func IsValidMetricName(n LabelValue) bool { - if len(n) == 0 { - return false - } - for i, b := range n { - if !((b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' || b == ':' || (b >= '0' && b <= '9' && i > 0)) { - return false - } - } - return true -} diff --git a/vendor/github.com/prometheus/common/model/model.go b/vendor/github.com/prometheus/common/model/model.go deleted file mode 100644 index a7b969170..000000000 --- a/vendor/github.com/prometheus/common/model/model.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2013 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package model contains common data structures that are shared across -// Prometheus components and libraries. -package model diff --git a/vendor/github.com/prometheus/common/model/signature.go b/vendor/github.com/prometheus/common/model/signature.go deleted file mode 100644 index 8762b13c6..000000000 --- a/vendor/github.com/prometheus/common/model/signature.go +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2014 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -import ( - "sort" -) - -// SeparatorByte is a byte that cannot occur in valid UTF-8 sequences and is -// used to separate label names, label values, and other strings from each other -// when calculating their combined hash value (aka signature aka fingerprint). -const SeparatorByte byte = 255 - -var ( - // cache the signature of an empty label set. - emptyLabelSignature = hashNew() -) - -// LabelsToSignature returns a quasi-unique signature (i.e., fingerprint) for a -// given label set. (Collisions are possible but unlikely if the number of label -// sets the function is applied to is small.) -func LabelsToSignature(labels map[string]string) uint64 { - if len(labels) == 0 { - return emptyLabelSignature - } - - labelNames := make([]string, 0, len(labels)) - for labelName := range labels { - labelNames = append(labelNames, labelName) - } - sort.Strings(labelNames) - - sum := hashNew() - for _, labelName := range labelNames { - sum = hashAdd(sum, labelName) - sum = hashAddByte(sum, SeparatorByte) - sum = hashAdd(sum, labels[labelName]) - sum = hashAddByte(sum, SeparatorByte) - } - return sum -} - -// labelSetToFingerprint works exactly as LabelsToSignature but takes a LabelSet as -// parameter (rather than a label map) and returns a Fingerprint. -func labelSetToFingerprint(ls LabelSet) Fingerprint { - if len(ls) == 0 { - return Fingerprint(emptyLabelSignature) - } - - labelNames := make(LabelNames, 0, len(ls)) - for labelName := range ls { - labelNames = append(labelNames, labelName) - } - sort.Sort(labelNames) - - sum := hashNew() - for _, labelName := range labelNames { - sum = hashAdd(sum, string(labelName)) - sum = hashAddByte(sum, SeparatorByte) - sum = hashAdd(sum, string(ls[labelName])) - sum = hashAddByte(sum, SeparatorByte) - } - return Fingerprint(sum) -} - -// labelSetToFastFingerprint works similar to labelSetToFingerprint but uses a -// faster and less allocation-heavy hash function, which is more susceptible to -// create hash collisions. Therefore, collision detection should be applied. -func labelSetToFastFingerprint(ls LabelSet) Fingerprint { - if len(ls) == 0 { - return Fingerprint(emptyLabelSignature) - } - - var result uint64 - for labelName, labelValue := range ls { - sum := hashNew() - sum = hashAdd(sum, string(labelName)) - sum = hashAddByte(sum, SeparatorByte) - sum = hashAdd(sum, string(labelValue)) - result ^= sum - } - return Fingerprint(result) -} - -// SignatureForLabels works like LabelsToSignature but takes a Metric as -// parameter (rather than a label map) and only includes the labels with the -// specified LabelNames into the signature calculation. The labels passed in -// will be sorted by this function. -func SignatureForLabels(m Metric, labels ...LabelName) uint64 { - if len(labels) == 0 { - return emptyLabelSignature - } - - sort.Sort(LabelNames(labels)) - - sum := hashNew() - for _, label := range labels { - sum = hashAdd(sum, string(label)) - sum = hashAddByte(sum, SeparatorByte) - sum = hashAdd(sum, string(m[label])) - sum = hashAddByte(sum, SeparatorByte) - } - return sum -} - -// SignatureWithoutLabels works like LabelsToSignature but takes a Metric as -// parameter (rather than a label map) and excludes the labels with any of the -// specified LabelNames from the signature calculation. -func SignatureWithoutLabels(m Metric, labels map[LabelName]struct{}) uint64 { - if len(m) == 0 { - return emptyLabelSignature - } - - labelNames := make(LabelNames, 0, len(m)) - for labelName := range m { - if _, exclude := labels[labelName]; !exclude { - labelNames = append(labelNames, labelName) - } - } - if len(labelNames) == 0 { - return emptyLabelSignature - } - sort.Sort(labelNames) - - sum := hashNew() - for _, labelName := range labelNames { - sum = hashAdd(sum, string(labelName)) - sum = hashAddByte(sum, SeparatorByte) - sum = hashAdd(sum, string(m[labelName])) - sum = hashAddByte(sum, SeparatorByte) - } - return sum -} diff --git a/vendor/github.com/prometheus/common/model/silence.go b/vendor/github.com/prometheus/common/model/silence.go deleted file mode 100644 index bb99889d2..000000000 --- a/vendor/github.com/prometheus/common/model/silence.go +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2015 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -import ( - "encoding/json" - "fmt" - "regexp" - "time" -) - -// Matcher describes a matches the value of a given label. -type Matcher struct { - Name LabelName `json:"name"` - Value string `json:"value"` - IsRegex bool `json:"isRegex"` -} - -func (m *Matcher) UnmarshalJSON(b []byte) error { - type plain Matcher - if err := json.Unmarshal(b, (*plain)(m)); err != nil { - return err - } - - if len(m.Name) == 0 { - return fmt.Errorf("label name in matcher must not be empty") - } - if m.IsRegex { - if _, err := regexp.Compile(m.Value); err != nil { - return err - } - } - return nil -} - -// Validate returns true iff all fields of the matcher have valid values. -func (m *Matcher) Validate() error { - if !m.Name.IsValid() { - return fmt.Errorf("invalid name %q", m.Name) - } - if m.IsRegex { - if _, err := regexp.Compile(m.Value); err != nil { - return fmt.Errorf("invalid regular expression %q", m.Value) - } - } else if !LabelValue(m.Value).IsValid() || len(m.Value) == 0 { - return fmt.Errorf("invalid value %q", m.Value) - } - return nil -} - -// Silence defines the representation of a silence definition in the Prometheus -// eco-system. -type Silence struct { - ID uint64 `json:"id,omitempty"` - - Matchers []*Matcher `json:"matchers"` - - StartsAt time.Time `json:"startsAt"` - EndsAt time.Time `json:"endsAt"` - - CreatedAt time.Time `json:"createdAt,omitempty"` - CreatedBy string `json:"createdBy"` - Comment string `json:"comment,omitempty"` -} - -// Validate returns true iff all fields of the silence have valid values. -func (s *Silence) Validate() error { - if len(s.Matchers) == 0 { - return fmt.Errorf("at least one matcher required") - } - for _, m := range s.Matchers { - if err := m.Validate(); err != nil { - return fmt.Errorf("invalid matcher: %s", err) - } - } - if s.StartsAt.IsZero() { - return fmt.Errorf("start time missing") - } - if s.EndsAt.IsZero() { - return fmt.Errorf("end time missing") - } - if s.EndsAt.Before(s.StartsAt) { - return fmt.Errorf("start time must be before end time") - } - if s.CreatedBy == "" { - return fmt.Errorf("creator information missing") - } - if s.Comment == "" { - return fmt.Errorf("comment missing") - } - if s.CreatedAt.IsZero() { - return fmt.Errorf("creation timestamp missing") - } - return nil -} diff --git a/vendor/github.com/prometheus/common/model/time.go b/vendor/github.com/prometheus/common/model/time.go deleted file mode 100644 index 74ed5a9f7..000000000 --- a/vendor/github.com/prometheus/common/model/time.go +++ /dev/null @@ -1,264 +0,0 @@ -// Copyright 2013 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -import ( - "fmt" - "math" - "regexp" - "strconv" - "strings" - "time" -) - -const ( - // MinimumTick is the minimum supported time resolution. This has to be - // at least time.Second in order for the code below to work. - minimumTick = time.Millisecond - // second is the Time duration equivalent to one second. - second = int64(time.Second / minimumTick) - // The number of nanoseconds per minimum tick. - nanosPerTick = int64(minimumTick / time.Nanosecond) - - // Earliest is the earliest Time representable. Handy for - // initializing a high watermark. - Earliest = Time(math.MinInt64) - // Latest is the latest Time representable. Handy for initializing - // a low watermark. - Latest = Time(math.MaxInt64) -) - -// Time is the number of milliseconds since the epoch -// (1970-01-01 00:00 UTC) excluding leap seconds. -type Time int64 - -// Interval describes and interval between two timestamps. -type Interval struct { - Start, End Time -} - -// Now returns the current time as a Time. -func Now() Time { - return TimeFromUnixNano(time.Now().UnixNano()) -} - -// TimeFromUnix returns the Time equivalent to the Unix Time t -// provided in seconds. -func TimeFromUnix(t int64) Time { - return Time(t * second) -} - -// TimeFromUnixNano returns the Time equivalent to the Unix Time -// t provided in nanoseconds. -func TimeFromUnixNano(t int64) Time { - return Time(t / nanosPerTick) -} - -// Equal reports whether two Times represent the same instant. -func (t Time) Equal(o Time) bool { - return t == o -} - -// Before reports whether the Time t is before o. -func (t Time) Before(o Time) bool { - return t < o -} - -// After reports whether the Time t is after o. -func (t Time) After(o Time) bool { - return t > o -} - -// Add returns the Time t + d. -func (t Time) Add(d time.Duration) Time { - return t + Time(d/minimumTick) -} - -// Sub returns the Duration t - o. -func (t Time) Sub(o Time) time.Duration { - return time.Duration(t-o) * minimumTick -} - -// Time returns the time.Time representation of t. -func (t Time) Time() time.Time { - return time.Unix(int64(t)/second, (int64(t)%second)*nanosPerTick) -} - -// Unix returns t as a Unix time, the number of seconds elapsed -// since January 1, 1970 UTC. -func (t Time) Unix() int64 { - return int64(t) / second -} - -// UnixNano returns t as a Unix time, the number of nanoseconds elapsed -// since January 1, 1970 UTC. -func (t Time) UnixNano() int64 { - return int64(t) * nanosPerTick -} - -// The number of digits after the dot. -var dotPrecision = int(math.Log10(float64(second))) - -// String returns a string representation of the Time. -func (t Time) String() string { - return strconv.FormatFloat(float64(t)/float64(second), 'f', -1, 64) -} - -// MarshalJSON implements the json.Marshaler interface. -func (t Time) MarshalJSON() ([]byte, error) { - return []byte(t.String()), nil -} - -// UnmarshalJSON implements the json.Unmarshaler interface. -func (t *Time) UnmarshalJSON(b []byte) error { - p := strings.Split(string(b), ".") - switch len(p) { - case 1: - v, err := strconv.ParseInt(string(p[0]), 10, 64) - if err != nil { - return err - } - *t = Time(v * second) - - case 2: - v, err := strconv.ParseInt(string(p[0]), 10, 64) - if err != nil { - return err - } - v *= second - - prec := dotPrecision - len(p[1]) - if prec < 0 { - p[1] = p[1][:dotPrecision] - } else if prec > 0 { - p[1] = p[1] + strings.Repeat("0", prec) - } - - va, err := strconv.ParseInt(p[1], 10, 32) - if err != nil { - return err - } - - *t = Time(v + va) - - default: - return fmt.Errorf("invalid time %q", string(b)) - } - return nil -} - -// Duration wraps time.Duration. It is used to parse the custom duration format -// from YAML. -// This type should not propagate beyond the scope of input/output processing. -type Duration time.Duration - -// Set implements pflag/flag.Value -func (d *Duration) Set(s string) error { - var err error - *d, err = ParseDuration(s) - return err -} - -// Type implements pflag.Value -func (d *Duration) Type() string { - return "duration" -} - -var durationRE = regexp.MustCompile("^([0-9]+)(y|w|d|h|m|s|ms)$") - -// ParseDuration parses a string into a time.Duration, assuming that a year -// always has 365d, a week always has 7d, and a day always has 24h. -func ParseDuration(durationStr string) (Duration, error) { - matches := durationRE.FindStringSubmatch(durationStr) - if len(matches) != 3 { - return 0, fmt.Errorf("not a valid duration string: %q", durationStr) - } - var ( - n, _ = strconv.Atoi(matches[1]) - dur = time.Duration(n) * time.Millisecond - ) - switch unit := matches[2]; unit { - case "y": - dur *= 1000 * 60 * 60 * 24 * 365 - case "w": - dur *= 1000 * 60 * 60 * 24 * 7 - case "d": - dur *= 1000 * 60 * 60 * 24 - case "h": - dur *= 1000 * 60 * 60 - case "m": - dur *= 1000 * 60 - case "s": - dur *= 1000 - case "ms": - // Value already correct - default: - return 0, fmt.Errorf("invalid time unit in duration string: %q", unit) - } - return Duration(dur), nil -} - -func (d Duration) String() string { - var ( - ms = int64(time.Duration(d) / time.Millisecond) - unit = "ms" - ) - if ms == 0 { - return "0s" - } - factors := map[string]int64{ - "y": 1000 * 60 * 60 * 24 * 365, - "w": 1000 * 60 * 60 * 24 * 7, - "d": 1000 * 60 * 60 * 24, - "h": 1000 * 60 * 60, - "m": 1000 * 60, - "s": 1000, - "ms": 1, - } - - switch int64(0) { - case ms % factors["y"]: - unit = "y" - case ms % factors["w"]: - unit = "w" - case ms % factors["d"]: - unit = "d" - case ms % factors["h"]: - unit = "h" - case ms % factors["m"]: - unit = "m" - case ms % factors["s"]: - unit = "s" - } - return fmt.Sprintf("%v%v", ms/factors[unit], unit) -} - -// MarshalYAML implements the yaml.Marshaler interface. -func (d Duration) MarshalYAML() (interface{}, error) { - return d.String(), nil -} - -// UnmarshalYAML implements the yaml.Unmarshaler interface. -func (d *Duration) UnmarshalYAML(unmarshal func(interface{}) error) error { - var s string - if err := unmarshal(&s); err != nil { - return err - } - dur, err := ParseDuration(s) - if err != nil { - return err - } - *d = dur - return nil -} diff --git a/vendor/github.com/prometheus/common/model/value.go b/vendor/github.com/prometheus/common/model/value.go deleted file mode 100644 index c9d8fb1a2..000000000 --- a/vendor/github.com/prometheus/common/model/value.go +++ /dev/null @@ -1,416 +0,0 @@ -// Copyright 2013 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -import ( - "encoding/json" - "fmt" - "math" - "sort" - "strconv" - "strings" -) - -var ( - // ZeroSamplePair is the pseudo zero-value of SamplePair used to signal a - // non-existing sample pair. It is a SamplePair with timestamp Earliest and - // value 0.0. Note that the natural zero value of SamplePair has a timestamp - // of 0, which is possible to appear in a real SamplePair and thus not - // suitable to signal a non-existing SamplePair. - ZeroSamplePair = SamplePair{Timestamp: Earliest} - - // ZeroSample is the pseudo zero-value of Sample used to signal a - // non-existing sample. It is a Sample with timestamp Earliest, value 0.0, - // and metric nil. Note that the natural zero value of Sample has a timestamp - // of 0, which is possible to appear in a real Sample and thus not suitable - // to signal a non-existing Sample. - ZeroSample = Sample{Timestamp: Earliest} -) - -// A SampleValue is a representation of a value for a given sample at a given -// time. -type SampleValue float64 - -// MarshalJSON implements json.Marshaler. -func (v SampleValue) MarshalJSON() ([]byte, error) { - return json.Marshal(v.String()) -} - -// UnmarshalJSON implements json.Unmarshaler. -func (v *SampleValue) UnmarshalJSON(b []byte) error { - if len(b) < 2 || b[0] != '"' || b[len(b)-1] != '"' { - return fmt.Errorf("sample value must be a quoted string") - } - f, err := strconv.ParseFloat(string(b[1:len(b)-1]), 64) - if err != nil { - return err - } - *v = SampleValue(f) - return nil -} - -// Equal returns true if the value of v and o is equal or if both are NaN. Note -// that v==o is false if both are NaN. If you want the conventional float -// behavior, use == to compare two SampleValues. -func (v SampleValue) Equal(o SampleValue) bool { - if v == o { - return true - } - return math.IsNaN(float64(v)) && math.IsNaN(float64(o)) -} - -func (v SampleValue) String() string { - return strconv.FormatFloat(float64(v), 'f', -1, 64) -} - -// SamplePair pairs a SampleValue with a Timestamp. -type SamplePair struct { - Timestamp Time - Value SampleValue -} - -// MarshalJSON implements json.Marshaler. -func (s SamplePair) MarshalJSON() ([]byte, error) { - t, err := json.Marshal(s.Timestamp) - if err != nil { - return nil, err - } - v, err := json.Marshal(s.Value) - if err != nil { - return nil, err - } - return []byte(fmt.Sprintf("[%s,%s]", t, v)), nil -} - -// UnmarshalJSON implements json.Unmarshaler. -func (s *SamplePair) UnmarshalJSON(b []byte) error { - v := [...]json.Unmarshaler{&s.Timestamp, &s.Value} - return json.Unmarshal(b, &v) -} - -// Equal returns true if this SamplePair and o have equal Values and equal -// Timestamps. The semantics of Value equality is defined by SampleValue.Equal. -func (s *SamplePair) Equal(o *SamplePair) bool { - return s == o || (s.Value.Equal(o.Value) && s.Timestamp.Equal(o.Timestamp)) -} - -func (s SamplePair) String() string { - return fmt.Sprintf("%s @[%s]", s.Value, s.Timestamp) -} - -// Sample is a sample pair associated with a metric. -type Sample struct { - Metric Metric `json:"metric"` - Value SampleValue `json:"value"` - Timestamp Time `json:"timestamp"` -} - -// Equal compares first the metrics, then the timestamp, then the value. The -// semantics of value equality is defined by SampleValue.Equal. -func (s *Sample) Equal(o *Sample) bool { - if s == o { - return true - } - - if !s.Metric.Equal(o.Metric) { - return false - } - if !s.Timestamp.Equal(o.Timestamp) { - return false - } - - return s.Value.Equal(o.Value) -} - -func (s Sample) String() string { - return fmt.Sprintf("%s => %s", s.Metric, SamplePair{ - Timestamp: s.Timestamp, - Value: s.Value, - }) -} - -// MarshalJSON implements json.Marshaler. -func (s Sample) MarshalJSON() ([]byte, error) { - v := struct { - Metric Metric `json:"metric"` - Value SamplePair `json:"value"` - }{ - Metric: s.Metric, - Value: SamplePair{ - Timestamp: s.Timestamp, - Value: s.Value, - }, - } - - return json.Marshal(&v) -} - -// UnmarshalJSON implements json.Unmarshaler. -func (s *Sample) UnmarshalJSON(b []byte) error { - v := struct { - Metric Metric `json:"metric"` - Value SamplePair `json:"value"` - }{ - Metric: s.Metric, - Value: SamplePair{ - Timestamp: s.Timestamp, - Value: s.Value, - }, - } - - if err := json.Unmarshal(b, &v); err != nil { - return err - } - - s.Metric = v.Metric - s.Timestamp = v.Value.Timestamp - s.Value = v.Value.Value - - return nil -} - -// Samples is a sortable Sample slice. It implements sort.Interface. -type Samples []*Sample - -func (s Samples) Len() int { - return len(s) -} - -// Less compares first the metrics, then the timestamp. -func (s Samples) Less(i, j int) bool { - switch { - case s[i].Metric.Before(s[j].Metric): - return true - case s[j].Metric.Before(s[i].Metric): - return false - case s[i].Timestamp.Before(s[j].Timestamp): - return true - default: - return false - } -} - -func (s Samples) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} - -// Equal compares two sets of samples and returns true if they are equal. -func (s Samples) Equal(o Samples) bool { - if len(s) != len(o) { - return false - } - - for i, sample := range s { - if !sample.Equal(o[i]) { - return false - } - } - return true -} - -// SampleStream is a stream of Values belonging to an attached COWMetric. -type SampleStream struct { - Metric Metric `json:"metric"` - Values []SamplePair `json:"values"` -} - -func (ss SampleStream) String() string { - vals := make([]string, len(ss.Values)) - for i, v := range ss.Values { - vals[i] = v.String() - } - return fmt.Sprintf("%s =>\n%s", ss.Metric, strings.Join(vals, "\n")) -} - -// Value is a generic interface for values resulting from a query evaluation. -type Value interface { - Type() ValueType - String() string -} - -func (Matrix) Type() ValueType { return ValMatrix } -func (Vector) Type() ValueType { return ValVector } -func (*Scalar) Type() ValueType { return ValScalar } -func (*String) Type() ValueType { return ValString } - -type ValueType int - -const ( - ValNone ValueType = iota - ValScalar - ValVector - ValMatrix - ValString -) - -// MarshalJSON implements json.Marshaler. -func (et ValueType) MarshalJSON() ([]byte, error) { - return json.Marshal(et.String()) -} - -func (et *ValueType) UnmarshalJSON(b []byte) error { - var s string - if err := json.Unmarshal(b, &s); err != nil { - return err - } - switch s { - case "": - *et = ValNone - case "scalar": - *et = ValScalar - case "vector": - *et = ValVector - case "matrix": - *et = ValMatrix - case "string": - *et = ValString - default: - return fmt.Errorf("unknown value type %q", s) - } - return nil -} - -func (e ValueType) String() string { - switch e { - case ValNone: - return "" - case ValScalar: - return "scalar" - case ValVector: - return "vector" - case ValMatrix: - return "matrix" - case ValString: - return "string" - } - panic("ValueType.String: unhandled value type") -} - -// Scalar is a scalar value evaluated at the set timestamp. -type Scalar struct { - Value SampleValue `json:"value"` - Timestamp Time `json:"timestamp"` -} - -func (s Scalar) String() string { - return fmt.Sprintf("scalar: %v @[%v]", s.Value, s.Timestamp) -} - -// MarshalJSON implements json.Marshaler. -func (s Scalar) MarshalJSON() ([]byte, error) { - v := strconv.FormatFloat(float64(s.Value), 'f', -1, 64) - return json.Marshal([...]interface{}{s.Timestamp, string(v)}) -} - -// UnmarshalJSON implements json.Unmarshaler. -func (s *Scalar) UnmarshalJSON(b []byte) error { - var f string - v := [...]interface{}{&s.Timestamp, &f} - - if err := json.Unmarshal(b, &v); err != nil { - return err - } - - value, err := strconv.ParseFloat(f, 64) - if err != nil { - return fmt.Errorf("error parsing sample value: %s", err) - } - s.Value = SampleValue(value) - return nil -} - -// String is a string value evaluated at the set timestamp. -type String struct { - Value string `json:"value"` - Timestamp Time `json:"timestamp"` -} - -func (s *String) String() string { - return s.Value -} - -// MarshalJSON implements json.Marshaler. -func (s String) MarshalJSON() ([]byte, error) { - return json.Marshal([]interface{}{s.Timestamp, s.Value}) -} - -// UnmarshalJSON implements json.Unmarshaler. -func (s *String) UnmarshalJSON(b []byte) error { - v := [...]interface{}{&s.Timestamp, &s.Value} - return json.Unmarshal(b, &v) -} - -// Vector is basically only an alias for Samples, but the -// contract is that in a Vector, all Samples have the same timestamp. -type Vector []*Sample - -func (vec Vector) String() string { - entries := make([]string, len(vec)) - for i, s := range vec { - entries[i] = s.String() - } - return strings.Join(entries, "\n") -} - -func (vec Vector) Len() int { return len(vec) } -func (vec Vector) Swap(i, j int) { vec[i], vec[j] = vec[j], vec[i] } - -// Less compares first the metrics, then the timestamp. -func (vec Vector) Less(i, j int) bool { - switch { - case vec[i].Metric.Before(vec[j].Metric): - return true - case vec[j].Metric.Before(vec[i].Metric): - return false - case vec[i].Timestamp.Before(vec[j].Timestamp): - return true - default: - return false - } -} - -// Equal compares two sets of samples and returns true if they are equal. -func (vec Vector) Equal(o Vector) bool { - if len(vec) != len(o) { - return false - } - - for i, sample := range vec { - if !sample.Equal(o[i]) { - return false - } - } - return true -} - -// Matrix is a list of time series. -type Matrix []*SampleStream - -func (m Matrix) Len() int { return len(m) } -func (m Matrix) Less(i, j int) bool { return m[i].Metric.Before(m[j].Metric) } -func (m Matrix) Swap(i, j int) { m[i], m[j] = m[j], m[i] } - -func (mat Matrix) String() string { - matCp := make(Matrix, len(mat)) - copy(matCp, mat) - sort.Sort(matCp) - - strs := make([]string, len(matCp)) - - for i, ss := range matCp { - strs[i] = ss.String() - } - - return strings.Join(strs, "\n") -} diff --git a/vendor/github.com/prometheus/procfs/CONTRIBUTING.md b/vendor/github.com/prometheus/procfs/CONTRIBUTING.md deleted file mode 100644 index 40503edbf..000000000 --- a/vendor/github.com/prometheus/procfs/CONTRIBUTING.md +++ /dev/null @@ -1,18 +0,0 @@ -# Contributing - -Prometheus uses GitHub to manage reviews of pull requests. - -* If you have a trivial fix or improvement, go ahead and create a pull request, - addressing (with `@...`) the maintainer of this repository (see - [MAINTAINERS.md](MAINTAINERS.md)) in the description of the pull request. - -* If you plan to do something more involved, first discuss your ideas - on our [mailing list](https://groups.google.com/forum/?fromgroups#!forum/prometheus-developers). - This will avoid unnecessary work and surely give you and us a good deal - of inspiration. - -* Relevant coding style guidelines are the [Go Code Review - Comments](https://code.google.com/p/go-wiki/wiki/CodeReviewComments) - and the _Formatting and style_ section of Peter Bourgon's [Go: Best - Practices for Production - Environments](http://peter.bourgon.org/go-in-production/#formatting-and-style). diff --git a/vendor/github.com/prometheus/procfs/LICENSE b/vendor/github.com/prometheus/procfs/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/vendor/github.com/prometheus/procfs/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - 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/prometheus/procfs/MAINTAINERS.md b/vendor/github.com/prometheus/procfs/MAINTAINERS.md deleted file mode 100644 index 35993c41c..000000000 --- a/vendor/github.com/prometheus/procfs/MAINTAINERS.md +++ /dev/null @@ -1 +0,0 @@ -* Tobias Schmidt diff --git a/vendor/github.com/prometheus/procfs/Makefile b/vendor/github.com/prometheus/procfs/Makefile deleted file mode 100644 index 4d1098394..000000000 --- a/vendor/github.com/prometheus/procfs/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright 2018 The Prometheus Authors -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Ensure GOBIN is not set during build so that promu is installed to the correct path -unexport GOBIN - -GO ?= go -GOFMT ?= $(GO)fmt -FIRST_GOPATH := $(firstword $(subst :, ,$(shell $(GO) env GOPATH))) -STATICCHECK := $(FIRST_GOPATH)/bin/staticcheck -pkgs = $(shell $(GO) list ./... | grep -v /vendor/) - -PREFIX ?= $(shell pwd) -BIN_DIR ?= $(shell pwd) - -ifdef DEBUG - bindata_flags = -debug -endif - -STATICCHECK_IGNORE = - -all: format staticcheck build test - -style: - @echo ">> checking code style" - @! $(GOFMT) -d $(shell find . -path ./vendor -prune -o -name '*.go' -print) | grep '^' - -check_license: - @echo ">> checking license header" - @./scripts/check_license.sh - -test: fixtures/.unpacked sysfs/fixtures/.unpacked - @echo ">> running all tests" - @$(GO) test -race $(shell $(GO) list ./... | grep -v /vendor/ | grep -v examples) - -format: - @echo ">> formatting code" - @$(GO) fmt $(pkgs) - -vet: - @echo ">> vetting code" - @$(GO) vet $(pkgs) - -staticcheck: $(STATICCHECK) - @echo ">> running staticcheck" - @$(STATICCHECK) -ignore "$(STATICCHECK_IGNORE)" $(pkgs) - -%/.unpacked: %.ttar - ./ttar -C $(dir $*) -x -f $*.ttar - touch $@ - -update_fixtures: fixtures.ttar sysfs/fixtures.ttar - -%fixtures.ttar: %/fixtures - rm -v $(dir $*)fixtures/.unpacked - ./ttar -C $(dir $*) -c -f $*fixtures.ttar fixtures/ - -$(FIRST_GOPATH)/bin/staticcheck: - @GOOS= GOARCH= $(GO) get -u honnef.co/go/tools/cmd/staticcheck - -.PHONY: all style check_license format test vet staticcheck - -# Declaring the binaries at their default locations as PHONY targets is a hack -# to ensure the latest version is downloaded on every make execution. -# If this is not desired, copy/symlink these binaries to a different path and -# set the respective environment variables. -.PHONY: $(GOPATH)/bin/staticcheck diff --git a/vendor/github.com/prometheus/procfs/NOTICE b/vendor/github.com/prometheus/procfs/NOTICE deleted file mode 100644 index 53c5e9aa1..000000000 --- a/vendor/github.com/prometheus/procfs/NOTICE +++ /dev/null @@ -1,7 +0,0 @@ -procfs provides functions to retrieve system, kernel and process -metrics from the pseudo-filesystem proc. - -Copyright 2014-2015 The Prometheus Authors - -This product includes software developed at -SoundCloud Ltd. (http://soundcloud.com/). diff --git a/vendor/github.com/prometheus/procfs/README.md b/vendor/github.com/prometheus/procfs/README.md deleted file mode 100644 index 209549471..000000000 --- a/vendor/github.com/prometheus/procfs/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# procfs - -This procfs package provides functions to retrieve system, kernel and process -metrics from the pseudo-filesystem proc. - -*WARNING*: This package is a work in progress. Its API may still break in -backwards-incompatible ways without warnings. Use it at your own risk. - -[![GoDoc](https://godoc.org/github.com/prometheus/procfs?status.png)](https://godoc.org/github.com/prometheus/procfs) -[![Build Status](https://travis-ci.org/prometheus/procfs.svg?branch=master)](https://travis-ci.org/prometheus/procfs) -[![Go Report Card](https://goreportcard.com/badge/github.com/prometheus/procfs)](https://goreportcard.com/report/github.com/prometheus/procfs) diff --git a/vendor/github.com/prometheus/procfs/buddyinfo.go b/vendor/github.com/prometheus/procfs/buddyinfo.go deleted file mode 100644 index d3a826807..000000000 --- a/vendor/github.com/prometheus/procfs/buddyinfo.go +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2017 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package procfs - -import ( - "bufio" - "fmt" - "io" - "os" - "strconv" - "strings" -) - -// A BuddyInfo is the details parsed from /proc/buddyinfo. -// The data is comprised of an array of free fragments of each size. -// The sizes are 2^n*PAGE_SIZE, where n is the array index. -type BuddyInfo struct { - Node string - Zone string - Sizes []float64 -} - -// NewBuddyInfo reads the buddyinfo statistics. -func NewBuddyInfo() ([]BuddyInfo, error) { - fs, err := NewFS(DefaultMountPoint) - if err != nil { - return nil, err - } - - return fs.NewBuddyInfo() -} - -// NewBuddyInfo reads the buddyinfo statistics from the specified `proc` filesystem. -func (fs FS) NewBuddyInfo() ([]BuddyInfo, error) { - file, err := os.Open(fs.Path("buddyinfo")) - if err != nil { - return nil, err - } - defer file.Close() - - return parseBuddyInfo(file) -} - -func parseBuddyInfo(r io.Reader) ([]BuddyInfo, error) { - var ( - buddyInfo = []BuddyInfo{} - scanner = bufio.NewScanner(r) - bucketCount = -1 - ) - - for scanner.Scan() { - var err error - line := scanner.Text() - parts := strings.Fields(line) - - if len(parts) < 4 { - return nil, fmt.Errorf("invalid number of fields when parsing buddyinfo") - } - - node := strings.TrimRight(parts[1], ",") - zone := strings.TrimRight(parts[3], ",") - arraySize := len(parts[4:]) - - if bucketCount == -1 { - bucketCount = arraySize - } else { - if bucketCount != arraySize { - return nil, fmt.Errorf("mismatch in number of buddyinfo buckets, previous count %d, new count %d", bucketCount, arraySize) - } - } - - sizes := make([]float64, arraySize) - for i := 0; i < arraySize; i++ { - sizes[i], err = strconv.ParseFloat(parts[i+4], 64) - if err != nil { - return nil, fmt.Errorf("invalid value in buddyinfo: %s", err) - } - } - - buddyInfo = append(buddyInfo, BuddyInfo{node, zone, sizes}) - } - - return buddyInfo, scanner.Err() -} diff --git a/vendor/github.com/prometheus/procfs/doc.go b/vendor/github.com/prometheus/procfs/doc.go deleted file mode 100644 index e2acd6d40..000000000 --- a/vendor/github.com/prometheus/procfs/doc.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2014 Prometheus Team -// 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 procfs provides functions to retrieve system, kernel and process -// metrics from the pseudo-filesystem proc. -// -// Example: -// -// package main -// -// import ( -// "fmt" -// "log" -// -// "github.com/prometheus/procfs" -// ) -// -// func main() { -// p, err := procfs.Self() -// if err != nil { -// log.Fatalf("could not get process: %s", err) -// } -// -// stat, err := p.NewStat() -// if err != nil { -// log.Fatalf("could not get process stat: %s", err) -// } -// -// fmt.Printf("command: %s\n", stat.Comm) -// fmt.Printf("cpu time: %fs\n", stat.CPUTime()) -// fmt.Printf("vsize: %dB\n", stat.VirtualMemory()) -// fmt.Printf("rss: %dB\n", stat.ResidentMemory()) -// } -// -package procfs diff --git a/vendor/github.com/prometheus/procfs/fixtures.ttar b/vendor/github.com/prometheus/procfs/fixtures.ttar deleted file mode 100644 index 3ee8291e8..000000000 --- a/vendor/github.com/prometheus/procfs/fixtures.ttar +++ /dev/null @@ -1,446 +0,0 @@ -# Archive created by ttar -c -f fixtures.ttar fixtures/ -Directory: fixtures -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/26231 -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/cmdline -Lines: 1 -vimNULLBYTEtest.goNULLBYTE+10NULLBYTEEOF -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/comm -Lines: 1 -vim -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/exe -SymlinkTo: /usr/bin/vim -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/26231/fd -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/fd/0 -SymlinkTo: ../../symlinktargets/abc -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/fd/1 -SymlinkTo: ../../symlinktargets/def -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/fd/10 -SymlinkTo: ../../symlinktargets/xyz -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/fd/2 -SymlinkTo: ../../symlinktargets/ghi -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/fd/3 -SymlinkTo: ../../symlinktargets/uvw -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/io -Lines: 7 -rchar: 750339 -wchar: 818609 -syscr: 7405 -syscw: 5245 -read_bytes: 1024 -write_bytes: 2048 -cancelled_write_bytes: -1024 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/limits -Lines: 17 -Limit Soft Limit Hard Limit Units -Max cpu time unlimited unlimited seconds -Max file size unlimited unlimited bytes -Max data size unlimited unlimited bytes -Max stack size 8388608 unlimited bytes -Max core file size 0 unlimited bytes -Max resident set unlimited unlimited bytes -Max processes 62898 62898 processes -Max open files 2048 4096 files -Max locked memory 65536 65536 bytes -Max address space 8589934592 unlimited bytes -Max file locks unlimited unlimited locks -Max pending signals 62898 62898 signals -Max msgqueue size 819200 819200 bytes -Max nice priority 0 0 -Max realtime priority 0 0 -Max realtime timeout unlimited unlimited us -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/mountstats -Lines: 19 -device rootfs mounted on / with fstype rootfs -device sysfs mounted on /sys with fstype sysfs -device proc mounted on /proc with fstype proc -device /dev/sda1 mounted on / with fstype ext4 -device 192.168.1.1:/srv/test mounted on /mnt/nfs/test with fstype nfs4 statvers=1.1 - opts: rw,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,acregmin=3,acregmax=60,acdirmin=30,acdirmax=60,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.5,local_lock=none - age: 13968 - caps: caps=0xfff7,wtmult=512,dtsize=32768,bsize=0,namlen=255 - nfsv4: bm0=0xfdffafff,bm1=0xf9be3e,bm2=0x0,acl=0x0,pnfs=not configured - sec: flavor=1,pseudoflavor=1 - events: 52 226 0 0 1 13 398 0 0 331 0 47 0 0 77 0 0 77 0 0 0 0 0 0 0 0 0 - bytes: 1207640230 0 0 0 1210214218 0 295483 0 - RPC iostats version: 1.0 p/v: 100003/4 (nfs) - xprt: tcp 832 0 1 0 11 6428 6428 0 12154 0 24 26 5726 - per-op statistics - NULL: 0 0 0 0 0 0 0 0 - READ: 1298 1298 0 207680 1210292152 6 79386 79407 - WRITE: 0 0 0 0 0 0 0 0 - -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/26231/net -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/net/dev -Lines: 4 -Inter-| Receive | Transmit - face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed - lo: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - eth0: 438 5 0 0 0 0 0 0 648 8 0 0 0 0 0 0 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/26231/ns -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/ns/mnt -SymlinkTo: mnt:[4026531840] -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/ns/net -SymlinkTo: net:[4026531993] -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26231/stat -Lines: 1 -26231 (vim) R 5392 7446 5392 34835 7446 4218880 32533 309516 26 82 1677 44 158 99 20 0 1 0 82375 56274944 1981 18446744073709551615 4194304 6294284 140736914091744 140736914087944 139965136429984 0 0 12288 1870679807 0 0 0 17 0 0 0 31 0 0 8391624 8481048 16420864 140736914093252 140736914093279 140736914093279 140736914096107 0 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/26232 -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26232/cmdline -Lines: 0 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26232/comm -Lines: 1 -ata_sff -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/26232/fd -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26232/fd/0 -SymlinkTo: ../../symlinktargets/abc -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26232/fd/1 -SymlinkTo: ../../symlinktargets/def -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26232/fd/2 -SymlinkTo: ../../symlinktargets/ghi -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26232/fd/3 -SymlinkTo: ../../symlinktargets/uvw -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26232/fd/4 -SymlinkTo: ../../symlinktargets/xyz -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26232/limits -Lines: 17 -Limit Soft Limit Hard Limit Units -Max cpu time unlimited unlimited seconds -Max file size unlimited unlimited bytes -Max data size unlimited unlimited bytes -Max stack size 8388608 unlimited bytes -Max core file size 0 unlimited bytes -Max resident set unlimited unlimited bytes -Max processes 29436 29436 processes -Max open files 1024 4096 files -Max locked memory 65536 65536 bytes -Max address space unlimited unlimited bytes -Max file locks unlimited unlimited locks -Max pending signals 29436 29436 signals -Max msgqueue size 819200 819200 bytes -Max nice priority 0 0 -Max realtime priority 0 0 -Max realtime timeout unlimited unlimited us -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26232/stat -Lines: 1 -33 (ata_sff) S 2 0 0 0 -1 69238880 0 0 0 0 0 0 0 0 0 -20 1 0 5 0 0 18446744073709551615 0 0 0 0 0 0 0 2147483647 0 18446744073709551615 0 0 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/26233 -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/26233/cmdline -Lines: 1 -com.github.uiautomatorNULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTENULLBYTEEOF -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/584 -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/584/stat -Lines: 2 -1020 ((a b ) ( c d) ) R 28378 1020 28378 34842 1020 4218880 286 0 0 0 0 0 0 0 20 0 1 0 10839175 10395648 155 18446744073709551615 4194304 4238788 140736466511168 140736466511168 140609271124624 0 0 0 0 0 0 0 17 5 0 0 0 0 0 6336016 6337300 25579520 140736466515030 140736466515061 140736466515061 140736466518002 0 -#!/bin/cat /proc/self/stat -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/buddyinfo -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/buddyinfo/short -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/buddyinfo/short/buddyinfo -Lines: 3 -Node 0, zone -Node 0, zone -Node 0, zone -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/buddyinfo/sizemismatch -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/buddyinfo/sizemismatch/buddyinfo -Lines: 3 -Node 0, zone DMA 1 0 1 0 2 1 1 0 1 1 3 -Node 0, zone DMA32 759 572 791 475 194 45 12 0 0 0 0 0 -Node 0, zone Normal 4381 1093 185 1530 567 102 4 0 0 0 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/buddyinfo/valid -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/buddyinfo/valid/buddyinfo -Lines: 3 -Node 0, zone DMA 1 0 1 0 2 1 1 0 1 1 3 -Node 0, zone DMA32 759 572 791 475 194 45 12 0 0 0 0 -Node 0, zone Normal 4381 1093 185 1530 567 102 4 0 0 0 0 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/fs -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/fs/xfs -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/fs/xfs/stat -Lines: 23 -extent_alloc 92447 97589 92448 93751 -abt 0 0 0 0 -blk_map 1767055 188820 184891 92447 92448 2140766 0 -bmbt 0 0 0 0 -dir 185039 92447 92444 136422 -trans 706 944304 0 -ig 185045 58807 0 126238 0 33637 22 -log 2883 113448 9 17360 739 -push_ail 945014 0 134260 15483 0 3940 464 159985 0 40 -xstrat 92447 0 -rw 107739 94045 -attr 4 0 0 0 -icluster 8677 7849 135802 -vnodes 92601 0 0 0 92444 92444 92444 0 -buf 2666287 7122 2659202 3599 2 7085 0 10297 7085 -abtb2 184941 1277345 13257 13278 0 0 0 0 0 0 0 0 0 0 2746147 -abtc2 345295 2416764 172637 172658 0 0 0 0 0 0 0 0 0 0 21406023 -bmbt2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -ibt2 343004 1358467 0 0 0 0 0 0 0 0 0 0 0 0 0 -fibt2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -qm 0 0 0 0 0 0 0 0 -xpc 399724544 92823103 86219234 -debug 0 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/mdstat -Lines: 26 -Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] -md3 : active raid6 sda1[8] sdh1[7] sdg1[6] sdf1[5] sde1[11] sdd1[3] sdc1[10] sdb1[9] - 5853468288 blocks super 1.2 level 6, 64k chunk, algorithm 2 [8/8] [UUUUUUUU] - -md127 : active raid1 sdi2[0] sdj2[1] - 312319552 blocks [2/2] [UU] - -md0 : active raid1 sdk[2](S) sdi1[0] sdj1[1] - 248896 blocks [2/2] [UU] - -md4 : inactive raid1 sda3[0] sdb3[1] - 4883648 blocks [2/2] [UU] - -md6 : active raid1 sdb2[2] sda2[0] - 195310144 blocks [2/1] [U_] - [=>...................] recovery = 8.5% (16775552/195310144) finish=17.0min speed=259783K/sec - -md8 : active raid1 sdb1[1] sda1[0] - 195310144 blocks [2/2] [UU] - [=>...................] resync = 8.5% (16775552/195310144) finish=17.0min speed=259783K/sec - -md7 : active raid6 sdb1[0] sde1[3] sdd1[2] sdc1[1] - 7813735424 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/3] [U_UU] - bitmap: 0/30 pages [0KB], 65536KB chunk - -unused devices: -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/net -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/net/dev -Lines: 6 -Inter-| Receive | Transmit - face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed -vethf345468: 648 8 0 0 0 0 0 0 438 5 0 0 0 0 0 0 - lo: 1664039048 1566805 0 0 0 0 0 0 1664039048 1566805 0 0 0 0 0 0 -docker0: 2568 38 0 0 0 0 0 0 438 5 0 0 0 0 0 0 - eth0: 874354587 1036395 0 0 0 0 0 0 563352563 732147 0 0 0 0 0 0 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/net/ip_vs -Lines: 21 -IP Virtual Server version 1.2.1 (size=4096) -Prot LocalAddress:Port Scheduler Flags - -> RemoteAddress:Port Forward Weight ActiveConn InActConn -TCP C0A80016:0CEA wlc - -> C0A85216:0CEA Tunnel 100 248 2 - -> C0A85318:0CEA Tunnel 100 248 2 - -> C0A85315:0CEA Tunnel 100 248 1 -TCP C0A80039:0CEA wlc - -> C0A85416:0CEA Tunnel 0 0 0 - -> C0A85215:0CEA Tunnel 100 1499 0 - -> C0A83215:0CEA Tunnel 100 1498 0 -TCP C0A80037:0CEA wlc - -> C0A8321A:0CEA Tunnel 0 0 0 - -> C0A83120:0CEA Tunnel 100 0 0 -TCP [2620:0000:0000:0000:0000:0000:0000:0001]:0050 sh - -> [2620:0000:0000:0000:0000:0000:0000:0002]:0050 Route 1 0 0 - -> [2620:0000:0000:0000:0000:0000:0000:0003]:0050 Route 1 0 0 - -> [2620:0000:0000:0000:0000:0000:0000:0004]:0050 Route 1 1 1 -FWM 10001000 wlc - -> C0A8321A:0CEA Route 0 0 1 - -> C0A83215:0CEA Route 0 0 2 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/net/ip_vs_stats -Lines: 6 - Total Incoming Outgoing Incoming Outgoing - Conns Packets Packets Bytes Bytes - 16AA370 E33656E5 0 51D8C8883AB3 0 - - Conns/s Pkts/s Pkts/s Bytes/s Bytes/s - 4 1FB3C 0 1282A8F 0 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/net/rpc -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/net/rpc/nfs -Lines: 5 -net 18628 0 18628 6 -rpc 4329785 0 4338291 -proc2 18 2 69 0 0 4410 0 0 0 0 0 0 0 0 0 0 0 99 2 -proc3 22 1 4084749 29200 94754 32580 186 47747 7981 8639 0 6356 0 6962 0 7958 0 0 241 4 4 2 39 -proc4 61 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 2 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 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/net/rpc/nfsd -Lines: 11 -rc 0 6 18622 -fh 0 0 0 0 0 -io 157286400 0 -th 8 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 -ra 32 0 0 0 0 0 0 0 0 0 0 0 -net 18628 0 18628 6 -rpc 18628 0 0 0 0 -proc2 18 2 69 0 0 4410 0 0 0 0 0 0 0 0 0 0 0 99 2 -proc3 22 2 112 0 2719 111 0 0 0 0 0 0 0 0 0 0 0 27 216 0 2 1 0 -proc4 2 2 10853 -proc4ops 72 0 0 0 1098 2 0 0 0 0 8179 5896 0 0 0 0 5900 0 0 2 0 2 0 9609 0 2 150 1272 0 0 0 1236 0 0 0 0 3 3 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 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/net/xfrm_stat -Lines: 28 -XfrmInError 1 -XfrmInBufferError 2 -XfrmInHdrError 4 -XfrmInNoStates 3 -XfrmInStateProtoError 40 -XfrmInStateModeError 100 -XfrmInStateSeqError 6000 -XfrmInStateExpired 4 -XfrmInStateMismatch 23451 -XfrmInStateInvalid 55555 -XfrmInTmplMismatch 51 -XfrmInNoPols 65432 -XfrmInPolBlock 100 -XfrmInPolError 10000 -XfrmOutError 1000000 -XfrmOutBundleGenError 43321 -XfrmOutBundleCheckError 555 -XfrmOutNoStates 869 -XfrmOutStateProtoError 4542 -XfrmOutStateModeError 4 -XfrmOutStateSeqError 543 -XfrmOutStateExpired 565 -XfrmOutPolBlock 43456 -XfrmOutPolDead 7656 -XfrmOutPolError 1454 -XfrmFwdHdrError 6654 -XfrmOutStateInvalid 28765 -XfrmAcquireError 24532 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/self -SymlinkTo: 26231 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/stat -Lines: 16 -cpu 301854 612 111922 8979004 3552 2 3944 0 0 0 -cpu0 44490 19 21045 1087069 220 1 3410 0 0 0 -cpu1 47869 23 16474 1110787 591 0 46 0 0 0 -cpu2 46504 36 15916 1112321 441 0 326 0 0 0 -cpu3 47054 102 15683 1113230 533 0 60 0 0 0 -cpu4 28413 25 10776 1140321 217 0 8 0 0 0 -cpu5 29271 101 11586 1136270 672 0 30 0 0 0 -cpu6 29152 36 10276 1139721 319 0 29 0 0 0 -cpu7 29098 268 10164 1139282 555 0 31 0 0 0 -intr 8885917 17 0 0 0 0 0 0 0 1 79281 0 0 0 0 0 0 0 231237 0 0 0 0 250586 103 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 223424 190745 13 906 1283803 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 -ctxt 38014093 -btime 1418183276 -processes 26442 -procs_running 2 -procs_blocked 1 -softirq 5057579 250191 1481983 1647 211099 186066 0 1783454 622196 12499 508444 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Directory: fixtures/symlinktargets -Mode: 755 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/symlinktargets/README -Lines: 2 -This directory contains some empty files that are the symlinks the files in the "fd" directory point to. -They are otherwise ignored by the tests -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/symlinktargets/abc -Lines: 0 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/symlinktargets/def -Lines: 0 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/symlinktargets/ghi -Lines: 0 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/symlinktargets/uvw -Lines: 0 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Path: fixtures/symlinktargets/xyz -Lines: 0 -Mode: 644 -# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/github.com/prometheus/procfs/fs.go b/vendor/github.com/prometheus/procfs/fs.go deleted file mode 100644 index b6c6b2ce1..000000000 --- a/vendor/github.com/prometheus/procfs/fs.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package procfs - -import ( - "fmt" - "os" - "path" - - "github.com/prometheus/procfs/nfs" - "github.com/prometheus/procfs/xfs" -) - -// FS represents the pseudo-filesystem proc, which provides an interface to -// kernel data structures. -type FS string - -// DefaultMountPoint is the common mount point of the proc filesystem. -const DefaultMountPoint = "/proc" - -// NewFS returns a new FS mounted under the given mountPoint. It will error -// if the mount point can't be read. -func NewFS(mountPoint string) (FS, error) { - info, err := os.Stat(mountPoint) - if err != nil { - return "", fmt.Errorf("could not read %s: %s", mountPoint, err) - } - if !info.IsDir() { - return "", fmt.Errorf("mount point %s is not a directory", mountPoint) - } - - return FS(mountPoint), nil -} - -// Path returns the path of the given subsystem relative to the procfs root. -func (fs FS) Path(p ...string) string { - return path.Join(append([]string{string(fs)}, p...)...) -} - -// XFSStats retrieves XFS filesystem runtime statistics. -func (fs FS) XFSStats() (*xfs.Stats, error) { - f, err := os.Open(fs.Path("fs/xfs/stat")) - if err != nil { - return nil, err - } - defer f.Close() - - return xfs.ParseStats(f) -} - -// NFSClientRPCStats retrieves NFS client RPC statistics. -func (fs FS) NFSClientRPCStats() (*nfs.ClientRPCStats, error) { - f, err := os.Open(fs.Path("net/rpc/nfs")) - if err != nil { - return nil, err - } - defer f.Close() - - return nfs.ParseClientRPCStats(f) -} - -// NFSdServerRPCStats retrieves NFS daemon RPC statistics. -func (fs FS) NFSdServerRPCStats() (*nfs.ServerRPCStats, error) { - f, err := os.Open(fs.Path("net/rpc/nfsd")) - if err != nil { - return nil, err - } - defer f.Close() - - return nfs.ParseServerRPCStats(f) -} diff --git a/vendor/github.com/prometheus/procfs/internal/util/parse.go b/vendor/github.com/prometheus/procfs/internal/util/parse.go deleted file mode 100644 index 1ad21c91a..000000000 --- a/vendor/github.com/prometheus/procfs/internal/util/parse.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package util - -import "strconv" - -// ParseUint32s parses a slice of strings into a slice of uint32s. -func ParseUint32s(ss []string) ([]uint32, error) { - us := make([]uint32, 0, len(ss)) - for _, s := range ss { - u, err := strconv.ParseUint(s, 10, 32) - if err != nil { - return nil, err - } - - us = append(us, uint32(u)) - } - - return us, nil -} - -// ParseUint64s parses a slice of strings into a slice of uint64s. -func ParseUint64s(ss []string) ([]uint64, error) { - us := make([]uint64, 0, len(ss)) - for _, s := range ss { - u, err := strconv.ParseUint(s, 10, 64) - if err != nil { - return nil, err - } - - us = append(us, u) - } - - return us, nil -} diff --git a/vendor/github.com/prometheus/procfs/ipvs.go b/vendor/github.com/prometheus/procfs/ipvs.go deleted file mode 100644 index e36d4a3bd..000000000 --- a/vendor/github.com/prometheus/procfs/ipvs.go +++ /dev/null @@ -1,259 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package procfs - -import ( - "bufio" - "encoding/hex" - "errors" - "fmt" - "io" - "io/ioutil" - "net" - "os" - "strconv" - "strings" -) - -// IPVSStats holds IPVS statistics, as exposed by the kernel in `/proc/net/ip_vs_stats`. -type IPVSStats struct { - // Total count of connections. - Connections uint64 - // Total incoming packages processed. - IncomingPackets uint64 - // Total outgoing packages processed. - OutgoingPackets uint64 - // Total incoming traffic. - IncomingBytes uint64 - // Total outgoing traffic. - OutgoingBytes uint64 -} - -// IPVSBackendStatus holds current metrics of one virtual / real address pair. -type IPVSBackendStatus struct { - // The local (virtual) IP address. - LocalAddress net.IP - // The remote (real) IP address. - RemoteAddress net.IP - // The local (virtual) port. - LocalPort uint16 - // The remote (real) port. - RemotePort uint16 - // The local firewall mark - LocalMark string - // The transport protocol (TCP, UDP). - Proto string - // The current number of active connections for this virtual/real address pair. - ActiveConn uint64 - // The current number of inactive connections for this virtual/real address pair. - InactConn uint64 - // The current weight of this virtual/real address pair. - Weight uint64 -} - -// NewIPVSStats reads the IPVS statistics. -func NewIPVSStats() (IPVSStats, error) { - fs, err := NewFS(DefaultMountPoint) - if err != nil { - return IPVSStats{}, err - } - - return fs.NewIPVSStats() -} - -// NewIPVSStats reads the IPVS statistics from the specified `proc` filesystem. -func (fs FS) NewIPVSStats() (IPVSStats, error) { - file, err := os.Open(fs.Path("net/ip_vs_stats")) - if err != nil { - return IPVSStats{}, err - } - defer file.Close() - - return parseIPVSStats(file) -} - -// parseIPVSStats performs the actual parsing of `ip_vs_stats`. -func parseIPVSStats(file io.Reader) (IPVSStats, error) { - var ( - statContent []byte - statLines []string - statFields []string - stats IPVSStats - ) - - statContent, err := ioutil.ReadAll(file) - if err != nil { - return IPVSStats{}, err - } - - statLines = strings.SplitN(string(statContent), "\n", 4) - if len(statLines) != 4 { - return IPVSStats{}, errors.New("ip_vs_stats corrupt: too short") - } - - statFields = strings.Fields(statLines[2]) - if len(statFields) != 5 { - return IPVSStats{}, errors.New("ip_vs_stats corrupt: unexpected number of fields") - } - - stats.Connections, err = strconv.ParseUint(statFields[0], 16, 64) - if err != nil { - return IPVSStats{}, err - } - stats.IncomingPackets, err = strconv.ParseUint(statFields[1], 16, 64) - if err != nil { - return IPVSStats{}, err - } - stats.OutgoingPackets, err = strconv.ParseUint(statFields[2], 16, 64) - if err != nil { - return IPVSStats{}, err - } - stats.IncomingBytes, err = strconv.ParseUint(statFields[3], 16, 64) - if err != nil { - return IPVSStats{}, err - } - stats.OutgoingBytes, err = strconv.ParseUint(statFields[4], 16, 64) - if err != nil { - return IPVSStats{}, err - } - - return stats, nil -} - -// NewIPVSBackendStatus reads and returns the status of all (virtual,real) server pairs. -func NewIPVSBackendStatus() ([]IPVSBackendStatus, error) { - fs, err := NewFS(DefaultMountPoint) - if err != nil { - return []IPVSBackendStatus{}, err - } - - return fs.NewIPVSBackendStatus() -} - -// NewIPVSBackendStatus reads and returns the status of all (virtual,real) server pairs from the specified `proc` filesystem. -func (fs FS) NewIPVSBackendStatus() ([]IPVSBackendStatus, error) { - file, err := os.Open(fs.Path("net/ip_vs")) - if err != nil { - return nil, err - } - defer file.Close() - - return parseIPVSBackendStatus(file) -} - -func parseIPVSBackendStatus(file io.Reader) ([]IPVSBackendStatus, error) { - var ( - status []IPVSBackendStatus - scanner = bufio.NewScanner(file) - proto string - localMark string - localAddress net.IP - localPort uint16 - err error - ) - - for scanner.Scan() { - fields := strings.Fields(scanner.Text()) - if len(fields) == 0 { - continue - } - switch { - case fields[0] == "IP" || fields[0] == "Prot" || fields[1] == "RemoteAddress:Port": - continue - case fields[0] == "TCP" || fields[0] == "UDP": - if len(fields) < 2 { - continue - } - proto = fields[0] - localMark = "" - localAddress, localPort, err = parseIPPort(fields[1]) - if err != nil { - return nil, err - } - case fields[0] == "FWM": - if len(fields) < 2 { - continue - } - proto = fields[0] - localMark = fields[1] - localAddress = nil - localPort = 0 - case fields[0] == "->": - if len(fields) < 6 { - continue - } - remoteAddress, remotePort, err := parseIPPort(fields[1]) - if err != nil { - return nil, err - } - weight, err := strconv.ParseUint(fields[3], 10, 64) - if err != nil { - return nil, err - } - activeConn, err := strconv.ParseUint(fields[4], 10, 64) - if err != nil { - return nil, err - } - inactConn, err := strconv.ParseUint(fields[5], 10, 64) - if err != nil { - return nil, err - } - status = append(status, IPVSBackendStatus{ - LocalAddress: localAddress, - LocalPort: localPort, - LocalMark: localMark, - RemoteAddress: remoteAddress, - RemotePort: remotePort, - Proto: proto, - Weight: weight, - ActiveConn: activeConn, - InactConn: inactConn, - }) - } - } - return status, nil -} - -func parseIPPort(s string) (net.IP, uint16, error) { - var ( - ip net.IP - err error - ) - - switch len(s) { - case 13: - ip, err = hex.DecodeString(s[0:8]) - if err != nil { - return nil, 0, err - } - case 46: - ip = net.ParseIP(s[1:40]) - if ip == nil { - return nil, 0, fmt.Errorf("invalid IPv6 address: %s", s[1:40]) - } - default: - return nil, 0, fmt.Errorf("unexpected IP:Port: %s", s) - } - - portString := s[len(s)-4:] - if len(portString) != 4 { - return nil, 0, fmt.Errorf("unexpected port string format: %s", portString) - } - port, err := strconv.ParseUint(portString, 16, 16) - if err != nil { - return nil, 0, err - } - - return ip, uint16(port), nil -} diff --git a/vendor/github.com/prometheus/procfs/mdstat.go b/vendor/github.com/prometheus/procfs/mdstat.go deleted file mode 100644 index 9dc19583d..000000000 --- a/vendor/github.com/prometheus/procfs/mdstat.go +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package procfs - -import ( - "fmt" - "io/ioutil" - "regexp" - "strconv" - "strings" -) - -var ( - statuslineRE = regexp.MustCompile(`(\d+) blocks .*\[(\d+)/(\d+)\] \[[U_]+\]`) - buildlineRE = regexp.MustCompile(`\((\d+)/\d+\)`) -) - -// MDStat holds info parsed from /proc/mdstat. -type MDStat struct { - // Name of the device. - Name string - // activity-state of the device. - ActivityState string - // Number of active disks. - DisksActive int64 - // Total number of disks the device consists of. - DisksTotal int64 - // Number of blocks the device holds. - BlocksTotal int64 - // Number of blocks on the device that are in sync. - BlocksSynced int64 -} - -// ParseMDStat parses an mdstat-file and returns a struct with the relevant infos. -func (fs FS) ParseMDStat() (mdstates []MDStat, err error) { - mdStatusFilePath := fs.Path("mdstat") - content, err := ioutil.ReadFile(mdStatusFilePath) - if err != nil { - return []MDStat{}, fmt.Errorf("error parsing %s: %s", mdStatusFilePath, err) - } - - mdStates := []MDStat{} - lines := strings.Split(string(content), "\n") - for i, l := range lines { - if l == "" { - continue - } - if l[0] == ' ' { - continue - } - if strings.HasPrefix(l, "Personalities") || strings.HasPrefix(l, "unused") { - continue - } - - mainLine := strings.Split(l, " ") - if len(mainLine) < 3 { - return mdStates, fmt.Errorf("error parsing mdline: %s", l) - } - mdName := mainLine[0] - activityState := mainLine[2] - - if len(lines) <= i+3 { - return mdStates, fmt.Errorf( - "error parsing %s: too few lines for md device %s", - mdStatusFilePath, - mdName, - ) - } - - active, total, size, err := evalStatusline(lines[i+1]) - if err != nil { - return mdStates, fmt.Errorf("error parsing %s: %s", mdStatusFilePath, err) - } - - // j is the line number of the syncing-line. - j := i + 2 - if strings.Contains(lines[i+2], "bitmap") { // skip bitmap line - j = i + 3 - } - - // If device is syncing at the moment, get the number of currently - // synced bytes, otherwise that number equals the size of the device. - syncedBlocks := size - if strings.Contains(lines[j], "recovery") || strings.Contains(lines[j], "resync") { - syncedBlocks, err = evalBuildline(lines[j]) - if err != nil { - return mdStates, fmt.Errorf("error parsing %s: %s", mdStatusFilePath, err) - } - } - - mdStates = append(mdStates, MDStat{ - Name: mdName, - ActivityState: activityState, - DisksActive: active, - DisksTotal: total, - BlocksTotal: size, - BlocksSynced: syncedBlocks, - }) - } - - return mdStates, nil -} - -func evalStatusline(statusline string) (active, total, size int64, err error) { - matches := statuslineRE.FindStringSubmatch(statusline) - if len(matches) != 4 { - return 0, 0, 0, fmt.Errorf("unexpected statusline: %s", statusline) - } - - size, err = strconv.ParseInt(matches[1], 10, 64) - if err != nil { - return 0, 0, 0, fmt.Errorf("unexpected statusline %s: %s", statusline, err) - } - - total, err = strconv.ParseInt(matches[2], 10, 64) - if err != nil { - return 0, 0, 0, fmt.Errorf("unexpected statusline %s: %s", statusline, err) - } - - active, err = strconv.ParseInt(matches[3], 10, 64) - if err != nil { - return 0, 0, 0, fmt.Errorf("unexpected statusline %s: %s", statusline, err) - } - - return active, total, size, nil -} - -func evalBuildline(buildline string) (syncedBlocks int64, err error) { - matches := buildlineRE.FindStringSubmatch(buildline) - if len(matches) != 2 { - return 0, fmt.Errorf("unexpected buildline: %s", buildline) - } - - syncedBlocks, err = strconv.ParseInt(matches[1], 10, 64) - if err != nil { - return 0, fmt.Errorf("%s in buildline: %s", err, buildline) - } - - return syncedBlocks, nil -} diff --git a/vendor/github.com/prometheus/procfs/mountstats.go b/vendor/github.com/prometheus/procfs/mountstats.go deleted file mode 100644 index 7a8a1e099..000000000 --- a/vendor/github.com/prometheus/procfs/mountstats.go +++ /dev/null @@ -1,606 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package procfs - -// While implementing parsing of /proc/[pid]/mountstats, this blog was used -// heavily as a reference: -// https://utcc.utoronto.ca/~cks/space/blog/linux/NFSMountstatsIndex -// -// Special thanks to Chris Siebenmann for all of his posts explaining the -// various statistics available for NFS. - -import ( - "bufio" - "fmt" - "io" - "strconv" - "strings" - "time" -) - -// Constants shared between multiple functions. -const ( - deviceEntryLen = 8 - - fieldBytesLen = 8 - fieldEventsLen = 27 - - statVersion10 = "1.0" - statVersion11 = "1.1" - - fieldTransport10TCPLen = 10 - fieldTransport10UDPLen = 7 - - fieldTransport11TCPLen = 13 - fieldTransport11UDPLen = 10 -) - -// A Mount is a device mount parsed from /proc/[pid]/mountstats. -type Mount struct { - // Name of the device. - Device string - // The mount point of the device. - Mount string - // The filesystem type used by the device. - Type string - // If available additional statistics related to this Mount. - // Use a type assertion to determine if additional statistics are available. - Stats MountStats -} - -// A MountStats is a type which contains detailed statistics for a specific -// type of Mount. -type MountStats interface { - mountStats() -} - -// A MountStatsNFS is a MountStats implementation for NFSv3 and v4 mounts. -type MountStatsNFS struct { - // The version of statistics provided. - StatVersion string - // The age of the NFS mount. - Age time.Duration - // Statistics related to byte counters for various operations. - Bytes NFSBytesStats - // Statistics related to various NFS event occurrences. - Events NFSEventsStats - // Statistics broken down by filesystem operation. - Operations []NFSOperationStats - // Statistics about the NFS RPC transport. - Transport NFSTransportStats -} - -// mountStats implements MountStats. -func (m MountStatsNFS) mountStats() {} - -// A NFSBytesStats contains statistics about the number of bytes read and written -// by an NFS client to and from an NFS server. -type NFSBytesStats struct { - // Number of bytes read using the read() syscall. - Read uint64 - // Number of bytes written using the write() syscall. - Write uint64 - // Number of bytes read using the read() syscall in O_DIRECT mode. - DirectRead uint64 - // Number of bytes written using the write() syscall in O_DIRECT mode. - DirectWrite uint64 - // Number of bytes read from the NFS server, in total. - ReadTotal uint64 - // Number of bytes written to the NFS server, in total. - WriteTotal uint64 - // Number of pages read directly via mmap()'d files. - ReadPages uint64 - // Number of pages written directly via mmap()'d files. - WritePages uint64 -} - -// A NFSEventsStats contains statistics about NFS event occurrences. -type NFSEventsStats struct { - // Number of times cached inode attributes are re-validated from the server. - InodeRevalidate uint64 - // Number of times cached dentry nodes are re-validated from the server. - DnodeRevalidate uint64 - // Number of times an inode cache is cleared. - DataInvalidate uint64 - // Number of times cached inode attributes are invalidated. - AttributeInvalidate uint64 - // Number of times files or directories have been open()'d. - VFSOpen uint64 - // Number of times a directory lookup has occurred. - VFSLookup uint64 - // Number of times permissions have been checked. - VFSAccess uint64 - // Number of updates (and potential writes) to pages. - VFSUpdatePage uint64 - // Number of pages read directly via mmap()'d files. - VFSReadPage uint64 - // Number of times a group of pages have been read. - VFSReadPages uint64 - // Number of pages written directly via mmap()'d files. - VFSWritePage uint64 - // Number of times a group of pages have been written. - VFSWritePages uint64 - // Number of times directory entries have been read with getdents(). - VFSGetdents uint64 - // Number of times attributes have been set on inodes. - VFSSetattr uint64 - // Number of pending writes that have been forcefully flushed to the server. - VFSFlush uint64 - // Number of times fsync() has been called on directories and files. - VFSFsync uint64 - // Number of times locking has been attempted on a file. - VFSLock uint64 - // Number of times files have been closed and released. - VFSFileRelease uint64 - // Unknown. Possibly unused. - CongestionWait uint64 - // Number of times files have been truncated. - Truncation uint64 - // Number of times a file has been grown due to writes beyond its existing end. - WriteExtension uint64 - // Number of times a file was removed while still open by another process. - SillyRename uint64 - // Number of times the NFS server gave less data than expected while reading. - ShortRead uint64 - // Number of times the NFS server wrote less data than expected while writing. - ShortWrite uint64 - // Number of times the NFS server indicated EJUKEBOX; retrieving data from - // offline storage. - JukeboxDelay uint64 - // Number of NFS v4.1+ pNFS reads. - PNFSRead uint64 - // Number of NFS v4.1+ pNFS writes. - PNFSWrite uint64 -} - -// A NFSOperationStats contains statistics for a single operation. -type NFSOperationStats struct { - // The name of the operation. - Operation string - // Number of requests performed for this operation. - Requests uint64 - // Number of times an actual RPC request has been transmitted for this operation. - Transmissions uint64 - // Number of times a request has had a major timeout. - MajorTimeouts uint64 - // Number of bytes sent for this operation, including RPC headers and payload. - BytesSent uint64 - // Number of bytes received for this operation, including RPC headers and payload. - BytesReceived uint64 - // Duration all requests spent queued for transmission before they were sent. - CumulativeQueueTime time.Duration - // Duration it took to get a reply back after the request was transmitted. - CumulativeTotalResponseTime time.Duration - // Duration from when a request was enqueued to when it was completely handled. - CumulativeTotalRequestTime time.Duration -} - -// A NFSTransportStats contains statistics for the NFS mount RPC requests and -// responses. -type NFSTransportStats struct { - // The transport protocol used for the NFS mount. - Protocol string - // The local port used for the NFS mount. - Port uint64 - // Number of times the client has had to establish a connection from scratch - // to the NFS server. - Bind uint64 - // Number of times the client has made a TCP connection to the NFS server. - Connect uint64 - // Duration (in jiffies, a kernel internal unit of time) the NFS mount has - // spent waiting for connections to the server to be established. - ConnectIdleTime uint64 - // Duration since the NFS mount last saw any RPC traffic. - IdleTime time.Duration - // Number of RPC requests for this mount sent to the NFS server. - Sends uint64 - // Number of RPC responses for this mount received from the NFS server. - Receives uint64 - // Number of times the NFS server sent a response with a transaction ID - // unknown to this client. - BadTransactionIDs uint64 - // A running counter, incremented on each request as the current difference - // ebetween sends and receives. - CumulativeActiveRequests uint64 - // A running counter, incremented on each request by the current backlog - // queue size. - CumulativeBacklog uint64 - - // Stats below only available with stat version 1.1. - - // Maximum number of simultaneously active RPC requests ever used. - MaximumRPCSlotsUsed uint64 - // A running counter, incremented on each request as the current size of the - // sending queue. - CumulativeSendingQueue uint64 - // A running counter, incremented on each request as the current size of the - // pending queue. - CumulativePendingQueue uint64 -} - -// parseMountStats parses a /proc/[pid]/mountstats file and returns a slice -// of Mount structures containing detailed information about each mount. -// If available, statistics for each mount are parsed as well. -func parseMountStats(r io.Reader) ([]*Mount, error) { - const ( - device = "device" - statVersionPrefix = "statvers=" - - nfs3Type = "nfs" - nfs4Type = "nfs4" - ) - - var mounts []*Mount - - s := bufio.NewScanner(r) - for s.Scan() { - // Only look for device entries in this function - ss := strings.Fields(string(s.Bytes())) - if len(ss) == 0 || ss[0] != device { - continue - } - - m, err := parseMount(ss) - if err != nil { - return nil, err - } - - // Does this mount also possess statistics information? - if len(ss) > deviceEntryLen { - // Only NFSv3 and v4 are supported for parsing statistics - if m.Type != nfs3Type && m.Type != nfs4Type { - return nil, fmt.Errorf("cannot parse MountStats for fstype %q", m.Type) - } - - statVersion := strings.TrimPrefix(ss[8], statVersionPrefix) - - stats, err := parseMountStatsNFS(s, statVersion) - if err != nil { - return nil, err - } - - m.Stats = stats - } - - mounts = append(mounts, m) - } - - return mounts, s.Err() -} - -// parseMount parses an entry in /proc/[pid]/mountstats in the format: -// device [device] mounted on [mount] with fstype [type] -func parseMount(ss []string) (*Mount, error) { - if len(ss) < deviceEntryLen { - return nil, fmt.Errorf("invalid device entry: %v", ss) - } - - // Check for specific words appearing at specific indices to ensure - // the format is consistent with what we expect - format := []struct { - i int - s string - }{ - {i: 0, s: "device"}, - {i: 2, s: "mounted"}, - {i: 3, s: "on"}, - {i: 5, s: "with"}, - {i: 6, s: "fstype"}, - } - - for _, f := range format { - if ss[f.i] != f.s { - return nil, fmt.Errorf("invalid device entry: %v", ss) - } - } - - return &Mount{ - Device: ss[1], - Mount: ss[4], - Type: ss[7], - }, nil -} - -// parseMountStatsNFS parses a MountStatsNFS by scanning additional information -// related to NFS statistics. -func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, error) { - // Field indicators for parsing specific types of data - const ( - fieldAge = "age:" - fieldBytes = "bytes:" - fieldEvents = "events:" - fieldPerOpStats = "per-op" - fieldTransport = "xprt:" - ) - - stats := &MountStatsNFS{ - StatVersion: statVersion, - } - - for s.Scan() { - ss := strings.Fields(string(s.Bytes())) - if len(ss) == 0 { - break - } - if len(ss) < 2 { - return nil, fmt.Errorf("not enough information for NFS stats: %v", ss) - } - - switch ss[0] { - case fieldAge: - // Age integer is in seconds - d, err := time.ParseDuration(ss[1] + "s") - if err != nil { - return nil, err - } - - stats.Age = d - case fieldBytes: - bstats, err := parseNFSBytesStats(ss[1:]) - if err != nil { - return nil, err - } - - stats.Bytes = *bstats - case fieldEvents: - estats, err := parseNFSEventsStats(ss[1:]) - if err != nil { - return nil, err - } - - stats.Events = *estats - case fieldTransport: - if len(ss) < 3 { - return nil, fmt.Errorf("not enough information for NFS transport stats: %v", ss) - } - - tstats, err := parseNFSTransportStats(ss[1:], statVersion) - if err != nil { - return nil, err - } - - stats.Transport = *tstats - } - - // When encountering "per-operation statistics", we must break this - // loop and parse them separately to ensure we can terminate parsing - // before reaching another device entry; hence why this 'if' statement - // is not just another switch case - if ss[0] == fieldPerOpStats { - break - } - } - - if err := s.Err(); err != nil { - return nil, err - } - - // NFS per-operation stats appear last before the next device entry - perOpStats, err := parseNFSOperationStats(s) - if err != nil { - return nil, err - } - - stats.Operations = perOpStats - - return stats, nil -} - -// parseNFSBytesStats parses a NFSBytesStats line using an input set of -// integer fields. -func parseNFSBytesStats(ss []string) (*NFSBytesStats, error) { - if len(ss) != fieldBytesLen { - return nil, fmt.Errorf("invalid NFS bytes stats: %v", ss) - } - - ns := make([]uint64, 0, fieldBytesLen) - for _, s := range ss { - n, err := strconv.ParseUint(s, 10, 64) - if err != nil { - return nil, err - } - - ns = append(ns, n) - } - - return &NFSBytesStats{ - Read: ns[0], - Write: ns[1], - DirectRead: ns[2], - DirectWrite: ns[3], - ReadTotal: ns[4], - WriteTotal: ns[5], - ReadPages: ns[6], - WritePages: ns[7], - }, nil -} - -// parseNFSEventsStats parses a NFSEventsStats line using an input set of -// integer fields. -func parseNFSEventsStats(ss []string) (*NFSEventsStats, error) { - if len(ss) != fieldEventsLen { - return nil, fmt.Errorf("invalid NFS events stats: %v", ss) - } - - ns := make([]uint64, 0, fieldEventsLen) - for _, s := range ss { - n, err := strconv.ParseUint(s, 10, 64) - if err != nil { - return nil, err - } - - ns = append(ns, n) - } - - return &NFSEventsStats{ - InodeRevalidate: ns[0], - DnodeRevalidate: ns[1], - DataInvalidate: ns[2], - AttributeInvalidate: ns[3], - VFSOpen: ns[4], - VFSLookup: ns[5], - VFSAccess: ns[6], - VFSUpdatePage: ns[7], - VFSReadPage: ns[8], - VFSReadPages: ns[9], - VFSWritePage: ns[10], - VFSWritePages: ns[11], - VFSGetdents: ns[12], - VFSSetattr: ns[13], - VFSFlush: ns[14], - VFSFsync: ns[15], - VFSLock: ns[16], - VFSFileRelease: ns[17], - CongestionWait: ns[18], - Truncation: ns[19], - WriteExtension: ns[20], - SillyRename: ns[21], - ShortRead: ns[22], - ShortWrite: ns[23], - JukeboxDelay: ns[24], - PNFSRead: ns[25], - PNFSWrite: ns[26], - }, nil -} - -// parseNFSOperationStats parses a slice of NFSOperationStats by scanning -// additional information about per-operation statistics until an empty -// line is reached. -func parseNFSOperationStats(s *bufio.Scanner) ([]NFSOperationStats, error) { - const ( - // Number of expected fields in each per-operation statistics set - numFields = 9 - ) - - var ops []NFSOperationStats - - for s.Scan() { - ss := strings.Fields(string(s.Bytes())) - if len(ss) == 0 { - // Must break when reading a blank line after per-operation stats to - // enable top-level function to parse the next device entry - break - } - - if len(ss) != numFields { - return nil, fmt.Errorf("invalid NFS per-operations stats: %v", ss) - } - - // Skip string operation name for integers - ns := make([]uint64, 0, numFields-1) - for _, st := range ss[1:] { - n, err := strconv.ParseUint(st, 10, 64) - if err != nil { - return nil, err - } - - ns = append(ns, n) - } - - ops = append(ops, NFSOperationStats{ - Operation: strings.TrimSuffix(ss[0], ":"), - Requests: ns[0], - Transmissions: ns[1], - MajorTimeouts: ns[2], - BytesSent: ns[3], - BytesReceived: ns[4], - CumulativeQueueTime: time.Duration(ns[5]) * time.Millisecond, - CumulativeTotalResponseTime: time.Duration(ns[6]) * time.Millisecond, - CumulativeTotalRequestTime: time.Duration(ns[7]) * time.Millisecond, - }) - } - - return ops, s.Err() -} - -// parseNFSTransportStats parses a NFSTransportStats line using an input set of -// integer fields matched to a specific stats version. -func parseNFSTransportStats(ss []string, statVersion string) (*NFSTransportStats, error) { - // Extract the protocol field. It is the only string value in the line - protocol := ss[0] - ss = ss[1:] - - switch statVersion { - case statVersion10: - var expectedLength int - if protocol == "tcp" { - expectedLength = fieldTransport10TCPLen - } else if protocol == "udp" { - expectedLength = fieldTransport10UDPLen - } else { - return nil, fmt.Errorf("invalid NFS protocol \"%s\" in stats 1.0 statement: %v", protocol, ss) - } - if len(ss) != expectedLength { - return nil, fmt.Errorf("invalid NFS transport stats 1.0 statement: %v", ss) - } - case statVersion11: - var expectedLength int - if protocol == "tcp" { - expectedLength = fieldTransport11TCPLen - } else if protocol == "udp" { - expectedLength = fieldTransport11UDPLen - } else { - return nil, fmt.Errorf("invalid NFS protocol \"%s\" in stats 1.1 statement: %v", protocol, ss) - } - if len(ss) != expectedLength { - return nil, fmt.Errorf("invalid NFS transport stats 1.1 statement: %v", ss) - } - default: - return nil, fmt.Errorf("unrecognized NFS transport stats version: %q", statVersion) - } - - // Allocate enough for v1.1 stats since zero value for v1.1 stats will be okay - // in a v1.0 response. Since the stat length is bigger for TCP stats, we use - // the TCP length here. - // - // Note: slice length must be set to length of v1.1 stats to avoid a panic when - // only v1.0 stats are present. - // See: https://github.com/prometheus/node_exporter/issues/571. - ns := make([]uint64, fieldTransport11TCPLen) - for i, s := range ss { - n, err := strconv.ParseUint(s, 10, 64) - if err != nil { - return nil, err - } - - ns[i] = n - } - - // The fields differ depending on the transport protocol (TCP or UDP) - // From https://utcc.utoronto.ca/%7Ecks/space/blog/linux/NFSMountstatsXprt - // - // For the udp RPC transport there is no connection count, connect idle time, - // or idle time (fields #3, #4, and #5); all other fields are the same. So - // we set them to 0 here. - if protocol == "udp" { - ns = append(ns[:2], append(make([]uint64, 3), ns[2:]...)...) - } - - return &NFSTransportStats{ - Protocol: protocol, - Port: ns[0], - Bind: ns[1], - Connect: ns[2], - ConnectIdleTime: ns[3], - IdleTime: time.Duration(ns[4]) * time.Second, - Sends: ns[5], - Receives: ns[6], - BadTransactionIDs: ns[7], - CumulativeActiveRequests: ns[8], - CumulativeBacklog: ns[9], - MaximumRPCSlotsUsed: ns[10], - CumulativeSendingQueue: ns[11], - CumulativePendingQueue: ns[12], - }, nil -} diff --git a/vendor/github.com/prometheus/procfs/net_dev.go b/vendor/github.com/prometheus/procfs/net_dev.go deleted file mode 100644 index 3f2523371..000000000 --- a/vendor/github.com/prometheus/procfs/net_dev.go +++ /dev/null @@ -1,216 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package procfs - -import ( - "bufio" - "errors" - "os" - "sort" - "strconv" - "strings" -) - -// NetDevLine is single line parsed from /proc/net/dev or /proc/[pid]/net/dev. -type NetDevLine struct { - Name string `json:"name"` // The name of the interface. - RxBytes uint64 `json:"rx_bytes"` // Cumulative count of bytes received. - RxPackets uint64 `json:"rx_packets"` // Cumulative count of packets received. - RxErrors uint64 `json:"rx_errors"` // Cumulative count of receive errors encountered. - RxDropped uint64 `json:"rx_dropped"` // Cumulative count of packets dropped while receiving. - RxFIFO uint64 `json:"rx_fifo"` // Cumulative count of FIFO buffer errors. - RxFrame uint64 `json:"rx_frame"` // Cumulative count of packet framing errors. - RxCompressed uint64 `json:"rx_compressed"` // Cumulative count of compressed packets received by the device driver. - RxMulticast uint64 `json:"rx_multicast"` // Cumulative count of multicast frames received by the device driver. - TxBytes uint64 `json:"tx_bytes"` // Cumulative count of bytes transmitted. - TxPackets uint64 `json:"tx_packets"` // Cumulative count of packets transmitted. - TxErrors uint64 `json:"tx_errors"` // Cumulative count of transmit errors encountered. - TxDropped uint64 `json:"tx_dropped"` // Cumulative count of packets dropped while transmitting. - TxFIFO uint64 `json:"tx_fifo"` // Cumulative count of FIFO buffer errors. - TxCollisions uint64 `json:"tx_collisions"` // Cumulative count of collisions detected on the interface. - TxCarrier uint64 `json:"tx_carrier"` // Cumulative count of carrier losses detected by the device driver. - TxCompressed uint64 `json:"tx_compressed"` // Cumulative count of compressed packets transmitted by the device driver. -} - -// NetDev is parsed from /proc/net/dev or /proc/[pid]/net/dev. The map keys -// are interface names. -type NetDev map[string]NetDevLine - -// NewNetDev returns kernel/system statistics read from /proc/net/dev. -func NewNetDev() (NetDev, error) { - fs, err := NewFS(DefaultMountPoint) - if err != nil { - return nil, err - } - - return fs.NewNetDev() -} - -// NewNetDev returns kernel/system statistics read from /proc/net/dev. -func (fs FS) NewNetDev() (NetDev, error) { - return newNetDev(fs.Path("net/dev")) -} - -// NewNetDev returns kernel/system statistics read from /proc/[pid]/net/dev. -func (p Proc) NewNetDev() (NetDev, error) { - return newNetDev(p.path("net/dev")) -} - -// newNetDev creates a new NetDev from the contents of the given file. -func newNetDev(file string) (NetDev, error) { - f, err := os.Open(file) - if err != nil { - return NetDev{}, err - } - defer f.Close() - - nd := NetDev{} - s := bufio.NewScanner(f) - for n := 0; s.Scan(); n++ { - // Skip the 2 header lines. - if n < 2 { - continue - } - - line, err := nd.parseLine(s.Text()) - if err != nil { - return nd, err - } - - nd[line.Name] = *line - } - - return nd, s.Err() -} - -// parseLine parses a single line from the /proc/net/dev file. Header lines -// must be filtered prior to calling this method. -func (nd NetDev) parseLine(rawLine string) (*NetDevLine, error) { - parts := strings.SplitN(rawLine, ":", 2) - if len(parts) != 2 { - return nil, errors.New("invalid net/dev line, missing colon") - } - fields := strings.Fields(strings.TrimSpace(parts[1])) - - var err error - line := &NetDevLine{} - - // Interface Name - line.Name = strings.TrimSpace(parts[0]) - if line.Name == "" { - return nil, errors.New("invalid net/dev line, empty interface name") - } - - // RX - line.RxBytes, err = strconv.ParseUint(fields[0], 10, 64) - if err != nil { - return nil, err - } - line.RxPackets, err = strconv.ParseUint(fields[1], 10, 64) - if err != nil { - return nil, err - } - line.RxErrors, err = strconv.ParseUint(fields[2], 10, 64) - if err != nil { - return nil, err - } - line.RxDropped, err = strconv.ParseUint(fields[3], 10, 64) - if err != nil { - return nil, err - } - line.RxFIFO, err = strconv.ParseUint(fields[4], 10, 64) - if err != nil { - return nil, err - } - line.RxFrame, err = strconv.ParseUint(fields[5], 10, 64) - if err != nil { - return nil, err - } - line.RxCompressed, err = strconv.ParseUint(fields[6], 10, 64) - if err != nil { - return nil, err - } - line.RxMulticast, err = strconv.ParseUint(fields[7], 10, 64) - if err != nil { - return nil, err - } - - // TX - line.TxBytes, err = strconv.ParseUint(fields[8], 10, 64) - if err != nil { - return nil, err - } - line.TxPackets, err = strconv.ParseUint(fields[9], 10, 64) - if err != nil { - return nil, err - } - line.TxErrors, err = strconv.ParseUint(fields[10], 10, 64) - if err != nil { - return nil, err - } - line.TxDropped, err = strconv.ParseUint(fields[11], 10, 64) - if err != nil { - return nil, err - } - line.TxFIFO, err = strconv.ParseUint(fields[12], 10, 64) - if err != nil { - return nil, err - } - line.TxCollisions, err = strconv.ParseUint(fields[13], 10, 64) - if err != nil { - return nil, err - } - line.TxCarrier, err = strconv.ParseUint(fields[14], 10, 64) - if err != nil { - return nil, err - } - line.TxCompressed, err = strconv.ParseUint(fields[15], 10, 64) - if err != nil { - return nil, err - } - - return line, nil -} - -// Total aggregates the values across interfaces and returns a new NetDevLine. -// The Name field will be a sorted comma separated list of interface names. -func (nd NetDev) Total() NetDevLine { - total := NetDevLine{} - - names := make([]string, 0, len(nd)) - for _, ifc := range nd { - names = append(names, ifc.Name) - total.RxBytes += ifc.RxBytes - total.RxPackets += ifc.RxPackets - total.RxPackets += ifc.RxPackets - total.RxErrors += ifc.RxErrors - total.RxDropped += ifc.RxDropped - total.RxFIFO += ifc.RxFIFO - total.RxFrame += ifc.RxFrame - total.RxCompressed += ifc.RxCompressed - total.RxMulticast += ifc.RxMulticast - total.TxBytes += ifc.TxBytes - total.TxPackets += ifc.TxPackets - total.TxErrors += ifc.TxErrors - total.TxDropped += ifc.TxDropped - total.TxFIFO += ifc.TxFIFO - total.TxCollisions += ifc.TxCollisions - total.TxCarrier += ifc.TxCarrier - total.TxCompressed += ifc.TxCompressed - } - sort.Strings(names) - total.Name = strings.Join(names, ", ") - - return total -} diff --git a/vendor/github.com/prometheus/procfs/nfs/nfs.go b/vendor/github.com/prometheus/procfs/nfs/nfs.go deleted file mode 100644 index 651bf6819..000000000 --- a/vendor/github.com/prometheus/procfs/nfs/nfs.go +++ /dev/null @@ -1,263 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package nfs implements parsing of /proc/net/rpc/nfsd. -// Fields are documented in https://www.svennd.be/nfsd-stats-explained-procnetrpcnfsd/ -package nfs - -// ReplyCache models the "rc" line. -type ReplyCache struct { - Hits uint64 - Misses uint64 - NoCache uint64 -} - -// FileHandles models the "fh" line. -type FileHandles struct { - Stale uint64 - TotalLookups uint64 - AnonLookups uint64 - DirNoCache uint64 - NoDirNoCache uint64 -} - -// InputOutput models the "io" line. -type InputOutput struct { - Read uint64 - Write uint64 -} - -// Threads models the "th" line. -type Threads struct { - Threads uint64 - FullCnt uint64 -} - -// ReadAheadCache models the "ra" line. -type ReadAheadCache struct { - CacheSize uint64 - CacheHistogram []uint64 - NotFound uint64 -} - -// Network models the "net" line. -type Network struct { - NetCount uint64 - UDPCount uint64 - TCPCount uint64 - TCPConnect uint64 -} - -// ClientRPC models the nfs "rpc" line. -type ClientRPC struct { - RPCCount uint64 - Retransmissions uint64 - AuthRefreshes uint64 -} - -// ServerRPC models the nfsd "rpc" line. -type ServerRPC struct { - RPCCount uint64 - BadCnt uint64 - BadFmt uint64 - BadAuth uint64 - BadcInt uint64 -} - -// V2Stats models the "proc2" line. -type V2Stats struct { - Null uint64 - GetAttr uint64 - SetAttr uint64 - Root uint64 - Lookup uint64 - ReadLink uint64 - Read uint64 - WrCache uint64 - Write uint64 - Create uint64 - Remove uint64 - Rename uint64 - Link uint64 - SymLink uint64 - MkDir uint64 - RmDir uint64 - ReadDir uint64 - FsStat uint64 -} - -// V3Stats models the "proc3" line. -type V3Stats struct { - Null uint64 - GetAttr uint64 - SetAttr uint64 - Lookup uint64 - Access uint64 - ReadLink uint64 - Read uint64 - Write uint64 - Create uint64 - MkDir uint64 - SymLink uint64 - MkNod uint64 - Remove uint64 - RmDir uint64 - Rename uint64 - Link uint64 - ReadDir uint64 - ReadDirPlus uint64 - FsStat uint64 - FsInfo uint64 - PathConf uint64 - Commit uint64 -} - -// ClientV4Stats models the nfs "proc4" line. -type ClientV4Stats struct { - Null uint64 - Read uint64 - Write uint64 - Commit uint64 - Open uint64 - OpenConfirm uint64 - OpenNoattr uint64 - OpenDowngrade uint64 - Close uint64 - Setattr uint64 - FsInfo uint64 - Renew uint64 - SetClientID uint64 - SetClientIDConfirm uint64 - Lock uint64 - Lockt uint64 - Locku uint64 - Access uint64 - Getattr uint64 - Lookup uint64 - LookupRoot uint64 - Remove uint64 - Rename uint64 - Link uint64 - Symlink uint64 - Create uint64 - Pathconf uint64 - StatFs uint64 - ReadLink uint64 - ReadDir uint64 - ServerCaps uint64 - DelegReturn uint64 - GetACL uint64 - SetACL uint64 - FsLocations uint64 - ReleaseLockowner uint64 - Secinfo uint64 - FsidPresent uint64 - ExchangeID uint64 - CreateSession uint64 - DestroySession uint64 - Sequence uint64 - GetLeaseTime uint64 - ReclaimComplete uint64 - LayoutGet uint64 - GetDeviceInfo uint64 - LayoutCommit uint64 - LayoutReturn uint64 - SecinfoNoName uint64 - TestStateID uint64 - FreeStateID uint64 - GetDeviceList uint64 - BindConnToSession uint64 - DestroyClientID uint64 - Seek uint64 - Allocate uint64 - DeAllocate uint64 - LayoutStats uint64 - Clone uint64 -} - -// ServerV4Stats models the nfsd "proc4" line. -type ServerV4Stats struct { - Null uint64 - Compound uint64 -} - -// V4Ops models the "proc4ops" line: NFSv4 operations -// Variable list, see: -// v4.0 https://tools.ietf.org/html/rfc3010 (38 operations) -// v4.1 https://tools.ietf.org/html/rfc5661 (58 operations) -// v4.2 https://tools.ietf.org/html/draft-ietf-nfsv4-minorversion2-41 (71 operations) -type V4Ops struct { - //Values uint64 // Variable depending on v4.x sub-version. TODO: Will this always at least include the fields in this struct? - Op0Unused uint64 - Op1Unused uint64 - Op2Future uint64 - Access uint64 - Close uint64 - Commit uint64 - Create uint64 - DelegPurge uint64 - DelegReturn uint64 - GetAttr uint64 - GetFH uint64 - Link uint64 - Lock uint64 - Lockt uint64 - Locku uint64 - Lookup uint64 - LookupRoot uint64 - Nverify uint64 - Open uint64 - OpenAttr uint64 - OpenConfirm uint64 - OpenDgrd uint64 - PutFH uint64 - PutPubFH uint64 - PutRootFH uint64 - Read uint64 - ReadDir uint64 - ReadLink uint64 - Remove uint64 - Rename uint64 - Renew uint64 - RestoreFH uint64 - SaveFH uint64 - SecInfo uint64 - SetAttr uint64 - Verify uint64 - Write uint64 - RelLockOwner uint64 -} - -// ClientRPCStats models all stats from /proc/net/rpc/nfs. -type ClientRPCStats struct { - Network Network - ClientRPC ClientRPC - V2Stats V2Stats - V3Stats V3Stats - ClientV4Stats ClientV4Stats -} - -// ServerRPCStats models all stats from /proc/net/rpc/nfsd. -type ServerRPCStats struct { - ReplyCache ReplyCache - FileHandles FileHandles - InputOutput InputOutput - Threads Threads - ReadAheadCache ReadAheadCache - Network Network - ServerRPC ServerRPC - V2Stats V2Stats - V3Stats V3Stats - ServerV4Stats ServerV4Stats - V4Ops V4Ops -} diff --git a/vendor/github.com/prometheus/procfs/nfs/parse.go b/vendor/github.com/prometheus/procfs/nfs/parse.go deleted file mode 100644 index 95a83cc5b..000000000 --- a/vendor/github.com/prometheus/procfs/nfs/parse.go +++ /dev/null @@ -1,317 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package nfs - -import ( - "fmt" -) - -func parseReplyCache(v []uint64) (ReplyCache, error) { - if len(v) != 3 { - return ReplyCache{}, fmt.Errorf("invalid ReplyCache line %q", v) - } - - return ReplyCache{ - Hits: v[0], - Misses: v[1], - NoCache: v[2], - }, nil -} - -func parseFileHandles(v []uint64) (FileHandles, error) { - if len(v) != 5 { - return FileHandles{}, fmt.Errorf("invalid FileHandles, line %q", v) - } - - return FileHandles{ - Stale: v[0], - TotalLookups: v[1], - AnonLookups: v[2], - DirNoCache: v[3], - NoDirNoCache: v[4], - }, nil -} - -func parseInputOutput(v []uint64) (InputOutput, error) { - if len(v) != 2 { - return InputOutput{}, fmt.Errorf("invalid InputOutput line %q", v) - } - - return InputOutput{ - Read: v[0], - Write: v[1], - }, nil -} - -func parseThreads(v []uint64) (Threads, error) { - if len(v) != 2 { - return Threads{}, fmt.Errorf("invalid Threads line %q", v) - } - - return Threads{ - Threads: v[0], - FullCnt: v[1], - }, nil -} - -func parseReadAheadCache(v []uint64) (ReadAheadCache, error) { - if len(v) != 12 { - return ReadAheadCache{}, fmt.Errorf("invalid ReadAheadCache line %q", v) - } - - return ReadAheadCache{ - CacheSize: v[0], - CacheHistogram: v[1:11], - NotFound: v[11], - }, nil -} - -func parseNetwork(v []uint64) (Network, error) { - if len(v) != 4 { - return Network{}, fmt.Errorf("invalid Network line %q", v) - } - - return Network{ - NetCount: v[0], - UDPCount: v[1], - TCPCount: v[2], - TCPConnect: v[3], - }, nil -} - -func parseServerRPC(v []uint64) (ServerRPC, error) { - if len(v) != 5 { - return ServerRPC{}, fmt.Errorf("invalid RPC line %q", v) - } - - return ServerRPC{ - RPCCount: v[0], - BadCnt: v[1], - BadFmt: v[2], - BadAuth: v[3], - BadcInt: v[4], - }, nil -} - -func parseClientRPC(v []uint64) (ClientRPC, error) { - if len(v) != 3 { - return ClientRPC{}, fmt.Errorf("invalid RPC line %q", v) - } - - return ClientRPC{ - RPCCount: v[0], - Retransmissions: v[1], - AuthRefreshes: v[2], - }, nil -} - -func parseV2Stats(v []uint64) (V2Stats, error) { - values := int(v[0]) - if len(v[1:]) != values || values != 18 { - return V2Stats{}, fmt.Errorf("invalid V2Stats line %q", v) - } - - return V2Stats{ - Null: v[1], - GetAttr: v[2], - SetAttr: v[3], - Root: v[4], - Lookup: v[5], - ReadLink: v[6], - Read: v[7], - WrCache: v[8], - Write: v[9], - Create: v[10], - Remove: v[11], - Rename: v[12], - Link: v[13], - SymLink: v[14], - MkDir: v[15], - RmDir: v[16], - ReadDir: v[17], - FsStat: v[18], - }, nil -} - -func parseV3Stats(v []uint64) (V3Stats, error) { - values := int(v[0]) - if len(v[1:]) != values || values != 22 { - return V3Stats{}, fmt.Errorf("invalid V3Stats line %q", v) - } - - return V3Stats{ - Null: v[1], - GetAttr: v[2], - SetAttr: v[3], - Lookup: v[4], - Access: v[5], - ReadLink: v[6], - Read: v[7], - Write: v[8], - Create: v[9], - MkDir: v[10], - SymLink: v[11], - MkNod: v[12], - Remove: v[13], - RmDir: v[14], - Rename: v[15], - Link: v[16], - ReadDir: v[17], - ReadDirPlus: v[18], - FsStat: v[19], - FsInfo: v[20], - PathConf: v[21], - Commit: v[22], - }, nil -} - -func parseClientV4Stats(v []uint64) (ClientV4Stats, error) { - values := int(v[0]) - if len(v[1:]) != values { - return ClientV4Stats{}, fmt.Errorf("invalid ClientV4Stats line %q", v) - } - - // This function currently supports mapping 59 NFS v4 client stats. Older - // kernels may emit fewer stats, so we must detect this and pad out the - // values to match the expected slice size. - if values < 59 { - newValues := make([]uint64, 60) - copy(newValues, v) - v = newValues - } - - return ClientV4Stats{ - Null: v[1], - Read: v[2], - Write: v[3], - Commit: v[4], - Open: v[5], - OpenConfirm: v[6], - OpenNoattr: v[7], - OpenDowngrade: v[8], - Close: v[9], - Setattr: v[10], - FsInfo: v[11], - Renew: v[12], - SetClientID: v[13], - SetClientIDConfirm: v[14], - Lock: v[15], - Lockt: v[16], - Locku: v[17], - Access: v[18], - Getattr: v[19], - Lookup: v[20], - LookupRoot: v[21], - Remove: v[22], - Rename: v[23], - Link: v[24], - Symlink: v[25], - Create: v[26], - Pathconf: v[27], - StatFs: v[28], - ReadLink: v[29], - ReadDir: v[30], - ServerCaps: v[31], - DelegReturn: v[32], - GetACL: v[33], - SetACL: v[34], - FsLocations: v[35], - ReleaseLockowner: v[36], - Secinfo: v[37], - FsidPresent: v[38], - ExchangeID: v[39], - CreateSession: v[40], - DestroySession: v[41], - Sequence: v[42], - GetLeaseTime: v[43], - ReclaimComplete: v[44], - LayoutGet: v[45], - GetDeviceInfo: v[46], - LayoutCommit: v[47], - LayoutReturn: v[48], - SecinfoNoName: v[49], - TestStateID: v[50], - FreeStateID: v[51], - GetDeviceList: v[52], - BindConnToSession: v[53], - DestroyClientID: v[54], - Seek: v[55], - Allocate: v[56], - DeAllocate: v[57], - LayoutStats: v[58], - Clone: v[59], - }, nil -} - -func parseServerV4Stats(v []uint64) (ServerV4Stats, error) { - values := int(v[0]) - if len(v[1:]) != values || values != 2 { - return ServerV4Stats{}, fmt.Errorf("invalid V4Stats line %q", v) - } - - return ServerV4Stats{ - Null: v[1], - Compound: v[2], - }, nil -} - -func parseV4Ops(v []uint64) (V4Ops, error) { - values := int(v[0]) - if len(v[1:]) != values || values < 39 { - return V4Ops{}, fmt.Errorf("invalid V4Ops line %q", v) - } - - stats := V4Ops{ - Op0Unused: v[1], - Op1Unused: v[2], - Op2Future: v[3], - Access: v[4], - Close: v[5], - Commit: v[6], - Create: v[7], - DelegPurge: v[8], - DelegReturn: v[9], - GetAttr: v[10], - GetFH: v[11], - Link: v[12], - Lock: v[13], - Lockt: v[14], - Locku: v[15], - Lookup: v[16], - LookupRoot: v[17], - Nverify: v[18], - Open: v[19], - OpenAttr: v[20], - OpenConfirm: v[21], - OpenDgrd: v[22], - PutFH: v[23], - PutPubFH: v[24], - PutRootFH: v[25], - Read: v[26], - ReadDir: v[27], - ReadLink: v[28], - Remove: v[29], - Rename: v[30], - Renew: v[31], - RestoreFH: v[32], - SaveFH: v[33], - SecInfo: v[34], - SetAttr: v[35], - Verify: v[36], - Write: v[37], - RelLockOwner: v[38], - } - - return stats, nil -} diff --git a/vendor/github.com/prometheus/procfs/nfs/parse_nfs.go b/vendor/github.com/prometheus/procfs/nfs/parse_nfs.go deleted file mode 100644 index c0d3a5ad9..000000000 --- a/vendor/github.com/prometheus/procfs/nfs/parse_nfs.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package nfs - -import ( - "bufio" - "fmt" - "io" - "strings" - - "github.com/prometheus/procfs/internal/util" -) - -// ParseClientRPCStats returns stats read from /proc/net/rpc/nfs -func ParseClientRPCStats(r io.Reader) (*ClientRPCStats, error) { - stats := &ClientRPCStats{} - - scanner := bufio.NewScanner(r) - for scanner.Scan() { - line := scanner.Text() - parts := strings.Fields(scanner.Text()) - // require at least - if len(parts) < 2 { - return nil, fmt.Errorf("invalid NFS metric line %q", line) - } - - values, err := util.ParseUint64s(parts[1:]) - if err != nil { - return nil, fmt.Errorf("error parsing NFS metric line: %s", err) - } - - switch metricLine := parts[0]; metricLine { - case "net": - stats.Network, err = parseNetwork(values) - case "rpc": - stats.ClientRPC, err = parseClientRPC(values) - case "proc2": - stats.V2Stats, err = parseV2Stats(values) - case "proc3": - stats.V3Stats, err = parseV3Stats(values) - case "proc4": - stats.ClientV4Stats, err = parseClientV4Stats(values) - default: - return nil, fmt.Errorf("unknown NFS metric line %q", metricLine) - } - if err != nil { - return nil, fmt.Errorf("errors parsing NFS metric line: %s", err) - } - } - - if err := scanner.Err(); err != nil { - return nil, fmt.Errorf("error scanning NFS file: %s", err) - } - - return stats, nil -} diff --git a/vendor/github.com/prometheus/procfs/nfs/parse_nfsd.go b/vendor/github.com/prometheus/procfs/nfs/parse_nfsd.go deleted file mode 100644 index 57bb4a358..000000000 --- a/vendor/github.com/prometheus/procfs/nfs/parse_nfsd.go +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package nfs - -import ( - "bufio" - "fmt" - "io" - "strings" - - "github.com/prometheus/procfs/internal/util" -) - -// ParseServerRPCStats returns stats read from /proc/net/rpc/nfsd -func ParseServerRPCStats(r io.Reader) (*ServerRPCStats, error) { - stats := &ServerRPCStats{} - - scanner := bufio.NewScanner(r) - for scanner.Scan() { - line := scanner.Text() - parts := strings.Fields(scanner.Text()) - // require at least - if len(parts) < 2 { - return nil, fmt.Errorf("invalid NFSd metric line %q", line) - } - label := parts[0] - - var values []uint64 - var err error - if label == "th" { - if len(parts) < 3 { - return nil, fmt.Errorf("invalid NFSd th metric line %q", line) - } - values, err = util.ParseUint64s(parts[1:3]) - } else { - values, err = util.ParseUint64s(parts[1:]) - } - if err != nil { - return nil, fmt.Errorf("error parsing NFSd metric line: %s", err) - } - - switch metricLine := parts[0]; metricLine { - case "rc": - stats.ReplyCache, err = parseReplyCache(values) - case "fh": - stats.FileHandles, err = parseFileHandles(values) - case "io": - stats.InputOutput, err = parseInputOutput(values) - case "th": - stats.Threads, err = parseThreads(values) - case "ra": - stats.ReadAheadCache, err = parseReadAheadCache(values) - case "net": - stats.Network, err = parseNetwork(values) - case "rpc": - stats.ServerRPC, err = parseServerRPC(values) - case "proc2": - stats.V2Stats, err = parseV2Stats(values) - case "proc3": - stats.V3Stats, err = parseV3Stats(values) - case "proc4": - stats.ServerV4Stats, err = parseServerV4Stats(values) - case "proc4ops": - stats.V4Ops, err = parseV4Ops(values) - default: - return nil, fmt.Errorf("unknown NFSd metric line %q", metricLine) - } - if err != nil { - return nil, fmt.Errorf("errors parsing NFSd metric line: %s", err) - } - } - - if err := scanner.Err(); err != nil { - return nil, fmt.Errorf("error scanning NFSd file: %s", err) - } - - return stats, nil -} diff --git a/vendor/github.com/prometheus/procfs/proc.go b/vendor/github.com/prometheus/procfs/proc.go deleted file mode 100644 index 7cf5b8acf..000000000 --- a/vendor/github.com/prometheus/procfs/proc.go +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package procfs - -import ( - "bytes" - "fmt" - "io/ioutil" - "os" - "strconv" - "strings" -) - -// Proc provides information about a running process. -type Proc struct { - // The process ID. - PID int - - fs FS -} - -// Procs represents a list of Proc structs. -type Procs []Proc - -func (p Procs) Len() int { return len(p) } -func (p Procs) Swap(i, j int) { p[i], p[j] = p[j], p[i] } -func (p Procs) Less(i, j int) bool { return p[i].PID < p[j].PID } - -// Self returns a process for the current process read via /proc/self. -func Self() (Proc, error) { - fs, err := NewFS(DefaultMountPoint) - if err != nil { - return Proc{}, err - } - return fs.Self() -} - -// NewProc returns a process for the given pid under /proc. -func NewProc(pid int) (Proc, error) { - fs, err := NewFS(DefaultMountPoint) - if err != nil { - return Proc{}, err - } - return fs.NewProc(pid) -} - -// AllProcs returns a list of all currently available processes under /proc. -func AllProcs() (Procs, error) { - fs, err := NewFS(DefaultMountPoint) - if err != nil { - return Procs{}, err - } - return fs.AllProcs() -} - -// Self returns a process for the current process. -func (fs FS) Self() (Proc, error) { - p, err := os.Readlink(fs.Path("self")) - if err != nil { - return Proc{}, err - } - pid, err := strconv.Atoi(strings.Replace(p, string(fs), "", -1)) - if err != nil { - return Proc{}, err - } - return fs.NewProc(pid) -} - -// NewProc returns a process for the given pid. -func (fs FS) NewProc(pid int) (Proc, error) { - if _, err := os.Stat(fs.Path(strconv.Itoa(pid))); err != nil { - return Proc{}, err - } - return Proc{PID: pid, fs: fs}, nil -} - -// AllProcs returns a list of all currently available processes. -func (fs FS) AllProcs() (Procs, error) { - d, err := os.Open(fs.Path()) - if err != nil { - return Procs{}, err - } - defer d.Close() - - names, err := d.Readdirnames(-1) - if err != nil { - return Procs{}, fmt.Errorf("could not read %s: %s", d.Name(), err) - } - - p := Procs{} - for _, n := range names { - pid, err := strconv.ParseInt(n, 10, 64) - if err != nil { - continue - } - p = append(p, Proc{PID: int(pid), fs: fs}) - } - - return p, nil -} - -// CmdLine returns the command line of a process. -func (p Proc) CmdLine() ([]string, error) { - f, err := os.Open(p.path("cmdline")) - if err != nil { - return nil, err - } - defer f.Close() - - data, err := ioutil.ReadAll(f) - if err != nil { - return nil, err - } - - if len(data) < 1 { - return []string{}, nil - } - - return strings.Split(string(bytes.TrimRight(data, string("\x00"))), string(byte(0))), nil -} - -// Comm returns the command name of a process. -func (p Proc) Comm() (string, error) { - f, err := os.Open(p.path("comm")) - if err != nil { - return "", err - } - defer f.Close() - - data, err := ioutil.ReadAll(f) - if err != nil { - return "", err - } - - return strings.TrimSpace(string(data)), nil -} - -// Executable returns the absolute path of the executable command of a process. -func (p Proc) Executable() (string, error) { - exe, err := os.Readlink(p.path("exe")) - if os.IsNotExist(err) { - return "", nil - } - - return exe, err -} - -// FileDescriptors returns the currently open file descriptors of a process. -func (p Proc) FileDescriptors() ([]uintptr, error) { - names, err := p.fileDescriptors() - if err != nil { - return nil, err - } - - fds := make([]uintptr, len(names)) - for i, n := range names { - fd, err := strconv.ParseInt(n, 10, 32) - if err != nil { - return nil, fmt.Errorf("could not parse fd %s: %s", n, err) - } - fds[i] = uintptr(fd) - } - - return fds, nil -} - -// FileDescriptorTargets returns the targets of all file descriptors of a process. -// If a file descriptor is not a symlink to a file (like a socket), that value will be the empty string. -func (p Proc) FileDescriptorTargets() ([]string, error) { - names, err := p.fileDescriptors() - if err != nil { - return nil, err - } - - targets := make([]string, len(names)) - - for i, name := range names { - target, err := os.Readlink(p.path("fd", name)) - if err == nil { - targets[i] = target - } - } - - return targets, nil -} - -// FileDescriptorsLen returns the number of currently open file descriptors of -// a process. -func (p Proc) FileDescriptorsLen() (int, error) { - fds, err := p.fileDescriptors() - if err != nil { - return 0, err - } - - return len(fds), nil -} - -// MountStats retrieves statistics and configuration for mount points in a -// process's namespace. -func (p Proc) MountStats() ([]*Mount, error) { - f, err := os.Open(p.path("mountstats")) - if err != nil { - return nil, err - } - defer f.Close() - - return parseMountStats(f) -} - -func (p Proc) fileDescriptors() ([]string, error) { - d, err := os.Open(p.path("fd")) - if err != nil { - return nil, err - } - defer d.Close() - - names, err := d.Readdirnames(-1) - if err != nil { - return nil, fmt.Errorf("could not read %s: %s", d.Name(), err) - } - - return names, nil -} - -func (p Proc) path(pa ...string) string { - return p.fs.Path(append([]string{strconv.Itoa(p.PID)}, pa...)...) -} diff --git a/vendor/github.com/prometheus/procfs/proc_io.go b/vendor/github.com/prometheus/procfs/proc_io.go deleted file mode 100644 index 0251c83bf..000000000 --- a/vendor/github.com/prometheus/procfs/proc_io.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package procfs - -import ( - "fmt" - "io/ioutil" - "os" -) - -// ProcIO models the content of /proc//io. -type ProcIO struct { - // Chars read. - RChar uint64 - // Chars written. - WChar uint64 - // Read syscalls. - SyscR uint64 - // Write syscalls. - SyscW uint64 - // Bytes read. - ReadBytes uint64 - // Bytes written. - WriteBytes uint64 - // Bytes written, but taking into account truncation. See - // Documentation/filesystems/proc.txt in the kernel sources for - // detailed explanation. - CancelledWriteBytes int64 -} - -// NewIO creates a new ProcIO instance from a given Proc instance. -func (p Proc) NewIO() (ProcIO, error) { - pio := ProcIO{} - - f, err := os.Open(p.path("io")) - if err != nil { - return pio, err - } - defer f.Close() - - data, err := ioutil.ReadAll(f) - if err != nil { - return pio, err - } - - ioFormat := "rchar: %d\nwchar: %d\nsyscr: %d\nsyscw: %d\n" + - "read_bytes: %d\nwrite_bytes: %d\n" + - "cancelled_write_bytes: %d\n" - - _, err = fmt.Sscanf(string(data), ioFormat, &pio.RChar, &pio.WChar, &pio.SyscR, - &pio.SyscW, &pio.ReadBytes, &pio.WriteBytes, &pio.CancelledWriteBytes) - - return pio, err -} diff --git a/vendor/github.com/prometheus/procfs/proc_limits.go b/vendor/github.com/prometheus/procfs/proc_limits.go deleted file mode 100644 index f04ba6fda..000000000 --- a/vendor/github.com/prometheus/procfs/proc_limits.go +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package procfs - -import ( - "bufio" - "fmt" - "os" - "regexp" - "strconv" -) - -// ProcLimits represents the soft limits for each of the process's resource -// limits. For more information see getrlimit(2): -// http://man7.org/linux/man-pages/man2/getrlimit.2.html. -type ProcLimits struct { - // CPU time limit in seconds. - CPUTime int64 - // Maximum size of files that the process may create. - FileSize int64 - // Maximum size of the process's data segment (initialized data, - // uninitialized data, and heap). - DataSize int64 - // Maximum size of the process stack in bytes. - StackSize int64 - // Maximum size of a core file. - CoreFileSize int64 - // Limit of the process's resident set in pages. - ResidentSet int64 - // Maximum number of processes that can be created for the real user ID of - // the calling process. - Processes int64 - // Value one greater than the maximum file descriptor number that can be - // opened by this process. - OpenFiles int64 - // Maximum number of bytes of memory that may be locked into RAM. - LockedMemory int64 - // Maximum size of the process's virtual memory address space in bytes. - AddressSpace int64 - // Limit on the combined number of flock(2) locks and fcntl(2) leases that - // this process may establish. - FileLocks int64 - // Limit of signals that may be queued for the real user ID of the calling - // process. - PendingSignals int64 - // Limit on the number of bytes that can be allocated for POSIX message - // queues for the real user ID of the calling process. - MsqqueueSize int64 - // Limit of the nice priority set using setpriority(2) or nice(2). - NicePriority int64 - // Limit of the real-time priority set using sched_setscheduler(2) or - // sched_setparam(2). - RealtimePriority int64 - // Limit (in microseconds) on the amount of CPU time that a process - // scheduled under a real-time scheduling policy may consume without making - // a blocking system call. - RealtimeTimeout int64 -} - -const ( - limitsFields = 3 - limitsUnlimited = "unlimited" -) - -var ( - limitsDelimiter = regexp.MustCompile(" +") -) - -// NewLimits returns the current soft limits of the process. -func (p Proc) NewLimits() (ProcLimits, error) { - f, err := os.Open(p.path("limits")) - if err != nil { - return ProcLimits{}, err - } - defer f.Close() - - var ( - l = ProcLimits{} - s = bufio.NewScanner(f) - ) - for s.Scan() { - fields := limitsDelimiter.Split(s.Text(), limitsFields) - if len(fields) != limitsFields { - return ProcLimits{}, fmt.Errorf( - "couldn't parse %s line %s", f.Name(), s.Text()) - } - - switch fields[0] { - case "Max cpu time": - l.CPUTime, err = parseInt(fields[1]) - case "Max file size": - l.FileSize, err = parseInt(fields[1]) - case "Max data size": - l.DataSize, err = parseInt(fields[1]) - case "Max stack size": - l.StackSize, err = parseInt(fields[1]) - case "Max core file size": - l.CoreFileSize, err = parseInt(fields[1]) - case "Max resident set": - l.ResidentSet, err = parseInt(fields[1]) - case "Max processes": - l.Processes, err = parseInt(fields[1]) - case "Max open files": - l.OpenFiles, err = parseInt(fields[1]) - case "Max locked memory": - l.LockedMemory, err = parseInt(fields[1]) - case "Max address space": - l.AddressSpace, err = parseInt(fields[1]) - case "Max file locks": - l.FileLocks, err = parseInt(fields[1]) - case "Max pending signals": - l.PendingSignals, err = parseInt(fields[1]) - case "Max msgqueue size": - l.MsqqueueSize, err = parseInt(fields[1]) - case "Max nice priority": - l.NicePriority, err = parseInt(fields[1]) - case "Max realtime priority": - l.RealtimePriority, err = parseInt(fields[1]) - case "Max realtime timeout": - l.RealtimeTimeout, err = parseInt(fields[1]) - } - if err != nil { - return ProcLimits{}, err - } - } - - return l, s.Err() -} - -func parseInt(s string) (int64, error) { - if s == limitsUnlimited { - return -1, nil - } - i, err := strconv.ParseInt(s, 10, 64) - if err != nil { - return 0, fmt.Errorf("couldn't parse value %s: %s", s, err) - } - return i, nil -} diff --git a/vendor/github.com/prometheus/procfs/proc_ns.go b/vendor/github.com/prometheus/procfs/proc_ns.go deleted file mode 100644 index d06c26eba..000000000 --- a/vendor/github.com/prometheus/procfs/proc_ns.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package procfs - -import ( - "fmt" - "os" - "strconv" - "strings" -) - -// Namespace represents a single namespace of a process. -type Namespace struct { - Type string // Namespace type. - Inode uint32 // Inode number of the namespace. If two processes are in the same namespace their inodes will match. -} - -// Namespaces contains all of the namespaces that the process is contained in. -type Namespaces map[string]Namespace - -// NewNamespaces reads from /proc/[pid/ns/* to get the namespaces of which the -// process is a member. -func (p Proc) NewNamespaces() (Namespaces, error) { - d, err := os.Open(p.path("ns")) - if err != nil { - return nil, err - } - defer d.Close() - - names, err := d.Readdirnames(-1) - if err != nil { - return nil, fmt.Errorf("failed to read contents of ns dir: %v", err) - } - - ns := make(Namespaces, len(names)) - for _, name := range names { - target, err := os.Readlink(p.path("ns", name)) - if err != nil { - return nil, err - } - - fields := strings.SplitN(target, ":", 2) - if len(fields) != 2 { - return nil, fmt.Errorf("failed to parse namespace type and inode from '%v'", target) - } - - typ := fields[0] - inode, err := strconv.ParseUint(strings.Trim(fields[1], "[]"), 10, 32) - if err != nil { - return nil, fmt.Errorf("failed to parse inode from '%v': %v", fields[1], err) - } - - ns[name] = Namespace{typ, uint32(inode)} - } - - return ns, nil -} diff --git a/vendor/github.com/prometheus/procfs/proc_stat.go b/vendor/github.com/prometheus/procfs/proc_stat.go deleted file mode 100644 index 3cf2a9f18..000000000 --- a/vendor/github.com/prometheus/procfs/proc_stat.go +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package procfs - -import ( - "bytes" - "fmt" - "io/ioutil" - "os" -) - -// Originally, this USER_HZ value was dynamically retrieved via a sysconf call -// which required cgo. However, that caused a lot of problems regarding -// cross-compilation. Alternatives such as running a binary to determine the -// value, or trying to derive it in some other way were all problematic. After -// much research it was determined that USER_HZ is actually hardcoded to 100 on -// all Go-supported platforms as of the time of this writing. This is why we -// decided to hardcode it here as well. It is not impossible that there could -// be systems with exceptions, but they should be very exotic edge cases, and -// in that case, the worst outcome will be two misreported metrics. -// -// See also the following discussions: -// -// - https://github.com/prometheus/node_exporter/issues/52 -// - https://github.com/prometheus/procfs/pull/2 -// - http://stackoverflow.com/questions/17410841/how-does-user-hz-solve-the-jiffy-scaling-issue -const userHZ = 100 - -// ProcStat provides status information about the process, -// read from /proc/[pid]/stat. -type ProcStat struct { - // The process ID. - PID int - // The filename of the executable. - Comm string - // The process state. - State string - // The PID of the parent of this process. - PPID int - // The process group ID of the process. - PGRP int - // The session ID of the process. - Session int - // The controlling terminal of the process. - TTY int - // The ID of the foreground process group of the controlling terminal of - // the process. - TPGID int - // The kernel flags word of the process. - Flags uint - // The number of minor faults the process has made which have not required - // loading a memory page from disk. - MinFlt uint - // The number of minor faults that the process's waited-for children have - // made. - CMinFlt uint - // The number of major faults the process has made which have required - // loading a memory page from disk. - MajFlt uint - // The number of major faults that the process's waited-for children have - // made. - CMajFlt uint - // Amount of time that this process has been scheduled in user mode, - // measured in clock ticks. - UTime uint - // Amount of time that this process has been scheduled in kernel mode, - // measured in clock ticks. - STime uint - // Amount of time that this process's waited-for children have been - // scheduled in user mode, measured in clock ticks. - CUTime uint - // Amount of time that this process's waited-for children have been - // scheduled in kernel mode, measured in clock ticks. - CSTime uint - // For processes running a real-time scheduling policy, this is the negated - // scheduling priority, minus one. - Priority int - // The nice value, a value in the range 19 (low priority) to -20 (high - // priority). - Nice int - // Number of threads in this process. - NumThreads int - // The time the process started after system boot, the value is expressed - // in clock ticks. - Starttime uint64 - // Virtual memory size in bytes. - VSize int - // Resident set size in pages. - RSS int - - fs FS -} - -// NewStat returns the current status information of the process. -func (p Proc) NewStat() (ProcStat, error) { - f, err := os.Open(p.path("stat")) - if err != nil { - return ProcStat{}, err - } - defer f.Close() - - data, err := ioutil.ReadAll(f) - if err != nil { - return ProcStat{}, err - } - - var ( - ignore int - - s = ProcStat{PID: p.PID, fs: p.fs} - l = bytes.Index(data, []byte("(")) - r = bytes.LastIndex(data, []byte(")")) - ) - - if l < 0 || r < 0 { - return ProcStat{}, fmt.Errorf( - "unexpected format, couldn't extract comm: %s", - data, - ) - } - - s.Comm = string(data[l+1 : r]) - _, err = fmt.Fscan( - bytes.NewBuffer(data[r+2:]), - &s.State, - &s.PPID, - &s.PGRP, - &s.Session, - &s.TTY, - &s.TPGID, - &s.Flags, - &s.MinFlt, - &s.CMinFlt, - &s.MajFlt, - &s.CMajFlt, - &s.UTime, - &s.STime, - &s.CUTime, - &s.CSTime, - &s.Priority, - &s.Nice, - &s.NumThreads, - &ignore, - &s.Starttime, - &s.VSize, - &s.RSS, - ) - if err != nil { - return ProcStat{}, err - } - - return s, nil -} - -// VirtualMemory returns the virtual memory size in bytes. -func (s ProcStat) VirtualMemory() int { - return s.VSize -} - -// ResidentMemory returns the resident memory size in bytes. -func (s ProcStat) ResidentMemory() int { - return s.RSS * os.Getpagesize() -} - -// StartTime returns the unix timestamp of the process in seconds. -func (s ProcStat) StartTime() (float64, error) { - stat, err := s.fs.NewStat() - if err != nil { - return 0, err - } - return float64(stat.BootTime) + (float64(s.Starttime) / userHZ), nil -} - -// CPUTime returns the total CPU user and system time in seconds. -func (s ProcStat) CPUTime() float64 { - return float64(s.UTime+s.STime) / userHZ -} diff --git a/vendor/github.com/prometheus/procfs/stat.go b/vendor/github.com/prometheus/procfs/stat.go deleted file mode 100644 index 61eb6b0e3..000000000 --- a/vendor/github.com/prometheus/procfs/stat.go +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright 2018 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package procfs - -import ( - "bufio" - "fmt" - "io" - "os" - "strconv" - "strings" -) - -// CPUStat shows how much time the cpu spend in various stages. -type CPUStat struct { - User float64 - Nice float64 - System float64 - Idle float64 - Iowait float64 - IRQ float64 - SoftIRQ float64 - Steal float64 - Guest float64 - GuestNice float64 -} - -// SoftIRQStat represent the softirq statistics as exported in the procfs stat file. -// A nice introduction can be found at https://0xax.gitbooks.io/linux-insides/content/interrupts/interrupts-9.html -// It is possible to get per-cpu stats by reading /proc/softirqs -type SoftIRQStat struct { - Hi uint64 - Timer uint64 - NetTx uint64 - NetRx uint64 - Block uint64 - BlockIoPoll uint64 - Tasklet uint64 - Sched uint64 - Hrtimer uint64 - Rcu uint64 -} - -// Stat represents kernel/system statistics. -type Stat struct { - // Boot time in seconds since the Epoch. - BootTime uint64 - // Summed up cpu statistics. - CPUTotal CPUStat - // Per-CPU statistics. - CPU []CPUStat - // Number of times interrupts were handled, which contains numbered and unnumbered IRQs. - IRQTotal uint64 - // Number of times a numbered IRQ was triggered. - IRQ []uint64 - // Number of times a context switch happened. - ContextSwitches uint64 - // Number of times a process was created. - ProcessCreated uint64 - // Number of processes currently running. - ProcessesRunning uint64 - // Number of processes currently blocked (waiting for IO). - ProcessesBlocked uint64 - // Number of times a softirq was scheduled. - SoftIRQTotal uint64 - // Detailed softirq statistics. - SoftIRQ SoftIRQStat -} - -// NewStat returns kernel/system statistics read from /proc/stat. -func NewStat() (Stat, error) { - fs, err := NewFS(DefaultMountPoint) - if err != nil { - return Stat{}, err - } - - return fs.NewStat() -} - -// Parse a cpu statistics line and returns the CPUStat struct plus the cpu id (or -1 for the overall sum). -func parseCPUStat(line string) (CPUStat, int64, error) { - cpuStat := CPUStat{} - var cpu string - - count, err := fmt.Sscanf(line, "%s %f %f %f %f %f %f %f %f %f %f", - &cpu, - &cpuStat.User, &cpuStat.Nice, &cpuStat.System, &cpuStat.Idle, - &cpuStat.Iowait, &cpuStat.IRQ, &cpuStat.SoftIRQ, &cpuStat.Steal, - &cpuStat.Guest, &cpuStat.GuestNice) - - if err != nil && err != io.EOF { - return CPUStat{}, -1, fmt.Errorf("couldn't parse %s (cpu): %s", line, err) - } - if count == 0 { - return CPUStat{}, -1, fmt.Errorf("couldn't parse %s (cpu): 0 elements parsed", line) - } - - cpuStat.User /= userHZ - cpuStat.Nice /= userHZ - cpuStat.System /= userHZ - cpuStat.Idle /= userHZ - cpuStat.Iowait /= userHZ - cpuStat.IRQ /= userHZ - cpuStat.SoftIRQ /= userHZ - cpuStat.Steal /= userHZ - cpuStat.Guest /= userHZ - cpuStat.GuestNice /= userHZ - - if cpu == "cpu" { - return cpuStat, -1, nil - } - - cpuID, err := strconv.ParseInt(cpu[3:], 10, 64) - if err != nil { - return CPUStat{}, -1, fmt.Errorf("couldn't parse %s (cpu/cpuid): %s", line, err) - } - - return cpuStat, cpuID, nil -} - -// Parse a softirq line. -func parseSoftIRQStat(line string) (SoftIRQStat, uint64, error) { - softIRQStat := SoftIRQStat{} - var total uint64 - var prefix string - - _, err := fmt.Sscanf(line, "%s %d %d %d %d %d %d %d %d %d %d %d", - &prefix, &total, - &softIRQStat.Hi, &softIRQStat.Timer, &softIRQStat.NetTx, &softIRQStat.NetRx, - &softIRQStat.Block, &softIRQStat.BlockIoPoll, - &softIRQStat.Tasklet, &softIRQStat.Sched, - &softIRQStat.Hrtimer, &softIRQStat.Rcu) - - if err != nil { - return SoftIRQStat{}, 0, fmt.Errorf("couldn't parse %s (softirq): %s", line, err) - } - - return softIRQStat, total, nil -} - -// NewStat returns an information about current kernel/system statistics. -func (fs FS) NewStat() (Stat, error) { - // See https://www.kernel.org/doc/Documentation/filesystems/proc.txt - - f, err := os.Open(fs.Path("stat")) - if err != nil { - return Stat{}, err - } - defer f.Close() - - stat := Stat{} - - scanner := bufio.NewScanner(f) - for scanner.Scan() { - line := scanner.Text() - parts := strings.Fields(scanner.Text()) - // require at least - if len(parts) < 2 { - continue - } - switch { - case parts[0] == "btime": - if stat.BootTime, err = strconv.ParseUint(parts[1], 10, 64); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %s (btime): %s", parts[1], err) - } - case parts[0] == "intr": - if stat.IRQTotal, err = strconv.ParseUint(parts[1], 10, 64); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %s (intr): %s", parts[1], err) - } - numberedIRQs := parts[2:] - stat.IRQ = make([]uint64, len(numberedIRQs)) - for i, count := range numberedIRQs { - if stat.IRQ[i], err = strconv.ParseUint(count, 10, 64); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %s (intr%d): %s", count, i, err) - } - } - case parts[0] == "ctxt": - if stat.ContextSwitches, err = strconv.ParseUint(parts[1], 10, 64); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %s (ctxt): %s", parts[1], err) - } - case parts[0] == "processes": - if stat.ProcessCreated, err = strconv.ParseUint(parts[1], 10, 64); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %s (processes): %s", parts[1], err) - } - case parts[0] == "procs_running": - if stat.ProcessesRunning, err = strconv.ParseUint(parts[1], 10, 64); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %s (procs_running): %s", parts[1], err) - } - case parts[0] == "procs_blocked": - if stat.ProcessesBlocked, err = strconv.ParseUint(parts[1], 10, 64); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %s (procs_blocked): %s", parts[1], err) - } - case parts[0] == "softirq": - softIRQStats, total, err := parseSoftIRQStat(line) - if err != nil { - return Stat{}, err - } - stat.SoftIRQTotal = total - stat.SoftIRQ = softIRQStats - case strings.HasPrefix(parts[0], "cpu"): - cpuStat, cpuID, err := parseCPUStat(line) - if err != nil { - return Stat{}, err - } - if cpuID == -1 { - stat.CPUTotal = cpuStat - } else { - for int64(len(stat.CPU)) <= cpuID { - stat.CPU = append(stat.CPU, CPUStat{}) - } - stat.CPU[cpuID] = cpuStat - } - } - } - - if err := scanner.Err(); err != nil { - return Stat{}, fmt.Errorf("couldn't parse %s: %s", f.Name(), err) - } - - return stat, nil -} diff --git a/vendor/github.com/prometheus/procfs/ttar b/vendor/github.com/prometheus/procfs/ttar deleted file mode 100755 index b0171a12b..000000000 --- a/vendor/github.com/prometheus/procfs/ttar +++ /dev/null @@ -1,389 +0,0 @@ -#!/usr/bin/env bash - -# Purpose: plain text tar format -# Limitations: - only suitable for text files, directories, and symlinks -# - stores only filename, content, and mode -# - not designed for untrusted input -# -# Note: must work with bash version 3.2 (macOS) - -# Copyright 2017 Roger Luethi -# -# 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. - -set -o errexit -o nounset - -# Sanitize environment (for instance, standard sorting of glob matches) -export LC_ALL=C - -path="" -CMD="" -ARG_STRING="$*" - -#------------------------------------------------------------------------------ -# Not all sed implementations can work on null bytes. In order to make ttar -# work out of the box on macOS, use Python as a stream editor. - -USE_PYTHON=0 - -PYTHON_CREATE_FILTER=$(cat << 'PCF' -#!/usr/bin/env python - -import re -import sys - -for line in sys.stdin: - line = re.sub(r'EOF', r'\EOF', line) - line = re.sub(r'NULLBYTE', r'\NULLBYTE', line) - line = re.sub('\x00', r'NULLBYTE', line) - sys.stdout.write(line) -PCF -) - -PYTHON_EXTRACT_FILTER=$(cat << 'PEF' -#!/usr/bin/env python - -import re -import sys - -for line in sys.stdin: - line = re.sub(r'(?/dev/null; then - echo "ERROR Python not found. Aborting." - exit 2 - fi - USE_PYTHON=1 - fi -} - -#------------------------------------------------------------------------------ - -function usage { - bname=$(basename "$0") - cat << USAGE -Usage: $bname [-C ] -c -f (create archive) - $bname -t -f (list archive contents) - $bname [-C ] -x -f (extract archive) - -Options: - -C (change directory) - -v (verbose) - -Example: Change to sysfs directory, create ttar file from fixtures directory - $bname -C sysfs -c -f sysfs/fixtures.ttar fixtures/ -USAGE -exit "$1" -} - -function vecho { - if [ "${VERBOSE:-}" == "yes" ]; then - echo >&7 "$@" - fi -} - -function set_cmd { - if [ -n "$CMD" ]; then - echo "ERROR: more than one command given" - echo - usage 2 - fi - CMD=$1 -} - -unset VERBOSE - -while getopts :cf:htxvC: opt; do - case $opt in - c) - set_cmd "create" - ;; - f) - ARCHIVE=$OPTARG - ;; - h) - usage 0 - ;; - t) - set_cmd "list" - ;; - x) - set_cmd "extract" - ;; - v) - VERBOSE=yes - exec 7>&1 - ;; - C) - CDIR=$OPTARG - ;; - *) - echo >&2 "ERROR: invalid option -$OPTARG" - echo - usage 1 - ;; - esac -done - -# Remove processed options from arguments -shift $(( OPTIND - 1 )); - -if [ "${CMD:-}" == "" ]; then - echo >&2 "ERROR: no command given" - echo - usage 1 -elif [ "${ARCHIVE:-}" == "" ]; then - echo >&2 "ERROR: no archive name given" - echo - usage 1 -fi - -function list { - local path="" - local size=0 - local line_no=0 - local ttar_file=$1 - if [ -n "${2:-}" ]; then - echo >&2 "ERROR: too many arguments." - echo - usage 1 - fi - if [ ! -e "$ttar_file" ]; then - echo >&2 "ERROR: file not found ($ttar_file)" - echo - usage 1 - fi - while read -r line; do - line_no=$(( line_no + 1 )) - if [ $size -gt 0 ]; then - size=$(( size - 1 )) - continue - fi - if [[ $line =~ ^Path:\ (.*)$ ]]; then - path=${BASH_REMATCH[1]} - elif [[ $line =~ ^Lines:\ (.*)$ ]]; then - size=${BASH_REMATCH[1]} - echo "$path" - elif [[ $line =~ ^Directory:\ (.*)$ ]]; then - path=${BASH_REMATCH[1]} - echo "$path/" - elif [[ $line =~ ^SymlinkTo:\ (.*)$ ]]; then - echo "$path -> ${BASH_REMATCH[1]}" - fi - done < "$ttar_file" -} - -function extract { - local path="" - local size=0 - local line_no=0 - local ttar_file=$1 - if [ -n "${2:-}" ]; then - echo >&2 "ERROR: too many arguments." - echo - usage 1 - fi - if [ ! -e "$ttar_file" ]; then - echo >&2 "ERROR: file not found ($ttar_file)" - echo - usage 1 - fi - while IFS= read -r line; do - line_no=$(( line_no + 1 )) - local eof_without_newline - if [ "$size" -gt 0 ]; then - if [[ "$line" =~ [^\\]EOF ]]; then - # An EOF not preceeded by a backslash indicates that the line - # does not end with a newline - eof_without_newline=1 - else - eof_without_newline=0 - fi - # Replace NULLBYTE with null byte if at beginning of line - # Replace NULLBYTE with null byte unless preceeded by backslash - # Remove one backslash in front of NULLBYTE (if any) - # Remove EOF unless preceeded by backslash - # Remove one backslash in front of EOF - if [ $USE_PYTHON -eq 1 ]; then - echo -n "$line" | python -c "$PYTHON_EXTRACT_FILTER" >> "$path" - else - # The repeated pattern makes up for sed's lack of negative - # lookbehind assertions (for consecutive null bytes). - echo -n "$line" | \ - sed -e 's/^NULLBYTE/\x0/g; - s/\([^\\]\)NULLBYTE/\1\x0/g; - s/\([^\\]\)NULLBYTE/\1\x0/g; - s/\\NULLBYTE/NULLBYTE/g; - s/\([^\\]\)EOF/\1/g; - s/\\EOF/EOF/g; - ' >> "$path" - fi - if [[ "$eof_without_newline" -eq 0 ]]; then - echo >> "$path" - fi - size=$(( size - 1 )) - continue - fi - if [[ $line =~ ^Path:\ (.*)$ ]]; then - path=${BASH_REMATCH[1]} - if [ -e "$path" ] || [ -L "$path" ]; then - rm "$path" - fi - elif [[ $line =~ ^Lines:\ (.*)$ ]]; then - size=${BASH_REMATCH[1]} - # Create file even if it is zero-length. - touch "$path" - vecho " $path" - elif [[ $line =~ ^Mode:\ (.*)$ ]]; then - mode=${BASH_REMATCH[1]} - chmod "$mode" "$path" - vecho "$mode" - elif [[ $line =~ ^Directory:\ (.*)$ ]]; then - path=${BASH_REMATCH[1]} - mkdir -p "$path" - vecho " $path/" - elif [[ $line =~ ^SymlinkTo:\ (.*)$ ]]; then - ln -s "${BASH_REMATCH[1]}" "$path" - vecho " $path -> ${BASH_REMATCH[1]}" - elif [[ $line =~ ^# ]]; then - # Ignore comments between files - continue - else - echo >&2 "ERROR: Unknown keyword on line $line_no: $line" - exit 1 - fi - done < "$ttar_file" -} - -function div { - echo "# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" \ - "- - - - - -" -} - -function get_mode { - local mfile=$1 - if [ -z "${STAT_OPTION:-}" ]; then - if stat -c '%a' "$mfile" >/dev/null 2>&1; then - # GNU stat - STAT_OPTION='-c' - STAT_FORMAT='%a' - else - # BSD stat - STAT_OPTION='-f' - # Octal output, user/group/other (omit file type, sticky bit) - STAT_FORMAT='%OLp' - fi - fi - stat "${STAT_OPTION}" "${STAT_FORMAT}" "$mfile" -} - -function _create { - shopt -s nullglob - local mode - local eof_without_newline - while (( "$#" )); do - file=$1 - if [ -L "$file" ]; then - echo "Path: $file" - symlinkTo=$(readlink "$file") - echo "SymlinkTo: $symlinkTo" - vecho " $file -> $symlinkTo" - div - elif [ -d "$file" ]; then - # Strip trailing slash (if there is one) - file=${file%/} - echo "Directory: $file" - mode=$(get_mode "$file") - echo "Mode: $mode" - vecho "$mode $file/" - div - # Find all files and dirs, including hidden/dot files - for x in "$file/"{*,.[^.]*}; do - _create "$x" - done - elif [ -f "$file" ]; then - echo "Path: $file" - lines=$(wc -l "$file"|awk '{print $1}') - eof_without_newline=0 - if [[ "$(wc -c "$file"|awk '{print $1}')" -gt 0 ]] && \ - [[ "$(tail -c 1 "$file" | wc -l)" -eq 0 ]]; then - eof_without_newline=1 - lines=$((lines+1)) - fi - echo "Lines: $lines" - # Add backslash in front of EOF - # Add backslash in front of NULLBYTE - # Replace null byte with NULLBYTE - if [ $USE_PYTHON -eq 1 ]; then - < "$file" python -c "$PYTHON_CREATE_FILTER" - else - < "$file" \ - sed 's/EOF/\\EOF/g; - s/NULLBYTE/\\NULLBYTE/g; - s/\x0/NULLBYTE/g; - ' - fi - if [[ "$eof_without_newline" -eq 1 ]]; then - # Finish line with EOF to indicate that the original line did - # not end with a linefeed - echo "EOF" - fi - mode=$(get_mode "$file") - echo "Mode: $mode" - vecho "$mode $file" - div - else - echo >&2 "ERROR: file not found ($file in $(pwd))" - exit 2 - fi - shift - done -} - -function create { - ttar_file=$1 - shift - if [ -z "${1:-}" ]; then - echo >&2 "ERROR: missing arguments." - echo - usage 1 - fi - if [ -e "$ttar_file" ]; then - rm "$ttar_file" - fi - exec > "$ttar_file" - echo "# Archive created by ttar $ARG_STRING" - _create "$@" -} - -test_environment - -if [ -n "${CDIR:-}" ]; then - if [[ "$ARCHIVE" != /* ]]; then - # Relative path: preserve the archive's location before changing - # directory - ARCHIVE="$(pwd)/$ARCHIVE" - fi - cd "$CDIR" -fi - -"$CMD" "$ARCHIVE" "$@" diff --git a/vendor/github.com/prometheus/procfs/xfrm.go b/vendor/github.com/prometheus/procfs/xfrm.go deleted file mode 100644 index 8f1508f0f..000000000 --- a/vendor/github.com/prometheus/procfs/xfrm.go +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright 2017 Prometheus Team -// 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 procfs - -import ( - "bufio" - "fmt" - "os" - "strconv" - "strings" -) - -// XfrmStat models the contents of /proc/net/xfrm_stat. -type XfrmStat struct { - // All errors which are not matched by other - XfrmInError int - // No buffer is left - XfrmInBufferError int - // Header Error - XfrmInHdrError int - // No state found - // i.e. either inbound SPI, address, or IPSEC protocol at SA is wrong - XfrmInNoStates int - // Transformation protocol specific error - // e.g. SA Key is wrong - XfrmInStateProtoError int - // Transformation mode specific error - XfrmInStateModeError int - // Sequence error - // e.g. sequence number is out of window - XfrmInStateSeqError int - // State is expired - XfrmInStateExpired int - // State has mismatch option - // e.g. UDP encapsulation type is mismatched - XfrmInStateMismatch int - // State is invalid - XfrmInStateInvalid int - // No matching template for states - // e.g. Inbound SAs are correct but SP rule is wrong - XfrmInTmplMismatch int - // No policy is found for states - // e.g. Inbound SAs are correct but no SP is found - XfrmInNoPols int - // Policy discards - XfrmInPolBlock int - // Policy error - XfrmInPolError int - // All errors which are not matched by others - XfrmOutError int - // Bundle generation error - XfrmOutBundleGenError int - // Bundle check error - XfrmOutBundleCheckError int - // No state was found - XfrmOutNoStates int - // Transformation protocol specific error - XfrmOutStateProtoError int - // Transportation mode specific error - XfrmOutStateModeError int - // Sequence error - // i.e sequence number overflow - XfrmOutStateSeqError int - // State is expired - XfrmOutStateExpired int - // Policy discads - XfrmOutPolBlock int - // Policy is dead - XfrmOutPolDead int - // Policy Error - XfrmOutPolError int - XfrmFwdHdrError int - XfrmOutStateInvalid int - XfrmAcquireError int -} - -// NewXfrmStat reads the xfrm_stat statistics. -func NewXfrmStat() (XfrmStat, error) { - fs, err := NewFS(DefaultMountPoint) - if err != nil { - return XfrmStat{}, err - } - - return fs.NewXfrmStat() -} - -// NewXfrmStat reads the xfrm_stat statistics from the 'proc' filesystem. -func (fs FS) NewXfrmStat() (XfrmStat, error) { - file, err := os.Open(fs.Path("net/xfrm_stat")) - if err != nil { - return XfrmStat{}, err - } - defer file.Close() - - var ( - x = XfrmStat{} - s = bufio.NewScanner(file) - ) - - for s.Scan() { - fields := strings.Fields(s.Text()) - - if len(fields) != 2 { - return XfrmStat{}, fmt.Errorf( - "couldn't parse %s line %s", file.Name(), s.Text()) - } - - name := fields[0] - value, err := strconv.Atoi(fields[1]) - if err != nil { - return XfrmStat{}, err - } - - switch name { - case "XfrmInError": - x.XfrmInError = value - case "XfrmInBufferError": - x.XfrmInBufferError = value - case "XfrmInHdrError": - x.XfrmInHdrError = value - case "XfrmInNoStates": - x.XfrmInNoStates = value - case "XfrmInStateProtoError": - x.XfrmInStateProtoError = value - case "XfrmInStateModeError": - x.XfrmInStateModeError = value - case "XfrmInStateSeqError": - x.XfrmInStateSeqError = value - case "XfrmInStateExpired": - x.XfrmInStateExpired = value - case "XfrmInStateInvalid": - x.XfrmInStateInvalid = value - case "XfrmInTmplMismatch": - x.XfrmInTmplMismatch = value - case "XfrmInNoPols": - x.XfrmInNoPols = value - case "XfrmInPolBlock": - x.XfrmInPolBlock = value - case "XfrmInPolError": - x.XfrmInPolError = value - case "XfrmOutError": - x.XfrmOutError = value - case "XfrmInStateMismatch": - x.XfrmInStateMismatch = value - case "XfrmOutBundleGenError": - x.XfrmOutBundleGenError = value - case "XfrmOutBundleCheckError": - x.XfrmOutBundleCheckError = value - case "XfrmOutNoStates": - x.XfrmOutNoStates = value - case "XfrmOutStateProtoError": - x.XfrmOutStateProtoError = value - case "XfrmOutStateModeError": - x.XfrmOutStateModeError = value - case "XfrmOutStateSeqError": - x.XfrmOutStateSeqError = value - case "XfrmOutStateExpired": - x.XfrmOutStateExpired = value - case "XfrmOutPolBlock": - x.XfrmOutPolBlock = value - case "XfrmOutPolDead": - x.XfrmOutPolDead = value - case "XfrmOutPolError": - x.XfrmOutPolError = value - case "XfrmFwdHdrError": - x.XfrmFwdHdrError = value - case "XfrmOutStateInvalid": - x.XfrmOutStateInvalid = value - case "XfrmAcquireError": - x.XfrmAcquireError = value - } - - } - - return x, s.Err() -} diff --git a/vendor/github.com/prometheus/procfs/xfs/parse.go b/vendor/github.com/prometheus/procfs/xfs/parse.go deleted file mode 100644 index 2bc0ef342..000000000 --- a/vendor/github.com/prometheus/procfs/xfs/parse.go +++ /dev/null @@ -1,330 +0,0 @@ -// Copyright 2017 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package xfs - -import ( - "bufio" - "fmt" - "io" - "strings" - - "github.com/prometheus/procfs/internal/util" -) - -// ParseStats parses a Stats from an input io.Reader, using the format -// found in /proc/fs/xfs/stat. -func ParseStats(r io.Reader) (*Stats, error) { - const ( - // Fields parsed into stats structures. - fieldExtentAlloc = "extent_alloc" - fieldAbt = "abt" - fieldBlkMap = "blk_map" - fieldBmbt = "bmbt" - fieldDir = "dir" - fieldTrans = "trans" - fieldIg = "ig" - fieldLog = "log" - fieldRw = "rw" - fieldAttr = "attr" - fieldIcluster = "icluster" - fieldVnodes = "vnodes" - fieldBuf = "buf" - fieldXpc = "xpc" - - // Unimplemented at this time due to lack of documentation. - fieldPushAil = "push_ail" - fieldXstrat = "xstrat" - fieldAbtb2 = "abtb2" - fieldAbtc2 = "abtc2" - fieldBmbt2 = "bmbt2" - fieldIbt2 = "ibt2" - fieldFibt2 = "fibt2" - fieldQm = "qm" - fieldDebug = "debug" - ) - - var xfss Stats - - s := bufio.NewScanner(r) - for s.Scan() { - // Expect at least a string label and a single integer value, ex: - // - abt 0 - // - rw 1 2 - ss := strings.Fields(string(s.Bytes())) - if len(ss) < 2 { - continue - } - label := ss[0] - - // Extended precision counters are uint64 values. - if label == fieldXpc { - us, err := util.ParseUint64s(ss[1:]) - if err != nil { - return nil, err - } - - xfss.ExtendedPrecision, err = extendedPrecisionStats(us) - if err != nil { - return nil, err - } - - continue - } - - // All other counters are uint32 values. - us, err := util.ParseUint32s(ss[1:]) - if err != nil { - return nil, err - } - - switch label { - case fieldExtentAlloc: - xfss.ExtentAllocation, err = extentAllocationStats(us) - case fieldAbt: - xfss.AllocationBTree, err = btreeStats(us) - case fieldBlkMap: - xfss.BlockMapping, err = blockMappingStats(us) - case fieldBmbt: - xfss.BlockMapBTree, err = btreeStats(us) - case fieldDir: - xfss.DirectoryOperation, err = directoryOperationStats(us) - case fieldTrans: - xfss.Transaction, err = transactionStats(us) - case fieldIg: - xfss.InodeOperation, err = inodeOperationStats(us) - case fieldLog: - xfss.LogOperation, err = logOperationStats(us) - case fieldRw: - xfss.ReadWrite, err = readWriteStats(us) - case fieldAttr: - xfss.AttributeOperation, err = attributeOperationStats(us) - case fieldIcluster: - xfss.InodeClustering, err = inodeClusteringStats(us) - case fieldVnodes: - xfss.Vnode, err = vnodeStats(us) - case fieldBuf: - xfss.Buffer, err = bufferStats(us) - } - if err != nil { - return nil, err - } - } - - return &xfss, s.Err() -} - -// extentAllocationStats builds an ExtentAllocationStats from a slice of uint32s. -func extentAllocationStats(us []uint32) (ExtentAllocationStats, error) { - if l := len(us); l != 4 { - return ExtentAllocationStats{}, fmt.Errorf("incorrect number of values for XFS extent allocation stats: %d", l) - } - - return ExtentAllocationStats{ - ExtentsAllocated: us[0], - BlocksAllocated: us[1], - ExtentsFreed: us[2], - BlocksFreed: us[3], - }, nil -} - -// btreeStats builds a BTreeStats from a slice of uint32s. -func btreeStats(us []uint32) (BTreeStats, error) { - if l := len(us); l != 4 { - return BTreeStats{}, fmt.Errorf("incorrect number of values for XFS btree stats: %d", l) - } - - return BTreeStats{ - Lookups: us[0], - Compares: us[1], - RecordsInserted: us[2], - RecordsDeleted: us[3], - }, nil -} - -// BlockMappingStat builds a BlockMappingStats from a slice of uint32s. -func blockMappingStats(us []uint32) (BlockMappingStats, error) { - if l := len(us); l != 7 { - return BlockMappingStats{}, fmt.Errorf("incorrect number of values for XFS block mapping stats: %d", l) - } - - return BlockMappingStats{ - Reads: us[0], - Writes: us[1], - Unmaps: us[2], - ExtentListInsertions: us[3], - ExtentListDeletions: us[4], - ExtentListLookups: us[5], - ExtentListCompares: us[6], - }, nil -} - -// DirectoryOperationStats builds a DirectoryOperationStats from a slice of uint32s. -func directoryOperationStats(us []uint32) (DirectoryOperationStats, error) { - if l := len(us); l != 4 { - return DirectoryOperationStats{}, fmt.Errorf("incorrect number of values for XFS directory operation stats: %d", l) - } - - return DirectoryOperationStats{ - Lookups: us[0], - Creates: us[1], - Removes: us[2], - Getdents: us[3], - }, nil -} - -// TransactionStats builds a TransactionStats from a slice of uint32s. -func transactionStats(us []uint32) (TransactionStats, error) { - if l := len(us); l != 3 { - return TransactionStats{}, fmt.Errorf("incorrect number of values for XFS transaction stats: %d", l) - } - - return TransactionStats{ - Sync: us[0], - Async: us[1], - Empty: us[2], - }, nil -} - -// InodeOperationStats builds an InodeOperationStats from a slice of uint32s. -func inodeOperationStats(us []uint32) (InodeOperationStats, error) { - if l := len(us); l != 7 { - return InodeOperationStats{}, fmt.Errorf("incorrect number of values for XFS inode operation stats: %d", l) - } - - return InodeOperationStats{ - Attempts: us[0], - Found: us[1], - Recycle: us[2], - Missed: us[3], - Duplicate: us[4], - Reclaims: us[5], - AttributeChange: us[6], - }, nil -} - -// LogOperationStats builds a LogOperationStats from a slice of uint32s. -func logOperationStats(us []uint32) (LogOperationStats, error) { - if l := len(us); l != 5 { - return LogOperationStats{}, fmt.Errorf("incorrect number of values for XFS log operation stats: %d", l) - } - - return LogOperationStats{ - Writes: us[0], - Blocks: us[1], - NoInternalBuffers: us[2], - Force: us[3], - ForceSleep: us[4], - }, nil -} - -// ReadWriteStats builds a ReadWriteStats from a slice of uint32s. -func readWriteStats(us []uint32) (ReadWriteStats, error) { - if l := len(us); l != 2 { - return ReadWriteStats{}, fmt.Errorf("incorrect number of values for XFS read write stats: %d", l) - } - - return ReadWriteStats{ - Read: us[0], - Write: us[1], - }, nil -} - -// AttributeOperationStats builds an AttributeOperationStats from a slice of uint32s. -func attributeOperationStats(us []uint32) (AttributeOperationStats, error) { - if l := len(us); l != 4 { - return AttributeOperationStats{}, fmt.Errorf("incorrect number of values for XFS attribute operation stats: %d", l) - } - - return AttributeOperationStats{ - Get: us[0], - Set: us[1], - Remove: us[2], - List: us[3], - }, nil -} - -// InodeClusteringStats builds an InodeClusteringStats from a slice of uint32s. -func inodeClusteringStats(us []uint32) (InodeClusteringStats, error) { - if l := len(us); l != 3 { - return InodeClusteringStats{}, fmt.Errorf("incorrect number of values for XFS inode clustering stats: %d", l) - } - - return InodeClusteringStats{ - Iflush: us[0], - Flush: us[1], - FlushInode: us[2], - }, nil -} - -// VnodeStats builds a VnodeStats from a slice of uint32s. -func vnodeStats(us []uint32) (VnodeStats, error) { - // The attribute "Free" appears to not be available on older XFS - // stats versions. Therefore, 7 or 8 elements may appear in - // this slice. - l := len(us) - if l != 7 && l != 8 { - return VnodeStats{}, fmt.Errorf("incorrect number of values for XFS vnode stats: %d", l) - } - - s := VnodeStats{ - Active: us[0], - Allocate: us[1], - Get: us[2], - Hold: us[3], - Release: us[4], - Reclaim: us[5], - Remove: us[6], - } - - // Skip adding free, unless it is present. The zero value will - // be used in place of an actual count. - if l == 7 { - return s, nil - } - - s.Free = us[7] - return s, nil -} - -// BufferStats builds a BufferStats from a slice of uint32s. -func bufferStats(us []uint32) (BufferStats, error) { - if l := len(us); l != 9 { - return BufferStats{}, fmt.Errorf("incorrect number of values for XFS buffer stats: %d", l) - } - - return BufferStats{ - Get: us[0], - Create: us[1], - GetLocked: us[2], - GetLockedWaited: us[3], - BusyLocked: us[4], - MissLocked: us[5], - PageRetries: us[6], - PageFound: us[7], - GetRead: us[8], - }, nil -} - -// ExtendedPrecisionStats builds an ExtendedPrecisionStats from a slice of uint32s. -func extendedPrecisionStats(us []uint64) (ExtendedPrecisionStats, error) { - if l := len(us); l != 3 { - return ExtendedPrecisionStats{}, fmt.Errorf("incorrect number of values for XFS extended precision stats: %d", l) - } - - return ExtendedPrecisionStats{ - FlushBytes: us[0], - WriteBytes: us[1], - ReadBytes: us[2], - }, nil -} diff --git a/vendor/github.com/prometheus/procfs/xfs/xfs.go b/vendor/github.com/prometheus/procfs/xfs/xfs.go deleted file mode 100644 index d86794b7c..000000000 --- a/vendor/github.com/prometheus/procfs/xfs/xfs.go +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2017 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package xfs provides access to statistics exposed by the XFS filesystem. -package xfs - -// Stats contains XFS filesystem runtime statistics, parsed from -// /proc/fs/xfs/stat. -// -// The names and meanings of each statistic were taken from -// http://xfs.org/index.php/Runtime_Stats and xfs_stats.h in the Linux -// kernel source. Most counters are uint32s (same data types used in -// xfs_stats.h), but some of the "extended precision stats" are uint64s. -type Stats struct { - // The name of the filesystem used to source these statistics. - // If empty, this indicates aggregated statistics for all XFS - // filesystems on the host. - Name string - - ExtentAllocation ExtentAllocationStats - AllocationBTree BTreeStats - BlockMapping BlockMappingStats - BlockMapBTree BTreeStats - DirectoryOperation DirectoryOperationStats - Transaction TransactionStats - InodeOperation InodeOperationStats - LogOperation LogOperationStats - ReadWrite ReadWriteStats - AttributeOperation AttributeOperationStats - InodeClustering InodeClusteringStats - Vnode VnodeStats - Buffer BufferStats - ExtendedPrecision ExtendedPrecisionStats -} - -// ExtentAllocationStats contains statistics regarding XFS extent allocations. -type ExtentAllocationStats struct { - ExtentsAllocated uint32 - BlocksAllocated uint32 - ExtentsFreed uint32 - BlocksFreed uint32 -} - -// BTreeStats contains statistics regarding an XFS internal B-tree. -type BTreeStats struct { - Lookups uint32 - Compares uint32 - RecordsInserted uint32 - RecordsDeleted uint32 -} - -// BlockMappingStats contains statistics regarding XFS block maps. -type BlockMappingStats struct { - Reads uint32 - Writes uint32 - Unmaps uint32 - ExtentListInsertions uint32 - ExtentListDeletions uint32 - ExtentListLookups uint32 - ExtentListCompares uint32 -} - -// DirectoryOperationStats contains statistics regarding XFS directory entries. -type DirectoryOperationStats struct { - Lookups uint32 - Creates uint32 - Removes uint32 - Getdents uint32 -} - -// TransactionStats contains statistics regarding XFS metadata transactions. -type TransactionStats struct { - Sync uint32 - Async uint32 - Empty uint32 -} - -// InodeOperationStats contains statistics regarding XFS inode operations. -type InodeOperationStats struct { - Attempts uint32 - Found uint32 - Recycle uint32 - Missed uint32 - Duplicate uint32 - Reclaims uint32 - AttributeChange uint32 -} - -// LogOperationStats contains statistics regarding the XFS log buffer. -type LogOperationStats struct { - Writes uint32 - Blocks uint32 - NoInternalBuffers uint32 - Force uint32 - ForceSleep uint32 -} - -// ReadWriteStats contains statistics regarding the number of read and write -// system calls for XFS filesystems. -type ReadWriteStats struct { - Read uint32 - Write uint32 -} - -// AttributeOperationStats contains statistics regarding manipulation of -// XFS extended file attributes. -type AttributeOperationStats struct { - Get uint32 - Set uint32 - Remove uint32 - List uint32 -} - -// InodeClusteringStats contains statistics regarding XFS inode clustering -// operations. -type InodeClusteringStats struct { - Iflush uint32 - Flush uint32 - FlushInode uint32 -} - -// VnodeStats contains statistics regarding XFS vnode operations. -type VnodeStats struct { - Active uint32 - Allocate uint32 - Get uint32 - Hold uint32 - Release uint32 - Reclaim uint32 - Remove uint32 - Free uint32 -} - -// BufferStats contains statistics regarding XFS read/write I/O buffers. -type BufferStats struct { - Get uint32 - Create uint32 - GetLocked uint32 - GetLockedWaited uint32 - BusyLocked uint32 - MissLocked uint32 - PageRetries uint32 - PageFound uint32 - GetRead uint32 -} - -// ExtendedPrecisionStats contains high precision counters used to track the -// total number of bytes read, written, or flushed, during XFS operations. -type ExtendedPrecisionStats struct { - FlushBytes uint64 - WriteBytes uint64 - ReadBytes uint64 -} diff --git a/vendor/github.com/russross/blackfriday/LICENSE.txt b/vendor/github.com/russross/blackfriday/LICENSE.txt deleted file mode 100644 index 2885af360..000000000 --- a/vendor/github.com/russross/blackfriday/LICENSE.txt +++ /dev/null @@ -1,29 +0,0 @@ -Blackfriday is distributed under the Simplified BSD License: - -> Copyright © 2011 Russ Ross -> 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 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/russross/blackfriday/README.md b/vendor/github.com/russross/blackfriday/README.md deleted file mode 100644 index 3c113cb10..000000000 --- a/vendor/github.com/russross/blackfriday/README.md +++ /dev/null @@ -1,276 +0,0 @@ -Blackfriday [![Build Status](https://travis-ci.org/russross/blackfriday.svg?branch=master)](https://travis-ci.org/russross/blackfriday) [![GoDoc](https://godoc.org/github.com/russross/blackfriday?status.svg)](https://godoc.org/github.com/russross/blackfriday) -=========== - -Blackfriday is a [Markdown][1] processor implemented in [Go][2]. It -is paranoid about its input (so you can safely feed it user-supplied -data), it is fast, it supports common extensions (tables, smart -punctuation substitutions, etc.), and it is safe for all utf-8 -(unicode) input. - -HTML output is currently supported, along with Smartypants -extensions. An experimental LaTeX output engine is also included. - -It started as a translation from C of [Sundown][3]. - - -Installation ------------- - -Blackfriday is compatible with Go 1. If you are using an older -release of Go, consider using v1.1 of blackfriday, which was based -on the last stable release of Go prior to Go 1. You can find it as a -tagged commit on github. - -With Go 1 and git installed: - - go get github.com/russross/blackfriday - -will download, compile, and install the package into your `$GOPATH` -directory hierarchy. Alternatively, you can achieve the same if you -import it into a project: - - import "github.com/russross/blackfriday" - -and `go get` without parameters. - -Usage ------ - -For basic usage, it is as simple as getting your input into a byte -slice and calling: - - output := blackfriday.MarkdownBasic(input) - -This renders it with no extensions enabled. To get a more useful -feature set, use this instead: - - output := blackfriday.MarkdownCommon(input) - -### Sanitize untrusted content - -Blackfriday itself does nothing to protect against malicious content. If you are -dealing with user-supplied markdown, we recommend running blackfriday's output -through HTML sanitizer such as -[Bluemonday](https://github.com/microcosm-cc/bluemonday). - -Here's an example of simple usage of blackfriday together with bluemonday: - -``` go -import ( - "github.com/microcosm-cc/bluemonday" - "github.com/russross/blackfriday" -) - -// ... -unsafe := blackfriday.MarkdownCommon(input) -html := bluemonday.UGCPolicy().SanitizeBytes(unsafe) -``` - -### Custom options - -If you want to customize the set of options, first get a renderer -(currently either the HTML or LaTeX output engines), then use it to -call the more general `Markdown` function. For examples, see the -implementations of `MarkdownBasic` and `MarkdownCommon` in -`markdown.go`. - -You can also check out `blackfriday-tool` for a more complete example -of how to use it. Download and install it using: - - go get github.com/russross/blackfriday-tool - -This is a simple command-line tool that allows you to process a -markdown file using a standalone program. You can also browse the -source directly on github if you are just looking for some example -code: - -* - -Note that if you have not already done so, installing -`blackfriday-tool` will be sufficient to download and install -blackfriday in addition to the tool itself. The tool binary will be -installed in `$GOPATH/bin`. This is a statically-linked binary that -can be copied to wherever you need it without worrying about -dependencies and library versions. - - -Features --------- - -All features of Sundown are supported, including: - -* **Compatibility**. The Markdown v1.0.3 test suite passes with - the `--tidy` option. Without `--tidy`, the differences are - mostly in whitespace and entity escaping, where blackfriday is - more consistent and cleaner. - -* **Common extensions**, including table support, fenced code - blocks, autolinks, strikethroughs, non-strict emphasis, etc. - -* **Safety**. Blackfriday is paranoid when parsing, making it safe - to feed untrusted user input without fear of bad things - happening. The test suite stress tests this and there are no - known inputs that make it crash. If you find one, please let me - know and send me the input that does it. - - NOTE: "safety" in this context means *runtime safety only*. In order to - protect yourself against JavaScript injection in untrusted content, see - [this example](https://github.com/russross/blackfriday#sanitize-untrusted-content). - -* **Fast processing**. It is fast enough to render on-demand in - most web applications without having to cache the output. - -* **Thread safety**. You can run multiple parsers in different - goroutines without ill effect. There is no dependence on global - shared state. - -* **Minimal dependencies**. Blackfriday only depends on standard - library packages in Go. The source code is pretty - self-contained, so it is easy to add to any project, including - Google App Engine projects. - -* **Standards compliant**. Output successfully validates using the - W3C validation tool for HTML 4.01 and XHTML 1.0 Transitional. - - -Extensions ----------- - -In addition to the standard markdown syntax, this package -implements the following extensions: - -* **Intra-word emphasis supression**. The `_` character is - commonly used inside words when discussing code, so having - markdown interpret it as an emphasis command is usually the - wrong thing. Blackfriday lets you treat all emphasis markers as - normal characters when they occur inside a word. - -* **Tables**. Tables can be created by drawing them in the input - using a simple syntax: - - ``` - Name | Age - --------|------ - Bob | 27 - Alice | 23 - ``` - -* **Fenced code blocks**. In addition to the normal 4-space - indentation to mark code blocks, you can explicitly mark them - and supply a language (to make syntax highlighting simple). Just - mark it like this: - - ``` go - func getTrue() bool { - return true - } - ``` - - You can use 3 or more backticks to mark the beginning of the - block, and the same number to mark the end of the block. - - To preserve classes of fenced code blocks while using the bluemonday - HTML sanitizer, use the following policy: - - ``` go - p := bluemonday.UGCPolicy() - p.AllowAttrs("class").Matching(regexp.MustCompile("^language-[a-zA-Z0-9]+$")).OnElements("code") - html := p.SanitizeBytes(unsafe) - ``` - -* **Definition lists**. A simple definition list is made of a single-line - term followed by a colon and the definition for that term. - - Cat - : Fluffy animal everyone likes - - Internet - : Vector of transmission for pictures of cats - - Terms must be separated from the previous definition by a blank line. - -* **Footnotes**. A marker in the text that will become a superscript number; - a footnote definition that will be placed in a list of footnotes at the - end of the document. A footnote looks like this: - - This is a footnote.[^1] - - [^1]: the footnote text. - -* **Autolinking**. Blackfriday can find URLs that have not been - explicitly marked as links and turn them into links. - -* **Strikethrough**. Use two tildes (`~~`) to mark text that - should be crossed out. - -* **Hard line breaks**. With this extension enabled (it is off by - default in the `MarkdownBasic` and `MarkdownCommon` convenience - functions), newlines in the input translate into line breaks in - the output. - -* **Smart quotes**. Smartypants-style punctuation substitution is - supported, turning normal double- and single-quote marks into - curly quotes, etc. - -* **LaTeX-style dash parsing** is an additional option, where `--` - is translated into `–`, and `---` is translated into - `—`. This differs from most smartypants processors, which - turn a single hyphen into an ndash and a double hyphen into an - mdash. - -* **Smart fractions**, where anything that looks like a fraction - is translated into suitable HTML (instead of just a few special - cases like most smartypant processors). For example, `4/5` - becomes `45`, which renders as - 45. - - -Other renderers ---------------- - -Blackfriday is structured to allow alternative rendering engines. Here -are a few of note: - -* [github_flavored_markdown](https://godoc.org/github.com/shurcooL/github_flavored_markdown): - provides a GitHub Flavored Markdown renderer with fenced code block - highlighting, clickable header anchor links. - - It's not customizable, and its goal is to produce HTML output - equivalent to the [GitHub Markdown API endpoint](https://developer.github.com/v3/markdown/#render-a-markdown-document-in-raw-mode), - except the rendering is performed locally. - -* [markdownfmt](https://github.com/shurcooL/markdownfmt): like gofmt, - but for markdown. - -* LaTeX output: renders output as LaTeX. This is currently part of the - main Blackfriday repository, but may be split into its own project - in the future. If you are interested in owning and maintaining the - LaTeX output component, please be in touch. - - It renders some basic documents, but is only experimental at this - point. In particular, it does not do any inline escaping, so input - that happens to look like LaTeX code will be passed through without - modification. - -* [Md2Vim](https://github.com/FooSoft/md2vim): transforms markdown files into vimdoc format. - - -Todo ----- - -* More unit testing -* Improve unicode support. It does not understand all unicode - rules (about what constitutes a letter, a punctuation symbol, - etc.), so it may fail to detect word boundaries correctly in - some instances. It is safe on all utf-8 input. - - -License -------- - -[Blackfriday is distributed under the Simplified BSD License](LICENSE.txt) - - - [1]: http://daringfireball.net/projects/markdown/ "Markdown" - [2]: http://golang.org/ "Go Language" - [3]: https://github.com/vmg/sundown "Sundown" diff --git a/vendor/github.com/russross/blackfriday/block.go b/vendor/github.com/russross/blackfriday/block.go deleted file mode 100644 index 9cf451f0b..000000000 --- a/vendor/github.com/russross/blackfriday/block.go +++ /dev/null @@ -1,1430 +0,0 @@ -// -// Blackfriday Markdown Processor -// Available at http://github.com/russross/blackfriday -// -// Copyright © 2011 Russ Ross . -// Distributed under the Simplified BSD License. -// See README.md for details. -// - -// -// Functions to parse block-level elements. -// - -package blackfriday - -import ( - "bytes" - - "github.com/shurcooL/sanitized_anchor_name" -) - -// Parse block-level data. -// Note: this function and many that it calls assume that -// the input buffer ends with a newline. -func (p *parser) block(out *bytes.Buffer, data []byte) { - if len(data) == 0 || data[len(data)-1] != '\n' { - panic("block input is missing terminating newline") - } - - // this is called recursively: enforce a maximum depth - if p.nesting >= p.maxNesting { - return - } - p.nesting++ - - // parse out one block-level construct at a time - for len(data) > 0 { - // prefixed header: - // - // # Header 1 - // ## Header 2 - // ... - // ###### Header 6 - if p.isPrefixHeader(data) { - data = data[p.prefixHeader(out, data):] - continue - } - - // block of preformatted HTML: - // - //
- // ... - //
- if data[0] == '<' { - if i := p.html(out, data, true); i > 0 { - data = data[i:] - continue - } - } - - // title block - // - // % stuff - // % more stuff - // % even more stuff - if p.flags&EXTENSION_TITLEBLOCK != 0 { - if data[0] == '%' { - if i := p.titleBlock(out, data, true); i > 0 { - data = data[i:] - continue - } - } - } - - // blank lines. note: returns the # of bytes to skip - if i := p.isEmpty(data); i > 0 { - data = data[i:] - continue - } - - // indented code block: - // - // func max(a, b int) int { - // if a > b { - // return a - // } - // return b - // } - if p.codePrefix(data) > 0 { - data = data[p.code(out, data):] - continue - } - - // fenced code block: - // - // ``` go - // func fact(n int) int { - // if n <= 1 { - // return n - // } - // return n * fact(n-1) - // } - // ``` - if p.flags&EXTENSION_FENCED_CODE != 0 { - if i := p.fencedCodeBlock(out, data, true); i > 0 { - data = data[i:] - continue - } - } - - // horizontal rule: - // - // ------ - // or - // ****** - // or - // ______ - if p.isHRule(data) { - p.r.HRule(out) - var i int - for i = 0; data[i] != '\n'; i++ { - } - data = data[i:] - continue - } - - // block quote: - // - // > A big quote I found somewhere - // > on the web - if p.quotePrefix(data) > 0 { - data = data[p.quote(out, data):] - continue - } - - // table: - // - // Name | Age | Phone - // ------|-----|--------- - // Bob | 31 | 555-1234 - // Alice | 27 | 555-4321 - if p.flags&EXTENSION_TABLES != 0 { - if i := p.table(out, data); i > 0 { - data = data[i:] - continue - } - } - - // an itemized/unordered list: - // - // * Item 1 - // * Item 2 - // - // also works with + or - - if p.uliPrefix(data) > 0 { - data = data[p.list(out, data, 0):] - continue - } - - // a numbered/ordered list: - // - // 1. Item 1 - // 2. Item 2 - if p.oliPrefix(data) > 0 { - data = data[p.list(out, data, LIST_TYPE_ORDERED):] - continue - } - - // definition lists: - // - // Term 1 - // : Definition a - // : Definition b - // - // Term 2 - // : Definition c - if p.flags&EXTENSION_DEFINITION_LISTS != 0 { - if p.dliPrefix(data) > 0 { - data = data[p.list(out, data, LIST_TYPE_DEFINITION):] - continue - } - } - - // anything else must look like a normal paragraph - // note: this finds underlined headers, too - data = data[p.paragraph(out, data):] - } - - p.nesting-- -} - -func (p *parser) isPrefixHeader(data []byte) bool { - if data[0] != '#' { - return false - } - - if p.flags&EXTENSION_SPACE_HEADERS != 0 { - level := 0 - for level < 6 && data[level] == '#' { - level++ - } - if data[level] != ' ' { - return false - } - } - return true -} - -func (p *parser) prefixHeader(out *bytes.Buffer, data []byte) int { - level := 0 - for level < 6 && data[level] == '#' { - level++ - } - i := skipChar(data, level, ' ') - end := skipUntilChar(data, i, '\n') - skip := end - id := "" - if p.flags&EXTENSION_HEADER_IDS != 0 { - j, k := 0, 0 - // find start/end of header id - for j = i; j < end-1 && (data[j] != '{' || data[j+1] != '#'); j++ { - } - for k = j + 1; k < end && data[k] != '}'; k++ { - } - // extract header id iff found - if j < end && k < end { - id = string(data[j+2 : k]) - end = j - skip = k + 1 - for end > 0 && data[end-1] == ' ' { - end-- - } - } - } - for end > 0 && data[end-1] == '#' { - if isBackslashEscaped(data, end-1) { - break - } - end-- - } - for end > 0 && data[end-1] == ' ' { - end-- - } - if end > i { - if id == "" && p.flags&EXTENSION_AUTO_HEADER_IDS != 0 { - id = sanitized_anchor_name.Create(string(data[i:end])) - } - work := func() bool { - p.inline(out, data[i:end]) - return true - } - p.r.Header(out, work, level, id) - } - return skip -} - -func (p *parser) isUnderlinedHeader(data []byte) int { - // test of level 1 header - if data[0] == '=' { - i := skipChar(data, 1, '=') - i = skipChar(data, i, ' ') - if data[i] == '\n' { - return 1 - } else { - return 0 - } - } - - // test of level 2 header - if data[0] == '-' { - i := skipChar(data, 1, '-') - i = skipChar(data, i, ' ') - if data[i] == '\n' { - return 2 - } else { - return 0 - } - } - - return 0 -} - -func (p *parser) titleBlock(out *bytes.Buffer, data []byte, doRender bool) int { - if data[0] != '%' { - return 0 - } - splitData := bytes.Split(data, []byte("\n")) - var i int - for idx, b := range splitData { - if !bytes.HasPrefix(b, []byte("%")) { - i = idx // - 1 - break - } - } - - data = bytes.Join(splitData[0:i], []byte("\n")) - p.r.TitleBlock(out, data) - - return len(data) -} - -func (p *parser) html(out *bytes.Buffer, data []byte, doRender bool) int { - var i, j int - - // identify the opening tag - if data[0] != '<' { - return 0 - } - curtag, tagfound := p.htmlFindTag(data[1:]) - - // handle special cases - if !tagfound { - // check for an HTML comment - if size := p.htmlComment(out, data, doRender); size > 0 { - return size - } - - // check for an
tag - if size := p.htmlHr(out, data, doRender); size > 0 { - return size - } - - // check for HTML CDATA - if size := p.htmlCDATA(out, data, doRender); size > 0 { - return size - } - - // no special case recognized - return 0 - } - - // look for an unindented matching closing tag - // followed by a blank line - found := false - /* - closetag := []byte("\n") - j = len(curtag) + 1 - for !found { - // scan for a closing tag at the beginning of a line - if skip := bytes.Index(data[j:], closetag); skip >= 0 { - j += skip + len(closetag) - } else { - break - } - - // see if it is the only thing on the line - if skip := p.isEmpty(data[j:]); skip > 0 { - // see if it is followed by a blank line/eof - j += skip - if j >= len(data) { - found = true - i = j - } else { - if skip := p.isEmpty(data[j:]); skip > 0 { - j += skip - found = true - i = j - } - } - } - } - */ - - // if not found, try a second pass looking for indented match - // but not if tag is "ins" or "del" (following original Markdown.pl) - if !found && curtag != "ins" && curtag != "del" { - i = 1 - for i < len(data) { - i++ - for i < len(data) && !(data[i-1] == '<' && data[i] == '/') { - i++ - } - - if i+2+len(curtag) >= len(data) { - break - } - - j = p.htmlFindEnd(curtag, data[i-1:]) - - if j > 0 { - i += j - 1 - found = true - break - } - } - } - - if !found { - return 0 - } - - // the end of the block has been found - if doRender { - // trim newlines - end := i - for end > 0 && data[end-1] == '\n' { - end-- - } - p.r.BlockHtml(out, data[:end]) - } - - return i -} - -func (p *parser) renderHTMLBlock(out *bytes.Buffer, data []byte, start int, doRender bool) int { - // html block needs to end with a blank line - if i := p.isEmpty(data[start:]); i > 0 { - size := start + i - if doRender { - // trim trailing newlines - end := size - for end > 0 && data[end-1] == '\n' { - end-- - } - p.r.BlockHtml(out, data[:end]) - } - return size - } - return 0 -} - -// HTML comment, lax form -func (p *parser) htmlComment(out *bytes.Buffer, data []byte, doRender bool) int { - i := p.inlineHTMLComment(out, data) - return p.renderHTMLBlock(out, data, i, doRender) -} - -// HTML CDATA section -func (p *parser) htmlCDATA(out *bytes.Buffer, data []byte, doRender bool) int { - const cdataTag = "') { - i++ - } - i++ - // no end-of-comment marker - if i >= len(data) { - return 0 - } - return p.renderHTMLBlock(out, data, i, doRender) -} - -// HR, which is the only self-closing block tag considered -func (p *parser) htmlHr(out *bytes.Buffer, data []byte, doRender bool) int { - if data[0] != '<' || (data[1] != 'h' && data[1] != 'H') || (data[2] != 'r' && data[2] != 'R') { - return 0 - } - if data[3] != ' ' && data[3] != '/' && data[3] != '>' { - // not an
tag after all; at least not a valid one - return 0 - } - - i := 3 - for data[i] != '>' && data[i] != '\n' { - i++ - } - - if data[i] == '>' { - return p.renderHTMLBlock(out, data, i+1, doRender) - } - - return 0 -} - -func (p *parser) htmlFindTag(data []byte) (string, bool) { - i := 0 - for isalnum(data[i]) { - i++ - } - key := string(data[:i]) - if _, ok := blockTags[key]; ok { - return key, true - } - return "", false -} - -func (p *parser) htmlFindEnd(tag string, data []byte) int { - // assume data[0] == '<' && data[1] == '/' already tested - - // check if tag is a match - closetag := []byte("") - if !bytes.HasPrefix(data, closetag) { - return 0 - } - i := len(closetag) - - // check that the rest of the line is blank - skip := 0 - if skip = p.isEmpty(data[i:]); skip == 0 { - return 0 - } - i += skip - skip = 0 - - if i >= len(data) { - return i - } - - if p.flags&EXTENSION_LAX_HTML_BLOCKS != 0 { - return i - } - if skip = p.isEmpty(data[i:]); skip == 0 { - // following line must be blank - return 0 - } - - return i + skip -} - -func (*parser) isEmpty(data []byte) int { - // it is okay to call isEmpty on an empty buffer - if len(data) == 0 { - return 0 - } - - var i int - for i = 0; i < len(data) && data[i] != '\n'; i++ { - if data[i] != ' ' && data[i] != '\t' { - return 0 - } - } - return i + 1 -} - -func (*parser) isHRule(data []byte) bool { - i := 0 - - // skip up to three spaces - for i < 3 && data[i] == ' ' { - i++ - } - - // look at the hrule char - if data[i] != '*' && data[i] != '-' && data[i] != '_' { - return false - } - c := data[i] - - // the whole line must be the char or whitespace - n := 0 - for data[i] != '\n' { - switch { - case data[i] == c: - n++ - case data[i] != ' ': - return false - } - i++ - } - - return n >= 3 -} - -// isFenceLine checks if there's a fence line (e.g., ``` or ``` go) at the beginning of data, -// and returns the end index if so, or 0 otherwise. It also returns the marker found. -// If syntax is not nil, it gets set to the syntax specified in the fence line. -// A final newline is mandatory to recognize the fence line, unless newlineOptional is true. -func isFenceLine(data []byte, syntax *string, oldmarker string, newlineOptional bool) (end int, marker string) { - i, size := 0, 0 - - // skip up to three spaces - for i < len(data) && i < 3 && data[i] == ' ' { - i++ - } - - // check for the marker characters: ~ or ` - if i >= len(data) { - return 0, "" - } - if data[i] != '~' && data[i] != '`' { - return 0, "" - } - - c := data[i] - - // the whole line must be the same char or whitespace - for i < len(data) && data[i] == c { - size++ - i++ - } - - // the marker char must occur at least 3 times - if size < 3 { - return 0, "" - } - marker = string(data[i-size : i]) - - // if this is the end marker, it must match the beginning marker - if oldmarker != "" && marker != oldmarker { - return 0, "" - } - - // TODO(shurcooL): It's probably a good idea to simplify the 2 code paths here - // into one, always get the syntax, and discard it if the caller doesn't care. - if syntax != nil { - syn := 0 - i = skipChar(data, i, ' ') - - if i >= len(data) { - if newlineOptional && i == len(data) { - return i, marker - } - return 0, "" - } - - syntaxStart := i - - if data[i] == '{' { - i++ - syntaxStart++ - - for i < len(data) && data[i] != '}' && data[i] != '\n' { - syn++ - i++ - } - - if i >= len(data) || data[i] != '}' { - return 0, "" - } - - // strip all whitespace at the beginning and the end - // of the {} block - for syn > 0 && isspace(data[syntaxStart]) { - syntaxStart++ - syn-- - } - - for syn > 0 && isspace(data[syntaxStart+syn-1]) { - syn-- - } - - i++ - } else { - for i < len(data) && !isspace(data[i]) { - syn++ - i++ - } - } - - *syntax = string(data[syntaxStart : syntaxStart+syn]) - } - - i = skipChar(data, i, ' ') - if i >= len(data) || data[i] != '\n' { - if newlineOptional && i == len(data) { - return i, marker - } - return 0, "" - } - - return i + 1, marker // Take newline into account. -} - -// fencedCodeBlock returns the end index if data contains a fenced code block at the beginning, -// or 0 otherwise. It writes to out if doRender is true, otherwise it has no side effects. -// If doRender is true, a final newline is mandatory to recognize the fenced code block. -func (p *parser) fencedCodeBlock(out *bytes.Buffer, data []byte, doRender bool) int { - var syntax string - beg, marker := isFenceLine(data, &syntax, "", false) - if beg == 0 || beg >= len(data) { - return 0 - } - - var work bytes.Buffer - - for { - // safe to assume beg < len(data) - - // check for the end of the code block - newlineOptional := !doRender - fenceEnd, _ := isFenceLine(data[beg:], nil, marker, newlineOptional) - if fenceEnd != 0 { - beg += fenceEnd - break - } - - // copy the current line - end := skipUntilChar(data, beg, '\n') + 1 - - // did we reach the end of the buffer without a closing marker? - if end >= len(data) { - return 0 - } - - // verbatim copy to the working buffer - if doRender { - work.Write(data[beg:end]) - } - beg = end - } - - if doRender { - p.r.BlockCode(out, work.Bytes(), syntax) - } - - return beg -} - -func (p *parser) table(out *bytes.Buffer, data []byte) int { - var header bytes.Buffer - i, columns := p.tableHeader(&header, data) - if i == 0 { - return 0 - } - - var body bytes.Buffer - - for i < len(data) { - pipes, rowStart := 0, i - for ; data[i] != '\n'; i++ { - if data[i] == '|' { - pipes++ - } - } - - if pipes == 0 { - i = rowStart - break - } - - // include the newline in data sent to tableRow - i++ - p.tableRow(&body, data[rowStart:i], columns, false) - } - - p.r.Table(out, header.Bytes(), body.Bytes(), columns) - - return i -} - -// check if the specified position is preceded by an odd number of backslashes -func isBackslashEscaped(data []byte, i int) bool { - backslashes := 0 - for i-backslashes-1 >= 0 && data[i-backslashes-1] == '\\' { - backslashes++ - } - return backslashes&1 == 1 -} - -func (p *parser) tableHeader(out *bytes.Buffer, data []byte) (size int, columns []int) { - i := 0 - colCount := 1 - for i = 0; data[i] != '\n'; i++ { - if data[i] == '|' && !isBackslashEscaped(data, i) { - colCount++ - } - } - - // doesn't look like a table header - if colCount == 1 { - return - } - - // include the newline in the data sent to tableRow - header := data[:i+1] - - // column count ignores pipes at beginning or end of line - if data[0] == '|' { - colCount-- - } - if i > 2 && data[i-1] == '|' && !isBackslashEscaped(data, i-1) { - colCount-- - } - - columns = make([]int, colCount) - - // move on to the header underline - i++ - if i >= len(data) { - return - } - - if data[i] == '|' && !isBackslashEscaped(data, i) { - i++ - } - i = skipChar(data, i, ' ') - - // each column header is of form: / *:?-+:? *|/ with # dashes + # colons >= 3 - // and trailing | optional on last column - col := 0 - for data[i] != '\n' { - dashes := 0 - - if data[i] == ':' { - i++ - columns[col] |= TABLE_ALIGNMENT_LEFT - dashes++ - } - for data[i] == '-' { - i++ - dashes++ - } - if data[i] == ':' { - i++ - columns[col] |= TABLE_ALIGNMENT_RIGHT - dashes++ - } - for data[i] == ' ' { - i++ - } - - // end of column test is messy - switch { - case dashes < 3: - // not a valid column - return - - case data[i] == '|' && !isBackslashEscaped(data, i): - // marker found, now skip past trailing whitespace - col++ - i++ - for data[i] == ' ' { - i++ - } - - // trailing junk found after last column - if col >= colCount && data[i] != '\n' { - return - } - - case (data[i] != '|' || isBackslashEscaped(data, i)) && col+1 < colCount: - // something else found where marker was required - return - - case data[i] == '\n': - // marker is optional for the last column - col++ - - default: - // trailing junk found after last column - return - } - } - if col != colCount { - return - } - - p.tableRow(out, header, columns, true) - size = i + 1 - return -} - -func (p *parser) tableRow(out *bytes.Buffer, data []byte, columns []int, header bool) { - i, col := 0, 0 - var rowWork bytes.Buffer - - if data[i] == '|' && !isBackslashEscaped(data, i) { - i++ - } - - for col = 0; col < len(columns) && i < len(data); col++ { - for data[i] == ' ' { - i++ - } - - cellStart := i - - for (data[i] != '|' || isBackslashEscaped(data, i)) && data[i] != '\n' { - i++ - } - - cellEnd := i - - // skip the end-of-cell marker, possibly taking us past end of buffer - i++ - - for cellEnd > cellStart && data[cellEnd-1] == ' ' { - cellEnd-- - } - - var cellWork bytes.Buffer - p.inline(&cellWork, data[cellStart:cellEnd]) - - if header { - p.r.TableHeaderCell(&rowWork, cellWork.Bytes(), columns[col]) - } else { - p.r.TableCell(&rowWork, cellWork.Bytes(), columns[col]) - } - } - - // pad it out with empty columns to get the right number - for ; col < len(columns); col++ { - if header { - p.r.TableHeaderCell(&rowWork, nil, columns[col]) - } else { - p.r.TableCell(&rowWork, nil, columns[col]) - } - } - - // silently ignore rows with too many cells - - p.r.TableRow(out, rowWork.Bytes()) -} - -// returns blockquote prefix length -func (p *parser) quotePrefix(data []byte) int { - i := 0 - for i < 3 && data[i] == ' ' { - i++ - } - if data[i] == '>' { - if data[i+1] == ' ' { - return i + 2 - } - return i + 1 - } - return 0 -} - -// blockquote ends with at least one blank line -// followed by something without a blockquote prefix -func (p *parser) terminateBlockquote(data []byte, beg, end int) bool { - if p.isEmpty(data[beg:]) <= 0 { - return false - } - if end >= len(data) { - return true - } - return p.quotePrefix(data[end:]) == 0 && p.isEmpty(data[end:]) == 0 -} - -// parse a blockquote fragment -func (p *parser) quote(out *bytes.Buffer, data []byte) int { - var raw bytes.Buffer - beg, end := 0, 0 - for beg < len(data) { - end = beg - // Step over whole lines, collecting them. While doing that, check for - // fenced code and if one's found, incorporate it altogether, - // irregardless of any contents inside it - for data[end] != '\n' { - if p.flags&EXTENSION_FENCED_CODE != 0 { - if i := p.fencedCodeBlock(out, data[end:], false); i > 0 { - // -1 to compensate for the extra end++ after the loop: - end += i - 1 - break - } - } - end++ - } - end++ - - if pre := p.quotePrefix(data[beg:]); pre > 0 { - // skip the prefix - beg += pre - } else if p.terminateBlockquote(data, beg, end) { - break - } - - // this line is part of the blockquote - raw.Write(data[beg:end]) - beg = end - } - - var cooked bytes.Buffer - p.block(&cooked, raw.Bytes()) - p.r.BlockQuote(out, cooked.Bytes()) - return end -} - -// returns prefix length for block code -func (p *parser) codePrefix(data []byte) int { - if data[0] == ' ' && data[1] == ' ' && data[2] == ' ' && data[3] == ' ' { - return 4 - } - return 0 -} - -func (p *parser) code(out *bytes.Buffer, data []byte) int { - var work bytes.Buffer - - i := 0 - for i < len(data) { - beg := i - for data[i] != '\n' { - i++ - } - i++ - - blankline := p.isEmpty(data[beg:i]) > 0 - if pre := p.codePrefix(data[beg:i]); pre > 0 { - beg += pre - } else if !blankline { - // non-empty, non-prefixed line breaks the pre - i = beg - break - } - - // verbatim copy to the working buffeu - if blankline { - work.WriteByte('\n') - } else { - work.Write(data[beg:i]) - } - } - - // trim all the \n off the end of work - workbytes := work.Bytes() - eol := len(workbytes) - for eol > 0 && workbytes[eol-1] == '\n' { - eol-- - } - if eol != len(workbytes) { - work.Truncate(eol) - } - - work.WriteByte('\n') - - p.r.BlockCode(out, work.Bytes(), "") - - return i -} - -// returns unordered list item prefix -func (p *parser) uliPrefix(data []byte) int { - i := 0 - - // start with up to 3 spaces - for i < 3 && data[i] == ' ' { - i++ - } - - // need a *, +, or - followed by a space - if (data[i] != '*' && data[i] != '+' && data[i] != '-') || - data[i+1] != ' ' { - return 0 - } - return i + 2 -} - -// returns ordered list item prefix -func (p *parser) oliPrefix(data []byte) int { - i := 0 - - // start with up to 3 spaces - for i < 3 && data[i] == ' ' { - i++ - } - - // count the digits - start := i - for data[i] >= '0' && data[i] <= '9' { - i++ - } - - // we need >= 1 digits followed by a dot and a space - if start == i || data[i] != '.' || data[i+1] != ' ' { - return 0 - } - return i + 2 -} - -// returns definition list item prefix -func (p *parser) dliPrefix(data []byte) int { - i := 0 - - // need a : followed by a spaces - if data[i] != ':' || data[i+1] != ' ' { - return 0 - } - for data[i] == ' ' { - i++ - } - return i + 2 -} - -// parse ordered or unordered list block -func (p *parser) list(out *bytes.Buffer, data []byte, flags int) int { - i := 0 - flags |= LIST_ITEM_BEGINNING_OF_LIST - work := func() bool { - for i < len(data) { - skip := p.listItem(out, data[i:], &flags) - i += skip - - if skip == 0 || flags&LIST_ITEM_END_OF_LIST != 0 { - break - } - flags &= ^LIST_ITEM_BEGINNING_OF_LIST - } - return true - } - - p.r.List(out, work, flags) - return i -} - -// Parse a single list item. -// Assumes initial prefix is already removed if this is a sublist. -func (p *parser) listItem(out *bytes.Buffer, data []byte, flags *int) int { - // keep track of the indentation of the first line - itemIndent := 0 - for itemIndent < 3 && data[itemIndent] == ' ' { - itemIndent++ - } - - i := p.uliPrefix(data) - if i == 0 { - i = p.oliPrefix(data) - } - if i == 0 { - i = p.dliPrefix(data) - // reset definition term flag - if i > 0 { - *flags &= ^LIST_TYPE_TERM - } - } - if i == 0 { - // if in defnition list, set term flag and continue - if *flags&LIST_TYPE_DEFINITION != 0 { - *flags |= LIST_TYPE_TERM - } else { - return 0 - } - } - - // skip leading whitespace on first line - for data[i] == ' ' { - i++ - } - - // find the end of the line - line := i - for i > 0 && data[i-1] != '\n' { - i++ - } - - // get working buffer - var raw bytes.Buffer - - // put the first line into the working buffer - raw.Write(data[line:i]) - line = i - - // process the following lines - containsBlankLine := false - sublist := 0 - -gatherlines: - for line < len(data) { - i++ - - // find the end of this line - for data[i-1] != '\n' { - i++ - } - - // if it is an empty line, guess that it is part of this item - // and move on to the next line - if p.isEmpty(data[line:i]) > 0 { - containsBlankLine = true - raw.Write(data[line:i]) - line = i - continue - } - - // calculate the indentation - indent := 0 - for indent < 4 && line+indent < i && data[line+indent] == ' ' { - indent++ - } - - chunk := data[line+indent : i] - - // evaluate how this line fits in - switch { - // is this a nested list item? - case (p.uliPrefix(chunk) > 0 && !p.isHRule(chunk)) || - p.oliPrefix(chunk) > 0 || - p.dliPrefix(chunk) > 0: - - if containsBlankLine { - // end the list if the type changed after a blank line - if indent <= itemIndent && - ((*flags&LIST_TYPE_ORDERED != 0 && p.uliPrefix(chunk) > 0) || - (*flags&LIST_TYPE_ORDERED == 0 && p.oliPrefix(chunk) > 0)) { - - *flags |= LIST_ITEM_END_OF_LIST - break gatherlines - } - *flags |= LIST_ITEM_CONTAINS_BLOCK - } - - // to be a nested list, it must be indented more - // if not, it is the next item in the same list - if indent <= itemIndent { - break gatherlines - } - - // is this the first item in the nested list? - if sublist == 0 { - sublist = raw.Len() - } - - // is this a nested prefix header? - case p.isPrefixHeader(chunk): - // if the header is not indented, it is not nested in the list - // and thus ends the list - if containsBlankLine && indent < 4 { - *flags |= LIST_ITEM_END_OF_LIST - break gatherlines - } - *flags |= LIST_ITEM_CONTAINS_BLOCK - - // anything following an empty line is only part - // of this item if it is indented 4 spaces - // (regardless of the indentation of the beginning of the item) - case containsBlankLine && indent < 4: - if *flags&LIST_TYPE_DEFINITION != 0 && i < len(data)-1 { - // is the next item still a part of this list? - next := i - for data[next] != '\n' { - next++ - } - for next < len(data)-1 && data[next] == '\n' { - next++ - } - if i < len(data)-1 && data[i] != ':' && data[next] != ':' { - *flags |= LIST_ITEM_END_OF_LIST - } - } else { - *flags |= LIST_ITEM_END_OF_LIST - } - break gatherlines - - // a blank line means this should be parsed as a block - case containsBlankLine: - *flags |= LIST_ITEM_CONTAINS_BLOCK - } - - containsBlankLine = false - - // add the line into the working buffer without prefix - raw.Write(data[line+indent : i]) - - line = i - } - - // If reached end of data, the Renderer.ListItem call we're going to make below - // is definitely the last in the list. - if line >= len(data) { - *flags |= LIST_ITEM_END_OF_LIST - } - - rawBytes := raw.Bytes() - - // render the contents of the list item - var cooked bytes.Buffer - if *flags&LIST_ITEM_CONTAINS_BLOCK != 0 && *flags&LIST_TYPE_TERM == 0 { - // intermediate render of block item, except for definition term - if sublist > 0 { - p.block(&cooked, rawBytes[:sublist]) - p.block(&cooked, rawBytes[sublist:]) - } else { - p.block(&cooked, rawBytes) - } - } else { - // intermediate render of inline item - if sublist > 0 { - p.inline(&cooked, rawBytes[:sublist]) - p.block(&cooked, rawBytes[sublist:]) - } else { - p.inline(&cooked, rawBytes) - } - } - - // render the actual list item - cookedBytes := cooked.Bytes() - parsedEnd := len(cookedBytes) - - // strip trailing newlines - for parsedEnd > 0 && cookedBytes[parsedEnd-1] == '\n' { - parsedEnd-- - } - p.r.ListItem(out, cookedBytes[:parsedEnd], *flags) - - return line -} - -// render a single paragraph that has already been parsed out -func (p *parser) renderParagraph(out *bytes.Buffer, data []byte) { - if len(data) == 0 { - return - } - - // trim leading spaces - beg := 0 - for data[beg] == ' ' { - beg++ - } - - // trim trailing newline - end := len(data) - 1 - - // trim trailing spaces - for end > beg && data[end-1] == ' ' { - end-- - } - - work := func() bool { - p.inline(out, data[beg:end]) - return true - } - p.r.Paragraph(out, work) -} - -func (p *parser) paragraph(out *bytes.Buffer, data []byte) int { - // prev: index of 1st char of previous line - // line: index of 1st char of current line - // i: index of cursor/end of current line - var prev, line, i int - - // keep going until we find something to mark the end of the paragraph - for i < len(data) { - // mark the beginning of the current line - prev = line - current := data[i:] - line = i - - // did we find a blank line marking the end of the paragraph? - if n := p.isEmpty(current); n > 0 { - // did this blank line followed by a definition list item? - if p.flags&EXTENSION_DEFINITION_LISTS != 0 { - if i < len(data)-1 && data[i+1] == ':' { - return p.list(out, data[prev:], LIST_TYPE_DEFINITION) - } - } - - p.renderParagraph(out, data[:i]) - return i + n - } - - // an underline under some text marks a header, so our paragraph ended on prev line - if i > 0 { - if level := p.isUnderlinedHeader(current); level > 0 { - // render the paragraph - p.renderParagraph(out, data[:prev]) - - // ignore leading and trailing whitespace - eol := i - 1 - for prev < eol && data[prev] == ' ' { - prev++ - } - for eol > prev && data[eol-1] == ' ' { - eol-- - } - - // render the header - // this ugly double closure avoids forcing variables onto the heap - work := func(o *bytes.Buffer, pp *parser, d []byte) func() bool { - return func() bool { - pp.inline(o, d) - return true - } - }(out, p, data[prev:eol]) - - id := "" - if p.flags&EXTENSION_AUTO_HEADER_IDS != 0 { - id = sanitized_anchor_name.Create(string(data[prev:eol])) - } - - p.r.Header(out, work, level, id) - - // find the end of the underline - for data[i] != '\n' { - i++ - } - return i - } - } - - // if the next line starts a block of HTML, then the paragraph ends here - if p.flags&EXTENSION_LAX_HTML_BLOCKS != 0 { - if data[i] == '<' && p.html(out, current, false) > 0 { - // rewind to before the HTML block - p.renderParagraph(out, data[:i]) - return i - } - } - - // if there's a prefixed header or a horizontal rule after this, paragraph is over - if p.isPrefixHeader(current) || p.isHRule(current) { - p.renderParagraph(out, data[:i]) - return i - } - - // if there's a fenced code block, paragraph is over - if p.flags&EXTENSION_FENCED_CODE != 0 { - if p.fencedCodeBlock(out, current, false) > 0 { - p.renderParagraph(out, data[:i]) - return i - } - } - - // if there's a definition list item, prev line is a definition term - if p.flags&EXTENSION_DEFINITION_LISTS != 0 { - if p.dliPrefix(current) != 0 { - return p.list(out, data[prev:], LIST_TYPE_DEFINITION) - } - } - - // if there's a list after this, paragraph is over - if p.flags&EXTENSION_NO_EMPTY_LINE_BEFORE_BLOCK != 0 { - if p.uliPrefix(current) != 0 || - p.oliPrefix(current) != 0 || - p.quotePrefix(current) != 0 || - p.codePrefix(current) != 0 { - p.renderParagraph(out, data[:i]) - return i - } - } - - // otherwise, scan to the beginning of the next line - for data[i] != '\n' { - i++ - } - i++ - } - - p.renderParagraph(out, data[:i]) - return i -} diff --git a/vendor/github.com/russross/blackfriday/html.go b/vendor/github.com/russross/blackfriday/html.go deleted file mode 100644 index 74e67ee82..000000000 --- a/vendor/github.com/russross/blackfriday/html.go +++ /dev/null @@ -1,949 +0,0 @@ -// -// Blackfriday Markdown Processor -// Available at http://github.com/russross/blackfriday -// -// Copyright © 2011 Russ Ross . -// Distributed under the Simplified BSD License. -// See README.md for details. -// - -// -// -// HTML rendering backend -// -// - -package blackfriday - -import ( - "bytes" - "fmt" - "regexp" - "strconv" - "strings" -) - -// Html renderer configuration options. -const ( - HTML_SKIP_HTML = 1 << iota // skip preformatted HTML blocks - HTML_SKIP_STYLE // skip embedded - -

PANIC

-
%s
-
%s
- -` -) - -var ( - dunno = []byte("???") - centerDot = []byte("·") - dot = []byte(".") - slash = []byte("/") -) - -// stack returns a nicely formated stack frame, skipping skip frames -func stack(skip int) []byte { - buf := new(bytes.Buffer) // the returned data - // As we loop, we open files and read them. These variables record the currently - // loaded file. - var lines [][]byte - var lastFile string - for i := skip; ; i++ { // Skip the expected number of frames - pc, file, line, ok := runtime.Caller(i) - if !ok { - break - } - // Print this much at least. If we can't find the source, it won't show. - fmt.Fprintf(buf, "%s:%d (0x%x)\n", file, line, pc) - if file != lastFile { - data, err := ioutil.ReadFile(file) - if err != nil { - continue - } - lines = bytes.Split(data, []byte{'\n'}) - lastFile = file - } - fmt.Fprintf(buf, "\t%s: %s\n", function(pc), source(lines, line)) - } - return buf.Bytes() -} - -// source returns a space-trimmed slice of the n'th line. -func source(lines [][]byte, n int) []byte { - n-- // in stack trace, lines are 1-indexed but our array is 0-indexed - if n < 0 || n >= len(lines) { - return dunno - } - return bytes.TrimSpace(lines[n]) -} - -// function returns, if possible, the name of the function containing the PC. -func function(pc uintptr) []byte { - fn := runtime.FuncForPC(pc) - if fn == nil { - return dunno - } - name := []byte(fn.Name()) - // The name includes the path name to the package, which is unnecessary - // since the file name is already included. Plus, it has center dots. - // That is, we see - // runtime/debug.*T·ptrmethod - // and want - // *T.ptrmethod - // Also the package path might contains dot (e.g. code.google.com/...), - // so first eliminate the path prefix - if lastslash := bytes.LastIndex(name, slash); lastslash >= 0 { - name = name[lastslash+1:] - } - if period := bytes.Index(name, dot); period >= 0 { - name = name[period+1:] - } - name = bytes.Replace(name, centerDot, dot, -1) - return name -} - -// Recovery returns a middleware that recovers from any panics and writes a 500 if there was one. -// While Martini is in development mode, Recovery will also output the panic as HTML. -func Recovery() Handler { - return func(c *Context, log *log.Logger) { - defer func() { - if err := recover(); err != nil { - stack := stack(3) - log.Printf("PANIC: %s\n%s", err, stack) - - // Lookup the current responsewriter - val := c.GetVal(inject.InterfaceOf((*http.ResponseWriter)(nil))) - res := val.Interface().(http.ResponseWriter) - - // respond with panic message while in development mode - var body []byte - if Env == DEV { - res.Header().Set("Content-Type", "text/html") - body = []byte(fmt.Sprintf(panicHtml, err, err, stack)) - } - - res.WriteHeader(http.StatusInternalServerError) - if nil != body { - res.Write(body) - } - } - }() - - c.Next() - } -} diff --git a/vendor/gopkg.in/macaron.v1/render.go b/vendor/gopkg.in/macaron.v1/render.go deleted file mode 100644 index f45e43124..000000000 --- a/vendor/gopkg.in/macaron.v1/render.go +++ /dev/null @@ -1,725 +0,0 @@ -// Copyright 2013 Martini Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package macaron - -import ( - "bytes" - "encoding/json" - "encoding/xml" - "fmt" - "html/template" - "io" - "io/ioutil" - "net/http" - "os" - "path" - "path/filepath" - "strings" - "sync" - "time" - - "github.com/Unknwon/com" -) - -const ( - _CONTENT_TYPE = "Content-Type" - _CONTENT_LENGTH = "Content-Length" - _CONTENT_BINARY = "application/octet-stream" - _CONTENT_JSON = "application/json" - _CONTENT_HTML = "text/html" - _CONTENT_PLAIN = "text/plain" - _CONTENT_XHTML = "application/xhtml+xml" - _CONTENT_XML = "text/xml" - _DEFAULT_CHARSET = "UTF-8" -) - -var ( - // Provides a temporary buffer to execute templates into and catch errors. - bufpool = sync.Pool{ - New: func() interface{} { return new(bytes.Buffer) }, - } - - // Included helper functions for use when rendering html - helperFuncs = template.FuncMap{ - "yield": func() (string, error) { - return "", fmt.Errorf("yield called with no layout defined") - }, - "current": func() (string, error) { - return "", nil - }, - } -) - -type ( - // TemplateFile represents a interface of template file that has name and can be read. - TemplateFile interface { - Name() string - Data() []byte - Ext() string - } - // TemplateFileSystem represents a interface of template file system that able to list all files. - TemplateFileSystem interface { - ListFiles() []TemplateFile - Get(string) (io.Reader, error) - } - - // Delims represents a set of Left and Right delimiters for HTML template rendering - Delims struct { - // Left delimiter, defaults to {{ - Left string - // Right delimiter, defaults to }} - Right string - } - - // RenderOptions represents a struct for specifying configuration options for the Render middleware. - RenderOptions struct { - // Directory to load templates. Default is "templates". - Directory string - // Addtional directories to overwite templates. - AppendDirectories []string - // Layout template name. Will not render a layout if "". Default is to "". - Layout string - // Extensions to parse template files from. Defaults are [".tmpl", ".html"]. - Extensions []string - // Funcs is a slice of FuncMaps to apply to the template upon compilation. This is useful for helper functions. Default is []. - Funcs []template.FuncMap - // Delims sets the action delimiters to the specified strings in the Delims struct. - Delims Delims - // Appends the given charset to the Content-Type header. Default is "UTF-8". - Charset string - // Outputs human readable JSON. - IndentJSON bool - // Outputs human readable XML. - IndentXML bool - // Prefixes the JSON output with the given bytes. - PrefixJSON []byte - // Prefixes the XML output with the given bytes. - PrefixXML []byte - // Allows changing of output to XHTML instead of HTML. Default is "text/html" - HTMLContentType string - // TemplateFileSystem is the interface for supporting any implmentation of template file system. - TemplateFileSystem - } - - // HTMLOptions is a struct for overriding some rendering Options for specific HTML call - HTMLOptions struct { - // Layout template name. Overrides Options.Layout. - Layout string - } - - Render interface { - http.ResponseWriter - SetResponseWriter(http.ResponseWriter) - - JSON(int, interface{}) - JSONString(interface{}) (string, error) - RawData(int, []byte) // Serve content as binary - PlainText(int, []byte) // Serve content as plain text - HTML(int, string, interface{}, ...HTMLOptions) - HTMLSet(int, string, string, interface{}, ...HTMLOptions) - HTMLSetString(string, string, interface{}, ...HTMLOptions) (string, error) - HTMLString(string, interface{}, ...HTMLOptions) (string, error) - HTMLSetBytes(string, string, interface{}, ...HTMLOptions) ([]byte, error) - HTMLBytes(string, interface{}, ...HTMLOptions) ([]byte, error) - XML(int, interface{}) - Error(int, ...string) - Status(int) - SetTemplatePath(string, string) - HasTemplateSet(string) bool - } -) - -// TplFile implements TemplateFile interface. -type TplFile struct { - name string - data []byte - ext string -} - -// NewTplFile cerates new template file with given name and data. -func NewTplFile(name string, data []byte, ext string) *TplFile { - return &TplFile{name, data, ext} -} - -func (f *TplFile) Name() string { - return f.name -} - -func (f *TplFile) Data() []byte { - return f.data -} - -func (f *TplFile) Ext() string { - return f.ext -} - -// TplFileSystem implements TemplateFileSystem interface. -type TplFileSystem struct { - files []TemplateFile -} - -// NewTemplateFileSystem creates new template file system with given options. -func NewTemplateFileSystem(opt RenderOptions, omitData bool) TplFileSystem { - fs := TplFileSystem{} - fs.files = make([]TemplateFile, 0, 10) - - // Directories are composed in reverse order because later one overwrites previous ones, - // so once found, we can directly jump out of the loop. - dirs := make([]string, 0, len(opt.AppendDirectories)+1) - for i := len(opt.AppendDirectories) - 1; i >= 0; i-- { - dirs = append(dirs, opt.AppendDirectories[i]) - } - dirs = append(dirs, opt.Directory) - - var err error - for i := range dirs { - // Skip ones that does not exists for symlink test, - // but allow non-symlink ones added after start. - if !com.IsExist(dirs[i]) { - continue - } - - dirs[i], err = filepath.EvalSymlinks(dirs[i]) - if err != nil { - panic("EvalSymlinks(" + dirs[i] + "): " + err.Error()) - } - } - lastDir := dirs[len(dirs)-1] - - // We still walk the last (original) directory because it's non-sense we load templates not exist in original directory. - if err = filepath.Walk(lastDir, func(path string, info os.FileInfo, err error) error { - r, err := filepath.Rel(lastDir, path) - if err != nil { - return err - } - - ext := GetExt(r) - - for _, extension := range opt.Extensions { - if ext != extension { - continue - } - - var data []byte - if !omitData { - // Loop over candidates of directory, break out once found. - // The file always exists because it's inside the walk function, - // and read original file is the worst case. - for i := range dirs { - path = filepath.Join(dirs[i], r) - if !com.IsFile(path) { - continue - } - - data, err = ioutil.ReadFile(path) - if err != nil { - return err - } - break - } - } - - name := filepath.ToSlash((r[0 : len(r)-len(ext)])) - fs.files = append(fs.files, NewTplFile(name, data, ext)) - } - - return nil - }); err != nil { - panic("NewTemplateFileSystem: " + err.Error()) - } - - return fs -} - -func (fs TplFileSystem) ListFiles() []TemplateFile { - return fs.files -} - -func (fs TplFileSystem) Get(name string) (io.Reader, error) { - for i := range fs.files { - if fs.files[i].Name()+fs.files[i].Ext() == name { - return bytes.NewReader(fs.files[i].Data()), nil - } - } - return nil, fmt.Errorf("file '%s' not found", name) -} - -func PrepareCharset(charset string) string { - if len(charset) != 0 { - return "; charset=" + charset - } - - return "; charset=" + _DEFAULT_CHARSET -} - -func GetExt(s string) string { - index := strings.Index(s, ".") - if index == -1 { - return "" - } - return s[index:] -} - -func compile(opt RenderOptions) *template.Template { - t := template.New(opt.Directory) - t.Delims(opt.Delims.Left, opt.Delims.Right) - // Parse an initial template in case we don't have any. - template.Must(t.Parse("Macaron")) - - if opt.TemplateFileSystem == nil { - opt.TemplateFileSystem = NewTemplateFileSystem(opt, false) - } - - for _, f := range opt.TemplateFileSystem.ListFiles() { - tmpl := t.New(f.Name()) - for _, funcs := range opt.Funcs { - tmpl.Funcs(funcs) - } - // Bomb out if parse fails. We don't want any silent server starts. - template.Must(tmpl.Funcs(helperFuncs).Parse(string(f.Data()))) - } - - return t -} - -const ( - DEFAULT_TPL_SET_NAME = "DEFAULT" -) - -// TemplateSet represents a template set of type *template.Template. -type TemplateSet struct { - lock sync.RWMutex - sets map[string]*template.Template - dirs map[string]string -} - -// NewTemplateSet initializes a new empty template set. -func NewTemplateSet() *TemplateSet { - return &TemplateSet{ - sets: make(map[string]*template.Template), - dirs: make(map[string]string), - } -} - -func (ts *TemplateSet) Set(name string, opt *RenderOptions) *template.Template { - t := compile(*opt) - - ts.lock.Lock() - defer ts.lock.Unlock() - - ts.sets[name] = t - ts.dirs[name] = opt.Directory - return t -} - -func (ts *TemplateSet) Get(name string) *template.Template { - ts.lock.RLock() - defer ts.lock.RUnlock() - - return ts.sets[name] -} - -func (ts *TemplateSet) GetDir(name string) string { - ts.lock.RLock() - defer ts.lock.RUnlock() - - return ts.dirs[name] -} - -func prepareRenderOptions(options []RenderOptions) RenderOptions { - var opt RenderOptions - if len(options) > 0 { - opt = options[0] - } - - // Defaults. - if len(opt.Directory) == 0 { - opt.Directory = "templates" - } - if len(opt.Extensions) == 0 { - opt.Extensions = []string{".tmpl", ".html"} - } - if len(opt.HTMLContentType) == 0 { - opt.HTMLContentType = _CONTENT_HTML - } - - return opt -} - -func ParseTplSet(tplSet string) (tplName string, tplDir string) { - tplSet = strings.TrimSpace(tplSet) - if len(tplSet) == 0 { - panic("empty template set argument") - } - infos := strings.Split(tplSet, ":") - if len(infos) == 1 { - tplDir = infos[0] - tplName = path.Base(tplDir) - } else { - tplName = infos[0] - tplDir = infos[1] - } - - if !com.IsDir(tplDir) { - panic("template set path does not exist or is not a directory") - } - return tplName, tplDir -} - -func renderHandler(opt RenderOptions, tplSets []string) Handler { - cs := PrepareCharset(opt.Charset) - ts := NewTemplateSet() - ts.Set(DEFAULT_TPL_SET_NAME, &opt) - - var tmpOpt RenderOptions - for _, tplSet := range tplSets { - tplName, tplDir := ParseTplSet(tplSet) - tmpOpt = opt - tmpOpt.Directory = tplDir - ts.Set(tplName, &tmpOpt) - } - - return func(ctx *Context) { - r := &TplRender{ - ResponseWriter: ctx.Resp, - TemplateSet: ts, - Opt: &opt, - CompiledCharset: cs, - } - ctx.Data["TmplLoadTimes"] = func() string { - if r.startTime.IsZero() { - return "" - } - return fmt.Sprint(time.Since(r.startTime).Nanoseconds()/1e6) + "ms" - } - - ctx.Render = r - ctx.MapTo(r, (*Render)(nil)) - } -} - -// Renderer is a Middleware that maps a macaron.Render service into the Macaron handler chain. -// An single variadic macaron.RenderOptions struct can be optionally provided to configure -// HTML rendering. The default directory for templates is "templates" and the default -// file extension is ".tmpl" and ".html". -// -// If MACARON_ENV is set to "" or "development" then templates will be recompiled on every request. For more performance, set the -// MACARON_ENV environment variable to "production". -func Renderer(options ...RenderOptions) Handler { - return renderHandler(prepareRenderOptions(options), []string{}) -} - -func Renderers(options RenderOptions, tplSets ...string) Handler { - return renderHandler(prepareRenderOptions([]RenderOptions{options}), tplSets) -} - -type TplRender struct { - http.ResponseWriter - *TemplateSet - Opt *RenderOptions - CompiledCharset string - - startTime time.Time -} - -func (r *TplRender) SetResponseWriter(rw http.ResponseWriter) { - r.ResponseWriter = rw -} - -func (r *TplRender) JSON(status int, v interface{}) { - var ( - result []byte - err error - ) - if r.Opt.IndentJSON { - result, err = json.MarshalIndent(v, "", " ") - } else { - result, err = json.Marshal(v) - } - if err != nil { - http.Error(r, err.Error(), 500) - return - } - - // json rendered fine, write out the result - r.Header().Set(_CONTENT_TYPE, _CONTENT_JSON+r.CompiledCharset) - r.WriteHeader(status) - if len(r.Opt.PrefixJSON) > 0 { - r.Write(r.Opt.PrefixJSON) - } - r.Write(result) -} - -func (r *TplRender) JSONString(v interface{}) (string, error) { - var result []byte - var err error - if r.Opt.IndentJSON { - result, err = json.MarshalIndent(v, "", " ") - } else { - result, err = json.Marshal(v) - } - if err != nil { - return "", err - } - return string(result), nil -} - -func (r *TplRender) XML(status int, v interface{}) { - var result []byte - var err error - if r.Opt.IndentXML { - result, err = xml.MarshalIndent(v, "", " ") - } else { - result, err = xml.Marshal(v) - } - if err != nil { - http.Error(r, err.Error(), 500) - return - } - - // XML rendered fine, write out the result - r.Header().Set(_CONTENT_TYPE, _CONTENT_XML+r.CompiledCharset) - r.WriteHeader(status) - if len(r.Opt.PrefixXML) > 0 { - r.Write(r.Opt.PrefixXML) - } - r.Write(result) -} - -func (r *TplRender) data(status int, contentType string, v []byte) { - if r.Header().Get(_CONTENT_TYPE) == "" { - r.Header().Set(_CONTENT_TYPE, contentType) - } - r.WriteHeader(status) - r.Write(v) -} - -func (r *TplRender) RawData(status int, v []byte) { - r.data(status, _CONTENT_BINARY, v) -} - -func (r *TplRender) PlainText(status int, v []byte) { - r.data(status, _CONTENT_PLAIN, v) -} - -func (r *TplRender) execute(t *template.Template, name string, data interface{}) (*bytes.Buffer, error) { - buf := bufpool.Get().(*bytes.Buffer) - return buf, t.ExecuteTemplate(buf, name, data) -} - -func (r *TplRender) addYield(t *template.Template, tplName string, data interface{}) { - funcs := template.FuncMap{ - "yield": func() (template.HTML, error) { - buf, err := r.execute(t, tplName, data) - // return safe html here since we are rendering our own template - return template.HTML(buf.String()), err - }, - "current": func() (string, error) { - return tplName, nil - }, - } - t.Funcs(funcs) -} - -func (r *TplRender) renderBytes(setName, tplName string, data interface{}, htmlOpt ...HTMLOptions) (*bytes.Buffer, error) { - t := r.TemplateSet.Get(setName) - if Env == DEV { - opt := *r.Opt - opt.Directory = r.TemplateSet.GetDir(setName) - t = r.TemplateSet.Set(setName, &opt) - } - if t == nil { - return nil, fmt.Errorf("html/template: template \"%s\" is undefined", tplName) - } - - opt := r.prepareHTMLOptions(htmlOpt) - - if len(opt.Layout) > 0 { - r.addYield(t, tplName, data) - tplName = opt.Layout - } - - out, err := r.execute(t, tplName, data) - if err != nil { - return nil, err - } - - return out, nil -} - -func (r *TplRender) renderHTML(status int, setName, tplName string, data interface{}, htmlOpt ...HTMLOptions) { - r.startTime = time.Now() - - out, err := r.renderBytes(setName, tplName, data, htmlOpt...) - if err != nil { - http.Error(r, err.Error(), http.StatusInternalServerError) - return - } - - r.Header().Set(_CONTENT_TYPE, r.Opt.HTMLContentType+r.CompiledCharset) - r.WriteHeader(status) - - if _, err := out.WriteTo(r); err != nil { - out.Reset() - } - bufpool.Put(out) -} - -func (r *TplRender) HTML(status int, name string, data interface{}, htmlOpt ...HTMLOptions) { - r.renderHTML(status, DEFAULT_TPL_SET_NAME, name, data, htmlOpt...) -} - -func (r *TplRender) HTMLSet(status int, setName, tplName string, data interface{}, htmlOpt ...HTMLOptions) { - r.renderHTML(status, setName, tplName, data, htmlOpt...) -} - -func (r *TplRender) HTMLSetBytes(setName, tplName string, data interface{}, htmlOpt ...HTMLOptions) ([]byte, error) { - out, err := r.renderBytes(setName, tplName, data, htmlOpt...) - if err != nil { - return []byte(""), err - } - return out.Bytes(), nil -} - -func (r *TplRender) HTMLBytes(name string, data interface{}, htmlOpt ...HTMLOptions) ([]byte, error) { - return r.HTMLSetBytes(DEFAULT_TPL_SET_NAME, name, data, htmlOpt...) -} - -func (r *TplRender) HTMLSetString(setName, tplName string, data interface{}, htmlOpt ...HTMLOptions) (string, error) { - p, err := r.HTMLSetBytes(setName, tplName, data, htmlOpt...) - return string(p), err -} - -func (r *TplRender) HTMLString(name string, data interface{}, htmlOpt ...HTMLOptions) (string, error) { - p, err := r.HTMLBytes(name, data, htmlOpt...) - return string(p), err -} - -// Error writes the given HTTP status to the current ResponseWriter -func (r *TplRender) Error(status int, message ...string) { - r.WriteHeader(status) - if len(message) > 0 { - r.Write([]byte(message[0])) - } -} - -func (r *TplRender) Status(status int) { - r.WriteHeader(status) -} - -func (r *TplRender) prepareHTMLOptions(htmlOpt []HTMLOptions) HTMLOptions { - if len(htmlOpt) > 0 { - return htmlOpt[0] - } - - return HTMLOptions{ - Layout: r.Opt.Layout, - } -} - -func (r *TplRender) SetTemplatePath(setName, dir string) { - if len(setName) == 0 { - setName = DEFAULT_TPL_SET_NAME - } - opt := *r.Opt - opt.Directory = dir - r.TemplateSet.Set(setName, &opt) -} - -func (r *TplRender) HasTemplateSet(name string) bool { - return r.TemplateSet.Get(name) != nil -} - -// DummyRender is used when user does not choose any real render to use. -// This way, we can print out friendly message which asks them to register one, -// instead of ugly and confusing 'nil pointer' panic. -type DummyRender struct { - http.ResponseWriter -} - -func renderNotRegistered() { - panic("middleware render hasn't been registered") -} - -func (r *DummyRender) SetResponseWriter(http.ResponseWriter) { - renderNotRegistered() -} - -func (r *DummyRender) JSON(int, interface{}) { - renderNotRegistered() -} - -func (r *DummyRender) JSONString(interface{}) (string, error) { - renderNotRegistered() - return "", nil -} - -func (r *DummyRender) RawData(int, []byte) { - renderNotRegistered() -} - -func (r *DummyRender) PlainText(int, []byte) { - renderNotRegistered() -} - -func (r *DummyRender) HTML(int, string, interface{}, ...HTMLOptions) { - renderNotRegistered() -} - -func (r *DummyRender) HTMLSet(int, string, string, interface{}, ...HTMLOptions) { - renderNotRegistered() -} - -func (r *DummyRender) HTMLSetString(string, string, interface{}, ...HTMLOptions) (string, error) { - renderNotRegistered() - return "", nil -} - -func (r *DummyRender) HTMLString(string, interface{}, ...HTMLOptions) (string, error) { - renderNotRegistered() - return "", nil -} - -func (r *DummyRender) HTMLSetBytes(string, string, interface{}, ...HTMLOptions) ([]byte, error) { - renderNotRegistered() - return nil, nil -} - -func (r *DummyRender) HTMLBytes(string, interface{}, ...HTMLOptions) ([]byte, error) { - renderNotRegistered() - return nil, nil -} - -func (r *DummyRender) XML(int, interface{}) { - renderNotRegistered() -} - -func (r *DummyRender) Error(int, ...string) { - renderNotRegistered() -} - -func (r *DummyRender) Status(int) { - renderNotRegistered() -} - -func (r *DummyRender) SetTemplatePath(string, string) { - renderNotRegistered() -} - -func (r *DummyRender) HasTemplateSet(string) bool { - renderNotRegistered() - return false -} diff --git a/vendor/gopkg.in/macaron.v1/response_writer.go b/vendor/gopkg.in/macaron.v1/response_writer.go deleted file mode 100644 index 9133948f9..000000000 --- a/vendor/gopkg.in/macaron.v1/response_writer.go +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2013 Martini Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package macaron - -import ( - "bufio" - "fmt" - "net" - "net/http" -) - -// ResponseWriter is a wrapper around http.ResponseWriter that provides extra information about -// the response. It is recommended that middleware handlers use this construct to wrap a responsewriter -// if the functionality calls for it. -type ResponseWriter interface { - http.ResponseWriter - http.Flusher - // Status returns the status code of the response or 0 if the response has not been written. - Status() int - // Written returns whether or not the ResponseWriter has been written. - Written() bool - // Size returns the size of the response body. - Size() int - // Before allows for a function to be called before the ResponseWriter has been written to. This is - // useful for setting headers or any other operations that must happen before a response has been written. - Before(BeforeFunc) -} - -// BeforeFunc is a function that is called before the ResponseWriter has been written to. -type BeforeFunc func(ResponseWriter) - -// NewResponseWriter creates a ResponseWriter that wraps an http.ResponseWriter -func NewResponseWriter(method string, rw http.ResponseWriter) ResponseWriter { - return &responseWriter{method, rw, 0, 0, nil} -} - -type responseWriter struct { - method string - http.ResponseWriter - status int - size int - beforeFuncs []BeforeFunc -} - -func (rw *responseWriter) WriteHeader(s int) { - rw.callBefore() - rw.ResponseWriter.WriteHeader(s) - rw.status = s -} - -func (rw *responseWriter) Write(b []byte) (size int, err error) { - if !rw.Written() { - // The status will be StatusOK if WriteHeader has not been called yet - rw.WriteHeader(http.StatusOK) - } - if rw.method != "HEAD" { - size, err = rw.ResponseWriter.Write(b) - rw.size += size - } - return size, err -} - -func (rw *responseWriter) Status() int { - return rw.status -} - -func (rw *responseWriter) Size() int { - return rw.size -} - -func (rw *responseWriter) Written() bool { - return rw.status != 0 -} - -func (rw *responseWriter) Before(before BeforeFunc) { - rw.beforeFuncs = append(rw.beforeFuncs, before) -} - -func (rw *responseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { - hijacker, ok := rw.ResponseWriter.(http.Hijacker) - if !ok { - return nil, nil, fmt.Errorf("the ResponseWriter doesn't support the Hijacker interface") - } - return hijacker.Hijack() -} - -func (rw *responseWriter) CloseNotify() <-chan bool { - return rw.ResponseWriter.(http.CloseNotifier).CloseNotify() -} - -func (rw *responseWriter) callBefore() { - for i := len(rw.beforeFuncs) - 1; i >= 0; i-- { - rw.beforeFuncs[i](rw) - } -} - -func (rw *responseWriter) Flush() { - flusher, ok := rw.ResponseWriter.(http.Flusher) - if ok { - flusher.Flush() - } -} diff --git a/vendor/gopkg.in/macaron.v1/return_handler.go b/vendor/gopkg.in/macaron.v1/return_handler.go deleted file mode 100644 index db6eec3e9..000000000 --- a/vendor/gopkg.in/macaron.v1/return_handler.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2013 Martini Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package macaron - -import ( - "net/http" - "reflect" - - "github.com/go-macaron/inject" -) - -// ReturnHandler is a service that Martini provides that is called -// when a route handler returns something. The ReturnHandler is -// responsible for writing to the ResponseWriter based on the values -// that are passed into this function. -type ReturnHandler func(*Context, []reflect.Value) - -func canDeref(val reflect.Value) bool { - return val.Kind() == reflect.Interface || val.Kind() == reflect.Ptr -} - -func isError(val reflect.Value) bool { - _, ok := val.Interface().(error) - return ok -} - -func isByteSlice(val reflect.Value) bool { - return val.Kind() == reflect.Slice && val.Type().Elem().Kind() == reflect.Uint8 -} - -func defaultReturnHandler() ReturnHandler { - return func(ctx *Context, vals []reflect.Value) { - rv := ctx.GetVal(inject.InterfaceOf((*http.ResponseWriter)(nil))) - resp := rv.Interface().(http.ResponseWriter) - var respVal reflect.Value - if len(vals) > 1 && vals[0].Kind() == reflect.Int { - resp.WriteHeader(int(vals[0].Int())) - respVal = vals[1] - } else if len(vals) > 0 { - respVal = vals[0] - - if isError(respVal) { - err := respVal.Interface().(error) - if err != nil { - ctx.internalServerError(ctx, err) - } - return - } else if canDeref(respVal) { - if respVal.IsNil() { - return // Ignore nil error - } - } - } - if canDeref(respVal) { - respVal = respVal.Elem() - } - if isByteSlice(respVal) { - resp.Write(respVal.Bytes()) - } else { - resp.Write([]byte(respVal.String())) - } - } -} diff --git a/vendor/gopkg.in/macaron.v1/router.go b/vendor/gopkg.in/macaron.v1/router.go deleted file mode 100644 index df593d669..000000000 --- a/vendor/gopkg.in/macaron.v1/router.go +++ /dev/null @@ -1,380 +0,0 @@ -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package macaron - -import ( - "net/http" - "strings" - "sync" -) - -var ( - // Known HTTP methods. - _HTTP_METHODS = map[string]bool{ - "GET": true, - "POST": true, - "PUT": true, - "DELETE": true, - "PATCH": true, - "OPTIONS": true, - "HEAD": true, - } -) - -// routeMap represents a thread-safe map for route tree. -type routeMap struct { - lock sync.RWMutex - routes map[string]map[string]*Leaf -} - -// NewRouteMap initializes and returns a new routeMap. -func NewRouteMap() *routeMap { - rm := &routeMap{ - routes: make(map[string]map[string]*Leaf), - } - for m := range _HTTP_METHODS { - rm.routes[m] = make(map[string]*Leaf) - } - return rm -} - -// getLeaf returns Leaf object if a route has been registered. -func (rm *routeMap) getLeaf(method, pattern string) *Leaf { - rm.lock.RLock() - defer rm.lock.RUnlock() - - return rm.routes[method][pattern] -} - -// add adds new route to route tree map. -func (rm *routeMap) add(method, pattern string, leaf *Leaf) { - rm.lock.Lock() - defer rm.lock.Unlock() - - rm.routes[method][pattern] = leaf -} - -type group struct { - pattern string - handlers []Handler -} - -// Router represents a Macaron router layer. -type Router struct { - m *Macaron - autoHead bool - routers map[string]*Tree - *routeMap - namedRoutes map[string]*Leaf - - groups []group - notFound http.HandlerFunc - internalServerError func(*Context, error) - - // handlerWrapper is used to wrap arbitrary function from Handler to inject.FastInvoker. - handlerWrapper func(Handler) Handler -} - -func NewRouter() *Router { - return &Router{ - routers: make(map[string]*Tree), - routeMap: NewRouteMap(), - namedRoutes: make(map[string]*Leaf), - } -} - -// SetAutoHead sets the value who determines whether add HEAD method automatically -// when GET method is added. -func (r *Router) SetAutoHead(v bool) { - r.autoHead = v -} - -type Params map[string]string - -// Handle is a function that can be registered to a route to handle HTTP requests. -// Like http.HandlerFunc, but has a third parameter for the values of wildcards (variables). -type Handle func(http.ResponseWriter, *http.Request, Params) - -// Route represents a wrapper of leaf route and upper level router. -type Route struct { - router *Router - leaf *Leaf -} - -// Name sets name of route. -func (r *Route) Name(name string) { - if len(name) == 0 { - panic("route name cannot be empty") - } else if r.router.namedRoutes[name] != nil { - panic("route with given name already exists: " + name) - } - r.router.namedRoutes[name] = r.leaf -} - -// handle adds new route to the router tree. -func (r *Router) handle(method, pattern string, handle Handle) *Route { - method = strings.ToUpper(method) - - var leaf *Leaf - // Prevent duplicate routes. - if leaf = r.getLeaf(method, pattern); leaf != nil { - return &Route{r, leaf} - } - - // Validate HTTP methods. - if !_HTTP_METHODS[method] && method != "*" { - panic("unknown HTTP method: " + method) - } - - // Generate methods need register. - methods := make(map[string]bool) - if method == "*" { - for m := range _HTTP_METHODS { - methods[m] = true - } - } else { - methods[method] = true - } - - // Add to router tree. - for m := range methods { - if t, ok := r.routers[m]; ok { - leaf = t.Add(pattern, handle) - } else { - t := NewTree() - leaf = t.Add(pattern, handle) - r.routers[m] = t - } - r.add(m, pattern, leaf) - } - return &Route{r, leaf} -} - -// Handle registers a new request handle with the given pattern, method and handlers. -func (r *Router) Handle(method string, pattern string, handlers []Handler) *Route { - if len(r.groups) > 0 { - groupPattern := "" - h := make([]Handler, 0) - for _, g := range r.groups { - groupPattern += g.pattern - h = append(h, g.handlers...) - } - - pattern = groupPattern + pattern - h = append(h, handlers...) - handlers = h - } - handlers = validateAndWrapHandlers(handlers, r.handlerWrapper) - - return r.handle(method, pattern, func(resp http.ResponseWriter, req *http.Request, params Params) { - c := r.m.createContext(resp, req) - c.params = params - c.handlers = make([]Handler, 0, len(r.m.handlers)+len(handlers)) - c.handlers = append(c.handlers, r.m.handlers...) - c.handlers = append(c.handlers, handlers...) - c.run() - }) -} - -func (r *Router) Group(pattern string, fn func(), h ...Handler) { - r.groups = append(r.groups, group{pattern, h}) - fn() - r.groups = r.groups[:len(r.groups)-1] -} - -// Get is a shortcut for r.Handle("GET", pattern, handlers) -func (r *Router) Get(pattern string, h ...Handler) (leaf *Route) { - leaf = r.Handle("GET", pattern, h) - if r.autoHead { - r.Head(pattern, h...) - } - return leaf -} - -// Patch is a shortcut for r.Handle("PATCH", pattern, handlers) -func (r *Router) Patch(pattern string, h ...Handler) *Route { - return r.Handle("PATCH", pattern, h) -} - -// Post is a shortcut for r.Handle("POST", pattern, handlers) -func (r *Router) Post(pattern string, h ...Handler) *Route { - return r.Handle("POST", pattern, h) -} - -// Put is a shortcut for r.Handle("PUT", pattern, handlers) -func (r *Router) Put(pattern string, h ...Handler) *Route { - return r.Handle("PUT", pattern, h) -} - -// Delete is a shortcut for r.Handle("DELETE", pattern, handlers) -func (r *Router) Delete(pattern string, h ...Handler) *Route { - return r.Handle("DELETE", pattern, h) -} - -// Options is a shortcut for r.Handle("OPTIONS", pattern, handlers) -func (r *Router) Options(pattern string, h ...Handler) *Route { - return r.Handle("OPTIONS", pattern, h) -} - -// Head is a shortcut for r.Handle("HEAD", pattern, handlers) -func (r *Router) Head(pattern string, h ...Handler) *Route { - return r.Handle("HEAD", pattern, h) -} - -// Any is a shortcut for r.Handle("*", pattern, handlers) -func (r *Router) Any(pattern string, h ...Handler) *Route { - return r.Handle("*", pattern, h) -} - -// Route is a shortcut for same handlers but different HTTP methods. -// -// Example: -// m.Route("/", "GET,POST", h) -func (r *Router) Route(pattern, methods string, h ...Handler) (route *Route) { - for _, m := range strings.Split(methods, ",") { - route = r.Handle(strings.TrimSpace(m), pattern, h) - } - return route -} - -// Combo returns a combo router. -func (r *Router) Combo(pattern string, h ...Handler) *ComboRouter { - return &ComboRouter{r, pattern, h, map[string]bool{}, nil} -} - -// NotFound configurates http.HandlerFunc which is called when no matching route is -// found. If it is not set, http.NotFound is used. -// Be sure to set 404 response code in your handler. -func (r *Router) NotFound(handlers ...Handler) { - handlers = validateAndWrapHandlers(handlers) - r.notFound = func(rw http.ResponseWriter, req *http.Request) { - c := r.m.createContext(rw, req) - c.handlers = make([]Handler, 0, len(r.m.handlers)+len(handlers)) - c.handlers = append(c.handlers, r.m.handlers...) - c.handlers = append(c.handlers, handlers...) - c.run() - } -} - -// InternalServerError configurates handler which is called when route handler returns -// error. If it is not set, default handler is used. -// Be sure to set 500 response code in your handler. -func (r *Router) InternalServerError(handlers ...Handler) { - handlers = validateAndWrapHandlers(handlers) - r.internalServerError = func(c *Context, err error) { - c.index = 0 - c.handlers = handlers - c.Map(err) - c.run() - } -} - -// SetHandlerWrapper sets handlerWrapper for the router. -func (r *Router) SetHandlerWrapper(f func(Handler) Handler) { - r.handlerWrapper = f -} - -func (r *Router) ServeHTTP(rw http.ResponseWriter, req *http.Request) { - if t, ok := r.routers[req.Method]; ok { - // Fast match for static routes - leaf := r.getLeaf(req.Method, req.URL.Path) - if leaf != nil { - leaf.handle(rw, req, nil) - return - } - - h, p, ok := t.Match(req.URL.EscapedPath()) - if ok { - if splat, ok := p["*0"]; ok { - p["*"] = splat // Easy name. - } - h(rw, req, p) - return - } - } - - r.notFound(rw, req) -} - -// URLFor builds path part of URL by given pair values. -func (r *Router) URLFor(name string, pairs ...string) string { - leaf, ok := r.namedRoutes[name] - if !ok { - panic("route with given name does not exists: " + name) - } - return leaf.URLPath(pairs...) -} - -// ComboRouter represents a combo router. -type ComboRouter struct { - router *Router - pattern string - handlers []Handler - methods map[string]bool // Registered methods. - - lastRoute *Route -} - -func (cr *ComboRouter) checkMethod(name string) { - if cr.methods[name] { - panic("method '" + name + "' has already been registered") - } - cr.methods[name] = true -} - -func (cr *ComboRouter) route(fn func(string, ...Handler) *Route, method string, h ...Handler) *ComboRouter { - cr.checkMethod(method) - cr.lastRoute = fn(cr.pattern, append(cr.handlers, h...)...) - return cr -} - -func (cr *ComboRouter) Get(h ...Handler) *ComboRouter { - if cr.router.autoHead { - cr.Head(h...) - } - return cr.route(cr.router.Get, "GET", h...) -} - -func (cr *ComboRouter) Patch(h ...Handler) *ComboRouter { - return cr.route(cr.router.Patch, "PATCH", h...) -} - -func (cr *ComboRouter) Post(h ...Handler) *ComboRouter { - return cr.route(cr.router.Post, "POST", h...) -} - -func (cr *ComboRouter) Put(h ...Handler) *ComboRouter { - return cr.route(cr.router.Put, "PUT", h...) -} - -func (cr *ComboRouter) Delete(h ...Handler) *ComboRouter { - return cr.route(cr.router.Delete, "DELETE", h...) -} - -func (cr *ComboRouter) Options(h ...Handler) *ComboRouter { - return cr.route(cr.router.Options, "OPTIONS", h...) -} - -func (cr *ComboRouter) Head(h ...Handler) *ComboRouter { - return cr.route(cr.router.Head, "HEAD", h...) -} - -// Name sets name of ComboRouter route. -func (cr *ComboRouter) Name(name string) { - if cr.lastRoute == nil { - panic("no corresponding route to be named") - } - cr.lastRoute.Name(name) -} diff --git a/vendor/gopkg.in/macaron.v1/static.go b/vendor/gopkg.in/macaron.v1/static.go deleted file mode 100644 index 60c521110..000000000 --- a/vendor/gopkg.in/macaron.v1/static.go +++ /dev/null @@ -1,220 +0,0 @@ -// Copyright 2013 Martini Authors -// Copyright 2014 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package macaron - -import ( - "encoding/base64" - "log" - "net/http" - "path" - "path/filepath" - "strings" - "sync" -) - -// StaticOptions is a struct for specifying configuration options for the macaron.Static middleware. -type StaticOptions struct { - // Prefix is the optional prefix used to serve the static directory content - Prefix string - // SkipLogging will disable [Static] log messages when a static file is served. - SkipLogging bool - // IndexFile defines which file to serve as index if it exists. - IndexFile string - // Expires defines which user-defined function to use for producing a HTTP Expires Header - // https://developers.google.com/speed/docs/insights/LeverageBrowserCaching - Expires func() string - // ETag defines if we should add an ETag header - // https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching#validating-cached-responses-with-etags - ETag bool - // FileSystem is the interface for supporting any implmentation of file system. - FileSystem http.FileSystem -} - -// FIXME: to be deleted. -type staticMap struct { - lock sync.RWMutex - data map[string]*http.Dir -} - -func (sm *staticMap) Set(dir *http.Dir) { - sm.lock.Lock() - defer sm.lock.Unlock() - - sm.data[string(*dir)] = dir -} - -func (sm *staticMap) Get(name string) *http.Dir { - sm.lock.RLock() - defer sm.lock.RUnlock() - - return sm.data[name] -} - -func (sm *staticMap) Delete(name string) { - sm.lock.Lock() - defer sm.lock.Unlock() - - delete(sm.data, name) -} - -var statics = staticMap{sync.RWMutex{}, map[string]*http.Dir{}} - -// staticFileSystem implements http.FileSystem interface. -type staticFileSystem struct { - dir *http.Dir -} - -func newStaticFileSystem(directory string) staticFileSystem { - if !filepath.IsAbs(directory) { - directory = filepath.Join(Root, directory) - } - dir := http.Dir(directory) - statics.Set(&dir) - return staticFileSystem{&dir} -} - -func (fs staticFileSystem) Open(name string) (http.File, error) { - return fs.dir.Open(name) -} - -func prepareStaticOption(dir string, opt StaticOptions) StaticOptions { - // Defaults - if len(opt.IndexFile) == 0 { - opt.IndexFile = "index.html" - } - // Normalize the prefix if provided - if opt.Prefix != "" { - // Ensure we have a leading '/' - if opt.Prefix[0] != '/' { - opt.Prefix = "/" + opt.Prefix - } - // Remove any trailing '/' - opt.Prefix = strings.TrimRight(opt.Prefix, "/") - } - if opt.FileSystem == nil { - opt.FileSystem = newStaticFileSystem(dir) - } - return opt -} - -func prepareStaticOptions(dir string, options []StaticOptions) StaticOptions { - var opt StaticOptions - if len(options) > 0 { - opt = options[0] - } - return prepareStaticOption(dir, opt) -} - -func staticHandler(ctx *Context, log *log.Logger, opt StaticOptions) bool { - if ctx.Req.Method != "GET" && ctx.Req.Method != "HEAD" { - return false - } - - file := ctx.Req.URL.Path - // if we have a prefix, filter requests by stripping the prefix - if opt.Prefix != "" { - if !strings.HasPrefix(file, opt.Prefix) { - return false - } - file = file[len(opt.Prefix):] - if file != "" && file[0] != '/' { - return false - } - } - - f, err := opt.FileSystem.Open(file) - if err != nil { - return false - } - defer f.Close() - - fi, err := f.Stat() - if err != nil { - return true // File exists but fail to open. - } - - // Try to serve index file - if fi.IsDir() { - // Redirect if missing trailing slash. - if !strings.HasSuffix(ctx.Req.URL.Path, "/") { - http.Redirect(ctx.Resp, ctx.Req.Request, ctx.Req.URL.Path+"/", http.StatusFound) - return true - } - - file = path.Join(file, opt.IndexFile) - f, err = opt.FileSystem.Open(file) - if err != nil { - return false // Discard error. - } - defer f.Close() - - fi, err = f.Stat() - if err != nil || fi.IsDir() { - return true - } - } - - if !opt.SkipLogging { - log.Println("[Static] Serving " + file) - } - - // Add an Expires header to the static content - if opt.Expires != nil { - ctx.Resp.Header().Set("Expires", opt.Expires()) - } - - if opt.ETag { - tag := GenerateETag(string(fi.Size()), fi.Name(), fi.ModTime().UTC().Format(http.TimeFormat)) - ctx.Resp.Header().Set("ETag", tag) - } - - http.ServeContent(ctx.Resp, ctx.Req.Request, file, fi.ModTime(), f) - return true -} - -// GenerateETag generates an ETag based on size, filename and file modification time -func GenerateETag(fileSize, fileName, modTime string) string { - etag := fileSize + fileName + modTime - return base64.StdEncoding.EncodeToString([]byte(etag)) -} - -// Static returns a middleware handler that serves static files in the given directory. -func Static(directory string, staticOpt ...StaticOptions) Handler { - opt := prepareStaticOptions(directory, staticOpt) - - return func(ctx *Context, log *log.Logger) { - staticHandler(ctx, log, opt) - } -} - -// Statics registers multiple static middleware handlers all at once. -func Statics(opt StaticOptions, dirs ...string) Handler { - if len(dirs) == 0 { - panic("no static directory is given") - } - opts := make([]StaticOptions, len(dirs)) - for i := range dirs { - opts[i] = prepareStaticOption(dirs[i], opt) - } - - return func(ctx *Context, log *log.Logger) { - for i := range opts { - if staticHandler(ctx, log, opts[i]) { - return - } - } - } -} diff --git a/vendor/gopkg.in/macaron.v1/tree.go b/vendor/gopkg.in/macaron.v1/tree.go deleted file mode 100644 index c351b9452..000000000 --- a/vendor/gopkg.in/macaron.v1/tree.go +++ /dev/null @@ -1,390 +0,0 @@ -// Copyright 2015 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package macaron - -import ( - "regexp" - "strings" - - "github.com/Unknwon/com" -) - -type patternType int8 - -const ( - _PATTERN_STATIC patternType = iota // /home - _PATTERN_REGEXP // /:id([0-9]+) - _PATTERN_PATH_EXT // /*.* - _PATTERN_HOLDER // /:user - _PATTERN_MATCH_ALL // /* -) - -// Leaf represents a leaf route information. -type Leaf struct { - parent *Tree - - typ patternType - pattern string - rawPattern string // Contains wildcard instead of regexp - wildcards []string - reg *regexp.Regexp - optional bool - - handle Handle -} - -var wildcardPattern = regexp.MustCompile(`:[a-zA-Z0-9]+`) - -func isSpecialRegexp(pattern, regStr string, pos []int) bool { - return len(pattern) >= pos[1]+len(regStr) && pattern[pos[1]:pos[1]+len(regStr)] == regStr -} - -// getNextWildcard tries to find next wildcard and update pattern with corresponding regexp. -func getNextWildcard(pattern string) (wildcard, _ string) { - pos := wildcardPattern.FindStringIndex(pattern) - if pos == nil { - return "", pattern - } - wildcard = pattern[pos[0]:pos[1]] - - // Reach last character or no regexp is given. - if len(pattern) == pos[1] { - return wildcard, strings.Replace(pattern, wildcard, `(.+)`, 1) - } else if pattern[pos[1]] != '(' { - switch { - case isSpecialRegexp(pattern, ":int", pos): - pattern = strings.Replace(pattern, ":int", "([0-9]+)", 1) - case isSpecialRegexp(pattern, ":string", pos): - pattern = strings.Replace(pattern, ":string", "([\\w]+)", 1) - default: - return wildcard, strings.Replace(pattern, wildcard, `(.+)`, 1) - } - } - - // Cut out placeholder directly. - return wildcard, pattern[:pos[0]] + pattern[pos[1]:] -} - -func getWildcards(pattern string) (string, []string) { - wildcards := make([]string, 0, 2) - - // Keep getting next wildcard until nothing is left. - var wildcard string - for { - wildcard, pattern = getNextWildcard(pattern) - if len(wildcard) > 0 { - wildcards = append(wildcards, wildcard) - } else { - break - } - } - - return pattern, wildcards -} - -// getRawPattern removes all regexp but keeps wildcards for building URL path. -func getRawPattern(rawPattern string) string { - rawPattern = strings.Replace(rawPattern, ":int", "", -1) - rawPattern = strings.Replace(rawPattern, ":string", "", -1) - - for { - startIdx := strings.Index(rawPattern, "(") - if startIdx == -1 { - break - } - - closeIdx := strings.Index(rawPattern, ")") - if closeIdx > -1 { - rawPattern = rawPattern[:startIdx] + rawPattern[closeIdx+1:] - } - } - return rawPattern -} - -func checkPattern(pattern string) (typ patternType, rawPattern string, wildcards []string, reg *regexp.Regexp) { - pattern = strings.TrimLeft(pattern, "?") - rawPattern = getRawPattern(pattern) - - if pattern == "*" { - typ = _PATTERN_MATCH_ALL - } else if pattern == "*.*" { - typ = _PATTERN_PATH_EXT - } else if strings.Contains(pattern, ":") { - typ = _PATTERN_REGEXP - pattern, wildcards = getWildcards(pattern) - if pattern == "(.+)" { - typ = _PATTERN_HOLDER - } else { - reg = regexp.MustCompile(pattern) - } - } - return typ, rawPattern, wildcards, reg -} - -func NewLeaf(parent *Tree, pattern string, handle Handle) *Leaf { - typ, rawPattern, wildcards, reg := checkPattern(pattern) - optional := false - if len(pattern) > 0 && pattern[0] == '?' { - optional = true - } - return &Leaf{parent, typ, pattern, rawPattern, wildcards, reg, optional, handle} -} - -// URLPath build path part of URL by given pair values. -func (l *Leaf) URLPath(pairs ...string) string { - if len(pairs)%2 != 0 { - panic("number of pairs does not match") - } - - urlPath := l.rawPattern - parent := l.parent - for parent != nil { - urlPath = parent.rawPattern + "/" + urlPath - parent = parent.parent - } - for i := 0; i < len(pairs); i += 2 { - if len(pairs[i]) == 0 { - panic("pair value cannot be empty: " + com.ToStr(i)) - } else if pairs[i][0] != ':' && pairs[i] != "*" && pairs[i] != "*.*" { - pairs[i] = ":" + pairs[i] - } - urlPath = strings.Replace(urlPath, pairs[i], pairs[i+1], 1) - } - return urlPath -} - -// Tree represents a router tree in Macaron. -type Tree struct { - parent *Tree - - typ patternType - pattern string - rawPattern string - wildcards []string - reg *regexp.Regexp - - subtrees []*Tree - leaves []*Leaf -} - -func NewSubtree(parent *Tree, pattern string) *Tree { - typ, rawPattern, wildcards, reg := checkPattern(pattern) - return &Tree{parent, typ, pattern, rawPattern, wildcards, reg, make([]*Tree, 0, 5), make([]*Leaf, 0, 5)} -} - -func NewTree() *Tree { - return NewSubtree(nil, "") -} - -func (t *Tree) addLeaf(pattern string, handle Handle) *Leaf { - for i := 0; i < len(t.leaves); i++ { - if t.leaves[i].pattern == pattern { - return t.leaves[i] - } - } - - leaf := NewLeaf(t, pattern, handle) - - // Add exact same leaf to grandparent/parent level without optional. - if leaf.optional { - parent := leaf.parent - if parent.parent != nil { - parent.parent.addLeaf(parent.pattern, handle) - } else { - parent.addLeaf("", handle) // Root tree can add as empty pattern. - } - } - - i := 0 - for ; i < len(t.leaves); i++ { - if leaf.typ < t.leaves[i].typ { - break - } - } - - if i == len(t.leaves) { - t.leaves = append(t.leaves, leaf) - } else { - t.leaves = append(t.leaves[:i], append([]*Leaf{leaf}, t.leaves[i:]...)...) - } - return leaf -} - -func (t *Tree) addSubtree(segment, pattern string, handle Handle) *Leaf { - for i := 0; i < len(t.subtrees); i++ { - if t.subtrees[i].pattern == segment { - return t.subtrees[i].addNextSegment(pattern, handle) - } - } - - subtree := NewSubtree(t, segment) - i := 0 - for ; i < len(t.subtrees); i++ { - if subtree.typ < t.subtrees[i].typ { - break - } - } - - if i == len(t.subtrees) { - t.subtrees = append(t.subtrees, subtree) - } else { - t.subtrees = append(t.subtrees[:i], append([]*Tree{subtree}, t.subtrees[i:]...)...) - } - return subtree.addNextSegment(pattern, handle) -} - -func (t *Tree) addNextSegment(pattern string, handle Handle) *Leaf { - pattern = strings.TrimPrefix(pattern, "/") - - i := strings.Index(pattern, "/") - if i == -1 { - return t.addLeaf(pattern, handle) - } - return t.addSubtree(pattern[:i], pattern[i+1:], handle) -} - -func (t *Tree) Add(pattern string, handle Handle) *Leaf { - pattern = strings.TrimSuffix(pattern, "/") - return t.addNextSegment(pattern, handle) -} - -func (t *Tree) matchLeaf(globLevel int, url string, params Params) (Handle, bool) { - url, err := PathUnescape(url) - if err != nil { - return nil, false - } - for i := 0; i < len(t.leaves); i++ { - switch t.leaves[i].typ { - case _PATTERN_STATIC: - if t.leaves[i].pattern == url { - return t.leaves[i].handle, true - } - case _PATTERN_REGEXP: - results := t.leaves[i].reg.FindStringSubmatch(url) - // Number of results and wildcasrd should be exact same. - if len(results)-1 != len(t.leaves[i].wildcards) { - break - } - - for j := 0; j < len(t.leaves[i].wildcards); j++ { - params[t.leaves[i].wildcards[j]] = results[j+1] - } - return t.leaves[i].handle, true - case _PATTERN_PATH_EXT: - j := strings.LastIndex(url, ".") - if j > -1 { - params[":path"] = url[:j] - params[":ext"] = url[j+1:] - } else { - params[":path"] = url - } - return t.leaves[i].handle, true - case _PATTERN_HOLDER: - params[t.leaves[i].wildcards[0]] = url - return t.leaves[i].handle, true - case _PATTERN_MATCH_ALL: - params["*"] = url - params["*"+com.ToStr(globLevel)] = url - return t.leaves[i].handle, true - } - } - return nil, false -} - -func (t *Tree) matchSubtree(globLevel int, segment, url string, params Params) (Handle, bool) { - unescapedSegment, err := PathUnescape(segment) - if err != nil { - return nil, false - } - for i := 0; i < len(t.subtrees); i++ { - switch t.subtrees[i].typ { - case _PATTERN_STATIC: - if t.subtrees[i].pattern == unescapedSegment { - if handle, ok := t.subtrees[i].matchNextSegment(globLevel, url, params); ok { - return handle, true - } - } - case _PATTERN_REGEXP: - results := t.subtrees[i].reg.FindStringSubmatch(unescapedSegment) - if len(results)-1 != len(t.subtrees[i].wildcards) { - break - } - - for j := 0; j < len(t.subtrees[i].wildcards); j++ { - params[t.subtrees[i].wildcards[j]] = results[j+1] - } - if handle, ok := t.subtrees[i].matchNextSegment(globLevel, url, params); ok { - return handle, true - } - case _PATTERN_HOLDER: - if handle, ok := t.subtrees[i].matchNextSegment(globLevel+1, url, params); ok { - params[t.subtrees[i].wildcards[0]] = unescapedSegment - return handle, true - } - case _PATTERN_MATCH_ALL: - if handle, ok := t.subtrees[i].matchNextSegment(globLevel+1, url, params); ok { - params["*"+com.ToStr(globLevel)] = unescapedSegment - return handle, true - } - } - } - - if len(t.leaves) > 0 { - leaf := t.leaves[len(t.leaves)-1] - unescapedURL, err := PathUnescape(segment + "/" + url) - if err != nil { - return nil, false - } - if leaf.typ == _PATTERN_PATH_EXT { - j := strings.LastIndex(unescapedURL, ".") - if j > -1 { - params[":path"] = unescapedURL[:j] - params[":ext"] = unescapedURL[j+1:] - } else { - params[":path"] = unescapedURL - } - return leaf.handle, true - } else if leaf.typ == _PATTERN_MATCH_ALL { - params["*"] = unescapedURL - params["*"+com.ToStr(globLevel)] = unescapedURL - return leaf.handle, true - } - } - return nil, false -} - -func (t *Tree) matchNextSegment(globLevel int, url string, params Params) (Handle, bool) { - i := strings.Index(url, "/") - if i == -1 { - return t.matchLeaf(globLevel, url, params) - } - return t.matchSubtree(globLevel, url[:i], url[i+1:], params) -} - -func (t *Tree) Match(url string) (Handle, Params, bool) { - url = strings.TrimPrefix(url, "/") - url = strings.TrimSuffix(url, "/") - params := make(Params) - handle, ok := t.matchNextSegment(0, url, params) - return handle, params, ok -} - -// MatchTest returns true if given URL is matched by given pattern. -func MatchTest(pattern, url string) bool { - t := NewTree() - t.Add(pattern, nil) - _, _, ok := t.Match(url) - return ok -} diff --git a/vendor/gopkg.in/macaron.v1/util_go17.go b/vendor/gopkg.in/macaron.v1/util_go17.go deleted file mode 100644 index a80c696c7..000000000 --- a/vendor/gopkg.in/macaron.v1/util_go17.go +++ /dev/null @@ -1,25 +0,0 @@ -// +build !go1.8 - -// Copyright 2017 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package macaron - -import "net/url" - -// PathUnescape unescapes a path. Ideally, this function would use -// url.PathUnescape(..), but the function was not introduced until go1.8. -func PathUnescape(s string) (string, error) { - return url.QueryUnescape(s) -} diff --git a/vendor/gopkg.in/macaron.v1/util_go18.go b/vendor/gopkg.in/macaron.v1/util_go18.go deleted file mode 100644 index d5eb1dfb2..000000000 --- a/vendor/gopkg.in/macaron.v1/util_go18.go +++ /dev/null @@ -1,24 +0,0 @@ -// +build go1.8 - -// Copyright 2017 The Macaron Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"): you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. - -package macaron - -import "net/url" - -// PathUnescape unescapes a path. -func PathUnescape(s string) (string, error) { - return url.PathUnescape(s) -} diff --git a/vendor/gopkg.in/redis.v2/LICENSE b/vendor/gopkg.in/redis.v2/LICENSE deleted file mode 100644 index 6855a95fe..000000000 --- a/vendor/gopkg.in/redis.v2/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2012 The Redis Go Client 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/gopkg.in/redis.v2/Makefile b/vendor/gopkg.in/redis.v2/Makefile deleted file mode 100644 index b250d9bfa..000000000 --- a/vendor/gopkg.in/redis.v2/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -all: - go test gopkg.in/redis.v2 -cpu=1,2,4 - go test gopkg.in/redis.v2 -short -race diff --git a/vendor/gopkg.in/redis.v2/README.md b/vendor/gopkg.in/redis.v2/README.md deleted file mode 100644 index ddf875f9a..000000000 --- a/vendor/gopkg.in/redis.v2/README.md +++ /dev/null @@ -1,46 +0,0 @@ -Redis client for Golang [![Build Status](https://travis-ci.org/go-redis/redis.png?branch=master)](https://travis-ci.org/go-redis/redis) -======================= - -Supports: - -- Redis 2.8 commands except QUIT, MONITOR, SLOWLOG and SYNC. -- Pub/sub. -- Transactions. -- Pipelining. -- Connection pool. -- TLS connections. -- Thread safety. -- Timeouts. -- Redis Sentinel. - -API docs: http://godoc.org/gopkg.in/redis.v2. -Examples: http://godoc.org/gopkg.in/redis.v2#pkg-examples. - -Installation ------------- - -Install: - - go get gopkg.in/redis.v2 - -Look and feel -------------- - -Some corner cases: - - SORT list LIMIT 0 2 ASC - vals, err := client.Sort("list", redis.Sort{Offset: 0, Count: 2, Order: "ASC"}).Result() - - ZRANGEBYSCORE zset -inf +inf WITHSCORES LIMIT 0 2 - vals, err := client.ZRangeByScoreWithScores("zset", redis.ZRangeByScore{ - Min: "-inf", - Max: "+inf", - Offset: 0, - Count: 2, - }).Result() - - ZINTERSTORE out 2 zset1 zset2 WEIGHTS 2 3 AGGREGATE SUM - vals, err := client.ZInterStore("out", redis.ZStore{Weights: []int64{2, 3}}, "zset1", "zset2").Result() - - EVAL "return {KEYS[1],ARGV[1]}" 1 "key" "hello" - vals, err := client.Eval("return {KEYS[1],ARGV[1]}", []string{"key"}, []string{"hello"}).Result() diff --git a/vendor/gopkg.in/redis.v2/command.go b/vendor/gopkg.in/redis.v2/command.go deleted file mode 100644 index d7c76cf92..000000000 --- a/vendor/gopkg.in/redis.v2/command.go +++ /dev/null @@ -1,597 +0,0 @@ -package redis - -import ( - "fmt" - "strconv" - "strings" - "time" - - "gopkg.in/bufio.v1" -) - -var ( - _ Cmder = (*Cmd)(nil) - _ Cmder = (*SliceCmd)(nil) - _ Cmder = (*StatusCmd)(nil) - _ Cmder = (*IntCmd)(nil) - _ Cmder = (*DurationCmd)(nil) - _ Cmder = (*BoolCmd)(nil) - _ Cmder = (*StringCmd)(nil) - _ Cmder = (*FloatCmd)(nil) - _ Cmder = (*StringSliceCmd)(nil) - _ Cmder = (*BoolSliceCmd)(nil) - _ Cmder = (*StringStringMapCmd)(nil) - _ Cmder = (*ZSliceCmd)(nil) - _ Cmder = (*ScanCmd)(nil) -) - -type Cmder interface { - args() []string - parseReply(*bufio.Reader) error - setErr(error) - - writeTimeout() *time.Duration - readTimeout() *time.Duration - - Err() error - String() string -} - -func setCmdsErr(cmds []Cmder, e error) { - for _, cmd := range cmds { - cmd.setErr(e) - } -} - -func cmdString(cmd Cmder, val interface{}) string { - s := strings.Join(cmd.args(), " ") - if err := cmd.Err(); err != nil { - return s + ": " + err.Error() - } - if val != nil { - return s + ": " + fmt.Sprint(val) - } - return s - -} - -//------------------------------------------------------------------------------ - -type baseCmd struct { - _args []string - - err error - - _writeTimeout, _readTimeout *time.Duration -} - -func newBaseCmd(args ...string) *baseCmd { - return &baseCmd{ - _args: args, - } -} - -func (cmd *baseCmd) Err() error { - if cmd.err != nil { - return cmd.err - } - return nil -} - -func (cmd *baseCmd) args() []string { - return cmd._args -} - -func (cmd *baseCmd) readTimeout() *time.Duration { - return cmd._readTimeout -} - -func (cmd *baseCmd) setReadTimeout(d time.Duration) { - cmd._readTimeout = &d -} - -func (cmd *baseCmd) writeTimeout() *time.Duration { - return cmd._writeTimeout -} - -func (cmd *baseCmd) setWriteTimeout(d time.Duration) { - cmd._writeTimeout = &d -} - -func (cmd *baseCmd) setErr(e error) { - cmd.err = e -} - -//------------------------------------------------------------------------------ - -type Cmd struct { - *baseCmd - - val interface{} -} - -func NewCmd(args ...string) *Cmd { - return &Cmd{ - baseCmd: newBaseCmd(args...), - } -} - -func (cmd *Cmd) Val() interface{} { - return cmd.val -} - -func (cmd *Cmd) Result() (interface{}, error) { - return cmd.val, cmd.err -} - -func (cmd *Cmd) String() string { - return cmdString(cmd, cmd.val) -} - -func (cmd *Cmd) parseReply(rd *bufio.Reader) error { - cmd.val, cmd.err = parseReply(rd, parseSlice) - return cmd.err -} - -//------------------------------------------------------------------------------ - -type SliceCmd struct { - *baseCmd - - val []interface{} -} - -func NewSliceCmd(args ...string) *SliceCmd { - return &SliceCmd{ - baseCmd: newBaseCmd(args...), - } -} - -func (cmd *SliceCmd) Val() []interface{} { - return cmd.val -} - -func (cmd *SliceCmd) Result() ([]interface{}, error) { - return cmd.val, cmd.err -} - -func (cmd *SliceCmd) String() string { - return cmdString(cmd, cmd.val) -} - -func (cmd *SliceCmd) parseReply(rd *bufio.Reader) error { - v, err := parseReply(rd, parseSlice) - if err != nil { - cmd.err = err - return err - } - cmd.val = v.([]interface{}) - return nil -} - -//------------------------------------------------------------------------------ - -type StatusCmd struct { - *baseCmd - - val string -} - -func NewStatusCmd(args ...string) *StatusCmd { - return &StatusCmd{ - baseCmd: newBaseCmd(args...), - } -} - -func (cmd *StatusCmd) Val() string { - return cmd.val -} - -func (cmd *StatusCmd) Result() (string, error) { - return cmd.val, cmd.err -} - -func (cmd *StatusCmd) String() string { - return cmdString(cmd, cmd.val) -} - -func (cmd *StatusCmd) parseReply(rd *bufio.Reader) error { - v, err := parseReply(rd, nil) - if err != nil { - cmd.err = err - return err - } - cmd.val = v.(string) - return nil -} - -//------------------------------------------------------------------------------ - -type IntCmd struct { - *baseCmd - - val int64 -} - -func NewIntCmd(args ...string) *IntCmd { - return &IntCmd{ - baseCmd: newBaseCmd(args...), - } -} - -func (cmd *IntCmd) Val() int64 { - return cmd.val -} - -func (cmd *IntCmd) Result() (int64, error) { - return cmd.val, cmd.err -} - -func (cmd *IntCmd) String() string { - return cmdString(cmd, cmd.val) -} - -func (cmd *IntCmd) parseReply(rd *bufio.Reader) error { - v, err := parseReply(rd, nil) - if err != nil { - cmd.err = err - return err - } - cmd.val = v.(int64) - return nil -} - -//------------------------------------------------------------------------------ - -type DurationCmd struct { - *baseCmd - - val time.Duration - precision time.Duration -} - -func NewDurationCmd(precision time.Duration, args ...string) *DurationCmd { - return &DurationCmd{ - baseCmd: newBaseCmd(args...), - precision: precision, - } -} - -func (cmd *DurationCmd) Val() time.Duration { - return cmd.val -} - -func (cmd *DurationCmd) Result() (time.Duration, error) { - return cmd.val, cmd.err -} - -func (cmd *DurationCmd) String() string { - return cmdString(cmd, cmd.val) -} - -func (cmd *DurationCmd) parseReply(rd *bufio.Reader) error { - v, err := parseReply(rd, nil) - if err != nil { - cmd.err = err - return err - } - cmd.val = time.Duration(v.(int64)) * cmd.precision - return nil -} - -//------------------------------------------------------------------------------ - -type BoolCmd struct { - *baseCmd - - val bool -} - -func NewBoolCmd(args ...string) *BoolCmd { - return &BoolCmd{ - baseCmd: newBaseCmd(args...), - } -} - -func (cmd *BoolCmd) Val() bool { - return cmd.val -} - -func (cmd *BoolCmd) Result() (bool, error) { - return cmd.val, cmd.err -} - -func (cmd *BoolCmd) String() string { - return cmdString(cmd, cmd.val) -} - -func (cmd *BoolCmd) parseReply(rd *bufio.Reader) error { - v, err := parseReply(rd, nil) - if err != nil { - cmd.err = err - return err - } - cmd.val = v.(int64) == 1 - return nil -} - -//------------------------------------------------------------------------------ - -type StringCmd struct { - *baseCmd - - val string -} - -func NewStringCmd(args ...string) *StringCmd { - return &StringCmd{ - baseCmd: newBaseCmd(args...), - } -} - -func (cmd *StringCmd) Val() string { - return cmd.val -} - -func (cmd *StringCmd) Result() (string, error) { - return cmd.val, cmd.err -} - -func (cmd *StringCmd) Int64() (int64, error) { - if cmd.err != nil { - return 0, cmd.err - } - return strconv.ParseInt(cmd.val, 10, 64) -} - -func (cmd *StringCmd) Uint64() (uint64, error) { - if cmd.err != nil { - return 0, cmd.err - } - return strconv.ParseUint(cmd.val, 10, 64) -} - -func (cmd *StringCmd) Float64() (float64, error) { - if cmd.err != nil { - return 0, cmd.err - } - return strconv.ParseFloat(cmd.val, 64) -} - -func (cmd *StringCmd) String() string { - return cmdString(cmd, cmd.val) -} - -func (cmd *StringCmd) parseReply(rd *bufio.Reader) error { - v, err := parseReply(rd, nil) - if err != nil { - cmd.err = err - return err - } - cmd.val = v.(string) - return nil -} - -//------------------------------------------------------------------------------ - -type FloatCmd struct { - *baseCmd - - val float64 -} - -func NewFloatCmd(args ...string) *FloatCmd { - return &FloatCmd{ - baseCmd: newBaseCmd(args...), - } -} - -func (cmd *FloatCmd) Val() float64 { - return cmd.val -} - -func (cmd *FloatCmd) String() string { - return cmdString(cmd, cmd.val) -} - -func (cmd *FloatCmd) parseReply(rd *bufio.Reader) error { - v, err := parseReply(rd, nil) - if err != nil { - cmd.err = err - return err - } - cmd.val, cmd.err = strconv.ParseFloat(v.(string), 64) - return cmd.err -} - -//------------------------------------------------------------------------------ - -type StringSliceCmd struct { - *baseCmd - - val []string -} - -func NewStringSliceCmd(args ...string) *StringSliceCmd { - return &StringSliceCmd{ - baseCmd: newBaseCmd(args...), - } -} - -func (cmd *StringSliceCmd) Val() []string { - return cmd.val -} - -func (cmd *StringSliceCmd) Result() ([]string, error) { - return cmd.Val(), cmd.Err() -} - -func (cmd *StringSliceCmd) String() string { - return cmdString(cmd, cmd.val) -} - -func (cmd *StringSliceCmd) parseReply(rd *bufio.Reader) error { - v, err := parseReply(rd, parseStringSlice) - if err != nil { - cmd.err = err - return err - } - cmd.val = v.([]string) - return nil -} - -//------------------------------------------------------------------------------ - -type BoolSliceCmd struct { - *baseCmd - - val []bool -} - -func NewBoolSliceCmd(args ...string) *BoolSliceCmd { - return &BoolSliceCmd{ - baseCmd: newBaseCmd(args...), - } -} - -func (cmd *BoolSliceCmd) Val() []bool { - return cmd.val -} - -func (cmd *BoolSliceCmd) Result() ([]bool, error) { - return cmd.val, cmd.err -} - -func (cmd *BoolSliceCmd) String() string { - return cmdString(cmd, cmd.val) -} - -func (cmd *BoolSliceCmd) parseReply(rd *bufio.Reader) error { - v, err := parseReply(rd, parseBoolSlice) - if err != nil { - cmd.err = err - return err - } - cmd.val = v.([]bool) - return nil -} - -//------------------------------------------------------------------------------ - -type StringStringMapCmd struct { - *baseCmd - - val map[string]string -} - -func NewStringStringMapCmd(args ...string) *StringStringMapCmd { - return &StringStringMapCmd{ - baseCmd: newBaseCmd(args...), - } -} - -func (cmd *StringStringMapCmd) Val() map[string]string { - return cmd.val -} - -func (cmd *StringStringMapCmd) Result() (map[string]string, error) { - return cmd.val, cmd.err -} - -func (cmd *StringStringMapCmd) String() string { - return cmdString(cmd, cmd.val) -} - -func (cmd *StringStringMapCmd) parseReply(rd *bufio.Reader) error { - v, err := parseReply(rd, parseStringStringMap) - if err != nil { - cmd.err = err - return err - } - cmd.val = v.(map[string]string) - return nil -} - -//------------------------------------------------------------------------------ - -type ZSliceCmd struct { - *baseCmd - - val []Z -} - -func NewZSliceCmd(args ...string) *ZSliceCmd { - return &ZSliceCmd{ - baseCmd: newBaseCmd(args...), - } -} - -func (cmd *ZSliceCmd) Val() []Z { - return cmd.val -} - -func (cmd *ZSliceCmd) Result() ([]Z, error) { - return cmd.val, cmd.err -} - -func (cmd *ZSliceCmd) String() string { - return cmdString(cmd, cmd.val) -} - -func (cmd *ZSliceCmd) parseReply(rd *bufio.Reader) error { - v, err := parseReply(rd, parseZSlice) - if err != nil { - cmd.err = err - return err - } - cmd.val = v.([]Z) - return nil -} - -//------------------------------------------------------------------------------ - -type ScanCmd struct { - *baseCmd - - cursor int64 - keys []string -} - -func NewScanCmd(args ...string) *ScanCmd { - return &ScanCmd{ - baseCmd: newBaseCmd(args...), - } -} - -func (cmd *ScanCmd) Val() (int64, []string) { - return cmd.cursor, cmd.keys -} - -func (cmd *ScanCmd) Result() (int64, []string, error) { - return cmd.cursor, cmd.keys, cmd.err -} - -func (cmd *ScanCmd) String() string { - return cmdString(cmd, cmd.keys) -} - -func (cmd *ScanCmd) parseReply(rd *bufio.Reader) error { - vi, err := parseReply(rd, parseSlice) - if err != nil { - cmd.err = err - return cmd.err - } - v := vi.([]interface{}) - - cmd.cursor, cmd.err = strconv.ParseInt(v[0].(string), 10, 64) - if cmd.err != nil { - return cmd.err - } - - keys := v[1].([]interface{}) - for _, keyi := range keys { - cmd.keys = append(cmd.keys, keyi.(string)) - } - - return nil -} diff --git a/vendor/gopkg.in/redis.v2/commands.go b/vendor/gopkg.in/redis.v2/commands.go deleted file mode 100644 index 6068bab17..000000000 --- a/vendor/gopkg.in/redis.v2/commands.go +++ /dev/null @@ -1,1246 +0,0 @@ -package redis - -import ( - "io" - "strconv" - "time" -) - -func formatFloat(f float64) string { - return strconv.FormatFloat(f, 'f', -1, 64) -} - -func readTimeout(sec int64) time.Duration { - if sec == 0 { - return 0 - } - return time.Duration(sec+1) * time.Second -} - -//------------------------------------------------------------------------------ - -func (c *Client) Auth(password string) *StatusCmd { - cmd := NewStatusCmd("AUTH", password) - c.Process(cmd) - return cmd -} - -func (c *Client) Echo(message string) *StringCmd { - cmd := NewStringCmd("ECHO", message) - c.Process(cmd) - return cmd -} - -func (c *Client) Ping() *StatusCmd { - cmd := NewStatusCmd("PING") - c.Process(cmd) - return cmd -} - -func (c *Client) Quit() *StatusCmd { - panic("not implemented") -} - -func (c *Client) Select(index int64) *StatusCmd { - cmd := NewStatusCmd("SELECT", strconv.FormatInt(index, 10)) - c.Process(cmd) - return cmd -} - -//------------------------------------------------------------------------------ - -func (c *Client) Del(keys ...string) *IntCmd { - args := append([]string{"DEL"}, keys...) - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) Dump(key string) *StringCmd { - cmd := NewStringCmd("DUMP", key) - c.Process(cmd) - return cmd -} - -func (c *Client) Exists(key string) *BoolCmd { - cmd := NewBoolCmd("EXISTS", key) - c.Process(cmd) - return cmd -} - -func (c *Client) Expire(key string, dur time.Duration) *BoolCmd { - cmd := NewBoolCmd("EXPIRE", key, strconv.FormatInt(int64(dur/time.Second), 10)) - c.Process(cmd) - return cmd -} - -func (c *Client) ExpireAt(key string, tm time.Time) *BoolCmd { - cmd := NewBoolCmd("EXPIREAT", key, strconv.FormatInt(tm.Unix(), 10)) - c.Process(cmd) - return cmd -} - -func (c *Client) Keys(pattern string) *StringSliceCmd { - cmd := NewStringSliceCmd("KEYS", pattern) - c.Process(cmd) - return cmd -} - -func (c *Client) Migrate(host, port, key string, db, timeout int64) *StatusCmd { - cmd := NewStatusCmd( - "MIGRATE", - host, - port, - key, - strconv.FormatInt(db, 10), - strconv.FormatInt(timeout, 10), - ) - cmd.setReadTimeout(readTimeout(timeout)) - c.Process(cmd) - return cmd -} - -func (c *Client) Move(key string, db int64) *BoolCmd { - cmd := NewBoolCmd("MOVE", key, strconv.FormatInt(db, 10)) - c.Process(cmd) - return cmd -} - -func (c *Client) ObjectRefCount(keys ...string) *IntCmd { - args := append([]string{"OBJECT", "REFCOUNT"}, keys...) - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) ObjectEncoding(keys ...string) *StringCmd { - args := append([]string{"OBJECT", "ENCODING"}, keys...) - cmd := NewStringCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) ObjectIdleTime(keys ...string) *DurationCmd { - args := append([]string{"OBJECT", "IDLETIME"}, keys...) - cmd := NewDurationCmd(time.Second, args...) - c.Process(cmd) - return cmd -} - -func (c *Client) Persist(key string) *BoolCmd { - cmd := NewBoolCmd("PERSIST", key) - c.Process(cmd) - return cmd -} - -func (c *Client) PExpire(key string, dur time.Duration) *BoolCmd { - cmd := NewBoolCmd("PEXPIRE", key, strconv.FormatInt(int64(dur/time.Millisecond), 10)) - c.Process(cmd) - return cmd -} - -func (c *Client) PExpireAt(key string, tm time.Time) *BoolCmd { - cmd := NewBoolCmd( - "PEXPIREAT", - key, - strconv.FormatInt(tm.UnixNano()/int64(time.Millisecond), 10), - ) - c.Process(cmd) - return cmd -} - -func (c *Client) PTTL(key string) *DurationCmd { - cmd := NewDurationCmd(time.Millisecond, "PTTL", key) - c.Process(cmd) - return cmd -} - -func (c *Client) RandomKey() *StringCmd { - cmd := NewStringCmd("RANDOMKEY") - c.Process(cmd) - return cmd -} - -func (c *Client) Rename(key, newkey string) *StatusCmd { - cmd := NewStatusCmd("RENAME", key, newkey) - c.Process(cmd) - return cmd -} - -func (c *Client) RenameNX(key, newkey string) *BoolCmd { - cmd := NewBoolCmd("RENAMENX", key, newkey) - c.Process(cmd) - return cmd -} - -func (c *Client) Restore(key string, ttl int64, value string) *StatusCmd { - cmd := NewStatusCmd( - "RESTORE", - key, - strconv.FormatInt(ttl, 10), - value, - ) - c.Process(cmd) - return cmd -} - -type Sort struct { - By string - Offset, Count float64 - Get []string - Order string - IsAlpha bool - Store string -} - -func (c *Client) Sort(key string, sort Sort) *StringSliceCmd { - args := []string{"SORT", key} - if sort.By != "" { - args = append(args, "BY", sort.By) - } - if sort.Offset != 0 || sort.Count != 0 { - args = append(args, "LIMIT", formatFloat(sort.Offset), formatFloat(sort.Count)) - } - for _, get := range sort.Get { - args = append(args, "GET", get) - } - if sort.Order != "" { - args = append(args, sort.Order) - } - if sort.IsAlpha { - args = append(args, "ALPHA") - } - if sort.Store != "" { - args = append(args, "STORE", sort.Store) - } - cmd := NewStringSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) TTL(key string) *DurationCmd { - cmd := NewDurationCmd(time.Second, "TTL", key) - c.Process(cmd) - return cmd -} - -func (c *Client) Type(key string) *StatusCmd { - cmd := NewStatusCmd("TYPE", key) - c.Process(cmd) - return cmd -} - -func (c *Client) Scan(cursor int64, match string, count int64) *ScanCmd { - args := []string{"SCAN", strconv.FormatInt(cursor, 10)} - if match != "" { - args = append(args, "MATCH", match) - } - if count > 0 { - args = append(args, "COUNT", strconv.FormatInt(count, 10)) - } - cmd := NewScanCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) SScan(key string, cursor int64, match string, count int64) *ScanCmd { - args := []string{"SSCAN", key, strconv.FormatInt(cursor, 10)} - if match != "" { - args = append(args, "MATCH", match) - } - if count > 0 { - args = append(args, "COUNT", strconv.FormatInt(count, 10)) - } - cmd := NewScanCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) HScan(key string, cursor int64, match string, count int64) *ScanCmd { - args := []string{"HSCAN", key, strconv.FormatInt(cursor, 10)} - if match != "" { - args = append(args, "MATCH", match) - } - if count > 0 { - args = append(args, "COUNT", strconv.FormatInt(count, 10)) - } - cmd := NewScanCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) ZScan(key string, cursor int64, match string, count int64) *ScanCmd { - args := []string{"ZSCAN", key, strconv.FormatInt(cursor, 10)} - if match != "" { - args = append(args, "MATCH", match) - } - if count > 0 { - args = append(args, "COUNT", strconv.FormatInt(count, 10)) - } - cmd := NewScanCmd(args...) - c.Process(cmd) - return cmd -} - -//------------------------------------------------------------------------------ - -func (c *Client) Append(key, value string) *IntCmd { - cmd := NewIntCmd("APPEND", key, value) - c.Process(cmd) - return cmd -} - -type BitCount struct { - Start, End int64 -} - -func (c *Client) BitCount(key string, bitCount *BitCount) *IntCmd { - args := []string{"BITCOUNT", key} - if bitCount != nil { - args = append( - args, - strconv.FormatInt(bitCount.Start, 10), - strconv.FormatInt(bitCount.End, 10), - ) - } - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) bitOp(op, destKey string, keys ...string) *IntCmd { - args := []string{"BITOP", op, destKey} - args = append(args, keys...) - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) BitOpAnd(destKey string, keys ...string) *IntCmd { - return c.bitOp("AND", destKey, keys...) -} - -func (c *Client) BitOpOr(destKey string, keys ...string) *IntCmd { - return c.bitOp("OR", destKey, keys...) -} - -func (c *Client) BitOpXor(destKey string, keys ...string) *IntCmd { - return c.bitOp("XOR", destKey, keys...) -} - -func (c *Client) BitOpNot(destKey string, key string) *IntCmd { - return c.bitOp("NOT", destKey, key) -} - -func (c *Client) Decr(key string) *IntCmd { - cmd := NewIntCmd("DECR", key) - c.Process(cmd) - return cmd -} - -func (c *Client) DecrBy(key string, decrement int64) *IntCmd { - cmd := NewIntCmd("DECRBY", key, strconv.FormatInt(decrement, 10)) - c.Process(cmd) - return cmd -} - -func (c *Client) Get(key string) *StringCmd { - cmd := NewStringCmd("GET", key) - c.Process(cmd) - return cmd -} - -func (c *Client) GetBit(key string, offset int64) *IntCmd { - cmd := NewIntCmd("GETBIT", key, strconv.FormatInt(offset, 10)) - c.Process(cmd) - return cmd -} - -func (c *Client) GetRange(key string, start, end int64) *StringCmd { - cmd := NewStringCmd( - "GETRANGE", - key, - strconv.FormatInt(start, 10), - strconv.FormatInt(end, 10), - ) - c.Process(cmd) - return cmd -} - -func (c *Client) GetSet(key, value string) *StringCmd { - cmd := NewStringCmd("GETSET", key, value) - c.Process(cmd) - return cmd -} - -func (c *Client) Incr(key string) *IntCmd { - cmd := NewIntCmd("INCR", key) - c.Process(cmd) - return cmd -} - -func (c *Client) IncrBy(key string, value int64) *IntCmd { - cmd := NewIntCmd("INCRBY", key, strconv.FormatInt(value, 10)) - c.Process(cmd) - return cmd -} - -func (c *Client) IncrByFloat(key string, value float64) *FloatCmd { - cmd := NewFloatCmd("INCRBYFLOAT", key, formatFloat(value)) - c.Process(cmd) - return cmd -} - -func (c *Client) MGet(keys ...string) *SliceCmd { - args := append([]string{"MGET"}, keys...) - cmd := NewSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) MSet(pairs ...string) *StatusCmd { - args := append([]string{"MSET"}, pairs...) - cmd := NewStatusCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) MSetNX(pairs ...string) *BoolCmd { - args := append([]string{"MSETNX"}, pairs...) - cmd := NewBoolCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) PSetEx(key string, dur time.Duration, value string) *StatusCmd { - cmd := NewStatusCmd( - "PSETEX", - key, - strconv.FormatInt(int64(dur/time.Millisecond), 10), - value, - ) - c.Process(cmd) - return cmd -} - -func (c *Client) Set(key, value string) *StatusCmd { - cmd := NewStatusCmd("SET", key, value) - c.Process(cmd) - return cmd -} - -func (c *Client) SetBit(key string, offset int64, value int) *IntCmd { - cmd := NewIntCmd( - "SETBIT", - key, - strconv.FormatInt(offset, 10), - strconv.FormatInt(int64(value), 10), - ) - c.Process(cmd) - return cmd -} - -func (c *Client) SetEx(key string, dur time.Duration, value string) *StatusCmd { - cmd := NewStatusCmd("SETEX", key, strconv.FormatInt(int64(dur/time.Second), 10), value) - c.Process(cmd) - return cmd -} - -func (c *Client) SetNX(key, value string) *BoolCmd { - cmd := NewBoolCmd("SETNX", key, value) - c.Process(cmd) - return cmd -} - -func (c *Client) SetRange(key string, offset int64, value string) *IntCmd { - cmd := NewIntCmd("SETRANGE", key, strconv.FormatInt(offset, 10), value) - c.Process(cmd) - return cmd -} - -func (c *Client) StrLen(key string) *IntCmd { - cmd := NewIntCmd("STRLEN", key) - c.Process(cmd) - return cmd -} - -//------------------------------------------------------------------------------ - -func (c *Client) HDel(key string, fields ...string) *IntCmd { - args := append([]string{"HDEL", key}, fields...) - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) HExists(key, field string) *BoolCmd { - cmd := NewBoolCmd("HEXISTS", key, field) - c.Process(cmd) - return cmd -} - -func (c *Client) HGet(key, field string) *StringCmd { - cmd := NewStringCmd("HGET", key, field) - c.Process(cmd) - return cmd -} - -func (c *Client) HGetAll(key string) *StringSliceCmd { - cmd := NewStringSliceCmd("HGETALL", key) - c.Process(cmd) - return cmd -} - -func (c *Client) HGetAllMap(key string) *StringStringMapCmd { - cmd := NewStringStringMapCmd("HGETALL", key) - c.Process(cmd) - return cmd -} - -func (c *Client) HIncrBy(key, field string, incr int64) *IntCmd { - cmd := NewIntCmd("HINCRBY", key, field, strconv.FormatInt(incr, 10)) - c.Process(cmd) - return cmd -} - -func (c *Client) HIncrByFloat(key, field string, incr float64) *FloatCmd { - cmd := NewFloatCmd("HINCRBYFLOAT", key, field, formatFloat(incr)) - c.Process(cmd) - return cmd -} - -func (c *Client) HKeys(key string) *StringSliceCmd { - cmd := NewStringSliceCmd("HKEYS", key) - c.Process(cmd) - return cmd -} - -func (c *Client) HLen(key string) *IntCmd { - cmd := NewIntCmd("HLEN", key) - c.Process(cmd) - return cmd -} - -func (c *Client) HMGet(key string, fields ...string) *SliceCmd { - args := append([]string{"HMGET", key}, fields...) - cmd := NewSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) HMSet(key, field, value string, pairs ...string) *StatusCmd { - args := append([]string{"HMSET", key, field, value}, pairs...) - cmd := NewStatusCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) HSet(key, field, value string) *BoolCmd { - cmd := NewBoolCmd("HSET", key, field, value) - c.Process(cmd) - return cmd -} - -func (c *Client) HSetNX(key, field, value string) *BoolCmd { - cmd := NewBoolCmd("HSETNX", key, field, value) - c.Process(cmd) - return cmd -} - -func (c *Client) HVals(key string) *StringSliceCmd { - cmd := NewStringSliceCmd("HVALS", key) - c.Process(cmd) - return cmd -} - -//------------------------------------------------------------------------------ - -func (c *Client) BLPop(timeout int64, keys ...string) *StringSliceCmd { - args := append([]string{"BLPOP"}, keys...) - args = append(args, strconv.FormatInt(timeout, 10)) - cmd := NewStringSliceCmd(args...) - cmd.setReadTimeout(readTimeout(timeout)) - c.Process(cmd) - return cmd -} - -func (c *Client) BRPop(timeout int64, keys ...string) *StringSliceCmd { - args := append([]string{"BRPOP"}, keys...) - args = append(args, strconv.FormatInt(timeout, 10)) - cmd := NewStringSliceCmd(args...) - cmd.setReadTimeout(readTimeout(timeout)) - c.Process(cmd) - return cmd -} - -func (c *Client) BRPopLPush(source, destination string, timeout int64) *StringCmd { - cmd := NewStringCmd( - "BRPOPLPUSH", - source, - destination, - strconv.FormatInt(timeout, 10), - ) - cmd.setReadTimeout(readTimeout(timeout)) - c.Process(cmd) - return cmd -} - -func (c *Client) LIndex(key string, index int64) *StringCmd { - cmd := NewStringCmd("LINDEX", key, strconv.FormatInt(index, 10)) - c.Process(cmd) - return cmd -} - -func (c *Client) LInsert(key, op, pivot, value string) *IntCmd { - cmd := NewIntCmd("LINSERT", key, op, pivot, value) - c.Process(cmd) - return cmd -} - -func (c *Client) LLen(key string) *IntCmd { - cmd := NewIntCmd("LLEN", key) - c.Process(cmd) - return cmd -} - -func (c *Client) LPop(key string) *StringCmd { - cmd := NewStringCmd("LPOP", key) - c.Process(cmd) - return cmd -} - -func (c *Client) LPush(key string, values ...string) *IntCmd { - args := append([]string{"LPUSH", key}, values...) - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) LPushX(key, value string) *IntCmd { - cmd := NewIntCmd("LPUSHX", key, value) - c.Process(cmd) - return cmd -} - -func (c *Client) LRange(key string, start, stop int64) *StringSliceCmd { - cmd := NewStringSliceCmd( - "LRANGE", - key, - strconv.FormatInt(start, 10), - strconv.FormatInt(stop, 10), - ) - c.Process(cmd) - return cmd -} - -func (c *Client) LRem(key string, count int64, value string) *IntCmd { - cmd := NewIntCmd("LREM", key, strconv.FormatInt(count, 10), value) - c.Process(cmd) - return cmd -} - -func (c *Client) LSet(key string, index int64, value string) *StatusCmd { - cmd := NewStatusCmd("LSET", key, strconv.FormatInt(index, 10), value) - c.Process(cmd) - return cmd -} - -func (c *Client) LTrim(key string, start, stop int64) *StatusCmd { - cmd := NewStatusCmd( - "LTRIM", - key, - strconv.FormatInt(start, 10), - strconv.FormatInt(stop, 10), - ) - c.Process(cmd) - return cmd -} - -func (c *Client) RPop(key string) *StringCmd { - cmd := NewStringCmd("RPOP", key) - c.Process(cmd) - return cmd -} - -func (c *Client) RPopLPush(source, destination string) *StringCmd { - cmd := NewStringCmd("RPOPLPUSH", source, destination) - c.Process(cmd) - return cmd -} - -func (c *Client) RPush(key string, values ...string) *IntCmd { - args := append([]string{"RPUSH", key}, values...) - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) RPushX(key string, value string) *IntCmd { - cmd := NewIntCmd("RPUSHX", key, value) - c.Process(cmd) - return cmd -} - -//------------------------------------------------------------------------------ - -func (c *Client) SAdd(key string, members ...string) *IntCmd { - args := append([]string{"SADD", key}, members...) - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) SCard(key string) *IntCmd { - cmd := NewIntCmd("SCARD", key) - c.Process(cmd) - return cmd -} - -func (c *Client) SDiff(keys ...string) *StringSliceCmd { - args := append([]string{"SDIFF"}, keys...) - cmd := NewStringSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) SDiffStore(destination string, keys ...string) *IntCmd { - args := append([]string{"SDIFFSTORE", destination}, keys...) - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) SInter(keys ...string) *StringSliceCmd { - args := append([]string{"SINTER"}, keys...) - cmd := NewStringSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) SInterStore(destination string, keys ...string) *IntCmd { - args := append([]string{"SINTERSTORE", destination}, keys...) - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) SIsMember(key, member string) *BoolCmd { - cmd := NewBoolCmd("SISMEMBER", key, member) - c.Process(cmd) - return cmd -} - -func (c *Client) SMembers(key string) *StringSliceCmd { - cmd := NewStringSliceCmd("SMEMBERS", key) - c.Process(cmd) - return cmd -} - -func (c *Client) SMove(source, destination, member string) *BoolCmd { - cmd := NewBoolCmd("SMOVE", source, destination, member) - c.Process(cmd) - return cmd -} - -func (c *Client) SPop(key string) *StringCmd { - cmd := NewStringCmd("SPOP", key) - c.Process(cmd) - return cmd -} - -func (c *Client) SRandMember(key string) *StringCmd { - cmd := NewStringCmd("SRANDMEMBER", key) - c.Process(cmd) - return cmd -} - -func (c *Client) SRem(key string, members ...string) *IntCmd { - args := append([]string{"SREM", key}, members...) - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) SUnion(keys ...string) *StringSliceCmd { - args := append([]string{"SUNION"}, keys...) - cmd := NewStringSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) SUnionStore(destination string, keys ...string) *IntCmd { - args := append([]string{"SUNIONSTORE", destination}, keys...) - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -//------------------------------------------------------------------------------ - -type Z struct { - Score float64 - Member string -} - -type ZStore struct { - Weights []int64 - Aggregate string -} - -func (c *Client) ZAdd(key string, members ...Z) *IntCmd { - args := []string{"ZADD", key} - for _, m := range members { - args = append(args, formatFloat(m.Score), m.Member) - } - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) ZCard(key string) *IntCmd { - cmd := NewIntCmd("ZCARD", key) - c.Process(cmd) - return cmd -} - -func (c *Client) ZCount(key, min, max string) *IntCmd { - cmd := NewIntCmd("ZCOUNT", key, min, max) - c.Process(cmd) - return cmd -} - -func (c *Client) ZIncrBy(key string, increment float64, member string) *FloatCmd { - cmd := NewFloatCmd("ZINCRBY", key, formatFloat(increment), member) - c.Process(cmd) - return cmd -} - -func (c *Client) ZInterStore( - destination string, - store ZStore, - keys ...string, -) *IntCmd { - args := []string{"ZINTERSTORE", destination, strconv.FormatInt(int64(len(keys)), 10)} - args = append(args, keys...) - if len(store.Weights) > 0 { - args = append(args, "WEIGHTS") - for _, weight := range store.Weights { - args = append(args, strconv.FormatInt(weight, 10)) - } - } - if store.Aggregate != "" { - args = append(args, "AGGREGATE", store.Aggregate) - } - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) zRange(key string, start, stop int64, withScores bool) *StringSliceCmd { - args := []string{ - "ZRANGE", - key, - strconv.FormatInt(start, 10), - strconv.FormatInt(stop, 10), - } - if withScores { - args = append(args, "WITHSCORES") - } - cmd := NewStringSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) ZRange(key string, start, stop int64) *StringSliceCmd { - return c.zRange(key, start, stop, false) -} - -func (c *Client) ZRangeWithScores(key string, start, stop int64) *ZSliceCmd { - args := []string{ - "ZRANGE", - key, - strconv.FormatInt(start, 10), - strconv.FormatInt(stop, 10), - "WITHSCORES", - } - cmd := NewZSliceCmd(args...) - c.Process(cmd) - return cmd -} - -type ZRangeByScore struct { - Min, Max string - - Offset, Count int64 -} - -func (c *Client) zRangeByScore(key string, opt ZRangeByScore, withScores bool) *StringSliceCmd { - args := []string{"ZRANGEBYSCORE", key, opt.Min, opt.Max} - if withScores { - args = append(args, "WITHSCORES") - } - if opt.Offset != 0 || opt.Count != 0 { - args = append( - args, - "LIMIT", - strconv.FormatInt(opt.Offset, 10), - strconv.FormatInt(opt.Count, 10), - ) - } - cmd := NewStringSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) ZRangeByScore(key string, opt ZRangeByScore) *StringSliceCmd { - return c.zRangeByScore(key, opt, false) -} - -func (c *Client) ZRangeByScoreWithScores(key string, opt ZRangeByScore) *ZSliceCmd { - args := []string{"ZRANGEBYSCORE", key, opt.Min, opt.Max, "WITHSCORES"} - if opt.Offset != 0 || opt.Count != 0 { - args = append( - args, - "LIMIT", - strconv.FormatInt(opt.Offset, 10), - strconv.FormatInt(opt.Count, 10), - ) - } - cmd := NewZSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) ZRank(key, member string) *IntCmd { - cmd := NewIntCmd("ZRANK", key, member) - c.Process(cmd) - return cmd -} - -func (c *Client) ZRem(key string, members ...string) *IntCmd { - args := append([]string{"ZREM", key}, members...) - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) ZRemRangeByRank(key string, start, stop int64) *IntCmd { - cmd := NewIntCmd( - "ZREMRANGEBYRANK", - key, - strconv.FormatInt(start, 10), - strconv.FormatInt(stop, 10), - ) - c.Process(cmd) - return cmd -} - -func (c *Client) ZRemRangeByScore(key, min, max string) *IntCmd { - cmd := NewIntCmd("ZREMRANGEBYSCORE", key, min, max) - c.Process(cmd) - return cmd -} - -func (c *Client) zRevRange(key, start, stop string, withScores bool) *StringSliceCmd { - args := []string{"ZREVRANGE", key, start, stop} - if withScores { - args = append(args, "WITHSCORES") - } - cmd := NewStringSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) ZRevRange(key, start, stop string) *StringSliceCmd { - return c.zRevRange(key, start, stop, false) -} - -func (c *Client) ZRevRangeWithScores(key, start, stop string) *ZSliceCmd { - args := []string{"ZREVRANGE", key, start, stop, "WITHSCORES"} - cmd := NewZSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) zRevRangeByScore(key string, opt ZRangeByScore, withScores bool) *StringSliceCmd { - args := []string{"ZREVRANGEBYSCORE", key, opt.Max, opt.Min} - if withScores { - args = append(args, "WITHSCORES") - } - if opt.Offset != 0 || opt.Count != 0 { - args = append( - args, - "LIMIT", - strconv.FormatInt(opt.Offset, 10), - strconv.FormatInt(opt.Count, 10), - ) - } - cmd := NewStringSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) ZRevRangeByScore(key string, opt ZRangeByScore) *StringSliceCmd { - return c.zRevRangeByScore(key, opt, false) -} - -func (c *Client) ZRevRangeByScoreWithScores(key string, opt ZRangeByScore) *ZSliceCmd { - args := []string{"ZREVRANGEBYSCORE", key, opt.Max, opt.Min, "WITHSCORES"} - if opt.Offset != 0 || opt.Count != 0 { - args = append( - args, - "LIMIT", - strconv.FormatInt(opt.Offset, 10), - strconv.FormatInt(opt.Count, 10), - ) - } - cmd := NewZSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) ZRevRank(key, member string) *IntCmd { - cmd := NewIntCmd("ZREVRANK", key, member) - c.Process(cmd) - return cmd -} - -func (c *Client) ZScore(key, member string) *FloatCmd { - cmd := NewFloatCmd("ZSCORE", key, member) - c.Process(cmd) - return cmd -} - -func (c *Client) ZUnionStore( - destination string, - store ZStore, - keys ...string, -) *IntCmd { - args := []string{"ZUNIONSTORE", destination, strconv.FormatInt(int64(len(keys)), 10)} - args = append(args, keys...) - if len(store.Weights) > 0 { - args = append(args, "WEIGHTS") - for _, weight := range store.Weights { - args = append(args, strconv.FormatInt(weight, 10)) - } - } - if store.Aggregate != "" { - args = append(args, "AGGREGATE", store.Aggregate) - } - cmd := NewIntCmd(args...) - c.Process(cmd) - return cmd -} - -//------------------------------------------------------------------------------ - -func (c *Client) BgRewriteAOF() *StatusCmd { - cmd := NewStatusCmd("BGREWRITEAOF") - c.Process(cmd) - return cmd -} - -func (c *Client) BgSave() *StatusCmd { - cmd := NewStatusCmd("BGSAVE") - c.Process(cmd) - return cmd -} - -func (c *Client) ClientKill(ipPort string) *StatusCmd { - cmd := NewStatusCmd("CLIENT", "KILL", ipPort) - c.Process(cmd) - return cmd -} - -func (c *Client) ClientList() *StringCmd { - cmd := NewStringCmd("CLIENT", "LIST") - c.Process(cmd) - return cmd -} - -func (c *Client) ConfigGet(parameter string) *SliceCmd { - cmd := NewSliceCmd("CONFIG", "GET", parameter) - c.Process(cmd) - return cmd -} - -func (c *Client) ConfigResetStat() *StatusCmd { - cmd := NewStatusCmd("CONFIG", "RESETSTAT") - c.Process(cmd) - return cmd -} - -func (c *Client) ConfigSet(parameter, value string) *StatusCmd { - cmd := NewStatusCmd("CONFIG", "SET", parameter, value) - c.Process(cmd) - return cmd -} - -func (c *Client) DbSize() *IntCmd { - cmd := NewIntCmd("DBSIZE") - c.Process(cmd) - return cmd -} - -func (c *Client) FlushAll() *StatusCmd { - cmd := NewStatusCmd("FLUSHALL") - c.Process(cmd) - return cmd -} - -func (c *Client) FlushDb() *StatusCmd { - cmd := NewStatusCmd("FLUSHDB") - c.Process(cmd) - return cmd -} - -func (c *Client) Info() *StringCmd { - cmd := NewStringCmd("INFO") - c.Process(cmd) - return cmd -} - -func (c *Client) LastSave() *IntCmd { - cmd := NewIntCmd("LASTSAVE") - c.Process(cmd) - return cmd -} - -func (c *Client) Save() *StatusCmd { - cmd := NewStatusCmd("SAVE") - c.Process(cmd) - return cmd -} - -func (c *Client) shutdown(modifier string) *StatusCmd { - var args []string - if modifier == "" { - args = []string{"SHUTDOWN"} - } else { - args = []string{"SHUTDOWN", modifier} - } - cmd := NewStatusCmd(args...) - c.Process(cmd) - if err := cmd.Err(); err != nil { - if err == io.EOF { - // Server quit as expected. - cmd.err = nil - } - } else { - // Server did not quit. String reply contains the reason. - cmd.err = errorf(cmd.val) - cmd.val = "" - } - return cmd -} - -func (c *Client) Shutdown() *StatusCmd { - return c.shutdown("") -} - -func (c *Client) ShutdownSave() *StatusCmd { - return c.shutdown("SAVE") -} - -func (c *Client) ShutdownNoSave() *StatusCmd { - return c.shutdown("NOSAVE") -} - -func (c *Client) SlaveOf(host, port string) *StatusCmd { - cmd := NewStatusCmd("SLAVEOF", host, port) - c.Process(cmd) - return cmd -} - -func (c *Client) SlowLog() { - panic("not implemented") -} - -func (c *Client) Sync() { - panic("not implemented") -} - -func (c *Client) Time() *StringSliceCmd { - cmd := NewStringSliceCmd("TIME") - c.Process(cmd) - return cmd -} - -//------------------------------------------------------------------------------ - -func (c *Client) Eval(script string, keys []string, args []string) *Cmd { - cmdArgs := []string{"EVAL", script, strconv.FormatInt(int64(len(keys)), 10)} - cmdArgs = append(cmdArgs, keys...) - cmdArgs = append(cmdArgs, args...) - cmd := NewCmd(cmdArgs...) - c.Process(cmd) - return cmd -} - -func (c *Client) EvalSha(sha1 string, keys []string, args []string) *Cmd { - cmdArgs := []string{"EVALSHA", sha1, strconv.FormatInt(int64(len(keys)), 10)} - cmdArgs = append(cmdArgs, keys...) - cmdArgs = append(cmdArgs, args...) - cmd := NewCmd(cmdArgs...) - c.Process(cmd) - return cmd -} - -func (c *Client) ScriptExists(scripts ...string) *BoolSliceCmd { - args := append([]string{"SCRIPT", "EXISTS"}, scripts...) - cmd := NewBoolSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) ScriptFlush() *StatusCmd { - cmd := NewStatusCmd("SCRIPT", "FLUSH") - c.Process(cmd) - return cmd -} - -func (c *Client) ScriptKill() *StatusCmd { - cmd := NewStatusCmd("SCRIPT", "KILL") - c.Process(cmd) - return cmd -} - -func (c *Client) ScriptLoad(script string) *StringCmd { - cmd := NewStringCmd("SCRIPT", "LOAD", script) - c.Process(cmd) - return cmd -} - -//------------------------------------------------------------------------------ - -func (c *Client) DebugObject(key string) *StringCmd { - cmd := NewStringCmd("DEBUG", "OBJECT", key) - c.Process(cmd) - return cmd -} - -//------------------------------------------------------------------------------ - -func (c *Client) PubSubChannels(pattern string) *StringSliceCmd { - args := []string{"PUBSUB", "CHANNELS"} - if pattern != "*" { - args = append(args, pattern) - } - cmd := NewStringSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) PubSubNumSub(channels ...string) *SliceCmd { - args := []string{"PUBSUB", "NUMSUB"} - args = append(args, channels...) - cmd := NewSliceCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Client) PubSubNumPat() *IntCmd { - cmd := NewIntCmd("PUBSUB", "NUMPAT") - c.Process(cmd) - return cmd -} diff --git a/vendor/gopkg.in/redis.v2/doc.go b/vendor/gopkg.in/redis.v2/doc.go deleted file mode 100644 index 55262533a..000000000 --- a/vendor/gopkg.in/redis.v2/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -/* -Package redis implements a Redis client. -*/ -package redis diff --git a/vendor/gopkg.in/redis.v2/error.go b/vendor/gopkg.in/redis.v2/error.go deleted file mode 100644 index 667fffdc6..000000000 --- a/vendor/gopkg.in/redis.v2/error.go +++ /dev/null @@ -1,23 +0,0 @@ -package redis - -import ( - "fmt" -) - -// Redis nil reply. -var Nil = errorf("redis: nil") - -// Redis transaction failed. -var TxFailedErr = errorf("redis: transaction failed") - -type redisError struct { - s string -} - -func errorf(s string, args ...interface{}) redisError { - return redisError{s: fmt.Sprintf(s, args...)} -} - -func (err redisError) Error() string { - return err.s -} diff --git a/vendor/gopkg.in/redis.v2/multi.go b/vendor/gopkg.in/redis.v2/multi.go deleted file mode 100644 index bff38dfaa..000000000 --- a/vendor/gopkg.in/redis.v2/multi.go +++ /dev/null @@ -1,138 +0,0 @@ -package redis - -import ( - "errors" - "fmt" -) - -var errDiscard = errors.New("redis: Discard can be used only inside Exec") - -// Not thread-safe. -type Multi struct { - *Client -} - -func (c *Client) Multi() *Multi { - return &Multi{ - Client: &Client{ - baseClient: &baseClient{ - opt: c.opt, - connPool: newSingleConnPool(c.connPool, true), - }, - }, - } -} - -func (c *Multi) Close() error { - if err := c.Unwatch().Err(); err != nil { - return err - } - return c.Client.Close() -} - -func (c *Multi) Watch(keys ...string) *StatusCmd { - args := append([]string{"WATCH"}, keys...) - cmd := NewStatusCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Multi) Unwatch(keys ...string) *StatusCmd { - args := append([]string{"UNWATCH"}, keys...) - cmd := NewStatusCmd(args...) - c.Process(cmd) - return cmd -} - -func (c *Multi) Discard() error { - if c.cmds == nil { - return errDiscard - } - c.cmds = c.cmds[:1] - return nil -} - -// Exec always returns list of commands. If transaction fails -// TxFailedErr is returned. Otherwise Exec returns error of the first -// failed command or nil. -func (c *Multi) Exec(f func() error) ([]Cmder, error) { - c.cmds = []Cmder{NewStatusCmd("MULTI")} - if err := f(); err != nil { - return nil, err - } - c.cmds = append(c.cmds, NewSliceCmd("EXEC")) - - cmds := c.cmds - c.cmds = nil - - if len(cmds) == 2 { - return []Cmder{}, nil - } - - cn, err := c.conn() - if err != nil { - setCmdsErr(cmds[1:len(cmds)-1], err) - return cmds[1 : len(cmds)-1], err - } - - err = c.execCmds(cn, cmds) - if err != nil { - c.freeConn(cn, err) - return cmds[1 : len(cmds)-1], err - } - - c.putConn(cn) - return cmds[1 : len(cmds)-1], nil -} - -func (c *Multi) execCmds(cn *conn, cmds []Cmder) error { - err := c.writeCmd(cn, cmds...) - if err != nil { - setCmdsErr(cmds[1:len(cmds)-1], err) - return err - } - - statusCmd := NewStatusCmd() - - // Omit last command (EXEC). - cmdsLen := len(cmds) - 1 - - // Parse queued replies. - for i := 0; i < cmdsLen; i++ { - if err := statusCmd.parseReply(cn.rd); err != nil { - setCmdsErr(cmds[1:len(cmds)-1], err) - return err - } - } - - // Parse number of replies. - line, err := readLine(cn.rd) - if err != nil { - setCmdsErr(cmds[1:len(cmds)-1], err) - return err - } - if line[0] != '*' { - err := fmt.Errorf("redis: expected '*', but got line %q", line) - setCmdsErr(cmds[1:len(cmds)-1], err) - return err - } - if len(line) == 3 && line[1] == '-' && line[2] == '1' { - setCmdsErr(cmds[1:len(cmds)-1], TxFailedErr) - return TxFailedErr - } - - var firstCmdErr error - - // Parse replies. - // Loop starts from 1 to omit MULTI cmd. - for i := 1; i < cmdsLen; i++ { - cmd := cmds[i] - if err := cmd.parseReply(cn.rd); err != nil { - if firstCmdErr == nil { - firstCmdErr = err - } - } - } - - return firstCmdErr -} diff --git a/vendor/gopkg.in/redis.v2/parser.go b/vendor/gopkg.in/redis.v2/parser.go deleted file mode 100644 index b4c380c76..000000000 --- a/vendor/gopkg.in/redis.v2/parser.go +++ /dev/null @@ -1,262 +0,0 @@ -package redis - -import ( - "errors" - "fmt" - "strconv" - - "gopkg.in/bufio.v1" -) - -type multiBulkParser func(rd *bufio.Reader, n int64) (interface{}, error) - -var ( - errReaderTooSmall = errors.New("redis: reader is too small") -) - -//------------------------------------------------------------------------------ - -func appendArgs(buf []byte, args []string) []byte { - buf = append(buf, '*') - buf = strconv.AppendUint(buf, uint64(len(args)), 10) - buf = append(buf, '\r', '\n') - for _, arg := range args { - buf = append(buf, '$') - buf = strconv.AppendUint(buf, uint64(len(arg)), 10) - buf = append(buf, '\r', '\n') - buf = append(buf, arg...) - buf = append(buf, '\r', '\n') - } - return buf -} - -//------------------------------------------------------------------------------ - -func readLine(rd *bufio.Reader) ([]byte, error) { - line, isPrefix, err := rd.ReadLine() - if err != nil { - return line, err - } - if isPrefix { - return line, errReaderTooSmall - } - return line, nil -} - -func readN(rd *bufio.Reader, n int) ([]byte, error) { - b, err := rd.ReadN(n) - if err == bufio.ErrBufferFull { - tmp := make([]byte, n) - r := copy(tmp, b) - b = tmp - - for { - nn, err := rd.Read(b[r:]) - r += nn - if r >= n { - // Ignore error if we read enough. - break - } - if err != nil { - return nil, err - } - } - } else if err != nil { - return nil, err - } - return b, nil -} - -//------------------------------------------------------------------------------ - -func parseReq(rd *bufio.Reader) ([]string, error) { - line, err := readLine(rd) - if err != nil { - return nil, err - } - - if line[0] != '*' { - return []string{string(line)}, nil - } - numReplies, err := strconv.ParseInt(string(line[1:]), 10, 64) - if err != nil { - return nil, err - } - - args := make([]string, 0, numReplies) - for i := int64(0); i < numReplies; i++ { - line, err = readLine(rd) - if err != nil { - return nil, err - } - if line[0] != '$' { - return nil, fmt.Errorf("redis: expected '$', but got %q", line) - } - - argLen, err := strconv.ParseInt(string(line[1:]), 10, 32) - if err != nil { - return nil, err - } - - arg, err := readN(rd, int(argLen)+2) - if err != nil { - return nil, err - } - args = append(args, string(arg[:argLen])) - } - return args, nil -} - -//------------------------------------------------------------------------------ - -func parseReply(rd *bufio.Reader, p multiBulkParser) (interface{}, error) { - line, err := readLine(rd) - if err != nil { - return nil, err - } - - switch line[0] { - case '-': - return nil, errorf(string(line[1:])) - case '+': - return string(line[1:]), nil - case ':': - v, err := strconv.ParseInt(string(line[1:]), 10, 64) - if err != nil { - return nil, err - } - return v, nil - case '$': - if len(line) == 3 && line[1] == '-' && line[2] == '1' { - return nil, Nil - } - - replyLen, err := strconv.Atoi(string(line[1:])) - if err != nil { - return nil, err - } - - b, err := readN(rd, replyLen+2) - if err != nil { - return nil, err - } - return string(b[:replyLen]), nil - case '*': - if len(line) == 3 && line[1] == '-' && line[2] == '1' { - return nil, Nil - } - - repliesNum, err := strconv.ParseInt(string(line[1:]), 10, 64) - if err != nil { - return nil, err - } - - return p(rd, repliesNum) - } - return nil, fmt.Errorf("redis: can't parse %q", line) -} - -func parseSlice(rd *bufio.Reader, n int64) (interface{}, error) { - vals := make([]interface{}, 0, n) - for i := int64(0); i < n; i++ { - v, err := parseReply(rd, parseSlice) - if err == Nil { - vals = append(vals, nil) - } else if err != nil { - return nil, err - } else { - vals = append(vals, v) - } - } - return vals, nil -} - -func parseStringSlice(rd *bufio.Reader, n int64) (interface{}, error) { - vals := make([]string, 0, n) - for i := int64(0); i < n; i++ { - viface, err := parseReply(rd, nil) - if err != nil { - return nil, err - } - v, ok := viface.(string) - if !ok { - return nil, fmt.Errorf("got %T, expected string", viface) - } - vals = append(vals, v) - } - return vals, nil -} - -func parseBoolSlice(rd *bufio.Reader, n int64) (interface{}, error) { - vals := make([]bool, 0, n) - for i := int64(0); i < n; i++ { - viface, err := parseReply(rd, nil) - if err != nil { - return nil, err - } - v, ok := viface.(int64) - if !ok { - return nil, fmt.Errorf("got %T, expected int64", viface) - } - vals = append(vals, v == 1) - } - return vals, nil -} - -func parseStringStringMap(rd *bufio.Reader, n int64) (interface{}, error) { - m := make(map[string]string, n/2) - for i := int64(0); i < n; i += 2 { - keyiface, err := parseReply(rd, nil) - if err != nil { - return nil, err - } - key, ok := keyiface.(string) - if !ok { - return nil, fmt.Errorf("got %T, expected string", keyiface) - } - - valueiface, err := parseReply(rd, nil) - if err != nil { - return nil, err - } - value, ok := valueiface.(string) - if !ok { - return nil, fmt.Errorf("got %T, expected string", valueiface) - } - - m[key] = value - } - return m, nil -} - -func parseZSlice(rd *bufio.Reader, n int64) (interface{}, error) { - zz := make([]Z, n/2) - for i := int64(0); i < n; i += 2 { - z := &zz[i/2] - - memberiface, err := parseReply(rd, nil) - if err != nil { - return nil, err - } - member, ok := memberiface.(string) - if !ok { - return nil, fmt.Errorf("got %T, expected string", memberiface) - } - z.Member = member - - scoreiface, err := parseReply(rd, nil) - if err != nil { - return nil, err - } - scorestr, ok := scoreiface.(string) - if !ok { - return nil, fmt.Errorf("got %T, expected string", scoreiface) - } - score, err := strconv.ParseFloat(scorestr, 64) - if err != nil { - return nil, err - } - z.Score = score - } - return zz, nil -} diff --git a/vendor/gopkg.in/redis.v2/pipeline.go b/vendor/gopkg.in/redis.v2/pipeline.go deleted file mode 100644 index 540d6c51d..000000000 --- a/vendor/gopkg.in/redis.v2/pipeline.go +++ /dev/null @@ -1,91 +0,0 @@ -package redis - -// Not thread-safe. -type Pipeline struct { - *Client - - closed bool -} - -func (c *Client) Pipeline() *Pipeline { - return &Pipeline{ - Client: &Client{ - baseClient: &baseClient{ - opt: c.opt, - connPool: c.connPool, - - cmds: make([]Cmder, 0), - }, - }, - } -} - -func (c *Client) Pipelined(f func(*Pipeline) error) ([]Cmder, error) { - pc := c.Pipeline() - if err := f(pc); err != nil { - return nil, err - } - cmds, err := pc.Exec() - pc.Close() - return cmds, err -} - -func (c *Pipeline) Close() error { - c.closed = true - return nil -} - -func (c *Pipeline) Discard() error { - if c.closed { - return errClosed - } - c.cmds = c.cmds[:0] - return nil -} - -// Exec always returns list of commands and error of the first failed -// command if any. -func (c *Pipeline) Exec() ([]Cmder, error) { - if c.closed { - return nil, errClosed - } - - cmds := c.cmds - c.cmds = make([]Cmder, 0) - - if len(cmds) == 0 { - return []Cmder{}, nil - } - - cn, err := c.conn() - if err != nil { - setCmdsErr(cmds, err) - return cmds, err - } - - if err := c.execCmds(cn, cmds); err != nil { - c.freeConn(cn, err) - return cmds, err - } - - c.putConn(cn) - return cmds, nil -} - -func (c *Pipeline) execCmds(cn *conn, cmds []Cmder) error { - if err := c.writeCmd(cn, cmds...); err != nil { - setCmdsErr(cmds, err) - return err - } - - var firstCmdErr error - for _, cmd := range cmds { - if err := cmd.parseReply(cn.rd); err != nil { - if firstCmdErr == nil { - firstCmdErr = err - } - } - } - - return firstCmdErr -} diff --git a/vendor/gopkg.in/redis.v2/pool.go b/vendor/gopkg.in/redis.v2/pool.go deleted file mode 100644 index bca4d1963..000000000 --- a/vendor/gopkg.in/redis.v2/pool.go +++ /dev/null @@ -1,405 +0,0 @@ -package redis - -import ( - "container/list" - "errors" - "log" - "net" - "sync" - "time" - - "gopkg.in/bufio.v1" -) - -var ( - errClosed = errors.New("redis: client is closed") - errRateLimited = errors.New("redis: you open connections too fast") -) - -var ( - zeroTime = time.Time{} -) - -type pool interface { - Get() (*conn, bool, error) - Put(*conn) error - Remove(*conn) error - Len() int - Size() int - Close() error - Filter(func(*conn) bool) -} - -//------------------------------------------------------------------------------ - -type conn struct { - netcn net.Conn - rd *bufio.Reader - buf []byte - - inUse bool - usedAt time.Time - - readTimeout time.Duration - writeTimeout time.Duration - - elem *list.Element -} - -func newConnFunc(dial func() (net.Conn, error)) func() (*conn, error) { - return func() (*conn, error) { - netcn, err := dial() - if err != nil { - return nil, err - } - cn := &conn{ - netcn: netcn, - buf: make([]byte, 0, 64), - } - cn.rd = bufio.NewReader(cn) - return cn, nil - } -} - -func (cn *conn) Read(b []byte) (int, error) { - if cn.readTimeout != 0 { - cn.netcn.SetReadDeadline(time.Now().Add(cn.readTimeout)) - } else { - cn.netcn.SetReadDeadline(zeroTime) - } - return cn.netcn.Read(b) -} - -func (cn *conn) Write(b []byte) (int, error) { - if cn.writeTimeout != 0 { - cn.netcn.SetWriteDeadline(time.Now().Add(cn.writeTimeout)) - } else { - cn.netcn.SetWriteDeadline(zeroTime) - } - return cn.netcn.Write(b) -} - -func (cn *conn) RemoteAddr() net.Addr { - return cn.netcn.RemoteAddr() -} - -func (cn *conn) Close() error { - return cn.netcn.Close() -} - -//------------------------------------------------------------------------------ - -type connPool struct { - dial func() (*conn, error) - rl *rateLimiter - - opt *options - - cond *sync.Cond - conns *list.List - - idleNum int - closed bool -} - -func newConnPool(dial func() (*conn, error), opt *options) *connPool { - return &connPool{ - dial: dial, - rl: newRateLimiter(time.Second, 2*opt.PoolSize), - - opt: opt, - - cond: sync.NewCond(&sync.Mutex{}), - conns: list.New(), - } -} - -func (p *connPool) new() (*conn, error) { - if !p.rl.Check() { - return nil, errRateLimited - } - return p.dial() -} - -func (p *connPool) Get() (*conn, bool, error) { - p.cond.L.Lock() - - if p.closed { - p.cond.L.Unlock() - return nil, false, errClosed - } - - if p.opt.IdleTimeout > 0 { - for el := p.conns.Front(); el != nil; el = el.Next() { - cn := el.Value.(*conn) - if cn.inUse { - break - } - if time.Since(cn.usedAt) > p.opt.IdleTimeout { - if err := p.remove(cn); err != nil { - log.Printf("remove failed: %s", err) - } - } - } - } - - for p.conns.Len() >= p.opt.PoolSize && p.idleNum == 0 { - p.cond.Wait() - } - - if p.idleNum > 0 { - elem := p.conns.Front() - cn := elem.Value.(*conn) - if cn.inUse { - panic("pool: precondition failed") - } - cn.inUse = true - p.conns.MoveToBack(elem) - p.idleNum-- - - p.cond.L.Unlock() - return cn, false, nil - } - - if p.conns.Len() < p.opt.PoolSize { - cn, err := p.new() - if err != nil { - p.cond.L.Unlock() - return nil, false, err - } - - cn.inUse = true - cn.elem = p.conns.PushBack(cn) - - p.cond.L.Unlock() - return cn, true, nil - } - - panic("not reached") -} - -func (p *connPool) Put(cn *conn) error { - if cn.rd.Buffered() != 0 { - b, _ := cn.rd.ReadN(cn.rd.Buffered()) - log.Printf("redis: connection has unread data: %q", b) - return p.Remove(cn) - } - - if p.opt.IdleTimeout > 0 { - cn.usedAt = time.Now() - } - - p.cond.L.Lock() - if p.closed { - p.cond.L.Unlock() - return errClosed - } - cn.inUse = false - p.conns.MoveToFront(cn.elem) - p.idleNum++ - p.cond.Signal() - p.cond.L.Unlock() - - return nil -} - -func (p *connPool) Remove(cn *conn) error { - p.cond.L.Lock() - if p.closed { - // Noop, connection is already closed. - p.cond.L.Unlock() - return nil - } - err := p.remove(cn) - p.cond.Signal() - p.cond.L.Unlock() - return err -} - -func (p *connPool) remove(cn *conn) error { - p.conns.Remove(cn.elem) - cn.elem = nil - if !cn.inUse { - p.idleNum-- - } - return cn.Close() -} - -// Len returns number of idle connections. -func (p *connPool) Len() int { - defer p.cond.L.Unlock() - p.cond.L.Lock() - return p.idleNum -} - -// Size returns number of connections in the pool. -func (p *connPool) Size() int { - defer p.cond.L.Unlock() - p.cond.L.Lock() - return p.conns.Len() -} - -func (p *connPool) Filter(f func(*conn) bool) { - p.cond.L.Lock() - for el, next := p.conns.Front(), p.conns.Front(); el != nil; el = next { - next = el.Next() - cn := el.Value.(*conn) - if !f(cn) { - p.remove(cn) - } - } - p.cond.L.Unlock() -} - -func (p *connPool) Close() error { - defer p.cond.L.Unlock() - p.cond.L.Lock() - if p.closed { - return nil - } - p.closed = true - p.rl.Close() - var retErr error - for { - e := p.conns.Front() - if e == nil { - break - } - if err := p.remove(e.Value.(*conn)); err != nil { - log.Printf("cn.Close failed: %s", err) - retErr = err - } - } - return retErr -} - -//------------------------------------------------------------------------------ - -type singleConnPool struct { - pool pool - - cnMtx sync.Mutex - cn *conn - - reusable bool - - closed bool -} - -func newSingleConnPool(pool pool, reusable bool) *singleConnPool { - return &singleConnPool{ - pool: pool, - reusable: reusable, - } -} - -func (p *singleConnPool) SetConn(cn *conn) { - p.cnMtx.Lock() - p.cn = cn - p.cnMtx.Unlock() -} - -func (p *singleConnPool) Get() (*conn, bool, error) { - defer p.cnMtx.Unlock() - p.cnMtx.Lock() - - if p.closed { - return nil, false, errClosed - } - if p.cn != nil { - return p.cn, false, nil - } - - cn, isNew, err := p.pool.Get() - if err != nil { - return nil, false, err - } - p.cn = cn - - return p.cn, isNew, nil -} - -func (p *singleConnPool) Put(cn *conn) error { - defer p.cnMtx.Unlock() - p.cnMtx.Lock() - if p.cn != cn { - panic("p.cn != cn") - } - if p.closed { - return errClosed - } - return nil -} - -func (p *singleConnPool) put() error { - err := p.pool.Put(p.cn) - p.cn = nil - return err -} - -func (p *singleConnPool) Remove(cn *conn) error { - defer p.cnMtx.Unlock() - p.cnMtx.Lock() - if p.cn == nil { - panic("p.cn == nil") - } - if p.cn != cn { - panic("p.cn != cn") - } - if p.closed { - return errClosed - } - return p.remove() -} - -func (p *singleConnPool) remove() error { - err := p.pool.Remove(p.cn) - p.cn = nil - return err -} - -func (p *singleConnPool) Len() int { - defer p.cnMtx.Unlock() - p.cnMtx.Lock() - if p.cn == nil { - return 0 - } - return 1 -} - -func (p *singleConnPool) Size() int { - defer p.cnMtx.Unlock() - p.cnMtx.Lock() - if p.cn == nil { - return 0 - } - return 1 -} - -func (p *singleConnPool) Filter(f func(*conn) bool) { - p.cnMtx.Lock() - if p.cn != nil { - if !f(p.cn) { - p.remove() - } - } - p.cnMtx.Unlock() -} - -func (p *singleConnPool) Close() error { - defer p.cnMtx.Unlock() - p.cnMtx.Lock() - if p.closed { - return nil - } - p.closed = true - var err error - if p.cn != nil { - if p.reusable { - err = p.put() - } else { - err = p.remove() - } - } - return err -} diff --git a/vendor/gopkg.in/redis.v2/pubsub.go b/vendor/gopkg.in/redis.v2/pubsub.go deleted file mode 100644 index 6ac130bac..000000000 --- a/vendor/gopkg.in/redis.v2/pubsub.go +++ /dev/null @@ -1,134 +0,0 @@ -package redis - -import ( - "fmt" - "time" -) - -// Not thread-safe. -type PubSub struct { - *baseClient -} - -func (c *Client) PubSub() *PubSub { - return &PubSub{ - baseClient: &baseClient{ - opt: c.opt, - connPool: newSingleConnPool(c.connPool, false), - }, - } -} - -func (c *Client) Publish(channel, message string) *IntCmd { - req := NewIntCmd("PUBLISH", channel, message) - c.Process(req) - return req -} - -type Message struct { - Channel string - Payload string -} - -func (m *Message) String() string { - return fmt.Sprintf("Message<%s: %s>", m.Channel, m.Payload) -} - -type PMessage struct { - Channel string - Pattern string - Payload string -} - -func (m *PMessage) String() string { - return fmt.Sprintf("PMessage<%s: %s>", m.Channel, m.Payload) -} - -type Subscription struct { - Kind string - Channel string - Count int -} - -func (m *Subscription) String() string { - return fmt.Sprintf("%s: %s", m.Kind, m.Channel) -} - -func (c *PubSub) Receive() (interface{}, error) { - return c.ReceiveTimeout(0) -} - -func (c *PubSub) ReceiveTimeout(timeout time.Duration) (interface{}, error) { - cn, err := c.conn() - if err != nil { - return nil, err - } - cn.readTimeout = timeout - - cmd := NewSliceCmd() - if err := cmd.parseReply(cn.rd); err != nil { - return nil, err - } - - reply := cmd.Val() - - msgName := reply[0].(string) - switch msgName { - case "subscribe", "unsubscribe", "psubscribe", "punsubscribe": - return &Subscription{ - Kind: msgName, - Channel: reply[1].(string), - Count: int(reply[2].(int64)), - }, nil - case "message": - return &Message{ - Channel: reply[1].(string), - Payload: reply[2].(string), - }, nil - case "pmessage": - return &PMessage{ - Pattern: reply[1].(string), - Channel: reply[2].(string), - Payload: reply[3].(string), - }, nil - } - return nil, fmt.Errorf("redis: unsupported message name: %q", msgName) -} - -func (c *PubSub) subscribe(cmd string, channels ...string) error { - cn, err := c.conn() - if err != nil { - return err - } - - args := append([]string{cmd}, channels...) - req := NewSliceCmd(args...) - return c.writeCmd(cn, req) -} - -func (c *PubSub) Subscribe(channels ...string) error { - return c.subscribe("SUBSCRIBE", channels...) -} - -func (c *PubSub) PSubscribe(patterns ...string) error { - return c.subscribe("PSUBSCRIBE", patterns...) -} - -func (c *PubSub) unsubscribe(cmd string, channels ...string) error { - cn, err := c.conn() - if err != nil { - return err - } - - args := append([]string{cmd}, channels...) - req := NewSliceCmd(args...) - return c.writeCmd(cn, req) -} - -func (c *PubSub) Unsubscribe(channels ...string) error { - return c.unsubscribe("UNSUBSCRIBE", channels...) -} - -func (c *PubSub) PUnsubscribe(patterns ...string) error { - return c.unsubscribe("PUNSUBSCRIBE", patterns...) -} diff --git a/vendor/gopkg.in/redis.v2/rate_limit.go b/vendor/gopkg.in/redis.v2/rate_limit.go deleted file mode 100644 index 20d851270..000000000 --- a/vendor/gopkg.in/redis.v2/rate_limit.go +++ /dev/null @@ -1,53 +0,0 @@ -package redis - -import ( - "sync/atomic" - "time" -) - -type rateLimiter struct { - v int64 - - _closed int64 -} - -func newRateLimiter(limit time.Duration, bucketSize int) *rateLimiter { - rl := &rateLimiter{ - v: int64(bucketSize), - } - go rl.loop(limit, int64(bucketSize)) - return rl -} - -func (rl *rateLimiter) loop(limit time.Duration, bucketSize int64) { - for { - if rl.closed() { - break - } - if v := atomic.LoadInt64(&rl.v); v < bucketSize { - atomic.AddInt64(&rl.v, 1) - } - time.Sleep(limit) - } -} - -func (rl *rateLimiter) Check() bool { - for { - if v := atomic.LoadInt64(&rl.v); v > 0 { - if atomic.CompareAndSwapInt64(&rl.v, v, v-1) { - return true - } - } else { - return false - } - } -} - -func (rl *rateLimiter) Close() error { - atomic.StoreInt64(&rl._closed, 1) - return nil -} - -func (rl *rateLimiter) closed() bool { - return atomic.LoadInt64(&rl._closed) == 1 -} diff --git a/vendor/gopkg.in/redis.v2/redis.go b/vendor/gopkg.in/redis.v2/redis.go deleted file mode 100644 index 0d15dc8f8..000000000 --- a/vendor/gopkg.in/redis.v2/redis.go +++ /dev/null @@ -1,231 +0,0 @@ -package redis - -import ( - "log" - "net" - "time" -) - -type baseClient struct { - connPool pool - opt *options - cmds []Cmder -} - -func (c *baseClient) writeCmd(cn *conn, cmds ...Cmder) error { - buf := cn.buf[:0] - for _, cmd := range cmds { - buf = appendArgs(buf, cmd.args()) - } - - _, err := cn.Write(buf) - return err -} - -func (c *baseClient) conn() (*conn, error) { - cn, isNew, err := c.connPool.Get() - if err != nil { - return nil, err - } - - if isNew { - if err := c.initConn(cn); err != nil { - c.removeConn(cn) - return nil, err - } - } - - return cn, nil -} - -func (c *baseClient) initConn(cn *conn) error { - if c.opt.Password == "" && c.opt.DB == 0 { - return nil - } - - pool := newSingleConnPool(c.connPool, false) - pool.SetConn(cn) - - // Client is not closed because we want to reuse underlying connection. - client := &Client{ - baseClient: &baseClient{ - opt: c.opt, - connPool: pool, - }, - } - - if c.opt.Password != "" { - if err := client.Auth(c.opt.Password).Err(); err != nil { - return err - } - } - - if c.opt.DB > 0 { - if err := client.Select(c.opt.DB).Err(); err != nil { - return err - } - } - - return nil -} - -func (c *baseClient) freeConn(cn *conn, ei error) error { - if cn.rd.Buffered() > 0 { - return c.connPool.Remove(cn) - } - if _, ok := ei.(redisError); ok { - return c.connPool.Put(cn) - } - return c.connPool.Remove(cn) -} - -func (c *baseClient) removeConn(cn *conn) { - if err := c.connPool.Remove(cn); err != nil { - log.Printf("pool.Remove failed: %s", err) - } -} - -func (c *baseClient) putConn(cn *conn) { - if err := c.connPool.Put(cn); err != nil { - log.Printf("pool.Put failed: %s", err) - } -} - -func (c *baseClient) Process(cmd Cmder) { - if c.cmds == nil { - c.run(cmd) - } else { - c.cmds = append(c.cmds, cmd) - } -} - -func (c *baseClient) run(cmd Cmder) { - cn, err := c.conn() - if err != nil { - cmd.setErr(err) - return - } - - if timeout := cmd.writeTimeout(); timeout != nil { - cn.writeTimeout = *timeout - } else { - cn.writeTimeout = c.opt.WriteTimeout - } - - if timeout := cmd.readTimeout(); timeout != nil { - cn.readTimeout = *timeout - } else { - cn.readTimeout = c.opt.ReadTimeout - } - - if err := c.writeCmd(cn, cmd); err != nil { - c.freeConn(cn, err) - cmd.setErr(err) - return - } - - if err := cmd.parseReply(cn.rd); err != nil { - c.freeConn(cn, err) - return - } - - c.putConn(cn) -} - -// Close closes the client, releasing any open resources. -func (c *baseClient) Close() error { - return c.connPool.Close() -} - -//------------------------------------------------------------------------------ - -type options struct { - Password string - DB int64 - - DialTimeout time.Duration - ReadTimeout time.Duration - WriteTimeout time.Duration - - PoolSize int - IdleTimeout time.Duration -} - -type Options struct { - Network string - Addr string - - // Dialer creates new network connection and has priority over - // Network and Addr options. - Dialer func() (net.Conn, error) - - Password string - DB int64 - - DialTimeout time.Duration - ReadTimeout time.Duration - WriteTimeout time.Duration - - PoolSize int - IdleTimeout time.Duration -} - -func (opt *Options) getPoolSize() int { - if opt.PoolSize == 0 { - return 10 - } - return opt.PoolSize -} - -func (opt *Options) getDialTimeout() time.Duration { - if opt.DialTimeout == 0 { - return 5 * time.Second - } - return opt.DialTimeout -} - -func (opt *Options) options() *options { - return &options{ - DB: opt.DB, - Password: opt.Password, - - DialTimeout: opt.getDialTimeout(), - ReadTimeout: opt.ReadTimeout, - WriteTimeout: opt.WriteTimeout, - - PoolSize: opt.getPoolSize(), - IdleTimeout: opt.IdleTimeout, - } -} - -type Client struct { - *baseClient -} - -func NewClient(clOpt *Options) *Client { - opt := clOpt.options() - dialer := clOpt.Dialer - if dialer == nil { - dialer = func() (net.Conn, error) { - return net.DialTimeout(clOpt.Network, clOpt.Addr, opt.DialTimeout) - } - } - return &Client{ - baseClient: &baseClient{ - opt: opt, - connPool: newConnPool(newConnFunc(dialer), opt), - }, - } -} - -// Deprecated. Use NewClient instead. -func NewTCPClient(opt *Options) *Client { - opt.Network = "tcp" - return NewClient(opt) -} - -// Deprecated. Use NewClient instead. -func NewUnixClient(opt *Options) *Client { - opt.Network = "unix" - return NewClient(opt) -} diff --git a/vendor/gopkg.in/redis.v2/script.go b/vendor/gopkg.in/redis.v2/script.go deleted file mode 100644 index 96c35f514..000000000 --- a/vendor/gopkg.in/redis.v2/script.go +++ /dev/null @@ -1,52 +0,0 @@ -package redis - -import ( - "crypto/sha1" - "encoding/hex" - "io" - "strings" -) - -type scripter interface { - Eval(script string, keys []string, args []string) *Cmd - EvalSha(sha1 string, keys []string, args []string) *Cmd - ScriptExists(scripts ...string) *BoolSliceCmd - ScriptLoad(script string) *StringCmd -} - -type Script struct { - src, hash string -} - -func NewScript(src string) *Script { - h := sha1.New() - io.WriteString(h, src) - return &Script{ - src: src, - hash: hex.EncodeToString(h.Sum(nil)), - } -} - -func (s *Script) Load(c scripter) *StringCmd { - return c.ScriptLoad(s.src) -} - -func (s *Script) Exists(c scripter) *BoolSliceCmd { - return c.ScriptExists(s.src) -} - -func (s *Script) Eval(c scripter, keys []string, args []string) *Cmd { - return c.Eval(s.src, keys, args) -} - -func (s *Script) EvalSha(c scripter, keys []string, args []string) *Cmd { - return c.EvalSha(s.hash, keys, args) -} - -func (s *Script) Run(c *Client, keys []string, args []string) *Cmd { - r := s.EvalSha(c, keys, args) - if err := r.Err(); err != nil && strings.HasPrefix(err.Error(), "NOSCRIPT ") { - return s.Eval(c, keys, args) - } - return r -} diff --git a/vendor/gopkg.in/redis.v2/sentinel.go b/vendor/gopkg.in/redis.v2/sentinel.go deleted file mode 100644 index d3ffeca9a..000000000 --- a/vendor/gopkg.in/redis.v2/sentinel.go +++ /dev/null @@ -1,291 +0,0 @@ -package redis - -import ( - "errors" - "log" - "net" - "strings" - "sync" - "time" -) - -//------------------------------------------------------------------------------ - -type FailoverOptions struct { - MasterName string - SentinelAddrs []string - - Password string - DB int64 - - PoolSize int - - DialTimeout time.Duration - ReadTimeout time.Duration - WriteTimeout time.Duration - IdleTimeout time.Duration -} - -func (opt *FailoverOptions) getPoolSize() int { - if opt.PoolSize == 0 { - return 10 - } - return opt.PoolSize -} - -func (opt *FailoverOptions) getDialTimeout() time.Duration { - if opt.DialTimeout == 0 { - return 5 * time.Second - } - return opt.DialTimeout -} - -func (opt *FailoverOptions) options() *options { - return &options{ - DB: opt.DB, - Password: opt.Password, - - DialTimeout: opt.getDialTimeout(), - ReadTimeout: opt.ReadTimeout, - WriteTimeout: opt.WriteTimeout, - - PoolSize: opt.getPoolSize(), - IdleTimeout: opt.IdleTimeout, - } -} - -func NewFailoverClient(failoverOpt *FailoverOptions) *Client { - opt := failoverOpt.options() - failover := &sentinelFailover{ - masterName: failoverOpt.MasterName, - sentinelAddrs: failoverOpt.SentinelAddrs, - - opt: opt, - } - return &Client{ - baseClient: &baseClient{ - opt: opt, - connPool: failover.Pool(), - }, - } -} - -//------------------------------------------------------------------------------ - -type sentinelClient struct { - *baseClient -} - -func newSentinel(clOpt *Options) *sentinelClient { - opt := clOpt.options() - opt.Password = "" - opt.DB = 0 - dialer := func() (net.Conn, error) { - return net.DialTimeout("tcp", clOpt.Addr, opt.DialTimeout) - } - return &sentinelClient{ - baseClient: &baseClient{ - opt: opt, - connPool: newConnPool(newConnFunc(dialer), opt), - }, - } -} - -func (c *sentinelClient) PubSub() *PubSub { - return &PubSub{ - baseClient: &baseClient{ - opt: c.opt, - connPool: newSingleConnPool(c.connPool, false), - }, - } -} - -func (c *sentinelClient) GetMasterAddrByName(name string) *StringSliceCmd { - cmd := NewStringSliceCmd("SENTINEL", "get-master-addr-by-name", name) - c.Process(cmd) - return cmd -} - -func (c *sentinelClient) Sentinels(name string) *SliceCmd { - cmd := NewSliceCmd("SENTINEL", "sentinels", name) - c.Process(cmd) - return cmd -} - -type sentinelFailover struct { - masterName string - sentinelAddrs []string - - opt *options - - pool pool - poolOnce sync.Once - - lock sync.RWMutex - _sentinel *sentinelClient -} - -func (d *sentinelFailover) dial() (net.Conn, error) { - addr, err := d.MasterAddr() - if err != nil { - return nil, err - } - return net.DialTimeout("tcp", addr, d.opt.DialTimeout) -} - -func (d *sentinelFailover) Pool() pool { - d.poolOnce.Do(func() { - d.pool = newConnPool(newConnFunc(d.dial), d.opt) - }) - return d.pool -} - -func (d *sentinelFailover) MasterAddr() (string, error) { - defer d.lock.Unlock() - d.lock.Lock() - - // Try last working sentinel. - if d._sentinel != nil { - addr, err := d._sentinel.GetMasterAddrByName(d.masterName).Result() - if err != nil { - log.Printf("redis-sentinel: GetMasterAddrByName %q failed: %s", d.masterName, err) - d.resetSentinel() - } else { - addr := net.JoinHostPort(addr[0], addr[1]) - log.Printf("redis-sentinel: %q addr is %s", d.masterName, addr) - return addr, nil - } - } - - for i, sentinelAddr := range d.sentinelAddrs { - sentinel := newSentinel(&Options{ - Addr: sentinelAddr, - - DB: d.opt.DB, - Password: d.opt.Password, - - DialTimeout: d.opt.DialTimeout, - ReadTimeout: d.opt.ReadTimeout, - WriteTimeout: d.opt.WriteTimeout, - - PoolSize: d.opt.PoolSize, - IdleTimeout: d.opt.IdleTimeout, - }) - masterAddr, err := sentinel.GetMasterAddrByName(d.masterName).Result() - if err != nil { - log.Printf("redis-sentinel: GetMasterAddrByName %q failed: %s", d.masterName, err) - sentinel.Close() - continue - } - - // Push working sentinel to the top. - d.sentinelAddrs[0], d.sentinelAddrs[i] = d.sentinelAddrs[i], d.sentinelAddrs[0] - - d.setSentinel(sentinel) - addr := net.JoinHostPort(masterAddr[0], masterAddr[1]) - log.Printf("redis-sentinel: %q addr is %s", d.masterName, addr) - return addr, nil - } - - return "", errors.New("redis: all sentinels are unreachable") -} - -func (d *sentinelFailover) setSentinel(sentinel *sentinelClient) { - d.discoverSentinels(sentinel) - d._sentinel = sentinel - go d.listen() -} - -func (d *sentinelFailover) discoverSentinels(sentinel *sentinelClient) { - sentinels, err := sentinel.Sentinels(d.masterName).Result() - if err != nil { - log.Printf("redis-sentinel: Sentinels %q failed: %s", d.masterName, err) - return - } - for _, sentinel := range sentinels { - vals := sentinel.([]interface{}) - for i := 0; i < len(vals); i += 2 { - key := vals[i].(string) - if key == "name" { - sentinelAddr := vals[i+1].(string) - if !contains(d.sentinelAddrs, sentinelAddr) { - log.Printf( - "redis-sentinel: discovered new %q sentinel: %s", - d.masterName, sentinelAddr, - ) - d.sentinelAddrs = append(d.sentinelAddrs, sentinelAddr) - } - } - } - } -} - -func (d *sentinelFailover) listen() { - var pubsub *PubSub - for { - if pubsub == nil { - pubsub = d._sentinel.PubSub() - if err := pubsub.Subscribe("+switch-master"); err != nil { - log.Printf("redis-sentinel: Subscribe failed: %s", err) - d.lock.Lock() - d.resetSentinel() - d.lock.Unlock() - return - } - } - - msgIface, err := pubsub.Receive() - if err != nil { - log.Printf("redis-sentinel: Receive failed: %s", err) - pubsub.Close() - return - } - - switch msg := msgIface.(type) { - case *Message: - switch msg.Channel { - case "+switch-master": - parts := strings.Split(msg.Payload, " ") - if parts[0] != d.masterName { - log.Printf("redis-sentinel: ignore new %s addr", parts[0]) - continue - } - addr := net.JoinHostPort(parts[3], parts[4]) - log.Printf( - "redis-sentinel: new %q addr is %s", - d.masterName, addr, - ) - d.pool.Filter(func(cn *conn) bool { - if cn.RemoteAddr().String() != addr { - log.Printf( - "redis-sentinel: closing connection to old master %s", - cn.RemoteAddr(), - ) - return false - } - return true - }) - default: - log.Printf("redis-sentinel: unsupported message: %s", msg) - } - case *Subscription: - // Ignore. - default: - log.Printf("redis-sentinel: unsupported message: %s", msgIface) - } - } -} - -func (d *sentinelFailover) resetSentinel() { - d._sentinel.Close() - d._sentinel = nil -} - -func contains(slice []string, str string) bool { - for _, s := range slice { - if s == str { - return true - } - } - return false -} diff --git a/vendor/vendor.json b/vendor/vendor.json deleted file mode 100644 index 982657aca..000000000 --- a/vendor/vendor.json +++ /dev/null @@ -1,797 +0,0 @@ -{ - "comment": "", - "heroku": { - "install": ["."], - "sync": false - }, - "ignore": "test", - "package": [ - { - "checksumSHA1": "IyfS7Rbl6OgR83QR7TOfKdDCq+M=", - "path": "github.com/Unknwon/cae", - "revision": "c6aac99ea2cae2ebaf23f26f76b04fe3fcfc9f8c", - "revisionTime": "2016-07-15T03:28:08Z" - }, - { - "checksumSHA1": "NqlZvp3s2Z8jy1X9HpARViZ/hhY=", - "path": "github.com/Unknwon/cae/zip", - "revision": "c6aac99ea2cae2ebaf23f26f76b04fe3fcfc9f8c", - "revisionTime": "2016-07-15T03:28:08Z" - }, - { - "checksumSHA1": "7HXb3cry6luicWeJM9Uxwzfo9Rs=", - "path": "github.com/Unknwon/com", - "revision": "0db4a625e949e956314d7d1adea9bf82384cc10c", - "revisionTime": "2017-02-13T07:20:14Z" - }, - { - "checksumSHA1": "qbYhQkK6nb2oZ9OOyyuQpWD9fXY=", - "path": "github.com/Unknwon/i18n", - "revision": "e0eb0cef13c5eadc03d6993f3069c72e566004b7", - "revisionTime": "2017-02-18T21:29:01Z" - }, - { - "checksumSHA1": "VI3Bz1L335gsrP1ZF0v3f+WWy3M=", - "path": "github.com/Unknwon/paginater", - "revision": "7650849cd241779b451f30767bcb046ca13648b0", - "revisionTime": "2017-02-05T23:42:31Z" - }, - { - "checksumSHA1": "0rido7hYHQtfq3UJzVT5LClLAWc=", - "path": "github.com/beorn7/perks/quantile", - "revision": "3a771d992973f24aa725d07868b467d1ddfceafb", - "revisionTime": "2018-03-21T16:47:47Z" - }, - { - "checksumSHA1": "tLl952GRIVsso2Pk/IH3cMJaK8E=", - "path": "github.com/boombuler/barcode", - "revision": "0dc17c9053c4956f07a6db58b2863924fe03b643", - "revisionTime": "2017-04-03T18:34:37Z" - }, - { - "checksumSHA1": "tbwzn+sWiZv6veyXae3qRfTjlcQ=", - "path": "github.com/boombuler/barcode/qr", - "revision": "0dc17c9053c4956f07a6db58b2863924fe03b643", - "revisionTime": "2017-04-03T18:34:37Z" - }, - { - "checksumSHA1": "axe0OTdOjYa+XKDUYqzOv7FGaWo=", - "path": "github.com/boombuler/barcode/utils", - "revision": "0dc17c9053c4956f07a6db58b2863924fe03b643", - "revisionTime": "2017-04-03T18:34:37Z" - }, - { - "checksumSHA1": "fNAC4qgZDqF3kxq74/yyk3PWdy8=", - "path": "github.com/bradfitz/gomemcache/memcache", - "revision": "fb1f79c6b65acda83063cbc69f6bba1522558bfc", - "revisionTime": "2016-01-17T19:21:50Z" - }, - { - "checksumSHA1": "NKoZRlZix5wzCfN0rTg29GtKZRU=", - "path": "github.com/chaseadamsio/goorgeous", - "revision": "677defd0e024333503d8c946dd4ba3f32ad3e5d2", - "revisionTime": "2017-04-27T12:50:10Z" - }, - { - "checksumSHA1": "HG4+dlJq5h+07VI1rOlpc5KBlfg=", - "path": "github.com/denisenkom/go-mssqldb", - "revision": "9e40d9d5d325edfaa84d3374bfde6e1adce02d58", - "revisionTime": "2017-01-17T17:39:00Z" - }, - { - "checksumSHA1": "XEBl9iQQvfXNlwCSzyAOCqAlYEA=", - "path": "github.com/fatih/color", - "revision": "42c364ba490082e4815b5222728711b3440603eb", - "revisionTime": "2017-01-13T15:16:12Z" - }, - { - "checksumSHA1": "J0tcl2i76AQvMio9MWNQaucepYA=", - "path": "github.com/go-macaron/binding", - "revision": "ac54ee249c27dca7e76fad851a4a04b73bd1b183", - "revisionTime": "2017-06-11T06:58:19Z" - }, - { - "checksumSHA1": "6pSblXcT+pZJWhPCEyLZONiQUHg=", - "path": "github.com/go-macaron/cache", - "revision": "56173531277692bc2925924d51fda1cd0a6b8178", - "revisionTime": "2015-10-13T08:11:02Z" - }, - { - "checksumSHA1": "pvtjguZ5Ki0KbzOBRM1/Jh31klw=", - "path": "github.com/go-macaron/cache/memcache", - "revision": "56173531277692bc2925924d51fda1cd0a6b8178", - "revisionTime": "2015-10-13T08:11:02Z" - }, - { - "checksumSHA1": "lfJWq+CuwU5GAPtsSx3mRi4LOiw=", - "path": "github.com/go-macaron/cache/redis", - "revision": "56173531277692bc2925924d51fda1cd0a6b8178", - "revisionTime": "2015-10-13T08:11:02Z" - }, - { - "checksumSHA1": "kWnClaQsy/2YLvx2SrSUGgSyhzk=", - "path": "github.com/go-macaron/captcha", - "revision": "a9d45b762e2537878323cd8a4147644378f09be1", - "revisionTime": "2017-03-28T22:26:02Z" - }, - { - "checksumSHA1": "i52HJHpyI3avut3QAIrrD0h7gmY=", - "path": "github.com/go-macaron/csrf", - "revision": "6a9a7df172cc1fcd81e4585f44b09200b6087cc0", - "revisionTime": "2016-03-13T01:51:27Z" - }, - { - "checksumSHA1": "Rp4MJ0xFAy00EC0zlnwCpTEdYY8=", - "path": "github.com/go-macaron/gzip", - "revision": "cad1c6580a07c56f5f6bc52d66002a05985c5854", - "revisionTime": "2016-02-22T04:36:47Z" - }, - { - "checksumSHA1": "YMALCXSAIHZU9/K6EDI/kNTq3Hk=", - "path": "github.com/go-macaron/i18n", - "revision": "ef57533c3b0fc2d8581deda14937e52f11a203ab", - "revisionTime": "2016-06-12T09:28:37Z" - }, - { - "checksumSHA1": "y0olVbiMQ6/UOa/eh52XYnies90=", - "path": "github.com/go-macaron/inject", - "revision": "d8a0b8677191f4380287cfebd08e462217bac7ad", - "revisionTime": "2016-06-27T17:00:12Z" - }, - { - "checksumSHA1": "/t1kyFHHcqE/fUrjgdw9X8PlrqQ=", - "path": "github.com/go-macaron/session", - "revision": "cdb0ddf74421e2bbc43443789c46540f5235a71a", - "revisionTime": "2018-12-05T00:27:18Z" - }, - { - "checksumSHA1": "AGaED15nGifQkpU2bpU9Kgd7O4A=", - "path": "github.com/go-macaron/session/redis", - "revision": "cdb0ddf74421e2bbc43443789c46540f5235a71a", - "revisionTime": "2018-12-05T00:27:18Z" - }, - { - "checksumSHA1": "VMRkwnbl0mKWWvK/62CnIlv1oOg=", - "path": "github.com/go-macaron/toolbox", - "revision": "6766b8f16d1b135b250f09ba4dc4e24ab65b1107", - "revisionTime": "2017-02-20T18:37:56Z" - }, - { - "checksumSHA1": "wmiJbuFVCxg22zwXIeLsVCudyeY=", - "path": "github.com/go-sql-driver/mysql", - "revision": "c45f530f8e7fe40f4687eaa50d0c8c5f1b66f9e0", - "revisionTime": "2018-12-18T12:36:37Z" - }, - { - "checksumSHA1": "MjpLNawWs5TXcO1vjaZo8PjnYM4=", - "path": "github.com/go-xorm/builder", - "revision": "bad0a612f0d6277b953910822ab5dfb30dd18237", - "revisionTime": "2018-04-27T00:56:09Z" - }, - { - "checksumSHA1": "9nJmaqeYoDD1aqAX3CRNxVeOFI8=", - "path": "github.com/go-xorm/core", - "revision": "c10e21e7e1cec20e09398f2dfae385e58c8df555", - "revisionTime": "2018-05-04T05:52:46Z" - }, - { - "checksumSHA1": "enhif6uVt3K+XifO1XAFrRF26QI=", - "path": "github.com/go-xorm/xorm", - "revision": "a8bd843a55a7fdccb311d4fc51f8261e5035cdbb", - "revisionTime": "2018-06-06T08:43:14Z" - }, - { - "checksumSHA1": "1ft/4j5MFa7C9dPI9whL03HSUzk=", - "path": "github.com/gogits/chardet", - "revision": "2404f777256163ea3eadb273dada5dcb037993c0", - "revisionTime": "2015-01-15T10:35:09Z" - }, - { - "checksumSHA1": "fswdf/juszifcFH8ghXW6EM2PDs=", - "path": "github.com/gogits/cron", - "revision": "7f3990acf1833faa5ebd0e86f0a4c72a4b5eba3c", - "revisionTime": "2016-08-10T03:50:02Z" - }, - { - "checksumSHA1": "uKdOeK8zCfl5p7pZTRiZqDO2Tns=", - "path": "github.com/gogits/git-module", - "revision": "e76267f9b4e90e15a82189b72aae8bf1c799c52a", - "revisionTime": "2018-03-02T07:13:32Z" - }, - { - "checksumSHA1": "GBfb+meRaVNarQavLB/bzbDoBtY=", - "path": "github.com/gogits/go-gogs-client", - "revision": "bbae6af45f087cf346c09a510412c47e7739b15f", - "revisionTime": "2017-06-02T18:25:02Z" - }, - { - "checksumSHA1": "p4yoFWgDiTfpu1JYgh26t6+VDTk=", - "path": "github.com/gogits/go-libravatar", - "revision": "cd1abbd55d09b793672732a7a1dfdaa12a40dfd0", - "revisionTime": "2016-11-20T02:51:54Z" - }, - { - "checksumSHA1": "cccKtXG5TiCiCT9JA85slbJokfw=", - "path": "github.com/gogits/minwinsvc", - "revision": "95be6356811a6fbd4c2981713236971a3ccbb33a", - "revisionTime": "2017-03-01T03:54:11Z" - }, - { - "checksumSHA1": "aGCfPysPHTVbiC8YMMvSA8Gg7IE=", - "path": "github.com/gogs/git-module", - "revision": "0b61102314d3384a0d734a2a2c3c20207e72c4a8", - "revisionTime": "2018-12-15T04:53:36Z" - }, - { - "checksumSHA1": "81S19W6omjG5N+zVWeI2yRsSfw0=", - "path": "github.com/gogs/go-gogs-client", - "revision": "1cd0db3113de87dbac702b9f1a08d9bd0e7142bb", - "revisionTime": "2018-12-17T00:43:19Z" - }, - { - "checksumSHA1": "GaJLoEuMGnP5ofXvuweAI4wx06U=", - "path": "github.com/golang/protobuf/proto", - "revision": "a47340a8e42c4ceb44c00c2a05199e24b24fcaef", - "revisionTime": "2018-09-14T20:37:51Z" - }, - { - "checksumSHA1": "xbq5LdoNE+8lM/0TjMJCjOZ1Brc=", - "path": "github.com/google/go-github/github", - "revision": "a83ae98ad5d09188c49d6056edb60ec9bdf202bd", - "revisionTime": "2018-06-13T00:47:29Z" - }, - { - "checksumSHA1": "p3IB18uJRs4dL2K5yx24MrLYE9A=", - "path": "github.com/google/go-querystring/query", - "revision": "53e6ce116135b80d037921a7fdd5138cf32d7a8a", - "revisionTime": "2017-01-11T10:11:55Z" - }, - { - "checksumSHA1": "MLO0PyrK2MUO6A7Z9PxWuu43C/A=", - "path": "github.com/issue9/identicon", - "revision": "d36b54562f4cf70c83653e13dc95c220c79ef521", - "revisionTime": "2016-03-20T06:51:30Z" - }, - { - "checksumSHA1": "ItB3fp9m2Q0Sn7IM10f3h6HO5rs=", - "path": "github.com/jaytaylor/html2text", - "revision": "8fb95d837f7d6db1913fecfd7bcc5333e6499596", - "revisionTime": "2016-09-23T19:14:38Z" - }, - { - "checksumSHA1": "gydhX7ik17tDsfT5t97UDRseQ7g=", - "path": "github.com/json-iterator/go", - "revision": "8744d7c5c7b40a53e018f78d8c508b3315260b96", - "revisionTime": "2018-05-26T01:43:29Z" - }, - { - "checksumSHA1": "cIiyvAduLLFvu+tg1Qr5Jw3jeWo=", - "path": "github.com/jtolds/gls", - "revision": "b4936e06046bbecbb94cae9c18127ebe510a2cb9", - "revisionTime": "2018-11-10T20:28:10Z" - }, - { - "checksumSHA1": "vfzz7zTL9TZLpFO7NC1H6/Du3+s=", - "path": "github.com/klauspost/compress/flate", - "revision": "e3b7981a12dd3cab49afa1d3a50e715846f23732", - "revisionTime": "2016-11-06T14:34:36Z" - }, - { - "checksumSHA1": "V1lQwkoDR1fPmZBSgkmZjgZofeU=", - "path": "github.com/klauspost/compress/gzip", - "revision": "e3b7981a12dd3cab49afa1d3a50e715846f23732", - "revisionTime": "2016-11-06T14:34:36Z" - }, - { - "checksumSHA1": "iKPMvbAueGfdyHcWCgzwKzm8WVo=", - "path": "github.com/klauspost/cpuid", - "revision": "09cded8978dc9e80714c4d85b0322337b0a1e5e0", - "revisionTime": "2016-03-02T07:53:16Z" - }, - { - "checksumSHA1": "BM6ZlNJmtKy3GBoWwg2X55gnZ4A=", - "path": "github.com/klauspost/crc32", - "revision": "cb6bfca970f6908083f26f39a79009d608efd5cd", - "revisionTime": "2016-10-16T15:41:25Z" - }, - { - "checksumSHA1": "88ochAZ1SsbAH6DgBQ5eTUChFE0=", - "path": "github.com/lib/pq", - "revision": "ae8357db35d721c58dcdc911318b55bef6b1b001", - "revisionTime": "2016-10-14T01:16:34Z" - }, - { - "checksumSHA1": "xppHi82MLqVx1eyQmbhTesAEjx8=", - "path": "github.com/lib/pq/oid", - "revision": "ae8357db35d721c58dcdc911318b55bef6b1b001", - "revisionTime": "2016-10-14T01:16:34Z" - }, - { - "checksumSHA1": "I4njd26dG5hxFT2nawuByM4pxzY=", - "path": "github.com/mattn/go-colorable", - "revision": "d228849504861217f796da67fae4f6e347643f15", - "revisionTime": "2016-11-03T16:00:40Z" - }, - { - "checksumSHA1": "xZuhljnmBysJPta/lMyYmJdujCg=", - "path": "github.com/mattn/go-isatty", - "revision": "30a891c33c7cde7b02a981314b4228ec99380cca", - "revisionTime": "2016-11-23T14:36:37Z" - }, - { - "checksumSHA1": "9NOEwusDSfhREf0ix7ULW9f3hhw=", - "path": "github.com/mattn/go-sqlite3", - "revision": "2d44decb4941c9cdf72c22297b7890faf7da9bcb", - "revisionTime": "2016-12-15T04:15:57Z" - }, - { - "checksumSHA1": "bKMZjd2wPw13VwoE7mBeSv5djFA=", - "path": "github.com/matttproud/golang_protobuf_extensions/pbutil", - "revision": "c12348ce28de40eed0136aa2b644d0ee0650e56c", - "revisionTime": "2016-04-24T11:30:07Z" - }, - { - "checksumSHA1": "wf7QK5pRmd4/NORvkMK7uflvcO0=", - "path": "github.com/mcuadros/go-version", - "revision": "257f7b9a7d87427c8d7f89469a5958d57f8abd7c", - "revisionTime": "2016-11-05T18:36:18Z" - }, - { - "checksumSHA1": "r1klEIiloTrSYFv3cjaJcPHLkLo=", - "path": "github.com/microcosm-cc/bluemonday", - "revision": "f77f16ffc87a6a58814e64ae72d55f9c41374e6d", - "revisionTime": "2016-10-12T08:37:05Z" - }, - { - "checksumSHA1": "ZTcgWKWHsrX0RXYVXn5Xeb8Q0go=", - "path": "github.com/modern-go/concurrent", - "revision": "bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94", - "revisionTime": "2018-03-06T01:26:44Z" - }, - { - "checksumSHA1": "ntSr6NgBxGzQG1fgkl5IFgdjCLo=", - "path": "github.com/modern-go/reflect2", - "revision": "58118c1ea9161250907268a484af4dd6ed314280", - "revisionTime": "2018-05-11T05:30:14Z" - }, - { - "checksumSHA1": "lfOuMiAdiqc/dalUSBTvD5ZMSzA=", - "path": "github.com/msteinert/pam", - "revision": "02ccfbfaf0cc627aa3aec8ef7ed5cfeec5b43f63", - "revisionTime": "2015-12-04T16:05:44Z" - }, - { - "checksumSHA1": "r5eQHkttko6kxroDEENXbmXKrSs=", - "path": "github.com/nfnt/resize", - "revision": "891127d8d1b52734debe1b3c3d7e747502b6c366", - "revisionTime": "2016-07-24T20:39:20Z" - }, - { - "checksumSHA1": "woY3inKe+d7B1jPTFxVKNCCFH9c=", - "path": "github.com/pquerna/otp", - "revision": "9e1935374bc73ffe011187dafed51a412b90fe43", - "revisionTime": "2017-02-23T01:06:52Z" - }, - { - "checksumSHA1": "xo32aXW4ZXXRHJ/9E6m10vXJZAo=", - "path": "github.com/pquerna/otp/hotp", - "revision": "9e1935374bc73ffe011187dafed51a412b90fe43", - "revisionTime": "2017-02-23T01:06:52Z" - }, - { - "checksumSHA1": "Ie55pTQw1rnOZ8KDekSDXUWDT1I=", - "path": "github.com/pquerna/otp/totp", - "revision": "9e1935374bc73ffe011187dafed51a412b90fe43", - "revisionTime": "2017-02-23T01:06:52Z" - }, - { - "checksumSHA1": "Wl3OD/AvOrzpuv9oD11ev7pjgbY=", - "path": "github.com/prometheus/client_golang/prometheus", - "revision": "b7b390014bf2ea0679a8e477638afa1b706cbd70", - "revisionTime": "2018-09-14T11:24:05Z" - }, - { - "checksumSHA1": "UBqhkyjCz47+S19MVTigxJ2VjVQ=", - "path": "github.com/prometheus/client_golang/prometheus/internal", - "revision": "b7b390014bf2ea0679a8e477638afa1b706cbd70", - "revisionTime": "2018-09-14T11:24:05Z" - }, - { - "checksumSHA1": "d5BiEvD8MrgpWQ6PQJUvawJsMak=", - "path": "github.com/prometheus/client_golang/prometheus/promhttp", - "revision": "b7b390014bf2ea0679a8e477638afa1b706cbd70", - "revisionTime": "2018-09-14T11:24:05Z" - }, - { - "checksumSHA1": "V8xkqgmP66sq2ZW4QO5wi9a4oZE=", - "path": "github.com/prometheus/client_model/go", - "revision": "5c3871d89910bfb32f5fcab2aa4b9ec68e65a99f", - "revisionTime": "2018-07-12T10:51:10Z" - }, - { - "checksumSHA1": "Q0mjhUEjAklUQvPkrOChWGLpvRY=", - "path": "github.com/prometheus/common/expfmt", - "revision": "c7de2306084e37d54b8be01f3541a8464345e9a5", - "revisionTime": "2018-08-01T06:44:54Z" - }, - { - "checksumSHA1": "GWlM3d2vPYyNATtTFgftS10/A9w=", - "path": "github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg", - "revision": "c7de2306084e37d54b8be01f3541a8464345e9a5", - "revisionTime": "2018-08-01T06:44:54Z" - }, - { - "checksumSHA1": "EXTRY7DL9gFW8c341Dk6LDXCBn8=", - "path": "github.com/prometheus/common/model", - "revision": "c7de2306084e37d54b8be01f3541a8464345e9a5", - "revisionTime": "2018-08-01T06:44:54Z" - }, - { - "checksumSHA1": "jo/zxF+Pfj5yZjReTKGOACq9IBs=", - "path": "github.com/prometheus/procfs", - "revision": "05ee40e3a273f7245e8777337fc7b46e533a9a92", - "revisionTime": "2018-07-25T12:39:19Z" - }, - { - "checksumSHA1": "lv9rIcjbVEGo8AT1UCUZXhXrfQc=", - "path": "github.com/prometheus/procfs/internal/util", - "revision": "05ee40e3a273f7245e8777337fc7b46e533a9a92", - "revisionTime": "2018-07-25T12:39:19Z" - }, - { - "checksumSHA1": "HSP5hVT0CNMRa8+Xtz4z2Ic5U0E=", - "path": "github.com/prometheus/procfs/nfs", - "revision": "05ee40e3a273f7245e8777337fc7b46e533a9a92", - "revisionTime": "2018-07-25T12:39:19Z" - }, - { - "checksumSHA1": "yItvTQLUVqm/ArLEbvEhqG0T5a0=", - "path": "github.com/prometheus/procfs/xfs", - "revision": "05ee40e3a273f7245e8777337fc7b46e533a9a92", - "revisionTime": "2018-07-25T12:39:19Z" - }, - { - "checksumSHA1": "c7jHQZk5ZEsFR9EXsWJXkszPBZA=", - "path": "github.com/russross/blackfriday", - "revision": "5f33e7b7878355cd2b7e6b8eefc48a5472c69f70", - "revisionTime": "2016-10-03T16:27:22Z" - }, - { - "checksumSHA1": "zmC8/3V4ls53DJlNTKDZwPSC/dA=", - "path": "github.com/satori/go.uuid", - "revision": "b061729afc07e77a8aa4fad0a2fd840958f1942a", - "revisionTime": "2016-09-27T10:08:44Z" - }, - { - "checksumSHA1": "UzQgUwcGo3qDLKJ1fYttO/DYCwU=", - "path": "github.com/sergi/go-diff/diffmatchpatch", - "revision": "ce4a6e0e61d6908298eed511fc0683062d4c7f3b", - "revisionTime": "2016-09-28T15:06:20Z" - }, - { - "checksumSHA1": "kbgJvKG3NRoqU91rYnXGnyR+8HQ=", - "path": "github.com/shurcooL/sanitized_anchor_name", - "revision": "1dba4b3954bc059efc3991ec364f9f9a35f597d2", - "revisionTime": "2016-09-18T04:11:01Z" - }, - { - "checksumSHA1": "dqFYWn+mMsT6NP+k3Z3l5XMPbGw=", - "path": "github.com/smartystreets/assertions", - "revision": "b2515dfb413c5270515e0dc2e18bbbda06ff0bf8", - "revisionTime": "2019-07-19T19:21:57Z" - }, - { - "checksumSHA1": "a0CRqejGZH1LxO4G/DZsux7ULWA=", - "path": "github.com/smartystreets/assertions/internal/go-diff/diffmatchpatch", - "revision": "b2515dfb413c5270515e0dc2e18bbbda06ff0bf8", - "revisionTime": "2019-07-19T19:21:57Z" - }, - { - "checksumSHA1": "v6W3GIQMzr3QSXB2NtBa9X7SwiI=", - "path": "github.com/smartystreets/assertions/internal/go-render/render", - "revision": "b2515dfb413c5270515e0dc2e18bbbda06ff0bf8", - "revisionTime": "2019-07-19T19:21:57Z" - }, - { - "checksumSHA1": "r6FauVdOTFnwYQgrKGFuWUbIAJE=", - "path": "github.com/smartystreets/assertions/internal/oglematchers", - "revision": "b2515dfb413c5270515e0dc2e18bbbda06ff0bf8", - "revisionTime": "2019-07-19T19:21:57Z" - }, - { - "checksumSHA1": "7E7jpXiYAxa4vxc+2ftP4aBrDy8=", - "path": "github.com/smartystreets/goconvey", - "revision": "9d28bd7c0945047857c9740bd2eb3d62f98d3d35", - "revisionTime": "2019-07-10T18:59:42Z" - }, - { - "checksumSHA1": "clSz8OLgNZgATQ7mKB80ZRDdxDs=", - "path": "github.com/smartystreets/goconvey/convey", - "revision": "9d28bd7c0945047857c9740bd2eb3d62f98d3d35", - "revisionTime": "2019-07-10T18:59:42Z" - }, - { - "checksumSHA1": "6Mgn4H/4vpqYGlaIKZ0UwOmJN0E=", - "path": "github.com/smartystreets/goconvey/convey/gotest", - "revision": "9d28bd7c0945047857c9740bd2eb3d62f98d3d35", - "revisionTime": "2019-07-10T18:59:42Z" - }, - { - "checksumSHA1": "zUFddnpn7/A+gjwhShq642PM40I=", - "path": "github.com/smartystreets/goconvey/convey/reporting", - "revision": "9d28bd7c0945047857c9740bd2eb3d62f98d3d35", - "revisionTime": "2019-07-10T18:59:42Z" - }, - { - "checksumSHA1": "DjCJPoeFDfYI7LsteLMhxwDEnoE=", - "path": "github.com/smartystreets/goconvey/web/server/api", - "revision": "9d28bd7c0945047857c9740bd2eb3d62f98d3d35", - "revisionTime": "2019-07-10T18:59:42Z" - }, - { - "checksumSHA1": "Z+Mne86XlzUBRu8yCIoZVvRbieQ=", - "path": "github.com/smartystreets/goconvey/web/server/contract", - "revision": "9d28bd7c0945047857c9740bd2eb3d62f98d3d35", - "revisionTime": "2019-07-10T18:59:42Z" - }, - { - "checksumSHA1": "pWkPFCaZP+x5SZVw/QG/FKl94SA=", - "path": "github.com/smartystreets/goconvey/web/server/executor", - "revision": "9d28bd7c0945047857c9740bd2eb3d62f98d3d35", - "revisionTime": "2019-07-10T18:59:42Z" - }, - { - "checksumSHA1": "yaYihYltKDF/h2vuiUx8KbnsWMU=", - "path": "github.com/smartystreets/goconvey/web/server/messaging", - "revision": "9d28bd7c0945047857c9740bd2eb3d62f98d3d35", - "revisionTime": "2019-07-10T18:59:42Z" - }, - { - "checksumSHA1": "eq6QaILIjLAbT+PsxeI9YzIhZeY=", - "path": "github.com/smartystreets/goconvey/web/server/parser", - "revision": "9d28bd7c0945047857c9740bd2eb3d62f98d3d35", - "revisionTime": "2019-07-10T18:59:42Z" - }, - { - "checksumSHA1": "msXwJmK2tEpVWDyOETUCs3cHaho=", - "path": "github.com/smartystreets/goconvey/web/server/system", - "revision": "9d28bd7c0945047857c9740bd2eb3d62f98d3d35", - "revisionTime": "2019-07-10T18:59:42Z" - }, - { - "checksumSHA1": "3GcDERpXpjAF3Y/tRRGnfZ0suOk=", - "path": "github.com/smartystreets/goconvey/web/server/watch", - "revision": "9d28bd7c0945047857c9740bd2eb3d62f98d3d35", - "revisionTime": "2019-07-10T18:59:42Z" - }, - { - "checksumSHA1": "j+CXOooI5VyVEhKPTJkuL/GHPE0=", - "path": "github.com/urfave/cli", - "revision": "b6061c464d493dd94985211595687c862a0dd0bc", - "revisionTime": "2016-11-19T19:05:28Z" - }, - { - "checksumSHA1": "dwOedwBJ1EIK9+S3t108Bx054Y8=", - "path": "golang.org/x/crypto/curve25519", - "revision": "d8e61c69ab46ca38328da2f4995abaf93b252290", - "revisionTime": "2016-12-13T22:25:08Z" - }, - { - "checksumSHA1": "wGb//LjBPNxYHqk+dcLo7BjPXK8=", - "path": "golang.org/x/crypto/ed25519", - "revision": "d8e61c69ab46ca38328da2f4995abaf93b252290", - "revisionTime": "2016-12-13T22:25:08Z" - }, - { - "checksumSHA1": "LXFcVx8I587SnWmKycSDEq9yvK8=", - "path": "golang.org/x/crypto/ed25519/internal/edwards25519", - "revision": "d8e61c69ab46ca38328da2f4995abaf93b252290", - "revisionTime": "2016-12-13T22:25:08Z" - }, - { - "checksumSHA1": "MCeXr2RNeiG1XG6V+er1OR0qyeo=", - "path": "golang.org/x/crypto/md4", - "revision": "453249f01cfeb54c3d549ddb75ff152ca243f9d8", - "revisionTime": "2017-02-08T20:51:15Z" - }, - { - "checksumSHA1": "1MGpGDQqnUoRpv7VEcQrXOBydXE=", - "path": "golang.org/x/crypto/pbkdf2", - "revision": "d8e61c69ab46ca38328da2f4995abaf93b252290", - "revisionTime": "2016-12-13T22:25:08Z" - }, - { - "checksumSHA1": "fsrFs762jlaILyqqQImS1GfvIvw=", - "path": "golang.org/x/crypto/ssh", - "revision": "453249f01cfeb54c3d549ddb75ff152ca243f9d8", - "revisionTime": "2017-02-08T20:51:15Z" - }, - { - "checksumSHA1": "9jjO5GjLa0XF/nfWihF02RoH4qc=", - "path": "golang.org/x/net/context", - "revision": "45e771701b814666a7eb299e6c7a57d0b1799e91", - "revisionTime": "2016-12-15T19:42:18Z" - }, - { - "checksumSHA1": "vqc3a+oTUGX8PmD0TS+qQ7gmN8I=", - "path": "golang.org/x/net/html", - "revision": "45e771701b814666a7eb299e6c7a57d0b1799e91", - "revisionTime": "2016-12-15T19:42:18Z" - }, - { - "checksumSHA1": "00eQaGynDYrv3tL+C7l9xH0IDZg=", - "path": "golang.org/x/net/html/atom", - "revision": "45e771701b814666a7eb299e6c7a57d0b1799e91", - "revisionTime": "2016-12-15T19:42:18Z" - }, - { - "checksumSHA1": "barUU39reQ7LdgYLA323hQ/UGy4=", - "path": "golang.org/x/net/html/charset", - "revision": "45e771701b814666a7eb299e6c7a57d0b1799e91", - "revisionTime": "2016-12-15T19:42:18Z" - }, - { - "checksumSHA1": "KqecwXo3OO+p4N+E9RhlHvl9I+w=", - "path": "golang.org/x/sys/unix", - "revision": "b699b7032584f0953262cb2788a0ca19bb494703", - "revisionTime": "2016-11-10T11:58:56Z" - }, - { - "checksumSHA1": "fpW2dhGFC6SrVzipJx7fjg2DIH8=", - "path": "golang.org/x/sys/windows", - "revision": "b699b7032584f0953262cb2788a0ca19bb494703", - "revisionTime": "2016-11-10T11:58:56Z" - }, - { - "checksumSHA1": "IRqLaXM/VQRzkbXPuiqOxTb2W0Y=", - "path": "golang.org/x/sys/windows/svc", - "revision": "b699b7032584f0953262cb2788a0ca19bb494703", - "revisionTime": "2016-11-10T11:58:56Z" - }, - { - "checksumSHA1": "Mr4ur60bgQJnQFfJY0dGtwWwMPE=", - "path": "golang.org/x/text/encoding", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "gJG/5S8KrCA1QGkIkpa5a/wnmy4=", - "path": "golang.org/x/text/encoding/charmap", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "mI8YM2LehMxYDcauq5loMZr1pP8=", - "path": "golang.org/x/text/encoding/htmlindex", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "zeHyHebIZl1tGuwGllIhjfci+wI=", - "path": "golang.org/x/text/encoding/internal", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "TF4hoIqHVEAvOq67rfnSLSkcZ1Y=", - "path": "golang.org/x/text/encoding/internal/identifier", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "HeZV82ktrmgyAaYLtNFS0qYgspI=", - "path": "golang.org/x/text/encoding/japanese", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "8y87WJz3OkDWtPCIXxJcYpo+OY8=", - "path": "golang.org/x/text/encoding/korean", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "WYfmebIyX5Zae8NUfu9PsQjQff0=", - "path": "golang.org/x/text/encoding/simplifiedchinese", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "KKqYmi6fxt3r3uo4lExss2yTMbs=", - "path": "golang.org/x/text/encoding/traditionalchinese", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "G9LfJI9gySazd+MyyC6QbTHx4to=", - "path": "golang.org/x/text/encoding/unicode", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "hyNCcTwMQnV6/MK8uUW9E5H0J0M=", - "path": "golang.org/x/text/internal/tag", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "Qk7dljcrEK1BJkAEZguxAbG9dSo=", - "path": "golang.org/x/text/internal/utf8internal", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "bsNFI/kfmF0p43jLKiMYRqw9Dfs=", - "path": "golang.org/x/text/language", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "IV4MN7KGBSocu/5NR3le3sxup4Y=", - "path": "golang.org/x/text/runes", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "ziMb9+ANGRJSSIuxYdRbA+cDRBQ=", - "path": "golang.org/x/text/transform", - "revision": "fa5033c827cad7080e8e7047a0091945b0e1f031", - "revisionTime": "2016-10-16T07:29:15Z" - }, - { - "checksumSHA1": "6IzzHO9p32aHJhMYMwijccDUIVA=", - "path": "gopkg.in/alexcesaro/quotedprintable.v3", - "revision": "2caba252f4dc53eaf6b553000885530023f54623", - "revisionTime": "2015-07-16T17:19:45Z" - }, - { - "checksumSHA1": "wSu8owMAP7GixsYoSZ4CmKUVhnU=", - "path": "gopkg.in/asn1-ber.v1", - "revision": "4e86f4367175e39f69d9358a5f17b4dda270378d", - "revisionTime": "2015-09-24T05:17:56Z" - }, - { - "checksumSHA1": "aDNmMYhbmT5lPFTsBPUh4ZZ5pLA=", - "path": "gopkg.in/clog.v1", - "revision": "3bc2eaba5fa35df0338549cc1180dc45f6fc2a16", - "revisionTime": "2018-04-24T23:11:46Z" - }, - { - "checksumSHA1": "LIu3jihd3edOyIsJJK3V6vx2UZg=", - "path": "gopkg.in/editorconfig/editorconfig-core-go.v1", - "revision": "a872f05c2e34b37b567401384d202aff11ba06d4", - "revisionTime": "2016-08-25T01:23:04Z" - }, - { - "checksumSHA1": "iq5WdjScmTU+LfNoerLuwcnXpdM=", - "path": "gopkg.in/gomail.v2", - "revision": "81ebce5c23dfd25c6c67194b37d3dd3f338c98b1", - "revisionTime": "2016-04-11T21:29:32Z" - }, - { - "checksumSHA1": "CbAUaj2BnT21xuHSo3IhdG3L2gU=", - "path": "gopkg.in/ini.v1", - "revision": "cec2bdc49009247305a260b082a18e802d0fe292", - "revisionTime": "2018-06-15T00:35:39Z" - }, - { - "checksumSHA1": "7jPSjzw3mckHVQ2SjY4NvtIJR4g=", - "path": "gopkg.in/ldap.v2", - "revision": "d0a5ced67b4dc310b9158d63a2c6f9c5ec13f105", - "revisionTime": "2016-08-08T14:54:09Z" - }, - { - "checksumSHA1": "55kJCeuwX46fYJt2Ww1d7rxMOTo=", - "path": "gopkg.in/macaron.v1", - "revision": "dfcb80ca86e8534962c62812efd93209c7e600e7", - "revisionTime": "2018-12-17T00:30:54Z" - }, - { - "checksumSHA1": "6QPjE+qflEBHg+JPJd9e4iQuRAk=", - "path": "gopkg.in/redis.v2", - "revision": "e6179049628164864e6e84e973cfb56335748dea", - "revisionTime": "2014-12-09T11:07:59Z" - } - ], - "rootPath": "github.com/gogs/gogs" -}